Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/src/catch2
diff options
context:
space:
mode:
authorMartin Hořeňovský2026-04-06 22:51:55 +0200
committerMartin Hořeňovský2026-04-07 09:32:07 +0200
commite83218c2dfdf80fd53526fe389c0a3271696a106 (patch)
tree615e00e7369bfec07c29f0ffae4b56df314dd3e4 /src/catch2
parent548e14a8c8147c5d20898d9d97809887ab89ad60 (diff)
downloadcatch3-e83218c2dfdf80fd53526fe389c0a3271696a106.tar.gz
Move all use of IResultCapture in AssertionHandler into the cpp file
This has two advantages 1) Removing the include of `catch_interfaces_capture.hpp` from the header and potentially allowing further pruning later. 2) Providing small-but-measurable 1-2% speedup for assertions.
Diffstat (limited to 'src/catch2')
-rw-r--r--src/catch2/internal/catch_assertion_handler.cpp5
-rw-r--r--src/catch2/internal/catch_assertion_handler.hpp11
2 files changed, 12 insertions, 4 deletions
diff --git a/src/catch2/internal/catch_assertion_handler.cpp b/src/catch2/internal/catch_assertion_handler.cpp
index 9a28e79c..a0fcfcb4 100644
--- a/src/catch2/internal/catch_assertion_handler.cpp
+++ b/src/catch2/internal/catch_assertion_handler.cpp
@@ -6,6 +6,7 @@
// SPDX-License-Identifier: BSL-1.0
#include <catch2/internal/catch_assertion_handler.hpp>
+#include <catch2/interfaces/catch_interfaces_capture.hpp>
#include <catch2/interfaces/catch_interfaces_config.hpp>
#include <catch2/internal/catch_context.hpp>
#include <catch2/internal/catch_debugger.hpp>
@@ -14,6 +15,10 @@
namespace Catch {
+ void AssertionHandler::finishIncomplete() {
+ m_resultCapture.handleIncomplete( m_assertionInfo );
+ }
+
AssertionHandler::AssertionHandler
( StringRef macroName,
SourceLineInfo const& lineInfo,
diff --git a/src/catch2/internal/catch_assertion_handler.hpp b/src/catch2/internal/catch_assertion_handler.hpp
index c71c6898..bc37469d 100644
--- a/src/catch2/internal/catch_assertion_handler.hpp
+++ b/src/catch2/internal/catch_assertion_handler.hpp
@@ -10,12 +10,13 @@
#include <catch2/catch_assertion_info.hpp>
#include <catch2/internal/catch_decomposer.hpp>
-#include <catch2/interfaces/catch_interfaces_capture.hpp>
#include <string>
namespace Catch {
+ class IResultCapture;
+
struct AssertionReaction {
bool shouldDebugBreak = false;
bool shouldThrow = false;
@@ -28,6 +29,8 @@ namespace Catch {
bool m_completed = false;
IResultCapture& m_resultCapture;
+ void finishIncomplete();
+
public:
AssertionHandler
( StringRef macroName,
@@ -35,9 +38,9 @@ namespace Catch {
StringRef capturedExpression,
ResultDisposition::Flags resultDisposition );
~AssertionHandler() {
- if ( !m_completed ) {
- m_resultCapture.handleIncomplete( m_assertionInfo );
- }
+ // We want the common fast path inlinable, and the virtual
+ // dispatch in a function in single TU.
+ if ( !m_completed ) { finishIncomplete(); }
}