// 保存函数列表并提供模块级上下文访问。

#include "ir/IR.h"

namespace ir {

Context& Module::GetContext() { return context_; }

const Context& Module::GetContext() const { return context_; }

Function* Module::CreateFunction(const std::string& name,
                                 std::shared_ptr<Type> ret_type,
                                 std::vector<std::shared_ptr<Type>> param_types) {
  functions_.push_back(std::make_unique<Function>(name, std::move(ret_type),
                                                 std::move(param_types)));
  return functions_.back().get();
}

const std::vector<std::unique_ptr<Function>>& Module::GetFunctions() const {
  return functions_;
}

GlobalValue* Module::CreateGlobalValue(const std::string& name,
                                       std::shared_ptr<Type> ty,
                                       ConstantValue* init) {
  global_values_.push_back(std::make_unique<GlobalValue>(std::move(ty), name, init));
  return global_values_.back().get();
}

const std::vector<std::unique_ptr<GlobalValue>>& Module::GetGlobalValues() const {
  return global_values_;
}

}  // namespace ir
