summaryrefslogtreecommitdiffstats
path: root/qemu/roms/openbios/forth/lib/locals.fs
diff options
context:
space:
mode:
Diffstat (limited to 'qemu/roms/openbios/forth/lib/locals.fs')
-rw-r--r--qemu/roms/openbios/forth/lib/locals.fs197
1 files changed, 0 insertions, 197 deletions
diff --git a/qemu/roms/openbios/forth/lib/locals.fs b/qemu/roms/openbios/forth/lib/locals.fs
deleted file mode 100644
index e697383b6..000000000
--- a/qemu/roms/openbios/forth/lib/locals.fs
+++ /dev/null
@@ -1,197 +0,0 @@
-\ tag: local variables
-\
-\ Copyright (C) 2012 Mark Cave-Ayland
-\
-\ See the file "COPYING" for further information about
-\ the copyright and warranty status of this work.
-\
-
-[IFDEF] CONFIG_LOCALS
-
-\ Init local variable stack
-variable locals-var-stack
-here 200 cells allot locals-var-stack !
-
-\ Set initial stack pointer
-\
-\ Stack looks like this:
-\ ... (sp n-2) local1 ... localm-1 localm (sp n-1) <-- sp
-
-locals-var-stack @ value locals-var-sp
-locals-var-sp locals-var-stack @ !
-
-0 value locals-var-count
-0 value locals-flags
-
-here 200 cells allot locals-dict-buf !
-
-8 constant #locals
-
-: (local1) locals-var-sp @ /n + ;
-: (local2) locals-var-sp @ 2 cells + ;
-: (local3) locals-var-sp @ 3 cells + ;
-: (local4) locals-var-sp @ 4 cells + ;
-: (local5) locals-var-sp @ 5 cells + ;
-: (local6) locals-var-sp @ 6 cells + ;
-: (local7) locals-var-sp @ 7 cells + ;
-: (local8) locals-var-sp @ 8 cells + ;
-
-: local1@ (local1) @ ;
-: local2@ (local2) @ ;
-: local3@ (local3) @ ;
-: local4@ (local4) @ ;
-: local5@ (local5) @ ;
-: local6@ (local6) @ ;
-: local7@ (local7) @ ;
-: local8@ (local8) @ ;
-
-: local1! (local1) ! ;
-: local2! (local2) ! ;
-: local3! (local3) ! ;
-: local4! (local4) ! ;
-: local5! (local5) ! ;
-: local6! (local6) ! ;
-: local7! (local7) ! ;
-: local8! (local8) ! ;
-
-create locals-read-table
-['] local1@ ,
-['] local2@ ,
-['] local3@ ,
-['] local4@ ,
-['] local5@ ,
-['] local6@ ,
-['] local7@ ,
-['] local8@ ,
-
-create locals-write-table
-['] local1! ,
-['] local2! ,
-['] local3! ,
-['] local4! ,
-['] local5! ,
-['] local6! ,
-['] local7! ,
-['] local8! ,
-
-
-: locals-push ( n -- )
- locals-var-sp /n + to locals-var-sp
- locals-var-sp !
-;
-
-: locals-0-push ( -- )
- 0 locals-push
-;
-
-: (apply-local-flags) ( lfa -- )
- 1 - dup c@ locals-flags or swap c!
-;
-
-: locals-no-pop? ( lfa -- ? )
- 1 - c@ 8 and 0<>
-;
-
-: locals-drop \ Destroy current stack frame
- locals-var-sp @ to locals-var-sp
-;
-
-['] locals-drop to locals-end
-
-: (local-init) ( str len -- )
- header 1 , \ DOCOL
- ['] (lit) , ['] noop , \ read-xt
- ['] (lit) , ['] noop , \ write-xt
- ['] 2drop , \ do nothing
- ['] (lit) ,
- here 5 cells - ,
- ['] @ , ['] , , \ store read-xt
- ['] (semis) ,
- reveal
- immediate
- last @ (apply-local-flags)
-;
-
-: (local-noop) ( str len -- )
- 2drop
-;
-
-\ Word called when consuming a local variable
-defer (local)
-
-: } ( C: current latest here -- )
- here! latest ! current ! \ Switch back to normal dict
- locals-dict-buf @ to locals-dict \ Make locals-dict visible to $find
- 0 to locals-var-count
- ['] locals-var-sp , \ save previous sp on rstack
- ['] >r ,
- locals-dict @ \ ( last -- )
- begin
- ?dup 0<>
- while
- >r
- locals-var-count /n *
- locals-read-table + @ r@ 3 cells + ! \ set read-xt
- locals-var-count /n *
- locals-write-table + @ r@ 5 cells + ! \ set write-xt
- locals-var-count 1+ to locals-var-count
- r@ locals-no-pop? if
- ['] locals-0-push , \ initialise with 0
- else
- ['] locals-push , \ initialise from stack
- then
- r> @ \ next lfa
- repeat
- ['] r> ,
- ['] locals-push , \ write previous sp
-; immediate
-
-: { ( C: -- current latest here )
- current @ latest @ here
- ['] (local-init) to (local)
- 0 to locals-flags
- 0 to locals-var-count
- locals-dict-buf @ 200 cells 0 fill \ Zero out temporary dictionary
- locals-dict-buf @ current ! \ Switch to locals dictionary
- locals-dict-buf @ /n + here!
-
- begin
- parse-word
- 2dup s" }" strcmp 0= if
- 2drop
- ['] } execute -1
- else
- 2dup s" ;" strcmp 0= if
- 2drop
- 8 to locals-flags 0 \ Don't init from stack
- else
- 2dup s" |" strcmp 0= if
- 2drop
- 8 to locals-flags 0 \ Don't init from stack
- else
- 2dup s" --" strcmp 0= if
- 2drop
- ['] (local-noop) to (local) 0
- else
- locals-var-count #locals < if
- (local) 0 \ accept local
- else
- s" maximum locals used ignoring " type type cr 0
- then
- locals-var-count 1+ to locals-var-count
- then
- then
- then
- then
- until
-; immediate
-
-: -> ( n -- )
- parse-word $find if
- 4 cells + @ ,
- else
- s" unable to find word " type type
- then
-; immediate
-
-[THEN]