From 4b98e8d6f54256810b243afe9ea9abf5ad6d445b Mon Sep 17 00:00:00 2001 From: Matthias Benkard Date: Wed, 19 Mar 2008 12:44:39 +0100 Subject: Move (OBJECT-GET-CLASS RECEIVER) from INVOKE-BY-NAME-SUPER-V to RETRIEVE-METHOD-SIGNATURE-INFO. darcs-hash:1fd46a3dbdb3a5e2ec284be3255dd08b2b074414 --- Lisp/method-invocation.lisp | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) (limited to 'Lisp/method-invocation.lisp') diff --git a/Lisp/method-invocation.lisp b/Lisp/method-invocation.lisp index c4ba3fc..29ad3c6 100644 --- a/Lisp/method-invocation.lisp +++ b/Lisp/method-invocation.lisp @@ -215,17 +215,13 @@ easier to use with __apply__. ;; TODO: Support varargs. (let* ((selector (if (typep method-name 'selector) method-name - (find-selector method-name))) - (class (object-get-class receiver))) + (find-selector method-name)))) (multiple-value-bind (argc method-return-typestring method-return-type method-arg-typestrings method-arg-types) - (retrieve-method-signature-info class selector - (if (object-is-class-p receiver) - :class - :instance)) + (retrieve-method-signature-info receiver selector) (assert (= argc (+ 2 (length args))) (args) "Wrong number of arguments (expected ~A, got ~A)." @@ -296,17 +292,19 @@ easier to use with __apply__. (define-cached-function retrieve-method-signature-info - (class selector &optional (instance-or-class :instance)) - (cons (cffi:pointer-address (pointer-to class)) + (receiver selector + &aux (class-ptr (%objcl-object-get-class (pointer receiver)))) + (cons (cffi:pointer-address class-ptr) (cffi:pointer-address (pointer-to selector))) - (let* ((signature - (objc-or (if (eq instance-or-class :instance) + (let* ((class (object-get-class receiver)) + (signature + (objc-or (if (object-is-class-p receiver) (primitive-invoke class - "instanceMethodSignatureForSelector:" + "methodSignatureForSelector:" 'id selector) (primitive-invoke class - "methodSignatureForSelector:" + "instanceMethodSignatureForSelector:" 'id selector)) (error (make-condition 'message-not-understood -- cgit v1.2.3