xog: slightly better debug output
[urforth.git] / meta / meta-50-tc-imm-30-cond-comp.f
blob3089da9d15a1b600d341f91d3d96d3ab64791a59
1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 ;; UrForth level 1: self-hosting 32-bit Forth compiler
3 ;; Metacompiler
4 ;; Copyright (C) 2020 Ketmar Dark // Invisible Vector
5 ;; GPLv3 ONLY
6 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8 vocabulary (concomp-flow) (hidden) also (concomp-flow) definitions
10 : [IF] ( level -- newlevel ) 1+ ;
11 alias [IF] [IFNOT]
12 alias [IF] $if
14 : [ELSE] ( level -- newlevel ) 1- dup if 1+ endif ;
15 alias [ELSE] $else
17 : [ENDIF] ( level -- newlevel ) 1- ;
18 alias [ENDIF] [THEN]
19 alias [ENDIF] $endif
21 previous definitions
24 : tc-[ELSE] ( -- )
25 1 ;; level
26 begin
27 begin
28 [DEFINED] parse-name-ex [IF] parse-name-ex [ELSE] parse-skip-comments parse-name [ENDIF]
29 dup ifnot tc-refill not ERR-UNBALANCED-IFDEF ?error endif
30 dup until
31 vocid: (concomp-flow) voc-search-noimm if execute else 2drop endif
32 dup not-until drop
33 ; ( immediate )
34 alias tc-[ELSE] tc-$ELSE
36 : tc-[ENDIF] ( -- ) ; immediate
37 alias tc-[ENDIF] tc-[THEN]
38 alias tc-[ENDIF] tc-$endif
41 : tc-[IF] ( cond -- )
42 ifnot [compile] tc-[ELSE] endif
43 ; ( immediate )
45 : tc-[IFNOT] ( cond -- )
46 if [compile] tc-[ELSE] endif
47 ; ( immediate )
50 : tc-[IFDEF] ( -- ) \ word
51 parse-name has-word? ifnot [compile] tc-[ELSE] endif
52 ; immediate
54 : tc-[IFNDEF] ( -- ) \ word
55 parse-name has-word? if [compile] tc-[ELSE] endif
56 ; immediate
58 : tc-[DEFINED] ( -- flag ) \ word
59 parse-name has-word?
60 ; immediate
62 : tc-[UNDEFINED] ( -- flag ) \ word
63 parse-name has-word? not
64 ; immediate
68 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
69 : tc-$IF ( -- ) \ expr
70 asmx86:lexer:PrepareLineParser
71 tc-next-token
72 asmx86:macro-instrs:(if-eval-cond)
73 asmx86:tk-eol? not-?abort" eol expected"
74 ifnot [compile] tc-[ELSE] endif
75 ; ( immediate )