Refer to Expression and Statement via prefix
I'm landing Peter's change:
https://dart-review.googlesource.com/c/sdk/+/54388
Change-Id: Ia3c842d56fb2ea628351cba09180bc351d4b5b4b
Reviewed-on: https://dart-review.googlesource.com/54540
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 7460117..0763774 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -81,20 +81,17 @@
import 'kernel_api.dart';
-import 'kernel_ast_api.dart';
+import 'kernel_ast_api.dart' hide Expression, Statement;
+
+import 'kernel_ast_api.dart' as kernel show Expression, Statement;
import 'kernel_builder.dart';
// TODO(ahe): Remove this and ensure all nodes have a location.
const noLocation = null;
-class BodyBuilder<
- OpaqueExpression, // TODO(ahe): Rename to Expression when we've removed
- // all references to kernel's Expression.
- OpaqueStatement, // TODO(ahe): Rename to Statement when we've removed
- // all references to kernel's Statement.
- Arguments> extends ScopeListener<JumpTarget>
- implements BuilderHelper<Arguments> {
+class BodyBuilder<Expression, Statement, Arguments>
+ extends ScopeListener<JumpTarget> implements BuilderHelper<Arguments> {
@override
final KernelLibraryBuilder library;
@@ -167,9 +164,9 @@
int functionNestingLevel = 0;
- Statement compileTimeErrorInTry;
+ kernel.Statement compileTimeErrorInTry;
- Statement compileTimeErrorInLoopOrSwitch;
+ kernel.Statement compileTimeErrorInLoopOrSwitch;
Scope switchScope;
@@ -215,8 +212,8 @@
super(scope);
Forest<
- Expression, // TODO(ahe): Should be OpaqueExpression.
- OpaqueStatement,
+ kernel.Expression, // TODO(ahe): Should be just `Expression`.
+ Statement,
Token,
Arguments> get forest => forestInternal;
@@ -236,19 +233,19 @@
super.push(node);
}
- Expression popForValue() => toValue(pop());
+ kernel.Expression popForValue() => toValue(pop());
- Expression popForEffect() => toEffect(pop());
+ kernel.Expression popForEffect() => toEffect(pop());
- Expression popForValueIfNotNull(Object value) {
+ kernel.Expression popForValueIfNotNull(Object value) {
return value == null ? null : popForValue();
}
@override
- Expression toValue(Object node) {
+ kernel.Expression toValue(Object node) {
if (node is FastaAccessor) {
return node.buildSimpleRead();
- } else if (node is Expression) {
+ } else if (node is kernel.Expression) {
return node;
} else if (node is PrefixBuilder) {
return deprecated_buildCompileTimeError(
@@ -263,23 +260,23 @@
}
}
- Expression toEffect(Object node) {
+ kernel.Expression toEffect(Object node) {
if (node is FastaAccessor) return node.buildForEffect();
return toValue(node);
}
- List<Expression> popListForValue(int n) {
- List<Expression> list =
- new List<Expression>.filled(n, null, growable: true);
+ List<kernel.Expression> popListForValue(int n) {
+ List<kernel.Expression> list =
+ new List<kernel.Expression>.filled(n, null, growable: true);
for (int i = n - 1; i >= 0; i--) {
list[i] = popForValue();
}
return list;
}
- List<Expression> popListForEffect(int n) {
- List<Expression> list =
- new List<Expression>.filled(n, null, growable: true);
+ List<kernel.Expression> popListForEffect(int n) {
+ List<kernel.Expression> list =
+ new List<kernel.Expression>.filled(n, null, growable: true);
for (int i = n - 1; i >= 0; i--) {
list[i] = popForEffect();
}
@@ -287,13 +284,13 @@
}
Block popBlock(int count, Token beginToken) {
- List<dynamic /*Statement | List<Statement>*/ > statements =
- popList(count) ?? <Statement>[];
- List<Statement> copy;
+ List<dynamic /*kernel.Statement | List<kernel.Statement>*/ > statements =
+ popList(count) ?? <kernel.Statement>[];
+ List<kernel.Statement> copy;
for (int i = 0; i < statements.length; i++) {
var statement = statements[i];
if (statement is List) {
- copy ??= new List<Statement>.from(statements.getRange(0, i));
+ copy ??= new List<kernel.Statement>.from(statements.getRange(0, i));
// TODO(sigmund): remove this assignment (issue #28651)
Iterable subStatements = statement;
copy.addAll(subStatements);
@@ -305,16 +302,16 @@
..fileOffset = offsetForToken(beginToken);
}
- Statement popStatementIfNotNull(Object value) {
+ kernel.Statement popStatementIfNotNull(Object value) {
return value == null ? null : popStatement();
}
- Statement popStatement() {
+ kernel.Statement popStatement() {
var statement = pop();
if (statement is List) {
- return new Block(new List<Statement>.from(statement));
+ return new Block(new List<kernel.Statement>.from(statement));
} else if (statement is VariableDeclaration) {
- return new Block(<Statement>[statement]);
+ return new Block(<kernel.Statement>[statement]);
} else {
return statement;
}
@@ -336,7 +333,7 @@
.forEach((String name, Builder builder) {
if (outerSwitchScope == null) {
JumpTarget target = builder;
- for (Statement statement in target.users) {
+ for (kernel.Statement statement in target.users) {
statement.parent.replaceChild(
statement,
wrapInCompileTimeErrorStatement(statement,
@@ -478,7 +475,7 @@
int count = pop();
List<FieldBuilder> fields = <FieldBuilder>[];
for (int i = 0; i < count; i++) {
- Expression initializer = pop();
+ kernel.Expression initializer = pop();
Identifier identifier = pop();
String name = identifier.name;
FieldBuilder field;
@@ -513,7 +510,7 @@
// We have to clone the annotations on the remaining fields.
field = fields[i].target;
cloner ??= new CloneVisitor();
- for (Expression annotation in annotations) {
+ for (kernel.Expression annotation in annotations) {
field.addAnnotation(cloner.clone(annotation));
}
}
@@ -614,11 +611,11 @@
initializer = buildSuperInitializer(
false,
node.target,
- node.arguments
- as dynamic, // TODO(ahe): Remove this cast when buildSuperInitializer is moved to [Forest].
+ node.arguments as dynamic, // TODO(ahe): Remove this cast when
+ // buildSuperInitializer is moved to [Forest].
token.charOffset);
} else {
- Expression value = toValue(node);
+ kernel.Expression value = toValue(node);
if (node is! Throw) {
value =
wrapInCompileTimeError(value, fasta.messageExpectedAnInitializer);
@@ -645,7 +642,7 @@
@override
void finishFunction(List annotations, FormalParameters formals,
- AsyncMarker asyncModifier, Statement body) {
+ AsyncMarker asyncModifier, kernel.Statement body) {
debugEvent("finishFunction");
typePromoter.finished();
@@ -657,10 +654,11 @@
bool hasMore = formalBuilders.moveNext();
assert(hasMore);
VariableDeclaration realParameter = formalBuilders.current.target;
- Expression initializer = parameter.initializer ?? forest.literalNull(
- // TODO(ahe): Should store: realParameter.fileOffset
- // https://github.com/dart-lang/sdk/issues/32289
- null);
+ kernel.Expression initializer =
+ parameter.initializer ?? forest.literalNull(
+ // TODO(ahe): Should store: realParameter.fileOffset
+ // https://github.com/dart-lang/sdk/issues/32289
+ null);
realParameter.initializer = initializer..parent = realParameter;
_typeInferrer.inferParameterInitializer(
this, initializer, realParameter.type);
@@ -683,7 +681,7 @@
if (builder.formals != null) {
// Illegal parameters were removed by the function builder.
// Add them as local variable to put them in scope of the body.
- List<Statement> statements = <Statement>[];
+ List<kernel.Statement> statements = <kernel.Statement>[];
for (KernelFormalParameterBuilder parameter in builder.formals) {
statements.add(parameter.target);
}
@@ -704,7 +702,7 @@
}
Member target = builder.target;
_typeInferrer.inferMetadata(this, annotations);
- for (Expression annotation in annotations ?? const []) {
+ for (kernel.Expression annotation in annotations ?? const []) {
target.addAnnotation(annotation);
}
if (builder is KernelConstructorBuilder) {
@@ -718,14 +716,14 @@
}
@override
- List<Expression> finishMetadata() {
- List<Expression> expressions = pop();
+ List<kernel.Expression> finishMetadata() {
+ List<kernel.Expression> expressions = pop();
_typeInferrer.inferMetadata(this, expressions);
return expressions;
}
@override
- Expression parseSingleExpression(
+ kernel.Expression parseSingleExpression(
Parser parser, Token token, FunctionNode parameters) {
List<KernelTypeVariableBuilder> typeParameterBuilders;
for (TypeParameter typeParameter in parameters.typeParameters) {
@@ -742,7 +740,7 @@
token = parser.parseExpression(parser.syntheticPreviousToken(token));
- Expression expression = popForValue();
+ kernel.Expression expression = popForValue();
Token eof = token.next;
if (!eof.isEof) {
@@ -821,7 +819,7 @@
@override
void endArguments(int count, Token beginToken, Token endToken) {
debugEvent("Arguments");
- List arguments = popList(count) ?? <Expression>[];
+ List arguments = popList(count) ?? <kernel.Expression>[];
int firstNamedArgumentIndex = arguments.length;
for (int i = 0; i < arguments.length; i++) {
var node = arguments[i];
@@ -840,7 +838,7 @@
}
}
if (firstNamedArgumentIndex < arguments.length) {
- List<Expression> positional = new List<Expression>.from(
+ List<kernel.Expression> positional = new List<kernel.Expression>.from(
arguments.getRange(0, firstNamedArgumentIndex));
List<NamedExpression> named = new List<NamedExpression>.from(
arguments.getRange(firstNamedArgumentIndex, arguments.length));
@@ -925,7 +923,7 @@
@override
void beginCascade(Token token) {
debugEvent("beginCascade");
- Expression expression = popForValue();
+ kernel.Expression expression = popForValue();
if (expression is ShadowCascadeExpression) {
push(expression);
push(new VariableAccessor(this, token, expression.variable));
@@ -941,7 +939,7 @@
@override
void endCascade() {
debugEvent("endCascade");
- Expression expression = popForEffect();
+ kernel.Expression expression = popForEffect();
ShadowCascadeExpression cascadeReceiver = pop();
cascadeReceiver.finalize(expression);
push(cascadeReceiver);
@@ -957,7 +955,7 @@
@override
void endCaseExpression(Token colon) {
debugEvent("endCaseExpression");
- Expression expression = popForValue();
+ kernel.Expression expression = popForValue();
constantContext = pop();
super.push(expression);
}
@@ -965,7 +963,7 @@
@override
void beginBinaryExpression(Token token) {
if (optional("&&", token) || optional("||", token)) {
- Expression lhs = popForValue();
+ kernel.Expression lhs = popForValue();
typePromoter.enterLogicalExpression(lhs, token.stringValue);
push(lhs);
}
@@ -982,7 +980,7 @@
}
if (optional("??", token)) return doIfNull(token);
if (optional("?.", token)) return doIfNotNull(token);
- Expression argument = popForValue();
+ kernel.Expression argument = popForValue();
var receiver = pop();
bool isSuper = false;
if (receiver is ThisAccessor && receiver.isSuper) {
@@ -993,8 +991,8 @@
push(buildBinaryOperator(toValue(receiver), token, argument, isSuper));
}
- Expression buildBinaryOperator(
- Expression a, Token token, Expression b, bool isSuper) {
+ kernel.Expression buildBinaryOperator(
+ kernel.Expression a, Token token, kernel.Expression b, bool isSuper) {
bool negate = false;
String operator = token.stringValue;
if (identical("!=", operator)) {
@@ -1005,8 +1003,11 @@
return deprecated_buildCompileTimeError(
"Not an operator: '$operator'.", token.charOffset);
} else {
- Expression result = buildMethodInvocation(a, new Name(operator),
- forest.arguments(<Expression>[b], noLocation), token.charOffset,
+ kernel.Expression result = buildMethodInvocation(
+ a,
+ new Name(operator),
+ forest.arguments(<kernel.Expression>[b], noLocation),
+ token.charOffset,
// This *could* be a constant expression, we can't know without
// evaluating [a] and [b].
isConstantExpression: !isSuper,
@@ -1016,8 +1017,8 @@
}
void doLogicalExpression(Token token) {
- Expression argument = popForValue();
- Expression receiver = pop();
+ kernel.Expression argument = popForValue();
+ kernel.Expression receiver = pop();
var logicalExpression =
new ShadowLogicalExpression(receiver, token.stringValue, argument)
..fileOffset = offsetForToken(token);
@@ -1027,8 +1028,8 @@
/// Handle `a ?? b`.
void doIfNull(Token token) {
- Expression b = popForValue();
- Expression a = popForValue();
+ kernel.Expression b = popForValue();
+ kernel.Expression a = popForValue();
VariableDeclaration variable = new VariableDeclaration.forValue(a);
push(new ShadowIfNullExpression(
variable,
@@ -1074,8 +1075,8 @@
}
@override
- Expression throwNoSuchMethodError(
- Expression receiver, String name, Arguments arguments, int charOffset,
+ kernel.Expression throwNoSuchMethodError(kernel.Expression receiver,
+ String name, Arguments arguments, int charOffset,
{Member candidate,
bool isSuper: false,
bool isGetter: false,
@@ -1131,7 +1132,7 @@
return buildCompileTimeError(message, charOffset, noLength,
context: context);
} else {
- Expression error = library.loader.instantiateNoSuchMethodError(
+ kernel.Expression error = library.loader.instantiateNoSuchMethodError(
receiver, name, forest.castArguments(arguments), charOffset,
isMethod: !isGetter && !isSetter,
isGetter: isGetter,
@@ -1489,7 +1490,7 @@
Token first = parts.first;
Token last = parts.last;
Quote quote = analyzeQuote(first.lexeme);
- List<Expression> expressions = <Expression>[];
+ List<kernel.Expression> expressions = <kernel.Expression>[];
// Contains more than just \' or \".
if (first.lexeme.length > 1) {
String value = unescapeFirstStringPart(first.lexeme, quote);
@@ -1535,11 +1536,11 @@
@override
void handleStringJuxtaposition(int literalCount) {
debugEvent("StringJuxtaposition");
- List<Expression> parts = popListForValue(literalCount);
- List<Expression> expressions;
+ List<kernel.Expression> parts = popListForValue(literalCount);
+ List<kernel.Expression> expressions;
// Flatten string juxtapositions of string interpolation.
for (int i = 0; i < parts.length; i++) {
- Expression part = parts[i];
+ kernel.Expression part = parts[i];
if (part is StringConcatenation) {
if (expressions == null) {
expressions = parts.sublist(0, i);
@@ -1581,7 +1582,7 @@
void endReturnStatement(
bool hasExpression, Token beginToken, Token endToken) {
debugEvent("ReturnStatement");
- Expression expression = hasExpression ? popForValue() : null;
+ kernel.Expression expression = hasExpression ? popForValue() : null;
if (expression != null && inConstructor) {
push(deprecated_buildCompileTimeErrorStatement(
"Can't return from a constructor.", beginToken.charOffset));
@@ -1593,7 +1594,7 @@
@override
void beginThenStatement(Token token) {
- Expression condition = popForValue();
+ kernel.Expression condition = popForValue();
typePromoter.enterThen(condition);
push(condition);
super.beginThenStatement(token);
@@ -1607,9 +1608,9 @@
@override
void endIfStatement(Token ifToken, Token elseToken) {
- Statement elsePart = popStatementIfNotNull(elseToken);
- Statement thenPart = popStatement();
- Expression condition = pop();
+ kernel.Statement elsePart = popStatementIfNotNull(elseToken);
+ kernel.Statement thenPart = popStatement();
+ kernel.Expression condition = pop();
typePromoter.exitConditional();
push(new ShadowIfStatement(condition, thenPart, elsePart)
..fileOffset = ifToken.charOffset);
@@ -1627,7 +1628,7 @@
debugEvent("NoVariableInitializer");
bool isConst = (currentLocalVariableModifiers & constMask) != 0;
bool isFinal = (currentLocalVariableModifiers & finalMask) != 0;
- Expression initializer;
+ kernel.Expression initializer;
if (!optional("in", token)) {
// A for-in loop-variable can't have an initializer. So let's remain
// silent if the next token is `in`. Since a for-in loop can only have
@@ -1643,7 +1644,8 @@
pushNewLocalVariable(initializer);
}
- void pushNewLocalVariable(Expression initializer, {Token equalsToken}) {
+ void pushNewLocalVariable(kernel.Expression initializer,
+ {Token equalsToken}) {
Identifier identifier = pop();
assert(currentLocalVariableModifiers != -1);
bool isConst = (currentLocalVariableModifiers & constMask) != 0;
@@ -1708,10 +1710,10 @@
constantContext = pop();
currentLocalVariableType = pop();
currentLocalVariableModifiers = pop();
- List<Expression> annotations = pop();
+ List<kernel.Expression> annotations = pop();
if (annotations != null) {
for (VariableDeclaration variable in variables) {
- for (Expression annotation in annotations) {
+ for (kernel.Expression annotation in annotations) {
variable.addAnnotation(annotation);
}
}
@@ -1740,7 +1742,7 @@
@override
void handleAssignmentExpression(Token token) {
debugEvent("AssignmentExpression");
- Expression value = popForValue();
+ kernel.Expression value = popForValue();
var accessor = pop();
if (accessor is! FastaAccessor) {
push(buildCompileTimeError(fasta.messageNotAnLvalue,
@@ -1763,7 +1765,7 @@
}
}
- void exitLoopOrSwitch(Statement statement) {
+ void exitLoopOrSwitch(kernel.Statement statement) {
if (compileTimeErrorInLoopOrSwitch != null) {
push(compileTimeErrorInLoopOrSwitch);
compileTimeErrorInLoopOrSwitch = null;
@@ -1786,7 +1788,7 @@
return variables;
} else if (variableOrExpression == null) {
return <VariableDeclaration>[];
- } else if (variableOrExpression is Expression) {
+ } else if (variableOrExpression is kernel.Expression) {
VariableDeclaration variable = new ShadowVariableDeclaration.forEffect(
variableOrExpression, functionNestingLevel);
return <VariableDeclaration>[variable];
@@ -1802,10 +1804,10 @@
void endForStatement(Token forKeyword, Token leftParen, Token leftSeparator,
int updateExpressionCount, Token endToken) {
debugEvent("ForStatement");
- Statement body = popStatement();
- List<Expression> updates = popListForEffect(updateExpressionCount);
- Statement conditionStatement = popStatement();
- Expression condition = null;
+ kernel.Statement body = popStatement();
+ List<kernel.Expression> updates = popListForEffect(updateExpressionCount);
+ kernel.Statement conditionStatement = popStatement();
+ kernel.Expression condition = null;
if (conditionStatement is ExpressionStatement) {
condition = conditionStatement.expression;
} else {
@@ -1825,7 +1827,7 @@
body = new ShadowLabeledStatement(body);
continueTarget.resolveContinues(body);
}
- Statement result =
+ kernel.Statement result =
new ShadowForStatement(variables, condition, updates, body)
..fileOffset = forKeyword.charOffset;
if (breakTarget.hasUsers) {
@@ -1851,7 +1853,7 @@
void handleLiteralList(
int count, Token leftBracket, Token constKeyword, Token rightBracket) {
debugEvent("LiteralList");
- List<Expression> expressions = popListForValue(count);
+ List<kernel.Expression> expressions = popListForValue(count);
Object typeArguments = pop();
DartType typeArgument;
if (typeArguments != null) {
@@ -1937,8 +1939,8 @@
@override
void endLiteralMapEntry(Token colon, Token endToken) {
debugEvent("LiteralMapEntry");
- Expression value = popForValue();
- Expression key = popForValue();
+ kernel.Expression value = popForValue();
+ kernel.Expression key = popForValue();
push(forest.mapEntry(key, colon, value));
}
@@ -2056,7 +2058,7 @@
void handleAsOperator(Token operator, Token endToken) {
debugEvent("AsOperator");
DartType type = pop();
- Expression expression = popForValue();
+ kernel.Expression expression = popForValue();
if (constantContext != ConstantContext.none) {
push(deprecated_buildCompileTimeError(
"Not a constant expression.", operator.charOffset));
@@ -2069,9 +2071,10 @@
void handleIsOperator(Token operator, Token not, Token endToken) {
debugEvent("IsOperator");
DartType type = pop();
- Expression operand = popForValue();
+ kernel.Expression operand = popForValue();
bool isInverted = not != null;
- Expression isExpression = forest.isExpression(operand, operator, not, type);
+ kernel.Expression isExpression =
+ forest.isExpression(operand, operator, not, type);
if (operand is VariableGet) {
typePromoter.handleIsCheck(isExpression, isInverted, operand.variable,
type, functionNestingLevel);
@@ -2086,7 +2089,7 @@
@override
void beginConditionalExpression(Token question) {
- Expression condition = popForValue();
+ kernel.Expression condition = popForValue();
typePromoter.enterThen(condition);
push(condition);
super.beginConditionalExpression(question);
@@ -2094,7 +2097,7 @@
@override
void handleConditionalExpressionColon() {
- Expression then = popForValue();
+ kernel.Expression then = popForValue();
typePromoter.enterElse();
push(then);
super.handleConditionalExpressionColon();
@@ -2103,9 +2106,9 @@
@override
void endConditionalExpression(Token question, Token colon) {
debugEvent("ConditionalExpression");
- Expression elseExpression = popForValue();
- Expression thenExpression = pop();
- Expression condition = pop();
+ kernel.Expression elseExpression = popForValue();
+ kernel.Expression thenExpression = pop();
+ kernel.Expression condition = pop();
typePromoter.exitConditional();
push(forest.conditionalExpression(
condition, question, thenExpression, colon, elseExpression));
@@ -2114,7 +2117,7 @@
@override
void handleThrowExpression(Token throwToken, Token endToken) {
debugEvent("ThrowExpression");
- Expression expression = popForValue();
+ kernel.Expression expression = popForValue();
if (constantContext != ConstantContext.none) {
push(deprecated_buildCompileTimeError(
"Not a constant expression.", throwToken.charOffset));
@@ -2150,7 +2153,7 @@
}
bool isConst = (modifiers & constMask) != 0;
bool isFinal = (modifiers & finalMask) != 0;
- List annotations = pop();
+ List<kernel.Expression> annotations = pop();
VariableDeclaration variable;
if (!inCatchClause &&
functionNestingLevel == 0 &&
@@ -2182,7 +2185,7 @@
if (functionNestingLevel == 0) {
_typeInferrer.inferMetadata(this, annotations);
}
- for (Expression annotation in annotations) {
+ for (kernel.Expression annotation in annotations) {
variable.addAnnotation(annotation);
}
}
@@ -2237,7 +2240,7 @@
@override
void handleValuedFormalParameter(Token equals, Token token) {
debugEvent("ValuedFormalParameter");
- Expression initializer = popForValue();
+ kernel.Expression initializer = popForValue();
Identifier name = pop();
push(new InitializedIdentifier(name.token, initializer));
}
@@ -2314,7 +2317,7 @@
}
if (catchParameters.required.length > 2 ||
catchParameters.optional != null) {
- body = new Block(<Statement>[
+ body = new Block(<kernel.Statement>[
compileTimeErrorInTry ??= deprecated_buildCompileTimeErrorStatement(
"Invalid catch arguments.", catchKeyword.next.charOffset)
]);
@@ -2326,9 +2329,9 @@
@override
void endTryStatement(int catchCount, Token tryKeyword, Token finallyKeyword) {
- Statement finallyBlock = popStatementIfNotNull(finallyKeyword);
+ kernel.Statement finallyBlock = popStatementIfNotNull(finallyKeyword);
List<Catch> catches = popList(catchCount);
- Statement tryBlock = popStatement();
+ kernel.Statement tryBlock = popStatement();
if (compileTimeErrorInTry == null) {
if (catches != null) {
tryBlock = new ShadowTryCatch(tryBlock, catches);
@@ -2353,7 +2356,7 @@
void handleIndexedExpression(
Token openSquareBracket, Token closeSquareBracket) {
debugEvent("IndexedExpression");
- Expression index = popForValue();
+ kernel.Expression index = popForValue();
var receiver = pop();
if (receiver is ThisAccessor && receiver.isSuper) {
push(new SuperIndexAccessor(
@@ -2389,7 +2392,7 @@
}
}
bool isSuper = false;
- Expression receiverValue;
+ kernel.Expression receiverValue;
if (receiver is ThisAccessor && receiver.isSuper) {
isSuper = true;
receiverValue = forest.thisExpression(receiver.token);
@@ -2517,7 +2520,7 @@
}
@override
- Expression buildStaticInvocation(Member target, Arguments arguments,
+ kernel.Expression buildStaticInvocation(Member target, Arguments arguments,
{Constness constness: Constness.implicit,
int charOffset: -1,
Member initialTarget,
@@ -2733,7 +2736,7 @@
ConstantContext savedConstantContext = pop();
if (type is TypeDeclarationBuilder) {
- Expression expression = buildConstructorInvocation(
+ kernel.Expression expression = buildConstructorInvocation(
type, nameToken, arguments, name, typeArguments, offset, constness);
push(deferredPrefix != null
? wrapInDeferredCheck(expression, deferredPrefix, checkOffset)
@@ -2755,7 +2758,7 @@
}
@override
- Expression buildConstructorInvocation(
+ kernel.Expression buildConstructorInvocation(
TypeDeclarationBuilder type,
Token nameToken,
Arguments arguments,
@@ -2887,7 +2890,7 @@
@override
void handleNamedArgument(Token colon) {
debugEvent("NamedArgument");
- Expression value = popForValue();
+ kernel.Expression value = popForValue();
Identifier identifier = pop();
push(new NamedExpression(identifier.name, value)
..fileOffset = offsetForToken(identifier.token));
@@ -2956,7 +2959,7 @@
}
void pushNamedFunction(Token token, bool isFunctionExpression) {
- Statement body = popStatement();
+ kernel.Statement body = popStatement();
AsyncMarker asyncModifier = pop();
exitLocalScope();
FormalParameters formals = pop();
@@ -2966,7 +2969,7 @@
returnType ??= const DynamicType();
exitFunction();
List<TypeParameter> typeParameters = typeVariableBuildersToKernel(pop());
- List<Expression> annotations;
+ List<kernel.Expression> annotations;
if (!isFunctionExpression) {
annotations = pop(); // Metadata.
}
@@ -2980,7 +2983,7 @@
if (declaration is FunctionDeclaration) {
VariableDeclaration variable = declaration.variable;
if (annotations != null) {
- for (Expression annotation in annotations) {
+ for (kernel.Expression annotation in annotations) {
variable.addAnnotation(annotation);
}
}
@@ -2989,12 +2992,13 @@
variable.type = function.functionType;
if (isFunctionExpression) {
- Expression oldInitializer = variable.initializer;
+ kernel.Expression oldInitializer = variable.initializer;
variable.initializer = new ShadowFunctionExpression(function)
..parent = variable
..fileOffset = formals.charOffset;
exitLocalScope();
- Expression expression = new ShadowNamedFunctionExpression(variable);
+ kernel.Expression expression =
+ new ShadowNamedFunctionExpression(variable);
if (oldInitializer != null) {
// This must have been a compile-time error.
assert(isErroneousNode(oldInitializer));
@@ -3014,7 +3018,7 @@
// This must have been a compile-time error.
assert(isErroneousNode(variable.initializer));
- push(new Block(<Statement>[
+ push(new Block(<kernel.Statement>[
new ExpressionStatement(variable.initializer),
declaration
])
@@ -3045,7 +3049,7 @@
@override
void endFunctionExpression(Token beginToken, Token token) {
debugEvent("FunctionExpression");
- Statement body = popStatement();
+ kernel.Statement body = popStatement();
AsyncMarker asyncModifier = pop();
exitLocalScope();
FormalParameters formals = pop();
@@ -3068,15 +3072,15 @@
void endDoWhileStatement(
Token doKeyword, Token whileKeyword, Token endToken) {
debugEvent("DoWhileStatement");
- Expression condition = popForValue();
- Statement body = popStatement();
+ kernel.Expression condition = popForValue();
+ kernel.Statement body = popStatement();
JumpTarget continueTarget = exitContinueTarget();
JumpTarget breakTarget = exitBreakTarget();
if (continueTarget.hasUsers) {
body = new ShadowLabeledStatement(body);
continueTarget.resolveContinues(body);
}
- Statement result = new ShadowDoStatement(body, condition)
+ kernel.Statement result = new ShadowDoStatement(body, condition)
..fileOffset = doKeyword.charOffset;
if (breakTarget.hasUsers) {
result = new ShadowLabeledStatement(result);
@@ -3093,7 +3097,7 @@
@override
void endForInExpression(Token token) {
debugEvent("ForInExpression");
- Expression expression = popForValue();
+ kernel.Expression expression = popForValue();
exitLocalScope();
push(expression ?? NullValue.Expression);
}
@@ -3102,8 +3106,8 @@
void endForIn(Token awaitToken, Token forToken, Token leftParenthesis,
Token inKeyword, Token endToken) {
debugEvent("ForIn");
- Statement body = popStatement();
- Expression expression = popForValue();
+ kernel.Statement body = popStatement();
+ kernel.Expression expression = popForValue();
var lvalue = pop();
exitLocalScope();
JumpTarget continueTarget = exitContinueTarget();
@@ -3148,7 +3152,7 @@
deprecated_buildCompileTimeError("Expected lvalue, but got ${lvalue}",
forToken.next.next.charOffset));
}
- Statement result = new ShadowForInStatement(
+ kernel.Statement result = new ShadowForInStatement(
variable, expression, body, declaresVariable, syntheticAssignment,
isAsync: awaitToken != null)
..fileOffset = awaitToken?.charOffset ?? forToken.charOffset
@@ -3183,7 +3187,7 @@
@override
void endLabeledStatement(int labelCount) {
debugEvent("LabeledStatement");
- Statement statement = popStatement();
+ kernel.Statement statement = popStatement();
LabelTarget target = pop();
exitLocalScope();
if (target.breakTarget.hasUsers) {
@@ -3223,15 +3227,15 @@
@override
void endWhileStatement(Token whileKeyword, Token endToken) {
debugEvent("WhileStatement");
- Statement body = popStatement();
- Expression condition = popForValue();
+ kernel.Statement body = popStatement();
+ kernel.Expression condition = popForValue();
JumpTarget continueTarget = exitContinueTarget();
JumpTarget breakTarget = exitBreakTarget();
if (continueTarget.hasUsers) {
body = new ShadowLabeledStatement(body);
continueTarget.resolveContinues(body);
}
- Statement result = new ShadowWhileStatement(condition, body)
+ kernel.Statement result = new ShadowWhileStatement(condition, body)
..fileOffset = whileKeyword.charOffset;
if (breakTarget.hasUsers) {
result = new ShadowLabeledStatement(result);
@@ -3259,8 +3263,8 @@
void endAssert(Token assertKeyword, Assert kind, Token leftParenthesis,
Token commaToken, Token semicolonToken) {
debugEvent("Assert");
- Expression message = popForValueIfNotNull(commaToken);
- Expression condition = popForValue();
+ kernel.Expression message = popForValueIfNotNull(commaToken);
+ kernel.Expression condition = popForValue();
// Compute start and end offsets for the condition expression.
// This code is a temporary workaround because expressions don't carry
@@ -3338,7 +3342,7 @@
debugEvent("beginSwitchCase");
List labelsAndExpressions = popList(labelCount + expressionCount);
List<Label> labels = <Label>[];
- List<Expression> expressions = <Expression>[];
+ List<kernel.Expression> expressions = <kernel.Expression>[];
if (labelsAndExpressions != null) {
for (var labelOrExpression in labelsAndExpressions) {
if (labelOrExpression is Label) {
@@ -3384,9 +3388,9 @@
Block block = popBlock(statementCount, firstToken);
exitLocalScope();
List<Label> labels = pop();
- List<Expression> expressions = pop();
+ List<kernel.Expression> expressions = pop();
List<int> expressionOffsets = <int>[];
- for (Expression expression in expressions) {
+ for (kernel.Expression expression in expressions) {
expressionOffsets.add(expression.fileOffset);
}
push(new SwitchCase(expressions, expressionOffsets, block,
@@ -3403,8 +3407,8 @@
JumpTarget target = exitBreakTarget();
exitSwitchScope();
exitLocalScope();
- Expression expression = popForValue();
- Statement result = new ShadowSwitchStatement(expression, cases)
+ kernel.Expression expression = popForValue();
+ kernel.Statement result = new ShadowSwitchStatement(expression, cases)
..fileOffset = switchKeyword.charOffset;
if (target.hasUsers) {
result = new ShadowLabeledStatement(result);
@@ -3575,7 +3579,7 @@
debugEvent("TypeVariable");
DartType bound = pop();
Identifier name = pop();
- List<Expression> annotations = pop();
+ List<kernel.Expression> annotations = pop();
KernelTypeVariableBuilder variable;
Object inScope = scopeLookup(scope, name.name, token);
if (inScope is TypeDeclarationAccessor) {
@@ -3589,7 +3593,7 @@
variable.parameter.bound = bound;
if (annotations != null) {
_typeInferrer.inferMetadata(this, annotations);
- for (Expression annotation in annotations) {
+ for (kernel.Expression annotation in annotations) {
variable.parameter.addAnnotation(annotation);
}
}
@@ -3642,19 +3646,20 @@
@override
void handleInvalidStatement(Token token, Message message) {
- Statement statement = pop();
+ kernel.Statement statement = pop();
push(wrapInCompileTimeErrorStatement(statement, message));
}
@override
- Expression deprecated_buildCompileTimeError(String error,
+ kernel.Expression deprecated_buildCompileTimeError(String error,
[int charOffset = -1]) {
return buildCompileTimeError(
fasta.templateUnspecified.withArguments(error), charOffset, noLength);
}
@override
- Expression buildCompileTimeError(Message message, int charOffset, int length,
+ kernel.Expression buildCompileTimeError(
+ Message message, int charOffset, int length,
{List<LocatedMessage> context}) {
library.addCompileTimeError(message, charOffset, length, uri,
wasHandled: true, context: context);
@@ -3663,15 +3668,16 @@
.buildCompileTimeError(message, charOffset, length, uri)));
}
- Expression wrapInCompileTimeError(Expression expression, Message message,
+ kernel.Expression wrapInCompileTimeError(
+ kernel.Expression expression, Message message,
{List<LocatedMessage> context}) {
return wrapInLocatedCompileTimeError(
expression, message.withLocation(uri, expression.fileOffset, noLength),
context: context);
}
- Expression wrapInLocatedCompileTimeError(
- Expression expression, LocatedMessage message,
+ kernel.Expression wrapInLocatedCompileTimeError(
+ kernel.Expression expression, LocatedMessage message,
{List<LocatedMessage> context}) {
// TODO(askesc): Produce explicit error expression wrapping the original.
// See [issue 29717](https://github.com/dart-lang/sdk/issues/29717)
@@ -3688,7 +3694,7 @@
..fileOffset = expression.fileOffset;
}
- Expression buildFallThroughError(int charOffset) {
+ kernel.Expression buildFallThroughError(int charOffset) {
addProblem(fasta.messageSwitchCaseFallThrough, charOffset, noLength);
// TODO(ahe): The following doesn't make sense for the Analyzer. It should
@@ -3699,7 +3705,7 @@
return new Throw(buildStaticInvocation(
library.loader.coreTypes.fallThroughErrorUrlAndLineConstructor,
- forest.arguments(<Expression>[
+ forest.arguments(<kernel.Expression>[
storeOffset(forest.literalString("${location?.file ?? uri}", null),
charOffset),
storeOffset(forest.literalInt(location?.line ?? 0, null), charOffset),
@@ -3707,7 +3713,7 @@
charOffset: charOffset));
}
- Expression buildAbstractClassInstantiationError(
+ kernel.Expression buildAbstractClassInstantiationError(
Message message, String className,
[int charOffset = -1]) {
addProblemErrorIfConst(message, charOffset, className.length);
@@ -3715,32 +3721,33 @@
Builder constructor = library.loader.getAbstractClassInstantiationError();
return new Throw(buildStaticInvocation(
constructor.target,
- forest.arguments(<Expression>[
+ forest.arguments(<kernel.Expression>[
storeOffset(forest.literalString(className, null), charOffset)
], noLocation)));
}
- Statement deprecated_buildCompileTimeErrorStatement(error,
+ kernel.Statement deprecated_buildCompileTimeErrorStatement(error,
[int charOffset = -1]) {
return new ShadowExpressionStatement(
deprecated_buildCompileTimeError(error, charOffset));
}
- Statement buildCompileTimeErrorStatement(Message message, int charOffset,
+ kernel.Statement buildCompileTimeErrorStatement(
+ Message message, int charOffset,
{List<LocatedMessage> context}) {
return new ShadowExpressionStatement(
buildCompileTimeError(message, charOffset, noLength, context: context));
}
- Statement wrapInCompileTimeErrorStatement(
- Statement statement, Message message) {
+ kernel.Statement wrapInCompileTimeErrorStatement(
+ kernel.Statement statement, Message message) {
// TODO(askesc): Produce explicit error statement wrapping the original.
// See [issue 29717](https://github.com/dart-lang/sdk/issues/29717)
return buildCompileTimeErrorStatement(message, statement.fileOffset);
}
@override
- Initializer buildInvalidInitializer(Expression expression,
+ Initializer buildInvalidInitializer(kernel.Expression expression,
[int charOffset = -1]) {
needsImplicitSuperInitializer = false;
return new ShadowInvalidInitializer(
@@ -3761,7 +3768,7 @@
@override
Initializer buildFieldInitializer(
- bool isSynthetic, String name, int offset, Expression expression) {
+ bool isSynthetic, String name, int offset, kernel.Expression expression) {
Builder builder =
classBuilder.scope.local[name] ?? classBuilder.origin.scope.local[name];
if (builder is KernelFieldBuilder && builder.isInstanceMember) {
@@ -3789,7 +3796,7 @@
return buildInvalidInitializer(
new Throw(buildStaticInvocation(
constructor.target,
- forest.arguments(<Expression>[
+ forest.arguments(<kernel.Expression>[
storeOffset(forest.literalString(name, null), offset)
], noLocation),
charOffset: offset)),
@@ -3835,7 +3842,7 @@
}
@override
- Expression buildProblemExpression(
+ kernel.Expression buildProblemExpression(
ProblemBuilder builder, int charOffset, int length) {
return buildCompileTimeError(builder.message, charOffset, length);
}
@@ -3870,7 +3877,7 @@
if (member.isNative) {
push(NullValue.FunctionBody);
} else {
- push(new Block(<Statement>[
+ push(new Block(<kernel.Statement>[
deprecated_buildCompileTimeErrorStatement(
"Expected '{'.", token.charOffset)
]));
@@ -3898,15 +3905,15 @@
return type;
}
- Expression evaluateArgumentsBefore(
- Arguments arguments, Expression expression) {
+ kernel.Expression evaluateArgumentsBefore(
+ Arguments arguments, kernel.Expression expression) {
if (arguments == null) return expression;
- List<Expression> expressions =
- new List<Expression>.from(forest.argumentsPositional(arguments));
+ List<kernel.Expression> expressions =
+ new List<kernel.Expression>.from(forest.argumentsPositional(arguments));
for (NamedExpression named in forest.argumentsNamed(arguments)) {
expressions.add(named.value);
}
- for (Expression argument in expressions.reversed) {
+ for (kernel.Expression argument in expressions.reversed) {
expression = new Let(
new VariableDeclaration.forValue(argument, isFinal: true),
expression);
@@ -3918,8 +3925,8 @@
bool isIdentical(Member member) => member == coreTypes.identicalProcedure;
@override
- Expression buildMethodInvocation(
- Expression receiver, Name name, Arguments arguments, int offset,
+ kernel.Expression buildMethodInvocation(
+ kernel.Expression receiver, Name name, Arguments arguments, int offset,
{bool isConstantExpression: false,
bool isNullAware: false,
bool isImplicitCall: false,
@@ -4015,8 +4022,8 @@
}
@override
- Expression wrapInDeferredCheck(
- Expression expression, KernelPrefixBuilder prefix, int charOffset) {
+ kernel.Expression wrapInDeferredCheck(kernel.Expression expression,
+ KernelPrefixBuilder prefix, int charOffset) {
var check = new VariableDeclaration.forValue(
forest.checkLibraryIsLoaded(prefix.dependency))
..fileOffset = charOffset;
@@ -4042,7 +4049,7 @@
Identifier(this.token);
- Expression get initializer => null;
+ kernel.Expression get initializer => null;
String toString() => "identifier($name)";
}
@@ -4058,7 +4065,7 @@
}
class InitializedIdentifier extends Identifier {
- final Expression initializer;
+ final kernel.Expression initializer;
InitializedIdentifier(Token token, this.initializer) : super(token);
@@ -4087,25 +4094,27 @@
return unsupported("plainNameForRead", token.charOffset, helper.uri);
}
- Expression doInvocation(int charOffset, Arguments arguments) {
+ kernel.Expression doInvocation(int charOffset, Arguments arguments) {
return unhandled("${runtimeType}", "doInvocation", charOffset, uri);
}
- Expression buildSimpleRead();
+ kernel.Expression buildSimpleRead();
- Expression buildForEffect();
+ kernel.Expression buildForEffect();
- Expression buildAssignment(Expression value, {bool voidContext: false}) {
- return makeInvalidWrite(value);
- }
-
- Expression buildNullAwareAssignment(
- Expression value, DartType type, int offset,
+ kernel.Expression buildAssignment(kernel.Expression value,
{bool voidContext: false}) {
return makeInvalidWrite(value);
}
- Expression buildCompoundAssignment(Name binaryOperator, Expression value,
+ kernel.Expression buildNullAwareAssignment(
+ kernel.Expression value, DartType type, int offset,
+ {bool voidContext: false}) {
+ return makeInvalidWrite(value);
+ }
+
+ kernel.Expression buildCompoundAssignment(
+ Name binaryOperator, kernel.Expression value,
{int offset: TreeNode.noOffset,
bool voidContext: false,
Procedure interfaceTarget,
@@ -4113,14 +4122,14 @@
return makeInvalidWrite(value);
}
- Expression buildPrefixIncrement(Name binaryOperator,
+ kernel.Expression buildPrefixIncrement(Name binaryOperator,
{int offset: TreeNode.noOffset,
bool voidContext: false,
Procedure interfaceTarget}) {
return makeInvalidWrite(null);
}
- Expression buildPostfixIncrement(Name binaryOperator,
+ kernel.Expression buildPostfixIncrement(Name binaryOperator,
{int offset: TreeNode.noOffset,
bool voidContext: false,
Procedure interfaceTarget}) {
@@ -4131,7 +4140,7 @@
return unsupported("makeInvalidRead", token.charOffset, helper.uri);
}
- Expression makeInvalidWrite(Expression value) {
+ kernel.Expression makeInvalidWrite(kernel.Expression value) {
return helper.deprecated_buildCompileTimeError(
"Can't be used as left-hand side of assignment.",
offsetForToken(token));
@@ -4139,7 +4148,7 @@
}
class DelayedAssignment<Arguments> extends ContextAccessor<Arguments> {
- final Expression value;
+ final kernel.Expression value;
final String assignmentOperator;
@@ -4147,15 +4156,15 @@
this.value, this.assignmentOperator)
: super(helper, token, accessor);
- Expression buildSimpleRead() {
+ kernel.Expression buildSimpleRead() {
return handleAssignment(false);
}
- Expression buildForEffect() {
+ kernel.Expression buildForEffect() {
return handleAssignment(true);
}
- Expression handleAssignment(bool voidContext) {
+ kernel.Expression handleAssignment(bool voidContext) {
if (helper.constantContext != ConstantContext.none) {
return helper.deprecated_buildCompileTimeError(
"Not a constant expression.", offsetForToken(token));
@@ -4225,14 +4234,14 @@
FastaAccessor accessor, this.binaryOperator, this.interfaceTarget)
: super(helper, token, accessor);
- Expression buildSimpleRead() {
+ kernel.Expression buildSimpleRead() {
return accessor.buildPostfixIncrement(binaryOperator,
offset: offsetForToken(token),
voidContext: false,
interfaceTarget: interfaceTarget);
}
- Expression buildForEffect() {
+ kernel.Expression buildForEffect() {
return accessor.buildPostfixIncrement(binaryOperator,
offset: offsetForToken(token),
voidContext: true,
@@ -4241,7 +4250,7 @@
}
class JumpTarget extends Builder {
- final List<Statement> users = <Statement>[];
+ final List<kernel.Statement> users = <kernel.Statement>[];
final JumpTargetKind kind;
@@ -4318,7 +4327,7 @@
bool get hasUsers => breakTarget.hasUsers || continueTarget.hasUsers;
- List<Statement> get users => unsupported("users", charOffset, fileUri);
+ List<kernel.Statement> get users => unsupported("users", charOffset, fileUri);
JumpTargetKind get kind => unsupported("kind", charOffset, fileUri);
@@ -4450,13 +4459,13 @@
/// }
///
/// If [body] is a [Block], it's returned with [statement] prepended to it.
-Block combineStatements(Statement statement, Statement body) {
+Block combineStatements(kernel.Statement statement, kernel.Statement body) {
if (body is Block) {
body.statements.insert(0, statement);
statement.parent = body;
return body;
} else {
- return new Block(<Statement>[statement, body]);
+ return new Block(<kernel.Statement>[statement, body]);
}
}