analyzerAsserts.i (2685B)
1 /* -*- C++ -*- vim: set syntax=cpp: 2 * (C) 2005-2010 Frank-Rene Schaefer 3 * ABSOLUTELY NO WARRANTY */ 4 #ifndef __QUEX_INCLUDE_GUARD__ANALYZER__ASSERTS_I 5 #define __QUEX_INCLUDE_GUARD__ANALYZER__ASSERTS_I 6 7 #include "bufferBuffer" 8 9 #if defined(QUEX_OPTION_ASSERTS) 10 11 #define __QUEX_LEXEME_VALID_BASIC_CHECK() \ 12 if( buffer->_read_p < buffer->_memory._front ) { \ 13 __QUEX_STD_printf("%s:%i:\n", FileName, (int)LineN); \ 14 QUEX_ERROR_EXIT("Lexeme out of buffer bounds.\n"); \ 15 } else if( buffer->_read_p > buffer->_memory._back ) { \ 16 __QUEX_STD_printf("%s:%i:\n", FileName, (int)LineN); \ 17 QUEX_ERROR_EXIT("Lexeme out of buffer bounds.\n"); \ 18 } 19 20 #define __QUEX_LEXEME_VALID_CHECK() \ 21 __QUEX_LEXEME_VALID_BASIC_CHECK() \ 22 else if( *(buffer->_read_p) != (QUEX_TYPE_LEXATOM)0 ) { \ 23 __QUEX_STD_printf("%s:%i:\n", FileName, (int)LineN); \ 24 QUEX_ERROR_EXIT("Tried to access lexeme while terminating zero was not set.\n" \ 25 "This happens, for example, if navigation commands (undo, seek,\n" \ 26 "seek_forward, or seek_backward) are used **before** accessing\n" \ 27 "the lexeme via 'Lexeme' or 'LexemeBegin'.\n"); \ 28 } 29 30 QUEX_NAMESPACE_MAIN_OPEN 31 32 QUEX_INLINE QUEX_TYPE_LEXATOM* 33 QUEX_NAME(access_Lexeme)(const char* FileName, size_t LineN, QUEX_NAME(Buffer)* buffer) 34 { 35 __QUEX_LEXEME_VALID_CHECK(); 36 return buffer->_lexeme_start_p; 37 } 38 39 QUEX_INLINE QUEX_TYPE_LEXATOM* 40 QUEX_NAME(access_LexemeBegin)(const char* FileName, size_t LineN, QUEX_NAME(Buffer)* buffer) 41 { 42 __QUEX_LEXEME_VALID_BASIC_CHECK(); /* IMPORTANT: THAT IS THE DIFFERENCE TO 'accessLexeme()' */ 43 return buffer->_lexeme_start_p; 44 } 45 46 QUEX_INLINE size_t 47 QUEX_NAME(access_LexemeL)(const char* FileName, size_t LineN, QUEX_NAME(Buffer)* buffer) 48 { 49 __QUEX_LEXEME_VALID_BASIC_CHECK(); 50 return (size_t)(buffer->_read_p - buffer->_lexeme_start_p); 51 } 52 53 QUEX_INLINE QUEX_TYPE_LEXATOM* 54 QUEX_NAME(access_LexemeEnd)(const char* FileName, size_t LineN, QUEX_NAME(Buffer)* buffer) 55 { 56 __QUEX_LEXEME_VALID_BASIC_CHECK(); 57 return buffer->_read_p; 58 } 59 60 QUEX_NAMESPACE_MAIN_CLOSE 61 62 #endif 63 64 #endif /* __QUEX_INCLUDE_GUARD__ANALYZER__ASSERTS_I */