This repository has been archived on 2024-03-07. You can view files and clone it, but cannot push or open issues/pull-requests.
zarn/src/Compiler.cpp

43 lines
913 B
C++
Raw Normal View History

2023-09-17 19:36:58 +00:00
#include "Compiler.hpp"
#include "src/Node.hpp"
#include "src/Program.hpp"
namespace zn
{
/*explicit*/ Compiler::Compiler(Logger& logger)
: m_logger { logger }
{
}
/*virtual*/ Compiler::~Compiler()
{
}
void Compiler::compile(Node const& node, Program& program)
{
switch (node.type())
{
case NODE_MODULE: {
for (size_t i=0; i<node.size(); i++)
{
compile(*node.child_at(i), program);
program.append(OPCODE_POP);
}
} break;
case NODE_INT: {
size_t addr = program
.add_constant(std::make_shared<Constant>
(TYPE_INT, std::stoi(node.repr())));
program.append(OPCODE_LOAD_CONST, addr);
} break;
default: {
std::cerr << "cannot compile node '"
<< node.string() << "'" << std::endl;
abort();
} break;
}
}
}