diff --git a/pkg/_fe_analyzer_shared/lib/src/exhaustiveness/shared.dart b/pkg/_fe_analyzer_shared/lib/src/exhaustiveness/shared.dart index d930b924ddd..ee8bb979ca6 100644 --- a/pkg/_fe_analyzer_shared/lib/src/exhaustiveness/shared.dart +++ b/pkg/_fe_analyzer_shared/lib/src/exhaustiveness/shared.dart @@ -39,6 +39,9 @@ abstract class TypeOperations { /// Returns `true` if [type] is the `Never` type. bool isNeverType(Type type); + /// Returns `true` if [type] is the `InvalidType` type. + bool isErrorType(Type type); + /// Returns `true` if [type] is the `Object?` type. bool isNullableObject(Type type); @@ -163,7 +166,9 @@ class ExhaustivenessCache< /// Returns the [StaticType] for [type]. StaticType getStaticType(Type type) { - if (typeOperations.isNeverType(type)) { + if (typeOperations.isErrorType(type)) { + return StaticType.errorType; + } else if (typeOperations.isNeverType(type)) { return StaticType.neverType; } else if (typeOperations.isNullType(type)) { return StaticType.nullType; diff --git a/pkg/_fe_analyzer_shared/lib/src/exhaustiveness/static_type.dart b/pkg/_fe_analyzer_shared/lib/src/exhaustiveness/static_type.dart index 432cd3868f5..1f060f0bcee 100644 --- a/pkg/_fe_analyzer_shared/lib/src/exhaustiveness/static_type.dart +++ b/pkg/_fe_analyzer_shared/lib/src/exhaustiveness/static_type.dart @@ -22,6 +22,9 @@ abstract class StaticType { /// Built-in `Never` type. static const StaticType neverType = const _NeverType(); + /// Built-in `Error` type. + static const StaticType errorType = const _ErrorType(); + /// The static types of the fields this type exposes for record destructuring. /// /// Includes inherited fields. @@ -274,6 +277,35 @@ class _NeverType extends _BaseStaticType with _ObjectFieldMixin { } } +class _ErrorType extends _BaseStaticType with _ObjectFieldMixin { + const _ErrorType(); + + @override + bool get isSealed => false; + + @override + bool isSubtypeOf(StaticType other) { + return false; + } + + @override + String get name => 'InvalidType'; + + @override + StaticType get nullable => this; + + @override + StaticType get nonNullable => this; + + @override + bool get isImplicitlyNullable => false; + + @override + void typeToDart(DartTemplateBuffer buffer) { + buffer.writeCoreType(name); + } +} + class _NullType extends NullableStaticType with _ObjectFieldMixin { const _NullType(super.underlying); diff --git a/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart b/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart index d277196a64e..eafa8266a5a 100644 --- a/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart +++ b/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart @@ -4489,6 +4489,11 @@ class _FlowAnalysisImpl /*type=Never*/ switch (never) { }; emptyUnresolved( Unresolved unresolved) => /*cfe.type=Never*/ /*analyzer. - checkingOrder={Object?,Object,Null}, - error=non-exhaustive:Object(), - subtypes={Object,Null}, - type=Object? + error=non-exhaustive:InvalidType(),type=InvalidType */ switch (unresolved) { @@ -77,10 +74,8 @@ emptyUnresolved( nonEmptyUnresolved( Unresolved unresolved) => /*cfe.type=Never*/ /*analyzer. - checkingOrder={Object?,Object,Null}, - subtypes={Object,Null}, - type=Object? + error=non-exhaustive:InvalidType(),type=InvalidType */ switch (unresolved) { - _ /*cfe.space=∅*/ /*analyzer.space=()*/ => 0, + _ /*cfe.space=∅*/ /*analyzer.space=InvalidType*/ => 0, }; diff --git a/pkg/_fe_analyzer_shared/test/exhaustiveness/data/generic_extension_members.dart b/pkg/_fe_analyzer_shared/test/exhaustiveness/data/generic_extension_members.dart index 87449a0596f..7b82100609c 100644 --- a/pkg/_fe_analyzer_shared/test/exhaustiveness/data/generic_extension_members.dart +++ b/pkg/_fe_analyzer_shared/test/exhaustiveness/data/generic_extension_members.dart @@ -39,25 +39,19 @@ exhaustiveTyped( A a) => /*cfe. fields={A.member:void Function(int),A.member:void Function(num)}, - type=Never + type=A */ /*analyzer. - checkingOrder={Object?,Object,Null}, - error=non-exhaustive:Object(), fields={A.member:void Function(int),A.member:void Function(num)}, - subtypes={Object,Null}, - type=Object? + type=A */ - switch (o) { + switch (a) { A( :void Function(int) member - ) /*cfe.space=Never(A.member: void Function(int) (void Function(int)))*/ /*analyzer.space=A(A.member: void Function(int) (void Function(int)))*/ => + ) /*space=A(A.member: void Function(int) (void Function(int)))*/ => 0, A( :void Function(num) member - ) /*cfe. - error=unreachable, - space=Never(A.member: void Function(num) (void Function(num))) - */ /*analyzer.space=A(A.member: void Function(num) (void Function(num)))*/ => + ) /*space=A(A.member: void Function(num) (void Function(num)))*/ => 1, }; @@ -65,24 +59,21 @@ unreachable( A a) => /*cfe. fields={A.member:void Function(int),A.member:void Function(num)}, - type=Never + type=A */ /*analyzer. - checkingOrder={Object?,Object,Null}, - error=non-exhaustive:Object(), fields={A.member:void Function(int),A.member:void Function(num)}, - subtypes={Object,Null}, - type=Object? + type=A */ - switch (o) { + switch (a) { A( :var member - ) /*cfe.space=Never(A.member: void Function(num) (void Function(num)))*/ /*analyzer.space=A(A.member: void Function(num) (void Function(num)))*/ => + ) /*space=A(A.member: void Function(num) (void Function(num)))*/ => 1, A( :var member ) /*cfe. error=unreachable, - space=Never(A.member: void Function(int) (void Function(int))) + space=A(A.member: void Function(int) (void Function(int))) */ /*analyzer. error=unreachable, space=A(A.member: void Function(int) (void Function(int))) @@ -95,24 +86,21 @@ nonExhaustiveRestricted( A a) => /*cfe. fields={A.member:void Function(int),A.member:void Function(num)}, - type=Never + type=A */ /*analyzer. - checkingOrder={Object?,Object,Null}, - error=non-exhaustive:Object(), fields={A.member:void Function(int),A.member:void Function(num)}, - subtypes={Object,Null}, - type=Object? + type=A */ - switch (o) { + switch (a) { A( :void Function(num) member - ) /*cfe.space=Never(A.member: void Function(num) (void Function(num)))*/ /*analyzer.space=A(A.member: void Function(num) (void Function(num)))*/ => + ) /*space=A(A.member: void Function(num) (void Function(num)))*/ => 1, A( :var member ) /*cfe. error=unreachable, - space=Never(A.member: void Function(int) (void Function(int))) + space=A(A.member: void Function(int) (void Function(int))) */ /*analyzer. error=unreachable, space=A(A.member: void Function(int) (void Function(int))) diff --git a/pkg/_fe_analyzer_shared/test/exhaustiveness/env.dart b/pkg/_fe_analyzer_shared/test/exhaustiveness/env.dart index ea82bff8ff9..b28b4e49703 100644 --- a/pkg/_fe_analyzer_shared/test/exhaustiveness/env.dart +++ b/pkg/_fe_analyzer_shared/test/exhaustiveness/env.dart @@ -3,8 +3,8 @@ // BSD-style license that can be found in the LICENSE file. import 'package:_fe_analyzer_shared/src/exhaustiveness/key.dart'; -import 'package:_fe_analyzer_shared/src/exhaustiveness/static_type.dart'; import 'package:_fe_analyzer_shared/src/exhaustiveness/shared.dart'; +import 'package:_fe_analyzer_shared/src/exhaustiveness/static_type.dart'; import 'package:_fe_analyzer_shared/src/exhaustiveness/types.dart'; class TestEnvironment implements ObjectPropertyLookup { @@ -136,11 +136,16 @@ class TestEnvironment implements ObjectPropertyLookup { class _Type { static const _InterfaceType Object = _InterfaceType(_Class.Object); static const _Type NullableObject = _NullableType(_Type.Object); + static const _Type Error = _ErrorType(); static const _InterfaceType Never = _InterfaceType(_Class.Never); static const _InterfaceType Bool = _InterfaceType(_Class.Bool); static const _Type Null = _NullableType(_Type.Never); } +class _ErrorType implements _Type { + const _ErrorType(); +} + class _Class { final String name; final bool isSealed; @@ -302,6 +307,11 @@ class _TypeOperations implements TypeOperations<_Type> { return type == _Type.Bool; } + @override + bool isErrorType(_Type type) { + return type == _Type.Error; + } + @override bool isNeverType(_Type type) { return type == _Type.Never; diff --git a/pkg/_fe_analyzer_shared/test/flow_analysis/flow_analysis_test.dart b/pkg/_fe_analyzer_shared/test/flow_analysis/flow_analysis_test.dart index 413722c56c8..8508dd88b08 100644 --- a/pkg/_fe_analyzer_shared/test/flow_analysis/flow_analysis_test.dart +++ b/pkg/_fe_analyzer_shared/test/flow_analysis/flow_analysis_test.dart @@ -8660,6 +8660,21 @@ main() { checkReachable(false), ]); }); + + test('error type does not make following cases unreachable', () { + // We don't know the correct type, so recover by expecting that the + // following cases still will be useful once the error is fixed. + h.run([ + switchExpr(expr('num'), [ + wildcard(type: 'error').thenExpr(block([ + checkReachable(true), + ]).thenExpr(intLiteral(0))), + wildcard().thenExpr(block([ + checkReachable(true), + ]).thenExpr(intLiteral(1))), + ]).stmt, + ]); + }); }); group('Switch statement:', () { @@ -8967,6 +8982,21 @@ main() { ]); }); + test('error type does not make following cases unreachable', () { + // We don't know the correct type, so recover by expecting that the + // following cases still will be useful once the error is fixed. + h.run([ + switch_(expr('num'), [ + wildcard(type: 'error').then([ + checkReachable(true), + ]), + wildcard().then([ + checkReachable(true), + ]), + ]), + ]); + }); + group('Joins promotions of scrutinee:', () { test('First case more promoted', () { var x = Var('x'); diff --git a/pkg/_fe_analyzer_shared/test/mini_ast.dart b/pkg/_fe_analyzer_shared/test/mini_ast.dart index aa0a26bf4ba..cfa4ff89bf7 100644 --- a/pkg/_fe_analyzer_shared/test/mini_ast.dart +++ b/pkg/_fe_analyzer_shared/test/mini_ast.dart @@ -902,6 +902,7 @@ class MiniAstOperations 'bool <: bool': Type('bool'), 'dynamic <: int': Type('dynamic'), 'error <: int': Type('error'), + 'error <: num': Type('error'), 'int <: dynamic': Type('int'), 'int <: num': Type('int'), 'int <: Object?': Type('int'), diff --git a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart index 9246a871543..403cba4d5e9 100644 --- a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart +++ b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart @@ -131,6 +131,10 @@ class ConstantVerifier extends RecursiveAstVisitor { super.visitConstantPattern(node); var expression = node.expression.unParenthesized; + if (expression.typeOrThrow is InvalidType) { + return; + } + DartObjectImpl? value = _validate( expression, CompileTimeErrorCode.CONSTANT_PATTERN_WITH_NON_CONSTANT_EXPRESSION, diff --git a/pkg/analyzer/lib/src/generated/exhaustiveness.dart b/pkg/analyzer/lib/src/generated/exhaustiveness.dart index 497d2fe55c6..ae013bd647c 100644 --- a/pkg/analyzer/lib/src/generated/exhaustiveness.dart +++ b/pkg/analyzer/lib/src/generated/exhaustiveness.dart @@ -323,7 +323,12 @@ class AnalyzerTypeOperations implements TypeOperations { @override bool isDynamic(DartType type) { - return type is DynamicType || type is InvalidType; + return type is DynamicType; + } + + @override + bool isErrorType(DartType type) { + return type is InvalidType; } @override diff --git a/pkg/analyzer/test/src/dart/resolution/if_statement_test.dart b/pkg/analyzer/test/src/dart/resolution/if_statement_test.dart index f596e32d94c..34783ebf003 100644 --- a/pkg/analyzer/test/src/dart/resolution/if_statement_test.dart +++ b/pkg/analyzer/test/src/dart/resolution/if_statement_test.dart @@ -958,8 +958,6 @@ void f(Object? x) { } ''', [ error(CompileTimeErrorCode.MISSING_VARIABLE_PATTERN, 56, 1), - error(CompileTimeErrorCode.CONSTANT_PATTERN_WITH_NON_CONSTANT_EXPRESSION, - 56, 1), error(CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION, 56, 1), ]); diff --git a/pkg/analyzer/test/src/diagnostics/constant_pattern_with_non_constant_expression_test.dart b/pkg/analyzer/test/src/diagnostics/constant_pattern_with_non_constant_expression_test.dart index b5d1275f11c..1dd8b508527 100644 --- a/pkg/analyzer/test/src/diagnostics/constant_pattern_with_non_constant_expression_test.dart +++ b/pkg/analyzer/test/src/diagnostics/constant_pattern_with_non_constant_expression_test.dart @@ -567,4 +567,25 @@ void f(x) { 28, 1), ]); } + + test_unresolvedIdentifier() async { + await assertErrorsInCode(r''' +void f(Object? x) { + if (x case foo) {} +} +''', [ + error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 33, 3), + ]); + + final node = findNode.singleGuardedPattern; + assertResolvedNodeText(node, r''' +GuardedPattern + pattern: ConstantPattern + expression: SimpleIdentifier + token: foo + staticElement: + staticType: InvalidType + matchedValueType: Object? +'''); + } } diff --git a/pkg/analyzer/test/src/diagnostics/unreachable_switch_case_test.dart b/pkg/analyzer/test/src/diagnostics/unreachable_switch_case_test.dart index 23442c0d8ab..657bad719cb 100644 --- a/pkg/analyzer/test/src/diagnostics/unreachable_switch_case_test.dart +++ b/pkg/analyzer/test/src/diagnostics/unreachable_switch_case_test.dart @@ -58,8 +58,6 @@ int f(Object? x) { } ''', [ error(CompileTimeErrorCode.UNDEFINED_CLASS, 45, 10), - error(WarningCode.DEAD_CODE, 68, 7), - error(WarningCode.UNREACHABLE_SWITCH_CASE, 70, 2), ]); } } @@ -82,6 +80,40 @@ void f(bool x) { ]); } + test_const_unresolvedIdentifier_const() async { + await assertErrorsInCode(r''' +void f(Object? x) { + switch (x) { + case 0: + break; + case unresolved: + break; + case 2: + break; + }; +} +''', [ + error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 69, 10), + ]); + } + + test_const_unresolvedObject_const() async { + await assertErrorsInCode(r''' +void f(Object? x) { + switch (x) { + case 0: + break; + case Unresolved(): + break; + case 2: + break; + }; +} +''', [ + error(CompileTimeErrorCode.UNDEFINED_CLASS, 69, 10), + ]); + } + test_typeCheck_exact() async { await assertErrorsInCode(r''' void f(int x) { diff --git a/pkg/front_end/lib/src/fasta/kernel/exhaustiveness.dart b/pkg/front_end/lib/src/fasta/kernel/exhaustiveness.dart index f02d89742d5..c752d4bf389 100644 --- a/pkg/front_end/lib/src/fasta/kernel/exhaustiveness.dart +++ b/pkg/front_end/lib/src/fasta/kernel/exhaustiveness.dart @@ -52,6 +52,11 @@ class CfeTypeOperations implements TypeOperations { ClassHierarchy get _classHierarchy => _typeEnvironment.hierarchy; + @override + bool isErrorType(DartType type) { + return type is InvalidType; + } + @override DartType getNonNullable(DartType type) { return type.toNonNull(); diff --git a/pkg/front_end/testcases/patterns/non_type_object_pattern.dart.strong.expect b/pkg/front_end/testcases/patterns/non_type_object_pattern.dart.strong.expect index dcfa528eba2..e9f23c693e1 100644 --- a/pkg/front_end/testcases/patterns/non_type_object_pattern.dart.strong.expect +++ b/pkg/front_end/testcases/patterns/non_type_object_pattern.dart.strong.expect @@ -260,10 +260,10 @@ static method testUnresolved(dynamic o) → dynamic { } #L1: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t4 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t4 = field = #3#0{invalid-type}{}.field in true)) { { break #L1; } @@ -272,12 +272,12 @@ static method testUnresolved(dynamic o) → dynamic { } o = block { core::String #t5; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L2: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t6 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t6 = field = #4#0{invalid-type}{}.field in true)) { #t5 = "matched"; break #L2; } @@ -315,10 +315,10 @@ static method testNonType(dynamic o) → dynamic { } #L3: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t10 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t10 = field = #3#0{invalid-type}{}.field in true)) { { break #L3; } @@ -327,12 +327,12 @@ static method testNonType(dynamic o) → dynamic { } o = block { core::String #t11; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L4: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t12 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t12 = field = #4#0{invalid-type}{}.field in true)) { #t11 = "matched"; break #L4; } @@ -370,10 +370,10 @@ static method testExtension(dynamic o) → dynamic { } #L5: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t16 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t16 = field = #3#0{invalid-type}{}.field in true)) { { break #L5; } @@ -382,12 +382,12 @@ static method testExtension(dynamic o) → dynamic { } o = block { core::String #t17; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L6: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t18 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t18 = field = #4#0{invalid-type}{}.field in true)) { #t17 = "matched"; break #L6; } @@ -425,10 +425,10 @@ static method testPrefixedUnresolved(dynamic o) → dynamic { } #L7: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t22 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t22 = field = #3#0{invalid-type}{}.field in true)) { { break #L7; } @@ -437,12 +437,12 @@ static method testPrefixedUnresolved(dynamic o) → dynamic { } o = block { core::String #t23; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L8: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t24 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t24 = field = #4#0{invalid-type}{}.field in true)) { #t23 = "matched"; break #L8; } @@ -480,10 +480,10 @@ static method testPrefixedNonType(dynamic o) → dynamic { } #L9: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t28 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t28 = field = #3#0{invalid-type}{}.field in true)) { { break #L9; } @@ -492,12 +492,12 @@ static method testPrefixedNonType(dynamic o) → dynamic { } o = block { core::String #t29; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L10: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t30 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t30 = field = #4#0{invalid-type}{}.field in true)) { #t29 = "matched"; break #L10; } @@ -535,10 +535,10 @@ static method testPrefixedExtension(dynamic o) → dynamic { } #L11: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t34 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t34 = field = #3#0{invalid-type}{}.field in true)) { { break #L11; } @@ -547,12 +547,12 @@ static method testPrefixedExtension(dynamic o) → dynamic { } o = block { core::String #t35; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L12: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t36 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t36 = field = #4#0{invalid-type}{}.field in true)) { #t35 = "matched"; break #L12; } @@ -590,10 +590,10 @@ static method testUnresolvedPrefix(dynamic o) → dynamic { } #L13: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t40 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t40 = field = #3#0{invalid-type}{}.field in true)) { { break #L13; } @@ -602,12 +602,12 @@ static method testUnresolvedPrefix(dynamic o) → dynamic { } o = block { core::String #t41; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L14: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t42 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t42 = field = #4#0{invalid-type}{}.field in true)) { #t41 = "matched"; break #L14; } @@ -645,10 +645,10 @@ static method testMemberAccess(dynamic o) → dynamic { } #L15: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t46 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t46 = field = #3#0{invalid-type}{}.field in true)) { { break #L15; } @@ -657,12 +657,12 @@ static method testMemberAccess(dynamic o) → dynamic { } o = block { core::String #t47; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L16: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t48 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t48 = field = #4#0{invalid-type}{}.field in true)) { #t47 = "matched"; break #L16; } diff --git a/pkg/front_end/testcases/patterns/non_type_object_pattern.dart.strong.transformed.expect b/pkg/front_end/testcases/patterns/non_type_object_pattern.dart.strong.transformed.expect index 979d22eaf3d..f082a81c478 100644 --- a/pkg/front_end/testcases/patterns/non_type_object_pattern.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/patterns/non_type_object_pattern.dart.strong.transformed.expect @@ -262,10 +262,10 @@ static method testUnresolved(dynamic o) → dynamic { } #L1: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t4 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t4 = field = #3#0{invalid-type}{}.field in true)) { { break #L1; } @@ -274,12 +274,12 @@ static method testUnresolved(dynamic o) → dynamic { } o = block { core::String #t5; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L2: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t6 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t6 = field = #4#0{invalid-type}{}.field in true)) { #t5 = "matched"; break #L2; } @@ -319,10 +319,10 @@ static method testNonType(dynamic o) → dynamic { } #L3: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t10 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t10 = field = #3#0{invalid-type}{}.field in true)) { { break #L3; } @@ -331,12 +331,12 @@ static method testNonType(dynamic o) → dynamic { } o = block { core::String #t11; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L4: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t12 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t12 = field = #4#0{invalid-type}{}.field in true)) { #t11 = "matched"; break #L4; } @@ -376,10 +376,10 @@ static method testExtension(dynamic o) → dynamic { } #L5: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t16 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t16 = field = #3#0{invalid-type}{}.field in true)) { { break #L5; } @@ -388,12 +388,12 @@ static method testExtension(dynamic o) → dynamic { } o = block { core::String #t17; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L6: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t18 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t18 = field = #4#0{invalid-type}{}.field in true)) { #t17 = "matched"; break #L6; } @@ -433,10 +433,10 @@ static method testPrefixedUnresolved(dynamic o) → dynamic { } #L7: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t22 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t22 = field = #3#0{invalid-type}{}.field in true)) { { break #L7; } @@ -445,12 +445,12 @@ static method testPrefixedUnresolved(dynamic o) → dynamic { } o = block { core::String #t23; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L8: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t24 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t24 = field = #4#0{invalid-type}{}.field in true)) { #t23 = "matched"; break #L8; } @@ -490,10 +490,10 @@ static method testPrefixedNonType(dynamic o) → dynamic { } #L9: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t28 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t28 = field = #3#0{invalid-type}{}.field in true)) { { break #L9; } @@ -502,12 +502,12 @@ static method testPrefixedNonType(dynamic o) → dynamic { } o = block { core::String #t29; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L10: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t30 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t30 = field = #4#0{invalid-type}{}.field in true)) { #t29 = "matched"; break #L10; } @@ -547,10 +547,10 @@ static method testPrefixedExtension(dynamic o) → dynamic { } #L11: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t34 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t34 = field = #3#0{invalid-type}{}.field in true)) { { break #L11; } @@ -559,12 +559,12 @@ static method testPrefixedExtension(dynamic o) → dynamic { } o = block { core::String #t35; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L12: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t36 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t36 = field = #4#0{invalid-type}{}.field in true)) { #t35 = "matched"; break #L12; } @@ -604,10 +604,10 @@ static method testUnresolvedPrefix(dynamic o) → dynamic { } #L13: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t40 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t40 = field = #3#0{invalid-type}{}.field in true)) { { break #L13; } @@ -616,12 +616,12 @@ static method testUnresolvedPrefix(dynamic o) → dynamic { } o = block { core::String #t41; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L14: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t42 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t42 = field = #4#0{invalid-type}{}.field in true)) { #t41 = "matched"; break #L14; } @@ -661,10 +661,10 @@ static method testMemberAccess(dynamic o) → dynamic { } #L15: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t46 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t46 = field = #3#0{invalid-type}{}.field in true)) { { break #L15; } @@ -673,12 +673,12 @@ static method testMemberAccess(dynamic o) → dynamic { } o = block { core::String #t47; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L16: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t48 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t48 = field = #4#0{invalid-type}{}.field in true)) { #t47 = "matched"; break #L16; } diff --git a/pkg/front_end/testcases/patterns/non_type_object_pattern.dart.weak.expect b/pkg/front_end/testcases/patterns/non_type_object_pattern.dart.weak.expect index 8392a2366e0..b279ea26bdf 100644 --- a/pkg/front_end/testcases/patterns/non_type_object_pattern.dart.weak.expect +++ b/pkg/front_end/testcases/patterns/non_type_object_pattern.dart.weak.expect @@ -261,10 +261,10 @@ static method testUnresolved(dynamic o) → dynamic { } #L1: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t4 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t4 = field = #3#0{invalid-type}{}.field in true)) { { break #L1; } @@ -273,12 +273,12 @@ static method testUnresolved(dynamic o) → dynamic { } o = block { core::String #t5; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L2: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t6 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t6 = field = #4#0{invalid-type}{}.field in true)) { #t5 = "matched"; break #L2; } @@ -317,10 +317,10 @@ static method testNonType(dynamic o) → dynamic { } #L3: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t10 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t10 = field = #3#0{invalid-type}{}.field in true)) { { break #L3; } @@ -329,12 +329,12 @@ static method testNonType(dynamic o) → dynamic { } o = block { core::String #t11; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L4: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t12 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t12 = field = #4#0{invalid-type}{}.field in true)) { #t11 = "matched"; break #L4; } @@ -373,10 +373,10 @@ static method testExtension(dynamic o) → dynamic { } #L5: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t16 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t16 = field = #3#0{invalid-type}{}.field in true)) { { break #L5; } @@ -385,12 +385,12 @@ static method testExtension(dynamic o) → dynamic { } o = block { core::String #t17; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L6: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t18 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t18 = field = #4#0{invalid-type}{}.field in true)) { #t17 = "matched"; break #L6; } @@ -429,10 +429,10 @@ static method testPrefixedUnresolved(dynamic o) → dynamic { } #L7: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t22 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t22 = field = #3#0{invalid-type}{}.field in true)) { { break #L7; } @@ -441,12 +441,12 @@ static method testPrefixedUnresolved(dynamic o) → dynamic { } o = block { core::String #t23; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L8: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t24 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t24 = field = #4#0{invalid-type}{}.field in true)) { #t23 = "matched"; break #L8; } @@ -485,10 +485,10 @@ static method testPrefixedNonType(dynamic o) → dynamic { } #L9: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t28 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t28 = field = #3#0{invalid-type}{}.field in true)) { { break #L9; } @@ -497,12 +497,12 @@ static method testPrefixedNonType(dynamic o) → dynamic { } o = block { core::String #t29; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L10: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t30 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t30 = field = #4#0{invalid-type}{}.field in true)) { #t29 = "matched"; break #L10; } @@ -541,10 +541,10 @@ static method testPrefixedExtension(dynamic o) → dynamic { } #L11: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t34 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t34 = field = #3#0{invalid-type}{}.field in true)) { { break #L11; } @@ -553,12 +553,12 @@ static method testPrefixedExtension(dynamic o) → dynamic { } o = block { core::String #t35; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L12: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t36 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t36 = field = #4#0{invalid-type}{}.field in true)) { #t35 = "matched"; break #L12; } @@ -597,10 +597,10 @@ static method testUnresolvedPrefix(dynamic o) → dynamic { } #L13: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t40 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t40 = field = #3#0{invalid-type}{}.field in true)) { { break #L13; } @@ -609,12 +609,12 @@ static method testUnresolvedPrefix(dynamic o) → dynamic { } o = block { core::String #t41; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L14: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t42 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t42 = field = #4#0{invalid-type}{}.field in true)) { #t41 = "matched"; break #L14; } @@ -653,10 +653,10 @@ static method testMemberAccess(dynamic o) → dynamic { } #L15: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t46 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t46 = field = #3#0{invalid-type}{}.field in true)) { { break #L15; } @@ -665,12 +665,12 @@ static method testMemberAccess(dynamic o) → dynamic { } o = block { core::String #t47; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L16: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t48 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t48 = field = #4#0{invalid-type}{}.field in true)) { #t47 = "matched"; break #L16; } diff --git a/pkg/front_end/testcases/patterns/non_type_object_pattern.dart.weak.modular.expect b/pkg/front_end/testcases/patterns/non_type_object_pattern.dart.weak.modular.expect index 8392a2366e0..b279ea26bdf 100644 --- a/pkg/front_end/testcases/patterns/non_type_object_pattern.dart.weak.modular.expect +++ b/pkg/front_end/testcases/patterns/non_type_object_pattern.dart.weak.modular.expect @@ -261,10 +261,10 @@ static method testUnresolved(dynamic o) → dynamic { } #L1: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t4 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t4 = field = #3#0{invalid-type}{}.field in true)) { { break #L1; } @@ -273,12 +273,12 @@ static method testUnresolved(dynamic o) → dynamic { } o = block { core::String #t5; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L2: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t6 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t6 = field = #4#0{invalid-type}{}.field in true)) { #t5 = "matched"; break #L2; } @@ -317,10 +317,10 @@ static method testNonType(dynamic o) → dynamic { } #L3: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t10 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t10 = field = #3#0{invalid-type}{}.field in true)) { { break #L3; } @@ -329,12 +329,12 @@ static method testNonType(dynamic o) → dynamic { } o = block { core::String #t11; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L4: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t12 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t12 = field = #4#0{invalid-type}{}.field in true)) { #t11 = "matched"; break #L4; } @@ -373,10 +373,10 @@ static method testExtension(dynamic o) → dynamic { } #L5: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t16 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t16 = field = #3#0{invalid-type}{}.field in true)) { { break #L5; } @@ -385,12 +385,12 @@ static method testExtension(dynamic o) → dynamic { } o = block { core::String #t17; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L6: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t18 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t18 = field = #4#0{invalid-type}{}.field in true)) { #t17 = "matched"; break #L6; } @@ -429,10 +429,10 @@ static method testPrefixedUnresolved(dynamic o) → dynamic { } #L7: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t22 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t22 = field = #3#0{invalid-type}{}.field in true)) { { break #L7; } @@ -441,12 +441,12 @@ static method testPrefixedUnresolved(dynamic o) → dynamic { } o = block { core::String #t23; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L8: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t24 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t24 = field = #4#0{invalid-type}{}.field in true)) { #t23 = "matched"; break #L8; } @@ -485,10 +485,10 @@ static method testPrefixedNonType(dynamic o) → dynamic { } #L9: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t28 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t28 = field = #3#0{invalid-type}{}.field in true)) { { break #L9; } @@ -497,12 +497,12 @@ static method testPrefixedNonType(dynamic o) → dynamic { } o = block { core::String #t29; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L10: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t30 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t30 = field = #4#0{invalid-type}{}.field in true)) { #t29 = "matched"; break #L10; } @@ -541,10 +541,10 @@ static method testPrefixedExtension(dynamic o) → dynamic { } #L11: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t34 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t34 = field = #3#0{invalid-type}{}.field in true)) { { break #L11; } @@ -553,12 +553,12 @@ static method testPrefixedExtension(dynamic o) → dynamic { } o = block { core::String #t35; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L12: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t36 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t36 = field = #4#0{invalid-type}{}.field in true)) { #t35 = "matched"; break #L12; } @@ -597,10 +597,10 @@ static method testUnresolvedPrefix(dynamic o) → dynamic { } #L13: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t40 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t40 = field = #3#0{invalid-type}{}.field in true)) { { break #L13; } @@ -609,12 +609,12 @@ static method testUnresolvedPrefix(dynamic o) → dynamic { } o = block { core::String #t41; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L14: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t42 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t42 = field = #4#0{invalid-type}{}.field in true)) { #t41 = "matched"; break #L14; } @@ -653,10 +653,10 @@ static method testMemberAccess(dynamic o) → dynamic { } #L15: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t46 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t46 = field = #3#0{invalid-type}{}.field in true)) { { break #L15; } @@ -665,12 +665,12 @@ static method testMemberAccess(dynamic o) → dynamic { } o = block { core::String #t47; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L16: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t48 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final dynamic #t48 = field = #4#0{invalid-type}{}.field in true)) { #t47 = "matched"; break #L16; } diff --git a/pkg/front_end/testcases/patterns/non_type_object_pattern.dart.weak.transformed.expect b/pkg/front_end/testcases/patterns/non_type_object_pattern.dart.weak.transformed.expect index 8bcef553f4a..f17b6732780 100644 --- a/pkg/front_end/testcases/patterns/non_type_object_pattern.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/patterns/non_type_object_pattern.dart.weak.transformed.expect @@ -263,10 +263,10 @@ static method testUnresolved(dynamic o) → dynamic { } #L1: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t4 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t4 = field = #3#0{invalid-type}{}.field in true)) { { break #L1; } @@ -275,12 +275,12 @@ static method testUnresolved(dynamic o) → dynamic { } o = block { core::String #t5; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L2: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t6 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t6 = field = #4#0{invalid-type}{}.field in true)) { #t5 = "matched"; break #L2; } @@ -321,10 +321,10 @@ static method testNonType(dynamic o) → dynamic { } #L3: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t10 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t10 = field = #3#0{invalid-type}{}.field in true)) { { break #L3; } @@ -333,12 +333,12 @@ static method testNonType(dynamic o) → dynamic { } o = block { core::String #t11; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L4: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t12 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t12 = field = #4#0{invalid-type}{}.field in true)) { #t11 = "matched"; break #L4; } @@ -379,10 +379,10 @@ static method testExtension(dynamic o) → dynamic { } #L5: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t16 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t16 = field = #3#0{invalid-type}{}.field in true)) { { break #L5; } @@ -391,12 +391,12 @@ static method testExtension(dynamic o) → dynamic { } o = block { core::String #t17; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L6: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t18 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t18 = field = #4#0{invalid-type}{}.field in true)) { #t17 = "matched"; break #L6; } @@ -437,10 +437,10 @@ static method testPrefixedUnresolved(dynamic o) → dynamic { } #L7: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t22 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t22 = field = #3#0{invalid-type}{}.field in true)) { { break #L7; } @@ -449,12 +449,12 @@ static method testPrefixedUnresolved(dynamic o) → dynamic { } o = block { core::String #t23; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L8: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t24 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t24 = field = #4#0{invalid-type}{}.field in true)) { #t23 = "matched"; break #L8; } @@ -495,10 +495,10 @@ static method testPrefixedNonType(dynamic o) → dynamic { } #L9: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t28 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t28 = field = #3#0{invalid-type}{}.field in true)) { { break #L9; } @@ -507,12 +507,12 @@ static method testPrefixedNonType(dynamic o) → dynamic { } o = block { core::String #t29; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L10: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t30 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t30 = field = #4#0{invalid-type}{}.field in true)) { #t29 = "matched"; break #L10; } @@ -553,10 +553,10 @@ static method testPrefixedExtension(dynamic o) → dynamic { } #L11: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t34 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t34 = field = #3#0{invalid-type}{}.field in true)) { { break #L11; } @@ -565,12 +565,12 @@ static method testPrefixedExtension(dynamic o) → dynamic { } o = block { core::String #t35; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L12: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t36 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t36 = field = #4#0{invalid-type}{}.field in true)) { #t35 = "matched"; break #L12; } @@ -611,10 +611,10 @@ static method testUnresolvedPrefix(dynamic o) → dynamic { } #L13: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t40 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t40 = field = #3#0{invalid-type}{}.field in true)) { { break #L13; } @@ -623,12 +623,12 @@ static method testUnresolvedPrefix(dynamic o) → dynamic { } o = block { core::String #t41; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L14: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t42 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t42 = field = #4#0{invalid-type}{}.field in true)) { #t41 = "matched"; break #L14; } @@ -669,10 +669,10 @@ static method testMemberAccess(dynamic o) → dynamic { } #L15: { - final synthesized invalid-type #3#0 = o{invalid-type}; + final synthesized dynamic #3#0 = o; { hoisted invalid-type field; - if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t46 = field = #3#0{}.field in true)) { + if(#3#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t46 = field = #3#0{invalid-type}{}.field in true)) { { break #L15; } @@ -681,12 +681,12 @@ static method testMemberAccess(dynamic o) → dynamic { } o = block { core::String #t47; - final synthesized invalid-type #4#0 = o{invalid-type}; + final synthesized dynamic #4#0 = o; #L16: { { hoisted invalid-type field; - if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t48 = field = #4#0{}.field in true)) { + if(#4#0 is{ForNonNullableByDefault} invalid-type && (let final invalid-type #t48 = field = #4#0{invalid-type}{}.field in true)) { #t47 = "matched"; break #L16; } diff --git a/pkg/front_end/testcases/patterns/object_pattern_errors.dart.strong.expect b/pkg/front_end/testcases/patterns/object_pattern_errors.dart.strong.expect index 8badb40db1a..19a315ed1f0 100644 --- a/pkg/front_end/testcases/patterns/object_pattern_errors.dart.strong.expect +++ b/pkg/front_end/testcases/patterns/object_pattern_errors.dart.strong.expect @@ -41,33 +41,33 @@ static method test(dynamic x) → dynamic { } } { - final synthesized invalid-type #1#0 = x{invalid-type}; + final synthesized dynamic #1#0 = x; if(#1#0 is{ForNonNullableByDefault} self::A) { } } { - final synthesized self::A #2#0 = x{self::A}; - if(true) { + final synthesized dynamic #2#0 = x; + if(#2#0 is{ForNonNullableByDefault} self::A) { } } { - final synthesized self::A #3#0 = x{self::A}; - if(true) { + final synthesized dynamic #3#0 = x; + if(#3#0 is{ForNonNullableByDefault} invalid-type) { } } { - final synthesized invalid-type #4#0 = x{invalid-type}; + final synthesized dynamic #4#0 = x; if(#4#0 is{ForNonNullableByDefault} self::A) { } } { - final synthesized self::A #5#0 = x{self::A}; - if(true) { + final synthesized dynamic #5#0 = x; + if(#5#0 is{ForNonNullableByDefault} self::A) { } } { - final synthesized self::A #6#0 = x{self::A}; - if(true) { + final synthesized dynamic #6#0 = x; + if(#6#0 is{ForNonNullableByDefault} self::A) { } } } diff --git a/pkg/front_end/testcases/patterns/object_pattern_errors.dart.strong.transformed.expect b/pkg/front_end/testcases/patterns/object_pattern_errors.dart.strong.transformed.expect index 8badb40db1a..19a315ed1f0 100644 --- a/pkg/front_end/testcases/patterns/object_pattern_errors.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/patterns/object_pattern_errors.dart.strong.transformed.expect @@ -41,33 +41,33 @@ static method test(dynamic x) → dynamic { } } { - final synthesized invalid-type #1#0 = x{invalid-type}; + final synthesized dynamic #1#0 = x; if(#1#0 is{ForNonNullableByDefault} self::A) { } } { - final synthesized self::A #2#0 = x{self::A}; - if(true) { + final synthesized dynamic #2#0 = x; + if(#2#0 is{ForNonNullableByDefault} self::A) { } } { - final synthesized self::A #3#0 = x{self::A}; - if(true) { + final synthesized dynamic #3#0 = x; + if(#3#0 is{ForNonNullableByDefault} invalid-type) { } } { - final synthesized invalid-type #4#0 = x{invalid-type}; + final synthesized dynamic #4#0 = x; if(#4#0 is{ForNonNullableByDefault} self::A) { } } { - final synthesized self::A #5#0 = x{self::A}; - if(true) { + final synthesized dynamic #5#0 = x; + if(#5#0 is{ForNonNullableByDefault} self::A) { } } { - final synthesized self::A #6#0 = x{self::A}; - if(true) { + final synthesized dynamic #6#0 = x; + if(#6#0 is{ForNonNullableByDefault} self::A) { } } } diff --git a/pkg/front_end/testcases/patterns/object_pattern_errors.dart.weak.expect b/pkg/front_end/testcases/patterns/object_pattern_errors.dart.weak.expect index 8badb40db1a..19a315ed1f0 100644 --- a/pkg/front_end/testcases/patterns/object_pattern_errors.dart.weak.expect +++ b/pkg/front_end/testcases/patterns/object_pattern_errors.dart.weak.expect @@ -41,33 +41,33 @@ static method test(dynamic x) → dynamic { } } { - final synthesized invalid-type #1#0 = x{invalid-type}; + final synthesized dynamic #1#0 = x; if(#1#0 is{ForNonNullableByDefault} self::A) { } } { - final synthesized self::A #2#0 = x{self::A}; - if(true) { + final synthesized dynamic #2#0 = x; + if(#2#0 is{ForNonNullableByDefault} self::A) { } } { - final synthesized self::A #3#0 = x{self::A}; - if(true) { + final synthesized dynamic #3#0 = x; + if(#3#0 is{ForNonNullableByDefault} invalid-type) { } } { - final synthesized invalid-type #4#0 = x{invalid-type}; + final synthesized dynamic #4#0 = x; if(#4#0 is{ForNonNullableByDefault} self::A) { } } { - final synthesized self::A #5#0 = x{self::A}; - if(true) { + final synthesized dynamic #5#0 = x; + if(#5#0 is{ForNonNullableByDefault} self::A) { } } { - final synthesized self::A #6#0 = x{self::A}; - if(true) { + final synthesized dynamic #6#0 = x; + if(#6#0 is{ForNonNullableByDefault} self::A) { } } } diff --git a/pkg/front_end/testcases/patterns/object_pattern_errors.dart.weak.modular.expect b/pkg/front_end/testcases/patterns/object_pattern_errors.dart.weak.modular.expect index 8badb40db1a..19a315ed1f0 100644 --- a/pkg/front_end/testcases/patterns/object_pattern_errors.dart.weak.modular.expect +++ b/pkg/front_end/testcases/patterns/object_pattern_errors.dart.weak.modular.expect @@ -41,33 +41,33 @@ static method test(dynamic x) → dynamic { } } { - final synthesized invalid-type #1#0 = x{invalid-type}; + final synthesized dynamic #1#0 = x; if(#1#0 is{ForNonNullableByDefault} self::A) { } } { - final synthesized self::A #2#0 = x{self::A}; - if(true) { + final synthesized dynamic #2#0 = x; + if(#2#0 is{ForNonNullableByDefault} self::A) { } } { - final synthesized self::A #3#0 = x{self::A}; - if(true) { + final synthesized dynamic #3#0 = x; + if(#3#0 is{ForNonNullableByDefault} invalid-type) { } } { - final synthesized invalid-type #4#0 = x{invalid-type}; + final synthesized dynamic #4#0 = x; if(#4#0 is{ForNonNullableByDefault} self::A) { } } { - final synthesized self::A #5#0 = x{self::A}; - if(true) { + final synthesized dynamic #5#0 = x; + if(#5#0 is{ForNonNullableByDefault} self::A) { } } { - final synthesized self::A #6#0 = x{self::A}; - if(true) { + final synthesized dynamic #6#0 = x; + if(#6#0 is{ForNonNullableByDefault} self::A) { } } } diff --git a/pkg/front_end/testcases/patterns/object_pattern_errors.dart.weak.transformed.expect b/pkg/front_end/testcases/patterns/object_pattern_errors.dart.weak.transformed.expect index 8badb40db1a..19a315ed1f0 100644 --- a/pkg/front_end/testcases/patterns/object_pattern_errors.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/patterns/object_pattern_errors.dart.weak.transformed.expect @@ -41,33 +41,33 @@ static method test(dynamic x) → dynamic { } } { - final synthesized invalid-type #1#0 = x{invalid-type}; + final synthesized dynamic #1#0 = x; if(#1#0 is{ForNonNullableByDefault} self::A) { } } { - final synthesized self::A #2#0 = x{self::A}; - if(true) { + final synthesized dynamic #2#0 = x; + if(#2#0 is{ForNonNullableByDefault} self::A) { } } { - final synthesized self::A #3#0 = x{self::A}; - if(true) { + final synthesized dynamic #3#0 = x; + if(#3#0 is{ForNonNullableByDefault} invalid-type) { } } { - final synthesized invalid-type #4#0 = x{invalid-type}; + final synthesized dynamic #4#0 = x; if(#4#0 is{ForNonNullableByDefault} self::A) { } } { - final synthesized self::A #5#0 = x{self::A}; - if(true) { + final synthesized dynamic #5#0 = x; + if(#5#0 is{ForNonNullableByDefault} self::A) { } } { - final synthesized self::A #6#0 = x{self::A}; - if(true) { + final synthesized dynamic #6#0 = x; + if(#6#0 is{ForNonNullableByDefault} self::A) { } } } diff --git a/tests/language/patterns/invalid_const_pattern_test.dart b/tests/language/patterns/invalid_const_pattern_test.dart index 206f0f700b0..a2cd9c13dfc 100644 --- a/tests/language/patterns/invalid_const_pattern_test.dart +++ b/tests/language/patterns/invalid_const_pattern_test.dart @@ -47,7 +47,6 @@ class Class { // ^^^^^ // [analyzer] COMPILE_TIME_ERROR.INVOCATION_OF_NON_FUNCTION_EXPRESSION // ^^^^^^^ - // [analyzer] COMPILE_TIME_ERROR.CONSTANT_PATTERN_WITH_NON_CONSTANT_EXPRESSION // [cfe] Method invocation is not a constant expression. }