Skip to content

Commit 87018b2

Browse files
committed
Merge branch 'master' into rules-in-tu
2 parents acf54ed + 2bb3063 commit 87018b2

353 files changed

Lines changed: 7935 additions & 1370 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎cpp2rust/converter/converter.cpp‎

Lines changed: 308 additions & 125 deletions
Large diffs are not rendered by default.

‎cpp2rust/converter/converter.h‎

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class Converter : public clang::RecursiveASTVisitor<Converter> {
5252

5353
virtual void EmitFilePreamble();
5454

55-
static void EmitOpaqueRecords(std::string &out);
55+
static void EmitOpaqueRecords(Model model, std::string &out);
5656
static void EmitGlobalInits(Model model, std::string &out);
5757

5858
static void EmitVirtualMethods(std::string &out);
@@ -173,6 +173,8 @@ class Converter : public clang::RecursiveASTVisitor<Converter> {
173173

174174
virtual bool VisitNamespaceDecl(clang::NamespaceDecl *decl);
175175

176+
bool VisitLinkageSpecDecl(clang::LinkageSpecDecl *decl);
177+
176178
virtual bool VisitTypedefDecl(clang::TypedefDecl *decl);
177179
virtual bool VisitTypeAliasDecl(clang::TypeAliasDecl *decl);
178180
virtual bool VisitTypeAliasTemplateDecl(clang::TypeAliasTemplateDecl *decl);
@@ -327,9 +329,14 @@ class Converter : public clang::RecursiveASTVisitor<Converter> {
327329

328330
void ConvertGenericCallExpr(clang::CallExpr *expr);
329331

330-
virtual void EmitFnPtrCall(clang::Expr *callee);
332+
virtual void EmitFnPtrCall(clang::CallExpr *expr);
333+
334+
void ConvertLambdaCall(clang::CallExpr *expr,
335+
const clang::CXXRecordDecl *lambda);
331336

332-
virtual void ConvertLambdaToFunctionPointer(clang::Expr *lambda);
337+
virtual void
338+
ConvertLambdaToFunctionPointer(clang::Expr *lambda,
339+
const clang::CXXConversionDecl *conversion);
333340

334341
virtual void
335342
ConvertFunctionToFunctionPointer(const clang::FunctionDecl *fn_decl);
@@ -380,8 +387,14 @@ class Converter : public clang::RecursiveASTVisitor<Converter> {
380387
uint64_t pad_nulls = 0) const;
381388
virtual bool VisitStringLiteral(clang::StringLiteral *expr);
382389

390+
bool VisitSourceLocExpr(clang::SourceLocExpr *expr);
391+
392+
virtual std::string GetSourceFileAsString(clang::QualType type);
393+
383394
virtual bool VisitCXXBoolLiteralExpr(clang::CXXBoolLiteralExpr *expr);
384395

396+
bool VisitCXXNoexceptExpr(clang::CXXNoexceptExpr *expr);
397+
385398
void ConvertIntegerToEnumeralCast(clang::Expr *to, clang::Expr *from);
386399

387400
void ConvertIntegralToBooleanCast(clang::ImplicitCastExpr *expr);
@@ -401,6 +414,8 @@ class Converter : public clang::RecursiveASTVisitor<Converter> {
401414

402415
virtual bool VisitStmtExpr(clang::StmtExpr *expr);
403416

417+
bool ConvertLValueConditional(clang::ConditionalOperator *expr);
418+
404419
virtual bool VisitConditionalOperator(clang::ConditionalOperator *expr);
405420

406421
virtual bool VisitDeclRefExpr(clang::DeclRefExpr *expr);
@@ -469,7 +484,8 @@ class Converter : public clang::RecursiveASTVisitor<Converter> {
469484
virtual void ConvertLambdaCapture(const clang::FieldDecl *field,
470485
clang::Expr *init);
471486

472-
void ConvertLambdaClosure(const clang::CXXRecordDecl *decl);
487+
void ConvertLambdaClosure(const clang::CXXRecordDecl *decl,
488+
clang::CXXMethodDecl *call_operator);
473489

474490
virtual bool VisitImplicitValueInitExpr(clang::ImplicitValueInitExpr *expr);
475491
virtual bool VisitCXXScalarValueInitExpr(clang::CXXScalarValueInitExpr *expr);
@@ -488,6 +504,15 @@ class Converter : public clang::RecursiveASTVisitor<Converter> {
488504

489505
virtual bool VisitClassTemplateDecl(clang::ClassTemplateDecl *decl);
490506

507+
bool TraverseClassTemplateSpecializationDecl(
508+
clang::ClassTemplateSpecializationDecl *) {
509+
return true;
510+
}
511+
512+
bool TraverseExplicitInstantiationDecl(clang::ExplicitInstantiationDecl *) {
513+
return true;
514+
}
515+
491516
virtual bool
492517
VisitCXXStdInitializerListExpr(clang::CXXStdInitializerListExpr *expr);
493518

@@ -661,6 +686,10 @@ class Converter : public clang::RecursiveASTVisitor<Converter> {
661686
const clang::CXXRecordDecl *decl,
662687
std::string_view lhs, std::string_view rhs);
663688

689+
std::string GetComparisonBool(const clang::FunctionDecl *op,
690+
const clang::CXXRecordDecl *decl,
691+
std::string_view lhs, std::string_view rhs);
692+
664693
virtual std::string
665694
GetComparisonReferenceArg(const clang::CXXRecordDecl *decl,
666695
std::string_view value);

0 commit comments

Comments
 (0)