diff options
Diffstat (limited to 'module/language/glil/compile-assembly.scm')
-rw-r--r-- | module/language/glil/compile-assembly.scm | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/module/language/glil/compile-assembly.scm b/module/language/glil/compile-assembly.scm index 4bd6c4f04..c67ef694b 100644 --- a/module/language/glil/compile-assembly.scm +++ b/module/language/glil/compile-assembly.scm @@ -318,8 +318,8 @@ ,(modulo i 256)))) object-alist))))) ((define) - (emit-code `((define ,(symbol->string name)) - (variable-set)))) + (emit-code `(,@(dump-object name addr) + (define)))) (else (error "unknown toplevel var kind" op name)))) @@ -391,11 +391,20 @@ ((number? x) `((load-number ,(number->string x)))) ((string? x) - `((load-string ,x))) + (case (string-width x) + ((1) `((load-string ,x))) + ((4) (align-code `(load-wide-string ,x) addr 4 4)) + (else (error "bad string width" x)))) ((symbol? x) - `((load-symbol ,(symbol->string x)))) + (let ((str (symbol->string x))) + (case (string-width str) + ((1) `((load-symbol ,str))) + ((4) `(,@(dump-object str addr) + (make-symbol))) + (else (error "bad string width" str))))) ((keyword? x) - `((load-keyword ,(symbol->string (keyword->symbol x))))) + `(,@(dump-object (keyword->symbol x) addr) + (make-keyword))) ((list? x) (let ((tail (let ((len (length x))) (if (>= len 65536) (too-long "list")) |