2012-12-09 10:29:08 +00:00
|
|
|
/*
|
|
|
|
* DeclarationStatement.cpp
|
|
|
|
*
|
|
|
|
* Created on: Dec 9, 2012
|
|
|
|
* Author: attero
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "DeclarationStatement.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DeclarationStatement::~DeclarationStatement() {
|
2012-12-17 08:25:58 +00:00
|
|
|
if(is_function)
|
|
|
|
{
|
|
|
|
delete body;
|
|
|
|
}
|
|
|
|
for(auto it = children.begin(); it != children.end(); )
|
|
|
|
{
|
|
|
|
delete *it;
|
|
|
|
it = children.erase(it);
|
|
|
|
}
|
2012-12-09 10:29:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DeclarationStatement::add_right_value(ASTExpression * right)
|
|
|
|
{
|
2012-12-09 11:57:51 +00:00
|
|
|
right_value = right->evaluate();
|
|
|
|
children[0] = right;
|
2012-12-09 10:29:08 +00:00
|
|
|
}
|
|
|
|
|
2012-12-31 16:10:37 +00:00
|
|
|
//def print_d() { print("dupa"); }
|
|
|
|
|
|
|
|
DeclarationStatement::DeclarationStatement(ContextManager * context_manager)
|
2012-12-09 10:29:08 +00:00
|
|
|
{
|
2012-12-31 16:10:37 +00:00
|
|
|
this->context_manager = context_manager;
|
2013-01-10 10:46:41 +00:00
|
|
|
this->name_of_context = "global";
|
2012-12-09 10:29:08 +00:00
|
|
|
is_function = false;
|
2013-01-10 15:15:43 +00:00
|
|
|
body = nullptr;
|
2012-12-09 11:57:51 +00:00
|
|
|
right_value = SenchaObject();
|
2012-12-31 16:10:37 +00:00
|
|
|
children.push_back(new ConstantExpression(SenchaObject()));
|
2012-12-22 10:06:55 +00:00
|
|
|
this->type = "DeclarationStatement";
|
2013-01-10 15:15:43 +00:00
|
|
|
this->is_array = false;
|
|
|
|
array_size_expression = nullptr;
|
2012-12-09 10:29:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DeclarationStatement::add_name(std::string name)
|
|
|
|
{
|
|
|
|
this->name = name;
|
|
|
|
}
|
|
|
|
|
2013-01-10 15:15:43 +00:00
|
|
|
void DeclarationStatement::add_array_size(ASTExpression * expression)
|
|
|
|
{
|
|
|
|
this->is_array = true;
|
|
|
|
array_size_expression = expression;
|
|
|
|
}
|
2012-12-09 10:29:08 +00:00
|
|
|
|
|
|
|
void DeclarationStatement::add_argument(std::string name)
|
|
|
|
{
|
|
|
|
arguments.push_back(name);
|
|
|
|
}
|
|
|
|
|
2012-12-31 16:10:37 +00:00
|
|
|
SenchaObject DeclarationStatement::execute()
|
2012-12-09 10:29:08 +00:00
|
|
|
{
|
|
|
|
if(is_function)
|
|
|
|
{
|
2012-12-31 16:10:37 +00:00
|
|
|
SenchaFunction * sf = new SenchaFunction(name, arguments, body);
|
|
|
|
context_manager->context("global")->register_function(name, sf);
|
|
|
|
return SenchaObject();
|
2012-12-09 10:29:08 +00:00
|
|
|
}
|
2013-01-10 15:15:43 +00:00
|
|
|
else if(is_array)
|
|
|
|
{
|
|
|
|
auto expr_value = array_size_expression->evaluate();
|
|
|
|
if(expr_value.type == SenchaObject::integer_number)
|
|
|
|
{
|
|
|
|
int array_size = expr_value.integer;
|
|
|
|
Context * context = context_manager->get_top();
|
|
|
|
for(int i = 0; i< array_size; i++)
|
|
|
|
{
|
|
|
|
context->add("_" + name + "_" + to_string(i), SenchaObject());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return SenchaObject();
|
|
|
|
|
|
|
|
}
|
2012-12-09 10:29:08 +00:00
|
|
|
else
|
|
|
|
{
|
2012-12-31 16:10:37 +00:00
|
|
|
auto context = context_manager->get_top();
|
2012-12-09 11:57:51 +00:00
|
|
|
context->add(name, right_value);
|
2012-12-31 16:10:37 +00:00
|
|
|
return children[0]->execute();
|
2012-12-09 10:29:08 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void DeclarationStatement::add_body(ASTStatement * statement)
|
|
|
|
{
|
|
|
|
is_function = true;
|
|
|
|
body = statement;
|
|
|
|
}
|