if (m.base_method != null) {
if (!method_has_wrapper (m.base_method)) {
var base_class = (Class) m.base_method.parent_symbol;
- var vclass = new CCodeFunctionCall (new CCodeIdentifier ("%s_GET_CLASS".printf (get_ccode_upper_case_name (base_class))));
- vclass.add_argument (pub_inst);
- set_cvalue (expr, new CCodeMemberAccess.pointer (vclass, get_ccode_vfunc_name (m)));
+ if (!base_class.is_compact) {
+ var vclass = new CCodeFunctionCall (new CCodeIdentifier ("%s_GET_CLASS".printf (get_ccode_upper_case_name (base_class))));
+ vclass.add_argument (pub_inst);
+ set_cvalue (expr, new CCodeMemberAccess.pointer (vclass, get_ccode_vfunc_name (m)));
+ } else {
+ set_cvalue (expr, new CCodeMemberAccess.pointer (pub_inst, get_ccode_vfunc_name (m)));
+ }
} else {
set_cvalue (expr, new CCodeIdentifier (get_ccode_name (m.base_method)));
}
public virtual unowned string foo () {
return "Manam";
}
+
+ [NoWrapper]
+ public virtual int foo_plain () {
+ return 13;
+ }
}
[Compact]
public override unowned string foo () {
return "Baz";
}
+
+ public override int foo_plain () {
+ return 23;
+ }
}
void main () {
var manam = new Manam ();
assert (manam.foo () == "Manam");
assert (manam.prop == 24);
+ assert (manam.foo_plain () == 13);
var baz = new Baz ();
assert (baz.foo () == "Baz");
baz.prop = 42;
assert (baz.prop == 42);
+ assert (baz.foo_plain () == 23);
}