Changeset 3329


Ignore:
Timestamp:
Sep 26, 2012, 11:15:13 AM (2 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.