summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkitty <nepeta@canaglie.net>2026-02-27 17:03:30 +1100
committerkitty <nepeta@canaglie.net>2026-02-27 17:03:30 +1100
commitcb441fd2ddedbb6762f5bd2a2fca2f6fb7d60931 (patch)
tree45098b35a9ed29291f19de1941ae5259fa6f39ea
parenta6601fef71e3c9711e21af680ef0b6ef26deb473 (diff)
VALUE, and make handler a value
-rw-r--r--jefs.fs9
-rw-r--r--jefs.s18
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
\ <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
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: