2012-12-10 08:43:16 +00:00
|
|
|
/*
|
|
|
|
* WhileNode.cpp
|
|
|
|
*
|
|
|
|
* Created on: Dec 10, 2012
|
|
|
|
* Author: attero
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "WhileNode.h"
|
|
|
|
|
2012-12-10 11:37:29 +00:00
|
|
|
WhileNode::WhileNode(ASTNode * parent) {
|
2012-12-17 08:25:58 +00:00
|
|
|
body = NULL;
|
2012-12-10 11:37:29 +00:00
|
|
|
this->parent = parent;
|
2012-12-22 10:06:55 +00:00
|
|
|
this->type = "WhileNode";
|
2012-12-10 08:43:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
WhileNode::~WhileNode() {
|
2012-12-17 08:25:58 +00:00
|
|
|
delete body;
|
|
|
|
for(auto it = children.begin(); it != children.end(); )
|
|
|
|
{
|
|
|
|
delete *it;
|
|
|
|
it = children.erase(it);
|
|
|
|
}
|
2012-12-10 08:43:16 +00:00
|
|
|
}
|
|
|
|
|
2012-12-10 11:37:29 +00:00
|
|
|
void WhileNode::add_condition(ASTExpression * expression)
|
|
|
|
{
|
|
|
|
children.push_back(expression);
|
|
|
|
}
|
|
|
|
|
|
|
|
void WhileNode::add_body(ASTStatement * statement)
|
|
|
|
{
|
|
|
|
body = statement;
|
|
|
|
}
|
|
|
|
|
|
|
|
std::string WhileNode::debug()
|
|
|
|
{
|
|
|
|
std::string debug_note = "While";
|
|
|
|
return debug_note;
|
|
|
|
}
|
|
|
|
|
|
|
|
void WhileNode::execute()
|
|
|
|
{
|
|
|
|
while(evaluate_condition())
|
|
|
|
{
|
|
|
|
body->execute();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool WhileNode::evaluate_condition()
|
|
|
|
{
|
|
|
|
auto condition = static_cast<ASTExpression * >(children[0])->evaluate();
|
|
|
|
return condition.is_true();
|
|
|
|
}
|