1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-09 12:02:21 +02:00

Fixed symbol rename for types with comptime emissions

This commit is contained in:
Brian Fiete 2021-11-23 11:34:30 -08:00
parent 8922cc0c0d
commit bde7b0b3aa
3 changed files with 25 additions and 21 deletions

View file

@ -9228,6 +9228,7 @@ 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)
{ {
if (!parserDataPair.mKey->mFileName.Contains('|'))
sortedParserMap.insert(std::make_pair(parserDataPair.mKey->mFileName, &parserDataPair.mValue)); sortedParserMap.insert(std::make_pair(parserDataPair.mKey->mFileName, &parserDataPair.mValue));
} }

View file

@ -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)

View file

@ -2141,6 +2141,8 @@ void BfSystem::SanityCheckAtomComposite(const BfAtomComposite& atomComposite)
void BfSystem::TrackName(BfTypeDef* typeDef) void BfSystem::TrackName(BfTypeDef* typeDef)
{ {
if (!typeDef->IsEmitted())
{
for (int i = 0; i < (int)typeDef->mFullName.mSize - 1; i++) for (int i = 0; i < (int)typeDef->mFullName.mSize - 1; i++)
{ {
auto prevAtom = typeDef->mFullName.mParts[i]; auto prevAtom = typeDef->mFullName.mParts[i];
@ -2155,6 +2157,7 @@ void BfSystem::TrackName(BfTypeDef* typeDef)
(*countPtr)++; (*countPtr)++;
} }
} }
}
} }
void BfSystem::UntrackName(BfTypeDef* typeDef) void BfSystem::UntrackName(BfTypeDef* typeDef)
@ -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);