(cons (make-argument *sod-key-pointer*
(c-type (* (void :const))))
raw-args))))
- (*keyword-struct-disposition* t))
+ (*keyword-struct-disposition* (if (effective-method-keywords method)
+ :pointer :null)))
(codegen-push codegen)
(ensure-ilayout-var codegen super)
(when (and (keyword-message-p message)
}
}
+/*----- Keyword argument propagation --------------------------------------*/
+
+[link = SodObject, nick = base]
+class T3Base : SodObject {
+ void m0(?int x) { STEP(x); }
+ void m1(?) { }
+}
+
+[link = T3Base, nick = sub]
+class T3Sub : T3Base {
+ 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);
+ }
+}
+
/*----- That's all, folks -------------------------------------------------*/