From 33cfd080c2ce0f2ed0c9ee3102cedc4baedf0d8c Mon Sep 17 00:00:00 2001 From: Ander Conselvan de Oliveira Date: Tue, 2 Apr 2019 11:59:13 +0300 Subject: [core] Fix most identity function with default legacy expression tests Add handling of default value to the conversion of legacy identity functions. The color and enum tests still don't pass though. --- src/mbgl/style/expression/dsl.cpp | 50 ++++++++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 14 deletions(-) (limited to 'src/mbgl/style/expression') diff --git a/src/mbgl/style/expression/dsl.cpp b/src/mbgl/style/expression/dsl.cpp index b4fd8fa551..d1d8dea799 100644 --- a/src/mbgl/style/expression/dsl.cpp +++ b/src/mbgl/style/expression/dsl.cpp @@ -54,32 +54,54 @@ std::unique_ptr literal(std::initializer_list value) { return literal(values); } -std::unique_ptr assertion(type::Type type, std::unique_ptr value) { - return std::make_unique(type, vec(std::move(value))); +std::unique_ptr assertion(type::Type type, + std::unique_ptr value, + optional> def) { + std::vector> v = vec(std::move(value)); + if (def) { + v.push_back(std::move(*def)); + } + return std::make_unique(type, std::move(v)); +} + +std::unique_ptr number(std::unique_ptr value, + optional> def) { + return assertion(type::Number, std::move(value), std::move(def)); } -std::unique_ptr number(std::unique_ptr value) { - return assertion(type::Number, std::move(value)); +std::unique_ptr string(std::unique_ptr value, + optional> def) { + return assertion(type::String, std::move(value), std::move(def)); } -std::unique_ptr string(std::unique_ptr value) { - return assertion(type::String, std::move(value)); +std::unique_ptr boolean(std::unique_ptr value, + optional> def) { + return assertion(type::Boolean, std::move(value), std::move(def)); } -std::unique_ptr boolean(std::unique_ptr value) { - return assertion(type::Boolean, std::move(value)); +std::unique_ptr coercion(type::Type type, + std::unique_ptr value, + optional> def) { + std::vector> v = vec(std::move(value)); + if (def) { + v.push_back(std::move(*def)); + } + return std::make_unique(type, std::move(v)); } -std::unique_ptr toColor(std::unique_ptr value) { - return std::make_unique(type::Color, vec(std::move(value))); +std::unique_ptr toColor(std::unique_ptr value, + optional> def) { + return coercion(type::Color, std::move(value), std::move(def)); } -std::unique_ptr toString(std::unique_ptr value) { - return std::make_unique(type::String, vec(std::move(value))); +std::unique_ptr toString(std::unique_ptr value, + optional> def) { + return coercion(type::String, std::move(value), std::move(def)); } -std::unique_ptr toFormatted(std::unique_ptr value) { - return std::make_unique(type::Formatted, vec(std::move(value))); +std::unique_ptr toFormatted(std::unique_ptr value, + optional> def) { + return coercion(type::Formatted, std::move(value), std::move(def)); } std::unique_ptr get(const char* value) { -- cgit v1.2.1