| OLD | NEW |
| 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 } |
| OLD | NEW |