put optimisation module init function declarations into firm_init.h; make loop invers...
[libfirm] / ir / common / debug.h
index b63a261..1668ad0 100644 (file)
@@ -1,27 +1,52 @@
+/*
+ * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
+ *
+ * This file is part of libFirm.
+ *
+ * This file may be distributed and/or modified under the terms of the
+ * GNU General Public License version 2 as published by the Free Software
+ * Foundation and appearing in the file LICENSE.GPL included in the
+ * packaging of this file.
+ *
+ * Licensees holding valid libFirm Professional Edition licenses may use
+ * this file in accordance with the libFirm Commercial License.
+ * Agreement provided with the Software.
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE.
+ */
+
 /**
- * Debug facility.
- * @author Michael Beck, Sebastian Hack
- * @date 15.12.2004
+ * @file
+ * @brief   Debug facility.
+ * @author  Michael Beck, Sebastian Hack
+ * @date    15.12.2004
+ * @version $Id$
  */
+#ifndef FIRM_COMMON_DEBUG_H
+#define FIRM_COMMON_DEBUG_H
 
-#ifndef _FIRM_DEBUG_H
-#define _FIRM_DEBUG_H
+/* WITH DEBUG OUTPUT */
+#ifdef DEBUG_libfirm
 
 #include <stdio.h>
 
 enum firm_dbg_level_t {
-       LEVEL_DEFAULT = 0,              /**< Prints always. Use with DBG(). */
+       LEVEL_DEFAULT = 0, /**< Prints always. Use with DBG(). */
        LEVEL_1 = 1,
        LEVEL_2 = 2,
        LEVEL_3 = 4,
        LEVEL_4 = 8,
        LEVEL_5 = 16,
 
-       SET_LEVEL_1 = 1,                        /**< use with firm_dbg_set_mask(). */
+       SET_LEVEL_0 = 0,   /**< use with firm_dbg_set_mask(). */
+       SET_LEVEL_1 = 1,
        SET_LEVEL_2 = 3,
        SET_LEVEL_3 = 7,
        SET_LEVEL_4 = 15,
-       SET_LEVEL_5 = 31
+       SET_LEVEL_5 = 31,
+       SET_LEVEL_ALL = SET_LEVEL_5
 };
 
 typedef struct _firm_dbg_module_t firm_dbg_module_t;
@@ -32,6 +57,9 @@ void *_firm_dbg_make_msg(const firm_dbg_module_t *mod, unsigned mask, const char
 /* Internal function to the debug module. */
 void _firm_dbg_print_msg(const char *filename, int line, const char *func, void *data);
 
+/* Internal function to the debug module. */
+void _firm_dbg_print(const firm_dbg_module_t *mod, unsigned mask, const char *fmt, ...);
+
 /**
  * Register a module to the firm debug facility.
  * If the module has already been registered, no new module is allocated
@@ -64,7 +92,7 @@ unsigned firm_dbg_get_mask(const firm_dbg_module_t *module);
 void firm_dbg_set_file(firm_dbg_module_t *module, FILE *file);
 
 #define _DBG_MAIN(func,args) \
-       _firm_dbg_print_msg(__FILE__, __LINE__, func, _firm_dbg_make_msg args)
+  _firm_dbg_print_msg(__FILE__, __LINE__, func, _firm_dbg_make_msg args)
 
 /* If we have C99 use the __func__ variable for calling functions name. */
 #if defined(__STD_VERSION__) && __STD_VERSION >= 199901L
@@ -73,22 +101,23 @@ void firm_dbg_set_file(firm_dbg_module_t *module, FILE *file);
 
 /* Else, check for gcc and use the proprietary __FUNCTION__ macro. */
 #ifdef __GNUC__
-#define _DBG(args)     _DBG_MAIN(__FUNCTION__, args)
+#define _DBG(args)  _DBG_MAIN(__FUNCTION__, args)
 #else
 
 /* Else go without the name of the calling function. */
-#define _DBG(args)     _DBG_MAIN("", args)
-#endif
-#endif
+#define _DBG(args)  _DBG_MAIN("", args)
+#endif  /* __GNUC__ */
+#endif /* __STD_VERSION__ ... */
+
+#define _DB(args) _firm_dbg_print args
 
 /**
  * Debug messages issued with this macro are always printed, even in
  * retail versions.
  * @see DBG()
  */
-#define DBG_RETAIL(args)               _DBG(args)
-
-#ifdef DEBUG_libfirm
+#define DBG_RETAIL(args)    _DBG(args)
+#define DB_RETAIL(args)     _DB(args)
 
 /**
  * Issue a debug message.
@@ -113,11 +142,30 @@ void firm_dbg_set_file(firm_dbg_module_t *module, FILE *file);
  * DBG((my_mod, LEVEL_DEFAULT, "entity %e has type %t", ent, type))
  * @endcode
  */
-#define DBG(args)                                      _DBG(args)
+#define DBG(args)           _DBG(args)
+#define DB(args)            _DB(args)
 
-#else
-#define DBG(args)
-#endif
+/** create a debug handle in debug mode */
+#define FIRM_DBG_REGISTER(handle, name) handle = firm_dbg_register(name)
+#define DEBUG_ONLY(code)   code
+#define RELEASE_ONLY(code)
+
+#else /* ndef DEBUG_libfirm */
+
+/* DEBUG OUTPUT IS COMPLETELY DISABLED */
+
+#define DBG(x)   (void)0
+#define DB(x)    (void)0
+
+/** create a debug handle in release mode */
+#define FIRM_DBG_REGISTER(handle, name)  (void)0
+#define DEBUG_ONLY(code)
+#define RELEASE_ONLY(code) code
+
+#define firm_dbg_set_mask(module, mask)  (void)0
+#define firm_dbg_get_mask(module)        (void)0
+#define firm_dbg_set_file(module, file)  (void)0
 
+#endif /* DEBUG_libfirm */
 
 #endif