diff options
author | Lucas Wojciechowski <lucas@mapbox.com> | 2018-04-24 12:25:17 -0700 |
---|---|---|
committer | Asheem Mamoowala <asheem.mamoowala@mapbox.com> | 2018-05-09 16:08:50 -0700 |
commit | d080248f9f9728e25f3f40ba253f64415bc22f7f (patch) | |
tree | 5d50255ddf341f3b871a067933e644f76dd9f2fa | |
parent | 2436fa020df4732dedbb88e20d33ba2dd6079d91 (diff) | |
download | qtlocation-mapboxgl-d080248f9f9728e25f3f40ba253f64415bc22f7f.tar.gz |
Use `Literal::parse`
-rw-r--r-- | src/mbgl/style/conversion/filter.cpp | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/src/mbgl/style/conversion/filter.cpp b/src/mbgl/style/conversion/filter.cpp index ed4a801f12..f8bf3d1449 100644 --- a/src/mbgl/style/conversion/filter.cpp +++ b/src/mbgl/style/conversion/filter.cpp @@ -88,17 +88,22 @@ std::unique_ptr<expression::Expression> createExpression(std::string op, std::un args.push_back(std::move(expression)); return createExpression(op, std::move(args), error); } - -std::unique_ptr<expression::Expression> convertLiteral(const Convertible& convertible) { - optional<mapbox::geometry::value> value = toValue(convertible); - expression::Value expressionValue = value ? expression::toExpressionValue(*value) : expression::Null; - return std::make_unique<expression::Literal>(expressionValue); + +std::unique_ptr<expression::Expression> convertLiteral(const Convertible& convertible, Error& error) { + expression::ParsingContext parsingContext; + expression::ParseResult parseResult = expression::Literal::parse(convertible, parsingContext); + if (parseResult) { + return std::move(*parseResult); + } else { + error = { parsingContext.getCombinedErrors() }; + return {}; + } } -std::vector<std::unique_ptr<expression::Expression>> convertLiteralArray(const Convertible &input, std::size_t startIndex = 0) { +std::vector<std::unique_ptr<expression::Expression>> convertLiteralArray(const Convertible &input, Error& error, std::size_t startIndex = 0) { std::vector<std::unique_ptr<expression::Expression>> output; for (std::size_t i = startIndex; i < arrayLength(input); i++) { - output.push_back(convertLiteral(arrayMember(input, i))); + output.push_back(convertLiteral(arrayMember(input, i), error)); } return output; } @@ -111,11 +116,11 @@ std::unique_ptr<expression::Expression> convertLegacyComparisonFilter(const Conv error = { "filter property must be a string" }; return {}; } else if (*property == "$type") { - return createExpression("filter-type-" + *op, convertLiteralArray(values, 2), error); + return createExpression("filter-type-" + *op, convertLiteralArray(values, error, 2), error); } else if (*property == "$id") { - return createExpression("filter-id-" + *op, convertLiteralArray(values, 2), error); + return createExpression("filter-id-" + *op, convertLiteralArray(values, error, 2), error); } else { - return createExpression("filter-" + *op, convertLiteralArray(values, 1), error); + return createExpression("filter-" + *op, convertLiteralArray(values, error, 1), error); } } @@ -138,11 +143,11 @@ std::unique_ptr<expression::Expression> convertLegacyInFilter(const Convertible& } else if (arrayLength(values) == 0) { return std::make_unique<expression::Literal>(false); } else if (*property == "$type") { - return createExpression("filter-type-in", convertLiteralArray(values, 2), error); + return createExpression("filter-type-in", convertLiteralArray(values, error, 2), error); } else if (*property == "id") { - return createExpression("filter-id-in", convertLiteralArray(values, 2), error); + return createExpression("filter-id-in", convertLiteralArray(values, error, 2), error); } else { - return createExpression("filter-in", convertLiteralArray(values, 1), error); + return createExpression("filter-in", convertLiteralArray(values, error, 1), error); } } |