diff options
Diffstat (limited to 'src/libs/3rdparty/cplusplus/Control.cpp')
-rw-r--r-- | src/libs/3rdparty/cplusplus/Control.cpp | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/src/libs/3rdparty/cplusplus/Control.cpp b/src/libs/3rdparty/cplusplus/Control.cpp index 2bbe00c293..7a40cbba31 100644 --- a/src/libs/3rdparty/cplusplus/Control.cpp +++ b/src/libs/3rdparty/cplusplus/Control.cpp @@ -25,6 +25,9 @@ #include "CoreTypes.h" #include "Symbols.h" #include "Names.h" + +#include <QList> + #include <map> #include <set> #include <algorithm> @@ -579,6 +582,15 @@ const OperatorNameId *Control::findOperatorNameId(OperatorNameId::Kind operatorI return &*i; } +const ConversionNameId *Control::findConversionNameId(const FullySpecifiedType &type) const +{ + for (const ConversionNameId &id : d->conversionNameIds) { + if (type.match(id.type())) + return &id; + } + return nullptr; +} + const Identifier *Control::findIdentifier(const char *chars, int size) const { return d->identifiers.findLiteral(chars, size); } @@ -629,7 +641,7 @@ const NumericLiteral *Control::numericLiteral(const char *chars) const TemplateNameId *Control::templateNameId(const Identifier *id, bool isSpecialization, - const FullySpecifiedType *const args, + const TemplateArgument *const args, int argv) { return d->findOrInsertTemplateNameId(id, isSpecialization, args, args + argv); @@ -821,11 +833,6 @@ bool Control::hasSymbol(Symbol *symbol) const return std::find(d->symbols.begin(), d->symbols.end(), symbol) != d->symbols.end(); } -void Control::squeeze() -{ - d->numericLiterals.reset(); -} - TopLevelDeclarationProcessor *Control::topLevelDeclarationProcessor() const { return d->processor; @@ -840,3 +847,15 @@ void Control::addSymbol(Symbol *symbol) { d->symbols.push_back(symbol); } + +const Name *Control::toName(const QList<const Name *> &names) +{ + const Name *n = nullptr; + for (int i = names.size() - 1; i >= 0; --i) { + if (! n) + n = names.at(i); + else + n = qualifiedNameId(names.at(i), n); + } + return n; +} |