diff options
| author | kitty <nepeta@canaglie.net> | 2026-02-27 17:03:30 +1100 |
|---|---|---|
| committer | kitty <nepeta@canaglie.net> | 2026-02-27 17:03:30 +1100 |
| commit | cb441fd2ddedbb6762f5bd2a2fca2f6fb7d60931 (patch) | |
| tree | 45098b35a9ed29291f19de1941ae5259fa6f39ea | |
| parent | a6601fef71e3c9711e21af680ef0b6ef26deb473 (diff) | |
VALUE, and make handler a value
| -rw-r--r-- | jefs.fs | 9 | ||||
| -rw-r--r-- | jefs.s | 18 |
2 files changed, 24 insertions, 3 deletions
@@ -3,6 +3,7 @@ \ :noname \ DO LOOP \ s\" +\ add error handling to compiling words \ <builds does> \ argc/argv \ file io @@ -64,6 +65,10 @@ hex : ret, c3 c, ; decimal : endcase ' drop compile, begin ?dup while [compile] then repeat ; immediate \ }}} +: value create [compile] lit ret, ; +: to parse find drop >cfa 6 + state @ if + [compile] lit ' ! compile, else ! then ; immediate + \ TODO interpret mode strings? : s" 1 >in +! [ char " ] literal cparse branch >mark >r 2dup cmove, nip r> dup >resolve 4 + [compile] lit [compile] lit ; immediate : ." [compile] s" ' say compile, ; immediate \ lol this word breaks the highlighting, here have another " @@ -202,7 +207,7 @@ variable hld 2 of ." word not found" endof ." unknown error" endcase cr fuck ; -: _ ' (handler) handler ! ; _ \ i should do immediate ' at some point +: _ ' (handler) to handler ; _ \ i should do immediate ' at some point : >ffa ( lfa -- ffa ) 8 + ; : >nfa ( lfa -- nfa ) 9 + ; @@ -250,7 +255,7 @@ make file-buffer file-buffer-length allot : open-file ( mode zstr -- ?fd flag ) 0 -rot sysopen errno ; : close-file ( fd -- flag ) sysclose errno-flag ; : read-file ( c-addr u fd -- ?u flag ) >r swap r> sysread errno ; -: write-file ( c-addr u fd -- ?u flag ) >r swap r> syswrite errno ; +: write-file ( c-addr u fd -- ?u flag ) >r swap r> syswrite errno ; \ }}} .free bye @@ -53,6 +53,21 @@ ret %endmacro +; compiles a LIT and puts a label at the value +; It Should Be Fine + ; lea r14, [r14-8] 4D 8D 76 F8 + ; mov r11, 0xfefefefefefeffff 49 BB [LIT] + ; mov qword [r14], r11 4D 89 1E +%macro defvalue 4 ; ... default-value + defdict %1, %2, %3 + lea r14, [r14-8] + db 0x49 + db 0xbb + %2: dq %4 + mov qword [r14], r11 + ret +%endmacro + %assign smudge_mask 0x1 %assign immediate_mask 0x2 @@ -1164,7 +1179,8 @@ defvar "rs0", rs0, 0, 0 defvar "hend", hend, 0, umem_e ; ending of user memory area defvar "base", base, 0, 10 defvar "error", error, 0, 0 -defvar "handler", handler, 0, brac_handler +; defvar "handler", handler, 0, brac_handler +defvalue "handler", handler, 0, brac_handler defvar "latest", latest, 0, lfa_latest initfile: |
