Skip to content
Snippets Groups Projects
StatementList.h 1.09 KiB
Newer Older
  • Learn to ignore specific revisions
  • #ifndef _CLI_STATEMENT_LIST_H_
    #define _CLI_STATEMENT_LIST_H_
    
    #include <ast/Statement.h>
    
    namespace cli {
    
    class StatementList : public Statement {
    	std::shared_ptr < Statement > m_statement;
    	std::shared_ptr < StatementList > m_next;
    
    public:
    	StatementList ( std::shared_ptr < Statement > statement, std::shared_ptr < StatementList > next ) : m_statement ( statement ), m_next ( next ) {
    	}
    
    
    	virtual std::shared_ptr < abstraction::OperationAbstraction > translateAndEval ( const std::shared_ptr < abstraction::OperationAbstraction > & prev, Environment & environment ) const override {
    		std::shared_ptr < abstraction::OperationAbstraction > next = m_statement->translateAndEval ( prev, environment );
    
    		if ( m_next != nullptr )
    
    			return m_next->translateAndEval ( next, environment );
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    
    	void append ( std::shared_ptr < Statement > statement ) {
    		if ( m_next == nullptr ) {
    			m_next = std::make_shared < StatementList > ( std::move ( statement ), nullptr );
    		} else {
    			m_next->append ( std::move ( statement ) );
    		}
    	}
    
    };
    
    } /* namespace cli */
    
    #endif /* _CLI_STATEMENT_LIST_H_ */