mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-09 03:52:19 +02:00
Fixed symbol rename for types with comptime emissions
This commit is contained in:
parent
8922cc0c0d
commit
bde7b0b3aa
3 changed files with 25 additions and 21 deletions
|
@ -9228,7 +9228,8 @@ BF_EXPORT const char* BF_CALLTYPE BfCompiler_GetSymbolReferences(BfCompiler* bfC
|
||||||
std::map<String, String*> sortedParserMap;
|
std::map<String, String*> sortedParserMap;
|
||||||
for (auto& parserDataPair : resolvePassData->mFoundSymbolReferencesParserData)
|
for (auto& parserDataPair : resolvePassData->mFoundSymbolReferencesParserData)
|
||||||
{
|
{
|
||||||
sortedParserMap.insert(std::make_pair(parserDataPair.mKey->mFileName, &parserDataPair.mValue));
|
if (!parserDataPair.mKey->mFileName.Contains('|'))
|
||||||
|
sortedParserMap.insert(std::make_pair(parserDataPair.mKey->mFileName, &parserDataPair.mValue));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto& parserData : sortedParserMap)
|
for (auto& parserData : sortedParserMap)
|
||||||
|
|
|
@ -57,28 +57,28 @@ void BfResolvePassData::RecordReplaceNode(BfAstNode* node)
|
||||||
void BfResolvePassData::HandleMethodReference(BfAstNode* node, BfTypeDef* typeDef, BfMethodDef* methodDef)
|
void BfResolvePassData::HandleMethodReference(BfAstNode* node, BfTypeDef* typeDef, BfMethodDef* methodDef)
|
||||||
{
|
{
|
||||||
if ((mGetSymbolReferenceKind == BfGetSymbolReferenceKind_Method) && (mSymbolReferenceTypeDef == typeDef->GetDefinition()) &&
|
if ((mGetSymbolReferenceKind == BfGetSymbolReferenceKind_Method) && (mSymbolReferenceTypeDef == typeDef->GetDefinition()) &&
|
||||||
(mSymbolReferenceMethodIdx == methodDef->mIdx) && (!methodDef->mDeclaringType->IsEmitted()))
|
(mSymbolReferenceMethodIdx == methodDef->mIdx))
|
||||||
RecordReplaceNode(node);
|
RecordReplaceNode(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BfResolvePassData::HandleFieldReference(BfAstNode* node, BfTypeDef* typeDef, BfFieldDef* fieldDef)
|
void BfResolvePassData::HandleFieldReference(BfAstNode* node, BfTypeDef* typeDef, BfFieldDef* fieldDef)
|
||||||
{
|
{
|
||||||
if ((mGetSymbolReferenceKind == BfGetSymbolReferenceKind_Field) && (mSymbolReferenceTypeDef == typeDef->GetDefinition()) &&
|
if ((mGetSymbolReferenceKind == BfGetSymbolReferenceKind_Field) && (mSymbolReferenceTypeDef == typeDef->GetDefinition()) &&
|
||||||
(mSymbolReferenceFieldIdx == fieldDef->mIdx) && (!fieldDef->mDeclaringType->IsEmitted()))
|
(mSymbolReferenceFieldIdx == fieldDef->mIdx))
|
||||||
RecordReplaceNode(node);
|
RecordReplaceNode(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BfResolvePassData::HandlePropertyReference(BfAstNode* node, BfTypeDef* typeDef, BfPropertyDef* propDef)
|
void BfResolvePassData::HandlePropertyReference(BfAstNode* node, BfTypeDef* typeDef, BfPropertyDef* propDef)
|
||||||
{
|
{
|
||||||
if ((mGetSymbolReferenceKind == BfGetSymbolReferenceKind_Property) && (mSymbolReferenceTypeDef == typeDef->GetDefinition()) &&
|
if ((mGetSymbolReferenceKind == BfGetSymbolReferenceKind_Property) && (mSymbolReferenceTypeDef == typeDef->GetDefinition()) &&
|
||||||
(mSymbolReferencePropertyIdx == propDef->mIdx) && (!propDef->mDeclaringType->IsEmitted()))
|
(mSymbolReferencePropertyIdx == propDef->mIdx))
|
||||||
RecordReplaceNode(node);
|
RecordReplaceNode(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BfResolvePassData::HandleLocalReference(BfIdentifierNode* identifier, BfTypeDef* typeDef, BfMethodDef* methodDef, int localVarIdx)
|
void BfResolvePassData::HandleLocalReference(BfIdentifierNode* identifier, BfTypeDef* typeDef, BfMethodDef* methodDef, int localVarIdx)
|
||||||
{
|
{
|
||||||
if ((mGetSymbolReferenceKind == BfGetSymbolReferenceKind_Local) && (mSymbolReferenceTypeDef == typeDef->GetDefinition()) &&
|
if ((mGetSymbolReferenceKind == BfGetSymbolReferenceKind_Local) && (mSymbolReferenceTypeDef == typeDef->GetDefinition()) &&
|
||||||
(mSymbolReferenceMethodIdx == methodDef->mIdx) && (localVarIdx == mSymbolReferenceLocalIdx) && (!methodDef->mDeclaringType->IsEmitted()))
|
(mSymbolReferenceMethodIdx == methodDef->mIdx) && (localVarIdx == mSymbolReferenceLocalIdx))
|
||||||
RecordReplaceNode(identifier);
|
RecordReplaceNode(identifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,14 +91,14 @@ void BfResolvePassData::HandleTypeGenericParam(BfAstNode* node, BfTypeDef* typeD
|
||||||
void BfResolvePassData::HandleMethodGenericParam(BfAstNode* node, BfTypeDef* typeDef, BfMethodDef* methodDef, int genericParamIdx)
|
void BfResolvePassData::HandleMethodGenericParam(BfAstNode* node, BfTypeDef* typeDef, BfMethodDef* methodDef, int genericParamIdx)
|
||||||
{
|
{
|
||||||
if ((mGetSymbolReferenceKind == BfGetSymbolReferenceKind_MethodGenericParam) && (mSymbolReferenceTypeDef == typeDef->GetDefinition()) &&
|
if ((mGetSymbolReferenceKind == BfGetSymbolReferenceKind_MethodGenericParam) && (mSymbolReferenceTypeDef == typeDef->GetDefinition()) &&
|
||||||
(mSymbolReferenceMethodIdx == methodDef->mIdx) && (genericParamIdx == mSymbolMethodGenericParamIdx) && (!methodDef->mDeclaringType->IsEmitted()))
|
(mSymbolReferenceMethodIdx == methodDef->mIdx) && (genericParamIdx == mSymbolMethodGenericParamIdx))
|
||||||
RecordReplaceNode(node);
|
RecordReplaceNode(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BfResolvePassData::HandleLocalReference(BfIdentifierNode* identifier, BfIdentifierNode* origNameNode, BfTypeDef* typeDef, BfMethodDef* methodDef, int localVarIdx)
|
void BfResolvePassData::HandleLocalReference(BfIdentifierNode* identifier, BfIdentifierNode* origNameNode, BfTypeDef* typeDef, BfMethodDef* methodDef, int localVarIdx)
|
||||||
{
|
{
|
||||||
if ((mGetSymbolReferenceKind == BfGetSymbolReferenceKind_Local) && (mSymbolReferenceTypeDef == typeDef->GetDefinition()) &&
|
if ((mGetSymbolReferenceKind == BfGetSymbolReferenceKind_Local) && (mSymbolReferenceTypeDef == typeDef->GetDefinition()) &&
|
||||||
(mSymbolReferenceMethodIdx == methodDef->mIdx) && (localVarIdx == mSymbolReferenceLocalIdx) && (!methodDef->mDeclaringType->IsEmitted()))
|
(mSymbolReferenceMethodIdx == methodDef->mIdx) && (localVarIdx == mSymbolReferenceLocalIdx))
|
||||||
{
|
{
|
||||||
if (origNameNode == NULL)
|
if (origNameNode == NULL)
|
||||||
origNameNode = identifier;
|
origNameNode = identifier;
|
||||||
|
@ -145,7 +145,7 @@ BfAstNode* BfResolvePassData::FindBaseNode(BfAstNode* node)
|
||||||
|
|
||||||
void BfResolvePassData::HandleTypeReference(BfAstNode* node, BfTypeDef* typeDef)
|
void BfResolvePassData::HandleTypeReference(BfAstNode* node, BfTypeDef* typeDef)
|
||||||
{
|
{
|
||||||
if ((mGetSymbolReferenceKind == BfGetSymbolReferenceKind_Type) && (mSymbolReferenceTypeDef == typeDef))
|
if ((mGetSymbolReferenceKind == BfGetSymbolReferenceKind_Type) && (mSymbolReferenceTypeDef == typeDef->GetDefinition()))
|
||||||
{
|
{
|
||||||
auto baseNode = FindBaseNode(node);
|
auto baseNode = FindBaseNode(node);
|
||||||
if (baseNode != NULL)
|
if (baseNode != NULL)
|
||||||
|
|
|
@ -2141,18 +2141,21 @@ void BfSystem::SanityCheckAtomComposite(const BfAtomComposite& atomComposite)
|
||||||
|
|
||||||
void BfSystem::TrackName(BfTypeDef* typeDef)
|
void BfSystem::TrackName(BfTypeDef* typeDef)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < (int)typeDef->mFullName.mSize - 1; i++)
|
if (!typeDef->IsEmitted())
|
||||||
{
|
{
|
||||||
auto prevAtom = typeDef->mFullName.mParts[i];
|
for (int i = 0; i < (int)typeDef->mFullName.mSize - 1; i++)
|
||||||
auto atom = typeDef->mFullName.mParts[i + 1];
|
|
||||||
int* countPtr;
|
|
||||||
if (atom->mPrevNamesMap.TryAdd(prevAtom, NULL, &countPtr))
|
|
||||||
{
|
{
|
||||||
*countPtr = 1;
|
auto prevAtom = typeDef->mFullName.mParts[i];
|
||||||
}
|
auto atom = typeDef->mFullName.mParts[i + 1];
|
||||||
else
|
int* countPtr;
|
||||||
{
|
if (atom->mPrevNamesMap.TryAdd(prevAtom, NULL, &countPtr))
|
||||||
(*countPtr)++;
|
{
|
||||||
|
*countPtr = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(*countPtr)++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2165,7 +2168,7 @@ void BfSystem::UntrackName(BfTypeDef* typeDef)
|
||||||
nameAtom->mAtomUpdateIdx = ++mAtomUpdateIdx;
|
nameAtom->mAtomUpdateIdx = ++mAtomUpdateIdx;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!typeDef->mIsCombinedPartial)
|
if ((!typeDef->mIsCombinedPartial) && (!typeDef->IsEmitted()))
|
||||||
{
|
{
|
||||||
for (int i = 0; i < (int)typeDef->mFullName.mSize - 1; i++)
|
for (int i = 0; i < (int)typeDef->mFullName.mSize - 1; i++)
|
||||||
{
|
{
|
||||||
|
@ -3036,7 +3039,7 @@ void BfSystem::AddToCompositePartial(BfPassInstance* passInstance, BfTypeDef* co
|
||||||
{
|
{
|
||||||
BfPropertyDef* newProp = new BfPropertyDef();
|
BfPropertyDef* newProp = new BfPropertyDef();
|
||||||
*newProp = *prop;
|
*newProp = *prop;
|
||||||
|
BF_ASSERT(newProp->mDeclaringType != NULL);
|
||||||
for (int methodIdx = 0; methodIdx < (int)newProp->mMethods.size(); methodIdx++)
|
for (int methodIdx = 0; methodIdx < (int)newProp->mMethods.size(); methodIdx++)
|
||||||
newProp->mMethods[methodIdx] = typeDef->mMethods[startMethodIdx + newProp->mMethods[methodIdx]->mIdx];
|
newProp->mMethods[methodIdx] = typeDef->mMethods[startMethodIdx + newProp->mMethods[methodIdx]->mIdx];
|
||||||
typeDef->mProperties.push_back(newProp);
|
typeDef->mProperties.push_back(newProp);
|
||||||
|
@ -3298,7 +3301,7 @@ void BfSystem::CopyTypeDef(BfTypeDef* typeDef, BfTypeDef* fromTypeDef)
|
||||||
if (typeDef->mNameEx != NULL)
|
if (typeDef->mNameEx != NULL)
|
||||||
typeDef->mNameEx->mRefCount++;
|
typeDef->mNameEx->mRefCount++;
|
||||||
//typeDef->mNameEx = fromTypeDef->mNameEx;
|
//typeDef->mNameEx = fromTypeDef->mNameEx;
|
||||||
//typeDef->mFullName = fromTypeDef->mFullName;
|
typeDef->mFullName = fromTypeDef->mFullName;
|
||||||
|
|
||||||
typeDef->mFullNameEx = fromTypeDef->mFullNameEx;
|
typeDef->mFullNameEx = fromTypeDef->mFullNameEx;
|
||||||
//RefAtomComposite(typeDef->mFullNameEx);
|
//RefAtomComposite(typeDef->mFullNameEx);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue