Changeset 3329


Ignore:
Timestamp:
Sep 26, 2012, 11:15:13 AM (3 years ago)
Author:
wmb
Message:

OFW core - extend Forth decompiler and debugger to handle instance defer words.

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • forth/lib/debug.fth

    r3129 r3329  
    6161forth definitions
    6262: defer?  ( acf -- flag )  word-type  ['] key word-type =  ;
     63
     64defer resolve-defers
     65: (resolve-defers)  ( xt -- xt' )
     66   begin  dup defer?  while  behavior  repeat
     67;
     68' (resolve-defers)  to resolve-defers
     69
    6370: (debug  ( acf -- )
    64    begin  dup defer?  while  behavior  repeat
     71   resolve-defers
    6572
    6673   dup colon-cf?  0= abort" Not a colon definition"
  • forth/lib/decomp.fth

    r2912 r3329  
    589589   ' token,
    590590;
    591 d# 11 tassociative: definition-class
     591d# 12 constant #definition-classes
     592#definition-classes tassociative: definition-class
    592593   ( 0 )   cf,  :          ( 1 )   cf,  constant
    593594   ( 2 )   cf,  variable   ( 3 )   cf,  user
     
    595596   ( 6 )   cf,  vocabulary ( 7 )   cf,  alias
    596597   ( 8 )   cf,  value      ( 9 )   cf,  2constant
    597    ( 10)   cf,  code
    598 
    599 d# 12 case: .definition-class
     598   ( 10)   cf,  code       ( 11 )  cf,  dummy
     599
     600#definition-classes 1+ case: .definition-class
    600601   ( 0 )   .:              ( 1 )   .constant
    601602   ( 2 )   .variable       ( 3 )   .user
     
    603604   ( 6 )   .vocabulary     ( 7 )   .alias
    604605   ( 8 )   .value          ( 9 )   .2constant
    605    ( 10)   .code           ( 11)   .other
    606 ;
     606   ( 10)   .code           ( 11)   dummy
     607   ( 12)   .other
     608;
     609
     610headers
     611also forth definitions
     612: install-decomp-definer  ( definer-acf display-acf -- )
     613   ['] dummy ['] .definition-class (patch
     614   ['] dummy ['] definition-class >body na1+
     615               dup [ #definition-classes ] literal ta+ tsearch
     616   drop token!
     617;
     618previous definitions
     619headerless
     620
    607621
    608622: does/;code-xt?  ( xt -- flag )
  • ofw/core/ofwcore.fth

    r3050 r3329  
    905905
    906906headerless
     907: instance-defer  ( -- )
     908   create-cf  ['] crash /token  ( value data-size )
     909   use-actions  value#,
     910;
    907911: (defer)  ( -- )
    908912   instance?  if
    909       create-cf  ['] crash /token  ( value data-size )
    910       use-actions  value#,
     913      instance-defer
    911914   else
    912      defer-cf  ['] crash /token    ( value data-size )
    913      user#,
     915      defer-cf  ['] crash /token   ( value data-size )
     916      user#,
    914917   then                            ( value adr )
    915918   token!
    916919; patch (defer) noop defer
     920
     921\ Extend debugger to handle instance defers
     922: (resolve-instance-defers)  ( xt -- xt' )
     923   begin
     924      dup defer?  if                             ( xt )
     925         behavior                                ( xt' )
     926      else                                       ( xt )
     927         dup definer ['] instance-defer  =  if   ( xt )
     928            2 perform-action                     ( xt' )
     929         else                                    ( xt )
     930            exit
     931         then
     932      then
     933   again
     934;
     935' (resolve-instance-defers) to resolve-defers
     936
     937\ Extend decompiler to handle instance defers
     938: .instance-defer  ( xt definer -- )
     939   .definer  ." is " cr   ( xt )
     940   2 perform-action       ( xt' )
     941   (see)
     942;
     943' instance-defer  ' .instance-defer  install-decomp-definer
    917944
    918945headers
Note: See TracChangeset for help on using the changeset viewer.