Correctly parse constant expressions in dds style properties (#11282)
* Correctly parse constant expressions in dds style properties Closes #10849 * Clarify
This commit is contained in:
@@ -8,6 +8,8 @@
|
||||
#include <mbgl/style/expression/is_expression.hpp>
|
||||
#include <mbgl/style/expression/is_constant.hpp>
|
||||
#include <mbgl/style/expression/find_zoom_curve.hpp>
|
||||
#include <mbgl/style/expression/literal.hpp>
|
||||
#include <mbgl/style/expression/value.hpp>
|
||||
|
||||
#include <unordered_set>
|
||||
|
||||
@@ -32,12 +34,25 @@ struct Converter<DataDrivenPropertyValue<T>> {
|
||||
return {};
|
||||
}
|
||||
|
||||
if (isFeatureConstant(**expression)) {
|
||||
bool featureConstant = isFeatureConstant(**expression);
|
||||
bool zoomConstant = isZoomConstant(**expression);
|
||||
|
||||
if (featureConstant && !zoomConstant) {
|
||||
return DataDrivenPropertyValue<T>(CameraFunction<T>(std::move(*expression)));
|
||||
} else if (isZoomConstant(**expression)) {
|
||||
} else if (!featureConstant && zoomConstant) {
|
||||
return DataDrivenPropertyValue<T>(SourceFunction<T>(std::move(*expression)));
|
||||
} else {
|
||||
} else if (!featureConstant && !zoomConstant) {
|
||||
return DataDrivenPropertyValue<T>(CompositeFunction<T>(std::move(*expression)));
|
||||
} else {
|
||||
// If an expression is neither zoom- nor feature-dependent, it
|
||||
// should have been reduced to a Literal when it was parsed.
|
||||
auto literal = dynamic_cast<Literal*>(expression->get());
|
||||
assert(literal);
|
||||
optional<T> constant = fromExpressionValue<T>(literal->getValue());
|
||||
if (!constant) {
|
||||
return {};
|
||||
}
|
||||
return DataDrivenPropertyValue<T>(*constant);
|
||||
}
|
||||
} else if (!isObject(value)) {
|
||||
optional<T> constant = convert<T>(value, error);
|
||||
|
||||
@@ -32,6 +32,10 @@ public:
|
||||
std::vector<optional<Value>> possibleOutputs() const override {
|
||||
return {{ value }};
|
||||
}
|
||||
|
||||
Value getValue() const {
|
||||
return value;
|
||||
}
|
||||
|
||||
private:
|
||||
Value value;
|
||||
|
||||
Reference in New Issue
Block a user