genbindings/types: pointer and return type fixes

This commit is contained in:
mappu 2024-11-19 19:25:48 +13:00
parent c6381d40e8
commit eca87471ee
2 changed files with 20 additions and 1 deletions

View File

@ -35,6 +35,9 @@ func (p CppParameter) RenderTypeCabi() string {
return "struct miqt_map " + cppComment("tuple of "+inner1.RenderTypeCabi()+" and "+inner2.RenderTypeCabi()) return "struct miqt_map " + cppComment("tuple of "+inner1.RenderTypeCabi()+" and "+inner2.RenderTypeCabi())
} else if (p.Pointer || p.ByRef) && p.QtClassType() { } else if (p.Pointer || p.ByRef) && p.QtClassType() {
if p.PointerCount > 1 {
return cabiClassName(p.ParameterType) + strings.Repeat("*", p.PointerCount)
}
return cabiClassName(p.ParameterType) + "*" return cabiClassName(p.ParameterType) + "*"
} else if p.QtClassType() && !p.Pointer { } else if p.QtClassType() && !p.Pointer {

View File

@ -13,7 +13,7 @@ import (
func goReservedWord(s string) bool { func goReservedWord(s string) bool {
switch s { switch s {
case "default", "const", "func", "var", "type", "len", "new", "copy", "import", "range", "string", "map", "int", "select", case "default", "const", "func", "var", "type", "len", "new", "copy", "import", "range", "string", "map", "int", "select",
"ret": // not a language-reserved word, but a binding-reserved word "super", "ret": // not language-reserved words, but a binding-reserved words
return true return true
default: default:
return false return false
@ -154,6 +154,20 @@ func (p CppParameter) RenderTypeGo(gfs *goFileState) string {
return ret // ignore const return ret // ignore const
} }
func (p CppParameter) renderReturnTypeGo(gfs *goFileState) string {
ret := p.RenderTypeGo(gfs)
if ret == "void" {
ret = ""
}
if p.QtClassType() && p.ParameterType != "QString" && p.ParameterType != "QByteArray" && !(p.Pointer || p.ByRef) {
// FIXME normalize this part
ret = "*" + ret
}
return ret
}
func (p CppParameter) parameterTypeCgo() string { func (p CppParameter) parameterTypeCgo() string {
if p.ParameterType == "QString" { if p.ParameterType == "QString" {
return "C.struct_miqt_string" return "C.struct_miqt_string"
@ -703,6 +717,8 @@ import "C"
goClassName := cabiClassName(c.ClassName) goClassName := cabiClassName(c.ClassName)
// Type definition
ret.WriteString(` ret.WriteString(`
type ` + goClassName + ` struct { type ` + goClassName + ` struct {
h *C.` + goClassName + ` h *C.` + goClassName + `