summaryrefslogtreecommitdiff
path: root/Lisp/memory-management.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'Lisp/memory-management.lisp')
-rw-r--r--Lisp/memory-management.lisp5
1 files changed, 4 insertions, 1 deletions
diff --git a/Lisp/memory-management.lisp b/Lisp/memory-management.lisp
index 890e96f..bca6a84 100644
--- a/Lisp/memory-management.lisp
+++ b/Lisp/memory-management.lisp
@@ -21,6 +21,7 @@
(defvar *id-objects* (make-weak-value-hash-table))
(defvar *exception-objects* (make-weak-value-hash-table))
(defvar *selector-objects* (make-weak-value-hash-table))
+(defvar *class-objects* (make-hash-table))
(defun intern-pointer-wrapper (class &rest initargs &key pointer &allow-other-keys)
@@ -37,7 +38,9 @@
(find-objc-meta-class-by-name (%objcl-class-name pointer))))
((%objcl-object-is-class pointer)
(return-from intern-pointer-wrapper
- (find-objc-class-by-name (%objcl-class-name pointer))))
+ (or (gethash (pointer-address pointer) *class-objects*)
+ (setf (gethash (pointer-address pointer) *class-objects*)
+ (find-objc-class-by-name (%objcl-class-name pointer))))))
((objcl-object-backed-by-lisp-class-p/pointer pointer)
(return-from intern-pointer-wrapper
(apply #'intern-lisp-managed-foreign-instance initargs)))))