#ifndef muz_COMPILER_HPP #define muz_COMPILER_HPP #include "commons.hpp" #include "Node.hpp" #include "AudioConf.hpp" #include "Signal.hpp" namespace muz { MUZ_ERROR(compile_error); /** * Create a signal given an abstract syntax tree. * @see Signal * @see Parser * @see Node **/ class Compiler { public: explicit Compiler(AudioConf const& conf); virtual ~Compiler(); std::vector> compile(std::shared_ptr node); void compile_node(std::shared_ptr node); void execute_cmd(std::string const& name, std::shared_ptr node); private: AudioConf const& m_conf; std::vector> m_signals; std::vector> m_outputs; // signal stack // ------------ void push(std::unique_ptr signal); std::unique_ptr pop(); void check_cmd_arity(Node const& node, int arity); }; } #endif