GIR parser fails on cyclic closure/destroy parameter references
A GIR which includes cross referencing parameters for closure/destroy parameters for a callback will result in them being omitted completely
<method name="spawn_async"
c:identifier="vte_pty_spawn_async"
version="0.48">
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="pty" transfer-ownership="none">
<type name="Pty" c:type="VtePty*"/>
</instance-parameter>
<parameter name="working_directory"
transfer-ownership="none"
nullable="1"
allow-none="1">
<type name="utf8" c:type="const char*"/>
</parameter>
<parameter name="argv" transfer-ownership="none">
<array c:type="char**">
<type name="filename"/>
</array>
</parameter>
<parameter name="envv"
transfer-ownership="none"
nullable="1"
allow-none="1">
<array c:type="char**">
<type name="filename"/>
</array>
</parameter>
<parameter name="spawn_flags" transfer-ownership="none">
<type name="GLib.SpawnFlags" c:type="GSpawnFlags"/>
</parameter>
<parameter name="child_setup"
transfer-ownership="none"
nullable="1"
allow-none="1"
scope="notified"
closure="5"
destroy="6">
<type name="GLib.SpawnChildSetupFunc"
c:type="GSpawnChildSetupFunc"/>
</parameter>
<parameter name="child_setup_data"
transfer-ownership="none"
nullable="1"
allow-none="1"
scope="notified"
closure="4">
<type name="gpointer" c:type="gpointer"/>
</parameter>
<parameter name="child_setup_data_destroy"
transfer-ownership="none"
scope="async"
destroy="5">
<type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
</parameter>
<parameter name="timeout" transfer-ownership="none">
<type name="gint" c:type="int"/>
</parameter>
<parameter name="cancellable"
transfer-ownership="none"
nullable="1"
allow-none="1">
<type name="Gio.Cancellable" c:type="GCancellable*"/>
</parameter>
<parameter name="callback"
transfer-ownership="none"
nullable="1"
allow-none="1"
scope="async"
closure="10">
<type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
</parameter>
<parameter name="user_data"
transfer-ownership="none"
nullable="1"
allow-none="1">
<type name="gpointer" c:type="gpointer"/>
</parameter>
</parameters>
</method>
<method name="spawn_finish"
c:identifier="vte_pty_spawn_finish"
version="0.48"
throws="1">
<source-position filename="vte/vtepty.h" line="113"/>
<return-value transfer-ownership="none">
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
<instance-parameter name="pty" transfer-ownership="none">
<type name="Pty" c:type="VtePty*"/>
</instance-parameter>
<parameter name="result" transfer-ownership="none">
<type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
</parameter>
<parameter name="child_pid"
direction="out"
caller-allocates="0"
transfer-ownership="full"
optional="1"
allow-none="1">
<type name="GLib.Pid" c:type="GPid*"/>
</parameter>
</parameters>
</method>
results in
public async bool spawn_async (string? working_directory, [CCode (array_length = false, array_null_terminated = true)]
string[] argv, [CCode (array_length = false, array_null_terminated = true)] string[]? envv, GLib.SpawnFlags spawn_flags,
int timeout, GLib.Cancellable? cancellable, out GLib.Pid child_pid) throws GLib.Error;
and misses child_setup
, but should be
public async bool spawn_async (string? working_directory, [CCode (array_length = false, array_null_terminated = true)]
string[] argv, [CCode (array_length = false, array_null_terminated = true)] string[]? envv, GLib.SpawnFlags spawn_flags,
[CCode (delegate_target_pos = 5.33333, destroy_notify_pos = 5.66667)] owned GLib.SpawnChildSetupFunc? child_setup,
int timeout, GLib.Cancellable? cancellable, out GLib.Pid child_pid) throws GLib.Error;