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

Unified Diff: third_party/pkg/angular/lib/core/parser/eval.dart

Issue 148453003: Updating Angular version (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 11 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: third_party/pkg/angular/lib/core/parser/eval.dart
diff --git a/third_party/pkg/angular/lib/core/parser/eval.dart b/third_party/pkg/angular/lib/core/parser/eval.dart
new file mode 100644
index 0000000000000000000000000000000000000000..0bd1fe2b366a196ab6c896864c3b013f5d4e32fe
--- /dev/null
+++ b/third_party/pkg/angular/lib/core/parser/eval.dart
@@ -0,0 +1,96 @@
+library angular.core.parser.eval;
+
+import 'package:angular/core/parser/syntax.dart' as syntax;
+import 'package:angular/core/parser/utils.dart';
+
+export 'package:angular/core/parser/eval_access.dart';
+export 'package:angular/core/parser/eval_calls.dart';
+
+class Chain extends syntax.Chain {
+ Chain(List<syntax.Expression> expressions) : super(expressions);
+ eval(scope) {
+ var result;
+ for (int i = 0, length = expressions.length; i < length; i++) {
+ var last = expressions[i].eval(scope);
+ if (last != null) result = last;
+ }
+ return result;
+ }
+}
+
+class Filter extends syntax.Filter {
+ final Function function;
+ final List allArguments;
+ Filter(syntax.Expression expression, String name, List<syntax.Expression> arguments,
+ Function this.function, List<syntax.Expression> this.allArguments)
+ : super(expression, name, arguments);
+ eval(scope) => Function.apply(function, evalList(scope, allArguments));
+}
+
+class Assign extends syntax.Assign {
+ Assign(syntax.Expression target, value) : super(target, value);
+ eval(scope) => target.assign(scope, value.eval(scope));
+}
+
+class Conditional extends syntax.Conditional {
+ Conditional(syntax.Expression condition,
+ syntax.Expression yes, syntax.Expression no): super(condition, yes, no);
+ eval(scope) => toBool(condition.eval(scope))
+ ? yes.eval(scope)
+ : no.eval(scope);
+}
+
+class PrefixNot extends syntax.Prefix {
+ PrefixNot(syntax.Expression expression) : super('!', expression);
+ eval(scope) => !toBool(expression.eval(scope));
+}
+
+class Binary extends syntax.Binary {
+ Binary(String operation, syntax.Expression left, syntax.Expression right):
+ super(operation, left, right);
+ eval(scope) {
+ var left = this.left.eval(scope);
+ switch (operation) {
+ case '&&': return toBool(left) && toBool(this.right.eval(scope));
+ case '||': return toBool(left) || toBool(this.right.eval(scope));
+ }
+ var right = this.right.eval(scope);
+ switch (operation) {
+ case '+' : return autoConvertAdd(left, right);
+ case '-' : return left - right;
+ case '*' : return left * right;
+ case '/' : return left / right;
+ case '~/' : return left ~/ right;
+ case '%' : return left % right;
+ case '==' : return left == right;
+ case '!=' : return left != right;
+ case '<' : return left < right;
+ case '>' : return left > right;
+ case '<=' : return left <= right;
+ case '>=' : return left >= right;
+ case '^' : return left ^ right;
+ case '&' : return left & right;
+ }
+ throw new EvalError('Internal error [$operation] not handled');
+ }
+}
+
+class LiteralPrimitive extends syntax.LiteralPrimitive {
+ LiteralPrimitive(dynamic value) : super(value);
+ eval(scope) => value;
+}
+
+class LiteralString extends syntax.LiteralString {
+ LiteralString(String value) : super(value);
+ eval(scope) => value;
+}
+
+class LiteralArray extends syntax.LiteralArray {
+ LiteralArray(List<syntax.Expression> elements) : super(elements);
+ eval(scope) => elements.map((e) => e.eval(scope)).toList();
+}
+
+class LiteralObject extends syntax.LiteralObject {
+ LiteralObject(List<String> keys, List<syntax.Expression>values) : super(keys, values);
+ eval(scope) => new Map.fromIterables(keys, values.map((e) => e.eval(scope)));
+}

Powered by Google App Engine
This is Rietveld 408576698