diff options
author | John Hodge <tpg@mutabah.net> | 2016-08-06 13:28:14 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-08-06 13:28:14 +0800 |
commit | 29e2c6e3aaffefa2ac19882282fcb93855415b01 (patch) | |
tree | 75972646437cb0c01134c2de2f33e06042415c4a | |
parent | 8717083eb95db38fb6897993bb992de00e67ee66 (diff) | |
download | mrust-29e2c6e3aaffefa2ac19882282fcb93855415b01.tar.gz |
HIR Typecheck CS - Fix inserted borrow in coercions
-rw-r--r-- | src/hir_typeck/expr_cs.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/hir_typeck/expr_cs.cpp b/src/hir_typeck/expr_cs.cpp index 305758e6..8c8ff62d 100644 --- a/src/hir_typeck/expr_cs.cpp +++ b/src/hir_typeck/expr_cs.cpp @@ -2857,8 +2857,8 @@ namespace { } // - Otherwise, create a new borrow operation and add the dereferences if( !node_ptr_ptr ) { + DEBUG("- Coercion node isn't a borrow, adding one"); auto span = node_ptr->span(); - node_ptr_ptr = &node_ptr; ::HIR::ExprNode_UniOp::Op op = ::HIR::ExprNode_UniOp::Op::Ref; auto borrow_type = context.m_ivars.get_type(node_ptr->m_res_type).m_data.as_Borrow().type; switch(borrow_type) @@ -2869,6 +2869,9 @@ namespace { } node_ptr = ::HIR::ExprNodeP(new ::HIR::ExprNode_UniOp( mv$(span), op, mv$(node_ptr) )); node_ptr->m_res_type = ::HIR::TypeRef::new_borrow(borrow_type, des_borrow_inner.clone()); + + // - Set node pointer reference to point into the new borrow op + node_ptr_ptr = &dynamic_cast< ::HIR::ExprNode_UniOp&>(*node_ptr).m_value; } else { auto borrow_type = context.m_ivars.get_type(node_ptr->m_res_type).m_data.as_Borrow().type; |