// DEBUG CONTROL for development & testing #ifndef _CCDEBUG_H_ #define _CCDEBUG_H_ #define DUMP(s) warn(100,"DUMP %s:: pt=%s tk=%s nc=%d NT=%s LT=%d", s, prev_token(), token(), next_char(), next_token(), lex_token ); #define DEBD(s) warn(101,"%s:: dn=%s db=%d ds=%d root=%d bn=%s dll=%d dl0=%d", s, dcl_name(), dcl_base, dcl_storage_flags, dcl_base_root, dcl_base_name(), dcl_level(dcl_levels), dcl_level(0) ); #define DEBI(s) warn(102,"%s:: in=%s ib=%d is=%d lv0=%d lvl=%d", s, idn_name(), idn_base, idn_storage_flags, idn_level(0), idn_level(idn_levels) ); #define DEBO(s) warn(103,"%s:: lev=%d, ob1=%d ob2=%d ol1=%d ol2=%d", s, op_levels(1), op_base(1), op_base(2), op_level(1,0), op_level(2,0) ); int levels; // DEBDL, DEBIL, DEBOL use levels #define DEBDL(s) levels=0; while (levels<=dcl_levels) { warn(104,"%s l=%d dl=%d df=%d", s, levels,dcl_level(levels),dcl_level_flags(levels) ); ++levels; } #define DEBIL(s) levels=0; while (levels<=idn_levels) { warn(104,"%s l=%d dl=%d df=%d", s, levels,idn_level(levels),idn_level_flags(levels) ); ++levels; } //#define DEBOL(s) levels=0; while (levels<=op_levels) { warn(104,"%s l=%d dl=%d df=%d", s, //levels,op_level(2,levels),op_level_flags(2,levels) ); ++levels; } // String UTILITY Functions #define CHKSTR(x) (x!=0) #define CMPTOK(x) (CHKSTR(token()) && CHKSTR(x) && strncmp(token(),x,strlen(x))==0) #define CMPPREVTOK(x) (CHKSTR(prev_token()) && CHKSTR(x) && strncmp(prev_token(),x,strlen(x))==0) #define CMPNEXTTOK(x) (CHKSTR(next_token()) && CHKSTR(x) && strncmp(next_token(),x,strlen(x))==0) #define CMPSTR(x,y) (strncmp(x,y,strlen(x))==0) #endif _CCDEBUG_H_