(with-recursive-lock-held (*g-boxed-gc-lock*)
(or (aprog1 (gethash (pointer-address pointer) *known-boxed-refs*)
(when it (debugf "Boxed-ref for ~A is found (~A)~%" pointer it))
+ (when it (incf (gethash (pointer-address pointer) *boxed-ref-count*)))
it)
(aprog1 (make-instance name :pointer pointer)
(setf (gethash (pointer-address pointer) *boxed-ref-owner*) (g-boxed-ref-owner type))
(setf (gethash (pointer-address value) *boxed-ref-owner*) owner))))
(defun g-boxed-ref-slot->methods (class slot)
- (bind (((slot-name &key reader writer type) slot))
+ (bind (((slot-name &key reader writer type (accessor slot-name)) slot))
`(progn ,@(when reader
- (list `(defmethod ,slot-name ((object ,class))
+ (list `(defmethod ,accessor ((object ,class))
,(if (stringp reader)
`(foreign-funcall ,reader :pointer (pointer object) ,type)
`(,reader object)))))
,@(when writer
- (list `(defmethod (setf ,slot-name) (new-value (object ,class))
+ (list `(defmethod (setf ,accessor) (new-value (object ,class))
,(if (stringp writer)
`(foreign-funcall ,writer :pointer (pointer object) ,type new-value)
`(,writer new-value object))))))))