[openfirmware] [commit] r3329 - forth/lib ofw/core
repository service
svn at openfirmware.info
Wed Sep 26 11:15:13 CEST 2012
Author: wmb
Date: Wed Sep 26 11:15:13 2012
New Revision: 3329
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/3329
Log:
OFW core - extend Forth decompiler and debugger to handle instance defer words.
Modified:
forth/lib/debug.fth
forth/lib/decomp.fth
ofw/core/ofwcore.fth
Modified: forth/lib/debug.fth
==============================================================================
--- forth/lib/debug.fth Wed Sep 26 06:56:26 2012 (r3328)
+++ forth/lib/debug.fth Wed Sep 26 11:15:13 2012 (r3329)
@@ -60,8 +60,15 @@
\ Enter and leave the debugger
forth definitions
: defer? ( acf -- flag ) word-type ['] key word-type = ;
-: (debug ( acf -- )
+
+defer resolve-defers
+: (resolve-defers) ( xt -- xt' )
begin dup defer? while behavior repeat
+;
+' (resolve-defers) to resolve-defers
+
+: (debug ( acf -- )
+ resolve-defers
dup colon-cf? 0= abort" Not a colon definition"
>body dup 'unnest (debug)
Modified: forth/lib/decomp.fth
==============================================================================
--- forth/lib/decomp.fth Wed Sep 26 06:56:26 2012 (r3328)
+++ forth/lib/decomp.fth Wed Sep 26 11:15:13 2012 (r3329)
@@ -588,23 +588,37 @@
: cf, \ name ( -- ) \ Compile name's code field
' token,
;
-d# 11 tassociative: definition-class
+d# 12 constant #definition-classes
+#definition-classes tassociative: definition-class
( 0 ) cf, : ( 1 ) cf, constant
( 2 ) cf, variable ( 3 ) cf, user
( 4 ) cf, defer ( 5 ) cf, create
( 6 ) cf, vocabulary ( 7 ) cf, alias
( 8 ) cf, value ( 9 ) cf, 2constant
- ( 10) cf, code
+ ( 10) cf, code ( 11 ) cf, dummy
-d# 12 case: .definition-class
+#definition-classes 1+ case: .definition-class
( 0 ) .: ( 1 ) .constant
( 2 ) .variable ( 3 ) .user
( 4 ) .defer ( 5 ) .create
( 6 ) .vocabulary ( 7 ) .alias
( 8 ) .value ( 9 ) .2constant
- ( 10) .code ( 11) .other
+ ( 10) .code ( 11) dummy
+ ( 12) .other
;
+headers
+also forth definitions
+: install-decomp-definer ( definer-acf display-acf -- )
+ ['] dummy ['] .definition-class (patch
+ ['] dummy ['] definition-class >body na1+
+ dup [ #definition-classes ] literal ta+ tsearch
+ drop token!
+;
+previous definitions
+headerless
+
+
: does/;code-xt? ( xt -- flag )
dup ['] (does>) = swap ['] (;code) = or
;
Modified: ofw/core/ofwcore.fth
==============================================================================
--- ofw/core/ofwcore.fth Wed Sep 26 06:56:26 2012 (r3328)
+++ ofw/core/ofwcore.fth Wed Sep 26 11:15:13 2012 (r3329)
@@ -904,17 +904,44 @@
action: >instance-data token@ ;
headerless
+: instance-defer ( -- )
+ create-cf ['] crash /token ( value data-size )
+ use-actions value#,
+;
: (defer) ( -- )
instance? if
- create-cf ['] crash /token ( value data-size )
- use-actions value#,
+ instance-defer
else
- defer-cf ['] crash /token ( value data-size )
- user#,
+ defer-cf ['] crash /token ( value data-size )
+ user#,
then ( value adr )
token!
; patch (defer) noop defer
+\ Extend debugger to handle instance defers
+: (resolve-instance-defers) ( xt -- xt' )
+ begin
+ dup defer? if ( xt )
+ behavior ( xt' )
+ else ( xt )
+ dup definer ['] instance-defer = if ( xt )
+ 2 perform-action ( xt' )
+ else ( xt )
+ exit
+ then
+ then
+ again
+;
+' (resolve-instance-defers) to resolve-defers
+
+\ Extend decompiler to handle instance defers
+: .instance-defer ( xt definer -- )
+ .definer ." is " cr ( xt )
+ 2 perform-action ( xt' )
+ (see)
+;
+' instance-defer ' .instance-defer install-decomp-definer
+
headers
\ Instance values that are automatically created for every package instance.
More information about the openfirmware
mailing list