summaryrefslogtreecommitdiff
path: root/src/hir/visitor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/hir/visitor.cpp')
-rw-r--r--src/hir/visitor.cpp32
1 files changed, 18 insertions, 14 deletions
diff --git a/src/hir/visitor.cpp b/src/hir/visitor.cpp
index 7c2a1245..cb942123 100644
--- a/src/hir/visitor.cpp
+++ b/src/hir/visitor.cpp
@@ -8,7 +8,7 @@
void ::HIR::Visitor::visit_crate(::HIR::Crate& crate)
{
- this->visit_module(::HIR::PathChain(""), crate.m_root_module );
+ this->visit_module(::HIR::ItemPath(), crate.m_root_module );
for( auto& ty_impl : crate.m_type_impls )
{
@@ -24,7 +24,7 @@ void ::HIR::Visitor::visit_crate(::HIR::Crate& crate)
}
}
-void ::HIR::Visitor::visit_module(::HIR::PathChain p, ::HIR::Module& mod)
+void ::HIR::Visitor::visit_module(::HIR::ItemPath p, ::HIR::Module& mod)
{
TRACE_FUNCTION;
for( auto& named : mod.m_mod_items )
@@ -88,7 +88,7 @@ void ::HIR::Visitor::visit_module(::HIR::PathChain p, ::HIR::Module& mod)
void ::HIR::Visitor::visit_type_impl(::HIR::TypeImpl& impl)
{
- ::HIR::PathChain p { "#impl" };
+ ::HIR::ItemPath p { impl.m_type };
TRACE_FUNCTION_F("impl.m_type=" << impl.m_type);
this->visit_params(impl.m_params);
this->visit_type(impl.m_type);
@@ -100,7 +100,7 @@ void ::HIR::Visitor::visit_type_impl(::HIR::TypeImpl& impl)
}
void ::HIR::Visitor::visit_trait_impl(const ::HIR::SimplePath& trait_path, ::HIR::TraitImpl& impl)
{
- ::HIR::PathChain p { "#impl" };
+ ::HIR::ItemPath p( impl.m_type, trait_path );
TRACE_FUNCTION_F("trait_path=" << trait_path);
this->visit_params(impl.m_params);
// - HACK: Create a generic path to visit (so that proper checks are performed)
@@ -131,14 +131,17 @@ void ::HIR::Visitor::visit_marker_impl(const ::HIR::SimplePath& trait_path, ::HI
this->visit_type(impl.m_type);
}
-void ::HIR::Visitor::visit_type_alias(::HIR::PathChain p, ::HIR::TypeAlias& item)
+void ::HIR::Visitor::visit_type_alias(::HIR::ItemPath p, ::HIR::TypeAlias& item)
{
this->visit_params(item.m_params);
this->visit_type(item.m_type);
}
-void ::HIR::Visitor::visit_trait(::HIR::PathChain p, ::HIR::Trait& item)
+void ::HIR::Visitor::visit_trait(::HIR::ItemPath p, ::HIR::Trait& item)
{
+ ::HIR::SimplePath trait_sp = p.get_simple_path();
+ ItemPath trait_ip(trait_sp);
TRACE_FUNCTION;
+
this->visit_params(item.m_params);
for(auto& par : item.m_parent_traits) {
this->visit_trait_path(par);
@@ -150,24 +153,25 @@ void ::HIR::Visitor::visit_trait(::HIR::PathChain p, ::HIR::Trait& item)
this->visit_type(i.second.m_default);
}
for(auto& i : item.m_values) {
+ auto item_path = ::HIR::ItemPath(trait_ip, i.first.c_str());
TU_MATCH(::HIR::TraitValueItem, (i.second), (e),
(None, ),
(Constant,
DEBUG("constant " << i.first);
- this->visit_constant(p + i.first, e);
+ this->visit_constant(item_path, e);
),
(Static,
DEBUG("static " << i.first);
- this->visit_static(p + i.first, e);
+ this->visit_static(item_path, e);
),
(Function,
DEBUG("method " << i.first);
- this->visit_function(p + i.first, e);
+ this->visit_function(item_path, e);
)
)
}
}
-void ::HIR::Visitor::visit_struct(::HIR::PathChain p, ::HIR::Struct& item)
+void ::HIR::Visitor::visit_struct(::HIR::ItemPath p, ::HIR::Struct& item)
{
this->visit_params(item.m_params);
TU_MATCH(::HIR::Struct::Data, (item.m_data), (e),
@@ -185,7 +189,7 @@ void ::HIR::Visitor::visit_struct(::HIR::PathChain p, ::HIR::Struct& item)
)
)
}
-void ::HIR::Visitor::visit_enum(::HIR::PathChain p, ::HIR::Enum& item)
+void ::HIR::Visitor::visit_enum(::HIR::ItemPath p, ::HIR::Enum& item)
{
this->visit_params(item.m_params);
for(auto& var : item.m_variants)
@@ -209,7 +213,7 @@ void ::HIR::Visitor::visit_enum(::HIR::PathChain p, ::HIR::Enum& item)
)
}
}
-void ::HIR::Visitor::visit_function(::HIR::PathChain p, ::HIR::Function& item)
+void ::HIR::Visitor::visit_function(::HIR::ItemPath p, ::HIR::Function& item)
{
this->visit_params(item.m_params);
for(auto& arg : item.m_args)
@@ -220,12 +224,12 @@ void ::HIR::Visitor::visit_function(::HIR::PathChain p, ::HIR::Function& item)
this->visit_type(item.m_return);
this->visit_expr(item.m_code);
}
-void ::HIR::Visitor::visit_static(::HIR::PathChain p, ::HIR::Static& item)
+void ::HIR::Visitor::visit_static(::HIR::ItemPath p, ::HIR::Static& item)
{
this->visit_type(item.m_type);
this->visit_expr(item.m_value);
}
-void ::HIR::Visitor::visit_constant(::HIR::PathChain p, ::HIR::Constant& item)
+void ::HIR::Visitor::visit_constant(::HIR::ItemPath p, ::HIR::Constant& item)
{
this->visit_params(item.m_params);
this->visit_type(item.m_type);