mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-10 04:22:20 +02:00
Added ability to rename namespaces
This commit is contained in:
parent
91e0d10128
commit
014263c3a7
16 changed files with 373 additions and 78 deletions
|
@ -105,38 +105,70 @@ void BfResolvePassData::HandleLocalReference(BfIdentifierNode* identifier, BfIde
|
|||
}
|
||||
}
|
||||
|
||||
BfAstNode* BfResolvePassData::FindBaseNode(BfAstNode* node)
|
||||
{
|
||||
BfAstNode* baseNode = node;
|
||||
while (true)
|
||||
{
|
||||
if (auto qualifiedTypeRef = BfNodeDynCast<BfQualifiedTypeReference>(baseNode))
|
||||
{
|
||||
baseNode = qualifiedTypeRef->mRight;
|
||||
}
|
||||
else if (auto elementedTypeRef = BfNodeDynCast<BfElementedTypeRef>(baseNode))
|
||||
{
|
||||
baseNode = elementedTypeRef->mElementType;
|
||||
}
|
||||
else if (auto namedTypeRef = BfNodeDynCast<BfNamedTypeReference>(baseNode))
|
||||
{
|
||||
baseNode = namedTypeRef->mNameNode;
|
||||
}
|
||||
else if (auto qualifiedNameNode = BfNodeDynCast<BfQualifiedNameNode>(baseNode))
|
||||
{
|
||||
baseNode = qualifiedNameNode->mRight;
|
||||
}
|
||||
else if (auto declTypeRef = BfNodeDynCast<BfDeclTypeRef>(baseNode))
|
||||
{
|
||||
baseNode = NULL;
|
||||
break;
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
return baseNode;
|
||||
}
|
||||
|
||||
void BfResolvePassData::HandleTypeReference(BfAstNode* node, BfTypeDef* typeDef)
|
||||
{
|
||||
if ((mGetSymbolReferenceKind == BfGetSymbolReferenceKind_Type) && (mSymbolReferenceTypeDef == typeDef))
|
||||
{
|
||||
BfAstNode* baseNode = node;
|
||||
while (true)
|
||||
{
|
||||
if (auto qualifiedTypeRef = BfNodeDynCast<BfQualifiedTypeReference>(baseNode))
|
||||
{
|
||||
baseNode = qualifiedTypeRef->mRight;
|
||||
}
|
||||
else if (auto elementedTypeRef = BfNodeDynCast<BfElementedTypeRef>(baseNode))
|
||||
{
|
||||
baseNode = elementedTypeRef->mElementType;
|
||||
}
|
||||
else if (auto namedTypeRef = BfNodeDynCast<BfNamedTypeReference>(baseNode))
|
||||
{
|
||||
baseNode = namedTypeRef->mNameNode;
|
||||
}
|
||||
else if (auto qualifiedNameNode = BfNodeDynCast<BfQualifiedNameNode>(baseNode))
|
||||
{
|
||||
baseNode = qualifiedNameNode->mRight;
|
||||
}
|
||||
else if (auto declTypeRef = BfNodeDynCast<BfDeclTypeRef>(baseNode))
|
||||
{
|
||||
baseNode = NULL;
|
||||
break;
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
auto baseNode = FindBaseNode(node);
|
||||
if (baseNode != NULL)
|
||||
RecordReplaceNode(baseNode);
|
||||
}
|
||||
}
|
||||
|
||||
void BfResolvePassData::HandleNamespaceReference(BfAstNode* node, const BfAtomComposite& namespaceName)
|
||||
{
|
||||
if ((mGetSymbolReferenceKind == BfGetSymbolReferenceKind_Namespace) && (namespaceName.StartsWith(mSymbolReferenceNamespace)))
|
||||
{
|
||||
BfAstNode* recordNode = node;
|
||||
|
||||
int leftCount = namespaceName.mSize - mSymbolReferenceNamespace.mSize;
|
||||
for (int i = 0; i < leftCount; i++)
|
||||
{
|
||||
if (auto qualifiedTypeRef = BfNodeDynCast<BfQualifiedTypeReference>(recordNode))
|
||||
{
|
||||
recordNode = qualifiedTypeRef->mLeft;
|
||||
}
|
||||
else if (auto qualifiedNameNode = BfNodeDynCast<BfQualifiedNameNode>(recordNode))
|
||||
{
|
||||
recordNode = qualifiedNameNode->mLeft;
|
||||
}
|
||||
else
|
||||
return;
|
||||
}
|
||||
|
||||
auto baseNode = FindBaseNode(recordNode);
|
||||
if (baseNode != NULL)
|
||||
RecordReplaceNode(baseNode);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue