Convert ShadowLiteralList into LiteralListJudgment
Change-Id: Iead84138ca0a74ae15911e6d0978d52c08f40816
Reviewed-on: https://dart-review.googlesource.com/61540
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
diff --git a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
index a62fd43..1faadfa 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
@@ -90,7 +90,7 @@
ExpressionStatementJudgment,
ShadowForStatement,
IfJudgment,
- ShadowListLiteral,
+ ListLiteralJudgment,
ShadowLogicalExpression,
ShadowMapLiteral,
ShadowNot,
@@ -173,7 +173,7 @@
}
@override
- ShadowListLiteral literalList(
+ ListLiteralJudgment literalList(
Token constKeyword,
bool isConst,
Object typeArgument,
@@ -183,7 +183,7 @@
Token rightBracket) {
// TODO(brianwilkerson): The file offset computed below will not be correct
// if there are type arguments but no `const` keyword.
- return new ShadowListLiteral(expressions,
+ return new ListLiteralJudgment(expressions,
typeArgument: typeArgument, isConst: isConst)
..fileOffset = offsetForToken(constKeyword ?? leftBracket);
}
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 2b7c54a..c0a4bfcab 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
@@ -1648,13 +1648,15 @@
}
}
-/// Concrete shadow object representing a list literal in kernel form.
-class ShadowListLiteral extends ListLiteral implements ExpressionJudgment {
+/// Type inference derivation for [LiteralList].
+class ListLiteralJudgment extends ListLiteral implements ExpressionJudgment {
DartType inferredType;
+ List<Expression> get judgments => expressions;
+
final DartType _declaredTypeArgument;
- ShadowListLiteral(List<Expression> expressions,
+ ListLiteralJudgment(List<Expression> expressions,
{DartType typeArgument, bool isConst: false})
: _declaredTypeArgument = typeArgument,
super(expressions,
@@ -1688,13 +1690,14 @@
inferredTypeArgument = _declaredTypeArgument ?? const DynamicType();
}
if (inferenceNeeded || typeChecksNeeded) {
- for (var expression in expressions) {
- var expressionType = inferrer.inferExpression(factory, expression,
- inferredTypeArgument, inferenceNeeded || typeChecksNeeded);
+ for (int i = 0; i < judgments.length; ++i) {
+ ExpressionJudgment judgment = judgments[i];
+ inferrer.inferExpression(factory, judgment, inferredTypeArgument,
+ inferenceNeeded || typeChecksNeeded);
if (inferenceNeeded) {
formalTypes.add(listType.typeArguments[0]);
}
- actualTypes.add(expressionType);
+ actualTypes.add(judgment.inferredType);
}
}
if (inferenceNeeded) {
@@ -1711,15 +1714,15 @@
typeArgument = inferredTypeArgument;
}
if (typeChecksNeeded) {
- for (int i = 0; i < expressions.length; i++) {
- inferrer.ensureAssignable(typeArgument, actualTypes[i], expressions[i],
- expressions[i].fileOffset);
+ for (int i = 0; i < judgments.length; i++) {
+ inferrer.ensureAssignable(typeArgument, actualTypes[i], judgments[i],
+ judgments[i].fileOffset);
}
}
var inferredType = new InterfaceType(listClass, [inferredTypeArgument]);
inferrer.listener.listLiteral(
this, fileOffset, null, null, null, expressions, null, inferredType);
- return inferredType;
+ return this.inferredType = inferredType;
}
}