Chromium Code Reviews| Index: pkg/polymer_expressions/lib/eval.dart |
| diff --git a/pkg/polymer_expressions/lib/eval.dart b/pkg/polymer_expressions/lib/eval.dart |
| index 7b925a724cac8f21b9c04427bfc9def3fa3466cd..597fe44f77dafee9b811b6fd39ee618c5801e63e 100644 |
| --- a/pkg/polymer_expressions/lib/eval.dart |
| +++ b/pkg/polymer_expressions/lib/eval.dart |
| @@ -65,7 +65,7 @@ Object eval(Expression expr, Scope scope) { |
| * [ExpressionObsserver]. |
| */ |
| ExpressionObserver observe(Expression expr, Scope scope) { |
| - var observer = new ObserverBuilder(scope).visit(expr); |
| + var observer = new ObserverBuilder(/*scope*/).visit(expr); |
|
Jennifer Messerly
2014/03/17 23:10:08
did you mean to remove the scope argument to "obse
justinfagnani
2014/04/24 00:26:13
yep
|
| return observer; |
| } |
| @@ -164,6 +164,8 @@ class Scope { |
| Scope({this.model, Map<String, Object> variables, this.parent}) |
| : _variables = new ObservableMap.from(variables == null ? {} : variables); |
| + get variables => _variables; |
|
Jennifer Messerly
2014/03/17 23:10:08
another option is just to make _variables public.
justinfagnani
2014/04/24 00:26:13
Done.
|
| + |
| Object operator[](String name) { |
| if (name == 'this') { |
| return model; |
| @@ -196,18 +198,11 @@ class Scope { |
| if (parent != null) { |
| return parent.ownerOf(name); |
| } |
| + return null; |
| } |
| - bool contains(String name) { |
| - if (_variables.containsKey(name) || |
| - smoke.hasGetter(model.runtimeType, smoke.nameToSymbol(name))) { |
| - return true; |
| - } |
| - if (parent != null) { |
| - return parent.contains(name); |
| - } |
| - return false; |
| - } |
| + String toString() => 'Scope(parent: $parent, model: $model, ' |
| + 'variables: $variables)'; |
| } |
| Object _convert(v) { |
| @@ -270,18 +265,13 @@ class Updater extends RecursiveVisitor { |
| visitExpression(ExpressionObserver e) { |
| e._observe(scope); |
| } |
| - |
| - visitInExpression(InObserver c) { |
| - visit(c.right); |
| - visitExpression(c); |
| - } |
| } |
| class ObserverBuilder extends Visitor { |
| - final Scope scope; |
| +// final Scope scope; |
| final Queue parents = new Queue(); |
| - ObserverBuilder(this.scope); |
| + ObserverBuilder(/*this.scope*/); |
| visitEmptyExpression(EmptyExpression e) => new EmptyObserver(e); |
| @@ -369,14 +359,13 @@ class ObserverBuilder extends Visitor { |
| } |
| 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 |
| - var left = visit(i.left); |
| - var right = visit(i.right); |
| - var inexpr = new InObserver(i, left, right); |
| - right._parent = inexpr; |
| - return inexpr; |
| + throw new UnsupportedError("can't eval an 'in' expression"); |
| + } |
| + |
| + visitAsExpression(AsExpression i) { |
| + throw new UnsupportedError("can't eval an 'as' expression"); |
| } |
| + |
| } |
| class EmptyObserver extends ExpressionObserver<EmptyExpression> |
| @@ -654,47 +643,8 @@ class InvokeObserver extends ExpressionObserver<Invoke> implements Invoke { |
| accept(Visitor v) => v.visitInvoke(this); |
| } |
| -class InObserver extends ExpressionObserver<InExpression> |
| - implements InExpression { |
| - IdentifierObserver left; |
| - ExpressionObserver right; |
| - |
| - InObserver(Expression expr, this.left, this.right) : super(expr); |
| - |
| - _updateSelf(Scope scope) { |
| - Identifier identifier = left; |
| - var iterable = right._value; |
| - |
| - if (iterable is! Iterable && iterable != null) { |
| - throw new EvalException("right side of 'in' is not an iterator"); |
| - } |
| - |
| - if (iterable is ObservableList) { |
| - _subscription = iterable.listChanges.listen((_) => _invalidate(scope)); |
| - } |
| - |
| - // TODO: make Comprehension observable and update it |
| - _value = new Comprehension(identifier.value, iterable); |
| - } |
| - |
| - accept(Visitor v) => v.visitInExpression(this); |
| -} |
| - |
| _toBool(v) => (v == null) ? false : v; |
| -/** |
| - * A comprehension declaration ("a in b"). [identifier] is the loop variable |
| - * that's added to the scope during iteration. [iterable] is the set of |
| - * objects to iterate over. |
| - */ |
| -class Comprehension { |
| - final String identifier; |
| - final Iterable iterable; |
| - |
| - Comprehension(this.identifier, Iterable iterable) |
| - : iterable = (iterable != null) ? iterable : const []; |
| -} |
| - |
| class EvalException implements Exception { |
| final String message; |
| EvalException(this.message); |