mirror of
https://github.com/mappu/miqt.git
synced 2025-01-31 02:20:22 +00:00
genbindings: implement "BecomesNonConstInVersion" quirk support
This commit is contained in:
parent
f7184c2a3f
commit
ba423f153a
@ -458,7 +458,7 @@ nextMethod:
|
|||||||
|
|
||||||
// Once all processing is complete, pass to exceptions for final decision
|
// Once all processing is complete, pass to exceptions for final decision
|
||||||
|
|
||||||
if err := AllowMethod(mm); err != nil {
|
if err := AllowMethod(ret.ClassName, mm); err != nil {
|
||||||
if errors.Is(err, ErrTooComplex) {
|
if errors.Is(err, ErrTooComplex) {
|
||||||
log.Printf("Skipping method %q with complex type", mm.MethodName)
|
log.Printf("Skipping method %q with complex type", mm.MethodName)
|
||||||
continue nextMethod
|
continue nextMethod
|
||||||
@ -468,6 +468,8 @@ nextMethod:
|
|||||||
return CppClass{}, err
|
return CppClass{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ApplyQuirks(ret.ClassName, &mm)
|
||||||
|
|
||||||
ret.Methods = append(ret.Methods, mm)
|
ret.Methods = append(ret.Methods, mm)
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -179,7 +179,7 @@ func AllowSignal(mm CppMethod) bool {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func AllowMethod(mm CppMethod) error {
|
func AllowMethod(className string, mm CppMethod) error {
|
||||||
|
|
||||||
for _, p := range mm.Parameters {
|
for _, p := range mm.Parameters {
|
||||||
if strings.HasSuffix(p.ParameterType, "Private") {
|
if strings.HasSuffix(p.ParameterType, "Private") {
|
||||||
@ -395,3 +395,9 @@ func LinuxWindowsCompatCheck(p CppParameter) bool {
|
|||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ApplyQuirks(className string, mm *CppMethod) {
|
||||||
|
if className == "QArrayData" && mm.MethodName == "needsDetach" && mm.IsConst {
|
||||||
|
mm.BecomesNonConstInVersion = addr("6.7")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -703,6 +703,23 @@ func emitBindingCpp(src *CppParsedHeader, filename string) (string, error) {
|
|||||||
m.ReturnType.RenderTypeCabi(),
|
m.ReturnType.RenderTypeCabi(),
|
||||||
))
|
))
|
||||||
|
|
||||||
|
} else if m.BecomesNonConstInVersion != nil {
|
||||||
|
|
||||||
|
nonConstCallTarget := "const_cast<" + cClassName + "*>(self)->" + m.CppCallTarget() + "(" + forwarding + ")"
|
||||||
|
|
||||||
|
ret.WriteString("" +
|
||||||
|
m.ReturnType.RenderTypeCabi() + " " + cClassName + "_" + m.SafeMethodName() + "(" + emitParametersCabi(m, ifv(m.IsConst, "const ", "")+cClassName+"*") + ") {\n" +
|
||||||
|
preamble + "\n" +
|
||||||
|
"// This method was changed from const to non-const in Qt " + *m.BecomesNonConstInVersion + "\n" +
|
||||||
|
"#if QT_VERSION < QT_VERSION_CHECK(" + strings.Replace(*m.BecomesNonConstInVersion, `.`, `,`, -1) + ",0)\n" +
|
||||||
|
emitAssignCppToCabi("\treturn ", m.ReturnType, callTarget) +
|
||||||
|
"#else\n" +
|
||||||
|
emitAssignCppToCabi("\treturn ", m.ReturnType, nonConstCallTarget) +
|
||||||
|
"#endif\n" +
|
||||||
|
"}\n" +
|
||||||
|
"\n",
|
||||||
|
)
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
ret.WriteString(fmt.Sprintf(
|
ret.WriteString(fmt.Sprintf(
|
||||||
|
@ -209,7 +209,10 @@ type CppMethod struct {
|
|||||||
IsSignal bool
|
IsSignal bool
|
||||||
IsConst bool
|
IsConst bool
|
||||||
HiddenParams []CppParameter // Populated if there is an overload with more parameters
|
HiddenParams []CppParameter // Populated if there is an overload with more parameters
|
||||||
|
|
||||||
|
// Special quirks
|
||||||
LinuxOnly bool
|
LinuxOnly bool
|
||||||
|
BecomesNonConstInVersion *string // "6,7"
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m CppMethod) CppCallTarget() string {
|
func (m CppMethod) CppCallTarget() string {
|
||||||
|
@ -34,3 +34,7 @@ func ifv[T any](condition bool, trueval T, falseval T) T {
|
|||||||
}
|
}
|
||||||
return falseval
|
return falseval
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func addr[T any](s T) *T {
|
||||||
|
return &s
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user