mirror of
https://github.com/mappu/miqt.git
synced 2025-01-08 16:38:37 +00:00
genbindings: improved uintptr handling for enum types
This commit is contained in:
parent
a0812831e7
commit
a0b51bef8e
@ -49,12 +49,11 @@ func (p CppParameter) RenderTypeCabi() string {
|
|||||||
ret = "int"
|
ret = "int"
|
||||||
|
|
||||||
} else if strings.Contains(p.ParameterType, `::`) {
|
} else if strings.Contains(p.ParameterType, `::`) {
|
||||||
if _, ok := KnownClassnames[p.ParameterType]; ok {
|
if p.IsEnum() {
|
||||||
|
ret = "uintptr_t"
|
||||||
|
} else {
|
||||||
// Inner class
|
// Inner class
|
||||||
ret = cabiClassName(p.ParameterType)
|
ret = cabiClassName(p.ParameterType)
|
||||||
} else {
|
|
||||||
// Enum
|
|
||||||
ret = "uintptr_t"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -602,6 +601,12 @@ extern "C" {
|
|||||||
|
|
||||||
} else if m.ReturnType.Const {
|
} else if m.ReturnType.Const {
|
||||||
shouldReturn += "(" + emitReturnTypeCabi(m.ReturnType) + ") "
|
shouldReturn += "(" + emitReturnTypeCabi(m.ReturnType) + ") "
|
||||||
|
|
||||||
|
} else if m.ReturnType.IsEnum() {
|
||||||
|
// Needs an explicit uintptr cast
|
||||||
|
shouldReturn = m.ReturnType.RenderTypeQtCpp() + " ret = "
|
||||||
|
afterCall += "\treturn static_cast<uintptr_t>(ret);\n"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
preamble, forwarding := emitParametersCABI2CppForwarding(m.Parameters)
|
preamble, forwarding := emitParametersCABI2CppForwarding(m.Parameters)
|
||||||
|
@ -85,12 +85,11 @@ func (p CppParameter) RenderTypeGo() string {
|
|||||||
ret += "int"
|
ret += "int"
|
||||||
|
|
||||||
} else if strings.Contains(p.ParameterType, `::`) {
|
} else if strings.Contains(p.ParameterType, `::`) {
|
||||||
if _, ok := KnownClassnames[p.ParameterType]; ok {
|
if p.IsEnum() {
|
||||||
|
ret += "uintptr"
|
||||||
|
} else {
|
||||||
// Inner class
|
// Inner class
|
||||||
ret += cabiClassName(p.ParameterType)
|
ret += cabiClassName(p.ParameterType)
|
||||||
} else {
|
|
||||||
// Enum
|
|
||||||
ret += "uintptr"
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Do not transform this type
|
// Do not transform this type
|
||||||
|
@ -47,6 +47,12 @@ func (p *CppParameter) CopyWithAlias(alias CppParameter) CppParameter {
|
|||||||
ret := *p // copy
|
ret := *p // copy
|
||||||
ret.ParameterName = alias.ParameterName
|
ret.ParameterName = alias.ParameterName
|
||||||
ret.TypeAlias = alias.ParameterType
|
ret.TypeAlias = alias.ParameterType
|
||||||
|
|
||||||
|
// If this was a pointer to a typedef'd type, or a typedef of a pointer type, we need to preserve that
|
||||||
|
// WARNING: This can't work for double indirection
|
||||||
|
ret.Const = ret.Const || alias.Const
|
||||||
|
ret.Pointer = ret.Pointer || alias.Pointer
|
||||||
|
ret.ByRef = ret.ByRef || alias.ByRef
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,6 +82,21 @@ func (p CppParameter) QtClassType() bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p CppParameter) IsEnum() bool {
|
||||||
|
if strings.Contains(p.ParameterType, `::`) {
|
||||||
|
if _, ok := KnownClassnames[p.ParameterType]; ok {
|
||||||
|
// It's an inner class
|
||||||
|
return false
|
||||||
|
} else {
|
||||||
|
// Enum
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Top-level enums aren't supported yet
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func (p CppParameter) QListOf() (CppParameter, bool) {
|
func (p CppParameter) QListOf() (CppParameter, bool) {
|
||||||
if strings.HasPrefix(p.ParameterType, "QList<") && strings.HasSuffix(p.ParameterType, `>`) {
|
if strings.HasPrefix(p.ParameterType, "QList<") && strings.HasSuffix(p.ParameterType, `>`) {
|
||||||
return parseSingleTypeString(p.ParameterType[6 : len(p.ParameterType)-1]), true
|
return parseSingleTypeString(p.ParameterType[6 : len(p.ParameterType)-1]), true
|
||||||
@ -103,7 +124,7 @@ func (p CppParameter) QSetOf() bool {
|
|||||||
|
|
||||||
func (p CppParameter) IntType() bool {
|
func (p CppParameter) IntType() bool {
|
||||||
|
|
||||||
if strings.Contains(p.ParameterType, `::`) {
|
if p.IsEnum() {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user