From: Rico Tzschichholz Date: Sat, 30 Jan 2021 20:17:25 +0000 (+0100) Subject: codegen: Allow CCode.type_cname for classes and use get_ccode_type_name() X-Git-Tag: 0.51.1~41 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d3f0284321c542ad0918274d9c05b3c93ae14ce9;p=thirdparty%2Fvala.git codegen: Allow CCode.type_cname for classes and use get_ccode_type_name() --- 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 dc6307b7b..df74b0636 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 515851525..c69351e2e 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -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 (); } 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 8ba915557..af2f69531 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) {