Disable type inference: local function return types

Change-Id: I5491150ccf4ddcb8c7905c66b5fc2b5b17d1239d
Reviewed-on: https://dart-review.googlesource.com/c/86340
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
This commit is contained in:
Peter von der Ahé 2018-12-17 14:33:49 +00:00 committed by commit-bot@chromium.org
parent 6ec321f2b7
commit b46077332b

View file

@ -274,6 +274,8 @@ abstract class BodyBuilder extends ScopeListener<JumpTarget>
bool get legacyMode => library.loader.target.legacyMode;
bool get disableTypeInference => library.disableTypeInference;
bool get inConstructor {
return functionNestingLevel == 0 && member is KernelConstructorBuilder;
}
@ -3685,6 +3687,25 @@ abstract class BodyBuilder extends ScopeListener<JumpTarget>
FunctionNode function = formals.buildFunctionNode(
library, null, typeParameters, asyncModifier, body, token.charOffset)
..fileOffset = beginToken.charOffset;
if (disableTypeInference && asyncModifier != AsyncMarker.Sync) {
DartType returnType;
switch (asyncModifier) {
case AsyncMarker.Async:
returnType = coreTypes.futureClass.rawType;
break;
case AsyncMarker.AsyncStar:
returnType = coreTypes.streamClass.rawType;
break;
case AsyncMarker.SyncStar:
returnType = coreTypes.iterableClass.rawType;
break;
default:
returnType = const DynamicType();
break;
}
function.returnType = returnType;
}
if (constantContext != ConstantContext.none) {
push(buildProblem(fasta.messageNotAConstantExpression, formals.charOffset,
formals.length));