Răsfoiți Sursa

Fixed symbol rename for types with comptime emissions

Brian Fiete 3 ani în urmă
părinte
comite
bde7b0b3aa

+ 2 - 1
IDEHelper/Compiler/BfCompiler.cpp

@@ -9228,7 +9228,8 @@ BF_EXPORT const char* BF_CALLTYPE BfCompiler_GetSymbolReferences(BfCompiler* bfC
 	std::map<String, String*> sortedParserMap;	
 	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)

+ 7 - 7
IDEHelper/Compiler/BfResolvePass.cpp

@@ -57,28 +57,28 @@ void BfResolvePassData::RecordReplaceNode(BfAstNode* node)
 void BfResolvePassData::HandleMethodReference(BfAstNode* node, BfTypeDef* typeDef, BfMethodDef* methodDef)
 {
 	if ((mGetSymbolReferenceKind == BfGetSymbolReferenceKind_Method) && (mSymbolReferenceTypeDef == typeDef->GetDefinition()) && 
-		(mSymbolReferenceMethodIdx == methodDef->mIdx) && (!methodDef->mDeclaringType->IsEmitted()))
+		(mSymbolReferenceMethodIdx == methodDef->mIdx))
 		RecordReplaceNode(node);
 }
 
 void BfResolvePassData::HandleFieldReference(BfAstNode* node, BfTypeDef* typeDef, BfFieldDef* fieldDef)
 {
 	if ((mGetSymbolReferenceKind == BfGetSymbolReferenceKind_Field) && (mSymbolReferenceTypeDef == typeDef->GetDefinition()) && 
-		(mSymbolReferenceFieldIdx == fieldDef->mIdx) && (!fieldDef->mDeclaringType->IsEmitted()))
+		(mSymbolReferenceFieldIdx == fieldDef->mIdx))
 		RecordReplaceNode(node);
 }
 
 void BfResolvePassData::HandlePropertyReference(BfAstNode* node, BfTypeDef* typeDef, BfPropertyDef* propDef)
 {
 	if ((mGetSymbolReferenceKind == BfGetSymbolReferenceKind_Property) && (mSymbolReferenceTypeDef == typeDef->GetDefinition()) && 
-		(mSymbolReferencePropertyIdx == propDef->mIdx) && (!propDef->mDeclaringType->IsEmitted()))
+		(mSymbolReferencePropertyIdx == propDef->mIdx))
 		RecordReplaceNode(node);
 }
 
 void BfResolvePassData::HandleLocalReference(BfIdentifierNode* identifier, BfTypeDef* typeDef, BfMethodDef* methodDef, int localVarIdx)
 {
 	if ((mGetSymbolReferenceKind == BfGetSymbolReferenceKind_Local) && (mSymbolReferenceTypeDef == typeDef->GetDefinition()) && 
-		(mSymbolReferenceMethodIdx == methodDef->mIdx) && (localVarIdx == mSymbolReferenceLocalIdx) && (!methodDef->mDeclaringType->IsEmitted()))
+		(mSymbolReferenceMethodIdx == methodDef->mIdx) && (localVarIdx == mSymbolReferenceLocalIdx))
 		RecordReplaceNode(identifier);
 }
 
@@ -91,14 +91,14 @@ void BfResolvePassData::HandleTypeGenericParam(BfAstNode* node, BfTypeDef* typeD
 void BfResolvePassData::HandleMethodGenericParam(BfAstNode* node, BfTypeDef* typeDef, BfMethodDef* methodDef, int genericParamIdx)
 {
 	if ((mGetSymbolReferenceKind == BfGetSymbolReferenceKind_MethodGenericParam) && (mSymbolReferenceTypeDef == typeDef->GetDefinition()) && 
-		(mSymbolReferenceMethodIdx == methodDef->mIdx) && (genericParamIdx == mSymbolMethodGenericParamIdx) && (!methodDef->mDeclaringType->IsEmitted()))
+		(mSymbolReferenceMethodIdx == methodDef->mIdx) && (genericParamIdx == mSymbolMethodGenericParamIdx))
 		RecordReplaceNode(node);
 }
 
 void BfResolvePassData::HandleLocalReference(BfIdentifierNode* identifier, BfIdentifierNode* origNameNode, BfTypeDef* typeDef, BfMethodDef* methodDef, int localVarIdx)
 {
 	if ((mGetSymbolReferenceKind == BfGetSymbolReferenceKind_Local) && (mSymbolReferenceTypeDef == typeDef->GetDefinition()) && 
-		(mSymbolReferenceMethodIdx == methodDef->mIdx) && (localVarIdx == mSymbolReferenceLocalIdx) && (!methodDef->mDeclaringType->IsEmitted()))
+		(mSymbolReferenceMethodIdx == methodDef->mIdx) && (localVarIdx == mSymbolReferenceLocalIdx))
 	{
 		if (origNameNode == NULL)
 			origNameNode = identifier;
@@ -145,7 +145,7 @@ BfAstNode* BfResolvePassData::FindBaseNode(BfAstNode* node)
 
 void BfResolvePassData::HandleTypeReference(BfAstNode* node, BfTypeDef* typeDef)
 {
-	if ((mGetSymbolReferenceKind == BfGetSymbolReferenceKind_Type) && (mSymbolReferenceTypeDef == typeDef))
+	if ((mGetSymbolReferenceKind == BfGetSymbolReferenceKind_Type) && (mSymbolReferenceTypeDef == typeDef->GetDefinition()))
 	{
 		auto baseNode = FindBaseNode(node);
 		if (baseNode != NULL)

+ 16 - 13
IDEHelper/Compiler/BfSystem.cpp

@@ -2141,18 +2141,21 @@ void BfSystem::SanityCheckAtomComposite(const BfAtomComposite& atomComposite)
 
 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];
-		auto atom = typeDef->mFullName.mParts[i + 1];
-		int* countPtr;
-		if (atom->mPrevNamesMap.TryAdd(prevAtom, NULL, &countPtr))
-		{
-			*countPtr = 1;
-		}
-		else
+		for (int i = 0; i < (int)typeDef->mFullName.mSize - 1; i++)
 		{
-			(*countPtr)++;
+			auto prevAtom = typeDef->mFullName.mParts[i];
+			auto atom = typeDef->mFullName.mParts[i + 1];
+			int* countPtr;
+			if (atom->mPrevNamesMap.TryAdd(prevAtom, NULL, &countPtr))
+			{
+				*countPtr = 1;
+			}
+			else
+			{
+				(*countPtr)++;
+			}
 		}
 	}
 }
@@ -2165,7 +2168,7 @@ void BfSystem::UntrackName(BfTypeDef* typeDef)
 		nameAtom->mAtomUpdateIdx = ++mAtomUpdateIdx;
 	}
 
-	if (!typeDef->mIsCombinedPartial)
+	if ((!typeDef->mIsCombinedPartial) && (!typeDef->IsEmitted()))
 	{
 		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();
 		*newProp = *prop;
-
+		BF_ASSERT(newProp->mDeclaringType != NULL);
 		for (int methodIdx = 0; methodIdx < (int)newProp->mMethods.size(); methodIdx++)
 			newProp->mMethods[methodIdx] = typeDef->mMethods[startMethodIdx + newProp->mMethods[methodIdx]->mIdx];
 		typeDef->mProperties.push_back(newProp);
@@ -3298,7 +3301,7 @@ void BfSystem::CopyTypeDef(BfTypeDef* typeDef, BfTypeDef* fromTypeDef)
 	if (typeDef->mNameEx != NULL)
 		typeDef->mNameEx->mRefCount++;	
 	//typeDef->mNameEx = fromTypeDef->mNameEx;
-	//typeDef->mFullName = fromTypeDef->mFullName;
+	typeDef->mFullName = fromTypeDef->mFullName;
 
 	typeDef->mFullNameEx = fromTypeDef->mFullNameEx;
 	//RefAtomComposite(typeDef->mFullNameEx);