2024-07-30 22:52:23 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "common.hpp"
|
|
|
|
|
2024-08-04 19:38:56 +00:00
|
|
|
struct Context;
|
|
|
|
|
|
|
|
struct Expression {
|
|
|
|
Expression() {}
|
|
|
|
Expression(uint64_t reg, Array&& code) : reg(reg), code(std::move(code)) {}
|
|
|
|
uint64_t reg;
|
|
|
|
Array code;
|
|
|
|
};
|
|
|
|
|
2024-07-30 22:52:23 +00:00
|
|
|
class Compiler {
|
|
|
|
public:
|
|
|
|
Compiler(Arena& arena) : _arena(arena) {}
|
|
|
|
|
|
|
|
Result<Value> compile(Value& expr);
|
2024-08-04 19:38:56 +00:00
|
|
|
Result<Expression> compile_expr(Context& context, Value& expr);
|
|
|
|
Result<Expression> compile_list(Context& context, Pair& expr);
|
2024-07-30 22:52:23 +00:00
|
|
|
|
|
|
|
private:
|
|
|
|
Arena& _arena;
|
|
|
|
};
|