summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2019-01-05 15:17:37 +0800
committerJohn Hodge <tpg@ucc.asn.au>2019-01-05 15:17:37 +0800
commit0be0edd9de59072ca5b780993c2b0bbece0e7aa1 (patch)
treef9c9d87bcb18a4114c71336a81c8a03674f8114c /src
parentaa2f7a600ec4044785661a7b66b220420061a7bf (diff)
downloadmrust-0be0edd9de59072ca5b780993c2b0bbece0e7aa1.tar.gz
HIR - Visit result type
Diffstat (limited to 'src')
-rw-r--r--src/hir/expr.cpp6
-rw-r--r--src/hir/expr.hpp2
-rw-r--r--src/hir_conv/constant_evaluation.cpp6
-rw-r--r--src/hir_expand/closures.cpp1
4 files changed, 15 insertions, 0 deletions
diff --git a/src/hir/expr.cpp b/src/hir/expr.cpp
index 07504ea7..6b7c2e1a 100644
--- a/src/hir/expr.cpp
+++ b/src/hir/expr.cpp
@@ -19,6 +19,11 @@ void ::HIR::ExprVisitor::visit_node_ptr(::std::unique_ptr< ::HIR::ExprNode>& nod
}
void ::HIR::ExprVisitor::visit_node(::HIR::ExprNode& node) {
}
+void ::HIR::ExprVisitorDef::visit_node_ptr(::std::unique_ptr< ::HIR::ExprNode>& node_ptr) {
+ assert(node_ptr);
+ node_ptr->visit(*this);
+ visit_type(node_ptr->m_res_type);
+}
DEF_VISIT(ExprNode_Block, node,
for(auto& subnode : node.m_nodes) {
visit_node_ptr(subnode);
@@ -83,6 +88,7 @@ DEF_VISIT(ExprNode_Borrow, node,
visit_node_ptr(node.m_value);
)
DEF_VISIT(ExprNode_Cast, node,
+ TRACE_FUNCTION_F("_Cast " << node.m_res_type);
visit_node_ptr(node.m_value);
)
DEF_VISIT(ExprNode_Unsize, node,
diff --git a/src/hir/expr.hpp b/src/hir/expr.hpp
index 55a4eaf2..15c0a489 100644
--- a/src/hir/expr.hpp
+++ b/src/hir/expr.hpp
@@ -865,6 +865,8 @@ class ExprVisitorDef:
public:
#define NV(nt) virtual void visit(nt& n);
+ virtual void visit_node_ptr(::std::unique_ptr<ExprNode>& node_ptr) override;
+
NV(ExprNode_Block)
NV(ExprNode_Asm)
NV(ExprNode_Return)
diff --git a/src/hir_conv/constant_evaluation.cpp b/src/hir_conv/constant_evaluation.cpp
index 24fd3abc..f81663ec 100644
--- a/src/hir_conv/constant_evaluation.cpp
+++ b/src/hir_conv/constant_evaluation.cpp
@@ -978,6 +978,11 @@ namespace {
m_mod = saved_m;
m_mod_path = saved_mp;
}
+ void visit_function(::HIR::ItemPath p, ::HIR::Function& f) override
+ {
+ TRACE_FUNCTION_F(p);
+ ::HIR::Visitor::visit_function(p, f);
+ }
void visit_trait_impl(const ::HIR::SimplePath& trait_path, ::HIR::TraitImpl& impl) override
{
@@ -1147,6 +1152,7 @@ namespace {
void visit_type(::HIR::TypeRef& ty) override {
// Need to evaluate array sizes
+ DEBUG("expr type " << ty);
m_exp.visit_type(ty);
}
void visit_path_params(::HIR::PathParams& pp) override {
diff --git a/src/hir_expand/closures.cpp b/src/hir_expand/closures.cpp
index 51b2c638..7cc3cee5 100644
--- a/src/hir_expand/closures.cpp
+++ b/src/hir_expand/closures.cpp
@@ -507,6 +507,7 @@ namespace {
params_placeholders.push_back( ::HIR::TypeRef(params.m_types[i].m_name, i) );
impl_path_params.m_types.push_back( ::HIR::TypeRef(params.m_types[i].m_name, i) );
}
+ DEBUG("params_placeholders = " << params_placeholders << ", ofs_item = " << ofs_item << ", ofs_impl = " << ofs_impl);
auto monomorph_cb = [&](const auto& ty)->const ::HIR::TypeRef& {
const auto& ge = ty.m_data.as_Generic();