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

Side by Side Diff: pkg/compiler/lib/src/js/nodes.dart

Issue 932053002: Support for interpolated declarations in the js parser. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address review Created 5 years, 10 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
« no previous file with comments | « pkg/compiler/lib/src/js/builder.dart ('k') | pkg/compiler/lib/src/js/printer.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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> { 7 abstract class NodeVisitor<T> {
8 T visitProgram(Program node); 8 T visitProgram(Program node);
9 9
10 T visitBlock(Block node); 10 T visitBlock(Block node);
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 62
63 T visitAwait(Await node); 63 T visitAwait(Await node);
64 64
65 T visitComment(Comment node); 65 T visitComment(Comment node);
66 66
67 T visitInterpolatedExpression(InterpolatedExpression node); 67 T visitInterpolatedExpression(InterpolatedExpression node);
68 T visitInterpolatedLiteral(InterpolatedLiteral node); 68 T visitInterpolatedLiteral(InterpolatedLiteral node);
69 T visitInterpolatedParameter(InterpolatedParameter node); 69 T visitInterpolatedParameter(InterpolatedParameter node);
70 T visitInterpolatedSelector(InterpolatedSelector node); 70 T visitInterpolatedSelector(InterpolatedSelector node);
71 T visitInterpolatedStatement(InterpolatedStatement node); 71 T visitInterpolatedStatement(InterpolatedStatement node);
72 T visitInterpolatedDeclaration(InterpolatedDeclaration node);
72 } 73 }
73 74
74 class BaseVisitor<T> implements NodeVisitor<T> { 75 class BaseVisitor<T> implements NodeVisitor<T> {
75 T visitNode(Node node) { 76 T visitNode(Node node) {
76 node.visitChildren(this); 77 node.visitChildren(this);
77 return null; 78 return null;
78 } 79 }
79 80
80 T visitProgram(Program node) => visitNode(node); 81 T visitProgram(Program node) => visitNode(node);
81 82
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 T visitInterpolatedExpression(InterpolatedExpression node) 157 T visitInterpolatedExpression(InterpolatedExpression node)
157 => visitInterpolatedNode(node); 158 => visitInterpolatedNode(node);
158 T visitInterpolatedLiteral(InterpolatedLiteral node) 159 T visitInterpolatedLiteral(InterpolatedLiteral node)
159 => visitInterpolatedNode(node); 160 => visitInterpolatedNode(node);
160 T visitInterpolatedParameter(InterpolatedParameter node) 161 T visitInterpolatedParameter(InterpolatedParameter node)
161 => visitInterpolatedNode(node); 162 => visitInterpolatedNode(node);
162 T visitInterpolatedSelector(InterpolatedSelector node) 163 T visitInterpolatedSelector(InterpolatedSelector node)
163 => visitInterpolatedNode(node); 164 => visitInterpolatedNode(node);
164 T visitInterpolatedStatement(InterpolatedStatement node) 165 T visitInterpolatedStatement(InterpolatedStatement node)
165 => visitInterpolatedNode(node); 166 => visitInterpolatedNode(node);
167 T visitInterpolatedDeclaration(InterpolatedDeclaration node) {
168 return visitInterpolatedNode(node);
169 }
166 170
167 // Ignore comments by default. 171 // Ignore comments by default.
168 T visitComment(Comment node) => null; 172 T visitComment(Comment node) => null;
169 173
170 T visitAwait(Await node) => visitExpression(node); 174 T visitAwait(Await node) => visitExpression(node);
171 T visitDartYield(DartYield node) => visitStatement(node); 175 T visitDartYield(DartYield node) => visitStatement(node);
172 } 176 }
173 177
174 /// This tag interface has no behaviour but must be implemented by any class 178 /// This tag interface has no behaviour but must be implemented by any class
175 /// that is to be stored on a [Node] as source information. 179 /// that is to be stored on a [Node] as source information.
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
412 void visitChildren(NodeVisitor visitor) { 416 void visitChildren(NodeVisitor visitor) {
413 body.accept(visitor); 417 body.accept(visitor);
414 if (catchPart != null) catchPart.accept(visitor); 418 if (catchPart != null) catchPart.accept(visitor);
415 if (finallyPart != null) finallyPart.accept(visitor); 419 if (finallyPart != null) finallyPart.accept(visitor);
416 } 420 }
417 421
418 Try _clone() => new Try(body, catchPart, finallyPart); 422 Try _clone() => new Try(body, catchPart, finallyPart);
419 } 423 }
420 424
421 class Catch extends Node { 425 class Catch extends Node {
422 final VariableDeclaration declaration; 426 final Declaration declaration;
423 final Block body; 427 final Block body;
424 428
425 Catch(this.declaration, this.body); 429 Catch(this.declaration, this.body);
426 430
427 accept(NodeVisitor visitor) => visitor.visitCatch(this); 431 accept(NodeVisitor visitor) => visitor.visitCatch(this);
428 432
429 void visitChildren(NodeVisitor visitor) { 433 void visitChildren(NodeVisitor visitor) {
430 declaration.accept(visitor); 434 declaration.accept(visitor);
431 body.accept(visitor); 435 body.accept(visitor);
432 } 436 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 accept(NodeVisitor visitor) => visitor.visitDefault(this); 481 accept(NodeVisitor visitor) => visitor.visitDefault(this);
478 482
479 void visitChildren(NodeVisitor visitor) { 483 void visitChildren(NodeVisitor visitor) {
480 body.accept(visitor); 484 body.accept(visitor);
481 } 485 }
482 486
483 Default _clone() => new Default(body); 487 Default _clone() => new Default(body);
484 } 488 }
485 489
486 class FunctionDeclaration extends Statement { 490 class FunctionDeclaration extends Statement {
487 final VariableDeclaration name; 491 final Declaration name;
488 final Fun function; 492 final Fun function;
489 493
490 FunctionDeclaration(this.name, this.function); 494 FunctionDeclaration(this.name, this.function);
491 495
492 accept(NodeVisitor visitor) => visitor.visitFunctionDeclaration(this); 496 accept(NodeVisitor visitor) => visitor.visitFunctionDeclaration(this);
493 497
494 void visitChildren(NodeVisitor visitor) { 498 void visitChildren(NodeVisitor visitor) {
495 name.accept(visitor); 499 name.accept(visitor);
496 function.accept(visitor); 500 function.accept(visitor);
497 } 501 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
542 546
543 DartYield _clone() => new DartYield(expression, hasStar); 547 DartYield _clone() => new DartYield(expression, hasStar);
544 } 548 }
545 549
546 abstract class Expression extends Node { 550 abstract class Expression extends Node {
547 int get precedenceLevel; 551 int get precedenceLevel;
548 552
549 Statement toStatement() => new ExpressionStatement(this); 553 Statement toStatement() => new ExpressionStatement(this);
550 } 554 }
551 555
556 abstract class Declaration implements VariableReference {
557
558 }
559
552 class LiteralExpression extends Expression { 560 class LiteralExpression extends Expression {
553 final String template; 561 final String template;
554 final List<Expression> inputs; 562 final List<Expression> inputs;
555 563
556 LiteralExpression(this.template) : inputs = const []; 564 LiteralExpression(this.template) : inputs = const [];
557 LiteralExpression.withData(this.template, this.inputs); 565 LiteralExpression.withData(this.template, this.inputs);
558 566
559 accept(NodeVisitor visitor) => visitor.visitLiteralExpression(this); 567 accept(NodeVisitor visitor) => visitor.visitLiteralExpression(this);
560 568
561 void visitChildren(NodeVisitor visitor) { 569 void visitChildren(NodeVisitor visitor) {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 leftHandSide.accept(visitor); 621 leftHandSide.accept(visitor);
614 if (value != null) value.accept(visitor); 622 if (value != null) value.accept(visitor);
615 } 623 }
616 624
617 Assignment _clone() => 625 Assignment _clone() =>
618 new Assignment.compound(leftHandSide, op, value); 626 new Assignment.compound(leftHandSide, op, value);
619 } 627 }
620 628
621 class VariableInitialization extends Assignment { 629 class VariableInitialization extends Assignment {
622 /** [value] may be null. */ 630 /** [value] may be null. */
623 VariableInitialization(VariableDeclaration declaration, Expression value) 631 VariableInitialization(Declaration declaration, Expression value)
624 : super(declaration, value); 632 : super(declaration, value);
625 633
626 VariableDeclaration get declaration => leftHandSide; 634 Declaration get declaration => leftHandSide;
627 635
628 accept(NodeVisitor visitor) => visitor.visitVariableInitialization(this); 636 accept(NodeVisitor visitor) => visitor.visitVariableInitialization(this);
629 637
630 VariableInitialization _clone() => 638 VariableInitialization _clone() =>
631 new VariableInitialization(declaration, value); 639 new VariableInitialization(declaration, value);
632 } 640 }
633 641
634 class Conditional extends Expression { 642 class Conditional extends Expression {
635 final Expression condition; 643 final Expression condition;
636 final Expression then; 644 final Expression then;
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
791 VariableUse(String name) : super(name); 799 VariableUse(String name) : super(name);
792 800
793 accept(NodeVisitor visitor) => visitor.visitVariableUse(this); 801 accept(NodeVisitor visitor) => visitor.visitVariableUse(this);
794 VariableUse _clone() => new VariableUse(name); 802 VariableUse _clone() => new VariableUse(name);
795 803
796 VariableUse asVariableUse() => this; 804 VariableUse asVariableUse() => this;
797 805
798 toString() => 'VariableUse($name)'; 806 toString() => 'VariableUse($name)';
799 } 807 }
800 808
801 class VariableDeclaration extends VariableReference { 809 class VariableDeclaration extends VariableReference implements Declaration {
802 final bool allowRename; 810 final bool allowRename;
803 VariableDeclaration(String name, {this.allowRename: true}) : super(name); 811 VariableDeclaration(String name, {this.allowRename: true}) : super(name);
804 812
805 accept(NodeVisitor visitor) => visitor.visitVariableDeclaration(this); 813 accept(NodeVisitor visitor) => visitor.visitVariableDeclaration(this);
806 VariableDeclaration _clone() => new VariableDeclaration(name); 814 VariableDeclaration _clone() => new VariableDeclaration(name);
807 } 815 }
808 816
809 class Parameter extends VariableDeclaration { 817 class Parameter extends VariableDeclaration {
810 Parameter(String name) : super(name); 818 Parameter(String name) : super(name);
811 819
812 accept(NodeVisitor visitor) => visitor.visitParameter(this); 820 accept(NodeVisitor visitor) => visitor.visitParameter(this);
813 Parameter _clone() => new Parameter(name); 821 Parameter _clone() => new Parameter(name);
814 } 822 }
815 823
816 class This extends Parameter { 824 class This extends Parameter {
817 This() : super("this"); 825 This() : super("this");
818 826
819 accept(NodeVisitor visitor) => visitor.visitThis(this); 827 accept(NodeVisitor visitor) => visitor.visitThis(this);
820 This _clone() => new This(); 828 This _clone() => new This();
821 } 829 }
822 830
823 class NamedFunction extends Expression { 831 class NamedFunction extends Expression {
824 final VariableDeclaration name; 832 final Declaration name;
825 final Fun function; 833 final Fun function;
826 834
827 NamedFunction(this.name, this.function); 835 NamedFunction(this.name, this.function);
828 836
829 accept(NodeVisitor visitor) => visitor.visitNamedFunction(this); 837 accept(NodeVisitor visitor) => visitor.visitNamedFunction(this);
830 838
831 void visitChildren(NodeVisitor visitor) { 839 void visitChildren(NodeVisitor visitor) {
832 name.accept(visitor); 840 name.accept(visitor);
833 function.accept(visitor); 841 function.accept(visitor);
834 } 842 }
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
1086 class InterpolatedStatement extends Statement with InterpolatedNode { 1094 class InterpolatedStatement extends Statement with InterpolatedNode {
1087 final nameOrPosition; 1095 final nameOrPosition;
1088 1096
1089 InterpolatedStatement(this.nameOrPosition); 1097 InterpolatedStatement(this.nameOrPosition);
1090 1098
1091 accept(NodeVisitor visitor) => visitor.visitInterpolatedStatement(this); 1099 accept(NodeVisitor visitor) => visitor.visitInterpolatedStatement(this);
1092 void visitChildren(NodeVisitor visitor) {} 1100 void visitChildren(NodeVisitor visitor) {}
1093 InterpolatedStatement _clone() => new InterpolatedStatement(nameOrPosition); 1101 InterpolatedStatement _clone() => new InterpolatedStatement(nameOrPosition);
1094 } 1102 }
1095 1103
1104 class InterpolatedDeclaration extends Expression
1105 with InterpolatedNode
1106 implements Declaration {
1107 final nameOrPosition;
1108
1109 InterpolatedDeclaration(this.nameOrPosition);
1110
1111 accept(NodeVisitor visitor) => visitor.visitInterpolatedDeclaration(this);
1112 void visitChildren(NodeVisitor visitor) {}
1113 InterpolatedDeclaration _clone() {
1114 return new InterpolatedDeclaration(nameOrPosition);
1115 }
1116
1117 @override
1118 String get name => throw "No name for the interpolated node";
1119
1120 @override
1121 int get precedenceLevel => PRIMARY;
1122 }
1123
1096 /** 1124 /**
1097 * [RegExpLiteral]s, despite being called "Literal", do not inherit from 1125 * [RegExpLiteral]s, despite being called "Literal", do not inherit from
1098 * [Literal]. Indeed, regular expressions in JavaScript have a side-effect and 1126 * [Literal]. Indeed, regular expressions in JavaScript have a side-effect and
1099 * are thus not in the same category as numbers or strings. 1127 * are thus not in the same category as numbers or strings.
1100 */ 1128 */
1101 class RegExpLiteral extends Expression { 1129 class RegExpLiteral extends Expression {
1102 /** Contains the pattern and the flags.*/ 1130 /** Contains the pattern and the flags.*/
1103 final String pattern; 1131 final String pattern;
1104 1132
1105 RegExpLiteral(this.pattern); 1133 RegExpLiteral(this.pattern);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1139 class Comment extends Statement { 1167 class Comment extends Statement {
1140 final String comment; 1168 final String comment;
1141 1169
1142 Comment(this.comment); 1170 Comment(this.comment);
1143 1171
1144 accept(NodeVisitor visitor) => visitor.visitComment(this); 1172 accept(NodeVisitor visitor) => visitor.visitComment(this);
1145 Comment _clone() => new Comment(comment); 1173 Comment _clone() => new Comment(comment);
1146 1174
1147 void visitChildren(NodeVisitor visitor) {} 1175 void visitChildren(NodeVisitor visitor) {}
1148 } 1176 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js/builder.dart ('k') | pkg/compiler/lib/src/js/printer.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698