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

Fixed a sized array initialization

This commit is contained in:
Brian Fiete 2020-04-12 08:37:22 -07:00
parent 5bb3966b47
commit e2a6a122c4
3 changed files with 23 additions and 12 deletions

View file

@ -15446,18 +15446,22 @@ void BfExprEvaluator::InitializedSizedArray(BfSizedArrayType* arrayType, BfToken
if (expr != NULL)
{
bool tryDefer = false;
if ((checkArrayType->IsComposite()) &&
((expr->IsA<BfInvocationExpression>()) || (expr->IsExact<BfTupleExpression>())))
if ((checkArrayType->IsComposite()) &&
((expr->IsA<BfInvocationExpression>()) || (expr->IsExact<BfTupleExpression>())))
{
// We evaluate with a new scope because this expression may create variables that we don't want to be visible to other
// non-deferred evaluations (since the value may actually be a FakeVal)
SetAndRestoreValue<bool> prevIgnoreWrites(mModule->mBfIRBuilder->mIgnoreWrites, true);
elementValue = mModule->CreateValueFromExpression(expr, checkArrayType->mElementType, BfEvalExprFlags_CreateConditionalScope);
deferredValue = !prevIgnoreWrites.mPrevVal && elementValue.mValue.IsFake();
}
else
{
tryDefer = true;
elementValue = mModule->CreateValueFromExpression(expr, checkArrayType->mElementType);
}
SetAndRestoreValue<bool> prevIgnoreWrites(mModule->mBfIRBuilder->mIgnoreWrites, mModule->mBfIRBuilder->mIgnoreWrites || tryDefer);
elementValue = mModule->CreateValueFromExpression(expr, checkArrayType->mElementType);
if (!elementValue)
elementValue = mModule->GetDefaultTypedValue(checkArrayType->mElementType);
deferredValue = !prevIgnoreWrites.mPrevVal && elementValue.mValue.IsFake();
elementValue = mModule->GetDefaultTypedValue(checkArrayType->mElementType);
if ((!elementValue) || (!CheckAllowValue(elementValue, expr)))
elementValue = mModule->GetDefaultTypedValue(checkArrayType->mElementType);