mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 11:38:21 +02:00
Fixed conditional var initializer with valueless nullable
This commit is contained in:
parent
d778187e34
commit
805d312c98
2 changed files with 14 additions and 2 deletions
|
@ -1740,6 +1740,14 @@ void BeIRCodeGen::HandleNextCmd()
|
|||
CMD_PARAM(int, idx);
|
||||
|
||||
BF_ASSERT(val->GetType()->IsComposite());
|
||||
if (val->GetType()->mTypeCode == BeTypeCode_Struct)
|
||||
{
|
||||
auto structType = (BeStructType*)val->GetType();
|
||||
if (idx >= structType->mMembers.mSize)
|
||||
{
|
||||
FatalError("ExtractValue OOB");
|
||||
}
|
||||
}
|
||||
|
||||
auto extractValueInst = mBeModule->AllocInst<BeExtractValueInst>();
|
||||
extractValueInst->mAggVal = val;
|
||||
|
|
|
@ -1585,11 +1585,15 @@ BfLocalVariable* BfModule::HandleVariableDeclaration(BfVariableDeclaration* varD
|
|||
{
|
||||
if (initValue.mType->IsNullable())
|
||||
{
|
||||
auto nullableElementType = initValue.mType->GetUnderlyingType();
|
||||
auto boolType = GetPrimitiveType(BfTypeCode_Boolean);
|
||||
initValue = LoadValue(initValue);
|
||||
exprEvaluator->mResult = BfTypedValue(mBfIRBuilder->CreateExtractValue(initValue.mValue, 2), boolType);
|
||||
exprEvaluator->mResult = BfTypedValue(mBfIRBuilder->CreateExtractValue(initValue.mValue, nullableElementType->IsValuelessType() ? 1 : 2), boolType);
|
||||
handledExprBoolResult = true;
|
||||
initValue = BfTypedValue(mBfIRBuilder->CreateExtractValue(initValue.mValue, 1), initValue.mType->GetUnderlyingType());
|
||||
if (!nullableElementType->IsValuelessType())
|
||||
initValue = BfTypedValue(mBfIRBuilder->CreateExtractValue(initValue.mValue, 1), initValue.mType->GetUnderlyingType());
|
||||
else
|
||||
initValue = BfTypedValue(mBfIRBuilder->GetFakeVal(), nullableElementType);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue