From 60600530c6f36761570fd4a1eb37a0287a3ca2b4 Mon Sep 17 00:00:00 2001 From: mappu Date: Tue, 8 Oct 2024 18:21:59 +1300 Subject: [PATCH] genbindings/ints: ssize_t support --- cmd/genbindings/emitcabi.go | 4 +--- cmd/genbindings/emitgo.go | 9 ++++++++- cmd/genbindings/intermediate.go | 1 + 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/cmd/genbindings/emitcabi.go b/cmd/genbindings/emitcabi.go index 5502103..63a7ce4 100644 --- a/cmd/genbindings/emitcabi.go +++ b/cmd/genbindings/emitcabi.go @@ -51,15 +51,13 @@ func (p CppParameter) RenderTypeCabi() string { ret = "uint64_t" case "qfloat16": ret = "_Float16" // No idea where this typedef comes from, but it exists - case "qsizetype": - ret = "size_t" case "qreal": ret = "double" case "qintptr", "QIntegerForSizeof::Signed": ret = "intptr_t" case "quintptr", "uintptr", "QIntegerForSizeof::Unsigned": ret = "uintptr_t" - case "qptrdiff": + case "qsizetype", "qptrdiff", "QIntegerForSizeof::Signed": ret = "ptrdiff_t" } diff --git a/cmd/genbindings/emitgo.go b/cmd/genbindings/emitgo.go index d7bcf31..6d488ac 100644 --- a/cmd/genbindings/emitgo.go +++ b/cmd/genbindings/emitgo.go @@ -80,12 +80,19 @@ func (p CppParameter) RenderTypeGo() string { ret += "float32" case "double", "qreal": ret += "float64" - case "qsizetype", "size_t", "qptrdiff", "ptrdiff_t": + case "size_t": // size_t is unsigned if C.sizeof_size_t == 4 { ret += "uint32" } else { ret += "uint64" } + case "qsizetype", "QIntegerForSizeof::Signed", "qptrdiff", "ptrdiff_t": // all signed + if C.sizeof_size_t == 4 { + ret += "int32" + } else { + ret += "int64" + } + case "qintptr", "uintptr_t", "intptr_t", "quintptr", "QIntegerForSizeof::Unsigned", "QIntegerForSizeof::Signed": ret += "uintptr" default: diff --git a/cmd/genbindings/intermediate.go b/cmd/genbindings/intermediate.go index 2ce3cc8..c78f610 100644 --- a/cmd/genbindings/intermediate.go +++ b/cmd/genbindings/intermediate.go @@ -160,6 +160,7 @@ func (p CppParameter) IntType() bool { "qsizetype", "size_t", "QIntegerForSizeof::Unsigned", "QIntegerForSizeof::Signed", + "QIntegerForSizeof::Signed", "qptrdiff", "ptrdiff_t", "double", "float", "qreal": return true