summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2021-01-30 21:17:25 +0100
committerRico Tzschichholz <ricotz@ubuntu.com>2021-02-27 19:48:10 +0100
commit45ab61004b324ae18d7abe3a9ade6b9d57cb3940 (patch)
treecdba70425d6b7993bdcf01ce99f2cd231929a2d3
parent8cc8372c0a5a88efbe976633823ea0a77701e578 (diff)
downloadvala-45ab61004b324ae18d7abe3a9ade6b9d57cb3940.tar.gz
codegen: Allow CCode.type_cname for classes and use get_ccode_type_name()
-rw-r--r--codegen/valaccode.vala4
-rw-r--r--codegen/valaccodeattribute.vala9
-rw-r--r--codegen/valaccodebasemodule.vala2
-rw-r--r--codegen/valaclassregisterfunction.vala2
-rw-r--r--codegen/valagsignalmodule.vala9
-rw-r--r--codegen/valagtypemodule.vala6
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) {