From 3aa77e8cd45c4597867751814bebabb9daad5ae8 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Sun, 27 Nov 2016 18:32:57 +0800 Subject: HIR - Move impl parameters from node to the path --- src/hir/expr.cpp | 4 ++-- src/hir/expr.hpp | 2 -- src/hir/path.cpp | 11 +++++++++-- src/hir/path.hpp | 7 +++++++ src/hir/visitor.cpp | 2 ++ 5 files changed, 20 insertions(+), 6 deletions(-) (limited to 'src/hir') diff --git a/src/hir/expr.cpp b/src/hir/expr.cpp index 10d01e1b..e974f2cc 100644 --- a/src/hir/expr.cpp +++ b/src/hir/expr.cpp @@ -102,7 +102,6 @@ DEF_VISIT(ExprNode_CallPath, node, TRACE_FUNCTION_F("_CallPath: " << node.m_path); for(auto& ty : node.m_cache.m_arg_types) visit_type(ty); - visit_path_params(node.m_cache.m_ty_impl_params); visit_path(::HIR::Visitor::PathContext::VALUE, node.m_path); for(auto& arg : node.m_args) @@ -121,7 +120,6 @@ DEF_VISIT(ExprNode_CallMethod, node, TRACE_FUNCTION_F("_CallMethod: " << node.m_method); for(auto& ty : node.m_cache.m_arg_types) visit_type(ty); - visit_path_params(node.m_cache.m_ty_impl_params); visit_path(::HIR::Visitor::PathContext::VALUE, node.m_method_path); @@ -322,6 +320,7 @@ void ::HIR::ExprVisitorDef::visit_path(::HIR::Visitor::PathContext pc, ::HIR::Pa visit_type(*e.type); visit_generic_path(pc, e.trait); visit_path_params(e.params); + visit_path_params(e.impl_params); ), (UfcsUnknown, visit_type(*e.type); @@ -330,6 +329,7 @@ void ::HIR::ExprVisitorDef::visit_path(::HIR::Visitor::PathContext pc, ::HIR::Pa (UfcsInherent, visit_type(*e.type); visit_path_params(e.params); + visit_path_params(e.impl_params); ) ) } diff --git a/src/hir/expr.hpp b/src/hir/expr.hpp index 1b732e4a..b963834f 100644 --- a/src/hir/expr.hpp +++ b/src/hir/expr.hpp @@ -452,8 +452,6 @@ struct ExprCallCache const ::HIR::GenericParams* m_fcn_params; const ::HIR::GenericParams* m_top_params; const ::HIR::Function* m_fcn; - - ::HIR::PathParams m_ty_impl_params; ::std::function m_monomorph_cb; }; diff --git a/src/hir/path.cpp b/src/hir/path.cpp index 8e522aa9..7f9d2fc9 100644 --- a/src/hir/path.cpp +++ b/src/hir/path.cpp @@ -1,4 +1,9 @@ /* + * MRustC - Rust Compiler + * - By John Hodge (Mutabah/thePowersGang) + * + * hir/path.hpp + * - Item paths (helper code) */ #include #include @@ -206,7 +211,8 @@ bool ::HIR::TraitPath::operator==(const ::HIR::TraitPath& x) const return Path(Data::make_UfcsInherent({ box$( e.type->clone() ), e.item, - e.params.clone() + e.params.clone(), + e.impl_params.clone() })); ), (UfcsKnown, @@ -214,7 +220,8 @@ bool ::HIR::TraitPath::operator==(const ::HIR::TraitPath& x) const box$( e.type->clone() ), e.trait.clone(), e.item, - e.params.clone() + e.params.clone(), + e.impl_params.clone() })); ), (UfcsUnknown, diff --git a/src/hir/path.hpp b/src/hir/path.hpp index ae875620..af07e453 100644 --- a/src/hir/path.hpp +++ b/src/hir/path.hpp @@ -1,4 +1,9 @@ /* + * MRustC - Rust Compiler + * - By John Hodge (Mutabah/thePowersGang) + * + * hir/path.hpp + * - Item paths */ #ifndef _HIR_PATH_HPP_ #define _HIR_PATH_HPP_ @@ -175,12 +180,14 @@ public: ::std::unique_ptr type; ::std::string item; PathParams params; + PathParams impl_params; }), (UfcsKnown, struct { ::std::unique_ptr type; GenericPath trait; ::std::string item; PathParams params; + PathParams impl_params; }), (UfcsUnknown, struct { ::std::unique_ptr type; diff --git a/src/hir/visitor.cpp b/src/hir/visitor.cpp index 1882416d..d852423a 100644 --- a/src/hir/visitor.cpp +++ b/src/hir/visitor.cpp @@ -444,11 +444,13 @@ void ::HIR::Visitor::visit_path(::HIR::Path& p, ::HIR::Visitor::PathContext pc) (UfcsInherent, this->visit_type(*e.type); this->visit_path_params(e.params); + this->visit_path_params(e.impl_params); ), (UfcsKnown, this->visit_type(*e.type); this->visit_generic_path(e.trait, ::HIR::Visitor::PathContext::TYPE); this->visit_path_params(e.params); + this->visit_path_params(e.impl_params); ), (UfcsUnknown, this->visit_type(*e.type); -- cgit v1.2.3