summaryrefslogtreecommitdiff
path: root/include/mbgl/style/conversion/expression.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/mbgl/style/conversion/expression.hpp')
-rw-r--r--include/mbgl/style/conversion/expression.hpp19
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 {};
};
};