diff --git a/cpp2rust/converter/models/converter_refcount.cpp b/cpp2rust/converter/models/converter_refcount.cpp index c2bd9e18..88839beb 100644 --- a/cpp2rust/converter/models/converter_refcount.cpp +++ b/cpp2rust/converter/models/converter_refcount.cpp @@ -1796,13 +1796,13 @@ void ConverterRefCount::ConvertAssignment(clang::Expr *lhs, clang::Expr *rhs, auto lhs_str = ConvertLValue(lhs); if (!pending_deref_.empty()) { auto ptr = pending_deref_.take(); - // *ptr += val => { let __ptr = ptr.clone(); let __tmp = __ptr.read() + - // val; - // __ptr.write(__tmp) } auto op = assign_operator; op.remove_suffix(1); // remove '=' - StrCat("{ let __ptr = ", ptr, ".clone(); let __tmp = __ptr.read() ", op, - " ", rhs_as_string, "; __ptr.write(__tmp) }"); + { + PushBrace brace(*this); + StrCat(std::format("let _ptr = {}.clone();", ptr)); + StrCat(std::format("_ptr.write(_ptr.read() {} {})", op, rhs_as_string)); + } } else { StrCat(lhs_str, assign_operator, rhs_as_string); } diff --git a/tests/unit/out/refcount/borrow_mut_opt.rs b/tests/unit/out/refcount/borrow_mut_opt.rs index 2cbc40c2..c5af8da9 100644 --- a/tests/unit/out/refcount/borrow_mut_opt.rs +++ b/tests/unit/out/refcount/borrow_mut_opt.rs @@ -68,45 +68,39 @@ pub fn convert_with_rhs_1() { (*arr.borrow_mut())[(0) as usize] = __rhs; let __rhs = (*x.borrow()); { - let __ptr = z.clone(); - let __tmp = __ptr.read() + __rhs; - __ptr.write(__tmp) + let _ptr = z.clone(); + _ptr.write(_ptr.read() + __rhs) }; let __rhs = (*y.borrow()); { - let __ptr = z.clone(); - let __tmp = __ptr.read() + __rhs; - __ptr.write(__tmp) + let _ptr = z.clone(); + _ptr.write(_ptr.read() + __rhs) }; let __rhs = ((*p.borrow()).read()); { - let __ptr = z.clone(); - let __tmp = __ptr.read() + __rhs; - __ptr.write(__tmp) + let _ptr = z.clone(); + _ptr.write(_ptr.read() + __rhs) }; let __rhs = ((*y.borrow()) + (*x.borrow())); { - let __ptr = (*p.borrow()).clone(); - let __tmp = __ptr.read() + __rhs; - __ptr.write(__tmp) + let _ptr = (*p.borrow()).clone(); + _ptr.write(_ptr.read() + __rhs) }; let __rhs = { let _lhs = (*x.borrow()); _lhs + (z.read()) }; { - let __ptr = (*p.borrow()).clone(); - let __tmp = __ptr.read() + __rhs; - __ptr.write(__tmp) + let _ptr = (*p.borrow()).clone(); + _ptr.write(_ptr.read() + __rhs) }; let __rhs = { let _lhs = (*y.borrow()); _lhs + (z.read()) }; { - let __ptr = (*p.borrow()).clone(); - let __tmp = __ptr.read() + __rhs; - __ptr.write(__tmp) + let _ptr = (*p.borrow()).clone(); + _ptr.write(_ptr.read() + __rhs) }; } pub fn main() { diff --git a/tests/unit/out/refcount/complex_function.rs b/tests/unit/out/refcount/complex_function.rs index a10997f4..933772f7 100644 --- a/tests/unit/out/refcount/complex_function.rs +++ b/tests/unit/out/refcount/complex_function.rs @@ -140,15 +140,13 @@ fn main_0() -> i32 { }); let __rhs = (*x1.borrow()); { - let __ptr = r2.clone(); - let __tmp = __ptr.read() + __rhs; - __ptr.write(__tmp) + let _ptr = r2.clone(); + _ptr.write(_ptr.read() + __rhs) }; let __rhs = (r1.read()); { - let __ptr = r3.clone(); - let __tmp = __ptr.read() + __rhs; - __ptr.write(__tmp) + let _ptr = r3.clone(); + _ptr.write(_ptr.read() + __rhs) }; let x4: Value = Rc::new(RefCell::new( ((({ @@ -231,13 +229,12 @@ fn main_0() -> i32 { .borrow()), )); { - let __ptr = ({ + let _ptr = ({ let _x: Ptr = x1.as_pointer(); bar_2(_x) }) .clone(); - let __tmp = __ptr.read() + 10; - __ptr.write(__tmp) + _ptr.write(_ptr.read() + 10) }; ({ let _x: Ptr = x1.as_pointer(); @@ -283,7 +280,7 @@ fn main_0() -> i32 { })) + 1); { - let __ptr = ({ + let _ptr = ({ let _x: Ptr = (*({ (*({ (*({ (*d.borrow()).get() }).upgrade().deref()).get() }) .upgrade() @@ -297,8 +294,7 @@ fn main_0() -> i32 { bar_2(_x) }) .clone(); - let __tmp = __ptr.read() + 10; - __ptr.write(__tmp) + _ptr.write(_ptr.read() + 10) }; ({ let _x: Ptr = (*({ @@ -350,13 +346,12 @@ fn main_0() -> i32 { }) .with_mut(|__v| __v.prefix_inc()); { - let __ptr = ({ + let _ptr = ({ let _x: Ptr = (x1.as_pointer()); ptr_1(_x) }) .clone(); - let __tmp = __ptr.read() + 1; - __ptr.write(__tmp) + _ptr.write(_ptr.read() + 1) }; ({ let _x: Ptr = ((*({ @@ -373,7 +368,7 @@ fn main_0() -> i32 { }) .with_mut(|__v| __v.prefix_inc()); { - let __ptr = ({ + let _ptr = ({ let _x: Ptr = ((*({ (*({ (*({ (*d.borrow()).get() }).upgrade().deref()).get() }) .upgrade() @@ -387,11 +382,10 @@ fn main_0() -> i32 { ptr_1(_x) }) .clone(); - let __tmp = __ptr.read() + 1; - __ptr.write(__tmp) + _ptr.write(_ptr.read() + 1) }; { - let __ptr = ({ + let _ptr = ({ let _x: Ptr = ((*({ (*({ (*({ (*d.borrow()).get() }).upgrade().deref()).get() }) .upgrade() @@ -405,8 +399,7 @@ fn main_0() -> i32 { ptr_1(_x) }) .clone(); - let __tmp = __ptr.read() + 1; - __ptr.write(__tmp) + _ptr.write(_ptr.read() + 1) }; let ptr1: Value = Rc::new(RefCell::new( ({ diff --git a/tests/unit/out/refcount/fatorial.rs b/tests/unit/out/refcount/fatorial.rs index 9e7f4ca3..e5088305 100644 --- a/tests/unit/out/refcount/fatorial.rs +++ b/tests/unit/out/refcount/fatorial.rs @@ -20,9 +20,8 @@ pub fn fatorial_0(n: i32) -> i32 { pub fn fatorial_by_ref_1(n: Ptr) { if ((n.read()) == 1) { { - let __ptr = n.clone(); - let __tmp = __ptr.read() * 1; - __ptr.write(__tmp) + let _ptr = n.clone(); + _ptr.write(_ptr.read() * 1) }; return; } @@ -33,18 +32,16 @@ pub fn fatorial_by_ref_1(n: Ptr) { }); let __rhs = (*n_1.borrow()); { - let __ptr = n.clone(); - let __tmp = __ptr.read() * __rhs; - __ptr.write(__tmp) + let _ptr = n.clone(); + _ptr.write(_ptr.read() * __rhs) }; } pub fn fatorial_by_ptr_2(n: Ptr) { let n: Value> = Rc::new(RefCell::new(n)); if (((*n.borrow()).read()) == 1) { { - let __ptr = (*n.borrow()).clone(); - let __tmp = __ptr.read() * 1; - __ptr.write(__tmp) + let _ptr = (*n.borrow()).clone(); + _ptr.write(_ptr.read() * 1) }; return; } @@ -55,9 +52,8 @@ pub fn fatorial_by_ptr_2(n: Ptr) { }); let __rhs = (*n_1.borrow()); { - let __ptr = (*n.borrow()).clone(); - let __tmp = __ptr.read() * __rhs; - __ptr.write(__tmp) + let _ptr = (*n.borrow()).clone(); + _ptr.write(_ptr.read() * __rhs) }; } pub fn main() { diff --git a/tests/unit/out/refcount/fn_ptr_as_condition.rs b/tests/unit/out/refcount/fn_ptr_as_condition.rs index d629dfba..eb161583 100644 --- a/tests/unit/out/refcount/fn_ptr_as_condition.rs +++ b/tests/unit/out/refcount/fn_ptr_as_condition.rs @@ -9,9 +9,8 @@ use std::rc::{Rc, Weak}; pub fn double_it_0(x: Ptr) { let x: Value> = Rc::new(RefCell::new(x)); { - let __ptr = (*x.borrow()).clone(); - let __tmp = __ptr.read() * 2; - __ptr.write(__tmp) + let _ptr = (*x.borrow()).clone(); + _ptr.write(_ptr.read() * 2) }; } pub fn maybe_call_1(cb: FnPtr)>, x: Ptr) { diff --git a/tests/unit/out/refcount/foreach_mut.rs b/tests/unit/out/refcount/foreach_mut.rs index 8af20da7..c969ecbe 100644 --- a/tests/unit/out/refcount/foreach_mut.rs +++ b/tests/unit/out/refcount/foreach_mut.rs @@ -38,9 +38,8 @@ fn main_0() -> i32 { 'loop_: for mut p in v2.as_pointer() as Ptr> { let p: Value> = Rc::new(RefCell::new(p.read().clone())); { - let __ptr = (*p.borrow()).clone(); - let __tmp = __ptr.read() + 5; - __ptr.write(__tmp) + let _ptr = (*p.borrow()).clone(); + _ptr.write(_ptr.read() + 5) }; } 'loop_: for p in v2.as_pointer() as Ptr> { diff --git a/tests/unit/out/refcount/pointer_arithmetic.rs b/tests/unit/out/refcount/pointer_arithmetic.rs index d0bf7823..08dbd9f5 100644 --- a/tests/unit/out/refcount/pointer_arithmetic.rs +++ b/tests/unit/out/refcount/pointer_arithmetic.rs @@ -13,38 +13,33 @@ fn main_0() -> i32 { let x: Value = Rc::new(RefCell::new(1)); let p: Value> = Rc::new(RefCell::new((x.as_pointer()))); { - let __ptr = (*p.borrow()).clone(); - let __tmp = __ptr.read() + 1; - __ptr.write(__tmp) + let _ptr = (*p.borrow()).clone(); + _ptr.write(_ptr.read() + 1) }; if ((*x.borrow()) == 2) { let a: Value> = Rc::new(RefCell::new(Box::new([1, 2]))); (*p.borrow_mut()) = ((a.as_pointer() as Ptr).offset(1 as isize)); { - let __ptr = (*p.borrow()).clone(); - let __tmp = __ptr.read() + 1; - __ptr.write(__tmp) + let _ptr = (*p.borrow()).clone(); + _ptr.write(_ptr.read() + 1) }; if ((*a.borrow())[(0) as usize] == 1) && ((*a.borrow())[(1) as usize] == 3) { (*p.borrow_mut()).prefix_dec(); { - let __ptr = (*p.borrow()).clone(); - let __tmp = __ptr.read() + 1; - __ptr.write(__tmp) + let _ptr = (*p.borrow()).clone(); + _ptr.write(_ptr.read() + 1) }; if ((*a.borrow())[(0) as usize] == 2) && ((*a.borrow())[(1) as usize] == 3) { (*p.borrow_mut()) = (x.as_pointer()); { - let __ptr = (*p.borrow()).clone(); - let __tmp = __ptr.read() + 1; - __ptr.write(__tmp) + let _ptr = (*p.borrow()).clone(); + _ptr.write(_ptr.read() + 1) }; if ((*x.borrow()) == 3) { let p2: Value> = Rc::new(RefCell::new((*p.borrow()).clone())); { - let __ptr = (*p2.borrow()).clone(); - let __tmp = __ptr.read() + 1; - __ptr.write(__tmp) + let _ptr = (*p2.borrow()).clone(); + _ptr.write(_ptr.read() + 1) }; return (((*x.borrow()) == 4) as i32); } diff --git a/tests/unit/out/refcount/pointer_array.rs b/tests/unit/out/refcount/pointer_array.rs index fac12083..e420db79 100644 --- a/tests/unit/out/refcount/pointer_array.rs +++ b/tests/unit/out/refcount/pointer_array.rs @@ -34,9 +34,8 @@ pub fn IncrementAll_0(s: Ptr) { let i: Value = Rc::new(RefCell::new(0)); 'loop_: while ((*i.borrow()) < 3) { { - let __ptr = (*(*s.upgrade().deref()).arr.borrow())[(*i.borrow()) as usize].clone(); - let __tmp = __ptr.read() + 1; - __ptr.write(__tmp) + let _ptr = (*(*s.upgrade().deref()).arr.borrow())[(*i.borrow()) as usize].clone(); + _ptr.write(_ptr.read() + 1) }; (*i.borrow_mut()).prefix_inc(); } diff --git a/tests/unit/out/refcount/pointers.rs b/tests/unit/out/refcount/pointers.rs index 8a9f472d..36b6a57b 100644 --- a/tests/unit/out/refcount/pointers.rs +++ b/tests/unit/out/refcount/pointers.rs @@ -71,9 +71,8 @@ fn main_0() -> i32 { (*t3.borrow_mut()) = (*t2.borrow()).clone(); (*(*(*t3.borrow()).upgrade().deref()).x.borrow_mut()) = 15; { - let __ptr = ({ (*(*t3.borrow()).upgrade().deref()).as_ptr() }).clone(); - let __tmp = __ptr.read() + 10; - __ptr.write(__tmp) + let _ptr = ({ (*(*t3.borrow()).upgrade().deref()).as_ptr() }).clone(); + _ptr.write(_ptr.read() + 10) }; return { let _lhs = { diff --git a/tests/unit/out/refcount/refs_as_args.rs b/tests/unit/out/refcount/refs_as_args.rs index 930f4006..0d85da47 100644 --- a/tests/unit/out/refcount/refs_as_args.rs +++ b/tests/unit/out/refcount/refs_as_args.rs @@ -36,9 +36,8 @@ pub fn more_refs_0(x1: i32, x2: i32, r1: Ptr, r2: Ptr) { _lhs + (r.read()) }; { - let __ptr = rx2.clone(); - let __tmp = __ptr.read() + __rhs; - __ptr.write(__tmp) + let _ptr = rx2.clone(); + _ptr.write(_ptr.read() + __rhs) }; let __rhs = (rx2.read()); r1.write(__rhs); diff --git a/tests/unit/out/refcount/unique_ptr.rs b/tests/unit/out/refcount/unique_ptr.rs index b9228cf3..2df1e3a4 100644 --- a/tests/unit/out/refcount/unique_ptr.rs +++ b/tests/unit/out/refcount/unique_ptr.rs @@ -58,9 +58,8 @@ pub fn DoStuffWithSafePointer_0(safe_ptr: Ptr>>) { (*x4.borrow_mut()) = (*x3.borrow_mut()).take(); let raw_ptr2: Value> = Rc::new(RefCell::new(((*x4.borrow()).as_pointer()))); { - let __ptr = (*raw_ptr2.borrow()).clone(); - let __tmp = __ptr.read() + 1; - __ptr.write(__tmp) + let _ptr = (*raw_ptr2.borrow()).clone(); + _ptr.write(_ptr.read() + 1) }; let pair: Value>> = Rc::new(RefCell::new(Some(Rc::new(RefCell::new(Pair { diff --git a/tests/unit/out/refcount/vector.rs b/tests/unit/out/refcount/vector.rs index c501f26f..3884389e 100644 --- a/tests/unit/out/refcount/vector.rs +++ b/tests/unit/out/refcount/vector.rs @@ -211,9 +211,8 @@ fn main_0() -> i32 { let ref1: Ptr = (v6.as_pointer() as Ptr).offset((*s2.borrow()).wrapping_sub(1_u64) as isize); { - let __ptr = ref1.clone(); - let __tmp = __ptr.read() + 1.5E+0; - __ptr.write(__tmp) + let _ptr = ref1.clone(); + _ptr.write(_ptr.read() + 1.5E+0) }; assert!( (((v6.as_pointer() as Ptr)