diff options
-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> { |