• R/O
  • SSH
  • HTTPS

jpl: 提交


Commit MetaInfo

修訂414 (tree)
時間2019-01-21 08:43:51
作者jakobthomsen

Log Message

use non-empty strings

Change Summary

差異

--- trunk/pragmatic/compiler.compiled.c (revision 413)
+++ trunk/pragmatic/compiler.compiled.c (revision 414)
@@ -1024,6 +1024,46 @@
10241024 return;
10251025 }
10261026
1027+void to_nonempty_string(struct stack/*nonempty_string*/ *const _0, const struct string *const s)
1028+{
1029+ {
1030+ {
1031+ struct string _1; memset(&_1, 0, sizeof(struct string));
1032+ string$copy(&_1, &(*s));
1033+ struct string *s = &_1;
1034+ struct stack/*u8*/ _t; memset(&_t, 0, sizeof(struct stack/*u8*/));
1035+ {
1036+ struct stack/*u8*/ *_2 = &(*s).data;
1037+ pop_opt(&_t, &*_2, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 64);
1038+ }
1039+ struct stack/*nonempty_string*/ _2; memset(&_2, 0, sizeof(struct stack/*nonempty_string*/));
1040+ const struct stack/*u8*/ *_3 = &(_t);
1041+ if(!(*_3).size)
1042+ {
1043+ {
1044+ empty(&_2, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest, (void (*)(void *, const void *))nonempty_string$copy, 67);
1045+ }
1046+ }
1047+ else
1048+ {
1049+ const uint8_t *t = (*_3).data;
1050+ {
1051+ struct nonempty_string _4; memset(&_4, 0, sizeof(struct nonempty_string));
1052+ {
1053+ nonempty_string(&_4, &*t, &*s);
1054+ }
1055+ solid(&_2, &_4, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest, (void (*)(void *, const void *))nonempty_string$copy, 68);
1056+ nonempty_string$dest(&_4);
1057+ }
1058+ }
1059+ clone$(&*_0, &_2, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest, (void (*)(void *, const void *))nonempty_string$copy);
1060+ free$(&_2, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest);
1061+ free$(&_t, sizeof(uint8_t), 0/*DEST*/);
1062+ string$dest(&_1);
1063+ }
1064+ }
1065+}
1066+
10271067 void nonempty_to_string(struct string *const _0, const struct nonempty_string *const name)
10281068 {
10291069 {
@@ -1032,7 +1072,7 @@
10321072 {
10331073 struct stack/*u8*/ *_2 = &(_tmp).data;
10341074 const uint8_t *_3 = &(*name).top;
1035- push(0 /* _1 */, &*_2, &*_3, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 64);
1075+ push(0 /* _1 */, &*_2, &*_3, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 74);
10361076 }
10371077 string$copy(&*_0, &_tmp);
10381078 string$dest(&_tmp);
@@ -1986,7 +2026,7 @@
19862026 {
19872027 {
19882028 const struct stack/*u8*/ *_2 = &(*s).data;
1989- top_get$(&*_0, &*_2, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 317);
2029+ top_get$(&*_0, &*_2, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 327);
19902030 }
19912031 }
19922032 else
@@ -1995,22 +2035,6 @@
19952035 }
19962036 }
19972037
1998-void predel$(struct string *const _0, const struct string *const s)
1999-{
2000- {
2001- struct string _t; memset(&_t, 0, sizeof(struct string));
2002- string$copy(&_t, &(*s));
2003- {
2004- uint8_t _1; memset(&_1, 0, sizeof(uint8_t));
2005- struct stack/*u8*/ *_2 = &(_t).data;
2006- pop$(&_1, &*_2, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 323);
2007- _IGNORE_(_1);
2008- }
2009- string$copy(&*_0, &_t);
2010- string$dest(&_t);
2011- }
2012-}
2013-
20142038 void idpartinternal(bool *const _0, const struct stack/*u8*/ *const id, const bool *const previous)
20152039 {
20162040 if(id->fill > 0)
@@ -2038,10 +2062,10 @@
20382062 }
20392063 }
20402064
2041-void idpart(bool *const _0, const struct string *const id)
2065+void idpart(bool *const _0, const struct nonempty_string *const id)
20422066 {
20432067 {
2044- const struct stack/*u8*/ *_1 = &(*id).data;
2068+ const struct stack/*u8*/ *_1 = &(*id).rest.data;
20452069 bool _2; memset(&_2, 0, sizeof(bool));
20462070 _2 = 0;
20472071 idpartinternal(&*_0, &*_1, &_2);
@@ -2447,20 +2471,6 @@
24472471 }
24482472 }
24492473
2450-void preapp(struct string *const _0, const uint8_t *const top, const struct string *const id)
2451-{
2452- {
2453- struct string _new; memset(&_new, 0, sizeof(struct string));
2454- string$copy(&_new, &(*id));
2455- {
2456- struct stack/*u8*/ *_2 = &(_new).data;
2457- push(0 /* _1 */, &*_2, &*top, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 378);
2458- }
2459- string$copy(&*_0, &_new);
2460- string$dest(&_new);
2461- }
2462-}
2463-
24642474 void ParseIE$(struct string *const _0, const struct StreamIn *const in, struct linecol *const txtpos)
24652475 {
24662476 bool _1;
@@ -2518,7 +2528,7 @@
25182528 }
25192529 {
25202530 struct stack/*u8*/ *_3 = &(_id).data;
2521- push(0 /* _2 */, &*_3, &_ch, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 393);
2531+ push(0 /* _2 */, &*_3, &_ch, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 403);
25222532 }
25232533 string$copy(&*_0, &_id);
25242534 string$dest(&_id);
@@ -2648,7 +2658,7 @@
26482658 }
26492659 {
26502660 struct stack/*u8*/ *_3 = &(_id).data;
2651- push(0 /* _2 */, &*_3, &_ch, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 430);
2661+ push(0 /* _2 */, &*_3, &_ch, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 440);
26522662 }
26532663 string$copy(&*_0, &_id);
26542664 string$dest(&_id);
@@ -2734,7 +2744,7 @@
27342744 if(_1)
27352745 {
27362746 {
2737- empty(&*_0, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest, (void (*)(void *, const void *))nonempty_string$copy, 456);
2747+ empty(&*_0, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest, (void (*)(void *, const void *))nonempty_string$copy, 466);
27382748 }
27392749 }
27402750 else
@@ -2744,7 +2754,7 @@
27442754 {
27452755 ParseIdNonEmpty$(&_2, &*streams, &*txtpos, &*level);
27462756 }
2747- solid(&*_0, &_2, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest, (void (*)(void *, const void *))nonempty_string$copy, 458);
2757+ solid(&*_0, &_2, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest, (void (*)(void *, const void *))nonempty_string$copy, 468);
27482758 nonempty_string$dest(&_2);
27492759 }
27502760 }
@@ -2794,7 +2804,7 @@
27942804 }
27952805 {
27962806 struct stack/*u8*/ *_4 = &(_new).data;
2797- push(0 /* _3 */, &*_4, &_digit, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 472);
2807+ push(0 /* _3 */, &*_4, &_digit, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 482);
27982808 }
27992809 {
28002810 GenId$(&_new, &_nr, &_new);
@@ -6438,7 +6448,7 @@
64386448 {
64396449 size(&_2, &_rest);
64406450 }
6441- solid(&*_0, &_2, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 988);
6451+ solid(&*_0, &_2, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 998);
64426452 _IGNORE_(_2);
64436453 }
64446454 }
@@ -6452,7 +6462,7 @@
64526462 else
64536463 {
64546464 {
6455- empty(&*_0, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 993);
6465+ empty(&*_0, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 1003);
64566466 }
64576467 }
64586468 }
@@ -6532,7 +6542,7 @@
65326542 const struct nonempty_string *_6 = &(*dc).id;
65336543 typepureid(&_4, &*_5, &*_6);
65346544 }
6535- push(0 /* _3 */, &*tis, &_4, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 1008);
6545+ push(0 /* _3 */, &*tis, &_4, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 1018);
65366546 typepureid$dest(&_4);
65376547 }
65386548 }
@@ -6550,7 +6560,7 @@
65506560 {
65516561 struct stack/*typepureid*/ _tis; memset(&_tis, 0, sizeof(struct stack/*typepureid*/));
65526562 {
6553- stack(&_tis, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 1017);
6563+ stack(&_tis, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 1027);
65546564 }
65556565 {
65566566 constrToTIsInternal(0 /* _1 */, &*dcs, &_tis);
@@ -6827,186 +6837,6 @@
68276837 free$(&_0->elems, sizeof(struct typepureid), (void (*)(void *))typepureid$dest);
68286838 }
68296839
6830-void getDataConstrIdx(struct stack/*u64*/ *const _0, const struct stack/*constr*/ *const constrs, const struct string *const id)
6831-{
6832- if(constrs->fill > 0)
6833- {
6834- struct stack/*constr*/ _rest; memset(&_rest, 0, sizeof(struct stack/*constr*/));
6835- _rest.fill = constrs->fill - 1;
6836- _rest.data = constrs->data; // REFERENCE - memory must NOT be de-allocated when leaving scope!!!
6837- _rest.size = (4 * (constrs->fill + 1) > constrs->size + 1) ? constrs->size : (constrs->size + 1) / 2 - 1;
6838- const struct constr *constr = ((const struct constr *)(_rest.data)) + _rest.fill; // REFERENCE - memory must NOT be de-allocated when leaving scope!!!
6839- bool _1;
6840- {
6841- struct string _2; memset(&_2, 0, sizeof(struct string));
6842- {
6843- const struct nonempty_string *_3 = &(*constr).id;
6844- nonempty_to_string(&_2, &*_3);
6845- }
6846- strequ(&_1, &_2, &*id);
6847- string$dest(&_2);
6848- }
6849- if(_1)
6850- {
6851- {
6852- uint64_t _2; memset(&_2, 0, sizeof(uint64_t));
6853- {
6854- size(&_2, &_rest);
6855- }
6856- solid(&*_0, &_2, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 1033);
6857- _IGNORE_(_2);
6858- }
6859- }
6860- else
6861- {
6862- {
6863- getDataConstrIdx(&*_0, &_rest, &*id);
6864- }
6865- }
6866- }
6867- else
6868- {
6869- {
6870- empty(&*_0, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 1037);
6871- }
6872- }
6873-}
6874-
6875-void getDataConstr(struct stack/*constr*/ *const _0, const struct stack/*constr*/ *const constrs, const struct string *const id)
6876-{
6877- if(constrs->fill > 0)
6878- {
6879- struct stack/*constr*/ _rest; memset(&_rest, 0, sizeof(struct stack/*constr*/));
6880- _rest.fill = constrs->fill - 1;
6881- _rest.data = constrs->data; // REFERENCE - memory must NOT be de-allocated when leaving scope!!!
6882- _rest.size = (4 * (constrs->fill + 1) > constrs->size + 1) ? constrs->size : (constrs->size + 1) / 2 - 1;
6883- const struct constr *constr = ((const struct constr *)(_rest.data)) + _rest.fill; // REFERENCE - memory must NOT be de-allocated when leaving scope!!!
6884- bool _1;
6885- {
6886- struct string _2; memset(&_2, 0, sizeof(struct string));
6887- {
6888- const struct nonempty_string *_3 = &(*constr).id;
6889- nonempty_to_string(&_2, &*_3);
6890- }
6891- strequ(&_1, &_2, &*id);
6892- string$dest(&_2);
6893- }
6894- if(_1)
6895- {
6896- {
6897- solid(&*_0, &*constr, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 1043);
6898- }
6899- }
6900- else
6901- {
6902- {
6903- getDataConstr(&*_0, &_rest, &*id);
6904- }
6905- }
6906- }
6907- else
6908- {
6909- {
6910- empty(&*_0, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 1047);
6911- }
6912- }
6913-}
6914-
6915-struct constrwithidx
6916-{
6917- struct constr constr;
6918- uint64_t idx;
6919-};
6920-
6921-void constrwithidx$copy(struct constrwithidx *copy, struct constrwithidx const *orig);
6922-void constrwithidx$dest(struct constrwithidx *_0);
6923-void constrwithidx$copy(struct constrwithidx *copy, struct constrwithidx const *orig)
6924-{
6925- copy->idx = orig->idx;
6926- constr$copy(&copy->constr, &orig->constr);
6927-}
6928-
6929-void constrwithidx$dest(struct constrwithidx *_0)
6930-{
6931- _IGNORE_(_0->idx);
6932- constr$dest(&_0->constr);
6933-}
6934-
6935-void constrwithidx(struct constrwithidx *_0, const struct constr *constr, const uint64_t *idx)
6936-{
6937- _0->idx = *idx;
6938- constr$copy(&_0->constr, &*constr);
6939-}
6940-
6941-void Print$constrwithidx(void *_0, const struct StreamOut *out, const struct constrwithidx *s)
6942-{
6943- fprintf(out->f, "constrwithidx(");
6944- Print$constr(0, out, &s->constr);
6945- fprintf(out->f, ", ");
6946- Print$u64(0, out, &s->idx);
6947- fprintf(out->f, ")");
6948-}
6949-
6950-void cmp$constrwithidx(struct cmp *res, const struct constrwithidx *x, const struct constrwithidx *y)
6951-{
6952- cmp$constr(res, &x->constr, &y->constr);
6953- if(res->type != 1)
6954- return;
6955- cmp$u64(res, &x->idx, &y->idx);
6956- if(res->type != 1)
6957- return;
6958-}
6959-
6960-void getDataConstrWithIdx(struct stack/*constrwithidx*/ *const _0, const struct stack/*constr*/ *const constrs, const struct string *const id)
6961-{
6962- if(constrs->fill > 0)
6963- {
6964- struct stack/*constr*/ _rest; memset(&_rest, 0, sizeof(struct stack/*constr*/));
6965- _rest.fill = constrs->fill - 1;
6966- _rest.data = constrs->data; // REFERENCE - memory must NOT be de-allocated when leaving scope!!!
6967- _rest.size = (4 * (constrs->fill + 1) > constrs->size + 1) ? constrs->size : (constrs->size + 1) / 2 - 1;
6968- const struct constr *constr = ((const struct constr *)(_rest.data)) + _rest.fill; // REFERENCE - memory must NOT be de-allocated when leaving scope!!!
6969- bool _1;
6970- {
6971- struct string _2; memset(&_2, 0, sizeof(struct string));
6972- {
6973- const struct nonempty_string *_3 = &(*constr).id;
6974- nonempty_to_string(&_2, &*_3);
6975- }
6976- strequ(&_1, &_2, &*id);
6977- string$dest(&_2);
6978- }
6979- if(_1)
6980- {
6981- {
6982- struct constrwithidx _2; memset(&_2, 0, sizeof(struct constrwithidx));
6983- {
6984- uint64_t _3; memset(&_3, 0, sizeof(uint64_t));
6985- {
6986- size(&_3, &_rest);
6987- }
6988- constrwithidx(&_2, &*constr, &_3);
6989- _IGNORE_(_3);
6990- }
6991- solid(&*_0, &_2, sizeof(struct constrwithidx), (void (*)(void *))constrwithidx$dest, (void (*)(void *, const void *))constrwithidx$copy, 1059);
6992- constrwithidx$dest(&_2);
6993- }
6994- }
6995- else
6996- {
6997- {
6998- getDataConstrWithIdx(&*_0, &_rest, &*id);
6999- }
7000- }
7001- }
7002- else
7003- {
7004- {
7005- empty(&*_0, sizeof(struct constrwithidx), (void (*)(void *))constrwithidx$dest, (void (*)(void *, const void *))constrwithidx$copy, 1063);
7006- }
7007- }
7008-}
7009-
70106840 struct structdef
70116841 {
70126842 struct stack/*flavour*/ type;
@@ -7119,7 +6949,7 @@
71196949 if(_2)
71206950 {
71216951 {
7122- push(0 /* _3 */, &*structs, &*new, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 1093);
6952+ push(0 /* _3 */, &*structs, &*new, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 1103);
71236953 }
71246954 }
71256955 }
@@ -7184,7 +7014,7 @@
71847014 *_2 = 1;
71857015 struct stack/*structdef*/ _3; memset(&_3, 0, sizeof(struct stack/*structdef*/));
71867016 {
7187- solid(&_3, &*cur, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 1107);
7017+ solid(&_3, &*cur, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 1117);
71887018 }
71897019 clone$(&*_0, &_3, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy);
71907020 free$(&_3, sizeof(struct structdef), (void (*)(void *))structdef$dest);
@@ -7200,7 +7030,7 @@
72007030 else
72017031 {
72027032 {
7203- empty(&*_0, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 1113);
7033+ empty(&*_0, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 1123);
72047034 }
72057035 }
72067036 }
@@ -7272,7 +7102,7 @@
72727102 if(_1)
72737103 {
72747104 {
7275- solid(&*_0, &*cur, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 1136);
7105+ solid(&*_0, &*cur, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 1146);
72767106 }
72777107 }
72787108 else
@@ -7285,7 +7115,7 @@
72857115 else
72867116 {
72877117 {
7288- empty(&*_0, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 1140);
7118+ empty(&*_0, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 1150);
72897119 }
72907120 }
72917121 }
@@ -7316,7 +7146,7 @@
73167146 {
73177147 size(&_2, &_rest);
73187148 }
7319- solid(&*_0, &_2, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 1146);
7149+ solid(&*_0, &_2, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 1156);
73207150 _IGNORE_(_2);
73217151 }
73227152 }
@@ -7330,7 +7160,7 @@
73307160 else
73317161 {
73327162 {
7333- empty(&*_0, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 1150);
7163+ empty(&*_0, sizeof(uint64_t), 0/*DEST*/, 0/*COPY*/, 1160);
73347164 }
73357165 }
73367166 }
@@ -7357,7 +7187,7 @@
73577187 if(_1)
73587188 {
73597189 {
7360- solid(&*_0, &*cur, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 1156);
7190+ solid(&*_0, &*cur, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 1166);
73617191 }
73627192 }
73637193 else
@@ -7370,7 +7200,7 @@
73707200 else
73717201 {
73727202 {
7373- empty(&*_0, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 1160);
7203+ empty(&*_0, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 1170);
73747204 }
73757205 }
73767206 }
@@ -9980,7 +9810,7 @@
99809810 {
99819811 ParseArgTypePure$(&_3, &*streams, &*txtpos, &*level, &*structs);
99829812 }
9983- solid(&_1, &_3, sizeof(struct type_pure), (void (*)(void *))type_pure$dest, (void (*)(void *, const void *))type_pure$copy, 1723);
9813+ solid(&_1, &_3, sizeof(struct type_pure), (void (*)(void *))type_pure$dest, (void (*)(void *, const void *))type_pure$copy, 1733);
99849814 type_pure$dest(&_3);
99859815 }
99869816 }
@@ -9987,7 +9817,7 @@
99879817 else
99889818 {
99899819 {
9990- empty(&_1, sizeof(struct type_pure), (void (*)(void *))type_pure$dest, (void (*)(void *, const void *))type_pure$copy, 1725);
9820+ empty(&_1, sizeof(struct type_pure), (void (*)(void *))type_pure$dest, (void (*)(void *, const void *))type_pure$copy, 1735);
99919821 }
99929822 }
99939823 clone$(&*_0, &_1, sizeof(struct type_pure), (void (*)(void *))type_pure$dest, (void (*)(void *, const void *))type_pure$copy);
@@ -11113,7 +10943,7 @@
1111310943 }
1111410944 }
1111510945
11116-void istmp$(bool *const _0, const struct string *const id)
10946+void istmp$(bool *const _0, const struct nonempty_string *const id)
1111710947 {
1111810948 {
1111910949 bool _1; memset(&_1, 0, sizeof(bool));
@@ -11120,12 +10950,8 @@
1112010950 {
1112110951 uint8_t _2; memset(&_2, 0, sizeof(uint8_t));
1112210952 _2 = 95;
11123- uint8_t _3; memset(&_3, 0, sizeof(uint8_t));
11124- {
11125- strtop$(&_3, &*id);
11126- }
11127- _1 = _2 == _3;
11128- _IGNORE_(_3);
10953+ const uint8_t *_3 = &(*id).top;
10954+ _1 = _2 == *_3;
1112910955 _IGNORE_(_2);
1113010956 }
1113110957 bool _2; memset(&_2, 0, sizeof(bool));
@@ -11132,12 +10958,8 @@
1113210958 {
1113310959 uint8_t _3; memset(&_3, 0, sizeof(uint8_t));
1113410960 {
11135- struct string _4; memset(&_4, 0, sizeof(struct string));
11136- {
11137- predel$(&_4, &*id);
11138- }
11139- strtop$(&_3, &_4);
11140- string$dest(&_4);
10961+ const struct string *_4 = &(*id).rest;
10962+ strtop$(&_3, &*_4);
1114110963 }
1114210964 isdigi(&_2, &_3);
1114310965 _IGNORE_(_3);
@@ -11148,7 +10970,7 @@
1114810970 }
1114910971 }
1115010972
11151-void ChkPar$(void *const _0, const struct StreamOut *const err, const struct linecol *const txtpos, const struct qtypepure *const par, const struct nonempty_string *const id, const struct qtypepureid *const arg)
10973+void ChkPar$(void *const _0, const struct StreamOut *const err, const struct linecol *const txtpos, const struct qtypepure *const par, const struct nonempty_string *const ID, const struct qtypepureid *const arg)
1115210974 {
1115310975 {
1115410976 bool _2;
@@ -11158,35 +10980,35 @@
1115810980 {
1115910981 bool _5; memset(&_5, 0, sizeof(bool));
1116010982 {
11161- struct string _6; memset(&_6, 0, sizeof(struct string));
11162- {
11163- nonempty_to_string(&_6, &*id);
11164- }
11165- istmp$(&_5, &_6);
11166- string$dest(&_6);
10983+ istmp$(&_5, &*ID);
1116710984 }
1116810985 bool _6; memset(&_6, 0, sizeof(bool));
1116910986 {
1117010987 struct string _7; memset(&_7, 0, sizeof(struct string));
1117110988 {
11172- uint8_t _8; memset(&_8, 0, sizeof(uint8_t));
11173- _8 = 42;
11174- struct string _9; memset(&_9, 0, sizeof(struct string));
10989+ struct nonempty_string _8; memset(&_8, 0, sizeof(struct nonempty_string));
1117510990 {
11176- struct nonempty_string _10; memset(&_10, 0, sizeof(struct nonempty_string));
10991+ uint8_t _9; memset(&_9, 0, sizeof(uint8_t));
10992+ _9 = 42;
10993+ struct string _10; memset(&_10, 0, sizeof(struct string));
1117710994 {
11178- resid(&_10);
10995+ struct nonempty_string _11; memset(&_11, 0, sizeof(struct nonempty_string));
10996+ {
10997+ resid(&_11);
10998+ }
10999+ nonempty_to_string(&_10, &_11);
11000+ nonempty_string$dest(&_11);
1117911001 }
11180- nonempty_to_string(&_9, &_10);
11181- nonempty_string$dest(&_10);
11002+ nonempty_string(&_8, &_9, &_10);
11003+ string$dest(&_10);
11004+ _IGNORE_(_9);
1118211005 }
11183- preapp(&_7, &_8, &_9);
11184- string$dest(&_9);
11185- _IGNORE_(_8);
11006+ nonempty_to_string(&_7, &_8);
11007+ nonempty_string$dest(&_8);
1118611008 }
1118711009 struct string _8; memset(&_8, 0, sizeof(struct string));
1118811010 {
11189- nonempty_to_string(&_8, &*id);
11011+ nonempty_to_string(&_8, &*ID);
1119011012 }
1119111013 strequ(&_6, &_7, &_8);
1119211014 string$dest(&_8);
@@ -11234,7 +11056,7 @@
1123411056 {
1123511057 struct string _7; memset(&_7, 0, sizeof(struct string));
1123611058 {
11237- nonempty_to_string(&_7, &*id);
11059+ nonempty_to_string(&_7, &*ID);
1123811060 }
1123911061 PutStr(0 /* _6 */, &*err, &_7);
1124011062 string$dest(&_7);
@@ -12035,7 +11857,7 @@
1203511857 }
1203611858 }
1203711859
12038-void find_var_report_unused_and_mark_used(bool *const _0, const struct stack/*var*/ *const vscope, const struct string *const id)
11860+void find_var_report_unused_and_mark_used(bool *const _0, const struct stack/*var*/ *const vscope, const struct nonempty_string *const id)
1203911861 {
1204011862 if(vscope->fill > 0)
1204111863 {
@@ -12051,7 +11873,12 @@
1205111873 struct nonempty_string *_3 = &(*found).id;
1205211874 nonempty_to_string(&_2, &*_3);
1205311875 }
12054- strequ(&_1, &_2, &*id);
11876+ struct string _3; memset(&_3, 0, sizeof(struct string));
11877+ {
11878+ nonempty_to_string(&_3, &*id);
11879+ }
11880+ strequ(&_1, &_2, &_3);
11881+ string$dest(&_3);
1205511882 string$dest(&_2);
1205611883 }
1205711884 if(_1)
@@ -12122,7 +11949,7 @@
1212211949 }
1212311950 }
1212411951
12125-void FindParAndMarkUsed$(struct stack/*qtypepureid*/ *const _0, const struct StreamOut *const err, const struct linecol *const txtpos, const struct stack/*par*/ *const pscope, const struct string *const id)
11952+void FindParAndMarkUsed$(struct stack/*qtypepureid*/ *const _0, const struct StreamOut *const err, const struct linecol *const txtpos, const struct stack/*par*/ *const pscope, const struct nonempty_string *const id)
1212611953 {
1212711954 if(pscope->fill > 0)
1212811955 {
@@ -12133,21 +11960,26 @@
1213311960 struct par *found = ((struct par *)(_rest.data)) + _rest.fill; // REFERENCE - memory must NOT be de-allocated when leaving scope!!!
1213411961 bool _1;
1213511962 {
12136- struct string _2; memset(&_2, 0, sizeof(struct string));
11963+ struct cmp _2; memset(&_2, 0, sizeof(struct cmp));
1213711964 {
1213811965 struct nonempty_string *_3 = &(*found).id;
12139- nonempty_to_string(&_2, &*_3);
11966+ struct nonempty_string _4; memset(&_4, 0, sizeof(struct nonempty_string));
11967+ {
11968+ uint8_t _5; memset(&_5, 0, sizeof(uint8_t));
11969+ _5 = 42;
11970+ struct string _6; memset(&_6, 0, sizeof(struct string));
11971+ {
11972+ nonempty_to_string(&_6, &*id);
11973+ }
11974+ nonempty_string(&_4, &_5, &_6);
11975+ string$dest(&_6);
11976+ _IGNORE_(_5);
11977+ }
11978+ cmp$nonempty_string(&_2, &*_3, &_4);
11979+ nonempty_string$dest(&_4);
1214011980 }
12141- struct string _3; memset(&_3, 0, sizeof(struct string));
12142- {
12143- uint8_t _4; memset(&_4, 0, sizeof(uint8_t));
12144- _4 = 42;
12145- preapp(&_3, &_4, &*id);
12146- _IGNORE_(_4);
12147- }
12148- strequ(&_1, &_2, &_3);
12149- string$dest(&_3);
12150- string$dest(&_2);
11981+ is_equ(&_1, &_2);
11982+ cmp$dest(&_2);
1215111983 }
1215211984 if(_1)
1215311985 {
@@ -12169,7 +12001,12 @@
1216912001 string$dest(&_5);
1217012002 }
1217112003 {
12172- PutStr(0 /* _5 */, &*err, &*id);
12004+ struct string _6; memset(&_6, 0, sizeof(struct string));
12005+ {
12006+ nonempty_to_string(&_6, &*id);
12007+ }
12008+ PutStr(0 /* _5 */, &*err, &_6);
12009+ string$dest(&_6);
1217312010 }
1217412011 {
1217512012 struct string _7; memset(&_7, 0, sizeof(struct string));
@@ -12192,7 +12029,7 @@
1219212029 }
1219312030 struct stack/*qtypepureid*/ _10; memset(&_10, 0, sizeof(struct stack/*qtypepureid*/));
1219412031 {
12195- empty(&_10, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2335);
12032+ empty(&_10, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2345);
1219612033 }
1219712034 clone$(&_2, &_10, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy);
1219812035 free$(&_10, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
@@ -12219,7 +12056,7 @@
1221912056 struct nonempty_string *_9 = &(*found).id;
1222012057 qtypepureid(&_7, &*_8, &*_9);
1222112058 }
12222- solid(&_6, &_7, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2341);
12059+ solid(&_6, &_7, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2351);
1222312060 qtypepureid$dest(&_7);
1222412061 }
1222512062 clone$(&_2, &_6, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy);
@@ -12248,12 +12085,12 @@
1224812085 else
1224912086 {
1225012087 {
12251- empty(&*_0, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2347);
12088+ empty(&*_0, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2357);
1225212089 }
1225312090 }
1225412091 }
1225512092
12256-void FindVarAndMarkUsed$(struct stack/*qtypepureid*/ *const _0, const struct StreamOut *const err, const struct linecol *const txtpos, const struct stack/*var*/ *const vscope, const struct string *const id)
12093+void FindVarAndMarkUsed$(struct stack/*qtypepureid*/ *const _0, const struct StreamOut *const err, const struct linecol *const txtpos, const struct stack/*var*/ *const vscope, const struct nonempty_string *const id)
1225712094 {
1225812095 if(vscope->fill > 0)
1225912096 {
@@ -12264,21 +12101,26 @@
1226412101 struct var *found = ((struct var *)(_rest.data)) + _rest.fill; // REFERENCE - memory must NOT be de-allocated when leaving scope!!!
1226512102 bool _1;
1226612103 {
12267- struct string _2; memset(&_2, 0, sizeof(struct string));
12104+ struct cmp _2; memset(&_2, 0, sizeof(struct cmp));
1226812105 {
1226912106 struct nonempty_string *_3 = &(*found).id;
12270- nonempty_to_string(&_2, &*_3);
12107+ struct nonempty_string _4; memset(&_4, 0, sizeof(struct nonempty_string));
12108+ {
12109+ uint8_t _5; memset(&_5, 0, sizeof(uint8_t));
12110+ _5 = 95;
12111+ struct string _6; memset(&_6, 0, sizeof(struct string));
12112+ {
12113+ nonempty_to_string(&_6, &*id);
12114+ }
12115+ nonempty_string(&_4, &_5, &_6);
12116+ string$dest(&_6);
12117+ _IGNORE_(_5);
12118+ }
12119+ cmp$nonempty_string(&_2, &*_3, &_4);
12120+ nonempty_string$dest(&_4);
1227112121 }
12272- struct string _3; memset(&_3, 0, sizeof(struct string));
12273- {
12274- uint8_t _4; memset(&_4, 0, sizeof(uint8_t));
12275- _4 = 95;
12276- preapp(&_3, &_4, &*id);
12277- _IGNORE_(_4);
12278- }
12279- strequ(&_1, &_2, &_3);
12280- string$dest(&_3);
12281- string$dest(&_2);
12122+ is_equ(&_1, &_2);
12123+ cmp$dest(&_2);
1228212124 }
1228312125 if(_1)
1228412126 {
@@ -12300,7 +12142,12 @@
1230012142 string$dest(&_5);
1230112143 }
1230212144 {
12303- PutStr(0 /* _5 */, &*err, &*id);
12145+ struct string _6; memset(&_6, 0, sizeof(struct string));
12146+ {
12147+ nonempty_to_string(&_6, &*id);
12148+ }
12149+ PutStr(0 /* _5 */, &*err, &_6);
12150+ string$dest(&_6);
1230412151 }
1230512152 {
1230612153 struct string _7; memset(&_7, 0, sizeof(struct string));
@@ -12323,7 +12170,7 @@
1232312170 }
1232412171 struct stack/*qtypepureid*/ _10; memset(&_10, 0, sizeof(struct stack/*qtypepureid*/));
1232512172 {
12326- empty(&_10, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2366);
12173+ empty(&_10, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2376);
1232712174 }
1232812175 clone$(&_2, &_10, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy);
1232912176 free$(&_10, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
@@ -12350,7 +12197,7 @@
1235012197 struct nonempty_string *_9 = &(*found).id;
1235112198 qtypepureid(&_7, &*_8, &*_9);
1235212199 }
12353- solid(&_6, &_7, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2372);
12200+ solid(&_6, &_7, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2382);
1235412201 qtypepureid$dest(&_7);
1235512202 }
1235612203 clone$(&_2, &_6, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy);
@@ -12373,21 +12220,26 @@
1237312220 {
1237412221 bool _2;
1237512222 {
12376- struct string _3; memset(&_3, 0, sizeof(struct string));
12223+ struct cmp _3; memset(&_3, 0, sizeof(struct cmp));
1237712224 {
1237812225 struct nonempty_string *_4 = &(*found).id;
12379- nonempty_to_string(&_3, &*_4);
12226+ struct nonempty_string _5; memset(&_5, 0, sizeof(struct nonempty_string));
12227+ {
12228+ uint8_t _6; memset(&_6, 0, sizeof(uint8_t));
12229+ _6 = 42;
12230+ struct string _7; memset(&_7, 0, sizeof(struct string));
12231+ {
12232+ nonempty_to_string(&_7, &*id);
12233+ }
12234+ nonempty_string(&_5, &_6, &_7);
12235+ string$dest(&_7);
12236+ _IGNORE_(_6);
12237+ }
12238+ cmp$nonempty_string(&_3, &*_4, &_5);
12239+ nonempty_string$dest(&_5);
1238012240 }
12381- struct string _4; memset(&_4, 0, sizeof(struct string));
12382- {
12383- uint8_t _5; memset(&_5, 0, sizeof(uint8_t));
12384- _5 = 42;
12385- preapp(&_4, &_5, &*id);
12386- _IGNORE_(_5);
12387- }
12388- strequ(&_2, &_3, &_4);
12389- string$dest(&_4);
12390- string$dest(&_3);
12241+ is_equ(&_2, &_3);
12242+ cmp$dest(&_3);
1239112243 }
1239212244 if(_2)
1239312245 {
@@ -12409,7 +12261,12 @@
1240912261 string$dest(&_6);
1241012262 }
1241112263 {
12412- PutStr(0 /* _6 */, &*err, &*id);
12264+ struct string _7; memset(&_7, 0, sizeof(struct string));
12265+ {
12266+ nonempty_to_string(&_7, &*id);
12267+ }
12268+ PutStr(0 /* _6 */, &*err, &_7);
12269+ string$dest(&_7);
1241312270 }
1241412271 {
1241512272 struct string _8; memset(&_8, 0, sizeof(struct string));
@@ -12432,7 +12289,7 @@
1243212289 }
1243312290 struct stack/*qtypepureid*/ _11; memset(&_11, 0, sizeof(struct stack/*qtypepureid*/));
1243412291 {
12435- empty(&_11, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2389);
12292+ empty(&_11, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2399);
1243612293 }
1243712294 clone$(&_3, &_11, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy);
1243812295 free$(&_11, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
@@ -12459,7 +12316,7 @@
1245912316 struct nonempty_string *_10 = &(*found).id;
1246012317 qtypepureid(&_8, &*_9, &*_10);
1246112318 }
12462- solid(&_7, &_8, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2395);
12319+ solid(&_7, &_8, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2405);
1246312320 qtypepureid$dest(&_8);
1246412321 }
1246512322 clone$(&_3, &_7, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy);
@@ -12489,12 +12346,12 @@
1248912346 else
1249012347 {
1249112348 {
12492- empty(&*_0, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2401);
12349+ empty(&*_0, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2411);
1249312350 }
1249412351 }
1249512352 }
1249612353
12497-void exists_var(bool *const _0, const struct stack/*var*/ *const vscope, const struct string *const id)
12354+void exists_var(bool *const _0, const struct stack/*var*/ *const vscope, const struct nonempty_string *const id)
1249812355 {
1249912356 if(vscope->fill > 0)
1250012357 {
@@ -12505,21 +12362,26 @@
1250512362 struct var *found = ((struct var *)(_rest.data)) + _rest.fill; // REFERENCE - memory must NOT be de-allocated when leaving scope!!!
1250612363 bool _1;
1250712364 {
12508- struct string _2; memset(&_2, 0, sizeof(struct string));
12365+ struct cmp _2; memset(&_2, 0, sizeof(struct cmp));
1250912366 {
1251012367 struct nonempty_string *_3 = &(*found).id;
12511- nonempty_to_string(&_2, &*_3);
12368+ struct nonempty_string _4; memset(&_4, 0, sizeof(struct nonempty_string));
12369+ {
12370+ uint8_t _5; memset(&_5, 0, sizeof(uint8_t));
12371+ _5 = 95;
12372+ struct string _6; memset(&_6, 0, sizeof(struct string));
12373+ {
12374+ nonempty_to_string(&_6, &*id);
12375+ }
12376+ nonempty_string(&_4, &_5, &_6);
12377+ string$dest(&_6);
12378+ _IGNORE_(_5);
12379+ }
12380+ cmp$nonempty_string(&_2, &*_3, &_4);
12381+ nonempty_string$dest(&_4);
1251212382 }
12513- struct string _3; memset(&_3, 0, sizeof(struct string));
12514- {
12515- uint8_t _4; memset(&_4, 0, sizeof(uint8_t));
12516- _4 = 95;
12517- preapp(&_3, &_4, &*id);
12518- _IGNORE_(_4);
12519- }
12520- strequ(&_1, &_2, &_3);
12521- string$dest(&_3);
12522- string$dest(&_2);
12383+ is_equ(&_1, &_2);
12384+ cmp$dest(&_2);
1252312385 }
1252412386 if(_1)
1252512387 {
@@ -12529,21 +12391,26 @@
1252912391 {
1253012392 bool _2;
1253112393 {
12532- struct string _3; memset(&_3, 0, sizeof(struct string));
12394+ struct cmp _3; memset(&_3, 0, sizeof(struct cmp));
1253312395 {
1253412396 struct nonempty_string *_4 = &(*found).id;
12535- nonempty_to_string(&_3, &*_4);
12397+ struct nonempty_string _5; memset(&_5, 0, sizeof(struct nonempty_string));
12398+ {
12399+ uint8_t _6; memset(&_6, 0, sizeof(uint8_t));
12400+ _6 = 42;
12401+ struct string _7; memset(&_7, 0, sizeof(struct string));
12402+ {
12403+ nonempty_to_string(&_7, &*id);
12404+ }
12405+ nonempty_string(&_5, &_6, &_7);
12406+ string$dest(&_7);
12407+ _IGNORE_(_6);
12408+ }
12409+ cmp$nonempty_string(&_3, &*_4, &_5);
12410+ nonempty_string$dest(&_5);
1253612411 }
12537- struct string _4; memset(&_4, 0, sizeof(struct string));
12538- {
12539- uint8_t _5; memset(&_5, 0, sizeof(uint8_t));
12540- _5 = 42;
12541- preapp(&_4, &_5, &*id);
12542- _IGNORE_(_5);
12543- }
12544- strequ(&_2, &_3, &_4);
12545- string$dest(&_4);
12546- string$dest(&_3);
12412+ is_equ(&_2, &_3);
12413+ cmp$dest(&_3);
1254712414 }
1254812415 if(_2)
1254912416 {
@@ -12699,7 +12566,7 @@
1269912566 }
1270012567 }
1270112568
12702-void ScopesFindVarAndMarkUsed$(struct stack/*qtypepureid*/ *const _0, const struct StreamOut *const err, const struct linecol *const txtpos, const struct stack/*vscope*/ *const scopes, const struct string *const id)
12569+void ScopesFindVarAndMarkUsed$(struct stack/*qtypepureid*/ *const _0, const struct StreamOut *const err, const struct linecol *const txtpos, const struct stack/*vscope*/ *const scopes, const struct nonempty_string *const id)
1270312570 {
1270412571 if(scopes->fill > 0)
1270512572 {
@@ -12726,7 +12593,7 @@
1272612593 {
1272712594 const struct qtypepureid *v = (*_2).data;
1272812595 {
12729- solid(&_1, &*v, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2462);
12596+ solid(&_1, &*v, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2472);
1273012597 }
1273112598 }
1273212599 clone$(&*_0, &_1, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy);
@@ -12737,7 +12604,7 @@
1273712604 else
1273812605 {
1273912606 {
12740- empty(&*_0, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2464);
12607+ empty(&*_0, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2474);
1274112608 }
1274212609 }
1274312610 }
@@ -12832,13 +12699,13 @@
1283212699 {
1283312700 struct stack/*vscope*/ *_2 = &(*sp).elems;
1283412701 struct vscope *_3 = &(*sp).current;
12835- push(0 /* _1 */, &*_2, &*_3, sizeof(struct vscope), (void (*)(void *))vscope$dest, (void (*)(void *, const void *))vscope$copy, 2485);
12702+ push(0 /* _1 */, &*_2, &*_3, sizeof(struct vscope), (void (*)(void *))vscope$dest, (void (*)(void *, const void *))vscope$copy, 2495);
1283612703 }
1283712704 struct vscope *_2 = &(*sp).current;
1283812705 {
1283912706 struct stack/*var*/ _3; memset(&_3, 0, sizeof(struct stack/*var*/));
1284012707 {
12841- stack(&_3, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2486);
12708+ stack(&_3, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 2496);
1284212709 }
1284312710 vscope(&*_2, &_3);
1284412711 free$(&_3, sizeof(struct var), (void (*)(void *))var$dest);
@@ -12852,12 +12719,12 @@
1285212719 struct vscope *_1 = &(*sp).current;
1285312720 {
1285412721 struct stack/*vscope*/ *_2 = &(*sp).elems;
12855- pop$(&*_1, &*_2, sizeof(struct vscope), (void (*)(void *))vscope$dest, (void (*)(void *, const void *))vscope$copy, 2491);
12722+ pop$(&*_1, &*_2, sizeof(struct vscope), (void (*)(void *))vscope$dest, (void (*)(void *, const void *))vscope$copy, 2501);
1285612723 }
1285712724 }
1285812725 }
1285912726
12860-void ScopePathFindParAndMarkUsed$(struct stack/*qtypepureid*/ *const _0, const struct StreamOut *const err, const struct linecol *const txtpos, struct scopepath *const sp, const struct string *const id)
12727+void ScopePathFindParAndMarkUsed$(struct stack/*qtypepureid*/ *const _0, const struct StreamOut *const err, const struct linecol *const txtpos, struct scopepath *const sp, const struct nonempty_string *const id)
1286112728 {
1286212729 {
1286312730 struct stack/*par*/ *_1 = &(*sp).base.elems;
@@ -12865,7 +12732,7 @@
1286512732 }
1286612733 }
1286712734
12868-void ScopePathFindVarAndMarkUsed$(struct stack/*qtypepureid*/ *const _0, const struct StreamOut *const err, const struct linecol *const txtpos, struct scopepath *const sp, const struct string *const id)
12735+void ScopePathFindVarAndMarkUsed$(struct stack/*qtypepureid*/ *const _0, const struct StreamOut *const err, const struct linecol *const txtpos, struct scopepath *const sp, const struct nonempty_string *const id)
1286912736 {
1287012737 {
1287112738 struct stack/*qtypepureid*/ _found; memset(&_found, 0, sizeof(struct stack/*qtypepureid*/));
@@ -12886,7 +12753,7 @@
1288612753 {
1288712754 const struct qtypepureid *found = (*_2).data;
1288812755 {
12889- solid(&_1, &*found, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2503);
12756+ solid(&_1, &*found, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2513);
1289012757 }
1289112758 }
1289212759 clone$(&*_0, &_1, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy);
@@ -12898,28 +12765,52 @@
1289812765 void ScopePathFindParOrVarAndMarkUsed$(struct stack/*qtypepureid*/ *const _0, const struct StreamOut *const err, const struct linecol *const txtpos, struct scopepath *const sp, const struct string *const id)
1289912766 {
1290012767 {
12901- struct stack/*qtypepureid*/ _found; memset(&_found, 0, sizeof(struct stack/*qtypepureid*/));
1290212768 {
12903- ScopePathFindVarAndMarkUsed$(&_found, &*err, &*txtpos, &*sp, &*id);
12904- }
12905- struct stack/*qtypepureid*/ _1; memset(&_1, 0, sizeof(struct stack/*qtypepureid*/));
12906- const struct stack/*qtypepureid*/ *_2 = &(_found);
12907- if(!(*_2).size)
12908- {
12769+ struct stack/*nonempty_string*/ _1; memset(&_1, 0, sizeof(struct stack/*nonempty_string*/));
1290912770 {
12910- ScopePathFindParAndMarkUsed$(&_1, &*err, &*txtpos, &*sp, &*id);
12771+ to_nonempty_string(&_1, &*id);
1291112772 }
12912- }
12913- else
12914- {
12915- const struct qtypepureid *found = (*_2).data;
12773+ const struct stack/*nonempty_string*/ *id = &_1;
12774+ struct stack/*qtypepureid*/ _2; memset(&_2, 0, sizeof(struct stack/*qtypepureid*/));
12775+ const struct stack/*nonempty_string*/ *_3 = &(*id);
12776+ if(!(*_3).size)
1291612777 {
12917- solid(&_1, &*found, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2513);
12778+ {
12779+ empty(&_2, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2523);
12780+ }
1291812781 }
12919- }
12920- clone$(&*_0, &_1, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy);
12921- free$(&_1, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
12922- free$(&_found, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
12782+ else
12783+ {
12784+ const struct nonempty_string *id = (*_3).data;
12785+ {
12786+ struct stack/*qtypepureid*/ _found; memset(&_found, 0, sizeof(struct stack/*qtypepureid*/));
12787+ {
12788+ ScopePathFindVarAndMarkUsed$(&_found, &*err, &*txtpos, &*sp, &*id);
12789+ }
12790+ struct stack/*qtypepureid*/ _4; memset(&_4, 0, sizeof(struct stack/*qtypepureid*/));
12791+ const struct stack/*qtypepureid*/ *_5 = &(_found);
12792+ if(!(*_5).size)
12793+ {
12794+ {
12795+ ScopePathFindParAndMarkUsed$(&_4, &*err, &*txtpos, &*sp, &*id);
12796+ }
12797+ }
12798+ else
12799+ {
12800+ const struct qtypepureid *found = (*_5).data;
12801+ {
12802+ solid(&_4, &*found, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2532);
12803+ }
12804+ }
12805+ clone$(&_2, &_4, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy);
12806+ free$(&_4, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
12807+ free$(&_found, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
12808+ }
12809+ }
12810+ clone$(&*_0, &_2, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy);
12811+ free$(&_2, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
12812+ free$(&_1, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest);
12813+ }
1292312814 }
1292412815 }
1292512816
@@ -13042,7 +12933,7 @@
1304212933 {
1304312934 const struct xar_hidden *vi = ((*_2).xar_hidden).data;
1304412935 {
13045- empty(&_1, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2561);
12936+ empty(&_1, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2581);
1304612937 }
1304712938 __SUPPRESS_WARNING_UNUSED_VARIABLE__(vi);
1304812939 break;
@@ -13064,7 +12955,7 @@
1306412955 const struct nonempty_string *_6 = &(*var).id;
1306512956 qtypepureid(&_4, &*_5, &*_6);
1306612957 }
13067- solid(&_1, &_4, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2565);
12958+ solid(&_1, &_4, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2585);
1306812959 qtypepureid$dest(&_4);
1306912960 }
1307012961 }
@@ -13090,7 +12981,7 @@
1309012981 else
1309112982 {
1309212983 {
13093- empty(&*_0, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2571);
12984+ empty(&*_0, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 2591);
1309412985 }
1309512986 }
1309612987 }
@@ -13269,16 +13160,16 @@
1326913160 }
1327013161 }
1327113162
13272-void Climb(void *const _0, const struct StreamOut *const out, const struct StreamOut *const err, const struct linecol *const txtpos, const struct stack/*string*/ *const argids)
13163+void Climb(void *const _0, const struct StreamOut *const out, const struct StreamOut *const err, const struct linecol *const txtpos, const struct stack/*nonempty_string*/ *const argids)
1327313164 {
1327413165 {
1327513166 if(argids->fill > 0)
1327613167 {
13277- struct stack/*string*/ _rest; memset(&_rest, 0, sizeof(struct stack/*string*/));
13168+ struct stack/*nonempty_string*/ _rest; memset(&_rest, 0, sizeof(struct stack/*nonempty_string*/));
1327813169 _rest.fill = argids->fill - 1;
1327913170 _rest.data = argids->data; // REFERENCE - memory must NOT be de-allocated when leaving scope!!!
1328013171 _rest.size = (4 * (argids->fill + 1) > argids->size + 1) ? argids->size : (argids->size + 1) / 2 - 1;
13281- const struct string *argid = ((const struct string *)(_rest.data)) + _rest.fill; // REFERENCE - memory must NOT be de-allocated when leaving scope!!!
13172+ const struct nonempty_string *argid = ((const struct nonempty_string *)(_rest.data)) + _rest.fill; // REFERENCE - memory must NOT be de-allocated when leaving scope!!!
1328213173 {
1328313174 {
1328413175 Climb(0 /* _2 */, &*out, &*err, &*txtpos, &_rest);
@@ -13290,7 +13181,12 @@
1329013181 string$dest(&_4);
1329113182 }
1329213183 {
13293- PutStr(0 /* _4 */, &*out, &*argid);
13184+ struct string _5; memset(&_5, 0, sizeof(struct string));
13185+ {
13186+ nonempty_to_string(&_5, &*argid);
13187+ }
13188+ PutStr(0 /* _4 */, &*out, &_5);
13189+ string$dest(&_5);
1329413190 }
1329513191 }
1329613192 }
@@ -13297,7 +13193,7 @@
1329713193 }
1329813194 }
1329913195
13300-void DoCall(void *const _0, const struct StreamOut *const out, const struct StreamOut *const err, const struct linecol *const txtpos, const struct stack/*string*/ *const argids, const struct qtypepureid *const store)
13196+void DoCall(void *const _0, const struct StreamOut *const out, const struct StreamOut *const err, const struct linecol *const txtpos, const struct stack/*nonempty_string*/ *const argids, const struct qtypepureid *const store)
1330113197 {
1330213198 {
1330313199 bool _2;
@@ -13686,8 +13582,7 @@
1368613582 {
1368713583 bool _1; memset(&_1, 0, sizeof(bool));
1368813584 {
13689- const struct string *_2 = &(*id).rest;
13690- idpart(&_1, &*_2);
13585+ idpart(&_1, &*id);
1369113586 }
1369213587 bool _2; memset(&_2, 0, sizeof(bool));
1369313588 _2 = 0;
@@ -13702,8 +13597,7 @@
1370213597 {
1370313598 bool _1; memset(&_1, 0, sizeof(bool));
1370413599 {
13705- const struct string *_2 = &(*id).rest;
13706- idpart(&_1, &*_2);
13600+ idpart(&_1, &*id);
1370713601 }
1370813602 bool _2; memset(&_2, 0, sizeof(bool));
1370913603 _2 = 1;
@@ -13763,7 +13657,7 @@
1376313657 }
1376413658 }
1376513659
13766-void findFnDefAndMarkUsed(struct stack/*def*/ *const _0, const struct stack/*def*/ *const defs, const struct string *const id)
13660+void findFnDefAndMarkUsed(struct stack/*def*/ *const _0, const struct stack/*def*/ *const defs, const struct nonempty_string *const id)
1376713661 {
1376813662 if(defs->fill > 0)
1376913663 {
@@ -13774,13 +13668,13 @@
1377413668 struct def *cur = ((struct def *)(_rest.data)) + _rest.fill; // REFERENCE - memory must NOT be de-allocated when leaving scope!!!
1377513669 bool _1;
1377613670 {
13777- struct string _2; memset(&_2, 0, sizeof(struct string));
13671+ struct cmp _2; memset(&_2, 0, sizeof(struct cmp));
1377813672 {
1377913673 struct nonempty_string *_3 = &(*cur).id;
13780- nonempty_to_string(&_2, &*_3);
13674+ cmp$nonempty_string(&_2, &*id, &*_3);
1378113675 }
13782- strequ(&_1, &*id, &_2);
13783- string$dest(&_2);
13676+ is_equ(&_1, &_2);
13677+ cmp$dest(&_2);
1378413678 }
1378513679 if(_1)
1378613680 {
@@ -13789,7 +13683,7 @@
1378913683 *_2 = 1;
1379013684 struct stack/*def*/ _3; memset(&_3, 0, sizeof(struct stack/*def*/));
1379113685 {
13792- solid(&_3, &*cur, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 2680);
13686+ solid(&_3, &*cur, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 2700);
1379313687 }
1379413688 clone$(&*_0, &_3, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy);
1379513689 free$(&_3, sizeof(struct def), (void (*)(void *))def$dest);
@@ -13805,12 +13699,12 @@
1380513699 else
1380613700 {
1380713701 {
13808- empty(&*_0, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 2685);
13702+ empty(&*_0, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 2705);
1380913703 }
1381013704 }
1381113705 }
1381213706
13813-void findFnDef(struct stack/*def*/ *const _0, const struct stack/*def*/ *const defs, const struct string *const id)
13707+void findFnDef(struct stack/*def*/ *const _0, const struct stack/*def*/ *const defs, const struct nonempty_string *const id)
1381413708 {
1381513709 if(defs->fill > 0)
1381613710 {
@@ -13821,18 +13715,18 @@
1382113715 const struct def *cur = ((const struct def *)(_rest.data)) + _rest.fill; // REFERENCE - memory must NOT be de-allocated when leaving scope!!!
1382213716 bool _1;
1382313717 {
13824- struct string _2; memset(&_2, 0, sizeof(struct string));
13718+ struct cmp _2; memset(&_2, 0, sizeof(struct cmp));
1382513719 {
1382613720 const struct nonempty_string *_3 = &(*cur).id;
13827- nonempty_to_string(&_2, &*_3);
13721+ cmp$nonempty_string(&_2, &*id, &*_3);
1382813722 }
13829- strequ(&_1, &*id, &_2);
13830- string$dest(&_2);
13723+ is_equ(&_1, &_2);
13724+ cmp$dest(&_2);
1383113725 }
1383213726 if(_1)
1383313727 {
1383413728 {
13835- solid(&*_0, &*cur, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 2691);
13729+ solid(&*_0, &*cur, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 2711);
1383613730 }
1383713731 }
1383813732 else
@@ -13845,7 +13739,7 @@
1384513739 else
1384613740 {
1384713741 {
13848- empty(&*_0, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 2695);
13742+ empty(&*_0, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 2715);
1384913743 }
1385013744 }
1385113745 }
@@ -13855,7 +13749,7 @@
1385513749 {
1385613750 struct stack/*flavour*/ _1; memset(&_1, 0, sizeof(struct stack/*flavour*/));
1385713751 {
13858- solid(&_1, &*type, sizeof(struct flavour), (void (*)(void *))flavour$dest, (void (*)(void *, const void *))flavour$copy, 2697);
13752+ solid(&_1, &*type, sizeof(struct flavour), (void (*)(void *))flavour$dest, (void (*)(void *, const void *))flavour$copy, 2717);
1385913753 }
1386013754 bool _2; memset(&_2, 0, sizeof(bool));
1386113755 _2 = 0;
@@ -13870,7 +13764,7 @@
1387013764 {
1387113765 struct stack/*flavour*/ _1; memset(&_1, 0, sizeof(struct stack/*flavour*/));
1387213766 {
13873- solid(&_1, &*type, sizeof(struct flavour), (void (*)(void *))flavour$dest, (void (*)(void *, const void *))flavour$copy, 2698);
13767+ solid(&_1, &*type, sizeof(struct flavour), (void (*)(void *))flavour$dest, (void (*)(void *, const void *))flavour$copy, 2718);
1387413768 }
1387513769 bool _2; memset(&_2, 0, sizeof(bool));
1387613770 _2 = 1;
@@ -13933,7 +13827,7 @@
1393313827 {
1393413828 {
1393513829 {
13936- push(0 /* _1 */, &*defs, &*def, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 2717);
13830+ push(0 /* _1 */, &*defs, &*def, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 2737);
1393713831 }
1393813832 }
1393913833 }
@@ -13942,7 +13836,7 @@
1394213836 {
1394313837 {
1394413838 {
13945- push(0 /* _1 */, &*pars, &*par, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 2722);
13839+ push(0 /* _1 */, &*pars, &*par, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 2742);
1394613840 }
1394713841 }
1394813842 }
@@ -14007,7 +13901,7 @@
1400713901 parused(&_6, &_7);
1400813902 qtypepureid$dest(&_7);
1400913903 }
14010- push(0 /* _4 */, &*_5, &_6, sizeof(struct par), (void (*)(void *))par$dest, (void (*)(void *, const void *))par$copy, 2730);
13904+ push(0 /* _4 */, &*_5, &_6, sizeof(struct par), (void (*)(void *))par$dest, (void (*)(void *, const void *))par$copy, 2750);
1401113905 par$dest(&_6);
1401213906 }
1401313907 qtypepureid$dest(&_parext);
@@ -14089,7 +13983,7 @@
1408913983 parinit(&_7, &_8);
1409013984 qtypepureid$dest(&_8);
1409113985 }
14092- push(0 /* _5 */, &*_6, &_7, sizeof(struct par), (void (*)(void *))par$dest, (void (*)(void *, const void *))par$copy, 2739);
13986+ push(0 /* _5 */, &*_6, &_7, sizeof(struct par), (void (*)(void *))par$dest, (void (*)(void *, const void *))par$copy, 2759);
1409313987 par$dest(&_7);
1409413988 }
1409513989 qtypepureid$dest(&_parext);
@@ -14747,7 +14641,7 @@
1474714641 }
1474814642 }
1474914643
14750-void AssertResultTypePure$(void *const _0, const struct StreamOut *const err, const struct linecol *const txtpos, const struct string *const fn, const struct qtypepure *const want, const struct type_pure *const have)
14644+void AssertResultTypePure$(void *const _0, const struct StreamOut *const err, const struct linecol *const txtpos, const struct nonempty_string *const fn, const struct qtypepure *const want, const struct type_pure *const have)
1475114645 {
1475214646 {
1475314647 bool _2;
@@ -14778,7 +14672,12 @@
1477814672 string$dest(&_6);
1477914673 }
1478014674 {
14781- PutStr(0 /* _6 */, &*err, &*fn);
14675+ struct string _7; memset(&_7, 0, sizeof(struct string));
14676+ {
14677+ nonempty_to_string(&_7, &*fn);
14678+ }
14679+ PutStr(0 /* _6 */, &*err, &_7);
14680+ string$dest(&_7);
1478214681 }
1478314682 {
1478414683 struct string _8; memset(&_8, 0, sizeof(struct string));
@@ -15002,7 +14901,7 @@
1500214901 const struct typepureid *cur = (*_9).data;
1500314902 {
1500414903 {
15005- push(0 /* _10 */, &*path, &*id, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest, (void (*)(void *, const void *))nonempty_string$copy, 3018);
14904+ push(0 /* _10 */, &*path, &*id, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest, (void (*)(void *, const void *))nonempty_string$copy, 3038);
1500614905 }
1500714906 struct type_pure _11; memset(&_11, 0, sizeof(struct type_pure));
1500814907 {
@@ -15301,11 +15200,11 @@
1530115200 return;
1530215201 }
1530315202
15304-void ParseExpr$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct string *const id, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids);
15305-void ParseBlock$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, const uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids);
15306-void ParseBlockRaw$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, const uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids);
15307-void ParseArg$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct qtypepureid *const store, const struct qtypepureid *const par, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const uint64_t *const parnr, const struct def *const def, struct stack/*string*/ *const argids, const struct string *const callee, const struct stack/*type_pure*/ *const st, struct stack/*idpath*/ *const ips);
15308-void ParseCallComplete$(void *const _0/*, mut scopepath sp, mut u64 tmpnr*//**//**//*, bool action*/, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, const struct def *const def, const struct qtypepureid *const store, const struct requires_totality *const totality, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids, struct stack/*string*/ *const argids, const struct string *const callee, const struct stack/*type_pure*/ *const st_)
15203+void ParseExpr$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct string *const id, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids);
15204+void ParseBlock$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, const uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids);
15205+void ParseBlockRaw$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, const uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids);
15206+void ParseArg$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct qtypepureid *const store, const struct qtypepureid *const par, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const uint64_t *const parnr, const struct def *const def, struct stack/*nonempty_string*/ *const argids, const struct nonempty_string *const callee, const struct stack/*type_pure*/ *const st, struct stack/*idpath*/ *const ips);
15207+void ParseCallComplete$(void *const _0/*, mut scopepath sp, mut u64 tmpnr*//**//**//*, bool action*/, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, const struct def *const def, const struct qtypepureid *const store, const struct requires_totality *const totality, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids, struct stack/*nonempty_string*/ *const argids, const struct nonempty_string *const callee, const struct stack/*type_pure*/ *const st_)
1530915208 {
1531015209 {
1531115210 bool _2;
@@ -15334,7 +15233,12 @@
1533415233 }
1533515234 {
1533615235 const struct StreamOut *_5 = &(*streams).err;
15337- PutStr(0 /* _4 */, &*_5, &*callee);
15236+ struct string _6; memset(&_6, 0, sizeof(struct string));
15237+ {
15238+ nonempty_to_string(&_6, &*callee);
15239+ }
15240+ PutStr(0 /* _4 */, &*_5, &_6);
15241+ string$dest(&_6);
1533815242 }
1533915243 {
1534015244 const struct StreamOut *_6 = &(*streams).err;
@@ -15343,7 +15247,12 @@
1534315247 }
1534415248 bool _4;
1534515249 {
15346- strequ(&_4, &*callee, &*self);
15250+ struct cmp _5; memset(&_5, 0, sizeof(struct cmp));
15251+ {
15252+ cmp$nonempty_string(&_5, &*callee, &*self);
15253+ }
15254+ is_equ(&_4, &_5);
15255+ cmp$dest(&_5);
1534715256 }
1534815257 if(_4)
1534915258 {
@@ -15377,7 +15286,12 @@
1537715286 }
1537815287 {
1537915288 const struct StreamOut *_12 = &(*streams).err;
15380- PutStr(0 /* _11 */, &*_12, &*callee);
15289+ struct string _13; memset(&_13, 0, sizeof(struct string));
15290+ {
15291+ nonempty_to_string(&_13, &*callee);
15292+ }
15293+ PutStr(0 /* _11 */, &*_12, &_13);
15294+ string$dest(&_13);
1538115295 }
1538215296 {
1538315297 const struct StreamOut *_13 = &(*streams).err;
@@ -15429,7 +15343,12 @@
1542915343 }
1543015344 bool _6;
1543115345 {
15432- isop1(&_6, &*callee);
15346+ struct string _7; memset(&_7, 0, sizeof(struct string));
15347+ {
15348+ nonempty_to_string(&_7, &*callee);
15349+ }
15350+ isop1(&_6, &_7);
15351+ string$dest(&_7);
1543315352 }
1543415353 if(_6)
1543515354 {
@@ -15446,7 +15365,12 @@
1544615365 }
1544715366 {
1544815367 const struct StreamOut *_11 = &(*streams).err;
15449- PutStr(0 /* _10 */, &*_11, &*callee);
15368+ struct string _12; memset(&_12, 0, sizeof(struct string));
15369+ {
15370+ nonempty_to_string(&_12, &*callee);
15371+ }
15372+ PutStr(0 /* _10 */, &*_11, &_12);
15373+ string$dest(&_12);
1545015374 }
1545115375 {
1545215376 const struct StreamOut *_12 = &(*streams).err;
@@ -15474,7 +15398,12 @@
1547415398 {
1547515399 {
1547615400 const struct StreamOut *_13 = &(*streams).err;
15477- PutStr(0 /* _12 */, &*_13, &*callee);
15401+ struct string _14; memset(&_14, 0, sizeof(struct string));
15402+ {
15403+ nonempty_to_string(&_14, &*callee);
15404+ }
15405+ PutStr(0 /* _12 */, &*_13, &_14);
15406+ string$dest(&_14);
1547815407 }
1547915408 {
1548015409 const struct StreamOut *_14 = &(*streams).err;
@@ -15497,11 +15426,11 @@
1549715426 Fail$(0 /* _15 */, &*_16, &*txtpos);
1549815427 }
1549915428 }
15500- struct string _arg0; memset(&_arg0, 0, sizeof(struct string));
15429+ struct nonempty_string _arg0; memset(&_arg0, 0, sizeof(struct nonempty_string));
1550115430 {
1550215431 uint64_t _12; memset(&_12, 0, sizeof(uint64_t));
1550315432 _12 = 0;
15504- at_get$(&_arg0, &*argids, &_12, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 3145);
15433+ at_get$(&_arg0, &*argids, &_12, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest, (void (*)(void *, const void *))nonempty_string$copy, 3165);
1550515434 _IGNORE_(_12);
1550615435 }
1550715436 bool _13;
@@ -15535,7 +15464,12 @@
1553515464 const struct StreamOut *_18 = &(*streams).out;
1553615465 struct string _19; memset(&_19, 0, sizeof(struct string));
1553715466 {
15538- to_op1(&_19, &*callee);
15467+ struct string _20; memset(&_20, 0, sizeof(struct string));
15468+ {
15469+ nonempty_to_string(&_20, &*callee);
15470+ }
15471+ to_op1(&_19, &_20);
15472+ string$dest(&_20);
1553915473 }
1554015474 PutStr(0 /* _17 */, &*_18, &_19);
1554115475 string$dest(&_19);
@@ -15549,7 +15483,12 @@
1554915483 }
1555015484 {
1555115485 const struct StreamOut *_20 = &(*streams).out;
15552- PutStr(0 /* _19 */, &*_20, &_arg0);
15486+ struct string _21; memset(&_21, 0, sizeof(struct string));
15487+ {
15488+ nonempty_to_string(&_21, &_arg0);
15489+ }
15490+ PutStr(0 /* _19 */, &*_20, &_21);
15491+ string$dest(&_21);
1555315492 }
1555415493 {
1555515494 const struct StreamOut *_21 = &(*streams).out;
@@ -15563,7 +15502,12 @@
1556315502 {
1556415503 {
1556515504 const struct StreamOut *_15 = &(*streams).err;
15566- PutStr(0 /* _14 */, &*_15, &*callee);
15505+ struct string _16; memset(&_16, 0, sizeof(struct string));
15506+ {
15507+ nonempty_to_string(&_16, &*callee);
15508+ }
15509+ PutStr(0 /* _14 */, &*_15, &_16);
15510+ string$dest(&_16);
1556715511 }
1556815512 {
1556915513 const struct StreamOut *_16 = &(*streams).err;
@@ -15577,7 +15521,7 @@
1557715521 Fail$(0 /* _16 */, &*_17, &*txtpos);
1557815522 }
1557915523 }
15580- string$dest(&_arg0);
15524+ nonempty_string$dest(&_arg0);
1558115525 }
1558215526 }
1558315527 }
@@ -15585,7 +15529,12 @@
1558515529 {
1558615530 bool _7;
1558715531 {
15588- isop2(&_7, &*callee);
15532+ struct string _8; memset(&_8, 0, sizeof(struct string));
15533+ {
15534+ nonempty_to_string(&_8, &*callee);
15535+ }
15536+ isop2(&_7, &_8);
15537+ string$dest(&_8);
1558915538 }
1559015539 if(_7)
1559115540 {
@@ -15602,7 +15551,12 @@
1560215551 }
1560315552 {
1560415553 const struct StreamOut *_12 = &(*streams).err;
15605- PutStr(0 /* _11 */, &*_12, &*callee);
15554+ struct string _13; memset(&_13, 0, sizeof(struct string));
15555+ {
15556+ nonempty_to_string(&_13, &*callee);
15557+ }
15558+ PutStr(0 /* _11 */, &*_12, &_13);
15559+ string$dest(&_13);
1560615560 }
1560715561 {
1560815562 const struct StreamOut *_13 = &(*streams).err;
@@ -15630,7 +15584,12 @@
1563015584 {
1563115585 {
1563215586 const struct StreamOut *_14 = &(*streams).err;
15633- PutStr(0 /* _13 */, &*_14, &*callee);
15587+ struct string _15; memset(&_15, 0, sizeof(struct string));
15588+ {
15589+ nonempty_to_string(&_15, &*callee);
15590+ }
15591+ PutStr(0 /* _13 */, &*_14, &_15);
15592+ string$dest(&_15);
1563415593 }
1563515594 {
1563615595 const struct StreamOut *_15 = &(*streams).err;
@@ -15653,18 +15612,18 @@
1565315612 Fail$(0 /* _16 */, &*_17, &*txtpos);
1565415613 }
1565515614 }
15656- struct string _arg0; memset(&_arg0, 0, sizeof(struct string));
15615+ struct nonempty_string _arg0; memset(&_arg0, 0, sizeof(struct nonempty_string));
1565715616 {
1565815617 uint64_t _13; memset(&_13, 0, sizeof(uint64_t));
1565915618 _13 = 0;
15660- at_get$(&_arg0, &*argids, &_13, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 3178);
15619+ at_get$(&_arg0, &*argids, &_13, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest, (void (*)(void *, const void *))nonempty_string$copy, 3198);
1566115620 _IGNORE_(_13);
1566215621 }
15663- struct string _arg1; memset(&_arg1, 0, sizeof(struct string));
15622+ struct nonempty_string _arg1; memset(&_arg1, 0, sizeof(struct nonempty_string));
1566415623 {
1566515624 uint64_t _13; memset(&_13, 0, sizeof(uint64_t));
1566615625 _13 = 1;
15667- at_get$(&_arg1, &*argids, &_13, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 3179);
15626+ at_get$(&_arg1, &*argids, &_13, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest, (void (*)(void *, const void *))nonempty_string$copy, 3199);
1566815627 _IGNORE_(_13);
1566915628 }
1567015629 bool _14;
@@ -15696,7 +15655,12 @@
1569615655 }
1569715656 {
1569815657 const struct StreamOut *_19 = &(*streams).out;
15699- PutStr(0 /* _18 */, &*_19, &_arg0);
15658+ struct string _20; memset(&_20, 0, sizeof(struct string));
15659+ {
15660+ nonempty_to_string(&_20, &_arg0);
15661+ }
15662+ PutStr(0 /* _18 */, &*_19, &_20);
15663+ string$dest(&_20);
1570015664 }
1570115665 {
1570215666 const struct StreamOut *_20 = &(*streams).out;
@@ -15709,7 +15673,12 @@
1570915673 const struct StreamOut *_21 = &(*streams).out;
1571015674 struct string _22; memset(&_22, 0, sizeof(struct string));
1571115675 {
15712- to_op2(&_22, &*callee);
15676+ struct string _23; memset(&_23, 0, sizeof(struct string));
15677+ {
15678+ nonempty_to_string(&_23, &*callee);
15679+ }
15680+ to_op2(&_22, &_23);
15681+ string$dest(&_23);
1571315682 }
1571415683 PutStr(0 /* _20 */, &*_21, &_22);
1571515684 string$dest(&_22);
@@ -15723,7 +15692,12 @@
1572315692 }
1572415693 {
1572515694 const struct StreamOut *_23 = &(*streams).out;
15726- PutStr(0 /* _22 */, &*_23, &_arg1);
15695+ struct string _24; memset(&_24, 0, sizeof(struct string));
15696+ {
15697+ nonempty_to_string(&_24, &_arg1);
15698+ }
15699+ PutStr(0 /* _22 */, &*_23, &_24);
15700+ string$dest(&_24);
1572715701 }
1572815702 {
1572915703 const struct StreamOut *_24 = &(*streams).out;
@@ -15737,7 +15711,12 @@
1573715711 {
1573815712 {
1573915713 const struct StreamOut *_16 = &(*streams).err;
15740- PutStr(0 /* _15 */, &*_16, &*callee);
15714+ struct string _17; memset(&_17, 0, sizeof(struct string));
15715+ {
15716+ nonempty_to_string(&_17, &*callee);
15717+ }
15718+ PutStr(0 /* _15 */, &*_16, &_17);
15719+ string$dest(&_17);
1574115720 }
1574215721 {
1574315722 const struct StreamOut *_17 = &(*streams).err;
@@ -15751,8 +15730,8 @@
1575115730 Fail$(0 /* _17 */, &*_18, &*txtpos);
1575215731 }
1575315732 }
15754- string$dest(&_arg1);
15755- string$dest(&_arg0);
15733+ nonempty_string$dest(&_arg1);
15734+ nonempty_string$dest(&_arg0);
1575615735 }
1575715736 }
1575815737 }
@@ -15777,7 +15756,12 @@
1577715756 }
1577815757 {
1577915758 const struct StreamOut *_14 = &(*streams).err;
15780- PutStr(0 /* _13 */, &*_14, &*callee);
15759+ struct string _15; memset(&_15, 0, sizeof(struct string));
15760+ {
15761+ nonempty_to_string(&_15, &*callee);
15762+ }
15763+ PutStr(0 /* _13 */, &*_14, &_15);
15764+ string$dest(&_15);
1578115765 }
1578215766 {
1578315767 const struct StreamOut *_15 = &(*streams).err;
@@ -15821,7 +15805,12 @@
1582115805 }
1582215806 {
1582315807 const struct StreamOut *_17 = &(*streams).err;
15824- PutStr(0 /* _16 */, &*_17, &*callee);
15808+ struct string _18; memset(&_18, 0, sizeof(struct string));
15809+ {
15810+ nonempty_to_string(&_18, &*callee);
15811+ }
15812+ PutStr(0 /* _16 */, &*_17, &_18);
15813+ string$dest(&_18);
1582515814 }
1582615815 {
1582715816 const struct StreamOut *_18 = &(*streams).err;
@@ -15836,7 +15825,12 @@
1583615825 }
1583715826 {
1583815827 const struct StreamOut *_13 = &(*streams).out;
15839- PutStr(0 /* _12 */, &*_13, &*callee);
15828+ struct string _14; memset(&_14, 0, sizeof(struct string));
15829+ {
15830+ nonempty_to_string(&_14, &*callee);
15831+ }
15832+ PutStr(0 /* _12 */, &*_13, &_14);
15833+ string$dest(&_14);
1584015834 }
1584115835 {
1584215836 const struct StreamOut *_14 = &(*streams).out;
@@ -15860,7 +15854,12 @@
1586015854 {
1586115855 struct string _20; memset(&_20, 0, sizeof(struct string));
1586215856 init$fromliteral(&_20, "stack", 5);
15863- strequ(&_19, &_20, &*callee);
15857+ struct string _21; memset(&_21, 0, sizeof(struct string));
15858+ {
15859+ nonempty_to_string(&_21, &*callee);
15860+ }
15861+ strequ(&_19, &_20, &_21);
15862+ string$dest(&_21);
1586415863 string$dest(&_20);
1586515864 }
1586615865 bool _20; memset(&_20, 0, sizeof(bool));
@@ -15869,7 +15868,12 @@
1586915868 {
1587015869 struct string _22; memset(&_22, 0, sizeof(struct string));
1587115870 init$fromliteral(&_22, "empty", 5);
15872- strequ(&_21, &_22, &*callee);
15871+ struct string _23; memset(&_23, 0, sizeof(struct string));
15872+ {
15873+ nonempty_to_string(&_23, &*callee);
15874+ }
15875+ strequ(&_21, &_22, &_23);
15876+ string$dest(&_23);
1587315877 string$dest(&_22);
1587415878 }
1587515879 bool _22; memset(&_22, 0, sizeof(bool));
@@ -15876,7 +15880,12 @@
1587615880 {
1587715881 struct string _23; memset(&_23, 0, sizeof(struct string));
1587815882 init$fromliteral(&_23, "solid", 5);
15879- strequ(&_22, &_23, &*callee);
15883+ struct string _24; memset(&_24, 0, sizeof(struct string));
15884+ {
15885+ nonempty_to_string(&_24, &*callee);
15886+ }
15887+ strequ(&_22, &_23, &_24);
15888+ string$dest(&_24);
1588015889 string$dest(&_23);
1588115890 }
1588215891 or(&_20, &_21, &_22);
@@ -15895,7 +15904,12 @@
1589515904 {
1589615905 struct string _22; memset(&_22, 0, sizeof(struct string));
1589715906 init$fromliteral(&_22, "pop$", 4);
15898- strequ(&_21, &_22, &*callee);
15907+ struct string _23; memset(&_23, 0, sizeof(struct string));
15908+ {
15909+ nonempty_to_string(&_23, &*callee);
15910+ }
15911+ strequ(&_21, &_22, &_23);
15912+ string$dest(&_23);
1589915913 string$dest(&_22);
1590015914 }
1590115915 bool _22; memset(&_22, 0, sizeof(bool));
@@ -15902,7 +15916,12 @@
1590215916 {
1590315917 struct string _23; memset(&_23, 0, sizeof(struct string));
1590415918 init$fromliteral(&_23, "pop_opt", 7);
15905- strequ(&_22, &_23, &*callee);
15919+ struct string _24; memset(&_24, 0, sizeof(struct string));
15920+ {
15921+ nonempty_to_string(&_24, &*callee);
15922+ }
15923+ strequ(&_22, &_23, &_24);
15924+ string$dest(&_24);
1590615925 string$dest(&_23);
1590715926 }
1590815927 or(&_20, &_21, &_22);
@@ -15915,7 +15934,12 @@
1591515934 {
1591615935 struct string _23; memset(&_23, 0, sizeof(struct string));
1591715936 init$fromliteral(&_23, "pop_opt_base$", 13);
15918- strequ(&_22, &_23, &*callee);
15937+ struct string _24; memset(&_24, 0, sizeof(struct string));
15938+ {
15939+ nonempty_to_string(&_24, &*callee);
15940+ }
15941+ strequ(&_22, &_23, &_24);
15942+ string$dest(&_24);
1591915943 string$dest(&_23);
1592015944 }
1592115945 bool _23; memset(&_23, 0, sizeof(bool));
@@ -15922,7 +15946,12 @@
1592215946 {
1592315947 struct string _24; memset(&_24, 0, sizeof(struct string));
1592415948 init$fromliteral(&_24, "push", 4);
15925- strequ(&_23, &_24, &*callee);
15949+ struct string _25; memset(&_25, 0, sizeof(struct string));
15950+ {
15951+ nonempty_to_string(&_25, &*callee);
15952+ }
15953+ strequ(&_23, &_24, &_25);
15954+ string$dest(&_25);
1592615955 string$dest(&_24);
1592715956 }
1592815957 or(&_21, &_22, &_23);
@@ -15945,7 +15974,12 @@
1594515974 {
1594615975 struct string _21; memset(&_21, 0, sizeof(struct string));
1594715976 init$fromliteral(&_21, "at_get$", 7);
15948- strequ(&_20, &_21, &*callee);
15977+ struct string _22; memset(&_22, 0, sizeof(struct string));
15978+ {
15979+ nonempty_to_string(&_22, &*callee);
15980+ }
15981+ strequ(&_20, &_21, &_22);
15982+ string$dest(&_22);
1594915983 string$dest(&_21);
1595015984 }
1595115985 bool _21; memset(&_21, 0, sizeof(bool));
@@ -15952,7 +15986,12 @@
1595215986 {
1595315987 struct string _22; memset(&_22, 0, sizeof(struct string));
1595415988 init$fromliteral(&_22, "at_set$", 7);
15955- strequ(&_21, &_22, &*callee);
15989+ struct string _23; memset(&_23, 0, sizeof(struct string));
15990+ {
15991+ nonempty_to_string(&_23, &*callee);
15992+ }
15993+ strequ(&_21, &_22, &_23);
15994+ string$dest(&_23);
1595615995 string$dest(&_22);
1595715996 }
1595815997 or(&_19, &_20, &_21);
@@ -15965,7 +16004,12 @@
1596516004 {
1596616005 struct string _22; memset(&_22, 0, sizeof(struct string));
1596716006 init$fromliteral(&_22, "top_get$", 8);
15968- strequ(&_21, &_22, &*callee);
16007+ struct string _23; memset(&_23, 0, sizeof(struct string));
16008+ {
16009+ nonempty_to_string(&_23, &*callee);
16010+ }
16011+ strequ(&_21, &_22, &_23);
16012+ string$dest(&_23);
1596916013 string$dest(&_22);
1597016014 }
1597116015 bool _22; memset(&_22, 0, sizeof(bool));
@@ -15972,7 +16016,12 @@
1597216016 {
1597316017 struct string _23; memset(&_23, 0, sizeof(struct string));
1597416018 init$fromliteral(&_23, "top_set$", 8);
15975- strequ(&_22, &_23, &*callee);
16019+ struct string _24; memset(&_24, 0, sizeof(struct string));
16020+ {
16021+ nonempty_to_string(&_24, &*callee);
16022+ }
16023+ strequ(&_22, &_23, &_24);
16024+ string$dest(&_24);
1597616025 string$dest(&_23);
1597716026 }
1597816027 or(&_20, &_21, &_22);
@@ -16002,7 +16051,12 @@
1600216051 }
1600316052 {
1600416053 const struct StreamOut *_21 = &(*streams).err;
16005- PutStr(0 /* _20 */, &*_21, &*callee);
16054+ struct string _22; memset(&_22, 0, sizeof(struct string));
16055+ {
16056+ nonempty_to_string(&_22, &*callee);
16057+ }
16058+ PutStr(0 /* _20 */, &*_21, &_22);
16059+ string$dest(&_22);
1600616060 }
1600716061 {
1600816062 const struct StreamOut *_22 = &(*streams).err;
@@ -16122,7 +16176,12 @@
1612216176 {
1612316177 struct string _20; memset(&_20, 0, sizeof(struct string));
1612416178 init$fromliteral(&_20, "swap", 4);
16125- strequ(&_19, &_20, &*callee);
16179+ struct string _21; memset(&_21, 0, sizeof(struct string));
16180+ {
16181+ nonempty_to_string(&_21, &*callee);
16182+ }
16183+ strequ(&_19, &_20, &_21);
16184+ string$dest(&_21);
1612616185 string$dest(&_20);
1612716186 }
1612816187 bool _20; memset(&_20, 0, sizeof(bool));
@@ -16129,7 +16188,12 @@
1612916188 {
1613016189 struct string _21; memset(&_21, 0, sizeof(struct string));
1613116190 init$fromliteral(&_21, "reverse", 7);
16132- strequ(&_20, &_21, &*callee);
16191+ struct string _22; memset(&_22, 0, sizeof(struct string));
16192+ {
16193+ nonempty_to_string(&_22, &*callee);
16194+ }
16195+ strequ(&_20, &_21, &_22);
16196+ string$dest(&_22);
1613316197 string$dest(&_21);
1613416198 }
1613516199 or(&_18, &_19, &_20);
@@ -16151,7 +16215,12 @@
1615116215 }
1615216216 {
1615316217 const struct StreamOut *_23 = &(*streams).err;
16154- PutStr(0 /* _22 */, &*_23, &*callee);
16218+ struct string _24; memset(&_24, 0, sizeof(struct string));
16219+ {
16220+ nonempty_to_string(&_24, &*callee);
16221+ }
16222+ PutStr(0 /* _22 */, &*_23, &_24);
16223+ string$dest(&_24);
1615516224 }
1615616225 {
1615716226 const struct StreamOut *_24 = &(*streams).err;
@@ -16180,13 +16249,13 @@
1618016249 }
1618116250 uint64_t _n; memset(&_n, 0, sizeof(uint64_t));
1618216251 {
16183- const struct stack/*u8*/ *_19 = &(*callee).data;
16252+ const struct stack/*u8*/ *_19 = &(*callee).rest.data;
1618416253 size(&_n, &*_19);
1618516254 }
1618616255 bool _20;
1618716256 {
1618816257 uint64_t _21; memset(&_21, 0, sizeof(uint64_t));
16189- _21 = 3;
16258+ _21 = 2;
1619016259 _20 = _n >= _21;
1619116260 _IGNORE_(_21);
1619216261 }
@@ -16195,7 +16264,7 @@
1619516264 bool _22;
1619616265 {
1619716266 uint64_t _23; memset(&_23, 0, sizeof(uint64_t));
16198- _23 = 6;
16267+ _23 = 5;
1619916268 _22 = _n >= _23;
1620016269 _IGNORE_(_23);
1620116270 }
@@ -16211,21 +16280,8 @@
1621116280 {
1621216281 uint8_t _28; memset(&_28, 0, sizeof(uint8_t));
1621316282 _28 = 80;
16214- uint8_t _29; memset(&_29, 0, sizeof(uint8_t));
16215- {
16216- const struct stack/*u8*/ *_30 = &(*callee).data;
16217- uint64_t _31; memset(&_31, 0, sizeof(uint64_t));
16218- {
16219- uint64_t _32; memset(&_32, 0, sizeof(uint64_t));
16220- _32 = 1;
16221- _31 = _n - _32;
16222- _IGNORE_(_32);
16223- }
16224- at_get$(&_29, &*_30, &_31, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 3323);
16225- _IGNORE_(_31);
16226- }
16227- _27 = _28 == _29;
16228- _IGNORE_(_29);
16283+ const uint8_t *_29 = &(*callee).top;
16284+ _27 = _28 == *_29;
1622916285 _IGNORE_(_28);
1623016286 }
1623116287 bool _28; memset(&_28, 0, sizeof(bool));
@@ -16234,15 +16290,15 @@
1623416290 _29 = 114;
1623516291 uint8_t _30; memset(&_30, 0, sizeof(uint8_t));
1623616292 {
16237- const struct stack/*u8*/ *_31 = &(*callee).data;
16293+ const struct stack/*u8*/ *_31 = &(*callee).rest.data;
1623816294 uint64_t _32; memset(&_32, 0, sizeof(uint64_t));
1623916295 {
1624016296 uint64_t _33; memset(&_33, 0, sizeof(uint64_t));
16241- _33 = 2;
16297+ _33 = 1;
1624216298 _32 = _n - _33;
1624316299 _IGNORE_(_33);
1624416300 }
16245- at_get$(&_30, &*_31, &_32, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 3324);
16301+ at_get$(&_30, &*_31, &_32, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 3344);
1624616302 _IGNORE_(_32);
1624716303 }
1624816304 _28 = _29 == _30;
@@ -16261,15 +16317,15 @@
1626116317 _29 = 105;
1626216318 uint8_t _30; memset(&_30, 0, sizeof(uint8_t));
1626316319 {
16264- const struct stack/*u8*/ *_31 = &(*callee).data;
16320+ const struct stack/*u8*/ *_31 = &(*callee).rest.data;
1626516321 uint64_t _32; memset(&_32, 0, sizeof(uint64_t));
1626616322 {
1626716323 uint64_t _33; memset(&_33, 0, sizeof(uint64_t));
16268- _33 = 3;
16324+ _33 = 2;
1626916325 _32 = _n - _33;
1627016326 _IGNORE_(_33);
1627116327 }
16272- at_get$(&_30, &*_31, &_32, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 3328);
16328+ at_get$(&_30, &*_31, &_32, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 3348);
1627316329 _IGNORE_(_32);
1627416330 }
1627516331 _28 = _29 == _30;
@@ -16282,15 +16338,15 @@
1628216338 _30 = 110;
1628316339 uint8_t _31; memset(&_31, 0, sizeof(uint8_t));
1628416340 {
16285- const struct stack/*u8*/ *_32 = &(*callee).data;
16341+ const struct stack/*u8*/ *_32 = &(*callee).rest.data;
1628616342 uint64_t _33; memset(&_33, 0, sizeof(uint64_t));
1628716343 {
1628816344 uint64_t _34; memset(&_34, 0, sizeof(uint64_t));
16289- _34 = 4;
16345+ _34 = 3;
1629016346 _33 = _n - _34;
1629116347 _IGNORE_(_34);
1629216348 }
16293- at_get$(&_31, &*_32, &_33, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 3329);
16349+ at_get$(&_31, &*_32, &_33, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 3349);
1629416350 _IGNORE_(_33);
1629516351 }
1629616352 _29 = _30 == _31;
@@ -16313,15 +16369,15 @@
1631316369 _28 = 116;
1631416370 uint8_t _29; memset(&_29, 0, sizeof(uint8_t));
1631516371 {
16316- const struct stack/*u8*/ *_30 = &(*callee).data;
16372+ const struct stack/*u8*/ *_30 = &(*callee).rest.data;
1631716373 uint64_t _31; memset(&_31, 0, sizeof(uint64_t));
1631816374 {
1631916375 uint64_t _32; memset(&_32, 0, sizeof(uint64_t));
16320- _32 = 5;
16376+ _32 = 4;
1632116377 _31 = _n - _32;
1632216378 _IGNORE_(_32);
1632316379 }
16324- at_get$(&_29, &*_30, &_31, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 3334);
16380+ at_get$(&_29, &*_30, &_31, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 3354);
1632516381 _IGNORE_(_31);
1632616382 }
1632716383 _27 = _28 == _29;
@@ -16334,15 +16390,15 @@
1633416390 _29 = 36;
1633516391 uint8_t _30; memset(&_30, 0, sizeof(uint8_t));
1633616392 {
16337- const struct stack/*u8*/ *_31 = &(*callee).data;
16393+ const struct stack/*u8*/ *_31 = &(*callee).rest.data;
1633816394 uint64_t _32; memset(&_32, 0, sizeof(uint64_t));
1633916395 {
1634016396 uint64_t _33; memset(&_33, 0, sizeof(uint64_t));
16341- _33 = 6;
16397+ _33 = 5;
1634216398 _32 = _n - _33;
1634316399 _IGNORE_(_33);
1634416400 }
16345- at_get$(&_30, &*_31, &_32, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 3335);
16401+ at_get$(&_30, &*_31, &_32, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 3355);
1634616402 _IGNORE_(_32);
1634716403 }
1634816404 _28 = _29 == _30;
@@ -16372,7 +16428,12 @@
1637216428 }
1637316429 {
1637416430 const struct StreamOut *_29 = &(*streams).err;
16375- PutStr(0 /* _28 */, &*_29, &*callee);
16431+ struct string _30; memset(&_30, 0, sizeof(struct string));
16432+ {
16433+ nonempty_to_string(&_30, &*callee);
16434+ }
16435+ PutStr(0 /* _28 */, &*_29, &_30);
16436+ string$dest(&_30);
1637616437 }
1637716438 {
1637816439 const struct StreamOut *_30 = &(*streams).err;
@@ -16450,21 +16511,8 @@
1645016511 {
1645116512 uint8_t _27; memset(&_27, 0, sizeof(uint8_t));
1645216513 _27 = 99;
16453- uint8_t _28; memset(&_28, 0, sizeof(uint8_t));
16454- {
16455- const struct stack/*u8*/ *_29 = &(*callee).data;
16456- uint64_t _30; memset(&_30, 0, sizeof(uint64_t));
16457- {
16458- uint64_t _31; memset(&_31, 0, sizeof(uint64_t));
16459- _31 = 1;
16460- _30 = _n - _31;
16461- _IGNORE_(_31);
16462- }
16463- at_get$(&_28, &*_29, &_30, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 3368);
16464- _IGNORE_(_30);
16465- }
16466- _26 = _27 == _28;
16467- _IGNORE_(_28);
16514+ const uint8_t *_28 = &(*callee).top;
16515+ _26 = _27 == *_28;
1646816516 _IGNORE_(_27);
1646916517 }
1647016518 bool _27; memset(&_27, 0, sizeof(bool));
@@ -16473,15 +16521,15 @@
1647316521 _28 = 109;
1647416522 uint8_t _29; memset(&_29, 0, sizeof(uint8_t));
1647516523 {
16476- const struct stack/*u8*/ *_30 = &(*callee).data;
16524+ const struct stack/*u8*/ *_30 = &(*callee).rest.data;
1647716525 uint64_t _31; memset(&_31, 0, sizeof(uint64_t));
1647816526 {
1647916527 uint64_t _32; memset(&_32, 0, sizeof(uint64_t));
16480- _32 = 2;
16528+ _32 = 1;
1648116529 _31 = _n - _32;
1648216530 _IGNORE_(_32);
1648316531 }
16484- at_get$(&_29, &*_30, &_31, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 3369);
16532+ at_get$(&_29, &*_30, &_31, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 3389);
1648516533 _IGNORE_(_31);
1648616534 }
1648716535 _27 = _28 == _29;
@@ -16498,15 +16546,15 @@
1649816546 _27 = 112;
1649916547 uint8_t _28; memset(&_28, 0, sizeof(uint8_t));
1650016548 {
16501- const struct stack/*u8*/ *_29 = &(*callee).data;
16549+ const struct stack/*u8*/ *_29 = &(*callee).rest.data;
1650216550 uint64_t _30; memset(&_30, 0, sizeof(uint64_t));
1650316551 {
1650416552 uint64_t _31; memset(&_31, 0, sizeof(uint64_t));
16505- _31 = 3;
16553+ _31 = 2;
1650616554 _30 = _n - _31;
1650716555 _IGNORE_(_31);
1650816556 }
16509- at_get$(&_28, &*_29, &_30, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 3371);
16557+ at_get$(&_28, &*_29, &_30, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 3391);
1651016558 _IGNORE_(_30);
1651116559 }
1651216560 _26 = _27 == _28;
@@ -16532,7 +16580,12 @@
1653216580 }
1653316581 {
1653416582 const struct StreamOut *_29 = &(*streams).err;
16535- PutStr(0 /* _28 */, &*_29, &*callee);
16583+ struct string _30; memset(&_30, 0, sizeof(struct string));
16584+ {
16585+ nonempty_to_string(&_30, &*callee);
16586+ }
16587+ PutStr(0 /* _28 */, &*_29, &_30);
16588+ string$dest(&_30);
1653616589 }
1653716590 {
1653816591 const struct StreamOut *_30 = &(*streams).err;
@@ -16606,7 +16659,12 @@
1660616659 {
1660716660 struct string _23; memset(&_23, 0, sizeof(struct string));
1660816661 init$fromliteral(&_23, "strcat$", 7);
16609- strequ(&_22, &_23, &*callee);
16662+ struct string _24; memset(&_24, 0, sizeof(struct string));
16663+ {
16664+ nonempty_to_string(&_24, &*callee);
16665+ }
16666+ strequ(&_22, &_23, &_24);
16667+ string$dest(&_24);
1661016668 string$dest(&_23);
1661116669 }
1661216670 if(_22)
@@ -16638,7 +16696,7 @@
1663816696 }
1663916697 }
1664016698
16641-void ParseArgsMore$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct qtypepureid *const store, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const uint64_t *const parnr, const struct def *const def, struct stack/*string*/ *const argids, const struct string *const callee, const struct stack/*type_pure*/ *const st_, struct stack/*idpath*/ *const ips)
16699+void ParseArgsMore$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct qtypepureid *const store, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const uint64_t *const parnr, const struct def *const def, struct stack/*nonempty_string*/ *const argids, const struct nonempty_string *const callee, const struct stack/*type_pure*/ *const st_, struct stack/*idpath*/ *const ips)
1664216700 {
1664316701 {
1664416702 bool _2;
@@ -16695,7 +16753,12 @@
1669516753 }
1669616754 {
1669716755 const struct StreamOut *_9 = &(*streams).err;
16698- PutStr(0 /* _8 */, &*_9, &*callee);
16756+ struct string _10; memset(&_10, 0, sizeof(struct string));
16757+ {
16758+ nonempty_to_string(&_10, &*callee);
16759+ }
16760+ PutStr(0 /* _8 */, &*_9, &_10);
16761+ string$dest(&_10);
1669916762 }
1670016763 {
1670116764 const struct StreamOut *_10 = &(*streams).err;
@@ -16757,7 +16820,7 @@
1675716820 {
1675816821 size(&_7, &*argids);
1675916822 }
16760- at_get$(&_par, &*_6, &_7, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 3430);
16823+ at_get$(&_par, &*_6, &_7, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 3450);
1676116824 _IGNORE_(_7);
1676216825 }
1676316826 struct qtypepure _partyp; memset(&_partyp, 0, sizeof(struct qtypepure));
@@ -16807,7 +16870,7 @@
1680716870 }
1680816871 }
1680916872
16810-void ParseArgs$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct def *const def, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const struct qtypepureid *const store, struct stack/*string*/ *const argids, const struct string *const callee, const struct stack/*type_pure*/ *const st_, struct stack/*idpath*/ *const ips)
16873+void ParseArgs$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct def *const def, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const struct qtypepureid *const store, struct stack/*nonempty_string*/ *const argids, const struct nonempty_string *const callee, const struct stack/*type_pure*/ *const st_, struct stack/*idpath*/ *const ips)
1681116874 {
1681216875 {
1681316876 bool _2;
@@ -16853,7 +16916,12 @@
1685316916 }
1685416917 {
1685516918 const struct StreamOut *_7 = &(*streams).err;
16856- PutStr(0 /* _6 */, &*_7, &*callee);
16919+ struct string _8; memset(&_8, 0, sizeof(struct string));
16920+ {
16921+ nonempty_to_string(&_8, &*callee);
16922+ }
16923+ PutStr(0 /* _6 */, &*_7, &_8);
16924+ string$dest(&_8);
1685716925 }
1685816926 {
1685916927 const struct StreamOut *_8 = &(*streams).err;
@@ -16915,7 +16983,7 @@
1691516983 {
1691616984 size(&_6, &*argids);
1691716985 }
16918- at_get$(&_par, &*_5, &_6, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 3461);
16986+ at_get$(&_par, &*_5, &_6, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 3481);
1691916987 _IGNORE_(_6);
1692016988 }
1692116989 struct qtypepure _partyp; memset(&_partyp, 0, sizeof(struct qtypepure));
@@ -17087,7 +17155,7 @@
1708717155 if(_1)
1708817156 {
1708917157 {
17090- solid(&*_0, &*current, sizeof(struct idpath), (void (*)(void *))idpath$dest, (void (*)(void *, const void *))idpath$copy, 3497);
17158+ solid(&*_0, &*current, sizeof(struct idpath), (void (*)(void *))idpath$dest, (void (*)(void *, const void *))idpath$copy, 3517);
1709117159 }
1709217160 }
1709317161 else
@@ -17100,17 +17168,17 @@
1710017168 else
1710117169 {
1710217170 {
17103- empty(&*_0, sizeof(struct idpath), (void (*)(void *))idpath$dest, (void (*)(void *, const void *))idpath$copy, 3501);
17171+ empty(&*_0, sizeof(struct idpath), (void (*)(void *))idpath$dest, (void (*)(void *, const void *))idpath$copy, 3521);
1710417172 }
1710517173 }
1710617174 }
1710717175
17108-void ParseArg$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct qtypepureid *const store, const struct qtypepureid *const par, const struct requires_totality *const totality_, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const uint64_t *const parnr, const struct def *const def, struct stack/*string*/ *const argids, const struct string *const callee, const struct stack/*type_pure*/ *const st_, struct stack/*idpath*/ *const ips)
17176+void ParseArg$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct qtypepureid *const store, const struct qtypepureid *const par, const struct requires_totality *const totality_, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const uint64_t *const parnr, const struct def *const def, struct stack/*nonempty_string*/ *const argids, const struct nonempty_string *const callee, const struct stack/*type_pure*/ *const st_, struct stack/*idpath*/ *const ips)
1710917177 {
1711017178 {
17111- struct string _id; memset(&_id, 0, sizeof(struct string));
17179+ struct string _ID; memset(&_ID, 0, sizeof(struct string));
1711217180 {
17113- ParseId$(&_id, &*streams, &*txtpos, &*level);
17181+ ParseId$(&_ID, &*streams, &*txtpos, &*level);
1711417182 }
1711517183 struct requires_totality _totality; memset(&_totality, 0, sizeof(struct requires_totality));
1711617184 const struct requires_totality *_1 = &(*totality_);
@@ -17128,7 +17196,12 @@
1712817196 const struct totality_required *totality_ = ((*_1).totality_required).data;
1712917197 bool _2;
1713017198 {
17131- strequ(&_2, &*callee, &*self);
17199+ struct cmp _3; memset(&_3, 0, sizeof(struct cmp));
17200+ {
17201+ cmp$nonempty_string(&_3, &*callee, &*self);
17202+ }
17203+ is_equ(&_2, &_3);
17204+ cmp$dest(&_3);
1713217205 }
1713317206 if(_2)
1713417207 {
@@ -17140,13 +17213,13 @@
1714017213 {
1714117214 size(&_4, &*argids);
1714217215 }
17143- at_get$(&_rel, &*_3, &_4, sizeof(struct par), (void (*)(void *))par$dest, (void (*)(void *, const void *))par$copy, 3514);
17216+ at_get$(&_rel, &*_3, &_4, sizeof(struct par), (void (*)(void *))par$dest, (void (*)(void *, const void *))par$copy, 3534);
1714417217 _IGNORE_(_4);
1714517218 }
1714617219 struct ReducedId _ri; memset(&_ri, 0, sizeof(struct ReducedId));
1714717220 {
1714817221 const struct nonempty_string *_3 = &(_rel).id;
17149- ReducedId(&_ri, &*_3, &_id);
17222+ ReducedId(&_ri, &*_3, &_ID);
1715017223 }
1715117224 struct proof_of_totality _ts; memset(&_ts, 0, sizeof(struct proof_of_totality));
1715217225 proof_of_totality$copy(&_ts, &(*totality_).status);
@@ -17206,7 +17279,7 @@
1720617279 {
1720717280 struct string _5; memset(&_5, 0, sizeof(struct string));
1720817281 init$fromliteral(&_5, "let", 3);
17209- strequ(&_4, &_id, &_5);
17282+ strequ(&_4, &_ID, &_5);
1721017283 string$dest(&_5);
1721117284 }
1721217285 if(_4)
@@ -17245,7 +17318,7 @@
1724517318 struct stack/*qtypepureid*/ _provide_; memset(&_provide_, 0, sizeof(struct stack/*qtypepureid*/));
1724617319 {
1724717320 const struct StreamOut *_7 = &(*streams).err;
17248- ScopePathFindParOrVarAndMarkUsed$(&_provide_, &*_7, &*txtpos, &*sp, &_id);
17321+ ScopePathFindParOrVarAndMarkUsed$(&_provide_, &*_7, &*txtpos, &*sp, &_ID);
1724917322 }
1725017323 const struct stack/*qtypepureid*/ *_7 = &(_provide_);
1725117324 if(!(*_7).size)
@@ -17273,18 +17346,13 @@
1727317346 {
1727417347 struct stack/*qtypepureid*/ _11; memset(&_11, 0, sizeof(struct stack/*qtypepureid*/));
1727517348 {
17276- solid(&_11, &_mut_pv, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3554);
17349+ solid(&_11, &_mut_pv, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3574);
1727717350 }
17278- ParseExpr$(0 /* _10 */, &*streams, &*txtpos, &*state, &*level, &*sp, &*tmpnr, &_11, &_id, &_totality, &*action, &*self, &*reduced_ids);
17351+ ParseExpr$(0 /* _10 */, &*streams, &*txtpos, &*state, &*level, &*sp, &*tmpnr, &_11, &_ID, &_totality, &*action, &*self, &*reduced_ids);
1727917352 free$(&_11, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1728017353 }
1728117354 {
17282- struct string _12; memset(&_12, 0, sizeof(struct string));
17283- {
17284- nonempty_to_string(&_12, &_provide_id);
17285- }
17286- push(0 /* _11 */, &*argids, &_12, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 3556);
17287- string$dest(&_12);
17355+ push(0 /* _11 */, &*argids, &_provide_id, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest, (void (*)(void *, const void *))nonempty_string$copy, 3576);
1728817356 }
1728917357 {
1729017358 uint64_t _13; memset(&_13, 0, sizeof(uint64_t));
@@ -17400,7 +17468,7 @@
1740017468 }
1740117469 }
1740217470 {
17403- push(0 /* _16 */, &*ips, &_ip, sizeof(struct idpath), (void (*)(void *))idpath$dest, (void (*)(void *, const void *))idpath$copy, 3590);
17471+ push(0 /* _16 */, &*ips, &_ip, sizeof(struct idpath), (void (*)(void *))idpath$dest, (void (*)(void *, const void *))idpath$copy, 3610);
1740417472 }
1740517473 free$(&_previous, sizeof(struct idpath), (void (*)(void *))idpath$dest);
1740617474 }
@@ -17413,13 +17481,8 @@
1741317481 }
1741417482 }
1741517483 {
17416- struct string _14; memset(&_14, 0, sizeof(struct string));
17417- {
17418- struct nonempty_string *_15 = &(_provide).id;
17419- nonempty_to_string(&_14, &*_15);
17420- }
17421- push(0 /* _13 */, &*argids, &_14, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 3593);
17422- string$dest(&_14);
17484+ struct nonempty_string *_14 = &(_provide).id;
17485+ push(0 /* _13 */, &*argids, &*_14, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest, (void (*)(void *, const void *))nonempty_string$copy, 3613);
1742317486 }
1742417487 bool _15;
1742517488 {
@@ -17470,11 +17533,11 @@
1747017533 }
1747117534 free$(&_provide_, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
1747217535 requires_totality$dest(&_totality);
17473- string$dest(&_id);
17536+ string$dest(&_ID);
1747417537 }
1747517538 }
1747617539
17477-void SpecializeFunctionPure$(struct string *const _0, const struct Streams *const streams, struct linecol *const txtpos, const struct focus *const focus, const struct string *const name, const struct stack/*type_pure*/ *const subtype)
17540+void SpecializeFunctionPure$(struct nonempty_string *const _0, const struct Streams *const streams, struct linecol *const txtpos, const struct focus *const focus, const struct nonempty_string *const name, const struct stack/*type_pure*/ *const subtype)
1747817541 {
1747917542 const struct focus *_1 = &(*focus);
1748017543 switch((*_1).type)
@@ -17481,7 +17544,7 @@
1748117544 {
1748217545 case 0: // void general:
1748317546 {
17484- string$copy(&*_0, &(*name));
17547+ nonempty_string$copy(&*_0, &(*name));
1748517548 break;
1748617549 }
1748717550 case 1: // void specialized:
@@ -17499,21 +17562,31 @@
1749917562 }
1750017563 {
1750117564 const struct StreamOut *_5 = &(*streams).err;
17502- PutStr(0 /* _4 */, &*_5, &*name);
17565+ struct string _6; memset(&_6, 0, sizeof(struct string));
17566+ {
17567+ nonempty_to_string(&_6, &*name);
17568+ }
17569+ PutStr(0 /* _4 */, &*_5, &_6);
17570+ string$dest(&_6);
1750317571 }
1750417572 {
1750517573 const struct StreamOut *_6 = &(*streams).err;
1750617574 Fail$(0 /* _5 */, &*_6, &*txtpos);
1750717575 }
17508- struct string _6; memset(&_6, 0, sizeof(struct string));
17576+ struct nonempty_string _6; memset(&_6, 0, sizeof(struct nonempty_string));
1750917577 {
17510- struct string _7; memset(&_7, 0, sizeof(struct string));
17511- init$fromliteral(&_7, "$", 1);
17512- strcat$(&_6, &_7, &*name, 3621);
17513- string$dest(&_7);
17578+ uint8_t _7; memset(&_7, 0, sizeof(uint8_t));
17579+ _7 = 36;
17580+ struct string _8; memset(&_8, 0, sizeof(struct string));
17581+ {
17582+ nonempty_to_string(&_8, &*name);
17583+ }
17584+ nonempty_string(&_6, &_7, &_8);
17585+ string$dest(&_8);
17586+ _IGNORE_(_7);
1751417587 }
17515- string$copy(&*_0, &_6);
17516- string$dest(&_6);
17588+ nonempty_string$copy(&*_0, &_6);
17589+ nonempty_string$dest(&_6);
1751717590 }
1751817591 }
1751917592 else
@@ -17520,25 +17593,32 @@
1752017593 {
1752117594 const struct type_pure *subtype = (*_2).data;
1752217595 {
17523- struct string _3; memset(&_3, 0, sizeof(struct string));
17596+ const uint8_t *_3 = &(*name).top;
17597+ struct string _4; memset(&_4, 0, sizeof(struct string));
1752417598 {
17525- struct string _4; memset(&_4, 0, sizeof(struct string));
17526- init$fromliteral(&_4, "$", 1);
17527- struct string _5; memset(&_5, 0, sizeof(struct string));
17599+ const struct string *_5 = &(*name).rest;
17600+ struct string _6; memset(&_6, 0, sizeof(struct string));
1752817601 {
17529- struct nonempty_string _6; memset(&_6, 0, sizeof(struct nonempty_string));
17602+ struct string _7; memset(&_7, 0, sizeof(struct string));
17603+ init$fromliteral(&_7, "$", 1);
17604+ struct string _8; memset(&_8, 0, sizeof(struct string));
1753017605 {
17531- getpurename(&_6, &*subtype);
17606+ struct nonempty_string _9; memset(&_9, 0, sizeof(struct nonempty_string));
17607+ {
17608+ getpurename(&_9, &*subtype);
17609+ }
17610+ nonempty_to_string(&_8, &_9);
17611+ nonempty_string$dest(&_9);
1753217612 }
17533- nonempty_to_string(&_5, &_6);
17534- nonempty_string$dest(&_6);
17613+ strcat$(&_6, &_7, &_8, 3645);
17614+ string$dest(&_8);
17615+ string$dest(&_7);
1753517616 }
17536- strcat$(&_3, &_4, &_5, 3623);
17537- string$dest(&_5);
17538- string$dest(&_4);
17617+ strcat$(&_4, &*_5, &_6, 3645);
17618+ string$dest(&_6);
1753917619 }
17540- strcat$(&*_0, &*name, &_3, 3623);
17541- string$dest(&_3);
17620+ nonempty_string(&*_0, &*_3, &_4);
17621+ string$dest(&_4);
1754217622 }
1754317623 }
1754417624 break;
@@ -17551,7 +17631,7 @@
1755117631 }
1755217632 }
1755317633
17554-void ParseCall$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, const uint64_t *const tmpnr_, const struct stack/*qtypepureid*/ *const store, const struct nonempty_string *const callee, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids)
17634+void ParseCall$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, const uint64_t *const tmpnr_, const struct stack/*qtypepureid*/ *const store, const struct nonempty_string *const callee, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids)
1755517635 {
1755617636 {
1755717637 uint64_t _tmpnr; memset(&_tmpnr, 0, sizeof(uint64_t));
@@ -17581,7 +17661,12 @@
1758117661 }
1758217662 {
1758317663 const struct StreamOut *_5 = &(*streams).err;
17584- PutStr(0 /* _4 */, &*_5, &*self);
17664+ struct string _6; memset(&_6, 0, sizeof(struct string));
17665+ {
17666+ nonempty_to_string(&_6, &*self);
17667+ }
17668+ PutStr(0 /* _4 */, &*_5, &_6);
17669+ string$dest(&_6);
1758517670 }
1758617671 {
1758717672 const struct StreamOut *_6 = &(*streams).err;
@@ -17626,8 +17711,7 @@
1762617711 {
1762717712 bool _7;
1762817713 {
17629- const struct string *_8 = &(*callee).rest;
17630- idpart(&_7, &*_8);
17714+ idpart(&_7, &*callee);
1763117715 }
1763217716 if(_7)
1763317717 {
@@ -17640,7 +17724,12 @@
1764017724 }
1764117725 {
1764217726 const struct StreamOut *_10 = &(*streams).err;
17643- PutStr(0 /* _9 */, &*_10, &*self);
17727+ struct string _11; memset(&_11, 0, sizeof(struct string));
17728+ {
17729+ nonempty_to_string(&_11, &*self);
17730+ }
17731+ PutStr(0 /* _9 */, &*_10, &_11);
17732+ string$dest(&_11);
1764417733 }
1764517734 {
1764617735 const struct StreamOut *_11 = &(*streams).err;
@@ -17683,12 +17772,7 @@
1768317772 struct stack/*def*/ _def; memset(&_def, 0, sizeof(struct stack/*def*/));
1768417773 {
1768517774 struct stack/*def*/ *_6 = &(*state).defs;
17686- struct string _7; memset(&_7, 0, sizeof(struct string));
17687- {
17688- nonempty_to_string(&_7, &*callee);
17689- }
17690- findFnDefAndMarkUsed(&_def, &*_6, &_7);
17691- string$dest(&_7);
17775+ findFnDefAndMarkUsed(&_def, &*_6, &*callee);
1769217776 }
1769317777 const struct stack/*def*/ *_6 = &(_def);
1769417778 if(!(*_6).size)
@@ -17777,28 +17861,23 @@
1777717861 EmitLet$(0 /* _14 */, &*_15, &*level, &*_16, &_newstore);
1777817862 }
1777917863 {
17780- struct stack/*string*/ _16; memset(&_16, 0, sizeof(struct stack/*string*/));
17864+ struct stack/*nonempty_string*/ _16; memset(&_16, 0, sizeof(struct stack/*nonempty_string*/));
1778117865 {
17782- /*argids*/ stack(&_16, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 3721);
17866+ /*argids*/ stack(&_16, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest, (void (*)(void *, const void *))nonempty_string$copy, 3743);
1778317867 }
17784- struct string _17; memset(&_17, 0, sizeof(struct string));
17868+ struct nonempty_string _17; memset(&_17, 0, sizeof(struct nonempty_string));
1778517869 {
1778617870 const struct focus *_18 = &(*def).focus;
17787- struct string _19; memset(&_19, 0, sizeof(struct string));
17788- {
17789- nonempty_to_string(&_19, &*callee);
17790- }
17791- SpecializeFunctionPure$(&_17, &*streams, &*txtpos, &*_18, &_19, &_st_);
17792- string$dest(&_19);
17871+ SpecializeFunctionPure$(&_17, &*streams, &*txtpos, &*_18, &*callee, &_st_);
1779317872 }
1779417873 struct stack/*idpath*/ _18; memset(&_18, 0, sizeof(struct stack/*idpath*/));
1779517874 {
17796- /*ips*/ stack(&_18, sizeof(struct idpath), (void (*)(void *))idpath$dest, (void (*)(void *, const void *))idpath$copy, 3721);
17875+ /*ips*/ stack(&_18, sizeof(struct idpath), (void (*)(void *))idpath$dest, (void (*)(void *, const void *))idpath$copy, 3743);
1779717876 }
1779817877 ParseArgs$(0 /* _15 */, &*streams, &*txtpos, &*state, &*level, &*sp, &_tmpnr, &*def, &*totality, &*action, &*self, &*reduced_ids, &_newstore, &_16, &_17, &_st_, &_18);
1779917878 free$(&_18, sizeof(struct idpath), (void (*)(void *))idpath$dest);
17800- string$dest(&_17);
17801- free$(&_16, sizeof(struct string), (void (*)(void *))string$dest);
17879+ nonempty_string$dest(&_17);
17880+ free$(&_16, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest);
1780217881 }
1780317882 {
1780417883 const struct StreamOut *_17 = &(*streams).out;
@@ -17841,37 +17920,27 @@
1784117920 {
1784217921 {
1784317922 const struct StreamOut *_16 = &(*streams).err;
17844- struct string _17; memset(&_17, 0, sizeof(struct string));
17845- {
17846- nonempty_to_string(&_17, &*callee);
17847- }
17848- const struct qtypepure *_18 = &(*store).qt;
17849- AssertResultTypePure$(0 /* _15 */, &*_16, &*txtpos, &_17, &*_18, &_retype);
17850- string$dest(&_17);
17923+ const struct qtypepure *_17 = &(*store).qt;
17924+ AssertResultTypePure$(0 /* _15 */, &*_16, &*txtpos, &*callee, &*_17, &_retype);
1785117925 }
1785217926 {
17853- struct stack/*string*/ _17; memset(&_17, 0, sizeof(struct stack/*string*/));
17927+ struct stack/*nonempty_string*/ _17; memset(&_17, 0, sizeof(struct stack/*nonempty_string*/));
1785417928 {
17855- /*argids*/ stack(&_17, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 3727);
17929+ /*argids*/ stack(&_17, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest, (void (*)(void *, const void *))nonempty_string$copy, 3749);
1785617930 }
17857- struct string _18; memset(&_18, 0, sizeof(struct string));
17931+ struct nonempty_string _18; memset(&_18, 0, sizeof(struct nonempty_string));
1785817932 {
1785917933 const struct focus *_19 = &(*def).focus;
17860- struct string _20; memset(&_20, 0, sizeof(struct string));
17861- {
17862- nonempty_to_string(&_20, &*callee);
17863- }
17864- SpecializeFunctionPure$(&_18, &*streams, &*txtpos, &*_19, &_20, &_st_);
17865- string$dest(&_20);
17934+ SpecializeFunctionPure$(&_18, &*streams, &*txtpos, &*_19, &*callee, &_st_);
1786617935 }
1786717936 struct stack/*idpath*/ _19; memset(&_19, 0, sizeof(struct stack/*idpath*/));
1786817937 {
17869- /*ids*/ stack(&_19, sizeof(struct idpath), (void (*)(void *))idpath$dest, (void (*)(void *, const void *))idpath$copy, 3727);
17938+ /*ids*/ stack(&_19, sizeof(struct idpath), (void (*)(void *))idpath$dest, (void (*)(void *, const void *))idpath$copy, 3749);
1787017939 }
1787117940 ParseArgs$(0 /* _16 */, &*streams, &*txtpos, &*state, &*level, &*sp, &_tmpnr, &*def, &*totality, &*action, &*self, &*reduced_ids, &*store, &_17, &_18, &_st_, &_19);
1787217941 free$(&_19, sizeof(struct idpath), (void (*)(void *))idpath$dest);
17873- string$dest(&_18);
17874- free$(&_17, sizeof(struct string), (void (*)(void *))string$dest);
17942+ nonempty_string$dest(&_18);
17943+ free$(&_17, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest);
1787517944 }
1787617945 }
1787717946 }
@@ -17994,7 +18063,7 @@
1799418063 }
1799518064 }
1799618065
17997-void ParseIfStatement$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const struct qtypepureid *const provide)
18066+void ParseIfStatement$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const struct qtypepureid *const provide)
1799818067 {
1799918068 {
1800018069 struct qtypepureid _pred; memset(&_pred, 0, sizeof(struct qtypepureid));
@@ -18045,7 +18114,7 @@
1804518114 {
1804618115 struct stack/*qtypepureid*/ _5; memset(&_5, 0, sizeof(struct stack/*qtypepureid*/));
1804718116 {
18048- solid(&_5, &_pred, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3759);
18117+ solid(&_5, &_pred, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3781);
1804918118 }
1805018119 struct string _6; memset(&_6, 0, sizeof(struct string));
1805118120 {
@@ -18117,7 +18186,7 @@
1811718186 {
1811818187 struct stack/*qtypepureid*/ _12; memset(&_12, 0, sizeof(struct stack/*qtypepureid*/));
1811918188 {
18120- solid(&_12, &*provide, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3768);
18189+ solid(&_12, &*provide, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3790);
1812118190 }
1812218191 ParseBlock$(0 /* _11 */, &*streams, &*txtpos, &*state, &*level, &*sp, &*tmpnr, &_12, &*totality, &*action, &*self, &*reduced_ids);
1812318192 free$(&_12, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
@@ -18176,7 +18245,7 @@
1817618245 }
1817718246 struct stack/*qtypepureid*/ _22; memset(&_22, 0, sizeof(struct stack/*qtypepureid*/));
1817818247 {
18179- solid(&_22, &*provide, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3779);
18248+ solid(&_22, &*provide, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3801);
1818018249 }
1818118250 ParseBlockRaw$(0 /* _20 */, &*streams, &*txtpos, &*state, &_21, &*sp, &*tmpnr, &_22, &*totality, &*action, &*self, &*reduced_ids);
1818218251 free$(&_22, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
@@ -18300,7 +18369,7 @@
1830018369 }
1830118370 }
1830218371
18303-void ParseAssign$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const struct string *const id)
18372+void ParseAssign$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const struct string *const id)
1830418373 {
1830518374 {
1830618375 struct stack/*qtypepureid*/ _provide_; memset(&_provide_, 0, sizeof(struct stack/*qtypepureid*/));
@@ -18357,7 +18426,7 @@
1835718426 {
1835818427 struct stack/*qtypepureid*/ _8; memset(&_8, 0, sizeof(struct stack/*qtypepureid*/));
1835918428 {
18360- solid(&_8, &_provide, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3821);
18429+ solid(&_8, &_provide, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3843);
1836118430 }
1836218431 ParseBlock$(0 /* _7 */, &*streams, &*txtpos, &*state, &*level, &*sp, &*tmpnr, &_8, &*totality, &*action, &*self, &*reduced_ids);
1836318432 free$(&_8, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
@@ -18415,7 +18484,7 @@
1841518484 uint8_t _8; memset(&_8, 0, sizeof(uint8_t));
1841618485 {
1841718486 struct stack/*u8*/ *_9 = &(*id).data;
18418- pop$(&_8, &*_9, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 3837);
18487+ pop$(&_8, &*_9, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 3859);
1841918488 }
1842018489 nonempty_string(&_7, &_8, &*id);
1842118490 _IGNORE_(_8);
@@ -18442,7 +18511,7 @@
1844218511 }
1844318512 struct stack/*qtypepureid*/ _12; memset(&_12, 0, sizeof(struct stack/*qtypepureid*/));
1844418513 {
18445- solid(&_12, &_provide, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3840);
18514+ solid(&_12, &_provide, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3862);
1844618515 }
1844718516 ParseCall$(0 /* _10 */, &*streams, &*txtpos, &*state, &_11, &*sp, &*tmpnr, &_12, &*id, &*totality, &*action, &*self, &*reduced_ids);
1844818517 free$(&_12, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
@@ -18510,7 +18579,7 @@
1851018579 {
1851118580 struct stack/*qtypepureid*/ _9; memset(&_9, 0, sizeof(struct stack/*qtypepureid*/));
1851218581 {
18513- solid(&_9, &_provide, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3853);
18582+ solid(&_9, &_provide, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3875);
1851418583 }
1851518584 struct string _10; memset(&_10, 0, sizeof(struct string));
1851618585 {
@@ -18577,7 +18646,7 @@
1857718646 {
1857818647 struct stack/*qtypepureid*/ _12; memset(&_12, 0, sizeof(struct stack/*qtypepureid*/));
1857918648 {
18580- solid(&_12, &_provide, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3876);
18649+ solid(&_12, &_provide, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 3898);
1858118650 }
1858218651 ParseExpr$(0 /* _11 */, &*streams, &*txtpos, &*state, &*level, &*sp, &*tmpnr, &_12, &*id, &*totality, &*action, &*self, &*reduced_ids);
1858318652 free$(&_12, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
@@ -18593,7 +18662,7 @@
1859318662 }
1859418663 }
1859518664
18596-void ParseCasesBlock$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const struct string *const par, const struct type_mode *const qualifier, const bool *const typed, const struct string *const solidid, const struct typepureid *const ti)
18665+void ParseCasesBlock$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const struct nonempty_string *const par, const struct type_mode *const qualifier, const bool *const typed, const struct nonempty_string *const solidid, const struct typepureid *const ti)
1859718666 {
1859818667 {
1859918668 {
@@ -18619,7 +18688,12 @@
1861918688 {
1862018689 uint8_t _6; memset(&_6, 0, sizeof(uint8_t));
1862118690 _6 = 42;
18622- nonempty_string(&_5, &_6, &*solidid);
18691+ struct string _7; memset(&_7, 0, sizeof(struct string));
18692+ {
18693+ nonempty_to_string(&_7, &*solidid);
18694+ }
18695+ nonempty_string(&_5, &_6, &_7);
18696+ string$dest(&_7);
1862318697 _IGNORE_(_6);
1862418698 }
1862518699 qtypepureid(&_qti, &_4, &_5);
@@ -18651,7 +18725,12 @@
1865118725 }
1865218726 {
1865318727 const struct StreamOut *_8 = &(*streams).out;
18654- PutStr(0 /* _7 */, &*_8, &*par);
18728+ struct string _9; memset(&_9, 0, sizeof(struct string));
18729+ {
18730+ nonempty_to_string(&_9, &*par);
18731+ }
18732+ PutStr(0 /* _7 */, &*_8, &_9);
18733+ string$dest(&_9);
1865518734 }
1865618735 {
1865718736 const struct StreamOut *_9 = &(*streams).out;
@@ -18683,7 +18762,7 @@
1868318762 {
1868418763 varinit(&_13, &_qti);
1868518764 }
18686- push(0 /* _11 */, &*_12, &_13, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3892);
18765+ push(0 /* _11 */, &*_12, &_13, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3914);
1868718766 var$dest(&_13);
1868818767 }
1868918768 qtypepureid$dest(&_qti);
@@ -18714,7 +18793,12 @@
1871418793 {
1871518794 uint8_t _9; memset(&_9, 0, sizeof(uint8_t));
1871618795 _9 = 42;
18717- nonempty_string(&_8, &_9, &*solidid);
18796+ struct string _10; memset(&_10, 0, sizeof(struct string));
18797+ {
18798+ nonempty_to_string(&_10, &*solidid);
18799+ }
18800+ nonempty_string(&_8, &_9, &_10);
18801+ string$dest(&_10);
1871818802 _IGNORE_(_9);
1871918803 }
1872018804 qtypepureid(&_qti, &_7, &_8);
@@ -18746,7 +18830,12 @@
1874618830 }
1874718831 {
1874818832 const struct StreamOut *_11 = &(*streams).out;
18749- PutStr(0 /* _10 */, &*_11, &*par);
18833+ struct string _12; memset(&_12, 0, sizeof(struct string));
18834+ {
18835+ nonempty_to_string(&_12, &*par);
18836+ }
18837+ PutStr(0 /* _10 */, &*_11, &_12);
18838+ string$dest(&_12);
1875018839 }
1875118840 {
1875218841 const struct StreamOut *_12 = &(*streams).out;
@@ -18778,7 +18867,7 @@
1877818867 {
1877918868 varinit(&_16, &_qti);
1878018869 }
18781- push(0 /* _14 */, &*_15, &_16, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3902);
18870+ push(0 /* _14 */, &*_15, &_16, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3924);
1878218871 var$dest(&_16);
1878318872 }
1878418873 qtypepureid$dest(&_qti);
@@ -18799,7 +18888,12 @@
1879918888 {
1880018889 uint8_t _10; memset(&_10, 0, sizeof(uint8_t));
1880118890 _10 = 42;
18802- nonempty_string(&_9, &_10, &*solidid);
18891+ struct string _11; memset(&_11, 0, sizeof(struct string));
18892+ {
18893+ nonempty_to_string(&_11, &*solidid);
18894+ }
18895+ nonempty_string(&_9, &_10, &_11);
18896+ string$dest(&_11);
1880318897 _IGNORE_(_10);
1880418898 }
1880518899 qtypepureid(&_qti, &_8, &_9);
@@ -18831,7 +18925,12 @@
1883118925 }
1883218926 {
1883318927 const struct StreamOut *_12 = &(*streams).out;
18834- PutStr(0 /* _11 */, &*_12, &*par);
18928+ struct string _13; memset(&_13, 0, sizeof(struct string));
18929+ {
18930+ nonempty_to_string(&_13, &*par);
18931+ }
18932+ PutStr(0 /* _11 */, &*_12, &_13);
18933+ string$dest(&_13);
1883518934 }
1883618935 {
1883718936 const struct StreamOut *_13 = &(*streams).out;
@@ -18863,7 +18962,7 @@
1886318962 {
1886418963 varinit(&_17, &_qti);
1886518964 }
18866- push(0 /* _15 */, &*_16, &_17, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3908);
18965+ push(0 /* _15 */, &*_16, &_17, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3930);
1886718966 var$dest(&_17);
1886818967 }
1886918968 qtypepureid$dest(&_qti);
@@ -18884,7 +18983,12 @@
1888418983 {
1888518984 uint8_t _11; memset(&_11, 0, sizeof(uint8_t));
1888618985 _11 = 42;
18887- nonempty_string(&_10, &_11, &*solidid);
18986+ struct string _12; memset(&_12, 0, sizeof(struct string));
18987+ {
18988+ nonempty_to_string(&_12, &*solidid);
18989+ }
18990+ nonempty_string(&_10, &_11, &_12);
18991+ string$dest(&_12);
1888818992 _IGNORE_(_11);
1888918993 }
1889018994 qtypepureid(&_qti, &_9, &_10);
@@ -18916,7 +19020,12 @@
1891619020 }
1891719021 {
1891819022 const struct StreamOut *_13 = &(*streams).out;
18919- PutStr(0 /* _12 */, &*_13, &*par);
19023+ struct string _14; memset(&_14, 0, sizeof(struct string));
19024+ {
19025+ nonempty_to_string(&_14, &*par);
19026+ }
19027+ PutStr(0 /* _12 */, &*_13, &_14);
19028+ string$dest(&_14);
1892019029 }
1892119030 {
1892219031 const struct StreamOut *_14 = &(*streams).out;
@@ -18948,7 +19057,7 @@
1894819057 {
1894919058 varinit(&_18, &_qti);
1895019059 }
18951- push(0 /* _16 */, &*_17, &_18, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3914);
19060+ push(0 /* _16 */, &*_17, &_18, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3936);
1895219061 var$dest(&_18);
1895319062 }
1895419063 qtypepureid$dest(&_qti);
@@ -18974,7 +19083,12 @@
1897419083 {
1897519084 uint8_t _12; memset(&_12, 0, sizeof(uint8_t));
1897619085 _12 = 42;
18977- nonempty_string(&_11, &_12, &*solidid);
19086+ struct string _13; memset(&_13, 0, sizeof(struct string));
19087+ {
19088+ nonempty_to_string(&_13, &*solidid);
19089+ }
19090+ nonempty_string(&_11, &_12, &_13);
19091+ string$dest(&_13);
1897819092 _IGNORE_(_12);
1897919093 }
1898019094 qtypepureid(&_qti, &_10, &_11);
@@ -19006,7 +19120,12 @@
1900619120 }
1900719121 {
1900819122 const struct StreamOut *_14 = &(*streams).out;
19009- PutStr(0 /* _13 */, &*_14, &*par);
19123+ struct string _15; memset(&_15, 0, sizeof(struct string));
19124+ {
19125+ nonempty_to_string(&_15, &*par);
19126+ }
19127+ PutStr(0 /* _13 */, &*_14, &_15);
19128+ string$dest(&_15);
1901019129 }
1901119130 {
1901219131 const struct StreamOut *_15 = &(*streams).out;
@@ -19038,7 +19157,7 @@
1903819157 {
1903919158 varinit(&_19, &_qti);
1904019159 }
19041- push(0 /* _17 */, &*_18, &_19, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3920);
19160+ push(0 /* _17 */, &*_18, &_19, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3942);
1904219161 var$dest(&_19);
1904319162 }
1904419163 qtypepureid$dest(&_qti);
@@ -19104,15 +19223,20 @@
1910419223 bool _8;
1910519224 {
1910619225 struct stack/*var*/ *_9 = &(*sp).current.elems;
19107- struct string _10; memset(&_10, 0, sizeof(struct string));
19226+ struct nonempty_string _10; memset(&_10, 0, sizeof(struct nonempty_string));
1910819227 {
1910919228 uint8_t _11; memset(&_11, 0, sizeof(uint8_t));
1911019229 _11 = 42;
19111- preapp(&_10, &_11, &*solidid);
19230+ struct string _12; memset(&_12, 0, sizeof(struct string));
19231+ {
19232+ nonempty_to_string(&_12, &*solidid);
19233+ }
19234+ nonempty_string(&_10, &_11, &_12);
19235+ string$dest(&_12);
1911219236 _IGNORE_(_11);
1911319237 }
1911419238 find_var_report_unused_and_mark_used(&_8, &*_9, &_10);
19115- string$dest(&_10);
19239+ nonempty_string$dest(&_10);
1911619240 }
1911719241 if(_8)
1911819242 {
@@ -19137,7 +19261,12 @@
1913719261 }
1913819262 {
1913919263 const struct StreamOut *_12 = &(*streams).out;
19140- PutStr(0 /* _11 */, &*_12, &*solidid);
19264+ struct string _13; memset(&_13, 0, sizeof(struct string));
19265+ {
19266+ nonempty_to_string(&_13, &*solidid);
19267+ }
19268+ PutStr(0 /* _11 */, &*_12, &_13);
19269+ string$dest(&_13);
1914119270 }
1914219271 {
1914319272 const struct StreamOut *_13 = &(*streams).out;
@@ -19155,7 +19284,7 @@
1915519284 }
1915619285 }
1915719286
19158-void ParseCases$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const struct string *const par, const struct type_mode *const qualifier, const struct stack/*typepureid*/ *const elems, const uint64_t *const idx, const bool *const typed, const struct string *const shadow)
19287+void ParseCases$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const struct nonempty_string *const par, const struct type_mode *const qualifier, const struct stack/*typepureid*/ *const elems, const uint64_t *const idx, const bool *const typed, const struct nonempty_string *const shadow)
1915919288 {
1916019289 {
1916119290 bool _2;
@@ -19171,13 +19300,13 @@
1917119300 {
1917219301 struct typepureid _ti; memset(&_ti, 0, sizeof(struct typepureid));
1917319302 {
19174- at_get$(&_ti, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 3945);
19303+ at_get$(&_ti, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 3967);
1917519304 }
1917619305 {
1917719306 const struct nonempty_string *_4 = &(_ti).id;
1917819307 MatchCase$(0 /* _3 */, &*streams, &*txtpos, &*level, &*_4);
1917919308 }
19180- struct stack/*string*/ _id; memset(&_id, 0, sizeof(struct stack/*string*/));
19309+ struct stack/*nonempty_string*/ _id; memset(&_id, 0, sizeof(struct stack/*nonempty_string*/));
1918119310 bool _4;
1918219311 {
1918319312 const struct type_pure *_5 = &(_ti).type;
@@ -19186,13 +19315,13 @@
1918619315 if(_4)
1918719316 {
1918819317 {
19189- empty(&_id, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 3951);
19318+ empty(&_id, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest, (void (*)(void *, const void *))nonempty_string$copy, 3973);
1919019319 }
1919119320 }
1919219321 else
1919319322 {
1919419323 {
19195- solid(&_id, &*shadow, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 3953);
19324+ solid(&_id, &*shadow, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest, (void (*)(void *, const void *))nonempty_string$copy, 3975);
1919619325 }
1919719326 }
1919819327 {
@@ -19245,7 +19374,7 @@
1924519374 PutStr(0 /* _13 */, &*_14, &_15);
1924619375 string$dest(&_15);
1924719376 }
19248- const struct stack/*string*/ *_14 = &(_id);
19377+ const struct stack/*nonempty_string*/ *_14 = &(_id);
1924919378 if(!(*_14).size)
1925019379 {
1925119380 {
@@ -19293,7 +19422,7 @@
1929319422 }
1929419423 else
1929519424 {
19296- const struct string *id = (*_14).data;
19425+ const struct nonempty_string *id = (*_14).data;
1929719426 {
1929819427 {
1929919428 ParseCasesBlock$(0 /* _17 */, &*streams, &*txtpos, &*state, &*level, &*sp, &*tmpnr, &*store, &*totality, &*action, &*self, &*reduced_ids, &*par, &*qualifier, &*typed, &*id, &_ti);
@@ -19341,7 +19470,7 @@
1934119470 ParseCases$(0 /* _21 */, &*streams, &*txtpos, &*state, &*level, &*sp, &*tmpnr, &*store, &*totality, &*action, &*self, &*reduced_ids, &*par, &*qualifier, &*elems, &_22, &*typed, &*shadow);
1934219471 _IGNORE_(_22);
1934319472 }
19344- free$(&_id, sizeof(struct string), (void (*)(void *))string$dest);
19473+ free$(&_id, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest);
1934519474 typepureid$dest(&_ti);
1934619475 }
1934719476 else
@@ -19421,7 +19550,7 @@
1942119550 }
1942219551 }
1942319552
19424-void ParseSwitchBlock$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const bool *const typed, const struct qtypepureid *const qti)
19553+void ParseSwitchBlock$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const bool *const typed, const struct qtypepureid *const qti)
1942519554 {
1942619555 {
1942719556 {
@@ -19433,7 +19562,7 @@
1943319562 {
1943419563 varinit(&_4, &*qti);
1943519564 }
19436- push(0 /* _2 */, &*_3, &_4, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 3996);
19565+ push(0 /* _2 */, &*_3, &_4, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 4018);
1943719566 var$dest(&_4);
1943819567 }
1943919568 bool _4;
@@ -19479,13 +19608,8 @@
1947919608 bool _6;
1948019609 {
1948119610 struct stack/*var*/ *_7 = &(*sp).current.elems;
19482- struct string _8; memset(&_8, 0, sizeof(struct string));
19483- {
19484- const struct nonempty_string *_9 = &(*qti).id;
19485- nonempty_to_string(&_8, &*_9);
19486- }
19487- find_var_report_unused_and_mark_used(&_6, &*_7, &_8);
19488- string$dest(&_8);
19611+ const struct nonempty_string *_8 = &(*qti).id;
19612+ find_var_report_unused_and_mark_used(&_6, &*_7, &*_8);
1948919613 }
1949019614 if(_6)
1949119615 {
@@ -19533,7 +19657,7 @@
1953319657 }
1953419658 }
1953519659
19536-void ParseSwitchInternal$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const bool *const typed, const struct qtypepureid *const ref, const struct nonempty_string *const id, const struct nonempty_string *const provide_id)
19660+void ParseSwitchInternal$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const bool *const typed, const struct qtypepureid *const ref, const struct nonempty_string *const id, const struct nonempty_string *const provide_id)
1953719661 {
1953819662 {
1953919663 {
@@ -19550,7 +19674,7 @@
1955019674 ReducedId(&_3, &*provide_id, &_4);
1955119675 string$dest(&_4);
1955219676 }
19553- push(0 /* _2 */, &*reduced_ids, &_3, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest, (void (*)(void *, const void *))ReducedId$copy, 4018);
19677+ push(0 /* _2 */, &*reduced_ids, &_3, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest, (void (*)(void *, const void *))ReducedId$copy, 4040);
1955419678 ReducedId$dest(&_3);
1955519679 }
1955619680 struct type_mode _qualifier; memset(&_qualifier, 0, sizeof(struct type_mode));
@@ -19738,22 +19862,12 @@
1973819862 _21 = *level + _22;
1973919863 _IGNORE_(_22);
1974019864 }
19741- struct string _22; memset(&_22, 0, sizeof(struct string));
19742- {
19743- const struct nonempty_string *_23 = &(*ref).id;
19744- nonempty_to_string(&_22, &*_23);
19745- }
19865+ const struct nonempty_string *_22 = &(*ref).id;
1974619866 const struct stack/*typepureid*/ *_23 = &(*s).elems;
1974719867 uint64_t _24; memset(&_24, 0, sizeof(uint64_t));
1974819868 _24 = 0;
19749- struct string _25; memset(&_25, 0, sizeof(struct string));
19750- {
19751- nonempty_to_string(&_25, &*id);
19752- }
19753- ParseCases$(0 /* _20 */, &*streams, &*txtpos, &*state, &_21, &*sp, &*tmpnr, &*store, &*totality, &*action, &*self, &*reduced_ids, &_22, &_qualifier, &*_23, &_24, &*typed, &_25);
19754- string$dest(&_25);
19869+ ParseCases$(0 /* _20 */, &*streams, &*txtpos, &*state, &_21, &*sp, &*tmpnr, &*store, &*totality, &*action, &*self, &*reduced_ids, &*_22, &_qualifier, &*_23, &_24, &*typed, &*id);
1975519870 _IGNORE_(_24);
19756- string$dest(&_22);
1975719871 _IGNORE_(_21);
1975819872 }
1975919873 {
@@ -19821,11 +19935,7 @@
1982119935 _22 = *level + _23;
1982219936 _IGNORE_(_23);
1982319937 }
19824- struct string _23; memset(&_23, 0, sizeof(struct string));
19825- {
19826- const struct nonempty_string *_24 = &(*ref).id;
19827- nonempty_to_string(&_23, &*_24);
19828- }
19938+ const struct nonempty_string *_23 = &(*ref).id;
1982919939 struct stack/*typepureid*/ _24; memset(&_24, 0, sizeof(struct stack/*typepureid*/));
1983019940 {
1983119941 const struct stack/*constr*/ *_25 = &(*s).constrs;
@@ -19833,15 +19943,9 @@
1983319943 }
1983419944 uint64_t _25; memset(&_25, 0, sizeof(uint64_t));
1983519945 _25 = 0;
19836- struct string _26; memset(&_26, 0, sizeof(struct string));
19837- {
19838- nonempty_to_string(&_26, &*id);
19839- }
19840- ParseCases$(0 /* _21 */, &*streams, &*txtpos, &*state, &_22, &*sp, &*tmpnr, &*store, &*totality, &*action, &*self, &*reduced_ids, &_23, &_qualifier, &_24, &_25, &*typed, &_26);
19841- string$dest(&_26);
19946+ ParseCases$(0 /* _21 */, &*streams, &*txtpos, &*state, &_22, &*sp, &*tmpnr, &*store, &*totality, &*action, &*self, &*reduced_ids, &*_23, &_qualifier, &_24, &_25, &*typed, &*id);
1984219947 _IGNORE_(_25);
1984319948 free$(&_24, sizeof(struct typepureid), (void (*)(void *))typepureid$dest);
19844- string$dest(&_23);
1984519949 _IGNORE_(_22);
1984619950 }
1984719951 {
@@ -20109,7 +20213,7 @@
2010920213 }
2011020214 struct stack/*nonempty_string*/ _var; memset(&_var, 0, sizeof(struct stack/*nonempty_string*/));
2011120215 {
20112- solid(&_var, &*id, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest, (void (*)(void *, const void *))nonempty_string$copy, 4113);
20216+ solid(&_var, &*id, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest, (void (*)(void *, const void *))nonempty_string$copy, 4135);
2011320217 }
2011420218 {
2011520219 uint8_t _28; memset(&_28, 0, sizeof(uint8_t));
@@ -20317,7 +20421,7 @@
2031720421 }
2031820422 }
2031920423
20320-void ParseSwitch$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const bool *const typed)
20424+void ParseSwitch$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const bool *const typed)
2032120425 {
2032220426 {
2032320427 struct nonempty_string _id; memset(&_id, 0, sizeof(struct nonempty_string));
@@ -20441,7 +20545,7 @@
2044120545 }
2044220546 }
2044320547
20444-void ParseReduceBlock$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const bool *const typed, struct stack/*ReducedId*/ *const reduced_ids, const struct qtypepureid *const access)
20548+void ParseReduceBlock$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const bool *const typed, struct stack/*ReducedId*/ *const reduced_ids, const struct qtypepureid *const access)
2044520549 {
2044620550 {
2044720551 {
@@ -20451,13 +20555,8 @@
2045120555 {
2045220556 bool _4; memset(&_4, 0, sizeof(bool));
2045320557 {
20454- struct string _5; memset(&_5, 0, sizeof(struct string));
20455- {
20456- const struct nonempty_string *_6 = &(*access).id;
20457- nonempty_to_string(&_5, &*_6);
20458- }
20459- istmp$(&_4, &_5);
20460- string$dest(&_5);
20558+ const struct nonempty_string *_5 = &(*access).id;
20559+ istmp$(&_4, &*_5);
2046120560 }
2046220561 not(&_3, &_4);
2046320562 _IGNORE_(_4);
@@ -20470,7 +20569,7 @@
2047020569 {
2047120570 varinit(&_6, &*access);
2047220571 }
20473- push(0 /* _4 */, &*_5, &_6, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 4180);
20572+ push(0 /* _4 */, &*_5, &_6, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 4202);
2047420573 var$dest(&_6);
2047520574 }
2047620575 }
@@ -20521,7 +20620,7 @@
2052120620 }
2052220621 }
2052320622
20524-void ParseReduceBlockStack$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const bool *const typed, struct stack/*ReducedId*/ *const reduced_ids, const struct type_pure_prim *const tw_subtype, const struct string *const tmp_elem_id, const struct qtypepureid *const stack, const struct string *const stack_id)
20623+void ParseReduceBlockStack$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const bool *const typed, struct stack/*ReducedId*/ *const reduced_ids, const struct type_pure_prim *const tw_subtype, const struct string *const tmp_elem_id, const struct qtypepureid *const stack, const struct nonempty_string *const stack_id)
2052520624 {
2052620625 {
2052720626 {
@@ -20647,7 +20746,7 @@
2064720746 {
2064820747 varinit(&_16, &_elem);
2064920748 }
20650- push(0 /* _14 */, &*_15, &_16, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 4207);
20749+ push(0 /* _14 */, &*_15, &_16, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 4229);
2065120750 var$dest(&_16);
2065220751 }
2065320752 qtypepureid$dest(&_elem);
@@ -20670,7 +20769,7 @@
2067020769 {
2067120770 varused(&_8, &*stack);
2067220771 }
20673- push(0 /* _6 */, &*_7, &_8, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 4213);
20772+ push(0 /* _6 */, &*_7, &_8, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 4235);
2067420773 var$dest(&_8);
2067520774 }
2067620775 }
@@ -20721,7 +20820,7 @@
2072120820 }
2072220821 }
2072320822
20724-void ParseReduceBlockStackMut$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const bool *const typed, struct stack/*ReducedId*/ *const reduced_ids, const struct type_pure_prim *const tw_subtype, const struct string *const tmp_elem_id, const struct qtypepureid *const stack, const struct string *const stack_id)
20823+void ParseReduceBlockStackMut$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const bool *const typed, struct stack/*ReducedId*/ *const reduced_ids, const struct type_pure_prim *const tw_subtype, const struct string *const tmp_elem_id, const struct qtypepureid *const stack, const struct nonempty_string *const stack_id)
2072520824 {
2072620825 {
2072720826 {
@@ -20847,7 +20946,7 @@
2084720946 {
2084820947 varinit(&_16, &_elem);
2084920948 }
20850- push(0 /* _14 */, &*_15, &_16, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 4240);
20949+ push(0 /* _14 */, &*_15, &_16, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 4262);
2085120950 var$dest(&_16);
2085220951 }
2085320952 qtypepureid$dest(&_elem);
@@ -20870,7 +20969,7 @@
2087020969 {
2087120970 varused(&_8, &*stack);
2087220971 }
20873- push(0 /* _6 */, &*_7, &_8, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 4246);
20972+ push(0 /* _6 */, &*_7, &_8, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 4268);
2087420973 var$dest(&_8);
2087520974 }
2087620975 }
@@ -20921,12 +21020,12 @@
2092121020 }
2092221021 }
2092321022
20924-void ParseReduce$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids_, const bool *const typed)
21023+void ParseReduce$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids_, const bool *const typed)
2092521024 {
2092621025 {
20927- struct string _par; memset(&_par, 0, sizeof(struct string));
21026+ struct nonempty_string _par; memset(&_par, 0, sizeof(struct nonempty_string));
2092821027 {
20929- ParseId$(&_par, &*streams, &*txtpos, &*level);
21028+ ParseIdNonEmpty$(&_par, &*streams, &*txtpos, &*level);
2093021029 }
2093121030 struct stack/*qtypepureid*/ _current; memset(&_current, 0, sizeof(struct stack/*qtypepureid*/));
2093221031 {
@@ -21004,7 +21103,7 @@
2100421103 {
2100521104 ParseId$(&_8, &*streams, &*txtpos, &*level);
2100621105 }
21007- solid(&_opt_elem_id, &_8, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 4288);
21106+ solid(&_opt_elem_id, &_8, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 4310);
2100821107 string$dest(&_8);
2100921108 }
2101021109 }
@@ -21011,7 +21110,7 @@
2101121110 else
2101221111 {
2101321112 {
21014- empty(&_opt_elem_id, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 4290);
21113+ empty(&_opt_elem_id, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 4312);
2101521114 }
2101621115 }
2101721116 {
@@ -21038,542 +21137,346 @@
2103821137 ParseId$(&_tmp_reduce, &*streams, &*txtpos, &*level);
2103921138 }
2104021139 }
21041- struct string _reduced_id; memset(&_reduced_id, 0, sizeof(struct string));
21042- bool _10;
21140+ struct stack/*nonempty_string*/ _reduced_id; memset(&_reduced_id, 0, sizeof(struct stack/*nonempty_string*/));
2104321141 {
21044- struct string _11; memset(&_11, 0, sizeof(struct string));
21045- init$fromliteral(&_11, "", 0);
21046- strequ(&_10, &_11, &_tmp_reduce);
21047- string$dest(&_11);
21142+ to_nonempty_string(&_reduced_id, &_tmp_reduce);
2104821143 }
21049- if(_10)
2105021144 {
21051- string$copy(&_reduced_id, &(_par));
21052- }
21053- else
21054- {
21055- string$copy(&_reduced_id, &(_tmp_reduce));
21056- }
21057- {
21058- struct stack/*ReducedId*/ _reduced_ids; memset(&_reduced_ids, 0, sizeof(struct stack/*ReducedId*/));
21059- clone$(&_reduced_ids, &(*reduced_ids_), sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest, (void (*)(void *, const void *))ReducedId$copy);
21145+ struct nonempty_string _10; memset(&_10, 0, sizeof(struct nonempty_string));
21146+ const struct stack/*nonempty_string*/ *_11 = &(_reduced_id);
21147+ if(!(*_11).size)
2106021148 {
21061- struct ReducedId _13; memset(&_13, 0, sizeof(struct ReducedId));
21062- {
21063- const struct nonempty_string *_14 = &(*current).id;
21064- ReducedId(&_13, &*_14, &_reduced_id);
21065- }
21066- push(0 /* _12 */, &_reduced_ids, &_13, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest, (void (*)(void *, const void *))ReducedId$copy, 4300);
21067- ReducedId$dest(&_13);
21149+ nonempty_string$copy(&_10, &(_par));
2106821150 }
21069- struct type_pure _tp; memset(&_tp, 0, sizeof(struct type_pure));
21070- type_pure$copy(&_tp, &(*current).qt.type);
21071- const struct type_pure *_13 = &(_tp);
21072- switch((*_13).type)
21151+ else
2107321152 {
21074- case 0: // struct stack/*type_pure_normal*/ type_pure_normal:
21153+ const struct nonempty_string *reduced_id = (*_11).data;
21154+ nonempty_string$copy(&_10, &(*reduced_id));
21155+ }
21156+ const struct nonempty_string *reduced_id = &_10;
21157+ {
21158+ struct stack/*ReducedId*/ _reduced_ids; memset(&_reduced_ids, 0, sizeof(struct stack/*ReducedId*/));
21159+ clone$(&_reduced_ids, &(*reduced_ids_), sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest, (void (*)(void *, const void *))ReducedId$copy);
2107521160 {
21076- const struct type_pure_normal *tp = ((*_13).type_pure_normal).data;
21161+ struct ReducedId _14; memset(&_14, 0, sizeof(struct ReducedId));
2107721162 {
21163+ const struct nonempty_string *_15 = &(*current).id;
21164+ struct string _16; memset(&_16, 0, sizeof(struct string));
2107821165 {
21079- uint8_t _16; memset(&_16, 0, sizeof(uint8_t));
21080- _16 = 58;
21081- AssertGet$(0 /* _15 */, &*streams, &*txtpos, &*level, &_16);
21082- _IGNORE_(_16);
21166+ nonempty_to_string(&_16, &*reduced_id);
2108321167 }
21084- bool _17;
21168+ ReducedId(&_14, &*_15, &_16);
21169+ string$dest(&_16);
21170+ }
21171+ push(0 /* _13 */, &_reduced_ids, &_14, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest, (void (*)(void *, const void *))ReducedId$copy, 4326);
21172+ ReducedId$dest(&_14);
21173+ }
21174+ struct type_pure _tp; memset(&_tp, 0, sizeof(struct type_pure));
21175+ type_pure$copy(&_tp, &(*current).qt.type);
21176+ const struct type_pure *_14 = &(_tp);
21177+ switch((*_14).type)
21178+ {
21179+ case 0: // struct stack/*type_pure_normal*/ type_pure_normal:
21180+ {
21181+ const struct type_pure_normal *tp = ((*_14).type_pure_normal).data;
2108521182 {
21086- const struct type_pure *_18 = &(*current).qt.type;
21087- ispureprim(&_17, &*_18);
21088- }
21089- if(_17)
21090- {
21091- struct qtypepureid _reduced; memset(&_reduced, 0, sizeof(struct qtypepureid));
2109221183 {
21093- struct qtypepure _18; memset(&_18, 0, sizeof(struct qtypepure));
21094- {
21095- const struct type_pure *_19 = &(*current).qt.type;
21096- constqtp(&_18, &*_19);
21097- }
21098- struct nonempty_string _19; memset(&_19, 0, sizeof(struct nonempty_string));
21099- {
21100- uint8_t _20; memset(&_20, 0, sizeof(uint8_t));
21101- _20 = 95;
21102- nonempty_string(&_19, &_20, &_reduced_id);
21103- _IGNORE_(_20);
21104- }
21105- qtypepureid(&_reduced, &_18, &_19);
21106- nonempty_string$dest(&_19);
21107- qtypepure$dest(&_18);
21184+ uint8_t _17; memset(&_17, 0, sizeof(uint8_t));
21185+ _17 = 58;
21186+ AssertGet$(0 /* _16 */, &*streams, &*txtpos, &*level, &_17);
21187+ _IGNORE_(_17);
2110821188 }
21189+ bool _18;
2110921190 {
21110- const struct StreamOut *_19 = &(*streams).out;
21111- Indent(0 /* _18 */, &*_19, &*level);
21191+ const struct type_pure *_19 = &(*current).qt.type;
21192+ ispureprim(&_18, &*_19);
2111221193 }
21194+ if(_18)
2111321195 {
21114- const struct StreamOut *_20 = &(*streams).out;
21115- struct string _21; memset(&_21, 0, sizeof(struct string));
21116- init$fromliteral(&_21, "if(", 3);
21117- PutStr(0 /* _19 */, &*_20, &_21);
21118- string$dest(&_21);
21119- }
21120- {
21121- const struct StreamOut *_21 = &(*streams).out;
21122- struct string _22; memset(&_22, 0, sizeof(struct string));
21196+ struct qtypepureid _reduced; memset(&_reduced, 0, sizeof(struct qtypepureid));
2112321197 {
21124- const struct nonempty_string *_23 = &(*current).id;
21125- nonempty_to_string(&_22, &*_23);
21126- }
21127- PutStr(0 /* _20 */, &*_21, &_22);
21128- string$dest(&_22);
21129- }
21130- {
21131- const struct StreamOut *_22 = &(*streams).out;
21132- struct string _23; memset(&_23, 0, sizeof(struct string));
21133- init$fromliteral(&_23, " > 0)\n", 6);
21134- PutStr(0 /* _21 */, &*_22, &_23);
21135- string$dest(&_23);
21136- }
21137- {
21138- const struct StreamOut *_23 = &(*streams).out;
21139- Indent(0 /* _22 */, &*_23, &*level);
21140- }
21141- {
21142- const struct StreamOut *_24 = &(*streams).out;
21143- struct string _25; memset(&_25, 0, sizeof(struct string));
21144- init$fromliteral(&_25, "{\n", 2);
21145- PutStr(0 /* _23 */, &*_24, &_25);
21146- string$dest(&_25);
21147- }
21148- {
21149- const struct StreamOut *_25 = &(*streams).out;
21150- uint64_t _26; memset(&_26, 0, sizeof(uint64_t));
21151- {
21152- uint64_t _27; memset(&_27, 0, sizeof(uint64_t));
21153- _27 = 1;
21154- _26 = _27 + *level;
21155- _IGNORE_(_27);
21156- }
21157- struct stack/*structdef*/ *_27 = &(*state).structs;
21158- EmitLet$(0 /* _24 */, &*_25, &_26, &*_27, &_reduced);
21159- _IGNORE_(_26);
21160- }
21161- const struct stack/*string*/ *_25 = &(_opt_elem_id);
21162- if(!(*_25).size)
21163- {
21164- {
21198+ struct qtypepure _19; memset(&_19, 0, sizeof(struct qtypepure));
2116521199 {
21166- const struct StreamOut *_28 = &(*streams).out;
21167- uint64_t _29; memset(&_29, 0, sizeof(uint64_t));
21168- {
21169- uint64_t _30; memset(&_30, 0, sizeof(uint64_t));
21170- _30 = 1;
21171- _29 = *level + _30;
21172- _IGNORE_(_30);
21173- }
21174- Indent(0 /* _27 */, &*_28, &_29);
21175- _IGNORE_(_29);
21200+ const struct type_pure *_20 = &(*current).qt.type;
21201+ constqtp(&_19, &*_20);
2117621202 }
21203+ struct nonempty_string _20; memset(&_20, 0, sizeof(struct nonempty_string));
2117721204 {
21178- const struct StreamOut *_29 = &(*streams).out;
21179- struct string _30; memset(&_30, 0, sizeof(struct string));
21205+ uint8_t _21; memset(&_21, 0, sizeof(uint8_t));
21206+ _21 = 95;
21207+ struct string _22; memset(&_22, 0, sizeof(struct string));
2118021208 {
21181- const struct nonempty_string *_31 = &(_reduced).id;
21182- nonempty_to_string(&_30, &*_31);
21209+ nonempty_to_string(&_22, &*reduced_id);
2118321210 }
21184- PutStr(0 /* _28 */, &*_29, &_30);
21185- string$dest(&_30);
21211+ nonempty_string(&_20, &_21, &_22);
21212+ string$dest(&_22);
21213+ _IGNORE_(_21);
2118621214 }
21187- {
21188- const struct StreamOut *_30 = &(*streams).out;
21189- struct string _31; memset(&_31, 0, sizeof(struct string));
21190- init$fromliteral(&_31, " = ", 3);
21191- PutStr(0 /* _29 */, &*_30, &_31);
21192- string$dest(&_31);
21193- }
21194- {
21195- const struct StreamOut *_31 = &(*streams).out;
21196- struct string _32; memset(&_32, 0, sizeof(struct string));
21197- {
21198- const struct nonempty_string *_33 = &(*current).id;
21199- nonempty_to_string(&_32, &*_33);
21200- }
21201- PutStr(0 /* _30 */, &*_31, &_32);
21202- string$dest(&_32);
21203- }
21204- {
21205- const struct StreamOut *_32 = &(*streams).out;
21206- struct string _33; memset(&_33, 0, sizeof(struct string));
21207- init$fromliteral(&_33, " - 1;", 5);
21208- PutStrLn(0 /* _31 */, &*_32, &_33);
21209- string$dest(&_33);
21210- }
21215+ qtypepureid(&_reduced, &_19, &_20);
21216+ nonempty_string$dest(&_20);
21217+ qtypepure$dest(&_19);
2121121218 }
21212- }
21213- else
21214- {
21215- const struct string *opt_elem_id = (*_25).data;
2121621219 {
21217- {
21218- const struct StreamOut *_29 = &(*streams).err;
21219- struct string _30; memset(&_30, 0, sizeof(struct string));
21220- init$fromliteral(&_30, "superfluous element-id - can only reduce primitive parameter ", 61);
21221- PutStr(0 /* _28 */, &*_29, &_30);
21222- string$dest(&_30);
21223- }
21224- {
21225- const struct StreamOut *_30 = &(*streams).err;
21226- struct string _31; memset(&_31, 0, sizeof(struct string));
21227- {
21228- const struct nonempty_string *_32 = &(*current).id;
21229- nonempty_to_string(&_31, &*_32);
21230- }
21231- PutStr(0 /* _29 */, &*_30, &_31);
21232- string$dest(&_31);
21233- }
21234- {
21235- const struct StreamOut *_31 = &(*streams).err;
21236- struct string _32; memset(&_32, 0, sizeof(struct string));
21237- init$fromliteral(&_32, " directly, without element ", 27);
21238- PutStr(0 /* _30 */, &*_31, &_32);
21239- string$dest(&_32);
21240- }
21241- {
21242- const struct StreamOut *_32 = &(*streams).err;
21243- PutStr(0 /* _31 */, &*_32, &*opt_elem_id);
21244- }
21245- {
21246- const struct StreamOut *_33 = &(*streams).err;
21247- Fail$(0 /* _32 */, &*_33, &*txtpos);
21248- }
21220+ const struct StreamOut *_20 = &(*streams).out;
21221+ Indent(0 /* _19 */, &*_20, &*level);
2124921222 }
21250- }
21251- {
21252- ParseReduceBlock$(0 /* _28 */, &*streams, &*txtpos, &*state, &*level, &*sp, &*tmpnr, &*store, &*totality, &*action, &*self, &*typed, &_reduced_ids, &_reduced);
21253- }
21254- {
21255- const struct StreamOut *_30 = &(*streams).out;
21256- uint64_t _31; memset(&_31, 0, sizeof(uint64_t));
2125721223 {
21258- uint64_t _32; memset(&_32, 0, sizeof(uint64_t));
21259- _32 = 1;
21260- _31 = _32 + *level;
21261- _IGNORE_(_32);
21224+ const struct StreamOut *_21 = &(*streams).out;
21225+ struct string _22; memset(&_22, 0, sizeof(struct string));
21226+ init$fromliteral(&_22, "if(", 3);
21227+ PutStr(0 /* _20 */, &*_21, &_22);
21228+ string$dest(&_22);
2126221229 }
21263- Indent(0 /* _29 */, &*_30, &_31);
21264- _IGNORE_(_31);
21265- }
21266- {
21267- const struct StreamOut *_31 = &(*streams).out;
21268- const struct type_pure *_32 = &(_reduced).qt.type;
21269- FreeIn(0 /* _30 */, &*_31, &*_32);
21270- }
21271- {
21272- const struct StreamOut *_32 = &(*streams).out;
21273- struct string _33; memset(&_33, 0, sizeof(struct string));
2127421230 {
21275- const struct nonempty_string *_34 = &(_reduced).id;
21276- nonempty_to_string(&_33, &*_34);
21277- }
21278- PutStr(0 /* _31 */, &*_32, &_33);
21279- string$dest(&_33);
21280- }
21281- {
21282- const struct StreamOut *_33 = &(*streams).out;
21283- struct stack/*structdef*/ *_34 = &(*state).structs;
21284- const struct type_pure *_35 = &(_reduced).qt.type;
21285- FreeOut(0 /* _32 */, &*_33, &*_34, &*_35);
21286- }
21287- {
21288- const struct StreamOut *_34 = &(*streams).out;
21289- struct string _35; memset(&_35, 0, sizeof(struct string));
21290- init$fromliteral(&_35, "\n", 1);
21291- PutStr(0 /* _33 */, &*_34, &_35);
21292- string$dest(&_35);
21293- }
21294- qtypepureid$dest(&_reduced);
21295- }
21296- else
21297- {
21298- bool _18;
21299- {
21300- struct string _19; memset(&_19, 0, sizeof(struct string));
21301- init$fromliteral(&_19, "StreamIn", 8);
21302- struct string _20; memset(&_20, 0, sizeof(struct string));
21303- {
21304- const struct nonempty_string *_21 = &(*tp).prim.name;
21305- nonempty_to_string(&_20, &*_21);
21306- }
21307- strequ(&_18, &_19, &_20);
21308- string$dest(&_20);
21309- string$dest(&_19);
21310- }
21311- if(_18)
21312- {
21313- {
21314- const struct StreamOut *_20 = &(*streams).err;
21315- struct string _21; memset(&_21, 0, sizeof(struct string));
21316- init$fromliteral(&_21, "recursion on input limited by stack-size - use for until tail-call optimization implemented", 91);
21317- PutStr(0 /* _19 */, &*_20, &_21);
21318- string$dest(&_21);
21319- }
21320- {
21321- const struct StreamOut *_21 = &(*streams).err;
21322- Warn(0 /* _20 */, &*_21, &*txtpos);
21323- }
21324- {
21325- struct ReducedId _22; memset(&_22, 0, sizeof(struct ReducedId));
21231+ const struct StreamOut *_22 = &(*streams).out;
21232+ struct string _23; memset(&_23, 0, sizeof(struct string));
2132621233 {
21327- const struct nonempty_string *_23 = &(*current).id;
21328- ReducedId(&_22, &*_23, &_par);
21234+ const struct nonempty_string *_24 = &(*current).id;
21235+ nonempty_to_string(&_23, &*_24);
2132921236 }
21330- push(0 /* _21 */, &_reduced_ids, &_22, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest, (void (*)(void *, const void *))ReducedId$copy, 4342);
21331- ReducedId$dest(&_22);
21237+ PutStr(0 /* _21 */, &*_22, &_23);
21238+ string$dest(&_23);
2133221239 }
21333- struct qtypepureid _elem; memset(&_elem, 0, sizeof(struct qtypepureid));
2133421240 {
21335- struct qtypepure _22; memset(&_22, 0, sizeof(struct qtypepure));
21336- {
21337- struct type_pure _23; memset(&_23, 0, sizeof(struct type_pure));
21338- {
21339- type_pure_u8(&_23);
21340- }
21341- constqtp(&_22, &_23);
21342- type_pure$dest(&_23);
21343- }
21344- struct nonempty_string _23; memset(&_23, 0, sizeof(struct nonempty_string));
21345- {
21346- uint8_t _24; memset(&_24, 0, sizeof(uint8_t));
21347- _24 = 95;
21348- nonempty_string(&_23, &_24, &_reduced_id);
21349- _IGNORE_(_24);
21350- }
21351- qtypepureid(&_elem, &_22, &_23);
21352- nonempty_string$dest(&_23);
21353- qtypepure$dest(&_22);
21354- }
21355- struct nonempty_string _tmpid; memset(&_tmpid, 0, sizeof(struct nonempty_string));
21356- {
21357- GenVar$(&_tmpid, &*tmpnr);
21358- }
21359- {
2136021241 const struct StreamOut *_23 = &(*streams).out;
21361- Indent(0 /* _22 */, &*_23, &*level);
21242+ struct string _24; memset(&_24, 0, sizeof(struct string));
21243+ init$fromliteral(&_24, " > 0)\n", 6);
21244+ PutStr(0 /* _22 */, &*_23, &_24);
21245+ string$dest(&_24);
2136221246 }
2136321247 {
2136421248 const struct StreamOut *_24 = &(*streams).out;
21365- struct string _25; memset(&_25, 0, sizeof(struct string));
21366- init$fromliteral(&_25, "int ", 4);
21367- PutStr(0 /* _23 */, &*_24, &_25);
21368- string$dest(&_25);
21249+ Indent(0 /* _23 */, &*_24, &*level);
2136921250 }
2137021251 {
2137121252 const struct StreamOut *_25 = &(*streams).out;
2137221253 struct string _26; memset(&_26, 0, sizeof(struct string));
21373- {
21374- nonempty_to_string(&_26, &_tmpid);
21375- }
21254+ init$fromliteral(&_26, "{\n", 2);
2137621255 PutStr(0 /* _24 */, &*_25, &_26);
2137721256 string$dest(&_26);
2137821257 }
2137921258 {
2138021259 const struct StreamOut *_26 = &(*streams).out;
21381- struct string _27; memset(&_27, 0, sizeof(struct string));
21382- init$fromliteral(&_27, " = getc(", 8);
21383- PutStr(0 /* _25 */, &*_26, &_27);
21384- string$dest(&_27);
21260+ uint64_t _27; memset(&_27, 0, sizeof(uint64_t));
21261+ {
21262+ uint64_t _28; memset(&_28, 0, sizeof(uint64_t));
21263+ _28 = 1;
21264+ _27 = _28 + *level;
21265+ _IGNORE_(_28);
21266+ }
21267+ struct stack/*structdef*/ *_28 = &(*state).structs;
21268+ EmitLet$(0 /* _25 */, &*_26, &_27, &*_28, &_reduced);
21269+ _IGNORE_(_27);
2138521270 }
21271+ const struct stack/*string*/ *_26 = &(_opt_elem_id);
21272+ if(!(*_26).size)
2138621273 {
21387- const struct StreamOut *_27 = &(*streams).out;
21388- PutStr(0 /* _26 */, &*_27, &_par);
21389- }
21390- {
21391- const struct StreamOut *_28 = &(*streams).out;
21392- struct string _29; memset(&_29, 0, sizeof(struct string));
21393- init$fromliteral(&_29, "->f); ", 6);
21394- PutStrLn(0 /* _27 */, &*_28, &_29);
21395- string$dest(&_29);
21396- }
21397- {
21398- const struct StreamOut *_29 = &(*streams).out;
21399- Indent(0 /* _28 */, &*_29, &*level);
21400- }
21401- {
21402- const struct StreamOut *_30 = &(*streams).out;
21403- struct string _31; memset(&_31, 0, sizeof(struct string));
21404- init$fromliteral(&_31, "if(", 3);
21405- PutStr(0 /* _29 */, &*_30, &_31);
21406- string$dest(&_31);
21407- }
21408- {
21409- const struct StreamOut *_31 = &(*streams).out;
21410- struct string _32; memset(&_32, 0, sizeof(struct string));
2141121274 {
21412- nonempty_to_string(&_32, &_tmpid);
21275+ {
21276+ const struct StreamOut *_29 = &(*streams).out;
21277+ uint64_t _30; memset(&_30, 0, sizeof(uint64_t));
21278+ {
21279+ uint64_t _31; memset(&_31, 0, sizeof(uint64_t));
21280+ _31 = 1;
21281+ _30 = *level + _31;
21282+ _IGNORE_(_31);
21283+ }
21284+ Indent(0 /* _28 */, &*_29, &_30);
21285+ _IGNORE_(_30);
21286+ }
21287+ {
21288+ const struct StreamOut *_30 = &(*streams).out;
21289+ struct string _31; memset(&_31, 0, sizeof(struct string));
21290+ {
21291+ const struct nonempty_string *_32 = &(_reduced).id;
21292+ nonempty_to_string(&_31, &*_32);
21293+ }
21294+ PutStr(0 /* _29 */, &*_30, &_31);
21295+ string$dest(&_31);
21296+ }
21297+ {
21298+ const struct StreamOut *_31 = &(*streams).out;
21299+ struct string _32; memset(&_32, 0, sizeof(struct string));
21300+ init$fromliteral(&_32, " = ", 3);
21301+ PutStr(0 /* _30 */, &*_31, &_32);
21302+ string$dest(&_32);
21303+ }
21304+ {
21305+ const struct StreamOut *_32 = &(*streams).out;
21306+ struct string _33; memset(&_33, 0, sizeof(struct string));
21307+ {
21308+ const struct nonempty_string *_34 = &(*current).id;
21309+ nonempty_to_string(&_33, &*_34);
21310+ }
21311+ PutStr(0 /* _31 */, &*_32, &_33);
21312+ string$dest(&_33);
21313+ }
21314+ {
21315+ const struct StreamOut *_33 = &(*streams).out;
21316+ struct string _34; memset(&_34, 0, sizeof(struct string));
21317+ init$fromliteral(&_34, " - 1;", 5);
21318+ PutStrLn(0 /* _32 */, &*_33, &_34);
21319+ string$dest(&_34);
21320+ }
2141321321 }
21414- PutStr(0 /* _30 */, &*_31, &_32);
21415- string$dest(&_32);
2141621322 }
21323+ else
2141721324 {
21418- const struct StreamOut *_32 = &(*streams).out;
21419- struct string _33; memset(&_33, 0, sizeof(struct string));
21420- init$fromliteral(&_33, " >= 0)", 6);
21421- PutStrLn(0 /* _31 */, &*_32, &_33);
21422- string$dest(&_33);
21423- }
21424- {
21425- const struct StreamOut *_33 = &(*streams).out;
21426- Indent(0 /* _32 */, &*_33, &*level);
21427- }
21428- {
21429- const struct StreamOut *_34 = &(*streams).out;
21430- struct string _35; memset(&_35, 0, sizeof(struct string));
21431- init$fromliteral(&_35, "{", 1);
21432- PutStrLn(0 /* _33 */, &*_34, &_35);
21433- string$dest(&_35);
21434- }
21435- {
21436- const struct StreamOut *_35 = &(*streams).out;
21437- uint64_t _36; memset(&_36, 0, sizeof(uint64_t));
21325+ const struct string *opt_elem_id = (*_26).data;
2143821326 {
21439- uint64_t _37; memset(&_37, 0, sizeof(uint64_t));
21440- _37 = 1;
21441- _36 = _37 + *level;
21442- _IGNORE_(_37);
21327+ {
21328+ const struct StreamOut *_30 = &(*streams).err;
21329+ struct string _31; memset(&_31, 0, sizeof(struct string));
21330+ init$fromliteral(&_31, "superfluous element-id - can only reduce primitive parameter ", 61);
21331+ PutStr(0 /* _29 */, &*_30, &_31);
21332+ string$dest(&_31);
21333+ }
21334+ {
21335+ const struct StreamOut *_31 = &(*streams).err;
21336+ struct string _32; memset(&_32, 0, sizeof(struct string));
21337+ {
21338+ const struct nonempty_string *_33 = &(*current).id;
21339+ nonempty_to_string(&_32, &*_33);
21340+ }
21341+ PutStr(0 /* _30 */, &*_31, &_32);
21342+ string$dest(&_32);
21343+ }
21344+ {
21345+ const struct StreamOut *_32 = &(*streams).err;
21346+ struct string _33; memset(&_33, 0, sizeof(struct string));
21347+ init$fromliteral(&_33, " directly, without element ", 27);
21348+ PutStr(0 /* _31 */, &*_32, &_33);
21349+ string$dest(&_33);
21350+ }
21351+ {
21352+ const struct StreamOut *_33 = &(*streams).err;
21353+ PutStr(0 /* _32 */, &*_33, &*opt_elem_id);
21354+ }
21355+ {
21356+ const struct StreamOut *_34 = &(*streams).err;
21357+ Fail$(0 /* _33 */, &*_34, &*txtpos);
21358+ }
2144321359 }
21444- Indent(0 /* _34 */, &*_35, &_36);
21445- _IGNORE_(_36);
2144621360 }
2144721361 {
21448- const struct StreamOut *_36 = &(*streams).out;
21449- struct string _37; memset(&_37, 0, sizeof(struct string));
21450- init$fromliteral(&_37, "const uint8_t ", 14);
21451- PutStr(0 /* _35 */, &*_36, &_37);
21452- string$dest(&_37);
21362+ ParseReduceBlock$(0 /* _29 */, &*streams, &*txtpos, &*state, &*level, &*sp, &*tmpnr, &*store, &*totality, &*action, &*self, &*typed, &_reduced_ids, &_reduced);
2145321363 }
2145421364 {
21455- const struct StreamOut *_37 = &(*streams).out;
21456- struct string _38; memset(&_38, 0, sizeof(struct string));
21365+ const struct StreamOut *_31 = &(*streams).out;
21366+ uint64_t _32; memset(&_32, 0, sizeof(uint64_t));
2145721367 {
21458- const struct nonempty_string *_39 = &(_elem).id;
21459- nonempty_to_string(&_38, &*_39);
21368+ uint64_t _33; memset(&_33, 0, sizeof(uint64_t));
21369+ _33 = 1;
21370+ _32 = _33 + *level;
21371+ _IGNORE_(_33);
2146021372 }
21461- PutStr(0 /* _36 */, &*_37, &_38);
21462- string$dest(&_38);
21373+ Indent(0 /* _30 */, &*_31, &_32);
21374+ _IGNORE_(_32);
2146321375 }
2146421376 {
21465- const struct StreamOut *_38 = &(*streams).out;
21466- struct string _39; memset(&_39, 0, sizeof(struct string));
21467- init$fromliteral(&_39, " = (uint8_t)", 12);
21468- PutStr(0 /* _37 */, &*_38, &_39);
21469- string$dest(&_39);
21377+ const struct StreamOut *_32 = &(*streams).out;
21378+ const struct type_pure *_33 = &(_reduced).qt.type;
21379+ FreeIn(0 /* _31 */, &*_32, &*_33);
2147021380 }
2147121381 {
21472- const struct StreamOut *_39 = &(*streams).out;
21473- struct string _40; memset(&_40, 0, sizeof(struct string));
21382+ const struct StreamOut *_33 = &(*streams).out;
21383+ struct string _34; memset(&_34, 0, sizeof(struct string));
2147421384 {
21475- nonempty_to_string(&_40, &_tmpid);
21385+ const struct nonempty_string *_35 = &(_reduced).id;
21386+ nonempty_to_string(&_34, &*_35);
2147621387 }
21477- PutStr(0 /* _38 */, &*_39, &_40);
21478- string$dest(&_40);
21388+ PutStr(0 /* _32 */, &*_33, &_34);
21389+ string$dest(&_34);
2147921390 }
2148021391 {
21481- const struct StreamOut *_40 = &(*streams).out;
21482- struct string _41; memset(&_41, 0, sizeof(struct string));
21483- init$fromliteral(&_41, ";", 1);
21484- PutStrLn(0 /* _39 */, &*_40, &_41);
21485- string$dest(&_41);
21392+ const struct StreamOut *_34 = &(*streams).out;
21393+ struct stack/*structdef*/ *_35 = &(*state).structs;
21394+ const struct type_pure *_36 = &(_reduced).qt.type;
21395+ FreeOut(0 /* _33 */, &*_34, &*_35, &*_36);
2148621396 }
2148721397 {
21488- ParseReduceBlock$(0 /* _40 */, &*streams, &*txtpos, &*state, &*level, &*sp, &*tmpnr, &*store, &*totality, &*action, &*self, &*typed, &_reduced_ids, &_elem);
21398+ const struct StreamOut *_35 = &(*streams).out;
21399+ struct string _36; memset(&_36, 0, sizeof(struct string));
21400+ init$fromliteral(&_36, "\n", 1);
21401+ PutStr(0 /* _34 */, &*_35, &_36);
21402+ string$dest(&_36);
2148921403 }
21490- nonempty_string$dest(&_tmpid);
21491- qtypepureid$dest(&_elem);
21404+ qtypepureid$dest(&_reduced);
2149221405 }
2149321406 else
2149421407 {
21408+ bool _19;
2149521409 {
21496- const struct StreamOut *_20 = &(*streams).err;
21410+ struct string _20; memset(&_20, 0, sizeof(struct string));
21411+ init$fromliteral(&_20, "StreamIn", 8);
2149721412 struct string _21; memset(&_21, 0, sizeof(struct string));
21498- init$fromliteral(&_21, "reduce not implemented for struct/union/enum - use switch instead", 65);
21499- PutStr(0 /* _19 */, &*_20, &_21);
21500- string$dest(&_21);
21501- }
21502- {
21503- const struct StreamOut *_21 = &(*streams).err;
21504- struct string _22; memset(&_22, 0, sizeof(struct string));
2150521413 {
21506- const struct nonempty_string *_23 = &(*current).id;
21507- nonempty_to_string(&_22, &*_23);
21414+ const struct nonempty_string *_22 = &(*tp).prim.name;
21415+ nonempty_to_string(&_21, &*_22);
2150821416 }
21509- PutStr(0 /* _20 */, &*_21, &_22);
21510- string$dest(&_22);
21417+ strequ(&_19, &_20, &_21);
21418+ string$dest(&_21);
21419+ string$dest(&_20);
2151121420 }
21421+ if(_19)
2151221422 {
21513- const struct StreamOut *_22 = &(*streams).err;
21514- Fail$(0 /* _21 */, &*_22, &*txtpos);
21515- }
21516- }
21517- }
21518- {
21519- const struct StreamOut *_20 = &(*streams).out;
21520- Indent(0 /* _19 */, &*_20, &*level);
21521- }
21522- {
21523- const struct StreamOut *_21 = &(*streams).out;
21524- struct string _22; memset(&_22, 0, sizeof(struct string));
21525- init$fromliteral(&_22, "}\n", 2);
21526- PutStr(0 /* _20 */, &*_21, &_22);
21527- string$dest(&_22);
21528- }
21529- }
21530- break;
21531- }
21532- case 1: // struct stack/*type_pure_wrapped*/ type_pure_wrapped:
21533- {
21534- const struct type_pure_wrapped *tp = ((*_13).type_pure_wrapped).data;
21535- {
21536- struct container_type _tpw; memset(&_tpw, 0, sizeof(struct container_type));
21537- container_type$copy(&_tpw, &(*tp).which);
21538- const struct container_type *_16 = &(_tpw);
21539- switch((*_16).type)
21540- {
21541- case 0: // void container_stack:
21542- {
21543- {
21544- struct string _tmp_elem_id; memset(&_tmp_elem_id, 0, sizeof(struct string));
2154521423 {
21546- ParseId$(&_tmp_elem_id, &*streams, &*txtpos, &*level);
21424+ const struct StreamOut *_21 = &(*streams).err;
21425+ struct string _22; memset(&_22, 0, sizeof(struct string));
21426+ init$fromliteral(&_22, "recursion on input limited by stack-size - use for until tail-call optimization implemented", 91);
21427+ PutStr(0 /* _20 */, &*_21, &_22);
21428+ string$dest(&_22);
2154721429 }
2154821430 {
21549- uint8_t _19; memset(&_19, 0, sizeof(uint8_t));
21550- _19 = 58;
21551- AssertGet$(0 /* _18 */, &*streams, &*txtpos, &*level, &_19);
21552- _IGNORE_(_19);
21431+ const struct StreamOut *_22 = &(*streams).err;
21432+ Warn(0 /* _21 */, &*_22, &*txtpos);
2155321433 }
2155421434 {
21555- const struct StreamOut *_20 = &(*streams).out;
21556- Indent(0 /* _19 */, &*_20, &*level);
21435+ struct ReducedId _23; memset(&_23, 0, sizeof(struct ReducedId));
21436+ {
21437+ const struct nonempty_string *_24 = &(*current).id;
21438+ struct string _25; memset(&_25, 0, sizeof(struct string));
21439+ {
21440+ nonempty_to_string(&_25, &_par);
21441+ }
21442+ ReducedId(&_23, &*_24, &_25);
21443+ string$dest(&_25);
21444+ }
21445+ push(0 /* _22 */, &_reduced_ids, &_23, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest, (void (*)(void *, const void *))ReducedId$copy, 4368);
21446+ ReducedId$dest(&_23);
2155721447 }
21448+ struct qtypepureid _elem; memset(&_elem, 0, sizeof(struct qtypepureid));
2155821449 {
21559- const struct StreamOut *_21 = &(*streams).out;
21560- struct string _22; memset(&_22, 0, sizeof(struct string));
21561- init$fromliteral(&_22, "if(", 3);
21562- PutStr(0 /* _20 */, &*_21, &_22);
21563- string$dest(&_22);
21450+ struct qtypepure _23; memset(&_23, 0, sizeof(struct qtypepure));
21451+ {
21452+ struct type_pure _24; memset(&_24, 0, sizeof(struct type_pure));
21453+ {
21454+ type_pure_u8(&_24);
21455+ }
21456+ constqtp(&_23, &_24);
21457+ type_pure$dest(&_24);
21458+ }
21459+ struct nonempty_string _24; memset(&_24, 0, sizeof(struct nonempty_string));
21460+ {
21461+ uint8_t _25; memset(&_25, 0, sizeof(uint8_t));
21462+ _25 = 95;
21463+ struct string _26; memset(&_26, 0, sizeof(struct string));
21464+ {
21465+ nonempty_to_string(&_26, &*reduced_id);
21466+ }
21467+ nonempty_string(&_24, &_25, &_26);
21468+ string$dest(&_26);
21469+ _IGNORE_(_25);
21470+ }
21471+ qtypepureid(&_elem, &_23, &_24);
21472+ nonempty_string$dest(&_24);
21473+ qtypepure$dest(&_23);
2156421474 }
21475+ struct nonempty_string _tmpid; memset(&_tmpid, 0, sizeof(struct nonempty_string));
2156521476 {
21566- const struct StreamOut *_22 = &(*streams).out;
21567- PutStr(0 /* _21 */, &*_22, &_par);
21477+ GenVar$(&_tmpid, &*tmpnr);
2156821478 }
2156921479 {
21570- const struct StreamOut *_23 = &(*streams).out;
21571- struct string _24; memset(&_24, 0, sizeof(struct string));
21572- init$fromliteral(&_24, "->fill > 0)", 11);
21573- PutStrLn(0 /* _22 */, &*_23, &_24);
21574- string$dest(&_24);
21575- }
21576- {
2157721480 const struct StreamOut *_24 = &(*streams).out;
2157821481 Indent(0 /* _23 */, &*_24, &*level);
2157921482 }
@@ -21580,71 +21483,31 @@
2158021483 {
2158121484 const struct StreamOut *_25 = &(*streams).out;
2158221485 struct string _26; memset(&_26, 0, sizeof(struct string));
21583- init$fromliteral(&_26, "{", 1);
21584- PutStrLn(0 /* _24 */, &*_25, &_26);
21486+ init$fromliteral(&_26, "int ", 4);
21487+ PutStr(0 /* _24 */, &*_25, &_26);
2158521488 string$dest(&_26);
2158621489 }
21587- struct string _stack_id; memset(&_stack_id, 0, sizeof(struct string));
21588- string$copy(&_stack_id, &(_reduced_id));
21589- struct qtypepureid _stack; memset(&_stack, 0, sizeof(struct qtypepureid));
2159021490 {
21591- struct qtypepure _25; memset(&_25, 0, sizeof(struct qtypepure));
21592- {
21593- struct type_pure _26; memset(&_26, 0, sizeof(struct type_pure));
21594- {
21595- struct container_type _27; memset(&_27, 0, sizeof(struct container_type));
21596- {
21597- container_stack(&_27);
21598- }
21599- const struct type_pure_prim *_28 = &(*tp).subtype;
21600- type_pure_wrapped(&_26, &_27, &*_28);
21601- container_type$dest(&_27);
21602- }
21603- constqtp(&_25, &_26);
21604- type_pure$dest(&_26);
21605- }
21606- struct nonempty_string _26; memset(&_26, 0, sizeof(struct nonempty_string));
21607- {
21608- uint8_t _27; memset(&_27, 0, sizeof(uint8_t));
21609- _27 = 95;
21610- nonempty_string(&_26, &_27, &_stack_id);
21611- _IGNORE_(_27);
21612- }
21613- qtypepureid(&_stack, &_25, &_26);
21614- nonempty_string$dest(&_26);
21615- qtypepure$dest(&_25);
21616- }
21617- {
2161821491 const struct StreamOut *_26 = &(*streams).out;
21619- uint64_t _27; memset(&_27, 0, sizeof(uint64_t));
21492+ struct string _27; memset(&_27, 0, sizeof(struct string));
2162021493 {
21621- uint64_t _28; memset(&_28, 0, sizeof(uint64_t));
21622- _28 = 1;
21623- _27 = _28 + *level;
21624- _IGNORE_(_28);
21494+ nonempty_to_string(&_27, &_tmpid);
2162521495 }
21626- struct stack/*structdef*/ *_28 = &(*state).structs;
21627- EmitLet$(0 /* _25 */, &*_26, &_27, &*_28, &_stack);
21628- _IGNORE_(_27);
21496+ PutStr(0 /* _25 */, &*_26, &_27);
21497+ string$dest(&_27);
2162921498 }
2163021499 {
2163121500 const struct StreamOut *_27 = &(*streams).out;
21632- uint64_t _28; memset(&_28, 0, sizeof(uint64_t));
21633- {
21634- uint64_t _29; memset(&_29, 0, sizeof(uint64_t));
21635- _29 = 1;
21636- _28 = _29 + *level;
21637- _IGNORE_(_29);
21638- }
21639- Indent(0 /* _26 */, &*_27, &_28);
21640- _IGNORE_(_28);
21501+ struct string _28; memset(&_28, 0, sizeof(struct string));
21502+ init$fromliteral(&_28, " = getc(", 8);
21503+ PutStr(0 /* _26 */, &*_27, &_28);
21504+ string$dest(&_28);
2164121505 }
2164221506 {
2164321507 const struct StreamOut *_28 = &(*streams).out;
2164421508 struct string _29; memset(&_29, 0, sizeof(struct string));
2164521509 {
21646- const struct nonempty_string *_30 = &(_stack).id;
21647- nonempty_to_string(&_29, &*_30);
21510+ nonempty_to_string(&_29, &_par);
2164821511 }
2164921512 PutStr(0 /* _27 */, &*_28, &_29);
2165021513 string$dest(&_29);
@@ -21652,78 +21515,72 @@
2165221515 {
2165321516 const struct StreamOut *_29 = &(*streams).out;
2165421517 struct string _30; memset(&_30, 0, sizeof(struct string));
21655- init$fromliteral(&_30, ".fill = ", 8);
21656- PutStr(0 /* _28 */, &*_29, &_30);
21518+ init$fromliteral(&_30, "->f); ", 6);
21519+ PutStrLn(0 /* _28 */, &*_29, &_30);
2165721520 string$dest(&_30);
2165821521 }
2165921522 {
2166021523 const struct StreamOut *_30 = &(*streams).out;
21661- PutStr(0 /* _29 */, &*_30, &_par);
21524+ Indent(0 /* _29 */, &*_30, &*level);
2166221525 }
2166321526 {
2166421527 const struct StreamOut *_31 = &(*streams).out;
2166521528 struct string _32; memset(&_32, 0, sizeof(struct string));
21666- init$fromliteral(&_32, "->fill - 1; ", 12);
21667- PutStrLn(0 /* _30 */, &*_31, &_32);
21529+ init$fromliteral(&_32, "if(", 3);
21530+ PutStr(0 /* _30 */, &*_31, &_32);
2166821531 string$dest(&_32);
2166921532 }
2167021533 {
2167121534 const struct StreamOut *_32 = &(*streams).out;
21672- uint64_t _33; memset(&_33, 0, sizeof(uint64_t));
21535+ struct string _33; memset(&_33, 0, sizeof(struct string));
2167321536 {
21674- uint64_t _34; memset(&_34, 0, sizeof(uint64_t));
21675- _34 = 1;
21676- _33 = _34 + *level;
21677- _IGNORE_(_34);
21537+ nonempty_to_string(&_33, &_tmpid);
2167821538 }
21679- Indent(0 /* _31 */, &*_32, &_33);
21680- _IGNORE_(_33);
21539+ PutStr(0 /* _31 */, &*_32, &_33);
21540+ string$dest(&_33);
2168121541 }
2168221542 {
2168321543 const struct StreamOut *_33 = &(*streams).out;
2168421544 struct string _34; memset(&_34, 0, sizeof(struct string));
21685- {
21686- const struct nonempty_string *_35 = &(_stack).id;
21687- nonempty_to_string(&_34, &*_35);
21688- }
21689- PutStr(0 /* _32 */, &*_33, &_34);
21545+ init$fromliteral(&_34, " >= 0)", 6);
21546+ PutStrLn(0 /* _32 */, &*_33, &_34);
2169021547 string$dest(&_34);
2169121548 }
2169221549 {
2169321550 const struct StreamOut *_34 = &(*streams).out;
21694- struct string _35; memset(&_35, 0, sizeof(struct string));
21695- init$fromliteral(&_35, ".data = ", 8);
21696- PutStr(0 /* _33 */, &*_34, &_35);
21697- string$dest(&_35);
21551+ Indent(0 /* _33 */, &*_34, &*level);
2169821552 }
2169921553 {
2170021554 const struct StreamOut *_35 = &(*streams).out;
21701- PutStr(0 /* _34 */, &*_35, &_par);
21555+ struct string _36; memset(&_36, 0, sizeof(struct string));
21556+ init$fromliteral(&_36, "{", 1);
21557+ PutStrLn(0 /* _34 */, &*_35, &_36);
21558+ string$dest(&_36);
2170221559 }
2170321560 {
2170421561 const struct StreamOut *_36 = &(*streams).out;
21705- struct string _37; memset(&_37, 0, sizeof(struct string));
21706- init$fromliteral(&_37, "->data; // REFERENCE - memory must NOT be de-allocated when leaving scope!!!", 76);
21707- PutStrLn(0 /* _35 */, &*_36, &_37);
21708- string$dest(&_37);
21562+ uint64_t _37; memset(&_37, 0, sizeof(uint64_t));
21563+ {
21564+ uint64_t _38; memset(&_38, 0, sizeof(uint64_t));
21565+ _38 = 1;
21566+ _37 = _38 + *level;
21567+ _IGNORE_(_38);
21568+ }
21569+ Indent(0 /* _35 */, &*_36, &_37);
21570+ _IGNORE_(_37);
2170921571 }
2171021572 {
2171121573 const struct StreamOut *_37 = &(*streams).out;
21712- uint64_t _38; memset(&_38, 0, sizeof(uint64_t));
21713- {
21714- uint64_t _39; memset(&_39, 0, sizeof(uint64_t));
21715- _39 = 1;
21716- _38 = _39 + *level;
21717- _IGNORE_(_39);
21718- }
21719- Indent(0 /* _36 */, &*_37, &_38);
21720- _IGNORE_(_38);
21574+ struct string _38; memset(&_38, 0, sizeof(struct string));
21575+ init$fromliteral(&_38, "const uint8_t ", 14);
21576+ PutStr(0 /* _36 */, &*_37, &_38);
21577+ string$dest(&_38);
2172121578 }
2172221579 {
2172321580 const struct StreamOut *_38 = &(*streams).out;
2172421581 struct string _39; memset(&_39, 0, sizeof(struct string));
2172521582 {
21726- const struct nonempty_string *_40 = &(_stack).id;
21583+ const struct nonempty_string *_40 = &(_elem).id;
2172721584 nonempty_to_string(&_39, &*_40);
2172821585 }
2172921586 PutStr(0 /* _37 */, &*_38, &_39);
@@ -21732,534 +21589,894 @@
2173221589 {
2173321590 const struct StreamOut *_39 = &(*streams).out;
2173421591 struct string _40; memset(&_40, 0, sizeof(struct string));
21735- init$fromliteral(&_40, ".size = (4 * (", 14);
21592+ init$fromliteral(&_40, " = (uint8_t)", 12);
2173621593 PutStr(0 /* _38 */, &*_39, &_40);
2173721594 string$dest(&_40);
2173821595 }
2173921596 {
2174021597 const struct StreamOut *_40 = &(*streams).out;
21741- PutStr(0 /* _39 */, &*_40, &_par);
21598+ struct string _41; memset(&_41, 0, sizeof(struct string));
21599+ {
21600+ nonempty_to_string(&_41, &_tmpid);
21601+ }
21602+ PutStr(0 /* _39 */, &*_40, &_41);
21603+ string$dest(&_41);
2174221604 }
2174321605 {
2174421606 const struct StreamOut *_41 = &(*streams).out;
2174521607 struct string _42; memset(&_42, 0, sizeof(struct string));
21746- init$fromliteral(&_42, "->fill + 1) > ", 14);
21747- PutStr(0 /* _40 */, &*_41, &_42);
21608+ init$fromliteral(&_42, ";", 1);
21609+ PutStrLn(0 /* _40 */, &*_41, &_42);
2174821610 string$dest(&_42);
2174921611 }
2175021612 {
21751- const struct StreamOut *_42 = &(*streams).out;
21752- PutStr(0 /* _41 */, &*_42, &_par);
21613+ ParseReduceBlock$(0 /* _41 */, &*streams, &*txtpos, &*state, &*level, &*sp, &*tmpnr, &*store, &*totality, &*action, &*self, &*typed, &_reduced_ids, &_elem);
2175321614 }
21754- {
21755- const struct StreamOut *_43 = &(*streams).out;
21756- struct string _44; memset(&_44, 0, sizeof(struct string));
21757- init$fromliteral(&_44, "->size + 1) ? ", 14);
21758- PutStr(0 /* _42 */, &*_43, &_44);
21759- string$dest(&_44);
21760- }
21761- {
21762- const struct StreamOut *_44 = &(*streams).out;
21763- PutStr(0 /* _43 */, &*_44, &_par);
21764- }
21765- {
21766- const struct StreamOut *_45 = &(*streams).out;
21767- struct string _46; memset(&_46, 0, sizeof(struct string));
21768- init$fromliteral(&_46, "->size : (", 10);
21769- PutStr(0 /* _44 */, &*_45, &_46);
21770- string$dest(&_46);
21771- }
21772- {
21773- const struct StreamOut *_46 = &(*streams).out;
21774- PutStr(0 /* _45 */, &*_46, &_par);
21775- }
21776- {
21777- const struct StreamOut *_47 = &(*streams).out;
21778- struct string _48; memset(&_48, 0, sizeof(struct string));
21779- init$fromliteral(&_48, "->size + 1) / 2 - 1;", 20);
21780- PutStrLn(0 /* _46 */, &*_47, &_48);
21781- string$dest(&_48);
21782- }
21783- {
21784- const struct type_pure_prim *_48 = &(*tp).subtype;
21785- ParseReduceBlockStack$(0 /* _47 */, &*streams, &*txtpos, &*state, &*level, &*sp, &*tmpnr, &*store, &*totality, &*action, &*self, &*typed, &_reduced_ids, &*_48, &_tmp_elem_id, &_stack, &_stack_id);
21786- }
21787- {
21788- const struct StreamOut *_49 = &(*streams).out;
21789- Indent(0 /* _48 */, &*_49, &*level);
21790- }
21791- {
21792- const struct StreamOut *_50 = &(*streams).out;
21793- struct string _51; memset(&_51, 0, sizeof(struct string));
21794- init$fromliteral(&_51, "}", 1);
21795- PutStrLn(0 /* _49 */, &*_50, &_51);
21796- string$dest(&_51);
21797- }
21798- qtypepureid$dest(&_stack);
21799- string$dest(&_stack_id);
21800- string$dest(&_tmp_elem_id);
21615+ nonempty_string$dest(&_tmpid);
21616+ qtypepureid$dest(&_elem);
2180121617 }
21802- break;
21803- }
21804- case 1: // void container_stack_of_mut:
21805- {
21618+ else
2180621619 {
21807- struct string _tmp_elem_id; memset(&_tmp_elem_id, 0, sizeof(struct string));
2180821620 {
21809- ParseId$(&_tmp_elem_id, &*streams, &*txtpos, &*level);
21621+ const struct StreamOut *_21 = &(*streams).err;
21622+ struct string _22; memset(&_22, 0, sizeof(struct string));
21623+ init$fromliteral(&_22, "reduce not implemented for struct/union/enum - use switch instead", 65);
21624+ PutStr(0 /* _20 */, &*_21, &_22);
21625+ string$dest(&_22);
2181021626 }
2181121627 {
21812- uint8_t _20; memset(&_20, 0, sizeof(uint8_t));
21813- _20 = 58;
21814- AssertGet$(0 /* _19 */, &*streams, &*txtpos, &*level, &_20);
21815- _IGNORE_(_20);
21816- }
21817- {
21818- const struct StreamOut *_21 = &(*streams).out;
21819- Indent(0 /* _20 */, &*_21, &*level);
21820- }
21821- {
21822- const struct StreamOut *_22 = &(*streams).out;
21628+ const struct StreamOut *_22 = &(*streams).err;
2182321629 struct string _23; memset(&_23, 0, sizeof(struct string));
21824- init$fromliteral(&_23, "if(", 3);
21630+ {
21631+ const struct nonempty_string *_24 = &(*current).id;
21632+ nonempty_to_string(&_23, &*_24);
21633+ }
2182521634 PutStr(0 /* _21 */, &*_22, &_23);
2182621635 string$dest(&_23);
2182721636 }
2182821637 {
21829- const struct StreamOut *_23 = &(*streams).out;
21830- PutStr(0 /* _22 */, &*_23, &_par);
21638+ const struct StreamOut *_23 = &(*streams).err;
21639+ Fail$(0 /* _22 */, &*_23, &*txtpos);
2183121640 }
21641+ }
21642+ }
21643+ {
21644+ const struct StreamOut *_21 = &(*streams).out;
21645+ Indent(0 /* _20 */, &*_21, &*level);
21646+ }
21647+ {
21648+ const struct StreamOut *_22 = &(*streams).out;
21649+ struct string _23; memset(&_23, 0, sizeof(struct string));
21650+ init$fromliteral(&_23, "}\n", 2);
21651+ PutStr(0 /* _21 */, &*_22, &_23);
21652+ string$dest(&_23);
21653+ }
21654+ }
21655+ break;
21656+ }
21657+ case 1: // struct stack/*type_pure_wrapped*/ type_pure_wrapped:
21658+ {
21659+ const struct type_pure_wrapped *tp = ((*_14).type_pure_wrapped).data;
21660+ {
21661+ struct container_type _tpw; memset(&_tpw, 0, sizeof(struct container_type));
21662+ container_type$copy(&_tpw, &(*tp).which);
21663+ const struct container_type *_17 = &(_tpw);
21664+ switch((*_17).type)
21665+ {
21666+ case 0: // void container_stack:
21667+ {
2183221668 {
21833- const struct StreamOut *_24 = &(*streams).out;
21834- struct string _25; memset(&_25, 0, sizeof(struct string));
21835- init$fromliteral(&_25, "->fill > 0)", 11);
21836- PutStrLn(0 /* _23 */, &*_24, &_25);
21837- string$dest(&_25);
21838- }
21839- {
21840- const struct StreamOut *_25 = &(*streams).out;
21841- Indent(0 /* _24 */, &*_25, &*level);
21842- }
21843- {
21844- const struct StreamOut *_26 = &(*streams).out;
21845- struct string _27; memset(&_27, 0, sizeof(struct string));
21846- init$fromliteral(&_27, "{", 1);
21847- PutStrLn(0 /* _25 */, &*_26, &_27);
21848- string$dest(&_27);
21849- }
21850- struct string _stack_id; memset(&_stack_id, 0, sizeof(struct string));
21851- string$copy(&_stack_id, &(_reduced_id));
21852- struct qtypepureid _stack; memset(&_stack, 0, sizeof(struct qtypepureid));
21853- {
21854- struct qtypepure _26; memset(&_26, 0, sizeof(struct qtypepure));
21669+ struct string _tmp_elem_id; memset(&_tmp_elem_id, 0, sizeof(struct string));
2185521670 {
21856- struct type_pure _27; memset(&_27, 0, sizeof(struct type_pure));
21671+ ParseId$(&_tmp_elem_id, &*streams, &*txtpos, &*level);
21672+ }
21673+ {
21674+ uint8_t _20; memset(&_20, 0, sizeof(uint8_t));
21675+ _20 = 58;
21676+ AssertGet$(0 /* _19 */, &*streams, &*txtpos, &*level, &_20);
21677+ _IGNORE_(_20);
21678+ }
21679+ {
21680+ const struct StreamOut *_21 = &(*streams).out;
21681+ Indent(0 /* _20 */, &*_21, &*level);
21682+ }
21683+ {
21684+ const struct StreamOut *_22 = &(*streams).out;
21685+ struct string _23; memset(&_23, 0, sizeof(struct string));
21686+ init$fromliteral(&_23, "if(", 3);
21687+ PutStr(0 /* _21 */, &*_22, &_23);
21688+ string$dest(&_23);
21689+ }
21690+ {
21691+ const struct StreamOut *_23 = &(*streams).out;
21692+ struct string _24; memset(&_24, 0, sizeof(struct string));
2185721693 {
21858- struct container_type _28; memset(&_28, 0, sizeof(struct container_type));
21694+ nonempty_to_string(&_24, &_par);
21695+ }
21696+ PutStr(0 /* _22 */, &*_23, &_24);
21697+ string$dest(&_24);
21698+ }
21699+ {
21700+ const struct StreamOut *_24 = &(*streams).out;
21701+ struct string _25; memset(&_25, 0, sizeof(struct string));
21702+ init$fromliteral(&_25, "->fill > 0)", 11);
21703+ PutStrLn(0 /* _23 */, &*_24, &_25);
21704+ string$dest(&_25);
21705+ }
21706+ {
21707+ const struct StreamOut *_25 = &(*streams).out;
21708+ Indent(0 /* _24 */, &*_25, &*level);
21709+ }
21710+ {
21711+ const struct StreamOut *_26 = &(*streams).out;
21712+ struct string _27; memset(&_27, 0, sizeof(struct string));
21713+ init$fromliteral(&_27, "{", 1);
21714+ PutStrLn(0 /* _25 */, &*_26, &_27);
21715+ string$dest(&_27);
21716+ }
21717+ struct nonempty_string _stack_id; memset(&_stack_id, 0, sizeof(struct nonempty_string));
21718+ nonempty_string$copy(&_stack_id, &(*reduced_id));
21719+ struct qtypepureid _stack; memset(&_stack, 0, sizeof(struct qtypepureid));
21720+ {
21721+ struct qtypepure _26; memset(&_26, 0, sizeof(struct qtypepure));
21722+ {
21723+ struct type_pure _27; memset(&_27, 0, sizeof(struct type_pure));
2185921724 {
21860- container_stack_of_mut(&_28);
21725+ struct container_type _28; memset(&_28, 0, sizeof(struct container_type));
21726+ {
21727+ container_stack(&_28);
21728+ }
21729+ const struct type_pure_prim *_29 = &(*tp).subtype;
21730+ type_pure_wrapped(&_27, &_28, &*_29);
21731+ container_type$dest(&_28);
2186121732 }
21862- const struct type_pure_prim *_29 = &(*tp).subtype;
21863- type_pure_wrapped(&_27, &_28, &*_29);
21864- container_type$dest(&_28);
21733+ constqtp(&_26, &_27);
21734+ type_pure$dest(&_27);
2186521735 }
21866- constqtp(&_26, &_27);
21867- type_pure$dest(&_27);
21736+ struct nonempty_string _27; memset(&_27, 0, sizeof(struct nonempty_string));
21737+ {
21738+ uint8_t _28; memset(&_28, 0, sizeof(uint8_t));
21739+ _28 = 95;
21740+ struct string _29; memset(&_29, 0, sizeof(struct string));
21741+ {
21742+ nonempty_to_string(&_29, &_stack_id);
21743+ }
21744+ nonempty_string(&_27, &_28, &_29);
21745+ string$dest(&_29);
21746+ _IGNORE_(_28);
21747+ }
21748+ qtypepureid(&_stack, &_26, &_27);
21749+ nonempty_string$dest(&_27);
21750+ qtypepure$dest(&_26);
2186821751 }
21869- struct nonempty_string _27; memset(&_27, 0, sizeof(struct nonempty_string));
2187021752 {
21871- uint8_t _28; memset(&_28, 0, sizeof(uint8_t));
21872- _28 = 95;
21873- nonempty_string(&_27, &_28, &_stack_id);
21753+ const struct StreamOut *_27 = &(*streams).out;
21754+ uint64_t _28; memset(&_28, 0, sizeof(uint64_t));
21755+ {
21756+ uint64_t _29; memset(&_29, 0, sizeof(uint64_t));
21757+ _29 = 1;
21758+ _28 = _29 + *level;
21759+ _IGNORE_(_29);
21760+ }
21761+ struct stack/*structdef*/ *_29 = &(*state).structs;
21762+ EmitLet$(0 /* _26 */, &*_27, &_28, &*_29, &_stack);
2187421763 _IGNORE_(_28);
2187521764 }
21876- qtypepureid(&_stack, &_26, &_27);
21877- nonempty_string$dest(&_27);
21878- qtypepure$dest(&_26);
21879- }
21880- {
21881- const struct StreamOut *_27 = &(*streams).out;
21882- uint64_t _28; memset(&_28, 0, sizeof(uint64_t));
2188321765 {
21766+ const struct StreamOut *_28 = &(*streams).out;
2188421767 uint64_t _29; memset(&_29, 0, sizeof(uint64_t));
21885- _29 = 1;
21886- _28 = _29 + *level;
21768+ {
21769+ uint64_t _30; memset(&_30, 0, sizeof(uint64_t));
21770+ _30 = 1;
21771+ _29 = _30 + *level;
21772+ _IGNORE_(_30);
21773+ }
21774+ Indent(0 /* _27 */, &*_28, &_29);
2188721775 _IGNORE_(_29);
2188821776 }
21889- struct stack/*structdef*/ *_29 = &(*state).structs;
21890- EmitLet$(0 /* _26 */, &*_27, &_28, &*_29, &_stack);
21891- _IGNORE_(_28);
21777+ {
21778+ const struct StreamOut *_29 = &(*streams).out;
21779+ struct string _30; memset(&_30, 0, sizeof(struct string));
21780+ {
21781+ const struct nonempty_string *_31 = &(_stack).id;
21782+ nonempty_to_string(&_30, &*_31);
21783+ }
21784+ PutStr(0 /* _28 */, &*_29, &_30);
21785+ string$dest(&_30);
21786+ }
21787+ {
21788+ const struct StreamOut *_30 = &(*streams).out;
21789+ struct string _31; memset(&_31, 0, sizeof(struct string));
21790+ init$fromliteral(&_31, ".fill = ", 8);
21791+ PutStr(0 /* _29 */, &*_30, &_31);
21792+ string$dest(&_31);
21793+ }
21794+ {
21795+ const struct StreamOut *_31 = &(*streams).out;
21796+ struct string _32; memset(&_32, 0, sizeof(struct string));
21797+ {
21798+ nonempty_to_string(&_32, &_par);
21799+ }
21800+ PutStr(0 /* _30 */, &*_31, &_32);
21801+ string$dest(&_32);
21802+ }
21803+ {
21804+ const struct StreamOut *_32 = &(*streams).out;
21805+ struct string _33; memset(&_33, 0, sizeof(struct string));
21806+ init$fromliteral(&_33, "->fill - 1; ", 12);
21807+ PutStrLn(0 /* _31 */, &*_32, &_33);
21808+ string$dest(&_33);
21809+ }
21810+ {
21811+ const struct StreamOut *_33 = &(*streams).out;
21812+ uint64_t _34; memset(&_34, 0, sizeof(uint64_t));
21813+ {
21814+ uint64_t _35; memset(&_35, 0, sizeof(uint64_t));
21815+ _35 = 1;
21816+ _34 = _35 + *level;
21817+ _IGNORE_(_35);
21818+ }
21819+ Indent(0 /* _32 */, &*_33, &_34);
21820+ _IGNORE_(_34);
21821+ }
21822+ {
21823+ const struct StreamOut *_34 = &(*streams).out;
21824+ struct string _35; memset(&_35, 0, sizeof(struct string));
21825+ {
21826+ const struct nonempty_string *_36 = &(_stack).id;
21827+ nonempty_to_string(&_35, &*_36);
21828+ }
21829+ PutStr(0 /* _33 */, &*_34, &_35);
21830+ string$dest(&_35);
21831+ }
21832+ {
21833+ const struct StreamOut *_35 = &(*streams).out;
21834+ struct string _36; memset(&_36, 0, sizeof(struct string));
21835+ init$fromliteral(&_36, ".data = ", 8);
21836+ PutStr(0 /* _34 */, &*_35, &_36);
21837+ string$dest(&_36);
21838+ }
21839+ {
21840+ const struct StreamOut *_36 = &(*streams).out;
21841+ struct string _37; memset(&_37, 0, sizeof(struct string));
21842+ {
21843+ nonempty_to_string(&_37, &_par);
21844+ }
21845+ PutStr(0 /* _35 */, &*_36, &_37);
21846+ string$dest(&_37);
21847+ }
21848+ {
21849+ const struct StreamOut *_37 = &(*streams).out;
21850+ struct string _38; memset(&_38, 0, sizeof(struct string));
21851+ init$fromliteral(&_38, "->data; // REFERENCE - memory must NOT be de-allocated when leaving scope!!!", 76);
21852+ PutStrLn(0 /* _36 */, &*_37, &_38);
21853+ string$dest(&_38);
21854+ }
21855+ {
21856+ const struct StreamOut *_38 = &(*streams).out;
21857+ uint64_t _39; memset(&_39, 0, sizeof(uint64_t));
21858+ {
21859+ uint64_t _40; memset(&_40, 0, sizeof(uint64_t));
21860+ _40 = 1;
21861+ _39 = _40 + *level;
21862+ _IGNORE_(_40);
21863+ }
21864+ Indent(0 /* _37 */, &*_38, &_39);
21865+ _IGNORE_(_39);
21866+ }
21867+ {
21868+ const struct StreamOut *_39 = &(*streams).out;
21869+ struct string _40; memset(&_40, 0, sizeof(struct string));
21870+ {
21871+ const struct nonempty_string *_41 = &(_stack).id;
21872+ nonempty_to_string(&_40, &*_41);
21873+ }
21874+ PutStr(0 /* _38 */, &*_39, &_40);
21875+ string$dest(&_40);
21876+ }
21877+ {
21878+ const struct StreamOut *_40 = &(*streams).out;
21879+ struct string _41; memset(&_41, 0, sizeof(struct string));
21880+ init$fromliteral(&_41, ".size = (4 * (", 14);
21881+ PutStr(0 /* _39 */, &*_40, &_41);
21882+ string$dest(&_41);
21883+ }
21884+ {
21885+ const struct StreamOut *_41 = &(*streams).out;
21886+ struct string _42; memset(&_42, 0, sizeof(struct string));
21887+ {
21888+ nonempty_to_string(&_42, &_par);
21889+ }
21890+ PutStr(0 /* _40 */, &*_41, &_42);
21891+ string$dest(&_42);
21892+ }
21893+ {
21894+ const struct StreamOut *_42 = &(*streams).out;
21895+ struct string _43; memset(&_43, 0, sizeof(struct string));
21896+ init$fromliteral(&_43, "->fill + 1) > ", 14);
21897+ PutStr(0 /* _41 */, &*_42, &_43);
21898+ string$dest(&_43);
21899+ }
21900+ {
21901+ const struct StreamOut *_43 = &(*streams).out;
21902+ struct string _44; memset(&_44, 0, sizeof(struct string));
21903+ {
21904+ nonempty_to_string(&_44, &_par);
21905+ }
21906+ PutStr(0 /* _42 */, &*_43, &_44);
21907+ string$dest(&_44);
21908+ }
21909+ {
21910+ const struct StreamOut *_44 = &(*streams).out;
21911+ struct string _45; memset(&_45, 0, sizeof(struct string));
21912+ init$fromliteral(&_45, "->size + 1) ? ", 14);
21913+ PutStr(0 /* _43 */, &*_44, &_45);
21914+ string$dest(&_45);
21915+ }
21916+ {
21917+ const struct StreamOut *_45 = &(*streams).out;
21918+ struct string _46; memset(&_46, 0, sizeof(struct string));
21919+ {
21920+ nonempty_to_string(&_46, &_par);
21921+ }
21922+ PutStr(0 /* _44 */, &*_45, &_46);
21923+ string$dest(&_46);
21924+ }
21925+ {
21926+ const struct StreamOut *_46 = &(*streams).out;
21927+ struct string _47; memset(&_47, 0, sizeof(struct string));
21928+ init$fromliteral(&_47, "->size : (", 10);
21929+ PutStr(0 /* _45 */, &*_46, &_47);
21930+ string$dest(&_47);
21931+ }
21932+ {
21933+ const struct StreamOut *_47 = &(*streams).out;
21934+ struct string _48; memset(&_48, 0, sizeof(struct string));
21935+ {
21936+ nonempty_to_string(&_48, &_par);
21937+ }
21938+ PutStr(0 /* _46 */, &*_47, &_48);
21939+ string$dest(&_48);
21940+ }
21941+ {
21942+ const struct StreamOut *_48 = &(*streams).out;
21943+ struct string _49; memset(&_49, 0, sizeof(struct string));
21944+ init$fromliteral(&_49, "->size + 1) / 2 - 1;", 20);
21945+ PutStrLn(0 /* _47 */, &*_48, &_49);
21946+ string$dest(&_49);
21947+ }
21948+ {
21949+ const struct type_pure_prim *_49 = &(*tp).subtype;
21950+ ParseReduceBlockStack$(0 /* _48 */, &*streams, &*txtpos, &*state, &*level, &*sp, &*tmpnr, &*store, &*totality, &*action, &*self, &*typed, &_reduced_ids, &*_49, &_tmp_elem_id, &_stack, &_stack_id);
21951+ }
21952+ {
21953+ const struct StreamOut *_50 = &(*streams).out;
21954+ Indent(0 /* _49 */, &*_50, &*level);
21955+ }
21956+ {
21957+ const struct StreamOut *_51 = &(*streams).out;
21958+ struct string _52; memset(&_52, 0, sizeof(struct string));
21959+ init$fromliteral(&_52, "}", 1);
21960+ PutStrLn(0 /* _50 */, &*_51, &_52);
21961+ string$dest(&_52);
21962+ }
21963+ qtypepureid$dest(&_stack);
21964+ nonempty_string$dest(&_stack_id);
21965+ string$dest(&_tmp_elem_id);
2189221966 }
21967+ break;
21968+ }
21969+ case 1: // void container_stack_of_mut:
21970+ {
2189321971 {
21894- const struct StreamOut *_28 = &(*streams).out;
21895- uint64_t _29; memset(&_29, 0, sizeof(uint64_t));
21972+ struct string _tmp_elem_id; memset(&_tmp_elem_id, 0, sizeof(struct string));
2189621973 {
21974+ ParseId$(&_tmp_elem_id, &*streams, &*txtpos, &*level);
21975+ }
21976+ {
21977+ uint8_t _21; memset(&_21, 0, sizeof(uint8_t));
21978+ _21 = 58;
21979+ AssertGet$(0 /* _20 */, &*streams, &*txtpos, &*level, &_21);
21980+ _IGNORE_(_21);
21981+ }
21982+ {
21983+ const struct StreamOut *_22 = &(*streams).out;
21984+ Indent(0 /* _21 */, &*_22, &*level);
21985+ }
21986+ {
21987+ const struct StreamOut *_23 = &(*streams).out;
21988+ struct string _24; memset(&_24, 0, sizeof(struct string));
21989+ init$fromliteral(&_24, "if(", 3);
21990+ PutStr(0 /* _22 */, &*_23, &_24);
21991+ string$dest(&_24);
21992+ }
21993+ {
21994+ const struct StreamOut *_24 = &(*streams).out;
21995+ struct string _25; memset(&_25, 0, sizeof(struct string));
21996+ {
21997+ nonempty_to_string(&_25, &_par);
21998+ }
21999+ PutStr(0 /* _23 */, &*_24, &_25);
22000+ string$dest(&_25);
22001+ }
22002+ {
22003+ const struct StreamOut *_25 = &(*streams).out;
22004+ struct string _26; memset(&_26, 0, sizeof(struct string));
22005+ init$fromliteral(&_26, "->fill > 0)", 11);
22006+ PutStrLn(0 /* _24 */, &*_25, &_26);
22007+ string$dest(&_26);
22008+ }
22009+ {
22010+ const struct StreamOut *_26 = &(*streams).out;
22011+ Indent(0 /* _25 */, &*_26, &*level);
22012+ }
22013+ {
22014+ const struct StreamOut *_27 = &(*streams).out;
22015+ struct string _28; memset(&_28, 0, sizeof(struct string));
22016+ init$fromliteral(&_28, "{", 1);
22017+ PutStrLn(0 /* _26 */, &*_27, &_28);
22018+ string$dest(&_28);
22019+ }
22020+ struct nonempty_string _stack_id; memset(&_stack_id, 0, sizeof(struct nonempty_string));
22021+ nonempty_string$copy(&_stack_id, &(*reduced_id));
22022+ struct qtypepureid _stack; memset(&_stack, 0, sizeof(struct qtypepureid));
22023+ {
22024+ struct qtypepure _27; memset(&_27, 0, sizeof(struct qtypepure));
22025+ {
22026+ struct type_pure _28; memset(&_28, 0, sizeof(struct type_pure));
22027+ {
22028+ struct container_type _29; memset(&_29, 0, sizeof(struct container_type));
22029+ {
22030+ container_stack_of_mut(&_29);
22031+ }
22032+ const struct type_pure_prim *_30 = &(*tp).subtype;
22033+ type_pure_wrapped(&_28, &_29, &*_30);
22034+ container_type$dest(&_29);
22035+ }
22036+ constqtp(&_27, &_28);
22037+ type_pure$dest(&_28);
22038+ }
22039+ struct nonempty_string _28; memset(&_28, 0, sizeof(struct nonempty_string));
22040+ {
22041+ uint8_t _29; memset(&_29, 0, sizeof(uint8_t));
22042+ _29 = 95;
22043+ struct string _30; memset(&_30, 0, sizeof(struct string));
22044+ {
22045+ nonempty_to_string(&_30, &_stack_id);
22046+ }
22047+ nonempty_string(&_28, &_29, &_30);
22048+ string$dest(&_30);
22049+ _IGNORE_(_29);
22050+ }
22051+ qtypepureid(&_stack, &_27, &_28);
22052+ nonempty_string$dest(&_28);
22053+ qtypepure$dest(&_27);
22054+ }
22055+ {
22056+ const struct StreamOut *_28 = &(*streams).out;
22057+ uint64_t _29; memset(&_29, 0, sizeof(uint64_t));
22058+ {
22059+ uint64_t _30; memset(&_30, 0, sizeof(uint64_t));
22060+ _30 = 1;
22061+ _29 = _30 + *level;
22062+ _IGNORE_(_30);
22063+ }
22064+ struct stack/*structdef*/ *_30 = &(*state).structs;
22065+ EmitLet$(0 /* _27 */, &*_28, &_29, &*_30, &_stack);
22066+ _IGNORE_(_29);
22067+ }
22068+ {
22069+ const struct StreamOut *_29 = &(*streams).out;
2189722070 uint64_t _30; memset(&_30, 0, sizeof(uint64_t));
21898- _30 = 1;
21899- _29 = _30 + *level;
22071+ {
22072+ uint64_t _31; memset(&_31, 0, sizeof(uint64_t));
22073+ _31 = 1;
22074+ _30 = _31 + *level;
22075+ _IGNORE_(_31);
22076+ }
22077+ Indent(0 /* _28 */, &*_29, &_30);
2190022078 _IGNORE_(_30);
2190122079 }
21902- Indent(0 /* _27 */, &*_28, &_29);
21903- _IGNORE_(_29);
21904- }
21905- {
21906- const struct StreamOut *_29 = &(*streams).out;
21907- struct string _30; memset(&_30, 0, sizeof(struct string));
2190822080 {
21909- const struct nonempty_string *_31 = &(_stack).id;
21910- nonempty_to_string(&_30, &*_31);
22081+ const struct StreamOut *_30 = &(*streams).out;
22082+ struct string _31; memset(&_31, 0, sizeof(struct string));
22083+ {
22084+ const struct nonempty_string *_32 = &(_stack).id;
22085+ nonempty_to_string(&_31, &*_32);
22086+ }
22087+ PutStr(0 /* _29 */, &*_30, &_31);
22088+ string$dest(&_31);
2191122089 }
21912- PutStr(0 /* _28 */, &*_29, &_30);
21913- string$dest(&_30);
21914- }
21915- {
21916- const struct StreamOut *_30 = &(*streams).out;
21917- struct string _31; memset(&_31, 0, sizeof(struct string));
21918- init$fromliteral(&_31, ".fill = ", 8);
21919- PutStr(0 /* _29 */, &*_30, &_31);
21920- string$dest(&_31);
21921- }
21922- {
21923- const struct StreamOut *_31 = &(*streams).out;
21924- PutStr(0 /* _30 */, &*_31, &_par);
21925- }
21926- {
21927- const struct StreamOut *_32 = &(*streams).out;
21928- struct string _33; memset(&_33, 0, sizeof(struct string));
21929- init$fromliteral(&_33, "->fill - 1; ", 12);
21930- PutStrLn(0 /* _31 */, &*_32, &_33);
21931- string$dest(&_33);
21932- }
21933- {
21934- const struct StreamOut *_33 = &(*streams).out;
21935- uint64_t _34; memset(&_34, 0, sizeof(uint64_t));
2193622090 {
22091+ const struct StreamOut *_31 = &(*streams).out;
22092+ struct string _32; memset(&_32, 0, sizeof(struct string));
22093+ init$fromliteral(&_32, ".fill = ", 8);
22094+ PutStr(0 /* _30 */, &*_31, &_32);
22095+ string$dest(&_32);
22096+ }
22097+ {
22098+ const struct StreamOut *_32 = &(*streams).out;
22099+ struct string _33; memset(&_33, 0, sizeof(struct string));
22100+ {
22101+ nonempty_to_string(&_33, &_par);
22102+ }
22103+ PutStr(0 /* _31 */, &*_32, &_33);
22104+ string$dest(&_33);
22105+ }
22106+ {
22107+ const struct StreamOut *_33 = &(*streams).out;
22108+ struct string _34; memset(&_34, 0, sizeof(struct string));
22109+ init$fromliteral(&_34, "->fill - 1; ", 12);
22110+ PutStrLn(0 /* _32 */, &*_33, &_34);
22111+ string$dest(&_34);
22112+ }
22113+ {
22114+ const struct StreamOut *_34 = &(*streams).out;
2193722115 uint64_t _35; memset(&_35, 0, sizeof(uint64_t));
21938- _35 = 1;
21939- _34 = _35 + *level;
22116+ {
22117+ uint64_t _36; memset(&_36, 0, sizeof(uint64_t));
22118+ _36 = 1;
22119+ _35 = _36 + *level;
22120+ _IGNORE_(_36);
22121+ }
22122+ Indent(0 /* _33 */, &*_34, &_35);
2194022123 _IGNORE_(_35);
2194122124 }
21942- Indent(0 /* _32 */, &*_33, &_34);
21943- _IGNORE_(_34);
21944- }
21945- {
21946- const struct StreamOut *_34 = &(*streams).out;
21947- struct string _35; memset(&_35, 0, sizeof(struct string));
2194822125 {
21949- const struct nonempty_string *_36 = &(_stack).id;
21950- nonempty_to_string(&_35, &*_36);
22126+ const struct StreamOut *_35 = &(*streams).out;
22127+ struct string _36; memset(&_36, 0, sizeof(struct string));
22128+ {
22129+ const struct nonempty_string *_37 = &(_stack).id;
22130+ nonempty_to_string(&_36, &*_37);
22131+ }
22132+ PutStr(0 /* _34 */, &*_35, &_36);
22133+ string$dest(&_36);
2195122134 }
21952- PutStr(0 /* _33 */, &*_34, &_35);
21953- string$dest(&_35);
21954- }
21955- {
21956- const struct StreamOut *_35 = &(*streams).out;
21957- struct string _36; memset(&_36, 0, sizeof(struct string));
21958- init$fromliteral(&_36, ".data = ", 8);
21959- PutStr(0 /* _34 */, &*_35, &_36);
21960- string$dest(&_36);
21961- }
21962- {
21963- const struct StreamOut *_36 = &(*streams).out;
21964- PutStr(0 /* _35 */, &*_36, &_par);
21965- }
21966- {
21967- const struct StreamOut *_37 = &(*streams).out;
21968- struct string _38; memset(&_38, 0, sizeof(struct string));
21969- init$fromliteral(&_38, "->data; // REFERENCE - memory must NOT be de-allocated when leaving scope!!!", 76);
21970- PutStrLn(0 /* _36 */, &*_37, &_38);
21971- string$dest(&_38);
21972- }
21973- {
21974- const struct StreamOut *_38 = &(*streams).out;
21975- uint64_t _39; memset(&_39, 0, sizeof(uint64_t));
2197622135 {
22136+ const struct StreamOut *_36 = &(*streams).out;
22137+ struct string _37; memset(&_37, 0, sizeof(struct string));
22138+ init$fromliteral(&_37, ".data = ", 8);
22139+ PutStr(0 /* _35 */, &*_36, &_37);
22140+ string$dest(&_37);
22141+ }
22142+ {
22143+ const struct StreamOut *_37 = &(*streams).out;
22144+ struct string _38; memset(&_38, 0, sizeof(struct string));
22145+ {
22146+ nonempty_to_string(&_38, &_par);
22147+ }
22148+ PutStr(0 /* _36 */, &*_37, &_38);
22149+ string$dest(&_38);
22150+ }
22151+ {
22152+ const struct StreamOut *_38 = &(*streams).out;
22153+ struct string _39; memset(&_39, 0, sizeof(struct string));
22154+ init$fromliteral(&_39, "->data; // REFERENCE - memory must NOT be de-allocated when leaving scope!!!", 76);
22155+ PutStrLn(0 /* _37 */, &*_38, &_39);
22156+ string$dest(&_39);
22157+ }
22158+ {
22159+ const struct StreamOut *_39 = &(*streams).out;
2197722160 uint64_t _40; memset(&_40, 0, sizeof(uint64_t));
21978- _40 = 1;
21979- _39 = _40 + *level;
22161+ {
22162+ uint64_t _41; memset(&_41, 0, sizeof(uint64_t));
22163+ _41 = 1;
22164+ _40 = _41 + *level;
22165+ _IGNORE_(_41);
22166+ }
22167+ Indent(0 /* _38 */, &*_39, &_40);
2198022168 _IGNORE_(_40);
2198122169 }
21982- Indent(0 /* _37 */, &*_38, &_39);
21983- _IGNORE_(_39);
21984- }
21985- {
21986- const struct StreamOut *_39 = &(*streams).out;
21987- struct string _40; memset(&_40, 0, sizeof(struct string));
2198822170 {
21989- const struct nonempty_string *_41 = &(_stack).id;
21990- nonempty_to_string(&_40, &*_41);
22171+ const struct StreamOut *_40 = &(*streams).out;
22172+ struct string _41; memset(&_41, 0, sizeof(struct string));
22173+ {
22174+ const struct nonempty_string *_42 = &(_stack).id;
22175+ nonempty_to_string(&_41, &*_42);
22176+ }
22177+ PutStr(0 /* _39 */, &*_40, &_41);
22178+ string$dest(&_41);
2199122179 }
21992- PutStr(0 /* _38 */, &*_39, &_40);
21993- string$dest(&_40);
22180+ {
22181+ const struct StreamOut *_41 = &(*streams).out;
22182+ struct string _42; memset(&_42, 0, sizeof(struct string));
22183+ init$fromliteral(&_42, ".size = (4 * (", 14);
22184+ PutStr(0 /* _40 */, &*_41, &_42);
22185+ string$dest(&_42);
22186+ }
22187+ {
22188+ const struct StreamOut *_42 = &(*streams).out;
22189+ struct string _43; memset(&_43, 0, sizeof(struct string));
22190+ {
22191+ nonempty_to_string(&_43, &_par);
22192+ }
22193+ PutStr(0 /* _41 */, &*_42, &_43);
22194+ string$dest(&_43);
22195+ }
22196+ {
22197+ const struct StreamOut *_43 = &(*streams).out;
22198+ struct string _44; memset(&_44, 0, sizeof(struct string));
22199+ init$fromliteral(&_44, "->fill + 1) > ", 14);
22200+ PutStr(0 /* _42 */, &*_43, &_44);
22201+ string$dest(&_44);
22202+ }
22203+ {
22204+ const struct StreamOut *_44 = &(*streams).out;
22205+ struct string _45; memset(&_45, 0, sizeof(struct string));
22206+ {
22207+ nonempty_to_string(&_45, &_par);
22208+ }
22209+ PutStr(0 /* _43 */, &*_44, &_45);
22210+ string$dest(&_45);
22211+ }
22212+ {
22213+ const struct StreamOut *_45 = &(*streams).out;
22214+ struct string _46; memset(&_46, 0, sizeof(struct string));
22215+ init$fromliteral(&_46, "->size + 1) ? ", 14);
22216+ PutStr(0 /* _44 */, &*_45, &_46);
22217+ string$dest(&_46);
22218+ }
22219+ {
22220+ const struct StreamOut *_46 = &(*streams).out;
22221+ struct string _47; memset(&_47, 0, sizeof(struct string));
22222+ {
22223+ nonempty_to_string(&_47, &_par);
22224+ }
22225+ PutStr(0 /* _45 */, &*_46, &_47);
22226+ string$dest(&_47);
22227+ }
22228+ {
22229+ const struct StreamOut *_47 = &(*streams).out;
22230+ struct string _48; memset(&_48, 0, sizeof(struct string));
22231+ init$fromliteral(&_48, "->size : (", 10);
22232+ PutStr(0 /* _46 */, &*_47, &_48);
22233+ string$dest(&_48);
22234+ }
22235+ {
22236+ const struct StreamOut *_48 = &(*streams).out;
22237+ struct string _49; memset(&_49, 0, sizeof(struct string));
22238+ {
22239+ nonempty_to_string(&_49, &_par);
22240+ }
22241+ PutStr(0 /* _47 */, &*_48, &_49);
22242+ string$dest(&_49);
22243+ }
22244+ {
22245+ const struct StreamOut *_49 = &(*streams).out;
22246+ struct string _50; memset(&_50, 0, sizeof(struct string));
22247+ init$fromliteral(&_50, "->size + 1) / 2 - 1;", 20);
22248+ PutStrLn(0 /* _48 */, &*_49, &_50);
22249+ string$dest(&_50);
22250+ }
22251+ {
22252+ const struct type_pure_prim *_50 = &(*tp).subtype;
22253+ ParseReduceBlockStackMut$(0 /* _49 */, &*streams, &*txtpos, &*state, &*level, &*sp, &*tmpnr, &*store, &*totality, &*action, &*self, &*typed, &_reduced_ids, &*_50, &_tmp_elem_id, &_stack, &_stack_id);
22254+ }
22255+ {
22256+ const struct StreamOut *_51 = &(*streams).out;
22257+ Indent(0 /* _50 */, &*_51, &*level);
22258+ }
22259+ {
22260+ const struct StreamOut *_52 = &(*streams).out;
22261+ struct string _53; memset(&_53, 0, sizeof(struct string));
22262+ init$fromliteral(&_53, "}", 1);
22263+ PutStrLn(0 /* _51 */, &*_52, &_53);
22264+ string$dest(&_53);
22265+ }
22266+ qtypepureid$dest(&_stack);
22267+ nonempty_string$dest(&_stack_id);
22268+ string$dest(&_tmp_elem_id);
2199422269 }
21995- {
21996- const struct StreamOut *_40 = &(*streams).out;
21997- struct string _41; memset(&_41, 0, sizeof(struct string));
21998- init$fromliteral(&_41, ".size = (4 * (", 14);
21999- PutStr(0 /* _39 */, &*_40, &_41);
22000- string$dest(&_41);
22001- }
22002- {
22003- const struct StreamOut *_41 = &(*streams).out;
22004- PutStr(0 /* _40 */, &*_41, &_par);
22005- }
22006- {
22007- const struct StreamOut *_42 = &(*streams).out;
22008- struct string _43; memset(&_43, 0, sizeof(struct string));
22009- init$fromliteral(&_43, "->fill + 1) > ", 14);
22010- PutStr(0 /* _41 */, &*_42, &_43);
22011- string$dest(&_43);
22012- }
22013- {
22014- const struct StreamOut *_43 = &(*streams).out;
22015- PutStr(0 /* _42 */, &*_43, &_par);
22016- }
22017- {
22018- const struct StreamOut *_44 = &(*streams).out;
22019- struct string _45; memset(&_45, 0, sizeof(struct string));
22020- init$fromliteral(&_45, "->size + 1) ? ", 14);
22021- PutStr(0 /* _43 */, &*_44, &_45);
22022- string$dest(&_45);
22023- }
22024- {
22025- const struct StreamOut *_45 = &(*streams).out;
22026- PutStr(0 /* _44 */, &*_45, &_par);
22027- }
22028- {
22029- const struct StreamOut *_46 = &(*streams).out;
22030- struct string _47; memset(&_47, 0, sizeof(struct string));
22031- init$fromliteral(&_47, "->size : (", 10);
22032- PutStr(0 /* _45 */, &*_46, &_47);
22033- string$dest(&_47);
22034- }
22035- {
22036- const struct StreamOut *_47 = &(*streams).out;
22037- PutStr(0 /* _46 */, &*_47, &_par);
22038- }
22039- {
22040- const struct StreamOut *_48 = &(*streams).out;
22041- struct string _49; memset(&_49, 0, sizeof(struct string));
22042- init$fromliteral(&_49, "->size + 1) / 2 - 1;", 20);
22043- PutStrLn(0 /* _47 */, &*_48, &_49);
22044- string$dest(&_49);
22045- }
22046- {
22047- const struct type_pure_prim *_49 = &(*tp).subtype;
22048- ParseReduceBlockStackMut$(0 /* _48 */, &*streams, &*txtpos, &*state, &*level, &*sp, &*tmpnr, &*store, &*totality, &*action, &*self, &*typed, &_reduced_ids, &*_49, &_tmp_elem_id, &_stack, &_stack_id);
22049- }
22050- {
22051- const struct StreamOut *_50 = &(*streams).out;
22052- Indent(0 /* _49 */, &*_50, &*level);
22053- }
22054- {
22055- const struct StreamOut *_51 = &(*streams).out;
22056- struct string _52; memset(&_52, 0, sizeof(struct string));
22057- init$fromliteral(&_52, "}", 1);
22058- PutStrLn(0 /* _50 */, &*_51, &_52);
22059- string$dest(&_52);
22060- }
22061- qtypepureid$dest(&_stack);
22062- string$dest(&_stack_id);
22063- string$dest(&_tmp_elem_id);
22270+ break;
2206422271 }
22065- break;
22066- }
22067- case 2: // void container_opt:
22068- {
22272+ case 2: // void container_opt:
2206922273 {
2207022274 {
22071- const struct StreamOut *_21 = &(*streams).err;
22072- struct string _22; memset(&_22, 0, sizeof(struct string));
22073- init$fromliteral(&_22, "can't reduce ", 13);
22074- PutStr(0 /* _20 */, &*_21, &_22);
22075- string$dest(&_22);
22275+ {
22276+ const struct StreamOut *_22 = &(*streams).err;
22277+ struct string _23; memset(&_23, 0, sizeof(struct string));
22278+ init$fromliteral(&_23, "can't reduce ", 13);
22279+ PutStr(0 /* _21 */, &*_22, &_23);
22280+ string$dest(&_23);
22281+ }
22282+ {
22283+ const struct StreamOut *_23 = &(*streams).err;
22284+ struct string _24; memset(&_24, 0, sizeof(struct string));
22285+ {
22286+ nonempty_to_string(&_24, &_par);
22287+ }
22288+ PutStr(0 /* _22 */, &*_23, &_24);
22289+ string$dest(&_24);
22290+ }
22291+ {
22292+ const struct StreamOut *_24 = &(*streams).err;
22293+ struct string _25; memset(&_25, 0, sizeof(struct string));
22294+ init$fromliteral(&_25, " of type ", 9);
22295+ PutStr(0 /* _23 */, &*_24, &_25);
22296+ string$dest(&_25);
22297+ }
22298+ {
22299+ const struct StreamOut *_25 = &(*streams).err;
22300+ const struct type_pure *_26 = &(*current).qt.type;
22301+ EPrTypePure(0 /* _24 */, &*_25, &*_26);
22302+ }
22303+ {
22304+ const struct StreamOut *_26 = &(*streams).err;
22305+ Fail$(0 /* _25 */, &*_26, &*txtpos);
22306+ }
2207622307 }
22077- {
22078- const struct StreamOut *_22 = &(*streams).err;
22079- PutStr(0 /* _21 */, &*_22, &_par);
22080- }
22081- {
22082- const struct StreamOut *_23 = &(*streams).err;
22083- struct string _24; memset(&_24, 0, sizeof(struct string));
22084- init$fromliteral(&_24, " of type ", 9);
22085- PutStr(0 /* _22 */, &*_23, &_24);
22086- string$dest(&_24);
22087- }
22088- {
22089- const struct StreamOut *_24 = &(*streams).err;
22090- const struct type_pure *_25 = &(*current).qt.type;
22091- EPrTypePure(0 /* _23 */, &*_24, &*_25);
22092- }
22093- {
22094- const struct StreamOut *_25 = &(*streams).err;
22095- Fail$(0 /* _24 */, &*_25, &*txtpos);
22096- }
22308+ break;
2209722309 }
22098- break;
22099- }
22100- case 3: // void container_box:
22101- {
22310+ case 3: // void container_box:
2210222311 {
2210322312 {
22104- const struct StreamOut *_22 = &(*streams).err;
22105- struct string _23; memset(&_23, 0, sizeof(struct string));
22106- init$fromliteral(&_23, "can't reduce ", 13);
22107- PutStr(0 /* _21 */, &*_22, &_23);
22108- string$dest(&_23);
22313+ {
22314+ const struct StreamOut *_23 = &(*streams).err;
22315+ struct string _24; memset(&_24, 0, sizeof(struct string));
22316+ init$fromliteral(&_24, "can't reduce ", 13);
22317+ PutStr(0 /* _22 */, &*_23, &_24);
22318+ string$dest(&_24);
22319+ }
22320+ {
22321+ const struct StreamOut *_24 = &(*streams).err;
22322+ struct string _25; memset(&_25, 0, sizeof(struct string));
22323+ {
22324+ nonempty_to_string(&_25, &_par);
22325+ }
22326+ PutStr(0 /* _23 */, &*_24, &_25);
22327+ string$dest(&_25);
22328+ }
22329+ {
22330+ const struct StreamOut *_25 = &(*streams).err;
22331+ struct string _26; memset(&_26, 0, sizeof(struct string));
22332+ init$fromliteral(&_26, " of type ", 9);
22333+ PutStr(0 /* _24 */, &*_25, &_26);
22334+ string$dest(&_26);
22335+ }
22336+ {
22337+ const struct StreamOut *_26 = &(*streams).err;
22338+ const struct type_pure *_27 = &(*current).qt.type;
22339+ EPrTypePure(0 /* _25 */, &*_26, &*_27);
22340+ }
22341+ {
22342+ const struct StreamOut *_27 = &(*streams).err;
22343+ Fail$(0 /* _26 */, &*_27, &*txtpos);
22344+ }
2210922345 }
22110- {
22111- const struct StreamOut *_23 = &(*streams).err;
22112- PutStr(0 /* _22 */, &*_23, &_par);
22113- }
22114- {
22115- const struct StreamOut *_24 = &(*streams).err;
22116- struct string _25; memset(&_25, 0, sizeof(struct string));
22117- init$fromliteral(&_25, " of type ", 9);
22118- PutStr(0 /* _23 */, &*_24, &_25);
22119- string$dest(&_25);
22120- }
22121- {
22122- const struct StreamOut *_25 = &(*streams).err;
22123- const struct type_pure *_26 = &(*current).qt.type;
22124- EPrTypePure(0 /* _24 */, &*_25, &*_26);
22125- }
22126- {
22127- const struct StreamOut *_26 = &(*streams).err;
22128- Fail$(0 /* _25 */, &*_26, &*txtpos);
22129- }
22346+ break;
2213022347 }
22131- break;
22348+ default:
22349+ {
22350+ fprintf(stderr, "INTERNAL ERROR IN SWITCH");
22351+ break;
22352+ }
2213222353 }
22133- default:
22134- {
22135- fprintf(stderr, "INTERNAL ERROR IN SWITCH");
22136- break;
22137- }
22354+ container_type$dest(&_tpw);
2213822355 }
22139- container_type$dest(&_tpw);
22356+ break;
2214022357 }
22141- break;
22358+ default:
22359+ {
22360+ fprintf(stderr, "INTERNAL ERROR IN SWITCH");
22361+ break;
22362+ }
2214222363 }
22143- default:
22144- {
22145- fprintf(stderr, "INTERNAL ERROR IN SWITCH");
22146- break;
22147- }
22364+ type_pure$dest(&_tp);
22365+ free$(&_reduced_ids, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest);
2214822366 }
22149- type_pure$dest(&_tp);
22150- free$(&_reduced_ids, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest);
22151- }
22152- bool _13;
22153- {
22154- bool _14; memset(&_14, 0, sizeof(bool));
22367+ bool _14;
2215522368 {
2215622369 bool _15; memset(&_15, 0, sizeof(bool));
2215722370 {
22158- uint8_t _16; memset(&_16, 0, sizeof(uint8_t));
22159- _16 = 59;
22160- uint8_t _17; memset(&_17, 0, sizeof(uint8_t));
22371+ bool _16; memset(&_16, 0, sizeof(bool));
2216122372 {
22162- SkipCommentPeek$(&_17, &*streams, &*txtpos, &*level);
22373+ uint8_t _17; memset(&_17, 0, sizeof(uint8_t));
22374+ _17 = 59;
22375+ uint8_t _18; memset(&_18, 0, sizeof(uint8_t));
22376+ {
22377+ SkipCommentPeek$(&_18, &*streams, &*txtpos, &*level);
22378+ }
22379+ _16 = _17 == _18;
22380+ _IGNORE_(_18);
22381+ _IGNORE_(_17);
2216322382 }
22164- _15 = _16 == _17;
22165- _IGNORE_(_17);
22383+ not(&_15, &_16);
2216622384 _IGNORE_(_16);
2216722385 }
22168- not(&_14, &_15);
22386+ or(&_14, &*typed, &_15);
2216922387 _IGNORE_(_15);
2217022388 }
22171- or(&_13, &*typed, &_14);
22172- _IGNORE_(_14);
22173- }
22174- if(_13)
22175- {
22389+ if(_14)
2217622390 {
22177- const struct StreamOut *_15 = &(*streams).out;
22178- Indent(0 /* _14 */, &*_15, &*level);
22179- }
22180- {
22181- const struct StreamOut *_16 = &(*streams).out;
22182- struct string _17; memset(&_17, 0, sizeof(struct string));
22183- init$fromliteral(&_17, "else\n", 5);
22184- PutStr(0 /* _15 */, &*_16, &_17);
22185- string$dest(&_17);
22186- }
22187- {
22188- struct string _17; memset(&_17, 0, sizeof(struct string));
22189- init$fromliteral(&_17, "term", 4);
22190- MatchId$(0 /* _16 */, &_17, &*streams, &*txtpos, &*level);
22191- string$dest(&_17);
22192- }
22193- {
22194- uint8_t _18; memset(&_18, 0, sizeof(uint8_t));
22195- _18 = 58;
22196- AssertGet$(0 /* _17 */, &*streams, &*txtpos, &*level, &_18);
22197- _IGNORE_(_18);
22198- }
22199- {
22200- const struct StreamOut *_19 = &(*streams).out;
22201- Indent(0 /* _18 */, &*_19, &*level);
22202- }
22203- {
22204- const struct StreamOut *_20 = &(*streams).out;
22205- struct string _21; memset(&_21, 0, sizeof(struct string));
22206- init$fromliteral(&_21, "{\n", 2);
22207- PutStr(0 /* _19 */, &*_20, &_21);
22208- string$dest(&_21);
22209- }
22210- bool _21;
22211- _21 = (*typed);
22212- if(_21)
22213- {
2221422391 {
22215- uint64_t _23; memset(&_23, 0, sizeof(uint64_t));
22392+ const struct StreamOut *_16 = &(*streams).out;
22393+ Indent(0 /* _15 */, &*_16, &*level);
22394+ }
22395+ {
22396+ const struct StreamOut *_17 = &(*streams).out;
22397+ struct string _18; memset(&_18, 0, sizeof(struct string));
22398+ init$fromliteral(&_18, "else\n", 5);
22399+ PutStr(0 /* _16 */, &*_17, &_18);
22400+ string$dest(&_18);
22401+ }
22402+ {
22403+ struct string _18; memset(&_18, 0, sizeof(struct string));
22404+ init$fromliteral(&_18, "term", 4);
22405+ MatchId$(0 /* _17 */, &_18, &*streams, &*txtpos, &*level);
22406+ string$dest(&_18);
22407+ }
22408+ {
22409+ uint8_t _19; memset(&_19, 0, sizeof(uint8_t));
22410+ _19 = 58;
22411+ AssertGet$(0 /* _18 */, &*streams, &*txtpos, &*level, &_19);
22412+ _IGNORE_(_19);
22413+ }
22414+ {
22415+ const struct StreamOut *_20 = &(*streams).out;
22416+ Indent(0 /* _19 */, &*_20, &*level);
22417+ }
22418+ {
22419+ const struct StreamOut *_21 = &(*streams).out;
22420+ struct string _22; memset(&_22, 0, sizeof(struct string));
22421+ init$fromliteral(&_22, "{\n", 2);
22422+ PutStr(0 /* _20 */, &*_21, &_22);
22423+ string$dest(&_22);
22424+ }
22425+ bool _22;
22426+ _22 = (*typed);
22427+ if(_22)
22428+ {
2221622429 {
2221722430 uint64_t _24; memset(&_24, 0, sizeof(uint64_t));
22218- _24 = 1;
22219- _23 = *level + _24;
22431+ {
22432+ uint64_t _25; memset(&_25, 0, sizeof(uint64_t));
22433+ _25 = 1;
22434+ _24 = *level + _25;
22435+ _IGNORE_(_25);
22436+ }
22437+ struct string _25; memset(&_25, 0, sizeof(struct string));
22438+ {
22439+ ParseId$(&_25, &*streams, &*txtpos, &*level);
22440+ }
22441+ ParseExpr$(0 /* _23 */, &*streams, &*txtpos, &*state, &_24, &*sp, &*tmpnr, &*store, &_25, &*totality, &*action, &*self, &*reduced_ids_);
22442+ string$dest(&_25);
2222022443 _IGNORE_(_24);
2222122444 }
22222- struct string _24; memset(&_24, 0, sizeof(struct string));
22223- {
22224- ParseId$(&_24, &*streams, &*txtpos, &*level);
22225- }
22226- ParseExpr$(0 /* _22 */, &*streams, &*txtpos, &*state, &_23, &*sp, &*tmpnr, &*store, &_24, &*totality, &*action, &*self, &*reduced_ids_);
22227- string$dest(&_24);
22228- _IGNORE_(_23);
2222922445 }
22230- }
22231- else
22232- {
22446+ else
2223322447 {
22234- uint64_t _23; memset(&_23, 0, sizeof(uint64_t));
2223522448 {
2223622449 uint64_t _24; memset(&_24, 0, sizeof(uint64_t));
22237- _24 = 1;
22238- _23 = *level + _24;
22450+ {
22451+ uint64_t _25; memset(&_25, 0, sizeof(uint64_t));
22452+ _25 = 1;
22453+ _24 = *level + _25;
22454+ _IGNORE_(_25);
22455+ }
22456+ struct string _25; memset(&_25, 0, sizeof(struct string));
22457+ {
22458+ ParseId$(&_25, &*streams, &*txtpos, &*level);
22459+ }
22460+ ParseAssign$(0 /* _23 */, &*streams, &*txtpos, &*state, &_24, &*sp, &*tmpnr, &*totality, &*action, &*self, &*reduced_ids_, &_25);
22461+ string$dest(&_25);
2223922462 _IGNORE_(_24);
2224022463 }
22241- struct string _24; memset(&_24, 0, sizeof(struct string));
22242- {
22243- ParseId$(&_24, &*streams, &*txtpos, &*level);
22244- }
22245- ParseAssign$(0 /* _22 */, &*streams, &*txtpos, &*state, &_23, &*sp, &*tmpnr, &*totality, &*action, &*self, &*reduced_ids_, &_24);
22246- string$dest(&_24);
22247- _IGNORE_(_23);
2224822464 }
22465+ {
22466+ const struct StreamOut *_24 = &(*streams).out;
22467+ Indent(0 /* _23 */, &*_24, &*level);
22468+ }
22469+ {
22470+ const struct StreamOut *_25 = &(*streams).out;
22471+ struct string _26; memset(&_26, 0, sizeof(struct string));
22472+ init$fromliteral(&_26, "}\n", 2);
22473+ PutStr(0 /* _24 */, &*_25, &_26);
22474+ string$dest(&_26);
22475+ }
2224922476 }
22250- {
22251- const struct StreamOut *_23 = &(*streams).out;
22252- Indent(0 /* _22 */, &*_23, &*level);
22477+ nonempty_string$dest(&_10);
2225322478 }
22254- {
22255- const struct StreamOut *_24 = &(*streams).out;
22256- struct string _25; memset(&_25, 0, sizeof(struct string));
22257- init$fromliteral(&_25, "}\n", 2);
22258- PutStr(0 /* _23 */, &*_24, &_25);
22259- string$dest(&_25);
22260- }
22261- }
22262- string$dest(&_reduced_id);
22479+ free$(&_reduced_id, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest);
2226322480 string$dest(&_tmp_reduce);
2226422481 free$(&_opt_elem_id, sizeof(struct string), (void (*)(void *))string$dest);
2226522482 type_mode$dest(&_cqq);
@@ -22266,7 +22483,7 @@
2226622483 }
2226722484 }
2226822485 free$(&_current, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
22269- string$dest(&_par);
22486+ nonempty_string$dest(&_par);
2227022487 }
2227122488 }
2227222489
@@ -22746,7 +22963,7 @@
2274622963 }
2274722964 }
2274822965
22749-void ParseExpr$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct string *const id, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids)
22966+void ParseExpr$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct string *const id, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids)
2275022967 {
2275122968 {
2275222969 bool _2;
@@ -22826,7 +23043,7 @@
2282623043 {
2282723044 struct stack/*qtypepureid*/ _10; memset(&_10, 0, sizeof(struct stack/*qtypepureid*/));
2282823045 {
22829- solid(&_10, &_pred, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 4576);
23046+ solid(&_10, &_pred, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 4602);
2283023047 }
2283123048 ParseExpr$(0 /* _9 */, &*streams, &*txtpos, &*state, &*level, &*sp, &*tmpnr, &_10, &*id, &*totality, &*action, &*self, &*reduced_ids);
2283223049 free$(&_10, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
@@ -23074,7 +23291,7 @@
2307423291 uint8_t _14; memset(&_14, 0, sizeof(uint8_t));
2307523292 {
2307623293 struct stack/*u8*/ *_15 = &(*id).data;
23077- pop$(&_14, &*_15, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 4622);
23294+ pop$(&_14, &*_15, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 4648);
2307823295 }
2307923296 nonempty_string(&_13, &_14, &*id);
2308023297 _IGNORE_(_14);
@@ -23124,11 +23341,8 @@
2312423341 {
2312523342 struct qtypepure _typ; memset(&_typ, 0, sizeof(struct qtypepure));
2312623343 qtypepure$copy(&_typ, &(*current).qt);
23127- struct string _par; memset(&_par, 0, sizeof(struct string));
23128- {
23129- const struct nonempty_string *_14 = &(*current).id;
23130- nonempty_to_string(&_par, &*_14);
23131- }
23344+ struct nonempty_string _par; memset(&_par, 0, sizeof(struct nonempty_string));
23345+ nonempty_string$copy(&_par, &(*current).id);
2313223346 bool _15;
2313323347 {
2313423348 const struct string *_16 = &(*store).id.rest;
@@ -23209,7 +23423,12 @@
2320923423 }
2321023424 {
2321123425 const struct StreamOut *_23 = &(*streams).out;
23212- PutStr(0 /* _22 */, &*_23, &_par);
23426+ struct string _24; memset(&_24, 0, sizeof(struct string));
23427+ {
23428+ nonempty_to_string(&_24, &_par);
23429+ }
23430+ PutStr(0 /* _22 */, &*_23, &_24);
23431+ string$dest(&_24);
2321323432 }
2321423433 {
2321523434 const struct StreamOut *_24 = &(*streams).out;
@@ -23241,7 +23460,7 @@
2324123460 ChkQTPI$(0 /* _27 */, &*_28, &*txtpos, &*store, &*_29, &*id);
2324223461 }
2324323462 free$(&_path, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest);
23244- string$dest(&_par);
23463+ nonempty_string$dest(&_par);
2324523464 qtypepure$dest(&_typ);
2324623465 }
2324723466 }
@@ -23541,7 +23760,7 @@
2354123760 }
2354223761 }
2354323762
23544-void ParseExpr2$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, const uint64_t *const tmpnr_, const struct qtypepureid *const store, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids)
23763+void ParseExpr2$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, const uint64_t *const tmpnr_, const struct qtypepureid *const store, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids)
2354523764 {
2354623765 {
2354723766 uint64_t _tmpnr; memset(&_tmpnr, 0, sizeof(uint64_t));
@@ -23572,7 +23791,7 @@
2357223791 {
2357323792 struct stack/*qtypepureid*/ _4; memset(&_4, 0, sizeof(struct stack/*qtypepureid*/));
2357423793 {
23575- solid(&_4, &*store, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 4728);
23794+ solid(&_4, &*store, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 4754);
2357623795 }
2357723796 ParseExpr$(0 /* _3 */, &*streams, &*txtpos, &*state, &*level, &*sp, &_tmpnr, &_4, &_id, &*totality, &*action, &*self, &*reduced_ids);
2357823797 free$(&_4, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
@@ -23582,8 +23801,8 @@
2358223801 }
2358323802 }
2358423803
23585-void ParseLines$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids);
23586-void ParseNext$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids)
23804+void ParseLines$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids);
23805+void ParseNext$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids)
2358723806 {
2358823807 {
2358923808 bool _2;
@@ -23702,7 +23921,7 @@
2370223921 }
2370323922 }
2370423923
23705-void ParseLet$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids)
23924+void ParseLet$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids)
2370623925 {
2370723926 {
2370823927 bool _2;
@@ -23727,7 +23946,7 @@
2372723946 {
2372823947 struct stack/*qtypepureid*/ _5; memset(&_5, 0, sizeof(struct stack/*qtypepureid*/));
2372923948 {
23730- empty(&_5, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 4776);
23949+ empty(&_5, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 4802);
2373123950 }
2373223951 ParseExpr$(0 /* _4 */, &*streams, &*txtpos, &*state, &*level, &*sp, &*tmpnr, &_5, &_id, &*totality, &*action, &*self, &*reduced_ids);
2373323952 free$(&_5, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
@@ -23909,7 +24128,7 @@
2390924128 {
2391024129 struct stack/*qtypepureid*/ _14; memset(&_14, 0, sizeof(struct stack/*qtypepureid*/));
2391124130 {
23912- solid(&_14, &_mut_st, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 4807);
24131+ solid(&_14, &_mut_st, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 4833);
2391324132 }
2391424133 struct string _15; memset(&_15, 0, sizeof(struct string));
2391524134 {
@@ -23928,7 +24147,7 @@
2392824147 {
2392924148 varinit(&_11, &_new);
2393024149 }
23931- push(0 /* _9 */, &*_10, &_11, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 4811);
24150+ push(0 /* _9 */, &*_10, &_11, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 4837);
2393224151 var$dest(&_11);
2393324152 }
2393424153 {
@@ -23983,13 +24202,8 @@
2398324202 bool _11;
2398424203 {
2398524204 struct stack/*var*/ *_12 = &(*sp).current.elems;
23986- struct string _13; memset(&_13, 0, sizeof(struct string));
23987- {
23988- struct nonempty_string *_14 = &(_new).id;
23989- nonempty_to_string(&_13, &*_14);
23990- }
23991- exists_var(&_11, &*_12, &_13);
23992- string$dest(&_13);
24205+ struct nonempty_string *_13 = &(_new).id;
24206+ exists_var(&_11, &*_12, &*_13);
2399324207 }
2399424208 if(_11)
2399524209 {
@@ -24172,7 +24386,7 @@
2417224386 }
2417324387 struct stack/*qtypepureid*/ _20; memset(&_20, 0, sizeof(struct stack/*qtypepureid*/));
2417424388 {
24175- solid(&_20, &_mut_st, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 4847);
24389+ solid(&_20, &_mut_st, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 4873);
2417624390 }
2417724391 struct string _21; memset(&_21, 0, sizeof(struct string));
2417824392 {
@@ -24240,7 +24454,7 @@
2424024454 {
2424124455 varinit(&_16, &_ref);
2424224456 }
24243- push(0 /* _14 */, &*_15, &_16, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 4853);
24457+ push(0 /* _14 */, &*_15, &_16, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 4879);
2424424458 var$dest(&_16);
2424524459 }
2424624460 {
@@ -24322,7 +24536,7 @@
2432224536 }
2432324537 }
2432424538
24325-void ParseRes$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids)
24539+void ParseRes$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids)
2432624540 {
2432724541 {
2432824542 const struct stack/*qtypepureid*/ *_1 = &(*store);
@@ -24397,7 +24611,7 @@
2439724611 {
2439824612 struct stack/*qtypepureid*/ _11; memset(&_11, 0, sizeof(struct stack/*qtypepureid*/));
2439924613 {
24400- empty(&_11, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 4903);
24614+ empty(&_11, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 4929);
2440124615 }
2440224616 ParseExpr$(0 /* _10 */, &*streams, &*txtpos, &*state, &*level, &*sp, &*tmpnr, &_11, &_id, &*totality, &*action, &*self, &*reduced_ids);
2440324617 free$(&_11, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
@@ -24437,7 +24651,7 @@
2443724651 {
2443824652 struct stack/*qtypepureid*/ _13; memset(&_13, 0, sizeof(struct stack/*qtypepureid*/));
2443924653 {
24440- solid(&_13, &_mut_pv, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 4914);
24654+ solid(&_13, &_mut_pv, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 4940);
2444124655 }
2444224656 ParseExpr$(0 /* _12 */, &*streams, &*txtpos, &*state, &*level, &*sp, &*tmpnr, &_13, &_id, &*totality, &*action, &*self, &*reduced_ids);
2444324657 free$(&_13, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
@@ -24671,7 +24885,7 @@
2467124885 }
2467224886 }
2467324887
24674-void ParseForBlockStream$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const struct qtypepureid *const container, const struct nonempty_string *const elem_id)
24888+void ParseForBlockStream$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const struct qtypepureid *const container, const struct nonempty_string *const elem_id)
2467524889 {
2467624890 {
2467724891 {
@@ -24695,12 +24909,7 @@
2469524909 {
2469624910 bool _4; memset(&_4, 0, sizeof(bool));
2469724911 {
24698- struct string _5; memset(&_5, 0, sizeof(struct string));
24699- {
24700- nonempty_to_string(&_5, &*elem_id);
24701- }
24702- istmp$(&_4, &_5);
24703- string$dest(&_5);
24912+ istmp$(&_4, &*elem_id);
2470424913 }
2470524914 not(&_3, &_4);
2470624915 _IGNORE_(_4);
@@ -24729,7 +24938,7 @@
2472924938 varinit(&_6, &_7);
2473024939 qtypepureid$dest(&_7);
2473124940 }
24732- push(0 /* _4 */, &*_5, &_6, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 4968);
24941+ push(0 /* _4 */, &*_5, &_6, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 4994);
2473324942 var$dest(&_6);
2473424943 }
2473524944 }
@@ -24908,7 +25117,7 @@
2490825117 }
2490925118 struct stack/*qtypepureid*/ _27; memset(&_27, 0, sizeof(struct stack/*qtypepureid*/));
2491025119 {
24911- empty(&_27, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 4987);
25120+ empty(&_27, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 5013);
2491225121 }
2491325122 ParseBlockRaw$(0 /* _25 */, &*streams, &*txtpos, &*state, &_26, &*sp, &*tmpnr, &_27, &*totality, &*action, &*self, &*reduced_ids);
2491425123 free$(&_27, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
@@ -24940,7 +25149,7 @@
2494025149 }
2494125150 }
2494225151
24943-void ParseForBlock$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const struct type_pure *const argtype, const struct qtypepureid *const container, const struct string *const id)
25152+void ParseForBlock$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const struct type_pure *const argtype, const struct qtypepureid *const container, const struct nonempty_string *const id)
2494425153 {
2494525154 {
2494625155 {
@@ -25020,7 +25229,12 @@
2502025229 {
2502125230 uint8_t _11; memset(&_11, 0, sizeof(uint8_t));
2502225231 _11 = 42;
25023- nonempty_string(&_10, &_11, &*id);
25232+ struct string _12; memset(&_12, 0, sizeof(struct string));
25233+ {
25234+ nonempty_to_string(&_12, &*id);
25235+ }
25236+ nonempty_string(&_10, &_11, &_12);
25237+ string$dest(&_12);
2502425238 _IGNORE_(_11);
2502525239 }
2502625240 qtypepureid(&_mut_elem2, &_9, &_10);
@@ -25045,7 +25259,7 @@
2504525259 varinit(&_11, &_12);
2504625260 qtypepureid$dest(&_12);
2504725261 }
25048- push(0 /* _9 */, &*_10, &_11, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 5004);
25262+ push(0 /* _9 */, &*_10, &_11, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 5030);
2504925263 var$dest(&_11);
2505025264 }
2505125265 {
@@ -25134,7 +25348,7 @@
2513425348 }
2513525349 struct stack/*qtypepureid*/ _21; memset(&_21, 0, sizeof(struct stack/*qtypepureid*/));
2513625350 {
25137- empty(&_21, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 5009);
25351+ empty(&_21, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 5035);
2513825352 }
2513925353 ParseBlock$(0 /* _19 */, &*streams, &*txtpos, &*state, &_20, &*sp, &*tmpnr, &_21, &*totality, &*action, &*self, &*reduced_ids);
2514025354 free$(&_21, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
@@ -25143,13 +25357,8 @@
2514325357 bool _21;
2514425358 {
2514525359 struct stack/*var*/ *_22 = &(*sp).current.elems;
25146- struct string _23; memset(&_23, 0, sizeof(struct string));
25147- {
25148- const struct nonempty_string *_24 = &(_mut_elem2).id;
25149- nonempty_to_string(&_23, &*_24);
25150- }
25151- find_var_report_unused_and_mark_used(&_21, &*_22, &_23);
25152- string$dest(&_23);
25360+ const struct nonempty_string *_23 = &(_mut_elem2).id;
25361+ find_var_report_unused_and_mark_used(&_21, &*_22, &*_23);
2515325362 }
2515425363 if(_21)
2515525364 {
@@ -25211,7 +25420,7 @@
2521125420 }
2521225421 }
2521325422
25214-void ParseFor$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids)
25423+void ParseFor$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids)
2521525424 {
2521625425 {
2521725426 {
@@ -25301,7 +25510,7 @@
2530125510 varhide(&_10, &_11, &*txtpos);
2530225511 nonempty_string$dest(&_11);
2530325512 }
25304- push(0 /* _8 */, &*_9, &_10, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 5043);
25513+ push(0 /* _8 */, &*_9, &_10, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 5069);
2530525514 var$dest(&_10);
2530625515 }
2530725516 }
@@ -25423,12 +25632,7 @@
2542325632 const struct type_pure_prim *_17 = &(*containertype).prim;
2542425633 type_pure_normal(&_16, &*_17);
2542525634 }
25426- struct string _17; memset(&_17, 0, sizeof(struct string));
25427- {
25428- nonempty_to_string(&_17, &*id);
25429- }
25430- ParseForBlock$(0 /* _15 */, &*streams, &*txtpos, &*state, &*level, &*sp, &*tmpnr, &*totality, &*action, &*self, &*reduced_ids, &_16, &*container, &_17);
25431- string$dest(&_17);
25635+ ParseForBlock$(0 /* _15 */, &*streams, &*txtpos, &*state, &*level, &*sp, &*tmpnr, &*totality, &*action, &*self, &*reduced_ids, &_16, &*container, &*id);
2543225636 type_pure$dest(&_16);
2543325637 }
2543425638 }
@@ -25744,7 +25948,7 @@
2574425948 {
2574525949 varinit(&_49, &_mut_elem);
2574625950 }
25747- push(0 /* _47 */, &*_48, &_49, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 5107);
25951+ push(0 /* _47 */, &*_48, &_49, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 5133);
2574825952 var$dest(&_49);
2574925953 }
2575025954 {
@@ -25757,7 +25961,7 @@
2575725961 }
2575825962 struct stack/*qtypepureid*/ _50; memset(&_50, 0, sizeof(struct stack/*qtypepureid*/));
2575925963 {
25760- empty(&_50, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 5108);
25964+ empty(&_50, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 5134);
2576125965 }
2576225966 ParseBlockRaw$(0 /* _48 */, &*streams, &*txtpos, &*state, &_49, &*sp, &*tmpnr, &_50, &*totality, &*action, &*self, &*reduced_ids);
2576325967 free$(&_50, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
@@ -25766,7 +25970,7 @@
2576625970 bool _50;
2576725971 {
2576825972 struct stack/*var*/ *_51 = &(*sp).current.elems;
25769- struct string _52; memset(&_52, 0, sizeof(struct string));
25973+ struct nonempty_string _52; memset(&_52, 0, sizeof(struct nonempty_string));
2577025974 {
2577125975 uint8_t _53; memset(&_53, 0, sizeof(uint8_t));
2577225976 _53 = 42;
@@ -25774,12 +25978,12 @@
2577425978 {
2577525979 nonempty_to_string(&_54, &*id);
2577625980 }
25777- preapp(&_52, &_53, &_54);
25981+ nonempty_string(&_52, &_53, &_54);
2577825982 string$dest(&_54);
2577925983 _IGNORE_(_53);
2578025984 }
2578125985 find_var_report_unused_and_mark_used(&_50, &*_51, &_52);
25782- string$dest(&_52);
25986+ nonempty_string$dest(&_52);
2578325987 }
2578425988 if(_50)
2578525989 {
@@ -26080,7 +26284,7 @@
2608026284 {
2608126285 varinit(&_50, &_mut_elem);
2608226286 }
26083- push(0 /* _48 */, &*_49, &_50, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 5136);
26287+ push(0 /* _48 */, &*_49, &_50, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 5162);
2608426288 var$dest(&_50);
2608526289 }
2608626290 {
@@ -26093,7 +26297,7 @@
2609326297 }
2609426298 struct stack/*qtypepureid*/ _51; memset(&_51, 0, sizeof(struct stack/*qtypepureid*/));
2609526299 {
26096- empty(&_51, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 5137);
26300+ empty(&_51, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 5163);
2609726301 }
2609826302 ParseBlockRaw$(0 /* _49 */, &*streams, &*txtpos, &*state, &_50, &*sp, &*tmpnr, &_51, &*totality, &*action, &*self, &*reduced_ids);
2609926303 free$(&_51, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
@@ -26102,7 +26306,7 @@
2610226306 bool _51;
2610326307 {
2610426308 struct stack/*var*/ *_52 = &(*sp).current.elems;
26105- struct string _53; memset(&_53, 0, sizeof(struct string));
26309+ struct nonempty_string _53; memset(&_53, 0, sizeof(struct nonempty_string));
2610626310 {
2610726311 uint8_t _54; memset(&_54, 0, sizeof(uint8_t));
2610826312 _54 = 42;
@@ -26110,12 +26314,12 @@
2611026314 {
2611126315 nonempty_to_string(&_55, &*id);
2611226316 }
26113- preapp(&_53, &_54, &_55);
26317+ nonempty_string(&_53, &_54, &_55);
2611426318 string$dest(&_55);
2611526319 _IGNORE_(_54);
2611626320 }
2611726321 find_var_report_unused_and_mark_used(&_51, &*_52, &_53);
26118- string$dest(&_53);
26322+ nonempty_string$dest(&_53);
2611926323 }
2612026324 if(_51)
2612126325 {
@@ -26274,7 +26478,7 @@
2627426478 }
2627526479 }
2627626480
26277-void ParseWhile$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids)
26481+void ParseWhile$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids)
2627826482 {
2627926483 {
2628026484 const struct requires_totality *_1 = &(*totality);
@@ -26368,7 +26572,7 @@
2636826572 }
2636926573 struct stack/*qtypepureid*/ _12; memset(&_12, 0, sizeof(struct stack/*qtypepureid*/));
2637026574 {
26371- solid(&_12, &_condition, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 5176);
26575+ solid(&_12, &_condition, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 5202);
2637226576 }
2637326577 struct string _13; memset(&_13, 0, sizeof(struct string));
2637426578 {
@@ -26456,7 +26660,7 @@
2645626660 }
2645726661 struct stack/*qtypepureid*/ _19; memset(&_19, 0, sizeof(struct stack/*qtypepureid*/));
2645826662 {
26459- empty(&_19, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 5183);
26663+ empty(&_19, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 5209);
2646026664 }
2646126665 ParseBlock$(0 /* _17 */, &*streams, &*txtpos, &*state, &_18, &*sp, &*tmpnr, &_19, &*totality, &*action, &*self, &*reduced_ids);
2646226666 free$(&_19, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
@@ -26505,7 +26709,7 @@
2650526709 }
2650626710 }
2650726711
26508-void ParseStatement$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const struct string *const id)
26712+void ParseStatement$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids, const struct string *const id)
2650926713 {
2651026714 {
2651126715 bool _2;
@@ -26535,7 +26739,7 @@
2653526739 {
2653626740 struct stack/*qtypepureid*/ _6; memset(&_6, 0, sizeof(struct stack/*qtypepureid*/));
2653726741 {
26538- empty(&_6, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 5204);
26742+ empty(&_6, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 5230);
2653926743 }
2654026744 bool _7; memset(&_7, 0, sizeof(bool));
2654126745 _7 = 0;
@@ -27005,7 +27209,7 @@
2700527209 }
2700627210 }
2700727211
27008-void ParseLines$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids)
27212+void ParseLines$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids)
2700927213 {
2701027214 {
2701127215 {
@@ -27038,7 +27242,7 @@
2703827242 }
2703927243 }
2704027244
27041-void ParseBlockRaw$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level_, struct scopepath *const sp, const uint64_t *const tmpnr_, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids)
27245+void ParseBlockRaw$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level_, struct scopepath *const sp, const uint64_t *const tmpnr_, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids)
2704227246 {
2704327247 {
2704427248 {
@@ -27060,7 +27264,7 @@
2706027264 }
2706127265 }
2706227266
27063-void ParseBlock$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, const uint64_t *const tmpnr_, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct string *const self, const struct stack/*ReducedId*/ *const reduced_ids)
27267+void ParseBlock$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, struct state *const state, const uint64_t *const level, struct scopepath *const sp, const uint64_t *const tmpnr_, const struct stack/*qtypepureid*/ *const store, const struct requires_totality *const totality, const bool *const action, const struct nonempty_string *const self, const struct stack/*ReducedId*/ *const reduced_ids)
2706427268 {
2706527269 {
2706627270 {
@@ -27413,8 +27617,7 @@
2741327617 {
2741427618 bool _13; memset(&_13, 0, sizeof(bool));
2741527619 {
27416- const struct string *_14 = &(*id).rest;
27417- idpart(&_13, &*_14);
27620+ idpart(&_13, &*id);
2741827621 }
2741927622 StructCompareElems(0 /* _12 */, &*out, &*err, &*structs, &*elems, &_13);
2742027623 _IGNORE_(_13);
@@ -27657,8 +27860,7 @@
2765727860 {
2765827861 bool _14; memset(&_14, 0, sizeof(bool));
2765927862 {
27660- const struct string *_15 = &(*id).rest;
27661- idpart(&_14, &*_15);
27863+ idpart(&_14, &*id);
2766227864 }
2766327865 StructPrintElems(0 /* _13 */, &*out, &*err, &*structs, &*elems, &_14);
2766427866 _IGNORE_(_14);
@@ -27717,7 +27919,7 @@
2771727919 _IGNORE_(_3);
2771827920 }
2771927921 {
27720- push(0 /* _3 */, &*elems, &_ti, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 5507);
27922+ push(0 /* _3 */, &*elems, &_ti, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 5533);
2772127923 }
2772227924 {
2772327925 uint64_t _5; memset(&_5, 0, sizeof(uint64_t));
@@ -27902,8 +28104,7 @@
2790228104 {
2790328105 bool _5; memset(&_5, 0, sizeof(bool));
2790428106 {
27905- const struct string *_6 = &(*id).rest;
27906- idpart(&_5, &*_6);
28107+ idpart(&_5, &*id);
2790728108 }
2790828109 StructCopyElems(0 /* _4 */, &*out, &*err, &*txtpos, &*structs, &*elems, &_5);
2790928110 _IGNORE_(_5);
@@ -28329,8 +28530,7 @@
2832928530 struct stack/*structdef*/ *_12 = &(*state).structs;
2833028531 bool _13; memset(&_13, 0, sizeof(bool));
2833128532 {
28332- const struct string *_14 = &(*id).rest;
28333- idpart(&_13, &*_14);
28533+ idpart(&_13, &*id);
2833428534 }
2833528535 StructConstrElems(0 /* _11 */, &*out, &*err, &*txtpos, &*_12, &*elems, &_13);
2833628536 _IGNORE_(_13);
@@ -28355,8 +28555,7 @@
2835528555 }
2835628556 bool _18; memset(&_18, 0, sizeof(bool));
2835728557 {
28358- const struct string *_19 = &(*id).rest;
28359- idpart(&_18, &*_19);
28558+ idpart(&_18, &*id);
2836028559 }
2836128560 struct fnstat _19; memset(&_19, 0, sizeof(struct fnstat));
2836228561 {
@@ -28395,7 +28594,7 @@
2839528594 const struct nonempty_string *_6 = &(*c).id;
2839628595 typepureid(&_4, &*_5, &*_6);
2839728596 }
28398- push(0 /* _3 */, &*extracted, &_4, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 5641);
28597+ push(0 /* _3 */, &*extracted, &_4, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 5667);
2839928598 typepureid$dest(&_4);
2840028599 }
2840128600 }
@@ -29045,8 +29244,7 @@
2904529244 struct stack/*structdef*/ *_39 = &(*state).structs;
2904629245 bool _40; memset(&_40, 0, sizeof(bool));
2904729246 {
29048- const struct string *_41 = &(*id).rest;
29049- idpart(&_40, &*_41);
29247+ idpart(&_40, &*id);
2905029248 }
2905129249 DataCompareElems(0 /* _38 */, &*out, &*err, &*_39, &*id, &*elems, &_40);
2905229250 _IGNORE_(_40);
@@ -29097,7 +29295,7 @@
2909729295 }
2909829296 }
2909929297
29100-void DataPrints(void *const _0, const struct StreamOut *const out, const struct StreamOut *const err, const struct linecol *const txtpos, struct state *const state, const struct string *const id, const struct stack/*constr*/ *const constrs, const bool *const partial)
29298+void DataPrints(void *const _0, const struct StreamOut *const out, const struct StreamOut *const err, const struct linecol *const txtpos, struct state *const state, const struct stack/*constr*/ *const constrs, const bool *const partial)
2910129299 {
2910229300 {
2910329301 if(constrs->fill > 0)
@@ -29109,7 +29307,7 @@
2910929307 const struct constr *constr = ((const struct constr *)(_rest.data)) + _rest.fill; // REFERENCE - memory must NOT be de-allocated when leaving scope!!!
2911029308 {
2911129309 {
29112- DataPrints(0 /* _2 */, &*out, &*err, &*txtpos, &*state, &*id, &_rest, &*partial);
29310+ DataPrints(0 /* _2 */, &*out, &*err, &*txtpos, &*state, &_rest, &*partial);
2911329311 }
2911429312 bool _4;
2911529313 {
@@ -29257,7 +29455,7 @@
2925729455 }
2925829456 }
2925929457
29260-void DataPrintElems(void *const _0, const struct StreamOut *const out, const struct StreamOut *const err, struct stack/*structdef*/ *const structs, const struct string *const id, const struct stack/*typepureid*/ *const elems, const bool *const partial)
29458+void DataPrintElems(void *const _0, const struct StreamOut *const out, const struct StreamOut *const err, struct stack/*structdef*/ *const structs, const struct nonempty_string *const id, const struct stack/*typepureid*/ *const elems, const bool *const partial)
2926129459 {
2926229460 {
2926329461 if(elems->fill > 0)
@@ -29340,7 +29538,12 @@
2934029538 string$dest(&_14);
2934129539 }
2934229540 {
29343- PutStr(0 /* _14 */, &*out, &*id);
29541+ struct string _15; memset(&_15, 0, sizeof(struct string));
29542+ {
29543+ nonempty_to_string(&_15, &*id);
29544+ }
29545+ PutStr(0 /* _14 */, &*out, &_15);
29546+ string$dest(&_15);
2934429547 }
2934529548 {
2934629549 struct string _16; memset(&_16, 0, sizeof(struct string));
@@ -29614,18 +29817,12 @@
2961429817 }
2961529818 {
2961629819 struct stack/*structdef*/ *_16 = &(*state).structs;
29617- struct string _17; memset(&_17, 0, sizeof(struct string));
29820+ bool _17; memset(&_17, 0, sizeof(bool));
2961829821 {
29619- nonempty_to_string(&_17, &*id);
29822+ idpart(&_17, &*id);
2962029823 }
29621- bool _18; memset(&_18, 0, sizeof(bool));
29622- {
29623- const struct string *_19 = &(*id).rest;
29624- idpart(&_18, &*_19);
29625- }
29626- DataPrintElems(0 /* _15 */, &*out, &*err, &*_16, &_17, &*elems, &_18);
29627- _IGNORE_(_18);
29628- string$dest(&_17);
29824+ DataPrintElems(0 /* _15 */, &*out, &*err, &*_16, &*id, &*elems, &_17);
29825+ _IGNORE_(_17);
2962929826 }
2963029827 {
2963129828 uint64_t _17; memset(&_17, 0, sizeof(uint64_t));
@@ -29974,8 +30171,7 @@
2997430171 {
2997530172 bool _38; memset(&_38, 0, sizeof(bool));
2997630173 {
29977- const struct string *_39 = &(*id).rest;
29978- idpart(&_38, &*_39);
30174+ idpart(&_38, &*id);
2997930175 }
2998030176 DataCopyElems(0 /* _37 */, &*out, &*err, &*txtpos, &*structs, &*elems, &_38);
2998130177 _IGNORE_(_38);
@@ -30610,8 +30806,7 @@
3061030806 {
3061130807 bool _2; memset(&_2, 0, sizeof(bool));
3061230808 {
30613- const struct string *_3 = &(*id).rest;
30614- idpart(&_2, &*_3);
30809+ idpart(&_2, &*id);
3061530810 }
3061630811 UnionConstrs$(0 /* _1 */, &*out, &*err, &*txtpos, &*state, &*id, &*elems, &_2);
3061730812 _IGNORE_(_2);
@@ -30650,11 +30845,11 @@
3065030845 {
3065130846 struct qtype _decl_; memset(&_decl_, 0, sizeof(struct qtype));
3065230847 {
30653- at_get$(&_decl_, &*decl, &*idx, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 5946);
30848+ at_get$(&_decl_, &*decl, &*idx, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 5972);
3065430849 }
3065530850 struct qtype _def_; memset(&_def_, 0, sizeof(struct qtype));
3065630851 {
30657- at_get$(&_def_, &*def, &*idx, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 5947);
30852+ at_get$(&_def_, &*def, &*idx, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 5973);
3065830853 }
3065930854 bool _4;
3066030855 {
@@ -30839,7 +31034,7 @@
3083931034 }
3084031035 }
3084131036
30842-void EmitStructDecl(void *const _0, const struct StreamOut *const out, const struct string *const id)
31037+void EmitStructDecl(void *const _0, const struct StreamOut *const out, const struct nonempty_string *const id)
3084331038 {
3084431039 {
3084531040 {
@@ -30849,7 +31044,12 @@
3084931044 string$dest(&_2);
3085031045 }
3085131046 {
30852- PutStr(0 /* _2 */, &*out, &*id);
31047+ struct string _3; memset(&_3, 0, sizeof(struct string));
31048+ {
31049+ nonempty_to_string(&_3, &*id);
31050+ }
31051+ PutStr(0 /* _2 */, &*out, &_3);
31052+ string$dest(&_3);
3085331053 }
3085431054 {
3085531055 struct string _4; memset(&_4, 0, sizeof(struct string));
@@ -30926,7 +31126,7 @@
3092631126 {
3092731127 STRUCT(&_6, &*elems);
3092831128 }
30929- solid(&_5, &_6, sizeof(struct flavour), (void (*)(void *))flavour$dest, (void (*)(void *, const void *))flavour$copy, 6012);
31129+ solid(&_5, &_6, sizeof(struct flavour), (void (*)(void *))flavour$dest, (void (*)(void *, const void *))flavour$copy, 6038);
3093031130 flavour$dest(&_6);
3093131131 }
3093231132 structdef(&_4, &_5, &*id, &*used);
@@ -31579,7 +31779,7 @@
3157931779 {
3158031780 struct typepureid _cur; memset(&_cur, 0, sizeof(struct typepureid));
3158131781 {
31582- at_get$(&_cur, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 6131);
31782+ at_get$(&_cur, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 6157);
3158331783 }
3158431784 {
3158531785 uint64_t _4; memset(&_4, 0, sizeof(uint64_t));
@@ -31680,7 +31880,7 @@
3168031880 {
3168131881 struct typepureid _cur; memset(&_cur, 0, sizeof(struct typepureid));
3168231882 {
31683- at_get$(&_cur, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 6147);
31883+ at_get$(&_cur, &*elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 6173);
3168431884 }
3168531885 {
3168631886 struct qtype _4; memset(&_4, 0, sizeof(struct qtype));
@@ -31753,7 +31953,7 @@
3175331953 {
3175431954 struct constr _c; memset(&_c, 0, sizeof(struct constr));
3175531955 {
31756- at_get$(&_c, &*constrs, &*idx, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 6161);
31956+ at_get$(&_c, &*constrs, &*idx, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 6187);
3175731957 }
3175831958 bool _4;
3175931959 {
@@ -31821,11 +32021,11 @@
3182132021 }
3182232022 struct typepureid _elem; memset(&_elem, 0, sizeof(struct typepureid));
3182332023 {
31824- at_get$(&_elem, &_elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 6178);
32024+ at_get$(&_elem, &_elems, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 6204);
3182532025 }
3182632026 struct constr _constr; memset(&_constr, 0, sizeof(struct constr));
3182732027 {
31828- at_get$(&_constr, &*constrs, &*idx, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 6180);
32028+ at_get$(&_constr, &*constrs, &*idx, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 6206);
3182932029 }
3183032030 struct type_pure _type; memset(&_type, 0, sizeof(struct type_pure));
3183132031 {
@@ -32290,7 +32490,7 @@
3229032490 {
3229132491 DATA(&_8, &*constrs);
3229232492 }
32293- solid(&_7, &_8, sizeof(struct flavour), (void (*)(void *))flavour$dest, (void (*)(void *, const void *))flavour$copy, 6224);
32493+ solid(&_7, &_8, sizeof(struct flavour), (void (*)(void *))flavour$dest, (void (*)(void *, const void *))flavour$copy, 6250);
3229432494 flavour$dest(&_8);
3229532495 }
3229632496 structdef(&_6, &_7, &*id, &*used);
@@ -32312,8 +32512,7 @@
3231232512 _8 = 0;
3231332513 bool _9; memset(&_9, 0, sizeof(bool));
3231432514 {
32315- const struct string *_10 = &(*id).rest;
32316- idpart(&_9, &*_10);
32515+ idpart(&_9, &*id);
3231732516 }
3231832517 DataConstrs$(0 /* _7 */, &*out, &*err, &*txtpos, &*state, &*id, &*constrs, &_8, &_9);
3231932518 _IGNORE_(_9);
@@ -32329,18 +32528,12 @@
3232932528 string$dest(&_10);
3233032529 }
3233132530 {
32332- struct string _11; memset(&_11, 0, sizeof(struct string));
32531+ bool _11; memset(&_11, 0, sizeof(bool));
3233332532 {
32334- nonempty_to_string(&_11, &*id);
32533+ idpart(&_11, &*id);
3233532534 }
32336- bool _12; memset(&_12, 0, sizeof(bool));
32337- {
32338- const struct string *_13 = &(*id).rest;
32339- idpart(&_12, &*_13);
32340- }
32341- DataPrints(0 /* _10 */, &*out, &*err, &*txtpos, &*state, &_11, &*constrs, &_12);
32342- _IGNORE_(_12);
32343- string$dest(&_11);
32535+ DataPrints(0 /* _10 */, &*out, &*err, &*txtpos, &*state, &*constrs, &_11);
32536+ _IGNORE_(_11);
3234432537 }
3234532538 {
3234632539 struct string _12; memset(&_12, 0, sizeof(struct string));
@@ -32360,8 +32553,7 @@
3236032553 {
3236132554 bool _15; memset(&_15, 0, sizeof(bool));
3236232555 {
32363- const struct string *_16 = &(*id).rest;
32364- idpart(&_15, &*_16);
32556+ idpart(&_15, &*id);
3236532557 }
3236632558 DataCompares(0 /* _14 */, &*out, &*err, &*txtpos, &*state, &*id, &*constrs, &_15);
3236732559 _IGNORE_(_15);
@@ -32481,7 +32673,7 @@
3248132673 _IGNORE_(_3);
3248232674 }
3248332675 {
32484- push(0 /* _3 */, &*elems, &_ti, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 6266);
32676+ push(0 /* _3 */, &*elems, &_ti, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 6292);
3248532677 }
3248632678 {
3248732679 uint64_t _5; memset(&_5, 0, sizeof(uint64_t));
@@ -32620,12 +32812,7 @@
3262032812 }
3262132813 {
3262232814 const struct StreamOut *_11 = &(*streams).out;
32623- struct string _12; memset(&_12, 0, sizeof(struct string));
32624- {
32625- nonempty_to_string(&_12, &_id);
32626- }
32627- EmitStructDecl(0 /* _10 */, &*_11, &_12);
32628- string$dest(&_12);
32815+ EmitStructDecl(0 /* _10 */, &*_11, &_id);
3262932816 }
3263032817 {
3263132818 const struct StreamOut *_12 = &(*streams).out;
@@ -32713,7 +32900,7 @@
3271332900 }
3271432901 }
3271532902 {
32716- push(0 /* _10 */, &*constrs, &_c, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 6320);
32903+ push(0 /* _10 */, &*constrs, &_c, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 6346);
3271732904 }
3271832905 bool _12;
3271932906 {
@@ -32929,7 +33116,7 @@
3292933116 }
3293033117 }
3293133118
32932-void EmitSwitchHead$(void *const _0, const struct Streams *const streams, const struct type_pure *const retype, const struct string *const name, const uint64_t *const casenr, const struct stack/*qtypepure*/ *const parids, struct scopepath *const sp)
33119+void EmitSwitchHead$(void *const _0, const struct Streams *const streams, const struct type_pure *const retype, const struct nonempty_string *const name, const uint64_t *const casenr, const struct stack/*qtypepure*/ *const parids, struct scopepath *const sp)
3293333120 {
3293433121 {
3293533122 {
@@ -32941,7 +33128,12 @@
3294133128 }
3294233129 {
3294333130 const struct StreamOut *_3 = &(*streams).out;
32944- PutStr(0 /* _2 */, &*_3, &*name);
33131+ struct string _4; memset(&_4, 0, sizeof(struct string));
33132+ {
33133+ nonempty_to_string(&_4, &*name);
33134+ }
33135+ PutStr(0 /* _2 */, &*_3, &_4);
33136+ string$dest(&_4);
3294533137 }
3294633138 {
3294733139 const struct StreamOut *_4 = &(*streams).out;
@@ -32960,12 +33152,17 @@
3296033152 }
3296133153 }
3296233154
32963-void EmitGenericCallId$(void *const _0, const struct Streams *const streams, const struct string *const name, const uint64_t *const casenr, const struct stack/*qtypepureid*/ *const parids)
33155+void EmitGenericCallId$(void *const _0, const struct Streams *const streams, const struct nonempty_string *const name, const uint64_t *const casenr, const struct stack/*qtypepureid*/ *const parids)
3296433156 {
3296533157 {
3296633158 {
3296733159 const struct StreamOut *_2 = &(*streams).out;
32968- PutStr(0 /* _1 */, &*_2, &*name);
33160+ struct string _3; memset(&_3, 0, sizeof(struct string));
33161+ {
33162+ nonempty_to_string(&_3, &*name);
33163+ }
33164+ PutStr(0 /* _1 */, &*_2, &_3);
33165+ string$dest(&_3);
3296933166 }
3297033167 {
3297133168 const struct StreamOut *_3 = &(*streams).out;
@@ -33011,7 +33208,7 @@
3301133208 qtypepureid(&_4, &*id, &_5);
3301233209 nonempty_string$dest(&_5);
3301333210 }
33014- push(0 /* _3 */, &_qtpis, &_4, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 6421);
33211+ push(0 /* _3 */, &_qtpis, &_4, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 6447);
3301533212 qtypepureid$dest(&_4);
3301633213 }
3301733214 }
@@ -33041,7 +33238,7 @@
3304133238 qtypepureid(&_4, &_5, &*_6);
3304233239 qtypepure$dest(&_5);
3304333240 }
33044- push(0 /* _3 */, &_qtpis, &_4, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 6432);
33241+ push(0 /* _3 */, &_qtpis, &_4, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 6458);
3304533242 qtypepureid$dest(&_4);
3304633243 }
3304733244 }
@@ -33249,8 +33446,8 @@
3324933446 free$(&_0->qts, sizeof(struct qtypepure), (void (*)(void *))qtypepure$dest);
3325033447 }
3325133448
33252-void ParseMatch$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, const struct stack/*structdef*/ *const structs, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct qtypepureid *const par, const uint64_t *const casenr, const struct typepureid *const ti, const struct stack/*qtypepureid*/ *const parids, struct stack/*string*/ *const usedids, struct stack/*ReducedId*/ *const reduced_ids);
33253-void ParseMatchStruct$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, const struct stack/*structdef*/ *const structs, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct qtypepureid *const par, const uint64_t *const casenr, const struct typepureid *const ti, struct stack/*string*/ *const usedids, const struct stack/*typepureid*/ *const elems, struct stack/*ReducedId*/ *const reduced_ids)
33449+void ParseMatch$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, const struct stack/*structdef*/ *const structs, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct qtypepureid *const par, const uint64_t *const casenr, const struct typepureid *const ti, const struct stack/*qtypepureid*/ *const parids, struct stack/*nonempty_string*/ *const usedids, struct stack/*ReducedId*/ *const reduced_ids);
33450+void ParseMatchStruct$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, const struct stack/*structdef*/ *const structs, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct qtypepureid *const par, const uint64_t *const casenr, const struct typepureid *const ti, struct stack/*nonempty_string*/ *const usedids, const struct stack/*typepureid*/ *const elems, struct stack/*ReducedId*/ *const reduced_ids)
3325433451 {
3325533452 {
3325633453 bool _first; memset(&_first, 0, sizeof(bool));
@@ -33443,7 +33640,7 @@
3344333640 ReducedId(&_19, &*_20, &_21);
3344433641 string$dest(&_21);
3344533642 }
33446- push(0 /* _18 */, &*reduced_ids, &_19, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest, (void (*)(void *, const void *))ReducedId$copy, 6474);
33643+ push(0 /* _18 */, &*reduced_ids, &_19, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest, (void (*)(void *, const void *))ReducedId$copy, 6500);
3344733644 ReducedId$dest(&_19);
3344833645 }
3344933646 }
@@ -33461,7 +33658,7 @@
3346133658 }
3346233659 }
3346333660
33464-void ParseMatch$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, const struct stack/*structdef*/ *const structs, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct qtypepureid *const par, const uint64_t *const casenr, const struct typepureid *const ti, const struct stack/*qtypepureid*/ *const parids, struct stack/*string*/ *const usedids, struct stack/*ReducedId*/ *const reduced_ids)
33661+void ParseMatch$(void *const _0, const struct Streams *const streams, struct linecol *const txtpos, const struct stack/*structdef*/ *const structs, const uint64_t *const level, struct scopepath *const sp, uint64_t *const tmpnr, const struct qtypepureid *const par, const uint64_t *const casenr, const struct typepureid *const ti, const struct stack/*qtypepureid*/ *const parids, struct stack/*nonempty_string*/ *const usedids, struct stack/*ReducedId*/ *const reduced_ids)
3346533662 {
3346633663 {
3346733664 bool _2;
@@ -33481,17 +33678,22 @@
3348133678 }
3348233679 bool _redef; memset(&_redef, 0, sizeof(bool));
3348333680 _redef = 0;
33484- const struct stack/*string*/ *_3 = &(*usedids);
33681+ const struct stack/*nonempty_string*/ *_3 = &(*usedids);
3348533682 for(uint64_t _4 = 0; _4 < (*_3).fill; ++_4)
3348633683 {
33487- struct string *usedid = &((struct string *)((*_3).data))[_4];
33684+ struct nonempty_string *usedid = &((struct nonempty_string *)((*_3).data))[_4];
3348833685 bool _6;
3348933686 {
3349033687 struct string _7; memset(&_7, 0, sizeof(struct string));
3349133688 {
33492- nonempty_to_string(&_7, &_parid);
33689+ nonempty_to_string(&_7, &*usedid);
3349333690 }
33494- strequ(&_6, &*usedid, &_7);
33691+ struct string _8; memset(&_8, 0, sizeof(struct string));
33692+ {
33693+ nonempty_to_string(&_8, &_parid);
33694+ }
33695+ strequ(&_6, &_7, &_8);
33696+ string$dest(&_8);
3349533697 string$dest(&_7);
3349633698 }
3349733699 if(_6)
@@ -33532,12 +33734,7 @@
3353233734 }
3353333735 }
3353433736 {
33535- struct string _8; memset(&_8, 0, sizeof(struct string));
33536- {
33537- nonempty_to_string(&_8, &_parid);
33538- }
33539- push(0 /* _7 */, &*usedids, &_8, sizeof(struct string), (void (*)(void *))string$dest, (void (*)(void *, const void *))string$copy, 6506);
33540- string$dest(&_8);
33737+ push(0 /* _7 */, &*usedids, &_parid, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest, (void (*)(void *, const void *))nonempty_string$copy, 6532);
3354133738 }
3354233739 struct qtypepureid _qti; memset(&_qti, 0, sizeof(struct qtypepureid));
3354333740 {
@@ -33627,7 +33824,7 @@
3362733824 ReducedId(&_18, &*_19, &_20);
3362833825 string$dest(&_20);
3362933826 }
33630- push(0 /* _17 */, &*reduced_ids, &_18, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest, (void (*)(void *, const void *))ReducedId$copy, 6516);
33827+ push(0 /* _17 */, &*reduced_ids, &_18, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest, (void (*)(void *, const void *))ReducedId$copy, 6542);
3363133828 ReducedId$dest(&_18);
3363233829 }
3363333830 }
@@ -33638,7 +33835,7 @@
3363833835 {
3363933836 varinit(&_17, &_qti);
3364033837 }
33641- push(0 /* _15 */, &*_16, &_17, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 6520);
33838+ push(0 /* _15 */, &*_16, &_17, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 6546);
3364233839 var$dest(&_17);
3364333840 }
3364433841 free$(&_redids, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest);
@@ -33935,13 +34132,8 @@
3393534132 _IGNORE_(_31);
3393634133 }
3393734134 {
33938- struct string _31; memset(&_31, 0, sizeof(struct string));
33939- {
33940- const struct nonempty_string *_32 = &(*ti).id;
33941- nonempty_to_string(&_31, &*_32);
33942- }
33943- EmitGenericCallId$(0 /* _30 */, &*streams, &_31, &_previous_case, &*parids);
33944- string$dest(&_31);
34135+ const struct nonempty_string *_31 = &(*ti).id;
34136+ EmitGenericCallId$(0 /* _30 */, &*streams, &*_31, &_previous_case, &*parids);
3394534137 }
3394634138 {
3394734139 const struct StreamOut *_32 = &(*streams).out;
@@ -33984,7 +34176,7 @@
3398434176 struct typepureid _elem; memset(&_elem, 0, sizeof(struct typepureid));
3398534177 {
3398634178 const struct stack/*typepureid*/ *_35 = &(*f).elems;
33987- at_get$(&_elem, &*_35, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 6582);
34179+ at_get$(&_elem, &*_35, &*idx, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 6608);
3398834180 }
3398934181 {
3399034182 struct qtypepureid _35; memset(&_35, 0, sizeof(struct qtypepureid));
@@ -34064,7 +34256,7 @@
3406434256 struct stack/*qtypepureid*/ _43; memset(&_43, 0, sizeof(struct stack/*qtypepureid*/));
3406534257 struct stack/*qtypepureid*/ *parids = &_43;
3406634258 {
34067- push(0 /* _44 */, &*parids, &*elem, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 6587);
34259+ push(0 /* _44 */, &*parids, &*elem, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 6613);
3406834260 }
3406934261 {
3407034262 ParseMatch$(0 /* _45 */, &*streams, &*txtpos, &*structs, &*level, &*sp, &*tmpnr, &*elem, &*casenr, &*ti, &*parids, &*usedids, &*reduced_ids);
@@ -34223,13 +34415,8 @@
3422334415 _IGNORE_(_33);
3422434416 }
3422534417 {
34226- struct string _33; memset(&_33, 0, sizeof(struct string));
34227- {
34228- const struct nonempty_string *_34 = &(*ti).id;
34229- nonempty_to_string(&_33, &*_34);
34230- }
34231- EmitGenericCallId$(0 /* _32 */, &*streams, &_33, &_previous_case, &*parids);
34232- string$dest(&_33);
34418+ const struct nonempty_string *_33 = &(*ti).id;
34419+ EmitGenericCallId$(0 /* _32 */, &*streams, &*_33, &_previous_case, &*parids);
3423334420 }
3423434421 {
3423534422 const struct StreamOut *_34 = &(*streams).out;
@@ -34272,7 +34459,7 @@
3427234459 struct constr _constr; memset(&_constr, 0, sizeof(struct constr));
3427334460 {
3427434461 const struct stack/*constr*/ *_37 = &(*f).constrs;
34275- at_get$(&_constr, &*_37, &*idx, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 6613);
34462+ at_get$(&_constr, &*_37, &*idx, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 6639);
3427634463 }
3427734464 struct qtypepureid _sub; memset(&_sub, 0, sizeof(struct qtypepureid));
3427834465 {
@@ -34363,7 +34550,7 @@
3436334550 ReducedId(&_45, &*_46, &_47);
3436434551 string$dest(&_47);
3436534552 }
34366- push(0 /* _44 */, &*reduced_ids, &_45, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest, (void (*)(void *, const void *))ReducedId$copy, 6616);
34553+ push(0 /* _44 */, &*reduced_ids, &_45, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest, (void (*)(void *, const void *))ReducedId$copy, 6642);
3436734554 ReducedId$dest(&_45);
3436834555 }
3436934556 struct stack/*typepureid*/ _elems; memset(&_elems, 0, sizeof(struct stack/*typepureid*/));
@@ -34449,15 +34636,20 @@
3444934636 case 2: // void container_opt:
3445034637 {
3445134638 {
34452- struct string _constrid; memset(&_constrid, 0, sizeof(struct string));
34639+ struct nonempty_string _constrid; memset(&_constrid, 0, sizeof(struct nonempty_string));
3445334640 {
34454- ParseId$(&_constrid, &*streams, &*txtpos, &*level);
34641+ ParseIdNonEmpty$(&_constrid, &*streams, &*txtpos, &*level);
3445534642 }
3445634643 bool _15;
3445734644 {
3445834645 struct string _16; memset(&_16, 0, sizeof(struct string));
34459- init$fromliteral(&_16, "empty", 5);
34460- strequ(&_15, &_constrid, &_16);
34646+ {
34647+ nonempty_to_string(&_16, &_constrid);
34648+ }
34649+ struct string _17; memset(&_17, 0, sizeof(struct string));
34650+ init$fromliteral(&_17, "empty", 5);
34651+ strequ(&_15, &_16, &_17);
34652+ string$dest(&_17);
3446134653 string$dest(&_16);
3446234654 }
3446334655 if(_15)
@@ -34530,13 +34722,8 @@
3453034722 _IGNORE_(_24);
3453134723 }
3453234724 {
34533- struct string _24; memset(&_24, 0, sizeof(struct string));
34534- {
34535- const struct nonempty_string *_25 = &(*ti).id;
34536- nonempty_to_string(&_24, &*_25);
34537- }
34538- EmitGenericCallId$(0 /* _23 */, &*streams, &_24, &_previous_case, &*parids);
34539- string$dest(&_24);
34725+ const struct nonempty_string *_24 = &(*ti).id;
34726+ EmitGenericCallId$(0 /* _23 */, &*streams, &*_24, &_previous_case, &*parids);
3454034727 }
3454134728 {
3454234729 const struct StreamOut *_25 = &(*streams).out;
@@ -34582,8 +34769,13 @@
3458234769 bool _16;
3458334770 {
3458434771 struct string _17; memset(&_17, 0, sizeof(struct string));
34585- init$fromliteral(&_17, "solid", 5);
34586- strequ(&_16, &_constrid, &_17);
34772+ {
34773+ nonempty_to_string(&_17, &_constrid);
34774+ }
34775+ struct string _18; memset(&_18, 0, sizeof(struct string));
34776+ init$fromliteral(&_18, "solid", 5);
34777+ strequ(&_16, &_17, &_18);
34778+ string$dest(&_18);
3458734779 string$dest(&_17);
3458834780 }
3458934781 if(_16)
@@ -34656,13 +34848,8 @@
3465634848 _IGNORE_(_25);
3465734849 }
3465834850 {
34659- struct string _25; memset(&_25, 0, sizeof(struct string));
34660- {
34661- const struct nonempty_string *_26 = &(*ti).id;
34662- nonempty_to_string(&_25, &*_26);
34663- }
34664- EmitGenericCallId$(0 /* _24 */, &*streams, &_25, &_previous_case, &*parids);
34665- string$dest(&_25);
34851+ const struct nonempty_string *_25 = &(*ti).id;
34852+ EmitGenericCallId$(0 /* _24 */, &*streams, &*_25, &_previous_case, &*parids);
3466634853 }
3466734854 {
3466834855 const struct StreamOut *_26 = &(*streams).out;
@@ -34774,7 +34961,7 @@
3477434961 struct stack/*qtypepureid*/ _35; memset(&_35, 0, sizeof(struct stack/*qtypepureid*/));
3477534962 struct stack/*qtypepureid*/ *parids = &_35;
3477634963 {
34777- push(0 /* _36 */, &*parids, &_elem, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 6662);
34964+ push(0 /* _36 */, &*parids, &_elem, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 6688);
3477834965 }
3477934966 {
3478034967 struct ReducedId _38; memset(&_38, 0, sizeof(struct ReducedId));
@@ -34788,7 +34975,7 @@
3478834975 ReducedId(&_38, &*_39, &_40);
3478934976 string$dest(&_40);
3479034977 }
34791- push(0 /* _37 */, &*reduced_ids, &_38, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest, (void (*)(void *, const void *))ReducedId$copy, 6663);
34978+ push(0 /* _37 */, &*reduced_ids, &_38, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest, (void (*)(void *, const void *))ReducedId$copy, 6689);
3479234979 ReducedId$dest(&_38);
3479334980 }
3479434981 {
@@ -34809,7 +34996,12 @@
3480934996 }
3481034997 {
3481134998 const struct StreamOut *_19 = &(*streams).err;
34812- PutStr(0 /* _18 */, &*_19, &_constrid);
34999+ struct string _20; memset(&_20, 0, sizeof(struct string));
35000+ {
35001+ nonempty_to_string(&_20, &_constrid);
35002+ }
35003+ PutStr(0 /* _18 */, &*_19, &_20);
35004+ string$dest(&_20);
3481335005 }
3481435006 {
3481535007 const struct StreamOut *_20 = &(*streams).err;
@@ -34817,7 +35009,7 @@
3481735009 }
3481835010 }
3481935011 }
34820- string$dest(&_constrid);
35012+ nonempty_string$dest(&_constrid);
3482135013 }
3482235014 break;
3482335015 }
@@ -34970,13 +35162,8 @@
3497035162 _IGNORE_(_18);
3497135163 }
3497235164 {
34973- struct string _18; memset(&_18, 0, sizeof(struct string));
34974- {
34975- const struct nonempty_string *_19 = &(*ti).id;
34976- nonempty_to_string(&_18, &*_19);
34977- }
34978- EmitGenericCallId$(0 /* _17 */, &*streams, &_18, &_previous_case, &*parids);
34979- string$dest(&_18);
35165+ const struct nonempty_string *_18 = &(*ti).id;
35166+ EmitGenericCallId$(0 /* _17 */, &*streams, &*_18, &_previous_case, &*parids);
3498035167 }
3498135168 {
3498235169 const struct StreamOut *_19 = &(*streams).out;
@@ -35067,7 +35254,7 @@
3506735254 {
3506835255 struct stack/*par*/ _2; memset(&_2, 0, sizeof(struct stack/*par*/));
3506935256 {
35070- stack(&_2, sizeof(struct par), (void (*)(void *))par$dest, (void (*)(void *, const void *))par$copy, 6714);
35257+ stack(&_2, sizeof(struct par), (void (*)(void *))par$dest, (void (*)(void *, const void *))par$copy, 6740);
3507135258 }
3507235259 pscope(&_1, &_2);
3507335260 free$(&_2, sizeof(struct par), (void (*)(void *))par$dest);
@@ -35074,13 +35261,13 @@
3507435261 }
3507535262 struct stack/*vscope*/ _2; memset(&_2, 0, sizeof(struct stack/*vscope*/));
3507635263 {
35077- stack(&_2, sizeof(struct vscope), (void (*)(void *))vscope$dest, (void (*)(void *, const void *))vscope$copy, 6714);
35264+ stack(&_2, sizeof(struct vscope), (void (*)(void *))vscope$dest, (void (*)(void *, const void *))vscope$copy, 6740);
3507835265 }
3507935266 struct vscope _3; memset(&_3, 0, sizeof(struct vscope));
3508035267 {
3508135268 struct stack/*var*/ _4; memset(&_4, 0, sizeof(struct stack/*var*/));
3508235269 {
35083- stack(&_4, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 6714);
35270+ stack(&_4, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 6740);
3508435271 }
3508535272 vscope(&_3, &_4);
3508635273 free$(&_4, sizeof(struct var), (void (*)(void *))var$dest);
@@ -35186,7 +35373,7 @@
3518635373 {
3518735374 struct stack/*flavour*/ _8; memset(&_8, 0, sizeof(struct stack/*flavour*/));
3518835375 {
35189- /*UNION*/ empty(&_8, sizeof(struct flavour), (void (*)(void *))flavour$dest, (void (*)(void *, const void *))flavour$copy, 6745);
35376+ /*UNION*/ empty(&_8, sizeof(struct flavour), (void (*)(void *))flavour$dest, (void (*)(void *, const void *))flavour$copy, 6771);
3519035377 }
3519135378 bool _9; memset(&_9, 0, sizeof(bool));
3519235379 _9 = 0;
@@ -35196,7 +35383,7 @@
3519635383 }
3519735384 {
3519835385 struct stack/*structdef*/ *_9 = &(*state).structs;
35199- push(0 /* _8 */, &*_9, &_strdecl, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 6746);
35386+ push(0 /* _8 */, &*_9, &_strdecl, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 6772);
3520035387 }
3520135388 {
3520235389 const struct StreamOut *_10 = &(*streams).out;
@@ -35374,7 +35561,7 @@
3537435561 {
3537535562 struct stack/*flavour*/ _9; memset(&_9, 0, sizeof(struct stack/*flavour*/));
3537635563 {
35377- /*STRUCT*/ empty(&_9, sizeof(struct flavour), (void (*)(void *))flavour$dest, (void (*)(void *, const void *))flavour$copy, 6794);
35564+ /*STRUCT*/ empty(&_9, sizeof(struct flavour), (void (*)(void *))flavour$dest, (void (*)(void *, const void *))flavour$copy, 6820);
3537835565 }
3537935566 bool _10; memset(&_10, 0, sizeof(bool));
3538035567 _10 = 0;
@@ -35384,7 +35571,7 @@
3538435571 }
3538535572 {
3538635573 struct stack/*structdef*/ *_10 = &(*state).structs;
35387- push(0 /* _9 */, &*_10, &_strdecl, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 6795);
35574+ push(0 /* _9 */, &*_10, &_strdecl, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 6821);
3538835575 }
3538935576 {
3539035577 const struct StreamOut *_11 = &(*streams).err;
@@ -35562,7 +35749,7 @@
3556235749 {
3556335750 struct stack/*flavour*/ _8; memset(&_8, 0, sizeof(struct stack/*flavour*/));
3556435751 {
35565- /*STRUCT*/ empty(&_8, sizeof(struct flavour), (void (*)(void *))flavour$dest, (void (*)(void *, const void *))flavour$copy, 6843);
35752+ /*STRUCT*/ empty(&_8, sizeof(struct flavour), (void (*)(void *))flavour$dest, (void (*)(void *, const void *))flavour$copy, 6869);
3556635753 }
3556735754 bool _9; memset(&_9, 0, sizeof(bool));
3556835755 _9 = 0;
@@ -35572,7 +35759,7 @@
3557235759 }
3557335760 {
3557435761 struct stack/*structdef*/ *_9 = &(*state).structs;
35575- push(0 /* _8 */, &*_9, &_strdecl, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 6844);
35762+ push(0 /* _8 */, &*_9, &_strdecl, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 6870);
3557635763 }
3557735764 {
3557835765 const struct StreamOut *_10 = &(*streams).out;
@@ -35732,27 +35919,26 @@
3573235919 nonempty_string$dest(&_11);
3573335920 _IGNORE_(_9);
3573435921 }
35735- struct string _parid; memset(&_parid, 0, sizeof(struct string));
35922+ struct stack/*nonempty_string*/ _parid; memset(&_parid, 0, sizeof(struct stack/*nonempty_string*/));
3573635923 {
35737- uint64_t _9; memset(&_9, 0, sizeof(uint64_t));
35738- _9 = 0;
35739- /*level*/ ParseId$(&_parid, &*streams, &*txtpos, &_9);
35740- _IGNORE_(_9);
35924+ struct string _9; memset(&_9, 0, sizeof(struct string));
35925+ {
35926+ uint64_t _10; memset(&_10, 0, sizeof(uint64_t));
35927+ _10 = 0;
35928+ /*level*/ ParseId$(&_9, &*streams, &*txtpos, &_10);
35929+ _IGNORE_(_10);
35930+ }
35931+ to_nonempty_string(&_parid, &_9);
35932+ string$dest(&_9);
3574135933 }
3574235934 struct fnpars _9; memset(&_9, 0, sizeof(struct fnpars));
35743- bool _10;
35935+ const struct stack/*nonempty_string*/ *_10 = &(_parid);
35936+ if(!(*_10).size)
3574435937 {
35745- struct string _11; memset(&_11, 0, sizeof(struct string));
35746- init$fromliteral(&_11, "", 0);
35747- strequ(&_10, &_parid, &_11);
35748- string$dest(&_11);
35749- }
35750- if(_10)
35751- {
3575235938 {
3575335939 struct stack/*qtypepure*/ _parids; memset(&_parids, 0, sizeof(struct stack/*qtypepure*/));
3575435940 {
35755- push(0 /* _11 */, &_parids, &_parqt, sizeof(struct qtypepure), (void (*)(void *))qtypepure$dest, (void (*)(void *, const void *))qtypepure$copy, 6878);
35941+ push(0 /* _11 */, &_parids, &_parqt, sizeof(struct qtypepure), (void (*)(void *))qtypepure$dest, (void (*)(void *, const void *))qtypepure$copy, 6905);
3575635942 }
3575735943 while(1)
3575835944 {
@@ -35799,7 +35985,7 @@
3579935985 _IGNORE_(_15);
3580035986 }
3580135987 {
35802- push(0 /* _15 */, &_parids, &_par, sizeof(struct qtypepure), (void (*)(void *))qtypepure$dest, (void (*)(void *, const void *))qtypepure$copy, 6884);
35988+ push(0 /* _15 */, &_parids, &_par, sizeof(struct qtypepure), (void (*)(void *))qtypepure$dest, (void (*)(void *, const void *))qtypepure$copy, 6911);
3580335989 }
3580435990 qtypepure$dest(&_par);
3580535991 }
@@ -35830,161 +36016,142 @@
3583036016 }
3583136017 else
3583236018 {
36019+ const struct nonempty_string *parid = (*_10).data;
3583336020 {
3583436021 {
35835- struct string _11; memset(&_11, 0, sizeof(struct string));
35836- string$copy(&_11, &(_parid));
35837- struct string *parid = &_11;
36022+ const struct StreamOut *_12 = &(*streams).out;
36023+ struct string _13; memset(&_13, 0, sizeof(struct string));
36024+ init$fromliteral(&_13, "void ", 5);
36025+ PutStr(0 /* _11 */, &*_12, &_13);
36026+ string$dest(&_13);
36027+ }
36028+ {
36029+ const struct StreamOut *_13 = &(*streams).out;
36030+ struct string _14; memset(&_14, 0, sizeof(struct string));
3583836031 {
35839- struct nonempty_string _12; memset(&_12, 0, sizeof(struct nonempty_string));
36032+ nonempty_to_string(&_14, &_id);
36033+ }
36034+ PutStr(0 /* _12 */, &*_13, &_14);
36035+ string$dest(&_14);
36036+ }
36037+ {
36038+ const struct StreamOut *_14 = &(*streams).out;
36039+ uint8_t _15; memset(&_15, 0, sizeof(uint8_t));
36040+ _15 = 40;
36041+ Put(0 /* _13 */, &*_14, &_15);
36042+ _IGNORE_(_15);
36043+ }
36044+ {
36045+ const struct StreamOut *_15 = &(*streams).out;
36046+ PrTypePure(0 /* _14 */, &*_15, &_retype);
36047+ }
36048+ {
36049+ const struct StreamOut *_16 = &(*streams).out;
36050+ struct string _17; memset(&_17, 0, sizeof(struct string));
36051+ init$fromliteral(&_17, " *const ", 8);
36052+ PutStr(0 /* _15 */, &*_16, &_17);
36053+ string$dest(&_17);
36054+ }
36055+ {
36056+ const struct StreamOut *_17 = &(*streams).out;
36057+ struct string _18; memset(&_18, 0, sizeof(struct string));
36058+ {
36059+ struct nonempty_string _19; memset(&_19, 0, sizeof(struct nonempty_string));
3584036060 {
35841- uint8_t _13; memset(&_13, 0, sizeof(uint8_t));
35842- {
35843- struct stack/*u8*/ *_14 = &(*parid).data;
35844- pop$(&_13, &*_14, sizeof(uint8_t), 0/*DEST*/, 0/*COPY*/, 6898);
35845- }
35846- nonempty_string(&_12, &_13, &*parid);
35847- _IGNORE_(_13);
36061+ resid(&_19);
3584836062 }
35849- const struct nonempty_string *parid = &_12;
36063+ nonempty_to_string(&_18, &_19);
36064+ nonempty_string$dest(&_19);
36065+ }
36066+ PutStr(0 /* _16 */, &*_17, &_18);
36067+ string$dest(&_18);
36068+ }
36069+ struct stack/*qtypepureid*/ _parids; memset(&_parids, 0, sizeof(struct stack/*qtypepureid*/));
36070+ {
36071+ struct qtypepureid _18; memset(&_18, 0, sizeof(struct qtypepureid));
36072+ {
36073+ qtypepureid(&_18, &_parqt, &*parid);
36074+ }
36075+ push(0 /* _17 */, &_parids, &_18, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 6932);
36076+ qtypepureid$dest(&_18);
36077+ }
36078+ while(1)
36079+ {
36080+ bool _18;
36081+ {
36082+ uint64_t _19; memset(&_19, 0, sizeof(uint64_t));
36083+ _19 = 0;
36084+ /*level*/ uint8_t _20; memset(&_20, 0, sizeof(uint8_t));
36085+ _20 = 44;
36086+ MatchOptional$(&_18, &*streams, &*txtpos, &_19, &_20);
36087+ _IGNORE_(_20);
36088+ _IGNORE_(_19);
36089+ }
36090+ if(!_18) break;
36091+ {
36092+ bool _20;
3585036093 {
35851- const struct StreamOut *_14 = &(*streams).out;
35852- struct string _15; memset(&_15, 0, sizeof(struct string));
35853- init$fromliteral(&_15, "void ", 5);
35854- PutStr(0 /* _13 */, &*_14, &_15);
35855- string$dest(&_15);
35856- }
35857- {
35858- const struct StreamOut *_15 = &(*streams).out;
35859- struct string _16; memset(&_16, 0, sizeof(struct string));
36094+ uint8_t _21; memset(&_21, 0, sizeof(uint8_t));
3586036095 {
35861- nonempty_to_string(&_16, &_id);
36096+ uint64_t _22; memset(&_22, 0, sizeof(uint64_t));
36097+ _22 = 0;
36098+ /*level*/ SkipCommentPeek$(&_21, &*streams, &*txtpos, &_22);
36099+ _IGNORE_(_22);
3586236100 }
35863- PutStr(0 /* _14 */, &*_15, &_16);
35864- string$dest(&_16);
36101+ isalph(&_20, &_21);
36102+ _IGNORE_(_21);
3586536103 }
36104+ if(_20)
3586636105 {
35867- const struct StreamOut *_16 = &(*streams).out;
35868- uint8_t _17; memset(&_17, 0, sizeof(uint8_t));
35869- _17 = 40;
35870- Put(0 /* _15 */, &*_16, &_17);
35871- _IGNORE_(_17);
35872- }
35873- {
35874- const struct StreamOut *_17 = &(*streams).out;
35875- PrTypePure(0 /* _16 */, &*_17, &_retype);
35876- }
35877- {
35878- const struct StreamOut *_18 = &(*streams).out;
35879- struct string _19; memset(&_19, 0, sizeof(struct string));
35880- init$fromliteral(&_19, " *const ", 8);
35881- PutStr(0 /* _17 */, &*_18, &_19);
35882- string$dest(&_19);
35883- }
35884- {
35885- const struct StreamOut *_19 = &(*streams).out;
35886- struct string _20; memset(&_20, 0, sizeof(struct string));
36106+ struct qtypepureid _par; memset(&_par, 0, sizeof(struct qtypepureid));
3588736107 {
35888- struct nonempty_string _21; memset(&_21, 0, sizeof(struct nonempty_string));
36108+ uint64_t _21; memset(&_21, 0, sizeof(uint64_t));
36109+ _21 = 0;
36110+ /*level*/ struct stack/*structdef*/ *_22 = &(*state).structs;
36111+ struct nonempty_string _23; memset(&_23, 0, sizeof(struct nonempty_string));
3588936112 {
35890- resid(&_21);
36113+ uint64_t _24; memset(&_24, 0, sizeof(uint64_t));
36114+ _24 = 0;
36115+ /*level*/ ParseIdNonEmpty$(&_23, &*streams, &*txtpos, &_24);
36116+ _IGNORE_(_24);
3589136117 }
35892- nonempty_to_string(&_20, &_21);
35893- nonempty_string$dest(&_21);
36118+ ParseQTPI$(&_par, &*streams, &*txtpos, &_21, &*_22, &_23);
36119+ nonempty_string$dest(&_23);
36120+ _IGNORE_(_21);
3589436121 }
35895- PutStr(0 /* _18 */, &*_19, &_20);
35896- string$dest(&_20);
35897- }
35898- struct stack/*qtypepureid*/ _parids; memset(&_parids, 0, sizeof(struct stack/*qtypepureid*/));
35899- {
35900- struct qtypepureid _20; memset(&_20, 0, sizeof(struct qtypepureid));
3590136122 {
35902- qtypepureid(&_20, &_parqt, &*parid);
36123+ push(0 /* _21 */, &_parids, &_par, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 6939);
3590336124 }
35904- push(0 /* _19 */, &_parids, &_20, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 6908);
35905- qtypepureid$dest(&_20);
36125+ qtypepureid$dest(&_par);
3590636126 }
35907- while(1)
36127+ else
3590836128 {
35909- bool _20;
3591036129 {
35911- uint64_t _21; memset(&_21, 0, sizeof(uint64_t));
35912- _21 = 0;
35913- /*level*/ uint8_t _22; memset(&_22, 0, sizeof(uint8_t));
35914- _22 = 44;
35915- MatchOptional$(&_20, &*streams, &*txtpos, &_21, &_22);
35916- _IGNORE_(_22);
35917- _IGNORE_(_21);
36130+ const struct StreamOut *_22 = &(*streams).err;
36131+ struct string _23; memset(&_23, 0, sizeof(struct string));
36132+ init$fromliteral(&_23, "MISSING PARAMETER", 17);
36133+ PutStr(0 /* _21 */, &*_22, &_23);
36134+ string$dest(&_23);
3591836135 }
35919- if(!_20) break;
3592036136 {
35921- bool _22;
35922- {
35923- uint8_t _23; memset(&_23, 0, sizeof(uint8_t));
35924- {
35925- uint64_t _24; memset(&_24, 0, sizeof(uint64_t));
35926- _24 = 0;
35927- /*level*/ SkipCommentPeek$(&_23, &*streams, &*txtpos, &_24);
35928- _IGNORE_(_24);
35929- }
35930- isalph(&_22, &_23);
35931- _IGNORE_(_23);
35932- }
35933- if(_22)
35934- {
35935- struct qtypepureid _par; memset(&_par, 0, sizeof(struct qtypepureid));
35936- {
35937- uint64_t _23; memset(&_23, 0, sizeof(uint64_t));
35938- _23 = 0;
35939- /*level*/ struct stack/*structdef*/ *_24 = &(*state).structs;
35940- struct nonempty_string _25; memset(&_25, 0, sizeof(struct nonempty_string));
35941- {
35942- uint64_t _26; memset(&_26, 0, sizeof(uint64_t));
35943- _26 = 0;
35944- /*level*/ ParseIdNonEmpty$(&_25, &*streams, &*txtpos, &_26);
35945- _IGNORE_(_26);
35946- }
35947- ParseQTPI$(&_par, &*streams, &*txtpos, &_23, &*_24, &_25);
35948- nonempty_string$dest(&_25);
35949- _IGNORE_(_23);
35950- }
35951- {
35952- push(0 /* _23 */, &_parids, &_par, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 6915);
35953- }
35954- qtypepureid$dest(&_par);
35955- }
35956- else
35957- {
35958- {
35959- const struct StreamOut *_24 = &(*streams).err;
35960- struct string _25; memset(&_25, 0, sizeof(struct string));
35961- init$fromliteral(&_25, "MISSING PARAMETER", 17);
35962- PutStr(0 /* _23 */, &*_24, &_25);
35963- string$dest(&_25);
35964- }
35965- {
35966- const struct StreamOut *_25 = &(*streams).err;
35967- Fail$(0 /* _24 */, &*_25, &*txtpos);
35968- }
35969- }
36137+ const struct StreamOut *_23 = &(*streams).err;
36138+ Fail$(0 /* _22 */, &*_23, &*txtpos);
3597036139 }
3597136140 }
35972- struct fnpars _21; memset(&_21, 0, sizeof(struct fnpars));
35973- {
35974- fnpartypeids(&_21, &_parids);
35975- }
35976- fnpars$copy(&_9, &_21);
35977- fnpars$dest(&_21);
35978- free$(&_parids, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
35979- nonempty_string$dest(&_12);
35980- }
35981- string$dest(&_11);
3598236141 }
36142+ }
36143+ struct fnpars _19; memset(&_19, 0, sizeof(struct fnpars));
36144+ {
36145+ fnpartypeids(&_19, &_parids);
36146+ }
36147+ fnpars$copy(&_9, &_19);
36148+ fnpars$dest(&_19);
36149+ free$(&_parids, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
3598336150 }
3598436151 }
3598536152 fnpars$copy(&_7, &_9);
3598636153 fnpars$dest(&_9);
35987- string$dest(&_parid);
36154+ free$(&_parid, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest);
3598836155 qtypepure$dest(&_parqt);
3598936156 }
3599036157 }
@@ -36043,7 +36210,7 @@
3604336210 {
3604436211 struct stack/*qtypepureid*/ _16; memset(&_16, 0, sizeof(struct stack/*qtypepureid*/));
3604536212 {
36046- stack(&_16, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 6937);
36213+ stack(&_16, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 6961);
3604736214 }
3604836215 fnpartypeids(&_15, &_16);
3604936216 free$(&_16, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
@@ -36154,7 +36321,7 @@
3615436321 {
3615536322 struct stack/*qtypepureid*/ _14; memset(&_14, 0, sizeof(struct stack/*qtypepureid*/));
3615636323 {
36157- stack(&_14, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 6953);
36324+ stack(&_14, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 6977);
3615836325 }
3615936326 fnpartypeids(&_13, &_14);
3616036327 free$(&_14, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
@@ -36198,7 +36365,7 @@
3619836365 qtype(&_14, &*_15, &_16);
3619936366 type$dest(&_16);
3620036367 }
36201- push(0 /* _13 */, &_pars, &_14, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 6965);
36368+ push(0 /* _13 */, &_pars, &_14, sizeof(struct qtype), (void (*)(void *))qtype$dest, (void (*)(void *, const void *))qtype$copy, 6989);
3620236369 qtype$dest(&_14);
3620336370 }
3620436371 }
@@ -36205,12 +36372,7 @@
3620536372 struct stack/*def*/ _cur; memset(&_cur, 0, sizeof(struct stack/*def*/));
3620636373 {
3620736374 struct stack/*def*/ *_13 = &(*state).defs;
36208- struct string _14; memset(&_14, 0, sizeof(struct string));
36209- {
36210- nonempty_to_string(&_14, &_id);
36211- }
36212- findFnDef(&_cur, &*_13, &_14);
36213- string$dest(&_14);
36375+ findFnDef(&_cur, &*_13, &_id);
3621436376 }
3621536377 const struct stack/*def*/ *_13 = &(_cur);
3621636378 if(!(*_13).size)
@@ -36502,7 +36664,7 @@
3650236664 {
3650336665 struct stack/*par*/ _15; memset(&_15, 0, sizeof(struct stack/*par*/));
3650436666 {
36505- stack(&_15, sizeof(struct par), (void (*)(void *))par$dest, (void (*)(void *, const void *))par$copy, 7026);
36667+ stack(&_15, sizeof(struct par), (void (*)(void *))par$dest, (void (*)(void *, const void *))par$copy, 7050);
3650636668 }
3650736669 pscope(&_14, &_15);
3650836670 free$(&_15, sizeof(struct par), (void (*)(void *))par$dest);
@@ -36509,13 +36671,13 @@
3650936671 }
3651036672 struct stack/*vscope*/ _15; memset(&_15, 0, sizeof(struct stack/*vscope*/));
3651136673 {
36512- stack(&_15, sizeof(struct vscope), (void (*)(void *))vscope$dest, (void (*)(void *, const void *))vscope$copy, 7026);
36674+ stack(&_15, sizeof(struct vscope), (void (*)(void *))vscope$dest, (void (*)(void *, const void *))vscope$copy, 7050);
3651336675 }
3651436676 struct vscope _16; memset(&_16, 0, sizeof(struct vscope));
3651536677 {
3651636678 struct stack/*var*/ _17; memset(&_17, 0, sizeof(struct stack/*var*/));
3651736679 {
36518- stack(&_17, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 7026);
36680+ stack(&_17, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 7050);
3651936681 }
3652036682 vscope(&_16, &_17);
3652136683 free$(&_17, sizeof(struct var), (void (*)(void *))var$dest);
@@ -36527,13 +36689,8 @@
3652736689 }
3652836690 struct scopepath *sp = &_13;
3652936691 {
36530- struct string _15; memset(&_15, 0, sizeof(struct string));
36531- {
36532- nonempty_to_string(&_15, &_id);
36533- }
36534- const struct stack/*qtypepure*/ *_16 = &(*ps).qts;
36535- EmitSwitchHead$(0 /* _14 */, &*streams, &_retype, &_15, &_casenr, &*_16, &*sp);
36536- string$dest(&_15);
36692+ const struct stack/*qtypepure*/ *_15 = &(*ps).qts;
36693+ EmitSwitchHead$(0 /* _14 */, &*streams, &_retype, &_id, &_casenr, &*_15, &*sp);
3653736694 }
3653836695 {
3653936696 const struct StreamOut *_16 = &(*streams).out;
@@ -36552,7 +36709,7 @@
3655236709 bool _first; memset(&_first, 0, sizeof(bool));
3655336710 _first = 1;
3655436711 struct stack/*ReducedId*/ _reduced_ids; memset(&_reduced_ids, 0, sizeof(struct stack/*ReducedId*/));
36555- struct stack/*string*/ _usedids; memset(&_usedids, 0, sizeof(struct stack/*string*/));
36712+ struct stack/*nonempty_string*/ _usedids; memset(&_usedids, 0, sizeof(struct stack/*nonempty_string*/));
3655636713 uint64_t _tmpnr; memset(&_tmpnr, 0, sizeof(uint64_t));
3655736714 {
3655836715 size(&_tmpnr, &_parids);
@@ -36632,8 +36789,7 @@
3663236789 struct requires_totality _totality; memset(&_totality, 0, sizeof(struct requires_totality));
3663336790 bool _24;
3663436791 {
36635- struct string *_25 = &(_id).rest;
36636- idpart(&_24, &*_25);
36792+ idpart(&_24, &_id);
3663736793 }
3663836794 if(_24)
3663936795 {
@@ -36667,12 +36823,7 @@
3666736823 qtypepure$dest(&_26);
3666836824 }
3666936825 {
36670- struct string _27; memset(&_27, 0, sizeof(struct string));
36671- {
36672- nonempty_to_string(&_27, &_id);
36673- }
36674- ParseExpr2$(0 /* _26 */, &*streams, &*txtpos, &*state, &_level, &*sp, &*tmpnr, &_store, &_totality, &_action, &_27, &_reduced_ids);
36675- string$dest(&_27);
36826+ ParseExpr2$(0 /* _26 */, &*streams, &*txtpos, &*state, &_level, &*sp, &*tmpnr, &_store, &_totality, &_action, &_id, &_reduced_ids);
3667636827 }
3667736828 qtypepureid$dest(&_store);
3667836829 }
@@ -36725,7 +36876,7 @@
3672536876 _more = 0;
3672636877 }
3672736878 _IGNORE_(_tmpnr);
36728- free$(&_usedids, sizeof(struct string), (void (*)(void *))string$dest);
36879+ free$(&_usedids, sizeof(struct nonempty_string), (void (*)(void *))nonempty_string$dest);
3672936880 free$(&_reduced_ids, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest);
3673036881 _IGNORE_(_first);
3673136882 scopepath$dest(&_13);
@@ -36790,20 +36941,15 @@
3679036941 _IGNORE_(_20);
3679136942 }
3679236943 {
36793- struct string _20; memset(&_20, 0, sizeof(struct string));
36944+ uint64_t _20; memset(&_20, 0, sizeof(uint64_t));
3679436945 {
36795- nonempty_to_string(&_20, &_id);
36946+ uint64_t _21; memset(&_21, 0, sizeof(uint64_t));
36947+ _21 = 1;
36948+ _20 = _casenr - _21;
36949+ _IGNORE_(_21);
3679636950 }
36797- uint64_t _21; memset(&_21, 0, sizeof(uint64_t));
36798- {
36799- uint64_t _22; memset(&_22, 0, sizeof(uint64_t));
36800- _22 = 1;
36801- _21 = _casenr - _22;
36802- _IGNORE_(_22);
36803- }
36804- EmitGenericCallId$(0 /* _19 */, &*streams, &_20, &_21, &_parids);
36805- _IGNORE_(_21);
36806- string$dest(&_20);
36951+ EmitGenericCallId$(0 /* _19 */, &*streams, &_id, &_20, &_parids);
36952+ _IGNORE_(_20);
3680736953 }
3680836954 {
3680936955 const struct StreamOut *_21 = &(*streams).out;
@@ -36882,12 +37028,7 @@
3688237028 struct stack/*def*/ _cur; memset(&_cur, 0, sizeof(struct stack/*def*/));
3688337029 {
3688437030 struct stack/*def*/ *_14 = &(*state).defs;
36885- struct string _15; memset(&_15, 0, sizeof(struct string));
36886- {
36887- nonempty_to_string(&_15, &_id);
36888- }
36889- findFnDef(&_cur, &*_14, &_15);
36890- string$dest(&_15);
37031+ findFnDef(&_cur, &*_14, &_id);
3689137032 }
3689237033 const struct stack/*def*/ *_14 = &(_cur);
3689337034 if(!(*_14).size)
@@ -37140,8 +37281,7 @@
3714037281 {
3714137282 bool _21; memset(&_21, 0, sizeof(bool));
3714237283 {
37143- struct string *_22 = &(_id).rest;
37144- idpart(&_21, &*_22);
37284+ idpart(&_21, &_id);
3714537285 }
3714637286 not(&_20, &_21);
3714737287 _IGNORE_(_21);
@@ -37237,8 +37377,7 @@
3723737377 {
3723837378 bool _23;
3723937379 {
37240- struct string *_24 = &(_id).rest;
37241- idpart(&_23, &*_24);
37380+ idpart(&_23, &_id);
3724237381 }
3724337382 if(_23)
3724437383 {
@@ -37501,7 +37640,7 @@
3750137640 varinit(&_56, &_57);
3750237641 qtypepureid$dest(&_57);
3750337642 }
37504- push(0 /* _54 */, &*_55, &_56, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 7211);
37643+ push(0 /* _54 */, &*_55, &_56, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 7235);
3750537644 var$dest(&_56);
3750637645 }
3750737646 {
@@ -37591,7 +37730,7 @@
3759137730 varinit(&_67, &_68);
3759237731 qtypepureid$dest(&_68);
3759337732 }
37594- push(0 /* _65 */, &*_66, &_67, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 7219);
37733+ push(0 /* _65 */, &*_66, &_67, sizeof(struct var), (void (*)(void *))var$dest, (void (*)(void *, const void *))var$copy, 7243);
3759537734 var$dest(&_67);
3759637735 }
3759737736 {
@@ -37658,17 +37797,12 @@
3765837797 qtypepure$dest(&_28);
3765937798 }
3766037799 {
37661- struct string _29; memset(&_29, 0, sizeof(struct string));
37800+ struct stack/*ReducedId*/ _29; memset(&_29, 0, sizeof(struct stack/*ReducedId*/));
3766237801 {
37663- nonempty_to_string(&_29, &_id);
37802+ stack(&_29, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest, (void (*)(void *, const void *))ReducedId$copy, 7251);
3766437803 }
37665- struct stack/*ReducedId*/ _30; memset(&_30, 0, sizeof(struct stack/*ReducedId*/));
37666- {
37667- stack(&_30, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest, (void (*)(void *, const void *))ReducedId$copy, 7227);
37668- }
37669- ParseExpr2$(0 /* _28 */, &*streams, &*txtpos, &*state, &_level, &_sp, &_tmpnr, &_store, &_totality, &_action, &_29, &_30);
37670- free$(&_30, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest);
37671- string$dest(&_29);
37804+ ParseExpr2$(0 /* _28 */, &*streams, &*txtpos, &*state, &_level, &_sp, &_tmpnr, &_store, &_totality, &_action, &_id, &_29);
37805+ free$(&_29, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest);
3767237806 }
3767337807 {
3767437808 uint8_t _30; memset(&_30, 0, sizeof(uint8_t));
@@ -37707,20 +37841,15 @@
3770737841 qtypepureid(&_30, &_31, &*_32);
3770837842 qtypepure$dest(&_31);
3770937843 }
37710- solid(&_29, &_30, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 7233);
37844+ solid(&_29, &_30, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest, (void (*)(void *, const void *))qtypepureid$copy, 7257);
3771137845 qtypepureid$dest(&_30);
3771237846 }
37713- struct string _30; memset(&_30, 0, sizeof(struct string));
37847+ struct stack/*ReducedId*/ _30; memset(&_30, 0, sizeof(struct stack/*ReducedId*/));
3771437848 {
37715- nonempty_to_string(&_30, &_id);
37849+ stack(&_30, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest, (void (*)(void *, const void *))ReducedId$copy, 7257);
3771637850 }
37717- struct stack/*ReducedId*/ _31; memset(&_31, 0, sizeof(struct stack/*ReducedId*/));
37718- {
37719- stack(&_31, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest, (void (*)(void *, const void *))ReducedId$copy, 7233);
37720- }
37721- ParseBlock$(0 /* _28 */, &*streams, &*txtpos, &*state, &_level, &_sp, &_tmpnr, &_29, &_totality, &_action, &_30, &_31);
37722- free$(&_31, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest);
37723- string$dest(&_30);
37851+ ParseBlock$(0 /* _28 */, &*streams, &*txtpos, &*state, &_level, &_sp, &_tmpnr, &_29, &_totality, &_action, &_id, &_30);
37852+ free$(&_30, sizeof(struct ReducedId), (void (*)(void *))ReducedId$dest);
3772437853 free$(&_29, sizeof(struct qtypepureid), (void (*)(void *))qtypepureid$dest);
3772537854 }
3772637855 var$dest(&_zero);
@@ -38069,11 +38198,11 @@
3806938198 {
3807038199 struct stack/*def*/ _1; memset(&_1, 0, sizeof(struct stack/*def*/));
3807138200 {
38072- stack(&_1, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 7324);
38201+ stack(&_1, sizeof(struct def), (void (*)(void *))def$dest, (void (*)(void *, const void *))def$copy, 7348);
3807338202 }
3807438203 struct stack/*structdef*/ _2; memset(&_2, 0, sizeof(struct stack/*structdef*/));
3807538204 {
38076- stack(&_2, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 7324);
38205+ stack(&_2, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 7348);
3807738206 }
3807838207 state(&_state, &_1, &_2);
3807938208 free$(&_2, sizeof(struct structdef), (void (*)(void *))structdef$dest);
@@ -38578,7 +38707,7 @@
3857838707 nonempty_string$dest(&_5);
3857938708 type_pure$dest(&_4);
3858038709 }
38581- push(0 /* _2 */, &_elems, &_3, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 7792);
38710+ push(0 /* _2 */, &_elems, &_3, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 7816);
3858238711 typepureid$dest(&_3);
3858338712 }
3858438713 {
@@ -38623,7 +38752,7 @@
3862338752 }
3862438753 struct stack/*typepureid*/ _7; memset(&_7, 0, sizeof(struct stack/*typepureid*/));
3862538754 {
38626- stack(&_7, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 7797);
38755+ stack(&_7, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 7821);
3862738756 }
3862838757 constr(&_4, &_5, &_6, &_7);
3862938758 free$(&_7, sizeof(struct typepureid), (void (*)(void *))typepureid$dest);
@@ -38630,7 +38759,7 @@
3863038759 nonempty_string$dest(&_6);
3863138760 type_pure$dest(&_5);
3863238761 }
38633- push(0 /* _3 */, &_constrs, &_4, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 7797);
38762+ push(0 /* _3 */, &_constrs, &_4, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 7821);
3863438763 constr$dest(&_4);
3863538764 }
3863638765 {
@@ -38652,7 +38781,7 @@
3865238781 }
3865338782 struct stack/*typepureid*/ _8; memset(&_8, 0, sizeof(struct stack/*typepureid*/));
3865438783 {
38655- stack(&_8, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 7798);
38784+ stack(&_8, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 7822);
3865638785 }
3865738786 constr(&_5, &_6, &_7, &_8);
3865838787 free$(&_8, sizeof(struct typepureid), (void (*)(void *))typepureid$dest);
@@ -38659,7 +38788,7 @@
3865938788 nonempty_string$dest(&_7);
3866038789 type_pure$dest(&_6);
3866138790 }
38662- push(0 /* _4 */, &_constrs, &_5, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 7798);
38791+ push(0 /* _4 */, &_constrs, &_5, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 7822);
3866338792 constr$dest(&_5);
3866438793 }
3866538794 {
@@ -38681,7 +38810,7 @@
3868138810 }
3868238811 struct stack/*typepureid*/ _9; memset(&_9, 0, sizeof(struct stack/*typepureid*/));
3868338812 {
38684- stack(&_9, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 7799);
38813+ stack(&_9, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 7823);
3868538814 }
3868638815 constr(&_6, &_7, &_8, &_9);
3868738816 free$(&_9, sizeof(struct typepureid), (void (*)(void *))typepureid$dest);
@@ -38688,7 +38817,7 @@
3868838817 nonempty_string$dest(&_8);
3868938818 type_pure$dest(&_7);
3869038819 }
38691- push(0 /* _5 */, &_constrs, &_6, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 7799);
38820+ push(0 /* _5 */, &_constrs, &_6, sizeof(struct constr), (void (*)(void *))constr$dest, (void (*)(void *, const void *))constr$copy, 7823);
3869238821 constr$dest(&_6);
3869338822 }
3869438823 {
@@ -43708,7 +43837,7 @@
4370843837 nonempty_string$dest(&_66);
4370943838 type_pure$dest(&_65);
4371043839 }
43711- push(0 /* _63 */, &_elems, &_64, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 8589);
43840+ push(0 /* _63 */, &_elems, &_64, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 8613);
4371243841 typepureid$dest(&_64);
4371343842 }
4371443843 {
@@ -43732,7 +43861,7 @@
4373243861 nonempty_string$dest(&_67);
4373343862 type_pure$dest(&_66);
4373443863 }
43735- push(0 /* _64 */, &_elems, &_65, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 8590);
43864+ push(0 /* _64 */, &_elems, &_65, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 8614);
4373643865 typepureid$dest(&_65);
4373743866 }
4373843867 {
@@ -43756,7 +43885,7 @@
4375643885 nonempty_string$dest(&_68);
4375743886 type_pure$dest(&_67);
4375843887 }
43759- push(0 /* _65 */, &_elems, &_66, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 8591);
43888+ push(0 /* _65 */, &_elems, &_66, sizeof(struct typepureid), (void (*)(void *))typepureid$dest, (void (*)(void *, const void *))typepureid$copy, 8615);
4376043889 typepureid$dest(&_66);
4376143890 }
4376243891 {
@@ -43781,7 +43910,7 @@
4378143910 nonempty_string$dest(&_70);
4378243911 flavour$dest(&_69);
4378343912 }
43784- push(0 /* _66 */, &*_67, &_68, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 8592);
43913+ push(0 /* _66 */, &*_67, &_68, sizeof(struct structdef), (void (*)(void *))structdef$dest, (void (*)(void *, const void *))structdef$copy, 8616);
4378543914 structdef$dest(&_68);
4378643915 }
4378743916 free$(&_elems, sizeof(struct typepureid), (void (*)(void *))typepureid$dest);
--- trunk/pragmatic/compiler.source.c (revision 413)
+++ trunk/pragmatic/compiler.source.c (revision 414)
@@ -59,6 +59,16 @@
5959 string rest;
6060 }
6161
62+opt<nonempty_string> to_nonempty_string(string s)
63+{
64+ let mut string s = s;
65+ let opt<u8> t = pop_opt<u8>(s.data);
66+ result
67+ switch t
68+ case empty: empty<nonempty_string>()
69+ case solid: solid<nonempty_string>(nonempty_string(t, s))
70+}
71+
6272 string nonempty_to_string(nonempty_string name)
6373 {
6474 let mut string tmp = name.rest;
@@ -318,12 +328,12 @@
318328 u8 strtop$(string s) = if gtr<u64>(size<u8>(s.data), 0) then top_get$<u8>(s.data) else '?';
319329
320330 // delete first char
321-string predel$(string s)
322-{
323- let mut string t = s;
324- let _ = pop$<u8>(t.data);
325- result t
326-}
331+//string predel$(string s)
332+//{
333+// let mut string t = s;
334+// let _ = pop$<u8>(t.data);
335+// result t
336+//}
327337
328338 // look for trailing $
329339 bool idpartinternal(stack<u8> id, bool previous) =
@@ -333,8 +343,8 @@
333343 previous;
334344
335345 // look for trailing $
336-bool idpart(string id) =
337- idpartinternal(id.data, 0);
346+bool idpart(nonempty_string id) =
347+ idpartinternal(id.rest.data, 0);
338348
339349 enum proof_of_totality { totality_unverified; totality_verified; }
340350
@@ -373,14 +383,14 @@
373383 ParseNrInternal$(in, err, txtpos, 0);
374384
375385 // insert byte at beginning of id
376-string preapp(u8 top, string id)
377-{
378- let mut string new = id;
379- push<u8>(new.data, top);
386+//string preapp(u8 top, string id)
387+//{
388+// let mut string new = id;
389+// push<u8>(new.data, top);
390+//
391+// result new
392+//}
380393
381- result new
382-}
383-
384394 // parse rest of id, allow digits$
385395 string ParseIE$(StreamIn in, mut linecol txtpos) =
386396 if
@@ -1027,41 +1037,41 @@
10271037 DATA { stack<constr> constrs; };
10281038 }
10291039
1030-opt<u64> getDataConstrIdx(stack<constr> constrs, string id) =
1031- reduce constrs to rest constr:
1032- (
1033- if strequ(nonempty_to_string(constr.id), id) then
1034- solid<u64>(size<constr>(rest))
1035- else
1036- getDataConstrIdx(rest, id)
1037- )
1038- term : empty<u64>();
1040+//opt<u64> getDataConstrIdx(stack<constr> constrs, string id) =
1041+// reduce constrs to rest constr:
1042+// (
1043+// if strequ(nonempty_to_string(constr.id), id) then
1044+// solid<u64>(size<constr>(rest))
1045+// else
1046+// getDataConstrIdx(rest, id)
1047+// )
1048+// term : empty<u64>();
10391049
1040-opt<constr> getDataConstr(stack<constr> constrs, string id) =
1041- reduce constrs to rest constr:
1042- (
1043- if strequ(nonempty_to_string(constr.id), id) then
1044- solid<constr>(constr)
1045- else
1046- getDataConstr(rest, id)
1047- )
1048- term : empty<constr>();
1050+//opt<constr> getDataConstr(stack<constr> constrs, string id) =
1051+// reduce constrs to rest constr:
1052+// (
1053+// if strequ(nonempty_to_string(constr.id), id) then
1054+// solid<constr>(constr)
1055+// else
1056+// getDataConstr(rest, id)
1057+// )
1058+// term : empty<constr>();
10491059
1050-struct constrwithidx
1051-{
1052- constr constr;
1053- u64 idx;
1054-}
1060+//struct constrwithidx
1061+//{
1062+// constr constr;
1063+// u64 idx;
1064+//}
10551065
1056-opt<constrwithidx> getDataConstrWithIdx(stack<constr> constrs, string id) =
1057- reduce constrs to rest constr:
1058- (
1059- if strequ(nonempty_to_string(constr.id), id) then
1060- solid<constrwithidx>(constrwithidx(constr, size<constr>(rest)))
1061- else
1062- getDataConstrWithIdx(rest, id)
1063- )
1064- term : empty<constrwithidx>();
1066+//opt<constrwithidx> getDataConstrWithIdx(stack<constr> constrs, string id) =
1067+// reduce constrs to rest constr:
1068+// (
1069+// if strequ(nonempty_to_string(constr.id), id) then
1070+// solid<constrwithidx>(constrwithidx(constr, size<constr>(rest)))
1071+// else
1072+// getDataConstrWithIdx(rest, id)
1073+// )
1074+// term : empty<constrwithidx>();
10651075
10661076 struct structdef
10671077 {
@@ -2107,10 +2117,10 @@
21072117
21082118 nonempty_string resid() = nonempty_string('_', "0");
21092119
2110-bool istmp$(string id) = and(equ<u8>('_', strtop$(id)), isdigi(strtop$(predel$(id))));
2120+bool istmp$(nonempty_string id) = and(equ<u8>('_', id.top), isdigi(strtop$(id.rest)));
21112121
21122122 // report error if types don't allow to = from
2113-unit ChkPar$(StreamOut err, linecol txtpos, qtypepure par, nonempty_string id, qtypepureid arg)
2123+unit ChkPar$(StreamOut err, linecol txtpos, qtypepure par, nonempty_string ID, qtypepureid arg)
21142124 {
21152125 // Ignore constness for assignment to temporary (e.g. _1, _2, ...)
21162126 // Ignore constness for assignment to result (empty string "")
@@ -2119,13 +2129,13 @@
21192129 // since we use REFERENCES that would cause loss of constness!
21202130 // (evaluate if it's OK for temporaries - otherwise generate all const?)
21212131 // Results on the other hand MUST be mutable always to be useful.
2122- if not(if or(istmp$(nonempty_to_string(id)), strequ(preapp('*', nonempty_to_string(resid())), nonempty_to_string(id))) then typepureequ(par.type, arg.qt.type) else chkpar(par, arg.qt)) then
2132+ if not(if or(istmp$(ID), strequ(nonempty_to_string(nonempty_string('*', nonempty_to_string(resid()))), nonempty_to_string(ID))) then typepureequ(par.type, arg.qt.type) else chkpar(par, arg.qt)) then
21232133 {
21242134 PutStr(err, "cannot assign parameter ");
21252135 EPrQTP(err, par);
21262136
21272137 PutStr(err, " ");
2128- PutStr(err, nonempty_to_string(id));
2138+ PutStr(err, nonempty_to_string(ID));
21292139
21302140 PutStr(err, " from argument ");
21312141 EPrQTPI(err, arg);
@@ -2291,10 +2301,10 @@
22912301 // mark variable hidden
22922302 var varhide(nonempty_string id, linecol txtpos) = var(id, xar_hidden(txtpos));
22932303
2294-bool find_var_report_unused_and_mark_used(stack<mut var> vscope, string id) =
2304+bool find_var_report_unused_and_mark_used(stack<mut var> vscope, nonempty_string id) =
22952305 reduce vscope to rest found:
22962306 //if is_equ(cmp<nonempty_string>(found.qti.id, id)) then
2297- if strequ(nonempty_to_string(found.id), id) then
2307+ if strequ(nonempty_to_string(found.id), nonempty_to_string(id)) then
22982308 {
22992309 let mut xar vi = found.vi;
23002310 result
@@ -2316,10 +2326,10 @@
23162326 find_var_report_unused_and_mark_used(rest, id)
23172327 term: 0; // NOTE: if variable does not exist it can't be unused!
23182328
2319-opt<qtypepureid> FindParAndMarkUsed$(StreamOut err, linecol txtpos, stack<mut par> pscope, string id) =
2329+opt<qtypepureid> FindParAndMarkUsed$(StreamOut err, linecol txtpos, stack<mut par> pscope, nonempty_string id) =
23202330 reduce pscope to rest found:
23212331 (
2322- if strequ(nonempty_to_string(found.id), preapp('*', id)) then
2332+ if is_equ(cmp<nonempty_string>(found.id, nonempty_string('*', nonempty_to_string(id)))) then
23232333 {
23242334 let mut xar pi = found.pi;
23252335
@@ -2328,7 +2338,7 @@
23282338 case xar_hidden:
23292339 {
23302340 PutStr(err, "Parameter ");
2331- PutStr(err, id);
2341+ PutStr(err, nonempty_to_string(id));
23322342 PutStr(err, " is inaccessible from ");
23332343 PrLoc(err, pi.txtpos);
23342344 PutStr(err, ", accessed here");
@@ -2347,10 +2357,10 @@
23472357 )
23482358 term: empty<qtypepureid>();
23492359
2350-opt<qtypepureid> FindVarAndMarkUsed$(StreamOut err, linecol txtpos, stack<mut var> vscope, string id) =
2360+opt<qtypepureid> FindVarAndMarkUsed$(StreamOut err, linecol txtpos, stack<mut var> vscope, nonempty_string id) =
23512361 reduce vscope to rest found:
23522362 (
2353- if strequ(nonempty_to_string(found.id), preapp('_', id)) then
2363+ if is_equ(cmp<nonempty_string>(found.id, nonempty_string('_', nonempty_to_string(id)))) then
23542364 {
23552365 let mut xar vi = found.vi;
23562366
@@ -2359,7 +2369,7 @@
23592369 case xar_hidden:
23602370 {
23612371 PutStr(err, "Variable ");
2362- PutStr(err, id);
2372+ PutStr(err, nonempty_to_string(id));
23632373 PutStr(err, " is inaccessible from ");
23642374 PrLoc(err, vi.txtpos);
23652375 PutStr(err, ", accessed here");
@@ -2373,7 +2383,7 @@
23732383 result solid<qtypepureid>(qtypepureid(vi.qt, found.id))
23742384 }
23752385 }
2376- else if strequ(nonempty_to_string(found.id), preapp('*', id)) then
2386+ else if is_equ(cmp<nonempty_string>(found.id, nonempty_string('*', nonempty_to_string(id)))) then
23772387 {
23782388 let mut xar vi = found.vi;
23792389
@@ -2382,7 +2392,7 @@
23822392 case xar_hidden:
23832393 {
23842394 PutStr(err, "Variable ");
2385- PutStr(err, id);
2395+ PutStr(err, nonempty_to_string(id));
23862396 PutStr(err, " is inaccessible from ");
23872397 PrLoc(err, vi.txtpos);
23882398 PutStr(err, ", accessed here");
@@ -2401,12 +2411,12 @@
24012411 )
24022412 term: empty<qtypepureid>();
24032413
2404-bool exists_var(stack<mut var> vscope, string id) =
2414+bool exists_var(stack<mut var> vscope, nonempty_string id) =
24052415 reduce vscope to rest found:
24062416 (
2407- if strequ(nonempty_to_string(found.id), preapp('_', id)) then
2417+ if is_equ(cmp<nonempty_string>(found.id, nonempty_string('_', nonempty_to_string(id)))) then
24082418 1
2409- else if strequ(nonempty_to_string(found.id), preapp('*', id)) then
2419+ else if is_equ(cmp<nonempty_string>(found.id, nonempty_string('*', nonempty_to_string(id)))) then
24102420 1
24112421 else
24122422 exists_var(rest, id)
@@ -2453,7 +2463,7 @@
24532463 };
24542464 }
24552465
2456-opt<qtypepureid> ScopesFindVarAndMarkUsed$(StreamOut err, linecol txtpos, stack<mut vscope> scopes, string id) =
2466+opt<qtypepureid> ScopesFindVarAndMarkUsed$(StreamOut err, linecol txtpos, stack<mut vscope> scopes, nonempty_string id) =
24572467 reduce scopes to rest found:
24582468 {
24592469 let opt<qtypepureid> v = FindVarAndMarkUsed$(err, txtpos, found.elems, id);
@@ -2492,10 +2502,10 @@
24922502 sp.current = pop$<vscope>(sp.elems);
24932503 }
24942504
2495-opt<qtypepureid> ScopePathFindParAndMarkUsed$(StreamOut err, linecol txtpos, mut scopepath sp, string id) =
2505+opt<qtypepureid> ScopePathFindParAndMarkUsed$(StreamOut err, linecol txtpos, mut scopepath sp, nonempty_string id) =
24962506 FindParAndMarkUsed$(err, txtpos, sp.base.elems, id);
24972507
2498-opt<qtypepureid> ScopePathFindVarAndMarkUsed$(StreamOut err, linecol txtpos, mut scopepath sp, string id)
2508+opt<qtypepureid> ScopePathFindVarAndMarkUsed$(StreamOut err, linecol txtpos, mut scopepath sp, nonempty_string id)
24992509 {
25002510 let opt<qtypepureid> found = FindVarAndMarkUsed$(err, txtpos, sp.current.elems, id);
25012511 result
@@ -2506,12 +2516,22 @@
25062516
25072517 opt<qtypepureid> ScopePathFindParOrVarAndMarkUsed$(StreamOut err, linecol txtpos, mut scopepath sp, string id)
25082518 {
2509- // NOTE: mind order - variables could shadow parameters but never the other way round (so process variables first, then parameters)
2510- let opt<qtypepureid> found = ScopePathFindVarAndMarkUsed$(err, txtpos, sp, id);
2519+ let opt<nonempty_string> id = to_nonempty_string(id);
25112520 result
2512- switch found
2513- case empty: ScopePathFindParAndMarkUsed$(err, txtpos, sp, id)
2514- case solid: solid<qtypepureid>(found)
2521+ switch id
2522+ case empty:
2523+ (
2524+ empty<qtypepureid>()
2525+ )
2526+ case solid:
2527+ {
2528+ // NOTE: mind order - variables could shadow parameters but never the other way round (so process variables first, then parameters)
2529+ let opt<qtypepureid> found = ScopePathFindVarAndMarkUsed$(err, txtpos, sp, id);
2530+ result
2531+ switch found
2532+ case empty: ScopePathFindParAndMarkUsed$(err, txtpos, sp, id)
2533+ case solid: solid<qtypepureid>(found)
2534+ }
25152535 }
25162536
25172537 //opt<par> check_par_used(stack<par> pars) =
@@ -2617,18 +2637,18 @@
26172637 }
26182638
26192639 // output stack from base
2620-unit Climb(StreamOut out, StreamOut err, linecol txtpos, stack<string> argids)
2640+unit Climb(StreamOut out, StreamOut err, linecol txtpos, stack<nonempty_string> argids)
26212641 {
26222642 reduce argids to rest argid:
26232643 {
26242644 Climb(out, err, txtpos, rest);
26252645
2626- PutStr(out, ", &"); PutStr(out, argid);
2646+ PutStr(out, ", &"); PutStr(out, nonempty_to_string(argid));
26272647 };
26282648 }
26292649
26302650 // Emit call
2631-unit DoCall(StreamOut out, StreamOut err, linecol txtpos, stack<string> argids, qtypepureid store)
2651+unit DoCall(StreamOut out, StreamOut err, linecol txtpos, stack<nonempty_string> argids, qtypepureid store)
26322652 {
26332653 if ispureunit(store.qt.type) then
26342654 {
@@ -2656,8 +2676,8 @@
26562676 bool used;
26572677 }
26582678
2659-def definit(focus focus, type re, nonempty_string id, fnstat fnstat, stack<qtype> pars) = def(focus, re, idpart(id.rest), id, fnstat, pars, 0);
2660-def defused(focus focus, type re, nonempty_string id, fnstat fnstat, stack<qtype> pars) = def(focus, re, idpart(id.rest), id, fnstat, pars, 1);
2679+def definit(focus focus, type re, nonempty_string id, fnstat fnstat, stack<qtype> pars) = def(focus, re, idpart(id), id, fnstat, pars, 0);
2680+def defused(focus focus, type re, nonempty_string id, fnstat fnstat, stack<qtype> pars) = def(focus, re, idpart(id), id, fnstat, pars, 1);
26612681
26622682 bool any_par_contains_type_var(stack<qtype> pars) =
26632683 reduce pars to rest par:
@@ -2672,10 +2692,10 @@
26722692 bool def_contains_var(def d) =
26732693 or(type_contains_type_var(d.re), any_par_contains_type_var(d.pars));
26742694
2675-opt<def> findFnDefAndMarkUsed(stack<mut def> defs, string id) =
2695+opt<def> findFnDefAndMarkUsed(stack<mut def> defs, nonempty_string id) =
26762696 reduce defs to rest cur:
26772697 (
2678- if strequ(id, nonempty_to_string(cur.id)) then
2698+ if is_equ(cmp<nonempty_string>(id, cur.id)) then
26792699 {
26802700 cur.used = 1;
26812701 result solid<def>(cur)
@@ -2685,10 +2705,10 @@
26852705 )
26862706 term: empty<def>();
26872707
2688-opt<def> findFnDef(stack<def> defs, string id) =
2708+opt<def> findFnDef(stack<def> defs, nonempty_string id) =
26892709 reduce defs to rest cur:
26902710 (
2691- if strequ(id, nonempty_to_string(cur.id)) then
2711+ if is_equ(cmp<nonempty_string>(id, cur.id)) then
26922712 solid<def>(cur)
26932713 else
26942714 findFnDef(rest, id)
@@ -2929,7 +2949,7 @@
29292949 Indent(out, level); PrTypePure(out, store.qt.type); PutStr(out, " "); PutStr(out, nonempty_to_string(store.id)); PutStr(out, "; memset(&"); PutStr(out, nonempty_to_string(store.id)); PutStr(out, ", 0, "); EmitSizeOfPure(out, structs, store.qt.type); PutStr(out, ");\n");
29302950 }
29312951
2932-unit AssertResultTypePure$(StreamOut err, linecol txtpos, string fn, qtypepure want, type_pure have)
2952+unit AssertResultTypePure$(StreamOut err, linecol txtpos, nonempty_string fn, qtypepure want, type_pure have)
29332953 {
29342954 if not(typepureequ(want.type, have)) then
29352955 {
@@ -2936,7 +2956,7 @@
29362956 PutStr(err, "need ");
29372957 EPrQTP(err, want);
29382958 PutStr(err, " but function ");
2939- PutStr(err, fn);
2959+ PutStr(err, nonempty_to_string(fn));
29402960 PutStr(err, " returns ");
29412961 EPrTypePure(err, have);
29422962 Fail$(err, txtpos);
@@ -2953,7 +2973,7 @@
29532973 // PutStr(err, "need ");
29542974 // EPrQTP(err, want);
29552975 // PutStr(err, " but function ");
2956-// PutStr(err, fn);
2976+// PutStr(err, nonempty_to_string(fn));
29572977 // PutStr(err, " returns CONST ");
29582978 // EPrTypePure(err, have);
29592979 // Fail$(err, txtpos);
@@ -3041,7 +3061,7 @@
30413061 result type_pure_void() // DUMMY
30423062 }
30433063 )
3044- }
3064+ }
30453065 }
30463066 else
30473067 (
@@ -3075,28 +3095,28 @@
30753095 }
30763096
30773097 // forward-decl
3078-unit ParseExpr$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut scopepath sp, mut u64 tmpnr, opt<qtypepureid> store, string id, requires_totality totality, bool action, string self, stack<ReducedId> reduced_ids);
3098+unit ParseExpr$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut scopepath sp, mut u64 tmpnr, opt<qtypepureid> store, string id, requires_totality totality, bool action, nonempty_string self, stack<ReducedId> reduced_ids);
30793099
30803100 // forward-decl
3081-unit ParseBlock$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut scopepath sp, u64 tmpnr, opt<qtypepureid> store, requires_totality totality, bool action, string self, stack<ReducedId> reduced_ids);
3101+unit ParseBlock$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut scopepath sp, u64 tmpnr, opt<qtypepureid> store, requires_totality totality, bool action, nonempty_string self, stack<ReducedId> reduced_ids);
30823102
30833103 // forward-decl
3084-unit ParseBlockRaw$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut scopepath sp, u64 tmpnr, opt<qtypepureid> store, requires_totality totality, bool action, string self, stack<ReducedId> reduced_ids);
3104+unit ParseBlockRaw$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut scopepath sp, u64 tmpnr, opt<qtypepureid> store, requires_totality totality, bool action, nonempty_string self, stack<ReducedId> reduced_ids);
30853105
30863106 // forward-decl
3087-unit ParseArg$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut scopepath sp, mut u64 tmpnr, qtypepureid store, qtypepureid par, requires_totality totality, bool action, string self, stack<ReducedId> reduced_ids, u64 parnr, def def, mut stack<string> argids, string callee, opt<type_pure> st, mut stack<idpath> ips);
3107+unit ParseArg$(Streams streams, mut linecol txtpos, mut state state, u64 level, mut scopepath sp, mut u64 tmpnr, qtypepureid store, qtypepureid par, requires_totality totality, bool action, nonempty_string self, stack<ReducedId> reduced_ids, u64 parnr, def def, mut stack<nonempty_string> argids, nonempty_string callee, opt<type_pure> st, mut stack<idpath> ips);
30883108
30893109 // NOTE: assuming function return-type has already been verified!
3090-unit ParseCallComplete$(Streams streams, mut linecol txtpos, mut state state, u64 level/*, mut scopepath sp, mut u64 tmpnr*/, def def, qtypepureid store/**//**/, requires_totality totality/*, bool action*/, string self, stack<ReducedId> reduced_ids, mut stack<string> argids, string callee, opt<type_pure> st_)
3110+unit ParseCallComplete$(Streams streams, mut linecol txtpos, mut state state, u64 level/*, mut scopepath sp, mut u64 tmpnr*/, def def, qtypepureid store/**//**/, requires_totality totality/*, bool action*/, nonempty_string self, stack<ReducedId> reduced_ids, mut stack<nonempty_string> argids, nonempty_string callee, opt<type_pure> st_)
30913111 {
3092- if lss<u64>(size<string>(argids), size<qtype>(def.pars)) then
3112+ if lss<u64>(size<nonempty_string>(argids), size<qtype>(def.pars)) then
30933113 {
30943114 PutStr(streams.err, "too few arguments to function ");
3095- PutStr(streams.err, callee);
3115+ PutStr(streams.err, nonempty_to_string(callee));
30963116 Fail$(streams.err, txtpos);
30973117 };
30983118
3099- if strequ(callee, self) then
3119+ if is_equ(cmp<nonempty_string>(callee, self)) then
31003120 {
31013121 switch totality
31023122 case totality_unrequired:
@@ -3109,7 +3129,7 @@
31093129 case totality_unverified:
31103130 {
31113131 PutStr(streams.err, "total function ");
3112- PutStr(streams.err, callee);
3132+ PutStr(streams.err, nonempty_to_string(callee));
31133133 PutStr(streams.err, " calls itself recursivly (hint: reduce parameter or declare partial), ");
31143134 PutStr(streams.err, "reduced parameters: ");
31153135 Print<stack<ReducedId>>(streams.err, reduced_ids);
@@ -3124,68 +3144,68 @@
31243144 };
31253145 };
31263146
3127- if isop1(callee) then
3147+ if isop1(nonempty_to_string(callee)) then
31283148 {
31293149 switch st_
31303150 case empty:
31313151 {
31323152 PutStr(streams.err, "missing subtype for ");
3133- PutStr(streams.err, callee);
3153+ PutStr(streams.err, nonempty_to_string(callee));
31343154 Fail$(streams.err, txtpos);
31353155 }
31363156 case solid:
31373157 {
3138- if neq<u64>(size<string>(argids), 1) then
3158+ if neq<u64>(size<nonempty_string>(argids), 1) then
31393159 {
3140- PutStr(streams.err, callee);
3160+ PutStr(streams.err, nonempty_to_string(callee));
31413161 PutStr(streams.err, " needs one argument but got ");
3142- Print<u64>(streams.err, size<string>(argids));
3162+ Print<u64>(streams.err, size<nonempty_string>(argids));
31433163 Fail$(streams.err, txtpos);
31443164 };
31453165
3146- let string arg0 = at_get$<string>(argids, 0);
3166+ let nonempty_string arg0 = at_get$<nonempty_string>(argids, 0);
31473167
31483168 if ispureprim(st_) then
31493169 {
3150- Indent(streams.out, level); PutStr(streams.out, nonempty_to_string(store.id)); PutStr(streams.out, " = "); PutStr(streams.out, to_op1(callee)); PutStr(streams.out, "("); PutStr(streams.out, arg0); PutStr(streams.out, ");\n");
3170+ Indent(streams.out, level); PutStr(streams.out, nonempty_to_string(store.id)); PutStr(streams.out, " = "); PutStr(streams.out, to_op1(nonempty_to_string(callee))); PutStr(streams.out, "("); PutStr(streams.out, nonempty_to_string(arg0)); PutStr(streams.out, ");\n");
31513171 }
31523172 else
31533173 {
3154- PutStr(streams.err, callee);
3174+ PutStr(streams.err, nonempty_to_string(callee));
31553175 PutStr(streams.err, " only implemented for primitive types");
31563176 Fail$(streams.err, txtpos);
31573177 };
31583178 };
31593179 }
3160- else if isop2(callee) then
3180+ else if isop2(nonempty_to_string(callee)) then
31613181 {
31623182 switch st_
31633183 case empty:
31643184 {
31653185 PutStr(streams.err, "missing subtype for ");
3166- PutStr(streams.err, callee);
3186+ PutStr(streams.err, nonempty_to_string(callee));
31673187 Fail$(streams.err, txtpos);
31683188 }
31693189 case solid:
31703190 {
3171- if neq<u64>(size<string>(argids), 2) then
3191+ if neq<u64>(size<nonempty_string>(argids), 2) then
31723192 {
3173- PutStr(streams.err, callee);
3193+ PutStr(streams.err, nonempty_to_string(callee));
31743194 PutStr(streams.err, " needs two arguments but got ");
3175- Print<u64>(streams.err, size<string>(argids));
3195+ Print<u64>(streams.err, size<nonempty_string>(argids));
31763196 Fail$(streams.err, txtpos);
31773197 };
31783198
3179- let string arg0 = at_get$<string>(argids, 0);
3180- let string arg1 = at_get$<string>(argids, 1);
3199+ let nonempty_string arg0 = at_get$<nonempty_string>(argids, 0);
3200+ let nonempty_string arg1 = at_get$<nonempty_string>(argids, 1);
31813201
31823202 if ispureprim(st_) then
31833203 {
3184- Indent(streams.out, level); PutStr(streams.out, nonempty_to_string(store.id)); PutStr(streams.out, " = "); PutStr(streams.out, arg0); PutStr(streams.out, " "); PutStr(streams.out, to_op2(callee)); PutStr(streams.out, " "); PutStr(streams.out, arg1); PutStr(streams.out, ";\n");
3204+ Indent(streams.out, level); PutStr(streams.out, nonempty_to_string(store.id)); PutStr(streams.out, " = "); PutStr(streams.out, nonempty_to_string(arg0)); PutStr(streams.out, " "); PutStr(streams.out, to_op2(nonempty_to_string(callee))); PutStr(streams.out, " "); PutStr(streams.out, nonempty_to_string(arg1)); PutStr(streams.out, ";\n");
31853205 }
31863206 else
31873207 {
3188- PutStr(streams.err, callee);
3208+ PutStr(streams.err, nonempty_to_string(callee));
31893209 PutStr(streams.err, " only implemented for primitive types");
31903210 Fail$(streams.err, txtpos);
31913211 };
@@ -3199,7 +3219,7 @@
31993219 if def_contains_var(def) then
32003220 {
32013221 PutStr(streams.err, "missing type-argument for ");
3202- PutStr(streams.err, callee);
3222+ PutStr(streams.err, nonempty_to_string(callee));
32033223 Fail$(streams.err, txtpos);
32043224 };
32053225 }
@@ -3210,13 +3230,13 @@
32103230 PutStr(streams.err, "superfluous type-argument ");
32113231 EPrTypePure(streams.err, st_);
32123232 PutStr(streams.err, " for ");
3213- PutStr(streams.err, callee);
3233+ PutStr(streams.err, nonempty_to_string(callee));
32143234 Fail$(streams.err, txtpos);
32153235 };
32163236 };
32173237
32183238 // use all results as arguments for function-call
3219- Indent(streams.out, level); PutStr(streams.out, callee); PutStr(streams.out, "("); DoCall(streams.out, streams.err, txtpos, argids, store);
3239+ Indent(streams.out, level); PutStr(streams.out, nonempty_to_string(callee)); PutStr(streams.out, "("); DoCall(streams.out, streams.err, txtpos, argids, store);
32203240 if
32213241 or
32223242 (
@@ -3224,11 +3244,11 @@
32243244 (
32253245 or
32263246 (
3227- strequ("stack", callee),
3247+ strequ("stack", nonempty_to_string(callee)),
32283248 or
32293249 (
3230- strequ("empty", callee),
3231- strequ("solid", callee)
3250+ strequ("empty", nonempty_to_string(callee)),
3251+ strequ("solid", nonempty_to_string(callee))
32323252 )
32333253 ),
32343254 or
@@ -3235,13 +3255,13 @@
32353255 (
32363256 or
32373257 (
3238- strequ("pop$", callee),
3239- strequ("pop_opt", callee)
3258+ strequ("pop$", nonempty_to_string(callee)),
3259+ strequ("pop_opt", nonempty_to_string(callee))
32403260 ),
32413261 or
32423262 (
3243- strequ("pop_opt_base$", callee),
3244- strequ("push", callee)
3263+ strequ("pop_opt_base$", nonempty_to_string(callee)),
3264+ strequ("push", nonempty_to_string(callee))
32453265 )
32463266 )
32473267 ),
@@ -3249,13 +3269,13 @@
32493269 (
32503270 or
32513271 (
3252- strequ("at_get$", callee),
3253- strequ("at_set$", callee)
3272+ strequ("at_get$", nonempty_to_string(callee)),
3273+ strequ("at_set$", nonempty_to_string(callee))
32543274 ),
32553275 or
32563276 (
3257- strequ("top_get$", callee),
3258- strequ("top_set$", callee)
3277+ strequ("top_get$", nonempty_to_string(callee)),
3278+ strequ("top_set$", nonempty_to_string(callee))
32593279 )
32603280 )
32613281 )
@@ -3265,7 +3285,7 @@
32653285 case empty:
32663286 {
32673287 PutStr(streams.err, "missing subtype for ");
3268- PutStr(streams.err, callee);
3288+ PutStr(streams.err, nonempty_to_string(callee));
32693289 Fail$(streams.err, txtpos);
32703290 }
32713291 case solid:
@@ -3292,13 +3312,13 @@
32923312 }
32933313 else
32943314 {
3295- if or(strequ("swap", callee), strequ("reverse", callee)) then
3315+ if or(strequ("swap", nonempty_to_string(callee)), strequ("reverse", nonempty_to_string(callee))) then
32963316 {
32973317 switch st_
32983318 case empty:
32993319 {
33003320 PutStr(streams.err, "missing subtype for ");
3301- PutStr(streams.err, callee);
3321+ PutStr(streams.err, nonempty_to_string(callee));
33023322 Fail$(streams.err, txtpos);
33033323 }
33043324 case solid:
@@ -3308,11 +3328,11 @@
33083328 };
33093329 };
33103330
3311- let u64 n = size<u8>(callee.data);
3331+ let u64 n = size<u8>(callee.rest.data);
33123332
3313- if geq<u64>(n, 3) then
3333+ if geq<u64>(n, 2) then
33143334 {
3315- if geq<u64>(n, 6) then
3335+ if geq<u64>(n, 5) then
33163336 {
33173337 if
33183338 and
@@ -3321,19 +3341,19 @@
33213341 (
33223342 and
33233343 (
3324- equ<u8>('P', at_get$<u8>(callee.data, sub<u64>(n, 1))),
3325- equ<u8>('r', at_get$<u8>(callee.data, sub<u64>(n, 2)))
3344+ equ<u8>('P', callee.top),
3345+ equ<u8>('r', at_get$<u8>(callee.rest.data, sub<u64>(n, 1)))
33263346 ),
33273347 and
33283348 (
3329- equ<u8>('i', at_get$<u8>(callee.data, sub<u64>(n, 3))),
3330- equ<u8>('n', at_get$<u8>(callee.data, sub<u64>(n, 4)))
3349+ equ<u8>('i', at_get$<u8>(callee.rest.data, sub<u64>(n, 2))),
3350+ equ<u8>('n', at_get$<u8>(callee.rest.data, sub<u64>(n, 3)))
33313351 )
33323352 ),
33333353 and
33343354 (
3335- equ<u8>('t', at_get$<u8>(callee.data, sub<u64>(n, 5))),
3336- equ<u8>('$', at_get$<u8>(callee.data, sub<u64>(n, 6)))
3355+ equ<u8>('t', at_get$<u8>(callee.rest.data, sub<u64>(n, 4))),
3356+ equ<u8>('$', at_get$<u8>(callee.rest.data, sub<u64>(n, 5)))
33373357 )
33383358 )
33393359 then
@@ -3342,7 +3362,7 @@
33423362 case empty:
33433363 {
33443364 PutStr(streams.err, "missing subtype for ");
3345- PutStr(streams.err, callee);
3365+ PutStr(streams.err, nonempty_to_string(callee));
33463366 Fail$(streams.err, txtpos);
33473367 }
33483368 case solid:
@@ -3366,10 +3386,10 @@
33663386 (
33673387 and
33683388 (
3369-

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

Show on old repository browser