[json-glib] Add debugging macros
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [json-glib] Add debugging macros
- Date: Thu, 18 Mar 2010 15:27:17 +0000 (UTC)
commit b3435c6a05ecee58c64dce669ce7e44f829afc98
Author: Emmanuele Bassi <ebassi linux intel com>
Date: Thu Mar 18 15:21:29 2010 +0000
Add debugging macros
Similarly to what GTK+ and Clutter do, we can use macros that evaluate
to nothing if JSON_ENABLE_DEBUG is disabled; they evaluate to messages
when the JSON_DEBUG environment variable is set to a debug domain.
json-glib/Makefile.am | 4 +++-
json-glib/json-debug.c | 37 +++++++++++++++++++++++++++++++++++++
json-glib/json-debug.h | 45 +++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 85 insertions(+), 1 deletions(-)
---
diff --git a/json-glib/Makefile.am b/json-glib/Makefile.am
index 8492be2..d83c735 100644
--- a/json-glib/Makefile.am
+++ b/json-glib/Makefile.am
@@ -37,13 +37,15 @@ source_h = \
$(NULL)
source_h_private = \
- $(top_srcdir)/json-glib/json-scanner.h \
+ $(top_srcdir)/json-glib/json-debug.h \
$(top_srcdir)/json-glib/json-gobject-private.h \
+ $(top_srcdir)/json-glib/json-scanner.h \
$(top_srcdir)/json-glib/json-types-private.h \
$(NULL)
source_c = \
$(srcdir)/json-array.c \
+ $(srcdir)/json-debug.c \
$(srcdir)/json-gboxed.c \
$(srcdir)/json-generator.c \
$(srcdir)/json-gobject.c \
diff --git a/json-glib/json-debug.c b/json-glib/json-debug.c
new file mode 100644
index 0000000..471d082
--- /dev/null
+++ b/json-glib/json-debug.c
@@ -0,0 +1,37 @@
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "json-debug.h"
+
+static unsigned int json_debug_flags = 0;
+static gboolean json_debug_flags_set = FALSE;
+
+#ifdef JSON_ENABLE_DEBUG
+static const GDebugKey json_debug_keys[] = {
+ { "parser", JSON_DEBUG_PARSER }
+};
+#endif /* JSON_ENABLE_DEBUG */
+
+JsonDebugFlags
+_json_get_debug_flags (void)
+{
+#ifdef JSON_ENABLE_DEBUG
+ const gchar *env_str;
+
+ if (json_debug_flags_set)
+ return json_debug_flags;
+
+ env_str = g_getenv ("JSON_DEBUG");
+ if (env_str != NULL && *env_str != '\0')
+ {
+ json_debug_flags |= g_parse_debug_string (env_str,
+ json_debug_keys,
+ G_N_ELEMENTS (json_debug_keys));
+ }
+
+ json_debug_flags_set = TRUE;
+#endif /* JSON_ENABLE_DEBUG */
+
+ return json_debug_flags;
+}
diff --git a/json-glib/json-debug.h b/json-glib/json-debug.h
new file mode 100644
index 0000000..dc0d861
--- /dev/null
+++ b/json-glib/json-debug.h
@@ -0,0 +1,45 @@
+#ifndef __JSON_DEBUG_H__
+#define __JSON_DEBUG_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+typedef enum {
+ JSON_DEBUG_PARSER = 1 << 0
+} JsonDebugFlags;
+
+#ifdef JSON_ENABLE_DEBUG
+
+# ifdef __GNUC__
+
+# define JSON_NOTE(type,x,a...) G_STMT_START { \
+ if (_json_get_debug_flags () & JSON_DEBUG_##type) { \
+ g_message ("[" #type "] " G_STRLOC ": " x, ##a); \
+ } } G_STMT_END
+
+# else
+/* Try the C99 version; unfortunately, this does not allow us to pass
+ * empty arguments to the macro, which means we have to
+ * do an intemediate printf.
+ */
+# define JSON_NOTE(type,...) G_STMT_START { \
+ if (_json_get_debug_flags () & JSON_DEBUG_##type) { \
+ gchar * _fmt = g_strdup_printf (__VA_ARGS__); \
+ g_message ("[" #type "] " G_STRLOC ": %s",_fmt); \
+ g_free (_fmt); \
+ } } G_STMT_END
+
+# endif /* __GNUC__ */
+
+#else
+
+#define JSON_NOTE(type,...) G_STMT_START { } G_STMT_END
+
+#endif /* JSON_ENABLE_DEBUG */
+
+JsonDebugFlags _json_get_debug_flags (void);
+
+G_END_DECLS
+
+#endif /* __JSON_DEBUG_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]