summaryrefslogtreecommitdiff
path: root/include/mbgl/style/expression/parse.hpp
diff options
context:
space:
mode:
authorAnand Thakker <github@anandthakker.net>2017-07-10 09:03:36 -0400
committerAnand Thakker <github@anandthakker.net>2017-07-10 09:03:36 -0400
commit2893112609489ae007b087474ac7a2349c0c04d9 (patch)
tree5224fbe61dd4ab632ff8149eea851b07031ac58b /include/mbgl/style/expression/parse.hpp
parent945cdebe9b37c3de764d382cf216d55ee0b7fce6 (diff)
downloadqtlocation-mapboxgl-2893112609489ae007b087474ac7a2349c0c04d9.tar.gz
Parse literal arrays and objects
Diffstat (limited to 'include/mbgl/style/expression/parse.hpp')
-rw-r--r--include/mbgl/style/expression/parse.hpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/include/mbgl/style/expression/parse.hpp b/include/mbgl/style/expression/parse.hpp
index 1f5802d4fb..cba2231988 100644
--- a/include/mbgl/style/expression/parse.hpp
+++ b/include/mbgl/style/expression/parse.hpp
@@ -37,7 +37,8 @@ ParseResult parseExpression(const V& value, const ParsingContext& context)
using namespace mbgl::style::conversion;
if (isArray(value)) {
- if (arrayLength(value) == 0) {
+ const std::size_t length = arrayLength(value);
+ if (length == 0) {
CompileError error = {
"Expected an array with at least one element. If you wanted a literal array, use [\"literal\", []].",
context.key()
@@ -55,6 +56,14 @@ ParseResult parseExpression(const V& value, const ParsingContext& context)
return error;
}
+ if (*op == "literal") {
+ if (length != 2) return CompileError {
+ "'literal' expression requires exactly one argument, but found " + std::to_string(length - 1) + " instead.",
+ context.key()
+ };
+ return LiteralExpression::parse(arrayMember(value, 1), ParsingContext(context, {1}, {"literal"}));
+ }
+
if (*op == "+") return LambdaExpression::parse<PlusExpression>(value, context);
if (*op == "-") return LambdaExpression::parse<MinusExpression>(value, context);
if (*op == "*") return LambdaExpression::parse<TimesExpression>(value, context);