commit 740f7e3a62b8d53fae9498805e75130c2912be78
parent 0b0584876c8c4155e02b809444f64272d6a7f626
Author: erai <erai@omiltem.net>
Date: Wed, 23 Apr 2025 17:37:15 -0400
add semantic stack to parser
Diffstat:
M | cc0.c | | | 1569 | ++++++++++++++++++++++++++++++++++++++++++++----------------------------------- |
M | cc1.om | | | 4 | ++-- |
M | cc4.om | | | 40 | ++++++++++++++++++++++++++++------------ |
M | lalr.om | | | 103 | ++++++++++++++++++++++++++++++++++++++++++++----------------------------------- |
M | lexer.om | | | 31 | +++++++++++++++++++++++++------ |
M | node.om | | | 1 | + |
6 files changed, 990 insertions(+), 758 deletions(-)
diff --git a/cc0.c b/cc0.c
@@ -97,11 +97,11 @@ u zfunc_to_ir();
u zgather_include();
u zget();
u zget_act_table();
-u zget_call_len();
u zget_call_table();
u zget_goto_table();
u zget_link_table();
u zget_num_states();
+u zget_pos_table();
u zget_prod_len();
u zget_tag_table();
u zget_term_len();
@@ -155,7 +155,7 @@ u zirreturn();
u ziruseop();
u zlabels_to_ir();
u zlalr_action();
-u zlalr_action_0();
+u zlalr_action_68();
u zlalr_add_first();
u zlalr_addlook();
u zlalr_alt();
@@ -3426,7 +3426,7 @@ b47: if (vkind != 61UL) goto b50;
v39 = ((u(*)())v35)(v36, v37, v38);
v39;
goto b42;
-b50: if (vkind != 62UL) goto b53;
+b50: if (vkind != 63UL) goto b53;
v40 = (u)zlalr_compiler;
v41 = vc;
v42 = *(u*)(*(u*)(vn + 8UL) + 24UL);
@@ -3463,7 +3463,7 @@ b14: if (vkind != 23UL) goto b17;
b17: if (vkind == 11UL) goto b22;
if (vkind == 13UL) goto b26;
if (vkind == 61UL) goto b30;
- if (vkind == 62UL) goto b30;
+ if (vkind == 63UL) goto b30;
v21 = 1UL;
b32: if (!v21) goto b26;
v20 = 1UL;
@@ -4741,7 +4741,7 @@ u zdie(u vmsg) {
v17;
return 0UL;
}
-u zdolalr(u va, u vname, u vout) {
+u zdolalr(u vc, u vname, u vout) {
u vact_table = 0;
u vgoto_table = 0;
u vtok = 0;
@@ -4756,8 +4756,8 @@ u zdolalr(u va, u vname, u vout) {
u vstack = 0;
u vstack_len = 0;
u vstack_cap = 0;
+ u vpos_table = 0;
u vcall_table = 0;
- u v18 = 0;
u v19 = 0;
u v20 = 0;
u v21 = 0;
@@ -4857,181 +4857,215 @@ u zdolalr(u va, u vname, u vout) {
u v115 = 0;
u v116 = 0;
u v117 = 0;
- v18 = (u)zsetup_lex;
- v19 = va;
- v20 = ((u(*)())v18)(v19);
- vl = v20;
- v21 = (u)zopen;
- v22 = vname;
- v23 = 0UL;
+ u v118 = 0;
+ u v119 = 0;
+ u v120 = 0;
+ u v121 = 0;
+ u v122 = 0;
+ u v123 = 0;
+ u v124 = 0;
+ u v125 = 0;
+ u v126 = 0;
+ u v127 = 0;
+ u v128 = 0;
+ u v129 = 0;
+ u v130 = 0;
+ u v131 = 0;
+ u v132 = 0;
+ v19 = (u)zsetup_lex;
+ v20 = vc;
+ v21 = ((u(*)())v19)(v20);
+ vl = v21;
+ v22 = (u)zopen;
+ v23 = vname;
v24 = 0UL;
- v25 = ((u(*)())v21)(v22, v23, v24);
- vfd = v25;
+ v25 = 0UL;
+ v26 = ((u(*)())v22)(v23, v24, v25);
+ vfd = v26;
if ((s)vfd >= (s)0UL) goto b5;
- v26 = (u)zdie;
- v27 = (u)"open failed";
- v28 = ((u(*)())v26)(v27);
- v28;
-b3: v29 = (u)zopen_lex;
- v30 = vl;
- v31 = vfd;
- v32 = ((u(*)())v29)(v30, v31);
- v32;
- v33 = (u)zalloc;
- v34 = va;
- v36 = (u)zget_call_len;
- v37 = ((u(*)())v36)();
- v35 = 8UL * v37;
- v38 = ((u(*)())v33)(v34, v35);
- vcall_table = v38;
- v39 = (u)zget_act_table;
- v40 = ((u(*)())v39)();
- vact_table = v40;
- v41 = (u)zget_goto_table;
- v42 = ((u(*)())v41)();
- vgoto_table = v42;
- v43 = (u)zget_call_table;
- v44 = vcall_table;
- v45 = ((u(*)())v43)(v44);
- v45;
- v46 = (u)zget_term_len;
- v47 = ((u(*)())v46)();
- vterm_len = v47;
- v48 = (u)zget_prod_len;
- v49 = ((u(*)())v48)();
- vprod_len = v49;
+ v27 = (u)zdie;
+ v28 = (u)"open failed";
+ v29 = ((u(*)())v27)(v28);
+ v29;
+b3: v30 = (u)zopen_lex;
+ v31 = vl;
+ v32 = vfd;
+ v33 = ((u(*)())v30)(v31, v32);
+ v33;
+ v34 = (u)zalloc;
+ v35 = *(u*)(vl + 0UL);
+ v37 = (u)zget_prod_len;
+ v38 = ((u(*)())v37)();
+ v36 = 8UL * v38;
+ v39 = ((u(*)())v34)(v35, v36);
+ vcall_table = v39;
+ v40 = (u)zget_act_table;
+ v41 = ((u(*)())v40)();
+ vact_table = v41;
+ v42 = (u)zget_goto_table;
+ v43 = ((u(*)())v42)();
+ vgoto_table = v43;
+ v44 = (u)zget_call_table;
+ v45 = vcall_table;
+ v46 = ((u(*)())v44)(v45);
+ v46;
+ v47 = (u)zget_pos_table;
+ v48 = ((u(*)())v47)();
+ vpos_table = v48;
+ v49 = (u)zget_term_len;
+ v50 = ((u(*)())v49)();
+ vterm_len = v50;
+ v51 = (u)zget_prod_len;
+ v52 = ((u(*)())v51)();
+ vprod_len = v52;
vstate = 0UL;
- v50 = (u)zgettok;
- v51 = vl;
- v52 = ((u(*)())v50)(v51);
- vtok = v52;
-b16: if ((s)vtok >= (s)0UL) goto b22;
- if (!*(u*)(vl + 32UL)) goto b22;
- v53 = 1UL;
-b24: if (!v53) goto b20;
+ v53 = (u)zgettok;
+ v54 = vl;
+ v55 = ((u(*)())v53)(v54);
+ vtok = v55;
+b17: if ((s)vtok >= (s)0UL) goto b23;
+ if (!*(u*)(vl + 40UL)) goto b23;
+ v56 = 1UL;
+b25: if (!v56) goto b21;
vtok = vterm_len - 1UL;
-b18: vact = *(u*)(vact_table + (vstate * vterm_len + vtok) * 8UL) & 255UL;
+b19: vact = *(u*)(vact_table + (vstate * vterm_len + vtok) * 8UL) & 255UL;
vact_out = *(u*)(vact_table + (vstate * vterm_len + vtok) * 8UL) >> 8UL & 16777215UL;
vact_len = *(u*)(vact_table + (vstate * vterm_len + vtok) * 8UL) >> 32UL;
- if (vact != 115UL) goto b35;
- v58 = (u)zensure_arr;
- v59 = va;
- v60 = (u)&vstack;
- v61 = (u)&vstack_cap;
- v62 = vstack_len + 1UL;
- v63 = 8UL;
- v64 = ((u(*)())v58)(v59, v60, v61, v62, v63);
- v64;
+ if (vact != 115UL) goto b36;
+ v61 = (u)zensure_arr;
+ v62 = *(u*)(vl + 0UL);
+ v63 = (u)&vstack;
+ v64 = (u)&vstack_cap;
+ v65 = vstack_len + 1UL;
+ v66 = 8UL;
+ v67 = ((u(*)())v61)(v62, v63, v64, v65, v66);
+ v67;
+ v68 = (u)zensure_arr;
+ v69 = *(u*)(vl + 0UL);
+ v70 = vl + 152UL;
+ v71 = vl + 168UL;
+ v72 = *(u*)(vl + 160UL) + 2UL;
+ v73 = 8UL;
+ v74 = ((u(*)())v68)(v69, v70, v71, v72, v73);
+ v74;
*(u*)(vstack + vstack_len * 8UL) = vstate;
vstack_len = vstack_len + 1UL;
+ *(u*)(vl + 160UL) = *(u*)(vl + 160UL) + 1UL;
vstate = vact_out;
- v65 = (u)zgettok;
- v66 = vl;
- v67 = ((u(*)())v65)(v66);
- vtok = v67;
-b33: goto b16;
-b35: if (vact != 114UL) goto b39;
- if (vact_len == 0UL) goto b42;
- if ((s)vact_len <= (s)vstack_len) goto b45;
- v68 = (u)zdie;
- v69 = (u)"stack underflow";
- v70 = ((u(*)())v68)(v69);
- v70;
-b43: vstack_len = vstack_len - vact_len;
+ v75 = (u)zgettok;
+ v76 = vl;
+ v77 = ((u(*)())v75)(v76);
+ vtok = v77;
+b34: goto b17;
+b36: if (vact != 114UL) goto b41;
+ if (!*(u*)(vcall_table + vact_out * 8UL)) goto b44;
+ *(u*)(vl + 144UL) = *(u*)(vpos_table + vact_out * 8UL);
+ *(u*)(vl + 136UL) = *(u*)(vl + 152UL) + (*(u*)(vl + 160UL) - *(u*)(vl + 144UL)) * 8UL;
+ v78 = *(u*)(vcall_table + vact_out * 8UL);
+ v79 = vl;
+ v80 = ((u(*)())v78)(v79);
+ v80;
+b42: if (vact_len == 0UL) goto b48;
+ if ((s)vact_len <= (s)vstack_len) goto b51;
+ v81 = (u)zdie;
+ v82 = (u)"stack underflow";
+ v83 = ((u(*)())v81)(v82);
+ v83;
+b49: v84 = (u)zmemcpy;
+ v85 = *(u*)(vl + 152UL) + (*(u*)(vl + 160UL) - vact_len) * 8UL;
+ v86 = *(u*)(vl + 152UL) + *(u*)(vl + 160UL) * 8UL;
+ v87 = 8UL;
+ v88 = ((u(*)())v84)(v85, v86, v87);
+ v88;
+ vstack_len = vstack_len - vact_len;
+ *(u*)(vl + 160UL) = *(u*)(vl + 160UL) - vact_len;
vstate = *(u*)(vstack + vstack_len * 8UL);
-b40: v71 = (u)zensure_arr;
- v72 = va;
- v73 = (u)&vstack;
- v74 = (u)&vstack_cap;
- v75 = vstack_len + 1UL;
- v76 = 8UL;
- v77 = ((u(*)())v71)(v72, v73, v74, v75, v76);
- v77;
- *(u*)(vstack + vstack_len * 8UL) = vstate;
- vstack_len = vstack_len + 1UL;
- vstate = *(u*)(vgoto_table + (vstate * vprod_len + vact_out) * 8UL);
- goto b33;
-b45: goto b43;
-b42: goto b40;
-b39: if (vact != 99UL) goto b49;
- v78 = (u)zensure_arr;
- v79 = va;
- v80 = (u)&vstack;
- v81 = (u)&vstack_cap;
- v82 = vstack_len + 1UL;
- v83 = 8UL;
- v84 = ((u(*)())v78)(v79, v80, v81, v82, v83);
- v84;
+b46: v89 = (u)zensure_arr;
+ v90 = *(u*)(vl + 0UL);
+ v91 = (u)&vstack;
+ v92 = (u)&vstack_cap;
+ v93 = vstack_len + 1UL;
+ v94 = 8UL;
+ v95 = ((u(*)())v89)(v90, v91, v92, v93, v94);
+ v95;
+ v96 = (u)zensure_arr;
+ v97 = *(u*)(vl + 0UL);
+ v98 = vl + 152UL;
+ v99 = vl + 168UL;
+ v100 = *(u*)(vl + 160UL) + 2UL;
+ v101 = 8UL;
+ v102 = ((u(*)())v96)(v97, v98, v99, v100, v101);
+ v102;
*(u*)(vstack + vstack_len * 8UL) = vstate;
vstack_len = vstack_len + 1UL;
+ *(u*)(vl + 160UL) = *(u*)(vl + 160UL) + 1UL;
vstate = *(u*)(vgoto_table + (vstate * vprod_len + vact_out) * 8UL);
- v85 = *(u*)(vcall_table + vact_len * 8UL);
- v86 = vl;
- v87 = ((u(*)())v85)(v86);
- v87;
- goto b33;
-b49: if (vact != 97UL) goto b53;
- if (vtok == vterm_len - 1UL) goto b56;
- v88 = (u)zdie;
- v89 = (u)"accept not at eof";
- v90 = ((u(*)())v88)(v89);
- v90;
-b54: return 0UL;
-b56: goto b54;
-b53: v91 = (u)zfputs;
- v92 = 0UL;
- v93 = (u)"on ";
- v94 = ((u(*)())v91)(v92, v93);
- v94;
- v95 = (u)zfputs;
- v96 = 0UL;
- v97 = vname;
- v98 = ((u(*)())v95)(v96, v97);
- v98;
- v99 = (u)zfputs;
- v100 = 0UL;
- v101 = (u)":";
- v102 = ((u(*)())v99)(v100, v101);
- v102;
- v103 = (u)zfputd;
- v104 = 0UL;
- v105 = *(u*)(vl + 96UL);
- v106 = ((u(*)())v103)(v104, v105);
- v106;
- v107 = (u)zfputs;
- v108 = 0UL;
- v109 = (u)":";
- v110 = ((u(*)())v107)(v108, v109);
- v110;
- v111 = (u)zfputd;
- v112 = 0UL;
- v113 = *(u*)(vl + 104UL);
- v114 = ((u(*)())v111)(v112, v113);
- v114;
- v115 = (u)zdie;
- v116 = (u)" syntax error";
- v117 = ((u(*)())v115)(v116);
+ goto b34;
+b51: goto b49;
+b48: goto b46;
+b44: goto b42;
+b41: if (vact != 97UL) goto b57;
+ if (vtok == vterm_len - 1UL) goto b60;
+ v103 = (u)zdie;
+ v104 = (u)"accept not at eof";
+ v105 = ((u(*)())v103)(v104);
+ v105;
+b58: return 0UL;
+b60: goto b58;
+b57: v106 = (u)zfputs;
+ v107 = 0UL;
+ v108 = (u)"on ";
+ v109 = ((u(*)())v106)(v107, v108);
+ v109;
+ v110 = (u)zfputs;
+ v111 = 0UL;
+ v112 = vname;
+ v113 = ((u(*)())v110)(v111, v112);
+ v113;
+ v114 = (u)zfputs;
+ v115 = 0UL;
+ v116 = (u)":";
+ v117 = ((u(*)())v114)(v115, v116);
v117;
- goto b33;
-b20: if ((s)vtok >= (s)0UL) goto b28;
- v54 = 1UL;
-b30: if (!v54) goto b26;
- v55 = (u)zdie;
- v56 = (u)"invalid token";
- v57 = ((u(*)())v55)(v56);
- v57;
- goto b18;
-b26: goto b18;
-b28: if ((s)vtok < (s)vterm_len) goto b31;
- v54 = 1UL;
- goto b30;
-b31: v54 = 0UL;
- goto b30;
-b22: v53 = 0UL;
- goto b24;
+ v118 = (u)zfputd;
+ v119 = 0UL;
+ v120 = *(u*)(vl + 104UL);
+ v121 = ((u(*)())v118)(v119, v120);
+ v121;
+ v122 = (u)zfputs;
+ v123 = 0UL;
+ v124 = (u)":";
+ v125 = ((u(*)())v122)(v123, v124);
+ v125;
+ v126 = (u)zfputd;
+ v127 = 0UL;
+ v128 = *(u*)(vl + 112UL);
+ v129 = ((u(*)())v126)(v127, v128);
+ v129;
+ v130 = (u)zdie;
+ v131 = (u)" syntax error";
+ v132 = ((u(*)())v130)(v131);
+ v132;
+ goto b34;
+b21: if ((s)vtok >= (s)0UL) goto b29;
+ v57 = 1UL;
+b31: if (!v57) goto b27;
+ v58 = (u)zdie;
+ v59 = (u)"invalid token";
+ v60 = ((u(*)())v58)(v59);
+ v60;
+ goto b19;
+b27: goto b19;
+b29: if ((s)vtok < (s)vterm_len) goto b32;
+ v57 = 1UL;
+ goto b31;
+b32: v57 = 0UL;
+ goto b31;
+b23: v56 = 0UL;
+ goto b25;
b5: goto b3;
}
-u zdolex(u va, u vname, u vout) {
+u zdolex(u vc, u vname, u vout) {
u vl = 0;
u vfd = 0;
u vtok = 0;
@@ -5070,7 +5104,7 @@ u zdolex(u va, u vname, u vout) {
u v38 = 0;
u v39 = 0;
v6 = (u)zsetup_lex;
- v7 = va;
+ v7 = vc;
v8 = ((u(*)())v6)(v7);
vl = v8;
v9 = (u)zopen;
@@ -5107,8 +5141,8 @@ b17: v27 = (u)zfputs;
v30;
v31 = (u)zfputb;
v32 = vout;
- v33 = *(u*)(vl + 48UL) + *(u*)(vl + 56UL) * 1UL;
- v34 = *(u*)(vl + 64UL) - *(u*)(vl + 56UL);
+ v33 = *(u*)(vl + 56UL) + *(u*)(vl + 64UL) * 1UL;
+ v34 = *(u*)(vl + 72UL) - *(u*)(vl + 64UL);
v35 = ((u(*)())v31)(v32, v33, v34);
v35;
v36 = (u)zfputs;
@@ -17651,11 +17685,11 @@ u zget_act_table() {
"\000\000\000\000\000\000\000\000\000\000\000\000\000s:\000\000\000\000\000\000s;\000\000\000\000\000\000s<\000\000\000\000\000\000s=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000s>\000\000\000\000\000\000s?\000\000\000\000\000\000s@\000\000\000\000\000\000sA\000\000\000\000\000\000\000\000\000\000\000\000\000\000sB\000"
"\000\000\000\000\000sC\000\000\000\000\000\000sD\000\000\000\000\000\000sE\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000sF\000\000\000\000\000"
- "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000sG\000\000\000\000\000\000sH\000\000\000\000\000\000sI\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000cD\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
- "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000cD\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
- "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000cD\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000sG\000\000\000\000\000\000sH\000\000\000\000\000\000sI\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000rD\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000rD\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000rD\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
- "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000cD\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000rD\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
"\000\000\000\000\000\000\000\000\000\000\000\000\000r>\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000r>\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000r>\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
@@ -18643,11 +18677,8 @@ u zget_act_table() {
"\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000r\002\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000r\002\000\000\002\000\000\000r\002\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
"\000r\002\000\000\002\000\000\000";
}
-u zget_call_len() {
- return 1UL;
-}
u zget_call_table(u vt) {
- *(u*)(vt + 0UL) = (u)zlalr_action_0;
+ *(u*)(vt + 544UL) = (u)zlalr_action_68;
return 0UL;
}
u zget_goto_table() {
@@ -22703,6 +22734,14 @@ u zget_link_table() {
u zget_num_states() {
return 132UL;
}
+u zget_pos_table() {
+ return (u)"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000";
+}
u zget_prod_len() {
return 69UL;
}
@@ -22875,20 +22914,20 @@ u zgettok(u vl) {
u v40 = 0;
u v41 = 0;
u v42 = 0;
-b3: vptr = *(u*)(vl + 64UL);
- vlineno = *(u*)(vl + 112UL);
- vcolno = *(u*)(vl + 120UL);
- *(u*)(vl + 56UL) = vptr;
- *(u*)(vl + 96UL) = vlineno;
- *(u*)(vl + 104UL) = vcolno;
- *(u*)(vl + 112UL) = vlineno;
- *(u*)(vl + 120UL) = vcolno;
+b3: vptr = *(u*)(vl + 72UL);
+ vlineno = *(u*)(vl + 120UL);
+ vcolno = *(u*)(vl + 128UL);
+ *(u*)(vl + 64UL) = vptr;
+ *(u*)(vl + 104UL) = vlineno;
+ *(u*)(vl + 112UL) = vcolno;
+ *(u*)(vl + 120UL) = vlineno;
+ *(u*)(vl + 128UL) = vcolno;
vstate = 0UL;
vtag = 0UL;
-b5: if (vptr != *(u*)(vl + 72UL)) goto b9;
- if (!*(u*)(vl + 40UL)) goto b12;
- if (*(u*)(vl + 56UL) != *(u*)(vl + 72UL)) goto b15;
- *(u*)(vl + 32UL) = 1UL;
+b5: if (vptr != *(u*)(vl + 80UL)) goto b9;
+ if (!*(u*)(vl + 48UL)) goto b12;
+ if (*(u*)(vl + 64UL) != *(u*)(vl + 80UL)) goto b15;
+ *(u*)(vl + 40UL) = 1UL;
return -1UL;
b15:b6: if (!vtag) goto b49;
v35 = 0UL;
@@ -22898,12 +22937,12 @@ b50: if (!v35) goto b47;
v38 = ((u(*)())v36)(v37);
v38;
return -1UL;
-b47: *(u*)(vl + 88UL) = 0UL;
+b47: *(u*)(vl + 96UL) = 0UL;
v39 = vtag;
v40 = vl;
v41 = ((u(*)())v39)(v40);
vret = v41;
- if (!*(u*)(vl + 88UL)) goto b57;
+ if (!*(u*)(vl + 96UL)) goto b57;
v42 = 0UL;
b58: if (!v42) goto b55;
return vret;
@@ -22912,33 +22951,33 @@ b57: v42 = 1UL;
goto b58;
b49: v35 = 1UL;
goto b50;
-b12: if ((s)(*(u*)(vl + 72UL) - *(u*)(vl + 56UL)) < (s)(*(u*)(vl + 80UL) >> 1UL)) goto b18;
- *(u*)(vl + 80UL) = *(u*)(vl + 80UL) * 2UL + 16UL * 1024UL;
+b12: if ((s)(*(u*)(vl + 80UL) - *(u*)(vl + 64UL)) < (s)(*(u*)(vl + 88UL) >> 1UL)) goto b18;
+ *(u*)(vl + 88UL) = *(u*)(vl + 88UL) * 2UL + 16UL * 1024UL;
v9 = (u)zalloc;
v10 = *(u*)(vl + 0UL);
- v11 = *(u*)(vl + 80UL);
+ v11 = *(u*)(vl + 88UL);
v12 = ((u(*)())v9)(v10, v11);
vtmp = v12;
v13 = (u)zmemcpy;
v14 = vtmp;
- v15 = *(u*)(vl + 48UL) + *(u*)(vl + 56UL) * 1UL;
- v16 = *(u*)(vl + 72UL) - *(u*)(vl + 56UL);
+ v15 = *(u*)(vl + 56UL) + *(u*)(vl + 64UL) * 1UL;
+ v16 = *(u*)(vl + 80UL) - *(u*)(vl + 64UL);
v17 = ((u(*)())v13)(v14, v15, v16);
v17;
v18 = (u)zfree;
v19 = *(u*)(vl + 0UL);
- v20 = *(u*)(vl + 48UL);
+ v20 = *(u*)(vl + 56UL);
v21 = ((u(*)())v18)(v19, v20);
v21;
- *(u*)(vl + 48UL) = vtmp;
- vptr = vptr - *(u*)(vl + 56UL);
- *(u*)(vl + 64UL) = *(u*)(vl + 64UL) - *(u*)(vl + 56UL);
- *(u*)(vl + 72UL) = *(u*)(vl + 72UL) - *(u*)(vl + 56UL);
- *(u*)(vl + 56UL) = 0UL;
+ *(u*)(vl + 56UL) = vtmp;
+ vptr = vptr - *(u*)(vl + 64UL);
+ *(u*)(vl + 72UL) = *(u*)(vl + 72UL) - *(u*)(vl + 64UL);
+ *(u*)(vl + 80UL) = *(u*)(vl + 80UL) - *(u*)(vl + 64UL);
+ *(u*)(vl + 64UL) = 0UL;
b16: v27 = (u)zread;
- v28 = *(u*)(vl + 24UL);
- v29 = *(u*)(vl + 48UL) + *(u*)(vl + 72UL) * 1UL;
- v30 = *(u*)(vl + 80UL) - *(u*)(vl + 72UL);
+ v28 = *(u*)(vl + 32UL);
+ v29 = *(u*)(vl + 56UL) + *(u*)(vl + 80UL) * 1UL;
+ v30 = *(u*)(vl + 88UL) - *(u*)(vl + 80UL);
v31 = ((u(*)())v27)(v28, v29, v30);
vret = v31;
if ((s)vret >= (s)0UL) goto b28;
@@ -22947,41 +22986,41 @@ b16: v27 = (u)zread;
v34 = ((u(*)())v32)(v33);
v34;
b26: if (vret != 0UL) goto b32;
+ *(u*)(vl + 48UL) = 1UL;
+ if (*(u*)(vl + 64UL) != *(u*)(vl + 80UL)) goto b35;
*(u*)(vl + 40UL) = 1UL;
- if (*(u*)(vl + 56UL) != *(u*)(vl + 72UL)) goto b35;
- *(u*)(vl + 32UL) = 1UL;
return -1UL;
b35: goto b6;
-b32: *(u*)(vl + 72UL) = *(u*)(vl + 72UL) + vret;
-b7: vch = (u)*(b*)(*(u*)(vl + 48UL) + vptr * 1UL);
+b32: *(u*)(vl + 80UL) = *(u*)(vl + 80UL) + vret;
+b7: vch = (u)*(b*)(*(u*)(vl + 56UL) + vptr * 1UL);
vptr = vptr + 1UL;
if (vch != 10UL) goto b38;
vlineno = vlineno + 1UL;
vcolno = 1UL;
-b36: vstate = *(u*)(*(u*)(vl + 16UL) + (vstate * 256UL + vch) * 8UL);
+b36: vstate = *(u*)(*(u*)(vl + 24UL) + (vstate * 256UL + vch) * 8UL);
if (vstate != -1UL) goto b41;
goto b6;
-b41: if (!*(u*)(*(u*)(vl + 8UL) + vstate * 8UL)) goto b44;
- vtag = *(u*)(*(u*)(vl + 8UL) + vstate * 8UL);
- *(u*)(vl + 64UL) = vptr;
- *(u*)(vl + 112UL) = vlineno;
- *(u*)(vl + 120UL) = vcolno;
+b41: if (!*(u*)(*(u*)(vl + 16UL) + vstate * 8UL)) goto b44;
+ vtag = *(u*)(*(u*)(vl + 16UL) + vstate * 8UL);
+ *(u*)(vl + 72UL) = vptr;
+ *(u*)(vl + 120UL) = vlineno;
+ *(u*)(vl + 128UL) = vcolno;
b42: goto b5;
b44: goto b42;
b38: vcolno = vcolno + 1UL;
goto b36;
b28: goto b26;
-b18: if ((s)*(u*)(vl + 72UL) < (s)(*(u*)(vl + 80UL) >> 1UL)) goto b23;
+b18: if ((s)*(u*)(vl + 80UL) < (s)(*(u*)(vl + 88UL) >> 1UL)) goto b23;
v22 = (u)zmemcpy;
- v23 = *(u*)(vl + 48UL);
- v24 = *(u*)(vl + 48UL) + *(u*)(vl + 56UL) * 1UL;
- v25 = *(u*)(vl + 72UL) - *(u*)(vl + 56UL);
+ v23 = *(u*)(vl + 56UL);
+ v24 = *(u*)(vl + 56UL) + *(u*)(vl + 64UL) * 1UL;
+ v25 = *(u*)(vl + 80UL) - *(u*)(vl + 64UL);
v26 = ((u(*)())v22)(v23, v24, v25);
v26;
- vptr = vptr - *(u*)(vl + 56UL);
- *(u*)(vl + 64UL) = *(u*)(vl + 64UL) - *(u*)(vl + 56UL);
- *(u*)(vl + 72UL) = *(u*)(vl + 72UL) - *(u*)(vl + 56UL);
- *(u*)(vl + 56UL) = 0UL;
+ vptr = vptr - *(u*)(vl + 64UL);
+ *(u*)(vl + 72UL) = *(u*)(vl + 72UL) - *(u*)(vl + 64UL);
+ *(u*)(vl + 80UL) = *(u*)(vl + 80UL) - *(u*)(vl + 64UL);
+ *(u*)(vl + 64UL) = 0UL;
goto b16;
b23: goto b16;
b9: goto b7;
@@ -29116,10 +29155,10 @@ u zlalr_action(u vlc, u va, u vpn) {
u vc = 0;
u vj = 0;
u vch = 0;
- u vid = 0;
u vx = 0;
u vprod = 0;
u valt = 0;
+ u v13 = 0;
u v14 = 0;
u v15 = 0;
u v16 = 0;
@@ -29198,127 +29237,119 @@ u zlalr_action(u vlc, u va, u vpn) {
u v89 = 0;
u v90 = 0;
u v91 = 0;
- u v92 = 0;
- u v93 = 0;
- u v94 = 0;
- u v95 = 0;
- u v96 = 0;
- u v97 = 0;
- u v98 = 0;
- u v99 = 0;
- v14 = (u)zalloc;
- v15 = *(u*)(vlc + 0UL);
- v16 = 64UL;
- v17 = ((u(*)())v14)(v15, v16);
- vs = v17;
- v18 = (u)zmknode0;
- v19 = *(u*)(*(u*)(vlc + 8UL) + 16UL);
- v20 = 0UL;
- v21 = ((u(*)())v18)(v19, v20);
- vn = v21;
- v22 = (u)zmemcpy;
- v23 = vs;
- v24 = (u)"lalr_action_";
- v25 = 12UL;
- v26 = ((u(*)())v22)(v23, v24, v25);
- v26;
- v27 = (u)zint2str;
- v28 = vs + 12UL * 1UL;
- v29 = vid;
- v30 = ((u(*)())v27)(v28, v29);
- v30;
+ v13 = (u)zalloc;
+ v14 = *(u*)(vlc + 0UL);
+ v15 = 64UL;
+ v16 = ((u(*)())v13)(v14, v15);
+ vs = v16;
+ v17 = (u)zmknode0;
+ v18 = *(u*)(*(u*)(vlc + 8UL) + 16UL);
+ v19 = 0UL;
+ v20 = ((u(*)())v17)(v18, v19);
+ vn = v20;
+ v21 = (u)zmemcpy;
+ v22 = vs;
+ v23 = (u)"lalr_action_";
+ v24 = 12UL;
+ v25 = ((u(*)())v21)(v22, v23, v24);
+ v25;
+ v26 = (u)zlalr_mkprod;
+ v27 = vlc;
+ v28 = ((u(*)())v26)(v27);
+ vprod = v28;
+ *(u*)(vprod + 120UL) = *(u*)(va + 24UL);
+ *(u*)(vprod + 112UL) = vs;
+ v29 = (u)zint2str;
+ v30 = vs + 12UL * 1UL;
+ v31 = *(u*)(vprod + 32UL);
+ v32 = ((u(*)())v29)(v30, v31);
+ v32;
*(u*)(vn + 64UL) = vs;
- v31 = (u)zensure_arr;
- v32 = *(u*)(vlc + 0UL);
- v33 = vlc + 80UL;
- v34 = vlc + 96UL;
- v35 = *(u*)(vlc + 88UL) + 1UL;
- v36 = 8UL;
- v37 = ((u(*)())v31)(v32, v33, v34, v35, v36);
- v37;
- *(u*)(*(u*)(vlc + 80UL) + *(u*)(vlc + 88UL) * 8UL) = vs;
- *(u*)(vlc + 88UL) = *(u*)(vlc + 88UL) + 1UL;
- v38 = (u)zmknode0;
- v39 = *(u*)(*(u*)(vlc + 8UL) + 16UL);
- v40 = 0UL;
- v41 = ((u(*)())v38)(v39, v40);
- vc = v41;
+ v33 = (u)zmknode0;
+ v34 = *(u*)(*(u*)(vlc + 8UL) + 16UL);
+ v35 = 0UL;
+ v36 = ((u(*)())v33)(v34, v35);
+ vc = v36;
*(u*)(vc + 64UL) = (u)"ctx";
- v42 = (u)zmknode0;
- v43 = *(u*)(*(u*)(vlc + 8UL) + 16UL);
- v44 = 0UL;
- v45 = ((u(*)())v42)(v43, v44);
- vb = v45;
+ v37 = (u)zmknode0;
+ v38 = *(u*)(*(u*)(vlc + 8UL) + 16UL);
+ v39 = 0UL;
+ v40 = ((u(*)())v37)(v38, v39);
+ vb = v40;
*(u*)(vb + 64UL) = (u)"lex";
- v46 = (u)zmknode1;
+ v41 = (u)zmknode1;
+ v42 = *(u*)(*(u*)(vlc + 8UL) + 16UL);
+ v43 = 16UL;
+ v44 = vb;
+ v45 = ((u(*)())v41)(v42, v43, v44);
+ vb = v45;
+ v46 = (u)zmknode;
v47 = *(u*)(*(u*)(vlc + 8UL) + 16UL);
- v48 = 16UL;
- v49 = vb;
- v50 = ((u(*)())v46)(v47, v48, v49);
- vb = v50;
- v51 = (u)zmknode;
- v52 = *(u*)(*(u*)(vlc + 8UL) + 16UL);
- v53 = 12UL;
- v54 = vc;
+ v48 = 12UL;
+ v49 = vc;
+ v50 = vb;
+ v51 = ((u(*)())v46)(v47, v48, v49, v50);
+ vb = v51;
+ v52 = (u)zmknode1;
+ v53 = *(u*)(*(u*)(vlc + 8UL) + 16UL);
+ v54 = 10UL;
v55 = vb;
- v56 = ((u(*)())v51)(v52, v53, v54, v55);
+ v56 = ((u(*)())v52)(v53, v54, v55);
vb = v56;
- v57 = (u)zmknode1;
+ v57 = (u)zmknode;
v58 = *(u*)(*(u*)(vlc + 8UL) + 16UL);
- v59 = 10UL;
+ v59 = 15UL;
v60 = vb;
- v61 = ((u(*)())v57)(v58, v59, v60);
- vb = v61;
- v62 = (u)zmknode;
- v63 = *(u*)(*(u*)(vlc + 8UL) + 16UL);
- v64 = 15UL;
- v65 = vb;
- v66 = 0UL;
- v67 = ((u(*)())v62)(v63, v64, v65, v66);
- vb = v67;
- v68 = (u)zmknode;
- v69 = *(u*)(*(u*)(vlc + 8UL) + 16UL);
- v70 = 13UL;
- v71 = vn;
- v72 = vb;
- v73 = ((u(*)())v68)(v69, v70, v71, v72);
- vd = v73;
- v74 = (u)zreconstruct_compound;
- v75 = *(u*)(*(u*)(vlc + 8UL) + 16UL);
- v76 = vpn;
- v77 = ((u(*)())v74)(v75, v76);
- vb = v77;
- v78 = (u)zmknode;
- v79 = *(u*)(*(u*)(vlc + 8UL) + 16UL);
- v80 = 11UL;
- v81 = vd;
- v82 = vb;
- v83 = ((u(*)())v78)(v79, v80, v81, v82);
- vn = v83;
- v84 = (u)zdefun;
- v85 = *(u*)(vlc + 8UL);
- v86 = vn;
- v87 = ((u(*)())v84)(v85, v86);
- v87;
- v88 = (u)zlalr_mkprod;
- v89 = vlc;
- v90 = ((u(*)())v88)(v89);
- vprod = v90;
- v91 = (u)zlalr_mkalt;
- v92 = vlc;
- v93 = vprod;
- v94 = ((u(*)())v91)(v92, v93);
- valt = v94;
- *(u*)(valt + 16UL) = vid + 1UL;
- v95 = (u)zlalr_alt_nonterminal;
- v96 = vlc;
- v97 = va;
- v98 = vprod;
- v99 = ((u(*)())v95)(v96, v97, v98);
- v99;
+ v61 = 0UL;
+ v62 = ((u(*)())v57)(v58, v59, v60, v61);
+ vb = v62;
+ v63 = (u)zmknode;
+ v64 = *(u*)(*(u*)(vlc + 8UL) + 16UL);
+ v65 = 13UL;
+ v66 = vn;
+ v67 = vb;
+ v68 = ((u(*)())v63)(v64, v65, v66, v67);
+ vd = v68;
+ v69 = (u)zreconstruct_compound;
+ v70 = *(u*)(*(u*)(vlc + 8UL) + 16UL);
+ v71 = vpn;
+ v72 = ((u(*)())v69)(v70, v71);
+ vb = v72;
+ v73 = (u)zmknode;
+ v74 = *(u*)(*(u*)(vlc + 8UL) + 16UL);
+ v75 = 11UL;
+ v76 = vd;
+ v77 = vb;
+ v78 = ((u(*)())v73)(v74, v75, v76, v77);
+ vn = v78;
+ v79 = (u)zdefun;
+ v80 = *(u*)(vlc + 8UL);
+ v81 = vn;
+ v82 = ((u(*)())v79)(v80, v81);
+ v82;
+ v83 = (u)zlalr_mkalt;
+ v84 = vlc;
+ v85 = vprod;
+ v86 = ((u(*)())v83)(v84, v85);
+ valt = v86;
+ v87 = (u)zlalr_alt_nonterminal;
+ v88 = vlc;
+ v89 = va;
+ v90 = vprod;
+ v91 = ((u(*)())v87)(v88, v89, v90);
+ v91;
return 0UL;
}
-u zlalr_action_0(u vctx) {
+u zlalr_action_68(u vctx) {
+ u v1 = 0;
+ u v2 = 0;
+ u v3 = 0;
+ u v4 = 0;
+ v1 = (u)zfputd;
+ v2 = 0UL;
+ v3 = *(u*)(vctx + 144UL);
+ v4 = ((u(*)())v1)(v2, v3);
+ v4;
return 0UL;
}
u zlalr_add_first(u vlc, u vout, u vsym) {
@@ -29479,17 +29510,17 @@ u zlalr_alt_nonterminal(u vlc, u va, u vs) {
u v16 = 0;
v5 = (u)zensure_arr;
v6 = *(u*)(vlc + 0UL);
- v7 = va + 24UL;
- v8 = va + 40UL;
- v9 = *(u*)(va + 32UL) + 1UL;
+ v7 = va + 16UL;
+ v8 = va + 32UL;
+ v9 = *(u*)(va + 24UL) + 1UL;
v10 = 64UL;
v11 = ((u(*)())v5)(v6, v7, v8, v9, v10);
v11;
- vi = *(u*)(va + 32UL);
- *(u*)(va + 32UL) = *(u*)(va + 32UL) + 1UL;
- *(u*)(*(u*)(va + 24UL) + vi * 64UL + 32UL) = 0UL;
- *(u*)(*(u*)(va + 24UL) + vi * 64UL + 40UL) = *(u*)(vs + 32UL);
- *(u*)(*(u*)(va + 24UL) + vi * 64UL + 48UL) = *(u*)(vs + 40UL);
+ vi = *(u*)(va + 24UL);
+ *(u*)(va + 24UL) = *(u*)(va + 24UL) + 1UL;
+ *(u*)(*(u*)(va + 16UL) + vi * 64UL + 32UL) = 0UL;
+ *(u*)(*(u*)(va + 16UL) + vi * 64UL + 40UL) = *(u*)(vs + 32UL);
+ *(u*)(*(u*)(va + 16UL) + vi * 64UL + 48UL) = *(u*)(vs + 40UL);
*(u*)((u)vuse + 40UL) = *(u*)(va + 0UL);
*(u*)((u)vuse + 48UL) = 0UL;
*(u*)((u)vuse + 56UL) = 0UL;
@@ -29515,24 +29546,24 @@ u zlalr_alt_terminal(u vlc, u va, u vname, u vid) {
u v14 = 0;
v5 = (u)zensure_arr;
v6 = *(u*)(vlc + 0UL);
- v7 = va + 24UL;
- v8 = va + 40UL;
- v9 = *(u*)(va + 32UL) + 1UL;
+ v7 = va + 16UL;
+ v8 = va + 32UL;
+ v9 = *(u*)(va + 24UL) + 1UL;
v10 = 64UL;
v11 = ((u(*)())v5)(v6, v7, v8, v9, v10);
v11;
- vi = *(u*)(va + 32UL);
- *(u*)(va + 32UL) = *(u*)(va + 32UL) + 1UL;
- *(u*)(*(u*)(va + 24UL) + vi * 64UL + 32UL) = 1UL;
- *(u*)(*(u*)(va + 24UL) + vi * 64UL + 40UL) = vid;
- *(u*)(*(u*)(va + 24UL) + vi * 64UL + 48UL) = vname;
+ vi = *(u*)(va + 24UL);
+ *(u*)(va + 24UL) = *(u*)(va + 24UL) + 1UL;
+ *(u*)(*(u*)(va + 16UL) + vi * 64UL + 32UL) = 1UL;
+ *(u*)(*(u*)(va + 16UL) + vi * 64UL + 40UL) = vid;
+ *(u*)(*(u*)(va + 16UL) + vi * 64UL + 48UL) = vname;
if ((s)vid >= (s)0UL) goto b4;
v12 = (u)zdie;
v13 = (u)"invalid terminal";
v14 = ((u(*)())v12)(v13);
v14;
-b2: if ((s)*(u*)(vlc + 104UL) > (s)vid) goto b8;
- *(u*)(vlc + 104UL) = vid + 1UL;
+b2: if ((s)*(u*)(vlc + 80UL) > (s)vid) goto b8;
+ *(u*)(vlc + 80UL) = vid + 1UL;
b6: return 0UL;
b8: goto b6;
b4: goto b2;
@@ -29654,18 +29685,18 @@ u zlalr_codegen(u vlc) {
u v55 = 0;
u v56 = 0;
u v57 = 0;
- *(u*)(vlc + 120UL) = 8UL * *(u*)(vlc + 112UL) * *(u*)(vlc + 104UL);
+ *(u*)(vlc + 96UL) = 8UL * *(u*)(vlc + 88UL) * *(u*)(vlc + 80UL);
v7 = (u)zalloc;
v8 = *(u*)(vlc + 0UL);
- v9 = *(u*)(vlc + 120UL);
+ v9 = *(u*)(vlc + 96UL);
v10 = ((u(*)())v7)(v8, v9);
- *(u*)(vlc + 128UL) = v10;
- *(u*)(vlc + 136UL) = 8UL * *(u*)(vlc + 112UL) * *(u*)(vlc + 40UL);
+ *(u*)(vlc + 104UL) = v10;
+ *(u*)(vlc + 112UL) = 8UL * *(u*)(vlc + 88UL) * *(u*)(vlc + 40UL);
v11 = (u)zalloc;
v12 = *(u*)(vlc + 0UL);
- v13 = *(u*)(vlc + 136UL);
+ v13 = *(u*)(vlc + 112UL);
v14 = ((u(*)())v11)(v12, v13);
- *(u*)(vlc + 144UL) = v14;
+ *(u*)(vlc + 120UL) = v14;
v15 = (u)zrb_first;
v16 = *(u*)(vlc + 56UL);
v17 = ((u(*)())v15)(v16);
@@ -29673,10 +29704,10 @@ u zlalr_codegen(u vlc) {
b4: if (!vi) goto b10;
v18 = 0UL;
b11: if (!v18) goto b8;
- if (!*(u*)(*(u*)(*(u*)(vlc + 32UL) + 1UL * 8UL) + 56UL)) goto b75;
- *(u*)(*(u*)(vlc + 128UL) + 0UL * 8UL) = 97UL;
-b73: return 0UL;
-b75: goto b73;
+ if (!*(u*)(*(u*)(*(u*)(vlc + 32UL) + 1UL * 8UL) + 56UL)) goto b72;
+ *(u*)(*(u*)(vlc + 104UL) + 0UL * 8UL) = 97UL;
+b70: return 0UL;
+b72: goto b70;
b8: v19 = (u)zrb_first;
v20 = *(u*)(vi + 64UL);
v21 = ((u(*)())v19)(v20);
@@ -29704,7 +29735,7 @@ b36: v55 = (u)zrb_next;
v57 = ((u(*)())v55)(v56);
vi = v57;
goto b4;
-b30: vlen = *(u*)(*(u*)(*(u*)(*(u*)(*(u*)(vlc + 32UL) + *(u*)(vt + 40UL) * 8UL) + 88UL) + *(u*)(vt + 48UL) * 8UL) + 32UL);
+b30: vlen = *(u*)(*(u*)(*(u*)(*(u*)(*(u*)(vlc + 32UL) + *(u*)(vt + 40UL) * 8UL) + 88UL) + *(u*)(vt + 48UL) * 8UL) + 24UL);
if (*(u*)(vt + 56UL) == vlen) goto b40;
v33 = (u)zrb_next;
v34 = vt + 0UL;
@@ -29723,10 +29754,10 @@ b50: if (!v39) goto b47;
v54 = ((u(*)())v52)(v53);
vt = v54;
goto b26;
-b47: if (!*(u*)(*(u*)(vlc + 128UL) + (*(u*)(vi + 32UL) * *(u*)(vlc + 104UL) + *(u*)(vsym + 40UL)) * 8UL)) goto b53;
+b47: if (!*(u*)(*(u*)(vlc + 104UL) + (*(u*)(vi + 32UL) * *(u*)(vlc + 80UL) + *(u*)(vsym + 40UL)) * 8UL)) goto b53;
v40 = (u)zfputc;
v41 = 0UL;
- v42 = *(u*)(*(u*)(vlc + 128UL) + (*(u*)(vi + 32UL) * *(u*)(vlc + 104UL) + *(u*)(vsym + 40UL)) * 8UL);
+ v42 = *(u*)(*(u*)(vlc + 104UL) + (*(u*)(vi + 32UL) * *(u*)(vlc + 80UL) + *(u*)(vsym + 40UL)) * 8UL);
v43 = ((u(*)())v40)(v41, v42);
v43;
v44 = (u)zdie;
@@ -29740,19 +29771,14 @@ b51: if (*(u*)(vt + 40UL) != 0UL) goto b60;
b66: if (!v48) goto b60;
v47 = 1UL;
b62: if (!v47) goto b58;
- *(u*)(*(u*)(vlc + 128UL) + (*(u*)(vi + 32UL) * *(u*)(vlc + 104UL) + *(u*)(vsym + 40UL)) * 8UL) = 97UL;
+ *(u*)(*(u*)(vlc + 104UL) + (*(u*)(vi + 32UL) * *(u*)(vlc + 80UL) + *(u*)(vsym + 40UL)) * 8UL) = 97UL;
b56: v49 = (u)zrb_next;
v50 = vsym + 0UL;
v51 = ((u(*)())v49)(v50);
vsym = v51;
goto b43;
-b58: vaction = *(u*)(*(u*)(*(u*)(*(u*)(*(u*)(vlc + 32UL) + *(u*)(vt + 40UL) * 8UL) + 88UL) + *(u*)(vt + 48UL) * 8UL) + 16UL);
- if (!vaction) goto b69;
- vaction = vaction - 1UL;
- *(u*)(*(u*)(vlc + 128UL) + (*(u*)(vi + 32UL) * *(u*)(vlc + 104UL) + *(u*)(vsym + 40UL)) * 8UL) = (vaction << 32UL) + (*(u*)(vt + 40UL) << 8UL) + 99UL;
-b67: goto b56;
-b69: *(u*)(*(u*)(vlc + 128UL) + (*(u*)(vi + 32UL) * *(u*)(vlc + 104UL) + *(u*)(vsym + 40UL)) * 8UL) = (vlen << 32UL) + (*(u*)(vt + 40UL) << 8UL) + 114UL;
- goto b67;
+b58: *(u*)(*(u*)(vlc + 104UL) + (*(u*)(vi + 32UL) * *(u*)(vlc + 80UL) + *(u*)(vsym + 40UL)) * 8UL) = (vlen << 32UL) + (*(u*)(vt + 40UL) << 8UL) + 114UL;
+ goto b56;
b60: v47 = 0UL;
goto b62;
b64: v48 = 0UL;
@@ -29763,13 +29789,13 @@ b49: v39 = 1UL;
b32: v29 = 1UL;
goto b33;
b17: if (!*(u*)(vsym + 32UL)) goto b23;
- *(u*)(*(u*)(vlc + 128UL) + (*(u*)(vi + 32UL) * *(u*)(vlc + 104UL) + *(u*)(vsym + 40UL)) * 8UL) = (*(u*)(*(u*)(vsym + 56UL) + 32UL) << 8UL) + 115UL;
+ *(u*)(*(u*)(vlc + 104UL) + (*(u*)(vi + 32UL) * *(u*)(vlc + 80UL) + *(u*)(vsym + 40UL)) * 8UL) = (*(u*)(*(u*)(vsym + 56UL) + 32UL) << 8UL) + 115UL;
b21: v23 = (u)zrb_next;
v24 = vsym + 0UL;
v25 = ((u(*)())v23)(v24);
vsym = v25;
goto b13;
-b23: *(u*)(*(u*)(vlc + 144UL) + (*(u*)(vi + 32UL) * *(u*)(vlc + 40UL) + *(u*)(vsym + 40UL)) * 8UL) = *(u*)(*(u*)(vsym + 56UL) + 32UL);
+b23: *(u*)(*(u*)(vlc + 120UL) + (*(u*)(vi + 32UL) * *(u*)(vlc + 40UL) + *(u*)(vsym + 40UL)) * 8UL) = *(u*)(*(u*)(vsym + 56UL) + 32UL);
goto b21;
b19: v22 = 1UL;
goto b20;
@@ -29787,12 +29813,12 @@ u zlalr_compile_get_call_table(u vlc) {
u vb = 0;
u vthis = 0;
u vnext = 0;
+ u vprod = 0;
u vident = 0;
u vi = 0;
u vv = 0;
- u v14 = 0;
- u v15 = 0;
- u v16 = 0;
+ u vpos_table = 0;
+ u vpos_table_len = 0;
u v17 = 0;
u v18 = 0;
u v19 = 0;
@@ -29892,139 +29918,229 @@ u zlalr_compile_get_call_table(u vlc) {
u v113 = 0;
u v114 = 0;
u v115 = 0;
- v14 = (u)zmktype0;
- v15 = *(u*)(vlc + 8UL);
- v16 = 1UL;
- v17 = ((u(*)())v14)(v15, v16);
- varg1_type = v17;
- v18 = (u)zmktype1;
- v19 = *(u*)(vlc + 8UL);
- v20 = 4UL;
- v21 = varg1_type;
- v22 = ((u(*)())v18)(v19, v20, v21);
- varg1_type = v22;
- v23 = (u)zmktype1;
- v24 = *(u*)(vlc + 8UL);
- v25 = 5UL;
- v26 = varg1_type;
- v27 = ((u(*)())v23)(v24, v25, v26);
- vargs_type = v27;
- v28 = (u)zmktype0;
- v29 = *(u*)(vlc + 8UL);
- v30 = 1UL;
- v31 = ((u(*)())v28)(v29, v30);
- vret_type = v31;
- v32 = (u)zmktype2;
- v33 = *(u*)(vlc + 8UL);
- v34 = 6UL;
- v35 = vret_type;
- v36 = vargs_type;
- v37 = ((u(*)())v32)(v33, v34, v35, v36);
- vfunc_type = v37;
- v38 = (u)zmktype1;
- v39 = *(u*)(vlc + 8UL);
- v40 = 4UL;
- v41 = vfunc_type;
- v42 = ((u(*)())v38)(v39, v40, v41);
- varg1_type = v42;
- v43 = (u)zmktype1;
- v44 = *(u*)(vlc + 8UL);
- v45 = 5UL;
- v46 = varg1_type;
- v47 = ((u(*)())v43)(v44, v45, v46);
- vargs_type = v47;
- v48 = (u)zmktype0;
- v49 = *(u*)(vlc + 8UL);
- v50 = 1UL;
- v51 = ((u(*)())v48)(v49, v50);
- vret_type = v51;
- v52 = (u)zmktype2;
- v53 = *(u*)(vlc + 8UL);
- v54 = 6UL;
- v55 = vret_type;
- v56 = vargs_type;
- v57 = ((u(*)())v52)(v53, v54, v55, v56);
- vfunc_type = v57;
- v58 = (u)zmkirfunc;
- v59 = *(u*)(vlc + 8UL);
- v60 = (u)"get_call_table";
- v61 = ((u(*)())v58)(v59, v60);
- vic = v61;
- v62 = (u)ziraddarg;
- v63 = vic;
- v64 = (u)"t";
- v65 = varg1_type;
- v66 = ((u(*)())v62)(v63, v64, v65);
- vv = v66;
+ u v116 = 0;
+ u v117 = 0;
+ u v118 = 0;
+ u v119 = 0;
+ u v120 = 0;
+ u v121 = 0;
+ u v122 = 0;
+ u v123 = 0;
+ u v124 = 0;
+ u v125 = 0;
+ u v126 = 0;
+ u v127 = 0;
+ u v128 = 0;
+ u v129 = 0;
+ u v130 = 0;
+ u v131 = 0;
+ u v132 = 0;
+ u v133 = 0;
+ u v134 = 0;
+ u v135 = 0;
+ u v136 = 0;
+ u v137 = 0;
+ u v138 = 0;
+ u v139 = 0;
+ u v140 = 0;
+ u v141 = 0;
+ u v142 = 0;
+ u v143 = 0;
+ u v144 = 0;
+ u v145 = 0;
+ u v146 = 0;
+ u v147 = 0;
+ u v148 = 0;
+ u v149 = 0;
+ u v150 = 0;
+ u v151 = 0;
+ u v152 = 0;
+ u v153 = 0;
+ u v154 = 0;
+ u v155 = 0;
+ v17 = (u)zmktype0;
+ v18 = *(u*)(vlc + 8UL);
+ v19 = 1UL;
+ v20 = ((u(*)())v17)(v18, v19);
+ varg1_type = v20;
+ v21 = (u)zmktype1;
+ v22 = *(u*)(vlc + 8UL);
+ v23 = 4UL;
+ v24 = varg1_type;
+ v25 = ((u(*)())v21)(v22, v23, v24);
+ varg1_type = v25;
+ v26 = (u)zmktype1;
+ v27 = *(u*)(vlc + 8UL);
+ v28 = 5UL;
+ v29 = varg1_type;
+ v30 = ((u(*)())v26)(v27, v28, v29);
+ vargs_type = v30;
+ v31 = (u)zmktype0;
+ v32 = *(u*)(vlc + 8UL);
+ v33 = 1UL;
+ v34 = ((u(*)())v31)(v32, v33);
+ vret_type = v34;
+ v35 = (u)zmktype2;
+ v36 = *(u*)(vlc + 8UL);
+ v37 = 6UL;
+ v38 = vret_type;
+ v39 = vargs_type;
+ v40 = ((u(*)())v35)(v36, v37, v38, v39);
+ vfunc_type = v40;
+ v41 = (u)zmktype1;
+ v42 = *(u*)(vlc + 8UL);
+ v43 = 4UL;
+ v44 = vfunc_type;
+ v45 = ((u(*)())v41)(v42, v43, v44);
+ varg1_type = v45;
+ v46 = (u)zmktype1;
+ v47 = *(u*)(vlc + 8UL);
+ v48 = 5UL;
+ v49 = varg1_type;
+ v50 = ((u(*)())v46)(v47, v48, v49);
+ vargs_type = v50;
+ v51 = (u)zmktype0;
+ v52 = *(u*)(vlc + 8UL);
+ v53 = 1UL;
+ v54 = ((u(*)())v51)(v52, v53);
+ vret_type = v54;
+ v55 = (u)zmktype2;
+ v56 = *(u*)(vlc + 8UL);
+ v57 = 6UL;
+ v58 = vret_type;
+ v59 = vargs_type;
+ v60 = ((u(*)())v55)(v56, v57, v58, v59);
+ vfunc_type = v60;
+ v61 = (u)zmkirfunc;
+ v62 = *(u*)(vlc + 8UL);
+ v63 = (u)"get_call_table";
+ v64 = ((u(*)())v61)(v62, v63);
+ vic = v64;
+ v65 = (u)ziraddarg;
+ v66 = vic;
+ v67 = (u)"t";
+ v68 = varg1_type;
+ v69 = ((u(*)())v65)(v66, v67, v68);
+ vv = v69;
+ vpos_table_len = *(u*)(vlc + 40UL) * 8UL;
+ v70 = (u)zalloc;
+ v71 = *(u*)(vlc + 0UL);
+ v72 = vpos_table_len;
+ v73 = ((u(*)())v70)(v71, v72);
+ vpos_table = v73;
vi = 0UL;
-b12: if (vi != *(u*)(vlc + 88UL)) goto b16;
- v103 = (u)zmkirconst;
- v104 = vic;
- v105 = 0UL;
- v106 = ((u(*)())v103)(v104, v105);
- vo = v106;
- v107 = (u)zirreturn;
- v108 = vic;
- v109 = vo;
- v110 = ((u(*)())v107)(v108, v109);
- v110;
- v111 = (u)zdefine_ir_func;
- v112 = *(u*)(vlc + 8UL);
- v113 = vic;
- v114 = vfunc_type;
- v115 = ((u(*)())v111)(v112, v113, v114);
- v115;
+b13: if (vi != *(u*)(vlc + 40UL)) goto b17;
+ v110 = (u)zmkirconst;
+ v111 = vic;
+ v112 = 0UL;
+ v113 = ((u(*)())v110)(v111, v112);
+ vo = v113;
+ v114 = (u)zirreturn;
+ v115 = vic;
+ v116 = vo;
+ v117 = ((u(*)())v114)(v115, v116);
+ v117;
+ v118 = (u)zdefine_ir_func;
+ v119 = *(u*)(vlc + 8UL);
+ v120 = vic;
+ v121 = vfunc_type;
+ v122 = ((u(*)())v118)(v119, v120, v121);
+ v122;
+ v123 = (u)zmktype0;
+ v124 = *(u*)(vlc + 8UL);
+ v125 = 2UL;
+ v126 = ((u(*)())v123)(v124, v125);
+ vret_type = v126;
+ v127 = (u)zmktype1;
+ v128 = *(u*)(vlc + 8UL);
+ v129 = 4UL;
+ v130 = vret_type;
+ v131 = ((u(*)())v127)(v128, v129, v130);
+ vret_type = v131;
+ v132 = (u)zmktype2;
+ v133 = *(u*)(vlc + 8UL);
+ v134 = 6UL;
+ v135 = vret_type;
+ v136 = 0UL;
+ v137 = ((u(*)())v132)(v133, v134, v135, v136);
+ vfunc_type = v137;
+ v138 = (u)zmkirfunc;
+ v139 = *(u*)(vlc + 8UL);
+ v140 = (u)"get_pos_table";
+ v141 = ((u(*)())v138)(v139, v140);
+ vic = v141;
+ v142 = (u)zmkirstr;
+ v143 = vic;
+ v144 = vpos_table;
+ v145 = vpos_table_len;
+ v146 = ((u(*)())v142)(v143, v144, v145);
+ vo = v146;
+ v147 = (u)zirreturn;
+ v148 = vic;
+ v149 = vo;
+ v150 = ((u(*)())v147)(v148, v149);
+ v150;
+ v151 = (u)zdefine_ir_func;
+ v152 = *(u*)(vlc + 8UL);
+ v153 = vic;
+ v154 = vfunc_type;
+ v155 = ((u(*)())v151)(v152, v153, v154);
+ v155;
return 0UL;
-b16: v67 = (u)zmkirop;
- v68 = vic;
- v69 = 0UL;
- v70 = 0UL;
- v71 = 0UL;
- v72 = ((u(*)())v67)(v68, v69, v70, v71);
- va = v72;
+b17: vprod = *(u*)(*(u*)(vlc + 32UL) + vi * 8UL);
+ *(u*)(vpos_table + vi * 8UL) = *(u*)(vprod + 120UL);
+ if (!*(u*)(vprod + 112UL)) goto b20;
+ v74 = (u)zmkirop;
+ v75 = vic;
+ v76 = 0UL;
+ v77 = 0UL;
+ v78 = 0UL;
+ v79 = ((u(*)())v74)(v75, v76, v77, v78);
+ va = v79;
*(u*)(va + 24UL) = *(u*)(vv + 32UL);
- v73 = (u)zmkirconst;
- v74 = vic;
- v75 = 8UL * vi;
- v76 = ((u(*)())v73)(v74, v75);
- vb = v76;
- v77 = (u)zmkirop;
- v78 = vic;
- v79 = 11UL;
- v80 = va;
- v81 = vb;
- v82 = ((u(*)())v77)(v78, v79, v80, v81);
- va = v82;
- v83 = (u)zmkirop;
- v84 = vic;
- v85 = 5UL;
- v86 = va;
- v87 = 0UL;
- v88 = ((u(*)())v83)(v84, v85, v86, v87);
- va = v88;
- v89 = (u)zmkirfuncref;
- v90 = vic;
- v91 = *(u*)(*(u*)(vlc + 80UL) + vi * 8UL);
- v92 = ((u(*)())v89)(v90, v91);
- vb = v92;
- v93 = (u)zmkirop;
- v94 = vic;
- v95 = 6UL;
- v96 = va;
- v97 = vb;
- v98 = ((u(*)())v93)(v94, v95, v96, v97);
- vo = v98;
+ v80 = (u)zmkirconst;
+ v81 = vic;
+ v82 = 8UL * vi;
+ v83 = ((u(*)())v80)(v81, v82);
+ vb = v83;
+ v84 = (u)zmkirop;
+ v85 = vic;
+ v86 = 11UL;
+ v87 = va;
+ v88 = vb;
+ v89 = ((u(*)())v84)(v85, v86, v87, v88);
+ va = v89;
+ v90 = (u)zmkirop;
+ v91 = vic;
+ v92 = 5UL;
+ v93 = va;
+ v94 = 0UL;
+ v95 = ((u(*)())v90)(v91, v92, v93, v94);
+ va = v95;
+ v96 = (u)zmkirfuncref;
+ v97 = vic;
+ v98 = *(u*)(vprod + 112UL);
+ v99 = ((u(*)())v96)(v97, v98);
+ vb = v99;
+ v100 = (u)zmkirop;
+ v101 = vic;
+ v102 = 6UL;
+ v103 = va;
+ v104 = vb;
+ v105 = ((u(*)())v100)(v101, v102, v103, v104);
+ vo = v105;
*(u*)(vo + 48UL) = *(u*)(varg1_type + 16UL);
- v99 = (u)ziraddop;
- v100 = vic;
- v101 = vo;
- v102 = ((u(*)())v99)(v100, v101);
- v102;
- vi = vi + 1UL;
- goto b12;
+ v106 = (u)ziraddop;
+ v107 = vic;
+ v108 = vo;
+ v109 = ((u(*)())v106)(v107, v108);
+ v109;
+b18: vi = vi + 1UL;
+ goto b13;
+b20: goto b18;
}
u zlalr_compiler(u vc, u vpn, u verr) {
- u v_lc[19] = {0};
+ u v_lc[16] = {0};
u vlc = 0;
u v5 = 0;
u v6 = 0;
@@ -30249,7 +30365,7 @@ b35: if (vj != *(u*)(vprod + 96UL)) goto b39;
goto b27;
b39: valt = *(u*)(*(u*)(vprod + 88UL) + vj * 8UL);
vk = 0UL;
-b40: if (vk != *(u*)(valt + 32UL)) goto b44;
+b40: if (vk != *(u*)(valt + 24UL)) goto b44;
if (!*(u*)(vprod + 56UL)) goto b49;
v21 = 0UL;
b50: if (!v21) goto b47;
@@ -30268,7 +30384,7 @@ b55: v22 = 1UL;
b47: goto b45;
b49: v21 = 1UL;
goto b50;
-b44: vsym = *(u*)(valt + 24UL) + vk * 64UL;
+b44: vsym = *(u*)(valt + 16UL) + vk * 64UL;
if (!*(u*)(vsym + 32UL)) goto b59;
v23 = (u)zlalr_add_first;
v24 = vlc;
@@ -30323,15 +30439,15 @@ b6: if (vj != *(u*)(*(u*)(*(u*)(vlc + 32UL) + vi * 8UL) + 96UL)) goto b10;
vqueue = *(u*)(*(u*)(vlc + 32UL) + vi * 8UL);
vi = vi + 1UL;
goto b1;
-b10: if (*(u*)(*(u*)(*(u*)(*(u*)(*(u*)(vlc + 32UL) + vi * 8UL) + 88UL) + vj * 8UL) + 32UL) != 0UL) goto b13;
+b10: if (*(u*)(*(u*)(*(u*)(*(u*)(*(u*)(vlc + 32UL) + vi * 8UL) + 88UL) + vj * 8UL) + 24UL) != 0UL) goto b13;
*(u*)(*(u*)(*(u*)(vlc + 32UL) + vi * 8UL) + 56UL) = 1UL;
vj = vj + 1UL;
goto b6;
-b13: if (!*(u*)(*(u*)(*(u*)(*(u*)(*(u*)(*(u*)(vlc + 32UL) + vi * 8UL) + 88UL) + vj * 8UL) + 24UL) + 0UL * 64UL + 32UL)) goto b16;
+b13: if (!*(u*)(*(u*)(*(u*)(*(u*)(*(u*)(*(u*)(vlc + 32UL) + vi * 8UL) + 88UL) + vj * 8UL) + 16UL) + 0UL * 64UL + 32UL)) goto b16;
v11 = (u)zlalr_addlook;
v12 = vlc;
v13 = *(u*)(*(u*)(vlc + 32UL) + vi * 8UL) + 64UL;
- v14 = *(u*)(*(u*)(*(u*)(*(u*)(*(u*)(vlc + 32UL) + vi * 8UL) + 88UL) + vj * 8UL) + 24UL) + 0UL * 64UL;
+ v14 = *(u*)(*(u*)(*(u*)(*(u*)(*(u*)(vlc + 32UL) + vi * 8UL) + 88UL) + vj * 8UL) + 16UL) + 0UL * 64UL;
v15 = ((u(*)())v11)(v12, v13, v14);
v15;
b14: vj = vj + 1UL;
@@ -30428,9 +30544,9 @@ b48: v46 = 1UL;
goto b49;
b20: vqueue = *(u*)(vt + 32UL);
valt = *(u*)(*(u*)(*(u*)(*(u*)(vlc + 32UL) + *(u*)(vt + 40UL) * 8UL) + 88UL) + *(u*)(vt + 48UL) * 8UL);
- if (*(u*)(vt + 56UL) != *(u*)(valt + 32UL)) goto b26;
+ if (*(u*)(vt + 56UL) != *(u*)(valt + 24UL)) goto b26;
goto b16;
-b26: vsym = *(u*)(valt + 24UL) + *(u*)(vt + 56UL) * 64UL;
+b26: vsym = *(u*)(valt + 16UL) + *(u*)(vt + 56UL) * 64UL;
*(u*)((u)vr + 40UL) = *(u*)(vt + 40UL);
*(u*)((u)vr + 48UL) = *(u*)(vt + 48UL);
*(u*)((u)vr + 56UL) = *(u*)(vt + 56UL) + 1UL;
@@ -30762,9 +30878,9 @@ u zlalr_lookahead(u vlc) {
u v41 = 0;
u v42 = 0;
*(u*)((u)vr + 32UL) = 1UL;
- *(u*)((u)vr + 40UL) = *(u*)(vlc + 104UL);
+ *(u*)((u)vr + 40UL) = *(u*)(vlc + 80UL);
*(u*)((u)vr + 48UL) = (u)"$";
- *(u*)(vlc + 104UL) = *(u*)(vlc + 104UL) + 1UL;
+ *(u*)(vlc + 80UL) = *(u*)(vlc + 80UL) + 1UL;
v14 = (u)zalloc;
v15 = *(u*)(vlc + 0UL);
v16 = 104UL;
@@ -30792,11 +30908,11 @@ b15: if (!v19) goto b12;
vqueue = *(u*)(vw + 0UL);
goto b2;
b12: valt = *(u*)(*(u*)(*(u*)(*(u*)(vlc + 32UL) + *(u*)(vw + 8UL + 40UL) * 8UL) + 88UL) + *(u*)(vw + 8UL + 48UL) * 8UL);
- if (*(u*)(vw + 8UL + 56UL) != *(u*)(valt + 32UL)) goto b19;
+ if (*(u*)(vw + 8UL + 56UL) != *(u*)(valt + 24UL)) goto b19;
vqueue = *(u*)(vw + 0UL);
goto b2;
b19: vi = *(u*)(vw + 80UL);
- vsym = *(u*)(valt + 24UL) + *(u*)(vw + 8UL + 56UL) * 64UL;
+ vsym = *(u*)(valt + 16UL) + *(u*)(vw + 8UL + 56UL) * 64UL;
v24 = (u)zlalr_findout;
v25 = vlc;
v26 = vw;
@@ -30835,10 +30951,10 @@ b49: v38 = 1UL;
goto b50;
b28: valt = *(u*)(*(u*)(vprod + 88UL) + vj * 8UL);
vk = *(u*)(vw + 8UL + 56UL);
-b29: if (vk != *(u*)(*(u*)(*(u*)(*(u*)(*(u*)(vlc + 32UL) + *(u*)(vw + 8UL + 40UL) * 8UL) + 88UL) + *(u*)(vw + 8UL + 48UL) * 8UL) + 32UL)) goto b33;
+b29: if (vk != *(u*)(*(u*)(*(u*)(*(u*)(*(u*)(vlc + 32UL) + *(u*)(vw + 8UL + 40UL) * 8UL) + 88UL) + *(u*)(vw + 8UL + 48UL) * 8UL) + 24UL)) goto b33;
b30: vj = vj + 1UL;
goto b24;
-b33: vrest_sym = *(u*)(*(u*)(*(u*)(*(u*)(*(u*)(vlc + 32UL) + *(u*)(vw + 8UL + 40UL) * 8UL) + 88UL) + *(u*)(vw + 8UL + 48UL) * 8UL) + 24UL) + vk * 64UL;
+b33: vrest_sym = *(u*)(*(u*)(*(u*)(*(u*)(*(u*)(vlc + 32UL) + *(u*)(vw + 8UL + 40UL) * 8UL) + 88UL) + *(u*)(vw + 8UL + 48UL) * 8UL) + 16UL) + vk * 64UL;
if (!*(u*)(vrest_sym + 32UL)) goto b36;
v29 = (u)zalloc;
v30 = *(u*)(vlc + 0UL);
@@ -30976,8 +31092,8 @@ b8: if (!v6) goto b5;
v16 = ((u(*)())v11)(v12, v13, v14, v15);
v16;
*(u*)(vi + 56UL) = *(u*)(vlc + 72UL);
- *(u*)(vi + 32UL) = *(u*)(vlc + 112UL);
- *(u*)(vlc + 112UL) = *(u*)(vlc + 112UL) + 1UL;
+ *(u*)(vi + 32UL) = *(u*)(vlc + 88UL);
+ *(u*)(vlc + 88UL) = *(u*)(vlc + 88UL) + 1UL;
*(u*)(vlc + 72UL) = vi;
return vi;
b5: v7 = (u)zlalr_itemsetcmp;
@@ -31012,7 +31128,7 @@ u zlalr_mkalt(u vlc, u vp) {
u v13 = 0;
v3 = (u)zalloc;
v4 = *(u*)(vlc + 0UL);
- v5 = 48UL;
+ v5 = 40UL;
v6 = ((u(*)())v3)(v4, v5);
va = v6;
*(u*)(va + 8UL) = *(u*)(vp + 96UL);
@@ -31068,7 +31184,7 @@ u zlalr_mkprod(u vlc) {
v8;
v9 = (u)zalloc;
v10 = *(u*)(vlc + 0UL);
- v11 = 112UL;
+ v11 = 128UL;
v12 = ((u(*)())v9)(v10, v11);
vp = v12;
*(u*)(vp + 32UL) = *(u*)(vlc + 40UL);
@@ -31183,23 +31299,6 @@ u zlalr_output(u vlc) {
u v100 = 0;
u v101 = 0;
u v102 = 0;
- u v103 = 0;
- u v104 = 0;
- u v105 = 0;
- u v106 = 0;
- u v107 = 0;
- u v108 = 0;
- u v109 = 0;
- u v110 = 0;
- u v111 = 0;
- u v112 = 0;
- u v113 = 0;
- u v114 = 0;
- u v115 = 0;
- u v116 = 0;
- u v117 = 0;
- u v118 = 0;
- u v119 = 0;
v5 = (u)zmktype0;
v6 = *(u*)(vlc + 8UL);
v7 = 2UL;
@@ -31225,8 +31324,8 @@ u zlalr_output(u vlc) {
vic = v23;
v24 = (u)zmkirstr;
v25 = vic;
- v26 = *(u*)(vlc + 128UL);
- v27 = *(u*)(vlc + 120UL);
+ v26 = *(u*)(vlc + 104UL);
+ v27 = *(u*)(vlc + 96UL);
v28 = ((u(*)())v24)(v25, v26, v27);
vo = v28;
v29 = (u)zirreturn;
@@ -31247,8 +31346,8 @@ u zlalr_output(u vlc) {
vic = v41;
v42 = (u)zmkirstr;
v43 = vic;
- v44 = *(u*)(vlc + 144UL);
- v45 = *(u*)(vlc + 136UL);
+ v44 = *(u*)(vlc + 120UL);
+ v45 = *(u*)(vlc + 112UL);
v46 = ((u(*)())v42)(v43, v44, v45);
vo = v46;
v47 = (u)zirreturn;
@@ -31302,7 +31401,7 @@ u zlalr_output(u vlc) {
vic = v86;
v87 = (u)zmkirconst;
v88 = vic;
- v89 = *(u*)(vlc + 104UL);
+ v89 = *(u*)(vlc + 80UL);
v90 = ((u(*)())v87)(v88, v89);
vo = v90;
v91 = (u)zirreturn;
@@ -31316,31 +31415,10 @@ u zlalr_output(u vlc) {
v98 = vfunc_type;
v99 = ((u(*)())v95)(v96, v97, v98);
v99;
- v100 = (u)zmkirfunc;
- v101 = *(u*)(vlc + 8UL);
- v102 = (u)"get_call_len";
- v103 = ((u(*)())v100)(v101, v102);
- vic = v103;
- v104 = (u)zmkirconst;
- v105 = vic;
- v106 = *(u*)(vlc + 88UL);
- v107 = ((u(*)())v104)(v105, v106);
- vo = v107;
- v108 = (u)zirreturn;
- v109 = vic;
- v110 = vo;
- v111 = ((u(*)())v108)(v109, v110);
- v111;
- v112 = (u)zdefine_ir_func;
- v113 = *(u*)(vlc + 8UL);
- v114 = vic;
- v115 = vfunc_type;
- v116 = ((u(*)())v112)(v113, v114, v115);
- v116;
- v117 = (u)zlalr_compile_get_call_table;
- v118 = vlc;
- v119 = ((u(*)())v117)(v118);
- v119;
+ v100 = (u)zlalr_compile_get_call_table;
+ v101 = vlc;
+ v102 = ((u(*)())v100)(v101);
+ v102;
return 0UL;
}
u zlalr_pattern(u vlc, u vp, u vpn) {
@@ -31979,7 +32057,7 @@ b7: *(u*)(vc + 168UL) = *(u*)(vc + 168UL) * 2UL;
b4: goto b2;
}
u zlex_skip(u vl) {
- *(u*)(vl + 88UL) = 1UL;
+ *(u*)(vl + 96UL) = 1UL;
return 0UL;
}
u zlexer_action_0(u vctx) {
@@ -32271,7 +32349,7 @@ u zlexer_action_51(u vctx) {
return 51UL;
}
u zlexer_action_52(u vctx) {
- u vs = 0;
+ u vn = 0;
u v2 = 0;
u v3 = 0;
u v4 = 0;
@@ -32280,16 +32358,30 @@ u zlexer_action_52(u vctx) {
u v7 = 0;
u v8 = 0;
u v9 = 0;
- v2 = (u)zmkstr;
- v3 = *(u*)(vctx + 0UL);
- v4 = *(u*)(vctx + 48UL) + *(u*)(vctx + 56UL) * 1UL;
- v5 = *(u*)(vctx + 64UL) - *(u*)(vctx + 56UL);
- v6 = ((u(*)())v2)(v3, v4, v5);
- vs = v6;
+ u v10 = 0;
+ u v11 = 0;
+ u v12 = 0;
+ u v13 = 0;
+ u v14 = 0;
+ u v15 = 0;
+ v2 = (u)zmknode;
+ v3 = *(u*)(*(u*)(vctx + 8UL) + 16UL);
+ v4 = 0UL;
+ v5 = 0UL;
+ v6 = 0UL;
+ v7 = ((u(*)())v2)(v3, v4, v5, v6);
+ vn = v7;
+ v8 = (u)zmkstr;
+ v9 = *(u*)(vctx + 0UL);
+ v10 = *(u*)(vctx + 56UL) + *(u*)(vctx + 64UL) * 1UL;
+ v11 = *(u*)(vctx + 72UL) - *(u*)(vctx + 64UL);
+ v12 = ((u(*)())v8)(v9, v10, v11);
+ *(u*)(vn + 64UL) = v12;
+ *(u*)(*(u*)(vctx + 152UL) + *(u*)(vctx + 160UL) * 8UL + 0UL) = vn;
return 52UL;
}
u zlexer_action_53(u vctx) {
- u vx = 0;
+ u vn = 0;
u vok = 0;
u v3 = 0;
u v4 = 0;
@@ -32303,28 +32395,42 @@ u zlexer_action_53(u vctx) {
u v12 = 0;
u v13 = 0;
u v14 = 0;
- v3 = (u)zhex2int;
- v4 = *(u*)(vctx + 48UL) + (*(u*)(vctx + 56UL) + 2UL) * 1UL;
- v5 = *(u*)(vctx + 64UL) - *(u*)(vctx + 56UL) - 2UL;
- v6 = (u)&vok;
- v7 = ((u(*)())v3)(v4, v5, v6);
- vx = v7;
- if (!vok) goto b6;
- v8 = 0UL;
-b7: if (!v8) goto b4;
- v9 = (u)zdie;
- v10 = (u)"invalid hex";
- v11 = ((u(*)())v9)(v10);
- v11;
-b2: return 53UL;
-b4: goto b2;
-b6: v8 = 1UL;
- goto b7;
+ u v15 = 0;
+ u v16 = 0;
+ u v17 = 0;
+ u v18 = 0;
+ u v19 = 0;
+ u v20 = 0;
+ v3 = (u)zmknode;
+ v4 = *(u*)(*(u*)(vctx + 8UL) + 16UL);
+ v5 = 1UL;
+ v6 = 0UL;
+ v7 = 0UL;
+ v8 = ((u(*)())v3)(v4, v5, v6, v7);
+ vn = v8;
+ v9 = (u)zhex2int;
+ v10 = *(u*)(vctx + 56UL) + (*(u*)(vctx + 64UL) + 2UL) * 1UL;
+ v11 = *(u*)(vctx + 72UL) - *(u*)(vctx + 64UL) - 2UL;
+ v12 = (u)&vok;
+ v13 = ((u(*)())v9)(v10, v11, v12);
+ *(u*)(vn + 56UL) = v13;
+ if (!vok) goto b7;
+ v14 = 0UL;
+b8: if (!v14) goto b5;
+ v15 = (u)zdie;
+ v16 = (u)"invalid hex";
+ v17 = ((u(*)())v15)(v16);
+ v17;
+b3: *(u*)(*(u*)(vctx + 152UL) + *(u*)(vctx + 160UL) * 8UL + 0UL) = vn;
+ return 53UL;
+b5: goto b3;
+b7: v14 = 1UL;
+ goto b8;
}
u zlexer_action_54(u vctx) {
+ u vn = 0;
u vx = 0;
u vok = 0;
- u v3 = 0;
u v4 = 0;
u v5 = 0;
u v6 = 0;
@@ -32336,29 +32442,44 @@ u zlexer_action_54(u vctx) {
u v12 = 0;
u v13 = 0;
u v14 = 0;
- v3 = (u)zdec2int;
- v4 = *(u*)(vctx + 48UL) + *(u*)(vctx + 56UL) * 1UL;
- v5 = *(u*)(vctx + 64UL) - *(u*)(vctx + 56UL);
- v6 = (u)&vok;
- v7 = ((u(*)())v3)(v4, v5, v6);
- vx = v7;
- if (!vok) goto b6;
+ u v15 = 0;
+ u v16 = 0;
+ u v17 = 0;
+ u v18 = 0;
+ u v19 = 0;
+ u v20 = 0;
+ u v21 = 0;
+ v4 = (u)zmknode;
+ v5 = *(u*)(*(u*)(vctx + 8UL) + 16UL);
+ v6 = 1UL;
+ v7 = 0UL;
v8 = 0UL;
-b7: if (!v8) goto b4;
- v9 = (u)zdie;
- v10 = (u)"invalid dec";
- v11 = ((u(*)())v9)(v10);
- v11;
-b2: return 53UL;
-b4: goto b2;
-b6: v8 = 1UL;
- goto b7;
+ v9 = ((u(*)())v4)(v5, v6, v7, v8);
+ vn = v9;
+ v10 = (u)zdec2int;
+ v11 = *(u*)(vctx + 56UL) + *(u*)(vctx + 64UL) * 1UL;
+ v12 = *(u*)(vctx + 72UL) - *(u*)(vctx + 64UL);
+ v13 = (u)&vok;
+ v14 = ((u(*)())v10)(v11, v12, v13);
+ *(u*)(vn + 56UL) = v14;
+ if (!vok) goto b7;
+ v15 = 0UL;
+b8: if (!v15) goto b5;
+ v16 = (u)zdie;
+ v17 = (u)"invalid dec";
+ v18 = ((u(*)())v16)(v17);
+ v18;
+b3: *(u*)(*(u*)(vctx + 152UL) + *(u*)(vctx + 160UL) * 8UL + 0UL) = vn;
+ return 53UL;
+b5: goto b3;
+b7: v15 = 1UL;
+ goto b8;
}
u zlexer_action_55(u vctx) {
+ u vn = 0;
u vi = 0;
u vx = 0;
u vok = 0;
- u v4 = 0;
u v5 = 0;
u v6 = 0;
u v7 = 0;
@@ -32372,35 +32493,50 @@ u zlexer_action_55(u vctx) {
u v15 = 0;
u v16 = 0;
u v17 = 0;
- vi = *(u*)(vctx + 56UL) + 1UL;
- v4 = (u)zunescape;
- v5 = *(u*)(vctx + 48UL);
- v6 = (u)&vi;
- v7 = *(u*)(vctx + 64UL) - 1UL;
- v8 = (u)&vok;
- v9 = ((u(*)())v4)(v5, v6, v7, v8);
- vx = v9;
- if (!vok) goto b10;
- v11 = 0UL;
-b11: if (!v11) goto b6;
- v10 = 1UL;
-b8: if (!v10) goto b4;
- v12 = (u)zdie;
- v13 = (u)"invalid char";
- v14 = ((u(*)())v12)(v13);
- v14;
-b2: return 53UL;
-b4: goto b2;
-b6: if (vi == *(u*)(vctx + 64UL) - 1UL) goto b12;
- v10 = 1UL;
- goto b8;
-b12: v10 = 0UL;
- goto b8;
-b10: v11 = 1UL;
- goto b11;
+ u v18 = 0;
+ u v19 = 0;
+ u v20 = 0;
+ u v21 = 0;
+ u v22 = 0;
+ u v23 = 0;
+ u v24 = 0;
+ v5 = (u)zmknode;
+ v6 = *(u*)(*(u*)(vctx + 8UL) + 16UL);
+ v7 = 1UL;
+ v8 = 0UL;
+ v9 = 0UL;
+ v10 = ((u(*)())v5)(v6, v7, v8, v9);
+ vn = v10;
+ vi = *(u*)(vctx + 64UL) + 1UL;
+ v11 = (u)zunescape;
+ v12 = *(u*)(vctx + 56UL);
+ v13 = (u)&vi;
+ v14 = *(u*)(vctx + 72UL) - 1UL;
+ v15 = (u)&vok;
+ v16 = ((u(*)())v11)(v12, v13, v14, v15);
+ *(u*)(vn + 56UL) = v16;
+ if (!vok) goto b11;
+ v18 = 0UL;
+b12: if (!v18) goto b7;
+ v17 = 1UL;
+b9: if (!v17) goto b5;
+ v19 = (u)zdie;
+ v20 = (u)"invalid char";
+ v21 = ((u(*)())v19)(v20);
+ v21;
+b3: *(u*)(*(u*)(vctx + 152UL) + *(u*)(vctx + 160UL) * 8UL + 0UL) = vn;
+ return 53UL;
+b5: goto b3;
+b7: if (vi == *(u*)(vctx + 72UL) - 1UL) goto b13;
+ v17 = 1UL;
+ goto b9;
+b13: v17 = 0UL;
+ goto b9;
+b11: v18 = 1UL;
+ goto b12;
}
u zlexer_action_56(u vctx) {
- u vs = 0;
+ u vn = 0;
u vi = 0;
u vj = 0;
u vok = 0;
@@ -32421,37 +32557,51 @@ u zlexer_action_56(u vctx) {
u v19 = 0;
u v20 = 0;
u v21 = 0;
- v5 = (u)zalloc;
- v6 = *(u*)(vctx + 0UL);
- v7 = *(u*)(vctx + 64UL) - *(u*)(vctx + 56UL);
- v8 = ((u(*)())v5)(v6, v7);
- vs = v8;
- vi = *(u*)(vctx + 56UL) + 1UL;
+ u v22 = 0;
+ u v23 = 0;
+ u v24 = 0;
+ u v25 = 0;
+ u v26 = 0;
+ u v27 = 0;
+ v5 = (u)zmknode;
+ v6 = *(u*)(*(u*)(vctx + 8UL) + 16UL);
+ v7 = 3UL;
+ v8 = 0UL;
+ v9 = 0UL;
+ v10 = ((u(*)())v5)(v6, v7, v8, v9);
+ vn = v10;
+ v11 = (u)zalloc;
+ v12 = *(u*)(vctx + 0UL);
+ v13 = *(u*)(vctx + 72UL) - *(u*)(vctx + 64UL);
+ v14 = ((u(*)())v11)(v12, v13);
+ *(u*)(vn + 64UL) = v14;
+ vi = *(u*)(vctx + 64UL) + 1UL;
vj = 0UL;
-b2: if (vi != *(u*)(vctx + 64UL) - 1UL) goto b6;
+b3: if (vi != *(u*)(vctx + 72UL) - 1UL) goto b7;
+ *(u*)(*(u*)(vctx + 152UL) + *(u*)(vctx + 160UL) * 8UL + 0UL) = vn;
return 54UL;
-b6: v9 = (u)zunescape;
- v10 = *(u*)(vctx + 48UL);
- v11 = (u)&vi;
- v12 = *(u*)(vctx + 64UL) - 1UL;
- v13 = (u)&vok;
- v14 = ((u(*)())v9)(v10, v11, v12, v13);
- *(b*)(vs + vj * 1UL) = v14;
- if (!vok) goto b12;
- v15 = 0UL;
-b13: if (!v15) goto b10;
- v16 = (u)zdie;
- v17 = (u)"invalid string";
- v18 = ((u(*)())v16)(v17);
- v18;
-b8: vj = vj + 1UL;
- goto b2;
-b10: goto b8;
-b12: v15 = 1UL;
- goto b13;
+b7: v15 = (u)zunescape;
+ v16 = *(u*)(vctx + 56UL);
+ v17 = (u)&vi;
+ v18 = *(u*)(vctx + 72UL) - 1UL;
+ v19 = (u)&vok;
+ v20 = ((u(*)())v15)(v16, v17, v18, v19);
+ *(b*)(*(u*)(vn + 64UL) + vj * 1UL) = v20;
+ if (!vok) goto b13;
+ v21 = 0UL;
+b14: if (!v21) goto b11;
+ v22 = (u)zdie;
+ v23 = (u)"invalid string";
+ v24 = ((u(*)())v22)(v23);
+ v24;
+b9: vj = vj + 1UL;
+ goto b3;
+b11: goto b9;
+b13: v21 = 1UL;
+ goto b14;
}
u zlexer_action_57(u vctx) {
- u vs = 0;
+ u vn = 0;
u v2 = 0;
u v3 = 0;
u v4 = 0;
@@ -32460,12 +32610,26 @@ u zlexer_action_57(u vctx) {
u v7 = 0;
u v8 = 0;
u v9 = 0;
- v2 = (u)zparse_charset;
- v3 = *(u*)(vctx + 0UL);
- v4 = *(u*)(vctx + 48UL) + (*(u*)(vctx + 56UL) + 2UL) * 1UL;
- v5 = *(u*)(vctx + 64UL) - *(u*)(vctx + 56UL) - 4UL;
- v6 = ((u(*)())v2)(v3, v4, v5);
- vs = v6;
+ u v10 = 0;
+ u v11 = 0;
+ u v12 = 0;
+ u v13 = 0;
+ u v14 = 0;
+ u v15 = 0;
+ v2 = (u)zmknode;
+ v3 = *(u*)(*(u*)(vctx + 8UL) + 16UL);
+ v4 = 62UL;
+ v5 = 0UL;
+ v6 = 0UL;
+ v7 = ((u(*)())v2)(v3, v4, v5, v6);
+ vn = v7;
+ v8 = (u)zparse_charset;
+ v9 = *(u*)(vctx + 0UL);
+ v10 = *(u*)(vctx + 56UL) + (*(u*)(vctx + 64UL) + 2UL) * 1UL;
+ v11 = *(u*)(vctx + 72UL) - *(u*)(vctx + 64UL) - 4UL;
+ v12 = ((u(*)())v8)(v9, v10, v11);
+ *(u*)(vn + 64UL) = v12;
+ *(u*)(*(u*)(vctx + 152UL) + *(u*)(vctx + 160UL) * 8UL + 0UL) = vn;
return 55UL;
}
u zlexer_action_58(u vctx) {
@@ -34317,7 +34481,7 @@ b67: if (!v70) goto b64;
v77 = ((u(*)())v75)(v76);
v77;
b69: v78 = (u)zdolex;
- v79 = *(u*)(vc + 0UL);
+ v79 = vc;
v80 = *(u*)(vargv + vi * 8UL);
v81 = 0UL;
v82 = ((u(*)())v78)(v79, v80, v81);
@@ -34339,7 +34503,7 @@ b79: if (!v83) goto b76;
v90 = ((u(*)())v88)(v89);
v90;
b81: v91 = (u)zdolalr;
- v92 = *(u*)(vc + 0UL);
+ v92 = vc;
v93 = *(u*)(vargv + vi * 8UL);
v94 = 0UL;
v95 = ((u(*)())v91)(v92, v93, v94);
@@ -35931,16 +36095,16 @@ b8: goto b6;
b3: goto b1;
}
u zopen_lex(u vl, u vfd) {
- *(u*)(vl + 24UL) = vfd;
- *(u*)(vl + 32UL) = 0UL;
+ *(u*)(vl + 32UL) = vfd;
*(u*)(vl + 40UL) = 0UL;
- *(u*)(vl + 56UL) = 0UL;
+ *(u*)(vl + 48UL) = 0UL;
*(u*)(vl + 64UL) = 0UL;
*(u*)(vl + 72UL) = 0UL;
- *(u*)(vl + 96UL) = 1UL;
+ *(u*)(vl + 80UL) = 0UL;
*(u*)(vl + 104UL) = 1UL;
*(u*)(vl + 112UL) = 1UL;
*(u*)(vl + 120UL) = 1UL;
+ *(u*)(vl + 128UL) = 1UL;
return 0UL;
}
u zopen_lines_out(u vc, u vfilename) {
@@ -43293,7 +43457,7 @@ b24: if (*(u*)(vpn + 0UL) != 116UL) goto b27;
b27: if (*(u*)(vpn + 0UL) != 121UL) goto b30;
v36 = (u)zmknode0;
v37 = vc;
- v38 = 62UL;
+ v38 = 63UL;
v39 = ((u(*)())v36)(v37, v38);
vn = v39;
*(u*)(vn + 24UL) = vpn;
@@ -46187,7 +46351,7 @@ u zsetup_assembler(u va) {
v15;
return vc;
}
-u zsetup_lex(u va) {
+u zsetup_lex(u vc) {
u vl = 0;
u vi = 0;
u v3 = 0;
@@ -46205,39 +46369,60 @@ u zsetup_lex(u va) {
u v15 = 0;
u v16 = 0;
u v17 = 0;
+ u v18 = 0;
+ u v19 = 0;
+ u v20 = 0;
+ u v21 = 0;
+ u v22 = 0;
+ u v23 = 0;
+ u v24 = 0;
v3 = (u)zalloc;
- v4 = va;
- v5 = 128UL;
+ v4 = *(u*)(vc + 0UL);
+ v5 = 176UL;
v6 = ((u(*)())v3)(v4, v5);
vl = v6;
- *(u*)(vl + 0UL) = va;
+ *(u*)(vl + 0UL) = *(u*)(vc + 0UL);
+ *(u*)(vl + 8UL) = vc;
v7 = (u)zget_num_states;
v8 = ((u(*)())v7)();
vi = v8;
v9 = (u)zalloc;
- v10 = va;
+ v10 = *(u*)(vl + 0UL);
v11 = 8UL * vi;
v12 = ((u(*)())v9)(v10, v11);
- *(u*)(vl + 8UL) = v12;
+ *(u*)(vl + 16UL) = v12;
v13 = (u)zget_tag_table;
- v14 = *(u*)(vl + 8UL);
+ v14 = *(u*)(vl + 16UL);
v15 = ((u(*)())v13)(v14);
v15;
v16 = (u)zget_link_table;
v17 = ((u(*)())v16)();
- *(u*)(vl + 16UL) = v17;
- *(u*)(vl + 24UL) = 0UL;
- *(u*)(vl + 32UL) = 1UL;
+ *(u*)(vl + 24UL) = v17;
+ *(u*)(vl + 32UL) = 0UL;
*(u*)(vl + 40UL) = 1UL;
- *(u*)(vl + 48UL) = 0UL;
+ *(u*)(vl + 48UL) = 1UL;
*(u*)(vl + 56UL) = 0UL;
*(u*)(vl + 64UL) = 0UL;
*(u*)(vl + 72UL) = 0UL;
*(u*)(vl + 80UL) = 0UL;
- *(u*)(vl + 96UL) = 1UL;
+ *(u*)(vl + 88UL) = 0UL;
*(u*)(vl + 104UL) = 1UL;
*(u*)(vl + 112UL) = 1UL;
*(u*)(vl + 120UL) = 1UL;
+ *(u*)(vl + 128UL) = 1UL;
+ *(u*)(vl + 136UL) = 0UL;
+ *(u*)(vl + 144UL) = 0UL;
+ *(u*)(vl + 152UL) = 0UL;
+ *(u*)(vl + 160UL) = 0UL;
+ *(u*)(vl + 168UL) = 0UL;
+ v18 = (u)zensure_arr;
+ v19 = *(u*)(vl + 0UL);
+ v20 = vl + 152UL;
+ v21 = vl + 168UL;
+ v22 = *(u*)(vl + 160UL) + 2UL;
+ v23 = 8UL;
+ v24 = ((u(*)())v18)(v19, v20, v21, v22, v23);
+ v24;
return vl;
}
u zsetup_parser(u vcc, u verr) {
diff --git a/cc1.om b/cc1.om
@@ -2224,7 +2224,7 @@ func main(argc: int, argv: **byte, envp: **byte) {
if (i >= argc) {
die("invalid -l at end of argument list");
}
- dolex(c.a, argv[i], nil);
+ dolex(c, argv[i], nil);
i = i + 1;
continue;
}
@@ -2234,7 +2234,7 @@ func main(argc: int, argv: **byte, envp: **byte) {
if (i >= argc) {
die("invalid -y at end of argument list");
}
- dolalr(c.a, argv[i], nil);
+ dolalr(c, argv[i], nil);
i = i + 1;
continue;
}
diff --git a/cc4.om b/cc4.om
@@ -119,67 +119,81 @@ lexer {
"lalr" { return LALR; }
["a-zA-Z_"]["a-zA-Z0-9_"]* {
- var s: *byte;
- s = mkstr(ctx.a, &ctx.buf[ctx.start], ctx.end - ctx.start);
+ var n: *node;
+ n = mknode(ctx.c.p, N_IDENT, nil, nil);
+ n.s = mkstr(ctx.a, &ctx.buf[ctx.start], ctx.end - ctx.start);
+ ctx.stack[ctx.stack_len].n = n;
return IDENT;
}
"0x" ["0-9a-fA-F"] (["0-9a-fA-F_"]* ["0-9a-fA-F"])? {
- var x: int;
+ var n: *node;
var ok: int;
- x = hex2int(&ctx.buf[ctx.start + 2], ctx.end - ctx.start - 2, &ok);
+ n = mknode(ctx.c.p, N_NUM, nil, nil);
+ n.n = hex2int(&ctx.buf[ctx.start + 2], ctx.end - ctx.start - 2, &ok);
if !ok {
die("invalid hex");
}
+ ctx.stack[ctx.stack_len].n = n;
return NUMBER;
}
["0-9"] (["0-9_"]* ["0-9"])? {
+ var n: *node;
var x: int;
var ok: int;
- x = dec2int(&ctx.buf[ctx.start], ctx.end - ctx.start, &ok);
+ n = mknode(ctx.c.p, N_NUM, nil, nil);
+ n.n = dec2int(&ctx.buf[ctx.start], ctx.end - ctx.start, &ok);
if !ok {
die("invalid dec");
}
+ ctx.stack[ctx.stack_len].n = n;
return NUMBER;
}
"'" ("\\" . | ["^\\\x27"])* "'" {
+ var n: *node;
var i: int;
var x: int;
var ok: int;
+ n = mknode(ctx.c.p, N_NUM, nil, nil);
i = ctx.start + 1;
- x = unescape(ctx.buf, &i, ctx.end - 1, &ok);
+ n.n = unescape(ctx.buf, &i, ctx.end - 1, &ok);
if !ok || i != ctx.end - 1 {
die("invalid char");
}
+ ctx.stack[ctx.stack_len].n = n;
return NUMBER;
}
"\"" ("\\" . | ["^\\\x22"])* "\"" {
- var s: *byte;
+ var n: *node;
var i: int;
var j: int;
var ok: int;
- s = alloc(ctx.a, ctx.end - ctx.start);
+ n = mknode(ctx.c.p, N_STR, nil, nil);
+ n.s = alloc(ctx.a, ctx.end - ctx.start);
i = ctx.start + 1;
j = 0;
loop {
if i == ctx.end - 1 {
break;
}
- s[j] = unescape(ctx.buf, &i, ctx.end - 1, &ok) as byte;
+ n.s[j] = unescape(ctx.buf, &i, ctx.end - 1, &ok) as byte;
if !ok {
die("invalid string");
}
j = j + 1;
}
+ ctx.stack[ctx.stack_len].n = n;
return STRING;
}
"[\"" (["^\"\\"] | "\\".)* "\"]" {
- var s: *byte;
- s = parse_charset(ctx.a, &ctx.buf[ctx.start + 2], ctx.end - ctx.start - 4);
+ var n: *node;
+ n = mknode(ctx.c.p, N_CHARSET, nil, nil);
+ n.s = parse_charset(ctx.a, &ctx.buf[ctx.start + 2], ctx.end - ctx.start - 4);
+ ctx.stack[ctx.stack_len].n = n;
return CHARSET;
}
@@ -295,7 +309,9 @@ lalr {
l_lexer_rule_list = l_lexer_rule_list l_lexer_rule | l_lexer_rule;
l_lexer_grammar = LEX LEFT_BRACE l_lexer_rule_list RIGHT_BRACE;
- l_lalr_primary = IDENT {} | l_compound_stmt;
+ l_lalr_primary = IDENT {
+ fputd(nil, ctx.sem_len);
+ } | l_compound_stmt;
l_lalr_alternative = l_lalr_primary l_lalr_alternative | ;
l_lalr_pattern = l_lalr_pattern PIPE l_lalr_alternative | l_lalr_alternative;
l_lalr_rule = IDENT ASSIGN l_lalr_pattern SEMI;
diff --git a/lalr.om b/lalr.om
@@ -34,7 +34,6 @@ struct lalr_point {
struct lalr_alt {
prod: int;
id: int;
- action: int;
point: *lalr_point;
point_len: int;
point_cap: int;
@@ -55,6 +54,9 @@ struct lalr_prod {
alt: **lalr_alt;
alt_len: int;
alt_cap: int;
+
+ action: *byte;
+ pos: int;
}
struct lalr_compiler {
@@ -71,10 +73,6 @@ struct lalr_compiler {
root: *lalr_itemset;
goto_queue: *lalr_itemset;
- action: **byte;
- action_len: int;
- action_cap: int;
-
term_len: int;
sets_len: int;
@@ -253,18 +251,17 @@ func lalr_action(lc: *lalr_compiler, a: *lalr_alt, pn: *peg_node) {
var c: *node;
var j: int;
var ch: byte;
- var id: int;
var x: int;
var prod: *lalr_prod;
var alt: *lalr_alt;
s = alloc(lc.a, 64);
n = mknode0(lc.c.p, N_IDENT);
memcpy(s, "lalr_action_", 12);
- int2str(&s[12], id);
+ prod = lalr_mkprod(lc);
+ prod.pos = a.point_len;
+ prod.action = s;
+ int2str(&s[12], prod.id);
n.s = s;
- ensure_arr(lc.a, (&lc.action) as **void, &lc.action_cap, lc.action_len + 1, sizeof(*lc.action));
- lc.action[lc.action_len] = s;
- lc.action_len = lc.action_len + 1;
c = mknode0(lc.c.p, N_IDENT);
c.s = "ctx";
b = mknode0(lc.c.p, N_IDENT);
@@ -277,9 +274,7 @@ func lalr_action(lc: *lalr_compiler, a: *lalr_alt, pn: *peg_node) {
b = reconstruct_compound(lc.c.p, pn);
n = mknode(lc.c.p, N_FUNC, d, b);
defun(lc.c, n);
- prod = lalr_mkprod(lc);
alt = lalr_mkalt(lc, prod);
- alt.action = id + 1;
lalr_alt_nonterminal(lc, a, prod);
}
@@ -1299,13 +1294,7 @@ func lalr_codegen(lc: *lalr_compiler) {
if t.prod == 0 && t.alt == 0 && t.point == 1 {
lc.act_table[i.id * lc.term_len + sym.id] = 'a';
} else {
- action = lc.prod[t.prod].alt[t.alt].action;
- if action {
- action = action - 1;
- lc.act_table[i.id * lc.term_len + sym.id] = (action << 32) + (t.prod << 8) + 'c';
- } else {
- lc.act_table[i.id * lc.term_len + sym.id] = (len << 32) + (t.prod << 8) + 'r';
- }
+ lc.act_table[i.id * lc.term_len + sym.id] = (len << 32) + (t.prod << 8) + 'r';
}
sym = rb_next(&sym.node) as *lalr_point;
@@ -1357,11 +1346,6 @@ func lalr_output(lc: *lalr_compiler) {
irreturn(ic, o);
define_ir_func(lc.c, ic, func_type);
- ic = mkirfunc(lc.c, "get_call_len");
- o = mkirconst(ic, lc.action_len);
- irreturn(ic, o);
- define_ir_func(lc.c, ic, func_type);
-
lalr_compile_get_call_table(lc);
}
@@ -1376,9 +1360,12 @@ func lalr_compile_get_call_table(lc: *lalr_compiler) {
var b: *irop;
var this: *irblock;
var next: *irblock;
+ var prod: *lalr_prod;
var ident: *peg_node;
var i: int;
var v: *irvar;
+ var pos_table: *int;
+ var pos_table_len: int;
arg1_type = mktype0(lc.c, TY_VOID);
arg1_type = mktype1(lc.c, TY_PTR, arg1_type);
@@ -1394,20 +1381,27 @@ func lalr_compile_get_call_table(lc: *lalr_compiler) {
v = iraddarg(ic, "t", arg1_type);
+ pos_table_len = lc.prod_len * sizeof(*pos_table);
+ pos_table = alloc(lc.a, pos_table_len) as *int;
+
i = 0;
loop {
- if i == lc.action_len {
+ if i == lc.prod_len {
break;
}
- a = mkirop(ic, IOP_VAR, nil, nil);
- a.n = v.n;
- b = mkirconst(ic, 8 * i);
- a = mkirop(ic, IOP_ADD, a, b);
- a = mkirop(ic, IOP_LOAD, a, nil);
- b = mkirfuncref(ic, lc.action[i]);
- o = mkirop(ic, IOP_STORE, a, b);
- o.t = arg1_type.val;
- iraddop(ic, o);
+ prod = lc.prod[i];
+ pos_table[i] = prod.pos;
+ if prod.action {
+ a = mkirop(ic, IOP_VAR, nil, nil);
+ a.n = v.n;
+ b = mkirconst(ic, 8 * i);
+ a = mkirop(ic, IOP_ADD, a, b);
+ a = mkirop(ic, IOP_LOAD, a, nil);
+ b = mkirfuncref(ic, prod.action);
+ o = mkirop(ic, IOP_STORE, a, b);
+ o.t = arg1_type.val;
+ iraddop(ic, o);
+ }
i = i + 1;
}
@@ -1415,16 +1409,26 @@ func lalr_compile_get_call_table(lc: *lalr_compiler) {
irreturn(ic, o);
define_ir_func(lc.c, ic, func_type);
+
+ ret_type = mktype0(lc.c, TY_INT);
+ ret_type = mktype1(lc.c, TY_PTR, ret_type);
+
+ func_type = mktype2(lc.c, TY_FUNC, ret_type, nil);
+
+ ic = mkirfunc(lc.c, "get_pos_table");
+ o = mkirstr(ic, pos_table as *byte, pos_table_len);
+ irreturn(ic, o);
+ define_ir_func(lc.c, ic, func_type);
}
func get_act_table(): *int;
func get_goto_table(): *int;
func get_call_table(t: *func(ctx: *void));
+func get_pos_table(): *int;
func get_prod_len(): int;
func get_term_len(): int;
-func get_call_len(): int;
-func dolalr(a: *alloc, name: *byte, out: *file) {
+func dolalr(c: *compiler, name: *byte, out: *file) {
var act_table: *int;
var goto_table: *int;
var tok: int;
@@ -1439,20 +1443,22 @@ func dolalr(a: *alloc, name: *byte, out: *file) {
var stack: *int;
var stack_len: int;
var stack_cap: int;
+ var pos_table: *int;
var call_table: *func(ctx: *lex);
- l = setup_lex(a);
+ l = setup_lex(c);
fd = open(name, 0, 0);
if fd < 0 {
die("open failed");
}
open_lex(l, fd);
- call_table = alloc(a, sizeof(*call_table) * get_call_len()) as *func(ctx: *lex);
+ call_table = alloc(l.a, sizeof(*call_table) * get_prod_len()) as *func(ctx: *lex);
act_table = get_act_table();
goto_table = get_goto_table();
get_call_table(call_table as *func(ctx: *void));
+ pos_table = get_pos_table();
term_len = get_term_len();
prod_len = get_prod_len();
@@ -1470,29 +1476,34 @@ func dolalr(a: *alloc, name: *byte, out: *file) {
act_len = act_table[state * term_len + tok] >> 32;
if act == 's' {
- ensure_arr(a, (&stack) as **void, &stack_cap, stack_len + 1, sizeof(*stack));
+ ensure_arr(l.a, (&stack) as **void, &stack_cap, stack_len + 1, sizeof(*stack));
+ ensure_arr(l.a, (&l.stack) as **void, &l.stack_cap, l.stack_len + 2, sizeof(*l.stack));
stack[stack_len] = state;
stack_len = stack_len + 1;
+ l.stack_len = l.stack_len + 1;
state = act_out;
tok = gettok(l);
} else if act == 'r' {
+ if call_table[act_out] {
+ l.sem_len = pos_table[act_out];
+ l.sem = &l.stack[l.stack_len - l.sem_len];
+ call_table[act_out](l);
+ }
if act_len != 0 {
if act_len > stack_len {
die("stack underflow");
}
+ memcpy((&l.stack[l.stack_len - act_len]) as *byte, (&l.stack[l.stack_len]) as *byte, sizeof(*l.stack));
stack_len = stack_len - act_len;
+ l.stack_len = l.stack_len - act_len;
state = stack[stack_len];
}
- ensure_arr(a, (&stack) as **void, &stack_cap, stack_len + 1, sizeof(*stack));
- stack[stack_len] = state;
- stack_len = stack_len + 1;
- state = goto_table[state * prod_len + act_out];
- } else if act == 'c' {
- ensure_arr(a, (&stack) as **void, &stack_cap, stack_len + 1, sizeof(*stack));
+ ensure_arr(l.a, (&stack) as **void, &stack_cap, stack_len + 1, sizeof(*stack));
+ ensure_arr(l.a, (&l.stack) as **void, &l.stack_cap, l.stack_len + 2, sizeof(*l.stack));
stack[stack_len] = state;
stack_len = stack_len + 1;
+ l.stack_len = l.stack_len + 1;
state = goto_table[state * prod_len + act_out];
- call_table[act_len](l);
} else if act == 'a' {
if tok != term_len - 1 {
die("accept not at eof");
diff --git a/lexer.om b/lexer.om
@@ -1305,6 +1305,7 @@ func get_link_table(): *int;
struct lex {
a: *alloc;
+ c: *compiler;
tag: *(func(ctx: *lex):int);
link: *int;
@@ -1325,15 +1326,27 @@ struct lex {
start_colno: int;
end_lineno: int;
end_colno: int;
+
+ sem: *lex_sem;
+ sem_len: int;
+
+ stack: *lex_sem;
+ stack_len: int;
+ stack_cap: int;
+}
+
+struct lex_sem {
+ n: *node;
}
-func setup_lex(a: *alloc): *lex {
+func setup_lex(c: *compiler): *lex {
var l: *lex;
var i: int;
- l = alloc(a, sizeof(*l)) as *lex;
- l.a = a;
+ l = alloc(c.a, sizeof(*l)) as *lex;
+ l.a = c.a;
+ l.c = c;
i = get_num_states();
- l.tag = alloc(a, sizeof(*l.tag) * i) as *(func(ctx:*lex):int);
+ l.tag = alloc(l.a, sizeof(*l.tag) * i) as *(func(ctx:*lex):int);
get_tag_table(l.tag as *(func(ctx: *void):int));
l.link = get_link_table();
l.fd = 0;
@@ -1348,6 +1361,12 @@ func setup_lex(a: *alloc): *lex {
l.start_colno = 1;
l.end_lineno = 1;
l.end_colno = 1;
+ l.sem = nil;
+ l.sem_len = 0;
+ l.stack = nil;
+ l.stack_len = 0;
+ l.stack_cap = 0;
+ ensure_arr(l.a, (&l.stack) as **void, &l.stack_cap, l.stack_len + 2, sizeof(*l.stack));
return l;
}
@@ -1478,11 +1497,11 @@ func gettok(l: *lex): int {
}
}
-func dolex(a: *alloc, name: *byte, out: *file) {
+func dolex(c: *compiler, name: *byte, out: *file) {
var l: *lex;
var fd: int;
var tok: int;
- l = setup_lex(a);
+ l = setup_lex(c);
fd = open(name, 0, 0);
if fd < 0 {
die("open failed");
diff --git a/node.om b/node.om
@@ -74,6 +74,7 @@ enum {
N_DIV,
N_MOD,
N_LEXER,
+ N_CHARSET,
N_GRAMMAR,
}