|
|
|
@@ -165,41 +165,8 @@ std::shared_ptr<DataType> CxxTypeNameResolver::typeToDataType(const clang::Type*
|
|
|
|
|
case clang::Type::DependentName:
|
|
|
|
|
{
|
|
|
|
|
const clang::DependentNameType* dependentNameType = clang::dyn_cast<clang::DependentNameType>(type);
|
|
|
|
|
clang::NestedNameSpecifier* nns = dependentNameType->getQualifier();
|
|
|
|
|
clang::NestedNameSpecifier::SpecifierKind nnsKind = nns->getKind();
|
|
|
|
|
NameHierarchy typeNameHerarchy;
|
|
|
|
|
switch (nnsKind)
|
|
|
|
|
{
|
|
|
|
|
case clang::NestedNameSpecifier::Identifier:
|
|
|
|
|
typeNameHerarchy.push(std::make_shared<NameElement>(nns->getAsIdentifier()->getName())); // TODO: Test this one.
|
|
|
|
|
break;
|
|
|
|
|
case clang::NestedNameSpecifier::Namespace:
|
|
|
|
|
{
|
|
|
|
|
CxxDeclNameResolver declNameResolver(nns->getAsNamespace(), getIgnoredContextDecls());
|
|
|
|
|
typeNameHerarchy = declNameResolver.getDeclNameHierarchy();
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case clang::NestedNameSpecifier::NamespaceAlias:
|
|
|
|
|
{
|
|
|
|
|
CxxDeclNameResolver declNameResolver(nns->getAsNamespaceAlias(), getIgnoredContextDecls());
|
|
|
|
|
typeNameHerarchy = declNameResolver.getDeclNameHierarchy();
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case clang::NestedNameSpecifier::TypeSpec:
|
|
|
|
|
case clang::NestedNameSpecifier::TypeSpecWithTemplate:
|
|
|
|
|
typeNameHerarchy = typeToDataType(nns->getAsType())->getTypeNameHierarchy();
|
|
|
|
|
break;
|
|
|
|
|
case clang::NestedNameSpecifier::Global:
|
|
|
|
|
// no context name hierarchy needed.
|
|
|
|
|
break;
|
|
|
|
|
case clang::NestedNameSpecifier::Super:
|
|
|
|
|
{
|
|
|
|
|
CxxDeclNameResolver declNameResolver(nns->getAsRecordDecl(), getIgnoredContextDecls());
|
|
|
|
|
typeNameHerarchy = declNameResolver.getDeclNameHierarchy();
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
NameHierarchy typeNameHerarchy = getNameHierarchy( dependentNameType->getQualifier());
|
|
|
|
|
typeNameHerarchy.push(std::make_shared<NameElement>(dependentNameType->getIdentifier()->getName().str()));
|
|
|
|
|
|
|
|
|
|
dataType = std::make_shared<NamedDataType>(typeNameHerarchy);
|
|
|
|
@@ -226,3 +193,48 @@ std::shared_ptr<DataType> CxxTypeNameResolver::typeToDataType(const clang::Type*
|
|
|
|
|
}
|
|
|
|
|
return dataType;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
NameHierarchy CxxTypeNameResolver::getNameHierarchy(const clang::NestedNameSpecifier* nestedNameSpecifier)
|
|
|
|
|
{
|
|
|
|
|
clang::NestedNameSpecifier::SpecifierKind nnsKind = nestedNameSpecifier->getKind();
|
|
|
|
|
NameHierarchy typeNameHerarchy;
|
|
|
|
|
switch (nnsKind)
|
|
|
|
|
{
|
|
|
|
|
case clang::NestedNameSpecifier::Identifier:
|
|
|
|
|
{
|
|
|
|
|
const clang::NestedNameSpecifier* prefix = nestedNameSpecifier->getPrefix();
|
|
|
|
|
if (prefix)
|
|
|
|
|
{
|
|
|
|
|
typeNameHerarchy = getNameHierarchy(prefix);
|
|
|
|
|
}
|
|
|
|
|
typeNameHerarchy.push(std::make_shared<NameElement>(nestedNameSpecifier->getAsIdentifier()->getName()));
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case clang::NestedNameSpecifier::Namespace:
|
|
|
|
|
{
|
|
|
|
|
CxxDeclNameResolver declNameResolver(nestedNameSpecifier->getAsNamespace(), getIgnoredContextDecls());
|
|
|
|
|
typeNameHerarchy = declNameResolver.getDeclNameHierarchy();
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case clang::NestedNameSpecifier::NamespaceAlias:
|
|
|
|
|
{
|
|
|
|
|
CxxDeclNameResolver declNameResolver(nestedNameSpecifier->getAsNamespaceAlias(), getIgnoredContextDecls());
|
|
|
|
|
typeNameHerarchy = declNameResolver.getDeclNameHierarchy();
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case clang::NestedNameSpecifier::TypeSpec:
|
|
|
|
|
case clang::NestedNameSpecifier::TypeSpecWithTemplate:
|
|
|
|
|
typeNameHerarchy = typeToDataType(nestedNameSpecifier->getAsType())->getTypeNameHierarchy();
|
|
|
|
|
break;
|
|
|
|
|
case clang::NestedNameSpecifier::Global:
|
|
|
|
|
// no context name hierarchy needed.
|
|
|
|
|
break;
|
|
|
|
|
case clang::NestedNameSpecifier::Super:
|
|
|
|
|
{
|
|
|
|
|
CxxDeclNameResolver declNameResolver(nestedNameSpecifier->getAsRecordDecl(), getIgnoredContextDecls());
|
|
|
|
|
typeNameHerarchy = declNameResolver.getDeclNameHierarchy();
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
return typeNameHerarchy;
|
|
|
|
|
}
|
|
|
|
|