]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Fix invocation of abstract/virtual methods with NoWrapper in compact classes
authorRico Tzschichholz <ricotz@ubuntu.com>
Sun, 8 Jul 2018 13:02:54 +0000 (15:02 +0200)
committerRico Tzschichholz <ricotz@ubuntu.com>
Sun, 8 Jul 2018 15:55:23 +0000 (17:55 +0200)
codegen/valaccodememberaccessmodule.vala
tests/objects/bug741465.vala

index 30aec9499501580b82f2f8c69395a93667d1703e..4004486439d1c63de307f42c9b726e2046c95ce6 100644 (file)
@@ -68,9 +68,13 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                        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)));
                                }
index e420aecf302c5747a225fbb127a532ed9c91e1bc..638d4447db44bb14690569ec255382a71c4fe72a 100644 (file)
@@ -53,6 +53,11 @@ class Manam {
        public virtual unowned string foo () {
                return "Manam";
        }
+
+       [NoWrapper]
+       public virtual int foo_plain () {
+               return 13;
+       }
 }
 
 [Compact]
@@ -60,6 +65,10 @@ class Baz : Manam {
        public override unowned string foo () {
                return "Baz";
        }
+
+       public override int foo_plain () {
+               return 23;
+       }
 }
 
 void main () {
@@ -78,9 +87,11 @@ 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);
 }