[colobot] 121/377: Moving CBotInstr class in its own header and source files.
Didier Raboud
odyx at moszumanska.debian.org
Wed Mar 30 13:34:05 UTC 2016
This is an automated email from the git hooks/post-receive script.
odyx pushed a commit to branch debian/master
in repository colobot.
commit ef4e2f08a36d5eb5e9ece4b03a758b133e27ae8b
Author: Grunaka <dev at romainbreton.fr>
Date: Mon Nov 16 22:00:01 2015 +0100
Moving CBotInstr class in its own header and source files.
---
src/CBot/CBot.cpp | 336 -------------------------
src/CBot/CBot.h | 90 -------
src/CBot/CBotDefines.h | 2 +
src/CBot/CBotInstr/CBotBlock.h | 2 +
src/CBot/CBotInstr/CBotBoolExpr.h | 2 +
src/CBot/CBotInstr/CBotBoolean.h | 2 +
src/CBot/CBotInstr/CBotBreak.h | 2 +
src/CBot/CBotInstr/CBotCase.h | 2 +
src/CBot/CBotInstr/CBotCatch.h | 2 +
src/CBot/CBotInstr/CBotClassInst.h | 2 +
src/CBot/CBotInstr/CBotCondition.h | 2 +
src/CBot/CBotInstr/CBotDo.h | 2 +
src/CBot/CBotInstr/CBotEmpty.h | 2 +
src/CBot/CBotInstr/CBotExprAlpha.h | 2 +
src/CBot/CBotInstr/CBotExprBool.h | 2 +
src/CBot/CBotInstr/CBotExprNan.h | 2 +
src/CBot/CBotInstr/CBotExprNull.h | 2 +
src/CBot/CBotInstr/CBotExprNum.h | 2 +
src/CBot/CBotInstr/CBotExprUnaire.h | 2 +
src/CBot/CBotInstr/CBotExprVar.h | 2 +
src/CBot/CBotInstr/CBotExpression.h | 3 +
src/CBot/CBotInstr/CBotFieldExpr.h | 2 +
src/CBot/CBotInstr/CBotFloat.h | 2 +
src/CBot/CBotInstr/CBotFor.h | 2 +
src/CBot/CBotInstr/CBotFunction.h | 2 +
src/CBot/CBotInstr/CBotIString.h | 2 +
src/CBot/CBotInstr/CBotIf.h | 2 +
src/CBot/CBotInstr/CBotIndexExpr.h | 2 +
src/CBot/CBotInstr/CBotInstArray.h | 2 +
src/CBot/{CBot.cpp => CBotInstr/CBotInstr.cpp} | 306 +++-------------------
src/CBot/CBotInstr/CBotInstr.h | 266 ++++++++++++++++++++
src/CBot/CBotInstr/CBotInstrCall.h | 2 +
src/CBot/CBotInstr/CBotInstrMethode.h | 2 +
src/CBot/CBotInstr/CBotInt.h | 2 +
src/CBot/CBotInstr/CBotLeftExpr.h | 2 +
src/CBot/CBotInstr/CBotLeftExprVar.h | 2 +
src/CBot/CBotInstr/CBotListArray.h | 2 +
src/CBot/CBotInstr/CBotListExpression.h | 2 +
src/CBot/CBotInstr/CBotListInstr.h | 2 +
src/CBot/CBotInstr/CBotLogicExpr.h | 2 +
src/CBot/CBotInstr/CBotNew.h | 2 +
src/CBot/CBotInstr/CBotParExpr.h | 2 +-
src/CBot/CBotInstr/CBotPostIncExpr.h | 2 +
src/CBot/CBotInstr/CBotPreIncExpr.h | 2 +
src/CBot/CBotInstr/CBotReturn.h | 2 +
src/CBot/CBotInstr/CBotSwitch.h | 2 +
src/CBot/CBotInstr/CBotThrow.h | 2 +
src/CBot/CBotInstr/CBotTry.h | 2 +
src/CBot/CBotInstr/CBotTwoOpExpr.h | 2 +
src/CBot/CBotInstr/CBotWhile.h | 2 +
src/CBot/CBotVar/CBotVarClass.cpp | 4 +-
src/CBot/CMakeLists.txt | 1 +
52 files changed, 401 insertions(+), 695 deletions(-)
diff --git a/src/CBot/CBot.cpp b/src/CBot/CBot.cpp
index 1c8b437..1822df7 100644
--- a/src/CBot/CBot.cpp
+++ b/src/CBot/CBot.cpp
@@ -83,342 +83,6 @@
// Global include
#include <cassert>
-
-CBotInstr::CBotInstr()
-{
- name = "CBotInstr";
- m_next = nullptr;
- m_next2b = nullptr;
- m_next3 = nullptr;
- m_next3b = nullptr;
-}
-
-CBotInstr::~CBotInstr()
-{
- delete m_next;
- delete m_next2b;
- delete m_next3;
- delete m_next3b;
-}
-
-// counter of nested loops,
-// to determine the break and continue valid
-// list of labels used
-
-
-int CBotInstr::m_LoopLvl = 0;
-CBotStringArray CBotInstr::m_labelLvl = CBotStringArray();
-
-// adds a level with a label
-void CBotInstr::IncLvl(CBotString& label)
-{
- m_labelLvl.SetSize(m_LoopLvl+1);
- m_labelLvl[m_LoopLvl] = label;
- m_LoopLvl++;
-}
-
-// adds a level (switch statement)
-void CBotInstr::IncLvl()
-{
- m_labelLvl.SetSize(m_LoopLvl+1);
- m_labelLvl[m_LoopLvl] = "#SWITCH";
- m_LoopLvl++;
-}
-
-// free a level
-void CBotInstr::DecLvl()
-{
- m_LoopLvl--;
- m_labelLvl[m_LoopLvl].Empty();
-}
-
-// control validity of break and continue
-bool CBotInstr::ChkLvl(const CBotString& label, int type)
-{
- int i = m_LoopLvl;
- while (--i>=0)
- {
- if ( type == ID_CONTINUE && m_labelLvl[i] == "#SWITCH") continue;
- if (label.IsEmpty()) return true;
- if (m_labelLvl[i] == label) return true;
- }
- return false;
-}
-
-bool CBotInstr::IsOfClass(CBotString n)
-{
- return name == n;
-}
-
-
-////////////////////////////////////////////////////////////////////////////
-// database management class CBotInstr
-
-// set the token corresponding to the instruction
-
-void CBotInstr::SetToken(CBotToken* p)
-{
- m_token = *p;
-}
-
-// return the type of the token assicated with the instruction
-
-int CBotInstr::GetTokenType()
-{
- return m_token.GetType();
-}
-
-// return associated token
-
-CBotToken* CBotInstr::GetToken()
-{
- return &m_token;
-}
-
-// adds the statement following the other
-
-void CBotInstr::AddNext(CBotInstr* n)
-{
- CBotInstr* p = this;
- while (p->m_next != nullptr) p = p->m_next;
- p->m_next = n;
-}
-
-void CBotInstr::AddNext3(CBotInstr* n)
-{
- CBotInstr* p = this;
- while (p->m_next3 != nullptr) p = p->m_next3;
- p->m_next3 = n;
-}
-
-void CBotInstr::AddNext3b(CBotInstr* n)
-{
- CBotInstr* p = this;
- while (p->m_next3b != nullptr) p = p->m_next3b;
- p->m_next3b = n;
-}
-
-// returns next statement
-
-CBotInstr* CBotInstr::GetNext()
-{
- return m_next;
-}
-
-CBotInstr* CBotInstr::GetNext3()
-{
- return m_next3;
-}
-
-CBotInstr* CBotInstr::GetNext3b()
-{
- return m_next3b;
-}
-
-///////////////////////////////////////////////////////////////////////////
-// compile an instruction which can be
-// while, do, try, throw, if, for, switch, break, continue, return
-// int, float, boolean, string,
-// declaration of an instance of a class
-// arbitrary expression
-
-
-CBotInstr* CBotInstr::Compile(CBotToken* &p, CBotCStack* pStack)
-{
- CBotToken* pp = p;
-
- if (p == nullptr) return nullptr;
-
- int type = p->GetType(); // what is the next token
-
- // is it a lable?
- if (IsOfType(pp, TokenTypVar) &&
- IsOfType(pp, ID_DOTS))
- {
- type = pp->GetType();
- // these instructions accept only lable
- if (!IsOfTypeList(pp, ID_WHILE, ID_FOR, ID_DO, 0))
- {
- pStack->SetError(TX_LABEL, pp->GetStart());
- return nullptr;
- }
- }
-
- // call routine corresponding to the compilation token found
- switch (type)
- {
- case ID_WHILE:
- return CBotWhile::Compile(p, pStack);
-
- case ID_FOR:
- return CBotFor::Compile(p, pStack);
-
- case ID_DO:
- return CBotDo::Compile(p, pStack);
-
- case ID_BREAK:
- case ID_CONTINUE:
- return CBotBreak::Compile(p, pStack);
-
- case ID_SWITCH:
- return CBotSwitch::Compile(p, pStack);
-
- case ID_TRY:
- return CBotTry::Compile(p, pStack);
-
- case ID_THROW:
- return CBotThrow::Compile(p, pStack);
-
- case ID_INT:
- return CBotInt::Compile(p, pStack);
-
- case ID_FLOAT:
- return CBotFloat::Compile(p, pStack);
-
- case ID_STRING:
- return CBotIString::Compile(p, pStack);
-
- case ID_BOOLEAN:
- case ID_BOOL:
- return CBotBoolean::Compile(p, pStack);
-
- case ID_IF:
- return CBotIf::Compile(p, pStack);
-
- case ID_RETURN:
- return CBotReturn::Compile(p, pStack);
-
- case ID_ELSE:
- pStack->SetStartError(p->GetStart());
- pStack->SetError(TX_ELSEWITHOUTIF, p->GetEnd());
- return nullptr;
-
- case ID_CASE:
- pStack->SetStartError(p->GetStart());
- pStack->SetError(TX_OUTCASE, p->GetEnd());
- return nullptr;
- }
-
- pStack->SetStartError(p->GetStart());
-
- // should not be a reserved word DefineNum
- if (p->GetType() == TokenTypDef)
- {
- pStack->SetError(TX_RESERVED, p);
- return nullptr;
- }
-
- // this might be an instance of class definnition
- CBotToken* ppp = p;
- if (IsOfType(ppp, TokenTypVar))
- {
- if (CBotClass::Find(p) != nullptr)
- {
- // yes, compiles the declaration of the instance
- return CBotClassInst::Compile(p, pStack);
- }
- }
-
- // this can be an arythmetic instruction
- CBotInstr* inst = CBotExpression::Compile(p, pStack);
- if (IsOfType(p, ID_SEP))
- {
- return inst;
- }
- pStack->SetError(TX_ENDOF, p->GetStart());
- delete inst;
- return nullptr;
-}
-
-bool CBotInstr::Execute(CBotStack* &pj)
-{
- CBotString ClassManquante = name;
- assert(0); // should never go through this routine
- // but use the routines of the subclasses
- return false;
-}
-
-bool CBotInstr::Execute(CBotStack* &pj, CBotVar* pVar)
-{
- if (!Execute(pj)) return false;
- pVar->SetVal(pj->GetVar());
- return true;
-}
-
-void CBotInstr::RestoreState(CBotStack* &pj, bool bMain)
-{
- CBotString ClassManquante = name;
- assert(0); // should never go through this routine
- // but use the routines of the subclasses
-}
-
-
-bool CBotInstr::ExecuteVar(CBotVar* &pVar, CBotCStack* &pile)
-{
- assert(0); // dad do not know, see the girls
- return false;
-}
-
-bool CBotInstr::ExecuteVar(CBotVar* &pVar, CBotStack* &pile, CBotToken* prevToken, bool bStep, bool bExtend)
-{
- assert(0); // dad do not know, see the girls
- return false;
-}
-
-void CBotInstr::RestoreStateVar(CBotStack* &pile, bool bMain)
-{
- assert(0); // dad do not know, see the girls
-}
-
-// this routine is defined only for the subclass CBotCase
-// this allows to make the call on all instructions CompCase
-// to see if it's a case to the desired value.
-
-bool CBotInstr::CompCase(CBotStack* &pj, int val)
-{
- return false;
-}
-
-CBotInstr* CBotInstr::CompileArray(CBotToken* &p, CBotCStack* pStack, CBotTypResult type, bool first)
-{
- if (IsOfType(p, ID_OPBRK))
- {
- if (!IsOfType(p, ID_CLBRK))
- {
- pStack->SetError(TX_CLBRK, p->GetStart());
- return nullptr;
- }
-
- CBotInstr* inst = CompileArray(p, pStack, CBotTypResult(CBotTypArrayPointer, type), false);
- if (inst != nullptr || !pStack->IsOk()) return inst;
- }
-
- // compiles an array declaration
- if (first) return nullptr ;
-
- CBotInstr* inst = CBotInstArray::Compile(p, pStack, type);
- if (inst == nullptr) return nullptr;
-
- if (IsOfType(p, ID_COMMA)) // several definitions
- {
- if (nullptr != ( inst->m_next2b = CBotInstArray::CompileArray(p, pStack, type, false))) // compiles next one
- {
- return inst;
- }
- delete inst;
- return nullptr;
- }
-
- if (IsOfType(p, ID_SEP)) // end of instruction
- {
- return inst;
- }
-
- delete inst;
- pStack->SetError(TX_ENDOF, p->GetStart());
- return nullptr;
-}
-
//////////////////////////////////////////////////////////////////////////////////////////
// compile a list of parameters
diff --git a/src/CBot/CBot.h b/src/CBot/CBot.h
index e42d185..71c2279 100644
--- a/src/CBot/CBot.h
+++ b/src/CBot/CBot.h
@@ -54,96 +54,6 @@ class CBotDefParam; // paramerer list of a function
extern bool SaveVar(FILE* pf, CBotVar* pVar);
-
-/////////////////////////////////////////////////////////////////////
-// class defining an instruction
-class CBotInstr
-{
-private:
- static
- CBotStringArray
- m_labelLvl;
-protected:
- CBotToken m_token; // keeps the token
- CBotString name; // debug
- CBotInstr* m_next; // linked command
- CBotInstr* m_next2b; // second list definition chain
- CBotInstr* m_next3; // third list for indices and fields
- CBotInstr* m_next3b; // necessary for reporting tables
-/*
- for example, the following program
- int x[]; x[1] = 4;
- int y[x[1]][10], z;
- is generated
- CBotInstrArray
- m_next3b-> CBotEmpty
- m_next->
- CBotExpression ....
- m_next->
- CBotInstrArray
- m_next3b-> CBotExpression ('x') ( m_next3-> CBotIndexExpr ('1') )
- m_next3b-> CBotExpression ('10')
- m_next2-> 'z'
- m_next->...
-
-*/
-
- static
- int m_LoopLvl;
- friend class CBotClassInst;
- friend class CBotInt;
- friend class CBotListArray;
-
-public:
- CBotInstr();
- virtual
- ~CBotInstr();
-
- static
- CBotInstr* Compile(CBotToken* &p, CBotCStack* pStack);
- static
- CBotInstr* CompileArray(CBotToken* &p, CBotCStack* pStack, CBotTypResult type, bool first = true);
-
- virtual
- bool Execute(CBotStack* &pj);
- virtual
- bool Execute(CBotStack* &pj, CBotVar* pVar);
- virtual
- void RestoreState(CBotStack* &pj, bool bMain);
-
- virtual
- bool ExecuteVar(CBotVar* &pVar, CBotCStack* &pile);
- virtual
- bool ExecuteVar(CBotVar* &pVar, CBotStack* &pile, CBotToken* prevToken, bool bStep, bool bExtend);
- virtual
- void RestoreStateVar(CBotStack* &pile, bool bMain);
-
- virtual
- bool CompCase(CBotStack* &pj, int val);
-
- void SetToken(CBotToken* p);
- int GetTokenType();
- CBotToken* GetToken();
-
- void AddNext(CBotInstr* n);
- CBotInstr* GetNext();
- void AddNext3(CBotInstr* n);
- CBotInstr* GetNext3();
- void AddNext3b(CBotInstr* n);
- CBotInstr* GetNext3b();
-
- static
- void IncLvl(CBotString& label);
- static
- void IncLvl();
- static
- void DecLvl();
- static
- bool ChkLvl(const CBotString& label, int type);
-
- bool IsOfClass(CBotString name);
-};
-
#define MAX(a,b) ((a>b) ? a : b)
extern CBotInstr* CompileParams(CBotToken* &p, CBotCStack* pStack, CBotVar** ppVars);
diff --git a/src/CBot/CBotDefines.h b/src/CBot/CBotDefines.h
index d09e3ca..ae72dbb 100644
--- a/src/CBot/CBotDefines.h
+++ b/src/CBot/CBotDefines.h
@@ -21,6 +21,8 @@
// Modules inlcude
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotBlock.h b/src/CBot/CBotInstr/CBotBlock.h
index f413e75..6c7c633 100644
--- a/src/CBot/CBotInstr/CBotBlock.h
+++ b/src/CBot/CBotInstr/CBotBlock.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotBoolExpr.h b/src/CBot/CBotInstr/CBotBoolExpr.h
index df7354e..e50d8a6 100644
--- a/src/CBot/CBotInstr/CBotBoolExpr.h
+++ b/src/CBot/CBotInstr/CBotBoolExpr.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotBoolean.h b/src/CBot/CBotInstr/CBotBoolean.h
index 5767420..217daad 100644
--- a/src/CBot/CBotInstr/CBotBoolean.h
+++ b/src/CBot/CBotInstr/CBotBoolean.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotBreak.h b/src/CBot/CBotInstr/CBotBreak.h
index 0ad3940..ae35a70 100644
--- a/src/CBot/CBotInstr/CBotBreak.h
+++ b/src/CBot/CBotInstr/CBotBreak.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotCase.h b/src/CBot/CBotInstr/CBotCase.h
index 9ba1b86..e504333 100644
--- a/src/CBot/CBotInstr/CBotCase.h
+++ b/src/CBot/CBotInstr/CBotCase.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotCatch.h b/src/CBot/CBotInstr/CBotCatch.h
index 9756c8b..d4450ec 100644
--- a/src/CBot/CBotInstr/CBotCatch.h
+++ b/src/CBot/CBotInstr/CBotCatch.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotClassInst.h b/src/CBot/CBotInstr/CBotClassInst.h
index 370a46c..3ee791f 100644
--- a/src/CBot/CBotInstr/CBotClassInst.h
+++ b/src/CBot/CBotInstr/CBotClassInst.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotCondition.h b/src/CBot/CBotInstr/CBotCondition.h
index 08996db..3958cad 100644
--- a/src/CBot/CBotInstr/CBotCondition.h
+++ b/src/CBot/CBotInstr/CBotCondition.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotDo.h b/src/CBot/CBotInstr/CBotDo.h
index 670a070..11fe40f 100644
--- a/src/CBot/CBotInstr/CBotDo.h
+++ b/src/CBot/CBotInstr/CBotDo.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotEmpty.h b/src/CBot/CBotInstr/CBotEmpty.h
index 04f9faf..dc50b49 100644
--- a/src/CBot/CBotInstr/CBotEmpty.h
+++ b/src/CBot/CBotInstr/CBotEmpty.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotExprAlpha.h b/src/CBot/CBotInstr/CBotExprAlpha.h
index 3f82060..3cadc32 100644
--- a/src/CBot/CBotInstr/CBotExprAlpha.h
+++ b/src/CBot/CBotInstr/CBotExprAlpha.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotExprBool.h b/src/CBot/CBotInstr/CBotExprBool.h
index a2609e2..90f53da 100644
--- a/src/CBot/CBotInstr/CBotExprBool.h
+++ b/src/CBot/CBotInstr/CBotExprBool.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotExprNan.h b/src/CBot/CBotInstr/CBotExprNan.h
index 0d6bbf6..1f0d58d 100644
--- a/src/CBot/CBotInstr/CBotExprNan.h
+++ b/src/CBot/CBotInstr/CBotExprNan.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotExprNull.h b/src/CBot/CBotInstr/CBotExprNull.h
index 187cb26..90b3f89 100644
--- a/src/CBot/CBotInstr/CBotExprNull.h
+++ b/src/CBot/CBotInstr/CBotExprNull.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotExprNum.h b/src/CBot/CBotInstr/CBotExprNum.h
index dc21331..07fca7e 100644
--- a/src/CBot/CBotInstr/CBotExprNum.h
+++ b/src/CBot/CBotInstr/CBotExprNum.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotExprUnaire.h b/src/CBot/CBotInstr/CBotExprUnaire.h
index 25d2125..75b30a9 100644
--- a/src/CBot/CBotInstr/CBotExprUnaire.h
+++ b/src/CBot/CBotInstr/CBotExprUnaire.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotExprVar.h b/src/CBot/CBotInstr/CBotExprVar.h
index a453565..638cf8f 100644
--- a/src/CBot/CBotInstr/CBotExprVar.h
+++ b/src/CBot/CBotInstr/CBotExprVar.h
@@ -24,6 +24,8 @@
#include "CBotDefines.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotExpression.h b/src/CBot/CBotInstr/CBotExpression.h
index d25fd39..ddf2e25 100644
--- a/src/CBot/CBotInstr/CBotExpression.h
+++ b/src/CBot/CBotInstr/CBotExpression.h
@@ -21,8 +21,11 @@
// Modules inlcude
#include "CBot.h"
+
#include "CBotLeftExpr.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotFieldExpr.h b/src/CBot/CBotInstr/CBotFieldExpr.h
index 13f9fc3..41e828b 100644
--- a/src/CBot/CBotInstr/CBotFieldExpr.h
+++ b/src/CBot/CBotInstr/CBotFieldExpr.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotFloat.h b/src/CBot/CBotInstr/CBotFloat.h
index 6223071..309697b 100644
--- a/src/CBot/CBotInstr/CBotFloat.h
+++ b/src/CBot/CBotInstr/CBotFloat.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotFor.h b/src/CBot/CBotInstr/CBotFor.h
index 01edc66..d7d4256 100644
--- a/src/CBot/CBotInstr/CBotFor.h
+++ b/src/CBot/CBotInstr/CBotFor.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotFunction.h b/src/CBot/CBotInstr/CBotFunction.h
index 486ffff..f1fc3c8 100644
--- a/src/CBot/CBotInstr/CBotFunction.h
+++ b/src/CBot/CBotInstr/CBotFunction.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotIString.h b/src/CBot/CBotInstr/CBotIString.h
index 1d91ea2..2ea8e4e 100644
--- a/src/CBot/CBotInstr/CBotIString.h
+++ b/src/CBot/CBotInstr/CBotIString.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotIf.h b/src/CBot/CBotInstr/CBotIf.h
index 6ea6ee9..e39e522 100644
--- a/src/CBot/CBotInstr/CBotIf.h
+++ b/src/CBot/CBotInstr/CBotIf.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotIndexExpr.h b/src/CBot/CBotInstr/CBotIndexExpr.h
index 730a4de..a8e7e07 100644
--- a/src/CBot/CBotInstr/CBotIndexExpr.h
+++ b/src/CBot/CBotInstr/CBotIndexExpr.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotInstArray.h b/src/CBot/CBotInstr/CBotInstArray.h
index ca2cbe0..4ad025d 100644
--- a/src/CBot/CBotInstr/CBotInstArray.h
+++ b/src/CBot/CBotInstr/CBotInstArray.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBot.cpp b/src/CBot/CBotInstr/CBotInstr.cpp
similarity index 53%
copy from src/CBot/CBot.cpp
copy to src/CBot/CBotInstr/CBotInstr.cpp
index 1c8b437..7d376f7 100644
--- a/src/CBot/CBot.cpp
+++ b/src/CBot/CBotInstr/CBotInstr.cpp
@@ -17,73 +17,42 @@
* along with this program. If not, see http://gnu.org/licenses
*/
-///////////////////////////////////////////////////////////////////////
-
-// compilation of various instructions
-// compile all routines as static
-// and return an object according to what was found as instruction
-
-// compiler principle:
-// compile the routines return an object of the class corresponding to the operation found
-// this is always a subclass of CBotInstr.
-// (CBotInstr objects are never used directly)
-
-
-// compiles if the routine returns nullptr is that the statement is false
-// or misunderstood.
-// the error is then on the stack CBotCStack :: Isok () is false
-
-
// Modules inlcude
-#include "CBot.h"
-#include "CBotInstr/CBotDo.h"
+#include "CBotInstr.h"
+
#include "CBotInstr/CBotFor.h"
-#include "CBotInstr/CBotSwitch.h"
+#include "CBotInstr/CBotDo.h"
#include "CBotInstr/CBotBreak.h"
+#include "CBotInstr/CBotSwitch.h"
#include "CBotInstr/CBotTry.h"
#include "CBotInstr/CBotThrow.h"
+#include "CBotInstr/CBotInt.h"
+#include "CBotInstr/CBotFloat.h"
#include "CBotInstr/CBotWhile.h"
-#include "CBotInstr/CBotExprAlpha.h"
-#include "CBotInstr/CBotExprNum.h"
-#include "CBotInstr/CBotNew.h"
-#include "CBotInstr/CBotExprNan.h"
-#include "CBotInstr/CBotExprNull.h"
-#include "CBotInstr/CBotExprBool.h"
-#include "CBotInstr/CBotLeftExprVar.h"
-#include "CBotInstr/CBotPreIncExpr.h"
-#include "CBotInstr/CBotPostIncExpr.h"
-#include "CBotInstr/CBotExprVar.h"
-#include "CBotInstr/CBotInstrCall.h"
-#include "CBotInstr/CBotListInstr.h"
-#include "CBotInstr/CBotExprUnaire.h"
-#include "CBotInstr/CBotBoolExpr.h"
-#include "CBotInstr/CBotTwoOpExpr.h"
-#include "CBotInstr/CBotExpression.h"
-#include "CBotInstr/CBotIndexExpr.h"
-#include "CBotInstr/CBotFieldExpr.h"
-#include "CBotInstr/CBotClassInst.h"
#include "CBotInstr/CBotIString.h"
-#include "CBotInstr/CBotFloat.h"
#include "CBotInstr/CBotBoolean.h"
-#include "CBotInstr/CBotEmpty.h"
-#include "CBotInstr/CBotReturn.h"
#include "CBotInstr/CBotIf.h"
-#include "CBotInstr/CBotListArray.h"
+#include "CBotInstr/CBotReturn.h"
+#include "CBotInstr/CBotClassInst.h"
+#include "CBotInstr/CBotExpression.h"
#include "CBotInstr/CBotInstArray.h"
-#include "CBotInstr/CBotInt.h"
-#include "CBotStack.h"
-#include "CBotCStack.h"
+#include "CBotVar/CBotVar.h"
+
#include "CBotClass.h"
+#include "CBotStack.h"
-#include "CBotVar/CBotVar.h"
// Local include
// Global include
#include <cassert>
+////////////////////////////////////////////////////////////////////////////////
+int CBotInstr::m_LoopLvl = 0;
+CBotStringArray CBotInstr::m_labelLvl = CBotStringArray();
+////////////////////////////////////////////////////////////////////////////////
CBotInstr::CBotInstr()
{
name = "CBotInstr";
@@ -93,6 +62,7 @@ CBotInstr::CBotInstr()
m_next3b = nullptr;
}
+////////////////////////////////////////////////////////////////////////////////
CBotInstr::~CBotInstr()
{
delete m_next;
@@ -101,15 +71,7 @@ CBotInstr::~CBotInstr()
delete m_next3b;
}
-// counter of nested loops,
-// to determine the break and continue valid
-// list of labels used
-
-
-int CBotInstr::m_LoopLvl = 0;
-CBotStringArray CBotInstr::m_labelLvl = CBotStringArray();
-
-// adds a level with a label
+////////////////////////////////////////////////////////////////////////////////
void CBotInstr::IncLvl(CBotString& label)
{
m_labelLvl.SetSize(m_LoopLvl+1);
@@ -117,7 +79,7 @@ void CBotInstr::IncLvl(CBotString& label)
m_LoopLvl++;
}
-// adds a level (switch statement)
+////////////////////////////////////////////////////////////////////////////////
void CBotInstr::IncLvl()
{
m_labelLvl.SetSize(m_LoopLvl+1);
@@ -125,14 +87,14 @@ void CBotInstr::IncLvl()
m_LoopLvl++;
}
-// free a level
+////////////////////////////////////////////////////////////////////////////////
void CBotInstr::DecLvl()
{
m_LoopLvl--;
m_labelLvl[m_LoopLvl].Empty();
}
-// control validity of break and continue
+////////////////////////////////////////////////////////////////////////////////
bool CBotInstr::ChkLvl(const CBotString& label, int type)
{
int i = m_LoopLvl;
@@ -145,38 +107,31 @@ bool CBotInstr::ChkLvl(const CBotString& label, int type)
return false;
}
+////////////////////////////////////////////////////////////////////////////////
bool CBotInstr::IsOfClass(CBotString n)
{
return name == n;
}
-
-////////////////////////////////////////////////////////////////////////////
-// database management class CBotInstr
-
-// set the token corresponding to the instruction
-
+////////////////////////////////////////////////////////////////////////////////
void CBotInstr::SetToken(CBotToken* p)
{
m_token = *p;
}
-// return the type of the token assicated with the instruction
-
+////////////////////////////////////////////////////////////////////////////////
int CBotInstr::GetTokenType()
{
return m_token.GetType();
}
-// return associated token
-
+////////////////////////////////////////////////////////////////////////////////
CBotToken* CBotInstr::GetToken()
{
return &m_token;
}
-// adds the statement following the other
-
+////////////////////////////////////////////////////////////////////////////////
void CBotInstr::AddNext(CBotInstr* n)
{
CBotInstr* p = this;
@@ -184,6 +139,7 @@ void CBotInstr::AddNext(CBotInstr* n)
p->m_next = n;
}
+////////////////////////////////////////////////////////////////////////////////
void CBotInstr::AddNext3(CBotInstr* n)
{
CBotInstr* p = this;
@@ -191,6 +147,7 @@ void CBotInstr::AddNext3(CBotInstr* n)
p->m_next3 = n;
}
+////////////////////////////////////////////////////////////////////////////////
void CBotInstr::AddNext3b(CBotInstr* n)
{
CBotInstr* p = this;
@@ -198,31 +155,25 @@ void CBotInstr::AddNext3b(CBotInstr* n)
p->m_next3b = n;
}
-// returns next statement
-
+////////////////////////////////////////////////////////////////////////////////
CBotInstr* CBotInstr::GetNext()
{
return m_next;
}
+////////////////////////////////////////////////////////////////////////////////
CBotInstr* CBotInstr::GetNext3()
{
return m_next3;
}
+////////////////////////////////////////////////////////////////////////////////
CBotInstr* CBotInstr::GetNext3b()
{
return m_next3b;
}
-///////////////////////////////////////////////////////////////////////////
-// compile an instruction which can be
-// while, do, try, throw, if, for, switch, break, continue, return
-// int, float, boolean, string,
-// declaration of an instance of a class
-// arbitrary expression
-
-
+////////////////////////////////////////////////////////////////////////////////
CBotInstr* CBotInstr::Compile(CBotToken* &p, CBotCStack* pStack)
{
CBotToken* pp = p;
@@ -330,6 +281,7 @@ CBotInstr* CBotInstr::Compile(CBotToken* &p, CBotCStack* pStack)
return nullptr;
}
+////////////////////////////////////////////////////////////////////////////////
bool CBotInstr::Execute(CBotStack* &pj)
{
CBotString ClassManquante = name;
@@ -338,6 +290,7 @@ bool CBotInstr::Execute(CBotStack* &pj)
return false;
}
+////////////////////////////////////////////////////////////////////////////////
bool CBotInstr::Execute(CBotStack* &pj, CBotVar* pVar)
{
if (!Execute(pj)) return false;
@@ -345,6 +298,7 @@ bool CBotInstr::Execute(CBotStack* &pj, CBotVar* pVar)
return true;
}
+////////////////////////////////////////////////////////////////////////////////
void CBotInstr::RestoreState(CBotStack* &pj, bool bMain)
{
CBotString ClassManquante = name;
@@ -352,33 +306,33 @@ void CBotInstr::RestoreState(CBotStack* &pj, bool bMain)
// but use the routines of the subclasses
}
-
+////////////////////////////////////////////////////////////////////////////////
bool CBotInstr::ExecuteVar(CBotVar* &pVar, CBotCStack* &pile)
{
assert(0); // dad do not know, see the girls
return false;
}
+////////////////////////////////////////////////////////////////////////////////
bool CBotInstr::ExecuteVar(CBotVar* &pVar, CBotStack* &pile, CBotToken* prevToken, bool bStep, bool bExtend)
{
assert(0); // dad do not know, see the girls
return false;
}
+////////////////////////////////////////////////////////////////////////////////
void CBotInstr::RestoreStateVar(CBotStack* &pile, bool bMain)
{
assert(0); // dad do not know, see the girls
}
-// this routine is defined only for the subclass CBotCase
-// this allows to make the call on all instructions CompCase
-// to see if it's a case to the desired value.
-
+////////////////////////////////////////////////////////////////////////////////
bool CBotInstr::CompCase(CBotStack* &pj, int val)
{
return false;
}
+////////////////////////////////////////////////////////////////////////////////
CBotInstr* CBotInstr::CompileArray(CBotToken* &p, CBotCStack* pStack, CBotTypResult type, bool first)
{
if (IsOfType(p, ID_OPBRK))
@@ -418,183 +372,3 @@ CBotInstr* CBotInstr::CompileArray(CBotToken* &p, CBotCStack* pStack, CBotTypRes
pStack->SetError(TX_ENDOF, p->GetStart());
return nullptr;
}
-
-//////////////////////////////////////////////////////////////////////////////////////////
-
-// compile a list of parameters
-
-CBotInstr* CompileParams(CBotToken* &p, CBotCStack* pStack, CBotVar** ppVars)
-{
- bool first = true;
- CBotInstr* ret = nullptr; // to return to the list
-
- CBotCStack* pile = pStack;
- int i = 0;
-
- if (IsOfType(p, ID_OPENPAR))
- {
- int start, end;
- if (!IsOfType(p, ID_CLOSEPAR)) while (true)
- {
- start = p->GetStart();
- pile = pile->TokenStack(); // keeps the result on the stack
-
- if (first) pStack->SetStartError(start);
- first = false;
-
- CBotInstr* param = CBotExpression::Compile(p, pile);
- end = p->GetStart();
-
- if (!pile->IsOk())
- {
- return pStack->Return(nullptr, pile);
- }
-
- if (ret == nullptr) ret = param;
- else ret->AddNext(param); // construct the list
-
- if (param != nullptr)
- {
- if (pile->GetTypResult().Eq(99))
- {
- delete pStack->TokenStack();
- pStack->SetError(TX_VOID, p->GetStart());
- return nullptr;
- }
- ppVars[i] = pile->GetVar();
- ppVars[i]->GetToken()->SetPos(start, end);
- i++;
-
- if (IsOfType(p, ID_COMMA)) continue; // skips the comma
- if (IsOfType(p, ID_CLOSEPAR)) break;
- }
-
- pStack->SetError(TX_CLOSEPAR, p->GetStart());
- delete pStack->TokenStack();
- return nullptr;
- }
- }
- ppVars[i] = nullptr;
- return ret;
-}
-
-/////////////////////////////////////////////////////////////
-// check if two results are consistent to make an operation
-
-bool TypeCompatible(CBotTypResult& type1, CBotTypResult& type2, int op)
-{
- int t1 = type1.GetType();
- int t2 = type2.GetType();
-
- int max = (t1 > t2) ? t1 : t2;
-
- if (max == 99) return false; // result is void?
-
- // special case for strin concatenation
- if (op == ID_ADD && max >= CBotTypString) return true;
- if (op == ID_ASSADD && max >= CBotTypString) return true;
- if (op == ID_ASS && t1 == CBotTypString) return true;
-
- if (max >= CBotTypBoolean)
- {
- if ( (op == ID_EQ || op == ID_NE) &&
- (t1 == CBotTypPointer && t2 == CBotTypNullPointer)) return true;
- if ( (op == ID_EQ || op == ID_NE || op == ID_ASS) &&
- (t2 == CBotTypPointer && t1 == CBotTypNullPointer)) return true;
- if ( (op == ID_EQ || op == ID_NE) &&
- (t1 == CBotTypArrayPointer && t2 == CBotTypNullPointer)) return true;
- if ( (op == ID_EQ || op == ID_NE || op == ID_ASS) &&
- (t2 == CBotTypArrayPointer && t1 == CBotTypNullPointer)) return true;
- if (t2 != t1) return false;
- if (t1 == CBotTypArrayPointer) return type1.Compare(type2);
- if (t1 == CBotTypPointer ||
- t1 == CBotTypClass ||
- t1 == CBotTypIntrinsic )
- {
- CBotClass* c1 = type1.GetClass();
- CBotClass* c2 = type2.GetClass();
-
- return c1->IsChildOf(c2) || c2->IsChildOf(c1);
- // accept the case in reverse
- // the transaction will be denied at runtime if the pointer is not
- // compatible
- }
-
- return true;
- }
-
- type1.SetType(max);
- type2.SetType(max);
- return true;
-}
-
-// check if two variables are compatible for parameter passing
-
-bool TypesCompatibles(const CBotTypResult& type1, const CBotTypResult& type2)
-{
- int t1 = type1.GetType();
- int t2 = type2.GetType();
-
- if (t1 == CBotTypIntrinsic) t1 = CBotTypClass;
- if (t2 == CBotTypIntrinsic) t2 = CBotTypClass;
-
- int max = (t1 > t2) ? t1 : t2;
-
- if (max == 99) return false; // result is void?
-
- if (max >= CBotTypBoolean)
- {
- if (t2 != t1) return false;
-
- if (max == CBotTypArrayPointer)
- return TypesCompatibles(type1.GetTypElem(), type2.GetTypElem());
-
- if (max == CBotTypClass || max == CBotTypPointer)
- return type1.GetClass() == type2.GetClass() ;
-
- return true ;
- }
- return true;
-}
-
-
-/////////////////////////////////////////////////////////////////////////////////////
-// file management
-
-// necessary because it is not possible to do the fopen in the main program
-// fwrite and fread in a dll or using the FILE * returned.
-
-
-FILE* fOpen(const char* name, const char* mode)
-{
- return fopen(name, mode);
-}
-
-int fClose(FILE* filehandle)
-{
- return fclose(filehandle);
-}
-
-size_t fWrite(const void *buffer, size_t elemsize, size_t length, FILE* filehandle)
-{
- return fwrite(buffer, elemsize, length, filehandle);
-}
-
-size_t fRead(void *buffer, size_t elemsize, size_t length, FILE* filehandle)
-{
- return fread(buffer, elemsize, length, filehandle);
-}
-
-size_t fWrite(const void *buffer, size_t length, FILE* filehandle)
-{
- return fwrite(buffer, 1, length, filehandle);
-}
-
-size_t fRead(void *buffer, size_t length, FILE* filehandle)
-{
- return fread(buffer, 1, length, filehandle);
-}
-
-
-////////////////////////////////////////
-
diff --git a/src/CBot/CBotInstr/CBotInstr.h b/src/CBot/CBotInstr/CBotInstr.h
new file mode 100644
index 0000000..1f25115
--- /dev/null
+++ b/src/CBot/CBotInstr/CBotInstr.h
@@ -0,0 +1,266 @@
+/*
+ * This file is part of the Colobot: Gold Edition source code
+ * Copyright (C) 2001-2015, Daniel Roux, EPSITEC SA & TerranovaTeam
+ * http://epsitec.ch; http://colobot.info; http://github.com/colobot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://gnu.org/licenses
+ */
+
+#pragma once
+
+// Modules inlcude
+#include "CBotToken.h"
+
+#include "CBotCStack.h"
+
+// Local include
+
+// Global include
+
+/*
+ for example, the following program
+ int x[]; x[1] = 4;
+ int y[x[1]][10], z;
+ is generated
+ CBotInstrArray
+ m_next3b-> CBotEmpty
+ m_next->
+ CBotExpression ....
+ m_next->
+ CBotInstrArray
+ m_next3b-> CBotExpression ('x') ( m_next3-> CBotIndexExpr ('1') )
+ m_next3b-> CBotExpression ('10')
+ m_next2-> 'z'
+ m_next->...
+
+*/
+/*!
+ * \brief The CBotInstr class Class defining an instruction.
+ */
+class CBotInstr
+{
+public:
+
+ /*!
+ * \brief CBotInstr
+ */
+ CBotInstr();
+
+ /*!
+ * \brief ~CBotInstr
+ */
+ virtual ~CBotInstr();
+
+ /*!
+ * \brief Compile Compile an instruction which can be while, do, try,
+ * throw, if, for, switch, break, continue, return, int, float, boolean,
+ * string, declaration of an instance of a class, arbitrary expression.
+ * \param p
+ * \param pStack
+ * \return
+ */
+ static CBotInstr* Compile(CBotToken* &p,
+ CBotCStack* pStack);
+
+ /*!
+ * \brief CompileArray
+ * \param p
+ * \param pStack
+ * \param type
+ * \param first
+ * \return
+ */
+ static CBotInstr* CompileArray(CBotToken* &p,
+ CBotCStack* pStack,
+ CBotTypResult type,
+ bool first = true);
+
+ /*!
+ * \brief Execute
+ * \param pj
+ * \return
+ */
+ virtual bool Execute(CBotStack* &pj);
+
+ /*!
+ * \brief Execute
+ * \param pj
+ * \param pVar
+ * \return
+ */
+ virtual bool Execute(CBotStack* &pj,
+ CBotVar* pVar);
+
+ /*!
+ * \brief RestoreState
+ * \param pj
+ * \param bMain
+ */
+ virtual void RestoreState(CBotStack* &pj,
+ bool bMain);
+
+ /*!
+ * \brief ExecuteVar
+ * \param pVar
+ * \param pile
+ * \return
+ */
+ virtual bool ExecuteVar(CBotVar* &pVar,
+ CBotCStack* &pile);
+
+ /*!
+ * \brief ExecuteVar
+ * \param pVar
+ * \param pile
+ * \param prevToken
+ * \param bStep
+ * \param bExtend
+ * \return
+ */
+ virtual bool ExecuteVar(CBotVar* &pVar,
+ CBotStack* &pile,
+ CBotToken* prevToken,
+ bool bStep,
+ bool bExtend);
+
+ /*!
+ * \brief RestoreStateVar
+ * \param pile
+ * \param bMain
+ */
+ virtual void RestoreStateVar(CBotStack* &pile,
+ bool bMain);
+
+ /*!
+ * \brief CompCase This routine is defined only for the subclass CBotCase
+ * this allows to make the call on all instructions CompCase to see if it's
+ * a case to the desired value..
+ * \param pj
+ * \param val
+ * \return
+ */
+ virtual bool CompCase(CBotStack* &pj,
+ int val);
+
+ /*!
+ * \brief SetToken Set the token corresponding to the instruction.
+ * \param p
+ */
+ void SetToken(CBotToken* p);
+
+ /*!
+ * \brief GetTokenType Return the type of the token assicated with the
+ * instruction.
+ * \return
+ */
+ int GetTokenType();
+
+ /*!
+ * \brief GetToken Return associated token.
+ * \return
+ */
+ CBotToken* GetToken();
+
+ /*!
+ * \brief AddNext Adds the statement following the other.
+ * \param n
+ */
+ void AddNext(CBotInstr* n);
+
+ /*!
+ * \brief GetNext Returns next statement.
+ * \return
+ */
+ CBotInstr* GetNext();
+
+ /*!
+ * \brief AddNext3
+ * \param n
+ */
+ void AddNext3(CBotInstr* n);
+
+ /*!
+ * \brief GetNext3
+ * \return
+ */
+ CBotInstr* GetNext3();
+
+ /*!
+ * \brief AddNext3b
+ * \param n
+ */
+ void AddNext3b(CBotInstr* n);
+
+ /*!
+ * \brief GetNext3b
+ * \return
+ */
+ CBotInstr* GetNext3b();
+
+ /*!
+ * \brief IncLvl Adds a level with a label.
+ * \param label
+ */
+ static void IncLvl(CBotString& label);
+
+ /*!
+ * \brief IncLvl Adds a level (switch statement).
+ */
+ static void IncLvl();
+
+ /*!
+ * \brief DecLvl Free a level.
+ */
+ static void DecLvl();
+
+ /*!
+ * \brief ChkLvl Control validity of break and continue.
+ * \param label
+ * \param type
+ * \return
+ */
+ static bool ChkLvl(const CBotString& label, int type);
+
+ /*!
+ * \brief IsOfClass
+ * \param name
+ * \return
+ */
+ bool IsOfClass(CBotString name);
+
+protected:
+
+ //! Keeps the token.
+ CBotToken m_token;
+ //! Debug.
+ CBotString name;
+ //! Linked command.
+ CBotInstr* m_next;
+ //! Second list definition chain.
+ CBotInstr* m_next2b;
+ //! Third list for indices and fields.
+ CBotInstr* m_next3;
+ //! Necessary for reporting tables.
+ CBotInstr* m_next3b;
+
+ //! Counter of nested loops, to determine the break and continue valid.
+ static int m_LoopLvl;
+ friend class CBotClassInst;
+ friend class CBotInt;
+ friend class CBotListArray;
+
+private:
+ //! List of labels used.
+ static CBotStringArray m_labelLvl;
+};
diff --git a/src/CBot/CBotInstr/CBotInstrCall.h b/src/CBot/CBotInstr/CBotInstrCall.h
index 7e194f8..fa634fe 100644
--- a/src/CBot/CBotInstr/CBotInstrCall.h
+++ b/src/CBot/CBotInstr/CBotInstrCall.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotInstrMethode.h b/src/CBot/CBotInstr/CBotInstrMethode.h
index ca4ad90..ea39811 100644
--- a/src/CBot/CBotInstr/CBotInstrMethode.h
+++ b/src/CBot/CBotInstr/CBotInstrMethode.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotInt.h b/src/CBot/CBotInstr/CBotInt.h
index 702f529..085e626 100644
--- a/src/CBot/CBotInstr/CBotInt.h
+++ b/src/CBot/CBotInstr/CBotInt.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotLeftExpr.h b/src/CBot/CBotInstr/CBotLeftExpr.h
index f0dba0b..aaf9ee4 100644
--- a/src/CBot/CBotInstr/CBotLeftExpr.h
+++ b/src/CBot/CBotInstr/CBotLeftExpr.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotLeftExprVar.h b/src/CBot/CBotInstr/CBotLeftExprVar.h
index a264dba..fd69372 100644
--- a/src/CBot/CBotInstr/CBotLeftExprVar.h
+++ b/src/CBot/CBotInstr/CBotLeftExprVar.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotListArray.h b/src/CBot/CBotInstr/CBotListArray.h
index 921273d..586cc86 100644
--- a/src/CBot/CBotInstr/CBotListArray.h
+++ b/src/CBot/CBotInstr/CBotListArray.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotListExpression.h b/src/CBot/CBotInstr/CBotListExpression.h
index c4e6711..451b218 100644
--- a/src/CBot/CBotInstr/CBotListExpression.h
+++ b/src/CBot/CBotInstr/CBotListExpression.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotListInstr.h b/src/CBot/CBotInstr/CBotListInstr.h
index 763c3a8..0aafaf5 100644
--- a/src/CBot/CBotInstr/CBotListInstr.h
+++ b/src/CBot/CBotInstr/CBotListInstr.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotLogicExpr.h b/src/CBot/CBotInstr/CBotLogicExpr.h
index 2bffc24..db6c67f 100644
--- a/src/CBot/CBotInstr/CBotLogicExpr.h
+++ b/src/CBot/CBotInstr/CBotLogicExpr.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotNew.h b/src/CBot/CBotInstr/CBotNew.h
index 77e2b2c..02598b1 100644
--- a/src/CBot/CBotInstr/CBotNew.h
+++ b/src/CBot/CBotInstr/CBotNew.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotParExpr.h b/src/CBot/CBotInstr/CBotParExpr.h
index 60c0993..690d6ef 100644
--- a/src/CBot/CBotInstr/CBotParExpr.h
+++ b/src/CBot/CBotInstr/CBotParExpr.h
@@ -22,7 +22,7 @@
// Modules inlcude
#include "CBot.h"
-#include "CBotStack.h"
+#include "CBotInstr.h"
// Local include
diff --git a/src/CBot/CBotInstr/CBotPostIncExpr.h b/src/CBot/CBotInstr/CBotPostIncExpr.h
index 5a3240c..3a30fce 100644
--- a/src/CBot/CBotInstr/CBotPostIncExpr.h
+++ b/src/CBot/CBotInstr/CBotPostIncExpr.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotPreIncExpr.h b/src/CBot/CBotInstr/CBotPreIncExpr.h
index ede694d..896c0c9 100644
--- a/src/CBot/CBotInstr/CBotPreIncExpr.h
+++ b/src/CBot/CBotInstr/CBotPreIncExpr.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotReturn.h b/src/CBot/CBotInstr/CBotReturn.h
index 978c6c1..1816bf2 100644
--- a/src/CBot/CBotInstr/CBotReturn.h
+++ b/src/CBot/CBotInstr/CBotReturn.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotSwitch.h b/src/CBot/CBotInstr/CBotSwitch.h
index c3f5e02..b4cff5e 100644
--- a/src/CBot/CBotInstr/CBotSwitch.h
+++ b/src/CBot/CBotInstr/CBotSwitch.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotThrow.h b/src/CBot/CBotInstr/CBotThrow.h
index 997550a..b5227ad 100644
--- a/src/CBot/CBotInstr/CBotThrow.h
+++ b/src/CBot/CBotInstr/CBotThrow.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotTry.h b/src/CBot/CBotInstr/CBotTry.h
index 0a8d2b9..bdc3d4d 100644
--- a/src/CBot/CBotInstr/CBotTry.h
+++ b/src/CBot/CBotInstr/CBotTry.h
@@ -21,6 +21,8 @@
#include "CBot.h"
#include "CBotCatch.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotTwoOpExpr.h b/src/CBot/CBotInstr/CBotTwoOpExpr.h
index 1bcc2f8..720755f 100644
--- a/src/CBot/CBotInstr/CBotTwoOpExpr.h
+++ b/src/CBot/CBotInstr/CBotTwoOpExpr.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotInstr/CBotWhile.h b/src/CBot/CBotInstr/CBotWhile.h
index 5d63909..528fe8f 100644
--- a/src/CBot/CBotInstr/CBotWhile.h
+++ b/src/CBot/CBotInstr/CBotWhile.h
@@ -22,6 +22,8 @@
// Modules inlcude
#include "CBot.h"
+#include "CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CBotVar/CBotVarClass.cpp b/src/CBot/CBotVar/CBotVarClass.cpp
index f07fbe9..4d6ee78 100644
--- a/src/CBot/CBotVar/CBotVarClass.cpp
+++ b/src/CBot/CBotVar/CBotVarClass.cpp
@@ -21,11 +21,11 @@
#include "CBotVarClass.h"
#include "CBotClass.h"
-
#include "CBotStack.h"
-
#include "CBotDefines.h"
+#include "CBotInstr/CBotInstr.h"
+
// Local include
// Global include
diff --git a/src/CBot/CMakeLists.txt b/src/CBot/CMakeLists.txt
index e69beae..80cb2d0 100644
--- a/src/CBot/CMakeLists.txt
+++ b/src/CBot/CMakeLists.txt
@@ -10,6 +10,7 @@ set(SOURCES
CBotUtils.cpp
CBotDefParam.cpp
CBotCallMethode.cpp
+ CBotInstr/CBotInstr.cpp
CBotInstr/CBotWhile.cpp
CBotInstr/CBotDo.cpp
CBotInstr/CBotFor.cpp
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git
More information about the Pkg-games-commits
mailing list