summaryrefslogtreecommitdiff
path: root/module/language/assembly/compile-bytecode.scm
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2009-01-30 11:02:01 +0100
committerAndy Wingo <wingo@pobox.com>2009-01-30 11:02:01 +0100
commit4b3184828416acfa5c099a54954ca00ce3cc0d0d (patch)
tree937907a27c514e9a3fb0c5c009a500a44d7ccfd0 /module/language/assembly/compile-bytecode.scm
parent6f78702819e355180a71de6902766cdecfa84755 (diff)
downloadguile-4b3184828416acfa5c099a54954ca00ce3cc0d0d.tar.gz
remove glil->objcode path in favor of passing through assembly; refactorings.
* module/language/assembly.scm: Refactor a bit; remove the name "code" from the API, as it's too generic, and replace with "assembly". * module/language/assembly/compile-bytecode.scm: Get byte lengths via, well, byte-length. * module/language/glil/Makefile.am: * module/language/glil/spec.scm: * module/language/glil/compile-objcode.scm: Remove compile-objcode, as we just go through bytecode now. * module/language/glil/compile-assembly.scm (glil->assembly) (dump-object): s/object->code/object->assembly/.
Diffstat (limited to 'module/language/assembly/compile-bytecode.scm')
-rw-r--r--module/language/assembly/compile-bytecode.scm15
1 files changed, 7 insertions, 8 deletions
diff --git a/module/language/assembly/compile-bytecode.scm b/module/language/assembly/compile-bytecode.scm
index e0d0af923..17a71f21b 100644
--- a/module/language/assembly/compile-bytecode.scm
+++ b/module/language/assembly/compile-bytecode.scm
@@ -21,27 +21,26 @@
(define-module (language assembly compile-bytecode)
#:use-module (system base pmatch)
+ #:use-module (language assembly)
#:use-module (system vm instruction)
#:use-module (srfi srfi-4)
#:use-module ((srfi srfi-1) #:select (fold))
#:export (compile-bytecode write-bytecode))
-(define *program-header-len* 8)
-
(define (compile-bytecode assembly env . opts)
(pmatch assembly
- ((load-program ,nargs ,nrest ,nlocs ,nexts ,labels ,len . ,code)
- (letrec ((v (make-u8vector (+ *program-header-len* len)))
+ ((load-program . _)
+ ;; the 1- and -1 are so that we drop the load-program byte
+ (letrec ((v (make-u8vector (1- (byte-length assembly))))
(i -1)
(write-byte (lambda (b)
- ;; drop the load-program byte
(if (>= i 0) (u8vector-set! v i b))
(set! i (1+ i))))
(get-addr (lambda () i)))
(write-bytecode assembly write-byte get-addr '())
- (if (not (= i (u8vector-length v)))
- (error "incorrect length in assembly" i len))
- (values v env)))
+ (if (= i (u8vector-length v))
+ (values v env)
+ (error "incorrect length in assembly" i (u8vector-length v)))))
(else (error "bad assembly" assembly))))
(define (write-bytecode asm write-byte get-addr labels)