summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Benkard <code@mail.matthias.benkard.de>2008-03-24 13:26:39 +0100
committerMatthias Benkard <code@mail.matthias.benkard.de>2008-03-24 13:26:39 +0100
commit1deb19a20e934084cda4499e6930e35b0d2777c3 (patch)
tree830105f0b5d7eea5b92c62c3cde761325f6d6353
parent3b01c27ac549612eaa317ea24af825b2a38d39c1 (diff)
Wrap Lisp values when trying to send them messages.
darcs-hash:c7cffd49bb312b7a6d88e3a5d29f3f5446827120
-rw-r--r--Lisp/libobjcl.lisp3
-rw-r--r--Lisp/method-invocation.lisp8
2 files changed, 9 insertions, 2 deletions
diff --git a/Lisp/libobjcl.lisp b/Lisp/libobjcl.lisp
index d633480..939f3b3 100644
--- a/Lisp/libobjcl.lisp
+++ b/Lisp/libobjcl.lisp
@@ -722,7 +722,8 @@ separating parts by hyphens works nicely in all of the `:INVERT`,
(defun pointer (thing)
(etypecase thing
(c-pointer thing)
- ((or c-pointer-wrapper exception) (pointer-to thing))))
+ ((or c-pointer-wrapper exception) (pointer-to thing))
+ (t (pointer-to (coerce-object thing :id)))))
(defun object-is-class-p (obj)
(%objcl-object-is-class (pointer obj)))
diff --git a/Lisp/method-invocation.lisp b/Lisp/method-invocation.lisp
index 4a3c209..9bb8a46 100644
--- a/Lisp/method-invocation.lisp
+++ b/Lisp/method-invocation.lisp
@@ -207,7 +207,13 @@ easier to use with __apply__.
__invoke__"
- (invoke-by-name-super-v receiver method-name nil args))
+ (invoke-by-name-super-v (typecase receiver
+ (symbol (find-objc-class receiver))
+ ((or id objective-c-class) receiver)
+ (t (pointer receiver)))
+ method-name
+ nil
+ args))
(defun invoke-by-name-super-v (receiver method-name superclass-for-send-super