@@ -1030,7 +1030,41 @@ BaseType::get_subst_argument_mappings () const
1030
1030
1031
1031
return empty;
1032
1032
}
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);
1033
1064
1065
+ // setup
1066
+ item_reference->associated_type_set (get_return_type ());
1067
+ }
1034
1068
// InferType
1035
1069
1036
1070
InferType::InferType (HirId ref, InferTypeKind infer_kind, TypeHint hint,
@@ -2347,56 +2381,6 @@ FnPtr::clone () const
2347
2381
get_combined_refs ());
2348
2382
}
2349
2383
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
-
2400
2384
void
2401
2385
ClosureType::accept_vis (TyVisitor &vis)
2402
2386
{
@@ -2455,56 +2439,6 @@ ClosureType::handle_substitions (SubstitutionArgumentMappings &mappings)
2455
2439
return nullptr ;
2456
2440
}
2457
2441
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
-
2508
2442
void
2509
2443
ArrayType::accept_vis (TyVisitor &vis)
2510
2444
{
0 commit comments