mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
Remove param_refs and implicit_param_refs (#4479)
This introduces `calling_convention_param_ids`, a single block that consolidates all the information that was being used by consumers of `param_refs` and `implicit_param_refs`, in a form that's easier to produce and typically easier to consume. See also [this Discord discussion](https://discord.com/channels/655572317891461132/655578254970716160/1300545448909738125) regarding the decision to keep the return slot last in the SemIR calling convention, even though it goes first in the LLVM calling convention. --------- Co-authored-by: Jon Ross-Perkins <jperkins@google.com>
This commit is contained in:
co-authored by
Jon Ross-Perkins
parent
17272cf93c
commit
4f816dd03f
@@ -198,14 +198,14 @@ static auto PopImplIntroducerAndParamsAsNameComponent(
|
||||
auto [implicit_params_loc_id, implicit_param_patterns_id] =
|
||||
context.node_stack().PopWithNodeIdIf<Parse::NodeKind::ImplForall>();
|
||||
|
||||
ParameterBlocks parameter_blocks{
|
||||
.implicit_params_id = SemIR::InstBlockId::Invalid,
|
||||
.params_id = SemIR::InstBlockId::Invalid,
|
||||
.return_slot_id = SemIR::InstId::Invalid};
|
||||
if (implicit_param_patterns_id) {
|
||||
parameter_blocks =
|
||||
// Emit the `forall` match. This shouldn't produce any `Call` params,
|
||||
// because `impl`s are never actually called at runtime.
|
||||
auto parameter_blocks =
|
||||
CalleePatternMatch(context, *implicit_param_patterns_id,
|
||||
SemIR::InstBlockId::Invalid, SemIR::InstId::Invalid);
|
||||
CARBON_CHECK(parameter_blocks.call_params_id == SemIR::InstBlockId::Empty);
|
||||
CARBON_CHECK(parameter_blocks.return_slot_id == SemIR::InstId::Invalid);
|
||||
}
|
||||
|
||||
Parse::NodeId first_param_node_id =
|
||||
@@ -218,12 +218,11 @@ static auto PopImplIntroducerAndParamsAsNameComponent(
|
||||
.first_param_node_id = first_param_node_id,
|
||||
.last_param_node_id = last_param_node_id,
|
||||
.implicit_params_loc_id = implicit_params_loc_id,
|
||||
.implicit_params_id = parameter_blocks.implicit_params_id,
|
||||
.implicit_param_patterns_id =
|
||||
implicit_param_patterns_id.value_or(SemIR::InstBlockId::Invalid),
|
||||
.params_loc_id = Parse::NodeId::Invalid,
|
||||
.params_id = SemIR::InstBlockId::Invalid,
|
||||
.param_patterns_id = SemIR::InstBlockId::Invalid,
|
||||
.call_params_id = SemIR::InstBlockId::Invalid,
|
||||
.return_slot_pattern_id = SemIR::InstId::Invalid,
|
||||
.return_slot_id = SemIR::InstId::Invalid,
|
||||
.pattern_block_id = context.pattern_block_stack().Pop(),
|
||||
|
||||
Reference in New Issue
Block a user