#pragma lib
[m6w6/ext-psi] / src / parser_scan.c
index 99d07eb91f9c8652f276eae05e37bb31f2209a67..58abfc79eb28daad6f0c5a3107e1b6570177ff46 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 1.1.1 on Mon Dec  3 17:01:05 2018 */
+/* Generated by re2c 1.1.1 on Mon Dec 10 13:51:37 2018 */
 #line 1 "src/parser_scan.re"
 /*******************************************************************************
  Copyright (c) 2016, Michael Wallner <mike@php.net>.
@@ -33,6 +33,7 @@
 
 #include "parser.h"
 #include "plist.h"
+#include "debug.h"
 
 #define YYMAXFILL 15
 
@@ -46,17 +47,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
@@ -66,15 +69,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: ;
@@ -85,7 +86,7 @@ struct psi_plist *psi_parser_scan(struct psi_parser *P, struct psi_parser_input
                (void) ctxmrk;
 
                
-#line 89 "src/parser_scan.c"
+#line 90 "src/parser_scan.c"
                {
                        unsigned char yych;
                        unsigned int yyaccept = 0;
@@ -212,7 +213,7 @@ yy2:
 yy3:
 #line 254 "src/parser_scan.re"
                        { CHECKEOF(); NEWTOKEN(-2); goto error; }
-#line 216 "src/parser_scan.c"
+#line 217 "src/parser_scan.c"
 yy4:
                        ++cur;
                        if (lim <= cur) CHECKEOF();;
@@ -226,12 +227,12 @@ yy4:
 yy6:
 #line 253 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_WHITESPACE); goto start; }
-#line 230 "src/parser_scan.c"
+#line 231 "src/parser_scan.c"
 yy7:
                        ++cur;
 #line 252 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_EOL); NEWLINE(); goto start; }
-#line 235 "src/parser_scan.c"
+#line 236 "src/parser_scan.c"
 yy9:
                        yych = *++cur;
                        switch (yych) {
@@ -239,14 +240,14 @@ yy9:
                        default:        goto yy10;
                        }
 yy10:
-#line 155 "src/parser_scan.re"
+#line 156 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_NOT); goto start; }
-#line 245 "src/parser_scan.c"
+#line 246 "src/parser_scan.c"
 yy11:
                        ++cur;
-#line 128 "src/parser_scan.re"
+#line 129 "src/parser_scan.re"
                        { escaped = false; tok += 1; goto string; }
-#line 250 "src/parser_scan.c"
+#line 251 "src/parser_scan.c"
 yy13:
                        yych = *++cur;
                        switch (yych) {
@@ -254,9 +255,9 @@ yy13:
                        default:        goto yy14;
                        }
 yy14:
-#line 138 "src/parser_scan.re"
+#line 139 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_HASH); goto start; }
-#line 260 "src/parser_scan.c"
+#line 261 "src/parser_scan.c"
 yy15:
                        yych = *++cur;
                        switch (yych) {
@@ -329,9 +330,9 @@ yy15:
                        }
 yy16:
                        ++cur;
-#line 156 "src/parser_scan.re"
+#line 157 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_MODULO); goto start; }
-#line 335 "src/parser_scan.c"
+#line 336 "src/parser_scan.c"
 yy18:
                        yych = *++cur;
                        switch (yych) {
@@ -339,44 +340,44 @@ yy18:
                        default:        goto yy19;
                        }
 yy19:
-#line 157 "src/parser_scan.re"
+#line 158 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_AMPERSAND); goto start; }
-#line 345 "src/parser_scan.c"
+#line 346 "src/parser_scan.c"
 yy20:
                        ++cur;
-#line 127 "src/parser_scan.re"
+#line 128 "src/parser_scan.re"
                        { escaped = false; tok += 1; goto character; }
-#line 350 "src/parser_scan.c"
+#line 351 "src/parser_scan.c"
 yy22:
                        ++cur;
-#line 139 "src/parser_scan.re"
+#line 140 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_LPAREN); goto start; }
-#line 355 "src/parser_scan.c"
+#line 356 "src/parser_scan.c"
 yy24:
                        ++cur;
-#line 140 "src/parser_scan.re"
+#line 141 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_RPAREN); goto start; }
-#line 360 "src/parser_scan.c"
+#line 361 "src/parser_scan.c"
 yy26:
                        ++cur;
-#line 153 "src/parser_scan.re"
+#line 154 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_ASTERISK); goto start; }
-#line 365 "src/parser_scan.c"
+#line 366 "src/parser_scan.c"
 yy28:
                        ++cur;
-#line 158 "src/parser_scan.re"
+#line 159 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_PLUS); goto start; }
-#line 370 "src/parser_scan.c"
+#line 371 "src/parser_scan.c"
 yy30:
                        ++cur;
-#line 142 "src/parser_scan.re"
+#line 143 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_COMMA); goto start; }
-#line 375 "src/parser_scan.c"
+#line 376 "src/parser_scan.c"
 yy32:
                        ++cur;
-#line 159 "src/parser_scan.re"
+#line 160 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_MINUS); goto start; }
-#line 380 "src/parser_scan.c"
+#line 381 "src/parser_scan.c"
 yy34:
                        yyaccept = 0;
                        yych = *(mrk = ++cur);
@@ -395,9 +396,9 @@ yy34:
                        default:        goto yy35;
                        }
 yy35:
-#line 170 "src/parser_scan.re"
+#line 171 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_PERIOD); goto start; }
-#line 401 "src/parser_scan.c"
+#line 402 "src/parser_scan.c"
 yy36:
                        yych = *++cur;
                        switch (yych) {
@@ -406,9 +407,9 @@ yy36:
                        default:        goto yy37;
                        }
 yy37:
-#line 160 "src/parser_scan.re"
+#line 161 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_SLASH); goto start; }
-#line 412 "src/parser_scan.c"
+#line 413 "src/parser_scan.c"
 yy38:
                        yyaccept = 1;
                        yych = *(mrk = ++cur);
@@ -421,9 +422,9 @@ yy38:
                        default:        goto yy125;
                        }
 yy39:
-#line 114 "src/parser_scan.re"
+#line 115 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_INT; goto start; }
-#line 427 "src/parser_scan.c"
+#line 428 "src/parser_scan.c"
 yy40:
                        yyaccept = 1;
                        mrk = ++cur;
@@ -451,14 +452,14 @@ yy40:
                        }
 yy42:
                        ++cur;
-#line 143 "src/parser_scan.re"
+#line 144 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_COLON); goto start; }
-#line 457 "src/parser_scan.c"
+#line 458 "src/parser_scan.c"
 yy44:
                        ++cur;
-#line 141 "src/parser_scan.re"
+#line 142 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_EOS); goto start; }
-#line 462 "src/parser_scan.c"
+#line 463 "src/parser_scan.c"
 yy46:
                        yyaccept = 2;
                        yych = *(mrk = ++cur);
@@ -534,9 +535,9 @@ yy46:
                        default:        goto yy47;
                        }
 yy47:
-#line 168 "src/parser_scan.re"
+#line 169 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_LCHEVR); goto start; }
-#line 540 "src/parser_scan.c"
+#line 541 "src/parser_scan.c"
 yy48:
                        yych = *++cur;
                        switch (yych) {
@@ -544,9 +545,9 @@ yy48:
                        default:        goto yy49;
                        }
 yy49:
-#line 152 "src/parser_scan.re"
+#line 153 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_EQUALS); goto start; }
-#line 550 "src/parser_scan.c"
+#line 551 "src/parser_scan.c"
 yy50:
                        yych = *++cur;
                        switch (yych) {
@@ -555,14 +556,14 @@ yy50:
                        default:        goto yy51;
                        }
 yy51:
-#line 169 "src/parser_scan.re"
+#line 170 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_RCHEVR); goto start; }
-#line 561 "src/parser_scan.c"
+#line 562 "src/parser_scan.c"
 yy52:
                        ++cur;
-#line 172 "src/parser_scan.re"
+#line 173 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_IIF); goto start; }
-#line 566 "src/parser_scan.c"
+#line 567 "src/parser_scan.c"
 yy54:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
@@ -576,7 +577,7 @@ yy54:
 yy55:
 #line 247 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_NAME); goto start; }
-#line 580 "src/parser_scan.c"
+#line 581 "src/parser_scan.c"
 yy56:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
@@ -819,9 +820,9 @@ yy74:
                        }
 yy75:
                        ++cur;
-#line 146 "src/parser_scan.re"
+#line 147 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_LBRACKET); goto start; }
-#line 825 "src/parser_scan.c"
+#line 826 "src/parser_scan.c"
 yy77:
                        yych = *++cur;
                        switch (yych) {
@@ -903,19 +904,19 @@ yy77:
                        default:        goto yy183;
                        }
 yy78:
-#line 161 "src/parser_scan.re"
+#line 162 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_BSLASH); goto start; }
-#line 909 "src/parser_scan.c"
+#line 910 "src/parser_scan.c"
 yy79:
                        ++cur;
-#line 147 "src/parser_scan.re"
+#line 148 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_RBRACKET); goto start; }
-#line 914 "src/parser_scan.c"
+#line 915 "src/parser_scan.c"
 yy81:
                        ++cur;
-#line 163 "src/parser_scan.re"
+#line 164 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_CARET); goto start; }
-#line 919 "src/parser_scan.c"
+#line 920 "src/parser_scan.c"
 yy83:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
@@ -1055,9 +1056,9 @@ yy95:
                        }
 yy96:
                        ++cur;
-#line 144 "src/parser_scan.re"
+#line 145 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_LBRACE); goto start; }
-#line 1061 "src/parser_scan.c"
+#line 1062 "src/parser_scan.c"
 yy98:
                        yych = *++cur;
                        switch (yych) {
@@ -1065,29 +1066,29 @@ yy98:
                        default:        goto yy99;
                        }
 yy99:
-#line 162 "src/parser_scan.re"
+#line 163 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_PIPE); goto start; }
-#line 1071 "src/parser_scan.c"
+#line 1072 "src/parser_scan.c"
 yy100:
                        ++cur;
-#line 145 "src/parser_scan.re"
+#line 146 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_RBRACE); goto start; }
-#line 1076 "src/parser_scan.c"
+#line 1077 "src/parser_scan.c"
 yy102:
                        ++cur;
-#line 154 "src/parser_scan.re"
+#line 155 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_TILDE); goto start; }
-#line 1081 "src/parser_scan.c"
+#line 1082 "src/parser_scan.c"
 yy104:
                        ++cur;
-#line 148 "src/parser_scan.re"
+#line 149 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_CMP_NE); goto start; }
-#line 1086 "src/parser_scan.c"
+#line 1087 "src/parser_scan.c"
 yy106:
                        ++cur;
-#line 137 "src/parser_scan.re"
+#line 138 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_CPP_PASTE); goto start; }
-#line 1091 "src/parser_scan.c"
+#line 1092 "src/parser_scan.c"
 yy108:
                        ++cur;
                        if (lim <= cur) CHECKEOF();;
@@ -1163,12 +1164,12 @@ yy108:
 yy110:
 #line 249 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_DOLLAR_NAME); goto start; }
-#line 1167 "src/parser_scan.c"
+#line 1168 "src/parser_scan.c"
 yy111:
                        ++cur;
-#line 150 "src/parser_scan.re"
+#line 151 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_AND); goto start; }
-#line 1172 "src/parser_scan.c"
+#line 1173 "src/parser_scan.c"
 yy113:
                        yych = *++cur;
                        switch (yych) {
@@ -1242,23 +1243,22 @@ yy114:
                        case 61:        goto yy514;
                        case 62:        goto yy519;
                        case 63:        goto yy524;
-                       case 64:        goto yy532;
-                       case 65:        goto yy536;
-                       case 66:        goto yy538;
-                       case 67:        goto yy540;
-                       case 68:        goto yy542;
-                       case 69:        goto yy547;
-                       case 70:        goto yy549;
-                       case 71:        goto yy558;
-                       case 72:        goto yy560;
-                       case 73:        goto yy565;
-                       case 74:        goto yy567;
-                       case 75:        goto yy575;
-                       case 76:        goto yy579;
-                       case 77:        goto yy583;
-                       case 78:        goto yy587;
-                       case 79:        goto yy589;
-                       default:        goto yy594;
+                       case 64:        goto yy530;
+                       case 65:        goto yy534;
+                       case 66:        goto yy536;
+                       case 67:        goto yy538;
+                       case 68:        goto yy540;
+                       case 69:        goto yy545;
+                       case 70:        goto yy547;
+                       case 71:        goto yy554;
+                       case 72:        goto yy556;
+                       case 73:        goto yy561;
+                       case 74:        goto yy563;
+                       case 75:        goto yy570;
+                       case 76:        goto yy574;
+                       case 77:        goto yy577;
+                       case 78:        goto yy581;
+                       default:        goto yy586;
                        }
 yy115:
                        yyaccept = 4;
@@ -1285,17 +1285,17 @@ yy115:
                        default:        goto yy117;
                        }
 yy117:
-#line 120 "src/parser_scan.re"
+#line 121 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_FLT; goto start; }
 #line 1291 "src/parser_scan.c"
 yy118:
                        ++cur;
-#line 134 "src/parser_scan.re"
+#line 135 "src/parser_scan.re"
                        { goto comment; }
 #line 1296 "src/parser_scan.c"
 yy120:
                        ++cur;
-#line 135 "src/parser_scan.re"
+#line 136 "src/parser_scan.re"
                        { goto comment_sl; }
 #line 1301 "src/parser_scan.c"
 yy122:
@@ -1373,7 +1373,7 @@ yy127:
                        }
 yy128:
                        cur -= 1;
-#line 116 "src/parser_scan.re"
+#line 117 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_INT | PSI_NUMBER_L; cur += 1; goto start; }
 #line 1379 "src/parser_scan.c"
 yy129:
@@ -1385,7 +1385,7 @@ yy129:
                        }
 yy130:
                        cur -= 1;
-#line 115 "src/parser_scan.re"
+#line 116 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_INT | PSI_NUMBER_U; cur += 1; goto start; }
 #line 1391 "src/parser_scan.c"
 yy131:
@@ -1491,27 +1491,27 @@ yy132:
                        }
 yy134:
                        ++cur;
-#line 164 "src/parser_scan.re"
+#line 165 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_LSHIFT); goto start; }
 #line 1497 "src/parser_scan.c"
 yy136:
                        ++cur;
-#line 166 "src/parser_scan.re"
+#line 167 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_CMP_LE); goto start; }
 #line 1502 "src/parser_scan.c"
 yy138:
                        ++cur;
-#line 149 "src/parser_scan.re"
+#line 150 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_CMP_EQ); goto start; }
 #line 1507 "src/parser_scan.c"
 yy140:
                        ++cur;
-#line 167 "src/parser_scan.re"
+#line 168 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_CMP_GE); goto start; }
 #line 1512 "src/parser_scan.c"
 yy142:
                        ++cur;
-#line 165 "src/parser_scan.re"
+#line 166 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_RSHIFT); goto start; }
 #line 1517 "src/parser_scan.c"
 yy144:
@@ -1861,8 +1861,8 @@ yy161:
 yy162:
                        ++cur;
                        cur -= 1;
-#line 132 "src/parser_scan.re"
-                       { char_width = sizeof(wchar_t)/8; }
+#line 133 "src/parser_scan.re"
+                       { char_width = sizeof(wchar_t); }
 #line 1867 "src/parser_scan.c"
 yy164:
                        yyaccept = 3;
@@ -1980,7 +1980,7 @@ yy177:
 yy178:
                        ++cur;
                        cur -= 1;
-#line 131 "src/parser_scan.re"
+#line 132 "src/parser_scan.re"
                        { char_width = 4; }
 #line 1986 "src/parser_scan.c"
 yy180:
@@ -2213,7 +2213,7 @@ yy200:
 yy201:
                        ++cur;
                        cur -= 1;
-#line 130 "src/parser_scan.re"
+#line 131 "src/parser_scan.re"
                        { char_width = 2; }
 #line 2219 "src/parser_scan.c"
 yy203:
@@ -2243,12 +2243,12 @@ yy205:
                        }
 yy206:
                        ++cur;
-#line 151 "src/parser_scan.re"
+#line 152 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_OR); goto start; }
 #line 2249 "src/parser_scan.c"
 yy208:
                        ++cur;
-#line 171 "src/parser_scan.re"
+#line 172 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_ELLIPSIS); goto start; }
 #line 2254 "src/parser_scan.c"
 yy210:
@@ -2265,13 +2265,13 @@ yy210:
 yy211:
                        ++cur;
                        cur -= 1;
-#line 121 "src/parser_scan.re"
+#line 122 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_FLT | PSI_NUMBER_F; cur += 1; goto start; }
 #line 2271 "src/parser_scan.c"
 yy213:
                        ++cur;
                        cur -= 1;
-#line 122 "src/parser_scan.re"
+#line 123 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_FLT | PSI_NUMBER_L; cur += 1; goto start; }
 #line 2277 "src/parser_scan.c"
 yy215:
@@ -2300,7 +2300,7 @@ yy217:
                        ++cur;
 yy218:
                        cur -= 2;
-#line 117 "src/parser_scan.re"
+#line 118 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_INT | PSI_NUMBER_UL; cur += 2; goto start; }
 #line 2306 "src/parser_scan.c"
 yy219:
@@ -3072,7 +3072,7 @@ yy282:
 yy283:
                        ++cur;
                        cur -= 1;
-#line 129 "src/parser_scan.re"
+#line 130 "src/parser_scan.re"
                        { char_width = 1; }
 #line 3078 "src/parser_scan.c"
 yy285:
@@ -3106,25 +3106,25 @@ yy288:
 yy289:
                        ++cur;
                        cur -= 2;
-#line 124 "src/parser_scan.re"
+#line 125 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_FLT | PSI_NUMBER_DD; cur += 2; goto start; }
 #line 3112 "src/parser_scan.c"
 yy291:
                        ++cur;
                        cur -= 2;
-#line 123 "src/parser_scan.re"
+#line 124 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_FLT | PSI_NUMBER_DF; cur += 2; goto start; }
 #line 3118 "src/parser_scan.c"
 yy293:
                        ++cur;
                        cur -= 2;
-#line 125 "src/parser_scan.re"
+#line 126 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_FLT | PSI_NUMBER_DL; cur += 2; goto start; }
 #line 3124 "src/parser_scan.c"
 yy295:
                        ++cur;
                        cur -= 3;
-#line 118 "src/parser_scan.re"
+#line 119 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_INT | PSI_NUMBER_ULL; cur += 3; goto start; }
 #line 3130 "src/parser_scan.c"
 yy297:
@@ -7167,10 +7167,10 @@ yy492:
                        case '~':
                        case 0x7F:      goto yy493;
                        case '\\':      goto yy147;
-                       default:        goto yy529;
+                       default:        goto yy61;
                        }
 yy493:
-#line 173 "src/parser_scan.re"
+#line 174 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_PRAGMA); goto start; }
 #line 7176 "src/parser_scan.c"
 yy494:
@@ -7402,21 +7402,21 @@ yy500:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
-                       case 'f':       goto yy531;
+                       case 'f':       goto yy529;
                        default:        goto yy62;
                        }
 yy501:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
-                       case 'e':       goto yy533;
+                       case 'e':       goto yy531;
                        default:        goto yy62;
                        }
 yy502:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
-                       case 'l':       goto yy534;
+                       case 'l':       goto yy532;
                        default:        goto yy62;
                        }
 yy503:
@@ -7499,7 +7499,7 @@ yy505:
                        yych = *(mrk = ++cur);
                        switch (yych) {
                        case 'E':
-                       case 'e':       goto yy535;
+                       case 'e':       goto yy533;
                        default:        goto yy62;
                        }
 yy506:
@@ -7507,7 +7507,7 @@ yy506:
                        yych = *(mrk = ++cur);
                        switch (yych) {
                        case 'K':
-                       case 'k':       goto yy537;
+                       case 'k':       goto yy535;
                        default:        goto yy62;
                        }
 yy507:
@@ -7590,7 +7590,7 @@ yy509:
                        yych = *(mrk = ++cur);
                        switch (yych) {
                        case 'L':
-                       case 'l':       goto yy539;
+                       case 'l':       goto yy537;
                        default:        goto yy62;
                        }
 yy510:
@@ -7598,7 +7598,7 @@ yy510:
                        yych = *(mrk = ++cur);
                        switch (yych) {
                        case 'N':
-                       case 'n':       goto yy541;
+                       case 'n':       goto yy539;
                        default:        goto yy62;
                        }
 yy511:
@@ -7670,7 +7670,7 @@ yy511:
                        case '~':
                        case 0x7F:      goto yy512;
                        case '\\':      goto yy147;
-                       case '_':       goto yy543;
+                       case '_':       goto yy541;
                        default:        goto yy61;
                        }
 yy512:
@@ -7757,7 +7757,7 @@ yy515:
                        yych = *(mrk = ++cur);
                        switch (yych) {
                        case 'S':
-                       case 's':       goto yy544;
+                       case 's':       goto yy542;
                        default:        goto yy62;
                        }
 yy516:
@@ -7765,7 +7765,7 @@ yy516:
                        yych = *(mrk = ++cur);
                        switch (yych) {
                        case 'E':
-                       case 'e':       goto yy545;
+                       case 'e':       goto yy543;
                        default:        goto yy62;
                        }
 yy517:
@@ -7773,7 +7773,7 @@ yy517:
                        yych = *(mrk = ++cur);
                        switch (yych) {
                        case 'Y':
-                       case 'y':       goto yy546;
+                       case 'y':       goto yy544;
                        default:        goto yy62;
                        }
 yy518:
@@ -7856,7 +7856,7 @@ yy520:
                        yych = *(mrk = ++cur);
                        switch (yych) {
                        case 'T':
-                       case 't':       goto yy548;
+                       case 't':       goto yy546;
                        default:        goto yy62;
                        }
 yy521:
@@ -7864,7 +7864,7 @@ yy521:
                        yych = *(mrk = ++cur);
                        switch (yych) {
                        case 'C':
-                       case 'c':       goto yy550;
+                       case 'c':       goto yy548;
                        default:        goto yy62;
                        }
 yy522:
@@ -7872,7 +7872,7 @@ yy522:
                        yych = *(mrk = ++cur);
                        switch (yych) {
                        case 'N':
-                       case 'n':       goto yy551;
+                       case 'n':       goto yy549;
                        default:        goto yy62;
                        }
 yy523:
@@ -8025,98 +8025,24 @@ yy526:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
-                       case 'b':       goto yy552;
+                       case 'b':       goto yy550;
                        default:        goto yy62;
                        }
 yy527:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
-                       case 's':       goto yy553;
+                       case 's':       goto yy551;
                        default:        goto yy62;
                        }
 yy528:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
-                       case 'i':       goto yy554;
+                       case 'i':       goto yy552;
                        default:        goto yy62;
                        }
 yy529:
-                       yyaccept = 3;
-                       mrk = ++cur;
-                       if (lim <= cur) CHECKEOF();;
-                       yych = *cur;
-                       switch (yych) {
-                       case 0x00:
-                       case 0x01:
-                       case 0x02:
-                       case 0x03:
-                       case 0x04:
-                       case 0x05:
-                       case 0x06:
-                       case 0x07:
-                       case 0x08:
-                       case '\t':
-                       case '\n':
-                       case '\v':
-                       case '\f':
-                       case '\r':
-                       case 0x0E:
-                       case 0x0F:
-                       case 0x10:
-                       case 0x11:
-                       case 0x12:
-                       case 0x13:
-                       case 0x14:
-                       case 0x15:
-                       case 0x16:
-                       case 0x17:
-                       case 0x18:
-                       case 0x19:
-                       case 0x1A:
-                       case 0x1B:
-                       case 0x1C:
-                       case 0x1D:
-                       case 0x1E:
-                       case 0x1F:
-                       case ' ':
-                       case '!':
-                       case '"':
-                       case '#':
-                       case '$':
-                       case '%':
-                       case '&':
-                       case '\'':
-                       case '(':
-                       case ')':
-                       case '*':
-                       case '+':
-                       case ',':
-                       case '-':
-                       case '.':
-                       case '/':
-                       case ':':
-                       case ';':
-                       case '<':
-                       case '=':
-                       case '>':
-                       case '?':
-                       case '@':
-                       case '[':
-                       case ']':
-                       case '^':
-                       case '`':
-                       case '{':
-                       case '|':
-                       case '}':
-                       case '~':
-                       case 0x7F:      goto yy55;
-                       case '\\':      goto yy147;
-                       case 'o':       goto yy555;
-                       default:        goto yy529;
-                       }
-yy531:
                        yyaccept = 64;
                        yych = *(mrk = ++cur);
                        switch (yych) {
@@ -8183,29 +8109,29 @@ yy531:
                        case '|':
                        case '}':
                        case '~':
-                       case 0x7F:      goto yy532;
+                       case 0x7F:      goto yy530;
                        case '\\':      goto yy147;
                        default:        goto yy61;
                        }
-yy532:
+yy530:
 #line 182 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_TYPEDEF); goto start; }
-#line 8194 "src/parser_scan.c"
-yy533:
+#line 8120 "src/parser_scan.c"
+yy531:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
-                       case 'd':       goto yy557;
+                       case 'd':       goto yy553;
                        default:        goto yy62;
                        }
-yy534:
+yy532:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
-                       case 'e':       goto yy559;
+                       case 'e':       goto yy555;
                        default:        goto yy62;
                        }
-yy535:
+yy533:
                        yyaccept = 65;
                        yych = *(mrk = ++cur);
                        switch (yych) {
@@ -8272,15 +8198,15 @@ yy535:
                        case '|':
                        case '}':
                        case '~':
-                       case 0x7F:      goto yy536;
+                       case 0x7F:      goto yy534;
                        case '\\':      goto yy147;
                        default:        goto yy61;
                        }
-yy536:
+yy534:
 #line 214 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_CALLABLE); goto start; }
-#line 8283 "src/parser_scan.c"
-yy537:
+#line 8209 "src/parser_scan.c"
+yy535:
                        yyaccept = 66;
                        yych = *(mrk = ++cur);
                        switch (yych) {
@@ -8347,15 +8273,15 @@ yy537:
                        case '|':
                        case '}':
                        case '~':
-                       case 0x7F:      goto yy538;
+                       case 0x7F:      goto yy536;
                        case '\\':      goto yy147;
                        default:        goto yy61;
                        }
-yy538:
+yy536:
 #line 218 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_CALLBACK); goto start; }
-#line 8358 "src/parser_scan.c"
-yy539:
+#line 8284 "src/parser_scan.c"
+yy537:
                        yyaccept = 67;
                        yych = *(mrk = ++cur);
                        switch (yych) {
@@ -8422,15 +8348,15 @@ yy539:
                        case '|':
                        case '}':
                        case '~':
-                       case 0x7F:      goto yy540;
+                       case 0x7F:      goto yy538;
                        case '\\':      goto yy147;
                        default:        goto yy61;
                        }
-yy540:
+yy538:
 #line 234 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_FLOATVAL); goto start; }
-#line 8433 "src/parser_scan.c"
-yy541:
+#line 8359 "src/parser_scan.c"
+yy539:
                        yyaccept = 68;
                        yych = *(mrk = ++cur);
                        switch (yych) {
@@ -8497,39 +8423,39 @@ yy541:
                        case '|':
                        case '}':
                        case '~':
-                       case 0x7F:      goto yy542;
+                       case 0x7F:      goto yy540;
                        case '\\':      goto yy147;
                        default:        goto yy61;
                        }
-yy542:
+yy540:
 #line 220 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_FUNCTION); goto start; }
-#line 8508 "src/parser_scan.c"
-yy543:
+#line 8434 "src/parser_scan.c"
+yy541:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
                        case 'N':
-                       case 'n':       goto yy561;
+                       case 'n':       goto yy557;
                        default:        goto yy62;
                        }
-yy544:
+yy542:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
                        case 'E':
-                       case 'e':       goto yy562;
+                       case 'e':       goto yy558;
                        default:        goto yy62;
                        }
-yy545:
+yy543:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
                        case 'R':
-                       case 'r':       goto yy563;
+                       case 'r':       goto yy559;
                        default:        goto yy62;
                        }
-yy546:
+yy544:
                        yyaccept = 69;
                        yych = *(mrk = ++cur);
                        switch (yych) {
@@ -8596,15 +8522,15 @@ yy546:
                        case '|':
                        case '}':
                        case '~':
-                       case 0x7F:      goto yy547;
+                       case 0x7F:      goto yy545;
                        case '\\':      goto yy147;
                        default:        goto yy61;
                        }
-yy547:
+yy545:
 #line 242 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_TO_ARRAY); goto start; }
-#line 8607 "src/parser_scan.c"
-yy548:
+#line 8533 "src/parser_scan.c"
+yy546:
                        yyaccept = 70;
                        yych = *(mrk = ++cur);
                        switch (yych) {
@@ -8671,56 +8597,54 @@ yy548:
                        case '|':
                        case '}':
                        case '~':
-                       case 0x7F:      goto yy549;
+                       case 0x7F:      goto yy547;
                        case '\\':      goto yy147;
                        default:        goto yy61;
                        }
-yy549:
+yy547:
 #line 245 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_TO_FLOAT); goto start; }
-#line 8682 "src/parser_scan.c"
-yy550:
+#line 8608 "src/parser_scan.c"
+yy548:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
                        case 'T':
-                       case 't':       goto yy564;
+                       case 't':       goto yy560;
                        default:        goto yy62;
                        }
-yy551:
+yy549:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
                        case 'G':
-                       case 'g':       goto yy566;
+                       case 'g':       goto yy562;
                        default:        goto yy62;
                        }
-yy552:
+yy550:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
-                       case 'u':       goto yy568;
+                       case 'u':       goto yy564;
                        default:        goto yy62;
                        }
-yy553:
+yy551:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
-                       case 'i':       goto yy569;
+                       case 'i':       goto yy565;
                        default:        goto yy62;
                        }
-yy554:
+yy552:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
-                       case 'c':       goto yy570;
+                       case 'c':       goto yy566;
                        default:        goto yy62;
                        }
-yy555:
-                       yyaccept = 3;
-                       mrk = ++cur;
-                       if (lim <= cur) CHECKEOF();;
-                       yych = *cur;
+yy553:
+                       yyaccept = 71;
+                       yych = *(mrk = ++cur);
                        switch (yych) {
                        case 0x00:
                        case 0x01:
@@ -8785,14 +8709,16 @@ yy555:
                        case '|':
                        case '}':
                        case '~':
-                       case 0x7F:      goto yy55;
+                       case 0x7F:      goto yy554;
                        case '\\':      goto yy147;
-                       case 'n':       goto yy571;
-                       case 'o':       goto yy555;
-                       default:        goto yy529;
+                       default:        goto yy61;
                        }
-yy557:
-                       yyaccept = 71;
+yy554:
+#line 195 "src/parser_scan.re"
+                       { NEWTOKEN(PSI_T_UNSIGNED); goto start; }
+#line 8720 "src/parser_scan.c"
+yy555:
+                       yyaccept = 72;
                        yych = *(mrk = ++cur);
                        switch (yych) {
                        case 0x00:
@@ -8858,114 +8784,39 @@ yy557:
                        case '|':
                        case '}':
                        case '~':
-                       case 0x7F:      goto yy558;
+                       case 0x7F:      goto yy556;
                        case '\\':      goto yy147;
                        default:        goto yy61;
                        }
-yy558:
-#line 195 "src/parser_scan.re"
-                       { NEWTOKEN(PSI_T_UNSIGNED); goto start; }
-#line 8869 "src/parser_scan.c"
-yy559:
-                       yyaccept = 72;
-                       yych = *(mrk = ++cur);
-                       switch (yych) {
-                       case 0x00:
-                       case 0x01:
-                       case 0x02:
-                       case 0x03:
-                       case 0x04:
-                       case 0x05:
-                       case 0x06:
-                       case 0x07:
-                       case 0x08:
-                       case '\t':
-                       case '\n':
-                       case '\v':
-                       case '\f':
-                       case '\r':
-                       case 0x0E:
-                       case 0x0F:
-                       case 0x10:
-                       case 0x11:
-                       case 0x12:
-                       case 0x13:
-                       case 0x14:
-                       case 0x15:
-                       case 0x16:
-                       case 0x17:
-                       case 0x18:
-                       case 0x19:
-                       case 0x1A:
-                       case 0x1B:
-                       case 0x1C:
-                       case 0x1D:
-                       case 0x1E:
-                       case 0x1F:
-                       case ' ':
-                       case '!':
-                       case '"':
-                       case '#':
-                       case '$':
-                       case '%':
-                       case '&':
-                       case '\'':
-                       case '(':
-                       case ')':
-                       case '*':
-                       case '+':
-                       case ',':
-                       case '-':
-                       case '.':
-                       case '/':
-                       case ':':
-                       case ';':
-                       case '<':
-                       case '=':
-                       case '>':
-                       case '?':
-                       case '@':
-                       case '[':
-                       case ']':
-                       case '^':
-                       case '`':
-                       case '{':
-                       case '|':
-                       case '}':
-                       case '~':
-                       case 0x7F:      goto yy560;
-                       case '\\':      goto yy147;
-                       default:        goto yy61;
-                       }
-yy560:
+yy556:
 #line 179 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_VOLATILE); goto start; }
-#line 8944 "src/parser_scan.c"
-yy561:
+#line 8795 "src/parser_scan.c"
+yy557:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
                        case 'E':
-                       case 'e':       goto yy572;
+                       case 'e':       goto yy567;
                        default:        goto yy62;
                        }
-yy562:
+yy558:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
                        case 'R':
-                       case 'r':       goto yy573;
+                       case 'r':       goto yy568;
                        default:        goto yy62;
                        }
-yy563:
+yy559:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
                        case 'T':
-                       case 't':       goto yy574;
+                       case 't':       goto yy569;
                        default:        goto yy62;
                        }
-yy564:
+yy560:
                        yyaccept = 73;
                        yych = *(mrk = ++cur);
                        switch (yych) {
@@ -9032,15 +8883,15 @@ yy564:
                        case '|':
                        case '}':
                        case '~':
-                       case 0x7F:      goto yy565;
+                       case 0x7F:      goto yy561;
                        case '\\':      goto yy147;
                        default:        goto yy61;
                        }
-yy565:
+yy561:
 #line 241 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_TO_OBJECT); goto start; }
-#line 9043 "src/parser_scan.c"
-yy566:
+#line 8894 "src/parser_scan.c"
+yy562:
                        yyaccept = 74;
                        yych = *(mrk = ++cur);
                        switch (yych) {
@@ -9107,127 +8958,52 @@ yy566:
                        case '|':
                        case '}':
                        case '~':
-                       case 0x7F:      goto yy567;
+                       case 0x7F:      goto yy563;
                        case '\\':      goto yy147;
                        default:        goto yy61;
                        }
-yy567:
+yy563:
 #line 243 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_TO_STRING); goto start; }
-#line 9118 "src/parser_scan.c"
-yy568:
+#line 8969 "src/parser_scan.c"
+yy564:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
-                       case 't':       goto yy576;
+                       case 't':       goto yy571;
                        default:        goto yy62;
                        }
-yy569:
+yy565:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
-                       case 'o':       goto yy577;
+                       case 'o':       goto yy572;
                        default:        goto yy62;
                        }
-yy570:
+yy566:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
-                       case 't':       goto yy578;
+                       case 't':       goto yy573;
                        default:        goto yy62;
                        }
-yy571:
-                       yyaccept = 3;
-                       mrk = ++cur;
-                       if (lim <= cur) CHECKEOF();;
-                       yych = *cur;
-                       switch (yych) {
-                       case 0x00:
-                       case 0x01:
-                       case 0x02:
-                       case 0x03:
-                       case 0x04:
-                       case 0x05:
-                       case 0x06:
-                       case 0x07:
-                       case 0x08:
-                       case '\t':
-                       case '\n':
-                       case '\v':
-                       case '\f':
-                       case '\r':
-                       case 0x0E:
-                       case 0x0F:
-                       case 0x10:
-                       case 0x11:
-                       case 0x12:
-                       case 0x13:
-                       case 0x14:
-                       case 0x15:
-                       case 0x16:
-                       case 0x17:
-                       case 0x18:
-                       case 0x19:
-                       case 0x1A:
-                       case 0x1B:
-                       case 0x1C:
-                       case 0x1D:
-                       case 0x1E:
-                       case 0x1F:
-                       case ' ':
-                       case '!':
-                       case '"':
-                       case '#':
-                       case '$':
-                       case '%':
-                       case '&':
-                       case '\'':
-                       case '(':
-                       case ')':
-                       case '*':
-                       case '+':
-                       case ',':
-                       case '-':
-                       case '.':
-                       case '/':
-                       case ':':
-                       case ';':
-                       case '<':
-                       case '=':
-                       case '>':
-                       case '?':
-                       case '@':
-                       case '[':
-                       case ']':
-                       case '^':
-                       case '`':
-                       case '{':
-                       case '|':
-                       case '}':
-                       case '~':
-                       case 0x7F:      goto yy55;
-                       case '\\':      goto yy147;
-                       case 'c':       goto yy580;
-                       case 'o':       goto yy555;
-                       default:        goto yy529;
-                       }
-yy572:
+yy567:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
                        case 'X':
-                       case 'x':       goto yy581;
+                       case 'x':       goto yy575;
                        default:        goto yy62;
                        }
-yy573:
+yy568:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
                        case 'T':
-                       case 't':       goto yy582;
+                       case 't':       goto yy576;
                        default:        goto yy62;
                        }
-yy574:
+yy569:
                        yyaccept = 75;
                        yych = *(mrk = ++cur);
                        switch (yych) {
@@ -9294,29 +9070,29 @@ yy574:
                        case '|':
                        case '}':
                        case '~':
-                       case 0x7F:      goto yy575;
+                       case 0x7F:      goto yy570;
                        case '\\':      goto yy147;
                        default:        goto yy61;
                        }
-yy575:
+yy570:
 #line 224 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_PRE_ASSERT); goto start; }
-#line 9305 "src/parser_scan.c"
-yy576:
+#line 9081 "src/parser_scan.c"
+yy571:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
-                       case 'e':       goto yy584;
+                       case 'e':       goto yy578;
                        default:        goto yy62;
                        }
-yy577:
+yy572:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
-                       case 'n':       goto yy585;
+                       case 'n':       goto yy579;
                        default:        goto yy62;
                        }
-yy578:
+yy573:
                        yyaccept = 76;
                        yych = *(mrk = ++cur);
                        switch (yych) {
@@ -9383,98 +9159,23 @@ yy578:
                        case '|':
                        case '}':
                        case '~':
-                       case 0x7F:      goto yy579;
+                       case 0x7F:      goto yy574;
                        case '\\':      goto yy147;
                        default:        goto yy61;
                        }
-yy579:
+yy574:
 #line 176 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_CPP_RESTRICT); goto start; }
-#line 9394 "src/parser_scan.c"
-yy580:
-                       yyaccept = 3;
-                       mrk = ++cur;
-                       if (lim <= cur) CHECKEOF();;
-                       yych = *cur;
-                       switch (yych) {
-                       case 0x00:
-                       case 0x01:
-                       case 0x02:
-                       case 0x03:
-                       case 0x04:
-                       case 0x05:
-                       case 0x06:
-                       case 0x07:
-                       case 0x08:
-                       case '\t':
-                       case '\n':
-                       case '\v':
-                       case '\f':
-                       case '\r':
-                       case 0x0E:
-                       case 0x0F:
-                       case 0x10:
-                       case 0x11:
-                       case 0x12:
-                       case 0x13:
-                       case 0x14:
-                       case 0x15:
-                       case 0x16:
-                       case 0x17:
-                       case 0x18:
-                       case 0x19:
-                       case 0x1A:
-                       case 0x1B:
-                       case 0x1C:
-                       case 0x1D:
-                       case 0x1E:
-                       case 0x1F:
-                       case ' ':
-                       case '!':
-                       case '"':
-                       case '#':
-                       case '$':
-                       case '%':
-                       case '&':
-                       case '\'':
-                       case '(':
-                       case ')':
-                       case '*':
-                       case '+':
-                       case ',':
-                       case '-':
-                       case '.':
-                       case '/':
-                       case ':':
-                       case ';':
-                       case '<':
-                       case '=':
-                       case '>':
-                       case '?':
-                       case '@':
-                       case '[':
-                       case ']':
-                       case '^':
-                       case '`':
-                       case '{':
-                       case '|':
-                       case '}':
-                       case '~':
-                       case 0x7F:      goto yy55;
-                       case '\\':      goto yy147;
-                       case 'e':       goto yy586;
-                       case 'o':       goto yy555;
-                       default:        goto yy529;
-                       }
-yy581:
+#line 9170 "src/parser_scan.c"
+yy575:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
                        case 'T':
-                       case 't':       goto yy588;
+                       case 't':       goto yy580;
                        default:        goto yy62;
                        }
-yy582:
+yy576:
                        yyaccept = 77;
                        yych = *(mrk = ++cur);
                        switch (yych) {
@@ -9541,108 +9242,30 @@ yy582:
                        case '|':
                        case '}':
                        case '~':
-                       case 0x7F:      goto yy583;
+                       case 0x7F:      goto yy577;
                        case '\\':      goto yy147;
                        default:        goto yy61;
                        }
-yy583:
+yy577:
 #line 225 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_POST_ASSERT); goto start; }
-#line 9552 "src/parser_scan.c"
-yy584:
+#line 9253 "src/parser_scan.c"
+yy578:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
-                       case '_':       goto yy590;
+                       case '_':       goto yy582;
                        default:        goto yy62;
                        }
-yy585:
+yy579:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
-                       case '_':       goto yy591;
+                       case '_':       goto yy583;
                        default:        goto yy62;
                        }
-yy586:
+yy580:
                        yyaccept = 78;
-                       mrk = ++cur;
-                       if (lim <= cur) CHECKEOF();;
-                       yych = *cur;
-                       switch (yych) {
-                       case 0x00:
-                       case 0x01:
-                       case 0x02:
-                       case 0x03:
-                       case 0x04:
-                       case 0x05:
-                       case 0x06:
-                       case 0x07:
-                       case 0x08:
-                       case '\t':
-                       case '\n':
-                       case '\v':
-                       case '\f':
-                       case '\r':
-                       case 0x0E:
-                       case 0x0F:
-                       case 0x10:
-                       case 0x11:
-                       case 0x12:
-                       case 0x13:
-                       case 0x14:
-                       case 0x15:
-                       case 0x16:
-                       case 0x17:
-                       case 0x18:
-                       case 0x19:
-                       case 0x1A:
-                       case 0x1B:
-                       case 0x1C:
-                       case 0x1D:
-                       case 0x1E:
-                       case 0x1F:
-                       case ' ':
-                       case '!':
-                       case '"':
-                       case '#':
-                       case '$':
-                       case '%':
-                       case '&':
-                       case '\'':
-                       case '(':
-                       case ')':
-                       case '*':
-                       case '+':
-                       case ',':
-                       case '-':
-                       case '.':
-                       case '/':
-                       case ':':
-                       case ';':
-                       case '<':
-                       case '=':
-                       case '>':
-                       case '?':
-                       case '@':
-                       case '[':
-                       case ']':
-                       case '^':
-                       case '`':
-                       case '{':
-                       case '|':
-                       case '}':
-                       case '~':
-                       case 0x7F:      goto yy587;
-                       case '\\':      goto yy147;
-                       case 'o':       goto yy555;
-                       default:        goto yy529;
-                       }
-yy587:
-#line 174 "src/parser_scan.re"
-                       { NEWTOKEN(PSI_T_PRAGMA_ONCE); goto start; }
-#line 9644 "src/parser_scan.c"
-yy588:
-                       yyaccept = 79;
                        yych = *(mrk = ++cur);
                        switch (yych) {
                        case 0x00:
@@ -9708,40 +9331,40 @@ yy588:
                        case '|':
                        case '}':
                        case '~':
-                       case 0x7F:      goto yy589;
+                       case 0x7F:      goto yy581;
                        case '\\':      goto yy147;
                        default:        goto yy61;
                        }
-yy589:
+yy581:
 #line 209 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_INCLUDE_NEXT); goto start; }
-#line 9719 "src/parser_scan.c"
-yy590:
+#line 9342 "src/parser_scan.c"
+yy582:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
-                       case '_':       goto yy592;
+                       case '_':       goto yy584;
                        default:        goto yy62;
                        }
-yy591:
+yy583:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
-                       case '_':       goto yy593;
+                       case '_':       goto yy585;
                        default:        goto yy62;
                        }
-yy592:
+yy584:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
                        switch (yych) {
                        case '\t':
                        case '\f':
-                       case ' ':       goto yy595;
-                       case '(':       goto yy597;
+                       case ' ':       goto yy587;
+                       case '(':       goto yy589;
                        default:        goto yy62;
                        }
-yy593:
-                       yyaccept = 80;
+yy585:
+                       yyaccept = 79;
                        yych = *(mrk = ++cur);
                        switch (yych) {
                        case 0x00:
@@ -9807,65 +9430,65 @@ yy593:
                        case '|':
                        case '}':
                        case '~':
-                       case 0x7F:      goto yy594;
+                       case 0x7F:      goto yy586;
                        case '\\':      goto yy147;
                        default:        goto yy61;
                        }
-yy594:
+yy586:
 #line 177 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_CPP_EXTENSION); goto start; }
-#line 9818 "src/parser_scan.c"
-yy595:
+#line 9441 "src/parser_scan.c"
+yy587:
                        ++cur;
                        if ((lim - cur) < 2) CHECKEOF();;
                        yych = *cur;
                        switch (yych) {
                        case '\t':
                        case '\f':
-                       case ' ':       goto yy595;
-                       case '(':       goto yy597;
+                       case ' ':       goto yy587;
+                       case '(':       goto yy589;
                        default:        goto yy114;
                        }
-yy597:
+yy589:
                        yych = *++cur;
                        switch (yych) {
-                       case '(':       goto yy598;
+                       case '(':       goto yy590;
                        default:        goto yy114;
                        }
-yy598:
+yy590:
                        ++cur;
 #line 251 "src/parser_scan.re"
                        { parens = 2; goto cpp_attribute; }
-#line 9840 "src/parser_scan.c"
+#line 9463 "src/parser_scan.c"
                }
 #line 257 "src/parser_scan.re"
 
 
        character: ;
                
-#line 9847 "src/parser_scan.c"
+#line 9470 "src/parser_scan.c"
                {
                        unsigned char yych;
                        if (lim <= cur) CHECKEOF();;
                        yych = *cur;
                        switch (yych) {
                        case '\n':
-                       case '\r':      goto yy604;
-                       case '\'':      goto yy606;
-                       case '\\':      goto yy608;
-                       default:        goto yy602;
+                       case '\r':      goto yy596;
+                       case '\'':      goto yy598;
+                       case '\\':      goto yy600;
+                       default:        goto yy594;
                        }
-yy602:
+yy594:
                        ++cur;
 #line 275 "src/parser_scan.re"
                        { escaped = false; goto character; }
-#line 9863 "src/parser_scan.c"
-yy604:
+#line 9486 "src/parser_scan.c"
+yy596:
                        ++cur;
 #line 262 "src/parser_scan.re"
                        { NEWLINE(); goto character; }
-#line 9868 "src/parser_scan.c"
-yy606:
+#line 9491 "src/parser_scan.c"
+yy598:
                        ++cur;
 #line 264 "src/parser_scan.re"
                        {
@@ -9879,41 +9502,41 @@ yy606:
                        token->flags = char_width;
                        goto start;
                }
-#line 9883 "src/parser_scan.c"
-yy608:
+#line 9506 "src/parser_scan.c"
+yy600:
                        ++cur;
 #line 263 "src/parser_scan.re"
                        { escaped = !escaped;  goto character; }
-#line 9888 "src/parser_scan.c"
+#line 9511 "src/parser_scan.c"
                }
 #line 277 "src/parser_scan.re"
 
 
        string: ;
                
-#line 9895 "src/parser_scan.c"
+#line 9518 "src/parser_scan.c"
                {
                        unsigned char yych;
                        if (lim <= cur) CHECKEOF();;
                        yych = *cur;
                        switch (yych) {
                        case '\n':
-                       case '\r':      goto yy614;
-                       case '"':       goto yy616;
-                       case '\\':      goto yy618;
-                       default:        goto yy612;
+                       case '\r':      goto yy606;
+                       case '"':       goto yy608;
+                       case '\\':      goto yy610;
+                       default:        goto yy604;
                        }
-yy612:
+yy604:
                        ++cur;
 #line 295 "src/parser_scan.re"
                        { escaped = false; goto string; }
-#line 9911 "src/parser_scan.c"
-yy614:
+#line 9534 "src/parser_scan.c"
+yy606:
                        ++cur;
 #line 282 "src/parser_scan.re"
                        { NEWLINE(); goto string; }
-#line 9916 "src/parser_scan.c"
-yy616:
+#line 9539 "src/parser_scan.c"
+yy608:
                        ++cur;
 #line 284 "src/parser_scan.re"
                        {
@@ -9927,77 +9550,77 @@ yy616:
                        token->flags = char_width;
                        goto start;
                }
-#line 9931 "src/parser_scan.c"
-yy618:
+#line 9554 "src/parser_scan.c"
+yy610:
                        ++cur;
 #line 283 "src/parser_scan.re"
                        { escaped = !escaped; goto string; }
-#line 9936 "src/parser_scan.c"
+#line 9559 "src/parser_scan.c"
                }
 #line 297 "src/parser_scan.re"
 
 
        comment: ;
                
-#line 9943 "src/parser_scan.c"
+#line 9566 "src/parser_scan.c"
                {
                        unsigned char yych;
                        if ((lim - cur) < 2) CHECKEOF();;
                        yych = *cur;
                        switch (yych) {
                        case '\n':
-                       case '\r':      goto yy624;
-                       case '*':       goto yy626;
-                       default:        goto yy622;
+                       case '\r':      goto yy616;
+                       case '*':       goto yy618;
+                       default:        goto yy614;
                        }
-yy622:
+yy614:
                        ++cur;
-yy623:
+yy615:
 #line 304 "src/parser_scan.re"
                        { goto comment; }
-#line 9959 "src/parser_scan.c"
-yy624:
+#line 9582 "src/parser_scan.c"
+yy616:
                        ++cur;
 #line 302 "src/parser_scan.re"
                        { NEWLINE(); goto comment; }
-#line 9964 "src/parser_scan.c"
-yy626:
+#line 9587 "src/parser_scan.c"
+yy618:
                        yych = *++cur;
                        switch (yych) {
-                       case '/':       goto yy627;
-                       default:        goto yy623;
+                       case '/':       goto yy619;
+                       default:        goto yy615;
                        }
-yy627:
+yy619:
                        ++cur;
 #line 303 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_COMMENT); goto start; }
-#line 9975 "src/parser_scan.c"
+#line 9598 "src/parser_scan.c"
                }
 #line 306 "src/parser_scan.re"
 
 
        comment_sl: ;
                
-#line 9982 "src/parser_scan.c"
+#line 9605 "src/parser_scan.c"
                {
                        unsigned char yych;
                        if (lim <= cur) CHECKEOF();;
                        yych = *cur;
                        switch (yych) {
                        case '\n':
-                       case '\r':      goto yy633;
-                       default:        goto yy631;
+                       case '\r':      goto yy625;
+                       default:        goto yy623;
                        }
-yy631:
+yy623:
                        ++cur;
 #line 312 "src/parser_scan.re"
                        { goto comment_sl; }
-#line 9996 "src/parser_scan.c"
-yy633:
+#line 9619 "src/parser_scan.c"
+yy625:
                        ++cur;
 #line 311 "src/parser_scan.re"
                        { NEWTOKEN(PSI_T_COMMENT); tok = cur - 1; NEWTOKEN(PSI_T_EOL); NEWLINE(); goto start; }
-#line 10001 "src/parser_scan.c"
+#line 9624 "src/parser_scan.c"
                }
 #line 314 "src/parser_scan.re"
 
@@ -10005,38 +9628,38 @@ yy633:
        cpp_attribute: ;
 
                
-#line 10009 "src/parser_scan.c"
+#line 9632 "src/parser_scan.c"
                {
                        unsigned char yych;
                        if (lim <= cur) CHECKEOF();;
                        yych = *cur;
                        switch (yych) {
                        case '\n':
-                       case '\r':      goto yy639;
-                       case '(':       goto yy641;
-                       case ')':       goto yy643;
-                       default:        goto yy637;
+                       case '\r':      goto yy631;
+                       case '(':       goto yy633;
+                       case ')':       goto yy635;
+                       default:        goto yy629;
                        }
-yy637:
+yy629:
                        ++cur;
 #line 323 "src/parser_scan.re"
                        { goto cpp_attribute; }
-#line 10025 "src/parser_scan.c"
-yy639:
+#line 9648 "src/parser_scan.c"
+yy631:
                        ++cur;
 #line 322 "src/parser_scan.re"
                        { NEWLINE(); goto cpp_attribute; }
-#line 10030 "src/parser_scan.c"
-yy641:
+#line 9653 "src/parser_scan.c"
+yy633:
                        ++cur;
 #line 320 "src/parser_scan.re"
                        { ++parens; goto cpp_attribute; }
-#line 10035 "src/parser_scan.c"
-yy643:
+#line 9658 "src/parser_scan.c"
+yy635:
                        ++cur;
 #line 321 "src/parser_scan.re"
                        { if (parens == 1) { NEWTOKEN(PSI_T_CPP_ATTRIBUTE); goto start; } else { --parens; goto cpp_attribute; } }
-#line 10040 "src/parser_scan.c"
+#line 9663 "src/parser_scan.c"
                }
 #line 325 "src/parser_scan.re"