summaryrefslogtreecommitdiff
path: root/src/hir_expand/closures.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/hir_expand/closures.cpp')
-rw-r--r--src/hir_expand/closures.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/hir_expand/closures.cpp b/src/hir_expand/closures.cpp
index da76cb79..eab96d8e 100644
--- a/src/hir_expand/closures.cpp
+++ b/src/hir_expand/closures.cpp
@@ -901,8 +901,16 @@ namespace {
return ;
}
- if( usage == ::HIR::ValueUsage::Move && m_resolve.type_is_copy(sp, m_variable_types.at(slot)) ) {
- usage = ::HIR::ValueUsage::Borrow;
+
+ if( usage == ::HIR::ValueUsage::Move ) {
+ if( m_resolve.type_is_copy(sp, m_variable_types.at(slot)) ) {
+ usage = ::HIR::ValueUsage::Borrow;
+ }
+ else if( m_variable_types.at(slot).m_data.is_Borrow() && m_variable_types.at(slot).m_data.as_Borrow().type == ::HIR::BorrowType::Unique ) {
+ usage = ::HIR::ValueUsage::Mutate;
+ }
+ else {
+ }
}
assert(m_closure_stack.size() > 0 );