[gforth] / gforth / wordinfo.fs  

gforth: gforth/wordinfo.fs


1 : anton 1.1 \ WORDINFO.FS V1.0 17may93jaw
2 :    
3 : anton 1.8 \ Copyright (C) 1995 Free Software Foundation, Inc.
4 :    
5 :     \ This file is part of Gforth.
6 :    
7 :     \ Gforth is free software; you can redistribute it and/or
8 :     \ modify it under the terms of the GNU General Public License
9 :     \ as published by the Free Software Foundation; either version 2
10 :     \ of the License, or (at your option) any later version.
11 :    
12 :     \ This program is distributed in the hope that it will be useful,
13 :     \ but WITHOUT ANY WARRANTY; without even the implied warranty of
14 :     \ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 :     \ GNU General Public License for more details.
16 :    
17 :     \ You should have received a copy of the GNU General Public License
18 :     \ along with this program; if not, write to the Free Software
19 :     \ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 :    
21 : anton 1.1 \ May be cross-compiled
22 :     \ If you want check values then exclude comments,
23 :     \ but keep in mind that this can't be cross-compiled
24 :    
25 : jwilke 1.14 \ INCLUDE look.fs
26 : anton 1.1
27 :     \ Wordinfo is a tool that checks a nfa
28 :     \ and finds out what wordtype we have
29 :     \ it is used in SEE.FS
30 :    
31 : anton 1.9 \ the old alias? did not work and it is not used, so I changed
32 :     \ it in many respects - anton
33 :     : alias? ( nfa1 -- nfa2|0 )
34 :     \ if nfa1 is an alias, nfa2 is the name of the original word
35 : anton 1.12 dup cell+ c@ alias-mask and 0=
36 :     IF ( nfa1 )
37 :     ((name>)) @ >name ( use look instead? )
38 : anton 1.9 ELSE
39 :     drop 0
40 :     THEN ;
41 : anton 1.1
42 :     : var? ( nfa -- flag )
43 : anton 1.12 ((name>)) >code-address dovar: = ;
44 : anton 1.1
45 :     : con? ( nfa -- flag )
46 : anton 1.12 ((name>)) >code-address docon: = ;
47 : anton 1.1
48 : pazsan 1.5 : user? ( nfa -- flag )
49 : anton 1.12 ((name>)) >code-address douser: = ;
50 : pazsan 1.5
51 : anton 1.1 : does? ( nfa -- flag )
52 : anton 1.12 ((name>))
53 : anton 1.13 >does-code 0<> ;
54 : anton 1.1
55 :     : defered? ( nfa -- flag )
56 : anton 1.12 ((name>)) >code-address dodefer: = ;
57 : anton 1.1
58 :     : colon? ( nfa -- flag )
59 : anton 1.12 ((name>)) >code-address docol: = ;
60 : anton 1.7
61 :     \ the above words could be factored with create-does>, but this would
62 :     \ probably make this file incompatible with cross.
63 : anton 1.1
64 : jwilke 1.14 [IFDEF] forthstart
65 :     : xtprim? ( xt -- flag )
66 : anton 1.15 forthstart dictionary-end within ; \ !! does not work for CODE words
67 : jwilke 1.14 [ELSE]
68 :     : xtprim? ( xt -- flag )
69 : anton 1.15 dup >body swap >code-address = ; \ !! works only for indirect threaded code
70 :     \ !! does not work for primitives
71 : jwilke 1.14 [THEN]
72 : anton 1.1 : prim? ( nfa -- flag )
73 : jwilke 1.14 name>int xtprim? ;
74 : anton 1.1
75 :     \ None nestable IDs:
76 :    
77 :     1 CONSTANT Pri# \ Primitives
78 :     2 CONSTANT Con# \ Constants
79 :     3 CONSTANT Var# \ Variables
80 :     4 CONSTANT Val# \ Values
81 :    
82 :     \ Nestabe IDs:
83 :    
84 :     5 CONSTANT Doe# \ Does part
85 :     6 CONSTANT Def# \ Defer
86 :     7 CONSTANT Col# \ Colon def
87 : pazsan 1.5 8 CONSTANT Use# \ User variable
88 : anton 1.1
89 :     \ Nobody knows:
90 :    
91 : pazsan 1.5 9 CONSTANT Ali# \ Alias
92 : anton 1.1
93 : pazsan 1.5 10 CONSTANT Str# \ Structure words
94 : anton 1.1
95 : pazsan 1.5 11 CONSTANT Com# \ Compiler directives : ; POSTPONE
96 : anton 1.1
97 :     CREATE InfoTable
98 : pazsan 1.5 ' Prim? A, Pri# ,
99 :     ' Alias? A, Ali# ,
100 :     ' Con? A, Con# ,
101 :     ' Var? A, Var# ,
102 :     \ ' Value? A, Val# ,
103 : anton 1.1 ' Defered? A, Def# ,
104 : pazsan 1.5 ' Does? A, Doe# ,
105 :     ' Colon? A, Col# ,
106 :     ' User? A, Use# ,
107 : anton 1.1 0 ,
108 :    
109 :     : WordInfo ( nfa --- code )
110 :     InfoTable
111 :     BEGIN dup @ dup
112 :     WHILE swap 2 cells + swap
113 :     2 pick swap execute
114 :     UNTIL
115 :     1 cells - @ nip
116 :     ELSE
117 :     2drop drop 0
118 :     THEN ;
119 :    

CVS Admin

Powered by ViewCVS 1.0-dev
(Powered by ViewCVS)

ViewCVS and CVS Help