From f15288e185e65bcdfde87c217fb6bd7ff12eb653 Mon Sep 17 00:00:00 2001 From: Michael Wallner Date: Thu, 9 Feb 2017 17:15:07 +0100 Subject: [PATCH] impl: add {pre,post}_assert statements --- Makefile.frag | 3 +- psi.d/stdlib.psi | 3 + src/call.c | 21 + src/call.h | 1 + src/context.c | 15 + src/parser.c | 1884 ++++++++++++++---------- src/parser.re | 2 + src/parser_def.h | 22 + src/parser_proc.c | 3053 ++++++++++++++++++++------------------- src/parser_proc.h | 68 +- src/parser_proc.y | 10 + src/types.h | 1 + src/types/assert_stmt.c | 102 ++ src/types/assert_stmt.h | 54 + src/types/impl.c | 17 + src/types/impl.h | 1 + 16 files changed, 2916 insertions(+), 2341 deletions(-) create mode 100644 src/types/assert_stmt.c create mode 100644 src/types/assert_stmt.h diff --git a/Makefile.frag b/Makefile.frag index 06a56ee..91e5012 100644 --- a/Makefile.frag +++ b/Makefile.frag @@ -33,7 +33,8 @@ $(PHP_PSI_SRCDIR)/src/parser_proc.c: $(PHP_PSI_SRCDIR)/src/parser_proc.y $(LEMON $(PHP_PSI_SRCDIR)/src/parser.re: $(PHP_PSI_SRCDIR)/src/parser_proc.h touch $@ $(PHP_PSI_SRCDIR)/src/parser.c: $(PHP_PSI_SRCDIR)/src/parser.re - $(RE2C) -o $@ $< + # trickery needed for relative #line directives + cd $(PHP_PSI_SRCDIR) && $(RE2C) -o $@ $(patsubst $(PHP_PSI_SRCDIR)/%,%,$<) $(PHP_PSI_SRCDIR)/src/token.h: $(PHP_PSI_SRCDIR)/src/token_oper_cmp.h $(PHP_PSI_SRCDIR)/src/token_oper_cmp.h: $(PHP_PSI_SRCDIR)/scripts/gen_oper.php diff --git a/psi.d/stdlib.psi b/psi.d/stdlib.psi index 3545641..63f2868 100644 --- a/psi.d/stdlib.psi +++ b/psi.d/stdlib.psi @@ -6,18 +6,21 @@ function psi\abs(int $i) : int { function psi\div(int $numerator, int $denominator) : array { let numerator = intval($numerator); let denominator = intval($denominator); + pre_assert denominator != 0; return to_array(div, to_int(quot), to_int(rem)); } function psi\ldiv(int $numerator, int $denominator) : array { let numerator = intval($numerator); let denominator = intval($denominator); + pre_assert denominator != 0; return to_array(ldiv, to_int(quot), to_int(rem)); } function psi\lldiv(int $numerator, int $denominator) : array { let numerator = intval($numerator); let denominator = intval($denominator); + pre_assert denominator != 0; return to_array(lldiv, to_int(quot), to_int(rem)); } diff --git a/src/call.c b/src/call.c index 3b47794..9b6f79f 100644 --- a/src/call.c +++ b/src/call.c @@ -30,6 +30,7 @@ #include "php.h" #include "zend_exceptions.h" +#include "ext/spl/spl_exceptions.h" struct psi_call_frame_argument *psi_call_frame_argument_init(struct psi_impl_arg *spec, impl_val *ival, zval *zptr, int is_vararg) { @@ -397,6 +398,26 @@ ZEND_RESULT_CODE psi_call_frame_do_let(struct psi_call_frame *frame) { return SUCCESS; } +ZEND_RESULT_CODE psi_call_frame_do_assert(struct psi_call_frame *frame, enum psi_assert_kind kind) { + size_t i = 0; + struct psi_assert_stmt *ass; + + while (psi_plist_get(frame->impl->stmts.ass, i++, &ass)) { + if (ass->kind == kind) { + if (!psi_assert_stmt_exec(ass, frame)) { + char *message = psi_assert_stmt_message(ass); + zend_throw_exception(kind == PSI_ASSERT_PRE + ? spl_ce_InvalidArgumentException + : spl_ce_UnexpectedValueException, message, 0); + free(message); + return FAILURE; + } + } + } + + return SUCCESS; +} + void psi_call_frame_do_call(struct psi_call_frame *frame) { size_t va_count = psi_call_frame_num_var_args(frame); diff --git a/src/call.h b/src/call.h index 895fa96..7828e17 100644 --- a/src/call.h +++ b/src/call.h @@ -89,6 +89,7 @@ void psi_call_frame_enter(struct psi_call_frame *frame); void **psi_call_frame_get_arg_pointers(struct psi_call_frame *frame); ZEND_RESULT_CODE psi_call_frame_do_let(struct psi_call_frame *frame); +ZEND_RESULT_CODE psi_call_frame_do_assert(struct psi_call_frame *frame, enum psi_assert_kind kind); void psi_call_frame_do_call(struct psi_call_frame *frame); void psi_call_frame_do_callback(struct psi_call_frame *frame, struct psi_call_frame_callback *cb); void psi_call_frame_do_return(struct psi_call_frame *frame, zval *return_value); diff --git a/src/context.c b/src/context.c index f10f4c4..d4510eb 100644 --- a/src/context.c +++ b/src/context.c @@ -373,7 +373,22 @@ ZEND_RESULT_CODE psi_context_call(struct psi_context *C, zend_execute_data *exec return FAILURE; } + if (SUCCESS != psi_call_frame_do_assert(frame, PSI_ASSERT_PRE)) { + psi_call_frame_do_return(frame, return_value); + psi_call_frame_free(frame); + + return FAILURE; + } + psi_call_frame_do_call(frame); + + if (SUCCESS != psi_call_frame_do_assert(frame, PSI_ASSERT_POST)) { + psi_call_frame_do_return(frame, return_value); + psi_call_frame_free(frame); + + return FAILURE; + } + psi_call_frame_do_return(frame, return_value); psi_call_frame_do_set(frame); psi_call_frame_do_free(frame); diff --git a/src/parser.c b/src/parser.c index ef1fb85..d4cc07f 100644 --- a/src/parser.c +++ b/src/parser.c @@ -1,5 +1,5 @@ -/* Generated by re2c 0.16 on Thu Feb 9 14:38:14 2017 */ -#line 1 "/home/mike/src/php-master/ext/psi/src/parser.re" +/* Generated by re2c 0.16 on Thu Feb 9 15:55:09 2017 */ +#line 1 "src/parser.re" #include "php_psi_stdinc.h" #include #include @@ -199,7 +199,7 @@ void psi_parser_free(struct psi_parser **P) } } -#define YYMAXFILL 10 +#define YYMAXFILL 12 #if BSIZE < YYMAXFILL # error BSIZE must be greater than YYMAXFILL #endif @@ -234,7 +234,7 @@ token_t psi_parser_scan(struct psi_parser *P) { unsigned char yych; unsigned int yyaccept = 0; - if ((P->lim - P->cur) < 10) { if (!psi_parser_fill(P,10)) RETURN(PSI_T_EOF); }; + if ((P->lim - P->cur) < 12) { if (!psi_parser_fill(P,12)) RETURN(PSI_T_EOF); }; yych = *P->cur; switch (yych) { case '\t': @@ -336,7 +336,7 @@ token_t psi_parser_scan(struct psi_parser *P) yy2: ++P->cur; yy3: -#line 344 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 346 "src/parser.re" {break;} #line 342 "/home/mike/src/php-master/ext/psi/src/parser.c" yy4: @@ -349,12 +349,12 @@ yy4: default: goto yy6; } yy6: -#line 281 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 281 "src/parser.re" { continue; } #line 355 "/home/mike/src/php-master/ext/psi/src/parser.c" yy7: ++P->cur; -#line 280 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 280 "src/parser.re" { NEWLINE(nextline); } #line 360 "/home/mike/src/php-master/ext/psi/src/parser.c" yy9: @@ -364,7 +364,7 @@ yy9: default: goto yy10; } yy10: -#line 265 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 265 "src/parser.re" {RETURN(PSI_T_NOT);} #line 370 "/home/mike/src/php-master/ext/psi/src/parser.c" yy11: @@ -448,7 +448,7 @@ yy13: } yy14: ++P->cur; -#line 266 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 266 "src/parser.re" {RETURN(PSI_T_MODULO);} #line 454 "/home/mike/src/php-master/ext/psi/src/parser.c" yy16: @@ -458,22 +458,22 @@ yy16: default: goto yy17; } yy17: -#line 267 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 267 "src/parser.re" {RETURN(PSI_T_AMPERSAND);} #line 464 "/home/mike/src/php-master/ext/psi/src/parser.c" yy18: ++P->cur; -#line 249 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 249 "src/parser.re" {RETURN(PSI_T_LPAREN);} #line 469 "/home/mike/src/php-master/ext/psi/src/parser.c" yy20: ++P->cur; -#line 250 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 250 "src/parser.re" {RETURN(PSI_T_RPAREN);} #line 474 "/home/mike/src/php-master/ext/psi/src/parser.c" yy22: ++P->cur; -#line 263 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 263 "src/parser.re" {RETURN(PSI_T_ASTERISK);} #line 479 "/home/mike/src/php-master/ext/psi/src/parser.c" yy24: @@ -494,12 +494,12 @@ yy24: default: goto yy25; } yy25: -#line 268 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 268 "src/parser.re" {RETURN(PSI_T_PLUS);} #line 500 "/home/mike/src/php-master/ext/psi/src/parser.c" yy26: ++P->cur; -#line 252 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 252 "src/parser.re" {RETURN(PSI_T_COMMA);} #line 505 "/home/mike/src/php-master/ext/psi/src/parser.c" yy28: @@ -520,7 +520,7 @@ yy28: default: goto yy29; } yy29: -#line 269 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 269 "src/parser.re" {RETURN(PSI_T_MINUS);} #line 526 "/home/mike/src/php-master/ext/psi/src/parser.c" yy30: @@ -549,7 +549,7 @@ yy31: default: goto yy32; } yy32: -#line 270 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 270 "src/parser.re" {RETURN(PSI_T_SLASH);} #line 555 "/home/mike/src/php-master/ext/psi/src/parser.c" yy33: @@ -574,17 +574,17 @@ yy33: default: goto yy35; } yy35: -#line 339 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 341 "src/parser.re" {RETURN(PSI_T_NUMBER);} #line 580 "/home/mike/src/php-master/ext/psi/src/parser.c" yy36: ++P->cur; -#line 253 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 253 "src/parser.re" {RETURN(PSI_T_COLON);} #line 585 "/home/mike/src/php-master/ext/psi/src/parser.c" yy38: ++P->cur; -#line 251 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 251 "src/parser.re" {RETURN(PSI_T_EOS);} #line 590 "/home/mike/src/php-master/ext/psi/src/parser.c" yy40: @@ -595,7 +595,7 @@ yy40: default: goto yy41; } yy41: -#line 277 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 277 "src/parser.re" {RETURN(PSI_T_LCHEVR);} #line 601 "/home/mike/src/php-master/ext/psi/src/parser.c" yy42: @@ -605,7 +605,7 @@ yy42: default: goto yy43; } yy43: -#line 262 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 262 "src/parser.re" {RETURN(PSI_T_EQUALS);} #line 611 "/home/mike/src/php-master/ext/psi/src/parser.c" yy44: @@ -616,7 +616,7 @@ yy44: default: goto yy45; } yy45: -#line 278 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 278 "src/parser.re" {RETURN(PSI_T_RCHEVR);} #line 622 "/home/mike/src/php-master/ext/psi/src/parser.c" yy46: @@ -628,7 +628,7 @@ yy46: default: goto yy54; } yy47: -#line 340 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 342 "src/parser.re" {RETURN(PSI_T_NAME);} #line 634 "/home/mike/src/php-master/ext/psi/src/parser.c" yy48: @@ -804,6 +804,10 @@ yy60: switch (yych) { case 'A': case 'a': goto yy132; + case 'O': + case 'o': goto yy133; + case 'R': + case 'r': goto yy134; default: goto yy54; } yy61: @@ -811,7 +815,7 @@ yy61: yych = *(P->mrk = ++P->cur); switch (yych) { case 'E': - case 'e': goto yy133; + case 'e': goto yy135; default: goto yy54; } yy62: @@ -819,13 +823,13 @@ yy62: yych = *(P->mrk = ++P->cur); switch (yych) { case 'E': - case 'e': goto yy134; + case 'e': goto yy136; case 'H': - case 'h': goto yy135; + case 'h': goto yy137; case 'I': - case 'i': goto yy136; + case 'i': goto yy138; case 'T': - case 't': goto yy137; + case 't': goto yy139; default: goto yy54; } yy63: @@ -833,13 +837,13 @@ yy63: yych = *(P->mrk = ++P->cur); switch (yych) { case 'E': - case 'e': goto yy138; + case 'e': goto yy140; case 'O': - case 'o': goto yy139; + case 'o': goto yy141; case 'R': - case 'r': goto yy140; + case 'r': goto yy142; case 'Y': - case 'y': goto yy141; + case 'y': goto yy143; default: goto yy54; } yy64: @@ -847,9 +851,9 @@ yy64: yych = *(P->mrk = ++P->cur); switch (yych) { case 'I': - case 'i': goto yy142; + case 'i': goto yy144; case 'N': - case 'n': goto yy143; + case 'n': goto yy145; default: goto yy54; } yy65: @@ -857,7 +861,7 @@ yy65: yych = *(P->mrk = ++P->cur); switch (yych) { case 'O': - case 'o': goto yy144; + case 'o': goto yy146; default: goto yy54; } yy66: @@ -865,14 +869,14 @@ yy66: yych = *(P->mrk = ++P->cur); switch (yych) { case 'V': - case 'v': goto yy145; + case 'v': goto yy147; default: goto yy54; } yy67: ++P->cur; -#line 256 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 256 "src/parser.re" {RETURN(PSI_T_LBRACKET);} -#line 876 "/home/mike/src/php-master/ext/psi/src/parser.c" +#line 880 "/home/mike/src/php-master/ext/psi/src/parser.c" yy69: yych = *++P->cur; switch (yych) { @@ -928,55 +932,55 @@ yy69: case 'w': case 'x': case 'y': - case 'z': goto yy146; + case 'z': goto yy148; default: goto yy3; } yy70: ++P->cur; -#line 257 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 257 "src/parser.re" {RETURN(PSI_T_RBRACKET);} -#line 939 "/home/mike/src/php-master/ext/psi/src/parser.c" +#line 943 "/home/mike/src/php-master/ext/psi/src/parser.c" yy72: ++P->cur; -#line 272 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 272 "src/parser.re" {RETURN(PSI_T_CARET);} -#line 944 "/home/mike/src/php-master/ext/psi/src/parser.c" +#line 948 "/home/mike/src/php-master/ext/psi/src/parser.c" yy74: ++P->cur; -#line 254 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 254 "src/parser.re" {RETURN(PSI_T_LBRACE);} -#line 949 "/home/mike/src/php-master/ext/psi/src/parser.c" +#line 953 "/home/mike/src/php-master/ext/psi/src/parser.c" yy76: ++P->cur; switch ((yych = *P->cur)) { - case '|': goto yy149; + case '|': goto yy151; default: goto yy77; } yy77: -#line 271 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 271 "src/parser.re" {RETURN(PSI_T_PIPE);} -#line 959 "/home/mike/src/php-master/ext/psi/src/parser.c" +#line 963 "/home/mike/src/php-master/ext/psi/src/parser.c" yy78: ++P->cur; -#line 255 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 255 "src/parser.re" {RETURN(PSI_T_RBRACE);} -#line 964 "/home/mike/src/php-master/ext/psi/src/parser.c" +#line 968 "/home/mike/src/php-master/ext/psi/src/parser.c" yy80: ++P->cur; -#line 264 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 264 "src/parser.re" {RETURN(PSI_T_TILDE);} -#line 969 "/home/mike/src/php-master/ext/psi/src/parser.c" +#line 973 "/home/mike/src/php-master/ext/psi/src/parser.c" yy82: ++P->cur; -#line 258 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 258 "src/parser.re" {RETURN(PSI_T_CMP_NE);} -#line 974 "/home/mike/src/php-master/ext/psi/src/parser.c" +#line 978 "/home/mike/src/php-master/ext/psi/src/parser.c" yy84: ++P->cur; if (P->lim <= P->cur) { if (!psi_parser_fill(P,1)) RETURN(PSI_T_EOF); }; yych = *P->cur; switch (yych) { - case '"': goto yy151; + case '"': goto yy153; default: goto yy84; } yy86: @@ -990,9 +994,9 @@ yy87: } yy88: ++P->cur; -#line 248 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 248 "src/parser.re" { NEWLINE(nextline); } -#line 996 "/home/mike/src/php-master/ext/psi/src/parser.c" +#line 1000 "/home/mike/src/php-master/ext/psi/src/parser.c" yy90: ++P->cur; if (P->lim <= P->cur) { if (!psi_parser_fill(P,1)) RETURN(PSI_T_EOF); }; @@ -1064,14 +1068,14 @@ yy90: default: goto yy92; } yy92: -#line 342 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 344 "src/parser.re" {RETURN(PSI_T_DOLLAR_NAME);} -#line 1070 "/home/mike/src/php-master/ext/psi/src/parser.c" +#line 1074 "/home/mike/src/php-master/ext/psi/src/parser.c" yy93: ++P->cur; -#line 260 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 260 "src/parser.re" {RETURN(PSI_T_AND);} -#line 1075 "/home/mike/src/php-master/ext/psi/src/parser.c" +#line 1079 "/home/mike/src/php-master/ext/psi/src/parser.c" yy95: yych = *++P->cur; switch (yych) { @@ -1096,69 +1100,71 @@ yy96: case 3: goto yy32; case 4: goto yy35; case 5: goto yy47; - case 6: goto yy148; - case 7: goto yy171; - case 8: goto yy173; - case 9: goto yy175; - case 10: goto yy183; - case 11: goto yy200; - case 12: goto yy203; - case 13: goto yy208; - case 14: goto yy212; - case 15: goto yy220; - case 16: goto yy223; - case 17: goto yy236; - case 18: goto yy244; - case 19: goto yy250; - case 20: goto yy252; - case 21: goto yy254; - case 22: goto yy261; - case 23: goto yy263; - case 24: goto yy266; - case 25: goto yy268; - case 26: goto yy276; - case 27: goto yy282; - case 28: goto yy301; - case 29: goto yy304; - case 30: goto yy309; - case 31: goto yy311; - case 32: goto yy318; - case 33: goto yy320; - case 34: goto yy322; - case 35: goto yy324; - case 36: goto yy327; - case 37: goto yy329; - case 38: goto yy331; - case 39: goto yy333; - case 40: goto yy335; - case 41: goto yy337; - case 42: goto yy339; - case 43: goto yy344; - case 44: goto yy354; - case 45: goto yy360; - case 46: goto yy362; - case 47: goto yy364; - case 48: goto yy366; - case 49: goto yy369; - case 50: goto yy374; - case 51: goto yy379; - case 52: goto yy382; - case 53: goto yy384; - case 54: goto yy386; - case 55: goto yy388; - case 56: goto yy390; - case 57: goto yy392; - case 58: goto yy396; - case 59: goto yy398; - case 60: goto yy400; - case 61: goto yy402; - case 62: goto yy404; - default: goto yy406; + case 6: goto yy150; + case 7: goto yy173; + case 8: goto yy175; + case 9: goto yy177; + case 10: goto yy187; + case 11: goto yy204; + case 12: goto yy207; + case 13: goto yy212; + case 14: goto yy216; + case 15: goto yy224; + case 16: goto yy227; + case 17: goto yy242; + case 18: goto yy250; + case 19: goto yy256; + case 20: goto yy258; + case 21: goto yy260; + case 22: goto yy267; + case 23: goto yy269; + case 24: goto yy272; + case 25: goto yy274; + case 26: goto yy282; + case 27: goto yy290; + case 28: goto yy309; + case 29: goto yy312; + case 30: goto yy317; + case 31: goto yy319; + case 32: goto yy326; + case 33: goto yy328; + case 34: goto yy330; + case 35: goto yy332; + case 36: goto yy337; + case 37: goto yy339; + case 38: goto yy341; + case 39: goto yy343; + case 40: goto yy345; + case 41: goto yy347; + case 42: goto yy349; + case 43: goto yy354; + case 44: goto yy364; + case 45: goto yy370; + case 46: goto yy372; + case 47: goto yy374; + case 48: goto yy376; + case 49: goto yy381; + case 50: goto yy386; + case 51: goto yy391; + case 52: goto yy394; + case 53: goto yy396; + case 54: goto yy398; + case 55: goto yy400; + case 56: goto yy404; + case 57: goto yy406; + case 58: goto yy410; + case 59: goto yy412; + case 60: goto yy414; + case 61: goto yy416; + case 62: goto yy420; + case 63: goto yy422; + case 64: goto yy425; + default: goto yy427; } yy97: yych = *++P->cur; switch (yych) { - case '.': goto yy153; + case '.': goto yy155; default: goto yy96; } yy98: @@ -1183,14 +1189,14 @@ yy98: } yy100: ++P->cur; -#line 247 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 247 "src/parser.re" { goto comment; } -#line 1189 "/home/mike/src/php-master/ext/psi/src/parser.c" +#line 1195 "/home/mike/src/php-master/ext/psi/src/parser.c" yy102: yych = *++P->cur; switch (yych) { case '+': - case '-': goto yy155; + case '-': goto yy157; case '0': case '1': case '2': @@ -1200,40 +1206,40 @@ yy102: case '6': case '7': case '8': - case '9': goto yy156; + case '9': goto yy158; default: goto yy96; } yy103: ++P->cur; -#line 273 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 273 "src/parser.re" {RETURN(PSI_T_LSHIFT);} -#line 1211 "/home/mike/src/php-master/ext/psi/src/parser.c" +#line 1217 "/home/mike/src/php-master/ext/psi/src/parser.c" yy105: ++P->cur; -#line 275 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 275 "src/parser.re" {RETURN(PSI_T_CMP_LE);} -#line 1216 "/home/mike/src/php-master/ext/psi/src/parser.c" +#line 1222 "/home/mike/src/php-master/ext/psi/src/parser.c" yy107: ++P->cur; -#line 259 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 259 "src/parser.re" {RETURN(PSI_T_CMP_EQ);} -#line 1221 "/home/mike/src/php-master/ext/psi/src/parser.c" +#line 1227 "/home/mike/src/php-master/ext/psi/src/parser.c" yy109: ++P->cur; -#line 276 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 276 "src/parser.re" {RETURN(PSI_T_CMP_GE);} -#line 1226 "/home/mike/src/php-master/ext/psi/src/parser.c" +#line 1232 "/home/mike/src/php-master/ext/psi/src/parser.c" yy111: ++P->cur; -#line 274 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 274 "src/parser.re" {RETURN(PSI_T_RSHIFT);} -#line 1231 "/home/mike/src/php-master/ext/psi/src/parser.c" +#line 1237 "/home/mike/src/php-master/ext/psi/src/parser.c" yy113: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'R': - case 'r': goto yy158; + case 'r': goto yy160; default: goto yy54; } yy114: @@ -1293,7 +1299,7 @@ yy114: case 'w': case 'x': case 'y': - case 'z': goto yy146; + case 'z': goto yy148; default: goto yy96; } yy115: @@ -1301,7 +1307,7 @@ yy115: yych = *(P->mrk = ++P->cur); switch (yych) { case 'O': - case 'o': goto yy159; + case 'o': goto yy161; default: goto yy54; } yy116: @@ -1309,7 +1315,7 @@ yy116: yych = *(P->mrk = ++P->cur); switch (yych) { case 'L': - case 'l': goto yy160; + case 'l': goto yy162; default: goto yy54; } yy117: @@ -1317,7 +1323,7 @@ yy117: yych = *(P->mrk = ++P->cur); switch (yych) { case 'A': - case 'a': goto yy161; + case 'a': goto yy163; default: goto yy54; } yy118: @@ -1325,9 +1331,9 @@ yy118: yych = *(P->mrk = ++P->cur); switch (yych) { case 'N': - case 'n': goto yy162; + case 'n': goto yy164; case 'U': - case 'u': goto yy163; + case 'u': goto yy165; default: goto yy54; } yy119: @@ -1335,7 +1341,7 @@ yy119: yych = *(P->mrk = ++P->cur); switch (yych) { case 'U': - case 'u': goto yy164; + case 'u': goto yy166; default: goto yy54; } yy120: @@ -1343,7 +1349,7 @@ yy120: yych = *(P->mrk = ++P->cur); switch (yych) { case 'U': - case 'u': goto yy165; + case 'u': goto yy167; default: goto yy54; } yy121: @@ -1351,7 +1357,7 @@ yy121: yych = *(P->mrk = ++P->cur); switch (yych) { case 'L': - case 'l': goto yy166; + case 'l': goto yy168; default: goto yy54; } yy122: @@ -1359,7 +1365,7 @@ yy122: yych = *(P->mrk = ++P->cur); switch (yych) { case 'O': - case 'o': goto yy167; + case 'o': goto yy169; default: goto yy54; } yy123: @@ -1367,7 +1373,7 @@ yy123: yych = *(P->mrk = ++P->cur); switch (yych) { case 'E': - case 'e': goto yy168; + case 'e': goto yy170; default: goto yy54; } yy124: @@ -1375,7 +1381,7 @@ yy124: yych = *(P->mrk = ++P->cur); switch (yych) { case 'N': - case 'n': goto yy169; + case 'n': goto yy171; default: goto yy54; } yy125: @@ -1383,7 +1389,7 @@ yy125: yych = *(P->mrk = ++P->cur); switch (yych) { case 'T': - case 't': goto yy170; + case 't': goto yy172; default: goto yy54; } yy126: @@ -1391,7 +1397,7 @@ yy126: yych = *(P->mrk = ++P->cur); switch (yych) { case 'T': - case 't': goto yy172; + case 't': goto yy174; default: goto yy54; } yy127: @@ -1399,7 +1405,7 @@ yy127: yych = *(P->mrk = ++P->cur); switch (yych) { case 'B': - case 'b': goto yy174; + case 'b': goto yy176; default: goto yy54; } yy128: @@ -1407,7 +1413,7 @@ yy128: yych = *(P->mrk = ++P->cur); switch (yych) { case 'N': - case 'n': goto yy176; + case 'n': goto yy178; default: goto yy54; } yy129: @@ -1415,7 +1421,7 @@ yy129: yych = *(P->mrk = ++P->cur); switch (yych) { case 'X': - case 'x': goto yy177; + case 'x': goto yy179; default: goto yy54; } yy130: @@ -1423,7 +1429,7 @@ yy130: yych = *(P->mrk = ++P->cur); switch (yych) { case 'L': - case 'l': goto yy178; + case 'l': goto yy180; default: goto yy54; } yy131: @@ -1431,7 +1437,7 @@ yy131: yych = *(P->mrk = ++P->cur); switch (yych) { case 'J': - case 'j': goto yy179; + case 'j': goto yy181; default: goto yy54; } yy132: @@ -1439,117 +1445,133 @@ yy132: yych = *(P->mrk = ++P->cur); switch (yych) { case 'T': - case 't': goto yy180; + case 't': goto yy182; default: goto yy54; } yy133: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { - case 'T': - case 't': goto yy181; + case 'S': + case 's': goto yy183; default: goto yy54; } yy134: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { - case 'T': - case 't': goto yy182; + case 'E': + case 'e': goto yy184; default: goto yy54; } yy135: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { - case 'O': - case 'o': goto yy184; + case 'T': + case 't': goto yy185; default: goto yy54; } yy136: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { - case 'G': - case 'g': goto yy185; + case 'T': + case 't': goto yy186; default: goto yy54; } yy137: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { - case 'A': - case 'a': goto yy186; - case 'R': - case 'r': goto yy187; + case 'O': + case 'o': goto yy188; default: goto yy54; } yy138: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { - case 'M': - case 'm': goto yy188; + case 'G': + case 'g': goto yy189; default: goto yy54; } yy139: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { - case '_': goto yy189; + case 'A': + case 'a': goto yy190; + case 'R': + case 'r': goto yy191; default: goto yy54; } yy140: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { - case 'U': - case 'u': goto yy190; + case 'M': + case 'm': goto yy192; default: goto yy54; } yy141: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { - case 'P': - case 'p': goto yy191; + case '_': goto yy193; default: goto yy54; } yy142: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { - case 'N': - case 'n': goto yy192; + case 'U': + case 'u': goto yy194; default: goto yy54; } yy143: + yyaccept = 5; + yych = *(P->mrk = ++P->cur); + switch (yych) { + case 'P': + case 'p': goto yy195; + default: goto yy54; + } +yy144: + yyaccept = 5; + yych = *(P->mrk = ++P->cur); + switch (yych) { + case 'N': + case 'n': goto yy196; + default: goto yy54; + } +yy145: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'I': - case 'i': goto yy193; + case 'i': goto yy197; case 'S': - case 's': goto yy194; + case 's': goto yy198; default: goto yy54; } -yy144: +yy146: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'I': - case 'i': goto yy195; + case 'i': goto yy199; default: goto yy54; } -yy145: +yy147: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'A': - case 'a': goto yy196; + case 'a': goto yy200; default: goto yy54; } -yy146: +yy148: yyaccept = 6; P->mrk = ++P->cur; if (P->lim <= P->cur) { if (!psi_parser_fill(P,1)) RETURN(PSI_T_EOF); }; @@ -1617,30 +1639,30 @@ yy146: case 'w': case 'x': case 'y': - case 'z': goto yy146; + case 'z': goto yy148; case '\\': goto yy114; - default: goto yy148; + default: goto yy150; } -yy148: -#line 341 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy150: +#line 343 "src/parser.re" {RETURN(PSI_T_NSNAME);} -#line 1628 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy149: +#line 1650 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy151: ++P->cur; -#line 261 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 261 "src/parser.re" {RETURN(PSI_T_OR);} -#line 1633 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy151: +#line 1655 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy153: ++P->cur; -#line 343 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 345 "src/parser.re" {RETURN(PSI_T_QUOTED_STRING);} -#line 1638 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy153: +#line 1660 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy155: ++P->cur; -#line 279 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 279 "src/parser.re" {RETURN(PSI_T_ELLIPSIS);} -#line 1643 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy155: +#line 1665 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy157: yych = *++P->cur; switch (yych) { case '0': @@ -1652,10 +1674,10 @@ yy155: case '6': case '7': case '8': - case '9': goto yy156; + case '9': goto yy158; default: goto yy96; } -yy156: +yy158: ++P->cur; if (P->lim <= P->cur) { if (!psi_parser_fill(P,1)) RETURN(PSI_T_EOF); }; yych = *P->cur; @@ -1669,108 +1691,108 @@ yy156: case '6': case '7': case '8': - case '9': goto yy156; + case '9': goto yy158; default: goto yy35; } -yy158: +yy160: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'A': - case 'a': goto yy197; + case 'a': goto yy201; case 'V': - case 'v': goto yy198; + case 'v': goto yy202; default: goto yy54; } -yy159: +yy161: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'L': - case 'l': goto yy199; + case 'l': goto yy203; default: goto yy54; } -yy160: +yy162: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'L': - case 'l': goto yy201; + case 'l': goto yy205; default: goto yy54; } -yy161: +yy163: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'R': - case 'r': goto yy202; + case 'r': goto yy206; default: goto yy54; } -yy162: +yy164: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'S': - case 's': goto yy204; + case 's': goto yy208; default: goto yy54; } -yy163: +yy165: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'N': - case 'n': goto yy205; + case 'n': goto yy209; default: goto yy54; } -yy164: +yy166: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'B': - case 'b': goto yy206; + case 'b': goto yy210; default: goto yy54; } -yy165: +yy167: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'M': - case 'm': goto yy207; + case 'm': goto yy211; default: goto yy54; } -yy166: +yy168: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'S': - case 's': goto yy209; + case 's': goto yy213; default: goto yy54; } -yy167: +yy169: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'A': - case 'a': goto yy210; + case 'a': goto yy214; default: goto yy54; } -yy168: +yy170: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'E': - case 'e': goto yy211; + case 'e': goto yy215; default: goto yy54; } -yy169: +yy171: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'C': - case 'c': goto yy213; + case 'c': goto yy217; default: goto yy54; } -yy170: +yy172: yyaccept = 7; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -1831,20 +1853,20 @@ yy170: case 'x': case 'y': case 'z': goto yy53; - case '1': goto yy214; - case '3': goto yy215; - case '6': goto yy216; - case '8': goto yy217; + case '1': goto yy218; + case '3': goto yy219; + case '6': goto yy220; + case '8': goto yy221; case 'V': - case 'v': goto yy218; + case 'v': goto yy222; case '\\': goto yy114; - default: goto yy171; + default: goto yy173; } -yy171: -#line 291 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy173: +#line 291 "src/parser.re" {RETURN(PSI_T_INT);} -#line 1847 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy172: +#line 1869 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy174: yyaccept = 8; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -1912,13 +1934,13 @@ yy172: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy173; + default: goto yy175; } -yy173: -#line 317 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy175: +#line 317 "src/parser.re" {RETURN(PSI_T_LET);} -#line 1921 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy174: +#line 1943 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy176: yyaccept = 9; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -1986,63 +2008,78 @@ yy174: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy175; + default: goto yy177; } -yy175: -#line 316 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy177: +#line 316 "src/parser.re" {RETURN(PSI_T_LIB);} -#line 1995 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy176: +#line 2017 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy178: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'G': - case 'g': goto yy219; + case 'g': goto yy223; default: goto yy54; } -yy177: +yy179: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'E': - case 'e': goto yy221; + case 'e': goto yy225; default: goto yy54; } -yy178: +yy180: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'L': - case 'l': goto yy222; + case 'l': goto yy226; default: goto yy54; } -yy179: +yy181: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'E': - case 'e': goto yy224; + case 'e': goto yy228; case 'V': - case 'v': goto yy225; + case 'v': goto yy229; default: goto yy54; } -yy180: +yy182: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'H': - case 'h': goto yy226; + case 'h': goto yy230; default: goto yy54; } -yy181: +yy183: + yyaccept = 5; + yych = *(P->mrk = ++P->cur); + switch (yych) { + case 'T': + case 't': goto yy231; + default: goto yy54; + } +yy184: + yyaccept = 5; + yych = *(P->mrk = ++P->cur); + switch (yych) { + case '_': goto yy232; + default: goto yy54; + } +yy185: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'U': - case 'u': goto yy227; + case 'u': goto yy233; default: goto yy54; } -yy182: +yy186: yyaccept = 10; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -2110,149 +2147,149 @@ yy182: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy183; + default: goto yy187; } -yy183: -#line 318 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy187: +#line 318 "src/parser.re" {RETURN(PSI_T_SET);} -#line 2119 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy184: +#line 2156 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy188: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'R': - case 'r': goto yy228; + case 'r': goto yy234; default: goto yy54; } -yy185: +yy189: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'N': - case 'n': goto yy229; + case 'n': goto yy235; default: goto yy54; } -yy186: +yy190: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'T': - case 't': goto yy230; + case 't': goto yy236; default: goto yy54; } -yy187: +yy191: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'I': - case 'i': goto yy231; + case 'i': goto yy237; case 'L': - case 'l': goto yy232; + case 'l': goto yy238; case 'U': - case 'u': goto yy233; + case 'u': goto yy239; case 'V': - case 'v': goto yy234; + case 'v': goto yy240; default: goto yy54; } -yy188: +yy192: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'P': - case 'p': goto yy235; + case 'p': goto yy241; default: goto yy54; } -yy189: +yy193: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'A': - case 'a': goto yy237; + case 'a': goto yy243; case 'B': - case 'b': goto yy238; + case 'b': goto yy244; case 'F': - case 'f': goto yy239; + case 'f': goto yy245; case 'I': - case 'i': goto yy240; + case 'i': goto yy246; case 'O': - case 'o': goto yy241; + case 'o': goto yy247; case 'S': - case 's': goto yy242; + case 's': goto yy248; default: goto yy54; } -yy190: +yy194: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'E': - case 'e': goto yy243; + case 'e': goto yy249; default: goto yy54; } -yy191: +yy195: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'E': - case 'e': goto yy245; + case 'e': goto yy251; default: goto yy54; } -yy192: +yy196: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'T': - case 't': goto yy246; + case 't': goto yy252; default: goto yy54; } -yy193: +yy197: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'O': - case 'o': goto yy247; + case 'o': goto yy253; default: goto yy54; } -yy194: +yy198: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'I': - case 'i': goto yy248; + case 'i': goto yy254; default: goto yy54; } -yy195: +yy199: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'D': - case 'd': goto yy249; + case 'd': goto yy255; default: goto yy54; } -yy196: +yy200: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'L': - case 'l': goto yy251; + case 'l': goto yy257; default: goto yy54; } -yy197: +yy201: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'Y': - case 'y': goto yy253; + case 'y': goto yy259; default: goto yy54; } -yy198: +yy202: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'A': - case 'a': goto yy255; + case 'a': goto yy261; default: goto yy54; } -yy199: +yy203: yyaccept = 11; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -2318,27 +2355,27 @@ yy199: case 'y': case 'z': goto yy53; case 'V': - case 'v': goto yy256; + case 'v': goto yy262; case '\\': goto yy114; - default: goto yy200; + default: goto yy204; } -yy200: -#line 288 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy204: +#line 288 "src/parser.re" {RETURN(PSI_T_BOOL);} -#line 2329 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy201: +#line 2366 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy205: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'A': - case 'a': goto yy257; + case 'a': goto yy263; case 'B': - case 'b': goto yy258; + case 'b': goto yy264; case 'O': - case 'o': goto yy259; + case 'o': goto yy265; default: goto yy54; } -yy202: +yy206: yyaccept = 12; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -2406,37 +2443,37 @@ yy202: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy203; + default: goto yy207; } -yy203: -#line 289 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy207: +#line 289 "src/parser.re" {RETURN(PSI_T_CHAR);} -#line 2415 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy204: +#line 2452 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy208: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'T': - case 't': goto yy260; + case 't': goto yy266; default: goto yy54; } -yy205: +yy209: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'T': - case 't': goto yy262; + case 't': goto yy268; default: goto yy54; } -yy206: +yy210: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'L': - case 'l': goto yy264; + case 'l': goto yy270; default: goto yy54; } -yy207: +yy211: yyaccept = 13; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -2504,29 +2541,29 @@ yy207: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy208; + default: goto yy212; } -yy208: -#line 314 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy212: +#line 314 "src/parser.re" {RETURN(PSI_T_ENUM);} -#line 2513 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy209: +#line 2550 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy213: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'E': - case 'e': goto yy265; + case 'e': goto yy271; default: goto yy54; } -yy210: +yy214: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'T': - case 't': goto yy267; + case 't': goto yy273; default: goto yy54; } -yy211: +yy215: yyaccept = 14; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -2594,57 +2631,57 @@ yy211: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy212; + default: goto yy216; } -yy212: -#line 320 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy216: +#line 322 "src/parser.re" {RETURN(PSI_T_FREE);} -#line 2603 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy213: +#line 2640 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy217: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'T': - case 't': goto yy269; + case 't': goto yy275; default: goto yy54; } -yy214: +yy218: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { - case '6': goto yy270; + case '6': goto yy276; default: goto yy54; } -yy215: +yy219: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { - case '2': goto yy271; + case '2': goto yy277; default: goto yy54; } -yy216: +yy220: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { - case '4': goto yy272; + case '4': goto yy278; default: goto yy54; } -yy217: +yy221: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { - case '_': goto yy273; + case '_': goto yy279; default: goto yy54; } -yy218: +yy222: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'A': - case 'a': goto yy274; + case 'a': goto yy280; default: goto yy54; } -yy219: +yy223: yyaccept = 15; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -2712,21 +2749,21 @@ yy219: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy220; + default: goto yy224; } -yy220: -#line 292 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy224: +#line 292 "src/parser.re" {RETURN(PSI_T_LONG);} -#line 2721 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy221: +#line 2758 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy225: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'D': - case 'd': goto yy275; + case 'd': goto yy281; default: goto yy54; } -yy222: +yy226: yyaccept = 16; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -2794,101 +2831,116 @@ yy222: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy223; + default: goto yy227; } -yy223: -#line 284 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy227: +#line 284 "src/parser.re" {RETURN(PSI_T_NULL);} -#line 2803 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy224: +#line 2840 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy228: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'C': - case 'c': goto yy277; + case 'c': goto yy283; default: goto yy54; } -yy225: +yy229: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'A': - case 'a': goto yy278; + case 'a': goto yy284; default: goto yy54; } -yy226: +yy230: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'V': - case 'v': goto yy279; + case 'v': goto yy285; default: goto yy54; } -yy227: +yy231: + yyaccept = 5; + yych = *(P->mrk = ++P->cur); + switch (yych) { + case '_': goto yy286; + default: goto yy54; + } +yy232: + yyaccept = 5; + yych = *(P->mrk = ++P->cur); + switch (yych) { + case 'A': + case 'a': goto yy287; + default: goto yy54; + } +yy233: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'R': - case 'r': goto yy280; + case 'r': goto yy288; default: goto yy54; } -yy228: +yy234: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'T': - case 't': goto yy281; + case 't': goto yy289; default: goto yy54; } -yy229: +yy235: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'E': - case 'e': goto yy283; + case 'e': goto yy291; default: goto yy54; } -yy230: +yy236: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'I': - case 'i': goto yy284; + case 'i': goto yy292; default: goto yy54; } -yy231: +yy237: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'N': - case 'n': goto yy285; + case 'n': goto yy293; default: goto yy54; } -yy232: +yy238: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'E': - case 'e': goto yy286; + case 'e': goto yy294; default: goto yy54; } -yy233: +yy239: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'C': - case 'c': goto yy287; + case 'c': goto yy295; default: goto yy54; } -yy234: +yy240: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'A': - case 'a': goto yy288; + case 'a': goto yy296; default: goto yy54; } -yy235: +yy241: yyaccept = 17; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -2956,61 +3008,61 @@ yy235: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy236; + default: goto yy242; } -yy236: -#line 321 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy242: +#line 323 "src/parser.re" {RETURN(PSI_T_TEMP);} -#line 2965 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy237: +#line 3017 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy243: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'R': - case 'r': goto yy289; + case 'r': goto yy297; default: goto yy54; } -yy238: +yy244: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'O': - case 'o': goto yy290; + case 'o': goto yy298; default: goto yy54; } -yy239: +yy245: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'L': - case 'l': goto yy291; + case 'l': goto yy299; default: goto yy54; } -yy240: +yy246: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'N': - case 'n': goto yy292; + case 'n': goto yy300; default: goto yy54; } -yy241: +yy247: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'B': - case 'b': goto yy293; + case 'b': goto yy301; default: goto yy54; } -yy242: +yy248: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'T': - case 't': goto yy294; + case 't': goto yy302; default: goto yy54; } -yy243: +yy249: yyaccept = 18; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -3078,47 +3130,47 @@ yy243: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy244; + default: goto yy250; } -yy244: -#line 282 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy250: +#line 282 "src/parser.re" {RETURN(PSI_T_TRUE);} -#line 3087 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy245: +#line 3139 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy251: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'D': - case 'd': goto yy295; + case 'd': goto yy303; default: goto yy54; } -yy246: +yy252: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { - case '1': goto yy296; - case '3': goto yy297; - case '6': goto yy298; - case '8': goto yy299; + case '1': goto yy304; + case '3': goto yy305; + case '6': goto yy306; + case '8': goto yy307; default: goto yy54; } -yy247: +yy253: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'N': - case 'n': goto yy300; + case 'n': goto yy308; default: goto yy54; } -yy248: +yy254: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'G': - case 'g': goto yy302; + case 'g': goto yy310; default: goto yy54; } -yy249: +yy255: yyaccept = 19; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -3186,13 +3238,13 @@ yy249: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy250; + default: goto yy256; } -yy250: -#line 287 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy256: +#line 287 "src/parser.re" {RETURN(PSI_T_VOID);} -#line 3195 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy251: +#line 3247 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy257: yyaccept = 20; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -3260,13 +3312,13 @@ yy251: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy252; + default: goto yy258; } -yy252: -#line 330 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy258: +#line 332 "src/parser.re" {RETURN(PSI_T_ZVAL);} -#line 3269 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy253: +#line 3321 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy259: yyaccept = 21; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -3334,53 +3386,53 @@ yy253: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy254; + default: goto yy260; } -yy254: -#line 306 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy260: +#line 306 "src/parser.re" {RETURN(PSI_T_ARRAY);} -#line 3343 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy255: +#line 3395 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy261: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'L': - case 'l': goto yy303; + case 'l': goto yy311; default: goto yy54; } -yy256: +yy262: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'A': - case 'a': goto yy305; + case 'a': goto yy313; default: goto yy54; } -yy257: +yy263: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'B': - case 'b': goto yy306; + case 'b': goto yy314; default: goto yy54; } -yy258: +yy264: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'A': - case 'a': goto yy307; + case 'a': goto yy315; default: goto yy54; } -yy259: +yy265: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'C': - case 'c': goto yy308; + case 'c': goto yy316; default: goto yy54; } -yy260: +yy266: yyaccept = 22; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -3448,13 +3500,13 @@ yy260: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy261; + default: goto yy267; } -yy261: -#line 315 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy267: +#line 315 "src/parser.re" {RETURN(PSI_T_CONST);} -#line 3457 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy262: +#line 3509 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy268: yyaccept = 23; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -3522,21 +3574,21 @@ yy262: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy263; + default: goto yy269; } -yy263: -#line 331 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy269: +#line 333 "src/parser.re" {RETURN(PSI_T_COUNT);} -#line 3531 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy264: +#line 3583 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy270: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'E': - case 'e': goto yy310; + case 'e': goto yy318; default: goto yy54; } -yy265: +yy271: yyaccept = 24; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -3604,13 +3656,13 @@ yy265: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy266; + default: goto yy272; } -yy266: -#line 283 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy272: +#line 283 "src/parser.re" {RETURN(PSI_T_FALSE);} -#line 3613 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy267: +#line 3665 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy273: yyaccept = 25; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -3676,60 +3728,60 @@ yy267: case 'y': case 'z': goto yy53; case 'V': - case 'v': goto yy312; + case 'v': goto yy320; case '\\': goto yy114; - default: goto yy268; + default: goto yy274; } -yy268: -#line 293 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy274: +#line 293 "src/parser.re" {RETURN(PSI_T_FLOAT);} -#line 3687 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy269: +#line 3739 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy275: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'I': - case 'i': goto yy313; + case 'i': goto yy321; default: goto yy54; } -yy270: +yy276: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { - case '_': goto yy314; + case '_': goto yy322; default: goto yy54; } -yy271: +yy277: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { - case '_': goto yy315; + case '_': goto yy323; default: goto yy54; } -yy272: +yy278: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { - case '_': goto yy316; + case '_': goto yy324; default: goto yy54; } -yy273: +yy279: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'T': - case 't': goto yy317; + case 't': goto yy325; default: goto yy54; } -yy274: +yy280: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'L': - case 'l': goto yy319; + case 'l': goto yy327; default: goto yy54; } -yy275: +yy281: yyaccept = 26; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -3797,45 +3849,61 @@ yy275: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy276; + default: goto yy282; } -yy276: -#line 285 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy282: +#line 285 "src/parser.re" {RETURN(PSI_T_MIXED);} -#line 3806 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy277: +#line 3858 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy283: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'T': - case 't': goto yy321; + case 't': goto yy329; default: goto yy54; } -yy278: +yy284: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'L': - case 'l': goto yy323; + case 'l': goto yy331; default: goto yy54; } -yy279: +yy285: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'A': - case 'a': goto yy325; + case 'a': goto yy333; default: goto yy54; } -yy280: +yy286: + yyaccept = 5; + yych = *(P->mrk = ++P->cur); + switch (yych) { + case 'A': + case 'a': goto yy334; + default: goto yy54; + } +yy287: + yyaccept = 5; + yych = *(P->mrk = ++P->cur); + switch (yych) { + case 'S': + case 's': goto yy335; + default: goto yy54; + } +yy288: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'N': - case 'n': goto yy326; + case 'n': goto yy336; default: goto yy54; } -yy281: +yy289: yyaccept = 27; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -3903,145 +3971,145 @@ yy281: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy282; + default: goto yy290; } -yy282: -#line 290 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy290: +#line 290 "src/parser.re" {RETURN(PSI_T_SHORT);} -#line 3912 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy283: +#line 3980 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy291: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'D': - case 'd': goto yy328; + case 'd': goto yy338; default: goto yy54; } -yy284: +yy292: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'C': - case 'c': goto yy330; + case 'c': goto yy340; default: goto yy54; } -yy285: +yy293: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'G': - case 'g': goto yy332; + case 'g': goto yy342; default: goto yy54; } -yy286: +yy294: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'N': - case 'n': goto yy334; + case 'n': goto yy344; default: goto yy54; } -yy287: +yy295: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'T': - case 't': goto yy336; + case 't': goto yy346; default: goto yy54; } -yy288: +yy296: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'L': - case 'l': goto yy338; + case 'l': goto yy348; default: goto yy54; } -yy289: +yy297: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'R': - case 'r': goto yy340; + case 'r': goto yy350; default: goto yy54; } -yy290: +yy298: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'O': - case 'o': goto yy341; + case 'o': goto yy351; default: goto yy54; } -yy291: +yy299: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'O': - case 'o': goto yy342; + case 'o': goto yy352; default: goto yy54; } -yy292: +yy300: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'T': - case 't': goto yy343; + case 't': goto yy353; default: goto yy54; } -yy293: +yy301: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'J': - case 'j': goto yy345; + case 'j': goto yy355; default: goto yy54; } -yy294: +yy302: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'R': - case 'r': goto yy346; + case 'r': goto yy356; default: goto yy54; } -yy295: +yy303: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'E': - case 'e': goto yy347; + case 'e': goto yy357; default: goto yy54; } -yy296: +yy304: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { - case '6': goto yy348; + case '6': goto yy358; default: goto yy54; } -yy297: +yy305: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { - case '2': goto yy349; + case '2': goto yy359; default: goto yy54; } -yy298: +yy306: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { - case '4': goto yy350; + case '4': goto yy360; default: goto yy54; } -yy299: +yy307: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { - case '_': goto yy351; + case '_': goto yy361; default: goto yy54; } -yy300: +yy308: yyaccept = 28; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -4109,21 +4177,21 @@ yy300: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy301; + default: goto yy309; } -yy301: -#line 313 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy309: +#line 313 "src/parser.re" {RETURN(PSI_T_UNION);} -#line 4118 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy302: +#line 4186 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy310: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'N': - case 'n': goto yy352; + case 'n': goto yy362; default: goto yy54; } -yy303: +yy311: yyaccept = 29; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -4191,37 +4259,37 @@ yy303: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy304; + default: goto yy312; } -yy304: -#line 328 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy312: +#line 330 "src/parser.re" {RETURN(PSI_T_ARRVAL);} -#line 4200 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy305: +#line 4268 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy313: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'L': - case 'l': goto yy353; + case 'l': goto yy363; default: goto yy54; } -yy306: +yy314: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'L': - case 'l': goto yy355; + case 'l': goto yy365; default: goto yy54; } -yy307: +yy315: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'C': - case 'c': goto yy356; + case 'c': goto yy366; default: goto yy54; } -yy308: +yy316: yyaccept = 30; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -4289,13 +4357,13 @@ yy308: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy309; + default: goto yy317; } -yy309: -#line 332 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy317: +#line 334 "src/parser.re" {RETURN(PSI_T_CALLOC);} -#line 4298 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy310: +#line 4366 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy318: yyaccept = 31; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -4363,53 +4431,53 @@ yy310: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy311; + default: goto yy319; } -yy311: -#line 294 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy319: +#line 294 "src/parser.re" {RETURN(PSI_T_DOUBLE);} -#line 4372 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy312: +#line 4440 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy320: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'A': - case 'a': goto yy357; + case 'a': goto yy367; default: goto yy54; } -yy313: +yy321: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'O': - case 'o': goto yy358; + case 'o': goto yy368; default: goto yy54; } -yy314: +yy322: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'T': - case 't': goto yy359; + case 't': goto yy369; default: goto yy54; } -yy315: +yy323: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'T': - case 't': goto yy361; + case 't': goto yy371; default: goto yy54; } -yy316: +yy324: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'T': - case 't': goto yy363; + case 't': goto yy373; default: goto yy54; } -yy317: +yy325: yyaccept = 32; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -4477,13 +4545,13 @@ yy317: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy318; + default: goto yy326; } -yy318: -#line 295 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy326: +#line 295 "src/parser.re" {RETURN(PSI_T_INT8);} -#line 4486 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy319: +#line 4554 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy327: yyaccept = 33; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -4551,13 +4619,13 @@ yy319: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy320; + default: goto yy328; } -yy320: -#line 325 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy328: +#line 327 "src/parser.re" {RETURN(PSI_T_INTVAL);} -#line 4560 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy321: +#line 4628 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy329: yyaccept = 34; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -4625,13 +4693,13 @@ yy321: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy322; + default: goto yy330; } -yy322: -#line 307 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy330: +#line 307 "src/parser.re" {RETURN(PSI_T_OBJECT);} -#line 4634 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy323: +#line 4702 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy331: yyaccept = 35; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -4699,21 +4767,37 @@ yy323: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy324; + default: goto yy332; } -yy324: -#line 329 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy332: +#line 331 "src/parser.re" {RETURN(PSI_T_OBJVAL);} -#line 4708 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy325: +#line 4776 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy333: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'L': - case 'l': goto yy365; + case 'l': goto yy375; default: goto yy54; } -yy326: +yy334: + yyaccept = 5; + yych = *(P->mrk = ++P->cur); + switch (yych) { + case 'S': + case 's': goto yy377; + default: goto yy54; + } +yy335: + yyaccept = 5; + yych = *(P->mrk = ++P->cur); + switch (yych) { + case 'S': + case 's': goto yy378; + default: goto yy54; + } +yy336: yyaccept = 36; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -4781,13 +4865,13 @@ yy326: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy327; + default: goto yy337; } -yy327: -#line 319 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy337: +#line 321 "src/parser.re" {RETURN(PSI_T_RETURN);} -#line 4790 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy328: +#line 4874 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy338: yyaccept = 37; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -4855,13 +4939,13 @@ yy328: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy329; + default: goto yy339; } -yy329: -#line 304 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy339: +#line 304 "src/parser.re" {RETURN(PSI_T_SIGNED);} -#line 4864 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy330: +#line 4948 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy340: yyaccept = 38; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -4929,13 +5013,13 @@ yy330: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy331; + default: goto yy341; } -yy331: -#line 309 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy341: +#line 309 "src/parser.re" {RETURN(PSI_T_STATIC);} -#line 4938 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy332: +#line 5022 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy342: yyaccept = 39; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -5003,13 +5087,13 @@ yy332: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy333; + default: goto yy343; } -yy333: -#line 305 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy343: +#line 305 "src/parser.re" {RETURN(PSI_T_STRING);} -#line 5012 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy334: +#line 5096 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy344: yyaccept = 40; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -5077,13 +5161,13 @@ yy334: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy335; + default: goto yy345; } -yy335: -#line 322 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy345: +#line 324 "src/parser.re" {RETURN(PSI_T_STRLEN);} -#line 5086 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy336: +#line 5170 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy346: yyaccept = 41; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -5151,13 +5235,13 @@ yy336: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy337; + default: goto yy347; } -yy337: -#line 312 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy347: +#line 312 "src/parser.re" {RETURN(PSI_T_STRUCT);} -#line 5160 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy338: +#line 5244 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy348: yyaccept = 42; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -5225,37 +5309,37 @@ yy338: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy339; + default: goto yy349; } -yy339: -#line 323 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy349: +#line 325 "src/parser.re" {RETURN(PSI_T_STRVAL);} -#line 5234 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy340: +#line 5318 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy350: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'A': - case 'a': goto yy367; + case 'a': goto yy379; default: goto yy54; } -yy341: +yy351: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'L': - case 'l': goto yy368; + case 'l': goto yy380; default: goto yy54; } -yy342: +yy352: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'A': - case 'a': goto yy370; + case 'a': goto yy382; default: goto yy54; } -yy343: +yy353: yyaccept = 43; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -5323,74 +5407,74 @@ yy343: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy344; + default: goto yy354; } -yy344: -#line 336 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy354: +#line 338 "src/parser.re" {RETURN(PSI_T_TO_INT);} -#line 5332 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy345: +#line 5416 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy355: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'E': - case 'e': goto yy371; + case 'e': goto yy383; default: goto yy54; } -yy346: +yy356: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'I': - case 'i': goto yy372; + case 'i': goto yy384; default: goto yy54; } -yy347: +yy357: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'F': - case 'f': goto yy373; + case 'f': goto yy385; default: goto yy54; } -yy348: +yy358: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { - case '_': goto yy375; + case '_': goto yy387; default: goto yy54; } -yy349: +yy359: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { - case '_': goto yy376; + case '_': goto yy388; default: goto yy54; } -yy350: +yy360: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { - case '_': goto yy377; + case '_': goto yy389; default: goto yy54; } -yy351: +yy361: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'T': - case 't': goto yy378; + case 't': goto yy390; default: goto yy54; } -yy352: +yy362: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'E': - case 'e': goto yy380; + case 'e': goto yy392; default: goto yy54; } -yy353: +yy363: yyaccept = 44; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -5458,45 +5542,45 @@ yy353: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy354; + default: goto yy364; } -yy354: -#line 327 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy364: +#line 329 "src/parser.re" {RETURN(PSI_T_BOOLVAL);} -#line 5467 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy355: +#line 5551 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy365: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'E': - case 'e': goto yy381; + case 'e': goto yy393; default: goto yy54; } -yy356: +yy366: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'K': - case 'k': goto yy383; + case 'k': goto yy395; default: goto yy54; } -yy357: +yy367: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'L': - case 'l': goto yy385; + case 'l': goto yy397; default: goto yy54; } -yy358: +yy368: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'N': - case 'n': goto yy387; + case 'n': goto yy399; default: goto yy54; } -yy359: +yy369: yyaccept = 45; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -5564,13 +5648,13 @@ yy359: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy360; + default: goto yy370; } -yy360: -#line 297 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy370: +#line 297 "src/parser.re" {RETURN(PSI_T_INT16);} -#line 5573 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy361: +#line 5657 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy371: yyaccept = 46; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -5638,13 +5722,13 @@ yy361: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy362; + default: goto yy372; } -yy362: -#line 299 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy372: +#line 299 "src/parser.re" {RETURN(PSI_T_INT32);} -#line 5647 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy363: +#line 5731 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy373: yyaccept = 47; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -5712,13 +5796,13 @@ yy363: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy364; + default: goto yy374; } -yy364: -#line 301 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy374: +#line 301 "src/parser.re" {RETURN(PSI_T_INT64);} -#line 5721 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy365: +#line 5805 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy375: yyaccept = 48; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -5786,21 +5870,37 @@ yy365: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy366; + default: goto yy376; } -yy366: -#line 324 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy376: +#line 326 "src/parser.re" {RETURN(PSI_T_PATHVAL);} -#line 5795 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy367: +#line 5879 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy377: + yyaccept = 5; + yych = *(P->mrk = ++P->cur); + switch (yych) { + case 'S': + case 's': goto yy401; + default: goto yy54; + } +yy378: + yyaccept = 5; + yych = *(P->mrk = ++P->cur); + switch (yych) { + case 'E': + case 'e': goto yy402; + default: goto yy54; + } +yy379: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'Y': - case 'y': goto yy389; + case 'y': goto yy403; default: goto yy54; } -yy368: +yy380: yyaccept = 49; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -5868,37 +5968,37 @@ yy368: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy369; + default: goto yy381; } -yy369: -#line 338 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy381: +#line 340 "src/parser.re" {RETURN(PSI_T_TO_BOOL);} -#line 5877 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy370: +#line 5977 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy382: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'T': - case 't': goto yy391; + case 't': goto yy405; default: goto yy54; } -yy371: +yy383: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'C': - case 'c': goto yy393; + case 'c': goto yy407; default: goto yy54; } -yy372: +yy384: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'N': - case 'n': goto yy394; + case 'n': goto yy408; default: goto yy54; } -yy373: +yy385: yyaccept = 50; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -5966,37 +6066,37 @@ yy373: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy374; + default: goto yy386; } -yy374: -#line 311 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy386: +#line 311 "src/parser.re" {RETURN(PSI_T_TYPEDEF);} -#line 5975 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy375: +#line 6075 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy387: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'T': - case 't': goto yy395; + case 't': goto yy409; default: goto yy54; } -yy376: +yy388: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'T': - case 't': goto yy397; + case 't': goto yy411; default: goto yy54; } -yy377: +yy389: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'T': - case 't': goto yy399; + case 't': goto yy413; default: goto yy54; } -yy378: +yy390: yyaccept = 51; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -6064,21 +6164,21 @@ yy378: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy379; + default: goto yy391; } -yy379: -#line 296 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy391: +#line 296 "src/parser.re" {RETURN(PSI_T_UINT8);} -#line 6073 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy380: +#line 6173 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy392: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'D': - case 'd': goto yy401; + case 'd': goto yy415; default: goto yy54; } -yy381: +yy393: yyaccept = 52; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -6146,13 +6246,13 @@ yy381: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy382; + default: goto yy394; } -yy382: -#line 286 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy394: +#line 286 "src/parser.re" {RETURN(PSI_T_CALLABLE);} -#line 6155 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy383: +#line 6255 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy395: yyaccept = 53; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -6220,13 +6320,13 @@ yy383: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy384; + default: goto yy396; } -yy384: -#line 308 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy396: +#line 308 "src/parser.re" {RETURN(PSI_T_CALLBACK);} -#line 6229 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy385: +#line 6329 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy397: yyaccept = 54; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -6294,13 +6394,13 @@ yy385: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy386; + default: goto yy398; } -yy386: -#line 326 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy398: +#line 328 "src/parser.re" {RETURN(PSI_T_FLOATVAL);} -#line 6303 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy387: +#line 6403 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy399: yyaccept = 55; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -6368,13 +6468,29 @@ yy387: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy388; + default: goto yy400; } -yy388: -#line 310 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy400: +#line 310 "src/parser.re" {RETURN(PSI_T_FUNCTION);} -#line 6377 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy389: +#line 6477 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy401: + yyaccept = 5; + yych = *(P->mrk = ++P->cur); + switch (yych) { + case 'E': + case 'e': goto yy417; + default: goto yy54; + } +yy402: + yyaccept = 5; + yych = *(P->mrk = ++P->cur); + switch (yych) { + case 'R': + case 'r': goto yy418; + default: goto yy54; + } +yy403: yyaccept = 56; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -6442,13 +6558,13 @@ yy389: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy390; + default: goto yy404; } -yy390: -#line 334 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy404: +#line 336 "src/parser.re" {RETURN(PSI_T_TO_ARRAY);} -#line 6451 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy391: +#line 6567 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy405: yyaccept = 57; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -6516,29 +6632,29 @@ yy391: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy392; + default: goto yy406; } -yy392: -#line 337 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy406: +#line 339 "src/parser.re" {RETURN(PSI_T_TO_FLOAT);} -#line 6525 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy393: +#line 6641 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy407: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'T': - case 't': goto yy403; + case 't': goto yy419; default: goto yy54; } -yy394: +yy408: yyaccept = 5; yych = *(P->mrk = ++P->cur); switch (yych) { case 'G': - case 'g': goto yy405; + case 'g': goto yy421; default: goto yy54; } -yy395: +yy409: yyaccept = 58; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -6606,13 +6722,13 @@ yy395: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy396; + default: goto yy410; } -yy396: -#line 298 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy410: +#line 298 "src/parser.re" {RETURN(PSI_T_UINT16);} -#line 6615 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy397: +#line 6731 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy411: yyaccept = 59; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -6680,13 +6796,13 @@ yy397: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy398; + default: goto yy412; } -yy398: -#line 300 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy412: +#line 300 "src/parser.re" {RETURN(PSI_T_UINT32);} -#line 6689 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy399: +#line 6805 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy413: yyaccept = 60; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -6754,13 +6870,13 @@ yy399: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy400; + default: goto yy414; } -yy400: -#line 302 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy414: +#line 302 "src/parser.re" {RETURN(PSI_T_UINT64);} -#line 6763 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy401: +#line 6879 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy415: yyaccept = 61; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -6828,13 +6944,29 @@ yy401: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy402; + default: goto yy416; } -yy402: -#line 303 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy416: +#line 303 "src/parser.re" {RETURN(PSI_T_UNSIGNED);} -#line 6837 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy403: +#line 6953 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy417: + yyaccept = 5; + yych = *(P->mrk = ++P->cur); + switch (yych) { + case 'R': + case 'r': goto yy423; + default: goto yy54; + } +yy418: + yyaccept = 5; + yych = *(P->mrk = ++P->cur); + switch (yych) { + case 'T': + case 't': goto yy424; + default: goto yy54; + } +yy419: yyaccept = 62; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -6902,13 +7034,13 @@ yy403: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy404; + default: goto yy420; } -yy404: -#line 333 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy420: +#line 335 "src/parser.re" {RETURN(PSI_T_TO_OBJECT);} -#line 6911 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy405: +#line 7043 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy421: yyaccept = 63; yych = *(P->mrk = ++P->cur); switch (yych) { @@ -6976,53 +7108,209 @@ yy405: case 'y': case 'z': goto yy53; case '\\': goto yy114; - default: goto yy406; + default: goto yy422; } -yy406: -#line 335 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy422: +#line 337 "src/parser.re" {RETURN(PSI_T_TO_STRING);} -#line 6985 "/home/mike/src/php-master/ext/psi/src/parser.c" +#line 7117 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy423: + yyaccept = 5; + yych = *(P->mrk = ++P->cur); + switch (yych) { + case 'T': + case 't': goto yy426; + default: goto yy54; + } +yy424: + yyaccept = 64; + yych = *(P->mrk = ++P->cur); + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy53; + case '\\': goto yy114; + default: goto yy425; + } +yy425: +#line 319 "src/parser.re" + {RETURN(PSI_T_PRE_ASSERT);} +#line 7199 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy426: + yyaccept = 65; + yych = *(P->mrk = ++P->cur); + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy53; + case '\\': goto yy114; + default: goto yy427; + } +yy427: +#line 320 "src/parser.re" + {RETURN(PSI_T_POST_ASSERT);} +#line 7273 "/home/mike/src/php-master/ext/psi/src/parser.c" } -#line 345 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 347 "src/parser.re" comment: P->tok = P->cur; -#line 6993 "/home/mike/src/php-master/ext/psi/src/parser.c" +#line 7281 "/home/mike/src/php-master/ext/psi/src/parser.c" { unsigned char yych; if ((P->lim - P->cur) < 2) { if (!psi_parser_fill(P,2)) RETURN(PSI_T_EOF); }; yych = *P->cur; switch (yych) { - case '\n': goto yy411; - case '*': goto yy413; - default: goto yy409; + case '\n': goto yy432; + case '*': goto yy434; + default: goto yy430; } -yy409: +yy430: ++P->cur; -yy410: -#line 352 "/home/mike/src/php-master/ext/psi/src/parser.re" +yy431: +#line 354 "src/parser.re" { goto comment; } -#line 7008 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy411: +#line 7296 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy432: ++P->cur; -#line 350 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 352 "src/parser.re" { NEWLINE(comment); } -#line 7013 "/home/mike/src/php-master/ext/psi/src/parser.c" -yy413: +#line 7301 "/home/mike/src/php-master/ext/psi/src/parser.c" +yy434: yych = *++P->cur; switch (yych) { - case '/': goto yy414; - default: goto yy410; + case '/': goto yy435; + default: goto yy431; } -yy414: +yy435: ++P->cur; -#line 351 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 353 "src/parser.re" { continue; } -#line 7024 "/home/mike/src/php-master/ext/psi/src/parser.c" +#line 7312 "/home/mike/src/php-master/ext/psi/src/parser.c" } -#line 353 "/home/mike/src/php-master/ext/psi/src/parser.re" +#line 355 "src/parser.re" } return -1; diff --git a/src/parser.re b/src/parser.re index 1b2aae7..df2d102 100644 --- a/src/parser.re +++ b/src/parser.re @@ -316,6 +316,8 @@ token_t psi_parser_scan(struct psi_parser *P) 'LIB' {RETURN(PSI_T_LIB);} 'LET' {RETURN(PSI_T_LET);} 'SET' {RETURN(PSI_T_SET);} + 'PRE_ASSERT' {RETURN(PSI_T_PRE_ASSERT);} + 'POST_ASSERT' {RETURN(PSI_T_POST_ASSERT);} 'RETURN' {RETURN(PSI_T_RETURN);} 'FREE' {RETURN(PSI_T_FREE);} 'TEMP' {RETURN(PSI_T_TEMP);} diff --git a/src/parser_def.h b/src/parser_def.h index b299c19..293fdb8 100644 --- a/src/parser_def.h +++ b/src/parser_def.h @@ -94,6 +94,7 @@ TOKEN_CLASS(unary_op, T(TILDE) T(NOT) T(PLUS) T(MINUS)) TOKEN_CLASS(let_func, T(ZVAL) T(OBJVAL) T(ARRVAL) T(PATHVAL) T(STRLEN) T(STRVAL) T(FLOATVAL) T(INTVAL) T(BOOLVAL) T(COUNT)) TOKEN_CLASS(set_func, T(TO_OBJECT) T(TO_ARRAY) T(TO_STRING) T(TO_INT) T(TO_FLOAT) T(TO_BOOL) T(ZVAL) T(VOID)) TOKEN_CLASS(impl_type, T(VOID) T(MIXED) T(BOOL) T(INT) T(FLOAT) T(STRING) T(ARRAY) T(OBJECT) T(CALLABLE)) +TOKEN_CLASS(assert_stmt, T(PRE_ASSERT) T(POST_ASSERT)) DEF(%nonassoc, NAME.) DEF(%right, NOT TILDE.) @@ -198,6 +199,8 @@ TOKEN_TYPE(let_exp, struct psi_let_exp*) TOKEN_DTOR(let_exp, psi_let_exp_free(&$$);) TOKEN_TYPE(let_exps, struct psi_plist*) TOKEN_DTOR(let_exps, psi_plist_free($$);) +TOKEN_TYPE(assert_stmt, struct psi_assert_stmt*) +TOKEN_DTOR(assert_stmt, psi_assert_stmt_free(&$$);) TOKEN_TYPE(set_stmt, struct psi_set_stmt*) TOKEN_DTOR(set_stmt, psi_set_stmt_free(&$$);) TOKEN_TYPE(set_exp, struct psi_set_exp*) @@ -1411,6 +1414,14 @@ PARSE_TYPED(impl_stmt, i, i = (struct psi_token**) s; } +/* + * impl_stmt: assert_stmt + */ +PARSE_TYPED(impl_stmt, i, + TYPED(assert_stmt, s)) { + i = (struct psi_token **) s; +} + /* * impl_stmt: free_stmt */ @@ -1872,6 +1883,17 @@ PARSE_TYPED(free_exp, call, call->token = F; } +/* + * assert_stmt: assert_stmt_token num_exp ; + */ +PARSE_TYPED(assert_stmt, ass, + NAMED(assert_stmt_token, T) + TYPED(num_exp, exp) + TOKEN(EOS)) { + ass = psi_assert_stmt_init(T->type, exp); + ass->token = T; +} + /* * reference: */ diff --git a/src/parser_proc.c b/src/parser_proc.c index 07478fa..7780561 100644 --- a/src/parser_proc.c +++ b/src/parser_proc.c @@ -118,49 +118,50 @@ void psi_parser_proc_free(void **parser_proc) #endif /************* Begin control #defines *****************************************/ #define YYCODETYPE unsigned char -#define YYNOCODE 167 +#define YYNOCODE 170 #define YYACTIONTYPE unsigned short int #define ParseTOKENTYPE struct psi_token * typedef union { int yyinit; ParseTOKENTYPE yy0; - struct psi_const_type* yy7; - struct psi_let_calloc* yy17; - struct psi_decl_union* yy19; - struct psi_impl_def_val* yy21; - struct psi_token** yy38; - struct psi_num_exp* yy39; - struct psi_impl* yy49; - struct psi_set_exp* yy67; - struct psi_decl_enum_item* yy69; - struct psi_decl* yy71; - struct psi_let_func* yy72; - struct psi_free_stmt* yy76; - struct psi_set_func* yy78; - struct psi_layout* yy81; - struct psi_const* yy106; - struct psi_impl_func* yy120; - struct psi_return_stmt* yy130; - struct psi_let_stmt* yy139; - struct psi_impl_type* yy142; - struct psi_let_exp* yy144; - struct psi_decl_type* yy152; - struct psi_number* yy160; - struct psi_let_callback* yy164; - struct psi_impl_var* yy185; - unsigned yy190; - struct psi_free_exp* yy197; - struct psi_decl_var* yy207; - struct psi_set_stmt* yy226; - struct psi_impl_arg* yy238; - struct psi_decl_abi* yy242; - struct psi_decl_arg* yy260; - struct psi_decl_struct* yy271; - bool yy273; - struct psi_decl_enum * yy279; - struct psi_plist * yy287; - struct psi_plist* yy303; - struct psi_layout yy323; + struct psi_plist* yy7; + struct psi_decl* yy17; + struct psi_impl_type* yy40; + struct psi_decl_union* yy47; + struct psi_impl_arg* yy56; + struct psi_decl_arg* yy64; + struct psi_number* yy66; + struct psi_let_callback* yy76; + struct psi_decl_enum * yy87; + struct psi_free_stmt* yy102; + struct psi_decl_enum_item* yy109; + struct psi_set_exp* yy113; + struct psi_free_exp* yy114; + struct psi_impl_var* yy123; + struct psi_num_exp* yy124; + struct psi_decl_var* yy131; + struct psi_let_func* yy133; + struct psi_decl_struct* yy137; + struct psi_let_stmt* yy138; + struct psi_assert_stmt* yy146; + struct psi_decl_abi* yy180; + struct psi_const_type* yy181; + struct psi_decl_type* yy182; + struct psi_let_exp* yy196; + struct psi_layout yy207; + struct psi_layout* yy221; + struct psi_impl_func* yy226; + struct psi_let_calloc* yy227; + bool yy247; + struct psi_return_stmt* yy258; + struct psi_token** yy282; + unsigned yy296; + struct psi_set_stmt* yy300; + struct psi_impl* yy303; + struct psi_plist * yy304; + struct psi_impl_def_val* yy319; + struct psi_set_func* yy324; + struct psi_const* yy336; } YYMINORTYPE; #ifndef YYSTACKDEPTH #define YYSTACKDEPTH 100 @@ -170,16 +171,16 @@ typedef union { #define ParseARG_FETCH struct psi_parser *P = yypParser->P #define ParseARG_STORE yypParser->P = P #define YYFALLBACK 1 -#define YYNSTATE 197 -#define YYNRULE 157 -#define YY_MAX_SHIFT 196 -#define YY_MIN_SHIFTREDUCE 328 -#define YY_MAX_SHIFTREDUCE 484 -#define YY_MIN_REDUCE 485 -#define YY_MAX_REDUCE 641 -#define YY_ERROR_ACTION 642 -#define YY_ACCEPT_ACTION 643 -#define YY_NO_ACTION 644 +#define YYNSTATE 199 +#define YYNRULE 159 +#define YY_MAX_SHIFT 198 +#define YY_MIN_SHIFTREDUCE 332 +#define YY_MAX_SHIFTREDUCE 490 +#define YY_MIN_REDUCE 491 +#define YY_MAX_REDUCE 649 +#define YY_ERROR_ACTION 650 +#define YY_ACCEPT_ACTION 651 +#define YY_NO_ACTION 652 /************* End control #defines *******************************************/ /* Define the yytestcase() macro to be a no-op if is not already defined @@ -251,280 +252,280 @@ typedef union { ** yy_default[] Default action for each state. ** *********** Begin parsing tables **********************************************/ -#define YY_ACTTAB_COUNT (1024) +#define YY_ACTTAB_COUNT (1029) static const YYACTIONTYPE yy_action[] = { - /* 0 */ 394, 409, 93, 409, 409, 409, 409, 409, 409, 409, - /* 10 */ 409, 409, 409, 93, 436, 430, 478, 21, 424, 430, - /* 20 */ 425, 427, 15, 427, 411, 27, 27, 478, 475, 428, - /* 30 */ 494, 428, 150, 426, 429, 426, 429, 494, 27, 27, - /* 40 */ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, - /* 50 */ 432, 101, 124, 439, 441, 83, 423, 438, 452, 110, - /* 60 */ 417, 417, 417, 417, 417, 405, 149, 56, 366, 422, - /* 70 */ 107, 122, 28, 376, 90, 89, 88, 147, 348, 48, - /* 80 */ 35, 133, 478, 164, 116, 390, 81, 67, 65, 64, - /* 90 */ 394, 409, 47, 409, 409, 409, 409, 409, 409, 409, - /* 100 */ 409, 409, 409, 39, 49, 11, 10, 60, 93, 437, - /* 110 */ 430, 158, 115, 141, 430, 353, 353, 353, 353, 478, - /* 120 */ 27, 27, 478, 141, 141, 141, 141, 141, 141, 141, - /* 130 */ 375, 193, 136, 27, 27, 148, 148, 148, 148, 148, - /* 140 */ 148, 148, 148, 148, 148, 83, 349, 352, 394, 409, - /* 150 */ 146, 409, 409, 409, 409, 409, 409, 409, 409, 409, - /* 160 */ 409, 149, 349, 351, 179, 181, 180, 28, 134, 122, - /* 170 */ 35, 122, 153, 109, 471, 390, 81, 67, 65, 64, - /* 180 */ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - /* 190 */ 29, 29, 29, 29, 29, 29, 29, 29, 394, 419, - /* 200 */ 419, 419, 419, 41, 124, 145, 394, 409, 416, 409, - /* 210 */ 409, 409, 409, 409, 409, 409, 409, 409, 409, 415, - /* 220 */ 382, 114, 90, 89, 88, 410, 43, 414, 34, 106, - /* 230 */ 147, 123, 344, 390, 81, 67, 65, 64, 29, 29, - /* 240 */ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - /* 250 */ 29, 374, 108, 29, 29, 419, 419, 419, 419, 419, - /* 260 */ 421, 83, 113, 397, 394, 409, 405, 409, 409, 409, - /* 270 */ 409, 409, 409, 409, 409, 409, 409, 167, 137, 112, - /* 280 */ 90, 89, 88, 390, 81, 67, 35, 147, 36, 128, - /* 290 */ 122, 390, 81, 67, 65, 64, 458, 458, 458, 458, - /* 300 */ 458, 458, 458, 458, 458, 458, 155, 379, 157, 161, - /* 310 */ 365, 169, 459, 160, 161, 410, 43, 122, 122, 76, - /* 320 */ 119, 479, 394, 409, 431, 409, 409, 409, 409, 409, - /* 330 */ 409, 409, 409, 409, 409, 376, 431, 357, 179, 181, - /* 340 */ 180, 402, 432, 100, 35, 440, 442, 80, 140, 390, - /* 350 */ 81, 67, 65, 64, 432, 99, 405, 163, 161, 144, - /* 360 */ 142, 127, 350, 122, 356, 456, 53, 463, 37, 473, - /* 370 */ 2, 418, 395, 147, 122, 122, 122, 66, 8, 451, - /* 380 */ 394, 409, 431, 409, 409, 409, 409, 409, 409, 409, - /* 390 */ 409, 409, 409, 94, 431, 401, 179, 181, 180, 343, - /* 400 */ 432, 96, 35, 122, 13, 461, 140, 390, 81, 67, - /* 410 */ 65, 64, 432, 99, 39, 49, 11, 10, 60, 470, - /* 420 */ 92, 122, 70, 465, 111, 463, 131, 7, 460, 6, - /* 430 */ 450, 147, 413, 122, 479, 83, 23, 154, 394, 409, - /* 440 */ 431, 409, 409, 409, 409, 409, 409, 409, 409, 409, - /* 450 */ 409, 68, 150, 472, 179, 181, 180, 132, 432, 97, - /* 460 */ 35, 378, 24, 360, 38, 390, 81, 67, 65, 64, - /* 470 */ 432, 101, 20, 439, 441, 479, 383, 438, 453, 122, - /* 480 */ 369, 410, 43, 382, 117, 377, 368, 105, 410, 43, - /* 490 */ 367, 122, 361, 74, 189, 379, 394, 409, 42, 409, - /* 500 */ 409, 409, 409, 409, 409, 409, 409, 409, 409, 479, - /* 510 */ 176, 177, 179, 181, 180, 398, 22, 424, 393, 400, - /* 520 */ 427, 431, 405, 390, 81, 67, 65, 64, 428, 405, - /* 530 */ 44, 391, 426, 429, 118, 196, 483, 484, 2, 432, - /* 540 */ 102, 84, 95, 190, 170, 45, 86, 335, 63, 1, - /* 550 */ 120, 82, 333, 342, 334, 121, 332, 331, 69, 68, - /* 560 */ 122, 329, 183, 19, 46, 341, 340, 192, 345, 337, - /* 570 */ 179, 181, 180, 330, 151, 39, 49, 11, 10, 60, - /* 580 */ 373, 390, 81, 67, 65, 64, 93, 372, 430, 61, - /* 590 */ 57, 126, 430, 412, 125, 475, 182, 58, 27, 27, - /* 600 */ 478, 59, 130, 31, 643, 3, 3, 178, 194, 469, - /* 610 */ 16, 27, 27, 141, 468, 79, 431, 4, 384, 32, - /* 620 */ 410, 43, 447, 141, 141, 141, 141, 141, 141, 141, - /* 630 */ 419, 419, 419, 419, 432, 98, 446, 71, 93, 462, - /* 640 */ 430, 12, 40, 448, 430, 28, 143, 475, 14, 182, - /* 650 */ 27, 27, 478, 5, 50, 122, 418, 194, 87, 85, - /* 660 */ 178, 405, 51, 27, 27, 141, 631, 26, 79, 9, - /* 670 */ 17, 385, 364, 410, 43, 141, 141, 141, 141, 141, - /* 680 */ 141, 141, 152, 363, 18, 72, 419, 419, 419, 419, - /* 690 */ 419, 156, 52, 73, 159, 479, 75, 28, 431, 162, - /* 700 */ 54, 522, 355, 354, 129, 78, 62, 168, 139, 389, - /* 710 */ 194, 87, 85, 171, 405, 172, 432, 104, 173, 29, - /* 720 */ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - /* 730 */ 29, 29, 29, 29, 29, 29, 29, 122, 174, 408, - /* 740 */ 175, 29, 29, 29, 29, 29, 29, 29, 29, 29, - /* 750 */ 29, 29, 29, 29, 29, 29, 29, 29, 29, 387, - /* 760 */ 386, 407, 406, 358, 371, 494, 184, 339, 185, 187, - /* 770 */ 186, 188, 91, 449, 29, 29, 29, 29, 29, 29, - /* 780 */ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - /* 790 */ 29, 29, 191, 93, 25, 430, 637, 30, 55, 430, - /* 800 */ 328, 195, 475, 431, 487, 27, 27, 478, 487, 487, - /* 810 */ 369, 487, 487, 487, 487, 487, 487, 487, 27, 27, - /* 820 */ 141, 432, 103, 487, 487, 487, 487, 487, 433, 182, - /* 830 */ 141, 141, 141, 141, 141, 141, 141, 487, 487, 487, - /* 840 */ 359, 166, 122, 487, 77, 93, 487, 430, 165, 487, - /* 850 */ 487, 430, 28, 410, 33, 487, 487, 27, 27, 478, - /* 860 */ 487, 487, 487, 487, 487, 196, 483, 484, 487, 487, - /* 870 */ 27, 27, 95, 190, 170, 487, 487, 487, 63, 1, - /* 880 */ 487, 487, 487, 487, 487, 487, 487, 487, 69, 68, - /* 890 */ 194, 87, 85, 335, 405, 487, 150, 487, 333, 487, - /* 900 */ 334, 487, 332, 331, 28, 150, 487, 329, 487, 19, - /* 910 */ 487, 487, 487, 487, 432, 101, 487, 439, 441, 330, - /* 920 */ 151, 438, 445, 432, 101, 487, 439, 441, 487, 487, - /* 930 */ 438, 138, 487, 487, 487, 122, 487, 487, 487, 487, - /* 940 */ 487, 487, 487, 431, 122, 487, 431, 487, 487, 487, - /* 950 */ 487, 487, 482, 487, 194, 140, 487, 487, 140, 487, - /* 960 */ 487, 432, 99, 487, 432, 99, 487, 487, 487, 487, - /* 970 */ 487, 487, 135, 487, 463, 467, 487, 463, 487, 431, - /* 980 */ 147, 487, 122, 147, 431, 122, 487, 487, 487, 487, - /* 990 */ 487, 140, 487, 487, 487, 487, 140, 432, 99, 487, - /* 1000 */ 487, 487, 432, 99, 487, 487, 487, 487, 466, 487, - /* 1010 */ 463, 487, 487, 457, 487, 463, 147, 487, 122, 487, - /* 1020 */ 487, 147, 487, 122, + /* 0 */ 398, 413, 481, 413, 413, 413, 413, 413, 413, 413, + /* 10 */ 413, 413, 413, 94, 441, 435, 378, 110, 398, 435, + /* 20 */ 380, 415, 17, 386, 116, 28, 28, 484, 414, 44, + /* 30 */ 25, 25, 40, 50, 11, 10, 61, 427, 28, 28, + /* 40 */ 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + /* 50 */ 417, 357, 357, 357, 357, 84, 124, 339, 94, 160, + /* 60 */ 117, 49, 337, 409, 338, 370, 336, 335, 151, 57, + /* 70 */ 409, 333, 484, 21, 29, 379, 91, 90, 89, 484, + /* 80 */ 352, 138, 36, 334, 153, 426, 109, 394, 82, 68, + /* 90 */ 66, 65, 398, 413, 126, 413, 413, 413, 413, 413, + /* 100 */ 413, 413, 413, 413, 413, 394, 82, 68, 152, 48, + /* 110 */ 94, 442, 435, 135, 383, 124, 435, 488, 195, 196, + /* 120 */ 149, 124, 28, 28, 484, 484, 437, 103, 485, 444, + /* 130 */ 446, 148, 139, 443, 458, 28, 28, 150, 150, 150, + /* 140 */ 150, 150, 150, 150, 150, 150, 150, 84, 124, 401, + /* 150 */ 398, 413, 420, 413, 413, 413, 413, 413, 413, 413, + /* 160 */ 413, 413, 413, 114, 380, 151, 166, 118, 181, 183, + /* 170 */ 182, 29, 124, 419, 36, 54, 155, 353, 356, 394, + /* 180 */ 82, 68, 66, 65, 30, 30, 30, 30, 30, 30, + /* 190 */ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + /* 200 */ 30, 30, 354, 124, 124, 42, 353, 355, 398, 413, + /* 210 */ 2, 413, 413, 413, 413, 413, 413, 413, 413, 413, + /* 220 */ 413, 361, 360, 111, 476, 95, 91, 90, 89, 159, + /* 230 */ 163, 347, 35, 162, 163, 81, 479, 394, 82, 68, + /* 240 */ 66, 65, 30, 30, 30, 30, 30, 30, 30, 30, + /* 250 */ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + /* 260 */ 418, 124, 124, 84, 136, 126, 398, 413, 147, 413, + /* 270 */ 413, 413, 413, 413, 413, 413, 413, 413, 413, 165, + /* 280 */ 163, 373, 125, 348, 91, 90, 89, 115, 37, 130, + /* 290 */ 36, 108, 38, 478, 149, 394, 82, 68, 66, 65, + /* 300 */ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + /* 310 */ 30, 30, 30, 149, 425, 30, 30, 423, 423, 423, + /* 320 */ 423, 77, 169, 475, 398, 413, 71, 413, 413, 413, + /* 330 */ 413, 413, 413, 413, 413, 413, 413, 171, 198, 489, + /* 340 */ 490, 406, 181, 183, 182, 96, 192, 172, 36, 129, + /* 350 */ 405, 64, 1, 394, 82, 68, 66, 65, 121, 422, + /* 360 */ 399, 70, 69, 133, 25, 25, 40, 50, 11, 10, + /* 370 */ 61, 8, 456, 423, 423, 423, 423, 423, 69, 67, + /* 380 */ 13, 466, 398, 413, 416, 413, 413, 413, 413, 413, + /* 390 */ 413, 413, 413, 413, 413, 7, 465, 134, 477, 184, + /* 400 */ 181, 183, 182, 6, 455, 93, 36, 23, 156, 39, + /* 410 */ 180, 394, 82, 68, 66, 65, 143, 22, 80, 485, + /* 420 */ 4, 388, 381, 414, 44, 382, 143, 143, 143, 143, + /* 430 */ 143, 143, 143, 24, 364, 372, 436, 84, 191, 485, + /* 440 */ 398, 413, 107, 413, 413, 413, 413, 413, 413, 413, + /* 450 */ 413, 413, 413, 43, 437, 97, 436, 371, 181, 183, + /* 460 */ 182, 196, 88, 86, 36, 409, 365, 178, 142, 394, + /* 470 */ 82, 68, 66, 65, 437, 101, 124, 383, 404, 146, + /* 480 */ 144, 421, 421, 421, 421, 421, 461, 179, 468, 397, + /* 490 */ 500, 485, 402, 395, 149, 75, 124, 500, 398, 413, + /* 500 */ 184, 413, 413, 413, 413, 413, 413, 413, 413, 413, + /* 510 */ 413, 363, 168, 120, 2, 78, 181, 183, 182, 167, + /* 520 */ 45, 85, 46, 122, 414, 34, 87, 394, 82, 68, + /* 530 */ 66, 65, 25, 25, 40, 50, 11, 10, 61, 123, + /* 540 */ 346, 463, 463, 463, 463, 463, 463, 463, 463, 463, + /* 550 */ 463, 339, 185, 83, 345, 344, 337, 464, 338, 47, + /* 560 */ 336, 335, 196, 88, 86, 333, 409, 21, 194, 377, + /* 570 */ 376, 349, 341, 62, 181, 183, 182, 334, 153, 436, + /* 580 */ 58, 127, 128, 32, 59, 394, 82, 68, 66, 65, + /* 590 */ 94, 60, 435, 132, 15, 33, 435, 437, 98, 481, + /* 600 */ 387, 184, 28, 28, 484, 414, 44, 474, 473, 651, + /* 610 */ 3, 3, 180, 196, 452, 28, 28, 143, 451, 124, + /* 620 */ 80, 467, 72, 389, 41, 414, 44, 143, 143, 143, + /* 630 */ 143, 143, 143, 143, 423, 423, 423, 423, 12, 14, + /* 640 */ 16, 453, 145, 94, 5, 435, 51, 409, 94, 435, + /* 650 */ 435, 29, 481, 422, 435, 28, 28, 484, 52, 27, + /* 660 */ 28, 28, 484, 196, 88, 86, 368, 409, 28, 28, + /* 670 */ 143, 9, 639, 28, 28, 154, 367, 152, 73, 20, + /* 680 */ 143, 143, 143, 143, 143, 143, 143, 158, 53, 74, + /* 690 */ 423, 423, 423, 423, 423, 437, 103, 161, 444, 446, + /* 700 */ 485, 76, 443, 450, 29, 164, 55, 528, 359, 29, + /* 710 */ 131, 358, 170, 63, 79, 141, 393, 124, 173, 386, + /* 720 */ 119, 174, 175, 176, 414, 44, 30, 30, 30, 30, + /* 730 */ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + /* 740 */ 30, 30, 30, 30, 177, 412, 411, 391, 30, 30, + /* 750 */ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + /* 760 */ 30, 30, 30, 30, 30, 30, 409, 390, 157, 410, + /* 770 */ 362, 500, 369, 343, 186, 188, 189, 414, 44, 187, + /* 780 */ 92, 190, 454, 30, 30, 30, 30, 30, 30, 30, + /* 790 */ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + /* 800 */ 30, 645, 375, 26, 94, 193, 435, 31, 436, 56, + /* 810 */ 435, 332, 493, 481, 436, 373, 28, 28, 484, 409, + /* 820 */ 493, 197, 493, 493, 493, 493, 437, 99, 493, 28, + /* 830 */ 28, 143, 437, 102, 493, 445, 447, 493, 493, 438, + /* 840 */ 493, 143, 143, 143, 143, 143, 143, 143, 124, 18, + /* 850 */ 428, 493, 436, 431, 124, 493, 493, 493, 493, 436, + /* 860 */ 493, 433, 432, 493, 142, 29, 430, 434, 493, 493, + /* 870 */ 437, 101, 198, 489, 490, 436, 493, 437, 104, 96, + /* 880 */ 192, 172, 470, 113, 468, 64, 1, 142, 493, 493, + /* 890 */ 149, 493, 124, 437, 101, 70, 69, 493, 152, 124, + /* 900 */ 493, 493, 493, 493, 493, 137, 493, 468, 152, 493, + /* 910 */ 493, 493, 493, 149, 493, 124, 437, 103, 493, 444, + /* 920 */ 446, 493, 436, 443, 457, 112, 437, 103, 493, 444, + /* 930 */ 446, 436, 493, 443, 140, 436, 493, 493, 124, 493, + /* 940 */ 437, 100, 493, 142, 493, 493, 436, 493, 124, 437, + /* 950 */ 101, 493, 493, 437, 106, 436, 493, 493, 142, 493, + /* 960 */ 493, 472, 124, 468, 437, 101, 493, 142, 493, 149, + /* 970 */ 493, 124, 493, 437, 101, 124, 471, 493, 468, 19, + /* 980 */ 428, 493, 493, 431, 149, 462, 124, 468, 436, 493, + /* 990 */ 493, 433, 432, 149, 493, 124, 430, 434, 429, 493, + /* 1000 */ 493, 431, 493, 493, 493, 493, 437, 105, 493, 433, + /* 1010 */ 432, 493, 493, 493, 430, 434, 493, 493, 493, 493, + /* 1020 */ 493, 493, 493, 493, 493, 493, 493, 493, 124, }; static const YYCODETYPE yy_lookahead[] = { - /* 0 */ 2, 3, 14, 5, 6, 7, 8, 9, 10, 11, - /* 10 */ 12, 13, 14, 14, 15, 16, 28, 129, 130, 20, - /* 20 */ 130, 133, 23, 133, 120, 26, 27, 28, 23, 141, - /* 30 */ 72, 141, 113, 145, 146, 145, 146, 79, 39, 40, + /* 0 */ 2, 3, 23, 5, 6, 7, 8, 9, 10, 11, + /* 10 */ 12, 13, 14, 14, 15, 16, 115, 116, 2, 20, + /* 20 */ 115, 122, 23, 117, 118, 26, 27, 28, 122, 123, + /* 30 */ 62, 63, 64, 65, 66, 67, 68, 128, 39, 40, /* 40 */ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - /* 50 */ 131, 132, 125, 134, 135, 57, 126, 138, 139, 140, - /* 60 */ 15, 16, 17, 18, 19, 161, 67, 68, 14, 126, - /* 70 */ 127, 152, 73, 113, 76, 77, 78, 150, 80, 149, - /* 80 */ 82, 14, 28, 151, 152, 87, 88, 89, 90, 91, - /* 90 */ 2, 3, 149, 5, 6, 7, 8, 9, 10, 11, - /* 100 */ 12, 13, 14, 62, 63, 64, 65, 66, 14, 15, - /* 110 */ 16, 151, 152, 41, 20, 1, 2, 3, 4, 28, - /* 120 */ 26, 27, 28, 51, 52, 53, 54, 55, 56, 57, - /* 130 */ 113, 14, 113, 39, 40, 41, 42, 43, 44, 45, - /* 140 */ 46, 47, 48, 49, 50, 57, 99, 100, 2, 3, - /* 150 */ 165, 5, 6, 7, 8, 9, 10, 11, 12, 13, - /* 160 */ 14, 67, 99, 100, 76, 77, 78, 73, 144, 152, - /* 170 */ 82, 152, 84, 147, 148, 87, 88, 89, 90, 91, - /* 180 */ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - /* 190 */ 31, 32, 33, 34, 35, 36, 37, 38, 2, 1, - /* 200 */ 2, 3, 4, 57, 125, 125, 2, 3, 149, 5, - /* 210 */ 6, 7, 8, 9, 10, 11, 12, 13, 14, 149, - /* 220 */ 115, 116, 76, 77, 78, 120, 121, 149, 82, 150, - /* 230 */ 150, 97, 98, 87, 88, 89, 90, 91, 22, 23, - /* 240 */ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - /* 250 */ 34, 113, 114, 37, 38, 57, 58, 59, 60, 61, - /* 260 */ 124, 57, 125, 5, 2, 3, 161, 5, 6, 7, - /* 270 */ 8, 9, 10, 11, 12, 13, 14, 124, 113, 113, - /* 280 */ 76, 77, 78, 87, 88, 89, 82, 150, 74, 75, - /* 290 */ 152, 87, 88, 89, 90, 91, 41, 42, 43, 44, - /* 300 */ 45, 46, 47, 48, 49, 50, 111, 14, 151, 152, - /* 310 */ 115, 104, 57, 151, 152, 120, 121, 152, 152, 57, - /* 320 */ 152, 28, 2, 3, 113, 5, 6, 7, 8, 9, - /* 330 */ 10, 11, 12, 13, 14, 113, 113, 113, 76, 77, - /* 340 */ 78, 161, 131, 132, 82, 134, 135, 89, 125, 87, - /* 350 */ 88, 89, 90, 91, 131, 132, 161, 151, 152, 136, - /* 360 */ 137, 84, 71, 152, 113, 142, 73, 144, 74, 75, - /* 370 */ 79, 94, 163, 150, 152, 152, 152, 57, 74, 75, - /* 380 */ 2, 3, 113, 5, 6, 7, 8, 9, 10, 11, - /* 390 */ 12, 13, 14, 74, 113, 161, 76, 77, 78, 80, - /* 400 */ 131, 132, 82, 152, 74, 75, 125, 87, 88, 89, - /* 410 */ 90, 91, 131, 132, 62, 63, 64, 65, 66, 71, - /* 420 */ 14, 152, 74, 142, 143, 144, 150, 74, 75, 74, - /* 430 */ 75, 150, 80, 152, 28, 57, 74, 75, 2, 3, - /* 440 */ 113, 5, 6, 7, 8, 9, 10, 11, 12, 13, - /* 450 */ 14, 93, 113, 148, 76, 77, 78, 123, 131, 132, - /* 460 */ 82, 14, 74, 75, 150, 87, 88, 89, 90, 91, - /* 470 */ 131, 132, 73, 134, 135, 28, 115, 138, 139, 152, - /* 480 */ 14, 120, 121, 115, 116, 109, 109, 152, 120, 121, - /* 490 */ 109, 152, 109, 57, 72, 14, 2, 3, 102, 5, - /* 500 */ 6, 7, 8, 9, 10, 11, 12, 13, 14, 28, - /* 510 */ 72, 119, 76, 77, 78, 164, 129, 130, 2, 2, - /* 520 */ 133, 113, 161, 87, 88, 89, 90, 91, 141, 161, - /* 530 */ 99, 162, 145, 146, 152, 69, 70, 71, 79, 131, - /* 540 */ 132, 102, 76, 77, 78, 99, 102, 96, 82, 83, - /* 550 */ 14, 57, 101, 156, 103, 14, 105, 106, 92, 93, - /* 560 */ 152, 110, 14, 112, 102, 156, 156, 85, 98, 14, - /* 570 */ 76, 77, 78, 122, 123, 62, 63, 64, 65, 66, - /* 580 */ 160, 87, 88, 89, 90, 91, 14, 160, 16, 81, - /* 590 */ 72, 94, 20, 80, 75, 23, 96, 72, 26, 27, - /* 600 */ 28, 72, 20, 73, 153, 154, 155, 107, 157, 71, - /* 610 */ 79, 39, 40, 41, 71, 115, 113, 117, 118, 73, - /* 620 */ 120, 121, 71, 51, 52, 53, 54, 55, 56, 57, - /* 630 */ 1, 2, 3, 4, 131, 132, 71, 81, 14, 75, - /* 640 */ 16, 81, 73, 75, 20, 73, 75, 23, 74, 96, - /* 650 */ 26, 27, 28, 73, 73, 152, 94, 157, 158, 159, - /* 660 */ 107, 161, 73, 39, 40, 41, 94, 73, 115, 81, - /* 670 */ 79, 118, 71, 120, 121, 51, 52, 53, 54, 55, - /* 680 */ 56, 57, 75, 71, 73, 75, 57, 58, 59, 60, - /* 690 */ 61, 14, 73, 75, 14, 28, 75, 73, 113, 14, - /* 700 */ 73, 73, 71, 71, 75, 14, 81, 20, 84, 75, - /* 710 */ 157, 158, 159, 16, 161, 74, 131, 132, 16, 21, - /* 720 */ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - /* 730 */ 32, 33, 34, 35, 36, 37, 38, 152, 73, 14, - /* 740 */ 72, 21, 22, 23, 24, 25, 26, 27, 28, 29, - /* 750 */ 30, 31, 32, 33, 34, 35, 36, 37, 38, 71, - /* 760 */ 71, 14, 14, 14, 86, 79, 16, 75, 74, 73, - /* 770 */ 16, 72, 14, 75, 21, 22, 23, 24, 25, 26, - /* 780 */ 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - /* 790 */ 37, 38, 16, 14, 74, 16, 0, 81, 79, 20, - /* 800 */ 71, 19, 23, 113, 166, 26, 27, 28, 166, 166, - /* 810 */ 14, 166, 166, 166, 166, 166, 166, 166, 39, 40, - /* 820 */ 41, 131, 132, 166, 166, 166, 166, 166, 75, 96, - /* 830 */ 51, 52, 53, 54, 55, 56, 57, 166, 166, 166, - /* 840 */ 107, 108, 152, 166, 111, 14, 166, 16, 115, 166, - /* 850 */ 166, 20, 73, 120, 121, 166, 166, 26, 27, 28, - /* 860 */ 166, 166, 166, 166, 166, 69, 70, 71, 166, 166, - /* 870 */ 39, 40, 76, 77, 78, 166, 166, 166, 82, 83, - /* 880 */ 166, 166, 166, 166, 166, 166, 166, 166, 92, 93, - /* 890 */ 157, 158, 159, 96, 161, 166, 113, 166, 101, 166, - /* 900 */ 103, 166, 105, 106, 73, 113, 166, 110, 166, 112, - /* 910 */ 166, 166, 166, 166, 131, 132, 166, 134, 135, 122, - /* 920 */ 123, 138, 139, 131, 132, 166, 134, 135, 166, 166, - /* 930 */ 138, 139, 166, 166, 166, 152, 166, 166, 166, 166, - /* 940 */ 166, 166, 166, 113, 152, 166, 113, 166, 166, 166, - /* 950 */ 166, 166, 155, 166, 157, 125, 166, 166, 125, 166, - /* 960 */ 166, 131, 132, 166, 131, 132, 166, 166, 166, 166, - /* 970 */ 166, 166, 142, 166, 144, 142, 166, 144, 166, 113, - /* 980 */ 150, 166, 152, 150, 113, 152, 166, 166, 166, 166, - /* 990 */ 166, 125, 166, 166, 166, 166, 125, 131, 132, 166, - /* 1000 */ 166, 166, 131, 132, 166, 166, 166, 166, 142, 166, - /* 1010 */ 144, 166, 166, 142, 166, 144, 150, 166, 152, 166, - /* 1020 */ 166, 150, 166, 152, + /* 50 */ 82, 1, 2, 3, 4, 57, 155, 98, 14, 154, + /* 60 */ 155, 152, 103, 164, 105, 14, 107, 108, 69, 70, + /* 70 */ 164, 112, 28, 114, 75, 115, 78, 79, 80, 28, + /* 80 */ 82, 115, 84, 124, 125, 128, 129, 89, 90, 91, + /* 90 */ 92, 93, 2, 3, 127, 5, 6, 7, 8, 9, + /* 100 */ 10, 11, 12, 13, 14, 89, 90, 91, 115, 152, + /* 110 */ 14, 15, 16, 14, 14, 155, 20, 158, 14, 160, + /* 120 */ 153, 155, 26, 27, 28, 28, 133, 134, 28, 136, + /* 130 */ 137, 168, 115, 140, 141, 39, 40, 41, 42, 43, + /* 140 */ 44, 45, 46, 47, 48, 49, 50, 57, 155, 5, + /* 150 */ 2, 3, 152, 5, 6, 7, 8, 9, 10, 11, + /* 160 */ 12, 13, 14, 115, 115, 69, 154, 155, 78, 79, + /* 170 */ 80, 75, 155, 152, 84, 75, 86, 101, 102, 89, + /* 180 */ 90, 91, 92, 93, 21, 22, 23, 24, 25, 26, + /* 190 */ 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + /* 200 */ 37, 38, 73, 155, 155, 57, 101, 102, 2, 3, + /* 210 */ 81, 5, 6, 7, 8, 9, 10, 11, 12, 13, + /* 220 */ 14, 115, 115, 150, 151, 76, 78, 79, 80, 154, + /* 230 */ 155, 82, 84, 154, 155, 91, 73, 89, 90, 91, + /* 240 */ 92, 93, 21, 22, 23, 24, 25, 26, 27, 28, + /* 250 */ 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + /* 260 */ 152, 155, 155, 57, 147, 127, 2, 3, 127, 5, + /* 270 */ 6, 7, 8, 9, 10, 11, 12, 13, 14, 154, + /* 280 */ 155, 14, 99, 100, 78, 79, 80, 127, 76, 77, + /* 290 */ 84, 153, 76, 77, 153, 89, 90, 91, 92, 93, + /* 300 */ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + /* 310 */ 32, 33, 34, 153, 126, 37, 38, 1, 2, 3, + /* 320 */ 4, 57, 126, 73, 2, 3, 76, 5, 6, 7, + /* 330 */ 8, 9, 10, 11, 12, 13, 14, 106, 71, 72, + /* 340 */ 73, 164, 78, 79, 80, 78, 79, 80, 84, 86, + /* 350 */ 164, 84, 85, 89, 90, 91, 92, 93, 155, 96, + /* 360 */ 166, 94, 95, 153, 62, 63, 64, 65, 66, 67, + /* 370 */ 68, 76, 77, 57, 58, 59, 60, 61, 95, 57, + /* 380 */ 76, 77, 2, 3, 82, 5, 6, 7, 8, 9, + /* 390 */ 10, 11, 12, 13, 14, 76, 77, 125, 151, 98, + /* 400 */ 78, 79, 80, 76, 77, 14, 84, 76, 77, 153, + /* 410 */ 109, 89, 90, 91, 92, 93, 41, 75, 117, 28, + /* 420 */ 119, 120, 111, 122, 123, 14, 51, 52, 53, 54, + /* 430 */ 55, 56, 57, 76, 77, 111, 115, 57, 74, 28, + /* 440 */ 2, 3, 155, 5, 6, 7, 8, 9, 10, 11, + /* 450 */ 12, 13, 14, 104, 133, 134, 115, 111, 78, 79, + /* 460 */ 80, 160, 161, 162, 84, 164, 111, 74, 127, 89, + /* 470 */ 90, 91, 92, 93, 133, 134, 155, 14, 2, 138, + /* 480 */ 139, 15, 16, 17, 18, 19, 145, 121, 147, 2, + /* 490 */ 74, 28, 167, 165, 153, 57, 155, 81, 2, 3, + /* 500 */ 98, 5, 6, 7, 8, 9, 10, 11, 12, 13, + /* 510 */ 14, 109, 110, 155, 81, 113, 78, 79, 80, 117, + /* 520 */ 101, 104, 101, 14, 122, 123, 104, 89, 90, 91, + /* 530 */ 92, 93, 62, 63, 64, 65, 66, 67, 68, 14, + /* 540 */ 159, 41, 42, 43, 44, 45, 46, 47, 48, 49, + /* 550 */ 50, 98, 14, 57, 159, 159, 103, 57, 105, 104, + /* 560 */ 107, 108, 160, 161, 162, 112, 164, 114, 87, 163, + /* 570 */ 163, 100, 14, 83, 78, 79, 80, 124, 125, 115, + /* 580 */ 74, 77, 96, 75, 74, 89, 90, 91, 92, 93, + /* 590 */ 14, 74, 16, 20, 81, 75, 20, 133, 134, 23, + /* 600 */ 117, 98, 26, 27, 28, 122, 123, 73, 73, 156, + /* 610 */ 157, 158, 109, 160, 73, 39, 40, 41, 73, 155, + /* 620 */ 117, 77, 83, 120, 75, 122, 123, 51, 52, 53, + /* 630 */ 54, 55, 56, 57, 1, 2, 3, 4, 83, 76, + /* 640 */ 81, 77, 77, 14, 75, 16, 75, 164, 14, 20, + /* 650 */ 16, 75, 23, 96, 20, 26, 27, 28, 75, 75, + /* 660 */ 26, 27, 28, 160, 161, 162, 73, 164, 39, 40, + /* 670 */ 41, 83, 96, 39, 40, 77, 73, 115, 77, 75, + /* 680 */ 51, 52, 53, 54, 55, 56, 57, 14, 75, 77, + /* 690 */ 57, 58, 59, 60, 61, 133, 134, 14, 136, 137, + /* 700 */ 28, 77, 140, 141, 75, 14, 75, 75, 73, 75, + /* 710 */ 77, 73, 20, 83, 14, 86, 77, 155, 16, 117, + /* 720 */ 118, 76, 16, 75, 122, 123, 21, 22, 23, 24, + /* 730 */ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + /* 740 */ 35, 36, 37, 38, 74, 14, 14, 73, 21, 22, + /* 750 */ 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + /* 760 */ 33, 34, 35, 36, 37, 38, 164, 73, 113, 14, + /* 770 */ 14, 81, 117, 77, 16, 16, 75, 122, 123, 76, + /* 780 */ 14, 74, 77, 21, 22, 23, 24, 25, 26, 27, + /* 790 */ 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + /* 800 */ 38, 0, 88, 76, 14, 16, 16, 83, 115, 81, + /* 810 */ 20, 73, 169, 23, 115, 14, 26, 27, 28, 164, + /* 820 */ 169, 19, 169, 169, 169, 169, 133, 134, 169, 39, + /* 830 */ 40, 41, 133, 134, 169, 136, 137, 169, 169, 77, + /* 840 */ 169, 51, 52, 53, 54, 55, 56, 57, 155, 131, + /* 850 */ 132, 169, 115, 135, 155, 169, 169, 169, 169, 115, + /* 860 */ 169, 143, 144, 169, 127, 75, 148, 149, 169, 169, + /* 870 */ 133, 134, 71, 72, 73, 115, 169, 133, 134, 78, + /* 880 */ 79, 80, 145, 146, 147, 84, 85, 127, 169, 169, + /* 890 */ 153, 169, 155, 133, 134, 94, 95, 169, 115, 155, + /* 900 */ 169, 169, 169, 169, 169, 145, 169, 147, 115, 169, + /* 910 */ 169, 169, 169, 153, 169, 155, 133, 134, 169, 136, + /* 920 */ 137, 169, 115, 140, 141, 142, 133, 134, 169, 136, + /* 930 */ 137, 115, 169, 140, 141, 115, 169, 169, 155, 169, + /* 940 */ 133, 134, 169, 127, 169, 169, 115, 169, 155, 133, + /* 950 */ 134, 169, 169, 133, 134, 115, 169, 169, 127, 169, + /* 960 */ 169, 145, 155, 147, 133, 134, 169, 127, 169, 153, + /* 970 */ 169, 155, 169, 133, 134, 155, 145, 169, 147, 131, + /* 980 */ 132, 169, 169, 135, 153, 145, 155, 147, 115, 169, + /* 990 */ 169, 143, 144, 153, 169, 155, 148, 149, 132, 169, + /* 1000 */ 169, 135, 169, 169, 169, 169, 133, 134, 169, 143, + /* 1010 */ 144, 169, 169, 169, 148, 149, 169, 169, 169, 169, + /* 1020 */ 169, 169, 169, 169, 169, 169, 169, 169, 155, }; -#define YY_SHIFT_USE_DFLT (1024) -#define YY_SHIFT_COUNT (196) -#define YY_SHIFT_MIN (-42) -#define YY_SHIFT_MAX (831) +#define YY_SHIFT_USE_DFLT (1029) +#define YY_SHIFT_COUNT (198) +#define YY_SHIFT_MIN (-32) +#define YY_SHIFT_MAX (802) static const short yy_shift_ofst[] = { - /* 0 */ 466, 146, 204, 796, -2, 572, -1, 624, -1, -1, - /* 10 */ -1, 779, 779, 779, 779, 94, 41, 41, 262, 320, - /* 20 */ 262, 352, 513, 88, 378, 831, 831, 831, 831, 831, - /* 30 */ 831, 629, -12, -12, 436, 494, 198, -12, -12, -12, - /* 40 */ -12, 54, 291, -12, -12, -12, 291, 5, 5, 67, - /* 50 */ 5, 5, 91, 91, 91, 117, 255, 198, 198, 198, - /* 60 */ 72, 45, 45, 114, 196, 196, 54, 258, 5, 358, - /* 70 */ 67, 5, 399, 399, 91, 399, 91, 399, 422, 438, - /* 80 */ 517, 516, 91, 91, 459, 422, 459, 422, 536, 541, - /* 90 */ 548, 422, 482, 482, 117, 555, 698, 720, 753, 159, - /* 100 */ 159, 159, 159, 159, 216, 293, 277, 214, 294, 348, - /* 110 */ 304, 330, 353, 355, 362, 406, 447, 388, 481, 447, - /* 120 */ -42, -42, 406, 319, 508, 518, 519, 497, 525, 529, - /* 130 */ 530, 582, 531, 546, 538, 543, 551, 556, 565, 564, - /* 140 */ 560, 569, 574, 568, 571, 580, 581, 562, 589, 594, - /* 150 */ 588, 591, 601, 607, 612, 611, 610, 677, 619, 618, - /* 160 */ 680, 667, 621, 685, 627, 628, 631, 632, 625, 687, - /* 170 */ 691, 634, 697, 641, 702, 665, 668, 688, 689, 725, - /* 180 */ 747, 748, 749, 686, 692, 750, 694, 754, 696, 699, - /* 190 */ 758, 678, 776, 716, 719, 729, 782, + /* 0 */ 267, 148, 206, 801, -2, 576, -1, 629, -1, -1, + /* 10 */ -1, 790, 790, 790, 790, 470, 470, 96, -32, 302, + /* 20 */ 264, 322, 264, 90, 380, 634, 634, 634, 634, 634, + /* 30 */ 634, 634, 633, 44, 44, 438, 496, 316, 44, 44, + /* 40 */ 44, 44, 51, 129, 44, 44, 44, 129, -21, -21, + /* 50 */ 99, -21, -21, 97, 97, 97, 104, 500, 316, 316, + /* 60 */ 316, 375, 466, 466, 50, 16, 16, 51, 144, -21, + /* 70 */ 283, 99, -21, 342, 342, 97, 342, 97, 342, 364, + /* 80 */ 393, 476, 487, 97, 97, 433, 364, 433, 364, 509, + /* 90 */ 525, 538, 364, 481, 481, 104, 558, 163, 705, 727, + /* 100 */ 762, 221, 221, 221, 221, 221, 278, 100, 263, 212, + /* 110 */ 216, 250, 295, 304, 319, 327, 331, 391, 411, 357, + /* 120 */ 463, 411, 416, 416, 391, 149, 490, 506, 504, 486, + /* 130 */ 510, 517, 508, 573, 513, 520, 534, 535, 541, 539, + /* 140 */ 545, 544, 555, 549, 563, 564, 565, 569, 571, 557, + /* 150 */ 583, 584, 588, 559, 593, 598, 603, 604, 601, 673, + /* 160 */ 613, 612, 683, 672, 624, 691, 631, 632, 635, 638, + /* 170 */ 630, 692, 700, 639, 702, 645, 706, 648, 670, 674, + /* 180 */ 694, 731, 732, 755, 756, 690, 696, 758, 703, 759, + /* 190 */ 701, 707, 766, 714, 789, 724, 728, 738, 802, }; -#define YY_REDUCE_USE_DFLT (-113) -#define YY_REDUCE_COUNT (95) -#define YY_REDUCE_MIN (-112) -#define YY_REDUCE_MAX (871) +#define YY_REDUCE_USE_DFLT (-102) +#define YY_REDUCE_COUNT (96) +#define YY_REDUCE_MIN (-101) +#define YY_REDUCE_MAX (873) static const short yy_reduce_ofst[] = { - /* 0 */ 451, 733, 500, 797, 553, 223, -81, 281, 339, 783, - /* 10 */ 792, 830, 833, 866, 871, 211, -112, 387, 105, 195, - /* 20 */ 368, -110, -110, 361, 361, 269, 327, 408, 503, 585, - /* 30 */ 690, -57, 138, -40, -96, -96, -70, 17, 19, 165, - /* 40 */ 166, -68, 47, 222, 224, 251, 63, -73, 79, 26, - /* 50 */ 80, 137, 157, 162, 206, 134, -15, 59, 70, 78, - /* 60 */ 24, 136, 153, 207, 180, 234, 168, 209, 276, 334, - /* 70 */ 305, 314, 376, 377, 335, 381, 168, 383, 396, 392, - /* 80 */ 351, 369, 382, 168, 431, 439, 446, 444, 397, 409, - /* 90 */ 410, 462, 420, 427, 470, 410, + /* 0 */ 453, 402, 301, -41, 503, 341, 783, 737, -7, 562, + /* 10 */ 793, 760, 816, 831, 840, 718, 848, 699, 866, 866, + /* 20 */ -94, 655, 602, 483, 483, 321, 464, 693, 744, 807, + /* 30 */ 820, 873, -43, -99, -95, -101, -101, -91, -40, -34, + /* 40 */ 17, 48, 12, 76, 49, 106, 107, 105, -33, 138, + /* 50 */ 73, 141, 160, 75, 79, 125, 183, -37, 0, 21, + /* 60 */ 108, 117, 188, 196, 231, 177, 186, 203, 194, 210, + /* 70 */ 272, 247, 256, 311, 324, 287, 346, 203, 355, 349, + /* 80 */ 366, 325, 328, 358, 203, 419, 417, 421, 422, 381, + /* 90 */ 395, 396, 455, 406, 407, 471, 396, }; static const YYACTIONTYPE yy_default[] = { - /* 0 */ 642, 642, 642, 642, 642, 611, 642, 631, 642, 642, - /* 10 */ 642, 631, 631, 631, 631, 642, 642, 642, 537, 642, - /* 20 */ 537, 642, 642, 642, 642, 642, 642, 642, 642, 642, - /* 30 */ 642, 642, 642, 633, 642, 642, 642, 642, 642, 642, - /* 40 */ 642, 633, 642, 642, 642, 642, 642, 631, 631, 642, - /* 50 */ 631, 631, 633, 633, 633, 642, 642, 642, 642, 642, - /* 60 */ 642, 642, 642, 642, 561, 560, 642, 553, 631, 642, - /* 70 */ 642, 631, 642, 642, 642, 642, 538, 642, 495, 545, - /* 80 */ 556, 549, 642, 642, 642, 495, 642, 495, 493, 493, - /* 90 */ 493, 495, 527, 527, 642, 493, 642, 642, 642, 621, - /* 100 */ 601, 600, 592, 503, 591, 642, 642, 642, 642, 642, - /* 110 */ 642, 642, 642, 642, 642, 634, 634, 642, 642, 642, - /* 120 */ 564, 563, 642, 642, 577, 642, 642, 642, 642, 642, - /* 130 */ 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, - /* 140 */ 642, 642, 612, 642, 642, 642, 642, 642, 642, 642, - /* 150 */ 588, 642, 642, 642, 642, 642, 642, 642, 642, 642, - /* 160 */ 642, 634, 642, 642, 642, 519, 642, 642, 642, 642, - /* 170 */ 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, - /* 180 */ 642, 642, 642, 565, 642, 642, 642, 642, 642, 642, - /* 190 */ 642, 642, 642, 504, 642, 642, 642, + /* 0 */ 650, 650, 650, 650, 650, 618, 650, 639, 650, 650, + /* 10 */ 650, 639, 639, 639, 639, 650, 650, 650, 650, 650, + /* 20 */ 543, 650, 543, 650, 650, 650, 650, 650, 650, 650, + /* 30 */ 650, 650, 650, 650, 641, 650, 650, 650, 650, 650, + /* 40 */ 650, 650, 641, 650, 650, 650, 650, 650, 639, 639, + /* 50 */ 650, 639, 639, 641, 641, 641, 650, 650, 650, 650, + /* 60 */ 650, 650, 650, 650, 650, 567, 566, 650, 559, 639, + /* 70 */ 650, 650, 639, 650, 650, 650, 650, 544, 650, 501, + /* 80 */ 551, 562, 555, 650, 650, 650, 501, 650, 501, 499, + /* 90 */ 499, 499, 501, 533, 533, 650, 499, 650, 650, 650, + /* 100 */ 650, 628, 608, 607, 599, 509, 598, 650, 650, 650, + /* 110 */ 650, 650, 650, 650, 650, 650, 650, 642, 642, 650, + /* 120 */ 650, 650, 570, 569, 650, 650, 583, 650, 650, 650, + /* 130 */ 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, + /* 140 */ 650, 650, 650, 650, 619, 650, 650, 650, 650, 650, + /* 150 */ 650, 650, 595, 650, 650, 650, 650, 650, 650, 650, + /* 160 */ 650, 650, 650, 642, 650, 650, 650, 525, 650, 650, + /* 170 */ 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, + /* 180 */ 650, 650, 650, 650, 650, 571, 650, 650, 650, 650, + /* 190 */ 650, 650, 650, 650, 650, 510, 650, 650, 650, }; /********** End of lemon-generated parsing tables *****************************/ @@ -606,6 +607,8 @@ static const YYCODETYPE yyFallback[] = { 0, /* ARRAY => nothing */ 0, /* OBJECT => nothing */ 0, /* CALLABLE => nothing */ + 0, /* PRE_ASSERT => nothing */ + 0, /* POST_ASSERT => nothing */ 14, /* TEMP => NAME */ 14, /* FREE => NAME */ 14, /* SET => NAME */ @@ -714,33 +717,34 @@ static const char *const yyTokenName[] = { "INTVAL", "BOOLVAL", "COUNT", "TO_OBJECT", "TO_ARRAY", "TO_STRING", "TO_INT", "TO_FLOAT", "TO_BOOL", "VOID", "MIXED", "ARRAY", - "OBJECT", "CALLABLE", "TEMP", "FREE", - "SET", "LET", "RETURN", "CALLOC", - "CALLBACK", "LIB", "EOF", "EOS", - "COLON", "LPAREN", "COMMA", "RPAREN", - "ENUM", "STRUCT", "UNION", "LBRACE", - "RBRACE", "EQUALS", "CONST", "TYPEDEF", - "ELLIPSIS", "LBRACKET", "RBRACKET", "CHAR", - "SHORT", "LONG", "UNSIGNED", "SIGNED", - "STATIC", "FUNCTION", "DOLLAR_NAME", "error", - "decl_enum", "decl_enum_items", "decl_enum_item", "decl_struct_args_block", - "decl_struct_args", "decl_struct", "align_and_size", "decl_union", - "const_type", "constant", "decl_typedef", "decl_typedef_body_ex", - "decl_typedef_body", "decl_typedef_body_fn_args", "decl", "decl_func", - "decl_abi", "decl_var", "decl_vars", "decl_arg", - "decl_args", "struct_args", "struct_arg", "decl_layout", - "decl_type", "const_decl_type", "impl", "impl_func", - "impl_def_val", "impl_var", "impl_arg", "impl_args", - "impl_vararg", "impl_stmts", "impl_stmt", "number", - "num_exp", "let_stmt", "let_calloc", "let_func", - "callback_arg_list", "callback_args", "let_callback", "let_exp", - "let_exps", "set_stmt", "set_exp", "set_exps", - "set_func", "return_stmt", "free_stmt", "free_exps", - "free_exp", "impl_type", "reference", "indirection", - "pointers", "file", "blocks", "block", - "optional_name", "enum_name", "struct_name", "union_name", - "decl_var_array_size", "decl_scalar_type", "decl_scalar_type_short", "decl_scalar_type_long", - "decl_scalar_type_long_long", "callback_rval", + "OBJECT", "CALLABLE", "PRE_ASSERT", "POST_ASSERT", + "TEMP", "FREE", "SET", "LET", + "RETURN", "CALLOC", "CALLBACK", "LIB", + "EOF", "EOS", "COLON", "LPAREN", + "COMMA", "RPAREN", "ENUM", "STRUCT", + "UNION", "LBRACE", "RBRACE", "EQUALS", + "CONST", "TYPEDEF", "ELLIPSIS", "LBRACKET", + "RBRACKET", "CHAR", "SHORT", "LONG", + "UNSIGNED", "SIGNED", "STATIC", "FUNCTION", + "DOLLAR_NAME", "error", "decl_enum", "decl_enum_items", + "decl_enum_item", "decl_struct_args_block", "decl_struct_args", "decl_struct", + "align_and_size", "decl_union", "const_type", "constant", + "decl_typedef", "decl_typedef_body_ex", "decl_typedef_body", "decl_typedef_body_fn_args", + "decl", "decl_func", "decl_abi", "decl_var", + "decl_vars", "decl_arg", "decl_args", "struct_args", + "struct_arg", "decl_layout", "decl_type", "const_decl_type", + "impl", "impl_func", "impl_def_val", "impl_var", + "impl_arg", "impl_args", "impl_vararg", "impl_stmts", + "impl_stmt", "number", "num_exp", "let_stmt", + "let_calloc", "let_func", "callback_arg_list", "callback_args", + "let_callback", "let_exp", "let_exps", "assert_stmt", + "set_stmt", "set_exp", "set_exps", "set_func", + "return_stmt", "free_stmt", "free_exps", "free_exp", + "impl_type", "reference", "indirection", "pointers", + "file", "blocks", "block", "optional_name", + "enum_name", "struct_name", "union_name", "decl_var_array_size", + "decl_scalar_type", "decl_scalar_type_short", "decl_scalar_type_long", "decl_scalar_type_long_long", + "callback_rval", }; #endif /* NDEBUG */ @@ -849,62 +853,64 @@ static const char *const yyRuleName[] = { /* 98 */ "impl_stmt ::= return_stmt", /* 99 */ "impl_stmt ::= let_stmt", /* 100 */ "impl_stmt ::= set_stmt", - /* 101 */ "impl_stmt ::= free_stmt", - /* 102 */ "number ::= NUMBER|NSNAME", - /* 103 */ "number ::= decl_var", - /* 104 */ "num_exp ::= number", - /* 105 */ "num_exp ::= LPAREN num_exp RPAREN", - /* 106 */ "num_exp ::= num_exp PIPE|CARET|AMPERSAND|LSHIFT|RSHIFT|PLUS|MINUS|ASTERISK|SLASH|MODULO|RCHEVR|LCHEVR|CMP_GE|CMP_LE|OR|AND|CMP_EQ|CMP_NE num_exp", - /* 107 */ "num_exp ::= TILDE|NOT|PLUS|MINUS num_exp", - /* 108 */ "let_exp ::= NULL", - /* 109 */ "let_exp ::= AMPERSAND NULL", - /* 110 */ "let_exp ::= let_callback", - /* 111 */ "let_exp ::= let_calloc", - /* 112 */ "let_exp ::= AMPERSAND let_calloc", - /* 113 */ "let_exp ::= let_func", - /* 114 */ "let_exp ::= AMPERSAND let_func", - /* 115 */ "let_exp ::= num_exp", - /* 116 */ "let_exp ::= AMPERSAND num_exp", - /* 117 */ "let_exp ::= decl_var EQUALS let_exp", - /* 118 */ "let_stmt ::= LET let_exp EOS", - /* 119 */ "let_stmt ::= TEMP decl_var EQUALS reference decl_var EOS", - /* 120 */ "let_callback ::= CALLBACK callback_rval LPAREN impl_var LPAREN callback_arg_list RPAREN RPAREN", - /* 121 */ "let_calloc ::= CALLOC LPAREN num_exp COMMA num_exp RPAREN", - /* 122 */ "let_func ::= ZVAL|OBJVAL|ARRVAL|PATHVAL|STRLEN|STRVAL|FLOATVAL|INTVAL|BOOLVAL|COUNT LPAREN impl_var RPAREN", - /* 123 */ "let_func ::= ZVAL|OBJVAL|ARRVAL|PATHVAL|STRLEN|STRVAL|FLOATVAL|INTVAL|BOOLVAL|COUNT LPAREN impl_var COMMA let_exps RPAREN", - /* 124 */ "let_exps ::= let_exp", - /* 125 */ "let_exps ::= let_exps COMMA let_exp", - /* 126 */ "callback_arg_list ::=", - /* 127 */ "callback_arg_list ::= callback_args", - /* 128 */ "callback_args ::= set_exp", - /* 129 */ "callback_args ::= callback_args COMMA set_exp", - /* 130 */ "callback_rval ::= ZVAL|OBJVAL|ARRVAL|PATHVAL|STRLEN|STRVAL|FLOATVAL|INTVAL|BOOLVAL|COUNT", - /* 131 */ "callback_rval ::= VOID", - /* 132 */ "set_func ::= TO_OBJECT|TO_ARRAY|TO_STRING|TO_INT|TO_FLOAT|TO_BOOL|ZVAL|VOID LPAREN decl_var RPAREN", - /* 133 */ "set_func ::= TO_OBJECT|TO_ARRAY|TO_STRING|TO_INT|TO_FLOAT|TO_BOOL|ZVAL|VOID LPAREN decl_var COMMA set_exps RPAREN", - /* 134 */ "set_func ::= TO_OBJECT|TO_ARRAY|TO_STRING|TO_INT|TO_FLOAT|TO_BOOL|ZVAL|VOID LPAREN decl_var COMMA ELLIPSIS RPAREN", - /* 135 */ "set_exp ::= set_func", - /* 136 */ "set_exp ::= num_exp", - /* 137 */ "set_exps ::= set_exp", - /* 138 */ "set_exps ::= set_exps COMMA set_exp", - /* 139 */ "set_exp ::= impl_var EQUALS set_exp", - /* 140 */ "set_stmt ::= SET set_exp EOS", - /* 141 */ "return_stmt ::= RETURN set_func EOS", - /* 142 */ "free_stmt ::= FREE free_exps EOS", - /* 143 */ "free_exps ::= free_exp", - /* 144 */ "free_exps ::= free_exps COMMA free_exp", - /* 145 */ "free_exp ::= NAME LPAREN decl_vars RPAREN", - /* 146 */ "reference ::=", - /* 147 */ "reference ::= AMPERSAND", - /* 148 */ "indirection ::=", - /* 149 */ "indirection ::= pointers", - /* 150 */ "pointers ::= ASTERISK", - /* 151 */ "pointers ::= pointers ASTERISK", - /* 152 */ "file ::= blocks", - /* 153 */ "blocks ::= block", - /* 154 */ "blocks ::= blocks block", - /* 155 */ "block ::= EOF", - /* 156 */ "block ::= EOS", + /* 101 */ "impl_stmt ::= assert_stmt", + /* 102 */ "impl_stmt ::= free_stmt", + /* 103 */ "number ::= NUMBER|NSNAME", + /* 104 */ "number ::= decl_var", + /* 105 */ "num_exp ::= number", + /* 106 */ "num_exp ::= LPAREN num_exp RPAREN", + /* 107 */ "num_exp ::= num_exp PIPE|CARET|AMPERSAND|LSHIFT|RSHIFT|PLUS|MINUS|ASTERISK|SLASH|MODULO|RCHEVR|LCHEVR|CMP_GE|CMP_LE|OR|AND|CMP_EQ|CMP_NE num_exp", + /* 108 */ "num_exp ::= TILDE|NOT|PLUS|MINUS num_exp", + /* 109 */ "let_exp ::= NULL", + /* 110 */ "let_exp ::= AMPERSAND NULL", + /* 111 */ "let_exp ::= let_callback", + /* 112 */ "let_exp ::= let_calloc", + /* 113 */ "let_exp ::= AMPERSAND let_calloc", + /* 114 */ "let_exp ::= let_func", + /* 115 */ "let_exp ::= AMPERSAND let_func", + /* 116 */ "let_exp ::= num_exp", + /* 117 */ "let_exp ::= AMPERSAND num_exp", + /* 118 */ "let_exp ::= decl_var EQUALS let_exp", + /* 119 */ "let_stmt ::= LET let_exp EOS", + /* 120 */ "let_stmt ::= TEMP decl_var EQUALS reference decl_var EOS", + /* 121 */ "let_callback ::= CALLBACK callback_rval LPAREN impl_var LPAREN callback_arg_list RPAREN RPAREN", + /* 122 */ "let_calloc ::= CALLOC LPAREN num_exp COMMA num_exp RPAREN", + /* 123 */ "let_func ::= ZVAL|OBJVAL|ARRVAL|PATHVAL|STRLEN|STRVAL|FLOATVAL|INTVAL|BOOLVAL|COUNT LPAREN impl_var RPAREN", + /* 124 */ "let_func ::= ZVAL|OBJVAL|ARRVAL|PATHVAL|STRLEN|STRVAL|FLOATVAL|INTVAL|BOOLVAL|COUNT LPAREN impl_var COMMA let_exps RPAREN", + /* 125 */ "let_exps ::= let_exp", + /* 126 */ "let_exps ::= let_exps COMMA let_exp", + /* 127 */ "callback_arg_list ::=", + /* 128 */ "callback_arg_list ::= callback_args", + /* 129 */ "callback_args ::= set_exp", + /* 130 */ "callback_args ::= callback_args COMMA set_exp", + /* 131 */ "callback_rval ::= ZVAL|OBJVAL|ARRVAL|PATHVAL|STRLEN|STRVAL|FLOATVAL|INTVAL|BOOLVAL|COUNT", + /* 132 */ "callback_rval ::= VOID", + /* 133 */ "set_func ::= TO_OBJECT|TO_ARRAY|TO_STRING|TO_INT|TO_FLOAT|TO_BOOL|ZVAL|VOID LPAREN decl_var RPAREN", + /* 134 */ "set_func ::= TO_OBJECT|TO_ARRAY|TO_STRING|TO_INT|TO_FLOAT|TO_BOOL|ZVAL|VOID LPAREN decl_var COMMA set_exps RPAREN", + /* 135 */ "set_func ::= TO_OBJECT|TO_ARRAY|TO_STRING|TO_INT|TO_FLOAT|TO_BOOL|ZVAL|VOID LPAREN decl_var COMMA ELLIPSIS RPAREN", + /* 136 */ "set_exp ::= set_func", + /* 137 */ "set_exp ::= num_exp", + /* 138 */ "set_exps ::= set_exp", + /* 139 */ "set_exps ::= set_exps COMMA set_exp", + /* 140 */ "set_exp ::= impl_var EQUALS set_exp", + /* 141 */ "set_stmt ::= SET set_exp EOS", + /* 142 */ "return_stmt ::= RETURN set_func EOS", + /* 143 */ "free_stmt ::= FREE free_exps EOS", + /* 144 */ "free_exps ::= free_exp", + /* 145 */ "free_exps ::= free_exps COMMA free_exp", + /* 146 */ "free_exp ::= NAME LPAREN decl_vars RPAREN", + /* 147 */ "assert_stmt ::= PRE_ASSERT|POST_ASSERT num_exp EOS", + /* 148 */ "reference ::=", + /* 149 */ "reference ::= AMPERSAND", + /* 150 */ "indirection ::=", + /* 151 */ "indirection ::= pointers", + /* 152 */ "pointers ::= ASTERISK", + /* 153 */ "pointers ::= pointers ASTERISK", + /* 154 */ "file ::= blocks", + /* 155 */ "blocks ::= block", + /* 156 */ "blocks ::= blocks block", + /* 157 */ "block ::= EOF", + /* 158 */ "block ::= EOS", }; #endif /* NDEBUG */ @@ -1084,325 +1090,334 @@ static void yy_destructor( case 59: /* ARRAY */ case 60: /* OBJECT */ case 61: /* CALLABLE */ - case 62: /* TEMP */ - case 63: /* FREE */ - case 64: /* SET */ - case 65: /* LET */ - case 66: /* RETURN */ - case 67: /* CALLOC */ - case 68: /* CALLBACK */ - case 69: /* LIB */ - case 70: /* EOF */ - case 71: /* EOS */ - case 72: /* COLON */ - case 73: /* LPAREN */ - case 74: /* COMMA */ - case 75: /* RPAREN */ - case 76: /* ENUM */ - case 77: /* STRUCT */ - case 78: /* UNION */ - case 79: /* LBRACE */ - case 80: /* RBRACE */ - case 81: /* EQUALS */ - case 82: /* CONST */ - case 83: /* TYPEDEF */ - case 84: /* ELLIPSIS */ - case 85: /* LBRACKET */ - case 86: /* RBRACKET */ - case 87: /* CHAR */ - case 88: /* SHORT */ - case 89: /* LONG */ - case 90: /* UNSIGNED */ - case 91: /* SIGNED */ - case 92: /* STATIC */ - case 93: /* FUNCTION */ - case 94: /* DOLLAR_NAME */ + case 62: /* PRE_ASSERT */ + case 63: /* POST_ASSERT */ + case 64: /* TEMP */ + case 65: /* FREE */ + case 66: /* SET */ + case 67: /* LET */ + case 68: /* RETURN */ + case 69: /* CALLOC */ + case 70: /* CALLBACK */ + case 71: /* LIB */ + case 72: /* EOF */ + case 73: /* EOS */ + case 74: /* COLON */ + case 75: /* LPAREN */ + case 76: /* COMMA */ + case 77: /* RPAREN */ + case 78: /* ENUM */ + case 79: /* STRUCT */ + case 80: /* UNION */ + case 81: /* LBRACE */ + case 82: /* RBRACE */ + case 83: /* EQUALS */ + case 84: /* CONST */ + case 85: /* TYPEDEF */ + case 86: /* ELLIPSIS */ + case 87: /* LBRACKET */ + case 88: /* RBRACKET */ + case 89: /* CHAR */ + case 90: /* SHORT */ + case 91: /* LONG */ + case 92: /* UNSIGNED */ + case 93: /* SIGNED */ + case 94: /* STATIC */ + case 95: /* FUNCTION */ + case 96: /* DOLLAR_NAME */ { #line 37 "src/parser_proc.y" free((yypminor->yy0)); -#line 1124 "src/parser_proc.c" +#line 1132 "src/parser_proc.c" } break; /* Default NON-TERMINAL Destructor */ - case 95: /* error */ - case 102: /* align_and_size */ - case 150: /* reference */ - case 151: /* indirection */ - case 152: /* pointers */ - case 153: /* file */ - case 154: /* blocks */ - case 155: /* block */ - case 156: /* optional_name */ - case 157: /* enum_name */ - case 158: /* struct_name */ - case 159: /* union_name */ - case 160: /* decl_var_array_size */ - case 161: /* decl_scalar_type */ - case 162: /* decl_scalar_type_short */ - case 163: /* decl_scalar_type_long */ - case 164: /* decl_scalar_type_long_long */ - case 165: /* callback_rval */ + case 97: /* error */ + case 104: /* align_and_size */ + case 153: /* reference */ + case 154: /* indirection */ + case 155: /* pointers */ + case 156: /* file */ + case 157: /* blocks */ + case 158: /* block */ + case 159: /* optional_name */ + case 160: /* enum_name */ + case 161: /* struct_name */ + case 162: /* union_name */ + case 163: /* decl_var_array_size */ + case 164: /* decl_scalar_type */ + case 165: /* decl_scalar_type_short */ + case 166: /* decl_scalar_type_long */ + case 167: /* decl_scalar_type_long_long */ + case 168: /* callback_rval */ { #line 38 "src/parser_proc.y" (void)P; -#line 1149 "src/parser_proc.c" +#line 1157 "src/parser_proc.c" } break; - case 96: /* decl_enum */ + case 98: /* decl_enum */ { -#line 63 "src/parser_proc.y" -psi_decl_enum_free(&(yypminor->yy279)); -#line 1156 "src/parser_proc.c" +#line 64 "src/parser_proc.y" +psi_decl_enum_free(&(yypminor->yy87)); +#line 1164 "src/parser_proc.c" } break; - case 97: /* decl_enum_items */ - case 99: /* decl_struct_args_block */ - case 100: /* decl_struct_args */ - case 109: /* decl_typedef_body_fn_args */ - case 114: /* decl_vars */ - case 116: /* decl_args */ - case 117: /* struct_args */ - case 127: /* impl_args */ - case 129: /* impl_stmts */ - case 140: /* let_exps */ - case 143: /* set_exps */ - case 147: /* free_exps */ -{ -#line 65 "src/parser_proc.y" -psi_plist_free((yypminor->yy303)); -#line 1174 "src/parser_proc.c" + case 99: /* decl_enum_items */ + case 101: /* decl_struct_args_block */ + case 102: /* decl_struct_args */ + case 111: /* decl_typedef_body_fn_args */ + case 116: /* decl_vars */ + case 118: /* decl_args */ + case 119: /* struct_args */ + case 129: /* impl_args */ + case 131: /* impl_stmts */ + case 142: /* let_exps */ + case 146: /* set_exps */ + case 150: /* free_exps */ +{ +#line 66 "src/parser_proc.y" +psi_plist_free((yypminor->yy7)); +#line 1182 "src/parser_proc.c" } break; - case 98: /* decl_enum_item */ + case 100: /* decl_enum_item */ { -#line 67 "src/parser_proc.y" -psi_decl_enum_item_free(&(yypminor->yy69)); -#line 1181 "src/parser_proc.c" +#line 68 "src/parser_proc.y" +psi_decl_enum_item_free(&(yypminor->yy109)); +#line 1189 "src/parser_proc.c" } break; - case 101: /* decl_struct */ + case 103: /* decl_struct */ { -#line 73 "src/parser_proc.y" -psi_decl_struct_free(&(yypminor->yy271)); -#line 1188 "src/parser_proc.c" +#line 74 "src/parser_proc.y" +psi_decl_struct_free(&(yypminor->yy137)); +#line 1196 "src/parser_proc.c" } break; - case 103: /* decl_union */ + case 105: /* decl_union */ { -#line 76 "src/parser_proc.y" -psi_decl_union_free(&(yypminor->yy19)); -#line 1195 "src/parser_proc.c" +#line 77 "src/parser_proc.y" +psi_decl_union_free(&(yypminor->yy47)); +#line 1203 "src/parser_proc.c" } break; - case 104: /* const_type */ + case 106: /* const_type */ { -#line 78 "src/parser_proc.y" -psi_const_type_free(&(yypminor->yy7)); -#line 1202 "src/parser_proc.c" +#line 79 "src/parser_proc.y" +psi_const_type_free(&(yypminor->yy181)); +#line 1210 "src/parser_proc.c" } break; - case 105: /* constant */ + case 107: /* constant */ { -#line 80 "src/parser_proc.y" -psi_const_free(&(yypminor->yy106)); -#line 1209 "src/parser_proc.c" +#line 81 "src/parser_proc.y" +psi_const_free(&(yypminor->yy336)); +#line 1217 "src/parser_proc.c" } break; - case 106: /* decl_typedef */ - case 107: /* decl_typedef_body_ex */ - case 108: /* decl_typedef_body */ - case 111: /* decl_func */ - case 115: /* decl_arg */ - case 118: /* struct_arg */ + case 108: /* decl_typedef */ + case 109: /* decl_typedef_body_ex */ + case 110: /* decl_typedef_body */ + case 113: /* decl_func */ + case 117: /* decl_arg */ + case 120: /* struct_arg */ { -#line 82 "src/parser_proc.y" -psi_decl_arg_free(&(yypminor->yy260)); -#line 1221 "src/parser_proc.c" +#line 83 "src/parser_proc.y" +psi_decl_arg_free(&(yypminor->yy64)); +#line 1229 "src/parser_proc.c" } break; - case 110: /* decl */ + case 112: /* decl */ { -#line 90 "src/parser_proc.y" -psi_decl_free(&(yypminor->yy71)); -#line 1228 "src/parser_proc.c" +#line 91 "src/parser_proc.y" +psi_decl_free(&(yypminor->yy17)); +#line 1236 "src/parser_proc.c" } break; - case 112: /* decl_abi */ + case 114: /* decl_abi */ { -#line 94 "src/parser_proc.y" -psi_decl_abi_free(&(yypminor->yy242)); -#line 1235 "src/parser_proc.c" +#line 95 "src/parser_proc.y" +psi_decl_abi_free(&(yypminor->yy180)); +#line 1243 "src/parser_proc.c" } break; - case 113: /* decl_var */ + case 115: /* decl_var */ { -#line 96 "src/parser_proc.y" -psi_decl_var_free(&(yypminor->yy207)); -#line 1242 "src/parser_proc.c" +#line 97 "src/parser_proc.y" +psi_decl_var_free(&(yypminor->yy131)); +#line 1250 "src/parser_proc.c" } break; - case 119: /* decl_layout */ + case 121: /* decl_layout */ { -#line 108 "src/parser_proc.y" -psi_layout_free(&(yypminor->yy81)); -#line 1249 "src/parser_proc.c" -} - break; - case 120: /* decl_type */ - case 121: /* const_decl_type */ -{ -#line 110 "src/parser_proc.y" -psi_decl_type_free(&(yypminor->yy152)); +#line 109 "src/parser_proc.y" +psi_layout_free(&(yypminor->yy221)); #line 1257 "src/parser_proc.c" } break; - case 122: /* impl */ + case 122: /* decl_type */ + case 123: /* const_decl_type */ { -#line 114 "src/parser_proc.y" -psi_impl_free(&(yypminor->yy49)); -#line 1264 "src/parser_proc.c" +#line 111 "src/parser_proc.y" +psi_decl_type_free(&(yypminor->yy182)); +#line 1265 "src/parser_proc.c" } break; - case 123: /* impl_func */ + case 124: /* impl */ { -#line 116 "src/parser_proc.y" -psi_impl_func_free(&(yypminor->yy120)); -#line 1271 "src/parser_proc.c" +#line 115 "src/parser_proc.y" +psi_impl_free(&(yypminor->yy303)); +#line 1272 "src/parser_proc.c" } break; - case 124: /* impl_def_val */ + case 125: /* impl_func */ { -#line 118 "src/parser_proc.y" -psi_impl_def_val_free(&(yypminor->yy21)); -#line 1278 "src/parser_proc.c" +#line 117 "src/parser_proc.y" +psi_impl_func_free(&(yypminor->yy226)); +#line 1279 "src/parser_proc.c" } break; - case 125: /* impl_var */ + case 126: /* impl_def_val */ { -#line 120 "src/parser_proc.y" -psi_impl_var_free(&(yypminor->yy185)); -#line 1285 "src/parser_proc.c" +#line 119 "src/parser_proc.y" +psi_impl_def_val_free(&(yypminor->yy319)); +#line 1286 "src/parser_proc.c" } break; - case 126: /* impl_arg */ - case 128: /* impl_vararg */ + case 127: /* impl_var */ { -#line 122 "src/parser_proc.y" -psi_impl_arg_free(&(yypminor->yy238)); +#line 121 "src/parser_proc.y" +psi_impl_var_free(&(yypminor->yy123)); #line 1293 "src/parser_proc.c" } break; - case 130: /* impl_stmt */ + case 128: /* impl_arg */ + case 130: /* impl_vararg */ { -#line 130 "src/parser_proc.y" -psi_impl_stmt_free(&(yypminor->yy38)); -#line 1300 "src/parser_proc.c" +#line 123 "src/parser_proc.y" +psi_impl_arg_free(&(yypminor->yy56)); +#line 1301 "src/parser_proc.c" } break; - case 131: /* number */ + case 132: /* impl_stmt */ { -#line 132 "src/parser_proc.y" -psi_number_free(&(yypminor->yy160)); -#line 1307 "src/parser_proc.c" +#line 131 "src/parser_proc.y" +psi_impl_stmt_free(&(yypminor->yy282)); +#line 1308 "src/parser_proc.c" } break; - case 132: /* num_exp */ + case 133: /* number */ { -#line 134 "src/parser_proc.y" -psi_num_exp_free(&(yypminor->yy39)); -#line 1314 "src/parser_proc.c" +#line 133 "src/parser_proc.y" +psi_number_free(&(yypminor->yy66)); +#line 1315 "src/parser_proc.c" } break; - case 133: /* let_stmt */ + case 134: /* num_exp */ { -#line 136 "src/parser_proc.y" -psi_let_stmt_free(&(yypminor->yy139)); -#line 1321 "src/parser_proc.c" +#line 135 "src/parser_proc.y" +psi_num_exp_free(&(yypminor->yy124)); +#line 1322 "src/parser_proc.c" } break; - case 134: /* let_calloc */ + case 135: /* let_stmt */ { -#line 138 "src/parser_proc.y" -psi_let_calloc_free(&(yypminor->yy17)); -#line 1328 "src/parser_proc.c" +#line 137 "src/parser_proc.y" +psi_let_stmt_free(&(yypminor->yy138)); +#line 1329 "src/parser_proc.c" } break; - case 135: /* let_func */ + case 136: /* let_calloc */ { -#line 140 "src/parser_proc.y" -psi_let_func_free(&(yypminor->yy72)); -#line 1335 "src/parser_proc.c" +#line 139 "src/parser_proc.y" +psi_let_calloc_free(&(yypminor->yy227)); +#line 1336 "src/parser_proc.c" } break; - case 136: /* callback_arg_list */ - case 137: /* callback_args */ + case 137: /* let_func */ { -#line 142 "src/parser_proc.y" -psi_plist_free((yypminor->yy287)); +#line 141 "src/parser_proc.y" +psi_let_func_free(&(yypminor->yy133)); #line 1343 "src/parser_proc.c" } break; - case 138: /* let_callback */ + case 138: /* callback_arg_list */ + case 139: /* callback_args */ { -#line 146 "src/parser_proc.y" -psi_let_callback_free(&(yypminor->yy164)); -#line 1350 "src/parser_proc.c" +#line 143 "src/parser_proc.y" +psi_plist_free((yypminor->yy304)); +#line 1351 "src/parser_proc.c" } break; - case 139: /* let_exp */ + case 140: /* let_callback */ { -#line 148 "src/parser_proc.y" -psi_let_exp_free(&(yypminor->yy144)); -#line 1357 "src/parser_proc.c" +#line 147 "src/parser_proc.y" +psi_let_callback_free(&(yypminor->yy76)); +#line 1358 "src/parser_proc.c" } break; - case 141: /* set_stmt */ + case 141: /* let_exp */ { -#line 152 "src/parser_proc.y" -psi_set_stmt_free(&(yypminor->yy226)); -#line 1364 "src/parser_proc.c" +#line 149 "src/parser_proc.y" +psi_let_exp_free(&(yypminor->yy196)); +#line 1365 "src/parser_proc.c" } break; - case 142: /* set_exp */ + case 143: /* assert_stmt */ { -#line 154 "src/parser_proc.y" -psi_set_exp_free(&(yypminor->yy67)); -#line 1371 "src/parser_proc.c" +#line 153 "src/parser_proc.y" +psi_assert_stmt_free(&(yypminor->yy146)); +#line 1372 "src/parser_proc.c" } break; - case 144: /* set_func */ + case 144: /* set_stmt */ { -#line 158 "src/parser_proc.y" -psi_set_func_free(&(yypminor->yy78)); -#line 1378 "src/parser_proc.c" +#line 155 "src/parser_proc.y" +psi_set_stmt_free(&(yypminor->yy300)); +#line 1379 "src/parser_proc.c" } break; - case 145: /* return_stmt */ + case 145: /* set_exp */ { -#line 160 "src/parser_proc.y" -psi_return_stmt_free(&(yypminor->yy130)); -#line 1385 "src/parser_proc.c" +#line 157 "src/parser_proc.y" +psi_set_exp_free(&(yypminor->yy113)); +#line 1386 "src/parser_proc.c" } break; - case 146: /* free_stmt */ + case 147: /* set_func */ { -#line 162 "src/parser_proc.y" -psi_free_stmt_free(&(yypminor->yy76)); -#line 1392 "src/parser_proc.c" +#line 161 "src/parser_proc.y" +psi_set_func_free(&(yypminor->yy324)); +#line 1393 "src/parser_proc.c" } break; - case 148: /* free_exp */ + case 148: /* return_stmt */ { -#line 166 "src/parser_proc.y" -psi_free_exp_free(&(yypminor->yy197)); -#line 1399 "src/parser_proc.c" +#line 163 "src/parser_proc.y" +psi_return_stmt_free(&(yypminor->yy258)); +#line 1400 "src/parser_proc.c" } break; - case 149: /* impl_type */ + case 149: /* free_stmt */ { -#line 168 "src/parser_proc.y" -psi_impl_type_free(&(yypminor->yy142)); -#line 1406 "src/parser_proc.c" +#line 165 "src/parser_proc.y" +psi_free_stmt_free(&(yypminor->yy102)); +#line 1407 "src/parser_proc.c" +} + break; + case 151: /* free_exp */ +{ +#line 169 "src/parser_proc.y" +psi_free_exp_free(&(yypminor->yy114)); +#line 1414 "src/parser_proc.c" +} + break; + case 152: /* impl_type */ +{ +#line 171 "src/parser_proc.y" +psi_impl_type_free(&(yypminor->yy40)); +#line 1421 "src/parser_proc.c" } break; /********* End destructor definitions *****************************************/ @@ -1654,163 +1669,165 @@ static const struct { YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ unsigned char nrhs; /* Number of right-hand side symbols in the rule */ } yyRuleInfo[] = { - { 155, 3 }, - { 155, 1 }, - { 155, 1 }, - { 155, 1 }, - { 155, 1 }, - { 155, 1 }, - { 155, 1 }, - { 155, 1 }, - { 156, 0 }, - { 156, 1 }, - { 102, 0 }, - { 102, 7 }, - { 157, 2 }, - { 158, 2 }, - { 159, 2 }, - { 96, 4 }, - { 97, 1 }, - { 97, 3 }, - { 98, 3 }, - { 98, 1 }, + { 158, 3 }, + { 158, 1 }, + { 158, 1 }, + { 158, 1 }, + { 158, 1 }, + { 158, 1 }, + { 158, 1 }, + { 158, 1 }, + { 159, 0 }, + { 159, 1 }, + { 104, 0 }, + { 104, 7 }, + { 160, 2 }, + { 161, 2 }, + { 162, 2 }, + { 98, 4 }, + { 99, 1 }, { 99, 3 }, + { 100, 3 }, { 100, 1 }, - { 100, 1 }, - { 101, 4 }, + { 101, 3 }, + { 102, 1 }, + { 102, 1 }, { 103, 4 }, - { 104, 1 }, - { 105, 6 }, - { 106, 3 }, - { 107, 4 }, - { 107, 4 }, - { 107, 2 }, - { 108, 1 }, - { 109, 3 }, - { 108, 2 }, - { 108, 1 }, - { 110, 6 }, - { 110, 8 }, - { 111, 1 }, - { 111, 2 }, - { 108, 7 }, - { 108, 8 }, - { 112, 1 }, - { 160, 0 }, - { 160, 3 }, + { 105, 4 }, + { 106, 1 }, + { 107, 6 }, + { 108, 3 }, + { 109, 4 }, + { 109, 4 }, + { 109, 2 }, + { 110, 1 }, + { 111, 3 }, + { 110, 2 }, + { 110, 1 }, + { 112, 6 }, + { 112, 8 }, + { 113, 1 }, { 113, 2 }, - { 113, 3 }, + { 110, 7 }, + { 110, 8 }, { 114, 1 }, - { 114, 3 }, + { 163, 0 }, + { 163, 3 }, { 115, 2 }, - { 108, 7 }, { 115, 3 }, - { 115, 4 }, - { 116, 0 }, - { 116, 1 }, { 116, 1 }, { 116, 3 }, - { 117, 1 }, { 117, 2 }, - { 118, 2 }, + { 110, 7 }, + { 117, 3 }, + { 117, 4 }, + { 118, 0 }, + { 118, 1 }, + { 118, 1 }, { 118, 3 }, - { 119, 0 }, - { 119, 7 }, - { 161, 1 }, - { 161, 2 }, - { 162, 0 }, - { 162, 1 }, - { 161, 1 }, - { 161, 2 }, - { 163, 0 }, - { 163, 1 }, - { 163, 2 }, - { 164, 0 }, - { 164, 1 }, - { 120, 2 }, - { 120, 2 }, - { 120, 1 }, - { 120, 1 }, - { 120, 1 }, - { 120, 2 }, + { 119, 1 }, + { 119, 2 }, { 120, 2 }, - { 120, 2 }, - { 120, 1 }, - { 121, 1 }, - { 121, 2 }, - { 122, 4 }, - { 122, 5 }, - { 123, 7 }, - { 123, 8 }, - { 123, 13 }, - { 124, 1 }, - { 125, 2 }, - { 149, 1 }, - { 126, 2 }, - { 126, 4 }, - { 127, 1 }, - { 127, 3 }, + { 120, 3 }, + { 121, 0 }, + { 121, 7 }, + { 164, 1 }, + { 164, 2 }, + { 165, 0 }, + { 165, 1 }, + { 164, 1 }, + { 164, 2 }, + { 166, 0 }, + { 166, 1 }, + { 166, 2 }, + { 167, 0 }, + { 167, 1 }, + { 122, 2 }, + { 122, 2 }, + { 122, 1 }, + { 122, 1 }, + { 122, 1 }, + { 122, 2 }, + { 122, 2 }, + { 122, 2 }, + { 122, 1 }, + { 123, 1 }, + { 123, 2 }, + { 124, 4 }, + { 124, 5 }, + { 125, 7 }, + { 125, 8 }, + { 125, 13 }, + { 126, 1 }, + { 127, 2 }, + { 152, 1 }, + { 128, 2 }, + { 128, 4 }, { 129, 1 }, - { 129, 2 }, - { 130, 1 }, - { 130, 1 }, - { 130, 1 }, - { 130, 1 }, - { 131, 1 }, + { 129, 3 }, { 131, 1 }, + { 131, 2 }, { 132, 1 }, - { 132, 3 }, - { 132, 3 }, - { 132, 2 }, - { 139, 1 }, - { 139, 2 }, - { 139, 1 }, - { 139, 1 }, - { 139, 2 }, - { 139, 1 }, - { 139, 2 }, - { 139, 1 }, - { 139, 2 }, - { 139, 3 }, - { 133, 3 }, - { 133, 6 }, - { 138, 8 }, - { 134, 6 }, - { 135, 4 }, + { 132, 1 }, + { 132, 1 }, + { 132, 1 }, + { 132, 1 }, + { 133, 1 }, + { 133, 1 }, + { 134, 1 }, + { 134, 3 }, + { 134, 3 }, + { 134, 2 }, + { 141, 1 }, + { 141, 2 }, + { 141, 1 }, + { 141, 1 }, + { 141, 2 }, + { 141, 1 }, + { 141, 2 }, + { 141, 1 }, + { 141, 2 }, + { 141, 3 }, + { 135, 3 }, { 135, 6 }, - { 140, 1 }, - { 140, 3 }, - { 136, 0 }, - { 136, 1 }, - { 137, 1 }, - { 137, 3 }, - { 165, 1 }, - { 165, 1 }, - { 144, 4 }, - { 144, 6 }, - { 144, 6 }, - { 142, 1 }, + { 140, 8 }, + { 136, 6 }, + { 137, 4 }, + { 137, 6 }, { 142, 1 }, - { 143, 1 }, - { 143, 3 }, { 142, 3 }, - { 141, 3 }, - { 145, 3 }, + { 138, 0 }, + { 138, 1 }, + { 139, 1 }, + { 139, 3 }, + { 168, 1 }, + { 168, 1 }, + { 147, 4 }, + { 147, 6 }, + { 147, 6 }, + { 145, 1 }, + { 145, 1 }, + { 146, 1 }, { 146, 3 }, - { 147, 1 }, - { 147, 3 }, - { 148, 4 }, - { 150, 0 }, + { 145, 3 }, + { 144, 3 }, + { 148, 3 }, + { 149, 3 }, { 150, 1 }, - { 151, 0 }, - { 151, 1 }, - { 152, 1 }, - { 152, 2 }, + { 150, 3 }, + { 151, 4 }, + { 143, 3 }, + { 153, 0 }, { 153, 1 }, + { 154, 0 }, { 154, 1 }, - { 154, 2 }, - { 155, 1 }, { 155, 1 }, + { 155, 2 }, + { 156, 1 }, + { 157, 1 }, + { 157, 2 }, + { 158, 1 }, + { 158, 1 }, }; static void yy_accept(yyParser*); /* Forward Declaration */ @@ -1875,7 +1892,7 @@ static void yy_reduce( /********** Begin reduce actions **********************************************/ YYMINORTYPE yylhsminor; case 0: /* block ::= LIB QUOTED_STRING EOS */ -#line 177 "src/parser_proc.y" +#line 180 "src/parser_proc.y" { if (P->file.ln) { P->error(PSI_DATA(P), yymsp[-2].minor.yy0, PSI_WARNING, "Extra 'lib %s' statement has no effect", yymsp[-1].minor.yy0->text); @@ -1885,115 +1902,115 @@ static void yy_reduce( free(yymsp[-1].minor.yy0); free(yymsp[-2].minor.yy0); } -#line 1889 "src/parser_proc.c" - yy_destructor(yypParser,71,&yymsp[0].minor); +#line 1906 "src/parser_proc.c" + yy_destructor(yypParser,73,&yymsp[0].minor); break; case 1: /* block ::= decl */ -#line 186 "src/parser_proc.y" +#line 189 "src/parser_proc.y" { if (!P->decls) { P->decls = psi_plist_init((psi_plist_dtor) psi_decl_free); } - P->decls = psi_plist_add(P->decls, &yymsp[0].minor.yy71); + P->decls = psi_plist_add(P->decls, &yymsp[0].minor.yy17); } -#line 1900 "src/parser_proc.c" +#line 1917 "src/parser_proc.c" break; case 2: /* block ::= impl */ -#line 192 "src/parser_proc.y" +#line 195 "src/parser_proc.y" { if (!P->impls) { P->impls = psi_plist_init((psi_plist_dtor) psi_impl_free); } - P->impls = psi_plist_add(P->impls, &yymsp[0].minor.yy49); + P->impls = psi_plist_add(P->impls, &yymsp[0].minor.yy303); } -#line 1910 "src/parser_proc.c" +#line 1927 "src/parser_proc.c" break; case 3: /* block ::= decl_typedef */ -#line 198 "src/parser_proc.y" +#line 201 "src/parser_proc.y" { if (!P->types) { P->types = psi_plist_init((psi_plist_dtor) psi_decl_arg_free); } - P->types = psi_plist_add(P->types, &yymsp[0].minor.yy260); - switch (yymsp[0].minor.yy260->type->type) { + P->types = psi_plist_add(P->types, &yymsp[0].minor.yy64); + switch (yymsp[0].minor.yy64->type->type) { case PSI_T_STRUCT: - if (yymsp[0].minor.yy260->type->real.strct) { + if (yymsp[0].minor.yy64->type->real.strct) { if (!P->structs) { P->structs = psi_plist_init((psi_plist_dtor) psi_decl_struct_free); } - P->structs = psi_plist_add(P->structs, &yymsp[0].minor.yy260->type->real.strct); + P->structs = psi_plist_add(P->structs, &yymsp[0].minor.yy64->type->real.strct); } break; case PSI_T_UNION: - if (yymsp[0].minor.yy260->type->real.unn) { + if (yymsp[0].minor.yy64->type->real.unn) { if (!P->unions) { P->unions = psi_plist_init((psi_plist_dtor) psi_decl_union_free); } - P->unions = psi_plist_add(P->unions, &yymsp[0].minor.yy260->type->real.unn); + P->unions = psi_plist_add(P->unions, &yymsp[0].minor.yy64->type->real.unn); } break; case PSI_T_ENUM: - if (yymsp[0].minor.yy260->type->real.enm) { + if (yymsp[0].minor.yy64->type->real.enm) { if (!P->enums) { P->enums = psi_plist_init((psi_plist_dtor) psi_decl_enum_free); } - P->enums = psi_plist_add(P->enums, &yymsp[0].minor.yy260->type->real.enm); + P->enums = psi_plist_add(P->enums, &yymsp[0].minor.yy64->type->real.enm); } break; } } -#line 1946 "src/parser_proc.c" +#line 1963 "src/parser_proc.c" break; case 4: /* block ::= constant */ -#line 230 "src/parser_proc.y" +#line 233 "src/parser_proc.y" { if (!P->consts) { P->consts = psi_plist_init((psi_plist_dtor) psi_const_free); } - P->consts = psi_plist_add(P->consts, &yymsp[0].minor.yy106); + P->consts = psi_plist_add(P->consts, &yymsp[0].minor.yy336); } -#line 1956 "src/parser_proc.c" +#line 1973 "src/parser_proc.c" break; case 5: /* block ::= decl_struct */ -#line 236 "src/parser_proc.y" +#line 239 "src/parser_proc.y" { if (!P->structs) { P->structs = psi_plist_init((psi_plist_dtor) psi_decl_struct_free); } - P->structs = psi_plist_add(P->structs, &yymsp[0].minor.yy271); + P->structs = psi_plist_add(P->structs, &yymsp[0].minor.yy137); } -#line 1966 "src/parser_proc.c" +#line 1983 "src/parser_proc.c" break; case 6: /* block ::= decl_union */ -#line 242 "src/parser_proc.y" +#line 245 "src/parser_proc.y" { if (!P->unions) { P->unions = psi_plist_init((psi_plist_dtor) psi_decl_union_free); } - P->unions = psi_plist_add(P->unions, &yymsp[0].minor.yy19); + P->unions = psi_plist_add(P->unions, &yymsp[0].minor.yy47); } -#line 1976 "src/parser_proc.c" +#line 1993 "src/parser_proc.c" break; case 7: /* block ::= decl_enum */ -#line 248 "src/parser_proc.y" +#line 251 "src/parser_proc.y" { if (!P->enums) { P->enums = psi_plist_init((psi_plist_dtor) psi_decl_enum_free); } - P->enums = psi_plist_add(P->enums, &yymsp[0].minor.yy279); + P->enums = psi_plist_add(P->enums, &yymsp[0].minor.yy87); } -#line 1986 "src/parser_proc.c" +#line 2003 "src/parser_proc.c" break; case 8: /* optional_name ::= */ case 42: /* decl_var_array_size ::= */ yytestcase(yyruleno==42); case 64: /* decl_scalar_type_short ::= */ yytestcase(yyruleno==64); case 68: /* decl_scalar_type_long ::= */ yytestcase(yyruleno==68); case 71: /* decl_scalar_type_long_long ::= */ yytestcase(yyruleno==71); -#line 254 "src/parser_proc.y" +#line 257 "src/parser_proc.y" { yymsp[1].minor.yy0 = NULL; } -#line 1997 "src/parser_proc.c" +#line 2014 "src/parser_proc.c" break; case 9: /* optional_name ::= NAME */ case 62: /* decl_scalar_type ::= CHAR */ yytestcase(yyruleno==62); @@ -2001,43 +2018,43 @@ static void yy_reduce( case 66: /* decl_scalar_type ::= INT */ yytestcase(yyruleno==66); case 69: /* decl_scalar_type_long ::= DOUBLE */ yytestcase(yyruleno==69); case 72: /* decl_scalar_type_long_long ::= INT */ yytestcase(yyruleno==72); - case 130: /* callback_rval ::= ZVAL|OBJVAL|ARRVAL|PATHVAL|STRLEN|STRVAL|FLOATVAL|INTVAL|BOOLVAL|COUNT */ yytestcase(yyruleno==130); - case 131: /* callback_rval ::= VOID */ yytestcase(yyruleno==131); -#line 257 "src/parser_proc.y" + case 131: /* callback_rval ::= ZVAL|OBJVAL|ARRVAL|PATHVAL|STRLEN|STRVAL|FLOATVAL|INTVAL|BOOLVAL|COUNT */ yytestcase(yyruleno==131); + case 132: /* callback_rval ::= VOID */ yytestcase(yyruleno==132); +#line 260 "src/parser_proc.y" { yylhsminor.yy0 = yymsp[0].minor.yy0; } -#line 2011 "src/parser_proc.c" +#line 2028 "src/parser_proc.c" yymsp[0].minor.yy0 = yylhsminor.yy0; break; case 10: /* align_and_size ::= */ -#line 260 "src/parser_proc.y" +#line 263 "src/parser_proc.y" { - yymsp[1].minor.yy323.pos = 0; - yymsp[1].minor.yy323.len = 0; + yymsp[1].minor.yy207.pos = 0; + yymsp[1].minor.yy207.len = 0; } -#line 2020 "src/parser_proc.c" +#line 2037 "src/parser_proc.c" break; case 11: /* align_and_size ::= COLON COLON LPAREN NUMBER COMMA NUMBER RPAREN */ -{ yy_destructor(yypParser,72,&yymsp[-6].minor); -#line 264 "src/parser_proc.y" +{ yy_destructor(yypParser,74,&yymsp[-6].minor); +#line 267 "src/parser_proc.y" { - yymsp[-6].minor.yy323.pos = atol(yymsp[-3].minor.yy0->text); - yymsp[-6].minor.yy323.len = atol(yymsp[-1].minor.yy0->text); + yymsp[-6].minor.yy207.pos = atol(yymsp[-3].minor.yy0->text); + yymsp[-6].minor.yy207.len = atol(yymsp[-1].minor.yy0->text); free(yymsp[-3].minor.yy0); free(yymsp[-1].minor.yy0); } -#line 2031 "src/parser_proc.c" - yy_destructor(yypParser,72,&yymsp[-5].minor); - yy_destructor(yypParser,73,&yymsp[-4].minor); - yy_destructor(yypParser,74,&yymsp[-2].minor); - yy_destructor(yypParser,75,&yymsp[0].minor); +#line 2048 "src/parser_proc.c" + yy_destructor(yypParser,74,&yymsp[-5].minor); + yy_destructor(yypParser,75,&yymsp[-4].minor); + yy_destructor(yypParser,76,&yymsp[-2].minor); + yy_destructor(yypParser,77,&yymsp[0].minor); } break; case 12: /* enum_name ::= ENUM optional_name */ case 13: /* struct_name ::= STRUCT optional_name */ yytestcase(yyruleno==13); case 14: /* union_name ::= UNION optional_name */ yytestcase(yyruleno==14); -#line 270 "src/parser_proc.y" +#line 273 "src/parser_proc.y" { if (yymsp[0].minor.yy0) { yylhsminor.yy0 = yymsp[0].minor.yy0; @@ -2048,526 +2065,526 @@ static void yy_reduce( yylhsminor.yy0 = psi_token_translit(psi_token_append(yymsp[-1].minor.yy0, 1, digest), " ", "@"); } } -#line 2052 "src/parser_proc.c" +#line 2069 "src/parser_proc.c" yymsp[-1].minor.yy0 = yylhsminor.yy0; break; case 15: /* decl_enum ::= enum_name LBRACE decl_enum_items RBRACE */ -#line 300 "src/parser_proc.y" +#line 303 "src/parser_proc.y" { - yylhsminor.yy279 = psi_decl_enum_init(yymsp[-3].minor.yy0->text, yymsp[-1].minor.yy303); - yylhsminor.yy279->token = yymsp[-3].minor.yy0; + yylhsminor.yy87 = psi_decl_enum_init(yymsp[-3].minor.yy0->text, yymsp[-1].minor.yy7); + yylhsminor.yy87->token = yymsp[-3].minor.yy0; } -#line 2061 "src/parser_proc.c" - yy_destructor(yypParser,79,&yymsp[-2].minor); - yy_destructor(yypParser,80,&yymsp[0].minor); - yymsp[-3].minor.yy279 = yylhsminor.yy279; +#line 2078 "src/parser_proc.c" + yy_destructor(yypParser,81,&yymsp[-2].minor); + yy_destructor(yypParser,82,&yymsp[0].minor); + yymsp[-3].minor.yy87 = yylhsminor.yy87; break; case 16: /* decl_enum_items ::= decl_enum_item */ -#line 304 "src/parser_proc.y" +#line 307 "src/parser_proc.y" { - yylhsminor.yy303 = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_decl_enum_item_free), - &yymsp[0].minor.yy69); + yylhsminor.yy7 = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_decl_enum_item_free), + &yymsp[0].minor.yy109); } -#line 2072 "src/parser_proc.c" - yymsp[0].minor.yy303 = yylhsminor.yy303; +#line 2089 "src/parser_proc.c" + yymsp[0].minor.yy7 = yylhsminor.yy7; break; case 17: /* decl_enum_items ::= decl_enum_items COMMA decl_enum_item */ -#line 308 "src/parser_proc.y" +#line 311 "src/parser_proc.y" { - yylhsminor.yy303 = psi_plist_add(yymsp[-2].minor.yy303, &yymsp[0].minor.yy69); + yylhsminor.yy7 = psi_plist_add(yymsp[-2].minor.yy7, &yymsp[0].minor.yy109); } -#line 2080 "src/parser_proc.c" - yy_destructor(yypParser,74,&yymsp[-1].minor); - yymsp[-2].minor.yy303 = yylhsminor.yy303; +#line 2097 "src/parser_proc.c" + yy_destructor(yypParser,76,&yymsp[-1].minor); + yymsp[-2].minor.yy7 = yylhsminor.yy7; break; case 18: /* decl_enum_item ::= NAME EQUALS num_exp */ -#line 311 "src/parser_proc.y" +#line 314 "src/parser_proc.y" { - yylhsminor.yy69 = psi_decl_enum_item_init(yymsp[-2].minor.yy0->text, yymsp[0].minor.yy39); - yylhsminor.yy69->token = yymsp[-2].minor.yy0; + yylhsminor.yy109 = psi_decl_enum_item_init(yymsp[-2].minor.yy0->text, yymsp[0].minor.yy124); + yylhsminor.yy109->token = yymsp[-2].minor.yy0; } -#line 2090 "src/parser_proc.c" - yy_destructor(yypParser,81,&yymsp[-1].minor); - yymsp[-2].minor.yy69 = yylhsminor.yy69; +#line 2107 "src/parser_proc.c" + yy_destructor(yypParser,83,&yymsp[-1].minor); + yymsp[-2].minor.yy109 = yylhsminor.yy109; break; case 19: /* decl_enum_item ::= NAME */ -#line 315 "src/parser_proc.y" +#line 318 "src/parser_proc.y" { - yylhsminor.yy69 = psi_decl_enum_item_init(yymsp[0].minor.yy0->text, NULL); - yylhsminor.yy69->token = yymsp[0].minor.yy0; + yylhsminor.yy109 = psi_decl_enum_item_init(yymsp[0].minor.yy0->text, NULL); + yylhsminor.yy109->token = yymsp[0].minor.yy0; } -#line 2100 "src/parser_proc.c" - yymsp[0].minor.yy69 = yylhsminor.yy69; +#line 2117 "src/parser_proc.c" + yymsp[0].minor.yy109 = yylhsminor.yy109; break; case 20: /* decl_struct_args_block ::= LBRACE struct_args RBRACE */ -{ yy_destructor(yypParser,79,&yymsp[-2].minor); -#line 319 "src/parser_proc.y" +{ yy_destructor(yypParser,81,&yymsp[-2].minor); +#line 322 "src/parser_proc.y" { - yymsp[-2].minor.yy303 = yymsp[-1].minor.yy303; + yymsp[-2].minor.yy7 = yymsp[-1].minor.yy7; } -#line 2109 "src/parser_proc.c" - yy_destructor(yypParser,80,&yymsp[0].minor); +#line 2126 "src/parser_proc.c" + yy_destructor(yypParser,82,&yymsp[0].minor); } break; case 21: /* decl_struct_args ::= decl_struct_args_block */ -#line 322 "src/parser_proc.y" +#line 325 "src/parser_proc.y" { - yylhsminor.yy303 = yymsp[0].minor.yy303; + yylhsminor.yy7 = yymsp[0].minor.yy7; } -#line 2118 "src/parser_proc.c" - yymsp[0].minor.yy303 = yylhsminor.yy303; +#line 2135 "src/parser_proc.c" + yymsp[0].minor.yy7 = yylhsminor.yy7; break; case 22: /* decl_struct_args ::= EOS */ -{ yy_destructor(yypParser,71,&yymsp[0].minor); -#line 325 "src/parser_proc.y" +{ yy_destructor(yypParser,73,&yymsp[0].minor); +#line 328 "src/parser_proc.y" { - yymsp[0].minor.yy303 = psi_plist_init((psi_plist_dtor) psi_decl_arg_free); + yymsp[0].minor.yy7 = psi_plist_init((psi_plist_dtor) psi_decl_arg_free); } -#line 2127 "src/parser_proc.c" +#line 2144 "src/parser_proc.c" } break; case 23: /* decl_struct ::= STRUCT NAME align_and_size decl_struct_args */ -{ yy_destructor(yypParser,77,&yymsp[-3].minor); -#line 328 "src/parser_proc.y" +{ yy_destructor(yypParser,79,&yymsp[-3].minor); +#line 331 "src/parser_proc.y" { - yymsp[-3].minor.yy271 = psi_decl_struct_init(yymsp[-2].minor.yy0->text, yymsp[0].minor.yy303); - yymsp[-3].minor.yy271->align = yymsp[-1].minor.yy323.pos; - yymsp[-3].minor.yy271->size = yymsp[-1].minor.yy323.len; - yymsp[-3].minor.yy271->token = yymsp[-2].minor.yy0; + yymsp[-3].minor.yy137 = psi_decl_struct_init(yymsp[-2].minor.yy0->text, yymsp[0].minor.yy7); + yymsp[-3].minor.yy137->align = yymsp[-1].minor.yy207.pos; + yymsp[-3].minor.yy137->size = yymsp[-1].minor.yy207.len; + yymsp[-3].minor.yy137->token = yymsp[-2].minor.yy0; } -#line 2139 "src/parser_proc.c" +#line 2156 "src/parser_proc.c" } break; case 24: /* decl_union ::= UNION NAME align_and_size decl_struct_args */ -{ yy_destructor(yypParser,78,&yymsp[-3].minor); -#line 334 "src/parser_proc.y" +{ yy_destructor(yypParser,80,&yymsp[-3].minor); +#line 337 "src/parser_proc.y" { - yymsp[-3].minor.yy19 = psi_decl_union_init(yymsp[-2].minor.yy0->text, yymsp[0].minor.yy303); - yymsp[-3].minor.yy19->align = yymsp[-1].minor.yy323.pos; - yymsp[-3].minor.yy19->size = yymsp[-1].minor.yy323.len; - yymsp[-3].minor.yy19->token = yymsp[-2].minor.yy0; + yymsp[-3].minor.yy47 = psi_decl_union_init(yymsp[-2].minor.yy0->text, yymsp[0].minor.yy7); + yymsp[-3].minor.yy47->align = yymsp[-1].minor.yy207.pos; + yymsp[-3].minor.yy47->size = yymsp[-1].minor.yy207.len; + yymsp[-3].minor.yy47->token = yymsp[-2].minor.yy0; } -#line 2151 "src/parser_proc.c" +#line 2168 "src/parser_proc.c" } break; case 25: /* const_type ::= BOOL|INT|FLOAT|STRING */ -#line 340 "src/parser_proc.y" +#line 343 "src/parser_proc.y" { - yylhsminor.yy7 = psi_const_type_init(yymsp[0].minor.yy0->type, yymsp[0].minor.yy0->text); + yylhsminor.yy181 = psi_const_type_init(yymsp[0].minor.yy0->type, yymsp[0].minor.yy0->text); free(yymsp[0].minor.yy0); } -#line 2160 "src/parser_proc.c" - yymsp[0].minor.yy7 = yylhsminor.yy7; +#line 2177 "src/parser_proc.c" + yymsp[0].minor.yy181 = yylhsminor.yy181; break; case 26: /* constant ::= CONST const_type NSNAME EQUALS impl_def_val EOS */ -{ yy_destructor(yypParser,82,&yymsp[-5].minor); -#line 344 "src/parser_proc.y" +{ yy_destructor(yypParser,84,&yymsp[-5].minor); +#line 347 "src/parser_proc.y" { - yymsp[-5].minor.yy106 = psi_const_init(yymsp[-4].minor.yy7, yymsp[-3].minor.yy0->text, yymsp[-1].minor.yy21); - yymsp[-5].minor.yy106->token = yymsp[-3].minor.yy0; + yymsp[-5].minor.yy336 = psi_const_init(yymsp[-4].minor.yy181, yymsp[-3].minor.yy0->text, yymsp[-1].minor.yy319); + yymsp[-5].minor.yy336->token = yymsp[-3].minor.yy0; } -#line 2170 "src/parser_proc.c" - yy_destructor(yypParser,81,&yymsp[-2].minor); - yy_destructor(yypParser,71,&yymsp[0].minor); +#line 2187 "src/parser_proc.c" + yy_destructor(yypParser,83,&yymsp[-2].minor); + yy_destructor(yypParser,73,&yymsp[0].minor); } break; case 27: /* decl_typedef ::= TYPEDEF decl_typedef_body EOS */ -#line 348 "src/parser_proc.y" +#line 351 "src/parser_proc.y" { - yylhsminor.yy260 = yymsp[-1].minor.yy260; - yylhsminor.yy260->token = yymsp[-2].minor.yy0; + yylhsminor.yy64 = yymsp[-1].minor.yy64; + yylhsminor.yy64->token = yymsp[-2].minor.yy0; } -#line 2181 "src/parser_proc.c" - yy_destructor(yypParser,71,&yymsp[0].minor); - yymsp[-2].minor.yy260 = yylhsminor.yy260; +#line 2198 "src/parser_proc.c" + yy_destructor(yypParser,73,&yymsp[0].minor); + yymsp[-2].minor.yy64 = yylhsminor.yy64; break; case 28: /* decl_typedef_body_ex ::= struct_name align_and_size decl_struct_args_block decl_var */ -#line 352 "src/parser_proc.y" +#line 355 "src/parser_proc.y" { - yylhsminor.yy260 = psi_decl_arg_init(psi_decl_type_init(PSI_T_STRUCT, yymsp[-3].minor.yy0->text), yymsp[0].minor.yy207); - yylhsminor.yy260->type->token = psi_token_copy(yymsp[-3].minor.yy0); - yylhsminor.yy260->type->real.strct = psi_decl_struct_init(yymsp[-3].minor.yy0->text, yymsp[-1].minor.yy303); - yylhsminor.yy260->type->real.strct->token = yymsp[-3].minor.yy0; - yylhsminor.yy260->type->real.strct->align = yymsp[-2].minor.yy323.pos; - yylhsminor.yy260->type->real.strct->size = yymsp[-2].minor.yy323.len; + yylhsminor.yy64 = psi_decl_arg_init(psi_decl_type_init(PSI_T_STRUCT, yymsp[-3].minor.yy0->text), yymsp[0].minor.yy131); + yylhsminor.yy64->type->token = psi_token_copy(yymsp[-3].minor.yy0); + yylhsminor.yy64->type->real.strct = psi_decl_struct_init(yymsp[-3].minor.yy0->text, yymsp[-1].minor.yy7); + yylhsminor.yy64->type->real.strct->token = yymsp[-3].minor.yy0; + yylhsminor.yy64->type->real.strct->align = yymsp[-2].minor.yy207.pos; + yylhsminor.yy64->type->real.strct->size = yymsp[-2].minor.yy207.len; } -#line 2195 "src/parser_proc.c" - yymsp[-3].minor.yy260 = yylhsminor.yy260; +#line 2212 "src/parser_proc.c" + yymsp[-3].minor.yy64 = yylhsminor.yy64; break; case 29: /* decl_typedef_body_ex ::= union_name align_and_size decl_struct_args_block decl_var */ -#line 360 "src/parser_proc.y" +#line 363 "src/parser_proc.y" { - yylhsminor.yy260 = psi_decl_arg_init(psi_decl_type_init(PSI_T_UNION, yymsp[-3].minor.yy0->text), yymsp[0].minor.yy207); - yylhsminor.yy260->type->token = psi_token_copy(yymsp[-3].minor.yy0); - yylhsminor.yy260->type->real.unn = psi_decl_union_init(yymsp[-3].minor.yy0->text, yymsp[-1].minor.yy303); - yylhsminor.yy260->type->real.unn->token = yymsp[-3].minor.yy0; - yylhsminor.yy260->type->real.unn->align = yymsp[-2].minor.yy323.pos; - yylhsminor.yy260->type->real.unn->size = yymsp[-2].minor.yy323.len; + yylhsminor.yy64 = psi_decl_arg_init(psi_decl_type_init(PSI_T_UNION, yymsp[-3].minor.yy0->text), yymsp[0].minor.yy131); + yylhsminor.yy64->type->token = psi_token_copy(yymsp[-3].minor.yy0); + yylhsminor.yy64->type->real.unn = psi_decl_union_init(yymsp[-3].minor.yy0->text, yymsp[-1].minor.yy7); + yylhsminor.yy64->type->real.unn->token = yymsp[-3].minor.yy0; + yylhsminor.yy64->type->real.unn->align = yymsp[-2].minor.yy207.pos; + yylhsminor.yy64->type->real.unn->size = yymsp[-2].minor.yy207.len; } -#line 2208 "src/parser_proc.c" - yymsp[-3].minor.yy260 = yylhsminor.yy260; +#line 2225 "src/parser_proc.c" + yymsp[-3].minor.yy64 = yylhsminor.yy64; break; case 30: /* decl_typedef_body_ex ::= decl_enum NAME */ -#line 368 "src/parser_proc.y" +#line 371 "src/parser_proc.y" { - yylhsminor.yy260 = psi_decl_arg_init(psi_decl_type_init(PSI_T_ENUM, yymsp[-1].minor.yy279->name), psi_decl_var_init(yymsp[0].minor.yy0->text, 0, 0)); - yylhsminor.yy260->var->token = yymsp[0].minor.yy0; - yylhsminor.yy260->type->token = psi_token_copy(yymsp[-1].minor.yy279->token); - yylhsminor.yy260->type->real.enm = yymsp[-1].minor.yy279; + yylhsminor.yy64 = psi_decl_arg_init(psi_decl_type_init(PSI_T_ENUM, yymsp[-1].minor.yy87->name), psi_decl_var_init(yymsp[0].minor.yy0->text, 0, 0)); + yylhsminor.yy64->var->token = yymsp[0].minor.yy0; + yylhsminor.yy64->type->token = psi_token_copy(yymsp[-1].minor.yy87->token); + yylhsminor.yy64->type->real.enm = yymsp[-1].minor.yy87; } -#line 2219 "src/parser_proc.c" - yymsp[-1].minor.yy260 = yylhsminor.yy260; +#line 2236 "src/parser_proc.c" + yymsp[-1].minor.yy64 = yylhsminor.yy64; break; case 31: /* decl_typedef_body ::= decl_typedef_body_ex */ case 34: /* decl_typedef_body ::= decl_arg */ yytestcase(yyruleno==34); case 37: /* decl_func ::= decl_arg */ yytestcase(yyruleno==37); -#line 374 "src/parser_proc.y" +#line 377 "src/parser_proc.y" { - yylhsminor.yy260 = yymsp[0].minor.yy260; + yylhsminor.yy64 = yymsp[0].minor.yy64; } -#line 2229 "src/parser_proc.c" - yymsp[0].minor.yy260 = yylhsminor.yy260; +#line 2246 "src/parser_proc.c" + yymsp[0].minor.yy64 = yylhsminor.yy64; break; case 32: /* decl_typedef_body_fn_args ::= LPAREN decl_args RPAREN */ -{ yy_destructor(yypParser,73,&yymsp[-2].minor); -#line 377 "src/parser_proc.y" +{ yy_destructor(yypParser,75,&yymsp[-2].minor); +#line 380 "src/parser_proc.y" { - yymsp[-2].minor.yy303 = yymsp[-1].minor.yy303; + yymsp[-2].minor.yy7 = yymsp[-1].minor.yy7; } -#line 2238 "src/parser_proc.c" - yy_destructor(yypParser,75,&yymsp[0].minor); +#line 2255 "src/parser_proc.c" + yy_destructor(yypParser,77,&yymsp[0].minor); } break; case 33: /* decl_typedef_body ::= decl_func decl_typedef_body_fn_args */ -#line 380 "src/parser_proc.y" +#line 383 "src/parser_proc.y" { - yylhsminor.yy260 = psi_decl_arg_init(psi_decl_type_init(PSI_T_FUNCTION, yymsp[-1].minor.yy260->var->name), psi_decl_var_copy(yymsp[-1].minor.yy260->var)); - yylhsminor.yy260->type->token = psi_token_copy(yymsp[-1].minor.yy260->token); - yylhsminor.yy260->type->real.func = psi_decl_init(psi_decl_abi_init("default"), yymsp[-1].minor.yy260, yymsp[0].minor.yy303); + yylhsminor.yy64 = psi_decl_arg_init(psi_decl_type_init(PSI_T_FUNCTION, yymsp[-1].minor.yy64->var->name), psi_decl_var_copy(yymsp[-1].minor.yy64->var)); + yylhsminor.yy64->type->token = psi_token_copy(yymsp[-1].minor.yy64->token); + yylhsminor.yy64->type->real.func = psi_decl_init(psi_decl_abi_init("default"), yymsp[-1].minor.yy64, yymsp[0].minor.yy7); } -#line 2249 "src/parser_proc.c" - yymsp[-1].minor.yy260 = yylhsminor.yy260; +#line 2266 "src/parser_proc.c" + yymsp[-1].minor.yy64 = yylhsminor.yy64; break; case 35: /* decl ::= decl_abi decl_func LPAREN decl_args RPAREN EOS */ -#line 388 "src/parser_proc.y" +#line 391 "src/parser_proc.y" { - yylhsminor.yy71 = psi_decl_init(yymsp[-5].minor.yy242, yymsp[-4].minor.yy260, yymsp[-2].minor.yy303); + yylhsminor.yy17 = psi_decl_init(yymsp[-5].minor.yy180, yymsp[-4].minor.yy64, yymsp[-2].minor.yy7); } -#line 2257 "src/parser_proc.c" - yy_destructor(yypParser,73,&yymsp[-3].minor); - yy_destructor(yypParser,75,&yymsp[-1].minor); - yy_destructor(yypParser,71,&yymsp[0].minor); - yymsp[-5].minor.yy71 = yylhsminor.yy71; +#line 2274 "src/parser_proc.c" + yy_destructor(yypParser,75,&yymsp[-3].minor); + yy_destructor(yypParser,77,&yymsp[-1].minor); + yy_destructor(yypParser,73,&yymsp[0].minor); + yymsp[-5].minor.yy17 = yylhsminor.yy17; break; case 36: /* decl ::= decl_abi decl_func LPAREN decl_args COMMA ELLIPSIS RPAREN EOS */ -#line 391 "src/parser_proc.y" +#line 394 "src/parser_proc.y" { - yylhsminor.yy71 = psi_decl_init(yymsp[-7].minor.yy242, yymsp[-6].minor.yy260, yymsp[-4].minor.yy303); - yylhsminor.yy71->varargs = 1; + yylhsminor.yy17 = psi_decl_init(yymsp[-7].minor.yy180, yymsp[-6].minor.yy64, yymsp[-4].minor.yy7); + yylhsminor.yy17->varargs = 1; } -#line 2269 "src/parser_proc.c" - yy_destructor(yypParser,73,&yymsp[-5].minor); - yy_destructor(yypParser,74,&yymsp[-3].minor); - yy_destructor(yypParser,84,&yymsp[-2].minor); - yy_destructor(yypParser,75,&yymsp[-1].minor); - yy_destructor(yypParser,71,&yymsp[0].minor); - yymsp[-7].minor.yy71 = yylhsminor.yy71; +#line 2286 "src/parser_proc.c" + yy_destructor(yypParser,75,&yymsp[-5].minor); + yy_destructor(yypParser,76,&yymsp[-3].minor); + yy_destructor(yypParser,86,&yymsp[-2].minor); + yy_destructor(yypParser,77,&yymsp[-1].minor); + yy_destructor(yypParser,73,&yymsp[0].minor); + yymsp[-7].minor.yy17 = yylhsminor.yy17; break; case 38: /* decl_func ::= VOID NAME */ -#line 398 "src/parser_proc.y" +#line 401 "src/parser_proc.y" { - yylhsminor.yy260 = psi_decl_arg_init( + yylhsminor.yy64 = psi_decl_arg_init( psi_decl_type_init(yymsp[-1].minor.yy0->type, yymsp[-1].minor.yy0->text), psi_decl_var_init(yymsp[0].minor.yy0->text, 0, 0) ); - yylhsminor.yy260->type->token = yymsp[-1].minor.yy0; - yylhsminor.yy260->var->token = yymsp[0].minor.yy0; - yylhsminor.yy260->token = yymsp[0].minor.yy0; + yylhsminor.yy64->type->token = yymsp[-1].minor.yy0; + yylhsminor.yy64->var->token = yymsp[0].minor.yy0; + yylhsminor.yy64->token = yymsp[0].minor.yy0; } -#line 2288 "src/parser_proc.c" - yymsp[-1].minor.yy260 = yylhsminor.yy260; +#line 2305 "src/parser_proc.c" + yymsp[-1].minor.yy64 = yylhsminor.yy64; break; case 39: /* decl_typedef_body ::= VOID indirection LPAREN indirection NAME RPAREN decl_typedef_body_fn_args */ -#line 407 "src/parser_proc.y" +#line 410 "src/parser_proc.y" { struct psi_decl_arg *func_ = psi_decl_arg_init( psi_decl_type_init(yymsp[-6].minor.yy0->type, yymsp[-6].minor.yy0->text), - psi_decl_var_init(yymsp[-2].minor.yy0->text, yymsp[-5].minor.yy190, 0) + psi_decl_var_init(yymsp[-2].minor.yy0->text, yymsp[-5].minor.yy296, 0) ); func_->type->token = yymsp[-6].minor.yy0; func_->var->token = yymsp[-2].minor.yy0; func_->token = yymsp[-2].minor.yy0; - yylhsminor.yy260 = psi_decl_arg_init( + yylhsminor.yy64 = psi_decl_arg_init( psi_decl_type_init(PSI_T_FUNCTION, func_->var->name), psi_decl_var_copy(func_->var) ); - yylhsminor.yy260->var->pointer_level = yymsp[-3].minor.yy190; - yylhsminor.yy260->type->token = psi_token_copy(func_->token); - yylhsminor.yy260->type->real.func = psi_decl_init(psi_decl_abi_init("default"), func_, yymsp[0].minor.yy303); + yylhsminor.yy64->var->pointer_level = yymsp[-3].minor.yy296; + yylhsminor.yy64->type->token = psi_token_copy(func_->token); + yylhsminor.yy64->type->real.func = psi_decl_init(psi_decl_abi_init("default"), func_, yymsp[0].minor.yy7); } -#line 2309 "src/parser_proc.c" - yy_destructor(yypParser,73,&yymsp[-4].minor); - yy_destructor(yypParser,75,&yymsp[-1].minor); - yymsp[-6].minor.yy260 = yylhsminor.yy260; +#line 2326 "src/parser_proc.c" + yy_destructor(yypParser,75,&yymsp[-4].minor); + yy_destructor(yypParser,77,&yymsp[-1].minor); + yymsp[-6].minor.yy64 = yylhsminor.yy64; break; case 40: /* decl_typedef_body ::= CONST VOID pointers LPAREN indirection NAME RPAREN decl_typedef_body_fn_args */ -{ yy_destructor(yypParser,82,&yymsp[-7].minor); -#line 423 "src/parser_proc.y" +{ yy_destructor(yypParser,84,&yymsp[-7].minor); +#line 426 "src/parser_proc.y" { struct psi_decl_arg *func_ = psi_decl_arg_init( psi_decl_type_init(yymsp[-6].minor.yy0->type, yymsp[-6].minor.yy0->text), - psi_decl_var_init(yymsp[-2].minor.yy0->text, yymsp[-5].minor.yy190, 0) + psi_decl_var_init(yymsp[-2].minor.yy0->text, yymsp[-5].minor.yy296, 0) ); func_->type->token = yymsp[-6].minor.yy0; func_->var->token = yymsp[-2].minor.yy0; func_->token = yymsp[-2].minor.yy0; - yymsp[-7].minor.yy260 = psi_decl_arg_init( + yymsp[-7].minor.yy64 = psi_decl_arg_init( psi_decl_type_init(PSI_T_FUNCTION, func_->var->name), psi_decl_var_copy(func_->var) ); - yymsp[-7].minor.yy260->var->pointer_level = yymsp[-3].minor.yy190; - yymsp[-7].minor.yy260->type->token = psi_token_copy(func_->token); - yymsp[-7].minor.yy260->type->real.func = psi_decl_init(psi_decl_abi_init("default"), func_, yymsp[0].minor.yy303); + yymsp[-7].minor.yy64->var->pointer_level = yymsp[-3].minor.yy296; + yymsp[-7].minor.yy64->type->token = psi_token_copy(func_->token); + yymsp[-7].minor.yy64->type->real.func = psi_decl_init(psi_decl_abi_init("default"), func_, yymsp[0].minor.yy7); } -#line 2333 "src/parser_proc.c" - yy_destructor(yypParser,73,&yymsp[-4].minor); - yy_destructor(yypParser,75,&yymsp[-1].minor); +#line 2350 "src/parser_proc.c" + yy_destructor(yypParser,75,&yymsp[-4].minor); + yy_destructor(yypParser,77,&yymsp[-1].minor); } break; case 41: /* decl_abi ::= NAME */ -#line 439 "src/parser_proc.y" +#line 442 "src/parser_proc.y" { - yylhsminor.yy242 = psi_decl_abi_init(yymsp[0].minor.yy0->text); - yylhsminor.yy242->token = yymsp[0].minor.yy0; + yylhsminor.yy180 = psi_decl_abi_init(yymsp[0].minor.yy0->text); + yylhsminor.yy180->token = yymsp[0].minor.yy0; } -#line 2344 "src/parser_proc.c" - yymsp[0].minor.yy242 = yylhsminor.yy242; +#line 2361 "src/parser_proc.c" + yymsp[0].minor.yy180 = yylhsminor.yy180; break; case 43: /* decl_var_array_size ::= LBRACKET NUMBER RBRACKET */ -{ yy_destructor(yypParser,85,&yymsp[-2].minor); -#line 446 "src/parser_proc.y" +{ yy_destructor(yypParser,87,&yymsp[-2].minor); +#line 449 "src/parser_proc.y" { yymsp[-2].minor.yy0 = yymsp[-1].minor.yy0; } -#line 2353 "src/parser_proc.c" - yy_destructor(yypParser,86,&yymsp[0].minor); +#line 2370 "src/parser_proc.c" + yy_destructor(yypParser,88,&yymsp[0].minor); } break; case 44: /* decl_var ::= NAME decl_var_array_size */ -#line 449 "src/parser_proc.y" +#line 452 "src/parser_proc.y" { - yylhsminor.yy207 = psi_decl_var_init(yymsp[-1].minor.yy0->text, 0, yymsp[0].minor.yy0?atol(yymsp[0].minor.yy0->text):0); - yylhsminor.yy207->token = yymsp[-1].minor.yy0; + yylhsminor.yy131 = psi_decl_var_init(yymsp[-1].minor.yy0->text, 0, yymsp[0].minor.yy0?atol(yymsp[0].minor.yy0->text):0); + yylhsminor.yy131->token = yymsp[-1].minor.yy0; if (yymsp[0].minor.yy0) { free(yymsp[0].minor.yy0); } } -#line 2366 "src/parser_proc.c" - yymsp[-1].minor.yy207 = yylhsminor.yy207; +#line 2383 "src/parser_proc.c" + yymsp[-1].minor.yy131 = yylhsminor.yy131; break; case 45: /* decl_var ::= pointers NAME decl_var_array_size */ -#line 456 "src/parser_proc.y" +#line 459 "src/parser_proc.y" { - yylhsminor.yy207 = psi_decl_var_init(yymsp[-1].minor.yy0->text, yymsp[-2].minor.yy190+!!yymsp[0].minor.yy0, yymsp[0].minor.yy0?atol(yymsp[0].minor.yy0->text):0); - yylhsminor.yy207->token = yymsp[-1].minor.yy0; + yylhsminor.yy131 = psi_decl_var_init(yymsp[-1].minor.yy0->text, yymsp[-2].minor.yy296+!!yymsp[0].minor.yy0, yymsp[0].minor.yy0?atol(yymsp[0].minor.yy0->text):0); + yylhsminor.yy131->token = yymsp[-1].minor.yy0; if (yymsp[0].minor.yy0) { free(yymsp[0].minor.yy0); } } -#line 2378 "src/parser_proc.c" - yymsp[-2].minor.yy207 = yylhsminor.yy207; +#line 2395 "src/parser_proc.c" + yymsp[-2].minor.yy131 = yylhsminor.yy131; break; case 46: /* decl_vars ::= decl_var */ -#line 463 "src/parser_proc.y" +#line 466 "src/parser_proc.y" { - yylhsminor.yy303 = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_decl_var_free), - &yymsp[0].minor.yy207); + yylhsminor.yy7 = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_decl_var_free), + &yymsp[0].minor.yy131); } -#line 2387 "src/parser_proc.c" - yymsp[0].minor.yy303 = yylhsminor.yy303; +#line 2404 "src/parser_proc.c" + yymsp[0].minor.yy7 = yylhsminor.yy7; break; case 47: /* decl_vars ::= decl_vars COMMA decl_var */ -#line 467 "src/parser_proc.y" +#line 470 "src/parser_proc.y" { - yylhsminor.yy303 = psi_plist_add(yymsp[-2].minor.yy303, &yymsp[0].minor.yy207); + yylhsminor.yy7 = psi_plist_add(yymsp[-2].minor.yy7, &yymsp[0].minor.yy131); } -#line 2395 "src/parser_proc.c" - yy_destructor(yypParser,74,&yymsp[-1].minor); - yymsp[-2].minor.yy303 = yylhsminor.yy303; +#line 2412 "src/parser_proc.c" + yy_destructor(yypParser,76,&yymsp[-1].minor); + yymsp[-2].minor.yy7 = yylhsminor.yy7; break; case 48: /* decl_arg ::= const_decl_type decl_var */ -#line 470 "src/parser_proc.y" +#line 473 "src/parser_proc.y" { - yylhsminor.yy260 = psi_decl_arg_init(yymsp[-1].minor.yy152, yymsp[0].minor.yy207); + yylhsminor.yy64 = psi_decl_arg_init(yymsp[-1].minor.yy182, yymsp[0].minor.yy131); } -#line 2404 "src/parser_proc.c" - yymsp[-1].minor.yy260 = yylhsminor.yy260; +#line 2421 "src/parser_proc.c" + yymsp[-1].minor.yy64 = yylhsminor.yy64; break; case 49: /* decl_typedef_body ::= const_decl_type indirection LPAREN indirection NAME RPAREN decl_typedef_body_fn_args */ -#line 473 "src/parser_proc.y" +#line 476 "src/parser_proc.y" { struct psi_decl_arg *func_ = psi_decl_arg_init( - yymsp[-6].minor.yy152, - psi_decl_var_init(yymsp[-2].minor.yy0->text, yymsp[-5].minor.yy190, 0) + yymsp[-6].minor.yy182, + psi_decl_var_init(yymsp[-2].minor.yy0->text, yymsp[-5].minor.yy296, 0) ); func_->var->token = yymsp[-2].minor.yy0; func_->token = yymsp[-2].minor.yy0; - yylhsminor.yy260 = psi_decl_arg_init( + yylhsminor.yy64 = psi_decl_arg_init( psi_decl_type_init(PSI_T_FUNCTION, func_->var->name), psi_decl_var_copy(func_->var) ); - yylhsminor.yy260->var->pointer_level = yymsp[-3].minor.yy190; - yylhsminor.yy260->type->token = psi_token_copy(func_->token); - yylhsminor.yy260->type->real.func = psi_decl_init(psi_decl_abi_init("default"), func_, yymsp[0].minor.yy303); + yylhsminor.yy64->var->pointer_level = yymsp[-3].minor.yy296; + yylhsminor.yy64->type->token = psi_token_copy(func_->token); + yylhsminor.yy64->type->real.func = psi_decl_init(psi_decl_abi_init("default"), func_, yymsp[0].minor.yy7); } -#line 2424 "src/parser_proc.c" - yy_destructor(yypParser,73,&yymsp[-4].minor); - yy_destructor(yypParser,75,&yymsp[-1].minor); - yymsp[-6].minor.yy260 = yylhsminor.yy260; +#line 2441 "src/parser_proc.c" + yy_destructor(yypParser,75,&yymsp[-4].minor); + yy_destructor(yypParser,77,&yymsp[-1].minor); + yymsp[-6].minor.yy64 = yylhsminor.yy64; break; case 50: /* decl_arg ::= VOID pointers NAME */ -#line 488 "src/parser_proc.y" +#line 491 "src/parser_proc.y" { - yylhsminor.yy260 = psi_decl_arg_init( + yylhsminor.yy64 = psi_decl_arg_init( psi_decl_type_init(yymsp[-2].minor.yy0->type, yymsp[-2].minor.yy0->text), - psi_decl_var_init(yymsp[0].minor.yy0->text, yymsp[-1].minor.yy190, 0) + psi_decl_var_init(yymsp[0].minor.yy0->text, yymsp[-1].minor.yy296, 0) ); - yylhsminor.yy260->type->token = yymsp[-2].minor.yy0; - yylhsminor.yy260->var->token = yymsp[0].minor.yy0; - yylhsminor.yy260->token = yymsp[0].minor.yy0; + yylhsminor.yy64->type->token = yymsp[-2].minor.yy0; + yylhsminor.yy64->var->token = yymsp[0].minor.yy0; + yylhsminor.yy64->token = yymsp[0].minor.yy0; } -#line 2440 "src/parser_proc.c" - yymsp[-2].minor.yy260 = yylhsminor.yy260; +#line 2457 "src/parser_proc.c" + yymsp[-2].minor.yy64 = yylhsminor.yy64; break; case 51: /* decl_arg ::= CONST VOID pointers NAME */ -{ yy_destructor(yypParser,82,&yymsp[-3].minor); -#line 497 "src/parser_proc.y" +{ yy_destructor(yypParser,84,&yymsp[-3].minor); +#line 500 "src/parser_proc.y" { - yymsp[-3].minor.yy260 = psi_decl_arg_init( + yymsp[-3].minor.yy64 = psi_decl_arg_init( psi_decl_type_init(yymsp[-2].minor.yy0->type, yymsp[-2].minor.yy0->text), - psi_decl_var_init(yymsp[0].minor.yy0->text, yymsp[-1].minor.yy190, 0) + psi_decl_var_init(yymsp[0].minor.yy0->text, yymsp[-1].minor.yy296, 0) ); - yymsp[-3].minor.yy260->type->token = yymsp[-2].minor.yy0; - yymsp[-3].minor.yy260->var->token = yymsp[0].minor.yy0; - yymsp[-3].minor.yy260->token = yymsp[0].minor.yy0; + yymsp[-3].minor.yy64->type->token = yymsp[-2].minor.yy0; + yymsp[-3].minor.yy64->var->token = yymsp[0].minor.yy0; + yymsp[-3].minor.yy64->token = yymsp[0].minor.yy0; } -#line 2455 "src/parser_proc.c" +#line 2472 "src/parser_proc.c" } break; case 52: /* decl_args ::= */ -#line 506 "src/parser_proc.y" +#line 509 "src/parser_proc.y" { - yymsp[1].minor.yy303 = NULL; + yymsp[1].minor.yy7 = NULL; } -#line 2463 "src/parser_proc.c" +#line 2480 "src/parser_proc.c" break; case 53: /* decl_args ::= VOID */ { yy_destructor(yypParser,57,&yymsp[0].minor); -#line 509 "src/parser_proc.y" +#line 512 "src/parser_proc.y" { - yymsp[0].minor.yy303 = NULL; + yymsp[0].minor.yy7 = NULL; } -#line 2471 "src/parser_proc.c" +#line 2488 "src/parser_proc.c" } break; case 54: /* decl_args ::= decl_arg */ case 56: /* struct_args ::= struct_arg */ yytestcase(yyruleno==56); -#line 512 "src/parser_proc.y" +#line 515 "src/parser_proc.y" { - yylhsminor.yy303 = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_decl_arg_free), - &yymsp[0].minor.yy260); + yylhsminor.yy7 = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_decl_arg_free), + &yymsp[0].minor.yy64); } -#line 2481 "src/parser_proc.c" - yymsp[0].minor.yy303 = yylhsminor.yy303; +#line 2498 "src/parser_proc.c" + yymsp[0].minor.yy7 = yylhsminor.yy7; break; case 55: /* decl_args ::= decl_args COMMA decl_arg */ -#line 516 "src/parser_proc.y" +#line 519 "src/parser_proc.y" { - yylhsminor.yy303 = psi_plist_add(yymsp[-2].minor.yy303, &yymsp[0].minor.yy260); + yylhsminor.yy7 = psi_plist_add(yymsp[-2].minor.yy7, &yymsp[0].minor.yy64); } -#line 2489 "src/parser_proc.c" - yy_destructor(yypParser,74,&yymsp[-1].minor); - yymsp[-2].minor.yy303 = yylhsminor.yy303; +#line 2506 "src/parser_proc.c" + yy_destructor(yypParser,76,&yymsp[-1].minor); + yymsp[-2].minor.yy7 = yylhsminor.yy7; break; case 57: /* struct_args ::= struct_args struct_arg */ -#line 523 "src/parser_proc.y" +#line 526 "src/parser_proc.y" { - yylhsminor.yy303 = psi_plist_add(yymsp[-1].minor.yy303, &yymsp[0].minor.yy260); + yylhsminor.yy7 = psi_plist_add(yymsp[-1].minor.yy7, &yymsp[0].minor.yy64); } -#line 2498 "src/parser_proc.c" - yymsp[-1].minor.yy303 = yylhsminor.yy303; +#line 2515 "src/parser_proc.c" + yymsp[-1].minor.yy7 = yylhsminor.yy7; break; case 58: /* struct_arg ::= decl_typedef_body_ex EOS */ -#line 526 "src/parser_proc.y" +#line 529 "src/parser_proc.y" { - yylhsminor.yy260 = yymsp[-1].minor.yy260; - switch (yymsp[-1].minor.yy260->type->type) { + yylhsminor.yy64 = yymsp[-1].minor.yy64; + switch (yymsp[-1].minor.yy64->type->type) { case PSI_T_STRUCT: - if (yymsp[-1].minor.yy260->type->real.strct) { + if (yymsp[-1].minor.yy64->type->real.strct) { if (!P->structs) { P->structs = psi_plist_init((psi_plist_dtor) psi_decl_struct_free); } - P->structs = psi_plist_add(P->structs, &yymsp[-1].minor.yy260->type->real.strct); + P->structs = psi_plist_add(P->structs, &yymsp[-1].minor.yy64->type->real.strct); } break; case PSI_T_UNION: - if (yymsp[-1].minor.yy260->type->real.unn) { + if (yymsp[-1].minor.yy64->type->real.unn) { if (!P->unions) { P->unions = psi_plist_init((psi_plist_dtor) psi_decl_union_free); } - P->unions = psi_plist_add(P->unions, &yymsp[-1].minor.yy260->type->real.unn); + P->unions = psi_plist_add(P->unions, &yymsp[-1].minor.yy64->type->real.unn); } break; case PSI_T_ENUM: - if (yymsp[-1].minor.yy260->type->real.enm) { + if (yymsp[-1].minor.yy64->type->real.enm) { if (!P->enums) { P->enums = psi_plist_init((psi_plist_dtor) psi_decl_enum_free); } - P->enums = psi_plist_add(P->enums, &yymsp[-1].minor.yy260->type->real.enm); + P->enums = psi_plist_add(P->enums, &yymsp[-1].minor.yy64->type->real.enm); } break; } } -#line 2532 "src/parser_proc.c" - yy_destructor(yypParser,71,&yymsp[0].minor); - yymsp[-1].minor.yy260 = yylhsminor.yy260; +#line 2549 "src/parser_proc.c" + yy_destructor(yypParser,73,&yymsp[0].minor); + yymsp[-1].minor.yy64 = yylhsminor.yy64; break; case 59: /* struct_arg ::= decl_arg decl_layout EOS */ -#line 555 "src/parser_proc.y" +#line 558 "src/parser_proc.y" { - yymsp[-2].minor.yy260->layout = yymsp[-1].minor.yy81; - yylhsminor.yy260 = yymsp[-2].minor.yy260; + yymsp[-2].minor.yy64->layout = yymsp[-1].minor.yy221; + yylhsminor.yy64 = yymsp[-2].minor.yy64; } -#line 2542 "src/parser_proc.c" - yy_destructor(yypParser,71,&yymsp[0].minor); - yymsp[-2].minor.yy260 = yylhsminor.yy260; +#line 2559 "src/parser_proc.c" + yy_destructor(yypParser,73,&yymsp[0].minor); + yymsp[-2].minor.yy64 = yylhsminor.yy64; break; case 60: /* decl_layout ::= */ -#line 559 "src/parser_proc.y" +#line 562 "src/parser_proc.y" { - yymsp[1].minor.yy81 = NULL; + yymsp[1].minor.yy221 = NULL; } -#line 2551 "src/parser_proc.c" +#line 2568 "src/parser_proc.c" break; case 61: /* decl_layout ::= COLON COLON LPAREN NUMBER COMMA NUMBER RPAREN */ -{ yy_destructor(yypParser,72,&yymsp[-6].minor); -#line 562 "src/parser_proc.y" +{ yy_destructor(yypParser,74,&yymsp[-6].minor); +#line 565 "src/parser_proc.y" { - yymsp[-6].minor.yy81 = psi_layout_init(atol(yymsp[-3].minor.yy0->text), atol(yymsp[-1].minor.yy0->text)); + yymsp[-6].minor.yy221 = psi_layout_init(atol(yymsp[-3].minor.yy0->text), atol(yymsp[-1].minor.yy0->text)); free(yymsp[-3].minor.yy0); free(yymsp[-1].minor.yy0); } -#line 2561 "src/parser_proc.c" - yy_destructor(yypParser,72,&yymsp[-5].minor); - yy_destructor(yypParser,73,&yymsp[-4].minor); - yy_destructor(yypParser,74,&yymsp[-2].minor); - yy_destructor(yypParser,75,&yymsp[0].minor); +#line 2578 "src/parser_proc.c" + yy_destructor(yypParser,74,&yymsp[-5].minor); + yy_destructor(yypParser,75,&yymsp[-4].minor); + yy_destructor(yypParser,76,&yymsp[-2].minor); + yy_destructor(yypParser,77,&yymsp[0].minor); } break; case 63: /* decl_scalar_type ::= SHORT decl_scalar_type_short */ case 67: /* decl_scalar_type ::= LONG decl_scalar_type_long */ yytestcase(yyruleno==67); case 70: /* decl_scalar_type_long ::= LONG decl_scalar_type_long_long */ yytestcase(yyruleno==70); -#line 570 "src/parser_proc.y" +#line 573 "src/parser_proc.y" { if (yymsp[0].minor.yy0) { yylhsminor.yy0 = psi_token_cat(2, yymsp[-1].minor.yy0, yymsp[0].minor.yy0); @@ -2577,749 +2594,767 @@ static void yy_reduce( yylhsminor.yy0 = yymsp[-1].minor.yy0; } } -#line 2581 "src/parser_proc.c" +#line 2598 "src/parser_proc.c" yymsp[-1].minor.yy0 = yylhsminor.yy0; break; case 73: /* decl_type ::= UNSIGNED decl_scalar_type */ case 74: /* decl_type ::= SIGNED decl_scalar_type */ yytestcase(yyruleno==74); -#line 618 "src/parser_proc.y" +#line 621 "src/parser_proc.y" { struct psi_token *T = psi_token_cat(2, yymsp[-1].minor.yy0, yymsp[0].minor.yy0); - yylhsminor.yy152 = psi_decl_type_init(T->type, T->text); - yylhsminor.yy152->token = T; + yylhsminor.yy182 = psi_decl_type_init(T->type, T->text); + yylhsminor.yy182->token = T; free(yymsp[-1].minor.yy0); free(yymsp[0].minor.yy0); } -#line 2594 "src/parser_proc.c" - yymsp[-1].minor.yy152 = yylhsminor.yy152; +#line 2611 "src/parser_proc.c" + yymsp[-1].minor.yy182 = yylhsminor.yy182; break; case 75: /* decl_type ::= UNSIGNED */ case 76: /* decl_type ::= SIGNED */ yytestcase(yyruleno==76); -#line 632 "src/parser_proc.y" +#line 635 "src/parser_proc.y" { - yylhsminor.yy152 = psi_decl_type_init(PSI_T_NAME, yymsp[0].minor.yy0->text); - yylhsminor.yy152->token = yymsp[0].minor.yy0; + yylhsminor.yy182 = psi_decl_type_init(PSI_T_NAME, yymsp[0].minor.yy0->text); + yylhsminor.yy182->token = yymsp[0].minor.yy0; } -#line 2604 "src/parser_proc.c" - yymsp[0].minor.yy152 = yylhsminor.yy152; +#line 2621 "src/parser_proc.c" + yymsp[0].minor.yy182 = yylhsminor.yy182; break; case 77: /* decl_type ::= decl_scalar_type */ case 81: /* decl_type ::= FLOAT|DOUBLE|INT8|UINT8|INT16|UINT16|INT32|UINT32|INT64|UINT64|NAME */ yytestcase(yyruleno==81); -#line 640 "src/parser_proc.y" +#line 643 "src/parser_proc.y" { - yylhsminor.yy152 = psi_decl_type_init(yymsp[0].minor.yy0->type, yymsp[0].minor.yy0->text); - yylhsminor.yy152->token = yymsp[0].minor.yy0; + yylhsminor.yy182 = psi_decl_type_init(yymsp[0].minor.yy0->type, yymsp[0].minor.yy0->text); + yylhsminor.yy182->token = yymsp[0].minor.yy0; } -#line 2614 "src/parser_proc.c" - yymsp[0].minor.yy152 = yylhsminor.yy152; +#line 2631 "src/parser_proc.c" + yymsp[0].minor.yy182 = yylhsminor.yy182; break; case 78: /* decl_type ::= STRUCT NAME */ case 79: /* decl_type ::= UNION NAME */ yytestcase(yyruleno==79); case 80: /* decl_type ::= ENUM NAME */ yytestcase(yyruleno==80); -#line 644 "src/parser_proc.y" +#line 647 "src/parser_proc.y" { - yylhsminor.yy152 = psi_decl_type_init(yymsp[-1].minor.yy0->type, yymsp[0].minor.yy0->text); - yylhsminor.yy152->token = yymsp[0].minor.yy0; + yylhsminor.yy182 = psi_decl_type_init(yymsp[-1].minor.yy0->type, yymsp[0].minor.yy0->text); + yylhsminor.yy182->token = yymsp[0].minor.yy0; free(yymsp[-1].minor.yy0); } -#line 2626 "src/parser_proc.c" - yymsp[-1].minor.yy152 = yylhsminor.yy152; +#line 2643 "src/parser_proc.c" + yymsp[-1].minor.yy182 = yylhsminor.yy182; break; case 82: /* const_decl_type ::= decl_type */ -#line 663 "src/parser_proc.y" +#line 666 "src/parser_proc.y" { - yylhsminor.yy152 = yymsp[0].minor.yy152; + yylhsminor.yy182 = yymsp[0].minor.yy182; } -#line 2634 "src/parser_proc.c" - yymsp[0].minor.yy152 = yylhsminor.yy152; +#line 2651 "src/parser_proc.c" + yymsp[0].minor.yy182 = yylhsminor.yy182; break; case 83: /* const_decl_type ::= CONST decl_type */ -{ yy_destructor(yypParser,82,&yymsp[-1].minor); -#line 666 "src/parser_proc.y" +{ yy_destructor(yypParser,84,&yymsp[-1].minor); +#line 669 "src/parser_proc.y" { - yymsp[-1].minor.yy152 = yymsp[0].minor.yy152; + yymsp[-1].minor.yy182 = yymsp[0].minor.yy182; } -#line 2643 "src/parser_proc.c" +#line 2660 "src/parser_proc.c" } break; case 84: /* impl ::= impl_func LBRACE impl_stmts RBRACE */ -#line 669 "src/parser_proc.y" +#line 672 "src/parser_proc.y" { - yylhsminor.yy49 = psi_impl_init(yymsp[-3].minor.yy120, yymsp[-1].minor.yy303); + yylhsminor.yy303 = psi_impl_init(yymsp[-3].minor.yy226, yymsp[-1].minor.yy7); } -#line 2651 "src/parser_proc.c" - yy_destructor(yypParser,79,&yymsp[-2].minor); - yy_destructor(yypParser,80,&yymsp[0].minor); - yymsp[-3].minor.yy49 = yylhsminor.yy49; +#line 2668 "src/parser_proc.c" + yy_destructor(yypParser,81,&yymsp[-2].minor); + yy_destructor(yypParser,82,&yymsp[0].minor); + yymsp[-3].minor.yy303 = yylhsminor.yy303; break; case 85: /* impl ::= STATIC impl_func LBRACE impl_stmts RBRACE */ -{ yy_destructor(yypParser,92,&yymsp[-4].minor); -#line 672 "src/parser_proc.y" +{ yy_destructor(yypParser,94,&yymsp[-4].minor); +#line 675 "src/parser_proc.y" { - yymsp[-3].minor.yy120->static_memory = 1; - yymsp[-4].minor.yy49 = psi_impl_init(yymsp[-3].minor.yy120, yymsp[-1].minor.yy303); + yymsp[-3].minor.yy226->static_memory = 1; + yymsp[-4].minor.yy303 = psi_impl_init(yymsp[-3].minor.yy226, yymsp[-1].minor.yy7); } -#line 2663 "src/parser_proc.c" - yy_destructor(yypParser,79,&yymsp[-2].minor); - yy_destructor(yypParser,80,&yymsp[0].minor); +#line 2680 "src/parser_proc.c" + yy_destructor(yypParser,81,&yymsp[-2].minor); + yy_destructor(yypParser,82,&yymsp[0].minor); } break; case 86: /* impl_func ::= FUNCTION reference NSNAME LPAREN RPAREN COLON impl_type */ -{ yy_destructor(yypParser,93,&yymsp[-6].minor); -#line 676 "src/parser_proc.y" +{ yy_destructor(yypParser,95,&yymsp[-6].minor); +#line 679 "src/parser_proc.y" { - yymsp[-6].minor.yy120 = psi_impl_func_init(yymsp[-4].minor.yy0->text, NULL, yymsp[0].minor.yy142); - yymsp[-6].minor.yy120->token = yymsp[-4].minor.yy0; - yymsp[-6].minor.yy120->return_reference = yymsp[-5].minor.yy273; + yymsp[-6].minor.yy226 = psi_impl_func_init(yymsp[-4].minor.yy0->text, NULL, yymsp[0].minor.yy40); + yymsp[-6].minor.yy226->token = yymsp[-4].minor.yy0; + yymsp[-6].minor.yy226->return_reference = yymsp[-5].minor.yy247; } -#line 2676 "src/parser_proc.c" - yy_destructor(yypParser,73,&yymsp[-3].minor); - yy_destructor(yypParser,75,&yymsp[-2].minor); - yy_destructor(yypParser,72,&yymsp[-1].minor); +#line 2693 "src/parser_proc.c" + yy_destructor(yypParser,75,&yymsp[-3].minor); + yy_destructor(yypParser,77,&yymsp[-2].minor); + yy_destructor(yypParser,74,&yymsp[-1].minor); } break; case 87: /* impl_func ::= FUNCTION reference NSNAME LPAREN impl_args RPAREN COLON impl_type */ -{ yy_destructor(yypParser,93,&yymsp[-7].minor); -#line 681 "src/parser_proc.y" +{ yy_destructor(yypParser,95,&yymsp[-7].minor); +#line 684 "src/parser_proc.y" { - yymsp[-7].minor.yy120 = psi_impl_func_init(yymsp[-5].minor.yy0->text, yymsp[-3].minor.yy303, yymsp[0].minor.yy142); - yymsp[-7].minor.yy120->token = yymsp[-5].minor.yy0; - yymsp[-7].minor.yy120->return_reference = yymsp[-6].minor.yy273; + yymsp[-7].minor.yy226 = psi_impl_func_init(yymsp[-5].minor.yy0->text, yymsp[-3].minor.yy7, yymsp[0].minor.yy40); + yymsp[-7].minor.yy226->token = yymsp[-5].minor.yy0; + yymsp[-7].minor.yy226->return_reference = yymsp[-6].minor.yy247; } -#line 2690 "src/parser_proc.c" - yy_destructor(yypParser,73,&yymsp[-4].minor); - yy_destructor(yypParser,75,&yymsp[-2].minor); - yy_destructor(yypParser,72,&yymsp[-1].minor); +#line 2707 "src/parser_proc.c" + yy_destructor(yypParser,75,&yymsp[-4].minor); + yy_destructor(yypParser,77,&yymsp[-2].minor); + yy_destructor(yypParser,74,&yymsp[-1].minor); } break; case 88: /* impl_func ::= FUNCTION reference NSNAME LPAREN impl_args COMMA impl_type reference ELLIPSIS DOLLAR_NAME RPAREN COLON impl_type */ -{ yy_destructor(yypParser,93,&yymsp[-12].minor); -#line 686 "src/parser_proc.y" +{ yy_destructor(yypParser,95,&yymsp[-12].minor); +#line 689 "src/parser_proc.y" { - yymsp[-12].minor.yy120 = psi_impl_func_init(yymsp[-10].minor.yy0->text, yymsp[-8].minor.yy303, yymsp[0].minor.yy142); - yymsp[-12].minor.yy120->token = yymsp[-10].minor.yy0; - yymsp[-12].minor.yy120->return_reference = yymsp[-11].minor.yy273; - yymsp[-12].minor.yy120->vararg = psi_impl_arg_init(yymsp[-6].minor.yy142, psi_impl_var_init(yymsp[-3].minor.yy0->text, yymsp[-5].minor.yy273), NULL); + yymsp[-12].minor.yy226 = psi_impl_func_init(yymsp[-10].minor.yy0->text, yymsp[-8].minor.yy7, yymsp[0].minor.yy40); + yymsp[-12].minor.yy226->token = yymsp[-10].minor.yy0; + yymsp[-12].minor.yy226->return_reference = yymsp[-11].minor.yy247; + yymsp[-12].minor.yy226->vararg = psi_impl_arg_init(yymsp[-6].minor.yy40, psi_impl_var_init(yymsp[-3].minor.yy0->text, yymsp[-5].minor.yy247), NULL); free(yymsp[-3].minor.yy0); } -#line 2706 "src/parser_proc.c" - yy_destructor(yypParser,73,&yymsp[-9].minor); - yy_destructor(yypParser,74,&yymsp[-7].minor); - yy_destructor(yypParser,84,&yymsp[-4].minor); - yy_destructor(yypParser,75,&yymsp[-2].minor); - yy_destructor(yypParser,72,&yymsp[-1].minor); +#line 2723 "src/parser_proc.c" + yy_destructor(yypParser,75,&yymsp[-9].minor); + yy_destructor(yypParser,76,&yymsp[-7].minor); + yy_destructor(yypParser,86,&yymsp[-4].minor); + yy_destructor(yypParser,77,&yymsp[-2].minor); + yy_destructor(yypParser,74,&yymsp[-1].minor); } break; case 89: /* impl_def_val ::= NULL|NUMBER|TRUE|FALSE|QUOTED_STRING */ -#line 693 "src/parser_proc.y" +#line 696 "src/parser_proc.y" { - yylhsminor.yy21 = psi_impl_def_val_init(yymsp[0].minor.yy0->type, yymsp[0].minor.yy0->text); - yylhsminor.yy21->token = yymsp[0].minor.yy0; + yylhsminor.yy319 = psi_impl_def_val_init(yymsp[0].minor.yy0->type, yymsp[0].minor.yy0->text); + yylhsminor.yy319->token = yymsp[0].minor.yy0; } -#line 2720 "src/parser_proc.c" - yymsp[0].minor.yy21 = yylhsminor.yy21; +#line 2737 "src/parser_proc.c" + yymsp[0].minor.yy319 = yylhsminor.yy319; break; case 90: /* impl_var ::= reference DOLLAR_NAME */ -#line 697 "src/parser_proc.y" +#line 700 "src/parser_proc.y" { - yylhsminor.yy185 = psi_impl_var_init(yymsp[0].minor.yy0->text, yymsp[-1].minor.yy273); - yylhsminor.yy185->token = yymsp[0].minor.yy0; + yylhsminor.yy123 = psi_impl_var_init(yymsp[0].minor.yy0->text, yymsp[-1].minor.yy247); + yylhsminor.yy123->token = yymsp[0].minor.yy0; } -#line 2729 "src/parser_proc.c" - yymsp[-1].minor.yy185 = yylhsminor.yy185; +#line 2746 "src/parser_proc.c" + yymsp[-1].minor.yy123 = yylhsminor.yy123; break; case 91: /* impl_type ::= VOID|MIXED|BOOL|INT|FLOAT|STRING|ARRAY|OBJECT|CALLABLE */ -#line 701 "src/parser_proc.y" +#line 704 "src/parser_proc.y" { - yylhsminor.yy142 = psi_impl_type_init(yymsp[0].minor.yy0->type, yymsp[0].minor.yy0->text); + yylhsminor.yy40 = psi_impl_type_init(yymsp[0].minor.yy0->type, yymsp[0].minor.yy0->text); free(yymsp[0].minor.yy0); } -#line 2738 "src/parser_proc.c" - yymsp[0].minor.yy142 = yylhsminor.yy142; +#line 2755 "src/parser_proc.c" + yymsp[0].minor.yy40 = yylhsminor.yy40; break; case 92: /* impl_arg ::= impl_type impl_var */ -#line 705 "src/parser_proc.y" +#line 708 "src/parser_proc.y" { - yylhsminor.yy238 = psi_impl_arg_init(yymsp[-1].minor.yy142, yymsp[0].minor.yy185, NULL); + yylhsminor.yy56 = psi_impl_arg_init(yymsp[-1].minor.yy40, yymsp[0].minor.yy123, NULL); } -#line 2746 "src/parser_proc.c" - yymsp[-1].minor.yy238 = yylhsminor.yy238; +#line 2763 "src/parser_proc.c" + yymsp[-1].minor.yy56 = yylhsminor.yy56; break; case 93: /* impl_arg ::= impl_type impl_var EQUALS impl_def_val */ -#line 708 "src/parser_proc.y" +#line 711 "src/parser_proc.y" { - yylhsminor.yy238 = psi_impl_arg_init(yymsp[-3].minor.yy142, yymsp[-2].minor.yy185, yymsp[0].minor.yy21); + yylhsminor.yy56 = psi_impl_arg_init(yymsp[-3].minor.yy40, yymsp[-2].minor.yy123, yymsp[0].minor.yy319); } -#line 2754 "src/parser_proc.c" - yy_destructor(yypParser,81,&yymsp[-1].minor); - yymsp[-3].minor.yy238 = yylhsminor.yy238; +#line 2771 "src/parser_proc.c" + yy_destructor(yypParser,83,&yymsp[-1].minor); + yymsp[-3].minor.yy56 = yylhsminor.yy56; break; case 94: /* impl_args ::= impl_arg */ -#line 711 "src/parser_proc.y" +#line 714 "src/parser_proc.y" { - yylhsminor.yy303 = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_impl_arg_free), - &yymsp[0].minor.yy238); + yylhsminor.yy7 = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_impl_arg_free), + &yymsp[0].minor.yy56); } -#line 2764 "src/parser_proc.c" - yymsp[0].minor.yy303 = yylhsminor.yy303; +#line 2781 "src/parser_proc.c" + yymsp[0].minor.yy7 = yylhsminor.yy7; break; case 95: /* impl_args ::= impl_args COMMA impl_arg */ -#line 715 "src/parser_proc.y" +#line 718 "src/parser_proc.y" { - yylhsminor.yy303 = psi_plist_add(yymsp[-2].minor.yy303, &yymsp[0].minor.yy238); + yylhsminor.yy7 = psi_plist_add(yymsp[-2].minor.yy7, &yymsp[0].minor.yy56); } -#line 2772 "src/parser_proc.c" - yy_destructor(yypParser,74,&yymsp[-1].minor); - yymsp[-2].minor.yy303 = yylhsminor.yy303; +#line 2789 "src/parser_proc.c" + yy_destructor(yypParser,76,&yymsp[-1].minor); + yymsp[-2].minor.yy7 = yylhsminor.yy7; break; case 96: /* impl_stmts ::= impl_stmt */ -#line 718 "src/parser_proc.y" +#line 721 "src/parser_proc.y" { - yylhsminor.yy303 = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_impl_stmt_free), - &yymsp[0].minor.yy38); + yylhsminor.yy7 = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_impl_stmt_free), + &yymsp[0].minor.yy282); } -#line 2782 "src/parser_proc.c" - yymsp[0].minor.yy303 = yylhsminor.yy303; +#line 2799 "src/parser_proc.c" + yymsp[0].minor.yy7 = yylhsminor.yy7; break; case 97: /* impl_stmts ::= impl_stmts impl_stmt */ -#line 722 "src/parser_proc.y" +#line 725 "src/parser_proc.y" { - yylhsminor.yy303 = psi_plist_add(yymsp[-1].minor.yy303, &yymsp[0].minor.yy38); + yylhsminor.yy7 = psi_plist_add(yymsp[-1].minor.yy7, &yymsp[0].minor.yy282); } -#line 2790 "src/parser_proc.c" - yymsp[-1].minor.yy303 = yylhsminor.yy303; +#line 2807 "src/parser_proc.c" + yymsp[-1].minor.yy7 = yylhsminor.yy7; break; case 98: /* impl_stmt ::= return_stmt */ -#line 725 "src/parser_proc.y" +#line 728 "src/parser_proc.y" { - yylhsminor.yy38 = (struct psi_token**) yymsp[0].minor.yy130; + yylhsminor.yy282 = (struct psi_token**) yymsp[0].minor.yy258; } -#line 2798 "src/parser_proc.c" - yymsp[0].minor.yy38 = yylhsminor.yy38; +#line 2815 "src/parser_proc.c" + yymsp[0].minor.yy282 = yylhsminor.yy282; break; case 99: /* impl_stmt ::= let_stmt */ -#line 728 "src/parser_proc.y" +#line 731 "src/parser_proc.y" { - yylhsminor.yy38 = (struct psi_token**) yymsp[0].minor.yy139; + yylhsminor.yy282 = (struct psi_token**) yymsp[0].minor.yy138; } -#line 2806 "src/parser_proc.c" - yymsp[0].minor.yy38 = yylhsminor.yy38; +#line 2823 "src/parser_proc.c" + yymsp[0].minor.yy282 = yylhsminor.yy282; break; case 100: /* impl_stmt ::= set_stmt */ -#line 731 "src/parser_proc.y" +#line 734 "src/parser_proc.y" { - yylhsminor.yy38 = (struct psi_token**) yymsp[0].minor.yy226; + yylhsminor.yy282 = (struct psi_token**) yymsp[0].minor.yy300; } -#line 2814 "src/parser_proc.c" - yymsp[0].minor.yy38 = yylhsminor.yy38; +#line 2831 "src/parser_proc.c" + yymsp[0].minor.yy282 = yylhsminor.yy282; break; - case 101: /* impl_stmt ::= free_stmt */ -#line 734 "src/parser_proc.y" + case 101: /* impl_stmt ::= assert_stmt */ +#line 737 "src/parser_proc.y" { - yylhsminor.yy38 = (struct psi_token**) yymsp[0].minor.yy76; + yylhsminor.yy282 = (struct psi_token **) yymsp[0].minor.yy146; } -#line 2822 "src/parser_proc.c" - yymsp[0].minor.yy38 = yylhsminor.yy38; +#line 2839 "src/parser_proc.c" + yymsp[0].minor.yy282 = yylhsminor.yy282; break; - case 102: /* number ::= NUMBER|NSNAME */ -#line 737 "src/parser_proc.y" + case 102: /* impl_stmt ::= free_stmt */ +#line 740 "src/parser_proc.y" { - yylhsminor.yy160 = psi_number_init(yymsp[0].minor.yy0->type, yymsp[0].minor.yy0->text); - yylhsminor.yy160->token = yymsp[0].minor.yy0; + yylhsminor.yy282 = (struct psi_token**) yymsp[0].minor.yy102; } -#line 2831 "src/parser_proc.c" - yymsp[0].minor.yy160 = yylhsminor.yy160; +#line 2847 "src/parser_proc.c" + yymsp[0].minor.yy282 = yylhsminor.yy282; break; - case 103: /* number ::= decl_var */ -#line 741 "src/parser_proc.y" + case 103: /* number ::= NUMBER|NSNAME */ +#line 743 "src/parser_proc.y" { - yylhsminor.yy160 = psi_number_init(PSI_T_NAME, yymsp[0].minor.yy207); - yylhsminor.yy160->token = psi_token_copy(yymsp[0].minor.yy207->token); + yylhsminor.yy66 = psi_number_init(yymsp[0].minor.yy0->type, yymsp[0].minor.yy0->text); + yylhsminor.yy66->token = yymsp[0].minor.yy0; } -#line 2840 "src/parser_proc.c" - yymsp[0].minor.yy160 = yylhsminor.yy160; +#line 2856 "src/parser_proc.c" + yymsp[0].minor.yy66 = yylhsminor.yy66; break; - case 104: /* num_exp ::= number */ -#line 745 "src/parser_proc.y" + case 104: /* number ::= decl_var */ +#line 747 "src/parser_proc.y" { - yylhsminor.yy39 = psi_num_exp_init_num(yymsp[0].minor.yy160); - yylhsminor.yy39->token = psi_token_copy(yymsp[0].minor.yy160->token); + yylhsminor.yy66 = psi_number_init(PSI_T_NAME, yymsp[0].minor.yy131); + yylhsminor.yy66->token = psi_token_copy(yymsp[0].minor.yy131->token); } -#line 2849 "src/parser_proc.c" - yymsp[0].minor.yy39 = yylhsminor.yy39; +#line 2865 "src/parser_proc.c" + yymsp[0].minor.yy66 = yylhsminor.yy66; break; - case 105: /* num_exp ::= LPAREN num_exp RPAREN */ -#line 749 "src/parser_proc.y" + case 105: /* num_exp ::= number */ +#line 751 "src/parser_proc.y" { - yylhsminor.yy39 = psi_num_exp_init_unary(PSI_T_LPAREN, yymsp[-1].minor.yy39); - yylhsminor.yy39->token = yymsp[-2].minor.yy0; + yylhsminor.yy124 = psi_num_exp_init_num(yymsp[0].minor.yy66); + yylhsminor.yy124->token = psi_token_copy(yymsp[0].minor.yy66->token); } -#line 2858 "src/parser_proc.c" - yy_destructor(yypParser,75,&yymsp[0].minor); - yymsp[-2].minor.yy39 = yylhsminor.yy39; +#line 2874 "src/parser_proc.c" + yymsp[0].minor.yy124 = yylhsminor.yy124; break; - case 106: /* num_exp ::= num_exp PIPE|CARET|AMPERSAND|LSHIFT|RSHIFT|PLUS|MINUS|ASTERISK|SLASH|MODULO|RCHEVR|LCHEVR|CMP_GE|CMP_LE|OR|AND|CMP_EQ|CMP_NE num_exp */ -#line 753 "src/parser_proc.y" + case 106: /* num_exp ::= LPAREN num_exp RPAREN */ +#line 755 "src/parser_proc.y" { - yylhsminor.yy39 = psi_num_exp_init_binary(yymsp[-1].minor.yy0->type, yymsp[-2].minor.yy39, yymsp[0].minor.yy39); - yylhsminor.yy39->token = yymsp[-1].minor.yy0; + yylhsminor.yy124 = psi_num_exp_init_unary(PSI_T_LPAREN, yymsp[-1].minor.yy124); + yylhsminor.yy124->token = yymsp[-2].minor.yy0; } -#line 2868 "src/parser_proc.c" - yymsp[-2].minor.yy39 = yylhsminor.yy39; +#line 2883 "src/parser_proc.c" + yy_destructor(yypParser,77,&yymsp[0].minor); + yymsp[-2].minor.yy124 = yylhsminor.yy124; break; - case 107: /* num_exp ::= TILDE|NOT|PLUS|MINUS num_exp */ -#line 757 "src/parser_proc.y" + case 107: /* num_exp ::= num_exp PIPE|CARET|AMPERSAND|LSHIFT|RSHIFT|PLUS|MINUS|ASTERISK|SLASH|MODULO|RCHEVR|LCHEVR|CMP_GE|CMP_LE|OR|AND|CMP_EQ|CMP_NE num_exp */ +#line 759 "src/parser_proc.y" { - yylhsminor.yy39 = psi_num_exp_init_unary(yymsp[-1].minor.yy0->type, yymsp[0].minor.yy39); - yylhsminor.yy39->token = yymsp[-1].minor.yy0; + yylhsminor.yy124 = psi_num_exp_init_binary(yymsp[-1].minor.yy0->type, yymsp[-2].minor.yy124, yymsp[0].minor.yy124); + yylhsminor.yy124->token = yymsp[-1].minor.yy0; } -#line 2877 "src/parser_proc.c" - yymsp[-1].minor.yy39 = yylhsminor.yy39; +#line 2893 "src/parser_proc.c" + yymsp[-2].minor.yy124 = yylhsminor.yy124; break; - case 108: /* let_exp ::= NULL */ + case 108: /* num_exp ::= TILDE|NOT|PLUS|MINUS num_exp */ +#line 763 "src/parser_proc.y" +{ + yylhsminor.yy124 = psi_num_exp_init_unary(yymsp[-1].minor.yy0->type, yymsp[0].minor.yy124); + yylhsminor.yy124->token = yymsp[-1].minor.yy0; +} +#line 2902 "src/parser_proc.c" + yymsp[-1].minor.yy124 = yylhsminor.yy124; + break; + case 109: /* let_exp ::= NULL */ { yy_destructor(yypParser,15,&yymsp[0].minor); -#line 761 "src/parser_proc.y" +#line 767 "src/parser_proc.y" { - yymsp[0].minor.yy144 = psi_let_exp_init(PSI_LET_NULL, NULL); + yymsp[0].minor.yy196 = psi_let_exp_init(PSI_LET_NULL, NULL); } -#line 2886 "src/parser_proc.c" +#line 2911 "src/parser_proc.c" } break; - case 109: /* let_exp ::= AMPERSAND NULL */ + case 110: /* let_exp ::= AMPERSAND NULL */ { yy_destructor(yypParser,23,&yymsp[-1].minor); -#line 764 "src/parser_proc.y" +#line 770 "src/parser_proc.y" { - yymsp[-1].minor.yy144 = psi_let_exp_init(PSI_LET_NULL, NULL); - yymsp[-1].minor.yy144->is_reference = 1; + yymsp[-1].minor.yy196 = psi_let_exp_init(PSI_LET_NULL, NULL); + yymsp[-1].minor.yy196->is_reference = 1; } -#line 2896 "src/parser_proc.c" +#line 2921 "src/parser_proc.c" yy_destructor(yypParser,15,&yymsp[0].minor); } break; - case 110: /* let_exp ::= let_callback */ -#line 768 "src/parser_proc.y" + case 111: /* let_exp ::= let_callback */ +#line 774 "src/parser_proc.y" { - yylhsminor.yy144 = psi_let_exp_init(PSI_LET_CALLBACK, yymsp[0].minor.yy164); + yylhsminor.yy196 = psi_let_exp_init(PSI_LET_CALLBACK, yymsp[0].minor.yy76); } -#line 2905 "src/parser_proc.c" - yymsp[0].minor.yy144 = yylhsminor.yy144; +#line 2930 "src/parser_proc.c" + yymsp[0].minor.yy196 = yylhsminor.yy196; break; - case 111: /* let_exp ::= let_calloc */ -#line 771 "src/parser_proc.y" + case 112: /* let_exp ::= let_calloc */ +#line 777 "src/parser_proc.y" { - yylhsminor.yy144 = psi_let_exp_init(PSI_LET_CALLOC, yymsp[0].minor.yy17); + yylhsminor.yy196 = psi_let_exp_init(PSI_LET_CALLOC, yymsp[0].minor.yy227); } -#line 2913 "src/parser_proc.c" - yymsp[0].minor.yy144 = yylhsminor.yy144; +#line 2938 "src/parser_proc.c" + yymsp[0].minor.yy196 = yylhsminor.yy196; break; - case 112: /* let_exp ::= AMPERSAND let_calloc */ + case 113: /* let_exp ::= AMPERSAND let_calloc */ { yy_destructor(yypParser,23,&yymsp[-1].minor); -#line 774 "src/parser_proc.y" +#line 780 "src/parser_proc.y" { - yymsp[-1].minor.yy144 = psi_let_exp_init(PSI_LET_CALLOC, yymsp[0].minor.yy17); - yymsp[-1].minor.yy144->is_reference = 1; + yymsp[-1].minor.yy196 = psi_let_exp_init(PSI_LET_CALLOC, yymsp[0].minor.yy227); + yymsp[-1].minor.yy196->is_reference = 1; } -#line 2923 "src/parser_proc.c" +#line 2948 "src/parser_proc.c" } break; - case 113: /* let_exp ::= let_func */ -#line 778 "src/parser_proc.y" + case 114: /* let_exp ::= let_func */ +#line 784 "src/parser_proc.y" { - yylhsminor.yy144 = psi_let_exp_init_ex(NULL, PSI_LET_FUNC, yymsp[0].minor.yy72); + yylhsminor.yy196 = psi_let_exp_init_ex(NULL, PSI_LET_FUNC, yymsp[0].minor.yy133); } -#line 2931 "src/parser_proc.c" - yymsp[0].minor.yy144 = yylhsminor.yy144; +#line 2956 "src/parser_proc.c" + yymsp[0].minor.yy196 = yylhsminor.yy196; break; - case 114: /* let_exp ::= AMPERSAND let_func */ + case 115: /* let_exp ::= AMPERSAND let_func */ { yy_destructor(yypParser,23,&yymsp[-1].minor); -#line 781 "src/parser_proc.y" +#line 787 "src/parser_proc.y" { - yymsp[-1].minor.yy144 = psi_let_exp_init_ex(NULL, PSI_LET_FUNC, yymsp[0].minor.yy72); - yymsp[-1].minor.yy144->is_reference = 1; + yymsp[-1].minor.yy196 = psi_let_exp_init_ex(NULL, PSI_LET_FUNC, yymsp[0].minor.yy133); + yymsp[-1].minor.yy196->is_reference = 1; } -#line 2941 "src/parser_proc.c" +#line 2966 "src/parser_proc.c" } break; - case 115: /* let_exp ::= num_exp */ -#line 785 "src/parser_proc.y" + case 116: /* let_exp ::= num_exp */ +#line 791 "src/parser_proc.y" { - yylhsminor.yy144 = psi_let_exp_init_ex(NULL, PSI_LET_NUMEXP, yymsp[0].minor.yy39); + yylhsminor.yy196 = psi_let_exp_init_ex(NULL, PSI_LET_NUMEXP, yymsp[0].minor.yy124); } -#line 2949 "src/parser_proc.c" - yymsp[0].minor.yy144 = yylhsminor.yy144; +#line 2974 "src/parser_proc.c" + yymsp[0].minor.yy196 = yylhsminor.yy196; break; - case 116: /* let_exp ::= AMPERSAND num_exp */ + case 117: /* let_exp ::= AMPERSAND num_exp */ { yy_destructor(yypParser,23,&yymsp[-1].minor); -#line 788 "src/parser_proc.y" -{ - yymsp[-1].minor.yy144 = psi_let_exp_init_ex(NULL, PSI_LET_NUMEXP, yymsp[0].minor.yy39); - yymsp[-1].minor.yy144->is_reference = 1; -} -#line 2959 "src/parser_proc.c" -} - break; - case 117: /* let_exp ::= decl_var EQUALS let_exp */ -#line 792 "src/parser_proc.y" +#line 794 "src/parser_proc.y" { - yylhsminor.yy144 = yymsp[0].minor.yy144; - yylhsminor.yy144->var = yymsp[-2].minor.yy207; + yymsp[-1].minor.yy196 = psi_let_exp_init_ex(NULL, PSI_LET_NUMEXP, yymsp[0].minor.yy124); + yymsp[-1].minor.yy196->is_reference = 1; } -#line 2968 "src/parser_proc.c" - yy_destructor(yypParser,81,&yymsp[-1].minor); - yymsp[-2].minor.yy144 = yylhsminor.yy144; - break; - case 118: /* let_stmt ::= LET let_exp EOS */ -#line 796 "src/parser_proc.y" -{ - yylhsminor.yy139 = psi_let_stmt_init(yymsp[-1].minor.yy144); - yylhsminor.yy139->token = yymsp[-2].minor.yy0; +#line 2984 "src/parser_proc.c" } -#line 2978 "src/parser_proc.c" - yy_destructor(yypParser,71,&yymsp[0].minor); - yymsp[-2].minor.yy139 = yylhsminor.yy139; break; - case 119: /* let_stmt ::= TEMP decl_var EQUALS reference decl_var EOS */ -#line 800 "src/parser_proc.y" + case 118: /* let_exp ::= decl_var EQUALS let_exp */ +#line 798 "src/parser_proc.y" { - yylhsminor.yy139 = psi_let_stmt_init(psi_let_exp_init_ex(yymsp[-4].minor.yy207, PSI_LET_TMP, yymsp[-1].minor.yy207)); - yylhsminor.yy139->token = yymsp[-5].minor.yy0; - yylhsminor.yy139->exp->is_reference = yymsp[-2].minor.yy273 ? 1 : 0; + yylhsminor.yy196 = yymsp[0].minor.yy196; + yylhsminor.yy196->var = yymsp[-2].minor.yy131; } -#line 2989 "src/parser_proc.c" - yy_destructor(yypParser,81,&yymsp[-3].minor); - yy_destructor(yypParser,71,&yymsp[0].minor); - yymsp[-5].minor.yy139 = yylhsminor.yy139; +#line 2993 "src/parser_proc.c" + yy_destructor(yypParser,83,&yymsp[-1].minor); + yymsp[-2].minor.yy196 = yylhsminor.yy196; break; - case 120: /* let_callback ::= CALLBACK callback_rval LPAREN impl_var LPAREN callback_arg_list RPAREN RPAREN */ -#line 805 "src/parser_proc.y" + case 119: /* let_stmt ::= LET let_exp EOS */ +#line 802 "src/parser_proc.y" { - yylhsminor.yy164 = psi_let_callback_init(psi_let_func_init(yymsp[-6].minor.yy0->type, yymsp[-6].minor.yy0->text, yymsp[-4].minor.yy185), yymsp[-2].minor.yy287); - yylhsminor.yy164->token = yymsp[-7].minor.yy0; - free(yymsp[-6].minor.yy0); + yylhsminor.yy138 = psi_let_stmt_init(yymsp[-1].minor.yy196); + yylhsminor.yy138->token = yymsp[-2].minor.yy0; } -#line 3001 "src/parser_proc.c" - yy_destructor(yypParser,73,&yymsp[-5].minor); - yy_destructor(yypParser,73,&yymsp[-3].minor); - yy_destructor(yypParser,75,&yymsp[-1].minor); - yy_destructor(yypParser,75,&yymsp[0].minor); - yymsp[-7].minor.yy164 = yylhsminor.yy164; +#line 3003 "src/parser_proc.c" + yy_destructor(yypParser,73,&yymsp[0].minor); + yymsp[-2].minor.yy138 = yylhsminor.yy138; break; - case 121: /* let_calloc ::= CALLOC LPAREN num_exp COMMA num_exp RPAREN */ -#line 810 "src/parser_proc.y" + case 120: /* let_stmt ::= TEMP decl_var EQUALS reference decl_var EOS */ +#line 806 "src/parser_proc.y" { - yylhsminor.yy17 = psi_let_calloc_init(yymsp[-3].minor.yy39, yymsp[-1].minor.yy39); - yylhsminor.yy17->token = yymsp[-5].minor.yy0; + yylhsminor.yy138 = psi_let_stmt_init(psi_let_exp_init_ex(yymsp[-4].minor.yy131, PSI_LET_TMP, yymsp[-1].minor.yy131)); + yylhsminor.yy138->token = yymsp[-5].minor.yy0; + yylhsminor.yy138->exp->is_reference = yymsp[-2].minor.yy247 ? 1 : 0; } #line 3014 "src/parser_proc.c" - yy_destructor(yypParser,73,&yymsp[-4].minor); - yy_destructor(yypParser,74,&yymsp[-2].minor); - yy_destructor(yypParser,75,&yymsp[0].minor); - yymsp[-5].minor.yy17 = yylhsminor.yy17; + yy_destructor(yypParser,83,&yymsp[-3].minor); + yy_destructor(yypParser,73,&yymsp[0].minor); + yymsp[-5].minor.yy138 = yylhsminor.yy138; break; - case 122: /* let_func ::= ZVAL|OBJVAL|ARRVAL|PATHVAL|STRLEN|STRVAL|FLOATVAL|INTVAL|BOOLVAL|COUNT LPAREN impl_var RPAREN */ -#line 814 "src/parser_proc.y" + case 121: /* let_callback ::= CALLBACK callback_rval LPAREN impl_var LPAREN callback_arg_list RPAREN RPAREN */ +#line 811 "src/parser_proc.y" { - yylhsminor.yy72 = psi_let_func_init(yymsp[-3].minor.yy0->type, yymsp[-3].minor.yy0->text, yymsp[-1].minor.yy185); - yylhsminor.yy72->token = yymsp[-3].minor.yy0; + yylhsminor.yy76 = psi_let_callback_init(psi_let_func_init(yymsp[-6].minor.yy0->type, yymsp[-6].minor.yy0->text, yymsp[-4].minor.yy123), yymsp[-2].minor.yy304); + yylhsminor.yy76->token = yymsp[-7].minor.yy0; + free(yymsp[-6].minor.yy0); } #line 3026 "src/parser_proc.c" - yy_destructor(yypParser,73,&yymsp[-2].minor); - yy_destructor(yypParser,75,&yymsp[0].minor); - yymsp[-3].minor.yy72 = yylhsminor.yy72; + yy_destructor(yypParser,75,&yymsp[-5].minor); + yy_destructor(yypParser,75,&yymsp[-3].minor); + yy_destructor(yypParser,77,&yymsp[-1].minor); + yy_destructor(yypParser,77,&yymsp[0].minor); + yymsp[-7].minor.yy76 = yylhsminor.yy76; break; - case 123: /* let_func ::= ZVAL|OBJVAL|ARRVAL|PATHVAL|STRLEN|STRVAL|FLOATVAL|INTVAL|BOOLVAL|COUNT LPAREN impl_var COMMA let_exps RPAREN */ -#line 818 "src/parser_proc.y" + case 122: /* let_calloc ::= CALLOC LPAREN num_exp COMMA num_exp RPAREN */ +#line 816 "src/parser_proc.y" { - yylhsminor.yy72 = psi_let_func_init(yymsp[-5].minor.yy0->type, yymsp[-5].minor.yy0->text, yymsp[-3].minor.yy185); - yylhsminor.yy72->token = yymsp[-5].minor.yy0; - yylhsminor.yy72->inner = yymsp[-1].minor.yy303; + yylhsminor.yy227 = psi_let_calloc_init(yymsp[-3].minor.yy124, yymsp[-1].minor.yy124); + yylhsminor.yy227->token = yymsp[-5].minor.yy0; } -#line 3038 "src/parser_proc.c" - yy_destructor(yypParser,73,&yymsp[-4].minor); - yy_destructor(yypParser,74,&yymsp[-2].minor); - yy_destructor(yypParser,75,&yymsp[0].minor); - yymsp[-5].minor.yy72 = yylhsminor.yy72; +#line 3039 "src/parser_proc.c" + yy_destructor(yypParser,75,&yymsp[-4].minor); + yy_destructor(yypParser,76,&yymsp[-2].minor); + yy_destructor(yypParser,77,&yymsp[0].minor); + yymsp[-5].minor.yy227 = yylhsminor.yy227; break; - case 124: /* let_exps ::= let_exp */ -#line 823 "src/parser_proc.y" + case 123: /* let_func ::= ZVAL|OBJVAL|ARRVAL|PATHVAL|STRLEN|STRVAL|FLOATVAL|INTVAL|BOOLVAL|COUNT LPAREN impl_var RPAREN */ +#line 820 "src/parser_proc.y" { - yylhsminor.yy303 = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_let_exp_free), - &yymsp[0].minor.yy144); + yylhsminor.yy133 = psi_let_func_init(yymsp[-3].minor.yy0->type, yymsp[-3].minor.yy0->text, yymsp[-1].minor.yy123); + yylhsminor.yy133->token = yymsp[-3].minor.yy0; } -#line 3050 "src/parser_proc.c" - yymsp[0].minor.yy303 = yylhsminor.yy303; +#line 3051 "src/parser_proc.c" + yy_destructor(yypParser,75,&yymsp[-2].minor); + yy_destructor(yypParser,77,&yymsp[0].minor); + yymsp[-3].minor.yy133 = yylhsminor.yy133; break; - case 125: /* let_exps ::= let_exps COMMA let_exp */ -#line 827 "src/parser_proc.y" + case 124: /* let_func ::= ZVAL|OBJVAL|ARRVAL|PATHVAL|STRLEN|STRVAL|FLOATVAL|INTVAL|BOOLVAL|COUNT LPAREN impl_var COMMA let_exps RPAREN */ +#line 824 "src/parser_proc.y" { - yylhsminor.yy303 = psi_plist_add(yymsp[-2].minor.yy303, &yymsp[0].minor.yy144); + yylhsminor.yy133 = psi_let_func_init(yymsp[-5].minor.yy0->type, yymsp[-5].minor.yy0->text, yymsp[-3].minor.yy123); + yylhsminor.yy133->token = yymsp[-5].minor.yy0; + yylhsminor.yy133->inner = yymsp[-1].minor.yy7; } -#line 3058 "src/parser_proc.c" - yy_destructor(yypParser,74,&yymsp[-1].minor); - yymsp[-2].minor.yy303 = yylhsminor.yy303; +#line 3063 "src/parser_proc.c" + yy_destructor(yypParser,75,&yymsp[-4].minor); + yy_destructor(yypParser,76,&yymsp[-2].minor); + yy_destructor(yypParser,77,&yymsp[0].minor); + yymsp[-5].minor.yy133 = yylhsminor.yy133; break; - case 126: /* callback_arg_list ::= */ -#line 830 "src/parser_proc.y" + case 125: /* let_exps ::= let_exp */ +#line 829 "src/parser_proc.y" { - yymsp[1].minor.yy287 = NULL; + yylhsminor.yy7 = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_let_exp_free), + &yymsp[0].minor.yy196); } -#line 3067 "src/parser_proc.c" +#line 3075 "src/parser_proc.c" + yymsp[0].minor.yy7 = yylhsminor.yy7; break; - case 127: /* callback_arg_list ::= callback_args */ + case 126: /* let_exps ::= let_exps COMMA let_exp */ #line 833 "src/parser_proc.y" { - yylhsminor.yy287 = yymsp[0].minor.yy287; + yylhsminor.yy7 = psi_plist_add(yymsp[-2].minor.yy7, &yymsp[0].minor.yy196); } -#line 3074 "src/parser_proc.c" - yymsp[0].minor.yy287 = yylhsminor.yy287; +#line 3083 "src/parser_proc.c" + yy_destructor(yypParser,76,&yymsp[-1].minor); + yymsp[-2].minor.yy7 = yylhsminor.yy7; break; - case 128: /* callback_args ::= set_exp */ + case 127: /* callback_arg_list ::= */ #line 836 "src/parser_proc.y" { - yylhsminor.yy287 = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_set_exp_free), - &yymsp[0].minor.yy67); + yymsp[1].minor.yy304 = NULL; } -#line 3083 "src/parser_proc.c" - yymsp[0].minor.yy287 = yylhsminor.yy287; +#line 3092 "src/parser_proc.c" break; - case 129: /* callback_args ::= callback_args COMMA set_exp */ -#line 840 "src/parser_proc.y" + case 128: /* callback_arg_list ::= callback_args */ +#line 839 "src/parser_proc.y" { - yylhsminor.yy287 = psi_plist_add(yymsp[-2].minor.yy287, &yymsp[0].minor.yy67); + yylhsminor.yy304 = yymsp[0].minor.yy304; } -#line 3091 "src/parser_proc.c" - yy_destructor(yypParser,74,&yymsp[-1].minor); - yymsp[-2].minor.yy287 = yylhsminor.yy287; +#line 3099 "src/parser_proc.c" + yymsp[0].minor.yy304 = yylhsminor.yy304; break; - case 132: /* set_func ::= TO_OBJECT|TO_ARRAY|TO_STRING|TO_INT|TO_FLOAT|TO_BOOL|ZVAL|VOID LPAREN decl_var RPAREN */ -#line 849 "src/parser_proc.y" + case 129: /* callback_args ::= set_exp */ +#line 842 "src/parser_proc.y" { - yylhsminor.yy78 = psi_set_func_init(yymsp[-3].minor.yy0->type, yymsp[-3].minor.yy0->text, yymsp[-1].minor.yy207); - yylhsminor.yy78->token = yymsp[-3].minor.yy0; + yylhsminor.yy304 = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_set_exp_free), + &yymsp[0].minor.yy113); } -#line 3101 "src/parser_proc.c" - yy_destructor(yypParser,73,&yymsp[-2].minor); - yy_destructor(yypParser,75,&yymsp[0].minor); - yymsp[-3].minor.yy78 = yylhsminor.yy78; +#line 3108 "src/parser_proc.c" + yymsp[0].minor.yy304 = yylhsminor.yy304; break; - case 133: /* set_func ::= TO_OBJECT|TO_ARRAY|TO_STRING|TO_INT|TO_FLOAT|TO_BOOL|ZVAL|VOID LPAREN decl_var COMMA set_exps RPAREN */ -#line 853 "src/parser_proc.y" + case 130: /* callback_args ::= callback_args COMMA set_exp */ +#line 846 "src/parser_proc.y" { - yylhsminor.yy78 = psi_set_func_init(yymsp[-5].minor.yy0->type, yymsp[-5].minor.yy0->text, yymsp[-3].minor.yy207); - yylhsminor.yy78->token = yymsp[-5].minor.yy0; - yylhsminor.yy78->inner = yymsp[-1].minor.yy303; + yylhsminor.yy304 = psi_plist_add(yymsp[-2].minor.yy304, &yymsp[0].minor.yy113); } -#line 3113 "src/parser_proc.c" - yy_destructor(yypParser,73,&yymsp[-4].minor); - yy_destructor(yypParser,74,&yymsp[-2].minor); - yy_destructor(yypParser,75,&yymsp[0].minor); - yymsp[-5].minor.yy78 = yylhsminor.yy78; +#line 3116 "src/parser_proc.c" + yy_destructor(yypParser,76,&yymsp[-1].minor); + yymsp[-2].minor.yy304 = yylhsminor.yy304; break; - case 134: /* set_func ::= TO_OBJECT|TO_ARRAY|TO_STRING|TO_INT|TO_FLOAT|TO_BOOL|ZVAL|VOID LPAREN decl_var COMMA ELLIPSIS RPAREN */ -#line 858 "src/parser_proc.y" + case 133: /* set_func ::= TO_OBJECT|TO_ARRAY|TO_STRING|TO_INT|TO_FLOAT|TO_BOOL|ZVAL|VOID LPAREN decl_var RPAREN */ +#line 855 "src/parser_proc.y" { - yylhsminor.yy78 = psi_set_func_init(yymsp[-5].minor.yy0->type, yymsp[-5].minor.yy0->text, yymsp[-3].minor.yy207); - yylhsminor.yy78->token = yymsp[-5].minor.yy0; - yylhsminor.yy78->recursive = 1; + yylhsminor.yy324 = psi_set_func_init(yymsp[-3].minor.yy0->type, yymsp[-3].minor.yy0->text, yymsp[-1].minor.yy131); + yylhsminor.yy324->token = yymsp[-3].minor.yy0; } #line 3126 "src/parser_proc.c" - yy_destructor(yypParser,73,&yymsp[-4].minor); - yy_destructor(yypParser,74,&yymsp[-2].minor); - yy_destructor(yypParser,84,&yymsp[-1].minor); - yy_destructor(yypParser,75,&yymsp[0].minor); - yymsp[-5].minor.yy78 = yylhsminor.yy78; + yy_destructor(yypParser,75,&yymsp[-2].minor); + yy_destructor(yypParser,77,&yymsp[0].minor); + yymsp[-3].minor.yy324 = yylhsminor.yy324; break; - case 135: /* set_exp ::= set_func */ -#line 863 "src/parser_proc.y" + case 134: /* set_func ::= TO_OBJECT|TO_ARRAY|TO_STRING|TO_INT|TO_FLOAT|TO_BOOL|ZVAL|VOID LPAREN decl_var COMMA set_exps RPAREN */ +#line 859 "src/parser_proc.y" { - yylhsminor.yy67 = psi_set_exp_init(PSI_SET_FUNC, yymsp[0].minor.yy78); + yylhsminor.yy324 = psi_set_func_init(yymsp[-5].minor.yy0->type, yymsp[-5].minor.yy0->text, yymsp[-3].minor.yy131); + yylhsminor.yy324->token = yymsp[-5].minor.yy0; + yylhsminor.yy324->inner = yymsp[-1].minor.yy7; } #line 3138 "src/parser_proc.c" - yymsp[0].minor.yy67 = yylhsminor.yy67; + yy_destructor(yypParser,75,&yymsp[-4].minor); + yy_destructor(yypParser,76,&yymsp[-2].minor); + yy_destructor(yypParser,77,&yymsp[0].minor); + yymsp[-5].minor.yy324 = yylhsminor.yy324; + break; + case 135: /* set_func ::= TO_OBJECT|TO_ARRAY|TO_STRING|TO_INT|TO_FLOAT|TO_BOOL|ZVAL|VOID LPAREN decl_var COMMA ELLIPSIS RPAREN */ +#line 864 "src/parser_proc.y" +{ + yylhsminor.yy324 = psi_set_func_init(yymsp[-5].minor.yy0->type, yymsp[-5].minor.yy0->text, yymsp[-3].minor.yy131); + yylhsminor.yy324->token = yymsp[-5].minor.yy0; + yylhsminor.yy324->recursive = 1; +} +#line 3151 "src/parser_proc.c" + yy_destructor(yypParser,75,&yymsp[-4].minor); + yy_destructor(yypParser,76,&yymsp[-2].minor); + yy_destructor(yypParser,86,&yymsp[-1].minor); + yy_destructor(yypParser,77,&yymsp[0].minor); + yymsp[-5].minor.yy324 = yylhsminor.yy324; + break; + case 136: /* set_exp ::= set_func */ +#line 869 "src/parser_proc.y" +{ + yylhsminor.yy113 = psi_set_exp_init(PSI_SET_FUNC, yymsp[0].minor.yy324); +} +#line 3163 "src/parser_proc.c" + yymsp[0].minor.yy113 = yylhsminor.yy113; break; - case 136: /* set_exp ::= num_exp */ -#line 866 "src/parser_proc.y" + case 137: /* set_exp ::= num_exp */ +#line 872 "src/parser_proc.y" { - yylhsminor.yy67 = psi_set_exp_init(PSI_SET_NUMEXP, yymsp[0].minor.yy39); + yylhsminor.yy113 = psi_set_exp_init(PSI_SET_NUMEXP, yymsp[0].minor.yy124); } -#line 3146 "src/parser_proc.c" - yymsp[0].minor.yy67 = yylhsminor.yy67; +#line 3171 "src/parser_proc.c" + yymsp[0].minor.yy113 = yylhsminor.yy113; break; - case 137: /* set_exps ::= set_exp */ -#line 869 "src/parser_proc.y" + case 138: /* set_exps ::= set_exp */ +#line 875 "src/parser_proc.y" { - yylhsminor.yy303 = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_set_exp_free), - &yymsp[0].minor.yy67); + yylhsminor.yy7 = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_set_exp_free), + &yymsp[0].minor.yy113); } -#line 3155 "src/parser_proc.c" - yymsp[0].minor.yy303 = yylhsminor.yy303; +#line 3180 "src/parser_proc.c" + yymsp[0].minor.yy7 = yylhsminor.yy7; break; - case 138: /* set_exps ::= set_exps COMMA set_exp */ -#line 873 "src/parser_proc.y" + case 139: /* set_exps ::= set_exps COMMA set_exp */ +#line 879 "src/parser_proc.y" { - yylhsminor.yy303 = psi_plist_add(yymsp[-2].minor.yy303, &yymsp[0].minor.yy67); + yylhsminor.yy7 = psi_plist_add(yymsp[-2].minor.yy7, &yymsp[0].minor.yy113); } -#line 3163 "src/parser_proc.c" - yy_destructor(yypParser,74,&yymsp[-1].minor); - yymsp[-2].minor.yy303 = yylhsminor.yy303; +#line 3188 "src/parser_proc.c" + yy_destructor(yypParser,76,&yymsp[-1].minor); + yymsp[-2].minor.yy7 = yylhsminor.yy7; + break; + case 140: /* set_exp ::= impl_var EQUALS set_exp */ +#line 882 "src/parser_proc.y" +{ + yylhsminor.yy113 = yymsp[0].minor.yy113; + yylhsminor.yy113->var = yymsp[-2].minor.yy123; +} +#line 3198 "src/parser_proc.c" + yy_destructor(yypParser,83,&yymsp[-1].minor); + yymsp[-2].minor.yy113 = yylhsminor.yy113; break; - case 139: /* set_exp ::= impl_var EQUALS set_exp */ -#line 876 "src/parser_proc.y" + case 141: /* set_stmt ::= SET set_exp EOS */ +#line 886 "src/parser_proc.y" { - yylhsminor.yy67 = yymsp[0].minor.yy67; - yylhsminor.yy67->var = yymsp[-2].minor.yy185; + yylhsminor.yy300 = psi_set_stmt_init(yymsp[-1].minor.yy113); + yylhsminor.yy300->token = yymsp[-2].minor.yy0; } -#line 3173 "src/parser_proc.c" - yy_destructor(yypParser,81,&yymsp[-1].minor); - yymsp[-2].minor.yy67 = yylhsminor.yy67; +#line 3208 "src/parser_proc.c" + yy_destructor(yypParser,73,&yymsp[0].minor); + yymsp[-2].minor.yy300 = yylhsminor.yy300; break; - case 140: /* set_stmt ::= SET set_exp EOS */ -#line 880 "src/parser_proc.y" + case 142: /* return_stmt ::= RETURN set_func EOS */ +#line 890 "src/parser_proc.y" { - yylhsminor.yy226 = psi_set_stmt_init(yymsp[-1].minor.yy67); - yylhsminor.yy226->token = yymsp[-2].minor.yy0; + yylhsminor.yy258 = psi_return_stmt_init(psi_set_exp_init(PSI_SET_FUNC, yymsp[-1].minor.yy324)); + yylhsminor.yy258->token = yymsp[-2].minor.yy0; } -#line 3183 "src/parser_proc.c" - yy_destructor(yypParser,71,&yymsp[0].minor); - yymsp[-2].minor.yy226 = yylhsminor.yy226; +#line 3218 "src/parser_proc.c" + yy_destructor(yypParser,73,&yymsp[0].minor); + yymsp[-2].minor.yy258 = yylhsminor.yy258; break; - case 141: /* return_stmt ::= RETURN set_func EOS */ -#line 884 "src/parser_proc.y" + case 143: /* free_stmt ::= FREE free_exps EOS */ +#line 894 "src/parser_proc.y" { - yylhsminor.yy130 = psi_return_stmt_init(psi_set_exp_init(PSI_SET_FUNC, yymsp[-1].minor.yy78)); - yylhsminor.yy130->token = yymsp[-2].minor.yy0; + yylhsminor.yy102 = psi_free_stmt_init(yymsp[-1].minor.yy7); + yylhsminor.yy102->token = yymsp[-2].minor.yy0; } -#line 3193 "src/parser_proc.c" - yy_destructor(yypParser,71,&yymsp[0].minor); - yymsp[-2].minor.yy130 = yylhsminor.yy130; +#line 3228 "src/parser_proc.c" + yy_destructor(yypParser,73,&yymsp[0].minor); + yymsp[-2].minor.yy102 = yylhsminor.yy102; break; - case 142: /* free_stmt ::= FREE free_exps EOS */ -#line 888 "src/parser_proc.y" + case 144: /* free_exps ::= free_exp */ +#line 898 "src/parser_proc.y" { - yylhsminor.yy76 = psi_free_stmt_init(yymsp[-1].minor.yy303); - yylhsminor.yy76->token = yymsp[-2].minor.yy0; + yylhsminor.yy7 = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_free_exp_free), + &yymsp[0].minor.yy114); } -#line 3203 "src/parser_proc.c" - yy_destructor(yypParser,71,&yymsp[0].minor); - yymsp[-2].minor.yy76 = yylhsminor.yy76; +#line 3238 "src/parser_proc.c" + yymsp[0].minor.yy7 = yylhsminor.yy7; break; - case 143: /* free_exps ::= free_exp */ -#line 892 "src/parser_proc.y" + case 145: /* free_exps ::= free_exps COMMA free_exp */ +#line 902 "src/parser_proc.y" { - yylhsminor.yy303 = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_free_exp_free), - &yymsp[0].minor.yy197); + yylhsminor.yy7 = psi_plist_add(yymsp[-2].minor.yy7, &yymsp[0].minor.yy114); } -#line 3213 "src/parser_proc.c" - yymsp[0].minor.yy303 = yylhsminor.yy303; +#line 3246 "src/parser_proc.c" + yy_destructor(yypParser,76,&yymsp[-1].minor); + yymsp[-2].minor.yy7 = yylhsminor.yy7; break; - case 144: /* free_exps ::= free_exps COMMA free_exp */ -#line 896 "src/parser_proc.y" + case 146: /* free_exp ::= NAME LPAREN decl_vars RPAREN */ +#line 905 "src/parser_proc.y" { - yylhsminor.yy303 = psi_plist_add(yymsp[-2].minor.yy303, &yymsp[0].minor.yy197); + yylhsminor.yy114 = psi_free_exp_init(yymsp[-3].minor.yy0->text, yymsp[-1].minor.yy7); + yylhsminor.yy114->token = yymsp[-3].minor.yy0; } -#line 3221 "src/parser_proc.c" - yy_destructor(yypParser,74,&yymsp[-1].minor); - yymsp[-2].minor.yy303 = yylhsminor.yy303; +#line 3256 "src/parser_proc.c" + yy_destructor(yypParser,75,&yymsp[-2].minor); + yy_destructor(yypParser,77,&yymsp[0].minor); + yymsp[-3].minor.yy114 = yylhsminor.yy114; break; - case 145: /* free_exp ::= NAME LPAREN decl_vars RPAREN */ -#line 899 "src/parser_proc.y" + case 147: /* assert_stmt ::= PRE_ASSERT|POST_ASSERT num_exp EOS */ +#line 909 "src/parser_proc.y" { - yylhsminor.yy197 = psi_free_exp_init(yymsp[-3].minor.yy0->text, yymsp[-1].minor.yy303); - yylhsminor.yy197->token = yymsp[-3].minor.yy0; + yylhsminor.yy146 = psi_assert_stmt_init(yymsp[-2].minor.yy0->type, yymsp[-1].minor.yy124); + yylhsminor.yy146->token = yymsp[-2].minor.yy0; } -#line 3231 "src/parser_proc.c" - yy_destructor(yypParser,73,&yymsp[-2].minor); - yy_destructor(yypParser,75,&yymsp[0].minor); - yymsp[-3].minor.yy197 = yylhsminor.yy197; +#line 3267 "src/parser_proc.c" + yy_destructor(yypParser,73,&yymsp[0].minor); + yymsp[-2].minor.yy146 = yylhsminor.yy146; break; - case 146: /* reference ::= */ -#line 903 "src/parser_proc.y" + case 148: /* reference ::= */ +#line 913 "src/parser_proc.y" { - yymsp[1].minor.yy273 = false; + yymsp[1].minor.yy247 = false; } -#line 3241 "src/parser_proc.c" +#line 3276 "src/parser_proc.c" break; - case 147: /* reference ::= AMPERSAND */ + case 149: /* reference ::= AMPERSAND */ { yy_destructor(yypParser,23,&yymsp[0].minor); -#line 906 "src/parser_proc.y" +#line 916 "src/parser_proc.y" { - yymsp[0].minor.yy273 = true; + yymsp[0].minor.yy247 = true; } -#line 3249 "src/parser_proc.c" +#line 3284 "src/parser_proc.c" } break; - case 148: /* indirection ::= */ -#line 909 "src/parser_proc.y" + case 150: /* indirection ::= */ +#line 919 "src/parser_proc.y" { - yymsp[1].minor.yy190 = 0; + yymsp[1].minor.yy296 = 0; } -#line 3257 "src/parser_proc.c" +#line 3292 "src/parser_proc.c" break; - case 149: /* indirection ::= pointers */ -#line 912 "src/parser_proc.y" + case 151: /* indirection ::= pointers */ +#line 922 "src/parser_proc.y" { - yylhsminor.yy190 = yymsp[0].minor.yy190; + yylhsminor.yy296 = yymsp[0].minor.yy296; } -#line 3264 "src/parser_proc.c" - yymsp[0].minor.yy190 = yylhsminor.yy190; +#line 3299 "src/parser_proc.c" + yymsp[0].minor.yy296 = yylhsminor.yy296; break; - case 150: /* pointers ::= ASTERISK */ + case 152: /* pointers ::= ASTERISK */ { yy_destructor(yypParser,28,&yymsp[0].minor); -#line 915 "src/parser_proc.y" +#line 925 "src/parser_proc.y" { - yymsp[0].minor.yy190 = 1; + yymsp[0].minor.yy296 = 1; } -#line 3273 "src/parser_proc.c" +#line 3308 "src/parser_proc.c" } break; - case 151: /* pointers ::= pointers ASTERISK */ -#line 918 "src/parser_proc.y" + case 153: /* pointers ::= pointers ASTERISK */ +#line 928 "src/parser_proc.y" { - yylhsminor.yy190 = yymsp[-1].minor.yy190+1; + yylhsminor.yy296 = yymsp[-1].minor.yy296+1; } -#line 3281 "src/parser_proc.c" +#line 3316 "src/parser_proc.c" yy_destructor(yypParser,28,&yymsp[0].minor); - yymsp[-1].minor.yy190 = yylhsminor.yy190; + yymsp[-1].minor.yy296 = yylhsminor.yy296; break; - case 152: /* file ::= blocks */ -{ yy_destructor(yypParser,154,&yymsp[0].minor); -#line 172 "src/parser_proc.y" + case 154: /* file ::= blocks */ +{ yy_destructor(yypParser,157,&yymsp[0].minor); +#line 175 "src/parser_proc.y" { } -#line 3290 "src/parser_proc.c" +#line 3325 "src/parser_proc.c" } break; - case 153: /* blocks ::= block */ -{ yy_destructor(yypParser,155,&yymsp[0].minor); -#line 173 "src/parser_proc.y" + case 155: /* blocks ::= block */ +{ yy_destructor(yypParser,158,&yymsp[0].minor); +#line 176 "src/parser_proc.y" { } -#line 3298 "src/parser_proc.c" +#line 3333 "src/parser_proc.c" } break; - case 154: /* blocks ::= blocks block */ -{ yy_destructor(yypParser,154,&yymsp[-1].minor); -#line 174 "src/parser_proc.y" + case 156: /* blocks ::= blocks block */ +{ yy_destructor(yypParser,157,&yymsp[-1].minor); +#line 177 "src/parser_proc.y" { } -#line 3306 "src/parser_proc.c" - yy_destructor(yypParser,155,&yymsp[0].minor); +#line 3341 "src/parser_proc.c" + yy_destructor(yypParser,158,&yymsp[0].minor); } break; - case 155: /* block ::= EOF */ -{ yy_destructor(yypParser,70,&yymsp[0].minor); -#line 175 "src/parser_proc.y" + case 157: /* block ::= EOF */ +{ yy_destructor(yypParser,72,&yymsp[0].minor); +#line 178 "src/parser_proc.y" { } -#line 3315 "src/parser_proc.c" +#line 3350 "src/parser_proc.c" } break; - case 156: /* block ::= EOS */ -{ yy_destructor(yypParser,71,&yymsp[0].minor); -#line 176 "src/parser_proc.y" + case 158: /* block ::= EOS */ +{ yy_destructor(yypParser,73,&yymsp[0].minor); +#line 179 "src/parser_proc.y" { } -#line 3323 "src/parser_proc.c" +#line 3358 "src/parser_proc.c" } break; default: @@ -3381,7 +3416,7 @@ static void yy_syntax_error( /************ Begin %syntax_error code ****************************************/ #line 40 "src/parser_proc.y" ++P->errors; if (TOKEN && TOKEN->type != PSI_T_EOF) { psi_error(PSI_WARNING, TOKEN->file, TOKEN->line, "PSI syntax error: Unexpected token '%s' at pos %u", TOKEN->text, TOKEN->col); } else { psi_error(PSI_WARNING, P->file.fn, P->line, "PSI syntax error: Unexpected end of input"); } -#line 3385 "src/parser_proc.c" +#line 3420 "src/parser_proc.c" /************ End %syntax_error code ******************************************/ ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */ } diff --git a/src/parser_proc.h b/src/parser_proc.h index fb2c964..0da6036 100644 --- a/src/parser_proc.h +++ b/src/parser_proc.h @@ -59,36 +59,38 @@ #define PSI_T_ARRAY 59 #define PSI_T_OBJECT 60 #define PSI_T_CALLABLE 61 -#define PSI_T_TEMP 62 -#define PSI_T_FREE 63 -#define PSI_T_SET 64 -#define PSI_T_LET 65 -#define PSI_T_RETURN 66 -#define PSI_T_CALLOC 67 -#define PSI_T_CALLBACK 68 -#define PSI_T_LIB 69 -#define PSI_T_EOF 70 -#define PSI_T_EOS 71 -#define PSI_T_COLON 72 -#define PSI_T_LPAREN 73 -#define PSI_T_COMMA 74 -#define PSI_T_RPAREN 75 -#define PSI_T_ENUM 76 -#define PSI_T_STRUCT 77 -#define PSI_T_UNION 78 -#define PSI_T_LBRACE 79 -#define PSI_T_RBRACE 80 -#define PSI_T_EQUALS 81 -#define PSI_T_CONST 82 -#define PSI_T_TYPEDEF 83 -#define PSI_T_ELLIPSIS 84 -#define PSI_T_LBRACKET 85 -#define PSI_T_RBRACKET 86 -#define PSI_T_CHAR 87 -#define PSI_T_SHORT 88 -#define PSI_T_LONG 89 -#define PSI_T_UNSIGNED 90 -#define PSI_T_SIGNED 91 -#define PSI_T_STATIC 92 -#define PSI_T_FUNCTION 93 -#define PSI_T_DOLLAR_NAME 94 +#define PSI_T_PRE_ASSERT 62 +#define PSI_T_POST_ASSERT 63 +#define PSI_T_TEMP 64 +#define PSI_T_FREE 65 +#define PSI_T_SET 66 +#define PSI_T_LET 67 +#define PSI_T_RETURN 68 +#define PSI_T_CALLOC 69 +#define PSI_T_CALLBACK 70 +#define PSI_T_LIB 71 +#define PSI_T_EOF 72 +#define PSI_T_EOS 73 +#define PSI_T_COLON 74 +#define PSI_T_LPAREN 75 +#define PSI_T_COMMA 76 +#define PSI_T_RPAREN 77 +#define PSI_T_ENUM 78 +#define PSI_T_STRUCT 79 +#define PSI_T_UNION 80 +#define PSI_T_LBRACE 81 +#define PSI_T_RBRACE 82 +#define PSI_T_EQUALS 83 +#define PSI_T_CONST 84 +#define PSI_T_TYPEDEF 85 +#define PSI_T_ELLIPSIS 86 +#define PSI_T_LBRACKET 87 +#define PSI_T_RBRACKET 88 +#define PSI_T_CHAR 89 +#define PSI_T_SHORT 90 +#define PSI_T_LONG 91 +#define PSI_T_UNSIGNED 92 +#define PSI_T_SIGNED 93 +#define PSI_T_STATIC 94 +#define PSI_T_FUNCTION 95 +#define PSI_T_DOLLAR_NAME 96 diff --git a/src/parser_proc.y b/src/parser_proc.y index 5f8d04b..8c6018f 100644 --- a/src/parser_proc.y +++ b/src/parser_proc.y @@ -47,6 +47,7 @@ void psi_parser_proc_free(void **parser_proc) %token_class let_func_token ZVAL OBJVAL ARRVAL PATHVAL STRLEN STRVAL FLOATVAL INTVAL BOOLVAL COUNT . %token_class set_func_token TO_OBJECT TO_ARRAY TO_STRING TO_INT TO_FLOAT TO_BOOL ZVAL VOID . %token_class impl_type_token VOID MIXED BOOL INT FLOAT STRING ARRAY OBJECT CALLABLE . +%token_class assert_stmt_token PRE_ASSERT POST_ASSERT . %nonassoc NAME. %right NOT TILDE. %left AND OR. @@ -148,6 +149,8 @@ void psi_parser_proc_free(void **parser_proc) %destructor let_exp {psi_let_exp_free(&$$);} %type let_exps {struct psi_plist*} %destructor let_exps {psi_plist_free($$);} +%type assert_stmt {struct psi_assert_stmt*} +%destructor assert_stmt {psi_assert_stmt_free(&$$);} %type set_stmt {struct psi_set_stmt*} %destructor set_stmt {psi_set_stmt_free(&$$);} %type set_exp {struct psi_set_exp*} @@ -731,6 +734,9 @@ impl_stmt(i) ::= let_stmt(l). { impl_stmt(i) ::= set_stmt(s). { i = (struct psi_token**) s; } +impl_stmt(i) ::= assert_stmt(s). { + i = (struct psi_token **) s; +} impl_stmt(i) ::= free_stmt(f). { i = (struct psi_token**) f; } @@ -900,6 +906,10 @@ free_exp(call) ::= NAME(F) LPAREN decl_vars(vars) RPAREN. { call = psi_free_exp_init(F->text, vars); call->token = F; } +assert_stmt(ass) ::= assert_stmt_token(T) num_exp(exp) EOS. { + ass = psi_assert_stmt_init(T->type, exp); + ass->token = T; +} reference(r) ::= . { r = false; } diff --git a/src/types.h b/src/types.h index 1a729f9..5497880 100644 --- a/src/types.h +++ b/src/types.h @@ -60,6 +60,7 @@ #include "types/decl_file.h" #include "types/free_exp.h" #include "types/free_stmt.h" +#include "types/assert_stmt.h" #include "types/layout.h" static inline impl_val *deref_impl_val(impl_val *ret_val, struct psi_decl_var *var) { diff --git a/src/types/assert_stmt.c b/src/types/assert_stmt.c new file mode 100644 index 0000000..084f9fc --- /dev/null +++ b/src/types/assert_stmt.c @@ -0,0 +1,102 @@ +/******************************************************************************* + Copyright (c) 2017, Michael Wallner . + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*******************************************************************************/ + +#include "php_psi_stdinc.h" + +#include "data.h" +#include "calc.h" + +struct psi_assert_stmt *psi_assert_stmt_init(enum psi_assert_kind kind, struct psi_num_exp *exp) +{ + struct psi_assert_stmt *stmt = calloc(1, sizeof(*stmt)); + + stmt->kind = kind; + stmt->exp = exp; + + return stmt; +} + +void psi_assert_stmt_free(struct psi_assert_stmt **stmt_ptr) +{ + if (*stmt_ptr) { + struct psi_assert_stmt *stmt = *stmt_ptr; + + psi_num_exp_free(&stmt->exp); + if (stmt->token) { + free(stmt->token); + } + free(stmt); + *stmt_ptr = NULL; + } +} + +void psi_assert_stmt_dump(int fd, struct psi_assert_stmt *stmt) +{ + dprintf(fd, "\t%s_assert ", stmt->kind == PSI_ASSERT_PRE ? "pre" : "post"); + psi_num_exp_dump(fd, stmt->exp); + dprintf(fd, ";\n"); +} + +bool psi_assert_stmt_exec(struct psi_assert_stmt *stmt, struct psi_call_frame *frame) +{ + impl_val res, chk; + token_t res_type = psi_num_exp_exec(stmt->exp, &res, frame); + + psi_calc_cast(res_type, &res, PSI_T_UINT8, &chk); + return chk.u8; +} + +bool psi_assert_stmts_validate(struct psi_data *data, struct psi_impl *impl) +{ + size_t i = 0; + struct psi_assert_stmt *ass; + + /* we can have multiple assert stmts */ + while (psi_plist_get(impl->stmts.ass, i++, &ass)) { + if (!psi_num_exp_validate(data, ass->exp, impl, NULL, NULL, NULL, NULL)) { + return false; + } + } + + return true; +} + +char *psi_assert_stmt_message(struct psi_assert_stmt *stmt) +{ + /* FIXME */ + struct stat sb; + char *message, template[] = "psi.assert.XXXXXX"; + int fd = mkstemp(template); + + dprintf(fd, "Failed asserting that "); + psi_num_exp_dump(fd, stmt->exp); + fstat(fd, &sb); + message = malloc(sb.st_size + 1); + lseek(fd, 0, SEEK_SET); + read(fd, message, sb.st_size); + close(fd); + message[sb.st_size] = '\0'; + return message; +} diff --git a/src/types/assert_stmt.h b/src/types/assert_stmt.h new file mode 100644 index 0000000..44d865e --- /dev/null +++ b/src/types/assert_stmt.h @@ -0,0 +1,54 @@ +/******************************************************************************* + Copyright (c) 2017, Michael Wallner . + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*******************************************************************************/ + +#ifndef PSI_TYPES_ASSERT_STMT_H +#define PSI_TYPES_ASSERT_STMT_H + +struct psi_token; +struct psi_data; +struct psi_impl; +struct psi_num_exp; +struct psi_call_frame; + +struct psi_assert_stmt { + struct psi_token *token; + struct psi_num_exp *exp; + enum psi_assert_kind { + PSI_ASSERT_PRE = PSI_T_PRE_ASSERT, + PSI_ASSERT_POST = PSI_T_POST_ASSERT + } kind; +}; + +struct psi_assert_stmt *psi_assert_stmt_init(enum psi_assert_kind kind, struct psi_num_exp *exp); +bool psi_assert_stmt_exec(struct psi_assert_stmt *stmt, struct psi_call_frame *frame); + +void psi_assert_stmt_dump(int fd, struct psi_assert_stmt *stmt); +void psi_assert_stmt_free(struct psi_assert_stmt **stmt); + +bool psi_assert_stmts_validate(struct psi_data *data, struct psi_impl *impl); + +char *psi_assert_stmt_message(struct psi_assert_stmt *stmt); + +#endif diff --git a/src/types/impl.c b/src/types/impl.c index 33d3301..e679f1f 100644 --- a/src/types/impl.c +++ b/src/types/impl.c @@ -39,6 +39,7 @@ struct psi_impl *psi_impl_init(struct psi_impl_func *func, impl->stmts.let = psi_plist_init((psi_plist_dtor) psi_let_stmt_free); impl->stmts.set = psi_plist_init((psi_plist_dtor) psi_set_stmt_free); impl->stmts.fre = psi_plist_init((psi_plist_dtor) psi_free_stmt_free); + impl->stmts.ass = psi_plist_init((psi_plist_dtor) psi_assert_stmt_free); while (psi_plist_get(stmts, i++, &abstract_stmt)) { switch ((*abstract_stmt)->type) { @@ -55,6 +56,10 @@ struct psi_impl *psi_impl_init(struct psi_impl_func *func, case PSI_T_FREE: impl->stmts.fre = psi_plist_add(impl->stmts.fre, &abstract_stmt); break; + case PSI_T_PRE_ASSERT: + case PSI_T_POST_ASSERT: + impl->stmts.ass = psi_plist_add(impl->stmts.ass, &abstract_stmt); + break; default: assert(0); } @@ -77,6 +82,7 @@ void psi_impl_free(struct psi_impl **impl_ptr) psi_plist_free(impl->stmts.let); psi_plist_free(impl->stmts.set); psi_plist_free(impl->stmts.fre); + psi_plist_free(impl->stmts.ass); free(impl); } } @@ -88,12 +94,16 @@ void psi_impl_dump(int fd, struct psi_impl *impl) struct psi_let_stmt *let; struct psi_set_stmt *set; struct psi_free_stmt *fre; + struct psi_assert_stmt *ass; psi_impl_func_dump(fd, impl->func); dprintf(fd, " {\n"); for (i = 0; psi_plist_get(impl->stmts.let, i, &let); ++i) { psi_let_stmt_dump(fd, let); } + for (i = 0; psi_plist_get(impl->stmts.ass, i, &ass); ++i) { + psi_assert_stmt_dump(fd, ass); + } for (i = 0; psi_plist_get(impl->stmts.ret, i, &ret); ++i) { psi_return_stmt_dump(fd, ret); } @@ -120,6 +130,9 @@ bool psi_impl_validate(struct psi_data *data, struct psi_impl *impl) if (!psi_set_stmts_validate(data, impl)) { return false; } + if (!psi_assert_stmts_validate(data, impl)) { + return false; + } if (!psi_free_stmts_validate(data, impl)) { return false; } @@ -154,6 +167,10 @@ void psi_impl_stmt_free(struct psi_token ***abstract_stmt) case PSI_T_FREE: psi_free_stmt_free((void *) abstract_stmt); break; + case PSI_T_PRE_ASSERT: + case PSI_T_POST_ASSERT: + psi_assert_stmt_free((void *) abstract_stmt); + break; default: assert(0); } diff --git a/src/types/impl.h b/src/types/impl.h index 83b0e81..91168ed 100644 --- a/src/types/impl.h +++ b/src/types/impl.h @@ -42,6 +42,7 @@ struct psi_impl { struct psi_plist *let; struct psi_plist *set; struct psi_plist *fre; + struct psi_plist *ass; } stmts; }; -- 2.30.2