summaryrefslogtreecommitdiffstats
path: root/src/CBot/CBotAddExpr.cpp
diff options
context:
space:
mode:
authorKrzysztof H <krzys_h@interia.pl>2012-03-19 12:44:39 +0100
committerKrzysztof H <krzys_h@interia.pl>2012-03-19 12:44:39 +0100
commitf7d892cf4ef6bfce3747c4b6a810d4828b79833d (patch)
tree8311c7057b5f861c387ecc8c96cd778abc47c8d8 /src/CBot/CBotAddExpr.cpp
parent343cb0ce660136ac034e6106c0f151466b751398 (diff)
downloadcolobot-f7d892cf4ef6bfce3747c4b6a810d4828b79833d.tar.gz
colobot-f7d892cf4ef6bfce3747c4b6a810d4828b79833d.tar.bz2
colobot-f7d892cf4ef6bfce3747c4b6a810d4828b79833d.zip
Last coding fix ;)
Diffstat (limited to 'src/CBot/CBotAddExpr.cpp')
-rw-r--r--src/CBot/CBotAddExpr.cpp70
1 files changed, 36 insertions, 34 deletions
diff --git a/src/CBot/CBotAddExpr.cpp b/src/CBot/CBotAddExpr.cpp
index c6ed82d..ad87880 100644
--- a/src/CBot/CBotAddExpr.cpp
+++ b/src/CBot/CBotAddExpr.cpp
@@ -1,4 +1,4 @@
-// * This file is part of the COLOBOT source code
+// * This file is part of the COLOBOT source code
// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch
// *
// * This program is free software: you can redistribute it and/or modify
@@ -12,7 +12,9 @@
// * 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://www.gnu.org/licenses/.
+// * along with this program. If not, see http://www.gnu.org/licenses/.///////////////////////////////////////////////////
+// expression du genre Opérande1 + Opérande2
+// Opérande1 - Opérande2
#include "CBot.h"
@@ -38,9 +40,9 @@ CBotInstr* CBotAddExpr::Compile(CBotToken* &p, CBotStack* pStack)
{
CBotStack* pStk = pStack->TokenStack(); // un bout de pile svp
- // cherche des instructions qui peuvent convenir � gauche de l'op�ration + ou -
+ // cherche des instructions qui peuvent convenir à gauche de l'opération + ou -
- CBotInstr* left = CBotMulExpr::Compile( p, pStk ); // expression A * B � gauche
+ CBotInstr* left = CBotMulExpr::Compile( p, pStk ); // expression A * B à gauche
if (left == NULL) return pStack->Return(NULL, pStk); // si erreur, la transmet
// est-ce qu'on a le token + ou - ensuite ?
@@ -48,80 +50,80 @@ CBotInstr* CBotAddExpr::Compile(CBotToken* &p, CBotStack* pStack)
if ( p->GetType() == ID_ADD ||
p->GetType() == ID_SUB) // plus ou moins
{
- CBotAddExpr* inst = new CBotAddExpr(); // �l�ment pour op�ration
- inst->SetToken(p); // m�morise l'op�ration
+ CBotAddExpr* inst = new CBotAddExpr(); // élément pour opération
+ inst->SetToken(p); // mémorise l'opération
int type1, type2;
- type1 = pStack->GetType(); // de quel type le premier op�rande ?
+ type1 = pStack->GetType(); // de quel type le premier opérande ?
- p = p->Next(); // saute le token de l'op�ration
+ p = p->Next(); // saute le token de l'opération
- // cherche des instructions qui peuvent convenir � droite
+ // cherche des instructions qui peuvent convenir à droite
- if ( NULL != (inst->m_rightop = CBotAddExpr::Compile( p, pStk )) ) // expression (...) � droite
+ if ( NULL != (inst->m_rightop = CBotAddExpr::Compile( p, pStk )) ) // expression (...) à droite
{
- // il y a un second op�rande acceptable
+ // il y a un second opérande acceptable
- type2 = pStack->GetType(); // de quel type le r�sultat ?
+ type2 = pStack->GetType(); // de quel type le résultat ?
- if ( type1 == type2 ) // les r�sultats sont-ils compatibles
+ if ( type1 == type2 ) // les résultats sont-ils compatibles
{
- // si ok, enregistre l'op�rande dans l'objet
+ // si ok, enregistre l'opérande dans l'objet
inst->m_leftop = left;
- // et rend l'object � qui l'a demand�
+ // et rend l'object à qui l'a demandé
return pStack->Return(inst, pStk);
}
}
- // en cas d'erreur, lib�re les �l�ments
+ // en cas d'erreur, libère les éléments
delete left;
delete inst;
// et transmet l'erreur qui se trouve sur la pile
return pStack->Return(NULL, pStk);
}
- // si on n'a pas affaire � une op�ration + ou -
- // rend � qui l'a demand�, l'op�rande (de gauche) trouv�
- // � la place de l'objet "addition"
+ // si on n'a pas affaire à une opération + ou -
+ // rend à qui l'a demandé, l'opérande (de gauche) trouvé
+ // à la place de l'objet "addition"
return pStack->Return(left, pStk);
}
-// fait l'op�ration d'addition ou de soustraction
+// fait l'opération d'addition ou de soustraction
BOOL CBotAddExpr::Execute(CBotStack* &pStack)
{
- CBotStack* pStk1 = pStack->AddStack(this); // ajoute un �l�ment � la pile
+ CBotStack* pStk1 = pStack->AddStack(this); // ajoute un élément à la pile
// ou le retrouve en cas de reprise
// if ( pSk1 == EOX ) return TRUE;
- // selon la reprise, on peut �tre dans l'un des 2 �tats
+ // selon la reprise, on peut être dans l'un des 2 états
- if ( pStk1->GetState() == 0 && // 1er �tat, �value l'op�rande de gauche
+ if ( pStk1->GetState() == 0 && // 1er état, évalue l'opérande de gauche
!m_leftop->Execute(pStk1) ) return FALSE; // interrompu ici ?
- // passe � l'�tape suivante
- pStk1->SetState(1); // pr�t pour la suite
+ // passe à l'étape suivante
+ pStk1->SetState(1); // prêt pour la suite
- // demande un peu plus de stack pour ne pas toucher le r�sultat de gauche
+ // demande un peu plus de stack pour ne pas toucher le résultat de gauche
// qui se trouve sur la pile, justement.
- CBotStack* pStk2 = pStk1->AddStack(); // ajoute un �l�ment � la pile
+ CBotStack* pStk2 = pStk1->AddStack(); // ajoute un élément à la pile
// ou le retrouve en cas de reprise
- // 2e �tat, �value l'op�rande de droite
+ // 2e état, évalue l'opérande de droite
if ( !m_rightop->Execute(pStk2) ) return FALSE; // interrompu ici ?
- int type1 = pStk1->GetType(); // de quels types les r�sultats ?
+ int type1 = pStk1->GetType(); // de quels types les résultats ?
int type2 = pStk2->GetType();
- // cr�e une variable temporaire pour y mettre le r�sultat
+ // crée une variable temporaire pour y mettre le résultat
CBotVar* result = new CBotVar( NULL, MAX(type1, type2));
- // fait l'op�ration selon la demande
+ // fait l'opération selon la demande
switch (GetTokenType())
{
case ID_ADD:
@@ -131,10 +133,10 @@ BOOL CBotAddExpr::Execute(CBotStack* &pStack)
result->Sub(pStk1->GetVar(), pStk2->GetVar()); // soustrait
break;
}
- pStk2->SetVar(result); // met le r�sultat sur la pile
+ pStk2->SetVar(result); // met le résultat sur la pile
- pStk1->Return(pStk2); // lib�re la pile
- return pStack->Return(pStk1); // transmet le r�sultat
+ pStk1->Return(pStk2); // libère la pile
+ return pStack->Return(pStk1); // transmet le résultat
}