[gforth] / gforth / simp-see.fs  

gforth: gforth/simp-see.fs


1 : anton 1.1 \ simple-minded see (good for seeing what the compiler produces)
2 :    
3 : anton 1.6 \ Copyright (C) 2001,2003,2007 Free Software Foundation, Inc.
4 : anton 1.1
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 : anton 1.7 \ as published by the Free Software Foundation, either version 3
10 : anton 1.1 \ 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 : anton 1.7 \ along with this program. If not, see http://www.gnu.org/licenses/.
19 : anton 1.1
20 :     require see.fs
21 :    
22 : anton 1.5 : simple-see-word { addr -- }
23 :     xpos off addr hex. addr cell+ addr @ .word drop ;
24 :    
25 : anton 1.3 : simple-see-range ( addr1 addr2 -- ) \ gforth
26 : anton 1.1 swap u+do
27 : anton 1.5 cr i simple-see-word
28 :     cell +loop ;
29 : anton 1.1
30 : anton 1.3 : simple-see ( "name" -- ) \ gforth
31 :     \G a simple decompiler that's closer to @code{dump} than @code{see}.
32 : anton 1.1 \ !! at the moment NEXT-HEAD is a little too optimistic (see
33 :     \ comment in HEAD?)
34 :     ' >body dup next-head simple-see-range ;
35 :    
36 : anton 1.5 : see-code-next-inline { addr1 addr2 -- addr3 }
37 :     \ decompile starting at addr1 until an inlined primitive is found,
38 :     \ or addr2 is reached; addr3 is addr2 or the next inlined
39 :     \ primitive
40 :     addr1 begin { addr }
41 :     addr addr2 u< while
42 :     addr @ dup decompile-prim = while
43 :     addr cr simple-see-word
44 :     addr cell+
45 :     repeat then
46 :     addr ;
47 :    
48 :     : see-code-range { addr1 addr2 -- } \ gforth
49 :     cr addr1 begin { a }
50 :     a simple-see-word
51 :     a cell+ addr2 see-code-next-inline { b }
52 :     b addr2 u< while
53 :     a @ b @ over - discode
54 :     b
55 :     repeat ;
56 :    
57 :     : see-code ( "name" -- ) \ gforth
58 :     \G like @code{simple-see}, but also shows the dynamic native code for
59 :     \G the inlined primitives (except for the last).
60 :     ' >body dup next-head see-code-range ;
61 :    

CVS Admin

Powered by ViewCVS 1.0-dev
(Powered by ViewCVS)

ViewCVS and CVS Help