Files
sdk/pkg/front_end/testcases/patterns/pattern_assignment_final.dart.weak.expect
T
Paul Berry 0f11c4ed5a front_end: make use of TypeAnalyzer.analyzeConstantPattern.
This will allow the front end to take advantage of flow analysis
implied by a constant pattern (e.g. `case null` cause the scrutinee to
be promoted in later cases).

Fixes #51206.

Change-Id: Ic8516abb4e051ffca0d4e7698339282812020cae
Bug: https://github.com/dart-lang/sdk/issues/51206
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/281261
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
2023-02-09 18:41:01 +00:00

84 lines
5.7 KiB
Plaintext

library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/patterns/pattern_assignment_final.dart:31:4: Error: Can't assign to the final variable 'initializedFinal'.
// (initializedFinal, // Error
// ^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/patterns/pattern_assignment_final.dart:32:7: Error: Late final variable 'initializedLateFinal' definitely assigned.
// initializedLateFinal, // Error
// ^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/patterns/pattern_assignment_final.dart:35:5: Error: Final variable 'definitelyAssignedFinal' might already be assigned at this point.
// definitelyAssignedFinal] = y; // Error
// ^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/patterns/pattern_assignment_final.dart:36:17: Error: Late final variable 'definitelyAssignedLateFinal' definitely assigned.
// Class(field1: definitelyAssignedLateFinal, // Error
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/patterns/pattern_assignment_final.dart:37:17: Error: Final variable 'notDefinitelyAssignedFinal' might already be assigned at this point.
// field2: [[notDefinitelyAssignedFinal, _], // Error
// ^^^^^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
class Class extends core::Object {
field dynamic field1 = null;
field dynamic field2 = null;
synthetic constructor •() → self::Class
: super core::Object::•()
;
}
static method method(dynamic x, dynamic y, dynamic z) → dynamic {
final core::int initializedFinal = 5;
late final core::int initializedLateFinal = 5;
final dynamic definitelyUnassignedFinal;
late final core::int definitelyUnassignedLateFinal;
final dynamic definitelyAssignedFinal;
late final dynamic definitelyAssignedLateFinal;
final core::int notDefinitelyAssignedFinal;
late final core::int notDefinitelyAssignedLateFinal;
if(x =={core::Object::==}{(core::Object) → core::bool} 5) {
notDefinitelyAssignedFinal = 5;
notDefinitelyAssignedLateFinal = 15;
}
definitelyAssignedFinal = 10;
definitelyAssignedLateFinal = 20;
block {
final dynamic #0#0 = x;
if(!(#0#0 is{ForNonNullableByDefault} (core::Object?, core::Object?, core::Object?) && invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_final.dart:31:4: Error: Can't assign to the final variable 'initializedFinal'.
(initializedFinal, // Error
^^^^^^^^^^^^^^^^" && invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_final.dart:32:7: Error: Late final variable 'initializedLateFinal' definitely assigned.
initializedLateFinal, // Error
^^^^^^^^^^^^^^^^^^^^" && (let final dynamic #t1 = definitelyUnassignedFinal = #0#0{(core::Object?, core::Object?, core::Object?)}.$3{core::Object?} in true)))
throw new _in::ReachabilityError::•();
} =>#0#0;
block {
final dynamic #1#0 = y;
if(!(#1#0 is{ForNonNullableByDefault} core::List<dynamic> && #1#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t2 = definitelyUnassignedLateFinal = #1#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} as{ForNonNullableByDefault} core::int in true) && (let final dynamic #t3 = #1#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_final.dart:35:5: Error: Final variable 'definitelyAssignedFinal' might already be assigned at this point.
definitelyAssignedFinal] = y; // Error
^^^^^^^^^^^^^^^^^^^^^^^")))
throw new _in::ReachabilityError::•();
} =>#1#0;
block {
final dynamic #2#0 = z;
late final dynamic #2#3 = #2#0{self::Class}.{self::Class::field2}{dynamic};
late final dynamic #2#9 = #2#3{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
late final dynamic #2#16 = #2#3{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic};
if(!(#2#0 is{ForNonNullableByDefault} self::Class && (let final dynamic #t4 = #2#0{self::Class}.{self::Class::field1}{dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_final.dart:36:17: Error: Late final variable 'definitelyAssignedLateFinal' definitely assigned.
Class(field1: definitelyAssignedLateFinal, // Error
^^^^^^^^^^^^^^^^^^^^^^^^^^^") && (#2#3 is{ForNonNullableByDefault} core::List<dynamic> && #2#3{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#2#9 is{ForNonNullableByDefault} core::List<dynamic> && #2#9{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t5 = #2#9{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_final.dart:37:17: Error: Final variable 'notDefinitelyAssignedFinal' might already be assigned at this point.
field2: [[notDefinitelyAssignedFinal, _], // Error
^^^^^^^^^^^^^^^^^^^^^^^^^^") && (let final dynamic #t6 = #2#9{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16 is{ForNonNullableByDefault} core::List<dynamic> && #2#16{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t7 = #2#16{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in true) && (let final dynamic #t8 = notDefinitelyAssignedLateFinal = #2#16{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} as{ForNonNullableByDefault} core::int in true)))))
throw new _in::ReachabilityError::•();
} =>#2#0;
}
constants {
#C1 = 2
}