summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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();