summaryrefslogtreecommitdiff
path: root/module/language/objcode/spec.scm
diff options
context:
space:
mode:
Diffstat (limited to 'module/language/objcode/spec.scm')
-rw-r--r--module/language/objcode/spec.scm21
1 files changed, 19 insertions, 2 deletions
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