summaryrefslogtreecommitdiff
path: root/module/system/base/compile.scm
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2009-01-30 14:12:57 +0100
committerAndy Wingo <wingo@pobox.com>2009-01-30 14:12:57 +0100
commitd7236899f5752fab1ad1e8d3e5b51cfe18abe5c7 (patch)
treef91d833a7d8a048d81b8cd5e62d9b40a77958a53 /module/system/base/compile.scm
parent7b107cceb9adcc966b639fd2c217f4708b53a2aa (diff)
downloadguile-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.scm14
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))