diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2018-09-11 13:30:31 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2018-09-13 15:55:34 -0700 |
commit | df93047d405d17f86d54c6784e3664436085deb3 (patch) | |
tree | cbc443a7c9905dea97daa923a3b3d21a323d9fc6 /src | |
parent | 9efdc4c6c32d37c9fa680c301a60442b50348941 (diff) | |
download | qtlocation-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.
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/style/expression/check_subtype.cpp | 16 |
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> { |