#include "macro.hpp" void assert_fail(Node const& node, Module& mod) { try { mod.static_pass().execute(*node.child_at(1)); mod.compiler().compile(*node.child_at(1), mod.program()); Loc loc = node.loc(); std::cerr << loc.file_path().string() << ":" << loc.line(); std::cerr << " ASSERTION FAILED" << std::endl; exit(-1); } catch (std::exception const&) { } size_t addr = mod.program().add_constant(std::make_shared (TYPE_NIL, node.loc(), 0)); mod.program().append(OPCODE_LOAD_CONST, addr); } void declare(Node const& node, Module &mod) { std::string ident = node.child_at(1)->repr(); mod.compiler().compile(*node.child_at(2), mod.program()); auto entry = mod.sym().find_any(ident); assert(entry); size_t addr = mod.sym().gen_addr(); mod.sym().declare(ident, addr, entry->scope); mod.program().append(OPCODE_STORE_LOCAL, addr); } void block(Node const& node, Module& mod) { mod.sym().enter_scope(); for (size_t i=1; i