mirror of
https://github.com/dart-lang/sdk
synced 2024-10-03 21:21:32 +00:00
Introduce toKernelStatement and toStatement to BodyBuilder
Change-Id: I4d3746c85370125c617cd1b331db095689ce4b5b Reviewed-on: https://dart-review.googlesource.com/54963 Reviewed-by: Dan Rubel <danrubel@google.com> Reviewed-by: Peter von der Ahé <ahe@google.com> Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
parent
0cd9497f96
commit
fb2f43b175
|
@ -329,21 +329,31 @@ abstract class BodyBuilder<Expression, Statement, Arguments>
|
|||
..fileOffset = offsetForToken(beginToken);
|
||||
}
|
||||
|
||||
kernel.Statement popStatementIfNotNull(Object value) {
|
||||
Statement popStatementIfNotNull(Object value) {
|
||||
return value == null ? null : popStatement();
|
||||
}
|
||||
|
||||
kernel.Statement popStatement() {
|
||||
Statement popStatement() {
|
||||
var statement = pop();
|
||||
if (statement is List) {
|
||||
return new Block(new List<kernel.Statement>.from(statement));
|
||||
return toStatement(new Block(new List<kernel.Statement>.from(statement)));
|
||||
} else if (statement is VariableDeclaration) {
|
||||
return new Block(<kernel.Statement>[statement]);
|
||||
return toStatement(new Block(<kernel.Statement>[statement]));
|
||||
} else {
|
||||
return statement;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO(ahe): Remove this method once Forest API is complete.
|
||||
kernel.Statement toKernelStatement(Statement statement) {
|
||||
return statement as dynamic;
|
||||
}
|
||||
|
||||
// TODO(ahe): Remove this method once Forest API is complete.
|
||||
Statement toStatement(kernel.Statement statement) {
|
||||
return statement as dynamic;
|
||||
}
|
||||
|
||||
void ignore(Unhandled value) {
|
||||
pop();
|
||||
}
|
||||
|
@ -1655,8 +1665,9 @@ abstract class BodyBuilder<Expression, Statement, Arguments>
|
|||
|
||||
@override
|
||||
void endIfStatement(Token ifToken, Token elseToken) {
|
||||
kernel.Statement elsePart = popStatementIfNotNull(elseToken);
|
||||
kernel.Statement thenPart = popStatement();
|
||||
kernel.Statement elsePart =
|
||||
toKernelStatement(popStatementIfNotNull(elseToken));
|
||||
kernel.Statement thenPart = toKernelStatement(popStatement());
|
||||
Expression condition = pop();
|
||||
typePromoter.exitConditional();
|
||||
push(
|
||||
|
@ -1851,9 +1862,9 @@ abstract class BodyBuilder<Expression, Statement, Arguments>
|
|||
void endForStatement(Token forKeyword, Token leftParen, Token leftSeparator,
|
||||
int updateExpressionCount, Token endToken) {
|
||||
debugEvent("ForStatement");
|
||||
kernel.Statement body = popStatement();
|
||||
kernel.Statement body = toKernelStatement(popStatement());
|
||||
List<Expression> updates = popListForEffect(updateExpressionCount);
|
||||
kernel.Statement conditionStatement = popStatement();
|
||||
kernel.Statement conditionStatement = toKernelStatement(popStatement());
|
||||
Expression condition = null;
|
||||
if (conditionStatement is ExpressionStatement) {
|
||||
condition = toExpression(conditionStatement.expression);
|
||||
|
@ -2379,9 +2390,10 @@ abstract class BodyBuilder<Expression, Statement, Arguments>
|
|||
|
||||
@override
|
||||
void endTryStatement(int catchCount, Token tryKeyword, Token finallyKeyword) {
|
||||
kernel.Statement finallyBlock = popStatementIfNotNull(finallyKeyword);
|
||||
kernel.Statement finallyBlock =
|
||||
toKernelStatement(popStatementIfNotNull(finallyKeyword));
|
||||
List<Catch> catches = popList(catchCount);
|
||||
kernel.Statement tryBlock = popStatement();
|
||||
kernel.Statement tryBlock = toKernelStatement(popStatement());
|
||||
if (compileTimeErrorInTry == null) {
|
||||
if (catches != null) {
|
||||
tryBlock = new ShadowTryCatch(tryBlock, catches);
|
||||
|
@ -3016,7 +3028,7 @@ abstract class BodyBuilder<Expression, Statement, Arguments>
|
|||
}
|
||||
|
||||
void pushNamedFunction(Token token, bool isFunctionExpression) {
|
||||
kernel.Statement body = popStatement();
|
||||
kernel.Statement body = toKernelStatement(popStatement());
|
||||
AsyncMarker asyncModifier = pop();
|
||||
exitLocalScope();
|
||||
FormalParameters<Arguments> formals = pop();
|
||||
|
@ -3107,7 +3119,7 @@ abstract class BodyBuilder<Expression, Statement, Arguments>
|
|||
@override
|
||||
void endFunctionExpression(Token beginToken, Token token) {
|
||||
debugEvent("FunctionExpression");
|
||||
kernel.Statement body = popStatement();
|
||||
kernel.Statement body = toKernelStatement(popStatement());
|
||||
AsyncMarker asyncModifier = pop();
|
||||
exitLocalScope();
|
||||
FormalParameters<Arguments> formals = pop();
|
||||
|
@ -3131,7 +3143,7 @@ abstract class BodyBuilder<Expression, Statement, Arguments>
|
|||
Token doKeyword, Token whileKeyword, Token endToken) {
|
||||
debugEvent("DoWhileStatement");
|
||||
Expression condition = popForValue();
|
||||
kernel.Statement body = popStatement();
|
||||
kernel.Statement body = toKernelStatement(popStatement());
|
||||
JumpTarget continueTarget = exitContinueTarget();
|
||||
JumpTarget breakTarget = exitBreakTarget();
|
||||
if (continueTarget.hasUsers) {
|
||||
|
@ -3165,7 +3177,7 @@ abstract class BodyBuilder<Expression, Statement, Arguments>
|
|||
void endForIn(Token awaitToken, Token forToken, Token leftParenthesis,
|
||||
Token inKeyword, Token endToken) {
|
||||
debugEvent("ForIn");
|
||||
kernel.Statement body = popStatement();
|
||||
kernel.Statement body = toKernelStatement(popStatement());
|
||||
Expression expression = popForValue();
|
||||
var lvalue = pop();
|
||||
exitLocalScope();
|
||||
|
@ -3250,7 +3262,7 @@ abstract class BodyBuilder<Expression, Statement, Arguments>
|
|||
@override
|
||||
void endLabeledStatement(int labelCount) {
|
||||
debugEvent("LabeledStatement");
|
||||
kernel.Statement statement = popStatement();
|
||||
kernel.Statement statement = toKernelStatement(popStatement());
|
||||
LabelTarget target = pop();
|
||||
exitLocalScope();
|
||||
if (target.breakTarget.hasUsers) {
|
||||
|
@ -3289,7 +3301,7 @@ abstract class BodyBuilder<Expression, Statement, Arguments>
|
|||
@override
|
||||
void endWhileStatement(Token whileKeyword, Token endToken) {
|
||||
debugEvent("WhileStatement");
|
||||
kernel.Statement body = popStatement();
|
||||
kernel.Statement body = toKernelStatement(popStatement());
|
||||
Expression condition = popForValue();
|
||||
JumpTarget continueTarget = exitContinueTarget();
|
||||
JumpTarget breakTarget = exitBreakTarget();
|
||||
|
|
Loading…
Reference in a new issue