summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2018-09-11 13:30:31 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2018-09-13 15:55:34 -0700
commitdf93047d405d17f86d54c6784e3664436085deb3 (patch)
treecbc443a7c9905dea97daa923a3b3d21a323d9fc6
parent9efdc4c6c32d37c9fa680c301a60442b50348941 (diff)
downloadqtlocation-mapboxgl-df93047d405d17f86d54c6784e3664436085deb3.tar.gz
[core] ["to-array", <item type>, <empty array>] should work for any item type
Ports https://github.com/mapbox/mapbox-gl-js/pull/7261.
-rw-r--r--src/mbgl/style/expression/check_subtype.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/mbgl/style/expression/check_subtype.cpp b/src/mbgl/style/expression/check_subtype.cpp
index 04a1643f0c..73f7d18a34 100644
--- a/src/mbgl/style/expression/check_subtype.cpp
+++ b/src/mbgl/style/expression/check_subtype.cpp
@@ -15,11 +15,19 @@ optional<std::string> checkSubtype(const Type& expected, const Type& t) {
optional<std::string> result = expected.match(
[&] (const Array& expectedArray) -> optional<std::string> {
- if (!t.is<Array>()) { return {errorMessage(expected, t)}; }
+ if (!t.is<Array>()) {
+ return {errorMessage(expected, t)};
+ }
const auto& actualArray = t.get<Array>();
- const auto err = checkSubtype(expectedArray.itemType, actualArray.itemType);
- if (err) return { errorMessage(expected, t) };
- if (expectedArray.N && expectedArray.N != actualArray.N) return { errorMessage(expected, t) };
+ if (!actualArray.N || *actualArray.N != 0 || actualArray.itemType != type::Value) {
+ const auto err = checkSubtype(expectedArray.itemType, actualArray.itemType);
+ if (err) {
+ return { errorMessage(expected, t) };
+ }
+ }
+ if (expectedArray.N && expectedArray.N != actualArray.N) {
+ return { errorMessage(expected, t) };
+ }
return {};
},
[&] (const ValueType&) -> optional<std::string> {