Files
furlang/furc/include/furc/front/ir_generator.hpp
T
CHatingPython 646d185d40 Implement basic IR generator
Signed-off-by: CHatingPython <chatingpython@gmail.com>
2026-05-31 19:16:53 +02:00

44 lines
1.7 KiB
C++

#ifndef FURC_FRONT_IR_GENERATOR_HPP
#define FURC_FRONT_IR_GENERATOR_HPP
#include "furc/ast/fwd.hpp"
#include "furc/ast/visitor.hpp"
#include "furlang/ir/module.hpp"
#include <unordered_map>
namespace furc {
namespace front {
class ir_generator final : public ast::visitor {
public:
ir_generator() = default;
~ir_generator() override = default;
ir_generator(ir_generator&&) = default;
ir_generator& operator=(ir_generator&&) = default;
ir_generator(const ir_generator&) = default;
ir_generator& operator=(const ir_generator&) = default;
public:
furlang::ir::module&& move_module() { return std::move(m_module); }
public:
void visit_function_definition_node(const ast::function_definition_node& funcDef) override;
void visit_return_statement_node(const ast::return_statement_node& returnStmt) override;
void visit_string_literal_node(const ast::string_literal_node& node) override;
void visit_integer_literal_node(const ast::integer_literal_node& node) override;
void visit_var_read_expression_node(const ast::var_read_expression_node& node) override;
void visit_unaryop_expression_node(const ast::unaryop_expression_node& node) override;
void visit_binop_expression_node(const ast::binop_expression_node& node) override;
void visit_var_assign_expression_node(const ast::var_assign_expression_node& node) override;
private:
furlang::ir::module m_module;
std::shared_ptr<furlang::ir::block> m_currentBlock;
std::uint32_t m_registerCounter = 0;
std::unordered_map<std::string_view, std::uint32_t> m_variableMap;
};
} // namespace front
} // namespace furc
#endif // FURC_FRONT_IR_GENERATOR_HPP