diff options
author | John Hodge <tpg@mutabah.net> | 2016-06-05 20:37:45 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-06-05 20:37:45 +0800 |
commit | 52eb59ef0e0eedb8ea4da2210c5357245e523dfd (patch) | |
tree | 5f2a1483b0a1dd3ce3f0b1edaab8d55b90be276d /src/hir/visitor.cpp | |
parent | e3f35882f8240e506e34bb37c8fef1ca34601882 (diff) | |
download | mrust-52eb59ef0e0eedb8ea4da2210c5357245e523dfd.tar.gz |
Resolve - UFCS resolution expanded to handle `Self` and params
Diffstat (limited to 'src/hir/visitor.cpp')
-rw-r--r-- | src/hir/visitor.cpp | 46 |
1 files changed, 24 insertions, 22 deletions
diff --git a/src/hir/visitor.cpp b/src/hir/visitor.cpp index d2ee9f74..d4eeec50 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( crate.m_root_module ); + this->visit_module(::HIR::PathChain(""), 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::Module& mod) +void ::HIR::Visitor::visit_module(::HIR::PathChain p, ::HIR::Module& mod) { TRACE_FUNCTION; for( auto& named : mod.m_mod_items ) @@ -35,23 +35,23 @@ void ::HIR::Visitor::visit_module(::HIR::Module& mod) (Import, ), (Module, DEBUG("mod " << name); - this->visit_module(e); + this->visit_module(p + name, e); ), (TypeAlias, DEBUG("type " << name); - this->visit_type_alias(e); + this->visit_type_alias(p + name, e); ), (Enum, DEBUG("enum " << name); - this->visit_enum(e); + this->visit_enum(p + name, e); ), (Struct, DEBUG("struct " << name); - this->visit_struct(e); + this->visit_struct(p + name, e); ), (Trait, DEBUG("trait " << name); - this->visit_trait(e); + this->visit_trait(p + name, e); ) ) } @@ -65,18 +65,18 @@ void ::HIR::Visitor::visit_module(::HIR::Module& mod) ), (Constant, DEBUG("const " << name); - this->visit_constant(e); + this->visit_constant(p + name, e); ), (Static, DEBUG("static " << name); - this->visit_static(e); + this->visit_static(p + name, e); ), (StructConstant, // Just a path ), (Function, DEBUG("fn " << name); - this->visit_function(e); + this->visit_function(p + name, e); ), (StructConstructor, // Just a path @@ -88,17 +88,19 @@ void ::HIR::Visitor::visit_module(::HIR::Module& mod) void ::HIR::Visitor::visit_type_impl(::HIR::TypeImpl& impl) { + ::HIR::PathChain p { "#impl" }; TRACE_FUNCTION_F("impl.m_type=" << impl.m_type); this->visit_params(impl.m_params); this->visit_type(impl.m_type); for(auto& method : impl.m_methods) { DEBUG("method " << method.first); - this->visit_function(method.second); + this->visit_function(p + method.first, method.second); } } void ::HIR::Visitor::visit_trait_impl(const ::HIR::SimplePath& trait_path, ::HIR::TraitImpl& impl) { + ::HIR::PathChain p { "#impl" }; TRACE_FUNCTION_F("trait_path=" << trait_path); this->visit_params(impl.m_params); this->visit_path_params(impl.m_trait_args); @@ -106,7 +108,7 @@ void ::HIR::Visitor::visit_trait_impl(const ::HIR::SimplePath& trait_path, ::HIR for(auto& ent : impl.m_methods) { DEBUG("method " << ent.first); - this->visit_function(ent.second); + this->visit_function(p + ent.first, ent.second); } for(auto& ent : impl.m_constants) { DEBUG("const " << ent.first); @@ -124,12 +126,12 @@ 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::TypeAlias& item) +void ::HIR::Visitor::visit_type_alias(::HIR::PathChain p, ::HIR::TypeAlias& item) { this->visit_params(item.m_params); this->visit_type(item.m_type); } -void ::HIR::Visitor::visit_trait(::HIR::Trait& item) +void ::HIR::Visitor::visit_trait(::HIR::PathChain p, ::HIR::Trait& item) { TRACE_FUNCTION; this->visit_params(item.m_params); @@ -146,20 +148,20 @@ void ::HIR::Visitor::visit_trait(::HIR::Trait& item) (None, ), (Constant, DEBUG("constant " << i.first); - this->visit_constant(e); + this->visit_constant(p + i.first, e); ), (Static, DEBUG("static " << i.first); - this->visit_static(e); + this->visit_static(p + i.first, e); ), (Function, DEBUG("method " << i.first); - this->visit_function(e); + this->visit_function(p + i.first, e); ) ) } } -void ::HIR::Visitor::visit_struct(::HIR::Struct& item) +void ::HIR::Visitor::visit_struct(::HIR::PathChain p, ::HIR::Struct& item) { this->visit_params(item.m_params); TU_MATCH(::HIR::Struct::Data, (item.m_data), (e), @@ -177,7 +179,7 @@ void ::HIR::Visitor::visit_struct(::HIR::Struct& item) ) ) } -void ::HIR::Visitor::visit_enum(::HIR::Enum& item) +void ::HIR::Visitor::visit_enum(::HIR::PathChain p, ::HIR::Enum& item) { this->visit_params(item.m_params); for(auto& var : item.m_variants) @@ -201,7 +203,7 @@ void ::HIR::Visitor::visit_enum(::HIR::Enum& item) ) } } -void ::HIR::Visitor::visit_function(::HIR::Function& item) +void ::HIR::Visitor::visit_function(::HIR::PathChain p, ::HIR::Function& item) { this->visit_params(item.m_params); for(auto& arg : item.m_args) @@ -212,12 +214,12 @@ void ::HIR::Visitor::visit_function(::HIR::Function& item) this->visit_type(item.m_return); this->visit_expr(item.m_code); } -void ::HIR::Visitor::visit_static(::HIR::Static& item) +void ::HIR::Visitor::visit_static(::HIR::PathChain p, ::HIR::Static& item) { this->visit_type(item.m_type); this->visit_expr(item.m_value); } -void ::HIR::Visitor::visit_constant(::HIR::Constant& item) +void ::HIR::Visitor::visit_constant(::HIR::PathChain p, ::HIR::Constant& item) { this->visit_params(item.m_params); this->visit_type(item.m_type); |