Fix inline declaration of an array of string
parent
707ef97626
commit
5b3da83715
|
@ -20,6 +20,7 @@
|
||||||
#include "CBot/CBotInstr/CBotDefString.h"
|
#include "CBot/CBotInstr/CBotDefString.h"
|
||||||
|
|
||||||
#include "CBot/CBotInstr/CBotLeftExprVar.h"
|
#include "CBot/CBotInstr/CBotLeftExprVar.h"
|
||||||
|
#include "CBot/CBotInstr/CBotDefArray.h"
|
||||||
#include "CBot/CBotInstr/CBotTwoOpExpr.h"
|
#include "CBot/CBotInstr/CBotTwoOpExpr.h"
|
||||||
|
|
||||||
#include "CBot/CBotStack.h"
|
#include "CBot/CBotStack.h"
|
||||||
|
@ -61,6 +62,7 @@ CBotInstr* CBotDefString::Compile(CBotToken* &p, CBotCStack* pStack, bool cont,
|
||||||
inst->m_expr = nullptr;
|
inst->m_expr = nullptr;
|
||||||
|
|
||||||
CBotToken* vartoken = p;
|
CBotToken* vartoken = p;
|
||||||
|
CBotVar* var = nullptr;
|
||||||
inst->SetToken(vartoken);
|
inst->SetToken(vartoken);
|
||||||
|
|
||||||
if (nullptr != (inst->m_var = CBotLeftExprVar::Compile( p, pStk )))
|
if (nullptr != (inst->m_var = CBotLeftExprVar::Compile( p, pStk )))
|
||||||
|
@ -73,6 +75,19 @@ CBotInstr* CBotDefString::Compile(CBotToken* &p, CBotCStack* pStack, bool cont,
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (IsOfType(p, ID_OPBRK))
|
||||||
|
{
|
||||||
|
delete inst; // type is not CBotDefString
|
||||||
|
p = vartoken; // returns the variable name
|
||||||
|
|
||||||
|
// compiles an array declaration
|
||||||
|
|
||||||
|
CBotInstr* inst2 = CBotDefArray::Compile(p, pStk, CBotTypString);
|
||||||
|
|
||||||
|
inst = static_cast<CBotDefString*>(inst2);
|
||||||
|
goto suite; // no assignment, variable already created
|
||||||
|
}
|
||||||
|
|
||||||
if (IsOfType(p, ID_ASS))
|
if (IsOfType(p, ID_ASS))
|
||||||
{
|
{
|
||||||
pStk->SetStartError(p->GetStart());
|
pStk->SetStartError(p->GetStart());
|
||||||
|
@ -85,20 +100,20 @@ CBotInstr* CBotDefString::Compile(CBotToken* &p, CBotCStack* pStack, bool cont,
|
||||||
{
|
{
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
if (!pStk->GetTypResult().Eq(CBotTypString)) // type compatible ?
|
/* if (!pStk->GetTypResult().Eq(CBotTypString)) // type compatible ?
|
||||||
{
|
{
|
||||||
pStk->SetError(CBotErrBadType1, p->GetStart());
|
pStk->SetError(CBotErrBadType1, p->GetStart());
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
CBotVar* var = CBotVar::Create(*vartoken, CBotTypString);
|
var = CBotVar::Create(*vartoken, CBotTypString);
|
||||||
var->SetInit(inst->m_expr != nullptr ? CBotVar::InitType::DEF : CBotVar::InitType::UNDEF);
|
var->SetInit(inst->m_expr != nullptr ? CBotVar::InitType::DEF : CBotVar::InitType::UNDEF);
|
||||||
var->SetUniqNum(
|
var->SetUniqNum(
|
||||||
(static_cast<CBotLeftExprVar*>(inst->m_var))->m_nIdent = CBotVar::NextUniqNum());
|
(static_cast<CBotLeftExprVar*>(inst->m_var))->m_nIdent = CBotVar::NextUniqNum());
|
||||||
pStack->AddVar(var);
|
pStack->AddVar(var);
|
||||||
|
suite:
|
||||||
if (IsOfType(p, ID_COMMA))
|
if (pStk->IsOk() && IsOfType(p, ID_COMMA))
|
||||||
{
|
{
|
||||||
if (nullptr != ( inst->m_next2b = CBotDefString::Compile(p, pStk, true, noskip)))
|
if (nullptr != ( inst->m_next2b = CBotDefString::Compile(p, pStk, true, noskip)))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue