Skip to content

Commit e3c78ce

Browse files
committed
Merge emit_push_open and emit_push_close
1 parent 392a53c commit e3c78ce

4 files changed

Lines changed: 18 additions & 24 deletions

File tree

‎cpp2rust/converter/converter.h‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -998,8 +998,8 @@ class Converter : public clang::RecursiveASTVisitor<Converter> {
998998
virtual bool emplace_back_plugin_convert(clang::CallExpr *call);
999999
virtual void emplace_back_plugin_construct_arg(clang::QualType elem_type,
10001000
clang::CXXConstructExpr *ctor);
1001-
virtual void emplace_back_emit_push_open(clang::CXXMemberCallExpr *call);
1002-
virtual void emplace_back_emit_push_close(clang::CXXMemberCallExpr *call);
1001+
virtual void emplace_back_emit_push(clang::CXXMemberCallExpr *call,
1002+
std::string_view arg);
10031003

10041004
virtual const char *GetPointerDerefPrefix(clang::QualType pointee_type);
10051005

‎cpp2rust/converter/models/converter_refcount.cpp‎

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2504,20 +2504,18 @@ void ConverterRefCount::emplace_back_plugin_construct_arg(
25042504
ConvertVarInit(elem_type, ctor);
25052505
}
25062506

2507-
void ConverterRefCount::emplace_back_emit_push_open(
2508-
clang::CXXMemberCallExpr *call) {
2507+
void ConverterRefCount::emplace_back_emit_push(clang::CXXMemberCallExpr *call,
2508+
std::string_view arg) {
25092509
auto *obj = GetCallObject(call);
25102510
auto obj_type = obj->getType().getNonReferenceType();
25112511
if (obj_type->isPointerType()) {
25122512
obj_type = obj_type->getPointeeType();
25132513
}
2514-
StrCat(ConvertObject(obj), ".with_mut(|__v: &mut ",
2515-
ToString(obj_type.getNonReferenceType()), "| __v.push(");
2516-
}
2517-
2518-
void ConverterRefCount::emplace_back_emit_push_close(
2519-
clang::CXXMemberCallExpr *call) {
2520-
StrCat("))");
2514+
StrCat(ConvertObject(obj), ".with_mut");
2515+
PushParen outer(*this);
2516+
StrCat("|__v: &mut ", ToString(obj_type.getNonReferenceType()), "| __v.push");
2517+
PushParen inner(*this);
2518+
StrCat(arg);
25212519
}
25222520

25232521
const char *

‎cpp2rust/converter/models/converter_refcount.h‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -239,8 +239,8 @@ class ConverterRefCount final : public Converter {
239239
void
240240
emplace_back_plugin_construct_arg(clang::QualType elem_type,
241241
clang::CXXConstructExpr *ctor) override;
242-
void emplace_back_emit_push_open(clang::CXXMemberCallExpr *call) override;
243-
void emplace_back_emit_push_close(clang::CXXMemberCallExpr *call) override;
242+
void emplace_back_emit_push(clang::CXXMemberCallExpr *call,
243+
std::string_view arg) override;
244244

245245
const char *GetPointerDerefSuffix(clang::QualType pointee_type);
246246
const char *GetPointerDerefPrefix(clang::QualType pointee_type) override;

‎cpp2rust/converter/plugins/emplace_back.cpp‎

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -134,18 +134,16 @@ clang::CXXConstructExpr *buildConstructExpr(clang::CXXMemberCallExpr *call,
134134

135135
} // namespace
136136

137-
void Converter::emplace_back_emit_push_open(clang::CXXMemberCallExpr *call) {
137+
void Converter::emplace_back_emit_push(clang::CXXMemberCallExpr *call,
138+
std::string_view arg) {
138139
{
139140
PushExprKind push(*this, ExprKind::LValue);
140141
auto callee = ToString(call->getCallee());
141142
ReplaceAll(callee, "emplace_back", "push");
142143
StrCat(callee);
143144
}
144-
StrCat('(');
145-
}
146-
147-
void Converter::emplace_back_emit_push_close(clang::CXXMemberCallExpr *call) {
148-
StrCat(')');
145+
PushParen paren(*this);
146+
StrCat(arg);
149147
}
150148

151149
bool Converter::emplace_back_plugin_convert(clang::CallExpr *call) {
@@ -189,11 +187,9 @@ bool Converter::emplace_back_plugin_convert(clang::CallExpr *call) {
189187
arg = std::move(buf).str();
190188
}
191189

192-
StrCat("{ let __arg = ", arg, ";");
193-
emplace_back_emit_push_open(member_call);
194-
StrCat("__arg");
195-
emplace_back_emit_push_close(member_call);
196-
StrCat('}');
190+
PushBrace brace(*this);
191+
StrCat("let __arg = ", arg, ";");
192+
emplace_back_emit_push(member_call, "__arg");
197193
return true;
198194
}
199195

0 commit comments

Comments
 (0)