diff options
author | Przemyslaw Gorszkowski <pgorszkowski@gmail.com> | 2013-02-16 13:28:34 +0100 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@digia.com> | 2013-02-20 09:58:34 +0100 |
commit | 2b0e643e3da74af206a1826ae1a52075ac3efdc0 (patch) | |
tree | 6969b2f366e252e0876c9388fb2e6c6c9fe5c1b5 /src/libs/3rdparty/cplusplus/Templates.cpp | |
parent | c9d7b396e506ea5255655b2dfe62d30916c60795 (diff) |
C++: fixed resolving complex typedef
Unit test describe this complex typedef. Another step to bring
code completion for stl containers.
Change-Id: I27985c4ea7c26c723d7a88ce42c5ecf164b6c903
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Diffstat (limited to 'src/libs/3rdparty/cplusplus/Templates.cpp')
-rw-r--r-- | src/libs/3rdparty/cplusplus/Templates.cpp | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/libs/3rdparty/cplusplus/Templates.cpp b/src/libs/3rdparty/cplusplus/Templates.cpp index c81ed51b09..b813600143 100644 --- a/src/libs/3rdparty/cplusplus/Templates.cpp +++ b/src/libs/3rdparty/cplusplus/Templates.cpp @@ -526,11 +526,23 @@ FullySpecifiedType Subst::apply(const Name *name) const return _previous->apply(name); else if (const QualifiedNameId *q = name->asQualifiedNameId()) { - const NamedType *name = apply(q->base())->asNamedType(); + const NamedType *baseNamedType = apply(q->base())->asNamedType(); const NamedType *unqualified = apply(q->name())->asNamedType(); - if (name && name->name()->identifier() != 0 && unqualified) - return control()->namedType(control()->qualifiedNameId(name->name()->identifier(), - unqualified->name())); + if (baseNamedType) { + if (! unqualified) { + const Name *qualifiedBase = baseNamedType->name(); + const Name *qualifiedName = q->name(); + return control()->namedType(control()->qualifiedNameId(qualifiedBase, + qualifiedName)); + } + else if(baseNamedType->name()->identifier() != 0) { + const QualifiedNameId *clonedQualifiedNameId + = control()->qualifiedNameId(baseNamedType->name()->identifier(), + unqualified->name()); + NamedType *clonedNamedType = control()->namedType(clonedQualifiedNameId); + return clonedNamedType; + } + } } } |