1 /* Generated by re2c 1.0.3 on Mon Apr 16 10:10:28 2018 */
2 #line 1 "src/parser.re"
3 /*******************************************************************************
4 Copyright (c) 2016, Michael Wallner <mike@php.net>.
7 Redistribution and use in source and binary forms, with or without
8 modification, are permitted provided that the following conditions are met:
10 * Redistributions of source code must retain the above copyright notice,
11 this list of conditions and the following disclaimer.
12 * Redistributions in binary form must reproduce the above copyright
13 notice, this list of conditions and the following disclaimer in the
14 documentation and/or other materials provided with the distribution.
16 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
20 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 *******************************************************************************/
28 #include "php_psi_stdinc.h"
38 # define YYMAXFILL 256
41 struct psi_parser
*psi_parser_init(struct psi_parser
*P
, psi_error_cb error
, unsigned flags
)
44 P
= malloc(sizeof(*P
));
46 memset(P
, 0, sizeof(*P
));
48 psi_data_ctor_with_dtors(PSI_DATA(P
), error
, flags
);
50 P
->preproc
= psi_cpp_init(P
);
52 psi_cpp_load_defaults(P
->preproc
);
57 struct psi_parser_input
*psi_parser_open_file(struct psi_parser
*P
, const char *filename
, bool report_errors
)
61 struct psi_parser_input
*fb
;
63 if (stat(filename
, &sb
)) {
65 P
->error(PSI_DATA(P
), NULL
, PSI_WARNING
,
66 "Could not stat '%s': %s",
67 filename
, strerror(errno
));
72 if (!(fb
= malloc(sizeof(*fb
) + strlen(filename
) + 1 + sb
.st_size
+ YYMAXFILL
))) {
74 P
->error(PSI_DATA(P
), NULL
, PSI_WARNING
,
75 "Could not allocate %zu bytes for reading '%s': %s",
76 sb
.st_size
+ YYMAXFILL
, filename
, strerror(errno
));
81 if (!(fp
= fopen(filename
, "r"))) {
84 P
->error(PSI_DATA(P
), NULL
, PSI_WARNING
,
85 "Could not open '%s' for reading: %s",
86 filename
, strerror(errno
));
91 if (sb
.st_size
!= fread(fb
->buffer
, 1, sb
.st_size
, fp
)) {
95 P
->error(PSI_DATA(P
), NULL
, PSI_WARNING
,
96 "Could not read %zu bytes from '%s': %s",
97 sb
.st_size
+ YYMAXFILL
, filename
, strerror(errno
));
102 memset(fb
->buffer
+ sb
.st_size
, 0, YYMAXFILL
);
103 fb
->length
= sb
.st_size
;
104 fb
->file
= &fb
->buffer
[sb
.st_size
+ YYMAXFILL
];
105 memcpy(fb
->file
, filename
, strlen(filename
) + 1);
110 struct psi_parser_input
*psi_parser_open_string(struct psi_parser
*P
, const char *string
, size_t length
)
112 struct psi_parser_input
*sb
;
114 if (!(sb
= malloc(sizeof(*sb
) + sizeof("<stdin>") + length
+ YYMAXFILL
))) {
115 P
->error(PSI_DATA(P
), NULL
, PSI_WARNING
,
116 "Could not allocate %zu bytes: %s",
117 length
+ YYMAXFILL
, strerror(errno
));
121 memcpy(sb
->buffer
, string
, length
);
122 memset(sb
->buffer
+ length
, 0, YYMAXFILL
);
125 sb
->file
= &sb
->buffer
[length
+ YYMAXFILL
];
126 memcpy(sb
->file
, "<stdin>", sizeof("<stdin>"));
132 static void psi_parser_register_constants(struct psi_parser
*P
)
137 ZEND_HASH_FOREACH_STR_KEY_VAL(&P
->cpp
.defs
, key
, val
)
139 struct psi_impl_def_val
*iv
;
140 struct psi_const_type
*ct
;
148 switch (Z_TYPE_P(val
)) {
153 tmp
.zend
.bval
= Z_TYPE_P(val
) == IS_TRUE
;
158 tmp
.zend
.lval
= Z_LVAL_P(val
);
163 tmp
.dval
= Z_DVAL_P(val
);
168 str
= zval_get_string(val
);
169 tmp
.zend
.str
= zend_string_dup(str
, 1);
170 zend_string_release(str
);
174 iv
= psi_impl_def_val_init(ctt
, NULL
);
176 ct
= psi_const_type_init(ctt
, ctn
);
177 c
= psi_const_init(ct
, key
->val
, iv
);
179 P
->consts
= psi_plist_init((psi_plist_dtor
) psi_const_free
);
181 P
->consts
= psi_plist_add(P
->consts
, &c
);
183 ZEND_HASH_FOREACH_END();
187 struct psi_plist
*psi_parser_preprocess(struct psi_parser
*P
, struct psi_plist
**tokens
)
189 if (psi_cpp_process(P
->preproc
, tokens
)) {
195 bool psi_parser_process(struct psi_parser
*P
, struct psi_plist
*tokens
, size_t *processed
)
197 if (psi_plist_count(tokens
)) {
198 return 0 == psi_parser_proc_parse(P
, tokens
, processed
);
203 void psi_parser_postprocess(struct psi_parser
*P
)
207 struct psi_validate_scope scope
= {0};
209 psi_validate_scope_ctor(&scope
);
210 scope
.defs
= &P
->preproc
->defs
;
213 P
->flags
|= PSI_SILENT
;
215 /* register const macros */
216 ZEND_HASH_FOREACH_STR_KEY_PTR(&P
->preproc
->defs
, name
, scope
.macro
)
218 if (scope
.macro
->sig
) {
219 } else if (scope
.macro
->exp
) {
220 if (psi_num_exp_validate(PSI_DATA(P
), scope
.macro
->exp
, &scope
)) {
221 struct psi_impl_type
*type
;
222 struct psi_impl_def_val
*def
;
223 struct psi_const
*cnst
;
224 struct psi_num_exp
*num
;
225 char *name_str
= malloc(name
->len
+ sizeof("psi\\"));
227 strcat(strcpy(name_str
, "psi\\"), name
->val
);
228 num
= psi_num_exp_copy(scope
.macro
->exp
);
229 def
= psi_impl_def_val_init(PSI_T_NUMBER
, num
);
230 type
= psi_impl_type_init(PSI_T_NUMBER
, "<eval number>");
231 cnst
= psi_const_init(type
, name_str
, def
);
232 P
->consts
= psi_plist_add(P
->consts
, &cnst
);
236 if (psi_plist_count(scope
.macro
->tokens
) == 1) {
239 if (psi_plist_get(scope
.macro
->tokens
, 0, &t
)) {
240 if (t
->type
== PSI_T_QUOTED_STRING
) {
241 struct psi_impl_type
*type
;
242 struct psi_impl_def_val
*def
;
243 struct psi_const
*cnst
;
244 char *name_str
= malloc(name
->len
+ sizeof("psi\\"));
246 strcat(strcpy(name_str
, "psi\\"), name
->val
);
247 type
= psi_impl_type_init(PSI_T_STRING
, "string");
248 def
= psi_impl_def_val_init(PSI_T_QUOTED_STRING
, t
->text
);
249 cnst
= psi_const_init(type
, name_str
, def
);
250 P
->consts
= psi_plist_add(P
->consts
, &cnst
);
257 ZEND_HASH_FOREACH_END();
261 psi_validate_scope_dtor(&scope
);
264 bool psi_parser_parse(struct psi_parser
*P
, struct psi_parser_input
*I
)
266 struct psi_plist
*scanned
, *preproc
;
267 size_t processed
= 0;
269 if (!(scanned
= psi_parser_scan(P
, I
))) {
273 if (!(preproc
= psi_parser_preprocess(P
, &scanned
))) {
274 psi_plist_free(scanned
);
278 if (!psi_parser_process(P
, preproc
, &processed
)) {
279 psi_plist_free(preproc
);
283 psi_parser_postprocess(P
);
285 psi_plist_free(preproc
);
289 void psi_parser_dtor(struct psi_parser
*P
)
291 psi_cpp_free(&P
->preproc
);
292 psi_data_dtor(PSI_DATA(P
));
294 memset(P
, 0, sizeof(*P
));
297 void psi_parser_free(struct psi_parser
**P
)
310 #define NEWTOKEN(t) \
311 token = psi_token_init(t, tok, cur - tok, tok - eol + 1, I->lines, I->file); \
312 tokens = psi_plist_add(tokens, &token); \
313 if (P->flags & PSI_DEBUG) { \
314 fprintf(stderr, "PSI< "); \
315 psi_token_dump(2, token); \
323 struct psi_plist
*psi_parser_scan(struct psi_parser
*P
, struct psi_parser_input
*I
)
325 struct psi_plist
*tokens
;
326 struct psi_token
*token
;
327 const char *tok
, *cur
, *lim
, *mrk
, *eol
, *ctxmrk
;
332 PSI_DEBUG_PRINT(P
, "PSI: scanning %s\n", I
->file
);
334 tok
= mrk
= eol
= cur
= I
->buffer
;
335 lim
= I
->buffer
+ I
->length
;
337 tokens
= psi_plist_init((psi_plist_dtor
) psi_token_free
);
347 #line 348 "src/parser.c"
350 unsigned int yyaccept
= 0;
351 if ((lim
- cur
) < 15) if (cur
>= lim
) goto done
;;
396 case '\'': goto yy20
;
447 case '\\': goto yy77
;
465 case '}': goto yy100
;
466 case '~': goto yy102
;
472 #line 513 "src/parser.re"
473 { NEWTOKEN(-2); goto error
; }
474 #line 475 "src/parser.c"
477 if (lim
<= cur
) if (cur
>= lim
) goto done
;;
486 #line 512 "src/parser.re"
487 { NEWTOKEN(PSI_T_WHITESPACE
); goto start
; }
488 #line 489 "src/parser.c"
491 #line 511 "src/parser.re"
492 { NEWTOKEN(PSI_T_EOL
); NEWLINE(); goto start
; }
493 #line 494 "src/parser.c"
497 case '=': goto yy104
;
501 #line 414 "src/parser.re"
502 { NEWTOKEN(PSI_T_NOT
); goto start
; }
503 #line 504 "src/parser.c"
506 #line 387 "src/parser.re"
507 { escaped
= false; tok
+= 1; goto string
; }
508 #line 509 "src/parser.c"
512 case '#': goto yy106
;
516 #line 397 "src/parser.re"
517 { NEWTOKEN(PSI_T_HASH
); goto start
; }
518 #line 519 "src/parser.c"
591 #line 415 "src/parser.re"
592 { NEWTOKEN(PSI_T_MODULO
); goto start
; }
593 #line 594 "src/parser.c"
597 case '&': goto yy111
;
601 #line 416 "src/parser.re"
602 { NEWTOKEN(PSI_T_AMPERSAND
); goto start
; }
603 #line 604 "src/parser.c"
606 #line 386 "src/parser.re"
607 { escaped
= false; tok
+= 1; goto character
; }
608 #line 609 "src/parser.c"
611 #line 398 "src/parser.re"
612 { NEWTOKEN(PSI_T_LPAREN
); goto start
; }
613 #line 614 "src/parser.c"
616 #line 399 "src/parser.re"
617 { NEWTOKEN(PSI_T_RPAREN
); goto start
; }
618 #line 619 "src/parser.c"
621 #line 412 "src/parser.re"
622 { NEWTOKEN(PSI_T_ASTERISK
); goto start
; }
623 #line 624 "src/parser.c"
626 yych
= *(mrk
= ++cur
);
628 case '.': goto yy113
;
642 #line 417 "src/parser.re"
643 { NEWTOKEN(PSI_T_PLUS
); goto start
; }
644 #line 645 "src/parser.c"
647 #line 401 "src/parser.re"
648 { NEWTOKEN(PSI_T_COMMA
); goto start
; }
649 #line 650 "src/parser.c"
652 yych
= *(mrk
= ++cur
);
654 case '.': goto yy113
;
668 #line 418 "src/parser.re"
669 { NEWTOKEN(PSI_T_MINUS
); goto start
; }
670 #line 671 "src/parser.c"
673 yych
= *(mrk
= ++cur
);
675 case '.': goto yy115
;
685 case '9': goto yy116
;
689 #line 429 "src/parser.re"
690 { NEWTOKEN(PSI_T_PERIOD
); goto start
; }
691 #line 692 "src/parser.c"
695 case '*': goto yy119
;
696 case '/': goto yy121
;
700 #line 419 "src/parser.re"
701 { NEWTOKEN(PSI_T_SLASH
); goto start
; }
702 #line 703 "src/parser.c"
705 yych
= *(mrk
= ++cur
);
707 case '.': goto yy123
;
709 case 'e': goto yy127
;
711 case 'x': goto yy132
;
715 #line 373 "src/parser.re"
716 { NEWTOKEN(PSI_T_NUMBER
); token
->flags
= PSI_NUMBER_INT
; goto start
; }
717 #line 718 "src/parser.c"
721 if ((lim
- cur
) < 3) if (cur
>= lim
) goto done
;;
724 case '.': goto yy123
;
736 case 'e': goto yy127
;
738 case 'l': goto yy128
;
740 case 'u': goto yy130
;
745 #line 402 "src/parser.re"
746 { NEWTOKEN(PSI_T_COLON
); goto start
; }
747 #line 748 "src/parser.c"
750 #line 400 "src/parser.re"
751 { NEWTOKEN(PSI_T_EOS
); goto start
; }
752 #line 753 "src/parser.c"
755 yych
= *(mrk
= ++cur
);
822 case 'z': goto yy133
;
823 case '<': goto yy135
;
824 case '=': goto yy137
;
828 #line 427 "src/parser.re"
829 { NEWTOKEN(PSI_T_LCHEVR
); goto start
; }
830 #line 831 "src/parser.c"
834 case '=': goto yy139
;
838 #line 411 "src/parser.re"
839 { NEWTOKEN(PSI_T_EQUALS
); goto start
; }
840 #line 841 "src/parser.c"
844 case '=': goto yy141
;
845 case '>': goto yy143
;
849 #line 428 "src/parser.re"
850 { NEWTOKEN(PSI_T_RCHEVR
); goto start
; }
851 #line 852 "src/parser.c"
854 #line 431 "src/parser.re"
855 { NEWTOKEN(PSI_T_IIF
); goto start
; }
856 #line 857 "src/parser.c"
859 yych
= *(mrk
= ++cur
);
862 case 'r': goto yy145
;
864 case 's': goto yy146
;
868 #line 506 "src/parser.re"
869 { NEWTOKEN(PSI_T_NAME
); goto start
; }
870 #line 871 "src/parser.c"
873 yych
= *(mrk
= ++cur
);
876 case 'o': goto yy149
;
881 yych
= *(mrk
= ++cur
);
884 case 'a': goto yy150
;
886 case 'o': goto yy151
;
891 yych
= *(mrk
= ++cur
);
894 case 'e': goto yy152
;
899 yych
= *(mrk
= ++cur
);
902 case 'l': goto yy153
;
904 case 'n': goto yy154
;
906 case 'r': goto yy155
;
911 yych
= *(mrk
= ++cur
);
914 case 'a': goto yy156
;
916 case 'l': goto yy157
;
918 case 'r': goto yy158
;
920 case 'u': goto yy159
;
926 if (lim
<= cur
) if (cur
>= lim
) goto done
;;
993 case 0x7F: goto yy55
;
994 case '\\': goto yy148
;
999 yych
= *(mrk
= ++cur
);
1002 case 'f': goto yy160
;
1004 case 'n': goto yy162
;
1009 yych
= *(mrk
= ++cur
);
1012 case '\'': goto yy163
;
1014 case 'e': goto yy165
;
1016 case 'i': goto yy166
;
1021 yych
= *(mrk
= ++cur
);
1024 case 'i': goto yy167
;
1029 yych
= *(mrk
= ++cur
);
1032 case 'u': goto yy168
;
1037 yych
= *(mrk
= ++cur
);
1040 case 'b': goto yy169
;
1045 yych
= *(mrk
= ++cur
);
1048 case 'a': goto yy170
;
1050 case 'o': goto yy171
;
1052 case 'r': goto yy172
;
1057 yych
= *(mrk
= ++cur
);
1060 case 'e': goto yy173
;
1065 yych
= *(mrk
= ++cur
);
1068 case 'e': goto yy174
;
1070 case 't': goto yy175
;
1075 yych
= *(mrk
= ++cur
);
1078 case 'e': goto yy176
;
1080 case 'o': goto yy177
;
1082 case 'r': goto yy178
;
1087 yych
= *(mrk
= ++cur
);
1090 case '\'': goto yy179
;
1092 case 'n': goto yy181
;
1097 yych
= *(mrk
= ++cur
);
1100 case 'a': goto yy182
;
1105 yych
= *(mrk
= ++cur
);
1108 case 'v': goto yy183
;
1113 #line 405 "src/parser.re"
1114 { NEWTOKEN(PSI_T_LBRACKET
); goto start
; }
1115 #line 1116 "src/parser.c"
1193 case 0x7F: goto yy78
;
1194 default: goto yy184
;
1197 #line 420 "src/parser.re"
1198 { NEWTOKEN(PSI_T_BSLASH
); goto start
; }
1199 #line 1200 "src/parser.c"
1202 #line 406 "src/parser.re"
1203 { NEWTOKEN(PSI_T_RBRACKET
); goto start
; }
1204 #line 1205 "src/parser.c"
1207 #line 422 "src/parser.re"
1208 { NEWTOKEN(PSI_T_CARET
); goto start
; }
1209 #line 1210 "src/parser.c"
1212 yych
= *(mrk
= ++cur
);
1214 case '_': goto yy187
;
1219 yych
= *(mrk
= ++cur
);
1221 case 'O': goto yy149
;
1222 case 'o': goto yy188
;
1227 yych
= *(mrk
= ++cur
);
1230 case 'a': goto yy150
;
1231 case 'O': goto yy151
;
1232 case 'h': goto yy189
;
1233 case 'o': goto yy190
;
1238 yych
= *(mrk
= ++cur
);
1241 case 'e': goto yy152
;
1242 case 'o': goto yy191
;
1247 yych
= *(mrk
= ++cur
);
1250 case 'l': goto yy153
;
1251 case 'N': goto yy154
;
1253 case 'r': goto yy155
;
1254 case 'n': goto yy192
;
1259 yych
= *(mrk
= ++cur
);
1262 case 'a': goto yy156
;
1263 case 'L': goto yy157
;
1265 case 'r': goto yy158
;
1267 case 'u': goto yy159
;
1268 case 'l': goto yy193
;
1273 yych
= *(mrk
= ++cur
);
1276 case 'f': goto yy160
;
1277 case 'N': goto yy162
;
1278 case 'n': goto yy194
;
1283 yych
= *(mrk
= ++cur
);
1286 case 'e': goto yy165
;
1287 case 'I': goto yy166
;
1288 case 'i': goto yy195
;
1289 case 'o': goto yy196
;
1294 yych
= *(mrk
= ++cur
);
1297 case 'a': goto yy170
;
1299 case 'o': goto yy171
;
1300 case 'R': goto yy172
;
1301 case 'r': goto yy197
;
1306 yych
= *(mrk
= ++cur
);
1309 case 'e': goto yy174
;
1310 case 'T': goto yy175
;
1311 case 'h': goto yy198
;
1312 case 'i': goto yy199
;
1313 case 't': goto yy200
;
1318 yych
= *(mrk
= ++cur
);
1321 case 'e': goto yy176
;
1323 case 'o': goto yy177
;
1325 case 'r': goto yy178
;
1326 case 'y': goto yy201
;
1331 yych
= *(mrk
= ++cur
);
1334 case '\'': goto yy202
;
1335 case '8': goto yy204
;
1336 case 'N': goto yy181
;
1337 case 'n': goto yy205
;
1342 yych
= *(mrk
= ++cur
);
1344 case 'o': goto yy206
;
1349 #line 403 "src/parser.re"
1350 { NEWTOKEN(PSI_T_LBRACE
); goto start
; }
1351 #line 1352 "src/parser.c"
1355 case '|': goto yy207
;
1359 #line 421 "src/parser.re"
1360 { NEWTOKEN(PSI_T_PIPE
); goto start
; }
1361 #line 1362 "src/parser.c"
1364 #line 404 "src/parser.re"
1365 { NEWTOKEN(PSI_T_RBRACE
); goto start
; }
1366 #line 1367 "src/parser.c"
1369 #line 413 "src/parser.re"
1370 { NEWTOKEN(PSI_T_TILDE
); goto start
; }
1371 #line 1372 "src/parser.c"
1374 #line 407 "src/parser.re"
1375 { NEWTOKEN(PSI_T_CMP_NE
); goto start
; }
1376 #line 1377 "src/parser.c"
1379 #line 396 "src/parser.re"
1380 { NEWTOKEN(PSI_T_CPP_PASTE
); goto start
; }
1381 #line 1382 "src/parser.c"
1384 if (lim
<= cur
) if (cur
>= lim
) goto done
;;
1451 case 0x7F: goto yy110
;
1452 default: goto yy108
;
1455 #line 508 "src/parser.re"
1456 { NEWTOKEN(PSI_T_DOLLAR_NAME
); goto start
; }
1457 #line 1458 "src/parser.c"
1460 #line 409 "src/parser.re"
1461 { NEWTOKEN(PSI_T_AND
); goto start
; }
1462 #line 1463 "src/parser.c"
1475 case '9': goto yy116
;
1476 default: goto yy114
;
1491 case 10: goto yy186
;
1492 case 11: goto yy242
;
1493 case 12: goto yy244
;
1494 case 13: goto yy253
;
1495 case 14: goto yy273
;
1496 case 15: goto yy305
;
1497 case 16: goto yy307
;
1498 case 17: goto yy313
;
1499 case 18: goto yy321
;
1500 case 19: goto yy333
;
1501 case 20: goto yy341
;
1502 case 21: goto yy345
;
1503 case 22: goto yy352
;
1504 case 23: goto yy354
;
1505 case 24: goto yy358
;
1506 case 25: goto yy361
;
1507 case 26: goto yy363
;
1508 case 27: goto yy373
;
1509 case 28: goto yy376
;
1510 case 29: goto yy383
;
1511 case 30: goto yy386
;
1512 case 31: goto yy388
;
1513 case 32: goto yy390
;
1514 case 33: goto yy394
;
1515 case 34: goto yy399
;
1516 case 35: goto yy417
;
1517 case 36: goto yy425
;
1518 case 37: goto yy428
;
1519 case 38: goto yy431
;
1520 case 39: goto yy437
;
1521 case 40: goto yy441
;
1522 case 41: goto yy446
;
1523 case 42: goto yy448
;
1524 case 43: goto yy452
;
1525 case 44: goto yy455
;
1526 case 45: goto yy457
;
1527 case 46: goto yy459
;
1528 case 47: goto yy464
;
1529 case 48: goto yy466
;
1530 case 49: goto yy468
;
1531 case 50: goto yy470
;
1532 case 51: goto yy472
;
1533 case 52: goto yy477
;
1534 case 53: goto yy487
;
1535 case 54: goto yy489
;
1536 case 55: goto yy491
;
1537 case 56: goto yy493
;
1538 case 57: goto yy495
;
1539 case 58: goto yy500
;
1540 case 59: goto yy504
;
1541 case 60: goto yy508
;
1542 case 61: goto yy510
;
1543 case 62: goto yy515
;
1544 case 63: goto yy520
;
1545 case 64: goto yy522
;
1546 case 65: goto yy530
;
1547 case 66: goto yy534
;
1548 case 67: goto yy536
;
1549 case 68: goto yy538
;
1550 case 69: goto yy540
;
1551 case 70: goto yy545
;
1552 case 71: goto yy547
;
1553 case 72: goto yy553
;
1554 case 73: goto yy558
;
1555 case 74: goto yy560
;
1556 case 75: goto yy565
;
1557 case 76: goto yy567
;
1558 case 77: goto yy575
;
1559 case 78: goto yy579
;
1560 case 79: goto yy583
;
1561 case 80: goto yy587
;
1562 case 81: goto yy589
;
1563 default: goto yy594
;
1568 case '.': goto yy209
;
1569 default: goto yy114
;
1574 if ((lim
- cur
) < 2) if (cur
>= lim
) goto done
;;
1586 case '9': goto yy116
;
1588 case 'd': goto yy211
;
1590 case 'f': goto yy212
;
1592 case 'l': goto yy214
;
1593 default: goto yy118
;
1596 #line 379 "src/parser.re"
1597 { NEWTOKEN(PSI_T_NUMBER
); token
->flags
= PSI_NUMBER_FLT
; goto start
; }
1598 #line 1599 "src/parser.c"
1601 #line 393 "src/parser.re"
1603 #line 1604 "src/parser.c"
1606 #line 394 "src/parser.re"
1607 { goto comment_sl
; }
1608 #line 1609 "src/parser.c"
1612 if ((lim
- cur
) < 3) if (cur
>= lim
) goto done
;;
1624 case '9': goto yy123
;
1626 case 'd': goto yy211
;
1628 case 'e': goto yy127
;
1630 case 'f': goto yy212
;
1632 case 'l': goto yy214
;
1633 default: goto yy118
;
1637 if ((lim
- cur
) < 3) if (cur
>= lim
) goto done
;;
1648 case '7': goto yy125
;
1650 case 'l': goto yy128
;
1652 case 'u': goto yy130
;
1659 case '-': goto yy113
;
1669 case '9': goto yy116
;
1670 default: goto yy114
;
1674 yych
= *(mrk
= ++cur
);
1677 case 'l': goto yy216
;
1679 case 'u': goto yy217
;
1680 default: goto yy129
;
1684 #line 375 "src/parser.re"
1685 { NEWTOKEN(PSI_T_NUMBER
); token
->flags
= PSI_NUMBER_INT
| PSI_NUMBER_L
; cur
+= 1; goto start
; }
1686 #line 1687 "src/parser.c"
1691 case 'l': goto yy219
;
1692 default: goto yy131
;
1696 #line 374 "src/parser.re"
1697 { NEWTOKEN(PSI_T_NUMBER
); token
->flags
= PSI_NUMBER_INT
| PSI_NUMBER_U
; cur
+= 1; goto start
; }
1698 #line 1699 "src/parser.c"
1723 case 'f': goto yy220
;
1724 default: goto yy114
;
1728 if (lim
<= cur
) if (cur
>= lim
) goto done
;;
1796 case 'z': goto yy133
;
1797 case '>': goto yy222
;
1798 default: goto yy114
;
1802 #line 423 "src/parser.re"
1803 { NEWTOKEN(PSI_T_LSHIFT
); goto start
; }
1804 #line 1805 "src/parser.c"
1807 #line 425 "src/parser.re"
1808 { NEWTOKEN(PSI_T_CMP_LE
); goto start
; }
1809 #line 1810 "src/parser.c"
1812 #line 408 "src/parser.re"
1813 { NEWTOKEN(PSI_T_CMP_EQ
); goto start
; }
1814 #line 1815 "src/parser.c"
1817 #line 426 "src/parser.re"
1818 { NEWTOKEN(PSI_T_CMP_GE
); goto start
; }
1819 #line 1820 "src/parser.c"
1822 #line 424 "src/parser.re"
1823 { NEWTOKEN(PSI_T_RSHIFT
); goto start
; }
1824 #line 1825 "src/parser.c"
1827 yych
= *(mrk
= ++cur
);
1830 case 'r': goto yy224
;
1835 yych
= *(mrk
= ++cur
);
1900 case 0x7F: goto yy147
;
1901 case '\\': goto yy148
;
1905 #line 486 "src/parser.re"
1906 { NEWTOKEN(PSI_T_AS
); goto start
; }
1907 #line 1908 "src/parser.c"
1910 if (lim
<= cur
) if (cur
>= lim
) goto done
;;
1987 case 0x7F: goto yy114
;
1988 default: goto yy184
;
1992 yych
= *(mrk
= ++cur
);
1995 case 'o': goto yy225
;
2000 yych
= *(mrk
= ++cur
);
2003 case 'l': goto yy226
;
2008 yych
= *(mrk
= ++cur
);
2011 case 'u': goto yy227
;
2016 yych
= *(mrk
= ++cur
);
2019 case 'f': goto yy228
;
2024 yych
= *(mrk
= ++cur
);
2027 case 'i': goto yy229
;
2029 case 's': goto yy230
;
2034 yych
= *(mrk
= ++cur
);
2037 case 'd': goto yy231
;
2042 yych
= *(mrk
= ++cur
);
2045 case 'r': goto yy232
;
2050 yych
= *(mrk
= ++cur
);
2053 case 'l': goto yy233
;
2058 yych
= *(mrk
= ++cur
);
2061 case 'o': goto yy234
;
2066 yych
= *(mrk
= ++cur
);
2069 case 'e': goto yy235
;
2074 yych
= *(mrk
= ++cur
);
2077 case 'n': goto yy236
;
2082 yych
= *(mrk
= ++cur
);
2147 case 0x7F: goto yy161
;
2149 case 'd': goto yy237
;
2151 case 'n': goto yy238
;
2152 case '\\': goto yy148
;
2156 #line 456 "src/parser.re"
2157 { NEWTOKEN(PSI_T_IF
); goto start
; }
2158 #line 2159 "src/parser.c"
2161 yych
= *(mrk
= ++cur
);
2164 case 'c': goto yy239
;
2166 case 't': goto yy240
;
2172 #line 391 "src/parser.re"
2173 { char_width
= sizeof(wchar_t)/8; }
2174 #line 2175 "src/parser.c"
2177 yych
= *(mrk
= ++cur
);
2180 case 't': goto yy241
;
2185 yych
= *(mrk
= ++cur
);
2188 case 'b': goto yy243
;
2193 yych
= *(mrk
= ++cur
);
2196 case 'x': goto yy245
;
2201 yych
= *(mrk
= ++cur
);
2204 case 'l': goto yy246
;
2209 yych
= *(mrk
= ++cur
);
2212 case 'j': goto yy247
;
2217 yych
= *(mrk
= ++cur
);
2220 case 't': goto yy248
;
2225 yych
= *(mrk
= ++cur
);
2228 case 's': goto yy249
;
2233 yych
= *(mrk
= ++cur
);
2236 case 'e': goto yy250
;
2241 yych
= *(mrk
= ++cur
);
2244 case 't': goto yy251
;
2249 yych
= *(mrk
= ++cur
);
2252 case 't': goto yy252
;
2257 yych
= *(mrk
= ++cur
);
2260 case 'a': goto yy254
;
2262 case 'r': goto yy255
;
2267 yych
= *(mrk
= ++cur
);
2270 case 'm': goto yy256
;
2275 yych
= *(mrk
= ++cur
);
2277 case '_': goto yy257
;
2282 yych
= *(mrk
= ++cur
);
2285 case 'u': goto yy258
;
2291 #line 390 "src/parser.re"
2293 #line 2294 "src/parser.c"
2296 yych
= *(mrk
= ++cur
);
2299 case 'd': goto yy259
;
2304 yych
= *(mrk
= ++cur
);
2307 case 'r': goto yy260
;
2312 yych
= *(mrk
= ++cur
);
2315 case 'a': goto yy261
;
2321 if (lim
<= cur
) if (cur
>= lim
) goto done
;;
2387 case 0x7F: goto yy186
;
2388 case '\\': goto yy148
;
2389 default: goto yy184
;
2392 #line 507 "src/parser.re"
2393 { NEWTOKEN(PSI_T_NSNAME
); goto start
; }
2394 #line 2395 "src/parser.c"
2397 yych
= *(mrk
= ++cur
);
2399 case 'a': goto yy262
;
2400 case 'e': goto yy263
;
2401 case 'i': goto yy264
;
2402 case 'r': goto yy265
;
2407 yych
= *(mrk
= ++cur
);
2409 case 'O': goto yy225
;
2410 case 'o': goto yy266
;
2415 yych
= *(mrk
= ++cur
);
2417 case 'a': goto yy267
;
2422 yych
= *(mrk
= ++cur
);
2425 case 'u': goto yy227
;
2426 case 'n': goto yy268
;
2431 yych
= *(mrk
= ++cur
);
2433 case 'u': goto yy269
;
2438 yych
= *(mrk
= ++cur
);
2441 case 'd': goto yy231
;
2442 case 'u': goto yy270
;
2447 yych
= *(mrk
= ++cur
);
2449 case 'O': goto yy234
;
2450 case 'o': goto yy271
;
2455 yych
= *(mrk
= ++cur
);
2458 case 'c': goto yy239
;
2459 case 'T': goto yy240
;
2460 case 't': goto yy272
;
2465 yych
= *(mrk
= ++cur
);
2468 case 'b': goto yy243
;
2469 case 'n': goto yy274
;
2474 yych
= *(mrk
= ++cur
);
2476 case 'n': goto yy275
;
2481 yych
= *(mrk
= ++cur
);
2484 case 'e': goto yy250
;
2485 case 'a': goto yy276
;
2490 yych
= *(mrk
= ++cur
);
2492 case 'o': goto yy277
;
2497 yych
= *(mrk
= ++cur
);
2499 case 'g': goto yy278
;
2500 case 'z': goto yy279
;
2505 yych
= *(mrk
= ++cur
);
2508 case 'a': goto yy254
;
2509 case 'R': goto yy255
;
2510 case 'r': goto yy280
;
2515 yych
= *(mrk
= ++cur
);
2517 case 'p': goto yy281
;
2523 #line 389 "src/parser.re"
2525 #line 2526 "src/parser.c"
2528 yych
= *(mrk
= ++cur
);
2530 case '"': goto yy282
;
2535 yych
= *(mrk
= ++cur
);
2538 case 'd': goto yy259
;
2539 case 'i': goto yy284
;
2540 case 's': goto yy285
;
2545 yych
= *(mrk
= ++cur
);
2547 case 'i': goto yy286
;
2548 case 'l': goto yy287
;
2553 #line 410 "src/parser.re"
2554 { NEWTOKEN(PSI_T_OR
); goto start
; }
2555 #line 2556 "src/parser.c"
2558 #line 430 "src/parser.re"
2559 { NEWTOKEN(PSI_T_ELLIPSIS
); goto start
; }
2560 #line 2561 "src/parser.c"
2565 case 'd': goto yy288
;
2567 case 'f': goto yy290
;
2569 case 'l': goto yy292
;
2570 default: goto yy114
;
2575 #line 380 "src/parser.re"
2576 { NEWTOKEN(PSI_T_NUMBER
); token
->flags
= PSI_NUMBER_FLT
| PSI_NUMBER_F
; cur
+= 1; goto start
; }
2577 #line 2578 "src/parser.c"
2581 #line 381 "src/parser.re"
2582 { NEWTOKEN(PSI_T_NUMBER
); token
->flags
= PSI_NUMBER_FLT
| PSI_NUMBER_L
; cur
+= 1; goto start
; }
2583 #line 2584 "src/parser.c"
2588 case 'u': goto yy294
;
2589 default: goto yy114
;
2595 #line 376 "src/parser.re"
2596 { NEWTOKEN(PSI_T_NUMBER
); token
->flags
= PSI_NUMBER_INT
| PSI_NUMBER_UL
; cur
+= 2; goto start
; }
2597 #line 2598 "src/parser.c"
2602 case 'l': goto yy294
;
2603 default: goto yy218
;
2608 if ((lim
- cur
) < 3) if (cur
>= lim
) goto done
;;
2611 case '.': goto yy296
;
2633 case 'f': goto yy220
;
2635 case 'l': goto yy128
;
2637 case 'p': goto yy127
;
2639 case 'u': goto yy130
;
2644 #line 509 "src/parser.re"
2645 { tok
+= 1; cur
-= 1; NEWTOKEN(PSI_T_CPP_HEADER
); cur
+= 1; goto start
; }
2646 #line 2647 "src/parser.c"
2649 yych
= *(mrk
= ++cur
);
2652 case 'a': goto yy298
;
2654 case 'v': goto yy299
;
2659 yych
= *(mrk
= ++cur
);
2662 case 'l': goto yy300
;
2667 yych
= *(mrk
= ++cur
);
2670 case 'l': goto yy301
;
2675 yych
= *(mrk
= ++cur
);
2678 case 'n': goto yy302
;
2683 yych
= *(mrk
= ++cur
);
2686 case 'i': goto yy303
;
2691 yych
= *(mrk
= ++cur
);
2694 case 'f': goto yy304
;
2699 yych
= *(mrk
= ++cur
);
2702 case 'e': goto yy306
;
2707 yych
= *(mrk
= ++cur
);
2710 case 'i': goto yy308
;
2715 yych
= *(mrk
= ++cur
);
2718 case 'o': goto yy309
;
2723 yych
= *(mrk
= ++cur
);
2726 case 's': goto yy310
;
2731 yych
= *(mrk
= ++cur
);
2734 case 'a': goto yy311
;
2739 yych
= *(mrk
= ++cur
);
2742 case 'e': goto yy312
;
2747 yych
= *(mrk
= ++cur
);
2750 case 'c': goto yy314
;
2755 yych
= *(mrk
= ++cur
);
2758 case 'e': goto yy315
;
2763 yych
= *(mrk
= ++cur
);
2766 case 'd': goto yy316
;
2771 yych
= *(mrk
= ++cur
);
2774 case 'l': goto yy317
;
2779 yych
= *(mrk
= ++cur
);
2782 case 'v': goto yy318
;
2787 yych
= *(mrk
= ++cur
);
2852 case 0x7F: goto yy242
;
2853 case '\\': goto yy148
;
2857 #line 481 "src/parser.re"
2858 { NEWTOKEN(PSI_T_LET
); goto start
; }
2859 #line 2860 "src/parser.c"
2862 yych
= *(mrk
= ++cur
);
2927 case 0x7F: goto yy244
;
2928 case '\\': goto yy148
;
2932 #line 480 "src/parser.re"
2933 { NEWTOKEN(PSI_T_LIB
); goto start
; }
2934 #line 2935 "src/parser.c"
2937 yych
= *(mrk
= ++cur
);
2940 case 'e': goto yy319
;
2945 yych
= *(mrk
= ++cur
);
2948 case 'l': goto yy320
;
2953 yych
= *(mrk
= ++cur
);
2956 case 'e': goto yy322
;
2958 case 'v': goto yy323
;
2963 yych
= *(mrk
= ++cur
);
2966 case 'h': goto yy324
;
2971 yych
= *(mrk
= ++cur
);
2974 case 't': goto yy325
;
2979 yych
= *(mrk
= ++cur
);
2981 case '_': goto yy326
;
2986 yych
= *(mrk
= ++cur
);
2989 case 'u': goto yy327
;
2994 yych
= *(mrk
= ++cur
);
3059 case 0x7F: goto yy253
;
3060 case '\\': goto yy148
;
3064 #line 482 "src/parser.re"
3065 { NEWTOKEN(PSI_T_SET
); goto start
; }
3066 #line 3067 "src/parser.c"
3069 yych
= *(mrk
= ++cur
);
3072 case 't': goto yy328
;
3077 yych
= *(mrk
= ++cur
);
3080 case 'i': goto yy329
;
3082 case 'l': goto yy330
;
3084 case 'v': goto yy331
;
3089 yych
= *(mrk
= ++cur
);
3092 case 'p': goto yy332
;
3097 yych
= *(mrk
= ++cur
);
3100 case 'a': goto yy334
;
3102 case 'b': goto yy335
;
3104 case 'f': goto yy336
;
3106 case 'i': goto yy337
;
3108 case 'o': goto yy338
;
3110 case 's': goto yy339
;
3115 yych
= *(mrk
= ++cur
);
3118 case 'e': goto yy340
;
3123 yych
= *(mrk
= ++cur
);
3126 case 'e': goto yy342
;
3131 yych
= *(mrk
= ++cur
);
3134 case 'n': goto yy343
;
3139 yych
= *(mrk
= ++cur
);
3142 case 'l': goto yy344
;
3147 yych
= *(mrk
= ++cur
);
3149 case 's': goto yy346
;
3150 case 't': goto yy347
;
3155 yych
= *(mrk
= ++cur
);
3157 case 'x': goto yy348
;
3162 yych
= *(mrk
= ++cur
);
3164 case 'n': goto yy349
;
3169 yych
= *(mrk
= ++cur
);
3171 case 'e': goto yy350
;
3176 yych
= *(mrk
= ++cur
);
3178 case 'L': goto yy300
;
3179 case 'l': goto yy351
;
3184 yych
= *(mrk
= ++cur
);
3186 case 'r': goto yy353
;
3191 yych
= *(mrk
= ++cur
);
3193 case 's': goto yy355
;
3198 yych
= *(mrk
= ++cur
);
3200 case 'b': goto yy356
;
3205 yych
= *(mrk
= ++cur
);
3207 case 'm': goto yy357
;
3212 yych
= *(mrk
= ++cur
);
3214 case 'A': goto yy311
;
3215 case 'a': goto yy359
;
3220 yych
= *(mrk
= ++cur
);
3285 case 0x7F: goto yy273
;
3287 case 'v': goto yy318
;
3288 case '\\': goto yy148
;
3292 #line 450 "src/parser.re"
3293 { NEWTOKEN(PSI_T_INT
); goto start
; }
3294 #line 3295 "src/parser.c"
3297 yych
= *(mrk
= ++cur
);
3299 case 'e': goto yy360
;
3304 yych
= *(mrk
= ++cur
);
3306 case 'g': goto yy362
;
3311 yych
= *(mrk
= ++cur
);
3313 case 'g': goto yy364
;
3318 yych
= *(mrk
= ++cur
);
3320 case 'r': goto yy365
;
3325 yych
= *(mrk
= ++cur
);
3327 case 'n': goto yy366
;
3332 yych
= *(mrk
= ++cur
);
3334 case 'e': goto yy367
;
3339 yych
= *(mrk
= ++cur
);
3342 case 'i': goto yy329
;
3344 case 'l': goto yy330
;
3346 case 'v': goto yy331
;
3347 case 'u': goto yy368
;
3352 yych
= *(mrk
= ++cur
);
3354 case 'e': goto yy369
;
3360 #line 388 "src/parser.re"
3362 #line 3363 "src/parser.c"
3365 yych
= *(mrk
= ++cur
);
3367 case 'o': goto yy370
;
3372 yych
= *(mrk
= ++cur
);
3374 case 'i': goto yy371
;
3379 yych
= *(mrk
= ++cur
);
3381 case 'd': goto yy372
;
3386 yych
= *(mrk
= ++cur
);
3388 case 'a': goto yy374
;
3394 #line 383 "src/parser.re"
3395 { NEWTOKEN(PSI_T_NUMBER
); token
->flags
= PSI_NUMBER_FLT
| PSI_NUMBER_DD
; cur
+= 2; goto start
; }
3396 #line 3397 "src/parser.c"
3400 #line 382 "src/parser.re"
3401 { NEWTOKEN(PSI_T_NUMBER
); token
->flags
= PSI_NUMBER_FLT
| PSI_NUMBER_DF
; cur
+= 2; goto start
; }
3402 #line 3403 "src/parser.c"
3406 #line 384 "src/parser.re"
3407 { NEWTOKEN(PSI_T_NUMBER
); token
->flags
= PSI_NUMBER_FLT
| PSI_NUMBER_DL
; cur
+= 2; goto start
; }
3408 #line 3409 "src/parser.c"
3412 #line 377 "src/parser.re"
3413 { NEWTOKEN(PSI_T_NUMBER
); token
->flags
= PSI_NUMBER_INT
| PSI_NUMBER_ULL
; cur
+= 3; goto start
; }
3414 #line 3415 "src/parser.c"
3417 if ((lim
- cur
) < 3) if (cur
>= lim
) goto done
;;
3441 case 'f': goto yy296
;
3443 case 'p': goto yy127
;
3444 default: goto yy114
;
3448 yych
= *(mrk
= ++cur
);
3451 case 'y': goto yy375
;
3456 yych
= *(mrk
= ++cur
);
3459 case 'a': goto yy377
;
3464 yych
= *(mrk
= ++cur
);
3467 case 'v': goto yy378
;
3472 yych
= *(mrk
= ++cur
);
3475 case 'a': goto yy379
;
3477 case 'b': goto yy380
;
3479 case 'o': goto yy381
;
3484 yych
= *(mrk
= ++cur
);
3487 case 't': goto yy382
;
3492 yych
= *(mrk
= ++cur
);
3495 case 'n': goto yy384
;
3500 yych
= *(mrk
= ++cur
);
3565 case 0x7F: goto yy305
;
3566 case '\\': goto yy148
;
3570 #line 460 "src/parser.re"
3571 { NEWTOKEN(PSI_T_ELIF
); goto start
; }
3572 #line 3573 "src/parser.c"
3575 yych
= *(mrk
= ++cur
);
3640 case 0x7F: goto yy307
;
3641 case '\\': goto yy148
;
3645 #line 459 "src/parser.re"
3646 { NEWTOKEN(PSI_T_ELSE
); goto start
; }
3647 #line 3648 "src/parser.c"
3650 yych
= *(mrk
= ++cur
);
3653 case 'f': goto yy385
;
3658 yych
= *(mrk
= ++cur
);
3661 case 'r': goto yy387
;
3666 yych
= *(mrk
= ++cur
);
3669 case 'e': goto yy389
;
3674 yych
= *(mrk
= ++cur
);
3677 case 't': goto yy391
;
3682 yych
= *(mrk
= ++cur
);
3747 case 0x7F: goto yy313
;
3748 case '\\': goto yy148
;
3752 #line 487 "src/parser.re"
3753 { NEWTOKEN(PSI_T_FREE
); goto start
; }
3754 #line 3755 "src/parser.c"
3757 yych
= *(mrk
= ++cur
);
3760 case 't': goto yy392
;
3765 yych
= *(mrk
= ++cur
);
3768 case 'f': goto yy393
;
3773 yych
= *(mrk
= ++cur
);
3776 case 'e': goto yy395
;
3781 yych
= *(mrk
= ++cur
);
3784 case 'u': goto yy396
;
3789 yych
= *(mrk
= ++cur
);
3792 case 'a': goto yy397
;
3797 yych
= *(mrk
= ++cur
);
3800 case 'd': goto yy398
;
3805 yych
= *(mrk
= ++cur
);
3870 case 0x7F: goto yy321
;
3871 case '\\': goto yy148
;
3875 #line 471 "src/parser.re"
3876 { NEWTOKEN(PSI_T_NULL
); goto start
; }
3877 #line 3878 "src/parser.c"
3880 yych
= *(mrk
= ++cur
);
3883 case 'c': goto yy400
;
3888 yych
= *(mrk
= ++cur
);
3891 case 'a': goto yy401
;
3896 yych
= *(mrk
= ++cur
);
3899 case 'v': goto yy402
;
3904 yych
= *(mrk
= ++cur
);
3906 case '_': goto yy403
;
3911 yych
= *(mrk
= ++cur
);
3914 case 'a': goto yy404
;
3919 yych
= *(mrk
= ++cur
);
3922 case 'r': goto yy405
;
3927 yych
= *(mrk
= ++cur
);
3930 case 'i': goto yy406
;
3935 yych
= *(mrk
= ++cur
);
3938 case 'n': goto yy407
;
3943 yych
= *(mrk
= ++cur
);
3946 case 'e': goto yy408
;
3951 yych
= *(mrk
= ++cur
);
3954 case 'a': goto yy409
;
3959 yych
= *(mrk
= ++cur
);
4024 case 0x7F: goto yy333
;
4025 case '\\': goto yy148
;
4029 #line 488 "src/parser.re"
4030 { NEWTOKEN(PSI_T_TEMP
); goto start
; }
4031 #line 4032 "src/parser.c"
4034 yych
= *(mrk
= ++cur
);
4037 case 'r': goto yy410
;
4042 yych
= *(mrk
= ++cur
);
4045 case 'o': goto yy411
;
4050 yych
= *(mrk
= ++cur
);
4053 case 'l': goto yy412
;
4058 yych
= *(mrk
= ++cur
);
4061 case 'n': goto yy413
;
4066 yych
= *(mrk
= ++cur
);
4069 case 'b': goto yy414
;
4074 yych
= *(mrk
= ++cur
);
4077 case 't': goto yy415
;
4082 yych
= *(mrk
= ++cur
);
4147 case 0x7F: goto yy341
;
4148 case '\\': goto yy148
;
4152 #line 469 "src/parser.re"
4153 { NEWTOKEN(PSI_T_TRUE
); goto start
; }
4154 #line 4155 "src/parser.c"
4157 yych
= *(mrk
= ++cur
);
4160 case 'f': goto yy416
;
4165 yych
= *(mrk
= ++cur
);
4168 case 'i': goto yy418
;
4173 yych
= *(mrk
= ++cur
);
4238 case 0x7F: goto yy345
;
4239 case '\\': goto yy148
;
4243 #line 497 "src/parser.re"
4244 { NEWTOKEN(PSI_T_ZVAL
); goto start
; }
4245 #line 4246 "src/parser.c"
4248 yych
= *(mrk
= ++cur
);
4250 case 'm': goto yy419
;
4255 yych
= *(mrk
= ++cur
);
4257 case 't': goto yy420
;
4262 yych
= *(mrk
= ++cur
);
4264 case 't': goto yy421
;
4269 yych
= *(mrk
= ++cur
);
4271 case 'l': goto yy422
;
4276 yych
= *(mrk
= ++cur
);
4278 case 's': goto yy423
;
4283 yych
= *(mrk
= ++cur
);
4348 case 0x7F: goto yy352
;
4350 case 'v': goto yy378
;
4351 case '\\': goto yy148
;
4355 #line 447 "src/parser.re"
4356 { NEWTOKEN(PSI_T_BOOL
); goto start
; }
4357 #line 4358 "src/parser.c"
4360 yych
= *(mrk
= ++cur
);
4425 case 0x7F: goto yy354
;
4426 case '\\': goto yy148
;
4430 #line 448 "src/parser.re"
4431 { NEWTOKEN(PSI_T_CHAR
); goto start
; }
4432 #line 4433 "src/parser.c"
4435 yych
= *(mrk
= ++cur
);
4437 case 't': goto yy424
;
4442 yych
= *(mrk
= ++cur
);
4444 case 'l': goto yy426
;
4449 yych
= *(mrk
= ++cur
);
4514 case 0x7F: goto yy358
;
4515 case '\\': goto yy148
;
4519 #line 444 "src/parser.re"
4520 { NEWTOKEN(PSI_T_ENUM
); goto start
; }
4521 #line 4522 "src/parser.c"
4524 yych
= *(mrk
= ++cur
);
4526 case 'T': goto yy391
;
4527 case 't': goto yy427
;
4532 yych
= *(mrk
= ++cur
);
4597 case 0x7F: goto yy361
;
4598 case '\\': goto yy148
;
4602 #line 440 "src/parser.re"
4603 { NEWTOKEN(PSI_T_LINE
); goto start
; }
4604 #line 4605 "src/parser.c"
4607 yych
= *(mrk
= ++cur
);
4672 case 0x7F: goto yy363
;
4673 case '\\': goto yy148
;
4677 #line 451 "src/parser.re"
4678 { NEWTOKEN(PSI_T_LONG
); goto start
; }
4679 #line 4680 "src/parser.c"
4682 yych
= *(mrk
= ++cur
);
4684 case 'm': goto yy429
;
4689 yych
= *(mrk
= ++cur
);
4691 case 't': goto yy430
;
4696 yych
= *(mrk
= ++cur
);
4698 case 'e': goto yy432
;
4703 yych
= *(mrk
= ++cur
);
4705 case 'o': goto yy433
;
4710 yych
= *(mrk
= ++cur
);
4712 case 'c': goto yy434
;
4717 yych
= *(mrk
= ++cur
);
4719 case 'd': goto yy435
;
4724 yych
= *(mrk
= ++cur
);
4726 case 'n': goto yy436
;
4731 yych
= *(mrk
= ++cur
);
4733 case 'g': goto yy438
;
4738 yych
= *(mrk
= ++cur
);
4803 case 0x7F: goto yy373
;
4804 case '\\': goto yy148
;
4808 #line 446 "src/parser.re"
4809 { NEWTOKEN(PSI_T_VOID
); goto start
; }
4810 #line 4811 "src/parser.c"
4813 yych
= *(mrk
= ++cur
);
4815 case 't': goto yy439
;
4820 yych
= *(mrk
= ++cur
);
4885 case 0x7F: goto yy376
;
4886 case '\\': goto yy148
;
4890 #line 475 "src/parser.re"
4891 { NEWTOKEN(PSI_T_ARRAY
); goto start
; }
4892 #line 4893 "src/parser.c"
4895 yych
= *(mrk
= ++cur
);
4898 case 'l': goto yy440
;
4903 yych
= *(mrk
= ++cur
);
4906 case 'a': goto yy442
;
4911 yych
= *(mrk
= ++cur
);
4914 case 'b': goto yy443
;
4919 yych
= *(mrk
= ++cur
);
4922 case 'a': goto yy444
;
4927 yych
= *(mrk
= ++cur
);
4930 case 'c': goto yy445
;
4935 yych
= *(mrk
= ++cur
);
5000 case 0x7F: goto yy383
;
5001 case '\\': goto yy148
;
5005 #line 498 "src/parser.re"
5006 { NEWTOKEN(PSI_T_COUNT
); goto start
; }
5007 #line 5008 "src/parser.c"
5010 yych
= *(mrk
= ++cur
);
5013 case 'e': goto yy447
;
5018 yych
= *(mrk
= ++cur
);
5083 case 0x7F: goto yy386
;
5084 case '\\': goto yy148
;
5088 #line 461 "src/parser.re"
5089 { NEWTOKEN(PSI_T_ENDIF
); goto start
; }
5090 #line 5091 "src/parser.c"
5093 yych
= *(mrk
= ++cur
);
5158 case 0x7F: goto yy388
;
5159 case '\\': goto yy148
;
5163 #line 466 "src/parser.re"
5164 { NEWTOKEN(PSI_T_ERROR
); goto start
; }
5165 #line 5166 "src/parser.c"
5168 yych
= *(mrk
= ++cur
);
5233 case 0x7F: goto yy390
;
5234 case '\\': goto yy148
;
5238 #line 470 "src/parser.re"
5239 { NEWTOKEN(PSI_T_FALSE
); goto start
; }
5240 #line 5241 "src/parser.c"
5243 yych
= *(mrk
= ++cur
);
5246 case 'v': goto yy449
;
5251 yych
= *(mrk
= ++cur
);
5254 case 'i': goto yy450
;
5259 yych
= *(mrk
= ++cur
);
5324 case 0x7F: goto yy394
;
5325 case '\\': goto yy148
;
5329 #line 457 "src/parser.re"
5330 { NEWTOKEN(PSI_T_IFDEF
); goto start
; }
5331 #line 5332 "src/parser.c"
5334 yych
= *(mrk
= ++cur
);
5337 case 'f': goto yy451
;
5342 yych
= *(mrk
= ++cur
);
5345 case 'd': goto yy453
;
5350 yych
= *(mrk
= ++cur
);
5353 case 'l': goto yy454
;
5358 yych
= *(mrk
= ++cur
);
5423 case 0x7F: goto yy399
;
5424 case '\\': goto yy148
;
5428 #line 472 "src/parser.re"
5429 { NEWTOKEN(PSI_T_MIXED
); goto start
; }
5430 #line 5431 "src/parser.c"
5433 yych
= *(mrk
= ++cur
);
5436 case 't': goto yy456
;
5441 yych
= *(mrk
= ++cur
);
5444 case 'l': goto yy458
;
5449 yych
= *(mrk
= ++cur
);
5452 case 'a': goto yy460
;
5457 yych
= *(mrk
= ++cur
);
5460 case 'a': goto yy461
;
5465 yych
= *(mrk
= ++cur
);
5468 case 's': goto yy462
;
5473 yych
= *(mrk
= ++cur
);
5476 case 'n': goto yy463
;
5481 yych
= *(mrk
= ++cur
);
5484 case 'c': goto yy465
;
5489 yych
= *(mrk
= ++cur
);
5492 case 'g': goto yy467
;
5497 yych
= *(mrk
= ++cur
);
5500 case 'n': goto yy469
;
5505 yych
= *(mrk
= ++cur
);
5508 case 'l': goto yy471
;
5513 yych
= *(mrk
= ++cur
);
5516 case 'r': goto yy473
;
5521 yych
= *(mrk
= ++cur
);
5524 case 'o': goto yy474
;
5529 yych
= *(mrk
= ++cur
);
5532 case 'o': goto yy475
;
5537 yych
= *(mrk
= ++cur
);
5540 case 't': goto yy476
;
5545 yych
= *(mrk
= ++cur
);
5548 case 'j': goto yy478
;
5553 yych
= *(mrk
= ++cur
);
5556 case 'r': goto yy479
;
5561 yych
= *(mrk
= ++cur
);
5626 case 0x7F: goto yy417
;
5627 case '\\': goto yy148
;
5631 #line 464 "src/parser.re"
5632 { NEWTOKEN(PSI_T_UNDEF
); goto start
; }
5633 #line 5634 "src/parser.c"
5636 yych
= *(mrk
= ++cur
);
5639 case 'n': goto yy480
;
5644 yych
= *(mrk
= ++cur
);
5646 case '_': goto yy481
;
5651 yych
= *(mrk
= ++cur
);
5653 case 'r': goto yy482
;
5658 yych
= *(mrk
= ++cur
);
5660 case 'e': goto yy483
;
5665 yych
= *(mrk
= ++cur
);
5667 case 'i': goto yy484
;
5672 yych
= *(mrk
= ++cur
);
5674 case 't': goto yy485
;
5679 yych
= *(mrk
= ++cur
);
5744 case 0x7F: goto yy425
;
5745 case '\\': goto yy148
;
5749 #line 445 "src/parser.re"
5750 { NEWTOKEN(PSI_T_CONST
); goto start
; }
5751 #line 5752 "src/parser.c"
5754 yych
= *(mrk
= ++cur
);
5756 case 'e': goto yy486
;
5761 yych
= *(mrk
= ++cur
);
5826 case 0x7F: goto yy428
;
5828 case 'v': goto yy449
;
5829 case '\\': goto yy148
;
5833 #line 452 "src/parser.re"
5834 { NEWTOKEN(PSI_T_FLOAT
); goto start
; }
5835 #line 5836 "src/parser.c"
5838 yych
= *(mrk
= ++cur
);
5840 case 'a': goto yy488
;
5845 yych
= *(mrk
= ++cur
);
5910 case 0x7F: goto yy431
;
5911 case '\\': goto yy148
;
5915 #line 449 "src/parser.re"
5916 { NEWTOKEN(PSI_T_SHORT
); goto start
; }
5917 #line 5918 "src/parser.c"
5920 yych
= *(mrk
= ++cur
);
5922 case 'd': goto yy490
;
5927 yych
= *(mrk
= ++cur
);
5929 case 'f': goto yy492
;
5934 yych
= *(mrk
= ++cur
);
5936 case 't': goto yy494
;
5941 yych
= *(mrk
= ++cur
);
5943 case 'e': goto yy496
;
5948 yych
= *(mrk
= ++cur
);
6013 case 0x7F: goto yy437
;
6014 case '\\': goto yy148
;
6018 #line 443 "src/parser.re"
6019 { NEWTOKEN(PSI_T_UNION
); goto start
; }
6020 #line 6021 "src/parser.c"
6023 yych
= *(mrk
= ++cur
);
6025 case 'n': goto yy497
;
6030 yych
= *(mrk
= ++cur
);
6032 case 'i': goto yy498
;
6037 yych
= *(mrk
= ++cur
);
6102 case 0x7F: goto yy441
;
6103 case '\\': goto yy148
;
6107 #line 495 "src/parser.re"
6108 { NEWTOKEN(PSI_T_ARRVAL
); goto start
; }
6109 #line 6110 "src/parser.c"
6112 yych
= *(mrk
= ++cur
);
6115 case 'l': goto yy499
;
6120 yych
= *(mrk
= ++cur
);
6123 case 'l': goto yy501
;
6128 yych
= *(mrk
= ++cur
);
6131 case 'c': goto yy502
;
6136 yych
= *(mrk
= ++cur
);
6201 case 0x7F: goto yy446
;
6202 case '\\': goto yy148
;
6206 #line 499 "src/parser.re"
6207 { NEWTOKEN(PSI_T_CALLOC
); goto start
; }
6208 #line 6209 "src/parser.c"
6211 yych
= *(mrk
= ++cur
);
6276 case 0x7F: goto yy448
;
6278 case 'd': goto yy503
;
6279 case '\\': goto yy148
;
6283 #line 462 "src/parser.re"
6284 { NEWTOKEN(PSI_T_DEFINE
); goto start
; }
6285 #line 6286 "src/parser.c"
6288 yych
= *(mrk
= ++cur
);
6291 case 'a': goto yy505
;
6296 yych
= *(mrk
= ++cur
);
6299 case 'o': goto yy506
;
6304 yych
= *(mrk
= ++cur
);
6369 case 0x7F: goto yy452
;
6370 case '\\': goto yy148
;
6374 #line 458 "src/parser.re"
6375 { NEWTOKEN(PSI_T_IFNDEF
); goto start
; }
6376 #line 6377 "src/parser.c"
6379 yych
= *(mrk
= ++cur
);
6382 case 'e': goto yy507
;
6387 yych
= *(mrk
= ++cur
);
6452 case 0x7F: goto yy455
;
6453 case '\\': goto yy148
;
6457 #line 492 "src/parser.re"
6458 { NEWTOKEN(PSI_T_INTVAL
); goto start
; }
6459 #line 6460 "src/parser.c"
6462 yych
= *(mrk
= ++cur
);
6527 case 0x7F: goto yy457
;
6528 case '\\': goto yy148
;
6532 #line 476 "src/parser.re"
6533 { NEWTOKEN(PSI_T_OBJECT
); goto start
; }
6534 #line 6535 "src/parser.c"
6537 yych
= *(mrk
= ++cur
);
6602 case 0x7F: goto yy459
;
6603 case '\\': goto yy148
;
6607 #line 496 "src/parser.re"
6608 { NEWTOKEN(PSI_T_OBJVAL
); goto start
; }
6609 #line 6610 "src/parser.c"
6612 yych
= *(mrk
= ++cur
);
6615 case 'l': goto yy509
;
6620 yych
= *(mrk
= ++cur
);
6623 case 's': goto yy511
;
6628 yych
= *(mrk
= ++cur
);
6631 case 's': goto yy512
;
6636 yych
= *(mrk
= ++cur
);
6701 case 0x7F: goto yy464
;
6702 case '\\': goto yy148
;
6706 #line 485 "src/parser.re"
6707 { NEWTOKEN(PSI_T_RETURN
); goto start
; }
6708 #line 6709 "src/parser.c"
6711 yych
= *(mrk
= ++cur
);
6776 case 0x7F: goto yy466
;
6777 case '\\': goto yy148
;
6781 #line 478 "src/parser.re"
6782 { NEWTOKEN(PSI_T_STATIC
); goto start
; }
6783 #line 6784 "src/parser.c"
6786 yych
= *(mrk
= ++cur
);
6851 case 0x7F: goto yy468
;
6852 case '\\': goto yy148
;
6856 #line 474 "src/parser.re"
6857 { NEWTOKEN(PSI_T_STRING
); goto start
; }
6858 #line 6859 "src/parser.c"
6861 yych
= *(mrk
= ++cur
);
6926 case 0x7F: goto yy470
;
6927 case '\\': goto yy148
;
6931 #line 489 "src/parser.re"
6932 { NEWTOKEN(PSI_T_STRLEN
); goto start
; }
6933 #line 6934 "src/parser.c"
6936 yych
= *(mrk
= ++cur
);
7001 case 0x7F: goto yy472
;
7002 case '\\': goto yy148
;
7006 #line 490 "src/parser.re"
7007 { NEWTOKEN(PSI_T_STRVAL
); goto start
; }
7008 #line 7009 "src/parser.c"
7011 yych
= *(mrk
= ++cur
);
7014 case 'a': goto yy513
;
7019 yych
= *(mrk
= ++cur
);
7022 case 'l': goto yy514
;
7027 yych
= *(mrk
= ++cur
);
7030 case 'a': goto yy516
;
7035 yych
= *(mrk
= ++cur
);
7100 case 0x7F: goto yy477
;
7101 case '\\': goto yy148
;
7105 #line 503 "src/parser.re"
7106 { NEWTOKEN(PSI_T_TO_INT
); goto start
; }
7107 #line 7108 "src/parser.c"
7110 yych
= *(mrk
= ++cur
);
7113 case 'e': goto yy517
;
7118 yych
= *(mrk
= ++cur
);
7121 case 'i': goto yy518
;
7126 yych
= *(mrk
= ++cur
);
7129 case 'g': goto yy519
;
7134 yych
= *(mrk
= ++cur
);
7136 case '_': goto yy521
;
7141 yych
= *(mrk
= ++cur
);
7143 case 'i': goto yy523
;
7148 yych
= *(mrk
= ++cur
);
7150 case 'n': goto yy524
;
7155 yych
= *(mrk
= ++cur
);
7157 case 'n': goto yy525
;
7162 yych
= *(mrk
= ++cur
);
7164 case 'r': goto yy526
;
7169 yych
= *(mrk
= ++cur
);
7234 case 0x7F: goto yy487
;
7235 case '\\': goto yy148
;
7239 #line 453 "src/parser.re"
7240 { NEWTOKEN(PSI_T_DOUBLE
); goto start
; }
7241 #line 7242 "src/parser.c"
7244 yych
= *(mrk
= ++cur
);
7309 case 0x7F: goto yy489
;
7310 case '\\': goto yy148
;
7311 default: goto yy527
;
7314 #line 432 "src/parser.re"
7315 { NEWTOKEN(PSI_T_PRAGMA
); goto start
; }
7316 #line 7317 "src/parser.c"
7319 yych
= *(mrk
= ++cur
);
7384 case 0x7F: goto yy491
;
7385 case '\\': goto yy148
;
7389 #line 455 "src/parser.re"
7390 { NEWTOKEN(PSI_T_SIGNED
); goto start
; }
7391 #line 7392 "src/parser.c"
7394 yych
= *(mrk
= ++cur
);
7459 case 0x7F: goto yy493
;
7460 case '\\': goto yy148
;
7464 #line 439 "src/parser.re"
7465 { NEWTOKEN(PSI_T_SIZEOF
); goto start
; }
7466 #line 7467 "src/parser.c"
7469 yych
= *(mrk
= ++cur
);
7534 case 0x7F: goto yy495
;
7535 case '\\': goto yy148
;
7539 #line 442 "src/parser.re"
7540 { NEWTOKEN(PSI_T_STRUCT
); goto start
; }
7541 #line 7542 "src/parser.c"
7544 yych
= *(mrk
= ++cur
);
7546 case 'f': goto yy529
;
7551 yych
= *(mrk
= ++cur
);
7553 case 'e': goto yy531
;
7558 yych
= *(mrk
= ++cur
);
7560 case 'l': goto yy532
;
7565 yych
= *(mrk
= ++cur
);
7630 case 0x7F: goto yy500
;
7631 case '\\': goto yy148
;
7635 #line 494 "src/parser.re"
7636 { NEWTOKEN(PSI_T_BOOLVAL
); goto start
; }
7637 #line 7638 "src/parser.c"
7640 yych
= *(mrk
= ++cur
);
7643 case 'e': goto yy533
;
7648 yych
= *(mrk
= ++cur
);
7651 case 'k': goto yy535
;
7656 yych
= *(mrk
= ++cur
);
7721 case 0x7F: goto yy504
;
7722 case '\\': goto yy148
;
7726 #line 463 "src/parser.re"
7727 { NEWTOKEN(PSI_T_DEFINED
); goto start
; }
7728 #line 7729 "src/parser.c"
7731 yych
= *(mrk
= ++cur
);
7734 case 'l': goto yy537
;
7739 yych
= *(mrk
= ++cur
);
7742 case 'n': goto yy539
;
7747 yych
= *(mrk
= ++cur
);
7812 case 0x7F: goto yy508
;
7813 case '\\': goto yy148
;
7814 case '_': goto yy541
;
7818 #line 467 "src/parser.re"
7819 { NEWTOKEN(PSI_T_INCLUDE
); goto start
; }
7820 #line 7821 "src/parser.c"
7823 yych
= *(mrk
= ++cur
);
7888 case 0x7F: goto yy510
;
7889 case '\\': goto yy148
;
7893 #line 491 "src/parser.re"
7894 { NEWTOKEN(PSI_T_PATHVAL
); goto start
; }
7895 #line 7896 "src/parser.c"
7898 yych
= *(mrk
= ++cur
);
7901 case 's': goto yy542
;
7906 yych
= *(mrk
= ++cur
);
7909 case 'e': goto yy543
;
7914 yych
= *(mrk
= ++cur
);
7917 case 'y': goto yy544
;
7922 yych
= *(mrk
= ++cur
);
7987 case 0x7F: goto yy515
;
7988 case '\\': goto yy148
;
7992 #line 505 "src/parser.re"
7993 { NEWTOKEN(PSI_T_TO_BOOL
); goto start
; }
7994 #line 7995 "src/parser.c"
7997 yych
= *(mrk
= ++cur
);
8000 case 't': goto yy546
;
8005 yych
= *(mrk
= ++cur
);
8008 case 'c': goto yy548
;
8013 yych
= *(mrk
= ++cur
);
8016 case 'n': goto yy549
;
8021 yych
= *(mrk
= ++cur
);
8086 case 0x7F: goto yy520
;
8087 case '\\': goto yy148
;
8091 #line 465 "src/parser.re"
8092 { NEWTOKEN(PSI_T_WARNING
); goto start
; }
8093 #line 8094 "src/parser.c"
8096 yych
= *(mrk
= ++cur
);
8161 case 0x7F: goto yy522
;
8162 case '\\': goto yy148
;
8166 #line 437 "src/parser.re"
8167 { NEWTOKEN(PSI_T_CPP_ASM
); goto start
; }
8168 #line 8169 "src/parser.c"
8171 yych
= *(mrk
= ++cur
);
8173 case 'b': goto yy550
;
8178 yych
= *(mrk
= ++cur
);
8180 case 's': goto yy551
;
8185 yych
= *(mrk
= ++cur
);
8187 case 'e': goto yy552
;
8192 yych
= *(mrk
= ++cur
);
8194 case 'i': goto yy554
;
8200 if (lim
<= cur
) if (cur
>= lim
) goto done
;;
8266 case 0x7F: goto yy55
;
8267 case '\\': goto yy148
;
8268 case 'o': goto yy555
;
8269 default: goto yy527
;
8273 yych
= *(mrk
= ++cur
);
8338 case 0x7F: goto yy530
;
8339 case '\\': goto yy148
;
8343 #line 441 "src/parser.re"
8344 { NEWTOKEN(PSI_T_TYPEDEF
); goto start
; }
8345 #line 8346 "src/parser.c"
8348 yych
= *(mrk
= ++cur
);
8350 case 'd': goto yy557
;
8355 yych
= *(mrk
= ++cur
);
8357 case 'e': goto yy559
;
8362 yych
= *(mrk
= ++cur
);
8427 case 0x7F: goto yy534
;
8428 case '\\': goto yy148
;
8432 #line 473 "src/parser.re"
8433 { NEWTOKEN(PSI_T_CALLABLE
); goto start
; }
8434 #line 8435 "src/parser.c"
8437 yych
= *(mrk
= ++cur
);
8502 case 0x7F: goto yy536
;
8503 case '\\': goto yy148
;
8507 #line 477 "src/parser.re"
8508 { NEWTOKEN(PSI_T_CALLBACK
); goto start
; }
8509 #line 8510 "src/parser.c"
8512 yych
= *(mrk
= ++cur
);
8577 case 0x7F: goto yy538
;
8578 case '\\': goto yy148
;
8582 #line 493 "src/parser.re"
8583 { NEWTOKEN(PSI_T_FLOATVAL
); goto start
; }
8584 #line 8585 "src/parser.c"
8587 yych
= *(mrk
= ++cur
);
8652 case 0x7F: goto yy540
;
8653 case '\\': goto yy148
;
8657 #line 479 "src/parser.re"
8658 { NEWTOKEN(PSI_T_FUNCTION
); goto start
; }
8659 #line 8660 "src/parser.c"
8662 yych
= *(mrk
= ++cur
);
8665 case 'n': goto yy561
;
8670 yych
= *(mrk
= ++cur
);
8673 case 'e': goto yy562
;
8678 yych
= *(mrk
= ++cur
);
8681 case 'r': goto yy563
;
8686 yych
= *(mrk
= ++cur
);
8751 case 0x7F: goto yy545
;
8752 case '\\': goto yy148
;
8756 #line 501 "src/parser.re"
8757 { NEWTOKEN(PSI_T_TO_ARRAY
); goto start
; }
8758 #line 8759 "src/parser.c"
8761 yych
= *(mrk
= ++cur
);
8826 case 0x7F: goto yy547
;
8827 case '\\': goto yy148
;
8831 #line 504 "src/parser.re"
8832 { NEWTOKEN(PSI_T_TO_FLOAT
); goto start
; }
8833 #line 8834 "src/parser.c"
8836 yych
= *(mrk
= ++cur
);
8839 case 't': goto yy564
;
8844 yych
= *(mrk
= ++cur
);
8847 case 'g': goto yy566
;
8852 yych
= *(mrk
= ++cur
);
8854 case 'u': goto yy568
;
8859 yych
= *(mrk
= ++cur
);
8861 case 'i': goto yy569
;
8866 yych
= *(mrk
= ++cur
);
8931 case 0x7F: goto yy553
;
8932 case '\\': goto yy148
;
8936 #line 434 "src/parser.re"
8937 { NEWTOKEN(PSI_T_CPP_INLINE
); goto start
; }
8938 #line 8939 "src/parser.c"
8941 yych
= *(mrk
= ++cur
);
8943 case 'c': goto yy570
;
8949 if (lim
<= cur
) if (cur
>= lim
) goto done
;;
9015 case 0x7F: goto yy55
;
9016 case '\\': goto yy148
;
9017 case 'n': goto yy571
;
9018 case 'o': goto yy555
;
9019 default: goto yy527
;
9023 yych
= *(mrk
= ++cur
);
9088 case 0x7F: goto yy558
;
9089 case '\\': goto yy148
;
9093 #line 454 "src/parser.re"
9094 { NEWTOKEN(PSI_T_UNSIGNED
); goto start
; }
9095 #line 9096 "src/parser.c"
9098 yych
= *(mrk
= ++cur
);
9163 case 0x7F: goto yy560
;
9164 case '\\': goto yy148
;
9168 #line 438 "src/parser.re"
9169 { NEWTOKEN(PSI_T_VOLATILE
); goto start
; }
9170 #line 9171 "src/parser.c"
9173 yych
= *(mrk
= ++cur
);
9176 case 'e': goto yy572
;
9181 yych
= *(mrk
= ++cur
);
9184 case 'r': goto yy573
;
9189 yych
= *(mrk
= ++cur
);
9192 case 't': goto yy574
;
9197 yych
= *(mrk
= ++cur
);
9262 case 0x7F: goto yy565
;
9263 case '\\': goto yy148
;
9267 #line 500 "src/parser.re"
9268 { NEWTOKEN(PSI_T_TO_OBJECT
); goto start
; }
9269 #line 9270 "src/parser.c"
9272 yych
= *(mrk
= ++cur
);
9337 case 0x7F: goto yy567
;
9338 case '\\': goto yy148
;
9342 #line 502 "src/parser.re"
9343 { NEWTOKEN(PSI_T_TO_STRING
); goto start
; }
9344 #line 9345 "src/parser.c"
9347 yych
= *(mrk
= ++cur
);
9349 case 't': goto yy576
;
9354 yych
= *(mrk
= ++cur
);
9356 case 'o': goto yy577
;
9361 yych
= *(mrk
= ++cur
);
9363 case 't': goto yy578
;
9369 if (lim
<= cur
) if (cur
>= lim
) goto done
;;
9435 case 0x7F: goto yy55
;
9436 case '\\': goto yy148
;
9437 case 'c': goto yy580
;
9438 case 'o': goto yy555
;
9439 default: goto yy527
;
9443 yych
= *(mrk
= ++cur
);
9446 case 'x': goto yy581
;
9451 yych
= *(mrk
= ++cur
);
9454 case 't': goto yy582
;
9459 yych
= *(mrk
= ++cur
);
9524 case 0x7F: goto yy575
;
9525 case '\\': goto yy148
;
9529 #line 483 "src/parser.re"
9530 { NEWTOKEN(PSI_T_PRE_ASSERT
); goto start
; }
9531 #line 9532 "src/parser.c"
9534 yych
= *(mrk
= ++cur
);
9536 case 'e': goto yy584
;
9541 yych
= *(mrk
= ++cur
);
9543 case 'n': goto yy585
;
9548 yych
= *(mrk
= ++cur
);
9613 case 0x7F: goto yy579
;
9614 case '\\': goto yy148
;
9618 #line 435 "src/parser.re"
9619 { NEWTOKEN(PSI_T_CPP_RESTRICT
); goto start
; }
9620 #line 9621 "src/parser.c"
9624 if (lim
<= cur
) if (cur
>= lim
) goto done
;;
9690 case 0x7F: goto yy55
;
9691 case '\\': goto yy148
;
9692 case 'e': goto yy586
;
9693 case 'o': goto yy555
;
9694 default: goto yy527
;
9698 yych
= *(mrk
= ++cur
);
9701 case 't': goto yy588
;
9706 yych
= *(mrk
= ++cur
);
9771 case 0x7F: goto yy583
;
9772 case '\\': goto yy148
;
9776 #line 484 "src/parser.re"
9777 { NEWTOKEN(PSI_T_POST_ASSERT
); goto start
; }
9778 #line 9779 "src/parser.c"
9781 yych
= *(mrk
= ++cur
);
9783 case '_': goto yy590
;
9788 yych
= *(mrk
= ++cur
);
9790 case '_': goto yy591
;
9796 if (lim
<= cur
) if (cur
>= lim
) goto done
;;
9862 case 0x7F: goto yy587
;
9863 case '\\': goto yy148
;
9864 case 'o': goto yy555
;
9865 default: goto yy527
;
9868 #line 433 "src/parser.re"
9869 { NEWTOKEN(PSI_T_PRAGMA_ONCE
); goto start
; }
9870 #line 9871 "src/parser.c"
9873 yych
= *(mrk
= ++cur
);
9938 case 0x7F: goto yy589
;
9939 case '\\': goto yy148
;
9943 #line 468 "src/parser.re"
9944 { NEWTOKEN(PSI_T_INCLUDE_NEXT
); goto start
; }
9945 #line 9946 "src/parser.c"
9948 yych
= *(mrk
= ++cur
);
9950 case '_': goto yy592
;
9955 yych
= *(mrk
= ++cur
);
9957 case '_': goto yy593
;
9962 yych
= *(mrk
= ++cur
);
9966 case ' ': goto yy595
;
9967 case '(': goto yy597
;
9972 yych
= *(mrk
= ++cur
);
10037 case 0x7F: goto yy594
;
10038 case '\\': goto yy148
;
10039 default: goto yy61
;
10042 #line 436 "src/parser.re"
10043 { NEWTOKEN(PSI_T_CPP_EXTENSION
); goto start
; }
10044 #line 10045 "src/parser.c"
10047 if ((lim
- cur
) < 2) if (cur
>= lim
) goto done
;;
10052 case ' ': goto yy595
;
10053 case '(': goto yy597
;
10054 default: goto yy114
;
10059 case '(': goto yy598
;
10060 default: goto yy114
;
10064 #line 510 "src/parser.re"
10065 { parens
= 2; goto cpp_attribute
; }
10066 #line 10067 "src/parser.c"
10068 #line 516 "src/parser.re"
10073 #line 10074 "src/parser.c"
10075 unsigned char yych
;
10076 if (lim
<= cur
) if (cur
>= lim
) goto done
;;
10080 case '\r': goto yy604
;
10081 case '\'': goto yy606
;
10082 case '\\': goto yy608
;
10083 default: goto yy602
;
10087 #line 534 "src/parser.re"
10088 { escaped
= false; goto character
; }
10089 #line 10090 "src/parser.c"
10092 #line 521 "src/parser.re"
10093 { NEWLINE(); goto character
; }
10094 #line 10095 "src/parser.c"
10097 #line 523 "src/parser.re"
10104 NEWTOKEN(PSI_T_QUOTED_CHAR
);
10106 token
->flags
= char_width
;
10109 #line 10110 "src/parser.c"
10112 #line 522 "src/parser.re"
10113 { escaped
= !escaped
; goto character
; }
10114 #line 10115 "src/parser.c"
10116 #line 536 "src/parser.re"
10121 #line 10122 "src/parser.c"
10123 unsigned char yych
;
10124 if (lim
<= cur
) if (cur
>= lim
) goto done
;;
10128 case '\r': goto yy614
;
10129 case '"': goto yy616
;
10130 case '\\': goto yy618
;
10131 default: goto yy612
;
10135 #line 554 "src/parser.re"
10136 { escaped
= false; goto string
; }
10137 #line 10138 "src/parser.c"
10140 #line 541 "src/parser.re"
10141 { NEWLINE(); goto string
; }
10142 #line 10143 "src/parser.c"
10145 #line 543 "src/parser.re"
10152 NEWTOKEN(PSI_T_QUOTED_STRING
);
10154 token
->flags
= char_width
;
10157 #line 10158 "src/parser.c"
10160 #line 542 "src/parser.re"
10161 { escaped
= !escaped
; goto string
; }
10162 #line 10163 "src/parser.c"
10164 #line 556 "src/parser.re"
10169 #line 10170 "src/parser.c"
10171 unsigned char yych
;
10172 if ((lim
- cur
) < 2) if (cur
>= lim
) goto done
;;
10176 case '\r': goto yy624
;
10177 case '*': goto yy626
;
10178 default: goto yy622
;
10183 #line 563 "src/parser.re"
10185 #line 10186 "src/parser.c"
10188 #line 561 "src/parser.re"
10189 { NEWLINE(); goto comment
; }
10190 #line 10191 "src/parser.c"
10194 case '/': goto yy627
;
10195 default: goto yy623
;
10199 #line 562 "src/parser.re"
10200 { NEWTOKEN(PSI_T_COMMENT
); goto start
; }
10201 #line 10202 "src/parser.c"
10203 #line 565 "src/parser.re"
10208 #line 10209 "src/parser.c"
10210 unsigned char yych
;
10211 if (lim
<= cur
) if (cur
>= lim
) goto done
;;
10215 case '\r': goto yy633
;
10216 default: goto yy631
;
10220 #line 571 "src/parser.re"
10221 { goto comment_sl
; }
10222 #line 10223 "src/parser.c"
10225 #line 570 "src/parser.re"
10226 { NEWTOKEN(PSI_T_COMMENT
); NEWLINE(); goto start
; }
10227 #line 10228 "src/parser.c"
10229 #line 573 "src/parser.re"
10235 #line 10236 "src/parser.c"
10237 unsigned char yych
;
10238 if (lim
<= cur
) if (cur
>= lim
) goto done
;;
10242 case '\r': goto yy639
;
10243 case '(': goto yy641
;
10244 case ')': goto yy643
;
10245 default: goto yy637
;
10249 #line 582 "src/parser.re"
10250 { goto cpp_attribute
; }
10251 #line 10252 "src/parser.c"
10254 #line 581 "src/parser.re"
10255 { NEWLINE(); goto cpp_attribute
; }
10256 #line 10257 "src/parser.c"
10259 #line 579 "src/parser.re"
10260 { ++parens
; goto cpp_attribute
; }
10261 #line 10262 "src/parser.c"
10264 #line 580 "src/parser.re"
10265 { if (parens
== 1) { NEWTOKEN(PSI_T_CPP_ATTRIBUTE
); goto start
; } else { --parens
; goto cpp_attribute
; } }
10266 #line 10267 "src/parser.c"
10268 #line 584 "src/parser.re"
10272 P
->error(PSI_DATA(P
), token
, PSI_WARNING
, "PSI syntax error: unexpected input (%d) '%.*s' at col %tu",
10273 token
->type
, token
->size
, token
->text
, tok
- eol
+ 1);
10274 psi_plist_free(tokens
);
10279 PSI_DEBUG_PRINT(P
, "PSI: EOF cur=%p lim=%p\n", cur
, lim
);