Avoid setting node.staticType twice in PostfixExpressionResolver.

Also, add an assertion to `SharedInferenceLogWriter` to prevent
accidentally setting static types more than once in the future.

Change-Id: If96a40c5490d91b67e061158b2b92af90c05d4d2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/372602
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
Paul Berry 2024-06-21 15:44:33 +00:00 committed by Commit Queue
parent 63de2edc74
commit 7d649303c2
2 changed files with 11 additions and 3 deletions

View file

@ -675,7 +675,11 @@ abstract class SharedInferenceLogWriterImpl<Type extends SharedType,
expectedKind: StateKind.expression);
addEvent(
new Event(message: 'EXPRESSION ${describe(expression)} HAS NO TYPE'));
(state as ExpressionState).typeRecorded = true;
ExpressionState state = this.state as ExpressionState;
if (state.typeRecorded) {
fail('A type (or lack thereof) was already recorded for this expression');
}
state.typeRecorded = true;
}
@override
@ -736,7 +740,11 @@ abstract class SharedInferenceLogWriterImpl<Type extends SharedType,
expectedKind: StateKind.expression);
addEvent(
new Event(message: 'STATIC TYPE OF ${describe(expression)} IS $type'));
(state as ExpressionState).typeRecorded = true;
ExpressionState state = this.state as ExpressionState;
if (state.typeRecorded) {
fail('A type (or lack thereof) was already recorded for this expression');
}
state.typeRecorded = true;
}
}

View file

@ -179,9 +179,9 @@ class PostfixExpressionResolver {
?.write(node, element, operatorReturnType, null);
}
}
node.recordStaticType(receiverType, resolver: _resolver);
}
node.recordStaticType(receiverType, resolver: _resolver);
_resolver.nullShortingTermination(node);
}