[education/rkward] rkward: Add a more elaborate trace macro (disabled by default)
Thomas Friedrichsmeier
null at kde.org
Sun Sep 14 09:23:43 BST 2025
Git commit f6dff3d39062177c7d1361180f605603a9d77d2f by Thomas Friedrichsmeier.
Committed on 14/09/2025 at 08:23.
Pushed by tfry into branch 'master'.
Add a more elaborate trace macro (disabled by default)
M +1 -0 rkward/autotests/rkparsedscript_test.cpp
M +26 -1 rkward/debug.h
M +0 -2 rkward/misc/rkcommandlineargs.cpp
M +0 -2 rkward/misc/rkparsedscript.h
https://invent.kde.org/education/rkward/-/commit/f6dff3d39062177c7d1361180f605603a9d77d2f
diff --git a/rkward/autotests/rkparsedscript_test.cpp b/rkward/autotests/rkparsedscript_test.cpp
index 133566d50..e49ceafcf 100644
--- a/rkward/autotests/rkparsedscript_test.cpp
+++ b/rkward/autotests/rkparsedscript_test.cpp
@@ -9,6 +9,7 @@ SPDX-License-Identifier: GPL-2.0-or-later
#include <QStandardPaths>
#include <QTest>
+#include "../debug.h"
#include "../misc/rkparsedscript.h"
using namespace Qt::Literals::StringLiterals;
diff --git a/rkward/debug.h b/rkward/debug.h
index eefff5691..5938d0c66 100644
--- a/rkward/debug.h
+++ b/rkward/debug.h
@@ -6,6 +6,7 @@ SPDX-License-Identifier: GPL-2.0-or-later
*/
#define RKWARD_DEBUG
+//#define RKWARD_NESTED_TRACE // enable for a more elaborate trace (with a real performance impact, hoewver)
void RKDebug(int flags, int level, const char *fmt, ...);
@@ -50,7 +51,13 @@ void RKDebug(int flags, int level, const char *fmt, ...);
if (!(x)) RK_DEBUG(DEBUG_ALL, DL_FATAL, "Assert '%s' failed at %s - function %s line %d", #x, __FILE__, __FUNCTION__, __LINE__);
# endif
# ifndef RKWARD_NO_TRACE
-# define RK_TRACE(flags) RK_DEBUG(flags, DL_TRACE, "Trace: %s - function %s line %d", __FILE__, __FUNCTION__, __LINE__);
+# ifdef RKWARD_NESTED_TRACE
+# define RK_COMBINE1(A, B) A##B
+# define RK_COMBINE(A, B) RK_COMBINE1(A, B)
+# define RK_TRACE(flags) RKElaborateTrace RK_COMBINE(_rk_trace_f, __LINE__)(flags, "Trace: %s - function %s line %d", __FILE__, __FUNCTION__, __LINE__);
+# else
+# define RK_TRACE(flags) RK_DEBUG(flags, DL_TRACE, "Trace: %s - function %s line %d", __FILE__, __FUNCTION__, __LINE__);
+# endif
# else
# define RK_TRACE(flags)
# endif
@@ -69,3 +76,21 @@ extern int RK_Debug_CommandStep;
bool setupLogFile(const QString &basename);
extern QFile *debug_file;
}; // namespace RK_Debug
+
+#ifdef RKWARD_NESTED_TRACE
+class RKElaborateTrace {
+ public:
+ RKElaborateTrace(int flags, const char *fmt, ...) : flags(flags) {
+ va_list args;
+ va_start(args, fmt);
+ vsnprintf(msg, 140, fmt, args);
+ va_end(args);
+ RK_DEBUG(flags, DL_TRACE, msg);
+ }
+ ~RKElaborateTrace() {
+ RK_DEBUG(flags, DL_TRACE, "end %s", msg);
+ }
+ int flags;
+ char msg[140];
+};
+#endif
diff --git a/rkward/misc/rkcommandlineargs.cpp b/rkward/misc/rkcommandlineargs.cpp
index a8decf425..ddb008b8c 100644
--- a/rkward/misc/rkcommandlineargs.cpp
+++ b/rkward/misc/rkcommandlineargs.cpp
@@ -65,5 +65,3 @@ RKCommandLineArgs::RKCommandLineArgs(KAboutData *about, QCoreApplication *app, b
}
storage[UrlArgs] = url_args;
}
-
-#include "../debug.h"
diff --git a/rkward/misc/rkparsedscript.h b/rkward/misc/rkparsedscript.h
index 03903c537..01d70617b 100644
--- a/rkward/misc/rkparsedscript.h
+++ b/rkward/misc/rkparsedscript.h
@@ -11,8 +11,6 @@ SPDX-License-Identifier: GPL-2.0-or-later
#include <vector>
-#include "../debug.h"
-
/** Very crude, but very fast R parser, with some helper functions for code navigation. Parses the basic structure, only
Technical note on data structure: While, logically, contexts form a nested hierarchy, a nested data layout does not really lend itself
More information about the rkward-tracker
mailing list