/* * IfNode.cpp * * Created on: Nov 18, 2012 * Author: attero */ #include "IfNode.h" IfNode::IfNode(ASTNode * parent) { this->parent = parent; is_else = false; } std::string IfNode::debug() { std::string debug_note; debug_note = "If node, condition is: " + to_string(evaluate_condition()); if(evaluate_condition()) debug_note += "Doing first branch"; else debug_note += "Doing second branch"; return debug_note; } bool IfNode::evaluate_condition() { auto condition = static_cast(children[0])->evaluate(); return condition.is_true(); } IfNode::~IfNode() { for(auto it = children.begin(); it != children.end(); ) { delete *it; it = children.erase(it); } } void IfNode::add_condition(ASTExpression * expression) { children.push_back(expression); } void IfNode::execute() { if(evaluate_condition()) { children[1]->execute(); } else if(is_else) { children[2]->execute(); } } void IfNode::add_body(ASTStatement * statement) { children.push_back(statement); } void IfNode::add_else_block(ASTStatement * statement) { is_else = true; children.push_back(statement); }