]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Allow CCode.type_cname for classes and use get_ccode_type_name()
authorRico Tzschichholz <ricotz@ubuntu.com>
Sat, 30 Jan 2021 20:17:25 +0000 (21:17 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Sat, 30 Jan 2021 20:17:25 +0000 (21:17 +0100)
codegen/valaccode.vala
codegen/valaccodeattribute.vala
codegen/valaccodebasemodule.vala
codegen/valaclassregisterfunction.vala
codegen/valagsignalmodule.vala
codegen/valagtypemodule.vala

index 3284647c35004404b117faacefbe96624779c0a2..175cd99ea6b67651a4b921e15159272f6e9c4408 100644 (file)
@@ -45,8 +45,8 @@ namespace Vala {
                return get_ccode_attribute(node).const_name;
        }
 
-       public static string get_ccode_type_name (Interface iface) {
-               return get_ccode_attribute(iface).type_name;
+       public static string get_ccode_type_name (ObjectTypeSymbol sym) {
+               return get_ccode_attribute (sym).type_name;
        }
 
        public static string get_ccode_type_cast_function (ObjectTypeSymbol sym) {
index dc6307b7b90035019079fa88a1c4877fba5fadb2..df74b06369594f0b0091b838dc38a54449765a1d 100644 (file)
@@ -64,7 +64,14 @@ public class Vala.CCodeAttribute : AttributeCache {
                                        _type_name = ccode.get_string ("type_cname");
                                }
                                if (_type_name == null) {
-                                       _type_name = "%sIface".printf (get_ccode_name (sym));
+                                       if (sym is Class) {
+                                               _type_name = "%sClass".printf (get_ccode_name (sym));
+                                       } else if (sym is Interface) {
+                                               _type_name = "%sIface".printf (get_ccode_name (sym));
+                                       } else {
+                                               Report.error (sym.source_reference, "`CCode.type_cname' not supported");
+                                               _type_name = "";
+                                       }
                                }
                        }
                        return _type_name;
index 515851525e01aef9189e104482b1061570ee46c6..c69351e2ea8086568e53686ee8ec4338ed92b675 100644 (file)
@@ -6579,7 +6579,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                return new CCodeInvalidExpression ();
        }
 
-       public virtual CCodeExpression get_signal_creation (Signal sig, TypeSymbol type) {
+       public virtual CCodeExpression get_signal_creation (Signal sig, ObjectTypeSymbol type) {
                return new CCodeInvalidExpression ();
        }
 
index c3d0d57e3d13f6cd9a204d2d63ad1e3990d19ce3..5c9b3cfd4677d0b2155306e026e18959f29f3333 100644 (file)
@@ -46,7 +46,7 @@ public class Vala.ClassRegisterFunction : TypeRegisterFunction {
        }
 
        public override string get_type_struct_name () {
-               return "%sClass".printf (get_ccode_name (class_reference));
+               return get_ccode_type_name (class_reference);
        }
 
        public override string get_base_init_func_name () {
index e005f6b3845da7a9adfafb1ab39044aed79e80b5..126e78a44f744adf6a95c202aa79f75aa80330ca 100644 (file)
@@ -346,7 +346,7 @@ public class Vala.GSignalModule : GObjectModule {
                user_marshal_set.add (signature);
        }
 
-       public override CCodeExpression get_signal_creation (Signal sig, TypeSymbol type) {
+       public override CCodeExpression get_signal_creation (Signal sig, ObjectTypeSymbol type) {
                CCodeFunctionCall csignew;
                if (sig.default_handler == null || sig.is_virtual) {
                        csignew = new CCodeFunctionCall (new CCodeIdentifier ("g_signal_new"));
@@ -390,12 +390,7 @@ public class Vala.GSignalModule : GObjectModule {
                        csignew.add_argument (new CCodeConstant ("0"));
                } else if (sig.is_virtual) {
                        var struct_offset = new CCodeFunctionCall (new CCodeIdentifier ("G_STRUCT_OFFSET"));
-                       if (type is Class) {
-                               struct_offset.add_argument (new CCodeIdentifier ("%sClass".printf (get_ccode_name (type))));
-                       } else {
-                               // interface
-                               struct_offset.add_argument (new CCodeIdentifier (get_ccode_type_name ((Interface) type)));
-                       }
+                       struct_offset.add_argument (new CCodeIdentifier (get_ccode_type_name (type)));
                        struct_offset.add_argument (new CCodeIdentifier (get_ccode_vfunc_name (sig.default_handler)));
                        csignew.add_argument (struct_offset);
                } else {
index 8ba9155576aaa8e308923fb51cf1ccc592273d5d..af2f6953155e1c617488213a0ded10ec2e70921e 100644 (file)
@@ -184,7 +184,7 @@ public class Vala.GTypeModule : GErrorModule {
                }
 
                if (is_gtypeinstance) {
-                       decl_space.add_type_declaration (new CCodeTypeDefinition ("struct _%sClass".printf (get_ccode_name (cl)), new CCodeVariableDeclarator ("%sClass".printf (get_ccode_name (cl)))));
+                       decl_space.add_type_declaration (new CCodeTypeDefinition ("struct _%s".printf (get_ccode_type_name (cl)), new CCodeVariableDeclarator (get_ccode_type_name (cl))));
 
                        var type_fun = new ClassRegisterFunction (cl);
                        type_fun.init_from_type (context, in_plugin, true);
@@ -236,7 +236,7 @@ public class Vala.GTypeModule : GErrorModule {
                bool is_fundamental = is_gtypeinstance && cl.base_class == null;
 
                var instance_struct = new CCodeStruct ("_%s".printf (get_ccode_name (cl)));
-               var type_struct = new CCodeStruct ("_%sClass".printf (get_ccode_name (cl)));
+               var type_struct = new CCodeStruct ("_%s".printf (get_ccode_type_name (cl)));
 
                if (cl.base_class != null) {
                        instance_struct.add_field (get_ccode_name (cl.base_class), "parent_instance");
@@ -254,7 +254,7 @@ public class Vala.GTypeModule : GErrorModule {
                        if (is_fundamental) {
                                type_struct.add_field ("GTypeClass", "parent_class");
                        } else {
-                               type_struct.add_field ("%sClass".printf (get_ccode_name (cl.base_class)), "parent_class");
+                               type_struct.add_field (get_ccode_type_name (cl.base_class), "parent_class");
                        }
 
                        if (is_fundamental) {