summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-08-03 11:37:16 +0800
committerJohn Hodge <tpg@mutabah.net>2016-08-03 11:37:16 +0800
commit9d814d8dbc84e9e4e1654887bbe9e856aa4a5df8 (patch)
treed85043af5df35b86eb4772fcb9b7505dedd1fa6c /src
parenta5ce803acea8166b56a24490ed4604ed64bf9b28 (diff)
downloadmrust-9d814d8dbc84e9e4e1654887bbe9e856aa4a5df8.tar.gz
HIR Typecheck CS - Add Unsize insertion for TraitObject coerce
Diffstat (limited to 'src')
-rw-r--r--src/hir_typeck/expr_cs.cpp17
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;
}
}