[vala/0.50] codegen: Allow CCode.type_cname for classes and use get_ccode_type_name()



commit 45ab61004b324ae18d7abe3a9ade6b9d57cb3940
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Sat Jan 30 21:17:25 2021 +0100

    codegen: Allow CCode.type_cname for classes and use get_ccode_type_name()

 codegen/valaccode.vala                 | 4 ++--
 codegen/valaccodeattribute.vala        | 9 ++++++++-
 codegen/valaccodebasemodule.vala       | 2 +-
 codegen/valaclassregisterfunction.vala | 2 +-
 codegen/valagsignalmodule.vala         | 9 ++-------
 codegen/valagtypemodule.vala           | 6 +++---
 6 files changed, 17 insertions(+), 15 deletions(-)
---
diff --git a/codegen/valaccode.vala b/codegen/valaccode.vala
index 3284647c3..175cd99ea 100644
--- a/codegen/valaccode.vala
+++ b/codegen/valaccode.vala
@@ -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) {
diff --git a/codegen/valaccodeattribute.vala b/codegen/valaccodeattribute.vala
index c73d124c0..82c30b7f2 100644
--- a/codegen/valaccodeattribute.vala
+++ b/codegen/valaccodeattribute.vala
@@ -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;
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index 68ba87942..4bafa5203 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -6577,7 +6577,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 ();
        }
 
diff --git a/codegen/valaclassregisterfunction.vala b/codegen/valaclassregisterfunction.vala
index c3d0d57e3..5c9b3cfd4 100644
--- a/codegen/valaclassregisterfunction.vala
+++ b/codegen/valaclassregisterfunction.vala
@@ -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 () {
diff --git a/codegen/valagsignalmodule.vala b/codegen/valagsignalmodule.vala
index e005f6b38..126e78a44 100644
--- a/codegen/valagsignalmodule.vala
+++ b/codegen/valagsignalmodule.vala
@@ -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 {
diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala
index e2bea7661..75a0f92b4 100644
--- a/codegen/valagtypemodule.vala
+++ b/codegen/valagtypemodule.vala
@@ -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) {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]