summaryrefslogtreecommitdiff
path: root/src/mbgl/style/expression/parsing_context.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/style/expression/parsing_context.cpp')
-rw-r--r--src/mbgl/style/expression/parsing_context.cpp16
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) {