Disable type inference: Don't generate shadow wrappers
Change-Id: Ibab49c3614f5e54fe15bdcb135f25db7070d84ca
Reviewed-on: https://dart-review.googlesource.com/c/86342
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 25bcd5d..cd91c692 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -274,6 +274,7 @@
bool get legacyMode => library.loader.target.legacyMode;
+ @override
bool get disableTypeInference => library.disableTypeInference;
bool get inConstructor {
@@ -4859,12 +4860,14 @@
@override
Expression wrapSyntheticExpression(Expression desugared, int charOffset) {
+ if (disableTypeInference) return desugared;
return shadow.SyntheticWrapper.wrapSyntheticExpression(desugared)
..fileOffset = charOffset;
}
@override
Expression desugarSyntheticExpression(Expression node) {
+ if (disableTypeInference) return node;
shadow.SyntheticExpressionJudgment shadowNode = node;
return shadowNode.desugared;
}
@@ -4872,6 +4875,7 @@
@override
Expression wrapInvalidConstructorInvocation(Expression desugared,
Member constructor, Arguments arguments, int charOffset) {
+ if (disableTypeInference) return desugared;
return shadow.SyntheticWrapper.wrapInvalidConstructorInvocation(
desugared, constructor, arguments)
..fileOffset = charOffset;
@@ -4880,6 +4884,7 @@
@override
Expression wrapInvalidWrite(
Expression desugared, Expression expression, int charOffset) {
+ if (disableTypeInference) return desugared;
return shadow.SyntheticWrapper.wrapInvalidWrite(desugared, expression)
..fileOffset = charOffset;
}
@@ -4887,6 +4892,7 @@
@override
Expression wrapUnresolvedTargetInvocation(
Expression desugared, Arguments arguments, int charOffset) {
+ if (disableTypeInference) return desugared;
return shadow.SyntheticWrapper.wrapUnresolvedTargetInvocation(
desugared, arguments)
..fileOffset = charOffset;
@@ -4895,6 +4901,7 @@
@override
Expression wrapUnresolvedVariableAssignment(
Expression desugared, bool isCompound, Expression rhs, int charOffset) {
+ if (disableTypeInference) return desugared;
return shadow.SyntheticWrapper.wrapUnresolvedVariableAssignment(
desugared, isCompound, rhs)
..fileOffset = charOffset;
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
index 584d978..8f0c1cd 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
@@ -57,6 +57,8 @@
Forest get forest;
+ bool get disableTypeInference;
+
Constructor lookupConstructor(Name name, {bool isSuper});
Expression toValue(node);
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
index 56965d6..dd185fb 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
@@ -284,7 +284,7 @@
Expression _finish(
Expression body, ComplexAssignmentJudgment complexAssignment) {
- if (complexAssignment != null) {
+ if (!helper.disableTypeInference && complexAssignment != null) {
complexAssignment.desugared = body;
return complexAssignment;
} else {
@@ -578,6 +578,7 @@
..fileOffset = offset;
if (complexAssignment != null) {
body = makeLet(receiver, nullAwareGuard);
+ if (helper.disableTypeInference) return body;
shadow.PropertyAssignmentJudgment kernelPropertyAssign =
complexAssignment;
kernelPropertyAssign.nullAwareGuard = nullAwareGuard;