sheepy

build system (sheepy) and package manager (spm) for C
git clone https://spartatek.se/git/sheepy.git
Log | Files | Refs | README | LICENSE

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 */