summaryrefslogtreecommitdiff
path: root/src/hir
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-11-27 18:32:57 +0800
committerJohn Hodge <tpg@mutabah.net>2016-11-27 18:32:57 +0800
commit3aa77e8cd45c4597867751814bebabb9daad5ae8 (patch)
tree45d6357ad5d100b421bfeef784a6c93653229f46 /src/hir
parent11476adc4196c5810b44cfa8f2a97fe8d98460a6 (diff)
downloadmrust-3aa77e8cd45c4597867751814bebabb9daad5ae8.tar.gz
HIR - Move impl parameters from node to the path
Diffstat (limited to 'src/hir')
-rw-r--r--src/hir/expr.cpp4
-rw-r--r--src/hir/expr.hpp2
-rw-r--r--src/hir/path.cpp11
-rw-r--r--src/hir/path.hpp7
-rw-r--r--src/hir/visitor.cpp2
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);