| OLD | NEW |
| 1 library angular.core.parser.syntax; | 1 library angular.core.parser.syntax; |
| 2 | 2 |
| 3 import 'package:angular/core/parser/parser.dart' show LocalsWrapper; | 3 import 'package:angular/core/parser/parser.dart' show LocalsWrapper; |
| 4 import 'package:angular/core/parser/unparser.dart' show Unparser; | 4 import 'package:angular/core/parser/unparser.dart' show Unparser; |
| 5 import 'package:angular/core/parser/utils.dart' show EvalError; | 5 import 'package:angular/core/parser/utils.dart' show EvalError; |
| 6 import 'package:angular/core/module_internal.dart'; | 6 import 'package:angular/core/module.dart'; |
| 7 | 7 |
| 8 abstract class Visitor { | 8 abstract class Visitor { |
| 9 visit(Expression expression) => expression.accept(this); | 9 visit(Expression expression) |
| 10 => expression.accept(this); |
| 10 | 11 |
| 11 visitExpression(Expression expression) => null; | 12 visitExpression(Expression expression) |
| 12 visitChain(Chain expression) => visitExpression(expression); | 13 => null; |
| 13 visitFilter(Filter expression) => visitExpression(expression); | 14 visitChain(Chain expression) |
| 15 => visitExpression(expression); |
| 16 visitFilter(Filter expression) |
| 17 => visitExpression(expression); |
| 14 | 18 |
| 15 visitAssign(Assign expression) => visitExpression(expression); | 19 visitAssign(Assign expression) |
| 16 visitConditional(Conditional expression) => visitExpression(expression); | 20 => visitExpression(expression); |
| 21 visitConditional(Conditional expression) |
| 22 => visitExpression(expression); |
| 17 | 23 |
| 18 visitAccessScope(AccessScope expression) => visitExpression(expression); | 24 visitAccessScope(AccessScope expression) |
| 19 visitAccessMember(AccessMember expression) => visitExpression(expression); | 25 => visitExpression(expression); |
| 20 visitAccessKeyed(AccessKeyed expression) => visitExpression(expression); | 26 visitAccessMember(AccessMember expression) |
| 27 => visitExpression(expression); |
| 28 visitAccessKeyed(AccessKeyed expression) |
| 29 => visitExpression(expression); |
| 21 | 30 |
| 22 visitCallScope(CallScope expression) => visitExpression(expression); | 31 visitCallScope(CallScope expression) |
| 23 visitCallFunction(CallFunction expression) => visitExpression(expression); | 32 => visitExpression(expression); |
| 24 visitCallMember(CallMember expression) => visitExpression(expression); | 33 visitCallFunction(CallFunction expression) |
| 34 => visitExpression(expression); |
| 35 visitCallMember(CallMember expression) |
| 36 => visitExpression(expression); |
| 25 | 37 |
| 26 visitBinary(Binary expression) => visitExpression(expression); | 38 visitBinary(Binary expression) |
| 39 => visitExpression(expression); |
| 27 | 40 |
| 28 visitPrefix(Prefix expression) => visitExpression(expression); | 41 visitPrefix(Prefix expression) |
| 42 => visitExpression(expression); |
| 29 | 43 |
| 30 visitLiteral(Literal expression) => visitExpression(expression); | 44 visitLiteral(Literal expression) |
| 31 visitLiteralPrimitive(LiteralPrimitive expression) => | 45 => visitExpression(expression); |
| 32 visitLiteral(expression); | 46 visitLiteralPrimitive(LiteralPrimitive expression) |
| 33 visitLiteralString(LiteralString expression) => visitLiteral(expression); | 47 => visitLiteral(expression); |
| 34 visitLiteralArray(LiteralArray expression) => visitLiteral(expression); | 48 visitLiteralString(LiteralString expression) |
| 35 visitLiteralObject(LiteralObject expression) => visitLiteral(expression); | 49 => visitLiteral(expression); |
| 50 visitLiteralArray(LiteralArray expression) |
| 51 => visitLiteral(expression); |
| 52 visitLiteralObject(LiteralObject expression) |
| 53 => visitLiteral(expression); |
| 36 } | 54 } |
| 37 | 55 |
| 38 abstract class Expression { | 56 abstract class Expression { |
| 39 bool get isAssignable => false; | 57 bool get isAssignable => false; |
| 40 bool get isChain => false; | 58 bool get isChain => false; |
| 41 | 59 |
| 42 eval(scope, [FormatterMap formatters = defaultFormatterMap]) => | 60 eval(scope, [FilterMap filters = defaultFilterMap]) |
| 43 throw new EvalError("Cannot evaluate $this"); | 61 => throw new EvalError("Cannot evaluate $this"); |
| 44 assign(scope, value) => | 62 assign(scope, value) |
| 45 throw new EvalError("Cannot assign to $this"); | 63 => throw new EvalError("Cannot assign to $this"); |
| 46 bind(context, [LocalsWrapper wrapper]) => | 64 bind(context, [LocalsWrapper wrapper]) |
| 47 new BoundExpression(this, context, wrapper); | 65 => new BoundExpression(this, context, wrapper); |
| 48 | 66 |
| 49 accept(Visitor visitor); | 67 accept(Visitor visitor); |
| 50 String toString() => Unparser.unparse(this); | 68 String toString() => Unparser.unparse(this); |
| 51 } | 69 } |
| 52 | 70 |
| 53 class BoundExpression { | 71 class BoundExpression { |
| 54 final Expression expression; | 72 final Expression expression; |
| 55 final _context; | 73 final _context; |
| 56 final LocalsWrapper _wrapper; | 74 final LocalsWrapper _wrapper; |
| 57 BoundExpression(this.expression, this._context, this._wrapper); | 75 BoundExpression(this.expression, this._context, this._wrapper); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 } | 130 } |
| 113 | 131 |
| 114 class AccessKeyed extends Expression { | 132 class AccessKeyed extends Expression { |
| 115 final Expression object; | 133 final Expression object; |
| 116 final Expression key; | 134 final Expression key; |
| 117 AccessKeyed(this.object, this.key); | 135 AccessKeyed(this.object, this.key); |
| 118 bool get isAssignable => true; | 136 bool get isAssignable => true; |
| 119 accept(Visitor visitor) => visitor.visitAccessKeyed(this); | 137 accept(Visitor visitor) => visitor.visitAccessKeyed(this); |
| 120 } | 138 } |
| 121 | 139 |
| 122 class CallArguments { | |
| 123 final List<Expression> positionals; | |
| 124 final Map<String, Expression> named; | |
| 125 const CallArguments(this.positionals, this.named); | |
| 126 | |
| 127 int get arity => positionals.length + named.length; | |
| 128 | |
| 129 Expression operator[](int index) { | |
| 130 int split = positionals.length; | |
| 131 return index < split ? positionals[index] : named.values.elementAt(index - s
plit); | |
| 132 } | |
| 133 } | |
| 134 | |
| 135 class CallScope extends Expression { | 140 class CallScope extends Expression { |
| 136 final String name; | 141 final String name; |
| 137 final CallArguments arguments; | 142 final List<Expression> arguments; |
| 138 CallScope(this.name, this.arguments); | 143 CallScope(this.name, this.arguments); |
| 139 accept(Visitor visitor) => visitor.visitCallScope(this); | 144 accept(Visitor visitor) => visitor.visitCallScope(this); |
| 140 } | 145 } |
| 141 | 146 |
| 142 class CallFunction extends Expression { | 147 class CallFunction extends Expression { |
| 143 final Expression function; | 148 final Expression function; |
| 144 final CallArguments arguments; | 149 final List<Expression> arguments; |
| 145 CallFunction(this.function, this.arguments); | 150 CallFunction(this.function, this.arguments); |
| 146 accept(Visitor visitor) => visitor.visitCallFunction(this); | 151 accept(Visitor visitor) => visitor.visitCallFunction(this); |
| 147 } | 152 } |
| 148 | 153 |
| 149 class CallMember extends Expression { | 154 class CallMember extends Expression { |
| 150 final Expression object; | 155 final Expression object; |
| 151 final String name; | 156 final String name; |
| 152 final CallArguments arguments; | 157 final List<Expression> arguments; |
| 153 CallMember(this.object, this.name, this.arguments); | 158 CallMember(this.object, this.name, this.arguments); |
| 154 accept(Visitor visitor) => visitor.visitCallMember(this); | 159 accept(Visitor visitor) => visitor.visitCallMember(this); |
| 155 } | 160 } |
| 156 | 161 |
| 157 class Binary extends Expression { | 162 class Binary extends Expression { |
| 158 final String operation; | 163 final String operation; |
| 159 final Expression left; | 164 final Expression left; |
| 160 final Expression right; | 165 final Expression right; |
| 161 Binary(this.operation, this.left, this.right); | 166 Binary(this.operation, this.left, this.right); |
| 162 accept(Visitor visitor) => visitor.visitBinary(this); | 167 accept(Visitor visitor) => visitor.visitBinary(this); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 190 accept(Visitor visitor) => visitor.visitLiteralArray(this); | 195 accept(Visitor visitor) => visitor.visitLiteralArray(this); |
| 191 } | 196 } |
| 192 | 197 |
| 193 class LiteralObject extends Literal { | 198 class LiteralObject extends Literal { |
| 194 final List<String> keys; | 199 final List<String> keys; |
| 195 final List<Expression> values; | 200 final List<Expression> values; |
| 196 LiteralObject(this.keys, this.values); | 201 LiteralObject(this.keys, this.values); |
| 197 accept(Visitor visitor) => visitor.visitLiteralObject(this); | 202 accept(Visitor visitor) => visitor.visitLiteralObject(this); |
| 198 } | 203 } |
| 199 | 204 |
| 200 const defaultFormatterMap = const _DefaultFormatterMap(); | 205 const defaultFilterMap = const _DefaultFilterMap(); |
| 201 | 206 |
| 202 class _DefaultFormatterMap implements FormatterMap { | 207 class _DefaultFilterMap implements FilterMap { |
| 203 const _DefaultFormatterMap(); | 208 const _DefaultFilterMap(); |
| 204 | 209 |
| 205 call(name) => throw 'No Formatter: $name found!'; | 210 call(name) => throw 'No NgFilter: $name found!'; |
| 206 Type operator[](annotation) => null; | 211 Type operator[](annotation) => null; |
| 207 forEach(fn) { } | 212 forEach(fn) { } |
| 208 annotationsFor(type) => null; | 213 annotationsFor(type) => null; |
| 209 } | 214 } |
| OLD | NEW |