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>
This commit is contained in:
Przemyslaw Gorszkowski
2013-02-16 13:28:34 +01:00
committed by Erik Verbruggen
parent c9d7b396e5
commit 2b0e643e3d
4 changed files with 71 additions and 4 deletions

View File

@@ -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;
}
}
}
}