diff options
Diffstat (limited to 'include/mbgl/style/conversion/expression.hpp')
-rw-r--r-- | include/mbgl/style/conversion/expression.hpp | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/include/mbgl/style/conversion/expression.hpp b/include/mbgl/style/conversion/expression.hpp index bce7c91396..601916250d 100644 --- a/include/mbgl/style/conversion/expression.hpp +++ b/include/mbgl/style/conversion/expression.hpp @@ -2,6 +2,7 @@ #include <memory> #include <mbgl/style/expression/parse.hpp> +#include <mbgl/style/expression/type.hpp> #include <mbgl/style/conversion.hpp> namespace mbgl { @@ -12,12 +13,20 @@ using namespace mbgl::style::expression; template<> struct Converter<std::unique_ptr<Expression>> { template <class V> - optional<std::unique_ptr<Expression>> operator()(const V& value, Error& error) const { - auto parsed = parseExpression(value, ParsingContext()); - if (parsed.template is<std::unique_ptr<Expression>>()) { - return std::move(parsed.template get<std::unique_ptr<Expression>>()); + optional<std::unique_ptr<Expression>> operator()(const V& value, Error& error, type::Type expected) const { + std::vector<ParsingError> errors; + auto parsed = parseExpression(value, ParsingContext(errors, expected)); + if (parsed) { + return std::move(*parsed); } - error = { parsed.template get<CompileError>().message }; + std::string combinedError; + for (const ParsingError& parsingError : errors) { + if (combinedError.size() > 0) { + combinedError += "\n"; + } + combinedError += parsingError.key + ": " + parsingError.message; + } + error = { combinedError }; return {}; }; }; |