Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit cc5df58

Browse files
johnniwinthercommit-bot@chromium.org
authored andcommitted
[cfe] Refactor return type checking in preparation for nnbd spec change
Change-Id: Ie73726b59b23be4c5e35b207ec72732c8be7dada Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150982 Reviewed-by: Dmitry Stefantsov <[email protected]> Commit-Queue: Johnni Winther <[email protected]>
1 parent 1d3fbbe commit cc5df58

File tree

36 files changed

+1911
-415
lines changed

36 files changed

+1911
-415
lines changed

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

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4887,9 +4887,7 @@ class InferenceVisitor
48874887
StatementInferenceResult visitReturnStatement(
48884888
covariant ReturnStatementImpl node) {
48894889
ClosureContext closureContext = inferrer.closureContext;
4890-
DartType typeContext = !closureContext.isGenerator
4891-
? closureContext.returnOrYieldContext
4892-
: const UnknownType();
4890+
DartType typeContext = closureContext.returnContext;
48934891
DartType inferredType;
48944892
if (node.expression != null) {
48954893
ExpressionInferenceResult expressionResult = inferrer.inferExpression(
@@ -5682,24 +5680,18 @@ class InferenceVisitor
56825680
StatementInferenceResult visitYieldStatement(YieldStatement node) {
56835681
ClosureContext closureContext = inferrer.closureContext;
56845682
ExpressionInferenceResult expressionResult;
5685-
if (closureContext.isGenerator) {
5686-
DartType typeContext = closureContext.returnOrYieldContext;
5687-
if (node.isYieldStar && typeContext != null) {
5688-
typeContext = inferrer.wrapType(
5689-
typeContext,
5690-
closureContext.isAsync
5691-
? inferrer.coreTypes.streamClass
5692-
: inferrer.coreTypes.iterableClass,
5693-
inferrer.library.nonNullable);
5694-
}
5695-
expressionResult = inferrer.inferExpression(
5696-
node.expression, typeContext, true,
5697-
isVoidAllowed: true);
5698-
} else {
5699-
expressionResult = inferrer.inferExpression(
5700-
node.expression, const UnknownType(), true,
5701-
isVoidAllowed: true);
5683+
DartType typeContext = closureContext.yieldContext;
5684+
if (node.isYieldStar && typeContext is! UnknownType) {
5685+
typeContext = inferrer.wrapType(
5686+
typeContext,
5687+
closureContext.isAsync
5688+
? inferrer.coreTypes.streamClass
5689+
: inferrer.coreTypes.iterableClass,
5690+
inferrer.library.nonNullable);
57025691
}
5692+
expressionResult = inferrer.inferExpression(
5693+
node.expression, typeContext, true,
5694+
isVoidAllowed: true);
57035695
closureContext.handleYield(inferrer, node, expressionResult);
57045696
return const StatementInferenceResult();
57055697
}

0 commit comments

Comments
 (0)