2012-12-05 19:32:43 +00:00
|
|
|
/*
|
|
|
|
* BasicExpression.cpp
|
|
|
|
*
|
|
|
|
* Created on: Dec 5, 2012
|
|
|
|
* Author: attero
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "BasicExpression.h"
|
|
|
|
|
2012-12-31 16:10:37 +00:00
|
|
|
SenchaObject BasicExpression::execute()
|
2012-12-07 15:58:27 +00:00
|
|
|
{
|
2012-12-31 16:10:37 +00:00
|
|
|
SenchaObject result = evaluate() ;
|
|
|
|
return result;
|
2012-12-07 15:58:27 +00:00
|
|
|
}
|
2012-12-05 19:32:43 +00:00
|
|
|
|
2012-12-28 15:19:47 +00:00
|
|
|
|
2012-12-06 17:41:16 +00:00
|
|
|
SenchaObject BasicExpression::evaluate()
|
2012-12-05 19:32:43 +00:00
|
|
|
{
|
2012-12-07 15:58:27 +00:00
|
|
|
//TODO refactor it ;)
|
2012-12-08 19:59:05 +00:00
|
|
|
|
|
|
|
SenchaObject left = static_cast<ASTExpression *>(children[0])->evaluate();
|
|
|
|
SenchaObject right = static_cast<ASTExpression *>(children[1])->evaluate();
|
|
|
|
|
|
|
|
|
2012-12-07 15:58:27 +00:00
|
|
|
SenchaObject so;
|
2012-12-05 19:32:43 +00:00
|
|
|
if(oper == "+")
|
|
|
|
{
|
2012-12-08 19:59:05 +00:00
|
|
|
so = SenchaObject(left + right);
|
2012-12-05 19:32:43 +00:00
|
|
|
}
|
2012-12-07 15:58:27 +00:00
|
|
|
else if(oper == "-")
|
|
|
|
{
|
2012-12-08 19:59:05 +00:00
|
|
|
so = SenchaObject(left - right);
|
2012-12-07 15:58:27 +00:00
|
|
|
}
|
|
|
|
else if(oper == "*")
|
|
|
|
{
|
2012-12-08 19:59:05 +00:00
|
|
|
so = SenchaObject(left * right);
|
2012-12-07 15:58:27 +00:00
|
|
|
}
|
|
|
|
else if(oper == "/")
|
|
|
|
{
|
2012-12-08 19:59:05 +00:00
|
|
|
so = SenchaObject(left / right);
|
|
|
|
}
|
|
|
|
else if(oper == "=")
|
|
|
|
{
|
|
|
|
so = SenchaObject(right);
|
2012-12-07 15:58:27 +00:00
|
|
|
}
|
2012-12-09 16:42:13 +00:00
|
|
|
else if(oper == "==")
|
|
|
|
{
|
|
|
|
so = SenchaObject(right == left);
|
|
|
|
}
|
2012-12-10 11:37:29 +00:00
|
|
|
else if(oper == "!=")
|
|
|
|
{
|
|
|
|
so = SenchaObject(right != left);
|
|
|
|
}
|
2012-12-22 14:43:51 +00:00
|
|
|
else if(oper == ">")
|
|
|
|
{
|
|
|
|
so = SenchaObject(left > right);
|
|
|
|
}
|
|
|
|
else if(oper == ">=")
|
|
|
|
{
|
|
|
|
so = SenchaObject(left >= right);
|
|
|
|
}
|
|
|
|
else if(oper == "<=")
|
|
|
|
{
|
|
|
|
so = SenchaObject(left <= right);
|
|
|
|
}
|
|
|
|
else if(oper == "<")
|
|
|
|
{
|
|
|
|
so = SenchaObject(left < right);
|
|
|
|
}
|
2012-12-22 14:48:26 +00:00
|
|
|
else if(oper == "&&")
|
|
|
|
{
|
|
|
|
so = SenchaObject(left.is_true() && right.is_true());
|
|
|
|
}
|
|
|
|
else if(oper == "||")
|
|
|
|
{
|
|
|
|
so = SenchaObject(left.is_true() || right.is_true());
|
|
|
|
}
|
2012-12-07 15:58:27 +00:00
|
|
|
return so;
|
2012-12-05 19:32:43 +00:00
|
|
|
}
|
|
|
|
|
2012-12-28 15:19:47 +00:00
|
|
|
BasicExpression::BasicExpression(ASTNode * left, ASTNode * right, std::string oper )
|
|
|
|
{
|
2012-12-21 15:16:39 +00:00
|
|
|
this->type= "BasicExpression";
|
2012-12-28 15:19:47 +00:00
|
|
|
this->children.push_back(left);
|
|
|
|
this->children.push_back(right);
|
|
|
|
this->oper = oper;
|
2012-12-05 19:32:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
BasicExpression::~BasicExpression() {
|
2012-12-17 09:41:48 +00:00
|
|
|
|
2012-12-05 19:32:43 +00:00
|
|
|
}
|
|
|
|
|
2012-12-18 21:41:39 +00:00
|
|
|
void BasicExpression::accept(Visitor * visitor)
|
|
|
|
{
|
|
|
|
visitor->visit(this);
|
|
|
|
}
|
2012-12-06 17:41:16 +00:00
|
|
|
|