@@ -1030,7 +1030,41 @@ BaseType::get_subst_argument_mappings () const
10301030
10311031  return  empty;
10321032}
1033+ //  CallableTypeInterface
1034+ void 
1035+ CallableTypeInterface::setup_fn_once_output  () const 
1036+ {
1037+   DefId trait_id
1038+     = mappings.get_lang_item  (LangItem::Kind::FN_ONCE, UNKNOWN_LOCATION);
1039+   DefId trait_item_id
1040+     = mappings.get_lang_item  (LangItem::Kind::FN_ONCE_OUTPUT, UNKNOWN_LOCATION);
1041+ 
1042+   //  resolve to the trait
1043+   HIR::Item *item = mappings.lookup_defid  (trait_id).value  ();
1044+   rust_assert  (item->get_item_kind  () == HIR::Item::ItemKind::Trait);
1045+   HIR::Trait *trait = static_cast <HIR::Trait *> (item);
1046+ 
1047+   Resolver::TraitReference *trait_ref
1048+     = Resolver::TraitResolver::Resolve  (*trait);
1049+   rust_assert  (!trait_ref->is_error  ());
1050+ 
1051+   //  resolve to trait item
1052+   HIR::TraitItem *trait_item
1053+     = mappings.lookup_trait_item_defid  (trait_item_id).value  ();
1054+   rust_assert  (trait_item->get_item_kind  ()
1055+ 	       == HIR::TraitItem::TraitItemKind::TYPE);
1056+   std::string item_identifier = trait_item->trait_identifier  ();
1057+ 
1058+   //  setup associated types  #[lang = "fn_once_output"]
1059+   Resolver::TraitItemReference *item_reference = nullptr ;
1060+   bool  found = trait_ref->lookup_trait_item_by_type  (
1061+     item_identifier, Resolver::TraitItemReference::TraitItemType::TYPE,
1062+     &item_reference);
1063+   rust_assert  (found);
10331064
1065+   //  setup
1066+   item_reference->associated_type_set  (get_return_type  ());
1067+ }
10341068//  InferType
10351069
10361070InferType::InferType  (HirId ref, InferTypeKind infer_kind, TypeHint hint,
@@ -2347,56 +2381,6 @@ FnPtr::clone () const
23472381		    get_combined_refs  ());
23482382}
23492383
2350- void 
2351- FnPtr::setup_fn_once_output  () const 
2352- {
2353-   //  lookup the lang items
2354-   auto  fn_once_lookup = mappings.lookup_lang_item  (LangItem::Kind::FN_ONCE);
2355-   auto  fn_once_output_lookup
2356-     = mappings.lookup_lang_item  (LangItem::Kind::FN_ONCE_OUTPUT);
2357-   if  (!fn_once_lookup)
2358-     {
2359-       rust_fatal_error  (UNKNOWN_LOCATION,
2360- 			" Missing required %<fn_once%> lang item"  );
2361-       return ;
2362-     }
2363-   if  (!fn_once_output_lookup)
2364-     {
2365-       rust_fatal_error  (UNKNOWN_LOCATION,
2366- 			" Missing required %<fn_once_ouput%> lang item"  );
2367-       return ;
2368-     }
2369- 
2370-   DefId &trait_id = fn_once_lookup.value  ();
2371-   DefId &trait_item_id = fn_once_output_lookup.value  ();
2372- 
2373-   //  resolve to the trait
2374-   HIR::Item *item = mappings.lookup_defid  (trait_id).value  ();
2375-   rust_assert  (item->get_item_kind  () == HIR::Item::ItemKind::Trait);
2376-   HIR::Trait *trait = static_cast <HIR::Trait *> (item);
2377- 
2378-   Resolver::TraitReference *trait_ref
2379-     = Resolver::TraitResolver::Resolve  (*trait);
2380-   rust_assert  (!trait_ref->is_error  ());
2381- 
2382-   //  resolve to trait item
2383-   HIR::TraitItem *trait_item
2384-     = mappings.lookup_trait_item_defid  (trait_item_id).value  ();
2385-   rust_assert  (trait_item->get_item_kind  ()
2386- 	       == HIR::TraitItem::TraitItemKind::TYPE);
2387-   std::string item_identifier = trait_item->trait_identifier  ();
2388- 
2389-   //  setup associated types  #[lang = "fn_once_output"]
2390-   Resolver::TraitItemReference *item_reference = nullptr ;
2391-   bool  found = trait_ref->lookup_trait_item_by_type  (
2392-     item_identifier, Resolver::TraitItemReference::TraitItemType::TYPE,
2393-     &item_reference);
2394-   rust_assert  (found);
2395- 
2396-   //  setup
2397-   item_reference->associated_type_set  (&get_result_type  ());
2398- }
2399- 
24002384void 
24012385ClosureType::accept_vis  (TyVisitor &vis)
24022386{
@@ -2455,56 +2439,6 @@ ClosureType::handle_substitions (SubstitutionArgumentMappings &mappings)
24552439  return  nullptr ;
24562440}
24572441
2458- void 
2459- ClosureType::setup_fn_once_output  () const 
2460- {
2461-   //  lookup the lang items
2462-   auto  fn_once_lookup = mappings.lookup_lang_item  (LangItem::Kind::FN_ONCE);
2463-   auto  fn_once_output_lookup
2464-     = mappings.lookup_lang_item  (LangItem::Kind::FN_ONCE_OUTPUT);
2465-   if  (!fn_once_lookup)
2466-     {
2467-       rust_fatal_error  (UNKNOWN_LOCATION,
2468- 			" Missing required %<fn_once%> lang item"  );
2469-       return ;
2470-     }
2471-   if  (!fn_once_output_lookup)
2472-     {
2473-       rust_fatal_error  (UNKNOWN_LOCATION,
2474- 			" Missing required %<fn_once_ouput%> lang item"  );
2475-       return ;
2476-     }
2477- 
2478-   DefId &trait_id = fn_once_lookup.value  ();
2479-   DefId &trait_item_id = fn_once_output_lookup.value  ();
2480- 
2481-   //  resolve to the trait
2482-   HIR::Item *item = mappings.lookup_defid  (trait_id).value  ();
2483-   rust_assert  (item->get_item_kind  () == HIR::Item::ItemKind::Trait);
2484-   HIR::Trait *trait = static_cast <HIR::Trait *> (item);
2485- 
2486-   Resolver::TraitReference *trait_ref
2487-     = Resolver::TraitResolver::Resolve  (*trait);
2488-   rust_assert  (!trait_ref->is_error  ());
2489- 
2490-   //  resolve to trait item
2491-   HIR::TraitItem *trait_item
2492-     = mappings.lookup_trait_item_defid  (trait_item_id).value  ();
2493-   rust_assert  (trait_item->get_item_kind  ()
2494- 	       == HIR::TraitItem::TraitItemKind::TYPE);
2495-   std::string item_identifier = trait_item->trait_identifier  ();
2496- 
2497-   //  setup associated types  #[lang = "fn_once_output"]
2498-   Resolver::TraitItemReference *item_reference = nullptr ;
2499-   bool  found = trait_ref->lookup_trait_item_by_type  (
2500-     item_identifier, Resolver::TraitItemReference::TraitItemType::TYPE,
2501-     &item_reference);
2502-   rust_assert  (found);
2503- 
2504-   //  setup
2505-   item_reference->associated_type_set  (&get_result_type  ());
2506- }
2507- 
25082442void 
25092443ArrayType::accept_vis  (TyVisitor &vis)
25102444{
0 commit comments