From 4cd7a7a03111c365eba2f9d5cb460986a0165f80 Mon Sep 17 00:00:00 2001 From: Grunaka Date: Wed, 11 Nov 2015 20:44:38 +0100 Subject: [PATCH] Moving CBotBoolExpr class in its own header and source files. --- src/CBot/CBot.cpp | 30 +----------------- src/CBot/CBot.h | 8 ----- src/CBot/CBotInstr/CBotBoolExpr.cpp | 47 +++++++++++++++++++++++++++++ src/CBot/CBotInstr/CBotBoolExpr.h | 47 +++++++++++++++++++++++++++++ src/CBot/CBotInstr/CBotFor.cpp | 1 + src/CBot/CMakeLists.txt | 1 + 6 files changed, 97 insertions(+), 37 deletions(-) create mode 100644 src/CBot/CBotInstr/CBotBoolExpr.cpp create mode 100644 src/CBot/CBotInstr/CBotBoolExpr.h diff --git a/src/CBot/CBot.cpp b/src/CBot/CBot.cpp index 93642bcb..93eec5f6 100644 --- a/src/CBot/CBot.cpp +++ b/src/CBot/CBot.cpp @@ -56,6 +56,7 @@ #include "CBotInstr/CBotInstrCall.h" #include "CBotInstr/CBotListInstr.h" #include "CBotInstr/CBotExprUnaire.h" +#include "CBotInstr/CBotBoolExpr.h" // Local include @@ -1644,35 +1645,6 @@ CBotInstr* CBotCondition::Compile(CBotToken* &p, CBotCStack* pStack) return nullptr; } - -////////////////////////////////////////////////////////////////////////////////////// -// compile a statement such as "(condition)" -// the condition must be Boolean -// -// this class has no constructor, because there is never an instance of this -// class -// the object returned by Compile is usually type CBotExpression -// - -CBotInstr* CBotBoolExpr::Compile(CBotToken* &p, CBotCStack* pStack) -{ - pStack->SetStartError(p->GetStart()); - - CBotInstr* inst = CBotTwoOpExpr::Compile(p, pStack); - - if (nullptr != inst) - { - if (pStack->GetTypResult().Eq(CBotTypBoolean)) - { - return inst; - } - pStack->SetError(TX_NOTBOOL, p->GetStart()); // is not a boolean - } - - delete inst; - return nullptr; -} - ////////////////////////////////////////////////////////////////////////////////////// // index management for arrays // array [ expression ] diff --git a/src/CBot/CBot.h b/src/CBot/CBot.h index 7fc2a71e..1ad497e4 100644 --- a/src/CBot/CBot.h +++ b/src/CBot/CBot.h @@ -746,14 +746,6 @@ public: -class CBotBoolExpr : public CBotInstr -{ -private: - -public: - static - CBotInstr* Compile(CBotToken* &p, CBotCStack* pStack); -}; // all operations with two operands diff --git a/src/CBot/CBotInstr/CBotBoolExpr.cpp b/src/CBot/CBotInstr/CBotBoolExpr.cpp new file mode 100644 index 00000000..4fd4d7b6 --- /dev/null +++ b/src/CBot/CBotInstr/CBotBoolExpr.cpp @@ -0,0 +1,47 @@ +/* + * 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 + */ + +// Modules inlcude +#include "CBotBoolExpr.h" + +// Local include + +// Global include + + + +//////////////////////////////////////////////////////////////////////////////// +CBotInstr* CBotBoolExpr::Compile(CBotToken* &p, CBotCStack* pStack) +{ + pStack->SetStartError(p->GetStart()); + + CBotInstr* inst = CBotTwoOpExpr::Compile(p, pStack); + + if (nullptr != inst) + { + if (pStack->GetTypResult().Eq(CBotTypBoolean)) + { + return inst; + } + pStack->SetError(TX_NOTBOOL, p->GetStart()); // is not a boolean + } + + delete inst; + return nullptr; +} diff --git a/src/CBot/CBotInstr/CBotBoolExpr.h b/src/CBot/CBotInstr/CBotBoolExpr.h new file mode 100644 index 00000000..df7354ee --- /dev/null +++ b/src/CBot/CBotInstr/CBotBoolExpr.h @@ -0,0 +1,47 @@ +/* + * 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 "CBot.h" + +// Local include + +// Global include + + +/*! + * \brief The CBotBoolExpr class Compile a statement such as "(condition)" + * the condition must be Boolean. This class has no constructor, because there + * is never an instance of this class the object returned by Compile is usually + * type CBotExpression + */ +class CBotBoolExpr : public CBotInstr +{ +public: + + /*! + * \brief Compile + * \param p + * \param pStack + * \return + */ + static CBotInstr* Compile(CBotToken* &p, CBotCStack* pStack); +}; diff --git a/src/CBot/CBotInstr/CBotFor.cpp b/src/CBot/CBotInstr/CBotFor.cpp index 32caa3c5..d83650cb 100644 --- a/src/CBot/CBotInstr/CBotFor.cpp +++ b/src/CBot/CBotInstr/CBotFor.cpp @@ -21,6 +21,7 @@ #include "CBotFor.h" #include "CBotListExpression.h" #include "CBotBlock.h" +#include "CBotBoolExpr.h" // Local include diff --git a/src/CBot/CMakeLists.txt b/src/CBot/CMakeLists.txt index dc6f7461..697dd019 100644 --- a/src/CBot/CMakeLists.txt +++ b/src/CBot/CMakeLists.txt @@ -35,6 +35,7 @@ set(SOURCES CBotInstr/CBotBlock.cpp CBotInstr/CBotExprUnaire.cpp CBotInstr/CBotParExpr.cpp + CBotInstr/CBotBoolExpr.cpp ) # Includes