2012-12-05 19:32:43 +00:00
|
|
|
/*
|
|
|
|
* PostfixExpression.cpp
|
|
|
|
*
|
|
|
|
* Created on: Dec 5, 2012
|
|
|
|
* Author: attero
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "PostfixExpression.h"
|
|
|
|
|
2012-12-31 16:10:37 +00:00
|
|
|
PostfixExpression::PostfixExpression(std::string name, ContextManager * context_manager):
|
2013-01-10 15:15:43 +00:00
|
|
|
name(name), operation("call"), context_manager(context_manager)
|
|
|
|
{
|
|
|
|
type= "PostfixExpression";
|
|
|
|
access_index_expr = nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
PostfixExpression::PostfixExpression(std::string name, ContextManager * context_manager, ASTExpression * access_index_expr):
|
|
|
|
name(name), operation("access"), context_manager(context_manager), access_index_expr(access_index_expr)
|
2012-12-28 15:19:47 +00:00
|
|
|
{
|
2012-12-28 16:39:43 +00:00
|
|
|
type= "PostfixExpression";
|
2012-12-05 19:32:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
PostfixExpression::~PostfixExpression() {
|
2012-12-17 08:25:58 +00:00
|
|
|
for(auto i = arguments.begin(); i != arguments.end();)
|
|
|
|
{
|
|
|
|
delete *i;
|
|
|
|
i = arguments.erase(i);
|
|
|
|
}
|
2012-12-05 19:32:43 +00:00
|
|
|
}
|
|
|
|
|
2012-12-07 15:58:27 +00:00
|
|
|
|
|
|
|
void PostfixExpression::add_argument(ASTExpression * expression)
|
|
|
|
{
|
|
|
|
arguments.push_back(expression);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SenchaObject PostfixExpression::evaluate()
|
|
|
|
{
|
2013-01-12 18:20:47 +00:00
|
|
|
return execute();
|
2012-12-07 15:58:27 +00:00
|
|
|
}
|
|
|
|
|
2012-12-31 16:10:37 +00:00
|
|
|
SenchaObject PostfixExpression::execute() {
|
2013-01-10 15:15:43 +00:00
|
|
|
SenchaObject result = SenchaObject();
|
|
|
|
if(operation == "call")
|
|
|
|
return context_manager->execute_function(name, arguments);
|
|
|
|
else if(operation == "access")
|
|
|
|
{
|
|
|
|
SenchaObject called_value = context_manager->get_top()->get(name);
|
|
|
|
SenchaObject access_index = access_index_expr->execute();
|
|
|
|
if(access_index.type == SenchaObject::integer_number)
|
|
|
|
{
|
|
|
|
if(called_value.type == SenchaObject::string_literal)
|
|
|
|
{
|
2013-01-12 18:20:47 +00:00
|
|
|
called_value = context_manager->get_top()->get_updated_string(name);
|
|
|
|
SenchaArray array(name, context_manager, called_value.text);
|
2013-01-10 15:15:43 +00:00
|
|
|
return array.get(access_index.integer);
|
|
|
|
}
|
2013-01-12 21:16:30 +00:00
|
|
|
else
|
|
|
|
{
|
|
|
|
SenchaArray array(name, context_manager);
|
|
|
|
return array.get(access_index.integer);
|
|
|
|
}
|
2013-01-10 15:15:43 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
result.type = SenchaObject::invalid;
|
|
|
|
return result;
|
2012-12-10 10:45:09 +00:00
|
|
|
|
|
|
|
}
|
2012-12-07 15:58:27 +00:00
|
|
|
|
|
|
|
|