Model the return slot as an output parameter (#4432)

Also fix `Param` insts to have meaningful names in pretty-printing, to
help clarify relationship with return slot.
This commit is contained in:
Geoff Romer
2024-10-23 16:53:34 +00:00
committed by GitHub
parent 5038218cea
commit 9266f867f9
463 changed files with 7401 additions and 4939 deletions
+7 -3
View File
@@ -9,7 +9,8 @@
namespace Carbon::Check {
auto PopNameComponent(Context& context) -> NameComponent {
auto PopNameComponent(Context& context, SemIR::InstId return_slot_pattern_id)
-> NameComponent {
Parse::NodeId first_param_node_id = Parse::InvalidNodeId();
Parse::NodeId last_param_node_id = Parse::InvalidNodeId();
@@ -42,8 +43,9 @@ auto PopNameComponent(Context& context) -> NameComponent {
implicit_param_patterns_id = SemIR::InstBlockId::Invalid;
}
auto [implicit_params_id, params_id] = CalleePatternMatch(
context, *implicit_param_patterns_id, *param_patterns_id);
auto [implicit_params_id, params_id, return_slot_id] =
CalleePatternMatch(context, *implicit_param_patterns_id,
*param_patterns_id, return_slot_pattern_id);
auto [name_loc_id, name_id] = context.node_stack().PopNameWithNodeId();
return {
@@ -57,6 +59,8 @@ auto PopNameComponent(Context& context) -> NameComponent {
.params_loc_id = params_loc_id,
.params_id = params_id,
.param_patterns_id = *param_patterns_id,
.return_slot_pattern_id = return_slot_pattern_id,
.return_slot_id = return_slot_id,
.pattern_block_id = context.pattern_block_stack().Pop(),
};
}