parser: consolidate tokens
authorMichael Wallner <mike@php.net>
Mon, 16 Oct 2017 08:59:09 +0000 (10:59 +0200)
committerMichael Wallner <mike@php.net>
Mon, 16 Oct 2017 08:59:54 +0000 (10:59 +0200)
16 files changed:
psi.d/arpa_inet.psi
psi.d/stat.psi
psi.d/syslog.psi
psi.d/time.psi
src/parser.c
src/parser.re
src/parser_proc.c
src/parser_proc.h
src/parser_proc_grammar.y
src/token.c
src/token.h
src/types/decl_arg.c
src/types/decl_type.c
src/types/impl_def_val.c
src/types/let_func.h
src/types/number.c

index a9dbfbc..f9aae9e 100644 (file)
@@ -1,3 +1,5 @@
+#include <arpa/inet.h>
+
 function psi\htonl(int $l) : int {
        let l = intval($l);
        return htonl(l) as to_int(htonl);
index 9b767da..3d0e623 100644 (file)
@@ -1,3 +1,4 @@
+#include <sys/stat.h>
 // extern int stat(char *path, struct stat *buf);
 function psi\stat(string $path, array &$buf = NULL) : int {
        let path = strval($path);
index cfb9187..9a97d76 100644 (file)
@@ -1,3 +1,5 @@
+#include <syslog.h>
+
 function psi\openlog(string $ident, int $option, int $facility) : void {
        let ident = strval($ident);
        let option = intval($option);
@@ -21,8 +23,8 @@ function psi\syslog(int $priority, string $format, mixed ...$args) : void {
 }
 
 // redirected macro
-extern int LOG_MASK(int pri);
-function psi\LOG_MASK(int $pri) : int {
-       let pri = intval($pri);
-       return LOG_MASK(pri) as to_int(LOG_MASK);
-}
+// extern int LOG_MASK(int pri);
+//function psi\LOG_MASK(int $pri) : int {
+//     let pri = intval($pri);
+//     return LOG_MASK(pri) as to_int(LOG_MASK);
+//}
index 7fb3cb9..2ad6e64 100644 (file)
@@ -1,3 +1,5 @@
+#include <time.h>
+
 // extern time_t time(time_t *t);
 function psi\time() : int {
        let t = NULL;
index 95ddd2d..258b16c 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 1.0.2 on Fri Oct 13 16:16:58 2017 */
+/* Generated by re2c 1.0.2 on Mon Oct 16 08:24:29 2017 */
 #line 1 "src/parser.re"
 /*******************************************************************************
  Copyright (c) 2016, Michael Wallner <mike@php.net>.
@@ -278,8 +278,10 @@ struct psi_plist *psi_parser_scan(struct psi_parser *P, struct psi_parser_input
                ctxmrk = NULL;
                tok = cur;
 
+               (void) ctxmrk;
+
                
-#line 283 "src/parser.c"
+#line 285 "src/parser.c"
                {
                        unsigned char yych;
                        unsigned int yyaccept = 0;
@@ -404,9 +406,9 @@ struct psi_plist *psi_parser_scan(struct psi_parser *P, struct psi_parser_input
 yy2:
                        ++cur;
 yy3:
-#line 448 "src/parser.re"
+#line 450 "src/parser.re"
                        { NEWTOKEN(-2); goto error; }
-#line 410 "src/parser.c"
+#line 412 "src/parser.c"
 yy4:
                        ++cur;
                        if (lim <= cur) if (cur >= lim) goto done;;
@@ -418,14 +420,14 @@ yy4:
                        default:        goto yy6;
                        }
 yy6:
-#line 447 "src/parser.re"
+#line 449 "src/parser.re"
                        { NEWTOKEN(PSI_T_WHITESPACE); goto start; }
-#line 424 "src/parser.c"
+#line 426 "src/parser.c"
 yy7:
                        ++cur;
-#line 446 "src/parser.re"
+#line 448 "src/parser.re"
                        { NEWTOKEN(PSI_T_EOL); NEWLINE(); goto start; }
-#line 429 "src/parser.c"
+#line 431 "src/parser.c"
 yy9:
                        yych = *++cur;
                        switch (yych) {
@@ -433,14 +435,14 @@ yy9:
                        default:        goto yy10;
                        }
 yy10:
-#line 349 "src/parser.re"
+#line 351 "src/parser.re"
                        { NEWTOKEN(PSI_T_NOT); goto start; }
-#line 439 "src/parser.c"
+#line 441 "src/parser.c"
 yy11:
                        ++cur;
-#line 322 "src/parser.re"
+#line 324 "src/parser.re"
                        { escaped = false; tok += 1; goto string; }
-#line 444 "src/parser.c"
+#line 446 "src/parser.c"
 yy13:
                        yych = *++cur;
                        switch (yych) {
@@ -448,9 +450,9 @@ yy13:
                        default:        goto yy14;
                        }
 yy14:
-#line 332 "src/parser.re"
+#line 334 "src/parser.re"
                        { NEWTOKEN(PSI_T_HASH); goto start; }
-#line 454 "src/parser.c"
+#line 456 "src/parser.c"
 yy15:
                        yych = *++cur;
                        switch (yych) {
@@ -523,9 +525,9 @@ yy15:
                        }
 yy16:
                        ++cur;
-#line 350 "src/parser.re"
+#line 352 "src/parser.re"
                        { NEWTOKEN(PSI_T_MODULO); goto start; }
-#line 529 "src/parser.c"
+#line 531 "src/parser.c"
 yy18:
                        yych = *++cur;
                        switch (yych) {
@@ -533,29 +535,29 @@ yy18:
                        default:        goto yy19;
                        }
 yy19:
-#line 351 "src/parser.re"
+#line 353 "src/parser.re"
                        { NEWTOKEN(PSI_T_AMPERSAND); goto start; }
-#line 539 "src/parser.c"
+#line 541 "src/parser.c"
 yy20:
                        ++cur;
-#line 321 "src/parser.re"
+#line 323 "src/parser.re"
                        { escaped = false; tok += 1; goto character; }
-#line 544 "src/parser.c"
+#line 546 "src/parser.c"
 yy22:
                        ++cur;
-#line 333 "src/parser.re"
+#line 335 "src/parser.re"
                        { NEWTOKEN(PSI_T_LPAREN); goto start; }
-#line 549 "src/parser.c"
+#line 551 "src/parser.c"
 yy24:
                        ++cur;
-#line 334 "src/parser.re"
+#line 336 "src/parser.re"
                        { NEWTOKEN(PSI_T_RPAREN); goto start; }
-#line 554 "src/parser.c"
+#line 556 "src/parser.c"
 yy26:
                        ++cur;
-#line 347 "src/parser.re"
+#line 349 "src/parser.re"
                        { NEWTOKEN(PSI_T_ASTERISK); goto start; }
-#line 559 "src/parser.c"
+#line 561 "src/parser.c"
 yy28:
                        yyaccept = 0;
                        yych = *(mrk = ++cur);
@@ -574,14 +576,14 @@ yy28:
                        default:        goto yy29;
                        }
 yy29:
-#line 352 "src/parser.re"
+#line 354 "src/parser.re"
                        { NEWTOKEN(PSI_T_PLUS); goto start; }
-#line 580 "src/parser.c"
+#line 582 "src/parser.c"
 yy30:
                        ++cur;
-#line 336 "src/parser.re"
+#line 338 "src/parser.re"
                        { NEWTOKEN(PSI_T_COMMA); goto start; }
-#line 585 "src/parser.c"
+#line 587 "src/parser.c"
 yy32:
                        yyaccept = 1;
                        yych = *(mrk = ++cur);
@@ -600,9 +602,9 @@ yy32:
                        default:        goto yy33;
                        }
 yy33:
-#line 353 "src/parser.re"
+#line 355 "src/parser.re"
                        { NEWTOKEN(PSI_T_MINUS); goto start; }
-#line 606 "src/parser.c"
+#line 608 "src/parser.c"
 yy34:
                        yyaccept = 2;
                        yych = *(mrk = ++cur);
@@ -621,9 +623,9 @@ yy34:
                        default:        goto yy35;
                        }
 yy35:
-#line 364 "src/parser.re"
+#line 366 "src/parser.re"
                        { NEWTOKEN(PSI_T_PERIOD); goto start; }
-#line 627 "src/parser.c"
+#line 629 "src/parser.c"
 yy36:
                        yych = *++cur;
                        switch (yych) {
@@ -632,9 +634,9 @@ yy36:
                        default:        goto yy37;
                        }
 yy37:
-#line 354 "src/parser.re"
+#line 356 "src/parser.re"
                        { NEWTOKEN(PSI_T_SLASH); goto start; }
-#line 638 "src/parser.c"
+#line 640 "src/parser.c"
 yy38:
                        yyaccept = 3;
                        yych = *(mrk = ++cur);
@@ -647,9 +649,9 @@ yy38:
                        default:        goto yy126;
                        }
 yy39:
-#line 308 "src/parser.re"
+#line 310 "src/parser.re"
                        { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_INT; goto start; }
-#line 653 "src/parser.c"
+#line 655 "src/parser.c"
 yy40:
                        yyaccept = 3;
                        mrk = ++cur;
@@ -677,14 +679,14 @@ yy40:
                        }
 yy42:
                        ++cur;
-#line 337 "src/parser.re"
+#line 339 "src/parser.re"
                        { NEWTOKEN(PSI_T_COLON); goto start; }
-#line 683 "src/parser.c"
+#line 685 "src/parser.c"
 yy44:
                        ++cur;
-#line 335 "src/parser.re"
+#line 337 "src/parser.re"
                        { NEWTOKEN(PSI_T_EOS); goto start; }
-#line 688 "src/parser.c"
+#line 690 "src/parser.c"
 yy46:
                        yyaccept = 4;
                        yych = *(mrk = ++cur);
@@ -760,9 +762,9 @@ yy46:
                        default:        goto yy47;
                        }
 yy47:
-#line 362 "src/parser.re"
+#line 364 "src/parser.re"
                        { NEWTOKEN(PSI_T_LCHEVR); goto start; }
-#line 766 "src/parser.c"
+#line 768 "src/parser.c"
 yy48:
                        yych = *++cur;
                        switch (yych) {
@@ -770,9 +772,9 @@ yy48:
                        default:        goto yy49;
                        }
 yy49:
-#line 346 "src/parser.re"
+#line 348 "src/parser.re"
                        { NEWTOKEN(PSI_T_EQUALS); goto start; }
-#line 776 "src/parser.c"
+#line 778 "src/parser.c"
 yy50:
                        yych = *++cur;
                        switch (yych) {
@@ -781,14 +783,14 @@ yy50:
                        default:        goto yy51;
                        }
 yy51:
-#line 363 "src/parser.re"
+#line 365 "src/parser.re"
                        { NEWTOKEN(PSI_T_RCHEVR); goto start; }
-#line 787 "src/parser.c"
+#line 789 "src/parser.c"
 yy52:
                        ++cur;
-#line 366 "src/parser.re"
+#line 368 "src/parser.re"
                        { NEWTOKEN(PSI_T_IIF); goto start; }
-#line 792 "src/parser.c"
+#line 794 "src/parser.c"
 yy54:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -800,9 +802,9 @@ yy54:
                        default:        goto yy62;
                        }
 yy55:
-#line 441 "src/parser.re"
+#line 443 "src/parser.re"
                        { NEWTOKEN(PSI_T_NAME); goto start; }
-#line 806 "src/parser.c"
+#line 808 "src/parser.c"
 yy56:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -1045,9 +1047,9 @@ yy74:
                        }
 yy75:
                        ++cur;
-#line 340 "src/parser.re"
+#line 342 "src/parser.re"
                        { NEWTOKEN(PSI_T_LBRACKET); goto start; }
-#line 1051 "src/parser.c"
+#line 1053 "src/parser.c"
 yy77:
                        yych = *++cur;
                        switch (yych) {
@@ -1129,19 +1131,19 @@ yy77:
                        default:        goto yy184;
                        }
 yy78:
-#line 355 "src/parser.re"
+#line 357 "src/parser.re"
                        { NEWTOKEN(PSI_T_BSLASH); goto start; }
-#line 1135 "src/parser.c"
+#line 1137 "src/parser.c"
 yy79:
                        ++cur;
-#line 341 "src/parser.re"
+#line 343 "src/parser.re"
                        { NEWTOKEN(PSI_T_RBRACKET); goto start; }
-#line 1140 "src/parser.c"
+#line 1142 "src/parser.c"
 yy81:
                        ++cur;
-#line 357 "src/parser.re"
+#line 359 "src/parser.re"
                        { NEWTOKEN(PSI_T_CARET); goto start; }
-#line 1145 "src/parser.c"
+#line 1147 "src/parser.c"
 yy83:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -1281,9 +1283,9 @@ yy95:
                        }
 yy96:
                        ++cur;
-#line 338 "src/parser.re"
+#line 340 "src/parser.re"
                        { NEWTOKEN(PSI_T_LBRACE); goto start; }
-#line 1287 "src/parser.c"
+#line 1289 "src/parser.c"
 yy98:
                        yych = *++cur;
                        switch (yych) {
@@ -1291,29 +1293,29 @@ yy98:
                        default:        goto yy99;
                        }
 yy99:
-#line 356 "src/parser.re"
+#line 358 "src/parser.re"
                        { NEWTOKEN(PSI_T_PIPE); goto start; }
-#line 1297 "src/parser.c"
+#line 1299 "src/parser.c"
 yy100:
                        ++cur;
-#line 339 "src/parser.re"
+#line 341 "src/parser.re"
                        { NEWTOKEN(PSI_T_RBRACE); goto start; }
-#line 1302 "src/parser.c"
+#line 1304 "src/parser.c"
 yy102:
                        ++cur;
-#line 348 "src/parser.re"
+#line 350 "src/parser.re"
                        { NEWTOKEN(PSI_T_TILDE); goto start; }
-#line 1307 "src/parser.c"
+#line 1309 "src/parser.c"
 yy104:
                        ++cur;
-#line 342 "src/parser.re"
+#line 344 "src/parser.re"
                        { NEWTOKEN(PSI_T_CMP_NE); goto start; }
-#line 1312 "src/parser.c"
+#line 1314 "src/parser.c"
 yy106:
                        ++cur;
-#line 331 "src/parser.re"
+#line 333 "src/parser.re"
                        { NEWTOKEN(PSI_T_CPP_PASTE); goto start; }
-#line 1317 "src/parser.c"
+#line 1319 "src/parser.c"
 yy108:
                        ++cur;
                        if (lim <= cur) if (cur >= lim) goto done;;
@@ -1387,14 +1389,14 @@ yy108:
                        default:        goto yy108;
                        }
 yy110:
-#line 443 "src/parser.re"
+#line 445 "src/parser.re"
                        { NEWTOKEN(PSI_T_DOLLAR_NAME); goto start; }
-#line 1393 "src/parser.c"
+#line 1395 "src/parser.c"
 yy111:
                        ++cur;
-#line 344 "src/parser.re"
+#line 346 "src/parser.re"
                        { NEWTOKEN(PSI_T_AND); goto start; }
-#line 1398 "src/parser.c"
+#line 1400 "src/parser.c"
 yy113:
                        yych = *++cur;
                        switch (yych) {
@@ -1528,19 +1530,19 @@ yy116:
                        default:        goto yy118;
                        }
 yy118:
-#line 314 "src/parser.re"
+#line 316 "src/parser.re"
                        { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_FLT; goto start; }
-#line 1534 "src/parser.c"
+#line 1536 "src/parser.c"
 yy119:
                        ++cur;
-#line 328 "src/parser.re"
+#line 330 "src/parser.re"
                        { goto comment; }
-#line 1539 "src/parser.c"
+#line 1541 "src/parser.c"
 yy121:
                        ++cur;
-#line 329 "src/parser.re"
+#line 331 "src/parser.re"
                        { goto comment_sl; }
-#line 1544 "src/parser.c"
+#line 1546 "src/parser.c"
 yy123:
                        yyaccept = 6;
                        mrk = ++cur;
@@ -1616,9 +1618,9 @@ yy128:
                        }
 yy129:
                        cur -= 1;
-#line 310 "src/parser.re"
+#line 312 "src/parser.re"
                        { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_INT | PSI_NUMBER_L; cur += 1; goto start; }
-#line 1622 "src/parser.c"
+#line 1624 "src/parser.c"
 yy130:
                        yych = *++cur;
                        switch (yych) {
@@ -1628,9 +1630,9 @@ yy130:
                        }
 yy131:
                        cur -= 1;
-#line 309 "src/parser.re"
+#line 311 "src/parser.re"
                        { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_INT | PSI_NUMBER_U; cur += 1; goto start; }
-#line 1634 "src/parser.c"
+#line 1636 "src/parser.c"
 yy132:
                        yych = *++cur;
                        switch (yych) {
@@ -1734,29 +1736,29 @@ yy133:
                        }
 yy135:
                        ++cur;
-#line 358 "src/parser.re"
+#line 360 "src/parser.re"
                        { NEWTOKEN(PSI_T_LSHIFT); goto start; }
-#line 1740 "src/parser.c"
+#line 1742 "src/parser.c"
 yy137:
                        ++cur;
-#line 360 "src/parser.re"
+#line 362 "src/parser.re"
                        { NEWTOKEN(PSI_T_CMP_LE); goto start; }
-#line 1745 "src/parser.c"
+#line 1747 "src/parser.c"
 yy139:
                        ++cur;
-#line 343 "src/parser.re"
+#line 345 "src/parser.re"
                        { NEWTOKEN(PSI_T_CMP_EQ); goto start; }
-#line 1750 "src/parser.c"
+#line 1752 "src/parser.c"
 yy141:
                        ++cur;
-#line 361 "src/parser.re"
+#line 363 "src/parser.re"
                        { NEWTOKEN(PSI_T_CMP_GE); goto start; }
-#line 1755 "src/parser.c"
+#line 1757 "src/parser.c"
 yy143:
                        ++cur;
-#line 359 "src/parser.re"
+#line 361 "src/parser.re"
                        { NEWTOKEN(PSI_T_RSHIFT); goto start; }
-#line 1760 "src/parser.c"
+#line 1762 "src/parser.c"
 yy145:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -1837,9 +1839,9 @@ yy146:
                        default:        goto yy61;
                        }
 yy147:
-#line 421 "src/parser.re"
+#line 423 "src/parser.re"
                        { NEWTOKEN(PSI_T_AS); goto start; }
-#line 1843 "src/parser.c"
+#line 1845 "src/parser.c"
 yy148:
                        ++cur;
                        if (lim <= cur) if (cur >= lim) goto done;;
@@ -2088,9 +2090,9 @@ yy160:
                        default:        goto yy61;
                        }
 yy161:
-#line 391 "src/parser.re"
+#line 393 "src/parser.re"
                        { NEWTOKEN(PSI_T_IF); goto start; }
-#line 2094 "src/parser.c"
+#line 2096 "src/parser.c"
 yy162:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -2104,9 +2106,9 @@ yy162:
 yy163:
                        ++cur;
                        cur -= 1;
-#line 326 "src/parser.re"
+#line 328 "src/parser.re"
                        { char_width = SIZEOF_WCHAR_T/8; }
-#line 2110 "src/parser.c"
+#line 2112 "src/parser.c"
 yy165:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -2223,9 +2225,9 @@ yy178:
 yy179:
                        ++cur;
                        cur -= 1;
-#line 325 "src/parser.re"
+#line 327 "src/parser.re"
                        { char_width = 4; }
-#line 2229 "src/parser.c"
+#line 2231 "src/parser.c"
 yy181:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -2324,9 +2326,9 @@ yy184:
                        default:        goto yy184;
                        }
 yy186:
-#line 442 "src/parser.re"
+#line 444 "src/parser.re"
                        { NEWTOKEN(PSI_T_NSNAME); goto start; }
-#line 2330 "src/parser.c"
+#line 2332 "src/parser.c"
 yy187:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -2455,9 +2457,9 @@ yy201:
 yy202:
                        ++cur;
                        cur -= 1;
-#line 324 "src/parser.re"
+#line 326 "src/parser.re"
                        { char_width = 2; }
-#line 2461 "src/parser.c"
+#line 2463 "src/parser.c"
 yy204:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -2485,14 +2487,14 @@ yy206:
                        }
 yy207:
                        ++cur;
-#line 345 "src/parser.re"
+#line 347 "src/parser.re"
                        { NEWTOKEN(PSI_T_OR); goto start; }
-#line 2491 "src/parser.c"
+#line 2493 "src/parser.c"
 yy209:
                        ++cur;
-#line 365 "src/parser.re"
+#line 367 "src/parser.re"
                        { NEWTOKEN(PSI_T_ELLIPSIS); goto start; }
-#line 2496 "src/parser.c"
+#line 2498 "src/parser.c"
 yy211:
                        yych = *++cur;
                        switch (yych) {
@@ -2507,15 +2509,15 @@ yy211:
 yy212:
                        ++cur;
                        cur -= 1;
-#line 315 "src/parser.re"
+#line 317 "src/parser.re"
                        { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_FLT | PSI_NUMBER_F; cur += 1; goto start; }
-#line 2513 "src/parser.c"
+#line 2515 "src/parser.c"
 yy214:
                        ++cur;
                        cur -= 1;
-#line 316 "src/parser.re"
+#line 318 "src/parser.re"
                        { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_FLT | PSI_NUMBER_L; cur += 1; goto start; }
-#line 2519 "src/parser.c"
+#line 2521 "src/parser.c"
 yy216:
                        yych = *++cur;
                        switch (yych) {
@@ -2527,9 +2529,9 @@ yy217:
                        ++cur;
 yy218:
                        cur -= 2;
-#line 311 "src/parser.re"
+#line 313 "src/parser.re"
                        { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_INT | PSI_NUMBER_UL; cur += 2; goto start; }
-#line 2533 "src/parser.c"
+#line 2535 "src/parser.c"
 yy219:
                        yych = *++cur;
                        switch (yych) {
@@ -2576,9 +2578,9 @@ yy220:
                        }
 yy222:
                        ++cur;
-#line 444 "src/parser.re"
+#line 446 "src/parser.re"
                        { tok += 1; cur -= 1; NEWTOKEN(PSI_T_CPP_HEADER); cur += 1; goto start; }
-#line 2582 "src/parser.c"
+#line 2584 "src/parser.c"
 yy224:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -2789,9 +2791,9 @@ yy241:
                        default:        goto yy61;
                        }
 yy242:
-#line 416 "src/parser.re"
+#line 418 "src/parser.re"
                        { NEWTOKEN(PSI_T_LET); goto start; }
-#line 2795 "src/parser.c"
+#line 2797 "src/parser.c"
 yy243:
                        yyaccept = 12;
                        yych = *(mrk = ++cur);
@@ -2864,9 +2866,9 @@ yy243:
                        default:        goto yy61;
                        }
 yy244:
-#line 415 "src/parser.re"
+#line 417 "src/parser.re"
                        { NEWTOKEN(PSI_T_LIB); goto start; }
-#line 2870 "src/parser.c"
+#line 2872 "src/parser.c"
 yy245:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -2996,9 +2998,9 @@ yy252:
                        default:        goto yy61;
                        }
 yy253:
-#line 417 "src/parser.re"
+#line 419 "src/parser.re"
                        { NEWTOKEN(PSI_T_SET); goto start; }
-#line 3002 "src/parser.c"
+#line 3004 "src/parser.c"
 yy254:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -3224,9 +3226,9 @@ yy272:
                        default:        goto yy61;
                        }
 yy273:
-#line 385 "src/parser.re"
+#line 387 "src/parser.re"
                        { NEWTOKEN(PSI_T_INT); goto start; }
-#line 3230 "src/parser.c"
+#line 3232 "src/parser.c"
 yy274:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -3292,9 +3294,9 @@ yy281:
 yy282:
                        ++cur;
                        cur -= 1;
-#line 323 "src/parser.re"
+#line 325 "src/parser.re"
                        { char_width = 1; }
-#line 3298 "src/parser.c"
+#line 3300 "src/parser.c"
 yy284:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -3326,27 +3328,27 @@ yy287:
 yy288:
                        ++cur;
                        cur -= 2;
-#line 318 "src/parser.re"
+#line 320 "src/parser.re"
                        { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_FLT | PSI_NUMBER_DD; cur += 2; goto start; }
-#line 3332 "src/parser.c"
+#line 3334 "src/parser.c"
 yy290:
                        ++cur;
                        cur -= 2;
-#line 317 "src/parser.re"
+#line 319 "src/parser.re"
                        { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_FLT | PSI_NUMBER_DF; cur += 2; goto start; }
-#line 3338 "src/parser.c"
+#line 3340 "src/parser.c"
 yy292:
                        ++cur;
                        cur -= 2;
-#line 319 "src/parser.re"
+#line 321 "src/parser.re"
                        { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_FLT | PSI_NUMBER_DL; cur += 2; goto start; }
-#line 3344 "src/parser.c"
+#line 3346 "src/parser.c"
 yy294:
                        ++cur;
                        cur -= 3;
-#line 312 "src/parser.re"
+#line 314 "src/parser.re"
                        { NEWTOKEN(PSI_T_NUMBER); token->flags = PSI_NUMBER_INT | PSI_NUMBER_ULL; cur += 3; goto start; }
-#line 3350 "src/parser.c"
+#line 3352 "src/parser.c"
 yy296:
                        ++cur;
                        if ((lim - cur) < 3) if (cur >= lim) goto done;;
@@ -3502,9 +3504,9 @@ yy304:
                        default:        goto yy61;
                        }
 yy305:
-#line 395 "src/parser.re"
+#line 397 "src/parser.re"
                        { NEWTOKEN(PSI_T_ELIF); goto start; }
-#line 3508 "src/parser.c"
+#line 3510 "src/parser.c"
 yy306:
                        yyaccept = 16;
                        yych = *(mrk = ++cur);
@@ -3577,9 +3579,9 @@ yy306:
                        default:        goto yy61;
                        }
 yy307:
-#line 394 "src/parser.re"
+#line 396 "src/parser.re"
                        { NEWTOKEN(PSI_T_ELSE); goto start; }
-#line 3583 "src/parser.c"
+#line 3585 "src/parser.c"
 yy308:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -3684,9 +3686,9 @@ yy312:
                        default:        goto yy61;
                        }
 yy313:
-#line 422 "src/parser.re"
+#line 424 "src/parser.re"
                        { NEWTOKEN(PSI_T_FREE); goto start; }
-#line 3690 "src/parser.c"
+#line 3692 "src/parser.c"
 yy314:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -3807,9 +3809,9 @@ yy320:
                        default:        goto yy61;
                        }
 yy321:
-#line 406 "src/parser.re"
+#line 408 "src/parser.re"
                        { NEWTOKEN(PSI_T_NULL); goto start; }
-#line 3813 "src/parser.c"
+#line 3815 "src/parser.c"
 yy322:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -3961,9 +3963,9 @@ yy332:
                        default:        goto yy61;
                        }
 yy333:
-#line 423 "src/parser.re"
+#line 425 "src/parser.re"
                        { NEWTOKEN(PSI_T_TEMP); goto start; }
-#line 3967 "src/parser.c"
+#line 3969 "src/parser.c"
 yy334:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -4084,9 +4086,9 @@ yy340:
                        default:        goto yy61;
                        }
 yy341:
-#line 404 "src/parser.re"
+#line 406 "src/parser.re"
                        { NEWTOKEN(PSI_T_TRUE); goto start; }
-#line 4090 "src/parser.c"
+#line 4092 "src/parser.c"
 yy342:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -4175,9 +4177,9 @@ yy344:
                        default:        goto yy61;
                        }
 yy345:
-#line 432 "src/parser.re"
+#line 434 "src/parser.re"
                        { NEWTOKEN(PSI_T_ZVAL); goto start; }
-#line 4181 "src/parser.c"
+#line 4183 "src/parser.c"
 yy346:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -4287,9 +4289,9 @@ yy351:
                        default:        goto yy61;
                        }
 yy352:
-#line 382 "src/parser.re"
+#line 384 "src/parser.re"
                        { NEWTOKEN(PSI_T_BOOL); goto start; }
-#line 4293 "src/parser.c"
+#line 4295 "src/parser.c"
 yy353:
                        yyaccept = 23;
                        yych = *(mrk = ++cur);
@@ -4362,9 +4364,9 @@ yy353:
                        default:        goto yy61;
                        }
 yy354:
-#line 383 "src/parser.re"
+#line 385 "src/parser.re"
                        { NEWTOKEN(PSI_T_CHAR); goto start; }
-#line 4368 "src/parser.c"
+#line 4370 "src/parser.c"
 yy355:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -4451,9 +4453,9 @@ yy357:
                        default:        goto yy61;
                        }
 yy358:
-#line 379 "src/parser.re"
+#line 381 "src/parser.re"
                        { NEWTOKEN(PSI_T_ENUM); goto start; }
-#line 4457 "src/parser.c"
+#line 4459 "src/parser.c"
 yy359:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -4534,9 +4536,9 @@ yy360:
                        default:        goto yy61;
                        }
 yy361:
-#line 375 "src/parser.re"
+#line 377 "src/parser.re"
                        { NEWTOKEN(PSI_T_LINE); goto start; }
-#line 4540 "src/parser.c"
+#line 4542 "src/parser.c"
 yy362:
                        yyaccept = 26;
                        yych = *(mrk = ++cur);
@@ -4609,9 +4611,9 @@ yy362:
                        default:        goto yy61;
                        }
 yy363:
-#line 386 "src/parser.re"
+#line 388 "src/parser.re"
                        { NEWTOKEN(PSI_T_LONG); goto start; }
-#line 4615 "src/parser.c"
+#line 4617 "src/parser.c"
 yy364:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -4740,9 +4742,9 @@ yy372:
                        default:        goto yy61;
                        }
 yy373:
-#line 381 "src/parser.re"
+#line 383 "src/parser.re"
                        { NEWTOKEN(PSI_T_VOID); goto start; }
-#line 4746 "src/parser.c"
+#line 4748 "src/parser.c"
 yy374:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -4822,9 +4824,9 @@ yy375:
                        default:        goto yy61;
                        }
 yy376:
-#line 410 "src/parser.re"
+#line 412 "src/parser.re"
                        { NEWTOKEN(PSI_T_ARRAY); goto start; }
-#line 4828 "src/parser.c"
+#line 4830 "src/parser.c"
 yy377:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -4937,9 +4939,9 @@ yy382:
                        default:        goto yy61;
                        }
 yy383:
-#line 433 "src/parser.re"
+#line 435 "src/parser.re"
                        { NEWTOKEN(PSI_T_COUNT); goto start; }
-#line 4943 "src/parser.c"
+#line 4945 "src/parser.c"
 yy384:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -5020,9 +5022,9 @@ yy385:
                        default:        goto yy61;
                        }
 yy386:
-#line 396 "src/parser.re"
+#line 398 "src/parser.re"
                        { NEWTOKEN(PSI_T_ENDIF); goto start; }
-#line 5026 "src/parser.c"
+#line 5028 "src/parser.c"
 yy387:
                        yyaccept = 31;
                        yych = *(mrk = ++cur);
@@ -5095,9 +5097,9 @@ yy387:
                        default:        goto yy61;
                        }
 yy388:
-#line 401 "src/parser.re"
+#line 403 "src/parser.re"
                        { NEWTOKEN(PSI_T_ERROR); goto start; }
-#line 5101 "src/parser.c"
+#line 5103 "src/parser.c"
 yy389:
                        yyaccept = 32;
                        yych = *(mrk = ++cur);
@@ -5170,9 +5172,9 @@ yy389:
                        default:        goto yy61;
                        }
 yy390:
-#line 405 "src/parser.re"
+#line 407 "src/parser.re"
                        { NEWTOKEN(PSI_T_FALSE); goto start; }
-#line 5176 "src/parser.c"
+#line 5178 "src/parser.c"
 yy391:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -5261,9 +5263,9 @@ yy393:
                        default:        goto yy61;
                        }
 yy394:
-#line 392 "src/parser.re"
+#line 394 "src/parser.re"
                        { NEWTOKEN(PSI_T_IFDEF); goto start; }
-#line 5267 "src/parser.c"
+#line 5269 "src/parser.c"
 yy395:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -5360,9 +5362,9 @@ yy398:
                        default:        goto yy61;
                        }
 yy399:
-#line 407 "src/parser.re"
+#line 409 "src/parser.re"
                        { NEWTOKEN(PSI_T_MIXED); goto start; }
-#line 5366 "src/parser.c"
+#line 5368 "src/parser.c"
 yy400:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -5563,9 +5565,9 @@ yy416:
                        default:        goto yy61;
                        }
 yy417:
-#line 399 "src/parser.re"
+#line 401 "src/parser.re"
                        { NEWTOKEN(PSI_T_UNDEF); goto start; }
-#line 5569 "src/parser.c"
+#line 5571 "src/parser.c"
 yy418:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -5681,9 +5683,9 @@ yy424:
                        default:        goto yy61;
                        }
 yy425:
-#line 380 "src/parser.re"
+#line 382 "src/parser.re"
                        { NEWTOKEN(PSI_T_CONST); goto start; }
-#line 5687 "src/parser.c"
+#line 5689 "src/parser.c"
 yy426:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -5765,9 +5767,9 @@ yy427:
                        default:        goto yy61;
                        }
 yy428:
-#line 387 "src/parser.re"
+#line 389 "src/parser.re"
                        { NEWTOKEN(PSI_T_FLOAT); goto start; }
-#line 5771 "src/parser.c"
+#line 5773 "src/parser.c"
 yy429:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -5847,9 +5849,9 @@ yy430:
                        default:        goto yy61;
                        }
 yy431:
-#line 384 "src/parser.re"
+#line 386 "src/parser.re"
                        { NEWTOKEN(PSI_T_SHORT); goto start; }
-#line 5853 "src/parser.c"
+#line 5855 "src/parser.c"
 yy432:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -5950,9 +5952,9 @@ yy436:
                        default:        goto yy61;
                        }
 yy437:
-#line 378 "src/parser.re"
+#line 380 "src/parser.re"
                        { NEWTOKEN(PSI_T_UNION); goto start; }
-#line 5956 "src/parser.c"
+#line 5958 "src/parser.c"
 yy438:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -6039,9 +6041,9 @@ yy440:
                        default:        goto yy61;
                        }
 yy441:
-#line 430 "src/parser.re"
+#line 432 "src/parser.re"
                        { NEWTOKEN(PSI_T_ARRVAL); goto start; }
-#line 6045 "src/parser.c"
+#line 6047 "src/parser.c"
 yy442:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -6138,9 +6140,9 @@ yy445:
                        default:        goto yy61;
                        }
 yy446:
-#line 434 "src/parser.re"
+#line 436 "src/parser.re"
                        { NEWTOKEN(PSI_T_CALLOC); goto start; }
-#line 6144 "src/parser.c"
+#line 6146 "src/parser.c"
 yy447:
                        yyaccept = 42;
                        yych = *(mrk = ++cur);
@@ -6215,9 +6217,9 @@ yy447:
                        default:        goto yy61;
                        }
 yy448:
-#line 397 "src/parser.re"
+#line 399 "src/parser.re"
                        { NEWTOKEN(PSI_T_DEFINE); goto start; }
-#line 6221 "src/parser.c"
+#line 6223 "src/parser.c"
 yy449:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -6306,9 +6308,9 @@ yy451:
                        default:        goto yy61;
                        }
 yy452:
-#line 393 "src/parser.re"
+#line 395 "src/parser.re"
                        { NEWTOKEN(PSI_T_IFNDEF); goto start; }
-#line 6312 "src/parser.c"
+#line 6314 "src/parser.c"
 yy453:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -6389,9 +6391,9 @@ yy454:
                        default:        goto yy61;
                        }
 yy455:
-#line 427 "src/parser.re"
+#line 429 "src/parser.re"
                        { NEWTOKEN(PSI_T_INTVAL); goto start; }
-#line 6395 "src/parser.c"
+#line 6397 "src/parser.c"
 yy456:
                        yyaccept = 45;
                        yych = *(mrk = ++cur);
@@ -6464,9 +6466,9 @@ yy456:
                        default:        goto yy61;
                        }
 yy457:
-#line 411 "src/parser.re"
+#line 413 "src/parser.re"
                        { NEWTOKEN(PSI_T_OBJECT); goto start; }
-#line 6470 "src/parser.c"
+#line 6472 "src/parser.c"
 yy458:
                        yyaccept = 46;
                        yych = *(mrk = ++cur);
@@ -6539,9 +6541,9 @@ yy458:
                        default:        goto yy61;
                        }
 yy459:
-#line 431 "src/parser.re"
+#line 433 "src/parser.re"
                        { NEWTOKEN(PSI_T_OBJVAL); goto start; }
-#line 6545 "src/parser.c"
+#line 6547 "src/parser.c"
 yy460:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -6638,9 +6640,9 @@ yy463:
                        default:        goto yy61;
                        }
 yy464:
-#line 420 "src/parser.re"
+#line 422 "src/parser.re"
                        { NEWTOKEN(PSI_T_RETURN); goto start; }
-#line 6644 "src/parser.c"
+#line 6646 "src/parser.c"
 yy465:
                        yyaccept = 48;
                        yych = *(mrk = ++cur);
@@ -6713,9 +6715,9 @@ yy465:
                        default:        goto yy61;
                        }
 yy466:
-#line 413 "src/parser.re"
+#line 415 "src/parser.re"
                        { NEWTOKEN(PSI_T_STATIC); goto start; }
-#line 6719 "src/parser.c"
+#line 6721 "src/parser.c"
 yy467:
                        yyaccept = 49;
                        yych = *(mrk = ++cur);
@@ -6788,9 +6790,9 @@ yy467:
                        default:        goto yy61;
                        }
 yy468:
-#line 409 "src/parser.re"
+#line 411 "src/parser.re"
                        { NEWTOKEN(PSI_T_STRING); goto start; }
-#line 6794 "src/parser.c"
+#line 6796 "src/parser.c"
 yy469:
                        yyaccept = 50;
                        yych = *(mrk = ++cur);
@@ -6863,9 +6865,9 @@ yy469:
                        default:        goto yy61;
                        }
 yy470:
-#line 424 "src/parser.re"
+#line 426 "src/parser.re"
                        { NEWTOKEN(PSI_T_STRLEN); goto start; }
-#line 6869 "src/parser.c"
+#line 6871 "src/parser.c"
 yy471:
                        yyaccept = 51;
                        yych = *(mrk = ++cur);
@@ -6938,9 +6940,9 @@ yy471:
                        default:        goto yy61;
                        }
 yy472:
-#line 425 "src/parser.re"
+#line 427 "src/parser.re"
                        { NEWTOKEN(PSI_T_STRVAL); goto start; }
-#line 6944 "src/parser.c"
+#line 6946 "src/parser.c"
 yy473:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -7037,9 +7039,9 @@ yy476:
                        default:        goto yy61;
                        }
 yy477:
-#line 438 "src/parser.re"
+#line 440 "src/parser.re"
                        { NEWTOKEN(PSI_T_TO_INT); goto start; }
-#line 7043 "src/parser.c"
+#line 7045 "src/parser.c"
 yy478:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -7171,9 +7173,9 @@ yy486:
                        default:        goto yy61;
                        }
 yy487:
-#line 388 "src/parser.re"
+#line 390 "src/parser.re"
                        { NEWTOKEN(PSI_T_DOUBLE); goto start; }
-#line 7177 "src/parser.c"
+#line 7179 "src/parser.c"
 yy488:
                        yyaccept = 54;
                        yych = *(mrk = ++cur);
@@ -7246,9 +7248,9 @@ yy488:
                        default:        goto yy527;
                        }
 yy489:
-#line 367 "src/parser.re"
+#line 369 "src/parser.re"
                        { NEWTOKEN(PSI_T_PRAGMA); goto start; }
-#line 7252 "src/parser.c"
+#line 7254 "src/parser.c"
 yy490:
                        yyaccept = 55;
                        yych = *(mrk = ++cur);
@@ -7321,9 +7323,9 @@ yy490:
                        default:        goto yy61;
                        }
 yy491:
-#line 390 "src/parser.re"
+#line 392 "src/parser.re"
                        { NEWTOKEN(PSI_T_SIGNED); goto start; }
-#line 7327 "src/parser.c"
+#line 7329 "src/parser.c"
 yy492:
                        yyaccept = 56;
                        yych = *(mrk = ++cur);
@@ -7396,9 +7398,9 @@ yy492:
                        default:        goto yy61;
                        }
 yy493:
-#line 374 "src/parser.re"
+#line 376 "src/parser.re"
                        { NEWTOKEN(PSI_T_SIZEOF); goto start; }
-#line 7402 "src/parser.c"
+#line 7404 "src/parser.c"
 yy494:
                        yyaccept = 57;
                        yych = *(mrk = ++cur);
@@ -7471,9 +7473,9 @@ yy494:
                        default:        goto yy61;
                        }
 yy495:
-#line 377 "src/parser.re"
+#line 379 "src/parser.re"
                        { NEWTOKEN(PSI_T_STRUCT); goto start; }
-#line 7477 "src/parser.c"
+#line 7479 "src/parser.c"
 yy496:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -7567,9 +7569,9 @@ yy499:
                        default:        goto yy61;
                        }
 yy500:
-#line 429 "src/parser.re"
+#line 431 "src/parser.re"
                        { NEWTOKEN(PSI_T_BOOLVAL); goto start; }
-#line 7573 "src/parser.c"
+#line 7575 "src/parser.c"
 yy501:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -7658,9 +7660,9 @@ yy503:
                        default:        goto yy61;
                        }
 yy504:
-#line 398 "src/parser.re"
+#line 400 "src/parser.re"
                        { NEWTOKEN(PSI_T_DEFINED); goto start; }
-#line 7664 "src/parser.c"
+#line 7666 "src/parser.c"
 yy505:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -7750,9 +7752,9 @@ yy507:
                        default:        goto yy61;
                        }
 yy508:
-#line 402 "src/parser.re"
+#line 404 "src/parser.re"
                        { NEWTOKEN(PSI_T_INCLUDE); goto start; }
-#line 7756 "src/parser.c"
+#line 7758 "src/parser.c"
 yy509:
                        yyaccept = 61;
                        yych = *(mrk = ++cur);
@@ -7825,9 +7827,9 @@ yy509:
                        default:        goto yy61;
                        }
 yy510:
-#line 426 "src/parser.re"
+#line 428 "src/parser.re"
                        { NEWTOKEN(PSI_T_PATHVAL); goto start; }
-#line 7831 "src/parser.c"
+#line 7833 "src/parser.c"
 yy511:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -7924,9 +7926,9 @@ yy514:
                        default:        goto yy61;
                        }
 yy515:
-#line 440 "src/parser.re"
+#line 442 "src/parser.re"
                        { NEWTOKEN(PSI_T_TO_BOOL); goto start; }
-#line 7930 "src/parser.c"
+#line 7932 "src/parser.c"
 yy516:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -8023,9 +8025,9 @@ yy519:
                        default:        goto yy61;
                        }
 yy520:
-#line 400 "src/parser.re"
+#line 402 "src/parser.re"
                        { NEWTOKEN(PSI_T_WARNING); goto start; }
-#line 8029 "src/parser.c"
+#line 8031 "src/parser.c"
 yy521:
                        yyaccept = 64;
                        yych = *(mrk = ++cur);
@@ -8098,9 +8100,9 @@ yy521:
                        default:        goto yy61;
                        }
 yy522:
-#line 372 "src/parser.re"
+#line 374 "src/parser.re"
                        { NEWTOKEN(PSI_T_CPP_ASM); goto start; }
-#line 8104 "src/parser.c"
+#line 8106 "src/parser.c"
 yy523:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -8275,9 +8277,9 @@ yy529:
                        default:        goto yy61;
                        }
 yy530:
-#line 376 "src/parser.re"
+#line 378 "src/parser.re"
                        { NEWTOKEN(PSI_T_TYPEDEF); goto start; }
-#line 8281 "src/parser.c"
+#line 8283 "src/parser.c"
 yy531:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -8364,9 +8366,9 @@ yy533:
                        default:        goto yy61;
                        }
 yy534:
-#line 408 "src/parser.re"
+#line 410 "src/parser.re"
                        { NEWTOKEN(PSI_T_CALLABLE); goto start; }
-#line 8370 "src/parser.c"
+#line 8372 "src/parser.c"
 yy535:
                        yyaccept = 67;
                        yych = *(mrk = ++cur);
@@ -8439,9 +8441,9 @@ yy535:
                        default:        goto yy61;
                        }
 yy536:
-#line 412 "src/parser.re"
+#line 414 "src/parser.re"
                        { NEWTOKEN(PSI_T_CALLBACK); goto start; }
-#line 8445 "src/parser.c"
+#line 8447 "src/parser.c"
 yy537:
                        yyaccept = 68;
                        yych = *(mrk = ++cur);
@@ -8514,9 +8516,9 @@ yy537:
                        default:        goto yy61;
                        }
 yy538:
-#line 428 "src/parser.re"
+#line 430 "src/parser.re"
                        { NEWTOKEN(PSI_T_FLOATVAL); goto start; }
-#line 8520 "src/parser.c"
+#line 8522 "src/parser.c"
 yy539:
                        yyaccept = 69;
                        yych = *(mrk = ++cur);
@@ -8589,9 +8591,9 @@ yy539:
                        default:        goto yy61;
                        }
 yy540:
-#line 414 "src/parser.re"
+#line 416 "src/parser.re"
                        { NEWTOKEN(PSI_T_FUNCTION); goto start; }
-#line 8595 "src/parser.c"
+#line 8597 "src/parser.c"
 yy541:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -8688,9 +8690,9 @@ yy544:
                        default:        goto yy61;
                        }
 yy545:
-#line 436 "src/parser.re"
+#line 438 "src/parser.re"
                        { NEWTOKEN(PSI_T_TO_ARRAY); goto start; }
-#line 8694 "src/parser.c"
+#line 8696 "src/parser.c"
 yy546:
                        yyaccept = 71;
                        yych = *(mrk = ++cur);
@@ -8763,9 +8765,9 @@ yy546:
                        default:        goto yy61;
                        }
 yy547:
-#line 439 "src/parser.re"
+#line 441 "src/parser.re"
                        { NEWTOKEN(PSI_T_TO_FLOAT); goto start; }
-#line 8769 "src/parser.c"
+#line 8771 "src/parser.c"
 yy548:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -8868,9 +8870,9 @@ yy552:
                        default:        goto yy61;
                        }
 yy553:
-#line 369 "src/parser.re"
+#line 371 "src/parser.re"
                        { NEWTOKEN(PSI_T_CPP_INLINE); goto start; }
-#line 8874 "src/parser.c"
+#line 8876 "src/parser.c"
 yy554:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -9025,9 +9027,9 @@ yy557:
                        default:        goto yy61;
                        }
 yy558:
-#line 389 "src/parser.re"
+#line 391 "src/parser.re"
                        { NEWTOKEN(PSI_T_UNSIGNED); goto start; }
-#line 9031 "src/parser.c"
+#line 9033 "src/parser.c"
 yy559:
                        yyaccept = 74;
                        yych = *(mrk = ++cur);
@@ -9100,9 +9102,9 @@ yy559:
                        default:        goto yy61;
                        }
 yy560:
-#line 373 "src/parser.re"
+#line 375 "src/parser.re"
                        { NEWTOKEN(PSI_T_VOLATILE); goto start; }
-#line 9106 "src/parser.c"
+#line 9108 "src/parser.c"
 yy561:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -9199,9 +9201,9 @@ yy564:
                        default:        goto yy61;
                        }
 yy565:
-#line 435 "src/parser.re"
+#line 437 "src/parser.re"
                        { NEWTOKEN(PSI_T_TO_OBJECT); goto start; }
-#line 9205 "src/parser.c"
+#line 9207 "src/parser.c"
 yy566:
                        yyaccept = 76;
                        yych = *(mrk = ++cur);
@@ -9274,9 +9276,9 @@ yy566:
                        default:        goto yy61;
                        }
 yy567:
-#line 437 "src/parser.re"
+#line 439 "src/parser.re"
                        { NEWTOKEN(PSI_T_TO_STRING); goto start; }
-#line 9280 "src/parser.c"
+#line 9282 "src/parser.c"
 yy568:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -9461,9 +9463,9 @@ yy574:
                        default:        goto yy61;
                        }
 yy575:
-#line 418 "src/parser.re"
+#line 420 "src/parser.re"
                        { NEWTOKEN(PSI_T_PRE_ASSERT); goto start; }
-#line 9467 "src/parser.c"
+#line 9469 "src/parser.c"
 yy576:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -9550,9 +9552,9 @@ yy578:
                        default:        goto yy61;
                        }
 yy579:
-#line 370 "src/parser.re"
+#line 372 "src/parser.re"
                        { NEWTOKEN(PSI_T_CPP_RESTRICT); goto start; }
-#line 9556 "src/parser.c"
+#line 9558 "src/parser.c"
 yy580:
                        yyaccept = 5;
                        mrk = ++cur;
@@ -9708,9 +9710,9 @@ yy582:
                        default:        goto yy61;
                        }
 yy583:
-#line 419 "src/parser.re"
+#line 421 "src/parser.re"
                        { NEWTOKEN(PSI_T_POST_ASSERT); goto start; }
-#line 9714 "src/parser.c"
+#line 9716 "src/parser.c"
 yy584:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -9800,9 +9802,9 @@ yy586:
                        default:        goto yy527;
                        }
 yy587:
-#line 368 "src/parser.re"
+#line 370 "src/parser.re"
                        { NEWTOKEN(PSI_T_PRAGMA_ONCE); goto start; }
-#line 9806 "src/parser.c"
+#line 9808 "src/parser.c"
 yy588:
                        yyaccept = 81;
                        yych = *(mrk = ++cur);
@@ -9875,9 +9877,9 @@ yy588:
                        default:        goto yy61;
                        }
 yy589:
-#line 403 "src/parser.re"
+#line 405 "src/parser.re"
                        { NEWTOKEN(PSI_T_INCLUDE_NEXT); goto start; }
-#line 9881 "src/parser.c"
+#line 9883 "src/parser.c"
 yy590:
                        yyaccept = 5;
                        yych = *(mrk = ++cur);
@@ -9974,9 +9976,9 @@ yy593:
                        default:        goto yy61;
                        }
 yy594:
-#line 371 "src/parser.re"
+#line 373 "src/parser.re"
                        { NEWTOKEN(PSI_T_CPP_EXTENSION); goto start; }
-#line 9980 "src/parser.c"
+#line 9982 "src/parser.c"
 yy595:
                        ++cur;
                        if ((lim - cur) < 2) if (cur >= lim) goto done;;
@@ -9996,16 +9998,16 @@ yy597:
                        }
 yy598:
                        ++cur;
-#line 445 "src/parser.re"
+#line 447 "src/parser.re"
                        { parens = 2; goto cpp_attribute; }
-#line 10002 "src/parser.c"
+#line 10004 "src/parser.c"
                }
-#line 451 "src/parser.re"
+#line 453 "src/parser.re"
 
 
        character: ;
                
-#line 10009 "src/parser.c"
+#line 10011 "src/parser.c"
                {
                        unsigned char yych;
                        if (lim <= cur) if (cur >= lim) goto done;;
@@ -10019,17 +10021,17 @@ yy598:
                        }
 yy602:
                        ++cur;
-#line 469 "src/parser.re"
+#line 471 "src/parser.re"
                        { escaped = false; goto character; }
-#line 10025 "src/parser.c"
+#line 10027 "src/parser.c"
 yy604:
                        ++cur;
-#line 456 "src/parser.re"
+#line 458 "src/parser.re"
                        { NEWLINE(); goto character; }
-#line 10030 "src/parser.c"
+#line 10032 "src/parser.c"
 yy606:
                        ++cur;
-#line 458 "src/parser.re"
+#line 460 "src/parser.re"
                        {
                        if (escaped) {
                                escaped = false;
@@ -10041,19 +10043,19 @@ yy606:
                        token->flags = char_width;
                        goto start;
                }
-#line 10045 "src/parser.c"
+#line 10047 "src/parser.c"
 yy608:
                        ++cur;
-#line 457 "src/parser.re"
+#line 459 "src/parser.re"
                        { escaped = !escaped;  goto character; }
-#line 10050 "src/parser.c"
+#line 10052 "src/parser.c"
                }
-#line 471 "src/parser.re"
+#line 473 "src/parser.re"
 
 
        string: ;
                
-#line 10057 "src/parser.c"
+#line 10059 "src/parser.c"
                {
                        unsigned char yych;
                        if (lim <= cur) if (cur >= lim) goto done;;
@@ -10067,17 +10069,17 @@ yy608:
                        }
 yy612:
                        ++cur;
-#line 489 "src/parser.re"
+#line 491 "src/parser.re"
                        { escaped = false; goto string; }
-#line 10073 "src/parser.c"
+#line 10075 "src/parser.c"
 yy614:
                        ++cur;
-#line 476 "src/parser.re"
+#line 478 "src/parser.re"
                        { NEWLINE(); goto string; }
-#line 10078 "src/parser.c"
+#line 10080 "src/parser.c"
 yy616:
                        ++cur;
-#line 478 "src/parser.re"
+#line 480 "src/parser.re"
                        {
                        if (escaped) {
                                escaped = false;
@@ -10089,19 +10091,19 @@ yy616:
                        token->flags = char_width;
                        goto start;
                }
-#line 10093 "src/parser.c"
+#line 10095 "src/parser.c"
 yy618:
                        ++cur;
-#line 477 "src/parser.re"
+#line 479 "src/parser.re"
                        { escaped = !escaped; goto string; }
-#line 10098 "src/parser.c"
+#line 10100 "src/parser.c"
                }
-#line 491 "src/parser.re"
+#line 493 "src/parser.re"
 
 
        comment: ;
                
-#line 10105 "src/parser.c"
+#line 10107 "src/parser.c"
                {
                        unsigned char yych;
                        if ((lim - cur) < 2) if (cur >= lim) goto done;;
@@ -10115,14 +10117,14 @@ yy618:
 yy622:
                        ++cur;
 yy623:
-#line 498 "src/parser.re"
+#line 500 "src/parser.re"
                        { goto comment; }
-#line 10121 "src/parser.c"
+#line 10123 "src/parser.c"
 yy624:
                        ++cur;
-#line 496 "src/parser.re"
+#line 498 "src/parser.re"
                        { NEWLINE(); goto comment; }
-#line 10126 "src/parser.c"
+#line 10128 "src/parser.c"
 yy626:
                        yych = *++cur;
                        switch (yych) {
@@ -10131,16 +10133,16 @@ yy626:
                        }
 yy627:
                        ++cur;
-#line 497 "src/parser.re"
+#line 499 "src/parser.re"
                        { NEWTOKEN(PSI_T_COMMENT); goto start; }
-#line 10137 "src/parser.c"
+#line 10139 "src/parser.c"
                }
-#line 500 "src/parser.re"
+#line 502 "src/parser.re"
 
 
        comment_sl: ;
                
-#line 10144 "src/parser.c"
+#line 10146 "src/parser.c"
                {
                        unsigned char yych;
                        if (lim <= cur) if (cur >= lim) goto done;;
@@ -10152,22 +10154,22 @@ yy627:
                        }
 yy631:
                        ++cur;
-#line 506 "src/parser.re"
+#line 508 "src/parser.re"
                        { goto comment_sl; }
-#line 10158 "src/parser.c"
+#line 10160 "src/parser.c"
 yy633:
                        ++cur;
-#line 505 "src/parser.re"
+#line 507 "src/parser.re"
                        { NEWTOKEN(PSI_T_COMMENT); NEWLINE(); goto start; }
-#line 10163 "src/parser.c"
+#line 10165 "src/parser.c"
                }
-#line 508 "src/parser.re"
+#line 510 "src/parser.re"
 
 
        cpp_attribute: ;
 
                
-#line 10171 "src/parser.c"
+#line 10173 "src/parser.c"
                {
                        unsigned char yych;
                        if (lim <= cur) if (cur >= lim) goto done;;
@@ -10181,26 +10183,26 @@ yy633:
                        }
 yy637:
                        ++cur;
-#line 517 "src/parser.re"
+#line 519 "src/parser.re"
                        { goto cpp_attribute; }
-#line 10187 "src/parser.c"
+#line 10189 "src/parser.c"
 yy639:
                        ++cur;
-#line 516 "src/parser.re"
+#line 518 "src/parser.re"
                        { NEWLINE(); goto cpp_attribute; }
-#line 10192 "src/parser.c"
+#line 10194 "src/parser.c"
 yy641:
                        ++cur;
-#line 514 "src/parser.re"
+#line 516 "src/parser.re"
                        { ++parens; goto cpp_attribute; }
-#line 10197 "src/parser.c"
+#line 10199 "src/parser.c"
 yy643:
                        ++cur;
-#line 515 "src/parser.re"
+#line 517 "src/parser.re"
                        { if (parens == 1) { NEWTOKEN(PSI_T_CPP_ATTRIBUTE); goto start; } else { --parens; goto cpp_attribute; } }
-#line 10202 "src/parser.c"
+#line 10204 "src/parser.c"
                }
-#line 519 "src/parser.re"
+#line 521 "src/parser.re"
 
 error: ;
 
index b70022c..3fdd866 100644 (file)
@@ -275,6 +275,8 @@ struct psi_plist *psi_parser_scan(struct psi_parser *P, struct psi_parser_input
                ctxmrk = NULL;
                tok = cur;
 
+               (void) ctxmrk;
+
                /*!re2c
 
                re2c:indent:top = 2;
index e2a58b0..f9f607d 100644 (file)
@@ -279,7 +279,7 @@ static inline void psi_parser_proc_add_impl(struct psi_parser *P, struct psi_imp
 #define YYLAST   3793
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  128
+#define YYNTOKENS  140
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  135
 /* YYNRULES -- Number of rules.  */
@@ -294,7 +294,7 @@ static inline void psi_parser_proc_add_impl(struct psi_parser *P, struct psi_imp
 
 /* YYTRANSLATE(X) -- Bison symbol number corresponding to X.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   382
+#define YYMAXUTOK   394
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -340,76 +340,77 @@ static const unsigned char yytranslate[] =
       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
      105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
      115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139
 };
 
 #if YYDEBUG
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short int yyrline[] =
 {
-       0,   379,   379,   379,   379,   379,   379,   379,   379,   379,
-     379,   379,   379,   379,   379,   379,   379,   379,   379,   379,
-     380,   380,   380,   380,   381,   381,   381,   381,   381,   381,
-     381,   381,   381,   381,   381,   381,   381,   381,   381,   381,
-     381,   381,   381,   382,   382,   382,   382,   382,   382,   382,
-     382,   382,   382,   382,   382,   382,   382,   382,   382,   382,
-     382,   382,   382,   382,   382,   382,   382,   382,   382,   382,
-     382,   382,   382,   382,   382,   382,   382,   382,   382,   382,
-     382,   382,   382,   382,   382,   382,   382,   382,   382,   382,
-     382,   382,   382,   382,   382,   382,   382,   382,   382,   382,
-     382,   382,   382,   382,   382,   382,   382,   382,   382,   382,
-     382,   382,   382,   382,   382,   382,   382,   382,   382,   382,
-     382,   382,   382,   382,   382,   382,   382,   382,   382,   382,
-     382,   382,   382,   382,   382,   382,   382,   382,   382,   382,
-     382,   382,   382,   382,   382,   382,   382,   382,   382,   382,
-     382,   382,   382,   382,   382,   382,   382,   382,   382,   382,
-     382,   383,   383,   383,   383,   383,   383,   383,   383,   383,
-     383,   383,   383,   383,   383,   383,   383,   383,   383,   383,
-     383,   383,   383,   383,   383,   383,   383,   383,   383,   383,
-     383,   383,   383,   383,   383,   383,   383,   383,   383,   383,
-     383,   383,   383,   383,   383,   383,   383,   383,   383,   383,
-     383,   383,   383,   383,   383,   383,   383,   383,   383,   383,
-     383,   383,   383,   383,   383,   383,   383,   383,   383,   383,
-     383,   383,   383,   383,   383,   383,   383,   383,   383,   383,
-     383,   383,   383,   383,   383,   383,   383,   383,   383,   383,
-     383,   383,   383,   383,   383,   383,   383,   383,   383,   383,
-     383,   383,   383,   383,   383,   383,   383,   383,   383,   383,
-     383,   383,   383,   383,   383,   383,   383,   387,   388,   391,
-     392,   395,   396,   397,   398,   404,   412,   415,   418,   419,
-     420,   423,   426,   429,   432,   438,   444,   447,   453,   476,
-     480,   484,   489,   493,   497,   501,   508,   509,   513,   514,
-     518,   519,   520,   524,   525,   529,   530,   534,   535,   536,
-     540,   541,   545,   546,   547,   548,   549,   550,   551,   555,
-     560,   568,   571,   574,   575,   581,   586,   594,   597,   601,
-     605,   612,   616,   620,   624,   629,   639,   649,   654,   659,
-     663,   669,   678,   681,   685,   689,   695,   702,   708,   709,
-     710,   711,   715,   718,   749,   756,   757,   758,   759,   763,
-     766,   775,   781,   784,   790,   793,   799,   800,   808,   819,
-     828,   840,   841,   845,   855,   864,   876,   879,   882,   886,
-     890,   894,   899,   904,   912,   913,   914,   920,   923,   926,
-     932,   933,   937,   940,   943,   949,   952,   955,   963,   975,
-     978,   981,   984,   991,   994,  1004,  1007,  1010,  1013,  1014,
-    1015,  1019,  1022,  1025,  1036,  1039,  1045,  1046,  1050,  1051,
-    1055,  1059,  1065,  1066,  1072,  1075,  1081,  1084,  1087,  1093,
-    1097,  1098,  1102,  1103,  1107,  1108,  1115,  1116,  1120,  1127,
-    1138,  1145,  1156,  1163,  1174,  1185,  1199,  1200,  1212,  1215,
-    1218,  1221,  1228,  1231,  1237,  1246,  1258,  1266,  1269,  1279,
-    1292,  1297,  1305,  1315,  1325,  1328,  1332,  1338,  1352,  1369,
-    1372,  1378,  1385,  1395,  1402,  1405,  1411,  1416,  1424,  1428,
-    1432,  1436,  1440,  1444,  1451,  1455,  1459,  1463,  1467,  1471,
-    1477,  1481,  1488,  1491,  1502,  1506,  1510,  1516,  1529,  1542,
-    1555,  1558,  1565,  1568,  1571,  1574,  1580,  1584,  1591,  1594,
-    1597,  1607,  1610,  1616,  1617,  1623,  1626,  1632,  1633,  1643,
-    1646,  1653,  1658,  1663,  1673,  1676,  1682,  1685,  1691,  1698,
-    1705,  1706,  1707,  1708,  1709,  1710,  1711,  1712,  1713,  1717,
-    1720,  1726,  1729,  1732,  1735,  1738,  1744,  1748,  1756,  1757,
-    1761,  1768,  1771,  1774,  1777,  1781,  1784,  1790,  1794,  1802,
-    1809,  1817,  1825,  1826,  1827,  1828,  1829,  1830,  1831,  1832,
-    1833,  1834,  1838,  1841,  1847,  1850,  1856,  1857,  1861,  1864,
-    1870,  1873,  1879,  1886,  1890,  1897,  1900,  1903,  1909,  1916,
-    1919,  1922,  1929,  1934,  1942,  1943,  1944,  1945,  1946,  1947,
-    1948,  1949,  1953,  1956,  1962,  1965,  1971,  1978,  1979,  1983,
-    1990,  1993,  1999,  2007,  2010,  2016
+       0,   399,   399,   399,   399,   399,   399,   399,   399,   399,
+     399,   399,   399,   399,   399,   399,   399,   399,   399,   399,
+     400,   400,   400,   400,   401,   401,   401,   401,   401,   401,
+     401,   401,   401,   401,   401,   401,   401,   401,   401,   401,
+     401,   401,   401,   402,   402,   402,   402,   402,   402,   402,
+     402,   402,   402,   402,   402,   402,   402,   402,   402,   402,
+     402,   402,   402,   402,   402,   402,   402,   402,   402,   402,
+     402,   402,   402,   402,   402,   402,   402,   402,   402,   402,
+     402,   402,   402,   402,   402,   402,   402,   402,   402,   402,
+     402,   402,   402,   402,   402,   402,   402,   402,   402,   402,
+     402,   402,   402,   402,   402,   402,   402,   402,   402,   402,
+     402,   402,   402,   402,   402,   402,   402,   402,   402,   402,
+     402,   402,   402,   402,   402,   402,   402,   402,   402,   402,
+     402,   402,   402,   402,   402,   402,   402,   402,   402,   402,
+     402,   402,   402,   402,   402,   402,   402,   402,   402,   402,
+     402,   402,   402,   402,   402,   402,   402,   402,   402,   402,
+     402,   403,   403,   403,   403,   403,   403,   403,   403,   403,
+     403,   403,   403,   403,   403,   403,   403,   403,   403,   403,
+     403,   403,   403,   403,   403,   403,   403,   403,   403,   403,
+     403,   403,   403,   403,   403,   403,   403,   403,   403,   403,
+     403,   403,   403,   403,   403,   403,   403,   403,   403,   403,
+     403,   403,   403,   403,   403,   403,   403,   403,   403,   403,
+     403,   403,   403,   403,   403,   403,   403,   403,   403,   403,
+     403,   403,   403,   403,   403,   403,   403,   403,   403,   403,
+     403,   403,   403,   403,   403,   403,   403,   403,   403,   403,
+     403,   403,   403,   403,   403,   403,   403,   403,   403,   403,
+     403,   403,   403,   403,   403,   403,   403,   403,   403,   403,
+     403,   403,   403,   403,   403,   403,   403,   407,   408,   411,
+     412,   415,   416,   417,   418,   424,   432,   435,   438,   439,
+     440,   443,   446,   449,   452,   458,   464,   467,   473,   496,
+     500,   504,   509,   513,   517,   521,   528,   529,   533,   534,
+     538,   539,   540,   544,   545,   549,   550,   554,   555,   556,
+     560,   561,   565,   566,   567,   568,   569,   570,   571,   575,
+     580,   588,   591,   594,   595,   601,   606,   614,   617,   621,
+     625,   632,   636,   640,   644,   649,   659,   669,   674,   679,
+     683,   689,   698,   701,   705,   709,   715,   722,   728,   729,
+     730,   731,   735,   738,   769,   776,   777,   778,   779,   783,
+     786,   795,   801,   804,   810,   813,   819,   820,   828,   839,
+     848,   860,   861,   865,   875,   884,   896,   899,   902,   906,
+     910,   914,   919,   924,   932,   933,   934,   940,   943,   946,
+     952,   953,   957,   960,   963,   969,   972,   975,   983,   995,
+     998,  1001,  1004,  1011,  1014,  1024,  1027,  1030,  1033,  1034,
+    1035,  1039,  1042,  1045,  1056,  1059,  1065,  1066,  1070,  1071,
+    1075,  1079,  1085,  1086,  1092,  1095,  1101,  1104,  1107,  1113,
+    1117,  1118,  1122,  1123,  1127,  1128,  1135,  1136,  1140,  1147,
+    1158,  1165,  1176,  1183,  1194,  1205,  1219,  1220,  1232,  1235,
+    1238,  1241,  1248,  1251,  1257,  1266,  1278,  1286,  1289,  1299,
+    1312,  1317,  1325,  1335,  1345,  1348,  1352,  1358,  1372,  1389,
+    1392,  1398,  1405,  1415,  1422,  1425,  1431,  1436,  1444,  1448,
+    1452,  1456,  1460,  1464,  1471,  1475,  1479,  1483,  1487,  1491,
+    1497,  1501,  1508,  1511,  1522,  1526,  1530,  1536,  1549,  1562,
+    1575,  1578,  1585,  1588,  1591,  1594,  1600,  1604,  1611,  1614,
+    1617,  1627,  1630,  1636,  1637,  1643,  1646,  1652,  1653,  1663,
+    1666,  1673,  1678,  1683,  1693,  1696,  1702,  1705,  1711,  1718,
+    1725,  1726,  1727,  1728,  1729,  1730,  1731,  1732,  1733,  1737,
+    1740,  1746,  1749,  1752,  1755,  1758,  1764,  1768,  1776,  1777,
+    1781,  1788,  1791,  1794,  1797,  1801,  1804,  1810,  1814,  1822,
+    1829,  1837,  1845,  1846,  1847,  1848,  1849,  1850,  1851,  1852,
+    1853,  1854,  1858,  1861,  1867,  1870,  1876,  1877,  1881,  1884,
+    1890,  1893,  1899,  1906,  1910,  1917,  1920,  1923,  1929,  1936,
+    1939,  1942,  1949,  1954,  1962,  1963,  1964,  1965,  1966,  1967,
+    1968,  1969,  1973,  1976,  1982,  1985,  1991,  1998,  1999,  2003,
+    2010,  2013,  2019,  2027,  2030,  2036
 };
 #endif
 
@@ -437,18 +438,19 @@ static const char *const yytname[] =
   "TO_STRING", "TO_FLOAT", "TO_ARRAY", "TO_OBJECT", "COMMENT",
   "WHITESPACE", "NO_WHITESPACE", "CPP_HEADER", "CPP_ATTRIBUTE",
   "CPP_EXTENSION", "CPP_PASTE", "CPP_INLINE", "CPP_RESTRICT", "CPP_ASM",
-  "BINARY", "UNARY", "$accept", "binary_op_token", "unary_op_token",
-  "name_token", "any_noeol_token", "any_nobrace_token", "file", "blocks",
-  "block", "lib", "cpp", "cpp_exp", "cpp_ignored_token",
-  "cpp_message_token", "cpp_include_token", "cpp_header_token",
-  "cpp_no_arg_token", "cpp_name_arg_token", "cpp_exp_arg_token",
-  "cpp_special_name_token", "cpp_macro_decl", "cpp_macro_sig",
-  "cpp_macro_sig_args", "cpp_macro_decl_tokens",
-  "cpp_macro_decl_token_list", "cpp_macro_exp", "cpp_macro_call_args",
-  "cpp_macro_call_arg_list", "constant", "constant_type",
-  "constant_type_token", "impl_def_val", "impl_def_val_token",
-  "decl_typedef", "typedef", "typedef_anon", "typedef_decl",
-  "typedef_anon_decl", "qualified_decl_type", "decl_type",
+  "BSLASH", "LONG_DOUBLE", "INT8", "UINT8", "INT16", "UINT16", "INT32",
+  "UINT32", "INT64", "UINT64", "INT128", "UINT128", "BINARY", "UNARY",
+  "$accept", "binary_op_token", "unary_op_token", "name_token",
+  "any_noeol_token", "any_nobrace_token", "file", "blocks", "block", "lib",
+  "cpp", "cpp_exp", "cpp_ignored_token", "cpp_message_token",
+  "cpp_include_token", "cpp_header_token", "cpp_no_arg_token",
+  "cpp_name_arg_token", "cpp_exp_arg_token", "cpp_special_name_token",
+  "cpp_macro_decl", "cpp_macro_sig", "cpp_macro_sig_args",
+  "cpp_macro_decl_tokens", "cpp_macro_decl_token_list", "cpp_macro_exp",
+  "cpp_macro_call_args", "cpp_macro_call_arg_list", "constant",
+  "constant_type", "constant_type_token", "impl_def_val",
+  "impl_def_val_token", "decl_typedef", "typedef", "typedef_anon",
+  "typedef_decl", "typedef_anon_decl", "qualified_decl_type", "decl_type",
   "decl_type_complex", "decl_type_simple", "decl_real_type", "int_signed",
   "int_width", "decl_int_type", "int_signed_types", "signed_short_types",
   "signed_long_types", "int_width_types", "decl_stmt", "decl_asm",
@@ -1482,26 +1484,26 @@ static const unsigned short int yystos[] =
 {
        0,     4,     5,     6,     7,     8,     9,    10,    11,    17,
       22,    29,    30,    31,    41,    83,    84,    85,    86,    87,
-      88,    89,    91,   116,   121,   123,   134,   135,   136,   137,
-     138,   156,   161,   166,   167,   168,   169,   170,   171,   172,
-     173,   178,   181,   182,   185,   189,   190,   191,   192,   193,
-     194,   197,   199,   200,   206,   214,   225,   226,     9,    11,
+      88,    89,    91,   116,   121,   123,   146,   147,   148,   149,
+     150,   168,   173,   178,   179,   180,   181,   182,   183,   184,
+     185,   190,   193,   194,   197,   201,   202,   203,   204,   205,
+     206,   209,   211,   212,   218,   226,   237,   238,     9,    11,
        3,    12,    17,    18,    22,    32,    49,    66,    67,    68,
       69,    70,    88,    90,    91,    92,    93,    94,    95,    97,
      100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   131,   222,   223,   224,
-     241,   253,    22,    84,    85,    86,    87,   190,   197,   167,
+     110,   111,   112,   113,   114,   115,   143,   234,   235,   236,
+     253,   265,    22,    84,    85,    86,    87,   202,   209,   179,
       30,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    79,    80,    81,    82,   139,   140,   141,
-     142,   144,   145,   146,    17,    84,    85,   121,   162,   164,
-     191,   192,   197,   206,   215,   216,   131,   131,   131,   217,
-       3,     6,    10,    12,    17,   157,   158,   167,    26,   123,
-     190,   226,    44,   261,   262,    22,    83,   189,   190,     0,
-     136,   131,   198,   221,   222,     4,     5,     6,     9,    22,
-     174,     6,   171,   177,    31,   125,   179,    32,    32,    36,
-      36,   221,   222,    87,    32,   131,   124,   224,   131,   131,
-     131,    34,   183,    19,    20,    21,   121,   123,   124,   131,
-     147,   148,    30,     0,     3,     4,     5,     6,     7,     8,
+      75,    76,    77,    79,    80,    81,    82,   151,   152,   153,
+     154,   156,   157,   158,    17,    84,    85,   121,   174,   176,
+     203,   204,   209,   218,   227,   228,   143,   143,   143,   229,
+       3,     6,    10,    12,    17,   169,   170,   179,    26,   123,
+     202,   238,    44,   273,   274,    22,    83,   201,   202,     0,
+     148,   143,   210,   233,   234,     4,     5,     6,     9,    22,
+     186,     6,   183,   189,    31,   125,   191,    32,    32,    36,
+      36,   233,   234,    87,    32,   143,   124,   236,   143,   143,
+     143,    34,   195,    19,    20,    21,   121,   123,   124,   143,
+     159,   160,    30,     0,     3,     4,     5,     6,     7,     8,
        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
       29,    31,    32,    33,    34,    35,    36,    37,    38,    39,
@@ -1513,20 +1515,20 @@ static const unsigned short int yystos[] =
       92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
      102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
      112,   113,   114,   115,   116,   119,   121,   122,   123,   124,
-     125,   132,   151,   152,   151,    26,   119,   143,   131,   147,
-      25,    27,    28,    32,    47,    48,    60,    61,    78,   130,
-     131,   153,   211,   131,   131,   217,   131,   217,   164,    31,
-     131,    35,   219,   219,   219,   219,   222,    23,    31,   190,
-      36,   186,    36,    23,   162,   179,   186,    38,   220,    32,
-     131,     6,   175,     6,     9,   176,   174,    32,    31,    17,
-      87,   166,   195,   196,   197,   195,   131,   207,   208,    92,
-      93,    94,    95,    96,    98,    99,   232,   233,   234,   247,
-     250,   256,   257,   258,   131,   221,   184,   198,   222,   118,
-     151,   132,    26,    27,    32,    44,   213,   153,    32,   131,
-     153,    32,    42,    43,    44,    45,    46,    47,    48,    49,
+     125,   144,   163,   164,   163,    26,   119,   155,   143,   159,
+      25,    27,    28,    32,    47,    48,    60,    61,    78,   142,
+     143,   165,   223,   143,   143,   229,   143,   229,   176,    31,
+     143,    35,   231,   231,   231,   231,   234,    23,    31,   202,
+      36,   198,    36,    23,   174,   191,   198,    38,   232,    32,
+     143,     6,   187,     6,     9,   188,   186,    32,    31,    17,
+      87,   178,   207,   208,   209,   207,   143,   219,   220,    92,
+      93,    94,    95,    96,    98,    99,   244,   245,   246,   259,
+     262,   268,   269,   270,   143,   233,   196,   210,   234,   118,
+     163,   144,    26,    27,    32,    44,   225,   165,    32,   143,
+     165,    32,    42,    43,    44,    45,    46,    47,    48,    49,
       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      65,   129,    31,    35,    36,   202,   202,    31,   201,   202,
-     201,    32,   131,    40,   186,     0,     3,     4,     5,     6,
+      65,   141,    31,    35,    36,   214,   214,    31,   213,   214,
+     213,    32,   143,    40,   198,     0,     3,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       27,    28,    29,    31,    32,    33,    34,    35,    38,    39,
@@ -1538,104 +1540,104 @@ static const unsigned short int yystos[] =
       92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
      102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
      112,   113,   114,   115,   116,   119,   121,   122,   123,   124,
-     125,   133,   186,   187,   188,   232,    32,    31,    31,    19,
-      23,    25,    27,    32,    39,   130,   198,   209,   210,   211,
-     221,   220,     6,    26,   180,   222,    17,   221,    33,    34,
-      33,    34,    40,    34,    37,   198,   237,   209,   229,   251,
-     252,   253,   261,   198,   131,   259,   260,   198,   248,   252,
-      37,   233,   209,    33,   131,    34,    32,   167,   212,   213,
-      22,    33,   131,   153,   154,   155,   153,   153,    32,   121,
-     163,   164,   165,   166,   203,   206,   215,   216,   198,   198,
-     221,    19,    20,    21,    26,   159,   160,   209,    37,   188,
+     125,   145,   198,   199,   200,   244,    32,    31,    31,    19,
+      23,    25,    27,    32,    39,   142,   210,   221,   222,   223,
+     233,   232,     6,    26,   192,   234,    17,   233,    33,    34,
+      33,    34,    40,    34,    37,   210,   249,   221,   241,   263,
+     264,   265,   273,   210,   143,   271,   272,   210,   260,   264,
+      37,   245,   221,    33,   143,    34,    32,   179,   224,   225,
+      22,    33,   143,   165,   166,   167,   165,   165,    32,   121,
+     175,   176,   177,   178,   215,   218,   227,   228,   210,   210,
+     233,    19,    20,    21,    26,   171,   172,   221,    37,   200,
       37,     3,     6,    10,    12,    13,    14,    15,    16,    17,
-      33,   227,   228,   230,   231,    22,    87,   166,   209,   209,
-      39,    65,   129,   131,    26,    33,   222,   220,    17,    64,
-     196,   220,    64,   209,   208,    40,    31,    40,    31,    32,
-      24,    40,    32,    31,    34,    32,    31,    31,    33,   198,
-      64,   131,   149,   150,   221,    33,    33,    33,    34,    35,
-      25,   165,    35,   218,    37,   163,   219,   219,   131,    31,
-      35,    33,    34,   229,    33,    33,   209,   209,    33,    33,
-      33,    19,    89,    90,   109,   209,   236,   238,   239,   240,
-     241,   262,   251,   198,   261,   184,   260,    17,   184,   249,
-      33,    34,   153,   153,    34,    25,    35,    34,   204,   218,
-     202,   202,    33,   230,    35,   228,   230,    40,   209,    35,
-     220,   220,   109,   238,    17,    18,   241,   244,    32,    32,
-     236,    34,   254,   198,    33,    33,   151,    64,   131,    25,
-      35,    32,   198,   205,    31,   204,   230,   261,   159,   209,
-      32,   209,   229,    64,   251,   255,    33,    31,    97,    33,
-      35,    25,   218,    34,    31,    64,   229,    34,    34,   242,
-      33,    34,    18,   252,   253,    32,    34,   198,    24,    32,
-     209,   198,   235,   236,   237,   243,   262,    33,   251,    25,
-      25,   218,    33,   245,   246,   251,    33,    34,   236,    34,
-      33,    35,    33,    34,   235,    25,   230,    33,   251,    33
+      33,   239,   240,   242,   243,    22,    87,   178,   221,   221,
+      39,    65,   141,   143,    26,    33,   234,   232,    17,    64,
+     208,   232,    64,   221,   220,    40,    31,    40,    31,    32,
+      24,    40,    32,    31,    34,    32,    31,    31,    33,   210,
+      64,   143,   161,   162,   233,    33,    33,    33,    34,    35,
+      25,   177,    35,   230,    37,   175,   231,   231,   143,    31,
+      35,    33,    34,   241,    33,    33,   221,   221,    33,    33,
+      33,    19,    89,    90,   109,   221,   248,   250,   251,   252,
+     253,   274,   263,   210,   273,   196,   272,    17,   196,   261,
+      33,    34,   165,   165,    34,    25,    35,    34,   216,   230,
+     214,   214,    33,   242,    35,   240,   242,    40,   221,    35,
+     232,   232,   109,   250,    17,    18,   253,   256,    32,    32,
+     248,    34,   266,   210,    33,    33,   163,    64,   143,    25,
+      35,    32,   210,   217,    31,   216,   242,   273,   171,   221,
+      32,   221,   241,    64,   263,   267,    33,    31,    97,    33,
+      35,    25,   230,    34,    31,    64,   241,    34,    34,   254,
+      33,    34,    18,   264,   265,    32,    34,   210,    24,    32,
+     221,   210,   247,   248,   249,   255,   274,    33,   263,    25,
+      25,   230,    33,   257,   258,   263,    33,    34,   248,    34,
+      33,    35,    33,    34,   247,    25,   242,    33,   263,    33
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const unsigned short int yyr1[] =
 {
-       0,   128,   129,   129,   129,   129,   129,   129,   129,   129,
-     129,   129,   129,   129,   129,   129,   129,   129,   129,   129,
-     130,   130,   130,   130,   131,   131,   131,   131,   131,   131,
-     131,   131,   131,   131,   131,   131,   131,   131,   131,   131,
-     131,   131,   131,   132,   132,   132,   132,   132,   132,   132,
-     132,   132,   132,   132,   132,   132,   132,   132,   132,   132,
-     132,   132,   132,   132,   132,   132,   132,   132,   132,   132,
-     132,   132,   132,   132,   132,   132,   132,   132,   132,   132,
-     132,   132,   132,   132,   132,   132,   132,   132,   132,   132,
-     132,   132,   132,   132,   132,   132,   132,   132,   132,   132,
-     132,   132,   132,   132,   132,   132,   132,   132,   132,   132,
-     132,   132,   132,   132,   132,   132,   132,   132,   132,   132,
-     132,   132,   132,   132,   132,   132,   132,   132,   132,   132,
-     132,   132,   132,   132,   132,   132,   132,   132,   132,   132,
-     132,   132,   132,   132,   132,   132,   132,   132,   132,   132,
-     132,   132,   132,   132,   132,   132,   132,   132,   132,   132,
-     132,   133,   133,   133,   133,   133,   133,   133,   133,   133,
-     133,   133,   133,   133,   133,   133,   133,   133,   133,   133,
-     133,   133,   133,   133,   133,   133,   133,   133,   133,   133,
-     133,   133,   133,   133,   133,   133,   133,   133,   133,   133,
-     133,   133,   133,   133,   133,   133,   133,   133,   133,   133,
-     133,   133,   133,   133,   133,   133,   133,   133,   133,   133,
-     133,   133,   133,   133,   133,   133,   133,   133,   133,   133,
-     133,   133,   133,   133,   133,   133,   133,   133,   133,   133,
-     133,   133,   133,   133,   133,   133,   133,   133,   133,   133,
-     133,   133,   133,   133,   133,   133,   133,   133,   133,   133,
-     133,   133,   133,   133,   133,   133,   133,   133,   133,   133,
-     133,   133,   133,   133,   133,   133,   133,   134,   134,   135,
-     135,   136,   136,   136,   136,   136,   136,   136,   136,   136,
-     136,   136,   136,   136,   136,   137,   138,   138,   139,   139,
-     139,   139,   139,   139,   139,   139,   140,   140,   141,   141,
-     142,   142,   142,   143,   143,   144,   144,   145,   145,   145,
-     146,   146,   147,   147,   147,   147,   147,   147,   147,   148,
-     148,   149,   149,   149,   149,   150,   150,   151,   151,   152,
-     152,   153,   153,   153,   153,   153,   153,   153,   153,   153,
-     153,   153,   154,   154,   155,   155,   156,   157,   158,   158,
-     158,   158,   159,   159,   159,   160,   160,   160,   160,   161,
-     161,   161,   162,   162,   163,   163,   164,   164,   164,   164,
-     164,   165,   165,   165,   165,   165,   166,   166,   166,   167,
-     167,   168,   168,   168,   169,   169,   169,   170,   170,   170,
-     171,   171,   172,   172,   172,   173,   173,   173,   173,   174,
-     174,   174,   174,   174,   174,   175,   175,   176,   176,   176,
-     176,   177,   177,   177,   178,   178,   179,   179,   180,   180,
-     181,   182,   183,   183,   184,   184,   185,   185,   185,   186,
-     187,   187,   188,   188,   189,   189,   190,   190,   191,   191,
-     192,   192,   193,   193,   193,   193,   194,   194,   195,   195,
-     195,   195,   196,   196,   196,   196,   197,   197,   197,   197,
-     198,   198,   199,   200,   201,   201,   202,   203,   203,   204,
-     204,   205,   205,   206,   207,   207,   208,   208,   209,   209,
-     209,   209,   209,   209,   210,   210,   210,   210,   210,   210,
-     211,   211,   212,   212,   213,   213,   213,   214,   215,   216,
-     217,   217,   218,   218,   218,   218,   219,   219,   220,   220,
-     220,   221,   221,   222,   222,   223,   223,   224,   224,   225,
-     225,   226,   226,   226,   227,   227,   228,   228,   229,   230,
-     231,   231,   231,   231,   231,   231,   231,   231,   231,   232,
-     232,   233,   233,   233,   233,   233,   234,   234,   235,   235,
-     235,   236,   236,   236,   236,   236,   236,   237,   237,   238,
-     239,   240,   241,   241,   241,   241,   241,   241,   241,   241,
-     241,   241,   242,   242,   243,   243,   244,   244,   245,   245,
-     246,   246,   247,   248,   248,   249,   249,   249,   250,   251,
-     251,   251,   252,   252,   253,   253,   253,   253,   253,   253,
-     253,   253,   254,   254,   255,   255,   256,   257,   257,   258,
-     259,   259,   260,   261,   261,   262
+       0,   140,   141,   141,   141,   141,   141,   141,   141,   141,
+     141,   141,   141,   141,   141,   141,   141,   141,   141,   141,
+     142,   142,   142,   142,   143,   143,   143,   143,   143,   143,
+     143,   143,   143,   143,   143,   143,   143,   143,   143,   143,
+     143,   143,   143,   144,   144,   144,   144,   144,   144,   144,
+     144,   144,   144,   144,   144,   144,   144,   144,   144,   144,
+     144,   144,   144,   144,   144,   144,   144,   144,   144,   144,
+     144,   144,   144,   144,   144,   144,   144,   144,   144,   144,
+     144,   144,   144,   144,   144,   144,   144,   144,   144,   144,
+     144,   144,   144,   144,   144,   144,   144,   144,   144,   144,
+     144,   144,   144,   144,   144,   144,   144,   144,   144,   144,
+     144,   144,   144,   144,   144,   144,   144,   144,   144,   144,
+     144,   144,   144,   144,   144,   144,   144,   144,   144,   144,
+     144,   144,   144,   144,   144,   144,   144,   144,   144,   144,
+     144,   144,   144,   144,   144,   144,   144,   144,   144,   144,
+     144,   144,   144,   144,   144,   144,   144,   144,   144,   144,
+     144,   145,   145,   145,   145,   145,   145,   145,   145,   145,
+     145,   145,   145,   145,   145,   145,   145,   145,   145,   145,
+     145,   145,   145,   145,   145,   145,   145,   145,   145,   145,
+     145,   145,   145,   145,   145,   145,   145,   145,   145,   145,
+     145,   145,   145,   145,   145,   145,   145,   145,   145,   145,
+     145,   145,   145,   145,   145,   145,   145,   145,   145,   145,
+     145,   145,   145,   145,   145,   145,   145,   145,   145,   145,
+     145,   145,   145,   145,   145,   145,   145,   145,   145,   145,
+     145,   145,   145,   145,   145,   145,   145,   145,   145,   145,
+     145,   145,   145,   145,   145,   145,   145,   145,   145,   145,
+     145,   145,   145,   145,   145,   145,   145,   145,   145,   145,
+     145,   145,   145,   145,   145,   145,   145,   146,   146,   147,
+     147,   148,   148,   148,   148,   148,   148,   148,   148,   148,
+     148,   148,   148,   148,   148,   149,   150,   150,   151,   151,
+     151,   151,   151,   151,   151,   151,   152,   152,   153,   153,
+     154,   154,   154,   155,   155,   156,   156,   157,   157,   157,
+     158,   158,   159,   159,   159,   159,   159,   159,   159,   160,
+     160,   161,   161,   161,   161,   162,   162,   163,   163,   164,
+     164,   165,   165,   165,   165,   165,   165,   165,   165,   165,
+     165,   165,   166,   166,   167,   167,   168,   169,   170,   170,
+     170,   170,   171,   171,   171,   172,   172,   172,   172,   173,
+     173,   173,   174,   174,   175,   175,   176,   176,   176,   176,
+     176,   177,   177,   177,   177,   177,   178,   178,   178,   179,
+     179,   180,   180,   180,   181,   181,   181,   182,   182,   182,
+     183,   183,   184,   184,   184,   185,   185,   185,   185,   186,
+     186,   186,   186,   186,   186,   187,   187,   188,   188,   188,
+     188,   189,   189,   189,   190,   190,   191,   191,   192,   192,
+     193,   194,   195,   195,   196,   196,   197,   197,   197,   198,
+     199,   199,   200,   200,   201,   201,   202,   202,   203,   203,
+     204,   204,   205,   205,   205,   205,   206,   206,   207,   207,
+     207,   207,   208,   208,   208,   208,   209,   209,   209,   209,
+     210,   210,   211,   212,   213,   213,   214,   215,   215,   216,
+     216,   217,   217,   218,   219,   219,   220,   220,   221,   221,
+     221,   221,   221,   221,   222,   222,   222,   222,   222,   222,
+     223,   223,   224,   224,   225,   225,   225,   226,   227,   228,
+     229,   229,   230,   230,   230,   230,   231,   231,   232,   232,
+     232,   233,   233,   234,   234,   235,   235,   236,   236,   237,
+     237,   238,   238,   238,   239,   239,   240,   240,   241,   242,
+     243,   243,   243,   243,   243,   243,   243,   243,   243,   244,
+     244,   245,   245,   245,   245,   245,   246,   246,   247,   247,
+     247,   248,   248,   248,   248,   248,   248,   249,   249,   250,
+     251,   252,   253,   253,   253,   253,   253,   253,   253,   253,
+     253,   253,   254,   254,   255,   255,   256,   256,   257,   257,
+     258,   258,   259,   260,   260,   261,   261,   261,   262,   263,
+     263,   263,   264,   264,   265,   265,   265,   265,   265,   265,
+     265,   265,   266,   266,   267,   267,   268,   269,   269,   270,
+     271,   271,   272,   273,   273,   274
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -2762,18 +2764,18 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
   switch (yyn)
     {
         case 284:
-#line 398 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 418 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        if ((*(struct psi_cpp_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))) {
                psi_cpp_exp_exec((*(struct psi_cpp_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)), P->preproc, PSI_DATA(P));
                psi_cpp_exp_free(&(*(struct psi_cpp_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        }
 }
-#line 2773 "src/parser_proc.c" /* glr.c:816  */
+#line 2775 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 285:
-#line 404 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 424 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        if (P->file.ln) {
                P->error(PSI_DATA(P), (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)), PSI_WARNING,
@@ -2782,91 +2784,91 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
                P->file.ln = strndup((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->text, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->size);
        }
 }
-#line 2786 "src/parser_proc.c" /* glr.c:816  */
+#line 2788 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 286:
-#line 412 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 432 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        psi_parser_proc_add_const(P, (*(struct psi_const **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 2794 "src/parser_proc.c" /* glr.c:816  */
+#line 2796 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 287:
-#line 415 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 435 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        psi_parser_proc_add_decl(P, (*(struct psi_decl **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 2802 "src/parser_proc.c" /* glr.c:816  */
+#line 2804 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 290:
-#line 420 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 440 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        psi_parser_proc_add_typedef(P, (*(struct psi_decl_arg **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 2810 "src/parser_proc.c" /* glr.c:816  */
+#line 2812 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 291:
-#line 423 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 443 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        psi_parser_proc_add_struct(P, (*(struct psi_decl_struct **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 2818 "src/parser_proc.c" /* glr.c:816  */
+#line 2820 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 292:
-#line 426 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 446 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        psi_parser_proc_add_union(P, (*(struct psi_decl_union **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 2826 "src/parser_proc.c" /* glr.c:816  */
+#line 2828 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 293:
-#line 429 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 449 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        psi_parser_proc_add_enum(P, (*(struct psi_decl_enum **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 2834 "src/parser_proc.c" /* glr.c:816  */
+#line 2836 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 294:
-#line 432 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 452 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        psi_parser_proc_add_impl(P, (*(struct psi_impl **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 2842 "src/parser_proc.c" /* glr.c:816  */
+#line 2844 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 295:
-#line 438 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 458 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&(*yyvalp))) = (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval));
 }
-#line 2850 "src/parser_proc.c" /* glr.c:816  */
+#line 2852 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 296:
-#line 444 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 464 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_cpp_exp **)(&(*yyvalp))) = NULL;
 }
-#line 2858 "src/parser_proc.c" /* glr.c:816  */
+#line 2860 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 297:
-#line 447 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 467 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_cpp_exp **)(&(*yyvalp))) = (*(struct psi_cpp_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval));
 }
-#line 2866 "src/parser_proc.c" /* glr.c:816  */
+#line 2868 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 298:
-#line 453 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 473 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        if ((*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))) {
                struct psi_token *msg = NULL;
@@ -2890,201 +2892,201 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
        }
        (*(struct psi_cpp_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
 }
-#line 2894 "src/parser_proc.c" /* glr.c:816  */
+#line 2896 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 299:
-#line 476 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 496 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_cpp_exp **)(&(*yyvalp))) = psi_cpp_exp_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->type, psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))));
        (*(struct psi_cpp_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
 }
-#line 2903 "src/parser_proc.c" /* glr.c:816  */
+#line 2905 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 300:
-#line 480 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 500 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_cpp_exp **)(&(*yyvalp))) = psi_cpp_exp_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->type, NULL);
        (*(struct psi_cpp_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 2912 "src/parser_proc.c" /* glr.c:816  */
+#line 2914 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 301:
-#line 484 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 504 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->type = PSI_T_NAME;
        (*(struct psi_cpp_exp **)(&(*yyvalp))) = psi_cpp_exp_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->type, psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))));
        (*(struct psi_cpp_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
 }
-#line 2922 "src/parser_proc.c" /* glr.c:816  */
+#line 2924 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 302:
-#line 489 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 509 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_cpp_exp **)(&(*yyvalp))) = psi_cpp_exp_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->type, (*(struct psi_cpp_macro_decl **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_cpp_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
 }
-#line 2931 "src/parser_proc.c" /* glr.c:816  */
+#line 2933 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 303:
-#line 493 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 513 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_cpp_exp **)(&(*yyvalp))) = psi_cpp_exp_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->type, (*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_cpp_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
 }
-#line 2940 "src/parser_proc.c" /* glr.c:816  */
+#line 2942 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 304:
-#line 497 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 517 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_cpp_exp **)(&(*yyvalp))) = psi_cpp_exp_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->type, NULL);
        (*(struct psi_cpp_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 2949 "src/parser_proc.c" /* glr.c:816  */
+#line 2951 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 305:
-#line 501 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 521 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        psi_plist_free((*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_cpp_exp **)(&(*yyvalp))) = NULL;
 }
-#line 2958 "src/parser_proc.c" /* glr.c:816  */
+#line 2960 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 329:
-#line 555 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 575 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval))->type = PSI_T_NAME;
        (*(struct psi_cpp_macro_decl **)(&(*yyvalp))) = psi_cpp_macro_decl_init((*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)), (*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)), NULL);
        (*(struct psi_cpp_macro_decl **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval)));
 }
-#line 2968 "src/parser_proc.c" /* glr.c:816  */
+#line 2970 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 330:
-#line 560 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 580 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->type = PSI_T_NAME;
        (*(struct psi_cpp_macro_decl **)(&(*yyvalp))) = psi_cpp_macro_decl_init(NULL, (*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)), NULL);
        (*(struct psi_cpp_macro_decl **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
 }
-#line 2978 "src/parser_proc.c" /* glr.c:816  */
+#line 2980 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 331:
-#line 568 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 588 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_init(NULL);
 }
-#line 2986 "src/parser_proc.c" /* glr.c:816  */
+#line 2988 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 332:
-#line 571 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 591 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_init(NULL); /* FIXME */
 }
-#line 2994 "src/parser_proc.c" /* glr.c:816  */
+#line 2996 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 334:
-#line 575 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 595 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = (*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval));
 }
-#line 3002 "src/parser_proc.c" /* glr.c:816  */
+#line 3004 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 335:
-#line 581 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 601 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)) = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->type = PSI_T_NAME;
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_token_free), &(*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3012 "src/parser_proc.c" /* glr.c:816  */
+#line 3014 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 336:
-#line 586 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 606 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)) = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->type = PSI_T_NAME;
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add((*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)), &(*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3022 "src/parser_proc.c" /* glr.c:816  */
+#line 3024 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 337:
-#line 594 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 614 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = NULL;
 }
-#line 3030 "src/parser_proc.c" /* glr.c:816  */
+#line 3032 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 339:
-#line 601 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 621 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)) = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_token_free), &(*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3039 "src/parser_proc.c" /* glr.c:816  */
+#line 3041 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 340:
-#line 605 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 625 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)) = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add((*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)), &(*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3048 "src/parser_proc.c" /* glr.c:816  */
+#line 3050 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 341:
-#line 612 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 632 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_num_exp **)(&(*yyvalp))) = psi_num_exp_init_unary((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval))->type, (*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
        (*(struct psi_num_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)));
 }
-#line 3057 "src/parser_proc.c" /* glr.c:816  */
+#line 3059 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 342:
-#line 616 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 636 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_num_exp **)(&(*yyvalp))) = psi_num_exp_init_unary((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->type, (*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_num_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
 }
-#line 3066 "src/parser_proc.c" /* glr.c:816  */
+#line 3068 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 343:
-#line 620 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 640 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_num_exp **)(&(*yyvalp))) = psi_num_exp_init_binary((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->type, (*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)), (*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_num_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
 }
-#line 3075 "src/parser_proc.c" /* glr.c:816  */
+#line 3077 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 344:
-#line 624 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 644 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_num_exp **)(&(*yyvalp))) = psi_num_exp_init_ternary((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval))->type, (*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval)), (*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)), (*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_num_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval)));
 }
-#line 3084 "src/parser_proc.c" /* glr.c:816  */
+#line 3086 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 345:
-#line 629 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 649 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        {
                uint8_t exists;
@@ -3095,11 +3097,11 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
                (*(struct psi_num_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        }
 }
-#line 3099 "src/parser_proc.c" /* glr.c:816  */
+#line 3101 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 346:
-#line 639 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 659 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        {
                uint8_t exists;
@@ -3110,112 +3112,112 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
                (*(struct psi_num_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
        }
 }
-#line 3114 "src/parser_proc.c" /* glr.c:816  */
+#line 3116 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 347:
-#line 649 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 669 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_num_exp **)(&(*yyvalp))) = psi_num_exp_init_num(psi_number_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->type, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->text, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->flags));
        (*(struct psi_num_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_num_exp **)(&(*yyvalp)))->data.n->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3124 "src/parser_proc.c" /* glr.c:816  */
+#line 3126 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 348:
-#line 654 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 674 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_num_exp **)(&(*yyvalp))) = psi_num_exp_init_num(psi_number_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->type, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->text, 0));
        (*(struct psi_num_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_num_exp **)(&(*yyvalp)))->data.n->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3134 "src/parser_proc.c" /* glr.c:816  */
+#line 3136 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 349:
-#line 659 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 679 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_num_exp **)(&(*yyvalp))) = psi_num_exp_init_num((*(struct psi_number **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_num_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_number **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->token);
 }
-#line 3143 "src/parser_proc.c" /* glr.c:816  */
+#line 3145 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 350:
-#line 663 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 683 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->type = PSI_T_NAME;
        (*(struct psi_num_exp **)(&(*yyvalp))) = psi_num_exp_init_num(psi_number_init(PSI_T_DEFINE, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->text, 0));
        (*(struct psi_num_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_num_exp **)(&(*yyvalp)))->data.n->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3154 "src/parser_proc.c" /* glr.c:816  */
+#line 3156 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 351:
-#line 669 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 689 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval))->type = PSI_T_NAME;
        (*(struct psi_num_exp **)(&(*yyvalp))) = psi_num_exp_init_num(psi_number_init(PSI_T_FUNCTION,
                psi_cpp_macro_call_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval))->text, (*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))), 0));
        (*(struct psi_num_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval)));
 }
-#line 3165 "src/parser_proc.c" /* glr.c:816  */
+#line 3167 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 352:
-#line 678 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 698 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = NULL;
 }
-#line 3173 "src/parser_proc.c" /* glr.c:816  */
+#line 3175 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 354:
-#line 685 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 705 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_num_exp_free), 
                &(*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3182 "src/parser_proc.c" /* glr.c:816  */
+#line 3184 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 355:
-#line 689 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 709 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add((*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)), &(*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3190 "src/parser_proc.c" /* glr.c:816  */
+#line 3192 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 356:
-#line 695 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 715 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_const **)(&(*yyvalp))) = psi_const_init((*(struct psi_const_type **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval)), (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval))->text, (*(struct psi_impl_def_val **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
        (*(struct psi_const **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval)));
 }
-#line 3199 "src/parser_proc.c" /* glr.c:816  */
+#line 3201 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 357:
-#line 702 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 722 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_const_type **)(&(*yyvalp))) = psi_const_type_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->type, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->text);
 }
-#line 3207 "src/parser_proc.c" /* glr.c:816  */
+#line 3209 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 362:
-#line 715 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 735 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_impl_def_val **)(&(*yyvalp))) = NULL;
 }
-#line 3215 "src/parser_proc.c" /* glr.c:816  */
+#line 3217 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 363:
-#line 718 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 738 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        if (psi_num_exp_validate(PSI_DATA(P), (*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)), NULL, NULL, NULL, NULL, NULL)) {
                impl_val res = {0};
@@ -3247,28 +3249,28 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
        }
        psi_num_exp_free(&(*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3251 "src/parser_proc.c" /* glr.c:816  */
+#line 3253 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 364:
-#line 749 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 769 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_impl_def_val **)(&(*yyvalp))) = psi_impl_def_val_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->type, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->text);
        (*(struct psi_impl_def_val **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3260 "src/parser_proc.c" /* glr.c:816  */
+#line 3262 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 369:
-#line 763 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 783 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_arg **)(&(*yyvalp))) = (*(struct psi_decl_arg **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval));
 }
-#line 3268 "src/parser_proc.c" /* glr.c:816  */
+#line 3270 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 370:
-#line 766 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 786 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_arg **)(&(*yyvalp))) = psi_decl_arg_init(
                psi_decl_type_init(PSI_T_VOID, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval))->text),
@@ -3278,51 +3280,51 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
        (*(struct psi_decl_arg **)(&(*yyvalp)))->type->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)));
        (*(struct psi_decl_arg **)(&(*yyvalp)))->var->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
 }
-#line 3282 "src/parser_proc.c" /* glr.c:816  */
+#line 3284 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 371:
-#line 775 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 795 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_arg **)(&(*yyvalp))) = (*(struct psi_decl_arg **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval));
 }
-#line 3290 "src/parser_proc.c" /* glr.c:816  */
+#line 3292 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 372:
-#line 781 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 801 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_arg **)(&(*yyvalp))) = (*(struct psi_decl_arg **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
 }
-#line 3298 "src/parser_proc.c" /* glr.c:816  */
+#line 3300 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 373:
-#line 784 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 804 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_arg **)(&(*yyvalp))) = (*(struct psi_decl_arg **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
 }
-#line 3306 "src/parser_proc.c" /* glr.c:816  */
+#line 3308 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 374:
-#line 790 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 810 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_arg **)(&(*yyvalp))) = (*(struct psi_decl_arg **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
 }
-#line 3314 "src/parser_proc.c" /* glr.c:816  */
+#line 3316 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 375:
-#line 793 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 813 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_arg **)(&(*yyvalp))) = (*(struct psi_decl_arg **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
 }
-#line 3322 "src/parser_proc.c" /* glr.c:816  */
+#line 3324 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 377:
-#line 800 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 820 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_arg **)(&(*yyvalp))) = psi_decl_arg_init(
                psi_decl_type_init(PSI_T_FUNCTION, (*(struct psi_decl **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->func->var->name),
@@ -3331,11 +3333,11 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
        (*(struct psi_decl_arg **)(&(*yyvalp)))->type->token = psi_token_copy((*(struct psi_decl **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->func->token);
        (*(struct psi_decl_arg **)(&(*yyvalp)))->type->real.func = (*(struct psi_decl **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
 }
-#line 3335 "src/parser_proc.c" /* glr.c:816  */
+#line 3337 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 378:
-#line 808 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 828 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->type = PSI_T_NAME;
        (*(struct psi_decl_arg **)(&(*yyvalp))) = psi_decl_arg_init(
@@ -3347,11 +3349,11 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
        (*(struct psi_decl_arg **)(&(*yyvalp)))->type->real.enm = (*(struct psi_decl_enum **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval));
        psi_parser_proc_add_enum(P, (*(struct psi_decl_enum **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
 }
-#line 3351 "src/parser_proc.c" /* glr.c:816  */
+#line 3353 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 379:
-#line 819 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 839 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_arg **)(&(*yyvalp))) = psi_decl_arg_init(psi_decl_type_init(PSI_T_STRUCT, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval))->text), (*(struct psi_decl_var **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_decl_arg **)(&(*yyvalp)))->type->token = (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval));
@@ -3361,11 +3363,11 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
        (*(struct psi_decl_arg **)(&(*yyvalp)))->type->real.strct->size = (*(struct psi_layout*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)).len;
        psi_parser_proc_add_struct(P, (*(struct psi_decl_arg **)(&(*yyvalp)))->type->real.strct);
 }
-#line 3365 "src/parser_proc.c" /* glr.c:816  */
+#line 3367 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 380:
-#line 828 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 848 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_arg **)(&(*yyvalp))) = psi_decl_arg_init(psi_decl_type_init(PSI_T_UNION, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval))->text), (*(struct psi_decl_var **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_decl_arg **)(&(*yyvalp)))->type->token = (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval));
@@ -3375,20 +3377,20 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
        (*(struct psi_decl_arg **)(&(*yyvalp)))->type->real.unn->size = (*(struct psi_layout*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)).len;
        psi_parser_proc_add_union(P, (*(struct psi_decl_arg **)(&(*yyvalp)))->type->real.unn);
 }
-#line 3379 "src/parser_proc.c" /* glr.c:816  */
+#line 3381 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 382:
-#line 841 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 861 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_arg **)(&(*yyvalp))) = psi_decl_arg_init((*(struct psi_decl_type **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)), psi_decl_var_init(NULL, 0, 0));
        (*(struct psi_decl_arg **)(&(*yyvalp)))->var->token = psi_token_copy((*(struct psi_decl_type **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->token);
 }
-#line 3388 "src/parser_proc.c" /* glr.c:816  */
+#line 3390 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 383:
-#line 845 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 865 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_arg **)(&(*yyvalp))) = psi_decl_arg_init(
                psi_decl_type_init(PSI_T_ENUM, (*(struct psi_decl_enum **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->name),
@@ -3399,11 +3401,11 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
        (*(struct psi_decl_arg **)(&(*yyvalp)))->type->real.enm = (*(struct psi_decl_enum **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
        psi_parser_proc_add_enum(P, (*(struct psi_decl_enum **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3403 "src/parser_proc.c" /* glr.c:816  */
+#line 3405 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 384:
-#line 855 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 875 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_arg **)(&(*yyvalp))) = psi_decl_arg_init(psi_decl_type_init(PSI_T_STRUCT, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval))->text), psi_decl_var_init(NULL, 0, 0));
        (*(struct psi_decl_arg **)(&(*yyvalp)))->type->token = (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval));
@@ -3413,11 +3415,11 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
        (*(struct psi_decl_arg **)(&(*yyvalp)))->type->real.strct->size = (*(struct psi_layout*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)).len;
        psi_parser_proc_add_struct(P, (*(struct psi_decl_arg **)(&(*yyvalp)))->type->real.strct);
 }
-#line 3417 "src/parser_proc.c" /* glr.c:816  */
+#line 3419 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 385:
-#line 864 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 884 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_arg **)(&(*yyvalp))) = psi_decl_arg_init(psi_decl_type_init(PSI_T_UNION, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval))->text), psi_decl_var_init(NULL, 0, 0));
        (*(struct psi_decl_arg **)(&(*yyvalp)))->type->token = (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval));
@@ -3427,138 +3429,138 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
        (*(struct psi_decl_arg **)(&(*yyvalp)))->type->real.unn->size = (*(struct psi_layout*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)).len;
        psi_parser_proc_add_union(P, (*(struct psi_decl_arg **)(&(*yyvalp)))->type->real.unn);
 }
-#line 3431 "src/parser_proc.c" /* glr.c:816  */
+#line 3433 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 386:
-#line 876 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 896 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_type **)(&(*yyvalp))) = (*(struct psi_decl_type **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
 }
-#line 3439 "src/parser_proc.c" /* glr.c:816  */
+#line 3441 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 387:
-#line 879 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 899 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_type **)(&(*yyvalp))) = (*(struct psi_decl_type **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
 }
-#line 3447 "src/parser_proc.c" /* glr.c:816  */
+#line 3449 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 389:
-#line 886 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 906 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_type **)(&(*yyvalp))) = psi_decl_type_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->type, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->text);
        (*(struct psi_decl_type **)(&(*yyvalp)))->token = (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
 }
-#line 3456 "src/parser_proc.c" /* glr.c:816  */
+#line 3458 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 391:
-#line 894 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 914 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->type = PSI_T_NAME;
        (*(struct psi_decl_type **)(&(*yyvalp))) = psi_decl_type_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->type, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->text);
        (*(struct psi_decl_type **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3466 "src/parser_proc.c" /* glr.c:816  */
+#line 3468 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 392:
-#line 899 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 919 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->type = PSI_T_NAME;
        (*(struct psi_decl_type **)(&(*yyvalp))) = psi_decl_type_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->type, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->text);
        (*(struct psi_decl_type **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3476 "src/parser_proc.c" /* glr.c:816  */
+#line 3478 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 393:
-#line 904 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 924 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->type = PSI_T_NAME;
        (*(struct psi_decl_type **)(&(*yyvalp))) = psi_decl_type_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->type, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->text);
        (*(struct psi_decl_type **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3486 "src/parser_proc.c" /* glr.c:816  */
+#line 3488 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 396:
-#line 914 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 934 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&(*yyvalp))) = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3494 "src/parser_proc.c" /* glr.c:816  */
+#line 3496 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 397:
-#line 920 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 940 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&(*yyvalp))) = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3502 "src/parser_proc.c" /* glr.c:816  */
+#line 3504 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 398:
-#line 923 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 943 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&(*yyvalp))) = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3510 "src/parser_proc.c" /* glr.c:816  */
+#line 3512 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 399:
-#line 926 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 946 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&(*yyvalp))) = psi_token_cat(" ", 2, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)), (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3518 "src/parser_proc.c" /* glr.c:816  */
+#line 3520 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 402:
-#line 937 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 957 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&(*yyvalp))) = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3526 "src/parser_proc.c" /* glr.c:816  */
+#line 3528 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 403:
-#line 940 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 960 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&(*yyvalp))) = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3534 "src/parser_proc.c" /* glr.c:816  */
+#line 3536 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 404:
-#line 943 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 963 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&(*yyvalp))) = psi_token_cat(" ", 2, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)), (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3542 "src/parser_proc.c" /* glr.c:816  */
+#line 3544 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 405:
-#line 949 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 969 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&(*yyvalp))) = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3550 "src/parser_proc.c" /* glr.c:816  */
+#line 3552 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 406:
-#line 952 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 972 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&(*yyvalp))) = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3558 "src/parser_proc.c" /* glr.c:816  */
+#line 3560 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 407:
-#line 955 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 975 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        if ((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))) {
                (*(struct psi_token **)(&(*yyvalp))) = psi_token_cat(" ", 2, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)), (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
@@ -3567,11 +3569,11 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
                (*(struct psi_token **)(&(*yyvalp))) = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
        }
 }
-#line 3571 "src/parser_proc.c" /* glr.c:816  */
+#line 3573 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 408:
-#line 963 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 983 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        if ((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))) {
                (*(struct psi_token **)(&(*yyvalp))) = psi_token_cat(" ", 2, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)), (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
@@ -3581,35 +3583,35 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
                (*(struct psi_token **)(&(*yyvalp))) = (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval));
        }
 }
-#line 3585 "src/parser_proc.c" /* glr.c:816  */
+#line 3587 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 409:
-#line 975 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 995 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&(*yyvalp))) = NULL;
 }
-#line 3593 "src/parser_proc.c" /* glr.c:816  */
+#line 3595 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 410:
-#line 978 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 998 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&(*yyvalp))) = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3601 "src/parser_proc.c" /* glr.c:816  */
+#line 3603 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 411:
-#line 981 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1001 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&(*yyvalp))) = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3609 "src/parser_proc.c" /* glr.c:816  */
+#line 3611 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 412:
-#line 984 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1004 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        if ((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))) {
                (*(struct psi_token **)(&(*yyvalp))) = psi_token_cat(" ", 2, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)), (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
@@ -3617,19 +3619,19 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
                (*(struct psi_token **)(&(*yyvalp))) = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
        }
 }
-#line 3621 "src/parser_proc.c" /* glr.c:816  */
+#line 3623 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 413:
-#line 991 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1011 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&(*yyvalp))) = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3629 "src/parser_proc.c" /* glr.c:816  */
+#line 3631 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 414:
-#line 994 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1014 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        if ((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))) {
                (*(struct psi_token **)(&(*yyvalp))) = psi_token_cat(" ", 2, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)), (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
@@ -3637,43 +3639,43 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
                (*(struct psi_token **)(&(*yyvalp))) = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
        }
 }
-#line 3641 "src/parser_proc.c" /* glr.c:816  */
+#line 3643 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 415:
-#line 1004 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1024 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&(*yyvalp))) = NULL;
 }
-#line 3649 "src/parser_proc.c" /* glr.c:816  */
+#line 3651 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 417:
-#line 1010 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1030 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&(*yyvalp))) = NULL;
 }
-#line 3657 "src/parser_proc.c" /* glr.c:816  */
+#line 3659 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 421:
-#line 1019 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1039 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&(*yyvalp))) = NULL;
 }
-#line 3665 "src/parser_proc.c" /* glr.c:816  */
+#line 3667 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 422:
-#line 1022 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1042 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&(*yyvalp))) = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3673 "src/parser_proc.c" /* glr.c:816  */
+#line 3675 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 423:
-#line 1025 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1045 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        if ((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))) {
                (*(struct psi_token **)(&(*yyvalp))) = psi_token_cat(" ", 2, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)), (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
@@ -3682,92 +3684,92 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
                (*(struct psi_token **)(&(*yyvalp))) = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
        }
 }
-#line 3686 "src/parser_proc.c" /* glr.c:816  */
+#line 3688 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 424:
-#line 1036 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1056 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl **)(&(*yyvalp))) = (*(struct psi_decl **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval));
 }
-#line 3694 "src/parser_proc.c" /* glr.c:816  */
+#line 3696 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 425:
-#line 1039 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1059 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl **)(&(*yyvalp))) = (*(struct psi_decl **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval));
 }
-#line 3702 "src/parser_proc.c" /* glr.c:816  */
+#line 3704 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 431:
-#line 1059 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1079 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        psi_decl_arg_free(&(*(struct psi_decl_arg **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
 }
-#line 3710 "src/parser_proc.c" /* glr.c:816  */
+#line 3712 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 433:
-#line 1066 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1086 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        psi_plist_free((*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3718 "src/parser_proc.c" /* glr.c:816  */
+#line 3720 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 434:
-#line 1072 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1092 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_decl_var_free), &(*(struct psi_decl_var **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3726 "src/parser_proc.c" /* glr.c:816  */
+#line 3728 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 435:
-#line 1075 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1095 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add((*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)), &(*(struct psi_decl_var **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3734 "src/parser_proc.c" /* glr.c:816  */
+#line 3736 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 436:
-#line 1081 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1101 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        psi_decl_free(&(*(struct psi_decl **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
 }
-#line 3742 "src/parser_proc.c" /* glr.c:816  */
+#line 3744 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 437:
-#line 1084 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1104 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        psi_decl_free(&(*(struct psi_decl **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
 }
-#line 3750 "src/parser_proc.c" /* glr.c:816  */
+#line 3752 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 438:
-#line 1087 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1107 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        psi_decl_free(&(*(struct psi_decl **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
 }
-#line 3758 "src/parser_proc.c" /* glr.c:816  */
+#line 3760 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 445:
-#line 1108 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1128 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl **)(&(*yyvalp))) = (*(struct psi_decl **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
        (*(struct psi_decl **)(&(*yyvalp)))->abi = psi_decl_abi_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->text);
 }
-#line 3767 "src/parser_proc.c" /* glr.c:816  */
+#line 3769 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 448:
-#line 1120 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1140 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl **)(&(*yyvalp))) = psi_decl_init((*(struct psi_decl_arg **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval)), (*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)));
        if ((*(size_t*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))) {
@@ -3775,11 +3777,11 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
                (*(struct psi_decl **)(&(*yyvalp)))->func->var->array_size = (*(size_t*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
        }
 }
-#line 3779 "src/parser_proc.c" /* glr.c:816  */
+#line 3781 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 449:
-#line 1127 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1147 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl **)(&(*yyvalp))) = psi_decl_init((*(struct psi_decl_arg **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval)), (*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval)));
        (*(struct psi_decl **)(&(*yyvalp)))->varargs = 1;
@@ -3788,11 +3790,11 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
                (*(struct psi_decl **)(&(*yyvalp)))->func->var->array_size = (*(size_t*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
        }
 }
-#line 3792 "src/parser_proc.c" /* glr.c:816  */
+#line 3794 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 450:
-#line 1138 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1158 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl **)(&(*yyvalp))) = psi_decl_init((*(struct psi_decl_arg **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval)), (*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)));
        if ((*(size_t*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))) {
@@ -3800,11 +3802,11 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
                (*(struct psi_decl **)(&(*yyvalp)))->func->var->array_size = (*(size_t*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
        }
 }
-#line 3804 "src/parser_proc.c" /* glr.c:816  */
+#line 3806 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 451:
-#line 1145 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1165 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl **)(&(*yyvalp))) = psi_decl_init((*(struct psi_decl_arg **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval)), (*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval)));
        (*(struct psi_decl **)(&(*yyvalp)))->varargs = 1;
@@ -3813,11 +3815,11 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
                (*(struct psi_decl **)(&(*yyvalp)))->func->var->array_size = (*(size_t*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
        }
 }
-#line 3817 "src/parser_proc.c" /* glr.c:816  */
+#line 3819 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 452:
-#line 1156 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1176 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (void) (*(size_t*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval));
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->type = PSI_T_NAME;
@@ -3825,11 +3827,11 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
        (*(struct psi_decl_arg **)(&(*yyvalp)))->var->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
        (*(struct psi_decl_arg **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
 }
-#line 3829 "src/parser_proc.c" /* glr.c:816  */
+#line 3831 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 453:
-#line 1163 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1183 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (void) (*(size_t*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval));
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->type = PSI_T_NAME;
@@ -3841,11 +3843,11 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
        (*(struct psi_decl_arg **)(&(*yyvalp)))->var->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
        (*(struct psi_decl_arg **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
 }
-#line 3845 "src/parser_proc.c" /* glr.c:816  */
+#line 3847 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 454:
-#line 1174 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1194 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (void) (*(size_t*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval));
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->type = PSI_T_NAME;
@@ -3857,11 +3859,11 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
        (*(struct psi_decl_arg **)(&(*yyvalp)))->var->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
        (*(struct psi_decl_arg **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
 }
-#line 3861 "src/parser_proc.c" /* glr.c:816  */
+#line 3863 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 455:
-#line 1185 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1205 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (void) (*(size_t*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval));
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->type = PSI_T_NAME;
@@ -3873,11 +3875,11 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
        (*(struct psi_decl_arg **)(&(*yyvalp)))->var->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
        (*(struct psi_decl_arg **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
 }
-#line 3877 "src/parser_proc.c" /* glr.c:816  */
+#line 3879 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 457:
-#line 1200 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1220 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_arg **)(&(*yyvalp))) = psi_decl_arg_init(
                psi_decl_type_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->type, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->text),
@@ -3887,62 +3889,62 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
        (*(struct psi_decl_arg **)(&(*yyvalp)))->var->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_decl_arg **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3891 "src/parser_proc.c" /* glr.c:816  */
+#line 3893 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 458:
-#line 1212 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1232 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = NULL;
 }
-#line 3899 "src/parser_proc.c" /* glr.c:816  */
+#line 3901 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 459:
-#line 1215 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1235 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = NULL;
 }
-#line 3907 "src/parser_proc.c" /* glr.c:816  */
+#line 3909 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 460:
-#line 1218 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1238 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_decl_arg_free), &(*(struct psi_decl_arg **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3915 "src/parser_proc.c" /* glr.c:816  */
+#line 3917 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 461:
-#line 1221 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1241 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add((*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)), &(*(struct psi_decl_arg **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3923 "src/parser_proc.c" /* glr.c:816  */
+#line 3925 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 462:
-#line 1228 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1248 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_arg **)(&(*yyvalp))) = (*(struct psi_decl_arg **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
 }
-#line 3931 "src/parser_proc.c" /* glr.c:816  */
+#line 3933 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 463:
-#line 1231 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1251 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_arg **)(&(*yyvalp))) = psi_decl_arg_init(
                (*(struct psi_decl_type **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)), 
                psi_decl_var_init(NULL, (*(size_t*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)), 0)
        );
 }
-#line 3942 "src/parser_proc.c" /* glr.c:816  */
+#line 3944 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 464:
-#line 1237 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1257 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_arg **)(&(*yyvalp))) = psi_decl_arg_init(
                psi_decl_type_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->type, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->text),
@@ -3952,11 +3954,11 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
        (*(struct psi_decl_arg **)(&(*yyvalp)))->var->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
        (*(struct psi_decl_arg **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
 }
-#line 3956 "src/parser_proc.c" /* glr.c:816  */
+#line 3958 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 465:
-#line 1246 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1266 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_arg **)(&(*yyvalp))) = psi_decl_arg_init(
                psi_decl_type_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->type, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->text),
@@ -3966,11 +3968,11 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
        (*(struct psi_decl_arg **)(&(*yyvalp)))->var->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
        (*(struct psi_decl_arg **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
 }
-#line 3970 "src/parser_proc.c" /* glr.c:816  */
+#line 3972 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 466:
-#line 1258 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1278 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_arg **)(&(*yyvalp))) = psi_decl_arg_init(
                psi_decl_type_init(PSI_T_FUNCTION, (*(struct psi_decl **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->func->var->name),
@@ -3979,19 +3981,19 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
        (*(struct psi_decl_arg **)(&(*yyvalp)))->type->token = psi_token_copy((*(struct psi_decl **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->func->token);
        (*(struct psi_decl_arg **)(&(*yyvalp)))->type->real.func = (*(struct psi_decl **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
 }
-#line 3983 "src/parser_proc.c" /* glr.c:816  */
+#line 3985 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 467:
-#line 1266 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1286 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_arg **)(&(*yyvalp))) = psi_decl_arg_init((*(struct psi_decl_type **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)), (*(struct psi_decl_var **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 3991 "src/parser_proc.c" /* glr.c:816  */
+#line 3993 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 468:
-#line 1269 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1289 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->type = PSI_T_NAME;
        (*(struct psi_decl_arg **)(&(*yyvalp))) = psi_decl_arg_init(
@@ -4002,11 +4004,11 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
        (*(struct psi_decl_arg **)(&(*yyvalp)))->var->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_decl_arg **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 4006 "src/parser_proc.c" /* glr.c:816  */
+#line 4008 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 469:
-#line 1279 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1299 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->type = PSI_T_NAME;
        (*(struct psi_decl_arg **)(&(*yyvalp))) = psi_decl_arg_init(
@@ -4017,31 +4019,31 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
        (*(struct psi_decl_arg **)(&(*yyvalp)))->var->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_decl_arg **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 4021 "src/parser_proc.c" /* glr.c:816  */
+#line 4023 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 470:
-#line 1292 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1312 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->type = PSI_T_NAME;
        (*(struct psi_decl_var **)(&(*yyvalp))) = psi_decl_var_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->text, (*(size_t*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)) + !! (*(size_t*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)), (*(size_t*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_decl_var **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
 }
-#line 4031 "src/parser_proc.c" /* glr.c:816  */
+#line 4033 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 471:
-#line 1297 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1317 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->type = PSI_T_NAME;
        (*(struct psi_decl_var **)(&(*yyvalp))) = psi_decl_var_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->text, !! (*(size_t*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)), (*(size_t*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_decl_var **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
 }
-#line 4041 "src/parser_proc.c" /* glr.c:816  */
+#line 4043 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 472:
-#line 1305 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1325 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval))->type = PSI_T_NAME;
        (*(struct psi_decl_union **)(&(*yyvalp))) = psi_decl_union_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval))->text, (*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
@@ -4049,11 +4051,11 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
        (*(struct psi_decl_union **)(&(*yyvalp)))->size = (*(struct psi_layout*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)).len;
        (*(struct psi_decl_union **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)));
 }
-#line 4053 "src/parser_proc.c" /* glr.c:816  */
+#line 4055 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 473:
-#line 1315 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1335 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval))->type = PSI_T_NAME;
        (*(struct psi_decl_struct **)(&(*yyvalp))) = psi_decl_struct_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval))->text, (*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
@@ -4061,27 +4063,27 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
        (*(struct psi_decl_struct **)(&(*yyvalp)))->size = (*(struct psi_layout*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)).len;
        (*(struct psi_decl_struct **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)));
 }
-#line 4065 "src/parser_proc.c" /* glr.c:816  */
+#line 4067 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 474:
-#line 1325 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1345 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = NULL;
 }
-#line 4073 "src/parser_proc.c" /* glr.c:816  */
+#line 4075 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 476:
-#line 1332 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1352 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = (*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval));
 }
-#line 4081 "src/parser_proc.c" /* glr.c:816  */
+#line 4083 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 477:
-#line 1338 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1358 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_arg **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval))->layout = (*(struct psi_layout **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval));
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_decl_arg_free), &(*(struct psi_decl_arg **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval)));
@@ -4096,11 +4098,11 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
                free((*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
        }
 }
-#line 4100 "src/parser_proc.c" /* glr.c:816  */
+#line 4102 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 478:
-#line 1352 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1372 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_arg **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval))->layout = (*(struct psi_layout **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval));
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add((*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval)), &(*(struct psi_decl_arg **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval)));
@@ -4115,27 +4117,27 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
                free((*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
        }
 }
-#line 4119 "src/parser_proc.c" /* glr.c:816  */
+#line 4121 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 479:
-#line 1369 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1389 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = NULL;
 }
-#line 4127 "src/parser_proc.c" /* glr.c:816  */
+#line 4129 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 480:
-#line 1372 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1392 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = (*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
 }
-#line 4135 "src/parser_proc.c" /* glr.c:816  */
+#line 4137 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 481:
-#line 1378 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1398 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        {
                struct psi_decl_arg *arg = psi_decl_arg_init(NULL, (*(struct psi_decl_var **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
@@ -4143,11 +4145,11 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
                (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_decl_arg_free), &arg);
        }
 }
-#line 4147 "src/parser_proc.c" /* glr.c:816  */
+#line 4149 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 482:
-#line 1385 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1405 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        {
                struct psi_decl_arg *arg = psi_decl_arg_init(NULL, (*(struct psi_decl_var **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
@@ -4155,189 +4157,189 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
                (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add((*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval)), &arg);
        }
 }
-#line 4159 "src/parser_proc.c" /* glr.c:816  */
+#line 4161 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 483:
-#line 1395 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1415 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_decl_enum **)(&(*yyvalp))) = psi_decl_enum_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval))->text, (*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
        (*(struct psi_decl_enum **)(&(*yyvalp)))->token = (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval));
 }
-#line 4168 "src/parser_proc.c" /* glr.c:816  */
+#line 4170 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 484:
-#line 1402 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1422 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_decl_enum_item_free), &(*(struct psi_decl_enum_item **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 4176 "src/parser_proc.c" /* glr.c:816  */
+#line 4178 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 485:
-#line 1405 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1425 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add((*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)), &(*(struct psi_decl_enum_item **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 4184 "src/parser_proc.c" /* glr.c:816  */
+#line 4186 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 486:
-#line 1411 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1431 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->type = PSI_T_NAME;
        (*(struct psi_decl_enum_item **)(&(*yyvalp))) = psi_decl_enum_item_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->text, NULL);
        (*(struct psi_decl_enum_item **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 4194 "src/parser_proc.c" /* glr.c:816  */
+#line 4196 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 487:
-#line 1416 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1436 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval))->type = PSI_T_NAME;
        (*(struct psi_decl_enum_item **)(&(*yyvalp))) = psi_decl_enum_item_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval))->text, (*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_decl_enum_item **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)));
 }
-#line 4204 "src/parser_proc.c" /* glr.c:816  */
+#line 4206 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 488:
-#line 1424 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1444 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_num_exp **)(&(*yyvalp))) = psi_num_exp_init_num((*(struct psi_number **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_num_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_number **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->token);
 }
-#line 4213 "src/parser_proc.c" /* glr.c:816  */
+#line 4215 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 489:
-#line 1428 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1448 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_num_exp **)(&(*yyvalp))) = psi_num_exp_init_cast((*(struct psi_decl_type **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)), (*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_num_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_decl_type **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval))->token);
 }
-#line 4222 "src/parser_proc.c" /* glr.c:816  */
+#line 4224 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 490:
-#line 1432 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1452 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_num_exp **)(&(*yyvalp))) = psi_num_exp_init_unary(PSI_T_LPAREN, (*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
        (*(struct psi_num_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)));
 }
-#line 4231 "src/parser_proc.c" /* glr.c:816  */
+#line 4233 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 491:
-#line 1436 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1456 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_num_exp **)(&(*yyvalp))) = psi_num_exp_init_binary((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->type, (*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)), (*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_num_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
 }
-#line 4240 "src/parser_proc.c" /* glr.c:816  */
+#line 4242 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 492:
-#line 1440 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1460 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_num_exp **)(&(*yyvalp))) = psi_num_exp_init_unary((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->type, (*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_num_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
 }
-#line 4249 "src/parser_proc.c" /* glr.c:816  */
+#line 4251 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 493:
-#line 1444 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1464 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_num_exp **)(&(*yyvalp))) = psi_num_exp_init_ternary((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval))->type, (*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval)), (*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)), (*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_num_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval)));
 }
-#line 4258 "src/parser_proc.c" /* glr.c:816  */
+#line 4260 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 494:
-#line 1451 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1471 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_number **)(&(*yyvalp))) = psi_number_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->type, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->text, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->flags);
        (*(struct psi_number **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 4267 "src/parser_proc.c" /* glr.c:816  */
+#line 4269 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 495:
-#line 1455 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1475 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_number **)(&(*yyvalp))) = psi_number_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->type, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->text, 0);
        (*(struct psi_number **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 4276 "src/parser_proc.c" /* glr.c:816  */
+#line 4278 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 496:
-#line 1459 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1479 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_number **)(&(*yyvalp))) = psi_number_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->type, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->text, 0);
        (*(struct psi_number **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 4285 "src/parser_proc.c" /* glr.c:816  */
+#line 4287 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 497:
-#line 1463 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1483 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_number **)(&(*yyvalp))) = psi_number_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->type, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->text, 0);
        (*(struct psi_number **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 4294 "src/parser_proc.c" /* glr.c:816  */
+#line 4296 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 498:
-#line 1467 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1487 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_number **)(&(*yyvalp))) = psi_number_init(PSI_T_NAME, (*(struct psi_decl_var **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)), 0);
        (*(struct psi_number **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_decl_var **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->token);
 }
-#line 4303 "src/parser_proc.c" /* glr.c:816  */
+#line 4305 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 499:
-#line 1471 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1491 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_number **)(&(*yyvalp))) = (*(struct psi_number **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
 }
-#line 4311 "src/parser_proc.c" /* glr.c:816  */
+#line 4313 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 500:
-#line 1477 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1497 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_number **)(&(*yyvalp))) = (*(struct psi_number **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval));
        (*(struct psi_number **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval)));
 }
-#line 4320 "src/parser_proc.c" /* glr.c:816  */
+#line 4322 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 501:
-#line 1481 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1501 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_number **)(&(*yyvalp))) = (*(struct psi_number **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
        (*(struct psi_number **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
 }
-#line 4329 "src/parser_proc.c" /* glr.c:816  */
+#line 4331 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 502:
-#line 1488 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1508 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_number **)(&(*yyvalp))) = (*(struct psi_number **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
 }
-#line 4337 "src/parser_proc.c" /* glr.c:816  */
+#line 4339 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 503:
-#line 1491 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1511 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        if ((*(size_t*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))) {
                int8_t sizeof_void_p = sizeof(void *);
@@ -4346,37 +4348,37 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
                (*(struct psi_number **)(&(*yyvalp))) = psi_number_init(PSI_T_SIZEOF, (*(struct psi_decl_type **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)), 0);
        }
 }
-#line 4350 "src/parser_proc.c" /* glr.c:816  */
+#line 4352 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 504:
-#line 1502 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1522 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        int8_t sizeof_void_p = sizeof(void *);
        (*(struct psi_number **)(&(*yyvalp))) = psi_number_init(PSI_T_INT8, &sizeof_void_p, 0);
 }
-#line 4359 "src/parser_proc.c" /* glr.c:816  */
+#line 4361 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 505:
-#line 1506 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1526 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        int8_t sizeof_a = sizeof('a');
        (*(struct psi_number **)(&(*yyvalp))) = psi_number_init(PSI_T_INT8, &sizeof_a, 0);
 }
-#line 4368 "src/parser_proc.c" /* glr.c:816  */
+#line 4370 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 506:
-#line 1510 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1530 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_number **)(&(*yyvalp))) = psi_number_init(PSI_T_INT64, &(*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->size, 0);
 }
-#line 4376 "src/parser_proc.c" /* glr.c:816  */
+#line 4378 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 507:
-#line 1516 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1536 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        if ((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))) {
                (*(struct psi_token **)(&(*yyvalp))) = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
@@ -4387,11 +4389,11 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
                (*(struct psi_token **)(&(*yyvalp))) = psi_token_append("@", psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))), 1, digest);
        }
 }
-#line 4391 "src/parser_proc.c" /* glr.c:816  */
+#line 4393 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 508:
-#line 1529 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1549 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        if ((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))) {
                (*(struct psi_token **)(&(*yyvalp))) = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
@@ -4402,11 +4404,11 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
                (*(struct psi_token **)(&(*yyvalp))) = psi_token_append("@", psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))), 1, digest);
        }
 }
-#line 4406 "src/parser_proc.c" /* glr.c:816  */
+#line 4408 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 509:
-#line 1542 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1562 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        if ((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))) {
                (*(struct psi_token **)(&(*yyvalp))) = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
@@ -4417,94 +4419,94 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
                (*(struct psi_token **)(&(*yyvalp))) = psi_token_append("@", psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))), 1, digest);
        }
 }
-#line 4421 "src/parser_proc.c" /* glr.c:816  */
+#line 4423 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 510:
-#line 1555 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1575 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&(*yyvalp))) = NULL;
 }
-#line 4429 "src/parser_proc.c" /* glr.c:816  */
+#line 4431 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 511:
-#line 1558 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1578 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&(*yyvalp))) = (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
        (*(struct psi_token **)(&(*yyvalp)))->type = PSI_T_NAME;
 }
-#line 4438 "src/parser_proc.c" /* glr.c:816  */
+#line 4440 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 512:
-#line 1565 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1585 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_layout **)(&(*yyvalp))) = NULL;
 }
-#line 4446 "src/parser_proc.c" /* glr.c:816  */
+#line 4448 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 513:
-#line 1568 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1588 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_layout **)(&(*yyvalp))) = psi_layout_init(0, 0, psi_layout_init(0, atol((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->text), NULL));
 }
-#line 4454 "src/parser_proc.c" /* glr.c:816  */
+#line 4456 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 514:
-#line 1571 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1591 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_layout **)(&(*yyvalp))) = psi_layout_init(atol((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval))->text), atol((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->text), NULL);
 }
-#line 4462 "src/parser_proc.c" /* glr.c:816  */
+#line 4464 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 515:
-#line 1574 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1594 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_layout **)(&(*yyvalp))) = psi_layout_init(atol((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval))->text), atol((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->text), psi_layout_init(0, atol((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-7)].yystate.yysemantics.yysval))->text), NULL));
 }
-#line 4470 "src/parser_proc.c" /* glr.c:816  */
+#line 4472 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 516:
-#line 1580 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1600 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_layout*)(&(*yyvalp))).pos = 0;
        (*(struct psi_layout*)(&(*yyvalp))).len = 0;
 }
-#line 4479 "src/parser_proc.c" /* glr.c:816  */
+#line 4481 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 517:
-#line 1584 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1604 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_layout*)(&(*yyvalp))).pos = atol((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval))->text);
        (*(struct psi_layout*)(&(*yyvalp))).len = atol((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))->text);
 }
-#line 4488 "src/parser_proc.c" /* glr.c:816  */
+#line 4490 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 518:
-#line 1591 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1611 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(size_t*)(&(*yyvalp))) = 0;
 }
-#line 4496 "src/parser_proc.c" /* glr.c:816  */
+#line 4498 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 519:
-#line 1594 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1614 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(size_t*)(&(*yyvalp))) = 0;
 }
-#line 4504 "src/parser_proc.c" /* glr.c:816  */
+#line 4506 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 520:
-#line 1597 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1617 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        if (psi_num_exp_validate(PSI_DATA(P), (*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)), NULL, NULL, NULL, NULL, NULL)) {
                (*(size_t*)(&(*yyvalp))) = psi_long_num_exp((*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)), NULL, &P->preproc->defs);
@@ -4512,88 +4514,88 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
                (*(size_t*)(&(*yyvalp))) = 0;
        }
 }
-#line 4516 "src/parser_proc.c" /* glr.c:816  */
+#line 4518 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 521:
-#line 1607 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1627 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(size_t*)(&(*yyvalp))) = 0;
 }
-#line 4524 "src/parser_proc.c" /* glr.c:816  */
+#line 4526 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 522:
-#line 1610 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1630 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(size_t*)(&(*yyvalp))) = (*(size_t*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
 }
-#line 4532 "src/parser_proc.c" /* glr.c:816  */
+#line 4534 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 524:
-#line 1617 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1637 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(size_t*)(&(*yyvalp))) = (*(size_t*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval));
 }
-#line 4540 "src/parser_proc.c" /* glr.c:816  */
+#line 4542 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 525:
-#line 1623 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1643 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(size_t*)(&(*yyvalp))) = 1;
 }
-#line 4548 "src/parser_proc.c" /* glr.c:816  */
+#line 4550 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 526:
-#line 1626 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1646 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(size_t*)(&(*yyvalp))) = (*(size_t*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)) + 1;
 }
-#line 4556 "src/parser_proc.c" /* glr.c:816  */
+#line 4558 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 529:
-#line 1643 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1663 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_impl **)(&(*yyvalp))) = psi_impl_init((*(struct psi_impl_func **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval)), (*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
 }
-#line 4564 "src/parser_proc.c" /* glr.c:816  */
+#line 4566 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 530:
-#line 1646 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1666 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_impl **)(&(*yyvalp))) = psi_impl_init((*(struct psi_impl_func **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval)), (*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
        (*(struct psi_impl_func **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval))->static_memory = 1;
 }
-#line 4573 "src/parser_proc.c" /* glr.c:816  */
+#line 4575 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 531:
-#line 1653 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1673 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_impl_func **)(&(*yyvalp))) = psi_impl_func_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval))->text, NULL, (*(struct psi_impl_type **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_impl_func **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval)));
        (*(struct psi_impl_func **)(&(*yyvalp)))->return_reference = (*(bool*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval));
 }
-#line 4583 "src/parser_proc.c" /* glr.c:816  */
+#line 4585 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 532:
-#line 1658 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1678 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_impl_func **)(&(*yyvalp))) = psi_impl_func_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval))->text, (*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval)), (*(struct psi_impl_type **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_impl_func **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval)));
        (*(struct psi_impl_func **)(&(*yyvalp)))->return_reference = (*(bool*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval));
 }
-#line 4593 "src/parser_proc.c" /* glr.c:816  */
+#line 4595 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 533:
-#line 1663 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1683 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_impl_func **)(&(*yyvalp))) = psi_impl_func_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-10)].yystate.yysemantics.yysval))->text, (*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-8)].yystate.yysemantics.yysval)), (*(struct psi_impl_type **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_impl_func **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-10)].yystate.yysemantics.yysval)));
@@ -4601,512 +4603,512 @@ yyuserAction (yyRuleNum yyn, size_t yyrhslen, yyGLRStackItem* yyvsp,
        (*(struct psi_impl_func **)(&(*yyvalp)))->vararg = psi_impl_arg_init((*(struct psi_impl_type **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval)), psi_impl_var_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval))->text, (*(bool*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval))), NULL);
        (*(struct psi_impl_func **)(&(*yyvalp)))->vararg->var->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval)));
 }
-#line 4605 "src/parser_proc.c" /* glr.c:816  */
+#line 4607 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 534:
-#line 1673 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1693 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_impl_arg_free), &(*(struct psi_impl_arg **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 4613 "src/parser_proc.c" /* glr.c:816  */
+#line 4615 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 535:
-#line 1676 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1696 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add((*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)), &(*(struct psi_impl_arg **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 4621 "src/parser_proc.c" /* glr.c:816  */
+#line 4623 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 536:
-#line 1682 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1702 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_impl_arg **)(&(*yyvalp))) = psi_impl_arg_init((*(struct psi_impl_type **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)), (*(struct psi_impl_var **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)), NULL);
 }
-#line 4629 "src/parser_proc.c" /* glr.c:816  */
+#line 4631 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 537:
-#line 1685 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1705 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_impl_arg **)(&(*yyvalp))) = psi_impl_arg_init((*(struct psi_impl_type **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval)), (*(struct psi_impl_var **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)), (*(struct psi_impl_def_val **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 4637 "src/parser_proc.c" /* glr.c:816  */
+#line 4639 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 538:
-#line 1691 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1711 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_impl_var **)(&(*yyvalp))) = psi_impl_var_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->text, (*(bool*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
        (*(struct psi_impl_var **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 4646 "src/parser_proc.c" /* glr.c:816  */
+#line 4648 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 539:
-#line 1698 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1718 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_impl_type **)(&(*yyvalp))) = psi_impl_type_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->type, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->text);
        (*(struct psi_impl_type **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 4655 "src/parser_proc.c" /* glr.c:816  */
+#line 4657 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 549:
-#line 1717 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1737 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_impl_stmt_free), &(*(struct psi_token ***)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 4663 "src/parser_proc.c" /* glr.c:816  */
+#line 4665 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 550:
-#line 1720 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1740 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add((*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)), &(*(struct psi_token ***)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 4671 "src/parser_proc.c" /* glr.c:816  */
+#line 4673 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 551:
-#line 1726 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1746 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token ***)(&(*yyvalp))) = (struct psi_token **) (*(struct psi_return_stmt **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
 }
-#line 4679 "src/parser_proc.c" /* glr.c:816  */
+#line 4681 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 552:
-#line 1729 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1749 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token ***)(&(*yyvalp))) = (struct psi_token **) (*(struct psi_let_stmt **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
 }
-#line 4687 "src/parser_proc.c" /* glr.c:816  */
+#line 4689 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 553:
-#line 1732 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1752 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token ***)(&(*yyvalp))) = (struct psi_token **) (*(struct psi_set_stmt **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
 }
-#line 4695 "src/parser_proc.c" /* glr.c:816  */
+#line 4697 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 554:
-#line 1735 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1755 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token ***)(&(*yyvalp))) = (struct psi_token **) (*(struct psi_assert_stmt **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
 }
-#line 4703 "src/parser_proc.c" /* glr.c:816  */
+#line 4705 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 555:
-#line 1738 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1758 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token ***)(&(*yyvalp))) = (struct psi_token **) (*(struct psi_free_stmt **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
 }
-#line 4711 "src/parser_proc.c" /* glr.c:816  */
+#line 4713 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 556:
-#line 1744 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1764 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_let_stmt **)(&(*yyvalp))) = psi_let_stmt_init((*(struct psi_let_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
        (*(struct psi_let_stmt **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)));
 }
-#line 4720 "src/parser_proc.c" /* glr.c:816  */
+#line 4722 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 557:
-#line 1748 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1768 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_let_stmt **)(&(*yyvalp))) = psi_let_stmt_init(psi_let_exp_init_ex((*(struct psi_decl_var **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval)), PSI_LET_TMP, (*(struct psi_decl_var **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval))));
        (*(struct psi_let_stmt **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval)));
        (*(struct psi_let_stmt **)(&(*yyvalp)))->exp->is_reference = (*(bool*)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval));
 }
-#line 4730 "src/parser_proc.c" /* glr.c:816  */
+#line 4732 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 559:
-#line 1757 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1777 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_let_exp **)(&(*yyvalp))) = (*(struct psi_let_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
        (*(struct psi_let_exp **)(&(*yyvalp)))->is_reference = true;
 }
-#line 4739 "src/parser_proc.c" /* glr.c:816  */
+#line 4741 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 560:
-#line 1761 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1781 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_let_exp **)(&(*yyvalp))) = (*(struct psi_let_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
        (*(struct psi_let_exp **)(&(*yyvalp)))->is_reference = false;
 }
-#line 4748 "src/parser_proc.c" /* glr.c:816  */
+#line 4750 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 561:
-#line 1768 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1788 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_let_exp **)(&(*yyvalp))) = psi_let_exp_init(PSI_LET_NULL, NULL);
 }
-#line 4756 "src/parser_proc.c" /* glr.c:816  */
+#line 4758 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 562:
-#line 1771 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1791 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_let_exp **)(&(*yyvalp))) = psi_let_exp_init_ex(NULL, PSI_LET_NUMEXP, (*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 4764 "src/parser_proc.c" /* glr.c:816  */
+#line 4766 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 563:
-#line 1774 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1794 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_let_exp **)(&(*yyvalp))) = psi_let_exp_init(PSI_LET_CALLOC, (*(struct psi_let_calloc **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 4772 "src/parser_proc.c" /* glr.c:816  */
+#line 4774 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 564:
-#line 1777 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1797 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_let_exp **)(&(*yyvalp))) = psi_let_exp_init(PSI_LET_CALLOC, (*(struct psi_let_calloc **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
        (*(struct psi_let_calloc **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->static_memory = 1;
 }
-#line 4781 "src/parser_proc.c" /* glr.c:816  */
+#line 4783 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 565:
-#line 1781 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1801 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_let_exp **)(&(*yyvalp))) = psi_let_exp_init(PSI_LET_CALLBACK, (*(struct psi_let_callback **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 4789 "src/parser_proc.c" /* glr.c:816  */
+#line 4791 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 566:
-#line 1784 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1804 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_let_exp **)(&(*yyvalp))) = psi_let_exp_init_ex(NULL, PSI_LET_FUNC, (*(struct psi_let_func **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 4797 "src/parser_proc.c" /* glr.c:816  */
+#line 4799 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 567:
-#line 1790 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1810 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_let_exp **)(&(*yyvalp))) = (*(struct psi_let_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
        (*(struct psi_let_exp **)(&(*yyvalp)))->var = (*(struct psi_decl_var **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval));
 }
-#line 4806 "src/parser_proc.c" /* glr.c:816  */
+#line 4808 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 568:
-#line 1794 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1814 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_let_exp **)(&(*yyvalp))) = (*(struct psi_let_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
        (*(struct psi_let_exp **)(&(*yyvalp)))->is_reference = 1;
        (*(struct psi_let_exp **)(&(*yyvalp)))->var = (*(struct psi_decl_var **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval));
 }
-#line 4816 "src/parser_proc.c" /* glr.c:816  */
+#line 4818 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 569:
-#line 1802 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1822 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_let_calloc **)(&(*yyvalp))) = psi_let_calloc_init((*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval)), (*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
        (*(struct psi_let_calloc **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval)));
 }
-#line 4825 "src/parser_proc.c" /* glr.c:816  */
+#line 4827 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 570:
-#line 1809 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1829 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_let_callback **)(&(*yyvalp))) = psi_let_callback_init(psi_let_func_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval))->type, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval))->text, (*(struct psi_impl_var **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval))), (*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)));
        (*(struct psi_let_callback **)(&(*yyvalp)))->func->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-6)].yystate.yysemantics.yysval)));
        (*(struct psi_let_callback **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-7)].yystate.yysemantics.yysval)));
 }
-#line 4835 "src/parser_proc.c" /* glr.c:816  */
+#line 4837 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 571:
-#line 1817 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1837 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_let_func **)(&(*yyvalp))) = psi_let_func_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval))->type, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval))->text, (*(struct psi_impl_var **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)));
        (*(struct psi_let_func **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval)));
        (*(struct psi_let_func **)(&(*yyvalp)))->inner = (*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval));
 }
-#line 4845 "src/parser_proc.c" /* glr.c:816  */
+#line 4847 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 582:
-#line 1838 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1858 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = NULL;
 }
-#line 4853 "src/parser_proc.c" /* glr.c:816  */
+#line 4855 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 583:
-#line 1841 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1861 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = (*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
 }
-#line 4861 "src/parser_proc.c" /* glr.c:816  */
+#line 4863 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 584:
-#line 1847 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1867 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_let_exp_free), &(*(struct psi_let_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 4869 "src/parser_proc.c" /* glr.c:816  */
+#line 4871 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 585:
-#line 1850 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1870 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add((*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)), &(*(struct psi_let_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 4877 "src/parser_proc.c" /* glr.c:816  */
+#line 4879 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 588:
-#line 1861 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1881 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = NULL;
 }
-#line 4885 "src/parser_proc.c" /* glr.c:816  */
+#line 4887 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 589:
-#line 1864 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1884 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = (*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
 }
-#line 4893 "src/parser_proc.c" /* glr.c:816  */
+#line 4895 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 590:
-#line 1870 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1890 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_set_exp_free), &(*(struct psi_set_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 4901 "src/parser_proc.c" /* glr.c:816  */
+#line 4903 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 591:
-#line 1873 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1893 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add((*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)), &(*(struct psi_set_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 4909 "src/parser_proc.c" /* glr.c:816  */
+#line 4911 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 592:
-#line 1879 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1899 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_return_stmt **)(&(*yyvalp))) = psi_return_stmt_init((*(struct psi_return_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
        (*(struct psi_return_stmt **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)));
 }
-#line 4918 "src/parser_proc.c" /* glr.c:816  */
+#line 4920 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 593:
-#line 1886 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1906 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_return_exp **)(&(*yyvalp))) = psi_return_exp_init((*(struct psi_decl_var **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval)), (*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval)), psi_set_exp_init(PSI_SET_FUNC, (*(struct psi_set_func **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))));
        (*(struct psi_return_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_decl_var **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval))->token);
 }
-#line 4927 "src/parser_proc.c" /* glr.c:816  */
+#line 4929 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 594:
-#line 1890 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1910 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_return_exp **)(&(*yyvalp))) = psi_return_exp_init(NULL, NULL, psi_set_exp_init(PSI_SET_FUNC, (*(struct psi_set_func **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))));
        (*(struct psi_return_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_set_func **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval))->token);
 }
-#line 4936 "src/parser_proc.c" /* glr.c:816  */
+#line 4938 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 595:
-#line 1897 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1917 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = NULL;
 }
-#line 4944 "src/parser_proc.c" /* glr.c:816  */
+#line 4946 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 596:
-#line 1900 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1920 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = NULL;
 }
-#line 4952 "src/parser_proc.c" /* glr.c:816  */
+#line 4954 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 597:
-#line 1903 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1923 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = (*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
 }
-#line 4960 "src/parser_proc.c" /* glr.c:816  */
+#line 4962 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 598:
-#line 1909 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1929 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_set_stmt **)(&(*yyvalp))) = psi_set_stmt_init((*(struct psi_set_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
        (*(struct psi_set_stmt **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)));
 }
-#line 4969 "src/parser_proc.c" /* glr.c:816  */
+#line 4971 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 599:
-#line 1916 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1936 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_set_exp **)(&(*yyvalp))) = psi_set_exp_init(PSI_SET_FUNC, (*(struct psi_set_func **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 4977 "src/parser_proc.c" /* glr.c:816  */
+#line 4979 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 600:
-#line 1919 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1939 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_set_exp **)(&(*yyvalp))) = psi_set_exp_init(PSI_SET_NUMEXP, (*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 4985 "src/parser_proc.c" /* glr.c:816  */
+#line 4987 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 601:
-#line 1922 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1942 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_set_exp **)(&(*yyvalp))) = (*(struct psi_set_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
        (*(struct psi_set_exp **)(&(*yyvalp)))->var = (*(struct psi_impl_var **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval));
 }
-#line 4994 "src/parser_proc.c" /* glr.c:816  */
+#line 4996 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 602:
-#line 1929 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1949 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_set_func **)(&(*yyvalp))) = psi_set_func_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval))->type, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval))->text, (*(struct psi_decl_var **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)));
        (*(struct psi_set_func **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-4)].yystate.yysemantics.yysval)));
        (*(struct psi_set_func **)(&(*yyvalp)))->inner = (*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval));
 }
-#line 5004 "src/parser_proc.c" /* glr.c:816  */
+#line 5006 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 603:
-#line 1934 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1954 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_set_func **)(&(*yyvalp))) = psi_set_func_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval))->type, (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval))->text, (*(struct psi_decl_var **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval)));
        (*(struct psi_set_func **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-5)].yystate.yysemantics.yysval)));
        (*(struct psi_set_func **)(&(*yyvalp)))->recursive = 1;
 }
-#line 5014 "src/parser_proc.c" /* glr.c:816  */
+#line 5016 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 612:
-#line 1953 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1973 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = NULL;
 }
-#line 5022 "src/parser_proc.c" /* glr.c:816  */
+#line 5024 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 613:
-#line 1956 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1976 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = (*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval));
 }
-#line 5030 "src/parser_proc.c" /* glr.c:816  */
+#line 5032 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 614:
-#line 1962 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1982 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_set_exp_free), &(*(struct psi_set_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 5038 "src/parser_proc.c" /* glr.c:816  */
+#line 5040 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 615:
-#line 1965 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1985 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add((*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)), &(*(struct psi_set_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 5046 "src/parser_proc.c" /* glr.c:816  */
+#line 5048 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 616:
-#line 1971 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 1991 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_assert_stmt **)(&(*yyvalp))) = psi_assert_stmt_init((enum psi_assert_kind) (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval))->type, (*(struct psi_num_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
        (*(struct psi_assert_stmt **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)));
 }
-#line 5055 "src/parser_proc.c" /* glr.c:816  */
+#line 5057 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 619:
-#line 1983 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 2003 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_free_stmt **)(&(*yyvalp))) = psi_free_stmt_init((*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
        (*(struct psi_free_stmt **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)));
 }
-#line 5064 "src/parser_proc.c" /* glr.c:816  */
+#line 5066 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 620:
-#line 1990 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 2010 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_free_exp_free), &(*(struct psi_free_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 5072 "src/parser_proc.c" /* glr.c:816  */
+#line 5074 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 621:
-#line 1993 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 2013 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_plist **)(&(*yyvalp))) = psi_plist_add((*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-2)].yystate.yysemantics.yysval)), &(*(struct psi_free_exp **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (0)].yystate.yysemantics.yysval)));
 }
-#line 5080 "src/parser_proc.c" /* glr.c:816  */
+#line 5082 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 622:
-#line 1999 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 2019 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval))->type = PSI_T_NAME;
        (*(struct psi_free_exp **)(&(*yyvalp))) = psi_free_exp_init((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval))->text, (*(struct psi_plist **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-1)].yystate.yysemantics.yysval)));
        (*(struct psi_free_exp **)(&(*yyvalp)))->token = psi_token_copy((*(struct psi_token **)(&((yyGLRStackItem const *)yyvsp)[YYFILL (-3)].yystate.yysemantics.yysval)));
 }
-#line 5090 "src/parser_proc.c" /* glr.c:816  */
+#line 5092 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 623:
-#line 2007 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 2027 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(bool*)(&(*yyvalp))) = false;
 }
-#line 5098 "src/parser_proc.c" /* glr.c:816  */
+#line 5100 "src/parser_proc.c" /* glr.c:816  */
     break;
 
   case 624:
-#line 2010 "src/parser_proc_grammar.y" /* glr.c:816  */
+#line 2030 "src/parser_proc_grammar.y" /* glr.c:816  */
     {
        (*(bool*)(&(*yyvalp))) = true;
 }
-#line 5106 "src/parser_proc.c" /* glr.c:816  */
+#line 5108 "src/parser_proc.c" /* glr.c:816  */
     break;
 
 
-#line 5110 "src/parser_proc.c" /* glr.c:816  */
+#line 5112 "src/parser_proc.c" /* glr.c:816  */
       default: break;
     }
 
@@ -5154,712 +5156,712 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct psi_parser
   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   switch (yytype)
     {
-          case 129: /* binary_op_token  */
-#line 262 "src/parser_proc_grammar.y" /* glr.c:846  */
+          case 141: /* binary_op_token  */
+#line 282 "src/parser_proc_grammar.y" /* glr.c:846  */
       {}
-#line 5161 "src/parser_proc.c" /* glr.c:846  */
+#line 5163 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 130: /* unary_op_token  */
-#line 262 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 142: /* unary_op_token  */
+#line 282 "src/parser_proc_grammar.y" /* glr.c:846  */
       {}
-#line 5167 "src/parser_proc.c" /* glr.c:846  */
+#line 5169 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 131: /* name_token  */
-#line 262 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 143: /* name_token  */
+#line 282 "src/parser_proc_grammar.y" /* glr.c:846  */
       {}
-#line 5173 "src/parser_proc.c" /* glr.c:846  */
+#line 5175 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 132: /* any_noeol_token  */
-#line 262 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 144: /* any_noeol_token  */
+#line 282 "src/parser_proc_grammar.y" /* glr.c:846  */
       {}
-#line 5179 "src/parser_proc.c" /* glr.c:846  */
+#line 5181 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 137: /* lib  */
-#line 256 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 149: /* lib  */
+#line 276 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_token_free(&(*(struct psi_token **)(&(*yyvaluep))));}
-#line 5185 "src/parser_proc.c" /* glr.c:846  */
+#line 5187 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 138: /* cpp  */
-#line 271 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 150: /* cpp  */
+#line 291 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_cpp_exp_free(&(*(struct psi_cpp_exp **)(&(*yyvaluep))));}
-#line 5191 "src/parser_proc.c" /* glr.c:846  */
+#line 5193 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 139: /* cpp_exp  */
-#line 271 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 151: /* cpp_exp  */
+#line 291 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_cpp_exp_free(&(*(struct psi_cpp_exp **)(&(*yyvaluep))));}
-#line 5197 "src/parser_proc.c" /* glr.c:846  */
+#line 5199 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 141: /* cpp_message_token  */
-#line 259 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 153: /* cpp_message_token  */
+#line 279 "src/parser_proc_grammar.y" /* glr.c:846  */
       {}
-#line 5203 "src/parser_proc.c" /* glr.c:846  */
+#line 5205 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 142: /* cpp_include_token  */
-#line 259 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 154: /* cpp_include_token  */
+#line 279 "src/parser_proc_grammar.y" /* glr.c:846  */
       {}
-#line 5209 "src/parser_proc.c" /* glr.c:846  */
+#line 5211 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 143: /* cpp_header_token  */
-#line 259 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 155: /* cpp_header_token  */
+#line 279 "src/parser_proc_grammar.y" /* glr.c:846  */
       {}
-#line 5215 "src/parser_proc.c" /* glr.c:846  */
+#line 5217 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 144: /* cpp_no_arg_token  */
-#line 259 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 156: /* cpp_no_arg_token  */
+#line 279 "src/parser_proc_grammar.y" /* glr.c:846  */
       {}
-#line 5221 "src/parser_proc.c" /* glr.c:846  */
+#line 5223 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 145: /* cpp_name_arg_token  */
-#line 259 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 157: /* cpp_name_arg_token  */
+#line 279 "src/parser_proc_grammar.y" /* glr.c:846  */
       {}
-#line 5227 "src/parser_proc.c" /* glr.c:846  */
+#line 5229 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 146: /* cpp_exp_arg_token  */
-#line 259 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 158: /* cpp_exp_arg_token  */
+#line 279 "src/parser_proc_grammar.y" /* glr.c:846  */
       {}
-#line 5233 "src/parser_proc.c" /* glr.c:846  */
+#line 5235 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 147: /* cpp_special_name_token  */
-#line 259 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 159: /* cpp_special_name_token  */
+#line 279 "src/parser_proc_grammar.y" /* glr.c:846  */
       {}
-#line 5239 "src/parser_proc.c" /* glr.c:846  */
+#line 5241 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 148: /* cpp_macro_decl  */
-#line 273 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 160: /* cpp_macro_decl  */
+#line 293 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_cpp_macro_decl_free(&(*(struct psi_cpp_macro_decl **)(&(*yyvaluep))));}
-#line 5245 "src/parser_proc.c" /* glr.c:846  */
+#line 5247 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 149: /* cpp_macro_sig  */
-#line 275 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 161: /* cpp_macro_sig  */
+#line 295 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_plist_free((*(struct psi_plist **)(&(*yyvaluep))));}
-#line 5251 "src/parser_proc.c" /* glr.c:846  */
+#line 5253 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 150: /* cpp_macro_sig_args  */
-#line 275 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 162: /* cpp_macro_sig_args  */
+#line 295 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_plist_free((*(struct psi_plist **)(&(*yyvaluep))));}
-#line 5257 "src/parser_proc.c" /* glr.c:846  */
+#line 5259 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 151: /* cpp_macro_decl_tokens  */
-#line 275 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 163: /* cpp_macro_decl_tokens  */
+#line 295 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_plist_free((*(struct psi_plist **)(&(*yyvaluep))));}
-#line 5263 "src/parser_proc.c" /* glr.c:846  */
+#line 5265 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 152: /* cpp_macro_decl_token_list  */
-#line 275 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 164: /* cpp_macro_decl_token_list  */
+#line 295 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_plist_free((*(struct psi_plist **)(&(*yyvaluep))));}
-#line 5269 "src/parser_proc.c" /* glr.c:846  */
+#line 5271 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 153: /* cpp_macro_exp  */
-#line 277 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 165: /* cpp_macro_exp  */
+#line 297 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_num_exp_free(&(*(struct psi_num_exp **)(&(*yyvaluep))));}
-#line 5275 "src/parser_proc.c" /* glr.c:846  */
+#line 5277 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 154: /* cpp_macro_call_args  */
-#line 275 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 166: /* cpp_macro_call_args  */
+#line 295 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_plist_free((*(struct psi_plist **)(&(*yyvaluep))));}
-#line 5281 "src/parser_proc.c" /* glr.c:846  */
+#line 5283 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 155: /* cpp_macro_call_arg_list  */
-#line 275 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 167: /* cpp_macro_call_arg_list  */
+#line 295 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_plist_free((*(struct psi_plist **)(&(*yyvaluep))));}
-#line 5287 "src/parser_proc.c" /* glr.c:846  */
+#line 5289 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 156: /* constant  */
-#line 283 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 168: /* constant  */
+#line 303 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_const_free(&(*(struct psi_const **)(&(*yyvaluep))));}
-#line 5293 "src/parser_proc.c" /* glr.c:846  */
+#line 5295 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 157: /* constant_type  */
-#line 285 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 169: /* constant_type  */
+#line 305 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_const_type_free(&(*(struct psi_const_type **)(&(*yyvaluep))));}
-#line 5299 "src/parser_proc.c" /* glr.c:846  */
+#line 5301 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 158: /* constant_type_token  */
-#line 280 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 170: /* constant_type_token  */
+#line 300 "src/parser_proc_grammar.y" /* glr.c:846  */
       {}
-#line 5305 "src/parser_proc.c" /* glr.c:846  */
+#line 5307 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 159: /* impl_def_val  */
-#line 287 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 171: /* impl_def_val  */
+#line 307 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_impl_def_val_free(&(*(struct psi_impl_def_val **)(&(*yyvaluep))));}
-#line 5311 "src/parser_proc.c" /* glr.c:846  */
+#line 5313 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 160: /* impl_def_val_token  */
-#line 280 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 172: /* impl_def_val_token  */
+#line 300 "src/parser_proc_grammar.y" /* glr.c:846  */
       {}
-#line 5317 "src/parser_proc.c" /* glr.c:846  */
+#line 5319 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 161: /* decl_typedef  */
-#line 297 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 173: /* decl_typedef  */
+#line 317 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_decl_arg_free(&(*(struct psi_decl_arg **)(&(*yyvaluep))));}
-#line 5323 "src/parser_proc.c" /* glr.c:846  */
+#line 5325 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 162: /* typedef  */
-#line 297 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 174: /* typedef  */
+#line 317 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_decl_arg_free(&(*(struct psi_decl_arg **)(&(*yyvaluep))));}
-#line 5329 "src/parser_proc.c" /* glr.c:846  */
+#line 5331 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 163: /* typedef_anon  */
-#line 297 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 175: /* typedef_anon  */
+#line 317 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_decl_arg_free(&(*(struct psi_decl_arg **)(&(*yyvaluep))));}
-#line 5335 "src/parser_proc.c" /* glr.c:846  */
+#line 5337 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 164: /* typedef_decl  */
-#line 297 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 176: /* typedef_decl  */
+#line 317 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_decl_arg_free(&(*(struct psi_decl_arg **)(&(*yyvaluep))));}
-#line 5341 "src/parser_proc.c" /* glr.c:846  */
+#line 5343 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 165: /* typedef_anon_decl  */
-#line 297 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 177: /* typedef_anon_decl  */
+#line 317 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_decl_arg_free(&(*(struct psi_decl_arg **)(&(*yyvaluep))));}
-#line 5347 "src/parser_proc.c" /* glr.c:846  */
+#line 5349 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 166: /* qualified_decl_type  */
-#line 293 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 178: /* qualified_decl_type  */
+#line 313 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_decl_type_free(&(*(struct psi_decl_type **)(&(*yyvaluep))));}
-#line 5353 "src/parser_proc.c" /* glr.c:846  */
+#line 5355 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 167: /* decl_type  */
-#line 293 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 179: /* decl_type  */
+#line 313 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_decl_type_free(&(*(struct psi_decl_type **)(&(*yyvaluep))));}
-#line 5359 "src/parser_proc.c" /* glr.c:846  */
+#line 5361 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 168: /* decl_type_complex  */
-#line 293 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 180: /* decl_type_complex  */
+#line 313 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_decl_type_free(&(*(struct psi_decl_type **)(&(*yyvaluep))));}
-#line 5365 "src/parser_proc.c" /* glr.c:846  */
+#line 5367 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 169: /* decl_type_simple  */
-#line 290 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 181: /* decl_type_simple  */
+#line 310 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_token_free(&(*(struct psi_token **)(&(*yyvaluep))));}
-#line 5371 "src/parser_proc.c" /* glr.c:846  */
+#line 5373 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 170: /* decl_real_type  */
-#line 290 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 182: /* decl_real_type  */
+#line 310 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_token_free(&(*(struct psi_token **)(&(*yyvaluep))));}
-#line 5377 "src/parser_proc.c" /* glr.c:846  */
+#line 5379 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 171: /* int_signed  */
-#line 268 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 183: /* int_signed  */
+#line 288 "src/parser_proc_grammar.y" /* glr.c:846  */
       {}
-#line 5383 "src/parser_proc.c" /* glr.c:846  */
+#line 5385 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 172: /* int_width  */
-#line 265 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 184: /* int_width  */
+#line 285 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_token_free(&(*(struct psi_token **)(&(*yyvaluep))));}
-#line 5389 "src/parser_proc.c" /* glr.c:846  */
+#line 5391 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 173: /* decl_int_type  */
-#line 290 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 185: /* decl_int_type  */
+#line 310 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_token_free(&(*(struct psi_token **)(&(*yyvaluep))));}
-#line 5395 "src/parser_proc.c" /* glr.c:846  */
+#line 5397 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 174: /* int_signed_types  */
-#line 265 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 186: /* int_signed_types  */
+#line 285 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_token_free(&(*(struct psi_token **)(&(*yyvaluep))));}
-#line 5401 "src/parser_proc.c" /* glr.c:846  */
+#line 5403 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 175: /* signed_short_types  */
-#line 268 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 187: /* signed_short_types  */
+#line 288 "src/parser_proc_grammar.y" /* glr.c:846  */
       {}
-#line 5407 "src/parser_proc.c" /* glr.c:846  */
+#line 5409 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 176: /* signed_long_types  */
-#line 268 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 188: /* signed_long_types  */
+#line 288 "src/parser_proc_grammar.y" /* glr.c:846  */
       {}
-#line 5413 "src/parser_proc.c" /* glr.c:846  */
+#line 5415 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 177: /* int_width_types  */
-#line 265 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 189: /* int_width_types  */
+#line 285 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_token_free(&(*(struct psi_token **)(&(*yyvaluep))));}
-#line 5419 "src/parser_proc.c" /* glr.c:846  */
+#line 5421 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 178: /* decl_stmt  */
-#line 295 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 190: /* decl_stmt  */
+#line 315 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_decl_free(&(*(struct psi_decl **)(&(*yyvaluep))));}
-#line 5425 "src/parser_proc.c" /* glr.c:846  */
+#line 5427 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 184: /* decl_vars  */
-#line 309 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 196: /* decl_vars  */
+#line 329 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_plist_free((*(struct psi_plist **)(&(*yyvaluep))));}
-#line 5431 "src/parser_proc.c" /* glr.c:846  */
+#line 5433 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 189: /* decl  */
-#line 295 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 201: /* decl  */
+#line 315 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_decl_free(&(*(struct psi_decl **)(&(*yyvaluep))));}
-#line 5437 "src/parser_proc.c" /* glr.c:846  */
+#line 5439 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 190: /* decl_body  */
-#line 295 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 202: /* decl_body  */
+#line 315 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_decl_free(&(*(struct psi_decl **)(&(*yyvaluep))));}
-#line 5443 "src/parser_proc.c" /* glr.c:846  */
+#line 5445 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 191: /* decl_func_body  */
-#line 295 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 203: /* decl_func_body  */
+#line 315 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_decl_free(&(*(struct psi_decl **)(&(*yyvaluep))));}
-#line 5449 "src/parser_proc.c" /* glr.c:846  */
+#line 5451 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 192: /* decl_functor_body  */
-#line 295 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 204: /* decl_functor_body  */
+#line 315 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_decl_free(&(*(struct psi_decl **)(&(*yyvaluep))));}
-#line 5455 "src/parser_proc.c" /* glr.c:846  */
+#line 5457 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 193: /* decl_functor  */
-#line 297 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 205: /* decl_functor  */
+#line 317 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_decl_arg_free(&(*(struct psi_decl_arg **)(&(*yyvaluep))));}
-#line 5461 "src/parser_proc.c" /* glr.c:846  */
+#line 5463 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 194: /* decl_func  */
-#line 297 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 206: /* decl_func  */
+#line 317 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_decl_arg_free(&(*(struct psi_decl_arg **)(&(*yyvaluep))));}
-#line 5467 "src/parser_proc.c" /* glr.c:846  */
+#line 5469 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 195: /* decl_args  */
-#line 309 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 207: /* decl_args  */
+#line 329 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_plist_free((*(struct psi_plist **)(&(*yyvaluep))));}
-#line 5473 "src/parser_proc.c" /* glr.c:846  */
+#line 5475 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 196: /* decl_anon_arg  */
-#line 297 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 208: /* decl_anon_arg  */
+#line 317 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_decl_arg_free(&(*(struct psi_decl_arg **)(&(*yyvaluep))));}
-#line 5479 "src/parser_proc.c" /* glr.c:846  */
+#line 5481 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 197: /* decl_arg  */
-#line 297 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 209: /* decl_arg  */
+#line 317 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_decl_arg_free(&(*(struct psi_decl_arg **)(&(*yyvaluep))));}
-#line 5485 "src/parser_proc.c" /* glr.c:846  */
+#line 5487 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 198: /* decl_var  */
-#line 299 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 210: /* decl_var  */
+#line 319 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_decl_var_free(&(*(struct psi_decl_var **)(&(*yyvaluep))));}
-#line 5491 "src/parser_proc.c" /* glr.c:846  */
+#line 5493 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 199: /* decl_union  */
-#line 303 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 211: /* decl_union  */
+#line 323 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_decl_union_free(&(*(struct psi_decl_union **)(&(*yyvaluep))));}
-#line 5497 "src/parser_proc.c" /* glr.c:846  */
+#line 5499 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 200: /* decl_struct  */
-#line 301 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 212: /* decl_struct  */
+#line 321 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_decl_struct_free(&(*(struct psi_decl_struct **)(&(*yyvaluep))));}
-#line 5503 "src/parser_proc.c" /* glr.c:846  */
+#line 5505 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 201: /* decl_struct_args  */
-#line 309 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 213: /* decl_struct_args  */
+#line 329 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_plist_free((*(struct psi_plist **)(&(*yyvaluep))));}
-#line 5509 "src/parser_proc.c" /* glr.c:846  */
+#line 5511 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 202: /* struct_args_block  */
-#line 309 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 214: /* struct_args_block  */
+#line 329 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_plist_free((*(struct psi_plist **)(&(*yyvaluep))));}
-#line 5515 "src/parser_proc.c" /* glr.c:846  */
+#line 5517 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 203: /* struct_args  */
-#line 309 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 215: /* struct_args  */
+#line 329 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_plist_free((*(struct psi_plist **)(&(*yyvaluep))));}
-#line 5521 "src/parser_proc.c" /* glr.c:846  */
+#line 5523 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 204: /* struct_arg_var_list  */
-#line 309 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 216: /* struct_arg_var_list  */
+#line 329 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_plist_free((*(struct psi_plist **)(&(*yyvaluep))));}
-#line 5527 "src/parser_proc.c" /* glr.c:846  */
+#line 5529 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 205: /* decl_vars_with_layout  */
-#line 309 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 217: /* decl_vars_with_layout  */
+#line 329 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_plist_free((*(struct psi_plist **)(&(*yyvaluep))));}
-#line 5533 "src/parser_proc.c" /* glr.c:846  */
+#line 5535 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 206: /* decl_enum  */
-#line 305 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 218: /* decl_enum  */
+#line 325 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_decl_enum_free(&(*(struct psi_decl_enum **)(&(*yyvaluep))));}
-#line 5539 "src/parser_proc.c" /* glr.c:846  */
+#line 5541 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 207: /* decl_enum_items  */
-#line 309 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 219: /* decl_enum_items  */
+#line 329 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_plist_free((*(struct psi_plist **)(&(*yyvaluep))));}
-#line 5545 "src/parser_proc.c" /* glr.c:846  */
+#line 5547 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 208: /* decl_enum_item  */
-#line 307 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 220: /* decl_enum_item  */
+#line 327 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_decl_enum_item_free(&(*(struct psi_decl_enum_item **)(&(*yyvaluep))));}
-#line 5551 "src/parser_proc.c" /* glr.c:846  */
+#line 5553 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 209: /* num_exp  */
-#line 365 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 221: /* num_exp  */
+#line 385 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_num_exp_free(&(*(struct psi_num_exp **)(&(*yyvaluep))));}
-#line 5557 "src/parser_proc.c" /* glr.c:846  */
+#line 5559 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 210: /* number  */
-#line 367 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 222: /* number  */
+#line 387 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_number_free(&(*(struct psi_number **)(&(*yyvaluep))));}
-#line 5563 "src/parser_proc.c" /* glr.c:846  */
+#line 5565 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 211: /* sizeof  */
-#line 317 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 223: /* sizeof  */
+#line 337 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_number_free(&(*(struct psi_number **)(&(*yyvaluep))));}
-#line 5569 "src/parser_proc.c" /* glr.c:846  */
+#line 5571 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 212: /* sizeof_body  */
-#line 317 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 224: /* sizeof_body  */
+#line 337 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_number_free(&(*(struct psi_number **)(&(*yyvaluep))));}
-#line 5575 "src/parser_proc.c" /* glr.c:846  */
+#line 5577 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 213: /* sizeof_body_notypes  */
-#line 317 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 225: /* sizeof_body_notypes  */
+#line 337 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_number_free(&(*(struct psi_number **)(&(*yyvaluep))));}
-#line 5581 "src/parser_proc.c" /* glr.c:846  */
+#line 5583 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 214: /* enum_name  */
-#line 256 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 226: /* enum_name  */
+#line 276 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_token_free(&(*(struct psi_token **)(&(*yyvaluep))));}
-#line 5587 "src/parser_proc.c" /* glr.c:846  */
+#line 5589 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 215: /* union_name  */
-#line 256 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 227: /* union_name  */
+#line 276 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_token_free(&(*(struct psi_token **)(&(*yyvaluep))));}
-#line 5593 "src/parser_proc.c" /* glr.c:846  */
+#line 5595 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 216: /* struct_name  */
-#line 256 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 228: /* struct_name  */
+#line 276 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_token_free(&(*(struct psi_token **)(&(*yyvaluep))));}
-#line 5599 "src/parser_proc.c" /* glr.c:846  */
+#line 5601 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 217: /* optional_name  */
-#line 256 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 229: /* optional_name  */
+#line 276 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_token_free(&(*(struct psi_token **)(&(*yyvaluep))));}
-#line 5605 "src/parser_proc.c" /* glr.c:846  */
+#line 5607 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 218: /* decl_layout  */
-#line 314 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 230: /* decl_layout  */
+#line 334 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_layout_free(&(*(struct psi_layout **)(&(*yyvaluep))));}
-#line 5611 "src/parser_proc.c" /* glr.c:846  */
+#line 5613 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 219: /* align_and_size  */
-#line 312 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 231: /* align_and_size  */
+#line 332 "src/parser_proc_grammar.y" /* glr.c:846  */
       {}
-#line 5617 "src/parser_proc.c" /* glr.c:846  */
+#line 5619 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 220: /* array_size  */
-#line 370 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 232: /* array_size  */
+#line 390 "src/parser_proc_grammar.y" /* glr.c:846  */
       {}
-#line 5623 "src/parser_proc.c" /* glr.c:846  */
+#line 5625 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 221: /* indirection  */
-#line 370 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 233: /* indirection  */
+#line 390 "src/parser_proc_grammar.y" /* glr.c:846  */
       {}
-#line 5629 "src/parser_proc.c" /* glr.c:846  */
+#line 5631 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 222: /* pointers  */
-#line 370 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 234: /* pointers  */
+#line 390 "src/parser_proc_grammar.y" /* glr.c:846  */
       {}
-#line 5635 "src/parser_proc.c" /* glr.c:846  */
+#line 5637 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 223: /* asterisks  */
-#line 370 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 235: /* asterisks  */
+#line 390 "src/parser_proc_grammar.y" /* glr.c:846  */
       {}
-#line 5641 "src/parser_proc.c" /* glr.c:846  */
+#line 5643 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 225: /* impl  */
-#line 320 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 237: /* impl  */
+#line 340 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_impl_free(&(*(struct psi_impl **)(&(*yyvaluep))));}
-#line 5647 "src/parser_proc.c" /* glr.c:846  */
+#line 5649 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 226: /* impl_func  */
-#line 322 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 238: /* impl_func  */
+#line 342 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_impl_func_free(&(*(struct psi_impl_func **)(&(*yyvaluep))));}
-#line 5653 "src/parser_proc.c" /* glr.c:846  */
+#line 5655 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 227: /* impl_args  */
-#line 362 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 239: /* impl_args  */
+#line 382 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_plist_free((*(struct psi_plist **)(&(*yyvaluep))));}
-#line 5659 "src/parser_proc.c" /* glr.c:846  */
+#line 5661 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 228: /* impl_arg  */
-#line 324 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 240: /* impl_arg  */
+#line 344 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_impl_arg_free(&(*(struct psi_impl_arg **)(&(*yyvaluep))));}
-#line 5665 "src/parser_proc.c" /* glr.c:846  */
+#line 5667 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 229: /* impl_var  */
-#line 328 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 241: /* impl_var  */
+#line 348 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_impl_var_free(&(*(struct psi_impl_var **)(&(*yyvaluep))));}
-#line 5671 "src/parser_proc.c" /* glr.c:846  */
+#line 5673 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 230: /* impl_type  */
-#line 326 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 242: /* impl_type  */
+#line 346 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_impl_type_free(&(*(struct psi_impl_type **)(&(*yyvaluep))));}
-#line 5677 "src/parser_proc.c" /* glr.c:846  */
+#line 5679 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 231: /* impl_type_token  */
-#line 360 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 243: /* impl_type_token  */
+#line 380 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_token_free(&(*(struct psi_token **)(&(*yyvaluep))));}
-#line 5683 "src/parser_proc.c" /* glr.c:846  */
+#line 5685 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 232: /* impl_stmts  */
-#line 362 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 244: /* impl_stmts  */
+#line 382 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_plist_free((*(struct psi_plist **)(&(*yyvaluep))));}
-#line 5689 "src/parser_proc.c" /* glr.c:846  */
+#line 5691 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 233: /* impl_stmt  */
-#line 358 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 245: /* impl_stmt  */
+#line 378 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_impl_stmt_free(&(*(struct psi_token ***)(&(*yyvaluep))));}
-#line 5695 "src/parser_proc.c" /* glr.c:846  */
+#line 5697 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 234: /* let_stmt  */
-#line 331 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 246: /* let_stmt  */
+#line 351 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_let_stmt_free(&(*(struct psi_let_stmt **)(&(*yyvaluep))));}
-#line 5701 "src/parser_proc.c" /* glr.c:846  */
+#line 5703 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 235: /* let_exp  */
-#line 333 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 247: /* let_exp  */
+#line 353 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_let_exp_free(&(*(struct psi_let_exp **)(&(*yyvaluep))));}
-#line 5707 "src/parser_proc.c" /* glr.c:846  */
+#line 5709 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 236: /* let_exp_byref  */
-#line 333 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 248: /* let_exp_byref  */
+#line 353 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_let_exp_free(&(*(struct psi_let_exp **)(&(*yyvaluep))));}
-#line 5713 "src/parser_proc.c" /* glr.c:846  */
+#line 5715 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 237: /* let_exp_assign  */
-#line 333 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 249: /* let_exp_assign  */
+#line 353 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_let_exp_free(&(*(struct psi_let_exp **)(&(*yyvaluep))));}
-#line 5719 "src/parser_proc.c" /* glr.c:846  */
+#line 5721 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 238: /* let_calloc  */
-#line 335 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 250: /* let_calloc  */
+#line 355 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_let_calloc_free(&(*(struct psi_let_calloc **)(&(*yyvaluep))));}
-#line 5725 "src/parser_proc.c" /* glr.c:846  */
+#line 5727 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 239: /* let_callback  */
-#line 337 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 251: /* let_callback  */
+#line 357 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_let_callback_free(&(*(struct psi_let_callback **)(&(*yyvaluep))));}
-#line 5731 "src/parser_proc.c" /* glr.c:846  */
+#line 5733 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 240: /* let_func  */
-#line 339 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 252: /* let_func  */
+#line 359 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_let_func_free(&(*(struct psi_let_func **)(&(*yyvaluep))));}
-#line 5737 "src/parser_proc.c" /* glr.c:846  */
+#line 5739 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 241: /* let_func_token  */
-#line 360 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 253: /* let_func_token  */
+#line 380 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_token_free(&(*(struct psi_token **)(&(*yyvaluep))));}
-#line 5743 "src/parser_proc.c" /* glr.c:846  */
+#line 5745 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 242: /* let_func_exps  */
-#line 362 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 254: /* let_func_exps  */
+#line 382 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_plist_free((*(struct psi_plist **)(&(*yyvaluep))));}
-#line 5749 "src/parser_proc.c" /* glr.c:846  */
+#line 5751 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 243: /* let_exps  */
-#line 362 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 255: /* let_exps  */
+#line 382 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_plist_free((*(struct psi_plist **)(&(*yyvaluep))));}
-#line 5755 "src/parser_proc.c" /* glr.c:846  */
+#line 5757 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 244: /* callback_rval  */
-#line 360 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 256: /* callback_rval  */
+#line 380 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_token_free(&(*(struct psi_token **)(&(*yyvaluep))));}
-#line 5761 "src/parser_proc.c" /* glr.c:846  */
+#line 5763 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 245: /* callback_arg_list  */
-#line 362 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 257: /* callback_arg_list  */
+#line 382 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_plist_free((*(struct psi_plist **)(&(*yyvaluep))));}
-#line 5767 "src/parser_proc.c" /* glr.c:846  */
+#line 5769 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 246: /* callback_args  */
-#line 362 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 258: /* callback_args  */
+#line 382 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_plist_free((*(struct psi_plist **)(&(*yyvaluep))));}
-#line 5773 "src/parser_proc.c" /* glr.c:846  */
+#line 5775 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 247: /* return_stmt  */
-#line 349 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 259: /* return_stmt  */
+#line 369 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_return_stmt_free(&(*(struct psi_return_stmt **)(&(*yyvaluep))));}
-#line 5779 "src/parser_proc.c" /* glr.c:846  */
+#line 5781 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 248: /* return_exp  */
-#line 351 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 260: /* return_exp  */
+#line 371 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_return_exp_free(&(*(struct psi_return_exp **)(&(*yyvaluep))));}
-#line 5785 "src/parser_proc.c" /* glr.c:846  */
+#line 5787 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 249: /* call_decl_vars  */
-#line 309 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 261: /* call_decl_vars  */
+#line 329 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_plist_free((*(struct psi_plist **)(&(*yyvaluep))));}
-#line 5791 "src/parser_proc.c" /* glr.c:846  */
+#line 5793 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 250: /* set_stmt  */
-#line 341 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 262: /* set_stmt  */
+#line 361 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_set_stmt_free(&(*(struct psi_set_stmt **)(&(*yyvaluep))));}
-#line 5797 "src/parser_proc.c" /* glr.c:846  */
+#line 5799 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 251: /* set_exp  */
-#line 343 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 263: /* set_exp  */
+#line 363 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_set_exp_free(&(*(struct psi_set_exp **)(&(*yyvaluep))));}
-#line 5803 "src/parser_proc.c" /* glr.c:846  */
+#line 5805 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 252: /* set_func  */
-#line 345 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 264: /* set_func  */
+#line 365 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_set_func_free(&(*(struct psi_set_func **)(&(*yyvaluep))));}
-#line 5809 "src/parser_proc.c" /* glr.c:846  */
+#line 5811 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 253: /* set_func_token  */
-#line 360 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 265: /* set_func_token  */
+#line 380 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_token_free(&(*(struct psi_token **)(&(*yyvaluep))));}
-#line 5815 "src/parser_proc.c" /* glr.c:846  */
+#line 5817 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 254: /* set_func_exps  */
-#line 362 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 266: /* set_func_exps  */
+#line 382 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_plist_free((*(struct psi_plist **)(&(*yyvaluep))));}
-#line 5821 "src/parser_proc.c" /* glr.c:846  */
+#line 5823 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 255: /* set_exps  */
-#line 362 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 267: /* set_exps  */
+#line 382 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_plist_free((*(struct psi_plist **)(&(*yyvaluep))));}
-#line 5827 "src/parser_proc.c" /* glr.c:846  */
+#line 5829 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 256: /* assert_stmt  */
-#line 347 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 268: /* assert_stmt  */
+#line 367 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_assert_stmt_free(&(*(struct psi_assert_stmt **)(&(*yyvaluep))));}
-#line 5833 "src/parser_proc.c" /* glr.c:846  */
+#line 5835 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 257: /* assert_stmt_token  */
-#line 360 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 269: /* assert_stmt_token  */
+#line 380 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_token_free(&(*(struct psi_token **)(&(*yyvaluep))));}
-#line 5839 "src/parser_proc.c" /* glr.c:846  */
+#line 5841 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 258: /* free_stmt  */
-#line 353 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 270: /* free_stmt  */
+#line 373 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_free_stmt_free(&(*(struct psi_free_stmt **)(&(*yyvaluep))));}
-#line 5845 "src/parser_proc.c" /* glr.c:846  */
+#line 5847 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 259: /* free_exps  */
-#line 362 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 271: /* free_exps  */
+#line 382 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_plist_free((*(struct psi_plist **)(&(*yyvaluep))));}
-#line 5851 "src/parser_proc.c" /* glr.c:846  */
+#line 5853 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 260: /* free_exp  */
-#line 355 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 272: /* free_exp  */
+#line 375 "src/parser_proc_grammar.y" /* glr.c:846  */
       {psi_free_exp_free(&(*(struct psi_free_exp **)(&(*yyvaluep))));}
-#line 5857 "src/parser_proc.c" /* glr.c:846  */
+#line 5859 "src/parser_proc.c" /* glr.c:846  */
         break;
 
-    case 261: /* reference  */
-#line 372 "src/parser_proc_grammar.y" /* glr.c:846  */
+    case 273: /* reference  */
+#line 392 "src/parser_proc_grammar.y" /* glr.c:846  */
       {}
-#line 5863 "src/parser_proc.c" /* glr.c:846  */
+#line 5865 "src/parser_proc.c" /* glr.c:846  */
         break;
 
 
@@ -7208,11 +7210,11 @@ yyparse (struct psi_parser *P, struct psi_plist *tokens, size_t *index)
   yylval = yyval_default;
 
   /* User initialization code.  */
-  #line 106 "src/parser_proc_grammar.y" /* glr.c:2270  */
+  #line 111 "src/parser_proc_grammar.y" /* glr.c:2270  */
 {
 }
 
-#line 7216 "src/parser_proc.c" /* glr.c:2270  */
+#line 7218 "src/parser_proc.c" /* glr.c:2270  */
 
   if (! yyinitGLRStack (yystackp, YYINITDEPTH))
     goto yyexhaustedlab;
@@ -7518,7 +7520,7 @@ yypdumpstack (yyGLRStack* yystackp)
 #define yydebug psi_parser_proc_debug
 #define yynerrs psi_parser_proc_nerrs
 
-#line 2019 "src/parser_proc_grammar.y" /* glr.c:2584  */
+#line 2039 "src/parser_proc_grammar.y" /* glr.c:2584  */
 
 
 /* epilogue */
index b336db1..c7f0011 100644 (file)
@@ -45,10 +45,15 @@ extern int psi_parser_proc_debug;
 #include "plist.h"
 #include "types/layout.h"
 
+#define yytokentype psi_token_type
+
+#define PSI_T_CAST                     PSI_T_EQUALS
+#define PSI_T_POINTER          PSI_T_ASTERISK
+
 struct psi_parser;
 
 
-#line 52 "src/parser_proc.h" /* glr.c:197  */
+#line 57 "src/parser_proc.h" /* glr.c:197  */
 
 /* Token type.  */
 #ifndef YYTOKENTYPE
@@ -179,8 +184,20 @@ struct psi_parser;
     PSI_T_CPP_INLINE = 378,
     PSI_T_CPP_RESTRICT = 379,
     PSI_T_CPP_ASM = 380,
-    PSI_T_BINARY = 381,
-    PSI_T_UNARY = 382
+    PSI_T_BSLASH = 381,
+    PSI_T_LONG_DOUBLE = 382,
+    PSI_T_INT8 = 383,
+    PSI_T_UINT8 = 384,
+    PSI_T_INT16 = 385,
+    PSI_T_UINT16 = 386,
+    PSI_T_INT32 = 387,
+    PSI_T_UINT32 = 388,
+    PSI_T_INT64 = 389,
+    PSI_T_UINT64 = 390,
+    PSI_T_INT128 = 391,
+    PSI_T_UINT128 = 392,
+    PSI_T_BINARY = 393,
+    PSI_T_UNARY = 394
   };
 #endif
 
@@ -608,6 +625,30 @@ union YYSTYPE
   struct psi_token * PSI_T_CPP_RESTRICT;
   /* CPP_ASM  */
   struct psi_token * PSI_T_CPP_ASM;
+  /* BSLASH  */
+  struct psi_token * PSI_T_BSLASH;
+  /* LONG_DOUBLE  */
+  struct psi_token * PSI_T_LONG_DOUBLE;
+  /* INT8  */
+  struct psi_token * PSI_T_INT8;
+  /* UINT8  */
+  struct psi_token * PSI_T_UINT8;
+  /* INT16  */
+  struct psi_token * PSI_T_INT16;
+  /* UINT16  */
+  struct psi_token * PSI_T_UINT16;
+  /* INT32  */
+  struct psi_token * PSI_T_INT32;
+  /* UINT32  */
+  struct psi_token * PSI_T_UINT32;
+  /* INT64  */
+  struct psi_token * PSI_T_INT64;
+  /* UINT64  */
+  struct psi_token * PSI_T_UINT64;
+  /* INT128  */
+  struct psi_token * PSI_T_INT128;
+  /* UINT128  */
+  struct psi_token * PSI_T_UINT128;
   /* binary_op_token  */
   struct psi_token * PSI_T_binary_op_token;
   /* unary_op_token  */
@@ -674,7 +715,7 @@ union YYSTYPE
   struct psi_token * PSI_T_assert_stmt_token;
   /* impl_stmt  */
   struct psi_token ** PSI_T_impl_stmt;
-#line 678 "src/parser_proc.h" /* glr.c:197  */
+#line 719 "src/parser_proc.h" /* glr.c:197  */
 };
 
 typedef union YYSTYPE YYSTYPE;
index 9970c40..4a1cc19 100644 (file)
@@ -83,6 +83,11 @@ static inline void psi_parser_proc_add_impl(struct psi_parser *P, struct psi_imp
 #include "plist.h"
 #include "types/layout.h"
 
+#define yytokentype psi_token_type
+
+#define PSI_T_CAST                     PSI_T_EQUALS
+#define PSI_T_POINTER          PSI_T_ASTERISK
+
 struct psi_parser;
 
 }
@@ -237,6 +242,21 @@ struct psi_parser;
 %token <struct psi_token *> CPP_RESTRICT
 %token <struct psi_token *> CPP_ASM
 
+/* virtual tokens */
+%token <struct psi_token *> BSLASH
+%token <struct psi_token *> LONG_DOUBLE
+%token <struct psi_token *> INT8
+%token <struct psi_token *> UINT8
+%token <struct psi_token *> INT16
+%token <struct psi_token *> UINT16
+%token <struct psi_token *> INT32
+%token <struct psi_token *> UINT32
+%token <struct psi_token *> INT64
+%token <struct psi_token *> UINT64
+%token <struct psi_token *> INT128
+%token <struct psi_token *> UINT128
+
+
 %precedence IIF COLON
 %precedence OR
 %precedence AND
index f9b69f6..08a6802 100644 (file)
@@ -199,7 +199,7 @@ void psi_token_dump(int fd, struct psi_token *t)
 {
        size_t i;
 
-       dprintf(fd, "TOKEN %p (%ld) ", t, t->type);
+       dprintf(fd, "TOKEN %p (%u) ", t, t->type);
        if (t->type == PSI_T_EOF) {
                dprintf(fd, "EOF");
        } else {
index 6fc7875..a5cc552 100644 (file)
@@ -47,50 +47,31 @@ static inline size_t psi_offset_padding(size_t diff, size_t alignment) {
 #include "parser_proc.h"
 #undef YYDEBUG
 
-#define PSI_T_CAST                     PSI_T_EQUALS
-#define PSI_T_POINTER          PSI_T_ASTERISK
-
-#define PSI_T_WHITESPACE       -PSI_T_NO_WHITESPACE
-#define PSI_T_BSLASH           -PSI_T_SLASH
-#define PSI_T_LONG_DOUBLE      -PSI_T_DOUBLE
-
 #if SIZEOF_CHAR == SIZEOF_INT8_T
-# define PSI_T_INT8 PSI_T_CHAR
-# define PSI_T_UINT8 -PSI_T_CHAR
 # define ALIGNOF_INT8_T ALIGNOF_CHAR
 # define ALIGNOF_UINT8_T ALIGNOF_CHAR
 #else
 # error SIZEOF_CHAR != 8
 #endif
 #if SIZEOF_SHORT == SIZEOF_INT16_T
-# define PSI_T_INT16 PSI_T_SHORT
-# define PSI_T_UINT16 -PSI_T_SHORT
 # define ALIGNOF_INT16_T ALIGNOF_SHORT
 # define ALIGNOF_UINT16_T ALIGNOF_SHORT
 #else
 # error SIZEOF_SHORT != 16
 #endif
 #if SIZEOF_INT == SIZEOF_INT32_T
-# define PSI_T_INT32 PSI_T_INT
-# define PSI_T_UINT32 -PSI_T_INT
 # define ALIGNOF_INT32_T ALIGNOF_INT
 # define ALIGNOF_UINT32_T ALIGNOF_INT
 #elif SIZEOF_LONG == SIZEOF_INT32_T
-# define PSI_T_INT32 PSI_T_LONG
-# define PSI_T_UINT32 -PSI_T_LONG
 # define ALIGNOF_INT32_T ALIGNOF_LONG
 # define ALIGNOF_UINT32_T ALIGNOF_LONG
 #else
 # error SIZEOF_INT != 32 and SIZEOF_LONG != 32
 #endif
 #if SIZEOF_LONG == SIZEOF_INT64_T
-# define PSI_T_INT64 PSI_T_LONG
-# define PSI_T_UINT64 -PSI_T_LONG
 # define ALIGNOF_INT64_T ALIGNOF_LONG
 # define ALIGNOF_UINT64_T ALIGNOF_LONG
 # elif HAVE_LONG_LONG_INT && SIZEOF_LONG_LONG_INT == SIZEOF_INT64_T
-# define PSI_T_INT64 (PSI_T_LONG << 0xa)
-# define PSI_T_UINT64 -(PSI_T_LONG << 0xa)
 # define ALIGNOF_INT64_T ALIGNOF_LONG_LONG
 # define ALIGNOF_UINT64_T ALIGNOF_LONG_LONG
 #else
@@ -98,8 +79,6 @@ static inline size_t psi_offset_padding(size_t diff, size_t alignment) {
 #endif
 
 #if HAVE_INT128
-# define PSI_T_INT128 (PSI_T_LONG << 0xb)
-# define PSI_T_UINT128 -(PSI_T_LONG << 0xb)
 # define SIZEOF_INT128_T SIZEOF___INT128
 # define SIZEOF_UINT128_T SIZEOF_UNSIGNED___INT128
 # define ALIGNOF_INT128_T ALIGNOF___INT128
@@ -111,7 +90,7 @@ typedef __int128 int128_t;
 typedef unsigned __int128 uint128_t;
 #endif
 
-typedef int64_t token_t;
+typedef enum psi_token_type token_t;
 
 static inline size_t psi_t_alignment(token_t t)
 {
index 0423c97..e62edf0 100644 (file)
@@ -179,12 +179,8 @@ size_t psi_decl_arg_get_size(struct psi_decl_arg *darg)
        size_t size;
        struct psi_decl_type *real = psi_decl_type_get_real(darg->type);
 
-       if (darg->var->array_size) {
-               if (darg->var->pointer_level > 1) {
-                       size = psi_t_size(PSI_T_POINTER) * darg->var->array_size;
-               } else {
-                       size = psi_t_size(real->type) * darg->var->array_size;
-               }
+       if (darg->var->array_size && darg->var->pointer_level > 1) {
+               size = psi_t_size(PSI_T_POINTER) * darg->var->array_size;
        } else if (darg->var->pointer_level) {
                size = psi_t_size(PSI_T_POINTER);
        } else {
@@ -200,6 +196,10 @@ size_t psi_decl_arg_get_size(struct psi_decl_arg *darg)
                        size = psi_t_size(real->type);
                        break;
                }
+
+               if (darg->var->array_size) {
+                       size *= darg->var->array_size;
+               }
        }
 
        return size;
index dbaa171..c64b24d 100644 (file)
@@ -120,8 +120,7 @@ bool psi_decl_type_get_alias(struct psi_decl_type *type, struct psi_plist *defs)
        }
        if (defs) {
                while (psi_plist_get(defs, i++, &def)) {
-                       if (def->type->type != type->type
-                                       && !strcmp(def->var->name, type->name)) {
+                       if (!strcmp(def->var->name, type->name)) {
                                type->real.def = def;
                                return true;
                        }
@@ -359,7 +358,11 @@ void psi_decl_type_dump(int fd, struct psi_decl_type *t, unsigned level)
                        return;
                }
                break;
+
+       default:
+               break;
        }
+
        dprintf(fd, "%s", t->name);
 }
 
@@ -402,6 +405,7 @@ size_t psi_decl_type_get_align(struct psi_decl_type *t)
        case PSI_T_ENUM:
        default:
                align = psi_t_alignment(real->type);
+               break;
        }
 
        return align;
index 69b5db4..6d983cd 100644 (file)
@@ -54,6 +54,8 @@ void psi_impl_def_val_free(struct psi_impl_def_val **def_ptr)
                                zend_string_release(def->ival.zend.str);
                        }
                        break;
+               default:
+                       break;
                }
                if (def->text) {
                        free(def->text);
index 8917a0c..63ebe32 100644 (file)
@@ -53,7 +53,7 @@ bool psi_let_func_validate(struct psi_data *data, struct psi_let_exp *exp, struc
 #include "marshal.h"
 
 static inline psi_marshal_let locate_let_func_fn(token_t type) {
-       psi_marshal_let let_fn = NULL;
+       psi_marshal_let let_fn;
 
        switch (type) {
                case PSI_T_BOOLVAL:             let_fn = psi_let_boolval;       break;
@@ -66,6 +66,7 @@ static inline psi_marshal_let locate_let_func_fn(token_t type) {
                case PSI_T_ZVAL:                let_fn = psi_let_zval;          break;
                case PSI_T_VOID:                let_fn = psi_let_void;          break;
                case PSI_T_COUNT:               let_fn = psi_let_count;         break;
+               default:                                let_fn = NULL;                          break;
        }
        return let_fn;
 }
index 523ea5b..21bdc7c 100644 (file)
@@ -511,6 +511,10 @@ bool psi_number_validate(struct psi_data *data, struct psi_number *exp,
                        exp->type = PSI_T_UINT64;
                        exp->data.ival.u64 = psi_decl_type_get_size(dtyp, NULL);
                        return true;
+               } else {
+                       data->error(data, exp->token, PSI_WARNING,
+                                       "Cannot compute sizeof(%s) (%u)",
+                                       exp->data.dtyp->name, exp->data.dtyp->type);
                }
                break;
 
@@ -558,7 +562,7 @@ static inline token_t psi_number_eval_constant(struct psi_number *exp,
                if (frame) PSI_DEBUG_PRINT(frame->context, " %" PRIdval, res->dval);
                return PSI_T_DOUBLE;
        default:
-               if (frame) PSI_DEBUG_PRINT(frame->context, " ?(t=%ld)", exp->data.cnst->type->type);
+               if (frame) PSI_DEBUG_PRINT(frame->context, " ?(t=%u)", exp->data.cnst->type->type);
                return 0;
        }
 }