1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-14 14:24:10 +02:00

Fixed atom ref issue

This commit is contained in:
Brian Fiete 2020-05-31 09:43:15 -07:00
parent f9ee4010cb
commit 63237f87af

View file

@ -16,7 +16,7 @@ void BfNamespaceVisitor::Visit(BfUsingDirective* usingDirective)
String usingString = usingDirective->mNamespace->ToString(); String usingString = usingDirective->mNamespace->ToString();
BfAtomComposite usingComposite; BfAtomComposite usingComposite;
mSystem->ParseAtomComposite(usingString, usingComposite, true); mSystem->ParseAtomComposite(usingString, usingComposite);
if (mResolvePassData->mAutoComplete != NULL) if (mResolvePassData->mAutoComplete != NULL)
mResolvePassData->mAutoComplete->CheckNamespace(usingDirective->mNamespace, usingComposite); mResolvePassData->mAutoComplete->CheckNamespace(usingDirective->mNamespace, usingComposite);
@ -43,7 +43,7 @@ void BfNamespaceVisitor::Visit(BfUsingStaticDirective* usingDirective)
String usingString = useNode->ToString(); String usingString = useNode->ToString();
BfAtomComposite usingComposite; BfAtomComposite usingComposite;
if (mSystem->ParseAtomComposite(usingString, usingComposite, true)) if (mSystem->ParseAtomComposite(usingString, usingComposite))
mResolvePassData->HandleNamespaceReference(useNode, usingComposite); mResolvePassData->HandleNamespaceReference(useNode, usingComposite);
} }
@ -54,25 +54,20 @@ void BfNamespaceVisitor::Visit(BfNamespaceDeclaration* namespaceDeclaration)
if (namespaceDeclaration->mNameNode == NULL) if (namespaceDeclaration->mNameNode == NULL)
return; return;
Array<BfAtom*> derefAtoms;
String namespaceLeft = namespaceDeclaration->mNameNode->ToString(); String namespaceLeft = namespaceDeclaration->mNameNode->ToString();
while (true) while (true)
{ {
int dotIdx = (int)namespaceLeft.IndexOf('.'); int dotIdx = (int)namespaceLeft.IndexOf('.');
if (dotIdx == -1) if (dotIdx == -1)
{ {
BfAtom* namespaceAtom = mSystem->GetAtom(namespaceLeft); BfAtom* namespaceAtom = mSystem->FindAtom(namespaceLeft);
mNamespace.Set(mNamespace.mParts, mNamespace.mSize, &namespaceAtom, 1); mNamespace.Set(mNamespace.mParts, mNamespace.mSize, &namespaceAtom, 1);
derefAtoms.Add(namespaceAtom);
break; break;
} }
BfAtom* namespaceAtom = mSystem->GetAtom(namespaceLeft.Substring(0, dotIdx)); BfAtom* namespaceAtom = mSystem->FindAtom(namespaceLeft.Substring(0, dotIdx));
mNamespace.Set(mNamespace.mParts, mNamespace.mSize, &namespaceAtom, 1); mNamespace.Set(mNamespace.mParts, mNamespace.mSize, &namespaceAtom, 1);
namespaceLeft = namespaceLeft.Substring(dotIdx + 1); namespaceLeft = namespaceLeft.Substring(dotIdx + 1);
derefAtoms.Add(namespaceAtom);
} }
if (mResolvePassData->mAutoComplete != NULL) if (mResolvePassData->mAutoComplete != NULL)
@ -80,9 +75,6 @@ void BfNamespaceVisitor::Visit(BfNamespaceDeclaration* namespaceDeclaration)
mResolvePassData->HandleNamespaceReference(namespaceDeclaration->mNameNode, mNamespace); mResolvePassData->HandleNamespaceReference(namespaceDeclaration->mNameNode, mNamespace);
VisitChild(namespaceDeclaration->mBlock); VisitChild(namespaceDeclaration->mBlock);
mNamespace = prevNamespace; mNamespace = prevNamespace;
for (auto atom : derefAtoms)
mSystem->ReleaseAtom(atom);
} }
void BfNamespaceVisitor::Visit(BfBlock* block) void BfNamespaceVisitor::Visit(BfBlock* block)