Skip to content

Commit c73d4a8

Browse files
committed
Merge branch 'master' into unistd
2 parents c783abe + 7791f22 commit c73d4a8

17 files changed

Lines changed: 76 additions & 108 deletions

cpp2rust/converter/models/converter_refcount.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1860,13 +1860,13 @@ void ConverterRefCount::ConvertAssignment(clang::Expr *lhs, clang::Expr *rhs,
18601860
auto lhs_str = ConvertLValue(lhs);
18611861
if (!pending_deref_.empty()) {
18621862
auto ptr = pending_deref_.take();
1863-
// *ptr += val => { let __ptr = ptr.clone(); let __tmp = __ptr.read() +
1864-
// val;
1865-
// __ptr.write(__tmp) }
18661863
auto op = assign_operator;
18671864
op.remove_suffix(1); // remove '='
1868-
StrCat("{ let __ptr = ", ptr, ".clone(); let __tmp = __ptr.read() ", op,
1869-
" ", rhs_as_string, "; __ptr.write(__tmp) }");
1865+
{
1866+
PushBrace brace(*this);
1867+
StrCat(std::format("let _ptr = {}.clone();", ptr));
1868+
StrCat(std::format("_ptr.write(_ptr.read() {} {})", op, rhs_as_string));
1869+
}
18701870
} else {
18711871
StrCat(lhs_str, assign_operator, rhs_as_string);
18721872
}

tests/unit/out/refcount/borrow_mut_opt.rs

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -68,45 +68,39 @@ pub fn convert_with_rhs_1() {
6868
(*arr.borrow_mut())[(0) as usize] = __rhs;
6969
let __rhs = (*x.borrow());
7070
{
71-
let __ptr = z.clone();
72-
let __tmp = __ptr.read() + __rhs;
73-
__ptr.write(__tmp)
71+
let _ptr = z.clone();
72+
_ptr.write(_ptr.read() + __rhs)
7473
};
7574
let __rhs = (*y.borrow());
7675
{
77-
let __ptr = z.clone();
78-
let __tmp = __ptr.read() + __rhs;
79-
__ptr.write(__tmp)
76+
let _ptr = z.clone();
77+
_ptr.write(_ptr.read() + __rhs)
8078
};
8179
let __rhs = ((*p.borrow()).read());
8280
{
83-
let __ptr = z.clone();
84-
let __tmp = __ptr.read() + __rhs;
85-
__ptr.write(__tmp)
81+
let _ptr = z.clone();
82+
_ptr.write(_ptr.read() + __rhs)
8683
};
8784
let __rhs = ((*y.borrow()) + (*x.borrow()));
8885
{
89-
let __ptr = (*p.borrow()).clone();
90-
let __tmp = __ptr.read() + __rhs;
91-
__ptr.write(__tmp)
86+
let _ptr = (*p.borrow()).clone();
87+
_ptr.write(_ptr.read() + __rhs)
9288
};
9389
let __rhs = {
9490
let _lhs = (*x.borrow());
9591
_lhs + (z.read())
9692
};
9793
{
98-
let __ptr = (*p.borrow()).clone();
99-
let __tmp = __ptr.read() + __rhs;
100-
__ptr.write(__tmp)
94+
let _ptr = (*p.borrow()).clone();
95+
_ptr.write(_ptr.read() + __rhs)
10196
};
10297
let __rhs = {
10398
let _lhs = (*y.borrow());
10499
_lhs + (z.read())
105100
};
106101
{
107-
let __ptr = (*p.borrow()).clone();
108-
let __tmp = __ptr.read() + __rhs;
109-
__ptr.write(__tmp)
102+
let _ptr = (*p.borrow()).clone();
103+
_ptr.write(_ptr.read() + __rhs)
110104
};
111105
}
112106
pub fn main() {

tests/unit/out/refcount/complex_function.rs

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -149,15 +149,13 @@ fn main_0() -> i32 {
149149
});
150150
let __rhs = (*x1.borrow());
151151
{
152-
let __ptr = r2.clone();
153-
let __tmp = __ptr.read() + __rhs;
154-
__ptr.write(__tmp)
152+
let _ptr = r2.clone();
153+
_ptr.write(_ptr.read() + __rhs)
155154
};
156155
let __rhs = (r1.read());
157156
{
158-
let __ptr = r3.clone();
159-
let __tmp = __ptr.read() + __rhs;
160-
__ptr.write(__tmp)
157+
let _ptr = r3.clone();
158+
_ptr.write(_ptr.read() + __rhs)
161159
};
162160
let x4: Value<i32> = Rc::new(RefCell::new(
163161
((({
@@ -240,13 +238,12 @@ fn main_0() -> i32 {
240238
.borrow()),
241239
));
242240
{
243-
let __ptr = ({
241+
let _ptr = ({
244242
let _x: Ptr<i32> = x1.as_pointer();
245243
bar_2(_x)
246244
})
247245
.clone();
248-
let __tmp = __ptr.read() + 10;
249-
__ptr.write(__tmp)
246+
_ptr.write(_ptr.read() + 10)
250247
};
251248
({
252249
let _x: Ptr<i32> = x1.as_pointer();
@@ -292,7 +289,7 @@ fn main_0() -> i32 {
292289
}))
293290
+ 1);
294291
{
295-
let __ptr = ({
292+
let _ptr = ({
296293
let _x: Ptr<i32> = (*({
297294
(*({ (*({ (*d.borrow()).get() }).upgrade().deref()).get() })
298295
.upgrade()
@@ -306,8 +303,7 @@ fn main_0() -> i32 {
306303
bar_2(_x)
307304
})
308305
.clone();
309-
let __tmp = __ptr.read() + 10;
310-
__ptr.write(__tmp)
306+
_ptr.write(_ptr.read() + 10)
311307
};
312308
({
313309
let _x: Ptr<i32> = (*({
@@ -359,13 +355,12 @@ fn main_0() -> i32 {
359355
})
360356
.with_mut(|__v| __v.prefix_inc());
361357
{
362-
let __ptr = ({
358+
let _ptr = ({
363359
let _x: Ptr<i32> = (x1.as_pointer());
364360
ptr_1(_x)
365361
})
366362
.clone();
367-
let __tmp = __ptr.read() + 1;
368-
__ptr.write(__tmp)
363+
_ptr.write(_ptr.read() + 1)
369364
};
370365
({
371366
let _x: Ptr<i32> = ((*({
@@ -382,7 +377,7 @@ fn main_0() -> i32 {
382377
})
383378
.with_mut(|__v| __v.prefix_inc());
384379
{
385-
let __ptr = ({
380+
let _ptr = ({
386381
let _x: Ptr<i32> = ((*({
387382
(*({ (*({ (*d.borrow()).get() }).upgrade().deref()).get() })
388383
.upgrade()
@@ -396,11 +391,10 @@ fn main_0() -> i32 {
396391
ptr_1(_x)
397392
})
398393
.clone();
399-
let __tmp = __ptr.read() + 1;
400-
__ptr.write(__tmp)
394+
_ptr.write(_ptr.read() + 1)
401395
};
402396
{
403-
let __ptr = ({
397+
let _ptr = ({
404398
let _x: Ptr<i32> = ((*({
405399
(*({ (*({ (*d.borrow()).get() }).upgrade().deref()).get() })
406400
.upgrade()
@@ -414,8 +408,7 @@ fn main_0() -> i32 {
414408
ptr_1(_x)
415409
})
416410
.clone();
417-
let __tmp = __ptr.read() + 1;
418-
__ptr.write(__tmp)
411+
_ptr.write(_ptr.read() + 1)
419412
};
420413
let ptr1: Value<i32> = Rc::new(RefCell::new(
421414
({

tests/unit/out/refcount/fatorial.rs

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,8 @@ pub fn fatorial_0(n: i32) -> i32 {
2020
pub fn fatorial_by_ref_1(n: Ptr<i32>) {
2121
if ((n.read()) == 1) {
2222
{
23-
let __ptr = n.clone();
24-
let __tmp = __ptr.read() * 1;
25-
__ptr.write(__tmp)
23+
let _ptr = n.clone();
24+
_ptr.write(_ptr.read() * 1)
2625
};
2726
return;
2827
}
@@ -33,18 +32,16 @@ pub fn fatorial_by_ref_1(n: Ptr<i32>) {
3332
});
3433
let __rhs = (*n_1.borrow());
3534
{
36-
let __ptr = n.clone();
37-
let __tmp = __ptr.read() * __rhs;
38-
__ptr.write(__tmp)
35+
let _ptr = n.clone();
36+
_ptr.write(_ptr.read() * __rhs)
3937
};
4038
}
4139
pub fn fatorial_by_ptr_2(n: Ptr<i32>) {
4240
let n: Value<Ptr<i32>> = Rc::new(RefCell::new(n));
4341
if (((*n.borrow()).read()) == 1) {
4442
{
45-
let __ptr = (*n.borrow()).clone();
46-
let __tmp = __ptr.read() * 1;
47-
__ptr.write(__tmp)
43+
let _ptr = (*n.borrow()).clone();
44+
_ptr.write(_ptr.read() * 1)
4845
};
4946
return;
5047
}
@@ -55,9 +52,8 @@ pub fn fatorial_by_ptr_2(n: Ptr<i32>) {
5552
});
5653
let __rhs = (*n_1.borrow());
5754
{
58-
let __ptr = (*n.borrow()).clone();
59-
let __tmp = __ptr.read() * __rhs;
60-
__ptr.write(__tmp)
55+
let _ptr = (*n.borrow()).clone();
56+
_ptr.write(_ptr.read() * __rhs)
6157
};
6258
}
6359
pub fn main() {

tests/unit/out/refcount/fn_ptr_as_condition.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,8 @@ use std::rc::{Rc, Weak};
99
pub fn double_it_0(x: Ptr<i32>) {
1010
let x: Value<Ptr<i32>> = Rc::new(RefCell::new(x));
1111
{
12-
let __ptr = (*x.borrow()).clone();
13-
let __tmp = __ptr.read() * 2;
14-
__ptr.write(__tmp)
12+
let _ptr = (*x.borrow()).clone();
13+
_ptr.write(_ptr.read() * 2)
1514
};
1615
}
1716
pub fn maybe_call_1(cb: FnPtr<fn(Ptr<i32>)>, x: Ptr<i32>) {

tests/unit/out/refcount/foreach_mut.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,8 @@ fn main_0() -> i32 {
3838
'loop_: for mut p in v2.as_pointer() as Ptr<Ptr<i32>> {
3939
let p: Value<Ptr<i32>> = Rc::new(RefCell::new(p.read().clone()));
4040
{
41-
let __ptr = (*p.borrow()).clone();
42-
let __tmp = __ptr.read() + 5;
43-
__ptr.write(__tmp)
41+
let _ptr = (*p.borrow()).clone();
42+
_ptr.write(_ptr.read() + 5)
4443
};
4544
}
4645
'loop_: for p in v2.as_pointer() as Ptr<Ptr<i32>> {

tests/unit/out/refcount/pointer_arithmetic.rs

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,38 +13,33 @@ fn main_0() -> i32 {
1313
let x: Value<i32> = Rc::new(RefCell::new(1));
1414
let p: Value<Ptr<i32>> = Rc::new(RefCell::new((x.as_pointer())));
1515
{
16-
let __ptr = (*p.borrow()).clone();
17-
let __tmp = __ptr.read() + 1;
18-
__ptr.write(__tmp)
16+
let _ptr = (*p.borrow()).clone();
17+
_ptr.write(_ptr.read() + 1)
1918
};
2019
if ((*x.borrow()) == 2) {
2120
let a: Value<Box<[i32]>> = Rc::new(RefCell::new(Box::new([1, 2])));
2221
(*p.borrow_mut()) = ((a.as_pointer() as Ptr<i32>).offset(1 as isize));
2322
{
24-
let __ptr = (*p.borrow()).clone();
25-
let __tmp = __ptr.read() + 1;
26-
__ptr.write(__tmp)
23+
let _ptr = (*p.borrow()).clone();
24+
_ptr.write(_ptr.read() + 1)
2725
};
2826
if ((*a.borrow())[(0) as usize] == 1) && ((*a.borrow())[(1) as usize] == 3) {
2927
(*p.borrow_mut()).prefix_dec();
3028
{
31-
let __ptr = (*p.borrow()).clone();
32-
let __tmp = __ptr.read() + 1;
33-
__ptr.write(__tmp)
29+
let _ptr = (*p.borrow()).clone();
30+
_ptr.write(_ptr.read() + 1)
3431
};
3532
if ((*a.borrow())[(0) as usize] == 2) && ((*a.borrow())[(1) as usize] == 3) {
3633
(*p.borrow_mut()) = (x.as_pointer());
3734
{
38-
let __ptr = (*p.borrow()).clone();
39-
let __tmp = __ptr.read() + 1;
40-
__ptr.write(__tmp)
35+
let _ptr = (*p.borrow()).clone();
36+
_ptr.write(_ptr.read() + 1)
4137
};
4238
if ((*x.borrow()) == 3) {
4339
let p2: Value<Ptr<i32>> = Rc::new(RefCell::new((*p.borrow()).clone()));
4440
{
45-
let __ptr = (*p2.borrow()).clone();
46-
let __tmp = __ptr.read() + 1;
47-
__ptr.write(__tmp)
41+
let _ptr = (*p2.borrow()).clone();
42+
_ptr.write(_ptr.read() + 1)
4843
};
4944
return (((*x.borrow()) == 4) as i32);
5045
}

tests/unit/out/refcount/pointer_array.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,8 @@ pub fn IncrementAll_0(s: Ptr<StackArray>) {
3434
let i: Value<i32> = Rc::new(RefCell::new(0));
3535
'loop_: while ((*i.borrow()) < 3) {
3636
{
37-
let __ptr = (*(*s.upgrade().deref()).arr.borrow())[(*i.borrow()) as usize].clone();
38-
let __tmp = __ptr.read() + 1;
39-
__ptr.write(__tmp)
37+
let _ptr = (*(*s.upgrade().deref()).arr.borrow())[(*i.borrow()) as usize].clone();
38+
_ptr.write(_ptr.read() + 1)
4039
};
4140
(*i.borrow_mut()).prefix_inc();
4241
}

tests/unit/out/refcount/pointers.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,8 @@ fn main_0() -> i32 {
8080
(*t3.borrow_mut()) = (*t2.borrow()).clone();
8181
(*(*(*t3.borrow()).upgrade().deref()).x.borrow_mut()) = 15;
8282
{
83-
let __ptr = ({ (*(*t3.borrow()).upgrade().deref()).as_ptr() }).clone();
84-
let __tmp = __ptr.read() + 10;
85-
__ptr.write(__tmp)
83+
let _ptr = ({ (*(*t3.borrow()).upgrade().deref()).as_ptr() }).clone();
84+
_ptr.write(_ptr.read() + 10)
8685
};
8786
return {
8887
let _lhs = {

tests/unit/out/refcount/refs_as_args.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,8 @@ pub fn more_refs_0(x1: i32, x2: i32, r1: Ptr<i32>, r2: Ptr<i32>) {
3636
_lhs + (r.read())
3737
};
3838
{
39-
let __ptr = rx2.clone();
40-
let __tmp = __ptr.read() + __rhs;
41-
__ptr.write(__tmp)
39+
let _ptr = rx2.clone();
40+
_ptr.write(_ptr.read() + __rhs)
4241
};
4342
let __rhs = (rx2.read());
4443
r1.write(__rhs);

0 commit comments

Comments
 (0)