From: Rico Tzschichholz Date: Thu, 10 Jan 2019 19:02:39 +0000 (+0100) Subject: codegen: Emit struct declaration typedef before resolving its fields X-Git-Tag: 0.36.18~22 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8f433516c0d56a28d431b9415d5e8237b58437dc;p=thirdparty%2Fvala.git codegen: Emit struct declaration typedef before resolving its fields This a regression when compiling a circular dependency of delegates with structs. Regression of 7adb3a45bb8d663c0cfca55af26b7e6f7292b14a See https://gitlab.gnome.org/GNOME/vala/issues/318 --- diff --git a/codegen/valaccodestructmodule.vala b/codegen/valaccodestructmodule.vala index b1f160c1d..66b8fe33a 100644 --- a/codegen/valaccodestructmodule.vala +++ b/codegen/valaccodestructmodule.vala @@ -64,6 +64,12 @@ public abstract class Vala.CCodeStructModule : CCodeBaseModule { decl_space.add_type_member_declaration (type_fun.get_declaration ()); } + if (st.base_struct == null) { + decl_space.add_type_declaration (new CCodeTypeDefinition ("struct _%s".printf (get_ccode_name (st)), new CCodeVariableDeclarator (get_ccode_name (st)))); + } else { + decl_space.add_type_declaration (new CCodeTypeDefinition (get_ccode_name (st.base_struct), new CCodeVariableDeclarator (get_ccode_name (st)))); + } + var instance_struct = new CCodeStruct ("_%s".printf (get_ccode_name (st))); instance_struct.modifiers |= (st.version.deprecated ? CCodeModifiers.DEPRECATED : 0); @@ -107,11 +113,7 @@ public abstract class Vala.CCodeStructModule : CCodeBaseModule { } if (st.base_struct == null) { - decl_space.add_type_declaration (new CCodeTypeDefinition ("struct _%s".printf (get_ccode_name (st)), new CCodeVariableDeclarator (get_ccode_name (st)))); - decl_space.add_type_definition (instance_struct); - } else { - decl_space.add_type_declaration (new CCodeTypeDefinition (get_ccode_name (st.base_struct), new CCodeVariableDeclarator (get_ccode_name (st)))); } var function = new CCodeFunction (get_ccode_dup_function (st), get_ccode_name (st) + "*");