diff options
author | John Hodge <tpg@mutabah.net> | 2016-08-03 11:37:16 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-08-03 11:37:16 +0800 |
commit | 9d814d8dbc84e9e4e1654887bbe9e856aa4a5df8 (patch) | |
tree | d85043af5df35b86eb4772fcb9b7505dedd1fa6c /src | |
parent | a5ce803acea8166b56a24490ed4604ed64bf9b28 (diff) | |
download | mrust-9d814d8dbc84e9e4e1654887bbe9e856aa4a5df8.tar.gz |
HIR Typecheck CS - Add Unsize insertion for TraitObject coerce
Diffstat (limited to 'src')
-rw-r--r-- | src/hir_typeck/expr_cs.cpp | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/hir_typeck/expr_cs.cpp b/src/hir_typeck/expr_cs.cpp index 5e00982a..a2cf5635 100644 --- a/src/hir_typeck/expr_cs.cpp +++ b/src/hir_typeck/expr_cs.cpp @@ -2768,6 +2768,8 @@ namespace { } cb(*node_ptr_ptr); + + context.m_ivars.mark_change(); } bool check_coerce_borrow(Context& context, const ::HIR::TypeRef& inner_l, const ::HIR::TypeRef& inner_r, ::HIR::ExprNodeP& node_ptr) @@ -2882,7 +2884,6 @@ namespace { } }); - context.m_ivars.mark_change(); return true; } // Either ran out of deref, or hit a _ @@ -2924,13 +2925,12 @@ namespace { } // Add CoerceUnsized - //{ - // auto span = node_ptr->span(); - // node_ptr = ::HIR::ExprNodeP(new ::HIR::ExprNode_Deref( mv$(span), mv$(node_ptr) )); - // DEBUG("- Deref " << &*node_ptr << " -> " << dst_type); - // node_ptr->m_res_type = mv$(ty); - //} - context.m_ivars.mark_change(); + add_coerce_borrow(context, node_ptr, ty_dst, [&](auto& node_ptr) { + auto span = node_ptr->span(); + node_ptr = ::HIR::ExprNodeP(new ::HIR::ExprNode_Unsize( mv$(span), mv$(node_ptr), ty_dst.clone() )); + DEBUG("- Deref " << &*node_ptr << " -> " << ty_dst); + node_ptr->m_res_type = ty_dst.clone(); + }); return true; ) ) @@ -2968,7 +2968,6 @@ namespace { DEBUG("- Unsize " << &*node_ptr << " -> " << ty); node_ptr->m_res_type = mv$(ty); }); - context.m_ivars.mark_change(); return true; } } |