1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 03:28:20 +02:00

Improved unknown-sized array in BfInvocationExpression

This commit is contained in:
Brian Fiete 2025-05-28 06:23:22 +02:00
parent eb4d2a1757
commit 9e71acc003

View file

@ -19704,16 +19704,23 @@ void BfExprEvaluator::DoInvocation(BfInvocationExpression* invocationExpr)
typeState.mArrayInitializerSize = (int)invocationExpr->mArguments.size();
SetAndRestoreValue<BfTypeState*> prevTypeState(mModule->mContext->mCurTypeState, &typeState);
BfType* undefSizeParam = NULL;
if (indexerExpr->mArguments.size() != 0)
{
BfConstResolver constResolver(mModule);
auto arg = indexerExpr->mArguments[0];
constResolver.mExpectingType = mModule->GetPrimitiveType(BfTypeCode_IntPtr);
constResolver.mBfEvalExprFlags = (BfEvalExprFlags)(constResolver.mBfEvalExprFlags | BfEvalExprFlags_AllowGenericConstValue);
if (arg != NULL)
constResolver.Resolve(arg, NULL, BfConstResolveFlag_ArrayInitSize);
if (constResolver.mResult.mValue.IsConst())
if (constResolver.mResult.mKind == BfTypedValueKind_GenericConstValue)
{
undefSizeParam = constResolver.mResult.mType;
}
else if (constResolver.mResult.mValue.IsConst())
{
auto constant = mModule->mBfIRBuilder->GetConstant(constResolver.mResult.mValue);
@ -19728,6 +19735,9 @@ void BfExprEvaluator::DoInvocation(BfInvocationExpression* invocationExpr)
else
arrSize = invocationExpr->mArguments.size();
if (undefSizeParam != NULL)
curType = mModule->CreateUnknownSizedArrayType(curType, undefSizeParam);
else
curType = mModule->CreateSizedArrayType(curType, arrSize);
}