diff --git a/cmd/genbindings/clang2il.go b/cmd/genbindings/clang2il.go index 377058e4..47437534 100644 --- a/cmd/genbindings/clang2il.go +++ b/cmd/genbindings/clang2il.go @@ -398,6 +398,8 @@ nextMethod: continue } + ApplyQuirks(ret.ClassName, &mm) + ret.Ctors = append(ret.Ctors, mm) case "CXXDestructorDecl": diff --git a/cmd/genbindings/config-allowlist.go b/cmd/genbindings/config-allowlist.go index 92bf5fdd..0f5a62c1 100644 --- a/cmd/genbindings/config-allowlist.go +++ b/cmd/genbindings/config-allowlist.go @@ -632,21 +632,19 @@ func AllowType(p CppParameter, isReturnType bool) error { return nil } -// LinuxWindowsCompatCheck checks if the parameter is incompatible between the -// generated headers (generated on Linux) with other OSes such as Windows. -// These methods will be blocked on non-Linux OSes. -func LinuxWindowsCompatCheck(p CppParameter) bool { - if p.GetQtCppType().ParameterType == "Q_PID" { - return true // int64 on Linux, _PROCESS_INFORMATION* on Windows - } - - if p.GetQtCppType().ParameterType == "QSocketDescriptor::DescriptorType" { - return true // uintptr_t-compatible on Linux, void* on Windows - } - return false -} - func ApplyQuirks(className string, mm *CppMethod) { + + if mm.ReturnType.GetQtCppType().ParameterType == "Q_PID" { + // int64 on Linux, _PROCESS_INFORMATION* on Windows + mm.LinuxOnly = true + } + + if mm.ReturnType.GetQtCppType().ParameterType == "QSocketDescriptor::DescriptorType" || + (len(mm.Parameters) > 0 && mm.Parameters[0].GetQtCppType().ParameterType == "QSocketDescriptor::DescriptorType") { + // uintptr_t-compatible on Linux, void* on Windows + mm.LinuxOnly = true + } + if className == "QArrayData" && mm.MethodName == "needsDetach" && mm.IsConst { mm.BecomesNonConstInVersion = addr("6.7") } diff --git a/cmd/genbindings/transformtypedefs.go b/cmd/genbindings/transformtypedefs.go index e65d2e9f..97ecb794 100644 --- a/cmd/genbindings/transformtypedefs.go +++ b/cmd/genbindings/transformtypedefs.go @@ -68,18 +68,9 @@ func applyTypedefs_Method(m *CppMethod) { for k, p := range m.Parameters { transformed := applyTypedefs(p) m.Parameters[k] = transformed - - if LinuxWindowsCompatCheck(transformed) { - m.LinuxOnly = true - } } m.ReturnType = applyTypedefs(m.ReturnType) - - // Also apply OS compatibility rules - if LinuxWindowsCompatCheck(m.ReturnType) { - m.LinuxOnly = true - } } // astTransformTypedefs replaces the ParameterType with any known typedef value.