From 2d37ed8ae067cee42c68f846d55a74bcf04cf72b Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 13 Mar 2018 11:18:02 +0000 Subject: [PATCH 01/17] Update NEWS for PHP 7.2.4RC1 --- NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 1484aabd98425..9138d2a9d6e07 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,6 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -?? ??? 2018, PHP 7.2.4 +15 Mar 2018, PHP 7.2.4RC1 - Core: . Fixed bug #76025 (Segfault while throwing exception in error_handler). From 2602083b730a0ae16a3690cc3e183ecc40ed6da5 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 13 Mar 2018 11:34:53 +0000 Subject: [PATCH 02/17] Update NEWS for 7.2.4 --- NEWS | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NEWS b/NEWS index 9138d2a9d6e07..c32467d234f2f 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,8 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +?? ??? ????, PHP 7.2.4 + + 15 Mar 2018, PHP 7.2.4RC1 - Core: From a1f0b7a6e4eb4347e88864be13cc1d2b8793a732 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fe=CC=81lix=20Saparelli?= Date: Thu, 15 Mar 2018 19:53:30 +1300 Subject: [PATCH 03/17] Add ??? operator --- Zend/zend_ast.c | 2 + Zend/zend_ast.h | 1 + Zend/zend_compile.c | 18 + Zend/zend_language_parser.y | 4 + Zend/zend_language_scanner.c | 9485 +++++++++++++++-------------- Zend/zend_language_scanner.l | 4 + Zend/zend_language_scanner_defs.h | 2 +- ext/tokenizer/tokenizer_data.c | 142 +- 8 files changed, 4848 insertions(+), 4810 deletions(-) diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c index c0fdf48cbad4f..e9613207478dc 100644 --- a/Zend/zend_ast.c +++ b/Zend/zend_ast.c @@ -573,6 +573,7 @@ ZEND_API void zend_ast_apply(zend_ast *ast, zend_ast_apply_func fn) { * 90 right = += -= *= /= .= %= &= |= ^= <<= >>= **= * 100 left ? : * 110 right ?? + * 115 right ??? * 120 left || * 130 left && * 140 left | @@ -1426,6 +1427,7 @@ static void zend_ast_export_ex(smart_str *str, zend_ast *ast, int priority, int case ZEND_AST_YIELD_FROM: PREFIX_OP("yield from ", 85, 86); case ZEND_AST_COALESCE: BINARY_OP(" ?? ", 110, 111, 110); + case ZEND_AST_EXCEPTION_COALESCE: BINARY_OP(" ??? ", 110, 111, 110); case ZEND_AST_STATIC: smart_str_appends(str, "static $"); zend_ast_export_name(str, ast->child[0], 0, indent); diff --git a/Zend/zend_ast.h b/Zend/zend_ast.h index 08a8ab57f4e91..af512d6bebf9c 100644 --- a/Zend/zend_ast.h +++ b/Zend/zend_ast.h @@ -115,6 +115,7 @@ enum _zend_ast_kind { ZEND_AST_INSTANCEOF, ZEND_AST_YIELD, ZEND_AST_COALESCE, + ZEND_AST_EXCEPTION_COALESCE, ZEND_AST_STATIC, ZEND_AST_WHILE, diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 95d93903de631..567e3955a1b53 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -7313,6 +7313,21 @@ void zend_compile_coalesce(znode *result, zend_ast *ast) /* {{{ */ } /* }}} */ +void zend_compile_exception_coalesce(znode *result, zend_ast *ast) /* {{{ */ +{ + zend_ast *expr_ast = ast->child[0]; + zend_ast *default_ast = ast->child[1]; + + zend_ast *hack = zend_ast_create_ex(ZEND_AST_INCLUDE_OR_EVAL, ZEND_EVAL, + zend_ast_create_zval_from_str( + zend_ast_export("try { return ", expr_ast, "; } catch(\\Throwable $e) {}"))); + + ast->child[0] = hack; + + zend_compile_coalesce(result, ast); +} +/* }}} */ + void zend_compile_print(znode *result, zend_ast *ast) /* {{{ */ { zend_op *opline; @@ -8266,6 +8281,9 @@ void zend_compile_expr(znode *result, zend_ast *ast) /* {{{ */ case ZEND_AST_COALESCE: zend_compile_coalesce(result, ast); return; + case ZEND_AST_EXCEPTION_COALESCE: + zend_compile_exception_coalesce(result, ast); + return; case ZEND_AST_PRINT: zend_compile_print(result, ast); return; diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index 091d7f61e230b..c0a0cece43bfc 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -64,6 +64,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*); %left '=' T_PLUS_EQUAL T_MINUS_EQUAL T_MUL_EQUAL T_DIV_EQUAL T_CONCAT_EQUAL T_MOD_EQUAL T_AND_EQUAL T_OR_EQUAL T_XOR_EQUAL T_SL_EQUAL T_SR_EQUAL T_POW_EQUAL %left '?' ':' %right T_COALESCE +%right T_EXCEPTION_COALESCE %left T_BOOLEAN_OR %left T_BOOLEAN_AND %left '|' @@ -219,6 +220,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*); %token T_NS_SEPARATOR "\\ (T_NS_SEPARATOR)" %token T_ELLIPSIS "... (T_ELLIPSIS)" %token T_COALESCE "?? (T_COALESCE)" +%token T_EXCEPTION_COALESCE "??? (T_EXCEPTION_COALESCE)" %token T_POW "** (T_POW)" %token T_POW_EQUAL "**= (T_POW_EQUAL)" @@ -961,6 +963,8 @@ expr_without_variable: { $$ = zend_ast_create(ZEND_AST_CONDITIONAL, $1, NULL, $4); } | expr T_COALESCE expr { $$ = zend_ast_create(ZEND_AST_COALESCE, $1, $3); } + | expr T_EXCEPTION_COALESCE expr + { $$ = zend_ast_create(ZEND_AST_EXCEPTION_COALESCE, $1, $3); } | internal_functions_in_yacc { $$ = $1; } | T_INT_CAST expr { $$ = zend_ast_create_cast(IS_LONG, $2); } | T_DOUBLE_CAST expr { $$ = zend_ast_create_cast(IS_DOUBLE, $2); } diff --git a/Zend/zend_language_scanner.c b/Zend/zend_language_scanner.c index 7d73fd1c18bce..76a942af2fd3c 100644 --- a/Zend/zend_language_scanner.c +++ b/Zend/zend_language_scanner.c @@ -1,4 +1,4 @@ -/* Generated by re2c 0.16 */ +/* Generated by re2c 1.0.3 */ #line 1 "Zend/zend_language_scanner.l" /* +----------------------------------------------------------------------+ @@ -75,6 +75,7 @@ /* perform sanity check. If this message is triggered you should increase the ZEND_MMAP_AHEAD value in the zend_streams.h file */ #define YYMAXFILL 16 + #if ZEND_MMAP_AHEAD < YYMAXFILL # error ZEND_MMAP_AHEAD should be greater than or equal to YYMAXFILL #endif @@ -1108,7 +1109,7 @@ int start_line = CG(zend_lineno); SCNG(yy_text) = YYCURSOR; -#line 1112 "Zend/zend_language_scanner.c" +#line 1113 "Zend/zend_language_scanner.c" { YYCTYPE yych; unsigned int yyaccept = 0; @@ -1150,6045 +1151,5552 @@ int start_line = CG(zend_lineno); } } /* *********************************** */ -yyc_INITIAL: - YYDEBUG(1, *YYCURSOR); - YYFILL(7); - yych = *YYCURSOR; - if (yych == '<') goto yy5; - YYDEBUG(3, *YYCURSOR); - ++YYCURSOR; -yy4: - YYDEBUG(4, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1803 "Zend/zend_language_scanner.l" +yyc_ST_IN_SCRIPTING: { + static const unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 4, 0, 0, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 36, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 216, 216, 152, 152, 152, 152, 152, 152, + 152, 152, 0, 0, 0, 0, 0, 0, + 0, 144, 144, 144, 144, 144, 144, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 0, 0, 0, 0, 16, + 0, 144, 144, 144, 144, 144, 144, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 0, 0, 0, 0, 0, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + }; + YYDEBUG(1, *YYCURSOR); + YYFILL(16); + yych = *YYCURSOR; + if (yybm[0+yych] & 4) { + goto yy5; + } + switch (yych) { + case 0x00: + case 0x01: + case 0x02: + case 0x03: + case 0x04: + case 0x05: + case 0x06: + case 0x07: + case 0x08: + case '\t': + case '\n': + case '\v': + case '\f': + case '\r': + case 0x0E: + case 0x0F: + case 0x10: + case 0x11: + case 0x12: + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + case 0x18: + case 0x19: + case 0x1A: + case 0x1B: + case 0x1C: + case 0x1D: + case 0x1E: + case 0x1F: + case 0x7F: goto yy3; + case ' ': + case '!': goto yy8; + case '"': goto yy10; + case '#': goto yy12; + case '$': goto yy14; + case '%': goto yy15; + case '&': goto yy16; + case '\'': goto yy17; + case '(': goto yy19; + case ')': + case ',': + case ';': + case '@': + case '[': + case ']': + case '~': goto yy20; + case '*': goto yy21; + case '+': goto yy22; + case '-': goto yy23; + case '.': goto yy24; + case '/': goto yy25; + case '0': goto yy26; + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy28; + case ':': goto yy30; + case '<': goto yy31; + case '=': goto yy32; + case '>': goto yy33; + case '?': goto yy34; + case 'A': + case 'a': goto yy35; + case 'B': + case 'b': goto yy37; + case 'C': + case 'c': goto yy38; + case 'D': + case 'd': goto yy39; + case 'E': + case 'e': goto yy40; + case 'F': + case 'f': goto yy41; + case 'G': + case 'g': goto yy42; + case 'I': + case 'i': goto yy45; + case 'L': + case 'l': goto yy46; + case 'N': + case 'n': goto yy47; + case 'O': + case 'o': goto yy48; + case 'P': + case 'p': goto yy49; + case 'R': + case 'r': goto yy50; + case 'S': + case 's': goto yy51; + case 'T': + case 't': goto yy52; + case 'U': + case 'u': goto yy53; + case 'V': + case 'v': goto yy54; + case 'W': + case 'w': goto yy55; + case 'X': + case 'x': goto yy56; + case 'Y': + case 'y': goto yy57; + case '\\': goto yy58; + case '^': goto yy60; + case '_': goto yy61; + case '`': goto yy62; + case '{': goto yy64; + case '|': goto yy66; + case '}': goto yy67; + default: goto yy43; + } +yy3: + YYDEBUG(3, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(4, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2393 "Zend/zend_language_scanner.l" + { if (YYCURSOR > YYLIMIT) { RETURN_TOKEN(END); } -inline_char_handler: + zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); + goto restart; +} +#line 1330 "Zend/zend_language_scanner.c" +yy5: + YYDEBUG(5, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(6, *YYCURSOR); + if (yybm[0+yych] & 4) { + goto yy5; + } + YYDEBUG(7, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1292 "Zend/zend_language_scanner.l" + { + HANDLE_NEWLINES(yytext, yyleng); + RETURN_TOKEN(T_WHITESPACE); +} +#line 1347 "Zend/zend_language_scanner.c" +yy8: + YYDEBUG(8, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '=') goto yy69; +yy9: + YYDEBUG(9, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1581 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(yytext[0]); +} +#line 1359 "Zend/zend_language_scanner.c" +yy10: + YYDEBUG(10, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(11, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2041 "Zend/zend_language_scanner.l" + { + int bprefix = (yytext[0] != '"') ? 1 : 0; - while (1) { - YYCTYPE *ptr = memchr(YYCURSOR, '<', YYLIMIT - YYCURSOR); + while (YYCURSOR < YYLIMIT) { + switch (*YYCURSOR++) { + case '"': + yyleng = YYCURSOR - SCNG(yy_text); + zend_scan_escape_string(zendlval, yytext+bprefix+1, yyleng-bprefix-2, '"'); + RETURN_TOKEN(T_CONSTANT_ENCAPSED_STRING); + case '$': + if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') { + break; + } + continue; + case '{': + if (*YYCURSOR == '$') { + break; + } + continue; + case '\\': + if (YYCURSOR < YYLIMIT) { + YYCURSOR++; + } + /* fall through */ + default: + continue; + } - YYCURSOR = ptr ? ptr + 1 : YYLIMIT; + YYCURSOR--; + break; + } - if (YYCURSOR >= YYLIMIT) { - break; - } + /* Remember how much was scanned to save rescanning */ + SET_DOUBLE_QUOTES_SCANNED_LENGTH(YYCURSOR - SCNG(yy_text) - yyleng); - if (*YYCURSOR == '?') { - if (CG(short_tags) || !strncasecmp((char*)YYCURSOR + 1, "php", 3) || (*(YYCURSOR + 1) == '=')) { /* Assume [ \t\n\r] follows "php" */ + YYCURSOR = SCNG(yy_text) + yyleng; - YYCURSOR--; + BEGIN(ST_DOUBLE_QUOTES); + RETURN_TOKEN('"'); +} +#line 1406 "Zend/zend_language_scanner.c" +yy12: + YYDEBUG(12, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(13, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1901 "Zend/zend_language_scanner.l" + { + while (YYCURSOR < YYLIMIT) { + switch (*YYCURSOR++) { + case '\r': + if (*YYCURSOR == '\n') { + YYCURSOR++; + } + /* fall through */ + case '\n': + CG(zend_lineno)++; break; - } + case '?': + if (*YYCURSOR == '>') { + YYCURSOR--; + break; + } + /* fall through */ + default: + continue; } + + break; } yyleng = YYCURSOR - SCNG(yy_text); - if (SCNG(output_filter)) { - size_t readsize; - char *s = NULL; - size_t sz = 0; - // TODO: avoid reallocation ??? - readsize = SCNG(output_filter)((unsigned char **)&s, &sz, (unsigned char *)yytext, (size_t)yyleng); - ZVAL_STRINGL(zendlval, s, sz); - efree(s); - if (readsize < yyleng) { - yyless(readsize); - } - } else { - ZVAL_STRINGL(zendlval, yytext, yyleng); - } - HANDLE_NEWLINES(yytext, yyleng); - RETURN_TOKEN(T_INLINE_HTML); -} -#line 1209 "Zend/zend_language_scanner.c" -yy5: - YYDEBUG(5, *YYCURSOR); - yych = *++YYCURSOR; - if (yych != '?') goto yy4; - YYDEBUG(6, *YYCURSOR); - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= 'O') { - if (yych == '=') goto yy8; - } else { - if (yych <= 'P') goto yy10; - if (yych == 'p') goto yy10; - } -yy7: - YYDEBUG(7, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1794 "Zend/zend_language_scanner.l" - { - if (CG(short_tags)) { - BEGIN(ST_IN_SCRIPTING); - RETURN_TOKEN(T_OPEN_TAG); - } else { - goto inline_char_handler; - } -} -#line 1234 "Zend/zend_language_scanner.c" -yy8: - YYDEBUG(8, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(9, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1781 "Zend/zend_language_scanner.l" - { - BEGIN(ST_IN_SCRIPTING); - RETURN_TOKEN(T_OPEN_TAG_WITH_ECHO); + RETURN_TOKEN(T_COMMENT); } -#line 1245 "Zend/zend_language_scanner.c" -yy10: - YYDEBUG(10, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'H') goto yy12; - if (yych == 'h') goto yy12; -yy11: - YYDEBUG(11, *YYCURSOR); - YYCURSOR = YYMARKER; - goto yy7; -yy12: - YYDEBUG(12, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'P') goto yy13; - if (yych != 'p') goto yy11; -yy13: - YYDEBUG(13, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= '\f') { - if (yych <= 0x08) goto yy11; - if (yych >= '\v') goto yy11; - } else { - if (yych <= '\r') goto yy16; - if (yych != ' ') goto yy11; - } +#line 1441 "Zend/zend_language_scanner.c" yy14: - YYDEBUG(14, *YYCURSOR); - ++YYCURSOR; -yy15: - YYDEBUG(15, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1787 "Zend/zend_language_scanner.l" - { - HANDLE_NEWLINE(yytext[yyleng-1]); - BEGIN(ST_IN_SCRIPTING); - RETURN_TOKEN(T_OPEN_TAG); -} -#line 1282 "Zend/zend_language_scanner.c" -yy16: - YYDEBUG(16, *YYCURSOR); - ++YYCURSOR; - if ((yych = *YYCURSOR) == '\n') goto yy14; - goto yy15; -/* *********************************** */ -yyc_ST_BACKQUOTE: - { - static const unsigned char yybm[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 0, 0, 0, 0, 0, 0, - 0, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 0, 0, 0, 128, - 0, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 0, 0, 0, 0, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - }; - YYDEBUG(17, *YYCURSOR); - YYFILL(2); - yych = *YYCURSOR; + YYDEBUG(14, *YYCURSOR); + yych = *++YYCURSOR; if (yych <= '_') { - if (yych == '$') goto yy21; + if (yych <= '@') goto yy9; + if (yych <= 'Z') goto yy71; + if (yych <= '^') goto yy9; + goto yy71; } else { - if (yych <= '`') goto yy22; - if (yych == '{') goto yy24; + if (yych <= '`') goto yy9; + if (yych <= 'z') goto yy71; + if (yych <= 0x7F) goto yy9; + goto yy71; } - YYDEBUG(19, *YYCURSOR); +yy15: + YYDEBUG(15, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '=') goto yy74; + goto yy9; +yy16: + YYDEBUG(16, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '&') goto yy76; + if (yych == '=') goto yy78; + goto yy9; +yy17: + YYDEBUG(17, *YYCURSOR); ++YYCURSOR; -yy20: - YYDEBUG(20, *YYCURSOR); + YYDEBUG(18, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2216 "Zend/zend_language_scanner.l" +#line 1972 "Zend/zend_language_scanner.l" { - if (YYCURSOR > YYLIMIT) { - RETURN_TOKEN(END); - } - if (yytext[0] == '\\' && YYCURSOR < YYLIMIT) { - YYCURSOR++; - } + register char *s, *t; + char *end; + int bprefix = (yytext[0] != '\'') ? 1 : 0; + + while (1) { + if (YYCURSOR < YYLIMIT) { + if (*YYCURSOR == '\'') { + YYCURSOR++; + yyleng = YYCURSOR - SCNG(yy_text); - while (YYCURSOR < YYLIMIT) { - switch (*YYCURSOR++) { - case '`': break; - case '$': - if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') { + } else if (*YYCURSOR++ == '\\' && YYCURSOR < YYLIMIT) { + YYCURSOR++; + } + } else { + yyleng = YYLIMIT - SCNG(yy_text); + + /* Unclosed single quotes; treat similar to double quotes, but without a separate token + * for ' (unrecognized by parser), instead of old flex fallback to "Unexpected character..." + * rule, which continued in ST_IN_SCRIPTING state after the quote */ + ZVAL_NULL(zendlval); + RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE); + } + } + + ZVAL_STRINGL(zendlval, yytext+bprefix+1, yyleng-bprefix-2); + + /* convert escape sequences */ + s = t = Z_STRVAL_P(zendlval); + end = s+Z_STRLEN_P(zendlval); + while (s') goto yy36; -yy33: - YYDEBUG(33, *YYCURSOR); - YYCURSOR = YYMARKER; - goto yy27; -yy34: - YYDEBUG(34, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(35, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1861 "Zend/zend_language_scanner.l" +#line 1651 "Zend/zend_language_scanner.l" { - yyless(yyleng - 1); - yy_push_state(ST_VAR_OFFSET); - zend_copy_value(zendlval, (yytext+1), (yyleng-1)); - RETURN_TOKEN(T_VARIABLE); -} -#line 1480 "Zend/zend_language_scanner.c" -yy36: - YYDEBUG(36, *YYCURSOR); + char *end; + if (yyleng < MAX_LENGTH_OF_LONG - 1) { /* Won't overflow */ + errno = 0; + ZVAL_LONG(zendlval, ZEND_STRTOL(yytext, &end, 0)); + /* This isn't an assert, we need to ensure 019 isn't valid octal + * Because the lexing itself doesn't do that for us + */ + if (end != yytext + yyleng) { + zend_throw_exception(zend_ce_parse_error, "Invalid numeric literal", 0); + ZVAL_UNDEF(zendlval); + RETURN_TOKEN(T_LNUMBER); + } + } else { + errno = 0; + ZVAL_LONG(zendlval, ZEND_STRTOL(yytext, &end, 0)); + if (errno == ERANGE) { /* Overflow */ + errno = 0; + if (yytext[0] == '0') { /* octal overflow */ + ZVAL_DOUBLE(zendlval, zend_oct_strtod(yytext, (const char **)&end)); + } else { + ZVAL_DOUBLE(zendlval, zend_strtod(yytext, (const char **)&end)); + } + /* Also not an assert for the same reason */ + if (end != yytext + yyleng) { + zend_throw_exception(zend_ce_parse_error, + "Invalid numeric literal", 0); + ZVAL_UNDEF(zendlval); + RETURN_TOKEN(T_DNUMBER); + } + RETURN_TOKEN(T_DNUMBER); + } + /* Also not an assert for the same reason */ + if (end != yytext + yyleng) { + zend_throw_exception(zend_ce_parse_error, "Invalid numeric literal", 0); + ZVAL_UNDEF(zendlval); + RETURN_TOKEN(T_DNUMBER); + } + } + ZEND_ASSERT(!errno); + RETURN_TOKEN(T_LNUMBER); +} +#line 1707 "Zend/zend_language_scanner.c" +yy28: + YYDEBUG(28, *YYCURSOR); + yyaccept = 1; + YYMARKER = ++YYCURSOR; + YYFILL(3); + yych = *YYCURSOR; +yy29: + YYDEBUG(29, *YYCURSOR); + if (yybm[0+yych] & 8) { + goto yy28; + } + if (yych <= 'D') { + if (yych == '.') goto yy107; + goto yy27; + } else { + if (yych <= 'E') goto yy117; + if (yych == 'e') goto yy117; + goto yy27; + } +yy30: + YYDEBUG(30, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '_') { - if (yych <= '@') goto yy33; - if (yych <= 'Z') goto yy37; - if (yych <= '^') goto yy33; + if (yych == ':') goto yy119; + goto yy9; +yy31: + YYDEBUG(31, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= ';') goto yy9; + if (yych <= '<') goto yy121; + if (yych <= '=') goto yy123; + if (yych <= '>') goto yy125; + goto yy9; +yy32: + YYDEBUG(32, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '<') goto yy9; + if (yych <= '=') goto yy126; + if (yych <= '>') goto yy128; + goto yy9; +yy33: + YYDEBUG(33, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '<') goto yy9; + if (yych <= '=') goto yy130; + if (yych <= '>') goto yy132; + goto yy9; +yy34: + YYDEBUG(34, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '=') goto yy9; + if (yych <= '>') goto yy134; + if (yych <= '?') goto yy136; + goto yy9; +yy35: + YYDEBUG(35, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'S') { + if (yych <= 'M') { + if (yych == 'B') goto yy138; + goto yy44; + } else { + if (yych <= 'N') goto yy139; + if (yych <= 'Q') goto yy44; + if (yych <= 'R') goto yy140; + goto yy141; + } } else { - if (yych <= '`') goto yy33; - if (yych <= 'z') goto yy37; - if (yych <= 0x7F) goto yy33; + if (yych <= 'n') { + if (yych == 'b') goto yy138; + if (yych <= 'm') goto yy44; + goto yy139; + } else { + if (yych <= 'q') goto yy44; + if (yych <= 'r') goto yy140; + if (yych <= 's') goto yy141; + goto yy44; + } } -yy37: - YYDEBUG(37, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(38, *YYCURSOR); +yy36: + YYDEBUG(36, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1852 "Zend/zend_language_scanner.l" +#line 1895 "Zend/zend_language_scanner.l" { - yyless(yyleng - 3); - yy_push_state(ST_LOOKING_FOR_PROPERTY); - zend_copy_value(zendlval, (yytext+1), (yyleng-1)); - RETURN_TOKEN(T_VARIABLE); + zend_copy_value(zendlval, yytext, yyleng); + RETURN_TOKEN(T_STRING); } -#line 1505 "Zend/zend_language_scanner.c" - } -/* *********************************** */ -yyc_ST_DOUBLE_QUOTES: - { - static const unsigned char yybm[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 0, 0, 0, 0, 0, 0, - 0, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 0, 0, 0, 128, - 0, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 0, 0, 0, 0, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - }; +#line 1794 "Zend/zend_language_scanner.c" +yy37: + YYDEBUG(37, *YYCURSOR); + yyaccept = 2; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= ';') { + if (yych <= '"') { + if (yych <= '!') goto yy44; + goto yy10; + } else { + if (yych == '\'') goto yy17; + goto yy44; + } + } else { + if (yych <= 'R') { + if (yych <= '<') goto yy143; + if (yych <= 'Q') goto yy44; + goto yy144; + } else { + if (yych == 'r') goto yy144; + goto yy44; + } + } +yy38: + YYDEBUG(38, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'O') { + if (yych <= 'K') { + if (yych == 'A') goto yy145; + goto yy44; + } else { + if (yych <= 'L') goto yy146; + if (yych <= 'N') goto yy44; + goto yy147; + } + } else { + if (yych <= 'k') { + if (yych == 'a') goto yy145; + goto yy44; + } else { + if (yych <= 'l') goto yy146; + if (yych == 'o') goto yy147; + goto yy44; + } + } +yy39: YYDEBUG(39, *YYCURSOR); - YYFILL(2); - yych = *YYCURSOR; - if (yych <= '#') { - if (yych == '"') goto yy43; + yych = *++YYCURSOR; + if (yych <= 'O') { + if (yych <= 'H') { + if (yych == 'E') goto yy148; + goto yy44; + } else { + if (yych <= 'I') goto yy149; + if (yych <= 'N') goto yy44; + goto yy150; + } } else { - if (yych <= '$') goto yy45; - if (yych == '{') goto yy46; + if (yych <= 'h') { + if (yych == 'e') goto yy148; + goto yy44; + } else { + if (yych <= 'i') goto yy149; + if (yych == 'o') goto yy150; + goto yy44; + } } +yy40: + YYDEBUG(40, *YYCURSOR); + yych = *++YYCURSOR; + switch (yych) { + case 'C': + case 'c': goto yy152; + case 'L': + case 'l': goto yy153; + case 'M': + case 'm': goto yy154; + case 'N': + case 'n': goto yy155; + case 'V': + case 'v': goto yy156; + case 'X': + case 'x': goto yy157; + default: goto yy44; + } +yy41: YYDEBUG(41, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych <= 'U') { + if (yych <= 'N') { + if (yych == 'I') goto yy158; + goto yy44; + } else { + if (yych <= 'O') goto yy159; + if (yych <= 'T') goto yy44; + goto yy160; + } + } else { + if (yych <= 'n') { + if (yych == 'i') goto yy158; + goto yy44; + } else { + if (yych <= 'o') goto yy159; + if (yych == 'u') goto yy160; + goto yy44; + } + } yy42: YYDEBUG(42, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 2166 "Zend/zend_language_scanner.l" - { - if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) { - YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1; - SET_DOUBLE_QUOTES_SCANNED_LENGTH(0); - - goto double_quotes_scan_done; - } - - if (YYCURSOR > YYLIMIT) { - RETURN_TOKEN(END); - } - if (yytext[0] == '\\' && YYCURSOR < YYLIMIT) { - YYCURSOR++; - } - - while (YYCURSOR < YYLIMIT) { - switch (*YYCURSOR++) { - case '"': - break; - case '$': - if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') { - break; - } - continue; - case '{': - if (*YYCURSOR == '$') { - break; - } - continue; - case '\\': - if (YYCURSOR < YYLIMIT) { - YYCURSOR++; - } - /* fall through */ - default: - continue; + yych = *++YYCURSOR; + if (yych <= 'O') { + if (yych == 'L') goto yy161; + if (yych <= 'N') goto yy44; + goto yy162; + } else { + if (yych <= 'l') { + if (yych <= 'k') goto yy44; + goto yy161; + } else { + if (yych == 'o') goto yy162; + goto yy44; + } } - - YYCURSOR--; - break; - } - -double_quotes_scan_done: - yyleng = YYCURSOR - SCNG(yy_text); - - zend_scan_escape_string(zendlval, yytext, yyleng, '"'); - RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE); -} -#line 1607 "Zend/zend_language_scanner.c" yy43: YYDEBUG(43, *YYCURSOR); ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; +yy44: YYDEBUG(44, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 2155 "Zend/zend_language_scanner.l" - { - BEGIN(ST_IN_SCRIPTING); - RETURN_TOKEN('"'); -} -#line 1618 "Zend/zend_language_scanner.c" + if (yybm[0+yych] & 16) { + goto yy43; + } + goto yy36; yy45: YYDEBUG(45, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '_') { - if (yych <= '@') goto yy42; - if (yych <= 'Z') goto yy47; - if (yych <= '^') goto yy42; - goto yy47; + if (yych <= 'S') { + if (yych <= 'L') { + if (yych == 'F') goto yy163; + goto yy44; + } else { + if (yych <= 'M') goto yy165; + if (yych <= 'N') goto yy166; + if (yych <= 'R') goto yy44; + goto yy167; + } } else { - if (yych <= 'z') { - if (yych <= '`') goto yy42; - goto yy47; + if (yych <= 'm') { + if (yych == 'f') goto yy163; + if (yych <= 'l') goto yy44; + goto yy165; } else { - if (yych <= '{') goto yy50; - if (yych <= 0x7F) goto yy42; - goto yy47; + if (yych <= 'n') goto yy166; + if (yych == 's') goto yy167; + goto yy44; } } yy46: YYDEBUG(46, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '$') goto yy52; - goto yy42; + if (yych == 'I') goto yy168; + if (yych == 'i') goto yy168; + goto yy44; yy47: - YYDEBUG(47, *YYCURSOR); - YYMARKER = ++YYCURSOR; - YYFILL(3); - yych = *YYCURSOR; - YYDEBUG(48, *YYCURSOR); - if (yybm[0+yych] & 128) { - goto yy47; - } - if (yych == '-') goto yy54; - if (yych <= '@') goto yy49; - if (yych <= '[') goto yy56; -yy49: - YYDEBUG(49, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1868 "Zend/zend_language_scanner.l" - { - zend_copy_value(zendlval, (yytext+1), (yyleng-1)); - RETURN_TOKEN(T_VARIABLE); -} -#line 1662 "Zend/zend_language_scanner.c" -yy50: - YYDEBUG(50, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(51, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1588 "Zend/zend_language_scanner.l" - { - yy_push_state(ST_LOOKING_FOR_VARNAME); - RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES); -} -#line 1673 "Zend/zend_language_scanner.c" -yy52: - YYDEBUG(52, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(53, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 2147 "Zend/zend_language_scanner.l" - { - Z_LVAL_P(zendlval) = (zend_long) '{'; - yy_push_state(ST_IN_SCRIPTING); - yyless(1); - RETURN_TOKEN(T_CURLY_OPEN); -} -#line 1686 "Zend/zend_language_scanner.c" -yy54: - YYDEBUG(54, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '>') goto yy58; -yy55: - YYDEBUG(55, *YYCURSOR); - YYCURSOR = YYMARKER; - goto yy49; -yy56: - YYDEBUG(56, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(57, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1861 "Zend/zend_language_scanner.l" - { - yyless(yyleng - 1); - yy_push_state(ST_VAR_OFFSET); - zend_copy_value(zendlval, (yytext+1), (yyleng-1)); - RETURN_TOKEN(T_VARIABLE); -} -#line 1707 "Zend/zend_language_scanner.c" -yy58: - YYDEBUG(58, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= '_') { - if (yych <= '@') goto yy55; - if (yych <= 'Z') goto yy59; - if (yych <= '^') goto yy55; - } else { - if (yych <= '`') goto yy55; - if (yych <= 'z') goto yy59; - if (yych <= 0x7F) goto yy55; - } -yy59: - YYDEBUG(59, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(60, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1852 "Zend/zend_language_scanner.l" - { - yyless(yyleng - 3); - yy_push_state(ST_LOOKING_FOR_PROPERTY); - zend_copy_value(zendlval, (yytext+1), (yyleng-1)); - RETURN_TOKEN(T_VARIABLE); -} -#line 1732 "Zend/zend_language_scanner.c" - } -/* *********************************** */ -yyc_ST_END_HEREDOC: - YYDEBUG(61, *YYCURSOR); - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(63, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(64, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 2133 "Zend/zend_language_scanner.l" - { - zend_heredoc_label *heredoc_label = zend_ptr_stack_pop(&SCNG(heredoc_label_stack)); - - YYCURSOR += heredoc_label->length - 1; - yyleng = heredoc_label->length; - - heredoc_label_dtor(heredoc_label); - efree(heredoc_label); - - BEGIN(ST_IN_SCRIPTING); - RETURN_TOKEN(T_END_HEREDOC); -} -#line 1756 "Zend/zend_language_scanner.c" -/* *********************************** */ -yyc_ST_HEREDOC: - { - static const unsigned char yybm[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 0, 0, 0, 0, 0, 0, - 0, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 0, 0, 0, 128, - 0, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 0, 0, 0, 0, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - }; - YYDEBUG(65, *YYCURSOR); - YYFILL(2); - yych = *YYCURSOR; - if (yych == '$') goto yy69; - if (yych == '{') goto yy70; - YYDEBUG(67, *YYCURSOR); - ++YYCURSOR; -yy68: - YYDEBUG(68, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 2258 "Zend/zend_language_scanner.l" - { - int newline = 0; - - zend_heredoc_label *heredoc_label = zend_ptr_stack_top(&SCNG(heredoc_label_stack)); - - if (YYCURSOR > YYLIMIT) { - RETURN_TOKEN(END); - } - - YYCURSOR--; - - while (YYCURSOR < YYLIMIT) { - switch (*YYCURSOR++) { - case '\r': - if (*YYCURSOR == '\n') { - YYCURSOR++; - } - /* fall through */ - case '\n': - /* Check for ending label on the next line */ - if (IS_LABEL_START(*YYCURSOR) && heredoc_label->length < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, heredoc_label->label, heredoc_label->length)) { - YYCTYPE *end = YYCURSOR + heredoc_label->length; - - if (*end == ';') { - end++; - } - - if (*end == '\n' || *end == '\r') { - /* newline before label will be subtracted from returned text, but - * yyleng/yytext will include it, for zend_highlight/strip, tokenizer, etc. */ - if (YYCURSOR[-2] == '\r' && YYCURSOR[-1] == '\n') { - newline = 2; /* Windows newline */ - } else { - newline = 1; - } - - CG(increment_lineno) = 1; /* For newline before label */ - BEGIN(ST_END_HEREDOC); - - goto heredoc_scan_done; - } - } - continue; - case '$': - if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') { - break; - } - continue; - case '{': - if (*YYCURSOR == '$') { - break; - } - continue; - case '\\': - if (YYCURSOR < YYLIMIT && *YYCURSOR != '\n' && *YYCURSOR != '\r') { - YYCURSOR++; - } - /* fall through */ - default: - continue; + YYDEBUG(47, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'E') { + if (yych == 'A') goto yy169; + if (yych <= 'D') goto yy44; + goto yy170; + } else { + if (yych <= 'a') { + if (yych <= '`') goto yy44; + goto yy169; + } else { + if (yych == 'e') goto yy170; + goto yy44; + } } - - YYCURSOR--; - break; - } - -heredoc_scan_done: - yyleng = YYCURSOR - SCNG(yy_text); - - zend_scan_escape_string(zendlval, yytext, yyleng - newline, 0); - RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE); -} -#line 1877 "Zend/zend_language_scanner.c" -yy69: - YYDEBUG(69, *YYCURSOR); +yy48: + YYDEBUG(48, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '_') { - if (yych <= '@') goto yy68; - if (yych <= 'Z') goto yy71; - if (yych <= '^') goto yy68; - goto yy71; + if (yych == 'R') goto yy171; + if (yych == 'r') goto yy171; + goto yy44; +yy49: + YYDEBUG(49, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'U') { + if (yych == 'R') goto yy173; + if (yych <= 'T') goto yy44; + goto yy174; } else { - if (yych <= 'z') { - if (yych <= '`') goto yy68; - goto yy71; + if (yych <= 'r') { + if (yych <= 'q') goto yy44; + goto yy173; } else { - if (yych <= '{') goto yy74; - if (yych <= 0x7F) goto yy68; - goto yy71; + if (yych == 'u') goto yy174; + goto yy44; } } -yy70: - YYDEBUG(70, *YYCURSOR); +yy50: + YYDEBUG(50, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '$') goto yy76; - goto yy68; -yy71: - YYDEBUG(71, *YYCURSOR); - YYMARKER = ++YYCURSOR; - YYFILL(3); - yych = *YYCURSOR; - YYDEBUG(72, *YYCURSOR); - if (yybm[0+yych] & 128) { - goto yy71; + if (yych == 'E') goto yy175; + if (yych == 'e') goto yy175; + goto yy44; +yy51: + YYDEBUG(51, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'W') { + if (yych == 'T') goto yy176; + if (yych <= 'V') goto yy44; + goto yy177; + } else { + if (yych <= 't') { + if (yych <= 's') goto yy44; + goto yy176; + } else { + if (yych == 'w') goto yy177; + goto yy44; + } } - if (yych == '-') goto yy78; - if (yych <= '@') goto yy73; - if (yych <= '[') goto yy80; -yy73: - YYDEBUG(73, *YYCURSOR); +yy52: + YYDEBUG(52, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'R') { + if (yych == 'H') goto yy178; + if (yych <= 'Q') goto yy44; + goto yy179; + } else { + if (yych <= 'h') { + if (yych <= 'g') goto yy44; + goto yy178; + } else { + if (yych == 'r') goto yy179; + goto yy44; + } + } +yy53: + YYDEBUG(53, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'S') { + if (yych == 'N') goto yy180; + if (yych <= 'R') goto yy44; + goto yy181; + } else { + if (yych <= 'n') { + if (yych <= 'm') goto yy44; + goto yy180; + } else { + if (yych == 's') goto yy181; + goto yy44; + } + } +yy54: + YYDEBUG(54, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy182; + if (yych == 'a') goto yy182; + goto yy44; +yy55: + YYDEBUG(55, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'H') goto yy183; + if (yych == 'h') goto yy183; + goto yy44; +yy56: + YYDEBUG(56, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'O') goto yy184; + if (yych == 'o') goto yy184; + goto yy44; +yy57: + YYDEBUG(57, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'I') goto yy185; + if (yych == 'i') goto yy185; + goto yy44; +yy58: + YYDEBUG(58, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(59, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1868 "Zend/zend_language_scanner.l" +#line 1317 "Zend/zend_language_scanner.l" { - zend_copy_value(zendlval, (yytext+1), (yyleng-1)); - RETURN_TOKEN(T_VARIABLE); + RETURN_TOKEN(T_NS_SEPARATOR); } -#line 1921 "Zend/zend_language_scanner.c" -yy74: - YYDEBUG(74, *YYCURSOR); +#line 2083 "Zend/zend_language_scanner.c" +yy60: + YYDEBUG(60, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '=') goto yy186; + goto yy9; +yy61: + YYDEBUG(61, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '_') goto yy188; + goto yy44; +yy62: + YYDEBUG(62, *YYCURSOR); ++YYCURSOR; - YYDEBUG(75, *YYCURSOR); + YYDEBUG(63, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1588 "Zend/zend_language_scanner.l" +#line 2131 "Zend/zend_language_scanner.l" { - yy_push_state(ST_LOOKING_FOR_VARNAME); - RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES); + BEGIN(ST_BACKQUOTE); + RETURN_TOKEN('`'); } -#line 1932 "Zend/zend_language_scanner.c" -yy76: - YYDEBUG(76, *YYCURSOR); +#line 2104 "Zend/zend_language_scanner.c" +yy64: + YYDEBUG(64, *YYCURSOR); ++YYCURSOR; - YYDEBUG(77, *YYCURSOR); + YYDEBUG(65, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2147 "Zend/zend_language_scanner.l" +#line 1586 "Zend/zend_language_scanner.l" { - Z_LVAL_P(zendlval) = (zend_long) '{'; yy_push_state(ST_IN_SCRIPTING); - yyless(1); - RETURN_TOKEN(T_CURLY_OPEN); + RETURN_TOKEN('{'); } -#line 1945 "Zend/zend_language_scanner.c" -yy78: - YYDEBUG(78, *YYCURSOR); +#line 2115 "Zend/zend_language_scanner.c" +yy66: + YYDEBUG(66, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '>') goto yy82; -yy79: - YYDEBUG(79, *YYCURSOR); - YYCURSOR = YYMARKER; - goto yy73; -yy80: - YYDEBUG(80, *YYCURSOR); + if (yych == '=') goto yy189; + if (yych == '|') goto yy191; + goto yy9; +yy67: + YYDEBUG(67, *YYCURSOR); ++YYCURSOR; - YYDEBUG(81, *YYCURSOR); + YYDEBUG(68, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1861 "Zend/zend_language_scanner.l" +#line 1598 "Zend/zend_language_scanner.l" { - yyless(yyleng - 1); - yy_push_state(ST_VAR_OFFSET); - zend_copy_value(zendlval, (yytext+1), (yyleng-1)); - RETURN_TOKEN(T_VARIABLE); + RESET_DOC_COMMENT(); + if (!zend_stack_is_empty(&SCNG(state_stack))) { + yy_pop_state(); + } + RETURN_TOKEN('}'); } -#line 1966 "Zend/zend_language_scanner.c" -yy82: - YYDEBUG(82, *YYCURSOR); +#line 2135 "Zend/zend_language_scanner.c" +yy69: + YYDEBUG(69, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '_') { - if (yych <= '@') goto yy79; - if (yych <= 'Z') goto yy83; - if (yych <= '^') goto yy79; + if (yych == '=') goto yy193; +yy70: + YYDEBUG(70, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1485 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_IS_NOT_EQUAL); +} +#line 2147 "Zend/zend_language_scanner.c" +yy71: + YYDEBUG(71, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(72, *YYCURSOR); + if (yych <= '^') { + if (yych <= '9') { + if (yych >= '0') goto yy71; + } else { + if (yych <= '@') goto yy73; + if (yych <= 'Z') goto yy71; + } } else { - if (yych <= '`') goto yy79; - if (yych <= 'z') goto yy83; - if (yych <= 0x7F) goto yy79; + if (yych <= '`') { + if (yych <= '_') goto yy71; + } else { + if (yych <= 'z') goto yy71; + if (yych >= 0x80) goto yy71; + } } -yy83: - YYDEBUG(83, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(84, *YYCURSOR); +yy73: + YYDEBUG(73, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1852 "Zend/zend_language_scanner.l" +#line 1872 "Zend/zend_language_scanner.l" { - yyless(yyleng - 3); - yy_push_state(ST_LOOKING_FOR_PROPERTY); zend_copy_value(zendlval, (yytext+1), (yyleng-1)); RETURN_TOKEN(T_VARIABLE); } -#line 1991 "Zend/zend_language_scanner.c" - } -/* *********************************** */ -yyc_ST_IN_SCRIPTING: - { - static const unsigned char yybm[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 36, 4, 0, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 36, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 216, 216, 152, 152, 152, 152, 152, 152, - 152, 152, 0, 0, 0, 0, 0, 0, - 0, 144, 144, 144, 144, 144, 144, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 0, 0, 0, 0, 16, - 0, 144, 144, 144, 144, 144, 144, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 0, 0, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - }; - YYDEBUG(85, *YYCURSOR); - YYFILL(16); - yych = *YYCURSOR; - if (yybm[0+yych] & 4) { - goto yy89; - } - switch (yych) { - case 0x00: - case 0x01: - case 0x02: - case 0x03: - case 0x04: - case 0x05: - case 0x06: - case 0x07: - case 0x08: - case '\t': - case '\n': - case '\v': - case '\f': - case '\r': - case 0x0E: - case 0x0F: - case 0x10: - case 0x11: - case 0x12: - case 0x13: - case 0x14: - case 0x15: - case 0x16: - case 0x17: - case 0x18: - case 0x19: - case 0x1A: - case 0x1B: - case 0x1C: - case 0x1D: - case 0x1E: - case 0x1F: - case 0x7F: goto yy87; - case ' ': - case '!': goto yy92; - case '"': goto yy94; - case '#': goto yy96; - case '$': goto yy98; - case '%': goto yy99; - case '&': goto yy100; - case '\'': goto yy101; - case '(': goto yy103; - case ')': - case ',': - case ';': - case '@': - case '[': - case ']': - case '~': goto yy104; - case '*': goto yy105; - case '+': goto yy106; - case '-': goto yy107; - case '.': goto yy108; - case '/': goto yy109; - case '0': goto yy110; - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy112; - case ':': goto yy114; - case '<': goto yy115; - case '=': goto yy116; - case '>': goto yy117; - case '?': goto yy118; +#line 2177 "Zend/zend_language_scanner.c" +yy74: + YYDEBUG(74, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(75, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1529 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_MOD_EQUAL); +} +#line 2187 "Zend/zend_language_scanner.c" +yy76: + YYDEBUG(76, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(77, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1557 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_BOOLEAN_AND); +} +#line 2197 "Zend/zend_language_scanner.c" +yy78: + YYDEBUG(78, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(79, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1541 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_AND_EQUAL); +} +#line 2207 "Zend/zend_language_scanner.c" +yy80: + YYDEBUG(80, *YYCURSOR); + ++YYCURSOR; + YYFILL(7); + yych = *YYCURSOR; +yy81: + YYDEBUG(81, *YYCURSOR); + if (yybm[0+yych] & 32) { + goto yy80; + } + switch (yych) { case 'A': - case 'a': goto yy119; + case 'a': goto yy83; case 'B': - case 'b': goto yy121; - case 'C': - case 'c': goto yy122; + case 'b': goto yy84; case 'D': - case 'd': goto yy123; - case 'E': - case 'e': goto yy124; + case 'd': goto yy85; case 'F': - case 'f': goto yy125; - case 'G': - case 'g': goto yy126; + case 'f': goto yy86; case 'I': - case 'i': goto yy129; - case 'L': - case 'l': goto yy130; - case 'N': - case 'n': goto yy131; + case 'i': goto yy87; case 'O': - case 'o': goto yy132; - case 'P': - case 'p': goto yy133; + case 'o': goto yy88; case 'R': - case 'r': goto yy134; + case 'r': goto yy89; case 'S': - case 's': goto yy135; - case 'T': - case 't': goto yy136; + case 's': goto yy90; case 'U': - case 'u': goto yy137; - case 'V': - case 'v': goto yy138; - case 'W': - case 'w': goto yy139; - case 'X': - case 'x': goto yy140; - case 'Y': - case 'y': goto yy141; - case '\\': goto yy142; - case '^': goto yy144; - case '_': goto yy145; - case '`': goto yy146; - case '{': goto yy148; - case '|': goto yy150; - case '}': goto yy151; - default: goto yy127; + case 'u': goto yy91; + default: goto yy82; + } +yy82: + YYDEBUG(82, *YYCURSOR); + YYCURSOR = YYMARKER; + if (yyaccept <= 3) { + if (yyaccept <= 1) { + if (yyaccept == 0) { + goto yy9; + } else { + goto yy27; + } + } else { + if (yyaccept == 2) { + goto yy36; + } else { + goto yy109; + } + } + } else { + if (yyaccept <= 5) { + if (yyaccept == 4) { + goto yy113; + } else { + goto yy122; + } + } else { + goto yy459; + } + } +yy83: + YYDEBUG(83, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy195; + if (yych == 'r') goto yy195; + goto yy82; +yy84: + YYDEBUG(84, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'O') { + if (yych == 'I') goto yy196; + if (yych <= 'N') goto yy82; + goto yy197; + } else { + if (yych <= 'i') { + if (yych <= 'h') goto yy82; + goto yy196; + } else { + if (yych == 'o') goto yy197; + goto yy82; + } } +yy85: + YYDEBUG(85, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'O') goto yy198; + if (yych == 'o') goto yy198; + goto yy82; +yy86: + YYDEBUG(86, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy199; + if (yych == 'l') goto yy199; + goto yy82; yy87: YYDEBUG(87, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'N') goto yy200; + if (yych == 'n') goto yy200; + goto yy82; +yy88: YYDEBUG(88, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 2389 "Zend/zend_language_scanner.l" - { - if (YYCURSOR > YYLIMIT) { - RETURN_TOKEN(END); - } - - zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); - goto restart; -} -#line 2169 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'B') goto yy201; + if (yych == 'b') goto yy201; + goto yy82; yy89: YYDEBUG(89, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'E') goto yy202; + if (yych == 'e') goto yy202; + goto yy82; +yy90: YYDEBUG(90, *YYCURSOR); - if (yybm[0+yych] & 4) { - goto yy89; - } + yych = *++YYCURSOR; + if (yych == 'T') goto yy203; + if (yych == 't') goto yy203; + goto yy82; +yy91: YYDEBUG(91, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1292 "Zend/zend_language_scanner.l" - { - HANDLE_NEWLINES(yytext, yyleng); - RETURN_TOKEN(T_WHITESPACE); -} -#line 2186 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'N') goto yy204; + if (yych == 'n') goto yy204; + goto yy82; yy92: YYDEBUG(92, *YYCURSOR); - ++YYCURSOR; - if ((yych = *YYCURSOR) == '=') goto yy153; -yy93: + yych = *++YYCURSOR; + if (yych == '=') goto yy205; YYDEBUG(93, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1577 "Zend/zend_language_scanner.l" +#line 1513 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(yytext[0]); + RETURN_TOKEN(T_POW); } -#line 2198 "Zend/zend_language_scanner.c" +#line 2341 "Zend/zend_language_scanner.c" yy94: YYDEBUG(94, *YYCURSOR); ++YYCURSOR; YYDEBUG(95, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2037 "Zend/zend_language_scanner.l" +#line 1509 "Zend/zend_language_scanner.l" { - int bprefix = (yytext[0] != '"') ? 1 : 0; - - while (YYCURSOR < YYLIMIT) { - switch (*YYCURSOR++) { - case '"': - yyleng = YYCURSOR - SCNG(yy_text); - zend_scan_escape_string(zendlval, yytext+bprefix+1, yyleng-bprefix-2, '"'); - RETURN_TOKEN(T_CONSTANT_ENCAPSED_STRING); - case '$': - if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') { - break; - } - continue; - case '{': - if (*YYCURSOR == '$') { - break; - } - continue; - case '\\': - if (YYCURSOR < YYLIMIT) { - YYCURSOR++; - } - /* fall through */ - default: - continue; - } - - YYCURSOR--; - break; - } - - /* Remember how much was scanned to save rescanning */ - SET_DOUBLE_QUOTES_SCANNED_LENGTH(YYCURSOR - SCNG(yy_text) - yyleng); - - YYCURSOR = SCNG(yy_text) + yyleng; - - BEGIN(ST_DOUBLE_QUOTES); - RETURN_TOKEN('"'); + RETURN_TOKEN(T_MUL_EQUAL); } -#line 2245 "Zend/zend_language_scanner.c" +#line 2351 "Zend/zend_language_scanner.c" yy96: YYDEBUG(96, *YYCURSOR); ++YYCURSOR; YYDEBUG(97, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1897 "Zend/zend_language_scanner.l" +#line 1465 "Zend/zend_language_scanner.l" { - while (YYCURSOR < YYLIMIT) { - switch (*YYCURSOR++) { - case '\r': - if (*YYCURSOR == '\n') { - YYCURSOR++; - } - /* fall through */ - case '\n': - CG(zend_lineno)++; - break; - case '?': - if (*YYCURSOR == '>') { - YYCURSOR--; - break; - } - /* fall through */ - default: - continue; - } - - break; - } - - yyleng = YYCURSOR - SCNG(yy_text); - - RETURN_TOKEN(T_COMMENT); + RETURN_TOKEN(T_INC); } -#line 2280 "Zend/zend_language_scanner.c" +#line 2361 "Zend/zend_language_scanner.c" yy98: YYDEBUG(98, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= '_') { - if (yych <= '@') goto yy93; - if (yych <= 'Z') goto yy155; - if (yych <= '^') goto yy93; - goto yy155; - } else { - if (yych <= '`') goto yy93; - if (yych <= 'z') goto yy155; - if (yych <= 0x7F) goto yy93; - goto yy155; - } -yy99: + ++YYCURSOR; YYDEBUG(99, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '=') goto yy158; - goto yy93; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1501 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_PLUS_EQUAL); +} +#line 2371 "Zend/zend_language_scanner.c" yy100: YYDEBUG(100, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '&') goto yy160; - if (yych == '=') goto yy162; - goto yy93; -yy101: - YYDEBUG(101, *YYCURSOR); ++YYCURSOR; - YYDEBUG(102, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1968 "Zend/zend_language_scanner.l" - { - register char *s, *t; - char *end; - int bprefix = (yytext[0] != '\'') ? 1 : 0; - - while (1) { - if (YYCURSOR < YYLIMIT) { - if (*YYCURSOR == '\'') { - YYCURSOR++; - yyleng = YYCURSOR - SCNG(yy_text); - - break; - } else if (*YYCURSOR++ == '\\' && YYCURSOR < YYLIMIT) { - YYCURSOR++; - } - } else { - yyleng = YYLIMIT - SCNG(yy_text); - - /* Unclosed single quotes; treat similar to double quotes, but without a separate token - * for ' (unrecognized by parser), instead of old flex fallback to "Unexpected character..." - * rule, which continued in ST_IN_SCRIPTING state after the quote */ - ZVAL_NULL(zendlval); - RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE); - } - } - - ZVAL_STRINGL(zendlval, yytext+bprefix+1, yyleng-bprefix-2); - - /* convert escape sequences */ - s = t = Z_STRVAL_P(zendlval); - end = s+Z_STRLEN_P(zendlval); - while (s 2) { + doc_com = 1; + RESET_DOC_COMMENT(); + } else { + doc_com = 0; + } + + while (YYCURSOR < YYLIMIT) { + if (*YYCURSOR++ == '*' && *YYCURSOR == '/') { + break; } + } + + if (YYCURSOR < YYLIMIT) { + YYCURSOR++; + } else { + zend_error(E_COMPILE_WARNING, "Unterminated comment starting line %d", CG(zend_lineno)); + } + + yyleng = YYCURSOR - SCNG(yy_text); + HANDLE_NEWLINES(yytext, yyleng); + + if (doc_com) { + CG(doc_comment) = zend_string_init(yytext, yyleng, 0); + RETURN_TOKEN(T_DOC_COMMENT); + } + + RETURN_TOKEN(T_COMMENT); +} +#line 2486 "Zend/zend_language_scanner.c" yy114: YYDEBUG(114, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == ':') goto yy203; - goto yy93; -yy115: + ++YYCURSOR; YYDEBUG(115, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= ';') goto yy93; - if (yych <= '<') goto yy205; - if (yych <= '=') goto yy207; - if (yych <= '>') goto yy209; - goto yy93; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1521 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_DIV_EQUAL); +} +#line 2496 "Zend/zend_language_scanner.c" yy116: YYDEBUG(116, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '<') goto yy93; - if (yych <= '=') goto yy210; - if (yych <= '>') goto yy212; - goto yy93; + if (yybm[0+yych] & 64) { + goto yy210; + } + goto yy82; yy117: YYDEBUG(117, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '<') goto yy93; - if (yych <= '=') goto yy214; - if (yych <= '>') goto yy216; - goto yy93; + if (yych <= ',') { + if (yych == '+') goto yy213; + goto yy82; + } else { + if (yych <= '-') goto yy213; + if (yych <= '/') goto yy82; + if (yych <= '9') goto yy214; + goto yy82; + } yy118: YYDEBUG(118, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '=') goto yy93; - if (yych <= '>') goto yy218; - if (yych <= '?') goto yy220; - goto yy93; + if (yybm[0+yych] & 128) { + goto yy216; + } + goto yy82; yy119: YYDEBUG(119, *YYCURSOR); ++YYCURSOR; - if ((yych = *YYCURSOR) <= 'S') { - if (yych <= 'M') { - if (yych == 'B') goto yy222; - goto yy128; - } else { - if (yych <= 'N') goto yy223; - if (yych <= 'Q') goto yy128; - if (yych <= 'R') goto yy224; - goto yy225; - } - } else { - if (yych <= 'n') { - if (yych == 'b') goto yy222; - if (yych <= 'm') goto yy128; - goto yy223; - } else { - if (yych <= 'q') goto yy128; - if (yych <= 'r') goto yy224; - if (yych <= 's') goto yy225; - goto yy128; - } - } -yy120: YYDEBUG(120, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1891 "Zend/zend_language_scanner.l" +#line 1313 "Zend/zend_language_scanner.l" { - zend_copy_value(zendlval, yytext, yyleng); - RETURN_TOKEN(T_STRING); + RETURN_TOKEN(T_PAAMAYIM_NEKUDOTAYIM); } -#line 2638 "Zend/zend_language_scanner.c" +#line 2532 "Zend/zend_language_scanner.c" yy121: YYDEBUG(121, *YYCURSOR); - yyaccept = 2; + yyaccept = 5; yych = *(YYMARKER = ++YYCURSOR); - if (yych <= ';') { - if (yych <= '"') { - if (yych <= '!') goto yy128; - goto yy94; - } else { - if (yych == '\'') goto yy101; - goto yy128; - } - } else { - if (yych <= 'R') { - if (yych <= '<') goto yy227; - if (yych <= 'Q') goto yy128; - goto yy228; - } else { - if (yych == 'r') goto yy228; - goto yy128; - } - } + if (yych <= ';') goto yy122; + if (yych <= '<') goto yy219; + if (yych <= '=') goto yy221; yy122: YYDEBUG(122, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= 'O') { - if (yych <= 'K') { - if (yych == 'A') goto yy229; - goto yy128; - } else { - if (yych <= 'L') goto yy230; - if (yych <= 'N') goto yy128; - goto yy231; - } - } else { - if (yych <= 'k') { - if (yych == 'a') goto yy229; - goto yy128; - } else { - if (yych <= 'l') goto yy230; - if (yych == 'o') goto yy231; - goto yy128; - } - } + yyleng = YYCURSOR - SCNG(yy_text); +#line 1573 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_SL); +} +#line 2547 "Zend/zend_language_scanner.c" yy123: YYDEBUG(123, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= 'O') { - if (yych <= 'H') { - if (yych == 'E') goto yy232; - goto yy128; - } else { - if (yych <= 'I') goto yy233; - if (yych <= 'N') goto yy128; - goto yy234; - } - } else { - if (yych <= 'h') { - if (yych == 'e') goto yy232; - goto yy128; - } else { - if (yych <= 'i') goto yy233; - if (yych == 'o') goto yy234; - goto yy128; - } - } -yy124: + if (yych == '>') goto yy223; YYDEBUG(124, *YYCURSOR); - yych = *++YYCURSOR; - switch (yych) { - case 'C': - case 'c': goto yy236; - case 'L': - case 'l': goto yy237; - case 'M': - case 'm': goto yy238; - case 'N': - case 'n': goto yy239; - case 'V': - case 'v': goto yy240; - case 'X': - case 'x': goto yy241; - default: goto yy128; - } -yy125: - YYDEBUG(125, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= 'U') { - if (yych <= 'N') { - if (yych == 'I') goto yy242; - goto yy128; - } else { - if (yych <= 'O') goto yy243; - if (yych <= 'T') goto yy128; - goto yy244; - } - } else { - if (yych <= 'n') { - if (yych == 'i') goto yy242; - goto yy128; - } else { - if (yych <= 'o') goto yy243; - if (yych == 'u') goto yy244; - goto yy128; - } - } + yyleng = YYCURSOR - SCNG(yy_text); +#line 1493 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_IS_SMALLER_OR_EQUAL); +} +#line 2558 "Zend/zend_language_scanner.c" +yy125: + YYDEBUG(125, *YYCURSOR); + ++YYCURSOR; + goto yy70; yy126: YYDEBUG(126, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= 'O') { - if (yych == 'L') goto yy245; - if (yych <= 'N') goto yy128; - goto yy246; - } else { - if (yych <= 'l') { - if (yych <= 'k') goto yy128; - goto yy245; - } else { - if (yych == 'o') goto yy246; - goto yy128; - } - } -yy127: + if (yych == '=') goto yy225; YYDEBUG(127, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1481 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_IS_EQUAL); +} +#line 2573 "Zend/zend_language_scanner.c" yy128: YYDEBUG(128, *YYCURSOR); - if (yybm[0+yych] & 16) { - goto yy127; - } - goto yy120; -yy129: + ++YYCURSOR; YYDEBUG(129, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= 'S') { - if (yych <= 'L') { - if (yych == 'F') goto yy247; - goto yy128; - } else { - if (yych <= 'M') goto yy249; - if (yych <= 'N') goto yy250; - if (yych <= 'R') goto yy128; - goto yy251; - } - } else { - if (yych <= 'm') { - if (yych == 'f') goto yy247; - if (yych <= 'l') goto yy128; - goto yy249; - } else { - if (yych <= 'n') goto yy250; - if (yych == 's') goto yy251; - goto yy128; - } - } + yyleng = YYCURSOR - SCNG(yy_text); +#line 1449 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_DOUBLE_ARROW); +} +#line 2583 "Zend/zend_language_scanner.c" yy130: YYDEBUG(130, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'I') goto yy252; - if (yych == 'i') goto yy252; - goto yy128; -yy131: + ++YYCURSOR; YYDEBUG(131, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= 'E') { - if (yych == 'A') goto yy253; - if (yych <= 'D') goto yy128; - goto yy254; - } else { - if (yych <= 'a') { - if (yych <= '`') goto yy128; - goto yy253; - } else { - if (yych == 'e') goto yy254; - goto yy128; - } - } + yyleng = YYCURSOR - SCNG(yy_text); +#line 1497 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_IS_GREATER_OR_EQUAL); +} +#line 2593 "Zend/zend_language_scanner.c" yy132: YYDEBUG(132, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy255; - if (yych == 'r') goto yy255; - goto yy128; -yy133: + if (yych == '=') goto yy227; YYDEBUG(133, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= 'U') { - if (yych == 'R') goto yy257; - if (yych <= 'T') goto yy128; - goto yy258; - } else { - if (yych <= 'r') { - if (yych <= 'q') goto yy128; - goto yy257; - } else { - if (yych == 'u') goto yy258; - goto yy128; - } - } + yyleng = YYCURSOR - SCNG(yy_text); +#line 1577 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_SR); +} +#line 2604 "Zend/zend_language_scanner.c" yy134: YYDEBUG(134, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy259; - if (yych == 'e') goto yy259; - goto yy128; + if (yych == '\n') goto yy229; + if (yych == '\r') goto yy230; yy135: YYDEBUG(135, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= 'W') { - if (yych == 'T') goto yy260; - if (yych <= 'V') goto yy128; - goto yy261; - } else { - if (yych <= 't') { - if (yych <= 's') goto yy128; - goto yy260; - } else { - if (yych == 'w') goto yy261; - goto yy128; - } - } + yyleng = YYCURSOR - SCNG(yy_text); +#line 1963 "Zend/zend_language_scanner.l" + { + BEGIN(INITIAL); + if (yytext[yyleng-1] != '>') { + CG(increment_lineno) = 1; + } + RETURN_TOKEN(T_CLOSE_TAG); /* implicit ';' at php-end tag */ +} +#line 2621 "Zend/zend_language_scanner.c" yy136: YYDEBUG(136, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= 'R') { - if (yych == 'H') goto yy262; - if (yych <= 'Q') goto yy128; - goto yy263; - } else { - if (yych <= 'h') { - if (yych <= 'g') goto yy128; - goto yy262; - } else { - if (yych == 'r') goto yy263; - goto yy128; - } - } -yy137: + if (yych == '?') goto yy231; YYDEBUG(137, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= 'S') { - if (yych == 'N') goto yy264; - if (yych <= 'R') goto yy128; - goto yy265; - } else { - if (yych <= 'n') { - if (yych <= 'm') goto yy128; - goto yy264; - } else { - if (yych == 's') goto yy265; - goto yy128; - } - } + yyleng = YYCURSOR - SCNG(yy_text); +#line 1325 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_COALESCE); +} +#line 2632 "Zend/zend_language_scanner.c" yy138: YYDEBUG(138, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy266; - if (yych == 'a') goto yy266; - goto yy128; + if (yych == 'S') goto yy233; + if (yych == 's') goto yy233; + goto yy44; yy139: YYDEBUG(139, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy267; - if (yych == 'h') goto yy267; - goto yy128; + if (yych == 'D') goto yy234; + if (yych == 'd') goto yy234; + goto yy44; yy140: YYDEBUG(140, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy268; - if (yych == 'o') goto yy268; - goto yy128; + if (yych == 'R') goto yy236; + if (yych == 'r') goto yy236; + goto yy44; yy141: YYDEBUG(141, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy269; - if (yych == 'i') goto yy269; - goto yy128; -yy142: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(142, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(143, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1317 "Zend/zend_language_scanner.l" +#line 1227 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_NS_SEPARATOR); + RETURN_TOKEN(T_AS); } -#line 2927 "Zend/zend_language_scanner.c" +#line 2663 "Zend/zend_language_scanner.c" +yy143: + YYDEBUG(143, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '<') goto yy237; + goto yy82; yy144: YYDEBUG(144, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '=') goto yy270; - goto yy93; + if (yych == 'E') goto yy238; + if (yych == 'e') goto yy238; + goto yy44; yy145: YYDEBUG(145, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '_') goto yy272; - goto yy128; + if (yych <= 'T') { + if (yych <= 'L') { + if (yych <= 'K') goto yy44; + goto yy239; + } else { + if (yych <= 'R') goto yy44; + if (yych <= 'S') goto yy240; + goto yy241; + } + } else { + if (yych <= 'r') { + if (yych == 'l') goto yy239; + goto yy44; + } else { + if (yych <= 's') goto yy240; + if (yych <= 't') goto yy241; + goto yy44; + } + } yy146: YYDEBUG(146, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych <= 'O') { + if (yych == 'A') goto yy242; + if (yych <= 'N') goto yy44; + goto yy243; + } else { + if (yych <= 'a') { + if (yych <= '`') goto yy44; + goto yy242; + } else { + if (yych == 'o') goto yy243; + goto yy44; + } + } +yy147: YYDEBUG(147, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 2127 "Zend/zend_language_scanner.l" - { - BEGIN(ST_BACKQUOTE); - RETURN_TOKEN('`'); -} -#line 2948 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'N') goto yy244; + if (yych == 'n') goto yy244; + goto yy44; yy148: YYDEBUG(148, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych <= 'F') { + if (yych == 'C') goto yy245; + if (yych <= 'E') goto yy44; + goto yy246; + } else { + if (yych <= 'c') { + if (yych <= 'b') goto yy44; + goto yy245; + } else { + if (yych == 'f') goto yy246; + goto yy44; + } + } +yy149: YYDEBUG(149, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1582 "Zend/zend_language_scanner.l" - { - yy_push_state(ST_IN_SCRIPTING); - RETURN_TOKEN('{'); -} -#line 2959 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'E') goto yy247; + if (yych == 'e') goto yy247; + goto yy44; yy150: YYDEBUG(150, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '=') goto yy273; - if (yych == '|') goto yy275; - goto yy93; -yy151: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(151, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(152, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1594 "Zend/zend_language_scanner.l" +#line 1195 "Zend/zend_language_scanner.l" { - RESET_DOC_COMMENT(); - if (!zend_stack_is_empty(&SCNG(state_stack))) { - yy_pop_state(); - } - RETURN_TOKEN('}'); + RETURN_TOKEN(T_DO); } -#line 2979 "Zend/zend_language_scanner.c" +#line 2753 "Zend/zend_language_scanner.c" +yy152: + YYDEBUG(152, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'H') goto yy249; + if (yych == 'h') goto yy249; + goto yy44; yy153: YYDEBUG(153, *YYCURSOR); - ++YYCURSOR; - if ((yych = *YYCURSOR) == '=') goto yy277; + yych = *++YYCURSOR; + if (yych == 'S') goto yy250; + if (yych == 's') goto yy250; + goto yy44; yy154: YYDEBUG(154, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1481 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_IS_NOT_EQUAL); -} -#line 2991 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'P') goto yy251; + if (yych == 'p') goto yy251; + goto yy44; yy155: YYDEBUG(155, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'D') goto yy252; + if (yych == 'd') goto yy252; + goto yy44; +yy156: YYDEBUG(156, *YYCURSOR); - if (yych <= '^') { - if (yych <= '9') { - if (yych >= '0') goto yy155; - } else { - if (yych <= '@') goto yy157; - if (yych <= 'Z') goto yy155; - } + yych = *++YYCURSOR; + if (yych == 'A') goto yy253; + if (yych == 'a') goto yy253; + goto yy44; +yy157: + YYDEBUG(157, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'T') { + if (yych == 'I') goto yy254; + if (yych <= 'S') goto yy44; + goto yy255; } else { - if (yych <= '`') { - if (yych <= '_') goto yy155; + if (yych <= 'i') { + if (yych <= 'h') goto yy44; + goto yy254; } else { - if (yych <= 'z') goto yy155; - if (yych >= 0x80) goto yy155; + if (yych == 't') goto yy255; + goto yy44; } } -yy157: - YYDEBUG(157, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1868 "Zend/zend_language_scanner.l" - { - zend_copy_value(zendlval, (yytext+1), (yyleng-1)); - RETURN_TOKEN(T_VARIABLE); -} -#line 3021 "Zend/zend_language_scanner.c" yy158: YYDEBUG(158, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'N') goto yy256; + if (yych == 'n') goto yy256; + goto yy44; +yy159: YYDEBUG(159, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1525 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_MOD_EQUAL); -} -#line 3031 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'R') goto yy257; + if (yych == 'r') goto yy257; + goto yy44; yy160: YYDEBUG(160, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'N') goto yy259; + if (yych == 'n') goto yy259; + goto yy44; +yy161: YYDEBUG(161, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1553 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_BOOLEAN_AND); -} -#line 3041 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'O') goto yy260; + if (yych == 'o') goto yy260; + goto yy44; yy162: YYDEBUG(162, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'T') goto yy261; + if (yych == 't') goto yy261; + goto yy44; +yy163: YYDEBUG(163, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(164, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1537 "Zend/zend_language_scanner.l" +#line 1171 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_AND_EQUAL); + RETURN_TOKEN(T_IF); } -#line 3051 "Zend/zend_language_scanner.c" -yy164: - YYDEBUG(164, *YYCURSOR); - ++YYCURSOR; - YYFILL(7); - yych = *YYCURSOR; +#line 2842 "Zend/zend_language_scanner.c" yy165: YYDEBUG(165, *YYCURSOR); - if (yybm[0+yych] & 32) { - goto yy164; - } - switch (yych) { - case 'A': - case 'a': goto yy167; - case 'B': - case 'b': goto yy168; - case 'D': - case 'd': goto yy169; - case 'F': - case 'f': goto yy170; - case 'I': - case 'i': goto yy171; - case 'O': - case 'o': goto yy172; - case 'R': - case 'r': goto yy173; - case 'S': - case 's': goto yy174; - case 'U': - case 'u': goto yy175; - default: goto yy166; - } + yych = *++YYCURSOR; + if (yych == 'P') goto yy262; + if (yych == 'p') goto yy262; + goto yy44; yy166: YYDEBUG(166, *YYCURSOR); - YYCURSOR = YYMARKER; - if (yyaccept <= 3) { - if (yyaccept <= 1) { - if (yyaccept == 0) { - goto yy93; - } else { - goto yy111; - } + yych = *++YYCURSOR; + if (yych <= 'T') { + if (yych <= 'C') { + if (yych <= 'B') goto yy44; + goto yy263; } else { - if (yyaccept == 2) { - goto yy120; - } else { - goto yy193; - } + if (yych <= 'R') goto yy44; + if (yych <= 'S') goto yy264; + goto yy265; } } else { - if (yyaccept <= 5) { - if (yyaccept == 4) { - goto yy197; - } else { - goto yy206; - } + if (yych <= 'r') { + if (yych == 'c') goto yy263; + goto yy44; } else { - goto yy541; + if (yych <= 's') goto yy264; + if (yych <= 't') goto yy265; + goto yy44; } } yy167: YYDEBUG(167, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy279; - if (yych == 'r') goto yy279; - goto yy166; + if (yych == 'S') goto yy266; + if (yych == 's') goto yy266; + goto yy44; yy168: YYDEBUG(168, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= 'O') { - if (yych == 'I') goto yy280; - if (yych <= 'N') goto yy166; - goto yy281; - } else { - if (yych <= 'i') { - if (yych <= 'h') goto yy166; - goto yy280; - } else { - if (yych == 'o') goto yy281; - goto yy166; - } - } + yych = *++YYCURSOR; + if (yych == 'S') goto yy267; + if (yych == 's') goto yy267; + goto yy44; yy169: YYDEBUG(169, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy282; - if (yych == 'o') goto yy282; - goto yy166; + if (yych == 'M') goto yy268; + if (yych == 'm') goto yy268; + goto yy44; yy170: YYDEBUG(170, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy283; - if (yych == 'l') goto yy283; - goto yy166; + if (yych == 'W') goto yy269; + if (yych == 'w') goto yy269; + goto yy44; yy171: YYDEBUG(171, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy284; - if (yych == 'n') goto yy284; - goto yy166; -yy172: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(172, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'B') goto yy285; - if (yych == 'b') goto yy285; - goto yy166; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1561 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_LOGICAL_OR); +} +#line 2907 "Zend/zend_language_scanner.c" yy173: YYDEBUG(173, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy286; - if (yych == 'e') goto yy286; - goto yy166; + if (yych <= 'O') { + if (yych == 'I') goto yy271; + if (yych <= 'N') goto yy44; + goto yy272; + } else { + if (yych <= 'i') { + if (yych <= 'h') goto yy44; + goto yy271; + } else { + if (yych == 'o') goto yy272; + goto yy44; + } + } yy174: YYDEBUG(174, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy287; - if (yych == 't') goto yy287; - goto yy166; + if (yych == 'B') goto yy273; + if (yych == 'b') goto yy273; + goto yy44; yy175: YYDEBUG(175, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy288; - if (yych == 'n') goto yy288; - goto yy166; + if (yych <= 'T') { + if (yych == 'Q') goto yy274; + if (yych <= 'S') goto yy44; + goto yy275; + } else { + if (yych <= 'q') { + if (yych <= 'p') goto yy44; + goto yy274; + } else { + if (yych == 't') goto yy275; + goto yy44; + } + } yy176: YYDEBUG(176, *YYCURSOR); - ++YYCURSOR; - if ((yych = *YYCURSOR) == '=') goto yy289; + yych = *++YYCURSOR; + if (yych == 'A') goto yy276; + if (yych == 'a') goto yy276; + goto yy44; +yy177: YYDEBUG(177, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1509 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_POW); -} -#line 3185 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'I') goto yy277; + if (yych == 'i') goto yy277; + goto yy44; yy178: YYDEBUG(178, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'R') goto yy278; + if (yych == 'r') goto yy278; + goto yy44; +yy179: YYDEBUG(179, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1505 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_MUL_EQUAL); -} -#line 3195 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych <= 'Y') { + if (yych == 'A') goto yy279; + if (yych <= 'X') goto yy44; + goto yy280; + } else { + if (yych <= 'a') { + if (yych <= '`') goto yy44; + goto yy279; + } else { + if (yych == 'y') goto yy280; + goto yy44; + } + } yy180: YYDEBUG(180, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'S') goto yy282; + if (yych == 's') goto yy282; + goto yy44; +yy181: YYDEBUG(181, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1461 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_INC); -} -#line 3205 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'E') goto yy283; + if (yych == 'e') goto yy283; + goto yy44; yy182: YYDEBUG(182, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'R') goto yy285; + if (yych == 'r') goto yy285; + goto yy44; +yy183: YYDEBUG(183, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1497 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_PLUS_EQUAL); -} -#line 3215 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'I') goto yy287; + if (yych == 'i') goto yy287; + goto yy44; yy184: YYDEBUG(184, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'R') goto yy288; + if (yych == 'r') goto yy288; + goto yy44; +yy185: YYDEBUG(185, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1465 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_DEC); -} -#line 3225 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'E') goto yy290; + if (yych == 'e') goto yy290; + goto yy44; yy186: YYDEBUG(186, *YYCURSOR); ++YYCURSOR; YYDEBUG(187, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1501 "Zend/zend_language_scanner.l" +#line 1549 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_MINUS_EQUAL); + RETURN_TOKEN(T_XOR_EQUAL); } -#line 3235 "Zend/zend_language_scanner.c" +#line 3025 "Zend/zend_language_scanner.c" yy188: YYDEBUG(188, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + switch (yych) { + case 'C': + case 'c': goto yy291; + case 'D': + case 'd': goto yy292; + case 'F': + case 'f': goto yy293; + case 'H': + case 'h': goto yy294; + case 'L': + case 'l': goto yy295; + case 'M': + case 'm': goto yy296; + case 'N': + case 'n': goto yy297; + case 'T': + case 't': goto yy298; + default: goto yy44; + } +yy189: YYDEBUG(189, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(190, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1287 "Zend/zend_language_scanner.l" +#line 1545 "Zend/zend_language_scanner.l" { - yy_push_state(ST_LOOKING_FOR_PROPERTY); - RETURN_TOKEN(T_OBJECT_OPERATOR); + RETURN_TOKEN(T_OR_EQUAL); } -#line 3246 "Zend/zend_language_scanner.c" -yy190: - YYDEBUG(190, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '.') goto yy291; - goto yy166; +#line 3057 "Zend/zend_language_scanner.c" yy191: YYDEBUG(191, *YYCURSOR); - yyaccept = 3; - YYMARKER = ++YYCURSOR; - YYFILL(3); - yych = *YYCURSOR; + ++YYCURSOR; YYDEBUG(192, *YYCURSOR); - if (yych <= 'D') { - if (yych <= '/') goto yy193; - if (yych <= '9') goto yy191; - } else { - if (yych <= 'E') goto yy201; - if (yych == 'e') goto yy201; - } -yy193: - YYDEBUG(193, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1739 "Zend/zend_language_scanner.l" +#line 1553 "Zend/zend_language_scanner.l" { - const char *end; - - ZVAL_DOUBLE(zendlval, zend_strtod(yytext, &end)); - /* errno isn't checked since we allow HUGE_VAL/INF overflow */ - ZEND_ASSERT(end == yytext + yyleng); - RETURN_TOKEN(T_DNUMBER); + RETURN_TOKEN(T_BOOLEAN_OR); } -#line 3278 "Zend/zend_language_scanner.c" -yy194: - YYDEBUG(194, *YYCURSOR); +#line 3067 "Zend/zend_language_scanner.c" +yy193: + YYDEBUG(193, *YYCURSOR); ++YYCURSOR; - YYDEBUG(195, *YYCURSOR); + YYDEBUG(194, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1521 "Zend/zend_language_scanner.l" +#line 1477 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_CONCAT_EQUAL); + RETURN_TOKEN(T_IS_NOT_IDENTICAL); } -#line 3288 "Zend/zend_language_scanner.c" +#line 3077 "Zend/zend_language_scanner.c" +yy195: + YYDEBUG(195, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy299; + if (yych == 'r') goto yy299; + goto yy82; yy196: YYDEBUG(196, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if (yych == '*') goto yy293; + yych = *++YYCURSOR; + if (yych == 'N') goto yy300; + if (yych == 'n') goto yy300; + goto yy82; yy197: YYDEBUG(197, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1926 "Zend/zend_language_scanner.l" - { - int doc_com; - - if (yyleng > 2) { - doc_com = 1; - RESET_DOC_COMMENT(); - } else { - doc_com = 0; - } - - while (YYCURSOR < YYLIMIT) { - if (*YYCURSOR++ == '*' && *YYCURSOR == '/') { - break; - } - } - - if (YYCURSOR < YYLIMIT) { - YYCURSOR++; - } else { - zend_error(E_COMPILE_WARNING, "Unterminated comment starting line %d", CG(zend_lineno)); - } - - yyleng = YYCURSOR - SCNG(yy_text); - HANDLE_NEWLINES(yytext, yyleng); - - if (doc_com) { - CG(doc_comment) = zend_string_init(yytext, yyleng, 0); - RETURN_TOKEN(T_DOC_COMMENT); - } - - RETURN_TOKEN(T_COMMENT); -} -#line 3330 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'O') goto yy301; + if (yych == 'o') goto yy301; + goto yy82; yy198: YYDEBUG(198, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'U') goto yy302; + if (yych == 'u') goto yy302; + goto yy82; +yy199: YYDEBUG(199, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1517 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_DIV_EQUAL); -} -#line 3340 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'O') goto yy303; + if (yych == 'o') goto yy303; + goto yy82; yy200: YYDEBUG(200, *YYCURSOR); yych = *++YYCURSOR; - if (yybm[0+yych] & 64) { - goto yy294; - } - goto yy166; + if (yych == 'T') goto yy304; + if (yych == 't') goto yy304; + goto yy82; yy201: YYDEBUG(201, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= ',') { - if (yych == '+') goto yy297; - goto yy166; - } else { - if (yych <= '-') goto yy297; - if (yych <= '/') goto yy166; - if (yych <= '9') goto yy298; - goto yy166; - } + if (yych == 'J') goto yy305; + if (yych == 'j') goto yy305; + goto yy82; yy202: YYDEBUG(202, *YYCURSOR); yych = *++YYCURSOR; - if (yybm[0+yych] & 128) { - goto yy300; - } - goto yy166; + if (yych == 'A') goto yy306; + if (yych == 'a') goto yy306; + goto yy82; yy203: YYDEBUG(203, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'R') goto yy307; + if (yych == 'r') goto yy307; + goto yy82; +yy204: YYDEBUG(204, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1313 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_PAAMAYIM_NEKUDOTAYIM); -} -#line 3376 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'S') goto yy308; + if (yych == 's') goto yy308; + goto yy82; yy205: YYDEBUG(205, *YYCURSOR); - yyaccept = 5; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= ';') goto yy206; - if (yych <= '<') goto yy303; - if (yych <= '=') goto yy305; -yy206: + ++YYCURSOR; YYDEBUG(206, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1569 "Zend/zend_language_scanner.l" +#line 1517 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_SL); + RETURN_TOKEN(T_POW_EQUAL); } -#line 3391 "Zend/zend_language_scanner.c" +#line 3147 "Zend/zend_language_scanner.c" yy207: YYDEBUG(207, *YYCURSOR); ++YYCURSOR; - if ((yych = *YYCURSOR) == '>') goto yy307; YYDEBUG(208, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1489 "Zend/zend_language_scanner.l" +#line 1321 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_IS_SMALLER_OR_EQUAL); + RETURN_TOKEN(T_ELLIPSIS); } -#line 3402 "Zend/zend_language_scanner.c" +#line 3157 "Zend/zend_language_scanner.c" yy209: YYDEBUG(209, *YYCURSOR); yych = *++YYCURSOR; - goto yy154; + if (yych <= '\f') { + if (yych <= 0x08) goto yy82; + if (yych <= '\n') goto yy309; + goto yy82; + } else { + if (yych <= '\r') goto yy309; + if (yych == ' ') goto yy309; + goto yy82; + } yy210: YYDEBUG(210, *YYCURSOR); ++YYCURSOR; - if ((yych = *YYCURSOR) == '=') goto yy309; + YYFILL(1); + yych = *YYCURSOR; YYDEBUG(211, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1477 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_IS_EQUAL); -} -#line 3417 "Zend/zend_language_scanner.c" -yy212: + if (yybm[0+yych] & 64) { + goto yy210; + } YYDEBUG(212, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(213, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1445 "Zend/zend_language_scanner.l" +#line 1623 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_DOUBLE_ARROW); + char *bin = yytext + 2; /* Skip "0b" */ + int len = yyleng - 2; + char *end; + + /* Skip any leading 0s */ + while (*bin == '0') { + ++bin; + --len; + } + + if (len < SIZEOF_ZEND_LONG * 8) { + if (len == 0) { + ZVAL_LONG(zendlval, 0); + } else { + errno = 0; + ZVAL_LONG(zendlval, ZEND_STRTOL(bin, &end, 2)); + ZEND_ASSERT(!errno && end == yytext + yyleng); + } + RETURN_TOKEN(T_LNUMBER); + } else { + ZVAL_DOUBLE(zendlval, zend_bin_strtod(bin, (const char **)&end)); + /* errno isn't checked since we allow HUGE_VAL/INF overflow */ + ZEND_ASSERT(end == yytext + yyleng); + RETURN_TOKEN(T_DNUMBER); + } } -#line 3427 "Zend/zend_language_scanner.c" +#line 3209 "Zend/zend_language_scanner.c" +yy213: + YYDEBUG(213, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '/') goto yy82; + if (yych >= ':') goto yy82; yy214: YYDEBUG(214, *YYCURSOR); ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; YYDEBUG(215, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1493 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_IS_GREATER_OR_EQUAL); -} -#line 3437 "Zend/zend_language_scanner.c" + if (yych <= '/') goto yy109; + if (yych <= '9') goto yy214; + goto yy109; yy216: YYDEBUG(216, *YYCURSOR); ++YYCURSOR; - if ((yych = *YYCURSOR) == '=') goto yy311; + YYFILL(1); + yych = *YYCURSOR; YYDEBUG(217, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy216; + } + YYDEBUG(218, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1573 "Zend/zend_language_scanner.l" +#line 1694 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_SR); + char *hex = yytext + 2; /* Skip "0x" */ + int len = yyleng - 2; + char *end; + + /* Skip any leading 0s */ + while (*hex == '0') { + hex++; + len--; + } + + if (len < SIZEOF_ZEND_LONG * 2 || (len == SIZEOF_ZEND_LONG * 2 && *hex <= '7')) { + if (len == 0) { + ZVAL_LONG(zendlval, 0); + } else { + errno = 0; + ZVAL_LONG(zendlval, ZEND_STRTOL(hex, &end, 16)); + ZEND_ASSERT(!errno && end == hex + len); + } + RETURN_TOKEN(T_LNUMBER); + } else { + ZVAL_DOUBLE(zendlval, zend_hex_strtod(hex, (const char **)&end)); + /* errno isn't checked since we allow HUGE_VAL/INF overflow */ + ZEND_ASSERT(end == hex + len); + RETURN_TOKEN(T_DNUMBER); + } } -#line 3448 "Zend/zend_language_scanner.c" -yy218: - YYDEBUG(218, *YYCURSOR); - ++YYCURSOR; - if ((yych = *YYCURSOR) == '\n') goto yy313; - if (yych == '\r') goto yy314; +#line 3263 "Zend/zend_language_scanner.c" yy219: YYDEBUG(219, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1959 "Zend/zend_language_scanner.l" - { - BEGIN(INITIAL); - if (yytext[yyleng-1] != '>') { - CG(increment_lineno) = 1; - } - RETURN_TOKEN(T_CLOSE_TAG); /* implicit ';' at php-end tag */ -} -#line 3465 "Zend/zend_language_scanner.c" -yy220: - YYDEBUG(220, *YYCURSOR); ++YYCURSOR; + YYFILL(2); + yych = *YYCURSOR; + YYDEBUG(220, *YYCURSOR); + if (yych <= '\'') { + if (yych <= ' ') { + if (yych == '\t') goto yy219; + if (yych <= 0x1F) goto yy82; + goto yy219; + } else { + if (yych == '"') goto yy311; + if (yych <= '&') goto yy82; + goto yy312; + } + } else { + if (yych <= '_') { + if (yych <= '@') goto yy82; + if (yych <= 'Z') goto yy313; + if (yych <= '^') goto yy82; + goto yy313; + } else { + if (yych <= '`') goto yy82; + if (yych <= 'z') goto yy313; + if (yych <= 0x7F) goto yy82; + goto yy313; + } + } +yy221: YYDEBUG(221, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(222, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1325 "Zend/zend_language_scanner.l" +#line 1533 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_COALESCE); + RETURN_TOKEN(T_SL_EQUAL); } -#line 3475 "Zend/zend_language_scanner.c" -yy222: - YYDEBUG(222, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'S') goto yy315; - if (yych == 's') goto yy315; - goto yy128; +#line 3302 "Zend/zend_language_scanner.c" yy223: YYDEBUG(223, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'D') goto yy316; - if (yych == 'd') goto yy316; - goto yy128; -yy224: + ++YYCURSOR; YYDEBUG(224, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'R') goto yy318; - if (yych == 'r') goto yy318; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1489 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_SPACESHIP); +} +#line 3312 "Zend/zend_language_scanner.c" yy225: YYDEBUG(225, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } YYDEBUG(226, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1227 "Zend/zend_language_scanner.l" +#line 1473 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_AS); + RETURN_TOKEN(T_IS_IDENTICAL); } -#line 3506 "Zend/zend_language_scanner.c" +#line 3322 "Zend/zend_language_scanner.c" yy227: YYDEBUG(227, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '<') goto yy319; - goto yy166; -yy228: + ++YYCURSOR; YYDEBUG(228, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy320; - if (yych == 'e') goto yy320; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1537 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_SR_EQUAL); +} +#line 3332 "Zend/zend_language_scanner.c" yy229: YYDEBUG(229, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= 'T') { - if (yych <= 'L') { - if (yych <= 'K') goto yy128; - goto yy321; - } else { - if (yych <= 'R') goto yy128; - if (yych <= 'S') goto yy322; - goto yy323; - } - } else { - if (yych <= 'r') { - if (yych == 'l') goto yy321; - goto yy128; - } else { - if (yych <= 's') goto yy322; - if (yych <= 't') goto yy323; - goto yy128; - } - } + ++YYCURSOR; + goto yy135; yy230: YYDEBUG(230, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= 'O') { - if (yych == 'A') goto yy324; - if (yych <= 'N') goto yy128; - goto yy325; - } else { - if (yych <= 'a') { - if (yych <= '`') goto yy128; - goto yy324; - } else { - if (yych == 'o') goto yy325; - goto yy128; - } - } + if (yych == '\n') goto yy229; + goto yy135; yy231: YYDEBUG(231, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'N') goto yy326; - if (yych == 'n') goto yy326; - goto yy128; -yy232: + ++YYCURSOR; YYDEBUG(232, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= 'F') { - if (yych == 'C') goto yy327; - if (yych <= 'E') goto yy128; - goto yy328; - } else { - if (yych <= 'c') { - if (yych <= 'b') goto yy128; - goto yy327; - } else { - if (yych == 'f') goto yy328; - goto yy128; - } - } + yyleng = YYCURSOR - SCNG(yy_text); +#line 1329 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_EXCEPTION_COALESCE); +} +#line 3351 "Zend/zend_language_scanner.c" yy233: YYDEBUG(233, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy329; - if (yych == 'e') goto yy329; - goto yy128; + if (yych == 'T') goto yy315; + if (yych == 't') goto yy315; + goto yy44; yy234: YYDEBUG(234, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; } YYDEBUG(235, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1195 "Zend/zend_language_scanner.l" +#line 1565 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_DO); + RETURN_TOKEN(T_LOGICAL_AND); } -#line 3596 "Zend/zend_language_scanner.c" +#line 3370 "Zend/zend_language_scanner.c" yy236: YYDEBUG(236, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy331; - if (yych == 'h') goto yy331; - goto yy128; + if (yych == 'A') goto yy316; + if (yych == 'a') goto yy316; + goto yy44; yy237: YYDEBUG(237, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy332; - if (yych == 's') goto yy332; - goto yy128; + if (yych == '<') goto yy219; + goto yy82; yy238: YYDEBUG(238, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'P') goto yy333; - if (yych == 'p') goto yy333; - goto yy128; + if (yych == 'A') goto yy317; + if (yych == 'a') goto yy317; + goto yy44; yy239: YYDEBUG(239, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'D') goto yy334; - if (yych == 'd') goto yy334; - goto yy128; + if (yych == 'L') goto yy318; + if (yych == 'l') goto yy318; + goto yy44; yy240: YYDEBUG(240, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy335; - if (yych == 'a') goto yy335; - goto yy128; + if (yych == 'E') goto yy319; + if (yych == 'e') goto yy319; + goto yy44; yy241: YYDEBUG(241, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= 'T') { - if (yych == 'I') goto yy336; - if (yych <= 'S') goto yy128; - goto yy337; - } else { - if (yych <= 'i') { - if (yych <= 'h') goto yy128; - goto yy336; - } else { - if (yych == 't') goto yy337; - goto yy128; - } - } + if (yych == 'C') goto yy321; + if (yych == 'c') goto yy321; + goto yy44; yy242: YYDEBUG(242, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy338; - if (yych == 'n') goto yy338; - goto yy128; + if (yych == 'S') goto yy322; + if (yych == 's') goto yy322; + goto yy44; yy243: YYDEBUG(243, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy339; - if (yych == 'r') goto yy339; - goto yy128; + if (yych == 'N') goto yy323; + if (yych == 'n') goto yy323; + goto yy44; yy244: YYDEBUG(244, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy341; - if (yych == 'n') goto yy341; - goto yy128; + if (yych <= 'T') { + if (yych <= 'R') goto yy44; + if (yych <= 'S') goto yy324; + goto yy325; + } else { + if (yych <= 'r') goto yy44; + if (yych <= 's') goto yy324; + if (yych <= 't') goto yy325; + goto yy44; + } yy245: YYDEBUG(245, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy342; - if (yych == 'o') goto yy342; - goto yy128; + if (yych == 'L') goto yy326; + if (yych == 'l') goto yy326; + goto yy44; yy246: YYDEBUG(246, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy343; - if (yych == 't') goto yy343; - goto yy128; + if (yych == 'A') goto yy327; + if (yych == 'a') goto yy327; + goto yy44; yy247: YYDEBUG(247, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; } YYDEBUG(248, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1171 "Zend/zend_language_scanner.l" +#line 1129 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_IF); + RETURN_TOKEN(T_EXIT); } -#line 3685 "Zend/zend_language_scanner.c" +#line 3455 "Zend/zend_language_scanner.c" yy249: YYDEBUG(249, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'P') goto yy344; - if (yych == 'p') goto yy344; - goto yy128; + if (yych == 'O') goto yy328; + if (yych == 'o') goto yy328; + goto yy44; yy250: YYDEBUG(250, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= 'T') { - if (yych <= 'C') { - if (yych <= 'B') goto yy128; - goto yy345; - } else { - if (yych <= 'R') goto yy128; - if (yych <= 'S') goto yy346; - goto yy347; - } - } else { - if (yych <= 'r') { - if (yych == 'c') goto yy345; - goto yy128; - } else { - if (yych <= 's') goto yy346; - if (yych <= 't') goto yy347; - goto yy128; - } - } + if (yych == 'E') goto yy330; + if (yych == 'e') goto yy330; + goto yy44; yy251: YYDEBUG(251, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy348; - if (yych == 's') goto yy348; - goto yy128; + if (yych == 'T') goto yy332; + if (yych == 't') goto yy332; + goto yy44; yy252: YYDEBUG(252, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy349; - if (yych == 's') goto yy349; - goto yy128; + switch (yych) { + case 'D': + case 'd': goto yy333; + case 'F': + case 'f': goto yy334; + case 'I': + case 'i': goto yy335; + case 'S': + case 's': goto yy336; + case 'W': + case 'w': goto yy337; + default: goto yy44; + } yy253: YYDEBUG(253, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'M') goto yy350; - if (yych == 'm') goto yy350; - goto yy128; + if (yych == 'L') goto yy338; + if (yych == 'l') goto yy338; + goto yy44; yy254: YYDEBUG(254, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'W') goto yy351; - if (yych == 'w') goto yy351; - goto yy128; + if (yych == 'T') goto yy340; + if (yych == 't') goto yy340; + goto yy44; yy255: YYDEBUG(255, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'E') goto yy342; + if (yych == 'e') goto yy342; + goto yy44; +yy256: YYDEBUG(256, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1557 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_LOGICAL_OR); -} -#line 3750 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'A') goto yy343; + if (yych == 'a') goto yy343; + goto yy44; yy257: YYDEBUG(257, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= 'O') { - if (yych == 'I') goto yy353; - if (yych <= 'N') goto yy128; - goto yy354; + if (yych <= '^') { + if (yych <= '@') { + if (yych <= '/') goto yy258; + if (yych <= '9') goto yy43; + } else { + if (yych == 'E') goto yy344; + if (yych <= 'Z') goto yy43; + } } else { - if (yych <= 'i') { - if (yych <= 'h') goto yy128; - goto yy353; + if (yych <= 'd') { + if (yych != '`') goto yy43; } else { - if (yych == 'o') goto yy354; - goto yy128; + if (yych <= 'e') goto yy344; + if (yych <= 'z') goto yy43; + if (yych >= 0x80) goto yy43; } } yy258: YYDEBUG(258, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'B') goto yy355; - if (yych == 'b') goto yy355; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1199 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_FOR); +} +#line 3541 "Zend/zend_language_scanner.c" yy259: YYDEBUG(259, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= 'T') { - if (yych == 'Q') goto yy356; - if (yych <= 'S') goto yy128; - goto yy357; - } else { - if (yych <= 'q') { - if (yych <= 'p') goto yy128; - goto yy356; - } else { - if (yych == 't') goto yy357; - goto yy128; - } - } + if (yych == 'C') goto yy345; + if (yych == 'c') goto yy345; + goto yy44; yy260: YYDEBUG(260, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy358; - if (yych == 'a') goto yy358; - goto yy128; + if (yych == 'B') goto yy346; + if (yych == 'b') goto yy346; + goto yy44; yy261: YYDEBUG(261, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy359; - if (yych == 'i') goto yy359; - goto yy128; + if (yych == 'O') goto yy347; + if (yych == 'o') goto yy347; + goto yy44; yy262: YYDEBUG(262, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy360; - if (yych == 'r') goto yy360; - goto yy128; + if (yych == 'L') goto yy349; + if (yych == 'l') goto yy349; + goto yy44; yy263: YYDEBUG(263, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= 'Y') { - if (yych == 'A') goto yy361; - if (yych <= 'X') goto yy128; - goto yy362; - } else { - if (yych <= 'a') { - if (yych <= '`') goto yy128; - goto yy361; - } else { - if (yych == 'y') goto yy362; - goto yy128; - } - } + if (yych == 'L') goto yy350; + if (yych == 'l') goto yy350; + goto yy44; yy264: YYDEBUG(264, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy364; - if (yych == 's') goto yy364; - goto yy128; + if (yych == 'T') goto yy351; + if (yych == 't') goto yy351; + goto yy44; yy265: YYDEBUG(265, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy365; - if (yych == 'e') goto yy365; - goto yy128; + if (yych == 'E') goto yy352; + if (yych == 'e') goto yy352; + goto yy44; yy266: YYDEBUG(266, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy367; - if (yych == 'r') goto yy367; - goto yy128; + if (yych == 'E') goto yy353; + if (yych == 'e') goto yy353; + goto yy44; yy267: YYDEBUG(267, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy369; - if (yych == 'i') goto yy369; - goto yy128; + if (yych == 'T') goto yy354; + if (yych == 't') goto yy354; + goto yy44; yy268: YYDEBUG(268, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy370; - if (yych == 'r') goto yy370; - goto yy128; + if (yych == 'E') goto yy356; + if (yych == 'e') goto yy356; + goto yy44; yy269: YYDEBUG(269, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy372; - if (yych == 'e') goto yy372; - goto yy128; -yy270: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(270, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(271, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1545 "Zend/zend_language_scanner.l" +#line 1333 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_XOR_EQUAL); + RETURN_TOKEN(T_NEW); } -#line 3868 "Zend/zend_language_scanner.c" +#line 3614 "Zend/zend_language_scanner.c" +yy271: + YYDEBUG(271, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'V') { + if (yych == 'N') goto yy357; + if (yych <= 'U') goto yy44; + goto yy358; + } else { + if (yych <= 'n') { + if (yych <= 'm') goto yy44; + goto yy357; + } else { + if (yych == 'v') goto yy358; + goto yy44; + } + } yy272: YYDEBUG(272, *YYCURSOR); yych = *++YYCURSOR; - switch (yych) { - case 'C': - case 'c': goto yy373; - case 'D': - case 'd': goto yy374; - case 'F': - case 'f': goto yy375; - case 'H': - case 'h': goto yy376; - case 'L': - case 'l': goto yy377; - case 'M': - case 'm': goto yy378; - case 'N': - case 'n': goto yy379; - case 'T': - case 't': goto yy380; - default: goto yy128; - } + if (yych == 'T') goto yy359; + if (yych == 't') goto yy359; + goto yy44; yy273: YYDEBUG(273, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'L') goto yy360; + if (yych == 'l') goto yy360; + goto yy44; +yy274: YYDEBUG(274, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1541 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_OR_EQUAL); -} -#line 3900 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'U') goto yy361; + if (yych == 'u') goto yy361; + goto yy44; yy275: YYDEBUG(275, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'U') goto yy362; + if (yych == 'u') goto yy362; + goto yy44; +yy276: YYDEBUG(276, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1549 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_BOOLEAN_OR); -} -#line 3910 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'T') goto yy363; + if (yych == 't') goto yy363; + goto yy44; yy277: YYDEBUG(277, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'T') goto yy364; + if (yych == 't') goto yy364; + goto yy44; +yy278: YYDEBUG(278, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1473 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_IS_NOT_IDENTICAL); -} -#line 3920 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'O') goto yy365; + if (yych == 'o') goto yy365; + goto yy44; yy279: YYDEBUG(279, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy381; - if (yych == 'r') goto yy381; - goto yy166; + if (yych == 'I') goto yy366; + if (yych == 'i') goto yy366; + goto yy44; yy280: YYDEBUG(280, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy382; - if (yych == 'n') goto yy382; - goto yy166; -yy281: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(281, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'O') goto yy383; - if (yych == 'o') goto yy383; - goto yy166; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1155 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_TRY); +} +#line 3691 "Zend/zend_language_scanner.c" yy282: YYDEBUG(282, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'U') goto yy384; - if (yych == 'u') goto yy384; - goto yy166; + if (yych == 'E') goto yy367; + if (yych == 'e') goto yy367; + goto yy44; yy283: YYDEBUG(283, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy385; - if (yych == 'o') goto yy385; - goto yy166; -yy284: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(284, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'T') goto yy386; - if (yych == 't') goto yy386; - goto yy166; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1397 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_USE); +} +#line 3710 "Zend/zend_language_scanner.c" yy285: YYDEBUG(285, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'J') goto yy387; - if (yych == 'j') goto yy387; - goto yy166; -yy286: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(286, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'A') goto yy388; - if (yych == 'a') goto yy388; - goto yy166; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1341 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_VAR); +} +#line 3723 "Zend/zend_language_scanner.c" yy287: YYDEBUG(287, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy389; - if (yych == 'r') goto yy389; - goto yy166; + if (yych == 'L') goto yy368; + if (yych == 'l') goto yy368; + goto yy44; yy288: YYDEBUG(288, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy390; - if (yych == 's') goto yy390; - goto yy166; -yy289: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(289, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(290, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1513 "Zend/zend_language_scanner.l" +#line 1569 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_POW_EQUAL); + RETURN_TOKEN(T_LOGICAL_XOR); } -#line 3990 "Zend/zend_language_scanner.c" +#line 3742 "Zend/zend_language_scanner.c" +yy290: + YYDEBUG(290, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy369; + if (yych == 'l') goto yy369; + goto yy44; yy291: YYDEBUG(291, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'L') goto yy370; + if (yych == 'l') goto yy370; + goto yy44; +yy292: YYDEBUG(292, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1321 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_ELLIPSIS); -} -#line 4000 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'I') goto yy371; + if (yych == 'i') goto yy371; + goto yy44; yy293: YYDEBUG(293, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '\f') { - if (yych <= 0x08) goto yy166; - if (yych <= '\n') goto yy391; - goto yy166; + if (yych <= 'U') { + if (yych == 'I') goto yy372; + if (yych <= 'T') goto yy44; + goto yy373; } else { - if (yych <= '\r') goto yy391; - if (yych == ' ') goto yy391; - goto yy166; + if (yych <= 'i') { + if (yych <= 'h') goto yy44; + goto yy372; + } else { + if (yych == 'u') goto yy373; + goto yy44; + } } yy294: YYDEBUG(294, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'A') goto yy374; + if (yych == 'a') goto yy374; + goto yy44; +yy295: YYDEBUG(295, *YYCURSOR); - if (yybm[0+yych] & 64) { - goto yy294; - } + yych = *++YYCURSOR; + if (yych == 'I') goto yy375; + if (yych == 'i') goto yy375; + goto yy44; +yy296: YYDEBUG(296, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1619 "Zend/zend_language_scanner.l" - { - char *bin = yytext + 2; /* Skip "0b" */ - int len = yyleng - 2; - char *end; - - /* Skip any leading 0s */ - while (*bin == '0') { - ++bin; - --len; - } - - if (len < SIZEOF_ZEND_LONG * 8) { - if (len == 0) { - ZVAL_LONG(zendlval, 0); - } else { - errno = 0; - ZVAL_LONG(zendlval, ZEND_STRTOL(bin, &end, 2)); - ZEND_ASSERT(!errno && end == yytext + yyleng); - } - RETURN_TOKEN(T_LNUMBER); - } else { - ZVAL_DOUBLE(zendlval, zend_bin_strtod(bin, (const char **)&end)); - /* errno isn't checked since we allow HUGE_VAL/INF overflow */ - ZEND_ASSERT(end == yytext + yyleng); - RETURN_TOKEN(T_DNUMBER); - } -} -#line 4052 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'E') goto yy376; + if (yych == 'e') goto yy376; + goto yy44; yy297: YYDEBUG(297, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '/') goto yy166; - if (yych >= ':') goto yy166; + if (yych == 'A') goto yy377; + if (yych == 'a') goto yy377; + goto yy44; yy298: YYDEBUG(298, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'R') goto yy378; + if (yych == 'r') goto yy378; + goto yy44; +yy299: YYDEBUG(299, *YYCURSOR); - if (yych <= '/') goto yy193; - if (yych <= '9') goto yy298; - goto yy193; + yych = *++YYCURSOR; + if (yych == 'A') goto yy379; + if (yych == 'a') goto yy379; + goto yy82; yy300: YYDEBUG(300, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'A') goto yy380; + if (yych == 'a') goto yy380; + goto yy82; +yy301: YYDEBUG(301, *YYCURSOR); - if (yybm[0+yych] & 128) { - goto yy300; - } + yych = *++YYCURSOR; + if (yych == 'L') goto yy381; + if (yych == 'l') goto yy381; + goto yy82; +yy302: YYDEBUG(302, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1690 "Zend/zend_language_scanner.l" - { - char *hex = yytext + 2; /* Skip "0x" */ - int len = yyleng - 2; - char *end; - - /* Skip any leading 0s */ - while (*hex == '0') { - hex++; - len--; - } - - if (len < SIZEOF_ZEND_LONG * 2 || (len == SIZEOF_ZEND_LONG * 2 && *hex <= '7')) { - if (len == 0) { - ZVAL_LONG(zendlval, 0); - } else { - errno = 0; - ZVAL_LONG(zendlval, ZEND_STRTOL(hex, &end, 16)); - ZEND_ASSERT(!errno && end == hex + len); - } - RETURN_TOKEN(T_LNUMBER); - } else { - ZVAL_DOUBLE(zendlval, zend_hex_strtod(hex, (const char **)&end)); - /* errno isn't checked since we allow HUGE_VAL/INF overflow */ - ZEND_ASSERT(end == hex + len); - RETURN_TOKEN(T_DNUMBER); - } -} -#line 4106 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'B') goto yy382; + if (yych == 'b') goto yy382; + goto yy82; yy303: YYDEBUG(303, *YYCURSOR); - ++YYCURSOR; - YYFILL(2); - yych = *YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'A') goto yy383; + if (yych == 'a') goto yy383; + goto yy82; +yy304: YYDEBUG(304, *YYCURSOR); - if (yych <= '\'') { - if (yych <= ' ') { - if (yych == '\t') goto yy303; - if (yych <= 0x1F) goto yy166; - goto yy303; - } else { - if (yych == '"') goto yy393; - if (yych <= '&') goto yy166; - goto yy394; - } - } else { - if (yych <= '_') { - if (yych <= '@') goto yy166; - if (yych <= 'Z') goto yy395; - if (yych <= '^') goto yy166; - goto yy395; - } else { - if (yych <= '`') goto yy166; - if (yych <= 'z') goto yy395; - if (yych <= 0x7F) goto yy166; - goto yy395; - } - } + yych = *++YYCURSOR; + if (yych == 'E') goto yy388; + if (yych == 'e') goto yy388; + goto yy385; yy305: YYDEBUG(305, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'E') goto yy389; + if (yych == 'e') goto yy389; + goto yy82; +yy306: YYDEBUG(306, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1529 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_SL_EQUAL); -} -#line 4145 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'L') goto yy390; + if (yych == 'l') goto yy390; + goto yy82; yy307: YYDEBUG(307, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'I') goto yy392; + if (yych == 'i') goto yy392; + goto yy82; +yy308: YYDEBUG(308, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1485 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_SPACESHIP); -} -#line 4155 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'E') goto yy393; + if (yych == 'e') goto yy393; + goto yy82; yy309: YYDEBUG(309, *YYCURSOR); ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; YYDEBUG(310, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1469 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_IS_IDENTICAL); -} -#line 4165 "Zend/zend_language_scanner.c" + if (yych <= '\f') { + if (yych <= 0x08) goto yy113; + if (yych <= '\n') goto yy309; + goto yy113; + } else { + if (yych <= '\r') goto yy309; + if (yych == ' ') goto yy309; + goto yy113; + } yy311: YYDEBUG(311, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == '"') goto yy82; + if (yych <= '/') goto yy395; + if (yych <= '9') goto yy82; + goto yy395; +yy312: YYDEBUG(312, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1533 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_SR_EQUAL); -} -#line 4175 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == '\'') goto yy82; + if (yych <= '/') goto yy397; + if (yych <= '9') goto yy82; + goto yy397; yy313: YYDEBUG(313, *YYCURSOR); - yych = *++YYCURSOR; - goto yy219; -yy314: + ++YYCURSOR; + YYFILL(2); + yych = *YYCURSOR; YYDEBUG(314, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '\n') goto yy313; - goto yy219; + if (yych <= '@') { + if (yych <= '\f') { + if (yych == '\n') goto yy398; + goto yy82; + } else { + if (yych <= '\r') goto yy400; + if (yych <= '/') goto yy82; + if (yych <= '9') goto yy313; + goto yy82; + } + } else { + if (yych <= '_') { + if (yych <= 'Z') goto yy313; + if (yych <= '^') goto yy82; + goto yy313; + } else { + if (yych <= '`') goto yy82; + if (yych <= 'z') goto yy313; + if (yych <= 0x7F) goto yy82; + goto yy313; + } + } yy315: YYDEBUG(315, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy397; - if (yych == 't') goto yy397; - goto yy128; + if (yych == 'R') goto yy401; + if (yych == 'r') goto yy401; + goto yy44; yy316: YYDEBUG(316, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'Y') goto yy402; + if (yych == 'y') goto yy402; + goto yy44; +yy317: YYDEBUG(317, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1561 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_LOGICAL_AND); -} -#line 4203 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'K') goto yy404; + if (yych == 'k') goto yy404; + goto yy44; yy318: YYDEBUG(318, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy398; - if (yych == 'a') goto yy398; - goto yy128; + if (yych == 'A') goto yy406; + if (yych == 'a') goto yy406; + goto yy44; yy319: YYDEBUG(319, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '<') goto yy303; - goto yy166; -yy320: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(320, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'A') goto yy399; - if (yych == 'a') goto yy399; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1239 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_CASE); +} +#line 3960 "Zend/zend_language_scanner.c" yy321: YYDEBUG(321, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy400; - if (yych == 'l') goto yy400; - goto yy128; + if (yych == 'H') goto yy407; + if (yych == 'h') goto yy407; + goto yy44; yy322: YYDEBUG(322, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy401; - if (yych == 'e') goto yy401; - goto yy128; + if (yych == 'S') goto yy409; + if (yych == 's') goto yy409; + goto yy44; yy323: YYDEBUG(323, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy403; - if (yych == 'c') goto yy403; - goto yy128; + if (yych == 'E') goto yy411; + if (yych == 'e') goto yy411; + goto yy44; yy324: YYDEBUG(324, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy404; - if (yych == 's') goto yy404; - goto yy128; + if (yych == 'T') goto yy413; + if (yych == 't') goto yy413; + goto yy44; yy325: YYDEBUG(325, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy405; - if (yych == 'n') goto yy405; - goto yy128; + if (yych == 'I') goto yy415; + if (yych == 'i') goto yy415; + goto yy44; yy326: YYDEBUG(326, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= 'T') { - if (yych <= 'R') goto yy128; - if (yych <= 'S') goto yy406; - goto yy407; - } else { - if (yych <= 'r') goto yy128; - if (yych <= 's') goto yy406; - if (yych <= 't') goto yy407; - goto yy128; - } + if (yych == 'A') goto yy416; + if (yych == 'a') goto yy416; + goto yy44; yy327: YYDEBUG(327, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy408; - if (yych == 'l') goto yy408; - goto yy128; + if (yych == 'U') goto yy417; + if (yych == 'u') goto yy417; + goto yy44; yy328: YYDEBUG(328, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy409; - if (yych == 'a') goto yy409; - goto yy128; -yy329: - YYDEBUG(329, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+yych] & 16) { + goto yy43; } - YYDEBUG(330, *YYCURSOR); + YYDEBUG(329, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1129 "Zend/zend_language_scanner.l" +#line 1259 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_EXIT); + RETURN_TOKEN(T_ECHO); } -#line 4288 "Zend/zend_language_scanner.c" +#line 4015 "Zend/zend_language_scanner.c" +yy330: + YYDEBUG(330, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '^') { + if (yych <= '@') { + if (yych <= '/') goto yy331; + if (yych <= '9') goto yy43; + } else { + if (yych == 'I') goto yy418; + if (yych <= 'Z') goto yy43; + } + } else { + if (yych <= 'h') { + if (yych != '`') goto yy43; + } else { + if (yych <= 'i') goto yy418; + if (yych <= 'z') goto yy43; + if (yych >= 0x80) goto yy43; + } + } yy331: YYDEBUG(331, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'O') goto yy410; - if (yych == 'o') goto yy410; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1183 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ELSE); +} +#line 4043 "Zend/zend_language_scanner.c" yy332: YYDEBUG(332, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy412; - if (yych == 'e') goto yy412; - goto yy128; + if (yych == 'Y') goto yy419; + if (yych == 'y') goto yy419; + goto yy44; yy333: YYDEBUG(333, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy414; - if (yych == 't') goto yy414; - goto yy128; + if (yych == 'E') goto yy421; + if (yych == 'e') goto yy421; + goto yy44; yy334: YYDEBUG(334, *YYCURSOR); yych = *++YYCURSOR; - switch (yych) { - case 'D': - case 'd': goto yy415; - case 'F': - case 'f': goto yy416; - case 'I': - case 'i': goto yy417; - case 'S': - case 's': goto yy418; - case 'W': - case 'w': goto yy419; - default: goto yy128; - } + if (yych == 'O') goto yy422; + if (yych == 'o') goto yy422; + goto yy44; yy335: YYDEBUG(335, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy420; - if (yych == 'l') goto yy420; - goto yy128; + if (yych == 'F') goto yy423; + if (yych == 'f') goto yy423; + goto yy44; yy336: YYDEBUG(336, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy422; - if (yych == 't') goto yy422; - goto yy128; + if (yych == 'W') goto yy425; + if (yych == 'w') goto yy425; + goto yy44; yy337: YYDEBUG(337, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy424; - if (yych == 'e') goto yy424; - goto yy128; + if (yych == 'H') goto yy426; + if (yych == 'h') goto yy426; + goto yy44; yy338: YYDEBUG(338, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy425; - if (yych == 'a') goto yy425; - goto yy128; -yy339: - YYDEBUG(339, *YYCURSOR); - ++YYCURSOR; - if ((yych = *YYCURSOR) <= '^') { - if (yych <= '@') { - if (yych <= '/') goto yy340; - if (yych <= '9') goto yy127; - } else { - if (yych == 'E') goto yy426; - if (yych <= 'Z') goto yy127; - } - } else { - if (yych <= 'd') { - if (yych != '`') goto yy127; - } else { - if (yych <= 'e') goto yy426; - if (yych <= 'z') goto yy127; - if (yych >= 0x80) goto yy127; - } + if (yybm[0+yych] & 16) { + goto yy43; } + YYDEBUG(339, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1373 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_EVAL); +} +#line 4092 "Zend/zend_language_scanner.c" yy340: YYDEBUG(340, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(341, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1199 "Zend/zend_language_scanner.l" +#line 1125 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_FOR); + RETURN_TOKEN(T_EXIT); } -#line 4374 "Zend/zend_language_scanner.c" -yy341: - YYDEBUG(341, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'C') goto yy427; - if (yych == 'c') goto yy427; - goto yy128; +#line 4105 "Zend/zend_language_scanner.c" yy342: YYDEBUG(342, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'B') goto yy428; - if (yych == 'b') goto yy428; - goto yy128; + if (yych == 'N') goto yy427; + if (yych == 'n') goto yy427; + goto yy44; yy343: YYDEBUG(343, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy429; - if (yych == 'o') goto yy429; - goto yy128; + if (yych == 'L') goto yy428; + if (yych == 'l') goto yy428; + goto yy44; yy344: YYDEBUG(344, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy431; - if (yych == 'l') goto yy431; - goto yy128; + if (yych == 'A') goto yy430; + if (yych == 'a') goto yy430; + goto yy44; yy345: YYDEBUG(345, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy432; - if (yych == 'l') goto yy432; - goto yy128; + if (yych == 'T') goto yy431; + if (yych == 't') goto yy431; + goto yy44; yy346: YYDEBUG(346, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy433; - if (yych == 't') goto yy433; - goto yy128; + if (yych == 'A') goto yy432; + if (yych == 'a') goto yy432; + goto yy44; yy347: YYDEBUG(347, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy434; - if (yych == 'e') goto yy434; - goto yy128; -yy348: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(348, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy435; - if (yych == 'e') goto yy435; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1255 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_GOTO); +} +#line 4148 "Zend/zend_language_scanner.c" yy349: YYDEBUG(349, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy436; - if (yych == 't') goto yy436; - goto yy128; + if (yych == 'E') goto yy433; + if (yych == 'e') goto yy433; + goto yy44; yy350: YYDEBUG(350, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy438; - if (yych == 'e') goto yy438; - goto yy128; + if (yych == 'U') goto yy434; + if (yych == 'u') goto yy434; + goto yy44; yy351: YYDEBUG(351, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } - YYDEBUG(352, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1329 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_NEW); -} -#line 4447 "Zend/zend_language_scanner.c" -yy353: - YYDEBUG(353, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= 'V') { - if (yych == 'N') goto yy439; - if (yych <= 'U') goto yy128; - goto yy440; + if (yych <= 'E') { + if (yych == 'A') goto yy435; + if (yych <= 'D') goto yy44; + goto yy436; } else { - if (yych <= 'n') { - if (yych <= 'm') goto yy128; - goto yy439; + if (yych <= 'a') { + if (yych <= '`') goto yy44; + goto yy435; } else { - if (yych == 'v') goto yy440; - goto yy128; + if (yych == 'e') goto yy436; + goto yy44; } } +yy352: + YYDEBUG(352, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy437; + if (yych == 'r') goto yy437; + goto yy44; +yy353: + YYDEBUG(353, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy438; + if (yych == 't') goto yy438; + goto yy44; yy354: YYDEBUG(354, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy441; - if (yych == 't') goto yy441; - goto yy128; -yy355: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(355, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'L') goto yy442; - if (yych == 'l') goto yy442; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1453 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_LIST); +} +#line 4201 "Zend/zend_language_scanner.c" yy356: YYDEBUG(356, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'U') goto yy443; - if (yych == 'u') goto yy443; - goto yy128; + if (yych == 'S') goto yy440; + if (yych == 's') goto yy440; + goto yy44; yy357: YYDEBUG(357, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'U') goto yy444; - if (yych == 'u') goto yy444; - goto yy128; + if (yych == 'T') goto yy441; + if (yych == 't') goto yy441; + goto yy44; yy358: YYDEBUG(358, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy445; - if (yych == 't') goto yy445; - goto yy128; + if (yych == 'A') goto yy443; + if (yych == 'a') goto yy443; + goto yy44; yy359: YYDEBUG(359, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy446; - if (yych == 't') goto yy446; - goto yy128; + if (yych == 'E') goto yy444; + if (yych == 'e') goto yy444; + goto yy44; yy360: YYDEBUG(360, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy447; - if (yych == 'o') goto yy447; - goto yy128; + if (yych == 'I') goto yy445; + if (yych == 'i') goto yy445; + goto yy44; yy361: YYDEBUG(361, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy448; - if (yych == 'i') goto yy448; - goto yy128; + if (yych == 'I') goto yy446; + if (yych == 'i') goto yy446; + goto yy44; yy362: YYDEBUG(362, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'R') goto yy447; + if (yych == 'r') goto yy447; + goto yy44; +yy363: YYDEBUG(363, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1155 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_TRY); -} -#line 4524 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'I') goto yy448; + if (yych == 'i') goto yy448; + goto yy44; yy364: YYDEBUG(364, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy449; - if (yych == 'e') goto yy449; - goto yy128; + if (yych == 'C') goto yy449; + if (yych == 'c') goto yy449; + goto yy44; yy365: YYDEBUG(365, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'W') goto yy450; + if (yych == 'w') goto yy450; + goto yy44; +yy366: YYDEBUG(366, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1393 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_USE); -} -#line 4543 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'T') goto yy452; + if (yych == 't') goto yy452; + goto yy44; yy367: YYDEBUG(367, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'T') goto yy454; + if (yych == 't') goto yy454; + goto yy44; +yy368: YYDEBUG(368, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1337 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_VAR); -} -#line 4556 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'E') goto yy456; + if (yych == 'e') goto yy456; + goto yy44; yy369: YYDEBUG(369, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy450; - if (yych == 'l') goto yy450; - goto yy128; + if (yych == 'D') goto yy458; + if (yych == 'd') goto yy458; + goto yy44; yy370: YYDEBUG(370, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'A') goto yy460; + if (yych == 'a') goto yy460; + goto yy44; +yy371: YYDEBUG(371, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1565 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_LOGICAL_XOR); -} -#line 4575 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'R') goto yy461; + if (yych == 'r') goto yy461; + goto yy44; yy372: YYDEBUG(372, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy451; - if (yych == 'l') goto yy451; - goto yy128; + if (yych == 'L') goto yy462; + if (yych == 'l') goto yy462; + goto yy44; yy373: YYDEBUG(373, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy452; - if (yych == 'l') goto yy452; - goto yy128; + if (yych == 'N') goto yy463; + if (yych == 'n') goto yy463; + goto yy44; yy374: YYDEBUG(374, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy453; - if (yych == 'i') goto yy453; - goto yy128; + if (yych == 'L') goto yy464; + if (yych == 'l') goto yy464; + goto yy44; yy375: YYDEBUG(375, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= 'U') { - if (yych == 'I') goto yy454; - if (yych <= 'T') goto yy128; - goto yy455; - } else { - if (yych <= 'i') { - if (yych <= 'h') goto yy128; - goto yy454; - } else { - if (yych == 'u') goto yy455; - goto yy128; - } - } + if (yych == 'N') goto yy465; + if (yych == 'n') goto yy465; + goto yy44; yy376: YYDEBUG(376, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy456; - if (yych == 'a') goto yy456; - goto yy128; + if (yych == 'T') goto yy466; + if (yych == 't') goto yy466; + goto yy44; yy377: YYDEBUG(377, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy457; - if (yych == 'i') goto yy457; - goto yy128; + if (yych == 'M') goto yy467; + if (yych == 'm') goto yy467; + goto yy44; yy378: YYDEBUG(378, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy458; - if (yych == 'e') goto yy458; - goto yy128; + if (yych == 'A') goto yy468; + if (yych == 'a') goto yy468; + goto yy44; yy379: YYDEBUG(379, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy459; - if (yych == 'a') goto yy459; - goto yy128; + if (yych == 'Y') goto yy469; + if (yych == 'y') goto yy469; + goto yy82; yy380: YYDEBUG(380, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy460; - if (yych == 'r') goto yy460; - goto yy128; + if (yych == 'R') goto yy471; + if (yych == 'r') goto yy471; + goto yy82; yy381: YYDEBUG(381, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy461; - if (yych == 'a') goto yy461; - goto yy166; + if (yych == 'E') goto yy476; + if (yych == 'e') goto yy476; + goto yy473; yy382: YYDEBUG(382, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy462; - if (yych == 'a') goto yy462; - goto yy166; + if (yych == 'L') goto yy477; + if (yych == 'l') goto yy477; + goto yy82; yy383: YYDEBUG(383, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy463; - if (yych == 'l') goto yy463; - goto yy166; + if (yych == 'T') goto yy390; + if (yych == 't') goto yy390; + goto yy82; yy384: YYDEBUG(384, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'B') goto yy464; - if (yych == 'b') goto yy464; - goto yy166; + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; yy385: YYDEBUG(385, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'A') goto yy465; - if (yych == 'a') goto yy465; - goto yy166; -yy386: + if (yych <= 0x1F) { + if (yych == '\t') goto yy384; + goto yy82; + } else { + if (yych <= ' ') goto yy384; + if (yych != ')') goto yy82; + } YYDEBUG(386, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy470; - if (yych == 'e') goto yy470; - goto yy467; -yy387: + ++YYCURSOR; YYDEBUG(387, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy471; - if (yych == 'e') goto yy471; - goto yy166; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1345 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_INT_CAST); +} +#line 4392 "Zend/zend_language_scanner.c" yy388: YYDEBUG(388, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy472; - if (yych == 'l') goto yy472; - goto yy166; + if (yych == 'G') goto yy478; + if (yych == 'g') goto yy478; + goto yy82; yy389: YYDEBUG(389, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy474; - if (yych == 'i') goto yy474; - goto yy166; + if (yych == 'C') goto yy479; + if (yych == 'c') goto yy479; + goto yy82; yy390: YYDEBUG(390, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy475; - if (yych == 'e') goto yy475; - goto yy166; -yy391: - YYDEBUG(391, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(392, *YYCURSOR); - if (yych <= '\f') { - if (yych <= 0x08) goto yy197; - if (yych <= '\n') goto yy391; - goto yy197; + YYDEBUG(391, *YYCURSOR); + if (yych <= 0x1F) { + if (yych == '\t') goto yy390; + goto yy82; } else { - if (yych <= '\r') goto yy391; - if (yych == ' ') goto yy391; - goto yy197; + if (yych <= ' ') goto yy390; + if (yych == ')') goto yy480; + goto yy82; } +yy392: + YYDEBUG(392, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'N') goto yy482; + if (yych == 'n') goto yy482; + goto yy82; yy393: YYDEBUG(393, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '"') goto yy166; - if (yych <= '/') goto yy477; - if (yych <= '9') goto yy166; - goto yy477; + if (yych == 'T') goto yy483; + if (yych == 't') goto yy483; + goto yy82; yy394: YYDEBUG(394, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '\'') goto yy166; - if (yych <= '/') goto yy479; - if (yych <= '9') goto yy166; - goto yy479; -yy395: - YYDEBUG(395, *YYCURSOR); ++YYCURSOR; - YYFILL(2); + YYFILL(3); yych = *YYCURSOR; - YYDEBUG(396, *YYCURSOR); - if (yych <= '@') { - if (yych <= '\f') { - if (yych == '\n') goto yy480; - goto yy166; +yy395: + YYDEBUG(395, *YYCURSOR); + if (yych <= 'Z') { + if (yych <= '/') { + if (yych == '"') goto yy485; + goto yy82; } else { - if (yych <= '\r') goto yy482; - if (yych <= '/') goto yy166; - if (yych <= '9') goto yy395; - goto yy166; + if (yych <= '9') goto yy394; + if (yych <= '@') goto yy82; + goto yy394; } } else { - if (yych <= '_') { - if (yych <= 'Z') goto yy395; - if (yych <= '^') goto yy166; - goto yy395; + if (yych <= '`') { + if (yych == '_') goto yy394; + goto yy82; } else { - if (yych <= '`') goto yy166; - if (yych <= 'z') goto yy395; - if (yych <= 0x7F) goto yy166; - goto yy395; + if (yych <= 'z') goto yy394; + if (yych <= 0x7F) goto yy82; + goto yy394; } } +yy396: + YYDEBUG(396, *YYCURSOR); + ++YYCURSOR; + YYFILL(3); + yych = *YYCURSOR; yy397: YYDEBUG(397, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'R') goto yy483; - if (yych == 'r') goto yy483; - goto yy128; + if (yych <= 'Z') { + if (yych <= '/') { + if (yych == '\'') goto yy485; + goto yy82; + } else { + if (yych <= '9') goto yy396; + if (yych <= '@') goto yy82; + goto yy396; + } + } else { + if (yych <= '`') { + if (yych == '_') goto yy396; + goto yy82; + } else { + if (yych <= 'z') goto yy396; + if (yych <= 0x7F) goto yy82; + goto yy396; + } + } yy398: YYDEBUG(398, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'Y') goto yy484; - if (yych == 'y') goto yy484; - goto yy128; + ++YYCURSOR; yy399: YYDEBUG(399, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'K') goto yy486; - if (yych == 'k') goto yy486; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 2083 "Zend/zend_language_scanner.l" + { + char *s; + int bprefix = (yytext[0] != '<') ? 1 : 0; + zend_heredoc_label *heredoc_label = emalloc(sizeof(zend_heredoc_label)); + + CG(zend_lineno)++; + heredoc_label->length = yyleng-bprefix-3-1-(yytext[yyleng-2]=='\r'?1:0); + s = yytext+bprefix+3; + while ((*s == ' ') || (*s == '\t')) { + s++; + heredoc_label->length--; + } + + if (*s == '\'') { + s++; + heredoc_label->length -= 2; + + BEGIN(ST_NOWDOC); + } else { + if (*s == '"') { + s++; + heredoc_label->length -= 2; + } + + BEGIN(ST_HEREDOC); + } + + heredoc_label->label = estrndup(s, heredoc_label->length); + + /* Check for ending label on the next line */ + if (heredoc_label->length < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, s, heredoc_label->length)) { + YYCTYPE *end = YYCURSOR + heredoc_label->length; + + if (*end == ';') { + end++; + } + + if (*end == '\n' || *end == '\r') { + BEGIN(ST_END_HEREDOC); + } + } + + zend_ptr_stack_push(&SCNG(heredoc_label_stack), (void *) heredoc_label); + + RETURN_TOKEN(T_START_HEREDOC); +} +#line 4536 "Zend/zend_language_scanner.c" yy400: YYDEBUG(400, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy488; - if (yych == 'a') goto yy488; - goto yy128; + if (yych == '\n') goto yy398; + goto yy399; yy401: YYDEBUG(401, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'A') goto yy486; + if (yych == 'a') goto yy486; + goto yy44; +yy402: YYDEBUG(402, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(403, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1239 "Zend/zend_language_scanner.l" +#line 1457 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_CASE); + RETURN_TOKEN(T_ARRAY); } -#line 4793 "Zend/zend_language_scanner.c" -yy403: - YYDEBUG(403, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'H') goto yy489; - if (yych == 'h') goto yy489; - goto yy128; +#line 4560 "Zend/zend_language_scanner.c" yy404: YYDEBUG(404, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy491; - if (yych == 's') goto yy491; - goto yy128; -yy405: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(405, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy493; - if (yych == 'e') goto yy493; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1247 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_BREAK); +} +#line 4573 "Zend/zend_language_scanner.c" yy406: YYDEBUG(406, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy495; - if (yych == 't') goto yy495; - goto yy128; + if (yych == 'B') goto yy487; + if (yych == 'b') goto yy487; + goto yy44; yy407: YYDEBUG(407, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy497; - if (yych == 'i') goto yy497; - goto yy128; -yy408: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(408, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'A') goto yy498; - if (yych == 'a') goto yy498; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1159 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_CATCH); +} +#line 4592 "Zend/zend_language_scanner.c" yy409: YYDEBUG(409, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'U') goto yy499; - if (yych == 'u') goto yy499; - goto yy128; -yy410: - YYDEBUG(410, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+yych] & 16) { + goto yy43; } - YYDEBUG(411, *YYCURSOR); + YYDEBUG(410, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1259 "Zend/zend_language_scanner.l" +#line 1267 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_ECHO); + RETURN_TOKEN(T_CLASS); } -#line 4848 "Zend/zend_language_scanner.c" -yy412: - YYDEBUG(412, *YYCURSOR); - ++YYCURSOR; - if ((yych = *YYCURSOR) <= '^') { - if (yych <= '@') { - if (yych <= '/') goto yy413; - if (yych <= '9') goto yy127; - } else { - if (yych == 'I') goto yy500; - if (yych <= 'Z') goto yy127; - } - } else { - if (yych <= 'h') { - if (yych != '`') goto yy127; - } else { - if (yych <= 'i') goto yy500; - if (yych <= 'z') goto yy127; - if (yych >= 0x80) goto yy127; - } +#line 4605 "Zend/zend_language_scanner.c" +yy411: + YYDEBUG(411, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; } + YYDEBUG(412, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1337 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_CLONE); +} +#line 4618 "Zend/zend_language_scanner.c" yy413: YYDEBUG(413, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(414, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1183 "Zend/zend_language_scanner.l" +#line 1137 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_ELSE); + RETURN_TOKEN(T_CONST); } -#line 4876 "Zend/zend_language_scanner.c" -yy414: - YYDEBUG(414, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'Y') goto yy501; - if (yych == 'y') goto yy501; - goto yy128; +#line 4631 "Zend/zend_language_scanner.c" yy415: YYDEBUG(415, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy503; - if (yych == 'e') goto yy503; - goto yy128; + if (yych == 'N') goto yy488; + if (yych == 'n') goto yy488; + goto yy44; yy416: YYDEBUG(416, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy504; - if (yych == 'o') goto yy504; - goto yy128; + if (yych == 'R') goto yy489; + if (yych == 'r') goto yy489; + goto yy44; yy417: YYDEBUG(417, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'F') goto yy505; - if (yych == 'f') goto yy505; - goto yy128; + if (yych == 'L') goto yy490; + if (yych == 'l') goto yy490; + goto yy44; yy418: YYDEBUG(418, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'W') goto yy507; - if (yych == 'w') goto yy507; - goto yy128; + if (yych == 'F') goto yy491; + if (yych == 'f') goto yy491; + goto yy44; yy419: YYDEBUG(419, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy508; - if (yych == 'h') goto yy508; - goto yy128; -yy420: - YYDEBUG(420, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+yych] & 16) { + goto yy43; } - YYDEBUG(421, *YYCURSOR); + YYDEBUG(420, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1369 "Zend/zend_language_scanner.l" +#line 1413 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_EVAL); + RETURN_TOKEN(T_EMPTY); } -#line 4925 "Zend/zend_language_scanner.c" +#line 4668 "Zend/zend_language_scanner.c" +yy421: + YYDEBUG(421, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy493; + if (yych == 'c') goto yy493; + goto yy44; yy422: YYDEBUG(422, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'R') goto yy494; + if (yych == 'r') goto yy494; + goto yy44; +yy423: YYDEBUG(423, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(424, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1125 "Zend/zend_language_scanner.l" +#line 1179 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_EXIT); + RETURN_TOKEN(T_ENDIF); } -#line 4938 "Zend/zend_language_scanner.c" -yy424: - YYDEBUG(424, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'N') goto yy509; - if (yych == 'n') goto yy509; - goto yy128; +#line 4693 "Zend/zend_language_scanner.c" yy425: YYDEBUG(425, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy510; - if (yych == 'l') goto yy510; - goto yy128; + if (yych == 'I') goto yy496; + if (yych == 'i') goto yy496; + goto yy44; yy426: YYDEBUG(426, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy512; - if (yych == 'a') goto yy512; - goto yy128; + if (yych == 'I') goto yy497; + if (yych == 'i') goto yy497; + goto yy44; yy427: YYDEBUG(427, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy513; - if (yych == 't') goto yy513; - goto yy128; + if (yych == 'D') goto yy498; + if (yych == 'd') goto yy498; + goto yy44; yy428: YYDEBUG(428, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy514; - if (yych == 'a') goto yy514; - goto yy128; + if (yych <= '^') { + if (yych <= '@') { + if (yych <= '/') goto yy429; + if (yych <= '9') goto yy43; + } else { + if (yych == 'L') goto yy499; + if (yych <= 'Z') goto yy43; + } + } else { + if (yych <= 'k') { + if (yych != '`') goto yy43; + } else { + if (yych <= 'l') goto yy499; + if (yych <= 'z') goto yy43; + if (yych >= 0x80) goto yy43; + } + } yy429: YYDEBUG(429, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } - YYDEBUG(430, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1255 "Zend/zend_language_scanner.l" +#line 1429 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_GOTO); + RETURN_TOKEN(T_FINAL); } -#line 4981 "Zend/zend_language_scanner.c" +#line 4739 "Zend/zend_language_scanner.c" +yy430: + YYDEBUG(430, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy500; + if (yych == 'c') goto yy500; + goto yy44; yy431: YYDEBUG(431, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy515; - if (yych == 'e') goto yy515; - goto yy128; + if (yych == 'I') goto yy501; + if (yych == 'i') goto yy501; + goto yy44; yy432: YYDEBUG(432, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'U') goto yy516; - if (yych == 'u') goto yy516; - goto yy128; + if (yych == 'L') goto yy502; + if (yych == 'l') goto yy502; + goto yy44; yy433: YYDEBUG(433, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= 'E') { - if (yych == 'A') goto yy517; - if (yych <= 'D') goto yy128; - goto yy518; - } else { - if (yych <= 'a') { - if (yych <= '`') goto yy128; - goto yy517; - } else { - if (yych == 'e') goto yy518; - goto yy128; - } - } + if (yych == 'M') goto yy504; + if (yych == 'm') goto yy504; + goto yy44; yy434: YYDEBUG(434, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy519; - if (yych == 'r') goto yy519; - goto yy128; + if (yych == 'D') goto yy505; + if (yych == 'd') goto yy505; + goto yy44; yy435: YYDEBUG(435, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy520; - if (yych == 't') goto yy520; - goto yy128; + if (yych == 'N') goto yy506; + if (yych == 'n') goto yy506; + goto yy44; yy436: YYDEBUG(436, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'A') goto yy507; + if (yych == 'a') goto yy507; + goto yy44; +yy437: YYDEBUG(437, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1449 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_LIST); -} -#line 5034 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'F') goto yy508; + if (yych == 'f') goto yy508; + goto yy44; yy438: YYDEBUG(438, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy522; - if (yych == 's') goto yy522; - goto yy128; -yy439: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(439, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'T') goto yy523; - if (yych == 't') goto yy523; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1409 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ISSET); +} +#line 4800 "Zend/zend_language_scanner.c" yy440: YYDEBUG(440, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy525; - if (yych == 'a') goto yy525; - goto yy128; + if (yych == 'P') goto yy509; + if (yych == 'p') goto yy509; + goto yy44; yy441: YYDEBUG(441, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy526; - if (yych == 'e') goto yy526; - goto yy128; -yy442: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(442, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'I') goto yy527; - if (yych == 'i') goto yy527; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1263 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_PRINT); +} +#line 4819 "Zend/zend_language_scanner.c" yy443: YYDEBUG(443, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy528; - if (yych == 'i') goto yy528; - goto yy128; + if (yych == 'T') goto yy510; + if (yych == 't') goto yy510; + goto yy44; yy444: YYDEBUG(444, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy529; - if (yych == 'r') goto yy529; - goto yy128; + if (yych == 'C') goto yy511; + if (yych == 'c') goto yy511; + goto yy44; yy445: YYDEBUG(445, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy530; - if (yych == 'i') goto yy530; - goto yy128; + if (yych == 'C') goto yy512; + if (yych == 'c') goto yy512; + goto yy44; yy446: YYDEBUG(446, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy531; - if (yych == 'c') goto yy531; - goto yy128; + if (yych == 'R') goto yy514; + if (yych == 'r') goto yy514; + goto yy44; yy447: YYDEBUG(447, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'W') goto yy532; - if (yych == 'w') goto yy532; - goto yy128; + if (yych == 'N') goto yy515; + if (yych == 'n') goto yy515; + goto yy44; yy448: YYDEBUG(448, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy534; - if (yych == 't') goto yy534; - goto yy128; + if (yych == 'C') goto yy517; + if (yych == 'c') goto yy517; + goto yy44; yy449: YYDEBUG(449, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy536; - if (yych == 't') goto yy536; - goto yy128; + if (yych == 'H') goto yy519; + if (yych == 'h') goto yy519; + goto yy44; yy450: YYDEBUG(450, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy538; - if (yych == 'e') goto yy538; - goto yy128; -yy451: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(451, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'D') goto yy540; - if (yych == 'd') goto yy540; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1167 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_THROW); +} +#line 4874 "Zend/zend_language_scanner.c" yy452: YYDEBUG(452, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy542; - if (yych == 'a') goto yy542; - goto yy128; -yy453: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(453, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'R') goto yy543; - if (yych == 'r') goto yy543; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1275 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_TRAIT); +} +#line 4887 "Zend/zend_language_scanner.c" yy454: YYDEBUG(454, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy544; - if (yych == 'l') goto yy544; - goto yy128; -yy455: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(455, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'N') goto yy545; - if (yych == 'n') goto yy545; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1445 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_UNSET); +} +#line 4900 "Zend/zend_language_scanner.c" yy456: YYDEBUG(456, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy546; - if (yych == 'l') goto yy546; - goto yy128; -yy457: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(457, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'N') goto yy547; - if (yych == 'n') goto yy547; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1187 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_WHILE); +} +#line 4913 "Zend/zend_language_scanner.c" yy458: YYDEBUG(458, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'T') goto yy548; - if (yych == 't') goto yy548; - goto yy128; + yyaccept = 6; + yych = *(YYMARKER = ++YYCURSOR); + if (yybm[0+yych] & 16) { + goto yy43; + } + if (yych <= '\f') { + if (yych <= 0x08) goto yy459; + if (yych <= '\n') goto yy521; + } else { + if (yych <= '\r') goto yy521; + if (yych == ' ') goto yy521; + } yy459: YYDEBUG(459, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'M') goto yy549; - if (yych == 'm') goto yy549; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1151 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_YIELD); +} +#line 4935 "Zend/zend_language_scanner.c" yy460: YYDEBUG(460, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy550; - if (yych == 'a') goto yy550; - goto yy128; + if (yych == 'S') goto yy523; + if (yych == 's') goto yy523; + goto yy44; yy461: YYDEBUG(461, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'Y') goto yy551; - if (yych == 'y') goto yy551; - goto yy166; + if (yych == '_') goto yy524; + goto yy44; yy462: YYDEBUG(462, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy553; - if (yych == 'r') goto yy553; - goto yy166; + if (yych == 'E') goto yy525; + if (yych == 'e') goto yy525; + goto yy44; yy463: YYDEBUG(463, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy558; - if (yych == 'e') goto yy558; - goto yy555; + if (yych == 'C') goto yy526; + if (yych == 'c') goto yy526; + goto yy44; yy464: YYDEBUG(464, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy559; - if (yych == 'l') goto yy559; - goto yy166; + if (yych == 'T') goto yy527; + if (yych == 't') goto yy527; + goto yy44; yy465: YYDEBUG(465, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy472; - if (yych == 't') goto yy472; - goto yy166; + if (yych == 'E') goto yy528; + if (yych == 'e') goto yy528; + goto yy44; yy466: YYDEBUG(466, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'H') goto yy529; + if (yych == 'h') goto yy529; + goto yy44; +yy467: + YYDEBUG(467, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy530; + if (yych == 'e') goto yy530; + goto yy44; +yy468: + YYDEBUG(468, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'I') goto yy531; + if (yych == 'i') goto yy531; + goto yy44; +yy469: + YYDEBUG(469, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy467: - YYDEBUG(467, *YYCURSOR); + YYDEBUG(470, *YYCURSOR); if (yych <= 0x1F) { - if (yych == '\t') goto yy466; - goto yy166; + if (yych == '\t') goto yy469; + goto yy82; } else { - if (yych <= ' ') goto yy466; - if (yych != ')') goto yy166; + if (yych <= ' ') goto yy469; + if (yych == ')') goto yy532; + goto yy82; } - YYDEBUG(468, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(469, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1341 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_INT_CAST); -} -#line 5225 "Zend/zend_language_scanner.c" -yy470: - YYDEBUG(470, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'G') goto yy560; - if (yych == 'g') goto yy560; - goto yy166; yy471: YYDEBUG(471, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy561; - if (yych == 'c') goto yy561; - goto yy166; + if (yych == 'Y') goto yy534; + if (yych == 'y') goto yy534; + goto yy82; yy472: YYDEBUG(472, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; +yy473: YYDEBUG(473, *YYCURSOR); if (yych <= 0x1F) { if (yych == '\t') goto yy472; - goto yy166; + goto yy82; } else { if (yych <= ' ') goto yy472; - if (yych == ')') goto yy562; - goto yy166; + if (yych != ')') goto yy82; } -yy474: YYDEBUG(474, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'N') goto yy564; - if (yych == 'n') goto yy564; - goto yy166; -yy475: + ++YYCURSOR; YYDEBUG(475, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'T') goto yy565; - if (yych == 't') goto yy565; - goto yy166; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1365 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_BOOL_CAST); +} +#line 5031 "Zend/zend_language_scanner.c" yy476: YYDEBUG(476, *YYCURSOR); - ++YYCURSOR; - YYFILL(3); - yych = *YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'A') goto yy536; + if (yych == 'a') goto yy536; + goto yy82; yy477: YYDEBUG(477, *YYCURSOR); - if (yych <= 'Z') { - if (yych <= '/') { - if (yych == '"') goto yy567; - goto yy166; - } else { - if (yych <= '9') goto yy476; - if (yych <= '@') goto yy166; - goto yy476; - } - } else { - if (yych <= '`') { - if (yych == '_') goto yy476; - goto yy166; - } else { - if (yych <= 'z') goto yy476; - if (yych <= 0x7F) goto yy166; - goto yy476; - } - } + yych = *++YYCURSOR; + if (yych == 'E') goto yy390; + if (yych == 'e') goto yy390; + goto yy82; yy478: YYDEBUG(478, *YYCURSOR); - ++YYCURSOR; - YYFILL(3); - yych = *YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'E') goto yy537; + if (yych == 'e') goto yy537; + goto yy82; yy479: YYDEBUG(479, *YYCURSOR); - if (yych <= 'Z') { - if (yych <= '/') { - if (yych == '\'') goto yy567; - goto yy166; - } else { - if (yych <= '9') goto yy478; - if (yych <= '@') goto yy166; - goto yy478; - } - } else { - if (yych <= '`') { - if (yych == '_') goto yy478; - goto yy166; - } else { - if (yych <= 'z') goto yy478; - if (yych <= 0x7F) goto yy166; - goto yy478; - } - } + yych = *++YYCURSOR; + if (yych == 'T') goto yy538; + if (yych == 't') goto yy538; + goto yy82; yy480: YYDEBUG(480, *YYCURSOR); ++YYCURSOR; -yy481: YYDEBUG(481, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2079 "Zend/zend_language_scanner.l" +#line 1349 "Zend/zend_language_scanner.l" { - char *s; - int bprefix = (yytext[0] != '<') ? 1 : 0; - zend_heredoc_label *heredoc_label = emalloc(sizeof(zend_heredoc_label)); - - CG(zend_lineno)++; - heredoc_label->length = yyleng-bprefix-3-1-(yytext[yyleng-2]=='\r'?1:0); - s = yytext+bprefix+3; - while ((*s == ' ') || (*s == '\t')) { - s++; - heredoc_label->length--; - } - - if (*s == '\'') { - s++; - heredoc_label->length -= 2; - - BEGIN(ST_NOWDOC); - } else { - if (*s == '"') { - s++; - heredoc_label->length -= 2; - } - - BEGIN(ST_HEREDOC); - } - - heredoc_label->label = estrndup(s, heredoc_label->length); - - /* Check for ending label on the next line */ - if (heredoc_label->length < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, s, heredoc_label->length)) { - YYCTYPE *end = YYCURSOR + heredoc_label->length; - - if (*end == ';') { - end++; - } - - if (*end == '\n' || *end == '\r') { - BEGIN(ST_END_HEREDOC); - } - } - - zend_ptr_stack_push(&SCNG(heredoc_label_stack), (void *) heredoc_label); - - RETURN_TOKEN(T_START_HEREDOC); + RETURN_TOKEN(T_DOUBLE_CAST); } -#line 5369 "Zend/zend_language_scanner.c" +#line 5065 "Zend/zend_language_scanner.c" yy482: YYDEBUG(482, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '\n') goto yy480; - goto yy481; + if (yych == 'G') goto yy534; + if (yych == 'g') goto yy534; + goto yy82; yy483: YYDEBUG(483, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'A') goto yy568; - if (yych == 'a') goto yy568; - goto yy128; -yy484: - YYDEBUG(484, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(484, *YYCURSOR); + if (yych <= 0x1F) { + if (yych == '\t') goto yy483; + goto yy82; + } else { + if (yych <= ' ') goto yy483; + if (yych == ')') goto yy540; + goto yy82; } +yy485: YYDEBUG(485, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1453 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_ARRAY); -} -#line 5393 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == '\n') goto yy398; + if (yych == '\r') goto yy400; + goto yy82; yy486: YYDEBUG(486, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'C') goto yy542; + if (yych == 'c') goto yy542; + goto yy44; +yy487: YYDEBUG(487, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1247 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_BREAK); -} -#line 5406 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'L') goto yy543; + if (yych == 'l') goto yy543; + goto yy44; yy488: YYDEBUG(488, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'B') goto yy569; - if (yych == 'b') goto yy569; - goto yy128; + if (yych == 'U') goto yy544; + if (yych == 'u') goto yy544; + goto yy44; yy489: YYDEBUG(489, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'E') goto yy545; + if (yych == 'e') goto yy545; + goto yy44; +yy490: YYDEBUG(490, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1159 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_CATCH); -} -#line 5425 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'T') goto yy547; + if (yych == 't') goto yy547; + goto yy44; yy491: YYDEBUG(491, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; } YYDEBUG(492, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1267 "Zend/zend_language_scanner.l" +#line 1175 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_CLASS); + RETURN_TOKEN(T_ELSEIF); } -#line 5438 "Zend/zend_language_scanner.c" +#line 5134 "Zend/zend_language_scanner.c" yy493: YYDEBUG(493, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'L') goto yy549; + if (yych == 'l') goto yy549; + goto yy44; +yy494: YYDEBUG(494, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1333 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_CLONE); -} -#line 5451 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych <= '^') { + if (yych <= '@') { + if (yych <= '/') goto yy495; + if (yych <= '9') goto yy43; + } else { + if (yych == 'E') goto yy550; + if (yych <= 'Z') goto yy43; + } + } else { + if (yych <= 'd') { + if (yych != '`') goto yy43; + } else { + if (yych <= 'e') goto yy550; + if (yych <= 'z') goto yy43; + if (yych >= 0x80) goto yy43; + } + } yy495: YYDEBUG(495, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } - YYDEBUG(496, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1137 "Zend/zend_language_scanner.l" +#line 1203 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_CONST); + RETURN_TOKEN(T_ENDFOR); } -#line 5464 "Zend/zend_language_scanner.c" +#line 5168 "Zend/zend_language_scanner.c" +yy496: + YYDEBUG(496, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy551; + if (yych == 't') goto yy551; + goto yy44; yy497: YYDEBUG(497, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy570; - if (yych == 'n') goto yy570; - goto yy128; + if (yych == 'L') goto yy552; + if (yych == 'l') goto yy552; + goto yy44; yy498: YYDEBUG(498, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy571; - if (yych == 'r') goto yy571; - goto yy128; + if (yych == 'S') goto yy553; + if (yych == 's') goto yy553; + goto yy44; yy499: YYDEBUG(499, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy572; - if (yych == 'l') goto yy572; - goto yy128; + if (yych == 'Y') goto yy555; + if (yych == 'y') goto yy555; + goto yy44; yy500: YYDEBUG(500, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'F') goto yy573; - if (yych == 'f') goto yy573; - goto yy128; + if (yych == 'H') goto yy557; + if (yych == 'h') goto yy557; + goto yy44; yy501: YYDEBUG(501, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'O') goto yy559; + if (yych == 'o') goto yy559; + goto yy44; +yy502: YYDEBUG(502, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(503, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1409 "Zend/zend_language_scanner.l" +#line 1405 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_EMPTY); + RETURN_TOKEN(T_GLOBAL); } -#line 5501 "Zend/zend_language_scanner.c" -yy503: - YYDEBUG(503, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'C') goto yy575; - if (yych == 'c') goto yy575; - goto yy128; +#line 5217 "Zend/zend_language_scanner.c" yy504: YYDEBUG(504, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy576; - if (yych == 'r') goto yy576; - goto yy128; + if (yych == 'E') goto yy560; + if (yych == 'e') goto yy560; + goto yy44; yy505: YYDEBUG(505, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'E') goto yy561; + if (yych == 'e') goto yy561; + goto yy44; +yy506: YYDEBUG(506, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1179 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_ENDIF); -} -#line 5526 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'C') goto yy563; + if (yych == 'c') goto yy563; + goto yy44; yy507: YYDEBUG(507, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy578; - if (yych == 'i') goto yy578; - goto yy128; + if (yych == 'D') goto yy564; + if (yych == 'd') goto yy564; + goto yy44; yy508: YYDEBUG(508, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy579; - if (yych == 'i') goto yy579; - goto yy128; + if (yych == 'A') goto yy565; + if (yych == 'a') goto yy565; + goto yy44; yy509: YYDEBUG(509, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'D') goto yy580; - if (yych == 'd') goto yy580; - goto yy128; + if (yych == 'A') goto yy566; + if (yych == 'a') goto yy566; + goto yy44; yy510: YYDEBUG(510, *YYCURSOR); - ++YYCURSOR; - if ((yych = *YYCURSOR) <= '^') { - if (yych <= '@') { - if (yych <= '/') goto yy511; - if (yych <= '9') goto yy127; - } else { - if (yych == 'L') goto yy581; - if (yych <= 'Z') goto yy127; - } - } else { - if (yych <= 'k') { - if (yych != '`') goto yy127; - } else { - if (yych <= 'l') goto yy581; - if (yych <= 'z') goto yy127; - if (yych >= 0x80) goto yy127; - } - } + yych = *++YYCURSOR; + if (yych == 'E') goto yy567; + if (yych == 'e') goto yy567; + goto yy44; yy511: YYDEBUG(511, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1425 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_FINAL); -} -#line 5572 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'T') goto yy569; + if (yych == 't') goto yy569; + goto yy44; yy512: YYDEBUG(512, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy582; - if (yych == 'c') goto yy582; - goto yy128; -yy513: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(513, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'I') goto yy583; - if (yych == 'i') goto yy583; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1441 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_PUBLIC); +} +#line 5278 "Zend/zend_language_scanner.c" yy514: YYDEBUG(514, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy584; - if (yych == 'l') goto yy584; - goto yy128; + if (yych == 'E') goto yy570; + if (yych == 'e') goto yy570; + goto yy44; yy515: YYDEBUG(515, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'M') goto yy586; - if (yych == 'm') goto yy586; - goto yy128; -yy516: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(516, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'D') goto yy587; - if (yych == 'd') goto yy587; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1141 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_RETURN); +} +#line 5297 "Zend/zend_language_scanner.c" yy517: YYDEBUG(517, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy588; - if (yych == 'n') goto yy588; - goto yy128; -yy518: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(518, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'A') goto yy589; - if (yych == 'a') goto yy589; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1421 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_STATIC); +} +#line 5310 "Zend/zend_language_scanner.c" yy519: YYDEBUG(519, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'F') goto yy590; - if (yych == 'f') goto yy590; - goto yy128; -yy520: - YYDEBUG(520, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+yych] & 16) { + goto yy43; } - YYDEBUG(521, *YYCURSOR); + YYDEBUG(520, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1405 "Zend/zend_language_scanner.l" +#line 1231 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_ISSET); + RETURN_TOKEN(T_SWITCH); } -#line 5633 "Zend/zend_language_scanner.c" -yy522: +#line 5323 "Zend/zend_language_scanner.c" +yy521: + YYDEBUG(521, *YYCURSOR); + ++YYCURSOR; + YYFILL(5); + yych = *YYCURSOR; YYDEBUG(522, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'P') goto yy591; - if (yych == 'p') goto yy591; - goto yy128; + if (yych <= 0x1F) { + if (yych <= '\n') { + if (yych <= 0x08) goto yy82; + goto yy521; + } else { + if (yych == '\r') goto yy521; + goto yy82; + } + } else { + if (yych <= 'F') { + if (yych <= ' ') goto yy521; + if (yych <= 'E') goto yy82; + goto yy572; + } else { + if (yych == 'f') goto yy572; + goto yy82; + } + } yy523: YYDEBUG(523, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'S') goto yy573; + if (yych == 's') goto yy573; + goto yy44; +yy524: YYDEBUG(524, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1263 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_PRINT); -} -#line 5652 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == '_') goto yy574; + goto yy44; yy525: YYDEBUG(525, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy592; - if (yych == 't') goto yy592; - goto yy128; + if (yych == '_') goto yy576; + goto yy44; yy526: YYDEBUG(526, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy593; - if (yych == 'c') goto yy593; - goto yy128; + if (yych == 'T') goto yy577; + if (yych == 't') goto yy577; + goto yy44; yy527: YYDEBUG(527, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy594; - if (yych == 'c') goto yy594; - goto yy128; + if (yych == '_') goto yy578; + goto yy44; yy528: YYDEBUG(528, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy596; - if (yych == 'r') goto yy596; - goto yy128; + if (yych == '_') goto yy579; + goto yy44; yy529: YYDEBUG(529, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy597; - if (yych == 'n') goto yy597; - goto yy128; + if (yych == 'O') goto yy580; + if (yych == 'o') goto yy580; + goto yy44; yy530: YYDEBUG(530, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy599; - if (yych == 'c') goto yy599; - goto yy128; + if (yych == 'S') goto yy581; + if (yych == 's') goto yy581; + goto yy44; yy531: YYDEBUG(531, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy601; - if (yych == 'h') goto yy601; - goto yy128; + if (yych == 'T') goto yy582; + if (yych == 't') goto yy582; + goto yy44; yy532: YYDEBUG(532, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } YYDEBUG(533, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1167 "Zend/zend_language_scanner.l" +#line 1357 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_THROW); + RETURN_TOKEN(T_ARRAY_CAST); } -#line 5707 "Zend/zend_language_scanner.c" +#line 5407 "Zend/zend_language_scanner.c" yy534: YYDEBUG(534, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + YYFILL(1); + yych = *YYCURSOR; YYDEBUG(535, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1275 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_TRAIT); -} -#line 5720 "Zend/zend_language_scanner.c" + if (yych <= 0x1F) { + if (yych == '\t') goto yy534; + goto yy82; + } else { + if (yych <= ' ') goto yy534; + if (yych == ')') goto yy583; + goto yy82; + } yy536: YYDEBUG(536, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'N') goto yy472; + if (yych == 'n') goto yy472; + goto yy82; +yy537: YYDEBUG(537, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1441 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_UNSET); -} -#line 5733 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'R') goto yy384; + if (yych == 'r') goto yy384; + goto yy82; yy538: YYDEBUG(538, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + YYFILL(1); + yych = *YYCURSOR; YYDEBUG(539, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1187 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_WHILE); -} -#line 5746 "Zend/zend_language_scanner.c" -yy540: - YYDEBUG(540, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if (yybm[0+yych] & 16) { - goto yy127; - } - if (yych <= '\f') { - if (yych <= 0x08) goto yy541; - if (yych <= '\n') goto yy603; + if (yych <= 0x1F) { + if (yych == '\t') goto yy538; + goto yy82; } else { - if (yych <= '\r') goto yy603; - if (yych == ' ') goto yy603; + if (yych <= ' ') goto yy538; + if (yych == ')') goto yy585; + goto yy82; } -yy541: +yy540: + YYDEBUG(540, *YYCURSOR); + ++YYCURSOR; YYDEBUG(541, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1151 "Zend/zend_language_scanner.l" +#line 1369 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_YIELD); + RETURN_TOKEN(T_UNSET_CAST); } -#line 5768 "Zend/zend_language_scanner.c" +#line 5457 "Zend/zend_language_scanner.c" yy542: YYDEBUG(542, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy605; - if (yych == 's') goto yy605; - goto yy128; + if (yych == 'T') goto yy587; + if (yych == 't') goto yy587; + goto yy44; yy543: YYDEBUG(543, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '_') goto yy606; - goto yy128; + if (yych == 'E') goto yy589; + if (yych == 'e') goto yy589; + goto yy44; yy544: YYDEBUG(544, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy607; - if (yych == 'e') goto yy607; - goto yy128; + if (yych == 'E') goto yy591; + if (yych == 'e') goto yy591; + goto yy44; yy545: YYDEBUG(545, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy608; - if (yych == 'c') goto yy608; - goto yy128; -yy546: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(546, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'T') goto yy609; - if (yych == 't') goto yy609; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1215 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_DECLARE); +} +#line 5488 "Zend/zend_language_scanner.c" yy547: YYDEBUG(547, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy610; - if (yych == 'e') goto yy610; - goto yy128; -yy548: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(548, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'H') goto yy611; - if (yych == 'h') goto yy611; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1243 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_DEFAULT); +} +#line 5501 "Zend/zend_language_scanner.c" yy549: YYDEBUG(549, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy612; - if (yych == 'e') goto yy612; - goto yy128; + if (yych == 'A') goto yy593; + if (yych == 'a') goto yy593; + goto yy44; yy550: YYDEBUG(550, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy613; - if (yych == 'i') goto yy613; - goto yy128; + if (yych == 'A') goto yy594; + if (yych == 'a') goto yy594; + goto yy44; yy551: YYDEBUG(551, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'C') goto yy595; + if (yych == 'c') goto yy595; + goto yy44; +yy552: YYDEBUG(552, *YYCURSOR); - if (yych <= 0x1F) { - if (yych == '\t') goto yy551; - goto yy166; - } else { - if (yych <= ' ') goto yy551; - if (yych == ')') goto yy614; - goto yy166; - } + yych = *++YYCURSOR; + if (yych == 'E') goto yy596; + if (yych == 'e') goto yy596; + goto yy44; yy553: YYDEBUG(553, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'Y') goto yy616; - if (yych == 'y') goto yy616; - goto yy166; -yy554: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(554, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1279 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_EXTENDS); +} +#line 5538 "Zend/zend_language_scanner.c" yy555: YYDEBUG(555, *YYCURSOR); - if (yych <= 0x1F) { - if (yych == '\t') goto yy554; - goto yy166; - } else { - if (yych <= ' ') goto yy554; - if (yych != ')') goto yy166; + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; } YYDEBUG(556, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(557, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1361 "Zend/zend_language_scanner.l" +#line 1163 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_BOOL_CAST); + RETURN_TOKEN(T_FINALLY); } -#line 5864 "Zend/zend_language_scanner.c" -yy558: - YYDEBUG(558, *YYCURSOR); +#line 5551 "Zend/zend_language_scanner.c" +yy557: + YYDEBUG(557, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy618; - if (yych == 'a') goto yy618; - goto yy166; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(558, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1207 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_FOREACH); +} +#line 5564 "Zend/zend_language_scanner.c" yy559: YYDEBUG(559, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy472; - if (yych == 'e') goto yy472; - goto yy166; + if (yych == 'N') goto yy598; + if (yych == 'n') goto yy598; + goto yy44; yy560: YYDEBUG(560, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy619; - if (yych == 'e') goto yy619; - goto yy166; + if (yych == 'N') goto yy600; + if (yych == 'n') goto yy600; + goto yy44; yy561: YYDEBUG(561, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy620; - if (yych == 't') goto yy620; - goto yy166; + if (yych <= '^') { + if (yych <= '9') { + if (yych >= '0') goto yy43; + } else { + if (yych <= '@') goto yy562; + if (yych <= 'Z') goto yy43; + } + } else { + if (yych <= '`') { + if (yych <= '_') goto yy601; + } else { + if (yych <= 'z') goto yy43; + if (yych >= 0x80) goto yy43; + } + } yy562: YYDEBUG(562, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(563, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1345 "Zend/zend_language_scanner.l" +#line 1377 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_DOUBLE_CAST); + RETURN_TOKEN(T_INCLUDE); } -#line 5898 "Zend/zend_language_scanner.c" +#line 5602 "Zend/zend_language_scanner.c" +yy563: + YYDEBUG(563, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy602; + if (yych == 'e') goto yy602; + goto yy44; yy564: YYDEBUG(564, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'G') goto yy616; - if (yych == 'g') goto yy616; - goto yy166; + if (yych == 'O') goto yy603; + if (yych == 'o') goto yy603; + goto yy44; yy565: YYDEBUG(565, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'C') goto yy604; + if (yych == 'c') goto yy604; + goto yy44; +yy566: YYDEBUG(566, *YYCURSOR); - if (yych <= 0x1F) { - if (yych == '\t') goto yy565; - goto yy166; - } else { - if (yych <= ' ') goto yy565; - if (yych == ')') goto yy622; - goto yy166; - } + yych = *++YYCURSOR; + if (yych == 'C') goto yy605; + if (yych == 'c') goto yy605; + goto yy44; yy567: YYDEBUG(567, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '\n') goto yy480; - if (yych == '\r') goto yy482; - goto yy166; -yy568: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(568, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'C') goto yy624; - if (yych == 'c') goto yy624; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1433 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_PRIVATE); +} +#line 5639 "Zend/zend_language_scanner.c" yy569: YYDEBUG(569, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy625; - if (yych == 'l') goto yy625; - goto yy128; + if (yych == 'E') goto yy606; + if (yych == 'e') goto yy606; + goto yy44; yy570: YYDEBUG(570, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'U') goto yy626; - if (yych == 'u') goto yy626; - goto yy128; + if (yych <= '^') { + if (yych <= '9') { + if (yych >= '0') goto yy43; + } else { + if (yych <= '@') goto yy571; + if (yych <= 'Z') goto yy43; + } + } else { + if (yych <= '`') { + if (yych <= '_') goto yy607; + } else { + if (yych <= 'z') goto yy43; + if (yych >= 0x80) goto yy43; + } + } yy571: YYDEBUG(571, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy627; - if (yych == 'e') goto yy627; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1385 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_REQUIRE); +} +#line 5671 "Zend/zend_language_scanner.c" yy572: YYDEBUG(572, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy629; - if (yych == 't') goto yy629; - goto yy128; + if (yych == 'R') goto yy608; + if (yych == 'r') goto yy608; + goto yy82; yy573: YYDEBUG(573, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == '_') goto yy609; + goto yy44; +yy574: YYDEBUG(574, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(575, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1175 "Zend/zend_language_scanner.l" +#line 1776 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_ELSEIF); + RETURN_TOKEN(T_DIR); } -#line 5967 "Zend/zend_language_scanner.c" -yy575: - YYDEBUG(575, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'L') goto yy631; - if (yych == 'l') goto yy631; - goto yy128; +#line 5695 "Zend/zend_language_scanner.c" yy576: YYDEBUG(576, *YYCURSOR); - ++YYCURSOR; - if ((yych = *YYCURSOR) <= '^') { - if (yych <= '@') { - if (yych <= '/') goto yy577; - if (yych <= '9') goto yy127; - } else { - if (yych == 'E') goto yy632; - if (yych <= 'Z') goto yy127; - } - } else { - if (yych <= 'd') { - if (yych != '`') goto yy127; - } else { - if (yych <= 'e') goto yy632; - if (yych <= 'z') goto yy127; - if (yych >= 0x80) goto yy127; - } - } + yych = *++YYCURSOR; + if (yych == '_') goto yy610; + goto yy44; yy577: YYDEBUG(577, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1203 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_ENDFOR); -} -#line 6001 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'I') goto yy612; + if (yych == 'i') goto yy612; + goto yy44; yy578: YYDEBUG(578, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy633; - if (yych == 't') goto yy633; - goto yy128; + if (yych == 'C') goto yy613; + if (yych == 'c') goto yy613; + goto yy44; yy579: YYDEBUG(579, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy634; - if (yych == 'l') goto yy634; - goto yy128; + if (yych == '_') goto yy614; + goto yy44; yy580: YYDEBUG(580, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy635; - if (yych == 's') goto yy635; - goto yy128; + if (yych == 'D') goto yy616; + if (yych == 'd') goto yy616; + goto yy44; yy581: YYDEBUG(581, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'Y') goto yy637; - if (yych == 'y') goto yy637; - goto yy128; + if (yych == 'P') goto yy617; + if (yych == 'p') goto yy617; + goto yy44; yy582: YYDEBUG(582, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy639; - if (yych == 'h') goto yy639; - goto yy128; + if (yych == '_') goto yy618; + goto yy44; yy583: YYDEBUG(583, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'O') goto yy641; - if (yych == 'o') goto yy641; - goto yy128; -yy584: - YYDEBUG(584, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } - YYDEBUG(585, *YYCURSOR); + YYDEBUG(584, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1401 "Zend/zend_language_scanner.l" +#line 1353 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_GLOBAL); + RETURN_TOKEN(T_STRING_CAST); } -#line 6050 "Zend/zend_language_scanner.c" -yy586: +#line 5744 "Zend/zend_language_scanner.c" +yy585: + YYDEBUG(585, *YYCURSOR); + ++YYCURSOR; YYDEBUG(586, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy642; - if (yych == 'e') goto yy642; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1361 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_OBJECT_CAST); +} +#line 5754 "Zend/zend_language_scanner.c" yy587: YYDEBUG(587, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy643; - if (yych == 'e') goto yy643; - goto yy128; -yy588: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(588, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'C') goto yy645; - if (yych == 'c') goto yy645; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1425 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ABSTRACT); +} +#line 5767 "Zend/zend_language_scanner.c" yy589: YYDEBUG(589, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'D') goto yy646; - if (yych == 'd') goto yy646; - goto yy128; -yy590: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(590, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'A') goto yy647; - if (yych == 'a') goto yy647; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1461 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_CALLABLE); +} +#line 5780 "Zend/zend_language_scanner.c" yy591: YYDEBUG(591, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy648; - if (yych == 'a') goto yy648; - goto yy128; -yy592: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(592, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy649; - if (yych == 'e') goto yy649; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1251 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_CONTINUE); +} +#line 5793 "Zend/zend_language_scanner.c" yy593: YYDEBUG(593, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy651; - if (yych == 't') goto yy651; - goto yy128; + if (yych == 'R') goto yy619; + if (yych == 'r') goto yy619; + goto yy44; yy594: YYDEBUG(594, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'C') goto yy620; + if (yych == 'c') goto yy620; + goto yy44; +yy595: YYDEBUG(595, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1437 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_PUBLIC); -} -#line 6111 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'H') goto yy621; + if (yych == 'h') goto yy621; + goto yy44; yy596: YYDEBUG(596, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy652; - if (yych == 'e') goto yy652; - goto yy128; -yy597: - YYDEBUG(597, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+yych] & 16) { + goto yy43; } - YYDEBUG(598, *YYCURSOR); + YYDEBUG(597, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1141 "Zend/zend_language_scanner.l" +#line 1191 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_RETURN); + RETURN_TOKEN(T_ENDWHILE); } -#line 6130 "Zend/zend_language_scanner.c" -yy599: - YYDEBUG(599, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; +#line 5824 "Zend/zend_language_scanner.c" +yy598: + YYDEBUG(598, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; } - YYDEBUG(600, *YYCURSOR); + YYDEBUG(599, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1417 "Zend/zend_language_scanner.l" +#line 1133 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_STATIC); + RETURN_TOKEN(T_FUNCTION); } -#line 6143 "Zend/zend_language_scanner.c" +#line 5837 "Zend/zend_language_scanner.c" +yy600: + YYDEBUG(600, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy623; + if (yych == 't') goto yy623; + goto yy44; yy601: YYDEBUG(601, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'O') goto yy624; + if (yych == 'o') goto yy624; + goto yy44; +yy602: YYDEBUG(602, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1231 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_SWITCH); -} -#line 6156 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'O') goto yy625; + if (yych == 'o') goto yy625; + goto yy44; yy603: YYDEBUG(603, *YYCURSOR); - ++YYCURSOR; - YYFILL(5); - yych = *YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'F') goto yy626; + if (yych == 'f') goto yy626; + goto yy44; +yy604: YYDEBUG(604, *YYCURSOR); - if (yych <= 0x1F) { - if (yych <= '\n') { - if (yych <= 0x08) goto yy166; - goto yy603; - } else { - if (yych == '\r') goto yy603; - goto yy166; - } - } else { - if (yych <= 'F') { - if (yych <= ' ') goto yy603; - if (yych <= 'E') goto yy166; - goto yy654; - } else { - if (yych == 'f') goto yy654; - goto yy166; - } - } + yych = *++YYCURSOR; + if (yych == 'E') goto yy628; + if (yych == 'e') goto yy628; + goto yy44; yy605: YYDEBUG(605, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy655; - if (yych == 's') goto yy655; - goto yy128; + if (yych == 'E') goto yy630; + if (yych == 'e') goto yy630; + goto yy44; yy606: YYDEBUG(606, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '_') goto yy656; - goto yy128; + if (yych == 'D') goto yy632; + if (yych == 'd') goto yy632; + goto yy44; yy607: YYDEBUG(607, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '_') goto yy658; - goto yy128; + if (yych == 'O') goto yy634; + if (yych == 'o') goto yy634; + goto yy44; yy608: YYDEBUG(608, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy659; - if (yych == 't') goto yy659; - goto yy128; + if (yych == 'O') goto yy635; + if (yych == 'o') goto yy635; + goto yy82; yy609: YYDEBUG(609, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '_') goto yy660; - goto yy128; + if (yych == '_') goto yy636; + goto yy44; yy610: YYDEBUG(610, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '_') goto yy661; - goto yy128; -yy611: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(611, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'O') goto yy662; - if (yych == 'o') goto yy662; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1772 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_FILE); +} +#line 5909 "Zend/zend_language_scanner.c" yy612: YYDEBUG(612, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy663; - if (yych == 's') goto yy663; - goto yy128; + if (yych == 'O') goto yy638; + if (yych == 'o') goto yy638; + goto yy44; yy613: YYDEBUG(613, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy664; - if (yych == 't') goto yy664; - goto yy128; + if (yych == 'O') goto yy639; + if (yych == 'o') goto yy639; + goto yy44; yy614: YYDEBUG(614, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(615, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1353 "Zend/zend_language_scanner.l" +#line 1768 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_ARRAY_CAST); + RETURN_TOKEN(T_LINE); } -#line 6240 "Zend/zend_language_scanner.c" +#line 5934 "Zend/zend_language_scanner.c" yy616: YYDEBUG(616, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; + yych = *++YYCURSOR; + if (yych == '_') goto yy640; + goto yy44; +yy617: YYDEBUG(617, *YYCURSOR); - if (yych <= 0x1F) { - if (yych == '\t') goto yy616; - goto yy166; - } else { - if (yych <= ' ') goto yy616; - if (yych == ')') goto yy665; - goto yy166; - } + yych = *++YYCURSOR; + if (yych == 'A') goto yy641; + if (yych == 'a') goto yy641; + goto yy44; yy618: YYDEBUG(618, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy554; - if (yych == 'n') goto yy554; - goto yy166; + if (yych == '_') goto yy642; + goto yy44; yy619: YYDEBUG(619, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy466; - if (yych == 'r') goto yy466; - goto yy166; + if (yych == 'E') goto yy644; + if (yych == 'e') goto yy644; + goto yy44; yy620: YYDEBUG(620, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'H') goto yy646; + if (yych == 'h') goto yy646; + goto yy44; +yy621: YYDEBUG(621, *YYCURSOR); - if (yych <= 0x1F) { - if (yych == '\t') goto yy620; - goto yy166; - } else { - if (yych <= ' ') goto yy620; - if (yych == ')') goto yy667; - goto yy166; + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; } -yy622: YYDEBUG(622, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(623, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1365 "Zend/zend_language_scanner.l" +#line 1235 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_UNSET_CAST); + RETURN_TOKEN(T_ENDSWITCH); } -#line 6290 "Zend/zend_language_scanner.c" +#line 5975 "Zend/zend_language_scanner.c" +yy623: + YYDEBUG(623, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'S') goto yy648; + if (yych == 's') goto yy648; + goto yy44; yy624: YYDEBUG(624, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy669; - if (yych == 't') goto yy669; - goto yy128; + if (yych == 'N') goto yy650; + if (yych == 'n') goto yy650; + goto yy44; yy625: YYDEBUG(625, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy671; - if (yych == 'e') goto yy671; - goto yy128; + if (yych == 'F') goto yy651; + if (yych == 'f') goto yy651; + goto yy44; yy626: YYDEBUG(626, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy673; - if (yych == 'e') goto yy673; - goto yy128; -yy627: - YYDEBUG(627, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+yych] & 16) { + goto yy43; } - YYDEBUG(628, *YYCURSOR); + YYDEBUG(627, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1215 "Zend/zend_language_scanner.l" +#line 1401 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_DECLARE); + RETURN_TOKEN(T_INSTEADOF); } -#line 6321 "Zend/zend_language_scanner.c" -yy629: - YYDEBUG(629, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; +#line 6006 "Zend/zend_language_scanner.c" +yy628: + YYDEBUG(628, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; } - YYDEBUG(630, *YYCURSOR); + YYDEBUG(629, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1243 "Zend/zend_language_scanner.l" +#line 1271 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_DEFAULT); + RETURN_TOKEN(T_INTERFACE); } -#line 6334 "Zend/zend_language_scanner.c" -yy631: - YYDEBUG(631, *YYCURSOR); +#line 6019 "Zend/zend_language_scanner.c" +yy630: + YYDEBUG(630, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy675; - if (yych == 'a') goto yy675; - goto yy128; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(631, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1393 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_NAMESPACE); +} +#line 6032 "Zend/zend_language_scanner.c" yy632: YYDEBUG(632, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy676; - if (yych == 'a') goto yy676; - goto yy128; -yy633: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(633, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'C') goto yy677; - if (yych == 'c') goto yy677; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1437 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_PROTECTED); +} +#line 6045 "Zend/zend_language_scanner.c" yy634: YYDEBUG(634, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy678; - if (yych == 'e') goto yy678; - goto yy128; + if (yych == 'N') goto yy653; + if (yych == 'n') goto yy653; + goto yy44; yy635: YYDEBUG(635, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'M') goto yy654; + if (yych == 'm') goto yy654; + goto yy82; +yy636: YYDEBUG(636, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1279 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_EXTENDS); -} -#line 6371 "Zend/zend_language_scanner.c" -yy637: - YYDEBUG(637, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; } - YYDEBUG(638, *YYCURSOR); + YYDEBUG(637, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1163 "Zend/zend_language_scanner.l" +#line 1752 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_FINALLY); + RETURN_TOKEN(T_CLASS_C); } -#line 6384 "Zend/zend_language_scanner.c" +#line 6070 "Zend/zend_language_scanner.c" +yy638: + YYDEBUG(638, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'N') goto yy655; + if (yych == 'n') goto yy655; + goto yy44; yy639: YYDEBUG(639, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'M') goto yy656; + if (yych == 'm') goto yy656; + goto yy44; +yy640: YYDEBUG(640, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1207 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_FOREACH); -} -#line 6397 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == '_') goto yy657; + goto yy44; yy641: YYDEBUG(641, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy680; - if (yych == 'n') goto yy680; - goto yy128; + if (yych == 'C') goto yy659; + if (yych == 'c') goto yy659; + goto yy44; yy642: YYDEBUG(642, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy682; - if (yych == 'n') goto yy682; - goto yy128; -yy643: - YYDEBUG(643, *YYCURSOR); - ++YYCURSOR; - if ((yych = *YYCURSOR) <= '^') { - if (yych <= '9') { - if (yych >= '0') goto yy127; - } else { - if (yych <= '@') goto yy644; - if (yych <= 'Z') goto yy127; - } - } else { - if (yych <= '`') { - if (yych <= '_') goto yy683; - } else { - if (yych <= 'z') goto yy127; - if (yych >= 0x80) goto yy127; - } + if (yybm[0+yych] & 16) { + goto yy43; } + YYDEBUG(643, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1756 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_TRAIT_C); +} +#line 6106 "Zend/zend_language_scanner.c" yy644: YYDEBUG(644, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(645, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1373 "Zend/zend_language_scanner.l" +#line 1219 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_INCLUDE); + RETURN_TOKEN(T_ENDDECLARE); } -#line 6435 "Zend/zend_language_scanner.c" -yy645: - YYDEBUG(645, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy684; - if (yych == 'e') goto yy684; - goto yy128; +#line 6119 "Zend/zend_language_scanner.c" yy646: YYDEBUG(646, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy685; - if (yych == 'o') goto yy685; - goto yy128; -yy647: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(647, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'C') goto yy686; - if (yych == 'c') goto yy686; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1211 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ENDFOREACH); +} +#line 6132 "Zend/zend_language_scanner.c" yy648: YYDEBUG(648, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy687; - if (yych == 'c') goto yy687; - goto yy128; -yy649: - YYDEBUG(649, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+yych] & 16) { + goto yy43; } - YYDEBUG(650, *YYCURSOR); + YYDEBUG(649, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1429 "Zend/zend_language_scanner.l" +#line 1283 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_PRIVATE); + RETURN_TOKEN(T_IMPLEMENTS); } -#line 6472 "Zend/zend_language_scanner.c" +#line 6145 "Zend/zend_language_scanner.c" +yy650: + YYDEBUG(650, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy660; + if (yych == 'c') goto yy660; + goto yy44; yy651: YYDEBUG(651, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy688; - if (yych == 'e') goto yy688; - goto yy128; -yy652: + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(652, *YYCURSOR); - ++YYCURSOR; - if ((yych = *YYCURSOR) <= '^') { + yyleng = YYCURSOR - SCNG(yy_text); +#line 1223 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_INSTANCEOF); +} +#line 6164 "Zend/zend_language_scanner.c" +yy653: + YYDEBUG(653, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy661; + if (yych == 'c') goto yy661; + goto yy44; +yy654: + YYDEBUG(654, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '^') { if (yych <= '9') { - if (yych >= '0') goto yy127; + if (yych <= '/') goto yy662; + goto yy82; } else { - if (yych <= '@') goto yy653; - if (yych <= 'Z') goto yy127; + if (yych <= '@') goto yy662; + if (yych <= 'Z') goto yy82; + goto yy662; } } else { if (yych <= '`') { - if (yych <= '_') goto yy689; + if (yych <= '_') goto yy82; + goto yy662; } else { - if (yych <= 'z') goto yy127; - if (yych >= 0x80) goto yy127; + if (yych <= 'z') goto yy82; + if (yych <= 0x7F) goto yy662; + goto yy82; } } -yy653: - YYDEBUG(653, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1381 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_REQUIRE); -} -#line 6504 "Zend/zend_language_scanner.c" -yy654: - YYDEBUG(654, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'R') goto yy690; - if (yych == 'r') goto yy690; - goto yy166; yy655: YYDEBUG(655, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '_') goto yy691; - goto yy128; + if (yych == '_') goto yy664; + goto yy44; yy656: YYDEBUG(656, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'P') goto yy665; + if (yych == 'p') goto yy665; + goto yy44; +yy657: YYDEBUG(657, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(658, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1772 "Zend/zend_language_scanner.l" +#line 1764 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_DIR); + RETURN_TOKEN(T_METHOD_C); } -#line 6528 "Zend/zend_language_scanner.c" -yy658: - YYDEBUG(658, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '_') goto yy692; - goto yy128; +#line 6216 "Zend/zend_language_scanner.c" yy659: YYDEBUG(659, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy694; - if (yych == 'i') goto yy694; - goto yy128; + if (yych == 'E') goto yy666; + if (yych == 'e') goto yy666; + goto yy44; yy660: YYDEBUG(660, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy695; - if (yych == 'c') goto yy695; - goto yy128; + if (yych == 'E') goto yy667; + if (yych == 'e') goto yy667; + goto yy44; yy661: YYDEBUG(661, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '_') goto yy696; - goto yy128; + if (yych == 'E') goto yy669; + if (yych == 'e') goto yy669; + goto yy44; yy662: YYDEBUG(662, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'D') goto yy698; - if (yych == 'd') goto yy698; - goto yy128; -yy663: + ++YYCURSOR; YYDEBUG(663, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'P') goto yy699; - if (yych == 'p') goto yy699; - goto yy128; + yyleng = YYCURSOR - SCNG(yy_text); +#line 1145 "Zend/zend_language_scanner.l" + { + yyless(yyleng - 1); + HANDLE_NEWLINES(yytext, yyleng); + RETURN_TOKEN(T_YIELD_FROM); +} +#line 6246 "Zend/zend_language_scanner.c" yy664: YYDEBUG(664, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '_') goto yy700; - goto yy128; + if (yych == '_') goto yy671; + goto yy44; yy665: YYDEBUG(665, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yych == 'I') goto yy673; + if (yych == 'i') goto yy673; + goto yy44; +yy666: YYDEBUG(666, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1349 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_STRING_CAST); -} -#line 6577 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == '_') goto yy674; + goto yy44; yy667: YYDEBUG(667, *YYCURSOR); - ++YYCURSOR; + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } YYDEBUG(668, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1357 "Zend/zend_language_scanner.l" +#line 1381 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_OBJECT_CAST); + RETURN_TOKEN(T_INCLUDE_ONCE); } -#line 6587 "Zend/zend_language_scanner.c" +#line 6275 "Zend/zend_language_scanner.c" yy669: YYDEBUG(669, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; } YYDEBUG(670, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1421 "Zend/zend_language_scanner.l" +#line 1389 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_ABSTRACT); + RETURN_TOKEN(T_REQUIRE_ONCE); } -#line 6600 "Zend/zend_language_scanner.c" +#line 6288 "Zend/zend_language_scanner.c" yy671: YYDEBUG(671, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; } YYDEBUG(672, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1457 "Zend/zend_language_scanner.l" +#line 1760 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_CALLABLE); + RETURN_TOKEN(T_FUNC_C); } -#line 6613 "Zend/zend_language_scanner.c" +#line 6301 "Zend/zend_language_scanner.c" yy673: YYDEBUG(673, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } + yych = *++YYCURSOR; + if (yych == 'L') goto yy675; + if (yych == 'l') goto yy675; + goto yy44; +yy674: YYDEBUG(674, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1251 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_CONTINUE); -} -#line 6626 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == '_') goto yy676; + goto yy44; yy675: YYDEBUG(675, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy701; - if (yych == 'r') goto yy701; - goto yy128; + if (yych == 'E') goto yy678; + if (yych == 'e') goto yy678; + goto yy44; yy676: - YYDEBUG(676, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'C') goto yy702; - if (yych == 'c') goto yy702; - goto yy128; -yy677: - YYDEBUG(677, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'H') goto yy703; - if (yych == 'h') goto yy703; - goto yy128; -yy678: - YYDEBUG(678, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } - YYDEBUG(679, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1191 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_ENDWHILE); -} -#line 6657 "Zend/zend_language_scanner.c" -yy680: - YYDEBUG(680, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } - YYDEBUG(681, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1133 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_FUNCTION); -} -#line 6670 "Zend/zend_language_scanner.c" -yy682: - YYDEBUG(682, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'T') goto yy705; - if (yych == 't') goto yy705; - goto yy128; -yy683: - YYDEBUG(683, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'O') goto yy706; - if (yych == 'o') goto yy706; - goto yy128; -yy684: - YYDEBUG(684, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'O') goto yy707; - if (yych == 'o') goto yy707; - goto yy128; -yy685: - YYDEBUG(685, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'F') goto yy708; - if (yych == 'f') goto yy708; - goto yy128; -yy686: - YYDEBUG(686, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy710; - if (yych == 'e') goto yy710; - goto yy128; -yy687: - YYDEBUG(687, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy712; - if (yych == 'e') goto yy712; - goto yy128; -yy688: - YYDEBUG(688, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'D') goto yy714; - if (yych == 'd') goto yy714; - goto yy128; -yy689: - YYDEBUG(689, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'O') goto yy716; - if (yych == 'o') goto yy716; - goto yy128; -yy690: - YYDEBUG(690, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'O') goto yy717; - if (yych == 'o') goto yy717; - goto yy166; -yy691: - YYDEBUG(691, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '_') goto yy718; - goto yy128; -yy692: - YYDEBUG(692, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } - YYDEBUG(693, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1768 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_FILE); -} -#line 6742 "Zend/zend_language_scanner.c" -yy694: - YYDEBUG(694, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'O') goto yy720; - if (yych == 'o') goto yy720; - goto yy128; -yy695: - YYDEBUG(695, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'O') goto yy721; - if (yych == 'o') goto yy721; - goto yy128; -yy696: - YYDEBUG(696, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } - YYDEBUG(697, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1764 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_LINE); -} -#line 6767 "Zend/zend_language_scanner.c" -yy698: - YYDEBUG(698, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '_') goto yy722; - goto yy128; -yy699: - YYDEBUG(699, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'A') goto yy723; - if (yych == 'a') goto yy723; - goto yy128; -yy700: - YYDEBUG(700, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '_') goto yy724; - goto yy128; -yy701: - YYDEBUG(701, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy726; - if (yych == 'e') goto yy726; - goto yy128; -yy702: - YYDEBUG(702, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'H') goto yy728; - if (yych == 'h') goto yy728; - goto yy128; -yy703: - YYDEBUG(703, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } - YYDEBUG(704, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1235 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_ENDSWITCH); -} -#line 6808 "Zend/zend_language_scanner.c" -yy705: - YYDEBUG(705, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'S') goto yy730; - if (yych == 's') goto yy730; - goto yy128; -yy706: - YYDEBUG(706, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'N') goto yy732; - if (yych == 'n') goto yy732; - goto yy128; -yy707: - YYDEBUG(707, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'F') goto yy733; - if (yych == 'f') goto yy733; - goto yy128; -yy708: - YYDEBUG(708, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } - YYDEBUG(709, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1397 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_INSTEADOF); -} -#line 6839 "Zend/zend_language_scanner.c" -yy710: - YYDEBUG(710, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } - YYDEBUG(711, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1271 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_INTERFACE); -} -#line 6852 "Zend/zend_language_scanner.c" -yy712: - YYDEBUG(712, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } - YYDEBUG(713, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1389 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_NAMESPACE); -} -#line 6865 "Zend/zend_language_scanner.c" -yy714: - YYDEBUG(714, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } - YYDEBUG(715, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1433 "Zend/zend_language_scanner.l" - { - RETURN_TOKEN(T_PROTECTED); -} -#line 6878 "Zend/zend_language_scanner.c" -yy716: - YYDEBUG(716, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'N') goto yy735; - if (yych == 'n') goto yy735; - goto yy128; -yy717: - YYDEBUG(717, *YYCURSOR); + YYDEBUG(676, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'M') goto yy736; - if (yych == 'm') goto yy736; - goto yy166; -yy718: - YYDEBUG(718, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+yych] & 16) { + goto yy43; } - YYDEBUG(719, *YYCURSOR); + YYDEBUG(677, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1748 "Zend/zend_language_scanner.l" +#line 1780 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_CLASS_C); + RETURN_TOKEN(T_NS_C); } -#line 6903 "Zend/zend_language_scanner.c" -yy720: - YYDEBUG(720, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'N') goto yy737; - if (yych == 'n') goto yy737; - goto yy128; -yy721: - YYDEBUG(721, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'M') goto yy738; - if (yych == 'm') goto yy738; - goto yy128; -yy722: - YYDEBUG(722, *YYCURSOR); +#line 6331 "Zend/zend_language_scanner.c" +yy678: + YYDEBUG(678, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '_') goto yy739; - goto yy128; -yy723: - YYDEBUG(723, *YYCURSOR); + if (yych == 'R') goto yy679; + if (yych != 'r') goto yy44; +yy679: + YYDEBUG(679, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy741; - if (yych == 'c') goto yy741; - goto yy128; -yy724: - YYDEBUG(724, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yybm[0+yych] & 16) { + goto yy43; } - YYDEBUG(725, *YYCURSOR); + YYDEBUG(680, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1752 "Zend/zend_language_scanner.l" +#line 1417 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_TRAIT_C); + RETURN_TOKEN(T_HALT_COMPILER); } -#line 6939 "Zend/zend_language_scanner.c" -yy726: - YYDEBUG(726, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; +#line 6349 "Zend/zend_language_scanner.c" + } +/* *********************************** */ +yyc_ST_LOOKING_FOR_PROPERTY: + { + static const unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 64, 64, 0, 0, 64, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 64, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 0, 0, 0, 0, 0, 0, + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 0, 0, 0, 0, 128, + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 0, 0, 0, 0, 0, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + }; + YYDEBUG(681, *YYCURSOR); + YYFILL(2); + yych = *YYCURSOR; + if (yybm[0+yych] & 64) { + goto yy685; } - YYDEBUG(727, *YYCURSOR); + if (yych <= '^') { + if (yych <= '-') { + if (yych >= '-') goto yy688; + } else { + if (yych <= '@') goto yy683; + if (yych <= 'Z') goto yy689; + } + } else { + if (yych <= '`') { + if (yych <= '_') goto yy689; + } else { + if (yych <= 'z') goto yy689; + if (yych >= 0x80) goto yy689; + } + } +yy683: + YYDEBUG(683, *YYCURSOR); + ++YYCURSOR; +yy684: + YYDEBUG(684, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1219 "Zend/zend_language_scanner.l" +#line 1307 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_ENDDECLARE); + yyless(0); + yy_pop_state(); + goto restart; } -#line 6952 "Zend/zend_language_scanner.c" -yy728: - YYDEBUG(728, *YYCURSOR); +#line 6421 "Zend/zend_language_scanner.c" +yy685: + YYDEBUG(685, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(686, *YYCURSOR); + if (yybm[0+yych] & 64) { + goto yy685; } - YYDEBUG(729, *YYCURSOR); + YYDEBUG(687, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1211 "Zend/zend_language_scanner.l" +#line 1292 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_ENDFOREACH); + HANDLE_NEWLINES(yytext, yyleng); + RETURN_TOKEN(T_WHITESPACE); } -#line 6965 "Zend/zend_language_scanner.c" -yy730: - YYDEBUG(730, *YYCURSOR); +#line 6438 "Zend/zend_language_scanner.c" +yy688: + YYDEBUG(688, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '>') goto yy692; + goto yy684; +yy689: + YYDEBUG(689, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(690, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy689; } - YYDEBUG(731, *YYCURSOR); + YYDEBUG(691, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1283 "Zend/zend_language_scanner.l" +#line 1301 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_IMPLEMENTS); + yy_pop_state(); + zend_copy_value(zendlval, yytext, yyleng); + RETURN_TOKEN(T_STRING); } -#line 6978 "Zend/zend_language_scanner.c" -yy732: - YYDEBUG(732, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'C') goto yy742; - if (yych == 'c') goto yy742; - goto yy128; -yy733: - YYDEBUG(733, *YYCURSOR); +#line 6461 "Zend/zend_language_scanner.c" +yy692: + YYDEBUG(692, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } - YYDEBUG(734, *YYCURSOR); + YYDEBUG(693, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1223 "Zend/zend_language_scanner.l" +#line 1297 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_INSTANCEOF); + RETURN_TOKEN(T_OBJECT_OPERATOR); } -#line 6997 "Zend/zend_language_scanner.c" -yy735: - YYDEBUG(735, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'C') goto yy743; - if (yych == 'c') goto yy743; - goto yy128; -yy736: - YYDEBUG(736, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= '^') { - if (yych <= '9') { - if (yych <= '/') goto yy744; - goto yy166; - } else { - if (yych <= '@') goto yy744; - if (yych <= 'Z') goto yy166; - goto yy744; - } +#line 6471 "Zend/zend_language_scanner.c" + } +/* *********************************** */ +yyc_ST_BACKQUOTE: + { + static const unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 0, 0, 0, 0, 0, 0, + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 0, 0, 0, 0, 128, + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 0, 0, 0, 0, 0, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + }; + YYDEBUG(694, *YYCURSOR); + YYFILL(2); + yych = *YYCURSOR; + if (yych <= '_') { + if (yych == '$') goto yy698; } else { - if (yych <= '`') { - if (yych <= '_') goto yy166; - goto yy744; - } else { - if (yych <= 'z') goto yy166; - if (yych <= 0x7F) goto yy744; - goto yy166; - } + if (yych <= '`') goto yy699; + if (yych == '{') goto yy701; } -yy737: - YYDEBUG(737, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '_') goto yy746; - goto yy128; -yy738: - YYDEBUG(738, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'P') goto yy747; - if (yych == 'p') goto yy747; - goto yy128; -yy739: - YYDEBUG(739, *YYCURSOR); + YYDEBUG(696, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } - YYDEBUG(740, *YYCURSOR); +yy697: + YYDEBUG(697, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1760 "Zend/zend_language_scanner.l" +#line 2220 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_METHOD_C); + if (YYCURSOR > YYLIMIT) { + RETURN_TOKEN(END); + } + if (yytext[0] == '\\' && YYCURSOR < YYLIMIT) { + YYCURSOR++; + } + + while (YYCURSOR < YYLIMIT) { + switch (*YYCURSOR++) { + case '`': + break; + case '$': + if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') { + break; + } + continue; + case '{': + if (*YYCURSOR == '$') { + break; + } + continue; + case '\\': + if (YYCURSOR < YYLIMIT) { + YYCURSOR++; + } + /* fall through */ + default: + continue; + } + + YYCURSOR--; + break; + } + + yyleng = YYCURSOR - SCNG(yy_text); + + zend_scan_escape_string(zendlval, yytext, yyleng, '`'); + RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE); } -#line 7049 "Zend/zend_language_scanner.c" -yy741: - YYDEBUG(741, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy748; - if (yych == 'e') goto yy748; - goto yy128; -yy742: - YYDEBUG(742, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy749; - if (yych == 'e') goto yy749; - goto yy128; -yy743: - YYDEBUG(743, *YYCURSOR); +#line 6565 "Zend/zend_language_scanner.c" +yy698: + YYDEBUG(698, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy751; - if (yych == 'e') goto yy751; - goto yy128; -yy744: - YYDEBUG(744, *YYCURSOR); + if (yych <= '_') { + if (yych <= '@') goto yy697; + if (yych <= 'Z') goto yy702; + if (yych <= '^') goto yy697; + goto yy702; + } else { + if (yych <= 'z') { + if (yych <= '`') goto yy697; + goto yy702; + } else { + if (yych <= '{') goto yy705; + if (yych <= 0x7F) goto yy697; + goto yy702; + } + } +yy699: + YYDEBUG(699, *YYCURSOR); ++YYCURSOR; - YYDEBUG(745, *YYCURSOR); + YYDEBUG(700, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1145 "Zend/zend_language_scanner.l" +#line 2164 "Zend/zend_language_scanner.l" { - yyless(yyleng - 1); - HANDLE_NEWLINES(yytext, yyleng); - RETURN_TOKEN(T_YIELD_FROM); + BEGIN(ST_IN_SCRIPTING); + RETURN_TOKEN('`'); } -#line 7079 "Zend/zend_language_scanner.c" -yy746: - YYDEBUG(746, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '_') goto yy753; - goto yy128; -yy747: - YYDEBUG(747, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'I') goto yy755; - if (yych == 'i') goto yy755; - goto yy128; -yy748: - YYDEBUG(748, *YYCURSOR); +#line 6594 "Zend/zend_language_scanner.c" +yy701: + YYDEBUG(701, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '_') goto yy756; - goto yy128; -yy749: - YYDEBUG(749, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yych == '$') goto yy707; + goto yy697; +yy702: + YYDEBUG(702, *YYCURSOR); + YYMARKER = ++YYCURSOR; + YYFILL(3); + yych = *YYCURSOR; + YYDEBUG(703, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy702; } - YYDEBUG(750, *YYCURSOR); + if (yych == '-') goto yy709; + if (yych <= '@') goto yy704; + if (yych <= '[') goto yy711; +yy704: + YYDEBUG(704, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1377 "Zend/zend_language_scanner.l" +#line 1872 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_INCLUDE_ONCE); + zend_copy_value(zendlval, (yytext+1), (yyleng-1)); + RETURN_TOKEN(T_VARIABLE); } -#line 7108 "Zend/zend_language_scanner.c" -yy751: - YYDEBUG(751, *YYCURSOR); +#line 6620 "Zend/zend_language_scanner.c" +yy705: + YYDEBUG(705, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } - YYDEBUG(752, *YYCURSOR); + YYDEBUG(706, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1385 "Zend/zend_language_scanner.l" +#line 1592 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_REQUIRE_ONCE); + yy_push_state(ST_LOOKING_FOR_VARNAME); + RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES); } -#line 7121 "Zend/zend_language_scanner.c" -yy753: - YYDEBUG(753, *YYCURSOR); +#line 6631 "Zend/zend_language_scanner.c" +yy707: + YYDEBUG(707, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } - YYDEBUG(754, *YYCURSOR); + YYDEBUG(708, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1756 "Zend/zend_language_scanner.l" +#line 2151 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_FUNC_C); + Z_LVAL_P(zendlval) = (zend_long) '{'; + yy_push_state(ST_IN_SCRIPTING); + yyless(1); + RETURN_TOKEN(T_CURLY_OPEN); } -#line 7134 "Zend/zend_language_scanner.c" -yy755: - YYDEBUG(755, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'L') goto yy757; - if (yych == 'l') goto yy757; - goto yy128; -yy756: - YYDEBUG(756, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '_') goto yy758; - goto yy128; -yy757: - YYDEBUG(757, *YYCURSOR); +#line 6644 "Zend/zend_language_scanner.c" +yy709: + YYDEBUG(709, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy760; - if (yych == 'e') goto yy760; - goto yy128; -yy758: - YYDEBUG(758, *YYCURSOR); + if (yych == '>') goto yy713; +yy710: + YYDEBUG(710, *YYCURSOR); + YYCURSOR = YYMARKER; + goto yy704; +yy711: + YYDEBUG(711, *YYCURSOR); ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; - } - YYDEBUG(759, *YYCURSOR); + YYDEBUG(712, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1776 "Zend/zend_language_scanner.l" +#line 1865 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_NS_C); + yyless(yyleng - 1); + yy_push_state(ST_VAR_OFFSET); + zend_copy_value(zendlval, (yytext+1), (yyleng-1)); + RETURN_TOKEN(T_VARIABLE); } -#line 7164 "Zend/zend_language_scanner.c" -yy760: - YYDEBUG(760, *YYCURSOR); +#line 6665 "Zend/zend_language_scanner.c" +yy713: + YYDEBUG(713, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy761; - if (yych != 'r') goto yy128; -yy761: - YYDEBUG(761, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 16) { - goto yy127; + if (yych <= '_') { + if (yych <= '@') goto yy710; + if (yych <= 'Z') goto yy714; + if (yych <= '^') goto yy710; + } else { + if (yych <= '`') goto yy710; + if (yych <= 'z') goto yy714; + if (yych <= 0x7F) goto yy710; } - YYDEBUG(762, *YYCURSOR); +yy714: + YYDEBUG(714, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(715, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1413 "Zend/zend_language_scanner.l" +#line 1856 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_HALT_COMPILER); + yyless(yyleng - 3); + yy_push_state(ST_LOOKING_FOR_PROPERTY); + zend_copy_value(zendlval, (yytext+1), (yyleng-1)); + RETURN_TOKEN(T_VARIABLE); } -#line 7182 "Zend/zend_language_scanner.c" +#line 6690 "Zend/zend_language_scanner.c" } /* *********************************** */ -yyc_ST_LOOKING_FOR_PROPERTY: +yyc_ST_DOUBLE_QUOTES: { static const unsigned char yybm[] = { 0, 0, 0, 0, 0, 0, 0, 0, - 0, 64, 64, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 64, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0, @@ -7217,93 +6725,198 @@ int start_line = CG(zend_lineno); 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, }; - YYDEBUG(763, *YYCURSOR); + YYDEBUG(716, *YYCURSOR); YYFILL(2); yych = *YYCURSOR; - if (yybm[0+yych] & 64) { - goto yy767; + if (yych <= '#') { + if (yych == '"') goto yy720; + } else { + if (yych <= '$') goto yy722; + if (yych == '{') goto yy723; } - if (yych <= '^') { - if (yych <= '-') { - if (yych >= '-') goto yy770; - } else { - if (yych <= '@') goto yy765; - if (yych <= 'Z') goto yy771; - } + YYDEBUG(718, *YYCURSOR); + ++YYCURSOR; +yy719: + YYDEBUG(719, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2170 "Zend/zend_language_scanner.l" + { + if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) { + YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1; + SET_DOUBLE_QUOTES_SCANNED_LENGTH(0); + + goto double_quotes_scan_done; + } + + if (YYCURSOR > YYLIMIT) { + RETURN_TOKEN(END); + } + if (yytext[0] == '\\' && YYCURSOR < YYLIMIT) { + YYCURSOR++; + } + + while (YYCURSOR < YYLIMIT) { + switch (*YYCURSOR++) { + case '"': + break; + case '$': + if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') { + break; + } + continue; + case '{': + if (*YYCURSOR == '$') { + break; + } + continue; + case '\\': + if (YYCURSOR < YYLIMIT) { + YYCURSOR++; + } + /* fall through */ + default: + continue; + } + + YYCURSOR--; + break; + } + +double_quotes_scan_done: + yyleng = YYCURSOR - SCNG(yy_text); + + zend_scan_escape_string(zendlval, yytext, yyleng, '"'); + RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE); +} +#line 6792 "Zend/zend_language_scanner.c" +yy720: + YYDEBUG(720, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(721, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2159 "Zend/zend_language_scanner.l" + { + BEGIN(ST_IN_SCRIPTING); + RETURN_TOKEN('"'); +} +#line 6803 "Zend/zend_language_scanner.c" +yy722: + YYDEBUG(722, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '_') { + if (yych <= '@') goto yy719; + if (yych <= 'Z') goto yy724; + if (yych <= '^') goto yy719; + goto yy724; } else { - if (yych <= '`') { - if (yych <= '_') goto yy771; + if (yych <= 'z') { + if (yych <= '`') goto yy719; + goto yy724; } else { - if (yych <= 'z') goto yy771; - if (yych >= 0x80) goto yy771; + if (yych <= '{') goto yy727; + if (yych <= 0x7F) goto yy719; + goto yy724; } } -yy765: - YYDEBUG(765, *YYCURSOR); +yy723: + YYDEBUG(723, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '$') goto yy729; + goto yy719; +yy724: + YYDEBUG(724, *YYCURSOR); + YYMARKER = ++YYCURSOR; + YYFILL(3); + yych = *YYCURSOR; + YYDEBUG(725, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy724; + } + if (yych == '-') goto yy731; + if (yych <= '@') goto yy726; + if (yych <= '[') goto yy733; +yy726: + YYDEBUG(726, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1872 "Zend/zend_language_scanner.l" + { + zend_copy_value(zendlval, (yytext+1), (yyleng-1)); + RETURN_TOKEN(T_VARIABLE); +} +#line 6847 "Zend/zend_language_scanner.c" +yy727: + YYDEBUG(727, *YYCURSOR); ++YYCURSOR; -yy766: - YYDEBUG(766, *YYCURSOR); + YYDEBUG(728, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1307 "Zend/zend_language_scanner.l" +#line 1592 "Zend/zend_language_scanner.l" { - yyless(0); - yy_pop_state(); - goto restart; + yy_push_state(ST_LOOKING_FOR_VARNAME); + RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES); } -#line 7254 "Zend/zend_language_scanner.c" -yy767: - YYDEBUG(767, *YYCURSOR); +#line 6858 "Zend/zend_language_scanner.c" +yy729: + YYDEBUG(729, *YYCURSOR); ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(768, *YYCURSOR); - if (yybm[0+yych] & 64) { - goto yy767; - } - YYDEBUG(769, *YYCURSOR); + YYDEBUG(730, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1292 "Zend/zend_language_scanner.l" +#line 2151 "Zend/zend_language_scanner.l" { - HANDLE_NEWLINES(yytext, yyleng); - RETURN_TOKEN(T_WHITESPACE); + Z_LVAL_P(zendlval) = (zend_long) '{'; + yy_push_state(ST_IN_SCRIPTING); + yyless(1); + RETURN_TOKEN(T_CURLY_OPEN); } -#line 7271 "Zend/zend_language_scanner.c" -yy770: - YYDEBUG(770, *YYCURSOR); +#line 6871 "Zend/zend_language_scanner.c" +yy731: + YYDEBUG(731, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '>') goto yy774; - goto yy766; -yy771: - YYDEBUG(771, *YYCURSOR); + if (yych == '>') goto yy735; +yy732: + YYDEBUG(732, *YYCURSOR); + YYCURSOR = YYMARKER; + goto yy726; +yy733: + YYDEBUG(733, *YYCURSOR); ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(772, *YYCURSOR); - if (yybm[0+yych] & 128) { - goto yy771; - } - YYDEBUG(773, *YYCURSOR); + YYDEBUG(734, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1301 "Zend/zend_language_scanner.l" +#line 1865 "Zend/zend_language_scanner.l" { - yy_pop_state(); - zend_copy_value(zendlval, yytext, yyleng); - RETURN_TOKEN(T_STRING); + yyless(yyleng - 1); + yy_push_state(ST_VAR_OFFSET); + zend_copy_value(zendlval, (yytext+1), (yyleng-1)); + RETURN_TOKEN(T_VARIABLE); } -#line 7294 "Zend/zend_language_scanner.c" -yy774: - YYDEBUG(774, *YYCURSOR); +#line 6892 "Zend/zend_language_scanner.c" +yy735: + YYDEBUG(735, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '_') { + if (yych <= '@') goto yy732; + if (yych <= 'Z') goto yy736; + if (yych <= '^') goto yy732; + } else { + if (yych <= '`') goto yy732; + if (yych <= 'z') goto yy736; + if (yych <= 0x7F) goto yy732; + } +yy736: + YYDEBUG(736, *YYCURSOR); ++YYCURSOR; - YYDEBUG(775, *YYCURSOR); + YYDEBUG(737, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1297 "Zend/zend_language_scanner.l" +#line 1856 "Zend/zend_language_scanner.l" { - RETURN_TOKEN(T_OBJECT_OPERATOR); + yyless(yyleng - 3); + yy_push_state(ST_LOOKING_FOR_PROPERTY); + zend_copy_value(zendlval, (yytext+1), (yyleng-1)); + RETURN_TOKEN(T_VARIABLE); } -#line 7304 "Zend/zend_language_scanner.c" +#line 6917 "Zend/zend_language_scanner.c" } /* *********************************** */ -yyc_ST_LOOKING_FOR_VARNAME: +yyc_ST_HEREDOC: { static const unsigned char yybm[] = { 0, 0, 0, 0, 0, 0, 0, 0, @@ -7339,99 +6952,18 @@ int start_line = CG(zend_lineno); 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, }; - YYDEBUG(776, *YYCURSOR); + YYDEBUG(738, *YYCURSOR); YYFILL(2); yych = *YYCURSOR; - if (yych <= '_') { - if (yych <= '@') goto yy778; - if (yych <= 'Z') goto yy780; - if (yych >= '_') goto yy780; - } else { - if (yych <= '`') goto yy778; - if (yych <= 'z') goto yy780; - if (yych >= 0x80) goto yy780; - } -yy778: - YYDEBUG(778, *YYCURSOR); - ++YYCURSOR; -yy779: - YYDEBUG(779, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1612 "Zend/zend_language_scanner.l" - { - yyless(0); - yy_pop_state(); - yy_push_state(ST_IN_SCRIPTING); - goto restart; -} -#line 7368 "Zend/zend_language_scanner.c" -yy780: - YYDEBUG(780, *YYCURSOR); - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '_') { - if (yych <= '@') { - if (yych <= '/') goto yy779; - if (yych <= '9') goto yy782; - goto yy779; - } else { - if (yych <= '[') goto yy782; - if (yych <= '^') goto yy779; - goto yy782; - } - } else { - if (yych <= '|') { - if (yych <= '`') goto yy779; - if (yych <= 'z') goto yy782; - goto yy779; - } else { - if (yych <= '}') goto yy782; - if (yych <= 0x7F) goto yy779; - goto yy782; - } - } -yy781: - YYDEBUG(781, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; -yy782: - YYDEBUG(782, *YYCURSOR); - if (yybm[0+yych] & 128) { - goto yy781; - } - if (yych <= '@') goto yy783; - if (yych <= '[') goto yy784; - if (yych == '}') goto yy784; -yy783: - YYDEBUG(783, *YYCURSOR); - YYCURSOR = YYMARKER; - goto yy779; -yy784: - YYDEBUG(784, *YYCURSOR); + if (yych == '$') goto yy742; + if (yych == '{') goto yy743; + YYDEBUG(740, *YYCURSOR); ++YYCURSOR; - YYDEBUG(785, *YYCURSOR); +yy741: + YYDEBUG(741, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1603 "Zend/zend_language_scanner.l" +#line 2262 "Zend/zend_language_scanner.l" { - yyless(yyleng - 1); - zend_copy_value(zendlval, yytext, yyleng); - yy_pop_state(); - yy_push_state(ST_IN_SCRIPTING); - RETURN_TOKEN(T_STRING_VARNAME); -} -#line 7423 "Zend/zend_language_scanner.c" - } -/* *********************************** */ -yyc_ST_NOWDOC: - YYDEBUG(786, *YYCURSOR); - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(788, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(789, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 2332 "Zend/zend_language_scanner.l" - { int newline = 0; zend_heredoc_label *heredoc_label = zend_ptr_stack_top(&SCNG(heredoc_label_stack)); @@ -7470,23 +7002,274 @@ int start_line = CG(zend_lineno); CG(increment_lineno) = 1; /* For newline before label */ BEGIN(ST_END_HEREDOC); - goto nowdoc_scan_done; + goto heredoc_scan_done; } } + continue; + case '$': + if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') { + break; + } + continue; + case '{': + if (*YYCURSOR == '$') { + break; + } + continue; + case '\\': + if (YYCURSOR < YYLIMIT && *YYCURSOR != '\n' && *YYCURSOR != '\r') { + YYCURSOR++; + } /* fall through */ default: continue; } - } - -nowdoc_scan_done: - yyleng = YYCURSOR - SCNG(yy_text); - - zend_copy_value(zendlval, yytext, yyleng - newline); - HANDLE_NEWLINES(yytext, yyleng - newline); - RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE); + + YYCURSOR--; + break; + } + +heredoc_scan_done: + yyleng = YYCURSOR - SCNG(yy_text); + + zend_scan_escape_string(zendlval, yytext, yyleng - newline, 0); + RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE); +} +#line 7039 "Zend/zend_language_scanner.c" +yy742: + YYDEBUG(742, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '_') { + if (yych <= '@') goto yy741; + if (yych <= 'Z') goto yy744; + if (yych <= '^') goto yy741; + goto yy744; + } else { + if (yych <= 'z') { + if (yych <= '`') goto yy741; + goto yy744; + } else { + if (yych <= '{') goto yy747; + if (yych <= 0x7F) goto yy741; + goto yy744; + } + } +yy743: + YYDEBUG(743, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '$') goto yy749; + goto yy741; +yy744: + YYDEBUG(744, *YYCURSOR); + YYMARKER = ++YYCURSOR; + YYFILL(3); + yych = *YYCURSOR; + YYDEBUG(745, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy744; + } + if (yych == '-') goto yy751; + if (yych <= '@') goto yy746; + if (yych <= '[') goto yy753; +yy746: + YYDEBUG(746, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1872 "Zend/zend_language_scanner.l" + { + zend_copy_value(zendlval, (yytext+1), (yyleng-1)); + RETURN_TOKEN(T_VARIABLE); +} +#line 7083 "Zend/zend_language_scanner.c" +yy747: + YYDEBUG(747, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(748, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1592 "Zend/zend_language_scanner.l" + { + yy_push_state(ST_LOOKING_FOR_VARNAME); + RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES); +} +#line 7094 "Zend/zend_language_scanner.c" +yy749: + YYDEBUG(749, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(750, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2151 "Zend/zend_language_scanner.l" + { + Z_LVAL_P(zendlval) = (zend_long) '{'; + yy_push_state(ST_IN_SCRIPTING); + yyless(1); + RETURN_TOKEN(T_CURLY_OPEN); +} +#line 7107 "Zend/zend_language_scanner.c" +yy751: + YYDEBUG(751, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '>') goto yy755; +yy752: + YYDEBUG(752, *YYCURSOR); + YYCURSOR = YYMARKER; + goto yy746; +yy753: + YYDEBUG(753, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(754, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1865 "Zend/zend_language_scanner.l" + { + yyless(yyleng - 1); + yy_push_state(ST_VAR_OFFSET); + zend_copy_value(zendlval, (yytext+1), (yyleng-1)); + RETURN_TOKEN(T_VARIABLE); +} +#line 7128 "Zend/zend_language_scanner.c" +yy755: + YYDEBUG(755, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '_') { + if (yych <= '@') goto yy752; + if (yych <= 'Z') goto yy756; + if (yych <= '^') goto yy752; + } else { + if (yych <= '`') goto yy752; + if (yych <= 'z') goto yy756; + if (yych <= 0x7F) goto yy752; + } +yy756: + YYDEBUG(756, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(757, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1856 "Zend/zend_language_scanner.l" + { + yyless(yyleng - 3); + yy_push_state(ST_LOOKING_FOR_PROPERTY); + zend_copy_value(zendlval, (yytext+1), (yyleng-1)); + RETURN_TOKEN(T_VARIABLE); +} +#line 7153 "Zend/zend_language_scanner.c" + } +/* *********************************** */ +yyc_ST_LOOKING_FOR_VARNAME: + { + static const unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 0, 0, 0, 0, 0, 0, + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 0, 0, 0, 0, 128, + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 0, 0, 0, 0, 0, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + }; + YYDEBUG(758, *YYCURSOR); + YYFILL(2); + yych = *YYCURSOR; + if (yych <= '_') { + if (yych <= '@') goto yy760; + if (yych <= 'Z') goto yy762; + if (yych >= '_') goto yy762; + } else { + if (yych <= '`') goto yy760; + if (yych <= 'z') goto yy762; + if (yych >= 0x80) goto yy762; + } +yy760: + YYDEBUG(760, *YYCURSOR); + ++YYCURSOR; +yy761: + YYDEBUG(761, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1616 "Zend/zend_language_scanner.l" + { + yyless(0); + yy_pop_state(); + yy_push_state(ST_IN_SCRIPTING); + goto restart; +} +#line 7217 "Zend/zend_language_scanner.c" +yy762: + YYDEBUG(762, *YYCURSOR); + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '_') { + if (yych <= '@') { + if (yych <= '/') goto yy761; + if (yych <= '9') goto yy764; + goto yy761; + } else { + if (yych <= '[') goto yy764; + if (yych <= '^') goto yy761; + goto yy764; + } + } else { + if (yych <= '|') { + if (yych <= '`') goto yy761; + if (yych <= 'z') goto yy764; + goto yy761; + } else { + if (yych <= '}') goto yy764; + if (yych <= 0x7F) goto yy761; + goto yy764; + } + } +yy763: + YYDEBUG(763, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; +yy764: + YYDEBUG(764, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy763; + } + if (yych <= '@') goto yy765; + if (yych <= '[') goto yy766; + if (yych == '}') goto yy766; +yy765: + YYDEBUG(765, *YYCURSOR); + YYCURSOR = YYMARKER; + goto yy761; +yy766: + YYDEBUG(766, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(767, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1607 "Zend/zend_language_scanner.l" + { + yyless(yyleng - 1); + zend_copy_value(zendlval, yytext, yyleng); + yy_pop_state(); + yy_push_state(ST_IN_SCRIPTING); + RETURN_TOKEN(T_STRING_VARNAME); } -#line 7490 "Zend/zend_language_scanner.c" +#line 7272 "Zend/zend_language_scanner.c" + } /* *********************************** */ yyc_ST_VAR_OFFSET: { @@ -7524,57 +7307,57 @@ int start_line = CG(zend_lineno); 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, }; - YYDEBUG(790, *YYCURSOR); + YYDEBUG(768, *YYCURSOR); YYFILL(3); yych = *YYCURSOR; if (yych <= '0') { if (yych <= ' ') { if (yych <= '\f') { - if (yych <= 0x08) goto yy792; - if (yych <= '\n') goto yy794; + if (yych <= 0x08) goto yy770; + if (yych <= '\n') goto yy772; } else { - if (yych <= '\r') goto yy794; - if (yych >= ' ') goto yy794; + if (yych <= '\r') goto yy772; + if (yych >= ' ') goto yy772; } } else { if (yych <= '$') { - if (yych <= '"') goto yy796; - if (yych <= '#') goto yy794; - goto yy798; + if (yych <= '"') goto yy774; + if (yych <= '#') goto yy772; + goto yy776; } else { - if (yych == '\'') goto yy794; - if (yych <= '/') goto yy796; - goto yy799; + if (yych == '\'') goto yy772; + if (yych <= '/') goto yy774; + goto yy777; } } } else { if (yych <= ']') { if (yych <= 'Z') { - if (yych <= '9') goto yy801; - if (yych <= '@') goto yy796; - goto yy803; + if (yych <= '9') goto yy779; + if (yych <= '@') goto yy774; + goto yy781; } else { - if (yych <= '[') goto yy796; - if (yych <= '\\') goto yy794; - goto yy806; + if (yych <= '[') goto yy774; + if (yych <= '\\') goto yy772; + goto yy784; } } else { if (yych <= '`') { - if (yych == '_') goto yy803; - goto yy796; + if (yych == '_') goto yy781; + goto yy774; } else { - if (yych <= 'z') goto yy803; - if (yych <= '~') goto yy796; - if (yych >= 0x80) goto yy803; + if (yych <= 'z') goto yy781; + if (yych <= '~') goto yy774; + if (yych >= 0x80) goto yy781; } } } -yy792: - YYDEBUG(792, *YYCURSOR); +yy770: + YYDEBUG(770, *YYCURSOR); ++YYCURSOR; - YYDEBUG(793, *YYCURSOR); + YYDEBUG(771, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2389 "Zend/zend_language_scanner.l" +#line 2393 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { RETURN_TOKEN(END); @@ -7583,13 +7366,13 @@ int start_line = CG(zend_lineno); zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); goto restart; } -#line 7587 "Zend/zend_language_scanner.c" -yy794: - YYDEBUG(794, *YYCURSOR); +#line 7370 "Zend/zend_language_scanner.c" +yy772: + YYDEBUG(772, *YYCURSOR); ++YYCURSOR; - YYDEBUG(795, *YYCURSOR); + YYDEBUG(773, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1883 "Zend/zend_language_scanner.l" +#line 1887 "Zend/zend_language_scanner.l" { /* Invalid rule to return a more explicit parse error with proper line number */ yyless(0); @@ -7597,54 +7380,54 @@ int start_line = CG(zend_lineno); ZVAL_NULL(zendlval); RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE); } -#line 7601 "Zend/zend_language_scanner.c" -yy796: - YYDEBUG(796, *YYCURSOR); +#line 7384 "Zend/zend_language_scanner.c" +yy774: + YYDEBUG(774, *YYCURSOR); ++YYCURSOR; -yy797: - YYDEBUG(797, *YYCURSOR); +yy775: + YYDEBUG(775, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1878 "Zend/zend_language_scanner.l" +#line 1882 "Zend/zend_language_scanner.l" { /* Only '[' or '-' can be valid, but returning other tokens will allow a more explicit parse error */ RETURN_TOKEN(yytext[0]); } -#line 7613 "Zend/zend_language_scanner.c" -yy798: - YYDEBUG(798, *YYCURSOR); +#line 7396 "Zend/zend_language_scanner.c" +yy776: + YYDEBUG(776, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '_') { - if (yych <= '@') goto yy797; - if (yych <= 'Z') goto yy808; - if (yych <= '^') goto yy797; - goto yy808; + if (yych <= '@') goto yy775; + if (yych <= 'Z') goto yy786; + if (yych <= '^') goto yy775; + goto yy786; } else { - if (yych <= '`') goto yy797; - if (yych <= 'z') goto yy808; - if (yych <= 0x7F) goto yy797; - goto yy808; + if (yych <= '`') goto yy775; + if (yych <= 'z') goto yy786; + if (yych <= 0x7F) goto yy775; + goto yy786; } -yy799: - YYDEBUG(799, *YYCURSOR); +yy777: + YYDEBUG(777, *YYCURSOR); yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'W') { if (yych <= '9') { - if (yych >= '0') goto yy811; + if (yych >= '0') goto yy789; } else { - if (yych == 'B') goto yy814; + if (yych == 'B') goto yy792; } } else { if (yych <= 'b') { - if (yych <= 'X') goto yy816; - if (yych >= 'b') goto yy814; + if (yych <= 'X') goto yy794; + if (yych >= 'b') goto yy792; } else { - if (yych == 'x') goto yy816; + if (yych == 'x') goto yy794; } } -yy800: - YYDEBUG(800, *YYCURSOR); +yy778: + YYDEBUG(778, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1718 "Zend/zend_language_scanner.l" +#line 1722 "Zend/zend_language_scanner.l" { /* Offset could be treated as a long */ if (yyleng < MAX_LENGTH_OF_LONG - 1 || (yyleng == MAX_LENGTH_OF_LONG - 1 && strcmp(yytext, long_min_digits) < 0)) { char *end; @@ -7660,131 +7443,355 @@ int start_line = CG(zend_lineno); } RETURN_TOKEN(T_NUM_STRING); } -#line 7664 "Zend/zend_language_scanner.c" -yy801: - YYDEBUG(801, *YYCURSOR); +#line 7447 "Zend/zend_language_scanner.c" +yy779: + YYDEBUG(779, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(802, *YYCURSOR); + YYDEBUG(780, *YYCURSOR); if (yybm[0+yych] & 16) { - goto yy801; + goto yy779; } - goto yy800; -yy803: - YYDEBUG(803, *YYCURSOR); + goto yy778; +yy781: + YYDEBUG(781, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(804, *YYCURSOR); + YYDEBUG(782, *YYCURSOR); if (yybm[0+yych] & 32) { - goto yy803; + goto yy781; } - YYDEBUG(805, *YYCURSOR); + YYDEBUG(783, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1891 "Zend/zend_language_scanner.l" +#line 1895 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, yytext, yyleng); RETURN_TOKEN(T_STRING); } -#line 7691 "Zend/zend_language_scanner.c" -yy806: - YYDEBUG(806, *YYCURSOR); +#line 7474 "Zend/zend_language_scanner.c" +yy784: + YYDEBUG(784, *YYCURSOR); ++YYCURSOR; - YYDEBUG(807, *YYCURSOR); + YYDEBUG(785, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1873 "Zend/zend_language_scanner.l" +#line 1877 "Zend/zend_language_scanner.l" { yy_pop_state(); RETURN_TOKEN(']'); } -#line 7702 "Zend/zend_language_scanner.c" -yy808: - YYDEBUG(808, *YYCURSOR); +#line 7485 "Zend/zend_language_scanner.c" +yy786: + YYDEBUG(786, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(809, *YYCURSOR); + YYDEBUG(787, *YYCURSOR); if (yych <= '^') { if (yych <= '9') { - if (yych >= '0') goto yy808; + if (yych >= '0') goto yy786; } else { - if (yych <= '@') goto yy810; - if (yych <= 'Z') goto yy808; + if (yych <= '@') goto yy788; + if (yych <= 'Z') goto yy786; } } else { if (yych <= '`') { - if (yych <= '_') goto yy808; + if (yych <= '_') goto yy786; } else { - if (yych <= 'z') goto yy808; - if (yych >= 0x80) goto yy808; + if (yych <= 'z') goto yy786; + if (yych >= 0x80) goto yy786; } } -yy810: - YYDEBUG(810, *YYCURSOR); +yy788: + YYDEBUG(788, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1868 "Zend/zend_language_scanner.l" +#line 1872 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); RETURN_TOKEN(T_VARIABLE); } -#line 7732 "Zend/zend_language_scanner.c" -yy811: - YYDEBUG(811, *YYCURSOR); +#line 7515 "Zend/zend_language_scanner.c" +yy789: + YYDEBUG(789, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(812, *YYCURSOR); - if (yych <= '/') goto yy813; - if (yych <= '9') goto yy811; -yy813: - YYDEBUG(813, *YYCURSOR); + YYDEBUG(790, *YYCURSOR); + if (yych <= '/') goto yy791; + if (yych <= '9') goto yy789; +yy791: + YYDEBUG(791, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1734 "Zend/zend_language_scanner.l" +#line 1738 "Zend/zend_language_scanner.l" { /* Offset must be treated as a string */ ZVAL_STRINGL(zendlval, yytext, yyleng); RETURN_TOKEN(T_NUM_STRING); } -#line 7749 "Zend/zend_language_scanner.c" -yy814: - YYDEBUG(814, *YYCURSOR); +#line 7532 "Zend/zend_language_scanner.c" +yy792: + YYDEBUG(792, *YYCURSOR); yych = *++YYCURSOR; if (yybm[0+yych] & 64) { - goto yy817; + goto yy795; } -yy815: - YYDEBUG(815, *YYCURSOR); +yy793: + YYDEBUG(793, *YYCURSOR); YYCURSOR = YYMARKER; - goto yy800; -yy816: - YYDEBUG(816, *YYCURSOR); + goto yy778; +yy794: + YYDEBUG(794, *YYCURSOR); yych = *++YYCURSOR; if (yybm[0+yych] & 128) { - goto yy819; + goto yy797; } - goto yy815; -yy817: - YYDEBUG(817, *YYCURSOR); + goto yy793; +yy795: + YYDEBUG(795, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(818, *YYCURSOR); + YYDEBUG(796, *YYCURSOR); if (yybm[0+yych] & 64) { - goto yy817; + goto yy795; } - goto yy813; -yy819: - YYDEBUG(819, *YYCURSOR); + goto yy791; +yy797: + YYDEBUG(797, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(820, *YYCURSOR); + YYDEBUG(798, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy819; + goto yy797; + } + goto yy791; + } +/* *********************************** */ +yyc_INITIAL: + YYDEBUG(799, *YYCURSOR); + YYFILL(7); + yych = *YYCURSOR; + if (yych == '<') goto yy803; + YYDEBUG(801, *YYCURSOR); + ++YYCURSOR; +yy802: + YYDEBUG(802, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1807 "Zend/zend_language_scanner.l" + { + if (YYCURSOR > YYLIMIT) { + RETURN_TOKEN(END); + } + +inline_char_handler: + + while (1) { + YYCTYPE *ptr = memchr(YYCURSOR, '<', YYLIMIT - YYCURSOR); + + YYCURSOR = ptr ? ptr + 1 : YYLIMIT; + + if (YYCURSOR >= YYLIMIT) { + break; + } + + if (*YYCURSOR == '?') { + if (CG(short_tags) || !strncasecmp((char*)YYCURSOR + 1, "php", 3) || (*(YYCURSOR + 1) == '=')) { /* Assume [ \t\n\r] follows "php" */ + + YYCURSOR--; + break; + } + } + } + + yyleng = YYCURSOR - SCNG(yy_text); + + if (SCNG(output_filter)) { + size_t readsize; + char *s = NULL; + size_t sz = 0; + // TODO: avoid reallocation ??? + readsize = SCNG(output_filter)((unsigned char **)&s, &sz, (unsigned char *)yytext, (size_t)yyleng); + ZVAL_STRINGL(zendlval, s, sz); + efree(s); + if (readsize < yyleng) { + yyless(readsize); + } + } else { + ZVAL_STRINGL(zendlval, yytext, yyleng); + } + HANDLE_NEWLINES(yytext, yyleng); + RETURN_TOKEN(T_INLINE_HTML); +} +#line 7627 "Zend/zend_language_scanner.c" +yy803: + YYDEBUG(803, *YYCURSOR); + yych = *++YYCURSOR; + if (yych != '?') goto yy802; + YYDEBUG(804, *YYCURSOR); + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= 'O') { + if (yych == '=') goto yy806; + } else { + if (yych <= 'P') goto yy808; + if (yych == 'p') goto yy808; + } +yy805: + YYDEBUG(805, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1798 "Zend/zend_language_scanner.l" + { + if (CG(short_tags)) { + BEGIN(ST_IN_SCRIPTING); + RETURN_TOKEN(T_OPEN_TAG); + } else { + goto inline_char_handler; + } +} +#line 7652 "Zend/zend_language_scanner.c" +yy806: + YYDEBUG(806, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(807, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1785 "Zend/zend_language_scanner.l" + { + BEGIN(ST_IN_SCRIPTING); + RETURN_TOKEN(T_OPEN_TAG_WITH_ECHO); +} +#line 7663 "Zend/zend_language_scanner.c" +yy808: + YYDEBUG(808, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'H') goto yy810; + if (yych == 'h') goto yy810; +yy809: + YYDEBUG(809, *YYCURSOR); + YYCURSOR = YYMARKER; + goto yy805; +yy810: + YYDEBUG(810, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'P') goto yy811; + if (yych != 'p') goto yy809; +yy811: + YYDEBUG(811, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '\f') { + if (yych <= 0x08) goto yy809; + if (yych >= '\v') goto yy809; + } else { + if (yych <= '\r') goto yy814; + if (yych != ' ') goto yy809; + } +yy812: + YYDEBUG(812, *YYCURSOR); + ++YYCURSOR; +yy813: + YYDEBUG(813, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1791 "Zend/zend_language_scanner.l" + { + HANDLE_NEWLINE(yytext[yyleng-1]); + BEGIN(ST_IN_SCRIPTING); + RETURN_TOKEN(T_OPEN_TAG); +} +#line 7700 "Zend/zend_language_scanner.c" +yy814: + YYDEBUG(814, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '\n') goto yy812; + goto yy813; +/* *********************************** */ +yyc_ST_END_HEREDOC: + YYDEBUG(815, *YYCURSOR); + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(817, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(818, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2137 "Zend/zend_language_scanner.l" + { + zend_heredoc_label *heredoc_label = zend_ptr_stack_pop(&SCNG(heredoc_label_stack)); + + YYCURSOR += heredoc_label->length - 1; + yyleng = heredoc_label->length; + + heredoc_label_dtor(heredoc_label); + efree(heredoc_label); + + BEGIN(ST_IN_SCRIPTING); + RETURN_TOKEN(T_END_HEREDOC); +} +#line 7728 "Zend/zend_language_scanner.c" +/* *********************************** */ +yyc_ST_NOWDOC: + YYDEBUG(819, *YYCURSOR); + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(821, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(822, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2336 "Zend/zend_language_scanner.l" + { + int newline = 0; + + zend_heredoc_label *heredoc_label = zend_ptr_stack_top(&SCNG(heredoc_label_stack)); + + if (YYCURSOR > YYLIMIT) { + RETURN_TOKEN(END); + } + + YYCURSOR--; + + while (YYCURSOR < YYLIMIT) { + switch (*YYCURSOR++) { + case '\r': + if (*YYCURSOR == '\n') { + YYCURSOR++; + } + /* fall through */ + case '\n': + /* Check for ending label on the next line */ + if (IS_LABEL_START(*YYCURSOR) && heredoc_label->length < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, heredoc_label->label, heredoc_label->length)) { + YYCTYPE *end = YYCURSOR + heredoc_label->length; + + if (*end == ';') { + end++; + } + + if (*end == '\n' || *end == '\r') { + /* newline before label will be subtracted from returned text, but + * yyleng/yytext will include it, for zend_highlight/strip, tokenizer, etc. */ + if (YYCURSOR[-2] == '\r' && YYCURSOR[-1] == '\n') { + newline = 2; /* Windows newline */ + } else { + newline = 1; + } + + CG(increment_lineno) = 1; /* For newline before label */ + BEGIN(ST_END_HEREDOC); + + goto nowdoc_scan_done; + } + } + /* fall through */ + default: + continue; } - goto yy813; } + +nowdoc_scan_done: + yyleng = YYCURSOR - SCNG(yy_text); + + zend_copy_value(zendlval, yytext, yyleng - newline); + HANDLE_NEWLINES(yytext, yyleng - newline); + RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE); +} +#line 7794 "Zend/zend_language_scanner.c" } -#line 2398 "Zend/zend_language_scanner.l" +#line 2402 "Zend/zend_language_scanner.l" } diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index 837df416e2db2..7223405fd5f42 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -1326,6 +1326,10 @@ NEWLINE ("\r"|"\n"|"\r\n") RETURN_TOKEN(T_COALESCE); } +"???" { + RETURN_TOKEN(T_EXCEPTION_COALESCE); +} + "new" { RETURN_TOKEN(T_NEW); } diff --git a/Zend/zend_language_scanner_defs.h b/Zend/zend_language_scanner_defs.h index c89b1bba457d0..81299aa44ffab 100644 --- a/Zend/zend_language_scanner_defs.h +++ b/Zend/zend_language_scanner_defs.h @@ -1,4 +1,4 @@ -/* Generated by re2c 0.16 */ +/* Generated by re2c 1.0.3 */ #line 3 "Zend/zend_language_scanner_defs.h" enum YYCONDTYPE { diff --git a/ext/tokenizer/tokenizer_data.c b/ext/tokenizer/tokenizer_data.c index 6b36ab0e39f41..e673416cd0f42 100644 --- a/ext/tokenizer/tokenizer_data.c +++ b/ext/tokenizer/tokenizer_data.c @@ -29,11 +29,11 @@ void tokenizer_register_constants(INIT_FUNC_ARGS) { - REGISTER_LONG_CONSTANT("T_REQUIRE_ONCE", T_REQUIRE_ONCE, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_REQUIRE", T_REQUIRE, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_EVAL", T_EVAL, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_INCLUDE_ONCE", T_INCLUDE_ONCE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_INCLUDE", T_INCLUDE, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_INCLUDE_ONCE", T_INCLUDE_ONCE, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_EVAL", T_EVAL, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_REQUIRE", T_REQUIRE, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_REQUIRE_ONCE", T_REQUIRE_ONCE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_LOGICAL_OR", T_LOGICAL_OR, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_LOGICAL_XOR", T_LOGICAL_XOR, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_LOGICAL_AND", T_LOGICAL_AND, CONST_CS | CONST_PERSISTENT); @@ -41,52 +41,52 @@ void tokenizer_register_constants(INIT_FUNC_ARGS) { REGISTER_LONG_CONSTANT("T_YIELD", T_YIELD, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_DOUBLE_ARROW", T_DOUBLE_ARROW, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_YIELD_FROM", T_YIELD_FROM, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_POW_EQUAL", T_POW_EQUAL, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_SR_EQUAL", T_SR_EQUAL, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_SL_EQUAL", T_SL_EQUAL, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_XOR_EQUAL", T_XOR_EQUAL, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_OR_EQUAL", T_OR_EQUAL, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_AND_EQUAL", T_AND_EQUAL, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_MOD_EQUAL", T_MOD_EQUAL, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_CONCAT_EQUAL", T_CONCAT_EQUAL, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_DIV_EQUAL", T_DIV_EQUAL, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_MUL_EQUAL", T_MUL_EQUAL, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_MINUS_EQUAL", T_MINUS_EQUAL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_PLUS_EQUAL", T_PLUS_EQUAL, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_MINUS_EQUAL", T_MINUS_EQUAL, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_MUL_EQUAL", T_MUL_EQUAL, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_DIV_EQUAL", T_DIV_EQUAL, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_CONCAT_EQUAL", T_CONCAT_EQUAL, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_MOD_EQUAL", T_MOD_EQUAL, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_AND_EQUAL", T_AND_EQUAL, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_OR_EQUAL", T_OR_EQUAL, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_XOR_EQUAL", T_XOR_EQUAL, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_SL_EQUAL", T_SL_EQUAL, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_SR_EQUAL", T_SR_EQUAL, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_POW_EQUAL", T_POW_EQUAL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_COALESCE", T_COALESCE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_BOOLEAN_OR", T_BOOLEAN_OR, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_BOOLEAN_AND", T_BOOLEAN_AND, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_SPACESHIP", T_SPACESHIP, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_IS_NOT_IDENTICAL", T_IS_NOT_IDENTICAL, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_IS_IDENTICAL", T_IS_IDENTICAL, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_IS_NOT_EQUAL", T_IS_NOT_EQUAL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_IS_EQUAL", T_IS_EQUAL, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_IS_GREATER_OR_EQUAL", T_IS_GREATER_OR_EQUAL, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_IS_NOT_EQUAL", T_IS_NOT_EQUAL, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_IS_IDENTICAL", T_IS_IDENTICAL, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_IS_NOT_IDENTICAL", T_IS_NOT_IDENTICAL, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_SPACESHIP", T_SPACESHIP, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_IS_SMALLER_OR_EQUAL", T_IS_SMALLER_OR_EQUAL, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_SR", T_SR, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_IS_GREATER_OR_EQUAL", T_IS_GREATER_OR_EQUAL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_SL", T_SL, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_SR", T_SR, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_INSTANCEOF", T_INSTANCEOF, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_UNSET_CAST", T_UNSET_CAST, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_BOOL_CAST", T_BOOL_CAST, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_OBJECT_CAST", T_OBJECT_CAST, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_ARRAY_CAST", T_ARRAY_CAST, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_STRING_CAST", T_STRING_CAST, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_DOUBLE_CAST", T_DOUBLE_CAST, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_INT_CAST", T_INT_CAST, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_DEC", T_DEC, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_INC", T_INC, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_DEC", T_DEC, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_INT_CAST", T_INT_CAST, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_DOUBLE_CAST", T_DOUBLE_CAST, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_STRING_CAST", T_STRING_CAST, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_ARRAY_CAST", T_ARRAY_CAST, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_OBJECT_CAST", T_OBJECT_CAST, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_BOOL_CAST", T_BOOL_CAST, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_UNSET_CAST", T_UNSET_CAST, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_POW", T_POW, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_CLONE", T_CLONE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_NEW", T_NEW, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_CLONE", T_CLONE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_ELSEIF", T_ELSEIF, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_ELSE", T_ELSE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_ENDIF", T_ENDIF, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_PUBLIC", T_PUBLIC, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_PROTECTED", T_PROTECTED, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_PRIVATE", T_PRIVATE, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_FINAL", T_FINAL, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_ABSTRACT", T_ABSTRACT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_STATIC", T_STATIC, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_ABSTRACT", T_ABSTRACT, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_FINAL", T_FINAL, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_PRIVATE", T_PRIVATE, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_PROTECTED", T_PROTECTED, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_PUBLIC", T_PUBLIC, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_LNUMBER", T_LNUMBER, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_DNUMBER", T_DNUMBER, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_STRING", T_STRING, CONST_CS | CONST_PERSISTENT); @@ -162,6 +162,7 @@ void tokenizer_register_constants(INIT_FUNC_ARGS) { REGISTER_LONG_CONSTANT("T_NS_C", T_NS_C, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_NS_SEPARATOR", T_NS_SEPARATOR, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_ELLIPSIS", T_ELLIPSIS, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_EXCEPTION_COALESCE", T_EXCEPTION_COALESCE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_DOUBLE_COLON", T_PAAMAYIM_NEKUDOTAYIM, CONST_CS | CONST_PERSISTENT); } @@ -169,11 +170,11 @@ char *get_token_type_name(int token_type) { switch (token_type) { - case T_REQUIRE_ONCE: return "T_REQUIRE_ONCE"; - case T_REQUIRE: return "T_REQUIRE"; - case T_EVAL: return "T_EVAL"; - case T_INCLUDE_ONCE: return "T_INCLUDE_ONCE"; case T_INCLUDE: return "T_INCLUDE"; + case T_INCLUDE_ONCE: return "T_INCLUDE_ONCE"; + case T_EVAL: return "T_EVAL"; + case T_REQUIRE: return "T_REQUIRE"; + case T_REQUIRE_ONCE: return "T_REQUIRE_ONCE"; case T_LOGICAL_OR: return "T_LOGICAL_OR"; case T_LOGICAL_XOR: return "T_LOGICAL_XOR"; case T_LOGICAL_AND: return "T_LOGICAL_AND"; @@ -181,52 +182,52 @@ char *get_token_type_name(int token_type) case T_YIELD: return "T_YIELD"; case T_DOUBLE_ARROW: return "T_DOUBLE_ARROW"; case T_YIELD_FROM: return "T_YIELD_FROM"; - case T_POW_EQUAL: return "T_POW_EQUAL"; - case T_SR_EQUAL: return "T_SR_EQUAL"; - case T_SL_EQUAL: return "T_SL_EQUAL"; - case T_XOR_EQUAL: return "T_XOR_EQUAL"; - case T_OR_EQUAL: return "T_OR_EQUAL"; - case T_AND_EQUAL: return "T_AND_EQUAL"; - case T_MOD_EQUAL: return "T_MOD_EQUAL"; - case T_CONCAT_EQUAL: return "T_CONCAT_EQUAL"; - case T_DIV_EQUAL: return "T_DIV_EQUAL"; - case T_MUL_EQUAL: return "T_MUL_EQUAL"; - case T_MINUS_EQUAL: return "T_MINUS_EQUAL"; case T_PLUS_EQUAL: return "T_PLUS_EQUAL"; + case T_MINUS_EQUAL: return "T_MINUS_EQUAL"; + case T_MUL_EQUAL: return "T_MUL_EQUAL"; + case T_DIV_EQUAL: return "T_DIV_EQUAL"; + case T_CONCAT_EQUAL: return "T_CONCAT_EQUAL"; + case T_MOD_EQUAL: return "T_MOD_EQUAL"; + case T_AND_EQUAL: return "T_AND_EQUAL"; + case T_OR_EQUAL: return "T_OR_EQUAL"; + case T_XOR_EQUAL: return "T_XOR_EQUAL"; + case T_SL_EQUAL: return "T_SL_EQUAL"; + case T_SR_EQUAL: return "T_SR_EQUAL"; + case T_POW_EQUAL: return "T_POW_EQUAL"; case T_COALESCE: return "T_COALESCE"; case T_BOOLEAN_OR: return "T_BOOLEAN_OR"; case T_BOOLEAN_AND: return "T_BOOLEAN_AND"; - case T_SPACESHIP: return "T_SPACESHIP"; - case T_IS_NOT_IDENTICAL: return "T_IS_NOT_IDENTICAL"; - case T_IS_IDENTICAL: return "T_IS_IDENTICAL"; - case T_IS_NOT_EQUAL: return "T_IS_NOT_EQUAL"; case T_IS_EQUAL: return "T_IS_EQUAL"; - case T_IS_GREATER_OR_EQUAL: return "T_IS_GREATER_OR_EQUAL"; + case T_IS_NOT_EQUAL: return "T_IS_NOT_EQUAL"; + case T_IS_IDENTICAL: return "T_IS_IDENTICAL"; + case T_IS_NOT_IDENTICAL: return "T_IS_NOT_IDENTICAL"; + case T_SPACESHIP: return "T_SPACESHIP"; case T_IS_SMALLER_OR_EQUAL: return "T_IS_SMALLER_OR_EQUAL"; - case T_SR: return "T_SR"; + case T_IS_GREATER_OR_EQUAL: return "T_IS_GREATER_OR_EQUAL"; case T_SL: return "T_SL"; + case T_SR: return "T_SR"; case T_INSTANCEOF: return "T_INSTANCEOF"; - case T_UNSET_CAST: return "T_UNSET_CAST"; - case T_BOOL_CAST: return "T_BOOL_CAST"; - case T_OBJECT_CAST: return "T_OBJECT_CAST"; - case T_ARRAY_CAST: return "T_ARRAY_CAST"; - case T_STRING_CAST: return "T_STRING_CAST"; - case T_DOUBLE_CAST: return "T_DOUBLE_CAST"; - case T_INT_CAST: return "T_INT_CAST"; - case T_DEC: return "T_DEC"; case T_INC: return "T_INC"; + case T_DEC: return "T_DEC"; + case T_INT_CAST: return "T_INT_CAST"; + case T_DOUBLE_CAST: return "T_DOUBLE_CAST"; + case T_STRING_CAST: return "T_STRING_CAST"; + case T_ARRAY_CAST: return "T_ARRAY_CAST"; + case T_OBJECT_CAST: return "T_OBJECT_CAST"; + case T_BOOL_CAST: return "T_BOOL_CAST"; + case T_UNSET_CAST: return "T_UNSET_CAST"; case T_POW: return "T_POW"; - case T_CLONE: return "T_CLONE"; case T_NEW: return "T_NEW"; + case T_CLONE: return "T_CLONE"; case T_ELSEIF: return "T_ELSEIF"; case T_ELSE: return "T_ELSE"; case T_ENDIF: return "T_ENDIF"; - case T_PUBLIC: return "T_PUBLIC"; - case T_PROTECTED: return "T_PROTECTED"; - case T_PRIVATE: return "T_PRIVATE"; - case T_FINAL: return "T_FINAL"; - case T_ABSTRACT: return "T_ABSTRACT"; case T_STATIC: return "T_STATIC"; + case T_ABSTRACT: return "T_ABSTRACT"; + case T_FINAL: return "T_FINAL"; + case T_PRIVATE: return "T_PRIVATE"; + case T_PROTECTED: return "T_PROTECTED"; + case T_PUBLIC: return "T_PUBLIC"; case T_LNUMBER: return "T_LNUMBER"; case T_DNUMBER: return "T_DNUMBER"; case T_STRING: return "T_STRING"; @@ -302,6 +303,7 @@ char *get_token_type_name(int token_type) case T_NS_C: return "T_NS_C"; case T_NS_SEPARATOR: return "T_NS_SEPARATOR"; case T_ELLIPSIS: return "T_ELLIPSIS"; + case T_EXCEPTION_COALESCE: return "T_EXCEPTION_COALESCE"; } return "UNKNOWN"; From 73fad284d31ca0a2bf18a00ea98d0f0e93c97d68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fe=CC=81lix=20Saparelli?= Date: Thu, 15 Mar 2018 20:33:11 +1300 Subject: [PATCH 04/17] Add test --- Zend/tests/exception-coalesce.phpt | 18 ++++++++++++++++++ Zend/zend_compile.c | 29 ++++++++++++++--------------- 2 files changed, 32 insertions(+), 15 deletions(-) create mode 100644 Zend/tests/exception-coalesce.phpt diff --git a/Zend/tests/exception-coalesce.phpt b/Zend/tests/exception-coalesce.phpt new file mode 100644 index 0000000000000..da4b6795b2b5f --- /dev/null +++ b/Zend/tests/exception-coalesce.phpt @@ -0,0 +1,18 @@ +--TEST-- +??? - basic test for exception coalesce operator +--FILE-- + +--EXPECT-- +php is real +foo() does not exist +user generated exception +all ok diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 567e3955a1b53..ecb1a4665d103 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1278,7 +1278,7 @@ static void zend_mark_function_as_generator() /* {{{ */ if (ZEND_TYPE_CODE(return_info.type) != IS_ITERABLE) { const char *msg = "Generators may only declare a return type of Generator, Iterator, Traversable, or iterable, %s is not permitted"; - + if (!ZEND_TYPE_IS_CLASS(return_info.type)) { zend_error_noreturn(E_COMPILE_ERROR, msg, zend_get_type_by_const(ZEND_TYPE_CODE(return_info.type))); } @@ -1947,7 +1947,7 @@ ZEND_API size_t zend_dirname(char *path, size_t len) static void zend_adjust_for_fetch_type(zend_op *opline, uint32_t type) /* {{{ */ { zend_uchar factor = (opline->opcode == ZEND_FETCH_STATIC_PROP_R) ? 1 : 3; - + if (opline->opcode == ZEND_FETCH_THIS) { return; } @@ -2185,7 +2185,7 @@ static void zend_emit_tick(void) /* {{{ */ if (CG(active_op_array)->last && CG(active_op_array)->opcodes[CG(active_op_array)->last - 1].opcode == ZEND_TICKS) { return; } - + opline = get_next_op(CG(active_op_array)); opline->opcode = ZEND_TICKS; @@ -2612,7 +2612,7 @@ static zend_op *zend_compile_simple_var_no_cv(znode *result, zend_ast *ast, uint opline = zend_emit_op(result, ZEND_FETCH_R, &name_node, NULL); } - if (name_node.op_type == IS_CONST && + if (name_node.op_type == IS_CONST && zend_is_auto_global(Z_STR(name_node.u.constant))) { opline->extended_value = ZEND_FETCH_GLOBAL; @@ -4968,7 +4968,7 @@ void zend_compile_switch(zend_ast *ast) /* {{{ */ } else if (expr_node.op_type == IS_CONST && Z_TYPE(expr_node.u.constant) == IS_TRUE) { jmpnz_opnums[i] = zend_emit_cond_jump(ZEND_JMPNZ, &cond_node, 0); - } else { + } else { opline = zend_emit_op(NULL, ZEND_CASE, &expr_node, &cond_node); SET_NODE(opline->result, &case_node); if (opline->op1_type == IS_CONST) { @@ -4992,7 +4992,7 @@ void zend_compile_switch(zend_ast *ast) /* {{{ */ if (jumptable) { zval *cond_zv = zend_ast_get_zval(cond_ast); zval jmp_target; - ZVAL_LONG(&jmp_target, get_next_op_number(CG(active_op_array))); + ZVAL_LONG(&jmp_target, get_next_op_number(CG(active_op_array))); ZEND_ASSERT(Z_TYPE_P(cond_zv) == jumptable_type); if (Z_TYPE_P(cond_zv) == IS_LONG) { @@ -5166,7 +5166,7 @@ void zend_compile_try(zend_ast *ast) /* {{{ */ if (finally_ast) { zend_loop_var discard_exception; uint32_t opnum_jmp = get_next_op_number(CG(active_op_array)) + 1; - + /* Pop FAST_CALL from unwind stack */ zend_stack_del_top(&CG(loop_var_stack)); @@ -5417,7 +5417,7 @@ void zend_compile_params(zend_ast *ast, zend_ast *return_type_ast) /* {{{ */ uint32_t i; zend_op_array *op_array = CG(active_op_array); zend_arg_info *arg_infos; - + if (return_type_ast) { zend_bool allow_null = 0; @@ -5560,7 +5560,7 @@ void zend_compile_params(zend_ast *ast, zend_ast *return_type_ast) /* {{{ */ "with a float type can only be float, integer, or NULL"); } break; - + case IS_ITERABLE: if (Z_TYPE(default_node.u.constant) != IS_ARRAY) { zend_error_noreturn(E_COMPILE_ERROR, "Default value for parameters " @@ -5572,7 +5572,7 @@ void zend_compile_params(zend_ast *ast, zend_ast *return_type_ast) /* {{{ */ zend_error_noreturn(E_COMPILE_ERROR, "Default value for parameters " "with an object type can only be NULL"); break; - + default: if (!ZEND_SAME_FAKE_TYPE(ZEND_TYPE_CODE(arg_info->type), Z_TYPE(default_node.u.constant))) { zend_error_noreturn(E_COMPILE_ERROR, "Default value for parameters " @@ -5605,7 +5605,7 @@ void zend_compile_params(zend_ast *ast, zend_ast *return_type_ast) /* {{{ */ } else { opline->op2.num = -1; } - } + } } /* These are assigned at the end to avoid unitialized memory in case of an error */ @@ -7315,12 +7315,11 @@ void zend_compile_coalesce(znode *result, zend_ast *ast) /* {{{ */ void zend_compile_exception_coalesce(znode *result, zend_ast *ast) /* {{{ */ { - zend_ast *expr_ast = ast->child[0]; - zend_ast *default_ast = ast->child[1]; + zend_ast *expr = ast->child[0]; zend_ast *hack = zend_ast_create_ex(ZEND_AST_INCLUDE_OR_EVAL, ZEND_EVAL, zend_ast_create_zval_from_str( - zend_ast_export("try { return ", expr_ast, "; } catch(\\Throwable $e) {}"))); + zend_ast_export("try { return ", expr, "; } catch(\\Throwable $e) {}"))); ast->child[0] = hack; @@ -7871,7 +7870,7 @@ static void zend_compile_encaps_list(znode *result, zend_ast *ast) /* {{{ */ i = ((j * sizeof(zend_string*)) + (sizeof(zval) - 1)) / sizeof(zval); while (i > 1) { get_temporary_variable(CG(active_op_array)); - i--; + i--; } zend_end_live_range(CG(active_op_array), range, opline - CG(active_op_array)->opcodes, From 59dc6dda4eeb9cf31afeff7fd8a147ad7896a22c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fe=CC=81lix=20Saparelli?= Date: Thu, 15 Mar 2018 22:35:08 +1300 Subject: [PATCH 05/17] Fix memory leak With help from Richard Maxwell who very kindly looked at the code and explained some C. Thanks! --- Zend/zend_compile.c | 1 + 1 file changed, 1 insertion(+) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index ecb1a4665d103..bd53595396d3a 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -7322,6 +7322,7 @@ void zend_compile_exception_coalesce(znode *result, zend_ast *ast) /* {{{ */ zend_ast_export("try { return ", expr, "; } catch(\\Throwable $e) {}"))); ast->child[0] = hack; + zend_ast_destroy(expr); zend_compile_coalesce(result, ast); } From 95f9fef648bf9ceb9bbff469883f37a817050b8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fe=CC=81lix=20Saparelli?= Date: Thu, 15 Mar 2018 22:39:02 +1300 Subject: [PATCH 06/17] Fix basic test --- Zend/tests/exception-coalesce.phpt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Zend/tests/exception-coalesce.phpt b/Zend/tests/exception-coalesce.phpt index da4b6795b2b5f..573366a7e8c7d 100644 --- a/Zend/tests/exception-coalesce.phpt +++ b/Zend/tests/exception-coalesce.phpt @@ -2,7 +2,7 @@ ??? - basic test for exception coalesce operator --FILE-- --EXPECT-- -php is real +php foo() does not exist user generated exception all ok From bf2ffe50ffdc741ec5243845e9da82d45fa0adca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fe=CC=81lix=20Saparelli?= Date: Sat, 17 Mar 2018 11:02:23 +1300 Subject: [PATCH 07/17] More tests --- .../basic.phpt} | 0 .../exception-coalesce/chaining-null.phpt | 31 ++++++++++++++ .../exception-coalesce/chaining-ternary.phpt | 42 +++++++++++++++++++ .../tests/exception-coalesce/expressions.phpt | 16 +++++++ 4 files changed, 89 insertions(+) rename Zend/tests/{exception-coalesce.phpt => exception-coalesce/basic.phpt} (100%) create mode 100644 Zend/tests/exception-coalesce/chaining-null.phpt create mode 100644 Zend/tests/exception-coalesce/chaining-ternary.phpt create mode 100644 Zend/tests/exception-coalesce/expressions.phpt diff --git a/Zend/tests/exception-coalesce.phpt b/Zend/tests/exception-coalesce/basic.phpt similarity index 100% rename from Zend/tests/exception-coalesce.phpt rename to Zend/tests/exception-coalesce/basic.phpt diff --git a/Zend/tests/exception-coalesce/chaining-null.phpt b/Zend/tests/exception-coalesce/chaining-null.phpt new file mode 100644 index 0000000000000..022a0cbb45877 --- /dev/null +++ b/Zend/tests/exception-coalesce/chaining-null.phpt @@ -0,0 +1,31 @@ +--TEST-- +??? - chaining with ?? +--SKIPIF-- + +--FILE-- + +--EXPECT-- +string(1) "a" +string(1) "b" +string(1) "d" +string(1) "f" +string(1) "g" +bool(true) +bool(true) diff --git a/Zend/tests/exception-coalesce/chaining-ternary.phpt b/Zend/tests/exception-coalesce/chaining-ternary.phpt new file mode 100644 index 0000000000000..f2c60bdafa0bc --- /dev/null +++ b/Zend/tests/exception-coalesce/chaining-ternary.phpt @@ -0,0 +1,42 @@ +--TEST-- +??? - chaining with ?: +--FILE-- + +--EXPECT-- +string(1) "a" +string(1) "b" +string(1) "e" +bool(true) +string(1) "g" +string(1) "i" +string(1) "k" +string(1) "l" +string(1) "m" +string(1) "n" +string(1) "p" +bool(true) +bool(true) diff --git a/Zend/tests/exception-coalesce/expressions.phpt b/Zend/tests/exception-coalesce/expressions.phpt new file mode 100644 index 0000000000000..ed95c1b6ff2ff --- /dev/null +++ b/Zend/tests/exception-coalesce/expressions.phpt @@ -0,0 +1,16 @@ +--TEST-- +??? - more complex expressions +--FILE-- + +--EXPECT-- +string(5) "outer" +string(5) "inner" +string(5) "iffe" From 812d53081dbfe254acb1e9978ba02c0642b927de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fe=CC=81lix=20Saparelli?= Date: Sat, 17 Mar 2018 11:02:33 +1300 Subject: [PATCH 08/17] Code style --- Zend/zend_language_parser.y | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index c0a0cece43bfc..43ab5856094d0 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -220,7 +220,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*); %token T_NS_SEPARATOR "\\ (T_NS_SEPARATOR)" %token T_ELLIPSIS "... (T_ELLIPSIS)" %token T_COALESCE "?? (T_COALESCE)" -%token T_EXCEPTION_COALESCE "??? (T_EXCEPTION_COALESCE)" +%token T_EXCEPTION_COALESCE "??? (T_EXCEPTION_COALESCE)" %token T_POW "** (T_POW)" %token T_POW_EQUAL "**= (T_POW_EQUAL)" From 49b082943663c070a130d11c147f3c75f249a1d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fe=CC=81lix=20Saparelli?= Date: Sat, 17 Mar 2018 11:02:47 +1300 Subject: [PATCH 09/17] A try at a more correct impl --- Zend/zend_compile.c | 45 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index bd53595396d3a..f7ea7fa10c5cd 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -32,6 +32,7 @@ #include "zend_multibyte.h" #include "zend_language_scanner.h" #include "zend_inheritance.h" +#include "zend_smart_str.h" #include "zend_vm.h" #define SET_NODE(target, src) do { \ @@ -7315,16 +7316,46 @@ void zend_compile_coalesce(znode *result, zend_ast *ast) /* {{{ */ void zend_compile_exception_coalesce(znode *result, zend_ast *ast) /* {{{ */ { - zend_ast *expr = ast->child[0]; + zend_ast *lhs = ast->child[0]; + zend_ast *rhs = ast->child[1]; - zend_ast *hack = zend_ast_create_ex(ZEND_AST_INCLUDE_OR_EVAL, ZEND_EVAL, - zend_ast_create_zval_from_str( - zend_ast_export("try { return ", expr, "; } catch(\\Throwable $e) {}"))); + char idstr[20]; + sprintf(idstr, "EXCO???%013d", rand()); - ast->child[0] = hack; - zend_ast_destroy(expr); + const char *prefix = "try { return "; + char suffix[60]; + sprintf(suffix, "; } catch (\\Throwable $e) { return '%s'; }", idstr); - zend_compile_coalesce(result, ast); + zend_ast *eval = zend_ast_create_ex(ZEND_AST_INCLUDE_OR_EVAL, ZEND_EVAL, + zend_ast_create_zval_from_str( + zend_ast_export(prefix, lhs, suffix))); + zend_ast_destroy(lhs); + + zend_string *idzendstring = zend_string_init(idstr, strlen(idstr), 0); + zend_ast *idstring = zend_ast_create_zval_from_str(idzendstring); + + zend_ast *var = zend_ast_create(ZEND_AST_VAR, "_exco"); + zend_ast *assign = zend_ast_create(ZEND_AST_ASSIGN, var, eval); + zend_ast *equal = zend_ast_create_binary_op(ZEND_IS_IDENTICAL, var, idstring); + zend_ast *and = zend_ast_create_binary_op(ZEND_AST_AND, assign, equal); + zend_ast *ternary = zend_ast_create(ZEND_AST_CONDITIONAL, and, rhs, var); + + /* + TERNARY( + AND( + ASSIGN(VAR, EVAL(LHS expr)), + EQUAL(VAR, idstring) + ), + RHS expr, + VAR + ) + + or: ($_exco = eval(...) && $_exco == idstring) ? RHS : $_exco; + */ + + zend_compile_coalesce(result, ternary); + // free(prefix); + // free(suffix); } /* }}} */ From 4dadabdcdf4ab0b8d5222f93f7f567071b18d976 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fe=CC=81lix=20Saparelli?= Date: Sat, 17 Mar 2018 13:34:50 +1300 Subject: [PATCH 10/17] Int ID instead of string --- Zend/zend_compile.c | 57 +++++++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index f7ea7fa10c5cd..820bc58d086be 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -7319,36 +7319,47 @@ void zend_compile_exception_coalesce(znode *result, zend_ast *ast) /* {{{ */ zend_ast *lhs = ast->child[0]; zend_ast *rhs = ast->child[1]; - char idstr[20]; - sprintf(idstr, "EXCO???%013d", rand()); + int id = rand(); + zval idz; + ZVAL_LONG(&idz, id); const char *prefix = "try { return "; - char suffix[60]; - sprintf(suffix, "; } catch (\\Throwable $e) { return '%s'; }", idstr); + char *suffix = {0}; + sprintf(suffix, "; } catch (\\Throwable $e) { return %i; }", id); - zend_ast *eval = zend_ast_create_ex(ZEND_AST_INCLUDE_OR_EVAL, ZEND_EVAL, - zend_ast_create_zval_from_str( - zend_ast_export(prefix, lhs, suffix))); + zend_string *lhs_str = zend_ast_export(prefix, lhs, suffix); zend_ast_destroy(lhs); - zend_string *idzendstring = zend_string_init(idstr, strlen(idstr), 0); - zend_ast *idstring = zend_ast_create_zval_from_str(idzendstring); - - zend_ast *var = zend_ast_create(ZEND_AST_VAR, "_exco"); - zend_ast *assign = zend_ast_create(ZEND_AST_ASSIGN, var, eval); - zend_ast *equal = zend_ast_create_binary_op(ZEND_IS_IDENTICAL, var, idstring); - zend_ast *and = zend_ast_create_binary_op(ZEND_AST_AND, assign, equal); - zend_ast *ternary = zend_ast_create(ZEND_AST_CONDITIONAL, and, rhs, var); + zend_ast *ternary = zend_ast_create(ZEND_AST_CONDITIONAL, + zend_ast_create_binary_op(259, + zend_ast_create(ZEND_AST_ASSIGN, + zend_ast_create(ZEND_AST_VAR, "_exco"), + zend_ast_create_ex(ZEND_AST_INCLUDE_OR_EVAL, ZEND_EVAL, + zend_ast_create_zval_from_str(lhs_str))), + zend_ast_create_binary_op(15, + zend_ast_create(ZEND_AST_VAR, "_exco"), + zend_ast_create_zval(&idz))), + rhs, + zend_ast_create(ZEND_AST_VAR, "_exco")); /* - TERNARY( - AND( - ASSIGN(VAR, EVAL(LHS expr)), - EQUAL(VAR, idstring) - ), - RHS expr, - VAR - ) + AST_CONDITIONAL + cond: AST_BINARY_OP + flags: BINARY_BOOL_AND (259) + left: AST_ASSIGN + var: AST_VAR + name: "_exco" + expr: AST_INCLUDE_OR_EVAL + flags: EXEC_EVAL (1) + expr: "" + right: AST_BINARY_OP + flags: BINARY_IS_IDENTICAL (15) + left: AST_VAR + name: "_exco" + right: "idstring" + true: "RHS" + false: AST_VAR + name: "_exco" or: ($_exco = eval(...) && $_exco == idstring) ? RHS : $_exco; */ From b6c808532147eb3de8a5f85353d68858ea860c0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fe=CC=81lix=20Saparelli?= Date: Sat, 17 Mar 2018 13:58:50 +1300 Subject: [PATCH 11/17] Again --- Zend/zend_compile.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 820bc58d086be..810b5ae315f87 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -7319,13 +7319,18 @@ void zend_compile_exception_coalesce(znode *result, zend_ast *ast) /* {{{ */ zend_ast *lhs = ast->child[0]; zend_ast *rhs = ast->child[1]; - int id = rand(); + int id = ((rand() % 9) - 1) * 10000 + + ((rand() % 9) - 1) * 1000 + + ((rand() % 9) - 1) * 100 + + ((rand() % 9) - 1) * 10 + + ((rand() % 9) - 1) * 1; + zval idz; ZVAL_LONG(&idz, id); const char *prefix = "try { return "; - char *suffix = {0}; - sprintf(suffix, "; } catch (\\Throwable $e) { return %i; }", id); + char suffix[47]; + sprintf(suffix, "; } catch (\\Throwable $e) { return %i; } ?>", id); zend_string *lhs_str = zend_ast_export(prefix, lhs, suffix); zend_ast_destroy(lhs); @@ -8373,6 +8378,7 @@ void zend_compile_expr(znode *result, zend_ast *ast) /* {{{ */ zend_compile_func_decl(result, ast); return; default: + printf("%i\n", ast->kind); ZEND_ASSERT(0 /* not supported */); } } From 1d67352ead1fb1c5994e0ffe0b94c477e0e256c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fe=CC=81lix=20Saparelli?= Date: Sun, 18 Mar 2018 12:15:23 +1300 Subject: [PATCH 12/17] More debug --- Zend/zend_compile.c | 81 +++++++++++++++++++++++---------------------- 1 file changed, 42 insertions(+), 39 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 810b5ae315f87..c232e204533bd 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2971,9 +2971,15 @@ zend_bool zend_list_has_assign_to_self(zend_ast *list_ast, zend_ast *expr_ast) / void zend_compile_assign(znode *result, zend_ast *ast) /* {{{ */ { + printf("ast kind: %i\n", ast->kind); + printf("ast attr: %i\n", ast->attr); + zend_ast *var_ast = ast->child[0]; zend_ast *expr_ast = ast->child[1]; + printf("expr kind: %i\n", expr_ast->kind); + printf("expr attr: %i\n", expr_ast->attr); + znode var_node, expr_node; zend_op *opline; uint32_t offset; @@ -2984,6 +2990,9 @@ void zend_compile_assign(znode *result, zend_ast *ast) /* {{{ */ zend_ensure_writable_variable(var_ast); + printf("var kind: %i\n", var_ast->kind); + printf("var attr: %i\n", var_ast->attr); + switch (var_ast->kind) { case ZEND_AST_VAR: case ZEND_AST_STATIC_PROP: @@ -7317,7 +7326,6 @@ void zend_compile_coalesce(znode *result, zend_ast *ast) /* {{{ */ void zend_compile_exception_coalesce(znode *result, zend_ast *ast) /* {{{ */ { zend_ast *lhs = ast->child[0]; - zend_ast *rhs = ast->child[1]; int id = ((rand() % 9) - 1) * 10000 + ((rand() % 9) - 1) * 1000 @@ -7325,51 +7333,43 @@ void zend_compile_exception_coalesce(znode *result, zend_ast *ast) /* {{{ */ + ((rand() % 9) - 1) * 10 + ((rand() % 9) - 1) * 1; - zval idz; - ZVAL_LONG(&idz, id); + // Try eval in eval + // Make up the normal hack + // then zend_ast_export wrapped in the $_exco = ... && etc + // then substitute that. const char *prefix = "try { return "; char suffix[47]; sprintf(suffix, "; } catch (\\Throwable $e) { return %i; } ?>", id); - zend_string *lhs_str = zend_ast_export(prefix, lhs, suffix); - zend_ast_destroy(lhs); + printf("ZEND_AST_CONDITIONAL: %i\n", ZEND_AST_CONDITIONAL); + printf("ZEND_AST_AND: %i\n", ZEND_AST_AND); + printf("ZEND_AST_ASSIGN: %i\n", ZEND_AST_ASSIGN); + printf("ZEND_AST_VAR: %i\n", ZEND_AST_VAR); + printf("ZEND_AST_INCLUDE_OR_EVAL: %i\n", ZEND_AST_INCLUDE_OR_EVAL); + printf("ZEND_EVAL: %i\n", ZEND_EVAL); + printf("ZEND_IS_IDENTICAL: %i\n", ZEND_IS_IDENTICAL); + + /* ($_exco = eval(...) && $_exco == idstring) ? RHS : $_exco; */ - zend_ast *ternary = zend_ast_create(ZEND_AST_CONDITIONAL, - zend_ast_create_binary_op(259, + zend_ast *exco = zend_ast_create(ZEND_AST_VAR, + zend_ast_create_znode( + "_exco")); + + ast->child[0] = zend_ast_create(ZEND_AST_AND, zend_ast_create(ZEND_AST_ASSIGN, - zend_ast_create(ZEND_AST_VAR, "_exco"), + exco, zend_ast_create_ex(ZEND_AST_INCLUDE_OR_EVAL, ZEND_EVAL, - zend_ast_create_zval_from_str(lhs_str))), - zend_ast_create_binary_op(15, - zend_ast_create(ZEND_AST_VAR, "_exco"), - zend_ast_create_zval(&idz))), - rhs, - zend_ast_create(ZEND_AST_VAR, "_exco")); - - /* - AST_CONDITIONAL - cond: AST_BINARY_OP - flags: BINARY_BOOL_AND (259) - left: AST_ASSIGN - var: AST_VAR - name: "_exco" - expr: AST_INCLUDE_OR_EVAL - flags: EXEC_EVAL (1) - expr: "" - right: AST_BINARY_OP - flags: BINARY_IS_IDENTICAL (15) - left: AST_VAR - name: "_exco" - right: "idstring" - true: "RHS" - false: AST_VAR - name: "_exco" - - or: ($_exco = eval(...) && $_exco == idstring) ? RHS : $_exco; - */ - - zend_compile_coalesce(result, ternary); + zend_ast_create_zval_from_str( + zend_ast_export(prefix, lhs, suffix)))), + zend_ast_create_binary_op(ZEND_IS_IDENTICAL, + exco, + zend_ast_create_zval_from_long(id))); + + ast->child[2] = exco; + + zend_ast_destroy(lhs); + zend_compile_conditional(result, ast); // free(prefix); // free(suffix); } @@ -8261,6 +8261,10 @@ void zend_compile_expr(znode *result, zend_ast *ast) /* {{{ */ /* CG(zend_lineno) = ast->lineno; */ CG(zend_lineno) = zend_ast_get_lineno(ast); + printf("kind: %i\n", ast->kind); + printf("attr: %i\n", ast->attr); + printf("line: %i\n\n", ast->lineno); + switch (ast->kind) { case ZEND_AST_ZVAL: ZVAL_COPY(&result->u.constant, zend_ast_get_zval(ast)); @@ -8378,7 +8382,6 @@ void zend_compile_expr(znode *result, zend_ast *ast) /* {{{ */ zend_compile_func_decl(result, ast); return; default: - printf("%i\n", ast->kind); ZEND_ASSERT(0 /* not supported */); } } From d426b1a982941b58ddaaae567cbf7ad4c0adc531 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fe=CC=81lix=20Saparelli?= Date: Mon, 19 Mar 2018 00:35:46 +1300 Subject: [PATCH 13/17] The fuck it way --- Zend/zend_compile.c | 125 +++++++++++++++++++++++++++----------------- 1 file changed, 76 insertions(+), 49 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index c232e204533bd..223da854657c7 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2971,15 +2971,9 @@ zend_bool zend_list_has_assign_to_self(zend_ast *list_ast, zend_ast *expr_ast) / void zend_compile_assign(znode *result, zend_ast *ast) /* {{{ */ { - printf("ast kind: %i\n", ast->kind); - printf("ast attr: %i\n", ast->attr); - zend_ast *var_ast = ast->child[0]; zend_ast *expr_ast = ast->child[1]; - printf("expr kind: %i\n", expr_ast->kind); - printf("expr attr: %i\n", expr_ast->attr); - znode var_node, expr_node; zend_op *opline; uint32_t offset; @@ -2990,9 +2984,6 @@ void zend_compile_assign(znode *result, zend_ast *ast) /* {{{ */ zend_ensure_writable_variable(var_ast); - printf("var kind: %i\n", var_ast->kind); - printf("var attr: %i\n", var_ast->attr); - switch (var_ast->kind) { case ZEND_AST_VAR: case ZEND_AST_STATIC_PROP: @@ -7327,51 +7318,91 @@ void zend_compile_exception_coalesce(znode *result, zend_ast *ast) /* {{{ */ { zend_ast *lhs = ast->child[0]; - int id = ((rand() % 9) - 1) * 10000 - + ((rand() % 9) - 1) * 1000 - + ((rand() % 9) - 1) * 100 - + ((rand() % 9) - 1) * 10 - + ((rand() % 9) - 1) * 1; + // init srand() somehow + // int id = ((rand() % 9) - 1) * 10000 + // + ((rand() % 9) - 1) * 1000 + // + ((rand() % 9) - 1) * 100 + // + ((rand() % 9) - 1) * 10 + // + ((rand() % 9) - 1) * 1; - // Try eval in eval - // Make up the normal hack - // then zend_ast_export wrapped in the $_exco = ... && etc - // then substitute that. + // === The FUCK IT way === - const char *prefix = "try { return "; - char suffix[47]; - sprintf(suffix, "; } catch (\\Throwable $e) { return %i; } ?>", id); + // eval(try { return LHS; } catch (\Throwable $e) { return id; }) + const char *sub_prefix = "try { return "; + const char *sub_suffix = "; } catch (\\Throwable $e) { return 892638795; } ?>"; - printf("ZEND_AST_CONDITIONAL: %i\n", ZEND_AST_CONDITIONAL); - printf("ZEND_AST_AND: %i\n", ZEND_AST_AND); - printf("ZEND_AST_ASSIGN: %i\n", ZEND_AST_ASSIGN); - printf("ZEND_AST_VAR: %i\n", ZEND_AST_VAR); - printf("ZEND_AST_INCLUDE_OR_EVAL: %i\n", ZEND_AST_INCLUDE_OR_EVAL); - printf("ZEND_EVAL: %i\n", ZEND_EVAL); - printf("ZEND_IS_IDENTICAL: %i\n", ZEND_IS_IDENTICAL); + zend_string *sub_eval_str = zend_ast_export(sub_prefix, lhs, sub_suffix); + zend_ast *sub_eval = zend_ast_create_ex(ZEND_AST_INCLUDE_OR_EVAL, + ZEND_EVAL, + zend_ast_create_zval_from_str(sub_eval_str)); - /* ($_exco = eval(...) && $_exco == idstring) ? RHS : $_exco; */ + zend_ast_destroy(lhs); + printf("sub eval: %s\n", ZSTR_VAL(sub_eval_str)); - zend_ast *exco = zend_ast_create(ZEND_AST_VAR, - zend_ast_create_znode( - "_exco")); + // eval($_exco = eval(...) && $_exco === id)) ? RHS : eval($_exco); + const char *r_prefix = "return ($_exco = "; + const char *r_suffix = " && $_exco === 892638795);"; - ast->child[0] = zend_ast_create(ZEND_AST_AND, - zend_ast_create(ZEND_AST_ASSIGN, - exco, - zend_ast_create_ex(ZEND_AST_INCLUDE_OR_EVAL, ZEND_EVAL, - zend_ast_create_zval_from_str( - zend_ast_export(prefix, lhs, suffix)))), - zend_ast_create_binary_op(ZEND_IS_IDENTICAL, - exco, - zend_ast_create_zval_from_long(id))); + zend_string *r_eval_str = zend_ast_export(r_prefix, sub_eval, r_suffix); + zend_ast *r_eval = zend_ast_create_ex(ZEND_AST_INCLUDE_OR_EVAL, + ZEND_EVAL, + zend_ast_create_zval_from_str(r_eval_str)); - ast->child[2] = exco; + zend_ast_destroy(sub_eval); + printf("r eval: %s\n", ZSTR_VAL(r_eval_str)); + + const char *l_str = "return $_exco;"; + zend_ast *l_eval = zend_ast_create_ex(ZEND_AST_INCLUDE_OR_EVAL, + ZEND_EVAL, + zend_ast_create_zval_from_str( + zend_string_init(l_str, strlen(l_str), 0))); + + ast->child[0] = r_eval; + // ->child[1] = rhs (already there) + ast->child[2] = l_eval; - zend_ast_destroy(lhs); zend_compile_conditional(result, ast); - // free(prefix); - // free(suffix); + + // Try eval in eval + // Make up the normal hack + // then zend_ast_export wrapped in the $_exco = ... && etc + // then substitute that. + + // === The proper way === + // + // const char *prefix = "try { return "; + // char suffix[47]; + // sprintf(suffix, "; } catch (\\Throwable $e) { return %i; } ?>", id); + // + // printf("ZEND_AST_CONDITIONAL: %i\n", ZEND_AST_CONDITIONAL); + // printf("ZEND_AST_AND: %i\n", ZEND_AST_AND); + // printf("ZEND_AST_ASSIGN: %i\n", ZEND_AST_ASSIGN); + // printf("ZEND_AST_VAR: %i\n", ZEND_AST_VAR); + // printf("ZEND_AST_INCLUDE_OR_EVAL: %i\n", ZEND_AST_INCLUDE_OR_EVAL); + // printf("ZEND_EVAL: %i\n", ZEND_EVAL); + // printf("ZEND_IS_IDENTICAL: %i\n", ZEND_IS_IDENTICAL); + // + // /* ($_exco = eval(...) && $_exco == id) ? RHS : $_exco; */ + // + // zend_ast *exco = zend_ast_create(ZEND_AST_VAR, + // zend_ast_create_znode( + // "_exco")); + // + // ast->child[0] = zend_ast_create(ZEND_AST_AND, + // zend_ast_create(ZEND_AST_ASSIGN, + // exco, + // zend_ast_create_ex(ZEND_AST_INCLUDE_OR_EVAL, ZEND_EVAL, + // zend_ast_create_zval_from_str( + // zend_ast_export(prefix, lhs, suffix)))), + // zend_ast_create_binary_op(ZEND_IS_IDENTICAL, + // exco, + // zend_ast_create_zval_from_long(id))); + // + // ast->child[2] = exco; + // + // zend_ast_destroy(lhs); + // zend_compile_conditional(result, ast); + } /* }}} */ @@ -8261,10 +8292,6 @@ void zend_compile_expr(znode *result, zend_ast *ast) /* {{{ */ /* CG(zend_lineno) = ast->lineno; */ CG(zend_lineno) = zend_ast_get_lineno(ast); - printf("kind: %i\n", ast->kind); - printf("attr: %i\n", ast->attr); - printf("line: %i\n\n", ast->lineno); - switch (ast->kind) { case ZEND_AST_ZVAL: ZVAL_COPY(&result->u.constant, zend_ast_get_zval(ast)); From 4c785b6b1993e9a61044395198d3a14ebf30d13e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fe=CC=81lix=20Saparelli?= Date: Mon, 19 Mar 2018 00:55:52 +1300 Subject: [PATCH 14/17] More in eval --- Zend/zend_compile.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 223da854657c7..301014aea3fbc 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -7317,6 +7317,7 @@ void zend_compile_coalesce(znode *result, zend_ast *ast) /* {{{ */ void zend_compile_exception_coalesce(znode *result, zend_ast *ast) /* {{{ */ { zend_ast *lhs = ast->child[0]; + zend_ast *rhs = ast->child[1]; // init srand() somehow // int id = ((rand() % 9) - 1) * 10000 @@ -7329,26 +7330,32 @@ void zend_compile_exception_coalesce(znode *result, zend_ast *ast) /* {{{ */ // eval(try { return LHS; } catch (\Throwable $e) { return id; }) const char *sub_prefix = "try { return "; - const char *sub_suffix = "; } catch (\\Throwable $e) { return 892638795; } ?>"; + const char *sub_suffix = "; } catch (\\Throwable $e) { return 892638795; }"; zend_string *sub_eval_str = zend_ast_export(sub_prefix, lhs, sub_suffix); zend_ast *sub_eval = zend_ast_create_ex(ZEND_AST_INCLUDE_OR_EVAL, ZEND_EVAL, zend_ast_create_zval_from_str(sub_eval_str)); - zend_ast_destroy(lhs); + // zend_ast_destroy(lhs); printf("sub eval: %s\n", ZSTR_VAL(sub_eval_str)); // eval($_exco = eval(...) && $_exco === id)) ? RHS : eval($_exco); - const char *r_prefix = "return ($_exco = "; - const char *r_suffix = " && $_exco === 892638795);"; - zend_string *r_eval_str = zend_ast_export(r_prefix, sub_eval, r_suffix); + smart_str str = {0}; + smart_str_appends(&str, "return ($_exco = "); + zend_ast_export_ex(&str, sub_eval, 0, 0); + smart_str_appends(&str, ") === 892638795 ? ("); + zend_ast_export_ex(&str, rhs, 0, 0); + smart_str_appends(&str, ") : $_exco;"); + smart_str_0(&str); + zend_string *r_eval_str = str.s; + zend_ast *r_eval = zend_ast_create_ex(ZEND_AST_INCLUDE_OR_EVAL, ZEND_EVAL, zend_ast_create_zval_from_str(r_eval_str)); - zend_ast_destroy(sub_eval); + // zend_ast_destroy(sub_eval); printf("r eval: %s\n", ZSTR_VAL(r_eval_str)); const char *l_str = "return $_exco;"; @@ -7361,6 +7368,7 @@ void zend_compile_exception_coalesce(znode *result, zend_ast *ast) /* {{{ */ // ->child[1] = rhs (already there) ast->child[2] = l_eval; + // compile as eval instead zend_compile_conditional(result, ast); // Try eval in eval From 9fa09d6228a75491c8c6824d2a7886c25e8d2d0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fe=CC=81lix=20Saparelli?= Date: Mon, 19 Mar 2018 10:25:32 +1300 Subject: [PATCH 15/17] Eliminate null issue (almost entirely) --- Zend/zend_compile.c | 118 ++++++++------------------------- ext/tokenizer/tokenizer_data.c | 4 +- 2 files changed, 28 insertions(+), 94 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 301014aea3fbc..821b02ff98807 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -32,7 +32,6 @@ #include "zend_multibyte.h" #include "zend_language_scanner.h" #include "zend_inheritance.h" -#include "zend_smart_str.h" #include "zend_vm.h" #define SET_NODE(target, src) do { \ @@ -7319,98 +7318,33 @@ void zend_compile_exception_coalesce(znode *result, zend_ast *ast) /* {{{ */ zend_ast *lhs = ast->child[0]; zend_ast *rhs = ast->child[1]; - // init srand() somehow - // int id = ((rand() % 9) - 1) * 10000 - // + ((rand() % 9) - 1) * 1000 - // + ((rand() % 9) - 1) * 100 - // + ((rand() % 9) - 1) * 10 - // + ((rand() % 9) - 1) * 1; - - // === The FUCK IT way === - - // eval(try { return LHS; } catch (\Throwable $e) { return id; }) - const char *sub_prefix = "try { return "; - const char *sub_suffix = "; } catch (\\Throwable $e) { return 892638795; }"; - - zend_string *sub_eval_str = zend_ast_export(sub_prefix, lhs, sub_suffix); - zend_ast *sub_eval = zend_ast_create_ex(ZEND_AST_INCLUDE_OR_EVAL, - ZEND_EVAL, - zend_ast_create_zval_from_str(sub_eval_str)); - - // zend_ast_destroy(lhs); - printf("sub eval: %s\n", ZSTR_VAL(sub_eval_str)); - - // eval($_exco = eval(...) && $_exco === id)) ? RHS : eval($_exco); - - smart_str str = {0}; - smart_str_appends(&str, "return ($_exco = "); - zend_ast_export_ex(&str, sub_eval, 0, 0); - smart_str_appends(&str, ") === 892638795 ? ("); - zend_ast_export_ex(&str, rhs, 0, 0); - smart_str_appends(&str, ") : $_exco;"); - smart_str_0(&str); - zend_string *r_eval_str = str.s; - - zend_ast *r_eval = zend_ast_create_ex(ZEND_AST_INCLUDE_OR_EVAL, - ZEND_EVAL, - zend_ast_create_zval_from_str(r_eval_str)); - - // zend_ast_destroy(sub_eval); - printf("r eval: %s\n", ZSTR_VAL(r_eval_str)); - - const char *l_str = "return $_exco;"; - zend_ast *l_eval = zend_ast_create_ex(ZEND_AST_INCLUDE_OR_EVAL, - ZEND_EVAL, - zend_ast_create_zval_from_str( - zend_string_init(l_str, strlen(l_str), 0))); - - ast->child[0] = r_eval; - // ->child[1] = rhs (already there) - ast->child[2] = l_eval; - - // compile as eval instead - zend_compile_conditional(result, ast); - - // Try eval in eval - // Make up the normal hack - // then zend_ast_export wrapped in the $_exco = ... && etc - // then substitute that. - - // === The proper way === - // - // const char *prefix = "try { return "; - // char suffix[47]; - // sprintf(suffix, "; } catch (\\Throwable $e) { return %i; } ?>", id); - // - // printf("ZEND_AST_CONDITIONAL: %i\n", ZEND_AST_CONDITIONAL); - // printf("ZEND_AST_AND: %i\n", ZEND_AST_AND); - // printf("ZEND_AST_ASSIGN: %i\n", ZEND_AST_ASSIGN); - // printf("ZEND_AST_VAR: %i\n", ZEND_AST_VAR); - // printf("ZEND_AST_INCLUDE_OR_EVAL: %i\n", ZEND_AST_INCLUDE_OR_EVAL); - // printf("ZEND_EVAL: %i\n", ZEND_EVAL); - // printf("ZEND_IS_IDENTICAL: %i\n", ZEND_IS_IDENTICAL); - // - // /* ($_exco = eval(...) && $_exco == id) ? RHS : $_exco; */ - // - // zend_ast *exco = zend_ast_create(ZEND_AST_VAR, - // zend_ast_create_znode( - // "_exco")); - // - // ast->child[0] = zend_ast_create(ZEND_AST_AND, - // zend_ast_create(ZEND_AST_ASSIGN, - // exco, - // zend_ast_create_ex(ZEND_AST_INCLUDE_OR_EVAL, ZEND_EVAL, - // zend_ast_create_zval_from_str( - // zend_ast_export(prefix, lhs, suffix)))), - // zend_ast_create_binary_op(ZEND_IS_IDENTICAL, - // exco, - // zend_ast_create_zval_from_long(id))); - // - // ast->child[2] = exco; - // - // zend_ast_destroy(lhs); - // zend_compile_conditional(result, ast); + /* eval(try { $_exco = (LHS); } catch (\Throwable $e) { $_exco = id; }) + => eval without return always returns null... */ + const char *lhs_prefix = "try { $_exco = ("; + const char *lhs_suffix = "); } catch (\\Throwable $e) { $_exco = 892638795; }"; + zend_string *lhs_eval_str = zend_ast_export(lhs_prefix, lhs, lhs_suffix); + zend_ast *lhs_eval = zend_ast_create_ex(ZEND_AST_INCLUDE_OR_EVAL, ZEND_EVAL, + zend_ast_create_zval_from_str(lhs_eval_str)); + + zend_ast_destroy(lhs); + // printf("lhs eval: %s\n", ZSTR_VAL(lhs_eval_str)); + + /* eval(return ($_exco === id) ? (RHS) : $_exco;) + => ...after a ?? this will always execute AND be the final value! */ + const char *rhs_prefix = "return ($_exco === 892638795) ? ("; + const char *rhs_suffix = ") : $_exco;"; + + zend_string *rhs_eval_str = zend_ast_export(rhs_prefix, rhs, rhs_suffix); + zend_ast *rhs_eval = zend_ast_create_ex(ZEND_AST_INCLUDE_OR_EVAL, ZEND_EVAL, + zend_ast_create_zval_from_str(rhs_eval_str)); + + zend_ast_destroy(rhs); + // printf("rhs eval: %s\n", ZSTR_VAL(rhs_eval_str)); + + ast->child[0] = lhs_eval; + ast->child[1] = rhs_eval; + zend_compile_coalesce(result, ast); } /* }}} */ diff --git a/ext/tokenizer/tokenizer_data.c b/ext/tokenizer/tokenizer_data.c index e673416cd0f42..3aacefb582039 100644 --- a/ext/tokenizer/tokenizer_data.c +++ b/ext/tokenizer/tokenizer_data.c @@ -54,6 +54,7 @@ void tokenizer_register_constants(INIT_FUNC_ARGS) { REGISTER_LONG_CONSTANT("T_SR_EQUAL", T_SR_EQUAL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_POW_EQUAL", T_POW_EQUAL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_COALESCE", T_COALESCE, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_EXCEPTION_COALESCE", T_EXCEPTION_COALESCE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_BOOLEAN_OR", T_BOOLEAN_OR, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_BOOLEAN_AND", T_BOOLEAN_AND, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_IS_EQUAL", T_IS_EQUAL, CONST_CS | CONST_PERSISTENT); @@ -162,7 +163,6 @@ void tokenizer_register_constants(INIT_FUNC_ARGS) { REGISTER_LONG_CONSTANT("T_NS_C", T_NS_C, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_NS_SEPARATOR", T_NS_SEPARATOR, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_ELLIPSIS", T_ELLIPSIS, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_EXCEPTION_COALESCE", T_EXCEPTION_COALESCE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_DOUBLE_COLON", T_PAAMAYIM_NEKUDOTAYIM, CONST_CS | CONST_PERSISTENT); } @@ -195,6 +195,7 @@ char *get_token_type_name(int token_type) case T_SR_EQUAL: return "T_SR_EQUAL"; case T_POW_EQUAL: return "T_POW_EQUAL"; case T_COALESCE: return "T_COALESCE"; + case T_EXCEPTION_COALESCE: return "T_EXCEPTION_COALESCE"; case T_BOOLEAN_OR: return "T_BOOLEAN_OR"; case T_BOOLEAN_AND: return "T_BOOLEAN_AND"; case T_IS_EQUAL: return "T_IS_EQUAL"; @@ -303,7 +304,6 @@ char *get_token_type_name(int token_type) case T_NS_C: return "T_NS_C"; case T_NS_SEPARATOR: return "T_NS_SEPARATOR"; case T_ELLIPSIS: return "T_ELLIPSIS"; - case T_EXCEPTION_COALESCE: return "T_EXCEPTION_COALESCE"; } return "UNKNOWN"; From 1f5993f2b95b49857277b5400cde3a37489de8f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fe=CC=81lix=20Saparelli?= Date: Mon, 19 Mar 2018 11:18:38 +1300 Subject: [PATCH 16/17] Enable null-chaining tests --- Zend/tests/exception-coalesce/chaining-null.phpt | 2 -- Zend/tests/exception-coalesce/expressions.phpt | 5 +++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Zend/tests/exception-coalesce/chaining-null.phpt b/Zend/tests/exception-coalesce/chaining-null.phpt index 022a0cbb45877..63079a2d73d3f 100644 --- a/Zend/tests/exception-coalesce/chaining-null.phpt +++ b/Zend/tests/exception-coalesce/chaining-null.phpt @@ -1,7 +1,5 @@ --TEST-- ??? - chaining with ?? ---SKIPIF-- - --FILE-- --EXPECT-- string(5) "outer" string(5) "inner" -string(5) "iffe" +string(4) "iffe" From 929de2aebfc62ea5b975531a15f6b7f6f982d570 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fe=CC=81lix=20Saparelli?= Date: Wed, 21 Mar 2018 20:27:41 +1300 Subject: [PATCH 17/17] Add warning pass-through test --- Zend/tests/exception-coalesce/warnings-pass-through.phpt | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Zend/tests/exception-coalesce/warnings-pass-through.phpt diff --git a/Zend/tests/exception-coalesce/warnings-pass-through.phpt b/Zend/tests/exception-coalesce/warnings-pass-through.phpt new file mode 100644 index 0000000000000..34691261d3971 --- /dev/null +++ b/Zend/tests/exception-coalesce/warnings-pass-through.phpt @@ -0,0 +1,6 @@ +--TEST-- +??? - do not absorb errors/warnings +--FILE-- + +--EXPECTREGEX-- +Warning: Division by zero in [\w\/\-.]+\(1\) : eval\(\)'d code on line 1\nfloat\(INF\)