Switch String deriving to be an immediate deriver

This commit is contained in:
Ayaz Hafiz 2022-07-13 10:40:21 -04:00
parent c98ba441cf
commit 9a66e936a8
No known key found for this signature in database
GPG key ID: 0E2A37416A25EF58
7 changed files with 686 additions and 806 deletions

View file

@ -84,7 +84,7 @@ impl FlatEncodable {
Symbol::LIST_LIST => Ok(Key(FlatEncodableKey::List())),
Symbol::SET_SET => Ok(Key(FlatEncodableKey::Set())),
Symbol::DICT_DICT => Ok(Key(FlatEncodableKey::Dict())),
Symbol::STR_STR => Ok(Key(FlatEncodableKey::String)),
Symbol::STR_STR => Ok(Immediate(Symbol::ENCODE_STRING)),
_ => Err(Underivable),
},
FlatType::Record(fields, ext) => {

View file

@ -3,19 +3,6 @@ procedure #Derived.0 (#Derived.1):
let #Derived_gen.0 : {Str} = CallByName Encode.22 #Derived_gen.1;
ret #Derived_gen.0;
procedure #Derived.10 (#Derived.11):
let #Derived_gen.29 : {Str} = Struct {#Derived.11};
let #Derived_gen.28 : {Str} = CallByName Encode.22 #Derived_gen.29;
ret #Derived_gen.28;
procedure #Derived.12 (#Derived.13, #Derived.14, #Attr.12):
let #Derived.11 : Str = StructAtIndex 0 #Attr.12;
inc #Derived.11;
dec #Attr.12;
let #Derived_gen.32 : {Str} = CallByName Json.17 #Derived.11;
let #Derived_gen.31 : List U8 = CallByName Encode.23 #Derived.13 #Derived_gen.32 #Derived.14;
ret #Derived_gen.31;
procedure #Derived.2 (#Derived.3, #Derived.4, #Attr.12):
let #Derived.1 : Str = StructAtIndex 0 #Attr.12;
inc #Derived.1;
@ -38,7 +25,7 @@ procedure #Derived.7 (#Derived.8, #Derived.9, #Attr.12):
inc #Derived.6;
dec #Attr.12;
let #Derived_gen.21 : Str = "b";
let #Derived_gen.22 : {Str} = CallByName #Derived.10 #Derived.6;
let #Derived_gen.22 : {Str} = CallByName Json.17 #Derived.6;
let #Derived_gen.20 : {Str, {Str}} = Struct {#Derived_gen.21, #Derived_gen.22};
let #Derived_gen.19 : List {Str, {Str}} = Array [#Derived_gen.20];
let #Derived_gen.18 : {List {Str, {Str}}} = CallByName Json.19 #Derived_gen.19;
@ -60,9 +47,6 @@ procedure Encode.22 (Encode.93):
procedure Encode.22 (Encode.93):
ret Encode.93;
procedure Encode.22 (Encode.93):
ret Encode.93;
procedure Encode.23 (Encode.94, Encode.102, Encode.96):
let Encode.106 : List U8 = CallByName #Derived.2 Encode.94 Encode.96 Encode.102;
ret Encode.106;
@ -80,12 +64,8 @@ procedure Encode.23 (Encode.94, Encode.102, Encode.96):
ret Encode.125;
procedure Encode.23 (Encode.94, Encode.102, Encode.96):
let Encode.127 : List U8 = CallByName #Derived.12 Encode.94 Encode.96 Encode.102;
ret Encode.127;
procedure Encode.23 (Encode.94, Encode.102, Encode.96):
let Encode.137 : List U8 = CallByName Json.65 Encode.94 Encode.96 Encode.102;
ret Encode.137;
let Encode.128 : List U8 = CallByName Json.65 Encode.94 Encode.96 Encode.102;
ret Encode.128;
procedure Encode.25 (Encode.100, Encode.101):
let Encode.104 : List U8 = Array [];
@ -98,9 +78,9 @@ procedure Json.1 ():
ret Json.102;
procedure Json.17 (Json.64):
let Json.186 : {Str} = Struct {Json.64};
let Json.185 : {Str} = CallByName Encode.22 Json.186;
ret Json.185;
let Json.149 : {Str} = Struct {Json.64};
let Json.148 : {Str} = CallByName Encode.22 Json.149;
ret Json.148;
procedure Json.19 (Json.76):
let Json.104 : {List {Str, {Str}}} = Struct {Json.76};
@ -112,19 +92,19 @@ procedure Json.19 (Json.76):
let Json.145 : {List {Str, {Str}}} = CallByName Encode.22 Json.146;
ret Json.145;
procedure Json.65 (Json.66, Json.187, #Attr.12):
procedure Json.65 (Json.66, Json.150, #Attr.12):
let Json.64 : Str = StructAtIndex 0 #Attr.12;
inc Json.64;
dec #Attr.12;
let Json.196 : I32 = 34i64;
let Json.195 : U8 = CallByName Num.123 Json.196;
let Json.193 : List U8 = CallByName List.4 Json.66 Json.195;
let Json.194 : List U8 = CallByName Str.12 Json.64;
let Json.190 : List U8 = CallByName List.8 Json.193 Json.194;
let Json.192 : I32 = 34i64;
let Json.191 : U8 = CallByName Num.123 Json.192;
let Json.189 : List U8 = CallByName List.4 Json.190 Json.191;
ret Json.189;
let Json.190 : I32 = 34i64;
let Json.189 : U8 = CallByName Num.123 Json.190;
let Json.187 : List U8 = CallByName List.4 Json.66 Json.189;
let Json.188 : List U8 = CallByName Str.12 Json.64;
let Json.184 : List U8 = CallByName List.8 Json.187 Json.188;
let Json.186 : I32 = 34i64;
let Json.185 : U8 = CallByName Num.123 Json.186;
let Json.183 : List U8 = CallByName List.4 Json.184 Json.185;
ret Json.183;
procedure Json.77 (Json.78, Json.105, #Attr.12):
let Json.76 : List {Str, {Str}} = StructAtIndex 0 #Attr.12;
@ -150,21 +130,21 @@ procedure Json.77 (Json.78, Json.105, #Attr.12):
let Json.76 : List {Str, {Str}} = StructAtIndex 0 #Attr.12;
inc Json.76;
dec #Attr.12;
let Json.178 : I32 = 123i64;
let Json.177 : U8 = CallByName Num.123 Json.178;
let Json.80 : List U8 = CallByName List.4 Json.78 Json.177;
let Json.176 : U64 = CallByName List.6 Json.76;
let Json.153 : {List U8, U64} = Struct {Json.80, Json.176};
let Json.154 : {} = Struct {};
let Json.152 : {List U8, U64} = CallByName List.18 Json.76 Json.153 Json.154;
let Json.181 : I32 = 123i64;
let Json.180 : U8 = CallByName Num.123 Json.181;
let Json.80 : List U8 = CallByName List.4 Json.78 Json.180;
let Json.179 : U64 = CallByName List.6 Json.76;
let Json.156 : {List U8, U64} = Struct {Json.80, Json.179};
let Json.157 : {} = Struct {};
let Json.155 : {List U8, U64} = CallByName List.18 Json.76 Json.156 Json.157;
dec Json.76;
let Json.82 : List U8 = StructAtIndex 0 Json.152;
let Json.82 : List U8 = StructAtIndex 0 Json.155;
inc Json.82;
dec Json.152;
let Json.151 : I32 = 125i64;
let Json.150 : U8 = CallByName Num.123 Json.151;
let Json.149 : List U8 = CallByName List.4 Json.82 Json.150;
ret Json.149;
dec Json.155;
let Json.154 : I32 = 125i64;
let Json.153 : U8 = CallByName Num.123 Json.154;
let Json.152 : List U8 = CallByName List.4 Json.82 Json.153;
ret Json.152;
procedure Json.79 (Json.107, Json.108):
let Json.85 : Str = StructAtIndex 0 Json.108;
@ -215,34 +195,34 @@ procedure Json.79 (Json.107, Json.108):
inc Json.83;
let Json.84 : U64 = StructAtIndex 1 Json.107;
dec Json.107;
let Json.175 : I32 = 34i64;
let Json.174 : U8 = CallByName Num.123 Json.175;
let Json.172 : List U8 = CallByName List.4 Json.83 Json.174;
let Json.173 : List U8 = CallByName Str.12 Json.85;
let Json.169 : List U8 = CallByName List.8 Json.172 Json.173;
let Json.171 : I32 = 34i64;
let Json.178 : I32 = 34i64;
let Json.177 : U8 = CallByName Num.123 Json.178;
let Json.175 : List U8 = CallByName List.4 Json.83 Json.177;
let Json.176 : List U8 = CallByName Str.12 Json.85;
let Json.172 : List U8 = CallByName List.8 Json.175 Json.176;
let Json.174 : I32 = 34i64;
let Json.173 : U8 = CallByName Num.123 Json.174;
let Json.169 : List U8 = CallByName List.4 Json.172 Json.173;
let Json.171 : I32 = 58i64;
let Json.170 : U8 = CallByName Num.123 Json.171;
let Json.166 : List U8 = CallByName List.4 Json.169 Json.170;
let Json.168 : I32 = 58i64;
let Json.167 : U8 = CallByName Num.123 Json.168;
let Json.164 : List U8 = CallByName List.4 Json.166 Json.167;
let Json.165 : {} = Struct {};
let Json.87 : List U8 = CallByName Encode.23 Json.164 Json.86 Json.165;
joinpoint Json.159 Json.88:
let Json.157 : U64 = 1i64;
let Json.156 : U64 = CallByName Num.20 Json.84 Json.157;
let Json.155 : {List U8, U64} = Struct {Json.88, Json.156};
ret Json.155;
let Json.167 : List U8 = CallByName List.4 Json.169 Json.170;
let Json.168 : {} = Struct {};
let Json.87 : List U8 = CallByName Encode.23 Json.167 Json.86 Json.168;
joinpoint Json.162 Json.88:
let Json.160 : U64 = 1i64;
let Json.159 : U64 = CallByName Num.20 Json.84 Json.160;
let Json.158 : {List U8, U64} = Struct {Json.88, Json.159};
ret Json.158;
in
let Json.163 : U64 = 0i64;
let Json.160 : Int1 = CallByName Num.24 Json.84 Json.163;
if Json.160 then
let Json.162 : I32 = 44i64;
let Json.161 : U8 = CallByName Num.123 Json.162;
let Json.158 : List U8 = CallByName List.4 Json.87 Json.161;
jump Json.159 Json.158;
let Json.166 : U64 = 0i64;
let Json.163 : Int1 = CallByName Num.24 Json.84 Json.166;
if Json.163 then
let Json.165 : I32 = 44i64;
let Json.164 : U8 = CallByName Num.123 Json.165;
let Json.161 : List U8 = CallByName List.4 Json.87 Json.164;
jump Json.162 Json.161;
else
jump Json.159 Json.87;
jump Json.162 Json.87;
procedure List.122 (List.123, List.124, #Attr.12):
let List.121 : {} = StructAtIndex 0 #Attr.12;
@ -252,9 +232,9 @@ procedure List.122 (List.123, List.124, #Attr.12):
procedure List.122 (List.123, List.124, #Attr.12):
let List.121 : {} = StructAtIndex 0 #Attr.12;
let List.418 : {List U8, U64} = CallByName Json.79 List.123 List.124;
let List.417 : [C [], C {List U8, U64}] = TagId(1) List.418;
ret List.417;
let List.425 : {List U8, U64} = CallByName Json.79 List.123 List.124;
let List.424 : [C [], C {List U8, U64}] = TagId(1) List.425;
ret List.424;
procedure List.18 (List.119, List.120, List.121):
let List.321 : {{}} = Struct {List.121};
@ -274,27 +254,27 @@ procedure List.18 (List.119, List.120, List.121):
ret List.317;
procedure List.18 (List.119, List.120, List.121):
let List.395 : {{}} = Struct {List.121};
let List.389 : [C [], C {List U8, U64}] = CallByName List.63 List.119 List.120 List.395;
let List.392 : U8 = 1i64;
let List.393 : U8 = GetTagId List.389;
let List.394 : Int1 = lowlevel Eq List.392 List.393;
if List.394 then
let List.126 : {List U8, U64} = UnionAtIndex (Id 1) (Index 0) List.389;
let List.401 : {{}} = Struct {List.121};
let List.395 : [C [], C {List U8, U64}] = CallByName List.63 List.119 List.120 List.401;
let List.398 : U8 = 1i64;
let List.399 : U8 = GetTagId List.395;
let List.400 : Int1 = lowlevel Eq List.398 List.399;
if List.400 then
let List.126 : {List U8, U64} = UnionAtIndex (Id 1) (Index 0) List.395;
inc List.126;
dec List.389;
dec List.395;
ret List.126;
else
let List.127 : [] = UnionAtIndex (Id 0) (Index 0) List.389;
dec List.389;
let List.391 : {List U8, U64} = CallByName List.64 List.127;
ret List.391;
let List.127 : [] = UnionAtIndex (Id 0) (Index 0) List.395;
dec List.395;
let List.397 : {List U8, U64} = CallByName List.64 List.127;
ret List.397;
procedure List.4 (List.90, List.91):
let List.450 : U64 = 1i64;
let List.449 : List U8 = CallByName List.65 List.90 List.450;
let List.448 : List U8 = CallByName List.66 List.449 List.91;
ret List.448;
let List.394 : U64 = 1i64;
let List.393 : List U8 = CallByName List.65 List.90 List.394;
let List.392 : List U8 = CallByName List.66 List.393 List.91;
ret List.392;
procedure List.6 (#Attr.2):
let List.295 : U64 = lowlevel ListLen #Attr.2;
@ -305,16 +285,16 @@ procedure List.6 (#Attr.2):
ret List.323;
procedure List.6 (#Attr.2):
let List.397 : U64 = lowlevel ListLen #Attr.2;
ret List.397;
let List.404 : U64 = lowlevel ListLen #Attr.2;
ret List.404;
procedure List.60 (#Attr.2, #Attr.3):
let List.342 : {Str, {Str}} = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.342;
procedure List.60 (#Attr.2, #Attr.3):
let List.416 : {Str, {Str}} = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.416;
let List.423 : {Str, {Str}} = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.423;
procedure List.63 (List.283, List.284, List.285):
let List.328 : U64 = 0i64;
@ -323,22 +303,22 @@ procedure List.63 (List.283, List.284, List.285):
ret List.327;
procedure List.63 (List.283, List.284, List.285):
let List.402 : U64 = 0i64;
let List.403 : U64 = CallByName List.6 List.283;
let List.401 : [C [], C {List U8, U64}] = CallByName List.77 List.283 List.284 List.285 List.402 List.403;
ret List.401;
let List.409 : U64 = 0i64;
let List.410 : U64 = CallByName List.6 List.283;
let List.408 : [C [], C {List U8, U64}] = CallByName List.77 List.283 List.284 List.285 List.409 List.410;
ret List.408;
procedure List.64 (#Attr.2):
let List.400 : {List U8, U64} = lowlevel Unreachable #Attr.2;
ret List.400;
let List.407 : {List U8, U64} = lowlevel Unreachable #Attr.2;
ret List.407;
procedure List.65 (#Attr.2, #Attr.3):
let List.453 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.453;
let List.406 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.406;
procedure List.66 (#Attr.2, #Attr.3):
let List.452 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.452;
let List.405 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.405;
procedure List.77 (List.361, List.362, List.363, List.364, List.365):
joinpoint List.330 List.286 List.287 List.288 List.289 List.290:
@ -367,60 +347,60 @@ procedure List.77 (List.361, List.362, List.363, List.364, List.365):
in
jump List.330 List.361 List.362 List.363 List.364 List.365;
procedure List.77 (List.435, List.436, List.437, List.438, List.439):
joinpoint List.404 List.286 List.287 List.288 List.289 List.290:
let List.406 : Int1 = CallByName Num.22 List.289 List.290;
if List.406 then
let List.415 : {Str, {Str}} = CallByName List.60 List.286 List.289;
let List.407 : [C [], C {List U8, U64}] = CallByName List.122 List.287 List.415 List.288;
let List.412 : U8 = 1i64;
let List.413 : U8 = GetTagId List.407;
let List.414 : Int1 = lowlevel Eq List.412 List.413;
if List.414 then
let List.291 : {List U8, U64} = UnionAtIndex (Id 1) (Index 0) List.407;
procedure List.77 (List.442, List.443, List.444, List.445, List.446):
joinpoint List.411 List.286 List.287 List.288 List.289 List.290:
let List.413 : Int1 = CallByName Num.22 List.289 List.290;
if List.413 then
let List.422 : {Str, {Str}} = CallByName List.60 List.286 List.289;
let List.414 : [C [], C {List U8, U64}] = CallByName List.122 List.287 List.422 List.288;
let List.419 : U8 = 1i64;
let List.420 : U8 = GetTagId List.414;
let List.421 : Int1 = lowlevel Eq List.419 List.420;
if List.421 then
let List.291 : {List U8, U64} = UnionAtIndex (Id 1) (Index 0) List.414;
inc List.291;
dec List.407;
let List.410 : U64 = 1i64;
let List.409 : U64 = CallByName Num.19 List.289 List.410;
jump List.404 List.286 List.291 List.288 List.409 List.290;
dec List.414;
let List.417 : U64 = 1i64;
let List.416 : U64 = CallByName Num.19 List.289 List.417;
jump List.411 List.286 List.291 List.288 List.416 List.290;
else
let List.292 : [] = UnionAtIndex (Id 0) (Index 0) List.407;
dec List.407;
let List.411 : [C [], C {List U8, U64}] = TagId(0) List.292;
ret List.411;
let List.292 : [] = UnionAtIndex (Id 0) (Index 0) List.414;
dec List.414;
let List.418 : [C [], C {List U8, U64}] = TagId(0) List.292;
ret List.418;
else
let List.405 : [C [], C {List U8, U64}] = TagId(1) List.287;
ret List.405;
let List.412 : [C [], C {List U8, U64}] = TagId(1) List.287;
ret List.412;
in
jump List.404 List.435 List.436 List.437 List.438 List.439;
jump List.411 List.442 List.443 List.444 List.445 List.446;
procedure List.8 (#Attr.2, #Attr.3):
let List.451 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.451;
let List.403 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.403;
procedure Num.123 (#Attr.2):
let Num.296 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.296;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.284 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.284;
procedure Num.20 (#Attr.2, #Attr.3):
let Num.282 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.282;
procedure Num.22 (#Attr.2, #Attr.3):
let Num.285 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.285;
procedure Num.24 (#Attr.2, #Attr.3):
let Num.283 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
let Num.283 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.283;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.286 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.286;
procedure Num.20 (#Attr.2, #Attr.3):
let Num.284 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.284;
procedure Num.22 (#Attr.2, #Attr.3):
let Num.287 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.287;
procedure Num.24 (#Attr.2, #Attr.3):
let Num.285 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.285;
procedure Str.12 (#Attr.2):
let Str.213 : List U8 = lowlevel StrToUtf8 #Attr.2;
ret Str.213;
let Str.212 : List U8 = lowlevel StrToUtf8 #Attr.2;
ret Str.212;
procedure Str.48 (#Attr.2, #Attr.3, #Attr.4):
let Str.204 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8Range #Attr.2 #Attr.3 #Attr.4;

View file

@ -8,29 +8,13 @@ procedure #Derived.2 (#Derived.3, #Derived.4, #Attr.12):
inc #Derived.1;
dec #Attr.12;
let #Derived_gen.7 : Str = "a";
let #Derived_gen.8 : {Str} = CallByName #Derived.5 #Derived.1;
let #Derived_gen.8 : {Str} = CallByName Json.17 #Derived.1;
let #Derived_gen.6 : {Str, {Str}} = Struct {#Derived_gen.7, #Derived_gen.8};
let #Derived_gen.5 : List {Str, {Str}} = Array [#Derived_gen.6];
let #Derived_gen.4 : {List {Str, {Str}}} = CallByName Json.19 #Derived_gen.5;
let #Derived_gen.3 : List U8 = CallByName Encode.23 #Derived.3 #Derived_gen.4 #Derived.4;
ret #Derived_gen.3;
procedure #Derived.5 (#Derived.6):
let #Derived_gen.15 : {Str} = Struct {#Derived.6};
let #Derived_gen.14 : {Str} = CallByName Encode.22 #Derived_gen.15;
ret #Derived_gen.14;
procedure #Derived.7 (#Derived.8, #Derived.9, #Attr.12):
let #Derived.6 : Str = StructAtIndex 0 #Attr.12;
inc #Derived.6;
dec #Attr.12;
let #Derived_gen.18 : {Str} = CallByName Json.17 #Derived.6;
let #Derived_gen.17 : List U8 = CallByName Encode.23 #Derived.8 #Derived_gen.18 #Derived.9;
ret #Derived_gen.17;
procedure Encode.22 (Encode.93):
ret Encode.93;
procedure Encode.22 (Encode.93):
ret Encode.93;
@ -49,12 +33,8 @@ procedure Encode.23 (Encode.94, Encode.102, Encode.96):
ret Encode.113;
procedure Encode.23 (Encode.94, Encode.102, Encode.96):
let Encode.115 : List U8 = CallByName #Derived.7 Encode.94 Encode.96 Encode.102;
ret Encode.115;
procedure Encode.23 (Encode.94, Encode.102, Encode.96):
let Encode.125 : List U8 = CallByName Json.65 Encode.94 Encode.96 Encode.102;
ret Encode.125;
let Encode.116 : List U8 = CallByName Json.65 Encode.94 Encode.96 Encode.102;
ret Encode.116;
procedure Encode.25 (Encode.100, Encode.101):
let Encode.104 : List U8 = Array [];
@ -67,201 +47,201 @@ procedure Json.1 ():
ret Json.102;
procedure Json.17 (Json.64):
let Json.146 : {Str} = Struct {Json.64};
let Json.145 : {Str} = CallByName Encode.22 Json.146;
ret Json.145;
let Json.107 : {Str} = Struct {Json.64};
let Json.106 : {Str} = CallByName Encode.22 Json.107;
ret Json.106;
procedure Json.19 (Json.76):
let Json.104 : {List {Str, {Str}}} = Struct {Json.76};
let Json.103 : {List {Str, {Str}}} = CallByName Encode.22 Json.104;
ret Json.103;
procedure Json.65 (Json.66, Json.147, #Attr.12):
procedure Json.65 (Json.66, Json.108, #Attr.12):
let Json.64 : Str = StructAtIndex 0 #Attr.12;
inc Json.64;
dec #Attr.12;
let Json.156 : I32 = 34i64;
let Json.155 : U8 = CallByName Num.123 Json.156;
let Json.153 : List U8 = CallByName List.4 Json.66 Json.155;
let Json.154 : List U8 = CallByName Str.12 Json.64;
let Json.150 : List U8 = CallByName List.8 Json.153 Json.154;
let Json.152 : I32 = 34i64;
let Json.151 : U8 = CallByName Num.123 Json.152;
let Json.149 : List U8 = CallByName List.4 Json.150 Json.151;
ret Json.149;
let Json.150 : I32 = 34i64;
let Json.149 : U8 = CallByName Num.123 Json.150;
let Json.147 : List U8 = CallByName List.4 Json.66 Json.149;
let Json.148 : List U8 = CallByName Str.12 Json.64;
let Json.144 : List U8 = CallByName List.8 Json.147 Json.148;
let Json.146 : I32 = 34i64;
let Json.145 : U8 = CallByName Num.123 Json.146;
let Json.143 : List U8 = CallByName List.4 Json.144 Json.145;
ret Json.143;
procedure Json.77 (Json.78, Json.105, #Attr.12):
let Json.76 : List {Str, {Str}} = StructAtIndex 0 #Attr.12;
inc Json.76;
dec #Attr.12;
let Json.138 : I32 = 123i64;
let Json.137 : U8 = CallByName Num.123 Json.138;
let Json.80 : List U8 = CallByName List.4 Json.78 Json.137;
let Json.136 : U64 = CallByName List.6 Json.76;
let Json.113 : {List U8, U64} = Struct {Json.80, Json.136};
let Json.114 : {} = Struct {};
let Json.112 : {List U8, U64} = CallByName List.18 Json.76 Json.113 Json.114;
let Json.141 : I32 = 123i64;
let Json.140 : U8 = CallByName Num.123 Json.141;
let Json.80 : List U8 = CallByName List.4 Json.78 Json.140;
let Json.139 : U64 = CallByName List.6 Json.76;
let Json.116 : {List U8, U64} = Struct {Json.80, Json.139};
let Json.117 : {} = Struct {};
let Json.115 : {List U8, U64} = CallByName List.18 Json.76 Json.116 Json.117;
dec Json.76;
let Json.82 : List U8 = StructAtIndex 0 Json.112;
let Json.82 : List U8 = StructAtIndex 0 Json.115;
inc Json.82;
dec Json.112;
let Json.111 : I32 = 125i64;
let Json.110 : U8 = CallByName Num.123 Json.111;
let Json.109 : List U8 = CallByName List.4 Json.82 Json.110;
ret Json.109;
dec Json.115;
let Json.114 : I32 = 125i64;
let Json.113 : U8 = CallByName Num.123 Json.114;
let Json.112 : List U8 = CallByName List.4 Json.82 Json.113;
ret Json.112;
procedure Json.79 (Json.107, Json.108):
let Json.85 : Str = StructAtIndex 0 Json.108;
procedure Json.79 (Json.110, Json.111):
let Json.85 : Str = StructAtIndex 0 Json.111;
inc Json.85;
let Json.86 : {Str} = StructAtIndex 1 Json.108;
let Json.86 : {Str} = StructAtIndex 1 Json.111;
inc Json.86;
dec Json.108;
let Json.83 : List U8 = StructAtIndex 0 Json.107;
dec Json.111;
let Json.83 : List U8 = StructAtIndex 0 Json.110;
inc Json.83;
let Json.84 : U64 = StructAtIndex 1 Json.107;
dec Json.107;
let Json.135 : I32 = 34i64;
let Json.134 : U8 = CallByName Num.123 Json.135;
let Json.132 : List U8 = CallByName List.4 Json.83 Json.134;
let Json.133 : List U8 = CallByName Str.12 Json.85;
let Json.129 : List U8 = CallByName List.8 Json.132 Json.133;
let Json.131 : I32 = 34i64;
let Json.84 : U64 = StructAtIndex 1 Json.110;
dec Json.110;
let Json.138 : I32 = 34i64;
let Json.137 : U8 = CallByName Num.123 Json.138;
let Json.135 : List U8 = CallByName List.4 Json.83 Json.137;
let Json.136 : List U8 = CallByName Str.12 Json.85;
let Json.132 : List U8 = CallByName List.8 Json.135 Json.136;
let Json.134 : I32 = 34i64;
let Json.133 : U8 = CallByName Num.123 Json.134;
let Json.129 : List U8 = CallByName List.4 Json.132 Json.133;
let Json.131 : I32 = 58i64;
let Json.130 : U8 = CallByName Num.123 Json.131;
let Json.126 : List U8 = CallByName List.4 Json.129 Json.130;
let Json.128 : I32 = 58i64;
let Json.127 : U8 = CallByName Num.123 Json.128;
let Json.124 : List U8 = CallByName List.4 Json.126 Json.127;
let Json.125 : {} = Struct {};
let Json.87 : List U8 = CallByName Encode.23 Json.124 Json.86 Json.125;
joinpoint Json.119 Json.88:
let Json.117 : U64 = 1i64;
let Json.116 : U64 = CallByName Num.20 Json.84 Json.117;
let Json.115 : {List U8, U64} = Struct {Json.88, Json.116};
ret Json.115;
let Json.127 : List U8 = CallByName List.4 Json.129 Json.130;
let Json.128 : {} = Struct {};
let Json.87 : List U8 = CallByName Encode.23 Json.127 Json.86 Json.128;
joinpoint Json.122 Json.88:
let Json.120 : U64 = 1i64;
let Json.119 : U64 = CallByName Num.20 Json.84 Json.120;
let Json.118 : {List U8, U64} = Struct {Json.88, Json.119};
ret Json.118;
in
let Json.123 : U64 = 0i64;
let Json.120 : Int1 = CallByName Num.24 Json.84 Json.123;
if Json.120 then
let Json.122 : I32 = 44i64;
let Json.121 : U8 = CallByName Num.123 Json.122;
let Json.118 : List U8 = CallByName List.4 Json.87 Json.121;
jump Json.119 Json.118;
let Json.126 : U64 = 0i64;
let Json.123 : Int1 = CallByName Num.24 Json.84 Json.126;
if Json.123 then
let Json.125 : I32 = 44i64;
let Json.124 : U8 = CallByName Num.123 Json.125;
let Json.121 : List U8 = CallByName List.4 Json.87 Json.124;
jump Json.122 Json.121;
else
jump Json.119 Json.87;
jump Json.122 Json.87;
procedure List.122 (List.123, List.124, #Attr.12):
let List.121 : {} = StructAtIndex 0 #Attr.12;
let List.344 : {List U8, U64} = CallByName Json.79 List.123 List.124;
let List.343 : [C [], C {List U8, U64}] = TagId(1) List.344;
ret List.343;
let List.351 : {List U8, U64} = CallByName Json.79 List.123 List.124;
let List.350 : [C [], C {List U8, U64}] = TagId(1) List.351;
ret List.350;
procedure List.18 (List.119, List.120, List.121):
let List.321 : {{}} = Struct {List.121};
let List.315 : [C [], C {List U8, U64}] = CallByName List.63 List.119 List.120 List.321;
let List.318 : U8 = 1i64;
let List.319 : U8 = GetTagId List.315;
let List.320 : Int1 = lowlevel Eq List.318 List.319;
if List.320 then
let List.126 : {List U8, U64} = UnionAtIndex (Id 1) (Index 0) List.315;
let List.327 : {{}} = Struct {List.121};
let List.321 : [C [], C {List U8, U64}] = CallByName List.63 List.119 List.120 List.327;
let List.324 : U8 = 1i64;
let List.325 : U8 = GetTagId List.321;
let List.326 : Int1 = lowlevel Eq List.324 List.325;
if List.326 then
let List.126 : {List U8, U64} = UnionAtIndex (Id 1) (Index 0) List.321;
inc List.126;
dec List.315;
dec List.321;
ret List.126;
else
let List.127 : [] = UnionAtIndex (Id 0) (Index 0) List.315;
dec List.315;
let List.317 : {List U8, U64} = CallByName List.64 List.127;
ret List.317;
let List.127 : [] = UnionAtIndex (Id 0) (Index 0) List.321;
dec List.321;
let List.323 : {List U8, U64} = CallByName List.64 List.127;
ret List.323;
procedure List.4 (List.90, List.91):
let List.376 : U64 = 1i64;
let List.375 : List U8 = CallByName List.65 List.90 List.376;
let List.374 : List U8 = CallByName List.66 List.375 List.91;
ret List.374;
let List.320 : U64 = 1i64;
let List.319 : List U8 = CallByName List.65 List.90 List.320;
let List.318 : List U8 = CallByName List.66 List.319 List.91;
ret List.318;
procedure List.6 (#Attr.2):
let List.295 : U64 = lowlevel ListLen #Attr.2;
ret List.295;
procedure List.6 (#Attr.2):
let List.323 : U64 = lowlevel ListLen #Attr.2;
ret List.323;
let List.330 : U64 = lowlevel ListLen #Attr.2;
ret List.330;
procedure List.60 (#Attr.2, #Attr.3):
let List.342 : {Str, {Str}} = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.342;
let List.349 : {Str, {Str}} = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.349;
procedure List.63 (List.283, List.284, List.285):
let List.328 : U64 = 0i64;
let List.329 : U64 = CallByName List.6 List.283;
let List.327 : [C [], C {List U8, U64}] = CallByName List.77 List.283 List.284 List.285 List.328 List.329;
ret List.327;
let List.335 : U64 = 0i64;
let List.336 : U64 = CallByName List.6 List.283;
let List.334 : [C [], C {List U8, U64}] = CallByName List.77 List.283 List.284 List.285 List.335 List.336;
ret List.334;
procedure List.64 (#Attr.2):
let List.326 : {List U8, U64} = lowlevel Unreachable #Attr.2;
ret List.326;
let List.333 : {List U8, U64} = lowlevel Unreachable #Attr.2;
ret List.333;
procedure List.65 (#Attr.2, #Attr.3):
let List.379 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.379;
let List.332 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.332;
procedure List.66 (#Attr.2, #Attr.3):
let List.378 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.378;
let List.331 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.331;
procedure List.77 (List.361, List.362, List.363, List.364, List.365):
joinpoint List.330 List.286 List.287 List.288 List.289 List.290:
let List.332 : Int1 = CallByName Num.22 List.289 List.290;
if List.332 then
let List.341 : {Str, {Str}} = CallByName List.60 List.286 List.289;
let List.333 : [C [], C {List U8, U64}] = CallByName List.122 List.287 List.341 List.288;
let List.338 : U8 = 1i64;
let List.339 : U8 = GetTagId List.333;
let List.340 : Int1 = lowlevel Eq List.338 List.339;
if List.340 then
let List.291 : {List U8, U64} = UnionAtIndex (Id 1) (Index 0) List.333;
procedure List.77 (List.368, List.369, List.370, List.371, List.372):
joinpoint List.337 List.286 List.287 List.288 List.289 List.290:
let List.339 : Int1 = CallByName Num.22 List.289 List.290;
if List.339 then
let List.348 : {Str, {Str}} = CallByName List.60 List.286 List.289;
let List.340 : [C [], C {List U8, U64}] = CallByName List.122 List.287 List.348 List.288;
let List.345 : U8 = 1i64;
let List.346 : U8 = GetTagId List.340;
let List.347 : Int1 = lowlevel Eq List.345 List.346;
if List.347 then
let List.291 : {List U8, U64} = UnionAtIndex (Id 1) (Index 0) List.340;
inc List.291;
dec List.333;
let List.336 : U64 = 1i64;
let List.335 : U64 = CallByName Num.19 List.289 List.336;
jump List.330 List.286 List.291 List.288 List.335 List.290;
dec List.340;
let List.343 : U64 = 1i64;
let List.342 : U64 = CallByName Num.19 List.289 List.343;
jump List.337 List.286 List.291 List.288 List.342 List.290;
else
let List.292 : [] = UnionAtIndex (Id 0) (Index 0) List.333;
dec List.333;
let List.337 : [C [], C {List U8, U64}] = TagId(0) List.292;
ret List.337;
let List.292 : [] = UnionAtIndex (Id 0) (Index 0) List.340;
dec List.340;
let List.344 : [C [], C {List U8, U64}] = TagId(0) List.292;
ret List.344;
else
let List.331 : [C [], C {List U8, U64}] = TagId(1) List.287;
ret List.331;
let List.338 : [C [], C {List U8, U64}] = TagId(1) List.287;
ret List.338;
in
jump List.330 List.361 List.362 List.363 List.364 List.365;
jump List.337 List.368 List.369 List.370 List.371 List.372;
procedure List.8 (#Attr.2, #Attr.3):
let List.377 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.377;
let List.329 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.329;
procedure Num.123 (#Attr.2):
let Num.277 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.277;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.265 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.265;
procedure Num.20 (#Attr.2, #Attr.3):
let Num.263 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.263;
procedure Num.22 (#Attr.2, #Attr.3):
let Num.266 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.266;
procedure Num.24 (#Attr.2, #Attr.3):
let Num.264 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
let Num.264 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.264;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.267 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.267;
procedure Num.20 (#Attr.2, #Attr.3):
let Num.265 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.265;
procedure Num.22 (#Attr.2, #Attr.3):
let Num.268 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.268;
procedure Num.24 (#Attr.2, #Attr.3):
let Num.266 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.266;
procedure Str.12 (#Attr.2):
let Str.211 : List U8 = lowlevel StrToUtf8 #Attr.2;
ret Str.211;
let Str.210 : List U8 = lowlevel StrToUtf8 #Attr.2;
ret Str.210;
procedure Str.48 (#Attr.2, #Attr.3, #Attr.4):
let Str.204 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8Range #Attr.2 #Attr.3 #Attr.4;

View file

@ -10,35 +10,19 @@ procedure #Derived.2 (#Derived.3, #Derived.4, #Attr.12):
let #Derived_gen.11 : Str = "a";
let #Derived_gen.13 : Str = StructAtIndex 0 #Derived.1;
inc #Derived_gen.13;
let #Derived_gen.12 : {Str} = CallByName #Derived.5 #Derived_gen.13;
let #Derived_gen.12 : {Str} = CallByName Json.17 #Derived_gen.13;
let #Derived_gen.6 : {Str, {Str}} = Struct {#Derived_gen.11, #Derived_gen.12};
let #Derived_gen.8 : Str = "b";
let #Derived_gen.10 : Str = StructAtIndex 1 #Derived.1;
inc #Derived_gen.10;
dec #Derived.1;
let #Derived_gen.9 : {Str} = CallByName #Derived.5 #Derived_gen.10;
let #Derived_gen.9 : {Str} = CallByName Json.17 #Derived_gen.10;
let #Derived_gen.7 : {Str, {Str}} = Struct {#Derived_gen.8, #Derived_gen.9};
let #Derived_gen.5 : List {Str, {Str}} = Array [#Derived_gen.6, #Derived_gen.7];
let #Derived_gen.4 : {List {Str, {Str}}} = CallByName Json.19 #Derived_gen.5;
let #Derived_gen.3 : List U8 = CallByName Encode.23 #Derived.3 #Derived_gen.4 #Derived.4;
ret #Derived_gen.3;
procedure #Derived.5 (#Derived.6):
let #Derived_gen.21 : {Str} = Struct {#Derived.6};
let #Derived_gen.20 : {Str} = CallByName Encode.22 #Derived_gen.21;
ret #Derived_gen.20;
procedure #Derived.7 (#Derived.8, #Derived.9, #Attr.12):
let #Derived.6 : Str = StructAtIndex 0 #Attr.12;
inc #Derived.6;
dec #Attr.12;
let #Derived_gen.24 : {Str} = CallByName Json.17 #Derived.6;
let #Derived_gen.23 : List U8 = CallByName Encode.23 #Derived.8 #Derived_gen.24 #Derived.9;
ret #Derived_gen.23;
procedure Encode.22 (Encode.93):
ret Encode.93;
procedure Encode.22 (Encode.93):
ret Encode.93;
@ -57,12 +41,8 @@ procedure Encode.23 (Encode.94, Encode.102, Encode.96):
ret Encode.113;
procedure Encode.23 (Encode.94, Encode.102, Encode.96):
let Encode.115 : List U8 = CallByName #Derived.7 Encode.94 Encode.96 Encode.102;
ret Encode.115;
procedure Encode.23 (Encode.94, Encode.102, Encode.96):
let Encode.126 : List U8 = CallByName Json.65 Encode.94 Encode.96 Encode.102;
ret Encode.126;
let Encode.117 : List U8 = CallByName Json.65 Encode.94 Encode.96 Encode.102;
ret Encode.117;
procedure Encode.25 (Encode.100, Encode.101):
let Encode.104 : List U8 = Array [];
@ -75,201 +55,201 @@ procedure Json.1 ():
ret Json.102;
procedure Json.17 (Json.64):
let Json.146 : {Str} = Struct {Json.64};
let Json.145 : {Str} = CallByName Encode.22 Json.146;
ret Json.145;
let Json.110 : {Str} = Struct {Json.64};
let Json.109 : {Str} = CallByName Encode.22 Json.110;
ret Json.109;
procedure Json.19 (Json.76):
let Json.104 : {List {Str, {Str}}} = Struct {Json.76};
let Json.103 : {List {Str, {Str}}} = CallByName Encode.22 Json.104;
ret Json.103;
procedure Json.65 (Json.66, Json.147, #Attr.12):
procedure Json.65 (Json.66, Json.108, #Attr.12):
let Json.64 : Str = StructAtIndex 0 #Attr.12;
inc Json.64;
dec #Attr.12;
let Json.156 : I32 = 34i64;
let Json.155 : U8 = CallByName Num.123 Json.156;
let Json.153 : List U8 = CallByName List.4 Json.66 Json.155;
let Json.154 : List U8 = CallByName Str.12 Json.64;
let Json.150 : List U8 = CallByName List.8 Json.153 Json.154;
let Json.152 : I32 = 34i64;
let Json.151 : U8 = CallByName Num.123 Json.152;
let Json.149 : List U8 = CallByName List.4 Json.150 Json.151;
ret Json.149;
let Json.153 : I32 = 34i64;
let Json.152 : U8 = CallByName Num.123 Json.153;
let Json.150 : List U8 = CallByName List.4 Json.66 Json.152;
let Json.151 : List U8 = CallByName Str.12 Json.64;
let Json.147 : List U8 = CallByName List.8 Json.150 Json.151;
let Json.149 : I32 = 34i64;
let Json.148 : U8 = CallByName Num.123 Json.149;
let Json.146 : List U8 = CallByName List.4 Json.147 Json.148;
ret Json.146;
procedure Json.77 (Json.78, Json.105, #Attr.12):
let Json.76 : List {Str, {Str}} = StructAtIndex 0 #Attr.12;
inc Json.76;
dec #Attr.12;
let Json.138 : I32 = 123i64;
let Json.137 : U8 = CallByName Num.123 Json.138;
let Json.80 : List U8 = CallByName List.4 Json.78 Json.137;
let Json.136 : U64 = CallByName List.6 Json.76;
let Json.113 : {List U8, U64} = Struct {Json.80, Json.136};
let Json.114 : {} = Struct {};
let Json.112 : {List U8, U64} = CallByName List.18 Json.76 Json.113 Json.114;
let Json.144 : I32 = 123i64;
let Json.143 : U8 = CallByName Num.123 Json.144;
let Json.80 : List U8 = CallByName List.4 Json.78 Json.143;
let Json.142 : U64 = CallByName List.6 Json.76;
let Json.119 : {List U8, U64} = Struct {Json.80, Json.142};
let Json.120 : {} = Struct {};
let Json.118 : {List U8, U64} = CallByName List.18 Json.76 Json.119 Json.120;
dec Json.76;
let Json.82 : List U8 = StructAtIndex 0 Json.112;
let Json.82 : List U8 = StructAtIndex 0 Json.118;
inc Json.82;
dec Json.112;
let Json.111 : I32 = 125i64;
let Json.110 : U8 = CallByName Num.123 Json.111;
let Json.109 : List U8 = CallByName List.4 Json.82 Json.110;
ret Json.109;
dec Json.118;
let Json.117 : I32 = 125i64;
let Json.116 : U8 = CallByName Num.123 Json.117;
let Json.115 : List U8 = CallByName List.4 Json.82 Json.116;
ret Json.115;
procedure Json.79 (Json.107, Json.108):
let Json.85 : Str = StructAtIndex 0 Json.108;
procedure Json.79 (Json.113, Json.114):
let Json.85 : Str = StructAtIndex 0 Json.114;
inc Json.85;
let Json.86 : {Str} = StructAtIndex 1 Json.108;
let Json.86 : {Str} = StructAtIndex 1 Json.114;
inc Json.86;
dec Json.108;
let Json.83 : List U8 = StructAtIndex 0 Json.107;
dec Json.114;
let Json.83 : List U8 = StructAtIndex 0 Json.113;
inc Json.83;
let Json.84 : U64 = StructAtIndex 1 Json.107;
dec Json.107;
let Json.135 : I32 = 34i64;
let Json.134 : U8 = CallByName Num.123 Json.135;
let Json.132 : List U8 = CallByName List.4 Json.83 Json.134;
let Json.133 : List U8 = CallByName Str.12 Json.85;
let Json.129 : List U8 = CallByName List.8 Json.132 Json.133;
let Json.131 : I32 = 34i64;
let Json.130 : U8 = CallByName Num.123 Json.131;
let Json.126 : List U8 = CallByName List.4 Json.129 Json.130;
let Json.128 : I32 = 58i64;
let Json.127 : U8 = CallByName Num.123 Json.128;
let Json.124 : List U8 = CallByName List.4 Json.126 Json.127;
let Json.125 : {} = Struct {};
let Json.87 : List U8 = CallByName Encode.23 Json.124 Json.86 Json.125;
joinpoint Json.119 Json.88:
let Json.117 : U64 = 1i64;
let Json.116 : U64 = CallByName Num.20 Json.84 Json.117;
let Json.115 : {List U8, U64} = Struct {Json.88, Json.116};
ret Json.115;
let Json.84 : U64 = StructAtIndex 1 Json.113;
dec Json.113;
let Json.141 : I32 = 34i64;
let Json.140 : U8 = CallByName Num.123 Json.141;
let Json.138 : List U8 = CallByName List.4 Json.83 Json.140;
let Json.139 : List U8 = CallByName Str.12 Json.85;
let Json.135 : List U8 = CallByName List.8 Json.138 Json.139;
let Json.137 : I32 = 34i64;
let Json.136 : U8 = CallByName Num.123 Json.137;
let Json.132 : List U8 = CallByName List.4 Json.135 Json.136;
let Json.134 : I32 = 58i64;
let Json.133 : U8 = CallByName Num.123 Json.134;
let Json.130 : List U8 = CallByName List.4 Json.132 Json.133;
let Json.131 : {} = Struct {};
let Json.87 : List U8 = CallByName Encode.23 Json.130 Json.86 Json.131;
joinpoint Json.125 Json.88:
let Json.123 : U64 = 1i64;
let Json.122 : U64 = CallByName Num.20 Json.84 Json.123;
let Json.121 : {List U8, U64} = Struct {Json.88, Json.122};
ret Json.121;
in
let Json.123 : U64 = 0i64;
let Json.120 : Int1 = CallByName Num.24 Json.84 Json.123;
if Json.120 then
let Json.122 : I32 = 44i64;
let Json.121 : U8 = CallByName Num.123 Json.122;
let Json.118 : List U8 = CallByName List.4 Json.87 Json.121;
jump Json.119 Json.118;
let Json.129 : U64 = 0i64;
let Json.126 : Int1 = CallByName Num.24 Json.84 Json.129;
if Json.126 then
let Json.128 : I32 = 44i64;
let Json.127 : U8 = CallByName Num.123 Json.128;
let Json.124 : List U8 = CallByName List.4 Json.87 Json.127;
jump Json.125 Json.124;
else
jump Json.119 Json.87;
jump Json.125 Json.87;
procedure List.122 (List.123, List.124, #Attr.12):
let List.121 : {} = StructAtIndex 0 #Attr.12;
let List.344 : {List U8, U64} = CallByName Json.79 List.123 List.124;
let List.343 : [C [], C {List U8, U64}] = TagId(1) List.344;
ret List.343;
let List.351 : {List U8, U64} = CallByName Json.79 List.123 List.124;
let List.350 : [C [], C {List U8, U64}] = TagId(1) List.351;
ret List.350;
procedure List.18 (List.119, List.120, List.121):
let List.321 : {{}} = Struct {List.121};
let List.315 : [C [], C {List U8, U64}] = CallByName List.63 List.119 List.120 List.321;
let List.318 : U8 = 1i64;
let List.319 : U8 = GetTagId List.315;
let List.320 : Int1 = lowlevel Eq List.318 List.319;
if List.320 then
let List.126 : {List U8, U64} = UnionAtIndex (Id 1) (Index 0) List.315;
let List.327 : {{}} = Struct {List.121};
let List.321 : [C [], C {List U8, U64}] = CallByName List.63 List.119 List.120 List.327;
let List.324 : U8 = 1i64;
let List.325 : U8 = GetTagId List.321;
let List.326 : Int1 = lowlevel Eq List.324 List.325;
if List.326 then
let List.126 : {List U8, U64} = UnionAtIndex (Id 1) (Index 0) List.321;
inc List.126;
dec List.315;
dec List.321;
ret List.126;
else
let List.127 : [] = UnionAtIndex (Id 0) (Index 0) List.315;
dec List.315;
let List.317 : {List U8, U64} = CallByName List.64 List.127;
ret List.317;
let List.127 : [] = UnionAtIndex (Id 0) (Index 0) List.321;
dec List.321;
let List.323 : {List U8, U64} = CallByName List.64 List.127;
ret List.323;
procedure List.4 (List.90, List.91):
let List.376 : U64 = 1i64;
let List.375 : List U8 = CallByName List.65 List.90 List.376;
let List.374 : List U8 = CallByName List.66 List.375 List.91;
ret List.374;
let List.320 : U64 = 1i64;
let List.319 : List U8 = CallByName List.65 List.90 List.320;
let List.318 : List U8 = CallByName List.66 List.319 List.91;
ret List.318;
procedure List.6 (#Attr.2):
let List.295 : U64 = lowlevel ListLen #Attr.2;
ret List.295;
procedure List.6 (#Attr.2):
let List.323 : U64 = lowlevel ListLen #Attr.2;
ret List.323;
let List.330 : U64 = lowlevel ListLen #Attr.2;
ret List.330;
procedure List.60 (#Attr.2, #Attr.3):
let List.342 : {Str, {Str}} = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.342;
let List.349 : {Str, {Str}} = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.349;
procedure List.63 (List.283, List.284, List.285):
let List.328 : U64 = 0i64;
let List.329 : U64 = CallByName List.6 List.283;
let List.327 : [C [], C {List U8, U64}] = CallByName List.77 List.283 List.284 List.285 List.328 List.329;
ret List.327;
let List.335 : U64 = 0i64;
let List.336 : U64 = CallByName List.6 List.283;
let List.334 : [C [], C {List U8, U64}] = CallByName List.77 List.283 List.284 List.285 List.335 List.336;
ret List.334;
procedure List.64 (#Attr.2):
let List.326 : {List U8, U64} = lowlevel Unreachable #Attr.2;
ret List.326;
let List.333 : {List U8, U64} = lowlevel Unreachable #Attr.2;
ret List.333;
procedure List.65 (#Attr.2, #Attr.3):
let List.379 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.379;
let List.332 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.332;
procedure List.66 (#Attr.2, #Attr.3):
let List.378 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.378;
let List.331 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.331;
procedure List.77 (List.361, List.362, List.363, List.364, List.365):
joinpoint List.330 List.286 List.287 List.288 List.289 List.290:
let List.332 : Int1 = CallByName Num.22 List.289 List.290;
if List.332 then
let List.341 : {Str, {Str}} = CallByName List.60 List.286 List.289;
let List.333 : [C [], C {List U8, U64}] = CallByName List.122 List.287 List.341 List.288;
let List.338 : U8 = 1i64;
let List.339 : U8 = GetTagId List.333;
let List.340 : Int1 = lowlevel Eq List.338 List.339;
if List.340 then
let List.291 : {List U8, U64} = UnionAtIndex (Id 1) (Index 0) List.333;
procedure List.77 (List.368, List.369, List.370, List.371, List.372):
joinpoint List.337 List.286 List.287 List.288 List.289 List.290:
let List.339 : Int1 = CallByName Num.22 List.289 List.290;
if List.339 then
let List.348 : {Str, {Str}} = CallByName List.60 List.286 List.289;
let List.340 : [C [], C {List U8, U64}] = CallByName List.122 List.287 List.348 List.288;
let List.345 : U8 = 1i64;
let List.346 : U8 = GetTagId List.340;
let List.347 : Int1 = lowlevel Eq List.345 List.346;
if List.347 then
let List.291 : {List U8, U64} = UnionAtIndex (Id 1) (Index 0) List.340;
inc List.291;
dec List.333;
let List.336 : U64 = 1i64;
let List.335 : U64 = CallByName Num.19 List.289 List.336;
jump List.330 List.286 List.291 List.288 List.335 List.290;
dec List.340;
let List.343 : U64 = 1i64;
let List.342 : U64 = CallByName Num.19 List.289 List.343;
jump List.337 List.286 List.291 List.288 List.342 List.290;
else
let List.292 : [] = UnionAtIndex (Id 0) (Index 0) List.333;
dec List.333;
let List.337 : [C [], C {List U8, U64}] = TagId(0) List.292;
ret List.337;
let List.292 : [] = UnionAtIndex (Id 0) (Index 0) List.340;
dec List.340;
let List.344 : [C [], C {List U8, U64}] = TagId(0) List.292;
ret List.344;
else
let List.331 : [C [], C {List U8, U64}] = TagId(1) List.287;
ret List.331;
let List.338 : [C [], C {List U8, U64}] = TagId(1) List.287;
ret List.338;
in
jump List.330 List.361 List.362 List.363 List.364 List.365;
jump List.337 List.368 List.369 List.370 List.371 List.372;
procedure List.8 (#Attr.2, #Attr.3):
let List.377 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.377;
let List.329 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.329;
procedure Num.123 (#Attr.2):
let Num.277 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.277;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.265 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.265;
procedure Num.20 (#Attr.2, #Attr.3):
let Num.263 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.263;
procedure Num.22 (#Attr.2, #Attr.3):
let Num.266 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.266;
procedure Num.24 (#Attr.2, #Attr.3):
let Num.264 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
let Num.264 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.264;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.267 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.267;
procedure Num.20 (#Attr.2, #Attr.3):
let Num.265 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.265;
procedure Num.22 (#Attr.2, #Attr.3):
let Num.268 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.268;
procedure Num.24 (#Attr.2, #Attr.3):
let Num.266 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.266;
procedure Str.12 (#Attr.2):
let Str.211 : List U8 = lowlevel StrToUtf8 #Attr.2;
ret Str.211;
let Str.210 : List U8 = lowlevel StrToUtf8 #Attr.2;
ret Str.210;
procedure Str.48 (#Attr.2, #Attr.3, #Attr.4):
let Str.204 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8Range #Attr.2 #Attr.3 #Attr.4;

View file

@ -1,33 +1,13 @@
procedure #Derived.0 (#Derived.1):
let #Derived_gen.1 : {Str} = Struct {#Derived.1};
let #Derived_gen.0 : {Str} = CallByName Encode.22 #Derived_gen.1;
ret #Derived_gen.0;
procedure #Derived.2 (#Derived.3, #Derived.4, #Attr.12):
let #Derived.1 : Str = StructAtIndex 0 #Attr.12;
inc #Derived.1;
dec #Attr.12;
let #Derived_gen.4 : {Str} = CallByName Json.17 #Derived.1;
let #Derived_gen.3 : List U8 = CallByName Encode.23 #Derived.3 #Derived_gen.4 #Derived.4;
ret #Derived_gen.3;
procedure Encode.22 (Encode.93):
ret Encode.93;
procedure Encode.22 (Encode.93):
ret Encode.93;
procedure Encode.23 (Encode.94, Encode.102, Encode.96):
let Encode.106 : List U8 = CallByName #Derived.2 Encode.94 Encode.96 Encode.102;
let Encode.106 : List U8 = CallByName Json.65 Encode.94 Encode.96 Encode.102;
ret Encode.106;
procedure Encode.23 (Encode.94, Encode.102, Encode.96):
let Encode.113 : List U8 = CallByName Json.65 Encode.94 Encode.96 Encode.102;
ret Encode.113;
procedure Encode.25 (Encode.100, Encode.101):
let Encode.104 : List U8 = Array [];
let Encode.105 : {Str} = CallByName #Derived.0 Encode.100;
let Encode.105 : {Str} = CallByName Json.17 Encode.100;
let Encode.103 : List U8 = CallByName Encode.23 Encode.104 Encode.105 Encode.101;
ret Encode.103;

View file

@ -12,27 +12,11 @@ procedure #Derived.3 (#Derived.4, #Derived.5, #Attr.12):
ret #Derived_gen.3;
in
let #Derived_gen.7 : Str = "A";
let #Derived_gen.9 : {Str} = CallByName #Derived.6 #Derived.1;
let #Derived_gen.9 : {Str} = CallByName Json.17 #Derived.1;
let #Derived_gen.8 : List {Str} = Array [#Derived_gen.9];
let #Derived_gen.6 : {Str, List {Str}} = CallByName Json.20 #Derived_gen.7 #Derived_gen.8;
jump #Derived_gen.5 #Derived_gen.6;
procedure #Derived.6 (#Derived.7):
let #Derived_gen.15 : {Str} = Struct {#Derived.7};
let #Derived_gen.14 : {Str} = CallByName Encode.22 #Derived_gen.15;
ret #Derived_gen.14;
procedure #Derived.8 (#Derived.9, #Derived.10, #Attr.12):
let #Derived.7 : Str = StructAtIndex 0 #Attr.12;
inc #Derived.7;
dec #Attr.12;
let #Derived_gen.18 : {Str} = CallByName Json.17 #Derived.7;
let #Derived_gen.17 : List U8 = CallByName Encode.23 #Derived.9 #Derived_gen.18 #Derived.10;
ret #Derived_gen.17;
procedure Encode.22 (Encode.93):
ret Encode.93;
procedure Encode.22 (Encode.93):
ret Encode.93;
@ -51,12 +35,8 @@ procedure Encode.23 (Encode.94, Encode.102, Encode.96):
ret Encode.113;
procedure Encode.23 (Encode.94, Encode.102, Encode.96):
let Encode.115 : List U8 = CallByName #Derived.8 Encode.94 Encode.96 Encode.102;
ret Encode.115;
procedure Encode.23 (Encode.94, Encode.102, Encode.96):
let Encode.125 : List U8 = CallByName Json.65 Encode.94 Encode.96 Encode.102;
ret Encode.125;
let Encode.116 : List U8 = CallByName Json.65 Encode.94 Encode.96 Encode.102;
ret Encode.116;
procedure Encode.25 (Encode.100, Encode.101):
let Encode.104 : List U8 = Array [];
@ -69,28 +49,28 @@ procedure Json.1 ():
ret Json.102;
procedure Json.17 (Json.64):
let Json.152 : {Str} = Struct {Json.64};
let Json.151 : {Str} = CallByName Encode.22 Json.152;
ret Json.151;
let Json.107 : {Str} = Struct {Json.64};
let Json.106 : {Str} = CallByName Encode.22 Json.107;
ret Json.106;
procedure Json.20 (Json.89, Json.90):
let Json.104 : {Str, List {Str}} = Struct {Json.89, Json.90};
let Json.103 : {Str, List {Str}} = CallByName Encode.22 Json.104;
ret Json.103;
procedure Json.65 (Json.66, Json.153, #Attr.12):
procedure Json.65 (Json.66, Json.108, #Attr.12):
let Json.64 : Str = StructAtIndex 0 #Attr.12;
inc Json.64;
dec #Attr.12;
let Json.162 : I32 = 34i64;
let Json.161 : U8 = CallByName Num.123 Json.162;
let Json.159 : List U8 = CallByName List.4 Json.66 Json.161;
let Json.160 : List U8 = CallByName Str.12 Json.64;
let Json.156 : List U8 = CallByName List.8 Json.159 Json.160;
let Json.158 : I32 = 34i64;
let Json.157 : U8 = CallByName Num.123 Json.158;
let Json.155 : List U8 = CallByName List.4 Json.156 Json.157;
ret Json.155;
let Json.155 : I32 = 34i64;
let Json.154 : U8 = CallByName Num.123 Json.155;
let Json.152 : List U8 = CallByName List.4 Json.66 Json.154;
let Json.153 : List U8 = CallByName Str.12 Json.64;
let Json.149 : List U8 = CallByName List.8 Json.152 Json.153;
let Json.151 : I32 = 34i64;
let Json.150 : U8 = CallByName Num.123 Json.151;
let Json.148 : List U8 = CallByName List.4 Json.149 Json.150;
ret Json.148;
procedure Json.91 (Json.92, Json.105, #Attr.12):
let Json.90 : List {Str} = StructAtIndex 1 #Attr.12;
@ -98,175 +78,175 @@ procedure Json.91 (Json.92, Json.105, #Attr.12):
let Json.89 : Str = StructAtIndex 0 #Attr.12;
inc Json.89;
dec #Attr.12;
let Json.143 : I32 = 123i64;
let Json.142 : U8 = CallByName Num.123 Json.143;
let Json.139 : List U8 = CallByName List.4 Json.92 Json.142;
let Json.141 : I32 = 34i64;
let Json.140 : U8 = CallByName Num.123 Json.141;
let Json.137 : List U8 = CallByName List.4 Json.139 Json.140;
let Json.138 : List U8 = CallByName Str.12 Json.89;
let Json.134 : List U8 = CallByName List.8 Json.137 Json.138;
let Json.136 : I32 = 34i64;
let Json.146 : I32 = 123i64;
let Json.145 : U8 = CallByName Num.123 Json.146;
let Json.142 : List U8 = CallByName List.4 Json.92 Json.145;
let Json.144 : I32 = 34i64;
let Json.143 : U8 = CallByName Num.123 Json.144;
let Json.140 : List U8 = CallByName List.4 Json.142 Json.143;
let Json.141 : List U8 = CallByName Str.12 Json.89;
let Json.137 : List U8 = CallByName List.8 Json.140 Json.141;
let Json.139 : I32 = 34i64;
let Json.138 : U8 = CallByName Num.123 Json.139;
let Json.134 : List U8 = CallByName List.4 Json.137 Json.138;
let Json.136 : I32 = 58i64;
let Json.135 : U8 = CallByName Num.123 Json.136;
let Json.131 : List U8 = CallByName List.4 Json.134 Json.135;
let Json.133 : I32 = 58i64;
let Json.133 : I32 = 91i64;
let Json.132 : U8 = CallByName Num.123 Json.133;
let Json.128 : List U8 = CallByName List.4 Json.131 Json.132;
let Json.130 : I32 = 91i64;
let Json.129 : U8 = CallByName Num.123 Json.130;
let Json.94 : List U8 = CallByName List.4 Json.128 Json.129;
let Json.127 : U64 = CallByName List.6 Json.90;
let Json.115 : {List U8, U64} = Struct {Json.94, Json.127};
let Json.116 : {} = Struct {};
let Json.114 : {List U8, U64} = CallByName List.18 Json.90 Json.115 Json.116;
let Json.94 : List U8 = CallByName List.4 Json.131 Json.132;
let Json.130 : U64 = CallByName List.6 Json.90;
let Json.118 : {List U8, U64} = Struct {Json.94, Json.130};
let Json.119 : {} = Struct {};
let Json.117 : {List U8, U64} = CallByName List.18 Json.90 Json.118 Json.119;
dec Json.90;
let Json.96 : List U8 = StructAtIndex 0 Json.114;
let Json.96 : List U8 = StructAtIndex 0 Json.117;
inc Json.96;
dec Json.114;
let Json.113 : I32 = 93i64;
let Json.112 : U8 = CallByName Num.123 Json.113;
let Json.109 : List U8 = CallByName List.4 Json.96 Json.112;
let Json.111 : I32 = 125i64;
let Json.110 : U8 = CallByName Num.123 Json.111;
let Json.108 : List U8 = CallByName List.4 Json.109 Json.110;
ret Json.108;
dec Json.117;
let Json.116 : I32 = 93i64;
let Json.115 : U8 = CallByName Num.123 Json.116;
let Json.112 : List U8 = CallByName List.4 Json.96 Json.115;
let Json.114 : I32 = 125i64;
let Json.113 : U8 = CallByName Num.123 Json.114;
let Json.111 : List U8 = CallByName List.4 Json.112 Json.113;
ret Json.111;
procedure Json.93 (Json.107, Json.99):
let Json.97 : List U8 = StructAtIndex 0 Json.107;
procedure Json.93 (Json.110, Json.99):
let Json.97 : List U8 = StructAtIndex 0 Json.110;
inc Json.97;
let Json.98 : U64 = StructAtIndex 1 Json.107;
dec Json.107;
let Json.126 : {} = Struct {};
let Json.100 : List U8 = CallByName Encode.23 Json.97 Json.99 Json.126;
joinpoint Json.121 Json.101:
let Json.119 : U64 = 1i64;
let Json.118 : U64 = CallByName Num.20 Json.98 Json.119;
let Json.117 : {List U8, U64} = Struct {Json.101, Json.118};
ret Json.117;
let Json.98 : U64 = StructAtIndex 1 Json.110;
dec Json.110;
let Json.129 : {} = Struct {};
let Json.100 : List U8 = CallByName Encode.23 Json.97 Json.99 Json.129;
joinpoint Json.124 Json.101:
let Json.122 : U64 = 1i64;
let Json.121 : U64 = CallByName Num.20 Json.98 Json.122;
let Json.120 : {List U8, U64} = Struct {Json.101, Json.121};
ret Json.120;
in
let Json.125 : U64 = 0i64;
let Json.122 : Int1 = CallByName Num.24 Json.98 Json.125;
if Json.122 then
let Json.124 : I32 = 44i64;
let Json.123 : U8 = CallByName Num.123 Json.124;
let Json.120 : List U8 = CallByName List.4 Json.100 Json.123;
jump Json.121 Json.120;
let Json.128 : U64 = 0i64;
let Json.125 : Int1 = CallByName Num.24 Json.98 Json.128;
if Json.125 then
let Json.127 : I32 = 44i64;
let Json.126 : U8 = CallByName Num.123 Json.127;
let Json.123 : List U8 = CallByName List.4 Json.100 Json.126;
jump Json.124 Json.123;
else
jump Json.121 Json.100;
jump Json.124 Json.100;
procedure List.122 (List.123, List.124, #Attr.12):
let List.121 : {} = StructAtIndex 0 #Attr.12;
let List.350 : {List U8, U64} = CallByName Json.93 List.123 List.124;
let List.349 : [C [], C {List U8, U64}] = TagId(1) List.350;
ret List.349;
let List.357 : {List U8, U64} = CallByName Json.93 List.123 List.124;
let List.356 : [C [], C {List U8, U64}] = TagId(1) List.357;
ret List.356;
procedure List.18 (List.119, List.120, List.121):
let List.327 : {{}} = Struct {List.121};
let List.321 : [C [], C {List U8, U64}] = CallByName List.63 List.119 List.120 List.327;
let List.324 : U8 = 1i64;
let List.325 : U8 = GetTagId List.321;
let List.326 : Int1 = lowlevel Eq List.324 List.325;
if List.326 then
let List.126 : {List U8, U64} = UnionAtIndex (Id 1) (Index 0) List.321;
let List.333 : {{}} = Struct {List.121};
let List.327 : [C [], C {List U8, U64}] = CallByName List.63 List.119 List.120 List.333;
let List.330 : U8 = 1i64;
let List.331 : U8 = GetTagId List.327;
let List.332 : Int1 = lowlevel Eq List.330 List.331;
if List.332 then
let List.126 : {List U8, U64} = UnionAtIndex (Id 1) (Index 0) List.327;
inc List.126;
dec List.321;
dec List.327;
ret List.126;
else
let List.127 : [] = UnionAtIndex (Id 0) (Index 0) List.321;
dec List.321;
let List.323 : {List U8, U64} = CallByName List.64 List.127;
ret List.323;
let List.127 : [] = UnionAtIndex (Id 0) (Index 0) List.327;
dec List.327;
let List.329 : {List U8, U64} = CallByName List.64 List.127;
ret List.329;
procedure List.4 (List.90, List.91):
let List.382 : U64 = 1i64;
let List.381 : List U8 = CallByName List.65 List.90 List.382;
let List.380 : List U8 = CallByName List.66 List.381 List.91;
ret List.380;
let List.326 : U64 = 1i64;
let List.325 : List U8 = CallByName List.65 List.90 List.326;
let List.324 : List U8 = CallByName List.66 List.325 List.91;
ret List.324;
procedure List.6 (#Attr.2):
let List.295 : U64 = lowlevel ListLen #Attr.2;
ret List.295;
procedure List.6 (#Attr.2):
let List.328 : U64 = lowlevel ListLen #Attr.2;
ret List.328;
let List.334 : U64 = lowlevel ListLen #Attr.2;
ret List.334;
procedure List.60 (#Attr.2, #Attr.3):
let List.348 : {Str} = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.348;
let List.355 : {Str} = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.355;
procedure List.63 (List.283, List.284, List.285):
let List.334 : U64 = 0i64;
let List.335 : U64 = CallByName List.6 List.283;
let List.333 : [C [], C {List U8, U64}] = CallByName List.77 List.283 List.284 List.285 List.334 List.335;
ret List.333;
let List.341 : U64 = 0i64;
let List.342 : U64 = CallByName List.6 List.283;
let List.340 : [C [], C {List U8, U64}] = CallByName List.77 List.283 List.284 List.285 List.341 List.342;
ret List.340;
procedure List.64 (#Attr.2):
let List.332 : {List U8, U64} = lowlevel Unreachable #Attr.2;
ret List.332;
let List.339 : {List U8, U64} = lowlevel Unreachable #Attr.2;
ret List.339;
procedure List.65 (#Attr.2, #Attr.3):
let List.385 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.385;
let List.338 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.338;
procedure List.66 (#Attr.2, #Attr.3):
let List.384 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.384;
let List.337 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.337;
procedure List.77 (List.367, List.368, List.369, List.370, List.371):
joinpoint List.336 List.286 List.287 List.288 List.289 List.290:
let List.338 : Int1 = CallByName Num.22 List.289 List.290;
if List.338 then
let List.347 : {Str} = CallByName List.60 List.286 List.289;
let List.339 : [C [], C {List U8, U64}] = CallByName List.122 List.287 List.347 List.288;
let List.344 : U8 = 1i64;
let List.345 : U8 = GetTagId List.339;
let List.346 : Int1 = lowlevel Eq List.344 List.345;
if List.346 then
let List.291 : {List U8, U64} = UnionAtIndex (Id 1) (Index 0) List.339;
procedure List.77 (List.374, List.375, List.376, List.377, List.378):
joinpoint List.343 List.286 List.287 List.288 List.289 List.290:
let List.345 : Int1 = CallByName Num.22 List.289 List.290;
if List.345 then
let List.354 : {Str} = CallByName List.60 List.286 List.289;
let List.346 : [C [], C {List U8, U64}] = CallByName List.122 List.287 List.354 List.288;
let List.351 : U8 = 1i64;
let List.352 : U8 = GetTagId List.346;
let List.353 : Int1 = lowlevel Eq List.351 List.352;
if List.353 then
let List.291 : {List U8, U64} = UnionAtIndex (Id 1) (Index 0) List.346;
inc List.291;
dec List.339;
let List.342 : U64 = 1i64;
let List.341 : U64 = CallByName Num.19 List.289 List.342;
jump List.336 List.286 List.291 List.288 List.341 List.290;
dec List.346;
let List.349 : U64 = 1i64;
let List.348 : U64 = CallByName Num.19 List.289 List.349;
jump List.343 List.286 List.291 List.288 List.348 List.290;
else
let List.292 : [] = UnionAtIndex (Id 0) (Index 0) List.339;
dec List.339;
let List.343 : [C [], C {List U8, U64}] = TagId(0) List.292;
ret List.343;
let List.292 : [] = UnionAtIndex (Id 0) (Index 0) List.346;
dec List.346;
let List.350 : [C [], C {List U8, U64}] = TagId(0) List.292;
ret List.350;
else
let List.337 : [C [], C {List U8, U64}] = TagId(1) List.287;
ret List.337;
let List.344 : [C [], C {List U8, U64}] = TagId(1) List.287;
ret List.344;
in
jump List.336 List.367 List.368 List.369 List.370 List.371;
jump List.343 List.374 List.375 List.376 List.377 List.378;
procedure List.8 (#Attr.2, #Attr.3):
let List.383 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.383;
let List.336 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.336;
procedure Num.123 (#Attr.2):
let Num.279 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.279;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.267 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.267;
procedure Num.20 (#Attr.2, #Attr.3):
let Num.265 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.265;
procedure Num.22 (#Attr.2, #Attr.3):
let Num.268 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.268;
procedure Num.24 (#Attr.2, #Attr.3):
let Num.266 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
let Num.266 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.266;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.269 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.269;
procedure Num.20 (#Attr.2, #Attr.3):
let Num.267 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.267;
procedure Num.22 (#Attr.2, #Attr.3):
let Num.270 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.270;
procedure Num.24 (#Attr.2, #Attr.3):
let Num.268 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.268;
procedure Str.12 (#Attr.2):
let Str.211 : List U8 = lowlevel StrToUtf8 #Attr.2;
ret Str.211;
let Str.210 : List U8 = lowlevel StrToUtf8 #Attr.2;
ret Str.210;
procedure Str.48 (#Attr.2, #Attr.3, #Attr.4):
let Str.204 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8Range #Attr.2 #Attr.3 #Attr.4;

View file

@ -17,28 +17,12 @@ procedure #Derived.4 (#Derived.5, #Derived.6, #Attr.12):
inc #Derived.3;
dec #Derived.1;
let #Derived_gen.7 : Str = "A";
let #Derived_gen.9 : {Str} = CallByName #Derived.7 #Derived.2;
let #Derived_gen.10 : {Str} = CallByName #Derived.7 #Derived.3;
let #Derived_gen.9 : {Str} = CallByName Json.17 #Derived.2;
let #Derived_gen.10 : {Str} = CallByName Json.17 #Derived.3;
let #Derived_gen.8 : List {Str} = Array [#Derived_gen.9, #Derived_gen.10];
let #Derived_gen.6 : {Str, List {Str}} = CallByName Json.20 #Derived_gen.7 #Derived_gen.8;
jump #Derived_gen.5 #Derived_gen.6;
procedure #Derived.7 (#Derived.8):
let #Derived_gen.18 : {Str} = Struct {#Derived.8};
let #Derived_gen.17 : {Str} = CallByName Encode.22 #Derived_gen.18;
ret #Derived_gen.17;
procedure #Derived.9 (#Derived.10, #Derived.11, #Attr.12):
let #Derived.8 : Str = StructAtIndex 0 #Attr.12;
inc #Derived.8;
dec #Attr.12;
let #Derived_gen.21 : {Str} = CallByName Json.17 #Derived.8;
let #Derived_gen.20 : List U8 = CallByName Encode.23 #Derived.10 #Derived_gen.21 #Derived.11;
ret #Derived_gen.20;
procedure Encode.22 (Encode.93):
ret Encode.93;
procedure Encode.22 (Encode.93):
ret Encode.93;
@ -57,12 +41,8 @@ procedure Encode.23 (Encode.94, Encode.102, Encode.96):
ret Encode.113;
procedure Encode.23 (Encode.94, Encode.102, Encode.96):
let Encode.115 : List U8 = CallByName #Derived.9 Encode.94 Encode.96 Encode.102;
ret Encode.115;
procedure Encode.23 (Encode.94, Encode.102, Encode.96):
let Encode.126 : List U8 = CallByName Json.65 Encode.94 Encode.96 Encode.102;
ret Encode.126;
let Encode.117 : List U8 = CallByName Json.65 Encode.94 Encode.96 Encode.102;
ret Encode.117;
procedure Encode.25 (Encode.100, Encode.101):
let Encode.104 : List U8 = Array [];
@ -75,28 +55,28 @@ procedure Json.1 ():
ret Json.102;
procedure Json.17 (Json.64):
let Json.152 : {Str} = Struct {Json.64};
let Json.151 : {Str} = CallByName Encode.22 Json.152;
ret Json.151;
let Json.110 : {Str} = Struct {Json.64};
let Json.109 : {Str} = CallByName Encode.22 Json.110;
ret Json.109;
procedure Json.20 (Json.89, Json.90):
let Json.104 : {Str, List {Str}} = Struct {Json.89, Json.90};
let Json.103 : {Str, List {Str}} = CallByName Encode.22 Json.104;
ret Json.103;
procedure Json.65 (Json.66, Json.153, #Attr.12):
procedure Json.65 (Json.66, Json.108, #Attr.12):
let Json.64 : Str = StructAtIndex 0 #Attr.12;
inc Json.64;
dec #Attr.12;
let Json.162 : I32 = 34i64;
let Json.161 : U8 = CallByName Num.123 Json.162;
let Json.159 : List U8 = CallByName List.4 Json.66 Json.161;
let Json.160 : List U8 = CallByName Str.12 Json.64;
let Json.156 : List U8 = CallByName List.8 Json.159 Json.160;
let Json.158 : I32 = 34i64;
let Json.157 : U8 = CallByName Num.123 Json.158;
let Json.155 : List U8 = CallByName List.4 Json.156 Json.157;
ret Json.155;
let Json.155 : List U8 = CallByName List.4 Json.66 Json.157;
let Json.156 : List U8 = CallByName Str.12 Json.64;
let Json.152 : List U8 = CallByName List.8 Json.155 Json.156;
let Json.154 : I32 = 34i64;
let Json.153 : U8 = CallByName Num.123 Json.154;
let Json.151 : List U8 = CallByName List.4 Json.152 Json.153;
ret Json.151;
procedure Json.91 (Json.92, Json.105, #Attr.12):
let Json.90 : List {Str} = StructAtIndex 1 #Attr.12;
@ -104,175 +84,175 @@ procedure Json.91 (Json.92, Json.105, #Attr.12):
let Json.89 : Str = StructAtIndex 0 #Attr.12;
inc Json.89;
dec #Attr.12;
let Json.143 : I32 = 123i64;
let Json.142 : U8 = CallByName Num.123 Json.143;
let Json.139 : List U8 = CallByName List.4 Json.92 Json.142;
let Json.141 : I32 = 34i64;
let Json.140 : U8 = CallByName Num.123 Json.141;
let Json.137 : List U8 = CallByName List.4 Json.139 Json.140;
let Json.138 : List U8 = CallByName Str.12 Json.89;
let Json.134 : List U8 = CallByName List.8 Json.137 Json.138;
let Json.136 : I32 = 34i64;
let Json.149 : I32 = 123i64;
let Json.148 : U8 = CallByName Num.123 Json.149;
let Json.145 : List U8 = CallByName List.4 Json.92 Json.148;
let Json.147 : I32 = 34i64;
let Json.146 : U8 = CallByName Num.123 Json.147;
let Json.143 : List U8 = CallByName List.4 Json.145 Json.146;
let Json.144 : List U8 = CallByName Str.12 Json.89;
let Json.140 : List U8 = CallByName List.8 Json.143 Json.144;
let Json.142 : I32 = 34i64;
let Json.141 : U8 = CallByName Num.123 Json.142;
let Json.137 : List U8 = CallByName List.4 Json.140 Json.141;
let Json.139 : I32 = 58i64;
let Json.138 : U8 = CallByName Num.123 Json.139;
let Json.134 : List U8 = CallByName List.4 Json.137 Json.138;
let Json.136 : I32 = 91i64;
let Json.135 : U8 = CallByName Num.123 Json.136;
let Json.131 : List U8 = CallByName List.4 Json.134 Json.135;
let Json.133 : I32 = 58i64;
let Json.132 : U8 = CallByName Num.123 Json.133;
let Json.128 : List U8 = CallByName List.4 Json.131 Json.132;
let Json.130 : I32 = 91i64;
let Json.129 : U8 = CallByName Num.123 Json.130;
let Json.94 : List U8 = CallByName List.4 Json.128 Json.129;
let Json.127 : U64 = CallByName List.6 Json.90;
let Json.115 : {List U8, U64} = Struct {Json.94, Json.127};
let Json.116 : {} = Struct {};
let Json.114 : {List U8, U64} = CallByName List.18 Json.90 Json.115 Json.116;
let Json.94 : List U8 = CallByName List.4 Json.134 Json.135;
let Json.133 : U64 = CallByName List.6 Json.90;
let Json.121 : {List U8, U64} = Struct {Json.94, Json.133};
let Json.122 : {} = Struct {};
let Json.120 : {List U8, U64} = CallByName List.18 Json.90 Json.121 Json.122;
dec Json.90;
let Json.96 : List U8 = StructAtIndex 0 Json.114;
let Json.96 : List U8 = StructAtIndex 0 Json.120;
inc Json.96;
dec Json.114;
let Json.113 : I32 = 93i64;
let Json.112 : U8 = CallByName Num.123 Json.113;
let Json.109 : List U8 = CallByName List.4 Json.96 Json.112;
let Json.111 : I32 = 125i64;
let Json.110 : U8 = CallByName Num.123 Json.111;
let Json.108 : List U8 = CallByName List.4 Json.109 Json.110;
ret Json.108;
dec Json.120;
let Json.119 : I32 = 93i64;
let Json.118 : U8 = CallByName Num.123 Json.119;
let Json.115 : List U8 = CallByName List.4 Json.96 Json.118;
let Json.117 : I32 = 125i64;
let Json.116 : U8 = CallByName Num.123 Json.117;
let Json.114 : List U8 = CallByName List.4 Json.115 Json.116;
ret Json.114;
procedure Json.93 (Json.107, Json.99):
let Json.97 : List U8 = StructAtIndex 0 Json.107;
procedure Json.93 (Json.113, Json.99):
let Json.97 : List U8 = StructAtIndex 0 Json.113;
inc Json.97;
let Json.98 : U64 = StructAtIndex 1 Json.107;
dec Json.107;
let Json.126 : {} = Struct {};
let Json.100 : List U8 = CallByName Encode.23 Json.97 Json.99 Json.126;
joinpoint Json.121 Json.101:
let Json.119 : U64 = 1i64;
let Json.118 : U64 = CallByName Num.20 Json.98 Json.119;
let Json.117 : {List U8, U64} = Struct {Json.101, Json.118};
ret Json.117;
let Json.98 : U64 = StructAtIndex 1 Json.113;
dec Json.113;
let Json.132 : {} = Struct {};
let Json.100 : List U8 = CallByName Encode.23 Json.97 Json.99 Json.132;
joinpoint Json.127 Json.101:
let Json.125 : U64 = 1i64;
let Json.124 : U64 = CallByName Num.20 Json.98 Json.125;
let Json.123 : {List U8, U64} = Struct {Json.101, Json.124};
ret Json.123;
in
let Json.125 : U64 = 0i64;
let Json.122 : Int1 = CallByName Num.24 Json.98 Json.125;
if Json.122 then
let Json.124 : I32 = 44i64;
let Json.123 : U8 = CallByName Num.123 Json.124;
let Json.120 : List U8 = CallByName List.4 Json.100 Json.123;
jump Json.121 Json.120;
let Json.131 : U64 = 0i64;
let Json.128 : Int1 = CallByName Num.24 Json.98 Json.131;
if Json.128 then
let Json.130 : I32 = 44i64;
let Json.129 : U8 = CallByName Num.123 Json.130;
let Json.126 : List U8 = CallByName List.4 Json.100 Json.129;
jump Json.127 Json.126;
else
jump Json.121 Json.100;
jump Json.127 Json.100;
procedure List.122 (List.123, List.124, #Attr.12):
let List.121 : {} = StructAtIndex 0 #Attr.12;
let List.350 : {List U8, U64} = CallByName Json.93 List.123 List.124;
let List.349 : [C [], C {List U8, U64}] = TagId(1) List.350;
ret List.349;
let List.357 : {List U8, U64} = CallByName Json.93 List.123 List.124;
let List.356 : [C [], C {List U8, U64}] = TagId(1) List.357;
ret List.356;
procedure List.18 (List.119, List.120, List.121):
let List.327 : {{}} = Struct {List.121};
let List.321 : [C [], C {List U8, U64}] = CallByName List.63 List.119 List.120 List.327;
let List.324 : U8 = 1i64;
let List.325 : U8 = GetTagId List.321;
let List.326 : Int1 = lowlevel Eq List.324 List.325;
if List.326 then
let List.126 : {List U8, U64} = UnionAtIndex (Id 1) (Index 0) List.321;
let List.333 : {{}} = Struct {List.121};
let List.327 : [C [], C {List U8, U64}] = CallByName List.63 List.119 List.120 List.333;
let List.330 : U8 = 1i64;
let List.331 : U8 = GetTagId List.327;
let List.332 : Int1 = lowlevel Eq List.330 List.331;
if List.332 then
let List.126 : {List U8, U64} = UnionAtIndex (Id 1) (Index 0) List.327;
inc List.126;
dec List.321;
dec List.327;
ret List.126;
else
let List.127 : [] = UnionAtIndex (Id 0) (Index 0) List.321;
dec List.321;
let List.323 : {List U8, U64} = CallByName List.64 List.127;
ret List.323;
let List.127 : [] = UnionAtIndex (Id 0) (Index 0) List.327;
dec List.327;
let List.329 : {List U8, U64} = CallByName List.64 List.127;
ret List.329;
procedure List.4 (List.90, List.91):
let List.382 : U64 = 1i64;
let List.381 : List U8 = CallByName List.65 List.90 List.382;
let List.380 : List U8 = CallByName List.66 List.381 List.91;
ret List.380;
let List.326 : U64 = 1i64;
let List.325 : List U8 = CallByName List.65 List.90 List.326;
let List.324 : List U8 = CallByName List.66 List.325 List.91;
ret List.324;
procedure List.6 (#Attr.2):
let List.295 : U64 = lowlevel ListLen #Attr.2;
ret List.295;
procedure List.6 (#Attr.2):
let List.328 : U64 = lowlevel ListLen #Attr.2;
ret List.328;
let List.334 : U64 = lowlevel ListLen #Attr.2;
ret List.334;
procedure List.60 (#Attr.2, #Attr.3):
let List.348 : {Str} = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.348;
let List.355 : {Str} = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
ret List.355;
procedure List.63 (List.283, List.284, List.285):
let List.334 : U64 = 0i64;
let List.335 : U64 = CallByName List.6 List.283;
let List.333 : [C [], C {List U8, U64}] = CallByName List.77 List.283 List.284 List.285 List.334 List.335;
ret List.333;
let List.341 : U64 = 0i64;
let List.342 : U64 = CallByName List.6 List.283;
let List.340 : [C [], C {List U8, U64}] = CallByName List.77 List.283 List.284 List.285 List.341 List.342;
ret List.340;
procedure List.64 (#Attr.2):
let List.332 : {List U8, U64} = lowlevel Unreachable #Attr.2;
ret List.332;
let List.339 : {List U8, U64} = lowlevel Unreachable #Attr.2;
ret List.339;
procedure List.65 (#Attr.2, #Attr.3):
let List.385 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.385;
let List.338 : List U8 = lowlevel ListReserve #Attr.2 #Attr.3;
ret List.338;
procedure List.66 (#Attr.2, #Attr.3):
let List.384 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.384;
let List.337 : List U8 = lowlevel ListAppendUnsafe #Attr.2 #Attr.3;
ret List.337;
procedure List.77 (List.367, List.368, List.369, List.370, List.371):
joinpoint List.336 List.286 List.287 List.288 List.289 List.290:
let List.338 : Int1 = CallByName Num.22 List.289 List.290;
if List.338 then
let List.347 : {Str} = CallByName List.60 List.286 List.289;
let List.339 : [C [], C {List U8, U64}] = CallByName List.122 List.287 List.347 List.288;
let List.344 : U8 = 1i64;
let List.345 : U8 = GetTagId List.339;
let List.346 : Int1 = lowlevel Eq List.344 List.345;
if List.346 then
let List.291 : {List U8, U64} = UnionAtIndex (Id 1) (Index 0) List.339;
procedure List.77 (List.374, List.375, List.376, List.377, List.378):
joinpoint List.343 List.286 List.287 List.288 List.289 List.290:
let List.345 : Int1 = CallByName Num.22 List.289 List.290;
if List.345 then
let List.354 : {Str} = CallByName List.60 List.286 List.289;
let List.346 : [C [], C {List U8, U64}] = CallByName List.122 List.287 List.354 List.288;
let List.351 : U8 = 1i64;
let List.352 : U8 = GetTagId List.346;
let List.353 : Int1 = lowlevel Eq List.351 List.352;
if List.353 then
let List.291 : {List U8, U64} = UnionAtIndex (Id 1) (Index 0) List.346;
inc List.291;
dec List.339;
let List.342 : U64 = 1i64;
let List.341 : U64 = CallByName Num.19 List.289 List.342;
jump List.336 List.286 List.291 List.288 List.341 List.290;
dec List.346;
let List.349 : U64 = 1i64;
let List.348 : U64 = CallByName Num.19 List.289 List.349;
jump List.343 List.286 List.291 List.288 List.348 List.290;
else
let List.292 : [] = UnionAtIndex (Id 0) (Index 0) List.339;
dec List.339;
let List.343 : [C [], C {List U8, U64}] = TagId(0) List.292;
ret List.343;
let List.292 : [] = UnionAtIndex (Id 0) (Index 0) List.346;
dec List.346;
let List.350 : [C [], C {List U8, U64}] = TagId(0) List.292;
ret List.350;
else
let List.337 : [C [], C {List U8, U64}] = TagId(1) List.287;
ret List.337;
let List.344 : [C [], C {List U8, U64}] = TagId(1) List.287;
ret List.344;
in
jump List.336 List.367 List.368 List.369 List.370 List.371;
jump List.343 List.374 List.375 List.376 List.377 List.378;
procedure List.8 (#Attr.2, #Attr.3):
let List.383 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.383;
let List.336 : List U8 = lowlevel ListConcat #Attr.2 #Attr.3;
ret List.336;
procedure Num.123 (#Attr.2):
let Num.279 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.279;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.267 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.267;
procedure Num.20 (#Attr.2, #Attr.3):
let Num.265 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.265;
procedure Num.22 (#Attr.2, #Attr.3):
let Num.268 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.268;
procedure Num.24 (#Attr.2, #Attr.3):
let Num.266 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
let Num.266 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.266;
procedure Num.19 (#Attr.2, #Attr.3):
let Num.269 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.269;
procedure Num.20 (#Attr.2, #Attr.3):
let Num.267 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.267;
procedure Num.22 (#Attr.2, #Attr.3):
let Num.270 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.270;
procedure Num.24 (#Attr.2, #Attr.3):
let Num.268 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.268;
procedure Str.12 (#Attr.2):
let Str.211 : List U8 = lowlevel StrToUtf8 #Attr.2;
ret Str.211;
let Str.210 : List U8 = lowlevel StrToUtf8 #Attr.2;
ret Str.210;
procedure Str.48 (#Attr.2, #Attr.3, #Attr.4):
let Str.204 : {U64, Str, Int1, U8} = lowlevel StrFromUtf8Range #Attr.2 #Attr.3 #Attr.4;