2528bf8666
This flag is set when a variable declaration is moved earlier in order to be available for subsequent code that couldn't contain its declaration. For instance variables declared in patterns which needs to be declared before the matching expressions that initialize them. TEST=existing expectations tests Change-Id: I80ab1138f08f725f3e01905c1a57a1483f809328 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/291820 Commit-Queue: Johnni Winther <johnniwinther@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com> Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
92 lines
5.4 KiB
Plaintext
92 lines
5.4 KiB
Plaintext
library /*isNonNullableByDefault*/;
|
|
//
|
|
// Problems in library:
|
|
//
|
|
// pkg/front_end/testcases/patterns/variable_names.dart:24:23: Error: The getter name is not specified explicitly, and the pattern is not a variable. Try specifying the getter name explicitly, or using a variable pattern.
|
|
// } else if (x case A(: [1, 2])) { // Error
|
|
// ^
|
|
//
|
|
// pkg/front_end/testcases/patterns/variable_names.dart:26:22: Error: The getter name is not specified explicitly, and the pattern is not a variable. Try specifying the getter name explicitly, or using a variable pattern.
|
|
// } else if (x case (: [1, 2])) { // Error
|
|
// ^
|
|
//
|
|
import self as self;
|
|
import "dart:core" as core;
|
|
|
|
abstract class A extends core::Object {
|
|
synthetic constructor •() → self::A
|
|
: super core::Object::•()
|
|
;
|
|
abstract get foo() → core::int?;
|
|
abstract get bar() → core::int;
|
|
abstract get baz() → core::int?;
|
|
abstract get boz() → core::num;
|
|
abstract get qux() → core::bool;
|
|
abstract get quux() → core::String;
|
|
abstract get foobar() → core::int;
|
|
}
|
|
static method test(dynamic x, dynamic y, dynamic z) → dynamic {
|
|
dynamic qux;
|
|
dynamic quux;
|
|
{
|
|
hoisted core::int foo;
|
|
hoisted core::int bar;
|
|
hoisted core::int baz;
|
|
hoisted core::double boz;
|
|
hoisted core::int foobar;
|
|
final synthesized dynamic #0#0 = x;
|
|
late final synthesized core::int? #0#2 = #0#0{self::A}.{self::A::foo}{core::int?};
|
|
late final synthesized core::int? #0#5 = #0#0{self::A}.{self::A::baz}{core::int?};
|
|
late final synthesized core::num #0#7 = #0#0{self::A}.{self::A::boz}{core::num};
|
|
if(#0#0 is{ForNonNullableByDefault} self::A && (let final dynamic #t1 = #0#2! in let final dynamic #t2 = foo = #0#2! in true) && (let final dynamic #t3 = bar = #0#0{self::A}.{self::A::bar}{core::int} in true) && (!(#0#5 == null) ?{core::bool} let final dynamic #t4 = baz = #0#5{core::int} in true : false) && (let final dynamic #t5 = #0#7 as{ForNonNullableByDefault} core::double in let final dynamic #t6 = boz = #0#7 as{ForNonNullableByDefault} core::double in true) && (let final dynamic #t7 = foobar = #0#0{self::A}.{self::A::foobar}{core::int} in true)) {
|
|
return 0;
|
|
}
|
|
else {
|
|
hoisted dynamic foo;
|
|
hoisted dynamic bar;
|
|
hoisted dynamic baz;
|
|
hoisted core::double boz;
|
|
hoisted dynamic foobar;
|
|
final synthesized dynamic #1#0 = x;
|
|
late final synthesized core::Object? #1#2 = #1#0{(core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?, foobar: core::Object?})}.foo{core::Object?};
|
|
late final synthesized core::Object? #1#5 = #1#0{(core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?, foobar: core::Object?})}.baz{core::Object?};
|
|
late final synthesized core::Object? #1#7 = #1#0{(core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?, foobar: core::Object?})}.$1{core::Object?};
|
|
if(#1#0 is{ForNonNullableByDefault} (core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?, foobar: core::Object?}) && (let final dynamic #t8 = #1#2! in let final dynamic #t9 = foo = #1#2! in true) && (let final dynamic #t10 = bar = #1#0{(core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?, foobar: core::Object?})}.bar{core::Object?} in true) && (!(#1#5 == null) ?{core::bool} let final dynamic #t11 = baz = #1#5 in true : false) && (let final dynamic #t12 = #1#7 as{ForNonNullableByDefault} core::double in let final dynamic #t13 = boz = #1#7 as{ForNonNullableByDefault} core::double in true) && (let final dynamic #t14 = foobar = #1#0{(core::Object?, {bar: core::Object?, baz: core::Object?, foo: core::Object?, foobar: core::Object?})}.foobar{core::Object?} in true)) {
|
|
return 1;
|
|
}
|
|
else {
|
|
final synthesized dynamic #2#0 = x;
|
|
if(#2#0 is{ForNonNullableByDefault} self::A) {
|
|
return 2;
|
|
}
|
|
else {
|
|
final synthesized dynamic #3#0 = x;
|
|
if(#3#0 is{ForNonNullableByDefault} (core::Object?) && invalid-expression "pkg/front_end/testcases/patterns/variable_names.dart:26:22: Error: The getter name is not specified explicitly, and the pattern is not a variable. Try specifying the getter name explicitly, or using a variable pattern.
|
|
} else if (x case (: [1, 2])) { // Error
|
|
^") {
|
|
return 3;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
block {
|
|
dynamic #t15;
|
|
dynamic #t16;
|
|
final synthesized dynamic #4#0 = y as{TypeError,ForDynamic,ForNonNullableByDefault} self::A;
|
|
if(!(#4#0 is{ForNonNullableByDefault} self::A && (let final dynamic #t17 = #t15 = #4#0{self::A}.{self::A::qux}{core::bool} in true) && (let final dynamic #t18 = #t16 = #4#0{self::A}.{self::A::quux}{core::String} in true)))
|
|
throw new core::StateError::•("Pattern matching error");
|
|
qux = #t15;
|
|
quux = #t16;
|
|
} =>#4#0;
|
|
block {
|
|
dynamic #t19;
|
|
dynamic #t20;
|
|
final synthesized dynamic #5#0 = z as{TypeError,ForDynamic,ForNonNullableByDefault} (dynamic, {quux: dynamic});
|
|
if(!(#5#0 is{ForNonNullableByDefault} (core::Object?, {quux: core::Object?}) && (let final dynamic #t21 = #t19 = #5#0{(core::Object?, {quux: core::Object?})}.$1{core::Object?} in true) && (let final dynamic #t22 = #t20 = #5#0{(core::Object?, {quux: core::Object?})}.quux{core::Object?} in true)))
|
|
throw new core::StateError::•("Pattern matching error");
|
|
qux = #t19;
|
|
quux = #t20;
|
|
} =>#5#0;
|
|
}
|