diff --git a/alib2cli/src/ast/statements/StatementList.cpp b/alib2cli/src/ast/statements/StatementList.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ffbb93912433101c06dd86aa5f372d7106b9085f --- /dev/null +++ b/alib2cli/src/ast/statements/StatementList.cpp @@ -0,0 +1,23 @@ +#include <ast/statements/StatementList.h> + +namespace cli { + +StatementList::StatementList ( ext::vector < std::shared_ptr < Statement > > statements ) : m_statements ( std::move ( statements ) ) { +} + +std::shared_ptr < abstraction::Value > StatementList::translateAndEval ( const std::shared_ptr < abstraction::Value > &, Environment & environment ) const { + if ( m_statements.empty ( ) ) + throw std::invalid_argument ( "Statement list can't be empty" ); + + std::shared_ptr < abstraction::Value > next = m_statements [ 0 ]->translateAndEval ( nullptr, environment ); + for ( size_t i = 1; i < m_statements.size ( ); ++ i ) + next = m_statements [ i ]->translateAndEval ( next, environment ); + + return next; +} + +void StatementList::append ( std::shared_ptr < Statement > statement ) { + m_statements.emplace_back ( std::move ( statement ) ); +} + +} /* namespace cli */ diff --git a/alib2cli/src/ast/statements/StatementList.h b/alib2cli/src/ast/statements/StatementList.h index f1d17824459ca992ec30201eebe645777d2b42ea..74bf355ffaf4f16b36b14f7382b80750959d6c79 100644 --- a/alib2cli/src/ast/statements/StatementList.h +++ b/alib2cli/src/ast/statements/StatementList.h @@ -8,25 +8,12 @@ class StatementList final : public Statement { ext::vector < std::shared_ptr < Statement > > m_statements; public: - StatementList ( ext::vector < std::shared_ptr < Statement > > statements ) : m_statements ( std::move ( statements ) ) { - } + StatementList ( ext::vector < std::shared_ptr < Statement > > statements ); - std::shared_ptr < abstraction::Value > translateAndEval ( const std::shared_ptr < abstraction::Value > &, Environment & environment ) const override { - if ( m_statements.empty ( ) ) - throw std::invalid_argument ( "Statement list can't be empty" ); + std::shared_ptr < abstraction::Value > translateAndEval ( const std::shared_ptr < abstraction::Value > &, Environment & environment ) const override; - std::shared_ptr < abstraction::Value > next = m_statements [ 0 ]->translateAndEval ( nullptr, environment ); - for ( size_t i = 1; i < m_statements.size ( ); ++ i ) - next = m_statements [ i ]->translateAndEval ( next, environment ); - - return next; - } - - void append ( std::shared_ptr < Statement > statement ) { - m_statements.emplace_back ( std::move ( statement ) ); - } + void append ( std::shared_ptr < Statement > statement ); }; } /* namespace cli */ -