mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
Move default value inst ids to a dedicated value store. (#7810)
Per #7737 we move the default value `InstId` storage from a block in the `SemIR::Function` data structure to a `SemIR::File` scoped `ValueStore`. Moves the default value consistency checking to the general merge argument pattern matching logic, which changes the error message issued to the generic one.
This commit is contained in:
@@ -179,6 +179,9 @@ class ImportContext {
|
||||
auto import_constant_values() -> const SemIR::ConstantValueStore& {
|
||||
return import_ir().constant_values();
|
||||
}
|
||||
auto import_default_values() -> const SemIR::DefaultValueStore& {
|
||||
return import_ir().default_values();
|
||||
}
|
||||
auto import_entity_names() -> const SemIR::EntityNameStore& {
|
||||
return import_ir().entity_names();
|
||||
}
|
||||
@@ -267,6 +270,9 @@ class ImportContext {
|
||||
auto local_constant_values() -> SemIR::ConstantValueStore& {
|
||||
return local_ir().constant_values();
|
||||
}
|
||||
auto local_default_values() -> SemIR::DefaultValueStore& {
|
||||
return local_ir().default_values();
|
||||
}
|
||||
auto local_entity_names() -> SemIR::EntityNameStore& {
|
||||
return local_ir().entity_names();
|
||||
}
|
||||
@@ -2306,6 +2312,12 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver,
|
||||
SemIR::DefaultValuePattern inst)
|
||||
-> ResolveResult {
|
||||
auto subpattern = GetLocalImportRefInfo(resolver, inst.subpattern_id);
|
||||
const auto& import_default_value =
|
||||
resolver.import_default_values().Get(inst.default_value_id);
|
||||
// We import the first owning declaration of a function, which must always
|
||||
// have default values completely specified.
|
||||
CARBON_CHECK(!import_default_value.is_unspecified);
|
||||
auto value = GetLocalImportRefInfo(resolver, import_default_value.value_id);
|
||||
if (resolver.HasNewWork()) {
|
||||
return ResolveResult::Retry();
|
||||
}
|
||||
@@ -2316,7 +2328,10 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver,
|
||||
.type_id = resolver.local_types().GetTypeIdForTypeConstantId(
|
||||
subpattern.local_type_const_id),
|
||||
.subpattern_id = AddLoadedImportRef(resolver, subpattern),
|
||||
.default_value_id = inst.default_value_id,
|
||||
.default_value_id = resolver.local_default_values().Add(
|
||||
{.raw_id = SemIR::InstId::None,
|
||||
.value_id = AddLoadedImportRef(resolver, value),
|
||||
.is_unspecified = false}),
|
||||
});
|
||||
}
|
||||
|
||||
@@ -2425,7 +2440,6 @@ static auto ImportFunctionDecl(
|
||||
{GetIncompleteLocalEntityBase(context, function_decl_id, import_function),
|
||||
{.call_param_patterns_id = SemIR::InstBlockId::None,
|
||||
.call_params_id = SemIR::InstBlockId::None,
|
||||
.call_param_default_values_id = SemIR::InstBlockId::Empty,
|
||||
.call_param_ranges = import_function.call_param_ranges,
|
||||
.return_type_inst_id = SemIR::TypeInstId::None,
|
||||
.return_form_inst_id = SemIR::InstId::None,
|
||||
@@ -2571,8 +2585,6 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver,
|
||||
|
||||
auto call_param_patterns = GetLocalBlockImportRefInfo(
|
||||
resolver, import_function.call_param_patterns_id);
|
||||
auto call_param_default_values = GetLocalBlockImportRefInfo(
|
||||
resolver, import_function.call_param_default_values_id);
|
||||
auto return_type_const_id = SemIR::ConstantId::None;
|
||||
if (import_function.return_type_inst_id.has_value()) {
|
||||
return_type_const_id =
|
||||
@@ -2627,10 +2639,6 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver,
|
||||
// Add the function declaration.
|
||||
new_function.call_param_patterns_id =
|
||||
AddLoadedImportRefBlock(resolver, call_param_patterns);
|
||||
if (call_param_default_values.has_value()) {
|
||||
new_function.call_param_default_values_id =
|
||||
AddLoadedImportRefBlock(resolver, *call_param_default_values);
|
||||
}
|
||||
new_function.parent_scope_id = parent_scope_id;
|
||||
new_function.implicit_param_patterns_id =
|
||||
AddLoadedImportRefBlock(resolver, implicit_param_patterns);
|
||||
|
||||
Reference in New Issue
Block a user