used functions from entity_t.h and type_t.h to access fields of type and entity.
[libfirm] / ir / common / debug.h
1 /**
2  * Debug facility.
3  * @author Michael Beck, Sebastian Hack
4  * @date 15.12.2004
5  */
6
7 #ifndef _FIRM_DEBUG_H
8 #define _FIRM_DEBUG_H
9
10 #include "firm_config.h"
11
12 #ifdef WITH_LIBCORE
13
14 #define DBG(x) _LC_DBG(x)
15 #include <libcore/lc_debug.h>
16
17 /* use the newer debug implementation in libcore */
18 typedef lc_dbg_module_t firm_dbg_module_t;
19
20 extern firm_dbg_module_t *firm_dbg_register(const char *name);
21
22 #define firm_dbg_set_mask(module, mask) lc_dbg_set_mask(module, mask)
23 #define firm_dbg_get_mask(module)       lc_dbg_get_mask(module)
24 #define firm_dbg_set_file(module, file) lc_dbg_set_file(module, file)
25
26 #define LEVEL_DEFAULT    LC_LEVEL_DEFAULT
27 #define LEVEL_1          LC_LEVEL_1
28 #define LEVEL_2          LC_LEVEL_2
29 #define LEVEL_3          LC_LEVEL_3
30 #define LEVEL_4          LC_LEVEL_4
31 #define LEVEL_5          LC_LEVEL_5
32 #define SET_LEVEL_1      LC_SET_LEVEL_1
33 #define SET_LEVEL_2      LC_SET_LEVEL_2
34 #define SET_LEVEL_3      LC_SET_LEVEL_3
35 #define SET_LEVEL_4      LC_SET_LEVEL_4
36 #define SET_LEVEL_5      LC_SET_LEVEL_5
37 #define SET_LEVEL_ALL    LC_SET_LEVEL_ALL
38
39 #else
40 /* use the builtin debug implementation */
41
42 #include <stdio.h>
43
44 enum firm_dbg_level_t {
45         LEVEL_DEFAULT = 0, /**< Prints always. Use with DBG(). */
46         LEVEL_1 = 1,
47         LEVEL_2 = 2,
48         LEVEL_3 = 4,
49         LEVEL_4 = 8,
50         LEVEL_5 = 16,
51
52         SET_LEVEL_1 = 1,   /**< use with firm_dbg_set_mask(). */
53         SET_LEVEL_2 = 3,
54         SET_LEVEL_3 = 7,
55         SET_LEVEL_4 = 15,
56         SET_LEVEL_5 = 31,
57   SET_LEVEL_ALL = SET_LEVEL_5
58 };
59
60 typedef struct _firm_dbg_module_t firm_dbg_module_t;
61
62 /* Internal function to the debug module. */
63 void *_firm_dbg_make_msg(const firm_dbg_module_t *mod, unsigned mask, const char *fmt, ...);
64
65 /* Internal function to the debug module. */
66 void _firm_dbg_print_msg(const char *filename, int line, const char *func, void *data);
67
68 /**
69  * Register a module to the firm debug facility.
70  * If the module has already been registered, no new module is allocated
71  * but the handle is returned. By default, all messages go to @c stderr
72  * and the debug mask is set to 0, i.e. the module is muted.
73  * @param name The name of the module to register.
74  * @return The module handle.
75  */
76 firm_dbg_module_t *firm_dbg_register(const char *name);
77
78 /**
79  * Set the mask of a module.
80  * @param module The module.
81  * @param mask The new mask for the module.
82  */
83 void firm_dbg_set_mask(firm_dbg_module_t *module, unsigned mask);
84
85 /**
86  * Get the mask of a module.
87  * @param module The module handle.
88  * @return The mask currently used by the module.
89  */
90 unsigned firm_dbg_get_mask(const firm_dbg_module_t *module);
91
92 /**
93  * Set the output file of a module.
94  * @param module The module handle.
95  * @param file The new file to use by this handle.
96  */
97 void firm_dbg_set_file(firm_dbg_module_t *module, FILE *file);
98
99 #define _DBG_MAIN(func,args) \
100         _firm_dbg_print_msg(__FILE__, __LINE__, func, _firm_dbg_make_msg args)
101
102 /* If we have C99 use the __func__ variable for calling functions name. */
103 #if defined(__STD_VERSION__) && __STD_VERSION >= 199901L
104 #define _DBG(args)      _DBG_MAIN(__func__, args)
105 #else
106
107 /* Else, check for gcc and use the proprietary __FUNCTION__ macro. */
108 #ifdef __GNUC__
109 #define _DBG(args)      _DBG_MAIN(__FUNCTION__, args)
110 #else
111
112 /* Else go without the name of the calling function. */
113 #define _DBG(args)      _DBG_MAIN("", args)
114 #endif
115 #endif
116
117 /**
118  * Debug messages issued with this macro are always printed, even in
119  * retail versions.
120  * @see DBG()
121  */
122 #define DBG_RETAIL(args)                _DBG(args)
123
124 #ifdef DEBUG_libfirm
125
126 /**
127  * Issue a debug message.
128  * @param args The arguments.
129  *
130  * The arguments is a list surrounded by parentheses. The items
131  * of the list are:
132  * - The module handle as returned by firm_dbg_register().
133  * - The debug mask that you want associate with this message.
134  * - A format string for the message to pass to ir_printf().
135  * - Further optional arguments are passed to ir_printf().
136  *
137  * The mask is anded against the module's mask. If both have some bits
138  * in common, the message is issued. If the given mask is 0, the message
139  * is always dumped regardless of the module's mask. You can also use
140  * the mask in a level based manner, see firm_dbg_level_t.
141  *
142  * Here is an example:
143  * @code
144  * DBG((my_mod, MASK_ERR, "ir node %n is not green", node))
145  * ...
146  * DBG((my_mod, LEVEL_DEFAULT, "entity %e has type %t", ent, type))
147  * @endcode
148  */
149 #define DBG(args)                                       _DBG(args)
150
151 #else
152 #define DBG(args)
153 #endif
154
155 #endif /* WITH_LIBCORE */
156
157 #endif /* _FIRM_DEBUG_H */