X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Fparser_scan.re;h=0ba9978f7af9ca11570721133796eb12f0657edd;hp=7ba49b2764010025ef992ccd2a6077cb8ea5023d;hb=c57af11984f284e7e9de5bde5c189c416004638c;hpb=a7ac1c0a3c855321f21682c127a4b707de33a303 diff --git a/src/parser_scan.re b/src/parser_scan.re index 7ba49b2..0ba9978 100644 --- a/src/parser_scan.re +++ b/src/parser_scan.re @@ -23,10 +23,15 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *******************************************************************************/ -#include +#ifdef HAVE_CONFIG_H +# include "config.h" +#else +# include "php_config.h" +#endif #include "parser.h" #include "plist.h" +#include "debug.h" /*!max:re2c*/ #ifndef YYMAXFILL @@ -39,17 +44,19 @@ size_t psi_parser_maxfill(void) { #define NEWLINE() \ eol = cur; \ - ++I->lines + ++lines #define NEWTOKEN(t) do { \ if (t == PSI_T_COMMENT || t == PSI_T_WHITESPACE) { \ - token = psi_token_init(t, "", 0, tok - eol + 1, I->lines, I->file); \ + token = psi_token_init(t, "", 0, tok - eol + 1, lines, I->file); \ } else { \ - token = psi_token_init(t, tok, cur - tok, tok - eol + 1, I->lines, I->file); \ + token = psi_token_init(t, tok, cur - tok, tok - eol + 1, lines, I->file); \ } \ tokens = psi_plist_add(tokens, &token); \ - PSI_DEBUG_PRINT(P, "PSI: scanned < "); \ - PSI_DEBUG_DUMP(P, psi_token_dump, token); \ + PSI_DEBUG_LOCK(P, \ + PSI_DEBUG_PRINT(P, "PSI: scanned < "); \ + PSI_DEBUG_DUMP(P, psi_token_dump, token); \ + ); \ } while(0) #define CHECKEOF() if (cur >= lim - YYMAXFILL) goto done @@ -59,15 +66,13 @@ struct psi_plist *psi_parser_scan(struct psi_parser *P, struct psi_parser_input struct psi_plist *tokens; struct psi_token *token; const char *tok, *cur, *lim, *mrk, *eol, *ctxmrk; - unsigned parens; + unsigned char_width, parens, lines = 1; bool escaped; - token_t char_width; PSI_DEBUG_PRINT(P, "PSI: scanning %s\n", I->file->val); tok = mrk = eol = cur = I->buffer; lim = I->buffer + I->length + YYMAXFILL; - I->lines = 1; tokens = psi_plist_init((psi_plist_dtor) psi_token_free); start: ; @@ -114,8 +119,8 @@ struct psi_plist *psi_parser_scan(struct psi_parser *P, struct psi_parser_input INT_CONST / ('llu' | 'ull') { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_INT | PSI_NUMBER_ULL; cur += 3; goto start; } FLT_CONST { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_FLT; goto start; } - FLT_CONST / 'f' { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_FLT | PSI_NUMBER_F; cur += 1; goto start; } - FLT_CONST / 'l' { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_FLT | PSI_NUMBER_L; cur += 1; goto start; } + FLT_CONST / 'f' { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_FLT | PSI_NUMBER_F; cur += 1; goto start; } + FLT_CONST / 'l' { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_FLT | PSI_NUMBER_L; cur += 1; goto start; } FLT_CONST / 'df' { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_FLT | PSI_NUMBER_DF; cur += 2; goto start; } FLT_CONST / 'dd' { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_FLT | PSI_NUMBER_DD; cur += 2; goto start; } FLT_CONST / 'dl' { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_FLT | PSI_NUMBER_DL; cur += 2; goto start; } @@ -125,7 +130,7 @@ struct psi_plist *psi_parser_scan(struct psi_parser *P, struct psi_parser_input "u8" / "\"" { char_width = 1; } "u" / ['"] { char_width = 2; } "U" / ['"] { char_width = 4; } - "L" / ['"] { char_width = sizeof(wchar_t)/8; } + "L" / ['"] { char_width = sizeof(wchar_t); } "/*" { goto comment; } "//" { goto comment_sl; }