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

Fixes to SetDeleted

This commit is contained in:
Brian Fiete 2020-05-18 08:30:42 -07:00
parent 8745b40828
commit 693334bdc8
5 changed files with 26 additions and 8 deletions

View file

@ -562,7 +562,8 @@ void BfModule::EmitDeferredCall(BfModuleMethodInstance moduleMethodInstance, Siz
constant = mBfIRBuilder->GetConstant(llvmArgs[2]);
if (constant != NULL)
typeAlign = constant->mInt64;
auto arraySize = llvmArgs[3];
if (llvmArgs.size() >= 4)
arraySize = llvmArgs[3];
intptr allocSize = typeSize;
if (arraySize)
@ -641,6 +642,12 @@ void BfModule::EmitDeferredCall(BfModuleMethodInstance moduleMethodInstance, Siz
mBfIRBuilder->AddBlock(ddDoneBlock);
mBfIRBuilder->SetInsertPoint(ddDoneBlock);
if ((flags & BfDeferredBlockFlag_MoveNewBlocksToEnd) != 0)
{
mCurMethodState->mCurScope->mAtEndBlocks.push_back(ddSize1Block);
mCurMethodState->mCurScope->mAtEndBlocks.push_back(ddDoneBlock);
}
}
else
{
@ -682,6 +689,15 @@ void BfModule::EmitDeferredCall(BfModuleMethodInstance moduleMethodInstance, Siz
mBfIRBuilder->AddBlock(ddDoneBlock);
mBfIRBuilder->SetInsertPoint(ddDoneBlock);
if ((flags & BfDeferredBlockFlag_MoveNewBlocksToEnd) != 0)
{
mCurMethodState->mCurScope->mAtEndBlocks.push_back(ddSizePtrBlock);
mCurMethodState->mCurScope->mAtEndBlocks.push_back(ddCheck1Block);
if (mayBeZero)
mCurMethodState->mCurScope->mAtEndBlocks.push_back(ddSize1Block);
mCurMethodState->mCurScope->mAtEndBlocks.push_back(ddDoneBlock);
}
}
}
else
@ -764,7 +780,7 @@ void BfModule::EmitDeferredCall(BfModuleMethodInstance moduleMethodInstance, Siz
}
}
void BfModule::EmitDeferredCall(BfDeferredCallEntry& deferredCallEntry)
void BfModule::EmitDeferredCall(BfDeferredCallEntry& deferredCallEntry, bool moveBlocks)
{
if ((mCompiler->mIsResolveOnly) && (deferredCallEntry.mHandlerCount > 0))
{
@ -833,6 +849,8 @@ void BfModule::EmitDeferredCall(BfDeferredCallEntry& deferredCallEntry)
flags = (BfDeferredBlockFlags)(flags | BfDeferredBlockFlag_BypassVirtual);
if (deferredCallEntry.mDoNullCheck)
flags = (BfDeferredBlockFlags)(flags | BfDeferredBlockFlag_DoNullChecks | BfDeferredBlockFlag_SkipObjectAccessCheck | BfDeferredBlockFlag_MoveNewBlocksToEnd);
if (moveBlocks)
flags = (BfDeferredBlockFlags)(flags | BfDeferredBlockFlag_MoveNewBlocksToEnd);
EmitDeferredCall(deferredCallEntry.mModuleMethodInstance, args, flags);
}
@ -996,7 +1014,7 @@ void BfModule::EmitDeferredCallProcessor(SLIList<BfDeferredCallEntry*>& callEntr
}
auto prevHead = callEntries.mHead;
EmitDeferredCall(*deferredCallEntry);
EmitDeferredCall(*deferredCallEntry, moveBlocks);
ValueScopeEnd(valueScopeStart);
mBfIRBuilder->CreateBr(condBB);