| library; |
| // |
| // Problems in library: |
| // |
| // pkg/front_end/testcases/patterns/issue51604.dart:9:14: Error: The variable 'i' is available in some, but not all cases that share this body. |
| // return i; // Error. |
| // ^ |
| // |
| // pkg/front_end/testcases/patterns/issue51604.dart:12:14: Error: The variable 's' is available in some, but not all cases that share this body. |
| // return s; // Error. |
| // ^ |
| // |
| // pkg/front_end/testcases/patterns/issue51604.dart:15:14: Error: The variable 'd' is available in some, but not all cases that share this body. |
| // return d; // Error. |
| // ^ |
| // |
| // pkg/front_end/testcases/patterns/issue51604.dart:18:14: Error: The variable 'b' is available in some, but not all cases that share this body. |
| // return b; // Error. |
| // ^ |
| // |
| // pkg/front_end/testcases/patterns/issue51604.dart:30:14: Error: The variable 'i2' is not available because there is a label or 'default' case. |
| // return i2; // Error. |
| // ^^ |
| // |
| // pkg/front_end/testcases/patterns/issue51604.dart:33:14: Error: The variable 's2' is not available because there is a label or 'default' case. |
| // return s2; // Error. |
| // ^^ |
| // |
| // pkg/front_end/testcases/patterns/issue51604.dart:30:14: Error: Non-nullable variable 'i2' must be assigned before it can be used. |
| // return i2; // Error. |
| // ^^ |
| // |
| // pkg/front_end/testcases/patterns/issue51604.dart:33:14: Error: Non-nullable variable 's2' must be assigned before it can be used. |
| // return s2; // Error. |
| // ^^ |
| // |
| // pkg/front_end/testcases/patterns/issue51604.dart:44:14: Error: The variable 'i3' is not available because there is a label or 'default' case. |
| // return i3; // Error. |
| // ^^ |
| // |
| // pkg/front_end/testcases/patterns/issue51604.dart:48:14: Error: The variable 's3' is not available because there is a label or 'default' case. |
| // return s3; // Error. |
| // ^^ |
| // |
| // pkg/front_end/testcases/patterns/issue51604.dart:59:14: Error: The variable 'i4' is not available because there is a label or 'default' case. |
| // return i4; // Error. |
| // ^^ |
| // |
| // pkg/front_end/testcases/patterns/issue51604.dart:63:14: Error: Variable pattern 's4' doesn't have the same type or finality in all cases. |
| // return s4; // Error. |
| // ^^ |
| // |
| // pkg/front_end/testcases/patterns/issue51604.dart:63:14: Error: The variable 's4' is not available because there is a label or 'default' case. |
| // return s4; // Error. |
| // ^^ |
| // |
| // pkg/front_end/testcases/patterns/issue51604.dart:59:14: Error: Variable pattern 'i4' doesn't have the same type or finality in all cases. |
| // return i4; // Error. |
| // ^ |
| // |
| // pkg/front_end/testcases/patterns/issue51604.dart:87:16: Error: The variable 'i6' is not available because there is a label or 'default' case. |
| // return i6; // Error. |
| // ^^ |
| // |
| // pkg/front_end/testcases/patterns/issue51604.dart:93:18: Error: The variable 's6' is not available because there is a label or 'default' case. |
| // return s6; // Error. |
| // ^^ |
| // |
| // pkg/front_end/testcases/patterns/issue51604.dart:87:16: Error: Non-nullable variable 'i6' must be assigned before it can be used. |
| // return i6; // Error. |
| // ^^ |
| // |
| // pkg/front_end/testcases/patterns/issue51604.dart:93:18: Error: Non-nullable variable 's6' must be assigned before it can be used. |
| // return s6; // Error. |
| // ^^ |
| // |
| import self as self; |
| import "dart:core" as core; |
| |
| static method test1(dynamic x) → dynamic { |
| #L1: |
| { |
| final synthesized dynamic #0#0 = x; |
| dynamic #t1; |
| dynamic #t2; |
| dynamic #t3; |
| dynamic #t4; |
| { |
| hoisted core::int i; |
| if(#C1 =={core::num::==}{(core::Object) → core::bool} #0#0 || #0#0 is core::int && (let final dynamic #t5 = i = #0#0{core::int} in true) && (let final dynamic #t6 = #t1 = i in true)) { |
| invalid-type i = #t1{invalid-type}; |
| { |
| return i; |
| } |
| } |
| } |
| { |
| hoisted core::String s; |
| if(#0#0 is core::String && (let final dynamic #t7 = s = #0#0{core::String} in true) && (let final dynamic #t8 = #t2 = s in true) || #C2 =={core::String::==}{(core::Object) → core::bool} #0#0) { |
| core::String s = #t2{core::String}; |
| { |
| return s; |
| } |
| } |
| } |
| { |
| hoisted core::double d; |
| if(#0#0 is core::double && (let final dynamic #t9 = d = #0#0{core::double} in true) && (let final dynamic #t10 = #t3 = d in true) || #0#0{dynamic}.<(#C3) as core::bool) { |
| core::double d = #t3{core::double}; |
| { |
| return d; |
| } |
| } |
| } |
| { |
| hoisted core::bool b; |
| if(#0#0 =={core::Object::==}{(core::Object) → core::bool} #C4 || #0#0 is core::bool && (let final dynamic #t11 = b = #0#0{core::bool} in true) && (let final dynamic #t12 = #t4 = b in true)) { |
| invalid-type b = #t4{invalid-type}; |
| { |
| return b; |
| } |
| } |
| } |
| { |
| { |
| { |
| return null; |
| } |
| } |
| } |
| } |
| } |
| static method test2(dynamic x) → dynamic { |
| #L2: |
| { |
| core::int #t13 = 1.{core::int::unary-}(){() → core::int}; |
| hoisted core::int i2; |
| final synthesized dynamic #0#0 = x; |
| #L3: |
| { |
| { |
| if(#0#0{dynamic}.<=(#C1) as core::bool) { |
| { |
| #t13 = 0; |
| break #L3; |
| } |
| } |
| } |
| { |
| if(#0#0 is core::int && (let final dynamic #t14 = i2 = #0#0{core::int} in true)) { |
| #t13 = 0; |
| break #L3; |
| } |
| } |
| { |
| hoisted core::String s2; |
| if(#0#0 is core::String && (let final dynamic #t15 = s2 = #0#0{core::String} in true) || true) { |
| { |
| return invalid-expression "pkg/front_end/testcases/patterns/issue51604.dart:33:14: Error: Non-nullable variable 's2' must be assigned before it can be used. |
| return s2; // Error. |
| ^^" in s2; |
| } |
| } |
| } |
| } |
| switch(#t13) /* dynamic */ { |
| #L4: |
| case #C1: |
| { |
| { |
| return invalid-expression "pkg/front_end/testcases/patterns/issue51604.dart:30:14: Error: Non-nullable variable 'i2' must be assigned before it can be used. |
| return i2; // Error. |
| ^^" in i2; |
| } |
| } |
| } |
| } |
| } |
| static method test3(dynamic x) → dynamic { |
| #L5: |
| { |
| core::int #t16 = 1.{core::int::unary-}(){() → core::int}; |
| hoisted core::int i3; |
| hoisted core::int i3#1; |
| final synthesized dynamic #0#0 = x; |
| synthesized core::bool #0#6; |
| synthesized core::bool #0#6#isSet = false; |
| synthesized dynamic #0#8; |
| synthesized core::bool #0#8#isSet = false; |
| dynamic #t17; |
| dynamic #t18; |
| #L6: |
| { |
| { |
| if(#0#0{dynamic}.<=(#C1) as core::bool) { |
| { |
| #t16 = 0; |
| break #L6; |
| } |
| } |
| } |
| { |
| if(#0#0 is core::int && (let final dynamic #t19 = i3 = #0#0{core::int} in true) && (let final dynamic #t20 = #t17 = i3 in true) || #0#0 is core::List<dynamic> && (#0#6#isSet ?{core::bool} #0#6{core::bool} : let final dynamic #t21 = #0#6#isSet = true in #0#6 = #0#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C5) && ((#0#8#isSet ?{dynamic} #0#8{dynamic} : let final dynamic #t22 = #0#8#isSet = true in #0#8 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) is core::int && (let final dynamic #t23 = i3#1 = (#0#8#isSet ?{dynamic} #0#8{dynamic} : let final dynamic #t24 = #0#8#isSet = true in #0#8 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) as{Unchecked} core::int in true)) && (let final dynamic #t25 = #t17 = i3#1 in true)) { |
| #t16 = 0; |
| break #L6; |
| } |
| } |
| { |
| lowered hoisted core::String s3#case#0; |
| lowered hoisted core::String s3#case#1; |
| if(#0#0 is core::String && (let final dynamic #t26 = s3#case#0 = #0#0{core::String} in true) && (let final dynamic #t27 = #t18 = s3#case#0 in true) || #0#0 is core::List<dynamic> && (#0#6#isSet ?{core::bool} #0#6{core::bool} : let final dynamic #t28 = #0#6#isSet = true in #0#6 = #0#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C5) && ((#0#8#isSet ?{dynamic} #0#8{dynamic} : let final dynamic #t29 = #0#8#isSet = true in #0#8 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) is core::String && (let final dynamic #t30 = s3#case#1 = (#0#8#isSet ?{dynamic} #0#8{dynamic} : let final dynamic #t31 = #0#8#isSet = true in #0#8 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) as{Unchecked} core::String in true)) && (let final dynamic #t32 = #t18 = s3#case#1 in true) || true) { |
| core::String s3 = #t18{core::String}; |
| { |
| return s3; |
| } |
| } |
| } |
| } |
| switch(#t16) /* dynamic */ { |
| #L7: |
| case #C1: |
| { |
| core::int i3 = #t17{core::int}; |
| { |
| return i3; |
| } |
| } |
| } |
| } |
| } |
| static method test4(dynamic x) → dynamic { |
| #L8: |
| { |
| core::int #t33 = 1.{core::int::unary-}(){() → core::int}; |
| hoisted core::int i4; |
| hoisted core::double i4#1; |
| final synthesized dynamic #0#0 = x; |
| synthesized core::bool #0#6; |
| synthesized core::bool #0#6#isSet = false; |
| synthesized dynamic #0#8; |
| synthesized core::bool #0#8#isSet = false; |
| dynamic #t34; |
| dynamic #t35; |
| #L9: |
| { |
| { |
| if(#0#0{dynamic}.<=(#C1) as core::bool) { |
| { |
| #t33 = 0; |
| break #L9; |
| } |
| } |
| } |
| { |
| if(#0#0 is core::int && (let final dynamic #t36 = i4 = #0#0{core::int} in true) && (let final dynamic #t37 = #t34 = i4 in true) || #0#0 is core::List<dynamic> && (#0#6#isSet ?{core::bool} #0#6{core::bool} : let final dynamic #t38 = #0#6#isSet = true in #0#6 = #0#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C5) && ((#0#8#isSet ?{dynamic} #0#8{dynamic} : let final dynamic #t39 = #0#8#isSet = true in #0#8 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) is core::double && (let final dynamic #t40 = i4#1 = (#0#8#isSet ?{dynamic} #0#8{dynamic} : let final dynamic #t41 = #0#8#isSet = true in #0#8 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) as{Unchecked} core::double in true)) && (let final dynamic #t42 = #t34 = i4#1 in true)) { |
| #t33 = 0; |
| break #L9; |
| } |
| } |
| { |
| lowered hoisted core::String s4#case#0; |
| lowered final hoisted core::String s4#case#1; |
| if(#0#0 is core::String && (let final dynamic #t43 = s4#case#0 = #0#0{core::String} in true) && (let final dynamic #t44 = #t35 = s4#case#0 in true) || #0#0 is core::List<dynamic> && (#0#6#isSet ?{core::bool} #0#6{core::bool} : let final dynamic #t45 = #0#6#isSet = true in #0#6 = #0#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C5) && ((#0#8#isSet ?{dynamic} #0#8{dynamic} : let final dynamic #t46 = #0#8#isSet = true in #0#8 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) is core::String && (let final dynamic #t47 = s4#case#1 = (#0#8#isSet ?{dynamic} #0#8{dynamic} : let final dynamic #t48 = #0#8#isSet = true in #0#8 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) as{Unchecked} core::String in true)) && (let final dynamic #t49 = #t35 = s4#case#1 in true) || true) { |
| core::String s4 = #t35{core::String}; |
| { |
| return s4; |
| } |
| } |
| } |
| } |
| switch(#t33) /* dynamic */ { |
| #L10: |
| case #C1: |
| { |
| core::int i4 = invalid-expression "pkg/front_end/testcases/patterns/issue51604.dart:59:14: Error: Variable pattern 'i4' doesn't have the same type or finality in all cases. |
| return i4; // Error. |
| ^"; |
| { |
| return i4; |
| } |
| } |
| } |
| } |
| } |
| static method test5(dynamic x) → dynamic { |
| #L11: |
| { |
| core::int #t50 = 1.{core::int::unary-}(){() → core::int}; |
| hoisted core::int i5; |
| final synthesized dynamic #0#0 = x; |
| #L12: |
| { |
| { |
| if(#0#0{dynamic}.<=(#C1) as core::bool) { |
| { |
| #t50 = 0; |
| break #L12; |
| } |
| } |
| } |
| { |
| if(#0#0 is core::int && (let final dynamic #t51 = i5 = #0#0{core::int} in true) && i5 =={core::num::==}{(core::Object) → core::bool} 1) { |
| #t50 = 0; |
| break #L12; |
| } |
| } |
| { |
| hoisted core::String s5; |
| if(#0#0 is core::String && (let final dynamic #t52 = s5 = #0#0{core::String} in true) && s5 =={core::String::==}{(core::Object) → core::bool} "foo" || true) { |
| { |
| return null; |
| } |
| } |
| } |
| } |
| switch(#t50) /* dynamic */ { |
| #L13: |
| case #C1: |
| { |
| { |
| return null; |
| } |
| } |
| } |
| } |
| } |
| static method test6(dynamic x, core::bool b) → dynamic { |
| #L14: |
| { |
| core::int #t53 = 1.{core::int::unary-}(){() → core::int}; |
| hoisted core::int i6; |
| final synthesized dynamic #0#0 = x; |
| #L15: |
| { |
| { |
| if(#0#0{dynamic}.<=(#C1) as core::bool) { |
| { |
| #t53 = 0; |
| break #L15; |
| } |
| } |
| } |
| { |
| if(#0#0 is core::int && (let final dynamic #t54 = i6 = #0#0{core::int} in true)) { |
| #t53 = 0; |
| break #L15; |
| } |
| } |
| { |
| hoisted core::String s6; |
| if(#0#0 is core::String && (let final dynamic #t55 = s6 = #0#0{core::String} in true) || true) { |
| { |
| if(b) { |
| if(b) { |
| return invalid-expression "pkg/front_end/testcases/patterns/issue51604.dart:93:18: Error: Non-nullable variable 's6' must be assigned before it can be used. |
| return s6; // Error. |
| ^^" in s6; |
| } |
| } |
| } |
| } |
| } |
| } |
| switch(#t53) /* dynamic */ { |
| #L16: |
| case #C1: |
| { |
| { |
| if(b) { |
| return invalid-expression "pkg/front_end/testcases/patterns/issue51604.dart:87:16: Error: Non-nullable variable 'i6' must be assigned before it can be used. |
| return i6; // Error. |
| ^^" in i6; |
| } |
| break #L14; |
| } |
| } |
| } |
| } |
| } |
| static method test7(dynamic x) → dynamic { |
| #L17: |
| { |
| core::int #t56 = 1.{core::int::unary-}(){() → core::int}; |
| hoisted core::int i7; |
| final synthesized dynamic #0#0 = x; |
| #L18: |
| { |
| { |
| if(#0#0{dynamic}.<=(#C1) as core::bool) { |
| { |
| #t56 = 0; |
| break #L18; |
| } |
| } |
| } |
| { |
| if(#0#0 is core::int && (let final dynamic #t57 = i7 = #0#0{core::int} in true) && i7 =={core::num::==}{(core::Object) → core::bool} 1) { |
| #t56 = 0; |
| break #L18; |
| } |
| } |
| { |
| hoisted core::String s7; |
| if(#0#0 is core::String && (let final dynamic #t58 = s7 = #0#0{core::String} in true) && s7 =={core::String::==}{(core::Object) → core::bool} "foo" || true) { |
| { |
| core::String s7 = "foo"; |
| return s7; |
| } |
| } |
| } |
| } |
| switch(#t56) /* dynamic */ { |
| #L19: |
| case #C1: |
| { |
| { |
| core::int i7 = 1; |
| return i7; |
| } |
| } |
| } |
| } |
| } |
| |
| constants { |
| #C1 = 0 |
| #C2 = "foo" |
| #C3 = 3.14 |
| #C4 = false |
| #C5 = 1 |
| } |