You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

38 lines
1.0 KiB

// IR Function
#include "ir/IR.h"
namespace ir {
Function::Function(std::string name, std::shared_ptr<Type> ret_type)
: Value(std::move(ret_type), std::move(name)) {
entry_ = CreateBlock("entry");
}
BasicBlock* Function::CreateBlock(const std::string& name) {
auto block = std::make_unique<BasicBlock>(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<std::unique_ptr<BasicBlock>>& Function::GetBlocks() const {
return blocks_;
}
Argument* Function::AddArgument(std::shared_ptr<Type> ty,
const std::string& name) {
args_.push_back(std::make_unique<Argument>(std::move(ty), name));
return args_.back().get();
}
Argument* Function::GetArgument(size_t i) const {
if (i >= args_.size()) return nullptr;
return args_[i].get();
}
} // namespace ir