From 0154e3507be729e3b6336482f11407b418ed334c Mon Sep 17 00:00:00 2001 From: mappu Date: Sun, 13 Oct 2024 19:05:52 +1300 Subject: [PATCH] genbindings: marshal cgo.Handle via intptr_t instead of void* --- cmd/genbindings/emitcabi.go | 6 +++--- cmd/genbindings/emitgo.go | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cmd/genbindings/emitcabi.go b/cmd/genbindings/emitcabi.go index 2acfc79..0354172 100644 --- a/cmd/genbindings/emitcabi.go +++ b/cmd/genbindings/emitcabi.go @@ -546,7 +546,7 @@ extern "C" { ret.WriteString(fmt.Sprintf("%s %s_%s(%s);\n", m.ReturnType.RenderTypeCabi(), cClassName, m.SafeMethodName(), emitParametersCabi(m, ifv(m.IsConst, "const ", "")+cClassName+"*"))) if m.IsSignal { - ret.WriteString(fmt.Sprintf("%s %s_connect_%s(%s* self, void* slot);\n", m.ReturnType.RenderTypeCabi(), cClassName, m.SafeMethodName(), cClassName)) + ret.WriteString(fmt.Sprintf("%s %s_connect_%s(%s* self, intptr_t slot);\n", m.ReturnType.RenderTypeCabi(), cClassName, m.SafeMethodName(), cClassName)) } } @@ -691,7 +691,7 @@ func emitBindingCpp(src *CppParsedHeader, filename string) (string, error) { exactSignal := `static_cast(&` + c.ClassName + `::` + m.CppCallTarget() + `)` paramArgs := []string{"slot"} - paramArgDefs := []string{"void* cb"} + paramArgDefs := []string{"intptr_t cb"} var signalCode string @@ -704,7 +704,7 @@ func emitBindingCpp(src *CppParsedHeader, filename string) (string, error) { signalCode += "\t\t" + bindingFunc + "(" + strings.Join(paramArgs, `, `) + ");\n" ret.WriteString( - `void ` + cClassName + `_connect_` + m.SafeMethodName() + `(` + cClassName + `* self, void* slot) {` + "\n" + + `void ` + cClassName + `_connect_` + m.SafeMethodName() + `(` + cClassName + `* self, intptr_t slot) {` + "\n" + "\t" + c.ClassName + `::connect(self, ` + exactSignal + `, self, [=](` + emitParametersCpp(m) + `) {` + "\n" + signalCode + "\t});\n" + diff --git a/cmd/genbindings/emitgo.go b/cmd/genbindings/emitgo.go index 37d982f..79096ab 100644 --- a/cmd/genbindings/emitgo.go +++ b/cmd/genbindings/emitgo.go @@ -612,12 +612,12 @@ import "C" } ret.WriteString(`func (this *` + goClassName + `) On` + m.SafeMethodName() + `(slot func(` + emitParametersGo(m.Parameters) + `)) { - C.` + goClassName + `_connect_` + m.SafeMethodName() + `(this.h, unsafe.Pointer(uintptr(cgo.NewHandle(slot)))) + C.` + goClassName + `_connect_` + m.SafeMethodName() + `(this.h, C.intptr_t(cgo.NewHandle(slot)) ) } //export miqt_exec_callback_` + goClassName + `_` + m.SafeMethodName() + ` - func miqt_exec_callback_` + goClassName + `_` + m.SafeMethodName() + `(cb *C.void` + ifv(len(m.Parameters) > 0, ", ", "") + strings.Join(cgoNamedParams, `, `) + `) { - gofunc, ok := (cgo.Handle(uintptr(unsafe.Pointer(cb))).Value()).(func(` + emitParametersGo(m.Parameters) + `)) + func miqt_exec_callback_` + goClassName + `_` + m.SafeMethodName() + `(cb C.intptr_t` + ifv(len(m.Parameters) > 0, ", ", "") + strings.Join(cgoNamedParams, `, `) + `) { + gofunc, ok := cgo.Handle(cb).Value().(func(` + emitParametersGo(m.Parameters) + `)) if !ok { panic("miqt: callback of non-callback type (heap corruption?)") }