mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
Refactor lower handlers to use overloads. (#4120)
Renames Lower::Handle* to Lower::LowerFunctionInst. This allows writing a templated handler for instructions, moving code out of the macro expansion and removing some of the redundancy in things like `HandleAddrOf(..., SemIR::AddrOf inst)`
This commit is contained in:
@@ -7,8 +7,8 @@
|
||||
|
||||
namespace Carbon::Lower {
|
||||
|
||||
auto HandleBindValue(FunctionContext& context, SemIR::InstId inst_id,
|
||||
SemIR::BindValue inst) -> void {
|
||||
auto HandleInst(FunctionContext& context, SemIR::InstId inst_id,
|
||||
SemIR::BindValue inst) -> void {
|
||||
switch (auto rep = SemIR::GetValueRepr(context.sem_ir(), inst.type_id);
|
||||
rep.kind) {
|
||||
case SemIR::ValueRepr::Unknown:
|
||||
@@ -34,21 +34,21 @@ auto HandleBindValue(FunctionContext& context, SemIR::InstId inst_id,
|
||||
}
|
||||
}
|
||||
|
||||
auto HandleTemporary(FunctionContext& context, SemIR::InstId inst_id,
|
||||
SemIR::Temporary inst) -> void {
|
||||
auto HandleInst(FunctionContext& context, SemIR::InstId inst_id,
|
||||
SemIR::Temporary inst) -> void {
|
||||
context.FinishInit(inst.type_id, inst.storage_id, inst.init_id);
|
||||
context.SetLocal(inst_id, context.GetValue(inst.storage_id));
|
||||
}
|
||||
|
||||
auto HandleTemporaryStorage(FunctionContext& context, SemIR::InstId inst_id,
|
||||
SemIR::TemporaryStorage inst) -> void {
|
||||
auto HandleInst(FunctionContext& context, SemIR::InstId inst_id,
|
||||
SemIR::TemporaryStorage inst) -> void {
|
||||
context.SetLocal(inst_id,
|
||||
context.builder().CreateAlloca(context.GetType(inst.type_id),
|
||||
nullptr, "temp"));
|
||||
}
|
||||
|
||||
auto HandleValueAsRef(FunctionContext& context, SemIR::InstId inst_id,
|
||||
SemIR::ValueAsRef inst) -> void {
|
||||
auto HandleInst(FunctionContext& context, SemIR::InstId inst_id,
|
||||
SemIR::ValueAsRef inst) -> void {
|
||||
CARBON_CHECK(SemIR::GetExprCategory(context.sem_ir(), inst.value_id) ==
|
||||
SemIR::ExprCategory::Value);
|
||||
CARBON_CHECK(SemIR::GetValueRepr(context.sem_ir(), inst.type_id).kind ==
|
||||
@@ -56,8 +56,8 @@ auto HandleValueAsRef(FunctionContext& context, SemIR::InstId inst_id,
|
||||
context.SetLocal(inst_id, context.GetValue(inst.value_id));
|
||||
}
|
||||
|
||||
auto HandleValueOfInitializer(FunctionContext& context, SemIR::InstId inst_id,
|
||||
SemIR::ValueOfInitializer inst) -> void {
|
||||
auto HandleInst(FunctionContext& context, SemIR::InstId inst_id,
|
||||
SemIR::ValueOfInitializer inst) -> void {
|
||||
CARBON_CHECK(SemIR::GetExprCategory(context.sem_ir(), inst.init_id) ==
|
||||
SemIR::ExprCategory::Initializing);
|
||||
CARBON_CHECK(SemIR::GetValueRepr(context.sem_ir(), inst.type_id).kind ==
|
||||
|
||||
Reference in New Issue
Block a user