| OLD | NEW |
| (Empty) | |
| 1 library angular.core.parser.syntax; |
| 2 |
| 3 import 'package:angular/core/parser/parser.dart' show LocalsWrapper; |
| 4 import 'package:angular/core/parser/unparser.dart' show Unparser; |
| 5 import 'package:angular/core/parser/utils.dart' show EvalError; |
| 6 |
| 7 abstract class Visitor { |
| 8 visit(Expression expression) |
| 9 => expression.accept(this); |
| 10 |
| 11 visitExpression(Expression expression) |
| 12 => null; |
| 13 visitChain(Chain expression) |
| 14 => visitExpression(expression); |
| 15 visitFilter(Filter expression) |
| 16 => visitExpression(expression); |
| 17 |
| 18 visitAssign(Assign expression) |
| 19 => visitExpression(expression); |
| 20 visitConditional(Conditional expression) |
| 21 => visitExpression(expression); |
| 22 |
| 23 visitAccessScope(AccessScope expression) |
| 24 => visitExpression(expression); |
| 25 visitAccessMember(AccessMember expression) |
| 26 => visitExpression(expression); |
| 27 visitAccessKeyed(AccessKeyed expression) |
| 28 => visitExpression(expression); |
| 29 |
| 30 visitCallScope(CallScope expression) |
| 31 => visitExpression(expression); |
| 32 visitCallFunction(CallFunction expression) |
| 33 => visitExpression(expression); |
| 34 visitCallMember(CallMember expression) |
| 35 => visitExpression(expression); |
| 36 |
| 37 visitBinary(Binary expression) |
| 38 => visitExpression(expression); |
| 39 |
| 40 visitPrefix(Prefix expression) |
| 41 => visitExpression(expression); |
| 42 |
| 43 visitLiteral(Literal expression) |
| 44 => visitExpression(expression); |
| 45 visitLiteralPrimitive(LiteralPrimitive expression) |
| 46 => visitLiteral(expression); |
| 47 visitLiteralString(LiteralString expression) |
| 48 => visitLiteral(expression); |
| 49 visitLiteralArray(LiteralArray expression) |
| 50 => visitLiteral(expression); |
| 51 visitLiteralObject(LiteralObject expression) |
| 52 => visitLiteral(expression); |
| 53 } |
| 54 |
| 55 abstract class Expression { |
| 56 bool get isAssignable => false; |
| 57 bool get isChain => false; |
| 58 |
| 59 eval(scope) |
| 60 => throw new EvalError("Cannot evaluate $this"); |
| 61 assign(scope, value) |
| 62 => throw new EvalError("Cannot assign to $this"); |
| 63 bind(context, [LocalsWrapper wrapper]) |
| 64 => new BoundExpression(this, context, wrapper); |
| 65 |
| 66 accept(Visitor visitor); |
| 67 String toString() => Unparser.unparse(this); |
| 68 } |
| 69 |
| 70 class BoundExpression { |
| 71 final Expression expression; |
| 72 final _context; |
| 73 final LocalsWrapper _wrapper; |
| 74 BoundExpression(this.expression, this._context, this._wrapper); |
| 75 |
| 76 call([locals]) => expression.eval(_computeContext(locals)); |
| 77 assign(value, [locals]) => expression.assign(_computeContext(locals), value); |
| 78 |
| 79 _computeContext(locals) { |
| 80 if (locals == null) return _context; |
| 81 if (_wrapper != null) return _wrapper(_context, locals); |
| 82 throw new StateError("Locals $locals provided, but missing wrapper."); |
| 83 } |
| 84 } |
| 85 |
| 86 class Chain extends Expression { |
| 87 final List<Expression> expressions; |
| 88 Chain(this.expressions); |
| 89 bool get isChain => true; |
| 90 accept(Visitor visitor) => visitor.visitChain(this); |
| 91 } |
| 92 |
| 93 class Filter extends Expression { |
| 94 final Expression expression; |
| 95 final String name; |
| 96 final List<Expression> arguments; |
| 97 Filter(this.expression, this.name, this.arguments); |
| 98 accept(Visitor visitor) => visitor.visitFilter(this); |
| 99 } |
| 100 |
| 101 class Assign extends Expression { |
| 102 final Expression target; |
| 103 final Expression value; |
| 104 Assign(this.target, this.value); |
| 105 accept(Visitor visitor) => visitor.visitAssign(this); |
| 106 } |
| 107 |
| 108 class Conditional extends Expression { |
| 109 final Expression condition; |
| 110 final Expression yes; |
| 111 final Expression no; |
| 112 Conditional(this.condition, this.yes, this.no); |
| 113 accept(Visitor visitor) => visitor.visitConditional(this); |
| 114 } |
| 115 |
| 116 class AccessScope extends Expression { |
| 117 final String name; |
| 118 AccessScope(this.name); |
| 119 bool get isAssignable => true; |
| 120 accept(Visitor visitor) => visitor.visitAccessScope(this); |
| 121 } |
| 122 |
| 123 class AccessMember extends Expression { |
| 124 final Expression object; |
| 125 final String name; |
| 126 AccessMember(this.object, this.name); |
| 127 bool get isAssignable => true; |
| 128 accept(Visitor visitor) => visitor.visitAccessMember(this); |
| 129 } |
| 130 |
| 131 class AccessKeyed extends Expression { |
| 132 final Expression object; |
| 133 final Expression key; |
| 134 AccessKeyed(this.object, this.key); |
| 135 bool get isAssignable => true; |
| 136 accept(Visitor visitor) => visitor.visitAccessKeyed(this); |
| 137 } |
| 138 |
| 139 class CallScope extends Expression { |
| 140 final String name; |
| 141 final List<Expression> arguments; |
| 142 CallScope(this.name, this.arguments); |
| 143 accept(Visitor visitor) => visitor.visitCallScope(this); |
| 144 } |
| 145 |
| 146 class CallFunction extends Expression { |
| 147 final Expression function; |
| 148 final List<Expression> arguments; |
| 149 CallFunction(this.function, this.arguments); |
| 150 accept(Visitor visitor) => visitor.visitCallFunction(this); |
| 151 } |
| 152 |
| 153 class CallMember extends Expression { |
| 154 final Expression object; |
| 155 final String name; |
| 156 final List<Expression> arguments; |
| 157 CallMember(this.object, this.name, this.arguments); |
| 158 accept(Visitor visitor) => visitor.visitCallMember(this); |
| 159 } |
| 160 |
| 161 class Binary extends Expression { |
| 162 final String operation; |
| 163 final Expression left; |
| 164 final Expression right; |
| 165 Binary(this.operation, this.left, this.right); |
| 166 accept(Visitor visitor) => visitor.visitBinary(this); |
| 167 } |
| 168 |
| 169 class Prefix extends Expression { |
| 170 final String operation; |
| 171 final Expression expression; |
| 172 Prefix(this.operation, this.expression); |
| 173 accept(Visitor visitor) => visitor.visitPrefix(this); |
| 174 } |
| 175 |
| 176 abstract class Literal extends Expression { |
| 177 } |
| 178 |
| 179 class LiteralPrimitive extends Literal { |
| 180 final value; |
| 181 LiteralPrimitive(this.value); |
| 182 accept(Visitor visitor) => visitor.visitLiteralPrimitive(this); |
| 183 } |
| 184 |
| 185 class LiteralString extends Literal { |
| 186 final String value; |
| 187 LiteralString(this.value); |
| 188 accept(Visitor visitor) => visitor.visitLiteralString(this); |
| 189 } |
| 190 |
| 191 class LiteralArray extends Literal { |
| 192 final List<Expression> elements; |
| 193 LiteralArray(this.elements); |
| 194 accept(Visitor visitor) => visitor.visitLiteralArray(this); |
| 195 } |
| 196 |
| 197 class LiteralObject extends Literal { |
| 198 final List<String> keys; |
| 199 final List<Expression> values; |
| 200 LiteralObject(this.keys, this.values); |
| 201 accept(Visitor visitor) => visitor.visitLiteralObject(this); |
| 202 } |
| OLD | NEW |