Skip to content

Commit

Permalink
Fix code generation
Browse files Browse the repository at this point in the history
  • Loading branch information
diamondburned committed Feb 23, 2025
1 parent 206ca5a commit 13438eb
Show file tree
Hide file tree
Showing 21 changed files with 2,625 additions and 3,133 deletions.
12 changes: 6 additions & 6 deletions gir/cmd/gir-generate/gendata/gendata.go
Original file line number Diff line number Diff line change
Expand Up @@ -406,8 +406,8 @@ func GLibVariantIter(nsgen *girgen.NamespaceGenerator) error {
_variant := (*Variant)(gextras.NewStructNative(unsafe.Pointer(_cret)))
runtime.AddCleanup(
gextras.StructIntern(unsafe.Pointer(_variant)),
C.g_variant_unref,
(*C.GVariant)(unsafe.Pointer(_cret)),
func(ptr unsafe.Pointer) { C.g_variant_unref((*C.GVariant)(ptr)) },
unsafe.Pointer(_cret),
)
return _variant, nil
}
Expand All @@ -429,8 +429,8 @@ func GLibVariantIter(nsgen *girgen.NamespaceGenerator) error {
variant := (*Variant)(gextras.NewStructNative(unsafe.Pointer(item)))
runtime.AddCleanup(
gextras.StructIntern(unsafe.Pointer(variant)),
C.g_variant_unref,
(*C.GVariant)(unsafe.Pointer(item)),
func(ptr unsafe.Pointer) { C.g_variant_unref((*C.GVariant)(ptr)) },
unsafe.Pointer(item),
)
return variant
Expand Down Expand Up @@ -563,8 +563,8 @@ func GioArrayUseBytes(nsgen *girgen.NamespaceGenerator) error {
_bytes := (*Bytes)(gextras.NewStructNative(unsafe.Pointer(v)))
runtime.AddCleanup(
gextras.StructIntern(unsafe.Pointer(_bytes)),
C.g_bytes_unref,
(*C.GBytes)(unsafe.Pointer(v)),
func(ptr unsafe.Pointer) { C.g_bytes_unref((*C.GBytes)(ptr)) },
unsafe.Pointer(v),
)
return _bytes
Expand Down
27 changes: 13 additions & 14 deletions gir/girgen/types/typeconv/c-go.go
Original file line number Diff line number Diff line change
Expand Up @@ -431,14 +431,15 @@ func (conv *Converter) cgoConverter(value *ValueConverted) bool {
value.header.NeedsExternGLib()
value.header.NeedsGLibObject()

value.p.LineTmpl(value, `<.Out.Set> =
<- .OutPtr 1>coreglib.ValueFromNative(unsafe.Pointer(<.InNamePtr 1>))`)

// Set this to be freed if we have the ownership now.
valueFunc := "ValueFromNative"
if value.ShouldFree() {
value.header.Import("runtime")
value.p.Linef("runtime.AddCleanup(%s, C.g_value_unset, (*C.GValue)(unsafe.Pointer(v.Native())))", value.OutName)
valueFunc = "ValueFromNativeOwned"
}

value.p.Printf("%s =", value.Out.Set)
value.p.Printf(" %scoreglib.%s(unsafe.Pointer(%s))", value.OutPtr(1), valueFunc, value.InNamePtr(1))
value.p.EmptyLine()

return true

case "GObject.Object", "GObject.InitiallyUnowned":
Expand Down Expand Up @@ -498,11 +499,11 @@ func (conv *Converter) cgoConverter(value *ValueConverted) bool {
value.p.Linef("C.%s(%s)", ref, value.InNamePtr(1))
}

value.p.Linef("runtime.AddCleanup(%s%s, func(v %s%s) {",
value.OutInPtr(1), value.OutName, value.OutPtr(1), value.Out.Type)
value.p.Linef("C.%s((%s%s)(unsafe.Pointer(v.Native())))",
unref, value.InPtr(1), value.In.Type)
value.p.Linef("}, %s%s)", value.OutInPtr(1), value.OutName)
value.p.Linef("runtime.AddCleanup(")
value.p.Linef(" %s%s,", value.OutInPtr(1), value.OutName)
value.p.Linef(" func(p unsafe.Pointer) { C.%s((%s%s)(p)) },", unref, value.InPtr(1), value.In.Type)
value.p.Linef(" unsafe.Pointer(%s),", value.InNamePtr(1))
value.p.Linef(")")

return true
}
Expand Down Expand Up @@ -640,9 +641,7 @@ func (conv *Converter) cgoConverter(value *ValueConverted) bool {
value.header.Import("runtime")
value.p.Linef("runtime.AddCleanup(")
value.p.Linef(" gextras.StructIntern(unsafe.Pointer(%s%s)),", value.OutInPtr(1), value.OutName)
value.p.Linef(" func(ptr unsafe.Pointer) {")
value.p.Linef(" %s", types.RecordPrintFree(value.conv.fgen, value.Resolved.Extern, "ptr"))
value.p.Linef(" },")
value.p.Linef(" func(ptr unsafe.Pointer) { %s },", types.RecordPrintFree(value.conv.fgen, value.Resolved.Extern, "ptr"))
value.p.Linef(" unsafe.Pointer(%s),", value.InNamePtr(1))
value.p.Linef(")")
}
Expand Down
70 changes: 30 additions & 40 deletions pkg/atk/atk.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 13 additions & 4 deletions pkg/core/glib/glib.go
Original file line number Diff line number Diff line change
Expand Up @@ -1045,11 +1045,20 @@ func InitValue(t Type) *Value {
return v
}

// ValueFromNative returns a type-asserted pointer to the Value. It does not add
// a finalizer into the Value. This function should only be used for
// autogenerated bindings.
// ValueFromNative returns a type-asserted pointer to the Value.
// This should only be used by the code generator.
func ValueFromNative(l unsafe.Pointer) *Value {
return &Value{&value{(*C.GValue)(l)}}
v := &Value{&value{(*C.GValue)(l)}}
return v
}

// ValueFromNativeOwned returns a type-asserted pointer to the Value, with a
// finalizer set to call g_value_unset() on the underlying GValue. This should
// only be used by the code generator.
func ValueFromNativeOwned(l unsafe.Pointer) *Value {
v := ValueFromNative(l)
runtime.AddCleanup(v.value, func(v *C.GValue) { C.g_value_unset(v) }, v.gvalue)
return v
}

// NewValue converts a Go type to a comparable GValue. It will panic if the
Expand Down
Loading

0 comments on commit 13438eb

Please sign in to comment.