/*
 * ConstantExpression.h
 *
 *  Created on: Dec 5, 2012
 *      Author: attero
 */

#ifndef CONSTANTEXPRESSION_H_
#define CONSTANTEXPRESSION_H_
#include "ASTExpression.h"
#include <iostream>
#include "../Elements/SenchaFunction.h"

/**
 * ConstantExpression class is used to store complex expression, which are actually
 * SenchaObjects. Constant Expressions are made in parser when it encounter some of primitives
 * like string literal or numbers, they also can be made on already made SenchaObject.
 * ConstantExpression is a part of AST, so it must have parent. It's a node in which it is build.
 * It implements four virtual functions: debug, evaluate.
 * It stores the value of expression.
 */
class ConstantExpression : public ASTExpression {
public:

	/**
	 * Constructor which sets value to null SenchaObject.o it
	 * @param number value will be set to SenchaObject representing this number
	 */
	ConstantExpression();


	/**
	 *Constructor which creates SenchaObject(number) and sets value to it
	 * @param number value will be set to SenchaObject representing this number
	 */
	ConstantExpression( int number) ;

	/**
	 * Constructor which creates SenchaObject(number) and sets value to it
	 * @param number value will be set to SenchaObject representing this number
	 */
	ConstantExpression( double number) ;


	/**
	 * Constructor which creates SenchaObject(text) and sets value to it
	 * @param text value will be set to SenchaObject representing this text
	 */
	ConstantExpression( std::string text);

	/**
	 * Constructor which sets value to given value
	 * @param value this->value will be set to value
	 */
	ConstantExpression(SenchaObject value);

	/** Here's value of constant expression */
	SenchaObject value;

	/** Implements visitor pattern */
	virtual void accept(Visitor * visitor);

	virtual ~ConstantExpression();

	/**Returns value set in one of constructors */
	virtual SenchaObject evaluate();

	/**Prints representation of value */
	virtual SenchaObject execute() ;

};

#endif /* CONSTANTEXPRESSION_H_ */
