Define CREATE

This commit is contained in:
2026-02-28 18:53:52 +00:00
parent 43b6a6978f
commit 1321a0e5a9

View File

@@ -1861,6 +1861,47 @@
;; => 0x40 bytes ;; => 0x40 bytes
;; : CREATE
;; HERE @ \ Get initial address
;; LATEST @ OVER ! 4+ \ Write link
;; 2DUP C! 1+ \ Write length
;; 2DUP WORDBUF SWAP COPY + \ Write name
;; ALIGN \ Pad to alignment
;;
;; HERE @ LATEST ! \ Update LATEST
;; HERE ! \ Update HERE
;; ;
(data (i32.const 0x0d0c)
"\cc\0c\00\00"
"\06CREATE\00"
"\00\00\00\00"
"\84\05\00\00" ;; HERE
"\cc\03\00\00" ;; @
"\98\05\00\00" ;; LATEST
"\cc\03\00\00" ;; @
"\54\02\00\00" ;; OVER
"\c0\03\00\00" ;; !
"\a8\02\00\00" ;; 4+
"\64\02\00\00" ;; 2DUP
"\f0\03\00\00" ;; C!
"\90\02\00\00" ;; 1+
"\64\02\00\00" ;; 2DUP
"\ac\05\00\00" ;; WORDBUF
"\28\02\00\00" ;; SWAP
"\fc\0b\00\00" ;; COPY
"\c0\02\00\00" ;; +
"\5c\0c\00\00" ;; ALIGN
"\84\05\00\00" ;; HERE
"\cc\03\00\00" ;; @
"\98\05\00\00" ;; LATEST
"\c0\03\00\00" ;; !
"\84\05\00\00" ;; HERE
"\c0\03\00\00" ;; !
"\0c\04\00\00") ;; EXIT
;; => 0x6c bytes
;; The trampoline is a workaround for WebAssembly's lack of indirect ;; The trampoline is a workaround for WebAssembly's lack of indirect
;; jumps and code addresses. Instead of jumping into the next ;; jumps and code addresses. Instead of jumping into the next
;; codeword, NEXT sets the $fn global to the function index of the ;; codeword, NEXT sets the $fn global to the function index of the