parent
4d99a62d37
commit
967aa22330
|
@ -23,6 +23,7 @@
|
||||||
#include "CBot/CBotInstr/CBotExpression.h"
|
#include "CBot/CBotInstr/CBotExpression.h"
|
||||||
#include "CBot/CBotInstr/CBotListArray.h"
|
#include "CBot/CBotInstr/CBotListArray.h"
|
||||||
#include "CBot/CBotInstr/CBotEmpty.h"
|
#include "CBot/CBotInstr/CBotEmpty.h"
|
||||||
|
#include "CBot/CBotInstr/CBotTwoOpExpr.h"
|
||||||
|
|
||||||
#include "CBot/CBotStack.h"
|
#include "CBot/CBotStack.h"
|
||||||
#include "CBot/CBotCStack.h"
|
#include "CBot/CBotCStack.h"
|
||||||
|
@ -95,7 +96,18 @@ CBotInstr* CBotDefArray::Compile(CBotToken* &p, CBotCStack* pStack, CBotTypResul
|
||||||
|
|
||||||
if (IsOfType(p, ID_ASS)) // with an assignment
|
if (IsOfType(p, ID_ASS)) // with an assignment
|
||||||
{
|
{
|
||||||
inst->m_listass = CBotListArray::Compile(p, pStk, type.GetTypElem());
|
if ((inst->m_listass = CBotTwoOpExpr::Compile(p, pStk)) != nullptr)
|
||||||
|
{
|
||||||
|
if (!pStk->GetTypResult().Compare(type)) // compatible type ?
|
||||||
|
{
|
||||||
|
pStk->SetError(CBotErrBadType1, p->GetStart());
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
inst->m_listass = CBotListArray::Compile(p, pStk, type.GetTypElem());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pStk->IsOk()) return pStack->Return(inst, pStk);
|
if (pStk->IsOk()) return pStack->Return(inst, pStk);
|
||||||
|
|
|
@ -995,3 +995,61 @@ TEST_F(CBotUT, DISABLED_TestNANParam_Issue642)
|
||||||
"}\n"
|
"}\n"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(CBotUT, TestArrayInitialization)
|
||||||
|
{
|
||||||
|
ExecuteTest(
|
||||||
|
"extern void TestArrayInitialization() {\n"
|
||||||
|
" int[] a = {1, 2, 3};\n"
|
||||||
|
" ASSERT(sizeof(a) == 3);\n"
|
||||||
|
" ASSERT(a[0] == 1);\n"
|
||||||
|
" ASSERT(a[1] == 2);\n"
|
||||||
|
" ASSERT(a[2] == 3);\n"
|
||||||
|
"}\n"
|
||||||
|
);
|
||||||
|
|
||||||
|
ExecuteTest(
|
||||||
|
"extern void TestArrayInitializationOutOfRange() {\n"
|
||||||
|
" int a[2] = {1, 2, 3};\n"
|
||||||
|
"}\n",
|
||||||
|
CBotErrOutArray
|
||||||
|
);
|
||||||
|
|
||||||
|
ExecuteTest(
|
||||||
|
"extern void TestArrayInitializationSmallerThanRange() {\n"
|
||||||
|
" int a[4] = {1, 2, 3};\n"
|
||||||
|
" ASSERT(sizeof(a) == 3);\n"
|
||||||
|
" ASSERT(a[0] == 1);\n"
|
||||||
|
" ASSERT(a[1] == 2);\n"
|
||||||
|
" ASSERT(a[2] == 3);\n"
|
||||||
|
" a[3] = 4;\n"
|
||||||
|
" ASSERT(sizeof(a) == 4);\n"
|
||||||
|
" ASSERT(a[3] == 4);\n"
|
||||||
|
"}\n"
|
||||||
|
);
|
||||||
|
|
||||||
|
ExecuteTest(
|
||||||
|
"extern void TestArrayInitializationLimitUnchanged() {\n"
|
||||||
|
" int a[4] = {1, 2, 3};\n"
|
||||||
|
" a[4] = 5;\n"
|
||||||
|
"}\n",
|
||||||
|
CBotErrOutArray
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(CBotUT, TestArrayFunctionReturn)
|
||||||
|
{
|
||||||
|
ExecuteTest(
|
||||||
|
"int[] test() {\n"
|
||||||
|
" int[] a = {1, 2, 3};\n"
|
||||||
|
" return a;"
|
||||||
|
"}\n"
|
||||||
|
"extern void TestArrayFunctionReturn() {\n"
|
||||||
|
" int[] b = test();\n"
|
||||||
|
" ASSERT(sizeof(b) == 3);\n"
|
||||||
|
" ASSERT(b[0] == 1);\n"
|
||||||
|
" ASSERT(b[1] == 2);\n"
|
||||||
|
" ASSERT(b[2] == 3);\n"
|
||||||
|
"}\n"
|
||||||
|
);
|
||||||
|
}
|
Loading…
Reference in New Issue