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

Unreified string table reference fix

This commit is contained in:
Brian Fiete 2021-02-09 17:02:00 -08:00
parent e6a918600b
commit a31770ca98
3 changed files with 16 additions and 1 deletions

View file

@ -5106,6 +5106,12 @@ void BfCompiler::MarkStringPool(BfModule* module)
stringPoolEntry.mLastUsedRevision = mRevision;
}
for (int stringId : module->mUnreifiedStringPoolRefs)
{
BfStringPoolEntry& stringPoolEntry = module->mContext->mStringObjectIdMap[stringId];
stringPoolEntry.mLastUsedRevision = mRevision;
}
for (int stringId : module->mImportFileNames)
{
BfStringPoolEntry& stringPoolEntry = module->mContext->mStringObjectIdMap[stringId];

View file

@ -1222,7 +1222,10 @@ void BfModule::StartNewRevision(RebuildKind rebuildKind, bool force)
// Clear this here, not in ClearModuleData, so we preserve those references even after writing out module
if (rebuildKind != BfModule::RebuildKind_None) // Leave string pool refs for when we need to use things like [LinkName("")] methods bofore re-reification
{
mStringPoolRefs.Clear();
mUnreifiedStringPoolRefs.Clear();
}
mDllImportEntries.Clear();
mImportFileNames.Clear();
for (auto& pairVal : mDeferredMethodCallData)
@ -1657,7 +1660,10 @@ String* BfModule::GetStringPoolString(BfIRValue constantStr, BfIRConstHolder * c
BfIRValue BfModule::GetStringCharPtr(int stringId, bool force)
{
if ((mBfIRBuilder->mIgnoreWrites) && (!force))
{
mUnreifiedStringPoolRefs.Add(stringId);
return mBfIRBuilder->CreateConst(BfTypeCode_StringId, stringId);
}
BfIRValue* irValue = NULL;
if (!mStringCharPtrPool.TryAdd(stringId, NULL, &irValue))
@ -1711,6 +1717,7 @@ BfIRValue BfModule::GetStringObjectValue(const StringImpl& str, bool define, boo
if ((mBfIRBuilder->mIgnoreWrites) && (!force))
{
mUnreifiedStringPoolRefs.Add(strId);
return mBfIRBuilder->CreateConst(BfTypeCode_StringId, strId);
}
@ -10658,6 +10665,7 @@ void BfModule::ClearConstData()
mStringObjectPool.Clear();
mStringCharPtrPool.Clear();
mStringPoolRefs.Clear();
mUnreifiedStringPoolRefs.Clear();
}
BfTypedValue BfModule::GetTypedValueFromConstant(BfConstant* constant, BfIRConstHolder* constHolder, BfType* wantType)

View file

@ -1435,6 +1435,7 @@ public:
Dictionary<int, BfIRValue> mStringObjectPool;
Dictionary<int, BfIRValue> mStringCharPtrPool;
Array<int> mStringPoolRefs;
HashSet<int> mUnreifiedStringPoolRefs;
Array<BfIRBuilder*> mPrevIRBuilders; // Before extensions
BfIRBuilder* mBfIRBuilder;