diff options
author | John Hodge <tpg@ucc.asn.au> | 2019-01-03 23:11:35 +0800 |
---|---|---|
committer | John Hodge <tpg@ucc.asn.au> | 2019-01-03 23:11:35 +0800 |
commit | 777bdf9a8bfcd6a5b1b4c38c6a57f582fc9d5d18 (patch) | |
tree | bec0f22d76a3b2f64f85f167250720ace3aa6195 /src/hir_expand/annotate_value_usage.cpp | |
parent | 17c5d0e1d12229f6b720708748723811f7f2acd3 (diff) | |
download | mrust-777bdf9a8bfcd6a5b1b4c38c6a57f582fc9d5d18.tar.gz |
HIR Expand - Handle match ergonomics in AVU
Diffstat (limited to 'src/hir_expand/annotate_value_usage.cpp')
-rw-r--r-- | src/hir_expand/annotate_value_usage.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/hir_expand/annotate_value_usage.cpp b/src/hir_expand/annotate_value_usage.cpp index 693c7745..f5acbbc5 100644 --- a/src/hir_expand/annotate_value_usage.cpp +++ b/src/hir_expand/annotate_value_usage.cpp @@ -452,12 +452,20 @@ namespace { throw ""; } - ::HIR::ValueUsage get_usage_for_pattern(const Span& sp, const ::HIR::Pattern& pat, const ::HIR::TypeRef& ty) const + ::HIR::ValueUsage get_usage_for_pattern(const Span& sp, const ::HIR::Pattern& pat, const ::HIR::TypeRef& outer_ty) const { if( pat.m_binding.is_valid() ) { - return get_usage_for_pattern_binding(sp, pat.m_binding, ty); + return get_usage_for_pattern_binding(sp, pat.m_binding, outer_ty); } + // Implicit derefs + const ::HIR::TypeRef* typ = &outer_ty; + for(size_t i = 0; i < pat.m_implicit_deref_count; i ++) + { + typ = &*typ->m_data.as_Borrow().inner; + } + const ::HIR::TypeRef& ty = *typ; + TU_MATCHA( (pat.m_data), (pe), (Any, return ::HIR::ValueUsage::Borrow; |