summaryrefslogtreecommitdiff
path: root/Lisp/method-invocation.lisp
diff options
context:
space:
mode:
authorMatthias Benkard <code@mail.matthias.benkard.de>2008-02-12 18:20:54 +0100
committerMatthias Benkard <code@mail.matthias.benkard.de>2008-02-12 18:20:54 +0100
commit308b848cc4e6630356d84fc43530739a72374130 (patch)
tree5bc36df8d4fca2906951c473c508adbd75537dd5 /Lisp/method-invocation.lisp
parent1f87c8d3385203966e88711eae9bf0e5a7493b43 (diff)
When overriding a return type specification, save the nominal type for later use.
darcs-hash:40bdaeb5687e6ad142766f1ee041231e875c1d49
Diffstat (limited to 'Lisp/method-invocation.lisp')
-rw-r--r--Lisp/method-invocation.lisp10
1 files changed, 9 insertions, 1 deletions
diff --git a/Lisp/method-invocation.lisp b/Lisp/method-invocation.lisp
index 929162f..dd36dd3 100644
--- a/Lisp/method-invocation.lisp
+++ b/Lisp/method-invocation.lisp
@@ -415,7 +415,15 @@ easier to use with __apply__.
objc-arg-ptrs)))
(unless (cffi:null-pointer-p error-cell)
(error (make-condition 'exception :pointer error-cell)))
- (case (car return-type)
+ (case (let ((nominal-type (find-if #'(lambda (x)
+ (and (consp x)
+ (eq (car x) 'nominally)))
+ (cadr return-type))))
+ ;; Do the modifiers include something like
+ ;; (NOMINALLY :UNSIGNED-CHAR)?
+ (if nominal-type
+ (cadr nominal-type)
+ (car return-type)))
((id objective-c-class exception selector)
(let ((*skip-retaining*
(or *skip-retaining*