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

Improved emit marker when specialized type has no emission

This commit is contained in:
Brian Fiete 2022-04-27 08:00:21 -07:00
parent 5083f5d64e
commit e852ba49bb

View file

@ -9779,32 +9779,29 @@ BF_EXPORT const char* BF_CALLTYPE BfCompiler_GetCollapseRegions(BfCompiler* bfCo
auto typeInst = type->ToTypeInstance(); auto typeInst = type->ToTypeInstance();
if (typeInst == NULL) if (typeInst == NULL)
continue; continue;
if (typeHashSet.Contains(typeInst->mTypeDef->GetLatest())) if (typeHashSet.Contains(typeInst->mTypeDef->GetLatest()))
{ {
if (typeInst->IsSpecializedType()) if (typeInst->mCeTypeInfo == NULL)
continue;
for (auto& kv : typeInst->mCeTypeInfo->mEmitSourceMap)
{ {
if (typeInst->mCeTypeInfo == NULL) int partialIdx = (int)(kv.mKey >> 32);
continue; int charIdx = (int)(kv.mKey & 0xFFFFFFFF);
for (auto& kv : typeInst->mCeTypeInfo->mEmitSourceMap) auto typeDef = typeInst->mTypeDef;
{ if (partialIdx > 0)
int partialIdx = (int)(kv.mKey >> 32); typeDef = typeDef->mPartials[partialIdx];
int charIdx = (int)(kv.mKey & 0xFFFFFFFF);
auto typeDef = typeInst->mTypeDef;
if (partialIdx > 0)
typeDef = typeDef->mPartials[partialIdx];
auto emitParser = typeInst->mTypeDef->GetLastSource()->ToParser(); auto emitParser = typeInst->mTypeDef->GetLastSource()->ToParser();
Dictionary<int, _EmitSource>* map = NULL; Dictionary<int, _EmitSource>* map = NULL;
emitLocMap.TryAdd(typeDef->GetLatest(), NULL, &map); emitLocMap.TryAdd(typeDef->GetLatest(), NULL, &map);
_EmitSource emitSource; _EmitSource emitSource;
emitSource.mEmitParser = emitParser; emitSource.mEmitParser = emitParser;
emitSource.mIsPrimary = false; emitSource.mIsPrimary = false;
(*map)[charIdx] = emitSource; (*map)[charIdx] = emitSource;
}
} }
} }
} }
@ -9820,7 +9817,7 @@ BF_EXPORT const char* BF_CALLTYPE BfCompiler_GetCollapseRegions(BfCompiler* bfCo
} }
auto _GetTypeEmbedId = [&](BfTypeInstance* typeInst, BfParser* emitParser) auto _GetTypeEmbedId = [&](BfTypeInstance* typeInst, BfParser* emitParser)
{ {
int* keyPtr = NULL; int* keyPtr = NULL;
int* valuePtr = NULL; int* valuePtr = NULL;
if (foundTypeIds.TryAdd(typeInst->mTypeId, &keyPtr, &valuePtr)) if (foundTypeIds.TryAdd(typeInst->mTypeId, &keyPtr, &valuePtr))
@ -9829,11 +9826,11 @@ BF_EXPORT const char* BF_CALLTYPE BfCompiler_GetCollapseRegions(BfCompiler* bfCo
outString += "+"; outString += "+";
if (emitParser == NULL) if (emitParser == NULL)
{ {
String typeName; String typeName;
outString += typeInst->mTypeDef->mProject->mName; outString += typeInst->mTypeDef->mProject->mName;
outString += ":"; outString += ":";
outString += bfCompiler->mContext->mScratchModule->TypeToString(typeInst, BfTypeNameFlags_None); outString += bfCompiler->mContext->mScratchModule->TypeToString(typeInst, BfTypeNameFlags_None);
} }
else else
{ {