Index: pkg/js_ast/lib/src/nodes.dart |
diff --git a/pkg/js_ast/lib/src/nodes.dart b/pkg/js_ast/lib/src/nodes.dart |
index 1b893c96cefdeac791ee60dad36795169c10541c..647c19893940a346d8dc73c17977c4be8fe130f7 100644 |
--- a/pkg/js_ast/lib/src/nodes.dart |
+++ b/pkg/js_ast/lib/src/nodes.dart |
@@ -194,6 +194,209 @@ class BaseVisitor<T> implements NodeVisitor<T> { |
T visitDartYield(DartYield node) => visitStatement(node); |
} |
+abstract class NodeVisitor1<R, A> { |
+ R visitProgram(Program node, A arg); |
+ |
+ R visitBlock(Block node, A arg); |
+ R visitExpressionStatement(ExpressionStatement node, A arg); |
+ R visitEmptyStatement(EmptyStatement node, A arg); |
+ R visitIf(If node, A arg); |
+ R visitFor(For node, A arg); |
+ R visitForIn(ForIn node, A arg); |
+ R visitWhile(While node, A arg); |
+ R visitDo(Do node, A arg); |
+ R visitContinue(Continue node, A arg); |
+ R visitBreak(Break node, A arg); |
+ R visitReturn(Return node, A arg); |
+ R visitThrow(Throw node, A arg); |
+ R visitTry(Try node, A arg); |
+ R visitCatch(Catch node, A arg); |
+ R visitSwitch(Switch node, A arg); |
+ R visitCase(Case node, A arg); |
+ R visitDefault(Default node, A arg); |
+ R visitFunctionDeclaration(FunctionDeclaration node, A arg); |
+ R visitLabeledStatement(LabeledStatement node, A arg); |
+ R visitLiteralStatement(LiteralStatement node, A arg); |
+ R visitDartYield(DartYield node, A arg); |
+ |
+ R visitLiteralExpression(LiteralExpression node, A arg); |
+ R visitVariableDeclarationList(VariableDeclarationList node, A arg); |
+ R visitAssignment(Assignment node, A arg); |
+ R visitVariableInitialization(VariableInitialization node, A arg); |
+ R visitConditional(Conditional cond, A arg); |
+ R visitNew(New node, A arg); |
+ R visitCall(Call node, A arg); |
+ R visitBinary(Binary node, A arg); |
+ R visitPrefix(Prefix node, A arg); |
+ R visitPostfix(Postfix node, A arg); |
+ |
+ R visitVariableUse(VariableUse node, A arg); |
+ R visitThis(This node, A arg); |
+ R visitVariableDeclaration(VariableDeclaration node, A arg); |
+ R visitParameter(Parameter node, A arg); |
+ R visitAccess(PropertyAccess node, A arg); |
+ |
+ R visitNamedFunction(NamedFunction node, A arg); |
+ R visitFun(Fun node, A arg); |
+ |
+ R visitDeferredExpression(DeferredExpression node, A arg); |
+ R visitDeferredNumber(DeferredNumber node, A arg); |
+ R visitDeferredString(DeferredString node, A arg); |
+ |
+ R visitLiteralBool(LiteralBool node, A arg); |
+ R visitLiteralString(LiteralString node, A arg); |
+ R visitLiteralNumber(LiteralNumber node, A arg); |
+ R visitLiteralNull(LiteralNull node, A arg); |
+ |
+ R visitStringConcatenation(StringConcatenation node, A arg); |
+ |
+ R visitName(Name node, A arg); |
+ |
+ R visitArrayInitializer(ArrayInitializer node, A arg); |
+ R visitArrayHole(ArrayHole node, A arg); |
+ R visitObjectInitializer(ObjectInitializer node, A arg); |
+ R visitProperty(Property node, A arg); |
+ R visitRegExpLiteral(RegExpLiteral node, A arg); |
+ |
+ R visitAwait(Await node, A arg); |
+ |
+ R visitComment(Comment node, A arg); |
+ |
+ R visitInterpolatedExpression(InterpolatedExpression node, A arg); |
+ R visitInterpolatedLiteral(InterpolatedLiteral node, A arg); |
+ R visitInterpolatedParameter(InterpolatedParameter node, A arg); |
+ R visitInterpolatedSelector(InterpolatedSelector node, A arg); |
+ R visitInterpolatedStatement(InterpolatedStatement node, A arg); |
+ R visitInterpolatedDeclaration(InterpolatedDeclaration node, A arg); |
+} |
+ |
+class BaseVisitor1<R, A> implements NodeVisitor1<R, A> { |
+ const BaseVisitor1(); |
+ |
+ R visitNode(Node node, A arg) { |
+ node.visitChildren1(this, arg); |
+ return null; |
+ } |
+ |
+ R visitProgram(Program node, A arg) => visitNode(node, arg); |
+ |
+ R visitStatement(Statement node, A arg) => visitNode(node, arg); |
+ R visitLoop(Loop node, A arg) => visitStatement(node, arg); |
+ R visitJump(Statement node, A arg) => visitStatement(node, arg); |
+ |
+ R visitBlock(Block node, A arg) => visitStatement(node, arg); |
+ R visitExpressionStatement(ExpressionStatement node, A arg) => |
+ visitStatement(node, arg); |
+ R visitEmptyStatement(EmptyStatement node, A arg) => |
+ visitStatement(node, arg); |
+ R visitIf(If node, A arg) => visitStatement(node, arg); |
+ R visitFor(For node, A arg) => visitLoop(node, arg); |
+ R visitForIn(ForIn node, A arg) => visitLoop(node, arg); |
+ R visitWhile(While node, A arg) => visitLoop(node, arg); |
+ R visitDo(Do node, A arg) => visitLoop(node, arg); |
+ R visitContinue(Continue node, A arg) => visitJump(node, arg); |
+ R visitBreak(Break node, A arg) => visitJump(node, arg); |
+ R visitReturn(Return node, A arg) => visitJump(node, arg); |
+ R visitThrow(Throw node, A arg) => visitJump(node, arg); |
+ R visitTry(Try node, A arg) => visitStatement(node, arg); |
+ R visitSwitch(Switch node, A arg) => visitStatement(node, arg); |
+ R visitFunctionDeclaration(FunctionDeclaration node, A arg) => |
+ visitStatement(node, arg); |
+ R visitLabeledStatement(LabeledStatement node, A arg) => |
+ visitStatement(node, arg); |
+ R visitLiteralStatement(LiteralStatement node, A arg) => |
+ visitStatement(node, arg); |
+ |
+ R visitCatch(Catch node, A arg) => visitNode(node, arg); |
+ R visitCase(Case node, A arg) => visitNode(node, arg); |
+ R visitDefault(Default node, A arg) => visitNode(node, arg); |
+ |
+ R visitExpression(Expression node, A arg) => visitNode(node, arg); |
+ R visitVariableReference(VariableReference node, A arg) => |
+ visitExpression(node, arg); |
+ |
+ R visitLiteralExpression(LiteralExpression node, A arg) => |
+ visitExpression(node, arg); |
+ R visitVariableDeclarationList(VariableDeclarationList node, A arg) => |
+ visitExpression(node, arg); |
+ R visitAssignment(Assignment node, A arg) => visitExpression(node, arg); |
+ R visitVariableInitialization(VariableInitialization node, A arg) { |
+ if (node.value != null) { |
+ return visitAssignment(node, arg); |
+ } else { |
+ return visitExpression(node, arg); |
+ } |
+ } |
+ |
+ R visitConditional(Conditional node, A arg) => visitExpression(node, arg); |
+ R visitNew(New node, A arg) => visitExpression(node, arg); |
+ R visitCall(Call node, A arg) => visitExpression(node, arg); |
+ R visitBinary(Binary node, A arg) => visitExpression(node, arg); |
+ R visitPrefix(Prefix node, A arg) => visitExpression(node, arg); |
+ R visitPostfix(Postfix node, A arg) => visitExpression(node, arg); |
+ R visitAccess(PropertyAccess node, A arg) => visitExpression(node, arg); |
+ |
+ R visitVariableUse(VariableUse node, A arg) => |
+ visitVariableReference(node, arg); |
+ R visitVariableDeclaration(VariableDeclaration node, A arg) => |
+ visitVariableReference(node, arg); |
+ R visitParameter(Parameter node, A arg) => |
+ visitVariableDeclaration(node, arg); |
+ R visitThis(This node, A arg) => visitParameter(node, arg); |
+ |
+ R visitNamedFunction(NamedFunction node, A arg) => visitExpression(node, arg); |
+ R visitFun(Fun node, A arg) => visitExpression(node, arg); |
+ |
+ R visitToken(DeferredToken node, A arg) => visitExpression(node, arg); |
+ |
+ R visitDeferredExpression(DeferredExpression node, A arg) => |
+ visitExpression(node, arg); |
+ R visitDeferredNumber(DeferredNumber node, A arg) => visitToken(node, arg); |
+ R visitDeferredString(DeferredString node, A arg) => visitToken(node, arg); |
+ |
+ R visitLiteral(Literal node, A arg) => visitExpression(node, arg); |
+ |
+ R visitLiteralBool(LiteralBool node, A arg) => visitLiteral(node, arg); |
+ R visitLiteralString(LiteralString node, A arg) => visitLiteral(node, arg); |
+ R visitLiteralNumber(LiteralNumber node, A arg) => visitLiteral(node, arg); |
+ R visitLiteralNull(LiteralNull node, A arg) => visitLiteral(node, arg); |
+ |
+ R visitStringConcatenation(StringConcatenation node, A arg) => |
+ visitLiteral(node, arg); |
+ |
+ R visitName(Name node, A arg) => visitNode(node, arg); |
+ |
+ R visitArrayInitializer(ArrayInitializer node, A arg) => |
+ visitExpression(node, arg); |
+ R visitArrayHole(ArrayHole node, A arg) => visitExpression(node, arg); |
+ R visitObjectInitializer(ObjectInitializer node, A arg) => |
+ visitExpression(node, arg); |
+ R visitProperty(Property node, A arg) => visitNode(node, arg); |
+ R visitRegExpLiteral(RegExpLiteral node, A arg) => visitExpression(node, arg); |
+ |
+ R visitInterpolatedNode(InterpolatedNode node, A arg) => visitNode(node, arg); |
+ |
+ R visitInterpolatedExpression(InterpolatedExpression node, A arg) => |
+ visitInterpolatedNode(node, arg); |
+ R visitInterpolatedLiteral(InterpolatedLiteral node, A arg) => |
+ visitInterpolatedNode(node, arg); |
+ R visitInterpolatedParameter(InterpolatedParameter node, A arg) => |
+ visitInterpolatedNode(node, arg); |
+ R visitInterpolatedSelector(InterpolatedSelector node, A arg) => |
+ visitInterpolatedNode(node, arg); |
+ R visitInterpolatedStatement(InterpolatedStatement node, A arg) => |
+ visitInterpolatedNode(node, arg); |
+ R visitInterpolatedDeclaration(InterpolatedDeclaration node, A arg) { |
+ return visitInterpolatedNode(node, arg); |
+ } |
+ |
+ // Ignore comments by default. |
+ R visitComment(Comment node, A arg) => null; |
+ |
+ R visitAwait(Await node, A arg) => visitExpression(node, arg); |
+ R visitDartYield(DartYield node, A arg) => visitStatement(node, arg); |
+} |
+ |
/// This tag interface has no behaviour but must be implemented by any class |
/// that is to be stored on a [Node] as source information. |
abstract class JavaScriptNodeSourceInformation { |
@@ -205,8 +408,11 @@ abstract class Node { |
JavaScriptNodeSourceInformation _sourceInformation; |
- accept(NodeVisitor visitor); |
- void visitChildren(NodeVisitor visitor); |
+ T accept<T>(NodeVisitor<T> visitor); |
+ void visitChildren<T>(NodeVisitor<T> visitor); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg); |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg); |
// Shallow clone of node. Does not clone positions since the only use of this |
// private method is create a copy with a new position. |
@@ -241,11 +447,19 @@ class Program extends Node { |
final List<Statement> body; |
Program(this.body); |
- accept(NodeVisitor visitor) => visitor.visitProgram(this); |
- void visitChildren(NodeVisitor visitor) { |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitProgram(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitProgram(this, arg); |
+ |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
for (Statement statement in body) statement.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ for (Statement statement in body) statement.accept1(visitor, arg); |
+ } |
+ |
Program _clone() => new Program(body); |
} |
@@ -255,36 +469,62 @@ abstract class Statement extends Node { |
class Block extends Statement { |
final List<Statement> statements; |
+ |
Block(this.statements); |
+ |
Block.empty() : this.statements = <Statement>[]; |
- accept(NodeVisitor visitor) => visitor.visitBlock(this); |
- void visitChildren(NodeVisitor visitor) { |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitBlock(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitBlock(this, arg); |
+ |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
for (Statement statement in statements) statement.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ for (Statement statement in statements) statement.accept1(visitor, arg); |
+ } |
+ |
Block _clone() => new Block(statements); |
} |
class ExpressionStatement extends Statement { |
final Expression expression; |
+ |
ExpressionStatement(this.expression) { |
assert(this.expression != null); |
} |
- accept(NodeVisitor visitor) => visitor.visitExpressionStatement(this); |
- void visitChildren(NodeVisitor visitor) { |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitExpressionStatement(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitExpressionStatement(this, arg); |
+ |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
expression.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ expression.accept1(visitor, arg); |
+ } |
+ |
ExpressionStatement _clone() => new ExpressionStatement(expression); |
} |
class EmptyStatement extends Statement { |
EmptyStatement(); |
- accept(NodeVisitor visitor) => visitor.visitEmptyStatement(this); |
- void visitChildren(NodeVisitor visitor) {} |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitEmptyStatement(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitEmptyStatement(this, arg); |
+ |
+ void visitChildren<T>(NodeVisitor<T> visitor) {} |
+ |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {} |
+ |
EmptyStatement _clone() => new EmptyStatement(); |
} |
@@ -294,23 +534,34 @@ class If extends Statement { |
final Statement otherwise; |
If(this.condition, this.then, this.otherwise); |
+ |
If.noElse(this.condition, this.then) : this.otherwise = new EmptyStatement(); |
bool get hasElse => otherwise is! EmptyStatement; |
- accept(NodeVisitor visitor) => visitor.visitIf(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitIf(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitIf(this, arg); |
- void visitChildren(NodeVisitor visitor) { |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
condition.accept(visitor); |
then.accept(visitor); |
otherwise.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ condition.accept1(visitor, arg); |
+ then.accept1(visitor, arg); |
+ otherwise.accept1(visitor, arg); |
+ } |
+ |
If _clone() => new If(condition, then, otherwise); |
} |
abstract class Loop extends Statement { |
final Statement body; |
+ |
Loop(this.body); |
} |
@@ -321,15 +572,25 @@ class For extends Loop { |
For(this.init, this.condition, this.update, Statement body) : super(body); |
- accept(NodeVisitor visitor) => visitor.visitFor(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitFor(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitFor(this, arg); |
- void visitChildren(NodeVisitor visitor) { |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
if (init != null) init.accept(visitor); |
if (condition != null) condition.accept(visitor); |
if (update != null) update.accept(visitor); |
body.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ if (init != null) init.accept1(visitor, arg); |
+ if (condition != null) condition.accept1(visitor, arg); |
+ if (update != null) update.accept1(visitor, arg); |
+ body.accept1(visitor, arg); |
+ } |
+ |
For _clone() => new For(init, condition, update, body); |
} |
@@ -341,14 +602,23 @@ class ForIn extends Loop { |
ForIn(this.leftHandSide, this.object, Statement body) : super(body); |
- accept(NodeVisitor visitor) => visitor.visitForIn(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitForIn(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitForIn(this, arg); |
- void visitChildren(NodeVisitor visitor) { |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
leftHandSide.accept(visitor); |
object.accept(visitor); |
body.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ leftHandSide.accept1(visitor, arg); |
+ object.accept1(visitor, arg); |
+ body.accept1(visitor, arg); |
+ } |
+ |
ForIn _clone() => new ForIn(leftHandSide, object, body); |
} |
@@ -357,13 +627,21 @@ class While extends Loop { |
While(this.condition, Statement body) : super(body); |
- accept(NodeVisitor visitor) => visitor.visitWhile(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitWhile(this); |
- void visitChildren(NodeVisitor visitor) { |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitWhile(this, arg); |
+ |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
condition.accept(visitor); |
body.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ condition.accept1(visitor, arg); |
+ body.accept1(visitor, arg); |
+ } |
+ |
While _clone() => new While(condition, body); |
} |
@@ -372,13 +650,21 @@ class Do extends Loop { |
Do(Statement body, this.condition) : super(body); |
- accept(NodeVisitor visitor) => visitor.visitDo(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitDo(this); |
- void visitChildren(NodeVisitor visitor) { |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitDo(this, arg); |
+ |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
body.accept(visitor); |
condition.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ body.accept1(visitor, arg); |
+ condition.accept1(visitor, arg); |
+ } |
+ |
Do _clone() => new Do(body, condition); |
} |
@@ -387,8 +673,14 @@ class Continue extends Statement { |
Continue(this.targetLabel); |
- accept(NodeVisitor visitor) => visitor.visitContinue(this); |
- void visitChildren(NodeVisitor visitor) {} |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitContinue(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitContinue(this, arg); |
+ |
+ void visitChildren<T>(NodeVisitor<T> visitor) {} |
+ |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {} |
Continue _clone() => new Continue(targetLabel); |
} |
@@ -398,8 +690,14 @@ class Break extends Statement { |
Break(this.targetLabel); |
- accept(NodeVisitor visitor) => visitor.visitBreak(this); |
- void visitChildren(NodeVisitor visitor) {} |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitBreak(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitBreak(this, arg); |
+ |
+ void visitChildren<T>(NodeVisitor<T> visitor) {} |
+ |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {} |
Break _clone() => new Break(targetLabel); |
} |
@@ -409,12 +707,19 @@ class Return extends Statement { |
Return([this.value = null]); |
- accept(NodeVisitor visitor) => visitor.visitReturn(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitReturn(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitReturn(this, arg); |
- void visitChildren(NodeVisitor visitor) { |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
if (value != null) value.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ if (value != null) value.accept1(visitor, arg); |
+ } |
+ |
Return _clone() => new Return(value); |
} |
@@ -423,12 +728,19 @@ class Throw extends Statement { |
Throw(this.expression); |
- accept(NodeVisitor visitor) => visitor.visitThrow(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitThrow(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitThrow(this, arg); |
- void visitChildren(NodeVisitor visitor) { |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
expression.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ expression.accept1(visitor, arg); |
+ } |
+ |
Throw _clone() => new Throw(expression); |
} |
@@ -441,14 +753,23 @@ class Try extends Statement { |
assert(catchPart != null || finallyPart != null); |
} |
- accept(NodeVisitor visitor) => visitor.visitTry(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitTry(this); |
- void visitChildren(NodeVisitor visitor) { |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitTry(this, arg); |
+ |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
body.accept(visitor); |
if (catchPart != null) catchPart.accept(visitor); |
if (finallyPart != null) finallyPart.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ body.accept1(visitor, arg); |
+ if (catchPart != null) catchPart.accept1(visitor, arg); |
+ if (finallyPart != null) finallyPart.accept1(visitor, arg); |
+ } |
+ |
Try _clone() => new Try(body, catchPart, finallyPart); |
} |
@@ -458,13 +779,21 @@ class Catch extends Node { |
Catch(this.declaration, this.body); |
- accept(NodeVisitor visitor) => visitor.visitCatch(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitCatch(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitCatch(this, arg); |
- void visitChildren(NodeVisitor visitor) { |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
declaration.accept(visitor); |
body.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ declaration.accept1(visitor, arg); |
+ body.accept1(visitor, arg); |
+ } |
+ |
Catch _clone() => new Catch(declaration, body); |
} |
@@ -474,13 +803,21 @@ class Switch extends Statement { |
Switch(this.key, this.cases); |
- accept(NodeVisitor visitor) => visitor.visitSwitch(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitSwitch(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitSwitch(this, arg); |
- void visitChildren(NodeVisitor visitor) { |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
key.accept(visitor); |
for (SwitchClause clause in cases) clause.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ key.accept1(visitor, arg); |
+ for (SwitchClause clause in cases) clause.accept1(visitor, arg); |
+ } |
+ |
Switch _clone() => new Switch(key, cases); |
} |
@@ -495,25 +832,40 @@ class Case extends SwitchClause { |
Case(this.expression, Block body) : super(body); |
- accept(NodeVisitor visitor) => visitor.visitCase(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitCase(this); |
- void visitChildren(NodeVisitor visitor) { |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitCase(this, arg); |
+ |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
expression.accept(visitor); |
body.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ expression.accept1(visitor, arg); |
+ body.accept1(visitor, arg); |
+ } |
+ |
Case _clone() => new Case(expression, body); |
} |
class Default extends SwitchClause { |
Default(Block body) : super(body); |
- accept(NodeVisitor visitor) => visitor.visitDefault(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitDefault(this); |
- void visitChildren(NodeVisitor visitor) { |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitDefault(this, arg); |
+ |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
body.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ body.accept1(visitor, arg); |
+ } |
+ |
Default _clone() => new Default(body); |
} |
@@ -523,13 +875,21 @@ class FunctionDeclaration extends Statement { |
FunctionDeclaration(this.name, this.function); |
- accept(NodeVisitor visitor) => visitor.visitFunctionDeclaration(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitFunctionDeclaration(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitFunctionDeclaration(this, arg); |
- void visitChildren(NodeVisitor visitor) { |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
name.accept(visitor); |
function.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ name.accept1(visitor, arg); |
+ function.accept1(visitor, arg); |
+ } |
+ |
FunctionDeclaration _clone() => new FunctionDeclaration(name, function); |
} |
@@ -539,12 +899,19 @@ class LabeledStatement extends Statement { |
LabeledStatement(this.label, this.body); |
- accept(NodeVisitor visitor) => visitor.visitLabeledStatement(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitLabeledStatement(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitLabeledStatement(this, arg); |
- void visitChildren(NodeVisitor visitor) { |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
body.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ body.accept1(visitor, arg); |
+ } |
+ |
LabeledStatement _clone() => new LabeledStatement(label, body); |
} |
@@ -553,8 +920,14 @@ class LiteralStatement extends Statement { |
LiteralStatement(this.code); |
- accept(NodeVisitor visitor) => visitor.visitLiteralStatement(this); |
- void visitChildren(NodeVisitor visitor) {} |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitLiteralStatement(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitLiteralStatement(this, arg); |
+ |
+ void visitChildren<T>(NodeVisitor<T> visitor) {} |
+ |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {} |
LiteralStatement _clone() => new LiteralStatement(code); |
} |
@@ -568,12 +941,19 @@ class DartYield extends Statement { |
DartYield(this.expression, this.hasStar); |
- accept(NodeVisitor visitor) => visitor.visitDartYield(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitDartYield(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitDartYield(this, arg); |
- void visitChildren(NodeVisitor visitor) { |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
expression.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ expression.accept1(visitor, arg); |
+ } |
+ |
DartYield _clone() => new DartYield(expression, hasStar); |
} |
@@ -594,7 +974,10 @@ abstract class Declaration implements VariableReference {} |
/// will implement some form of lexicographic ordering like [String.compareTo]. |
abstract class Name extends Literal |
implements Declaration, Parameter, Comparable { |
- accept(NodeVisitor visitor) => visitor.visitName(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitName(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitName(this, arg); |
/// Returns a unique [key] for this name. |
/// |
@@ -612,9 +995,13 @@ class LiteralStringFromName extends LiteralString { |
String get value => '"${name.name}"'; |
- void visitChildren(NodeVisitor visitor) { |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
name.accept(visitor); |
} |
+ |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ name.accept1(visitor, arg); |
+ } |
} |
class LiteralExpression extends Expression { |
@@ -622,16 +1009,26 @@ class LiteralExpression extends Expression { |
final List<Expression> inputs; |
LiteralExpression(this.template) : inputs = const []; |
+ |
LiteralExpression.withData(this.template, this.inputs); |
- accept(NodeVisitor visitor) => visitor.visitLiteralExpression(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitLiteralExpression(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitLiteralExpression(this, arg); |
- void visitChildren(NodeVisitor visitor) { |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
if (inputs != null) { |
for (Expression expr in inputs) expr.accept(visitor); |
} |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ if (inputs != null) { |
+ for (Expression expr in inputs) expr.accept1(visitor, arg); |
+ } |
+ } |
+ |
LiteralExpression _clone() => |
new LiteralExpression.withData(template, inputs); |
@@ -649,14 +1046,24 @@ class VariableDeclarationList extends Expression { |
VariableDeclarationList(this.declarations); |
- accept(NodeVisitor visitor) => visitor.visitVariableDeclarationList(this); |
+ T accept<T>(NodeVisitor<T> visitor) => |
+ visitor.visitVariableDeclarationList(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitVariableDeclarationList(this, arg); |
- void visitChildren(NodeVisitor visitor) { |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
for (VariableInitialization declaration in declarations) { |
declaration.accept(visitor); |
} |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ for (VariableInitialization declaration in declarations) { |
+ declaration.accept1(visitor, arg); |
+ } |
+ } |
+ |
VariableDeclarationList _clone() => new VariableDeclarationList(declarations); |
int get precedenceLevel => EXPRESSION; |
@@ -668,6 +1075,7 @@ class Assignment extends Expression { |
final Expression value; // May be null, for [VariableInitialization]s. |
Assignment(leftHandSide, value) : this.compound(leftHandSide, null, value); |
+ |
// If `this.op == null` this will be a non-compound assignment. |
Assignment.compound(this.leftHandSide, this.op, this.value); |
@@ -675,13 +1083,21 @@ class Assignment extends Expression { |
bool get isCompound => op != null; |
- accept(NodeVisitor visitor) => visitor.visitAssignment(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitAssignment(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitAssignment(this, arg); |
- void visitChildren(NodeVisitor visitor) { |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
leftHandSide.accept(visitor); |
if (value != null) value.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ leftHandSide.accept1(visitor, arg); |
+ if (value != null) value.accept1(visitor, arg); |
+ } |
+ |
Assignment _clone() => new Assignment.compound(leftHandSide, op, value); |
} |
@@ -692,7 +1108,11 @@ class VariableInitialization extends Assignment { |
Declaration get declaration => leftHandSide; |
- accept(NodeVisitor visitor) => visitor.visitVariableInitialization(this); |
+ T accept<T>(NodeVisitor<T> visitor) => |
+ visitor.visitVariableInitialization(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitVariableInitialization(this, arg); |
VariableInitialization _clone() => |
new VariableInitialization(declaration, value); |
@@ -705,14 +1125,23 @@ class Conditional extends Expression { |
Conditional(this.condition, this.then, this.otherwise); |
- accept(NodeVisitor visitor) => visitor.visitConditional(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitConditional(this); |
- void visitChildren(NodeVisitor visitor) { |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitConditional(this, arg); |
+ |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
condition.accept(visitor); |
then.accept(visitor); |
otherwise.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ condition.accept1(visitor, arg); |
+ then.accept1(visitor, arg); |
+ otherwise.accept1(visitor, arg); |
+ } |
+ |
Conditional _clone() => new Conditional(condition, then, otherwise); |
int get precedenceLevel => ASSIGNMENT; |
@@ -727,15 +1156,25 @@ class Call extends Expression { |
this._sourceInformation = sourceInformation; |
} |
- accept(NodeVisitor visitor) => visitor.visitCall(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitCall(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitCall(this, arg); |
- void visitChildren(NodeVisitor visitor) { |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
target.accept(visitor); |
for (Expression arg in arguments) { |
arg.accept(visitor); |
} |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ target.accept1(visitor, arg); |
+ for (Expression arg in arguments) { |
+ arg.accept1(visitor, arg); |
+ } |
+ } |
+ |
Call _clone() => new Call(target, arguments); |
int get precedenceLevel => CALL; |
@@ -744,7 +1183,10 @@ class Call extends Expression { |
class New extends Call { |
New(Expression cls, List<Expression> arguments) : super(cls, arguments); |
- accept(NodeVisitor visitor) => visitor.visitNew(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitNew(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitNew(this, arg); |
New _clone() => new New(target, arguments); |
} |
@@ -756,15 +1198,23 @@ class Binary extends Expression { |
Binary(this.op, this.left, this.right); |
- accept(NodeVisitor visitor) => visitor.visitBinary(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitBinary(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitBinary(this, arg); |
Binary _clone() => new Binary(op, left, right); |
- void visitChildren(NodeVisitor visitor) { |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
left.accept(visitor); |
right.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ left.accept1(visitor, arg); |
+ right.accept1(visitor, arg); |
+ } |
+ |
bool get isCommaOperator => op == ','; |
int get precedenceLevel { |
@@ -817,14 +1267,21 @@ class Prefix extends Expression { |
Prefix(this.op, this.argument); |
- accept(NodeVisitor visitor) => visitor.visitPrefix(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitPrefix(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitPrefix(this, arg); |
Prefix _clone() => new Prefix(op, argument); |
- void visitChildren(NodeVisitor visitor) { |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
argument.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ argument.accept1(visitor, arg); |
+ } |
+ |
int get precedenceLevel => UNARY; |
} |
@@ -834,14 +1291,21 @@ class Postfix extends Expression { |
Postfix(this.op, this.argument); |
- accept(NodeVisitor visitor) => visitor.visitPostfix(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitPostfix(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitPostfix(this, arg); |
Postfix _clone() => new Postfix(op, argument); |
- void visitChildren(NodeVisitor visitor) { |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
argument.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ argument.accept1(visitor, arg); |
+ } |
+ |
int get precedenceLevel => UNARY; |
} |
@@ -851,43 +1315,65 @@ abstract class VariableReference extends Expression { |
VariableReference(this.name) { |
assert(_identifierRE.hasMatch(name)); |
} |
+ |
static RegExp _identifierRE = new RegExp(r'^[A-Za-z_$][A-Za-z_$0-9]*$'); |
accept(NodeVisitor visitor); |
+ |
int get precedenceLevel => PRIMARY; |
- void visitChildren(NodeVisitor visitor) {} |
+ |
+ void visitChildren<T>(NodeVisitor<T> visitor) {} |
+ |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {} |
} |
class VariableUse extends VariableReference { |
VariableUse(String name) : super(name); |
- accept(NodeVisitor visitor) => visitor.visitVariableUse(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitVariableUse(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitVariableUse(this, arg); |
+ |
VariableUse _clone() => new VariableUse(name); |
VariableUse asVariableUse() => this; |
- toString() => 'VariableUse($name)'; |
+ String toString() => 'VariableUse($name)'; |
} |
class VariableDeclaration extends VariableReference implements Declaration { |
final bool allowRename; |
+ |
VariableDeclaration(String name, {this.allowRename: true}) : super(name); |
- accept(NodeVisitor visitor) => visitor.visitVariableDeclaration(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitVariableDeclaration(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitVariableDeclaration(this, arg); |
+ |
VariableDeclaration _clone() => new VariableDeclaration(name); |
} |
class Parameter extends VariableDeclaration { |
Parameter(String name) : super(name); |
- accept(NodeVisitor visitor) => visitor.visitParameter(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitParameter(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitParameter(this, arg); |
+ |
Parameter _clone() => new Parameter(name); |
} |
class This extends Parameter { |
This() : super("this"); |
- accept(NodeVisitor visitor) => visitor.visitThis(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitThis(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitThis(this, arg); |
+ |
This _clone() => new This(); |
} |
@@ -897,13 +1383,21 @@ class NamedFunction extends Expression { |
NamedFunction(this.name, this.function); |
- accept(NodeVisitor visitor) => visitor.visitNamedFunction(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitNamedFunction(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitNamedFunction(this, arg); |
- void visitChildren(NodeVisitor visitor) { |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
name.accept(visitor); |
function.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ name.accept1(visitor, arg); |
+ function.accept1(visitor, arg); |
+ } |
+ |
NamedFunction _clone() => new NamedFunction(name, function); |
int get precedenceLevel => LEFT_HAND_SIDE; |
@@ -916,13 +1410,21 @@ class Fun extends Expression { |
Fun(this.params, this.body, {this.asyncModifier: const AsyncModifier.sync()}); |
- accept(NodeVisitor visitor) => visitor.visitFun(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitFun(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitFun(this, arg); |
- void visitChildren(NodeVisitor visitor) { |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
for (Parameter param in params) param.accept(visitor); |
body.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ for (Parameter param in params) param.accept1(visitor, arg); |
+ body.accept1(visitor, arg); |
+ } |
+ |
Fun _clone() => new Fun(params, body, asyncModifier: asyncModifier); |
int get precedenceLevel => LEFT_HAND_SIDE; |
@@ -957,18 +1459,28 @@ class PropertyAccess extends Expression { |
final Expression selector; |
PropertyAccess(this.receiver, this.selector); |
+ |
PropertyAccess.field(this.receiver, String fieldName) |
: selector = new LiteralString('"$fieldName"'); |
+ |
PropertyAccess.indexed(this.receiver, int index) |
: selector = new LiteralNumber('$index'); |
- accept(NodeVisitor visitor) => visitor.visitAccess(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitAccess(this); |
- void visitChildren(NodeVisitor visitor) { |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitAccess(this, arg); |
+ |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
receiver.accept(visitor); |
selector.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ receiver.accept1(visitor, arg); |
+ selector.accept1(visitor, arg); |
+ } |
+ |
PropertyAccess _clone() => new PropertyAccess(receiver, selector); |
int get precedenceLevel => LEFT_HAND_SIDE; |
@@ -979,7 +1491,9 @@ class PropertyAccess extends Expression { |
/// [DeferredToken] is not limited to templates but may also occur in |
/// fully instantiated asts. |
abstract class DeferredToken extends Expression { |
- void visitChildren(NodeVisitor visitor) {} |
+ void visitChildren<T>(NodeVisitor<T> visitor) {} |
+ |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {} |
DeferredToken _clone() => this; |
} |
@@ -987,7 +1501,10 @@ abstract class DeferredToken extends Expression { |
/// Interface for a deferred integer value. An implementation has to provide |
/// a value via the [value] getter the latest when the ast is printed. |
abstract class DeferredNumber extends DeferredToken implements Literal { |
- accept(NodeVisitor visitor) => visitor.visitDeferredNumber(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitDeferredNumber(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitDeferredNumber(this, arg); |
int get value; |
@@ -997,7 +1514,10 @@ abstract class DeferredNumber extends DeferredToken implements Literal { |
/// Interface for a deferred string value. An implementation has to provide |
/// a value via the [value] getter the latest when the ast is printed. |
abstract class DeferredString extends DeferredToken implements Literal { |
- accept(NodeVisitor visitor) => visitor.visitDeferredString(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitDeferredString(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitDeferredString(this, arg); |
String get value; |
@@ -1009,13 +1529,18 @@ abstract class DeferredString extends DeferredToken implements Literal { |
/// Also, [precedenceLevel] has to return the same value that |
/// [value.precedenceLevel] returns once [value] is bound to an [Expression]. |
abstract class DeferredExpression extends DeferredToken { |
- accept(NodeVisitor visitor) => visitor.visitDeferredExpression(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitDeferredExpression(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitDeferredExpression(this, arg); |
Expression get value; |
} |
abstract class Literal extends Expression { |
- void visitChildren(NodeVisitor visitor) {} |
+ void visitChildren<T>(NodeVisitor<T> visitor) {} |
+ |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {} |
int get precedenceLevel => PRIMARY; |
} |
@@ -1025,15 +1550,24 @@ class LiteralBool extends Literal { |
LiteralBool(this.value); |
- accept(NodeVisitor visitor) => visitor.visitLiteralBool(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitLiteralBool(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitLiteralBool(this, arg); |
+ |
// [visitChildren] inherited from [Literal]. |
+ |
LiteralBool _clone() => new LiteralBool(value); |
} |
class LiteralNull extends Literal { |
LiteralNull(); |
- accept(NodeVisitor visitor) => visitor.visitLiteralNull(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitLiteralNull(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitLiteralNull(this, arg); |
+ |
LiteralNull _clone() => new LiteralNull(); |
} |
@@ -1052,7 +1586,11 @@ class LiteralString extends Literal { |
*/ |
LiteralString(this.value); |
- accept(NodeVisitor visitor) => visitor.visitLiteralString(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitLiteralString(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitLiteralString(this, arg); |
+ |
LiteralString _clone() => new LiteralString(value); |
} |
@@ -1066,12 +1604,19 @@ class StringConcatenation extends Literal { |
*/ |
StringConcatenation(this.parts); |
- accept(NodeVisitor visitor) => visitor.visitStringConcatenation(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitStringConcatenation(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitStringConcatenation(this, arg); |
- void visitChildren(NodeVisitor visitor) { |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
for (Literal part in parts) part.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ for (Literal part in parts) part.accept1(visitor, arg); |
+ } |
+ |
StringConcatenation _clone() => new StringConcatenation(this.parts); |
} |
@@ -1082,7 +1627,11 @@ class LiteralNumber extends Literal { |
int get precedenceLevel => value.startsWith('-') ? UNARY : PRIMARY; |
- accept(NodeVisitor visitor) => visitor.visitLiteralNumber(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitLiteralNumber(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitLiteralNumber(this, arg); |
+ |
LiteralNumber _clone() => new LiteralNumber(value); |
} |
@@ -1091,12 +1640,19 @@ class ArrayInitializer extends Expression { |
ArrayInitializer(this.elements); |
- accept(NodeVisitor visitor) => visitor.visitArrayInitializer(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitArrayInitializer(this); |
- void visitChildren(NodeVisitor visitor) { |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitArrayInitializer(this, arg); |
+ |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
for (Expression element in elements) element.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ for (Expression element in elements) element.accept1(visitor, arg); |
+ } |
+ |
ArrayInitializer _clone() => new ArrayInitializer(elements); |
int get precedenceLevel => PRIMARY; |
@@ -1107,9 +1663,14 @@ class ArrayInitializer extends Expression { |
* For example the list [1, , , 2] would contain two holes. |
*/ |
class ArrayHole extends Expression { |
- accept(NodeVisitor visitor) => visitor.visitArrayHole(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitArrayHole(this); |
- void visitChildren(NodeVisitor visitor) {} |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitArrayHole(this, arg); |
+ |
+ void visitChildren<T>(NodeVisitor<T> visitor) {} |
+ |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {} |
ArrayHole _clone() => new ArrayHole(); |
@@ -1129,12 +1690,19 @@ class ObjectInitializer extends Expression { |
*/ |
ObjectInitializer(this.properties, {this.isOneLiner: true}); |
- accept(NodeVisitor visitor) => visitor.visitObjectInitializer(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitObjectInitializer(this); |
- void visitChildren(NodeVisitor visitor) { |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitObjectInitializer(this, arg); |
+ |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
for (Property init in properties) init.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ for (Property init in properties) init.accept1(visitor, arg); |
+ } |
+ |
ObjectInitializer _clone() => |
new ObjectInitializer(properties, isOneLiner: isOneLiner); |
@@ -1147,13 +1715,21 @@ class Property extends Node { |
Property(this.name, this.value); |
- accept(NodeVisitor visitor) => visitor.visitProperty(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitProperty(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitProperty(this, arg); |
- void visitChildren(NodeVisitor visitor) { |
+ void visitChildren<T>(NodeVisitor<T> visitor) { |
name.accept(visitor); |
value.accept(visitor); |
} |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) { |
+ name.accept1(visitor, arg); |
+ value.accept1(visitor, arg); |
+ } |
+ |
Property _clone() => new Property(name, value); |
} |
@@ -1162,6 +1738,7 @@ abstract class InterpolatedNode implements Node { |
get nameOrPosition; |
bool get isNamed => nameOrPosition is String; |
+ |
bool get isPositional => nameOrPosition is int; |
} |
@@ -1170,8 +1747,16 @@ class InterpolatedExpression extends Expression with InterpolatedNode { |
InterpolatedExpression(this.nameOrPosition); |
- accept(NodeVisitor visitor) => visitor.visitInterpolatedExpression(this); |
- void visitChildren(NodeVisitor visitor) {} |
+ T accept<T>(NodeVisitor<T> visitor) => |
+ visitor.visitInterpolatedExpression(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitInterpolatedExpression(this, arg); |
+ |
+ void visitChildren<T>(NodeVisitor<T> visitor) {} |
+ |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {} |
+ |
InterpolatedExpression _clone() => new InterpolatedExpression(nameOrPosition); |
int get precedenceLevel => PRIMARY; |
@@ -1182,8 +1767,15 @@ class InterpolatedLiteral extends Literal with InterpolatedNode { |
InterpolatedLiteral(this.nameOrPosition); |
- accept(NodeVisitor visitor) => visitor.visitInterpolatedLiteral(this); |
- void visitChildren(NodeVisitor visitor) {} |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitInterpolatedLiteral(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitInterpolatedLiteral(this, arg); |
+ |
+ void visitChildren<T>(NodeVisitor<T> visitor) {} |
+ |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {} |
+ |
InterpolatedLiteral _clone() => new InterpolatedLiteral(nameOrPosition); |
} |
@@ -1192,16 +1784,24 @@ class InterpolatedParameter extends Expression |
implements Parameter { |
final nameOrPosition; |
+ InterpolatedParameter(this.nameOrPosition); |
+ |
String get name { |
throw "InterpolatedParameter.name must not be invoked"; |
} |
bool get allowRename => false; |
- InterpolatedParameter(this.nameOrPosition); |
+ T accept<T>(NodeVisitor<T> visitor) => |
+ visitor.visitInterpolatedParameter(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitInterpolatedParameter(this, arg); |
+ |
+ void visitChildren<T>(NodeVisitor<T> visitor) {} |
+ |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {} |
- accept(NodeVisitor visitor) => visitor.visitInterpolatedParameter(this); |
- void visitChildren(NodeVisitor visitor) {} |
InterpolatedParameter _clone() => new InterpolatedParameter(nameOrPosition); |
int get precedenceLevel => PRIMARY; |
@@ -1212,8 +1812,16 @@ class InterpolatedSelector extends Expression with InterpolatedNode { |
InterpolatedSelector(this.nameOrPosition); |
- accept(NodeVisitor visitor) => visitor.visitInterpolatedSelector(this); |
- void visitChildren(NodeVisitor visitor) {} |
+ T accept<T>(NodeVisitor<T> visitor) => |
+ visitor.visitInterpolatedSelector(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitInterpolatedSelector(this, arg); |
+ |
+ void visitChildren<T>(NodeVisitor<T> visitor) {} |
+ |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {} |
+ |
InterpolatedSelector _clone() => new InterpolatedSelector(nameOrPosition); |
int get precedenceLevel => PRIMARY; |
@@ -1224,8 +1832,16 @@ class InterpolatedStatement extends Statement with InterpolatedNode { |
InterpolatedStatement(this.nameOrPosition); |
- accept(NodeVisitor visitor) => visitor.visitInterpolatedStatement(this); |
- void visitChildren(NodeVisitor visitor) {} |
+ T accept<T>(NodeVisitor<T> visitor) => |
+ visitor.visitInterpolatedStatement(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitInterpolatedStatement(this, arg); |
+ |
+ void visitChildren<T>(NodeVisitor<T> visitor) {} |
+ |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {} |
+ |
InterpolatedStatement _clone() => new InterpolatedStatement(nameOrPosition); |
} |
@@ -1236,8 +1852,16 @@ class InterpolatedDeclaration extends Expression |
InterpolatedDeclaration(this.nameOrPosition); |
- accept(NodeVisitor visitor) => visitor.visitInterpolatedDeclaration(this); |
- void visitChildren(NodeVisitor visitor) {} |
+ T accept<T>(NodeVisitor<T> visitor) => |
+ visitor.visitInterpolatedDeclaration(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitInterpolatedDeclaration(this, arg); |
+ |
+ void visitChildren<T>(NodeVisitor<T> visitor) {} |
+ |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {} |
+ |
InterpolatedDeclaration _clone() { |
return new InterpolatedDeclaration(nameOrPosition); |
} |
@@ -1260,8 +1884,15 @@ class RegExpLiteral extends Expression { |
RegExpLiteral(this.pattern); |
- accept(NodeVisitor visitor) => visitor.visitRegExpLiteral(this); |
- void visitChildren(NodeVisitor visitor) {} |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitRegExpLiteral(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitRegExpLiteral(this, arg); |
+ |
+ void visitChildren<T>(NodeVisitor<T> visitor) {} |
+ |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {} |
+ |
RegExpLiteral _clone() => new RegExpLiteral(pattern); |
int get precedenceLevel => PRIMARY; |
@@ -1280,8 +1911,17 @@ class Await extends Expression { |
Await(this.expression); |
int get precedenceLevel => UNARY; |
- accept(NodeVisitor visitor) => visitor.visitAwait(this); |
- void visitChildren(NodeVisitor visitor) => expression.accept(visitor); |
+ |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitAwait(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitAwait(this, arg); |
+ |
+ void visitChildren<T>(NodeVisitor<T> visitor) => expression.accept(visitor); |
+ |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ expression.accept1(visitor, arg); |
+ |
Await _clone() => new Await(expression); |
} |
@@ -1296,8 +1936,14 @@ class Comment extends Statement { |
Comment(this.comment); |
- accept(NodeVisitor visitor) => visitor.visitComment(this); |
+ T accept<T>(NodeVisitor<T> visitor) => visitor.visitComment(this); |
+ |
+ R accept1<R, A>(NodeVisitor1<R, A> visitor, A arg) => |
+ visitor.visitComment(this, arg); |
+ |
Comment _clone() => new Comment(comment); |
- void visitChildren(NodeVisitor visitor) {} |
+ void visitChildren<T>(NodeVisitor<T> visitor) {} |
+ |
+ void visitChildren1<R, A>(NodeVisitor1<R, A> visitor, A arg) {} |
} |