mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
Refactor function return type representation (#6463)
This separates the return type from the return pattern, and replaces the return pattern with a block of return patterns. This is a step toward support for `ref` returns (where there's no corresponding return pattern) and compund-form returns (where there may be multiple return patterns).
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
|
||||
namespace Carbon::Check {
|
||||
|
||||
auto PopNameComponent(Context& context, SemIR::InstId return_slot_pattern_id)
|
||||
auto PopNameComponent(Context& context, SemIR::InstBlockId return_patterns_id)
|
||||
-> NameComponent {
|
||||
Parse::NodeId first_param_node_id = Parse::NoneNodeId();
|
||||
Parse::NodeId last_param_node_id = Parse::NoneNodeId();
|
||||
@@ -48,10 +48,9 @@ auto PopNameComponent(Context& context, SemIR::InstId return_slot_pattern_id)
|
||||
auto pattern_block_id = SemIR::InstBlockId::None;
|
||||
if (param_patterns_id->has_value() ||
|
||||
implicit_param_patterns_id->has_value() ||
|
||||
return_slot_pattern_id.has_value()) {
|
||||
call_params_id =
|
||||
CalleePatternMatch(context, *implicit_param_patterns_id,
|
||||
*param_patterns_id, return_slot_pattern_id);
|
||||
(!context.inst_blocks().GetOrEmpty(return_patterns_id).empty())) {
|
||||
call_params_id = CalleePatternMatch(context, *implicit_param_patterns_id,
|
||||
*param_patterns_id, return_patterns_id);
|
||||
pattern_block_id = context.pattern_block_stack().Pop();
|
||||
context.full_pattern_stack().PopFullPattern();
|
||||
}
|
||||
@@ -69,7 +68,6 @@ auto PopNameComponent(Context& context, SemIR::InstId return_slot_pattern_id)
|
||||
.params_loc_id = params_node_id,
|
||||
.param_patterns_id = *param_patterns_id,
|
||||
.call_params_id = call_params_id,
|
||||
.return_slot_pattern_id = return_slot_pattern_id,
|
||||
.pattern_block_id = pattern_block_id,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user