commit 40b0a2c21748fb95d7b3c2455fae94f3a80c41af
parent b252a2eca539aee94d9c166068820f55863cdb6f
Author: erai <erai@omiltem.net>
Date: Sat, 26 Apr 2025 19:58:54 -0400
add line numbers
Diffstat:
M | cc0.c | | | 466 | ++++++++++++++++++++++++++----------------------------------------------------- |
M | cc1.om | | | 21 | --------------------- |
M | lalr.om | | | 11 | +++++++++++ |
M | lexer.om | | | 3 | +++ |
M | node.om | | | 4 | +++- |
5 files changed, 169 insertions(+), 336 deletions(-)
diff --git a/cc0.c b/cc0.c
@@ -50,7 +50,6 @@ u zdfamin_setup();
u zdfamin_split();
u zdie();
u zdolalr();
-u zdolex();
u zemit();
u zemit_align();
u zemit_blobs();
@@ -71,7 +70,6 @@ u zfirst_decl();
u zfixup();
u zfixup_label();
u zfopen();
-u zfputb();
u zfputc();
u zfputd();
u zfputh();
@@ -4380,6 +4378,7 @@ u zdolalr(u vc, u vname, u vout) {
u v145 = 0;
u v146 = 0;
u v147 = 0;
+ u v148 = 0;
v19 = (u)zsetup_lex;
v20 = vc;
v21 = ((u(*)())v19)(v20);
@@ -4426,6 +4425,9 @@ b3: v30 = (u)zopen_lex;
v51 = (u)zget_prod_len;
v52 = ((u(*)())v51)();
vprod_len = v52;
+ *(u*)(vc + 24UL) = vname;
+ *(u*)(vc + 32UL) = 1UL;
+ *(u*)(vc + 40UL) = 1UL;
vstate = 0UL;
*(u*)(vl + 144UL) = vl + 136UL;
v53 = (u)zgettok;
@@ -4502,14 +4504,14 @@ b48: vstack_len = vstack_len - vact_len;
v102 = ((u(*)())v98)(v99, v100, v101);
v102;
b45: *(u*)(vl + 176UL) = *(u*)(vl + 176UL) - vact_len + 1UL;
- v111 = (u)zensure_arr;
- v112 = *(u*)(vl + 0UL);
- v113 = (u)&vstack;
- v114 = (u)&vstack_cap;
- v115 = vstack_len + 1UL;
- v116 = 8UL;
- v117 = ((u(*)())v111)(v112, v113, v114, v115, v116);
- v117;
+ v112 = (u)zensure_arr;
+ v113 = *(u*)(vl + 0UL);
+ v114 = (u)&vstack;
+ v115 = (u)&vstack_cap;
+ v116 = vstack_len + 1UL;
+ v117 = 8UL;
+ v118 = ((u(*)())v112)(v113, v114, v115, v116, v117);
+ v118;
*(u*)(vstack + vstack_len * 8UL) = vstate;
vstack_len = vstack_len + 1UL;
vstate = *(u*)(vgoto_table + (vstate * vprod_len + vact_out) * 8UL);
@@ -4519,61 +4521,72 @@ b47: *(u*)(vl + 160UL) = *(u*)(vpos_table + vact_out * 8UL);
*(u*)(vl + 152UL) = *(u*)(vl + 168UL) + (*(u*)(vl + 176UL) - *(u*)(vl + 160UL)) * 8UL;
if (!*(u*)(vcall_table + vact_out * 8UL)) goto b55;
*(u*)(vl + 144UL) = *(u*)(vl + 168UL) + *(u*)(vl + 176UL) * 8UL;
- v103 = *(u*)(vcall_table + vact_out * 8UL);
- v104 = vl;
- v105 = ((u(*)())v103)(v104);
- v105;
+ if (*(u*)(vl + 160UL) == 0UL) goto b60;
+ if (!*(u*)(*(u*)(vl + 152UL) + 0UL * 8UL + 0UL)) goto b60;
+ v103 = 1UL;
+b62: if (!v103) goto b58;
+ *(u*)(*(u*)(vl + 8UL) + 32UL) = *(u*)(*(u*)(*(u*)(vl + 152UL) + 0UL * 8UL + 0UL) + 32UL);
+ *(u*)(*(u*)(vl + 8UL) + 40UL) = *(u*)(*(u*)(*(u*)(vl + 152UL) + 0UL * 8UL + 0UL) + 40UL);
+b56: v104 = *(u*)(vcall_table + vact_out * 8UL);
+ v105 = vl;
+ v106 = ((u(*)())v104)(v105);
+ v106;
*(u*)(vl + 144UL) = vl + 136UL;
b53: goto b45;
-b55: v106 = (u)zmemset;
- v107 = *(u*)(vl + 168UL) + *(u*)(vl + 176UL) * 8UL;
- v108 = 0UL;
- v109 = 8UL;
- v110 = ((u(*)())v106)(v107, v108, v109);
- v110;
+b58: *(u*)(*(u*)(vl + 8UL) + 32UL) = *(u*)(vl + 104UL);
+ *(u*)(*(u*)(vl + 8UL) + 40UL) = *(u*)(vl + 112UL);
+ goto b56;
+b60: v103 = 0UL;
+ goto b62;
+b55: v107 = (u)zmemset;
+ v108 = *(u*)(vl + 168UL) + *(u*)(vl + 176UL) * 8UL;
+ v109 = 0UL;
+ v110 = 8UL;
+ v111 = ((u(*)())v107)(v108, v109, v110);
+ v111;
goto b53;
-b43: if (vact != 97UL) goto b60;
- if (vtok == vterm_len - 1UL) goto b63;
- v118 = (u)zdie;
- v119 = (u)"accept not at eof";
- v120 = ((u(*)())v118)(v119);
- v120;
-b61: return *(u*)(vl + 168UL) + 0UL * 8UL;
-b63: goto b61;
-b60: v121 = (u)zfputs;
- v122 = 0UL;
- v123 = (u)"on ";
- v124 = ((u(*)())v121)(v122, v123);
- v124;
- v125 = (u)zfputs;
- v126 = 0UL;
- v127 = vname;
- v128 = ((u(*)())v125)(v126, v127);
- v128;
- v129 = (u)zfputs;
- v130 = 0UL;
- v131 = (u)":";
- v132 = ((u(*)())v129)(v130, v131);
- v132;
- v133 = (u)zfputd;
- v134 = 0UL;
- v135 = *(u*)(vl + 104UL);
- v136 = ((u(*)())v133)(v134, v135);
- v136;
- v137 = (u)zfputs;
- v138 = 0UL;
- v139 = (u)":";
- v140 = ((u(*)())v137)(v138, v139);
- v140;
- v141 = (u)zfputd;
- v142 = 0UL;
- v143 = *(u*)(vl + 112UL);
- v144 = ((u(*)())v141)(v142, v143);
- v144;
- v145 = (u)zdie;
- v146 = (u)" syntax error";
- v147 = ((u(*)())v145)(v146);
- v147;
+b43: if (vact != 97UL) goto b67;
+ if (vtok == vterm_len - 1UL) goto b70;
+ v119 = (u)zdie;
+ v120 = (u)"accept not at eof";
+ v121 = ((u(*)())v119)(v120);
+ v121;
+b68: return *(u*)(vl + 168UL) + 0UL * 8UL;
+b70: goto b68;
+b67: v122 = (u)zfputs;
+ v123 = 0UL;
+ v124 = (u)"on ";
+ v125 = ((u(*)())v122)(v123, v124);
+ v125;
+ v126 = (u)zfputs;
+ v127 = 0UL;
+ v128 = vname;
+ v129 = ((u(*)())v126)(v127, v128);
+ v129;
+ v130 = (u)zfputs;
+ v131 = 0UL;
+ v132 = (u)":";
+ v133 = ((u(*)())v130)(v131, v132);
+ v133;
+ v134 = (u)zfputd;
+ v135 = 0UL;
+ v136 = *(u*)(vl + 104UL);
+ v137 = ((u(*)())v134)(v135, v136);
+ v137;
+ v138 = (u)zfputs;
+ v139 = 0UL;
+ v140 = (u)":";
+ v141 = ((u(*)())v138)(v139, v140);
+ v141;
+ v142 = (u)zfputd;
+ v143 = 0UL;
+ v144 = *(u*)(vl + 112UL);
+ v145 = ((u(*)())v142)(v143, v144);
+ v145;
+ v146 = (u)zdie;
+ v147 = (u)" syntax error";
+ v148 = ((u(*)())v146)(v147);
+ v148;
goto b34;
b21: if ((s)vtok >= (s)0UL) goto b29;
v57 = 1UL;
@@ -4593,95 +4606,6 @@ b23: v56 = 0UL;
goto b25;
b5: goto b3;
}
-u zdolex(u vc, u vname, u vout) {
- u vl = 0;
- u vfd = 0;
- u vtok = 0;
- u v6 = 0;
- u v7 = 0;
- u v8 = 0;
- u v9 = 0;
- u v10 = 0;
- u v11 = 0;
- u v12 = 0;
- u v13 = 0;
- u v14 = 0;
- 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;
- u v25 = 0;
- u v26 = 0;
- u v27 = 0;
- u v28 = 0;
- u v29 = 0;
- u v30 = 0;
- u v31 = 0;
- u v32 = 0;
- u v33 = 0;
- u v34 = 0;
- u v35 = 0;
- u v36 = 0;
- u v37 = 0;
- u v38 = 0;
- u v39 = 0;
- v6 = (u)zsetup_lex;
- v7 = vc;
- v8 = ((u(*)())v6)(v7);
- vl = v8;
- v9 = (u)zopen;
- v10 = vname;
- v11 = 0UL;
- v12 = 0UL;
- v13 = ((u(*)())v9)(v10, v11, v12);
- vfd = v13;
- if ((s)vfd >= (s)0UL) goto b5;
- v14 = (u)zdie;
- v15 = (u)"open failed";
- v16 = ((u(*)())v14)(v15);
- v16;
-b3: v17 = (u)zopen_lex;
- v18 = vl;
- v19 = vfd;
- v20 = ((u(*)())v17)(v18, v19);
- v20;
-b8: v21 = (u)zgettok;
- v22 = vl;
- v23 = ((u(*)())v21)(v22);
- vtok = v23;
- if ((s)vtok >= (s)0UL) goto b13;
- v24 = (u)zdie;
- v25 = (u)"problem";
- v26 = ((u(*)())v24)(v25);
- v26;
-b11: if (vtok != 0UL) goto b17;
- return 0UL;
-b17: v27 = (u)zfputs;
- v28 = vout;
- v29 = (u)"\011'";
- v30 = ((u(*)())v27)(v28, v29);
- v30;
- v31 = (u)zfputb;
- v32 = vout;
- 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;
- v37 = vout;
- v38 = (u)"'\012";
- v39 = ((u(*)())v36)(v37, v38);
- v39;
- goto b8;
-b13: goto b11;
-b5: goto b3;
-}
u zemit(u vc, u vx) {
u v2 = 0;
u v3 = 0;
@@ -16558,23 +16482,6 @@ u zfopen(u vfd, u va) {
*(u*)(vf + 16UL) = v10;
return vf;
}
-u zfputb(u vf, u vs, u vn) {
- u vi = 0;
- u v4 = 0;
- u v5 = 0;
- u v6 = 0;
- u v7 = 0;
- vi = 0UL;
-b1: if ((s)vi < (s)vn) goto b5;
- return 0UL;
-b5: v4 = (u)zfputc;
- v5 = vf;
- v6 = (u)*(b*)(vs + vi * 1UL);
- v7 = ((u(*)())v4)(v5, v6);
- v7;
- vi = vi + 1UL;
- goto b1;
-}
u zfputc(u vf, u vch) {
u vb = 0;
u v3 = 0;
@@ -27223,6 +27130,8 @@ b3: vptr = *(u*)(vl + 72UL);
*(u*)(vl + 64UL) = vptr;
*(u*)(vl + 104UL) = vlineno;
*(u*)(vl + 112UL) = vcolno;
+ *(u*)(*(u*)(vl + 8UL) + 32UL) = vlineno;
+ *(u*)(*(u*)(vl + 8UL) + 40UL) = vcolno;
*(u*)(vl + 120UL) = vlineno;
*(u*)(vl + 128UL) = vcolno;
vstate = 0UL;
@@ -39881,32 +39790,6 @@ u zmain(u vargc, u vargv, u venvp) {
u v115 = 0;
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;
vlink = (u)&vinput;
v15 = (u)zsetup_alloc;
v16 = (u)&va;
@@ -39925,69 +39808,69 @@ u zmain(u vargc, u vargv, u venvp) {
vi = 1UL;
b4: if ((s)vi < (s)vargc) goto b8;
vtmp = vinput;
-b91: if (!vtmp) goto b97;
- v104 = 0UL;
-b98: if (!v104) goto b95;
- if (!vshow) goto b103;
- v114 = (u)zshow_node;
- v115 = verr;
- v116 = vp;
- v117 = ((u(*)())v114)(v115, v116);
- v117;
- v118 = (u)zfflush;
- v119 = verr;
- v120 = ((u(*)())v118)(v119);
- v120;
+b67: if (!vtmp) goto b73;
+ v78 = 0UL;
+b74: if (!v78) goto b71;
+ if (!vshow) goto b79;
+ v88 = (u)zshow_node;
+ v89 = verr;
+ v90 = vp;
+ v91 = ((u(*)())v88)(v89, v90);
+ v91;
+ v92 = (u)zfflush;
+ v93 = verr;
+ v94 = ((u(*)())v92)(v93);
+ v94;
return 0UL;
-b103: v121 = (u)zcompile;
- v122 = vc;
- v123 = vp;
- v124 = ((u(*)())v121)(v122, v123);
- v124;
- if (!vcout_filename) goto b109;
- v125 = (u)zopen_coutput;
- v126 = vc;
- v127 = vcout_filename;
- v128 = ((u(*)())v125)(v126, v127);
- v128;
- v129 = (u)zircout;
- v130 = vc;
- v131 = ((u(*)())v129)(v130);
- v131;
-b107: v132 = (u)zemit_builtin;
- v133 = vc;
- v134 = ((u(*)())v132)(v133);
- v134;
- if (!vout_filename) goto b115;
- v135 = (u)zopen_output;
- v136 = *(u*)(vc + 48UL);
- v137 = vout_filename;
- v138 = ((u(*)())v135)(v136, v137);
- v138;
- v139 = (u)zwriteout;
- v140 = *(u*)(vc + 48UL);
- v141 = *(u*)(vc + 88UL);
- v142 = *(u*)(vc + 96UL);
- v143 = ((u(*)())v139)(v140, v141, v142);
- v143;
-b113: return 0UL;
-b115: goto b113;
-b109: goto b107;
-b95: v105 = (u)zdolalr;
- v106 = vc;
- v107 = *(u*)(vtmp + 8UL);
- v108 = verr;
- v109 = ((u(*)())v105)(v106, v107, v108);
- vsem = v109;
- v110 = (u)zconcat_program;
- v111 = vp;
- v112 = *(u*)(vsem + 0UL);
- v113 = ((u(*)())v110)(v111, v112);
- vp = v113;
+b79: v95 = (u)zcompile;
+ v96 = vc;
+ v97 = vp;
+ v98 = ((u(*)())v95)(v96, v97);
+ v98;
+ if (!vcout_filename) goto b85;
+ v99 = (u)zopen_coutput;
+ v100 = vc;
+ v101 = vcout_filename;
+ v102 = ((u(*)())v99)(v100, v101);
+ v102;
+ v103 = (u)zircout;
+ v104 = vc;
+ v105 = ((u(*)())v103)(v104);
+ v105;
+b83: v106 = (u)zemit_builtin;
+ v107 = vc;
+ v108 = ((u(*)())v106)(v107);
+ v108;
+ if (!vout_filename) goto b91;
+ v109 = (u)zopen_output;
+ v110 = *(u*)(vc + 48UL);
+ v111 = vout_filename;
+ v112 = ((u(*)())v109)(v110, v111);
+ v112;
+ v113 = (u)zwriteout;
+ v114 = *(u*)(vc + 48UL);
+ v115 = *(u*)(vc + 88UL);
+ v116 = *(u*)(vc + 96UL);
+ v117 = ((u(*)())v113)(v114, v115, v116);
+ v117;
+b89: return 0UL;
+b91: goto b89;
+b85: goto b83;
+b71: v79 = (u)zdolalr;
+ v80 = vc;
+ v81 = *(u*)(vtmp + 8UL);
+ v82 = verr;
+ v83 = ((u(*)())v79)(v80, v81, v82);
+ vsem = v83;
+ v84 = (u)zconcat_program;
+ v85 = vp;
+ v86 = *(u*)(vsem + 0UL);
+ v87 = ((u(*)())v84)(v85, v86);
+ vp = v87;
vtmp = *(u*)(vtmp + 0UL);
- goto b91;
-b97: v104 = 1UL;
- goto b98;
+ goto b67;
+b73: v78 = 1UL;
+ goto b74;
b8: v27 = (u)zstrcmp;
v28 = *(u*)(vargv + vi * 8UL);
v29 = (u)"-o";
@@ -40074,71 +39957,23 @@ b57: v67 = (u)zopen_lines_out;
vi = vi + 1UL;
goto b4;
b59: goto b57;
-b52: v72 = (u)zstrcmp;
- v73 = *(u*)(vargv + vi * 8UL);
- v74 = (u)"-l";
- v75 = ((u(*)())v72)(v73, v74);
- if (!v75) goto b66;
- v71 = 0UL;
-b67: if (!v71) goto b64;
- vi = vi + 1UL;
- if ((s)vi < (s)vargc) goto b71;
- v76 = (u)zdie;
- v77 = (u)"invalid -l at end of argument list";
- v78 = ((u(*)())v76)(v77);
- v78;
-b69: v79 = (u)zdolex;
- v80 = vc;
- v81 = *(u*)(vargv + vi * 8UL);
- v82 = verr;
- v83 = ((u(*)())v79)(v80, v81, v82);
- v83;
- vi = vi + 1UL;
- goto b4;
-b71: goto b69;
-b64: v85 = (u)zstrcmp;
- v86 = *(u*)(vargv + vi * 8UL);
- v87 = (u)"-y";
- v88 = ((u(*)())v85)(v86, v87);
- if (!v88) goto b78;
- v84 = 0UL;
-b79: if (!v84) goto b76;
- vi = vi + 1UL;
- if ((s)vi < (s)vargc) goto b83;
- v89 = (u)zdie;
- v90 = (u)"invalid -y at end of argument list";
- v91 = ((u(*)())v89)(v90);
- v91;
-b81: v92 = (u)zdolalr;
- v93 = vc;
- v94 = *(u*)(vargv + vi * 8UL);
- v95 = verr;
- v96 = ((u(*)())v92)(v93, v94, v95);
- v96;
- vi = vi + 1UL;
- goto b4;
-b83: goto b81;
-b76: if ((u)*(b*)(*(u*)(vargv + vi * 8UL) + 0UL * 1UL) != 45UL) goto b88;
- v97 = (u)zdie;
- v98 = (u)"invalid argument";
- v99 = ((u(*)())v97)(v98);
- v99;
-b86: v100 = (u)zalloc;
- v101 = (u)&va;
- v102 = 16UL;
- v103 = ((u(*)())v100)(v101, v102);
- vtmp = v103;
+b52: if ((u)*(b*)(*(u*)(vargv + vi * 8UL) + 0UL * 1UL) != 45UL) goto b64;
+ v71 = (u)zdie;
+ v72 = (u)"invalid argument";
+ v73 = ((u(*)())v71)(v72);
+ v73;
+b62: v74 = (u)zalloc;
+ v75 = (u)&va;
+ v76 = 16UL;
+ v77 = ((u(*)())v74)(v75, v76);
+ vtmp = v77;
*(u*)(vtmp + 0UL) = 0UL;
*(u*)(vtmp + 8UL) = *(u*)(vargv + vi * 8UL);
*(u*)vlink = vtmp;
vlink = vtmp + 0UL;
vi = vi + 1UL;
goto b4;
-b88: goto b86;
-b78: v84 = 1UL;
- goto b79;
-b66: v71 = 1UL;
- goto b67;
+b64: goto b62;
b54: v59 = 1UL;
goto b55;
b42: v47 = 1UL;
@@ -40737,6 +40572,9 @@ u zmknode(u vc, u vkind, u va, u vb) {
*(u*)(vret + 48UL) = 0UL;
*(u*)(vret + 56UL) = 0UL;
*(u*)(vret + 64UL) = 0UL;
+ *(u*)(vret + 24UL) = *(u*)(*(u*)(vc + 8UL) + 24UL);
+ *(u*)(vret + 32UL) = *(u*)(*(u*)(vc + 8UL) + 32UL);
+ *(u*)(vret + 40UL) = *(u*)(*(u*)(vc + 8UL) + 40UL);
return vret;
}
u zmknode0(u vc, u vkind) {
diff --git a/cc1.om b/cc1.om
@@ -2238,26 +2238,6 @@ func main(argc: int, argv: **byte, envp: **byte) {
continue;
}
- if !strcmp(argv[i], "-l") {
- i = i + 1;
- if (i >= argc) {
- die("invalid -l at end of argument list");
- }
- dolex(c, argv[i], err);
- i = i + 1;
- continue;
- }
-
- if !strcmp(argv[i], "-y") {
- i = i + 1;
- if (i >= argc) {
- die("invalid -y at end of argument list");
- }
- dolalr(c, argv[i], err);
- i = i + 1;
- continue;
- }
-
if (argv[i][0] == '-' as byte) {
die("invalid argument");
}
@@ -2280,7 +2260,6 @@ func main(argc: int, argv: **byte, envp: **byte) {
p = concat_program(p, sem.n);
tmp = tmp.next;
}
- //show_node(nil, p);
if show {
show_node(err, p);
diff --git a/lalr.om b/lalr.om
@@ -1448,6 +1448,10 @@ func dolalr(c: *compiler, name: *byte, out: *file): *lex_sem {
term_len = get_term_len();
prod_len = get_prod_len();
+ c.filename = name;
+ c.lineno = 1;
+ c.colno = 1;
+
state = 0;
l.val = &l._val;
tok = gettok(l);
@@ -1488,6 +1492,13 @@ func dolalr(c: *compiler, name: *byte, out: *file): *lex_sem {
l.sem = &l.stack[l.stack_len - l.sem_len];
if call_table[act_out] {
l.val = &l.stack[l.stack_len];
+ if l.sem_len != 0 && l.sem[0].n {
+ l.c.lineno = l.sem[0].n.lineno;
+ l.c.colno = l.sem[0].n.colno;
+ } else {
+ l.c.lineno = l.start_lineno;
+ l.c.colno = l.start_colno;
+ }
call_table[act_out](l);
l.val = &l._val;
} else {
diff --git a/lexer.om b/lexer.om
@@ -1332,6 +1332,9 @@ func gettok(l: *lex): int {
l.start_lineno = lineno;
l.start_colno = colno;
+ l.c.lineno = lineno;
+ l.c.colno = colno;
+
l.end_lineno = lineno;
l.end_colno = colno;
diff --git a/node.om b/node.om
@@ -101,7 +101,9 @@ func mknode(c: *parser, kind: int, a: *node, b: *node): *node {
ret.n = 0;
ret.s = nil;
ret.t = nil;
- //fillpos(c, ret);
+ ret.filename = c.c.filename;
+ ret.lineno = c.c.lineno;
+ ret.colno = c.c.colno;
return ret;
}