From 16a16dc4d17e5643ddb1656b382a3f8ffe31fd8f Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 12 Apr 2019 15:04:39 +0200 Subject: shiboken: Pass around struct AddedFunction by QSharedPointer This is a preparatory step for storing it directly in AbstractMetaFunction. Task-number: PYSIDE-995 Change-Id: Ia281bb8d3d94d3d56549ec227a476d9750922323 Reviewed-by: Cristian Maureira-Fredes --- .../shiboken2/ApiExtractor/abstractmetabuilder.cpp | 28 +++++++++++----------- .../shiboken2/ApiExtractor/abstractmetabuilder_p.h | 4 ++-- sources/shiboken2/ApiExtractor/typedatabase.cpp | 4 ++-- sources/shiboken2/ApiExtractor/typesystem.cpp | 6 ++--- sources/shiboken2/ApiExtractor/typesystem.h | 2 +- .../shiboken2/ApiExtractor/typesystem_typedefs.h | 4 +++- 6 files changed, 25 insertions(+), 23 deletions(-) (limited to 'sources/shiboken2') diff --git a/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp b/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp index 329e3b079..8373889d4 100644 --- a/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp +++ b/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp @@ -662,11 +662,11 @@ void AbstractMetaBuilderPrivate::traverseDom(const FileModelItem &dom) // Functions added to the module on the type system. const AddedFunctionList &globalUserFunctions = types->globalUserFunctions(); - for (const AddedFunction &addedFunc : globalUserFunctions) { + for (const AddedFunctionPtr &addedFunc : globalUserFunctions) { AbstractMetaFunction* metaFunc = traverseFunction(addedFunc); if (Q_UNLIKELY(!metaFunc)) { qFatal("Unable to traverse added global function \"%s\".", - qPrintable(addedFunc.name())); + qPrintable(addedFunc->name())); } metaFunc->setFunctionType(AbstractMetaFunction::NormalFunction); m_globalFunctions << metaFunc; @@ -1431,10 +1431,10 @@ void AbstractMetaBuilderPrivate::fillAddedFunctions(AbstractMetaClass *metaClass { // Add the functions added by the typesystem const AddedFunctionList &addedFunctions = metaClass->typeEntry()->addedFunctions(); - for (const AddedFunction &addedFunc : addedFunctions) { + for (const AddedFunctionPtr &addedFunc : addedFunctions) { if (!traverseFunction(addedFunc, metaClass)) { qFatal("Unable to traverse function \"%s\" added to \"%s\".", - qPrintable(addedFunc.name()), qPrintable(metaClass->name())); + qPrintable(addedFunc->name()), qPrintable(metaClass->name())); } } } @@ -1588,29 +1588,29 @@ void AbstractMetaBuilderPrivate::traverseEnums(const ScopeModelItem &scopeItem, } } -AbstractMetaFunction* AbstractMetaBuilderPrivate::traverseFunction(const AddedFunction& addedFunc) +AbstractMetaFunction* AbstractMetaBuilderPrivate::traverseFunction(const AddedFunctionPtr &addedFunc) { return traverseFunction(addedFunc, 0); } -AbstractMetaFunction* AbstractMetaBuilderPrivate::traverseFunction(const AddedFunction& addedFunc, +AbstractMetaFunction* AbstractMetaBuilderPrivate::traverseFunction(const AddedFunctionPtr &addedFunc, AbstractMetaClass *metaClass) { AbstractMetaFunction *metaFunction = new AbstractMetaFunction; - metaFunction->setConstant(addedFunc.isConstant()); - metaFunction->setName(addedFunc.name()); - metaFunction->setOriginalName(addedFunc.name()); + metaFunction->setConstant(addedFunc->isConstant()); + metaFunction->setName(addedFunc->name()); + metaFunction->setOriginalName(addedFunc->name()); AbstractMetaClass::Attributes visibility = - addedFunc.access() == AddedFunction::Public + addedFunc->access() == AddedFunction::Public ? AbstractMetaAttributes::Public : AbstractMetaAttributes::Protected; metaFunction->setVisibility(visibility); metaFunction->setUserAdded(true); - AbstractMetaAttributes::Attribute isStatic = addedFunc.isStatic() ? AbstractMetaFunction::Static : AbstractMetaFunction::None; + AbstractMetaAttributes::Attribute isStatic = addedFunc->isStatic() ? AbstractMetaFunction::Static : AbstractMetaFunction::None; metaFunction->setAttributes(metaFunction->attributes() | AbstractMetaAttributes::FinalInTargetLang | isStatic); - metaFunction->setType(translateType(addedFunc.returnType())); + metaFunction->setType(translateType(addedFunc->returnType())); - QVector args = addedFunc.arguments(); + QVector args = addedFunc->arguments(); AbstractMetaArgumentList metaArguments; for (int i = 0; i < args.count(); ++i) { @@ -1620,7 +1620,7 @@ AbstractMetaFunction* AbstractMetaBuilderPrivate::traverseFunction(const AddedFu if (Q_UNLIKELY(!type)) { qCWarning(lcShiboken, "Unable to translate type \"%s\" of argument %d of added function \"%s\".", - qPrintable(typeInfo.name), i + 1, qPrintable(addedFunc.name())); + qPrintable(typeInfo.name), i + 1, qPrintable(addedFunc->name())); delete metaFunction; return nullptr; } diff --git a/sources/shiboken2/ApiExtractor/abstractmetabuilder_p.h b/sources/shiboken2/ApiExtractor/abstractmetabuilder_p.h index ae36af652..3c0039f0e 100644 --- a/sources/shiboken2/ApiExtractor/abstractmetabuilder_p.h +++ b/sources/shiboken2/ApiExtractor/abstractmetabuilder_p.h @@ -94,8 +94,8 @@ public: AbstractMetaClass *currentClass); void traverseOperatorFunction(const FunctionModelItem &item, AbstractMetaClass *currentClass); - AbstractMetaFunction* traverseFunction(const AddedFunction &addedFunc); - AbstractMetaFunction* traverseFunction(const AddedFunction &addedFunc, + AbstractMetaFunction* traverseFunction(const AddedFunctionPtr &addedFunc); + AbstractMetaFunction* traverseFunction(const AddedFunctionPtr &addedFunc, AbstractMetaClass *metaClass); AbstractMetaFunction *traverseFunction(const FunctionModelItem &function, AbstractMetaClass *currentClass); diff --git a/sources/shiboken2/ApiExtractor/typedatabase.cpp b/sources/shiboken2/ApiExtractor/typedatabase.cpp index c251ce8c3..a8c69d376 100644 --- a/sources/shiboken2/ApiExtractor/typedatabase.cpp +++ b/sources/shiboken2/ApiExtractor/typedatabase.cpp @@ -430,8 +430,8 @@ void TypeDatabase::addGlobalUserFunctions(const AddedFunctionList &functions) AddedFunctionList TypeDatabase::findGlobalUserFunctions(const QString& name) const { AddedFunctionList addedFunctions; - for (const AddedFunction &func : m_globalUserFunctions) { - if (func.name() == name) + for (const AddedFunctionPtr &func : m_globalUserFunctions) { + if (func->name() == name) addedFunctions.append(func); } return addedFunctions; diff --git a/sources/shiboken2/ApiExtractor/typesystem.cpp b/sources/shiboken2/ApiExtractor/typesystem.cpp index c47d3df43..e35c997d0 100644 --- a/sources/shiboken2/ApiExtractor/typesystem.cpp +++ b/sources/shiboken2/ApiExtractor/typesystem.cpp @@ -2009,8 +2009,8 @@ bool Handler::parseAddFunction(const QXmlStreamReader &, return false; } - AddedFunction func(signature, returnType); - func.setStatic(staticFunction); + AddedFunctionPtr func(new AddedFunction(signature, returnType)); + func->setStatic(staticFunction); if (!signature.contains(QLatin1Char('('))) signature += QLatin1String("()"); m_currentSignature = signature; @@ -2021,7 +2021,7 @@ bool Handler::parseAddFunction(const QXmlStreamReader &, m_error = QString::fromLatin1("Bad access type '%1'").arg(access); return false; } - func.setAccess(a); + func->setAccess(a); } m_contextStack.top()->addedFunctions << func; diff --git a/sources/shiboken2/ApiExtractor/typesystem.h b/sources/shiboken2/ApiExtractor/typesystem.h index 7e6fc191b..e2123ea4f 100644 --- a/sources/shiboken2/ApiExtractor/typesystem.h +++ b/sources/shiboken2/ApiExtractor/typesystem.h @@ -1269,7 +1269,7 @@ public: { m_addedFunctions = addedFunctions; } - void addNewFunction(const AddedFunction &addedFunction) + void addNewFunction(const AddedFunctionPtr &addedFunction) { m_addedFunctions << addedFunction; } diff --git a/sources/shiboken2/ApiExtractor/typesystem_typedefs.h b/sources/shiboken2/ApiExtractor/typesystem_typedefs.h index dc6e5cbcc..5cea587ed 100644 --- a/sources/shiboken2/ApiExtractor/typesystem_typedefs.h +++ b/sources/shiboken2/ApiExtractor/typesystem_typedefs.h @@ -31,6 +31,7 @@ #include #include +#include #include class CodeSnip; @@ -40,7 +41,8 @@ struct AddedFunction; struct FieldModification; struct FunctionModification; -typedef QVector AddedFunctionList; +using AddedFunctionPtr = QSharedPointer; +using AddedFunctionList = QVector; typedef QVector CodeSnipList; typedef QVector DocModificationList; typedef QVector FieldModificationList; -- cgit v1.2.3