// IR Function: // - 保存参数列表、基本块列表 // - 记录函数属性/元信息(按需要扩展) #include "ir/IR.h" namespace ir { Function::Function(std::string name, std::shared_ptr func_type) : Value(std::move(func_type), std::move(name)) { entry_ = CreateBlock("entry"); } // 向函数添加参数的实现。 Argument* Function::AddArgument(std::unique_ptr arg) {// 独占所有权,自动释放内存 if (!arg) return nullptr; // 1. 检查参数是否为空 auto* ptr = arg.get(); // 2. 获取原始指针(用于返回) arguments_.push_back(std::move(arg)); // 3. 将参数所有权转移到函数的参数列表中,arg已经是空指针了,不能再使用arg了 return ptr; // 4. 返回参数指针,方便调用者使用 } // 获取函数参数列表的实现。 const std::vector>& Function::GetArguments() const { return arguments_; } BasicBlock* Function::CreateBlock(const std::string& name) { auto block = std::make_unique(name); auto* ptr = block.get(); ptr->SetParent(this); blocks_.push_back(std::move(block)); if (!entry_) { entry_ = ptr; } return ptr; } BasicBlock* Function::GetEntry() { return entry_; } const BasicBlock* Function::GetEntry() const { return entry_; } const std::vector>& Function::GetBlocks() const { return blocks_; } } // namespace ir