Diff for /gforth/see.fs between versions 1.23 and 1.30

version 1.23, 1999/05/20 13:31:57 version 1.30, 2000/09/23 15:06:02
Line 1 Line 1
 \ SEE.FS       highend SEE for ANSforth                16may93jaw  \ SEE.FS       highend SEE for ANSforth                16may93jaw
   
 \ Copyright (C) 1995 Free Software Foundation, Inc.  \ Copyright (C) 1995,2000 Free Software Foundation, Inc.
   
 \ This file is part of Gforth.  \ This file is part of Gforth.
   
Line 136  VARIABLE SearchPointer Line 136  VARIABLE SearchPointer
 \ The branchtable consists of three entrys:  \ The branchtable consists of three entrys:
 \ address of branch , branch destination , branch type  \ address of branch , branch destination , branch type
   
 CREATE BranchTable 500 allot  CREATE BranchTable 128 cells allot
 here 3 cells -  here 3 cells -
 ACONSTANT MaxTable  ACONSTANT MaxTable
   
Line 514  Defer xt-see-xt ( xt -- ) Line 514  Defer xt-see-xt ( xt -- )
     then      then
     space ;      space ;
   
 Defer discode ( addr -- )  Defer discode ( addr u -- ) \ gforth
 \  hook for the disassembler: disassemble code at addr (as far as the  \G hook for the disassembler: disassemble code at addr of length u
 \  disassembler thinks is sensible)  ' dump IS discode
 :noname ( addr -- )  
     drop ." ..." ;  : next-head ( addr1 -- addr2 ) \ gforth
 IS discode      \G find the next header starting after addr1, up to here (unreliable).
       here swap u+do
           i head?
           if
               i unloop exit
           then
       cell +loop
       here ;
   
   : umin ( u1 u2 -- u )
       2dup u>
       if
           swap
       then
       drop ;
           
   : next-prim ( addr1 -- addr2 ) \ gforth
       \G find the next primitive after addr1 (unreliable)
       1+ >r -1 primstart
       begin ( umin head R: boundary )
           @ dup
       while
           tuck name>int >code-address ( head1 umin ca R: boundary )
           r@ - umin
           swap
       repeat
       drop dup r@ negate u>=
       \ "umin+boundary within [0,boundary)" = "umin within [-boundary,0)"
       if ( umin R: boundary ) \ no primitive found behind -> use a default length
           drop 31
       then
       r> + ;
   
 : seecode ( xt -- )  : seecode ( xt -- )
     dup s" Code" .defname      dup s" Code" .defname
Line 527  IS discode Line 558  IS discode
     if      if
         >code-address          >code-address
     then      then
     discode      dup in-dictionary? \ user-defined code word?
     ."  end-code" cr ;      if
           dup next-head
       else
           dup next-prim
       then
       over - discode
       ." end-code" cr ;
 : seevar ( xt -- )  : seevar ( xt -- )
     s" Variable" .defname cr ;      s" Variable" .defname cr ;
 : seeuser ( xt -- )  : seeuser ( xt -- )
Line 542  IS discode Line 579  IS discode
 : seedefer ( xt -- )  : seedefer ( xt -- )
     dup >body @ xt-see-xt cr      dup >body @ xt-see-xt cr
     dup s" Defer" .defname cr      dup s" Defer" .defname cr
     >name dup ??? = if      >name ?dup-if
         drop ." lastxt >body !"  
     else  
         ." IS " .name cr          ." IS " .name cr
       else
           ." lastxt >body !"
     then ;      then ;
 : see-threaded ( addr -- )  : see-threaded ( addr -- )
     C-Pass @ DebugMode = IF      C-Pass @ DebugMode = IF
Line 566  IS discode Line 603  IS discode
     dup >body ." 0 " ? ." 0 0 "      dup >body ." 0 " ? ." 0 0 "
     s" Field" .defname cr ;      s" Field" .defname cr ;
   
 : xt-see ( xt -- )  : xt-see ( xt -- ) \ gforth
       \G Decompile the definition represented by @i{xt}.
     cr c-init      cr c-init
     dup >does-code      dup >does-code
     if      if
Line 590  IS discode Line 628  IS discode
 [ [IFDEF] dofield: ]  [ [IFDEF] dofield: ]
         dofield: of seefield endof          dofield: of seefield endof
 [ [THEN] ]  [ [THEN] ]
         over >body of seecode endof          over       of seecode endof \ direct threaded code words
           over >body of seecode endof \ indirect threaded code words
         2drop abort" unknown word type"          2drop abort" unknown word type"
     ENDCASE ;      ENDCASE ;
   
Line 629  IS discode Line 668  IS discode
     \G etc.) is lost.      \G etc.) is lost.
     name find-name dup 0=      name find-name dup 0=
     IF      IF
         drop -&13 bounce          drop -&13 throw
     THEN      THEN
     name-see ;      name-see ;
   

Removed from v.1.23  
changed lines
  Added in v.1.30


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>