#include "irgen/IRGen.h"

#include <memory>
#include <stdexcept>

#include "SysYParser.h"
#include "antlr4-runtime.h"
#include "ir/IR.h"

std::unique_ptr<ir::Module> GenerateIR(antlr4::tree::ParseTree* tree) {
  if (!tree) {
    throw std::runtime_error("[irgen] 语法树为空");
  }

  auto* cu = dynamic_cast<SysYParser::CompUnitContext*>(tree);
  if (!cu) {
    throw std::runtime_error("[irgen] 语法树根节点不是 compUnit");
  }

  auto module = std::make_unique<ir::Module>();
  IRGenImpl gen(*module);
  gen.Gen(*cu);
  return module;
}
