(make-room-info :name 'instance
:kind :instance))
+(setf (svref *meta-room-info* funcallable-instance-header-widetag)
+ (make-room-info :name 'funcallable-instance
+ :kind :closure))
+
) ; EVAL-WHEN
(defparameter *room-info* '#.*meta-room-info*)
(progn
(define-alien-type (struct page)
(struct page
- (start long)
+ (start signed)
;; On platforms with small enough GC pages, this field
;; will be a short. On platforms with larger ones, it'll
;; be an int.
(flags (unsigned 8))
(gen (signed 8))))
(declaim (inline find-page-index))
- (define-alien-routine "find_page_index" long (index long))
+ (define-alien-routine "find_page_index" long (index signed))
(define-alien-variable "page_table" (* (struct page))))
;;; Iterate over all the objects allocated in SPACE, calling FUN with
#!-sb-fluid (declaim (maybe-inline map-allocated-objects))
(defun map-allocated-objects (fun space &optional careful)
(declare (type function fun) (type spaces space))
+ (declare (optimize (sb!c:alien-funcall-saves-fp-and-pc 0)))
(flet ((make-obj (tagged-address)
(if careful
(make-lisp-obj tagged-address nil)
list-pointer-lowtag
(* cons-size n-word-bytes)
ok)))
- ((eql header-widetag closure-header-widetag)
+ ((eq (room-info-kind info) :closure)
(let* ((obj (%make-lisp-obj (logior (sap-int current)
fun-pointer-lowtag)))
(size (round-to-dualword