diff options
Diffstat (limited to 'src/libs/cplusplus/pp-scanner.h')
-rw-r--r-- | src/libs/cplusplus/pp-scanner.h | 282 |
1 files changed, 11 insertions, 271 deletions
diff --git a/src/libs/cplusplus/pp-scanner.h b/src/libs/cplusplus/pp-scanner.h index c2e768912f..71bd04476b 100644 --- a/src/libs/cplusplus/pp-scanner.h +++ b/src/libs/cplusplus/pp-scanner.h @@ -50,266 +50,57 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#ifndef PP_SCANNER_H -#define PP_SCANNER_H +#ifndef CPLUSPLUS_PP_SCANNER_H +#define CPLUSPLUS_PP_SCANNER_H namespace CPlusPlus { struct pp_skip_blanks { int lines; - - - const char *operator () (const char *__first, const char *__last) - { - lines = 0; - - for (; __first != __last; lines += (*__first != '\n' ? 0 : 1), ++__first) - { - if (*__first == '\\') - { - const char *__begin = __first; - ++__begin; - - if (__begin != __last && *__begin == '\n') - ++__first; - else - break; - } - else if (*__first == '\n' || !pp_isspace (*__first)) - break; - } - - return __first; - } + const char *operator () (const char *first, const char *last); }; struct pp_skip_whitespaces { int lines; - - const char *operator () (const char *__first, const char *__last) - { - lines = 0; - - for (; __first != __last; lines += (*__first != '\n' ? 0 : 1), ++__first) - { - if (! pp_isspace (*__first)) - break; - } - - return __first; - } + const char *operator () (const char *first, const char *last); }; struct pp_skip_comment_or_divop { int lines; - - const char *operator () (const char *__first, const char *__last) - { - enum { - MAYBE_BEGIN, - BEGIN, - MAYBE_END, - END, - IN_COMMENT, - IN_CXX_COMMENT - } state (MAYBE_BEGIN); - - lines = 0; - - for (; __first != __last; lines += (*__first != '\n' ? 0 : 1), ++__first) - { - switch (state) - { - default: - assert (0); - break; - - case MAYBE_BEGIN: - if (*__first != '/') - return __first; - - state = BEGIN; - break; - - case BEGIN: - if (*__first == '*') - state = IN_COMMENT; - else if (*__first == '/') - state = IN_CXX_COMMENT; - else - return __first; - break; - - case IN_COMMENT: - if (*__first == '*') - state = MAYBE_END; - break; - - case IN_CXX_COMMENT: - if (*__first == '\n') - return __first; - break; - - case MAYBE_END: - if (*__first == '/') - state = END; - else if (*__first != '*') - state = IN_COMMENT; - break; - - case END: - return __first; - } - } - - return __first; - } + const char *operator () (const char *first, const char *last); }; struct pp_skip_identifier { int lines; - - const char *operator () (const char *__first, const char *__last) - { - lines = 0; - - for (; __first != __last; lines += (*__first != '\n' ? 0 : 1), ++__first) - { - if (! pp_isalnum (*__first) && *__first != '_') - break; - } - - return __first; - } + const char *operator () (const char *first, const char *last); }; struct pp_skip_number { int lines; - - const char *operator () (const char *__first, const char *__last) - { - lines = 0; - - for (; __first != __last; lines += (*__first != '\n' ? 0 : 1), ++__first) - { - if (! pp_isalnum (*__first) && *__first != '.') - break; - } - - return __first; - } + const char *operator () (const char *first, const char *last); }; struct pp_skip_string_literal { int lines; - - const char *operator () (const char *__first, const char *__last) - { - enum { - BEGIN, - IN_STRING, - QUOTE, - END - } state (BEGIN); - - lines = 0; - - for (; __first != __last; lines += (*__first != '\n' ? 0 : 1), ++__first) - { - switch (state) - { - default: - assert (0); - break; - - case BEGIN: - if (*__first != '\"') - return __first; - state = IN_STRING; - break; - - case IN_STRING: - if (! (*__first != '\n')) - return __last; - - if (*__first == '\"') - state = END; - else if (*__first == '\\') - state = QUOTE; - break; - - case QUOTE: - state = IN_STRING; - break; - - case END: - return __first; - } - } - - return __first; - } + const char *operator () (const char *first, const char *last); }; struct pp_skip_char_literal { int lines; - - const char *operator () (const char *__first, const char *__last) - { - enum { - BEGIN, - IN_STRING, - QUOTE, - END - } state (BEGIN); - - lines = 0; - - for (; state != END && __first != __last; lines += (*__first != '\n' ? 0 : 1), ++__first) - { - switch (state) - { - default: - assert (0); - break; - - case BEGIN: - if (*__first != '\'') - return __first; - state = IN_STRING; - break; - - case IN_STRING: - if (! (*__first != '\n')) - return __last; - - if (*__first == '\'') - state = END; - else if (*__first == '\\') - state = QUOTE; - break; - - case QUOTE: - state = IN_STRING; - break; - } - } - - return __first; - } + const char *operator () (const char *first, const char *last); }; struct pp_skip_argument @@ -321,60 +112,9 @@ struct pp_skip_argument pp_skip_comment_or_divop skip_comment_or_divop; int lines; - - const char *operator () (const char *__first, const char *__last) - { - int depth = 0; - lines = 0; - - while (__first != __last) - { - if (!depth && (*__first == ')' || *__first == ',')) - break; - else if (*__first == '(') - ++depth, ++__first; - else if (*__first == ')') - --depth, ++__first; - else if (*__first == '\"') - { - __first = skip_string_literal (__first, __last); - lines += skip_string_literal.lines; - } - else if (*__first == '\'') - { - __first = skip_char_literal (__first, __last); - lines += skip_char_literal.lines; - } - else if (*__first == '/') - { - __first = skip_comment_or_divop (__first, __last); - lines += skip_comment_or_divop.lines; - } - else if (pp_isalpha (*__first) || *__first == '_') - { - __first = skip_identifier (__first, __last); - lines += skip_identifier.lines; - } - else if (pp_isdigit (*__first)) - { - __first = skip_number (__first, __last); - lines += skip_number.lines; - } - else if (*__first == '\n') - { - ++__first; - ++lines; - } - else - ++__first; - } - - return __first; - } + const char *operator () (const char *first, const char *last); }; } // namespace CPlusPlus -#endif // PP_SCANNER_H - -// kate: space-indent on; indent-width 2; replace-tabs on; +#endif // CPLUSPLUS_PP_SCANNER_H |