Skip to content

Commit 380a15e

Browse files
committed
bit-simpler
1 parent 062532a commit 380a15e

File tree

1 file changed

+42
-50
lines changed

1 file changed

+42
-50
lines changed

toolchain/check/type_completion.cpp

Lines changed: 42 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -72,18 +72,6 @@ static auto NoteIncompleteNamedConstraint(
7272
}
7373
}
7474

75-
template <typename T>
76-
requires SameAsOneOf<T, SemIR::Interface, SemIR::NamedConstraint>
77-
static auto ForEachRequireImpls(
78-
Context& context, const T& entity,
79-
llvm::function_ref<auto(const SemIR::RequireImpls&)->void> f) -> void {
80-
for (auto require_impls_id :
81-
context.require_impls_blocks().Get(entity.require_impls_block_id)) {
82-
const auto& require = context.require_impls().Get(require_impls_id);
83-
f(require);
84-
}
85-
}
86-
8775
// Makes a copy of a Specific from one generic to apply to another given
8876
// `generic_id`, with a given `Self` argument appended to the end.
8977
static auto MakeCopyOfSpecificAndAppendSelf(
@@ -151,19 +139,20 @@ static auto RequireCompleteFacetType(Context& context, SemIR::LocId loc_id,
151139
return false;
152140
}
153141

154-
ForEachRequireImpls(
155-
context, interface, [&](const SemIR::RequireImpls& require) {
156-
if (require.extend_self) {
157-
auto require_specific_id = MakeCopyOfSpecificAndAppendSelf(
158-
context, loc_id, extends.specific_id, require.generic_id,
159-
GetRequireImplsSpecificSelf(context, require));
160-
auto facet_type_id = GetFacetTypeInSpecific(
161-
context, require.facet_type_inst_id, require_specific_id);
162-
if (facet_type_id.has_value()) {
163-
work.push_back(facet_type_id);
164-
}
165-
}
166-
});
142+
for (auto require_impls_id : context.require_impls_blocks().Get(
143+
interface.require_impls_block_id)) {
144+
const auto& require = context.require_impls().Get(require_impls_id);
145+
if (require.extend_self) {
146+
auto require_specific_id = MakeCopyOfSpecificAndAppendSelf(
147+
context, loc_id, extends.specific_id, require.generic_id,
148+
GetRequireImplsSpecificSelf(context, require));
149+
auto facet_type_id = GetFacetTypeInSpecific(
150+
context, require.facet_type_inst_id, require_specific_id);
151+
if (facet_type_id.has_value()) {
152+
work.push_back(facet_type_id);
153+
}
154+
}
155+
}
167156

168157
if (extends.specific_id.has_value()) {
169158
ResolveSpecificDefinition(context, loc_id, extends.specific_id);
@@ -182,19 +171,20 @@ static auto RequireCompleteFacetType(Context& context, SemIR::LocId loc_id,
182171
return false;
183172
}
184173

185-
ForEachRequireImpls(
186-
context, constraint, [&](const SemIR::RequireImpls& require) {
187-
if (require.extend_self) {
188-
auto require_specific_id = MakeCopyOfSpecificAndAppendSelf(
189-
context, loc_id, extends.specific_id, require.generic_id,
190-
GetRequireImplsSpecificSelf(context, require));
191-
auto facet_type_id = GetFacetTypeInSpecific(
192-
context, require.facet_type_inst_id, require_specific_id);
193-
if (facet_type_id.has_value()) {
194-
work.push_back(facet_type_id);
195-
}
196-
}
197-
});
174+
for (auto require_impls_id : context.require_impls_blocks().Get(
175+
constraint.require_impls_block_id)) {
176+
const auto& require = context.require_impls().Get(require_impls_id);
177+
if (require.extend_self) {
178+
auto require_specific_id = MakeCopyOfSpecificAndAppendSelf(
179+
context, loc_id, extends.specific_id, require.generic_id,
180+
GetRequireImplsSpecificSelf(context, require));
181+
auto facet_type_id = GetFacetTypeInSpecific(
182+
context, require.facet_type_inst_id, require_specific_id);
183+
if (facet_type_id.has_value()) {
184+
work.push_back(facet_type_id);
185+
}
186+
}
187+
}
198188

199189
if (extends.specific_id.has_value()) {
200190
ResolveSpecificDefinition(context, loc_id, extends.specific_id);
@@ -944,23 +934,25 @@ auto RequireIdentifiedFacetType(Context& context,
944934
for (auto extend : facet_type_info.extend_named_constraints) {
945935
const auto& constraint =
946936
context.named_constraints().Get(extend.named_constraint_id);
947-
ForEachRequireImpls(
948-
context, constraint, [&](const SemIR::RequireImpls& require) {
949-
if (facet_type_extends && require.extend_self) {
950-
extend_facet_types.push_back(require.facet_type_id);
951-
} else {
952-
impls_facet_types.push_back(require.facet_type_id);
953-
}
954-
});
937+
for (auto require_impls_id : context.require_impls_blocks().Get(
938+
constraint.require_impls_block_id)) {
939+
const auto& require = context.require_impls().Get(require_impls_id);
940+
if (facet_type_extends && require.extend_self) {
941+
extend_facet_types.push_back(require.facet_type_id);
942+
} else {
943+
impls_facet_types.push_back(require.facet_type_id);
944+
}
945+
}
955946
}
956947

957948
for (auto impls : facet_type_info.self_impls_named_constraints) {
958949
const auto& constraint =
959950
context.named_constraints().Get(impls.named_constraint_id);
960-
ForEachRequireImpls(context, constraint,
961-
[&](const SemIR::RequireImpls& require) {
962-
impls_facet_types.push_back(require.facet_type_id);
963-
});
951+
for (auto require_impls_id : context.require_impls_blocks().Get(
952+
constraint.require_impls_block_id)) {
953+
const auto& require = context.require_impls().Get(require_impls_id);
954+
impls_facet_types.push_back(require.facet_type_id);
955+
}
964956
}
965957
}
966958

0 commit comments

Comments
 (0)