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

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

Issue 180843004: Revert revision 33053 (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 library angular.core.parser.eval; 1 library angular.core.parser.eval;
2 2
3 import 'package:angular/core/parser/syntax.dart' as syntax; 3 import 'package:angular/core/parser/syntax.dart' as syntax;
4 import 'package:angular/core/parser/utils.dart'; 4 import 'package:angular/core/parser/utils.dart';
5 import 'package:angular/core/module.dart';
6 5
7 export 'package:angular/core/parser/eval_access.dart'; 6 export 'package:angular/core/parser/eval_access.dart';
8 export 'package:angular/core/parser/eval_calls.dart'; 7 export 'package:angular/core/parser/eval_calls.dart';
9 8
10 class Chain extends syntax.Chain { 9 class Chain extends syntax.Chain {
11 Chain(List<syntax.Expression> expressions) : super(expressions); 10 Chain(List<syntax.Expression> expressions) : super(expressions);
12 eval(scope, [FilterMap filters]) { 11 eval(scope) {
13 var result; 12 var result;
14 for (int i = 0; i < expressions.length; i++) { 13 for (int i = 0, length = expressions.length; i < length; i++) {
15 var last = expressions[i].eval(scope, filters); 14 var last = expressions[i].eval(scope);
16 if (last != null) result = last; 15 if (last != null) result = last;
17 } 16 }
18 return result; 17 return result;
19 } 18 }
20 } 19 }
21 20
22 class Filter extends syntax.Filter { 21 class Filter extends syntax.Filter {
22 final Function function;
23 final List allArguments; 23 final List allArguments;
24 Filter(syntax.Expression expression, String name, List<syntax.Expression> argu ments, 24 Filter(syntax.Expression expression, String name, List<syntax.Expression> argu ments,
25 List<syntax.Expression> this.allArguments) 25 Function this.function, List<syntax.Expression> this.allArguments)
26 : super(expression, name, arguments); 26 : super(expression, name, arguments);
27 27 eval(scope) => Function.apply(function, evalList(scope, allArguments));
28 eval(scope, [FilterMap filters]) =>
29 Function.apply(filters(name), evalList(scope, allArguments, filters));
30 } 28 }
31 29
32 class Assign extends syntax.Assign { 30 class Assign extends syntax.Assign {
33 Assign(syntax.Expression target, value) : super(target, value); 31 Assign(syntax.Expression target, value) : super(target, value);
34 eval(scope, [FilterMap filters]) => 32 eval(scope) => target.assign(scope, value.eval(scope));
35 target.assign(scope, value.eval(scope, filters));
36 } 33 }
37 34
38 class Conditional extends syntax.Conditional { 35 class Conditional extends syntax.Conditional {
39 Conditional(syntax.Expression condition, 36 Conditional(syntax.Expression condition,
40 syntax.Expression yes, syntax.Expression no): super(condition, yes , no); 37 syntax.Expression yes, syntax.Expression no): super(condition, yes , no);
41 eval(scope, [FilterMap filters]) => toBool(condition.eval(scope)) 38 eval(scope) => toBool(condition.eval(scope))
42 ? yes.eval(scope) 39 ? yes.eval(scope)
43 : no.eval(scope); 40 : no.eval(scope);
44 } 41 }
45 42
46 class PrefixNot extends syntax.Prefix { 43 class PrefixNot extends syntax.Prefix {
47 PrefixNot(syntax.Expression expression) : super('!', expression); 44 PrefixNot(syntax.Expression expression) : super('!', expression);
48 eval(scope, [FilterMap filters]) => !toBool(expression.eval(scope)); 45 eval(scope) => !toBool(expression.eval(scope));
49 } 46 }
50 47
51 class Binary extends syntax.Binary { 48 class Binary extends syntax.Binary {
52 Binary(String operation, syntax.Expression left, syntax.Expression right): 49 Binary(String operation, syntax.Expression left, syntax.Expression right):
53 super(operation, left, right); 50 super(operation, left, right);
54 eval(scope, [FilterMap filters]) { 51 eval(scope) {
55 var left = this.left.eval(scope); 52 var left = this.left.eval(scope);
56 switch (operation) { 53 switch (operation) {
57 case '&&': return toBool(left) && toBool(this.right.eval(scope)); 54 case '&&': return toBool(left) && toBool(this.right.eval(scope));
58 case '||': return toBool(left) || toBool(this.right.eval(scope)); 55 case '||': return toBool(left) || toBool(this.right.eval(scope));
59 } 56 }
60 var right = this.right.eval(scope); 57 var right = this.right.eval(scope);
61 switch (operation) { 58 switch (operation) {
62 case '+' : return autoConvertAdd(left, right); 59 case '+' : return autoConvertAdd(left, right);
63 case '-' : return left - right; 60 case '-' : return left - right;
64 case '*' : return left * right; 61 case '*' : return left * right;
65 case '/' : return left / right; 62 case '/' : return left / right;
66 case '~/' : return left ~/ right; 63 case '~/' : return left ~/ right;
67 case '%' : return left % right; 64 case '%' : return left % right;
68 case '==' : return left == right; 65 case '==' : return left == right;
69 case '!=' : return left != right; 66 case '!=' : return left != right;
70 case '<' : return left < right; 67 case '<' : return left < right;
71 case '>' : return left > right; 68 case '>' : return left > right;
72 case '<=' : return left <= right; 69 case '<=' : return left <= right;
73 case '>=' : return left >= right; 70 case '>=' : return left >= right;
74 case '^' : return left ^ right; 71 case '^' : return left ^ right;
75 case '&' : return left & right; 72 case '&' : return left & right;
76 } 73 }
77 throw new EvalError('Internal error [$operation] not handled'); 74 throw new EvalError('Internal error [$operation] not handled');
78 } 75 }
79 } 76 }
80 77
81 class LiteralPrimitive extends syntax.LiteralPrimitive { 78 class LiteralPrimitive extends syntax.LiteralPrimitive {
82 LiteralPrimitive(dynamic value) : super(value); 79 LiteralPrimitive(dynamic value) : super(value);
83 eval(scope, [FilterMap filters]) => value; 80 eval(scope) => value;
84 } 81 }
85 82
86 class LiteralString extends syntax.LiteralString { 83 class LiteralString extends syntax.LiteralString {
87 LiteralString(String value) : super(value); 84 LiteralString(String value) : super(value);
88 eval(scope, [FilterMap filters]) => value; 85 eval(scope) => value;
89 } 86 }
90 87
91 class LiteralArray extends syntax.LiteralArray { 88 class LiteralArray extends syntax.LiteralArray {
92 LiteralArray(List<syntax.Expression> elements) : super(elements); 89 LiteralArray(List<syntax.Expression> elements) : super(elements);
93 eval(scope, [FilterMap filters]) => 90 eval(scope) => elements.map((e) => e.eval(scope)).toList();
94 elements.map((e) => e.eval(scope, filters)).toList();
95 } 91 }
96 92
97 class LiteralObject extends syntax.LiteralObject { 93 class LiteralObject extends syntax.LiteralObject {
98 LiteralObject(List<String> keys, List<syntax.Expression>values) : super(keys, values); 94 LiteralObject(List<String> keys, List<syntax.Expression>values) : super(keys, values);
99 eval(scope, [FilterMap filters]) => 95 eval(scope) => new Map.fromIterables(keys, values.map((e) => e.eval(scope)));
100 new Map.fromIterables(keys, values.map((e) => e.eval(scope, filters)));
101 } 96 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698