Skip to content

Commit b460773

Browse files
Disable type inference: local function return types
Change-Id: I5491150ccf4ddcb8c7905c66b5fc2b5b17d1239d Reviewed-on: https://dart-review.googlesource.com/c/86340 Reviewed-by: Dmitry Stefantsov <[email protected]>
1 parent 6ec321f commit b460773

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

pkg/front_end/lib/src/fasta/kernel/body_builder.dart

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,8 @@ abstract class BodyBuilder extends ScopeListener<JumpTarget>
274274

275275
bool get legacyMode => library.loader.target.legacyMode;
276276

277+
bool get disableTypeInference => library.disableTypeInference;
278+
277279
bool get inConstructor {
278280
return functionNestingLevel == 0 && member is KernelConstructorBuilder;
279281
}
@@ -3685,6 +3687,25 @@ abstract class BodyBuilder extends ScopeListener<JumpTarget>
36853687
FunctionNode function = formals.buildFunctionNode(
36863688
library, null, typeParameters, asyncModifier, body, token.charOffset)
36873689
..fileOffset = beginToken.charOffset;
3690+
3691+
if (disableTypeInference && asyncModifier != AsyncMarker.Sync) {
3692+
DartType returnType;
3693+
switch (asyncModifier) {
3694+
case AsyncMarker.Async:
3695+
returnType = coreTypes.futureClass.rawType;
3696+
break;
3697+
case AsyncMarker.AsyncStar:
3698+
returnType = coreTypes.streamClass.rawType;
3699+
break;
3700+
case AsyncMarker.SyncStar:
3701+
returnType = coreTypes.iterableClass.rawType;
3702+
break;
3703+
default:
3704+
returnType = const DynamicType();
3705+
break;
3706+
}
3707+
function.returnType = returnType;
3708+
}
36883709
if (constantContext != ConstantContext.none) {
36893710
push(buildProblem(fasta.messageNotAConstantExpression, formals.charOffset,
36903711
formals.length));

0 commit comments

Comments
 (0)