aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/3rdparty/cplusplus/Names.h
diff options
context:
space:
mode:
authorPrzemyslaw Gorszkowski <pgorszkowski@gmail.com>2013-01-12 22:05:41 +0100
committerPrzemyslaw Gorszkowski <pgorszkowski@gmail.com>2013-01-30 18:49:25 +0100
commitffba28d26ab6aaf9a953f42d5fa15c55a85c75a7 (patch)
tree010c0eb03d5caf768b3206ee7b69fe68b93a333c /src/libs/3rdparty/cplusplus/Names.h
parent0135609973b8c8f9b380aefb618659f698c5c2c5 (diff)
C++: Fix code compl. for instantiation of template specialization
It works for full specialization. Instantiate of the partial specialization has to be implemented(finding appropriate partial specialization-on going) Added unit test. Change-Id: I8ef5ea963e7c665e0d67d390b3a833486773dab0 Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Diffstat (limited to 'src/libs/3rdparty/cplusplus/Names.h')
-rw-r--r--src/libs/3rdparty/cplusplus/Names.h18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/libs/3rdparty/cplusplus/Names.h b/src/libs/3rdparty/cplusplus/Names.h
index 70c782591f..e600ec1daf 100644
--- a/src/libs/3rdparty/cplusplus/Names.h
+++ b/src/libs/3rdparty/cplusplus/Names.h
@@ -80,8 +80,11 @@ class CPLUSPLUS_EXPORT TemplateNameId: public Name
{
public:
template <typename _Iterator>
- TemplateNameId(const Identifier *identifier, _Iterator first, _Iterator last)
- : _identifier(identifier), _templateArguments(first, last) {}
+ TemplateNameId(const Identifier *identifier, bool isSpecialization, _Iterator first,
+ _Iterator last)
+ : _identifier(identifier)
+ , _templateArguments(first, last)
+ , _isSpecialization(isSpecialization) {}
virtual ~TemplateNameId();
@@ -100,6 +103,15 @@ public:
TemplateArgumentIterator firstTemplateArgument() const { return _templateArguments.begin(); }
TemplateArgumentIterator lastTemplateArgument() const { return _templateArguments.end(); }
+ bool isSpecialization() const { return _isSpecialization; }
+ // this is temporary solution needed in ClassOrNamespace::nestedType
+ // when we try to find correct specialization for instantiation
+ void setIsSpecialization(bool isSpecialization) { _isSpecialization = isSpecialization; }
+
+ // Comparator needed to distinguish between two different TemplateNameId(e.g.:used in std::map)
+ struct Compare: std::binary_function<const TemplateNameId *, const TemplateNameId *, bool> {
+ bool operator()(const TemplateNameId *name, const TemplateNameId *other) const;
+ };
protected:
virtual void accept0(NameVisitor *visitor) const;
@@ -107,6 +119,8 @@ protected:
private:
const Identifier *_identifier;
std::vector<FullySpecifiedType> _templateArguments;
+ // now TemplateNameId can be a specialization or an instantiation
+ bool _isSpecialization;
};
class CPLUSPLUS_EXPORT OperatorNameId: public Name