mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-09 03:52:19 +02:00
Better array size fix with missing commas
This commit is contained in:
parent
9332693132
commit
d24f169181
2 changed files with 21 additions and 13 deletions
|
@ -12100,13 +12100,13 @@ void BfExprEvaluator::Visit(BfObjectCreateExpression* objCreateExpr)
|
|||
|
||||
int dimensions = 1;
|
||||
|
||||
bool commaExpected = false;
|
||||
if (arrayTypeRef->mParams.size() != 0)
|
||||
{
|
||||
auto intType = mModule->ResolveTypeDef(mModule->mSystem->mTypeIntPtr);
|
||||
|
||||
for (int argIdx = 0; argIdx < (int)arrayTypeRef->mParams.size(); argIdx++)
|
||||
for (auto arg : arrayTypeRef->mParams)
|
||||
{
|
||||
auto arg = arrayTypeRef->mParams[argIdx];
|
||||
if (auto tokenNode = BfNodeDynCastExact<BfTokenNode>(arg))
|
||||
{
|
||||
if (tokenNode->GetToken() == BfToken_Comma)
|
||||
|
@ -12114,11 +12114,19 @@ void BfExprEvaluator::Visit(BfObjectCreateExpression* objCreateExpr)
|
|||
if (isRawArrayAlloc)
|
||||
{
|
||||
mModule->Fail("Sized arrays cannot be multidimensional.", tokenNode);
|
||||
continue;
|
||||
}
|
||||
dimensions++;
|
||||
|
||||
if (dimensions == 5)
|
||||
{
|
||||
mModule->Fail("Too many array dimensions, consider using a jagged array.", tokenNode);
|
||||
}
|
||||
|
||||
commaExpected = false;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
auto expr = BfNodeDynCast<BfExpression>(arg);
|
||||
if ((isRawArrayAlloc) && (!dimLengthVals.IsEmpty()))
|
||||
{
|
||||
|
@ -12126,15 +12134,6 @@ void BfExprEvaluator::Visit(BfObjectCreateExpression* objCreateExpr)
|
|||
continue;
|
||||
}
|
||||
|
||||
if (argIdx != 0)
|
||||
{
|
||||
dimensions++;
|
||||
if (dimensions == 5)
|
||||
{
|
||||
mModule->Fail("Too many array dimensions, consider using a jagged array.", arg);
|
||||
}
|
||||
}
|
||||
|
||||
dimLengthRefs.Add(expr);
|
||||
|
||||
BfTypedValue dimLength;
|
||||
|
@ -12160,11 +12159,18 @@ void BfExprEvaluator::Visit(BfObjectCreateExpression* objCreateExpr)
|
|||
dimLength = mModule->Cast(expr, dimLength, intType, castFlags);
|
||||
}
|
||||
|
||||
if (commaExpected)
|
||||
{
|
||||
mModule->AssertErrorState();
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!dimLength)
|
||||
{
|
||||
dimLength = mModule->GetDefaultTypedValue(intType);
|
||||
}
|
||||
dimLengthVals.push_back(dimLength.mValue);
|
||||
commaExpected = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3,6 +3,8 @@ namespace Tests
|
|||
{
|
||||
class Arrays
|
||||
{
|
||||
public static float[,] GetArray() => new .[,] ( ( 0, 1, 2, 3), ( 10, 11, 12, 13 ), ( 20, 21, 22, 23 ) );
|
||||
|
||||
struct StructA
|
||||
{
|
||||
public int16 mA = 11;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue