diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/hir/expr.cpp | 37 | ||||
-rw-r--r-- | src/hir/expr.hpp | 2 | ||||
-rw-r--r-- | src/hir_expand/closures.cpp | 14 | ||||
-rw-r--r-- | src/hir_typeck/expr_cs.cpp | 5 |
4 files changed, 31 insertions, 27 deletions
diff --git a/src/hir/expr.cpp b/src/hir/expr.cpp index 02e7ed98..531a516d 100644 --- a/src/hir/expr.cpp +++ b/src/hir/expr.cpp @@ -1,4 +1,9 @@ /* + * MRustC - Rust Compiler + * - By John Hodge (Mutabah/thePowersGang) + * + * hir/expr.cpp + * - HIR expression helper code */ #include <hir/expr.hpp> @@ -23,7 +28,7 @@ DEF_VISIT(ExprNode_Return, node, visit_node_ptr(node.m_value); ) DEF_VISIT(ExprNode_Let, node, - visit_pattern(node.m_pattern); + visit_pattern(node.span(), node.m_pattern); visit_type(node.m_type); if( node.m_value ) { visit_node_ptr(node.m_value); @@ -38,7 +43,7 @@ DEF_VISIT(ExprNode_Match, node, for(auto& arm : node.m_arms) { for(auto& pat : arm.m_patterns) - visit_pattern(pat); + visit_pattern(node.span(), pat); if( arm.m_cond ) visit_node_ptr(arm.m_cond); visit_node_ptr(arm.m_code); @@ -160,7 +165,7 @@ DEF_VISIT(ExprNode_ArraySized, node, DEF_VISIT(ExprNode_Closure, node, for(auto& arg : node.m_args) { - visit_pattern(arg.first); + visit_pattern(node.span(), arg.first); visit_type(arg.second); } visit_type(node.m_return); @@ -173,38 +178,38 @@ DEF_VISIT(ExprNode_Closure, node, #undef DEF_VISIT // TODO: Merge this with the stuff in ::HIR::Visitor -void ::HIR::ExprVisitorDef::visit_pattern(::HIR::Pattern& pat) +void ::HIR::ExprVisitorDef::visit_pattern(const Span& sp, ::HIR::Pattern& pat) { TU_MATCH(::HIR::Pattern::Data, (pat.m_data), (e), (Any, ), (Box, - this->visit_pattern(*e.sub); + this->visit_pattern(sp, *e.sub); ), (Ref, - this->visit_pattern(*e.sub); + this->visit_pattern(sp, *e.sub); ), (Tuple, for(auto& subpat : e.sub_patterns) - this->visit_pattern(subpat); + this->visit_pattern(sp, subpat); ), (SplitTuple, for(auto& subpat : e.leading) - this->visit_pattern(subpat); + this->visit_pattern(sp, subpat); for(auto& subpat : e.trailing) - this->visit_pattern(subpat); + this->visit_pattern(sp, subpat); ), (StructValue, // Nothing. ), (StructTuple, for(auto& subpat : e.sub_patterns) - this->visit_pattern(subpat); + this->visit_pattern(sp, subpat); ), (Struct, for(auto& fld_pat : e.sub_patterns) { - this->visit_pattern(fld_pat.second); + this->visit_pattern(sp, fld_pat.second); } ), // Refutable @@ -216,21 +221,21 @@ void ::HIR::ExprVisitorDef::visit_pattern(::HIR::Pattern& pat) ), (EnumTuple, for(auto& subpat : e.sub_patterns) - this->visit_pattern(subpat); + this->visit_pattern(sp, subpat); ), (EnumStruct, for(auto& fld_pat : e.sub_patterns) - this->visit_pattern(fld_pat.second); + this->visit_pattern(sp, fld_pat.second); ), (Slice, for(auto& subpat : e.sub_patterns) - this->visit_pattern(subpat); + this->visit_pattern(sp, subpat); ), (SplitSlice, for(auto& subpat : e.leading) - this->visit_pattern(subpat); + this->visit_pattern(sp, subpat); for(auto& subpat : e.trailing) - this->visit_pattern(subpat); + this->visit_pattern(sp, subpat); ) ) } diff --git a/src/hir/expr.hpp b/src/hir/expr.hpp index a5a1346a..1b732e4a 100644 --- a/src/hir/expr.hpp +++ b/src/hir/expr.hpp @@ -875,7 +875,7 @@ public: NV(ExprNode_Closure); #undef NV - virtual void visit_pattern(::HIR::Pattern& pat); + virtual void visit_pattern(const Span& sp, ::HIR::Pattern& pat); virtual void visit_type(::HIR::TypeRef& ty); virtual void visit_trait_path(::HIR::TraitPath& p); virtual void visit_path_params(::HIR::PathParams& ty); diff --git a/src/hir_expand/closures.cpp b/src/hir_expand/closures.cpp index 2523eb68..efe67a5c 100644 --- a/src/hir_expand/closures.cpp +++ b/src/hir_expand/closures.cpp @@ -72,7 +72,7 @@ namespace { { } - void visit_pattern(::HIR::Pattern& pat) override { + void visit_pattern(const Span& sp, ::HIR::Pattern& pat) override { if( pat.m_binding.is_valid() ) { auto binding_it = ::std::find(m_local_vars.begin(), m_local_vars.end(), pat.m_binding.m_slot); if( binding_it != m_local_vars.end() ) { @@ -80,15 +80,15 @@ namespace { pat.m_binding.m_slot = 1 + binding_it - m_local_vars.begin(); } else { - BUG(Span(), "Pattern binds to non-local"); + BUG(sp, "Pattern binds to non-local"); } } TU_IFLET(::HIR::Pattern::Data, (pat.m_data), SplitSlice, e, - TODO(Span(), "Fixup binding in split slice"); + TODO(sp, "Fixup binding in split slice"); ) - ::HIR::ExprVisitorDef::visit_pattern(pat); + ::HIR::ExprVisitorDef::visit_pattern(sp, pat); } void visit_type(::HIR::TypeRef& ty) override { @@ -637,7 +637,7 @@ namespace { for(const auto& arg : node.m_args) { args_pat_inner.push_back( arg.first.clone() ); - ev.visit_pattern( args_pat_inner.back() ); + ev.visit_pattern(sp, args_pat_inner.back() ); args_ty_inner.push_back( clone_ty_with(sp, arg.second, cb_replace) ); } ::HIR::TypeRef args_ty { mv$(args_ty_inner) }; @@ -760,11 +760,11 @@ namespace { } } - void visit_pattern(::HIR::Pattern& pat) override + void visit_pattern(const Span& sp, ::HIR::Pattern& pat) override { if( !m_closure_stack.empty() ) { - add_closure_def_from_pattern(Span(), pat); + add_closure_def_from_pattern(sp, pat); } } void visit(::HIR::ExprNode_Variable& node) override diff --git a/src/hir_typeck/expr_cs.cpp b/src/hir_typeck/expr_cs.cpp index 091184a5..473fb143 100644 --- a/src/hir_typeck/expr_cs.cpp +++ b/src/hir_typeck/expr_cs.cpp @@ -2849,8 +2849,7 @@ namespace { ::HIR::ExprVisitorDef::visit_node_ptr(node_ptr); } - void visit_pattern(::HIR::Pattern& pat) override { - static Span sp; + void visit_pattern(const Span& sp, ::HIR::Pattern& pat) override { TU_MATCH_DEF( ::HIR::Pattern::Data, (pat.m_data), (e), ( ), @@ -2886,7 +2885,7 @@ namespace { this->check_type_resolved_genericpath(sp, e.path); ) ) - ::HIR::ExprVisitorDef::visit_pattern(pat); + ::HIR::ExprVisitorDef::visit_pattern(sp, pat); } void visit(::HIR::ExprNode_Let& node) override { |