Skip to content

Commit 5bd7a14

Browse files
committed
Fix defeault arguments for constructor
1 parent e88a390 commit 5bd7a14

3 files changed

Lines changed: 14 additions & 10 deletions

File tree

‎cpp2rust/converter/converter.cpp‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3326,6 +3326,14 @@ void Converter::ConvertCXXConstructExprArgs(clang::CXXConstructExpr *expr) {
33263326
auto param_type = param->getType();
33273327
bool has_default = param->hasDefaultArg();
33283328

3329+
if (arg_idx < expr->getNumArgs() &&
3330+
clang::isa<clang::CXXDefaultArgExpr>(expr->getArg(arg_idx))) {
3331+
assert(has_default);
3332+
++arg_idx;
3333+
StrCat("None", token::kComma);
3334+
continue;
3335+
}
3336+
33293337
if (arg_idx < expr->getNumArgs()) {
33303338
clang::Expr *arg = expr->getArg(arg_idx++);
33313339
PushBrace brace(*this);

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,13 @@ fn main_0() -> i32 {
7676
}) as i32)
7777
== (true as i32))
7878
);
79-
let b: Value<Bar> = Rc::new(RefCell::new(Bar::Bar({ Some() })));
79+
let b: Value<Bar> = Rc::new(RefCell::new(Bar::Bar(None)));
8080
assert!(((*(*b.borrow()).v.borrow()) == 1));
8181
assert!(((*Bar::Bar({ Some(2) },).v.borrow()) == 2));
8282
let arr: Value<Box<[Bar]>> = Rc::new(RefCell::new(Box::new([
83-
Bar::Bar({ Some() }),
84-
Bar::Bar({ Some() }),
85-
Bar::Bar({ Some() }),
83+
Bar::Bar(None),
84+
Bar::Bar(None),
85+
Bar::Bar(None),
8686
])));
8787
assert!(((*(*arr.borrow())[(0) as usize].v.borrow()) == 1));
8888
assert!(((*(*arr.borrow())[(2) as usize].v.borrow()) == 1));

‎tests/unit/out/unsafe/default_function_arguments.rs‎

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,10 @@ unsafe fn main_0() -> i32 {
4949
}) as i32)
5050
== (true as i32))
5151
);
52-
let mut b: Bar = Bar::Bar({ Some() });
52+
let mut b: Bar = Bar::Bar(None);
5353
assert!(((b.v) == (1)));
5454
assert!(((Bar::Bar({ Some(2) },).v) == (2)));
55-
let mut arr: [Bar; 3] = [
56-
Bar::Bar({ Some() }),
57-
Bar::Bar({ Some() }),
58-
Bar::Bar({ Some() }),
59-
];
55+
let mut arr: [Bar; 3] = [Bar::Bar(None), Bar::Bar(None), Bar::Bar(None)];
6056
assert!(((arr[(0) as usize].v) == (1)));
6157
assert!(((arr[(2) as usize].v) == (1)));
6258
return 0;

0 commit comments

Comments
 (0)