| Index: pkg/polymer_expressions/lib/eval.dart
|
| diff --git a/pkg/polymer_expressions/lib/eval.dart b/pkg/polymer_expressions/lib/eval.dart
|
| index 29d2c027aba5c44bf47bd9a65548b50ca0ec3436..c931096cf87e9e993864a2d3b2ae107fdb263e1f 100644
|
| --- a/pkg/polymer_expressions/lib/eval.dart
|
| +++ b/pkg/polymer_expressions/lib/eval.dart
|
| @@ -370,6 +370,17 @@ class ObserverBuilder extends Visitor {
|
| return unary;
|
| }
|
|
|
| + visitTernaryOperator(TernaryOperator o) {
|
| + var condition = visit(o.condition);
|
| + var trueExpr = visit(o.trueExpr);
|
| + var falseExpr = visit(o.falseExpr);
|
| + var ternary = new TernaryObserver(o, condition, trueExpr, falseExpr);
|
| + condition._parent = ternary;
|
| + trueExpr._parent = ternary;
|
| + falseExpr._parent = ternary;
|
| + return ternary;
|
| + }
|
| +
|
| visitInExpression(InExpression i) {
|
| // don't visit the left. It's an identifier, but we don't want to evaluate
|
| // it, we just want to add it to the comprehension object
|
| @@ -525,6 +536,24 @@ class BinaryObserver extends ExpressionObserver<BinaryOperator>
|
|
|
| }
|
|
|
| +class TernaryObserver extends ExpressionObserver<TernaryOperator>
|
| + implements TernaryOperator {
|
| +
|
| + final ExpressionObserver condition;
|
| + final ExpressionObserver trueExpr;
|
| + final ExpressionObserver falseExpr;
|
| +
|
| + TernaryObserver(TernaryOperator expr, this.condition, this.trueExpr,
|
| + this.falseExpr) : super(expr);
|
| +
|
| + _updateSelf(Scope scope) {
|
| + _value = _toBool(condition._value) ? trueExpr._value : falseExpr._value;
|
| + }
|
| +
|
| + accept(Visitor v) => v.visitTernaryOperator(this);
|
| +
|
| +}
|
| +
|
| class GetterObserver extends ExpressionObserver<Getter> implements Getter {
|
| final ExpressionObserver receiver;
|
|
|
|
|