Index: pkg/fasta/lib/src/kernel/body_builder.dart |
diff --git a/pkg/fasta/lib/src/kernel/body_builder.dart b/pkg/fasta/lib/src/kernel/body_builder.dart |
index f8e63d1184c68b585843a2b6df3156ada00a0a5b..3446c5564a7948be997a9d9bb53264103639af78 100644 |
--- a/pkg/fasta/lib/src/kernel/body_builder.dart |
+++ b/pkg/fasta/lib/src/kernel/body_builder.dart |
@@ -115,6 +115,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
final ClassHierarchy hierarchy; |
+ @override |
final CoreTypes coreTypes; |
final bool isInstanceMember; |
@@ -157,6 +158,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
return isInstanceMember || member is KernelConstructorBuilder; |
} |
+ @override |
void push(Object node) { |
isFirstIdentifier = false; |
inInitializer = false; |
@@ -167,6 +169,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
Expression popForEffect() => toEffect(pop()); |
+ @override |
Expression toValue(Object node) { |
if (node is UnresolvedIdentifier) { |
return throwNoSuchMethodError(node.name.name, new Arguments.empty(), |
@@ -258,10 +261,13 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
switchScope = pop(); |
} |
+ @override |
Uri get uri => library.fileUri ?? library.uri; |
+ @override |
JumpTarget createJumpTarget(JumpTargetKind kind) => new JumpTarget(kind); |
+ @override |
void endMetadata(Token beginToken, Token periodBeforeName, Token endToken) { |
debugEvent("Metadata"); |
pop(); // Arguments. |
@@ -271,11 +277,13 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
// TODO(ahe): Implement metadata on local declarations. |
} |
+ @override |
void endMetadataStar(int count, bool forParameter) { |
debugEvent("MetadataStar"); |
push(NullValue.Metadata); |
} |
+ @override |
void endTopLevelFields(int count, Token beginToken, Token endToken) { |
debugEvent("TopLevelFields"); |
doFields(count); |
@@ -284,6 +292,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
// DietListener discarding top-level member metadata. |
} |
+ @override |
void endFields(int count, Token beginToken, Token endToken) { |
debugEvent("Fields"); |
doFields(count); |
@@ -317,11 +326,13 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
void endMember() { |
debugEvent("Member"); |
checkEmpty(); |
} |
+ @override |
void endFunctionBody(int count, Token beginToken, Token endToken) { |
debugEvent("FunctionBody"); |
if (beginToken == null) { |
@@ -334,6 +345,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
void prepareInitializers() { |
scope = formalParameterScope; |
assert(fieldInitializers.isEmpty); |
@@ -363,11 +375,13 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
void beginConstructorInitializer(Token token) { |
debugEvent("beginConstructorInitializer"); |
inInitializer = true; |
} |
+ @override |
void endConstructorInitializer(Token token) { |
debugEvent("endConstructorInitializer"); |
assert(!inInitializer); |
@@ -394,14 +408,17 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
void handleNoInitializers() { |
debugEvent("NoInitializers"); |
} |
+ @override |
void endInitializers(int count, Token beginToken, Token endToken) { |
debugEvent("Initializers"); |
} |
+ @override |
void finishFunction(FormalParameters formals, |
AsyncMarker asyncModifier, Statement body) { |
debugEvent("finishFunction"); |
@@ -432,11 +449,13 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
void endExpressionStatement(Token token) { |
debugEvent("ExpressionStatement"); |
push(new ExpressionStatement(popForEffect())); |
} |
+ @override |
void endArguments(int count, Token beginToken, Token endToken) { |
debugEvent("Arguments"); |
List arguments = popList(count) ?? <Expression>[]; |
@@ -463,11 +482,13 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
void handleParenthesizedExpression(BeginGroupToken token) { |
debugEvent("ParenthesizedExpression"); |
push(popForValue()); |
} |
+ @override |
void endSend(Token token) { |
debugEvent("Send"); |
Arguments arguments = pop(); |
@@ -492,6 +513,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
finishSend(Object receiver, Arguments arguments, int charOffset) { |
if (receiver is BuilderAccessor) { |
return receiver.doInvocation(charOffset, arguments); |
@@ -504,6 +526,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
void beginCascade(Token token) { |
debugEvent("beginCascade"); |
Expression expression = popForValue(); |
@@ -520,6 +543,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
void endCascade() { |
debugEvent("endCascade"); |
Expression expression = popForEffect(); |
@@ -528,6 +552,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
push(cascadeReceiver); |
} |
+ @override |
void handleBinaryExpression(Token token) { |
debugEvent("BinaryExpression"); |
if (optional(".", token) || optional("..", token)) { |
@@ -597,6 +622,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
push(send.withReceiver(receiver)); |
} |
+ @override |
Expression toSuperMethodInvocation(MethodInvocation node) { |
Member target = lookupSuperMember(node.name); |
bool isNoSuchMethod = target == null; |
@@ -636,6 +662,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
isSetter: isSetter); |
} |
+ @override |
Member lookupSuperMember(Name name, {bool isSetter: false}) { |
Class superclass = classBuilder.cls.superclass; |
return superclass == null |
@@ -643,6 +670,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
: hierarchy.getDispatchTarget(superclass, name, setter: isSetter); |
} |
+ @override |
Constructor lookupConstructor(Name name, {bool isSuper}) { |
Class cls = classBuilder.cls; |
if (isSuper) { |
@@ -659,6 +687,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
return null; |
} |
+ @override |
void beginExpression(Token token) { |
debugEvent("beginExpression"); |
isFirstIdentifier = true; |
@@ -670,6 +699,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
return builder.isField ? (builder.isFinal ? null : builder) : null; |
} |
+ @override |
void handleIdentifier(Token token) { |
debugEvent("handleIdentifier"); |
String name = token.value; |
@@ -685,6 +715,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
builderToFirstExpression(Builder builder, String name, int charOffset, |
{bool isPrefix: false}) { |
if (builder == null || (!isInstanceContext && builder.isInstanceMember)) { |
@@ -730,6 +761,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
void handleQualified(Token period) { |
debugEvent("Qualified"); |
Identifier name = pop(); |
@@ -737,16 +769,19 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
push([receiver, name]); |
} |
+ @override |
void beginLiteralString(Token token) { |
debugEvent("beginLiteralString"); |
push(token); |
} |
+ @override |
void handleStringPart(Token token) { |
debugEvent("StringPart"); |
push(token); |
} |
+ @override |
void endLiteralString(int interpolationCount) { |
debugEvent("endLiteralString"); |
if (interpolationCount == 0) { |
@@ -774,6 +809,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
void handleStringJuxtaposition(int literalCount) { |
debugEvent("StringJuxtaposition"); |
List<Expression> parts = popListForValue(literalCount); |
@@ -795,11 +831,13 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
push(new StringConcatenation(expressions ?? parts)); |
} |
+ @override |
void handleLiteralInt(Token token) { |
debugEvent("LiteralInt"); |
push(new IntLiteral(int.parse(token.value))); |
} |
+ @override |
void endReturnStatement( |
bool hasExpression, Token beginToken, Token endToken) { |
debugEvent("ReturnStatement"); |
@@ -812,6 +850,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
void endIfStatement(Token ifToken, Token elseToken) { |
Statement elsePart = popStatementIfNotNull(elseToken); |
Statement thenPart = popStatement(); |
@@ -819,6 +858,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
push(new IfStatement(condition, thenPart, elsePart)); |
} |
+ @override |
void endInitializer(Token assignmentOperator) { |
debugEvent("Initializer"); |
assert(assignmentOperator.stringValue == "="); |
@@ -827,6 +867,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
push(new VariableDeclaration(identifier.name, initializer: initializer)); |
} |
+ @override |
void endInitializedIdentifier() { |
// TODO(ahe): Use [InitializedIdentifier] here? |
debugEvent("InitializedIdentifier"); |
@@ -843,6 +884,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
scope[variable.name] = new KernelVariableBuilder(variable); |
} |
+ @override |
void endVariablesDeclaration(int count, Token endToken) { |
debugEvent("VariablesDeclaration"); |
List<VariableDeclaration> variables = popList(count); |
@@ -866,6 +908,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
void endBlock(int count, Token beginToken, Token endToken) { |
debugEvent("Block"); |
Block block = popBlock(count); |
@@ -873,6 +916,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
push(block); |
} |
+ @override |
void handleAssignmentExpression(Token token) { |
debugEvent("AssignmentExpression"); |
Expression value = popForValue(); |
@@ -888,6 +932,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
void enterLoop() { |
if (peek() is LabelTarget) { |
LabelTarget target = peek(); |
@@ -908,6 +953,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
void endForStatement( |
int updateExpressionCount, Token beginToken, Token endToken) { |
debugEvent("ForStatement"); |
@@ -955,16 +1001,19 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
exitLoopOrSwitch(result); |
} |
+ @override |
void endAwaitExpression(Token beginToken, Token endToken) { |
debugEvent("AwaitExpression"); |
push(new AwaitExpression(popForValue())); |
} |
+ @override |
void handleAsyncModifier(Token asyncToken, Token starToken) { |
debugEvent("AsyncModifier"); |
push(asyncMarkerFromTokens(asyncToken, starToken)); |
} |
+ @override |
void handleLiteralList( |
int count, Token beginToken, Token constKeyword, Token endToken) { |
debugEvent("LiteralList"); |
@@ -983,6 +1032,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
isConst: constKeyword != null)); |
} |
+ @override |
void handleLiteralBool(Token token) { |
debugEvent("LiteralBool"); |
bool value = optional("true", token); |
@@ -990,16 +1040,19 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
push(new BoolLiteral(value)); |
} |
+ @override |
void handleLiteralDouble(Token token) { |
debugEvent("LiteralDouble"); |
push(new DoubleLiteral(double.parse(token.value))); |
} |
+ @override |
void handleLiteralNull(Token token) { |
debugEvent("LiteralNull"); |
push(new NullLiteral()); |
} |
+ @override |
void handleLiteralMap( |
int count, Token beginToken, Token constKeyword, Token endToken) { |
debugEvent("LiteralMap"); |
@@ -1022,6 +1075,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
isConst: constKeyword != null)); |
} |
+ @override |
void endLiteralMapEntry(Token colon, Token endToken) { |
debugEvent("LiteralMapEntry"); |
Expression value = popForValue(); |
@@ -1029,6 +1083,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
push(new MapEntry(key, value)); |
} |
+ @override |
void beginLiteralSymbol(Token token) { |
isFirstIdentifier = false; |
} |
@@ -1043,6 +1098,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
void endLiteralSymbol(Token hashToken, int identifierCount) { |
debugEvent("LiteralSymbol"); |
String value; |
@@ -1074,6 +1130,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
return const DynamicType(); |
} |
+ @override |
void endType(Token beginToken, Token endToken) { |
// TODO(ahe): The scope is wrong for return types of generic functions. |
debugEvent("Type"); |
@@ -1134,11 +1191,13 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
void handleVoidKeyword(Token token) { |
debugEvent("VoidKeyword"); |
push(const VoidType()); |
} |
+ @override |
void handleAsOperator(Token operator, Token endToken) { |
debugEvent("AsOperator"); |
DartType type = pop(); |
@@ -1146,6 +1205,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
push(new AsExpression(expression, type)); |
} |
+ @override |
void handleIsOperator(Token operator, Token not, Token endToken) { |
debugEvent("IsOperator"); |
DartType type = pop(); |
@@ -1157,6 +1217,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
push(expression); |
} |
+ @override |
void handleConditionalExpression(Token question, Token colon) { |
debugEvent("ConditionalExpression"); |
Expression elseExpression = popForValue(); |
@@ -1166,12 +1227,14 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
condition, thenExpression, elseExpression, const DynamicType())); |
} |
+ @override |
void endThrowExpression(Token throwToken, Token endToken) { |
debugEvent("ThrowExpression"); |
Expression expression = popForValue(); |
push(new Throw(expression)); |
} |
+ @override |
void endFormalParameter(Token thisKeyword) { |
debugEvent("FormalParameter"); |
if (thisKeyword != null) { |
@@ -1214,6 +1277,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
push(variable); |
} |
+ @override |
void endOptionalFormalParameters( |
int count, Token beginToken, Token endToken) { |
debugEvent("OptionalFormalParameters"); |
@@ -1222,11 +1286,13 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
push(new OptionalFormals(kind, popList(count))); |
} |
+ @override |
void beginFunctionTypedFormalParameter(Token token) { |
debugEvent("beginFunctionTypedFormalParameter"); |
functionNestingLevel++; |
} |
+ @override |
void handleFunctionTypedFormalParameter(Token token) { |
debugEvent("FunctionTypedFormalParameter"); |
if (inCatchClause || functionNestingLevel != 0) { |
@@ -1241,6 +1307,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
functionNestingLevel--; |
} |
+ @override |
void handleValuedFormalParameter(Token equals, Token token) { |
debugEvent("ValuedFormalParameter"); |
Expression initializer = popForValue(); |
@@ -1248,6 +1315,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
push(new InitializedIdentifier(name.name, initializer)); |
} |
+ @override |
void endFormalParameters(int count, Token beginToken, Token endToken) { |
debugEvent("FormalParameters"); |
OptionalFormals optional; |
@@ -1263,16 +1331,19 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
void beginCatchClause(Token token) { |
debugEvent("beginCatchClause"); |
inCatchClause = true; |
} |
+ @override |
void endCatchClause(Token token) { |
debugEvent("CatchClause"); |
inCatchClause = false; |
} |
+ @override |
void handleCatchBlock(Token onKeyword, Token catchKeyword) { |
debugEvent("CatchBlock"); |
Block body = pop(); |
@@ -1300,6 +1371,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
push(new Catch(exception, body, guard: type, stackTrace: stackTrace)); |
} |
+ @override |
void endTryStatement( |
int catchCount, Token tryKeyword, Token finallyKeyword) { |
Statement finallyBlock = popStatementIfNotNull(finallyKeyword); |
@@ -1319,11 +1391,13 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
void handleNoExpression(Token token) { |
debugEvent("NoExpression"); |
push(NullValue.Expression); |
} |
+ @override |
void handleIndexedExpression( |
Token openCurlyBracket, Token closeCurlyBracket) { |
debugEvent("IndexedExpression"); |
@@ -1333,6 +1407,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
null, null)); |
} |
+ @override |
void handleUnaryPrefixExpression(Token token) { |
debugEvent("UnaryPrefixExpression"); |
Expression expression = popForValue(); |
@@ -1354,6 +1429,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
return internalError("Unknown increment operator: ${token.value}"); |
} |
+ @override |
void handleUnaryPrefixAssignmentExpression(Token token) { |
debugEvent("UnaryPrefixAssignmentExpression"); |
var accessor = pop(); |
@@ -1364,6 +1440,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
void handleUnaryPostfixAssignmentExpression(Token token) { |
debugEvent("UnaryPostfixAssignmentExpression"); |
var accessor = pop(); |
@@ -1375,6 +1452,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
void endConstructorReference( |
Token start, Token periodBeforeName, Token endToken) { |
debugEvent("ConstructorReference"); |
@@ -1430,6 +1508,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
push(name); |
} |
+ @override |
Expression buildStaticInvocation(Member target, Arguments arguments, |
{bool isConst: false}) { |
List<TypeParameter> typeParameters = target.function.typeParameters; |
@@ -1511,6 +1590,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
return true; |
} |
+ @override |
void handleNewExpression(Token token) { |
debugEvent("NewExpression"); |
Arguments arguments = pop(); |
@@ -1559,16 +1639,19 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
push(throwNoSuchMethodError(errorName, arguments, token.charOffset)); |
} |
+ @override |
void handleConstExpression(Token token) { |
debugEvent("ConstExpression"); |
handleNewExpression(token); |
} |
+ @override |
void endTypeArguments(int count, Token beginToken, Token endToken) { |
debugEvent("TypeArguments"); |
push(popList(count)); |
} |
+ @override |
void handleThisExpression(Token token) { |
debugEvent("ThisExpression"); |
if (isFirstIdentifier && isInstanceContext) { |
@@ -1579,6 +1662,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
void handleSuperExpression(Token token) { |
debugEvent("SuperExpression"); |
if (isFirstIdentifier && isInstanceContext) { |
@@ -1592,6 +1676,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
void handleNamedArgument(Token colon) { |
debugEvent("NamedArgument"); |
Expression value = popForValue(); |
@@ -1599,6 +1684,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
push(new NamedExpression(identifier.name, value)); |
} |
+ @override |
void endFunctionName(Token token) { |
debugEvent("FunctionName"); |
Identifier name = pop(); |
@@ -1610,16 +1696,19 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
enterLocalScope(); |
} |
+ @override |
void beginFunction(Token token) { |
debugEvent("beginFunction"); |
functionNestingLevel++; |
} |
+ @override |
void beginUnnamedFunction(Token token) { |
debugEvent("beginUnnamedFunction"); |
functionNestingLevel++; |
} |
+ @override |
void endFunction(Token getOrSet, Token endToken) { |
debugEvent("Function"); |
Statement body = popStatement(); |
@@ -1634,6 +1723,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
functionNestingLevel--; |
} |
+ @override |
void endFunctionDeclaration(Token token) { |
debugEvent("FunctionDeclaration"); |
FunctionNode function = pop(); |
@@ -1646,6 +1736,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
push(declaration); |
} |
+ @override |
void endUnnamedFunction(Token token) { |
debugEvent("UnnamedFunction"); |
Statement body = popStatement(); |
@@ -1659,6 +1750,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
functionNestingLevel--; |
} |
+ @override |
void endDoWhileStatement( |
Token doKeyword, Token whileKeyword, Token endToken) { |
debugEvent("DoWhileStatement"); |
@@ -1678,10 +1770,12 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
exitLoopOrSwitch(result); |
} |
+ @override |
void beginForInExpression(Token token) { |
enterLocalScope(scope.parent); |
} |
+ @override |
void endForInExpression(Token token) { |
debugEvent("ForInExpression"); |
Expression expression = popForValue(); |
@@ -1689,6 +1783,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
push(expression ?? NullValue.Expression); |
} |
+ @override |
void endForIn( |
Token awaitToken, Token forToken, Token inKeyword, Token endToken) { |
debugEvent("ForIn"); |
@@ -1735,12 +1830,14 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
exitLoopOrSwitch(result); |
} |
+ @override |
void handleLabel(Token token) { |
debugEvent("Label"); |
Identifier identifier = pop(); |
push(new Label(identifier.name)); |
} |
+ @override |
void beginLabeledStatement(Token token, int labelCount) { |
debugEvent("beginLabeledStatement"); |
List<Label> labels = popList(labelCount); |
@@ -1752,6 +1849,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
push(target); |
} |
+ @override |
void endLabeledStatement(int labelCount) { |
debugEvent("LabeledStatement"); |
Statement statement = popStatement(); |
@@ -1772,16 +1870,19 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
push(statement); |
} |
+ @override |
void endRethrowStatement(Token throwToken, Token endToken) { |
debugEvent("RethrowStatement"); |
push(new ExpressionStatement(new Rethrow())); |
} |
+ @override |
void handleFinallyBlock(Token finallyKeyword) { |
debugEvent("FinallyBlock"); |
// Do nothing, handled by [endTryStatement]. |
} |
+ @override |
void endWhileStatement(Token whileKeyword, Token endToken) { |
debugEvent("WhileStatement"); |
Statement body = popStatement(); |
@@ -1800,11 +1901,13 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
exitLoopOrSwitch(result); |
} |
+ @override |
void handleEmptyStatement(Token token) { |
debugEvent("EmptyStatement"); |
push(new EmptyStatement()); |
} |
+ @override |
void handleAssertStatement( |
Token assertKeyword, Token commaToken, Token semicolonToken) { |
debugEvent("AssertStatement"); |
@@ -1813,11 +1916,13 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
push(new AssertStatement(condition, message)); |
} |
+ @override |
void endYieldStatement(Token yieldToken, Token starToken, Token endToken) { |
debugEvent("YieldStatement"); |
push(new YieldStatement(popForValue(), isYieldStar: starToken != null)); |
} |
+ @override |
void beginSwitchBlock(Token token) { |
debugEvent("beginSwitchBlock"); |
enterLocalScope(); |
@@ -1825,6 +1930,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
enterBreakTarget(); |
} |
+ @override |
void beginSwitchCase(int labelCount, int expressionCount, Token firstToken) { |
debugEvent("beginSwitchCase"); |
List labelsAndExpressions = popList(labelCount + expressionCount); |
@@ -1853,6 +1959,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
enterLocalScope(); |
} |
+ @override |
void handleSwitchCase( |
int labelCount, |
int expressionCount, |
@@ -1869,11 +1976,13 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
push(labels); |
} |
+ @override |
void endSwitchStatement(Token switchKeyword, Token endToken) { |
debugEvent("SwitchStatement"); |
// Do nothing. Handled by [endSwitchBlock]. |
} |
+ @override |
void endSwitchBlock(int caseCount, Token beginToken, Token endToken) { |
debugEvent("SwitchBlock"); |
List<SwitchCase> cases = |
@@ -1901,11 +2010,13 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
exitLoopOrSwitch(result); |
} |
+ @override |
void handleCaseMatch(Token caseKeyword, Token colon) { |
debugEvent("CaseMatch"); |
// Do nothing. Handled by [handleSwitchCase]. |
} |
+ @override |
void handleBreakStatement( |
bool hasTarget, Token breakKeyword, Token endToken) { |
debugEvent("BreakStatement"); |
@@ -1932,6 +2043,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
void handleContinueStatement( |
bool hasTarget, Token continueKeyword, Token endToken) { |
debugEvent("ContinueStatement"); |
@@ -1978,28 +2090,33 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
void endTypeVariable(Token token, Token extendsOrSuper) { |
logEvent("TypeVariable"); |
// TODO(ahe): Implement this when enabling generic method syntax. |
} |
+ @override |
void endTypeVariables(int count, Token beginToken, Token endToken) { |
logEvent("TypeVariables"); |
// TODO(ahe): Implement this when enabling generic method syntax. |
} |
+ @override |
void handleModifier(Token token) { |
debugEvent("Modifier"); |
// TODO(ahe): Copied from outline_builder.dart. |
push(new Modifier.fromString(token.stringValue)); |
} |
+ @override |
void handleModifiers(int count) { |
debugEvent("Modifiers"); |
// TODO(ahe): Copied from outline_builder.dart. |
push(popList(count) ?? NullValue.Modifiers); |
} |
+ @override |
void reportErrorHelper(Token token, ErrorKind kind, Map arguments) { |
super.reportErrorHelper(token, kind, arguments); |
if (!hasParserError) { |
@@ -2008,6 +2125,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
hasParserError = true; |
} |
+ @override |
Token expectedExpression(Token token) { |
if (token is ErrorToken) { |
reportErrorToken(token); |
@@ -2022,6 +2140,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
Token expected(String string, Token token) { |
if (token is ErrorToken) { |
reportErrorToken(token); |
@@ -2053,6 +2172,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
print(message); |
} |
+ @override |
Expression buildCompileTimeError(error, [int charOffset = -1]) { |
String message = new InputError(uri, charOffset, error).format(); |
print(message); |
@@ -2063,6 +2183,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
return new ExpressionStatement(buildCompileTimeError(error, charOffset)); |
} |
+ @override |
Initializer buildCompileTimeErrorIntializer(error, [int charOffset = -1]) { |
return new LocalInitializer( |
new VariableDeclaration.forValue( |
@@ -2070,6 +2191,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
+ @override |
Expression buildProblemExpression(Builder builder, String name) { |
if (builder is AmbiguousBuilder) { |
return buildCompileTimeError("Duplicated named: '$name'."); |
@@ -2080,6 +2202,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ @override |
void handleOperator(Token token) { |
debugEvent("Operator"); |
push(new Operator(token.stringValue)..fileOffset = token.charOffset); |
@@ -2089,6 +2212,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
return errors.inputError(uri, charOffset, message); |
} |
+ @override |
void debugEvent(String name) { |
// printEvent(name); |
} |