nil."
(let* ((message (codegen-message codegen))
- (argument-tail (cond ((varargs-message-p message)
- (cons *sod-tmp-ap* basic-tail))
- ((keyword-message-p message)
- (cons (keyword-struct-pointer) basic-tail))
- (t basic-tail))))
+ (argument-tail (if (varargs-message-p message)
+ (cons *sod-tmp-ap* basic-tail)
+ basic-tail)))
(labels ((next-trampoline (method chain)
(if (or kernel chain)
(make-trampoline codegen (sod-method-class method)
(if (null chain)
(funcall kernel target)
(let ((trampoline (next-trampoline (car chain)
- (cdr chain))))
+ (cdr chain)))
+ (tail (if (keyword-message-p message)
+ (cons (keyword-struct-pointer)
+ argument-tail)
+ argument-tail)))
(invoke-method codegen target
- (cons trampoline argument-tail)
+ (cons trampoline tail)
(car chain))))))
(invoke chain target))))
void m1(?) { }
}
-[link = T3Base, nick = sub]
-class T3Sub : T3Base {
+[link = T3Base, nick = mid]
+class T3Mid : T3Base {
+ void base.m0(?int y) { STEP(y); CALL_NEXT_METHOD; }
+ void base.m1(?) { STEP(4); CALL_NEXT_METHOD; }
+}
+
+[link = T3Mid, nick = sub]
+class T3Sub : T3Mid {
void base.m0(?int z) { STEP(z); CALL_NEXT_METHOD; }
void base.m1(?int z) { STEP(z); CALL_NEXT_METHOD; }
}
code c : tests {
prepare("kwargs");
{ SOD_DECL(T3Sub, t, NO_KWARGS);
- T3Base_m0(t, KWARGS(K(z, 0) K(x, 1)));
- T3Base_m1(t, KWARGS(K(z, 2)));
- DONE(3);
+ T3Base_m0(t, KWARGS(K(z, 0) K(y, 1) K(x, 2)));
+ T3Base_m1(t, KWARGS(K(z, 3)));
+ DONE(5);
}
}