diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2021-01-30 21:17:25 +0100 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2021-02-27 19:48:10 +0100 |
commit | 45ab61004b324ae18d7abe3a9ade6b9d57cb3940 (patch) | |
tree | cdba70425d6b7993bdcf01ce99f2cd231929a2d3 | |
parent | 8cc8372c0a5a88efbe976633823ea0a77701e578 (diff) | |
download | vala-45ab61004b324ae18d7abe3a9ade6b9d57cb3940.tar.gz |
codegen: Allow CCode.type_cname for classes and use get_ccode_type_name()
-rw-r--r-- | codegen/valaccode.vala | 4 | ||||
-rw-r--r-- | codegen/valaccodeattribute.vala | 9 | ||||
-rw-r--r-- | codegen/valaccodebasemodule.vala | 2 | ||||
-rw-r--r-- | codegen/valaclassregisterfunction.vala | 2 | ||||
-rw-r--r-- | codegen/valagsignalmodule.vala | 9 | ||||
-rw-r--r-- | 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) { |