mirror of
https://github.com/dart-lang/sdk
synced 2024-09-20 01:38:14 +00:00
Make ResolutionStorer implement the Factory API.
Change-Id: I9cf78ef8b595e845a6e47fb30cbce162f45dc91d Reviewed-on: https://dart-review.googlesource.com/61420 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Paul Berry <paulberry@google.com>
This commit is contained in:
parent
e2ce88dfcc
commit
ee19f2804a
|
@ -3,8 +3,10 @@
|
|||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
import 'package:analyzer/src/fasta/resolution_applier.dart';
|
||||
import 'package:front_end/src/fasta/kernel/factory.dart';
|
||||
import 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart';
|
||||
import 'package:front_end/src/fasta/type_inference/type_inference_listener.dart';
|
||||
import 'package:front_end/src/scanner/token.dart';
|
||||
import 'package:kernel/ast.dart';
|
||||
import 'package:kernel/type_algebra.dart';
|
||||
|
||||
|
@ -39,7 +41,10 @@ class ResolutionData<Type, Declaration, Reference, PrefixInfo> {
|
|||
|
||||
/// Type inference listener that records inferred types for later use by
|
||||
/// [ResolutionApplier].
|
||||
class ResolutionStorer extends _ResolutionStorer<int, int, Node, int> {
|
||||
class ResolutionStorer extends _ResolutionStorer<int, int, Node, int>
|
||||
implements
|
||||
TypeInferenceListener<int, int, Node, int>,
|
||||
Factory<void, void, void, void> {
|
||||
ResolutionStorer(Map<int, ResolutionData<DartType, int, Node, int>> data)
|
||||
: super(data);
|
||||
}
|
||||
|
@ -48,9 +53,7 @@ class ResolutionStorer extends _ResolutionStorer<int, int, Node, int> {
|
|||
/// accidentally peeking into kernel internals.
|
||||
///
|
||||
/// TODO(paulberry): when the time is right, fuse this with [ResolutionStorer].
|
||||
class _ResolutionStorer<Location, Declaration, Reference, PrefixInfo>
|
||||
implements
|
||||
TypeInferenceListener<Location, Declaration, Reference, PrefixInfo> {
|
||||
class _ResolutionStorer<Location, Declaration, Reference, PrefixInfo> {
|
||||
final Map<Location,
|
||||
ResolutionData<DartType, Declaration, Reference, PrefixInfo>> _data;
|
||||
|
||||
|
@ -92,35 +95,51 @@ class _ResolutionStorer<Location, Declaration, Reference, PrefixInfo>
|
|||
_data.remove(location) == null;
|
||||
}
|
||||
|
||||
@override
|
||||
void asExpression(
|
||||
ExpressionJudgment judgment, Location location, DartType inferredType) {
|
||||
ExpressionJudgment judgment,
|
||||
Location location,
|
||||
void expression,
|
||||
Token asOperator,
|
||||
void literalType,
|
||||
DartType inferredType) {
|
||||
_store(location, literalType: inferredType, inferredType: inferredType);
|
||||
}
|
||||
|
||||
@override
|
||||
void assertInitializer(InitializerJudgment judgment, Location location) {}
|
||||
void assertInitializer(
|
||||
InitializerJudgment judgment,
|
||||
Location location,
|
||||
Token assertKeyword,
|
||||
Token leftParenthesis,
|
||||
void condition,
|
||||
Token comma,
|
||||
void message,
|
||||
Token rightParenthesis) {}
|
||||
|
||||
@override
|
||||
void assertStatement(StatementJudgment judgment, Location location) {}
|
||||
void assertStatement(
|
||||
StatementJudgment judgment,
|
||||
Location location,
|
||||
Token assertKeyword,
|
||||
Token leftParenthesis,
|
||||
void condition,
|
||||
Token comma,
|
||||
void message,
|
||||
Token rightParenthesis,
|
||||
Token semicolon) {}
|
||||
|
||||
@override
|
||||
void awaitExpression(ExpressionJudgment judgment, Location location,
|
||||
DartType inferredType) =>
|
||||
Token awaitKeyword, void expression, DartType inferredType) =>
|
||||
genericExpression("awaitExpression", location, inferredType);
|
||||
|
||||
@override
|
||||
void block(StatementJudgment judgment, Location location) {}
|
||||
void block(StatementJudgment judgment, Location location, Token leftBracket,
|
||||
List<void> statements, Token rightBracket) {}
|
||||
|
||||
@override
|
||||
void boolLiteral(ExpressionJudgment judgment, Location location,
|
||||
DartType inferredType) =>
|
||||
Token literal, bool value, DartType inferredType) =>
|
||||
genericExpression("boolLiteral", location, inferredType);
|
||||
|
||||
@override
|
||||
void breakStatement(StatementJudgment judgment, Location location) {}
|
||||
void breakStatement(StatementJudgment judgment, Location location,
|
||||
Token breakKeyword, void label, Token semicolon) {}
|
||||
|
||||
@override
|
||||
void cascadeExpression(
|
||||
ExpressionJudgment judgment, Location location, DartType inferredType) {
|
||||
// Overridden so that the type of the expression will not be recorded. We
|
||||
|
@ -129,10 +148,18 @@ class _ResolutionStorer<Location, Declaration, Reference, PrefixInfo>
|
|||
// correctly apply the type even if we recorded it.
|
||||
}
|
||||
|
||||
@override
|
||||
void catchStatement(
|
||||
Catch judgment,
|
||||
Location location,
|
||||
Token onKeyword,
|
||||
void type,
|
||||
Token catchKeyword,
|
||||
Token leftParenthesis,
|
||||
Token exceptionParameter,
|
||||
Token comma,
|
||||
Token stackTraceParameter,
|
||||
Token rightParenthesis,
|
||||
void body,
|
||||
DartType guardType,
|
||||
Location exceptionLocation,
|
||||
DartType exceptionType,
|
||||
|
@ -149,12 +176,17 @@ class _ResolutionStorer<Location, Declaration, Reference, PrefixInfo>
|
|||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void conditionalExpression(ExpressionJudgment judgment, Location location,
|
||||
void conditionalExpression(
|
||||
ExpressionJudgment judgment,
|
||||
Location location,
|
||||
void condition,
|
||||
Token question,
|
||||
void thenExpression,
|
||||
Token colon,
|
||||
void elseExpression,
|
||||
DartType inferredType) =>
|
||||
genericExpression("conditionalExpression", location, inferredType);
|
||||
|
||||
@override
|
||||
void constructorInvocation(ExpressionJudgment judgment, Location location,
|
||||
Reference expressionTarget, DartType inferredType) {
|
||||
// A class reference may have already been stored at this location by
|
||||
|
@ -164,32 +196,46 @@ class _ResolutionStorer<Location, Declaration, Reference, PrefixInfo>
|
|||
_store(location, inferredType: inferredType, reference: expressionTarget);
|
||||
}
|
||||
|
||||
@override
|
||||
void continueSwitchStatement(StatementJudgment judgment, Location location) {}
|
||||
void continueStatement(StatementJudgment judgment, Location location,
|
||||
Token continueKeyword, void label, Token semicolon) {}
|
||||
|
||||
void continueSwitchStatement(StatementJudgment judgment, Location location,
|
||||
Token continueKeyword, void label, Token semicolon) {}
|
||||
|
||||
@override
|
||||
void deferredCheck(ExpressionJudgment judgment, Location location,
|
||||
DartType inferredType) =>
|
||||
genericExpression("deferredCheck", location, inferredType);
|
||||
|
||||
@override
|
||||
void doStatement(StatementJudgment judgment, Location location) {}
|
||||
void doStatement(
|
||||
StatementJudgment judgment,
|
||||
Location location,
|
||||
Token doKeyword,
|
||||
void body,
|
||||
Token whileKeyword,
|
||||
Token leftParenthesis,
|
||||
void condition,
|
||||
Token rightParenthesis,
|
||||
Token semicolon) {}
|
||||
|
||||
@override
|
||||
void doubleLiteral(ExpressionJudgment judgment, Location location,
|
||||
DartType inferredType) =>
|
||||
Token literal, double value, DartType inferredType) =>
|
||||
genericExpression("doubleLiteral", location, inferredType);
|
||||
|
||||
@override
|
||||
void expressionStatement(StatementJudgment judgment, Location location) {}
|
||||
void expressionStatement(StatementJudgment judgment, Location location,
|
||||
void expression, Token semicolon) {}
|
||||
|
||||
@override
|
||||
void fieldInitializer(InitializerJudgment judgment, Location location,
|
||||
void fieldInitializer(
|
||||
InitializerJudgment judgment,
|
||||
Location location,
|
||||
Token thisKeyword,
|
||||
Token period,
|
||||
Token fieldName,
|
||||
Token equals,
|
||||
void expression,
|
||||
Reference initializerField) {
|
||||
_store(location, reference: initializerField);
|
||||
}
|
||||
|
||||
@override
|
||||
void forInStatement(
|
||||
StatementJudgment judgment,
|
||||
Location location,
|
||||
|
@ -214,16 +260,13 @@ class _ResolutionStorer<Location, Declaration, Reference, PrefixInfo>
|
|||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void forStatement(StatementJudgment judgment, Location location) {}
|
||||
|
||||
@override
|
||||
void functionDeclaration(StatementJudgment judgment, Location location,
|
||||
FunctionType inferredType) {
|
||||
_store(location, inferredType: inferredType);
|
||||
}
|
||||
|
||||
@override
|
||||
void functionExpression(ExpressionJudgment judgment, Location location,
|
||||
DartType inferredType) =>
|
||||
genericExpression("functionExpression", location, inferredType);
|
||||
|
@ -233,76 +276,89 @@ class _ResolutionStorer<Location, Declaration, Reference, PrefixInfo>
|
|||
_store(location, inferredType: inferredType);
|
||||
}
|
||||
|
||||
@override
|
||||
void ifNull(ExpressionJudgment judgment, Location location,
|
||||
DartType inferredType) =>
|
||||
void ifNull(ExpressionJudgment judgment, Location location, void leftOperand,
|
||||
Token operator, void rightOperand, DartType inferredType) =>
|
||||
genericExpression('ifNull', location, inferredType);
|
||||
|
||||
@override
|
||||
void ifStatement(StatementJudgment judgment, Location location) {}
|
||||
void ifStatement(
|
||||
StatementJudgment judgment,
|
||||
Location location,
|
||||
Token ifKeyword,
|
||||
Token leftParenthesis,
|
||||
void condition,
|
||||
Token rightParenthesis,
|
||||
void thenStatement,
|
||||
Token elseKeyword,
|
||||
void elseStatement) {}
|
||||
|
||||
@override
|
||||
void intLiteral(ExpressionJudgment judgment, Location location,
|
||||
DartType inferredType) =>
|
||||
void intLiteral(ExpressionJudgment judgment, Location location, Token literal,
|
||||
num value, DartType inferredType) =>
|
||||
genericExpression("intLiteral", location, inferredType);
|
||||
|
||||
@override
|
||||
void invalidInitializer(InitializerJudgment judgment, Location location) {}
|
||||
|
||||
@override
|
||||
void labeledStatement(StatementJudgment judgment, Location location) {}
|
||||
|
||||
@override
|
||||
void listLiteral(ExpressionJudgment judgment, Location location,
|
||||
DartType inferredType) =>
|
||||
genericExpression("listLiteral", location, inferredType);
|
||||
|
||||
@override
|
||||
void logicalExpression(ExpressionJudgment judgment, Location location,
|
||||
void logicalExpression(
|
||||
ExpressionJudgment judgment,
|
||||
Location location,
|
||||
void leftOperand,
|
||||
Token operator,
|
||||
void rightOperand,
|
||||
DartType inferredType) =>
|
||||
genericExpression("logicalExpression", location, inferredType);
|
||||
|
||||
@override
|
||||
void mapLiteral(ExpressionJudgment judgment, Location location,
|
||||
DartType typeContext) =>
|
||||
genericExpression("mapLiteral", location, typeContext);
|
||||
|
||||
@override
|
||||
void namedFunctionExpression(ExpressionJudgment judgment, Location location,
|
||||
DartType inferredType) =>
|
||||
genericExpression("namedFunctionExpression", location, inferredType);
|
||||
|
||||
@override
|
||||
void not(ExpressionJudgment judgment, Location location,
|
||||
DartType inferredType) =>
|
||||
void not(ExpressionJudgment judgment, Location location, Token operator,
|
||||
void operand, DartType inferredType) =>
|
||||
genericExpression("not", location, inferredType);
|
||||
|
||||
@override
|
||||
void nullLiteral(ExpressionJudgment judgment, Location location,
|
||||
bool isSynthetic, DartType inferredType) {
|
||||
Token literal, bool isSynthetic, DartType inferredType) {
|
||||
if (isSynthetic) return null;
|
||||
genericExpression("nullLiteral", location, inferredType);
|
||||
}
|
||||
|
||||
@override
|
||||
void indexAssign(ExpressionJudgment judgment, Location location,
|
||||
Reference writeMember, Reference combiner, DartType inferredType) {
|
||||
_store(location,
|
||||
reference: writeMember, inferredType: inferredType, combiner: combiner);
|
||||
}
|
||||
|
||||
@override
|
||||
void isExpression(ExpressionJudgment judgment, Location location,
|
||||
DartType testedType, DartType inferredType) {
|
||||
void isExpression(
|
||||
ExpressionJudgment judgment,
|
||||
Location location,
|
||||
void expression,
|
||||
Token isOperator,
|
||||
void literalType,
|
||||
DartType testedType,
|
||||
DartType inferredType) {
|
||||
_store(location, literalType: testedType, inferredType: inferredType);
|
||||
}
|
||||
|
||||
void isNotExpression(ExpressionJudgment judgment, Location location,
|
||||
DartType type, DartType inferredType) {
|
||||
void isNotExpression(
|
||||
ExpressionJudgment judgment,
|
||||
Location location,
|
||||
void expression,
|
||||
Token isOperator,
|
||||
Token notOperator,
|
||||
void literalType,
|
||||
DartType type,
|
||||
DartType inferredType) {
|
||||
_store(location, literalType: type, inferredType: inferredType);
|
||||
}
|
||||
|
||||
@override
|
||||
void methodInvocation(
|
||||
ExpressionJudgment judgment,
|
||||
Location resultOffset,
|
||||
|
@ -324,7 +380,6 @@ class _ResolutionStorer<Location, Declaration, Reference, PrefixInfo>
|
|||
reference: interfaceMember);
|
||||
}
|
||||
|
||||
@override
|
||||
void methodInvocationCall(
|
||||
ExpressionJudgment judgment,
|
||||
Location resultOffset,
|
||||
|
@ -344,7 +399,6 @@ class _ResolutionStorer<Location, Declaration, Reference, PrefixInfo>
|
|||
isImplicitCall: isImplicitCall);
|
||||
}
|
||||
|
||||
@override
|
||||
void propertyAssign(
|
||||
ExpressionJudgment judgment,
|
||||
Location location,
|
||||
|
@ -360,38 +414,38 @@ class _ResolutionStorer<Location, Declaration, Reference, PrefixInfo>
|
|||
inferredType: inferredType);
|
||||
}
|
||||
|
||||
@override
|
||||
void propertySet(ExpressionJudgment judgment, Location location,
|
||||
DartType inferredType) =>
|
||||
genericExpression("propertySet", location, inferredType);
|
||||
|
||||
@override
|
||||
void propertyGet(ExpressionJudgment judgment, Location location,
|
||||
Reference member, DartType inferredType) {
|
||||
_store(location, reference: member, inferredType: inferredType);
|
||||
}
|
||||
|
||||
@override
|
||||
void propertyGetCall(
|
||||
ExpressionJudgment judgment, Location location, DartType inferredType) {
|
||||
_store(location, isExplicitCall: true);
|
||||
}
|
||||
|
||||
@override
|
||||
void redirectingInitializer(InitializerJudgment judgment, Location location,
|
||||
void redirectingInitializer(
|
||||
InitializerJudgment judgment,
|
||||
Location location,
|
||||
Token thisKeyword,
|
||||
Token period,
|
||||
Token constructorName,
|
||||
covariant Object argumentList,
|
||||
Reference initializerTarget) {
|
||||
_store(location, reference: initializerTarget);
|
||||
}
|
||||
|
||||
@override
|
||||
void rethrow_(ExpressionJudgment judgment, Location location,
|
||||
DartType inferredType) =>
|
||||
Token rethrowKeyword, DartType inferredType) =>
|
||||
genericExpression('rethrow', location, inferredType);
|
||||
|
||||
@override
|
||||
void returnStatement(StatementJudgment judgment, Location location) {}
|
||||
void returnStatement(StatementJudgment judgment, Location location,
|
||||
Token returnKeyword, void expression, Token semicolon) {}
|
||||
|
||||
@override
|
||||
void staticAssign(
|
||||
ExpressionJudgment judgment,
|
||||
Location location,
|
||||
|
@ -407,13 +461,11 @@ class _ResolutionStorer<Location, Declaration, Reference, PrefixInfo>
|
|||
inferredType: inferredType);
|
||||
}
|
||||
|
||||
@override
|
||||
void staticGet(ExpressionJudgment judgment, Location location,
|
||||
Reference expressionTarget, DartType inferredType) {
|
||||
_store(location, reference: expressionTarget, inferredType: inferredType);
|
||||
}
|
||||
|
||||
@override
|
||||
void staticInvocation(
|
||||
ExpressionJudgment judgment,
|
||||
Location location,
|
||||
|
@ -432,42 +484,44 @@ class _ResolutionStorer<Location, Declaration, Reference, PrefixInfo>
|
|||
inferredType: inferredType);
|
||||
}
|
||||
|
||||
@override
|
||||
void stringConcatenation(
|
||||
ExpressionJudgment judgment, Location location, DartType inferredType) {
|
||||
// We don't need the type - we already know that it is String.
|
||||
// Moreover, the file offset for StringConcatenation is `-1`.
|
||||
}
|
||||
|
||||
@override
|
||||
void stringLiteral(ExpressionJudgment judgment, Location location,
|
||||
DartType inferredType) =>
|
||||
Token literal, String value, DartType inferredType) =>
|
||||
genericExpression("StringLiteral", location, inferredType);
|
||||
|
||||
@override
|
||||
void superInitializer(InitializerJudgment judgment, Location location) {}
|
||||
void superInitializer(
|
||||
InitializerJudgment judgment,
|
||||
Location location,
|
||||
Token superKeyword,
|
||||
Token period,
|
||||
Token constructorName,
|
||||
covariant Object argumentList) {}
|
||||
|
||||
@override
|
||||
void switchStatement(StatementJudgment judgment, Location location) {}
|
||||
|
||||
@override
|
||||
void symbolLiteral(ExpressionJudgment judgment, Location location,
|
||||
void symbolLiteral(
|
||||
ExpressionJudgment judgment,
|
||||
Location location,
|
||||
Token poundSign,
|
||||
List<Token> components,
|
||||
String value,
|
||||
DartType inferredType) =>
|
||||
genericExpression("symbolLiteral", location, inferredType);
|
||||
|
||||
@override
|
||||
void thisExpression(
|
||||
ExpressionJudgment judgment, Location location, DartType inferredType) {}
|
||||
void thisExpression(ExpressionJudgment judgment, Location location,
|
||||
Token thisKeyword, DartType inferredType) {}
|
||||
|
||||
@override
|
||||
void throw_(ExpressionJudgment judgment, Location location,
|
||||
DartType inferredType) =>
|
||||
Token throwKeyword, void expression, DartType inferredType) =>
|
||||
genericExpression('throw', location, inferredType);
|
||||
|
||||
@override
|
||||
void tryCatch(StatementJudgment judgment, Location location) {}
|
||||
|
||||
@override
|
||||
void tryFinally(StatementJudgment judgment, Location location) {}
|
||||
|
||||
void typeLiteral(ExpressionJudgment judgment, Location location,
|
||||
|
@ -475,7 +529,6 @@ class _ResolutionStorer<Location, Declaration, Reference, PrefixInfo>
|
|||
_store(location, reference: expressionType, inferredType: inferredType);
|
||||
}
|
||||
|
||||
@override
|
||||
void variableAssign(
|
||||
ExpressionJudgment judgment,
|
||||
Location location,
|
||||
|
@ -491,13 +544,11 @@ class _ResolutionStorer<Location, Declaration, Reference, PrefixInfo>
|
|||
inferredType: inferredType);
|
||||
}
|
||||
|
||||
@override
|
||||
void variableDeclaration(StatementJudgment judgment, Location location,
|
||||
DartType statementType, DartType inferredType) {
|
||||
_store(location, literalType: statementType, inferredType: inferredType);
|
||||
}
|
||||
|
||||
@override
|
||||
void variableGet(ExpressionJudgment judgment, Location location,
|
||||
bool isInCascade, Declaration expressionVariable, DartType inferredType) {
|
||||
if (isInCascade) {
|
||||
|
@ -507,23 +558,26 @@ class _ResolutionStorer<Location, Declaration, Reference, PrefixInfo>
|
|||
declaration: expressionVariable, inferredType: inferredType);
|
||||
}
|
||||
|
||||
@override
|
||||
void variableSet(ExpressionJudgment judgment, Location location,
|
||||
DartType inferredType) =>
|
||||
genericExpression("variableSet", location, inferredType);
|
||||
|
||||
@override
|
||||
void whileStatement(StatementJudgment judgment, Location location) {}
|
||||
void whileStatement(
|
||||
StatementJudgment judgment,
|
||||
Location location,
|
||||
Token whileKeyword,
|
||||
Token leftParenthesis,
|
||||
void condition,
|
||||
Token rightParenthesis,
|
||||
void body) {}
|
||||
|
||||
@override
|
||||
void yieldStatement(StatementJudgment judgment, Location location) {}
|
||||
void yieldStatement(StatementJudgment judgment, Location location,
|
||||
Token yieldKeyword, Token star, void expression, Token semicolon) {}
|
||||
|
||||
@override
|
||||
void storePrefixInfo(Location location, PrefixInfo prefixInfo) {
|
||||
_store(location, prefixInfo: prefixInfo);
|
||||
}
|
||||
|
||||
@override
|
||||
void storeClassReference(
|
||||
Location location, Reference reference, DartType rawType) {
|
||||
// TODO(paulberry): would it be better to use literalType?
|
||||
|
|
|
@ -2,12 +2,12 @@
|
|||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
import 'package:front_end/src/scanner/token.dart' show Token;
|
||||
|
||||
import 'package:kernel/ast.dart' show Catch, DartType, FunctionType, Node;
|
||||
|
||||
import 'package:kernel/type_algebra.dart' show Substitution;
|
||||
|
||||
import '../../scanner/token.dart' show Token;
|
||||
|
||||
import 'kernel_shadow_ast.dart'
|
||||
show ExpressionJudgment, InitializerJudgment, StatementJudgment;
|
||||
|
||||
|
|
|
@ -170,7 +170,8 @@ class AsJudgment extends AsExpression implements ExpressionJudgment {
|
|||
DartType typeContext) {
|
||||
inferrer.inferExpression(factory, judgment, const UnknownType(), false);
|
||||
inferredType = type;
|
||||
inferrer.listener.asExpression(this, fileOffset, inferredType);
|
||||
inferrer.listener
|
||||
.asExpression(this, fileOffset, null, null, null, inferredType);
|
||||
return inferredType;
|
||||
}
|
||||
}
|
||||
|
@ -187,7 +188,8 @@ class AssertInitializerJudgment extends AssertInitializer
|
|||
ShadowTypeInferrer inferrer,
|
||||
Factory<Expression, Statement, Initializer, Type> factory) {
|
||||
inferrer.inferStatement(factory, judgment);
|
||||
inferrer.listener.assertInitializer(this, fileOffset);
|
||||
inferrer.listener.assertInitializer(
|
||||
this, fileOffset, null, null, null, null, null, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -220,7 +222,8 @@ class AssertStatementJudgment extends AssertStatement
|
|||
inferrer.inferExpression(
|
||||
factory, messageJudgment, const UnknownType(), false);
|
||||
}
|
||||
inferrer.listener.assertStatement(this, fileOffset);
|
||||
inferrer.listener.assertStatement(
|
||||
this, fileOffset, null, null, null, null, null, null, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -244,7 +247,8 @@ class AwaitJudgment extends AwaitExpression implements ExpressionJudgment {
|
|||
inferrer.inferExpression(factory, judgment, typeContext, true);
|
||||
inferredType =
|
||||
inferrer.typeSchemaEnvironment.unfutureType(judgment.inferredType);
|
||||
inferrer.listener.awaitExpression(this, fileOffset, inferredType);
|
||||
inferrer.listener
|
||||
.awaitExpression(this, fileOffset, null, null, inferredType);
|
||||
return inferredType;
|
||||
}
|
||||
}
|
||||
|
@ -262,7 +266,7 @@ class BlockJudgment extends Block implements StatementJudgment {
|
|||
for (var judgment in judgments) {
|
||||
inferrer.inferStatement(factory, judgment);
|
||||
}
|
||||
inferrer.listener.block(this, fileOffset);
|
||||
inferrer.listener.block(this, fileOffset, null, null, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -278,7 +282,7 @@ class BoolJudgment extends BoolLiteral implements ExpressionJudgment {
|
|||
Factory<Expression, Statement, Initializer, Type> factory,
|
||||
DartType typeContext) {
|
||||
inferredType = inferrer.coreTypes.boolClass.rawType;
|
||||
inferrer.listener.boolLiteral(this, fileOffset, inferredType);
|
||||
inferrer.listener.boolLiteral(this, fileOffset, null, null, inferredType);
|
||||
return inferredType;
|
||||
}
|
||||
}
|
||||
|
@ -304,7 +308,7 @@ class ContinueJudgment extends BreakStatement implements StatementJudgment {
|
|||
ShadowTypeInferrer inferrer,
|
||||
Factory<Expression, Statement, Initializer, Type> factory) {
|
||||
// No inference needs to be done.
|
||||
inferrer.listener.breakStatement(this, fileOffset);
|
||||
inferrer.listener.breakStatement(this, fileOffset, null, null, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -676,7 +680,8 @@ class ConditionalJudgment extends ConditionalExpression
|
|||
if (inferrer.strongMode) {
|
||||
staticType = inferredType;
|
||||
}
|
||||
inferrer.listener.conditionalExpression(this, fileOffset, inferredType);
|
||||
inferrer.listener.conditionalExpression(
|
||||
this, fileOffset, null, null, null, null, null, inferredType);
|
||||
return inferredType;
|
||||
}
|
||||
}
|
||||
|
@ -812,7 +817,8 @@ class ContinueSwitchJudgment extends ContinueSwitchStatement
|
|||
ShadowTypeInferrer inferrer,
|
||||
Factory<Expression, Statement, Initializer, Type> factory) {
|
||||
// No inference needs to be done.
|
||||
inferrer.listener.continueSwitchStatement(this, fileOffset);
|
||||
inferrer.listener
|
||||
.continueSwitchStatement(this, fileOffset, null, null, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -856,7 +862,8 @@ class DoJudgment extends DoStatement implements StatementJudgment {
|
|||
factory, conditionJudgment, boolType, !inferrer.isTopLevel);
|
||||
inferrer.ensureAssignable(boolType, conditionJudgment.inferredType,
|
||||
condition, condition.fileOffset);
|
||||
inferrer.listener.doStatement(this, fileOffset);
|
||||
inferrer.listener.doStatement(
|
||||
this, fileOffset, null, null, null, null, null, null, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -872,7 +879,7 @@ class DoubleJudgment extends DoubleLiteral implements ExpressionJudgment {
|
|||
Factory<Expression, Statement, Initializer, Type> factory,
|
||||
DartType typeContext) {
|
||||
inferredType = inferrer.coreTypes.doubleClass.rawType;
|
||||
inferrer.listener.doubleLiteral(this, fileOffset, inferredType);
|
||||
inferrer.listener.doubleLiteral(this, fileOffset, null, null, inferredType);
|
||||
return inferredType;
|
||||
}
|
||||
}
|
||||
|
@ -913,7 +920,7 @@ class ExpressionStatementJudgment extends ExpressionStatement
|
|||
ShadowTypeInferrer inferrer,
|
||||
Factory<Expression, Statement, Initializer, Type> factory) {
|
||||
inferrer.inferExpression(factory, judgment, const UnknownType(), false);
|
||||
inferrer.listener.expressionStatement(this, fileOffset);
|
||||
inferrer.listener.expressionStatement(this, fileOffset, null, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1039,7 +1046,8 @@ class ShadowFieldInitializer extends FieldInitializer
|
|||
var initializerType =
|
||||
inferrer.inferExpression(factory, value, field.type, true);
|
||||
inferrer.ensureAssignable(field.type, initializerType, value, fileOffset);
|
||||
inferrer.listener.fieldInitializer(this, fileOffset, field);
|
||||
inferrer.listener.fieldInitializer(
|
||||
this, fileOffset, null, null, null, null, null, field);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1306,7 +1314,7 @@ class ShadowIfNullExpression extends Let implements ExpressionJudgment {
|
|||
if (inferrer.strongMode) {
|
||||
body.staticType = inferredType;
|
||||
}
|
||||
inferrer.listener.ifNull(this, fileOffset, inferredType);
|
||||
inferrer.listener.ifNull(this, fileOffset, null, null, null, inferredType);
|
||||
return inferredType;
|
||||
}
|
||||
}
|
||||
|
@ -1336,7 +1344,8 @@ class IfJudgment extends IfStatement implements StatementJudgment {
|
|||
if (otherwiseJudgment != null) {
|
||||
inferrer.inferStatement(factory, otherwiseJudgment);
|
||||
}
|
||||
inferrer.listener.ifStatement(this, fileOffset);
|
||||
inferrer.listener.ifStatement(
|
||||
this, fileOffset, null, null, null, null, null, null, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1480,7 +1489,7 @@ class IntJudgment extends IntLiteral implements ExpressionJudgment {
|
|||
Factory<Expression, Statement, Initializer, Type> factory,
|
||||
DartType typeContext) {
|
||||
inferredType = inferrer.coreTypes.intClass.rawType;
|
||||
inferrer.listener.intLiteral(this, fileOffset, inferredType);
|
||||
inferrer.listener.intLiteral(this, fileOffset, null, null, inferredType);
|
||||
return inferredType;
|
||||
}
|
||||
}
|
||||
|
@ -1515,7 +1524,8 @@ class IsJudgment extends IsExpression implements ExpressionJudgment {
|
|||
DartType typeContext) {
|
||||
inferrer.inferExpression(factory, judgment, const UnknownType(), false);
|
||||
inferredType = inferrer.coreTypes.boolClass.rawType;
|
||||
inferrer.listener.isExpression(this, fileOffset, type, inferredType);
|
||||
inferrer.listener
|
||||
.isExpression(this, fileOffset, null, null, null, type, inferredType);
|
||||
return inferredType;
|
||||
}
|
||||
}
|
||||
|
@ -1541,8 +1551,8 @@ class IsNotJudgment extends Not implements ExpressionJudgment {
|
|||
|
||||
inferrer.inferExpression(factory, judgment, const UnknownType(), false);
|
||||
inferredType = inferrer.coreTypes.boolClass.rawType;
|
||||
inferrer.listener
|
||||
.isNotExpression(this, fileOffset, isExpression.type, inferredType);
|
||||
inferrer.listener.isNotExpression(this, fileOffset, null, null, null, null,
|
||||
isExpression.type, inferredType);
|
||||
return inferredType;
|
||||
}
|
||||
}
|
||||
|
@ -1658,7 +1668,8 @@ class ShadowLogicalExpression extends LogicalExpression
|
|||
inferrer.ensureAssignable(boolType, leftType, left, left.fileOffset);
|
||||
inferrer.ensureAssignable(boolType, rightType, right, right.fileOffset);
|
||||
var inferredType = boolType;
|
||||
inferrer.listener.logicalExpression(this, fileOffset, inferredType);
|
||||
inferrer.listener
|
||||
.logicalExpression(this, fileOffset, null, null, null, inferredType);
|
||||
return inferredType;
|
||||
}
|
||||
}
|
||||
|
@ -1865,7 +1876,7 @@ class ShadowNot extends Not implements ExpressionJudgment {
|
|||
factory, operand, boolType, !inferrer.isTopLevel);
|
||||
inferrer.ensureAssignable(boolType, actualType, operand, fileOffset);
|
||||
DartType inferredType = boolType;
|
||||
inferrer.listener.not(this, fileOffset, inferredType);
|
||||
inferrer.listener.not(this, fileOffset, null, null, inferredType);
|
||||
return inferredType;
|
||||
}
|
||||
}
|
||||
|
@ -1949,7 +1960,7 @@ class NullJudgment extends NullLiteral implements ExpressionJudgment {
|
|||
DartType typeContext) {
|
||||
inferredType = inferrer.coreTypes.nullClass.rawType;
|
||||
inferrer.listener
|
||||
.nullLiteral(this, fileOffset, fileOffset == -1, inferredType);
|
||||
.nullLiteral(this, fileOffset, null, fileOffset == -1, inferredType);
|
||||
return inferredType;
|
||||
}
|
||||
}
|
||||
|
@ -2100,7 +2111,8 @@ class ShadowRedirectingInitializer extends RedirectingInitializer
|
|||
target.function.functionType, target.enclosingClass.thisType, arguments,
|
||||
skipTypeArgumentInference: true);
|
||||
ArgumentsJudgment.removeNonInferrableArgumentTypes(arguments);
|
||||
inferrer.listener.redirectingInitializer(this, fileOffset, target);
|
||||
inferrer.listener.redirectingInitializer(
|
||||
this, fileOffset, null, null, null, null, target);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2114,7 +2126,7 @@ class ShadowRethrow extends Rethrow implements ExpressionJudgment {
|
|||
Factory<Expression, Statement, Initializer, Type> factory,
|
||||
DartType typeContext) {
|
||||
var inferredType = const BottomType();
|
||||
inferrer.listener.rethrow_(this, fileOffset, inferredType);
|
||||
inferrer.listener.rethrow_(this, fileOffset, null, inferredType);
|
||||
return inferredType;
|
||||
}
|
||||
}
|
||||
|
@ -2148,7 +2160,7 @@ class ReturnJudgment extends ReturnStatement implements StatementJudgment {
|
|||
closureContext.handleReturn(
|
||||
inferrer, inferredType, expression, fileOffset);
|
||||
}
|
||||
inferrer.listener.returnStatement(this, fileOffset);
|
||||
inferrer.listener.returnStatement(this, fileOffset, null, null, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2294,7 +2306,7 @@ class ShadowStringLiteral extends StringLiteral implements ExpressionJudgment {
|
|||
Factory<Expression, Statement, Initializer, Type> factory,
|
||||
DartType typeContext) {
|
||||
var inferredType = inferrer.coreTypes.stringClass.rawType;
|
||||
inferrer.listener.stringLiteral(this, fileOffset, inferredType);
|
||||
inferrer.listener.stringLiteral(this, fileOffset, null, null, inferredType);
|
||||
return inferredType;
|
||||
}
|
||||
}
|
||||
|
@ -2321,7 +2333,8 @@ class ShadowSuperInitializer extends SuperInitializer
|
|||
inferrer.thisType,
|
||||
arguments,
|
||||
skipTypeArgumentInference: true);
|
||||
inferrer.listener.superInitializer(this, fileOffset);
|
||||
inferrer.listener
|
||||
.superInitializer(this, fileOffset, null, null, null, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2431,7 +2444,8 @@ class ShadowSymbolLiteral extends SymbolLiteral implements ExpressionJudgment {
|
|||
Factory<Expression, Statement, Initializer, Type> factory,
|
||||
DartType typeContext) {
|
||||
var inferredType = inferrer.coreTypes.symbolClass.rawType;
|
||||
inferrer.listener.symbolLiteral(this, fileOffset, inferredType);
|
||||
inferrer.listener
|
||||
.symbolLiteral(this, fileOffset, null, null, null, inferredType);
|
||||
return inferredType;
|
||||
}
|
||||
}
|
||||
|
@ -2513,7 +2527,7 @@ class ThisJudgment extends ThisExpression implements ExpressionJudgment {
|
|||
Factory<Expression, Statement, Initializer, Type> factory,
|
||||
DartType typeContext) {
|
||||
inferredType = inferrer.thisType ?? const DynamicType();
|
||||
inferrer.listener.thisExpression(this, fileOffset, inferredType);
|
||||
inferrer.listener.thisExpression(this, fileOffset, null, inferredType);
|
||||
return inferredType;
|
||||
}
|
||||
}
|
||||
|
@ -2532,7 +2546,7 @@ class ThrowJudgment extends Throw implements ExpressionJudgment {
|
|||
DartType typeContext) {
|
||||
inferrer.inferExpression(factory, judgment, const UnknownType(), false);
|
||||
inferredType = const BottomType();
|
||||
inferrer.listener.throw_(this, fileOffset, inferredType);
|
||||
inferrer.listener.throw_(this, fileOffset, null, null, inferredType);
|
||||
return inferredType;
|
||||
}
|
||||
}
|
||||
|
@ -2568,6 +2582,15 @@ class TryCatchJudgment extends TryCatch implements StatementJudgment {
|
|||
inferrer.listener.catchStatement(
|
||||
catch_,
|
||||
catch_.fileOffset,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
catch_.guard,
|
||||
catch_.exceptionJudgment?.fileOffset,
|
||||
catch_.exceptionJudgment?.type,
|
||||
|
@ -3054,7 +3077,8 @@ class WhileJudgment extends WhileStatement implements StatementJudgment {
|
|||
inferrer.ensureAssignable(expectedType, conditionJudgment.inferredType,
|
||||
condition, condition.fileOffset);
|
||||
inferrer.inferStatement(factory, bodyJudgment);
|
||||
inferrer.listener.whileStatement(this, fileOffset);
|
||||
inferrer.listener
|
||||
.whileStatement(this, fileOffset, null, null, null, null, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3086,7 +3110,7 @@ class YieldJudgment extends YieldStatement implements StatementJudgment {
|
|||
}
|
||||
closureContext.handleYield(
|
||||
inferrer, isYieldStar, judgment.inferredType, expression, fileOffset);
|
||||
inferrer.listener.yieldStatement(this, fileOffset);
|
||||
inferrer.listener.yieldStatement(this, fileOffset, null, null, null, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -6,6 +6,8 @@ import 'package:kernel/ast.dart' show Catch, DartType, FunctionType, Node;
|
|||
|
||||
import 'package:kernel/type_algebra.dart' show Substitution;
|
||||
|
||||
import '../../scanner/token.dart' show Token;
|
||||
|
||||
import '../kernel/kernel_shadow_ast.dart'
|
||||
show ExpressionJudgment, InitializerJudgment, StatementJudgment;
|
||||
|
||||
|
@ -24,21 +26,45 @@ import '../kernel/kernel_shadow_ast.dart'
|
|||
abstract class TypeInferenceListener<Location, Declaration, Reference,
|
||||
PrefixInfo> {
|
||||
void asExpression(
|
||||
ExpressionJudgment judgment, Location location, DartType inferredType);
|
||||
ExpressionJudgment judgment,
|
||||
Location location,
|
||||
void expression,
|
||||
Token asOperator,
|
||||
void literalType,
|
||||
DartType inferredType);
|
||||
|
||||
void assertInitializer(InitializerJudgment judgment, Location location);
|
||||
void assertInitializer(
|
||||
InitializerJudgment judgment,
|
||||
Location location,
|
||||
Token assertKeyword,
|
||||
Token leftParenthesis,
|
||||
void condition,
|
||||
Token comma,
|
||||
void message,
|
||||
Token rightParenthesis);
|
||||
|
||||
void assertStatement(StatementJudgment judgment, Location location);
|
||||
void assertStatement(
|
||||
StatementJudgment judgment,
|
||||
Location location,
|
||||
Token assertKeyword,
|
||||
Token leftParenthesis,
|
||||
void condition,
|
||||
Token comma,
|
||||
void message,
|
||||
Token rightParenthesis,
|
||||
Token semicolon);
|
||||
|
||||
void awaitExpression(
|
||||
ExpressionJudgment judgment, Location location, DartType inferredType);
|
||||
void awaitExpression(ExpressionJudgment judgment, Location location,
|
||||
Token awaitKeyword, void expression, DartType inferredType);
|
||||
|
||||
void block(StatementJudgment judgment, Location location);
|
||||
void block(StatementJudgment judgment, Location location, Token leftBracket,
|
||||
List<void> statements, Token rightBracket);
|
||||
|
||||
void boolLiteral(
|
||||
ExpressionJudgment judgment, Location location, DartType inferredType);
|
||||
void boolLiteral(ExpressionJudgment judgment, Location location,
|
||||
Token literal, bool value, DartType inferredType);
|
||||
|
||||
void breakStatement(StatementJudgment judgment, Location location);
|
||||
void breakStatement(StatementJudgment judgment, Location location,
|
||||
Token breakKeyword, void label, Token semicolon);
|
||||
|
||||
void cascadeExpression(
|
||||
ExpressionJudgment judgment, Location location, DartType inferredType);
|
||||
|
@ -46,6 +72,15 @@ abstract class TypeInferenceListener<Location, Declaration, Reference,
|
|||
void catchStatement(
|
||||
Catch judgment,
|
||||
Location location,
|
||||
Token onKeyword,
|
||||
void type,
|
||||
Token catchKeyword,
|
||||
Token leftParenthesis,
|
||||
Token exceptionParameter,
|
||||
Token comma,
|
||||
Token stackTraceParameter,
|
||||
Token rightParenthesis,
|
||||
void body,
|
||||
DartType guardType,
|
||||
Location exceptionLocation,
|
||||
DartType exceptionType,
|
||||
|
@ -53,24 +88,52 @@ abstract class TypeInferenceListener<Location, Declaration, Reference,
|
|||
DartType stackTraceType);
|
||||
|
||||
void conditionalExpression(
|
||||
ExpressionJudgment judgment, Location location, DartType inferredType);
|
||||
ExpressionJudgment judgment,
|
||||
Location location,
|
||||
void condition,
|
||||
Token question,
|
||||
void thenExpression,
|
||||
Token colon,
|
||||
void elseExpression,
|
||||
DartType inferredType);
|
||||
|
||||
void constructorInvocation(ExpressionJudgment judgment, Location location,
|
||||
Reference expressionTarget, DartType inferredType);
|
||||
|
||||
void continueSwitchStatement(StatementJudgment judgment, Location location);
|
||||
void continueStatement(StatementJudgment judgment, Location location,
|
||||
Token continueKeyword, void label, Token semicolon);
|
||||
|
||||
void continueSwitchStatement(StatementJudgment judgment, Location location,
|
||||
Token continueKeyword, void label, Token semicolon);
|
||||
|
||||
void deferredCheck(
|
||||
ExpressionJudgment judgment, Location location, DartType inferredType);
|
||||
|
||||
void doStatement(StatementJudgment judgment, Location location);
|
||||
void doStatement(
|
||||
StatementJudgment judgment,
|
||||
Location location,
|
||||
Token doKeyword,
|
||||
void body,
|
||||
Token whileKeyword,
|
||||
Token leftParenthesis,
|
||||
void condition,
|
||||
Token rightParenthesis,
|
||||
Token semicolon);
|
||||
|
||||
void doubleLiteral(
|
||||
ExpressionJudgment judgment, Location location, DartType inferredType);
|
||||
void doubleLiteral(ExpressionJudgment judgment, Location location,
|
||||
Token literal, double value, DartType inferredType);
|
||||
|
||||
void expressionStatement(StatementJudgment judgment, Location location);
|
||||
void expressionStatement(StatementJudgment judgment, Location location,
|
||||
void expression, Token semicolon);
|
||||
|
||||
void fieldInitializer(InitializerJudgment judgment, Location location,
|
||||
void fieldInitializer(
|
||||
InitializerJudgment judgment,
|
||||
Location location,
|
||||
Token thisKeyword,
|
||||
Token period,
|
||||
Token fieldName,
|
||||
Token equals,
|
||||
void expression,
|
||||
Reference initializerField);
|
||||
|
||||
void forInStatement(
|
||||
|
@ -91,24 +154,46 @@ abstract class TypeInferenceListener<Location, Declaration, Reference,
|
|||
void functionExpression(
|
||||
ExpressionJudgment judgment, Location location, DartType inferredType);
|
||||
|
||||
void ifNull(
|
||||
ExpressionJudgment judgment, Location location, DartType inferredType);
|
||||
void ifNull(ExpressionJudgment judgment, Location location, void leftOperand,
|
||||
Token operator, void rightOperand, DartType inferredType);
|
||||
|
||||
void ifStatement(StatementJudgment judgment, Location location);
|
||||
void ifStatement(
|
||||
StatementJudgment judgment,
|
||||
Location location,
|
||||
Token ifKeyword,
|
||||
Token leftParenthesis,
|
||||
void condition,
|
||||
Token rightParenthesis,
|
||||
void thenStatement,
|
||||
Token elseKeyword,
|
||||
void elseStatement);
|
||||
|
||||
void indexAssign(ExpressionJudgment judgment, Location location,
|
||||
Reference writeMember, Reference combiner, DartType inferredType);
|
||||
|
||||
void intLiteral(
|
||||
ExpressionJudgment judgment, Location location, DartType inferredType);
|
||||
void intLiteral(ExpressionJudgment judgment, Location location, Token literal,
|
||||
num value, DartType inferredType);
|
||||
|
||||
void invalidInitializer(InitializerJudgment judgment, Location location);
|
||||
|
||||
void isExpression(ExpressionJudgment judgment, Location location,
|
||||
DartType testedType, DartType inferredType);
|
||||
void isExpression(
|
||||
ExpressionJudgment judgment,
|
||||
Location location,
|
||||
void expression,
|
||||
Token isOperator,
|
||||
void literalType,
|
||||
DartType testedType,
|
||||
DartType inferredType);
|
||||
|
||||
void isNotExpression(ExpressionJudgment judgment, Location location,
|
||||
DartType type, DartType inferredType);
|
||||
void isNotExpression(
|
||||
ExpressionJudgment judgment,
|
||||
Location location,
|
||||
void expression,
|
||||
Token isOperator,
|
||||
Token notOperator,
|
||||
void literalType,
|
||||
DartType type,
|
||||
DartType inferredType);
|
||||
|
||||
void labeledStatement(StatementJudgment judgment, Location location);
|
||||
|
||||
|
@ -116,7 +201,12 @@ abstract class TypeInferenceListener<Location, Declaration, Reference,
|
|||
ExpressionJudgment judgment, Location location, DartType inferredType);
|
||||
|
||||
void logicalExpression(
|
||||
ExpressionJudgment judgment, Location location, DartType inferredType);
|
||||
ExpressionJudgment judgment,
|
||||
Location location,
|
||||
void leftOperand,
|
||||
Token operator,
|
||||
void rightOperand,
|
||||
DartType inferredType);
|
||||
|
||||
void mapLiteral(
|
||||
ExpressionJudgment judgment, Location location, DartType typeContext);
|
||||
|
@ -143,11 +233,11 @@ abstract class TypeInferenceListener<Location, Declaration, Reference,
|
|||
void namedFunctionExpression(
|
||||
ExpressionJudgment judgment, Location location, DartType inferredType);
|
||||
|
||||
void not(
|
||||
ExpressionJudgment judgment, Location location, DartType inferredType);
|
||||
void not(ExpressionJudgment judgment, Location location, Token operator,
|
||||
void operand, DartType inferredType);
|
||||
|
||||
void nullLiteral(ExpressionJudgment judgment, Location location,
|
||||
bool isSynthetic, DartType inferredType);
|
||||
Token literal, bool isSynthetic, DartType inferredType);
|
||||
|
||||
void propertyAssign(
|
||||
ExpressionJudgment judgment,
|
||||
|
@ -166,13 +256,20 @@ abstract class TypeInferenceListener<Location, Declaration, Reference,
|
|||
void propertySet(
|
||||
ExpressionJudgment judgment, Location location, DartType inferredType);
|
||||
|
||||
void redirectingInitializer(InitializerJudgment judgment, Location location,
|
||||
void redirectingInitializer(
|
||||
InitializerJudgment judgment,
|
||||
Location location,
|
||||
Token thisKeyword,
|
||||
Token period,
|
||||
Token constructorName,
|
||||
covariant Object argumentList,
|
||||
Reference initializerTarget);
|
||||
|
||||
void rethrow_(
|
||||
ExpressionJudgment judgment, Location location, DartType inferredType);
|
||||
void rethrow_(ExpressionJudgment judgment, Location location,
|
||||
Token rethrowKeyword, DartType inferredType);
|
||||
|
||||
void returnStatement(StatementJudgment judgment, Location location);
|
||||
void returnStatement(StatementJudgment judgment, Location location,
|
||||
Token returnKeyword, void expression, Token semicolon);
|
||||
|
||||
void staticAssign(
|
||||
ExpressionJudgment judgment,
|
||||
|
@ -197,21 +294,32 @@ abstract class TypeInferenceListener<Location, Declaration, Reference,
|
|||
void stringConcatenation(
|
||||
ExpressionJudgment judgment, Location location, DartType inferredType);
|
||||
|
||||
void stringLiteral(
|
||||
ExpressionJudgment judgment, Location location, DartType inferredType);
|
||||
void stringLiteral(ExpressionJudgment judgment, Location location,
|
||||
Token literal, String value, DartType inferredType);
|
||||
|
||||
void superInitializer(InitializerJudgment judgment, Location location);
|
||||
void superInitializer(
|
||||
InitializerJudgment judgment,
|
||||
Location location,
|
||||
Token superKeyword,
|
||||
Token period,
|
||||
Token constructorName,
|
||||
covariant Object argumentList);
|
||||
|
||||
void switchStatement(StatementJudgment judgment, Location location);
|
||||
|
||||
void symbolLiteral(
|
||||
ExpressionJudgment judgment, Location location, DartType inferredType);
|
||||
ExpressionJudgment judgment,
|
||||
Location location,
|
||||
Token poundSign,
|
||||
List<Token> components,
|
||||
String value,
|
||||
DartType inferredType);
|
||||
|
||||
void thisExpression(
|
||||
ExpressionJudgment judgment, Location location, DartType inferredType);
|
||||
void thisExpression(ExpressionJudgment judgment, Location location,
|
||||
Token thisKeyword, DartType inferredType);
|
||||
|
||||
void throw_(
|
||||
ExpressionJudgment judgment, Location location, DartType inferredType);
|
||||
void throw_(ExpressionJudgment judgment, Location location,
|
||||
Token throwKeyword, void expression, DartType inferredType);
|
||||
|
||||
void tryCatch(StatementJudgment judgment, Location location);
|
||||
|
||||
|
@ -237,9 +345,17 @@ abstract class TypeInferenceListener<Location, Declaration, Reference,
|
|||
void variableSet(
|
||||
ExpressionJudgment judgment, Location location, DartType inferredType);
|
||||
|
||||
void whileStatement(StatementJudgment judgment, Location location);
|
||||
void whileStatement(
|
||||
StatementJudgment judgment,
|
||||
Location location,
|
||||
Token whileKeyword,
|
||||
Token leftParenthesis,
|
||||
void condition,
|
||||
Token rightParenthesis,
|
||||
void body);
|
||||
|
||||
void yieldStatement(StatementJudgment judgment, Location location);
|
||||
void yieldStatement(StatementJudgment judgment, Location location,
|
||||
Token yieldKeyword, Token star, void expression, Token semicolon);
|
||||
|
||||
void storePrefixInfo(Location location, PrefixInfo prefixInfo);
|
||||
|
||||
|
@ -253,28 +369,47 @@ abstract class TypeInferenceListener<Location, Declaration, Reference,
|
|||
class KernelTypeInferenceListener
|
||||
implements TypeInferenceListener<int, int, Node, int> {
|
||||
@override
|
||||
void asExpression(
|
||||
ExpressionJudgment judgment, location, DartType inferredType) {}
|
||||
void asExpression(ExpressionJudgment judgment, location, void expression,
|
||||
Token asOperator, void literalType, DartType inferredType) {}
|
||||
|
||||
@override
|
||||
void assertInitializer(InitializerJudgment judgment, location) {}
|
||||
void assertInitializer(
|
||||
InitializerJudgment judgment,
|
||||
location,
|
||||
Token assertKeyword,
|
||||
Token leftParenthesis,
|
||||
void condition,
|
||||
Token comma,
|
||||
void message,
|
||||
Token rightParenthesis) {}
|
||||
|
||||
@override
|
||||
void assertStatement(StatementJudgment judgment, location) {}
|
||||
void assertStatement(
|
||||
StatementJudgment judgment,
|
||||
location,
|
||||
Token assertKeyword,
|
||||
Token leftParenthesis,
|
||||
void condition,
|
||||
Token comma,
|
||||
void message,
|
||||
Token rightParenthesis,
|
||||
Token semicolon) {}
|
||||
|
||||
@override
|
||||
void awaitExpression(
|
||||
ExpressionJudgment judgment, location, DartType inferredType) {}
|
||||
void awaitExpression(ExpressionJudgment judgment, location,
|
||||
Token awaitKeyword, void expression, DartType inferredType) {}
|
||||
|
||||
@override
|
||||
void block(StatementJudgment judgment, location) {}
|
||||
void block(StatementJudgment judgment, location, Token leftBracket,
|
||||
List<void> statements, Token rightBracket) {}
|
||||
|
||||
@override
|
||||
void boolLiteral(
|
||||
ExpressionJudgment judgment, location, DartType inferredType) {}
|
||||
void boolLiteral(ExpressionJudgment judgment, location, Token literal,
|
||||
bool value, DartType inferredType) {}
|
||||
|
||||
@override
|
||||
void breakStatement(StatementJudgment judgment, location) {}
|
||||
void breakStatement(StatementJudgment judgment, location, Token breakKeyword,
|
||||
void label, Token semicolon) {}
|
||||
|
||||
@override
|
||||
void cascadeExpression(
|
||||
|
@ -284,6 +419,15 @@ class KernelTypeInferenceListener
|
|||
void catchStatement(
|
||||
Catch judgment,
|
||||
location,
|
||||
Token onKeyword,
|
||||
void type,
|
||||
Token catchKeyword,
|
||||
Token leftParenthesis,
|
||||
Token exceptionParameter,
|
||||
Token comma,
|
||||
Token stackTraceParameter,
|
||||
Token rightParenthesis,
|
||||
void body,
|
||||
DartType guardType,
|
||||
exceptionLocation,
|
||||
DartType exceptionType,
|
||||
|
@ -292,32 +436,61 @@ class KernelTypeInferenceListener
|
|||
|
||||
@override
|
||||
void conditionalExpression(
|
||||
ExpressionJudgment judgment, location, DartType inferredType) {}
|
||||
ExpressionJudgment judgment,
|
||||
location,
|
||||
void condition,
|
||||
Token question,
|
||||
void thenExpression,
|
||||
Token colon,
|
||||
void elseExpression,
|
||||
DartType inferredType) {}
|
||||
|
||||
@override
|
||||
void constructorInvocation(ExpressionJudgment judgment, location,
|
||||
expressionTarget, DartType inferredType) {}
|
||||
|
||||
@override
|
||||
void continueSwitchStatement(StatementJudgment judgment, location) {}
|
||||
void continueStatement(StatementJudgment judgment, location,
|
||||
Token continueKeyword, void label, Token semicolon) {}
|
||||
|
||||
@override
|
||||
void continueSwitchStatement(StatementJudgment judgment, location,
|
||||
Token continueKeyword, void label, Token semicolon) {}
|
||||
|
||||
@override
|
||||
void deferredCheck(
|
||||
ExpressionJudgment judgment, location, DartType inferredType) {}
|
||||
|
||||
@override
|
||||
void doStatement(StatementJudgment judgment, location) {}
|
||||
void doStatement(
|
||||
StatementJudgment judgment,
|
||||
location,
|
||||
Token doKeyword,
|
||||
void body,
|
||||
Token whileKeyword,
|
||||
Token leftParenthesis,
|
||||
void condition,
|
||||
Token rightParenthesis,
|
||||
Token semicolon) {}
|
||||
|
||||
@override
|
||||
void doubleLiteral(
|
||||
ExpressionJudgment judgment, location, DartType inferredType) {}
|
||||
void doubleLiteral(ExpressionJudgment judgment, location, Token literal,
|
||||
double value, DartType inferredType) {}
|
||||
|
||||
@override
|
||||
void expressionStatement(StatementJudgment judgment, location) {}
|
||||
void expressionStatement(
|
||||
StatementJudgment judgment, location, void expression, Token semicolon) {}
|
||||
|
||||
@override
|
||||
void fieldInitializer(
|
||||
InitializerJudgment judgment, location, initializerField) {}
|
||||
InitializerJudgment judgment,
|
||||
location,
|
||||
Token thisKeyword,
|
||||
Token period,
|
||||
Token fieldName,
|
||||
Token equals,
|
||||
void expression,
|
||||
initializerField) {}
|
||||
|
||||
@override
|
||||
void forInStatement(
|
||||
|
@ -342,28 +515,51 @@ class KernelTypeInferenceListener
|
|||
ExpressionJudgment judgment, location, DartType inferredType) {}
|
||||
|
||||
@override
|
||||
void ifNull(ExpressionJudgment judgment, location, DartType inferredType) {}
|
||||
void ifNull(ExpressionJudgment judgment, location, void leftOperand,
|
||||
Token operator, void rightOperand, DartType inferredType) {}
|
||||
|
||||
@override
|
||||
void ifStatement(StatementJudgment judgment, location) {}
|
||||
void ifStatement(
|
||||
StatementJudgment judgment,
|
||||
location,
|
||||
Token ifKeyword,
|
||||
Token leftParenthesis,
|
||||
void condition,
|
||||
Token rightParenthesis,
|
||||
void thenStatement,
|
||||
Token elseKeyword,
|
||||
void elseStatement) {}
|
||||
|
||||
@override
|
||||
void indexAssign(ExpressionJudgment judgment, location, writeMember, combiner,
|
||||
DartType inferredType) {}
|
||||
|
||||
@override
|
||||
void intLiteral(
|
||||
ExpressionJudgment judgment, location, DartType inferredType) {}
|
||||
void intLiteral(ExpressionJudgment judgment, location, Token literal,
|
||||
num value, DartType inferredType) {}
|
||||
|
||||
@override
|
||||
void invalidInitializer(InitializerJudgment judgment, location) {}
|
||||
|
||||
@override
|
||||
void isExpression(ExpressionJudgment judgment, location, DartType testedType,
|
||||
void isExpression(
|
||||
ExpressionJudgment judgment,
|
||||
location,
|
||||
void expression,
|
||||
Token isOperator,
|
||||
void literalType,
|
||||
DartType testedType,
|
||||
DartType inferredType) {}
|
||||
|
||||
@override
|
||||
void isNotExpression(ExpressionJudgment judgment, location, DartType type,
|
||||
void isNotExpression(
|
||||
ExpressionJudgment judgment,
|
||||
location,
|
||||
void expression,
|
||||
Token isOperator,
|
||||
Token notOperator,
|
||||
void literalType,
|
||||
DartType type,
|
||||
DartType inferredType) {}
|
||||
|
||||
@override
|
||||
|
@ -375,7 +571,12 @@ class KernelTypeInferenceListener
|
|||
|
||||
@override
|
||||
void logicalExpression(
|
||||
ExpressionJudgment judgment, location, DartType inferredType) {}
|
||||
ExpressionJudgment judgment,
|
||||
location,
|
||||
void leftOperand,
|
||||
Token operator,
|
||||
void rightOperand,
|
||||
DartType inferredType) {}
|
||||
|
||||
@override
|
||||
void mapLiteral(
|
||||
|
@ -407,11 +608,12 @@ class KernelTypeInferenceListener
|
|||
ExpressionJudgment judgment, location, DartType inferredType) {}
|
||||
|
||||
@override
|
||||
void not(ExpressionJudgment judgment, location, DartType inferredType) {}
|
||||
void not(ExpressionJudgment judgment, location, Token operator, void operand,
|
||||
DartType inferredType) {}
|
||||
|
||||
@override
|
||||
void nullLiteral(ExpressionJudgment judgment, location, bool isSynthetic,
|
||||
DartType inferredType) {}
|
||||
void nullLiteral(ExpressionJudgment judgment, location, Token literal,
|
||||
bool isSynthetic, DartType inferredType) {}
|
||||
|
||||
@override
|
||||
void propertyAssign(ExpressionJudgment judgment, location, writeMember,
|
||||
|
@ -431,13 +633,21 @@ class KernelTypeInferenceListener
|
|||
|
||||
@override
|
||||
void redirectingInitializer(
|
||||
InitializerJudgment judgment, location, initializerTarget) {}
|
||||
InitializerJudgment judgment,
|
||||
location,
|
||||
Token thisKeyword,
|
||||
Token period,
|
||||
Token constructorName,
|
||||
covariant Object argumentList,
|
||||
initializerTarget) {}
|
||||
|
||||
@override
|
||||
void rethrow_(ExpressionJudgment judgment, location, DartType inferredType) {}
|
||||
void rethrow_(ExpressionJudgment judgment, location, Token rethrowKeyword,
|
||||
DartType inferredType) {}
|
||||
|
||||
@override
|
||||
void returnStatement(StatementJudgment judgment, location) {}
|
||||
void returnStatement(StatementJudgment judgment, location,
|
||||
Token returnKeyword, void expression, Token semicolon) {}
|
||||
|
||||
@override
|
||||
void staticAssign(ExpressionJudgment judgment, location, writeMember,
|
||||
|
@ -468,25 +678,32 @@ class KernelTypeInferenceListener
|
|||
ExpressionJudgment judgment, location, DartType inferredType) {}
|
||||
|
||||
@override
|
||||
void stringLiteral(
|
||||
ExpressionJudgment judgment, location, DartType inferredType) {}
|
||||
void stringLiteral(ExpressionJudgment judgment, location, Token literal,
|
||||
String value, DartType inferredType) {}
|
||||
|
||||
@override
|
||||
void superInitializer(InitializerJudgment judgment, location) {}
|
||||
void superInitializer(
|
||||
InitializerJudgment judgment,
|
||||
location,
|
||||
Token superKeyword,
|
||||
Token period,
|
||||
Token constructorName,
|
||||
covariant Object argumentList) {}
|
||||
|
||||
@override
|
||||
void switchStatement(StatementJudgment judgment, location) {}
|
||||
|
||||
@override
|
||||
void symbolLiteral(
|
||||
ExpressionJudgment judgment, location, DartType inferredType) {}
|
||||
void symbolLiteral(ExpressionJudgment judgment, location, Token poundSign,
|
||||
List<Token> components, String value, DartType inferredType) {}
|
||||
|
||||
@override
|
||||
void thisExpression(
|
||||
ExpressionJudgment judgment, location, DartType inferredType) {}
|
||||
void thisExpression(ExpressionJudgment judgment, location, Token thisKeyword,
|
||||
DartType inferredType) {}
|
||||
|
||||
@override
|
||||
void throw_(ExpressionJudgment judgment, location, DartType inferredType) {}
|
||||
void throw_(ExpressionJudgment judgment, location, Token throwKeyword,
|
||||
void expression, DartType inferredType) {}
|
||||
|
||||
@override
|
||||
void tryCatch(StatementJudgment judgment, location) {}
|
||||
|
@ -515,8 +732,16 @@ class KernelTypeInferenceListener
|
|||
ExpressionJudgment judgment, location, DartType inferredType) {}
|
||||
|
||||
@override
|
||||
void whileStatement(StatementJudgment judgment, location) {}
|
||||
void whileStatement(
|
||||
StatementJudgment judgment,
|
||||
location,
|
||||
Token whileKeyword,
|
||||
Token leftParenthesis,
|
||||
void condition,
|
||||
Token rightParenthesis,
|
||||
void body) {}
|
||||
|
||||
@override
|
||||
void yieldStatement(StatementJudgment judgment, location) {}
|
||||
void yieldStatement(StatementJudgment judgment, location, Token yieldKeyword,
|
||||
Token star, void expression, Token semicolon) {}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue