From 89b075f592271bc11d58ebb7f854c453e81e3cf1 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Thu, 13 Sep 2018 14:27:57 -0700 Subject: [core] Auto-convert concat arguments to strings --- src/mbgl/style/expression/compound_expression.cpp | 13 ++++--------- src/mbgl/style/expression/value.cpp | 9 +++++++++ 2 files changed, 13 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/mbgl/style/expression/compound_expression.cpp b/src/mbgl/style/expression/compound_expression.cpp index 6e87167d5a..f5cbd7030b 100644 --- a/src/mbgl/style/expression/compound_expression.cpp +++ b/src/mbgl/style/expression/compound_expression.cpp @@ -310,12 +310,7 @@ std::unordered_map initiali define("typeof", [](const Value& v) -> Result { return toString(typeOf(v)); }); define("to-string", [](const Value& value) -> Result { - return value.match( - [](const NullValue&) -> Result { return std::string(); }, - [](const Color& c) -> Result { return c.stringify(); }, // avoid quoting - [](const std::string& s) -> Result { return s; }, // avoid quoting - [](const auto& v) -> Result { return stringify(v); } - ); + return toString(value); }); define("to-boolean", [](const Value& v) -> Result { @@ -507,10 +502,10 @@ std::unordered_map initiali define("downcase", [](const std::string& input) -> Result { return platform::lowercase(input); }); - define("concat", [](const Varargs& args) -> Result { + define("concat", [](const Varargs& args) -> Result { std::string s; - for (const std::string& arg : args) { - s += arg; + for (const Value& arg : args) { + s += toString(arg); } return s; }); diff --git a/src/mbgl/style/expression/value.cpp b/src/mbgl/style/expression/value.cpp index f089c918cd..4bac8116c2 100644 --- a/src/mbgl/style/expression/value.cpp +++ b/src/mbgl/style/expression/value.cpp @@ -34,6 +34,15 @@ type::Type typeOf(const Value& value) { ); } +std::string toString(const Value& value) { + return value.match( + [](const NullValue&) { return std::string(); }, + [](const Color& c) { return c.stringify(); }, // avoid quoting + [](const std::string& s) { return s; }, // avoid quoting + [](const auto& v_) { return stringify(v_); } + ); +} + void writeJSON(rapidjson::Writer& writer, const Value& value) { value.match( [&] (const NullValue&) { writer.Null(); }, -- cgit v1.2.1