#include "gmachine.hpp" #include namespace lily { std::ostream& operator<<(std::ostream& os, instruction& inst) { inst.to_stream(os); return os; } std::ostream& instruction_slide::to_stream(std::ostream& os) { os << "slide(" << amount << ")"; return os; } std::ostream& instruction_alloc::to_stream(std::ostream& os) { os << "alloc(" << amount << ")"; return os; } std::ostream& instruction_pop::to_stream(std::ostream& os) { os << "pop(" << amount << ")"; return os; } std::ostream& instruction_unwind::to_stream(std::ostream& os) { os << "unwind"; return os; } std::ostream& instruction_push_global::to_stream(std::ostream& os) { os << "pushglobal(" << name << ")"; return os; } std::ostream& instruction_push_int::to_stream(std::ostream& os) { os << "pushint(" << value << ")"; return os; } std::ostream& instruction_push_str::to_stream(std::ostream& os) { os << "pushstr(" << str << ")"; return os; } std::ostream& instruction_push::to_stream(std::ostream& os) { os << "push(" << offset << ")"; return os; } std::ostream& instruction_mkapp::to_stream(std::ostream& os) { os << "mkapp"; return os; } std::ostream& instruction_eval::to_stream(std::ostream& os) { os << "eval"; return os; } std::ostream& instruction_op::to_stream(std::ostream& os) { os << "op(" << op_supercombinator(op) << ")"; return os; } std::ostream& instruction_cond::to_stream(std::ostream& os) { os << "cond"; return os; } std::ostream& instruction_update::to_stream(std::ostream& os) { os << "update(" << offset << ")"; return os; } std::ostream& instruction_pack::to_stream(std::ostream& os) { os << "pack(" << constructor << ", " << arity << ")"; return os; } std::ostream& instruction_split::to_stream(std::ostream& os) { os << "split(" << arity << ")"; return os; } std::ostream& instruction_jump::to_stream(std::ostream& os) { os << "jump"; return os; } }