Convert some ShadowExpressions into inference judgments
As a first step toward a new API, convert ThisExpression, Throw,
TypeLiteral, VariableAssignment, VariableGet, LoadLibrary, and
CheckLibraryIsLoaded.
Change-Id: I787d354ad6d8282a94504185390fab07c683d74d
Reviewed-on: https://dart-review.googlesource.com/60921
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Kevin Millikin <kmillikin@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 bc647fb..7947d50 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -1464,8 +1464,9 @@
return new ReadOnlyAccessGenerator<Expression, Statement, Arguments>(
this,
token,
- toExpression(new ShadowVariableGet(declaration.target, fact, scope)
- ..fileOffset = charOffset),
+ toExpression(
+ new VariableGetJudgment(declaration.target, fact, scope)
+ ..fileOffset = charOffset),
name);
} else {
return new VariableUseGenerator<Expression, Statement, Arguments>(
@@ -3284,7 +3285,7 @@
typePromoter.getFactForAccess(variable, functionNestingLevel);
TypePromotionScope scope = typePromoter.currentScope;
syntheticAssignment = toKernelExpression(lvalue.buildAssignment(
- toExpression(new ShadowVariableGet(variable, fact, scope)
+ toExpression(new VariableGetJudgment(variable, fact, scope)
..fileOffset = inKeyword.offset),
voidContext: true));
kernelBody = combineStatements(
diff --git a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
index 8aadbcd..cb6ad46 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
@@ -74,7 +74,7 @@
ShadowBlock,
BoolJudgment,
ShadowBreakStatement,
- ShadowCheckLibraryIsLoaded,
+ CheckLibraryIsLoadedJudgment,
ShadowConditionalExpression,
ShadowDoStatement,
ShadowDoubleLiteral,
@@ -86,7 +86,7 @@
ShadowIsNotExpression,
ShadowLabeledStatement,
ShadowListLiteral,
- ShadowLoadLibrary,
+ LoadLibraryJudgment,
ShadowLogicalExpression,
ShadowMapLiteral,
ShadowNot,
@@ -97,11 +97,11 @@
ShadowStringLiteral,
ShadowSymbolLiteral,
ShadowSyntheticExpression,
- ShadowThisExpression,
- ShadowThrow,
+ ThisJudgment,
+ ThrowJudgment,
ShadowTryCatch,
ShadowTryFinally,
- ShadowTypeLiteral,
+ TypeLiteralJudgment,
ShadowWhileStatement,
ShadowYieldStatement;
@@ -223,8 +223,8 @@
}
@override
- ShadowTypeLiteral literalType(DartType type, Token token) {
- return new ShadowTypeLiteral(type)..fileOffset = offsetForToken(token);
+ TypeLiteralJudgment literalType(DartType type, Token token) {
+ return new TypeLiteralJudgment(type)..fileOffset = offsetForToken(token);
}
@override
@@ -248,12 +248,12 @@
@override
Expression loadLibrary(LibraryDependency dependency) {
- return new ShadowLoadLibrary(dependency);
+ return new LoadLibraryJudgment(dependency);
}
@override
Expression checkLibraryIsLoaded(LibraryDependency dependency) {
- return new ShadowCheckLibraryIsLoaded(dependency);
+ return new CheckLibraryIsLoadedJudgment(dependency);
}
@override
@@ -476,12 +476,12 @@
@override
Expression thisExpression(Token token) {
- return new ShadowThisExpression()..fileOffset = offsetForToken(token);
+ return new ThisJudgment()..fileOffset = offsetForToken(token);
}
@override
Expression throwExpression(Token throwKeyword, Expression expression) {
- return new ShadowThrow(expression)
+ return new ThrowJudgment(expression)
..fileOffset = offsetForToken(throwKeyword);
}
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
index 8c3a5b6..c6c588d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
@@ -102,7 +102,7 @@
ShadowSuperPropertyGet,
ShadowSwitchStatement,
ShadowSyntheticExpression,
- ShadowVariableAssignment,
+ VariableAssignmentJudgment,
ShadowVariableDeclaration,
- ShadowVariableGet,
+ VariableGetJudgment,
ShadowYieldStatement;
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
index de2683d..e84ef87 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
@@ -84,9 +84,9 @@
ShadowStaticAssignment,
ShadowSuperMethodInvocation,
ShadowSuperPropertyGet,
- ShadowVariableAssignment,
+ VariableAssignmentJudgment,
ShadowVariableDeclaration,
- ShadowVariableGet,
+ VariableGetJudgment,
StaticSet,
SuperMethodInvocation,
SuperPropertySet,
@@ -278,7 +278,7 @@
var fact = helper.typePromoter
.getFactForAccess(variable, helper.functionNestingLevel);
var scope = helper.typePromoter.currentScope;
- var read = new ShadowVariableGet(variable, fact, scope)
+ var read = new VariableGetJudgment(variable, fact, scope)
..fileOffset = offsetForToken(token);
complexAssignment?.read = read;
return read;
@@ -305,7 +305,7 @@
@override
ShadowComplexAssignment startComplexAssignment(Expression rhs) =>
- new ShadowVariableAssignment(rhs);
+ new VariableAssignmentJudgment(rhs);
@override
void printOn(StringSink sink) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
index 2f4b88e..1f54af7 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
@@ -2265,9 +2265,7 @@
}
}
-/// Shadow object for [ThisExpression].
-class ShadowThisExpression extends ThisExpression
- implements ExpressionJudgment {
+class ThisJudgment extends ThisExpression implements ExpressionJudgment {
DartType inferredType;
@override
@@ -2279,19 +2277,20 @@
}
}
-/// Shadow object for [Throw].
-class ShadowThrow extends Throw implements ExpressionJudgment {
+class ThrowJudgment extends Throw implements ExpressionJudgment {
DartType inferredType;
- ShadowThrow(Expression expression) : super(expression);
+ ExpressionJudgment get judgment => expression;
+
+ ThrowJudgment(Expression expression) : super(expression);
@override
DartType infer<Expression, Statement, Initializer>(
ShadowTypeInferrer inferrer,
Factory<Expression, Statement, Initializer> factory,
DartType typeContext) {
- inferrer.inferExpression(factory, expression, const UnknownType(), false);
- return const BottomType();
+ inferrer.inferExpression(factory, judgment, const UnknownType(), false);
+ return inferredType = const BottomType();
}
}
@@ -2459,18 +2458,17 @@
}
}
-/// Shadow object for [TypeLiteral].
-class ShadowTypeLiteral extends TypeLiteral implements ExpressionJudgment {
+class TypeLiteralJudgment extends TypeLiteral implements ExpressionJudgment {
DartType inferredType;
- ShadowTypeLiteral(DartType type) : super(type);
+ TypeLiteralJudgment(DartType type) : super(type);
@override
DartType infer<Expression, Statement, Initializer>(
ShadowTypeInferrer inferrer,
Factory<Expression, Statement, Initializer> factory,
DartType typeContext) {
- return inferrer.coreTypes.typeClass.rawType;
+ return inferredType = inferrer.coreTypes.typeClass.rawType;
}
}
@@ -2543,9 +2541,8 @@
}
}
-/// Concrete shadow object representing an assignment to a local variable.
-class ShadowVariableAssignment extends ShadowComplexAssignment {
- ShadowVariableAssignment(Expression rhs) : super(rhs);
+class VariableAssignmentJudgment extends ShadowComplexAssignment {
+ VariableAssignmentJudgment(Expression rhs) : super(rhs);
@override
DartType _getWriteType(ShadowTypeInferrer inferrer) {
@@ -2573,7 +2570,7 @@
}
var inferredResult = _inferRhs(inferrer, factory, readType, writeContext);
_replaceWithDesugared();
- return inferredResult.type;
+ return inferredType = inferredResult.type;
}
}
@@ -2687,14 +2684,14 @@
}
/// Concrete shadow object representing a read from a variable in kernel form.
-class ShadowVariableGet extends VariableGet implements ExpressionJudgment {
+class VariableGetJudgment extends VariableGet implements ExpressionJudgment {
DartType inferredType;
final TypePromotionFact _fact;
final TypePromotionScope _scope;
- ShadowVariableGet(VariableDeclaration variable, this._fact, this._scope)
+ VariableGetJudgment(VariableDeclaration variable, this._fact, this._scope)
: super(variable);
@override
@@ -2717,7 +2714,7 @@
if (variable._isLocalFunction) {
type = inferrer.instantiateTearOff(type, typeContext, this);
}
- return type;
+ return inferredType = type;
}
}
@@ -2769,33 +2766,33 @@
}
/// Concrete shadow object representing a deferred load library call.
-class ShadowLoadLibrary extends LoadLibrary implements ExpressionJudgment {
+class LoadLibraryJudgment extends LoadLibrary implements ExpressionJudgment {
DartType inferredType;
- ShadowLoadLibrary(LibraryDependency import) : super(import);
+ LoadLibraryJudgment(LibraryDependency import) : super(import);
@override
DartType infer<Expression, Statement, Initializer>(
ShadowTypeInferrer inferrer,
Factory<Expression, Statement, Initializer> factory,
DartType typeContext) {
- return super.getStaticType(inferrer.typeSchemaEnvironment);
+ return inferredType = super.getStaticType(inferrer.typeSchemaEnvironment);
}
}
/// Concrete shadow object representing a deferred library-is-loaded check.
-class ShadowCheckLibraryIsLoaded extends CheckLibraryIsLoaded
+class CheckLibraryIsLoadedJudgment extends CheckLibraryIsLoaded
implements ExpressionJudgment {
DartType inferredType;
- ShadowCheckLibraryIsLoaded(LibraryDependency import) : super(import);
+ CheckLibraryIsLoadedJudgment(LibraryDependency import) : super(import);
@override
DartType infer<Expression, Statement, Initializer>(
ShadowTypeInferrer inferrer,
Factory<Expression, Statement, Initializer> factory,
DartType typeContext) {
- return super.getStaticType(inferrer.typeSchemaEnvironment);
+ return inferredType = super.getStaticType(inferrer.typeSchemaEnvironment);
}
}