]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: More use of get_this_{class|interface}_cexpression()
authorRico Tzschichholz <ricotz@ubuntu.com>
Tue, 4 May 2021 07:21:10 +0000 (09:21 +0200)
committerRico Tzschichholz <ricotz@ubuntu.com>
Tue, 4 May 2021 07:21:10 +0000 (09:21 +0200)
codegen/valaccodememberaccessmodule.vala
codegen/valaccodemethodcallmodule.vala

index 944aa3ea8253d4e5faa2d4cf1408c43da543668d..8f74e0d34a3d0dd1dad76fe41cc368acdd09b430 100644 (file)
@@ -66,18 +66,9 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
 
                        if (m.base_method != null) {
                                if (get_ccode_no_wrapper (m.base_method)) {
-                                       var base_class = (Class) m.base_method.parent_symbol;
+                                       unowned Class base_class = (Class) m.base_method.parent_symbol;
                                        if (!base_class.is_compact) {
-                                               CCodeFunctionCall vclass;
-                                               if (base_class.external_package) {
-                                                       vclass = new CCodeFunctionCall (new CCodeIdentifier ("G_TYPE_INSTANCE_GET_CLASS"));
-                                                       vclass.add_argument (pub_inst);
-                                                       vclass.add_argument (new CCodeIdentifier (get_ccode_type_id (base_class)));
-                                                       vclass.add_argument (new CCodeIdentifier (get_ccode_type_name (base_class)));
-                                               } else {
-                                                       vclass = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_type_get_function (base_class)));
-                                                       vclass.add_argument (pub_inst);
-                                               }
+                                               var vclass = get_this_class_cexpression (base_class, expr.inner.target_value);
                                                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)));
@@ -87,17 +78,8 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                                }
                        } else if (m.base_interface_method != null) {
                                if (get_ccode_no_wrapper (m.base_interface_method)) {
-                                       var base_iface = (Interface) m.base_interface_method.parent_symbol;
-                                       CCodeFunctionCall vclass;
-                                       if (base_iface.external_package) {
-                                               vclass = new CCodeFunctionCall (new CCodeIdentifier ("G_TYPE_INSTANCE_GET_INTERFACE"));
-                                               vclass.add_argument (pub_inst);
-                                               vclass.add_argument (new CCodeIdentifier (get_ccode_type_id (base_iface)));
-                                               vclass.add_argument (new CCodeIdentifier (get_ccode_type_name (base_iface)));
-                                       } else {
-                                               vclass = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_type_get_function (base_iface)));
-                                               vclass.add_argument (pub_inst);
-                                       }
+                                       unowned Interface base_iface = (Interface) m.base_interface_method.parent_symbol;
+                                       var vclass = get_this_interface_cexpression (base_iface, expr.inner.target_value);
                                        set_cvalue (expr, new CCodeMemberAccess.pointer (vclass, get_ccode_vfunc_name (m)));
                                } else {
                                        set_cvalue (expr, new CCodeIdentifier (get_ccode_name (m.base_interface_method)));
index 399a0572180edffc52a53822ce53165591b70538..95b4618c6633d147c2897c70eb075a34350c7cdb 100644 (file)
@@ -114,31 +114,14 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
                                        var inner_ma = (MemberAccess) ma.inner;
                                        instance_value = inner_ma.inner.target_value;
                                }
-                               var pub_inst = get_cvalue_ (instance_value);
 
-                               CCodeFunctionCall? vcast = null;
+                               CCodeExpression? vcast = null;
                                if (m.parent_symbol is Class) {
                                        unowned Class base_class = (Class) m.parent_symbol;
-                                       if (base_class.external_package) {
-                                               vcast = new CCodeFunctionCall (new CCodeIdentifier ("G_TYPE_INSTANCE_GET_CLASS"));
-                                               vcast.add_argument (pub_inst);
-                                               vcast.add_argument (new CCodeIdentifier (get_ccode_type_id (base_class)));
-                                               vcast.add_argument (new CCodeIdentifier (get_ccode_type_name (base_class)));
-                                       } else {
-                                               vcast = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_type_get_function (base_class)));
-                                               vcast.add_argument (pub_inst);
-                                       }
+                                       vcast = get_this_class_cexpression (base_class, instance_value);
                                } else if (m.parent_symbol is Interface) {
                                        unowned Interface base_iface = (Interface) m.parent_symbol;
-                                       if (base_iface.external_package) {
-                                               vcast = new CCodeFunctionCall (new CCodeIdentifier ("G_TYPE_INSTANCE_GET_INTERFACE"));
-                                               vcast.add_argument (pub_inst);
-                                               vcast.add_argument (new CCodeIdentifier (get_ccode_type_id (base_iface)));
-                                               vcast.add_argument (new CCodeIdentifier (get_ccode_type_name (base_iface)));
-                                       } else {
-                                               vcast = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_type_get_function (base_iface)));
-                                               vcast.add_argument (pub_inst);
-                                       }
+                                       vcast = get_this_interface_cexpression (base_iface, instance_value);
                                }
                                if (vcast != null) {
                                        async_call.call = new CCodeMemberAccess.pointer (vcast, get_ccode_vfunc_name (m));