diff options
author | John Hodge <tpg@ucc.asn.au> | 2019-01-05 15:17:37 +0800 |
---|---|---|
committer | John Hodge <tpg@ucc.asn.au> | 2019-01-05 15:17:37 +0800 |
commit | 0be0edd9de59072ca5b780993c2b0bbece0e7aa1 (patch) | |
tree | f9c9d87bcb18a4114c71336a81c8a03674f8114c /src | |
parent | aa2f7a600ec4044785661a7b66b220420061a7bf (diff) | |
download | mrust-0be0edd9de59072ca5b780993c2b0bbece0e7aa1.tar.gz |
HIR - Visit result type
Diffstat (limited to 'src')
-rw-r--r-- | src/hir/expr.cpp | 6 | ||||
-rw-r--r-- | src/hir/expr.hpp | 2 | ||||
-rw-r--r-- | src/hir_conv/constant_evaluation.cpp | 6 | ||||
-rw-r--r-- | src/hir_expand/closures.cpp | 1 |
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(); |