= ctx->get_mappings ()->lookup_hir_extern_item (ref, &parent_block);
bool is_hir_item = resolved_item != nullptr;
bool is_hir_extern_item = resolved_extern_item != nullptr;
+ bool is_fn = lookup->get_kind () == TyTy::TypeKind::FNDEF;
if (is_hir_item)
{
if (!lookup->has_subsititions_defined ())
}
else
{
+ if (is_fn)
+ {
+ TyTy::FnType *fn = static_cast<TyTy::FnType *> (lookup);
+ TyTy::BaseType *receiver = nullptr;
+
+ if (fn->is_method ())
+ {
+ receiver = fn->get_self_type ();
+ receiver = receiver->destructure ();
+
+ return resolve_method_address (fn, ref, receiver, final_segment,
+ mappings, expr_locus);
+ }
+ }
+
HirId parent_impl_id = UNKNOWN_HIRID;
HIR::ImplItem *resolved_item
= ctx->get_mappings ()->lookup_hir_implitem (ref, &parent_impl_id);
for (size_t i = offset; i < segments.size (); i++)
{
HIR::PathExprSegment &seg = segments.at (i);
-
- bool probe_bounds = true;
bool probe_impls = !reciever_is_generic;
- bool ignore_mandatory_trait_items = !reciever_is_generic;
// probe the path is done in two parts one where we search impls if no
// candidate is found then we search extensions from traits
auto candidates
= PathProbeType::Probe (prev_segment, seg.get_segment (), probe_impls,
- false, ignore_mandatory_trait_items);
+ false, true /*ignore_mandatory_trait_items*/);
if (candidates.size () == 0)
{
candidates
= PathProbeType::Probe (prev_segment, seg.get_segment (), false,
- probe_bounds, ignore_mandatory_trait_items);
+ true /*probe_bounds*/,
+ false /*ignore_mandatory_trait_items*/);
if (candidates.size () == 0)
{