diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2019-06-19 08:12:33 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2019-06-19 08:12:33 +0200 |
commit | c0f118e4106b5d38cd828425b6533147f111cdd4 (patch) | |
tree | 279e019b83fb2aa9e0673d00b5df4c432315ea51 /sources/shiboken2/ApiExtractor/typesystem.cpp | |
parent | b4098737b13c91ca85b69362426f0f30768c49b1 (diff) | |
parent | d8bd1449361835a3fe67f8ad33e82cec78940f1c (diff) |
Merge "Merge remote-tracking branch 'origin/5.12' into 5.13"
Diffstat (limited to 'sources/shiboken2/ApiExtractor/typesystem.cpp')
-rw-r--r-- | sources/shiboken2/ApiExtractor/typesystem.cpp | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/sources/shiboken2/ApiExtractor/typesystem.cpp b/sources/shiboken2/ApiExtractor/typesystem.cpp index 434134be9..344313e87 100644 --- a/sources/shiboken2/ApiExtractor/typesystem.cpp +++ b/sources/shiboken2/ApiExtractor/typesystem.cpp @@ -3279,7 +3279,9 @@ QString FunctionModification::toString() const return str; } -static AddedFunction::TypeInfo parseType(const QString& signature, int startPos = 0, int* endPos = 0) +static AddedFunction::TypeInfo parseType(const QString& signature, + int startPos = 0, int *endPos = nullptr, + QString *argumentName = nullptr) { AddedFunction::TypeInfo result; static const QRegularExpression regex(QLatin1String("\\w")); @@ -3330,6 +3332,19 @@ static AddedFunction::TypeInfo parseType(const QString& signature, int startPos paramString.remove(0, sizeof("const")/sizeof(char)); paramString = paramString.trimmed(); } + + // Extract argument name from "T<bla,blub>* @foo@" + const int nameStartPos = paramString.indexOf(QLatin1Char('@')); + if (nameStartPos != -1) { + const int nameEndPos = paramString.indexOf(QLatin1Char('@'), nameStartPos + 1); + if (nameEndPos > nameStartPos) { + if (argumentName) + *argumentName = paramString.mid(nameStartPos + 1, nameEndPos - nameStartPos - 1); + paramString.remove(nameStartPos, nameEndPos - nameStartPos + 1); + paramString = paramString.trimmed(); + } + } + // check reference if (paramString.endsWith(QLatin1Char('&'))) { result.isReference = true; @@ -3364,9 +3379,10 @@ AddedFunction::AddedFunction(QString signature, const QString &returnType) : m_name = signature.left(endPos).trimmed(); int signatureLength = signature.length(); while (endPos < signatureLength) { - TypeInfo arg = parseType(signature, endPos, &endPos); + QString argumentName; + TypeInfo arg = parseType(signature, endPos, &endPos, &argumentName); if (!arg.name.isEmpty()) - m_arguments.append(arg); + m_arguments.append({argumentName, arg}); // end of parameters... if (signature[endPos] == QLatin1Char(')')) break; @@ -3512,6 +3528,19 @@ QDebug operator<<(QDebug d, const AddedFunction::TypeInfo &ti) return d; } +QDebug operator<<(QDebug d, const AddedFunction::Argument &a) +{ + QDebugStateSaver saver(d); + d.noquote(); + d.nospace(); + d << "Argument("; + d << a.typeInfo; + if (!a.name.isEmpty()) + d << ' ' << a.name; + d << ')'; + return d; +} + QDebug operator<<(QDebug d, const AddedFunction &af) { QDebugStateSaver saver(d); |