From 0b39af57e37b47de510e4930c41445557739c3c8 Mon Sep 17 00:00:00 2001 From: mappu Date: Fri, 7 Feb 2025 18:55:01 +1300 Subject: [PATCH 1/3] genbindings: add new AllowCtor framework --- cmd/genbindings/clang2il.go | 4 ++++ cmd/genbindings/config-allowlist.go | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/cmd/genbindings/clang2il.go b/cmd/genbindings/clang2il.go index b6197809..1cd425fc 100644 --- a/cmd/genbindings/clang2il.go +++ b/cmd/genbindings/clang2il.go @@ -394,6 +394,10 @@ nextMethod: // an existing class instance mm.IsStatic = true + if !AllowCtor(ret.ClassName, mm) { + continue + } + ret.Ctors = append(ret.Ctors, mm) case "CXXDestructorDecl": diff --git a/cmd/genbindings/config-allowlist.go b/cmd/genbindings/config-allowlist.go index c39ff30b..4f65ab0a 100644 --- a/cmd/genbindings/config-allowlist.go +++ b/cmd/genbindings/config-allowlist.go @@ -321,6 +321,12 @@ func AllowMethod(className string, mm CppMethod) error { return nil // OK, allow } +func AllowCtor(className string, mm CppMethod) bool { + + // Default allow + return true +} + // AllowType controls whether to permit binding of a method, if a method uses // this type in its parameter list or return type. // Any type not permitted by AllowClass is also not permitted by this method. From 647e0347723dba26d10269103e47bbd85c155c3a Mon Sep 17 00:00:00 2001 From: mappu Date: Fri, 7 Feb 2025 18:55:20 +1300 Subject: [PATCH 2/3] genbindings: block QStringConverterBase constructors --- cmd/genbindings/config-allowlist.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cmd/genbindings/config-allowlist.go b/cmd/genbindings/config-allowlist.go index 4f65ab0a..91ae0072 100644 --- a/cmd/genbindings/config-allowlist.go +++ b/cmd/genbindings/config-allowlist.go @@ -323,6 +323,14 @@ func AllowMethod(className string, mm CppMethod) error { func AllowCtor(className string, mm CppMethod) bool { + if className == `QStringConverterBase` { + // Both the main ctor and the copy constructor were changed from public to protected between 6.8.1 and 6.8.2 + // @ref https://github.com/qt/qtbase/commit/41679e0b4398c0de38a8107642dc643fe2c3554f + // @ref https://github.com/mappu/miqt/issues/168 + // Block both ctors from generation + return false + } + // Default allow return true } From ac9b545036edda71b5724d0ee545c645be28744c Mon Sep 17 00:00:00 2001 From: mappu Date: Fri, 7 Feb 2025 18:55:31 +1300 Subject: [PATCH 3/3] qt: rebuild (block QStringConverterBase constructors) --- qt6/gen_qstringconverter_base.cpp | 8 -------- qt6/gen_qstringconverter_base.go | 12 ------------ qt6/gen_qstringconverter_base.h | 2 -- 3 files changed, 22 deletions(-) diff --git a/qt6/gen_qstringconverter_base.cpp b/qt6/gen_qstringconverter_base.cpp index 71e91e17..4de61814 100644 --- a/qt6/gen_qstringconverter_base.cpp +++ b/qt6/gen_qstringconverter_base.cpp @@ -12,14 +12,6 @@ extern "C" { } /* extern C */ #endif -QStringConverterBase* QStringConverterBase_new(QStringConverterBase* param1) { - return new QStringConverterBase(*param1); -} - -QStringConverterBase* QStringConverterBase_new2() { - return new QStringConverterBase(); -} - void QStringConverter_virtbase(QStringConverter* src, QStringConverterBase** outptr_QStringConverterBase) { *outptr_QStringConverterBase = static_cast(src); } diff --git a/qt6/gen_qstringconverter_base.go b/qt6/gen_qstringconverter_base.go index c23cf2ab..e06e2920 100644 --- a/qt6/gen_qstringconverter_base.go +++ b/qt6/gen_qstringconverter_base.go @@ -71,18 +71,6 @@ func UnsafeNewQStringConverterBase(h unsafe.Pointer) *QStringConverterBase { return newQStringConverterBase((*C.QStringConverterBase)(h)) } -// NewQStringConverterBase constructs a new QStringConverterBase object. -func NewQStringConverterBase(param1 *QStringConverterBase) *QStringConverterBase { - - return newQStringConverterBase(C.QStringConverterBase_new(param1.cPointer())) -} - -// NewQStringConverterBase2 constructs a new QStringConverterBase object. -func NewQStringConverterBase2() *QStringConverterBase { - - return newQStringConverterBase(C.QStringConverterBase_new2()) -} - type QStringConverter struct { h *C.QStringConverter *QStringConverterBase diff --git a/qt6/gen_qstringconverter_base.h b/qt6/gen_qstringconverter_base.h index 509c81d8..b6b04381 100644 --- a/qt6/gen_qstringconverter_base.h +++ b/qt6/gen_qstringconverter_base.h @@ -28,8 +28,6 @@ typedef struct QStringConverterBase QStringConverterBase; typedef struct QStringConverterBase__State QStringConverterBase__State; #endif -QStringConverterBase* QStringConverterBase_new(QStringConverterBase* param1); -QStringConverterBase* QStringConverterBase_new2(); void QStringConverter_virtbase(QStringConverter* src, QStringConverterBase** outptr_QStringConverterBase); bool QStringConverter_isValid(const QStringConverter* self);