@@ -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.
8977static 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 );
@@ -958,23 +948,25 @@ auto RequireIdentifiedFacetType(Context& context,
958948 for (auto extend : facet_type_info.extend_named_constraints ) {
959949 const auto & constraint =
960950 context.named_constraints ().Get (extend.named_constraint_id );
961- ForEachRequireImpls (
962- context, constraint, [&](const SemIR::RequireImpls& require) {
963- if (facet_type_extends && require.extend_self ) {
964- extend_facet_types.push_back (require.facet_type_id );
965- } else {
966- impls_facet_types.push_back (require.facet_type_id );
967- }
968- });
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+ if (facet_type_extends && require.extend_self ) {
955+ extend_facet_types.push_back (require.facet_type_id );
956+ } else {
957+ impls_facet_types.push_back (require.facet_type_id );
958+ }
959+ }
969960 }
970961
971962 for (auto impls : facet_type_info.self_impls_named_constraints ) {
972963 const auto & constraint =
973964 context.named_constraints ().Get (impls.named_constraint_id );
974- ForEachRequireImpls (context, constraint,
975- [&](const SemIR::RequireImpls& require) {
976- impls_facet_types.push_back (require.facet_type_id );
977- });
965+ for (auto require_impls_id : context.require_impls_blocks ().Get (
966+ constraint.require_impls_block_id )) {
967+ const auto & require = context.require_impls ().Get (require_impls_id);
968+ impls_facet_types.push_back (require.facet_type_id );
969+ }
978970 }
979971 }
980972
0 commit comments