os

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

commit 40b0a2c21748fb95d7b3c2455fae94f3a80c41af
parent b252a2eca539aee94d9c166068820f55863cdb6f
Author: erai <erai@omiltem.net>
Date:   Sat, 26 Apr 2025 19:58:54 -0400

add line numbers

Diffstat:
Mcc0.c | 466++++++++++++++++++++++++++-----------------------------------------------------
Mcc1.om | 21---------------------
Mlalr.om | 11+++++++++++
Mlexer.om | 3+++
Mnode.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; }