// IR 基本块：
// - 保存指令序列
// - 维护或可计算前驱/后继关系，用于 CFG 分析与优化

#include "ir/IR.h"

#include <utility>

namespace ir {

BasicBlock::BasicBlock(std::string name) : name_(std::move(name)) {}

const std::string& BasicBlock::name() const { return name_; }

Function* BasicBlock::parent() const { return parent_; }

void BasicBlock::set_parent(Function* parent) { parent_ = parent; }

bool BasicBlock::HasTerminator() const {
  return !instructions_.empty() && instructions_.back()->IsTerminator();
}

const std::vector<std::unique_ptr<Instruction>>& BasicBlock::instructions()
    const {
  return instructions_;
}

const std::vector<BasicBlock*>& BasicBlock::predecessors() const {
  return predecessors_;
}

const std::vector<BasicBlock*>& BasicBlock::successors() const {
  return successors_;
}

}  // namespace ir
