X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Froom.lisp;h=e38ce5ecc885e34638aa75c957f75f15912b8716;hb=892a8350afb02baabef38c4cba48c25a82d9d679;hp=4f81df1d0bee13f2aaa92bb414d090cb60fde512;hpb=8b88c2076197247908a5035df1ebbf833c554383;p=sbcl.git diff --git a/src/code/room.lisp b/src/code/room.lisp index 4f81df1..e38ce5e 100644 --- a/src/code/room.lisp +++ b/src/code/room.lisp @@ -129,6 +129,10 @@ (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*) @@ -212,6 +216,7 @@ #!-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) @@ -303,7 +308,7 @@ 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