diff options
Diffstat (limited to 'src/mbgl/style/expression/parsing_context.cpp')
-rw-r--r-- | src/mbgl/style/expression/parsing_context.cpp | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/mbgl/style/expression/parsing_context.cpp b/src/mbgl/style/expression/parsing_context.cpp index fe3102f158..a4c04b03b1 100644 --- a/src/mbgl/style/expression/parsing_context.cpp +++ b/src/mbgl/style/expression/parsing_context.cpp @@ -32,19 +32,21 @@ namespace style { namespace expression { bool isConstant(const Expression& expression) { - if (auto varExpression = dynamic_cast<const Var*>(&expression)) { + if (expression.getKind() == Kind::Var) { + auto varExpression = static_cast<const Var*>(&expression); return isConstant(*varExpression->getBoundExpression()); } - if (auto compound = dynamic_cast<const CompoundExpressionBase*>(&expression)) { + if (expression.getKind() == Kind::CompoundExpression) { + auto compound = static_cast<const CompoundExpressionBase*>(&expression); if (compound->getName() == "error") { return false; } } - bool isTypeAnnotation = dynamic_cast<const Coercion*>(&expression) || - dynamic_cast<const Assertion*>(&expression) || - dynamic_cast<const ArrayAssertion*>(&expression); + bool isTypeAnnotation = expression.getKind() == Kind::Coercion || + expression.getKind() == Kind::Assertion || + expression.getKind() == Kind::ArrayAssertion; bool childrenConstant = true; expression.eachChild([&](const Expression& child) { @@ -58,7 +60,7 @@ bool isConstant(const Expression& expression) { if (isTypeAnnotation) { childrenConstant = childrenConstant && isConstant(child); } else { - childrenConstant = childrenConstant && dynamic_cast<const Literal*>(&child); + childrenConstant = childrenConstant && child.getKind() == Kind::Literal; } }); if (!childrenConstant) { @@ -186,7 +188,7 @@ ParseResult ParsingContext::parse(const Convertible& value, TypeAnnotationOption // If an expression's arguments are all constant, we can evaluate // it immediately and replace it with a literal value in the // parsed result. - if (!dynamic_cast<Literal *>(parsed->get()) && isConstant(**parsed)) { + if ((*parsed)->getKind() != Kind::Literal && isConstant(**parsed)) { EvaluationContext params(nullptr); EvaluationResult evaluated((*parsed)->evaluate(params)); if (!evaluated) { |