1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 ;; UrForth level
1: self
-hosting
32-bit Forth compiler
4 ;; Copyright
(C
) 2020 Ketmar Dark
// Invisible Vector
6 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
10 : tc
-compile
( -- ) \ word
11 parse
-name tc
-cfa
,-(str
)
12 " COMPILE," tc
-compile
,-(str
)
15 : tc
-[compile
] ( -- ) \ word
16 parse
-name tc
-compile
,-(str
)
19 : tc
-['] ( -- ) \ word
20 parse-name tc-cfa,-(str)
23 : tc-[execute-tail] ( -- ) \ word
24 tc-state @ not-?abort" [execute-tail] is compile-time only!"
25 " LIT-EXECTAIL" tc-compile,-(str)
26 parse-name tc-cfa,-(str-raw)
29 : tc-[char] ( -- ) \ char
30 parse-name 1 = not-?abort" character expected"
34 : tc-(parse-unescape-str) ( -- addr count )
35 34 parse 2dup here swap move nip here swap str-unescape
39 tc-(parse-unescape-str)
46 tc-state @ not-?abort" tc-.\`: compile-time only!"
47 " (.\`)" tc-compile,-(str)
48 tc-(parse-unescape-str)
52 : tc-vocid: ( -- ) // ( -- vocid ) \ vocname
53 tc-state @ not-?abort" tc-.\`: compile-time only!"
54 parse-name x-tc-xcfind-must
55 dup tc-cfa->ffa tc-ffa@ tc-(wflag-vocab) and not-?abort" not a vocabulary"
56 tc-voc-cfa->vocid tc-literal
60 : tc-TRUE ( -- 1 ) tc-state @ if " FORTH:LIT-TRUE" tc-compile,-(str) else true endif ;
61 : tc-FALSE ( -- 1 ) tc-state @ if " FORTH:LIT-FALSE" tc-compile,-(str) else false endif ;
65 : tc-LITERAL ( -- ) [compile] tc-literal ;