os

An operating system
git clone https://erai.gay/code/os/
Log | Files | Refs | README | LICENSE

commit 740f7e3a62b8d53fae9498805e75130c2912be78
parent 0b0584876c8c4155e02b809444f64272d6a7f626
Author: erai <erai@omiltem.net>
Date:   Wed, 23 Apr 2025 17:37:15 -0400

add semantic stack to parser

Diffstat:
Mcc0.c | 1569++++++++++++++++++++++++++++++++++++++++++++-----------------------------------
Mcc1.om | 4++--
Mcc4.om | 40++++++++++++++++++++++++++++------------
Mlalr.om | 103++++++++++++++++++++++++++++++++++++++++++++-----------------------------------
Mlexer.om | 31+++++++++++++++++++++++++------
Mnode.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, }