From cb441fd2ddedbb6762f5bd2a2fca2f6fb7d60931 Mon Sep 17 00:00:00 2001 From: kitty Date: Fri, 27 Feb 2026 17:03:30 +1100 Subject: VALUE, and make handler a value --- jefs.fs | 9 +++++++-- jefs.s | 18 +++++++++++++++++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/jefs.fs b/jefs.fs index 18ea7e1..e80b1d7 100644 --- a/jefs.fs +++ b/jefs.fs @@ -3,6 +3,7 @@ \ :noname \ DO LOOP \ s\" +\ add error handling to compiling words \ \ 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 diff --git a/jefs.s b/jefs.s index f7ad9ac..39ba06e 100644 --- a/jefs.s +++ b/jefs.s @@ -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: -- cgit v1.2.3