diff options
author | Andy Wingo <wingo@pobox.com> | 2009-01-30 14:12:57 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2009-01-30 14:12:57 +0100 |
commit | d7236899f5752fab1ad1e8d3e5b51cfe18abe5c7 (patch) | |
tree | f91d833a7d8a048d81b8cd5e62d9b40a77958a53 /module/system/base/compile.scm | |
parent | 7b107cceb9adcc966b639fd2c217f4708b53a2aa (diff) | |
download | guile-d7236899f5752fab1ad1e8d3e5b51cfe18abe5c7.tar.gz |
add disassembler that fits in with old compiler tower
* module/language/assembly/Makefile.am:
* module/language/assembly/disassemble.scm: Add a disassembler, based on
the old one but fitting in with the decompiler tower.
* module/language/objcode/spec.scm (decompile-value): When decompiling
programs, shove all the metadata that we know about into the "env".
* module/system/base/compile.scm (decompile-fold, decompile): Return the
env from `decompile' as a second value. Not sure if `compile' should do
this too.
Diffstat (limited to 'module/system/base/compile.scm')
-rw-r--r-- | module/system/base/compile.scm | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/module/system/base/compile.scm b/module/system/base/compile.scm index 1cf7d6c15..f83834da9 100644 --- a/module/system/base/compile.scm +++ b/module/system/base/compile.scm @@ -181,12 +181,18 @@ time. Useful for supporting some forms of dynamic compilation. Returns (or (lookup-decompilation-order from to) (error "no way to decompile" from "to" to)))) +(define (decompile-fold passes exp env opts) + (if (null? passes) + (values exp env) + (receive (exp env) ((car passes) exp env opts) + (decompile-fold (cdr passes) exp env opts)))) + (define* (decompile x #:key (env #f) (from 'value) (to 'assembly) (opts '())) - (compile-fold (decompile-passes from to opts) - x - env - opts)) + (decompile-fold (decompile-passes from to opts) + x + env + opts)) |