miqt/cmd/genbindings/intermediate.go

80 lines
1.4 KiB
Go

package main
import (
"strings"
)
type CppParameter struct {
ParameterName string
ParameterType string
Const bool
Pointer bool
ByRef bool
Optional bool
}
func (p CppParameter) QtClassType() bool {
return p.ParameterType[0] == 'Q'
}
type CppProperty struct {
PropertyName string
PropertyType string
Visibility string
}
type CppMethod struct {
MethodName string
ReturnType CppParameter // Name not used
Parameters []CppParameter
}
func (nm CppMethod) SafeMethodName() string {
// Operator-overload methods have names not representable in binding
// languages. Replace more specific cases first
replacer := strings.NewReplacer(
`==`, `Equal`,
`>=`, `GreaterOrEqual`,
`<=`, `LesserOrEqual`,
`=`, `Assign`,
`>`, `Greater`,
`<`, `Lesser`,
`+`, `Plus`,
`-`, `Minus`,
`*`, `Multiply`,
`/`, `Divide`,
`%`, `Modulo`,
`&&`, `LogicalAnd`,
`||`, `LogicalOr`,
`!`, `Not`,
`&`, `BitwiseAnd`,
`|`, `BitwiseOr`,
`~`, `BitwiseXor`,
`^`, `BitwiseNot`,
`->`, `PointerDereference`,
`[]`, `Subscript`,
`()`, `Call`,
)
tmp := replacer.Replace(nm.MethodName)
// Also make the first letter uppercase so it becomes public in Go
return strings.ToUpper(tmp[0:1]) + tmp[1:]
}
type CppClass struct {
ClassName string
Ctors []CppMethod // only use the parameters
Extends []string
Methods []CppMethod
Props []CppProperty
}
type CppParsedHeader struct {
Classes []CppClass
}