mirror of
https://github.com/mappu/miqt.git
synced 2025-03-11 10:09:23 +00:00
genbindings/go: normalize handling for void* return types
This commit is contained in:
parent
c66203d984
commit
896f150f35
@ -335,9 +335,11 @@ func (gfs *goFileState) emitCabiToGo(assignExpr string, rt CppParameter, rvalue
|
|||||||
|
|
||||||
if rt.ParameterType == "void" && !rt.Pointer {
|
if rt.ParameterType == "void" && !rt.Pointer {
|
||||||
shouldReturn = ""
|
shouldReturn = ""
|
||||||
|
return shouldReturn + " " + rvalue + "\n" + afterword
|
||||||
|
|
||||||
} else if rt.ParameterType == "void" && rt.Pointer {
|
} else if rt.ParameterType == "void" && rt.Pointer {
|
||||||
// ...
|
gfs.imports["unsafe"] = struct{}{}
|
||||||
|
return assignExpr + " (unsafe.Pointer)(" + rvalue + ")\n"
|
||||||
|
|
||||||
} else if rt.ParameterType == "char" && rt.Pointer {
|
} else if rt.ParameterType == "char" && rt.Pointer {
|
||||||
// Qt functions normally return QString - anything returning char*
|
// Qt functions normally return QString - anything returning char*
|
||||||
@ -361,6 +363,7 @@ func (gfs *goFileState) emitCabiToGo(assignExpr string, rt CppParameter, rvalue
|
|||||||
afterword += namePrefix + "_ret := C.GoStringN(&" + namePrefix + "_ms.data, C.int(int64(" + namePrefix + "_ms.len)))\n"
|
afterword += namePrefix + "_ret := C.GoStringN(&" + namePrefix + "_ms.data, C.int(int64(" + namePrefix + "_ms.len)))\n"
|
||||||
afterword += "C.free(unsafe.Pointer(" + namePrefix + "_ms))\n"
|
afterword += "C.free(unsafe.Pointer(" + namePrefix + "_ms))\n"
|
||||||
afterword += assignExpr + namePrefix + "_ret"
|
afterword += assignExpr + namePrefix + "_ret"
|
||||||
|
return shouldReturn + " " + rvalue + "\n" + afterword
|
||||||
|
|
||||||
} else if t, ok := rt.QListOf(); ok {
|
} else if t, ok := rt.QListOf(); ok {
|
||||||
gfs.imports["unsafe"] = struct{}{}
|
gfs.imports["unsafe"] = struct{}{}
|
||||||
@ -376,6 +379,7 @@ func (gfs *goFileState) emitCabiToGo(assignExpr string, rt CppParameter, rvalue
|
|||||||
afterword += "}\n"
|
afterword += "}\n"
|
||||||
afterword += "C.free(unsafe.Pointer(" + namePrefix + "_ma))\n"
|
afterword += "C.free(unsafe.Pointer(" + namePrefix + "_ma))\n"
|
||||||
afterword += assignExpr + " " + namePrefix + "_ret\n"
|
afterword += assignExpr + " " + namePrefix + "_ret\n"
|
||||||
|
return shouldReturn + " " + rvalue + "\n" + afterword
|
||||||
|
|
||||||
} else if t, ok := rt.QSetOf(); ok {
|
} else if t, ok := rt.QSetOf(); ok {
|
||||||
|
|
||||||
@ -393,6 +397,7 @@ func (gfs *goFileState) emitCabiToGo(assignExpr string, rt CppParameter, rvalue
|
|||||||
afterword += "}\n"
|
afterword += "}\n"
|
||||||
afterword += "C.free(unsafe.Pointer(" + namePrefix + "_ma))\n"
|
afterword += "C.free(unsafe.Pointer(" + namePrefix + "_ma))\n"
|
||||||
afterword += assignExpr + " " + namePrefix + "_ret\n"
|
afterword += assignExpr + " " + namePrefix + "_ret\n"
|
||||||
|
return shouldReturn + " " + rvalue + "\n" + afterword
|
||||||
|
|
||||||
} else if rt.QtClassType() {
|
} else if rt.QtClassType() {
|
||||||
// Construct our Go type based on this inner CABI type
|
// Construct our Go type based on this inner CABI type
|
||||||
@ -433,15 +438,17 @@ func (gfs *goFileState) emitCabiToGo(assignExpr string, rt CppParameter, rvalue
|
|||||||
afterword += assignExpr + " *" + namePrefix + "_goptr\n"
|
afterword += assignExpr + " *" + namePrefix + "_goptr\n"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return shouldReturn + " " + rvalue + "\n" + afterword
|
||||||
|
|
||||||
} else if rt.IntType() || rt.IsKnownEnum() || rt.IsFlagType() || rt.ParameterType == "bool" || rt.QtCppOriginalType != nil {
|
} else if rt.IntType() || rt.IsKnownEnum() || rt.IsFlagType() || rt.ParameterType == "bool" || rt.QtCppOriginalType != nil {
|
||||||
// Need to cast Cgo type to Go int type
|
// Need to cast Cgo type to Go int type
|
||||||
// Optimize assignment to avoid temporary
|
// Optimize assignment to avoid temporary
|
||||||
return assignExpr + "(" + rt.RenderTypeGo(gfs) + ")(" + rvalue + ")\n"
|
return assignExpr + "(" + rt.RenderTypeGo(gfs) + ")(" + rvalue + ")\n"
|
||||||
|
|
||||||
|
} else {
|
||||||
|
panic("what type is this?")
|
||||||
}
|
}
|
||||||
|
|
||||||
return shouldReturn + " " + rvalue + "\n" + afterword
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func emitGo(src *CppParsedHeader, headerName string, packageName string) (string, error) {
|
func emitGo(src *CppParsedHeader, headerName string, packageName string) (string, error) {
|
||||||
@ -637,10 +644,6 @@ import "C"
|
|||||||
if m.ReturnType.QtClassType() && m.ReturnType.ParameterType != "QString" && !(m.ReturnType.Pointer || m.ReturnType.ByRef) {
|
if m.ReturnType.QtClassType() && m.ReturnType.ParameterType != "QString" && !(m.ReturnType.Pointer || m.ReturnType.ByRef) {
|
||||||
returnTypeDecl = "*" + returnTypeDecl
|
returnTypeDecl = "*" + returnTypeDecl
|
||||||
}
|
}
|
||||||
if (m.ReturnType.ParameterType == "char" || m.ReturnType.ParameterType == "void") && m.ReturnType.Pointer {
|
|
||||||
gfs.imports["unsafe"] = struct{}{}
|
|
||||||
returnTypeDecl = "unsafe.Pointer"
|
|
||||||
}
|
|
||||||
|
|
||||||
rvalue := `C.` + goClassName + `_` + m.SafeMethodName() + `(` + forwarding + `)`
|
rvalue := `C.` + goClassName + `_` + m.SafeMethodName() + `(` + forwarding + `)`
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user