summaryrefslogtreecommitdiff
path: root/src/hir_conv/resolve_ufcs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/hir_conv/resolve_ufcs.cpp')
-rw-r--r--src/hir_conv/resolve_ufcs.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/hir_conv/resolve_ufcs.cpp b/src/hir_conv/resolve_ufcs.cpp
index daa075ba..509faddf 100644
--- a/src/hir_conv/resolve_ufcs.cpp
+++ b/src/hir_conv/resolve_ufcs.cpp
@@ -117,8 +117,14 @@ namespace {
void visit(::HIR::ExprNode_Block& node) override
{
- for( const auto& trait_path : node.m_traits )
- upper_visitor.m_traits.push_back( ::std::make_pair( &trait_path, &upper_visitor.find_trait(trait_path) ) );
+ if( node.m_traits.size() == 0 && node.m_local_mod.m_components.size() > 0 ) {
+ const auto& mod = upper_visitor.m_crate.get_mod_by_path(node.span(), node.m_local_mod);
+ for( const auto& trait_path : mod.m_traits ) {
+ node.m_traits.push_back( ::std::make_pair( &trait_path, &upper_visitor.m_crate.get_trait_by_path(node.span(), trait_path) ) );
+ }
+ }
+ for( const auto& trait_ref : node.m_traits )
+ upper_visitor.m_traits.push_back( trait_ref );
::HIR::ExprVisitorDef::visit(node);
for(unsigned int i = 0; i < node.m_traits.size(); i ++ )
upper_visitor.m_traits.pop_back();