diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2018-06-22 15:43:24 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2018-06-22 20:18:19 +0000 |
commit | 5cf419c973ac367ab36e47abf4bde953ae533706 (patch) | |
tree | a2036650db9e85353f1a43c8308e52fe3d699dce /sources/shiboken2/ApiExtractor | |
parent | 956a8c13a836eb4d3b469bf2c9d8cbb1619ddf12 (diff) |
shiboken: Add error handling to added functions
Add some handling in case an argument type cannot be parsed.
Change-Id: Ib901d023ed60f74fe82a06d8c08fd704f1350a7a
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'sources/shiboken2/ApiExtractor')
-rw-r--r-- | sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp b/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp index 0e96b4c34..09d10580c 100644 --- a/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp +++ b/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp @@ -715,6 +715,10 @@ void AbstractMetaBuilderPrivate::traverseDom(const FileModelItem &dom) const AddedFunctionList &globalUserFunctions = types->globalUserFunctions(); for (const AddedFunction &addedFunc : globalUserFunctions) { AbstractMetaFunction* metaFunc = traverseFunction(addedFunc); + if (Q_UNLIKELY(!metaFunc)) { + qFatal("Unable to traverse added global function \"%s\".", + qPrintable(addedFunc.name())); + } metaFunc->setFunctionType(AbstractMetaFunction::NormalFunction); m_globalFunctions << metaFunc; } @@ -1571,8 +1575,12 @@ void AbstractMetaBuilderPrivate::fillAddedFunctions(AbstractMetaClass *metaClass { // Add the functions added by the typesystem const AddedFunctionList &addedFunctions = metaClass->typeEntry()->addedFunctions(); - for (const AddedFunction &addedFunc : addedFunctions) - traverseFunction(addedFunc, metaClass); + for (const AddedFunction &addedFunc : addedFunctions) { + if (!traverseFunction(addedFunc, metaClass)) { + qFatal("Unable to traverse function \"%s\" added to \"%s\".", + qPrintable(addedFunc.name()), qPrintable(metaClass->name())); + } + } } void AbstractMetaBuilderPrivate::applyFunctionModifications(AbstractMetaFunction *func) @@ -1753,6 +1761,13 @@ AbstractMetaFunction* AbstractMetaBuilderPrivate::traverseFunction(const AddedFu AddedFunction::TypeInfo& typeInfo = args[i]; AbstractMetaArgument *metaArg = new AbstractMetaArgument; AbstractMetaType *type = translateType(typeInfo); + 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())); + delete metaFunction; + return nullptr; + } type->decideUsagePattern(); metaArg->setType(type); metaArg->setArgumentIndex(i); |