00001
00002
00003
00004 #ifndef tm_DEBUG_H
00005 #define tm_DEBUG_H
00006
00007 #include <stdio.h>
00008
00009
00010
00011
00012 extern const char *tm_color_name[];
00013 extern const char *tm_struct_name[];
00014 extern const char *tm_phase_name[];
00015
00016
00017
00018
00019 extern FILE *tm_msg_file;
00020 extern const char *tm_msg_prefix;
00021 extern const char *tm_msg_enable_default;
00022 extern int tm_msg_enable_all;
00023
00024 void tm_msg_enable(const char *codes, int enable);
00025
00026 extern int _tm_msg_ignored;
00027 void tm_msg(const char *format, ...);
00028 void tm_msg1(const char *format, ...);
00029
00030 void tm_fatal();
00031 void tm_abort();
00032 void tm_stop();
00033
00034 void _tm_assert(const char *expr, const char *file, int lineno);
00035
00036 #ifndef tm_ASSERT
00037 #define tm_ASSERT 1
00038 #endif
00039
00040 #if tm_ASSERT
00041 #define tm_assert(X,Y...)do { if ( ! (X) ) {_tm_assert(#X, __FILE__, __LINE__); tm_msg1("" Y), tm_msg1("\n"), tm_abort();} } while(0)
00042
00043 #define tm_assert_test(X,Y...)do { if ( ! (X) ) {_tm_assert(#X, __FILE__, __LINE__); tm_msg1("" Y), tm_msg1("\n"), tm_abort();} } while(0)
00044 #else
00045 #define tm_assert(X,Y...)(void)0
00046 #define tm_assert_test(X,Y...)(void)0
00047 #endif
00048
00049 #define tm_warn(X,Y...) ((X) ? 0 : (tm_msg1("\n"), tm_msg("WARNING assertion \"%s\" failed %s:%d ", #X, __FILE__, __LINE__), tm_msg1("" Y), tm_msg1("\n"), tm_stop(), 1))
00050
00051
00052
00053
00054
00055 void tm_validate_lists();
00056
00057 extern int _tm_sweep_is_error;
00058 int _tm_check_sweep_error();
00059
00060 #endif
00061