diff options
author | Andy Wingo <wingo@pobox.com> | 2009-01-30 11:02:01 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2009-01-30 11:02:01 +0100 |
commit | 4b3184828416acfa5c099a54954ca00ce3cc0d0d (patch) | |
tree | 937907a27c514e9a3fb0c5c009a500a44d7ccfd0 /module/language/assembly/compile-bytecode.scm | |
parent | 6f78702819e355180a71de6902766cdecfa84755 (diff) | |
download | guile-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.scm | 15 |
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) |