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); |