-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathinterpreter.fs
96 lines (79 loc) · 2.02 KB
/
interpreter.fs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
\ interpreter.fs
\ Copyright 2011 (C) David Vazquez
\ This file is part of Eulex.
\ Eulex is free software: you can redistribute it and/or modify
\ it under the terms of the GNU General Public License as published by
\ the Free Software Foundation, either version 3 of the License, or
\ (at your option) any later version.
\ Eulex is distributed in the hope that it will be useful,
\ but WITHOUT ANY WARRANTY; without even the implied warranty of
\ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\ GNU General Public License for more details.
\ You should have received a copy of the GNU General Public License
\ along with Eulex. If not, see <http://www.gnu.org/licenses/>.
: octal 8 base ! ;
: decimal 10 base ! ;
: hex 16 base ! ;
\ Directivas
Defer [if] immediate
Defer [else] immediate
Defer [then] immediate
' [then] alias [endif]
: read-word
parse-nt dup 0<> if nt>xt then ;
: lookup-else-or-then-1
0 >r
begin
read-word
case
['] [if] of r> 1+ >r endof
['] [else] of
r>
?dup 0= if
exit
else
>r
then
endof
['] [then] of
r>
?dup 0= if
exit
else
1- >r
then
endof
endcase
again
;
: lookup-else-or-then
not if lookup-else-or-then-1 endif
; latestxt IS [IF]
: lookup-then
0 >r
begin
read-word
case
['] [if] of r> 1+ >r endof
['] [then] of
r> ?dup 0= if
exit
else
1- >r
then
endof
endcase
again
; latestxt IS [ELSE]
' noop IS [THEN]
: [defined] parse-cname find-cname 0<> ; immediate
: [ifdef]
postpone [defined]
postpone [if]
; immediate
: [ifundef]
postpone [defined]
not
postpone [if]
; immediate
\ interpreters.fs ends here