summaryrefslogtreecommitdiff
path: root/Lisp/method-invocation.lisp
diff options
context:
space:
mode:
authorMatthias Benkard <code@mail.matthias.benkard.de>2008-03-06 14:57:16 +0100
committerMatthias Benkard <code@mail.matthias.benkard.de>2008-03-06 14:57:16 +0100
commit586a8505ecb5d95a9595ba67658c35898c038331 (patch)
treeb1a1fa3741885e79c187e7720294d67c2d9ff8b6 /Lisp/method-invocation.lisp
parent829e90949351cfe763b8eb87cacb605d440ae49b (diff)
Support super calls.
darcs-hash:d6b9645fe36711876226cd69bbbc4fce66a94fbb
Diffstat (limited to 'Lisp/method-invocation.lisp')
-rw-r--r--Lisp/method-invocation.lisp11
1 files changed, 10 insertions, 1 deletions
diff --git a/Lisp/method-invocation.lisp b/Lisp/method-invocation.lisp
index 8f1c9c0..ab520df 100644
--- a/Lisp/method-invocation.lisp
+++ b/Lisp/method-invocation.lisp
@@ -207,6 +207,11 @@ easier to use with __apply__.
__invoke__"
+ (invoke-by-name-super-v receiver method-name nil args))
+
+
+(defun invoke-by-name-super-v (receiver method-name superclass-for-send-super
+ args)
;; TODO: Support varargs.
(let* ((selector (if (typep method-name 'selector)
method-name
@@ -227,7 +232,11 @@ easier to use with __apply__.
argc (+ 2 (length args)))
(low-level-invoke receiver
selector
- (null-pointer)
+ (if (and superclass-for-send-super
+ (not (and (pointerp superclass-for-send-super)
+ (null-pointer-p superclass-for-send-super))))
+ (pointer-to superclass-for-send-super)
+ (null-pointer))
method-return-typestring
method-return-type
method-arg-typestrings