From d7236899f5752fab1ad1e8d3e5b51cfe18abe5c7 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Fri, 30 Jan 2009 14:12:57 +0100 Subject: 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. --- module/language/objcode/spec.scm | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'module/language/objcode/spec.scm') diff --git a/module/language/objcode/spec.scm b/module/language/objcode/spec.scm index ce67dcff5..d4212be48 100644 --- a/module/language/objcode/spec.scm +++ b/module/language/objcode/spec.scm @@ -46,8 +46,25 @@ (define (decompile-value x env opts) (cond ((program? x) - (values (program-objcode x) - (cons (program-objects x) (program-externals x)))) + (let ((objs (program-objects x)) + (meta (program-meta x)) + (exts (program-external x)) + (binds (program-bindings x)) + (srcs (program-sources x)) + (nargs (arity:nargs (program-arity x)))) + (let ((blocs (and binds + (append (list-head binds nargs) + (filter (lambda (x) (not (binding:extp x))) + (list-tail binds nargs))))) + (bexts (and binds + (filter binding:extp binds)))) + (values (program-objcode x) + `((objects . ,objs) + (meta . ,(and meta (meta))) + (exts . ,exts) + (blocs . ,blocs) + (bexts . ,bexts) + (sources . ,srcs)))))) ((objcode? x) (values x #f)) (else -- cgit v1.2.3