This repository has been archived on 2024-03-07. You can view files and clone it, but cannot push or open issues/pull-requests.
2023-09-27 18:18:05 +00:00
|
|
|
#ifndef wg_COMPILER_HPP
|
|
|
|
#define wg_COMPILER_HPP
|
|
|
|
|
|
|
|
#include <llvm/IR/LLVMContext.h>
|
|
|
|
#include <llvm/IR/IRBuilder.h>
|
|
|
|
#include <llvm/IR/Module.h>
|
|
|
|
|
|
|
|
#include "commons.hpp"
|
|
|
|
#include "Node.hpp"
|
2023-09-28 19:37:10 +00:00
|
|
|
#include "SymTable.hpp"
|
2023-09-27 18:18:05 +00:00
|
|
|
|
|
|
|
namespace wg
|
|
|
|
{
|
|
|
|
class Compiler
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
explicit Compiler();
|
|
|
|
virtual ~Compiler();
|
|
|
|
|
2023-09-27 21:05:04 +00:00
|
|
|
void gen();
|
|
|
|
|
|
|
|
llvm::Value* compile(std::shared_ptr<Node> node);
|
2023-09-27 18:18:05 +00:00
|
|
|
private:
|
|
|
|
std::unique_ptr<llvm::LLVMContext> m_context =
|
|
|
|
std::make_unique<llvm::LLVMContext>();
|
|
|
|
|
|
|
|
std::unique_ptr<llvm::IRBuilder<>> m_builder =
|
|
|
|
std::make_unique<llvm::IRBuilder<>>(*m_context);
|
|
|
|
|
|
|
|
std::unique_ptr<llvm::Module> m_module =
|
|
|
|
std::make_unique<llvm::Module>("my module", *m_context);
|
2023-09-28 19:37:10 +00:00
|
|
|
|
|
|
|
std::unique_ptr<SymTable> m_sym = std::make_unique<SymTable>();
|
2023-09-27 18:18:05 +00:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|