muzgen/lib/Compiler.hpp

44 lines
947 B
C++

#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<std::unique_ptr<Signal>> compile(std::shared_ptr<Node> node);
void compile_node(std::shared_ptr<Node> node);
void execute_cmd(std::string const& name, std::shared_ptr<Node> node);
private:
AudioConf const& m_conf;
std::vector<std::unique_ptr<Signal>> m_signals;
std::vector<std::unique_ptr<Signal>> m_outputs;
// signal stack
// ------------
void push(std::unique_ptr<Signal> signal);
std::unique_ptr<Signal> pop();
void check_cmd_arity(Node const& node, int arity);
};
}
#endif