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

Comptime math and bug fixes

This commit is contained in:
Brian Fiete 2021-01-26 06:33:23 -08:00
parent 621fe99882
commit 61f54a4f88
14 changed files with 684 additions and 122 deletions

View file

@ -9322,9 +9322,11 @@ bool BfModule::IsTargetingBeefBackend()
}
bool BfModule::WantsLifetimes()
{
{
if (mProject == NULL)
return false;
if (mBfIRBuilder->mIgnoreWrites)
return false;
return GetModuleOptions().mOptLevel == BfOptLevel_OgPlus;
}
@ -9512,16 +9514,25 @@ void BfModule::EmitDynamicCastCheck(BfTypedValue typedVal, BfType* type, bool al
EmitDynamicCastCheck(typedVal, type, endBlock, failBlock, allowNull ? true : false);
AddBasicBlock(failBlock);
SizedArray<BfIRValue, 8> llvmArgs;
auto bitAddr = mBfIRBuilder->CreateBitCast(typedVal.mValue, mBfIRBuilder->MapType(mContext->mBfObjectType));
llvmArgs.push_back(bitAddr);
llvmArgs.push_back(GetConstValue32(wantTypeId));
auto objDynCheck = GetInternalMethod("ObjectDynCheckFailed");
BF_ASSERT(objDynCheck);
if (objDynCheck)
if (mIsComptimeModule)
{
auto callInst = mBfIRBuilder->CreateCall(objDynCheck.mFunc, llvmArgs);
mBfIRBuilder->Comptime_Error(CeErrorKind_ObjectDynCheckFailed);
}
else
{
SizedArray<BfIRValue, 8> llvmArgs;
auto bitAddr = mBfIRBuilder->CreateBitCast(typedVal.mValue, mBfIRBuilder->MapType(mContext->mBfObjectType));
llvmArgs.push_back(bitAddr);
llvmArgs.push_back(GetConstValue32(wantTypeId));
auto objDynCheck = GetInternalMethod("ObjectDynCheckFailed");
BF_ASSERT(objDynCheck);
if (objDynCheck)
{
auto callInst = mBfIRBuilder->CreateCall(objDynCheck.mFunc, llvmArgs);
}
}
mBfIRBuilder->CreateBr(endBlock);
AddBasicBlock(endBlock);