1 /* Generated by re2c 1.0.2 on Tue Oct 17 17:51:25 2017 */
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 bool psi_parser_parse(struct psi_parser
*P
, struct psi_parser_input
*I
)
205 struct psi_plist
*scanned
, *preproc
;
206 size_t processed
= 0;
208 if (!(scanned
= psi_parser_scan(P
, I
))) {
212 if (!(preproc
= psi_parser_preprocess(P
, &scanned
))) {
213 psi_plist_free(scanned
);
217 if (!psi_parser_process(P
, preproc
, &processed
)) {
218 psi_plist_free(preproc
);
222 psi_plist_free(preproc
);
226 void psi_parser_dtor(struct psi_parser
*P
)
228 psi_cpp_free(&P
->preproc
);
229 psi_data_dtor(PSI_DATA(P
));
231 memset(P
, 0, sizeof(*P
));
234 void psi_parser_free(struct psi_parser
**P
)
247 #define NEWTOKEN(t) \
248 token = psi_token_init(t, tok, cur - tok, tok - eol + 1, I->lines, I->file); \
249 tokens = psi_plist_add(tokens, &token); \
250 if (P->flags & PSI_DEBUG) { \
251 fprintf(stderr, "PSI< "); \
252 psi_token_dump(2, token); \
256 char s
[SIZEOF_UINT32_T
];
260 struct psi_plist
*psi_parser_scan(struct psi_parser
*P
, struct psi_parser_input
*I
)
262 struct psi_plist
*tokens
;
263 struct psi_token
*token
;
264 const char *tok
, *cur
, *lim
, *mrk
, *eol
, *ctxmrk
;
269 PSI_DEBUG_PRINT(P
, "PSI: scanning %s\n", I
->file
);
271 tok
= mrk
= eol
= cur
= I
->buffer
;
272 lim
= I
->buffer
+ I
->length
;
274 tokens
= psi_plist_init((psi_plist_dtor
) psi_token_free
);
284 #line 285 "src/parser.c"
287 unsigned int yyaccept
= 0;
288 if ((lim
- cur
) < 15) if (cur
>= lim
) goto done
;;
333 case '\'': goto yy20
;
384 case '\\': goto yy77
;
402 case '}': goto yy100
;
403 case '~': goto yy102
;
409 #line 450 "src/parser.re"
410 { NEWTOKEN(-2); goto error
; }
411 #line 412 "src/parser.c"
414 if (lim
<= cur
) if (cur
>= lim
) goto done
;;
423 #line 449 "src/parser.re"
424 { NEWTOKEN(PSI_T_WHITESPACE
); goto start
; }
425 #line 426 "src/parser.c"
428 #line 448 "src/parser.re"
429 { NEWTOKEN(PSI_T_EOL
); NEWLINE(); goto start
; }
430 #line 431 "src/parser.c"
434 case '=': goto yy104
;
438 #line 351 "src/parser.re"
439 { NEWTOKEN(PSI_T_NOT
); goto start
; }
440 #line 441 "src/parser.c"
443 #line 324 "src/parser.re"
444 { escaped
= false; tok
+= 1; goto string
; }
445 #line 446 "src/parser.c"
449 case '#': goto yy106
;
453 #line 334 "src/parser.re"
454 { NEWTOKEN(PSI_T_HASH
); goto start
; }
455 #line 456 "src/parser.c"
528 #line 352 "src/parser.re"
529 { NEWTOKEN(PSI_T_MODULO
); goto start
; }
530 #line 531 "src/parser.c"
534 case '&': goto yy111
;
538 #line 353 "src/parser.re"
539 { NEWTOKEN(PSI_T_AMPERSAND
); goto start
; }
540 #line 541 "src/parser.c"
543 #line 323 "src/parser.re"
544 { escaped
= false; tok
+= 1; goto character
; }
545 #line 546 "src/parser.c"
548 #line 335 "src/parser.re"
549 { NEWTOKEN(PSI_T_LPAREN
); goto start
; }
550 #line 551 "src/parser.c"
553 #line 336 "src/parser.re"
554 { NEWTOKEN(PSI_T_RPAREN
); goto start
; }
555 #line 556 "src/parser.c"
558 #line 349 "src/parser.re"
559 { NEWTOKEN(PSI_T_ASTERISK
); goto start
; }
560 #line 561 "src/parser.c"
563 yych
= *(mrk
= ++cur
);
565 case '.': goto yy113
;
579 #line 354 "src/parser.re"
580 { NEWTOKEN(PSI_T_PLUS
); goto start
; }
581 #line 582 "src/parser.c"
584 #line 338 "src/parser.re"
585 { NEWTOKEN(PSI_T_COMMA
); goto start
; }
586 #line 587 "src/parser.c"
589 yych
= *(mrk
= ++cur
);
591 case '.': goto yy113
;
605 #line 355 "src/parser.re"
606 { NEWTOKEN(PSI_T_MINUS
); goto start
; }
607 #line 608 "src/parser.c"
610 yych
= *(mrk
= ++cur
);
612 case '.': goto yy115
;
622 case '9': goto yy116
;
626 #line 366 "src/parser.re"
627 { NEWTOKEN(PSI_T_PERIOD
); goto start
; }
628 #line 629 "src/parser.c"
632 case '*': goto yy119
;
633 case '/': goto yy121
;
637 #line 356 "src/parser.re"
638 { NEWTOKEN(PSI_T_SLASH
); goto start
; }
639 #line 640 "src/parser.c"
642 yych
= *(mrk
= ++cur
);
644 case '.': goto yy123
;
646 case 'e': goto yy127
;
648 case 'x': goto yy132
;
652 #line 310 "src/parser.re"
653 { NEWTOKEN(PSI_T_NUMBER
); token
->flags
= PSI_NUMBER_INT
; goto start
; }
654 #line 655 "src/parser.c"
658 if ((lim
- cur
) < 3) if (cur
>= lim
) goto done
;;
661 case '.': goto yy123
;
673 case 'e': goto yy127
;
675 case 'l': goto yy128
;
677 case 'u': goto yy130
;
682 #line 339 "src/parser.re"
683 { NEWTOKEN(PSI_T_COLON
); goto start
; }
684 #line 685 "src/parser.c"
687 #line 337 "src/parser.re"
688 { NEWTOKEN(PSI_T_EOS
); goto start
; }
689 #line 690 "src/parser.c"
692 yych
= *(mrk
= ++cur
);
759 case 'z': goto yy133
;
760 case '<': goto yy135
;
761 case '=': goto yy137
;
765 #line 364 "src/parser.re"
766 { NEWTOKEN(PSI_T_LCHEVR
); goto start
; }
767 #line 768 "src/parser.c"
771 case '=': goto yy139
;
775 #line 348 "src/parser.re"
776 { NEWTOKEN(PSI_T_EQUALS
); goto start
; }
777 #line 778 "src/parser.c"
781 case '=': goto yy141
;
782 case '>': goto yy143
;
786 #line 365 "src/parser.re"
787 { NEWTOKEN(PSI_T_RCHEVR
); goto start
; }
788 #line 789 "src/parser.c"
791 #line 368 "src/parser.re"
792 { NEWTOKEN(PSI_T_IIF
); goto start
; }
793 #line 794 "src/parser.c"
796 yych
= *(mrk
= ++cur
);
799 case 'r': goto yy145
;
801 case 's': goto yy146
;
805 #line 443 "src/parser.re"
806 { NEWTOKEN(PSI_T_NAME
); goto start
; }
807 #line 808 "src/parser.c"
810 yych
= *(mrk
= ++cur
);
813 case 'o': goto yy149
;
818 yych
= *(mrk
= ++cur
);
821 case 'a': goto yy150
;
823 case 'o': goto yy151
;
828 yych
= *(mrk
= ++cur
);
831 case 'e': goto yy152
;
836 yych
= *(mrk
= ++cur
);
839 case 'l': goto yy153
;
841 case 'n': goto yy154
;
843 case 'r': goto yy155
;
848 yych
= *(mrk
= ++cur
);
851 case 'a': goto yy156
;
853 case 'l': goto yy157
;
855 case 'r': goto yy158
;
857 case 'u': goto yy159
;
863 if (lim
<= cur
) if (cur
>= lim
) goto done
;;
930 case 0x7F: goto yy55
;
931 case '\\': goto yy148
;
936 yych
= *(mrk
= ++cur
);
939 case 'f': goto yy160
;
941 case 'n': goto yy162
;
946 yych
= *(mrk
= ++cur
);
949 case '\'': goto yy163
;
951 case 'e': goto yy165
;
953 case 'i': goto yy166
;
958 yych
= *(mrk
= ++cur
);
961 case 'i': goto yy167
;
966 yych
= *(mrk
= ++cur
);
969 case 'u': goto yy168
;
974 yych
= *(mrk
= ++cur
);
977 case 'b': goto yy169
;
982 yych
= *(mrk
= ++cur
);
985 case 'a': goto yy170
;
987 case 'o': goto yy171
;
989 case 'r': goto yy172
;
994 yych
= *(mrk
= ++cur
);
997 case 'e': goto yy173
;
1002 yych
= *(mrk
= ++cur
);
1005 case 'e': goto yy174
;
1007 case 't': goto yy175
;
1012 yych
= *(mrk
= ++cur
);
1015 case 'e': goto yy176
;
1017 case 'o': goto yy177
;
1019 case 'r': goto yy178
;
1024 yych
= *(mrk
= ++cur
);
1027 case '\'': goto yy179
;
1029 case 'n': goto yy181
;
1034 yych
= *(mrk
= ++cur
);
1037 case 'a': goto yy182
;
1042 yych
= *(mrk
= ++cur
);
1045 case 'v': goto yy183
;
1050 #line 342 "src/parser.re"
1051 { NEWTOKEN(PSI_T_LBRACKET
); goto start
; }
1052 #line 1053 "src/parser.c"
1130 case 0x7F: goto yy78
;
1131 default: goto yy184
;
1134 #line 357 "src/parser.re"
1135 { NEWTOKEN(PSI_T_BSLASH
); goto start
; }
1136 #line 1137 "src/parser.c"
1139 #line 343 "src/parser.re"
1140 { NEWTOKEN(PSI_T_RBRACKET
); goto start
; }
1141 #line 1142 "src/parser.c"
1144 #line 359 "src/parser.re"
1145 { NEWTOKEN(PSI_T_CARET
); goto start
; }
1146 #line 1147 "src/parser.c"
1149 yych
= *(mrk
= ++cur
);
1151 case '_': goto yy187
;
1156 yych
= *(mrk
= ++cur
);
1158 case 'O': goto yy149
;
1159 case 'o': goto yy188
;
1164 yych
= *(mrk
= ++cur
);
1167 case 'a': goto yy150
;
1168 case 'O': goto yy151
;
1169 case 'h': goto yy189
;
1170 case 'o': goto yy190
;
1175 yych
= *(mrk
= ++cur
);
1178 case 'e': goto yy152
;
1179 case 'o': goto yy191
;
1184 yych
= *(mrk
= ++cur
);
1187 case 'l': goto yy153
;
1188 case 'N': goto yy154
;
1190 case 'r': goto yy155
;
1191 case 'n': goto yy192
;
1196 yych
= *(mrk
= ++cur
);
1199 case 'a': goto yy156
;
1200 case 'L': goto yy157
;
1202 case 'r': goto yy158
;
1204 case 'u': goto yy159
;
1205 case 'l': goto yy193
;
1210 yych
= *(mrk
= ++cur
);
1213 case 'f': goto yy160
;
1214 case 'N': goto yy162
;
1215 case 'n': goto yy194
;
1220 yych
= *(mrk
= ++cur
);
1223 case 'e': goto yy165
;
1224 case 'I': goto yy166
;
1225 case 'i': goto yy195
;
1226 case 'o': goto yy196
;
1231 yych
= *(mrk
= ++cur
);
1234 case 'a': goto yy170
;
1236 case 'o': goto yy171
;
1237 case 'R': goto yy172
;
1238 case 'r': goto yy197
;
1243 yych
= *(mrk
= ++cur
);
1246 case 'e': goto yy174
;
1247 case 'T': goto yy175
;
1248 case 'h': goto yy198
;
1249 case 'i': goto yy199
;
1250 case 't': goto yy200
;
1255 yych
= *(mrk
= ++cur
);
1258 case 'e': goto yy176
;
1260 case 'o': goto yy177
;
1262 case 'r': goto yy178
;
1263 case 'y': goto yy201
;
1268 yych
= *(mrk
= ++cur
);
1271 case '\'': goto yy202
;
1272 case '8': goto yy204
;
1273 case 'N': goto yy181
;
1274 case 'n': goto yy205
;
1279 yych
= *(mrk
= ++cur
);
1281 case 'o': goto yy206
;
1286 #line 340 "src/parser.re"
1287 { NEWTOKEN(PSI_T_LBRACE
); goto start
; }
1288 #line 1289 "src/parser.c"
1292 case '|': goto yy207
;
1296 #line 358 "src/parser.re"
1297 { NEWTOKEN(PSI_T_PIPE
); goto start
; }
1298 #line 1299 "src/parser.c"
1301 #line 341 "src/parser.re"
1302 { NEWTOKEN(PSI_T_RBRACE
); goto start
; }
1303 #line 1304 "src/parser.c"
1306 #line 350 "src/parser.re"
1307 { NEWTOKEN(PSI_T_TILDE
); goto start
; }
1308 #line 1309 "src/parser.c"
1311 #line 344 "src/parser.re"
1312 { NEWTOKEN(PSI_T_CMP_NE
); goto start
; }
1313 #line 1314 "src/parser.c"
1316 #line 333 "src/parser.re"
1317 { NEWTOKEN(PSI_T_CPP_PASTE
); goto start
; }
1318 #line 1319 "src/parser.c"
1321 if (lim
<= cur
) if (cur
>= lim
) goto done
;;
1388 case 0x7F: goto yy110
;
1389 default: goto yy108
;
1392 #line 445 "src/parser.re"
1393 { NEWTOKEN(PSI_T_DOLLAR_NAME
); goto start
; }
1394 #line 1395 "src/parser.c"
1397 #line 346 "src/parser.re"
1398 { NEWTOKEN(PSI_T_AND
); goto start
; }
1399 #line 1400 "src/parser.c"
1412 case '9': goto yy116
;
1413 default: goto yy114
;
1428 case 10: goto yy186
;
1429 case 11: goto yy242
;
1430 case 12: goto yy244
;
1431 case 13: goto yy253
;
1432 case 14: goto yy273
;
1433 case 15: goto yy305
;
1434 case 16: goto yy307
;
1435 case 17: goto yy313
;
1436 case 18: goto yy321
;
1437 case 19: goto yy333
;
1438 case 20: goto yy341
;
1439 case 21: goto yy345
;
1440 case 22: goto yy352
;
1441 case 23: goto yy354
;
1442 case 24: goto yy358
;
1443 case 25: goto yy361
;
1444 case 26: goto yy363
;
1445 case 27: goto yy373
;
1446 case 28: goto yy376
;
1447 case 29: goto yy383
;
1448 case 30: goto yy386
;
1449 case 31: goto yy388
;
1450 case 32: goto yy390
;
1451 case 33: goto yy394
;
1452 case 34: goto yy399
;
1453 case 35: goto yy417
;
1454 case 36: goto yy425
;
1455 case 37: goto yy428
;
1456 case 38: goto yy431
;
1457 case 39: goto yy437
;
1458 case 40: goto yy441
;
1459 case 41: goto yy446
;
1460 case 42: goto yy448
;
1461 case 43: goto yy452
;
1462 case 44: goto yy455
;
1463 case 45: goto yy457
;
1464 case 46: goto yy459
;
1465 case 47: goto yy464
;
1466 case 48: goto yy466
;
1467 case 49: goto yy468
;
1468 case 50: goto yy470
;
1469 case 51: goto yy472
;
1470 case 52: goto yy477
;
1471 case 53: goto yy487
;
1472 case 54: goto yy489
;
1473 case 55: goto yy491
;
1474 case 56: goto yy493
;
1475 case 57: goto yy495
;
1476 case 58: goto yy500
;
1477 case 59: goto yy504
;
1478 case 60: goto yy508
;
1479 case 61: goto yy510
;
1480 case 62: goto yy515
;
1481 case 63: goto yy520
;
1482 case 64: goto yy522
;
1483 case 65: goto yy530
;
1484 case 66: goto yy534
;
1485 case 67: goto yy536
;
1486 case 68: goto yy538
;
1487 case 69: goto yy540
;
1488 case 70: goto yy545
;
1489 case 71: goto yy547
;
1490 case 72: goto yy553
;
1491 case 73: goto yy558
;
1492 case 74: goto yy560
;
1493 case 75: goto yy565
;
1494 case 76: goto yy567
;
1495 case 77: goto yy575
;
1496 case 78: goto yy579
;
1497 case 79: goto yy583
;
1498 case 80: goto yy587
;
1499 case 81: goto yy589
;
1500 default: goto yy594
;
1505 case '.': goto yy209
;
1506 default: goto yy114
;
1511 if ((lim
- cur
) < 2) if (cur
>= lim
) goto done
;;
1523 case '9': goto yy116
;
1525 case 'd': goto yy211
;
1527 case 'f': goto yy212
;
1529 case 'l': goto yy214
;
1530 default: goto yy118
;
1533 #line 316 "src/parser.re"
1534 { NEWTOKEN(PSI_T_NUMBER
); token
->flags
= PSI_NUMBER_FLT
; goto start
; }
1535 #line 1536 "src/parser.c"
1538 #line 330 "src/parser.re"
1540 #line 1541 "src/parser.c"
1543 #line 331 "src/parser.re"
1544 { goto comment_sl
; }
1545 #line 1546 "src/parser.c"
1549 if ((lim
- cur
) < 3) if (cur
>= lim
) goto done
;;
1561 case '9': goto yy123
;
1563 case 'd': goto yy211
;
1565 case 'e': goto yy127
;
1567 case 'f': goto yy212
;
1569 case 'l': goto yy214
;
1570 default: goto yy118
;
1574 if ((lim
- cur
) < 3) if (cur
>= lim
) goto done
;;
1585 case '7': goto yy125
;
1587 case 'l': goto yy128
;
1589 case 'u': goto yy130
;
1596 case '-': goto yy113
;
1606 case '9': goto yy116
;
1607 default: goto yy114
;
1611 yych
= *(mrk
= ++cur
);
1614 case 'l': goto yy216
;
1616 case 'u': goto yy217
;
1617 default: goto yy129
;
1621 #line 312 "src/parser.re"
1622 { NEWTOKEN(PSI_T_NUMBER
); token
->flags
= PSI_NUMBER_INT
| PSI_NUMBER_L
; cur
+= 1; goto start
; }
1623 #line 1624 "src/parser.c"
1628 case 'l': goto yy219
;
1629 default: goto yy131
;
1633 #line 311 "src/parser.re"
1634 { NEWTOKEN(PSI_T_NUMBER
); token
->flags
= PSI_NUMBER_INT
| PSI_NUMBER_U
; cur
+= 1; goto start
; }
1635 #line 1636 "src/parser.c"
1660 case 'f': goto yy220
;
1661 default: goto yy114
;
1665 if (lim
<= cur
) if (cur
>= lim
) goto done
;;
1733 case 'z': goto yy133
;
1734 case '>': goto yy222
;
1735 default: goto yy114
;
1739 #line 360 "src/parser.re"
1740 { NEWTOKEN(PSI_T_LSHIFT
); goto start
; }
1741 #line 1742 "src/parser.c"
1744 #line 362 "src/parser.re"
1745 { NEWTOKEN(PSI_T_CMP_LE
); goto start
; }
1746 #line 1747 "src/parser.c"
1749 #line 345 "src/parser.re"
1750 { NEWTOKEN(PSI_T_CMP_EQ
); goto start
; }
1751 #line 1752 "src/parser.c"
1754 #line 363 "src/parser.re"
1755 { NEWTOKEN(PSI_T_CMP_GE
); goto start
; }
1756 #line 1757 "src/parser.c"
1759 #line 361 "src/parser.re"
1760 { NEWTOKEN(PSI_T_RSHIFT
); goto start
; }
1761 #line 1762 "src/parser.c"
1764 yych
= *(mrk
= ++cur
);
1767 case 'r': goto yy224
;
1772 yych
= *(mrk
= ++cur
);
1837 case 0x7F: goto yy147
;
1838 case '\\': goto yy148
;
1842 #line 423 "src/parser.re"
1843 { NEWTOKEN(PSI_T_AS
); goto start
; }
1844 #line 1845 "src/parser.c"
1847 if (lim
<= cur
) if (cur
>= lim
) goto done
;;
1924 case 0x7F: goto yy114
;
1925 default: goto yy184
;
1929 yych
= *(mrk
= ++cur
);
1932 case 'o': goto yy225
;
1937 yych
= *(mrk
= ++cur
);
1940 case 'l': goto yy226
;
1945 yych
= *(mrk
= ++cur
);
1948 case 'u': goto yy227
;
1953 yych
= *(mrk
= ++cur
);
1956 case 'f': goto yy228
;
1961 yych
= *(mrk
= ++cur
);
1964 case 'i': goto yy229
;
1966 case 's': goto yy230
;
1971 yych
= *(mrk
= ++cur
);
1974 case 'd': goto yy231
;
1979 yych
= *(mrk
= ++cur
);
1982 case 'r': goto yy232
;
1987 yych
= *(mrk
= ++cur
);
1990 case 'l': goto yy233
;
1995 yych
= *(mrk
= ++cur
);
1998 case 'o': goto yy234
;
2003 yych
= *(mrk
= ++cur
);
2006 case 'e': goto yy235
;
2011 yych
= *(mrk
= ++cur
);
2014 case 'n': goto yy236
;
2019 yych
= *(mrk
= ++cur
);
2084 case 0x7F: goto yy161
;
2086 case 'd': goto yy237
;
2088 case 'n': goto yy238
;
2089 case '\\': goto yy148
;
2093 #line 393 "src/parser.re"
2094 { NEWTOKEN(PSI_T_IF
); goto start
; }
2095 #line 2096 "src/parser.c"
2098 yych
= *(mrk
= ++cur
);
2101 case 'c': goto yy239
;
2103 case 't': goto yy240
;
2109 #line 328 "src/parser.re"
2110 { char_width
= SIZEOF_WCHAR_T
/8; }
2111 #line 2112 "src/parser.c"
2114 yych
= *(mrk
= ++cur
);
2117 case 't': goto yy241
;
2122 yych
= *(mrk
= ++cur
);
2125 case 'b': goto yy243
;
2130 yych
= *(mrk
= ++cur
);
2133 case 'x': goto yy245
;
2138 yych
= *(mrk
= ++cur
);
2141 case 'l': goto yy246
;
2146 yych
= *(mrk
= ++cur
);
2149 case 'j': goto yy247
;
2154 yych
= *(mrk
= ++cur
);
2157 case 't': goto yy248
;
2162 yych
= *(mrk
= ++cur
);
2165 case 's': goto yy249
;
2170 yych
= *(mrk
= ++cur
);
2173 case 'e': goto yy250
;
2178 yych
= *(mrk
= ++cur
);
2181 case 't': goto yy251
;
2186 yych
= *(mrk
= ++cur
);
2189 case 't': goto yy252
;
2194 yych
= *(mrk
= ++cur
);
2197 case 'a': goto yy254
;
2199 case 'r': goto yy255
;
2204 yych
= *(mrk
= ++cur
);
2207 case 'm': goto yy256
;
2212 yych
= *(mrk
= ++cur
);
2214 case '_': goto yy257
;
2219 yych
= *(mrk
= ++cur
);
2222 case 'u': goto yy258
;
2228 #line 327 "src/parser.re"
2230 #line 2231 "src/parser.c"
2233 yych
= *(mrk
= ++cur
);
2236 case 'd': goto yy259
;
2241 yych
= *(mrk
= ++cur
);
2244 case 'r': goto yy260
;
2249 yych
= *(mrk
= ++cur
);
2252 case 'a': goto yy261
;
2258 if (lim
<= cur
) if (cur
>= lim
) goto done
;;
2324 case 0x7F: goto yy186
;
2325 case '\\': goto yy148
;
2326 default: goto yy184
;
2329 #line 444 "src/parser.re"
2330 { NEWTOKEN(PSI_T_NSNAME
); goto start
; }
2331 #line 2332 "src/parser.c"
2334 yych
= *(mrk
= ++cur
);
2336 case 'a': goto yy262
;
2337 case 'e': goto yy263
;
2338 case 'i': goto yy264
;
2339 case 'r': goto yy265
;
2344 yych
= *(mrk
= ++cur
);
2346 case 'O': goto yy225
;
2347 case 'o': goto yy266
;
2352 yych
= *(mrk
= ++cur
);
2354 case 'a': goto yy267
;
2359 yych
= *(mrk
= ++cur
);
2362 case 'u': goto yy227
;
2363 case 'n': goto yy268
;
2368 yych
= *(mrk
= ++cur
);
2370 case 'u': goto yy269
;
2375 yych
= *(mrk
= ++cur
);
2378 case 'd': goto yy231
;
2379 case 'u': goto yy270
;
2384 yych
= *(mrk
= ++cur
);
2386 case 'O': goto yy234
;
2387 case 'o': goto yy271
;
2392 yych
= *(mrk
= ++cur
);
2395 case 'c': goto yy239
;
2396 case 'T': goto yy240
;
2397 case 't': goto yy272
;
2402 yych
= *(mrk
= ++cur
);
2405 case 'b': goto yy243
;
2406 case 'n': goto yy274
;
2411 yych
= *(mrk
= ++cur
);
2413 case 'n': goto yy275
;
2418 yych
= *(mrk
= ++cur
);
2421 case 'e': goto yy250
;
2422 case 'a': goto yy276
;
2427 yych
= *(mrk
= ++cur
);
2429 case 'o': goto yy277
;
2434 yych
= *(mrk
= ++cur
);
2436 case 'g': goto yy278
;
2437 case 'z': goto yy279
;
2442 yych
= *(mrk
= ++cur
);
2445 case 'a': goto yy254
;
2446 case 'R': goto yy255
;
2447 case 'r': goto yy280
;
2452 yych
= *(mrk
= ++cur
);
2454 case 'p': goto yy281
;
2460 #line 326 "src/parser.re"
2462 #line 2463 "src/parser.c"
2465 yych
= *(mrk
= ++cur
);
2467 case '"': goto yy282
;
2472 yych
= *(mrk
= ++cur
);
2475 case 'd': goto yy259
;
2476 case 'i': goto yy284
;
2477 case 's': goto yy285
;
2482 yych
= *(mrk
= ++cur
);
2484 case 'i': goto yy286
;
2485 case 'l': goto yy287
;
2490 #line 347 "src/parser.re"
2491 { NEWTOKEN(PSI_T_OR
); goto start
; }
2492 #line 2493 "src/parser.c"
2495 #line 367 "src/parser.re"
2496 { NEWTOKEN(PSI_T_ELLIPSIS
); goto start
; }
2497 #line 2498 "src/parser.c"
2502 case 'd': goto yy288
;
2504 case 'f': goto yy290
;
2506 case 'l': goto yy292
;
2507 default: goto yy114
;
2512 #line 317 "src/parser.re"
2513 { NEWTOKEN(PSI_T_NUMBER
); token
->flags
= PSI_NUMBER_FLT
| PSI_NUMBER_F
; cur
+= 1; goto start
; }
2514 #line 2515 "src/parser.c"
2518 #line 318 "src/parser.re"
2519 { NEWTOKEN(PSI_T_NUMBER
); token
->flags
= PSI_NUMBER_FLT
| PSI_NUMBER_L
; cur
+= 1; goto start
; }
2520 #line 2521 "src/parser.c"
2525 case 'u': goto yy294
;
2526 default: goto yy114
;
2532 #line 313 "src/parser.re"
2533 { NEWTOKEN(PSI_T_NUMBER
); token
->flags
= PSI_NUMBER_INT
| PSI_NUMBER_UL
; cur
+= 2; goto start
; }
2534 #line 2535 "src/parser.c"
2539 case 'l': goto yy294
;
2540 default: goto yy218
;
2545 if ((lim
- cur
) < 3) if (cur
>= lim
) goto done
;;
2548 case '.': goto yy296
;
2570 case 'f': goto yy220
;
2572 case 'l': goto yy128
;
2574 case 'p': goto yy127
;
2576 case 'u': goto yy130
;
2581 #line 446 "src/parser.re"
2582 { tok
+= 1; cur
-= 1; NEWTOKEN(PSI_T_CPP_HEADER
); cur
+= 1; goto start
; }
2583 #line 2584 "src/parser.c"
2586 yych
= *(mrk
= ++cur
);
2589 case 'a': goto yy298
;
2591 case 'v': goto yy299
;
2596 yych
= *(mrk
= ++cur
);
2599 case 'l': goto yy300
;
2604 yych
= *(mrk
= ++cur
);
2607 case 'l': goto yy301
;
2612 yych
= *(mrk
= ++cur
);
2615 case 'n': goto yy302
;
2620 yych
= *(mrk
= ++cur
);
2623 case 'i': goto yy303
;
2628 yych
= *(mrk
= ++cur
);
2631 case 'f': goto yy304
;
2636 yych
= *(mrk
= ++cur
);
2639 case 'e': goto yy306
;
2644 yych
= *(mrk
= ++cur
);
2647 case 'i': goto yy308
;
2652 yych
= *(mrk
= ++cur
);
2655 case 'o': goto yy309
;
2660 yych
= *(mrk
= ++cur
);
2663 case 's': goto yy310
;
2668 yych
= *(mrk
= ++cur
);
2671 case 'a': goto yy311
;
2676 yych
= *(mrk
= ++cur
);
2679 case 'e': goto yy312
;
2684 yych
= *(mrk
= ++cur
);
2687 case 'c': goto yy314
;
2692 yych
= *(mrk
= ++cur
);
2695 case 'e': goto yy315
;
2700 yych
= *(mrk
= ++cur
);
2703 case 'd': goto yy316
;
2708 yych
= *(mrk
= ++cur
);
2711 case 'l': goto yy317
;
2716 yych
= *(mrk
= ++cur
);
2719 case 'v': goto yy318
;
2724 yych
= *(mrk
= ++cur
);
2789 case 0x7F: goto yy242
;
2790 case '\\': goto yy148
;
2794 #line 418 "src/parser.re"
2795 { NEWTOKEN(PSI_T_LET
); goto start
; }
2796 #line 2797 "src/parser.c"
2799 yych
= *(mrk
= ++cur
);
2864 case 0x7F: goto yy244
;
2865 case '\\': goto yy148
;
2869 #line 417 "src/parser.re"
2870 { NEWTOKEN(PSI_T_LIB
); goto start
; }
2871 #line 2872 "src/parser.c"
2874 yych
= *(mrk
= ++cur
);
2877 case 'e': goto yy319
;
2882 yych
= *(mrk
= ++cur
);
2885 case 'l': goto yy320
;
2890 yych
= *(mrk
= ++cur
);
2893 case 'e': goto yy322
;
2895 case 'v': goto yy323
;
2900 yych
= *(mrk
= ++cur
);
2903 case 'h': goto yy324
;
2908 yych
= *(mrk
= ++cur
);
2911 case 't': goto yy325
;
2916 yych
= *(mrk
= ++cur
);
2918 case '_': goto yy326
;
2923 yych
= *(mrk
= ++cur
);
2926 case 'u': goto yy327
;
2931 yych
= *(mrk
= ++cur
);
2996 case 0x7F: goto yy253
;
2997 case '\\': goto yy148
;
3001 #line 419 "src/parser.re"
3002 { NEWTOKEN(PSI_T_SET
); goto start
; }
3003 #line 3004 "src/parser.c"
3006 yych
= *(mrk
= ++cur
);
3009 case 't': goto yy328
;
3014 yych
= *(mrk
= ++cur
);
3017 case 'i': goto yy329
;
3019 case 'l': goto yy330
;
3021 case 'v': goto yy331
;
3026 yych
= *(mrk
= ++cur
);
3029 case 'p': goto yy332
;
3034 yych
= *(mrk
= ++cur
);
3037 case 'a': goto yy334
;
3039 case 'b': goto yy335
;
3041 case 'f': goto yy336
;
3043 case 'i': goto yy337
;
3045 case 'o': goto yy338
;
3047 case 's': goto yy339
;
3052 yych
= *(mrk
= ++cur
);
3055 case 'e': goto yy340
;
3060 yych
= *(mrk
= ++cur
);
3063 case 'e': goto yy342
;
3068 yych
= *(mrk
= ++cur
);
3071 case 'n': goto yy343
;
3076 yych
= *(mrk
= ++cur
);
3079 case 'l': goto yy344
;
3084 yych
= *(mrk
= ++cur
);
3086 case 's': goto yy346
;
3087 case 't': goto yy347
;
3092 yych
= *(mrk
= ++cur
);
3094 case 'x': goto yy348
;
3099 yych
= *(mrk
= ++cur
);
3101 case 'n': goto yy349
;
3106 yych
= *(mrk
= ++cur
);
3108 case 'e': goto yy350
;
3113 yych
= *(mrk
= ++cur
);
3115 case 'L': goto yy300
;
3116 case 'l': goto yy351
;
3121 yych
= *(mrk
= ++cur
);
3123 case 'r': goto yy353
;
3128 yych
= *(mrk
= ++cur
);
3130 case 's': goto yy355
;
3135 yych
= *(mrk
= ++cur
);
3137 case 'b': goto yy356
;
3142 yych
= *(mrk
= ++cur
);
3144 case 'm': goto yy357
;
3149 yych
= *(mrk
= ++cur
);
3151 case 'A': goto yy311
;
3152 case 'a': goto yy359
;
3157 yych
= *(mrk
= ++cur
);