• R/O
  • SSH
  • HTTPS

jpl: 提交


Commit MetaInfo

修订版36 (tree)
时间2018-07-20 09:09:04
作者jakobthomsen

Log Message

verify total recursion for simplest case

更改概述

差异

--- trunk/pragmatic/inverse_tests/inverse_test_total_selfcall.c (revision 35)
+++ trunk/pragmatic/inverse_tests/inverse_test_total_selfcall.c (revision 36)
@@ -1,3 +1,3 @@
1-u32 test() = test(); // ERROR: recursion not allowed for total function
2-
1+u32 test(u64 n) = test(n); // ERROR: potentially endless recursion not allowed for total function
2+// NOTE: this test is important - TOTAL recursion is allowed but PARTIAL not!
33 u32 main() = 0;
--- trunk/pragmatic/memory_tests/mem_tests.c (revision 35)
+++ trunk/pragmatic/memory_tests/mem_tests.c (revision 36)
@@ -98,15 +98,10 @@
9898 string boxget$(Box$ box);
9999 void boxset$(mut Box$ box, string s);
100100
101-void dummy$()
102-{
103- let _ = 12345;
104-}
105-
106101 void move$(mut stack<u8> in, mut stack<u8> out)
107102 {
108103 switch<opt<u8>> pop_opt<u8>(in)
109- case empty : dummy$()
104+ case empty : {}
110105 case solid val:
111106 {
112107 push<u8>(out, val);
@@ -232,7 +227,7 @@
232227 void PrSub$(StreamOut out, mut stack<u8> s)
233228 {
234229 switch<opt<u8>> pop_opt<u8>(s)
235- case empty : dummy$()
230+ case empty : {}
236231 case solid c :
237232 {
238233 Put(out, c);
@@ -401,7 +396,7 @@
401396 void TestCompareStrings$(Streams streams, mut stack<string2$> data)
402397 {
403398 switch<opt<string2$>> pop_opt<string2$>(data)
404- case empty : dummy$()
399+ case empty : {}
405400 case solid pair:
406401 {
407402 PutStr(streams.out, "cmp("); Print<string>(streams.out, pair.x); PutStr(streams.out, ", "); Print<string>(streams.out, pair.y); PutStr(streams.out, ") = ");
@@ -425,7 +420,7 @@
425420 void TestCompareTrees$(Streams streams, mut stack<tree2$> data)
426421 {
427422 switch<opt<tree2$>> pop_opt<tree2$>(data)
428- case empty : dummy$()
423+ case empty : {}
429424 case solid pair :
430425 {
431426 //PutStr(streams.out, "cmp("); Print<tree$>(streams.out, pair.x); PutStr(streams.out, ", "); Print<tree$>(streams.out, pair.y); PutStr(streams.out, ") = ");
@@ -436,12 +431,16 @@
436431 };
437432 }
438433
439-void fill$(mut stack<u64> s, u64 n)
434+void fill(mut stack<u64> s, u64 n)
440435 {
441- if gtr<u64>(n, 0) then
436+ reduce n
437+ to:
442438 {
443- push<u64>(s, sub<u64>(n, 1));
444- fill$(s, sub<u64>(n, 1));
439+ push<u64>(s, n);
440+ fill(s, n);
441+ }
442+ term:
443+ {
445444 };
446445 }
447446
@@ -448,7 +447,7 @@
448447 void drain$(mut stack<u64> s)
449448 {
450449 switch<opt<u64>> pop_opt<u64>(s)
451- case empty : dummy$()
450+ case empty : {}
452451 case solid _ : drain$(s);
453452 }
454453
@@ -455,7 +454,7 @@
455454 void TestStack$(Streams streams)
456455 {
457456 let mut stack<u64> s;
458- fill$(s, 257);
457+ fill(s, 257);
459458 Print<stack<u64>>(streams.out, s);
460459 drain$(s);
461460 Print<stack<u64>>(streams.out, s);
--- trunk/pragmatic/memory_tests/mem_tests_compiled.c (revision 35)
+++ trunk/pragmatic/memory_tests/mem_tests_compiled.c (revision 36)
@@ -940,24 +940,15 @@
940940 void Box$(struct Box$ *_0, const struct string *s);
941941 void boxget$(struct string *_0, const struct Box$ *box);
942942 void boxset$(void *_0, struct Box$ *box, const struct string *s);
943-void dummy$(void *_0)
944-{
945- {
946- }
947-}
948-
949943 void move$(void *_0, struct stack/*u8*/ *in, struct stack/*u8*/ *out)
950944 {
951945 {
952946 struct stack/*u8*/ _1; memset(&_1, 0, sizeof(struct stack/*u8*/));
953947 {
954- pop_opt(&_1, &*in, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 107);
948+ pop_opt(&_1, &*in, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 102);
955949 }
956950 if(!(_1).size)
957951 {
958- {
959- dummy$(0 /* _2 */);
960- }
961952 }
962953 else
963954 {
@@ -964,7 +955,7 @@
964955 const uint8_t *val = (_1).data;
965956 {
966957 {
967- push(0 /* _4 */, &*out, &*val, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 111);
958+ push(0 /* _4 */, &*out, &*val, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 106);
968959 }
969960 {
970961 move$(0 /* _5 */, &*in, &*out);
@@ -992,7 +983,7 @@
992983 {
993984 uint8_t _4; memset(&_4, 0, sizeof(uint8_t));
994985 {
995- at_get$(&_4, &*chars, &*idx, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 120);
986+ at_get$(&_4, &*chars, &*idx, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 115);
996987 }
997988 Put(0 /* _3 */, &*out, &_4);
998989 _IGNORE_(_4);
@@ -1042,13 +1033,13 @@
10421033 _5 = 32;
10431034 uint8_t _6; memset(&_6, 0, sizeof(uint8_t));
10441035 {
1045- at_get$(&_6, &*chars, &*idx, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 133);
1036+ at_get$(&_6, &*chars, &*idx, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 128);
10461037 }
10471038 _4 = _5 | _6;
10481039 _IGNORE_(_6);
10491040 _IGNORE_(_5);
10501041 }
1051- at_set$(0 /* _3 */, &*chars, &*idx, &_4, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 133);
1042+ at_set$(0 /* _3 */, &*chars, &*idx, &_4, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 128);
10521043 _IGNORE_(_4);
10531044 }
10541045 {
@@ -1070,7 +1061,7 @@
10701061 {
10711062 struct stack/*u8*/ _1; memset(&_1, 0, sizeof(struct stack/*u8*/));
10721063 {
1073- pop_opt(&_1, &*in, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 139);
1064+ pop_opt(&_1, &*in, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 134);
10741065 }
10751066 if(!(_1).size)
10761067 {
@@ -1089,7 +1080,7 @@
10891080 const uint8_t *ch = (_1).data;
10901081 {
10911082 {
1092- push(0 /* _2 */, &*out, &*ch, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 147);
1083+ push(0 /* _2 */, &*out, &*ch, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 142);
10931084 }
10941085 bool _3; memset(&_3, 0, sizeof(bool));
10951086 bool _4;
@@ -1142,7 +1133,7 @@
11421133 {
11431134 uint8_t _ch; memset(&_ch, 0, sizeof(uint8_t));
11441135 {
1145- at_get$(&_ch, &*chars, &*idx, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 163);
1136+ at_get$(&_ch, &*chars, &*idx, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 158);
11461137 }
11471138 bool _2; memset(&_2, 0, sizeof(bool));
11481139 bool _3;
@@ -1213,31 +1204,31 @@
12131204 {
12141205 uint8_t _2; memset(&_2, 0, sizeof(uint8_t));
12151206 _2 = 72;
1216- push(0 /* _1 */, &_s, &_2, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 188);
1207+ push(0 /* _1 */, &_s, &_2, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 183);
12171208 _IGNORE_(_2);
12181209 }
12191210 {
12201211 uint8_t _3; memset(&_3, 0, sizeof(uint8_t));
12211212 _3 = 101;
1222- push(0 /* _2 */, &_s, &_3, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 189);
1213+ push(0 /* _2 */, &_s, &_3, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 184);
12231214 _IGNORE_(_3);
12241215 }
12251216 {
12261217 uint8_t _4; memset(&_4, 0, sizeof(uint8_t));
12271218 _4 = 108;
1228- push(0 /* _3 */, &_s, &_4, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 190);
1219+ push(0 /* _3 */, &_s, &_4, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 185);
12291220 _IGNORE_(_4);
12301221 }
12311222 {
12321223 uint8_t _5; memset(&_5, 0, sizeof(uint8_t));
12331224 _5 = 108;
1234- push(0 /* _4 */, &_s, &_5, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 191);
1225+ push(0 /* _4 */, &_s, &_5, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 186);
12351226 _IGNORE_(_5);
12361227 }
12371228 {
12381229 uint8_t _6; memset(&_6, 0, sizeof(uint8_t));
12391230 _6 = 111;
1240- push(0 /* _5 */, &_s, &_6, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 192);
1231+ push(0 /* _5 */, &_s, &_6, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 187);
12411232 _IGNORE_(_6);
12421233 }
12431234 clone$(&*_0, &_s, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/);
@@ -1260,49 +1251,49 @@
12601251 {
12611252 uint8_t _2; memset(&_2, 0, sizeof(uint8_t));
12621253 _2 = 33;
1263- push(0 /* _1 */, &_copy, &_2, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 201);
1254+ push(0 /* _1 */, &_copy, &_2, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 196);
12641255 _IGNORE_(_2);
12651256 }
12661257 {
12671258 uint8_t _3; memset(&_3, 0, sizeof(uint8_t));
12681259 _3 = 32;
1269- push(0 /* _2 */, &_chars, &_3, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 202);
1260+ push(0 /* _2 */, &_chars, &_3, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 197);
12701261 _IGNORE_(_3);
12711262 }
12721263 {
12731264 uint8_t _4; memset(&_4, 0, sizeof(uint8_t));
12741265 _4 = 87;
1275- push(0 /* _3 */, &_chars, &_4, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 203);
1266+ push(0 /* _3 */, &_chars, &_4, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 198);
12761267 _IGNORE_(_4);
12771268 }
12781269 {
12791270 uint8_t _5; memset(&_5, 0, sizeof(uint8_t));
12801271 _5 = 111;
1281- push(0 /* _4 */, &_chars, &_5, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 204);
1272+ push(0 /* _4 */, &_chars, &_5, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 199);
12821273 _IGNORE_(_5);
12831274 }
12841275 {
12851276 uint8_t _6; memset(&_6, 0, sizeof(uint8_t));
12861277 _6 = 114;
1287- push(0 /* _5 */, &_chars, &_6, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 205);
1278+ push(0 /* _5 */, &_chars, &_6, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 200);
12881279 _IGNORE_(_6);
12891280 }
12901281 {
12911282 uint8_t _7; memset(&_7, 0, sizeof(uint8_t));
12921283 _7 = 108;
1293- push(0 /* _6 */, &_chars, &_7, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 206);
1284+ push(0 /* _6 */, &_chars, &_7, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 201);
12941285 _IGNORE_(_7);
12951286 }
12961287 {
12971288 uint8_t _8; memset(&_8, 0, sizeof(uint8_t));
12981289 _8 = 100;
1299- push(0 /* _7 */, &_chars, &_8, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 207);
1290+ push(0 /* _7 */, &_chars, &_8, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 202);
13001291 _IGNORE_(_8);
13011292 }
13021293 {
13031294 uint8_t _9; memset(&_9, 0, sizeof(uint8_t));
13041295 _9 = 46;
1305- push(0 /* _8 */, &_chars, &_9, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 208);
1296+ push(0 /* _8 */, &_chars, &_9, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 203);
13061297 _IGNORE_(_9);
13071298 }
13081299 uint8_t _what; memset(&_what, 0, sizeof(uint8_t));
@@ -1406,13 +1397,10 @@
14061397 {
14071398 struct stack/*u8*/ _1; memset(&_1, 0, sizeof(struct stack/*u8*/));
14081399 {
1409- pop_opt(&_1, &*s, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 233);
1400+ pop_opt(&_1, &*s, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 228);
14101401 }
14111402 if(!(_1).size)
14121403 {
1413- {
1414- dummy$(0 /* _2 */);
1415- }
14161404 }
14171405 else
14181406 {
@@ -1447,7 +1435,7 @@
14471435 {
14481436 struct string _4; memset(&_4, 0, sizeof(struct string));
14491437 {
1450- at_get$(&_4, &*strs, &*idx, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 246);
1438+ at_get$(&_4, &*strs, &*idx, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 241);
14511439 }
14521440 PutStr(0 /* _3 */, &*out, &_4);
14531441 string$dest(&_4);
@@ -1544,7 +1532,7 @@
15441532 {
15451533 struct typeid$ _ti; memset(&_ti, 0, sizeof(struct typeid$));
15461534 {
1547- at_get$(&_ti, &*tis, &*idx, sizeof(struct typeid$), (void (*)(void *))typeid$$dest, (void (*)(void *, const void *))typeid$$copy, 266);
1535+ at_get$(&_ti, &*tis, &*idx, sizeof(struct typeid$), (void (*)(void *))typeid$$dest, (void (*)(void *, const void *))typeid$$copy, 261);
15481536 }
15491537 {
15501538 const struct string *_4 = &(_ti).type;
@@ -1635,31 +1623,31 @@
16351623 {
16361624 struct string _2; memset(&_2, 0, sizeof(struct string));
16371625 init$fromliteral(&_2, "Hello", 5);
1638- push(0 /* _1 */, &_strs, &_2, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 286);
1626+ push(0 /* _1 */, &_strs, &_2, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 281);
16391627 string$dest(&_2);
16401628 }
16411629 {
16421630 struct string _3; memset(&_3, 0, sizeof(struct string));
16431631 init$fromliteral(&_3, "World", 5);
1644- push(0 /* _2 */, &_strs, &_3, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 287);
1632+ push(0 /* _2 */, &_strs, &_3, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 282);
16451633 string$dest(&_3);
16461634 }
16471635 {
16481636 struct string _4; memset(&_4, 0, sizeof(struct string));
16491637 init$fromliteral(&_4, "?", 1);
1650- push(0 /* _3 */, &_strs, &_4, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 288);
1638+ push(0 /* _3 */, &_strs, &_4, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 283);
16511639 string$dest(&_4);
16521640 }
16531641 {
16541642 struct string _5; memset(&_5, 0, sizeof(struct string));
16551643 init$fromliteral(&_5, "?", 1);
1656- push(0 /* _4 */, &_strs, &_5, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 289);
1644+ push(0 /* _4 */, &_strs, &_5, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 284);
16571645 string$dest(&_5);
16581646 }
16591647 {
16601648 struct string _6; memset(&_6, 0, sizeof(struct string));
16611649 init$fromliteral(&_6, "?", 1);
1662- push(0 /* _5 */, &_strs, &_6, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 290);
1650+ push(0 /* _5 */, &_strs, &_6, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 285);
16631651 string$dest(&_6);
16641652 }
16651653 clone$(&*_0, &_strs, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy);
@@ -1677,7 +1665,7 @@
16771665 }
16781666 struct string _top0; memset(&_top0, 0, sizeof(struct string));
16791667 {
1680- pop$(&_top0, &_strs, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 297);
1668+ pop$(&_top0, &_strs, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 292);
16811669 }
16821670 {
16831671 PutStr(0 /* _1 */, &*out, &_top0);
@@ -1684,7 +1672,7 @@
16841672 }
16851673 struct string _top1; memset(&_top1, 0, sizeof(struct string));
16861674 {
1687- pop$(&_top1, &_strs, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 298);
1675+ pop$(&_top1, &_strs, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 293);
16881676 }
16891677 {
16901678 PutStr(0 /* _2 */, &*out, &_top1);
@@ -1691,7 +1679,7 @@
16911679 }
16921680 struct string _top2; memset(&_top2, 0, sizeof(struct string));
16931681 {
1694- pop$(&_top2, &_strs, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 299);
1682+ pop$(&_top2, &_strs, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 294);
16951683 }
16961684 {
16971685 PutStr(0 /* _3 */, &*out, &_top2);
@@ -1707,37 +1695,37 @@
17071695 {
17081696 struct string _6; memset(&_6, 0, sizeof(struct string));
17091697 init$fromliteral(&_6, "!", 1);
1710- push(0 /* _5 */, &_strs2, &_6, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 303);
1698+ push(0 /* _5 */, &_strs2, &_6, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 298);
17111699 string$dest(&_6);
17121700 }
17131701 {
17141702 struct string _7; memset(&_7, 0, sizeof(struct string));
17151703 init$fromliteral(&_7, "of", 2);
1716- push(0 /* _6 */, &_strs, &_7, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 304);
1704+ push(0 /* _6 */, &_strs, &_7, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 299);
17171705 string$dest(&_7);
17181706 }
17191707 {
17201708 struct string _8; memset(&_8, 0, sizeof(struct string));
17211709 init$fromliteral(&_8, "Memory", 6);
1722- push(0 /* _7 */, &_strs, &_8, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 305);
1710+ push(0 /* _7 */, &_strs, &_8, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 300);
17231711 string$dest(&_8);
17241712 }
17251713 {
17261714 struct string _9; memset(&_9, 0, sizeof(struct string));
17271715 init$fromliteral(&_9, "Manage", 6);
1728- push(0 /* _8 */, &_strs, &_9, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 306);
1716+ push(0 /* _8 */, &_strs, &_9, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 301);
17291717 string$dest(&_9);
17301718 }
17311719 {
17321720 struct string _10; memset(&_10, 0, sizeof(struct string));
17331721 init$fromliteral(&_10, "ment", 4);
1734- push(0 /* _9 */, &_strs, &_10, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 307);
1722+ push(0 /* _9 */, &_strs, &_10, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 302);
17351723 string$dest(&_10);
17361724 }
17371725 {
17381726 struct string _11; memset(&_11, 0, sizeof(struct string));
17391727 init$fromliteral(&_11, "!!!", 3);
1740- push(0 /* _10 */, &_strs, &_11, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 308);
1728+ push(0 /* _10 */, &_strs, &_11, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 303);
17411729 string$dest(&_11);
17421730 }
17431731 {
@@ -1763,7 +1751,7 @@
17631751 string$dest(&_17);
17641752 string$dest(&_16);
17651753 }
1766- push(0 /* _13 */, &*_14, &_15, sizeof(struct typeid$), (void (*)(void *))typeid$$dest, (void (*)(void *, const void *))typeid$$copy, 314);
1754+ push(0 /* _13 */, &*_14, &_15, sizeof(struct typeid$), (void (*)(void *))typeid$$dest, (void (*)(void *, const void *))typeid$$copy, 309);
17671755 typeid$$dest(&_15);
17681756 }
17691757 {
@@ -1778,7 +1766,7 @@
17781766 string$dest(&_18);
17791767 string$dest(&_17);
17801768 }
1781- push(0 /* _14 */, &*_15, &_16, sizeof(struct typeid$), (void (*)(void *))typeid$$dest, (void (*)(void *, const void *))typeid$$copy, 315);
1769+ push(0 /* _14 */, &*_15, &_16, sizeof(struct typeid$), (void (*)(void *))typeid$$dest, (void (*)(void *, const void *))typeid$$copy, 310);
17821770 typeid$$dest(&_16);
17831771 }
17841772 {
@@ -1793,7 +1781,7 @@
17931781 string$dest(&_19);
17941782 string$dest(&_18);
17951783 }
1796- push(0 /* _15 */, &*_16, &_17, sizeof(struct typeid$), (void (*)(void *))typeid$$dest, (void (*)(void *, const void *))typeid$$copy, 316);
1784+ push(0 /* _15 */, &*_16, &_17, sizeof(struct typeid$), (void (*)(void *))typeid$$dest, (void (*)(void *, const void *))typeid$$copy, 311);
17971785 typeid$$dest(&_17);
17981786 }
17991787 {
@@ -1808,7 +1796,7 @@
18081796 string$dest(&_20);
18091797 string$dest(&_19);
18101798 }
1811- push(0 /* _16 */, &*_17, &_18, sizeof(struct typeid$), (void (*)(void *))typeid$$dest, (void (*)(void *, const void *))typeid$$copy, 317);
1799+ push(0 /* _16 */, &*_17, &_18, sizeof(struct typeid$), (void (*)(void *))typeid$$dest, (void (*)(void *, const void *))typeid$$copy, 312);
18121800 typeid$$dest(&_18);
18131801 }
18141802 ////let typeid$ ti = typeid$("", "");
@@ -1827,7 +1815,7 @@
18271815 }
18281816 {
18291817 struct stack/*typeid$*/ *_17 = &(_s).tis;
1830- pop$(&_ti0, &*_17, sizeof(struct typeid$), (void (*)(void *))typeid$$dest, (void (*)(void *, const void *))typeid$$copy, 321);
1818+ pop$(&_ti0, &*_17, sizeof(struct typeid$), (void (*)(void *))typeid$$dest, (void (*)(void *, const void *))typeid$$copy, 316);
18311819 }
18321820 {
18331821 struct string *_18 = &(_ti0).type;
@@ -1862,7 +1850,7 @@
18621850 }
18631851 {
18641852 struct stack/*typeid$*/ *_21 = &(_s).tis;
1865- pop$(&_ti1, &*_21, sizeof(struct typeid$), (void (*)(void *))typeid$$dest, (void (*)(void *, const void *))typeid$$copy, 324);
1853+ pop$(&_ti1, &*_21, sizeof(struct typeid$), (void (*)(void *))typeid$$dest, (void (*)(void *, const void *))typeid$$copy, 319);
18661854 }
18671855 {
18681856 struct string *_22 = &(_ti1).type;
@@ -1899,7 +1887,7 @@
18991887 }
19001888 {
19011889 struct stack/*typeid$*/ *_25 = &(_s).tis;
1902- pop$(&_ti2, &*_25, sizeof(struct typeid$), (void (*)(void *))typeid$$dest, (void (*)(void *, const void *))typeid$$copy, 328);
1890+ pop$(&_ti2, &*_25, sizeof(struct typeid$), (void (*)(void *))typeid$$dest, (void (*)(void *, const void *))typeid$$copy, 323);
19031891 }
19041892 {
19051893 struct string *_26 = &(_ti2).type;
@@ -1934,7 +1922,7 @@
19341922 }
19351923 {
19361924 struct stack/*typeid$*/ *_29 = &(_s).tis;
1937- pop$(&_ti3, &*_29, sizeof(struct typeid$), (void (*)(void *))typeid$$dest, (void (*)(void *, const void *))typeid$$copy, 331);
1925+ pop$(&_ti3, &*_29, sizeof(struct typeid$), (void (*)(void *))typeid$$dest, (void (*)(void *, const void *))typeid$$copy, 326);
19381926 }
19391927 {
19401928 struct string *_30 = &(_ti3).type;
@@ -3032,13 +3020,10 @@
30323020 {
30333021 struct stack/*string2$*/ _1; memset(&_1, 0, sizeof(struct stack/*string2$*/));
30343022 {
3035- pop_opt(&_1, &*data, sizeof(struct string2$), (void (*)(void *))string2$$dest, (void (*)(void *, const void *))string2$$copy, 402);
3023+ pop_opt(&_1, &*data, sizeof(struct string2$), (void (*)(void *))string2$$dest, (void (*)(void *, const void *))string2$$copy, 397);
30363024 }
30373025 if(!(_1).size)
30383026 {
3039- {
3040- dummy$(0 /* _2 */);
3041- }
30423027 }
30433028 else
30443029 {
@@ -3154,13 +3139,10 @@
31543139 {
31553140 struct stack/*tree2$*/ _1; memset(&_1, 0, sizeof(struct stack/*tree2$*/));
31563141 {
3157- pop_opt(&_1, &*data, sizeof(struct tree2$), (void (*)(void *))tree2$$dest, (void (*)(void *, const void *))tree2$$copy, 426);
3142+ pop_opt(&_1, &*data, sizeof(struct tree2$), (void (*)(void *))tree2$$dest, (void (*)(void *, const void *))tree2$$copy, 421);
31583143 }
31593144 if(!(_1).size)
31603145 {
3161- {
3162- dummy$(0 /* _2 */);
3163- }
31643146 }
31653147 else
31663148 {
@@ -3225,41 +3207,24 @@
32253207 }
32263208 }
32273209
3228-void fill$(void *_0, struct stack/*u64*/ *s, const uint64_t *n)
3210+void fill(void *_0, struct stack/*u64*/ *s, const uint64_t *n)
32293211 {
32303212 {
3231- bool _2;
3213+ if(*n > 0)
32323214 {
3233- uint64_t _3; memset(&_3, 0, sizeof(uint64_t));
3234- _3 = 0;
3235- _2 = *n > _3;
3236- _IGNORE_(_3);
3237- }
3238- if(_2)
3239- {
3215+ const uint64_t _n = *n - 1;
32403216 {
3241- uint64_t _4; memset(&_4, 0, sizeof(uint64_t));
32423217 {
3243- uint64_t _5; memset(&_5, 0, sizeof(uint64_t));
3244- _5 = 1;
3245- _4 = *n - _5;
3246- _IGNORE_(_5);
3218+ push(0 /* _1 */, &*s, &_n, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 438);
32473219 }
3248- push(0 /* _3 */, &*s, &_4, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 442);
3249- _IGNORE_(_4);
3250- }
3251- {
3252- uint64_t _5; memset(&_5, 0, sizeof(uint64_t));
32533220 {
3254- uint64_t _6; memset(&_6, 0, sizeof(uint64_t));
3255- _6 = 1;
3256- _5 = *n - _6;
3257- _IGNORE_(_6);
3221+ fill(0 /* _2 */, &*s, &_n);
32583222 }
3259- fill$(0 /* _4 */, &*s, &_5);
3260- _IGNORE_(_5);
32613223 }
32623224 }
3225+ else
3226+ {
3227+ }
32633228 }
32643229 }
32653230
@@ -3268,13 +3233,10 @@
32683233 {
32693234 struct stack/*u64*/ _1; memset(&_1, 0, sizeof(struct stack/*u64*/));
32703235 {
3271- pop_opt(&_1, &*s, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 449);
3236+ pop_opt(&_1, &*s, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 448);
32723237 }
32733238 if(!(_1).size)
32743239 {
3275- {
3276- dummy$(0 /* _2 */);
3277- }
32783240 }
32793241 else
32803242 {
@@ -3293,7 +3255,7 @@
32933255 {
32943256 uint64_t _2; memset(&_2, 0, sizeof(uint64_t));
32953257 _2 = 257;
3296- fill$(0 /* _1 */, &_s, &_2);
3258+ fill(0 /* _1 */, &_s, &_2);
32973259 _IGNORE_(_2);
32983260 }
32993261 {
@@ -3310,7 +3272,7 @@
33103272 {
33113273 uint64_t _6; memset(&_6, 0, sizeof(uint64_t));
33123274 _6 = 12345;
3313- push(0 /* _5 */, &_s, &_6, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 461);
3275+ push(0 /* _5 */, &_s, &_6, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 460);
33143276 _IGNORE_(_6);
33153277 }
33163278 {
@@ -3382,7 +3344,7 @@
33823344 string$dest(&_10);
33833345 string$dest(&_9);
33843346 }
3385- push(0 /* _7 */, &_data, &_8, sizeof(struct string2$), (void (*)(void *))string2$$dest, (void (*)(void *, const void *))string2$$copy, 482);
3347+ push(0 /* _7 */, &_data, &_8, sizeof(struct string2$), (void (*)(void *))string2$$dest, (void (*)(void *, const void *))string2$$copy, 481);
33863348 string2$$dest(&_8);
33873349 }
33883350 {
@@ -3396,7 +3358,7 @@
33963358 string$dest(&_11);
33973359 string$dest(&_10);
33983360 }
3399- push(0 /* _8 */, &_data, &_9, sizeof(struct string2$), (void (*)(void *))string2$$dest, (void (*)(void *, const void *))string2$$copy, 483);
3361+ push(0 /* _8 */, &_data, &_9, sizeof(struct string2$), (void (*)(void *))string2$$dest, (void (*)(void *, const void *))string2$$copy, 482);
34003362 string2$$dest(&_9);
34013363 }
34023364 {
@@ -3410,7 +3372,7 @@
34103372 string$dest(&_12);
34113373 string$dest(&_11);
34123374 }
3413- push(0 /* _9 */, &_data, &_10, sizeof(struct string2$), (void (*)(void *))string2$$dest, (void (*)(void *, const void *))string2$$copy, 484);
3375+ push(0 /* _9 */, &_data, &_10, sizeof(struct string2$), (void (*)(void *))string2$$dest, (void (*)(void *, const void *))string2$$copy, 483);
34143376 string2$$dest(&_10);
34153377 }
34163378 {
@@ -3424,7 +3386,7 @@
34243386 string$dest(&_13);
34253387 string$dest(&_12);
34263388 }
3427- push(0 /* _10 */, &_data, &_11, sizeof(struct string2$), (void (*)(void *))string2$$dest, (void (*)(void *, const void *))string2$$copy, 485);
3389+ push(0 /* _10 */, &_data, &_11, sizeof(struct string2$), (void (*)(void *))string2$$dest, (void (*)(void *, const void *))string2$$copy, 484);
34283390 string2$$dest(&_11);
34293391 }
34303392 {
@@ -3438,7 +3400,7 @@
34383400 string$dest(&_14);
34393401 string$dest(&_13);
34403402 }
3441- push(0 /* _11 */, &_data, &_12, sizeof(struct string2$), (void (*)(void *))string2$$dest, (void (*)(void *, const void *))string2$$copy, 486);
3403+ push(0 /* _11 */, &_data, &_12, sizeof(struct string2$), (void (*)(void *))string2$$dest, (void (*)(void *, const void *))string2$$copy, 485);
34423404 string2$$dest(&_12);
34433405 }
34443406 {
@@ -3452,7 +3414,7 @@
34523414 string$dest(&_15);
34533415 string$dest(&_14);
34543416 }
3455- push(0 /* _12 */, &_data, &_13, sizeof(struct string2$), (void (*)(void *))string2$$dest, (void (*)(void *, const void *))string2$$copy, 487);
3417+ push(0 /* _12 */, &_data, &_13, sizeof(struct string2$), (void (*)(void *))string2$$dest, (void (*)(void *, const void *))string2$$copy, 486);
34563418 string2$$dest(&_13);
34573419 }
34583420 {
@@ -3466,7 +3428,7 @@
34663428 string$dest(&_16);
34673429 string$dest(&_15);
34683430 }
3469- push(0 /* _13 */, &_data, &_14, sizeof(struct string2$), (void (*)(void *))string2$$dest, (void (*)(void *, const void *))string2$$copy, 488);
3431+ push(0 /* _13 */, &_data, &_14, sizeof(struct string2$), (void (*)(void *))string2$$dest, (void (*)(void *, const void *))string2$$copy, 487);
34703432 string2$$dest(&_14);
34713433 }
34723434 {
@@ -3480,7 +3442,7 @@
34803442 string$dest(&_17);
34813443 string$dest(&_16);
34823444 }
3483- push(0 /* _14 */, &_data, &_15, sizeof(struct string2$), (void (*)(void *))string2$$dest, (void (*)(void *, const void *))string2$$copy, 489);
3445+ push(0 /* _14 */, &_data, &_15, sizeof(struct string2$), (void (*)(void *))string2$$dest, (void (*)(void *, const void *))string2$$copy, 488);
34843446 string2$$dest(&_15);
34853447 }
34863448 {
@@ -3494,7 +3456,7 @@
34943456 string$dest(&_18);
34953457 string$dest(&_17);
34963458 }
3497- push(0 /* _15 */, &_data, &_16, sizeof(struct string2$), (void (*)(void *))string2$$dest, (void (*)(void *, const void *))string2$$copy, 490);
3459+ push(0 /* _15 */, &_data, &_16, sizeof(struct string2$), (void (*)(void *))string2$$dest, (void (*)(void *, const void *))string2$$copy, 489);
34983460 string2$$dest(&_16);
34993461 }
35003462 {
@@ -3508,7 +3470,7 @@
35083470 string$dest(&_19);
35093471 string$dest(&_18);
35103472 }
3511- push(0 /* _16 */, &_data, &_17, sizeof(struct string2$), (void (*)(void *))string2$$dest, (void (*)(void *, const void *))string2$$copy, 491);
3473+ push(0 /* _16 */, &_data, &_17, sizeof(struct string2$), (void (*)(void *))string2$$dest, (void (*)(void *, const void *))string2$$copy, 490);
35123474 string2$$dest(&_17);
35133475 }
35143476 {
@@ -3523,7 +3485,7 @@
35233485 for(uint64_t _19 = 0; _19 < _18.ptr; ++_19)
35243486 {
35253487 struct string2$ _e; memset(&_e, 0, sizeof(struct string2$));
3526- at_get$(&_e, &_18, &_19, sizeof(struct string2$), (void (*)(void *))string2$$dest, (void (*)(void *, const void *))string2$$copy, 495);
3488+ at_get$(&_e, &_18, &_19, sizeof(struct string2$), (void (*)(void *))string2$$dest, (void (*)(void *, const void *))string2$$copy, 494);
35273489 {
35283490 const struct StreamOut *_21 = &(*streams).out;
35293491 Print$string2$(0 /* _20 */, &*_21, &_e);
@@ -3651,7 +3613,7 @@
36513613 tree$$dest(&_11);
36523614 tree$$dest(&_10);
36533615 }
3654- push(0 /* _8 */, &_data, &_9, sizeof(struct tree2$), (void (*)(void *))tree2$$dest, (void (*)(void *, const void *))tree2$$copy, 507);
3616+ push(0 /* _8 */, &_data, &_9, sizeof(struct tree2$), (void (*)(void *))tree2$$dest, (void (*)(void *, const void *))tree2$$copy, 506);
36553617 tree2$$dest(&_9);
36563618 }
36573619 {
@@ -3753,7 +3715,7 @@
37533715 tree$$dest(&_12);
37543716 tree$$dest(&_11);
37553717 }
3756- push(0 /* _9 */, &_data, &_10, sizeof(struct tree2$), (void (*)(void *))tree2$$dest, (void (*)(void *, const void *))tree2$$copy, 508);
3718+ push(0 /* _9 */, &_data, &_10, sizeof(struct tree2$), (void (*)(void *))tree2$$dest, (void (*)(void *, const void *))tree2$$copy, 507);
37573719 tree2$$dest(&_10);
37583720 }
37593721 {
@@ -3855,7 +3817,7 @@
38553817 tree$$dest(&_13);
38563818 tree$$dest(&_12);
38573819 }
3858- push(0 /* _10 */, &_data, &_11, sizeof(struct tree2$), (void (*)(void *))tree2$$dest, (void (*)(void *, const void *))tree2$$copy, 509);
3820+ push(0 /* _10 */, &_data, &_11, sizeof(struct tree2$), (void (*)(void *))tree2$$dest, (void (*)(void *, const void *))tree2$$copy, 508);
38593821 tree2$$dest(&_11);
38603822 }
38613823 {
@@ -3905,7 +3867,7 @@
39053867 tree$$dest(&_14);
39063868 tree$$dest(&_13);
39073869 }
3908- push(0 /* _11 */, &_data, &_12, sizeof(struct tree2$), (void (*)(void *))tree2$$dest, (void (*)(void *, const void *))tree2$$copy, 510);
3870+ push(0 /* _11 */, &_data, &_12, sizeof(struct tree2$), (void (*)(void *))tree2$$dest, (void (*)(void *, const void *))tree2$$copy, 509);
39093871 tree2$$dest(&_12);
39103872 }
39113873 {
@@ -3942,7 +3904,7 @@
39423904 tree$$dest(&_15);
39433905 tree$$dest(&_14);
39443906 }
3945- push(0 /* _12 */, &_data, &_13, sizeof(struct tree2$), (void (*)(void *))tree2$$dest, (void (*)(void *, const void *))tree2$$copy, 511);
3907+ push(0 /* _12 */, &_data, &_13, sizeof(struct tree2$), (void (*)(void *))tree2$$dest, (void (*)(void *, const void *))tree2$$copy, 510);
39463908 tree2$$dest(&_13);
39473909 }
39483910 {
@@ -3979,7 +3941,7 @@
39793941 tree$$dest(&_16);
39803942 tree$$dest(&_15);
39813943 }
3982- push(0 /* _13 */, &_data, &_14, sizeof(struct tree2$), (void (*)(void *))tree2$$dest, (void (*)(void *, const void *))tree2$$copy, 512);
3944+ push(0 /* _13 */, &_data, &_14, sizeof(struct tree2$), (void (*)(void *))tree2$$dest, (void (*)(void *, const void *))tree2$$copy, 511);
39833945 tree2$$dest(&_14);
39843946 }
39853947 {
@@ -4003,7 +3965,7 @@
40033965 tree$$dest(&_17);
40043966 tree$$dest(&_16);
40053967 }
4006- push(0 /* _14 */, &_data, &_15, sizeof(struct tree2$), (void (*)(void *))tree2$$dest, (void (*)(void *, const void *))tree2$$copy, 513);
3968+ push(0 /* _14 */, &_data, &_15, sizeof(struct tree2$), (void (*)(void *))tree2$$dest, (void (*)(void *, const void *))tree2$$copy, 512);
40073969 tree2$$dest(&_15);
40083970 }
40093971 {
@@ -4015,19 +3977,19 @@
40153977 {
40163978 struct string _9; memset(&_9, 0, sizeof(struct string));
40173979 init$fromliteral(&_9, "123", 3);
4018- push(0 /* _8 */, &_words, &_9, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 519);
3980+ push(0 /* _8 */, &_words, &_9, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 518);
40193981 string$dest(&_9);
40203982 }
40213983 {
40223984 struct string _10; memset(&_10, 0, sizeof(struct string));
40233985 init$fromliteral(&_10, "456", 3);
4024- push(0 /* _9 */, &_words, &_10, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 519);
3986+ push(0 /* _9 */, &_words, &_10, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 518);
40253987 string$dest(&_10);
40263988 }
40273989 {
40283990 struct string _11; memset(&_11, 0, sizeof(struct string));
40293991 init$fromliteral(&_11, "789", 3);
4030- push(0 /* _10 */, &_words, &_11, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 519);
3992+ push(0 /* _10 */, &_words, &_11, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 518);
40313993 string$dest(&_11);
40323994 }
40333995 {
@@ -4308,7 +4270,7 @@
43084270 for(uint64_t _37 = 0; _37 < _36.ptr; ++_37)
43094271 {
43104272 uint8_t _e; memset(&_e, 0, sizeof(uint8_t));
4311- at_get$(&_e, &_36, &_37, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 562);
4273+ at_get$(&_e, &_36, &_37, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 561);
43124274 {
43134275 const struct StreamOut *_39 = &(*streams).out;
43144276 Put(0 /* _38 */, &*_39, &_e);
@@ -4351,7 +4313,7 @@
43514313 init$fromliteral(&_31, "Hello ", 6);
43524314 struct string _32; memset(&_32, 0, sizeof(struct string));
43534315 init$fromliteral(&_32, "World\n", 6);
4354- strcat$(&_30, &_31, &_32, 572);
4316+ strcat$(&_30, &_31, &_32, 571);
43554317 string$dest(&_32);
43564318 string$dest(&_31);
43574319 }
@@ -4537,7 +4499,7 @@
45374499 {
45384500 struct string _43; memset(&_43, 0, sizeof(struct string));
45394501 init$fromliteral(&_43, "SOLID", 5);
4540- solid(&_other, &_43, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 598);
4502+ solid(&_other, &_43, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 597);
45414503 string$dest(&_43);
45424504 }
45434505 {
@@ -4584,18 +4546,18 @@
45844546 init$fromliteral(&_str, "test...", 7);
45854547 struct stack/*string*/ _stk; memset(&_stk, 0, sizeof(struct stack/*string*/));
45864548 {
4587- push(0 /* _47 */, &_stk, &_str, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 607);
4549+ push(0 /* _47 */, &_stk, &_str, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 606);
45884550 }
45894551 {
4590- push(0 /* _48 */, &_stk, &_str, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 608);
4552+ push(0 /* _48 */, &_stk, &_str, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 607);
45914553 }
45924554 {
45934555 struct stack/*string*/ _49; memset(&_49, 0, sizeof(struct stack/*string*/));
4594- pop_opt(&_49, &_stk, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 609);
4556+ pop_opt(&_49, &_stk, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 608);
45954557 free$(&_49, sizeof(struct string), (void (*)(void *))string$dest);
45964558 }
45974559 {
4598- stack(&_stk, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 610);
4560+ stack(&_stk, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 609);
45994561 }
46004562 {
46014563 struct stack/*u8*/ _49; memset(&_49, 0, sizeof(struct stack/*u8*/));
--- trunk/pragmatic/self_hosting_compiled.c (revision 35)
+++ trunk/pragmatic/self_hosting_compiled.c (revision 36)
@@ -1400,36 +1400,27 @@
14001400 }
14011401
14021402 // emit ws according to indent-level
1403-void Indent$(void *_0, const struct StreamOut *out, const uint64_t *level)
1403+void Indent(void *_0, const struct StreamOut *out, const uint64_t *level)
14041404 {
14051405 {
1406- bool _2;
1406+ if(*level > 0)
14071407 {
1408- uint64_t _3; memset(&_3, 0, sizeof(uint64_t));
1409- _3 = 0;
1410- _2 = *level > _3;
1411- _IGNORE_(_3);
1412- }
1413- if(_2)
1414- {
1408+ const uint64_t _level = *level - 1;
14151409 {
1416- struct string _4; memset(&_4, 0, sizeof(struct string));
1417- init$fromliteral(&_4, " ", 4);
1418- PutStr(0 /* _3 */, &*out, &_4);
1419- string$dest(&_4);
1420- }
1421- {
1422- uint64_t _5; memset(&_5, 0, sizeof(uint64_t));
14231410 {
1424- uint64_t _6; memset(&_6, 0, sizeof(uint64_t));
1425- _6 = 1;
1426- _5 = *level - _6;
1427- _IGNORE_(_6);
1411+ struct string _2; memset(&_2, 0, sizeof(struct string));
1412+ init$fromliteral(&_2, " ", 4);
1413+ PutStr(0 /* _1 */, &*out, &_2);
1414+ string$dest(&_2);
14281415 }
1429- Indent$(0 /* _4 */, &*out, &_5);
1430- _IGNORE_(_5);
1416+ {
1417+ Indent(0 /* _2 */, &*out, &_level);
1418+ }
14311419 }
14321420 }
1421+ else
1422+ {
1423+ }
14331424 }
14341425 }
14351426
@@ -1610,7 +1601,7 @@
16101601 {
16111602 {
16121603 const struct StreamOut *_7 = &(*streams).out;
1613- Indent$(0 /* _6 */, &*_7, &*level);
1604+ Indent(0 /* _6 */, &*_7, &*level);
16141605 }
16151606 {
16161607 const struct StreamOut *_8 = &(*streams).out;
@@ -1634,7 +1625,7 @@
16341625 {
16351626 {
16361627 const struct StreamOut *_9 = &(*streams).out;
1637- Indent$(0 /* _8 */, &*_9, &*level);
1628+ Indent(0 /* _8 */, &*_9, &*level);
16381629 }
16391630 {
16401631 const struct StreamOut *_10 = &(*streams).out;
@@ -1756,7 +1747,7 @@
17561747 uint8_t _1; memset(&_1, 0, sizeof(uint8_t));
17571748 {
17581749 const struct stack/*u8*/ *_2 = &(*id).data;
1759- top_get$(&_1, &*_2, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 261);
1750+ top_get$(&_1, &*_2, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 265);
17601751 }
17611752 isup(&*_0, &_1);
17621753 _IGNORE_(_1);
@@ -1784,7 +1775,7 @@
17841775 {
17851776 {
17861777 const struct stack/*u8*/ *_2 = &(*s).data;
1787- top_get$(&*_0, &*_2, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 266);
1778+ top_get$(&*_0, &*_2, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 270);
17881779 }
17891780 }
17901781 else
@@ -1802,7 +1793,7 @@
18021793 {
18031794 uint8_t _1; memset(&_1, 0, sizeof(uint8_t));
18041795 struct stack/*u8*/ *_2 = &(_t).data;
1805- pop$(&_1, &*_2, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 272);
1796+ pop$(&_1, &*_2, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 276);
18061797 _IGNORE_(_1);
18071798 }
18081799 string$copy(&*_0, &_t);
@@ -1836,7 +1827,7 @@
18361827 const struct stack/*u8*/ *_4 = &(*id).data;
18371828 uint64_t _5; memset(&_5, 0, sizeof(uint64_t));
18381829 _5 = 0;
1839- at_get$(&_3, &*_4, &_5, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 279);
1830+ at_get$(&_3, &*_4, &_5, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 283);
18401831 _IGNORE_(_5);
18411832 }
18421833 *_0 = _2 == _3;
@@ -1958,7 +1949,7 @@
19581949 string$copy(&_new, &(*id));
19591950 {
19601951 struct stack/*u8*/ *_2 = &(_new).data;
1961- push(0 /* _1 */, &*_2, &*cur, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 309);
1952+ push(0 /* _1 */, &*_2, &*cur, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 313);
19621953 }
19631954 string$copy(&*_0, &_new);
19641955 string$dest(&_new);
@@ -2025,7 +2016,7 @@
20252016 }
20262017 {
20272018 struct stack/*u8*/ *_3 = &(_id).data;
2028- push(0 /* _2 */, &*_3, &_ch, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 324);
2019+ push(0 /* _2 */, &*_3, &_ch, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 328);
20292020 }
20302021 string$copy(&*_0, &_id);
20312022 string$dest(&_id);
@@ -2089,7 +2080,7 @@
20892080 }
20902081 {
20912082 struct stack/*u8*/ *_3 = &(_id).data;
2092- push(0 /* _2 */, &*_3, &_ch, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 348);
2083+ push(0 /* _2 */, &*_3, &_ch, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 352);
20932084 }
20942085 string$copy(&*_0, &_id);
20952086 string$dest(&_id);
@@ -2131,7 +2122,7 @@
21312122 if(_1)
21322123 {
21332124 {
2134- empty(&*_0, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 363);
2125+ empty(&*_0, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 367);
21352126 }
21362127 }
21372128 else
@@ -2141,7 +2132,7 @@
21412132 {
21422133 ParseId$(&_2, &*streams, &*txtpos, &*level);
21432134 }
2144- solid(&*_0, &_2, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 365);
2135+ solid(&*_0, &_2, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 369);
21452136 string$dest(&_2);
21462137 }
21472138 }
@@ -2193,7 +2184,7 @@
21932184 }
21942185 {
21952186 struct stack/*u8*/ *_4 = &(_new).data;
2196- push(0 /* _3 */, &*_4, &_digit, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 379);
2187+ push(0 /* _3 */, &*_4, &_digit, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 383);
21972188 }
21982189 {
21992190 GenId$(&_new, &_nr, &_new);
@@ -5028,7 +5019,7 @@
50285019 if(!(_1).size)
50295020 {
50305021 {
5031- empty(&*_0, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 841);
5022+ empty(&*_0, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 845);
50325023 }
50335024 }
50345025 else
@@ -5037,7 +5028,7 @@
50375028 {
50385029 struct structdef _cur; memset(&_cur, 0, sizeof(struct structdef));
50395030 {
5040- at_get$(&_cur, &*structs, &*idx1, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 844);
5031+ at_get$(&_cur, &*structs, &*idx1, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 848);
50415032 }
50425033 struct stack/*u64*/ _2; memset(&_2, 0, sizeof(struct stack/*u64*/));
50435034 bool _3;
@@ -5048,7 +5039,7 @@
50485039 if(_3)
50495040 {
50505041 {
5051- solid(&_2, &*idx1, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 847);
5042+ solid(&_2, &*idx1, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 851);
50525043 }
50535044 }
50545045 else
@@ -5077,7 +5068,7 @@
50775068 if(!(_1).size)
50785069 {
50795070 {
5080- empty(&*_0, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 854);
5071+ empty(&*_0, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 858);
50815072 }
50825073 }
50835074 else
@@ -5086,7 +5077,7 @@
50865077 {
50875078 struct typepureid _cur; memset(&_cur, 0, sizeof(struct typepureid));
50885079 {
5089- at_get$(&_cur, &*elems, &*idx1, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 857);
5080+ at_get$(&_cur, &*elems, &*idx1, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 861);
50905081 }
50915082 struct stack/*u64*/ _2; memset(&_2, 0, sizeof(struct stack/*u64*/));
50925083 bool _3;
@@ -5097,7 +5088,7 @@
50975088 if(_3)
50985089 {
50995090 {
5100- solid(&_2, &*idx1, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 860);
5091+ solid(&_2, &*idx1, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 864);
51015092 }
51025093 }
51035094 else
@@ -6565,7 +6556,7 @@
65656556 {
65666557 struct structdef _sd; memset(&_sd, 0, sizeof(struct structdef));
65676558 {
6568- at_get$(&_sd, &*structs, &*sidx, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 1241);
6559+ at_get$(&_sd, &*structs, &*sidx, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 1245);
65696560 }
65706561 bool _5;
65716562 {
@@ -6658,7 +6649,7 @@
66586649 {
66596650 struct structdef _sd; memset(&_sd, 0, sizeof(struct structdef));
66606651 {
6661- at_get$(&_sd, &*structs, &*sidx, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 1262);
6652+ at_get$(&_sd, &*structs, &*sidx, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 1266);
66626653 }
66636654 bool _5;
66646655 {
@@ -6903,12 +6894,12 @@
69036894 {
69046895 struct structdef _current; memset(&_current, 0, sizeof(struct structdef));
69056896 {
6906- at_get$(&_current, &*structs, &*sidx, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 1316);
6897+ at_get$(&_current, &*structs, &*sidx, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 1320);
69076898 }
69086899 bool *_9 = &(_current).used;
69096900 *_9 = 1;
69106901 {
6911- at_set$(0 /* _10 */, &*structs, &*sidx, &_current, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 1318);
6902+ at_set$(0 /* _10 */, &*structs, &*sidx, &_current, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 1322);
69126903 }
69136904 // store used marker
69146905 structdef$dest(&_current);
@@ -7009,7 +7000,7 @@
70097000 {
70107001 ParseArgTypePure$(&_4, &*streams, &*txtpos, &*level, &*structs);
70117002 }
7012- solid(&_2, &_4, sizeof(struct type_pure), (void (*)(void *))type_pure$dest, (void (*)(void *, const void *))type_pure$copy, 1347);
7003+ solid(&_2, &_4, sizeof(struct type_pure), (void (*)(void *))type_pure$dest, (void (*)(void *, const void *))type_pure$copy, 1351);
70137004 type_pure$dest(&_4);
70147005 }
70157006 }
@@ -7016,7 +7007,7 @@
70167007 else
70177008 {
70187009 {
7019- empty(&_2, sizeof(struct type_pure), (void (*)(void *))type_pure$dest, (void (*)(void *, const void *))type_pure$copy, 1349);
7010+ empty(&_2, sizeof(struct type_pure), (void (*)(void *))type_pure$dest, (void (*)(void *, const void *))type_pure$copy, 1353);
70207011 }
70217012 }
70227013 clone$(&*_0, &_2, sizeof(struct type_pure), (void (*)(void *))type_pure$dest, (void (*)(void *, const void *))type_pure$copy);
@@ -7348,13 +7339,13 @@
73487339 {
73497340 uint64_t _5; memset(&_5, 0, sizeof(uint64_t));
73507341 _5 = 1;
7351- Indent$(0 /* _4 */, &*err, &_5);
7342+ Indent(0 /* _4 */, &*err, &_5);
73527343 _IGNORE_(_5);
73537344 }
73547345 {
73557346 struct typepureid _6; memset(&_6, 0, sizeof(struct typepureid));
73567347 {
7357- at_get$(&_6, &*elems, &*idx1, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 1427);
7348+ at_get$(&_6, &*elems, &*idx1, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 1431);
73587349 }
73597350 EPrTPI(0 /* _5 */, &*err, &_6);
73607351 typepureid$dest(&_6);
@@ -7886,7 +7877,7 @@
78867877 {
78877878 struct typeid _ti; memset(&_ti, 0, sizeof(struct typeid));
78887879 {
7889- at_get$(&_ti, &*tis, &*idx, sizeof(struct typeid), (void (*)(void *))typeid$dest, (void (*)(void *, const void *))typeid$copy, 1588);
7880+ at_get$(&_ti, &*tis, &*idx, sizeof(struct typeid), (void (*)(void *))typeid$dest, (void (*)(void *, const void *))typeid$copy, 1592);
78907881 }
78917882 {
78927883 struct qtype _4; memset(&_4, 0, sizeof(struct qtype));
@@ -7894,7 +7885,7 @@
78947885 const struct type *_5 = &(_ti).type;
78957886 constqt(&_4, &*_5);
78967887 }
7897- push(0 /* _3 */, &*qts, &_4, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 1589);
7888+ push(0 /* _3 */, &*qts, &_4, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 1593);
78987889 qtype$dest(&_4);
78997890 }
79007891 {
@@ -8453,7 +8444,7 @@
84538444 if(!(_1).size)
84548445 {
84558446 {
8456- empty(&*_0, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 1779);
8447+ empty(&*_0, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 1783);
84578448 }
84588449 }
84598450 else
@@ -8462,7 +8453,7 @@
84628453 {
84638454 struct var _found; memset(&_found, 0, sizeof(struct var));
84648455 {
8465- at_get$(&_found, &*scope, &*sp1, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 1782);
8456+ at_get$(&_found, &*scope, &*sp1, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 1786);
84668457 }
84678458 struct stack/*u64*/ _2; memset(&_2, 0, sizeof(struct stack/*u64*/));
84688459 bool _3;
@@ -8491,7 +8482,7 @@
84918482 {
84928483 struct stack/*u64*/ _4; memset(&_4, 0, sizeof(struct stack/*u64*/));
84938484 {
8494- solid(&_4, &*sp1, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 1790);
8485+ solid(&_4, &*sp1, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 1794);
84958486 }
84968487 clone$(&_2, &_4, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/);
84978488 free$(&_4, sizeof(uint64_t), 0/*DEST*/);
@@ -8505,43 +8496,56 @@
85058496 free$(&_1, sizeof(uint64_t), 0/*DEST*/);
85068497 }
85078498
8508-// search position of identifier in parameters - return 0 if not found
8509-void FindPr$(struct stack/*u64*/ *_0, const struct linecol *txtpos, const struct stack/*var*/ *scope, const struct string *id)
8499+void FindPar$(struct stack/*u64*/ *_0, const struct linecol *txtpos, const struct stack/*var*/ *scope, const struct string *id)
85108500 {
8501+ {
8502+ uint64_t _1; memset(&_1, 0, sizeof(uint64_t));
8503+ {
8504+ size(&_1, &*scope);
8505+ }
8506+ struct string _2; memset(&_2, 0, sizeof(struct string));
8507+ {
8508+ uint8_t _3; memset(&_3, 0, sizeof(uint8_t));
8509+ _3 = 42;
8510+ preapp(&_2, &*id, &_3);
8511+ _IGNORE_(_3);
8512+ }
8513+ findid$(&*_0, &*scope, &_1, &_2);
8514+ string$dest(&_2);
8515+ _IGNORE_(_1);
8516+ }
8517+}
8518+
8519+void FindVar$(struct stack/*u64*/ *_0, const struct linecol *txtpos, const struct stack/*var*/ *scope, const struct string *id)
8520+{
8521+ {
8522+ uint64_t _1; memset(&_1, 0, sizeof(uint64_t));
8523+ {
8524+ size(&_1, &*scope);
8525+ }
8526+ struct string _2; memset(&_2, 0, sizeof(struct string));
8527+ {
8528+ uint8_t _3; memset(&_3, 0, sizeof(uint8_t));
8529+ _3 = 95;
8530+ preapp(&_2, &*id, &_3);
8531+ _IGNORE_(_3);
8532+ }
8533+ findid$(&*_0, &*scope, &_1, &_2);
8534+ string$dest(&_2);
8535+ _IGNORE_(_1);
8536+ }
8537+}
8538+
8539+void FindParOrVar$(struct stack/*u64*/ *_0, const struct linecol *txtpos, const struct stack/*var*/ *scope, const struct string *id)
8540+{
85118541 struct stack/*u64*/ _1; memset(&_1, 0, sizeof(struct stack/*u64*/));
85128542 {
8513- uint64_t _2; memset(&_2, 0, sizeof(uint64_t));
8514- {
8515- size(&_2, &*scope);
8516- }
8517- struct string _3; memset(&_3, 0, sizeof(struct string));
8518- {
8519- uint8_t _4; memset(&_4, 0, sizeof(uint8_t));
8520- _4 = 95;
8521- preapp(&_3, &*id, &_4);
8522- _IGNORE_(_4);
8523- }
8524- findid$(&_1, &*scope, &_2, &_3);
8525- string$dest(&_3);
8526- _IGNORE_(_2);
8543+ FindVar$(&_1, &*txtpos, &*scope, &*id);
85278544 }
85288545 if(!(_1).size)
85298546 {
85308547 {
8531- uint64_t _2; memset(&_2, 0, sizeof(uint64_t));
8532- {
8533- size(&_2, &*scope);
8534- }
8535- struct string _3; memset(&_3, 0, sizeof(struct string));
8536- {
8537- uint8_t _4; memset(&_4, 0, sizeof(uint8_t));
8538- _4 = 42;
8539- preapp(&_3, &*id, &_4);
8540- _IGNORE_(_4);
8541- }
8542- findid$(&*_0, &*scope, &_2, &_3);
8543- string$dest(&_3);
8544- _IGNORE_(_2);
8548+ FindPar$(&*_0, &*txtpos, &*scope, &*id);
85458549 }
85468550 }
85478551 else
@@ -8548,7 +8552,7 @@
85488552 {
85498553 const uint64_t *pos = (_1).data;
85508554 {
8551- solid(&*_0, &*pos, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 1798);
8555+ solid(&*_0, &*pos, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 1807);
85528556 }
85538557 }
85548558 free$(&_1, sizeof(uint64_t), 0/*DEST*/);
@@ -8574,7 +8578,7 @@
85748578 _5 = *sp - _6;
85758579 _IGNORE_(_6);
85768580 }
8577- at_get$(&_4, &*scope, &_5, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 1805);
8581+ at_get$(&_4, &*scope, &_5, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 1814);
85788582 _IGNORE_(_5);
85798583 }
85808584 AssertUse$(0 /* _3 */, &*err, &*txtpos, &_4);
@@ -8616,7 +8620,7 @@
86168620 {
86178621 struct stack/*var*/ _1; memset(&_1, 0, sizeof(struct stack/*var*/));
86188622 {
8619- pop_opt_base$(&_1, &*scope, &*base, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 1819);
8623+ pop_opt_base$(&_1, &*scope, &*base, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 1828);
86208624 }
86218625 if(!(_1).size)
86228626 {
@@ -8830,7 +8834,7 @@
88308834 {
88318835 struct qtype _qt; memset(&_qt, 0, sizeof(struct qtype));
88328836 {
8833- at_get$(&_qt, &*elems, &*idx1, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 1871);
8837+ at_get$(&_qt, &*elems, &*idx1, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 1880);
88348838 }
88358839 bool _2; memset(&_2, 0, sizeof(bool));
88368840 bool _3;
@@ -8894,7 +8898,7 @@
88948898 if(!(_1).size)
88958899 {
88968900 {
8897- empty(&*_0, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 1885);
8901+ empty(&*_0, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 1894);
88988902 }
88998903 }
89008904 else
@@ -8903,7 +8907,7 @@
89038907 {
89048908 struct def _cur; memset(&_cur, 0, sizeof(struct def));
89058909 {
8906- at_get$(&_cur, &*defs, &*idx1, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 1888);
8910+ at_get$(&_cur, &*defs, &*idx1, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 1897);
89078911 }
89088912 struct stack/*u64*/ _2; memset(&_2, 0, sizeof(struct stack/*u64*/));
89098913 bool _3;
@@ -8914,7 +8918,7 @@
89148918 if(_3)
89158919 {
89168920 {
8917- solid(&_2, &*idx1, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 1891);
8921+ solid(&_2, &*idx1, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 1900);
89188922 }
89198923 }
89208924 else
@@ -8970,7 +8974,7 @@
89708974 {
89718975 struct structdef _sd; memset(&_sd, 0, sizeof(struct structdef));
89728976 {
8973- at_get$(&_sd, &*structs, &*idx1, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 1905);
8977+ at_get$(&_sd, &*structs, &*idx1, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 1914);
89748978 }
89758979 {
89768980 const struct string *_5 = &(_sd).ti.id;
@@ -9034,7 +9038,7 @@
90349038 {
90359039 {
90369040 {
9037- push(0 /* _1 */, &*defs, &*def, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 1938);
9041+ push(0 /* _1 */, &*defs, &*def, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 1947);
90389042 }
90399043 }
90409044 }
@@ -9043,7 +9047,7 @@
90439047 {
90449048 {
90459049 {
9046- push(0 /* _1 */, &*elems, &*partyp, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 1943);
9050+ push(0 /* _1 */, &*elems, &*partyp, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 1952);
90479051 }
90489052 }
90499053 }
@@ -9142,7 +9146,7 @@
91429146 varinit(&_8, &_9);
91439147 qtypepureid$dest(&_9);
91449148 }
9145- push(0 /* _7 */, &*scope, &_8, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 1964);
9149+ push(0 /* _7 */, &*scope, &_8, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 1973);
91469150 var$dest(&_8);
91479151 }
91489152 qtypepureid$dest(&_parext);
@@ -9270,7 +9274,7 @@
92709274 {
92719275 struct stack/*string*/ _1; memset(&_1, 0, sizeof(struct stack/*string*/));
92729276 {
9273- pop_opt(&_1, &*path, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 1997);
9277+ pop_opt(&_1, &*path, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 2006);
92749278 }
92759279 if(!(_1).size)
92769280 {
@@ -9812,7 +9816,7 @@
98129816 if(_2)
98139817 {
98149818 {
9815- Indent$(0 /* _3 */, &*out, &*level);
9819+ Indent(0 /* _3 */, &*out, &*level);
98169820 }
98179821 {
98189822 struct string _5; memset(&_5, 0, sizeof(struct string));
@@ -9823,7 +9827,7 @@
98239827 }
98249828 // Initialize value with zero-bytes so dynamic memory can safely be copied into it.
98259829 {
9826- Indent$(0 /* _3 */, &*out, &*level);
9830+ Indent(0 /* _3 */, &*out, &*level);
98279831 }
98289832 {
98299833 const struct type_pure *_5 = &(*store).qt.type;
@@ -10025,7 +10029,7 @@
1002510029 }
1002610030 struct structdef _sd; memset(&_sd, 0, sizeof(struct structdef));
1002710031 {
10028- at_get$(&_sd, &*structs, &*sidx, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 2238);
10032+ at_get$(&_sd, &*structs, &*sidx, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 2247);
1002910033 }
1003010034 struct flavour _3; memset(&_3, 0, sizeof(struct flavour));
1003110035 flavour$copy(&_3, &(_sd).type);
@@ -10143,12 +10147,12 @@
1014310147 const uint64_t *elidx = (_7).data;
1014410148 {
1014510149 {
10146- push(0 /* _8 */, &*path, &_id, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 2267);
10150+ push(0 /* _8 */, &*path, &_id, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 2276);
1014710151 }
1014810152 struct typepureid _cur; memset(&_cur, 0, sizeof(struct typepureid));
1014910153 {
1015010154 const struct stack/*typepureid*/ *_9 = &(_sd).elems;
10151- at_get$(&_cur, &*_9, &*elidx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 2268);
10155+ at_get$(&_cur, &*_9, &*elidx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 2277);
1015210156 }
1015310157 struct type_pure _9; memset(&_9, 0, sizeof(struct type_pure));
1015410158 {
@@ -10208,7 +10212,7 @@
1020810212 {
1020910213 struct stack/*var*/ _1; memset(&_1, 0, sizeof(struct stack/*var*/));
1021010214 {
10211- pop_opt_base$(&_1, &*scope, &*base, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2310);
10215+ pop_opt_base$(&_1, &*scope, &*base, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2319);
1021210216 }
1021310217 if(!(_1).size)
1021410218 {
@@ -10265,7 +10269,7 @@
1026510269 }
1026610270 {
1026710271 const struct StreamOut *_6 = &(*streams).out;
10268- Indent$(0 /* _5 */, &*_6, &*level);
10272+ Indent(0 /* _5 */, &*_6, &*level);
1026910273 }
1027010274 {
1027110275 SkipComment$(0 /* _6 */, &*streams, &*txtpos, &*level);
@@ -10320,15 +10324,60 @@
1032010324 }
1032110325 }
1032210326
10327+//string orig;
10328+struct ReducedId
10329+{
10330+ uint64_t par_idx;
10331+ struct string reduced;
10332+};
10333+
10334+void ReducedId$copy(struct ReducedId *copy, struct ReducedId const *orig)
10335+{
10336+ copy->par_idx = orig->par_idx;
10337+ string$copy(&copy->reduced, &orig->reduced);
10338+}
10339+
10340+void ReducedId$dest(struct ReducedId *_0)
10341+{
10342+ _IGNORE_(_0->par_idx);
10343+ string$dest(&_0->reduced);
10344+}
10345+
10346+void ReducedId(struct ReducedId *_0, const uint64_t *par_idx, const struct string *reduced)
10347+{
10348+ _0->par_idx = *par_idx;
10349+ string$copy(&_0->reduced, &*reduced);
10350+}
10351+
10352+void Print$ReducedId(void *_0, const struct StreamOut *out, const struct ReducedId *s)
10353+{
10354+ fprintf(out->f, "ReducedId(");
10355+ Print$u64(0, out, &s->par_idx);
10356+ fprintf(out->f, ", ");
10357+ Print$string(0, out, &s->reduced);
10358+ fprintf(out->f, ")");
10359+}
10360+
10361+void cmp$ReducedId(struct cmp *res, const struct ReducedId *x, const struct ReducedId *y)
10362+{
10363+ cmp$u64(res, &x->par_idx, &y->par_idx);
10364+ if(res->type != 1)
10365+ return;
10366+ cmp$string(res, &x->reduced, &y->reduced);
10367+ if(res->type != 1)
10368+ return;
10369+}
10370+
10371+//data verification = verified | unverified;
1032310372 // forward-decl
10324-void ParseExpr$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct stack/*qtypepureid*/ *store, const struct string *id, const bool *partial, const bool *action, const struct string *self);
10373+void ParseExpr$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct stack/*qtypepureid*/ *store, const struct string *id, const bool *partial, const bool *action, const struct string *self, struct stack/*ReducedId*/ *reduced_ids, const bool *verified);
1032510374 // forward-decl
10326-void ParseBlock$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, const uint64_t *tmpnr, const struct stack/*qtypepureid*/ *store, const bool *partial, const bool *action, const struct string *self);
10375+void ParseBlock$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, const uint64_t *tmpnr, const struct stack/*qtypepureid*/ *store, const bool *partial, const bool *action, const struct string *self, struct stack/*ReducedId*/ *reduced_ids, const bool *verified);
1032710376 // forward-decl
10328-void ParseBlockRaw$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, const uint64_t *tmpnr, const struct stack/*qtypepureid*/ *store, const bool *partial, const bool *action, const struct string *self);
10377+void ParseBlockRaw$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, const uint64_t *tmpnr, const struct stack/*qtypepureid*/ *store, const bool *partial, const bool *action, const struct string *self, struct stack/*ReducedId*/ *reduced_ids, const bool *verified);
1032910378 // forward-decl
10330-void ParseArg$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct qtypepureid *store, const struct qtypepureid *par, const bool *partial, const bool *action, const struct string *self, const uint64_t *parnr, const struct def *def, uint64_t *paridx, const uint64_t *base, const struct string *callee, const struct stack/*type_pure*/ *st, const struct type_pure *retype);
10331-void ParseCC$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct def *def, const uint64_t *paridx, const struct qtypepureid *store, const uint64_t *base, const struct string *callee, const struct stack/*type_pure*/ *st_, const struct type_pure *retype)
10379+void ParseArg$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct qtypepureid *store, const struct qtypepureid *par, const bool *partial, const bool *action, const struct string *self, struct stack/*ReducedId*/ *reduced_ids, const bool *verified, const uint64_t *parnr, const struct def *def, uint64_t *paridx, const uint64_t *base, const struct string *callee, const struct stack/*type_pure*/ *st, const struct type_pure *retype);
10380+void ParseCC$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct def *def, const uint64_t *paridx, const struct qtypepureid *store, const bool *partial, const bool *action, const struct string *self, const struct stack/*ReducedId*/ *reduced_ids, const bool *verified, const uint64_t *base, const struct string *callee, const struct stack/*type_pure*/ *st_, const struct type_pure *retype)
1033210381 {
1033310382 {
1033410383 bool _2;
@@ -10361,284 +10410,330 @@
1036110410 }
1036210411 bool _4;
1036310412 {
10364- isop1(&_4, &*callee);
10413+ bool _5; memset(&_5, 0, sizeof(bool));
10414+ {
10415+ bool _6; memset(&_6, 0, sizeof(bool));
10416+ {
10417+ not(&_6, &*partial);
10418+ }
10419+ bool _7; memset(&_7, 0, sizeof(bool));
10420+ {
10421+ strequ(&_7, &*callee, &*self);
10422+ }
10423+ and(&_5, &_6, &_7);
10424+ _IGNORE_(_7);
10425+ _IGNORE_(_6);
10426+ }
10427+ bool _6; memset(&_6, 0, sizeof(bool));
10428+ {
10429+ not(&_6, &*verified);
10430+ }
10431+ and(&_4, &_5, &_6);
10432+ _IGNORE_(_6);
10433+ _IGNORE_(_5);
1036510434 }
1036610435 if(_4)
1036710436 {
10368- struct stack/*type_pure*/ _5; memset(&_5, 0, sizeof(struct stack/*type_pure*/));
10369- clone$(&_5, &(*st_), sizeof(struct type_pure), (void (*)(void *))type_pure$dest, (void (*)(void *, const void *))type_pure$copy);
10370- if(!(_5).size)
1037110437 {
10438+ const struct StreamOut *_6 = &(*streams).err;
10439+ struct string _7; memset(&_7, 0, sizeof(struct string));
10440+ init$fromliteral(&_7, "total function ", 15);
10441+ PutStr(0 /* _5 */, &*_6, &_7);
10442+ string$dest(&_7);
10443+ }
10444+ {
10445+ const struct StreamOut *_7 = &(*streams).err;
10446+ PutStr(0 /* _6 */, &*_7, &*callee);
10447+ }
10448+ {
10449+ const struct StreamOut *_8 = &(*streams).err;
10450+ struct string _9; memset(&_9, 0, sizeof(struct string));
10451+ init$fromliteral(&_9, " calls itself recursivly (hint: reduce parameter or declare partial), ", 70);
10452+ PutStr(0 /* _7 */, &*_8, &_9);
10453+ string$dest(&_9);
10454+ }
10455+ {
10456+ const struct StreamOut *_9 = &(*streams).err;
10457+ struct string _10; memset(&_10, 0, sizeof(struct string));
10458+ init$fromliteral(&_10, "reduced parameters: ", 20);
10459+ PutStr(0 /* _8 */, &*_9, &_10);
10460+ string$dest(&_10);
10461+ }
10462+ {
10463+ const struct StreamOut *_10 = &(*streams).err;
10464+ Print$stack(0 /* _9 */, &*_10, &*reduced_ids, sizeof(struct ReducedId), (void (*)(void *, const struct StreamOut *, const void *))Print$ReducedId);
10465+ }
10466+ {
10467+ const struct StreamOut *_11 = &(*streams).err;
10468+ Fail$(0 /* _10 */, &*_11, &*txtpos);
10469+ }
10470+ }
10471+ bool _6;
10472+ {
10473+ isop1(&_6, &*callee);
10474+ }
10475+ if(_6)
10476+ {
10477+ struct stack/*type_pure*/ _7; memset(&_7, 0, sizeof(struct stack/*type_pure*/));
10478+ clone$(&_7, &(*st_), sizeof(struct type_pure), (void (*)(void *))type_pure$dest, (void (*)(void *, const void *))type_pure$copy);
10479+ if(!(_7).size)
10480+ {
1037210481 {
1037310482 {
10374- const struct StreamOut *_8 = &(*streams).err;
10375- struct string _9; memset(&_9, 0, sizeof(struct string));
10376- init$fromliteral(&_9, "missing subtype for ", 20);
10377- PutStr(0 /* _7 */, &*_8, &_9);
10378- string$dest(&_9);
10483+ const struct StreamOut *_10 = &(*streams).err;
10484+ struct string _11; memset(&_11, 0, sizeof(struct string));
10485+ init$fromliteral(&_11, "missing subtype for ", 20);
10486+ PutStr(0 /* _9 */, &*_10, &_11);
10487+ string$dest(&_11);
1037910488 }
1038010489 {
10381- const struct StreamOut *_9 = &(*streams).err;
10382- PutStr(0 /* _8 */, &*_9, &*callee);
10490+ const struct StreamOut *_11 = &(*streams).err;
10491+ PutStr(0 /* _10 */, &*_11, &*callee);
1038310492 }
1038410493 {
10385- const struct StreamOut *_10 = &(*streams).err;
10386- Fail$(0 /* _9 */, &*_10, &*txtpos);
10494+ const struct StreamOut *_12 = &(*streams).err;
10495+ Fail$(0 /* _11 */, &*_12, &*txtpos);
1038710496 }
1038810497 }
1038910498 }
1039010499 else
1039110500 {
10392- const struct type_pure *subtype = (_5).data;
10501+ const struct type_pure *subtype = (_7).data;
1039310502 {
10394- bool _9;
10503+ bool _11;
1039510504 {
10396- uint64_t _10; memset(&_10, 0, sizeof(uint64_t));
10505+ uint64_t _12; memset(&_12, 0, sizeof(uint64_t));
1039710506 {
10398- size(&_10, &*scope);
10507+ size(&_12, &*scope);
1039910508 }
10400- uint64_t _11; memset(&_11, 0, sizeof(uint64_t));
10509+ uint64_t _13; memset(&_13, 0, sizeof(uint64_t));
1040110510 {
10402- uint64_t _12; memset(&_12, 0, sizeof(uint64_t));
10403- _12 = 1;
10404- _11 = *base + _12;
10405- _IGNORE_(_12);
10511+ uint64_t _14; memset(&_14, 0, sizeof(uint64_t));
10512+ _14 = 1;
10513+ _13 = *base + _14;
10514+ _IGNORE_(_14);
1040610515 }
10407- _9 = _10 != _11;
10408- _IGNORE_(_11);
10409- _IGNORE_(_10);
10516+ _11 = _12 != _13;
10517+ _IGNORE_(_13);
10518+ _IGNORE_(_12);
1041010519 }
10411- if(_9)
10520+ if(_11)
1041210521 {
1041310522 {
10414- const struct StreamOut *_11 = &(*streams).err;
10415- PutStr(0 /* _10 */, &*_11, &*callee);
10523+ const struct StreamOut *_13 = &(*streams).err;
10524+ PutStr(0 /* _12 */, &*_13, &*callee);
1041610525 }
1041710526 {
10418- const struct StreamOut *_12 = &(*streams).err;
10419- struct string _13; memset(&_13, 0, sizeof(struct string));
10420- init$fromliteral(&_13, " needs one argument but got ", 28);
10421- PutStr(0 /* _11 */, &*_12, &_13);
10422- string$dest(&_13);
10527+ const struct StreamOut *_14 = &(*streams).err;
10528+ struct string _15; memset(&_15, 0, sizeof(struct string));
10529+ init$fromliteral(&_15, " needs one argument but got ", 28);
10530+ PutStr(0 /* _13 */, &*_14, &_15);
10531+ string$dest(&_15);
1042310532 }
1042410533 {
10425- const struct StreamOut *_13 = &(*streams).err;
10426- uint64_t _14; memset(&_14, 0, sizeof(uint64_t));
10534+ const struct StreamOut *_15 = &(*streams).err;
10535+ uint64_t _16; memset(&_16, 0, sizeof(uint64_t));
1042710536 {
10428- uint64_t _15; memset(&_15, 0, sizeof(uint64_t));
10537+ uint64_t _17; memset(&_17, 0, sizeof(uint64_t));
1042910538 {
10430- size(&_15, &*scope);
10539+ size(&_17, &*scope);
1043110540 }
10432- _14 = _15 - *base;
10433- _IGNORE_(_15);
10541+ _16 = _17 - *base;
10542+ _IGNORE_(_17);
1043410543 }
10435- Print$u64(0 /* _12 */, &*_13, &_14);
10436- _IGNORE_(_14);
10544+ Print$u64(0 /* _14 */, &*_15, &_16);
10545+ _IGNORE_(_16);
1043710546 }
1043810547 {
10439- const struct StreamOut *_14 = &(*streams).err;
10440- Fail$(0 /* _13 */, &*_14, &*txtpos);
10548+ const struct StreamOut *_16 = &(*streams).err;
10549+ Fail$(0 /* _15 */, &*_16, &*txtpos);
1044110550 }
1044210551 }
1044310552 struct var _arg0; memset(&_arg0, 0, sizeof(struct var));
1044410553 {
10445- at_get$(&_arg0, &*scope, &*base, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2372);
10554+ at_get$(&_arg0, &*scope, &*base, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2400);
1044610555 }
10447- bool *_10 = &(_arg0).used;
10448- *_10 = 1;
10556+ bool *_12 = &(_arg0).used;
10557+ *_12 = 1;
1044910558 // mark argument used
1045010559 {
10451- at_set$(0 /* _11 */, &*scope, &*base, &_arg0, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2374);
10560+ at_set$(0 /* _13 */, &*scope, &*base, &_arg0, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2402);
1045210561 }
1045310562 // store changed arg
10454- bool _13;
10563+ bool _15;
1045510564 {
10456- ispureprim(&_13, &*subtype);
10565+ ispureprim(&_15, &*subtype);
1045710566 }
10458- if(_13)
10567+ if(_15)
1045910568 {
1046010569 {
10461- const struct StreamOut *_15 = &(*streams).out;
10462- Indent$(0 /* _14 */, &*_15, &*level);
10463- }
10464- {
10465- const struct StreamOut *_16 = &(*streams).out;
10466- const struct string *_17 = &(*store).id;
10467- PutStr(0 /* _15 */, &*_16, &*_17);
10468- }
10469- {
1047010570 const struct StreamOut *_17 = &(*streams).out;
10471- struct string _18; memset(&_18, 0, sizeof(struct string));
10472- init$fromliteral(&_18, " = ", 3);
10473- PutStr(0 /* _16 */, &*_17, &_18);
10474- string$dest(&_18);
10571+ Indent(0 /* _16 */, &*_17, &*level);
1047510572 }
1047610573 {
1047710574 const struct StreamOut *_18 = &(*streams).out;
10478- struct string _19; memset(&_19, 0, sizeof(struct string));
10479- {
10480- to_op1(&_19, &*callee);
10481- }
10482- PutStr(0 /* _17 */, &*_18, &_19);
10483- string$dest(&_19);
10575+ const struct string *_19 = &(*store).id;
10576+ PutStr(0 /* _17 */, &*_18, &*_19);
1048410577 }
1048510578 {
1048610579 const struct StreamOut *_19 = &(*streams).out;
1048710580 struct string _20; memset(&_20, 0, sizeof(struct string));
10488- init$fromliteral(&_20, " ", 1);
10581+ init$fromliteral(&_20, " = ", 3);
1048910582 PutStr(0 /* _18 */, &*_19, &_20);
1049010583 string$dest(&_20);
1049110584 }
1049210585 {
1049310586 const struct StreamOut *_20 = &(*streams).out;
10494- struct string *_21 = &(_arg0).qti.id;
10495- PutStr(0 /* _19 */, &*_20, &*_21);
10587+ struct string _21; memset(&_21, 0, sizeof(struct string));
10588+ {
10589+ to_op1(&_21, &*callee);
10590+ }
10591+ PutStr(0 /* _19 */, &*_20, &_21);
10592+ string$dest(&_21);
1049610593 }
1049710594 {
1049810595 const struct StreamOut *_21 = &(*streams).out;
1049910596 struct string _22; memset(&_22, 0, sizeof(struct string));
10500- init$fromliteral(&_22, ";\n", 2);
10597+ init$fromliteral(&_22, " ", 1);
1050110598 PutStr(0 /* _20 */, &*_21, &_22);
1050210599 string$dest(&_22);
1050310600 }
10601+ {
10602+ const struct StreamOut *_22 = &(*streams).out;
10603+ struct string *_23 = &(_arg0).qti.id;
10604+ PutStr(0 /* _21 */, &*_22, &*_23);
10605+ }
10606+ {
10607+ const struct StreamOut *_23 = &(*streams).out;
10608+ struct string _24; memset(&_24, 0, sizeof(struct string));
10609+ init$fromliteral(&_24, ";\n", 2);
10610+ PutStr(0 /* _22 */, &*_23, &_24);
10611+ string$dest(&_24);
10612+ }
1050410613 }
1050510614 else
1050610615 {
1050710616 {
10508- const struct StreamOut *_15 = &(*streams).err;
10509- PutStr(0 /* _14 */, &*_15, &*callee);
10617+ const struct StreamOut *_17 = &(*streams).err;
10618+ PutStr(0 /* _16 */, &*_17, &*callee);
1051010619 }
1051110620 {
10512- const struct StreamOut *_16 = &(*streams).err;
10513- struct string _17; memset(&_17, 0, sizeof(struct string));
10514- init$fromliteral(&_17, " only implemented for primitive types", 37);
10515- PutStr(0 /* _15 */, &*_16, &_17);
10516- string$dest(&_17);
10621+ const struct StreamOut *_18 = &(*streams).err;
10622+ struct string _19; memset(&_19, 0, sizeof(struct string));
10623+ init$fromliteral(&_19, " only implemented for primitive types", 37);
10624+ PutStr(0 /* _17 */, &*_18, &_19);
10625+ string$dest(&_19);
1051710626 }
1051810627 {
10519- const struct StreamOut *_17 = &(*streams).err;
10520- Fail$(0 /* _16 */, &*_17, &*txtpos);
10628+ const struct StreamOut *_19 = &(*streams).err;
10629+ Fail$(0 /* _18 */, &*_19, &*txtpos);
1052110630 }
1052210631 }
1052310632 {
10524- ignore$(0 /* _14 */, &*base, &*scope);
10633+ ignore$(0 /* _16 */, &*base, &*scope);
1052510634 }
1052610635 // forget args explicitly, since we're not using DoCall/Climb
1052710636 var$dest(&_arg0);
1052810637 }
1052910638 }
10530- free$(&_5, sizeof(struct type_pure), (void (*)(void *))type_pure$dest);
10639+ free$(&_7, sizeof(struct type_pure), (void (*)(void *))type_pure$dest);
1053110640 }
1053210641 else
1053310642 {
10534- bool _5;
10643+ bool _7;
1053510644 {
10536- isop2(&_5, &*callee);
10645+ isop2(&_7, &*callee);
1053710646 }
10538- if(_5)
10647+ if(_7)
1053910648 {
10540- struct stack/*type_pure*/ _6; memset(&_6, 0, sizeof(struct stack/*type_pure*/));
10541- clone$(&_6, &(*st_), sizeof(struct type_pure), (void (*)(void *))type_pure$dest, (void (*)(void *, const void *))type_pure$copy);
10542- if(!(_6).size)
10649+ struct stack/*type_pure*/ _8; memset(&_8, 0, sizeof(struct stack/*type_pure*/));
10650+ clone$(&_8, &(*st_), sizeof(struct type_pure), (void (*)(void *))type_pure$dest, (void (*)(void *, const void *))type_pure$copy);
10651+ if(!(_8).size)
1054310652 {
1054410653 {
1054510654 {
10546- const struct StreamOut *_9 = &(*streams).err;
10547- struct string _10; memset(&_10, 0, sizeof(struct string));
10548- init$fromliteral(&_10, "missing subtype for ", 20);
10549- PutStr(0 /* _8 */, &*_9, &_10);
10550- string$dest(&_10);
10655+ const struct StreamOut *_11 = &(*streams).err;
10656+ struct string _12; memset(&_12, 0, sizeof(struct string));
10657+ init$fromliteral(&_12, "missing subtype for ", 20);
10658+ PutStr(0 /* _10 */, &*_11, &_12);
10659+ string$dest(&_12);
1055110660 }
1055210661 {
10553- const struct StreamOut *_10 = &(*streams).err;
10554- PutStr(0 /* _9 */, &*_10, &*callee);
10662+ const struct StreamOut *_12 = &(*streams).err;
10663+ PutStr(0 /* _11 */, &*_12, &*callee);
1055510664 }
1055610665 {
10557- const struct StreamOut *_11 = &(*streams).err;
10558- Fail$(0 /* _10 */, &*_11, &*txtpos);
10666+ const struct StreamOut *_13 = &(*streams).err;
10667+ Fail$(0 /* _12 */, &*_13, &*txtpos);
1055910668 }
1056010669 }
1056110670 }
1056210671 else
1056310672 {
10564- const struct type_pure *subtype = (_6).data;
10673+ const struct type_pure *subtype = (_8).data;
1056510674 {
10566- bool _10;
10675+ bool _12;
1056710676 {
10568- uint64_t _11; memset(&_11, 0, sizeof(uint64_t));
10677+ uint64_t _13; memset(&_13, 0, sizeof(uint64_t));
1056910678 {
10570- size(&_11, &*scope);
10679+ size(&_13, &*scope);
1057110680 }
10572- uint64_t _12; memset(&_12, 0, sizeof(uint64_t));
10681+ uint64_t _14; memset(&_14, 0, sizeof(uint64_t));
1057310682 {
10574- uint64_t _13; memset(&_13, 0, sizeof(uint64_t));
10575- _13 = 2;
10576- _12 = *base + _13;
10577- _IGNORE_(_13);
10683+ uint64_t _15; memset(&_15, 0, sizeof(uint64_t));
10684+ _15 = 2;
10685+ _14 = *base + _15;
10686+ _IGNORE_(_15);
1057810687 }
10579- _10 = _11 != _12;
10580- _IGNORE_(_12);
10581- _IGNORE_(_11);
10688+ _12 = _13 != _14;
10689+ _IGNORE_(_14);
10690+ _IGNORE_(_13);
1058210691 }
10583- if(_10)
10692+ if(_12)
1058410693 {
1058510694 {
10586- const struct StreamOut *_12 = &(*streams).err;
10587- PutStr(0 /* _11 */, &*_12, &*callee);
10695+ const struct StreamOut *_14 = &(*streams).err;
10696+ PutStr(0 /* _13 */, &*_14, &*callee);
1058810697 }
1058910698 {
10590- const struct StreamOut *_13 = &(*streams).err;
10591- struct string _14; memset(&_14, 0, sizeof(struct string));
10592- init$fromliteral(&_14, " needs two arguments but got ", 29);
10593- PutStr(0 /* _12 */, &*_13, &_14);
10594- string$dest(&_14);
10699+ const struct StreamOut *_15 = &(*streams).err;
10700+ struct string _16; memset(&_16, 0, sizeof(struct string));
10701+ init$fromliteral(&_16, " needs two arguments but got ", 29);
10702+ PutStr(0 /* _14 */, &*_15, &_16);
10703+ string$dest(&_16);
1059510704 }
1059610705 {
10597- const struct StreamOut *_14 = &(*streams).err;
10598- uint64_t _15; memset(&_15, 0, sizeof(uint64_t));
10706+ const struct StreamOut *_16 = &(*streams).err;
10707+ uint64_t _17; memset(&_17, 0, sizeof(uint64_t));
1059910708 {
10600- uint64_t _16; memset(&_16, 0, sizeof(uint64_t));
10709+ uint64_t _18; memset(&_18, 0, sizeof(uint64_t));
1060110710 {
10602- size(&_16, &*scope);
10711+ size(&_18, &*scope);
1060310712 }
10604- _15 = _16 - *base;
10605- _IGNORE_(_16);
10713+ _17 = _18 - *base;
10714+ _IGNORE_(_18);
1060610715 }
10607- Print$u64(0 /* _13 */, &*_14, &_15);
10608- _IGNORE_(_15);
10716+ Print$u64(0 /* _15 */, &*_16, &_17);
10717+ _IGNORE_(_17);
1060910718 }
1061010719 {
10611- const struct StreamOut *_15 = &(*streams).err;
10612- Fail$(0 /* _14 */, &*_15, &*txtpos);
10720+ const struct StreamOut *_17 = &(*streams).err;
10721+ Fail$(0 /* _16 */, &*_17, &*txtpos);
1061310722 }
1061410723 }
1061510724 struct var _arg0; memset(&_arg0, 0, sizeof(struct var));
1061610725 {
10617- at_get$(&_arg0, &*scope, &*base, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2409);
10726+ at_get$(&_arg0, &*scope, &*base, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2437);
1061810727 }
10619- bool *_11 = &(_arg0).used;
10620- *_11 = 1;
10728+ bool *_13 = &(_arg0).used;
10729+ *_13 = 1;
1062110730 // mark argument used
1062210731 {
10623- at_set$(0 /* _12 */, &*scope, &*base, &_arg0, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2411);
10732+ at_set$(0 /* _14 */, &*scope, &*base, &_arg0, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2439);
1062410733 }
1062510734 // store changed arg
1062610735 struct var _arg1; memset(&_arg1, 0, sizeof(struct var));
1062710736 {
10628- uint64_t _13; memset(&_13, 0, sizeof(uint64_t));
10629- {
10630- uint64_t _14; memset(&_14, 0, sizeof(uint64_t));
10631- _14 = 1;
10632- _13 = *base + _14;
10633- _IGNORE_(_14);
10634- }
10635- at_get$(&_arg1, &*scope, &_13, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2412);
10636- _IGNORE_(_13);
10637- }
10638- bool *_13 = &(_arg1).used;
10639- *_13 = 1;
10640- // mark argument used
10641- {
1064210737 uint64_t _15; memset(&_15, 0, sizeof(uint64_t));
1064310738 {
1064410739 uint64_t _16; memset(&_16, 0, sizeof(uint64_t));
@@ -10646,52 +10741,50 @@
1064610741 _15 = *base + _16;
1064710742 _IGNORE_(_16);
1064810743 }
10649- at_set$(0 /* _14 */, &*scope, &_15, &_arg1, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2414);
10744+ at_get$(&_arg1, &*scope, &_15, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2440);
1065010745 _IGNORE_(_15);
1065110746 }
10747+ bool *_15 = &(_arg1).used;
10748+ *_15 = 1;
10749+ // mark argument used
10750+ {
10751+ uint64_t _17; memset(&_17, 0, sizeof(uint64_t));
10752+ {
10753+ uint64_t _18; memset(&_18, 0, sizeof(uint64_t));
10754+ _18 = 1;
10755+ _17 = *base + _18;
10756+ _IGNORE_(_18);
10757+ }
10758+ at_set$(0 /* _16 */, &*scope, &_17, &_arg1, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2442);
10759+ _IGNORE_(_17);
10760+ }
1065210761 // store changed arg
10653- bool _16;
10762+ bool _18;
1065410763 {
10655- ispureprim(&_16, &*subtype);
10764+ ispureprim(&_18, &*subtype);
1065610765 }
10657- if(_16)
10766+ if(_18)
1065810767 {
1065910768 {
10660- const struct StreamOut *_18 = &(*streams).out;
10661- Indent$(0 /* _17 */, &*_18, &*level);
10662- }
10663- {
10664- const struct StreamOut *_19 = &(*streams).out;
10665- const struct string *_20 = &(*store).id;
10666- PutStr(0 /* _18 */, &*_19, &*_20);
10667- }
10668- {
1066910769 const struct StreamOut *_20 = &(*streams).out;
10670- struct string _21; memset(&_21, 0, sizeof(struct string));
10671- init$fromliteral(&_21, " = ", 3);
10672- PutStr(0 /* _19 */, &*_20, &_21);
10673- string$dest(&_21);
10770+ Indent(0 /* _19 */, &*_20, &*level);
1067410771 }
1067510772 {
1067610773 const struct StreamOut *_21 = &(*streams).out;
10677- struct string *_22 = &(_arg0).qti.id;
10774+ const struct string *_22 = &(*store).id;
1067810775 PutStr(0 /* _20 */, &*_21, &*_22);
1067910776 }
1068010777 {
1068110778 const struct StreamOut *_22 = &(*streams).out;
1068210779 struct string _23; memset(&_23, 0, sizeof(struct string));
10683- init$fromliteral(&_23, " ", 1);
10780+ init$fromliteral(&_23, " = ", 3);
1068410781 PutStr(0 /* _21 */, &*_22, &_23);
1068510782 string$dest(&_23);
1068610783 }
1068710784 {
1068810785 const struct StreamOut *_23 = &(*streams).out;
10689- struct string _24; memset(&_24, 0, sizeof(struct string));
10690- {
10691- to_op2(&_24, &*callee);
10692- }
10693- PutStr(0 /* _22 */, &*_23, &_24);
10694- string$dest(&_24);
10786+ struct string *_24 = &(_arg0).qti.id;
10787+ PutStr(0 /* _22 */, &*_23, &*_24);
1069510788 }
1069610789 {
1069710790 const struct StreamOut *_24 = &(*streams).out;
@@ -10702,37 +10795,53 @@
1070210795 }
1070310796 {
1070410797 const struct StreamOut *_25 = &(*streams).out;
10705- struct string *_26 = &(_arg1).qti.id;
10706- PutStr(0 /* _24 */, &*_25, &*_26);
10798+ struct string _26; memset(&_26, 0, sizeof(struct string));
10799+ {
10800+ to_op2(&_26, &*callee);
10801+ }
10802+ PutStr(0 /* _24 */, &*_25, &_26);
10803+ string$dest(&_26);
1070710804 }
1070810805 {
1070910806 const struct StreamOut *_26 = &(*streams).out;
1071010807 struct string _27; memset(&_27, 0, sizeof(struct string));
10711- init$fromliteral(&_27, ";\n", 2);
10808+ init$fromliteral(&_27, " ", 1);
1071210809 PutStr(0 /* _25 */, &*_26, &_27);
1071310810 string$dest(&_27);
1071410811 }
10812+ {
10813+ const struct StreamOut *_27 = &(*streams).out;
10814+ struct string *_28 = &(_arg1).qti.id;
10815+ PutStr(0 /* _26 */, &*_27, &*_28);
10816+ }
10817+ {
10818+ const struct StreamOut *_28 = &(*streams).out;
10819+ struct string _29; memset(&_29, 0, sizeof(struct string));
10820+ init$fromliteral(&_29, ";\n", 2);
10821+ PutStr(0 /* _27 */, &*_28, &_29);
10822+ string$dest(&_29);
10823+ }
1071510824 }
1071610825 else
1071710826 {
1071810827 {
10719- const struct StreamOut *_18 = &(*streams).err;
10720- PutStr(0 /* _17 */, &*_18, &*callee);
10828+ const struct StreamOut *_20 = &(*streams).err;
10829+ PutStr(0 /* _19 */, &*_20, &*callee);
1072110830 }
1072210831 {
10723- const struct StreamOut *_19 = &(*streams).err;
10724- struct string _20; memset(&_20, 0, sizeof(struct string));
10725- init$fromliteral(&_20, " only implemented for primitive types", 37);
10726- PutStr(0 /* _18 */, &*_19, &_20);
10727- string$dest(&_20);
10832+ const struct StreamOut *_21 = &(*streams).err;
10833+ struct string _22; memset(&_22, 0, sizeof(struct string));
10834+ init$fromliteral(&_22, " only implemented for primitive types", 37);
10835+ PutStr(0 /* _20 */, &*_21, &_22);
10836+ string$dest(&_22);
1072810837 }
1072910838 {
10730- const struct StreamOut *_20 = &(*streams).err;
10731- Fail$(0 /* _19 */, &*_20, &*txtpos);
10839+ const struct StreamOut *_22 = &(*streams).err;
10840+ Fail$(0 /* _21 */, &*_22, &*txtpos);
1073210841 }
1073310842 }
1073410843 {
10735- ignore$(0 /* _17 */, &*base, &*scope);
10844+ ignore$(0 /* _19 */, &*base, &*scope);
1073610845 }
1073710846 // forget args explicitly, since we're not using DoCall/Climb
1073810847 var$dest(&_arg1);
@@ -10739,35 +10848,35 @@
1073910848 var$dest(&_arg0);
1074010849 }
1074110850 }
10742- free$(&_6, sizeof(struct type_pure), (void (*)(void *))type_pure$dest);
10851+ free$(&_8, sizeof(struct type_pure), (void (*)(void *))type_pure$dest);
1074310852 }
1074410853 else
1074510854 {
10746- struct stack/*type_pure*/ _6; memset(&_6, 0, sizeof(struct stack/*type_pure*/));
10747- clone$(&_6, &(*st_), sizeof(struct type_pure), (void (*)(void *))type_pure$dest, (void (*)(void *, const void *))type_pure$copy);
10748- if(!(_6).size)
10855+ struct stack/*type_pure*/ _8; memset(&_8, 0, sizeof(struct stack/*type_pure*/));
10856+ clone$(&_8, &(*st_), sizeof(struct type_pure), (void (*)(void *))type_pure$dest, (void (*)(void *, const void *))type_pure$copy);
10857+ if(!(_8).size)
1074910858 {
1075010859 {
10751- bool _9;
10860+ bool _11;
1075210861 {
10753- def_contains_var$(&_9, &*def);
10862+ def_contains_var$(&_11, &*def);
1075410863 }
10755- if(_9)
10864+ if(_11)
1075610865 {
1075710866 {
10758- const struct StreamOut *_11 = &(*streams).err;
10759- struct string _12; memset(&_12, 0, sizeof(struct string));
10760- init$fromliteral(&_12, "missing type-argument for ", 26);
10761- PutStr(0 /* _10 */, &*_11, &_12);
10762- string$dest(&_12);
10867+ const struct StreamOut *_13 = &(*streams).err;
10868+ struct string _14; memset(&_14, 0, sizeof(struct string));
10869+ init$fromliteral(&_14, "missing type-argument for ", 26);
10870+ PutStr(0 /* _12 */, &*_13, &_14);
10871+ string$dest(&_14);
1076310872 }
1076410873 {
10765- const struct StreamOut *_12 = &(*streams).err;
10766- PutStr(0 /* _11 */, &*_12, &*callee);
10874+ const struct StreamOut *_14 = &(*streams).err;
10875+ PutStr(0 /* _13 */, &*_14, &*callee);
1076710876 }
1076810877 {
10769- const struct StreamOut *_13 = &(*streams).err;
10770- Fail$(0 /* _12 */, &*_13, &*txtpos);
10878+ const struct StreamOut *_15 = &(*streams).err;
10879+ Fail$(0 /* _14 */, &*_15, &*txtpos);
1077110880 }
1077210881 }
1077310882 }
@@ -10774,285 +10883,270 @@
1077410883 }
1077510884 else
1077610885 {
10777- const struct type_pure *subtype = (_6).data;
10886+ const struct type_pure *subtype = (_8).data;
1077810887 {
10779- bool _10;
10888+ bool _12;
1078010889 {
10781- bool _11; memset(&_11, 0, sizeof(bool));
10890+ bool _13; memset(&_13, 0, sizeof(bool));
1078210891 {
10783- def_contains_var$(&_11, &*def);
10892+ def_contains_var$(&_13, &*def);
1078410893 }
10785- not(&_10, &_11);
10786- _IGNORE_(_11);
10894+ not(&_12, &_13);
10895+ _IGNORE_(_13);
1078710896 }
10788- if(_10)
10897+ if(_12)
1078910898 {
1079010899 {
10791- const struct StreamOut *_12 = &(*streams).err;
10792- struct string _13; memset(&_13, 0, sizeof(struct string));
10793- init$fromliteral(&_13, "superfluous type-argument ", 26);
10794- PutStr(0 /* _11 */, &*_12, &_13);
10795- string$dest(&_13);
10796- }
10797- {
10798- const struct StreamOut *_13 = &(*streams).err;
10799- EPrTypePure(0 /* _12 */, &*_13, &*subtype);
10800- }
10801- {
1080210900 const struct StreamOut *_14 = &(*streams).err;
1080310901 struct string _15; memset(&_15, 0, sizeof(struct string));
10804- init$fromliteral(&_15, " for ", 5);
10902+ init$fromliteral(&_15, "superfluous type-argument ", 26);
1080510903 PutStr(0 /* _13 */, &*_14, &_15);
1080610904 string$dest(&_15);
1080710905 }
1080810906 {
1080910907 const struct StreamOut *_15 = &(*streams).err;
10810- PutStr(0 /* _14 */, &*_15, &*callee);
10908+ EPrTypePure(0 /* _14 */, &*_15, &*subtype);
1081110909 }
1081210910 {
1081310911 const struct StreamOut *_16 = &(*streams).err;
10814- Fail$(0 /* _15 */, &*_16, &*txtpos);
10912+ struct string _17; memset(&_17, 0, sizeof(struct string));
10913+ init$fromliteral(&_17, " for ", 5);
10914+ PutStr(0 /* _15 */, &*_16, &_17);
10915+ string$dest(&_17);
1081510916 }
10917+ {
10918+ const struct StreamOut *_17 = &(*streams).err;
10919+ PutStr(0 /* _16 */, &*_17, &*callee);
10920+ }
10921+ {
10922+ const struct StreamOut *_18 = &(*streams).err;
10923+ Fail$(0 /* _17 */, &*_18, &*txtpos);
10924+ }
1081610925 }
1081710926 }
1081810927 }
10819- free$(&_6, sizeof(struct type_pure), (void (*)(void *))type_pure$dest);
10928+ free$(&_8, sizeof(struct type_pure), (void (*)(void *))type_pure$dest);
1082010929 // use all results as arguments for function-call
1082110930 {
10822- const struct StreamOut *_10 = &(*streams).out;
10823- Indent$(0 /* _9 */, &*_10, &*level);
10931+ const struct StreamOut *_12 = &(*streams).out;
10932+ Indent(0 /* _11 */, &*_12, &*level);
1082410933 }
1082510934 {
10826- const struct StreamOut *_11 = &(*streams).out;
10827- PutStr(0 /* _10 */, &*_11, &*callee);
10935+ const struct StreamOut *_13 = &(*streams).out;
10936+ PutStr(0 /* _12 */, &*_13, &*callee);
1082810937 }
1082910938 {
10830- const struct StreamOut *_12 = &(*streams).out;
10831- struct string _13; memset(&_13, 0, sizeof(struct string));
10832- init$fromliteral(&_13, "(", 1);
10833- PutStr(0 /* _11 */, &*_12, &_13);
10834- string$dest(&_13);
10939+ const struct StreamOut *_14 = &(*streams).out;
10940+ struct string _15; memset(&_15, 0, sizeof(struct string));
10941+ init$fromliteral(&_15, "(", 1);
10942+ PutStr(0 /* _13 */, &*_14, &_15);
10943+ string$dest(&_15);
1083510944 }
1083610945 {
10837- const struct StreamOut *_13 = &(*streams).out;
10838- const struct StreamOut *_14 = &(*streams).err;
10839- DoCall$(0 /* _12 */, &*_13, &*_14, &*txtpos, &*scope, &*base, &*store);
10946+ const struct StreamOut *_15 = &(*streams).out;
10947+ const struct StreamOut *_16 = &(*streams).err;
10948+ DoCall$(0 /* _14 */, &*_15, &*_16, &*txtpos, &*scope, &*base, &*store);
1084010949 }
10841- bool _14;
10950+ bool _16;
1084210951 {
10843- bool _15; memset(&_15, 0, sizeof(bool));
10952+ bool _17; memset(&_17, 0, sizeof(bool));
1084410953 {
10845- bool _16; memset(&_16, 0, sizeof(bool));
10954+ bool _18; memset(&_18, 0, sizeof(bool));
1084610955 {
10847- bool _17; memset(&_17, 0, sizeof(bool));
10956+ bool _19; memset(&_19, 0, sizeof(bool));
1084810957 {
10849- struct string _18; memset(&_18, 0, sizeof(struct string));
10850- init$fromliteral(&_18, "stack", 5);
10851- strequ(&_17, &_18, &*callee);
10852- string$dest(&_18);
10958+ struct string _20; memset(&_20, 0, sizeof(struct string));
10959+ init$fromliteral(&_20, "stack", 5);
10960+ strequ(&_19, &_20, &*callee);
10961+ string$dest(&_20);
1085310962 }
10854- bool _18; memset(&_18, 0, sizeof(bool));
10963+ bool _20; memset(&_20, 0, sizeof(bool));
1085510964 {
10856- bool _19; memset(&_19, 0, sizeof(bool));
10965+ bool _21; memset(&_21, 0, sizeof(bool));
1085710966 {
10858- struct string _20; memset(&_20, 0, sizeof(struct string));
10859- init$fromliteral(&_20, "empty", 5);
10860- strequ(&_19, &_20, &*callee);
10861- string$dest(&_20);
10967+ struct string _22; memset(&_22, 0, sizeof(struct string));
10968+ init$fromliteral(&_22, "empty", 5);
10969+ strequ(&_21, &_22, &*callee);
10970+ string$dest(&_22);
1086210971 }
10863- bool _20; memset(&_20, 0, sizeof(bool));
10972+ bool _22; memset(&_22, 0, sizeof(bool));
1086410973 {
10865- struct string _21; memset(&_21, 0, sizeof(struct string));
10866- init$fromliteral(&_21, "solid", 5);
10867- strequ(&_20, &_21, &*callee);
10868- string$dest(&_21);
10974+ struct string _23; memset(&_23, 0, sizeof(struct string));
10975+ init$fromliteral(&_23, "solid", 5);
10976+ strequ(&_22, &_23, &*callee);
10977+ string$dest(&_23);
1086910978 }
10870- or(&_18, &_19, &_20);
10871- _IGNORE_(_20);
10872- _IGNORE_(_19);
10979+ or(&_20, &_21, &_22);
10980+ _IGNORE_(_22);
10981+ _IGNORE_(_21);
1087310982 }
10874- or(&_16, &_17, &_18);
10875- _IGNORE_(_18);
10876- _IGNORE_(_17);
10983+ or(&_18, &_19, &_20);
10984+ _IGNORE_(_20);
10985+ _IGNORE_(_19);
1087710986 }
10878- bool _17; memset(&_17, 0, sizeof(bool));
10987+ bool _19; memset(&_19, 0, sizeof(bool));
1087910988 {
10880- bool _18; memset(&_18, 0, sizeof(bool));
10989+ bool _20; memset(&_20, 0, sizeof(bool));
1088110990 {
10882- bool _19; memset(&_19, 0, sizeof(bool));
10991+ bool _21; memset(&_21, 0, sizeof(bool));
1088310992 {
10884- struct string _20; memset(&_20, 0, sizeof(struct string));
10885- init$fromliteral(&_20, "pop$", 4);
10886- strequ(&_19, &_20, &*callee);
10887- string$dest(&_20);
10993+ struct string _22; memset(&_22, 0, sizeof(struct string));
10994+ init$fromliteral(&_22, "pop$", 4);
10995+ strequ(&_21, &_22, &*callee);
10996+ string$dest(&_22);
1088810997 }
10889- bool _20; memset(&_20, 0, sizeof(bool));
10998+ bool _22; memset(&_22, 0, sizeof(bool));
1089010999 {
10891- struct string _21; memset(&_21, 0, sizeof(struct string));
10892- init$fromliteral(&_21, "pop_opt", 7);
10893- strequ(&_20, &_21, &*callee);
10894- string$dest(&_21);
11000+ struct string _23; memset(&_23, 0, sizeof(struct string));
11001+ init$fromliteral(&_23, "pop_opt", 7);
11002+ strequ(&_22, &_23, &*callee);
11003+ string$dest(&_23);
1089511004 }
10896- or(&_18, &_19, &_20);
10897- _IGNORE_(_20);
10898- _IGNORE_(_19);
11005+ or(&_20, &_21, &_22);
11006+ _IGNORE_(_22);
11007+ _IGNORE_(_21);
1089911008 }
10900- bool _19; memset(&_19, 0, sizeof(bool));
11009+ bool _21; memset(&_21, 0, sizeof(bool));
1090111010 {
10902- bool _20; memset(&_20, 0, sizeof(bool));
11011+ bool _22; memset(&_22, 0, sizeof(bool));
1090311012 {
10904- struct string _21; memset(&_21, 0, sizeof(struct string));
10905- init$fromliteral(&_21, "pop_opt_base$", 13);
10906- strequ(&_20, &_21, &*callee);
10907- string$dest(&_21);
11013+ struct string _23; memset(&_23, 0, sizeof(struct string));
11014+ init$fromliteral(&_23, "pop_opt_base$", 13);
11015+ strequ(&_22, &_23, &*callee);
11016+ string$dest(&_23);
1090811017 }
10909- bool _21; memset(&_21, 0, sizeof(bool));
11018+ bool _23; memset(&_23, 0, sizeof(bool));
1091011019 {
10911- struct string _22; memset(&_22, 0, sizeof(struct string));
10912- init$fromliteral(&_22, "push", 4);
10913- strequ(&_21, &_22, &*callee);
10914- string$dest(&_22);
11020+ struct string _24; memset(&_24, 0, sizeof(struct string));
11021+ init$fromliteral(&_24, "push", 4);
11022+ strequ(&_23, &_24, &*callee);
11023+ string$dest(&_24);
1091511024 }
10916- or(&_19, &_20, &_21);
10917- _IGNORE_(_21);
10918- _IGNORE_(_20);
11025+ or(&_21, &_22, &_23);
11026+ _IGNORE_(_23);
11027+ _IGNORE_(_22);
1091911028 }
10920- or(&_17, &_18, &_19);
10921- _IGNORE_(_19);
10922- _IGNORE_(_18);
11029+ or(&_19, &_20, &_21);
11030+ _IGNORE_(_21);
11031+ _IGNORE_(_20);
1092311032 }
10924- or(&_15, &_16, &_17);
10925- _IGNORE_(_17);
10926- _IGNORE_(_16);
11033+ or(&_17, &_18, &_19);
11034+ _IGNORE_(_19);
11035+ _IGNORE_(_18);
1092711036 }
10928- bool _16; memset(&_16, 0, sizeof(bool));
11037+ bool _18; memset(&_18, 0, sizeof(bool));
1092911038 {
10930- bool _17; memset(&_17, 0, sizeof(bool));
11039+ bool _19; memset(&_19, 0, sizeof(bool));
1093111040 {
10932- bool _18; memset(&_18, 0, sizeof(bool));
11041+ bool _20; memset(&_20, 0, sizeof(bool));
1093311042 {
10934- struct string _19; memset(&_19, 0, sizeof(struct string));
10935- init$fromliteral(&_19, "at_get$", 7);
10936- strequ(&_18, &_19, &*callee);
10937- string$dest(&_19);
11043+ struct string _21; memset(&_21, 0, sizeof(struct string));
11044+ init$fromliteral(&_21, "at_get$", 7);
11045+ strequ(&_20, &_21, &*callee);
11046+ string$dest(&_21);
1093811047 }
10939- bool _19; memset(&_19, 0, sizeof(bool));
11048+ bool _21; memset(&_21, 0, sizeof(bool));
1094011049 {
10941- struct string _20; memset(&_20, 0, sizeof(struct string));
10942- init$fromliteral(&_20, "at_set$", 7);
10943- strequ(&_19, &_20, &*callee);
10944- string$dest(&_20);
11050+ struct string _22; memset(&_22, 0, sizeof(struct string));
11051+ init$fromliteral(&_22, "at_set$", 7);
11052+ strequ(&_21, &_22, &*callee);
11053+ string$dest(&_22);
1094511054 }
10946- or(&_17, &_18, &_19);
10947- _IGNORE_(_19);
10948- _IGNORE_(_18);
11055+ or(&_19, &_20, &_21);
11056+ _IGNORE_(_21);
11057+ _IGNORE_(_20);
1094911058 }
10950- bool _18; memset(&_18, 0, sizeof(bool));
11059+ bool _20; memset(&_20, 0, sizeof(bool));
1095111060 {
10952- bool _19; memset(&_19, 0, sizeof(bool));
11061+ bool _21; memset(&_21, 0, sizeof(bool));
1095311062 {
10954- struct string _20; memset(&_20, 0, sizeof(struct string));
10955- init$fromliteral(&_20, "top_get$", 8);
10956- strequ(&_19, &_20, &*callee);
10957- string$dest(&_20);
11063+ struct string _22; memset(&_22, 0, sizeof(struct string));
11064+ init$fromliteral(&_22, "top_get$", 8);
11065+ strequ(&_21, &_22, &*callee);
11066+ string$dest(&_22);
1095811067 }
10959- bool _20; memset(&_20, 0, sizeof(bool));
11068+ bool _22; memset(&_22, 0, sizeof(bool));
1096011069 {
10961- struct string _21; memset(&_21, 0, sizeof(struct string));
10962- init$fromliteral(&_21, "top_set$", 8);
10963- strequ(&_20, &_21, &*callee);
10964- string$dest(&_21);
11070+ struct string _23; memset(&_23, 0, sizeof(struct string));
11071+ init$fromliteral(&_23, "top_set$", 8);
11072+ strequ(&_22, &_23, &*callee);
11073+ string$dest(&_23);
1096511074 }
10966- or(&_18, &_19, &_20);
10967- _IGNORE_(_20);
10968- _IGNORE_(_19);
11075+ or(&_20, &_21, &_22);
11076+ _IGNORE_(_22);
11077+ _IGNORE_(_21);
1096911078 }
10970- or(&_16, &_17, &_18);
10971- _IGNORE_(_18);
10972- _IGNORE_(_17);
11079+ or(&_18, &_19, &_20);
11080+ _IGNORE_(_20);
11081+ _IGNORE_(_19);
1097311082 }
10974- or(&_14, &_15, &_16);
10975- _IGNORE_(_16);
10976- _IGNORE_(_15);
11083+ or(&_16, &_17, &_18);
11084+ _IGNORE_(_18);
11085+ _IGNORE_(_17);
1097711086 }
10978- if(_14)
11087+ if(_16)
1097911088 {
10980- struct stack/*type_pure*/ _15; memset(&_15, 0, sizeof(struct stack/*type_pure*/));
10981- clone$(&_15, &(*st_), sizeof(struct type_pure), (void (*)(void *))type_pure$dest, (void (*)(void *, const void *))type_pure$copy);
10982- if(!(_15).size)
11089+ struct stack/*type_pure*/ _17; memset(&_17, 0, sizeof(struct stack/*type_pure*/));
11090+ clone$(&_17, &(*st_), sizeof(struct type_pure), (void (*)(void *))type_pure$dest, (void (*)(void *, const void *))type_pure$copy);
11091+ if(!(_17).size)
1098311092 {
1098411093 {
1098511094 {
10986- const struct StreamOut *_18 = &(*streams).err;
10987- struct string _19; memset(&_19, 0, sizeof(struct string));
10988- init$fromliteral(&_19, "missing subtype for ", 20);
10989- PutStr(0 /* _17 */, &*_18, &_19);
10990- string$dest(&_19);
11095+ const struct StreamOut *_20 = &(*streams).err;
11096+ struct string _21; memset(&_21, 0, sizeof(struct string));
11097+ init$fromliteral(&_21, "missing subtype for ", 20);
11098+ PutStr(0 /* _19 */, &*_20, &_21);
11099+ string$dest(&_21);
1099111100 }
1099211101 {
10993- const struct StreamOut *_19 = &(*streams).err;
10994- PutStr(0 /* _18 */, &*_19, &*callee);
11102+ const struct StreamOut *_21 = &(*streams).err;
11103+ PutStr(0 /* _20 */, &*_21, &*callee);
1099511104 }
1099611105 {
10997- const struct StreamOut *_20 = &(*streams).err;
10998- Fail$(0 /* _19 */, &*_20, &*txtpos);
11106+ const struct StreamOut *_22 = &(*streams).err;
11107+ Fail$(0 /* _21 */, &*_22, &*txtpos);
1099911108 }
1100011109 }
1100111110 }
1100211111 else
1100311112 {
11004- const struct type_pure *subtype = (_15).data;
11113+ const struct type_pure *subtype = (_17).data;
1100511114 // NOTE: SPECIAL TREATMENT FOR stack-BUILT-INS SUPPLYING SUBTYPE
1100611115 {
1100711116 {
11008- const struct StreamOut *_19 = &(*streams).out;
11009- struct string _20; memset(&_20, 0, sizeof(struct string));
11010- init$fromliteral(&_20, ", ", 2);
11011- PutStr(0 /* _18 */, &*_19, &_20);
11012- string$dest(&_20);
11117+ const struct StreamOut *_21 = &(*streams).out;
11118+ struct string _22; memset(&_22, 0, sizeof(struct string));
11119+ init$fromliteral(&_22, ", ", 2);
11120+ PutStr(0 /* _20 */, &*_21, &_22);
11121+ string$dest(&_22);
1101311122 }
1101411123 {
11015- const struct StreamOut *_20 = &(*streams).out;
11016- struct stack/*structdef*/ *_21 = &(*state).structs;
11017- SizeOfPure$(0 /* _19 */, &*_20, &*_21, &*subtype);
11124+ const struct StreamOut *_22 = &(*streams).out;
11125+ struct stack/*structdef*/ *_23 = &(*state).structs;
11126+ SizeOfPure$(0 /* _21 */, &*_22, &*_23, &*subtype);
1101811127 }
11019- bool _21;
11128+ bool _23;
1102011129 {
11021- ispurestruct(&_21, &*subtype);
11130+ ispurestruct(&_23, &*subtype);
1102211131 }
11023- if(_21)
11132+ if(_23)
1102411133 // NOTE: emitting superfluous (but harmless) destructor/copy for non-dynamic structs -
1102511134 // could suppress but might want to keep for future more complex destructors,
1102611135 // e.g. automatically closing files etc.
1102711136 {
1102811137 {
11029- const struct StreamOut *_23 = &(*streams).out;
11030- struct string _24; memset(&_24, 0, sizeof(struct string));
11031- init$fromliteral(&_24, ", (void (*)(void *))", 20);
11032- PutStr(0 /* _22 */, &*_23, &_24);
11033- string$dest(&_24);
11034- }
11035- {
11036- const struct StreamOut *_24 = &(*streams).out;
11037- struct string _25; memset(&_25, 0, sizeof(struct string));
11038- {
11039- getpurename(&_25, &*subtype);
11040- }
11041- PutStr(0 /* _23 */, &*_24, &_25);
11042- string$dest(&_25);
11043- }
11044- {
1104511138 const struct StreamOut *_25 = &(*streams).out;
1104611139 struct string _26; memset(&_26, 0, sizeof(struct string));
11047- init$fromliteral(&_26, "$dest", 5);
11140+ init$fromliteral(&_26, ", (void (*)(void *))", 20);
1104811141 PutStr(0 /* _24 */, &*_25, &_26);
1104911142 string$dest(&_26);
1105011143 }
11051- // destructor
1105211144 {
1105311145 const struct StreamOut *_26 = &(*streams).out;
1105411146 struct string _27; memset(&_27, 0, sizeof(struct string));
11055- init$fromliteral(&_27, ", (void (*)(void *, const void *))", 34);
11147+ {
11148+ getpurename(&_27, &*subtype);
11149+ }
1105611150 PutStr(0 /* _25 */, &*_26, &_27);
1105711151 string$dest(&_27);
1105811152 }
@@ -11059,324 +11153,339 @@
1105911153 {
1106011154 const struct StreamOut *_27 = &(*streams).out;
1106111155 struct string _28; memset(&_28, 0, sizeof(struct string));
11062- {
11063- getpurename(&_28, &*subtype);
11064- }
11156+ init$fromliteral(&_28, "$dest", 5);
1106511157 PutStr(0 /* _26 */, &*_27, &_28);
1106611158 string$dest(&_28);
1106711159 }
11160+ // destructor
1106811161 {
1106911162 const struct StreamOut *_28 = &(*streams).out;
1107011163 struct string _29; memset(&_29, 0, sizeof(struct string));
11071- init$fromliteral(&_29, "$copy", 5);
11164+ init$fromliteral(&_29, ", (void (*)(void *, const void *))", 34);
1107211165 PutStr(0 /* _27 */, &*_28, &_29);
1107311166 string$dest(&_29);
1107411167 }
11168+ {
11169+ const struct StreamOut *_29 = &(*streams).out;
11170+ struct string _30; memset(&_30, 0, sizeof(struct string));
11171+ {
11172+ getpurename(&_30, &*subtype);
11173+ }
11174+ PutStr(0 /* _28 */, &*_29, &_30);
11175+ string$dest(&_30);
11176+ }
11177+ {
11178+ const struct StreamOut *_30 = &(*streams).out;
11179+ struct string _31; memset(&_31, 0, sizeof(struct string));
11180+ init$fromliteral(&_31, "$copy", 5);
11181+ PutStr(0 /* _29 */, &*_30, &_31);
11182+ string$dest(&_31);
11183+ }
1107511184 // copy
1107611185 }
1107711186 else
1107811187 {
1107911188 {
11080- const struct StreamOut *_23 = &(*streams).out;
11081- struct string _24; memset(&_24, 0, sizeof(struct string));
11082- init$fromliteral(&_24, ", 0/*DEST*/, 0/*COPY*/", 22);
11083- PutStr(0 /* _22 */, &*_23, &_24);
11084- string$dest(&_24);
11189+ const struct StreamOut *_25 = &(*streams).out;
11190+ struct string _26; memset(&_26, 0, sizeof(struct string));
11191+ init$fromliteral(&_26, ", 0/*DEST*/, 0/*COPY*/", 22);
11192+ PutStr(0 /* _24 */, &*_25, &_26);
11193+ string$dest(&_26);
1108511194 }
1108611195 }
1108711196 {
11088- const struct StreamOut *_23 = &(*streams).out;
11089- struct string _24; memset(&_24, 0, sizeof(struct string));
11090- init$fromliteral(&_24, ", ", 2);
11091- PutStr(0 /* _22 */, &*_23, &_24);
11092- string$dest(&_24);
11197+ const struct StreamOut *_25 = &(*streams).out;
11198+ struct string _26; memset(&_26, 0, sizeof(struct string));
11199+ init$fromliteral(&_26, ", ", 2);
11200+ PutStr(0 /* _24 */, &*_25, &_26);
11201+ string$dest(&_26);
1109311202 }
1109411203 {
11095- const struct StreamOut *_24 = &(*streams).out;
11096- uint64_t *_25 = &(*txtpos).line;
11097- Print$u64(0 /* _23 */, &*_24, &*_25);
11204+ const struct StreamOut *_26 = &(*streams).out;
11205+ uint64_t *_27 = &(*txtpos).line;
11206+ Print$u64(0 /* _25 */, &*_26, &*_27);
1109811207 }
1109911208 }
1110011209 }
11101- free$(&_15, sizeof(struct type_pure), (void (*)(void *))type_pure$dest);
11210+ free$(&_17, sizeof(struct type_pure), (void (*)(void *))type_pure$dest);
1110211211 }
1110311212 else
1110411213 {
11105- bool _16;
11214+ bool _18;
1110611215 {
11107- bool _17; memset(&_17, 0, sizeof(bool));
11216+ bool _19; memset(&_19, 0, sizeof(bool));
1110811217 {
11109- struct string _18; memset(&_18, 0, sizeof(struct string));
11110- init$fromliteral(&_18, "swap", 4);
11111- strequ(&_17, &_18, &*callee);
11112- string$dest(&_18);
11218+ struct string _20; memset(&_20, 0, sizeof(struct string));
11219+ init$fromliteral(&_20, "swap", 4);
11220+ strequ(&_19, &_20, &*callee);
11221+ string$dest(&_20);
1111311222 }
11114- bool _18; memset(&_18, 0, sizeof(bool));
11223+ bool _20; memset(&_20, 0, sizeof(bool));
1111511224 {
11116- struct string _19; memset(&_19, 0, sizeof(struct string));
11117- init$fromliteral(&_19, "reverse", 7);
11118- strequ(&_18, &_19, &*callee);
11119- string$dest(&_19);
11225+ struct string _21; memset(&_21, 0, sizeof(struct string));
11226+ init$fromliteral(&_21, "reverse", 7);
11227+ strequ(&_20, &_21, &*callee);
11228+ string$dest(&_21);
1112011229 }
11121- or(&_16, &_17, &_18);
11122- _IGNORE_(_18);
11123- _IGNORE_(_17);
11230+ or(&_18, &_19, &_20);
11231+ _IGNORE_(_20);
11232+ _IGNORE_(_19);
1112411233 }
11125- if(_16)
11234+ if(_18)
1112611235 {
11127- struct stack/*type_pure*/ _17; memset(&_17, 0, sizeof(struct stack/*type_pure*/));
11128- clone$(&_17, &(*st_), sizeof(struct type_pure), (void (*)(void *))type_pure$dest, (void (*)(void *, const void *))type_pure$copy);
11129- if(!(_17).size)
11236+ struct stack/*type_pure*/ _19; memset(&_19, 0, sizeof(struct stack/*type_pure*/));
11237+ clone$(&_19, &(*st_), sizeof(struct type_pure), (void (*)(void *))type_pure$dest, (void (*)(void *, const void *))type_pure$copy);
11238+ if(!(_19).size)
1113011239 {
1113111240 {
1113211241 {
11133- const struct StreamOut *_20 = &(*streams).err;
11134- struct string _21; memset(&_21, 0, sizeof(struct string));
11135- init$fromliteral(&_21, "missing subtype for ", 20);
11136- PutStr(0 /* _19 */, &*_20, &_21);
11137- string$dest(&_21);
11242+ const struct StreamOut *_22 = &(*streams).err;
11243+ struct string _23; memset(&_23, 0, sizeof(struct string));
11244+ init$fromliteral(&_23, "missing subtype for ", 20);
11245+ PutStr(0 /* _21 */, &*_22, &_23);
11246+ string$dest(&_23);
1113811247 }
1113911248 {
11140- const struct StreamOut *_21 = &(*streams).err;
11141- PutStr(0 /* _20 */, &*_21, &*callee);
11249+ const struct StreamOut *_23 = &(*streams).err;
11250+ PutStr(0 /* _22 */, &*_23, &*callee);
1114211251 }
1114311252 {
11144- const struct StreamOut *_22 = &(*streams).err;
11145- Fail$(0 /* _21 */, &*_22, &*txtpos);
11253+ const struct StreamOut *_24 = &(*streams).err;
11254+ Fail$(0 /* _23 */, &*_24, &*txtpos);
1114611255 }
1114711256 }
1114811257 }
1114911258 else
1115011259 {
11151- const struct type_pure *subtype = (_17).data;
11260+ const struct type_pure *subtype = (_19).data;
1115211261 // NOTE: SPECIAL TREATMENT FOR BUILT-INS SUPPLYING SIZE
1115311262 {
1115411263 {
11155- const struct StreamOut *_21 = &(*streams).out;
11156- struct string _22; memset(&_22, 0, sizeof(struct string));
11157- init$fromliteral(&_22, ", ", 2);
11158- PutStr(0 /* _20 */, &*_21, &_22);
11159- string$dest(&_22);
11264+ const struct StreamOut *_23 = &(*streams).out;
11265+ struct string _24; memset(&_24, 0, sizeof(struct string));
11266+ init$fromliteral(&_24, ", ", 2);
11267+ PutStr(0 /* _22 */, &*_23, &_24);
11268+ string$dest(&_24);
1116011269 }
1116111270 {
11162- const struct StreamOut *_22 = &(*streams).out;
11163- struct stack/*structdef*/ *_23 = &(*state).structs;
11164- SizeOfPure$(0 /* _21 */, &*_22, &*_23, &*subtype);
11271+ const struct StreamOut *_24 = &(*streams).out;
11272+ struct stack/*structdef*/ *_25 = &(*state).structs;
11273+ SizeOfPure$(0 /* _23 */, &*_24, &*_25, &*subtype);
1116511274 }
1116611275 }
1116711276 }
11168- free$(&_17, sizeof(struct type_pure), (void (*)(void *))type_pure$dest);
11277+ free$(&_19, sizeof(struct type_pure), (void (*)(void *))type_pure$dest);
1116911278 }
1117011279 uint64_t _n; memset(&_n, 0, sizeof(uint64_t));
1117111280 {
11172- const struct stack/*u8*/ *_17 = &(*callee).data;
11173- size(&_n, &*_17);
11281+ const struct stack/*u8*/ *_19 = &(*callee).data;
11282+ size(&_n, &*_19);
1117411283 }
11175- bool _18;
11284+ bool _20;
1117611285 {
11177- uint64_t _19; memset(&_19, 0, sizeof(uint64_t));
11178- _19 = 3;
11179- _18 = _n >= _19;
11180- _IGNORE_(_19);
11286+ uint64_t _21; memset(&_21, 0, sizeof(uint64_t));
11287+ _21 = 3;
11288+ _20 = _n >= _21;
11289+ _IGNORE_(_21);
1118111290 }
11182- if(_18)
11291+ if(_20)
1118311292 {
11184- bool _20;
11293+ bool _22;
1118511294 {
11186- uint64_t _21; memset(&_21, 0, sizeof(uint64_t));
11187- _21 = 6;
11188- _20 = _n >= _21;
11189- _IGNORE_(_21);
11295+ uint64_t _23; memset(&_23, 0, sizeof(uint64_t));
11296+ _23 = 6;
11297+ _22 = _n >= _23;
11298+ _IGNORE_(_23);
1119011299 }
11191- if(_20)
11300+ if(_22)
1119211301 {
11193- bool _22;
11302+ bool _24;
1119411303 {
11195- bool _23; memset(&_23, 0, sizeof(bool));
11304+ bool _25; memset(&_25, 0, sizeof(bool));
1119611305 {
11197- bool _24; memset(&_24, 0, sizeof(bool));
11306+ bool _26; memset(&_26, 0, sizeof(bool));
1119811307 {
11199- bool _25; memset(&_25, 0, sizeof(bool));
11308+ bool _27; memset(&_27, 0, sizeof(bool));
1120011309 {
11201- uint8_t _26; memset(&_26, 0, sizeof(uint8_t));
11202- _26 = 80;
11203- uint8_t _27; memset(&_27, 0, sizeof(uint8_t));
11310+ uint8_t _28; memset(&_28, 0, sizeof(uint8_t));
11311+ _28 = 80;
11312+ uint8_t _29; memset(&_29, 0, sizeof(uint8_t));
1120411313 {
11205- const struct stack/*u8*/ *_28 = &(*callee).data;
11206- uint64_t _29; memset(&_29, 0, sizeof(uint64_t));
11314+ const struct stack/*u8*/ *_30 = &(*callee).data;
11315+ uint64_t _31; memset(&_31, 0, sizeof(uint64_t));
1120711316 {
11208- uint64_t _30; memset(&_30, 0, sizeof(uint64_t));
11209- _30 = 1;
11210- _29 = _n - _30;
11211- _IGNORE_(_30);
11317+ uint64_t _32; memset(&_32, 0, sizeof(uint64_t));
11318+ _32 = 1;
11319+ _31 = _n - _32;
11320+ _IGNORE_(_32);
1121211321 }
11213- at_get$(&_27, &*_28, &_29, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 2560);
11214- _IGNORE_(_29);
11322+ at_get$(&_29, &*_30, &_31, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 2588);
11323+ _IGNORE_(_31);
1121511324 }
11216- _25 = _26 == _27;
11217- _IGNORE_(_27);
11218- _IGNORE_(_26);
11325+ _27 = _28 == _29;
11326+ _IGNORE_(_29);
11327+ _IGNORE_(_28);
1121911328 }
11220- bool _26; memset(&_26, 0, sizeof(bool));
11329+ bool _28; memset(&_28, 0, sizeof(bool));
1122111330 {
11222- uint8_t _27; memset(&_27, 0, sizeof(uint8_t));
11223- _27 = 114;
11224- uint8_t _28; memset(&_28, 0, sizeof(uint8_t));
11331+ uint8_t _29; memset(&_29, 0, sizeof(uint8_t));
11332+ _29 = 114;
11333+ uint8_t _30; memset(&_30, 0, sizeof(uint8_t));
1122511334 {
11226- const struct stack/*u8*/ *_29 = &(*callee).data;
11227- uint64_t _30; memset(&_30, 0, sizeof(uint64_t));
11335+ const struct stack/*u8*/ *_31 = &(*callee).data;
11336+ uint64_t _32; memset(&_32, 0, sizeof(uint64_t));
1122811337 {
11229- uint64_t _31; memset(&_31, 0, sizeof(uint64_t));
11230- _31 = 2;
11231- _30 = _n - _31;
11232- _IGNORE_(_31);
11338+ uint64_t _33; memset(&_33, 0, sizeof(uint64_t));
11339+ _33 = 2;
11340+ _32 = _n - _33;
11341+ _IGNORE_(_33);
1123311342 }
11234- at_get$(&_28, &*_29, &_30, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 2561);
11235- _IGNORE_(_30);
11343+ at_get$(&_30, &*_31, &_32, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 2589);
11344+ _IGNORE_(_32);
1123611345 }
11237- _26 = _27 == _28;
11238- _IGNORE_(_28);
11239- _IGNORE_(_27);
11346+ _28 = _29 == _30;
11347+ _IGNORE_(_30);
11348+ _IGNORE_(_29);
1124011349 }
11241- and(&_24, &_25, &_26);
11242- _IGNORE_(_26);
11243- _IGNORE_(_25);
11350+ and(&_26, &_27, &_28);
11351+ _IGNORE_(_28);
11352+ _IGNORE_(_27);
1124411353 }
11245- bool _25; memset(&_25, 0, sizeof(bool));
11354+ bool _27; memset(&_27, 0, sizeof(bool));
1124611355 {
11247- bool _26; memset(&_26, 0, sizeof(bool));
11356+ bool _28; memset(&_28, 0, sizeof(bool));
1124811357 {
11249- uint8_t _27; memset(&_27, 0, sizeof(uint8_t));
11250- _27 = 105;
11251- uint8_t _28; memset(&_28, 0, sizeof(uint8_t));
11358+ uint8_t _29; memset(&_29, 0, sizeof(uint8_t));
11359+ _29 = 105;
11360+ uint8_t _30; memset(&_30, 0, sizeof(uint8_t));
1125211361 {
11253- const struct stack/*u8*/ *_29 = &(*callee).data;
11254- uint64_t _30; memset(&_30, 0, sizeof(uint64_t));
11362+ const struct stack/*u8*/ *_31 = &(*callee).data;
11363+ uint64_t _32; memset(&_32, 0, sizeof(uint64_t));
1125511364 {
11256- uint64_t _31; memset(&_31, 0, sizeof(uint64_t));
11257- _31 = 3;
11258- _30 = _n - _31;
11259- _IGNORE_(_31);
11365+ uint64_t _33; memset(&_33, 0, sizeof(uint64_t));
11366+ _33 = 3;
11367+ _32 = _n - _33;
11368+ _IGNORE_(_33);
1126011369 }
11261- at_get$(&_28, &*_29, &_30, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 2565);
11262- _IGNORE_(_30);
11370+ at_get$(&_30, &*_31, &_32, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 2593);
11371+ _IGNORE_(_32);
1126311372 }
11264- _26 = _27 == _28;
11265- _IGNORE_(_28);
11266- _IGNORE_(_27);
11373+ _28 = _29 == _30;
11374+ _IGNORE_(_30);
11375+ _IGNORE_(_29);
1126711376 }
11268- bool _27; memset(&_27, 0, sizeof(bool));
11377+ bool _29; memset(&_29, 0, sizeof(bool));
1126911378 {
11270- uint8_t _28; memset(&_28, 0, sizeof(uint8_t));
11271- _28 = 110;
11272- uint8_t _29; memset(&_29, 0, sizeof(uint8_t));
11379+ uint8_t _30; memset(&_30, 0, sizeof(uint8_t));
11380+ _30 = 110;
11381+ uint8_t _31; memset(&_31, 0, sizeof(uint8_t));
1127311382 {
11274- const struct stack/*u8*/ *_30 = &(*callee).data;
11275- uint64_t _31; memset(&_31, 0, sizeof(uint64_t));
11383+ const struct stack/*u8*/ *_32 = &(*callee).data;
11384+ uint64_t _33; memset(&_33, 0, sizeof(uint64_t));
1127611385 {
11277- uint64_t _32; memset(&_32, 0, sizeof(uint64_t));
11278- _32 = 4;
11279- _31 = _n - _32;
11280- _IGNORE_(_32);
11386+ uint64_t _34; memset(&_34, 0, sizeof(uint64_t));
11387+ _34 = 4;
11388+ _33 = _n - _34;
11389+ _IGNORE_(_34);
1128111390 }
11282- at_get$(&_29, &*_30, &_31, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 2566);
11283- _IGNORE_(_31);
11391+ at_get$(&_31, &*_32, &_33, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 2594);
11392+ _IGNORE_(_33);
1128411393 }
11285- _27 = _28 == _29;
11286- _IGNORE_(_29);
11287- _IGNORE_(_28);
11394+ _29 = _30 == _31;
11395+ _IGNORE_(_31);
11396+ _IGNORE_(_30);
1128811397 }
11289- and(&_25, &_26, &_27);
11290- _IGNORE_(_27);
11291- _IGNORE_(_26);
11398+ and(&_27, &_28, &_29);
11399+ _IGNORE_(_29);
11400+ _IGNORE_(_28);
1129211401 }
11293- and(&_23, &_24, &_25);
11294- _IGNORE_(_25);
11295- _IGNORE_(_24);
11402+ and(&_25, &_26, &_27);
11403+ _IGNORE_(_27);
11404+ _IGNORE_(_26);
1129611405 }
11297- bool _24; memset(&_24, 0, sizeof(bool));
11406+ bool _26; memset(&_26, 0, sizeof(bool));
1129811407 {
11299- bool _25; memset(&_25, 0, sizeof(bool));
11408+ bool _27; memset(&_27, 0, sizeof(bool));
1130011409 {
11301- uint8_t _26; memset(&_26, 0, sizeof(uint8_t));
11302- _26 = 116;
11303- uint8_t _27; memset(&_27, 0, sizeof(uint8_t));
11410+ uint8_t _28; memset(&_28, 0, sizeof(uint8_t));
11411+ _28 = 116;
11412+ uint8_t _29; memset(&_29, 0, sizeof(uint8_t));
1130411413 {
11305- const struct stack/*u8*/ *_28 = &(*callee).data;
11306- uint64_t _29; memset(&_29, 0, sizeof(uint64_t));
11414+ const struct stack/*u8*/ *_30 = &(*callee).data;
11415+ uint64_t _31; memset(&_31, 0, sizeof(uint64_t));
1130711416 {
11308- uint64_t _30; memset(&_30, 0, sizeof(uint64_t));
11309- _30 = 5;
11310- _29 = _n - _30;
11311- _IGNORE_(_30);
11417+ uint64_t _32; memset(&_32, 0, sizeof(uint64_t));
11418+ _32 = 5;
11419+ _31 = _n - _32;
11420+ _IGNORE_(_32);
1131211421 }
11313- at_get$(&_27, &*_28, &_29, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 2571);
11314- _IGNORE_(_29);
11422+ at_get$(&_29, &*_30, &_31, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 2599);
11423+ _IGNORE_(_31);
1131511424 }
11316- _25 = _26 == _27;
11317- _IGNORE_(_27);
11318- _IGNORE_(_26);
11425+ _27 = _28 == _29;
11426+ _IGNORE_(_29);
11427+ _IGNORE_(_28);
1131911428 }
11320- bool _26; memset(&_26, 0, sizeof(bool));
11429+ bool _28; memset(&_28, 0, sizeof(bool));
1132111430 {
11322- uint8_t _27; memset(&_27, 0, sizeof(uint8_t));
11323- _27 = 36;
11324- uint8_t _28; memset(&_28, 0, sizeof(uint8_t));
11431+ uint8_t _29; memset(&_29, 0, sizeof(uint8_t));
11432+ _29 = 36;
11433+ uint8_t _30; memset(&_30, 0, sizeof(uint8_t));
1132511434 {
11326- const struct stack/*u8*/ *_29 = &(*callee).data;
11327- uint64_t _30; memset(&_30, 0, sizeof(uint64_t));
11435+ const struct stack/*u8*/ *_31 = &(*callee).data;
11436+ uint64_t _32; memset(&_32, 0, sizeof(uint64_t));
1132811437 {
11329- uint64_t _31; memset(&_31, 0, sizeof(uint64_t));
11330- _31 = 6;
11331- _30 = _n - _31;
11332- _IGNORE_(_31);
11438+ uint64_t _33; memset(&_33, 0, sizeof(uint64_t));
11439+ _33 = 6;
11440+ _32 = _n - _33;
11441+ _IGNORE_(_33);
1133311442 }
11334- at_get$(&_28, &*_29, &_30, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 2572);
11335- _IGNORE_(_30);
11443+ at_get$(&_30, &*_31, &_32, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 2600);
11444+ _IGNORE_(_32);
1133611445 }
11337- _26 = _27 == _28;
11338- _IGNORE_(_28);
11339- _IGNORE_(_27);
11446+ _28 = _29 == _30;
11447+ _IGNORE_(_30);
11448+ _IGNORE_(_29);
1134011449 }
11341- and(&_24, &_25, &_26);
11342- _IGNORE_(_26);
11343- _IGNORE_(_25);
11450+ and(&_26, &_27, &_28);
11451+ _IGNORE_(_28);
11452+ _IGNORE_(_27);
1134411453 }
11345- and(&_22, &_23, &_24);
11346- _IGNORE_(_24);
11347- _IGNORE_(_23);
11454+ and(&_24, &_25, &_26);
11455+ _IGNORE_(_26);
11456+ _IGNORE_(_25);
1134811457 }
11349- if(_22)
11458+ if(_24)
1135011459 {
11351- struct stack/*type_pure*/ _23; memset(&_23, 0, sizeof(struct stack/*type_pure*/));
11352- clone$(&_23, &(*st_), sizeof(struct type_pure), (void (*)(void *))type_pure$dest, (void (*)(void *, const void *))type_pure$copy);
11353- if(!(_23).size)
11460+ struct stack/*type_pure*/ _25; memset(&_25, 0, sizeof(struct stack/*type_pure*/));
11461+ clone$(&_25, &(*st_), sizeof(struct type_pure), (void (*)(void *))type_pure$dest, (void (*)(void *, const void *))type_pure$copy);
11462+ if(!(_25).size)
1135411463 {
1135511464 {
1135611465 {
11357- const struct StreamOut *_26 = &(*streams).err;
11358- struct string _27; memset(&_27, 0, sizeof(struct string));
11359- init$fromliteral(&_27, "missing subtype for ", 20);
11360- PutStr(0 /* _25 */, &*_26, &_27);
11361- string$dest(&_27);
11466+ const struct StreamOut *_28 = &(*streams).err;
11467+ struct string _29; memset(&_29, 0, sizeof(struct string));
11468+ init$fromliteral(&_29, "missing subtype for ", 20);
11469+ PutStr(0 /* _27 */, &*_28, &_29);
11470+ string$dest(&_29);
1136211471 }
1136311472 {
11364- const struct StreamOut *_27 = &(*streams).err;
11365- PutStr(0 /* _26 */, &*_27, &*callee);
11473+ const struct StreamOut *_29 = &(*streams).err;
11474+ PutStr(0 /* _28 */, &*_29, &*callee);
1136611475 }
1136711476 {
11368- const struct StreamOut *_28 = &(*streams).err;
11369- Fail$(0 /* _27 */, &*_28, &*txtpos);
11477+ const struct StreamOut *_30 = &(*streams).err;
11478+ Fail$(0 /* _29 */, &*_30, &*txtpos);
1137011479 }
1137111480 }
1137211481 }
1137311482 else
1137411483 {
11375- const struct type_pure *subtype = (_23).data;
11484+ const struct type_pure *subtype = (_25).data;
1137611485 {
11377- struct type_pure _26; memset(&_26, 0, sizeof(struct type_pure));
11378- type_pure$copy(&_26, &(*subtype));
11379- switch((_26).type)
11486+ struct type_pure _28; memset(&_28, 0, sizeof(struct type_pure));
11487+ type_pure$copy(&_28, &(*subtype));
11488+ switch((_28).type)
1138011489 {
1138111490 case 0: // struct stack/*type_pure_normal*/ type_pure_normal:
1138211491 {
@@ -11384,33 +11493,33 @@
1138411493 }
1138511494 case 1: // struct stack/*type_pure_wrapped*/ type_pure_wrapped:
1138611495 {
11387- const struct type_pure_wrapped *tw = ((_26).type_pure_wrapped).data;
11496+ const struct type_pure_wrapped *tw = ((_28).type_pure_wrapped).data;
1138811497 {
1138911498 {
11390- const struct StreamOut *_30 = &(*streams).out;
11391- struct string _31; memset(&_31, 0, sizeof(struct string));
11392- init$fromliteral(&_31, ", ", 2);
11393- PutStr(0 /* _29 */, &*_30, &_31);
11394- string$dest(&_31);
11395- }
11396- {
11397- const struct StreamOut *_31 = &(*streams).out;
11398- struct stack/*structdef*/ *_32 = &(*state).structs;
11399- const struct type_pure_prim *_33 = &(*tw).subtype;
11400- SizeOfPurePrim$(0 /* _30 */, &*_31, &*_32, &*_33);
11401- }
11402- {
1140311499 const struct StreamOut *_32 = &(*streams).out;
1140411500 struct string _33; memset(&_33, 0, sizeof(struct string));
11405- init$fromliteral(&_33, ", (void (*)(void *, const struct StreamOut *, const void *))Print$", 66);
11501+ init$fromliteral(&_33, ", ", 2);
1140611502 PutStr(0 /* _31 */, &*_32, &_33);
1140711503 string$dest(&_33);
1140811504 }
1140911505 {
1141011506 const struct StreamOut *_33 = &(*streams).out;
11411- const struct string *_34 = &(*tw).subtype.name;
11412- PutStr(0 /* _32 */, &*_33, &*_34);
11507+ struct stack/*structdef*/ *_34 = &(*state).structs;
11508+ const struct type_pure_prim *_35 = &(*tw).subtype;
11509+ SizeOfPurePrim$(0 /* _32 */, &*_33, &*_34, &*_35);
1141311510 }
11511+ {
11512+ const struct StreamOut *_34 = &(*streams).out;
11513+ struct string _35; memset(&_35, 0, sizeof(struct string));
11514+ init$fromliteral(&_35, ", (void (*)(void *, const struct StreamOut *, const void *))Print$", 66);
11515+ PutStr(0 /* _33 */, &*_34, &_35);
11516+ string$dest(&_35);
11517+ }
11518+ {
11519+ const struct StreamOut *_35 = &(*streams).out;
11520+ const struct string *_36 = &(*tw).subtype.name;
11521+ PutStr(0 /* _34 */, &*_35, &*_36);
11522+ }
1141411523 }
1141511524 break;
1141611525 }
@@ -11420,118 +11529,118 @@
1142011529 break;
1142111530 }
1142211531 }
11423- type_pure$dest(&_26);
11532+ type_pure$dest(&_28);
1142411533 }
1142511534 }
11426- free$(&_23, sizeof(struct type_pure), (void (*)(void *))type_pure$dest);
11535+ free$(&_25, sizeof(struct type_pure), (void (*)(void *))type_pure$dest);
1142711536 }
1142811537 }
11429- bool _22;
11538+ bool _24;
1143011539 {
11431- bool _23; memset(&_23, 0, sizeof(bool));
11540+ bool _25; memset(&_25, 0, sizeof(bool));
1143211541 {
11433- bool _24; memset(&_24, 0, sizeof(bool));
11542+ bool _26; memset(&_26, 0, sizeof(bool));
1143411543 {
11435- uint8_t _25; memset(&_25, 0, sizeof(uint8_t));
11436- _25 = 99;
11437- uint8_t _26; memset(&_26, 0, sizeof(uint8_t));
11544+ uint8_t _27; memset(&_27, 0, sizeof(uint8_t));
11545+ _27 = 99;
11546+ uint8_t _28; memset(&_28, 0, sizeof(uint8_t));
1143811547 {
11439- const struct stack/*u8*/ *_27 = &(*callee).data;
11440- uint64_t _28; memset(&_28, 0, sizeof(uint64_t));
11548+ const struct stack/*u8*/ *_29 = &(*callee).data;
11549+ uint64_t _30; memset(&_30, 0, sizeof(uint64_t));
1144111550 {
11442- uint64_t _29; memset(&_29, 0, sizeof(uint64_t));
11443- _29 = 1;
11444- _28 = _n - _29;
11445- _IGNORE_(_29);
11551+ uint64_t _31; memset(&_31, 0, sizeof(uint64_t));
11552+ _31 = 1;
11553+ _30 = _n - _31;
11554+ _IGNORE_(_31);
1144611555 }
11447- at_get$(&_26, &*_27, &_28, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 2605);
11448- _IGNORE_(_28);
11556+ at_get$(&_28, &*_29, &_30, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 2633);
11557+ _IGNORE_(_30);
1144911558 }
11450- _24 = _25 == _26;
11451- _IGNORE_(_26);
11452- _IGNORE_(_25);
11559+ _26 = _27 == _28;
11560+ _IGNORE_(_28);
11561+ _IGNORE_(_27);
1145311562 }
11454- bool _25; memset(&_25, 0, sizeof(bool));
11563+ bool _27; memset(&_27, 0, sizeof(bool));
1145511564 {
11456- uint8_t _26; memset(&_26, 0, sizeof(uint8_t));
11457- _26 = 109;
11458- uint8_t _27; memset(&_27, 0, sizeof(uint8_t));
11565+ uint8_t _28; memset(&_28, 0, sizeof(uint8_t));
11566+ _28 = 109;
11567+ uint8_t _29; memset(&_29, 0, sizeof(uint8_t));
1145911568 {
11460- const struct stack/*u8*/ *_28 = &(*callee).data;
11461- uint64_t _29; memset(&_29, 0, sizeof(uint64_t));
11569+ const struct stack/*u8*/ *_30 = &(*callee).data;
11570+ uint64_t _31; memset(&_31, 0, sizeof(uint64_t));
1146211571 {
11463- uint64_t _30; memset(&_30, 0, sizeof(uint64_t));
11464- _30 = 2;
11465- _29 = _n - _30;
11466- _IGNORE_(_30);
11572+ uint64_t _32; memset(&_32, 0, sizeof(uint64_t));
11573+ _32 = 2;
11574+ _31 = _n - _32;
11575+ _IGNORE_(_32);
1146711576 }
11468- at_get$(&_27, &*_28, &_29, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 2606);
11469- _IGNORE_(_29);
11577+ at_get$(&_29, &*_30, &_31, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 2634);
11578+ _IGNORE_(_31);
1147011579 }
11471- _25 = _26 == _27;
11472- _IGNORE_(_27);
11473- _IGNORE_(_26);
11580+ _27 = _28 == _29;
11581+ _IGNORE_(_29);
11582+ _IGNORE_(_28);
1147411583 }
11475- and(&_23, &_24, &_25);
11476- _IGNORE_(_25);
11477- _IGNORE_(_24);
11584+ and(&_25, &_26, &_27);
11585+ _IGNORE_(_27);
11586+ _IGNORE_(_26);
1147811587 }
11479- bool _24; memset(&_24, 0, sizeof(bool));
11588+ bool _26; memset(&_26, 0, sizeof(bool));
1148011589 {
11481- uint8_t _25; memset(&_25, 0, sizeof(uint8_t));
11482- _25 = 112;
11483- uint8_t _26; memset(&_26, 0, sizeof(uint8_t));
11590+ uint8_t _27; memset(&_27, 0, sizeof(uint8_t));
11591+ _27 = 112;
11592+ uint8_t _28; memset(&_28, 0, sizeof(uint8_t));
1148411593 {
11485- const struct stack/*u8*/ *_27 = &(*callee).data;
11486- uint64_t _28; memset(&_28, 0, sizeof(uint64_t));
11594+ const struct stack/*u8*/ *_29 = &(*callee).data;
11595+ uint64_t _30; memset(&_30, 0, sizeof(uint64_t));
1148711596 {
11488- uint64_t _29; memset(&_29, 0, sizeof(uint64_t));
11489- _29 = 3;
11490- _28 = _n - _29;
11491- _IGNORE_(_29);
11597+ uint64_t _31; memset(&_31, 0, sizeof(uint64_t));
11598+ _31 = 3;
11599+ _30 = _n - _31;
11600+ _IGNORE_(_31);
1149211601 }
11493- at_get$(&_26, &*_27, &_28, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 2608);
11494- _IGNORE_(_28);
11602+ at_get$(&_28, &*_29, &_30, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 2636);
11603+ _IGNORE_(_30);
1149511604 }
11496- _24 = _25 == _26;
11497- _IGNORE_(_26);
11498- _IGNORE_(_25);
11605+ _26 = _27 == _28;
11606+ _IGNORE_(_28);
11607+ _IGNORE_(_27);
1149911608 }
11500- and(&_22, &_23, &_24);
11501- _IGNORE_(_24);
11502- _IGNORE_(_23);
11609+ and(&_24, &_25, &_26);
11610+ _IGNORE_(_26);
11611+ _IGNORE_(_25);
1150311612 }
11504- if(_22)
11613+ if(_24)
1150511614 {
11506- struct stack/*type_pure*/ _23; memset(&_23, 0, sizeof(struct stack/*type_pure*/));
11507- clone$(&_23, &(*st_), sizeof(struct type_pure), (void (*)(void *))type_pure$dest, (void (*)(void *, const void *))type_pure$copy);
11508- if(!(_23).size)
11615+ struct stack/*type_pure*/ _25; memset(&_25, 0, sizeof(struct stack/*type_pure*/));
11616+ clone$(&_25, &(*st_), sizeof(struct type_pure), (void (*)(void *))type_pure$dest, (void (*)(void *, const void *))type_pure$copy);
11617+ if(!(_25).size)
1150911618 {
1151011619 {
1151111620 {
11512- const struct StreamOut *_26 = &(*streams).err;
11513- struct string _27; memset(&_27, 0, sizeof(struct string));
11514- init$fromliteral(&_27, "missing subtype for ", 20);
11515- PutStr(0 /* _25 */, &*_26, &_27);
11516- string$dest(&_27);
11621+ const struct StreamOut *_28 = &(*streams).err;
11622+ struct string _29; memset(&_29, 0, sizeof(struct string));
11623+ init$fromliteral(&_29, "missing subtype for ", 20);
11624+ PutStr(0 /* _27 */, &*_28, &_29);
11625+ string$dest(&_29);
1151711626 }
1151811627 {
11519- const struct StreamOut *_27 = &(*streams).err;
11520- PutStr(0 /* _26 */, &*_27, &*callee);
11628+ const struct StreamOut *_29 = &(*streams).err;
11629+ PutStr(0 /* _28 */, &*_29, &*callee);
1152111630 }
1152211631 {
11523- const struct StreamOut *_28 = &(*streams).err;
11524- Fail$(0 /* _27 */, &*_28, &*txtpos);
11632+ const struct StreamOut *_30 = &(*streams).err;
11633+ Fail$(0 /* _29 */, &*_30, &*txtpos);
1152511634 }
1152611635 }
1152711636 }
1152811637 else
1152911638 {
11530- const struct type_pure *subtype = (_23).data;
11639+ const struct type_pure *subtype = (_25).data;
1153111640 {
11532- struct type_pure _26; memset(&_26, 0, sizeof(struct type_pure));
11533- type_pure$copy(&_26, &(*subtype));
11534- switch((_26).type)
11641+ struct type_pure _28; memset(&_28, 0, sizeof(struct type_pure));
11642+ type_pure$copy(&_28, &(*subtype));
11643+ switch((_28).type)
1153511644 {
1153611645 case 0: // struct stack/*type_pure_normal*/ type_pure_normal:
1153711646 {
@@ -11539,33 +11648,33 @@
1153911648 }
1154011649 case 1: // struct stack/*type_pure_wrapped*/ type_pure_wrapped:
1154111650 {
11542- const struct type_pure_wrapped *tw = ((_26).type_pure_wrapped).data;
11651+ const struct type_pure_wrapped *tw = ((_28).type_pure_wrapped).data;
1154311652 {
1154411653 {
11545- const struct StreamOut *_30 = &(*streams).out;
11546- struct string _31; memset(&_31, 0, sizeof(struct string));
11547- init$fromliteral(&_31, ", ", 2);
11548- PutStr(0 /* _29 */, &*_30, &_31);
11549- string$dest(&_31);
11550- }
11551- {
11552- const struct StreamOut *_31 = &(*streams).out;
11553- struct stack/*structdef*/ *_32 = &(*state).structs;
11554- const struct type_pure_prim *_33 = &(*tw).subtype;
11555- SizeOfPurePrim$(0 /* _30 */, &*_31, &*_32, &*_33);
11556- }
11557- {
1155811654 const struct StreamOut *_32 = &(*streams).out;
1155911655 struct string _33; memset(&_33, 0, sizeof(struct string));
11560- init$fromliteral(&_33, ", (void *)cmp$", 14);
11656+ init$fromliteral(&_33, ", ", 2);
1156111657 PutStr(0 /* _31 */, &*_32, &_33);
1156211658 string$dest(&_33);
1156311659 }
1156411660 {
1156511661 const struct StreamOut *_33 = &(*streams).out;
11566- const struct string *_34 = &(*tw).subtype.name;
11567- PutStr(0 /* _32 */, &*_33, &*_34);
11662+ struct stack/*structdef*/ *_34 = &(*state).structs;
11663+ const struct type_pure_prim *_35 = &(*tw).subtype;
11664+ SizeOfPurePrim$(0 /* _32 */, &*_33, &*_34, &*_35);
1156811665 }
11666+ {
11667+ const struct StreamOut *_34 = &(*streams).out;
11668+ struct string _35; memset(&_35, 0, sizeof(struct string));
11669+ init$fromliteral(&_35, ", (void *)cmp$", 14);
11670+ PutStr(0 /* _33 */, &*_34, &_35);
11671+ string$dest(&_35);
11672+ }
11673+ {
11674+ const struct StreamOut *_35 = &(*streams).out;
11675+ const struct string *_36 = &(*tw).subtype.name;
11676+ PutStr(0 /* _34 */, &*_35, &*_36);
11677+ }
1156911678 }
1157011679 break;
1157111680 }
@@ -11575,56 +11684,56 @@
1157511684 break;
1157611685 }
1157711686 }
11578- type_pure$dest(&_26);
11687+ type_pure$dest(&_28);
1157911688 }
1158011689 }
11581- free$(&_23, sizeof(struct type_pure), (void (*)(void *))type_pure$dest);
11690+ free$(&_25, sizeof(struct type_pure), (void (*)(void *))type_pure$dest);
1158211691 }
1158311692 }
11584- bool _20;
11693+ bool _22;
1158511694 {
11586- struct string _21; memset(&_21, 0, sizeof(struct string));
11587- init$fromliteral(&_21, "strcat$", 7);
11588- strequ(&_20, &_21, &*callee);
11589- string$dest(&_21);
11695+ struct string _23; memset(&_23, 0, sizeof(struct string));
11696+ init$fromliteral(&_23, "strcat$", 7);
11697+ strequ(&_22, &_23, &*callee);
11698+ string$dest(&_23);
1159011699 }
11591- if(_20)
11700+ if(_22)
1159211701 {
1159311702 {
11594- const struct StreamOut *_22 = &(*streams).out;
11595- struct string _23; memset(&_23, 0, sizeof(struct string));
11596- init$fromliteral(&_23, ", ", 2);
11597- PutStr(0 /* _21 */, &*_22, &_23);
11598- string$dest(&_23);
11703+ const struct StreamOut *_24 = &(*streams).out;
11704+ struct string _25; memset(&_25, 0, sizeof(struct string));
11705+ init$fromliteral(&_25, ", ", 2);
11706+ PutStr(0 /* _23 */, &*_24, &_25);
11707+ string$dest(&_25);
1159911708 }
1160011709 {
11601- const struct StreamOut *_23 = &(*streams).out;
11602- uint64_t *_24 = &(*txtpos).line;
11603- Print$u64(0 /* _22 */, &*_23, &*_24);
11710+ const struct StreamOut *_25 = &(*streams).out;
11711+ uint64_t *_26 = &(*txtpos).line;
11712+ Print$u64(0 /* _24 */, &*_25, &*_26);
1160411713 }
1160511714 }
1160611715 _IGNORE_(_n);
1160711716 }
1160811717 {
11609- const struct StreamOut *_16 = &(*streams).out;
11610- struct string _17; memset(&_17, 0, sizeof(struct string));
11611- init$fromliteral(&_17, ");\n", 3);
11612- PutStr(0 /* _15 */, &*_16, &_17);
11613- string$dest(&_17);
11718+ const struct StreamOut *_18 = &(*streams).out;
11719+ struct string _19; memset(&_19, 0, sizeof(struct string));
11720+ init$fromliteral(&_19, ");\n", 3);
11721+ PutStr(0 /* _17 */, &*_18, &_19);
11722+ string$dest(&_19);
1161411723 }
1161511724 }
1161611725 }
1161711726 {
11618- uint8_t _7; memset(&_7, 0, sizeof(uint8_t));
11619- _7 = 41;
11620- AssertGet$(0 /* _6 */, &*streams, &*txtpos, &*level, &_7);
11621- _IGNORE_(_7);
11727+ uint8_t _9; memset(&_9, 0, sizeof(uint8_t));
11728+ _9 = 41;
11729+ AssertGet$(0 /* _8 */, &*streams, &*txtpos, &*level, &_9);
11730+ _IGNORE_(_9);
1162211731 }
1162311732 // TODO: place result into variable of function-result-type instead of store & use same in following lines
1162411733 {
11625- const struct StreamOut *_8 = &(*streams).err;
11626- const struct type_pure *_9 = &(*store).qt.type;
11627- AssertResultTypePure$(0 /* _7 */, &*_8, &*txtpos, &*callee, &*_9, &*retype);
11734+ const struct StreamOut *_10 = &(*streams).err;
11735+ const struct type_pure *_11 = &(*store).qt.type;
11736+ AssertResultTypePure$(0 /* _9 */, &*_10, &*txtpos, &*callee, &*_11, &*retype);
1162811737 }
1162911738 //let mut var test = varinit(store);
1163011739 //ParsePath$(txtpos, level, structs, tmpnr, test);
@@ -11631,7 +11740,7 @@
1163111740 }
1163211741 }
1163311742
11634-void ParseLs$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct qtypepureid *store, const bool *partial, const bool *action, const struct string *self, const uint64_t *parnr, const struct def *def, const uint64_t *paridx, const uint64_t *base, const struct string *callee, const struct stack/*type_pure*/ *st_, const struct type_pure *retype)
11743+void ParseLs$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct qtypepureid *store, const bool *partial, const bool *action, const struct string *self, struct stack/*ReducedId*/ *reduced_ids, const bool *verified, const uint64_t *parnr, const struct def *def, const uint64_t *paridx, const uint64_t *base, const struct string *callee, const struct stack/*type_pure*/ *st_, const struct type_pure *retype)
1163511744 {
1163611745 {
1163711746 bool _2;
@@ -11688,7 +11797,7 @@
1168811797 struct qtype _7; memset(&_7, 0, sizeof(struct qtype));
1168911798 {
1169011799 const struct stack/*qtype*/ *_8 = &(*def).elems;
11691- at_get$(&_7, &*_8, &*paridx, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 2667);
11800+ at_get$(&_7, &*_8, &*paridx, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 2695);
1169211801 }
1169311802 PurifySubQType$(&_partyp, &*_6, &*txtpos, &_7);
1169411803 qtype$dest(&_7);
@@ -11702,7 +11811,7 @@
1170211811 struct qtype _7; memset(&_7, 0, sizeof(struct qtype));
1170311812 {
1170411813 const struct stack/*qtype*/ *_8 = &(*def).elems;
11705- at_get$(&_7, &*_8, &*paridx, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 2668);
11814+ at_get$(&_7, &*_8, &*paridx, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 2696);
1170611815 }
1170711816 ApplySubQTypePure$(&_partyp, &*_6, &*txtpos, &_7, &*solid);
1170811817 qtype$dest(&_7);
@@ -11729,7 +11838,7 @@
1172911838 _8 = *paridx + _9;
1173011839 _IGNORE_(_9);
1173111840 }
11732- ParseArg$(0 /* _6 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &_7, &*partial, &*action, &*self, &*parnr, &*def, &_8, &*base, &*callee, &*st_, &*retype);
11841+ ParseArg$(0 /* _6 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &_7, &*partial, &*action, &*self, &*reduced_ids, &*verified, &*parnr, &*def, &_8, &*base, &*callee, &*st_, &*retype);
1173311842 _IGNORE_(_8);
1173411843 qtypepureid$dest(&_7);
1173511844 }
@@ -11738,13 +11847,13 @@
1173811847 else
1173911848 {
1174011849 {
11741- ParseCC$(0 /* _3 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*def, &*paridx, &*store, &*base, &*callee, &*st_, &*retype);
11850+ ParseCC$(0 /* _3 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*def, &*paridx, &*store, &*partial, &*action, &*self, &*reduced_ids, &*verified, &*base, &*callee, &*st_, &*retype);
1174211851 }
1174311852 }
1174411853 }
1174511854 }
1174611855
11747-void ParseLS$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct def *def, const uint64_t *paridx, const bool *partial, const bool *action, const struct string *self, const struct qtypepureid *store, const uint64_t *base, const struct string *callee, const struct stack/*type_pure*/ *st_, const struct type_pure *retype)
11856+void ParseLS$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct def *def, const uint64_t *paridx, const bool *partial, const bool *action, const struct string *self, struct stack/*ReducedId*/ *reduced_ids, const bool *verified, const struct qtypepureid *store, const uint64_t *base, const struct string *callee, const struct stack/*type_pure*/ *st_, const struct type_pure *retype)
1174811857 {
1174911858 {
1175011859 uint64_t _parnr; memset(&_parnr, 0, sizeof(uint64_t));
@@ -11810,7 +11919,7 @@
1181011919 struct qtype _8; memset(&_8, 0, sizeof(struct qtype));
1181111920 {
1181211921 const struct stack/*qtype*/ *_9 = &(*def).elems;
11813- at_get$(&_8, &*_9, &*paridx, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 2693);
11922+ at_get$(&_8, &*_9, &*paridx, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 2721);
1181411923 }
1181511924 PurifySubQType$(&_partyp, &*_7, &*txtpos, &_8);
1181611925 qtype$dest(&_8);
@@ -11824,7 +11933,7 @@
1182411933 struct qtype _8; memset(&_8, 0, sizeof(struct qtype));
1182511934 {
1182611935 const struct stack/*qtype*/ *_9 = &(*def).elems;
11827- at_get$(&_8, &*_9, &*paridx, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 2694);
11936+ at_get$(&_8, &*_9, &*paridx, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 2722);
1182811937 }
1182911938 ApplySubQTypePure$(&_partyp, &*_7, &*txtpos, &_8, &*solid);
1183011939 qtype$dest(&_8);
@@ -11851,7 +11960,7 @@
1185111960 _9 = *paridx + _10;
1185211961 _IGNORE_(_10);
1185311962 }
11854- ParseArg$(0 /* _7 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &_8, &*partial, &*action, &*self, &_parnr, &*def, &_9, &*base, &*callee, &*st_, &*retype);
11963+ ParseArg$(0 /* _7 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &_8, &*partial, &*action, &*self, &*reduced_ids, &*verified, &_parnr, &*def, &_9, &*base, &*callee, &*st_, &*retype);
1185511964 _IGNORE_(_9);
1185611965 qtypepureid$dest(&_8);
1185711966 }
@@ -11860,7 +11969,7 @@
1186011969 else
1186111970 {
1186211971 {
11863- ParseCC$(0 /* _4 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*def, &*paridx, &*store, &*base, &*callee, &*st_, &*retype);
11972+ ParseCC$(0 /* _4 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*def, &*paridx, &*store, &*partial, &*action, &*self, &*reduced_ids, &*verified, &*base, &*callee, &*st_, &*retype);
1186411973 }
1186511974 }
1186611975 _IGNORE_(_parnr);
@@ -11867,147 +11976,260 @@
1186711976 }
1186811977 }
1186911978
11870-// Parse something that can be either returned or assigned to, e.g. x.a.b.c = y
11871-void ParseArg$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct qtypepureid *store, const struct qtypepureid *par, const bool *partial, const bool *action, const struct string *self, const uint64_t *parnr, const struct def *def, uint64_t *paridx, const uint64_t *base, const struct string *callee, const struct stack/*type_pure*/ *st_, const struct type_pure *retype)
11979+void verify_reduced$(bool *_0, const struct stack/*ReducedId*/ *reduced_ids, const uint64_t *idx, const struct ReducedId *ri)
1187211980 {
11981+ bool _1;
1187311982 {
11874- struct string _id; memset(&_id, 0, sizeof(struct string));
11983+ uint64_t _2; memset(&_2, 0, sizeof(uint64_t));
1187511984 {
11876- ParseId$(&_id, &*streams, &*txtpos, &*level);
11985+ size(&_2, &*reduced_ids);
1187711986 }
11878- // let is only allowed in a statement
11987+ _1 = *idx < _2;
11988+ _IGNORE_(_2);
11989+ }
11990+ if(_1)
11991+ {
1187911992 bool _2;
1188011993 {
11881- struct string _3; memset(&_3, 0, sizeof(struct string));
11882- init$fromliteral(&_3, "let", 3);
11883- strequ(&_2, &_id, &_3);
11884- string$dest(&_3);
11994+ struct cmp _3; memset(&_3, 0, sizeof(struct cmp));
11995+ {
11996+ struct ReducedId _4; memset(&_4, 0, sizeof(struct ReducedId));
11997+ {
11998+ at_get$(&_4, &*reduced_ids, &*idx, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest, (void (*)(void *, const void *))ReducedId$copy, 2734);
11999+ }
12000+ cmp$ReducedId(&_3, &_4, &*ri);
12001+ ReducedId$dest(&_4);
12002+ }
12003+ is_equ(&_2, &_3);
12004+ cmp$dest(&_3);
1188512005 }
1188612006 if(_2)
1188712007 {
12008+ *_0 = 1;
12009+ }
12010+ else
12011+ {
1188812012 {
11889- const struct StreamOut *_4 = &(*streams).err;
11890- struct string _5; memset(&_5, 0, sizeof(struct string));
11891- init$fromliteral(&_5, "let is not allowed in expression", 32);
11892- PutStr(0 /* _3 */, &*_4, &_5);
11893- string$dest(&_5);
12013+ uint64_t _3; memset(&_3, 0, sizeof(uint64_t));
12014+ {
12015+ uint64_t _4; memset(&_4, 0, sizeof(uint64_t));
12016+ _4 = 1;
12017+ _3 = _4 + *idx;
12018+ _IGNORE_(_4);
12019+ }
12020+ verify_reduced$(&*_0, &*reduced_ids, &_3, &*ri);
12021+ _IGNORE_(_3);
1189412022 }
12023+ }
12024+ }
12025+ else
12026+ {
12027+ *_0 = 0;
12028+ }
12029+}
12030+
12031+// Parse something that can be either returned or assigned to, e.g. x.a.b.c = y
12032+void ParseArg$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct qtypepureid *store, const struct qtypepureid *par, const bool *partial, const bool *action, const struct string *self, struct stack/*ReducedId*/ *reduced_ids, const bool *verified_, const uint64_t *parnr, const struct def *def, uint64_t *paridx, const uint64_t *base, const struct string *callee, const struct stack/*type_pure*/ *st_, const struct type_pure *retype)
12033+{
12034+ {
12035+ struct string _id; memset(&_id, 0, sizeof(struct string));
12036+ {
12037+ ParseId$(&_id, &*streams, &*txtpos, &*level);
12038+ }
12039+ bool _verified; memset(&_verified, 0, sizeof(bool));
12040+ bool _1;
12041+ {
12042+ bool _2; memset(&_2, 0, sizeof(bool));
1189512043 {
11896- const struct StreamOut *_5 = &(*streams).err;
11897- Fail$(0 /* _4 */, &*_5, &*txtpos);
12044+ not(&_2, &*partial);
1189812045 }
12046+ bool _3; memset(&_3, 0, sizeof(bool));
12047+ {
12048+ strequ(&_3, &*callee, &*self);
12049+ }
12050+ and(&_1, &_2, &_3);
12051+ _IGNORE_(_3);
12052+ _IGNORE_(_2);
1189912053 }
11900- bool _4;
12054+ if(_1)
1190112055 {
11902- const struct type_pure *_5 = &(*par).qt.type;
11903- ispurevoid(&_4, &*_5);
12056+ {
12057+ struct ReducedId _ri; memset(&_ri, 0, sizeof(struct ReducedId));
12058+ {
12059+ uint64_t _2; memset(&_2, 0, sizeof(uint64_t));
12060+ {
12061+ uint64_t _3; memset(&_3, 0, sizeof(uint64_t));
12062+ _3 = 1;
12063+ _2 = *paridx - _3;
12064+ _IGNORE_(_3);
12065+ }
12066+ ReducedId(&_ri, &_2, &_id);
12067+ _IGNORE_(_2);
12068+ }
12069+ //PutStr(streams.err, "TEST ");
12070+ //PutStr(streams.err, "param ");
12071+ //Print<ReducedId>(streams.err, ri);
12072+ //PutStr(streams.err, " reduced-list ");
12073+ //Print<stack<ReducedId>>(streams.err, reduced_ids);
12074+ //if verify_reduced$(reduced_ids, 0, ri) then
12075+ //{
12076+ // PutStr(streams.err, " CHECK");
12077+ //};
12078+ //PutStrLn(streams.err, "");
12079+ bool _2; memset(&_2, 0, sizeof(bool));
12080+ {
12081+ bool _3; memset(&_3, 0, sizeof(bool));
12082+ {
12083+ uint64_t _4; memset(&_4, 0, sizeof(uint64_t));
12084+ _4 = 0;
12085+ verify_reduced$(&_3, &*reduced_ids, &_4, &_ri);
12086+ _IGNORE_(_4);
12087+ }
12088+ or(&_2, &*verified_, &_3);
12089+ _IGNORE_(_3);
12090+ }
12091+ _verified = _2;
12092+ _IGNORE_(_2);
12093+ ReducedId$dest(&_ri);
12094+ }
1190412095 }
11905- if(_4)
12096+ else
1190612097 {
12098+ _verified = (*verified_);
12099+ }
12100+ // let is only allowed in a statement
12101+ bool _3;
12102+ {
12103+ struct string _4; memset(&_4, 0, sizeof(struct string));
12104+ init$fromliteral(&_4, "let", 3);
12105+ strequ(&_3, &_id, &_4);
12106+ string$dest(&_4);
12107+ }
12108+ if(_3)
12109+ {
1190712110 {
12111+ const struct StreamOut *_5 = &(*streams).err;
12112+ struct string _6; memset(&_6, 0, sizeof(struct string));
12113+ init$fromliteral(&_6, "let is not allowed in expression", 32);
12114+ PutStr(0 /* _4 */, &*_5, &_6);
12115+ string$dest(&_6);
12116+ }
12117+ {
1190812118 const struct StreamOut *_6 = &(*streams).err;
11909- struct string _7; memset(&_7, 0, sizeof(struct string));
11910- init$fromliteral(&_7, "INTERNAL ERROR: void in ParseArg$", 33);
11911- PutStr(0 /* _5 */, &*_6, &_7);
11912- string$dest(&_7);
12119+ Fail$(0 /* _5 */, &*_6, &*txtpos);
1191312120 }
12121+ }
12122+ bool _5;
12123+ {
12124+ const struct type_pure *_6 = &(*par).qt.type;
12125+ ispurevoid(&_5, &*_6);
12126+ }
12127+ if(_5)
12128+ {
1191412129 {
1191512130 const struct StreamOut *_7 = &(*streams).err;
11916- Fail$(0 /* _6 */, &*_7, &*txtpos);
12131+ struct string _8; memset(&_8, 0, sizeof(struct string));
12132+ init$fromliteral(&_8, "INTERNAL ERROR: void in ParseArg$", 33);
12133+ PutStr(0 /* _6 */, &*_7, &_8);
12134+ string$dest(&_8);
1191712135 }
12136+ {
12137+ const struct StreamOut *_8 = &(*streams).err;
12138+ Fail$(0 /* _7 */, &*_8, &*txtpos);
12139+ }
1191812140 }
11919- struct stack/*u64*/ _5; memset(&_5, 0, sizeof(struct stack/*u64*/));
12141+ struct stack/*u64*/ _6; memset(&_6, 0, sizeof(struct stack/*u64*/));
1192012142 {
11921- FindPr$(&_5, &*txtpos, &*scope, &_id);
12143+ FindParOrVar$(&_6, &*txtpos, &*scope, &_id);
1192212144 }
11923- if(!(_5).size)
12145+ if(!(_6).size)
1192412146 {
1192512147 // anonymous / hidden storage: use temporary name
1192612148 {
1192712149 struct qtypepureid _provide; memset(&_provide, 0, sizeof(struct qtypepureid));
1192812150 {
11929- const struct qtypepure *_7 = &(*par).qt;
11930- struct string _8; memset(&_8, 0, sizeof(struct string));
12151+ const struct qtypepure *_8 = &(*par).qt;
12152+ struct string _9; memset(&_9, 0, sizeof(struct string));
1193112153 {
11932- GenVar$(&_8, &*tmpnr);
12154+ GenVar$(&_9, &*tmpnr);
1193312155 }
11934- qtypepureid(&_provide, &*_7, &_8);
11935- string$dest(&_8);
12156+ qtypepureid(&_provide, &*_8, &_9);
12157+ string$dest(&_9);
1193612158 }
1193712159 // Make mutable ONCE, for initialization.
1193812160 struct qtypepureid _mut_pv; memset(&_mut_pv, 0, sizeof(struct qtypepureid));
1193912161 {
11940- struct qtypepure _7; memset(&_7, 0, sizeof(struct qtypepure));
12162+ struct qtypepure _8; memset(&_8, 0, sizeof(struct qtypepure));
1194112163 {
11942- struct type_pure *_8 = &(_provide).qt.type;
11943- mutqtp(&_7, &*_8);
12164+ struct type_pure *_9 = &(_provide).qt.type;
12165+ mutqtp(&_8, &*_9);
1194412166 }
11945- struct string *_8 = &(_provide).id;
11946- qtypepureid(&_mut_pv, &_7, &*_8);
11947- qtypepure$dest(&_7);
12167+ struct string *_9 = &(_provide).id;
12168+ qtypepureid(&_mut_pv, &_8, &*_9);
12169+ qtypepure$dest(&_8);
1194812170 }
1194912171 {
11950- const struct StreamOut *_8 = &(*streams).out;
11951- struct stack/*structdef*/ *_9 = &(*state).structs;
11952- EmitLet$(0 /* _7 */, &*_8, &*txtpos, &*level, &*_9, &_mut_pv);
12172+ const struct StreamOut *_9 = &(*streams).out;
12173+ struct stack/*structdef*/ *_10 = &(*state).structs;
12174+ EmitLet$(0 /* _8 */, &*_9, &*txtpos, &*level, &*_10, &_mut_pv);
1195312175 }
1195412176 // if stack need to free...
1195512177 // No type-check necessary since storage is generated having expected type, and intended to be assigned to!
1195612178 {
11957- struct stack/*qtypepureid*/ _9; memset(&_9, 0, sizeof(struct stack/*qtypepureid*/));
12179+ struct stack/*qtypepureid*/ _10; memset(&_10, 0, sizeof(struct stack/*qtypepureid*/));
1195812180 {
11959- solid(&_9, &_mut_pv, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2734);
12181+ solid(&_10, &_mut_pv, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2792);
1196012182 }
11961- ParseExpr$(0 /* _8 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_9, &_id, &*partial, &*action, &*self);
11962- free$(&_9, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
12183+ ParseExpr$(0 /* _9 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_10, &_id, &*partial, &*action, &*self, &*reduced_ids, &_verified);
12184+ free$(&_10, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1196312185 }
1196412186 {
11965- struct var _10; memset(&_10, 0, sizeof(struct var));
12187+ struct var _11; memset(&_11, 0, sizeof(struct var));
1196612188 {
11967- varused(&_10, &_provide);
12189+ varused(&_11, &_provide);
1196812190 }
11969- push(0 /* _9 */, &*scope, &_10, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2736);
11970- var$dest(&_10);
12191+ push(0 /* _10 */, &*scope, &_11, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2794);
12192+ var$dest(&_11);
1197112193 }
1197212194 {
11973- uint64_t _11; memset(&_11, 0, sizeof(uint64_t));
12195+ uint64_t _12; memset(&_12, 0, sizeof(uint64_t));
1197412196 {
11975- uint64_t _12; memset(&_12, 0, sizeof(uint64_t));
11976- _12 = 1;
11977- _11 = *parnr + _12;
11978- _IGNORE_(_12);
12197+ uint64_t _13; memset(&_13, 0, sizeof(uint64_t));
12198+ _13 = 1;
12199+ _12 = *parnr + _13;
12200+ _IGNORE_(_13);
1197912201 }
11980- ParseLs$(0 /* _10 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self, &_11, &*def, &*paridx, &*base, &*callee, &*st_, &*retype);
11981- _IGNORE_(_11);
12202+ ParseLs$(0 /* _11 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self, &*reduced_ids, &_verified, &_12, &*def, &*paridx, &*base, &*callee, &*st_, &*retype);
12203+ _IGNORE_(_12);
1198212204 }
1198312205 {
11984- const struct StreamOut *_12 = &(*streams).out;
11985- Indent$(0 /* _11 */, &*_12, &*level);
11986- }
11987- {
1198812206 const struct StreamOut *_13 = &(*streams).out;
11989- struct type_pure *_14 = &(_provide).qt.type;
11990- FreeIn(0 /* _12 */, &*_13, &*_14);
12207+ Indent(0 /* _12 */, &*_13, &*level);
1199112208 }
1199212209 {
1199312210 const struct StreamOut *_14 = &(*streams).out;
11994- struct string *_15 = &(_provide).id;
11995- PutStr(0 /* _13 */, &*_14, &*_15);
12211+ struct type_pure *_15 = &(_provide).qt.type;
12212+ FreeIn(0 /* _13 */, &*_14, &*_15);
1199612213 }
1199712214 {
1199812215 const struct StreamOut *_15 = &(*streams).out;
11999- const struct StreamOut *_16 = &(*streams).err;
12000- struct stack/*structdef*/ *_17 = &(*state).structs;
12001- struct type_pure *_18 = &(_provide).qt.type;
12002- FreeOut$(0 /* _14 */, &*_15, &*_16, &*txtpos, &*_17, &*_18);
12216+ struct string *_16 = &(_provide).id;
12217+ PutStr(0 /* _14 */, &*_15, &*_16);
1200312218 }
1200412219 {
1200512220 const struct StreamOut *_16 = &(*streams).out;
12006- struct string _17; memset(&_17, 0, sizeof(struct string));
12007- init$fromliteral(&_17, "\n", 1);
12008- PutStr(0 /* _15 */, &*_16, &_17);
12009- string$dest(&_17);
12221+ const struct StreamOut *_17 = &(*streams).err;
12222+ struct stack/*structdef*/ *_18 = &(*state).structs;
12223+ struct type_pure *_19 = &(_provide).qt.type;
12224+ FreeOut$(0 /* _15 */, &*_16, &*_17, &*txtpos, &*_18, &*_19);
1201012225 }
12226+ {
12227+ const struct StreamOut *_17 = &(*streams).out;
12228+ struct string _18; memset(&_18, 0, sizeof(struct string));
12229+ init$fromliteral(&_18, "\n", 1);
12230+ PutStr(0 /* _16 */, &*_17, &_18);
12231+ string$dest(&_18);
12232+ }
1201112233 qtypepureid$dest(&_mut_pv);
1201212234 qtypepureid$dest(&_provide);
1201312235 }
@@ -12014,78 +12236,79 @@
1201412236 }
1201512237 else
1201612238 {
12017- const uint64_t *pos = (_5).data;
12239+ const uint64_t *pos = (_6).data;
1201812240 {
1201912241 struct var _provide; memset(&_provide, 0, sizeof(struct var));
1202012242 {
12021- at_get$(&_provide, &*scope, &*pos, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2744);
12243+ at_get$(&_provide, &*scope, &*pos, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2802);
1202212244 }
12023- bool *_8 = &(_provide).used;
12024- *_8 = 1;
12245+ bool *_9 = &(_provide).used;
12246+ *_9 = 1;
1202512247 // mark argument used
1202612248 {
12027- at_set$(0 /* _9 */, &*scope, &*pos, &_provide, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2746);
12249+ at_set$(0 /* _10 */, &*scope, &*pos, &_provide, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2804);
1202812250 }
1202912251 // store changed (marked used)
1203012252 {
12031- struct stack/*structdef*/ *_11 = &(*state).structs;
12032- ParsePath$(0 /* _10 */, &*streams, &*txtpos, &*level, &*_11, &*tmpnr, &_provide);
12253+ struct stack/*structdef*/ *_12 = &(*state).structs;
12254+ ParsePath$(0 /* _11 */, &*streams, &*txtpos, &*level, &*_12, &*tmpnr, &_provide);
1203312255 }
1203412256 // copy store to top since only last in block is returned
1203512257 // e.g. t test(t x, t y) {x = y}
1203612258 {
12037- push(0 /* _11 */, &*scope, &_provide, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2752);
12259+ push(0 /* _12 */, &*scope, &_provide, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2810);
1203812260 }
1203912261 // assignment to already declared parameter
12040- bool _13;
12262+ bool _14;
1204112263 {
12042- uint8_t _14; memset(&_14, 0, sizeof(uint8_t));
12043- _14 = 61;
12044- MatchOptional$(&_13, &*streams, &*txtpos, &*level, &_14);
12045- _IGNORE_(_14);
12264+ uint8_t _15; memset(&_15, 0, sizeof(uint8_t));
12265+ _15 = 61;
12266+ MatchOptional$(&_14, &*streams, &*txtpos, &*level, &_15);
12267+ _IGNORE_(_15);
1204612268 }
12047- if(_13)
12269+ if(_14)
1204812270 {
1204912271 {
12050- const struct StreamOut *_15 = &(*streams).err;
12051- struct string _16; memset(&_16, 0, sizeof(struct string));
12052- init$fromliteral(&_16, "assignment not allowed in expression", 36);
12053- PutStr(0 /* _14 */, &*_15, &_16);
12054- string$dest(&_16);
12055- }
12056- {
1205712272 const struct StreamOut *_16 = &(*streams).err;
12058- struct qtypepureid *_17 = &(_provide).qti;
12059- EPrQTPI(0 /* _15 */, &*_16, &*_17);
12273+ struct string _17; memset(&_17, 0, sizeof(struct string));
12274+ init$fromliteral(&_17, "assignment not allowed in expression", 36);
12275+ PutStr(0 /* _15 */, &*_16, &_17);
12276+ string$dest(&_17);
1206012277 }
1206112278 {
1206212279 const struct StreamOut *_17 = &(*streams).err;
12063- Fail$(0 /* _16 */, &*_17, &*txtpos);
12280+ struct qtypepureid *_18 = &(_provide).qti;
12281+ EPrQTPI(0 /* _16 */, &*_17, &*_18);
1206412282 }
12283+ {
12284+ const struct StreamOut *_18 = &(*streams).err;
12285+ Fail$(0 /* _17 */, &*_18, &*txtpos);
12286+ }
1206512287 }
1206612288 // ...assert parameter provides the type which function wants
1206712289 {
12068- const struct StreamOut *_15 = &(*streams).err;
12069- const struct qtypepure *_16 = &(*par).qt;
12070- const struct string *_17 = &(*par).id;
12071- struct qtypepureid *_18 = &(_provide).qti;
12072- ChkPar$(0 /* _14 */, &*_15, &*txtpos, &*_16, &*_17, &*_18);
12290+ const struct StreamOut *_16 = &(*streams).err;
12291+ const struct qtypepure *_17 = &(*par).qt;
12292+ const struct string *_18 = &(*par).id;
12293+ struct qtypepureid *_19 = &(_provide).qti;
12294+ ChkPar$(0 /* _15 */, &*_16, &*txtpos, &*_17, &*_18, &*_19);
1207312295 }
1207412296 {
12075- uint64_t _16; memset(&_16, 0, sizeof(uint64_t));
12297+ uint64_t _17; memset(&_17, 0, sizeof(uint64_t));
1207612298 {
12077- uint64_t _17; memset(&_17, 0, sizeof(uint64_t));
12078- _17 = 1;
12079- _16 = *parnr + _17;
12080- _IGNORE_(_17);
12299+ uint64_t _18; memset(&_18, 0, sizeof(uint64_t));
12300+ _18 = 1;
12301+ _17 = *parnr + _18;
12302+ _IGNORE_(_18);
1208112303 }
12082- ParseLs$(0 /* _15 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self, &_16, &*def, &*paridx, &*base, &*callee, &*st_, &*retype);
12083- _IGNORE_(_16);
12304+ ParseLs$(0 /* _16 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self, &*reduced_ids, &_verified, &_17, &*def, &*paridx, &*base, &*callee, &*st_, &*retype);
12305+ _IGNORE_(_17);
1208412306 }
1208512307 var$dest(&_provide);
1208612308 }
1208712309 }
12088- free$(&_5, sizeof(uint64_t), 0/*DEST*/);
12310+ free$(&_6, sizeof(uint64_t), 0/*DEST*/);
12311+ _IGNORE_(_verified);
1208912312 string$dest(&_id);
1209012313 }
1209112314 }
@@ -12120,7 +12343,7 @@
1212012343 {
1212112344 struct string _7; memset(&_7, 0, sizeof(struct string));
1212212345 init$fromliteral(&_7, "$", 1);
12123- strcat$(&_6, &_7, &*name, 2777);
12346+ strcat$(&_6, &_7, &*name, 2835);
1212412347 string$dest(&_7);
1212512348 }
1212612349 string$copy(&*_0, &_6);
@@ -12140,11 +12363,11 @@
1214012363 {
1214112364 getpurename(&_5, &*st);
1214212365 }
12143- strcat$(&_3, &_4, &_5, 2779);
12366+ strcat$(&_3, &_4, &_5, 2837);
1214412367 string$dest(&_5);
1214512368 string$dest(&_4);
1214612369 }
12147- strcat$(&*_0, &*name, &_3, 2779);
12370+ strcat$(&*_0, &*name, &_3, 2837);
1214812371 string$dest(&_3);
1214912372 }
1215012373 }
@@ -12156,7 +12379,7 @@
1215612379 }
1215712380 }
1215812381
12159-void ParseCall$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, const uint64_t *tmpnr_, const struct stack/*qtypepureid*/ *store, const struct string *callee, const bool *partial, const bool *action, const struct string *self)
12382+void ParseCall$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, const uint64_t *tmpnr_, const struct stack/*qtypepureid*/ *store, const struct string *callee, const bool *partial, const bool *action, const struct string *self, struct stack/*ReducedId*/ *reduced_ids, const bool *verified)
1216012383 {
1216112384 {
1216212385 uint64_t _base; memset(&_base, 0, sizeof(uint64_t));
@@ -12169,15 +12392,26 @@
1216912392 // if encapsulation should ever accidentally become broken.
1217012393 uint64_t _tmpnr; memset(&_tmpnr, 0, sizeof(uint64_t));
1217112394 _tmpnr = (*tmpnr_);
12395+ // NOTE: reporting error deferred after all parameters have been parsed to check for reduced.
12396+ //if and(not(partial), strequ(callee, self)) then
12397+ //{
12398+ // if equ<u64>(size<ReducedId>(reduced_ids), 0) then
12399+ // {
12400+ // PutStr(streams.err, "total function ");
12401+ // PutStr(streams.err, callee);
12402+ // PutStr(streams.err, " calls itself recursivly (hint: reduce parameter or declare partial)");
12403+ // Fail$(streams.err, txtpos);
12404+ // };
12405+ //};
1217212406 bool _2;
1217312407 {
1217412408 bool _3; memset(&_3, 0, sizeof(bool));
1217512409 {
12176- not(&_3, &*partial);
12410+ not(&_3, &*action);
1217712411 }
1217812412 bool _4; memset(&_4, 0, sizeof(bool));
1217912413 {
12180- strequ(&_4, &*callee, &*self);
12414+ idact$(&_4, &*callee);
1218112415 }
1218212416 and(&_2, &_3, &_4);
1218312417 _IGNORE_(_4);
@@ -12188,35 +12422,46 @@
1218812422 {
1218912423 const struct StreamOut *_4 = &(*streams).err;
1219012424 struct string _5; memset(&_5, 0, sizeof(struct string));
12191- init$fromliteral(&_5, "total function ", 15);
12425+ init$fromliteral(&_5, "in function ", 12);
1219212426 PutStr(0 /* _3 */, &*_4, &_5);
1219312427 string$dest(&_5);
1219412428 }
1219512429 {
1219612430 const struct StreamOut *_5 = &(*streams).err;
12197- PutStr(0 /* _4 */, &*_5, &*callee);
12431+ PutStr(0 /* _4 */, &*_5, &*self);
1219812432 }
1219912433 {
1220012434 const struct StreamOut *_6 = &(*streams).err;
1220112435 struct string _7; memset(&_7, 0, sizeof(struct string));
12202- init$fromliteral(&_7, " calls itself recursivly (hint: declare partial)", 48);
12436+ init$fromliteral(&_7, ": can't call action ", 20);
1220312437 PutStr(0 /* _5 */, &*_6, &_7);
1220412438 string$dest(&_7);
1220512439 }
1220612440 {
1220712441 const struct StreamOut *_7 = &(*streams).err;
12208- Fail$(0 /* _6 */, &*_7, &*txtpos);
12442+ PutStr(0 /* _6 */, &*_7, &*callee);
1220912443 }
12444+ {
12445+ const struct StreamOut *_8 = &(*streams).err;
12446+ struct string _9; memset(&_9, 0, sizeof(struct string));
12447+ init$fromliteral(&_9, " from non-action environment", 28);
12448+ PutStr(0 /* _7 */, &*_8, &_9);
12449+ string$dest(&_9);
12450+ }
12451+ {
12452+ const struct StreamOut *_9 = &(*streams).err;
12453+ Fail$(0 /* _8 */, &*_9, &*txtpos);
12454+ }
1221012455 }
1221112456 bool _4;
1221212457 {
1221312458 bool _5; memset(&_5, 0, sizeof(bool));
1221412459 {
12215- not(&_5, &*action);
12460+ not(&_5, &*partial);
1221612461 }
1221712462 bool _6; memset(&_6, 0, sizeof(bool));
1221812463 {
12219- idact$(&_6, &*callee);
12464+ idpart$(&_6, &*callee);
1222012465 }
1222112466 and(&_4, &_5, &_6);
1222212467 _IGNORE_(_6);
@@ -12238,7 +12483,7 @@
1223812483 {
1223912484 const struct StreamOut *_8 = &(*streams).err;
1224012485 struct string _9; memset(&_9, 0, sizeof(struct string));
12241- init$fromliteral(&_9, ": can't call action ", 20);
12486+ init$fromliteral(&_9, ": can't call partial ", 21);
1224212487 PutStr(0 /* _7 */, &*_8, &_9);
1224312488 string$dest(&_9);
1224412489 }
@@ -12249,7 +12494,7 @@
1224912494 {
1225012495 const struct StreamOut *_10 = &(*streams).err;
1225112496 struct string _11; memset(&_11, 0, sizeof(struct string));
12252- init$fromliteral(&_11, " from non-action environment", 28);
12497+ init$fromliteral(&_11, " from total environment", 23);
1225312498 PutStr(0 /* _9 */, &*_10, &_11);
1225412499 string$dest(&_11);
1225512500 }
@@ -12258,201 +12503,151 @@
1225812503 Fail$(0 /* _10 */, &*_11, &*txtpos);
1225912504 }
1226012505 }
12261- bool _6;
12262- {
12263- bool _7; memset(&_7, 0, sizeof(bool));
12264- {
12265- not(&_7, &*partial);
12266- }
12267- bool _8; memset(&_8, 0, sizeof(bool));
12268- {
12269- idpart$(&_8, &*callee);
12270- }
12271- and(&_6, &_7, &_8);
12272- _IGNORE_(_8);
12273- _IGNORE_(_7);
12274- }
12275- if(_6)
12276- {
12277- {
12278- const struct StreamOut *_8 = &(*streams).err;
12279- struct string _9; memset(&_9, 0, sizeof(struct string));
12280- init$fromliteral(&_9, "in function ", 12);
12281- PutStr(0 /* _7 */, &*_8, &_9);
12282- string$dest(&_9);
12283- }
12284- {
12285- const struct StreamOut *_9 = &(*streams).err;
12286- PutStr(0 /* _8 */, &*_9, &*self);
12287- }
12288- {
12289- const struct StreamOut *_10 = &(*streams).err;
12290- struct string _11; memset(&_11, 0, sizeof(struct string));
12291- init$fromliteral(&_11, ": can't call partial ", 21);
12292- PutStr(0 /* _9 */, &*_10, &_11);
12293- string$dest(&_11);
12294- }
12295- {
12296- const struct StreamOut *_11 = &(*streams).err;
12297- PutStr(0 /* _10 */, &*_11, &*callee);
12298- }
12299- {
12300- const struct StreamOut *_12 = &(*streams).err;
12301- struct string _13; memset(&_13, 0, sizeof(struct string));
12302- init$fromliteral(&_13, " from total environment", 23);
12303- PutStr(0 /* _11 */, &*_12, &_13);
12304- string$dest(&_13);
12305- }
12306- {
12307- const struct StreamOut *_13 = &(*streams).err;
12308- Fail$(0 /* _12 */, &*_13, &*txtpos);
12309- }
12310- }
1231112506 struct stack/*u64*/ _fnidx_; memset(&_fnidx_, 0, sizeof(struct stack/*u64*/));
1231212507 {
12313- struct stack/*def*/ *_7 = &(*state).defs;
12314- uint64_t _8; memset(&_8, 0, sizeof(uint64_t));
12508+ struct stack/*def*/ *_5 = &(*state).defs;
12509+ uint64_t _6; memset(&_6, 0, sizeof(uint64_t));
1231512510 {
12316- struct stack/*def*/ *_9 = &(*state).defs;
12317- size(&_8, &*_9);
12511+ struct stack/*def*/ *_7 = &(*state).defs;
12512+ size(&_6, &*_7);
1231812513 }
12319- idxdef$(&_fnidx_, &*_7, &_8, &*callee);
12320- _IGNORE_(_8);
12514+ idxdef$(&_fnidx_, &*_5, &_6, &*callee);
12515+ _IGNORE_(_6);
1232112516 }
12322- struct stack/*u64*/ _7; memset(&_7, 0, sizeof(struct stack/*u64*/));
12323- clone$(&_7, &(_fnidx_), sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/);
12324- if(!(_7).size)
12517+ struct stack/*u64*/ _5; memset(&_5, 0, sizeof(struct stack/*u64*/));
12518+ clone$(&_5, &(_fnidx_), sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/);
12519+ if(!(_5).size)
1232512520 {
1232612521 {
1232712522 {
12328- const struct StreamOut *_10 = &(*streams).err;
12329- struct string _11; memset(&_11, 0, sizeof(struct string));
12330- init$fromliteral(&_11, "undeclared function ", 20);
12331- PutStr(0 /* _9 */, &*_10, &_11);
12332- string$dest(&_11);
12523+ const struct StreamOut *_8 = &(*streams).err;
12524+ struct string _9; memset(&_9, 0, sizeof(struct string));
12525+ init$fromliteral(&_9, "undeclared function ", 20);
12526+ PutStr(0 /* _7 */, &*_8, &_9);
12527+ string$dest(&_9);
1233312528 }
1233412529 {
12335- const struct StreamOut *_11 = &(*streams).err;
12336- PutStr(0 /* _10 */, &*_11, &*callee);
12530+ const struct StreamOut *_9 = &(*streams).err;
12531+ PutStr(0 /* _8 */, &*_9, &*callee);
1233712532 }
1233812533 {
12339- const struct StreamOut *_12 = &(*streams).err;
12340- Fail$(0 /* _11 */, &*_12, &*txtpos);
12534+ const struct StreamOut *_10 = &(*streams).err;
12535+ Fail$(0 /* _9 */, &*_10, &*txtpos);
1234112536 }
1234212537 }
1234312538 }
1234412539 else
1234512540 {
12346- const uint64_t *fnidx = (_7).data;
12541+ const uint64_t *fnidx = (_5).data;
1234712542 // optional subtype, e.g. for push<...>(...)
1234812543 {
1234912544 struct stack/*type_pure*/ _st_; memset(&_st_, 0, sizeof(struct stack/*type_pure*/));
1235012545 {
12351- struct stack/*structdef*/ *_10 = &(*state).structs;
12352- ParseOptArgTypePure$(&_st_, &*streams, &*txtpos, &*level, &*_10);
12546+ struct stack/*structdef*/ *_8 = &(*state).structs;
12547+ ParseOptArgTypePure$(&_st_, &*streams, &*txtpos, &*level, &*_8);
1235312548 }
1235412549 struct def _def; memset(&_def, 0, sizeof(struct def));
1235512550 {
12356- struct stack/*def*/ *_10 = &(*state).defs;
12357- at_get$(&_def, &*_10, &*fnidx, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 2833);
12551+ struct stack/*def*/ *_8 = &(*state).defs;
12552+ at_get$(&_def, &*_8, &*fnidx, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 2895);
1235812553 }
12359- bool *_10 = &(_def).used;
12360- *_10 = 1;
12554+ bool *_8 = &(_def).used;
12555+ *_8 = 1;
1236112556 {
12362- struct stack/*def*/ *_12 = &(*state).defs;
12363- at_set$(0 /* _11 */, &*_12, &*fnidx, &_def, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 2835);
12557+ struct stack/*def*/ *_10 = &(*state).defs;
12558+ at_set$(0 /* _9 */, &*_10, &*fnidx, &_def, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 2897);
1236412559 }
1236512560 // store used
1236612561 struct qtype _re; memset(&_re, 0, sizeof(struct qtype));
1236712562 {
12368- struct type *_12 = &(_def).ti.type;
12369- mutqt(&_re, &*_12);
12563+ struct type *_10 = &(_def).ti.type;
12564+ mutqt(&_re, &*_10);
1237012565 }
1237112566 struct type_pure _retype; memset(&_retype, 0, sizeof(struct type_pure));
12372- struct stack/*type_pure*/ _12; memset(&_12, 0, sizeof(struct stack/*type_pure*/));
12373- clone$(&_12, &(_st_), sizeof(struct type_pure), (void (*)(void *))type_pure$dest, (void (*)(void *, const void *))type_pure$copy);
12374- if(!(_12).size)
12567+ struct stack/*type_pure*/ _10; memset(&_10, 0, sizeof(struct stack/*type_pure*/));
12568+ clone$(&_10, &(_st_), sizeof(struct type_pure), (void (*)(void *))type_pure$dest, (void (*)(void *, const void *))type_pure$copy);
12569+ if(!(_10).size)
1237512570 {
1237612571 {
12377- const struct StreamOut *_13 = &(*streams).err;
12378- const struct type *_14 = &(_re).type;
12379- PurifySubType$(&_retype, &*_13, &*txtpos, &*_14);
12572+ const struct StreamOut *_11 = &(*streams).err;
12573+ const struct type *_12 = &(_re).type;
12574+ PurifySubType$(&_retype, &*_11, &*txtpos, &*_12);
1238012575 }
1238112576 }
1238212577 else
1238312578 {
12384- const struct type_pure *solid = (_12).data;
12579+ const struct type_pure *solid = (_10).data;
1238512580 {
12386- const struct StreamOut *_13 = &(*streams).err;
12387- const struct type *_14 = &(_re).type;
12388- ApplySubTypePure$(&_retype, &*_13, &*txtpos, &*_14, &*solid);
12581+ const struct StreamOut *_11 = &(*streams).err;
12582+ const struct type *_12 = &(_re).type;
12583+ ApplySubTypePure$(&_retype, &*_11, &*txtpos, &*_12, &*solid);
1238912584 }
1239012585 }
12391- free$(&_12, sizeof(struct type_pure), (void (*)(void *))type_pure$dest);
12586+ free$(&_10, sizeof(struct type_pure), (void (*)(void *))type_pure$dest);
1239212587 // function-call
1239312588 {
12394- SkipComment$(0 /* _13 */, &*streams, &*txtpos, &*level);
12589+ SkipComment$(0 /* _11 */, &*streams, &*txtpos, &*level);
1239512590 }
12396- bool _15;
12591+ bool _13;
1239712592 {
12398- bool _16; memset(&_16, 0, sizeof(bool));
12593+ bool _14; memset(&_14, 0, sizeof(bool));
1239912594 {
12400- uint8_t _17; memset(&_17, 0, sizeof(uint8_t));
12401- _17 = 40;
12402- uint8_t _18; memset(&_18, 0, sizeof(uint8_t));
12595+ uint8_t _15; memset(&_15, 0, sizeof(uint8_t));
12596+ _15 = 40;
12597+ uint8_t _16; memset(&_16, 0, sizeof(uint8_t));
1240312598 {
12404- const struct StreamIn *_19 = &(*streams).in;
12405- Peek(&_18, &*_19);
12599+ const struct StreamIn *_17 = &(*streams).in;
12600+ Peek(&_16, &*_17);
1240612601 }
12407- _16 = _17 == _18;
12408- _IGNORE_(_18);
12409- _IGNORE_(_17);
12602+ _14 = _15 == _16;
12603+ _IGNORE_(_16);
12604+ _IGNORE_(_15);
1241012605 }
12411- not(&_15, &_16);
12412- _IGNORE_(_16);
12606+ not(&_13, &_14);
12607+ _IGNORE_(_14);
1241312608 }
12414- if(_15)
12609+ if(_13)
1241512610 {
1241612611 {
12612+ const struct StreamOut *_15 = &(*streams).err;
12613+ struct string _16; memset(&_16, 0, sizeof(struct string));
12614+ init$fromliteral(&_16, "function ", 9);
12615+ PutStr(0 /* _14 */, &*_15, &_16);
12616+ string$dest(&_16);
12617+ }
12618+ {
12619+ const struct StreamOut *_16 = &(*streams).err;
12620+ PutStr(0 /* _15 */, &*_16, &*callee);
12621+ }
12622+ {
1241712623 const struct StreamOut *_17 = &(*streams).err;
1241812624 struct string _18; memset(&_18, 0, sizeof(struct string));
12419- init$fromliteral(&_18, "function ", 9);
12625+ init$fromliteral(&_18, " not called - ", 14);
1242012626 PutStr(0 /* _16 */, &*_17, &_18);
1242112627 string$dest(&_18);
1242212628 }
1242312629 {
1242412630 const struct StreamOut *_18 = &(*streams).err;
12425- PutStr(0 /* _17 */, &*_18, &*callee);
12426- }
12427- {
12428- const struct StreamOut *_19 = &(*streams).err;
12429- struct string _20; memset(&_20, 0, sizeof(struct string));
12430- init$fromliteral(&_20, " not called - ", 14);
12431- PutStr(0 /* _18 */, &*_19, &_20);
12432- string$dest(&_20);
12433- }
12434- {
12435- const struct StreamOut *_20 = &(*streams).err;
12436- uint8_t _21; memset(&_21, 0, sizeof(uint8_t));
12631+ uint8_t _19; memset(&_19, 0, sizeof(uint8_t));
1243712632 {
12438- const struct StreamIn *_22 = &(*streams).in;
12439- GetAdvance(&_21, &*_22, &*txtpos);
12633+ const struct StreamIn *_20 = &(*streams).in;
12634+ GetAdvance(&_19, &*_20, &*txtpos);
1244012635 }
12441- uint8_t _22; memset(&_22, 0, sizeof(uint8_t));
12442- _22 = 40;
12443- Assert$(0 /* _19 */, &*_20, &*txtpos, &_21, &_22);
12444- _IGNORE_(_22);
12445- _IGNORE_(_21);
12636+ uint8_t _20; memset(&_20, 0, sizeof(uint8_t));
12637+ _20 = 40;
12638+ Assert$(0 /* _17 */, &*_18, &*txtpos, &_19, &_20);
12639+ _IGNORE_(_20);
12640+ _IGNORE_(_19);
1244612641 }
1244712642 }
1244812643 {
12449- const struct StreamIn *_17 = &(*streams).in;
12450- Skip(0 /* _16 */, &*_17, &*txtpos);
12644+ const struct StreamIn *_15 = &(*streams).in;
12645+ Skip(0 /* _14 */, &*_15, &*txtpos);
1245112646 }
1245212647 // return-type verified after call, to allow struct-element access after result
12453- struct stack/*qtypepureid*/ _17; memset(&_17, 0, sizeof(struct stack/*qtypepureid*/));
12454- clone$(&_17, &(*store), sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy);
12455- if(!(_17).size)
12648+ struct stack/*qtypepureid*/ _15; memset(&_15, 0, sizeof(struct stack/*qtypepureid*/));
12649+ clone$(&_15, &(*store), sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy);
12650+ if(!(_15).size)
1245612651 {
1245712652 // no type-check necessary since storage is generated having expected type
1245812653 // anonymous / hidden storage: use temporary name
@@ -12459,62 +12654,62 @@
1245912654 {
1246012655 struct qtypepureid _newstore; memset(&_newstore, 0, sizeof(struct qtypepureid));
1246112656 {
12462- struct qtypepure _19; memset(&_19, 0, sizeof(struct qtypepure));
12657+ struct qtypepure _17; memset(&_17, 0, sizeof(struct qtypepure));
1246312658 {
12464- mutqtp(&_19, &_retype);
12659+ mutqtp(&_17, &_retype);
1246512660 }
12466- struct string _20; memset(&_20, 0, sizeof(struct string));
12661+ struct string _18; memset(&_18, 0, sizeof(struct string));
1246712662 {
12468- GenVar$(&_20, &_tmpnr);
12663+ GenVar$(&_18, &_tmpnr);
1246912664 }
12470- qtypepureid(&_newstore, &_19, &_20);
12471- string$dest(&_20);
12472- qtypepure$dest(&_19);
12665+ qtypepureid(&_newstore, &_17, &_18);
12666+ string$dest(&_18);
12667+ qtypepure$dest(&_17);
1247312668 }
1247412669 {
12475- const struct StreamOut *_20 = &(*streams).out;
12476- struct stack/*structdef*/ *_21 = &(*state).structs;
12477- EmitLet$(0 /* _19 */, &*_20, &*txtpos, &*level, &*_21, &_newstore);
12670+ const struct StreamOut *_18 = &(*streams).out;
12671+ struct stack/*structdef*/ *_19 = &(*state).structs;
12672+ EmitLet$(0 /* _17 */, &*_18, &*txtpos, &*level, &*_19, &_newstore);
1247812673 }
1247912674 {
12480- uint64_t _21; memset(&_21, 0, sizeof(uint64_t));
12481- _21 = 0;
12482- /*paridx*/ struct string _22; memset(&_22, 0, sizeof(struct string));
12675+ uint64_t _19; memset(&_19, 0, sizeof(uint64_t));
12676+ _19 = 0;
12677+ /*paridx*/ struct string _20; memset(&_20, 0, sizeof(struct string));
1248312678 {
12484- bool *_23 = &(_def).specialized;
12485- SpecializeFunctionPure$(&_22, &*streams, &*txtpos, &*_23, &*callee, &_st_);
12679+ bool *_21 = &(_def).specialized;
12680+ SpecializeFunctionPure$(&_20, &*streams, &*txtpos, &*_21, &*callee, &_st_);
1248612681 }
12487- ParseLS$(0 /* _20 */, &*streams, &*txtpos, &*state, &*level, &*scope, &_tmpnr, &_def, &_21, &*partial, &*action, &*self, &_newstore, &_base, &_22, &_st_, &_retype);
12488- string$dest(&_22);
12489- _IGNORE_(_21);
12682+ ParseLS$(0 /* _18 */, &*streams, &*txtpos, &*state, &*level, &*scope, &_tmpnr, &_def, &_19, &*partial, &*action, &*self, &*reduced_ids, &*verified, &_newstore, &_base, &_20, &_st_, &_retype);
12683+ string$dest(&_20);
12684+ _IGNORE_(_19);
1249012685 }
1249112686 {
12492- const struct StreamOut *_22 = &(*streams).out;
12493- Indent$(0 /* _21 */, &*_22, &*level);
12687+ const struct StreamOut *_20 = &(*streams).out;
12688+ Indent(0 /* _19 */, &*_20, &*level);
1249412689 }
1249512690 {
12496- const struct StreamOut *_23 = &(*streams).out;
12497- const struct type_pure *_24 = &(_newstore).qt.type;
12498- FreeIn(0 /* _22 */, &*_23, &*_24);
12691+ const struct StreamOut *_21 = &(*streams).out;
12692+ const struct type_pure *_22 = &(_newstore).qt.type;
12693+ FreeIn(0 /* _20 */, &*_21, &*_22);
1249912694 }
1250012695 {
12501- const struct StreamOut *_24 = &(*streams).out;
12502- const struct string *_25 = &(_newstore).id;
12503- PutStr(0 /* _23 */, &*_24, &*_25);
12696+ const struct StreamOut *_22 = &(*streams).out;
12697+ const struct string *_23 = &(_newstore).id;
12698+ PutStr(0 /* _21 */, &*_22, &*_23);
1250412699 }
1250512700 {
12506- const struct StreamOut *_25 = &(*streams).out;
12507- const struct StreamOut *_26 = &(*streams).err;
12508- struct stack/*structdef*/ *_27 = &(*state).structs;
12509- const struct type_pure *_28 = &(_newstore).qt.type;
12510- FreeOut$(0 /* _24 */, &*_25, &*_26, &*txtpos, &*_27, &*_28);
12701+ const struct StreamOut *_23 = &(*streams).out;
12702+ const struct StreamOut *_24 = &(*streams).err;
12703+ struct stack/*structdef*/ *_25 = &(*state).structs;
12704+ const struct type_pure *_26 = &(_newstore).qt.type;
12705+ FreeOut$(0 /* _22 */, &*_23, &*_24, &*txtpos, &*_25, &*_26);
1251112706 }
1251212707 {
12513- const struct StreamOut *_26 = &(*streams).out;
12514- struct string _27; memset(&_27, 0, sizeof(struct string));
12515- init$fromliteral(&_27, "\n", 1);
12516- PutStr(0 /* _25 */, &*_26, &_27);
12517- string$dest(&_27);
12708+ const struct StreamOut *_24 = &(*streams).out;
12709+ struct string _25; memset(&_25, 0, sizeof(struct string));
12710+ init$fromliteral(&_25, "\n", 1);
12711+ PutStr(0 /* _23 */, &*_24, &_25);
12712+ string$dest(&_25);
1251812713 }
1251912714 qtypepureid$dest(&_newstore);
1252012715 }
@@ -12521,23 +12716,23 @@
1252112716 }
1252212717 else
1252312718 {
12524- const struct qtypepureid *solidstore = (_17).data;
12719+ const struct qtypepureid *solidstore = (_15).data;
1252512720 {
1252612721 {
12527- uint64_t _21; memset(&_21, 0, sizeof(uint64_t));
12528- _21 = 0;
12529- /*paridx*/ struct string _22; memset(&_22, 0, sizeof(struct string));
12722+ uint64_t _19; memset(&_19, 0, sizeof(uint64_t));
12723+ _19 = 0;
12724+ /*paridx*/ struct string _20; memset(&_20, 0, sizeof(struct string));
1253012725 {
12531- bool *_23 = &(_def).specialized;
12532- SpecializeFunctionPure$(&_22, &*streams, &*txtpos, &*_23, &*callee, &_st_);
12726+ bool *_21 = &(_def).specialized;
12727+ SpecializeFunctionPure$(&_20, &*streams, &*txtpos, &*_21, &*callee, &_st_);
1253312728 }
12534- ParseLS$(0 /* _20 */, &*streams, &*txtpos, &*state, &*level, &*scope, &_tmpnr, &_def, &_21, &*partial, &*action, &*self, &*solidstore, &_base, &_22, &_st_, &_retype);
12535- string$dest(&_22);
12536- _IGNORE_(_21);
12729+ ParseLS$(0 /* _18 */, &*streams, &*txtpos, &*state, &*level, &*scope, &_tmpnr, &_def, &_19, &*partial, &*action, &*self, &*reduced_ids, &*verified, &*solidstore, &_base, &_20, &_st_, &_retype);
12730+ string$dest(&_20);
12731+ _IGNORE_(_19);
1253712732 }
1253812733 }
1253912734 }
12540- free$(&_17, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
12735+ free$(&_15, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1254112736 type_pure$dest(&_retype);
1254212737 qtype$dest(&_re);
1254312738 def$dest(&_def);
@@ -12544,7 +12739,7 @@
1254412739 free$(&_st_, sizeof(struct type_pure), (void (*)(void *))type_pure$dest);
1254512740 }
1254612741 }
12547- free$(&_7, sizeof(uint64_t), 0/*DEST*/);
12742+ free$(&_5, sizeof(uint64_t), 0/*DEST*/);
1254812743 // forget done call (implicitly by comsuming args in DoCall/Climb)
1254912744 //ignore$(base, scope);
1255012745 //Dump2$(txtpos, scope);
@@ -12634,7 +12829,7 @@
1263412829 }
1263512830 }
1263612831
12637-void ParseIfStatement$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const bool *partial, const bool *action, const struct string *self, const struct qtypepureid *provide)
12832+void ParseIfStatement$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const bool *partial, const bool *action, const struct string *self, struct stack/*ReducedId*/ *reduced_ids, const bool *verified, const struct qtypepureid *provide)
1263812833 {
1263912834 // anonymous / hidden storage: use temporary name
1264012835 {
@@ -12662,7 +12857,7 @@
1266212857 }
1266312858 {
1266412859 const struct StreamOut *_2 = &(*streams).out;
12665- Indent$(0 /* _1 */, &*_2, &*level);
12860+ Indent(0 /* _1 */, &*_2, &*level);
1266612861 }
1266712862 {
1266812863 const struct StreamOut *_3 = &(*streams).out;
@@ -12678,13 +12873,13 @@
1267812873 {
1267912874 struct stack/*qtypepureid*/ _5; memset(&_5, 0, sizeof(struct stack/*qtypepureid*/));
1268012875 {
12681- solid(&_5, &_pred, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2900);
12876+ solid(&_5, &_pred, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2962);
1268212877 }
1268312878 struct string _6; memset(&_6, 0, sizeof(struct string));
1268412879 {
1268512880 ParseId$(&_6, &*streams, &*txtpos, &*level);
1268612881 }
12687- ParseExpr$(0 /* _4 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_5, &_6, &*partial, &*action, &*self);
12882+ ParseExpr$(0 /* _4 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_5, &_6, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1268812883 string$dest(&_6);
1268912884 free$(&_5, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1269012885 }
@@ -12721,7 +12916,7 @@
1272112916 }
1272212917 {
1272312918 const struct StreamOut *_8 = &(*streams).out;
12724- Indent$(0 /* _7 */, &*_8, &*level);
12919+ Indent(0 /* _7 */, &*_8, &*level);
1272512920 }
1272612921 {
1272712922 const struct StreamOut *_9 = &(*streams).out;
@@ -12745,9 +12940,9 @@
1274512940 {
1274612941 struct stack/*qtypepureid*/ _12; memset(&_12, 0, sizeof(struct stack/*qtypepureid*/));
1274712942 {
12748- solid(&_12, &*provide, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2909);
12943+ solid(&_12, &*provide, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2971);
1274912944 }
12750- ParseBlock$(0 /* _11 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_12, &*partial, &*action, &*self);
12945+ ParseBlock$(0 /* _11 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_12, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1275112946 free$(&_12, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1275212947 }
1275312948 struct string _id; memset(&_id, 0, sizeof(struct string));
@@ -12765,7 +12960,7 @@
1276512960 {
1276612961 {
1276712962 const struct StreamOut *_15 = &(*streams).out;
12768- Indent$(0 /* _14 */, &*_15, &*level);
12963+ Indent(0 /* _14 */, &*_15, &*level);
1276912964 }
1277012965 {
1277112966 const struct StreamOut *_16 = &(*streams).out;
@@ -12786,7 +12981,7 @@
1278612981 {
1278712982 {
1278812983 const struct StreamOut *_19 = &(*streams).out;
12789- Indent$(0 /* _18 */, &*_19, &*level);
12984+ Indent(0 /* _18 */, &*_19, &*level);
1279012985 }
1279112986 {
1279212987 const struct StreamOut *_20 = &(*streams).out;
@@ -12805,15 +13000,15 @@
1280513000 }
1280613001 struct stack/*qtypepureid*/ _22; memset(&_22, 0, sizeof(struct stack/*qtypepureid*/));
1280713002 {
12808- solid(&_22, &*provide, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2921);
13003+ solid(&_22, &*provide, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2983);
1280913004 }
12810- ParseBlockRaw$(0 /* _20 */, &*streams, &*txtpos, &*state, &_21, &*scope, &*tmpnr, &_22, &*partial, &*action, &*self);
13005+ ParseBlockRaw$(0 /* _20 */, &*streams, &*txtpos, &*state, &_21, &*scope, &*tmpnr, &_22, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1281113006 free$(&_22, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1281213007 _IGNORE_(_21);
1281313008 }
1281413009 {
1281513010 const struct StreamOut *_22 = &(*streams).out;
12816- Indent$(0 /* _21 */, &*_22, &*level);
13011+ Indent(0 /* _21 */, &*_22, &*level);
1281713012 }
1281813013 {
1281913014 const struct StreamOut *_23 = &(*streams).out;
@@ -12890,7 +13085,7 @@
1289013085 }
1289113086 {
1289213087 const struct StreamOut *_21 = &(*streams).out;
12893- Indent$(0 /* _20 */, &*_21, &*level);
13088+ Indent(0 /* _20 */, &*_21, &*level);
1289413089 }
1289513090 {
1289613091 const struct StreamOut *_22 = &(*streams).out;
@@ -12907,12 +13102,12 @@
1290713102 _23 = _24 + *level;
1290813103 _IGNORE_(_24);
1290913104 }
12910- ParseIfStatement$(0 /* _22 */, &*streams, &*txtpos, &*state, &_23, &*scope, &*tmpnr, &*partial, &*action, &*self, &*provide);
13105+ ParseIfStatement$(0 /* _22 */, &*streams, &*txtpos, &*state, &_23, &*scope, &*tmpnr, &*partial, &*action, &*self, &*reduced_ids, &*verified, &*provide);
1291113106 _IGNORE_(_23);
1291213107 }
1291313108 {
1291413109 const struct StreamOut *_24 = &(*streams).out;
12915- Indent$(0 /* _23 */, &*_24, &*level);
13110+ Indent(0 /* _23 */, &*_24, &*level);
1291613111 }
1291713112 {
1291813113 const struct StreamOut *_25 = &(*streams).out;
@@ -12929,12 +13124,12 @@
1292913124 }
1293013125 }
1293113126
12932-void ParseAssign$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const bool *partial, const bool *action, const struct string *self, const struct string *id)
13127+void ParseAssign$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const bool *partial, const bool *action, const struct string *self, struct stack/*ReducedId*/ *reduced_ids, const bool *verified, const struct string *id)
1293313128 {
1293413129 {
1293513130 struct stack/*u64*/ _1; memset(&_1, 0, sizeof(struct stack/*u64*/));
1293613131 {
12937- FindPr$(&_1, &*txtpos, &*scope, &*id);
13132+ FindParOrVar$(&_1, &*txtpos, &*scope, &*id);
1293813133 }
1293913134 if(!(_1).size)
1294013135 {
@@ -12992,9 +13187,9 @@
1299213187 {
1299313188 struct stack/*qtypepureid*/ _9; memset(&_9, 0, sizeof(struct stack/*qtypepureid*/));
1299413189 {
12995- solid(&_9, &_provide, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2963);
13190+ solid(&_9, &_provide, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3025);
1299613191 }
12997- ParseBlock$(0 /* _8 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_9, &*partial, &*action, &*self);
13192+ ParseBlock$(0 /* _8 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_9, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1299813193 free$(&_9, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1299913194 }
1300013195 }
@@ -13035,7 +13230,7 @@
1303513230 if(_5)
1303613231 {
1303713232 {
13038- ParseIfStatement$(0 /* _6 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*partial, &*action, &*self, &_provide);
13233+ ParseIfStatement$(0 /* _6 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*partial, &*action, &*self, &*reduced_ids, &*verified, &_provide);
1303913234 }
1304013235 }
1304113236 else
@@ -13043,7 +13238,7 @@
1304313238 // function-call
1304413239 {
1304513240 const struct StreamOut *_7 = &(*streams).out;
13046- Indent$(0 /* _6 */, &*_7, &*level);
13241+ Indent(0 /* _6 */, &*_7, &*level);
1304713242 }
1304813243 {
1304913244 const struct StreamOut *_8 = &(*streams).out;
@@ -13062,15 +13257,15 @@
1306213257 }
1306313258 struct stack/*qtypepureid*/ _10; memset(&_10, 0, sizeof(struct stack/*qtypepureid*/));
1306413259 {
13065- solid(&_10, &_provide, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2980);
13260+ solid(&_10, &_provide, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3042);
1306613261 }
13067- ParseCall$(0 /* _8 */, &*streams, &*txtpos, &*state, &_9, &*scope, &*tmpnr, &_10, &*id, &*partial, &*action, &*self);
13262+ ParseCall$(0 /* _8 */, &*streams, &*txtpos, &*state, &_9, &*scope, &*tmpnr, &_10, &*id, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1306813263 free$(&_10, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1306913264 _IGNORE_(_9);
1307013265 }
1307113266 {
1307213267 const struct StreamOut *_10 = &(*streams).out;
13073- Indent$(0 /* _9 */, &*_10, &*level);
13268+ Indent(0 /* _9 */, &*_10, &*level);
1307413269 }
1307513270 {
1307613271 const struct StreamOut *_11 = &(*streams).out;
@@ -13090,13 +13285,13 @@
1309013285 {
1309113286 struct var _provide; memset(&_provide, 0, sizeof(struct var));
1309213287 {
13093- at_get$(&_provide, &*scope, &*pos, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2986);
13288+ at_get$(&_provide, &*scope, &*pos, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3048);
1309413289 }
1309513290 bool *_4 = &(_provide).used;
1309613291 *_4 = 1;
1309713292 // mark argument used
1309813293 {
13099- at_set$(0 /* _5 */, &*scope, &*pos, &_provide, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2988);
13294+ at_set$(0 /* _5 */, &*scope, &*pos, &_provide, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3050);
1310013295 }
1310113296 // store changed (marked used)
1310213297 {
@@ -13106,7 +13301,7 @@
1310613301 // copy store to top since only last in block is returned
1310713302 // e.g. t test(t x, t y) {x = y}
1310813303 {
13109- push(0 /* _7 */, &*scope, &_provide, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2994);
13304+ push(0 /* _7 */, &*scope, &_provide, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3056);
1311013305 }
1311113306 bool _9;
1311213307 {
@@ -13140,13 +13335,13 @@
1314013335 struct stack/*qtypepureid*/ _13; memset(&_13, 0, sizeof(struct stack/*qtypepureid*/));
1314113336 {
1314213337 struct qtypepureid *_14 = &(_provide).qti;
13143- solid(&_13, &*_14, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3000);
13338+ solid(&_13, &*_14, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3062);
1314413339 }
1314513340 struct string _14; memset(&_14, 0, sizeof(struct string));
1314613341 {
1314713342 ParseId$(&_14, &*streams, &*txtpos, &*level);
1314813343 }
13149- ParseExpr$(0 /* _12 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_13, &_14, &*partial, &*action, &*self);
13344+ ParseExpr$(0 /* _12 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_13, &_14, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1315013345 string$dest(&_14);
1315113346 free$(&_13, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1315213347 }
@@ -13194,9 +13389,9 @@
1319413389 struct stack/*qtypepureid*/ _14; memset(&_14, 0, sizeof(struct stack/*qtypepureid*/));
1319513390 {
1319613391 struct qtypepureid *_15 = &(_provide).qti;
13197- solid(&_14, &*_15, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3018);
13392+ solid(&_14, &*_15, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3080);
1319813393 }
13199- ParseExpr$(0 /* _13 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_14, &_id, &*partial, &*action, &*self);
13394+ ParseExpr$(0 /* _13 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_14, &_id, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1320013395 free$(&_14, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1320113396 }
1320213397 string$dest(&_id);
@@ -13208,7 +13403,7 @@
1320813403 }
1320913404 }
1321013405
13211-void EmitCases$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct stack/*qtypepureid*/ *store, const bool *partial, const bool *action, const struct string *self, const struct string *par, const bool *mutable, const struct stack/*typepureid*/ *elems, const uint64_t *idx, const bool *typed)
13406+void EmitCases$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct stack/*qtypepureid*/ *store, const bool *partial, const bool *action, const struct string *self, struct stack/*ReducedId*/ *reduced_ids, const bool *verified, const struct string *par, const bool *mutable, const struct stack/*typepureid*/ *elems, const uint64_t *idx, const bool *typed)
1321213407 {
1321313408 {
1321413409 bool _2;
@@ -13224,7 +13419,7 @@
1322413419 {
1322513420 struct typepureid _ti; memset(&_ti, 0, sizeof(struct typepureid));
1322613421 {
13227- at_get$(&_ti, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 3027);
13422+ at_get$(&_ti, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 3089);
1322813423 }
1322913424 {
1323013425 const struct string *_4 = &(_ti).id;
@@ -13239,7 +13434,7 @@
1323913434 if(_4)
1324013435 {
1324113436 {
13242- empty(&_id, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 3031);
13437+ empty(&_id, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 3093);
1324313438 }
1324413439 }
1324513440 else
@@ -13256,7 +13451,7 @@
1325613451 }
1325713452 {
1325813453 const struct StreamOut *_7 = &(*streams).out;
13259- Indent$(0 /* _6 */, &*_7, &*level);
13454+ Indent(0 /* _6 */, &*_7, &*level);
1326013455 }
1326113456 {
1326213457 const struct StreamOut *_8 = &(*streams).out;
@@ -13289,7 +13484,7 @@
1328913484 }
1329013485 {
1329113486 const struct StreamOut *_13 = &(*streams).out;
13292- Indent$(0 /* _12 */, &*_13, &*level);
13487+ Indent(0 /* _12 */, &*_13, &*level);
1329313488 }
1329413489 {
1329513490 const struct StreamOut *_14 = &(*streams).out;
@@ -13319,7 +13514,7 @@
1331913514 {
1332013515 ParseId$(&_20, &*streams, &*txtpos, &*level);
1332113516 }
13322- ParseExpr$(0 /* _18 */, &*streams, &*txtpos, &*state, &_19, &*scope, &*tmpnr, &*store, &_20, &*partial, &*action, &*self);
13517+ ParseExpr$(0 /* _18 */, &*streams, &*txtpos, &*state, &_19, &*scope, &*tmpnr, &*store, &_20, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1332313518 string$dest(&_20);
1332413519 _IGNORE_(_19);
1332513520 }
@@ -13338,7 +13533,7 @@
1333813533 {
1333913534 ParseId$(&_20, &*streams, &*txtpos, &*level);
1334013535 }
13341- ParseAssign$(0 /* _18 */, &*streams, &*txtpos, &*state, &_19, &*scope, &*tmpnr, &*partial, &*action, &*self, &_20);
13536+ ParseAssign$(0 /* _18 */, &*streams, &*txtpos, &*state, &_19, &*scope, &*tmpnr, &*partial, &*action, &*self, &*reduced_ids, &*verified, &_20);
1334213537 string$dest(&_20);
1334313538 _IGNORE_(_19);
1334413539 }
@@ -13351,7 +13546,7 @@
1335113546 {
1335213547 struct stack/*u64*/ _17; memset(&_17, 0, sizeof(struct stack/*u64*/));
1335313548 {
13354- FindPr$(&_17, &*txtpos, &*scope, &*solidid);
13549+ FindParOrVar$(&_17, &*txtpos, &*scope, &*solidid);
1335513550 }
1335613551 if(!(_17).size)
1335713552 {
@@ -13435,7 +13630,7 @@
1343513630 _24 = *level + _25;
1343613631 _IGNORE_(_25);
1343713632 }
13438- Indent$(0 /* _22 */, &*_23, &_24);
13633+ Indent(0 /* _22 */, &*_23, &_24);
1343913634 _IGNORE_(_24);
1344013635 }
1344113636 {
@@ -13477,7 +13672,7 @@
1347713672 {
1347813673 varinit(&_30, &_qti);
1347913674 }
13480- push(0 /* _29 */, &*scope, &_30, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3073);
13675+ push(0 /* _29 */, &*scope, &_30, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3135);
1348113676 var$dest(&_30);
1348213677 }
1348313678 // make element accessible in case...
@@ -13523,7 +13718,7 @@
1352313718 _27 = *level + _28;
1352413719 _IGNORE_(_28);
1352513720 }
13526- Indent$(0 /* _25 */, &*_26, &_27);
13721+ Indent(0 /* _25 */, &*_26, &_27);
1352713722 _IGNORE_(_27);
1352813723 }
1352913724 {
@@ -13565,7 +13760,7 @@
1356513760 {
1356613761 varinit(&_33, &_qti);
1356713762 }
13568- push(0 /* _32 */, &*scope, &_33, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3082);
13763+ push(0 /* _32 */, &*scope, &_33, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3144);
1356913764 var$dest(&_33);
1357013765 }
1357113766 // make element accessible in case...
@@ -13603,7 +13798,7 @@
1360313798 _28 = *level + _29;
1360413799 _IGNORE_(_29);
1360513800 }
13606- Indent$(0 /* _26 */, &*_27, &_28);
13801+ Indent(0 /* _26 */, &*_27, &_28);
1360713802 _IGNORE_(_28);
1360813803 }
1360913804 {
@@ -13645,7 +13840,7 @@
1364513840 {
1364613841 varinit(&_34, &_qti);
1364713842 }
13648- push(0 /* _33 */, &*scope, &_34, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3088);
13843+ push(0 /* _33 */, &*scope, &_34, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3150);
1364913844 var$dest(&_34);
1365013845 }
1365113846 // make element accessible in case...
@@ -13688,7 +13883,7 @@
1368813883 _29 = *level + _30;
1368913884 _IGNORE_(_30);
1369013885 }
13691- Indent$(0 /* _27 */, &*_28, &_29);
13886+ Indent(0 /* _27 */, &*_28, &_29);
1369213887 _IGNORE_(_29);
1369313888 }
1369413889 {
@@ -13730,7 +13925,7 @@
1373013925 {
1373113926 varinit(&_35, &_qti);
1373213927 }
13733- push(0 /* _34 */, &*scope, &_35, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3094);
13928+ push(0 /* _34 */, &*scope, &_35, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3156);
1373413929 var$dest(&_35);
1373513930 }
1373613931 // make element accessible in case...
@@ -13771,7 +13966,7 @@
1377113966 {
1377213967 ParseId$(&_27, &*streams, &*txtpos, &*level);
1377313968 }
13774- ParseExpr$(0 /* _25 */, &*streams, &*txtpos, &*state, &_26, &*scope, &*tmpnr, &*store, &_27, &*partial, &*action, &*self);
13969+ ParseExpr$(0 /* _25 */, &*streams, &*txtpos, &*state, &_26, &*scope, &*tmpnr, &*store, &_27, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1377513970 string$dest(&_27);
1377613971 _IGNORE_(_26);
1377713972 }
@@ -13790,7 +13985,7 @@
1379013985 {
1379113986 ParseId$(&_27, &*streams, &*txtpos, &*level);
1379213987 }
13793- ParseAssign$(0 /* _25 */, &*streams, &*txtpos, &*state, &_26, &*scope, &*tmpnr, &*partial, &*action, &*self, &_27);
13988+ ParseAssign$(0 /* _25 */, &*streams, &*txtpos, &*state, &_26, &*scope, &*tmpnr, &*partial, &*action, &*self, &*reduced_ids, &*verified, &_27);
1379413989 string$dest(&_27);
1379513990 _IGNORE_(_26);
1379613991 }
@@ -13801,7 +13996,7 @@
1380113996 }
1380213997 {
1380313998 struct stack/*var*/ _26; memset(&_26, 0, sizeof(struct stack/*var*/));
13804- pop_opt(&_26, &*scope, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3108);
13999+ pop_opt(&_26, &*scope, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3170);
1380514000 free$(&_26, sizeof(struct var), (void (*)(void *))var$dest);
1380614001 }
1380714002 // ...but not outside
@@ -13818,7 +14013,7 @@
1381814013 _19 = *level + _20;
1381914014 _IGNORE_(_20);
1382014015 }
13821- Indent$(0 /* _17 */, &*_18, &_19);
14016+ Indent(0 /* _17 */, &*_18, &_19);
1382214017 _IGNORE_(_19);
1382314018 }
1382414019 {
@@ -13830,7 +14025,7 @@
1383014025 }
1383114026 {
1383214027 const struct StreamOut *_20 = &(*streams).out;
13833- Indent$(0 /* _19 */, &*_20, &*level);
14028+ Indent(0 /* _19 */, &*_20, &*level);
1383414029 }
1383514030 {
1383614031 const struct StreamOut *_21 = &(*streams).out;
@@ -13847,7 +14042,7 @@
1384714042 _22 = *idx + _23;
1384814043 _IGNORE_(_23);
1384914044 }
13850- EmitCases$(0 /* _21 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self, &*par, &*mutable, &*elems, &_22, &*typed);
14045+ EmitCases$(0 /* _21 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self, &*reduced_ids, &*verified, &*par, &*mutable, &*elems, &_22, &*typed);
1385114046 _IGNORE_(_22);
1385214047 }
1385314048 free$(&_id, sizeof(struct string), (void (*)(void *))string$dest);
@@ -13857,7 +14052,7 @@
1385714052 {
1385814053 {
1385914054 const struct StreamOut *_4 = &(*streams).out;
13860- Indent$(0 /* _3 */, &*_4, &*level);
14055+ Indent(0 /* _3 */, &*_4, &*level);
1386114056 }
1386214057 {
1386314058 const struct StreamOut *_5 = &(*streams).out;
@@ -13868,7 +14063,7 @@
1386814063 }
1386914064 {
1387014065 const struct StreamOut *_6 = &(*streams).out;
13871- Indent$(0 /* _5 */, &*_6, &*level);
14066+ Indent(0 /* _5 */, &*_6, &*level);
1387214067 }
1387314068 {
1387414069 const struct StreamOut *_7 = &(*streams).out;
@@ -13886,7 +14081,7 @@
1388614081 _9 = *level + _10;
1388714082 _IGNORE_(_10);
1388814083 }
13889- Indent$(0 /* _7 */, &*_8, &_9);
14084+ Indent(0 /* _7 */, &*_8, &_9);
1389014085 _IGNORE_(_9);
1389114086 }
1389214087 {
@@ -13905,7 +14100,7 @@
1390514100 _11 = *level + _12;
1390614101 _IGNORE_(_12);
1390714102 }
13908- Indent$(0 /* _9 */, &*_10, &_11);
14103+ Indent(0 /* _9 */, &*_10, &_11);
1390914104 _IGNORE_(_11);
1391014105 }
1391114106 {
@@ -13917,7 +14112,7 @@
1391714112 }
1391814113 {
1391914114 const struct StreamOut *_12 = &(*streams).out;
13920- Indent$(0 /* _11 */, &*_12, &*level);
14115+ Indent(0 /* _11 */, &*_12, &*level);
1392114116 }
1392214117 {
1392314118 const struct StreamOut *_13 = &(*streams).out;
@@ -13930,7 +14125,7 @@
1393014125 }
1393114126 }
1393214127
13933-void EmitSwitch$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct stack/*qtypepureid*/ *store, const struct string *id, const bool *partial, const bool *action, const struct string *self, const bool *typed)
14128+void EmitSwitch$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct stack/*qtypepureid*/ *store, const struct string *id, const bool *partial, const bool *action, const struct string *self, struct stack/*ReducedId*/ *reduced_ids, const bool *verified, const bool *typed)
1393414129 {
1393514130 {
1393614131 struct type_pure _subtype; memset(&_subtype, 0, sizeof(struct type_pure));
@@ -13973,9 +14168,9 @@
1397314168 }
1397414169 struct stack/*qtypepureid*/ _4; memset(&_4, 0, sizeof(struct stack/*qtypepureid*/));
1397514170 {
13976- solid(&_4, &_provide, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3134);
14171+ solid(&_4, &_provide, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3196);
1397714172 }
13978- ParseExpr$(0 /* _2 */, &*streams, &*txtpos, &*state, &_3, &*scope, &*tmpnr, &_4, &_id, &*partial, &*action, &*self);
14173+ ParseExpr$(0 /* _2 */, &*streams, &*txtpos, &*state, &_3, &*scope, &*tmpnr, &_4, &_id, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1397914174 free$(&_4, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1398014175 _IGNORE_(_3);
1398114176 }
@@ -14040,7 +14235,7 @@
1404014235 struct structdef _ud; memset(&_ud, 0, sizeof(struct structdef));
1404114236 {
1404214237 struct stack/*structdef*/ *_8 = &(*state).structs;
14043- at_get$(&_ud, &*_8, &*uidx, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 3150);
14238+ at_get$(&_ud, &*_8, &*uidx, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 3212);
1404414239 }
1404514240 struct flavour _8; memset(&_8, 0, sizeof(struct flavour));
1404614241 flavour$copy(&_8, &(_ud).type);
@@ -14091,7 +14286,7 @@
1409114286 flavour$dest(&_8);
1409214287 {
1409314288 const struct StreamOut *_12 = &(*streams).out;
14094- Indent$(0 /* _11 */, &*_12, &*level);
14289+ Indent(0 /* _11 */, &*_12, &*level);
1409514290 }
1409614291 {
1409714292 const struct StreamOut *_13 = &(*streams).out;
@@ -14114,7 +14309,7 @@
1411414309 }
1411514310 {
1411614311 const struct StreamOut *_16 = &(*streams).out;
14117- Indent$(0 /* _15 */, &*_16, &*level);
14312+ Indent(0 /* _15 */, &*_16, &*level);
1411814313 }
1411914314 {
1412014315 const struct StreamOut *_17 = &(*streams).out;
@@ -14137,7 +14332,7 @@
1413714332 /*mutable*/ const struct stack/*typepureid*/ *_21 = &(_ud).elems;
1413814333 uint64_t _22; memset(&_22, 0, sizeof(uint64_t));
1413914334 _22 = 0;
14140- EmitCases$(0 /* _17 */, &*streams, &*txtpos, &*state, &_18, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self, &*_19, &_20, &*_21, &_22, &*typed);
14335+ EmitCases$(0 /* _17 */, &*streams, &*txtpos, &*state, &_18, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self, &*reduced_ids, &*verified, &*_19, &_20, &*_21, &_22, &*typed);
1414114336 _IGNORE_(_22);
1414214337 _IGNORE_(_20);
1414314338 _IGNORE_(_18);
@@ -14144,7 +14339,7 @@
1414414339 }
1414514340 {
1414614341 const struct StreamOut *_19 = &(*streams).out;
14147- Indent$(0 /* _18 */, &*_19, &*level);
14342+ Indent(0 /* _18 */, &*_19, &*level);
1414814343 }
1414914344 {
1415014345 const struct StreamOut *_20 = &(*streams).out;
@@ -14225,7 +14420,7 @@
1422514420 struct structdef _ud; memset(&_ud, 0, sizeof(struct structdef));
1422614421 {
1422714422 struct stack/*structdef*/ *_11 = &(*state).structs;
14228- at_get$(&_ud, &*_11, &*uidx, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 3186);
14423+ at_get$(&_ud, &*_11, &*uidx, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 3248);
1422914424 }
1423014425 struct flavour _11; memset(&_11, 0, sizeof(struct flavour));
1423114426 flavour$copy(&_11, &(_ud).type);
@@ -14276,7 +14471,7 @@
1427614471 flavour$dest(&_11);
1427714472 {
1427814473 const struct StreamOut *_15 = &(*streams).out;
14279- Indent$(0 /* _14 */, &*_15, &*level);
14474+ Indent(0 /* _14 */, &*_15, &*level);
1428014475 }
1428114476 {
1428214477 const struct StreamOut *_16 = &(*streams).out;
@@ -14299,7 +14494,7 @@
1429914494 }
1430014495 {
1430114496 const struct StreamOut *_19 = &(*streams).out;
14302- Indent$(0 /* _18 */, &*_19, &*level);
14497+ Indent(0 /* _18 */, &*_19, &*level);
1430314498 }
1430414499 {
1430514500 const struct StreamOut *_20 = &(*streams).out;
@@ -14322,7 +14517,7 @@
1432214517 /*mutable*/ const struct stack/*typepureid*/ *_24 = &(_ud).elems;
1432314518 uint64_t _25; memset(&_25, 0, sizeof(uint64_t));
1432414519 _25 = 0;
14325- EmitCases$(0 /* _20 */, &*streams, &*txtpos, &*state, &_21, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self, &*_22, &_23, &*_24, &_25, &*typed);
14520+ EmitCases$(0 /* _20 */, &*streams, &*txtpos, &*state, &_21, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self, &*reduced_ids, &*verified, &*_22, &_23, &*_24, &_25, &*typed);
1432614521 _IGNORE_(_25);
1432714522 _IGNORE_(_23);
1432814523 _IGNORE_(_21);
@@ -14329,7 +14524,7 @@
1432914524 }
1433014525 {
1433114526 const struct StreamOut *_22 = &(*streams).out;
14332- Indent$(0 /* _21 */, &*_22, &*level);
14527+ Indent(0 /* _21 */, &*_22, &*level);
1433314528 }
1433414529 {
1433514530 const struct StreamOut *_23 = &(*streams).out;
@@ -14350,7 +14545,7 @@
1435014545 {
1435114546 {
1435214547 const struct StreamOut *_10 = &(*streams).out;
14353- Indent$(0 /* _9 */, &*_10, &*level);
14548+ Indent(0 /* _9 */, &*_10, &*level);
1435414549 }
1435514550 {
1435614551 const struct StreamOut *_11 = &(*streams).out;
@@ -14373,7 +14568,7 @@
1437314568 }
1437414569 {
1437514570 const struct StreamOut *_14 = &(*streams).out;
14376- Indent$(0 /* _13 */, &*_14, &*level);
14571+ Indent(0 /* _13 */, &*_14, &*level);
1437714572 }
1437814573 {
1437914574 const struct StreamOut *_15 = &(*streams).out;
@@ -14410,7 +14605,7 @@
1441014605 {
1441114606 ParseId$(&_21, &*streams, &*txtpos, &*level);
1441214607 }
14413- ParseExpr$(0 /* _19 */, &*streams, &*txtpos, &*state, &_20, &*scope, &*tmpnr, &*store, &_21, &*partial, &*action, &*self);
14608+ ParseExpr$(0 /* _19 */, &*streams, &*txtpos, &*state, &_20, &*scope, &*tmpnr, &*store, &_21, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1441414609 string$dest(&_21);
1441514610 _IGNORE_(_20);
1441614611 }
@@ -14429,7 +14624,7 @@
1442914624 {
1443014625 ParseId$(&_21, &*streams, &*txtpos, &*level);
1443114626 }
14432- ParseAssign$(0 /* _19 */, &*streams, &*txtpos, &*state, &_20, &*scope, &*tmpnr, &*partial, &*action, &*self, &_21);
14627+ ParseAssign$(0 /* _19 */, &*streams, &*txtpos, &*state, &_20, &*scope, &*tmpnr, &*partial, &*action, &*self, &*reduced_ids, &*verified, &_21);
1443314628 string$dest(&_21);
1443414629 _IGNORE_(_20);
1443514630 }
@@ -14436,7 +14631,7 @@
1443614631 }
1443714632 {
1443814633 const struct StreamOut *_20 = &(*streams).out;
14439- Indent$(0 /* _19 */, &*_20, &*level);
14634+ Indent(0 /* _19 */, &*_20, &*level);
1444014635 }
1444114636 {
1444214637 const struct StreamOut *_21 = &(*streams).out;
@@ -14447,7 +14642,7 @@
1444714642 }
1444814643 {
1444914644 const struct StreamOut *_22 = &(*streams).out;
14450- Indent$(0 /* _21 */, &*_22, &*level);
14645+ Indent(0 /* _21 */, &*_22, &*level);
1445114646 }
1445214647 {
1445314648 const struct StreamOut *_23 = &(*streams).out;
@@ -14458,7 +14653,7 @@
1445814653 }
1445914654 {
1446014655 const struct StreamOut *_24 = &(*streams).out;
14461- Indent$(0 /* _23 */, &*_24, &*level);
14656+ Indent(0 /* _23 */, &*_24, &*level);
1446214657 }
1446314658 {
1446414659 const struct StreamOut *_25 = &(*streams).out;
@@ -14504,7 +14699,7 @@
1450414699 {
1450514700 ParseId$(&_33, &*streams, &*txtpos, &*level);
1450614701 }
14507- ParseExpr$(0 /* _31 */, &*streams, &*txtpos, &*state, &_32, &*scope, &*tmpnr, &*store, &_33, &*partial, &*action, &*self);
14702+ ParseExpr$(0 /* _31 */, &*streams, &*txtpos, &*state, &_32, &*scope, &*tmpnr, &*store, &_33, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1450814703 string$dest(&_33);
1450914704 _IGNORE_(_32);
1451014705 }
@@ -14523,7 +14718,7 @@
1452314718 {
1452414719 ParseId$(&_33, &*streams, &*txtpos, &*level);
1452514720 }
14526- ParseAssign$(0 /* _31 */, &*streams, &*txtpos, &*state, &_32, &*scope, &*tmpnr, &*partial, &*action, &*self, &_33);
14721+ ParseAssign$(0 /* _31 */, &*streams, &*txtpos, &*state, &_32, &*scope, &*tmpnr, &*partial, &*action, &*self, &*reduced_ids, &*verified, &_33);
1452714722 string$dest(&_33);
1452814723 _IGNORE_(_32);
1452914724 }
@@ -14536,7 +14731,7 @@
1453614731 {
1453714732 struct stack/*u64*/ _30; memset(&_30, 0, sizeof(struct stack/*u64*/));
1453814733 {
14539- FindPr$(&_30, &*txtpos, &*scope, &*solidvar);
14734+ FindParOrVar$(&_30, &*txtpos, &*scope, &*solidvar);
1454014735 }
1454114736 if(!(_30).size)
1454214737 {
@@ -14601,7 +14796,7 @@
1460114796 _35 = *level + _36;
1460214797 _IGNORE_(_36);
1460314798 }
14604- Indent$(0 /* _33 */, &*_34, &_35);
14799+ Indent(0 /* _33 */, &*_34, &_35);
1460514800 _IGNORE_(_35);
1460614801 }
1460714802 {
@@ -14637,7 +14832,7 @@
1463714832 {
1463814833 varinit(&_39, &_qti);
1463914834 }
14640- push(0 /* _38 */, &*scope, &_39, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3261);
14835+ push(0 /* _38 */, &*scope, &_39, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3323);
1464114836 var$dest(&_39);
1464214837 }
1464314838 // make element accessible in case...
@@ -14657,7 +14852,7 @@
1465714852 {
1465814853 ParseId$(&_43, &*streams, &*txtpos, &*level);
1465914854 }
14660- ParseExpr$(0 /* _41 */, &*streams, &*txtpos, &*state, &_42, &*scope, &*tmpnr, &*store, &_43, &*partial, &*action, &*self);
14855+ ParseExpr$(0 /* _41 */, &*streams, &*txtpos, &*state, &_42, &*scope, &*tmpnr, &*store, &_43, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1466114856 string$dest(&_43);
1466214857 _IGNORE_(_42);
1466314858 }
@@ -14676,7 +14871,7 @@
1467614871 {
1467714872 ParseId$(&_43, &*streams, &*txtpos, &*level);
1467814873 }
14679- ParseAssign$(0 /* _41 */, &*streams, &*txtpos, &*state, &_42, &*scope, &*tmpnr, &*partial, &*action, &*self, &_43);
14874+ ParseAssign$(0 /* _41 */, &*streams, &*txtpos, &*state, &_42, &*scope, &*tmpnr, &*partial, &*action, &*self, &*reduced_ids, &*verified, &_43);
1468014875 string$dest(&_43);
1468114876 _IGNORE_(_42);
1468214877 }
@@ -14687,7 +14882,7 @@
1468714882 }
1468814883 {
1468914884 struct stack/*var*/ _42; memset(&_42, 0, sizeof(struct stack/*var*/));
14690- pop_opt(&_42, &*scope, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3271);
14885+ pop_opt(&_42, &*scope, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3333);
1469114886 free$(&_42, sizeof(struct var), (void (*)(void *))var$dest);
1469214887 }
1469314888 // ...but not outside
@@ -14698,7 +14893,7 @@
1469814893 free$(&_27, sizeof(struct string), (void (*)(void *))string$dest);
1469914894 {
1470014895 const struct StreamOut *_31 = &(*streams).out;
14701- Indent$(0 /* _30 */, &*_31, &*level);
14896+ Indent(0 /* _30 */, &*_31, &*level);
1470214897 }
1470314898 {
1470414899 const struct StreamOut *_32 = &(*streams).out;
@@ -14768,7 +14963,7 @@
1476814963 struct structdef _ud; memset(&_ud, 0, sizeof(struct structdef));
1476914964 {
1477014965 struct stack/*structdef*/ *_13 = &(*state).structs;
14771- at_get$(&_ud, &*_13, &*uidx, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 3289);
14966+ at_get$(&_ud, &*_13, &*uidx, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 3351);
1477214967 }
1477314968 struct flavour _13; memset(&_13, 0, sizeof(struct flavour));
1477414969 flavour$copy(&_13, &(_ud).type);
@@ -14819,7 +15014,7 @@
1481915014 flavour$dest(&_13);
1482015015 {
1482115016 const struct StreamOut *_17 = &(*streams).out;
14822- Indent$(0 /* _16 */, &*_17, &*level);
15017+ Indent(0 /* _16 */, &*_17, &*level);
1482315018 }
1482415019 {
1482515020 const struct StreamOut *_18 = &(*streams).out;
@@ -14842,7 +15037,7 @@
1484215037 }
1484315038 {
1484415039 const struct StreamOut *_21 = &(*streams).out;
14845- Indent$(0 /* _20 */, &*_21, &*level);
15040+ Indent(0 /* _20 */, &*_21, &*level);
1484615041 }
1484715042 {
1484815043 const struct StreamOut *_22 = &(*streams).out;
@@ -14865,7 +15060,7 @@
1486515060 /*mutable*/ const struct stack/*typepureid*/ *_26 = &(_ud).elems;
1486615061 uint64_t _27; memset(&_27, 0, sizeof(uint64_t));
1486715062 _27 = 0;
14868- EmitCases$(0 /* _22 */, &*streams, &*txtpos, &*state, &_23, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self, &*_24, &_25, &*_26, &_27, &*typed);
15063+ EmitCases$(0 /* _22 */, &*streams, &*txtpos, &*state, &_23, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self, &*reduced_ids, &*verified, &*_24, &_25, &*_26, &_27, &*typed);
1486915064 _IGNORE_(_27);
1487015065 _IGNORE_(_25);
1487115066 _IGNORE_(_23);
@@ -14872,7 +15067,7 @@
1487215067 }
1487315068 {
1487415069 const struct StreamOut *_24 = &(*streams).out;
14875- Indent$(0 /* _23 */, &*_24, &*level);
15070+ Indent(0 /* _23 */, &*_24, &*level);
1487615071 }
1487715072 {
1487815073 const struct StreamOut *_25 = &(*streams).out;
@@ -14907,7 +15102,7 @@
1490715102 type_pure$dest(&_3);
1490815103 {
1490915104 const struct StreamOut *_7 = &(*streams).out;
14910- Indent$(0 /* _6 */, &*_7, &*level);
15105+ Indent(0 /* _6 */, &*_7, &*level);
1491115106 }
1491215107 {
1491315108 const struct StreamOut *_8 = &(*streams).out;
@@ -14940,8 +15135,512 @@
1494015135 }
1494115136 }
1494215137
15138+void EmitReduce$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct stack/*qtypepureid*/ *store, const struct string *id, const bool *partial, const bool *action, const struct string *self, struct stack/*ReducedId*/ *reduced_ids, const bool *verified, const bool *typed)
15139+{
15140+ {
15141+ struct string _par; memset(&_par, 0, sizeof(struct string));
15142+ {
15143+ ParseId$(&_par, &*streams, &*txtpos, &*level);
15144+ }
15145+ // NOTE: only non-mutable parameter can be reduced!
15146+ struct stack/*u64*/ _1; memset(&_1, 0, sizeof(struct stack/*u64*/));
15147+ {
15148+ FindPar$(&_1, &*txtpos, &*scope, &_par);
15149+ }
15150+ if(!(_1).size)
15151+ {
15152+ {
15153+ {
15154+ const struct StreamOut *_4 = &(*streams).err;
15155+ struct string _5; memset(&_5, 0, sizeof(struct string));
15156+ init$fromliteral(&_5, "can only reduce non-mutable parameter", 37);
15157+ PutStr(0 /* _3 */, &*_4, &_5);
15158+ string$dest(&_5);
15159+ }
15160+ {
15161+ const struct StreamOut *_5 = &(*streams).err;
15162+ Fail$(0 /* _4 */, &*_5, &*txtpos);
15163+ }
15164+ }
15165+ }
15166+ else
15167+ {
15168+ const uint64_t *pos = (_1).data;
15169+ {
15170+ struct var _current; memset(&_current, 0, sizeof(struct var));
15171+ {
15172+ at_get$(&_current, &*scope, &*pos, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3389);
15173+ }
15174+ bool _5;
15175+ _5 = (_current).qti.qt.mutable;
15176+ if(_5)
15177+ {
15178+ {
15179+ const struct StreamOut *_7 = &(*streams).err;
15180+ struct string _8; memset(&_8, 0, sizeof(struct string));
15181+ init$fromliteral(&_8, "cannot reduce mutable parameter", 31);
15182+ PutStr(0 /* _6 */, &*_7, &_8);
15183+ string$dest(&_8);
15184+ }
15185+ {
15186+ const struct StreamOut *_8 = &(*streams).err;
15187+ Fail$(0 /* _7 */, &*_8, &*txtpos);
15188+ }
15189+ }
15190+ bool _7;
15191+ {
15192+ bool _8; memset(&_8, 0, sizeof(bool));
15193+ {
15194+ struct string _9; memset(&_9, 0, sizeof(struct string));
15195+ init$fromliteral(&_9, "to", 2);
15196+ struct string _10; memset(&_10, 0, sizeof(struct string));
15197+ {
15198+ ParseId$(&_10, &*streams, &*txtpos, &*level);
15199+ }
15200+ strequ(&_8, &_9, &_10);
15201+ string$dest(&_10);
15202+ string$dest(&_9);
15203+ }
15204+ not(&_7, &_8);
15205+ _IGNORE_(_8);
15206+ }
15207+ if(_7)
15208+ {
15209+ {
15210+ const struct StreamOut *_9 = &(*streams).err;
15211+ struct string _10; memset(&_10, 0, sizeof(struct string));
15212+ init$fromliteral(&_10, "missing keyword \"to\"", 20);
15213+ PutStr(0 /* _8 */, &*_9, &_10);
15214+ string$dest(&_10);
15215+ }
15216+ {
15217+ const struct StreamOut *_10 = &(*streams).err;
15218+ Fail$(0 /* _9 */, &*_10, &*txtpos);
15219+ }
15220+ }
15221+ struct string _tmp_reduce; memset(&_tmp_reduce, 0, sizeof(struct string));
15222+ {
15223+ ParseId$(&_tmp_reduce, &*streams, &*txtpos, &*level);
15224+ }
15225+ struct string _reduced_id; memset(&_reduced_id, 0, sizeof(struct string));
15226+ bool _8;
15227+ {
15228+ struct string _9; memset(&_9, 0, sizeof(struct string));
15229+ init$fromliteral(&_9, "", 0);
15230+ strequ(&_8, &_9, &_tmp_reduce);
15231+ string$dest(&_9);
15232+ }
15233+ if(_8)
15234+ {
15235+ string$copy(&_reduced_id, &(_par));
15236+ }
15237+ else
15238+ {
15239+ string$copy(&_reduced_id, &(_tmp_reduce));
15240+ }
15241+ {
15242+ uint64_t _base_reduced; memset(&_base_reduced, 0, sizeof(uint64_t));
15243+ {
15244+ size(&_base_reduced, &*reduced_ids);
15245+ }
15246+ //push<ReducedId>(reduced_ids, ReducedId(par, reduced_id));
15247+ {
15248+ struct ReducedId _11; memset(&_11, 0, sizeof(struct ReducedId));
15249+ {
15250+ ReducedId(&_11, &*pos, &_reduced_id);
15251+ }
15252+ push(0 /* _10 */, &*reduced_ids, &_11, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest, (void (*)(void *, const void *))ReducedId$copy, 3409);
15253+ ReducedId$dest(&_11);
15254+ }
15255+ {
15256+ uint8_t _12; memset(&_12, 0, sizeof(uint8_t));
15257+ _12 = 58;
15258+ AssertGet$(0 /* _11 */, &*streams, &*txtpos, &*level, &_12);
15259+ _IGNORE_(_12);
15260+ }
15261+ struct type_pure _12; memset(&_12, 0, sizeof(struct type_pure));
15262+ type_pure$copy(&_12, &(_current).qti.qt.type);
15263+ switch((_12).type)
15264+ {
15265+ case 0: // struct stack/*type_pure_normal*/ type_pure_normal:
15266+ {
15267+ {
15268+ bool _15;
15269+ {
15270+ const struct type_pure *_16 = &(_current).qti.qt.type;
15271+ ispureprim(&_15, &*_16);
15272+ }
15273+ if(_15)
15274+ {
15275+ {
15276+ const struct StreamOut *_17 = &(*streams).out;
15277+ Indent(0 /* _16 */, &*_17, &*level);
15278+ }
15279+ {
15280+ const struct StreamOut *_18 = &(*streams).out;
15281+ struct string _19; memset(&_19, 0, sizeof(struct string));
15282+ init$fromliteral(&_19, "if(", 3);
15283+ PutStr(0 /* _17 */, &*_18, &_19);
15284+ string$dest(&_19);
15285+ }
15286+ {
15287+ const struct StreamOut *_19 = &(*streams).out;
15288+ const struct string *_20 = &(_current).qti.id;
15289+ PutStr(0 /* _18 */, &*_19, &*_20);
15290+ }
15291+ {
15292+ const struct StreamOut *_20 = &(*streams).out;
15293+ struct string _21; memset(&_21, 0, sizeof(struct string));
15294+ init$fromliteral(&_21, " > 0)\n", 6);
15295+ PutStr(0 /* _19 */, &*_20, &_21);
15296+ string$dest(&_21);
15297+ }
15298+ {
15299+ const struct StreamOut *_21 = &(*streams).out;
15300+ Indent(0 /* _20 */, &*_21, &*level);
15301+ }
15302+ {
15303+ const struct StreamOut *_22 = &(*streams).out;
15304+ struct string _23; memset(&_23, 0, sizeof(struct string));
15305+ init$fromliteral(&_23, "{\n", 2);
15306+ PutStr(0 /* _21 */, &*_22, &_23);
15307+ string$dest(&_23);
15308+ }
15309+ struct qtypepureid _reduced; memset(&_reduced, 0, sizeof(struct qtypepureid));
15310+ {
15311+ struct qtypepure _22; memset(&_22, 0, sizeof(struct qtypepure));
15312+ {
15313+ const struct type_pure *_23 = &(_current).qti.qt.type;
15314+ constqtp(&_22, &*_23);
15315+ }
15316+ struct string _23; memset(&_23, 0, sizeof(struct string));
15317+ {
15318+ uint8_t _24; memset(&_24, 0, sizeof(uint8_t));
15319+ _24 = 95;
15320+ preapp(&_23, &_reduced_id, &_24);
15321+ _IGNORE_(_24);
15322+ }
15323+ qtypepureid(&_reduced, &_22, &_23);
15324+ string$dest(&_23);
15325+ qtypepure$dest(&_22);
15326+ }
15327+ //EmitLet$(streams.out, txtpos, add<u64>(1, level), state.structs, reduced); // if dynamic need to free...
15328+ {
15329+ const struct StreamOut *_23 = &(*streams).out;
15330+ uint64_t _24; memset(&_24, 0, sizeof(uint64_t));
15331+ {
15332+ uint64_t _25; memset(&_25, 0, sizeof(uint64_t));
15333+ _25 = 1;
15334+ _24 = *level + _25;
15335+ _IGNORE_(_25);
15336+ }
15337+ Indent(0 /* _22 */, &*_23, &_24);
15338+ _IGNORE_(_24);
15339+ }
15340+ {
15341+ const struct StreamOut *_24 = &(*streams).out;
15342+ EmitQTPI(0 /* _23 */, &*_24, &_reduced);
15343+ }
15344+ {
15345+ const struct StreamOut *_25 = &(*streams).out;
15346+ struct string _26; memset(&_26, 0, sizeof(struct string));
15347+ init$fromliteral(&_26, " = ", 3);
15348+ PutStr(0 /* _24 */, &*_25, &_26);
15349+ string$dest(&_26);
15350+ }
15351+ {
15352+ const struct StreamOut *_26 = &(*streams).out;
15353+ const struct string *_27 = &(_current).qti.id;
15354+ PutStr(0 /* _25 */, &*_26, &*_27);
15355+ }
15356+ {
15357+ const struct StreamOut *_27 = &(*streams).out;
15358+ struct string _28; memset(&_28, 0, sizeof(struct string));
15359+ init$fromliteral(&_28, " - 1;\n", 6);
15360+ PutStr(0 /* _26 */, &*_27, &_28);
15361+ string$dest(&_28);
15362+ }
15363+ // NOTE: modifing scope instead of copy to remember variable-usage changes.
15364+ uint64_t _base_scope; memset(&_base_scope, 0, sizeof(uint64_t));
15365+ {
15366+ size(&_base_scope, &*scope);
15367+ }
15368+ {
15369+ struct var _28; memset(&_28, 0, sizeof(struct var));
15370+ {
15371+ varinit(&_28, &_reduced);
15372+ }
15373+ push(0 /* _27 */, &*scope, &_28, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3429);
15374+ var$dest(&_28);
15375+ }
15376+ // make element accessible in case...
15377+ bool _29;
15378+ _29 = (*typed);
15379+ if(_29)
15380+ {
15381+ {
15382+ uint64_t _31; memset(&_31, 0, sizeof(uint64_t));
15383+ {
15384+ uint64_t _32; memset(&_32, 0, sizeof(uint64_t));
15385+ _32 = 1;
15386+ _31 = *level + _32;
15387+ _IGNORE_(_32);
15388+ }
15389+ struct string _32; memset(&_32, 0, sizeof(struct string));
15390+ {
15391+ ParseId$(&_32, &*streams, &*txtpos, &*level);
15392+ }
15393+ ParseExpr$(0 /* _30 */, &*streams, &*txtpos, &*state, &_31, &*scope, &*tmpnr, &*store, &_32, &*partial, &*action, &*self, &*reduced_ids, &*verified);
15394+ string$dest(&_32);
15395+ _IGNORE_(_31);
15396+ }
15397+ }
15398+ else
15399+ {
15400+ {
15401+ uint64_t _31; memset(&_31, 0, sizeof(uint64_t));
15402+ {
15403+ uint64_t _32; memset(&_32, 0, sizeof(uint64_t));
15404+ _32 = 1;
15405+ _31 = *level + _32;
15406+ _IGNORE_(_32);
15407+ }
15408+ struct string _32; memset(&_32, 0, sizeof(struct string));
15409+ {
15410+ ParseId$(&_32, &*streams, &*txtpos, &*level);
15411+ }
15412+ ParseAssign$(0 /* _30 */, &*streams, &*txtpos, &*state, &_31, &*scope, &*tmpnr, &*partial, &*action, &*self, &*reduced_ids, &*verified, &_32);
15413+ string$dest(&_32);
15414+ _IGNORE_(_31);
15415+ }
15416+ }
15417+ {
15418+ const struct StreamOut *_31 = &(*streams).err;
15419+ VerifyUsed$(0 /* _30 */, &*_31, &*txtpos, &*scope, &_base_scope);
15420+ }
15421+ {
15422+ struct var _31; memset(&_31, 0, sizeof(struct var));
15423+ pop$(&_31, &*scope, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3440);
15424+ var$dest(&_31);
15425+ }
15426+ // ...but not outside
15427+ //Indent(streams.out, add<u64>(1, level)); FreeIn(streams.out, reduced.qt.type); PutStr(streams.out, reduced.id); FreeOut$(streams.out, streams.err, txtpos, state.structs, reduced.qt.type); PutStr(streams.out, "\n"); // ...then dynamic free here
15428+ {
15429+ const struct StreamOut *_32 = &(*streams).out;
15430+ Indent(0 /* _31 */, &*_32, &*level);
15431+ }
15432+ {
15433+ const struct StreamOut *_33 = &(*streams).out;
15434+ struct string _34; memset(&_34, 0, sizeof(struct string));
15435+ init$fromliteral(&_34, "}\n", 2);
15436+ PutStr(0 /* _32 */, &*_33, &_34);
15437+ string$dest(&_34);
15438+ }
15439+ _IGNORE_(_base_scope);
15440+ qtypepureid$dest(&_reduced);
15441+ }
15442+ else
15443+ {
15444+ {
15445+ const struct StreamOut *_17 = &(*streams).err;
15446+ struct string _18; memset(&_18, 0, sizeof(struct string));
15447+ init$fromliteral(&_18, "can't reduce ", 13);
15448+ PutStr(0 /* _16 */, &*_17, &_18);
15449+ string$dest(&_18);
15450+ }
15451+ {
15452+ const struct StreamOut *_18 = &(*streams).err;
15453+ PutStr(0 /* _17 */, &*_18, &*id);
15454+ }
15455+ {
15456+ const struct StreamOut *_19 = &(*streams).err;
15457+ struct string _20; memset(&_20, 0, sizeof(struct string));
15458+ init$fromliteral(&_20, " of type ", 9);
15459+ PutStr(0 /* _18 */, &*_19, &_20);
15460+ string$dest(&_20);
15461+ }
15462+ {
15463+ const struct StreamOut *_20 = &(*streams).err;
15464+ const struct type_pure *_21 = &(_current).qti.qt.type;
15465+ EPrTypePure(0 /* _19 */, &*_20, &*_21);
15466+ }
15467+ {
15468+ const struct StreamOut *_21 = &(*streams).err;
15469+ Fail$(0 /* _20 */, &*_21, &*txtpos);
15470+ }
15471+ }
15472+ }
15473+ break;
15474+ }
15475+ case 1: // struct stack/*type_pure_wrapped*/ type_pure_wrapped:
15476+ {
15477+ {
15478+ {
15479+ const struct StreamOut *_16 = &(*streams).err;
15480+ struct string _17; memset(&_17, 0, sizeof(struct string));
15481+ init$fromliteral(&_17, "can't reduce ", 13);
15482+ PutStr(0 /* _15 */, &*_16, &_17);
15483+ string$dest(&_17);
15484+ }
15485+ {
15486+ const struct StreamOut *_17 = &(*streams).err;
15487+ PutStr(0 /* _16 */, &*_17, &*id);
15488+ }
15489+ {
15490+ const struct StreamOut *_18 = &(*streams).err;
15491+ struct string _19; memset(&_19, 0, sizeof(struct string));
15492+ init$fromliteral(&_19, " of type ", 9);
15493+ PutStr(0 /* _17 */, &*_18, &_19);
15494+ string$dest(&_19);
15495+ }
15496+ {
15497+ const struct StreamOut *_19 = &(*streams).err;
15498+ const struct type_pure *_20 = &(_current).qti.qt.type;
15499+ EPrTypePure(0 /* _18 */, &*_19, &*_20);
15500+ }
15501+ {
15502+ const struct StreamOut *_20 = &(*streams).err;
15503+ Fail$(0 /* _19 */, &*_20, &*txtpos);
15504+ }
15505+ }
15506+ break;
15507+ }
15508+ default:
15509+ {
15510+ fprintf(stderr, "INTERNAL ERROR IN SWITCH");
15511+ break;
15512+ }
15513+ }
15514+ type_pure$dest(&_12);
15515+ {
15516+ struct stack/*ReducedId*/ _15; memset(&_15, 0, sizeof(struct stack/*ReducedId*/));
15517+ pop_opt_base$(&_15, &*reduced_ids, &_base_reduced, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest, (void (*)(void *, const void *))ReducedId$copy, 3464);
15518+ free$(&_15, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest);
15519+ }
15520+ _IGNORE_(_base_reduced);
15521+ }
15522+ {
15523+ const struct StreamOut *_11 = &(*streams).out;
15524+ Indent(0 /* _10 */, &*_11, &*level);
15525+ }
15526+ {
15527+ const struct StreamOut *_12 = &(*streams).out;
15528+ struct string _13; memset(&_13, 0, sizeof(struct string));
15529+ init$fromliteral(&_13, "else\n", 5);
15530+ PutStr(0 /* _11 */, &*_12, &_13);
15531+ string$dest(&_13);
15532+ }
15533+ bool _13;
15534+ {
15535+ bool _14; memset(&_14, 0, sizeof(bool));
15536+ {
15537+ struct string _15; memset(&_15, 0, sizeof(struct string));
15538+ init$fromliteral(&_15, "term", 4);
15539+ struct string _16; memset(&_16, 0, sizeof(struct string));
15540+ {
15541+ ParseId$(&_16, &*streams, &*txtpos, &*level);
15542+ }
15543+ strequ(&_14, &_15, &_16);
15544+ string$dest(&_16);
15545+ string$dest(&_15);
15546+ }
15547+ not(&_13, &_14);
15548+ _IGNORE_(_14);
15549+ }
15550+ if(_13)
15551+ {
15552+ {
15553+ const struct StreamOut *_15 = &(*streams).err;
15554+ struct string _16; memset(&_16, 0, sizeof(struct string));
15555+ init$fromliteral(&_16, "missing keyword \"term\"", 22);
15556+ PutStr(0 /* _14 */, &*_15, &_16);
15557+ string$dest(&_16);
15558+ }
15559+ {
15560+ const struct StreamOut *_16 = &(*streams).err;
15561+ Fail$(0 /* _15 */, &*_16, &*txtpos);
15562+ }
15563+ }
15564+ {
15565+ uint8_t _15; memset(&_15, 0, sizeof(uint8_t));
15566+ _15 = 58;
15567+ AssertGet$(0 /* _14 */, &*streams, &*txtpos, &*level, &_15);
15568+ _IGNORE_(_15);
15569+ }
15570+ {
15571+ const struct StreamOut *_16 = &(*streams).out;
15572+ Indent(0 /* _15 */, &*_16, &*level);
15573+ }
15574+ {
15575+ const struct StreamOut *_17 = &(*streams).out;
15576+ struct string _18; memset(&_18, 0, sizeof(struct string));
15577+ init$fromliteral(&_18, "{\n", 2);
15578+ PutStr(0 /* _16 */, &*_17, &_18);
15579+ string$dest(&_18);
15580+ }
15581+ bool _18;
15582+ _18 = (*typed);
15583+ if(_18)
15584+ {
15585+ {
15586+ uint64_t _20; memset(&_20, 0, sizeof(uint64_t));
15587+ {
15588+ uint64_t _21; memset(&_21, 0, sizeof(uint64_t));
15589+ _21 = 1;
15590+ _20 = *level + _21;
15591+ _IGNORE_(_21);
15592+ }
15593+ struct string _21; memset(&_21, 0, sizeof(struct string));
15594+ {
15595+ ParseId$(&_21, &*streams, &*txtpos, &*level);
15596+ }
15597+ ParseExpr$(0 /* _19 */, &*streams, &*txtpos, &*state, &_20, &*scope, &*tmpnr, &*store, &_21, &*partial, &*action, &*self, &*reduced_ids, &*verified);
15598+ string$dest(&_21);
15599+ _IGNORE_(_20);
15600+ }
15601+ }
15602+ else
15603+ {
15604+ {
15605+ uint64_t _20; memset(&_20, 0, sizeof(uint64_t));
15606+ {
15607+ uint64_t _21; memset(&_21, 0, sizeof(uint64_t));
15608+ _21 = 1;
15609+ _20 = *level + _21;
15610+ _IGNORE_(_21);
15611+ }
15612+ struct string _21; memset(&_21, 0, sizeof(struct string));
15613+ {
15614+ ParseId$(&_21, &*streams, &*txtpos, &*level);
15615+ }
15616+ ParseAssign$(0 /* _19 */, &*streams, &*txtpos, &*state, &_20, &*scope, &*tmpnr, &*partial, &*action, &*self, &*reduced_ids, &*verified, &_21);
15617+ string$dest(&_21);
15618+ _IGNORE_(_20);
15619+ }
15620+ }
15621+ {
15622+ const struct StreamOut *_20 = &(*streams).out;
15623+ Indent(0 /* _19 */, &*_20, &*level);
15624+ }
15625+ {
15626+ const struct StreamOut *_21 = &(*streams).out;
15627+ struct string _22; memset(&_22, 0, sizeof(struct string));
15628+ init$fromliteral(&_22, "}\n", 2);
15629+ PutStr(0 /* _20 */, &*_21, &_22);
15630+ string$dest(&_22);
15631+ }
15632+ string$dest(&_reduced_id);
15633+ string$dest(&_tmp_reduce);
15634+ var$dest(&_current);
15635+ }
15636+ }
15637+ free$(&_1, sizeof(uint64_t), 0/*DEST*/);
15638+ string$dest(&_par);
15639+ }
15640+}
15641+
1494315642 // parse expression - assumes optional id has already been parsed
14944-void ParseExpr$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct stack/*qtypepureid*/ *store, const struct string *id, const bool *partial, const bool *action, const struct string *self)
15643+void ParseExpr$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct stack/*qtypepureid*/ *store, const struct string *id, const bool *partial, const bool *action, const struct string *self, struct stack/*ReducedId*/ *reduced_ids, const bool *verified)
1494515644 {
1494615645 {
1494715646 bool _2;
@@ -14992,7 +15691,7 @@
1499215691 }
1499315692 {
1499415693 const struct StreamOut *_6 = &(*streams).out;
14995- Indent$(0 /* _5 */, &*_6, &*level);
15694+ Indent(0 /* _5 */, &*_6, &*level);
1499615695 }
1499715696 {
1499815697 const struct StreamOut *_7 = &(*streams).out;
@@ -15012,9 +15711,9 @@
1501215711 {
1501315712 struct stack/*qtypepureid*/ _9; memset(&_9, 0, sizeof(struct stack/*qtypepureid*/));
1501415713 {
15015- solid(&_9, &_pred, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3326);
15714+ solid(&_9, &_pred, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3504);
1501615715 }
15017- ParseExpr$(0 /* _8 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_9, &_id, &*partial, &*action, &*self);
15716+ ParseExpr$(0 /* _8 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_9, &_id, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1501815717 free$(&_9, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1501915718 }
1502015719 bool _10;
@@ -15050,7 +15749,7 @@
1505015749 }
1505115750 {
1505215751 const struct StreamOut *_12 = &(*streams).out;
15053- Indent$(0 /* _11 */, &*_12, &*level);
15752+ Indent(0 /* _11 */, &*_12, &*level);
1505415753 }
1505515754 {
1505615755 const struct StreamOut *_13 = &(*streams).out;
@@ -15073,7 +15772,7 @@
1507315772 }
1507415773 {
1507515774 const struct StreamOut *_16 = &(*streams).out;
15076- Indent$(0 /* _15 */, &*_16, &*level);
15775+ Indent(0 /* _15 */, &*_16, &*level);
1507715776 }
1507815777 {
1507915778 const struct StreamOut *_17 = &(*streams).out;
@@ -15093,12 +15792,12 @@
1509315792 _18 = *level + _19;
1509415793 _IGNORE_(_19);
1509515794 }
15096- ParseExpr$(0 /* _17 */, &*streams, &*txtpos, &*state, &_18, &*scope, &*tmpnr, &*store, &_id, &*partial, &*action, &*self);
15795+ ParseExpr$(0 /* _17 */, &*streams, &*txtpos, &*state, &_18, &*scope, &*tmpnr, &*store, &_id, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1509715796 _IGNORE_(_18);
1509815797 }
1509915798 {
1510015799 const struct StreamOut *_19 = &(*streams).out;
15101- Indent$(0 /* _18 */, &*_19, &*level);
15800+ Indent(0 /* _18 */, &*_19, &*level);
1510215801 }
1510315802 {
1510415803 const struct StreamOut *_20 = &(*streams).out;
@@ -15139,7 +15838,7 @@
1513915838 }
1514015839 {
1514115840 const struct StreamOut *_23 = &(*streams).out;
15142- Indent$(0 /* _22 */, &*_23, &*level);
15841+ Indent(0 /* _22 */, &*_23, &*level);
1514315842 }
1514415843 {
1514515844 const struct StreamOut *_24 = &(*streams).out;
@@ -15150,7 +15849,7 @@
1515015849 }
1515115850 {
1515215851 const struct StreamOut *_25 = &(*streams).out;
15153- Indent$(0 /* _24 */, &*_25, &*level);
15852+ Indent(0 /* _24 */, &*_25, &*level);
1515415853 }
1515515854 {
1515615855 const struct StreamOut *_26 = &(*streams).out;
@@ -15170,12 +15869,12 @@
1517015869 _27 = *level + _28;
1517115870 _IGNORE_(_28);
1517215871 }
15173- ParseExpr$(0 /* _26 */, &*streams, &*txtpos, &*state, &_27, &*scope, &*tmpnr, &*store, &_id, &*partial, &*action, &*self);
15872+ ParseExpr$(0 /* _26 */, &*streams, &*txtpos, &*state, &_27, &*scope, &*tmpnr, &*store, &_id, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1517415873 _IGNORE_(_27);
1517515874 }
1517615875 {
1517715876 const struct StreamOut *_28 = &(*streams).out;
15178- Indent$(0 /* _27 */, &*_28, &*level);
15877+ Indent(0 /* _27 */, &*_28, &*level);
1517915878 }
1518015879 {
1518115880 const struct StreamOut *_29 = &(*streams).out;
@@ -15251,13 +15950,13 @@
1525115950 // Fail$(streams.err, txtpos);
1525215951 // };
1525315952 //
15254-// Indent$(streams.out, level); PutStr(streams.out, "do\n");
15255-// Indent$(streams.out, level); PutStr(streams.out, "{\n");
15953+// Indent(streams.out, level); PutStr(streams.out, "do\n");
15954+// Indent(streams.out, level); PutStr(streams.out, "{\n");
1525615955 // id = ParseId$(streams, txtpos, level);
1525715956 // ParseExpr$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, store, id, partial, action, self);
1525815957 //// //Print("fprintf(stderr, \"%d\\n\", (int)"); PutStr(out, counter.id); PutStr(out, ");\n");
15259-// Indent$(streams.out, level); PutStr(streams.out, "}\n");
15260-// Indent$(streams.out, level); PutStr(streams.out, "while("); PutStr(streams.out, counter.id); PutStr(streams.out, "--);\n");
15958+// Indent(streams.out, level); PutStr(streams.out, "}\n");
15959+// Indent(streams.out, level); PutStr(streams.out, "while("); PutStr(streams.out, counter.id); PutStr(streams.out, "--);\n");
1526115960 //}
1526215961 //else
1526315962 bool _6;
@@ -15272,209 +15971,228 @@
1527215971 {
1527315972 bool _8; memset(&_8, 0, sizeof(bool));
1527415973 _8 = 1;
15275- EmitSwitch$(0 /* _7 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &*id, &*partial, &*action, &*self, &_8);
15974+ EmitSwitch$(0 /* _7 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &*id, &*partial, &*action, &*self, &*reduced_ids, &*verified, &_8);
1527615975 _IGNORE_(_8);
1527715976 }
1527815977 }
1527915978 else
1528015979 {
15281- struct stack/*u64*/ _7; memset(&_7, 0, sizeof(struct stack/*u64*/));
15980+ bool _7;
15981+ {
15982+ struct string _8; memset(&_8, 0, sizeof(struct string));
15983+ init$fromliteral(&_8, "reduce", 6);
15984+ strequ(&_7, &*id, &_8);
15985+ string$dest(&_8);
15986+ }
15987+ if(_7)
15988+ {
1528215989 {
15283- FindPr$(&_7, &*txtpos, &*scope, &*id);
15990+ bool _9; memset(&_9, 0, sizeof(bool));
15991+ _9 = 1;
15992+ EmitReduce$(0 /* _8 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &*id, &*partial, &*action, &*self, &*reduced_ids, &*verified, &_9);
15993+ _IGNORE_(_9);
1528415994 }
15285- if(!(_7).size)
15995+ }
15996+ else
1528615997 {
15287- // function-call
15288- {
15998+ struct stack/*u64*/ _8; memset(&_8, 0, sizeof(struct stack/*u64*/));
1528915999 {
15290- const struct StreamOut *_10 = &(*streams).out;
15291- Indent$(0 /* _9 */, &*_10, &*level);
16000+ FindParOrVar$(&_8, &*txtpos, &*scope, &*id);
1529216001 }
16002+ if(!(_8).size)
16003+ {
16004+ // function-call
1529316005 {
15294- const struct StreamOut *_11 = &(*streams).out;
15295- struct string _12; memset(&_12, 0, sizeof(struct string));
15296- init$fromliteral(&_12, "{\n", 2);
15297- PutStr(0 /* _10 */, &*_11, &_12);
15298- string$dest(&_12);
15299- }
15300- {
15301- uint64_t _12; memset(&_12, 0, sizeof(uint64_t));
1530216006 {
16007+ const struct StreamOut *_11 = &(*streams).out;
16008+ Indent(0 /* _10 */, &*_11, &*level);
16009+ }
16010+ {
16011+ const struct StreamOut *_12 = &(*streams).out;
16012+ struct string _13; memset(&_13, 0, sizeof(struct string));
16013+ init$fromliteral(&_13, "{\n", 2);
16014+ PutStr(0 /* _11 */, &*_12, &_13);
16015+ string$dest(&_13);
16016+ }
16017+ {
1530316018 uint64_t _13; memset(&_13, 0, sizeof(uint64_t));
15304- _13 = 1;
15305- _12 = *level + _13;
16019+ {
16020+ uint64_t _14; memset(&_14, 0, sizeof(uint64_t));
16021+ _14 = 1;
16022+ _13 = *level + _14;
16023+ _IGNORE_(_14);
16024+ }
16025+ ParseCall$(0 /* _12 */, &*streams, &*txtpos, &*state, &_13, &*scope, &*tmpnr, &*store, &*id, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1530616026 _IGNORE_(_13);
1530716027 }
15308- ParseCall$(0 /* _11 */, &*streams, &*txtpos, &*state, &_12, &*scope, &*tmpnr, &*store, &*id, &*partial, &*action, &*self);
15309- _IGNORE_(_12);
16028+ {
16029+ const struct StreamOut *_14 = &(*streams).out;
16030+ Indent(0 /* _13 */, &*_14, &*level);
16031+ }
16032+ {
16033+ const struct StreamOut *_15 = &(*streams).out;
16034+ struct string _16; memset(&_16, 0, sizeof(struct string));
16035+ init$fromliteral(&_16, "}\n", 2);
16036+ PutStr(0 /* _14 */, &*_15, &_16);
16037+ string$dest(&_16);
16038+ }
16039+ // (return-typecheck performed by call)
1531016040 }
15311- {
15312- const struct StreamOut *_13 = &(*streams).out;
15313- Indent$(0 /* _12 */, &*_13, &*level);
15314- }
15315- {
15316- const struct StreamOut *_14 = &(*streams).out;
15317- struct string _15; memset(&_15, 0, sizeof(struct string));
15318- init$fromliteral(&_15, "}\n", 2);
15319- PutStr(0 /* _13 */, &*_14, &_15);
15320- string$dest(&_15);
15321- }
15322- // (return-typecheck performed by call)
1532316041 }
15324- }
15325- else
15326- {
15327- const uint64_t *pos = (_7).data;
16042+ else
1532816043 {
15329- struct stack/*qtypepureid*/ _10; memset(&_10, 0, sizeof(struct stack/*qtypepureid*/));
15330- clone$(&_10, &(*store), sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy);
15331- if(!(_10).size)
16044+ const uint64_t *pos = (_8).data;
1533216045 {
15333- }
15334- else
15335- {
15336- const struct qtypepureid *solidstore = (_10).data;
16046+ struct stack/*qtypepureid*/ _11; memset(&_11, 0, sizeof(struct stack/*qtypepureid*/));
16047+ clone$(&_11, &(*store), sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy);
16048+ if(!(_11).size)
1533716049 {
15338- struct var _current; memset(&_current, 0, sizeof(struct var));
16050+ }
16051+ else
16052+ {
16053+ const struct qtypepureid *solidstore = (_11).data;
1533916054 {
15340- at_get$(&_current, &*scope, &*pos, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3450);
15341- }
15342- struct qtypepure _typ; memset(&_typ, 0, sizeof(struct qtypepure));
15343- qtypepure$copy(&_typ, &(_current).qti.qt);
15344- struct string _par; memset(&_par, 0, sizeof(struct string));
15345- string$copy(&_par, &(_current).qti.id);
15346- bool *_13 = &(_current).used;
15347- *_13 = 1;
15348- // assignment FROM this variable -> mark used
15349- {
15350- at_set$(0 /* _14 */, &*scope, &*pos, &_current, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3454);
15351- }
15352- // store changed (marked used)
15353- bool _16;
15354- {
15355- struct string _17; memset(&_17, 0, sizeof(struct string));
16055+ struct var _current; memset(&_current, 0, sizeof(struct var));
1535616056 {
15357- const struct string *_18 = &(*solidstore).id;
15358- predel$(&_17, &*_18);
16057+ at_get$(&_current, &*scope, &*pos, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3632);
1535916058 }
15360- strequ(&_16, &_17, &*id);
15361- string$dest(&_17);
15362- }
15363- if(_16)
15364- {
16059+ struct qtypepure _typ; memset(&_typ, 0, sizeof(struct qtypepure));
16060+ qtypepure$copy(&_typ, &(_current).qti.qt);
16061+ struct string _par; memset(&_par, 0, sizeof(struct string));
16062+ string$copy(&_par, &(_current).qti.id);
16063+ bool *_14 = &(_current).used;
16064+ *_14 = 1;
16065+ // assignment FROM this variable -> mark used
1536516066 {
15366- const struct StreamOut *_18 = &(*streams).err;
15367- struct string _19; memset(&_19, 0, sizeof(struct string));
15368- init$fromliteral(&_19, "self-assign ", 12);
15369- PutStr(0 /* _17 */, &*_18, &_19);
15370- string$dest(&_19);
16067+ at_set$(0 /* _15 */, &*scope, &*pos, &_current, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3636);
1537116068 }
16069+ // store changed (marked used)
16070+ bool _17;
1537216071 {
15373- const struct StreamOut *_19 = &(*streams).err;
15374- const struct string *_20 = &(*solidstore).id;
15375- PutStr(0 /* _18 */, &*_19, &*_20);
16072+ struct string _18; memset(&_18, 0, sizeof(struct string));
16073+ {
16074+ const struct string *_19 = &(*solidstore).id;
16075+ predel$(&_18, &*_19);
16076+ }
16077+ strequ(&_17, &_18, &*id);
16078+ string$dest(&_18);
1537616079 }
16080+ if(_17)
1537716081 {
15378- const struct StreamOut *_20 = &(*streams).err;
15379- struct string _21; memset(&_21, 0, sizeof(struct string));
15380- init$fromliteral(&_21, " <- ", 4);
15381- PutStr(0 /* _19 */, &*_20, &_21);
15382- string$dest(&_21);
16082+ {
16083+ const struct StreamOut *_19 = &(*streams).err;
16084+ struct string _20; memset(&_20, 0, sizeof(struct string));
16085+ init$fromliteral(&_20, "self-assign ", 12);
16086+ PutStr(0 /* _18 */, &*_19, &_20);
16087+ string$dest(&_20);
16088+ }
16089+ {
16090+ const struct StreamOut *_20 = &(*streams).err;
16091+ const struct string *_21 = &(*solidstore).id;
16092+ PutStr(0 /* _19 */, &*_20, &*_21);
16093+ }
16094+ {
16095+ const struct StreamOut *_21 = &(*streams).err;
16096+ struct string _22; memset(&_22, 0, sizeof(struct string));
16097+ init$fromliteral(&_22, " <- ", 4);
16098+ PutStr(0 /* _20 */, &*_21, &_22);
16099+ string$dest(&_22);
16100+ }
16101+ {
16102+ const struct StreamOut *_22 = &(*streams).err;
16103+ PutStr(0 /* _21 */, &*_22, &*id);
16104+ }
16105+ {
16106+ const struct StreamOut *_23 = &(*streams).err;
16107+ Fail$(0 /* _22 */, &*_23, &*txtpos);
16108+ }
1538316109 }
16110+ struct stack/*string*/ _path; memset(&_path, 0, sizeof(struct stack/*string*/));
16111+ struct type_pure *_18 = &(_typ).type;
1538416112 {
15385- const struct StreamOut *_21 = &(*streams).err;
15386- PutStr(0 /* _20 */, &*_21, &*id);
16113+ struct stack/*structdef*/ *_19 = &(*state).structs;
16114+ struct type_pure *_20 = &(_typ).type;
16115+ ParseStructPath$(&*_18, &*streams, &*txtpos, &*_19, &*level, &*_20, &*id, &_path);
1538716116 }
1538816117 {
16118+ const struct StreamOut *_20 = &(*streams).out;
16119+ Indent(0 /* _19 */, &*_20, &*level);
16120+ }
16121+ {
16122+ const struct StreamOut *_21 = &(*streams).out;
1538916123 const struct StreamOut *_22 = &(*streams).err;
15390- Fail$(0 /* _21 */, &*_22, &*txtpos);
16124+ const struct type_pure *_23 = &(*solidstore).qt.type;
16125+ const struct string *_24 = &(*solidstore).id;
16126+ CopyIn(0 /* _20 */, &*_21, &*_22, &*_23, &*_24, &*txtpos);
1539116127 }
15392- }
15393- struct stack/*string*/ _path; memset(&_path, 0, sizeof(struct stack/*string*/));
15394- struct type_pure *_17 = &(_typ).type;
15395- {
15396- struct stack/*structdef*/ *_18 = &(*state).structs;
15397- struct type_pure *_19 = &(_typ).type;
15398- ParseStructPath$(&*_17, &*streams, &*txtpos, &*_18, &*level, &*_19, &*id, &_path);
15399- }
15400- {
15401- const struct StreamOut *_19 = &(*streams).out;
15402- Indent$(0 /* _18 */, &*_19, &*level);
15403- }
15404- {
15405- const struct StreamOut *_20 = &(*streams).out;
15406- const struct StreamOut *_21 = &(*streams).err;
15407- const struct type_pure *_22 = &(*solidstore).qt.type;
15408- const struct string *_23 = &(*solidstore).id;
15409- CopyIn(0 /* _19 */, &*_20, &*_21, &*_22, &*_23, &*txtpos);
15410- }
15411- {
15412- const struct StreamOut *_21 = &(*streams).out;
15413- const struct string *_22 = &(*solidstore).id;
15414- PutStr(0 /* _20 */, &*_21, &*_22);
15415- }
15416- {
15417- const struct StreamOut *_22 = &(*streams).out;
15418- const struct type_pure *_23 = &(*solidstore).qt.type;
15419- CopyMid(0 /* _21 */, &*_22, &*_23);
15420- }
15421- {
15422- const struct StreamOut *_23 = &(*streams).out;
15423- uint8_t _24; memset(&_24, 0, sizeof(uint8_t));
15424- _24 = 40;
15425- Put(0 /* _22 */, &*_23, &_24);
15426- _IGNORE_(_24);
15427- }
15428- {
15429- const struct StreamOut *_24 = &(*streams).out;
15430- PutStr(0 /* _23 */, &*_24, &_par);
15431- }
15432- {
15433- const struct StreamOut *_25 = &(*streams).out;
15434- uint8_t _26; memset(&_26, 0, sizeof(uint8_t));
15435- _26 = 41;
15436- Put(0 /* _24 */, &*_25, &_26);
15437- _IGNORE_(_26);
15438- }
15439- {
15440- const struct StreamOut *_26 = &(*streams).out;
15441- PrintPath$(0 /* _25 */, &*_26, &_path);
15442- }
15443- {
15444- const struct StreamOut *_27 = &(*streams).out;
15445- const struct StreamOut *_28 = &(*streams).err;
15446- struct stack/*structdef*/ *_29 = &(*state).structs;
15447- const struct type_pure *_30 = &(*solidstore).qt.type;
15448- CopyOut$(0 /* _26 */, &*_27, &*_28, &*txtpos, &*_29, &*_30);
15449- }
15450- {
15451- const struct StreamOut *_28 = &(*streams).out;
15452- struct string _29; memset(&_29, 0, sizeof(struct string));
15453- init$fromliteral(&_29, "\n", 1);
15454- PutStr(0 /* _27 */, &*_28, &_29);
15455- string$dest(&_29);
15456- }
15457- // type-check
15458- {
15459- const struct StreamOut *_29 = &(*streams).err;
15460- struct typepureid _30; memset(&_30, 0, sizeof(struct typepureid));
1546116128 {
15462- struct type_pure *_31 = &(_typ).type;
15463- typepureid(&_30, &*_31, &*id);
16129+ const struct StreamOut *_22 = &(*streams).out;
16130+ const struct string *_23 = &(*solidstore).id;
16131+ PutStr(0 /* _21 */, &*_22, &*_23);
1546416132 }
15465- ChkQTPI$(0 /* _28 */, &*_29, &*txtpos, &*solidstore, &_30);
15466- typepureid$dest(&_30);
16133+ {
16134+ const struct StreamOut *_23 = &(*streams).out;
16135+ const struct type_pure *_24 = &(*solidstore).qt.type;
16136+ CopyMid(0 /* _22 */, &*_23, &*_24);
16137+ }
16138+ {
16139+ const struct StreamOut *_24 = &(*streams).out;
16140+ uint8_t _25; memset(&_25, 0, sizeof(uint8_t));
16141+ _25 = 40;
16142+ Put(0 /* _23 */, &*_24, &_25);
16143+ _IGNORE_(_25);
16144+ }
16145+ {
16146+ const struct StreamOut *_25 = &(*streams).out;
16147+ PutStr(0 /* _24 */, &*_25, &_par);
16148+ }
16149+ {
16150+ const struct StreamOut *_26 = &(*streams).out;
16151+ uint8_t _27; memset(&_27, 0, sizeof(uint8_t));
16152+ _27 = 41;
16153+ Put(0 /* _25 */, &*_26, &_27);
16154+ _IGNORE_(_27);
16155+ }
16156+ {
16157+ const struct StreamOut *_27 = &(*streams).out;
16158+ PrintPath$(0 /* _26 */, &*_27, &_path);
16159+ }
16160+ {
16161+ const struct StreamOut *_28 = &(*streams).out;
16162+ const struct StreamOut *_29 = &(*streams).err;
16163+ struct stack/*structdef*/ *_30 = &(*state).structs;
16164+ const struct type_pure *_31 = &(*solidstore).qt.type;
16165+ CopyOut$(0 /* _27 */, &*_28, &*_29, &*txtpos, &*_30, &*_31);
16166+ }
16167+ {
16168+ const struct StreamOut *_29 = &(*streams).out;
16169+ struct string _30; memset(&_30, 0, sizeof(struct string));
16170+ init$fromliteral(&_30, "\n", 1);
16171+ PutStr(0 /* _28 */, &*_29, &_30);
16172+ string$dest(&_30);
16173+ }
16174+ // type-check
16175+ {
16176+ const struct StreamOut *_30 = &(*streams).err;
16177+ struct typepureid _31; memset(&_31, 0, sizeof(struct typepureid));
16178+ {
16179+ struct type_pure *_32 = &(_typ).type;
16180+ typepureid(&_31, &*_32, &*id);
16181+ }
16182+ ChkQTPI$(0 /* _29 */, &*_30, &*txtpos, &*solidstore, &_31);
16183+ typepureid$dest(&_31);
16184+ }
16185+ free$(&_path, sizeof(struct string), (void (*)(void *))string$dest);
16186+ string$dest(&_par);
16187+ qtypepure$dest(&_typ);
16188+ var$dest(&_current);
1546716189 }
15468- free$(&_path, sizeof(struct string), (void (*)(void *))string$dest);
15469- string$dest(&_par);
15470- qtypepure$dest(&_typ);
15471- var$dest(&_current);
1547216190 }
16191+ free$(&_11, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1547316192 }
15474- free$(&_10, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1547516193 }
16194+ free$(&_8, sizeof(uint64_t), 0/*DEST*/);
1547616195 }
15477- free$(&_7, sizeof(uint64_t), 0/*DEST*/);
1547816196 }
1547916197 }
1548016198 }
@@ -15495,7 +16213,10 @@
1549516213 {
1549616214 ParseId$(&_5, &*streams, &*txtpos, &*level);
1549716215 }
15498- ParseExpr$(0 /* _4 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &_5, &*partial, &*action, &*self);
16216+ bool _6; memset(&_6, 0, sizeof(bool));
16217+ _6 = 0;
16218+ /*unverified*/ ParseExpr$(0 /* _4 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &_5, &*partial, &*action, &*self, &*reduced_ids, &_6);
16219+ _IGNORE_(_6);
1549916220 string$dest(&_5);
1550016221 }
1550116222 {
@@ -15523,7 +16244,10 @@
1552316244 if(_4)
1552416245 {
1552516246 {
15526- ParseBlock$(0 /* _5 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self);
16247+ bool _6; memset(&_6, 0, sizeof(bool));
16248+ _6 = 0;
16249+ /*unverified*/ ParseBlock$(0 /* _5 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self, &*reduced_ids, &_6);
16250+ _IGNORE_(_6);
1552716251 }
1552816252 }
1552916253 else
@@ -15577,7 +16301,7 @@
1557716301 {
1557816302 {
1557916303 const struct StreamOut *_10 = &(*streams).out;
15580- Indent$(0 /* _9 */, &*_10, &*level);
16304+ Indent(0 /* _9 */, &*_10, &*level);
1558116305 }
1558216306 {
1558316307 const struct StreamOut *_11 = &(*streams).out;
@@ -15657,7 +16381,7 @@
1565716381 {
1565816382 {
1565916383 const struct StreamOut *_11 = &(*streams).out;
15660- Indent$(0 /* _10 */, &*_11, &*level);
16384+ Indent(0 /* _10 */, &*_11, &*level);
1566116385 }
1566216386 {
1566316387 const struct StreamOut *_12 = &(*streams).out;
@@ -15738,7 +16462,7 @@
1573816462 {
1573916463 {
1574016464 const struct StreamOut *_12 = &(*streams).out;
15741- Indent$(0 /* _11 */, &*_12, &*level);
16465+ Indent(0 /* _11 */, &*_12, &*level);
1574216466 }
1574316467 {
1574416468 const struct StreamOut *_13 = &(*streams).out;
@@ -15815,7 +16539,7 @@
1581516539 }
1581616540
1581716541 // parse function-body without side-effects
15818-void ParseExpr2$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, const uint64_t *tmpnr_, const struct qtypepureid *store, const bool *partial, const bool *action, const struct string *self)
16542+void ParseExpr2$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, const uint64_t *tmpnr_, const struct qtypepureid *store, const bool *partial, const bool *action, const struct string *self, struct stack/*ReducedId*/ *reduced_ids, const bool *verified)
1581916543 {
1582016544 {
1582116545 uint64_t _tmpnr; memset(&_tmpnr, 0, sizeof(uint64_t));
@@ -15848,9 +16572,9 @@
1584816572 {
1584916573 struct stack/*qtypepureid*/ _4; memset(&_4, 0, sizeof(struct stack/*qtypepureid*/));
1585016574 {
15851- solid(&_4, &*store, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3557);
16575+ solid(&_4, &*store, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3739);
1585216576 }
15853- ParseExpr$(0 /* _3 */, &*streams, &*txtpos, &*state, &*level, &*scope, &_tmpnr, &_4, &_id, &*partial, &*action, &*self);
16577+ ParseExpr$(0 /* _3 */, &*streams, &*txtpos, &*state, &*level, &*scope, &_tmpnr, &_4, &_id, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1585416578 free$(&_4, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1585516579 }
1585616580 string$dest(&_id);
@@ -15859,8 +16583,8 @@
1585916583 }
1586016584
1586116585 // forward-declaration
15862-void ParseLines$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct stack/*qtypepureid*/ *store, const bool *partial, const bool *action, const struct string *self);
15863-void ParseNext$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct stack/*qtypepureid*/ *store, const bool *partial, const bool *action, const struct string *self)
16586+void ParseLines$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct stack/*qtypepureid*/ *store, const bool *partial, const bool *action, const struct string *self, struct stack/*ReducedId*/ *reduced_ids, const bool *verified);
16587+void ParseNext$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct stack/*qtypepureid*/ *store, const bool *partial, const bool *action, const struct string *self, struct stack/*ReducedId*/ *reduced_ids, const bool *verified)
1586416588 {
1586516589 {
1586616590 {
@@ -15942,7 +16666,7 @@
1594216666 if(_7)
1594316667 {
1594416668 {
15945- ParseLines$(0 /* _8 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self);
16669+ ParseLines$(0 /* _8 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1594616670 }
1594716671 }
1594816672 else
@@ -15989,7 +16713,7 @@
1598916713 }
1599016714
1599116715 // Parse something that can be either returned or assigned to, e.g. x.a.b.c = y
15992-void ParseLet$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct stack/*qtypepureid*/ *store, const bool *partial, const bool *action, const struct string *self)
16716+void ParseLet$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct stack/*qtypepureid*/ *store, const bool *partial, const bool *action, const struct string *self, struct stack/*ReducedId*/ *reduced_ids, const bool *verified)
1599316717 {
1599416718 {
1599516719 bool _2;
@@ -16014,13 +16738,13 @@
1601416738 {
1601516739 struct stack/*qtypepureid*/ _5; memset(&_5, 0, sizeof(struct stack/*qtypepureid*/));
1601616740 {
16017- empty(&_5, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3607);
16741+ empty(&_5, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3789);
1601816742 }
16019- ParseExpr$(0 /* _4 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_5, &_id, &*partial, &*action, &*self);
16743+ ParseExpr$(0 /* _4 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_5, &_id, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1602016744 free$(&_5, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1602116745 }
1602216746 {
16023- ParseNext$(0 /* _5 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self);
16747+ ParseNext$(0 /* _5 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1602416748 }
1602516749 // continue
1602616750 string$dest(&_id);
@@ -16112,7 +16836,7 @@
1611216836 {
1611316837 struct var _current; memset(&_current, 0, sizeof(struct var));
1611416838 {
16115- at_get$(&_current, &*scope, &*pos, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3629);
16839+ at_get$(&_current, &*scope, &*pos, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3811);
1611616840 }
1611716841 {
1611816842 const struct StreamOut *_9 = &(*streams).err;
@@ -16259,13 +16983,13 @@
1625916983 {
1626016984 struct stack/*qtypepureid*/ _16; memset(&_16, 0, sizeof(struct stack/*qtypepureid*/));
1626116985 {
16262- solid(&_16, &_mut_st, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3653);
16986+ solid(&_16, &_mut_st, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3835);
1626316987 }
1626416988 struct string _17; memset(&_17, 0, sizeof(struct string));
1626516989 {
1626616990 ParseId$(&_17, &*streams, &*txtpos, &*level);
1626716991 }
16268- ParseExpr$(0 /* _15 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_16, &_17, &*partial, &*action, &*self);
16992+ ParseExpr$(0 /* _15 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_16, &_17, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1626916993 string$dest(&_17);
1627016994 free$(&_16, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1627116995 }
@@ -16277,18 +17001,18 @@
1627717001 {
1627817002 varinit(&_11, &_new);
1627917003 }
16280- push(0 /* _10 */, &*scope, &_11, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3657);
17004+ push(0 /* _10 */, &*scope, &_11, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3839);
1628117005 var$dest(&_11);
1628217006 }
1628317007 // make variable accessible & mark as NOT used yet
1628417008 {
16285- ParseNext$(0 /* _11 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self);
17009+ ParseNext$(0 /* _11 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1628617010 }
1628717011 // continue
1628817012 // ...FREE memory immediately before closing block
1628917013 {
1629017014 const struct StreamOut *_13 = &(*streams).out;
16291- Indent$(0 /* _12 */, &*_13, &*level);
17015+ Indent(0 /* _12 */, &*_13, &*level);
1629217016 }
1629317017 {
1629417018 const struct StreamOut *_14 = &(*streams).out;
@@ -16320,7 +17044,7 @@
1632017044 }
1632117045
1632217046 // parse result
16323-void ParseRes$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct stack/*qtypepureid*/ *store, const bool *partial, const bool *action, const struct string *self)
17047+void ParseRes$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct stack/*qtypepureid*/ *store, const bool *partial, const bool *action, const struct string *self, struct stack/*ReducedId*/ *reduced_ids, const bool *verified)
1632417048 {
1632517049 // no further statements allowed trailing behind result
1632617050 // NOTE: must emit assignment here, before any free, so any dynamic result is copied before pointers become invalid!
@@ -16384,7 +17108,7 @@
1638417108 }
1638517109 struct stack/*u64*/ _6; memset(&_6, 0, sizeof(struct stack/*u64*/));
1638617110 {
16387- FindPr$(&_6, &*txtpos, &*scope, &_id);
17111+ FindParOrVar$(&_6, &*txtpos, &*scope, &_id);
1638817112 }
1638917113 if(!(_6).size)
1639017114 {
@@ -16398,9 +17122,9 @@
1639817122 {
1639917123 struct stack/*qtypepureid*/ _11; memset(&_11, 0, sizeof(struct stack/*qtypepureid*/));
1640017124 {
16401- empty(&_11, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3703);
17125+ empty(&_11, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3885);
1640217126 }
16403- ParseExpr$(0 /* _10 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_11, &_id, &*partial, &*action, &*self);
17127+ ParseExpr$(0 /* _10 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_11, &_id, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1640417128 free$(&_11, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1640517129 }
1640617130 }
@@ -16440,9 +17164,9 @@
1644017164 {
1644117165 struct stack/*qtypepureid*/ _13; memset(&_13, 0, sizeof(struct stack/*qtypepureid*/));
1644217166 {
16443- solid(&_13, &_mut_pv, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3714);
17167+ solid(&_13, &_mut_pv, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3896);
1644417168 }
16445- ParseExpr$(0 /* _12 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_13, &_id, &*partial, &*action, &*self);
17169+ ParseExpr$(0 /* _12 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_13, &_id, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1644617170 free$(&_13, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1644717171 }
1644817172 {
@@ -16453,7 +17177,7 @@
1645317177 }
1645417178 {
1645517179 const struct StreamOut *_15 = &(*streams).out;
16456- Indent$(0 /* _14 */, &*_15, &*level);
17180+ Indent(0 /* _14 */, &*_15, &*level);
1645717181 }
1645817182 {
1645917183 const struct StreamOut *_16 = &(*streams).out;
@@ -16493,7 +17217,7 @@
1649317217 }
1649417218 {
1649517219 const struct StreamOut *_22 = &(*streams).out;
16496- Indent$(0 /* _21 */, &*_22, &*level);
17220+ Indent(0 /* _21 */, &*_22, &*level);
1649717221 }
1649817222 {
1649917223 const struct StreamOut *_23 = &(*streams).out;
@@ -16532,13 +17256,13 @@
1653217256 {
1653317257 struct var _provide; memset(&_provide, 0, sizeof(struct var));
1653417258 {
16535- at_get$(&_provide, &*scope, &*pos, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3727);
17259+ at_get$(&_provide, &*scope, &*pos, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3909);
1653617260 }
1653717261 bool *_9 = &(_provide).used;
1653817262 *_9 = 1;
1653917263 // mark argument used
1654017264 {
16541- at_set$(0 /* _10 */, &*scope, &*pos, &_provide, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3729);
17265+ at_set$(0 /* _10 */, &*scope, &*pos, &_provide, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3911);
1654217266 }
1654317267 // store changed (marked used)
1654417268 {
@@ -16591,7 +17315,7 @@
1659117315 }
1659217316 {
1659317317 const struct StreamOut *_19 = &(*streams).out;
16594- Indent$(0 /* _18 */, &*_19, &*level);
17318+ Indent(0 /* _18 */, &*_19, &*level);
1659517319 }
1659617320 {
1659717321 const struct StreamOut *_20 = &(*streams).out;
@@ -16668,7 +17392,7 @@
1666817392 }
1666917393 }
1667017394
16671-void ParseFor$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const bool *partial, const bool *action, const struct string *self, const struct string *id)
17395+void ParseFor$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const bool *partial, const bool *action, const struct string *self, struct stack/*ReducedId*/ *reduced_ids, const bool *verified, const struct string *id)
1667217396 {
1667317397 {
1667417398 struct type_pure _argtype; memset(&_argtype, 0, sizeof(struct type_pure));
@@ -16826,7 +17550,7 @@
1682617550 }
1682717551 struct stack/*u64*/ _11; memset(&_11, 0, sizeof(struct stack/*u64*/));
1682817552 {
16829- FindPr$(&_11, &*txtpos, &*scope, &_var);
17553+ FindParOrVar$(&_11, &*txtpos, &*scope, &_var);
1683017554 }
1683117555 if(!(_11).size)
1683217556 {
@@ -16854,7 +17578,7 @@
1685417578 {
1685517579 struct var _provide; memset(&_provide, 0, sizeof(struct var));
1685617580 {
16857- at_get$(&_provide, &*scope, &*pos, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3814);
17581+ at_get$(&_provide, &*scope, &*pos, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3996);
1685817582 }
1685917583 struct stack/*string*/ _path; memset(&_path, 0, sizeof(struct stack/*string*/));
1686017584 struct type_pure _type; memset(&_type, 0, sizeof(struct type_pure));
@@ -16954,7 +17678,7 @@
1695417678 varinit(&_19, &_20);
1695517679 qtypepureid$dest(&_20);
1695617680 }
16957- push(0 /* _18 */, &*scope, &_19, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3829);
17681+ push(0 /* _18 */, &*scope, &_19, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 4011);
1695817682 var$dest(&_19);
1695917683 }
1696017684 }
@@ -16970,7 +17694,7 @@
1697017694 }
1697117695 {
1697217696 const struct StreamOut *_20 = &(*streams).out;
16973- Indent$(0 /* _19 */, &*_20, &*level);
17697+ Indent(0 /* _19 */, &*_20, &*level);
1697417698 }
1697517699 {
1697617700 const struct StreamOut *_21 = &(*streams).out;
@@ -17058,7 +17782,7 @@
1705817782 }
1705917783 {
1706017784 const struct StreamOut *_36 = &(*streams).out;
17061- Indent$(0 /* _35 */, &*_36, &*level);
17785+ Indent(0 /* _35 */, &*_36, &*level);
1706217786 }
1706317787 {
1706417788 const struct StreamOut *_37 = &(*streams).out;
@@ -17076,7 +17800,7 @@
1707617800 _39 = _40 + *level;
1707717801 _IGNORE_(_40);
1707817802 }
17079- Indent$(0 /* _37 */, &*_38, &_39);
17803+ Indent(0 /* _37 */, &*_38, &_39);
1708017804 _IGNORE_(_39);
1708117805 }
1708217806 {
@@ -17118,15 +17842,15 @@
1711817842 }
1711917843 struct stack/*qtypepureid*/ _45; memset(&_45, 0, sizeof(struct stack/*qtypepureid*/));
1712017844 {
17121- empty(&_45, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3852);
17845+ empty(&_45, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 4034);
1712217846 }
17123- ParseBlockRaw$(0 /* _43 */, &*streams, &*txtpos, &*state, &_44, &*scope, &*tmpnr, &_45, &*partial, &*action, &*self);
17847+ ParseBlockRaw$(0 /* _43 */, &*streams, &*txtpos, &*state, &_44, &*scope, &*tmpnr, &_45, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1712417848 free$(&_45, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1712517849 _IGNORE_(_44);
1712617850 }
1712717851 {
1712817852 const struct StreamOut *_45 = &(*streams).out;
17129- Indent$(0 /* _44 */, &*_45, &*level);
17853+ Indent(0 /* _44 */, &*_45, &*level);
1713017854 }
1713117855 {
1713217856 const struct StreamOut *_46 = &(*streams).out;
@@ -17192,13 +17916,13 @@
1719217916 varinit(&_12, &_13);
1719317917 qtypepureid$dest(&_13);
1719417918 }
17195- push(0 /* _11 */, &*scope, &_12, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3863);
17919+ push(0 /* _11 */, &*scope, &_12, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 4045);
1719617920 var$dest(&_12);
1719717921 }
1719817922 }
1719917923 {
1720017924 const struct StreamOut *_12 = &(*streams).out;
17201- Indent$(0 /* _11 */, &*_12, &*level);
17925+ Indent(0 /* _11 */, &*_12, &*level);
1720217926 }
1720317927 {
1720417928 const struct StreamOut *_13 = &(*streams).out;
@@ -17214,19 +17938,19 @@
1721417938 {
1721517939 struct stack/*qtypepureid*/ _15; memset(&_15, 0, sizeof(struct stack/*qtypepureid*/));
1721617940 {
17217- solid(&_15, &_mut_elem, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3866);
17941+ solid(&_15, &_mut_elem, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 4048);
1721817942 }
1721917943 struct string _16; memset(&_16, 0, sizeof(struct string));
1722017944 {
1722117945 ParseId$(&_16, &*streams, &*txtpos, &*level);
1722217946 }
17223- ParseExpr$(0 /* _14 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_15, &_16, &*partial, &*action, &*self);
17947+ ParseExpr$(0 /* _14 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_15, &_16, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1722417948 string$dest(&_16);
1722517949 free$(&_15, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1722617950 }
1722717951 {
1722817952 const struct StreamOut *_16 = &(*streams).out;
17229- Indent$(0 /* _15 */, &*_16, &*level);
17953+ Indent(0 /* _15 */, &*_16, &*level);
1723017954 }
1723117955 {
1723217956 const struct StreamOut *_17 = &(*streams).out;
@@ -17250,9 +17974,9 @@
1725017974 {
1725117975 struct stack/*qtypepureid*/ _20; memset(&_20, 0, sizeof(struct stack/*qtypepureid*/));
1725217976 {
17253- empty(&_20, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3868);
17977+ empty(&_20, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 4050);
1725417978 }
17255- ParseBlock$(0 /* _19 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_20, &*partial, &*action, &*self);
17979+ ParseBlock$(0 /* _19 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_20, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1725617980 free$(&_20, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1725717981 }
1725817982 qtypepureid$dest(&_mut_elem);
@@ -17286,13 +18010,13 @@
1728618010 {
1728718011 struct stack/*qtypepureid*/ _10; memset(&_10, 0, sizeof(struct stack/*qtypepureid*/));
1728818012 {
17289- solid(&_10, &_mut_container, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3875);
18013+ solid(&_10, &_mut_container, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 4057);
1729018014 }
1729118015 struct string _11; memset(&_11, 0, sizeof(struct string));
1729218016 {
1729318017 ParseId$(&_11, &*streams, &*txtpos, &*level);
1729418018 }
17295- ParseExpr$(0 /* _9 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_10, &_11, &*partial, &*action, &*self);
18019+ ParseExpr$(0 /* _9 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_10, &_11, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1729618020 string$dest(&_11);
1729718021 free$(&_10, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1729818022 }
@@ -17309,7 +18033,7 @@
1730918033 }
1731018034 {
1731118035 const struct StreamOut *_13 = &(*streams).out;
17312- Indent$(0 /* _12 */, &*_13, &*level);
18036+ Indent(0 /* _12 */, &*_13, &*level);
1731318037 }
1731418038 {
1731518039 const struct StreamOut *_14 = &(*streams).out;
@@ -17390,7 +18114,7 @@
1739018114 }
1739118115 {
1739218116 const struct StreamOut *_26 = &(*streams).out;
17393- Indent$(0 /* _25 */, &*_26, &*level);
18117+ Indent(0 /* _25 */, &*_26, &*level);
1739418118 }
1739518119 {
1739618120 const struct StreamOut *_27 = &(*streams).out;
@@ -17441,7 +18165,7 @@
1744118165 varinit(&_31, &_32);
1744218166 qtypepureid$dest(&_32);
1744318167 }
17444- push(0 /* _30 */, &*scope, &_31, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3891);
18168+ push(0 /* _30 */, &*scope, &_31, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 4073);
1744518169 var$dest(&_31);
1744618170 }
1744718171 {
@@ -17453,7 +18177,7 @@
1745318177 _33 = _34 + *level;
1745418178 _IGNORE_(_34);
1745518179 }
17456- Indent$(0 /* _31 */, &*_32, &_33);
18180+ Indent(0 /* _31 */, &*_32, &_33);
1745718181 _IGNORE_(_33);
1745818182 }
1745918183 {
@@ -17599,15 +18323,15 @@
1759918323 }
1760018324 struct stack/*qtypepureid*/ _47; memset(&_47, 0, sizeof(struct stack/*qtypepureid*/));
1760118325 {
17602- empty(&_47, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3912);
18326+ empty(&_47, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 4094);
1760318327 }
17604- ParseBlockRaw$(0 /* _45 */, &*streams, &*txtpos, &*state, &_46, &*scope, &*tmpnr, &_47, &*partial, &*action, &*self);
18328+ ParseBlockRaw$(0 /* _45 */, &*streams, &*txtpos, &*state, &_46, &*scope, &*tmpnr, &_47, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1760518329 free$(&_47, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1760618330 _IGNORE_(_46);
1760718331 }
1760818332 {
1760918333 const struct StreamOut *_47 = &(*streams).out;
17610- Indent$(0 /* _46 */, &*_47, &*level);
18334+ Indent(0 /* _46 */, &*_47, &*level);
1761118335 }
1761218336 {
1761318337 const struct StreamOut *_48 = &(*streams).out;
@@ -17647,9 +18371,9 @@
1764718371 }
1764818372 struct stack/*qtypepureid*/ _31; memset(&_31, 0, sizeof(struct stack/*qtypepureid*/));
1764918373 {
17650- empty(&_31, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3918);
18374+ empty(&_31, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 4100);
1765118375 }
17652- ParseBlockRaw$(0 /* _29 */, &*streams, &*txtpos, &*state, &_30, &*scope, &*tmpnr, &_31, &*partial, &*action, &*self);
18376+ ParseBlockRaw$(0 /* _29 */, &*streams, &*txtpos, &*state, &_30, &*scope, &*tmpnr, &_31, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1765318377 free$(&_31, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1765418378 _IGNORE_(_30);
1765518379 }
@@ -17662,7 +18386,7 @@
1766218386 }
1766318387 {
1766418388 const struct StreamOut *_31 = &(*streams).out;
17665- Indent$(0 /* _30 */, &*_31, &*level);
18389+ Indent(0 /* _30 */, &*_31, &*level);
1766618390 }
1766718391 {
1766818392 const struct StreamOut *_32 = &(*streams).out;
@@ -17726,7 +18450,7 @@
1772618450 container_type$dest(&_10);
1772718451 {
1772818452 const struct StreamOut *_15 = &(*streams).out;
17729- Indent$(0 /* _14 */, &*_15, &*level);
18453+ Indent(0 /* _14 */, &*_15, &*level);
1773018454 }
1773118455 {
1773218456 const struct StreamOut *_16 = &(*streams).out;
@@ -17769,7 +18493,7 @@
1776918493 }
1777018494 }
1777118495
17772-void ParseStatement$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct stack/*qtypepureid*/ *store, const bool *partial, const bool *action, const struct string *self, const struct string *id)
18496+void ParseStatement$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct stack/*qtypepureid*/ *store, const bool *partial, const bool *action, const struct string *self, struct stack/*ReducedId*/ *reduced_ids, const bool *verified, const struct string *id)
1777318497 {
1777418498 {
1777518499 bool _2;
@@ -17782,7 +18506,7 @@
1778218506 if(_2)
1778318507 {
1778418508 {
17785- ParseLet$(0 /* _3 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self);
18509+ ParseLet$(0 /* _3 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1778618510 }
1778718511 // NOTE: ParseNext$ called from ParseLet$ to take care of matching frees with mallocs.
1778818512 }
@@ -17800,11 +18524,11 @@
1780018524 {
1780118525 struct stack/*qtypepureid*/ _6; memset(&_6, 0, sizeof(struct stack/*qtypepureid*/));
1780218526 {
17803- empty(&_6, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3952);
18527+ empty(&_6, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 4134);
1780418528 }
1780518529 bool _7; memset(&_7, 0, sizeof(bool));
1780618530 _7 = 0;
17807- EmitSwitch$(0 /* _5 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_6, &*id, &*partial, &*action, &*self, &_7);
18531+ EmitSwitch$(0 /* _5 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &_6, &*id, &*partial, &*action, &*self, &*reduced_ids, &*verified, &_7);
1780818532 _IGNORE_(_7);
1780918533 free$(&_6, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1781018534 }
@@ -17814,7 +18538,7 @@
1781418538 bool _5;
1781518539 {
1781618540 struct string _6; memset(&_6, 0, sizeof(struct string));
17817- init$fromliteral(&_6, "for", 3);
18541+ init$fromliteral(&_6, "reduce", 6);
1781818542 strequ(&_5, &*id, &_6);
1781918543 string$dest(&_6);
1782018544 }
@@ -17821,19 +18545,38 @@
1782118545 if(_5)
1782218546 {
1782318547 {
17824- ParseFor$(0 /* _6 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*partial, &*action, &*self, &*id);
18548+ bool _7; memset(&_7, 0, sizeof(bool));
18549+ _7 = 1;
18550+ EmitReduce$(0 /* _6 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &*id, &*partial, &*action, &*self, &*reduced_ids, &*verified, &_7);
18551+ _IGNORE_(_7);
1782518552 }
1782618553 }
1782718554 else
1782818555 {
18556+ bool _6;
1782918557 {
17830- ParseAssign$(0 /* _6 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*partial, &*action, &*self, &*id);
18558+ struct string _7; memset(&_7, 0, sizeof(struct string));
18559+ init$fromliteral(&_7, "for", 3);
18560+ strequ(&_6, &*id, &_7);
18561+ string$dest(&_7);
1783118562 }
18563+ if(_6)
18564+ {
18565+ {
18566+ ParseFor$(0 /* _7 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*partial, &*action, &*self, &*reduced_ids, &*verified, &*id);
18567+ }
18568+ }
18569+ else
18570+ {
18571+ {
18572+ ParseAssign$(0 /* _7 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*partial, &*action, &*self, &*reduced_ids, &*verified, &*id);
18573+ }
18574+ }
1783218575 }
1783318576 }
1783418577 // NOTE: ParseNext$ called NOT from ParseAssign$ since assigned to existing variables must NOT be freed!
1783518578 {
17836- ParseNext$(0 /* _6 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self);
18579+ ParseNext$(0 /* _7 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1783718580 }
1783818581 // continue
1783918582 }
@@ -18286,7 +19029,7 @@
1828619029 }
1828719030
1828819031 // parse lines (statements or result)
18289-void ParseLines$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct stack/*qtypepureid*/ *store, const bool *partial, const bool *action, const struct string *self)
19032+void ParseLines$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, uint64_t *tmpnr, const struct stack/*qtypepureid*/ *store, const bool *partial, const bool *action, const struct string *self, struct stack/*ReducedId*/ *reduced_ids, const bool *verified)
1829019033 {
1829119034 {
1829219035 {
@@ -18306,13 +19049,13 @@
1830619049 if(_3)
1830719050 {
1830819051 {
18309- ParseRes$(0 /* _4 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self);
19052+ ParseRes$(0 /* _4 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1831019053 }
1831119054 }
1831219055 else
1831319056 {
1831419057 {
18315- ParseStatement$(0 /* _4 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self, &_id);
19058+ ParseStatement$(0 /* _4 */, &*streams, &*txtpos, &*state, &*level, &*scope, &*tmpnr, &*store, &*partial, &*action, &*self, &*reduced_ids, &*verified, &_id);
1831619059 }
1831719060 }
1831819061 string$dest(&_id);
@@ -18320,7 +19063,7 @@
1832019063 }
1832119064
1832219065 // parse exposed block, i.e. without surrounding { }
18323-void ParseBlockRaw$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level_, struct stack/*var*/ *scope, const uint64_t *tmpnr_, const struct stack/*qtypepureid*/ *store, const bool *partial, const bool *action, const struct string *self)
19066+void ParseBlockRaw$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level_, struct stack/*var*/ *scope, const uint64_t *tmpnr_, const struct stack/*qtypepureid*/ *store, const bool *partial, const bool *action, const struct string *self, struct stack/*ReducedId*/ *reduced_ids, const bool *verified)
1832419067 {
1832519068 {
1832619069 uint64_t _base; memset(&_base, 0, sizeof(uint64_t));
@@ -18336,7 +19079,7 @@
1833619079 uint64_t _level; memset(&_level, 0, sizeof(uint64_t));
1833719080 _level = (*level_);
1833819081 {
18339- ParseLines$(0 /* _1 */, &*streams, &*txtpos, &*state, &_level, &*scope, &_tmpnr, &*store, &*partial, &*action, &*self);
19082+ ParseLines$(0 /* _1 */, &*streams, &*txtpos, &*state, &_level, &*scope, &_tmpnr, &*store, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1834019083 }
1834119084 // NOTE: used to emit assignment here, but it needs to happen earlier, before any free, so any dynamic result is copied before pointers become invalid!
1834219085 {
@@ -18353,7 +19096,7 @@
1835319096 }
1835419097 }
1835519098
18356-void ParseBlock$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, const uint64_t *tmpnr_, const struct stack/*qtypepureid*/ *store, const bool *partial, const bool *action, const struct string *self)
19099+void ParseBlock$(void *_0, const struct Streams *streams, struct linecol *txtpos, struct state *state, const uint64_t *level, struct stack/*var*/ *scope, const uint64_t *tmpnr_, const struct stack/*qtypepureid*/ *store, const bool *partial, const bool *action, const struct string *self, struct stack/*ReducedId*/ *reduced_ids, const bool *verified)
1835719100 {
1835819101 {
1835919102 {
@@ -18387,7 +19130,7 @@
1838719130 {
1838819131 {
1838919132 const struct StreamOut *_6 = &(*streams).out;
18390- Indent$(0 /* _5 */, &*_6, &*level);
19133+ Indent(0 /* _5 */, &*_6, &*level);
1839119134 }
1839219135 {
1839319136 const struct StreamOut *_7 = &(*streams).out;
@@ -18404,12 +19147,12 @@
1840419147 _8 = *level + _9;
1840519148 _IGNORE_(_9);
1840619149 }
18407- ParseBlockRaw$(0 /* _7 */, &*streams, &*txtpos, &*state, &_8, &*scope, &*tmpnr_, &*store, &*partial, &*action, &*self);
19150+ ParseBlockRaw$(0 /* _7 */, &*streams, &*txtpos, &*state, &_8, &*scope, &*tmpnr_, &*store, &*partial, &*action, &*self, &*reduced_ids, &*verified);
1840819151 _IGNORE_(_8);
1840919152 }
1841019153 {
1841119154 const struct StreamOut *_9 = &(*streams).out;
18412- Indent$(0 /* _8 */, &*_9, &*level);
19155+ Indent(0 /* _8 */, &*_9, &*level);
1841319156 }
1841419157 {
1841519158 const struct StreamOut *_10 = &(*streams).out;
@@ -18494,12 +19237,12 @@
1849419237 {
1849519238 struct typepureid _cur; memset(&_cur, 0, sizeof(struct typepureid));
1849619239 {
18497- at_get$(&_cur, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4158);
19240+ at_get$(&_cur, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4344);
1849819241 }
1849919242 {
1850019243 uint64_t _4; memset(&_4, 0, sizeof(uint64_t));
1850119244 _4 = 1;
18502- Indent$(0 /* _3 */, &*out, &_4);
19245+ Indent(0 /* _3 */, &*out, &_4);
1850319246 _IGNORE_(_4);
1850419247 }
1850519248 {
@@ -18594,7 +19337,7 @@
1859419337 {
1859519338 uint64_t _16; memset(&_16, 0, sizeof(uint64_t));
1859619339 _16 = 1;
18597- Indent$(0 /* _15 */, &*out, &_16);
19340+ Indent(0 /* _15 */, &*out, &_16);
1859819341 _IGNORE_(_16);
1859919342 }
1860019343 {
@@ -18606,7 +19349,7 @@
1860619349 {
1860719350 uint64_t _18; memset(&_18, 0, sizeof(uint64_t));
1860819351 _18 = 2;
18609- Indent$(0 /* _17 */, &*out, &_18);
19352+ Indent(0 /* _17 */, &*out, &_18);
1861019353 _IGNORE_(_18);
1861119354 }
1861219355 {
@@ -18746,7 +19489,7 @@
1874619489 {
1874719490 uint64_t _6; memset(&_6, 0, sizeof(uint64_t));
1874819491 _6 = 1;
18749- Indent$(0 /* _5 */, &*out, &_6);
19492+ Indent(0 /* _5 */, &*out, &_6);
1875019493 _IGNORE_(_6);
1875119494 }
1875219495 {
@@ -18758,12 +19501,12 @@
1875819501 }
1875919502 struct typepureid _cur; memset(&_cur, 0, sizeof(struct typepureid));
1876019503 {
18761- at_get$(&_cur, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4209);
19504+ at_get$(&_cur, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4395);
1876219505 }
1876319506 {
1876419507 uint64_t _6; memset(&_6, 0, sizeof(uint64_t));
1876519508 _6 = 1;
18766- Indent$(0 /* _5 */, &*out, &_6);
19509+ Indent(0 /* _5 */, &*out, &_6);
1876719510 _IGNORE_(_6);
1876819511 }
1876919512 {
@@ -18910,7 +19653,7 @@
1891019653 {
1891119654 uint64_t _10; memset(&_10, 0, sizeof(uint64_t));
1891219655 _10 = 1;
18913- Indent$(0 /* _9 */, &*out, &_10);
19656+ Indent(0 /* _9 */, &*out, &_10);
1891419657 _IGNORE_(_10);
1891519658 }
1891619659 {
@@ -18939,7 +19682,7 @@
1893919682 {
1894019683 uint64_t _15; memset(&_15, 0, sizeof(uint64_t));
1894119684 _15 = 1;
18942- Indent$(0 /* _14 */, &*out, &_15);
19685+ Indent(0 /* _14 */, &*out, &_15);
1894319686 _IGNORE_(_15);
1894419687 }
1894519688 {
@@ -18994,7 +19737,7 @@
1899419737 _IGNORE_(_4);
1899519738 }
1899619739 {
18997- push(0 /* _4 */, &*elems, &_ti, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4254);
19740+ push(0 /* _4 */, &*elems, &_ti, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4440);
1899819741 }
1899919742 {
1900019743 uint64_t _6; memset(&_6, 0, sizeof(uint64_t));
@@ -19029,12 +19772,12 @@
1902919772 {
1903019773 struct typepureid _cur; memset(&_cur, 0, sizeof(struct typepureid));
1903119774 {
19032- at_get$(&_cur, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4266);
19775+ at_get$(&_cur, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4452);
1903319776 }
1903419777 {
1903519778 uint64_t _4; memset(&_4, 0, sizeof(uint64_t));
1903619779 _4 = 1;
19037- Indent$(0 /* _3 */, &*out, &_4);
19780+ Indent(0 /* _3 */, &*out, &_4);
1903819781 _IGNORE_(_4);
1903919782 }
1904019783 {
@@ -19197,12 +19940,12 @@
1919719940 {
1919819941 struct typepureid _cur; memset(&_cur, 0, sizeof(struct typepureid));
1919919942 {
19200- at_get$(&_cur, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4293);
19943+ at_get$(&_cur, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4479);
1920119944 }
1920219945 {
1920319946 uint64_t _4; memset(&_4, 0, sizeof(uint64_t));
1920419947 _4 = 1;
19205- Indent$(0 /* _3 */, &*out, &_4);
19948+ Indent(0 /* _3 */, &*out, &_4);
1920619949 _IGNORE_(_4);
1920719950 }
1920819951 {
@@ -19345,12 +20088,12 @@
1934520088 {
1934620089 struct typepureid _cur; memset(&_cur, 0, sizeof(struct typepureid));
1934720090 {
19348- at_get$(&_cur, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4319);
20091+ at_get$(&_cur, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4505);
1934920092 }
1935020093 {
1935120094 uint64_t _4; memset(&_4, 0, sizeof(uint64_t));
1935220095 _4 = 1;
19353- Indent$(0 /* _3 */, &*out, &_4);
20096+ Indent(0 /* _3 */, &*out, &_4);
1935420097 _IGNORE_(_4);
1935520098 }
1935620099 struct type_pure _4; memset(&_4, 0, sizeof(struct type_pure));
@@ -19525,7 +20268,7 @@
1952520268 {
1952620269 struct typepureid _cur; memset(&_cur, 0, sizeof(struct typepureid));
1952720270 {
19528- at_get$(&_cur, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4344);
20271+ at_get$(&_cur, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4530);
1952920272 }
1953020273 {
1953120274 struct qtype _4; memset(&_4, 0, sizeof(struct qtype));
@@ -19743,11 +20486,11 @@
1974320486 {
1974420487 struct constr _c; memset(&_c, 0, sizeof(struct constr));
1974520488 {
19746- at_get$(&_c, &*constrs, &*idx, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 4382);
20489+ at_get$(&_c, &*constrs, &*idx, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 4568);
1974720490 }
1974820491 {
1974920492 const struct typepureid *_4 = &(_c).ti;
19750- push(0 /* _3 */, &*extracted, &*_4, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4383);
20493+ push(0 /* _3 */, &*extracted, &*_4, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4569);
1975120494 }
1975220495 {
1975320496 uint64_t _5; memset(&_5, 0, sizeof(uint64_t));
@@ -19808,11 +20551,11 @@
1980820551 struct typepureid _elem; memset(&_elem, 0, sizeof(struct typepureid));
1980920552 {
1981020553 const struct stack/*typepureid*/ *_4 = &(_sd).elems;
19811- at_get$(&_elem, &*_4, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4395);
20554+ at_get$(&_elem, &*_4, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4581);
1981220555 }
1981320556 struct constr _constr; memset(&_constr, 0, sizeof(struct constr));
1981420557 {
19815- at_get$(&_constr, &*constrs, &*idx, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 4397);
20558+ at_get$(&_constr, &*constrs, &*idx, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 4583);
1981620559 }
1981720560 bool _5;
1981820561 {
@@ -19997,7 +20740,7 @@
1999720740 {
1999820741 uint64_t _4; memset(&_4, 0, sizeof(uint64_t));
1999920742 _4 = 3;
20000- Indent$(0 /* _3 */, &*out, &_4);
20743+ Indent(0 /* _3 */, &*out, &_4);
2000120744 _IGNORE_(_4);
2000220745 }
2000320746 {
@@ -20018,7 +20761,7 @@
2001820761 {
2001920762 uint64_t _8; memset(&_8, 0, sizeof(uint64_t));
2002020763 _8 = 3;
20021- Indent$(0 /* _7 */, &*out, &_8);
20764+ Indent(0 /* _7 */, &*out, &_8);
2002220765 _IGNORE_(_8);
2002320766 }
2002420767 {
@@ -20029,7 +20772,7 @@
2002920772 }
2003020773 struct typepureid _cur; memset(&_cur, 0, sizeof(struct typepureid));
2003120774 {
20032- at_get$(&_cur, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4423);
20775+ at_get$(&_cur, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4609);
2003320776 }
2003420777 bool _10;
2003520778 {
@@ -20054,7 +20797,7 @@
2005420797 {
2005520798 uint64_t _12; memset(&_12, 0, sizeof(uint64_t));
2005620799 _12 = 4;
20057- Indent$(0 /* _11 */, &*out, &_12);
20800+ Indent(0 /* _11 */, &*out, &_12);
2005820801 _IGNORE_(_12);
2005920802 }
2006020803 {
@@ -20152,7 +20895,7 @@
2015220895 {
2015320896 uint64_t _12; memset(&_12, 0, sizeof(uint64_t));
2015420897 _12 = 4;
20155- Indent$(0 /* _11 */, &*out, &_12);
20898+ Indent(0 /* _11 */, &*out, &_12);
2015620899 _IGNORE_(_12);
2015720900 }
2015820901 {
@@ -20165,7 +20908,7 @@
2016520908 {
2016620909 uint64_t _12; memset(&_12, 0, sizeof(uint64_t));
2016720910 _12 = 4;
20168- Indent$(0 /* _11 */, &*out, &_12);
20911+ Indent(0 /* _11 */, &*out, &_12);
2016920912 _IGNORE_(_12);
2017020913 }
2017120914 {
@@ -20177,7 +20920,7 @@
2017720920 {
2017820921 uint64_t _14; memset(&_14, 0, sizeof(uint64_t));
2017920922 _14 = 3;
20180- Indent$(0 /* _13 */, &*out, &_14);
20923+ Indent(0 /* _13 */, &*out, &_14);
2018120924 _IGNORE_(_14);
2018220925 }
2018320926 {
@@ -20293,7 +21036,7 @@
2029321036 {
2029421037 uint64_t _15; memset(&_15, 0, sizeof(uint64_t));
2029521038 _15 = 1;
20296- Indent$(0 /* _14 */, &*out, &_15);
21039+ Indent(0 /* _14 */, &*out, &_15);
2029721040 _IGNORE_(_15);
2029821041 }
2029921042 {
@@ -20305,7 +21048,7 @@
2030521048 {
2030621049 uint64_t _17; memset(&_17, 0, sizeof(uint64_t));
2030721050 _17 = 1;
20308- Indent$(0 /* _16 */, &*out, &_17);
21051+ Indent(0 /* _16 */, &*out, &_17);
2030921052 _IGNORE_(_17);
2031021053 }
2031121054 {
@@ -20317,7 +21060,7 @@
2031721060 {
2031821061 uint64_t _19; memset(&_19, 0, sizeof(uint64_t));
2031921062 _19 = 2;
20320- Indent$(0 /* _18 */, &*out, &_19);
21063+ Indent(0 /* _18 */, &*out, &_19);
2032121064 _IGNORE_(_19);
2032221065 }
2032321066 {
@@ -20329,7 +21072,7 @@
2032921072 {
2033021073 uint64_t _21; memset(&_21, 0, sizeof(uint64_t));
2033121074 _21 = 1;
20332- Indent$(0 /* _20 */, &*out, &_21);
21075+ Indent(0 /* _20 */, &*out, &_21);
2033321076 _IGNORE_(_21);
2033421077 }
2033521078 {
@@ -20341,7 +21084,7 @@
2034121084 {
2034221085 uint64_t _23; memset(&_23, 0, sizeof(uint64_t));
2034321086 _23 = 1;
20344- Indent$(0 /* _22 */, &*out, &_23);
21087+ Indent(0 /* _22 */, &*out, &_23);
2034521088 _IGNORE_(_23);
2034621089 }
2034721090 {
@@ -20353,7 +21096,7 @@
2035321096 {
2035421097 uint64_t _25; memset(&_25, 0, sizeof(uint64_t));
2035521098 _25 = 1;
20356- Indent$(0 /* _24 */, &*out, &_25);
21099+ Indent(0 /* _24 */, &*out, &_25);
2035721100 _IGNORE_(_25);
2035821101 }
2035921102 {
@@ -20365,7 +21108,7 @@
2036521108 {
2036621109 uint64_t _27; memset(&_27, 0, sizeof(uint64_t));
2036721110 _27 = 2;
20368- Indent$(0 /* _26 */, &*out, &_27);
21111+ Indent(0 /* _26 */, &*out, &_27);
2036921112 _IGNORE_(_27);
2037021113 }
2037121114 {
@@ -20377,7 +21120,7 @@
2037721120 {
2037821121 uint64_t _29; memset(&_29, 0, sizeof(uint64_t));
2037921122 _29 = 1;
20380- Indent$(0 /* _28 */, &*out, &_29);
21123+ Indent(0 /* _28 */, &*out, &_29);
2038121124 _IGNORE_(_29);
2038221125 }
2038321126 {
@@ -20389,7 +21132,7 @@
2038921132 {
2039021133 uint64_t _31; memset(&_31, 0, sizeof(uint64_t));
2039121134 _31 = 1;
20392- Indent$(0 /* _30 */, &*out, &_31);
21135+ Indent(0 /* _30 */, &*out, &_31);
2039321136 _IGNORE_(_31);
2039421137 }
2039521138 {
@@ -20401,7 +21144,7 @@
2040121144 {
2040221145 uint64_t _33; memset(&_33, 0, sizeof(uint64_t));
2040321146 _33 = 1;
20404- Indent$(0 /* _32 */, &*out, &_33);
21147+ Indent(0 /* _32 */, &*out, &_33);
2040521148 _IGNORE_(_33);
2040621149 }
2040721150 {
@@ -20413,7 +21156,7 @@
2041321156 {
2041421157 uint64_t _35; memset(&_35, 0, sizeof(uint64_t));
2041521158 _35 = 2;
20416- Indent$(0 /* _34 */, &*out, &_35);
21159+ Indent(0 /* _34 */, &*out, &_35);
2041721160 _IGNORE_(_35);
2041821161 }
2041921162 {
@@ -20425,7 +21168,7 @@
2042521168 {
2042621169 uint64_t _37; memset(&_37, 0, sizeof(uint64_t));
2042721170 _37 = 2;
20428- Indent$(0 /* _36 */, &*out, &_37);
21171+ Indent(0 /* _36 */, &*out, &_37);
2042921172 _IGNORE_(_37);
2043021173 }
2043121174 {
@@ -20446,7 +21189,7 @@
2044621189 {
2044721190 uint64_t _40; memset(&_40, 0, sizeof(uint64_t));
2044821191 _40 = 3;
20449- Indent$(0 /* _39 */, &*out, &_40);
21192+ Indent(0 /* _39 */, &*out, &_40);
2045021193 _IGNORE_(_40);
2045121194 }
2045221195 {
@@ -20458,7 +21201,7 @@
2045821201 {
2045921202 uint64_t _42; memset(&_42, 0, sizeof(uint64_t));
2046021203 _42 = 2;
20461- Indent$(0 /* _41 */, &*out, &_42);
21204+ Indent(0 /* _41 */, &*out, &_42);
2046221205 _IGNORE_(_42);
2046321206 }
2046421207 {
@@ -20470,7 +21213,7 @@
2047021213 {
2047121214 uint64_t _44; memset(&_44, 0, sizeof(uint64_t));
2047221215 _44 = 1;
20473- Indent$(0 /* _43 */, &*out, &_44);
21216+ Indent(0 /* _43 */, &*out, &_44);
2047421217 _IGNORE_(_44);
2047521218 }
2047621219 {
@@ -20532,11 +21275,11 @@
2053221275 struct typepureid _elem; memset(&_elem, 0, sizeof(struct typepureid));
2053321276 {
2053421277 const struct stack/*typepureid*/ *_4 = &(_sd).elems;
20535- at_get$(&_elem, &*_4, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4498);
21278+ at_get$(&_elem, &*_4, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4684);
2053621279 }
2053721280 struct constr _constr; memset(&_constr, 0, sizeof(struct constr));
2053821281 {
20539- at_get$(&_constr, &*constrs, &*idx, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 4500);
21282+ at_get$(&_constr, &*constrs, &*idx, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 4686);
2054021283 }
2054121284 bool _5;
2054221285 {
@@ -20622,7 +21365,7 @@
2062221365 {
2062321366 uint64_t _14; memset(&_14, 0, sizeof(uint64_t));
2062421367 _14 = 1;
20625- Indent$(0 /* _13 */, &*out, &_14);
21368+ Indent(0 /* _13 */, &*out, &_14);
2062621369 _IGNORE_(_14);
2062721370 }
2062821371 {
@@ -20652,7 +21395,7 @@
2065221395 {
2065321396 uint64_t _19; memset(&_19, 0, sizeof(uint64_t));
2065421397 _19 = 1;
20655- Indent$(0 /* _18 */, &*out, &_19);
21398+ Indent(0 /* _18 */, &*out, &_19);
2065621399 _IGNORE_(_19);
2065721400 }
2065821401 {
@@ -20710,7 +21453,7 @@
2071021453 {
2071121454 uint64_t _4; memset(&_4, 0, sizeof(uint64_t));
2071221455 _4 = 2;
20713- Indent$(0 /* _3 */, &*out, &_4);
21456+ Indent(0 /* _3 */, &*out, &_4);
2071421457 _IGNORE_(_4);
2071521458 }
2071621459 {
@@ -20731,7 +21474,7 @@
2073121474 {
2073221475 uint64_t _8; memset(&_8, 0, sizeof(uint64_t));
2073321476 _8 = 2;
20734- Indent$(0 /* _7 */, &*out, &_8);
21477+ Indent(0 /* _7 */, &*out, &_8);
2073521478 _IGNORE_(_8);
2073621479 }
2073721480 {
@@ -20742,7 +21485,7 @@
2074221485 }
2074321486 struct typepureid _cur; memset(&_cur, 0, sizeof(struct typepureid));
2074421487 {
20745- at_get$(&_cur, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4526);
21488+ at_get$(&_cur, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4712);
2074621489 }
2074721490 bool _10;
2074821491 {
@@ -20767,13 +21510,13 @@
2076721510 {
2076821511 uint64_t _12; memset(&_12, 0, sizeof(uint64_t));
2076921512 _12 = 3;
20770- Indent$(0 /* _11 */, &*out, &_12);
21513+ Indent(0 /* _11 */, &*out, &_12);
2077121514 _IGNORE_(_12);
2077221515 }
2077321516 {
2077421517 uint64_t _13; memset(&_13, 0, sizeof(uint64_t));
2077521518 _13 = 1;
20776- Indent$(0 /* _12 */, &*out, &_13);
21519+ Indent(0 /* _12 */, &*out, &_13);
2077721520 _IGNORE_(_13);
2077821521 }
2077921522 {
@@ -20794,7 +21537,7 @@
2079421537 {
2079521538 uint64_t _17; memset(&_17, 0, sizeof(uint64_t));
2079621539 _17 = 3;
20797- Indent$(0 /* _16 */, &*out, &_17);
21540+ Indent(0 /* _16 */, &*out, &_17);
2079821541 _IGNORE_(_17);
2079921542 }
2080021543 {
@@ -20882,13 +21625,13 @@
2088221625 {
2088321626 uint64_t _12; memset(&_12, 0, sizeof(uint64_t));
2088421627 _12 = 3;
20885- Indent$(0 /* _11 */, &*out, &_12);
21628+ Indent(0 /* _11 */, &*out, &_12);
2088621629 _IGNORE_(_12);
2088721630 }
2088821631 {
2088921632 uint64_t _13; memset(&_13, 0, sizeof(uint64_t));
2089021633 _13 = 1;
20891- Indent$(0 /* _12 */, &*out, &_13);
21634+ Indent(0 /* _12 */, &*out, &_13);
2089221635 _IGNORE_(_13);
2089321636 }
2089421637 {
@@ -20911,7 +21654,7 @@
2091121654 {
2091221655 uint64_t _12; memset(&_12, 0, sizeof(uint64_t));
2091321656 _12 = 3;
20914- Indent$(0 /* _11 */, &*out, &_12);
21657+ Indent(0 /* _11 */, &*out, &_12);
2091521658 _IGNORE_(_12);
2091621659 }
2091721660 {
@@ -20923,7 +21666,7 @@
2092321666 {
2092421667 uint64_t _14; memset(&_14, 0, sizeof(uint64_t));
2092521668 _14 = 2;
20926- Indent$(0 /* _13 */, &*out, &_14);
21669+ Indent(0 /* _13 */, &*out, &_14);
2092721670 _IGNORE_(_14);
2092821671 }
2092921672 {
@@ -21018,7 +21761,7 @@
2101821761 {
2101921762 uint64_t _12; memset(&_12, 0, sizeof(uint64_t));
2102021763 _12 = 1;
21021- Indent$(0 /* _11 */, &*out, &_12);
21764+ Indent(0 /* _11 */, &*out, &_12);
2102221765 _IGNORE_(_12);
2102321766 }
2102421767 {
@@ -21030,7 +21773,7 @@
2103021773 {
2103121774 uint64_t _14; memset(&_14, 0, sizeof(uint64_t));
2103221775 _14 = 1;
21033- Indent$(0 /* _13 */, &*out, &_14);
21776+ Indent(0 /* _13 */, &*out, &_14);
2103421777 _IGNORE_(_14);
2103521778 }
2103621779 {
@@ -21051,7 +21794,7 @@
2105121794 {
2105221795 uint64_t _17; memset(&_17, 0, sizeof(uint64_t));
2105321796 _17 = 2;
21054- Indent$(0 /* _16 */, &*out, &_17);
21797+ Indent(0 /* _16 */, &*out, &_17);
2105521798 _IGNORE_(_17);
2105621799 }
2105721800 {
@@ -21063,7 +21806,7 @@
2106321806 {
2106421807 uint64_t _19; memset(&_19, 0, sizeof(uint64_t));
2106521808 _19 = 1;
21066- Indent$(0 /* _18 */, &*out, &_19);
21809+ Indent(0 /* _18 */, &*out, &_19);
2106721810 _IGNORE_(_19);
2106821811 }
2106921812 {
@@ -21098,12 +21841,12 @@
2109821841 {
2109921842 struct typepureid _cur; memset(&_cur, 0, sizeof(struct typepureid));
2110021843 {
21101- at_get$(&_cur, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4587);
21844+ at_get$(&_cur, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4773);
2110221845 }
2110321846 {
2110421847 uint64_t _4; memset(&_4, 0, sizeof(uint64_t));
2110521848 _4 = 2;
21106- Indent$(0 /* _3 */, &*out, &_4);
21849+ Indent(0 /* _3 */, &*out, &_4);
2110721850 _IGNORE_(_4);
2110821851 }
2110921852 {
@@ -21252,7 +21995,7 @@
2125221995 {
2125321996 uint64_t _13; memset(&_13, 0, sizeof(uint64_t));
2125421997 _13 = 1;
21255- Indent$(0 /* _12 */, &*out, &_13);
21998+ Indent(0 /* _12 */, &*out, &_13);
2125621999 _IGNORE_(_13);
2125722000 }
2125822001 {
@@ -21275,7 +22018,7 @@
2127522018 {
2127622019 uint64_t _17; memset(&_17, 0, sizeof(uint64_t));
2127722020 _17 = 1;
21278- Indent$(0 /* _16 */, &*out, &_17);
22021+ Indent(0 /* _16 */, &*out, &_17);
2127922022 _IGNORE_(_17);
2128022023 }
2128122024 {
@@ -21287,7 +22030,7 @@
2128722030 {
2128822031 uint64_t _19; memset(&_19, 0, sizeof(uint64_t));
2128922032 _19 = 1;
21290- Indent$(0 /* _18 */, &*out, &_19);
22033+ Indent(0 /* _18 */, &*out, &_19);
2129122034 _IGNORE_(_19);
2129222035 }
2129322036 {
@@ -21299,7 +22042,7 @@
2129922042 {
2130022043 uint64_t _21; memset(&_21, 0, sizeof(uint64_t));
2130122044 _21 = 2;
21302- Indent$(0 /* _20 */, &*out, &_21);
22045+ Indent(0 /* _20 */, &*out, &_21);
2130322046 _IGNORE_(_21);
2130422047 }
2130522048 {
@@ -21325,7 +22068,7 @@
2132522068 {
2132622069 uint64_t _26; memset(&_26, 0, sizeof(uint64_t));
2132722070 _26 = 2;
21328- Indent$(0 /* _25 */, &*out, &_26);
22071+ Indent(0 /* _25 */, &*out, &_26);
2132922072 _IGNORE_(_26);
2133022073 }
2133122074 {
@@ -21347,7 +22090,7 @@
2134722090 {
2134822091 uint64_t _30; memset(&_30, 0, sizeof(uint64_t));
2134922092 _30 = 1;
21350- Indent$(0 /* _29 */, &*out, &_30);
22093+ Indent(0 /* _29 */, &*out, &_30);
2135122094 _IGNORE_(_30);
2135222095 }
2135322096 {
@@ -21359,7 +22102,7 @@
2135922102 {
2136022103 uint64_t _32; memset(&_32, 0, sizeof(uint64_t));
2136122104 _32 = 1;
21362- Indent$(0 /* _31 */, &*out, &_32);
22105+ Indent(0 /* _31 */, &*out, &_32);
2136322106 _IGNORE_(_32);
2136422107 }
2136522108 {
@@ -21371,7 +22114,7 @@
2137122114 {
2137222115 uint64_t _34; memset(&_34, 0, sizeof(uint64_t));
2137322116 _34 = 1;
21374- Indent$(0 /* _33 */, &*out, &_34);
22117+ Indent(0 /* _33 */, &*out, &_34);
2137522118 _IGNORE_(_34);
2137622119 }
2137722120 {
@@ -21383,7 +22126,7 @@
2138322126 {
2138422127 uint64_t _36; memset(&_36, 0, sizeof(uint64_t));
2138522128 _36 = 1;
21386- Indent$(0 /* _35 */, &*out, &_36);
22129+ Indent(0 /* _35 */, &*out, &_36);
2138722130 _IGNORE_(_36);
2138822131 }
2138922132 {
@@ -21402,7 +22145,7 @@
2140222145 {
2140322146 uint64_t _39; memset(&_39, 0, sizeof(uint64_t));
2140422147 _39 = 2;
21405- Indent$(0 /* _38 */, &*out, &_39);
22148+ Indent(0 /* _38 */, &*out, &_39);
2140622149 _IGNORE_(_39);
2140722150 }
2140822151 {
@@ -21414,7 +22157,7 @@
2141422157 {
2141522158 uint64_t _41; memset(&_41, 0, sizeof(uint64_t));
2141622159 _41 = 1;
21417- Indent$(0 /* _40 */, &*out, &_41);
22160+ Indent(0 /* _40 */, &*out, &_41);
2141822161 _IGNORE_(_41);
2141922162 }
2142022163 {
@@ -21426,7 +22169,7 @@
2142622169 {
2142722170 uint64_t _43; memset(&_43, 0, sizeof(uint64_t));
2142822171 _43 = 1;
21429- Indent$(0 /* _42 */, &*out, &_43);
22172+ Indent(0 /* _42 */, &*out, &_43);
2143022173 _IGNORE_(_43);
2143122174 }
2143222175 {
@@ -21466,12 +22209,12 @@
2146622209 {
2146722210 struct typepureid _ti; memset(&_ti, 0, sizeof(struct typepureid));
2146822211 {
21469- at_get$(&_ti, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4626);
22212+ at_get$(&_ti, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4812);
2147022213 }
2147122214 {
2147222215 uint64_t _4; memset(&_4, 0, sizeof(uint64_t));
2147322216 _4 = 2;
21474- Indent$(0 /* _3 */, &*out, &_4);
22217+ Indent(0 /* _3 */, &*out, &_4);
2147522218 _IGNORE_(_4);
2147622219 }
2147722220 {
@@ -21630,7 +22373,7 @@
2163022373 {
2163122374 uint64_t _13; memset(&_13, 0, sizeof(uint64_t));
2163222375 _13 = 1;
21633- Indent$(0 /* _12 */, &*out, &_13);
22376+ Indent(0 /* _12 */, &*out, &_13);
2163422377 _IGNORE_(_13);
2163522378 }
2163622379 {
@@ -21656,7 +22399,7 @@
2165622399 {
2165722400 uint64_t _17; memset(&_17, 0, sizeof(uint64_t));
2165822401 _17 = 1;
21659- Indent$(0 /* _16 */, &*out, &_17);
22402+ Indent(0 /* _16 */, &*out, &_17);
2166022403 _IGNORE_(_17);
2166122404 }
2166222405 {
@@ -21675,7 +22418,7 @@
2167522418 {
2167622419 uint64_t _20; memset(&_20, 0, sizeof(uint64_t));
2167722420 _20 = 2;
21678- Indent$(0 /* _19 */, &*out, &_20);
22421+ Indent(0 /* _19 */, &*out, &_20);
2167922422 _IGNORE_(_20);
2168022423 }
2168122424 {
@@ -21687,7 +22430,7 @@
2168722430 {
2168822431 uint64_t _22; memset(&_22, 0, sizeof(uint64_t));
2168922432 _22 = 1;
21690- Indent$(0 /* _21 */, &*out, &_22);
22433+ Indent(0 /* _21 */, &*out, &_22);
2169122434 _IGNORE_(_22);
2169222435 }
2169322436 {
@@ -21731,7 +22474,7 @@
2173122474 struct typepureid _elem; memset(&_elem, 0, sizeof(struct typepureid));
2173222475 {
2173322476 const struct stack/*typepureid*/ *_3 = &(*sd).elems;
21734- at_get$(&_elem, &*_3, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4662);
22477+ at_get$(&_elem, &*_3, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4848);
2173522478 }
2173622479 {
2173722480 struct string _4; memset(&_4, 0, sizeof(struct string));
@@ -21803,7 +22546,7 @@
2180322546 {
2180422547 uint64_t _13; memset(&_13, 0, sizeof(uint64_t));
2180522548 _13 = 1;
21806- Indent$(0 /* _12 */, &*out, &_13);
22549+ Indent(0 /* _12 */, &*out, &_13);
2180722550 _IGNORE_(_13);
2180822551 }
2180922552 {
@@ -21830,7 +22573,7 @@
2183022573 {
2183122574 uint64_t _18; memset(&_18, 0, sizeof(uint64_t));
2183222575 _18 = 1;
21833- Indent$(0 /* _17 */, &*out, &_18);
22576+ Indent(0 /* _17 */, &*out, &_18);
2183422577 _IGNORE_(_18);
2183522578 }
2183622579 {
@@ -21864,7 +22607,7 @@
2186422607 {
2186522608 uint64_t _24; memset(&_24, 0, sizeof(uint64_t));
2186622609 _24 = 1;
21867- Indent$(0 /* _23 */, &*out, &_24);
22610+ Indent(0 /* _23 */, &*out, &_24);
2186822611 _IGNORE_(_24);
2186922612 }
2187022613 {
@@ -21898,7 +22641,7 @@
2189822641 {
2189922642 uint64_t _30; memset(&_30, 0, sizeof(uint64_t));
2190022643 _30 = 1;
21901- Indent$(0 /* _29 */, &*out, &_30);
22644+ Indent(0 /* _29 */, &*out, &_30);
2190222645 _IGNORE_(_30);
2190322646 }
2190422647 {
@@ -22060,11 +22803,11 @@
2206022803 {
2206122804 struct qtype _qt0; memset(&_qt0, 0, sizeof(struct qtype));
2206222805 {
22063- at_get$(&_qt0, &*decl, &*idx, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 4703);
22806+ at_get$(&_qt0, &*decl, &*idx, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 4889);
2206422807 }
2206522808 struct qtype _qt1; memset(&_qt1, 0, sizeof(struct qtype));
2206622809 {
22067- at_get$(&_qt1, &*def, &*idx, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 4704);
22810+ at_get$(&_qt1, &*def, &*idx, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 4890);
2206822811 }
2206922812 bool _4;
2207022813 {
@@ -22192,10 +22935,10 @@
2219222935 {
2219322936 struct typeid _elem; memset(&_elem, 0, sizeof(struct typeid));
2219422937 {
22195- at_get$(&_elem, &*elems, &*idx, sizeof(struct typeid), (void (*)(void *))typeid$dest, (void (*)(void *, const void *))typeid$copy, 4733);
22938+ at_get$(&_elem, &*elems, &*idx, sizeof(struct typeid), (void (*)(void *))typeid$dest, (void (*)(void *, const void *))typeid$copy, 4919);
2219622939 }
2219722940 {
22198- Indent$(0 /* _3 */, &*out, &*level);
22941+ Indent(0 /* _3 */, &*out, &*level);
2219922942 }
2220022943 bool _5;
2220122944 {
@@ -22270,10 +23013,10 @@
2227023013 {
2227123014 struct typepureid _elem; memset(&_elem, 0, sizeof(struct typepureid));
2227223015 {
22273- at_get$(&_elem, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4755);
23016+ at_get$(&_elem, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4941);
2227423017 }
2227523018 {
22276- Indent$(0 /* _3 */, &*out, &*level);
23019+ Indent(0 /* _3 */, &*out, &*level);
2227723020 }
2227823021 bool _5;
2227923022 {
@@ -22428,7 +23171,7 @@
2242823171 }
2242923172 {
2243023173 struct stack/*structdef*/ *_3 = &(*state).structs;
22431- push(0 /* _2 */, &*_3, &_strdef, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 4792);
23174+ push(0 /* _2 */, &*_3, &_strdef, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 4978);
2243223175 }
2243323176 {
2243423177 struct stack/*structdef*/ *_4 = &(*state).structs;
@@ -22771,7 +23514,7 @@
2277123514 {
2277223515 struct typeid _cur; memset(&_cur, 0, sizeof(struct typeid));
2277323516 {
22774- at_get$(&_cur, &*elems, &*idx, sizeof(struct typeid), (void (*)(void *))typeid$dest, (void (*)(void *, const void *))typeid$copy, 4855);
23517+ at_get$(&_cur, &*elems, &*idx, sizeof(struct typeid), (void (*)(void *))typeid$dest, (void (*)(void *, const void *))typeid$copy, 5041);
2277523518 }
2277623519 {
2277723520 struct string _4; memset(&_4, 0, sizeof(struct string));
@@ -22834,7 +23577,7 @@
2283423577 // mark internal structs used
2283523578 {
2283623579 struct stack/*structdef*/ *_2 = &(*state).structs;
22837- push(0 /* _1 */, &*_2, &_strdef, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 4867);
23580+ push(0 /* _1 */, &*_2, &_strdef, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 5053);
2283823581 }
2283923582 {
2284023583 struct stack/*structdef*/ *_3 = &(*state).structs;
@@ -22911,7 +23654,7 @@
2291123654 {
2291223655 struct typepureid _elem; memset(&_elem, 0, sizeof(struct typepureid));
2291323656 {
22914- at_get$(&_elem, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4879);
23657+ at_get$(&_elem, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 5065);
2291523658 }
2291623659 bool _2; memset(&_2, 0, sizeof(bool));
2291723660 bool _3;
@@ -22954,7 +23697,7 @@
2295423697 {
2295523698 uint64_t _2; memset(&_2, 0, sizeof(uint64_t));
2295623699 _2 = 0;
22957- Indent$(0 /* _1 */, &*out, &_2);
23700+ Indent(0 /* _1 */, &*out, &_2);
2295823701 _IGNORE_(_2);
2295923702 }
2296023703 {
@@ -22975,7 +23718,7 @@
2297523718 {
2297623719 uint64_t _6; memset(&_6, 0, sizeof(uint64_t));
2297723720 _6 = 0;
22978- Indent$(0 /* _5 */, &*out, &_6);
23721+ Indent(0 /* _5 */, &*out, &_6);
2297923722 _IGNORE_(_6);
2298023723 }
2298123724 {
@@ -22987,7 +23730,7 @@
2298723730 {
2298823731 uint64_t _8; memset(&_8, 0, sizeof(uint64_t));
2298923732 _8 = 1;
22990- Indent$(0 /* _7 */, &*out, &_8);
23733+ Indent(0 /* _7 */, &*out, &_8);
2299123734 _IGNORE_(_8);
2299223735 }
2299323736 {
@@ -23024,7 +23767,7 @@
2302423767 {
2302523768 uint64_t _13; memset(&_13, 0, sizeof(uint64_t));
2302623769 _13 = 1;
23027- Indent$(0 /* _12 */, &*out, &_13);
23770+ Indent(0 /* _12 */, &*out, &_13);
2302823771 _IGNORE_(_13);
2302923772 }
2303023773 {
@@ -23036,7 +23779,7 @@
2303623779 {
2303723780 uint64_t _15; memset(&_15, 0, sizeof(uint64_t));
2303823781 _15 = 1;
23039- Indent$(0 /* _14 */, &*out, &_15);
23782+ Indent(0 /* _14 */, &*out, &_15);
2304023783 _IGNORE_(_15);
2304123784 }
2304223785 {
@@ -23057,7 +23800,7 @@
2305723800 {
2305823801 uint64_t _18; memset(&_18, 0, sizeof(uint64_t));
2305923802 _18 = 1;
23060- Indent$(0 /* _17 */, &*out, &_18);
23803+ Indent(0 /* _17 */, &*out, &_18);
2306123804 _IGNORE_(_18);
2306223805 }
2306323806 {
@@ -23070,7 +23813,7 @@
2307023813 {
2307123814 uint64_t _13; memset(&_13, 0, sizeof(uint64_t));
2307223815 _13 = 0;
23073- Indent$(0 /* _12 */, &*out, &_13);
23816+ Indent(0 /* _12 */, &*out, &_13);
2307423817 _IGNORE_(_13);
2307523818 }
2307623819 {
@@ -23082,7 +23825,7 @@
2308223825 {
2308323826 uint64_t _15; memset(&_15, 0, sizeof(uint64_t));
2308423827 _15 = 0;
23085- Indent$(0 /* _14 */, &*out, &_15);
23828+ Indent(0 /* _14 */, &*out, &_15);
2308623829 _IGNORE_(_15);
2308723830 }
2308823831 {
@@ -23121,7 +23864,7 @@
2312123864 }
2312223865 {
2312323866 struct stack/*structdef*/ *_3 = &(*state).structs;
23124- push(0 /* _2 */, &*_3, &_strdef, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 4912);
23867+ push(0 /* _2 */, &*_3, &_strdef, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 5098);
2312523868 }
2312623869 {
2312723870 struct stack/*structdef*/ *_4 = &(*state).structs;
@@ -23192,12 +23935,12 @@
2319223935 {
2319323936 struct typepureid _cur; memset(&_cur, 0, sizeof(struct typepureid));
2319423937 {
23195- at_get$(&_cur, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4926);
23938+ at_get$(&_cur, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 5112);
2319623939 }
2319723940 {
2319823941 uint64_t _4; memset(&_4, 0, sizeof(uint64_t));
2319923942 _4 = 1;
23200- Indent$(0 /* _3 */, &*out, &_4);
23943+ Indent(0 /* _3 */, &*out, &_4);
2320123944 _IGNORE_(_4);
2320223945 }
2320323946 struct type_pure _4; memset(&_4, 0, sizeof(struct type_pure));
@@ -23372,7 +24115,7 @@
2337224115 {
2337324116 struct typepureid _cur; memset(&_cur, 0, sizeof(struct typepureid));
2337424117 {
23375- at_get$(&_cur, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4951);
24118+ at_get$(&_cur, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 5137);
2337624119 }
2337724120 {
2337824121 struct qtype _4; memset(&_4, 0, sizeof(struct qtype));
@@ -23440,7 +24183,7 @@
2344024183 {
2344124184 struct constr _c; memset(&_c, 0, sizeof(struct constr));
2344224185 {
23443- at_get$(&_c, &*constrs, &*idx, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 4965);
24186+ at_get$(&_c, &*constrs, &*idx, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 5151);
2344424187 }
2344524188 bool _4;
2344624189 {
@@ -23523,11 +24266,11 @@
2352324266 struct typepureid _elem; memset(&_elem, 0, sizeof(struct typepureid));
2352424267 {
2352524268 const struct stack/*typepureid*/ *_4 = &(_sd).elems;
23526- at_get$(&_elem, &*_4, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 4982);
24269+ at_get$(&_elem, &*_4, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 5168);
2352724270 }
2352824271 struct constr _constr; memset(&_constr, 0, sizeof(struct constr));
2352924272 {
23530- at_get$(&_constr, &*constrs, &*idx, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 4984);
24273+ at_get$(&_constr, &*constrs, &*idx, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 5170);
2353124274 }
2353224275 struct stack/*qtype*/ _parts; memset(&_parts, 0, sizeof(struct stack/*qtype*/));
2353324276 {
@@ -23579,7 +24322,7 @@
2357924322 {
2358024323 uint64_t _13; memset(&_13, 0, sizeof(uint64_t));
2358124324 _13 = 1;
23582- Indent$(0 /* _12 */, &*out, &_13);
24325+ Indent(0 /* _12 */, &*out, &_13);
2358324326 _IGNORE_(_13);
2358424327 }
2358524328 {
@@ -23606,7 +24349,7 @@
2360624349 {
2360724350 uint64_t _18; memset(&_18, 0, sizeof(uint64_t));
2360824351 _18 = 1;
23609- Indent$(0 /* _17 */, &*out, &_18);
24352+ Indent(0 /* _17 */, &*out, &_18);
2361024353 _IGNORE_(_18);
2361124354 }
2361224355 {
@@ -23643,7 +24386,7 @@
2364324386 {
2364424387 uint64_t _24; memset(&_24, 0, sizeof(uint64_t));
2364524388 _24 = 1;
23646- Indent$(0 /* _23 */, &*out, &_24);
24389+ Indent(0 /* _23 */, &*out, &_24);
2364724390 _IGNORE_(_24);
2364824391 }
2364924392 {
@@ -23665,7 +24408,7 @@
2366524408 {
2366624409 uint64_t _28; memset(&_28, 0, sizeof(uint64_t));
2366724410 _28 = 1;
23668- Indent$(0 /* _27 */, &*out, &_28);
24411+ Indent(0 /* _27 */, &*out, &_28);
2366924412 _IGNORE_(_28);
2367024413 }
2367124414 {
@@ -23687,7 +24430,7 @@
2368724430 {
2368824431 uint64_t _32; memset(&_32, 0, sizeof(uint64_t));
2368924432 _32 = 1;
23690- Indent$(0 /* _31 */, &*out, &_32);
24433+ Indent(0 /* _31 */, &*out, &_32);
2369124434 _IGNORE_(_32);
2369224435 }
2369324436 {
@@ -23726,7 +24469,7 @@
2372624469 {
2372724470 uint64_t _39; memset(&_39, 0, sizeof(uint64_t));
2372824471 _39 = 1;
23729- Indent$(0 /* _38 */, &*out, &_39);
24472+ Indent(0 /* _38 */, &*out, &_39);
2373024473 _IGNORE_(_39);
2373124474 }
2373224475 {
@@ -23748,7 +24491,7 @@
2374824491 {
2374924492 uint64_t _43; memset(&_43, 0, sizeof(uint64_t));
2375024493 _43 = 1;
23751- Indent$(0 /* _42 */, &*out, &_43);
24494+ Indent(0 /* _42 */, &*out, &_43);
2375224495 _IGNORE_(_43);
2375324496 }
2375424497 {
@@ -23760,7 +24503,7 @@
2376024503 {
2376124504 uint64_t _45; memset(&_45, 0, sizeof(uint64_t));
2376224505 _45 = 2;
23763- Indent$(0 /* _44 */, &*out, &_45);
24506+ Indent(0 /* _44 */, &*out, &_45);
2376424507 _IGNORE_(_45);
2376524508 }
2376624509 {
@@ -23782,7 +24525,7 @@
2378224525 {
2378324526 uint64_t _49; memset(&_49, 0, sizeof(uint64_t));
2378424527 _49 = 2;
23785- Indent$(0 /* _48 */, &*out, &_49);
24528+ Indent(0 /* _48 */, &*out, &_49);
2378624529 _IGNORE_(_49);
2378724530 }
2378824531 {
@@ -23794,7 +24537,7 @@
2379424537 {
2379524538 uint64_t _51; memset(&_51, 0, sizeof(uint64_t));
2379624539 _51 = 1;
23797- Indent$(0 /* _50 */, &*out, &_51);
24540+ Indent(0 /* _50 */, &*out, &_51);
2379824541 _IGNORE_(_51);
2379924542 }
2380024543 {
@@ -23806,7 +24549,7 @@
2380624549 {
2380724550 uint64_t _53; memset(&_53, 0, sizeof(uint64_t));
2380824551 _53 = 1;
23809- Indent$(0 /* _52 */, &*out, &_53);
24552+ Indent(0 /* _52 */, &*out, &_53);
2381024553 _IGNORE_(_53);
2381124554 }
2381224555 {
@@ -23958,7 +24701,7 @@
2395824701 }
2395924702 {
2396024703 struct stack/*structdef*/ *_5 = &(*state).structs;
23961- push(0 /* _4 */, &*_5, &_strdef, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 5028);
24704+ push(0 /* _4 */, &*_5, &_strdef, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 5214);
2396224705 }
2396324706 {
2396424707 struct stack/*structdef*/ *_6 = &(*state).structs;
@@ -24162,7 +24905,7 @@
2416224905 _IGNORE_(_4);
2416324906 }
2416424907 {
24165- push(0 /* _4 */, &*elems, &_ti, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 5071);
24908+ push(0 /* _4 */, &*elems, &_ti, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 5257);
2416624909 }
2416724910 {
2416824911 uint64_t _6; memset(&_6, 0, sizeof(uint64_t));
@@ -24372,7 +25115,7 @@
2437225115 }
2437325116 }
2437425117 {
24375- push(0 /* _9 */, &*constrs, &_c, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 5121);
25118+ push(0 /* _9 */, &*constrs, &_c, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 5307);
2437625119 }
2437725120 bool _11;
2437825121 {
@@ -24401,7 +25144,7 @@
2440125144 {
2440225145 struct stack/*constr*/ _1; memset(&_1, 0, sizeof(struct stack/*constr*/));
2440325146 {
24404- pop_opt(&_1, &*constrs, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 5131);
25147+ pop_opt(&_1, &*constrs, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 5317);
2440525148 }
2440625149 if(!(_1).size)
2440725150 {
@@ -25217,7 +25960,7 @@
2521725960 struct def _cur; memset(&_cur, 0, sizeof(struct def));
2521825961 {
2521925962 struct stack/*def*/ *_19 = &(*state).defs;
25220- at_get$(&_cur, &*_19, &*fnidx, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 5319);
25963+ at_get$(&_cur, &*_19, &*fnidx, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 5505);
2522125964 }
2522225965 bool _20;
2522325966 {
@@ -25397,7 +26140,7 @@
2539726140 struct def _cur; memset(&_cur, 0, sizeof(struct def));
2539826141 {
2539926142 struct stack/*def*/ *_20 = &(*state).defs;
25400- at_get$(&_cur, &*_20, &*fnidx, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 5352);
26143+ at_get$(&_cur, &*_20, &*fnidx, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 5538);
2540126144 }
2540226145 {
2540326146 const struct StreamOut *_21 = &(*streams).err;
@@ -25549,7 +26292,7 @@
2554926292 {
2555026293 {
2555126294 const struct StreamOut *_27 = &(*streams).out;
25552- Indent$(0 /* _26 */, &*_27, &_level);
26295+ Indent(0 /* _26 */, &*_27, &_level);
2555326296 }
2555426297 {
2555526298 const struct StreamOut *_28 = &(*streams).out;
@@ -25560,7 +26303,7 @@
2556026303 }
2556126304 {
2556226305 const struct StreamOut *_29 = &(*streams).out;
25563- Indent$(0 /* _28 */, &*_29, &_level);
26306+ Indent(0 /* _28 */, &*_29, &_level);
2556426307 }
2556526308 {
2556626309 const struct StreamOut *_30 = &(*streams).out;
@@ -25571,7 +26314,7 @@
2557126314 }
2557226315 {
2557326316 const struct StreamOut *_31 = &(*streams).out;
25574- Indent$(0 /* _30 */, &*_31, &_level);
26317+ Indent(0 /* _30 */, &*_31, &_level);
2557526318 }
2557626319 {
2557726320 const struct StreamOut *_32 = &(*streams).out;
@@ -25582,7 +26325,7 @@
2558226325 }
2558326326 {
2558426327 const struct StreamOut *_33 = &(*streams).out;
25585- Indent$(0 /* _32 */, &*_33, &_level);
26328+ Indent(0 /* _32 */, &*_33, &_level);
2558626329 }
2558726330 {
2558826331 const struct StreamOut *_34 = &(*streams).out;
@@ -25593,7 +26336,7 @@
2559326336 }
2559426337 {
2559526338 const struct StreamOut *_35 = &(*streams).out;
25596- Indent$(0 /* _34 */, &*_35, &_level);
26339+ Indent(0 /* _34 */, &*_35, &_level);
2559726340 }
2559826341 {
2559926342 const struct StreamOut *_36 = &(*streams).out;
@@ -25628,12 +26371,12 @@
2562826371 varinit(&_37, &_38);
2562926372 qtypepureid$dest(&_38);
2563026373 }
25631- push(0 /* _36 */, &_scope, &_37, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 5385);
26374+ push(0 /* _36 */, &_scope, &_37, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 5571);
2563226375 var$dest(&_37);
2563326376 }
2563426377 {
2563526378 const struct StreamOut *_38 = &(*streams).out;
25636- Indent$(0 /* _37 */, &*_38, &_level);
26379+ Indent(0 /* _37 */, &*_38, &_level);
2563726380 }
2563826381 {
2563926382 const struct StreamOut *_39 = &(*streams).out;
@@ -25693,7 +26436,15 @@
2569326436 }
2569426437 {
2569526438 const struct string *_30 = &(_ti).id;
25696- ParseExpr2$(0 /* _29 */, &*streams, &*txtpos, &*state, &_level, &_scope, &_tmpnr, &_store, &_partial, &_action, &*_30);
26439+ struct stack/*ReducedId*/ _31; memset(&_31, 0, sizeof(struct stack/*ReducedId*/));
26440+ {
26441+ stack(&_31, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest, (void (*)(void *, const void *))ReducedId$copy, 5580);
26442+ }
26443+ bool _32; memset(&_32, 0, sizeof(bool));
26444+ _32 = 0;
26445+ /*verified*/ ParseExpr2$(0 /* _29 */, &*streams, &*txtpos, &*state, &_level, &_scope, &_tmpnr, &_store, &_partial, &_action, &*_30, &_31, &_32);
26446+ _IGNORE_(_32);
26447+ free$(&_31, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest);
2569726448 }
2569826449 {
2569926450 uint8_t _31; memset(&_31, 0, sizeof(uint8_t));
@@ -25734,11 +26485,19 @@
2573426485 qtypepureid(&_30, &_31, &*_32);
2573526486 qtypepure$dest(&_31);
2573626487 }
25737- solid(&_29, &_30, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 5400);
26488+ solid(&_29, &_30, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 5586);
2573826489 qtypepureid$dest(&_30);
2573926490 }
2574026491 const struct string *_30 = &(_ti).id;
25741- ParseBlock$(0 /* _28 */, &*streams, &*txtpos, &*state, &_level, &_scope, &_tmpnr, &_29, &_partial, &_action, &*_30);
26492+ struct stack/*ReducedId*/ _31; memset(&_31, 0, sizeof(struct stack/*ReducedId*/));
26493+ {
26494+ stack(&_31, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest, (void (*)(void *, const void *))ReducedId$copy, 5586);
26495+ }
26496+ bool _32; memset(&_32, 0, sizeof(bool));
26497+ _32 = 0;
26498+ /*verified*/ ParseBlock$(0 /* _28 */, &*streams, &*txtpos, &*state, &_level, &_scope, &_tmpnr, &_29, &_partial, &_action, &*_30, &_31, &_32);
26499+ _IGNORE_(_32);
26500+ free$(&_31, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest);
2574226501 free$(&_29, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
2574326502 }
2574426503 var$dest(&_zero);
@@ -25755,7 +26514,7 @@
2575526514 {
2575626515 {
2575726516 const struct StreamOut *_31 = &(*streams).out;
25758- Indent$(0 /* _30 */, &*_31, &_level);
26517+ Indent(0 /* _30 */, &*_31, &_level);
2575926518 }
2576026519 {
2576126520 const struct StreamOut *_32 = &(*streams).out;
@@ -25766,7 +26525,7 @@
2576626525 }
2576726526 {
2576826527 const struct StreamOut *_33 = &(*streams).out;
25769- Indent$(0 /* _32 */, &*_33, &_level);
26528+ Indent(0 /* _32 */, &*_33, &_level);
2577026529 }
2577126530 {
2577226531 const struct StreamOut *_34 = &(*streams).out;
@@ -25902,7 +26661,7 @@
2590226661 {
2590326662 struct stack/*def*/ _1; memset(&_1, 0, sizeof(struct stack/*def*/));
2590426663 {
25905- pop_opt(&_1, &*defs, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 5437);
26664+ pop_opt(&_1, &*defs, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 5623);
2590626665 }
2590726666 if(!(_1).size)
2590826667 {
@@ -25949,7 +26708,7 @@
2594926708 {
2595026709 struct stack/*structdef*/ _1; memset(&_1, 0, sizeof(struct stack/*structdef*/));
2595126710 {
25952- pop_opt(&_1, &*structs, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 5453);
26711+ pop_opt(&_1, &*structs, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 5639);
2595326712 }
2595426713 if(!(_1).size)
2595526714 {
@@ -26010,11 +26769,11 @@
2601026769 {
2601126770 struct stack/*def*/ _1; memset(&_1, 0, sizeof(struct stack/*def*/));
2601226771 {
26013- stack(&_1, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 5475);
26772+ stack(&_1, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 5661);
2601426773 }
2601526774 struct stack/*structdef*/ _2; memset(&_2, 0, sizeof(struct stack/*structdef*/));
2601626775 {
26017- stack(&_2, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 5475);
26776+ stack(&_2, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 5661);
2601826777 }
2601926778 state(&_state, &_1, &_2);
2602026779 free$(&_2, sizeof(struct structdef), (void (*)(void *))structdef$dest);
@@ -26459,7 +27218,7 @@
2645927218 string$dest(&_5);
2646027219 type_pure$dest(&_4);
2646127220 }
26462- push(0 /* _2 */, &_elems, &_3, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 5890);
27221+ push(0 /* _2 */, &_elems, &_3, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 6076);
2646327222 typepureid$dest(&_3);
2646427223 }
2646527224 {
@@ -26499,13 +27258,13 @@
2649927258 }
2650027259 struct stack/*typepureid*/ _6; memset(&_6, 0, sizeof(struct stack/*typepureid*/));
2650127260 {
26502- stack(&_6, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 5897);
27261+ stack(&_6, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 6083);
2650327262 }
2650427263 constr(&_4, &_5, &_6);
2650527264 free$(&_6, sizeof(struct typepureid), (void (*)(void *))typepureid$dest);
2650627265 typepureid$dest(&_5);
2650727266 }
26508- push(0 /* _3 */, &_constrs, &_4, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 5897);
27267+ push(0 /* _3 */, &_constrs, &_4, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 6083);
2650927268 constr$dest(&_4);
2651027269 }
2651127270 {
@@ -26528,13 +27287,13 @@
2652827287 }
2652927288 struct stack/*typepureid*/ _7; memset(&_7, 0, sizeof(struct stack/*typepureid*/));
2653027289 {
26531- stack(&_7, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 5898);
27290+ stack(&_7, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 6084);
2653227291 }
2653327292 constr(&_5, &_6, &_7);
2653427293 free$(&_7, sizeof(struct typepureid), (void (*)(void *))typepureid$dest);
2653527294 typepureid$dest(&_6);
2653627295 }
26537- push(0 /* _4 */, &_constrs, &_5, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 5898);
27296+ push(0 /* _4 */, &_constrs, &_5, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 6084);
2653827297 constr$dest(&_5);
2653927298 }
2654027299 {
@@ -26557,13 +27316,13 @@
2655727316 }
2655827317 struct stack/*typepureid*/ _8; memset(&_8, 0, sizeof(struct stack/*typepureid*/));
2655927318 {
26560- stack(&_8, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 5899);
27319+ stack(&_8, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 6085);
2656127320 }
2656227321 constr(&_6, &_7, &_8);
2656327322 free$(&_8, sizeof(struct typepureid), (void (*)(void *))typepureid$dest);
2656427323 typepureid$dest(&_7);
2656527324 }
26566- push(0 /* _5 */, &_constrs, &_6, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 5899);
27325+ push(0 /* _5 */, &_constrs, &_6, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 6085);
2656727326 constr$dest(&_6);
2656827327 }
2656927328 {
@@ -29858,7 +30617,7 @@
2985830617 string$dest(&_53);
2985930618 type_pure$dest(&_52);
2986030619 }
29861- push(0 /* _50 */, &_elems, &_51, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 6526);
30620+ push(0 /* _50 */, &_elems, &_51, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 6712);
2986230621 typepureid$dest(&_51);
2986330622 }
2986430623 {
@@ -29877,7 +30636,7 @@
2987730636 string$dest(&_54);
2987830637 type_pure$dest(&_53);
2987930638 }
29880- push(0 /* _51 */, &_elems, &_52, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 6527);
30639+ push(0 /* _51 */, &_elems, &_52, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 6713);
2988130640 typepureid$dest(&_52);
2988230641 }
2988330642 {
@@ -29896,7 +30655,7 @@
2989630655 string$dest(&_55);
2989730656 type_pure$dest(&_54);
2989830657 }
29899- push(0 /* _52 */, &_elems, &_53, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 6528);
30658+ push(0 /* _52 */, &_elems, &_53, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 6714);
2990030659 typepureid$dest(&_53);
2990130660 }
2990230661 {
@@ -29926,7 +30685,7 @@
2992630685 typepureid$dest(&_57);
2992730686 flavour$dest(&_56);
2992830687 }
29929- push(0 /* _53 */, &*_54, &_55, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 6529);
30688+ push(0 /* _53 */, &*_54, &_55, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 6715);
2993030689 structdef$dest(&_55);
2993130690 }
2993230691 free$(&_elems, sizeof(struct typepureid), (void (*)(void *))typepureid$dest);
--- trunk/pragmatic/self_hosting_source.c (revision 35)
+++ trunk/pragmatic/self_hosting_source.c (revision 36)
@@ -151,12 +151,16 @@
151151 }
152152
153153 // emit ws according to indent-level
154-void Indent$(StreamOut out, u64 level)
154+void Indent(StreamOut out, u64 level)
155155 {
156- if gtr<u64>(level, 0) then
156+ reduce level
157+ to:
157158 {
158159 PutStr(out, " ");
159- Indent$(out, sub<u64>(level, 1));
160+ Indent(out, level);
161+ }
162+ term:
163+ {
160164 };
161165 }
162166
@@ -209,7 +213,7 @@
209213 c = GetAdvance(streams.in, txtpos);
210214 if equ<u8>('/', c) then
211215 {
212- Indent$(streams.out, level);
216+ Indent(streams.out, level);
213217 PutStr(streams.out, "//");
214218 Skip2Nl$(streams, txtpos, level);
215219 };
@@ -216,7 +220,7 @@
216220
217221 if equ<u8>('*', c) then
218222 {
219- Indent$(streams.out, level);
223+ Indent(streams.out, level);
220224 PutStr(streams.out, "/*");
221225 Skip2Ct$(streams, txtpos, level);
222226 };
@@ -1425,7 +1429,7 @@
14251429 }
14261430 case solid idx1 :
14271431 {
1428- Indent$(err, 1); EPrTPI(err, at_get$<typepureid>(elems, idx1)); PutStrLn(err, ";");
1432+ Indent(err, 1); EPrTPI(err, at_get$<typepureid>(elems, idx1)); PutStrLn(err, ";");
14291433 EPrintTPIs$(err, elems, idx1);
14301434 };
14311435 }
@@ -1792,10 +1796,15 @@
17921796 }
17931797 };
17941798
1795-// search position of identifier in parameters - return 0 if not found
1796-opt<u64> FindPr$(linecol txtpos, stack<var> scope, string id) =
1797- switch<opt<u64>> findid$(scope, size<var>(scope), preapp(id, '_'))
1798- case empty: findid$(scope, size<var>(scope), preapp(id, '*'))
1799+opt<u64> FindPar$(linecol txtpos, stack<var> scope, string id) =
1800+ findid$(scope, size<var>(scope), preapp(id, '*'));
1801+
1802+opt<u64> FindVar$(linecol txtpos, stack<var> scope, string id) =
1803+ findid$(scope, size<var>(scope), preapp(id, '_'));
1804+
1805+opt<u64> FindParOrVar$(linecol txtpos, stack<var> scope, string id) =
1806+ switch<opt<u64>> FindVar$(txtpos, scope, id)
1807+ case empty: FindPar$(txtpos, scope, id)
17991808 case solid pos: solid<u64>(pos);
18001809
18011810 // assert all parameters in current function have been called
@@ -2184,9 +2193,9 @@
21842193 void EmitLet$(StreamOut out, linecol txtpos, u64 level, mut stack<structdef> structs, qtypepureid store)
21852194 {
21862195 // skip void-declaration but mention in code for debugging
2187- if ispurevoid(store.qt.type) then { Indent$(out, level); PutStr(out, "// "); };
2196+ if ispurevoid(store.qt.type) then { Indent(out, level); PutStr(out, "// "); };
21882197 // Initialize value with zero-bytes so dynamic memory can safely be copied into it.
2189- Indent$(out, level); PrTypePure(out, store.qt.type); PutStr(out, " "); PutStr(out, store.id); PutStr(out, "; memset(&"); PutStr(out, store.id); PutStr(out, ", 0, "); SizeOfPure$(out, structs, store.qt.type); PutStr(out, ");\n");
2198+ Indent(out, level); PrTypePure(out, store.qt.type); PutStr(out, " "); PutStr(out, store.id); PutStr(out, "; memset(&"); PutStr(out, store.id); PutStr(out, ", 0, "); SizeOfPure$(out, structs, store.qt.type); PutStr(out, ");\n");
21902199 }
21912200
21922201 //void AssertResultType$(StreamOut err, linecol txtpos, string fn, type want, type have)
@@ -2324,25 +2333,34 @@
23242333 provide.qti.qt.type = ParseStructPath$(streams, txtpos, structs, level, provide.qti.qt.type, provide.qti.id, path);
23252334 // anonymous / hidden storage-REFERENCE: use temporary name
23262335 let mut qtypepureid ref = qtypepureid(provide.qti.qt, GenPar$(tmpnr));
2327- Indent$(streams.out, level); SkipComment$(streams, txtpos, level); EmitQTPI(streams.out, ref); PutStr(streams.out, " = "); // No ACTUAL copy - just REFERENCE copied!
2336+ Indent(streams.out, level); SkipComment$(streams, txtpos, level); EmitQTPI(streams.out, ref); PutStr(streams.out, " = "); // No ACTUAL copy - just REFERENCE copied!
23282337 PutStr(streams.out, "&("); PutStr(streams.out, provide.qti.id); PutStr(streams.out, ")"); PrintPath$(streams.out, path); PutStr(streams.out, ";\n");
23292338 provide.qti.id = ref.id;
23302339 };
23312340 }
23322341
2342+struct ReducedId
2343+{
2344+ //string orig;
2345+ u64 par_idx;
2346+ string reduced;
2347+}
2348+
2349+//data verification = verified | unverified;
2350+
23332351 // forward-decl
2334-void ParseExpr$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, opt<qtypepureid> store, string id, bool partial, bool action, string self);
2352+void ParseExpr$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, opt<qtypepureid> store, string id, bool partial, bool action, string self, mut stack<ReducedId> reduced_ids, bool verified);
23352353
23362354 // forward-decl
2337-void ParseBlock$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, u64 tmpnr, opt<qtypepureid> store, bool partial, bool action, string self);
2355+void ParseBlock$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, u64 tmpnr, opt<qtypepureid> store, bool partial, bool action, string self, mut stack<ReducedId> reduced_ids, bool verified);
23382356
23392357 // forward-decl
2340-void ParseBlockRaw$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, u64 tmpnr, opt<qtypepureid> store, bool partial, bool action, string self);
2358+void ParseBlockRaw$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, u64 tmpnr, opt<qtypepureid> store, bool partial, bool action, string self, mut stack<ReducedId> reduced_ids, bool verified);
23412359
23422360 // forward-decl
2343-void ParseArg$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, qtypepureid store, qtypepureid par, bool partial, bool action, string self, u64 parnr, def def, mut u64 paridx, u64 base, string callee, opt<type_pure> st, type_pure retype);
2361+void ParseArg$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, qtypepureid store, qtypepureid par, bool partial, bool action, string self, mut stack<ReducedId> reduced_ids, bool verified, u64 parnr, def def, mut u64 paridx, u64 base, string callee, opt<type_pure> st, type_pure retype);
23442362
2345-void ParseCC$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, def def, u64 paridx, qtypepureid store, u64 base, string callee, opt<type_pure> st_, type_pure retype)
2363+void ParseCC$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, def def, u64 paridx, qtypepureid store, bool partial, bool action, string self, stack<ReducedId> reduced_ids, bool verified, u64 base, string callee, opt<type_pure> st_, type_pure retype)
23462364 {
23472365 if lss<u64>(paridx, size<qtype>(def.elems)) then
23482366 {
@@ -2351,6 +2369,16 @@
23512369 Fail$(streams.err, txtpos);
23522370 };
23532371
2372+ if and(and(not(partial), strequ(callee, self)), not(verified)) then
2373+ {
2374+ PutStr(streams.err, "total function ");
2375+ PutStr(streams.err, callee);
2376+ PutStr(streams.err, " calls itself recursivly (hint: reduce parameter or declare partial), ");
2377+ PutStr(streams.err, "reduced parameters: ");
2378+ Print<stack<ReducedId>>(streams.err, reduced_ids);
2379+ Fail$(streams.err, txtpos);
2380+ };
2381+
23542382 if isop1(callee) then
23552383 {
23562384 switch<opt<type_pure>> st_
@@ -2376,7 +2404,7 @@
23762404
23772405 if ispureprim(subtype) then
23782406 {
2379- Indent$(streams.out, level); PutStr(streams.out, store.id); PutStr(streams.out, " = "); PutStr(streams.out, to_op1(callee)); PutStr(streams.out, " "); PutStr(streams.out, arg0.qti.id); PutStr(streams.out, ";\n");
2407+ Indent(streams.out, level); PutStr(streams.out, store.id); PutStr(streams.out, " = "); PutStr(streams.out, to_op1(callee)); PutStr(streams.out, " "); PutStr(streams.out, arg0.qti.id); PutStr(streams.out, ";\n");
23802408 }
23812409 else
23822410 {
@@ -2416,7 +2444,7 @@
24162444
24172445 if ispureprim(subtype) then
24182446 {
2419- Indent$(streams.out, level); PutStr(streams.out, store.id); PutStr(streams.out, " = "); PutStr(streams.out, arg0.qti.id); PutStr(streams.out, " "); PutStr(streams.out, to_op2(callee)); PutStr(streams.out, " "); PutStr(streams.out, arg1.qti.id); PutStr(streams.out, ";\n");
2447+ Indent(streams.out, level); PutStr(streams.out, store.id); PutStr(streams.out, " = "); PutStr(streams.out, arg0.qti.id); PutStr(streams.out, " "); PutStr(streams.out, to_op2(callee)); PutStr(streams.out, " "); PutStr(streams.out, arg1.qti.id); PutStr(streams.out, ";\n");
24202448 }
24212449 else
24222450 {
@@ -2453,7 +2481,7 @@
24532481 };
24542482
24552483 // use all results as arguments for function-call
2456- Indent$(streams.out, level); PutStr(streams.out, callee); PutStr(streams.out, "("); DoCall$(streams.out, streams.err, txtpos, scope, base, store);
2484+ Indent(streams.out, level); PutStr(streams.out, callee); PutStr(streams.out, "("); DoCall$(streams.out, streams.err, txtpos, scope, base, store);
24572485 if
24582486 or
24592487 (
@@ -2651,7 +2679,7 @@
26512679 //ParsePath$(txtpos, level, structs, tmpnr, test);
26522680 }
26532681
2654-void ParseLs$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, qtypepureid store, bool partial, bool action, string self, u64 parnr, def def, u64 paridx, u64 base, string callee, opt<type_pure> st_, type_pure retype)
2682+void ParseLs$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, qtypepureid store, bool partial, bool action, string self, mut stack<ReducedId> reduced_ids, bool verified, u64 parnr, def def, u64 paridx, u64 base, string callee, opt<type_pure> st_, type_pure retype)
26552683 {
26562684 if MatchOptional$(streams, txtpos, level, ',') then
26572685 {
@@ -2668,15 +2696,15 @@
26682696 case empty : PurifySubQType$(streams.err, txtpos,at_get$<qtype>(def.elems, paridx))
26692697 case solid solid : ApplySubQTypePure$(streams.err, txtpos, at_get$<qtype>(def.elems, paridx), solid);
26702698
2671- ParseArg$(streams, txtpos, state, level, scope, tmpnr, store, qtypepureid(partyp, GenId$(parnr, "PAR")/*parid*/), partial, action, self, parnr, def, add<u64>(paridx, 1), base, callee, st_, retype);
2699+ ParseArg$(streams, txtpos, state, level, scope, tmpnr, store, qtypepureid(partyp, GenId$(parnr, "PAR")/*parid*/), partial, action, self, reduced_ids, verified, parnr, def, add<u64>(paridx, 1), base, callee, st_, retype);
26722700 }
26732701 else
26742702 {
2675- ParseCC$(streams, txtpos, state, level, scope, tmpnr, def, paridx, store, base, callee, st_, retype);
2703+ ParseCC$(streams, txtpos, state, level, scope, tmpnr, def, paridx, store, partial, action, self, reduced_ids, verified, base, callee, st_, retype);
26762704 };
26772705 }
26782706
2679-void ParseLS$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, def def, u64 paridx, bool partial, bool action, string self, qtypepureid store, u64 base, string callee, opt<type_pure> st_, type_pure retype)
2707+void ParseLS$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, def def, u64 paridx, bool partial, bool action, string self, mut stack<ReducedId> reduced_ids, bool verified, qtypepureid store, u64 base, string callee, opt<type_pure> st_, type_pure retype)
26802708 {
26812709 let u64 parnr = 1;
26822710 SkipComment$(streams, txtpos, level);
@@ -2694,19 +2722,49 @@
26942722 case empty : PurifySubQType$(streams.err, txtpos,at_get$<qtype>(def.elems, paridx))
26952723 case solid solid : ApplySubQTypePure$(streams.err, txtpos, at_get$<qtype>(def.elems, paridx), solid);
26962724
2697- ParseArg$(streams, txtpos, state, level, scope, tmpnr, store, qtypepureid(partyp, GenId$(parnr, "PAR")/*parid*/), partial, action, self, parnr, def, add<u64>(paridx, 1), base, callee, st_, retype);
2725+ ParseArg$(streams, txtpos, state, level, scope, tmpnr, store, qtypepureid(partyp, GenId$(parnr, "PAR")/*parid*/), partial, action, self, reduced_ids, verified, parnr, def, add<u64>(paridx, 1), base, callee, st_, retype);
26982726 }
26992727 else
27002728 {
2701- ParseCC$(streams, txtpos, state, level, scope, tmpnr, def, paridx, store, base, callee, st_, retype);
2729+ ParseCC$(streams, txtpos, state, level, scope, tmpnr, def, paridx, store, partial, action, self, reduced_ids, verified, base, callee, st_, retype);
27022730 };
27032731 }
27042732
2733+bool verify_reduced$(stack<ReducedId> reduced_ids, u64 idx, ReducedId ri) =
2734+ if lss<u64>(idx, size<ReducedId>(reduced_ids)) then
2735+ if is_equ(cmp<ReducedId>(at_get$<ReducedId>(reduced_ids, idx), ri)) then
2736+ 1
2737+ else
2738+ verify_reduced$(reduced_ids, add<u64>(1, idx), ri)
2739+ else
2740+ 0;
2741+
27052742 // Parse something that can be either returned or assigned to, e.g. x.a.b.c = y
2706-void ParseArg$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, qtypepureid store, qtypepureid par, bool partial, bool action, string self, u64 parnr, def def, mut u64 paridx, u64 base, string callee, opt<type_pure> st_, type_pure retype)
2743+void ParseArg$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, qtypepureid store, qtypepureid par, bool partial, bool action, string self, mut stack<ReducedId> reduced_ids, bool verified_, u64 parnr, def def, mut u64 paridx, u64 base, string callee, opt<type_pure> st_, type_pure retype)
27072744 {
27082745 let string id = ParseId$(streams, txtpos, level);
27092746
2747+ let bool verified =
2748+ if and(not(partial), strequ(callee, self)) then
2749+ {
2750+ let ReducedId ri = ReducedId(sub<u64>(paridx, 1), id);
2751+ //PutStr(streams.err, "TEST ");
2752+ //PutStr(streams.err, "param ");
2753+ //Print<ReducedId>(streams.err, ri);
2754+ //PutStr(streams.err, " reduced-list ");
2755+ //Print<stack<ReducedId>>(streams.err, reduced_ids);
2756+ //if verify_reduced$(reduced_ids, 0, ri) then
2757+ //{
2758+ // PutStr(streams.err, " CHECK");
2759+ //};
2760+ //PutStrLn(streams.err, "");
2761+ result or(verified_, verify_reduced$(reduced_ids, 0, ri))
2762+ }
2763+ else
2764+ (
2765+ verified_
2766+ );
2767+
27102768 // let is only allowed in a statement
27112769 if strequ(id, "let") then
27122770 {
@@ -2720,7 +2778,7 @@
27202778 Fail$(streams.err, txtpos);
27212779 };
27222780
2723- switch<opt<u64>> FindPr$(txtpos, scope, id)
2781+ switch<opt<u64>> FindParOrVar$(txtpos, scope, id)
27242782 case empty:
27252783 {
27262784 // anonymous / hidden storage: use temporary name
@@ -2732,13 +2790,13 @@
27322790
27332791 // No type-check necessary since storage is generated having expected type, and intended to be assigned to!
27342792
2735- ParseExpr$(streams, txtpos, state, level, scope, tmpnr, solid<qtypepureid>(mut_pv), id, partial, action, self);
2793+ ParseExpr$(streams, txtpos, state, level, scope, tmpnr, solid<qtypepureid>(mut_pv), id, partial, action, self, reduced_ids, verified);
27362794
27372795 push<var>(scope, varused(provide));
27382796
2739- ParseLs$(streams, txtpos, state, level, scope, tmpnr, store, partial, action, self, add<u64>(parnr, 1), def, paridx, base, callee, st_, retype);
2797+ ParseLs$(streams, txtpos, state, level, scope, tmpnr, store, partial, action, self, reduced_ids, verified, add<u64>(parnr, 1), def, paridx, base, callee, st_, retype);
27402798
2741- Indent$(streams.out, level); FreeIn(streams.out, provide.qt.type); PutStr(streams.out, provide.id); FreeOut$(streams.out, streams.err, txtpos, state.structs, provide.qt.type); PutStr(streams.out, "\n");
2799+ Indent(streams.out, level); FreeIn(streams.out, provide.qt.type); PutStr(streams.out, provide.id); FreeOut$(streams.out, streams.err, txtpos, state.structs, provide.qt.type); PutStr(streams.out, "\n");
27422800 }
27432801 case solid pos:
27442802 {
@@ -2763,7 +2821,7 @@
27632821 // ...assert parameter provides the type which function wants
27642822 ChkPar$(streams.err, txtpos, par.qt, par.id, provide.qti);
27652823
2766- ParseLs$(streams, txtpos, state, level, scope, tmpnr, store, partial, action, self, add<u64>(parnr, 1), def, paridx, base, callee, st_, retype);
2824+ ParseLs$(streams, txtpos, state, level, scope, tmpnr, store, partial, action, self, reduced_ids, verified, add<u64>(parnr, 1), def, paridx, base, callee, st_, retype);
27672825 };
27682826 }
27692827
@@ -2781,7 +2839,7 @@
27812839 else
27822840 name;
27832841
2784-void ParseCall$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, u64 tmpnr_, opt<qtypepureid> store, string callee, bool partial, bool action, string self)
2842+void ParseCall$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, u64 tmpnr_, opt<qtypepureid> store, string callee, bool partial, bool action, string self, mut stack<ReducedId> reduced_ids, bool verified)
27852843 {
27862844 let u64 base = size<var>(scope);
27872845 // to prove encapsulation:
@@ -2790,13 +2848,17 @@
27902848 // if encapsulation should ever accidentally become broken.
27912849 let mut u64 tmpnr = tmpnr_;
27922850
2793- if and(not(partial), strequ(callee, self)) then
2794- {
2795- PutStr(streams.err, "total function ");
2796- PutStr(streams.err, callee);
2797- PutStr(streams.err, " calls itself recursivly (hint: declare partial)");
2798- Fail$(streams.err, txtpos);
2799- };
2851+ // NOTE: reporting error deferred after all parameters have been parsed to check for reduced.
2852+ //if and(not(partial), strequ(callee, self)) then
2853+ //{
2854+ // if equ<u64>(size<ReducedId>(reduced_ids), 0) then
2855+ // {
2856+ // PutStr(streams.err, "total function ");
2857+ // PutStr(streams.err, callee);
2858+ // PutStr(streams.err, " calls itself recursivly (hint: reduce parameter or declare partial)");
2859+ // Fail$(streams.err, txtpos);
2860+ // };
2861+ //};
28002862
28012863 if and(not(action), idact$(callee)) then
28022864 {
@@ -2859,12 +2921,12 @@
28592921 let qtypepureid newstore = qtypepureid(mutqtp(retype), GenVar$(tmpnr));
28602922
28612923 EmitLet$(streams.out, txtpos, level, state.structs, newstore);
2862- ParseLS$(streams, txtpos, state, level, scope, tmpnr, def, 0/*paridx*/, partial, action, self, newstore, base, SpecializeFunctionPure$(streams, txtpos, def.specialized, callee, st_), st_, retype);
2863- Indent$(streams.out, level); FreeIn(streams.out, newstore.qt.type); PutStr(streams.out, newstore.id); FreeOut$(streams.out, streams.err, txtpos, state.structs, newstore.qt.type); PutStr(streams.out, "\n");
2924+ ParseLS$(streams, txtpos, state, level, scope, tmpnr, def, 0/*paridx*/, partial, action, self, reduced_ids, verified, newstore, base, SpecializeFunctionPure$(streams, txtpos, def.specialized, callee, st_), st_, retype);
2925+ Indent(streams.out, level); FreeIn(streams.out, newstore.qt.type); PutStr(streams.out, newstore.id); FreeOut$(streams.out, streams.err, txtpos, state.structs, newstore.qt.type); PutStr(streams.out, "\n");
28642926 }
28652927 case solid solidstore :
28662928 {
2867- ParseLS$(streams, txtpos, state, level, scope, tmpnr, def, 0/*paridx*/, partial, action, self, solidstore, base, SpecializeFunctionPure$(streams, txtpos, def.specialized, callee, st_), st_, retype);
2929+ ParseLS$(streams, txtpos, state, level, scope, tmpnr, def, 0/*paridx*/, partial, action, self, reduced_ids, verified, solidstore, base, SpecializeFunctionPure$(streams, txtpos, def.specialized, callee, st_), st_, retype);
28682930 };
28692931 };
28702932
@@ -2892,13 +2954,13 @@
28922954 };
28932955 }
28942956
2895-void ParseIfStatement$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, bool partial, bool action, string self, qtypepureid provide)
2957+void ParseIfStatement$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, bool partial, bool action, string self, mut stack<ReducedId> reduced_ids, bool verified, qtypepureid provide)
28962958 {
28972959 // anonymous / hidden storage: use temporary name
28982960 let mut qtypepureid pred = qtypepureid(mutqtp(type_pure_normal2("bool")), GenVar$(tmpnr));
2899- Indent$(streams.out, level); EmitQTPI(streams.out, pred); PutStr(streams.out, ";\n");
2961+ Indent(streams.out, level); EmitQTPI(streams.out, pred); PutStr(streams.out, ";\n");
29002962
2901- ParseExpr$(streams, txtpos, state, level, scope, tmpnr, solid<qtypepureid>(pred), ParseId$(streams, txtpos, level), partial, action, self);
2963+ ParseExpr$(streams, txtpos, state, level, scope, tmpnr, solid<qtypepureid>(pred), ParseId$(streams, txtpos, level), partial, action, self, reduced_ids, verified);
29022964
29032965 if not(strequ(ParseId$(streams, txtpos, level), "then")) then
29042966 {
@@ -2906,21 +2968,21 @@
29062968 Fail$(streams.err, txtpos);
29072969 };
29082970
2909- Indent$(streams.out, level); PutStr(streams.out, "if("); PutStr(streams.out, pred.id); PutStr(streams.out, ")\n");
2910- ParseBlock$(streams, txtpos, state, level, scope, tmpnr, solid<qtypepureid>(provide), partial, action, self);
2971+ Indent(streams.out, level); PutStr(streams.out, "if("); PutStr(streams.out, pred.id); PutStr(streams.out, ")\n");
2972+ ParseBlock$(streams, txtpos, state, level, scope, tmpnr, solid<qtypepureid>(provide), partial, action, self, reduced_ids, verified);
29112973
29122974 let string id = ParseId$(streams, txtpos, level);
29132975
29142976 if strequ(id, "else") then
29152977 {
2916- Indent$(streams.out, level); PutStr(streams.out, "else\n");
2978+ Indent(streams.out, level); PutStr(streams.out, "else\n");
29172979
29182980 if MatchOptional$(streams, txtpos, level, '{') then
29192981 {
29202982 //ParseBlock$(streams, txtpos, state, level, scope, tmpnr, solid<qtypepureid>(provide), partial, action, self);
2921- Indent$(streams.out, level); PutStr(streams.out, "{\n");
2922- ParseBlockRaw$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, solid<qtypepureid>(provide), partial, action, self);
2923- Indent$(streams.out, level); PutStr(streams.out, "}\n");
2983+ Indent(streams.out, level); PutStr(streams.out, "{\n");
2984+ ParseBlockRaw$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, solid<qtypepureid>(provide), partial, action, self, reduced_ids, verified);
2985+ Indent(streams.out, level); PutStr(streams.out, "}\n");
29242986 AssertGet$(streams, txtpos, level, '}');
29252987 }
29262988 else
@@ -2941,16 +3003,16 @@
29413003 Fail$(streams.err, txtpos);
29423004 };
29433005
2944- Indent$(streams.out, level); PutStr(streams.out, "{\n");
2945- ParseIfStatement$(streams, txtpos, state, add<u64>(1, level), scope, tmpnr, partial, action, self, provide);
2946- Indent$(streams.out, level); PutStr(streams.out, "}\n");
3006+ Indent(streams.out, level); PutStr(streams.out, "{\n");
3007+ ParseIfStatement$(streams, txtpos, state, add<u64>(1, level), scope, tmpnr, partial, action, self, reduced_ids, verified, provide);
3008+ Indent(streams.out, level); PutStr(streams.out, "}\n");
29473009 };
29483010 };
29493011 }
29503012
2951-void ParseAssign$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, bool partial, bool action, string self, string id)
3013+void ParseAssign$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, bool partial, bool action, string self, mut stack<ReducedId> reduced_ids, bool verified, string id)
29523014 {
2953- switch<opt<u64>> FindPr$(txtpos, scope, id)
3015+ switch<opt<u64>> FindParOrVar$(txtpos, scope, id)
29543016 case empty:
29553017 {
29563018 // anonymous / hidden storage: use temporary name
@@ -2961,7 +3023,7 @@
29613023 SkipComment$(streams, txtpos, level);
29623024 if equ<u8>('{', Peek(streams.in)) then
29633025 {
2964- ParseBlock$(streams, txtpos, state, level, scope, tmpnr, solid<qtypepureid>(provide), partial, action, self);
3026+ ParseBlock$(streams, txtpos, state, level, scope, tmpnr, solid<qtypepureid>(provide), partial, action, self, reduced_ids, verified);
29653027 }
29663028 else
29673029 {
@@ -2972,14 +3034,14 @@
29723034 }
29733035 else if strequ("if", id) then
29743036 {
2975- ParseIfStatement$(streams, txtpos, state, level, scope, tmpnr, partial, action, self, provide);
3037+ ParseIfStatement$(streams, txtpos, state, level, scope, tmpnr, partial, action, self, reduced_ids, verified, provide);
29763038 }
29773039 else
29783040 {
29793041 // function-call
2980- Indent$(streams.out, level); PutStr(streams.out, "{\n");
2981- ParseCall$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, solid<qtypepureid>(provide), id, partial, action, self);
2982- Indent$(streams.out, level); PutStr(streams.out, "}\n");
3042+ Indent(streams.out, level); PutStr(streams.out, "{\n");
3043+ ParseCall$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, solid<qtypepureid>(provide), id, partial, action, self, reduced_ids, verified);
3044+ Indent(streams.out, level); PutStr(streams.out, "}\n");
29833045 };
29843046 }
29853047 case solid pos:
@@ -2998,7 +3060,7 @@
29983060 {
29993061 if MatchOptional$(streams, txtpos, level, '=') then // NOTE: if stack is not assigned to create empty stack
30003062 {
3001- ParseExpr$(streams, txtpos, state, level, scope, tmpnr, solid<qtypepureid>(provide.qti), ParseId$(streams, txtpos, level), partial, action, self);
3063+ ParseExpr$(streams, txtpos, state, level, scope, tmpnr, solid<qtypepureid>(provide.qti), ParseId$(streams, txtpos, level), partial, action, self, reduced_ids, verified);
30023064 };
30033065
30043066 // NOTE: don't free anything as variable assigned to will already be freed!
@@ -3016,12 +3078,12 @@
30163078 };
30173079
30183080 let string id = ParseId$(streams, txtpos, level);
3019- ParseExpr$(streams, txtpos, state, level, scope, tmpnr, solid<qtypepureid>(provide.qti), id, partial, action, self);
3081+ ParseExpr$(streams, txtpos, state, level, scope, tmpnr, solid<qtypepureid>(provide.qti), id, partial, action, self, reduced_ids, verified);
30203082 };
30213083 };
30223084 }
30233085
3024-void EmitCases$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, opt<qtypepureid> store, bool partial, bool action, string self, string par, bool mutable, stack<typepureid> elems, u64 idx, bool typed)
3086+void EmitCases$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, opt<qtypepureid> store, bool partial, bool action, string self, mut stack<ReducedId> reduced_ids, bool verified, string par, bool mutable, stack<typepureid> elems, u64 idx, bool typed)
30253087 {
30263088 if lss<u64>(idx, size<typepureid>(elems)) then
30273089 {
@@ -3033,8 +3095,8 @@
30333095
30343096 AssertGet$(streams, txtpos, level, ':');
30353097
3036- Indent$(streams.out, level); PutStr(streams.out, "case "); Print<u64>(streams.out, idx); PutStr(streams.out, ": // "); EmitTPI(streams.out, ti); PutStr(streams.out, ":\n");
3037- Indent$(streams.out, level); PutStr(streams.out, "{\n");
3098+ Indent(streams.out, level); PutStr(streams.out, "case "); Print<u64>(streams.out, idx); PutStr(streams.out, ": // "); EmitTPI(streams.out, ti); PutStr(streams.out, ":\n");
3099+ Indent(streams.out, level); PutStr(streams.out, "{\n");
30383100
30393101 switch<opt<string>> id
30403102 case empty :
@@ -3041,16 +3103,16 @@
30413103 {
30423104 if typed then
30433105 {
3044- ParseExpr$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, store, ParseId$(streams, txtpos, level), partial, action, self);
3106+ ParseExpr$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, store, ParseId$(streams, txtpos, level), partial, action, self, reduced_ids, verified);
30453107 }
30463108 else
30473109 {
3048- ParseAssign$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, partial, action, self, ParseId$(streams, txtpos, level));
3110+ ParseAssign$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, partial, action, self, reduced_ids, verified, ParseId$(streams, txtpos, level));
30493111 };
30503112 }
30513113 case solid solidid :
30523114 {
3053- switch<opt<u64>> FindPr$(txtpos, scope, solidid)
3115+ switch<opt<u64>> FindParOrVar$(txtpos, scope, solidid)
30543116 case empty :
30553117 {
30563118 }
@@ -3070,7 +3132,7 @@
30703132 case type_pure_normal _ :
30713133 {
30723134 let qtypepureid qti = qtypepureid(qtypepure(mutable, ti.type), preapp(solidid, '*'));
3073- Indent$(streams.out, add<u64>(level, 1)); EmitQTPI(streams.out, qti); PutStr(streams.out, " = &(("); PutStr(streams.out, par); PutStr(streams.out, ")."); PutStr(streams.out, ti.id); PutStr(streams.out, ");\n");
3135+ Indent(streams.out, add<u64>(level, 1)); EmitQTPI(streams.out, qti); PutStr(streams.out, " = &(("); PutStr(streams.out, par); PutStr(streams.out, ")."); PutStr(streams.out, ti.id); PutStr(streams.out, ");\n");
30743136 push<var>(scope, varinit(qti)); // make element accessible in case...
30753137 }
30763138 case type_pure_wrapped wrapped :
@@ -3079,19 +3141,19 @@
30793141 case container_stack :
30803142 {
30813143 let qtypepureid qti = qtypepureid(qtypepure(mutable, ti.type), preapp(solidid, '*'));
3082- Indent$(streams.out, add<u64>(level, 1)); EmitQTPI(streams.out, qti); PutStr(streams.out, " = &(("); PutStr(streams.out, par); PutStr(streams.out, ")."); PutStr(streams.out, ti.id); PutStr(streams.out, ");\n");
3144+ Indent(streams.out, add<u64>(level, 1)); EmitQTPI(streams.out, qti); PutStr(streams.out, " = &(("); PutStr(streams.out, par); PutStr(streams.out, ")."); PutStr(streams.out, ti.id); PutStr(streams.out, ");\n");
30833145 push<var>(scope, varinit(qti)); // make element accessible in case...
30843146 }
30853147 case container_opt :
30863148 {
30873149 let qtypepureid qti = qtypepureid(qtypepure(mutable, ti.type), preapp(solidid, '*'));
3088- Indent$(streams.out, add<u64>(level, 1)); EmitQTPI(streams.out, qti); PutStr(streams.out, " = &(("); PutStr(streams.out, par); PutStr(streams.out, ")."); PutStr(streams.out, ti.id); PutStr(streams.out, ");\n");
3150+ Indent(streams.out, add<u64>(level, 1)); EmitQTPI(streams.out, qti); PutStr(streams.out, " = &(("); PutStr(streams.out, par); PutStr(streams.out, ")."); PutStr(streams.out, ti.id); PutStr(streams.out, ");\n");
30893151 push<var>(scope, varinit(qti)); // make element accessible in case...
30903152 }
30913153 case container_box :
30923154 {
30933155 let qtypepureid qti = qtypepureid(qtypepure(mutable, type_pure_normal(wrapped.subtype)), preapp(solidid, '*'));
3094- Indent$(streams.out, add<u64>(level, 1)); EmitQTPI(streams.out, qti); PutStr(streams.out, " = (("); PutStr(streams.out, par); PutStr(streams.out, ")."); PutStr(streams.out, ti.id); PutStr(streams.out, ").data;\n");
3156+ Indent(streams.out, add<u64>(level, 1)); EmitQTPI(streams.out, qti); PutStr(streams.out, " = (("); PutStr(streams.out, par); PutStr(streams.out, ")."); PutStr(streams.out, ti.id); PutStr(streams.out, ").data;\n");
30953157 push<var>(scope, varinit(qti)); // make element accessible in case...
30963158 };
30973159 };
@@ -3098,11 +3160,11 @@
30983160
30993161 if typed then
31003162 {
3101- ParseExpr$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, store, ParseId$(streams, txtpos, level), partial, action, self);
3163+ ParseExpr$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, store, ParseId$(streams, txtpos, level), partial, action, self, reduced_ids, verified);
31023164 }
31033165 else
31043166 {
3105- ParseAssign$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, partial, action, self, ParseId$(streams, txtpos, level));
3167+ ParseAssign$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, partial, action, self, reduced_ids, verified, ParseId$(streams, txtpos, level));
31063168 };
31073169
31083170 VerifyUsed$(streams.err, txtpos, scope, base);
@@ -3109,21 +3171,21 @@
31093171 let _ = pop_opt<var>(scope); // ...but not outside
31103172 };
31113173
3112- Indent$(streams.out, add<u64>(level, 1)); PutStr(streams.out, "break;\n");
3113- Indent$(streams.out, level); PutStr(streams.out, "}\n");
3114- EmitCases$(streams, txtpos, state, level, scope, tmpnr, store, partial, action, self, par, mutable, elems, add<u64>(idx, 1), typed);
3174+ Indent(streams.out, add<u64>(level, 1)); PutStr(streams.out, "break;\n");
3175+ Indent(streams.out, level); PutStr(streams.out, "}\n");
3176+ EmitCases$(streams, txtpos, state, level, scope, tmpnr, store, partial, action, self, reduced_ids, verified, par, mutable, elems, add<u64>(idx, 1), typed);
31153177 }
31163178 else
31173179 {
3118- Indent$(streams.out, level); PutStr(streams.out, "default:\n");
3119- Indent$(streams.out, level); PutStr(streams.out, "{\n");
3120- Indent$(streams.out, add<u64>(level, 1)); PutStr(streams.out, "fprintf(stderr, \"INTERNAL ERROR IN SWITCH\");\n");
3121- Indent$(streams.out, add<u64>(level, 1)); PutStr(streams.out, "break;\n");
3122- Indent$(streams.out, level); PutStr(streams.out, "}\n");
3180+ Indent(streams.out, level); PutStr(streams.out, "default:\n");
3181+ Indent(streams.out, level); PutStr(streams.out, "{\n");
3182+ Indent(streams.out, add<u64>(level, 1)); PutStr(streams.out, "fprintf(stderr, \"INTERNAL ERROR IN SWITCH\");\n");
3183+ Indent(streams.out, add<u64>(level, 1)); PutStr(streams.out, "break;\n");
3184+ Indent(streams.out, level); PutStr(streams.out, "}\n");
31233185 };
31243186 }
31253187
3126-void EmitSwitch$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, opt<qtypepureid> store, string id, bool partial, bool action, string self, bool typed)
3188+void EmitSwitch$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, opt<qtypepureid> store, string id, bool partial, bool action, string self, mut stack<ReducedId> reduced_ids, bool verified, bool typed)
31273189 {
31283190 let type_pure subtype = ParseArgTypePure$(streams, txtpos, level, state.structs);
31293191
@@ -3132,7 +3194,7 @@
31323194 EmitLet$(streams.out, txtpos, level, state.structs, provide); // if dynamic need to free...
31333195
31343196 let string id = ParseId$(streams, txtpos, level);
3135- ParseExpr$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, solid<qtypepureid>(provide), id, partial, action, self);
3197+ ParseExpr$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, solid<qtypepureid>(provide), id, partial, action, self, reduced_ids, verified);
31363198
31373199 switch<type_pure> subtype
31383200 case type_pure_normal _ :
@@ -3162,10 +3224,10 @@
31623224 {
31633225 };
31643226
3165- Indent$(streams.out, level); PutStr(streams.out, "switch(("); PutStr(streams.out, provide.id); PutStr(streams.out, ").type)\n");
3166- Indent$(streams.out, level); PutStr(streams.out, "{\n");
3167- EmitCases$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, store, partial, action, self, provide.id, 0/*mutable*/, ud.elems, 0, typed);
3168- Indent$(streams.out, level); PutStr(streams.out, "}\n");
3227+ Indent(streams.out, level); PutStr(streams.out, "switch(("); PutStr(streams.out, provide.id); PutStr(streams.out, ").type)\n");
3228+ Indent(streams.out, level); PutStr(streams.out, "{\n");
3229+ EmitCases$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, store, partial, action, self, reduced_ids, verified, provide.id, 0/*mutable*/, ud.elems, 0, typed);
3230+ Indent(streams.out, level); PutStr(streams.out, "}\n");
31693231 };
31703232 }
31713233 case type_pure_wrapped wrapped :
@@ -3198,30 +3260,30 @@
31983260 {
31993261 };
32003262
3201- Indent$(streams.out, level); PutStr(streams.out, "switch(("); PutStr(streams.out, provide.id); PutStr(streams.out, ").type)\n");
3202- Indent$(streams.out, level); PutStr(streams.out, "{\n");
3203- EmitCases$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, store, partial, action, self, provide.id, 0/*mutable*/, ud.elems, 0, typed);
3204- Indent$(streams.out, level); PutStr(streams.out, "}\n");
3263+ Indent(streams.out, level); PutStr(streams.out, "switch(("); PutStr(streams.out, provide.id); PutStr(streams.out, ").type)\n");
3264+ Indent(streams.out, level); PutStr(streams.out, "{\n");
3265+ EmitCases$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, store, partial, action, self, reduced_ids, verified, provide.id, 0/*mutable*/, ud.elems, 0, typed);
3266+ Indent(streams.out, level); PutStr(streams.out, "}\n");
32053267 };
32063268 }
32073269 case container_opt :
32083270 {
3209- Indent$(streams.out, level); PutStr(streams.out, "if(!("); PutStr(streams.out, provide.id); PutStr(streams.out, ").size)\n");
3210- Indent$(streams.out, level); PutStr(streams.out, "{\n");
3271+ Indent(streams.out, level); PutStr(streams.out, "if(!("); PutStr(streams.out, provide.id); PutStr(streams.out, ").size)\n");
3272+ Indent(streams.out, level); PutStr(streams.out, "{\n");
32113273
32123274 MatchCase$(streams, txtpos, level, "empty");
32133275 AssertGet$(streams, txtpos, level, ':');
32143276 if typed then
32153277 {
3216- ParseExpr$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, store, ParseId$(streams, txtpos, level), partial, action, self);
3278+ ParseExpr$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, store, ParseId$(streams, txtpos, level), partial, action, self, reduced_ids, verified);
32173279 }
32183280 else
32193281 {
3220- ParseAssign$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, partial, action, self, ParseId$(streams, txtpos, level));
3282+ ParseAssign$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, partial, action, self, reduced_ids, verified, ParseId$(streams, txtpos, level));
32213283 };
3222- Indent$(streams.out, level); PutStr(streams.out, "}\n");
3223- Indent$(streams.out, level); PutStr(streams.out, "else\n");
3224- Indent$(streams.out, level); PutStr(streams.out, "{\n");
3284+ Indent(streams.out, level); PutStr(streams.out, "}\n");
3285+ Indent(streams.out, level); PutStr(streams.out, "else\n");
3286+ Indent(streams.out, level); PutStr(streams.out, "{\n");
32253287
32263288 MatchCase$(streams, txtpos, level, "solid");
32273289 let opt<string> var = ParseIdOrGap$(streams, txtpos, level);
@@ -3233,16 +3295,16 @@
32333295 {
32343296 if typed then
32353297 {
3236- ParseExpr$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, store, ParseId$(streams, txtpos, level), partial, action, self);
3298+ ParseExpr$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, store, ParseId$(streams, txtpos, level), partial, action, self, reduced_ids, verified);
32373299 }
32383300 else
32393301 {
3240- ParseAssign$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, partial, action, self, ParseId$(streams, txtpos, level));
3302+ ParseAssign$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, partial, action, self, reduced_ids, verified, ParseId$(streams, txtpos, level));
32413303 };
32423304 }
32433305 case solid solidvar :
32443306 {
3245- switch<opt<u64>> FindPr$(txtpos, scope, solidvar)
3307+ switch<opt<u64>> FindParOrVar$(txtpos, scope, solidvar)
32463308 case empty :
32473309 {
32483310 }
@@ -3255,7 +3317,7 @@
32553317 };
32563318
32573319 let qtypepureid qti = qtypepureid(constqtp(type_pure_normal(wrapped.subtype)), preapp(solidvar, '*'));
3258- Indent$(streams.out, add<u64>(level, 1)); EmitQTPI(streams.out, qti); PutStr(streams.out, " = ("); PutStr(streams.out, provide.id); PutStr(streams.out, ").data;\n");
3320+ Indent(streams.out, add<u64>(level, 1)); EmitQTPI(streams.out, qti); PutStr(streams.out, " = ("); PutStr(streams.out, provide.id); PutStr(streams.out, ").data;\n");
32593321
32603322 // NOTE: modifing scope instead of copy to remember variable-usage changes.
32613323 let u64 base = size<var>(scope);
@@ -3262,17 +3324,17 @@
32623324 push<var>(scope, varinit(qti)); // make element accessible in case...
32633325 if typed then
32643326 {
3265- ParseExpr$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, store, ParseId$(streams, txtpos, level), partial, action, self);
3327+ ParseExpr$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, store, ParseId$(streams, txtpos, level), partial, action, self, reduced_ids, verified);
32663328 }
32673329 else
32683330 {
3269- ParseAssign$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, partial, action, self, ParseId$(streams, txtpos, level));
3331+ ParseAssign$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, partial, action, self, reduced_ids, verified, ParseId$(streams, txtpos, level));
32703332 };
32713333 VerifyUsed$(streams.err, txtpos, scope, base);
32723334 let _ = pop_opt<var>(scope); // ...but not outside
32733335 };
32743336
3275- Indent$(streams.out, level); PutStr(streams.out, "}\n");
3337+ Indent(streams.out, level); PutStr(streams.out, "}\n");
32763338 }
32773339 case container_box :
32783340 {
@@ -3301,19 +3363,135 @@
33013363 {
33023364 };
33033365
3304- Indent$(streams.out, level); PutStr(streams.out, "switch(("); PutStr(streams.out, provide.id); PutStr(streams.out, ").type)\n");
3305- Indent$(streams.out, level); PutStr(streams.out, "{\n");
3306- EmitCases$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, store, partial, action, self, provide.id, 0/*mutable*/, ud.elems, 0, typed);
3307- Indent$(streams.out, level); PutStr(streams.out, "}\n");
3366+ Indent(streams.out, level); PutStr(streams.out, "switch(("); PutStr(streams.out, provide.id); PutStr(streams.out, ").type)\n");
3367+ Indent(streams.out, level); PutStr(streams.out, "{\n");
3368+ EmitCases$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, store, partial, action, self, reduced_ids, verified, provide.id, 0/*mutable*/, ud.elems, 0, typed);
3369+ Indent(streams.out, level); PutStr(streams.out, "}\n");
33083370 };
33093371 };
33103372 };
33113373
3312- Indent$(streams.out, level); FreeIn(streams.out, provide.qt.type); PutStr(streams.out, provide.id); FreeOut$(streams.out, streams.err, txtpos, state.structs, provide.qt.type); PutStr(streams.out, "\n"); // ...then dynamic free here
3374+ Indent(streams.out, level); FreeIn(streams.out, provide.qt.type); PutStr(streams.out, provide.id); FreeOut$(streams.out, streams.err, txtpos, state.structs, provide.qt.type); PutStr(streams.out, "\n"); // ...then dynamic free here
33133375 }
33143376
3377+void EmitReduce$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, opt<qtypepureid> store, string id, bool partial, bool action, string self, mut stack<ReducedId> reduced_ids, bool verified, bool typed)
3378+{
3379+ let string par = ParseId$(streams, txtpos, level);
3380+
3381+ // NOTE: only non-mutable parameter can be reduced!
3382+ switch<opt<u64>> FindPar$(txtpos, scope, par)
3383+ case empty:
3384+ {
3385+ PutStr(streams.err, "can only reduce non-mutable parameter");
3386+ Fail$(streams.err, txtpos);
3387+ }
3388+ case solid pos:
3389+ {
3390+ let var current = at_get$<var>(scope, pos);
3391+
3392+ if current.qti.qt.mutable then
3393+ {
3394+ PutStr(streams.err, "cannot reduce mutable parameter");
3395+ Fail$(streams.err, txtpos);
3396+ };
3397+
3398+ if not(strequ("to", ParseId$(streams, txtpos, level))) then
3399+ {
3400+ PutStr(streams.err, "missing keyword \"to\"");
3401+ Fail$(streams.err, txtpos);
3402+ };
3403+
3404+ let string tmp_reduce = ParseId$(streams, txtpos, level);
3405+ let string reduced_id = if strequ("", tmp_reduce) then par else tmp_reduce;
3406+
3407+ {
3408+ let u64 base_reduced = size<ReducedId>(reduced_ids);
3409+ //push<ReducedId>(reduced_ids, ReducedId(par, reduced_id));
3410+ push<ReducedId>(reduced_ids, ReducedId(pos, reduced_id));
3411+
3412+ AssertGet$(streams, txtpos, level, ':');
3413+
3414+ switch<type_pure> current.qti.qt.type
3415+ case type_pure_normal _ :
3416+ {
3417+ if ispureprim(current.qti.qt.type) then
3418+ {
3419+ Indent(streams.out, level); PutStr(streams.out, "if("); PutStr(streams.out, current.qti.id); PutStr(streams.out, " > 0)\n");
3420+
3421+ Indent(streams.out, level); PutStr(streams.out, "{\n");
3422+
3423+ let qtypepureid reduced = qtypepureid(constqtp(current.qti.qt.type), preapp(reduced_id, '_'));
3424+ //EmitLet$(streams.out, txtpos, add<u64>(1, level), state.structs, reduced); // if dynamic need to free...
3425+
3426+ Indent(streams.out, add<u64>(level, 1)); EmitQTPI(streams.out, reduced); PutStr(streams.out, " = "); PutStr(streams.out, current.qti.id); PutStr(streams.out, " - 1;\n");
3427+
3428+ // NOTE: modifing scope instead of copy to remember variable-usage changes.
3429+ let u64 base_scope = size<var>(scope);
3430+ push<var>(scope, varinit(reduced)); // make element accessible in case...
3431+ if typed then
3432+ {
3433+ ParseExpr$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, store, ParseId$(streams, txtpos, level), partial, action, self, reduced_ids, verified);
3434+ }
3435+ else
3436+ {
3437+ ParseAssign$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, partial, action, self, reduced_ids, verified, ParseId$(streams, txtpos, level));
3438+ };
3439+
3440+ VerifyUsed$(streams.err, txtpos, scope, base_scope);
3441+ let _ = pop$<var>(scope); // ...but not outside
3442+
3443+ //Indent(streams.out, add<u64>(1, level)); FreeIn(streams.out, reduced.qt.type); PutStr(streams.out, reduced.id); FreeOut$(streams.out, streams.err, txtpos, state.structs, reduced.qt.type); PutStr(streams.out, "\n"); // ...then dynamic free here
3444+
3445+ Indent(streams.out, level); PutStr(streams.out, "}\n");
3446+ }
3447+ else
3448+ {
3449+ PutStr(streams.err, "can't reduce ");
3450+ PutStr(streams.err, id);
3451+ PutStr(streams.err, " of type ");
3452+ EPrTypePure(streams.err, current.qti.qt.type);
3453+ Fail$(streams.err, txtpos);
3454+ };
3455+ }
3456+ case type_pure_wrapped _ :
3457+ {
3458+ PutStr(streams.err, "can't reduce ");
3459+ PutStr(streams.err, id);
3460+ PutStr(streams.err, " of type ");
3461+ EPrTypePure(streams.err, current.qti.qt.type);
3462+ Fail$(streams.err, txtpos);
3463+ };
3464+
3465+ let _ = pop_opt_base$<ReducedId>(reduced_ids, base_reduced);
3466+ };
3467+
3468+ Indent(streams.out, level); PutStr(streams.out, "else\n");
3469+
3470+ if not(strequ("term", ParseId$(streams, txtpos, level))) then
3471+ {
3472+ PutStr(streams.err, "missing keyword \"term\"");
3473+ Fail$(streams.err, txtpos);
3474+ };
3475+
3476+ AssertGet$(streams, txtpos, level, ':');
3477+
3478+ Indent(streams.out, level); PutStr(streams.out, "{\n");
3479+
3480+ if typed then
3481+ {
3482+ ParseExpr$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, store, ParseId$(streams, txtpos, level), partial, action, self, reduced_ids, verified);
3483+ }
3484+ else
3485+ {
3486+ ParseAssign$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, partial, action, self, reduced_ids, verified, ParseId$(streams, txtpos, level));
3487+ };
3488+
3489+ Indent(streams.out, level); PutStr(streams.out, "}\n");
3490+ };
3491+}
3492+
33153493 // parse expression - assumes optional id has already been parsed
3316-void ParseExpr$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, opt<qtypepureid> store, string id, bool partial, bool action, string self)
3494+void ParseExpr$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, opt<qtypepureid> store, string id, bool partial, bool action, string self, mut stack<ReducedId> reduced_ids, bool verified)
33173495 {
33183496 if not(strequ(id, "")) then
33193497 {
@@ -3321,10 +3499,10 @@
33213499 {
33223500 // anonymous / hidden storage: use temporary name
33233501 let mut qtypepureid pred = qtypepureid(mutqtp(type_pure_normal2("bool")), GenVar$(tmpnr));
3324- Indent$(streams.out, level); EmitQTPI(streams.out, pred); PutStr(streams.out, ";\n");
3502+ Indent(streams.out, level); EmitQTPI(streams.out, pred); PutStr(streams.out, ";\n");
33253503
33263504 let mut string id = ParseId$(streams, txtpos, level);
3327- ParseExpr$(streams, txtpos, state, level, scope, tmpnr, solid<qtypepureid>(pred), id, partial, action, self);
3505+ ParseExpr$(streams, txtpos, state, level, scope, tmpnr, solid<qtypepureid>(pred), id, partial, action, self, reduced_ids, verified);
33283506
33293507 if not(strequ(ParseId$(streams, txtpos, level), "then")) then
33303508 {
@@ -3331,11 +3509,11 @@
33313509 PutStr(streams.err, "missing then"); Fail$(streams.err, txtpos);
33323510 };
33333511
3334- Indent$(streams.out, level); PutStr(streams.out, "if("); PutStr(streams.out, pred.id); PutStr(streams.out, ")\n");
3335- Indent$(streams.out, level); PutStr(streams.out, "{\n");
3512+ Indent(streams.out, level); PutStr(streams.out, "if("); PutStr(streams.out, pred.id); PutStr(streams.out, ")\n");
3513+ Indent(streams.out, level); PutStr(streams.out, "{\n");
33363514 id = ParseId$(streams, txtpos, level);
3337- ParseExpr$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, store, id, partial, action, self);
3338- Indent$(streams.out, level); PutStr(streams.out, "}\n");
3515+ ParseExpr$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, store, id, partial, action, self, reduced_ids, verified);
3516+ Indent(streams.out, level); PutStr(streams.out, "}\n");
33393517
33403518 id = ParseId$(streams, txtpos, level);
33413519 // NOTE: else is mandatory in expression!
@@ -3345,11 +3523,11 @@
33453523 Fail$(streams.err, txtpos);
33463524 };
33473525
3348- Indent$(streams.out, level); PutStr(streams.out, "else\n");
3349- Indent$(streams.out, level); PutStr(streams.out, "{\n");
3526+ Indent(streams.out, level); PutStr(streams.out, "else\n");
3527+ Indent(streams.out, level); PutStr(streams.out, "{\n");
33503528 id = ParseId$(streams, txtpos, level);
3351- ParseExpr$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, store, id, partial, action, self);
3352- Indent$(streams.out, level); PutStr(streams.out, "}\n");
3529+ ParseExpr$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, store, id, partial, action, self, reduced_ids, verified);
3530+ Indent(streams.out, level); PutStr(streams.out, "}\n");
33533531 }
33543532 else
33553533 {
@@ -3415,28 +3593,32 @@
34153593 // Fail$(streams.err, txtpos);
34163594 // };
34173595 //
3418- // Indent$(streams.out, level); PutStr(streams.out, "do\n");
3419- // Indent$(streams.out, level); PutStr(streams.out, "{\n");
3596+ // Indent(streams.out, level); PutStr(streams.out, "do\n");
3597+ // Indent(streams.out, level); PutStr(streams.out, "{\n");
34203598 // id = ParseId$(streams, txtpos, level);
34213599 // ParseExpr$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, store, id, partial, action, self);
34223600 //// //Print("fprintf(stderr, \"%d\\n\", (int)"); PutStr(out, counter.id); PutStr(out, ");\n");
3423- // Indent$(streams.out, level); PutStr(streams.out, "}\n");
3424- // Indent$(streams.out, level); PutStr(streams.out, "while("); PutStr(streams.out, counter.id); PutStr(streams.out, "--);\n");
3601+ // Indent(streams.out, level); PutStr(streams.out, "}\n");
3602+ // Indent(streams.out, level); PutStr(streams.out, "while("); PutStr(streams.out, counter.id); PutStr(streams.out, "--);\n");
34253603 //}
34263604 //else
34273605 if strequ(id, "switch") then
34283606 {
3429- EmitSwitch$(streams, txtpos, state, level, scope, tmpnr, store, id, partial, action, self, 1);
3607+ EmitSwitch$(streams, txtpos, state, level, scope, tmpnr, store, id, partial, action, self, reduced_ids, verified, 1);
34303608 }
3609+ else if strequ(id, "reduce") then
3610+ {
3611+ EmitReduce$(streams, txtpos, state, level, scope, tmpnr, store, id, partial, action, self, reduced_ids, verified, 1);
3612+ }
34313613 else
34323614 {
3433- switch<opt<u64>> FindPr$(txtpos, scope, id)
3615+ switch<opt<u64>> FindParOrVar$(txtpos, scope, id)
34343616 case empty:
34353617 {
34363618 // function-call
3437- Indent$(streams.out, level); PutStr(streams.out, "{\n");
3438- ParseCall$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, store, id, partial, action, self);
3439- Indent$(streams.out, level); PutStr(streams.out, "}\n");
3619+ Indent(streams.out, level); PutStr(streams.out, "{\n");
3620+ ParseCall$(streams, txtpos, state, add<u64>(level, 1), scope, tmpnr, store, id, partial, action, self, reduced_ids, verified);
3621+ Indent(streams.out, level); PutStr(streams.out, "}\n");
34403622
34413623 // (return-typecheck performed by call)
34423624 }
@@ -3466,7 +3648,7 @@
34663648 let mut stack<string> path;
34673649 typ.type = ParseStructPath$(streams, txtpos, state.structs, level, typ.type, id, path);
34683650
3469- Indent$(streams.out, level);
3651+ Indent(streams.out, level);
34703652 CopyIn(streams.out, streams.err, solidstore.qt.type, solidstore.id, txtpos); PutStr(streams.out, solidstore.id); CopyMid(streams.out, solidstore.qt.type); Put(streams.out, '('); PutStr(streams.out, par); Put(streams.out, ')'); PrintPath$(streams.out, path); CopyOut$(streams.out, streams.err, txtpos, state.structs, solidstore.qt.type);
34713653 PutStr(streams.out, "\n");
34723654
@@ -3479,12 +3661,12 @@
34793661 }
34803662 else if MatchOptional$(streams, txtpos, level, '(') then // nested expression
34813663 {
3482- ParseExpr$(streams, txtpos, state, level, scope, tmpnr, store, ParseId$(streams, txtpos, level), partial, action, self);
3664+ ParseExpr$(streams, txtpos, state, level, scope, tmpnr, store, ParseId$(streams, txtpos, level), partial, action, self, reduced_ids, 0/*unverified*/);
34833665 AssertGet$(streams, txtpos, level, ')');
34843666 }
34853667 else if equ<u8>('{', Peek(streams.in)) then
34863668 {
3487- ParseBlock$(streams, txtpos, state, level, scope, tmpnr, store, partial, action, self);
3669+ ParseBlock$(streams, txtpos, state, level, scope, tmpnr, store, partial, action, self, reduced_ids, 0/*unverified*/);
34883670 }
34893671 else if isdigi(Peek(streams.in)) then // number-literal
34903672 {
@@ -3499,7 +3681,7 @@
34993681 }
35003682 case solid solidstore :
35013683 {
3502- Indent$(streams.out, level); PutStr(streams.out, solidstore.id); PutStr(streams.out, " = "); Print<u64>(streams.out, nr); PutStr(streams.out, ";\n");
3684+ Indent(streams.out, level); PutStr(streams.out, solidstore.id); PutStr(streams.out, " = "); Print<u64>(streams.out, nr); PutStr(streams.out, ";\n");
35033685
35043686 ChkPrim$(streams.err, txtpos, solidstore);
35053687 };
@@ -3517,7 +3699,7 @@
35173699 }
35183700 case solid solidstore :
35193701 {
3520- Indent$(streams.out, level); PutStr(streams.out, solidstore.id); PutStr(streams.out, " = "); Print<u64>(streams.out, c8to64(ch)); PutStr(streams.out, ";\n");
3702+ Indent(streams.out, level); PutStr(streams.out, solidstore.id); PutStr(streams.out, " = "); Print<u64>(streams.out, c8to64(ch)); PutStr(streams.out, ";\n");
35213703
35223704 ChkPrim$(streams.err, txtpos, solidstore);
35233705 };
@@ -3534,7 +3716,7 @@
35343716 case solid solidstore :
35353717 {
35363718 // automatically convert literal to string
3537- Indent$(streams.out, level); PutStr(streams.out, "init$fromliteral(&"); PutStr(streams.out, solidstore.id); PutStr(streams.out, ", "); PutStr(streams.out, "\""); let u64 size = CopyStrLit$(streams.in, streams.out, txtpos); PutStr(streams.out, "\""); PutStr(streams.out, ", "); Print<u64>(streams.out, size); PutStr(streams.out, ");\n");
3719+ Indent(streams.out, level); PutStr(streams.out, "init$fromliteral(&"); PutStr(streams.out, solidstore.id); PutStr(streams.out, ", "); PutStr(streams.out, "\""); let u64 size = CopyStrLit$(streams.in, streams.out, txtpos); PutStr(streams.out, "\""); PutStr(streams.out, ", "); Print<u64>(streams.out, size); PutStr(streams.out, ");\n");
35383720 ChkStr$(streams.err, txtpos, solidstore);
35393721 };
35403722 };
@@ -3541,7 +3723,7 @@
35413723 }
35423724
35433725 // parse function-body without side-effects
3544-void ParseExpr2$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, u64 tmpnr_, qtypepureid store, bool partial, bool action, string self)
3726+void ParseExpr2$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, u64 tmpnr_, qtypepureid store, bool partial, bool action, string self, mut stack<ReducedId> reduced_ids, bool verified)
35453727 {
35463728 let mut u64 tmpnr = tmpnr_;
35473729
@@ -3555,13 +3737,13 @@
35553737
35563738 // try to read id (will be empty if something else ahead!)
35573739 let string id = ParseId$(streams, txtpos, level);
3558- ParseExpr$(streams, txtpos, state, level, scope, tmpnr, solid<qtypepureid>(store), id, partial, action, self);
3740+ ParseExpr$(streams, txtpos, state, level, scope, tmpnr, solid<qtypepureid>(store), id, partial, action, self, reduced_ids, verified);
35593741 }
35603742
35613743 // forward-declaration
3562-void ParseLines$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, opt<qtypepureid> store, bool partial, bool action, string self);
3744+void ParseLines$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, opt<qtypepureid> store, bool partial, bool action, string self, mut stack<ReducedId> reduced_ids, bool verified);
35633745
3564-void ParseNext$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, opt<qtypepureid> store, bool partial, bool action, string self)
3746+void ParseNext$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, opt<qtypepureid> store, bool partial, bool action, string self, mut stack<ReducedId> reduced_ids, bool verified)
35653747 {
35663748 SkipComment$(streams, txtpos, level);
35673749 if not(equ<u8>(';', Peek(streams.in))) then
@@ -3576,7 +3758,7 @@
35763758 SkipComment$(streams, txtpos, level);
35773759 if not(equ<u8>('}', Peek(streams.in))) then
35783760 {
3579- ParseLines$(streams, txtpos, state, level, scope, tmpnr, store, partial, action, self);
3761+ ParseLines$(streams, txtpos, state, level, scope, tmpnr, store, partial, action, self, reduced_ids, verified);
35803762 }
35813763 else
35823764 {
@@ -3597,7 +3779,7 @@
35973779 }
35983780
35993781 // Parse something that can be either returned or assigned to, e.g. x.a.b.c = y
3600-void ParseLet$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, opt<qtypepureid> store, bool partial, bool action, string self)
3782+void ParseLet$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut stack<var> scope, mut u64 tmpnr, opt<qtypepureid> store, bool partial, bool action, string self, mut stack<ReducedId> reduced_ids, bool verified)
36013783 {
36023784 if MatchOptional$(streams, txtpos, level, '_') then
36033785 {
@@ -3605,8 +3787,8 @@
36053787
36063788 let string id = ParseId$(streams, txtpos, level);
36073789
3608- ParseExpr$(streams, txtpos, state, level, scope, tmpnr, empty<qtypepureid>(), id, partial, action, self);
3609- ParseNext$(streams, txtpos, state, level, scope, tmpnr, store, partial, action, self); // continue
3790+ ParseExpr$(streams, txtpos, state, level, scope, tmpnr, empty<qtypepureid>(), id, partial, action, self, reduced_ids, verified);
3791+ ParseNext$(streams, txtpos, state, level, scope, tmpnr, store, partial, action, self, reduced_ids, verified); // continue
36103792 }
36113793 else
36123794 {
@@ -3651,21 +3833,21 @@
36513833 {
36523834 Assert$(streams.err, txtpos, GetAdvance(streams.in, txtpos), '=');
36533835
3654- ParseExpr$(streams, txtpos, state, level, scope, tmpnr, solid<qtypepureid>(mut_st), ParseId$(streams, txtpos, level), partial, action, self);
3836+ ParseExpr$(streams, txtpos, state, level, scope, tmpnr, solid<qtypepureid>(mut_st), ParseId$(streams, txtpos, level), partial, action, self, reduced_ids, verified);
36553837 };
36563838 };

Part of diff was cut off due to size limit. Use your local client to view the full diff.

Show on old repository browser