Skip to content

Commit 2b59759

Browse files
committed
Handle more patterns in mangler
1 parent b5dd144 commit 2b59759

32 files changed

Lines changed: 448 additions & 203 deletions

‎cpp2rust/converter/converter.cpp‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3984,6 +3984,9 @@ Converter::GetOverloadedFunctionName(const clang::FunctionDecl *decl) {
39843984

39853985
for (auto *parameter : decl->parameters()) {
39863986
name += GetUnsafeTypeAsString(parameter->getType());
3987+
if (parameter->getType()->isRValueReferenceType()) {
3988+
name += "_rv";
3989+
}
39873990
name += '_';
39883991
}
39893992

@@ -4042,10 +4045,12 @@ Converter::GetOverloadedFunctionName(const clang::FunctionDecl *decl) {
40424045
ReplaceAll(name, "[", "arr");
40434046
ReplaceAll(name, "]", "arr");
40444047
ReplaceAll(name, ";", "_");
4048+
ReplaceAll(name, ",", "_");
40454049
name.erase(std::remove_if(name.begin(), name.end(),
40464050
[](char c) {
40474051
return c == '<' || c == '>' || c == ' ' ||
4048-
c == ':';
4052+
c == ':' || c == '(' || c == ')' ||
4053+
c == '-';
40494054
}),
40504055
name.end());
40514056
std::replace(name.begin(), name.end(), '*', 'p');

‎tests/multi-file/defaulted_move_cross_tu/out/refcount/defaulted_move_cross_tu.rs‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ impl S {
2424
let this: Ptr<S> = __this.as_pointer();
2525
Rc::try_unwrap(__this).ok().unwrap().into_inner()
2626
}
27-
pub fn S_pmutS(_a0: Ptr<S>) -> Self {
27+
pub fn S_pmutS_rv(_a0: Ptr<S>) -> Self {
2828
let __this: Value<S> = Rc::new(RefCell::new(Self {
2929
v: Rc::new(RefCell::new(std::mem::take(
3030
&mut (*(*_a0.upgrade().deref()).v.borrow_mut()),
@@ -84,18 +84,18 @@ fn main_0() -> i32 {
8484
pub fn shuffle_1(x: i32) -> i32 {
8585
let x: Value<i32> = Rc::new(RefCell::new(x));
8686
let a: Value<S> = Rc::new(RefCell::new(S::S({ (*x.borrow()) })));
87-
let b: Value<S> = Rc::new(RefCell::new(S::S_pmutS({ a.as_pointer() })));
87+
let b: Value<S> = Rc::new(RefCell::new(S::S_pmutS_rv({ a.as_pointer() })));
8888
assert!((*(*a.borrow()).v.borrow()).is_empty());
8989
let c: Value<S> = Rc::new(RefCell::new(S::S({ 1 })));
90-
({ SImpl::operator_assign_pmutS(&c.as_pointer(), b.as_pointer()) });
90+
({ SImpl::operator_assign_pmutS_rv(&c.as_pointer(), b.as_pointer()) });
9191
assert!((*(*b.borrow()).v.borrow()).is_empty());
9292
return ({ sum_0(c.as_pointer()) });
9393
}
9494
pub trait SImpl {
95-
fn operator_assign_pmutS(&self, _a0: Ptr<S>) -> Ptr<S>;
95+
fn operator_assign_pmutS_rv(&self, _a0: Ptr<S>) -> Ptr<S>;
9696
}
9797
impl SImpl for Ptr<S> {
98-
fn operator_assign_pmutS(&self, _a0: Ptr<S>) -> Ptr<S> {
98+
fn operator_assign_pmutS_rv(&self, _a0: Ptr<S>) -> Ptr<S> {
9999
((*(*self).upgrade().deref()).v.as_pointer() as Ptr<Vec<i32>>).write(std::mem::take(
100100
&mut (*(*_a0.upgrade().deref()).v.borrow_mut()),
101101
));

‎tests/multi-file/defaulted_move_cross_tu/out/unsafe/defaulted_move_cross_tu.rs‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@ impl S {
2020
};
2121
this
2222
}
23-
pub unsafe fn S_pmutS(_a0: *mut S) -> Self {
23+
pub unsafe fn S_pmutS_rv(_a0: *mut S) -> Self {
2424
let mut this = Self {
2525
v: std::mem::take(&mut (*_a0).v),
2626
n: std::array::from_fn::<_, 2, _>(|__i: usize| (*_a0).n[(__i)]),
2727
};
2828
this
2929
}
30-
pub unsafe fn operator_assign_pmutS(&mut self, _a0: *mut S) -> *mut S {
30+
pub unsafe fn operator_assign_pmutS_rv(&mut self, _a0: *mut S) -> *mut S {
3131
self.v = std::mem::take(&mut (*_a0).v);
3232
{
3333
if 8_usize != 0 {
@@ -67,10 +67,10 @@ unsafe fn main_0() -> i32 {
6767
}
6868
pub unsafe fn shuffle_1(mut x: i32) -> i32 {
6969
let mut a: S = S::S({ x });
70-
let mut b: S = S::S_pmutS({ &mut a });
70+
let mut b: S = S::S_pmutS_rv({ &mut a });
7171
assert!(a.v.is_empty());
7272
let mut c: S = S::S({ 1 });
73-
(unsafe { S::operator_assign_pmutS(&mut c, &mut b) });
73+
(unsafe { S::operator_assign_pmutS_rv(&mut c, &mut b) });
7474
assert!(b.v.is_empty());
7575
return (unsafe { sum_0(&c) });
7676
}

‎tests/unit/out/refcount/copy_move_defaulted.rs‎

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ impl DefaultCopyUserMove {
153153
let this: Ptr<DefaultCopyUserMove> = __this.as_pointer();
154154
Rc::try_unwrap(__this).ok().unwrap().into_inner()
155155
}
156-
pub fn DefaultCopyUserMove_pmutDefaultCopyUserMove(o: Ptr<DefaultCopyUserMove>) -> Self {
156+
pub fn DefaultCopyUserMove_pmutDefaultCopyUserMove_rv(o: Ptr<DefaultCopyUserMove>) -> Self {
157157
let __this: Value<DefaultCopyUserMove> = Rc::new(RefCell::new(Self {
158158
v: Rc::new(RefCell::new((*(*o.upgrade().deref()).v.borrow()))),
159159
}));
@@ -204,7 +204,7 @@ impl UserCopyDefaultMove {
204204
let this: Ptr<UserCopyDefaultMove> = __this.as_pointer();
205205
Rc::try_unwrap(__this).ok().unwrap().into_inner()
206206
}
207-
pub fn UserCopyDefaultMove_pmutUserCopyDefaultMove(_a0: Ptr<UserCopyDefaultMove>) -> Self {
207+
pub fn UserCopyDefaultMove_pmutUserCopyDefaultMove_rv(_a0: Ptr<UserCopyDefaultMove>) -> Self {
208208
let __this: Value<UserCopyDefaultMove> = Rc::new(RefCell::new(Self {
209209
v: Rc::new(RefCell::new((*(*_a0.upgrade().deref()).v.borrow()))),
210210
}));
@@ -261,7 +261,7 @@ impl Buffer {
261261
);
262262
Rc::try_unwrap(__this).ok().unwrap().into_inner()
263263
}
264-
pub fn Buffer_pmutBuffer(_a0: Ptr<Buffer>) -> Self {
264+
pub fn Buffer_pmutBuffer_rv(_a0: Ptr<Buffer>) -> Self {
265265
let __this: Value<Buffer> = Rc::new(RefCell::new(Self {
266266
data: Rc::new(RefCell::new(std::mem::take(
267267
&mut (*(*_a0.upgrade().deref()).data.borrow_mut()),
@@ -319,7 +319,7 @@ pub struct Owner {
319319
pub p: Value<Option<Value<i32>>>,
320320
}
321321
impl Owner {
322-
pub fn Owner_pmutOwner(_a0: Ptr<Owner>) -> Self {
322+
pub fn Owner_pmutOwner_rv(_a0: Ptr<Owner>) -> Self {
323323
let __this: Value<Owner> = Rc::new(RefCell::new(Self {
324324
data: Rc::new(RefCell::new(std::mem::take(
325325
&mut (*(*_a0.upgrade().deref()).data.borrow_mut()),
@@ -386,7 +386,7 @@ impl Holder {
386386
let this: Ptr<Holder> = __this.as_pointer();
387387
Rc::try_unwrap(__this).ok().unwrap().into_inner()
388388
}
389-
pub fn Holder_pmutHolder(_a0: Ptr<Holder>) -> Self {
389+
pub fn Holder_pmutHolder_rv(_a0: Ptr<Holder>) -> Self {
390390
let __this: Value<Holder> = Rc::new(RefCell::new(Self {
391391
inner: Rc::new(RefCell::new(
392392
(*(*_a0.upgrade().deref()).inner.borrow()).clone(),
@@ -526,7 +526,7 @@ fn main_0() -> i32 {
526526
})));
527527
let m1: Value<DefaultCopyUserMove> = Rc::new(RefCell::new((*m.borrow()).clone()));
528528
let m2: Value<DefaultCopyUserMove> = Rc::new(RefCell::new(
529-
DefaultCopyUserMove::DefaultCopyUserMove_pmutDefaultCopyUserMove({ m.as_pointer() }),
529+
DefaultCopyUserMove::DefaultCopyUserMove_pmutDefaultCopyUserMove_rv({ m.as_pointer() }),
530530
));
531531
assert!(
532532
(((*(*m1.borrow()).v.borrow()) == 7) && ((*(*m2.borrow()).v.borrow()) == 7))
@@ -542,7 +542,7 @@ fn main_0() -> i32 {
542542
})));
543543
(*m3.borrow_mut()) = (*m1.borrow()).clone();
544544
({
545-
DefaultCopyUserMoveImpl::operator_assign_pmutDefaultCopyUserMove(
545+
DefaultCopyUserMoveImpl::operator_assign_pmutDefaultCopyUserMove_rv(
546546
&m4.as_pointer(),
547547
m1.as_pointer(),
548548
)
@@ -559,7 +559,7 @@ fn main_0() -> i32 {
559559
UserCopyDefaultMove::UserCopyDefaultMove_pconstUserCopyDefaultMove({ u.as_pointer() }),
560560
));
561561
let u2: Value<UserCopyDefaultMove> = Rc::new(RefCell::new(
562-
UserCopyDefaultMove::UserCopyDefaultMove_pmutUserCopyDefaultMove({ u.as_pointer() }),
562+
UserCopyDefaultMove::UserCopyDefaultMove_pmutUserCopyDefaultMove_rv({ u.as_pointer() }),
563563
));
564564
assert!(
565565
(((*(*u1.borrow()).v.borrow()) == 108) && ((*(*u2.borrow()).v.borrow()) == 8))
@@ -580,14 +580,16 @@ fn main_0() -> i32 {
580580
)
581581
});
582582
({
583-
UserCopyDefaultMoveImpl::operator_assign_pmutUserCopyDefaultMove(
583+
UserCopyDefaultMoveImpl::operator_assign_pmutUserCopyDefaultMove_rv(
584584
&u4.as_pointer(),
585585
u2.as_pointer(),
586586
)
587587
});
588588
assert!(((*(*u3.borrow()).v.borrow()) == 108) && ((*(*u4.borrow()).v.borrow()) == 8));
589589
let p: Value<Buffer> = Rc::new(RefCell::new(Buffer::Buffer({ 3 })));
590-
let q: Value<Buffer> = Rc::new(RefCell::new(Buffer::Buffer_pmutBuffer({ p.as_pointer() })));
590+
let q: Value<Buffer> = Rc::new(RefCell::new(Buffer::Buffer_pmutBuffer_rv({
591+
p.as_pointer()
592+
})));
591593
assert!(
592594
((((*(*q.borrow()).n.borrow()) == 3) && ((*(*q.borrow()).data.borrow()).len() == 3_usize))
593595
&& ((((*q.borrow()).data.as_pointer() as Ptr<i32>)
@@ -597,7 +599,7 @@ fn main_0() -> i32 {
597599
&& ((*(*p.borrow()).data.borrow()).is_empty())
598600
);
599601
let r: Value<Buffer> = Rc::new(RefCell::new(Buffer::Buffer({ 1 })));
600-
({ BufferImpl::operator_assign_pmutBuffer(&r.as_pointer(), q.as_pointer()) });
602+
({ BufferImpl::operator_assign_pmutBuffer_rv(&r.as_pointer(), q.as_pointer()) });
601603
assert!(
602604
((((*(*r.borrow()).n.borrow()) == 3) && ((*(*r.borrow()).data.borrow()).len() == 3_usize))
603605
&& ((*(*r.borrow()).arr.borrow())[(1) as usize] == 4))
@@ -617,10 +619,10 @@ fn main_0() -> i32 {
617619
&& ((*(*q.borrow()).rows.borrow()).is_empty())
618620
);
619621
let bufs: Value<Vec<Buffer>> = Rc::new(RefCell::new(Vec::new()));
620-
(*bufs.borrow_mut()).push(Buffer::Buffer_pmutBuffer({ r.as_pointer() }));
622+
(*bufs.borrow_mut()).push(Buffer::Buffer_pmutBuffer_rv({ r.as_pointer() }));
621623
{
622624
let __arg =
623-
Buffer::Buffer_pmutBuffer({ (bufs.as_pointer() as Ptr<Buffer>).offset(0_usize) });
625+
Buffer::Buffer_pmutBuffer_rv({ (bufs.as_pointer() as Ptr<Buffer>).offset(0_usize) });
624626
bufs.as_pointer()
625627
.with_mut(|__v: &mut Vec<Buffer>| __v.push(__arg))
626628
};
@@ -657,7 +659,7 @@ fn main_0() -> i32 {
657659
let _p: Ptr<_> = Ptr::alloc(7);
658660
(*(*o1.borrow()).p.borrow_mut()) = _p.to_owned_opt()
659661
};
660-
let o2: Value<Owner> = Rc::new(RefCell::new(Owner::Owner_pmutOwner({ o1.as_pointer() })));
662+
let o2: Value<Owner> = Rc::new(RefCell::new(Owner::Owner_pmutOwner_rv({ o1.as_pointer() })));
661663
assert!(
662664
((((*(*o2.borrow()).n.borrow()) == 5)
663665
&& ((*(*o2.borrow()).data.borrow()).len() == 1_usize))
@@ -669,7 +671,7 @@ fn main_0() -> i32 {
669671
&& (((*(*o1.borrow()).p.borrow()).as_pointer()).is_null())
670672
);
671673
let o3: Value<Owner> = Rc::new(RefCell::new(<Owner>::default()));
672-
({ OwnerImpl::operator_assign_pmutOwner(&o3.as_pointer(), o2.as_pointer()) });
674+
({ OwnerImpl::operator_assign_pmutOwner_rv(&o3.as_pointer(), o2.as_pointer()) });
673675
assert!(
674676
((((*(*o3.borrow()).n.borrow()) == 5)
675677
&& ((((*o3.borrow()).data.as_pointer() as Ptr<i32>)
@@ -689,7 +691,9 @@ fn main_0() -> i32 {
689691
let _p: Ptr<_> = Ptr::alloc(9);
690692
(*(*h1.borrow()).p.borrow_mut()) = _p.to_owned_opt()
691693
};
692-
let h2: Value<Holder> = Rc::new(RefCell::new(Holder::Holder_pmutHolder({ h1.as_pointer() })));
694+
let h2: Value<Holder> = Rc::new(RefCell::new(Holder::Holder_pmutHolder_rv({
695+
h1.as_pointer()
696+
})));
693697
let _dtor_h2 = ScopedDestructor::new(&h2, |__p| __p.destructor());
694698
assert!(
695699
((((*(*(*h2.borrow()).inner.borrow()).x.borrow()) == 4)
@@ -699,7 +703,7 @@ fn main_0() -> i32 {
699703
);
700704
let h3: Value<Holder> = Rc::new(RefCell::new(Holder::Holder({ 1 })));
701705
let _dtor_h3 = ScopedDestructor::new(&h3, |__p| __p.destructor());
702-
({ HolderImpl::operator_assign_pmutHolder(&h3.as_pointer(), h2.as_pointer()) });
706+
({ HolderImpl::operator_assign_pmutHolder_rv(&h3.as_pointer(), h2.as_pointer()) });
703707
assert!(
704708
((((*(*(*h3.borrow()).inner.borrow()).x.borrow()) == 4)
705709
&& ((*(*(*h3.borrow()).e.borrow()).arr.borrow())[(1) as usize] == 5))
@@ -709,10 +713,10 @@ fn main_0() -> i32 {
709713
return 0;
710714
}
711715
pub trait BufferImpl {
712-
fn operator_assign_pmutBuffer(&self, _a0: Ptr<Buffer>) -> Ptr<Buffer>;
716+
fn operator_assign_pmutBuffer_rv(&self, _a0: Ptr<Buffer>) -> Ptr<Buffer>;
713717
}
714718
impl BufferImpl for Ptr<Buffer> {
715-
fn operator_assign_pmutBuffer(&self, _a0: Ptr<Buffer>) -> Ptr<Buffer> {
719+
fn operator_assign_pmutBuffer_rv(&self, _a0: Ptr<Buffer>) -> Ptr<Buffer> {
716720
((*(*self).upgrade().deref()).data.as_pointer() as Ptr<Vec<i32>>).write(std::mem::take(
717721
&mut (*(*_a0.upgrade().deref()).data.borrow_mut()),
718722
));
@@ -734,13 +738,13 @@ impl BufferImpl for Ptr<Buffer> {
734738
}
735739
}
736740
pub trait DefaultCopyUserMoveImpl {
737-
fn operator_assign_pmutDefaultCopyUserMove(
741+
fn operator_assign_pmutDefaultCopyUserMove_rv(
738742
&self,
739743
o: Ptr<DefaultCopyUserMove>,
740744
) -> Ptr<DefaultCopyUserMove>;
741745
}
742746
impl DefaultCopyUserMoveImpl for Ptr<DefaultCopyUserMove> {
743-
fn operator_assign_pmutDefaultCopyUserMove(
747+
fn operator_assign_pmutDefaultCopyUserMove_rv(
744748
&self,
745749
o: Ptr<DefaultCopyUserMove>,
746750
) -> Ptr<DefaultCopyUserMove> {
@@ -757,11 +761,11 @@ impl ExplicitImpl for Ptr<Explicit> {
757761
fn destructor(&self) {}
758762
}
759763
pub trait HolderImpl {
760-
fn operator_assign_pmutHolder(&self, _a0: Ptr<Holder>) -> Ptr<Holder>;
764+
fn operator_assign_pmutHolder_rv(&self, _a0: Ptr<Holder>) -> Ptr<Holder>;
761765
fn destructor(&self);
762766
}
763767
impl HolderImpl for Ptr<Holder> {
764-
fn operator_assign_pmutHolder(&self, _a0: Ptr<Holder>) -> Ptr<Holder> {
768+
fn operator_assign_pmutHolder_rv(&self, _a0: Ptr<Holder>) -> Ptr<Holder> {
765769
let __rhs = (*(*_a0.upgrade().deref()).inner.borrow()).clone();
766770
(*(*(*self).upgrade().deref()).inner.borrow_mut()) = __rhs;
767771
let __rhs = (*(*_a0.upgrade().deref()).e.borrow()).clone();
@@ -775,10 +779,10 @@ impl HolderImpl for Ptr<Holder> {
775779
}
776780
}
777781
pub trait OwnerImpl {
778-
fn operator_assign_pmutOwner(&self, _a0: Ptr<Owner>) -> Ptr<Owner>;
782+
fn operator_assign_pmutOwner_rv(&self, _a0: Ptr<Owner>) -> Ptr<Owner>;
779783
}
780784
impl OwnerImpl for Ptr<Owner> {
781-
fn operator_assign_pmutOwner(&self, _a0: Ptr<Owner>) -> Ptr<Owner> {
785+
fn operator_assign_pmutOwner_rv(&self, _a0: Ptr<Owner>) -> Ptr<Owner> {
782786
((*(*self).upgrade().deref()).data.as_pointer() as Ptr<Vec<i32>>).write(std::mem::take(
783787
&mut (*(*_a0.upgrade().deref()).data.borrow_mut()),
784788
));
@@ -803,7 +807,7 @@ pub trait UserCopyDefaultMoveImpl {
803807
&self,
804808
o: Ptr<UserCopyDefaultMove>,
805809
) -> Ptr<UserCopyDefaultMove>;
806-
fn operator_assign_pmutUserCopyDefaultMove(
810+
fn operator_assign_pmutUserCopyDefaultMove_rv(
807811
&self,
808812
_a0: Ptr<UserCopyDefaultMove>,
809813
) -> Ptr<UserCopyDefaultMove>;
@@ -817,7 +821,7 @@ impl UserCopyDefaultMoveImpl for Ptr<UserCopyDefaultMove> {
817821
(*(*(*self).upgrade().deref()).v.borrow_mut()) = __rhs;
818822
return (*self).clone();
819823
}
820-
fn operator_assign_pmutUserCopyDefaultMove(
824+
fn operator_assign_pmutUserCopyDefaultMove_rv(
821825
&self,
822826
_a0: Ptr<UserCopyDefaultMove>,
823827
) -> Ptr<UserCopyDefaultMove> {

0 commit comments

Comments
 (0)