[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 :     \ 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., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
20 :    
21 :     require see.fs
22 :    
23 : anton 1.5 : simple-see-word { addr -- }
24 :     xpos off addr hex. addr cell+ addr @ .word drop ;
25 :    
26 : anton 1.3 : simple-see-range ( addr1 addr2 -- ) \ gforth
27 : anton 1.1 swap u+do
28 : anton 1.5 cr i simple-see-word
29 :     cell +loop ;
30 : anton 1.1
31 : anton 1.3 : simple-see ( "name" -- ) \ gforth
32 :     \G a simple decompiler that's closer to @code{dump} than @code{see}.
33 : anton 1.1 \ !! at the moment NEXT-HEAD is a little too optimistic (see
34 :     \ comment in HEAD?)
35 :     ' >body dup next-head simple-see-range ;
36 :    
37 : anton 1.5 : see-code-next-inline { addr1 addr2 -- addr3 }
38 :     \ decompile starting at addr1 until an inlined primitive is found,
39 :     \ or addr2 is reached; addr3 is addr2 or the next inlined
40 :     \ primitive
41 :     addr1 begin { addr }
42 :     addr addr2 u< while
43 :     addr @ dup decompile-prim = while
44 :     addr cr simple-see-word
45 :     addr cell+
46 :     repeat then
47 :     addr ;
48 :    
49 :     : see-code-range { addr1 addr2 -- } \ gforth
50 :     cr addr1 begin { a }
51 :     a simple-see-word
52 :     a cell+ addr2 see-code-next-inline { b }
53 :     b addr2 u< while
54 :     a @ b @ over - discode
55 :     b
56 :     repeat ;
57 :    
58 :     : see-code ( "name" -- ) \ gforth
59 :     \G like @code{simple-see}, but also shows the dynamic native code for
60 :     \G the inlined primitives (except for the last).
61 :     ' >body dup next-head see-code-range ;
62 :    

CVS Admin

Powered by ViewCVS 1.0-dev
(Powered by ViewCVS)

ViewCVS and CVS Help