From: Rico Tzschichholz Date: Sun, 28 Apr 2019 15:52:40 +0000 (+0200) Subject: girwriter: Properly write attributes for non-GObject classes X-Git-Tag: 0.36.20~32 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cb5bac833c9020a7e5f44a1945b3dbb0306e133c;p=thirdparty%2Fvala.git girwriter: Properly write attributes for non-GObject classes --- diff --git a/codegen/valagirwriter.vala b/codegen/valagirwriter.vala index 3696d7d14..f60d210a3 100644 --- a/codegen/valagirwriter.vala +++ b/codegen/valagirwriter.vala @@ -112,6 +112,8 @@ public class Vala.GIRWriter : CodeVisitor { private TypeSymbol gobject_type; private TypeSymbol ginitiallyunowned_type; private TypeSymbol gtypeinterface_type; + private TypeSymbol gtypeinstance_type; + private TypeSymbol gtype_type; private struct GIRNamespace { public GIRNamespace (string ns, string version) { @@ -155,6 +157,8 @@ public class Vala.GIRWriter : CodeVisitor { gobject_type = (TypeSymbol) glib_ns.scope.lookup ("Object"); ginitiallyunowned_type = (TypeSymbol) glib_ns.scope.lookup ("InitiallyUnowned"); gtypeinterface_type = (TypeSymbol) glib_ns.scope.lookup ("TypeInterface"); + gtypeinstance_type = (TypeSymbol) glib_ns.scope.lookup ("TypeInstance"); + gtype_type = (TypeSymbol) glib_ns.scope.lookup ("Type"); write_package (package); @@ -319,14 +323,22 @@ public class Vala.GIRWriter : CodeVisitor { return; } - if (cl.is_subtype_of (gobject_type)) { + if (!cl.is_compact) { string gtype_struct_name = get_gir_name (cl) + "Class"; write_indent (); buffer.append_printf ("\n"); indent++; write_indent (); - buffer.append_printf ("\n", gi_type_name (cl.base_class), CCodeBaseModule.get_ccode_name (cl.base_class)); + if (cl.base_class == null) { + buffer.append_printf ("\n", gi_type_name (gtypeinstance_type), CCodeBaseModule.get_ccode_name (gtypeinstance_type)); + } else { + buffer.append_printf ("\n", gi_type_name (cl.base_class), CCodeBaseModule.get_ccode_name (cl.base_class)); + } indent--; write_indent (); buffer.append_printf("\n"); + if (cl.base_class == null) { + write_indent (); + buffer.append_printf ("\n"); + indent++; + write_indent (); + buffer.append_printf ("\n"); + indent--; + write_indent (); + buffer.append_printf("\n"); + } + write_indent (); buffer.append_printf ("\n"); indent++; @@ -382,7 +409,12 @@ public class Vala.GIRWriter : CodeVisitor { buffer.append_printf ("\n"); indent++; write_indent (); - buffer.append_printf ("\n", gi_type_name (cl.base_class), CCodeBaseModule.get_ccode_name (cl.base_class)); + if (cl.base_class == null) { + //FIXME GObject.TypeClass vs GType + buffer.append_printf ("\n", "GObject.Type", CCodeBaseModule.get_ccode_name (gtype_type)); + } else { + buffer.append_printf ("\n", gi_type_name (cl.base_class), CCodeBaseModule.get_ccode_name (cl.base_class)); + } indent--; write_indent (); buffer.append_printf ("\n");