summaryrefslogtreecommitdiff
path: root/module/language/glil/compile-assembly.scm
diff options
context:
space:
mode:
Diffstat (limited to 'module/language/glil/compile-assembly.scm')
-rw-r--r--module/language/glil/compile-assembly.scm15
1 files changed, 15 insertions, 0 deletions
diff --git a/module/language/glil/compile-assembly.scm b/module/language/glil/compile-assembly.scm
index 21ef95975..8bd61a3a2 100644
--- a/module/language/glil/compile-assembly.scm
+++ b/module/language/glil/compile-assembly.scm
@@ -580,6 +580,21 @@
(addr+ (addr+ addr type) shape)
8
4))))
+ ((array? x)
+ ;; an array of generic scheme values
+ (let* ((contents (array-contents x))
+ (len (vector-length contents)))
+ (let dump-objects ((i 0) (codes '()) (addr addr))
+ (if (< i len)
+ (let ((code (dump-object (vector-ref x i) addr)))
+ (dump-objects (1+ i) (cons code codes)
+ (addr+ addr code)))
+ (fold append
+ `(,@(dump-object (array-shape x) addr)
+ (make-array ,(quotient (ash len -16) 256)
+ ,(logand #xff (ash len -8))
+ ,(logand #xff len)))
+ codes)))))
(else
(error "assemble: unrecognized object" x))))