mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 03:30:27 +02:00
placeholder for meta and module in a program's object table
* module/language/glil/compile-objcode.scm (codegen): If the generated objcode will have a meta or it has objects, prepend two cells to the object table: one for the meta, and one for the module. This is a placeholder for future work.
This commit is contained in:
parent
86872cc392
commit
a72317988f
1 changed files with 22 additions and 22 deletions
|
@ -115,7 +115,16 @@
|
|||
(closed-bindings '())
|
||||
(source-alist '())
|
||||
(label-alist '())
|
||||
;; the pre-elements are prepended to the object vector
|
||||
;; in practice these are placeholders for module & meta.
|
||||
(object-pre-elements '(#f #f))
|
||||
(object-alist '()))
|
||||
(define (object-index obj)
|
||||
(cond ((object-assoc obj object-alist) => cdr)
|
||||
(else
|
||||
(let ((i (+ (length object-alist) (length object-pre-elements))))
|
||||
(set! object-alist (acons obj i object-alist))
|
||||
i))))
|
||||
(define (push-code! code)
|
||||
; (format #t "push-code! ~a~%" code)
|
||||
(push (code->bytes code) stack))
|
||||
|
@ -124,12 +133,7 @@
|
|||
(toplevel
|
||||
(dump-object! push-code! x))
|
||||
(else
|
||||
(let ((i (cond ((object-assoc x object-alist) => cdr)
|
||||
(else
|
||||
(let ((i (length object-alist)))
|
||||
(set! object-alist (acons x i object-alist))
|
||||
i)))))
|
||||
(push-code! `(object-ref ,i))))))
|
||||
(push-code! `(object-ref ,(object-index x))))))
|
||||
(define (munge-bindings bindings nargs)
|
||||
(map
|
||||
(lambda (v)
|
||||
|
@ -217,11 +221,7 @@
|
|||
((set) '(variable-set)))))
|
||||
(else
|
||||
(let* ((var (make-vlink-later #:key name))
|
||||
(i (cond ((object-assoc var object-alist) => cdr)
|
||||
(else
|
||||
(let ((i (length object-alist)))
|
||||
(set! object-alist (acons var i object-alist))
|
||||
i)))))
|
||||
(i (object-index var)))
|
||||
(push-code! (case op
|
||||
((ref) `(toplevel-ref ,i))
|
||||
((set) `(toplevel-set ,i))))))))
|
||||
|
@ -243,11 +243,7 @@
|
|||
((set) '(variable-set)))))
|
||||
(else
|
||||
(let* ((var (make-vlink-later #:key key))
|
||||
(i (cond ((object-assoc var object-alist) => cdr)
|
||||
(else
|
||||
(let ((i (length object-alist)))
|
||||
(set! object-alist (acons var i object-alist))
|
||||
i)))))
|
||||
(i (object-index var)))
|
||||
(push-code! (case op
|
||||
((ref) `(toplevel-ref ,i))
|
||||
((set) `(toplevel-set ,i))))))))
|
||||
|
@ -282,14 +278,18 @@
|
|||
(let ((bytes (stack->bytes (reverse! stack) label-alist)))
|
||||
(if toplevel
|
||||
(bytecode->objcode bytes nlocs nexts)
|
||||
(let ((metathunk (make-meta closed-bindings
|
||||
(reverse! source-alist)
|
||||
meta)))
|
||||
(make-bytespec #:nargs nargs #:nrest nrest #:nlocs nlocs
|
||||
#:nexts nexts #:bytes bytes
|
||||
#:meta (make-meta closed-bindings
|
||||
(reverse! source-alist)
|
||||
meta)
|
||||
#:objs (let ((objs (map car (reverse! object-alist))))
|
||||
(if (null? objs) #f (list->vector objs)))
|
||||
#:closure? (venv-closure? venv))))))))))
|
||||
#:meta metathunk
|
||||
#:objs (if (and (null? object-alist) (not metathunk))
|
||||
#f
|
||||
(list->vector
|
||||
(append object-pre-elements
|
||||
(map car (reverse! object-alist)))))
|
||||
#:closure? (venv-closure? venv)))))))))))
|
||||
|
||||
(define (object-assoc x alist)
|
||||
(record-case x
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue