diff options
author | John Hodge <tpg@mutabah.net> | 2016-11-27 18:32:57 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-11-27 18:32:57 +0800 |
commit | 3aa77e8cd45c4597867751814bebabb9daad5ae8 (patch) | |
tree | 45d6357ad5d100b421bfeef784a6c93653229f46 /src/hir | |
parent | 11476adc4196c5810b44cfa8f2a97fe8d98460a6 (diff) | |
download | mrust-3aa77e8cd45c4597867751814bebabb9daad5ae8.tar.gz |
HIR - Move impl parameters from node to the path
Diffstat (limited to 'src/hir')
-rw-r--r-- | src/hir/expr.cpp | 4 | ||||
-rw-r--r-- | src/hir/expr.hpp | 2 | ||||
-rw-r--r-- | src/hir/path.cpp | 11 | ||||
-rw-r--r-- | src/hir/path.hpp | 7 | ||||
-rw-r--r-- | src/hir/visitor.cpp | 2 |
5 files changed, 20 insertions, 6 deletions
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<const ::HIR::TypeRef&(const ::HIR::TypeRef&)> 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 <hir/path.hpp> #include <hir/type.hpp> @@ -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<TypeRef> type; ::std::string item; PathParams params; + PathParams impl_params; }), (UfcsKnown, struct { ::std::unique_ptr<TypeRef> type; GenericPath trait; ::std::string item; PathParams params; + PathParams impl_params; }), (UfcsUnknown, struct { ::std::unique_ptr<TypeRef> 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); |