analyzerConfigDerived (23367B)
1 #ifdef QUEX_OPTION_COMPUTED_GOTOS_DISABLED 2 # undef QUEX_OPTION_COMPUTED_GOTOS 3 #endif 4 #ifdef __QUEX_OPTION_ON_ENTRY_HANDLER_PRESENT_DISABLED 5 # undef __QUEX_OPTION_ON_ENTRY_HANDLER_PRESENT 6 #endif 7 #ifdef __QUEX_OPTION_ON_EXIT_HANDLER_PRESENT_DISABLED 8 # undef __QUEX_OPTION_ON_EXIT_HANDLER_PRESENT 9 #endif 10 #ifdef QUEX_OPTION_CONVERTER_ICONV_DISABLED 11 # undef QUEX_OPTION_CONVERTER_ICONV 12 #endif 13 #ifdef QUEX_OPTION_CONVERTER_ICU_DISABLED 14 # undef QUEX_OPTION_CONVERTER_ICU 15 #endif 16 #ifdef __QUEX_OPTION_SUPPORT_BEGIN_OF_LINE_PRE_CONDITION_DISABLED 17 # undef __QUEX_OPTION_SUPPORT_BEGIN_OF_LINE_PRE_CONDITION 18 #endif 19 #ifdef QUEX_OPTION_INCLUDE_STACK_DISABLED 20 # undef QUEX_OPTION_INCLUDE_STACK 21 #endif 22 #ifdef QUEX_OPTION_STRING_ACCUMULATOR_DISABLED 23 # undef QUEX_OPTION_STRING_ACCUMULATOR 24 #endif 25 #ifdef QUEX_OPTION_DEBUG_QUEX_PATTERN_MATCHES_DISABLED 26 # undef QUEX_OPTION_DEBUG_QUEX_PATTERN_MATCHES 27 #endif 28 #ifdef QUEX_OPTION_DEBUG_SHOW_MODES_DISABLED 29 # undef QUEX_OPTION_DEBUG_SHOW_MODES 30 #endif 31 #ifdef QUEX_OPTION_DEBUG_TOKEN_SENDING_DISABLED 32 # undef QUEX_OPTION_DEBUG_TOKEN_SENDING 33 #endif 34 #if ! defined(QUEX_OPTION_AUTOMATIC_ANALYSIS_CONTINUATION_ON_MODE_CHANGE_DISABLED) 35 # define QUEX_OPTION_AUTOMATIC_ANALYSIS_CONTINUATION_ON_MODE_CHANGE 36 #endif 37 #ifdef QUEX_OPTION_RUNTIME_MODE_TRANSITION_CHECK_DISABLED 38 # undef QUEX_OPTION_RUNTIME_MODE_TRANSITION_CHECK 39 #endif 40 #ifdef QUEX_OPTION_RUNTIME_MODE_TRANSITION_CHECK_DISABLED 41 # undef QUEX_OPTION_POST_CATEGORIZER 42 #endif 43 #ifdef QUEX_OPTION_COLUMN_NUMBER_COUNTING_DISABLED 44 # undef QUEX_OPTION_COLUMN_NUMBER_COUNTING 45 #endif 46 #ifdef QUEX_OPTION_LINE_NUMBER_COUNTING_DISABLED 47 # undef QUEX_OPTION_LINE_NUMBER_COUNTING 48 #endif 49 50 #if defined(QUEX_OPTION_TOKEN_POLICY_QUEUE) 51 # define __QUEX_PURE_RETURN do { return; } while(0) 52 #else 53 # define __QUEX_PURE_RETURN do { return __self_result_token_id; } while(0) 54 #endif 55 56 #if ! defined (QUEX_SETTING_BUFFER_MIN_FALLBACK_N) 57 # if ! defined (QUEX_SETTING_BUFFER_SIZE) 58 # error "QUEX_SETTING_BUFFER_SIZE not defined at this place." 59 /* If your compiler brings you here to this position, then this may be because 60 * you defined the QUEX_SETTING_BUFFER_SIZE with something different than just 61 * an integer number. Indeed something like 62 * 63 * #define QUEX_SETTING_BUFFER_SIZE (size_t)4096 64 * 65 * would be propper, but does not allow to do some math. So, please erase whatever 66 * is not a number in the definition (e.g. delete the '(size_t)' type cast. */ 67 # elif QUEX_SETTING_BUFFER_SIZE >= 1024 68 # define QUEX_SETTING_BUFFER_MIN_FALLBACK_N (256) 69 # elif QUEX_SETTING_BUFFER_SIZE >= 16 70 # define QUEX_SETTING_BUFFER_MIN_FALLBACK_N (size_t)(QUEX_SETTING_BUFFER_SIZE >> 5) 71 # else 72 # define QUEX_SETTING_BUFFER_MIN_FALLBACK_N (0) 73 # endif 74 #endif 75 76 /* Tokens may be 'stamped' with the line an column number automatically. 77 * This happens by means of the option 78 * 79 * QUEX_OPTION_TOKEN_STAMPING_WITH_LINE_AND_COLUMN_DISABLED 80 * 81 * It is active by default only for queue token policies, because after 82 * a call to .receive(), the lexical analyzer maintains only the position 83 * of the last token in the queue. The positions of other tokens would 84 * not be accessible once they are in the queue. 85 * 86 * The token policy 'users_token' only communicates one token at a time 87 * and the line and column numbers in the lexical analyzer are those 88 * of the last token. Thus, in this case the tokens do not need to be 89 * stamped with the position in the file. */ 90 #ifdef QUEX_OPTION_TOKEN_STAMPING_WITH_LINE_AND_COLUMN_DISABLED 91 # ifdef QUEX_OPTION_TOKEN_STAMPING_WITH_LINE_AND_COLUMN 92 # undef QUEX_OPTION_TOKEN_STAMPING_WITH_LINE_AND_COLUMN 93 # endif 94 #else 95 # ifndef QUEX_OPTION_TOKEN_STAMPING_WITH_LINE_AND_COLUMN 96 # define QUEX_OPTION_TOKEN_STAMPING_WITH_LINE_AND_COLUMN 97 # endif 98 #endif 99 100 #ifdef QUEX_OPTION_TOKEN_REPETITION_SUPPORT 101 # define __QUEX_IF_TOKEN_REPETITION_SUPPORT(EXPRESSION) EXPRESSION 102 # define __QUEX_IF_TOKEN_REPETITION_SUPPORT_DISABLED(EXPRESSION) /* empty */ 103 #else 104 # define __QUEX_IF_TOKEN_REPETITION_SUPPORT(EXPRESSION) /* empty */ 105 # define __QUEX_IF_TOKEN_REPETITION_SUPPORT_DISABLED(EXPRESSION) EXPRESSION 106 #endif 107 108 #if defined (QUEX_OPTION_TOKEN_POLICY_QUEUE) 109 # define __QUEX_TYPE_ANALYZER_RETURN_VALUE void 110 # define __QUEX_RETURN return 111 # define QUEX_SETTING_AFTER_SEND_CONTINUE_OR_RETURN() CONTINUE 112 #else 113 # define __QUEX_TYPE_ANALYZER_RETURN_VALUE QUEX_TYPE_TOKEN_ID 114 # define __QUEX_RETURN return __self_result_token_id 115 # define QUEX_SETTING_AFTER_SEND_CONTINUE_OR_RETURN() RETURN 116 #endif 117 118 #if defined(QUEX_OPTION_CONVERTER_ICONV) || defined(QUEX_OPTION_CONVERTER_ICU) 119 # ifndef __QUEX_OPTION_CONVERTER 120 # define __QUEX_OPTION_CONVERTER 121 # endif 122 # if defined(__QUEX_OPTION_ENGINE_RUNNING_ON_CODEC) 123 # error "Cannot specify QUEX_OPTION_CONVERTER_ICU or QUEX_OPTION_CONVERTER_ICU if the engine is running directly on a codec." 124 # endif 125 #endif 126 #if ! defined(QUEX_SETTING_BUFFER_FILLERS_CONVERTER_NEW) 127 # if defined (QUEX_OPTION_CONVERTER_ICONV) 128 # define QUEX_SETTING_BUFFER_FILLERS_CONVERTER_NEW QUEX_NAME(Converter_IConv_new) 129 # elif defined (QUEX_OPTION_CONVERTER_ICU) 130 # define QUEX_SETTING_BUFFER_FILLERS_CONVERTER_NEW QUEX_NAME(Converter_ICU_new) 131 # else 132 # define QUEX_SETTING_BUFFER_FILLERS_CONVERTER_NEW QUEX_NAME(__Converter_EMPTY_new) 133 # endif 134 #endif 135 136 #ifndef __QUEX_OPTION_CONVERTER_HELPER 137 # if defined(QUEX_OPTION_INFORMATIVE_BUFFER_OVERFLOW_MESSAGE) \ 138 || defined(QUEX_OPTION_CONVERTER_ICU) \ 139 || defined(QUEX_OPTION_CONVERTER_ICONV) 140 # define __QUEX_OPTION_CONVERTER_HELPER 141 # endif 142 #endif 143 144 #if defined(QUEX_OPTION_LINE_NUMBER_COUNTING) \ 145 || defined(QUEX_OPTION_COLUMN_NUMBER_COUNTING) \ 146 || defined(QUEX_OPTION_INDENTATION_TRIGGER) 147 # define __QUEX_OPTION_COUNTER 148 # define __QUEX_IF_COUNT(EXPRESSION) EXPRESSION 149 # define __QUEX_IF_COUNT_IF(EXPRESSION) if( EXPRESSION ) 150 # define __QUEX_IF_COUNT_SHIFT_VALUES() \ 151 __QUEX_COUNTER_SHIFT_COLUMNS(); \ 152 __QUEX_COUNTER_SHIFT_LINES(); 153 #else 154 # if defined(__QUEX_OPTION_COUNTER) 155 # undef __QUEX_OPTION_COUNTER 156 # endif 157 # define __QUEX_IF_COUNT(EXPRESSION) /* empty */ 158 # define __QUEX_IF_COUNT_IF(EXPRESSION) /* empty */ 159 # define __QUEX_IF_COUNT_SHIFT_VALUES() /* empty */ 160 #endif 161 162 #if defined(QUEX_OPTION_LINE_NUMBER_COUNTING) 163 # define __QUEX_IF_COUNT_LINES(EXPRESSION) EXPRESSION 164 # define __QUEX_IF_COUNT_LINES_IF(EXPRESSION) if( EXPRESSION ) 165 # define __QUEX_IF_COUNT_LINES_ADD(X) \ 166 do { \ 167 me->counter._line_number_at_end += (X); \ 168 __quex_debug_counter(); \ 169 } while(0) 170 # define __QUEX_COUNTER_SHIFT_LINES() \ 171 me->counter._line_number_at_begin = me->counter._line_number_at_end; 172 173 #else 174 # define __QUEX_IF_COUNT_LINES(EXPRESSION) /* empty */ 175 # define __QUEX_IF_COUNT_LINES_IF(EXPRESSION) /* empty */ 176 # define __QUEX_IF_COUNT_LINES_ADD(X) /* empty */ 177 # define __QUEX_COUNTER_SHIFT_LINES() /* empty */ 178 #endif 179 180 #if defined(QUEX_OPTION_COLUMN_NUMBER_COUNTING) 181 # define __QUEX_IF_COUNT_COLUMNS(EXPRESSION) EXPRESSION 182 # define __QUEX_IF_COUNT_COLUMNS_SET(X) \ 183 do { \ 184 me->counter._column_number_at_end = (X); \ 185 __quex_debug_counter(); \ 186 } while(0) 187 # define __QUEX_IF_COUNT_COLUMNS_ADD(X) \ 188 do { \ 189 me->counter._column_number_at_end += (X); \ 190 __quex_debug_counter(); \ 191 } while(0) 192 # define __QUEX_COUNTER_SHIFT_COLUMNS() \ 193 me->counter._column_number_at_begin = me->counter._column_number_at_end; 194 195 #else 196 # define __QUEX_IF_COUNT_COLUMNS(EXPRESSION) /* empty */ 197 # define __QUEX_IF_COUNT_COLUMNS_SET(X) /* empty */ 198 # define __QUEX_IF_COUNT_COLUMNS_ADD(X) /* empty */ 199 # define __QUEX_COUNTER_SHIFT_COLUMNS() /* empty */ 200 #endif 201 202 #if defined(QUEX_OPTION_INDENTATION_TRIGGER) 203 # ifndef QUEX_OPTION_INDENTATION_DEFAULT_HANDLER_DISABLED 204 # define QUEX_OPTION_INDENTATION_DEFAULT_HANDLER 205 # endif 206 # define __QUEX_IF_COUNT_INDENTATION(EXPRESSION) EXPRESSION 207 #else 208 # define __QUEX_IF_COUNT_INDENTATION(EXPRESSION) /* empty */ 209 #endif 210 211 /* Default Counter Rules */ 212 #if ! defined(__QUEX_COUNTER_RULES) 213 /* NOTE: 'x - x % 4' == 'x with the last two bits deleted' 214 * == 'x & (~3)' */ 215 # if QUEX_SETTING_CHAR_CODEC == utf8 216 # define __QUEX_COUNTER_RULES(counter, iterator) \ 217 switch( (int)(*iterator) ) { \ 218 case (int)(QUEX_TYPE_LEXATOM)'\t': \ 219 (counter)._column_number_at_end &= (~(size_t)0x3) + 4; \ 220 ++(iterator); \ 221 break; \ 222 case (int)(QUEX_TYPE_LEXATOM)'\n': \ 223 (counter)._line_number_at_end += 1; \ 224 (counter)._column_number_at_end = 1; \ 225 ++(iterator); \ 226 break; \ 227 default: \ 228 if ( (*iterator & 0x80) == 0 ) { iterator += 1; } /* 1byte character */ \ 229 /* NOT ( (*iterator & 0x40) == 0 ) { iterator += 2; } 2byte character */ \ 230 else if( (*iterator & 0x20) == 0 ) { iterator += 2; } /* 3byte character */ \ 231 else if( (*iterator & 0x10) == 0 ) { iterator += 3; } /* 3byte character */ \ 232 else if( (*iterator & 0x08) == 0 ) { iterator += 4; } /* 4byte character */ \ 233 else if( (*iterator & 0x04) == 0 ) { iterator += 5; } /* 5byte character */ \ 234 else if( (*iterator & 0x02) == 0 ) { iterator += 6; } /* 6byte character */ \ 235 else if( (*iterator & 0x01) == 0 ) { iterator += 7; } /* 7byte character */ \ 236 else { iterator += 1; } /* default 1 */ \ 237 (counter)._column_number_at_end += 1; \ 238 break; \ 239 } 240 # elif QUEX_SETTING_CHAR_CODEC == utf16 241 # define __QUEX_COUNTER_RULES(counter, iterator) \ 242 switch( (int)(QUEX_TYPE_LEXATOM)(*iterator) ) { \ 243 case (int)(QUEX_TYPE_LEXATOM)'\t': \ 244 (counter)._column_number_at_end &= (~(size_t)0x3) + 4;\ 245 ++(iterator); \ 246 break; \ 247 case (int)(QUEX_TYPE_LEXATOM)'\n': \ 248 (counter)._line_number_at_end += 1; \ 249 (counter)._column_number_at_end = 1; \ 250 ++(iterator); \ 251 break; \ 252 default: \ 253 if ( *iterator < 0xD800 ) { iterator += 1; } /* 1 chunk character */ \ 254 else if( *iterator > 0xDBFF ) { iterator += 1; } /* 1 chunk character */ \ 255 else { iterator += 2; } /* 2 chunk character */ \ 256 (counter)._column_number_at_end += 1; \ 257 break; \ 258 } 259 # else 260 # define __QUEX_COUNTER_RULES(counter, iterator) \ 261 switch( (int)(*iterator) ) { \ 262 case (int)(QUEX_TYPE_LEXATOM)'\t': \ 263 (counter)._column_number_at_end &= (~(size_t)0x3) + 4; break; \ 264 case (int)(QUEX_TYPE_LEXATOM)'\n': \ 265 (counter)._line_number_at_end += 1; \ 266 (counter)._column_number_at_end = 1; break; \ 267 default: \ 268 (counter)._column_number_at_end += 1; break; \ 269 } \ 270 ++(iterator); 271 # endif 272 273 #endif 274 275 /* Special Case MinGW: At the time of this writing (2009y09m23d) it does 276 * not support 'wchart_t'. */ 277 #if (defined (__GLIBCPP__) || defined(__GLIBCXX__)) \ 278 && ! defined (_GLIBCXX_USE_WCHAR_T) 279 # define __QUEX_OPTION_WCHAR_T_DISABLED 280 #endif 281 #ifndef __QUEX_OPTION_WCHAR_T_DISABLED 282 # define __QUEX_OPTION_WCHAR_T 283 #endif 284 285 /* If you have a different setup, define the macros QUEX_SETTING_WCHAR_CODEC 286 * and QUEX_SETTING_CHAR_CODEC before the inclusion of this file. 287 * 288 * NOTE: '8' stands for UTF8, '16' stands for UTF16, and '32' for UTF32. 289 * Do not add anything around those numbers, otherwise the macros 290 * will not trigger the right mappings. */ 291 #if ! defined(QUEX_SETTING_WCHAR_CODEC) 292 # if defined(_WIN32) || defined(_WIN64) 293 /* Default: Map 'wchar' to 'utf16' */ 294 # define QUEX_SETTING_WCHAR_CODEC 16 295 # else 296 /* Default: Map 'wchar' to 'utf32' */ 297 # define QUEX_SETTING_WCHAR_CODEC 32 298 # endif 299 #endif 300 301 /* Default: Map 'char' to 'utf8' */ 302 #if ! defined(QUEX_SETTING_CHAR_CODEC) 303 # define QUEX_SETTING_CHAR_CODEC utf8 304 #endif 305 306 #if ! defined(__QUEX_OPTION_PLAIN_C) 307 /* Cannot/must not go through '__QUEX_APPEND'. QUEX_FUNCTION_PREFIX ends 308 * with '::'. No '##' is required for concatination. */ 309 # define QUEX_FUNCTION_DEF(NAME) NAME 310 # define QUEX_FUNCTION(NAME) QUEX_FUNCTION_PREFIX NAME 311 312 /* Avoid __VA_ARGS__ because some compilers still cannot handle it 313 * properly. */ 314 # define QUEX_SIGNATURE(CLASS, FUNCTION) CLASS ## :: ## FUNCTION 315 # define QUEX_THIS_IS_ME(C) C* me = this; 316 # define QUEX_MEMBERF(C, F) QUEX_SIGNATURE(C, F)() 317 # define QUEX_MEMBERF1(C, F, ARG0) QUEX_SIGNATURE(C, F)(ARG0) 318 # define QUEX_MEMBERF2(C, F, ARG0, ARG1) QUEX_SIGNATURE(C, F)(ARG0, ARG1) 319 # define QUEX_MEMBERF3(C, F, ARG0, ARG1, ARG2) QUEX_SIGNATURE(C, F)(ARG0, ARG1, ARG2) 320 # define QUEX_MEMBERF4(C, F, ARG0, ARG1, ARG2, ARG3) QUEX_SIGNATURE(C, F)(ARG0, ARG1, ARG2, ARG3) 321 322 # define QUEX_DESTRUCTOR() QUEX_MEMBER(~QUEX_TYPE0_ANALYZER)() 323 # define QUEX_MEMBER_FUNCTION(N, SFX) QUEX_MEMBER(N)() 324 # define QUEX_MEMBER_FUNCTIONO(N) QUEX_MEMBER(N)() 325 # define QUEX_MEMBER_FUNCTION1(N, SFX, A) QUEX_MEMBER(N)(A) 326 # define QUEX_MEMBER_FUNCTIONO1(N, A) QUEX_MEMBER(N)(A) 327 # define QUEX_MEMBER_FUNCTION2(N, SFX, A, B) QUEX_MEMBER(N)(A, B) 328 # define QUEX_MEMBER_FUNCTIONO2(N, A, B) QUEX_MEMBER(N)(A, B) 329 # define QUEX_MEMBER_FUNCTION3(N, SFX, A, B, C) QUEX_MEMBER(N)(A, B, C) 330 # define QUEX_MEMBER_FUNCTION4(N, SFX, A, B, C, D) QUEX_MEMBER(N)(A, B, C, D) 331 # define QUEX_MEMBER_FUNCTION_CALL(N, SFX) this->N() 332 # define QUEX_MEMBER_FUNCTION_CALLO(N) this->N() 333 # define QUEX_MEMBER_FUNCTION_CALL1(N, SFX, A) this->N(A) 334 # define QUEX_MEMBER_FUNCTION_CALLO1(N, A) this->N(A) 335 # define QUEX_MEMBER_FUNCTION_CALL2(N, SFX, A, B) this->N(A, B) 336 # define QUEX_MEMBER_FUNCTION_CALLO2(N, A, B) this->N(A, B) 337 # define QUEX_MEMBER_FUNCTION_CALL3(N, SFX, A, B, C) this->N(A, B, C) 338 # define QUEX_MEMBER_FUNCTION_CALL4(N, SFX, A, B, C, D) this->N(A, B, C, D) 339 340 #else 341 /* Go through '__QUEX_APPEND' to ensure macro expansion, before concatination. */ 342 # define QUEX_FUNCTION_DEF(NAME) __QUEX_APPEND(QUEX_FUNCTION_DEF_PREFIX, NAME) 343 # define QUEX_FUNCTION(NAME) __QUEX_APPEND(QUEX_FUNCTION_PREFIX, NAME) 344 345 # define QUEX_SIGNATURE(CLASS, FUNCTION) CLASS ## _ ## FUNCTION 346 # define QUEX_THIS(C) struct C ## _tag* me 347 # define QUEX_THIS_IS_ME(C) /* Nothing To Do */ 348 # define QUEX_MEMBERF(C, F) QUEX_SIGNATURE(C, F)(QUEX_THIS(C)) 349 # define QUEX_MEMBERF1(C, F, ARG0) QUEX_SIGNATURE(C, F)(QUEX_THIS(C), ARG0) 350 # define QUEX_MEMBERF2(C, F, ARG0, ARG1) QUEX_SIGNATURE(C, F)(QUEX_THIS(C), ARG0, ARG1) 351 # define QUEX_MEMBERF3(C, F, ARG0, ARG1, ARG2) QUEX_SIGNATURE(C, F)(QUEX_THIS(C), ARG0, ARG1, ARG2) 352 # define QUEX_MEMBERF4(C, F, ARG0, ARG1, ARG2, ARG3) QUEX_SIGNATURE(C, F)(QUEX_THIS(C), ARG0, ARG1, ARG2, ARG3) 353 354 /* Avoid __VA_ARGS__ because some compilers still cannot handle it 355 * properly. */ 356 # define QUEX_DESTRUCTOR() void QUEX_NAME(destruct)(QUEX_TYPE_ANALYZER* me) 357 # define QUEX_MEMBER_FUNCTION(N, SFX) QUEX_NAME(N ## _ ## SFX)(QUEX_TYPE_ANALYZER* me) 358 # define QUEX_MEMBER_FUNCTIONO(N) QUEX_NAME(N)(QUEX_TYPE_ANALYZER* me) 359 # define QUEX_MEMBER_FUNCTION1(N, SFX, A) QUEX_NAME(N ## _ ## SFX)(QUEX_TYPE_ANALYZER* me, A) 360 # define QUEX_MEMBER_FUNCTIONO1(N, A) QUEX_NAME(N)(QUEX_TYPE_ANALYZER* me, A) 361 # define QUEX_MEMBER_FUNCTION2(N, SFX, A, B) QUEX_NAME(N ## _ ## SFX)(QUEX_TYPE_ANALYZER* me, A, B) 362 # define QUEX_MEMBER_FUNCTIONO2(N, A, B) QUEX_NAME(N)(QUEX_TYPE_ANALYZER* me, A, B) 363 # define QUEX_MEMBER_FUNCTION3(N, SFX, A, B, C) QUEX_NAME(N ## _ ## SFX)(QUEX_TYPE_ANALYZER* me, A, B, C) 364 # define QUEX_MEMBER_FUNCTION4(N, SFX, A, B, C, D) QUEX_NAME(N ## _ ## SFX)(QUEX_TYPE_ANALYZER* me, A, B, C, D) 365 # define QUEX_MEMBER_FUNCTION_CALL(N, SFX) QUEX_NAME(N ## _ ## SFX)(me) 366 # define QUEX_MEMBER_FUNCTION_CALLO(N) QUEX_NAME(N)(me) 367 # define QUEX_MEMBER_FUNCTION_CALL1(N, SFX, A) QUEX_NAME(N ## _ ## SFX)(me, A) 368 # define QUEX_MEMBER_FUNCTION_CALLO1(N, A) QUEX_NAME(N)(me, A) 369 # define QUEX_MEMBER_FUNCTION_CALL2(N, SFX, A, B) QUEX_NAME(N ## _ ## SFX)(me, A, B) 370 # define QUEX_MEMBER_FUNCTION_CALLO2(N, A, B) QUEX_NAME(N)(me, A, B) 371 # define QUEX_MEMBER_FUNCTION_CALL3(N, SFX, A, B, C) QUEX_NAME(N ## _ ## SFX)(me, A, B, C) 372 # define QUEX_MEMBER_FUNCTION_CALL4(N, SFX, A, B, C, D) QUEX_NAME(N ## _ ## SFX)(me, A, B, C, D) 373 374 #endif 375 376 #define QUEX_A_MEMBERF (FUNCTION) QUEX_MEMBERF(QUEX_TYPE0_ANALYZER, FUNCTION) 377 #define QUEX_A_MEMBERF1(FUNCTION, ARG0) QUEX_MEMBERF1(QUEX_TYPE0_ANALYZER, FUNCTION, ARG0) 378 #define QUEX_A_MEMBERF2(FUNCTION, ARG0, ARG1) QUEX_MEMBERF2(QUEX_TYPE0_ANALYZER, FUNCTION, ARG0, ARG1) 379 #define QUEX_A_MEMBERF3(FUNCTION, ARG0, ARG1, ARG2) QUEX_MEMBERF3(QUEX_TYPE0_ANALYZER, FUNCTION, ARG0, ARG1, ARG2) 380 #define QUEX_A_MEMBERF4(FUNCTION, ARG0, ARG1, ARG2, ARG3) QUEX_MEMBERF4(QUEX_TYPE0_ANALYZER, FUNCTION, ARG0, ARG1, ARG2, ARG3) 381 382 #define QUEX_T_MEMBERF (FUNCTION) QUEX_MEMBERF(QUEX_NAME_COMPLETE_TOKEN, FUNCTION) 383 #define QUEX_T_MEMBERF1(FUNCTION, ARG0) QUEX_MEMBERF1(QUEX_NAME_COMPLETE_TOKEN, FUNCTION, ARG0) 384 #define QUEX_T_MEMBERF2(FUNCTION, ARG0, ARG1) QUEX_MEMBERF2(QUEX_NAME_COMPLETE_TOKEN, FUNCTION, ARG0, ARG1) 385 #define QUEX_T_MEMBERF3(FUNCTION, ARG0, ARG1, ARG2) QUEX_MEMBERF3(QUEX_NAME_COMPLETE_TOKEN, FUNCTION, ARG0, ARG1, ARG2) 386 #define QUEX_T_MEMBERF4(FUNCTION, ARG0, ARG1, ARG2, ARG3) QUEX_MEMBERF4(QUEX_NAME_COMPLETE_TOKEN, FUNCTION, ARG0, ARG1, ARG2, ARG3) 387 388 /* For function definitions, the 'namespace::' is not required. => QUEX_FUNCTION0 */ 389 #define __QUEX_CONVERTER_CHAR_DEF(FROM, TO) QUEX_FUNCTION_DEF(FROM ## _to_ ## TO ## _character) 390 #define __QUEX_CONVERTER_STRING_DEF(FROM, TO) QUEX_FUNCTION_DEF(FROM ## _to_ ## TO) 391 #define QUEX_CONVERTER_CHAR_DEF(FROM, TO) __QUEX_CONVERTER_CHAR_DEF(FROM, TO) 392 #define QUEX_CONVERTER_STRING_DEF(FROM, TO) __QUEX_CONVERTER_STRING_DEF(FROM, TO) 393 394 /* For function calls, the 'namespace::' IS required. => QUEX_FUNCTION */ 395 #define __QUEX_CONVERTER_CHAR(FROM, TO) QUEX_FUNCTION(FROM ## _to_ ## TO ## _character) 396 #define __QUEX_CONVERTER_STRING(FROM, TO) QUEX_FUNCTION(FROM ## _to_ ## TO) 397 #define QUEX_CONVERTER_CHAR(FROM, TO) __QUEX_CONVERTER_CHAR(FROM, TO) 398 #define QUEX_CONVERTER_STRING(FROM, TO) __QUEX_CONVERTER_STRING(FROM, TO) 399 400 /* If '--token-class-only' we need to restore overwritten macros. */ 401 #define __QUEX_CONVERTER_CHAR_DEF_BACKUP(FROM, TO) QUEX_FUNCTION_DEF(FROM ## _to_ ## TO ## _character) 402 #define __QUEX_CONVERTER_STRING_DEF_BACKUP(FROM, TO) QUEX_FUNCTION_DEF(FROM ## _to_ ## TO) 403 #define QUEX_CONVERTER_CHAR_DEF_BACKUP(FROM, TO) __QUEX_CONVERTER_CHAR_DEF(FROM, TO) 404 #define QUEX_CONVERTER_STRING_DEF_BACKUP(FROM, TO) __QUEX_CONVERTER_STRING_DEF(FROM, TO) 405 #define __QUEX_CONVERTER_CHAR_BACKUP(FROM, TO) QUEX_FUNCTION(FROM ## _to_ ## TO ## _character) 406 #define __QUEX_CONVERTER_STRING_BACKUP(FROM, TO) QUEX_FUNCTION(FROM ## _to_ ## TO) 407 #define QUEX_CONVERTER_CHAR_BACKUP(FROM, TO) __QUEX_CONVERTER_CHAR(FROM, TO) 408 #define QUEX_CONVERTER_STRING_BACKUP(FROM, TO) __QUEX_CONVERTER_STRING(FROM, TO) 409 410 #if defined (QUEX_OPTION_ASSERTS) 411 # define __QUEX_IF_ASSERT(X) X 412 #else 413 # define __QUEX_IF_ASSERT(X) /* Ignore */ 414 #endif 415 416 #ifdef QUEX_OPTION_STRING_ACCUMULATOR 417 # define __QUEX_IF_STRING_ACCUMULATOR(X) X 418 #else 419 # define __QUEX_IF_STRING_ACCUMULATOR(X) /* No operation */ 420 #endif 421 #ifdef QUEX_OPTION_POST_CATEGORIZER 422 # define __QUEX_IF_POST_CATEGORIZER(X) X 423 #else 424 # define __QUEX_IF_POST_CATEGORIZER(X) /* No operation */ 425 #endif 426 #ifdef QUEX_OPTION_INCLUDE_STACK 427 # define __QUEX_IF_INCLUDE_STACK(X) X 428 #else 429 # define __QUEX_IF_INCLUDE_STACK(X) /* No operation */ 430 #endif 431 432 /* If the user does not define a class declaration epilog, 433 * define it as empty. */ 434 #ifndef QUEX_SETTING_USER_CLASS_DECLARATION_EPILOG 435 # define QUEX_SETTING_USER_CLASS_DECLARATION_EPILOG 436 #endif