summaryrefslogtreecommitdiff
path: root/module/language/assembly/decompile-bytecode.scm
diff options
context:
space:
mode:
Diffstat (limited to 'module/language/assembly/decompile-bytecode.scm')
-rw-r--r--module/language/assembly/decompile-bytecode.scm13
1 files changed, 8 insertions, 5 deletions
diff --git a/module/language/assembly/decompile-bytecode.scm b/module/language/assembly/decompile-bytecode.scm
index 4bcae800b..e8d175d23 100644
--- a/module/language/assembly/decompile-bytecode.scm
+++ b/module/language/assembly/decompile-bytecode.scm
@@ -42,19 +42,22 @@
(define (decode-load-program pop)
(let* ((nargs (pop)) (nrest (pop)) (nlocs (pop)) (nexts (pop))
(a (pop)) (b (pop)) (c (pop)) (d (pop))
+ (e (pop)) (f (pop)) (g (pop)) (h (pop))
(len (+ a (ash b 8) (ash c 16) (ash d 24)))
+ (metalen (+ e (ash f 8) (ash g 16) (ash h 24)))
+ (totlen (+ len metalen))
(i 0))
(define (sub-pop) ;; ...records. ha. ha.
- (let ((b (cond ((< i len) (pop))
- ((= i len) #f)
+ (let ((b (cond ((< i totlen) (pop))
+ ((= i totlen) #f)
(else (error "tried to decode too many bytes")))))
(if b (set! i (1+ i)))
b))
(let lp ((out '()))
- (cond ((> i len)
+ (cond ((> i totlen)
(error "error decoding program -- read too many bytes" out))
- ((= i len)
- `(load-program ,nargs ,nrest ,nlocs ,nexts () ,len
+ ((= i totlen)
+ `(load-program ,nargs ,nrest ,nlocs ,nexts () ,len ,metalen
,@(reverse! out)))
(else
(let ((exp (decode-bytecode sub-pop)))