summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Benkard <code@mail.matthias.benkard.de>2008-03-06 14:15:25 +0100
committerMatthias Benkard <code@mail.matthias.benkard.de>2008-03-06 14:15:25 +0100
commit829e90949351cfe763b8eb87cacb605d440ae49b (patch)
treec8a2e77658b26ca564710bd3042b4518dfd30a53
parentb9e7d47e24d862f4c80604cfa4e1b6dddf48d607 (diff)
Implement INTERN-LISP-VALUE.
darcs-hash:78901552fd2a363337b9d4742e0ddf80de731b3f
-rw-r--r--Lisp/lisp-value-wrapping.lisp13
1 files changed, 7 insertions, 6 deletions
diff --git a/Lisp/lisp-value-wrapping.lisp b/Lisp/lisp-value-wrapping.lisp
index b0a7794..3236d99 100644
--- a/Lisp/lisp-value-wrapping.lisp
+++ b/Lisp/lisp-value-wrapping.lisp
@@ -44,16 +44,15 @@
(intern-lisp-value x))
(defcoercion id ((x string))
- ;; FIXME: Implement INTERN-LISP-VALUE.
- (primitive-invoke (find-objc-class 'ns-string)
- "stringWithUTF8String:"
- 'id
- x))
+ (intern-lisp-value x))
(defcoercion id ((x t))
(intern-lisp-value x))
+(defvar *lisp-value-wrappers* (make-weak-value-hash-table))
+
+
(defun intern-lisp-value (value)
;; We need this function in order to preserve object identity on the
;; Objective-C side. As we want [(intern-lisp-value 10) self] to
@@ -65,7 +64,9 @@
;;
;; will evaluate to true unless we generally intern Lisp value
;; wrappers.
- (error "FIXME"))
+ (or (weak-gethash value *lisp-value-wrappers* nil)
+ (setf (weak-gethash value *lisp-value-wrappers*)
+ (make-lisp-value value))))
(defun make-lisp-value (value)