From 04d77d27db8cfddcf8d7e738d4dc835585e5eae2 Mon Sep 17 00:00:00 2001 From: Andreas Fertig Date: Thu, 26 Jun 2025 09:02:59 +0200 Subject: [PATCH] Switched implementation of P0315Visitor from `std::variant` to compile-time based approach. --- InsightsHelpers.cpp | 17 ++++++++--------- InsightsHelpers.h | 26 ++++++++++++++++---------- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/InsightsHelpers.cpp b/InsightsHelpers.cpp index 44beb098..dc5ce3bd 100644 --- a/InsightsHelpers.cpp +++ b/InsightsHelpers.cpp @@ -1619,18 +1619,17 @@ struct overloaded : Ts... }; template overloaded(Ts...) -> overloaded; +//----------------------------------------------------------------------------- -bool P0315Visitor::VisitLambdaExpr(const LambdaExpr* expr) +void P0315Visitor_HandleLambdaExpr(OutputFormatHelper& ofm, const LambdaExpr* expr) { - mLambdaExpr = expr; - - std::visit(overloaded{ - [&](OutputFormatHelper& ofm) { ofm.Append(GetLambdaName(*expr)); }, - [&](CodeGenerator& cg) { cg.InsertArg(expr); }, - }, - mConsumer); + ofm.Append(GetLambdaName(*expr)); +} +//----------------------------------------------------------------------------- - return false; +void P0315Visitor_HandleLambdaExpr(CodeGenerator& cg, const LambdaExpr* expr) +{ + cg.InsertArg(expr); } //----------------------------------------------------------------------------- diff --git a/InsightsHelpers.h b/InsightsHelpers.h index 7d0ac3f4..75cd2a28 100644 --- a/InsightsHelpers.h +++ b/InsightsHelpers.h @@ -17,7 +17,6 @@ #include #include #include -#include #include "InsightsStrongTypes.h" #include "StackList.h" @@ -355,25 +354,32 @@ is(T) -> is; const DeclRefExpr* FindDeclRef(const Stmt* stmt); //----------------------------------------------------------------------------- +void P0315Visitor_HandleLambdaExpr(class OutputFormatHelper&, const LambdaExpr*); +void P0315Visitor_HandleLambdaExpr(class CodeGenerator&, const LambdaExpr*); +//----------------------------------------------------------------------------- + ///! Find a LambdaExpr inside a Decltype -class P0315Visitor : public RecursiveASTVisitor +template + requires(std::derived_from or std::same_as) +class P0315Visitor : public RecursiveASTVisitor> { - std::variant, std::reference_wrapper> - mConsumer; + T& mConsumer; const LambdaExpr* mLambdaExpr{}; public: - P0315Visitor(class OutputFormatHelper& ofm) - : mConsumer{ofm} + constexpr P0315Visitor(T& consumer) + : mConsumer{consumer} { } - P0315Visitor(class CodeGenerator& cg) - : mConsumer{cg} + bool VisitLambdaExpr(const LambdaExpr* expr) { - } + mLambdaExpr = expr; + + P0315Visitor_HandleLambdaExpr(mConsumer, expr); - bool VisitLambdaExpr(const LambdaExpr* expr); + return false; + } const LambdaExpr* Get() const { return mLambdaExpr; } };