Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(954)

Unified Diff: pkg/polymer_expressions/lib/eval.dart

Issue 141703024: Refactor of PolymerExpressions. Adds "as" expressions. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address review comments Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
« no previous file with comments | « no previous file | pkg/polymer_expressions/lib/expression.dart » ('j') | pkg/polymer_expressions/lib/polymer_expressions.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698