Replace form insts with actions (#7100)

See
[here](https://docs.google.com/document/d/1rWcueFwIfZox6GKVGxiUG4cBzjrZ6djXiIDGyJDtrE4/edit?tab=t.0)
for the design doc.

This also removes the default value of the `result_type_inst_id`
parameter of `HandleAction`, moves it before the action in the parameter
list, and documents it. This solves two problems:
- The default made it easy to forget, leading to unnecessary
`TypeOfInst` instructions.
- When it was present, putting it after the fairly "bulky" action
argument tended to make the callsite harder to read.
This commit is contained in:
Geoff Romer
2026-04-29 18:13:42 +00:00
committed by GitHub
parent 0124aae041
commit 4c9049346d
97 changed files with 1181 additions and 834 deletions
-15
View File
@@ -93,21 +93,6 @@ static auto GetExprCategoryImpl(const File* ir, InstId inst_id)
return ExprCategory::ReprInitializing;
}
}
} else if constexpr (std::same_as<TypedInstT, FormBinding>) {
auto form_id = ir->entity_names().Get(inst.entity_name_id).form_id;
auto form_inst = ir->insts().Get(form_id);
CARBON_KIND_SWITCH(form_inst) {
case InitForm::Kind:
// A `var` binding pattern produces a `ref` binding.
case RefForm::Kind:
return ExprCategory::DurableRef;
case ValueForm::Kind:
return ExprCategory::Value;
case ErrorInst::Kind:
return ExprCategory::Error;
default:
CARBON_FATAL("Unexpected kind for form inst {0}", form_inst);
}
} else {
static_assert(
TypedInstT::Kind.expr_category().TryAsComputedCategory() !=