From fc4c8a1e3d2994b24bc4f7f573d49be99c1dabcf Mon Sep 17 00:00:00 2001 From: John Hodge Date: Mon, 1 Aug 2016 13:18:52 +0800 Subject: HIR Typecheck CS - Apply/check let and closure nodes --- src/hir_typeck/expr_cs.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/hir_typeck/expr_cs.cpp b/src/hir_typeck/expr_cs.cpp index 56f71f87..792007fb 100644 --- a/src/hir_typeck/expr_cs.cpp +++ b/src/hir_typeck/expr_cs.cpp @@ -1773,12 +1773,26 @@ namespace { void visit_node_ptr(::HIR::ExprNodeP& node) override { const char* node_ty = typeid(*node).name(); TRACE_FUNCTION_FR(&node << " " << &*node << " " << node_ty << " : " << node->m_res_type, node_ty); - this->check_type_resolved(node->span(), node->m_res_type, node->m_res_type); + this->check_type_resolved_top(node->span(), node->m_res_type); DEBUG(node_ty << " : = " << node->m_res_type); ::HIR::ExprVisitorDef::visit_node_ptr(node); } + void visit(::HIR::ExprNode_Let& node) override { + this->check_type_resolved_top(node.span(), node.m_type); + ::HIR::ExprVisitorDef::visit(node); + } + void visit(::HIR::ExprNode_Closure& node) override { + for(auto& arg : node.m_args) + this->check_type_resolved_top(node.span(), arg.second); + this->check_type_resolved_top(node.span(), node.m_return); + ::HIR::ExprVisitorDef::visit(node); + } + private: + void check_type_resolved_top(const Span& sp, ::HIR::TypeRef& ty) const { + check_type_resolved(sp, ty, ty); + } void check_type_resolved(const Span& sp, ::HIR::TypeRef& ty, const ::HIR::TypeRef& top_type) const { TU_MATCH(::HIR::TypeRef::Data, (ty.m_data), (e), (Infer, -- cgit v1.2.3