[vala/0.40] codegen: Emit delegate/enum typedefs to type-declaration section
- From: Rico Tzschichholz <ricotz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/0.40] codegen: Emit delegate/enum typedefs to type-declaration section
- Date: Tue, 18 Dec 2018 09:31:31 +0000 (UTC)
commit 8a1ad2337d7e59b39c573516bbb019b6efc8b894
Author: Rico Tzschichholz <ricotz ubuntu com>
Date: Thu Dec 6 22:41:43 2018 +0100
codegen: Emit delegate/enum typedefs to type-declaration section
This fixes compilation of circular dependency of delegates with enums,
structs, classes and interfaces.
Resolve interface prerequisites after writing forward declarations to
fix entagled delegate dependencies in them.
Fixes https://gitlab.gnome.org/GNOME/vala/issues/318
codegen/valaccodebasemodule.vala | 4 ++--
codegen/valaccodedelegatemodule.vala | 2 +-
codegen/valagtypemodule.vala | 20 ++++++++++----------
3 files changed, 13 insertions(+), 13 deletions(-)
---
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index 80c838c1d..4240e7147 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -824,8 +824,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
cfile = current_cfile;
- decl_space.add_type_definition (cenum);
- decl_space.add_type_definition (new CCodeNewline ());
+ decl_space.add_type_declaration (cenum);
+ decl_space.add_type_declaration (new CCodeNewline ());
if (!get_ccode_has_type_id (en)) {
return true;
diff --git a/codegen/valaccodedelegatemodule.vala b/codegen/valaccodedelegatemodule.vala
index 52dafc9d2..b83d9ca3e 100644
--- a/codegen/valaccodedelegatemodule.vala
+++ b/codegen/valaccodedelegatemodule.vala
@@ -123,7 +123,7 @@ public class Vala.CCodeDelegateModule : CCodeArrayModule {
var ctypedef = new CCodeTypeDefinition (return_type_cname, cfundecl);
ctypedef.modifiers |= (d.version.deprecated ? CCodeModifiers.DEPRECATED : 0);
- decl_space.add_type_definition (ctypedef);
+ decl_space.add_type_declaration (ctypedef);
}
public override void visit_delegate (Delegate d) {
diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala
index 06b11b95a..77725620e 100644
--- a/codegen/valagtypemodule.vala
+++ b/codegen/valagtypemodule.vala
@@ -2034,16 +2034,6 @@ public class Vala.GTypeModule : GErrorModule {
return;
}
- foreach (DataType prerequisite in iface.get_prerequisites ()) {
- var prereq_cl = prerequisite.data_type as Class;
- var prereq_iface = prerequisite.data_type as Interface;
- if (prereq_cl != null) {
- generate_class_declaration (prereq_cl, decl_space);
- } else if (prereq_iface != null) {
- generate_interface_declaration (prereq_iface, decl_space);
- }
- }
-
var type_struct = new CCodeStruct ("_%s".printf (get_ccode_type_name (iface)));
decl_space.add_type_declaration (new CCodeNewline ());
@@ -2063,6 +2053,16 @@ public class Vala.GTypeModule : GErrorModule {
decl_space.add_type_declaration (new CCodeTypeDefinition ("struct _%s".printf (get_ccode_name
(iface)), new CCodeVariableDeclarator (get_ccode_name (iface))));
decl_space.add_type_declaration (new CCodeTypeDefinition ("struct %s".printf
(type_struct.name), new CCodeVariableDeclarator (get_ccode_type_name (iface))));
+ foreach (DataType prerequisite in iface.get_prerequisites ()) {
+ var prereq_cl = prerequisite.data_type as Class;
+ var prereq_iface = prerequisite.data_type as Interface;
+ if (prereq_cl != null) {
+ generate_class_declaration (prereq_cl, decl_space);
+ } else if (prereq_iface != null) {
+ generate_interface_declaration (prereq_iface, decl_space);
+ }
+ }
+
type_struct.add_field ("GTypeInterface", "parent_iface");
if (iface.get_attribute ("GenericAccessors") != null) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]