genbindings: track original import file for classes

This commit is contained in:
mappu 2025-04-12 17:56:33 +12:00
parent 4bae5f1581
commit 0d181122a3
3 changed files with 21 additions and 18 deletions

View File

@ -14,28 +14,28 @@ func InsertTypedefs(qt6 bool) {
}
// QString is deleted from this binding
KnownTypedefs["QStringList"] = lookupResultTypedef{pp, CppTypedef{"QStringList", parseSingleTypeString("QList<QString>")}}
KnownTypedefs["QStringList"] = lookupResultTypedef{pp, "", CppTypedef{"QStringList", parseSingleTypeString("QList<QString>")}}
// FIXME this isn't picked up automatically because QFile inherits QFileDevice and the name refers to its parent class
KnownTypedefs["QFile::FileTime"] = lookupResultTypedef{pp, CppTypedef{"QFile::FileTime", parseSingleTypeString("QFileDevice::FileTime")}}
KnownTypedefs["QFile::FileTime"] = lookupResultTypedef{pp, "", CppTypedef{"QFile::FileTime", parseSingleTypeString("QFileDevice::FileTime")}}
if !qt6 {
// n.b. Qt 5 only
KnownTypedefs["QLineF::IntersectionType"] = lookupResultTypedef{pp, CppTypedef{"QLineF::IntersectionType", parseSingleTypeString("QLineF::IntersectType")}}
KnownTypedefs["QLineF::IntersectionType"] = lookupResultTypedef{pp, "", CppTypedef{"QLineF::IntersectionType", parseSingleTypeString("QLineF::IntersectType")}}
} else {
// Must be removed for Qt 6
}
// Not sure the reason for this one
KnownTypedefs["QSocketDescriptor::DescriptorType"] = lookupResultTypedef{pp, CppTypedef{"QSocketDescriptor::DescriptorType", parseSingleTypeString("QSocketNotifier::Type")}}
KnownTypedefs["QSocketDescriptor::DescriptorType"] = lookupResultTypedef{pp, "", CppTypedef{"QSocketDescriptor::DescriptorType", parseSingleTypeString("QSocketNotifier::Type")}}
// QFile doesn't see QFileDevice parent class enum
KnownTypedefs["QFile::Permissions"] = lookupResultTypedef{pp, CppTypedef{"QFile::Permissions", parseSingleTypeString("QFileDevice::Permissions")}}
KnownTypedefs["QFileDevice::Permissions"] = lookupResultTypedef{pp, CppTypedef{"QFile::Permissions", parseSingleTypeString("QFlags<QFileDevice::Permission>")}}
KnownTypedefs["QIODevice::OpenMode"] = lookupResultTypedef{pp, CppTypedef{"QIODevice::OpenMode", parseSingleTypeString("QIODeviceBase::OpenMode")}}
KnownTypedefs["QFile::Permissions"] = lookupResultTypedef{pp, "", CppTypedef{"QFile::Permissions", parseSingleTypeString("QFileDevice::Permissions")}}
KnownTypedefs["QFileDevice::Permissions"] = lookupResultTypedef{pp, "", CppTypedef{"QFile::Permissions", parseSingleTypeString("QFlags<QFileDevice::Permission>")}}
KnownTypedefs["QIODevice::OpenMode"] = lookupResultTypedef{pp, "", CppTypedef{"QIODevice::OpenMode", parseSingleTypeString("QIODeviceBase::OpenMode")}}
// Qt 5 WebKit - use of an empty enum (should be possible to support?)
KnownEnums["QWebPluginFactory::Extension"] = lookupResultEnum{"qt/webkit", CppEnum{
KnownEnums["QWebPluginFactory::Extension"] = lookupResultEnum{"qt/webkit", "", CppEnum{
EnumName: "QWebPluginFactory::Extension",
UnderlyingType: CppParameter{
ParameterType: "int",
@ -44,19 +44,19 @@ func InsertTypedefs(qt6 bool) {
if qt6 {
// Qt 6 QVariant helper types - needs investigation
KnownTypedefs["QVariantHash"] = lookupResultTypedef{"qt6", CppTypedef{"QVariantHash", parseSingleTypeString("QHash<QString,QVariant>")}}
KnownTypedefs["QVariantList"] = lookupResultTypedef{"qt6", CppTypedef{"QVariantList", parseSingleTypeString("QList<QVariant>")}}
KnownTypedefs["QVariantMap"] = lookupResultTypedef{"qt6", CppTypedef{"QVariantMap", parseSingleTypeString("QMap<QString,QVariant>")}}
KnownTypedefs["QVariantHash"] = lookupResultTypedef{"qt6", "", CppTypedef{"QVariantHash", parseSingleTypeString("QHash<QString,QVariant>")}}
KnownTypedefs["QVariantList"] = lookupResultTypedef{"qt6", "", CppTypedef{"QVariantList", parseSingleTypeString("QList<QVariant>")}}
KnownTypedefs["QVariantMap"] = lookupResultTypedef{"qt6", "", CppTypedef{"QVariantMap", parseSingleTypeString("QMap<QString,QVariant>")}}
// Qt 6 renamed the enum to LibraryPath, but left some uses of LibraryLocation with a typedef
// We don't find the typedef - needs investigation
// ONLY add this on Qt 6 builds, breaks Qt 5
KnownTypedefs["QLibraryInfo::LibraryLocation"] = lookupResultTypedef{"qt6", CppTypedef{"QLibraryInfo::LibraryLocation", parseSingleTypeString("QLibraryInfo::LibraryPath")}}
KnownTypedefs["QLibraryInfo::LibraryLocation"] = lookupResultTypedef{"qt6", "", CppTypedef{"QLibraryInfo::LibraryLocation", parseSingleTypeString("QLibraryInfo::LibraryPath")}}
// Enums
// QSysInfo.h is being truncated and not finding any content
KnownEnums["QSysInfo::Endian"] = lookupResultEnum{"qt6", CppEnum{
KnownEnums["QSysInfo::Endian"] = lookupResultEnum{"qt6", "", CppEnum{
EnumName: "QSysInfo::Endian",
UnderlyingType: CppParameter{
ParameterType: "int",

View File

@ -166,7 +166,7 @@ func generate(packageName string, srcDirs []string, allowHeaderFn func(string) b
atr.Process(parsed)
// Update global state tracker (AFTER astTransformChildClasses)
addKnownTypes(packageName, parsed)
addKnownTypes(packageName, filepath.Base(inputHeader), parsed)
processHeaders = append(processHeaders, parsed)
}

View File

@ -2,16 +2,19 @@ package main
type lookupResultClass struct {
PackageName string
HeaderFile string
Class CppClass
}
type lookupResultTypedef struct {
PackageName string
HeaderFile string
Typedef CppTypedef
}
type lookupResultEnum struct {
PackageName string
HeaderFile string
Enum CppEnum
}
@ -27,14 +30,14 @@ func flushKnownTypes() {
KnownEnums = make(map[string]lookupResultEnum)
}
func addKnownTypes(packageName string, parsed *CppParsedHeader) {
func addKnownTypes(packageName, headerFile string, parsed *CppParsedHeader) {
for _, c := range parsed.Classes {
KnownClassnames[c.ClassName] = lookupResultClass{packageName, c /* copy */}
KnownClassnames[c.ClassName] = lookupResultClass{packageName, headerFile, c /* copy */}
}
for _, td := range parsed.Typedefs {
KnownTypedefs[td.Alias] = lookupResultTypedef{packageName, td /* copy */}
KnownTypedefs[td.Alias] = lookupResultTypedef{packageName, headerFile, td /* copy */}
}
for _, en := range parsed.Enums {
KnownEnums[en.EnumName] = lookupResultEnum{packageName, en /* copy */}
KnownEnums[en.EnumName] = lookupResultEnum{packageName, headerFile, en /* copy */}
}
}