Closed nekopsykose closed 1 year ago
it's a bug in gir-to-d, reproducible with the following APILookup.txt
:
wrap: glib
file: GLib-2.0.gir
file: GModule-2.0.gir
struct: Array
class: ArrayG
after a bit more debugging, it looks like gir-to-d
parses the gir file incorrectly; while the function is indeed defined twice in the file:
$ fq -r '. | grep_by((.parameters.parameter | length == 3) and (.parameters.parameter[2]["@name"] == "element_size")) | ( .["@c:identifier"] + ": " + .["@name"] + "(" + (.parameters.parameter | map(.["@name"]) | join (", ")) + ")" )' GLib-2.0.gir
g_array_new_take_zero_terminated: array_new_take_zero_terminated(data, clear, element_size)
g_array_new: new(zero_terminated, clear_, element_size)
g_array_new_take_zero_terminated: new_take_zero_terminated(data, clear, element_size)
one of them is a global function inside the namespace, while the other is defined inside the GArray
record
$ fq '.repository.namespace' GLib-2.0.gir | gron | rg 'g_array_new_take_zero_terminated'
json.record[0]["function"][8]["@c:identifier"] = "g_array_new_take_zero_terminated";
json["function"][6]["@c:identifier"] = "g_array_new_take_zero_terminated";
Bumped into exactly the same issue. GDC error message for reference:
./_build/generated/glib/ArrayG.d:324:16: error: glib.ArrayG.ArrayG.this at ../_build/generated/glib/ArrayG.d:324:9 conflicts with glib.ArrayG.ArrayG.this at ../_build/generated/glib/ArrayG.d:281:9
324 | public this(void*[] data, bool clear, size_t elementSize)
| ^
Any workarounds for this?
@MikeWey Can you please look into this?
I've set the lookup file to not generate code for the zero terminated version, glib.Unicode needed a small fix in gir-to-d.
any chance for a new release with this?
Yes, it'd be great to have tags for both projects, so we can consume them downstream.
Tagged both projects. gir-to-d v0.23.1 and GlibD v2.4.2
Many thanks, I have updated FreeBSD packages.