diff options
author | Matthias Benkard <code@mail.matthias.benkard.de> | 2008-02-02 23:49:57 +0100 |
---|---|---|
committer | Matthias Benkard <code@mail.matthias.benkard.de> | 2008-02-02 23:49:57 +0100 |
commit | 628a01f38931b5cd3b3c1ede19e8b0b5678bf453 (patch) | |
tree | b51002ff91016a5ec9d276c78c27f649f4d9776f /Lisp/memory-management.lisp | |
parent | 3d0e2eda9285b91a998b86cb72c806c2aa5d789e (diff) |
Introduce new metaclass OBJECTIVE-C-META-CLASS.
darcs-hash:3d9bf7fb5b37a4089ae3d85493612c6e6abc4469
Diffstat (limited to 'Lisp/memory-management.lisp')
-rw-r--r-- | Lisp/memory-management.lisp | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/Lisp/memory-management.lisp b/Lisp/memory-management.lisp index 4b6666e..5463e0b 100644 --- a/Lisp/memory-management.lisp +++ b/Lisp/memory-management.lisp @@ -21,19 +21,20 @@ (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 *meta-class-objects* (make-weak-value-hash-table)) (defun make-pointer-wrapper (class &rest initargs &key pointer &allow-other-keys) - (when (and (not (eq 'selector class)) - (%objcl-object-is-class pointer)) - (return-from make-pointer-wrapper - (find-objc-class-by-name (%objcl-class-name pointer)))) + (when (not (eq 'selector class)) + (cond ((%objcl-object-is-meta-class pointer) + (return-from make-pointer-wrapper + (find-objc-meta-class-by-name (%objcl-class-name pointer)))) + ((%objcl-object-is-class pointer) + (return-from make-pointer-wrapper + (find-objc-class-by-name (%objcl-class-name pointer)))))) (let* ((hash-table (ecase class ((id) *id-objects*) ((exception) *exception-objects*) - ((selector) *selector-objects*) - ((objc-meta-class) *meta-class-objects*))) + ((selector) *selector-objects*))) (address (cffi:pointer-address pointer)) (object (weak-gethash address hash-table nil)) (constructor (case class |