Files
sdk/pkg/front_end/testcases/offsets/switch_encoding.dart.weak.expect
T
Johnni Winther c6347389d2 [cfe] Move irrefutable tails into the case body
This moves pattern variable assignments of fully matched expressions into the case body. This will help backends (dart2js in particular) to reason about the code flow.

Closes #54115

Change-Id: I598a384a829f16e91ab2d6a309499cf20b9cc121
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/339122
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
2023-12-07 11:13:30 +00:00

749 lines
37 KiB
Plaintext

library;
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
[222]class E extends core::_Enum /*isEnum*/ {
[222] static const field core::List<self::E> values = [-1] [-1] #C10;
[226] enum-element static const field self::E a = [226] [226] #C3;
[229] enum-element static const field self::E b = [229] [229] #C6;
[232] enum-element static const field self::E c = [232] [232] #C9;
[222] const synthetic constructor •([222] core::int #index, [222] core::String #name) → self::E
: [-1] super core::_Enum::• [-1]([-1] #index, [-1] #name)
[-1] ;
[222] method _enumToString() → core::String
[-1] return [-1] [-1] "E.${[-1] [-1] [-1] [-1] this.{core::_Enum::_name}{core::String}}";
}
[243]class PrimitiveEquals extends core::Object /*hasConstConstructor*/ {
[273] final field core::int field;
[289] const constructor •([310] core::int field) → self::PrimitiveEquals
: [310] self::PrimitiveEquals::field = [-1] [-1] field, [289] super core::Object::• [-1]()
[-1] ;
}
[327]class NonPrimitiveEquals extends core::Object /*hasConstConstructor*/ {
[360] final field core::int field;
[376] const constructor •([400] core::int field) → self::NonPrimitiveEquals
: [400] self::NonPrimitiveEquals::field = [-1] [-1] field, [376] super core::Object::• [-1]()
[-1] ;
[419] get hashCode() → core::int
[431] return [437] [437] [431] [431] [431] [431] this.{self::NonPrimitiveEquals::field}{core::int}.{core::num::hashCode}{core::int};
[464] operator ==([474] core::Object other) → core::bool {
[487] if([491] [491] core::identical [500]([501] this, [507] other))
[515] return [522] [522] true;
[532] return [567] [567] [545] [545] [539] [539] other is self::NonPrimitiveEquals && [576] [576] [570] [570] [570] [570] this.{self::NonPrimitiveEquals::field}{core::int} =={core::num::==}{(core::Object) → core::bool} [585] [585] [579] [579] other{self::NonPrimitiveEquals}.{self::NonPrimitiveEquals::field}{core::int};
}
}
[599]static method switchStatement([615] dynamic o) → dynamic {
[622] #L1:
[622] {
[630] [630] final synthesized dynamic #0#0 = [630] [630] o;
[-1] [-1] synthesized core::int #0#2;
[-1] [-1] synthesized core::bool #0#2#isSet = [644] [644] false;
[-1] [-1] dynamic #t1;
[639] {
[649] [649] lowered hoisted dynamic a#case#0;
[681] [681] lowered hoisted dynamic a#case#1;
[639] if([622] [622] [649] [649] [-1] [-1] [644] [644] [644] [644] [644] [644] [-1] [-1] #0#0 is core::List<dynamic> && [644] [644] [644]([644] [-1] [-1] #0#2#isSet ?{core::int} [-1] [-1] #0#2{core::int} : [644] [644] let [644] final dynamic #t2 = [644] [644] #0#2#isSet = [644] [644] true in [644] [644] #0#2 = [644] [644] [-1] [-1] #0#0{core::List<dynamic>}.{core::List::length}{core::int}) =={core::num::==}{(core::Object) → core::bool} [-1] [-1] #C4 && [649]([649] let [649] final dynamic #t3 = [649] [649] a#case#0 = [644] [644] [-1] [-1] #0#0{core::List<dynamic>}.{core::List::[]}[644]([644] 0){(core::int) → dynamic} in [-1] [-1] true) && [659] [659] [659] [659] [657] [657] a#case#0{dynamic}.> [659]([661] 5) as{TypeError} core::bool && [622]([622] let [622] final dynamic #t4 = [622] [622] #t1 = [649] [649] a#case#0 in [649] [649] true) || [681] [681] [-1] [-1] [673] [673] [673] [673] [673] [673] [-1] [-1] #0#0 is core::List<dynamic> && [673] [673] [644]([644] [-1] [-1] #0#2#isSet ?{core::int} [-1] [-1] #0#2{core::int} : [644] [644] let [644] final dynamic #t5 = [644] [644] #0#2#isSet = [644] [644] true in [644] [644] #0#2 = [644] [644] [-1] [-1] #0#0{core::List<dynamic>}.{core::List::length}{core::int}) =={core::num::==}{(core::Object) → core::bool} [-1] [-1] #C7 && [681]([681] let [681] final dynamic #t6 = [681] [681] a#case#1 = [673] [673] [-1] [-1] #0#0{core::List<dynamic>}.{core::List::[]}[673]([673] 1){(core::int) → dynamic} in [-1] [-1] true) && [691] [691] [691] [691] [689] [689] a#case#1{dynamic}.< [691]([693] 5) as{TypeError} core::bool && [622]([622] let [622] final dynamic #t7 = [622] [622] #t1 = [681] [681] a#case#1 in [681] [681] true)) {
[649] [649] dynamic a = [-1] [-1] #t1{dynamic};
[639] {
[702] [702] [702] core::print [707]([708] a);
[-1] break #L1;
}
}
}
[716] {
[729] [729] hoisted dynamic a;
[716] if([721] [721] [723] [723] [721] [721] [-1] [-1] #0#0 is core::Map<dynamic, dynamic> && [723] [723] [-1] [-1] #0#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}[723]([-1] #C4){(core::Object?) → core::bool} && [729]([729] let [729] final dynamic #t8 = [729] [729] a = [723] [723] [-1] [-1] #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}[723]([-1] #C4){(core::Object?) → dynamic} in [-1] [-1] true)) {
[716] {
[739] [739] [739] core::print [744]([745] a);
}
}
}
}
}
[756]static method switchStatementWithLabel([781] dynamic o) → dynamic {
[788] #L2:
[788] {
[796] [796] final synthesized dynamic #0#0 = [796] [796] o;
[-1] [-1] synthesized core::int #0#2;
[-1] [-1] synthesized core::bool #0#2#isSet = [810] [810] false;
[-1] [-1] dynamic #t9;
[805] {
[815] [815] lowered hoisted dynamic a#case#0;
[847] [847] lowered hoisted dynamic a#case#1;
[805] if([788] [788] [815] [815] [-1] [-1] [810] [810] [810] [810] [810] [810] [-1] [-1] #0#0 is core::List<dynamic> && [810] [810] [810]([810] [-1] [-1] #0#2#isSet ?{core::int} [-1] [-1] #0#2{core::int} : [810] [810] let [810] final dynamic #t10 = [810] [810] #0#2#isSet = [810] [810] true in [810] [810] #0#2 = [810] [810] [-1] [-1] #0#0{core::List<dynamic>}.{core::List::length}{core::int}) =={core::num::==}{(core::Object) → core::bool} [-1] [-1] #C4 && [815]([815] let [815] final dynamic #t11 = [815] [815] a#case#0 = [810] [810] [-1] [-1] #0#0{core::List<dynamic>}.{core::List::[]}[810]([810] 0){(core::int) → dynamic} in [-1] [-1] true) && [825] [825] [825] [825] [823] [823] a#case#0{dynamic}.> [825]([827] 5) as{TypeError} core::bool && [788]([788] let [788] final dynamic #t12 = [788] [788] #t9 = [815] [815] a#case#0 in [815] [815] true) || [847] [847] [-1] [-1] [839] [839] [839] [839] [839] [839] [-1] [-1] #0#0 is core::List<dynamic> && [839] [839] [810]([810] [-1] [-1] #0#2#isSet ?{core::int} [-1] [-1] #0#2{core::int} : [810] [810] let [810] final dynamic #t13 = [810] [810] #0#2#isSet = [810] [810] true in [810] [810] #0#2 = [810] [810] [-1] [-1] #0#0{core::List<dynamic>}.{core::List::length}{core::int}) =={core::num::==}{(core::Object) → core::bool} [-1] [-1] #C7 && [847]([847] let [847] final dynamic #t14 = [847] [847] a#case#1 = [839] [839] [-1] [-1] #0#0{core::List<dynamic>}.{core::List::[]}[839]([839] 1){(core::int) → dynamic} in [-1] [-1] true) && [857] [857] [857] [857] [855] [855] a#case#1{dynamic}.< [857]([859] 5) as{TypeError} core::bool && [788]([788] let [788] final dynamic #t15 = [788] [788] #t9 = [847] [847] a#case#1 in [847] [847] true)) {
[815] [815] dynamic a = [-1] [-1] #t9{dynamic};
[805] {
[868] [868] [868] core::print [873]([874] a);
[-1] break #L2;
}
}
}
[882] {
[895] [895] hoisted dynamic a;
[882] if([887] [887] [889] [889] [887] [887] [-1] [-1] #0#0 is core::Map<dynamic, dynamic> && [889] [889] [-1] [-1] #0#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}[889]([-1] #C4){(core::Object?) → core::bool} && [895]([895] let [895] final dynamic #t16 = [895] [895] a = [889] [889] [-1] [-1] #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}[889]([-1] #C4){(core::Object?) → dynamic} in [-1] [-1] true)) {
[882] {
[905] [905] [905] core::print [910]([911] a);
[-1] break #L2;
}
}
}
[919] {
[919] if([935] [935] [-1] [-1] #C4 =={core::num::==}{(core::Object) → core::bool} [-1] [-1] #0#0) {
[919] {
[944] [944] [944] core::print [949]([950] 1);
}
}
}
}
}
[961]static method switchStatementWithContinue([989] dynamic o) → dynamic {
[996] #L3:
[996] {
[996] [996] core::int #t17 = [996] [996] [996] [996] 1.{core::int::unary-}[996](){() → core::int};
[1004] [1004] final synthesized dynamic #0#0 = [1004] [1004] o;
[-1] [-1] synthesized core::int #0#2;
[-1] [-1] synthesized core::bool #0#2#isSet = [1018] [1018] false;
[-1] [-1] dynamic #t18;
[996] #L4:
[996] {
[1013] {
[1023] [1023] lowered hoisted dynamic a#case#0;
[1055] [1055] lowered hoisted dynamic a#case#1;
[1013] if([996] [996] [1023] [1023] [-1] [-1] [1018] [1018] [1018] [1018] [1018] [1018] [-1] [-1] #0#0 is core::List<dynamic> && [1018] [1018] [1018]([1018] [-1] [-1] #0#2#isSet ?{core::int} [-1] [-1] #0#2{core::int} : [1018] [1018] let [1018] final dynamic #t19 = [1018] [1018] #0#2#isSet = [1018] [1018] true in [1018] [1018] #0#2 = [1018] [1018] [-1] [-1] #0#0{core::List<dynamic>}.{core::List::length}{core::int}) =={core::num::==}{(core::Object) → core::bool} [-1] [-1] #C4 && [1023]([1023] let [1023] final dynamic #t20 = [1023] [1023] a#case#0 = [1018] [1018] [-1] [-1] #0#0{core::List<dynamic>}.{core::List::[]}[1018]([1018] 0){(core::int) → dynamic} in [-1] [-1] true) && [1033] [1033] [1033] [1033] [1031] [1031] a#case#0{dynamic}.> [1033]([1035] 5) as{TypeError} core::bool && [996]([996] let [996] final dynamic #t21 = [996] [996] #t18 = [1023] [1023] a#case#0 in [1023] [1023] true) || [1055] [1055] [-1] [-1] [1047] [1047] [1047] [1047] [1047] [1047] [-1] [-1] #0#0 is core::List<dynamic> && [1047] [1047] [1018]([1018] [-1] [-1] #0#2#isSet ?{core::int} [-1] [-1] #0#2{core::int} : [1018] [1018] let [1018] final dynamic #t22 = [1018] [1018] #0#2#isSet = [1018] [1018] true in [1018] [1018] #0#2 = [1018] [1018] [-1] [-1] #0#0{core::List<dynamic>}.{core::List::length}{core::int}) =={core::num::==}{(core::Object) → core::bool} [-1] [-1] #C7 && [1055]([1055] let [1055] final dynamic #t23 = [1055] [1055] a#case#1 = [1047] [1047] [-1] [-1] #0#0{core::List<dynamic>}.{core::List::[]}[1047]([1047] 1){(core::int) → dynamic} in [-1] [-1] true) && [1065] [1065] [1065] [1065] [1063] [1063] a#case#1{dynamic}.< [1065]([1067] 5) as{TypeError} core::bool && [996]([996] let [996] final dynamic #t24 = [996] [996] #t18 = [1055] [1055] a#case#1 in [1055] [1055] true)) {
[1023] [1023] dynamic a = [-1] [-1] #t18{dynamic};
[1013] {
[1076] [1076] [1076] core::print [1081]([1082] a);
[-1] break #L3;
}
}
}
[1090] {
[1103] [1103] hoisted dynamic a;
[1090] if([1095] [1095] [1097] [1097] [1095] [1095] [-1] [-1] #0#0 is core::Map<dynamic, dynamic> && [1097] [1097] [-1] [-1] #0#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}[1097]([-1] #C4){(core::Object?) → core::bool} && [1103]([1103] let [1103] final dynamic #t25 = [1103] [1103] a = [1097] [1097] [-1] [-1] #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}[1097]([-1] #C4){(core::Object?) → dynamic} in [-1] [-1] true)) {
[1090] {
[1113] [1113] [1113] core::print [1118]([1119] a);
[1129] [1129] [1129] #t17 = [1129] [1129] 0;
[1129] break #L4;
}
}
}
[1150] {
[1150] if([1155] [1155] [-1] [-1] #C1 =={core::num::==}{(core::Object) → core::bool} [-1] [-1] #0#0) {
[1150] {
[1164] [1164] [1164] core::print [1169]([1170] o);
[-1] break #L3;
}
}
}
[1178] {
[1178] if([1195] [1195] [-1] [-1] #C4 =={core::num::==}{(core::Object) → core::bool} [-1] [-1] #0#0) {
[996] [996] [996] #t17 = [996] [996] 0;
[1178] break #L4;
}
}
[1241] {
[1241] if([1258] [1258] [-1] [-1] #C7 =={core::num::==}{(core::Object) → core::bool} [-1] [-1] #0#0) {
[996] [996] [996] #t17 = [996] [996] 1;
[1241] break #L4;
}
}
}
[996] switch([996] [996] #t17) /* dynamic */ {
[996] #L5:
case [996] [996] #C1:
[996] {
[1178] {
[1204] [1204] [1204] core::print [1209]([1210] 1);
[1220] continue #L6;
}
}
[996] #L6:
case [996] [996] #C4:
[996] {
[1241] {
[1267] [1267] [1267] core::print [1272]([1273] 2);
}
}
}
}
}
[1284]static method switchStatementWithContinueNested([1318] dynamic o1, [1322] dynamic o2) → dynamic {
[1330] #L7:
[1330] {
[1330] [1330] core::int #t26 = [1330] [1330] [1330] [1330] 1.{core::int::unary-}[1330](){() → core::int};
[1338] [1338] final synthesized dynamic #2#0 = [1338] [1338] o1;
[1330] #L8:
[1330] {
[1348] {
[1358] [1358] hoisted dynamic a;
[1348] if([1353] [1353] [1353] [1353] [1353] [1353] [-1] [-1] #2#0 is core::List<dynamic> && [1353] [1353] [1353] [1353] [-1] [-1] #2#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} [-1] [-1] #C4 && [1358]([1358] let [1358] final dynamic #t27 = [1358] [1358] a = [1353] [1353] [-1] [-1] #2#0{core::List<dynamic>}.{core::List::[]}[1353]([1353] 0){(core::int) → dynamic} in [-1] [-1] true)) {
[1348] {
[1368] [1368] [1368] core::print [1373]([1374] a);
[-1] break #L7;
}
}
}
[1382] {
[1395] [1395] hoisted dynamic a;
[1382] if([1387] [1387] [1389] [1389] [1387] [1387] [-1] [-1] #2#0 is core::Map<dynamic, dynamic> && [1389] [1389] [-1] [-1] #2#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}[1389]([-1] #C4){(core::Object?) → core::bool} && [1395]([1395] let [1395] final dynamic #t28 = [1395] [1395] a = [1389] [1389] [-1] [-1] #2#0{core::Map<dynamic, dynamic>}.{core::Map::[]}[1389]([-1] #C4){(core::Object?) → dynamic} in [-1] [-1] true)) {
[1382] {
[1405] [1405] [1405] core::print [1410]([1411] a);
[1421] #L9:
[1421] {
[1421] [1421] core::int #t29 = [1421] [1421] [1421] [1421] 1.{core::int::unary-}[1421](){() → core::int};
[1429] [1429] final synthesized dynamic #0#0 = [1429] [1429] o2;
[-1] [-1] synthesized core::int #0#2;
[-1] [-1] synthesized core::bool #0#2#isSet = [1448] [1448] false;
[-1] [-1] dynamic #t30;
[1421] #L10:
[1421] {
[1443] {
[1453] [1453] lowered hoisted dynamic a#case#0;
[1489] [1489] lowered hoisted dynamic a#case#1;
[1443] if([1421] [1421] [1453] [1453] [-1] [-1] [1448] [1448] [1448] [1448] [1448] [1448] [-1] [-1] #0#0 is core::List<dynamic> && [1448] [1448] [1448]([1448] [-1] [-1] #0#2#isSet ?{core::int} [-1] [-1] #0#2{core::int} : [1448] [1448] let [1448] final dynamic #t31 = [1448] [1448] #0#2#isSet = [1448] [1448] true in [1448] [1448] #0#2 = [1448] [1448] [-1] [-1] #0#0{core::List<dynamic>}.{core::List::length}{core::int}) =={core::num::==}{(core::Object) → core::bool} [-1] [-1] #C4 && [1453]([1453] let [1453] final dynamic #t32 = [1453] [1453] a#case#0 = [1448] [1448] [-1] [-1] #0#0{core::List<dynamic>}.{core::List::[]}[1448]([1448] 0){(core::int) → dynamic} in [-1] [-1] true) && [1463] [1463] [1463] [1463] [1461] [1461] a#case#0{dynamic}.> [1463]([1465] 5) as{TypeError} core::bool && [1421]([1421] let [1421] final dynamic #t33 = [1421] [1421] #t30 = [1453] [1453] a#case#0 in [1453] [1453] true) || [1489] [1489] [-1] [-1] [1481] [1481] [1481] [1481] [1481] [1481] [-1] [-1] #0#0 is core::List<dynamic> && [1481] [1481] [1448]([1448] [-1] [-1] #0#2#isSet ?{core::int} [-1] [-1] #0#2{core::int} : [1448] [1448] let [1448] final dynamic #t34 = [1448] [1448] #0#2#isSet = [1448] [1448] true in [1448] [1448] #0#2 = [1448] [1448] [-1] [-1] #0#0{core::List<dynamic>}.{core::List::length}{core::int}) =={core::num::==}{(core::Object) → core::bool} [-1] [-1] #C7 && [1489]([1489] let [1489] final dynamic #t35 = [1489] [1489] a#case#1 = [1481] [1481] [-1] [-1] #0#0{core::List<dynamic>}.{core::List::[]}[1481]([1481] 1){(core::int) → dynamic} in [-1] [-1] true) && [1499] [1499] [1499] [1499] [1497] [1497] a#case#1{dynamic}.< [1499]([1501] 5) as{TypeError} core::bool && [1421]([1421] let [1421] final dynamic #t36 = [1421] [1421] #t30 = [1489] [1489] a#case#1 in [1489] [1489] true)) {
[1453] [1453] dynamic a = [-1] [-1] #t30{dynamic};
[1443] {
[1514] [1514] [1514] core::print [1519]([1520] a);
[-1] break #L9;
}
}
}
[1532] {
[1545] [1545] hoisted dynamic a;
[1532] if([1537] [1537] [1539] [1539] [1537] [1537] [-1] [-1] #0#0 is core::Map<dynamic, dynamic> && [1539] [1539] [-1] [-1] #0#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}[1539]([-1] #C4){(core::Object?) → core::bool} && [1545]([1545] let [1545] final dynamic #t37 = [1545] [1545] a = [1539] [1539] [-1] [-1] #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}[1539]([-1] #C4){(core::Object?) → dynamic} in [-1] [-1] true)) {
[1532] {
[1559] [1559] [1559] core::print [1564]([1565] a);
[1579] [1579] [1579] #t26 = [1579] [1579] 1;
[1579] break #L8;
}
}
}
[1605] {
[1605] if([1610] [1610] [-1] [-1] #C1 =={core::num::==}{(core::Object) → core::bool} [-1] [-1] #0#0) {
[1605] {
[1623] [1623] [1623] core::print [1628]([1629] o2);
[1644] [1644] [1644] #t29 = [1644] [1644] 0;
[1644] break #L10;
}
}
}
[1670] {
[1670] if([1692] [1692] [-1] [-1] #C4 =={core::num::==}{(core::Object) → core::bool} [-1] [-1] #0#0) {
[1421] [1421] [1421] #t29 = [1421] [1421] 0;
[1670] break #L10;
}
}
[1751] {
[1751] if([1773] [1773] [-1] [-1] #C7 =={core::num::==}{(core::Object) → core::bool} [-1] [-1] #0#0) {
[1421] [1421] [1421] #t29 = [1421] [1421] 1;
[1751] break #L10;
}
}
}
[1421] switch([1421] [1421] #t29) /* dynamic */ {
[1421] #L11:
case [1421] [1421] #C1:
[1421] {
[1670] {
[1705] [1705] [1705] core::print [1710]([1711] 1);
[1725] continue #L12;
}
}
[1421] #L12:
case [1421] [1421] #C4:
[1421] {
[1751] {
[1786] [1786] [1786] core::print [1791]([1792] 2);
[1806] [1806] [1806] #t26 = [1806] [1806] 0;
[1806] break #L8;
}
}
}
}
[-1] break #L7;
}
}
}
[1836] {
[1836] if([1841] [1841] [-1] [-1] #C1 =={core::num::==}{(core::Object) → core::bool} [-1] [-1] #2#0) {
[1836] {
[1850] [1850] [1850] core::print [1855]([1856] o1);
[-1] break #L7;
}
}
}
[1865] {
[1865] if([1883] [1883] [-1] [-1] #C4 =={core::num::==}{(core::Object) → core::bool} [-1] [-1] #2#0) {
[1330] [1330] [1330] #t26 = [1330] [1330] 0;
[1865] break #L8;
}
}
[1930] {
[1930] if([1948] [1948] [-1] [-1] #C7 =={core::num::==}{(core::Object) → core::bool} [-1] [-1] #2#0) {
[1330] [1330] [1330] #t26 = [1330] [1330] 1;
[1930] break #L8;
}
}
}
[1330] switch([1330] [1330] #t26) /* dynamic */ {
[1330] #L13:
case [1330] [1330] #C1:
[1330] {
[1865] {
[1892] [1892] [1892] core::print [1897]([1898] 1);
[1908] continue #L14;
}
}
[1330] #L14:
case [1330] [1330] #C4:
[1330] {
[1930] {
[1957] [1957] [1957] core::print [1962]([1963] 2);
[1973] #L15:
[1973] {
[1973] [1973] core::int #t38 = [1973] [1973] [1973] [1973] 1.{core::int::unary-}[1973](){() → core::int};
[1981] [1981] final synthesized dynamic #1#0 = [1981] [1981] o2;
[-1] [-1] synthesized core::int #1#2;
[-1] [-1] synthesized core::bool #1#2#isSet = [2000] [2000] false;
[-1] [-1] dynamic #t39;
[1973] #L16:
[1973] {
[1995] {
[2005] [2005] lowered hoisted dynamic a#case#0;
[2041] [2041] lowered hoisted dynamic a#case#1;
[1995] if([1973] [1973] [2005] [2005] [-1] [-1] [2000] [2000] [2000] [2000] [2000] [2000] [-1] [-1] #1#0 is core::List<dynamic> && [2000] [2000] [2000]([2000] [-1] [-1] #1#2#isSet ?{core::int} [-1] [-1] #1#2{core::int} : [2000] [2000] let [2000] final dynamic #t40 = [2000] [2000] #1#2#isSet = [2000] [2000] true in [2000] [2000] #1#2 = [2000] [2000] [-1] [-1] #1#0{core::List<dynamic>}.{core::List::length}{core::int}) =={core::num::==}{(core::Object) → core::bool} [-1] [-1] #C4 && [2005]([2005] let [2005] final dynamic #t41 = [2005] [2005] a#case#0 = [2000] [2000] [-1] [-1] #1#0{core::List<dynamic>}.{core::List::[]}[2000]([2000] 0){(core::int) → dynamic} in [-1] [-1] true) && [2015] [2015] [2015] [2015] [2013] [2013] a#case#0{dynamic}.> [2015]([2017] 5) as{TypeError} core::bool && [1973]([1973] let [1973] final dynamic #t42 = [1973] [1973] #t39 = [2005] [2005] a#case#0 in [2005] [2005] true) || [2041] [2041] [-1] [-1] [2033] [2033] [2033] [2033] [2033] [2033] [-1] [-1] #1#0 is core::List<dynamic> && [2033] [2033] [2000]([2000] [-1] [-1] #1#2#isSet ?{core::int} [-1] [-1] #1#2{core::int} : [2000] [2000] let [2000] final dynamic #t43 = [2000] [2000] #1#2#isSet = [2000] [2000] true in [2000] [2000] #1#2 = [2000] [2000] [-1] [-1] #1#0{core::List<dynamic>}.{core::List::length}{core::int}) =={core::num::==}{(core::Object) → core::bool} [-1] [-1] #C7 && [2041]([2041] let [2041] final dynamic #t44 = [2041] [2041] a#case#1 = [2033] [2033] [-1] [-1] #1#0{core::List<dynamic>}.{core::List::[]}[2033]([2033] 1){(core::int) → dynamic} in [-1] [-1] true) && [2051] [2051] [2051] [2051] [2049] [2049] a#case#1{dynamic}.< [2051]([2053] 5) as{TypeError} core::bool && [1973]([1973] let [1973] final dynamic #t45 = [1973] [1973] #t39 = [2041] [2041] a#case#1 in [2041] [2041] true)) {
[2005] [2005] dynamic a = [-1] [-1] #t39{dynamic};
[1995] {
[2066] [2066] [2066] core::print [2071]([2072] a);
[-1] break #L15;
}
}
}
[2084] {
[2097] [2097] hoisted dynamic a;
[2084] if([2089] [2089] [2091] [2091] [2089] [2089] [-1] [-1] #1#0 is core::Map<dynamic, dynamic> && [2091] [2091] [-1] [-1] #1#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}[2091]([-1] #C4){(core::Object?) → core::bool} && [2097]([2097] let [2097] final dynamic #t46 = [2097] [2097] a = [2091] [2091] [-1] [-1] #1#0{core::Map<dynamic, dynamic>}.{core::Map::[]}[2091]([-1] #C4){(core::Object?) → dynamic} in [-1] [-1] true)) {
[2084] {
[2111] [2111] [2111] core::print [2116]([2117] a);
[2131] continue #L14;
}
}
}
[2157] {
[2157] if([2162] [2162] [-1] [-1] #C1 =={core::num::==}{(core::Object) → core::bool} [-1] [-1] #1#0) {
[2157] {
[2175] [2175] [2175] core::print [2180]([2181] o2);
[2196] [2196] [2196] #t38 = [2196] [2196] 0;
[2196] break #L16;
}
}
}
[2222] {
[2222] if([2244] [2244] [-1] [-1] #C4 =={core::num::==}{(core::Object) → core::bool} [-1] [-1] #1#0) {
[1973] [1973] [1973] #t38 = [1973] [1973] 0;
[2222] break #L16;
}
}
[2303] {
[2303] if([2325] [2325] [-1] [-1] #C7 =={core::num::==}{(core::Object) → core::bool} [-1] [-1] #1#0) {
[1973] [1973] [1973] #t38 = [1973] [1973] 1;
[2303] break #L16;
}
}
}
[1973] switch([1973] [1973] #t38) /* dynamic */ {
[1973] #L17:
case [1973] [1973] #C1:
[1973] {
[2222] {
[2257] [2257] [2257] core::print [2262]([2263] 1);
[2277] continue #L18;
}
}
[1973] #L18:
case [1973] [1973] #C4:
[1973] {
[2303] {
[2338] [2338] [2338] core::print [2343]([2344] 2);
[2358] continue #L13;
}
}
}
}
}
}
}
}
}
[2391]static method switchStatementEnum([2413] self::E o) → dynamic {
[2420] #L19:
[2420] switch([2428] [2428] o) /* isExplicitlyExhaustive, self::E */ {
[2437] #L20:
case [2444] [2444] #C3:
[2437] {
[2453] [2453] [2453] core::print [2458]([2459] "a");
[-1] break #L19;
}
[2469] #L21:
case [2476] [2476] #C6:
[2469] {
[2485] [2485] [2485] core::print [2490]([2491] "b");
[-1] break #L19;
}
[2501] #L22:
case [2508] [2508] #C9:
[2501] {
[2517] [2517] [2517] core::print [2522]([2523] "c");
[2501] break #L19;
}
[2420] #L23:
default:
[2420] [2420] [2420] throw [2420] [2420] new _in::ReachabilityError::• [2420]([2420] "`null` encountered as case in a switch statement with a non-nullable type.");
}
}
[2536]static method switchStatementEnumWithGuard([2567] self::E o) → dynamic {
[2574] #L24:
[2574] {
[2582] [2582] final synthesized self::E #0#0 = [2582] [2582] o;
[2591] {
[2591] if([-1] [-1] [2598] [2598] [-1] [-1] #C3 =={core::Object::==}{(core::Object) → core::bool} [-1] [-1] #0#0 && [2605] [2605] true) {
[2591] {
[2617] [2617] [2617] core::print [2622]([2623] "a");
[-1] break #L24;
}
}
}
[2633] {
[2633] if([2640] [2640] [-1] [-1] #C6 =={core::Object::==}{(core::Object) → core::bool} [-1] [-1] #0#0) {
[2633] {
[2649] [2649] [2649] core::print [2654]([2655] "b");
[-1] break #L24;
}
}
}
[2665] {
[2665] if([2670] [2670] true) {
}
[2665] break #L24;
}
[2574] [2574] [2574] throw [2574] [2574] new _in::ReachabilityError::• [2574]([2574] "`null` encountered as case in a switch statement with a non-nullable type.");
}
}
[2680]static method switchStatementEnumWithLabel([2711] self::E o) → dynamic {
[2718] #L25:
[2718] switch([2726] [2726] o) /* isExplicitlyExhaustive, self::E */ {
[2735] #L26:
case [2742] [2742] #C3:
[2735] {
[2751] [2751] [2751] core::print [2756]([2757] "a");
[-1] break #L25;
}
[2767] #L27:
case [2785] [2785] #C6:
[2767] {
[2794] [2794] [2794] core::print [2799]([2800] "b");
[-1] break #L25;
}
[2810] #L28:
case [2817] [2817] #C9:
[2810] {
[2826] [2826] [2826] core::print [2831]([2832] "c");
[2810] break #L25;
}
[2718] #L29:
default:
[2718] [2718] [2718] throw [2718] [2718] new _in::ReachabilityError::• [2718]([2718] "`null` encountered as case in a switch statement with a non-nullable type.");
}
}
[2845]static method switchStatementEnumWithContinue([2879] self::E o) → dynamic {
[2886] #L30:
[2886] switch([2894] [2894] o) /* isExplicitlyExhaustive, self::E */ {
[2903] #L31:
case [2910] [2910] #C3:
[2903] {
[2919] [2919] [2919] core::print [2924]([2925] "a");
[2937] continue #L32;
}
[2958] #L32:
case [2977] [2977] #C6:
[2958] {
[2986] [2986] [2986] core::print [2991]([2992] "b");
[3004] continue #L33;
}
[3025] #L33:
case [3044] [3044] #C9:
[3025] {
[3053] [3053] [3053] core::print [3058]([3059] "c");
[3025] break #L30;
}
[2886] #L34:
default:
[2886] [2886] [2886] throw [2886] [2886] new _in::ReachabilityError::• [2886]([2886] "`null` encountered as case in a switch statement with a non-nullable type.");
}
}
[3072]static method switchStatementPrimitiveEquals([3103] dynamic o) → dynamic {
[3110] #L35:
[3110] switch([3118] [3118] o) /* dynamic */ {
[3127] #L36:
case [3138] [3138] #C11:
[3127] {
[3164] [3164] [3164] core::print [3169]([3170] "a");
[-1] break #L35;
}
[3180] #L37:
case [3191] [3191] #C12:
[3180] {
[3217] [3217] [3217] core::print [3222]([3223] "b");
}
}
}
[3236]static method switchStatementNonPrimitiveEquals([3270] dynamic o) → dynamic {
[3277] #L38:
[3277] {
[3285] [3285] final synthesized dynamic #0#0 = [3285] [3285] o;
[3294] {
[3294] if([3305] [3305] [-1] [-1] #C13 =={self::NonPrimitiveEquals::==}{(core::Object) → core::bool} [-1] [-1] #0#0) {
[3294] {
[3334] [3334] [3334] core::print [3339]([3340] "a");
[-1] break #L38;
}
}
}
[3350] {
[3350] if([3361] [3361] [-1] [-1] #C14 =={self::NonPrimitiveEquals::==}{(core::Object) → core::bool} [-1] [-1] #0#0) {
[3350] {
[3390] [3390] [3390] core::print [3395]([3396] "b");
}
}
}
}
}
[3409]static method switchExpression([3426] dynamic o) → dynamic {
[3433] return [3440] [3440] block {
[-1] [-1] dynamic #t47;
[3448] [3448] final synthesized dynamic #0#0 = [3448] [3448] o;
[3440] #L39:
[3440] {
[3465] {
[3462] [3462] hoisted dynamic a;
[3465] if([3457] [3457] [3457] [3457] [-1] [-1] #0#0 is core::List<dynamic> && [3457] [3457] [3457] [3457] [-1] [-1] #0#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} [-1] [-1] #C4) {
[3462] [3462] [3462] a = [3457] [3457] [-1] [-1] #0#0{core::List<dynamic>}.{core::List::[]}[3457]([3457] 0){(core::int) → dynamic};
[-1] [-1] [-1] #t47 = [3468] [3468] a;
[3465] break #L39;
}
}
[3486] {
[3483] [3483] hoisted dynamic a;
[3486] if([3477] [3477] [3475] [3475] [-1] [-1] #0#0 is core::Map<dynamic, dynamic> && [3477] [3477] [-1] [-1] #0#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}[3477]([-1] #C4){(core::Object?) → core::bool}) {
[3483] [3483] [3483] a = [3477] [3477] [-1] [-1] #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}[3477]([-1] #C4){(core::Object?) → dynamic};
[-1] [-1] [-1] #t47 = [3489] [3489] a;
[3486] break #L39;
}
}
[3498] {
[3498] if([3496] [3496] true) {
[-1] [-1] [-1] #t47 = [3501] [3501] null;
[3498] break #L39;
}
}
[3440] [3440] [3440] throw [3440] [3440] new _in::ReachabilityError::• [3440]([3440] "`null` encountered as case in a switch expression with a non-nullable type.");
}
} =>[-1] [-1] #t47;
}
[3515]static method switchExpressionEnum([3538] self::E o) → dynamic {
[3545] return [3552] [3552] block {
[-1] [-1] core::int #t48;
[3552] #L40:
[3552] switch([3560] [3560] o) /* isExplicitlyExhaustive, self::E */ {
[3573] #L41:
case [3571] [3571] #C3:
[3573] {
[3576] [3576] [3576] #t48 = [3576] [3576] 0;
[3576] break #L40;
}
[3587] #L42:
case [3585] [3585] #C6:
[3587] {
[3590] [3590] [3590] #t48 = [3590] [3590] 1;
[3590] break #L40;
}
[3601] #L43:
case [3599] [3599] #C9:
[3601] {
[3604] [3604] [3604] #t48 = [3604] [3604] 2;
[3604] break #L40;
}
[3552] #L44:
default:
[3552] [3552] [3552] throw [3552] [3552] new _in::ReachabilityError::• [3552]([3552] "`null` encountered as case in a switch expression with a non-nullable type.");
}
} =>[-1] [-1] #t48;
}
[3615]static method switchExpressionEnumWithGuard([3647] self::E o) → dynamic {
[3654] return [3661] [3661] block {
[-1] [-1] core::int #t49;
[3669] [3669] final synthesized self::E #0#0 = [3669] [3669] o;
[3661] #L45:
[3661] {
[3692] {
[3692] if([-1] [-1] [3680] [3680] [-1] [-1] #C3 =={core::Object::==}{(core::Object) → core::bool} [-1] [-1] #0#0 && [3687] [3687] true) {
[-1] [-1] [-1] #t49 = [3695] [3695] 0;
[3692] break #L45;
}
}
[3706] {
[3706] if([3704] [3704] [-1] [-1] #C6 =={core::Object::==}{(core::Object) → core::bool} [-1] [-1] #0#0) {
[-1] [-1] [-1] #t49 = [3709] [3709] 1;
[3706] break #L45;
}
}
[3718] {
[3718] if([3716] [3716] true) {
[-1] [-1] [-1] #t49 = [3721] [3721] 2;
[3718] break #L45;
}
}
[3661] [3661] [3661] throw [3661] [3661] new _in::ReachabilityError::• [3661]([3661] "`null` encountered as case in a switch expression with a non-nullable type.");
}
} =>[-1] [-1] #t49;
}
[3732]static method switchExpressionPrimitiveEquals([3764] dynamic o) → dynamic {
[3771] return [3778] [3778] block {
[-1] [-1] core::int #t50;
[3786] [3786] final synthesized dynamic #0#0 = [3786] [3786] o;
[3778] #L46:
[3778] {
[3820] {
[3820] if([3801] [3801] [-1] [-1] #C11 =={core::Object::==}{(core::Object) → core::bool} [-1] [-1] #0#0) {
[-1] [-1] [-1] #t50 = [3823] [3823] 0;
[3820] break #L46;
}
}
[3855] {
[3855] if([3836] [3836] [-1] [-1] #C12 =={core::Object::==}{(core::Object) → core::bool} [-1] [-1] #0#0) {
[-1] [-1] [-1] #t50 = [3858] [3858] 1;
[3855] break #L46;
}
}
[3867] {
[3867] if([3865] [3865] true) {
[-1] [-1] [-1] #t50 = [3870] [3870] 2;
[3867] break #L46;
}
}
[3778] [3778] [3778] throw [3778] [3778] new _in::ReachabilityError::• [3778]([3778] "`null` encountered as case in a switch expression with a non-nullable type.");
}
} =>[-1] [-1] #t50;
}
[3881]static method switchExpressionNonPrimitiveEquals([3916] dynamic o) → dynamic {
[3923] return [3930] [3930] block {
[-1] [-1] core::int #t51;
[3938] [3938] final synthesized dynamic #0#0 = [3938] [3938] o;
[3930] #L47:
[3930] {
[3975] {
[3975] if([3953] [3953] [-1] [-1] #C13 =={self::NonPrimitiveEquals::==}{(core::Object) → core::bool} [-1] [-1] #0#0) {
[-1] [-1] [-1] #t51 = [3978] [3978] 0;
[3975] break #L47;
}
}
[4013] {
[4013] if([3991] [3991] [-1] [-1] #C14 =={self::NonPrimitiveEquals::==}{(core::Object) → core::bool} [-1] [-1] #0#0) {
[-1] [-1] [-1] #t51 = [4016] [4016] 1;
[4013] break #L47;
}
}
[4025] {
[4025] if([4023] [4023] true) {
[-1] [-1] [-1] #t51 = [4028] [4028] 2;
[4025] break #L47;
}
}
[3930] [3930] [3930] throw [3930] [3930] new _in::ReachabilityError::• [3930]([3930] "`null` encountered as case in a switch expression with a non-nullable type.");
}
} =>[-1] [-1] #t51;
}
[4039]static method switchStatementSymbol([4068] core::Symbol s) → dynamic {
[4075] #L48:
[4075] {
[4083] [4083] final synthesized core::Symbol #0#0 = [4083] [4083] s;
[4092] {
[4092] if([4097] [4097] [-1] [-1] #C15 =={core::Symbol::==}{(core::Object) → core::bool} [-1] [-1] #0#0) {
[4092] {
[4107] return [4114] [4114] 0;
}
}
}
[4121] {
[4121] if([4132] [4132] [-1] [-1] #C16 =={core::Symbol::==}{(core::Object) → core::bool} [-1] [-1] #0#0) {
[4121] {
[4151] return [4158] [4158] 1;
}
}
}
[4165] {
[4165] {
[4165] {
[4180] return [4187] [4187] 2;
}
}
}
}
}
[4197]static method switchExpressionSymbol([4227] core::Symbol s) → dynamic {
[4234] return [4241] [4241] block {
[-1] [-1] core::int #t52;
[4249] [4249] final synthesized core::Symbol #0#0 = [4249] [4249] s;
[4241] #L49:
[4241] {
[4261] {
[4261] if([4258] [4258] [-1] [-1] #C15 =={core::Symbol::==}{(core::Object) → core::bool} [-1] [-1] #0#0) {
[-1] [-1] [-1] #t52 = [4264] [4264] 0;
[4261] break #L49;
}
}
[4289] {
[4289] if([4277] [4277] [-1] [-1] #C16 =={core::Symbol::==}{(core::Object) → core::bool} [-1] [-1] #0#0) {
[-1] [-1] [-1] #t52 = [4292] [4292] 1;
[4289] break #L49;
}
}
[4301] {
[4301] if([4299] [4299] true) {
[-1] [-1] [-1] #t52 = [4304] [4304] 2;
[4301] break #L49;
}
}
[4241] [4241] [4241] throw [4241] [4241] new _in::ReachabilityError::• [4241]([4241] "`null` encountered as case in a switch expression with a non-nullable type.");
}
} =>[-1] [-1] #t52;
}
constants {
#C1 = 0
#C2 = "a"
#C3 = self::E {index:#C1, _name:#C2}
#C4 = 1
#C5 = "b"
#C6 = self::E {index:#C4, _name:#C5}
#C7 = 2
#C8 = "c"
#C9 = self::E {index:#C7, _name:#C8}
#C10 = <self::E*>[#C3, #C6, #C9]
#C11 = self::PrimitiveEquals {field:#C1}
#C12 = self::PrimitiveEquals {field:#C4}
#C13 = self::NonPrimitiveEquals {field:#C1}
#C14 = self::NonPrimitiveEquals {field:#C4}
#C15 = #a
#C16 = #b
}
Constructor coverage from constants:
org-dartlang-testcase:///switch_encoding.dart:
- E. (from org-dartlang-testcase:///switch_encoding.dart:5:6)
- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
- PrimitiveEquals. (from org-dartlang-testcase:///switch_encoding.dart:10:9)
- NonPrimitiveEquals. (from org-dartlang-testcase:///switch_encoding.dart:16:9)