| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of js_ast; | 5 part of js_ast; |
| 6 | 6 |
| 7 abstract class NodeVisitor<T> implements TypeRefVisitor<T> { | 7 abstract class NodeVisitor<T> implements TypeRefVisitor<T> { |
| 8 T visitProgram(Program node); | 8 T visitProgram(Program node); |
| 9 | 9 |
| 10 T visitBlock(Block node); | 10 T visitBlock(Block node); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 40 T visitBinary(Binary node); | 40 T visitBinary(Binary node); |
| 41 T visitPrefix(Prefix node); | 41 T visitPrefix(Prefix node); |
| 42 T visitPostfix(Postfix node); | 42 T visitPostfix(Postfix node); |
| 43 T visitSpread(Spread node); | 43 T visitSpread(Spread node); |
| 44 T visitYield(Yield node); | 44 T visitYield(Yield node); |
| 45 | 45 |
| 46 T visitIdentifier(Identifier node); | 46 T visitIdentifier(Identifier node); |
| 47 T visitThis(This node); | 47 T visitThis(This node); |
| 48 T visitSuper(Super node); | 48 T visitSuper(Super node); |
| 49 T visitAccess(PropertyAccess node); | 49 T visitAccess(PropertyAccess node); |
| 50 T visitRestParameter(RestParameter node); | |
| 51 | 50 |
| 52 T visitNamedFunction(NamedFunction node); | 51 T visitNamedFunction(NamedFunction node); |
| 53 T visitFun(Fun node); | 52 T visitFun(Fun node); |
| 54 T visitArrowFun(ArrowFun node); | 53 T visitArrowFun(ArrowFun node); |
| 55 | 54 |
| 56 T visitLiteralBool(LiteralBool node); | 55 T visitLiteralBool(LiteralBool node); |
| 57 T visitLiteralString(LiteralString node); | 56 T visitLiteralString(LiteralString node); |
| 58 T visitLiteralNumber(LiteralNumber node); | 57 T visitLiteralNumber(LiteralNumber node); |
| 59 T visitLiteralNull(LiteralNull node); | 58 T visitLiteralNull(LiteralNull node); |
| 60 | 59 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 82 T visitCommentExpression(CommentExpression node); | 81 T visitCommentExpression(CommentExpression node); |
| 83 | 82 |
| 84 T visitInterpolatedExpression(InterpolatedExpression node); | 83 T visitInterpolatedExpression(InterpolatedExpression node); |
| 85 T visitInterpolatedLiteral(InterpolatedLiteral node); | 84 T visitInterpolatedLiteral(InterpolatedLiteral node); |
| 86 T visitInterpolatedParameter(InterpolatedParameter node); | 85 T visitInterpolatedParameter(InterpolatedParameter node); |
| 87 T visitInterpolatedSelector(InterpolatedSelector node); | 86 T visitInterpolatedSelector(InterpolatedSelector node); |
| 88 T visitInterpolatedStatement(InterpolatedStatement node); | 87 T visitInterpolatedStatement(InterpolatedStatement node); |
| 89 T visitInterpolatedMethod(InterpolatedMethod node); | 88 T visitInterpolatedMethod(InterpolatedMethod node); |
| 90 T visitInterpolatedIdentifier(InterpolatedIdentifier node); | 89 T visitInterpolatedIdentifier(InterpolatedIdentifier node); |
| 91 | 90 |
| 91 T visitParameter(Parameter node); |
| 92 T visitTypeParameter(TypeParameter node); |
| 93 |
| 92 T visitArrayBindingPattern(ArrayBindingPattern node); | 94 T visitArrayBindingPattern(ArrayBindingPattern node); |
| 93 T visitObjectBindingPattern(ObjectBindingPattern node); | 95 T visitObjectBindingPattern(ObjectBindingPattern node); |
| 94 T visitDestructuredVariable(DestructuredVariable node); | 96 T visitDestructuredVariable(DestructuredVariable node); |
| 95 T visitSimpleBindingPattern(SimpleBindingPattern node); | 97 T visitSimpleBindingPattern(SimpleBindingPattern node); |
| 96 } | 98 } |
| 97 | 99 |
| 98 abstract class TypeRefVisitor<T> { | 100 abstract class TypeRefVisitor<T> { |
| 99 T visitQualifiedTypeRef(QualifiedTypeRef node); | 101 T visitQualifiedTypeRef(QualifiedTypeRef node); |
| 100 T visitGenericTypeRef(GenericTypeRef node); | 102 T visitGenericTypeRef(GenericTypeRef node); |
| 101 T visitUnionTypeRef(UnionTypeRef node); | 103 T visitUnionTypeRef(UnionTypeRef node); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 T visitPrefix(Prefix node) => visitExpression(node); | 166 T visitPrefix(Prefix node) => visitExpression(node); |
| 165 T visitPostfix(Postfix node) => visitExpression(node); | 167 T visitPostfix(Postfix node) => visitExpression(node); |
| 166 T visitSpread(Spread node) => visitPrefix(node); | 168 T visitSpread(Spread node) => visitPrefix(node); |
| 167 T visitYield(Yield node) => visitExpression(node); | 169 T visitYield(Yield node) => visitExpression(node); |
| 168 T visitAccess(PropertyAccess node) => visitExpression(node); | 170 T visitAccess(PropertyAccess node) => visitExpression(node); |
| 169 | 171 |
| 170 T visitIdentifier(Identifier node) => visitExpression(node); | 172 T visitIdentifier(Identifier node) => visitExpression(node); |
| 171 T visitThis(This node) => visitExpression(node); | 173 T visitThis(This node) => visitExpression(node); |
| 172 T visitSuper(Super node) => visitExpression(node); | 174 T visitSuper(Super node) => visitExpression(node); |
| 173 | 175 |
| 174 T visitRestParameter(RestParameter node) => visitNode(node); | |
| 175 | |
| 176 T visitNamedFunction(NamedFunction node) => visitExpression(node); | 176 T visitNamedFunction(NamedFunction node) => visitExpression(node); |
| 177 T visitFunctionExpression(FunctionExpression node) => visitExpression(node); | 177 T visitFunctionExpression(FunctionExpression node) => visitExpression(node); |
| 178 T visitFun(Fun node) => visitFunctionExpression(node); | 178 T visitFun(Fun node) => visitFunctionExpression(node); |
| 179 T visitArrowFun(ArrowFun node) => visitFunctionExpression(node); | 179 T visitArrowFun(ArrowFun node) => visitFunctionExpression(node); |
| 180 | 180 |
| 181 T visitLiteral(Literal node) => visitExpression(node); | 181 T visitLiteral(Literal node) => visitExpression(node); |
| 182 | 182 |
| 183 T visitLiteralBool(LiteralBool node) => visitLiteral(node); | 183 T visitLiteralBool(LiteralBool node) => visitLiteral(node); |
| 184 T visitLiteralString(LiteralString node) => visitLiteral(node); | 184 T visitLiteralString(LiteralString node) => visitLiteral(node); |
| 185 T visitLiteralNumber(LiteralNumber node) => visitLiteral(node); | 185 T visitLiteralNumber(LiteralNumber node) => visitLiteral(node); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 221 T visitInterpolatedIdentifier(InterpolatedIdentifier node) | 221 T visitInterpolatedIdentifier(InterpolatedIdentifier node) |
| 222 => visitInterpolatedNode(node); | 222 => visitInterpolatedNode(node); |
| 223 | 223 |
| 224 // Ignore comments by default. | 224 // Ignore comments by default. |
| 225 T visitComment(Comment node) => null; | 225 T visitComment(Comment node) => null; |
| 226 T visitCommentExpression(CommentExpression node) => null; | 226 T visitCommentExpression(CommentExpression node) => null; |
| 227 | 227 |
| 228 T visitAwait(Await node) => visitExpression(node); | 228 T visitAwait(Await node) => visitExpression(node); |
| 229 T visitDartYield(DartYield node) => visitStatement(node); | 229 T visitDartYield(DartYield node) => visitStatement(node); |
| 230 | 230 |
| 231 T visitParameter(Parameter node) => visitNode(node); |
| 232 T visitTypeParameter(TypeParameter node) => visitNode(node); |
| 233 |
| 231 T visitBindingPattern(BindingPattern node) => visitNode(node); | 234 T visitBindingPattern(BindingPattern node) => visitNode(node); |
| 232 T visitArrayBindingPattern(ArrayBindingPattern node) | 235 T visitArrayBindingPattern(ArrayBindingPattern node) |
| 233 => visitBindingPattern(node); | 236 => visitBindingPattern(node); |
| 234 T visitObjectBindingPattern(ObjectBindingPattern node) | 237 T visitObjectBindingPattern(ObjectBindingPattern node) |
| 235 => visitBindingPattern(node); | 238 => visitBindingPattern(node); |
| 236 T visitDestructuredVariable(DestructuredVariable node) => visitNode(node); | 239 T visitDestructuredVariable(DestructuredVariable node) => visitNode(node); |
| 237 T visitSimpleBindingPattern(SimpleBindingPattern node) => visitNode(node); | 240 T visitSimpleBindingPattern(SimpleBindingPattern node) => visitNode(node); |
| 238 | 241 |
| 239 T visitTypeRef(TypeRef node) => visitNode(node); | 242 T visitTypeRef(TypeRef node) => visitNode(node); |
| 240 T visitQualifiedTypeRef(QualifiedTypeRef node) => visitTypeRef(node); | 243 T visitQualifiedTypeRef(QualifiedTypeRef node) => visitTypeRef(node); |
| (...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 681 | 684 |
| 682 accept(NodeVisitor visitor) => visitor.visitDartYield(this); | 685 accept(NodeVisitor visitor) => visitor.visitDartYield(this); |
| 683 | 686 |
| 684 void visitChildren(NodeVisitor visitor) { | 687 void visitChildren(NodeVisitor visitor) { |
| 685 expression.accept(visitor); | 688 expression.accept(visitor); |
| 686 } | 689 } |
| 687 | 690 |
| 688 DartYield _clone() => new DartYield(expression, hasStar); | 691 DartYield _clone() => new DartYield(expression, hasStar); |
| 689 } | 692 } |
| 690 | 693 |
| 691 abstract class Expression extends Node { | 694 abstract class Expression extends Node implements LValue { |
| 692 Expression(); | 695 Expression(); |
| 693 | 696 |
| 694 factory Expression.binary(List<Expression> exprs, String op) { | 697 factory Expression.binary(List<Expression> exprs, String op) { |
| 695 Expression comma = null; | 698 Expression comma = null; |
| 696 for (var node in exprs) { | 699 for (var node in exprs) { |
| 697 comma = (comma == null) ? node : new Binary(op, comma, node); | 700 comma = (comma == null) ? node : new Binary(op, comma, node); |
| 698 } | 701 } |
| 699 return comma; | 702 return comma; |
| 700 } | 703 } |
| 701 | 704 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 754 declaration.accept(visitor); | 757 declaration.accept(visitor); |
| 755 } | 758 } |
| 756 } | 759 } |
| 757 | 760 |
| 758 VariableDeclarationList _clone() => | 761 VariableDeclarationList _clone() => |
| 759 new VariableDeclarationList(keyword, declarations); | 762 new VariableDeclarationList(keyword, declarations); |
| 760 | 763 |
| 761 int get precedenceLevel => EXPRESSION; | 764 int get precedenceLevel => EXPRESSION; |
| 762 } | 765 } |
| 763 | 766 |
| 767 abstract class LValue implements Node {} |
| 768 |
| 764 class Assignment extends Expression { | 769 class Assignment extends Expression { |
| 765 final Expression leftHandSide; | 770 final LValue leftHandSide; |
| 766 final String op; // Null, if the assignment is not compound. | 771 final String op; // Null, if the assignment is not compound. |
| 767 final Expression value; // May be null, for [VariableInitialization]s. | 772 final Expression value; // May be null, for [VariableInitialization]s. |
| 768 | 773 |
| 769 Assignment(leftHandSide, value) | 774 Assignment(leftHandSide, value) |
| 770 : this.compound(leftHandSide, null, value); | 775 : this.compound(leftHandSide, null, value); |
| 771 Assignment.compound(this.leftHandSide, this.op, this.value); | 776 Assignment.compound(this.leftHandSide, this.op, this.value); |
| 772 | 777 |
| 773 int get precedenceLevel => ASSIGNMENT; | 778 int get precedenceLevel => ASSIGNMENT; |
| 774 | 779 |
| 775 bool get isCompound => op != null; | 780 bool get isCompound => op != null; |
| 776 | 781 |
| 777 accept(NodeVisitor visitor) => visitor.visitAssignment(this); | 782 accept(NodeVisitor visitor) => visitor.visitAssignment(this); |
| 778 | 783 |
| 779 void visitChildren(NodeVisitor visitor) { | 784 void visitChildren(NodeVisitor visitor) { |
| 780 leftHandSide.accept(visitor); | 785 leftHandSide.accept(visitor); |
| 781 if (value != null) value.accept(visitor); | 786 if (value != null) value.accept(visitor); |
| 782 } | 787 } |
| 783 | 788 |
| 784 Assignment _clone() => | 789 Assignment _clone() => |
| 785 new Assignment.compound(leftHandSide, op, value); | 790 new Assignment.compound(leftHandSide, op, value); |
| 786 } | 791 } |
| 787 | 792 |
| 788 class VariableInitialization extends Assignment { | 793 class VariableInitialization extends Assignment { |
| 794 final TypeRef type; |
| 789 /** [value] may be null. */ | 795 /** [value] may be null. */ |
| 790 VariableInitialization(VariableBinding declaration, Expression value) | 796 VariableInitialization(VariableBinding declaration, Expression value, {this.ty
pe}) |
| 791 : super(declaration, value); | 797 : super(declaration, value); |
| 792 | 798 |
| 793 VariableBinding get declaration => leftHandSide; | 799 VariableBinding get declaration => leftHandSide; |
| 794 | 800 |
| 795 accept(NodeVisitor visitor) => visitor.visitVariableInitialization(this); | 801 accept(NodeVisitor visitor) => visitor.visitVariableInitialization(this); |
| 796 | 802 |
| 797 VariableInitialization _clone() => | 803 VariableInitialization _clone() => |
| 798 new VariableInitialization(declaration, value); | 804 new VariableInitialization(declaration, value); |
| 799 } | 805 } |
| 800 | 806 |
| 801 abstract class VariableBinding extends Expression { | 807 abstract class VariableBinding implements LValue {} |
| 802 } | |
| 803 | 808 |
| 804 class DestructuredVariable extends Expression implements Parameter { | 809 class DestructuredVariable extends Node implements VariableBinding { |
| 805 /// [LiteralString] or [Identifier]. | 810 /// [LiteralString] or [Identifier]. |
| 806 final Expression name; | 811 final Expression name; |
| 807 final BindingPattern structure; | 812 final BindingPattern structure; |
| 808 final Expression defaultValue; | 813 final Expression defaultValue; |
| 809 final TypeRef type; | 814 final TypeRef type; |
| 810 DestructuredVariable({this.name, this.structure, this.defaultValue, this.type}
) { | 815 DestructuredVariable({this.name, this.structure, this.type, this.defaultValue}
) { |
| 811 assert(name != null || structure != null); | 816 assert(name != null || structure != null); |
| 812 } | 817 } |
| 813 | 818 |
| 814 accept(NodeVisitor visitor) => visitor.visitDestructuredVariable(this); | 819 accept(NodeVisitor visitor) => visitor.visitDestructuredVariable(this); |
| 815 void visitChildren(NodeVisitor visitor) { | 820 void visitChildren(NodeVisitor visitor) { |
| 816 name?.accept(visitor); | 821 name?.accept(visitor); |
| 817 structure?.accept(visitor); | 822 structure?.accept(visitor); |
| 823 type?.accept(visitor); |
| 818 defaultValue?.accept(visitor); | 824 defaultValue?.accept(visitor); |
| 819 } | 825 } |
| 820 | 826 |
| 821 /// Avoid parenthesis when pretty-printing. | |
| 822 @override int get precedenceLevel => PRIMARY; | |
| 823 @override Node _clone() => | 827 @override Node _clone() => |
| 824 new DestructuredVariable( | 828 new DestructuredVariable( |
| 825 name: name, structure: structure, defaultValue: defaultValue); | 829 name: name, structure: structure, defaultValue: defaultValue); |
| 826 } | 830 } |
| 827 | 831 |
| 828 abstract class BindingPattern extends Expression implements VariableBinding { | 832 abstract class BindingPattern extends Expression implements VariableBinding { |
| 829 final List<DestructuredVariable> variables; | 833 final List<DestructuredVariable> variables; |
| 830 BindingPattern(this.variables); | 834 BindingPattern(this.variables); |
| 831 | 835 |
| 832 void visitChildren(NodeVisitor visitor) { | 836 void visitChildren(NodeVisitor visitor) { |
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1053 | 1057 |
| 1054 Postfix _clone() => new Postfix(op, argument); | 1058 Postfix _clone() => new Postfix(op, argument); |
| 1055 | 1059 |
| 1056 void visitChildren(NodeVisitor visitor) { | 1060 void visitChildren(NodeVisitor visitor) { |
| 1057 argument.accept(visitor); | 1061 argument.accept(visitor); |
| 1058 } | 1062 } |
| 1059 | 1063 |
| 1060 int get precedenceLevel => UNARY; | 1064 int get precedenceLevel => UNARY; |
| 1061 } | 1065 } |
| 1062 | 1066 |
| 1063 abstract class Parameter implements Expression, VariableBinding { | 1067 class Parameter extends Node implements VariableBinding { |
| 1064 TypeRef get type; | 1068 final VariableBinding binding; |
| 1069 final TypeRef type; |
| 1070 final Expression defaultValue; |
| 1071 final bool isRest; |
| 1072 Parameter(this.binding, {this.type, this.defaultValue, this.isRest: false}); |
| 1073 |
| 1074 accept(NodeVisitor visitor) => visitor.visitParameter(this); |
| 1075 void visitChildren(NodeVisitor visitor) { |
| 1076 binding?.accept(visitor); |
| 1077 defaultValue?.accept(visitor); |
| 1078 type?.accept(visitor); |
| 1079 } |
| 1080 Parameter _clone() => new Parameter(binding, type: type, isRest: isRest); |
| 1065 } | 1081 } |
| 1066 | 1082 |
| 1067 class Identifier extends Expression implements Parameter, VariableBinding { | 1083 class TypeParameter extends Node { |
| 1084 final Identifier name; |
| 1085 final TypeRef bound; |
| 1086 TypeParameter(this.name, {this.bound}); |
| 1087 |
| 1088 accept(NodeVisitor visitor) => visitor.visitTypeParameter(this); |
| 1089 void visitChildren(NodeVisitor visitor) { |
| 1090 name?.accept(visitor); |
| 1091 bound?.accept(visitor); |
| 1092 } |
| 1093 TypeParameter _clone() => new TypeParameter(name, bound: bound); |
| 1094 } |
| 1095 |
| 1096 class Identifier extends Expression implements VariableBinding { |
| 1068 final String name; | 1097 final String name; |
| 1069 final bool allowRename; | 1098 final bool allowRename; |
| 1070 final TypeRef type; | |
| 1071 | 1099 |
| 1072 Identifier(this.name, {this.allowRename: true, this.type}) { | 1100 Identifier(this.name, {this.allowRename: true}) { |
| 1073 if (!_identifierRE.hasMatch(name)) { | 1101 if (!_identifierRE.hasMatch(name)) { |
| 1074 throw new ArgumentError.value(name, "name", "not a valid identifier"); | 1102 throw new ArgumentError.value(name, "name", "not a valid identifier"); |
| 1075 } | 1103 } |
| 1076 } | 1104 } |
| 1077 static RegExp _identifierRE = new RegExp(r'^[A-Za-z_$][A-Za-z_$0-9]*$'); | 1105 static RegExp _identifierRE = new RegExp(r'^[A-Za-z_$][A-Za-z_$0-9]*$'); |
| 1078 | 1106 |
| 1079 Identifier _clone() => | 1107 Identifier _clone() => |
| 1080 new Identifier(name, allowRename: allowRename); | 1108 new Identifier(name, allowRename: allowRename); |
| 1081 accept(NodeVisitor visitor) => visitor.visitIdentifier(this); | 1109 accept(NodeVisitor visitor) => visitor.visitIdentifier(this); |
| 1082 int get precedenceLevel => PRIMARY; | 1110 int get precedenceLevel => PRIMARY; |
| 1083 void visitChildren(NodeVisitor visitor) {} | 1111 void visitChildren(NodeVisitor visitor) {} |
| 1084 } | 1112 } |
| 1085 | 1113 |
| 1086 // This is an expression for convenience in the AST. | |
| 1087 class RestParameter extends Expression implements Parameter { | |
| 1088 final Identifier parameter; | |
| 1089 TypeRef get type => null; | |
| 1090 | |
| 1091 RestParameter(this.parameter); | |
| 1092 | |
| 1093 RestParameter _clone() => new RestParameter(parameter); | |
| 1094 accept(NodeVisitor visitor) => visitor.visitRestParameter(this); | |
| 1095 void visitChildren(NodeVisitor visitor) { | |
| 1096 parameter.accept(visitor); | |
| 1097 } | |
| 1098 int get precedenceLevel => PRIMARY; | |
| 1099 } | |
| 1100 | |
| 1101 class This extends Expression { | 1114 class This extends Expression { |
| 1102 accept(NodeVisitor visitor) => visitor.visitThis(this); | 1115 accept(NodeVisitor visitor) => visitor.visitThis(this); |
| 1103 This _clone() => new This(); | 1116 This _clone() => new This(); |
| 1104 int get precedenceLevel => PRIMARY; | 1117 int get precedenceLevel => PRIMARY; |
| 1105 void visitChildren(NodeVisitor visitor) {} | 1118 void visitChildren(NodeVisitor visitor) {} |
| 1106 | 1119 |
| 1107 static bool foundIn(Node node) { | 1120 static bool foundIn(Node node) { |
| 1108 _thisFinder.found = false; | 1121 _thisFinder.found = false; |
| 1109 node.accept(_thisFinder); | 1122 node.accept(_thisFinder); |
| 1110 return _thisFinder.found; | 1123 return _thisFinder.found; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1148 | 1161 |
| 1149 int get precedenceLevel => PRIMARY_LOW_PRECEDENCE; | 1162 int get precedenceLevel => PRIMARY_LOW_PRECEDENCE; |
| 1150 } | 1163 } |
| 1151 | 1164 |
| 1152 abstract class FunctionExpression extends Expression { | 1165 abstract class FunctionExpression extends Expression { |
| 1153 List<Parameter> get params; | 1166 List<Parameter> get params; |
| 1154 | 1167 |
| 1155 get body; // Expression or block | 1168 get body; // Expression or block |
| 1156 /// Type parameters passed to this generic function, if any. `null` otherwise. | 1169 /// Type parameters passed to this generic function, if any. `null` otherwise. |
| 1157 // TODO(ochafik): Support type bounds. | 1170 // TODO(ochafik): Support type bounds. |
| 1158 List<Identifier> get typeParams; | 1171 List<TypeParameter> get typeParams; |
| 1159 /// Return type of this function, if any. `null` otherwise. | 1172 /// Return type of this function, if any. `null` otherwise. |
| 1160 TypeRef get returnType; | 1173 TypeRef get returnType; |
| 1161 } | 1174 } |
| 1162 | 1175 |
| 1163 class Fun extends FunctionExpression { | 1176 class Fun extends FunctionExpression { |
| 1164 final List<Parameter> params; | 1177 final List<Parameter> params; |
| 1165 final Block body; | 1178 final Block body; |
| 1166 @override final List<Identifier> typeParams; | 1179 @override final List<TypeParameter> typeParams; |
| 1167 @override final TypeRef returnType; | 1180 @override final TypeRef returnType; |
| 1168 /** Whether this is a JS generator (`function*`) that may contain `yield`. */ | 1181 /** Whether this is a JS generator (`function*`) that may contain `yield`. */ |
| 1169 final bool isGenerator; | 1182 final bool isGenerator; |
| 1170 | 1183 |
| 1171 final AsyncModifier asyncModifier; | 1184 final AsyncModifier asyncModifier; |
| 1172 | 1185 |
| 1173 Fun(this.params, this.body, {this.isGenerator: false, | 1186 Fun(this.params, this.body, {this.isGenerator: false, |
| 1174 this.asyncModifier: const AsyncModifier.sync(), | 1187 this.asyncModifier: const AsyncModifier.sync(), |
| 1175 this.typeParams, this.returnType}); | 1188 this.typeParams, this.returnType}); |
| 1176 | 1189 |
| 1177 accept(NodeVisitor visitor) => visitor.visitFun(this); | 1190 accept(NodeVisitor visitor) => visitor.visitFun(this); |
| 1178 | 1191 |
| 1179 void visitChildren(NodeVisitor visitor) { | 1192 void visitChildren(NodeVisitor visitor) { |
| 1180 for (Parameter param in params) param.accept(visitor); | 1193 for (Parameter param in params) param.accept(visitor); |
| 1181 body.accept(visitor); | 1194 body.accept(visitor); |
| 1182 } | 1195 } |
| 1183 | 1196 |
| 1184 Fun _clone() => new Fun(params, body, | 1197 Fun _clone() => new Fun(params, body, |
| 1185 isGenerator: isGenerator, asyncModifier: asyncModifier); | 1198 isGenerator: isGenerator, asyncModifier: asyncModifier); |
| 1186 | 1199 |
| 1187 int get precedenceLevel => PRIMARY_LOW_PRECEDENCE; | 1200 int get precedenceLevel => PRIMARY_LOW_PRECEDENCE; |
| 1188 } | 1201 } |
| 1189 | 1202 |
| 1190 class ArrowFun extends FunctionExpression { | 1203 class ArrowFun extends FunctionExpression { |
| 1191 final List<Parameter> params; | 1204 final List<Parameter> params; |
| 1192 final body; // Expression or Block | 1205 final body; // Expression or Block |
| 1193 @override final List<Identifier> typeParams; | 1206 @override final List<TypeParameter> typeParams; |
| 1194 @override final TypeRef returnType; | 1207 @override final TypeRef returnType; |
| 1195 | 1208 |
| 1196 ArrowFun(this.params, this.body, {this.typeParams, this.returnType}); | 1209 ArrowFun(this.params, this.body, {this.typeParams, this.returnType}); |
| 1197 | 1210 |
| 1198 accept(NodeVisitor visitor) => visitor.visitArrowFun(this); | 1211 accept(NodeVisitor visitor) => visitor.visitArrowFun(this); |
| 1199 | 1212 |
| 1200 void visitChildren(NodeVisitor visitor) { | 1213 void visitChildren(NodeVisitor visitor) { |
| 1201 for (Parameter param in params) param.accept(visitor); | 1214 for (Parameter param in params) param.accept(visitor); |
| 1202 body.accept(visitor); | 1215 body.accept(visitor); |
| 1203 } | 1216 } |
| (...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1475 visitChildren(NodeVisitor visitor) => classExpr.accept(visitor); | 1488 visitChildren(NodeVisitor visitor) => classExpr.accept(visitor); |
| 1476 ClassDeclaration _clone() => new ClassDeclaration(classExpr); | 1489 ClassDeclaration _clone() => new ClassDeclaration(classExpr); |
| 1477 } | 1490 } |
| 1478 | 1491 |
| 1479 class ClassExpression extends Expression { | 1492 class ClassExpression extends Expression { |
| 1480 final Identifier name; | 1493 final Identifier name; |
| 1481 final Expression heritage; // Can be null. | 1494 final Expression heritage; // Can be null. |
| 1482 final List<Method> methods; | 1495 final List<Method> methods; |
| 1483 /// Type parameters of this class, if any. `null` otherwise. | 1496 /// Type parameters of this class, if any. `null` otherwise. |
| 1484 // TODO(ochafik): Support type bounds. | 1497 // TODO(ochafik): Support type bounds. |
| 1485 final List<Identifier> typeParams; | 1498 final List<TypeParameter> typeParams; |
| 1486 /// Field declarations of this class (TypeScript / ES6_TYPED). | 1499 /// Field declarations of this class (TypeScript / ES6_TYPED). |
| 1487 final List<VariableDeclarationList> fields; | 1500 final List<VariableDeclarationList> fields; |
| 1488 | 1501 |
| 1489 ClassExpression(this.name, this.heritage, this.methods, | 1502 ClassExpression(this.name, this.heritage, this.methods, |
| 1490 {this.typeParams, this.fields}); | 1503 {this.typeParams, this.fields}); |
| 1491 | 1504 |
| 1492 accept(NodeVisitor visitor) => visitor.visitClassExpression(this); | 1505 accept(NodeVisitor visitor) => visitor.visitClassExpression(this); |
| 1493 | 1506 |
| 1494 void visitChildren(NodeVisitor visitor) { | 1507 void visitChildren(NodeVisitor visitor) { |
| 1495 name.accept(visitor); | 1508 name.accept(visitor); |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1564 final nameOrPosition; | 1577 final nameOrPosition; |
| 1565 | 1578 |
| 1566 InterpolatedLiteral(this.nameOrPosition); | 1579 InterpolatedLiteral(this.nameOrPosition); |
| 1567 | 1580 |
| 1568 accept(NodeVisitor visitor) => visitor.visitInterpolatedLiteral(this); | 1581 accept(NodeVisitor visitor) => visitor.visitInterpolatedLiteral(this); |
| 1569 void visitChildren(NodeVisitor visitor) {} | 1582 void visitChildren(NodeVisitor visitor) {} |
| 1570 InterpolatedLiteral _clone() => new InterpolatedLiteral(nameOrPosition); | 1583 InterpolatedLiteral _clone() => new InterpolatedLiteral(nameOrPosition); |
| 1571 } | 1584 } |
| 1572 | 1585 |
| 1573 class InterpolatedParameter extends Expression with InterpolatedNode | 1586 class InterpolatedParameter extends Expression with InterpolatedNode |
| 1574 implements Identifier { | 1587 implements Parameter { |
| 1575 final nameOrPosition; | 1588 final nameOrPosition; |
| 1589 final bool isRest; |
| 1576 TypeRef get type => null; | 1590 TypeRef get type => null; |
| 1577 | 1591 |
| 1578 String get name { throw "InterpolatedParameter.name must not be invoked"; } | 1592 Identifier get binding { throw "InterpolatedParameter.binding must not be invo
ked"; } |
| 1593 Expression get defaultValue { throw "InterpolatedParameter.defaultValue must n
ot be invoked"; } |
| 1579 bool get allowRename => false; | 1594 bool get allowRename => false; |
| 1580 | 1595 |
| 1581 InterpolatedParameter(this.nameOrPosition); | 1596 InterpolatedParameter(this.nameOrPosition, {this.isRest: false}); |
| 1582 | 1597 |
| 1583 accept(NodeVisitor visitor) => visitor.visitInterpolatedParameter(this); | 1598 accept(NodeVisitor visitor) => visitor.visitInterpolatedParameter(this); |
| 1584 void visitChildren(NodeVisitor visitor) {} | 1599 void visitChildren(NodeVisitor visitor) {} |
| 1585 InterpolatedParameter _clone() => new InterpolatedParameter(nameOrPosition); | 1600 InterpolatedParameter _clone() => |
| 1601 new InterpolatedParameter(nameOrPosition, isRest: isRest); |
| 1586 | 1602 |
| 1587 int get precedenceLevel => PRIMARY; | 1603 int get precedenceLevel => PRIMARY; |
| 1588 } | 1604 } |
| 1589 | 1605 |
| 1590 class InterpolatedSelector extends Expression with InterpolatedNode { | 1606 class InterpolatedSelector extends Expression with InterpolatedNode { |
| 1591 final nameOrPosition; | 1607 final nameOrPosition; |
| 1592 | 1608 |
| 1593 InterpolatedSelector(this.nameOrPosition); | 1609 InterpolatedSelector(this.nameOrPosition); |
| 1594 | 1610 |
| 1595 accept(NodeVisitor visitor) => visitor.visitInterpolatedSelector(this); | 1611 accept(NodeVisitor visitor) => visitor.visitInterpolatedSelector(this); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1626 bool get isGetter => _unsupported; | 1642 bool get isGetter => _unsupported; |
| 1627 bool get isSetter => _unsupported; | 1643 bool get isSetter => _unsupported; |
| 1628 bool get isStatic => _unsupported; | 1644 bool get isStatic => _unsupported; |
| 1629 Fun get function => _unsupported; | 1645 Fun get function => _unsupported; |
| 1630 get _unsupported => throw '$runtimeType does not support this member.'; | 1646 get _unsupported => throw '$runtimeType does not support this member.'; |
| 1631 } | 1647 } |
| 1632 | 1648 |
| 1633 class InterpolatedIdentifier extends Expression with InterpolatedNode | 1649 class InterpolatedIdentifier extends Expression with InterpolatedNode |
| 1634 implements Identifier { | 1650 implements Identifier { |
| 1635 final nameOrPosition; | 1651 final nameOrPosition; |
| 1636 TypeRef get type => null; | |
| 1637 | 1652 |
| 1638 InterpolatedIdentifier(this.nameOrPosition); | 1653 InterpolatedIdentifier(this.nameOrPosition); |
| 1639 | 1654 |
| 1640 accept(NodeVisitor visitor) => | 1655 accept(NodeVisitor visitor) => |
| 1641 visitor.visitInterpolatedIdentifier(this); | 1656 visitor.visitInterpolatedIdentifier(this); |
| 1642 void visitChildren(NodeVisitor visitor) {} | 1657 void visitChildren(NodeVisitor visitor) {} |
| 1643 InterpolatedIdentifier _clone() => new InterpolatedIdentifier(nameOrPosition); | 1658 InterpolatedIdentifier _clone() => new InterpolatedIdentifier(nameOrPosition); |
| 1644 | 1659 |
| 1645 int get precedenceLevel => PRIMARY; | 1660 int get precedenceLevel => PRIMARY; |
| 1646 String get name => throw '$runtimeType does not support this member.'; | 1661 String get name => throw '$runtimeType does not support this member.'; |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1829 | 1844 |
| 1830 final List<ModuleItem> body; | 1845 final List<ModuleItem> body; |
| 1831 Module(this.body, {this.name}); | 1846 Module(this.body, {this.name}); |
| 1832 | 1847 |
| 1833 accept(NodeVisitor visitor) => visitor.visitModule(this); | 1848 accept(NodeVisitor visitor) => visitor.visitModule(this); |
| 1834 void visitChildren(NodeVisitor visitor) { | 1849 void visitChildren(NodeVisitor visitor) { |
| 1835 for (ModuleItem item in body) item.accept(visitor); | 1850 for (ModuleItem item in body) item.accept(visitor); |
| 1836 } | 1851 } |
| 1837 Module _clone() => new Module(body); | 1852 Module _clone() => new Module(body); |
| 1838 } | 1853 } |
| OLD | NEW |