genbindings: support 'signed char'

This commit is contained in:
mappu 2024-08-29 17:15:41 +12:00
parent 7b5db7c7ea
commit daff305d36
3 changed files with 15 additions and 3 deletions

View File

@ -698,6 +698,8 @@ func tokenizeSingleParameter(p string) []string {
}
func parseSingleTypeString(p string) CppParameter {
isSigned := false
tokens := tokenizeSingleParameter(p) // strings.Split(strings.TrimSpace(p), " ")
insert := CppParameter{}
for _, tok := range tokens {
@ -714,7 +716,8 @@ func parseSingleTypeString(p string) CppParameter {
insert.ByRef = true
} else if tok == "signed" {
// continue
// We don't need this - UNLESS it's 'signed char'
isSigned = true
} else if tok == "*" {
insert.Pointer = true
@ -740,6 +743,10 @@ func parseSingleTypeString(p string) CppParameter {
} else {
// Valid part of the type name
if tok == "char" && isSigned {
tok = "signed char"
isSigned = false
}
insert.ParameterType += " " + tok
}
}

View File

@ -252,10 +252,15 @@ func emitParametersCABI2CppForwarding(params []CppParameter) (preamble string, f
castSrc = "*" + castSrc
}
if p.ParameterType == "qint64" || p.ParameterType == "quint64" || p.ParameterType == "qlonglong" || p.ParameterType == "qulonglong" {
if p.ParameterType == "qint64" ||
p.ParameterType == "quint64" ||
p.ParameterType == "qlonglong" ||
p.ParameterType == "qulonglong" ||
p.ParameterType == "qint8" {
// QDataStream::operator>>() by reference (qint64)
// QLockFile::getLockInfo() by pointer
// QTextStream::operator>>() by reference (qlonglong + qulonglong)
// QDataStream::operator>>() qint8
// CABI has these as int64_t* (long int) which fails a static_cast to qint64& (long long int&)
// Hack a hard C-style cast
tmp = append(tmp, "("+castType+")("+castSrc+")")

View File

@ -36,7 +36,7 @@ func (p CppParameter) RenderTypeGo() string {
}
switch p.ParameterType {
case "char", "qint8", "unsigned char", "uchar", "quint8":
case "char", "qint8", "signed char", "unsigned char", "uchar", "quint8":
ret += "byte" // Strictly speaking, Go byte is unsigned and char may be signed
case "short", "qint16":
ret += "int16"