From aba775fd34d5f0e10c072daaf350dbc068436f44 Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Thu, 26 Dec 2013 17:45:37 +0800 Subject: Fixed warning "No new line at end of file" --- Zend/zend_vm_gen.php | 2 +- Zend/zend_vm_opcodes.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'Zend') diff --git a/Zend/zend_vm_gen.php b/Zend/zend_vm_gen.php index fc6c6177b2..a25ff9deb5 100644 --- a/Zend/zend_vm_gen.php +++ b/Zend/zend_vm_gen.php @@ -1216,7 +1216,7 @@ function gen_vm($def, $skel) { fputs($f,"#define $op $code\n"); } - fputs($f, "\n#endif"); + fputs($f, "\n#endif\n"); fclose($f); echo "zend_vm_opcodes.h generated successfully.\n"; diff --git a/Zend/zend_vm_opcodes.h b/Zend/zend_vm_opcodes.h index c4cab07aeb..0f75196ffb 100644 --- a/Zend/zend_vm_opcodes.h +++ b/Zend/zend_vm_opcodes.h @@ -172,4 +172,4 @@ ZEND_API const char *zend_get_opcode_name(zend_uchar opcode); #define ZEND_RECV_VARIADIC 164 #define ZEND_SEND_UNPACK 165 -#endif \ No newline at end of file +#endif -- cgit v1.2.1 From 07f3bac6caca5cb1605cb18ab819bcd8c0fa4291 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Tue, 28 Jan 2014 13:09:29 +0100 Subject: fix *.dsp files related to bug #50333 --- Zend/Zend.dsp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'Zend') diff --git a/Zend/Zend.dsp b/Zend/Zend.dsp index 348e1abaa5..98d368fb16 100644 --- a/Zend/Zend.dsp +++ b/Zend/Zend.dsp @@ -269,6 +269,10 @@ SOURCE=.\zend_variables.c SOURCE=.\zend_vm_opcodes.c # End Source File +# Begin Source File + +SOURCE=.\zend_virtual_cwd.c +# End Source File # End Group # Begin Group "Header Files" @@ -437,10 +441,6 @@ SOURCE=.\zend_ts_hash.h SOURCE=.\zend_variables.h # End Source File -# Begin Source File - -SOURCE=.\zend_virtual_cwd.c -# End Source File # End Group # Begin Group "Parsers" -- cgit v1.2.1 From aff56f3c4539869910cf2778cf0ece2d8c2dd671 Mon Sep 17 00:00:00 2001 From: datibbaw Date: Tue, 19 Nov 2013 15:36:06 +0800 Subject: add T_POW (**) operator Fixed recognition of the operator Added opcode, still doing multiply instead of pow() opcode now always returns int(42) The right answer, but always a float Yanked code from pow() implementation. Should not handle negative long as exponent ourselves Added test cases from pow() Moved precedence higher than '~' Added GMP operator overloading Added ZEND_ASSIGN_POW (**=) operator. Added pow() as a language construct. Adjusted test cases for changed precedence. Reduced pow() to shell function around ZEND_API pow_function() Reduced test case to only contain edge cases Added overloading test case Moved unary minus above T_POW Revert "Added pow() as a language construct." Bad bad bad idea. This reverts commit f60b98cf7a8371233d800a6faa286ddba4432d02. Reverted unary minus behaviour due to previous revert. Convert arrays to int(0) Exponent with array as a base becomes int(0) Rebase against master Fixed tokenizer test case --- Zend/zend_ini_scanner.c | 9326 ++++++++++++++++++------------------- Zend/zend_ini_scanner_defs.h | 26 +- Zend/zend_language_parser.y | 7 +- Zend/zend_language_scanner.c | 4056 ++++++++-------- Zend/zend_language_scanner.l | 8 + Zend/zend_language_scanner_defs.h | 2 +- Zend/zend_opcode.c | 3 + Zend/zend_operators.c | 81 + Zend/zend_operators.h | 1 + Zend/zend_vm_def.h | 20 + Zend/zend_vm_execute.h | 365 ++ Zend/zend_vm_opcodes.c | 4 +- Zend/zend_vm_opcodes.h | 2 + 13 files changed, 7205 insertions(+), 6696 deletions(-) (limited to 'Zend') diff --git a/Zend/zend_ini_scanner.c b/Zend/zend_ini_scanner.c index c73f3cedda..521e98e257 100644 --- a/Zend/zend_ini_scanner.c +++ b/Zend/zend_ini_scanner.c @@ -1,4663 +1,4663 @@ -/* Generated by re2c 0.13.5 */ -#line 1 "Zend/zend_ini_scanner.l" -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2014 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Zeev Suraski | - | Jani Taskinen | - | Marcus Boerger | - | Nuno Lopes | - | Scott MacVicar | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#include -#include "zend.h" -#include "zend_globals.h" -#include -#include "zend_ini_scanner.h" - -#if 0 -# define YYDEBUG(s, c) printf("state: %d char: %c\n", s, c) -#else -# define YYDEBUG(s, c) -#endif - -#include "zend_ini_scanner_defs.h" - -#define YYCTYPE unsigned char -/* allow the scanner to read one null byte after the end of the string (from ZEND_MMAP_AHEAD) - * so that if will be able to terminate to match the current token (e.g. non-enclosed string) */ -#define YYFILL(n) { if (YYCURSOR > YYLIMIT) return 0; } -#define YYCURSOR SCNG(yy_cursor) -#define YYLIMIT SCNG(yy_limit) -#define YYMARKER SCNG(yy_marker) - -#define YYGETCONDITION() SCNG(yy_state) -#define YYSETCONDITION(s) SCNG(yy_state) = s - -#define STATE(name) yyc##name - -/* emulate flex constructs */ -#define BEGIN(state) YYSETCONDITION(STATE(state)) -#define YYSTATE YYGETCONDITION() -#define yytext ((char*)SCNG(yy_text)) -#define yyleng SCNG(yy_leng) -#define yyless(x) do { YYCURSOR = (unsigned char*)yytext + x; \ - yyleng = (unsigned int)x; } while(0) - -/* #define yymore() goto yymore_restart */ - -/* perform sanity check. If this message is triggered you should - increase the ZEND_MMAP_AHEAD value in the zend_streams.h file */ -#define YYMAXFILL 6 -#if ZEND_MMAP_AHEAD < (YYMAXFILL + 1) -# error ZEND_MMAP_AHEAD should be greater than YYMAXFILL -#endif - - -/* How it works (for the core ini directives): - * =========================================== - * - * 1. Scanner scans file for tokens and passes them to parser. - * 2. Parser parses the tokens and passes the name/value pairs to the callback - * function which stores them in the configuration hash table. - * 3. Later REGISTER_INI_ENTRIES() is called which triggers the actual - * registering of ini entries and uses zend_get_configuration_directive() - * to fetch the previously stored name/value pair from configuration hash table - * and registers the static ini entries which match the name to the value - * into EG(ini_directives) hash table. - * 4. PATH section entries are used per-request from down to top, each overriding - * previous if one exists. zend_alter_ini_entry() is called for each entry. - * Settings in PATH section are ZEND_INI_SYSTEM accessible and thus mimics the - * php_admin_* directives used within Apache httpd.conf when PHP is compiled as - * module for Apache. - * 5. User defined ini files (like .htaccess for apache) are parsed for each request and - * stored in separate hash defined by SAPI. - */ - -/* TODO: (ordered by importance :-) - * =============================================================================== - * - * - Separate constant lookup totally from plain strings (using CONSTANT pattern) - * - Add #if .. #else .. #endif and ==, !=, <, > , <=, >= operators - * - Add #include "some.ini" - * - Allow variables to refer to options also when using parse_ini_file() - * - */ - -/* Globals Macros */ -#define SCNG INI_SCNG -#ifdef ZTS -ZEND_API ts_rsrc_id ini_scanner_globals_id; -#else -ZEND_API zend_ini_scanner_globals ini_scanner_globals; -#endif - -/* Eat leading whitespace */ -#define EAT_LEADING_WHITESPACE() \ - while (yytext[0]) { \ - if (yytext[0] == ' ' || yytext[0] == '\t') { \ - SCNG(yy_text)++; \ - yyleng--; \ - } else { \ - break; \ - } \ - } - -/* Eat trailing whitespace + extra char */ -#define EAT_TRAILING_WHITESPACE_EX(ch) \ - while (yyleng > 0 && ( \ - (ch != 'X' && yytext[yyleng - 1] == ch) || \ - yytext[yyleng - 1] == '\n' || \ - yytext[yyleng - 1] == '\r' || \ - yytext[yyleng - 1] == '\t' || \ - yytext[yyleng - 1] == ' ') \ - ) { \ - yyleng--; \ - } - -/* Eat trailing whitespace */ -#define EAT_TRAILING_WHITESPACE() EAT_TRAILING_WHITESPACE_EX('X') - -#define zend_ini_copy_value(retval, str, len) { \ - Z_STRVAL_P(retval) = zend_strndup(str, len); \ - Z_STRLEN_P(retval) = len; \ - Z_TYPE_P(retval) = IS_STRING; \ -} - -#define RETURN_TOKEN(type, str, len) { \ - zend_ini_copy_value(ini_lval, str, len); \ - return type; \ -} - -static void _yy_push_state(int new_state TSRMLS_DC) -{ - zend_stack_push(&SCNG(state_stack), (void *) &YYGETCONDITION(), sizeof(int)); - YYSETCONDITION(new_state); -} - -#define yy_push_state(state_and_tsrm) _yy_push_state(yyc##state_and_tsrm) - -static void yy_pop_state(TSRMLS_D) -{ - int *stack_state; - zend_stack_top(&SCNG(state_stack), (void **) &stack_state); - YYSETCONDITION(*stack_state); - zend_stack_del_top(&SCNG(state_stack)); -} - -static void yy_scan_buffer(char *str, unsigned int len TSRMLS_DC) -{ - YYCURSOR = (YYCTYPE*)str; - SCNG(yy_start) = YYCURSOR; - YYLIMIT = YYCURSOR + len; -} - -#define ini_filename SCNG(filename) - -/* {{{ init_ini_scanner() -*/ -static int init_ini_scanner(int scanner_mode, zend_file_handle *fh TSRMLS_DC) -{ - /* Sanity check */ - if (scanner_mode != ZEND_INI_SCANNER_NORMAL && scanner_mode != ZEND_INI_SCANNER_RAW) { - zend_error(E_WARNING, "Invalid scanner mode"); - return FAILURE; - } - - SCNG(lineno) = 1; - SCNG(scanner_mode) = scanner_mode; - SCNG(yy_in) = fh; - - if (fh != NULL) { - ini_filename = zend_strndup(fh->filename, strlen(fh->filename)); - } else { - ini_filename = NULL; - } - - zend_stack_init(&SCNG(state_stack)); - BEGIN(INITIAL); - - return SUCCESS; -} -/* }}} */ - -/* {{{ shutdown_ini_scanner() -*/ -void shutdown_ini_scanner(TSRMLS_D) -{ - zend_stack_destroy(&SCNG(state_stack)); - if (ini_filename) { - free(ini_filename); - } -} -/* }}} */ - -/* {{{ zend_ini_scanner_get_lineno() -*/ -int zend_ini_scanner_get_lineno(TSRMLS_D) -{ - return SCNG(lineno); -} -/* }}} */ - -/* {{{ zend_ini_scanner_get_filename() -*/ -char *zend_ini_scanner_get_filename(TSRMLS_D) -{ - return ini_filename ? ini_filename : "Unknown"; -} -/* }}} */ - -/* {{{ zend_ini_open_file_for_scanning() -*/ -int zend_ini_open_file_for_scanning(zend_file_handle *fh, int scanner_mode TSRMLS_DC) -{ - char *buf; - size_t size; - - if (zend_stream_fixup(fh, &buf, &size TSRMLS_CC) == FAILURE) { - return FAILURE; - } - - if (init_ini_scanner(scanner_mode, fh TSRMLS_CC) == FAILURE) { - zend_file_handle_dtor(fh TSRMLS_CC); - return FAILURE; - } - - yy_scan_buffer(buf, size TSRMLS_CC); - - return SUCCESS; -} -/* }}} */ - -/* {{{ zend_ini_prepare_string_for_scanning() -*/ -int zend_ini_prepare_string_for_scanning(char *str, int scanner_mode TSRMLS_DC) -{ - int len = strlen(str); - - if (init_ini_scanner(scanner_mode, NULL TSRMLS_CC) == FAILURE) { - return FAILURE; - } - - yy_scan_buffer(str, len TSRMLS_CC); - - return SUCCESS; -} -/* }}} */ - -/* {{{ zend_ini_escape_string() - */ -static void zend_ini_escape_string(zval *lval, char *str, int len, char quote_type TSRMLS_DC) -{ - register char *s, *t; - char *end; - - zend_ini_copy_value(lval, str, len); - - /* convert escape sequences */ - s = t = Z_STRVAL_P(lval); - end = s + Z_STRLEN_P(lval); - - while (s < end) { - if (*s == '\\') { - s++; - if (s >= end) { - *t++ = '\\'; - continue; - } - switch (*s) { - case '"': - if (*s != quote_type) { - *t++ = '\\'; - *t++ = *s; - break; - } - case '\\': - case '$': - *t++ = *s; - Z_STRLEN_P(lval)--; - break; - default: - *t++ = '\\'; - *t++ = *s; - break; - } - } else { - *t++ = *s; - } - if (*s == '\n' || (*s == '\r' && (*(s+1) != '\n'))) { - SCNG(lineno)++; - } - s++; - } - *t = 0; -} -/* }}} */ - -int ini_lex(zval *ini_lval TSRMLS_DC) -{ -restart: - SCNG(yy_text) = YYCURSOR; - -/* yymore_restart: */ - /* detect EOF */ - if (YYCURSOR >= YYLIMIT) { - if (YYSTATE == STATE(ST_VALUE) || YYSTATE == STATE(ST_RAW)) { - BEGIN(INITIAL); - return END_OF_LINE; - } - return 0; - } - - /* Eat any UTF-8 BOM we find in the first 3 bytes */ - if (YYCURSOR == SCNG(yy_start) && YYCURSOR + 3 < YYLIMIT) { - if (memcmp(YYCURSOR, "\xef\xbb\xbf", 3) == 0) { - YYCURSOR += 3; - goto restart; - } - } - -#line 337 "Zend/zend_ini_scanner.c" -{ - YYCTYPE yych; - unsigned int yyaccept = 0; - if (YYGETCONDITION() < 4) { - if (YYGETCONDITION() < 2) { - if (YYGETCONDITION() < 1) { - goto yyc_INITIAL; - } else { - goto yyc_ST_OFFSET; - } - } else { - if (YYGETCONDITION() < 3) { - goto yyc_ST_SECTION_VALUE; - } else { - goto yyc_ST_VALUE; - } - } - } else { - if (YYGETCONDITION() < 6) { - if (YYGETCONDITION() < 5) { - goto yyc_ST_SECTION_RAW; - } else { - goto yyc_ST_DOUBLE_QUOTES; - } - } else { - if (YYGETCONDITION() < 7) { - goto yyc_ST_VARNAME; - } else { - goto yyc_ST_RAW; - } - } - } -/* *********************************** */ -yyc_INITIAL: - { - static const unsigned char yybm[] = { - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 160, 0, 144, 144, 0, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 240, 128, 128, 144, 128, 144, 128, 144, - 128, 128, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 128, 144, 128, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 128, 144, 144, 128, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 128, 128, 128, 128, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - }; - - YYDEBUG(0, *YYCURSOR); - YYFILL(5); - yych = *YYCURSOR; - YYDEBUG(-1, yych); - switch (yych) { - case '\t': goto yy4; - case '\n': goto yy6; - case '\r': goto yy8; - case ' ': goto yy9; - case '!': - case '"': - case '$': - case '&': - case '(': - case ')': - case '^': - case '{': - case '|': - case '}': - case '~': goto yy10; - case '#': goto yy12; - case '%': - case '\'': - case '*': - case '+': - case ',': - case '-': - case '.': - case '/': - case ':': - case '<': - case '>': - case '?': - case '@': - case ']': goto yy13; - case ';': goto yy14; - case '=': goto yy16; - case 'F': - case 'f': goto yy18; - case 'N': - case 'n': goto yy19; - case 'O': - case 'o': goto yy20; - case 'T': - case 't': goto yy21; - case 'Y': - case 'y': goto yy22; - case '[': goto yy23; - default: goto yy2; - } -yy2: - YYDEBUG(2, *YYCURSOR); - ++YYCURSOR; - yych = *YYCURSOR; - goto yy26; -yy3: - YYDEBUG(3, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 429 "Zend/zend_ini_scanner.l" - { /* Get option name */ - /* Eat leading whitespace */ - EAT_LEADING_WHITESPACE(); - - /* Eat trailing whitespace */ - EAT_TRAILING_WHITESPACE(); - - RETURN_TOKEN(TC_LABEL, yytext, yyleng); -} -#line 476 "Zend/zend_ini_scanner.c" -yy4: - YYDEBUG(4, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - goto yy68; -yy5: - YYDEBUG(5, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 575 "Zend/zend_ini_scanner.l" - { - /* eat whitespace */ - goto restart; -} -#line 490 "Zend/zend_ini_scanner.c" -yy6: - YYDEBUG(6, *YYCURSOR); - ++YYCURSOR; -yy7: - YYDEBUG(7, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 580 "Zend/zend_ini_scanner.l" - { - SCNG(lineno)++; - return END_OF_LINE; -} -#line 502 "Zend/zend_ini_scanner.c" -yy8: - YYDEBUG(8, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '\n') goto yy71; - goto yy7; -yy9: - YYDEBUG(9, *YYCURSOR); - yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= ' ') { - if (yych <= '\n') { - if (yych <= 0x08) goto yy26; - if (yych <= '\t') goto yy67; - goto yy71; - } else { - if (yych == '\r') goto yy72; - if (yych <= 0x1F) goto yy26; - goto yy69; - } - } else { - if (yych <= ':') { - if (yych == '#') goto yy58; - goto yy26; - } else { - if (yych <= ';') goto yy53; - if (yych == '=') goto yy51; - goto yy26; - } - } -yy10: - YYDEBUG(10, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(11, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 503 "Zend/zend_ini_scanner.l" - { /* Disallow these chars outside option values */ - return yytext[0]; -} -#line 541 "Zend/zend_ini_scanner.c" -yy12: - YYDEBUG(12, *YYCURSOR); - yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - goto yy59; -yy13: - YYDEBUG(13, *YYCURSOR); - yych = *++YYCURSOR; - goto yy26; -yy14: - YYDEBUG(14, *YYCURSOR); - yyaccept = 2; - yych = *(YYMARKER = ++YYCURSOR); - goto yy54; - YYDEBUG(15, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 603 "Zend/zend_ini_scanner.l" - { - return 0; -} -#line 562 "Zend/zend_ini_scanner.c" -yy16: - YYDEBUG(16, *YYCURSOR); - ++YYCURSOR; - yych = *YYCURSOR; - goto yy52; -yy17: - YYDEBUG(17, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 439 "Zend/zend_ini_scanner.l" - { /* Start option value */ - if (SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW) { - yy_push_state(ST_RAW TSRMLS_CC); - } else { - yy_push_state(ST_VALUE TSRMLS_CC); - } - return '='; -} -#line 580 "Zend/zend_ini_scanner.c" -yy18: - YYDEBUG(18, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'A') goto yy48; - if (yych == 'a') goto yy48; - goto yy26; -yy19: - YYDEBUG(19, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= 'U') { - if (yych == 'O') goto yy44; - if (yych <= 'T') goto yy26; - goto yy45; - } else { - if (yych <= 'o') { - if (yych <= 'n') goto yy26; - goto yy44; - } else { - if (yych == 'u') goto yy45; - goto yy26; - } - } -yy20: - YYDEBUG(20, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= 'N') { - if (yych == 'F') goto yy38; - if (yych <= 'M') goto yy26; - goto yy31; - } else { - if (yych <= 'f') { - if (yych <= 'e') goto yy26; - goto yy38; - } else { - if (yych == 'n') goto yy31; - goto yy26; - } - } -yy21: - YYDEBUG(21, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'R') goto yy36; - if (yych == 'r') goto yy36; - goto yy26; -yy22: - YYDEBUG(22, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy27; - if (yych == 'e') goto yy27; - goto yy26; -yy23: - YYDEBUG(23, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(24, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 358 "Zend/zend_ini_scanner.l" - { /* Section start */ - /* Enter section data lookup state */ - if (SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW) { - yy_push_state(ST_SECTION_RAW TSRMLS_CC); - } else { - yy_push_state(ST_SECTION_VALUE TSRMLS_CC); - } - return TC_SECTION; -} -#line 646 "Zend/zend_ini_scanner.c" -yy25: - YYDEBUG(25, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; -yy26: - YYDEBUG(26, *YYCURSOR); - if (yybm[0+yych] & 16) { - goto yy25; - } - if (yych == '[') goto yy28; - goto yy3; -yy27: - YYDEBUG(27, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'S') goto yy31; - if (yych == 's') goto yy31; - goto yy26; -yy28: - YYDEBUG(28, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(29, *YYCURSOR); - if (yybm[0+yych] & 32) { - goto yy28; - } - YYDEBUG(30, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 383 "Zend/zend_ini_scanner.l" - { /* Start of option with offset */ - /* Eat leading whitespace */ - EAT_LEADING_WHITESPACE(); - - /* Eat trailing whitespace and [ */ - EAT_TRAILING_WHITESPACE_EX('['); - - /* Enter offset lookup state */ - yy_push_state(ST_OFFSET TSRMLS_CC); - - RETURN_TOKEN(TC_OFFSET, yytext, yyleng); -} -#line 689 "Zend/zend_ini_scanner.c" -yy31: - YYDEBUG(31, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(32, *YYCURSOR); - if (yybm[0+yych] & 64) { - goto yy31; - } - if (yych <= '\'') { - if (yych <= ' ') { - if (yych <= '\n') { - if (yych <= 0x08) goto yy25; - if (yych <= '\t') goto yy34; - } else { - if (yych != '\r') goto yy25; - } - } else { - if (yych <= '$') { - if (yych == '#') goto yy25; - } else { - if (yych != '&') goto yy25; - } - } - } else { - if (yych <= 'Z') { - if (yych <= ';') { - if (yych <= ')') goto yy33; - if (yych <= ':') goto yy25; - } else { - if (yych != '=') goto yy25; - } - } else { - if (yych <= '^') { - if (yych <= '[') goto yy28; - if (yych <= ']') goto yy25; - } else { - if (yych <= 'z') goto yy25; - if (yych >= 0x7F) goto yy25; - } - } - } -yy33: - YYDEBUG(33, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 421 "Zend/zend_ini_scanner.l" - { /* TRUE value (when used outside option value/offset this causes parse error!) */ - RETURN_TOKEN(BOOL_TRUE, "1", 1); -} -#line 739 "Zend/zend_ini_scanner.c" -yy34: - YYDEBUG(34, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(35, *YYCURSOR); - if (yych == '\t') goto yy34; - if (yych == ' ') goto yy34; - goto yy33; -yy36: - YYDEBUG(36, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'U') goto yy37; - if (yych != 'u') goto yy26; -yy37: - YYDEBUG(37, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy31; - if (yych == 'e') goto yy31; - goto yy26; -yy38: - YYDEBUG(38, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'F') goto yy39; - if (yych != 'f') goto yy26; -yy39: - YYDEBUG(39, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(40, *YYCURSOR); - if (yych <= '&') { - if (yych <= 0x1F) { - if (yych <= '\n') { - if (yych <= 0x08) goto yy25; - if (yych <= '\t') goto yy42; - } else { - if (yych != '\r') goto yy25; - } - } else { - if (yych <= '#') { - if (yych <= ' ') goto yy39; - if (yych >= '#') goto yy25; - } else { - if (yych == '%') goto yy25; - } - } - } else { - if (yych <= '=') { - if (yych <= ':') { - if (yych <= '\'') goto yy25; - if (yych >= '*') goto yy25; - } else { - if (yych == '<') goto yy25; - } - } else { - if (yych <= ']') { - if (yych == '[') goto yy28; - goto yy25; - } else { - if (yych <= '^') goto yy41; - if (yych <= 'z') goto yy25; - if (yych >= 0x7F) goto yy25; - } - } - } -yy41: - YYDEBUG(41, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 425 "Zend/zend_ini_scanner.l" - { /* FALSE value (when used outside option value/offset this causes parse error!)*/ - RETURN_TOKEN(BOOL_FALSE, "", 0); -} -#line 813 "Zend/zend_ini_scanner.c" -yy42: - YYDEBUG(42, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(43, *YYCURSOR); - if (yych == '\t') goto yy42; - if (yych == ' ') goto yy42; - goto yy41; -yy44: - YYDEBUG(44, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= '\'') { - if (yych <= 0x1F) { - if (yych <= '\n') { - if (yych <= 0x08) goto yy26; - if (yych <= '\t') goto yy42; - goto yy41; - } else { - if (yych == '\r') goto yy41; - goto yy26; - } - } else { - if (yych <= '#') { - if (yych <= ' ') goto yy39; - if (yych <= '"') goto yy41; - goto yy26; - } else { - if (yych == '%') goto yy26; - if (yych <= '&') goto yy41; - goto yy26; - } - } - } else { - if (yych <= 'N') { - if (yych <= ';') { - if (yych <= ')') goto yy41; - if (yych <= ':') goto yy26; - goto yy41; - } else { - if (yych == '=') goto yy41; - if (yych <= 'M') goto yy26; - goto yy47; - } - } else { - if (yych <= 'm') { - if (yych == '^') goto yy41; - goto yy26; - } else { - if (yych <= 'n') goto yy47; - if (yych <= 'z') goto yy26; - if (yych <= '~') goto yy41; - goto yy26; - } - } - } -yy45: - YYDEBUG(45, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'L') goto yy46; - if (yych != 'l') goto yy26; -yy46: - YYDEBUG(46, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'L') goto yy39; - if (yych == 'l') goto yy39; - goto yy26; -yy47: - YYDEBUG(47, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy39; - if (yych == 'e') goto yy39; - goto yy26; -yy48: - YYDEBUG(48, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'L') goto yy49; - if (yych != 'l') goto yy26; -yy49: - YYDEBUG(49, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'S') goto yy50; - if (yych != 's') goto yy26; -yy50: - YYDEBUG(50, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy39; - if (yych == 'e') goto yy39; - goto yy26; -yy51: - YYDEBUG(51, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; -yy52: - YYDEBUG(52, *YYCURSOR); - if (yych == '\t') goto yy51; - if (yych == ' ') goto yy51; - goto yy17; -yy53: - YYDEBUG(53, *YYCURSOR); - ++YYCURSOR; - YYFILL(2); - yych = *YYCURSOR; -yy54: - YYDEBUG(54, *YYCURSOR); - if (yybm[0+yych] & 128) { - goto yy53; - } - if (yych >= '\r') goto yy57; -yy55: - YYDEBUG(55, *YYCURSOR); - ++YYCURSOR; -yy56: - YYDEBUG(56, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 585 "Zend/zend_ini_scanner.l" - { /* Comment */ - BEGIN(INITIAL); - SCNG(lineno)++; - return END_OF_LINE; -} -#line 936 "Zend/zend_ini_scanner.c" -yy57: - YYDEBUG(57, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '\n') goto yy55; - goto yy56; -yy58: - YYDEBUG(58, *YYCURSOR); - yyaccept = 1; - YYMARKER = ++YYCURSOR; - YYFILL(2); - yych = *YYCURSOR; -yy59: - YYDEBUG(59, *YYCURSOR); - if (yych <= '\'') { - if (yych <= ' ') { - if (yych <= '\n') { - if (yych <= 0x08) goto yy58; - if (yych >= '\n') goto yy64; - } else { - if (yych == '\r') goto yy66; - goto yy58; - } - } else { - if (yych <= '$') { - if (yych == '#') goto yy58; - } else { - if (yych != '&') goto yy58; - } - } - } else { - if (yych <= 'Z') { - if (yych <= ';') { - if (yych <= ')') goto yy60; - if (yych <= ':') goto yy58; - } else { - if (yych != '=') goto yy58; - } - } else { - if (yych <= '^') { - if (yych <= '[') goto yy62; - if (yych <= ']') goto yy58; - } else { - if (yych <= 'z') goto yy58; - if (yych >= 0x7F) goto yy58; - } - } - } -yy60: - YYDEBUG(60, *YYCURSOR); - ++YYCURSOR; - YYFILL(2); - yych = *YYCURSOR; - YYDEBUG(61, *YYCURSOR); - if (yych == '\n') goto yy64; - if (yych == '\r') goto yy66; - goto yy60; -yy62: - YYDEBUG(62, *YYCURSOR); - yyaccept = 3; - YYMARKER = ++YYCURSOR; - YYFILL(2); - yych = *YYCURSOR; - YYDEBUG(63, *YYCURSOR); - if (yych <= '\f') { - if (yych <= 0x08) goto yy60; - if (yych <= '\t') goto yy62; - if (yych >= '\v') goto yy60; - } else { - if (yych <= '\r') goto yy66; - if (yych == ' ') goto yy62; - goto yy60; - } -yy64: - YYDEBUG(64, *YYCURSOR); - ++YYCURSOR; -yy65: - YYDEBUG(65, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 591 "Zend/zend_ini_scanner.l" - { /* #Comment */ - zend_error(E_DEPRECATED, "Comments starting with '#' are deprecated in %s on line %d", zend_ini_scanner_get_filename(TSRMLS_C), SCNG(lineno)); - BEGIN(INITIAL); - SCNG(lineno)++; - return END_OF_LINE; -} -#line 1022 "Zend/zend_ini_scanner.c" -yy66: - YYDEBUG(66, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '\n') goto yy64; - goto yy65; -yy67: - YYDEBUG(67, *YYCURSOR); - yyaccept = 0; - YYMARKER = ++YYCURSOR; - YYFILL(2); - yych = *YYCURSOR; -yy68: - YYDEBUG(68, *YYCURSOR); - if (yych <= ' ') { - if (yych <= '\n') { - if (yych <= 0x08) goto yy5; - if (yych <= '\t') goto yy67; - goto yy71; - } else { - if (yych == '\r') goto yy72; - if (yych <= 0x1F) goto yy5; - goto yy67; - } - } else { - if (yych <= ':') { - if (yych == '#') goto yy60; - goto yy5; - } else { - if (yych <= ';') goto yy53; - if (yych == '=') goto yy51; - goto yy5; - } - } -yy69: - YYDEBUG(69, *YYCURSOR); - yyaccept = 1; - YYMARKER = ++YYCURSOR; - YYFILL(2); - yych = *YYCURSOR; - YYDEBUG(70, *YYCURSOR); - if (yych <= '&') { - if (yych <= 0x1F) { - if (yych <= '\n') { - if (yych <= 0x08) goto yy25; - if (yych <= '\t') goto yy67; - } else { - if (yych == '\r') goto yy72; - goto yy25; - } - } else { - if (yych <= '#') { - if (yych <= ' ') goto yy69; - if (yych <= '"') goto yy3; - goto yy58; - } else { - if (yych == '%') goto yy25; - goto yy3; - } - } - } else { - if (yych <= '=') { - if (yych <= ':') { - if (yych <= '\'') goto yy25; - if (yych <= ')') goto yy3; - goto yy25; - } else { - if (yych <= ';') goto yy53; - if (yych <= '<') goto yy25; - goto yy51; - } - } else { - if (yych <= ']') { - if (yych == '[') goto yy28; - goto yy25; - } else { - if (yych <= '^') goto yy3; - if (yych <= 'z') goto yy25; - if (yych <= '~') goto yy3; - goto yy25; - } - } - } -yy71: - YYDEBUG(71, *YYCURSOR); - yych = *++YYCURSOR; - goto yy7; -yy72: - YYDEBUG(72, *YYCURSOR); - ++YYCURSOR; - if ((yych = *YYCURSOR) == '\n') goto yy71; - goto yy7; - } -/* *********************************** */ -yyc_ST_DOUBLE_QUOTES: - { - static const unsigned char yybm[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 128, 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, 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, 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, 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, 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, - }; - YYDEBUG(73, *YYCURSOR); - YYFILL(2); - yych = *YYCURSOR; - if (yych == '"') goto yy77; - if (yych == '$') goto yy79; - YYDEBUG(75, *YYCURSOR); - ++YYCURSOR; -yy76: - YYDEBUG(76, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 535 "Zend/zend_ini_scanner.l" - { /* Escape double quoted string contents */ - if (YYCURSOR > YYLIMIT) { - return 0; - } - - while (YYCURSOR < YYLIMIT) { - switch (*YYCURSOR++) { - case '"': - if (YYCURSOR < YYLIMIT && YYCURSOR[-2] == '\\' && *YYCURSOR != '\r' && *YYCURSOR != '\n') { - continue; - } - break; - case '$': - if (*YYCURSOR == '{') { - break; - } - continue; - case '\\': - if (YYCURSOR < YYLIMIT && *YYCURSOR != '"') { - YYCURSOR++; - } - /* fall through */ - default: - continue; - } - - YYCURSOR--; - break; - } - - yyleng = YYCURSOR - SCNG(yy_text); - - zend_ini_escape_string(ini_lval, yytext, yyleng, '"' TSRMLS_CC); - return TC_QUOTED_STRING; -} -#line 1198 "Zend/zend_ini_scanner.c" -yy77: - YYDEBUG(77, *YYCURSOR); - ++YYCURSOR; - yych = *YYCURSOR; - goto yy83; -yy78: - YYDEBUG(78, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 530 "Zend/zend_ini_scanner.l" - { /* Double quoted '"' string ends */ - yy_pop_state(TSRMLS_C); - return '"'; -} -#line 1212 "Zend/zend_ini_scanner.c" -yy79: - YYDEBUG(79, *YYCURSOR); - yych = *++YYCURSOR; - if (yych != '{') goto yy76; - YYDEBUG(80, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(81, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 401 "Zend/zend_ini_scanner.l" - { /* Variable start */ - yy_push_state(ST_VARNAME TSRMLS_CC); - return TC_DOLLAR_CURLY; -} -#line 1226 "Zend/zend_ini_scanner.c" -yy82: - YYDEBUG(82, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; -yy83: - YYDEBUG(83, *YYCURSOR); - if (yybm[0+yych] & 128) { - goto yy82; - } - goto yy78; - } -/* *********************************** */ -yyc_ST_OFFSET: - { - static const unsigned char yybm[] = { - 66, 66, 66, 66, 66, 66, 66, 66, - 66, 194, 64, 66, 66, 64, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, - 194, 66, 64, 66, 68, 66, 66, 0, - 66, 66, 66, 66, 66, 66, 66, 66, - 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 66, 64, 66, 66, 66, 66, - 66, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 66, 72, 64, 66, 82, - 66, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, - }; - YYDEBUG(84, *YYCURSOR); - YYFILL(2); - yych = *YYCURSOR; - if (yych <= '-') { - if (yych <= ' ') { - if (yych <= '\n') { - if (yych <= 0x08) goto yy86; - if (yych <= '\t') goto yy88; - goto yy89; - } else { - if (yych == '\r') goto yy89; - if (yych >= ' ') goto yy88; - } - } else { - if (yych <= '$') { - if (yych == '"') goto yy91; - if (yych >= '$') goto yy93; - } else { - if (yych == '\'') goto yy94; - if (yych >= '-') goto yy95; - } - } - } else { - if (yych <= 'Z') { - if (yych <= '9') { - if (yych <= '.') goto yy96; - if (yych >= '0') goto yy97; - } else { - if (yych == ';') goto yy89; - if (yych >= 'A') goto yy99; - } - } else { - if (yych <= '^') { - if (yych <= '[') goto yy86; - if (yych <= '\\') goto yy101; - if (yych <= ']') goto yy102; - } else { - if (yych == '`') goto yy86; - if (yych <= 'z') goto yy99; - } - } - } -yy86: - YYDEBUG(86, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - goto yy105; -yy87: - YYDEBUG(87, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 521 "Zend/zend_ini_scanner.l" - { /* Get rest as section/offset value */ - RETURN_TOKEN(TC_STRING, yytext, yyleng); -} -#line 1330 "Zend/zend_ini_scanner.c" -yy88: - YYDEBUG(88, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yybm[0+yych] & 128) { - goto yy131; - } - if (yych == '"') goto yy133; - if (yych == ']') goto yy134; - goto yy105; -yy89: - YYDEBUG(89, *YYCURSOR); - ++YYCURSOR; -yy90: - YYDEBUG(90, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 603 "Zend/zend_ini_scanner.l" - { - return 0; -} -#line 1351 "Zend/zend_ini_scanner.c" -yy91: - YYDEBUG(91, *YYCURSOR); - ++YYCURSOR; -yy92: - YYDEBUG(92, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 525 "Zend/zend_ini_scanner.l" - { /* Double quoted '"' string start */ - yy_push_state(ST_DOUBLE_QUOTES TSRMLS_CC); - return '"'; -} -#line 1363 "Zend/zend_ini_scanner.c" -yy93: - YYDEBUG(93, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= '\\') { - if (yych <= 0x00) goto yy90; - if (yych <= '[') goto yy104; - goto yy109; - } else { - if (yych == '{') goto yy129; - goto yy104; - } -yy94: - YYDEBUG(94, *YYCURSOR); - yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - if (yybm[0+yych] & 64) { - goto yy125; - } - goto yy90; -yy95: - YYDEBUG(95, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '/') goto yy105; - if (yych <= '9') goto yy123; - goto yy105; -yy96: - YYDEBUG(96, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '/') goto yy105; - if (yych <= '9') goto yy121; - goto yy105; -yy97: - YYDEBUG(97, *YYCURSOR); - yyaccept = 2; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '\'') { - if (yych <= '\r') { - if (yych == '\n') goto yy98; - if (yych <= '\f') goto yy105; - } else { - if (yych == '"') goto yy98; - if (yych <= '&') goto yy105; - } - } else { - if (yych <= '9') { - if (yych == '.') goto yy117; - if (yych <= '/') goto yy105; - goto yy119; - } else { - if (yych <= ';') { - if (yych <= ':') goto yy105; - } else { - if (yych != ']') goto yy105; - } - } - } -yy98: - YYDEBUG(98, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 499 "Zend/zend_ini_scanner.l" - { /* Get number option value as string */ - RETURN_TOKEN(TC_NUMBER, yytext, yyleng); -} -#line 1429 "Zend/zend_ini_scanner.c" -yy99: - YYDEBUG(99, *YYCURSOR); - yyaccept = 3; - yych = *(YYMARKER = ++YYCURSOR); - if (yybm[0+yych] & 16) { - goto yy115; - } - if (yych <= '"') { - if (yych <= '\f') { - if (yych != '\n') goto yy105; - } else { - if (yych <= '\r') goto yy100; - if (yych <= '!') goto yy105; - } - } else { - if (yych <= ':') { - if (yych != '\'') goto yy105; - } else { - if (yych <= ';') goto yy100; - if (yych != ']') goto yy105; - } - } -yy100: - YYDEBUG(100, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 495 "Zend/zend_ini_scanner.l" - { /* Get constant option value */ - RETURN_TOKEN(TC_CONSTANT, yytext, yyleng); -} -#line 1459 "Zend/zend_ini_scanner.c" -yy101: - YYDEBUG(101, *YYCURSOR); - yych = *++YYCURSOR; - goto yy104; -yy102: - YYDEBUG(102, *YYCURSOR); - ++YYCURSOR; -yy103: - YYDEBUG(103, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 396 "Zend/zend_ini_scanner.l" - { /* End of section or an option offset */ - BEGIN(INITIAL); - return ']'; -} -#line 1475 "Zend/zend_ini_scanner.c" -yy104: - YYDEBUG(104, *YYCURSOR); - yyaccept = 0; - YYMARKER = ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; -yy105: - YYDEBUG(105, *YYCURSOR); - if (yybm[0+yych] & 2) { - goto yy104; - } - if (yych == '$') goto yy107; - if (yych != '\\') goto yy87; -yy106: - YYDEBUG(106, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - goto yy104; -yy107: - YYDEBUG(107, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - if (yych <= '\\') { - if (yych <= 0x00) goto yy108; - if (yych <= '[') goto yy104; - goto yy109; - } else { - if (yych != '{') goto yy104; - } -yy108: - YYDEBUG(108, *YYCURSOR); - YYCURSOR = YYMARKER; - if (yyaccept <= 1) { - if (yyaccept <= 0) { - goto yy87; - } else { - goto yy90; - } - } else { - if (yyaccept <= 2) { - goto yy98; - } else { - goto yy100; - } - } -yy109: - YYDEBUG(109, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - if (yybm[0+yych] & 4) { - goto yy110; - } - if (yych == '\\') goto yy112; - goto yy104; -yy110: - YYDEBUG(110, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(111, *YYCURSOR); - if (yybm[0+yych] & 4) { - goto yy110; - } - if (yych == '\\') goto yy114; - goto yy104; -yy112: - YYDEBUG(112, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(113, *YYCURSOR); - if (yybm[0+yych] & 4) { - goto yy110; - } - if (yych == '\\') goto yy112; - goto yy104; -yy114: - YYDEBUG(114, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - if (yybm[0+yych] & 4) { - goto yy110; - } - if (yych == '\\') goto yy112; - goto yy104; -yy115: - YYDEBUG(115, *YYCURSOR); - yyaccept = 3; - YYMARKER = ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(116, *YYCURSOR); - if (yybm[0+yych] & 16) { - goto yy115; - } - if (yych <= '$') { - if (yych <= '\r') { - if (yych == '\n') goto yy100; - if (yych <= '\f') goto yy104; - goto yy100; - } else { - if (yych == '"') goto yy100; - if (yych <= '#') goto yy104; - goto yy107; - } - } else { - if (yych <= ';') { - if (yych == '\'') goto yy100; - if (yych <= ':') goto yy104; - goto yy100; - } else { - if (yych <= '[') goto yy104; - if (yych <= '\\') goto yy106; - if (yych <= ']') goto yy100; - goto yy104; - } - } -yy117: - YYDEBUG(117, *YYCURSOR); - yyaccept = 2; - YYMARKER = ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(118, *YYCURSOR); - if (yybm[0+yych] & 32) { - goto yy117; - } - if (yych <= '$') { - if (yych <= '\r') { - if (yych == '\n') goto yy98; - if (yych <= '\f') goto yy104; - goto yy98; - } else { - if (yych == '"') goto yy98; - if (yych <= '#') goto yy104; - goto yy107; - } - } else { - if (yych <= ';') { - if (yych == '\'') goto yy98; - if (yych <= ':') goto yy104; - goto yy98; - } else { - if (yych <= '[') goto yy104; - if (yych <= '\\') goto yy106; - if (yych <= ']') goto yy98; - goto yy104; - } - } -yy119: - YYDEBUG(119, *YYCURSOR); - yyaccept = 2; - YYMARKER = ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(120, *YYCURSOR); - if (yych <= '\'') { - if (yych <= '!') { - if (yych <= '\n') { - if (yych <= '\t') goto yy104; - goto yy98; - } else { - if (yych == '\r') goto yy98; - goto yy104; - } - } else { - if (yych <= '#') { - if (yych <= '"') goto yy98; - goto yy104; - } else { - if (yych <= '$') goto yy107; - if (yych <= '&') goto yy104; - goto yy98; - } - } - } else { - if (yych <= ':') { - if (yych <= '.') { - if (yych <= '-') goto yy104; - goto yy117; - } else { - if (yych <= '/') goto yy104; - if (yych <= '9') goto yy119; - goto yy104; - } - } else { - if (yych <= '[') { - if (yych <= ';') goto yy98; - goto yy104; - } else { - if (yych <= '\\') goto yy106; - if (yych <= ']') goto yy98; - goto yy104; - } - } - } -yy121: - YYDEBUG(121, *YYCURSOR); - yyaccept = 2; - YYMARKER = ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(122, *YYCURSOR); - if (yych <= '&') { - if (yych <= '\r') { - if (yych == '\n') goto yy98; - if (yych <= '\f') goto yy104; - goto yy98; - } else { - if (yych <= '"') { - if (yych <= '!') goto yy104; - goto yy98; - } else { - if (yych == '$') goto yy107; - goto yy104; - } - } - } else { - if (yych <= ':') { - if (yych <= '\'') goto yy98; - if (yych <= '/') goto yy104; - if (yych <= '9') goto yy121; - goto yy104; - } else { - if (yych <= '[') { - if (yych <= ';') goto yy98; - goto yy104; - } else { - if (yych <= '\\') goto yy106; - if (yych <= ']') goto yy98; - goto yy104; - } - } - } -yy123: - YYDEBUG(123, *YYCURSOR); - yyaccept = 2; - YYMARKER = ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(124, *YYCURSOR); - if (yych <= '&') { - if (yych <= '\r') { - if (yych == '\n') goto yy98; - if (yych <= '\f') goto yy104; - goto yy98; - } else { - if (yych <= '"') { - if (yych <= '!') goto yy104; - goto yy98; - } else { - if (yych == '$') goto yy107; - goto yy104; - } - } - } else { - if (yych <= ':') { - if (yych <= '\'') goto yy98; - if (yych <= '/') goto yy104; - if (yych <= '9') goto yy123; - goto yy104; - } else { - if (yych <= '[') { - if (yych <= ';') goto yy98; - goto yy104; - } else { - if (yych <= '\\') goto yy106; - if (yych <= ']') goto yy98; - goto yy104; - } - } - } -yy125: - YYDEBUG(125, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(126, *YYCURSOR); - if (yybm[0+yych] & 64) { - goto yy125; - } - YYDEBUG(127, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(128, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 368 "Zend/zend_ini_scanner.l" - { /* Raw string */ - /* Eat leading and trailing single quotes */ - if (yytext[0] == '\'' && yytext[yyleng - 1] == '\'') { - SCNG(yy_text)++; - yyleng = yyleng - 2; - } - RETURN_TOKEN(TC_RAW, yytext, yyleng); -} -#line 1774 "Zend/zend_ini_scanner.c" -yy129: - YYDEBUG(129, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(130, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 401 "Zend/zend_ini_scanner.l" - { /* Variable start */ - yy_push_state(ST_VARNAME TSRMLS_CC); - return TC_DOLLAR_CURLY; -} -#line 1785 "Zend/zend_ini_scanner.c" -yy131: - YYDEBUG(131, *YYCURSOR); - yyaccept = 0; - YYMARKER = ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(132, *YYCURSOR); - if (yybm[0+yych] & 128) { - goto yy131; - } - if (yych <= '$') { - if (yych <= '\r') { - if (yych == '\n') goto yy87; - if (yych <= '\f') goto yy104; - goto yy87; - } else { - if (yych == '"') goto yy133; - if (yych <= '#') goto yy104; - goto yy107; - } - } else { - if (yych <= ';') { - if (yych == '\'') goto yy87; - if (yych <= ':') goto yy104; - goto yy87; - } else { - if (yych <= '[') goto yy104; - if (yych <= '\\') goto yy106; - if (yych <= ']') goto yy134; - goto yy104; - } - } -yy133: - YYDEBUG(133, *YYCURSOR); - yych = *++YYCURSOR; - goto yy92; -yy134: - YYDEBUG(134, *YYCURSOR); - ++YYCURSOR; - yych = *YYCURSOR; - goto yy103; - } -/* *********************************** */ -yyc_ST_RAW: - { - static const unsigned char yybm[] = { - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 192, 0, 64, 64, 0, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 192, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - }; - YYDEBUG(135, *YYCURSOR); - YYFILL(3); - yych = *YYCURSOR; - if (yych <= '\f') { - if (yych <= 0x08) { - if (yych >= 0x01) goto yy139; - } else { - if (yych <= '\t') goto yy141; - if (yych <= '\n') goto yy142; - goto yy139; - } - } else { - if (yych <= ' ') { - if (yych <= '\r') goto yy144; - if (yych <= 0x1F) goto yy139; - goto yy141; - } else { - if (yych == ';') goto yy145; - goto yy139; - } - } - YYDEBUG(137, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(138, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 598 "Zend/zend_ini_scanner.l" - { /* End of option value (if EOF is reached before EOL */ - BEGIN(INITIAL); - return END_OF_LINE; -} -#line 1895 "Zend/zend_ini_scanner.c" -yy139: - YYDEBUG(139, *YYCURSOR); - ++YYCURSOR; -yy140: - YYDEBUG(140, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 448 "Zend/zend_ini_scanner.l" - { /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */ - char *sc = NULL; - while (YYCURSOR < YYLIMIT) { - switch (*YYCURSOR) { - case '\n': - case '\r': - goto end_raw_value_chars; - break; - case ';': - if (sc == NULL) { - sc = YYCURSOR; - } - /* no break */ - default: - YYCURSOR++; - break; - } - } -end_raw_value_chars: - yyleng = YYCURSOR - SCNG(yy_text); - - /* Eat trailing semicolons */ - while (yytext[yyleng - 1] == ';') { - yyleng--; - } - - /* Eat leading and trailing double quotes */ - if (yytext[0] == '"' && yytext[yyleng - 1] == '"') { - SCNG(yy_text)++; - yyleng = yyleng - 2; - } else if (sc) { - YYCURSOR = sc; - yyleng = YYCURSOR - SCNG(yy_text); - } - RETURN_TOKEN(TC_RAW, yytext, yyleng); -} -#line 1939 "Zend/zend_ini_scanner.c" -yy141: - YYDEBUG(141, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '\r') { - if (yych <= 0x08) goto yy140; - if (yych <= '\n') goto yy153; - if (yych <= '\f') goto yy140; - goto yy153; - } else { - if (yych <= ' ') { - if (yych <= 0x1F) goto yy140; - goto yy153; - } else { - if (yych == ';') goto yy153; - goto yy140; - } - } -yy142: - YYDEBUG(142, *YYCURSOR); - ++YYCURSOR; -yy143: - YYDEBUG(143, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 489 "Zend/zend_ini_scanner.l" - { /* End of option value */ - BEGIN(INITIAL); - SCNG(lineno)++; - return END_OF_LINE; -} -#line 1970 "Zend/zend_ini_scanner.c" -yy144: - YYDEBUG(144, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '\n') goto yy151; - goto yy143; -yy145: - YYDEBUG(145, *YYCURSOR); - yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - goto yy147; -yy146: - YYDEBUG(146, *YYCURSOR); - ++YYCURSOR; - YYFILL(2); - yych = *YYCURSOR; -yy147: - YYDEBUG(147, *YYCURSOR); - if (yybm[0+yych] & 64) { - goto yy146; - } - if (yych >= '\r') goto yy150; -yy148: - YYDEBUG(148, *YYCURSOR); - ++YYCURSOR; -yy149: - YYDEBUG(149, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 585 "Zend/zend_ini_scanner.l" - { /* Comment */ - BEGIN(INITIAL); - SCNG(lineno)++; - return END_OF_LINE; -} -#line 2004 "Zend/zend_ini_scanner.c" -yy150: - YYDEBUG(150, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '\n') goto yy148; - goto yy149; -yy151: - YYDEBUG(151, *YYCURSOR); - yych = *++YYCURSOR; - goto yy143; -yy152: - YYDEBUG(152, *YYCURSOR); - yyaccept = 2; - YYMARKER = ++YYCURSOR; - YYFILL(2); - yych = *YYCURSOR; -yy153: - YYDEBUG(153, *YYCURSOR); - if (yybm[0+yych] & 128) { - goto yy152; - } - if (yych <= '\f') { - if (yych == '\n') goto yy151; - } else { - if (yych <= '\r') goto yy155; - if (yych == ';') goto yy146; - } - YYDEBUG(154, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 575 "Zend/zend_ini_scanner.l" - { - /* eat whitespace */ - goto restart; -} -#line 2038 "Zend/zend_ini_scanner.c" -yy155: - YYDEBUG(155, *YYCURSOR); - ++YYCURSOR; - if ((yych = *YYCURSOR) == '\n') goto yy151; - goto yy143; - } -/* *********************************** */ -yyc_ST_SECTION_RAW: - { - static const unsigned char yybm[] = { - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 192, 0, 128, 128, 0, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 192, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 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, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 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(156, *YYCURSOR); - YYFILL(3); - yych = *YYCURSOR; - if (yych <= '\f') { - if (yych == '\n') goto yy160; - } else { - if (yych <= '\r') goto yy160; - if (yych == ']') goto yy162; - } - YYDEBUG(158, *YYCURSOR); - ++YYCURSOR; - yych = *YYCURSOR; - goto yy169; -yy159: - YYDEBUG(159, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 485 "Zend/zend_ini_scanner.l" - { /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */ - RETURN_TOKEN(TC_RAW, yytext, yyleng); -} -#line 2102 "Zend/zend_ini_scanner.c" -yy160: - YYDEBUG(160, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(161, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 603 "Zend/zend_ini_scanner.l" - { - return 0; -} -#line 2112 "Zend/zend_ini_scanner.c" -yy162: - YYDEBUG(162, *YYCURSOR); - ++YYCURSOR; - yych = *YYCURSOR; - goto yy165; -yy163: - YYDEBUG(163, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 377 "Zend/zend_ini_scanner.l" - { /* End of section */ - BEGIN(INITIAL); - SCNG(lineno)++; - return ']'; -} -#line 2127 "Zend/zend_ini_scanner.c" -yy164: - YYDEBUG(164, *YYCURSOR); - ++YYCURSOR; - YYFILL(2); - yych = *YYCURSOR; -yy165: - YYDEBUG(165, *YYCURSOR); - if (yybm[0+yych] & 64) { - goto yy164; - } - if (yych == '\n') goto yy166; - if (yych == '\r') goto yy167; - goto yy163; -yy166: - YYDEBUG(166, *YYCURSOR); - yych = *++YYCURSOR; - goto yy163; -yy167: - YYDEBUG(167, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '\n') goto yy166; - goto yy163; -yy168: - YYDEBUG(168, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; -yy169: - YYDEBUG(169, *YYCURSOR); - if (yybm[0+yych] & 128) { - goto yy168; - } - goto yy159; - } -/* *********************************** */ -yyc_ST_SECTION_VALUE: - { - static const unsigned char yybm[] = { - 132, 132, 132, 132, 132, 132, 132, 132, - 132, 134, 128, 132, 132, 128, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, - 134, 132, 128, 132, 136, 132, 132, 0, - 132, 132, 132, 132, 132, 132, 132, 132, - 228, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 132, 128, 132, 132, 132, 132, - 132, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 132, 144, 128, 132, 164, - 132, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 132, 132, 132, 132, 132, - }; - YYDEBUG(170, *YYCURSOR); - YYFILL(3); - yych = *YYCURSOR; - if (yych <= '-') { - if (yych <= ' ') { - if (yych <= '\n') { - if (yych <= 0x08) goto yy172; - if (yych <= '\t') goto yy174; - goto yy175; - } else { - if (yych == '\r') goto yy175; - if (yych >= ' ') goto yy174; - } - } else { - if (yych <= '$') { - if (yych == '"') goto yy177; - if (yych >= '$') goto yy179; - } else { - if (yych == '\'') goto yy180; - if (yych >= '-') goto yy181; - } - } - } else { - if (yych <= 'Z') { - if (yych <= '9') { - if (yych <= '.') goto yy182; - if (yych >= '0') goto yy183; - } else { - if (yych == ';') goto yy175; - if (yych >= 'A') goto yy185; - } - } else { - if (yych <= '^') { - if (yych <= '[') goto yy172; - if (yych <= '\\') goto yy187; - if (yych <= ']') goto yy188; - } else { - if (yych == '`') goto yy172; - if (yych <= 'z') goto yy185; - } - } - } -yy172: - YYDEBUG(172, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - goto yy195; -yy173: - YYDEBUG(173, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 521 "Zend/zend_ini_scanner.l" - { /* Get rest as section/offset value */ - RETURN_TOKEN(TC_STRING, yytext, yyleng); -} -#line 2253 "Zend/zend_ini_scanner.c" -yy174: - YYDEBUG(174, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= 0x1F) { - if (yych == '\t') goto yy221; - goto yy195; - } else { - if (yych <= ' ') goto yy221; - if (yych == '"') goto yy223; - goto yy195; - } -yy175: - YYDEBUG(175, *YYCURSOR); - ++YYCURSOR; -yy176: - YYDEBUG(176, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 603 "Zend/zend_ini_scanner.l" - { - return 0; -} -#line 2276 "Zend/zend_ini_scanner.c" -yy177: - YYDEBUG(177, *YYCURSOR); - ++YYCURSOR; -yy178: - YYDEBUG(178, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 525 "Zend/zend_ini_scanner.l" - { /* Double quoted '"' string start */ - yy_push_state(ST_DOUBLE_QUOTES TSRMLS_CC); - return '"'; -} -#line 2288 "Zend/zend_ini_scanner.c" -yy179: - YYDEBUG(179, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= '\\') { - if (yych <= 0x00) goto yy176; - if (yych <= '[') goto yy194; - goto yy199; - } else { - if (yych == '{') goto yy219; - goto yy194; - } -yy180: - YYDEBUG(180, *YYCURSOR); - yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - if (yybm[0+yych] & 128) { - goto yy215; - } - goto yy176; -yy181: - YYDEBUG(181, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '/') goto yy195; - if (yych <= '9') goto yy213; - goto yy195; -yy182: - YYDEBUG(182, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '/') goto yy195; - if (yych <= '9') goto yy211; - goto yy195; -yy183: - YYDEBUG(183, *YYCURSOR); - yyaccept = 2; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '\'') { - if (yych <= '\r') { - if (yych == '\n') goto yy184; - if (yych <= '\f') goto yy195; - } else { - if (yych == '"') goto yy184; - if (yych <= '&') goto yy195; - } - } else { - if (yych <= '9') { - if (yych == '.') goto yy207; - if (yych <= '/') goto yy195; - goto yy209; - } else { - if (yych <= ';') { - if (yych <= ':') goto yy195; - } else { - if (yych != ']') goto yy195; - } - } - } -yy184: - YYDEBUG(184, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 499 "Zend/zend_ini_scanner.l" - { /* Get number option value as string */ - RETURN_TOKEN(TC_NUMBER, yytext, yyleng); -} -#line 2354 "Zend/zend_ini_scanner.c" -yy185: - YYDEBUG(185, *YYCURSOR); - yyaccept = 3; - yych = *(YYMARKER = ++YYCURSOR); - if (yybm[0+yych] & 32) { - goto yy205; - } - if (yych <= '"') { - if (yych <= '\f') { - if (yych != '\n') goto yy195; - } else { - if (yych <= '\r') goto yy186; - if (yych <= '!') goto yy195; - } - } else { - if (yych <= ':') { - if (yych != '\'') goto yy195; - } else { - if (yych <= ';') goto yy186; - if (yych != ']') goto yy195; - } - } -yy186: - YYDEBUG(186, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 495 "Zend/zend_ini_scanner.l" - { /* Get constant option value */ - RETURN_TOKEN(TC_CONSTANT, yytext, yyleng); -} -#line 2384 "Zend/zend_ini_scanner.c" -yy187: - YYDEBUG(187, *YYCURSOR); - yych = *++YYCURSOR; - goto yy194; -yy188: - YYDEBUG(188, *YYCURSOR); - ++YYCURSOR; - yych = *YYCURSOR; - goto yy191; -yy189: - YYDEBUG(189, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 377 "Zend/zend_ini_scanner.l" - { /* End of section */ - BEGIN(INITIAL); - SCNG(lineno)++; - return ']'; -} -#line 2403 "Zend/zend_ini_scanner.c" -yy190: - YYDEBUG(190, *YYCURSOR); - ++YYCURSOR; - YYFILL(2); - yych = *YYCURSOR; -yy191: - YYDEBUG(191, *YYCURSOR); - if (yybm[0+yych] & 2) { - goto yy190; - } - if (yych == '\n') goto yy192; - if (yych == '\r') goto yy193; - goto yy189; -yy192: - YYDEBUG(192, *YYCURSOR); - yych = *++YYCURSOR; - goto yy189; -yy193: - YYDEBUG(193, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '\n') goto yy192; - goto yy189; -yy194: - YYDEBUG(194, *YYCURSOR); - yyaccept = 0; - YYMARKER = ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; -yy195: - YYDEBUG(195, *YYCURSOR); - if (yybm[0+yych] & 4) { - goto yy194; - } - if (yych == '$') goto yy197; - if (yych != '\\') goto yy173; -yy196: - YYDEBUG(196, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - goto yy194; -yy197: - YYDEBUG(197, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - if (yych <= '\\') { - if (yych <= 0x00) goto yy198; - if (yych <= '[') goto yy194; - goto yy199; - } else { - if (yych != '{') goto yy194; - } -yy198: - YYDEBUG(198, *YYCURSOR); - YYCURSOR = YYMARKER; - if (yyaccept <= 1) { - if (yyaccept <= 0) { - goto yy173; - } else { - goto yy176; - } - } else { - if (yyaccept <= 2) { - goto yy184; - } else { - goto yy186; - } - } -yy199: - YYDEBUG(199, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - if (yybm[0+yych] & 8) { - goto yy200; - } - if (yych == '\\') goto yy202; - goto yy194; -yy200: - YYDEBUG(200, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(201, *YYCURSOR); - if (yybm[0+yych] & 8) { - goto yy200; - } - if (yych == '\\') goto yy204; - goto yy194; -yy202: - YYDEBUG(202, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(203, *YYCURSOR); - if (yybm[0+yych] & 8) { - goto yy200; - } - if (yych == '\\') goto yy202; - goto yy194; -yy204: - YYDEBUG(204, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - if (yybm[0+yych] & 8) { - goto yy200; - } - if (yych == '\\') goto yy202; - goto yy194; -yy205: - YYDEBUG(205, *YYCURSOR); - yyaccept = 3; - YYMARKER = ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(206, *YYCURSOR); - if (yybm[0+yych] & 32) { - goto yy205; - } - if (yych <= '$') { - if (yych <= '\r') { - if (yych == '\n') goto yy186; - if (yych <= '\f') goto yy194; - goto yy186; - } else { - if (yych == '"') goto yy186; - if (yych <= '#') goto yy194; - goto yy197; - } - } else { - if (yych <= ';') { - if (yych == '\'') goto yy186; - if (yych <= ':') goto yy194; - goto yy186; - } else { - if (yych <= '[') goto yy194; - if (yych <= '\\') goto yy196; - if (yych <= ']') goto yy186; - goto yy194; - } - } -yy207: - YYDEBUG(207, *YYCURSOR); - yyaccept = 2; - YYMARKER = ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(208, *YYCURSOR); - if (yybm[0+yych] & 64) { - goto yy207; - } - if (yych <= '$') { - if (yych <= '\r') { - if (yych == '\n') goto yy184; - if (yych <= '\f') goto yy194; - goto yy184; - } else { - if (yych == '"') goto yy184; - if (yych <= '#') goto yy194; - goto yy197; - } - } else { - if (yych <= ';') { - if (yych == '\'') goto yy184; - if (yych <= ':') goto yy194; - goto yy184; - } else { - if (yych <= '[') goto yy194; - if (yych <= '\\') goto yy196; - if (yych <= ']') goto yy184; - goto yy194; - } - } -yy209: - YYDEBUG(209, *YYCURSOR); - yyaccept = 2; - YYMARKER = ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(210, *YYCURSOR); - if (yych <= '\'') { - if (yych <= '!') { - if (yych <= '\n') { - if (yych <= '\t') goto yy194; - goto yy184; - } else { - if (yych == '\r') goto yy184; - goto yy194; - } - } else { - if (yych <= '#') { - if (yych <= '"') goto yy184; - goto yy194; - } else { - if (yych <= '$') goto yy197; - if (yych <= '&') goto yy194; - goto yy184; - } - } - } else { - if (yych <= ':') { - if (yych <= '.') { - if (yych <= '-') goto yy194; - goto yy207; - } else { - if (yych <= '/') goto yy194; - if (yych <= '9') goto yy209; - goto yy194; - } - } else { - if (yych <= '[') { - if (yych <= ';') goto yy184; - goto yy194; - } else { - if (yych <= '\\') goto yy196; - if (yych <= ']') goto yy184; - goto yy194; - } - } - } -yy211: - YYDEBUG(211, *YYCURSOR); - yyaccept = 2; - YYMARKER = ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(212, *YYCURSOR); - if (yych <= '&') { - if (yych <= '\r') { - if (yych == '\n') goto yy184; - if (yych <= '\f') goto yy194; - goto yy184; - } else { - if (yych <= '"') { - if (yych <= '!') goto yy194; - goto yy184; - } else { - if (yych == '$') goto yy197; - goto yy194; - } - } - } else { - if (yych <= ':') { - if (yych <= '\'') goto yy184; - if (yych <= '/') goto yy194; - if (yych <= '9') goto yy211; - goto yy194; - } else { - if (yych <= '[') { - if (yych <= ';') goto yy184; - goto yy194; - } else { - if (yych <= '\\') goto yy196; - if (yych <= ']') goto yy184; - goto yy194; - } - } - } -yy213: - YYDEBUG(213, *YYCURSOR); - yyaccept = 2; - YYMARKER = ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(214, *YYCURSOR); - if (yych <= '&') { - if (yych <= '\r') { - if (yych == '\n') goto yy184; - if (yych <= '\f') goto yy194; - goto yy184; - } else { - if (yych <= '"') { - if (yych <= '!') goto yy194; - goto yy184; - } else { - if (yych == '$') goto yy197; - goto yy194; - } - } - } else { - if (yych <= ':') { - if (yych <= '\'') goto yy184; - if (yych <= '/') goto yy194; - if (yych <= '9') goto yy213; - goto yy194; - } else { - if (yych <= '[') { - if (yych <= ';') goto yy184; - goto yy194; - } else { - if (yych <= '\\') goto yy196; - if (yych <= ']') goto yy184; - goto yy194; - } - } - } -yy215: - YYDEBUG(215, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(216, *YYCURSOR); - if (yybm[0+yych] & 128) { - goto yy215; - } - YYDEBUG(217, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(218, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 368 "Zend/zend_ini_scanner.l" - { /* Raw string */ - /* Eat leading and trailing single quotes */ - if (yytext[0] == '\'' && yytext[yyleng - 1] == '\'') { - SCNG(yy_text)++; - yyleng = yyleng - 2; - } - RETURN_TOKEN(TC_RAW, yytext, yyleng); -} -#line 2724 "Zend/zend_ini_scanner.c" -yy219: - YYDEBUG(219, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(220, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 401 "Zend/zend_ini_scanner.l" - { /* Variable start */ - yy_push_state(ST_VARNAME TSRMLS_CC); - return TC_DOLLAR_CURLY; -} -#line 2735 "Zend/zend_ini_scanner.c" -yy221: - YYDEBUG(221, *YYCURSOR); - yyaccept = 0; - YYMARKER = ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(222, *YYCURSOR); - if (yych <= '"') { - if (yych <= '\f') { - if (yych <= 0x08) goto yy194; - if (yych <= '\t') goto yy221; - if (yych <= '\n') goto yy173; - goto yy194; - } else { - if (yych <= 0x1F) { - if (yych <= '\r') goto yy173; - goto yy194; - } else { - if (yych <= ' ') goto yy221; - if (yych <= '!') goto yy194; - } - } - } else { - if (yych <= ':') { - if (yych <= '$') { - if (yych <= '#') goto yy194; - goto yy197; - } else { - if (yych == '\'') goto yy173; - goto yy194; - } - } else { - if (yych <= '[') { - if (yych <= ';') goto yy173; - goto yy194; - } else { - if (yych <= '\\') goto yy196; - if (yych <= ']') goto yy173; - goto yy194; - } - } - } -yy223: - YYDEBUG(223, *YYCURSOR); - ++YYCURSOR; - yych = *YYCURSOR; - goto yy178; - } -/* *********************************** */ -yyc_ST_VALUE: - { - static const unsigned char yybm[] = { - 160, 162, 162, 162, 162, 162, 162, 162, - 162, 176, 128, 162, 162, 128, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 176, 160, 160, 162, 168, 162, 160, 32, - 160, 160, 162, 162, 162, 162, 162, 162, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 162, 160, 162, 160, 162, 162, - 162, 166, 166, 166, 166, 166, 166, 166, - 166, 166, 166, 166, 166, 166, 166, 166, - 166, 166, 166, 166, 166, 166, 166, 166, - 166, 166, 166, 162, 162, 162, 160, 166, - 162, 166, 166, 166, 166, 166, 166, 166, - 166, 166, 166, 166, 166, 166, 166, 166, - 166, 166, 166, 166, 166, 166, 166, 166, - 166, 166, 166, 162, 160, 162, 160, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - }; - YYDEBUG(224, *YYCURSOR); - YYFILL(6); - yych = *YYCURSOR; - YYDEBUG(-1, yych); - switch (yych) { - case 0x00: goto yy226; - case '\t': - case ' ': goto yy230; - case '\n': goto yy232; - case '\r': goto yy234; - case '!': - case '&': - case '(': - case ')': - case '^': - case '|': - case '~': goto yy235; - case '"': goto yy237; - case '$': goto yy239; - case '\'': goto yy240; - case '-': goto yy241; - case '.': goto yy242; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy243; - case ';': goto yy245; - case '=': goto yy246; - case 'A': - case 'B': - case 'C': - case 'D': - case 'E': - case 'G': - case 'H': - case 'I': - case 'J': - case 'K': - case 'L': - case 'M': - case 'P': - case 'Q': - case 'R': - case 'S': - case 'U': - case 'V': - case 'W': - case 'X': - case 'Z': - case '_': - case 'a': - case 'b': - case 'c': - case 'd': - case 'e': - case 'g': - case 'h': - case 'i': - case 'j': - case 'k': - case 'l': - case 'm': - case 'p': - case 'q': - case 'r': - case 's': - case 'u': - case 'v': - case 'w': - case 'x': - case 'z': goto yy248; - case 'F': - case 'f': goto yy250; - case 'N': - case 'n': goto yy251; - case 'O': - case 'o': goto yy252; - case 'T': - case 't': goto yy253; - case 'Y': - case 'y': goto yy254; - default: goto yy228; - } -yy226: - YYDEBUG(226, *YYCURSOR); - ++YYCURSOR; -yy227: - YYDEBUG(227, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 598 "Zend/zend_ini_scanner.l" - { /* End of option value (if EOF is reached before EOL */ - BEGIN(INITIAL); - return END_OF_LINE; -} -#line 2921 "Zend/zend_ini_scanner.c" -yy228: - YYDEBUG(228, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - goto yy256; -yy229: - YYDEBUG(229, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 517 "Zend/zend_ini_scanner.l" - { /* Get everything else as option/offset value */ - RETURN_TOKEN(TC_STRING, yytext, yyleng); -} -#line 2934 "Zend/zend_ini_scanner.c" -yy230: - YYDEBUG(230, *YYCURSOR); - yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - goto yy306; -yy231: - YYDEBUG(231, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 571 "Zend/zend_ini_scanner.l" - { - RETURN_TOKEN(TC_WHITESPACE, yytext, yyleng); -} -#line 2947 "Zend/zend_ini_scanner.c" -yy232: - YYDEBUG(232, *YYCURSOR); - ++YYCURSOR; -yy233: - YYDEBUG(233, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 489 "Zend/zend_ini_scanner.l" - { /* End of option value */ - BEGIN(INITIAL); - SCNG(lineno)++; - return END_OF_LINE; -} -#line 2960 "Zend/zend_ini_scanner.c" -yy234: - YYDEBUG(234, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '\n') goto yy304; - goto yy233; -yy235: - YYDEBUG(235, *YYCURSOR); - ++YYCURSOR; - yych = *YYCURSOR; - goto yy303; -yy236: - YYDEBUG(236, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 507 "Zend/zend_ini_scanner.l" - { /* Boolean operators */ - return yytext[0]; -} -#line 2978 "Zend/zend_ini_scanner.c" -yy237: - YYDEBUG(237, *YYCURSOR); - ++YYCURSOR; -yy238: - YYDEBUG(238, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 525 "Zend/zend_ini_scanner.l" - { /* Double quoted '"' string start */ - yy_push_state(ST_DOUBLE_QUOTES TSRMLS_CC); - return '"'; -} -#line 2990 "Zend/zend_ini_scanner.c" -yy239: - YYDEBUG(239, *YYCURSOR); - yych = *++YYCURSOR; - if (yych <= '\\') { - if (yych <= 0x00) goto yy227; - if (yych <= '[') goto yy255; - goto yy262; - } else { - if (yych == '{') goto yy300; - goto yy255; - } -yy240: - YYDEBUG(240, *YYCURSOR); - yyaccept = 2; - yych = *(YYMARKER = ++YYCURSOR); - if (yybm[0+yych] & 128) { - goto yy296; - } - goto yy227; -yy241: - YYDEBUG(241, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '/') goto yy256; - if (yych <= '9') goto yy294; - goto yy256; -yy242: - YYDEBUG(242, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '/') goto yy256; - if (yych <= '9') goto yy292; - goto yy256; -yy243: - YYDEBUG(243, *YYCURSOR); - yyaccept = 3; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= '\n') { - if (yych <= 0x00) goto yy244; - if (yych <= 0x08) goto yy256; - } else { - if (yych != '\r') goto yy256; - } - } else { - if (yych <= ')') { - if (yych <= '"') goto yy244; - if (yych <= '%') goto yy256; - } else { - if (yych == '.') goto yy288; - goto yy256; - } - } - } else { - if (yych <= ']') { - if (yych <= ';') { - if (yych <= '9') goto yy290; - if (yych <= ':') goto yy256; - } else { - if (yych != '=') goto yy256; - } - } else { - if (yych <= '|') { - if (yych <= '^') goto yy244; - if (yych <= '{') goto yy256; - } else { - if (yych != '~') goto yy256; - } - } - } -yy244: - YYDEBUG(244, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 499 "Zend/zend_ini_scanner.l" - { /* Get number option value as string */ - RETURN_TOKEN(TC_NUMBER, yytext, yyleng); -} -#line 3069 "Zend/zend_ini_scanner.c" -yy245: - YYDEBUG(245, *YYCURSOR); - yyaccept = 2; - yych = *(YYMARKER = ++YYCURSOR); - goto yy284; -yy246: - YYDEBUG(246, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(247, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 511 "Zend/zend_ini_scanner.l" - { /* Make = used in option value to trigger error */ - yyless(0); - BEGIN(INITIAL); - return END_OF_LINE; -} -#line 3086 "Zend/zend_ini_scanner.c" -yy248: - YYDEBUG(248, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if (yybm[0+yych] & 4) { - goto yy257; - } - if (yych <= ':') { - if (yych <= '\r') { - if (yych <= 0x08) { - if (yych >= 0x01) goto yy256; - } else { - if (yych <= '\n') goto yy249; - if (yych <= '\f') goto yy256; - } - } else { - if (yych <= '"') { - if (yych <= 0x1F) goto yy256; - } else { - if (yych <= '%') goto yy256; - if (yych >= '*') goto yy256; - } - } - } else { - if (yych <= '^') { - if (yych <= '<') { - if (yych >= '<') goto yy256; - } else { - if (yych <= '=') goto yy249; - if (yych <= ']') goto yy256; - } - } else { - if (yych <= '|') { - if (yych <= '{') goto yy256; - } else { - if (yych != '~') goto yy256; - } - } - } -yy249: - YYDEBUG(249, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 495 "Zend/zend_ini_scanner.l" - { /* Get constant option value */ - RETURN_TOKEN(TC_CONSTANT, yytext, yyleng); -} -#line 3133 "Zend/zend_ini_scanner.c" -yy250: - YYDEBUG(250, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '<') { - if (yych <= '"') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy249; - if (yych <= 0x08) goto yy256; - goto yy249; - } else { - if (yych == '\r') goto yy249; - if (yych <= 0x1F) goto yy256; - goto yy249; - } - } else { - if (yych <= '/') { - if (yych <= '%') goto yy256; - if (yych <= ')') goto yy249; - goto yy256; - } else { - if (yych <= '9') goto yy257; - if (yych == ';') goto yy249; - goto yy256; - } - } - } else { - if (yych <= '_') { - if (yych <= 'A') { - if (yych <= '=') goto yy249; - if (yych <= '@') goto yy256; - goto yy280; - } else { - if (yych <= 'Z') goto yy257; - if (yych <= ']') goto yy256; - if (yych <= '^') goto yy249; - goto yy257; - } - } else { - if (yych <= '{') { - if (yych <= '`') goto yy256; - if (yych <= 'a') goto yy280; - if (yych <= 'z') goto yy257; - goto yy256; - } else { - if (yych == '}') goto yy256; - if (yych <= '~') goto yy249; - goto yy256; - } - } - } -yy251: - YYDEBUG(251, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= 'N') { - if (yych <= '%') { - if (yych <= '\f') { - if (yych <= 0x00) goto yy249; - if (yych <= 0x08) goto yy256; - if (yych <= '\n') goto yy249; - goto yy256; - } else { - if (yych <= '\r') goto yy249; - if (yych <= 0x1F) goto yy256; - if (yych <= '"') goto yy249; - goto yy256; - } - } else { - if (yych <= ':') { - if (yych <= ')') goto yy249; - if (yych <= '/') goto yy256; - if (yych <= '9') goto yy257; - goto yy256; - } else { - if (yych <= '<') { - if (yych <= ';') goto yy249; - goto yy256; - } else { - if (yych <= '=') goto yy249; - if (yych <= '@') goto yy256; - goto yy257; - } - } - } - } else { - if (yych <= 'n') { - if (yych <= 'Z') { - if (yych <= 'O') goto yy276; - if (yych == 'U') goto yy277; - goto yy257; - } else { - if (yych <= '^') { - if (yych <= ']') goto yy256; - goto yy249; - } else { - if (yych == '`') goto yy256; - goto yy257; - } - } - } else { - if (yych <= 'z') { - if (yych <= 'o') goto yy276; - if (yych == 'u') goto yy277; - goto yy257; - } else { - if (yych <= '|') { - if (yych <= '{') goto yy256; - goto yy249; - } else { - if (yych == '~') goto yy249; - goto yy256; - } - } - } - } -yy252: - YYDEBUG(252, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= 'E') { - if (yych <= '%') { - if (yych <= '\f') { - if (yych <= 0x00) goto yy249; - if (yych <= 0x08) goto yy256; - if (yych <= '\n') goto yy249; - goto yy256; - } else { - if (yych <= '\r') goto yy249; - if (yych <= 0x1F) goto yy256; - if (yych <= '"') goto yy249; - goto yy256; - } - } else { - if (yych <= ':') { - if (yych <= ')') goto yy249; - if (yych <= '/') goto yy256; - if (yych <= '9') goto yy257; - goto yy256; - } else { - if (yych <= '<') { - if (yych <= ';') goto yy249; - goto yy256; - } else { - if (yych <= '=') goto yy249; - if (yych <= '@') goto yy256; - goto yy257; - } - } - } - } else { - if (yych <= 'e') { - if (yych <= 'Z') { - if (yych <= 'F') goto yy271; - if (yych == 'N') goto yy265; - goto yy257; - } else { - if (yych <= '^') { - if (yych <= ']') goto yy256; - goto yy249; - } else { - if (yych == '`') goto yy256; - goto yy257; - } - } - } else { - if (yych <= 'z') { - if (yych <= 'f') goto yy271; - if (yych == 'n') goto yy265; - goto yy257; - } else { - if (yych <= '|') { - if (yych <= '{') goto yy256; - goto yy249; - } else { - if (yych == '~') goto yy249; - goto yy256; - } - } - } - } -yy253: - YYDEBUG(253, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '=') { - if (yych <= '"') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy249; - if (yych <= 0x08) goto yy256; - goto yy249; - } else { - if (yych == '\r') goto yy249; - if (yych <= 0x1F) goto yy256; - goto yy249; - } - } else { - if (yych <= '9') { - if (yych <= '%') goto yy256; - if (yych <= ')') goto yy249; - if (yych <= '/') goto yy256; - goto yy257; - } else { - if (yych == ';') goto yy249; - if (yych <= '<') goto yy256; - goto yy249; - } - } - } else { - if (yych <= '`') { - if (yych <= 'Z') { - if (yych <= '@') goto yy256; - if (yych == 'R') goto yy269; - goto yy257; - } else { - if (yych <= ']') goto yy256; - if (yych <= '^') goto yy249; - if (yych <= '_') goto yy257; - goto yy256; - } - } else { - if (yych <= '{') { - if (yych == 'r') goto yy269; - if (yych <= 'z') goto yy257; - goto yy256; - } else { - if (yych == '}') goto yy256; - if (yych <= '~') goto yy249; - goto yy256; - } - } - } -yy254: - YYDEBUG(254, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '=') { - if (yych <= '"') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy249; - if (yych <= 0x08) goto yy256; - goto yy249; - } else { - if (yych == '\r') goto yy249; - if (yych <= 0x1F) goto yy256; - goto yy249; - } - } else { - if (yych <= '9') { - if (yych <= '%') goto yy256; - if (yych <= ')') goto yy249; - if (yych <= '/') goto yy256; - goto yy257; - } else { - if (yych == ';') goto yy249; - if (yych <= '<') goto yy256; - goto yy249; - } - } - } else { - if (yych <= '`') { - if (yych <= 'Z') { - if (yych <= '@') goto yy256; - if (yych == 'E') goto yy259; - goto yy257; - } else { - if (yych <= ']') goto yy256; - if (yych <= '^') goto yy249; - if (yych <= '_') goto yy257; - goto yy256; - } - } else { - if (yych <= '{') { - if (yych == 'e') goto yy259; - if (yych <= 'z') goto yy257; - goto yy256; - } else { - if (yych == '}') goto yy256; - if (yych <= '~') goto yy249; - goto yy256; - } - } - } -yy255: - YYDEBUG(255, *YYCURSOR); - yyaccept = 0; - YYMARKER = ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; -yy256: - YYDEBUG(256, *YYCURSOR); - if (yybm[0+yych] & 2) { - goto yy255; - } - if (yych == '$') goto yy260; - goto yy229; -yy257: - YYDEBUG(257, *YYCURSOR); - yyaccept = 4; - YYMARKER = ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(258, *YYCURSOR); - if (yybm[0+yych] & 4) { - goto yy257; - } - if (yych <= ')') { - if (yych <= '\r') { - if (yych <= 0x08) { - if (yych <= 0x00) goto yy249; - goto yy255; - } else { - if (yych <= '\n') goto yy249; - if (yych <= '\f') goto yy255; - goto yy249; - } - } else { - if (yych <= '#') { - if (yych <= 0x1F) goto yy255; - if (yych <= '"') goto yy249; - goto yy255; - } else { - if (yych <= '$') goto yy260; - if (yych <= '%') goto yy255; - goto yy249; - } - } - } else { - if (yych <= ']') { - if (yych <= ';') { - if (yych <= ':') goto yy255; - goto yy249; - } else { - if (yych == '=') goto yy249; - goto yy255; - } - } else { - if (yych <= '|') { - if (yych <= '^') goto yy249; - if (yych <= '{') goto yy255; - goto yy249; - } else { - if (yych == '~') goto yy249; - goto yy255; - } - } - } -yy259: - YYDEBUG(259, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '=') { - if (yych <= '"') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy249; - if (yych <= 0x08) goto yy256; - goto yy249; - } else { - if (yych == '\r') goto yy249; - if (yych <= 0x1F) goto yy256; - goto yy249; - } - } else { - if (yych <= '9') { - if (yych <= '%') goto yy256; - if (yych <= ')') goto yy249; - if (yych <= '/') goto yy256; - goto yy257; - } else { - if (yych == ';') goto yy249; - if (yych <= '<') goto yy256; - goto yy249; - } - } - } else { - if (yych <= '`') { - if (yych <= 'Z') { - if (yych <= '@') goto yy256; - if (yych == 'S') goto yy265; - goto yy257; - } else { - if (yych <= ']') goto yy256; - if (yych <= '^') goto yy249; - if (yych <= '_') goto yy257; - goto yy256; - } - } else { - if (yych <= '{') { - if (yych == 's') goto yy265; - if (yych <= 'z') goto yy257; - goto yy256; - } else { - if (yych == '}') goto yy256; - if (yych <= '~') goto yy249; - goto yy256; - } - } - } -yy260: - YYDEBUG(260, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - if (yych <= '\\') { - if (yych <= 0x00) goto yy261; - if (yych <= '[') goto yy255; - goto yy262; - } else { - if (yych != '{') goto yy255; - } -yy261: - YYDEBUG(261, *YYCURSOR); - YYCURSOR = YYMARKER; - if (yyaccept <= 3) { - if (yyaccept <= 1) { - if (yyaccept <= 0) { - goto yy229; - } else { - goto yy231; - } - } else { - if (yyaccept <= 2) { - goto yy227; - } else { - goto yy244; - } - } - } else { - if (yyaccept <= 5) { - if (yyaccept <= 4) { - goto yy249; - } else { - goto yy266; - } - } else { - goto yy273; - } - } -yy262: - YYDEBUG(262, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - if (yybm[0+yych] & 8) { - goto yy263; - } - goto yy255; -yy263: - YYDEBUG(263, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(264, *YYCURSOR); - if (yybm[0+yych] & 8) { - goto yy263; - } - if (yych <= 0x00) goto yy229; - if (yych == '\\') goto yy262; - goto yy255; -yy265: - YYDEBUG(265, *YYCURSOR); - yyaccept = 5; - yych = *(YYMARKER = ++YYCURSOR); - if (yybm[0+yych] & 16) { - goto yy267; - } - if (yych <= ';') { - if (yych <= ' ') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy266; - if (yych <= '\t') goto yy256; - } else { - if (yych != '\r') goto yy256; - } - } else { - if (yych <= ')') { - if (yych <= '"') goto yy266; - if (yych <= '%') goto yy256; - } else { - if (yych <= '/') goto yy256; - if (yych <= '9') goto yy257; - if (yych <= ':') goto yy256; - } - } - } else { - if (yych <= '_') { - if (yych <= '@') { - if (yych != '=') goto yy256; - } else { - if (yych <= 'Z') goto yy257; - if (yych <= ']') goto yy256; - if (yych >= '_') goto yy257; - } - } else { - if (yych <= '{') { - if (yych <= '`') goto yy256; - if (yych <= 'z') goto yy257; - goto yy256; - } else { - if (yych == '}') goto yy256; - if (yych >= 0x7F) goto yy256; - } - } - } -yy266: - YYDEBUG(266, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 421 "Zend/zend_ini_scanner.l" - { /* TRUE value (when used outside option value/offset this causes parse error!) */ - RETURN_TOKEN(BOOL_TRUE, "1", 1); -} -#line 3645 "Zend/zend_ini_scanner.c" -yy267: - YYDEBUG(267, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(268, *YYCURSOR); - if (yybm[0+yych] & 16) { - goto yy267; - } - goto yy266; -yy269: - YYDEBUG(269, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '=') { - if (yych <= '"') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy249; - if (yych <= 0x08) goto yy256; - goto yy249; - } else { - if (yych == '\r') goto yy249; - if (yych <= 0x1F) goto yy256; - goto yy249; - } - } else { - if (yych <= '9') { - if (yych <= '%') goto yy256; - if (yych <= ')') goto yy249; - if (yych <= '/') goto yy256; - goto yy257; - } else { - if (yych == ';') goto yy249; - if (yych <= '<') goto yy256; - goto yy249; - } - } - } else { - if (yych <= '`') { - if (yych <= 'Z') { - if (yych <= '@') goto yy256; - if (yych != 'U') goto yy257; - } else { - if (yych <= ']') goto yy256; - if (yych <= '^') goto yy249; - if (yych <= '_') goto yy257; - goto yy256; - } - } else { - if (yych <= '{') { - if (yych == 'u') goto yy270; - if (yych <= 'z') goto yy257; - goto yy256; - } else { - if (yych == '}') goto yy256; - if (yych <= '~') goto yy249; - goto yy256; - } - } - } -yy270: - YYDEBUG(270, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '=') { - if (yych <= '"') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy249; - if (yych <= 0x08) goto yy256; - goto yy249; - } else { - if (yych == '\r') goto yy249; - if (yych <= 0x1F) goto yy256; - goto yy249; - } - } else { - if (yych <= '9') { - if (yych <= '%') goto yy256; - if (yych <= ')') goto yy249; - if (yych <= '/') goto yy256; - goto yy257; - } else { - if (yych == ';') goto yy249; - if (yych <= '<') goto yy256; - goto yy249; - } - } - } else { - if (yych <= '`') { - if (yych <= 'Z') { - if (yych <= '@') goto yy256; - if (yych == 'E') goto yy265; - goto yy257; - } else { - if (yych <= ']') goto yy256; - if (yych <= '^') goto yy249; - if (yych <= '_') goto yy257; - goto yy256; - } - } else { - if (yych <= '{') { - if (yych == 'e') goto yy265; - if (yych <= 'z') goto yy257; - goto yy256; - } else { - if (yych == '}') goto yy256; - if (yych <= '~') goto yy249; - goto yy256; - } - } - } -yy271: - YYDEBUG(271, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '=') { - if (yych <= '"') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy249; - if (yych <= 0x08) goto yy256; - goto yy249; - } else { - if (yych == '\r') goto yy249; - if (yych <= 0x1F) goto yy256; - goto yy249; - } - } else { - if (yych <= '9') { - if (yych <= '%') goto yy256; - if (yych <= ')') goto yy249; - if (yych <= '/') goto yy256; - goto yy257; - } else { - if (yych == ';') goto yy249; - if (yych <= '<') goto yy256; - goto yy249; - } - } - } else { - if (yych <= '`') { - if (yych <= 'Z') { - if (yych <= '@') goto yy256; - if (yych != 'F') goto yy257; - } else { - if (yych <= ']') goto yy256; - if (yych <= '^') goto yy249; - if (yych <= '_') goto yy257; - goto yy256; - } - } else { - if (yych <= '{') { - if (yych == 'f') goto yy272; - if (yych <= 'z') goto yy257; - goto yy256; - } else { - if (yych == '}') goto yy256; - if (yych <= '~') goto yy249; - goto yy256; - } - } - } -yy272: - YYDEBUG(272, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if (yybm[0+yych] & 4) { - goto yy257; - } - if (yych <= ')') { - if (yych <= '\f') { - if (yych <= 0x08) { - if (yych >= 0x01) goto yy256; - } else { - if (yych <= '\t') goto yy274; - if (yych >= '\v') goto yy256; - } - } else { - if (yych <= ' ') { - if (yych <= '\r') goto yy273; - if (yych <= 0x1F) goto yy256; - goto yy274; - } else { - if (yych <= '"') goto yy273; - if (yych <= '%') goto yy256; - } - } - } else { - if (yych <= ']') { - if (yych <= ';') { - if (yych <= ':') goto yy256; - } else { - if (yych != '=') goto yy256; - } - } else { - if (yych <= '|') { - if (yych <= '^') goto yy273; - if (yych <= '{') goto yy256; - } else { - if (yych != '~') goto yy256; - } - } - } -yy273: - YYDEBUG(273, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 425 "Zend/zend_ini_scanner.l" - { /* FALSE value (when used outside option value/offset this causes parse error!)*/ - RETURN_TOKEN(BOOL_FALSE, "", 0); -} -#line 3855 "Zend/zend_ini_scanner.c" -yy274: - YYDEBUG(274, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(275, *YYCURSOR); - if (yych == '\t') goto yy274; - if (yych == ' ') goto yy274; - goto yy273; -yy276: - YYDEBUG(276, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '<') { - if (yych <= ' ') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy273; - if (yych <= 0x08) goto yy256; - if (yych <= '\t') goto yy274; - goto yy273; - } else { - if (yych == '\r') goto yy273; - if (yych <= 0x1F) goto yy256; - goto yy274; - } - } else { - if (yych <= '/') { - if (yych <= '"') goto yy273; - if (yych <= '%') goto yy256; - if (yych <= ')') goto yy273; - goto yy256; - } else { - if (yych <= '9') goto yy257; - if (yych == ';') goto yy273; - goto yy256; - } - } - } else { - if (yych <= '_') { - if (yych <= 'N') { - if (yych <= '=') goto yy273; - if (yych <= '@') goto yy256; - if (yych <= 'M') goto yy257; - goto yy279; - } else { - if (yych <= 'Z') goto yy257; - if (yych <= ']') goto yy256; - if (yych <= '^') goto yy273; - goto yy257; - } - } else { - if (yych <= 'z') { - if (yych <= '`') goto yy256; - if (yych == 'n') goto yy279; - goto yy257; - } else { - if (yych <= '|') { - if (yych <= '{') goto yy256; - goto yy273; - } else { - if (yych == '~') goto yy273; - goto yy256; - } - } - } - } -yy277: - YYDEBUG(277, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '=') { - if (yych <= '"') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy249; - if (yych <= 0x08) goto yy256; - goto yy249; - } else { - if (yych == '\r') goto yy249; - if (yych <= 0x1F) goto yy256; - goto yy249; - } - } else { - if (yych <= '9') { - if (yych <= '%') goto yy256; - if (yych <= ')') goto yy249; - if (yych <= '/') goto yy256; - goto yy257; - } else { - if (yych == ';') goto yy249; - if (yych <= '<') goto yy256; - goto yy249; - } - } - } else { - if (yych <= '`') { - if (yych <= 'Z') { - if (yych <= '@') goto yy256; - if (yych != 'L') goto yy257; - } else { - if (yych <= ']') goto yy256; - if (yych <= '^') goto yy249; - if (yych <= '_') goto yy257; - goto yy256; - } - } else { - if (yych <= '{') { - if (yych == 'l') goto yy278; - if (yych <= 'z') goto yy257; - goto yy256; - } else { - if (yych == '}') goto yy256; - if (yych <= '~') goto yy249; - goto yy256; - } - } - } -yy278: - YYDEBUG(278, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '=') { - if (yych <= '"') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy249; - if (yych <= 0x08) goto yy256; - goto yy249; - } else { - if (yych == '\r') goto yy249; - if (yych <= 0x1F) goto yy256; - goto yy249; - } - } else { - if (yych <= '9') { - if (yych <= '%') goto yy256; - if (yych <= ')') goto yy249; - if (yych <= '/') goto yy256; - goto yy257; - } else { - if (yych == ';') goto yy249; - if (yych <= '<') goto yy256; - goto yy249; - } - } - } else { - if (yych <= '`') { - if (yych <= 'Z') { - if (yych <= '@') goto yy256; - if (yych == 'L') goto yy272; - goto yy257; - } else { - if (yych <= ']') goto yy256; - if (yych <= '^') goto yy249; - if (yych <= '_') goto yy257; - goto yy256; - } - } else { - if (yych <= '{') { - if (yych == 'l') goto yy272; - if (yych <= 'z') goto yy257; - goto yy256; - } else { - if (yych == '}') goto yy256; - if (yych <= '~') goto yy249; - goto yy256; - } - } - } -yy279: - YYDEBUG(279, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '=') { - if (yych <= '"') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy249; - if (yych <= 0x08) goto yy256; - goto yy249; - } else { - if (yych == '\r') goto yy249; - if (yych <= 0x1F) goto yy256; - goto yy249; - } - } else { - if (yych <= '9') { - if (yych <= '%') goto yy256; - if (yych <= ')') goto yy249; - if (yych <= '/') goto yy256; - goto yy257; - } else { - if (yych == ';') goto yy249; - if (yych <= '<') goto yy256; - goto yy249; - } - } - } else { - if (yych <= '`') { - if (yych <= 'Z') { - if (yych <= '@') goto yy256; - if (yych == 'E') goto yy272; - goto yy257; - } else { - if (yych <= ']') goto yy256; - if (yych <= '^') goto yy249; - if (yych <= '_') goto yy257; - goto yy256; - } - } else { - if (yych <= '{') { - if (yych == 'e') goto yy272; - if (yych <= 'z') goto yy257; - goto yy256; - } else { - if (yych == '}') goto yy256; - if (yych <= '~') goto yy249; - goto yy256; - } - } - } -yy280: - YYDEBUG(280, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '=') { - if (yych <= '"') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy249; - if (yych <= 0x08) goto yy256; - goto yy249; - } else { - if (yych == '\r') goto yy249; - if (yych <= 0x1F) goto yy256; - goto yy249; - } - } else { - if (yych <= '9') { - if (yych <= '%') goto yy256; - if (yych <= ')') goto yy249; - if (yych <= '/') goto yy256; - goto yy257; - } else { - if (yych == ';') goto yy249; - if (yych <= '<') goto yy256; - goto yy249; - } - } - } else { - if (yych <= '`') { - if (yych <= 'Z') { - if (yych <= '@') goto yy256; - if (yych != 'L') goto yy257; - } else { - if (yych <= ']') goto yy256; - if (yych <= '^') goto yy249; - if (yych <= '_') goto yy257; - goto yy256; - } - } else { - if (yych <= '{') { - if (yych == 'l') goto yy281; - if (yych <= 'z') goto yy257; - goto yy256; - } else { - if (yych == '}') goto yy256; - if (yych <= '~') goto yy249; - goto yy256; - } - } - } -yy281: - YYDEBUG(281, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '=') { - if (yych <= '"') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy249; - if (yych <= 0x08) goto yy256; - goto yy249; - } else { - if (yych == '\r') goto yy249; - if (yych <= 0x1F) goto yy256; - goto yy249; - } - } else { - if (yych <= '9') { - if (yych <= '%') goto yy256; - if (yych <= ')') goto yy249; - if (yych <= '/') goto yy256; - goto yy257; - } else { - if (yych == ';') goto yy249; - if (yych <= '<') goto yy256; - goto yy249; - } - } - } else { - if (yych <= '`') { - if (yych <= 'Z') { - if (yych <= '@') goto yy256; - if (yych != 'S') goto yy257; - } else { - if (yych <= ']') goto yy256; - if (yych <= '^') goto yy249; - if (yych <= '_') goto yy257; - goto yy256; - } - } else { - if (yych <= '{') { - if (yych == 's') goto yy282; - if (yych <= 'z') goto yy257; - goto yy256; - } else { - if (yych == '}') goto yy256; - if (yych <= '~') goto yy249; - goto yy256; - } - } - } -yy282: - YYDEBUG(282, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '=') { - if (yych <= '"') { - if (yych <= '\n') { - if (yych <= 0x00) goto yy249; - if (yych <= 0x08) goto yy256; - goto yy249; - } else { - if (yych == '\r') goto yy249; - if (yych <= 0x1F) goto yy256; - goto yy249; - } - } else { - if (yych <= '9') { - if (yych <= '%') goto yy256; - if (yych <= ')') goto yy249; - if (yych <= '/') goto yy256; - goto yy257; - } else { - if (yych == ';') goto yy249; - if (yych <= '<') goto yy256; - goto yy249; - } - } - } else { - if (yych <= '`') { - if (yych <= 'Z') { - if (yych <= '@') goto yy256; - if (yych == 'E') goto yy272; - goto yy257; - } else { - if (yych <= ']') goto yy256; - if (yych <= '^') goto yy249; - if (yych <= '_') goto yy257; - goto yy256; - } - } else { - if (yych <= '{') { - if (yych == 'e') goto yy272; - if (yych <= 'z') goto yy257; - goto yy256; - } else { - if (yych == '}') goto yy256; - if (yych <= '~') goto yy249; - goto yy256; - } - } - } -yy283: - YYDEBUG(283, *YYCURSOR); - ++YYCURSOR; - YYFILL(2); - yych = *YYCURSOR; -yy284: - YYDEBUG(284, *YYCURSOR); - if (yybm[0+yych] & 32) { - goto yy283; - } - if (yych >= '\r') goto yy287; -yy285: - YYDEBUG(285, *YYCURSOR); - ++YYCURSOR; -yy286: - YYDEBUG(286, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 585 "Zend/zend_ini_scanner.l" - { /* Comment */ - BEGIN(INITIAL); - SCNG(lineno)++; - return END_OF_LINE; -} -#line 4248 "Zend/zend_ini_scanner.c" -yy287: - YYDEBUG(287, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == '\n') goto yy285; - goto yy286; -yy288: - YYDEBUG(288, *YYCURSOR); - yyaccept = 3; - YYMARKER = ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(289, *YYCURSOR); - if (yybm[0+yych] & 64) { - goto yy288; - } - if (yych <= ')') { - if (yych <= '\r') { - if (yych <= 0x08) { - if (yych <= 0x00) goto yy244; - goto yy255; - } else { - if (yych <= '\n') goto yy244; - if (yych <= '\f') goto yy255; - goto yy244; - } - } else { - if (yych <= '#') { - if (yych <= 0x1F) goto yy255; - if (yych <= '"') goto yy244; - goto yy255; - } else { - if (yych <= '$') goto yy260; - if (yych <= '%') goto yy255; - goto yy244; - } - } - } else { - if (yych <= ']') { - if (yych <= ';') { - if (yych <= ':') goto yy255; - goto yy244; - } else { - if (yych == '=') goto yy244; - goto yy255; - } - } else { - if (yych <= '|') { - if (yych <= '^') goto yy244; - if (yych <= '{') goto yy255; - goto yy244; - } else { - if (yych == '~') goto yy244; - goto yy255; - } - } - } -yy290: - YYDEBUG(290, *YYCURSOR); - yyaccept = 3; - YYMARKER = ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(291, *YYCURSOR); - if (yych <= '.') { - if (yych <= 0x1F) { - if (yych <= '\n') { - if (yych <= 0x00) goto yy244; - if (yych <= 0x08) goto yy255; - goto yy244; - } else { - if (yych == '\r') goto yy244; - goto yy255; - } - } else { - if (yych <= '$') { - if (yych <= '"') goto yy244; - if (yych <= '#') goto yy255; - goto yy260; - } else { - if (yych <= '%') goto yy255; - if (yych <= ')') goto yy244; - if (yych <= '-') goto yy255; - goto yy288; - } - } - } else { - if (yych <= '=') { - if (yych <= ':') { - if (yych <= '/') goto yy255; - if (yych <= '9') goto yy290; - goto yy255; - } else { - if (yych == '<') goto yy255; - goto yy244; - } - } else { - if (yych <= '{') { - if (yych == '^') goto yy244; - goto yy255; - } else { - if (yych == '}') goto yy255; - if (yych <= '~') goto yy244; - goto yy255; - } - } - } -yy292: - YYDEBUG(292, *YYCURSOR); - yyaccept = 3; - YYMARKER = ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(293, *YYCURSOR); - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= '\n') { - if (yych <= 0x00) goto yy244; - if (yych <= 0x08) goto yy255; - goto yy244; - } else { - if (yych == '\r') goto yy244; - goto yy255; - } - } else { - if (yych <= '$') { - if (yych <= '"') goto yy244; - if (yych <= '#') goto yy255; - goto yy260; - } else { - if (yych <= '%') goto yy255; - if (yych <= ')') goto yy244; - goto yy255; - } - } - } else { - if (yych <= ']') { - if (yych <= ';') { - if (yych <= '9') goto yy292; - if (yych <= ':') goto yy255; - goto yy244; - } else { - if (yych == '=') goto yy244; - goto yy255; - } - } else { - if (yych <= '|') { - if (yych <= '^') goto yy244; - if (yych <= '{') goto yy255; - goto yy244; - } else { - if (yych == '~') goto yy244; - goto yy255; - } - } - } -yy294: - YYDEBUG(294, *YYCURSOR); - yyaccept = 3; - YYMARKER = ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(295, *YYCURSOR); - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= '\n') { - if (yych <= 0x00) goto yy244; - if (yych <= 0x08) goto yy255; - goto yy244; - } else { - if (yych == '\r') goto yy244; - goto yy255; - } - } else { - if (yych <= '$') { - if (yych <= '"') goto yy244; - if (yych <= '#') goto yy255; - goto yy260; - } else { - if (yych <= '%') goto yy255; - if (yych <= ')') goto yy244; - goto yy255; - } - } - } else { - if (yych <= ']') { - if (yych <= ';') { - if (yych <= '9') goto yy294; - if (yych <= ':') goto yy255; - goto yy244; - } else { - if (yych == '=') goto yy244; - goto yy255; - } - } else { - if (yych <= '|') { - if (yych <= '^') goto yy244; - if (yych <= '{') goto yy255; - goto yy244; - } else { - if (yych == '~') goto yy244; - goto yy255; - } - } - } -yy296: - YYDEBUG(296, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(297, *YYCURSOR); - if (yybm[0+yych] & 128) { - goto yy296; - } - YYDEBUG(298, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(299, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 368 "Zend/zend_ini_scanner.l" - { /* Raw string */ - /* Eat leading and trailing single quotes */ - if (yytext[0] == '\'' && yytext[yyleng - 1] == '\'') { - SCNG(yy_text)++; - yyleng = yyleng - 2; - } - RETURN_TOKEN(TC_RAW, yytext, yyleng); -} -#line 4475 "Zend/zend_ini_scanner.c" -yy300: - YYDEBUG(300, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(301, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 401 "Zend/zend_ini_scanner.l" - { /* Variable start */ - yy_push_state(ST_VARNAME TSRMLS_CC); - return TC_DOLLAR_CURLY; -} -#line 4486 "Zend/zend_ini_scanner.c" -yy302: - YYDEBUG(302, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; -yy303: - YYDEBUG(303, *YYCURSOR); - if (yych == '\t') goto yy302; - if (yych == ' ') goto yy302; - goto yy236; -yy304: - YYDEBUG(304, *YYCURSOR); - yych = *++YYCURSOR; - goto yy233; -yy305: - YYDEBUG(305, *YYCURSOR); - yyaccept = 1; - YYMARKER = ++YYCURSOR; - YYFILL(2); - yych = *YYCURSOR; -yy306: - YYDEBUG(306, *YYCURSOR); - if (yych <= 0x1F) { - if (yych <= '\n') { - if (yych <= 0x08) goto yy231; - if (yych <= '\t') goto yy305; - goto yy304; - } else { - if (yych == '\r') goto yy308; - goto yy231; - } - } else { - if (yych <= '"') { - if (yych <= ' ') goto yy305; - if (yych <= '!') goto yy231; - } else { - if (yych == ';') goto yy283; - goto yy231; - } - } - YYDEBUG(307, *YYCURSOR); - yych = *++YYCURSOR; - goto yy238; -yy308: - YYDEBUG(308, *YYCURSOR); - ++YYCURSOR; - if ((yych = *YYCURSOR) == '\n') goto yy304; - goto yy233; - } -/* *********************************** */ -yyc_ST_VARNAME: - { - static const unsigned char yybm[] = { - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 0, 0, 128, 128, 0, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 0, 0, 128, 0, 128, 0, 128, - 0, 0, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 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, - 128, 128, 128, 0, 128, 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, 128, 128, 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, 128, - }; - YYDEBUG(309, *YYCURSOR); - YYFILL(2); - yych = *YYCURSOR; - if (yych <= ')') { - if (yych <= '"') { - if (yych <= '\f') { - if (yych <= 0x08) goto yy311; - if (yych <= '\n') goto yy313; - } else { - if (yych <= '\r') goto yy313; - if (yych >= '!') goto yy313; - } - } else { - if (yych <= '%') { - if (yych == '$') goto yy313; - } else { - if (yych != '\'') goto yy313; - } - } - } else { - if (yych <= '[') { - if (yych <= '<') { - if (yych == ';') goto yy313; - } else { - if (yych <= '=') goto yy313; - if (yych >= '[') goto yy313; - } - } else { - if (yych <= 'z') { - if (yych == '^') goto yy313; - } else { - if (yych == '}') goto yy315; - if (yych <= '~') goto yy313; - } - } - } -yy311: - YYDEBUG(311, *YYCURSOR); - ++YYCURSOR; - yych = *YYCURSOR; - goto yy318; -yy312: - YYDEBUG(312, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 406 "Zend/zend_ini_scanner.l" - { /* Variable name */ - /* Eat leading whitespace */ - EAT_LEADING_WHITESPACE(); - - /* Eat trailing whitespace */ - EAT_TRAILING_WHITESPACE(); - - RETURN_TOKEN(TC_VARNAME, yytext, yyleng); -} -#line 4627 "Zend/zend_ini_scanner.c" -yy313: - YYDEBUG(313, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(314, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 603 "Zend/zend_ini_scanner.l" - { - return 0; -} -#line 4637 "Zend/zend_ini_scanner.c" -yy315: - YYDEBUG(315, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(316, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 416 "Zend/zend_ini_scanner.l" - { /* Variable end */ - yy_pop_state(TSRMLS_C); - return '}'; -} -#line 4648 "Zend/zend_ini_scanner.c" -yy317: - YYDEBUG(317, *YYCURSOR); - ++YYCURSOR; - YYFILL(1); - yych = *YYCURSOR; -yy318: - YYDEBUG(318, *YYCURSOR); - if (yybm[0+yych] & 128) { - goto yy317; - } - goto yy312; - } -} -#line 607 "Zend/zend_ini_scanner.l" - -} +/* Generated by re2c 0.13.5 */ +#line 1 "Zend/zend_ini_scanner.l" +/* + +----------------------------------------------------------------------+ + | Zend Engine | + +----------------------------------------------------------------------+ + | Copyright (c) 1998-2014 Zend Technologies Ltd. (http://www.zend.com) | + +----------------------------------------------------------------------+ + | This source file is subject to version 2.00 of the Zend license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.zend.com/license/2_00.txt. | + | If you did not receive a copy of the Zend license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@zend.com so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: Zeev Suraski | + | Jani Taskinen | + | Marcus Boerger | + | Nuno Lopes | + | Scott MacVicar | + +----------------------------------------------------------------------+ +*/ + +/* $Id$ */ + +#include +#include "zend.h" +#include "zend_globals.h" +#include +#include "zend_ini_scanner.h" + +#if 0 +# define YYDEBUG(s, c) printf("state: %d char: %c\n", s, c) +#else +# define YYDEBUG(s, c) +#endif + +#include "zend_ini_scanner_defs.h" + +#define YYCTYPE unsigned char +/* allow the scanner to read one null byte after the end of the string (from ZEND_MMAP_AHEAD) + * so that if will be able to terminate to match the current token (e.g. non-enclosed string) */ +#define YYFILL(n) { if (YYCURSOR > YYLIMIT) return 0; } +#define YYCURSOR SCNG(yy_cursor) +#define YYLIMIT SCNG(yy_limit) +#define YYMARKER SCNG(yy_marker) + +#define YYGETCONDITION() SCNG(yy_state) +#define YYSETCONDITION(s) SCNG(yy_state) = s + +#define STATE(name) yyc##name + +/* emulate flex constructs */ +#define BEGIN(state) YYSETCONDITION(STATE(state)) +#define YYSTATE YYGETCONDITION() +#define yytext ((char*)SCNG(yy_text)) +#define yyleng SCNG(yy_leng) +#define yyless(x) do { YYCURSOR = (unsigned char*)yytext + x; \ + yyleng = (unsigned int)x; } while(0) + +/* #define yymore() goto yymore_restart */ + +/* perform sanity check. If this message is triggered you should + increase the ZEND_MMAP_AHEAD value in the zend_streams.h file */ +#define YYMAXFILL 6 +#if ZEND_MMAP_AHEAD < (YYMAXFILL + 1) +# error ZEND_MMAP_AHEAD should be greater than YYMAXFILL +#endif + + +/* How it works (for the core ini directives): + * =========================================== + * + * 1. Scanner scans file for tokens and passes them to parser. + * 2. Parser parses the tokens and passes the name/value pairs to the callback + * function which stores them in the configuration hash table. + * 3. Later REGISTER_INI_ENTRIES() is called which triggers the actual + * registering of ini entries and uses zend_get_configuration_directive() + * to fetch the previously stored name/value pair from configuration hash table + * and registers the static ini entries which match the name to the value + * into EG(ini_directives) hash table. + * 4. PATH section entries are used per-request from down to top, each overriding + * previous if one exists. zend_alter_ini_entry() is called for each entry. + * Settings in PATH section are ZEND_INI_SYSTEM accessible and thus mimics the + * php_admin_* directives used within Apache httpd.conf when PHP is compiled as + * module for Apache. + * 5. User defined ini files (like .htaccess for apache) are parsed for each request and + * stored in separate hash defined by SAPI. + */ + +/* TODO: (ordered by importance :-) + * =============================================================================== + * + * - Separate constant lookup totally from plain strings (using CONSTANT pattern) + * - Add #if .. #else .. #endif and ==, !=, <, > , <=, >= operators + * - Add #include "some.ini" + * - Allow variables to refer to options also when using parse_ini_file() + * + */ + +/* Globals Macros */ +#define SCNG INI_SCNG +#ifdef ZTS +ZEND_API ts_rsrc_id ini_scanner_globals_id; +#else +ZEND_API zend_ini_scanner_globals ini_scanner_globals; +#endif + +/* Eat leading whitespace */ +#define EAT_LEADING_WHITESPACE() \ + while (yytext[0]) { \ + if (yytext[0] == ' ' || yytext[0] == '\t') { \ + SCNG(yy_text)++; \ + yyleng--; \ + } else { \ + break; \ + } \ + } + +/* Eat trailing whitespace + extra char */ +#define EAT_TRAILING_WHITESPACE_EX(ch) \ + while (yyleng > 0 && ( \ + (ch != 'X' && yytext[yyleng - 1] == ch) || \ + yytext[yyleng - 1] == '\n' || \ + yytext[yyleng - 1] == '\r' || \ + yytext[yyleng - 1] == '\t' || \ + yytext[yyleng - 1] == ' ') \ + ) { \ + yyleng--; \ + } + +/* Eat trailing whitespace */ +#define EAT_TRAILING_WHITESPACE() EAT_TRAILING_WHITESPACE_EX('X') + +#define zend_ini_copy_value(retval, str, len) { \ + Z_STRVAL_P(retval) = zend_strndup(str, len); \ + Z_STRLEN_P(retval) = len; \ + Z_TYPE_P(retval) = IS_STRING; \ +} + +#define RETURN_TOKEN(type, str, len) { \ + zend_ini_copy_value(ini_lval, str, len); \ + return type; \ +} + +static void _yy_push_state(int new_state TSRMLS_DC) +{ + zend_stack_push(&SCNG(state_stack), (void *) &YYGETCONDITION(), sizeof(int)); + YYSETCONDITION(new_state); +} + +#define yy_push_state(state_and_tsrm) _yy_push_state(yyc##state_and_tsrm) + +static void yy_pop_state(TSRMLS_D) +{ + int *stack_state; + zend_stack_top(&SCNG(state_stack), (void **) &stack_state); + YYSETCONDITION(*stack_state); + zend_stack_del_top(&SCNG(state_stack)); +} + +static void yy_scan_buffer(char *str, unsigned int len TSRMLS_DC) +{ + YYCURSOR = (YYCTYPE*)str; + SCNG(yy_start) = YYCURSOR; + YYLIMIT = YYCURSOR + len; +} + +#define ini_filename SCNG(filename) + +/* {{{ init_ini_scanner() +*/ +static int init_ini_scanner(int scanner_mode, zend_file_handle *fh TSRMLS_DC) +{ + /* Sanity check */ + if (scanner_mode != ZEND_INI_SCANNER_NORMAL && scanner_mode != ZEND_INI_SCANNER_RAW) { + zend_error(E_WARNING, "Invalid scanner mode"); + return FAILURE; + } + + SCNG(lineno) = 1; + SCNG(scanner_mode) = scanner_mode; + SCNG(yy_in) = fh; + + if (fh != NULL) { + ini_filename = zend_strndup(fh->filename, strlen(fh->filename)); + } else { + ini_filename = NULL; + } + + zend_stack_init(&SCNG(state_stack)); + BEGIN(INITIAL); + + return SUCCESS; +} +/* }}} */ + +/* {{{ shutdown_ini_scanner() +*/ +void shutdown_ini_scanner(TSRMLS_D) +{ + zend_stack_destroy(&SCNG(state_stack)); + if (ini_filename) { + free(ini_filename); + } +} +/* }}} */ + +/* {{{ zend_ini_scanner_get_lineno() +*/ +int zend_ini_scanner_get_lineno(TSRMLS_D) +{ + return SCNG(lineno); +} +/* }}} */ + +/* {{{ zend_ini_scanner_get_filename() +*/ +char *zend_ini_scanner_get_filename(TSRMLS_D) +{ + return ini_filename ? ini_filename : "Unknown"; +} +/* }}} */ + +/* {{{ zend_ini_open_file_for_scanning() +*/ +int zend_ini_open_file_for_scanning(zend_file_handle *fh, int scanner_mode TSRMLS_DC) +{ + char *buf; + size_t size; + + if (zend_stream_fixup(fh, &buf, &size TSRMLS_CC) == FAILURE) { + return FAILURE; + } + + if (init_ini_scanner(scanner_mode, fh TSRMLS_CC) == FAILURE) { + zend_file_handle_dtor(fh TSRMLS_CC); + return FAILURE; + } + + yy_scan_buffer(buf, size TSRMLS_CC); + + return SUCCESS; +} +/* }}} */ + +/* {{{ zend_ini_prepare_string_for_scanning() +*/ +int zend_ini_prepare_string_for_scanning(char *str, int scanner_mode TSRMLS_DC) +{ + int len = strlen(str); + + if (init_ini_scanner(scanner_mode, NULL TSRMLS_CC) == FAILURE) { + return FAILURE; + } + + yy_scan_buffer(str, len TSRMLS_CC); + + return SUCCESS; +} +/* }}} */ + +/* {{{ zend_ini_escape_string() + */ +static void zend_ini_escape_string(zval *lval, char *str, int len, char quote_type TSRMLS_DC) +{ + register char *s, *t; + char *end; + + zend_ini_copy_value(lval, str, len); + + /* convert escape sequences */ + s = t = Z_STRVAL_P(lval); + end = s + Z_STRLEN_P(lval); + + while (s < end) { + if (*s == '\\') { + s++; + if (s >= end) { + *t++ = '\\'; + continue; + } + switch (*s) { + case '"': + if (*s != quote_type) { + *t++ = '\\'; + *t++ = *s; + break; + } + case '\\': + case '$': + *t++ = *s; + Z_STRLEN_P(lval)--; + break; + default: + *t++ = '\\'; + *t++ = *s; + break; + } + } else { + *t++ = *s; + } + if (*s == '\n' || (*s == '\r' && (*(s+1) != '\n'))) { + SCNG(lineno)++; + } + s++; + } + *t = 0; +} +/* }}} */ + +int ini_lex(zval *ini_lval TSRMLS_DC) +{ +restart: + SCNG(yy_text) = YYCURSOR; + +/* yymore_restart: */ + /* detect EOF */ + if (YYCURSOR >= YYLIMIT) { + if (YYSTATE == STATE(ST_VALUE) || YYSTATE == STATE(ST_RAW)) { + BEGIN(INITIAL); + return END_OF_LINE; + } + return 0; + } + + /* Eat any UTF-8 BOM we find in the first 3 bytes */ + if (YYCURSOR == SCNG(yy_start) && YYCURSOR + 3 < YYLIMIT) { + if (memcmp(YYCURSOR, "\xef\xbb\xbf", 3) == 0) { + YYCURSOR += 3; + goto restart; + } + } + +#line 337 "Zend/zend_ini_scanner.c" +{ + YYCTYPE yych; + unsigned int yyaccept = 0; + if (YYGETCONDITION() < 4) { + if (YYGETCONDITION() < 2) { + if (YYGETCONDITION() < 1) { + goto yyc_INITIAL; + } else { + goto yyc_ST_OFFSET; + } + } else { + if (YYGETCONDITION() < 3) { + goto yyc_ST_SECTION_VALUE; + } else { + goto yyc_ST_VALUE; + } + } + } else { + if (YYGETCONDITION() < 6) { + if (YYGETCONDITION() < 5) { + goto yyc_ST_SECTION_RAW; + } else { + goto yyc_ST_DOUBLE_QUOTES; + } + } else { + if (YYGETCONDITION() < 7) { + goto yyc_ST_VARNAME; + } else { + goto yyc_ST_RAW; + } + } + } +/* *********************************** */ +yyc_INITIAL: + { + static const unsigned char yybm[] = { + 144, 144, 144, 144, 144, 144, 144, 144, + 144, 160, 0, 144, 144, 0, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, + 240, 128, 128, 144, 128, 144, 128, 144, + 128, 128, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 128, 144, 128, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 128, 144, 144, 128, 144, + 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 128, 128, 128, 128, 144, + 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, + }; + + YYDEBUG(0, *YYCURSOR); + YYFILL(5); + yych = *YYCURSOR; + YYDEBUG(-1, yych); + switch (yych) { + case '\t': goto yy4; + case '\n': goto yy6; + case '\r': goto yy8; + case ' ': goto yy9; + case '!': + case '"': + case '$': + case '&': + case '(': + case ')': + case '^': + case '{': + case '|': + case '}': + case '~': goto yy10; + case '#': goto yy12; + case '%': + case '\'': + case '*': + case '+': + case ',': + case '-': + case '.': + case '/': + case ':': + case '<': + case '>': + case '?': + case '@': + case ']': goto yy13; + case ';': goto yy14; + case '=': goto yy16; + case 'F': + case 'f': goto yy18; + case 'N': + case 'n': goto yy19; + case 'O': + case 'o': goto yy20; + case 'T': + case 't': goto yy21; + case 'Y': + case 'y': goto yy22; + case '[': goto yy23; + default: goto yy2; + } +yy2: + YYDEBUG(2, *YYCURSOR); + ++YYCURSOR; + yych = *YYCURSOR; + goto yy26; +yy3: + YYDEBUG(3, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 429 "Zend/zend_ini_scanner.l" + { /* Get option name */ + /* Eat leading whitespace */ + EAT_LEADING_WHITESPACE(); + + /* Eat trailing whitespace */ + EAT_TRAILING_WHITESPACE(); + + RETURN_TOKEN(TC_LABEL, yytext, yyleng); +} +#line 476 "Zend/zend_ini_scanner.c" +yy4: + YYDEBUG(4, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + goto yy68; +yy5: + YYDEBUG(5, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 575 "Zend/zend_ini_scanner.l" + { + /* eat whitespace */ + goto restart; +} +#line 490 "Zend/zend_ini_scanner.c" +yy6: + YYDEBUG(6, *YYCURSOR); + ++YYCURSOR; +yy7: + YYDEBUG(7, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 580 "Zend/zend_ini_scanner.l" + { + SCNG(lineno)++; + return END_OF_LINE; +} +#line 502 "Zend/zend_ini_scanner.c" +yy8: + YYDEBUG(8, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '\n') goto yy71; + goto yy7; +yy9: + YYDEBUG(9, *YYCURSOR); + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= ' ') { + if (yych <= '\n') { + if (yych <= 0x08) goto yy26; + if (yych <= '\t') goto yy67; + goto yy71; + } else { + if (yych == '\r') goto yy72; + if (yych <= 0x1F) goto yy26; + goto yy69; + } + } else { + if (yych <= ':') { + if (yych == '#') goto yy58; + goto yy26; + } else { + if (yych <= ';') goto yy53; + if (yych == '=') goto yy51; + goto yy26; + } + } +yy10: + YYDEBUG(10, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(11, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 503 "Zend/zend_ini_scanner.l" + { /* Disallow these chars outside option values */ + return yytext[0]; +} +#line 541 "Zend/zend_ini_scanner.c" +yy12: + YYDEBUG(12, *YYCURSOR); + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + goto yy59; +yy13: + YYDEBUG(13, *YYCURSOR); + yych = *++YYCURSOR; + goto yy26; +yy14: + YYDEBUG(14, *YYCURSOR); + yyaccept = 2; + yych = *(YYMARKER = ++YYCURSOR); + goto yy54; + YYDEBUG(15, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 603 "Zend/zend_ini_scanner.l" + { + return 0; +} +#line 562 "Zend/zend_ini_scanner.c" +yy16: + YYDEBUG(16, *YYCURSOR); + ++YYCURSOR; + yych = *YYCURSOR; + goto yy52; +yy17: + YYDEBUG(17, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 439 "Zend/zend_ini_scanner.l" + { /* Start option value */ + if (SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW) { + yy_push_state(ST_RAW TSRMLS_CC); + } else { + yy_push_state(ST_VALUE TSRMLS_CC); + } + return '='; +} +#line 580 "Zend/zend_ini_scanner.c" +yy18: + YYDEBUG(18, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy48; + if (yych == 'a') goto yy48; + goto yy26; +yy19: + YYDEBUG(19, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'U') { + if (yych == 'O') goto yy44; + if (yych <= 'T') goto yy26; + goto yy45; + } else { + if (yych <= 'o') { + if (yych <= 'n') goto yy26; + goto yy44; + } else { + if (yych == 'u') goto yy45; + goto yy26; + } + } +yy20: + YYDEBUG(20, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'N') { + if (yych == 'F') goto yy38; + if (yych <= 'M') goto yy26; + goto yy31; + } else { + if (yych <= 'f') { + if (yych <= 'e') goto yy26; + goto yy38; + } else { + if (yych == 'n') goto yy31; + goto yy26; + } + } +yy21: + YYDEBUG(21, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy36; + if (yych == 'r') goto yy36; + goto yy26; +yy22: + YYDEBUG(22, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy27; + if (yych == 'e') goto yy27; + goto yy26; +yy23: + YYDEBUG(23, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(24, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 358 "Zend/zend_ini_scanner.l" + { /* Section start */ + /* Enter section data lookup state */ + if (SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW) { + yy_push_state(ST_SECTION_RAW TSRMLS_CC); + } else { + yy_push_state(ST_SECTION_VALUE TSRMLS_CC); + } + return TC_SECTION; +} +#line 646 "Zend/zend_ini_scanner.c" +yy25: + YYDEBUG(25, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; +yy26: + YYDEBUG(26, *YYCURSOR); + if (yybm[0+yych] & 16) { + goto yy25; + } + if (yych == '[') goto yy28; + goto yy3; +yy27: + YYDEBUG(27, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'S') goto yy31; + if (yych == 's') goto yy31; + goto yy26; +yy28: + YYDEBUG(28, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(29, *YYCURSOR); + if (yybm[0+yych] & 32) { + goto yy28; + } + YYDEBUG(30, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 383 "Zend/zend_ini_scanner.l" + { /* Start of option with offset */ + /* Eat leading whitespace */ + EAT_LEADING_WHITESPACE(); + + /* Eat trailing whitespace and [ */ + EAT_TRAILING_WHITESPACE_EX('['); + + /* Enter offset lookup state */ + yy_push_state(ST_OFFSET TSRMLS_CC); + + RETURN_TOKEN(TC_OFFSET, yytext, yyleng); +} +#line 689 "Zend/zend_ini_scanner.c" +yy31: + YYDEBUG(31, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(32, *YYCURSOR); + if (yybm[0+yych] & 64) { + goto yy31; + } + if (yych <= '\'') { + if (yych <= ' ') { + if (yych <= '\n') { + if (yych <= 0x08) goto yy25; + if (yych <= '\t') goto yy34; + } else { + if (yych != '\r') goto yy25; + } + } else { + if (yych <= '$') { + if (yych == '#') goto yy25; + } else { + if (yych != '&') goto yy25; + } + } + } else { + if (yych <= 'Z') { + if (yych <= ';') { + if (yych <= ')') goto yy33; + if (yych <= ':') goto yy25; + } else { + if (yych != '=') goto yy25; + } + } else { + if (yych <= '^') { + if (yych <= '[') goto yy28; + if (yych <= ']') goto yy25; + } else { + if (yych <= 'z') goto yy25; + if (yych >= 0x7F) goto yy25; + } + } + } +yy33: + YYDEBUG(33, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 421 "Zend/zend_ini_scanner.l" + { /* TRUE value (when used outside option value/offset this causes parse error!) */ + RETURN_TOKEN(BOOL_TRUE, "1", 1); +} +#line 739 "Zend/zend_ini_scanner.c" +yy34: + YYDEBUG(34, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(35, *YYCURSOR); + if (yych == '\t') goto yy34; + if (yych == ' ') goto yy34; + goto yy33; +yy36: + YYDEBUG(36, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'U') goto yy37; + if (yych != 'u') goto yy26; +yy37: + YYDEBUG(37, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy31; + if (yych == 'e') goto yy31; + goto yy26; +yy38: + YYDEBUG(38, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'F') goto yy39; + if (yych != 'f') goto yy26; +yy39: + YYDEBUG(39, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(40, *YYCURSOR); + if (yych <= '&') { + if (yych <= 0x1F) { + if (yych <= '\n') { + if (yych <= 0x08) goto yy25; + if (yych <= '\t') goto yy42; + } else { + if (yych != '\r') goto yy25; + } + } else { + if (yych <= '#') { + if (yych <= ' ') goto yy39; + if (yych >= '#') goto yy25; + } else { + if (yych == '%') goto yy25; + } + } + } else { + if (yych <= '=') { + if (yych <= ':') { + if (yych <= '\'') goto yy25; + if (yych >= '*') goto yy25; + } else { + if (yych == '<') goto yy25; + } + } else { + if (yych <= ']') { + if (yych == '[') goto yy28; + goto yy25; + } else { + if (yych <= '^') goto yy41; + if (yych <= 'z') goto yy25; + if (yych >= 0x7F) goto yy25; + } + } + } +yy41: + YYDEBUG(41, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 425 "Zend/zend_ini_scanner.l" + { /* FALSE value (when used outside option value/offset this causes parse error!)*/ + RETURN_TOKEN(BOOL_FALSE, "", 0); +} +#line 813 "Zend/zend_ini_scanner.c" +yy42: + YYDEBUG(42, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(43, *YYCURSOR); + if (yych == '\t') goto yy42; + if (yych == ' ') goto yy42; + goto yy41; +yy44: + YYDEBUG(44, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '\'') { + if (yych <= 0x1F) { + if (yych <= '\n') { + if (yych <= 0x08) goto yy26; + if (yych <= '\t') goto yy42; + goto yy41; + } else { + if (yych == '\r') goto yy41; + goto yy26; + } + } else { + if (yych <= '#') { + if (yych <= ' ') goto yy39; + if (yych <= '"') goto yy41; + goto yy26; + } else { + if (yych == '%') goto yy26; + if (yych <= '&') goto yy41; + goto yy26; + } + } + } else { + if (yych <= 'N') { + if (yych <= ';') { + if (yych <= ')') goto yy41; + if (yych <= ':') goto yy26; + goto yy41; + } else { + if (yych == '=') goto yy41; + if (yych <= 'M') goto yy26; + goto yy47; + } + } else { + if (yych <= 'm') { + if (yych == '^') goto yy41; + goto yy26; + } else { + if (yych <= 'n') goto yy47; + if (yych <= 'z') goto yy26; + if (yych <= '~') goto yy41; + goto yy26; + } + } + } +yy45: + YYDEBUG(45, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy46; + if (yych != 'l') goto yy26; +yy46: + YYDEBUG(46, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy39; + if (yych == 'l') goto yy39; + goto yy26; +yy47: + YYDEBUG(47, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy39; + if (yych == 'e') goto yy39; + goto yy26; +yy48: + YYDEBUG(48, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy49; + if (yych != 'l') goto yy26; +yy49: + YYDEBUG(49, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'S') goto yy50; + if (yych != 's') goto yy26; +yy50: + YYDEBUG(50, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy39; + if (yych == 'e') goto yy39; + goto yy26; +yy51: + YYDEBUG(51, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; +yy52: + YYDEBUG(52, *YYCURSOR); + if (yych == '\t') goto yy51; + if (yych == ' ') goto yy51; + goto yy17; +yy53: + YYDEBUG(53, *YYCURSOR); + ++YYCURSOR; + YYFILL(2); + yych = *YYCURSOR; +yy54: + YYDEBUG(54, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy53; + } + if (yych >= '\r') goto yy57; +yy55: + YYDEBUG(55, *YYCURSOR); + ++YYCURSOR; +yy56: + YYDEBUG(56, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 585 "Zend/zend_ini_scanner.l" + { /* Comment */ + BEGIN(INITIAL); + SCNG(lineno)++; + return END_OF_LINE; +} +#line 936 "Zend/zend_ini_scanner.c" +yy57: + YYDEBUG(57, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '\n') goto yy55; + goto yy56; +yy58: + YYDEBUG(58, *YYCURSOR); + yyaccept = 1; + YYMARKER = ++YYCURSOR; + YYFILL(2); + yych = *YYCURSOR; +yy59: + YYDEBUG(59, *YYCURSOR); + if (yych <= '\'') { + if (yych <= ' ') { + if (yych <= '\n') { + if (yych <= 0x08) goto yy58; + if (yych >= '\n') goto yy64; + } else { + if (yych == '\r') goto yy66; + goto yy58; + } + } else { + if (yych <= '$') { + if (yych == '#') goto yy58; + } else { + if (yych != '&') goto yy58; + } + } + } else { + if (yych <= 'Z') { + if (yych <= ';') { + if (yych <= ')') goto yy60; + if (yych <= ':') goto yy58; + } else { + if (yych != '=') goto yy58; + } + } else { + if (yych <= '^') { + if (yych <= '[') goto yy62; + if (yych <= ']') goto yy58; + } else { + if (yych <= 'z') goto yy58; + if (yych >= 0x7F) goto yy58; + } + } + } +yy60: + YYDEBUG(60, *YYCURSOR); + ++YYCURSOR; + YYFILL(2); + yych = *YYCURSOR; + YYDEBUG(61, *YYCURSOR); + if (yych == '\n') goto yy64; + if (yych == '\r') goto yy66; + goto yy60; +yy62: + YYDEBUG(62, *YYCURSOR); + yyaccept = 3; + YYMARKER = ++YYCURSOR; + YYFILL(2); + yych = *YYCURSOR; + YYDEBUG(63, *YYCURSOR); + if (yych <= '\f') { + if (yych <= 0x08) goto yy60; + if (yych <= '\t') goto yy62; + if (yych >= '\v') goto yy60; + } else { + if (yych <= '\r') goto yy66; + if (yych == ' ') goto yy62; + goto yy60; + } +yy64: + YYDEBUG(64, *YYCURSOR); + ++YYCURSOR; +yy65: + YYDEBUG(65, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 591 "Zend/zend_ini_scanner.l" + { /* #Comment */ + zend_error(E_DEPRECATED, "Comments starting with '#' are deprecated in %s on line %d", zend_ini_scanner_get_filename(TSRMLS_C), SCNG(lineno)); + BEGIN(INITIAL); + SCNG(lineno)++; + return END_OF_LINE; +} +#line 1022 "Zend/zend_ini_scanner.c" +yy66: + YYDEBUG(66, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '\n') goto yy64; + goto yy65; +yy67: + YYDEBUG(67, *YYCURSOR); + yyaccept = 0; + YYMARKER = ++YYCURSOR; + YYFILL(2); + yych = *YYCURSOR; +yy68: + YYDEBUG(68, *YYCURSOR); + if (yych <= ' ') { + if (yych <= '\n') { + if (yych <= 0x08) goto yy5; + if (yych <= '\t') goto yy67; + goto yy71; + } else { + if (yych == '\r') goto yy72; + if (yych <= 0x1F) goto yy5; + goto yy67; + } + } else { + if (yych <= ':') { + if (yych == '#') goto yy60; + goto yy5; + } else { + if (yych <= ';') goto yy53; + if (yych == '=') goto yy51; + goto yy5; + } + } +yy69: + YYDEBUG(69, *YYCURSOR); + yyaccept = 1; + YYMARKER = ++YYCURSOR; + YYFILL(2); + yych = *YYCURSOR; + YYDEBUG(70, *YYCURSOR); + if (yych <= '&') { + if (yych <= 0x1F) { + if (yych <= '\n') { + if (yych <= 0x08) goto yy25; + if (yych <= '\t') goto yy67; + } else { + if (yych == '\r') goto yy72; + goto yy25; + } + } else { + if (yych <= '#') { + if (yych <= ' ') goto yy69; + if (yych <= '"') goto yy3; + goto yy58; + } else { + if (yych == '%') goto yy25; + goto yy3; + } + } + } else { + if (yych <= '=') { + if (yych <= ':') { + if (yych <= '\'') goto yy25; + if (yych <= ')') goto yy3; + goto yy25; + } else { + if (yych <= ';') goto yy53; + if (yych <= '<') goto yy25; + goto yy51; + } + } else { + if (yych <= ']') { + if (yych == '[') goto yy28; + goto yy25; + } else { + if (yych <= '^') goto yy3; + if (yych <= 'z') goto yy25; + if (yych <= '~') goto yy3; + goto yy25; + } + } + } +yy71: + YYDEBUG(71, *YYCURSOR); + yych = *++YYCURSOR; + goto yy7; +yy72: + YYDEBUG(72, *YYCURSOR); + ++YYCURSOR; + if ((yych = *YYCURSOR) == '\n') goto yy71; + goto yy7; + } +/* *********************************** */ +yyc_ST_DOUBLE_QUOTES: + { + static const unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 128, 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, 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, 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, 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, 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, + }; + YYDEBUG(73, *YYCURSOR); + YYFILL(2); + yych = *YYCURSOR; + if (yych == '"') goto yy77; + if (yych == '$') goto yy79; + YYDEBUG(75, *YYCURSOR); + ++YYCURSOR; +yy76: + YYDEBUG(76, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 535 "Zend/zend_ini_scanner.l" + { /* Escape double quoted string contents */ + if (YYCURSOR > YYLIMIT) { + return 0; + } + + while (YYCURSOR < YYLIMIT) { + switch (*YYCURSOR++) { + case '"': + if (YYCURSOR < YYLIMIT && YYCURSOR[-2] == '\\' && *YYCURSOR != '\r' && *YYCURSOR != '\n') { + continue; + } + break; + case '$': + if (*YYCURSOR == '{') { + break; + } + continue; + case '\\': + if (YYCURSOR < YYLIMIT && *YYCURSOR != '"') { + YYCURSOR++; + } + /* fall through */ + default: + continue; + } + + YYCURSOR--; + break; + } + + yyleng = YYCURSOR - SCNG(yy_text); + + zend_ini_escape_string(ini_lval, yytext, yyleng, '"' TSRMLS_CC); + return TC_QUOTED_STRING; +} +#line 1198 "Zend/zend_ini_scanner.c" +yy77: + YYDEBUG(77, *YYCURSOR); + ++YYCURSOR; + yych = *YYCURSOR; + goto yy83; +yy78: + YYDEBUG(78, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 530 "Zend/zend_ini_scanner.l" + { /* Double quoted '"' string ends */ + yy_pop_state(TSRMLS_C); + return '"'; +} +#line 1212 "Zend/zend_ini_scanner.c" +yy79: + YYDEBUG(79, *YYCURSOR); + yych = *++YYCURSOR; + if (yych != '{') goto yy76; + YYDEBUG(80, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(81, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 401 "Zend/zend_ini_scanner.l" + { /* Variable start */ + yy_push_state(ST_VARNAME TSRMLS_CC); + return TC_DOLLAR_CURLY; +} +#line 1226 "Zend/zend_ini_scanner.c" +yy82: + YYDEBUG(82, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; +yy83: + YYDEBUG(83, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy82; + } + goto yy78; + } +/* *********************************** */ +yyc_ST_OFFSET: + { + static const unsigned char yybm[] = { + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 194, 64, 66, 66, 64, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 194, 66, 64, 66, 68, 66, 66, 0, + 66, 66, 66, 66, 66, 66, 66, 66, + 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 66, 64, 66, 66, 66, 66, + 66, 82, 82, 82, 82, 82, 82, 82, + 82, 82, 82, 82, 82, 82, 82, 82, + 82, 82, 82, 82, 82, 82, 82, 82, + 82, 82, 82, 66, 72, 64, 66, 82, + 66, 82, 82, 82, 82, 82, 82, 82, + 82, 82, 82, 82, 82, 82, 82, 82, + 82, 82, 82, 82, 82, 82, 82, 82, + 82, 82, 82, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + }; + YYDEBUG(84, *YYCURSOR); + YYFILL(2); + yych = *YYCURSOR; + if (yych <= '-') { + if (yych <= ' ') { + if (yych <= '\n') { + if (yych <= 0x08) goto yy86; + if (yych <= '\t') goto yy88; + goto yy89; + } else { + if (yych == '\r') goto yy89; + if (yych >= ' ') goto yy88; + } + } else { + if (yych <= '$') { + if (yych == '"') goto yy91; + if (yych >= '$') goto yy93; + } else { + if (yych == '\'') goto yy94; + if (yych >= '-') goto yy95; + } + } + } else { + if (yych <= 'Z') { + if (yych <= '9') { + if (yych <= '.') goto yy96; + if (yych >= '0') goto yy97; + } else { + if (yych == ';') goto yy89; + if (yych >= 'A') goto yy99; + } + } else { + if (yych <= '^') { + if (yych <= '[') goto yy86; + if (yych <= '\\') goto yy101; + if (yych <= ']') goto yy102; + } else { + if (yych == '`') goto yy86; + if (yych <= 'z') goto yy99; + } + } + } +yy86: + YYDEBUG(86, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + goto yy105; +yy87: + YYDEBUG(87, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 521 "Zend/zend_ini_scanner.l" + { /* Get rest as section/offset value */ + RETURN_TOKEN(TC_STRING, yytext, yyleng); +} +#line 1330 "Zend/zend_ini_scanner.c" +yy88: + YYDEBUG(88, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy131; + } + if (yych == '"') goto yy133; + if (yych == ']') goto yy134; + goto yy105; +yy89: + YYDEBUG(89, *YYCURSOR); + ++YYCURSOR; +yy90: + YYDEBUG(90, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 603 "Zend/zend_ini_scanner.l" + { + return 0; +} +#line 1351 "Zend/zend_ini_scanner.c" +yy91: + YYDEBUG(91, *YYCURSOR); + ++YYCURSOR; +yy92: + YYDEBUG(92, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 525 "Zend/zend_ini_scanner.l" + { /* Double quoted '"' string start */ + yy_push_state(ST_DOUBLE_QUOTES TSRMLS_CC); + return '"'; +} +#line 1363 "Zend/zend_ini_scanner.c" +yy93: + YYDEBUG(93, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '\\') { + if (yych <= 0x00) goto yy90; + if (yych <= '[') goto yy104; + goto yy109; + } else { + if (yych == '{') goto yy129; + goto yy104; + } +yy94: + YYDEBUG(94, *YYCURSOR); + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if (yybm[0+yych] & 64) { + goto yy125; + } + goto yy90; +yy95: + YYDEBUG(95, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '/') goto yy105; + if (yych <= '9') goto yy123; + goto yy105; +yy96: + YYDEBUG(96, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '/') goto yy105; + if (yych <= '9') goto yy121; + goto yy105; +yy97: + YYDEBUG(97, *YYCURSOR); + yyaccept = 2; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '\'') { + if (yych <= '\r') { + if (yych == '\n') goto yy98; + if (yych <= '\f') goto yy105; + } else { + if (yych == '"') goto yy98; + if (yych <= '&') goto yy105; + } + } else { + if (yych <= '9') { + if (yych == '.') goto yy117; + if (yych <= '/') goto yy105; + goto yy119; + } else { + if (yych <= ';') { + if (yych <= ':') goto yy105; + } else { + if (yych != ']') goto yy105; + } + } + } +yy98: + YYDEBUG(98, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 499 "Zend/zend_ini_scanner.l" + { /* Get number option value as string */ + RETURN_TOKEN(TC_NUMBER, yytext, yyleng); +} +#line 1429 "Zend/zend_ini_scanner.c" +yy99: + YYDEBUG(99, *YYCURSOR); + yyaccept = 3; + yych = *(YYMARKER = ++YYCURSOR); + if (yybm[0+yych] & 16) { + goto yy115; + } + if (yych <= '"') { + if (yych <= '\f') { + if (yych != '\n') goto yy105; + } else { + if (yych <= '\r') goto yy100; + if (yych <= '!') goto yy105; + } + } else { + if (yych <= ':') { + if (yych != '\'') goto yy105; + } else { + if (yych <= ';') goto yy100; + if (yych != ']') goto yy105; + } + } +yy100: + YYDEBUG(100, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 495 "Zend/zend_ini_scanner.l" + { /* Get constant option value */ + RETURN_TOKEN(TC_CONSTANT, yytext, yyleng); +} +#line 1459 "Zend/zend_ini_scanner.c" +yy101: + YYDEBUG(101, *YYCURSOR); + yych = *++YYCURSOR; + goto yy104; +yy102: + YYDEBUG(102, *YYCURSOR); + ++YYCURSOR; +yy103: + YYDEBUG(103, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 396 "Zend/zend_ini_scanner.l" + { /* End of section or an option offset */ + BEGIN(INITIAL); + return ']'; +} +#line 1475 "Zend/zend_ini_scanner.c" +yy104: + YYDEBUG(104, *YYCURSOR); + yyaccept = 0; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; +yy105: + YYDEBUG(105, *YYCURSOR); + if (yybm[0+yych] & 2) { + goto yy104; + } + if (yych == '$') goto yy107; + if (yych != '\\') goto yy87; +yy106: + YYDEBUG(106, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + goto yy104; +yy107: + YYDEBUG(107, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + if (yych <= '\\') { + if (yych <= 0x00) goto yy108; + if (yych <= '[') goto yy104; + goto yy109; + } else { + if (yych != '{') goto yy104; + } +yy108: + YYDEBUG(108, *YYCURSOR); + YYCURSOR = YYMARKER; + if (yyaccept <= 1) { + if (yyaccept <= 0) { + goto yy87; + } else { + goto yy90; + } + } else { + if (yyaccept <= 2) { + goto yy98; + } else { + goto yy100; + } + } +yy109: + YYDEBUG(109, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + if (yybm[0+yych] & 4) { + goto yy110; + } + if (yych == '\\') goto yy112; + goto yy104; +yy110: + YYDEBUG(110, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(111, *YYCURSOR); + if (yybm[0+yych] & 4) { + goto yy110; + } + if (yych == '\\') goto yy114; + goto yy104; +yy112: + YYDEBUG(112, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(113, *YYCURSOR); + if (yybm[0+yych] & 4) { + goto yy110; + } + if (yych == '\\') goto yy112; + goto yy104; +yy114: + YYDEBUG(114, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + if (yybm[0+yych] & 4) { + goto yy110; + } + if (yych == '\\') goto yy112; + goto yy104; +yy115: + YYDEBUG(115, *YYCURSOR); + yyaccept = 3; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(116, *YYCURSOR); + if (yybm[0+yych] & 16) { + goto yy115; + } + if (yych <= '$') { + if (yych <= '\r') { + if (yych == '\n') goto yy100; + if (yych <= '\f') goto yy104; + goto yy100; + } else { + if (yych == '"') goto yy100; + if (yych <= '#') goto yy104; + goto yy107; + } + } else { + if (yych <= ';') { + if (yych == '\'') goto yy100; + if (yych <= ':') goto yy104; + goto yy100; + } else { + if (yych <= '[') goto yy104; + if (yych <= '\\') goto yy106; + if (yych <= ']') goto yy100; + goto yy104; + } + } +yy117: + YYDEBUG(117, *YYCURSOR); + yyaccept = 2; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(118, *YYCURSOR); + if (yybm[0+yych] & 32) { + goto yy117; + } + if (yych <= '$') { + if (yych <= '\r') { + if (yych == '\n') goto yy98; + if (yych <= '\f') goto yy104; + goto yy98; + } else { + if (yych == '"') goto yy98; + if (yych <= '#') goto yy104; + goto yy107; + } + } else { + if (yych <= ';') { + if (yych == '\'') goto yy98; + if (yych <= ':') goto yy104; + goto yy98; + } else { + if (yych <= '[') goto yy104; + if (yych <= '\\') goto yy106; + if (yych <= ']') goto yy98; + goto yy104; + } + } +yy119: + YYDEBUG(119, *YYCURSOR); + yyaccept = 2; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(120, *YYCURSOR); + if (yych <= '\'') { + if (yych <= '!') { + if (yych <= '\n') { + if (yych <= '\t') goto yy104; + goto yy98; + } else { + if (yych == '\r') goto yy98; + goto yy104; + } + } else { + if (yych <= '#') { + if (yych <= '"') goto yy98; + goto yy104; + } else { + if (yych <= '$') goto yy107; + if (yych <= '&') goto yy104; + goto yy98; + } + } + } else { + if (yych <= ':') { + if (yych <= '.') { + if (yych <= '-') goto yy104; + goto yy117; + } else { + if (yych <= '/') goto yy104; + if (yych <= '9') goto yy119; + goto yy104; + } + } else { + if (yych <= '[') { + if (yych <= ';') goto yy98; + goto yy104; + } else { + if (yych <= '\\') goto yy106; + if (yych <= ']') goto yy98; + goto yy104; + } + } + } +yy121: + YYDEBUG(121, *YYCURSOR); + yyaccept = 2; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(122, *YYCURSOR); + if (yych <= '&') { + if (yych <= '\r') { + if (yych == '\n') goto yy98; + if (yych <= '\f') goto yy104; + goto yy98; + } else { + if (yych <= '"') { + if (yych <= '!') goto yy104; + goto yy98; + } else { + if (yych == '$') goto yy107; + goto yy104; + } + } + } else { + if (yych <= ':') { + if (yych <= '\'') goto yy98; + if (yych <= '/') goto yy104; + if (yych <= '9') goto yy121; + goto yy104; + } else { + if (yych <= '[') { + if (yych <= ';') goto yy98; + goto yy104; + } else { + if (yych <= '\\') goto yy106; + if (yych <= ']') goto yy98; + goto yy104; + } + } + } +yy123: + YYDEBUG(123, *YYCURSOR); + yyaccept = 2; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(124, *YYCURSOR); + if (yych <= '&') { + if (yych <= '\r') { + if (yych == '\n') goto yy98; + if (yych <= '\f') goto yy104; + goto yy98; + } else { + if (yych <= '"') { + if (yych <= '!') goto yy104; + goto yy98; + } else { + if (yych == '$') goto yy107; + goto yy104; + } + } + } else { + if (yych <= ':') { + if (yych <= '\'') goto yy98; + if (yych <= '/') goto yy104; + if (yych <= '9') goto yy123; + goto yy104; + } else { + if (yych <= '[') { + if (yych <= ';') goto yy98; + goto yy104; + } else { + if (yych <= '\\') goto yy106; + if (yych <= ']') goto yy98; + goto yy104; + } + } + } +yy125: + YYDEBUG(125, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(126, *YYCURSOR); + if (yybm[0+yych] & 64) { + goto yy125; + } + YYDEBUG(127, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(128, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 368 "Zend/zend_ini_scanner.l" + { /* Raw string */ + /* Eat leading and trailing single quotes */ + if (yytext[0] == '\'' && yytext[yyleng - 1] == '\'') { + SCNG(yy_text)++; + yyleng = yyleng - 2; + } + RETURN_TOKEN(TC_RAW, yytext, yyleng); +} +#line 1774 "Zend/zend_ini_scanner.c" +yy129: + YYDEBUG(129, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(130, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 401 "Zend/zend_ini_scanner.l" + { /* Variable start */ + yy_push_state(ST_VARNAME TSRMLS_CC); + return TC_DOLLAR_CURLY; +} +#line 1785 "Zend/zend_ini_scanner.c" +yy131: + YYDEBUG(131, *YYCURSOR); + yyaccept = 0; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(132, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy131; + } + if (yych <= '$') { + if (yych <= '\r') { + if (yych == '\n') goto yy87; + if (yych <= '\f') goto yy104; + goto yy87; + } else { + if (yych == '"') goto yy133; + if (yych <= '#') goto yy104; + goto yy107; + } + } else { + if (yych <= ';') { + if (yych == '\'') goto yy87; + if (yych <= ':') goto yy104; + goto yy87; + } else { + if (yych <= '[') goto yy104; + if (yych <= '\\') goto yy106; + if (yych <= ']') goto yy134; + goto yy104; + } + } +yy133: + YYDEBUG(133, *YYCURSOR); + yych = *++YYCURSOR; + goto yy92; +yy134: + YYDEBUG(134, *YYCURSOR); + ++YYCURSOR; + yych = *YYCURSOR; + goto yy103; + } +/* *********************************** */ +yyc_ST_RAW: + { + static const unsigned char yybm[] = { + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 192, 0, 64, 64, 0, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 192, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + }; + YYDEBUG(135, *YYCURSOR); + YYFILL(3); + yych = *YYCURSOR; + if (yych <= '\f') { + if (yych <= 0x08) { + if (yych >= 0x01) goto yy139; + } else { + if (yych <= '\t') goto yy141; + if (yych <= '\n') goto yy142; + goto yy139; + } + } else { + if (yych <= ' ') { + if (yych <= '\r') goto yy144; + if (yych <= 0x1F) goto yy139; + goto yy141; + } else { + if (yych == ';') goto yy145; + goto yy139; + } + } + YYDEBUG(137, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(138, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 598 "Zend/zend_ini_scanner.l" + { /* End of option value (if EOF is reached before EOL */ + BEGIN(INITIAL); + return END_OF_LINE; +} +#line 1895 "Zend/zend_ini_scanner.c" +yy139: + YYDEBUG(139, *YYCURSOR); + ++YYCURSOR; +yy140: + YYDEBUG(140, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 448 "Zend/zend_ini_scanner.l" + { /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */ + char *sc = NULL; + while (YYCURSOR < YYLIMIT) { + switch (*YYCURSOR) { + case '\n': + case '\r': + goto end_raw_value_chars; + break; + case ';': + if (sc == NULL) { + sc = YYCURSOR; + } + /* no break */ + default: + YYCURSOR++; + break; + } + } +end_raw_value_chars: + yyleng = YYCURSOR - SCNG(yy_text); + + /* Eat trailing semicolons */ + while (yytext[yyleng - 1] == ';') { + yyleng--; + } + + /* Eat leading and trailing double quotes */ + if (yytext[0] == '"' && yytext[yyleng - 1] == '"') { + SCNG(yy_text)++; + yyleng = yyleng - 2; + } else if (sc) { + YYCURSOR = sc; + yyleng = YYCURSOR - SCNG(yy_text); + } + RETURN_TOKEN(TC_RAW, yytext, yyleng); +} +#line 1939 "Zend/zend_ini_scanner.c" +yy141: + YYDEBUG(141, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '\r') { + if (yych <= 0x08) goto yy140; + if (yych <= '\n') goto yy153; + if (yych <= '\f') goto yy140; + goto yy153; + } else { + if (yych <= ' ') { + if (yych <= 0x1F) goto yy140; + goto yy153; + } else { + if (yych == ';') goto yy153; + goto yy140; + } + } +yy142: + YYDEBUG(142, *YYCURSOR); + ++YYCURSOR; +yy143: + YYDEBUG(143, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 489 "Zend/zend_ini_scanner.l" + { /* End of option value */ + BEGIN(INITIAL); + SCNG(lineno)++; + return END_OF_LINE; +} +#line 1970 "Zend/zend_ini_scanner.c" +yy144: + YYDEBUG(144, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '\n') goto yy151; + goto yy143; +yy145: + YYDEBUG(145, *YYCURSOR); + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + goto yy147; +yy146: + YYDEBUG(146, *YYCURSOR); + ++YYCURSOR; + YYFILL(2); + yych = *YYCURSOR; +yy147: + YYDEBUG(147, *YYCURSOR); + if (yybm[0+yych] & 64) { + goto yy146; + } + if (yych >= '\r') goto yy150; +yy148: + YYDEBUG(148, *YYCURSOR); + ++YYCURSOR; +yy149: + YYDEBUG(149, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 585 "Zend/zend_ini_scanner.l" + { /* Comment */ + BEGIN(INITIAL); + SCNG(lineno)++; + return END_OF_LINE; +} +#line 2004 "Zend/zend_ini_scanner.c" +yy150: + YYDEBUG(150, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '\n') goto yy148; + goto yy149; +yy151: + YYDEBUG(151, *YYCURSOR); + yych = *++YYCURSOR; + goto yy143; +yy152: + YYDEBUG(152, *YYCURSOR); + yyaccept = 2; + YYMARKER = ++YYCURSOR; + YYFILL(2); + yych = *YYCURSOR; +yy153: + YYDEBUG(153, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy152; + } + if (yych <= '\f') { + if (yych == '\n') goto yy151; + } else { + if (yych <= '\r') goto yy155; + if (yych == ';') goto yy146; + } + YYDEBUG(154, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 575 "Zend/zend_ini_scanner.l" + { + /* eat whitespace */ + goto restart; +} +#line 2038 "Zend/zend_ini_scanner.c" +yy155: + YYDEBUG(155, *YYCURSOR); + ++YYCURSOR; + if ((yych = *YYCURSOR) == '\n') goto yy151; + goto yy143; + } +/* *********************************** */ +yyc_ST_SECTION_RAW: + { + static const unsigned char yybm[] = { + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 192, 0, 128, 128, 0, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 192, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 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, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 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(156, *YYCURSOR); + YYFILL(3); + yych = *YYCURSOR; + if (yych <= '\f') { + if (yych == '\n') goto yy160; + } else { + if (yych <= '\r') goto yy160; + if (yych == ']') goto yy162; + } + YYDEBUG(158, *YYCURSOR); + ++YYCURSOR; + yych = *YYCURSOR; + goto yy169; +yy159: + YYDEBUG(159, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 485 "Zend/zend_ini_scanner.l" + { /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */ + RETURN_TOKEN(TC_RAW, yytext, yyleng); +} +#line 2102 "Zend/zend_ini_scanner.c" +yy160: + YYDEBUG(160, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(161, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 603 "Zend/zend_ini_scanner.l" + { + return 0; +} +#line 2112 "Zend/zend_ini_scanner.c" +yy162: + YYDEBUG(162, *YYCURSOR); + ++YYCURSOR; + yych = *YYCURSOR; + goto yy165; +yy163: + YYDEBUG(163, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 377 "Zend/zend_ini_scanner.l" + { /* End of section */ + BEGIN(INITIAL); + SCNG(lineno)++; + return ']'; +} +#line 2127 "Zend/zend_ini_scanner.c" +yy164: + YYDEBUG(164, *YYCURSOR); + ++YYCURSOR; + YYFILL(2); + yych = *YYCURSOR; +yy165: + YYDEBUG(165, *YYCURSOR); + if (yybm[0+yych] & 64) { + goto yy164; + } + if (yych == '\n') goto yy166; + if (yych == '\r') goto yy167; + goto yy163; +yy166: + YYDEBUG(166, *YYCURSOR); + yych = *++YYCURSOR; + goto yy163; +yy167: + YYDEBUG(167, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '\n') goto yy166; + goto yy163; +yy168: + YYDEBUG(168, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; +yy169: + YYDEBUG(169, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy168; + } + goto yy159; + } +/* *********************************** */ +yyc_ST_SECTION_VALUE: + { + static const unsigned char yybm[] = { + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 134, 128, 132, 132, 128, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 134, 132, 128, 132, 136, 132, 132, 0, + 132, 132, 132, 132, 132, 132, 132, 132, + 228, 228, 228, 228, 228, 228, 228, 228, + 228, 228, 132, 128, 132, 132, 132, 132, + 132, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 132, 144, 128, 132, 164, + 132, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + }; + YYDEBUG(170, *YYCURSOR); + YYFILL(3); + yych = *YYCURSOR; + if (yych <= '-') { + if (yych <= ' ') { + if (yych <= '\n') { + if (yych <= 0x08) goto yy172; + if (yych <= '\t') goto yy174; + goto yy175; + } else { + if (yych == '\r') goto yy175; + if (yych >= ' ') goto yy174; + } + } else { + if (yych <= '$') { + if (yych == '"') goto yy177; + if (yych >= '$') goto yy179; + } else { + if (yych == '\'') goto yy180; + if (yych >= '-') goto yy181; + } + } + } else { + if (yych <= 'Z') { + if (yych <= '9') { + if (yych <= '.') goto yy182; + if (yych >= '0') goto yy183; + } else { + if (yych == ';') goto yy175; + if (yych >= 'A') goto yy185; + } + } else { + if (yych <= '^') { + if (yych <= '[') goto yy172; + if (yych <= '\\') goto yy187; + if (yych <= ']') goto yy188; + } else { + if (yych == '`') goto yy172; + if (yych <= 'z') goto yy185; + } + } + } +yy172: + YYDEBUG(172, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + goto yy195; +yy173: + YYDEBUG(173, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 521 "Zend/zend_ini_scanner.l" + { /* Get rest as section/offset value */ + RETURN_TOKEN(TC_STRING, yytext, yyleng); +} +#line 2253 "Zend/zend_ini_scanner.c" +yy174: + YYDEBUG(174, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= 0x1F) { + if (yych == '\t') goto yy221; + goto yy195; + } else { + if (yych <= ' ') goto yy221; + if (yych == '"') goto yy223; + goto yy195; + } +yy175: + YYDEBUG(175, *YYCURSOR); + ++YYCURSOR; +yy176: + YYDEBUG(176, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 603 "Zend/zend_ini_scanner.l" + { + return 0; +} +#line 2276 "Zend/zend_ini_scanner.c" +yy177: + YYDEBUG(177, *YYCURSOR); + ++YYCURSOR; +yy178: + YYDEBUG(178, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 525 "Zend/zend_ini_scanner.l" + { /* Double quoted '"' string start */ + yy_push_state(ST_DOUBLE_QUOTES TSRMLS_CC); + return '"'; +} +#line 2288 "Zend/zend_ini_scanner.c" +yy179: + YYDEBUG(179, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '\\') { + if (yych <= 0x00) goto yy176; + if (yych <= '[') goto yy194; + goto yy199; + } else { + if (yych == '{') goto yy219; + goto yy194; + } +yy180: + YYDEBUG(180, *YYCURSOR); + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy215; + } + goto yy176; +yy181: + YYDEBUG(181, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '/') goto yy195; + if (yych <= '9') goto yy213; + goto yy195; +yy182: + YYDEBUG(182, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '/') goto yy195; + if (yych <= '9') goto yy211; + goto yy195; +yy183: + YYDEBUG(183, *YYCURSOR); + yyaccept = 2; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '\'') { + if (yych <= '\r') { + if (yych == '\n') goto yy184; + if (yych <= '\f') goto yy195; + } else { + if (yych == '"') goto yy184; + if (yych <= '&') goto yy195; + } + } else { + if (yych <= '9') { + if (yych == '.') goto yy207; + if (yych <= '/') goto yy195; + goto yy209; + } else { + if (yych <= ';') { + if (yych <= ':') goto yy195; + } else { + if (yych != ']') goto yy195; + } + } + } +yy184: + YYDEBUG(184, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 499 "Zend/zend_ini_scanner.l" + { /* Get number option value as string */ + RETURN_TOKEN(TC_NUMBER, yytext, yyleng); +} +#line 2354 "Zend/zend_ini_scanner.c" +yy185: + YYDEBUG(185, *YYCURSOR); + yyaccept = 3; + yych = *(YYMARKER = ++YYCURSOR); + if (yybm[0+yych] & 32) { + goto yy205; + } + if (yych <= '"') { + if (yych <= '\f') { + if (yych != '\n') goto yy195; + } else { + if (yych <= '\r') goto yy186; + if (yych <= '!') goto yy195; + } + } else { + if (yych <= ':') { + if (yych != '\'') goto yy195; + } else { + if (yych <= ';') goto yy186; + if (yych != ']') goto yy195; + } + } +yy186: + YYDEBUG(186, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 495 "Zend/zend_ini_scanner.l" + { /* Get constant option value */ + RETURN_TOKEN(TC_CONSTANT, yytext, yyleng); +} +#line 2384 "Zend/zend_ini_scanner.c" +yy187: + YYDEBUG(187, *YYCURSOR); + yych = *++YYCURSOR; + goto yy194; +yy188: + YYDEBUG(188, *YYCURSOR); + ++YYCURSOR; + yych = *YYCURSOR; + goto yy191; +yy189: + YYDEBUG(189, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 377 "Zend/zend_ini_scanner.l" + { /* End of section */ + BEGIN(INITIAL); + SCNG(lineno)++; + return ']'; +} +#line 2403 "Zend/zend_ini_scanner.c" +yy190: + YYDEBUG(190, *YYCURSOR); + ++YYCURSOR; + YYFILL(2); + yych = *YYCURSOR; +yy191: + YYDEBUG(191, *YYCURSOR); + if (yybm[0+yych] & 2) { + goto yy190; + } + if (yych == '\n') goto yy192; + if (yych == '\r') goto yy193; + goto yy189; +yy192: + YYDEBUG(192, *YYCURSOR); + yych = *++YYCURSOR; + goto yy189; +yy193: + YYDEBUG(193, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '\n') goto yy192; + goto yy189; +yy194: + YYDEBUG(194, *YYCURSOR); + yyaccept = 0; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; +yy195: + YYDEBUG(195, *YYCURSOR); + if (yybm[0+yych] & 4) { + goto yy194; + } + if (yych == '$') goto yy197; + if (yych != '\\') goto yy173; +yy196: + YYDEBUG(196, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + goto yy194; +yy197: + YYDEBUG(197, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + if (yych <= '\\') { + if (yych <= 0x00) goto yy198; + if (yych <= '[') goto yy194; + goto yy199; + } else { + if (yych != '{') goto yy194; + } +yy198: + YYDEBUG(198, *YYCURSOR); + YYCURSOR = YYMARKER; + if (yyaccept <= 1) { + if (yyaccept <= 0) { + goto yy173; + } else { + goto yy176; + } + } else { + if (yyaccept <= 2) { + goto yy184; + } else { + goto yy186; + } + } +yy199: + YYDEBUG(199, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + if (yybm[0+yych] & 8) { + goto yy200; + } + if (yych == '\\') goto yy202; + goto yy194; +yy200: + YYDEBUG(200, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(201, *YYCURSOR); + if (yybm[0+yych] & 8) { + goto yy200; + } + if (yych == '\\') goto yy204; + goto yy194; +yy202: + YYDEBUG(202, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(203, *YYCURSOR); + if (yybm[0+yych] & 8) { + goto yy200; + } + if (yych == '\\') goto yy202; + goto yy194; +yy204: + YYDEBUG(204, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + if (yybm[0+yych] & 8) { + goto yy200; + } + if (yych == '\\') goto yy202; + goto yy194; +yy205: + YYDEBUG(205, *YYCURSOR); + yyaccept = 3; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(206, *YYCURSOR); + if (yybm[0+yych] & 32) { + goto yy205; + } + if (yych <= '$') { + if (yych <= '\r') { + if (yych == '\n') goto yy186; + if (yych <= '\f') goto yy194; + goto yy186; + } else { + if (yych == '"') goto yy186; + if (yych <= '#') goto yy194; + goto yy197; + } + } else { + if (yych <= ';') { + if (yych == '\'') goto yy186; + if (yych <= ':') goto yy194; + goto yy186; + } else { + if (yych <= '[') goto yy194; + if (yych <= '\\') goto yy196; + if (yych <= ']') goto yy186; + goto yy194; + } + } +yy207: + YYDEBUG(207, *YYCURSOR); + yyaccept = 2; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(208, *YYCURSOR); + if (yybm[0+yych] & 64) { + goto yy207; + } + if (yych <= '$') { + if (yych <= '\r') { + if (yych == '\n') goto yy184; + if (yych <= '\f') goto yy194; + goto yy184; + } else { + if (yych == '"') goto yy184; + if (yych <= '#') goto yy194; + goto yy197; + } + } else { + if (yych <= ';') { + if (yych == '\'') goto yy184; + if (yych <= ':') goto yy194; + goto yy184; + } else { + if (yych <= '[') goto yy194; + if (yych <= '\\') goto yy196; + if (yych <= ']') goto yy184; + goto yy194; + } + } +yy209: + YYDEBUG(209, *YYCURSOR); + yyaccept = 2; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(210, *YYCURSOR); + if (yych <= '\'') { + if (yych <= '!') { + if (yych <= '\n') { + if (yych <= '\t') goto yy194; + goto yy184; + } else { + if (yych == '\r') goto yy184; + goto yy194; + } + } else { + if (yych <= '#') { + if (yych <= '"') goto yy184; + goto yy194; + } else { + if (yych <= '$') goto yy197; + if (yych <= '&') goto yy194; + goto yy184; + } + } + } else { + if (yych <= ':') { + if (yych <= '.') { + if (yych <= '-') goto yy194; + goto yy207; + } else { + if (yych <= '/') goto yy194; + if (yych <= '9') goto yy209; + goto yy194; + } + } else { + if (yych <= '[') { + if (yych <= ';') goto yy184; + goto yy194; + } else { + if (yych <= '\\') goto yy196; + if (yych <= ']') goto yy184; + goto yy194; + } + } + } +yy211: + YYDEBUG(211, *YYCURSOR); + yyaccept = 2; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(212, *YYCURSOR); + if (yych <= '&') { + if (yych <= '\r') { + if (yych == '\n') goto yy184; + if (yych <= '\f') goto yy194; + goto yy184; + } else { + if (yych <= '"') { + if (yych <= '!') goto yy194; + goto yy184; + } else { + if (yych == '$') goto yy197; + goto yy194; + } + } + } else { + if (yych <= ':') { + if (yych <= '\'') goto yy184; + if (yych <= '/') goto yy194; + if (yych <= '9') goto yy211; + goto yy194; + } else { + if (yych <= '[') { + if (yych <= ';') goto yy184; + goto yy194; + } else { + if (yych <= '\\') goto yy196; + if (yych <= ']') goto yy184; + goto yy194; + } + } + } +yy213: + YYDEBUG(213, *YYCURSOR); + yyaccept = 2; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(214, *YYCURSOR); + if (yych <= '&') { + if (yych <= '\r') { + if (yych == '\n') goto yy184; + if (yych <= '\f') goto yy194; + goto yy184; + } else { + if (yych <= '"') { + if (yych <= '!') goto yy194; + goto yy184; + } else { + if (yych == '$') goto yy197; + goto yy194; + } + } + } else { + if (yych <= ':') { + if (yych <= '\'') goto yy184; + if (yych <= '/') goto yy194; + if (yych <= '9') goto yy213; + goto yy194; + } else { + if (yych <= '[') { + if (yych <= ';') goto yy184; + goto yy194; + } else { + if (yych <= '\\') goto yy196; + if (yych <= ']') goto yy184; + goto yy194; + } + } + } +yy215: + YYDEBUG(215, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(216, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy215; + } + YYDEBUG(217, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(218, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 368 "Zend/zend_ini_scanner.l" + { /* Raw string */ + /* Eat leading and trailing single quotes */ + if (yytext[0] == '\'' && yytext[yyleng - 1] == '\'') { + SCNG(yy_text)++; + yyleng = yyleng - 2; + } + RETURN_TOKEN(TC_RAW, yytext, yyleng); +} +#line 2724 "Zend/zend_ini_scanner.c" +yy219: + YYDEBUG(219, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(220, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 401 "Zend/zend_ini_scanner.l" + { /* Variable start */ + yy_push_state(ST_VARNAME TSRMLS_CC); + return TC_DOLLAR_CURLY; +} +#line 2735 "Zend/zend_ini_scanner.c" +yy221: + YYDEBUG(221, *YYCURSOR); + yyaccept = 0; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(222, *YYCURSOR); + if (yych <= '"') { + if (yych <= '\f') { + if (yych <= 0x08) goto yy194; + if (yych <= '\t') goto yy221; + if (yych <= '\n') goto yy173; + goto yy194; + } else { + if (yych <= 0x1F) { + if (yych <= '\r') goto yy173; + goto yy194; + } else { + if (yych <= ' ') goto yy221; + if (yych <= '!') goto yy194; + } + } + } else { + if (yych <= ':') { + if (yych <= '$') { + if (yych <= '#') goto yy194; + goto yy197; + } else { + if (yych == '\'') goto yy173; + goto yy194; + } + } else { + if (yych <= '[') { + if (yych <= ';') goto yy173; + goto yy194; + } else { + if (yych <= '\\') goto yy196; + if (yych <= ']') goto yy173; + goto yy194; + } + } + } +yy223: + YYDEBUG(223, *YYCURSOR); + ++YYCURSOR; + yych = *YYCURSOR; + goto yy178; + } +/* *********************************** */ +yyc_ST_VALUE: + { + static const unsigned char yybm[] = { + 160, 162, 162, 162, 162, 162, 162, 162, + 162, 176, 128, 162, 162, 128, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 162, + 176, 160, 160, 162, 168, 162, 160, 32, + 160, 160, 162, 162, 162, 162, 162, 162, + 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 162, 160, 162, 160, 162, 162, + 162, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 162, 162, 162, 160, 166, + 162, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 162, 160, 162, 160, 162, + 162, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 162, + }; + YYDEBUG(224, *YYCURSOR); + YYFILL(6); + yych = *YYCURSOR; + YYDEBUG(-1, yych); + switch (yych) { + case 0x00: goto yy226; + case '\t': + case ' ': goto yy230; + case '\n': goto yy232; + case '\r': goto yy234; + case '!': + case '&': + case '(': + case ')': + case '^': + case '|': + case '~': goto yy235; + case '"': goto yy237; + case '$': goto yy239; + case '\'': goto yy240; + case '-': goto yy241; + case '.': goto yy242; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy243; + case ';': goto yy245; + case '=': goto yy246; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'p': + case 'q': + case 'r': + case 's': + case 'u': + case 'v': + case 'w': + case 'x': + case 'z': goto yy248; + case 'F': + case 'f': goto yy250; + case 'N': + case 'n': goto yy251; + case 'O': + case 'o': goto yy252; + case 'T': + case 't': goto yy253; + case 'Y': + case 'y': goto yy254; + default: goto yy228; + } +yy226: + YYDEBUG(226, *YYCURSOR); + ++YYCURSOR; +yy227: + YYDEBUG(227, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 598 "Zend/zend_ini_scanner.l" + { /* End of option value (if EOF is reached before EOL */ + BEGIN(INITIAL); + return END_OF_LINE; +} +#line 2921 "Zend/zend_ini_scanner.c" +yy228: + YYDEBUG(228, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + goto yy256; +yy229: + YYDEBUG(229, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 517 "Zend/zend_ini_scanner.l" + { /* Get everything else as option/offset value */ + RETURN_TOKEN(TC_STRING, yytext, yyleng); +} +#line 2934 "Zend/zend_ini_scanner.c" +yy230: + YYDEBUG(230, *YYCURSOR); + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + goto yy306; +yy231: + YYDEBUG(231, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 571 "Zend/zend_ini_scanner.l" + { + RETURN_TOKEN(TC_WHITESPACE, yytext, yyleng); +} +#line 2947 "Zend/zend_ini_scanner.c" +yy232: + YYDEBUG(232, *YYCURSOR); + ++YYCURSOR; +yy233: + YYDEBUG(233, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 489 "Zend/zend_ini_scanner.l" + { /* End of option value */ + BEGIN(INITIAL); + SCNG(lineno)++; + return END_OF_LINE; +} +#line 2960 "Zend/zend_ini_scanner.c" +yy234: + YYDEBUG(234, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '\n') goto yy304; + goto yy233; +yy235: + YYDEBUG(235, *YYCURSOR); + ++YYCURSOR; + yych = *YYCURSOR; + goto yy303; +yy236: + YYDEBUG(236, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 507 "Zend/zend_ini_scanner.l" + { /* Boolean operators */ + return yytext[0]; +} +#line 2978 "Zend/zend_ini_scanner.c" +yy237: + YYDEBUG(237, *YYCURSOR); + ++YYCURSOR; +yy238: + YYDEBUG(238, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 525 "Zend/zend_ini_scanner.l" + { /* Double quoted '"' string start */ + yy_push_state(ST_DOUBLE_QUOTES TSRMLS_CC); + return '"'; +} +#line 2990 "Zend/zend_ini_scanner.c" +yy239: + YYDEBUG(239, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '\\') { + if (yych <= 0x00) goto yy227; + if (yych <= '[') goto yy255; + goto yy262; + } else { + if (yych == '{') goto yy300; + goto yy255; + } +yy240: + YYDEBUG(240, *YYCURSOR); + yyaccept = 2; + yych = *(YYMARKER = ++YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy296; + } + goto yy227; +yy241: + YYDEBUG(241, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '/') goto yy256; + if (yych <= '9') goto yy294; + goto yy256; +yy242: + YYDEBUG(242, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '/') goto yy256; + if (yych <= '9') goto yy292; + goto yy256; +yy243: + YYDEBUG(243, *YYCURSOR); + yyaccept = 3; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= '\n') { + if (yych <= 0x00) goto yy244; + if (yych <= 0x08) goto yy256; + } else { + if (yych != '\r') goto yy256; + } + } else { + if (yych <= ')') { + if (yych <= '"') goto yy244; + if (yych <= '%') goto yy256; + } else { + if (yych == '.') goto yy288; + goto yy256; + } + } + } else { + if (yych <= ']') { + if (yych <= ';') { + if (yych <= '9') goto yy290; + if (yych <= ':') goto yy256; + } else { + if (yych != '=') goto yy256; + } + } else { + if (yych <= '|') { + if (yych <= '^') goto yy244; + if (yych <= '{') goto yy256; + } else { + if (yych != '~') goto yy256; + } + } + } +yy244: + YYDEBUG(244, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 499 "Zend/zend_ini_scanner.l" + { /* Get number option value as string */ + RETURN_TOKEN(TC_NUMBER, yytext, yyleng); +} +#line 3069 "Zend/zend_ini_scanner.c" +yy245: + YYDEBUG(245, *YYCURSOR); + yyaccept = 2; + yych = *(YYMARKER = ++YYCURSOR); + goto yy284; +yy246: + YYDEBUG(246, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(247, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 511 "Zend/zend_ini_scanner.l" + { /* Make = used in option value to trigger error */ + yyless(0); + BEGIN(INITIAL); + return END_OF_LINE; +} +#line 3086 "Zend/zend_ini_scanner.c" +yy248: + YYDEBUG(248, *YYCURSOR); + yyaccept = 4; + yych = *(YYMARKER = ++YYCURSOR); + if (yybm[0+yych] & 4) { + goto yy257; + } + if (yych <= ':') { + if (yych <= '\r') { + if (yych <= 0x08) { + if (yych >= 0x01) goto yy256; + } else { + if (yych <= '\n') goto yy249; + if (yych <= '\f') goto yy256; + } + } else { + if (yych <= '"') { + if (yych <= 0x1F) goto yy256; + } else { + if (yych <= '%') goto yy256; + if (yych >= '*') goto yy256; + } + } + } else { + if (yych <= '^') { + if (yych <= '<') { + if (yych >= '<') goto yy256; + } else { + if (yych <= '=') goto yy249; + if (yych <= ']') goto yy256; + } + } else { + if (yych <= '|') { + if (yych <= '{') goto yy256; + } else { + if (yych != '~') goto yy256; + } + } + } +yy249: + YYDEBUG(249, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 495 "Zend/zend_ini_scanner.l" + { /* Get constant option value */ + RETURN_TOKEN(TC_CONSTANT, yytext, yyleng); +} +#line 3133 "Zend/zend_ini_scanner.c" +yy250: + YYDEBUG(250, *YYCURSOR); + yyaccept = 4; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '<') { + if (yych <= '"') { + if (yych <= '\n') { + if (yych <= 0x00) goto yy249; + if (yych <= 0x08) goto yy256; + goto yy249; + } else { + if (yych == '\r') goto yy249; + if (yych <= 0x1F) goto yy256; + goto yy249; + } + } else { + if (yych <= '/') { + if (yych <= '%') goto yy256; + if (yych <= ')') goto yy249; + goto yy256; + } else { + if (yych <= '9') goto yy257; + if (yych == ';') goto yy249; + goto yy256; + } + } + } else { + if (yych <= '_') { + if (yych <= 'A') { + if (yych <= '=') goto yy249; + if (yych <= '@') goto yy256; + goto yy280; + } else { + if (yych <= 'Z') goto yy257; + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy249; + goto yy257; + } + } else { + if (yych <= '{') { + if (yych <= '`') goto yy256; + if (yych <= 'a') goto yy280; + if (yych <= 'z') goto yy257; + goto yy256; + } else { + if (yych == '}') goto yy256; + if (yych <= '~') goto yy249; + goto yy256; + } + } + } +yy251: + YYDEBUG(251, *YYCURSOR); + yyaccept = 4; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= 'N') { + if (yych <= '%') { + if (yych <= '\f') { + if (yych <= 0x00) goto yy249; + if (yych <= 0x08) goto yy256; + if (yych <= '\n') goto yy249; + goto yy256; + } else { + if (yych <= '\r') goto yy249; + if (yych <= 0x1F) goto yy256; + if (yych <= '"') goto yy249; + goto yy256; + } + } else { + if (yych <= ':') { + if (yych <= ')') goto yy249; + if (yych <= '/') goto yy256; + if (yych <= '9') goto yy257; + goto yy256; + } else { + if (yych <= '<') { + if (yych <= ';') goto yy249; + goto yy256; + } else { + if (yych <= '=') goto yy249; + if (yych <= '@') goto yy256; + goto yy257; + } + } + } + } else { + if (yych <= 'n') { + if (yych <= 'Z') { + if (yych <= 'O') goto yy276; + if (yych == 'U') goto yy277; + goto yy257; + } else { + if (yych <= '^') { + if (yych <= ']') goto yy256; + goto yy249; + } else { + if (yych == '`') goto yy256; + goto yy257; + } + } + } else { + if (yych <= 'z') { + if (yych <= 'o') goto yy276; + if (yych == 'u') goto yy277; + goto yy257; + } else { + if (yych <= '|') { + if (yych <= '{') goto yy256; + goto yy249; + } else { + if (yych == '~') goto yy249; + goto yy256; + } + } + } + } +yy252: + YYDEBUG(252, *YYCURSOR); + yyaccept = 4; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= 'E') { + if (yych <= '%') { + if (yych <= '\f') { + if (yych <= 0x00) goto yy249; + if (yych <= 0x08) goto yy256; + if (yych <= '\n') goto yy249; + goto yy256; + } else { + if (yych <= '\r') goto yy249; + if (yych <= 0x1F) goto yy256; + if (yych <= '"') goto yy249; + goto yy256; + } + } else { + if (yych <= ':') { + if (yych <= ')') goto yy249; + if (yych <= '/') goto yy256; + if (yych <= '9') goto yy257; + goto yy256; + } else { + if (yych <= '<') { + if (yych <= ';') goto yy249; + goto yy256; + } else { + if (yych <= '=') goto yy249; + if (yych <= '@') goto yy256; + goto yy257; + } + } + } + } else { + if (yych <= 'e') { + if (yych <= 'Z') { + if (yych <= 'F') goto yy271; + if (yych == 'N') goto yy265; + goto yy257; + } else { + if (yych <= '^') { + if (yych <= ']') goto yy256; + goto yy249; + } else { + if (yych == '`') goto yy256; + goto yy257; + } + } + } else { + if (yych <= 'z') { + if (yych <= 'f') goto yy271; + if (yych == 'n') goto yy265; + goto yy257; + } else { + if (yych <= '|') { + if (yych <= '{') goto yy256; + goto yy249; + } else { + if (yych == '~') goto yy249; + goto yy256; + } + } + } + } +yy253: + YYDEBUG(253, *YYCURSOR); + yyaccept = 4; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '=') { + if (yych <= '"') { + if (yych <= '\n') { + if (yych <= 0x00) goto yy249; + if (yych <= 0x08) goto yy256; + goto yy249; + } else { + if (yych == '\r') goto yy249; + if (yych <= 0x1F) goto yy256; + goto yy249; + } + } else { + if (yych <= '9') { + if (yych <= '%') goto yy256; + if (yych <= ')') goto yy249; + if (yych <= '/') goto yy256; + goto yy257; + } else { + if (yych == ';') goto yy249; + if (yych <= '<') goto yy256; + goto yy249; + } + } + } else { + if (yych <= '`') { + if (yych <= 'Z') { + if (yych <= '@') goto yy256; + if (yych == 'R') goto yy269; + goto yy257; + } else { + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy249; + if (yych <= '_') goto yy257; + goto yy256; + } + } else { + if (yych <= '{') { + if (yych == 'r') goto yy269; + if (yych <= 'z') goto yy257; + goto yy256; + } else { + if (yych == '}') goto yy256; + if (yych <= '~') goto yy249; + goto yy256; + } + } + } +yy254: + YYDEBUG(254, *YYCURSOR); + yyaccept = 4; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '=') { + if (yych <= '"') { + if (yych <= '\n') { + if (yych <= 0x00) goto yy249; + if (yych <= 0x08) goto yy256; + goto yy249; + } else { + if (yych == '\r') goto yy249; + if (yych <= 0x1F) goto yy256; + goto yy249; + } + } else { + if (yych <= '9') { + if (yych <= '%') goto yy256; + if (yych <= ')') goto yy249; + if (yych <= '/') goto yy256; + goto yy257; + } else { + if (yych == ';') goto yy249; + if (yych <= '<') goto yy256; + goto yy249; + } + } + } else { + if (yych <= '`') { + if (yych <= 'Z') { + if (yych <= '@') goto yy256; + if (yych == 'E') goto yy259; + goto yy257; + } else { + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy249; + if (yych <= '_') goto yy257; + goto yy256; + } + } else { + if (yych <= '{') { + if (yych == 'e') goto yy259; + if (yych <= 'z') goto yy257; + goto yy256; + } else { + if (yych == '}') goto yy256; + if (yych <= '~') goto yy249; + goto yy256; + } + } + } +yy255: + YYDEBUG(255, *YYCURSOR); + yyaccept = 0; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; +yy256: + YYDEBUG(256, *YYCURSOR); + if (yybm[0+yych] & 2) { + goto yy255; + } + if (yych == '$') goto yy260; + goto yy229; +yy257: + YYDEBUG(257, *YYCURSOR); + yyaccept = 4; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(258, *YYCURSOR); + if (yybm[0+yych] & 4) { + goto yy257; + } + if (yych <= ')') { + if (yych <= '\r') { + if (yych <= 0x08) { + if (yych <= 0x00) goto yy249; + goto yy255; + } else { + if (yych <= '\n') goto yy249; + if (yych <= '\f') goto yy255; + goto yy249; + } + } else { + if (yych <= '#') { + if (yych <= 0x1F) goto yy255; + if (yych <= '"') goto yy249; + goto yy255; + } else { + if (yych <= '$') goto yy260; + if (yych <= '%') goto yy255; + goto yy249; + } + } + } else { + if (yych <= ']') { + if (yych <= ';') { + if (yych <= ':') goto yy255; + goto yy249; + } else { + if (yych == '=') goto yy249; + goto yy255; + } + } else { + if (yych <= '|') { + if (yych <= '^') goto yy249; + if (yych <= '{') goto yy255; + goto yy249; + } else { + if (yych == '~') goto yy249; + goto yy255; + } + } + } +yy259: + YYDEBUG(259, *YYCURSOR); + yyaccept = 4; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '=') { + if (yych <= '"') { + if (yych <= '\n') { + if (yych <= 0x00) goto yy249; + if (yych <= 0x08) goto yy256; + goto yy249; + } else { + if (yych == '\r') goto yy249; + if (yych <= 0x1F) goto yy256; + goto yy249; + } + } else { + if (yych <= '9') { + if (yych <= '%') goto yy256; + if (yych <= ')') goto yy249; + if (yych <= '/') goto yy256; + goto yy257; + } else { + if (yych == ';') goto yy249; + if (yych <= '<') goto yy256; + goto yy249; + } + } + } else { + if (yych <= '`') { + if (yych <= 'Z') { + if (yych <= '@') goto yy256; + if (yych == 'S') goto yy265; + goto yy257; + } else { + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy249; + if (yych <= '_') goto yy257; + goto yy256; + } + } else { + if (yych <= '{') { + if (yych == 's') goto yy265; + if (yych <= 'z') goto yy257; + goto yy256; + } else { + if (yych == '}') goto yy256; + if (yych <= '~') goto yy249; + goto yy256; + } + } + } +yy260: + YYDEBUG(260, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + if (yych <= '\\') { + if (yych <= 0x00) goto yy261; + if (yych <= '[') goto yy255; + goto yy262; + } else { + if (yych != '{') goto yy255; + } +yy261: + YYDEBUG(261, *YYCURSOR); + YYCURSOR = YYMARKER; + if (yyaccept <= 3) { + if (yyaccept <= 1) { + if (yyaccept <= 0) { + goto yy229; + } else { + goto yy231; + } + } else { + if (yyaccept <= 2) { + goto yy227; + } else { + goto yy244; + } + } + } else { + if (yyaccept <= 5) { + if (yyaccept <= 4) { + goto yy249; + } else { + goto yy266; + } + } else { + goto yy273; + } + } +yy262: + YYDEBUG(262, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + if (yybm[0+yych] & 8) { + goto yy263; + } + goto yy255; +yy263: + YYDEBUG(263, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(264, *YYCURSOR); + if (yybm[0+yych] & 8) { + goto yy263; + } + if (yych <= 0x00) goto yy229; + if (yych == '\\') goto yy262; + goto yy255; +yy265: + YYDEBUG(265, *YYCURSOR); + yyaccept = 5; + yych = *(YYMARKER = ++YYCURSOR); + if (yybm[0+yych] & 16) { + goto yy267; + } + if (yych <= ';') { + if (yych <= ' ') { + if (yych <= '\n') { + if (yych <= 0x00) goto yy266; + if (yych <= '\t') goto yy256; + } else { + if (yych != '\r') goto yy256; + } + } else { + if (yych <= ')') { + if (yych <= '"') goto yy266; + if (yych <= '%') goto yy256; + } else { + if (yych <= '/') goto yy256; + if (yych <= '9') goto yy257; + if (yych <= ':') goto yy256; + } + } + } else { + if (yych <= '_') { + if (yych <= '@') { + if (yych != '=') goto yy256; + } else { + if (yych <= 'Z') goto yy257; + if (yych <= ']') goto yy256; + if (yych >= '_') goto yy257; + } + } else { + if (yych <= '{') { + if (yych <= '`') goto yy256; + if (yych <= 'z') goto yy257; + goto yy256; + } else { + if (yych == '}') goto yy256; + if (yych >= 0x7F) goto yy256; + } + } + } +yy266: + YYDEBUG(266, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 421 "Zend/zend_ini_scanner.l" + { /* TRUE value (when used outside option value/offset this causes parse error!) */ + RETURN_TOKEN(BOOL_TRUE, "1", 1); +} +#line 3645 "Zend/zend_ini_scanner.c" +yy267: + YYDEBUG(267, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(268, *YYCURSOR); + if (yybm[0+yych] & 16) { + goto yy267; + } + goto yy266; +yy269: + YYDEBUG(269, *YYCURSOR); + yyaccept = 4; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '=') { + if (yych <= '"') { + if (yych <= '\n') { + if (yych <= 0x00) goto yy249; + if (yych <= 0x08) goto yy256; + goto yy249; + } else { + if (yych == '\r') goto yy249; + if (yych <= 0x1F) goto yy256; + goto yy249; + } + } else { + if (yych <= '9') { + if (yych <= '%') goto yy256; + if (yych <= ')') goto yy249; + if (yych <= '/') goto yy256; + goto yy257; + } else { + if (yych == ';') goto yy249; + if (yych <= '<') goto yy256; + goto yy249; + } + } + } else { + if (yych <= '`') { + if (yych <= 'Z') { + if (yych <= '@') goto yy256; + if (yych != 'U') goto yy257; + } else { + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy249; + if (yych <= '_') goto yy257; + goto yy256; + } + } else { + if (yych <= '{') { + if (yych == 'u') goto yy270; + if (yych <= 'z') goto yy257; + goto yy256; + } else { + if (yych == '}') goto yy256; + if (yych <= '~') goto yy249; + goto yy256; + } + } + } +yy270: + YYDEBUG(270, *YYCURSOR); + yyaccept = 4; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '=') { + if (yych <= '"') { + if (yych <= '\n') { + if (yych <= 0x00) goto yy249; + if (yych <= 0x08) goto yy256; + goto yy249; + } else { + if (yych == '\r') goto yy249; + if (yych <= 0x1F) goto yy256; + goto yy249; + } + } else { + if (yych <= '9') { + if (yych <= '%') goto yy256; + if (yych <= ')') goto yy249; + if (yych <= '/') goto yy256; + goto yy257; + } else { + if (yych == ';') goto yy249; + if (yych <= '<') goto yy256; + goto yy249; + } + } + } else { + if (yych <= '`') { + if (yych <= 'Z') { + if (yych <= '@') goto yy256; + if (yych == 'E') goto yy265; + goto yy257; + } else { + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy249; + if (yych <= '_') goto yy257; + goto yy256; + } + } else { + if (yych <= '{') { + if (yych == 'e') goto yy265; + if (yych <= 'z') goto yy257; + goto yy256; + } else { + if (yych == '}') goto yy256; + if (yych <= '~') goto yy249; + goto yy256; + } + } + } +yy271: + YYDEBUG(271, *YYCURSOR); + yyaccept = 4; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '=') { + if (yych <= '"') { + if (yych <= '\n') { + if (yych <= 0x00) goto yy249; + if (yych <= 0x08) goto yy256; + goto yy249; + } else { + if (yych == '\r') goto yy249; + if (yych <= 0x1F) goto yy256; + goto yy249; + } + } else { + if (yych <= '9') { + if (yych <= '%') goto yy256; + if (yych <= ')') goto yy249; + if (yych <= '/') goto yy256; + goto yy257; + } else { + if (yych == ';') goto yy249; + if (yych <= '<') goto yy256; + goto yy249; + } + } + } else { + if (yych <= '`') { + if (yych <= 'Z') { + if (yych <= '@') goto yy256; + if (yych != 'F') goto yy257; + } else { + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy249; + if (yych <= '_') goto yy257; + goto yy256; + } + } else { + if (yych <= '{') { + if (yych == 'f') goto yy272; + if (yych <= 'z') goto yy257; + goto yy256; + } else { + if (yych == '}') goto yy256; + if (yych <= '~') goto yy249; + goto yy256; + } + } + } +yy272: + YYDEBUG(272, *YYCURSOR); + yyaccept = 6; + yych = *(YYMARKER = ++YYCURSOR); + if (yybm[0+yych] & 4) { + goto yy257; + } + if (yych <= ')') { + if (yych <= '\f') { + if (yych <= 0x08) { + if (yych >= 0x01) goto yy256; + } else { + if (yych <= '\t') goto yy274; + if (yych >= '\v') goto yy256; + } + } else { + if (yych <= ' ') { + if (yych <= '\r') goto yy273; + if (yych <= 0x1F) goto yy256; + goto yy274; + } else { + if (yych <= '"') goto yy273; + if (yych <= '%') goto yy256; + } + } + } else { + if (yych <= ']') { + if (yych <= ';') { + if (yych <= ':') goto yy256; + } else { + if (yych != '=') goto yy256; + } + } else { + if (yych <= '|') { + if (yych <= '^') goto yy273; + if (yych <= '{') goto yy256; + } else { + if (yych != '~') goto yy256; + } + } + } +yy273: + YYDEBUG(273, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 425 "Zend/zend_ini_scanner.l" + { /* FALSE value (when used outside option value/offset this causes parse error!)*/ + RETURN_TOKEN(BOOL_FALSE, "", 0); +} +#line 3855 "Zend/zend_ini_scanner.c" +yy274: + YYDEBUG(274, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(275, *YYCURSOR); + if (yych == '\t') goto yy274; + if (yych == ' ') goto yy274; + goto yy273; +yy276: + YYDEBUG(276, *YYCURSOR); + yyaccept = 6; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '<') { + if (yych <= ' ') { + if (yych <= '\n') { + if (yych <= 0x00) goto yy273; + if (yych <= 0x08) goto yy256; + if (yych <= '\t') goto yy274; + goto yy273; + } else { + if (yych == '\r') goto yy273; + if (yych <= 0x1F) goto yy256; + goto yy274; + } + } else { + if (yych <= '/') { + if (yych <= '"') goto yy273; + if (yych <= '%') goto yy256; + if (yych <= ')') goto yy273; + goto yy256; + } else { + if (yych <= '9') goto yy257; + if (yych == ';') goto yy273; + goto yy256; + } + } + } else { + if (yych <= '_') { + if (yych <= 'N') { + if (yych <= '=') goto yy273; + if (yych <= '@') goto yy256; + if (yych <= 'M') goto yy257; + goto yy279; + } else { + if (yych <= 'Z') goto yy257; + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy273; + goto yy257; + } + } else { + if (yych <= 'z') { + if (yych <= '`') goto yy256; + if (yych == 'n') goto yy279; + goto yy257; + } else { + if (yych <= '|') { + if (yych <= '{') goto yy256; + goto yy273; + } else { + if (yych == '~') goto yy273; + goto yy256; + } + } + } + } +yy277: + YYDEBUG(277, *YYCURSOR); + yyaccept = 4; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '=') { + if (yych <= '"') { + if (yych <= '\n') { + if (yych <= 0x00) goto yy249; + if (yych <= 0x08) goto yy256; + goto yy249; + } else { + if (yych == '\r') goto yy249; + if (yych <= 0x1F) goto yy256; + goto yy249; + } + } else { + if (yych <= '9') { + if (yych <= '%') goto yy256; + if (yych <= ')') goto yy249; + if (yych <= '/') goto yy256; + goto yy257; + } else { + if (yych == ';') goto yy249; + if (yych <= '<') goto yy256; + goto yy249; + } + } + } else { + if (yych <= '`') { + if (yych <= 'Z') { + if (yych <= '@') goto yy256; + if (yych != 'L') goto yy257; + } else { + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy249; + if (yych <= '_') goto yy257; + goto yy256; + } + } else { + if (yych <= '{') { + if (yych == 'l') goto yy278; + if (yych <= 'z') goto yy257; + goto yy256; + } else { + if (yych == '}') goto yy256; + if (yych <= '~') goto yy249; + goto yy256; + } + } + } +yy278: + YYDEBUG(278, *YYCURSOR); + yyaccept = 4; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '=') { + if (yych <= '"') { + if (yych <= '\n') { + if (yych <= 0x00) goto yy249; + if (yych <= 0x08) goto yy256; + goto yy249; + } else { + if (yych == '\r') goto yy249; + if (yych <= 0x1F) goto yy256; + goto yy249; + } + } else { + if (yych <= '9') { + if (yych <= '%') goto yy256; + if (yych <= ')') goto yy249; + if (yych <= '/') goto yy256; + goto yy257; + } else { + if (yych == ';') goto yy249; + if (yych <= '<') goto yy256; + goto yy249; + } + } + } else { + if (yych <= '`') { + if (yych <= 'Z') { + if (yych <= '@') goto yy256; + if (yych == 'L') goto yy272; + goto yy257; + } else { + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy249; + if (yych <= '_') goto yy257; + goto yy256; + } + } else { + if (yych <= '{') { + if (yych == 'l') goto yy272; + if (yych <= 'z') goto yy257; + goto yy256; + } else { + if (yych == '}') goto yy256; + if (yych <= '~') goto yy249; + goto yy256; + } + } + } +yy279: + YYDEBUG(279, *YYCURSOR); + yyaccept = 4; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '=') { + if (yych <= '"') { + if (yych <= '\n') { + if (yych <= 0x00) goto yy249; + if (yych <= 0x08) goto yy256; + goto yy249; + } else { + if (yych == '\r') goto yy249; + if (yych <= 0x1F) goto yy256; + goto yy249; + } + } else { + if (yych <= '9') { + if (yych <= '%') goto yy256; + if (yych <= ')') goto yy249; + if (yych <= '/') goto yy256; + goto yy257; + } else { + if (yych == ';') goto yy249; + if (yych <= '<') goto yy256; + goto yy249; + } + } + } else { + if (yych <= '`') { + if (yych <= 'Z') { + if (yych <= '@') goto yy256; + if (yych == 'E') goto yy272; + goto yy257; + } else { + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy249; + if (yych <= '_') goto yy257; + goto yy256; + } + } else { + if (yych <= '{') { + if (yych == 'e') goto yy272; + if (yych <= 'z') goto yy257; + goto yy256; + } else { + if (yych == '}') goto yy256; + if (yych <= '~') goto yy249; + goto yy256; + } + } + } +yy280: + YYDEBUG(280, *YYCURSOR); + yyaccept = 4; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '=') { + if (yych <= '"') { + if (yych <= '\n') { + if (yych <= 0x00) goto yy249; + if (yych <= 0x08) goto yy256; + goto yy249; + } else { + if (yych == '\r') goto yy249; + if (yych <= 0x1F) goto yy256; + goto yy249; + } + } else { + if (yych <= '9') { + if (yych <= '%') goto yy256; + if (yych <= ')') goto yy249; + if (yych <= '/') goto yy256; + goto yy257; + } else { + if (yych == ';') goto yy249; + if (yych <= '<') goto yy256; + goto yy249; + } + } + } else { + if (yych <= '`') { + if (yych <= 'Z') { + if (yych <= '@') goto yy256; + if (yych != 'L') goto yy257; + } else { + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy249; + if (yych <= '_') goto yy257; + goto yy256; + } + } else { + if (yych <= '{') { + if (yych == 'l') goto yy281; + if (yych <= 'z') goto yy257; + goto yy256; + } else { + if (yych == '}') goto yy256; + if (yych <= '~') goto yy249; + goto yy256; + } + } + } +yy281: + YYDEBUG(281, *YYCURSOR); + yyaccept = 4; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '=') { + if (yych <= '"') { + if (yych <= '\n') { + if (yych <= 0x00) goto yy249; + if (yych <= 0x08) goto yy256; + goto yy249; + } else { + if (yych == '\r') goto yy249; + if (yych <= 0x1F) goto yy256; + goto yy249; + } + } else { + if (yych <= '9') { + if (yych <= '%') goto yy256; + if (yych <= ')') goto yy249; + if (yych <= '/') goto yy256; + goto yy257; + } else { + if (yych == ';') goto yy249; + if (yych <= '<') goto yy256; + goto yy249; + } + } + } else { + if (yych <= '`') { + if (yych <= 'Z') { + if (yych <= '@') goto yy256; + if (yych != 'S') goto yy257; + } else { + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy249; + if (yych <= '_') goto yy257; + goto yy256; + } + } else { + if (yych <= '{') { + if (yych == 's') goto yy282; + if (yych <= 'z') goto yy257; + goto yy256; + } else { + if (yych == '}') goto yy256; + if (yych <= '~') goto yy249; + goto yy256; + } + } + } +yy282: + YYDEBUG(282, *YYCURSOR); + yyaccept = 4; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '=') { + if (yych <= '"') { + if (yych <= '\n') { + if (yych <= 0x00) goto yy249; + if (yych <= 0x08) goto yy256; + goto yy249; + } else { + if (yych == '\r') goto yy249; + if (yych <= 0x1F) goto yy256; + goto yy249; + } + } else { + if (yych <= '9') { + if (yych <= '%') goto yy256; + if (yych <= ')') goto yy249; + if (yych <= '/') goto yy256; + goto yy257; + } else { + if (yych == ';') goto yy249; + if (yych <= '<') goto yy256; + goto yy249; + } + } + } else { + if (yych <= '`') { + if (yych <= 'Z') { + if (yych <= '@') goto yy256; + if (yych == 'E') goto yy272; + goto yy257; + } else { + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy249; + if (yych <= '_') goto yy257; + goto yy256; + } + } else { + if (yych <= '{') { + if (yych == 'e') goto yy272; + if (yych <= 'z') goto yy257; + goto yy256; + } else { + if (yych == '}') goto yy256; + if (yych <= '~') goto yy249; + goto yy256; + } + } + } +yy283: + YYDEBUG(283, *YYCURSOR); + ++YYCURSOR; + YYFILL(2); + yych = *YYCURSOR; +yy284: + YYDEBUG(284, *YYCURSOR); + if (yybm[0+yych] & 32) { + goto yy283; + } + if (yych >= '\r') goto yy287; +yy285: + YYDEBUG(285, *YYCURSOR); + ++YYCURSOR; +yy286: + YYDEBUG(286, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 585 "Zend/zend_ini_scanner.l" + { /* Comment */ + BEGIN(INITIAL); + SCNG(lineno)++; + return END_OF_LINE; +} +#line 4248 "Zend/zend_ini_scanner.c" +yy287: + YYDEBUG(287, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '\n') goto yy285; + goto yy286; +yy288: + YYDEBUG(288, *YYCURSOR); + yyaccept = 3; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(289, *YYCURSOR); + if (yybm[0+yych] & 64) { + goto yy288; + } + if (yych <= ')') { + if (yych <= '\r') { + if (yych <= 0x08) { + if (yych <= 0x00) goto yy244; + goto yy255; + } else { + if (yych <= '\n') goto yy244; + if (yych <= '\f') goto yy255; + goto yy244; + } + } else { + if (yych <= '#') { + if (yych <= 0x1F) goto yy255; + if (yych <= '"') goto yy244; + goto yy255; + } else { + if (yych <= '$') goto yy260; + if (yych <= '%') goto yy255; + goto yy244; + } + } + } else { + if (yych <= ']') { + if (yych <= ';') { + if (yych <= ':') goto yy255; + goto yy244; + } else { + if (yych == '=') goto yy244; + goto yy255; + } + } else { + if (yych <= '|') { + if (yych <= '^') goto yy244; + if (yych <= '{') goto yy255; + goto yy244; + } else { + if (yych == '~') goto yy244; + goto yy255; + } + } + } +yy290: + YYDEBUG(290, *YYCURSOR); + yyaccept = 3; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(291, *YYCURSOR); + if (yych <= '.') { + if (yych <= 0x1F) { + if (yych <= '\n') { + if (yych <= 0x00) goto yy244; + if (yych <= 0x08) goto yy255; + goto yy244; + } else { + if (yych == '\r') goto yy244; + goto yy255; + } + } else { + if (yych <= '$') { + if (yych <= '"') goto yy244; + if (yych <= '#') goto yy255; + goto yy260; + } else { + if (yych <= '%') goto yy255; + if (yych <= ')') goto yy244; + if (yych <= '-') goto yy255; + goto yy288; + } + } + } else { + if (yych <= '=') { + if (yych <= ':') { + if (yych <= '/') goto yy255; + if (yych <= '9') goto yy290; + goto yy255; + } else { + if (yych == '<') goto yy255; + goto yy244; + } + } else { + if (yych <= '{') { + if (yych == '^') goto yy244; + goto yy255; + } else { + if (yych == '}') goto yy255; + if (yych <= '~') goto yy244; + goto yy255; + } + } + } +yy292: + YYDEBUG(292, *YYCURSOR); + yyaccept = 3; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(293, *YYCURSOR); + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= '\n') { + if (yych <= 0x00) goto yy244; + if (yych <= 0x08) goto yy255; + goto yy244; + } else { + if (yych == '\r') goto yy244; + goto yy255; + } + } else { + if (yych <= '$') { + if (yych <= '"') goto yy244; + if (yych <= '#') goto yy255; + goto yy260; + } else { + if (yych <= '%') goto yy255; + if (yych <= ')') goto yy244; + goto yy255; + } + } + } else { + if (yych <= ']') { + if (yych <= ';') { + if (yych <= '9') goto yy292; + if (yych <= ':') goto yy255; + goto yy244; + } else { + if (yych == '=') goto yy244; + goto yy255; + } + } else { + if (yych <= '|') { + if (yych <= '^') goto yy244; + if (yych <= '{') goto yy255; + goto yy244; + } else { + if (yych == '~') goto yy244; + goto yy255; + } + } + } +yy294: + YYDEBUG(294, *YYCURSOR); + yyaccept = 3; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(295, *YYCURSOR); + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= '\n') { + if (yych <= 0x00) goto yy244; + if (yych <= 0x08) goto yy255; + goto yy244; + } else { + if (yych == '\r') goto yy244; + goto yy255; + } + } else { + if (yych <= '$') { + if (yych <= '"') goto yy244; + if (yych <= '#') goto yy255; + goto yy260; + } else { + if (yych <= '%') goto yy255; + if (yych <= ')') goto yy244; + goto yy255; + } + } + } else { + if (yych <= ']') { + if (yych <= ';') { + if (yych <= '9') goto yy294; + if (yych <= ':') goto yy255; + goto yy244; + } else { + if (yych == '=') goto yy244; + goto yy255; + } + } else { + if (yych <= '|') { + if (yych <= '^') goto yy244; + if (yych <= '{') goto yy255; + goto yy244; + } else { + if (yych == '~') goto yy244; + goto yy255; + } + } + } +yy296: + YYDEBUG(296, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(297, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy296; + } + YYDEBUG(298, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(299, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 368 "Zend/zend_ini_scanner.l" + { /* Raw string */ + /* Eat leading and trailing single quotes */ + if (yytext[0] == '\'' && yytext[yyleng - 1] == '\'') { + SCNG(yy_text)++; + yyleng = yyleng - 2; + } + RETURN_TOKEN(TC_RAW, yytext, yyleng); +} +#line 4475 "Zend/zend_ini_scanner.c" +yy300: + YYDEBUG(300, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(301, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 401 "Zend/zend_ini_scanner.l" + { /* Variable start */ + yy_push_state(ST_VARNAME TSRMLS_CC); + return TC_DOLLAR_CURLY; +} +#line 4486 "Zend/zend_ini_scanner.c" +yy302: + YYDEBUG(302, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; +yy303: + YYDEBUG(303, *YYCURSOR); + if (yych == '\t') goto yy302; + if (yych == ' ') goto yy302; + goto yy236; +yy304: + YYDEBUG(304, *YYCURSOR); + yych = *++YYCURSOR; + goto yy233; +yy305: + YYDEBUG(305, *YYCURSOR); + yyaccept = 1; + YYMARKER = ++YYCURSOR; + YYFILL(2); + yych = *YYCURSOR; +yy306: + YYDEBUG(306, *YYCURSOR); + if (yych <= 0x1F) { + if (yych <= '\n') { + if (yych <= 0x08) goto yy231; + if (yych <= '\t') goto yy305; + goto yy304; + } else { + if (yych == '\r') goto yy308; + goto yy231; + } + } else { + if (yych <= '"') { + if (yych <= ' ') goto yy305; + if (yych <= '!') goto yy231; + } else { + if (yych == ';') goto yy283; + goto yy231; + } + } + YYDEBUG(307, *YYCURSOR); + yych = *++YYCURSOR; + goto yy238; +yy308: + YYDEBUG(308, *YYCURSOR); + ++YYCURSOR; + if ((yych = *YYCURSOR) == '\n') goto yy304; + goto yy233; + } +/* *********************************** */ +yyc_ST_VARNAME: + { + static const unsigned char yybm[] = { + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 0, 0, 128, 128, 0, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 0, 0, 128, 0, 128, 0, 128, + 0, 0, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 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, + 128, 128, 128, 0, 128, 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, 128, 128, 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, 128, + }; + YYDEBUG(309, *YYCURSOR); + YYFILL(2); + yych = *YYCURSOR; + if (yych <= ')') { + if (yych <= '"') { + if (yych <= '\f') { + if (yych <= 0x08) goto yy311; + if (yych <= '\n') goto yy313; + } else { + if (yych <= '\r') goto yy313; + if (yych >= '!') goto yy313; + } + } else { + if (yych <= '%') { + if (yych == '$') goto yy313; + } else { + if (yych != '\'') goto yy313; + } + } + } else { + if (yych <= '[') { + if (yych <= '<') { + if (yych == ';') goto yy313; + } else { + if (yych <= '=') goto yy313; + if (yych >= '[') goto yy313; + } + } else { + if (yych <= 'z') { + if (yych == '^') goto yy313; + } else { + if (yych == '}') goto yy315; + if (yych <= '~') goto yy313; + } + } + } +yy311: + YYDEBUG(311, *YYCURSOR); + ++YYCURSOR; + yych = *YYCURSOR; + goto yy318; +yy312: + YYDEBUG(312, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 406 "Zend/zend_ini_scanner.l" + { /* Variable name */ + /* Eat leading whitespace */ + EAT_LEADING_WHITESPACE(); + + /* Eat trailing whitespace */ + EAT_TRAILING_WHITESPACE(); + + RETURN_TOKEN(TC_VARNAME, yytext, yyleng); +} +#line 4627 "Zend/zend_ini_scanner.c" +yy313: + YYDEBUG(313, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(314, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 603 "Zend/zend_ini_scanner.l" + { + return 0; +} +#line 4637 "Zend/zend_ini_scanner.c" +yy315: + YYDEBUG(315, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(316, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 416 "Zend/zend_ini_scanner.l" + { /* Variable end */ + yy_pop_state(TSRMLS_C); + return '}'; +} +#line 4648 "Zend/zend_ini_scanner.c" +yy317: + YYDEBUG(317, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; +yy318: + YYDEBUG(318, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy317; + } + goto yy312; + } +} +#line 607 "Zend/zend_ini_scanner.l" + +} diff --git a/Zend/zend_ini_scanner_defs.h b/Zend/zend_ini_scanner_defs.h index 5723954978..287d7bc1fb 100644 --- a/Zend/zend_ini_scanner_defs.h +++ b/Zend/zend_ini_scanner_defs.h @@ -1,13 +1,13 @@ -/* Generated by re2c 0.13.5 */ -#line 3 "Zend/zend_ini_scanner_defs.h" - -enum YYCONDTYPE { - yycINITIAL, - yycST_OFFSET, - yycST_SECTION_VALUE, - yycST_VALUE, - yycST_SECTION_RAW, - yycST_DOUBLE_QUOTES, - yycST_VARNAME, - yycST_RAW, -}; +/* Generated by re2c 0.13.5 */ +#line 3 "Zend/zend_ini_scanner_defs.h" + +enum YYCONDTYPE { + yycINITIAL, + yycST_OFFSET, + yycST_SECTION_VALUE, + yycST_VALUE, + yycST_SECTION_RAW, + yycST_DOUBLE_QUOTES, + yycST_VARNAME, + yycST_RAW, +}; diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index a4bc612bcb..5d3f73beaf 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -72,7 +72,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*); %token T_PRINT "print (T_PRINT)" %right T_YIELD %token T_YIELD "yield (T_YIELD)" -%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 +%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 %token T_PLUS_EQUAL "+= (T_PLUS_EQUAL)" %token T_MINUS_EQUAL "-= (T_MINUS_EQUAL)" %token T_MUL_EQUAL "*= (T_MUL_EQUAL)" @@ -109,6 +109,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*); %nonassoc T_INSTANCEOF %token T_INSTANCEOF "instanceof (T_INSTANCEOF)" %right '~' T_INC T_DEC T_INT_CAST T_DOUBLE_CAST T_STRING_CAST T_ARRAY_CAST T_OBJECT_CAST T_BOOL_CAST T_UNSET_CAST '@' +%right T_POW %token T_INC "++ (T_INC)" %token T_DEC "-- (T_DEC)" %token T_INT_CAST "(int) (T_INT_CAST)" @@ -213,6 +214,8 @@ static YYSIZE_T zend_yytnamerr(char*, const char*); %token T_DIR "__DIR__ (T_DIR)" %token T_NS_SEPARATOR "\\ (T_NS_SEPARATOR)" %token T_ELLIPSIS "... (T_ELLIPSIS)" +%token T_POW "** (T_POW)" +%token T_POW_EQUAL "**= (T_POW_EQUAL)" %% /* Rules */ @@ -778,6 +781,7 @@ expr_without_variable: | variable T_PLUS_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_ADD, &$$, &$1, &$3 TSRMLS_CC); } | variable T_MINUS_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SUB, &$$, &$1, &$3 TSRMLS_CC); } | variable T_MUL_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_MUL, &$$, &$1, &$3 TSRMLS_CC); } + | variable T_POW_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_POW, &$$, &$1, &$3 TSRMLS_CC); } | variable T_DIV_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_DIV, &$$, &$1, &$3 TSRMLS_CC); } | variable T_CONCAT_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_CONCAT, &$$, &$1, &$3 TSRMLS_CC); } | variable T_MOD_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_MOD, &$$, &$1, &$3 TSRMLS_CC); } @@ -802,6 +806,7 @@ expr_without_variable: | expr '+' expr { zend_do_binary_op(ZEND_ADD, &$$, &$1, &$3 TSRMLS_CC); } | expr '-' expr { zend_do_binary_op(ZEND_SUB, &$$, &$1, &$3 TSRMLS_CC); } | expr '*' expr { zend_do_binary_op(ZEND_MUL, &$$, &$1, &$3 TSRMLS_CC); } + | expr T_POW expr { zend_do_binary_op(ZEND_POW, &$$, &$1, &$3 TSRMLS_CC); } | expr '/' expr { zend_do_binary_op(ZEND_DIV, &$$, &$1, &$3 TSRMLS_CC); } | expr '%' expr { zend_do_binary_op(ZEND_MOD, &$$, &$1, &$3 TSRMLS_CC); } | expr T_SL expr { zend_do_binary_op(ZEND_SL, &$$, &$1, &$3 TSRMLS_CC); } diff --git a/Zend/zend_language_scanner.c b/Zend/zend_language_scanner.c index 8e958d73d2..05f9e4ed7f 100644 --- a/Zend/zend_language_scanner.c +++ b/Zend/zend_language_scanner.c @@ -1,4 +1,4 @@ -/* Generated by re2c 0.13.5 on Sun Dec 22 13:03:33 2013 */ +/* Generated by re2c 0.13.5 */ #line 1 "Zend/zend_language_scanner.l" /* +----------------------------------------------------------------------+ @@ -1096,7 +1096,7 @@ yyc_INITIAL: yy3: YYDEBUG(3, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1741 "Zend/zend_language_scanner.l" +#line 1749 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { return 0; @@ -1174,7 +1174,7 @@ yy5: yy6: YYDEBUG(6, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1731 "Zend/zend_language_scanner.l" +#line 1739 "Zend/zend_language_scanner.l" { if (CG(short_tags)) { ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */ @@ -1191,7 +1191,7 @@ yy7: if ((yych = *YYCURSOR) == '=') goto yy43; YYDEBUG(8, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1712 "Zend/zend_language_scanner.l" +#line 1720 "Zend/zend_language_scanner.l" { if (CG(asp_tags)) { ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */ @@ -1387,7 +1387,7 @@ yy35: ++YYCURSOR; YYDEBUG(38, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1678 "Zend/zend_language_scanner.l" +#line 1686 "Zend/zend_language_scanner.l" { YYCTYPE *bracket = (YYCTYPE*)zend_memrchr(yytext, '<', yyleng - (sizeof("script language=php>") - 1)); @@ -1429,7 +1429,7 @@ yy43: ++YYCURSOR; YYDEBUG(44, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1694 "Zend/zend_language_scanner.l" +#line 1702 "Zend/zend_language_scanner.l" { if (CG(asp_tags)) { ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */ @@ -1445,7 +1445,7 @@ yy45: ++YYCURSOR; YYDEBUG(46, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1705 "Zend/zend_language_scanner.l" +#line 1713 "Zend/zend_language_scanner.l" { ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */ BEGIN(ST_IN_SCRIPTING); @@ -1478,7 +1478,7 @@ yy50: yy51: YYDEBUG(51, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1723 "Zend/zend_language_scanner.l" +#line 1731 "Zend/zend_language_scanner.l" { ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */ HANDLE_NEWLINE(yytext[yyleng-1]); @@ -1556,7 +1556,7 @@ yyc_ST_BACKQUOTE: yy56: YYDEBUG(56, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2186 "Zend/zend_language_scanner.l" +#line 2194 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { return 0; @@ -1608,7 +1608,7 @@ yy58: ++YYCURSOR; YYDEBUG(59, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2130 "Zend/zend_language_scanner.l" +#line 2138 "Zend/zend_language_scanner.l" { BEGIN(ST_IN_SCRIPTING); return '`'; @@ -1623,7 +1623,7 @@ yy61: ++YYCURSOR; YYDEBUG(62, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2117 "Zend/zend_language_scanner.l" +#line 2125 "Zend/zend_language_scanner.l" { Z_LVAL_P(zendlval) = (long) '{'; yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); @@ -1646,7 +1646,7 @@ yy63: yy65: YYDEBUG(65, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1823 "Zend/zend_language_scanner.l" +#line 1831 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); zendlval->type = IS_STRING; @@ -1658,7 +1658,7 @@ yy66: ++YYCURSOR; YYDEBUG(67, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1457 "Zend/zend_language_scanner.l" +#line 1465 "Zend/zend_language_scanner.l" { yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC); return T_DOLLAR_OPEN_CURLY_BRACES; @@ -1677,7 +1677,7 @@ yy70: ++YYCURSOR; YYDEBUG(71, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1815 "Zend/zend_language_scanner.l" +#line 1823 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); yy_push_state(ST_VAR_OFFSET TSRMLS_CC); @@ -1703,7 +1703,7 @@ yy73: ++YYCURSOR; YYDEBUG(74, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1805 "Zend/zend_language_scanner.l" +#line 1813 "Zend/zend_language_scanner.l" { yyless(yyleng - 3); yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); @@ -1779,7 +1779,7 @@ yy77: yy78: YYDEBUG(78, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2136 "Zend/zend_language_scanner.l" +#line 2144 "Zend/zend_language_scanner.l" { if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) { YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1; @@ -1839,7 +1839,7 @@ yy80: ++YYCURSOR; YYDEBUG(81, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2125 "Zend/zend_language_scanner.l" +#line 2133 "Zend/zend_language_scanner.l" { BEGIN(ST_IN_SCRIPTING); return '"'; @@ -1854,7 +1854,7 @@ yy83: ++YYCURSOR; YYDEBUG(84, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2117 "Zend/zend_language_scanner.l" +#line 2125 "Zend/zend_language_scanner.l" { Z_LVAL_P(zendlval) = (long) '{'; yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); @@ -1877,7 +1877,7 @@ yy85: yy87: YYDEBUG(87, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1823 "Zend/zend_language_scanner.l" +#line 1831 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); zendlval->type = IS_STRING; @@ -1889,7 +1889,7 @@ yy88: ++YYCURSOR; YYDEBUG(89, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1457 "Zend/zend_language_scanner.l" +#line 1465 "Zend/zend_language_scanner.l" { yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC); return T_DOLLAR_OPEN_CURLY_BRACES; @@ -1908,7 +1908,7 @@ yy92: ++YYCURSOR; YYDEBUG(93, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1815 "Zend/zend_language_scanner.l" +#line 1823 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); yy_push_state(ST_VAR_OFFSET TSRMLS_CC); @@ -1934,7 +1934,7 @@ yy95: ++YYCURSOR; YYDEBUG(96, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1805 "Zend/zend_language_scanner.l" +#line 1813 "Zend/zend_language_scanner.l" { yyless(yyleng - 3); yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); @@ -1953,7 +1953,7 @@ yyc_ST_END_HEREDOC: ++YYCURSOR; YYDEBUG(100, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2103 "Zend/zend_language_scanner.l" +#line 2111 "Zend/zend_language_scanner.l" { zend_heredoc_label *heredoc_label = zend_ptr_stack_pop(&SCNG(heredoc_label_stack)); @@ -2028,7 +2028,7 @@ yy103: yy104: YYDEBUG(104, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2228 "Zend/zend_language_scanner.l" +#line 2236 "Zend/zend_language_scanner.l" { int newline = 0; @@ -2116,7 +2116,7 @@ yy107: ++YYCURSOR; YYDEBUG(108, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2117 "Zend/zend_language_scanner.l" +#line 2125 "Zend/zend_language_scanner.l" { Z_LVAL_P(zendlval) = (long) '{'; yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); @@ -2139,7 +2139,7 @@ yy109: yy111: YYDEBUG(111, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1823 "Zend/zend_language_scanner.l" +#line 1831 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); zendlval->type = IS_STRING; @@ -2151,7 +2151,7 @@ yy112: ++YYCURSOR; YYDEBUG(113, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1457 "Zend/zend_language_scanner.l" +#line 1465 "Zend/zend_language_scanner.l" { yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC); return T_DOLLAR_OPEN_CURLY_BRACES; @@ -2170,7 +2170,7 @@ yy116: ++YYCURSOR; YYDEBUG(117, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1815 "Zend/zend_language_scanner.l" +#line 1823 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); yy_push_state(ST_VAR_OFFSET TSRMLS_CC); @@ -2196,7 +2196,7 @@ yy119: ++YYCURSOR; YYDEBUG(120, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1805 "Zend/zend_language_scanner.l" +#line 1813 "Zend/zend_language_scanner.l" { yyless(yyleng - 3); yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); @@ -2371,23 +2371,23 @@ yy123: YYDEBUG(-1, yych); switch ((yych = *YYCURSOR)) { case 'C': - case 'c': goto yy738; + case 'c': goto yy742; case 'L': - case 'l': goto yy739; + case 'l': goto yy743; case 'M': - case 'm': goto yy740; + case 'm': goto yy744; case 'N': - case 'n': goto yy741; + case 'n': goto yy745; case 'V': - case 'v': goto yy742; + case 'v': goto yy746; case 'X': - case 'x': goto yy743; + case 'x': goto yy747; default: goto yy187; } yy124: YYDEBUG(124, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1846 "Zend/zend_language_scanner.l" +#line 1854 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, yytext, yyleng); zendlval->type = IS_STRING; @@ -2399,20 +2399,20 @@ yy125: yych = *++YYCURSOR; if (yych <= 'O') { if (yych <= 'H') { - if (yych == 'E') goto yy720; + if (yych == 'E') goto yy724; goto yy187; } else { - if (yych <= 'I') goto yy721; + if (yych <= 'I') goto yy725; if (yych <= 'N') goto yy187; - goto yy722; + goto yy726; } } else { if (yych <= 'h') { - if (yych == 'e') goto yy720; + if (yych == 'e') goto yy724; goto yy187; } else { - if (yych <= 'i') goto yy721; - if (yych == 'o') goto yy722; + if (yych <= 'i') goto yy725; + if (yych == 'o') goto yy726; goto yy187; } } @@ -2421,20 +2421,20 @@ yy126: yych = *++YYCURSOR; if (yych <= 'U') { if (yych <= 'N') { - if (yych == 'I') goto yy696; + if (yych == 'I') goto yy700; goto yy187; } else { - if (yych <= 'O') goto yy697; + if (yych <= 'O') goto yy701; if (yych <= 'T') goto yy187; - goto yy698; + goto yy702; } } else { if (yych <= 'n') { - if (yych == 'i') goto yy696; + if (yych == 'i') goto yy700; goto yy187; } else { - if (yych <= 'o') goto yy697; - if (yych == 'u') goto yy698; + if (yych <= 'o') goto yy701; + if (yych == 'u') goto yy702; goto yy187; } } @@ -2443,48 +2443,48 @@ yy127: yych = *++YYCURSOR; if (yych <= 'O') { if (yych <= 'K') { - if (yych == 'A') goto yy661; + if (yych == 'A') goto yy665; goto yy187; } else { - if (yych <= 'L') goto yy662; + if (yych <= 'L') goto yy666; if (yych <= 'N') goto yy187; - goto yy663; + goto yy667; } } else { if (yych <= 'k') { - if (yych == 'a') goto yy661; + if (yych == 'a') goto yy665; goto yy187; } else { - if (yych <= 'l') goto yy662; - if (yych == 'o') goto yy663; + if (yych <= 'l') goto yy666; + if (yych == 'o') goto yy667; goto yy187; } } yy128: YYDEBUG(128, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy643; - if (yych == 'e') goto yy643; + if (yych == 'E') goto yy647; + if (yych == 'e') goto yy647; goto yy187; yy129: YYDEBUG(129, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy638; - if (yych == 'i') goto yy638; + if (yych == 'I') goto yy642; + if (yych == 'i') goto yy642; goto yy187; yy130: YYDEBUG(130, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'R') { - if (yych == 'H') goto yy626; + if (yych == 'H') goto yy630; if (yych <= 'Q') goto yy187; - goto yy627; + goto yy631; } else { if (yych <= 'h') { if (yych <= 'g') goto yy187; - goto yy626; + goto yy630; } else { - if (yych == 'r') goto yy627; + if (yych == 'r') goto yy631; goto yy187; } } @@ -2493,53 +2493,53 @@ yy131: yych = *++YYCURSOR; if (yych <= 'S') { if (yych <= 'L') { - if (yych == 'F') goto yy573; + if (yych == 'F') goto yy577; goto yy187; } else { - if (yych <= 'M') goto yy575; - if (yych <= 'N') goto yy576; + if (yych <= 'M') goto yy579; + if (yych <= 'N') goto yy580; if (yych <= 'R') goto yy187; - goto yy577; + goto yy581; } } else { if (yych <= 'm') { - if (yych == 'f') goto yy573; + if (yych == 'f') goto yy577; if (yych <= 'l') goto yy187; - goto yy575; + goto yy579; } else { - if (yych <= 'n') goto yy576; - if (yych == 's') goto yy577; + if (yych <= 'n') goto yy580; + if (yych == 's') goto yy581; goto yy187; } } yy132: YYDEBUG(132, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy568; - if (yych == 'h') goto yy568; + if (yych == 'H') goto yy572; + if (yych == 'h') goto yy572; goto yy187; yy133: YYDEBUG(133, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'S') { if (yych <= 'M') { - if (yych == 'B') goto yy550; + if (yych == 'B') goto yy554; goto yy187; } else { - if (yych <= 'N') goto yy551; + if (yych <= 'N') goto yy555; if (yych <= 'Q') goto yy187; - if (yych <= 'R') goto yy552; - goto yy553; + if (yych <= 'R') goto yy556; + goto yy557; } } else { if (yych <= 'n') { - if (yych == 'b') goto yy550; + if (yych == 'b') goto yy554; if (yych <= 'm') goto yy187; - goto yy551; + goto yy555; } else { if (yych <= 'q') goto yy187; - if (yych <= 'r') goto yy552; - if (yych <= 's') goto yy553; + if (yych <= 'r') goto yy556; + if (yych <= 's') goto yy557; goto yy187; } } @@ -2547,15 +2547,15 @@ yy134: YYDEBUG(134, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'W') { - if (yych == 'T') goto yy538; + if (yych == 'T') goto yy542; if (yych <= 'V') goto yy187; - goto yy539; + goto yy543; } else { if (yych <= 't') { if (yych <= 's') goto yy187; - goto yy538; + goto yy542; } else { - if (yych == 'w') goto yy539; + if (yych == 'w') goto yy543; goto yy187; } } @@ -2566,18 +2566,18 @@ yy135: if (yych <= ';') { if (yych <= '"') { if (yych <= '!') goto yy187; - goto yy530; + goto yy534; } else { - if (yych == '\'') goto yy531; + if (yych == '\'') goto yy535; goto yy187; } } else { if (yych <= 'R') { - if (yych <= '<') goto yy529; + if (yych <= '<') goto yy533; if (yych <= 'Q') goto yy187; - goto yy532; + goto yy536; } else { - if (yych == 'r') goto yy532; + if (yych == 'r') goto yy536; goto yy187; } } @@ -2585,15 +2585,15 @@ yy136: YYDEBUG(136, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'O') { - if (yych == 'L') goto yy519; + if (yych == 'L') goto yy523; if (yych <= 'N') goto yy187; - goto yy520; + goto yy524; } else { if (yych <= 'l') { if (yych <= 'k') goto yy187; - goto yy519; + goto yy523; } else { - if (yych == 'o') goto yy520; + if (yych == 'o') goto yy524; goto yy187; } } @@ -2601,15 +2601,15 @@ yy137: YYDEBUG(137, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { - if (yych == 'R') goto yy495; + if (yych == 'R') goto yy499; if (yych <= 'T') goto yy187; - goto yy496; + goto yy500; } else { if (yych <= 'r') { if (yych <= 'q') goto yy187; - goto yy495; + goto yy499; } else { - if (yych == 'u') goto yy496; + if (yych == 'u') goto yy500; goto yy187; } } @@ -2617,15 +2617,15 @@ yy138: YYDEBUG(138, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '<') { - if (yych == '-') goto yy491; + if (yych == '-') goto yy495; } else { - if (yych <= '=') goto yy489; - if (yych <= '>') goto yy493; + if (yych <= '=') goto yy493; + if (yych <= '>') goto yy497; } yy139: YYDEBUG(139, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1446 "Zend/zend_language_scanner.l" +#line 1454 "Zend/zend_language_scanner.l" { return yytext[0]; } @@ -2634,7 +2634,7 @@ yy140: YYDEBUG(140, *YYCURSOR); ++YYCURSOR; yych = *YYCURSOR; - goto yy488; + goto yy492; yy141: YYDEBUG(141, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); @@ -2648,7 +2648,7 @@ yy141: yy142: YYDEBUG(142, *YYCURSOR); yych = *++YYCURSOR; - if (yych == ':') goto yy485; + if (yych == ':') goto yy489; goto yy139; yy143: YYDEBUG(143, *YYCURSOR); @@ -2665,34 +2665,34 @@ yy145: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '/') { - if (yych == '.') goto yy482; + if (yych == '.') goto yy486; goto yy139; } else { - if (yych <= '9') goto yy478; - if (yych == '=') goto yy480; + if (yych <= '9') goto yy482; + if (yych == '=') goto yy484; goto yy139; } yy146: YYDEBUG(146, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'E') { - if (yych == 'A') goto yy466; + if (yych == 'A') goto yy470; if (yych <= 'D') goto yy187; - goto yy467; + goto yy471; } else { if (yych <= 'a') { if (yych <= '`') goto yy187; - goto yy466; + goto yy470; } else { - if (yych == 'e') goto yy467; + if (yych == 'e') goto yy471; goto yy187; } } yy147: YYDEBUG(147, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy463; - if (yych == 'a') goto yy463; + if (yych == 'A') goto yy467; + if (yych == 'a') goto yy467; goto yy187; yy148: YYDEBUG(148, *YYCURSOR); @@ -2701,47 +2701,47 @@ yy148: if (yych <= 'S') { if (yych <= 'D') { if (yych <= ' ') { - if (yych == '\t') goto yy388; + if (yych == '\t') goto yy392; if (yych <= 0x1F) goto yy139; - goto yy388; + goto yy392; } else { if (yych <= '@') goto yy139; if (yych == 'C') goto yy139; - goto yy388; + goto yy392; } } else { if (yych <= 'I') { - if (yych == 'F') goto yy388; + if (yych == 'F') goto yy392; if (yych <= 'H') goto yy139; - goto yy388; + goto yy392; } else { - if (yych == 'O') goto yy388; + if (yych == 'O') goto yy392; if (yych <= 'Q') goto yy139; - goto yy388; + goto yy392; } } } else { if (yych <= 'f') { if (yych <= 'b') { - if (yych == 'U') goto yy388; + if (yych == 'U') goto yy392; if (yych <= '`') goto yy139; - goto yy388; + goto yy392; } else { - if (yych == 'd') goto yy388; + if (yych == 'd') goto yy392; if (yych <= 'e') goto yy139; - goto yy388; + goto yy392; } } else { if (yych <= 'o') { - if (yych == 'i') goto yy388; + if (yych == 'i') goto yy392; if (yych <= 'n') goto yy139; - goto yy388; + goto yy392; } else { if (yych <= 's') { if (yych <= 'q') goto yy139; - goto yy388; + goto yy392; } else { - if (yych == 'u') goto yy388; + if (yych == 'u') goto yy392; goto yy139; } } @@ -2751,71 +2751,72 @@ yy149: YYDEBUG(149, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'S') { - if (yych == 'N') goto yy379; + if (yych == 'N') goto yy383; if (yych <= 'R') goto yy187; - goto yy380; + goto yy384; } else { if (yych <= 'n') { if (yych <= 'm') goto yy187; - goto yy379; + goto yy383; } else { - if (yych == 's') goto yy380; + if (yych == 's') goto yy384; goto yy187; } } yy150: YYDEBUG(150, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '_') goto yy297; + if (yych == '_') goto yy301; goto yy187; yy151: YYDEBUG(151, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '<') goto yy139; - if (yych <= '=') goto yy291; - if (yych <= '>') goto yy293; + if (yych <= '=') goto yy295; + if (yych <= '>') goto yy297; goto yy139; yy152: YYDEBUG(152, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy287; - if (yych == 'i') goto yy287; + if (yych == 'I') goto yy291; + if (yych == 'i') goto yy291; goto yy187; yy153: YYDEBUG(153, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '+') goto yy285; - if (yych == '=') goto yy283; + if (yych == '+') goto yy289; + if (yych == '=') goto yy287; goto yy139; yy154: YYDEBUG(154, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '=') goto yy280; + if (yych == '=') goto yy284; goto yy139; yy155: YYDEBUG(155, *YYCURSOR); yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); if (yych <= ';') { - if (yych == '/') goto yy252; + if (yych == '/') goto yy256; goto yy139; } else { - if (yych <= '<') goto yy250; - if (yych <= '=') goto yy253; - if (yych <= '>') goto yy255; + if (yych <= '<') goto yy254; + if (yych <= '=') goto yy257; + if (yych <= '>') goto yy259; goto yy139; } yy156: YYDEBUG(156, *YYCURSOR); yych = *++YYCURSOR; if (yych <= '<') goto yy139; - if (yych <= '=') goto yy246; - if (yych <= '>') goto yy244; + if (yych <= '=') goto yy250; + if (yych <= '>') goto yy248; goto yy139; yy157: YYDEBUG(157, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '=') goto yy242; + if (yych == '*') goto yy242; + if (yych == '=') goto yy244; goto yy139; yy158: YYDEBUG(158, *YYCURSOR); @@ -2892,18 +2893,18 @@ yy168: ++YYCURSOR; YYDEBUG(169, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1451 "Zend/zend_language_scanner.l" +#line 1459 "Zend/zend_language_scanner.l" { yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); return '{'; } -#line 2901 "Zend/zend_language_scanner.c" +#line 2902 "Zend/zend_language_scanner.c" yy170: YYDEBUG(170, *YYCURSOR); ++YYCURSOR; YYDEBUG(171, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1463 "Zend/zend_language_scanner.l" +#line 1471 "Zend/zend_language_scanner.l" { RESET_DOC_COMMENT(); if (!zend_stack_is_empty(&SCNG(state_stack))) { @@ -2911,7 +2912,7 @@ yy170: } return '}'; } -#line 2915 "Zend/zend_language_scanner.c" +#line 2916 "Zend/zend_language_scanner.c" yy172: YYDEBUG(172, *YYCURSOR); yyaccept = 2; @@ -2939,7 +2940,7 @@ yy172: yy173: YYDEBUG(173, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1513 "Zend/zend_language_scanner.l" +#line 1521 "Zend/zend_language_scanner.l" { if (yyleng < MAX_LENGTH_OF_LONG - 1) { /* Won't overflow */ Z_LVAL_P(zendlval) = strtol(yytext, NULL, 0); @@ -2960,7 +2961,7 @@ yy173: zendlval->type = IS_LONG; return T_LNUMBER; } -#line 2964 "Zend/zend_language_scanner.c" +#line 2965 "Zend/zend_language_scanner.c" yy174: YYDEBUG(174, *YYCURSOR); yyaccept = 2; @@ -2988,7 +2989,7 @@ yy176: yy177: YYDEBUG(177, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1853 "Zend/zend_language_scanner.l" +#line 1861 "Zend/zend_language_scanner.l" { while (YYCURSOR < YYLIMIT) { switch (*YYCURSOR++) { @@ -3022,14 +3023,14 @@ yy177: return T_COMMENT; } -#line 3026 "Zend/zend_language_scanner.c" +#line 3027 "Zend/zend_language_scanner.c" yy178: YYDEBUG(178, *YYCURSOR); ++YYCURSOR; yy179: YYDEBUG(179, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1940 "Zend/zend_language_scanner.l" +#line 1948 "Zend/zend_language_scanner.l" { register char *s, *t; char *end; @@ -3095,14 +3096,14 @@ yy179: } return T_CONSTANT_ENCAPSED_STRING; } -#line 3099 "Zend/zend_language_scanner.c" +#line 3100 "Zend/zend_language_scanner.c" yy180: YYDEBUG(180, *YYCURSOR); ++YYCURSOR; yy181: YYDEBUG(181, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2007 "Zend/zend_language_scanner.l" +#line 2015 "Zend/zend_language_scanner.l" { int bprefix = (yytext[0] != '"') ? 1 : 0; @@ -3143,24 +3144,24 @@ yy181: BEGIN(ST_DOUBLE_QUOTES); return '"'; } -#line 3147 "Zend/zend_language_scanner.c" +#line 3148 "Zend/zend_language_scanner.c" yy182: YYDEBUG(182, *YYCURSOR); ++YYCURSOR; YYDEBUG(183, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2097 "Zend/zend_language_scanner.l" +#line 2105 "Zend/zend_language_scanner.l" { BEGIN(ST_BACKQUOTE); return '`'; } -#line 3158 "Zend/zend_language_scanner.c" +#line 3159 "Zend/zend_language_scanner.c" yy184: YYDEBUG(184, *YYCURSOR); ++YYCURSOR; YYDEBUG(185, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2360 "Zend/zend_language_scanner.l" +#line 2368 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { return 0; @@ -3169,7 +3170,7 @@ yy184: zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); goto restart; } -#line 3173 "Zend/zend_language_scanner.c" +#line 3174 "Zend/zend_language_scanner.c" yy186: YYDEBUG(186, *YYCURSOR); ++YYCURSOR; @@ -3196,12 +3197,12 @@ yy188: yy190: YYDEBUG(190, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1572 "Zend/zend_language_scanner.l" +#line 1580 "Zend/zend_language_scanner.l" { ZVAL_DOUBLE(zendlval, zend_strtod(yytext, NULL)); return T_DNUMBER; } -#line 3205 "Zend/zend_language_scanner.c" +#line 3206 "Zend/zend_language_scanner.c" yy191: YYDEBUG(191, *YYCURSOR); yyaccept = 2; @@ -3251,7 +3252,7 @@ yy194: goto yy235; } } else { - goto yy251; + goto yy255; } } yy195: @@ -3293,7 +3294,7 @@ yy200: } YYDEBUG(202, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1489 "Zend/zend_language_scanner.l" +#line 1497 "Zend/zend_language_scanner.l" { char *bin = yytext + 2; /* Skip "0b" */ int len = yyleng - 2; @@ -3317,7 +3318,7 @@ yy200: return T_DNUMBER; } } -#line 3321 "Zend/zend_language_scanner.c" +#line 3322 "Zend/zend_language_scanner.c" yy203: YYDEBUG(203, *YYCURSOR); ++YYCURSOR; @@ -3329,7 +3330,7 @@ yy203: } YYDEBUG(205, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1534 "Zend/zend_language_scanner.l" +#line 1542 "Zend/zend_language_scanner.l" { char *hex = yytext + 2; /* Skip "0x" */ int len = yyleng - 2; @@ -3353,7 +3354,7 @@ yy203: return T_DNUMBER; } } -#line 3357 "Zend/zend_language_scanner.c" +#line 3358 "Zend/zend_language_scanner.c" yy206: YYDEBUG(206, *YYCURSOR); ++YYCURSOR; @@ -3362,13 +3363,13 @@ yy206: yy207: YYDEBUG(207, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1921 "Zend/zend_language_scanner.l" +#line 1929 "Zend/zend_language_scanner.l" { ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */ BEGIN(INITIAL); return T_CLOSE_TAG; /* implicit ';' at php-end tag */ } -#line 3372 "Zend/zend_language_scanner.c" +#line 3373 "Zend/zend_language_scanner.c" yy208: YYDEBUG(208, *YYCURSOR); yych = *++YYCURSOR; @@ -3402,13 +3403,13 @@ yy210: yy212: YYDEBUG(212, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1823 "Zend/zend_language_scanner.l" +#line 1831 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); zendlval->type = IS_STRING; return T_VARIABLE; } -#line 3412 "Zend/zend_language_scanner.c" +#line 3413 "Zend/zend_language_scanner.c" yy213: YYDEBUG(213, *YYCURSOR); yych = *++YYCURSOR; @@ -3422,11 +3423,11 @@ yy214: } YYDEBUG(215, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1434 "Zend/zend_language_scanner.l" +#line 1442 "Zend/zend_language_scanner.l" { return T_LOGICAL_XOR; } -#line 3430 "Zend/zend_language_scanner.c" +#line 3431 "Zend/zend_language_scanner.c" yy216: YYDEBUG(216, *YYCURSOR); ++YYCURSOR; @@ -3435,61 +3436,61 @@ yy216: } YYDEBUG(217, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1426 "Zend/zend_language_scanner.l" +#line 1434 "Zend/zend_language_scanner.l" { return T_LOGICAL_OR; } -#line 3443 "Zend/zend_language_scanner.c" +#line 3444 "Zend/zend_language_scanner.c" yy218: YYDEBUG(218, *YYCURSOR); ++YYCURSOR; YYDEBUG(219, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1414 "Zend/zend_language_scanner.l" +#line 1422 "Zend/zend_language_scanner.l" { return T_XOR_EQUAL; } -#line 3453 "Zend/zend_language_scanner.c" +#line 3454 "Zend/zend_language_scanner.c" yy220: YYDEBUG(220, *YYCURSOR); ++YYCURSOR; YYDEBUG(221, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1418 "Zend/zend_language_scanner.l" +#line 1426 "Zend/zend_language_scanner.l" { return T_BOOLEAN_OR; } -#line 3463 "Zend/zend_language_scanner.c" +#line 3464 "Zend/zend_language_scanner.c" yy222: YYDEBUG(222, *YYCURSOR); ++YYCURSOR; YYDEBUG(223, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1410 "Zend/zend_language_scanner.l" +#line 1418 "Zend/zend_language_scanner.l" { return T_OR_EQUAL; } -#line 3473 "Zend/zend_language_scanner.c" +#line 3474 "Zend/zend_language_scanner.c" yy224: YYDEBUG(224, *YYCURSOR); ++YYCURSOR; YYDEBUG(225, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1422 "Zend/zend_language_scanner.l" +#line 1430 "Zend/zend_language_scanner.l" { return T_BOOLEAN_AND; } -#line 3483 "Zend/zend_language_scanner.c" +#line 3484 "Zend/zend_language_scanner.c" yy226: YYDEBUG(226, *YYCURSOR); ++YYCURSOR; YYDEBUG(227, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1406 "Zend/zend_language_scanner.l" +#line 1414 "Zend/zend_language_scanner.l" { return T_AND_EQUAL; } -#line 3493 "Zend/zend_language_scanner.c" +#line 3494 "Zend/zend_language_scanner.c" yy228: YYDEBUG(228, *YYCURSOR); ++YYCURSOR; @@ -3498,7 +3499,7 @@ yy228: yy229: YYDEBUG(229, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1928 "Zend/zend_language_scanner.l" +#line 1936 "Zend/zend_language_scanner.l" { if (CG(asp_tags)) { BEGIN(INITIAL); @@ -3509,17 +3510,17 @@ yy229: return yytext[0]; } } -#line 3513 "Zend/zend_language_scanner.c" +#line 3514 "Zend/zend_language_scanner.c" yy230: YYDEBUG(230, *YYCURSOR); ++YYCURSOR; YYDEBUG(231, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1394 "Zend/zend_language_scanner.l" +#line 1402 "Zend/zend_language_scanner.l" { return T_MOD_EQUAL; } -#line 3523 "Zend/zend_language_scanner.c" +#line 3524 "Zend/zend_language_scanner.c" yy232: YYDEBUG(232, *YYCURSOR); yych = *++YYCURSOR; @@ -3537,7 +3538,7 @@ yy234: yy235: YYDEBUG(235, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1887 "Zend/zend_language_scanner.l" +#line 1895 "Zend/zend_language_scanner.l" { int doc_com; @@ -3571,7 +3572,7 @@ yy235: return T_COMMENT; } -#line 3575 "Zend/zend_language_scanner.c" +#line 3576 "Zend/zend_language_scanner.c" yy236: YYDEBUG(236, *YYCURSOR); yych = *++YYCURSOR; @@ -3581,11 +3582,11 @@ yy237: ++YYCURSOR; YYDEBUG(238, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1386 "Zend/zend_language_scanner.l" +#line 1394 "Zend/zend_language_scanner.l" { return T_DIV_EQUAL; } -#line 3589 "Zend/zend_language_scanner.c" +#line 3590 "Zend/zend_language_scanner.c" yy239: YYDEBUG(239, *YYCURSOR); yych = *++YYCURSOR; @@ -3606,246 +3607,267 @@ yy240: yy242: YYDEBUG(242, *YYCURSOR); ++YYCURSOR; + if ((yych = *YYCURSOR) == '=') goto yy246; YYDEBUG(243, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1382 "Zend/zend_language_scanner.l" +#line 1386 "Zend/zend_language_scanner.l" { - return T_MUL_EQUAL; + return T_POW; } -#line 3616 "Zend/zend_language_scanner.c" +#line 3618 "Zend/zend_language_scanner.c" yy244: YYDEBUG(244, *YYCURSOR); ++YYCURSOR; - if ((yych = *YYCURSOR) == '=') goto yy248; YYDEBUG(245, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1442 "Zend/zend_language_scanner.l" +#line 1382 "Zend/zend_language_scanner.l" { - return T_SR; + return T_MUL_EQUAL; } -#line 3627 "Zend/zend_language_scanner.c" +#line 3628 "Zend/zend_language_scanner.c" yy246: YYDEBUG(246, *YYCURSOR); ++YYCURSOR; YYDEBUG(247, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1370 "Zend/zend_language_scanner.l" +#line 1390 "Zend/zend_language_scanner.l" { - return T_IS_GREATER_OR_EQUAL; + return T_POW_EQUAL; } -#line 3637 "Zend/zend_language_scanner.c" +#line 3638 "Zend/zend_language_scanner.c" yy248: YYDEBUG(248, *YYCURSOR); ++YYCURSOR; + if ((yych = *YYCURSOR) == '=') goto yy252; YYDEBUG(249, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1402 "Zend/zend_language_scanner.l" +#line 1450 "Zend/zend_language_scanner.l" { - return T_SR_EQUAL; + return T_SR; } -#line 3647 "Zend/zend_language_scanner.c" +#line 3649 "Zend/zend_language_scanner.c" yy250: YYDEBUG(250, *YYCURSOR); - yyaccept = 5; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= ';') goto yy251; - if (yych <= '<') goto yy266; - if (yych <= '=') goto yy264; -yy251: + ++YYCURSOR; YYDEBUG(251, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1438 "Zend/zend_language_scanner.l" +#line 1370 "Zend/zend_language_scanner.l" { - return T_SL; + return T_IS_GREATER_OR_EQUAL; } -#line 3662 "Zend/zend_language_scanner.c" +#line 3659 "Zend/zend_language_scanner.c" yy252: YYDEBUG(252, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(253, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1410 "Zend/zend_language_scanner.l" + { + return T_SR_EQUAL; +} +#line 3669 "Zend/zend_language_scanner.c" +yy254: + YYDEBUG(254, *YYCURSOR); + yyaccept = 5; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= ';') goto yy255; + if (yych <= '<') goto yy270; + if (yych <= '=') goto yy268; +yy255: + YYDEBUG(255, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1446 "Zend/zend_language_scanner.l" + { + return T_SL; +} +#line 3684 "Zend/zend_language_scanner.c" +yy256: + YYDEBUG(256, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy257; - if (yych == 's') goto yy257; + if (yych == 'S') goto yy261; + if (yych == 's') goto yy261; goto yy194; -yy253: - YYDEBUG(253, *YYCURSOR); +yy257: + YYDEBUG(257, *YYCURSOR); ++YYCURSOR; - YYDEBUG(254, *YYCURSOR); + YYDEBUG(258, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1366 "Zend/zend_language_scanner.l" { return T_IS_SMALLER_OR_EQUAL; } -#line 3678 "Zend/zend_language_scanner.c" -yy255: - YYDEBUG(255, *YYCURSOR); +#line 3700 "Zend/zend_language_scanner.c" +yy259: + YYDEBUG(259, *YYCURSOR); ++YYCURSOR; -yy256: - YYDEBUG(256, *YYCURSOR); +yy260: + YYDEBUG(260, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1362 "Zend/zend_language_scanner.l" { return T_IS_NOT_EQUAL; } -#line 3689 "Zend/zend_language_scanner.c" -yy257: - YYDEBUG(257, *YYCURSOR); +#line 3711 "Zend/zend_language_scanner.c" +yy261: + YYDEBUG(261, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy258; + if (yych == 'C') goto yy262; if (yych != 'c') goto yy194; -yy258: - YYDEBUG(258, *YYCURSOR); +yy262: + YYDEBUG(262, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy259; + if (yych == 'R') goto yy263; if (yych != 'r') goto yy194; -yy259: - YYDEBUG(259, *YYCURSOR); +yy263: + YYDEBUG(263, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy260; + if (yych == 'I') goto yy264; if (yych != 'i') goto yy194; -yy260: - YYDEBUG(260, *YYCURSOR); +yy264: + YYDEBUG(264, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'P') goto yy261; + if (yych == 'P') goto yy265; if (yych != 'p') goto yy194; -yy261: - YYDEBUG(261, *YYCURSOR); +yy265: + YYDEBUG(265, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy262; + if (yych == 'T') goto yy266; if (yych != 't') goto yy194; -yy262: - YYDEBUG(262, *YYCURSOR); +yy266: + YYDEBUG(266, *YYCURSOR); ++YYCURSOR; YYFILL(3); yych = *YYCURSOR; - YYDEBUG(263, *YYCURSOR); + YYDEBUG(267, *YYCURSOR); if (yych <= '\r') { if (yych <= 0x08) goto yy194; - if (yych <= '\n') goto yy262; + if (yych <= '\n') goto yy266; if (yych <= '\f') goto yy194; - goto yy262; + goto yy266; } else { if (yych <= ' ') { if (yych <= 0x1F) goto yy194; - goto yy262; + goto yy266; } else { if (yych == '>') goto yy206; goto yy194; } } -yy264: - YYDEBUG(264, *YYCURSOR); +yy268: + YYDEBUG(268, *YYCURSOR); ++YYCURSOR; - YYDEBUG(265, *YYCURSOR); + YYDEBUG(269, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1398 "Zend/zend_language_scanner.l" +#line 1406 "Zend/zend_language_scanner.l" { return T_SL_EQUAL; } -#line 3744 "Zend/zend_language_scanner.c" -yy266: - YYDEBUG(266, *YYCURSOR); +#line 3766 "Zend/zend_language_scanner.c" +yy270: + YYDEBUG(270, *YYCURSOR); ++YYCURSOR; YYFILL(2); yych = *YYCURSOR; - YYDEBUG(267, *YYCURSOR); + YYDEBUG(271, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy266; + goto yy270; } if (yych <= 'Z') { if (yych <= '&') { - if (yych == '"') goto yy271; + if (yych == '"') goto yy275; goto yy194; } else { - if (yych <= '\'') goto yy270; + if (yych <= '\'') goto yy274; if (yych <= '@') goto yy194; } } else { if (yych <= '`') { if (yych != '_') goto yy194; } else { - if (yych <= 'z') goto yy268; + if (yych <= 'z') goto yy272; if (yych <= '~') goto yy194; } } -yy268: - YYDEBUG(268, *YYCURSOR); +yy272: + YYDEBUG(272, *YYCURSOR); ++YYCURSOR; YYFILL(2); yych = *YYCURSOR; - YYDEBUG(269, *YYCURSOR); + YYDEBUG(273, *YYCURSOR); if (yych <= '@') { if (yych <= '\f') { - if (yych == '\n') goto yy275; + if (yych == '\n') goto yy279; goto yy194; } else { - if (yych <= '\r') goto yy277; + if (yych <= '\r') goto yy281; if (yych <= '/') goto yy194; - if (yych <= '9') goto yy268; + if (yych <= '9') goto yy272; goto yy194; } } else { if (yych <= '_') { - if (yych <= 'Z') goto yy268; + if (yych <= 'Z') goto yy272; if (yych <= '^') goto yy194; - goto yy268; + goto yy272; } else { if (yych <= '`') goto yy194; - if (yych <= 'z') goto yy268; + if (yych <= 'z') goto yy272; if (yych <= '~') goto yy194; - goto yy268; + goto yy272; } } -yy270: - YYDEBUG(270, *YYCURSOR); +yy274: + YYDEBUG(274, *YYCURSOR); yych = *++YYCURSOR; if (yych == '\'') goto yy194; - if (yych <= '/') goto yy279; + if (yych <= '/') goto yy283; if (yych <= '9') goto yy194; - goto yy279; -yy271: - YYDEBUG(271, *YYCURSOR); + goto yy283; +yy275: + YYDEBUG(275, *YYCURSOR); yych = *++YYCURSOR; if (yych == '"') goto yy194; - if (yych <= '/') goto yy273; + if (yych <= '/') goto yy277; if (yych <= '9') goto yy194; - goto yy273; -yy272: - YYDEBUG(272, *YYCURSOR); + goto yy277; +yy276: + YYDEBUG(276, *YYCURSOR); ++YYCURSOR; YYFILL(3); yych = *YYCURSOR; -yy273: - YYDEBUG(273, *YYCURSOR); +yy277: + YYDEBUG(277, *YYCURSOR); if (yych <= 'Z') { if (yych <= '/') { if (yych != '"') goto yy194; } else { - if (yych <= '9') goto yy272; + if (yych <= '9') goto yy276; if (yych <= '@') goto yy194; - goto yy272; + goto yy276; } } else { if (yych <= '`') { - if (yych == '_') goto yy272; + if (yych == '_') goto yy276; goto yy194; } else { - if (yych <= 'z') goto yy272; + if (yych <= 'z') goto yy276; if (yych <= '~') goto yy194; - goto yy272; + goto yy276; } } -yy274: - YYDEBUG(274, *YYCURSOR); +yy278: + YYDEBUG(278, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '\n') goto yy275; - if (yych == '\r') goto yy277; + if (yych == '\n') goto yy279; + if (yych == '\r') goto yy281; goto yy194; -yy275: - YYDEBUG(275, *YYCURSOR); +yy279: + YYDEBUG(279, *YYCURSOR); ++YYCURSOR; -yy276: - YYDEBUG(276, *YYCURSOR); +yy280: + YYDEBUG(280, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2049 "Zend/zend_language_scanner.l" +#line 2057 "Zend/zend_language_scanner.l" { char *s; int bprefix = (yytext[0] != '<') ? 1 : 0; @@ -3892,255 +3914,255 @@ yy276: return T_START_HEREDOC; } -#line 3896 "Zend/zend_language_scanner.c" -yy277: - YYDEBUG(277, *YYCURSOR); +#line 3918 "Zend/zend_language_scanner.c" +yy281: + YYDEBUG(281, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '\n') goto yy275; - goto yy276; -yy278: - YYDEBUG(278, *YYCURSOR); + if (yych == '\n') goto yy279; + goto yy280; +yy282: + YYDEBUG(282, *YYCURSOR); ++YYCURSOR; YYFILL(3); yych = *YYCURSOR; -yy279: - YYDEBUG(279, *YYCURSOR); +yy283: + YYDEBUG(283, *YYCURSOR); if (yych <= 'Z') { if (yych <= '/') { - if (yych == '\'') goto yy274; + if (yych == '\'') goto yy278; goto yy194; } else { - if (yych <= '9') goto yy278; + if (yych <= '9') goto yy282; if (yych <= '@') goto yy194; - goto yy278; + goto yy282; } } else { if (yych <= '`') { - if (yych == '_') goto yy278; + if (yych == '_') goto yy282; goto yy194; } else { - if (yych <= 'z') goto yy278; + if (yych <= 'z') goto yy282; if (yych <= '~') goto yy194; - goto yy278; + goto yy282; } } -yy280: - YYDEBUG(280, *YYCURSOR); +yy284: + YYDEBUG(284, *YYCURSOR); yych = *++YYCURSOR; - if (yych != '=') goto yy256; - YYDEBUG(281, *YYCURSOR); + if (yych != '=') goto yy260; + YYDEBUG(285, *YYCURSOR); ++YYCURSOR; - YYDEBUG(282, *YYCURSOR); + YYDEBUG(286, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1354 "Zend/zend_language_scanner.l" { return T_IS_NOT_IDENTICAL; } -#line 3940 "Zend/zend_language_scanner.c" -yy283: - YYDEBUG(283, *YYCURSOR); +#line 3962 "Zend/zend_language_scanner.c" +yy287: + YYDEBUG(287, *YYCURSOR); ++YYCURSOR; - YYDEBUG(284, *YYCURSOR); + YYDEBUG(288, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1374 "Zend/zend_language_scanner.l" { return T_PLUS_EQUAL; } -#line 3950 "Zend/zend_language_scanner.c" -yy285: - YYDEBUG(285, *YYCURSOR); +#line 3972 "Zend/zend_language_scanner.c" +yy289: + YYDEBUG(289, *YYCURSOR); ++YYCURSOR; - YYDEBUG(286, *YYCURSOR); + YYDEBUG(290, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1342 "Zend/zend_language_scanner.l" { return T_INC; } -#line 3960 "Zend/zend_language_scanner.c" -yy287: - YYDEBUG(287, *YYCURSOR); +#line 3982 "Zend/zend_language_scanner.c" +yy291: + YYDEBUG(291, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy288; + if (yych == 'S') goto yy292; if (yych != 's') goto yy187; -yy288: - YYDEBUG(288, *YYCURSOR); +yy292: + YYDEBUG(292, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy289; + if (yych == 'T') goto yy293; if (yych != 't') goto yy187; -yy289: - YYDEBUG(289, *YYCURSOR); +yy293: + YYDEBUG(293, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(290, *YYCURSOR); + YYDEBUG(294, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1330 "Zend/zend_language_scanner.l" { return T_LIST; } -#line 3983 "Zend/zend_language_scanner.c" -yy291: - YYDEBUG(291, *YYCURSOR); +#line 4005 "Zend/zend_language_scanner.c" +yy295: + YYDEBUG(295, *YYCURSOR); ++YYCURSOR; - if ((yych = *YYCURSOR) == '=') goto yy295; - YYDEBUG(292, *YYCURSOR); + if ((yych = *YYCURSOR) == '=') goto yy299; + YYDEBUG(296, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1358 "Zend/zend_language_scanner.l" { return T_IS_EQUAL; } -#line 3994 "Zend/zend_language_scanner.c" -yy293: - YYDEBUG(293, *YYCURSOR); +#line 4016 "Zend/zend_language_scanner.c" +yy297: + YYDEBUG(297, *YYCURSOR); ++YYCURSOR; - YYDEBUG(294, *YYCURSOR); + YYDEBUG(298, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1326 "Zend/zend_language_scanner.l" { return T_DOUBLE_ARROW; } -#line 4004 "Zend/zend_language_scanner.c" -yy295: - YYDEBUG(295, *YYCURSOR); +#line 4026 "Zend/zend_language_scanner.c" +yy299: + YYDEBUG(299, *YYCURSOR); ++YYCURSOR; - YYDEBUG(296, *YYCURSOR); + YYDEBUG(300, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1350 "Zend/zend_language_scanner.l" { return T_IS_IDENTICAL; } -#line 4014 "Zend/zend_language_scanner.c" -yy297: - YYDEBUG(297, *YYCURSOR); +#line 4036 "Zend/zend_language_scanner.c" +yy301: + YYDEBUG(301, *YYCURSOR); yych = *++YYCURSOR; YYDEBUG(-1, yych); switch (yych) { case 'C': - case 'c': goto yy299; + case 'c': goto yy303; case 'D': - case 'd': goto yy304; + case 'd': goto yy308; case 'F': - case 'f': goto yy301; + case 'f': goto yy305; case 'H': - case 'h': goto yy298; + case 'h': goto yy302; case 'L': - case 'l': goto yy303; + case 'l': goto yy307; case 'M': - case 'm': goto yy302; + case 'm': goto yy306; case 'N': - case 'n': goto yy305; + case 'n': goto yy309; case 'T': - case 't': goto yy300; + case 't': goto yy304; default: goto yy187; } -yy298: - YYDEBUG(298, *YYCURSOR); +yy302: + YYDEBUG(302, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy366; - if (yych == 'a') goto yy366; + if (yych == 'A') goto yy370; + if (yych == 'a') goto yy370; goto yy187; -yy299: - YYDEBUG(299, *YYCURSOR); +yy303: + YYDEBUG(303, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy359; - if (yych == 'l') goto yy359; + if (yych == 'L') goto yy363; + if (yych == 'l') goto yy363; goto yy187; -yy300: - YYDEBUG(300, *YYCURSOR); +yy304: + YYDEBUG(304, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy352; - if (yych == 'r') goto yy352; + if (yych == 'R') goto yy356; + if (yych == 'r') goto yy356; goto yy187; -yy301: - YYDEBUG(301, *YYCURSOR); +yy305: + YYDEBUG(305, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'U') { - if (yych == 'I') goto yy336; + if (yych == 'I') goto yy340; if (yych <= 'T') goto yy187; - goto yy337; + goto yy341; } else { if (yych <= 'i') { if (yych <= 'h') goto yy187; - goto yy336; + goto yy340; } else { - if (yych == 'u') goto yy337; + if (yych == 'u') goto yy341; goto yy187; } } -yy302: - YYDEBUG(302, *YYCURSOR); +yy306: + YYDEBUG(306, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy328; - if (yych == 'e') goto yy328; + if (yych == 'E') goto yy332; + if (yych == 'e') goto yy332; goto yy187; -yy303: - YYDEBUG(303, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'I') goto yy322; - if (yych == 'i') goto yy322; - goto yy187; -yy304: - YYDEBUG(304, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'I') goto yy317; - if (yych == 'i') goto yy317; - goto yy187; -yy305: - YYDEBUG(305, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'A') goto yy306; - if (yych != 'a') goto yy187; -yy306: - YYDEBUG(306, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'M') goto yy307; - if (yych != 'm') goto yy187; yy307: YYDEBUG(307, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy308; - if (yych != 'e') goto yy187; + if (yych == 'I') goto yy326; + if (yych == 'i') goto yy326; + goto yy187; yy308: YYDEBUG(308, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy309; - if (yych != 's') goto yy187; + if (yych == 'I') goto yy321; + if (yych == 'i') goto yy321; + goto yy187; yy309: YYDEBUG(309, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'P') goto yy310; - if (yych != 'p') goto yy187; + if (yych == 'A') goto yy310; + if (yych != 'a') goto yy187; yy310: YYDEBUG(310, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy311; - if (yych != 'a') goto yy187; + if (yych == 'M') goto yy311; + if (yych != 'm') goto yy187; yy311: YYDEBUG(311, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy312; - if (yych != 'c') goto yy187; + if (yych == 'E') goto yy312; + if (yych != 'e') goto yy187; yy312: YYDEBUG(312, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy313; - if (yych != 'e') goto yy187; + if (yych == 'S') goto yy313; + if (yych != 's') goto yy187; yy313: YYDEBUG(313, *YYCURSOR); yych = *++YYCURSOR; - if (yych != '_') goto yy187; + if (yych == 'P') goto yy314; + if (yych != 'p') goto yy187; +yy314: YYDEBUG(314, *YYCURSOR); yych = *++YYCURSOR; - if (yych != '_') goto yy187; + if (yych == 'A') goto yy315; + if (yych != 'a') goto yy187; +yy315: YYDEBUG(315, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy316; + if (yych != 'c') goto yy187; +yy316: + YYDEBUG(316, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy317; + if (yych != 'e') goto yy187; +yy317: + YYDEBUG(317, *YYCURSOR); + yych = *++YYCURSOR; + if (yych != '_') goto yy187; + YYDEBUG(318, *YYCURSOR); + yych = *++YYCURSOR; + if (yych != '_') goto yy187; + YYDEBUG(319, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(316, *YYCURSOR); + YYDEBUG(320, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1668 "Zend/zend_language_scanner.l" +#line 1676 "Zend/zend_language_scanner.l" { if (CG(current_namespace)) { *zendlval = *CG(current_namespace); @@ -4150,27 +4172,27 @@ yy313: } return T_NS_C; } -#line 4154 "Zend/zend_language_scanner.c" -yy317: - YYDEBUG(317, *YYCURSOR); +#line 4176 "Zend/zend_language_scanner.c" +yy321: + YYDEBUG(321, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy318; + if (yych == 'R') goto yy322; if (yych != 'r') goto yy187; -yy318: - YYDEBUG(318, *YYCURSOR); +yy322: + YYDEBUG(322, *YYCURSOR); yych = *++YYCURSOR; if (yych != '_') goto yy187; - YYDEBUG(319, *YYCURSOR); + YYDEBUG(323, *YYCURSOR); yych = *++YYCURSOR; if (yych != '_') goto yy187; - YYDEBUG(320, *YYCURSOR); + YYDEBUG(324, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(321, *YYCURSOR); + YYDEBUG(325, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1643 "Zend/zend_language_scanner.l" +#line 1651 "Zend/zend_language_scanner.l" { char *filename = zend_get_compiled_filename(TSRMLS_C); const size_t filename_len = strlen(filename); @@ -4195,72 +4217,72 @@ yy318: ZVAL_STRING(zendlval, dirname, 0); return T_DIR; } -#line 4199 "Zend/zend_language_scanner.c" -yy322: - YYDEBUG(322, *YYCURSOR); +#line 4221 "Zend/zend_language_scanner.c" +yy326: + YYDEBUG(326, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy323; + if (yych == 'N') goto yy327; if (yych != 'n') goto yy187; -yy323: - YYDEBUG(323, *YYCURSOR); +yy327: + YYDEBUG(327, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy324; + if (yych == 'E') goto yy328; if (yych != 'e') goto yy187; -yy324: - YYDEBUG(324, *YYCURSOR); +yy328: + YYDEBUG(328, *YYCURSOR); yych = *++YYCURSOR; if (yych != '_') goto yy187; - YYDEBUG(325, *YYCURSOR); + YYDEBUG(329, *YYCURSOR); yych = *++YYCURSOR; if (yych != '_') goto yy187; - YYDEBUG(326, *YYCURSOR); + YYDEBUG(330, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(327, *YYCURSOR); + YYDEBUG(331, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1628 "Zend/zend_language_scanner.l" +#line 1636 "Zend/zend_language_scanner.l" { ZVAL_LONG(zendlval, CG(zend_lineno)); return T_LINE; } -#line 4229 "Zend/zend_language_scanner.c" -yy328: - YYDEBUG(328, *YYCURSOR); +#line 4251 "Zend/zend_language_scanner.c" +yy332: + YYDEBUG(332, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy329; + if (yych == 'T') goto yy333; if (yych != 't') goto yy187; -yy329: - YYDEBUG(329, *YYCURSOR); +yy333: + YYDEBUG(333, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy330; + if (yych == 'H') goto yy334; if (yych != 'h') goto yy187; -yy330: - YYDEBUG(330, *YYCURSOR); +yy334: + YYDEBUG(334, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy331; + if (yych == 'O') goto yy335; if (yych != 'o') goto yy187; -yy331: - YYDEBUG(331, *YYCURSOR); +yy335: + YYDEBUG(335, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'D') goto yy332; + if (yych == 'D') goto yy336; if (yych != 'd') goto yy187; -yy332: - YYDEBUG(332, *YYCURSOR); +yy336: + YYDEBUG(336, *YYCURSOR); yych = *++YYCURSOR; if (yych != '_') goto yy187; - YYDEBUG(333, *YYCURSOR); + YYDEBUG(337, *YYCURSOR); yych = *++YYCURSOR; if (yych != '_') goto yy187; - YYDEBUG(334, *YYCURSOR); + YYDEBUG(338, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(335, *YYCURSOR); + YYDEBUG(339, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1615 "Zend/zend_language_scanner.l" +#line 1623 "Zend/zend_language_scanner.l" { const char *class_name = CG(active_class_entry) ? CG(active_class_entry)->name : NULL; const char *func_name = CG(active_op_array)? CG(active_op_array)->function_name : NULL; @@ -4273,58 +4295,58 @@ yy332: zendlval->type = IS_STRING; return T_METHOD_C; } -#line 4277 "Zend/zend_language_scanner.c" -yy336: - YYDEBUG(336, *YYCURSOR); +#line 4299 "Zend/zend_language_scanner.c" +yy340: + YYDEBUG(340, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy347; - if (yych == 'l') goto yy347; + if (yych == 'L') goto yy351; + if (yych == 'l') goto yy351; goto yy187; -yy337: - YYDEBUG(337, *YYCURSOR); +yy341: + YYDEBUG(341, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy338; + if (yych == 'N') goto yy342; if (yych != 'n') goto yy187; -yy338: - YYDEBUG(338, *YYCURSOR); +yy342: + YYDEBUG(342, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy339; + if (yych == 'C') goto yy343; if (yych != 'c') goto yy187; -yy339: - YYDEBUG(339, *YYCURSOR); +yy343: + YYDEBUG(343, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy340; + if (yych == 'T') goto yy344; if (yych != 't') goto yy187; -yy340: - YYDEBUG(340, *YYCURSOR); +yy344: + YYDEBUG(344, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy341; + if (yych == 'I') goto yy345; if (yych != 'i') goto yy187; -yy341: - YYDEBUG(341, *YYCURSOR); +yy345: + YYDEBUG(345, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy342; + if (yych == 'O') goto yy346; if (yych != 'o') goto yy187; -yy342: - YYDEBUG(342, *YYCURSOR); +yy346: + YYDEBUG(346, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy343; + if (yych == 'N') goto yy347; if (yych != 'n') goto yy187; -yy343: - YYDEBUG(343, *YYCURSOR); +yy347: + YYDEBUG(347, *YYCURSOR); yych = *++YYCURSOR; if (yych != '_') goto yy187; - YYDEBUG(344, *YYCURSOR); + YYDEBUG(348, *YYCURSOR); yych = *++YYCURSOR; if (yych != '_') goto yy187; - YYDEBUG(345, *YYCURSOR); + YYDEBUG(349, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(346, *YYCURSOR); + YYDEBUG(350, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1605 "Zend/zend_language_scanner.l" +#line 1613 "Zend/zend_language_scanner.l" { zend_op_array *op_array = CG(active_op_array); if (op_array && op_array->function_name) { @@ -4334,27 +4356,27 @@ yy343: } return T_FUNC_C; } -#line 4338 "Zend/zend_language_scanner.c" -yy347: - YYDEBUG(347, *YYCURSOR); +#line 4360 "Zend/zend_language_scanner.c" +yy351: + YYDEBUG(351, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy348; + if (yych == 'E') goto yy352; if (yych != 'e') goto yy187; -yy348: - YYDEBUG(348, *YYCURSOR); +yy352: + YYDEBUG(352, *YYCURSOR); yych = *++YYCURSOR; if (yych != '_') goto yy187; - YYDEBUG(349, *YYCURSOR); + YYDEBUG(353, *YYCURSOR); yych = *++YYCURSOR; if (yych != '_') goto yy187; - YYDEBUG(350, *YYCURSOR); + YYDEBUG(354, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(351, *YYCURSOR); + YYDEBUG(355, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1633 "Zend/zend_language_scanner.l" +#line 1641 "Zend/zend_language_scanner.l" { char *filename = zend_get_compiled_filename(TSRMLS_C); @@ -4364,37 +4386,37 @@ yy348: ZVAL_STRING(zendlval, filename, 1); return T_FILE; } -#line 4368 "Zend/zend_language_scanner.c" -yy352: - YYDEBUG(352, *YYCURSOR); +#line 4390 "Zend/zend_language_scanner.c" +yy356: + YYDEBUG(356, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy353; + if (yych == 'A') goto yy357; if (yych != 'a') goto yy187; -yy353: - YYDEBUG(353, *YYCURSOR); +yy357: + YYDEBUG(357, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy354; + if (yych == 'I') goto yy358; if (yych != 'i') goto yy187; -yy354: - YYDEBUG(354, *YYCURSOR); +yy358: + YYDEBUG(358, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy355; + if (yych == 'T') goto yy359; if (yych != 't') goto yy187; -yy355: - YYDEBUG(355, *YYCURSOR); +yy359: + YYDEBUG(359, *YYCURSOR); yych = *++YYCURSOR; if (yych != '_') goto yy187; - YYDEBUG(356, *YYCURSOR); + YYDEBUG(360, *YYCURSOR); yych = *++YYCURSOR; if (yych != '_') goto yy187; - YYDEBUG(357, *YYCURSOR); + YYDEBUG(361, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(358, *YYCURSOR); + YYDEBUG(362, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1595 "Zend/zend_language_scanner.l" +#line 1603 "Zend/zend_language_scanner.l" { zend_class_entry *ce = CG(active_class_entry); if (ce && ce->name && ZEND_ACC_TRAIT == (ce->ce_flags & ZEND_ACC_TRAIT)) { @@ -4404,37 +4426,37 @@ yy355: } return T_TRAIT_C; } -#line 4408 "Zend/zend_language_scanner.c" -yy359: - YYDEBUG(359, *YYCURSOR); +#line 4430 "Zend/zend_language_scanner.c" +yy363: + YYDEBUG(363, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy360; + if (yych == 'A') goto yy364; if (yych != 'a') goto yy187; -yy360: - YYDEBUG(360, *YYCURSOR); +yy364: + YYDEBUG(364, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy361; + if (yych == 'S') goto yy365; if (yych != 's') goto yy187; -yy361: - YYDEBUG(361, *YYCURSOR); +yy365: + YYDEBUG(365, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy362; + if (yych == 'S') goto yy366; if (yych != 's') goto yy187; -yy362: - YYDEBUG(362, *YYCURSOR); +yy366: + YYDEBUG(366, *YYCURSOR); yych = *++YYCURSOR; if (yych != '_') goto yy187; - YYDEBUG(363, *YYCURSOR); + YYDEBUG(367, *YYCURSOR); yych = *++YYCURSOR; if (yych != '_') goto yy187; - YYDEBUG(364, *YYCURSOR); + YYDEBUG(368, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(365, *YYCURSOR); + YYDEBUG(369, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1577 "Zend/zend_language_scanner.l" +#line 1585 "Zend/zend_language_scanner.l" { zend_class_entry *ce = CG(active_class_entry); if (ce && ZEND_ACC_TRAIT == (ce->ce_flags & ZEND_ACC_TRAIT)) { @@ -4452,84 +4474,60 @@ yy362: } return T_CLASS_C; } -#line 4456 "Zend/zend_language_scanner.c" -yy366: - YYDEBUG(366, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'L') goto yy367; - if (yych != 'l') goto yy187; -yy367: - YYDEBUG(367, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'T') goto yy368; - if (yych != 't') goto yy187; -yy368: - YYDEBUG(368, *YYCURSOR); - yych = *++YYCURSOR; - if (yych != '_') goto yy187; - YYDEBUG(369, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'C') goto yy370; - if (yych != 'c') goto yy187; +#line 4478 "Zend/zend_language_scanner.c" yy370: YYDEBUG(370, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy371; - if (yych != 'o') goto yy187; + if (yych == 'L') goto yy371; + if (yych != 'l') goto yy187; yy371: YYDEBUG(371, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'M') goto yy372; - if (yych != 'm') goto yy187; + if (yych == 'T') goto yy372; + if (yych != 't') goto yy187; yy372: YYDEBUG(372, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'P') goto yy373; - if (yych != 'p') goto yy187; -yy373: + if (yych != '_') goto yy187; YYDEBUG(373, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy374; - if (yych != 'i') goto yy187; + if (yych == 'C') goto yy374; + if (yych != 'c') goto yy187; yy374: YYDEBUG(374, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy375; - if (yych != 'l') goto yy187; + if (yych == 'O') goto yy375; + if (yych != 'o') goto yy187; yy375: YYDEBUG(375, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy376; - if (yych != 'e') goto yy187; + if (yych == 'M') goto yy376; + if (yych != 'm') goto yy187; yy376: YYDEBUG(376, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy377; - if (yych != 'r') goto yy187; + if (yych == 'P') goto yy377; + if (yych != 'p') goto yy187; yy377: YYDEBUG(377, *YYCURSOR); - ++YYCURSOR; - if (yybm[0+(yych = *YYCURSOR)] & 4) { - goto yy186; - } + yych = *++YYCURSOR; + if (yych == 'I') goto yy378; + if (yych != 'i') goto yy187; +yy378: YYDEBUG(378, *YYCURSOR); - yyleng = YYCURSOR - SCNG(yy_text); -#line 1294 "Zend/zend_language_scanner.l" - { - return T_HALT_COMPILER; -} -#line 4522 "Zend/zend_language_scanner.c" + yych = *++YYCURSOR; + if (yych == 'L') goto yy379; + if (yych != 'l') goto yy187; yy379: YYDEBUG(379, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy383; - if (yych == 's') goto yy383; - goto yy187; + if (yych == 'E') goto yy380; + if (yych != 'e') goto yy187; yy380: YYDEBUG(380, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy381; - if (yych != 'e') goto yy187; + if (yych == 'R') goto yy381; + if (yych != 'r') goto yy187; yy381: YYDEBUG(381, *YYCURSOR); ++YYCURSOR; @@ -4538,21 +4536,22 @@ yy381: } YYDEBUG(382, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1274 "Zend/zend_language_scanner.l" +#line 1294 "Zend/zend_language_scanner.l" { - return T_USE; + return T_HALT_COMPILER; } -#line 4546 "Zend/zend_language_scanner.c" +#line 4544 "Zend/zend_language_scanner.c" yy383: YYDEBUG(383, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy384; - if (yych != 'e') goto yy187; + if (yych == 'S') goto yy387; + if (yych == 's') goto yy387; + goto yy187; yy384: YYDEBUG(384, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy385; - if (yych != 't') goto yy187; + if (yych == 'E') goto yy385; + if (yych != 'e') goto yy187; yy385: YYDEBUG(385, *YYCURSOR); ++YYCURSOR; @@ -4561,2639 +4560,2662 @@ yy385: } YYDEBUG(386, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1322 "Zend/zend_language_scanner.l" +#line 1274 "Zend/zend_language_scanner.l" { - return T_UNSET; + return T_USE; } -#line 4569 "Zend/zend_language_scanner.c" +#line 4568 "Zend/zend_language_scanner.c" yy387: YYDEBUG(387, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy388; + if (yych != 'e') goto yy187; +yy388: + YYDEBUG(388, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy389; + if (yych != 't') goto yy187; +yy389: + YYDEBUG(389, *YYCURSOR); + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 4) { + goto yy186; + } + YYDEBUG(390, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1322 "Zend/zend_language_scanner.l" + { + return T_UNSET; +} +#line 4591 "Zend/zend_language_scanner.c" +yy391: + YYDEBUG(391, *YYCURSOR); ++YYCURSOR; YYFILL(7); yych = *YYCURSOR; -yy388: - YYDEBUG(388, *YYCURSOR); +yy392: + YYDEBUG(392, *YYCURSOR); if (yych <= 'S') { if (yych <= 'D') { if (yych <= ' ') { - if (yych == '\t') goto yy387; + if (yych == '\t') goto yy391; if (yych <= 0x1F) goto yy194; - goto yy387; + goto yy391; } else { if (yych <= 'A') { if (yych <= '@') goto yy194; - goto yy392; + goto yy396; } else { - if (yych <= 'B') goto yy390; + if (yych <= 'B') goto yy394; if (yych <= 'C') goto yy194; - goto yy395; + goto yy399; } } } else { if (yych <= 'I') { - if (yych == 'F') goto yy396; + if (yych == 'F') goto yy400; if (yych <= 'H') goto yy194; - goto yy397; + goto yy401; } else { if (yych <= 'O') { if (yych <= 'N') goto yy194; - goto yy391; + goto yy395; } else { if (yych <= 'Q') goto yy194; - if (yych <= 'R') goto yy394; - goto yy393; + if (yych <= 'R') goto yy398; + goto yy397; } } } } else { if (yych <= 'f') { if (yych <= 'a') { - if (yych == 'U') goto yy389; + if (yych == 'U') goto yy393; if (yych <= '`') goto yy194; - goto yy392; + goto yy396; } else { if (yych <= 'c') { - if (yych <= 'b') goto yy390; + if (yych <= 'b') goto yy394; goto yy194; } else { - if (yych <= 'd') goto yy395; + if (yych <= 'd') goto yy399; if (yych <= 'e') goto yy194; - goto yy396; + goto yy400; } } } else { if (yych <= 'q') { if (yych <= 'i') { if (yych <= 'h') goto yy194; - goto yy397; + goto yy401; } else { - if (yych == 'o') goto yy391; + if (yych == 'o') goto yy395; goto yy194; } } else { if (yych <= 's') { - if (yych <= 'r') goto yy394; - goto yy393; + if (yych <= 'r') goto yy398; + goto yy397; } else { if (yych != 'u') goto yy194; } } } } -yy389: - YYDEBUG(389, *YYCURSOR); +yy393: + YYDEBUG(393, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy456; - if (yych == 'n') goto yy456; + if (yych == 'N') goto yy460; + if (yych == 'n') goto yy460; goto yy194; -yy390: - YYDEBUG(390, *YYCURSOR); +yy394: + YYDEBUG(394, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'O') { - if (yych == 'I') goto yy443; + if (yych == 'I') goto yy447; if (yych <= 'N') goto yy194; - goto yy444; + goto yy448; } else { if (yych <= 'i') { if (yych <= 'h') goto yy194; - goto yy443; + goto yy447; } else { - if (yych == 'o') goto yy444; + if (yych == 'o') goto yy448; goto yy194; } } -yy391: - YYDEBUG(391, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'B') goto yy435; - if (yych == 'b') goto yy435; - goto yy194; -yy392: - YYDEBUG(392, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'R') goto yy428; - if (yych == 'r') goto yy428; - goto yy194; -yy393: - YYDEBUG(393, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'T') goto yy420; - if (yych == 't') goto yy420; - goto yy194; -yy394: - YYDEBUG(394, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy418; - if (yych == 'e') goto yy418; - goto yy194; yy395: YYDEBUG(395, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy414; - if (yych == 'o') goto yy414; + if (yych == 'B') goto yy439; + if (yych == 'b') goto yy439; goto yy194; yy396: YYDEBUG(396, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy407; - if (yych == 'l') goto yy407; + if (yych == 'R') goto yy432; + if (yych == 'r') goto yy432; goto yy194; yy397: YYDEBUG(397, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy398; - if (yych != 'n') goto yy194; + if (yych == 'T') goto yy424; + if (yych == 't') goto yy424; + goto yy194; yy398: YYDEBUG(398, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy399; - if (yych != 't') goto yy194; + if (yych == 'E') goto yy422; + if (yych == 'e') goto yy422; + goto yy194; yy399: YYDEBUG(399, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy400; - if (yych != 'e') goto yy402; + if (yych == 'O') goto yy418; + if (yych == 'o') goto yy418; + goto yy194; yy400: YYDEBUG(400, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'G') goto yy405; - if (yych == 'g') goto yy405; + if (yych == 'L') goto yy411; + if (yych == 'l') goto yy411; goto yy194; yy401: YYDEBUG(401, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'N') goto yy402; + if (yych != 'n') goto yy194; +yy402: + YYDEBUG(402, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy403; + if (yych != 't') goto yy194; +yy403: + YYDEBUG(403, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy404; + if (yych != 'e') goto yy406; +yy404: + YYDEBUG(404, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'G') goto yy409; + if (yych == 'g') goto yy409; + goto yy194; +yy405: + YYDEBUG(405, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy402: - YYDEBUG(402, *YYCURSOR); +yy406: + YYDEBUG(406, *YYCURSOR); if (yych <= 0x1F) { - if (yych == '\t') goto yy401; + if (yych == '\t') goto yy405; goto yy194; } else { - if (yych <= ' ') goto yy401; + if (yych <= ' ') goto yy405; if (yych != ')') goto yy194; } - YYDEBUG(403, *YYCURSOR); + YYDEBUG(407, *YYCURSOR); ++YYCURSOR; - YYDEBUG(404, *YYCURSOR); + YYDEBUG(408, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1222 "Zend/zend_language_scanner.l" { return T_INT_CAST; } -#line 4745 "Zend/zend_language_scanner.c" -yy405: - YYDEBUG(405, *YYCURSOR); +#line 4767 "Zend/zend_language_scanner.c" +yy409: + YYDEBUG(409, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy406; + if (yych == 'E') goto yy410; if (yych != 'e') goto yy194; -yy406: - YYDEBUG(406, *YYCURSOR); +yy410: + YYDEBUG(410, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy401; - if (yych == 'r') goto yy401; + if (yych == 'R') goto yy405; + if (yych == 'r') goto yy405; goto yy194; -yy407: - YYDEBUG(407, *YYCURSOR); +yy411: + YYDEBUG(411, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy408; + if (yych == 'O') goto yy412; if (yych != 'o') goto yy194; -yy408: - YYDEBUG(408, *YYCURSOR); +yy412: + YYDEBUG(412, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy409; + if (yych == 'A') goto yy413; if (yych != 'a') goto yy194; -yy409: - YYDEBUG(409, *YYCURSOR); +yy413: + YYDEBUG(413, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy410; + if (yych == 'T') goto yy414; if (yych != 't') goto yy194; -yy410: - YYDEBUG(410, *YYCURSOR); +yy414: + YYDEBUG(414, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(411, *YYCURSOR); + YYDEBUG(415, *YYCURSOR); if (yych <= 0x1F) { - if (yych == '\t') goto yy410; + if (yych == '\t') goto yy414; goto yy194; } else { - if (yych <= ' ') goto yy410; + if (yych <= ' ') goto yy414; if (yych != ')') goto yy194; } - YYDEBUG(412, *YYCURSOR); + YYDEBUG(416, *YYCURSOR); ++YYCURSOR; - YYDEBUG(413, *YYCURSOR); + YYDEBUG(417, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1226 "Zend/zend_language_scanner.l" { return T_DOUBLE_CAST; } -#line 4793 "Zend/zend_language_scanner.c" -yy414: - YYDEBUG(414, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'U') goto yy415; - if (yych != 'u') goto yy194; -yy415: - YYDEBUG(415, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'B') goto yy416; - if (yych != 'b') goto yy194; -yy416: - YYDEBUG(416, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'L') goto yy417; - if (yych != 'l') goto yy194; -yy417: - YYDEBUG(417, *YYCURSOR); - yych = *++YYCURSOR; - if (yych == 'E') goto yy410; - if (yych == 'e') goto yy410; - goto yy194; +#line 4815 "Zend/zend_language_scanner.c" yy418: YYDEBUG(418, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy419; - if (yych != 'a') goto yy194; + if (yych == 'U') goto yy419; + if (yych != 'u') goto yy194; yy419: YYDEBUG(419, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy410; - if (yych == 'l') goto yy410; - goto yy194; + if (yych == 'B') goto yy420; + if (yych != 'b') goto yy194; yy420: YYDEBUG(420, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy421; - if (yych != 'r') goto yy194; + if (yych == 'L') goto yy421; + if (yych != 'l') goto yy194; yy421: YYDEBUG(421, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy422; - if (yych != 'i') goto yy194; + if (yych == 'E') goto yy414; + if (yych == 'e') goto yy414; + goto yy194; yy422: YYDEBUG(422, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy423; - if (yych != 'n') goto yy194; + if (yych == 'A') goto yy423; + if (yych != 'a') goto yy194; yy423: YYDEBUG(423, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'G') goto yy424; - if (yych != 'g') goto yy194; + if (yych == 'L') goto yy414; + if (yych == 'l') goto yy414; + goto yy194; yy424: YYDEBUG(424, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy425; + if (yych != 'r') goto yy194; +yy425: + YYDEBUG(425, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'I') goto yy426; + if (yych != 'i') goto yy194; +yy426: + YYDEBUG(426, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'N') goto yy427; + if (yych != 'n') goto yy194; +yy427: + YYDEBUG(427, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'G') goto yy428; + if (yych != 'g') goto yy194; +yy428: + YYDEBUG(428, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(425, *YYCURSOR); + YYDEBUG(429, *YYCURSOR); if (yych <= 0x1F) { - if (yych == '\t') goto yy424; + if (yych == '\t') goto yy428; goto yy194; } else { - if (yych <= ' ') goto yy424; + if (yych <= ' ') goto yy428; if (yych != ')') goto yy194; } - YYDEBUG(426, *YYCURSOR); + YYDEBUG(430, *YYCURSOR); ++YYCURSOR; - YYDEBUG(427, *YYCURSOR); + YYDEBUG(431, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1230 "Zend/zend_language_scanner.l" { return T_STRING_CAST; } -#line 4867 "Zend/zend_language_scanner.c" -yy428: - YYDEBUG(428, *YYCURSOR); +#line 4889 "Zend/zend_language_scanner.c" +yy432: + YYDEBUG(432, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy429; + if (yych == 'R') goto yy433; if (yych != 'r') goto yy194; -yy429: - YYDEBUG(429, *YYCURSOR); +yy433: + YYDEBUG(433, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy430; + if (yych == 'A') goto yy434; if (yych != 'a') goto yy194; -yy430: - YYDEBUG(430, *YYCURSOR); +yy434: + YYDEBUG(434, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'Y') goto yy431; + if (yych == 'Y') goto yy435; if (yych != 'y') goto yy194; -yy431: - YYDEBUG(431, *YYCURSOR); +yy435: + YYDEBUG(435, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(432, *YYCURSOR); + YYDEBUG(436, *YYCURSOR); if (yych <= 0x1F) { - if (yych == '\t') goto yy431; + if (yych == '\t') goto yy435; goto yy194; } else { - if (yych <= ' ') goto yy431; + if (yych <= ' ') goto yy435; if (yych != ')') goto yy194; } - YYDEBUG(433, *YYCURSOR); + YYDEBUG(437, *YYCURSOR); ++YYCURSOR; - YYDEBUG(434, *YYCURSOR); + YYDEBUG(438, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1234 "Zend/zend_language_scanner.l" { return T_ARRAY_CAST; } -#line 4904 "Zend/zend_language_scanner.c" -yy435: - YYDEBUG(435, *YYCURSOR); +#line 4926 "Zend/zend_language_scanner.c" +yy439: + YYDEBUG(439, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'J') goto yy436; + if (yych == 'J') goto yy440; if (yych != 'j') goto yy194; -yy436: - YYDEBUG(436, *YYCURSOR); +yy440: + YYDEBUG(440, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy437; + if (yych == 'E') goto yy441; if (yych != 'e') goto yy194; -yy437: - YYDEBUG(437, *YYCURSOR); +yy441: + YYDEBUG(441, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy438; + if (yych == 'C') goto yy442; if (yych != 'c') goto yy194; -yy438: - YYDEBUG(438, *YYCURSOR); +yy442: + YYDEBUG(442, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy439; + if (yych == 'T') goto yy443; if (yych != 't') goto yy194; -yy439: - YYDEBUG(439, *YYCURSOR); +yy443: + YYDEBUG(443, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(440, *YYCURSOR); + YYDEBUG(444, *YYCURSOR); if (yych <= 0x1F) { - if (yych == '\t') goto yy439; + if (yych == '\t') goto yy443; goto yy194; } else { - if (yych <= ' ') goto yy439; + if (yych <= ' ') goto yy443; if (yych != ')') goto yy194; } - YYDEBUG(441, *YYCURSOR); + YYDEBUG(445, *YYCURSOR); ++YYCURSOR; - YYDEBUG(442, *YYCURSOR); + YYDEBUG(446, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1238 "Zend/zend_language_scanner.l" { return T_OBJECT_CAST; } -#line 4946 "Zend/zend_language_scanner.c" -yy443: - YYDEBUG(443, *YYCURSOR); +#line 4968 "Zend/zend_language_scanner.c" +yy447: + YYDEBUG(447, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy453; - if (yych == 'n') goto yy453; + if (yych == 'N') goto yy457; + if (yych == 'n') goto yy457; goto yy194; -yy444: - YYDEBUG(444, *YYCURSOR); +yy448: + YYDEBUG(448, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy445; + if (yych == 'O') goto yy449; if (yych != 'o') goto yy194; -yy445: - YYDEBUG(445, *YYCURSOR); +yy449: + YYDEBUG(449, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy446; + if (yych == 'L') goto yy450; if (yych != 'l') goto yy194; -yy446: - YYDEBUG(446, *YYCURSOR); +yy450: + YYDEBUG(450, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy451; - if (yych == 'e') goto yy451; - goto yy448; -yy447: - YYDEBUG(447, *YYCURSOR); + if (yych == 'E') goto yy455; + if (yych == 'e') goto yy455; + goto yy452; +yy451: + YYDEBUG(451, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy448: - YYDEBUG(448, *YYCURSOR); +yy452: + YYDEBUG(452, *YYCURSOR); if (yych <= 0x1F) { - if (yych == '\t') goto yy447; + if (yych == '\t') goto yy451; goto yy194; } else { - if (yych <= ' ') goto yy447; + if (yych <= ' ') goto yy451; if (yych != ')') goto yy194; } - YYDEBUG(449, *YYCURSOR); + YYDEBUG(453, *YYCURSOR); ++YYCURSOR; - YYDEBUG(450, *YYCURSOR); + YYDEBUG(454, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1242 "Zend/zend_language_scanner.l" { return T_BOOL_CAST; } -#line 4991 "Zend/zend_language_scanner.c" -yy451: - YYDEBUG(451, *YYCURSOR); +#line 5013 "Zend/zend_language_scanner.c" +yy455: + YYDEBUG(455, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy452; + if (yych == 'A') goto yy456; if (yych != 'a') goto yy194; -yy452: - YYDEBUG(452, *YYCURSOR); +yy456: + YYDEBUG(456, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy447; - if (yych == 'n') goto yy447; + if (yych == 'N') goto yy451; + if (yych == 'n') goto yy451; goto yy194; -yy453: - YYDEBUG(453, *YYCURSOR); +yy457: + YYDEBUG(457, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy454; + if (yych == 'A') goto yy458; if (yych != 'a') goto yy194; -yy454: - YYDEBUG(454, *YYCURSOR); +yy458: + YYDEBUG(458, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy455; + if (yych == 'R') goto yy459; if (yych != 'r') goto yy194; -yy455: - YYDEBUG(455, *YYCURSOR); +yy459: + YYDEBUG(459, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'Y') goto yy424; - if (yych == 'y') goto yy424; + if (yych == 'Y') goto yy428; + if (yych == 'y') goto yy428; goto yy194; -yy456: - YYDEBUG(456, *YYCURSOR); +yy460: + YYDEBUG(460, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy457; + if (yych == 'S') goto yy461; if (yych != 's') goto yy194; -yy457: - YYDEBUG(457, *YYCURSOR); +yy461: + YYDEBUG(461, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy458; + if (yych == 'E') goto yy462; if (yych != 'e') goto yy194; -yy458: - YYDEBUG(458, *YYCURSOR); +yy462: + YYDEBUG(462, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy459; + if (yych == 'T') goto yy463; if (yych != 't') goto yy194; -yy459: - YYDEBUG(459, *YYCURSOR); +yy463: + YYDEBUG(463, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(460, *YYCURSOR); + YYDEBUG(464, *YYCURSOR); if (yych <= 0x1F) { - if (yych == '\t') goto yy459; + if (yych == '\t') goto yy463; goto yy194; } else { - if (yych <= ' ') goto yy459; + if (yych <= ' ') goto yy463; if (yych != ')') goto yy194; } - YYDEBUG(461, *YYCURSOR); + YYDEBUG(465, *YYCURSOR); ++YYCURSOR; - YYDEBUG(462, *YYCURSOR); + YYDEBUG(466, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1246 "Zend/zend_language_scanner.l" { return T_UNSET_CAST; } -#line 5055 "Zend/zend_language_scanner.c" -yy463: - YYDEBUG(463, *YYCURSOR); +#line 5077 "Zend/zend_language_scanner.c" +yy467: + YYDEBUG(467, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy464; + if (yych == 'R') goto yy468; if (yych != 'r') goto yy187; -yy464: - YYDEBUG(464, *YYCURSOR); +yy468: + YYDEBUG(468, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(465, *YYCURSOR); + YYDEBUG(469, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1218 "Zend/zend_language_scanner.l" { return T_VAR; } -#line 5073 "Zend/zend_language_scanner.c" -yy466: - YYDEBUG(466, *YYCURSOR); +#line 5095 "Zend/zend_language_scanner.c" +yy470: + YYDEBUG(470, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'M') goto yy470; - if (yych == 'm') goto yy470; + if (yych == 'M') goto yy474; + if (yych == 'm') goto yy474; goto yy187; -yy467: - YYDEBUG(467, *YYCURSOR); +yy471: + YYDEBUG(471, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'W') goto yy468; + if (yych == 'W') goto yy472; if (yych != 'w') goto yy187; -yy468: - YYDEBUG(468, *YYCURSOR); +yy472: + YYDEBUG(472, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(469, *YYCURSOR); + YYDEBUG(473, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1210 "Zend/zend_language_scanner.l" { return T_NEW; } -#line 5097 "Zend/zend_language_scanner.c" -yy470: - YYDEBUG(470, *YYCURSOR); +#line 5119 "Zend/zend_language_scanner.c" +yy474: + YYDEBUG(474, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy471; + if (yych == 'E') goto yy475; if (yych != 'e') goto yy187; -yy471: - YYDEBUG(471, *YYCURSOR); +yy475: + YYDEBUG(475, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy472; + if (yych == 'S') goto yy476; if (yych != 's') goto yy187; -yy472: - YYDEBUG(472, *YYCURSOR); +yy476: + YYDEBUG(476, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'P') goto yy473; + if (yych == 'P') goto yy477; if (yych != 'p') goto yy187; -yy473: - YYDEBUG(473, *YYCURSOR); +yy477: + YYDEBUG(477, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy474; + if (yych == 'A') goto yy478; if (yych != 'a') goto yy187; -yy474: - YYDEBUG(474, *YYCURSOR); +yy478: + YYDEBUG(478, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy475; + if (yych == 'C') goto yy479; if (yych != 'c') goto yy187; -yy475: - YYDEBUG(475, *YYCURSOR); +yy479: + YYDEBUG(479, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy476; + if (yych == 'E') goto yy480; if (yych != 'e') goto yy187; -yy476: - YYDEBUG(476, *YYCURSOR); +yy480: + YYDEBUG(480, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(477, *YYCURSOR); + YYDEBUG(481, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1270 "Zend/zend_language_scanner.l" { return T_NAMESPACE; } -#line 5140 "Zend/zend_language_scanner.c" -yy478: - YYDEBUG(478, *YYCURSOR); +#line 5162 "Zend/zend_language_scanner.c" +yy482: + YYDEBUG(482, *YYCURSOR); yyaccept = 3; YYMARKER = ++YYCURSOR; YYFILL(3); yych = *YYCURSOR; - YYDEBUG(479, *YYCURSOR); + YYDEBUG(483, *YYCURSOR); if (yych <= 'D') { if (yych <= '/') goto yy190; - if (yych <= '9') goto yy478; + if (yych <= '9') goto yy482; goto yy190; } else { if (yych <= 'E') goto yy193; if (yych == 'e') goto yy193; goto yy190; } -yy480: - YYDEBUG(480, *YYCURSOR); +yy484: + YYDEBUG(484, *YYCURSOR); ++YYCURSOR; - YYDEBUG(481, *YYCURSOR); + YYDEBUG(485, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1390 "Zend/zend_language_scanner.l" +#line 1398 "Zend/zend_language_scanner.l" { return T_CONCAT_EQUAL; } -#line 5166 "Zend/zend_language_scanner.c" -yy482: - YYDEBUG(482, *YYCURSOR); +#line 5188 "Zend/zend_language_scanner.c" +yy486: + YYDEBUG(486, *YYCURSOR); yych = *++YYCURSOR; if (yych != '.') goto yy194; - YYDEBUG(483, *YYCURSOR); + YYDEBUG(487, *YYCURSOR); ++YYCURSOR; - YYDEBUG(484, *YYCURSOR); + YYDEBUG(488, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1206 "Zend/zend_language_scanner.l" { return T_ELLIPSIS; } -#line 5179 "Zend/zend_language_scanner.c" -yy485: - YYDEBUG(485, *YYCURSOR); +#line 5201 "Zend/zend_language_scanner.c" +yy489: + YYDEBUG(489, *YYCURSOR); ++YYCURSOR; - YYDEBUG(486, *YYCURSOR); + YYDEBUG(490, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1198 "Zend/zend_language_scanner.l" { return T_PAAMAYIM_NEKUDOTAYIM; } -#line 5189 "Zend/zend_language_scanner.c" -yy487: - YYDEBUG(487, *YYCURSOR); +#line 5211 "Zend/zend_language_scanner.c" +yy491: + YYDEBUG(491, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy488: - YYDEBUG(488, *YYCURSOR); +yy492: + YYDEBUG(492, *YYCURSOR); if (yych <= '\f') { if (yych <= 0x08) goto yy141; - if (yych <= '\n') goto yy487; + if (yych <= '\n') goto yy491; goto yy141; } else { - if (yych <= '\r') goto yy487; - if (yych == ' ') goto yy487; + if (yych <= '\r') goto yy491; + if (yych == ' ') goto yy491; goto yy141; } -yy489: - YYDEBUG(489, *YYCURSOR); +yy493: + YYDEBUG(493, *YYCURSOR); ++YYCURSOR; - YYDEBUG(490, *YYCURSOR); + YYDEBUG(494, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1378 "Zend/zend_language_scanner.l" { return T_MINUS_EQUAL; } -#line 5215 "Zend/zend_language_scanner.c" -yy491: - YYDEBUG(491, *YYCURSOR); +#line 5237 "Zend/zend_language_scanner.c" +yy495: + YYDEBUG(495, *YYCURSOR); ++YYCURSOR; - YYDEBUG(492, *YYCURSOR); + YYDEBUG(496, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1346 "Zend/zend_language_scanner.l" { return T_DEC; } -#line 5225 "Zend/zend_language_scanner.c" -yy493: - YYDEBUG(493, *YYCURSOR); +#line 5247 "Zend/zend_language_scanner.c" +yy497: + YYDEBUG(497, *YYCURSOR); ++YYCURSOR; - YYDEBUG(494, *YYCURSOR); + YYDEBUG(498, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1170 "Zend/zend_language_scanner.l" { yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); return T_OBJECT_OPERATOR; } -#line 5236 "Zend/zend_language_scanner.c" -yy495: - YYDEBUG(495, *YYCURSOR); +#line 5258 "Zend/zend_language_scanner.c" +yy499: + YYDEBUG(499, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'O') { - if (yych == 'I') goto yy502; + if (yych == 'I') goto yy506; if (yych <= 'N') goto yy187; - goto yy503; + goto yy507; } else { if (yych <= 'i') { if (yych <= 'h') goto yy187; - goto yy502; + goto yy506; } else { - if (yych == 'o') goto yy503; + if (yych == 'o') goto yy507; goto yy187; } } -yy496: - YYDEBUG(496, *YYCURSOR); +yy500: + YYDEBUG(500, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'B') goto yy497; + if (yych == 'B') goto yy501; if (yych != 'b') goto yy187; -yy497: - YYDEBUG(497, *YYCURSOR); +yy501: + YYDEBUG(501, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy498; + if (yych == 'L') goto yy502; if (yych != 'l') goto yy187; -yy498: - YYDEBUG(498, *YYCURSOR); +yy502: + YYDEBUG(502, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy499; + if (yych == 'I') goto yy503; if (yych != 'i') goto yy187; -yy499: - YYDEBUG(499, *YYCURSOR); +yy503: + YYDEBUG(503, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy500; + if (yych == 'C') goto yy504; if (yych != 'c') goto yy187; -yy500: - YYDEBUG(500, *YYCURSOR); +yy504: + YYDEBUG(504, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(501, *YYCURSOR); + YYDEBUG(505, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1318 "Zend/zend_language_scanner.l" { return T_PUBLIC; } -#line 5285 "Zend/zend_language_scanner.c" -yy502: - YYDEBUG(502, *YYCURSOR); +#line 5307 "Zend/zend_language_scanner.c" +yy506: + YYDEBUG(506, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'V') { - if (yych == 'N') goto yy511; + if (yych == 'N') goto yy515; if (yych <= 'U') goto yy187; - goto yy512; + goto yy516; } else { if (yych <= 'n') { if (yych <= 'm') goto yy187; - goto yy511; + goto yy515; } else { - if (yych == 'v') goto yy512; + if (yych == 'v') goto yy516; goto yy187; } } -yy503: - YYDEBUG(503, *YYCURSOR); +yy507: + YYDEBUG(507, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy504; + if (yych == 'T') goto yy508; if (yych != 't') goto yy187; -yy504: - YYDEBUG(504, *YYCURSOR); +yy508: + YYDEBUG(508, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy505; + if (yych == 'E') goto yy509; if (yych != 'e') goto yy187; -yy505: - YYDEBUG(505, *YYCURSOR); +yy509: + YYDEBUG(509, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy506; + if (yych == 'C') goto yy510; if (yych != 'c') goto yy187; -yy506: - YYDEBUG(506, *YYCURSOR); +yy510: + YYDEBUG(510, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy507; + if (yych == 'T') goto yy511; if (yych != 't') goto yy187; -yy507: - YYDEBUG(507, *YYCURSOR); +yy511: + YYDEBUG(511, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy508; + if (yych == 'E') goto yy512; if (yych != 'e') goto yy187; -yy508: - YYDEBUG(508, *YYCURSOR); +yy512: + YYDEBUG(512, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'D') goto yy509; + if (yych == 'D') goto yy513; if (yych != 'd') goto yy187; -yy509: - YYDEBUG(509, *YYCURSOR); +yy513: + YYDEBUG(513, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(510, *YYCURSOR); + YYDEBUG(514, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1314 "Zend/zend_language_scanner.l" { return T_PROTECTED; } -#line 5344 "Zend/zend_language_scanner.c" -yy511: - YYDEBUG(511, *YYCURSOR); +#line 5366 "Zend/zend_language_scanner.c" +yy515: + YYDEBUG(515, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy517; - if (yych == 't') goto yy517; + if (yych == 'T') goto yy521; + if (yych == 't') goto yy521; goto yy187; -yy512: - YYDEBUG(512, *YYCURSOR); +yy516: + YYDEBUG(516, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy513; + if (yych == 'A') goto yy517; if (yych != 'a') goto yy187; -yy513: - YYDEBUG(513, *YYCURSOR); +yy517: + YYDEBUG(517, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy514; + if (yych == 'T') goto yy518; if (yych != 't') goto yy187; -yy514: - YYDEBUG(514, *YYCURSOR); +yy518: + YYDEBUG(518, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy515; + if (yych == 'E') goto yy519; if (yych != 'e') goto yy187; -yy515: - YYDEBUG(515, *YYCURSOR); +yy519: + YYDEBUG(519, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(516, *YYCURSOR); + YYDEBUG(520, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1310 "Zend/zend_language_scanner.l" { return T_PRIVATE; } -#line 5378 "Zend/zend_language_scanner.c" -yy517: - YYDEBUG(517, *YYCURSOR); +#line 5400 "Zend/zend_language_scanner.c" +yy521: + YYDEBUG(521, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(518, *YYCURSOR); + YYDEBUG(522, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1146 "Zend/zend_language_scanner.l" { return T_PRINT; } -#line 5391 "Zend/zend_language_scanner.c" -yy519: - YYDEBUG(519, *YYCURSOR); +#line 5413 "Zend/zend_language_scanner.c" +yy523: + YYDEBUG(523, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy524; - if (yych == 'o') goto yy524; + if (yych == 'O') goto yy528; + if (yych == 'o') goto yy528; goto yy187; -yy520: - YYDEBUG(520, *YYCURSOR); +yy524: + YYDEBUG(524, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy521; + if (yych == 'T') goto yy525; if (yych != 't') goto yy187; -yy521: - YYDEBUG(521, *YYCURSOR); +yy525: + YYDEBUG(525, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy522; + if (yych == 'O') goto yy526; if (yych != 'o') goto yy187; -yy522: - YYDEBUG(522, *YYCURSOR); +yy526: + YYDEBUG(526, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(523, *YYCURSOR); + YYDEBUG(527, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1138 "Zend/zend_language_scanner.l" { return T_GOTO; } -#line 5420 "Zend/zend_language_scanner.c" -yy524: - YYDEBUG(524, *YYCURSOR); +#line 5442 "Zend/zend_language_scanner.c" +yy528: + YYDEBUG(528, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'B') goto yy525; + if (yych == 'B') goto yy529; if (yych != 'b') goto yy187; -yy525: - YYDEBUG(525, *YYCURSOR); +yy529: + YYDEBUG(529, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy526; + if (yych == 'A') goto yy530; if (yych != 'a') goto yy187; -yy526: - YYDEBUG(526, *YYCURSOR); +yy530: + YYDEBUG(530, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy527; + if (yych == 'L') goto yy531; if (yych != 'l') goto yy187; -yy527: - YYDEBUG(527, *YYCURSOR); +yy531: + YYDEBUG(531, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(528, *YYCURSOR); + YYDEBUG(532, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1282 "Zend/zend_language_scanner.l" { return T_GLOBAL; } -#line 5448 "Zend/zend_language_scanner.c" -yy529: - YYDEBUG(529, *YYCURSOR); +#line 5470 "Zend/zend_language_scanner.c" +yy533: + YYDEBUG(533, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '<') goto yy537; + if (yych == '<') goto yy541; goto yy194; -yy530: - YYDEBUG(530, *YYCURSOR); +yy534: + YYDEBUG(534, *YYCURSOR); yych = *++YYCURSOR; goto yy181; -yy531: - YYDEBUG(531, *YYCURSOR); +yy535: + YYDEBUG(535, *YYCURSOR); yych = *++YYCURSOR; goto yy179; -yy532: - YYDEBUG(532, *YYCURSOR); +yy536: + YYDEBUG(536, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy533; + if (yych == 'E') goto yy537; if (yych != 'e') goto yy187; -yy533: - YYDEBUG(533, *YYCURSOR); +yy537: + YYDEBUG(537, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy534; + if (yych == 'A') goto yy538; if (yych != 'a') goto yy187; -yy534: - YYDEBUG(534, *YYCURSOR); +yy538: + YYDEBUG(538, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'K') goto yy535; + if (yych == 'K') goto yy539; if (yych != 'k') goto yy187; -yy535: - YYDEBUG(535, *YYCURSOR); +yy539: + YYDEBUG(539, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(536, *YYCURSOR); + YYDEBUG(540, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1130 "Zend/zend_language_scanner.l" { return T_BREAK; } -#line 5489 "Zend/zend_language_scanner.c" -yy537: - YYDEBUG(537, *YYCURSOR); +#line 5511 "Zend/zend_language_scanner.c" +yy541: + YYDEBUG(541, *YYCURSOR); yych = *++YYCURSOR; - if (yych == '<') goto yy266; + if (yych == '<') goto yy270; goto yy194; -yy538: - YYDEBUG(538, *YYCURSOR); +yy542: + YYDEBUG(542, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy545; - if (yych == 'a') goto yy545; + if (yych == 'A') goto yy549; + if (yych == 'a') goto yy549; goto yy187; -yy539: - YYDEBUG(539, *YYCURSOR); +yy543: + YYDEBUG(543, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy540; + if (yych == 'I') goto yy544; if (yych != 'i') goto yy187; -yy540: - YYDEBUG(540, *YYCURSOR); +yy544: + YYDEBUG(544, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy541; + if (yych == 'T') goto yy545; if (yych != 't') goto yy187; -yy541: - YYDEBUG(541, *YYCURSOR); +yy545: + YYDEBUG(545, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy542; + if (yych == 'C') goto yy546; if (yych != 'c') goto yy187; -yy542: - YYDEBUG(542, *YYCURSOR); +yy546: + YYDEBUG(546, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy543; + if (yych == 'H') goto yy547; if (yych != 'h') goto yy187; -yy543: - YYDEBUG(543, *YYCURSOR); +yy547: + YYDEBUG(547, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(544, *YYCURSOR); + YYDEBUG(548, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1114 "Zend/zend_language_scanner.l" { return T_SWITCH; } -#line 5533 "Zend/zend_language_scanner.c" -yy545: - YYDEBUG(545, *YYCURSOR); +#line 5555 "Zend/zend_language_scanner.c" +yy549: + YYDEBUG(549, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy546; + if (yych == 'T') goto yy550; if (yych != 't') goto yy187; -yy546: - YYDEBUG(546, *YYCURSOR); +yy550: + YYDEBUG(550, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy547; + if (yych == 'I') goto yy551; if (yych != 'i') goto yy187; -yy547: - YYDEBUG(547, *YYCURSOR); +yy551: + YYDEBUG(551, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy548; + if (yych == 'C') goto yy552; if (yych != 'c') goto yy187; -yy548: - YYDEBUG(548, *YYCURSOR); +yy552: + YYDEBUG(552, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(549, *YYCURSOR); + YYDEBUG(553, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1298 "Zend/zend_language_scanner.l" { return T_STATIC; } -#line 5561 "Zend/zend_language_scanner.c" -yy550: - YYDEBUG(550, *YYCURSOR); +#line 5583 "Zend/zend_language_scanner.c" +yy554: + YYDEBUG(554, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy561; - if (yych == 's') goto yy561; + if (yych == 'S') goto yy565; + if (yych == 's') goto yy565; goto yy187; -yy551: - YYDEBUG(551, *YYCURSOR); +yy555: + YYDEBUG(555, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'D') goto yy559; - if (yych == 'd') goto yy559; + if (yych == 'D') goto yy563; + if (yych == 'd') goto yy563; goto yy187; -yy552: - YYDEBUG(552, *YYCURSOR); +yy556: + YYDEBUG(556, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy555; - if (yych == 'r') goto yy555; + if (yych == 'R') goto yy559; + if (yych == 'r') goto yy559; goto yy187; -yy553: - YYDEBUG(553, *YYCURSOR); +yy557: + YYDEBUG(557, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(554, *YYCURSOR); + YYDEBUG(558, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1110 "Zend/zend_language_scanner.l" { return T_AS; } -#line 5592 "Zend/zend_language_scanner.c" -yy555: - YYDEBUG(555, *YYCURSOR); +#line 5614 "Zend/zend_language_scanner.c" +yy559: + YYDEBUG(559, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy556; + if (yych == 'A') goto yy560; if (yych != 'a') goto yy187; -yy556: - YYDEBUG(556, *YYCURSOR); +yy560: + YYDEBUG(560, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'Y') goto yy557; + if (yych == 'Y') goto yy561; if (yych != 'y') goto yy187; -yy557: - YYDEBUG(557, *YYCURSOR); +yy561: + YYDEBUG(561, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(558, *YYCURSOR); + YYDEBUG(562, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1334 "Zend/zend_language_scanner.l" { return T_ARRAY; } -#line 5615 "Zend/zend_language_scanner.c" -yy559: - YYDEBUG(559, *YYCURSOR); +#line 5637 "Zend/zend_language_scanner.c" +yy563: + YYDEBUG(563, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(560, *YYCURSOR); + YYDEBUG(564, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1430 "Zend/zend_language_scanner.l" +#line 1438 "Zend/zend_language_scanner.l" { return T_LOGICAL_AND; } -#line 5628 "Zend/zend_language_scanner.c" -yy561: - YYDEBUG(561, *YYCURSOR); +#line 5650 "Zend/zend_language_scanner.c" +yy565: + YYDEBUG(565, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy562; + if (yych == 'T') goto yy566; if (yych != 't') goto yy187; -yy562: - YYDEBUG(562, *YYCURSOR); +yy566: + YYDEBUG(566, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy563; + if (yych == 'R') goto yy567; if (yych != 'r') goto yy187; -yy563: - YYDEBUG(563, *YYCURSOR); +yy567: + YYDEBUG(567, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy564; + if (yych == 'A') goto yy568; if (yych != 'a') goto yy187; -yy564: - YYDEBUG(564, *YYCURSOR); +yy568: + YYDEBUG(568, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy565; + if (yych == 'C') goto yy569; if (yych != 'c') goto yy187; -yy565: - YYDEBUG(565, *YYCURSOR); +yy569: + YYDEBUG(569, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy566; + if (yych == 'T') goto yy570; if (yych != 't') goto yy187; -yy566: - YYDEBUG(566, *YYCURSOR); +yy570: + YYDEBUG(570, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(567, *YYCURSOR); + YYDEBUG(571, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1302 "Zend/zend_language_scanner.l" { return T_ABSTRACT; } -#line 5666 "Zend/zend_language_scanner.c" -yy568: - YYDEBUG(568, *YYCURSOR); +#line 5688 "Zend/zend_language_scanner.c" +yy572: + YYDEBUG(572, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy569; + if (yych == 'I') goto yy573; if (yych != 'i') goto yy187; -yy569: - YYDEBUG(569, *YYCURSOR); +yy573: + YYDEBUG(573, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy570; + if (yych == 'L') goto yy574; if (yych != 'l') goto yy187; -yy570: - YYDEBUG(570, *YYCURSOR); +yy574: + YYDEBUG(574, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy571; + if (yych == 'E') goto yy575; if (yych != 'e') goto yy187; -yy571: - YYDEBUG(571, *YYCURSOR); +yy575: + YYDEBUG(575, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(572, *YYCURSOR); + YYDEBUG(576, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1070 "Zend/zend_language_scanner.l" { return T_WHILE; } -#line 5694 "Zend/zend_language_scanner.c" -yy573: - YYDEBUG(573, *YYCURSOR); +#line 5716 "Zend/zend_language_scanner.c" +yy577: + YYDEBUG(577, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(574, *YYCURSOR); + YYDEBUG(578, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1054 "Zend/zend_language_scanner.l" { return T_IF; } -#line 5707 "Zend/zend_language_scanner.c" -yy575: - YYDEBUG(575, *YYCURSOR); +#line 5729 "Zend/zend_language_scanner.c" +yy579: + YYDEBUG(579, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'P') goto yy617; - if (yych == 'p') goto yy617; + if (yych == 'P') goto yy621; + if (yych == 'p') goto yy621; goto yy187; -yy576: - YYDEBUG(576, *YYCURSOR); +yy580: + YYDEBUG(580, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= 'C') { if (yych <= 'B') goto yy187; - goto yy584; + goto yy588; } else { if (yych <= 'R') goto yy187; - if (yych <= 'S') goto yy582; - goto yy583; + if (yych <= 'S') goto yy586; + goto yy587; } } else { if (yych <= 'r') { - if (yych == 'c') goto yy584; + if (yych == 'c') goto yy588; goto yy187; } else { - if (yych <= 's') goto yy582; - if (yych <= 't') goto yy583; + if (yych <= 's') goto yy586; + if (yych <= 't') goto yy587; goto yy187; } } -yy577: - YYDEBUG(577, *YYCURSOR); +yy581: + YYDEBUG(581, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy578; + if (yych == 'S') goto yy582; if (yych != 's') goto yy187; -yy578: - YYDEBUG(578, *YYCURSOR); +yy582: + YYDEBUG(582, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy579; + if (yych == 'E') goto yy583; if (yych != 'e') goto yy187; -yy579: - YYDEBUG(579, *YYCURSOR); +yy583: + YYDEBUG(583, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy580; + if (yych == 'T') goto yy584; if (yych != 't') goto yy187; -yy580: - YYDEBUG(580, *YYCURSOR); +yy584: + YYDEBUG(584, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(581, *YYCURSOR); + YYDEBUG(585, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1286 "Zend/zend_language_scanner.l" { return T_ISSET; } -#line 5763 "Zend/zend_language_scanner.c" -yy582: - YYDEBUG(582, *YYCURSOR); +#line 5785 "Zend/zend_language_scanner.c" +yy586: + YYDEBUG(586, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy603; - if (yych == 't') goto yy603; + if (yych == 'T') goto yy607; + if (yych == 't') goto yy607; goto yy187; -yy583: - YYDEBUG(583, *YYCURSOR); +yy587: + YYDEBUG(587, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy596; - if (yych == 'e') goto yy596; + if (yych == 'E') goto yy600; + if (yych == 'e') goto yy600; goto yy187; -yy584: - YYDEBUG(584, *YYCURSOR); +yy588: + YYDEBUG(588, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy585; + if (yych == 'L') goto yy589; if (yych != 'l') goto yy187; -yy585: - YYDEBUG(585, *YYCURSOR); +yy589: + YYDEBUG(589, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'U') goto yy586; + if (yych == 'U') goto yy590; if (yych != 'u') goto yy187; -yy586: - YYDEBUG(586, *YYCURSOR); +yy590: + YYDEBUG(590, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'D') goto yy587; + if (yych == 'D') goto yy591; if (yych != 'd') goto yy187; -yy587: - YYDEBUG(587, *YYCURSOR); +yy591: + YYDEBUG(591, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy588; + if (yych == 'E') goto yy592; if (yych != 'e') goto yy187; -yy588: - YYDEBUG(588, *YYCURSOR); +yy592: + YYDEBUG(592, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '^') { if (yych <= '9') { if (yych >= '0') goto yy186; } else { - if (yych <= '@') goto yy589; + if (yych <= '@') goto yy593; if (yych <= 'Z') goto yy186; } } else { if (yych <= '`') { - if (yych <= '_') goto yy590; + if (yych <= '_') goto yy594; } else { if (yych <= 'z') goto yy186; if (yych >= 0x7F) goto yy186; } } -yy589: - YYDEBUG(589, *YYCURSOR); +yy593: + YYDEBUG(593, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1254 "Zend/zend_language_scanner.l" { return T_INCLUDE; } -#line 5821 "Zend/zend_language_scanner.c" -yy590: - YYDEBUG(590, *YYCURSOR); +#line 5843 "Zend/zend_language_scanner.c" +yy594: + YYDEBUG(594, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy591; + if (yych == 'O') goto yy595; if (yych != 'o') goto yy187; -yy591: - YYDEBUG(591, *YYCURSOR); +yy595: + YYDEBUG(595, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy592; + if (yych == 'N') goto yy596; if (yych != 'n') goto yy187; -yy592: - YYDEBUG(592, *YYCURSOR); +yy596: + YYDEBUG(596, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy593; + if (yych == 'C') goto yy597; if (yych != 'c') goto yy187; -yy593: - YYDEBUG(593, *YYCURSOR); +yy597: + YYDEBUG(597, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy594; + if (yych == 'E') goto yy598; if (yych != 'e') goto yy187; -yy594: - YYDEBUG(594, *YYCURSOR); +yy598: + YYDEBUG(598, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(595, *YYCURSOR); + YYDEBUG(599, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1258 "Zend/zend_language_scanner.l" { return T_INCLUDE_ONCE; } -#line 5854 "Zend/zend_language_scanner.c" -yy596: - YYDEBUG(596, *YYCURSOR); +#line 5876 "Zend/zend_language_scanner.c" +yy600: + YYDEBUG(600, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy597; + if (yych == 'R') goto yy601; if (yych != 'r') goto yy187; -yy597: - YYDEBUG(597, *YYCURSOR); +yy601: + YYDEBUG(601, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'F') goto yy598; + if (yych == 'F') goto yy602; if (yych != 'f') goto yy187; -yy598: - YYDEBUG(598, *YYCURSOR); +yy602: + YYDEBUG(602, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy599; + if (yych == 'A') goto yy603; if (yych != 'a') goto yy187; -yy599: - YYDEBUG(599, *YYCURSOR); +yy603: + YYDEBUG(603, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy600; + if (yych == 'C') goto yy604; if (yych != 'c') goto yy187; -yy600: - YYDEBUG(600, *YYCURSOR); +yy604: + YYDEBUG(604, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy601; + if (yych == 'E') goto yy605; if (yych != 'e') goto yy187; -yy601: - YYDEBUG(601, *YYCURSOR); +yy605: + YYDEBUG(605, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(602, *YYCURSOR); + YYDEBUG(606, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1154 "Zend/zend_language_scanner.l" { return T_INTERFACE; } -#line 5892 "Zend/zend_language_scanner.c" -yy603: - YYDEBUG(603, *YYCURSOR); +#line 5914 "Zend/zend_language_scanner.c" +yy607: + YYDEBUG(607, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'E') { - if (yych == 'A') goto yy604; + if (yych == 'A') goto yy608; if (yych <= 'D') goto yy187; - goto yy605; + goto yy609; } else { if (yych <= 'a') { if (yych <= '`') goto yy187; } else { - if (yych == 'e') goto yy605; + if (yych == 'e') goto yy609; goto yy187; } } -yy604: - YYDEBUG(604, *YYCURSOR); +yy608: + YYDEBUG(608, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy611; - if (yych == 'n') goto yy611; + if (yych == 'N') goto yy615; + if (yych == 'n') goto yy615; goto yy187; -yy605: - YYDEBUG(605, *YYCURSOR); +yy609: + YYDEBUG(609, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy606; + if (yych == 'A') goto yy610; if (yych != 'a') goto yy187; -yy606: - YYDEBUG(606, *YYCURSOR); +yy610: + YYDEBUG(610, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'D') goto yy607; + if (yych == 'D') goto yy611; if (yych != 'd') goto yy187; -yy607: - YYDEBUG(607, *YYCURSOR); +yy611: + YYDEBUG(611, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy608; + if (yych == 'O') goto yy612; if (yych != 'o') goto yy187; -yy608: - YYDEBUG(608, *YYCURSOR); +yy612: + YYDEBUG(612, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'F') goto yy609; + if (yych == 'F') goto yy613; if (yych != 'f') goto yy187; -yy609: - YYDEBUG(609, *YYCURSOR); +yy613: + YYDEBUG(613, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(610, *YYCURSOR); + YYDEBUG(614, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1278 "Zend/zend_language_scanner.l" { return T_INSTEADOF; } -#line 5946 "Zend/zend_language_scanner.c" -yy611: - YYDEBUG(611, *YYCURSOR); +#line 5968 "Zend/zend_language_scanner.c" +yy615: + YYDEBUG(615, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy612; + if (yych == 'C') goto yy616; if (yych != 'c') goto yy187; -yy612: - YYDEBUG(612, *YYCURSOR); +yy616: + YYDEBUG(616, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy613; + if (yych == 'E') goto yy617; if (yych != 'e') goto yy187; -yy613: - YYDEBUG(613, *YYCURSOR); +yy617: + YYDEBUG(617, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy614; + if (yych == 'O') goto yy618; if (yych != 'o') goto yy187; -yy614: - YYDEBUG(614, *YYCURSOR); +yy618: + YYDEBUG(618, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'F') goto yy615; + if (yych == 'F') goto yy619; if (yych != 'f') goto yy187; -yy615: - YYDEBUG(615, *YYCURSOR); +yy619: + YYDEBUG(619, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(616, *YYCURSOR); + YYDEBUG(620, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1106 "Zend/zend_language_scanner.l" { return T_INSTANCEOF; } -#line 5979 "Zend/zend_language_scanner.c" -yy617: - YYDEBUG(617, *YYCURSOR); +#line 6001 "Zend/zend_language_scanner.c" +yy621: + YYDEBUG(621, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy618; + if (yych == 'L') goto yy622; if (yych != 'l') goto yy187; -yy618: - YYDEBUG(618, *YYCURSOR); +yy622: + YYDEBUG(622, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy619; + if (yych == 'E') goto yy623; if (yych != 'e') goto yy187; -yy619: - YYDEBUG(619, *YYCURSOR); +yy623: + YYDEBUG(623, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'M') goto yy620; + if (yych == 'M') goto yy624; if (yych != 'm') goto yy187; -yy620: - YYDEBUG(620, *YYCURSOR); +yy624: + YYDEBUG(624, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy621; + if (yych == 'E') goto yy625; if (yych != 'e') goto yy187; -yy621: - YYDEBUG(621, *YYCURSOR); +yy625: + YYDEBUG(625, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy622; + if (yych == 'N') goto yy626; if (yych != 'n') goto yy187; -yy622: - YYDEBUG(622, *YYCURSOR); +yy626: + YYDEBUG(626, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy623; + if (yych == 'T') goto yy627; if (yych != 't') goto yy187; -yy623: - YYDEBUG(623, *YYCURSOR); +yy627: + YYDEBUG(627, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy624; + if (yych == 'S') goto yy628; if (yych != 's') goto yy187; -yy624: - YYDEBUG(624, *YYCURSOR); +yy628: + YYDEBUG(628, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(625, *YYCURSOR); + YYDEBUG(629, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1166 "Zend/zend_language_scanner.l" { return T_IMPLEMENTS; } -#line 6027 "Zend/zend_language_scanner.c" -yy626: - YYDEBUG(626, *YYCURSOR); +#line 6049 "Zend/zend_language_scanner.c" +yy630: + YYDEBUG(630, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy634; - if (yych == 'r') goto yy634; + if (yych == 'R') goto yy638; + if (yych == 'r') goto yy638; goto yy187; -yy627: - YYDEBUG(627, *YYCURSOR); +yy631: + YYDEBUG(631, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'Y') { - if (yych == 'A') goto yy630; + if (yych == 'A') goto yy634; if (yych <= 'X') goto yy187; } else { if (yych <= 'a') { if (yych <= '`') goto yy187; - goto yy630; + goto yy634; } else { if (yych != 'y') goto yy187; } } - YYDEBUG(628, *YYCURSOR); + YYDEBUG(632, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(629, *YYCURSOR); + YYDEBUG(633, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1038 "Zend/zend_language_scanner.l" { return T_TRY; } -#line 6059 "Zend/zend_language_scanner.c" -yy630: - YYDEBUG(630, *YYCURSOR); +#line 6081 "Zend/zend_language_scanner.c" +yy634: + YYDEBUG(634, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy631; + if (yych == 'I') goto yy635; if (yych != 'i') goto yy187; -yy631: - YYDEBUG(631, *YYCURSOR); +yy635: + YYDEBUG(635, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy632; + if (yych == 'T') goto yy636; if (yych != 't') goto yy187; -yy632: - YYDEBUG(632, *YYCURSOR); +yy636: + YYDEBUG(636, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(633, *YYCURSOR); + YYDEBUG(637, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1158 "Zend/zend_language_scanner.l" { return T_TRAIT; } -#line 6082 "Zend/zend_language_scanner.c" -yy634: - YYDEBUG(634, *YYCURSOR); +#line 6104 "Zend/zend_language_scanner.c" +yy638: + YYDEBUG(638, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy635; + if (yych == 'O') goto yy639; if (yych != 'o') goto yy187; -yy635: - YYDEBUG(635, *YYCURSOR); +yy639: + YYDEBUG(639, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'W') goto yy636; + if (yych == 'W') goto yy640; if (yych != 'w') goto yy187; -yy636: - YYDEBUG(636, *YYCURSOR); +yy640: + YYDEBUG(640, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(637, *YYCURSOR); + YYDEBUG(641, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1050 "Zend/zend_language_scanner.l" { return T_THROW; } -#line 6105 "Zend/zend_language_scanner.c" -yy638: - YYDEBUG(638, *YYCURSOR); +#line 6127 "Zend/zend_language_scanner.c" +yy642: + YYDEBUG(642, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy639; + if (yych == 'E') goto yy643; if (yych != 'e') goto yy187; -yy639: - YYDEBUG(639, *YYCURSOR); +yy643: + YYDEBUG(643, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy640; + if (yych == 'L') goto yy644; if (yych != 'l') goto yy187; -yy640: - YYDEBUG(640, *YYCURSOR); +yy644: + YYDEBUG(644, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'D') goto yy641; + if (yych == 'D') goto yy645; if (yych != 'd') goto yy187; -yy641: - YYDEBUG(641, *YYCURSOR); +yy645: + YYDEBUG(645, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(642, *YYCURSOR); + YYDEBUG(646, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1034 "Zend/zend_language_scanner.l" { return T_YIELD; } -#line 6133 "Zend/zend_language_scanner.c" -yy643: - YYDEBUG(643, *YYCURSOR); +#line 6155 "Zend/zend_language_scanner.c" +yy647: + YYDEBUG(647, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { - if (yych == 'Q') goto yy645; + if (yych == 'Q') goto yy649; if (yych <= 'S') goto yy187; } else { if (yych <= 'q') { if (yych <= 'p') goto yy187; - goto yy645; + goto yy649; } else { if (yych != 't') goto yy187; } } - YYDEBUG(644, *YYCURSOR); + YYDEBUG(648, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'U') goto yy657; - if (yych == 'u') goto yy657; + if (yych == 'U') goto yy661; + if (yych == 'u') goto yy661; goto yy187; -yy645: - YYDEBUG(645, *YYCURSOR); +yy649: + YYDEBUG(649, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'U') goto yy646; + if (yych == 'U') goto yy650; if (yych != 'u') goto yy187; -yy646: - YYDEBUG(646, *YYCURSOR); +yy650: + YYDEBUG(650, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy647; + if (yych == 'I') goto yy651; if (yych != 'i') goto yy187; -yy647: - YYDEBUG(647, *YYCURSOR); +yy651: + YYDEBUG(651, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy648; + if (yych == 'R') goto yy652; if (yych != 'r') goto yy187; -yy648: - YYDEBUG(648, *YYCURSOR); +yy652: + YYDEBUG(652, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy649; + if (yych == 'E') goto yy653; if (yych != 'e') goto yy187; -yy649: - YYDEBUG(649, *YYCURSOR); +yy653: + YYDEBUG(653, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '^') { if (yych <= '9') { if (yych >= '0') goto yy186; } else { - if (yych <= '@') goto yy650; + if (yych <= '@') goto yy654; if (yych <= 'Z') goto yy186; } } else { if (yych <= '`') { - if (yych <= '_') goto yy651; + if (yych <= '_') goto yy655; } else { if (yych <= 'z') goto yy186; if (yych >= 0x7F) goto yy186; } } -yy650: - YYDEBUG(650, *YYCURSOR); +yy654: + YYDEBUG(654, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1262 "Zend/zend_language_scanner.l" { return T_REQUIRE; } -#line 6198 "Zend/zend_language_scanner.c" -yy651: - YYDEBUG(651, *YYCURSOR); +#line 6220 "Zend/zend_language_scanner.c" +yy655: + YYDEBUG(655, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy652; + if (yych == 'O') goto yy656; if (yych != 'o') goto yy187; -yy652: - YYDEBUG(652, *YYCURSOR); +yy656: + YYDEBUG(656, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy653; + if (yych == 'N') goto yy657; if (yych != 'n') goto yy187; -yy653: - YYDEBUG(653, *YYCURSOR); +yy657: + YYDEBUG(657, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy654; + if (yych == 'C') goto yy658; if (yych != 'c') goto yy187; -yy654: - YYDEBUG(654, *YYCURSOR); +yy658: + YYDEBUG(658, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy655; + if (yych == 'E') goto yy659; if (yych != 'e') goto yy187; -yy655: - YYDEBUG(655, *YYCURSOR); +yy659: + YYDEBUG(659, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(656, *YYCURSOR); + YYDEBUG(660, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1266 "Zend/zend_language_scanner.l" { return T_REQUIRE_ONCE; } -#line 6231 "Zend/zend_language_scanner.c" -yy657: - YYDEBUG(657, *YYCURSOR); +#line 6253 "Zend/zend_language_scanner.c" +yy661: + YYDEBUG(661, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy658; + if (yych == 'R') goto yy662; if (yych != 'r') goto yy187; -yy658: - YYDEBUG(658, *YYCURSOR); +yy662: + YYDEBUG(662, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy659; + if (yych == 'N') goto yy663; if (yych != 'n') goto yy187; -yy659: - YYDEBUG(659, *YYCURSOR); +yy663: + YYDEBUG(663, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(660, *YYCURSOR); + YYDEBUG(664, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1030 "Zend/zend_language_scanner.l" { return T_RETURN; } -#line 6254 "Zend/zend_language_scanner.c" -yy661: - YYDEBUG(661, *YYCURSOR); +#line 6276 "Zend/zend_language_scanner.c" +yy665: + YYDEBUG(665, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= 'L') { if (yych <= 'K') goto yy187; - goto yy684; + goto yy688; } else { if (yych <= 'R') goto yy187; - if (yych <= 'S') goto yy683; - goto yy682; + if (yych <= 'S') goto yy687; + goto yy686; } } else { if (yych <= 'r') { - if (yych == 'l') goto yy684; + if (yych == 'l') goto yy688; goto yy187; } else { - if (yych <= 's') goto yy683; - if (yych <= 't') goto yy682; + if (yych <= 's') goto yy687; + if (yych <= 't') goto yy686; goto yy187; } } -yy662: - YYDEBUG(662, *YYCURSOR); +yy666: + YYDEBUG(666, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'O') { - if (yych == 'A') goto yy674; + if (yych == 'A') goto yy678; if (yych <= 'N') goto yy187; - goto yy675; + goto yy679; } else { if (yych <= 'a') { if (yych <= '`') goto yy187; - goto yy674; + goto yy678; } else { - if (yych == 'o') goto yy675; + if (yych == 'o') goto yy679; goto yy187; } } -yy663: - YYDEBUG(663, *YYCURSOR); +yy667: + YYDEBUG(667, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy664; + if (yych == 'N') goto yy668; if (yych != 'n') goto yy187; -yy664: - YYDEBUG(664, *YYCURSOR); +yy668: + YYDEBUG(668, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { if (yych <= 'R') goto yy187; - if (yych >= 'T') goto yy666; + if (yych >= 'T') goto yy670; } else { if (yych <= 'r') goto yy187; - if (yych <= 's') goto yy665; - if (yych <= 't') goto yy666; + if (yych <= 's') goto yy669; + if (yych <= 't') goto yy670; goto yy187; } -yy665: - YYDEBUG(665, *YYCURSOR); +yy669: + YYDEBUG(669, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy672; - if (yych == 't') goto yy672; + if (yych == 'T') goto yy676; + if (yych == 't') goto yy676; goto yy187; -yy666: - YYDEBUG(666, *YYCURSOR); +yy670: + YYDEBUG(670, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy667; + if (yych == 'I') goto yy671; if (yych != 'i') goto yy187; -yy667: - YYDEBUG(667, *YYCURSOR); +yy671: + YYDEBUG(671, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy668; + if (yych == 'N') goto yy672; if (yych != 'n') goto yy187; -yy668: - YYDEBUG(668, *YYCURSOR); +yy672: + YYDEBUG(672, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'U') goto yy669; + if (yych == 'U') goto yy673; if (yych != 'u') goto yy187; -yy669: - YYDEBUG(669, *YYCURSOR); +yy673: + YYDEBUG(673, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy670; + if (yych == 'E') goto yy674; if (yych != 'e') goto yy187; -yy670: - YYDEBUG(670, *YYCURSOR); +yy674: + YYDEBUG(674, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(671, *YYCURSOR); + YYDEBUG(675, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1134 "Zend/zend_language_scanner.l" { return T_CONTINUE; } -#line 6348 "Zend/zend_language_scanner.c" -yy672: - YYDEBUG(672, *YYCURSOR); +#line 6370 "Zend/zend_language_scanner.c" +yy676: + YYDEBUG(676, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(673, *YYCURSOR); + YYDEBUG(677, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1026 "Zend/zend_language_scanner.l" { return T_CONST; } -#line 6361 "Zend/zend_language_scanner.c" -yy674: - YYDEBUG(674, *YYCURSOR); +#line 6383 "Zend/zend_language_scanner.c" +yy678: + YYDEBUG(678, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy679; - if (yych == 's') goto yy679; + if (yych == 'S') goto yy683; + if (yych == 's') goto yy683; goto yy187; -yy675: - YYDEBUG(675, *YYCURSOR); +yy679: + YYDEBUG(679, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy676; + if (yych == 'N') goto yy680; if (yych != 'n') goto yy187; -yy676: - YYDEBUG(676, *YYCURSOR); +yy680: + YYDEBUG(680, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy677; + if (yych == 'E') goto yy681; if (yych != 'e') goto yy187; -yy677: - YYDEBUG(677, *YYCURSOR); +yy681: + YYDEBUG(681, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(678, *YYCURSOR); + YYDEBUG(682, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1214 "Zend/zend_language_scanner.l" { return T_CLONE; } -#line 6390 "Zend/zend_language_scanner.c" -yy679: - YYDEBUG(679, *YYCURSOR); +#line 6412 "Zend/zend_language_scanner.c" +yy683: + YYDEBUG(683, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy680; + if (yych == 'S') goto yy684; if (yych != 's') goto yy187; -yy680: - YYDEBUG(680, *YYCURSOR); +yy684: + YYDEBUG(684, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(681, *YYCURSOR); + YYDEBUG(685, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1150 "Zend/zend_language_scanner.l" { return T_CLASS; } -#line 6408 "Zend/zend_language_scanner.c" -yy682: - YYDEBUG(682, *YYCURSOR); +#line 6430 "Zend/zend_language_scanner.c" +yy686: + YYDEBUG(686, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy693; - if (yych == 'c') goto yy693; + if (yych == 'C') goto yy697; + if (yych == 'c') goto yy697; goto yy187; -yy683: - YYDEBUG(683, *YYCURSOR); +yy687: + YYDEBUG(687, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy691; - if (yych == 'e') goto yy691; + if (yych == 'E') goto yy695; + if (yych == 'e') goto yy695; goto yy187; -yy684: - YYDEBUG(684, *YYCURSOR); +yy688: + YYDEBUG(688, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy685; + if (yych == 'L') goto yy689; if (yych != 'l') goto yy187; -yy685: - YYDEBUG(685, *YYCURSOR); +yy689: + YYDEBUG(689, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy686; + if (yych == 'A') goto yy690; if (yych != 'a') goto yy187; -yy686: - YYDEBUG(686, *YYCURSOR); +yy690: + YYDEBUG(690, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'B') goto yy687; + if (yych == 'B') goto yy691; if (yych != 'b') goto yy187; -yy687: - YYDEBUG(687, *YYCURSOR); +yy691: + YYDEBUG(691, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy688; + if (yych == 'L') goto yy692; if (yych != 'l') goto yy187; -yy688: - YYDEBUG(688, *YYCURSOR); +yy692: + YYDEBUG(692, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy689; + if (yych == 'E') goto yy693; if (yych != 'e') goto yy187; -yy689: - YYDEBUG(689, *YYCURSOR); +yy693: + YYDEBUG(693, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(690, *YYCURSOR); + YYDEBUG(694, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1338 "Zend/zend_language_scanner.l" { return T_CALLABLE; } -#line 6458 "Zend/zend_language_scanner.c" -yy691: - YYDEBUG(691, *YYCURSOR); +#line 6480 "Zend/zend_language_scanner.c" +yy695: + YYDEBUG(695, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(692, *YYCURSOR); + YYDEBUG(696, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1122 "Zend/zend_language_scanner.l" { return T_CASE; } -#line 6471 "Zend/zend_language_scanner.c" -yy693: - YYDEBUG(693, *YYCURSOR); +#line 6493 "Zend/zend_language_scanner.c" +yy697: + YYDEBUG(697, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy694; + if (yych == 'H') goto yy698; if (yych != 'h') goto yy187; -yy694: - YYDEBUG(694, *YYCURSOR); +yy698: + YYDEBUG(698, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(695, *YYCURSOR); + YYDEBUG(699, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1042 "Zend/zend_language_scanner.l" { return T_CATCH; } -#line 6489 "Zend/zend_language_scanner.c" -yy696: - YYDEBUG(696, *YYCURSOR); +#line 6511 "Zend/zend_language_scanner.c" +yy700: + YYDEBUG(700, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy713; - if (yych == 'n') goto yy713; + if (yych == 'N') goto yy717; + if (yych == 'n') goto yy717; goto yy187; -yy697: - YYDEBUG(697, *YYCURSOR); +yy701: + YYDEBUG(701, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy706; - if (yych == 'r') goto yy706; + if (yych == 'R') goto yy710; + if (yych == 'r') goto yy710; goto yy187; -yy698: - YYDEBUG(698, *YYCURSOR); +yy702: + YYDEBUG(702, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy699; + if (yych == 'N') goto yy703; if (yych != 'n') goto yy187; -yy699: - YYDEBUG(699, *YYCURSOR); +yy703: + YYDEBUG(703, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy700; + if (yych == 'C') goto yy704; if (yych != 'c') goto yy187; -yy700: - YYDEBUG(700, *YYCURSOR); +yy704: + YYDEBUG(704, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy701; + if (yych == 'T') goto yy705; if (yych != 't') goto yy187; -yy701: - YYDEBUG(701, *YYCURSOR); +yy705: + YYDEBUG(705, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy702; + if (yych == 'I') goto yy706; if (yych != 'i') goto yy187; -yy702: - YYDEBUG(702, *YYCURSOR); +yy706: + YYDEBUG(706, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy703; + if (yych == 'O') goto yy707; if (yych != 'o') goto yy187; -yy703: - YYDEBUG(703, *YYCURSOR); +yy707: + YYDEBUG(707, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy704; + if (yych == 'N') goto yy708; if (yych != 'n') goto yy187; -yy704: - YYDEBUG(704, *YYCURSOR); +yy708: + YYDEBUG(708, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(705, *YYCURSOR); + YYDEBUG(709, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1022 "Zend/zend_language_scanner.l" { return T_FUNCTION; } -#line 6544 "Zend/zend_language_scanner.c" -yy706: - YYDEBUG(706, *YYCURSOR); +#line 6566 "Zend/zend_language_scanner.c" +yy710: + YYDEBUG(710, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '^') { if (yych <= '@') { - if (yych <= '/') goto yy707; + if (yych <= '/') goto yy711; if (yych <= '9') goto yy186; } else { - if (yych == 'E') goto yy708; + if (yych == 'E') goto yy712; if (yych <= 'Z') goto yy186; } } else { if (yych <= 'd') { if (yych != '`') goto yy186; } else { - if (yych <= 'e') goto yy708; + if (yych <= 'e') goto yy712; if (yych <= 'z') goto yy186; if (yych >= 0x7F) goto yy186; } } -yy707: - YYDEBUG(707, *YYCURSOR); +yy711: + YYDEBUG(711, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1082 "Zend/zend_language_scanner.l" { return T_FOR; } -#line 6572 "Zend/zend_language_scanner.c" -yy708: - YYDEBUG(708, *YYCURSOR); +#line 6594 "Zend/zend_language_scanner.c" +yy712: + YYDEBUG(712, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy709; + if (yych == 'A') goto yy713; if (yych != 'a') goto yy187; -yy709: - YYDEBUG(709, *YYCURSOR); +yy713: + YYDEBUG(713, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy710; + if (yych == 'C') goto yy714; if (yych != 'c') goto yy187; -yy710: - YYDEBUG(710, *YYCURSOR); +yy714: + YYDEBUG(714, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy711; + if (yych == 'H') goto yy715; if (yych != 'h') goto yy187; -yy711: - YYDEBUG(711, *YYCURSOR); +yy715: + YYDEBUG(715, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(712, *YYCURSOR); + YYDEBUG(716, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1090 "Zend/zend_language_scanner.l" { return T_FOREACH; } -#line 6600 "Zend/zend_language_scanner.c" -yy713: - YYDEBUG(713, *YYCURSOR); +#line 6622 "Zend/zend_language_scanner.c" +yy717: + YYDEBUG(717, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy714; + if (yych == 'A') goto yy718; if (yych != 'a') goto yy187; -yy714: - YYDEBUG(714, *YYCURSOR); +yy718: + YYDEBUG(718, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy715; + if (yych == 'L') goto yy719; if (yych != 'l') goto yy187; -yy715: - YYDEBUG(715, *YYCURSOR); +yy719: + YYDEBUG(719, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '^') { if (yych <= '@') { - if (yych <= '/') goto yy716; + if (yych <= '/') goto yy720; if (yych <= '9') goto yy186; } else { - if (yych == 'L') goto yy717; + if (yych == 'L') goto yy721; if (yych <= 'Z') goto yy186; } } else { if (yych <= 'k') { if (yych != '`') goto yy186; } else { - if (yych <= 'l') goto yy717; + if (yych <= 'l') goto yy721; if (yych <= 'z') goto yy186; if (yych >= 0x7F) goto yy186; } } -yy716: - YYDEBUG(716, *YYCURSOR); +yy720: + YYDEBUG(720, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1306 "Zend/zend_language_scanner.l" { return T_FINAL; } -#line 6638 "Zend/zend_language_scanner.c" -yy717: - YYDEBUG(717, *YYCURSOR); +#line 6660 "Zend/zend_language_scanner.c" +yy721: + YYDEBUG(721, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'Y') goto yy718; + if (yych == 'Y') goto yy722; if (yych != 'y') goto yy187; -yy718: - YYDEBUG(718, *YYCURSOR); +yy722: + YYDEBUG(722, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(719, *YYCURSOR); + YYDEBUG(723, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1046 "Zend/zend_language_scanner.l" { return T_FINALLY; } -#line 6656 "Zend/zend_language_scanner.c" -yy720: - YYDEBUG(720, *YYCURSOR); +#line 6678 "Zend/zend_language_scanner.c" +yy724: + YYDEBUG(724, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'F') { - if (yych == 'C') goto yy726; + if (yych == 'C') goto yy730; if (yych <= 'E') goto yy187; - goto yy727; + goto yy731; } else { if (yych <= 'c') { if (yych <= 'b') goto yy187; - goto yy726; + goto yy730; } else { - if (yych == 'f') goto yy727; + if (yych == 'f') goto yy731; goto yy187; } } -yy721: - YYDEBUG(721, *YYCURSOR); +yy725: + YYDEBUG(725, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy724; - if (yych == 'e') goto yy724; + if (yych == 'E') goto yy728; + if (yych == 'e') goto yy728; goto yy187; -yy722: - YYDEBUG(722, *YYCURSOR); +yy726: + YYDEBUG(726, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(723, *YYCURSOR); + YYDEBUG(727, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1078 "Zend/zend_language_scanner.l" { return T_DO; } -#line 6691 "Zend/zend_language_scanner.c" -yy724: - YYDEBUG(724, *YYCURSOR); +#line 6713 "Zend/zend_language_scanner.c" +yy728: + YYDEBUG(728, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(725, *YYCURSOR); + YYDEBUG(729, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1018 "Zend/zend_language_scanner.l" { return T_EXIT; } -#line 6704 "Zend/zend_language_scanner.c" -yy726: - YYDEBUG(726, *YYCURSOR); +#line 6726 "Zend/zend_language_scanner.c" +yy730: + YYDEBUG(730, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy733; - if (yych == 'l') goto yy733; + if (yych == 'L') goto yy737; + if (yych == 'l') goto yy737; goto yy187; -yy727: - YYDEBUG(727, *YYCURSOR); +yy731: + YYDEBUG(731, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy728; + if (yych == 'A') goto yy732; if (yych != 'a') goto yy187; -yy728: - YYDEBUG(728, *YYCURSOR); +yy732: + YYDEBUG(732, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'U') goto yy729; + if (yych == 'U') goto yy733; if (yych != 'u') goto yy187; -yy729: - YYDEBUG(729, *YYCURSOR); +yy733: + YYDEBUG(733, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy730; + if (yych == 'L') goto yy734; if (yych != 'l') goto yy187; -yy730: - YYDEBUG(730, *YYCURSOR); +yy734: + YYDEBUG(734, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy731; + if (yych == 'T') goto yy735; if (yych != 't') goto yy187; -yy731: - YYDEBUG(731, *YYCURSOR); +yy735: + YYDEBUG(735, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(732, *YYCURSOR); + YYDEBUG(736, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1126 "Zend/zend_language_scanner.l" { return T_DEFAULT; } -#line 6743 "Zend/zend_language_scanner.c" -yy733: - YYDEBUG(733, *YYCURSOR); +#line 6765 "Zend/zend_language_scanner.c" +yy737: + YYDEBUG(737, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy734; + if (yych == 'A') goto yy738; if (yych != 'a') goto yy187; -yy734: - YYDEBUG(734, *YYCURSOR); +yy738: + YYDEBUG(738, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy735; + if (yych == 'R') goto yy739; if (yych != 'r') goto yy187; -yy735: - YYDEBUG(735, *YYCURSOR); +yy739: + YYDEBUG(739, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy736; + if (yych == 'E') goto yy740; if (yych != 'e') goto yy187; -yy736: - YYDEBUG(736, *YYCURSOR); +yy740: + YYDEBUG(740, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(737, *YYCURSOR); + YYDEBUG(741, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1098 "Zend/zend_language_scanner.l" { return T_DECLARE; } -#line 6771 "Zend/zend_language_scanner.c" -yy738: - YYDEBUG(738, *YYCURSOR); +#line 6793 "Zend/zend_language_scanner.c" +yy742: + YYDEBUG(742, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy800; - if (yych == 'h') goto yy800; + if (yych == 'H') goto yy804; + if (yych == 'h') goto yy804; goto yy187; -yy739: - YYDEBUG(739, *YYCURSOR); +yy743: + YYDEBUG(743, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy794; - if (yych == 's') goto yy794; + if (yych == 'S') goto yy798; + if (yych == 's') goto yy798; goto yy187; -yy740: - YYDEBUG(740, *YYCURSOR); +yy744: + YYDEBUG(744, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'P') goto yy790; - if (yych == 'p') goto yy790; + if (yych == 'P') goto yy794; + if (yych == 'p') goto yy794; goto yy187; -yy741: - YYDEBUG(741, *YYCURSOR); +yy745: + YYDEBUG(745, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'D') goto yy756; - if (yych == 'd') goto yy756; + if (yych == 'D') goto yy760; + if (yych == 'd') goto yy760; goto yy187; -yy742: - YYDEBUG(742, *YYCURSOR); +yy746: + YYDEBUG(746, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy753; - if (yych == 'a') goto yy753; + if (yych == 'A') goto yy757; + if (yych == 'a') goto yy757; goto yy187; -yy743: - YYDEBUG(743, *YYCURSOR); +yy747: + YYDEBUG(747, *YYCURSOR); yych = *++YYCURSOR; if (yych <= 'T') { - if (yych == 'I') goto yy744; + if (yych == 'I') goto yy748; if (yych <= 'S') goto yy187; - goto yy745; + goto yy749; } else { if (yych <= 'i') { if (yych <= 'h') goto yy187; } else { - if (yych == 't') goto yy745; + if (yych == 't') goto yy749; goto yy187; } } -yy744: - YYDEBUG(744, *YYCURSOR); +yy748: + YYDEBUG(748, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy751; - if (yych == 't') goto yy751; + if (yych == 'T') goto yy755; + if (yych == 't') goto yy755; goto yy187; -yy745: - YYDEBUG(745, *YYCURSOR); +yy749: + YYDEBUG(749, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy746; + if (yych == 'E') goto yy750; if (yych != 'e') goto yy187; -yy746: - YYDEBUG(746, *YYCURSOR); +yy750: + YYDEBUG(750, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'N') goto yy747; + if (yych == 'N') goto yy751; if (yych != 'n') goto yy187; -yy747: - YYDEBUG(747, *YYCURSOR); +yy751: + YYDEBUG(751, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'D') goto yy748; + if (yych == 'D') goto yy752; if (yych != 'd') goto yy187; -yy748: - YYDEBUG(748, *YYCURSOR); +yy752: + YYDEBUG(752, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'S') goto yy749; + if (yych == 'S') goto yy753; if (yych != 's') goto yy187; -yy749: - YYDEBUG(749, *YYCURSOR); +yy753: + YYDEBUG(753, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(750, *YYCURSOR); + YYDEBUG(754, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1162 "Zend/zend_language_scanner.l" { return T_EXTENDS; } -#line 6855 "Zend/zend_language_scanner.c" -yy751: - YYDEBUG(751, *YYCURSOR); +#line 6877 "Zend/zend_language_scanner.c" +yy755: + YYDEBUG(755, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(752, *YYCURSOR); + YYDEBUG(756, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1014 "Zend/zend_language_scanner.l" { return T_EXIT; } -#line 6868 "Zend/zend_language_scanner.c" -yy753: - YYDEBUG(753, *YYCURSOR); +#line 6890 "Zend/zend_language_scanner.c" +yy757: + YYDEBUG(757, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy754; + if (yych == 'L') goto yy758; if (yych != 'l') goto yy187; -yy754: - YYDEBUG(754, *YYCURSOR); +yy758: + YYDEBUG(758, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(755, *YYCURSOR); + YYDEBUG(759, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1250 "Zend/zend_language_scanner.l" { return T_EVAL; } -#line 6886 "Zend/zend_language_scanner.c" -yy756: - YYDEBUG(756, *YYCURSOR); +#line 6908 "Zend/zend_language_scanner.c" +yy760: + YYDEBUG(760, *YYCURSOR); yych = *++YYCURSOR; YYDEBUG(-1, yych); switch (yych) { case 'D': - case 'd': goto yy757; + case 'd': goto yy761; case 'F': - case 'f': goto yy758; + case 'f': goto yy762; case 'I': - case 'i': goto yy759; + case 'i': goto yy763; case 'S': - case 's': goto yy760; + case 's': goto yy764; case 'W': - case 'w': goto yy761; + case 'w': goto yy765; default: goto yy187; } -yy757: - YYDEBUG(757, *YYCURSOR); +yy761: + YYDEBUG(761, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy783; - if (yych == 'e') goto yy783; + if (yych == 'E') goto yy787; + if (yych == 'e') goto yy787; goto yy187; -yy758: - YYDEBUG(758, *YYCURSOR); +yy762: + YYDEBUG(762, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy775; - if (yych == 'o') goto yy775; + if (yych == 'O') goto yy779; + if (yych == 'o') goto yy779; goto yy187; -yy759: - YYDEBUG(759, *YYCURSOR); +yy763: + YYDEBUG(763, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'F') goto yy773; - if (yych == 'f') goto yy773; + if (yych == 'F') goto yy777; + if (yych == 'f') goto yy777; goto yy187; -yy760: - YYDEBUG(760, *YYCURSOR); +yy764: + YYDEBUG(764, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'W') goto yy767; - if (yych == 'w') goto yy767; + if (yych == 'W') goto yy771; + if (yych == 'w') goto yy771; goto yy187; -yy761: - YYDEBUG(761, *YYCURSOR); +yy765: + YYDEBUG(765, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy762; + if (yych == 'H') goto yy766; if (yych != 'h') goto yy187; -yy762: - YYDEBUG(762, *YYCURSOR); +yy766: + YYDEBUG(766, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy763; + if (yych == 'I') goto yy767; if (yych != 'i') goto yy187; -yy763: - YYDEBUG(763, *YYCURSOR); +yy767: + YYDEBUG(767, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy764; + if (yych == 'L') goto yy768; if (yych != 'l') goto yy187; -yy764: - YYDEBUG(764, *YYCURSOR); +yy768: + YYDEBUG(768, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy765; + if (yych == 'E') goto yy769; if (yych != 'e') goto yy187; -yy765: - YYDEBUG(765, *YYCURSOR); +yy769: + YYDEBUG(769, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(766, *YYCURSOR); + YYDEBUG(770, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1074 "Zend/zend_language_scanner.l" { return T_ENDWHILE; } -#line 6960 "Zend/zend_language_scanner.c" -yy767: - YYDEBUG(767, *YYCURSOR); +#line 6982 "Zend/zend_language_scanner.c" +yy771: + YYDEBUG(771, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'I') goto yy768; + if (yych == 'I') goto yy772; if (yych != 'i') goto yy187; -yy768: - YYDEBUG(768, *YYCURSOR); +yy772: + YYDEBUG(772, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy769; + if (yych == 'T') goto yy773; if (yych != 't') goto yy187; -yy769: - YYDEBUG(769, *YYCURSOR); +yy773: + YYDEBUG(773, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy770; + if (yych == 'C') goto yy774; if (yych != 'c') goto yy187; -yy770: - YYDEBUG(770, *YYCURSOR); +yy774: + YYDEBUG(774, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy771; + if (yych == 'H') goto yy775; if (yych != 'h') goto yy187; -yy771: - YYDEBUG(771, *YYCURSOR); +yy775: + YYDEBUG(775, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(772, *YYCURSOR); + YYDEBUG(776, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1118 "Zend/zend_language_scanner.l" { return T_ENDSWITCH; } -#line 6993 "Zend/zend_language_scanner.c" -yy773: - YYDEBUG(773, *YYCURSOR); +#line 7015 "Zend/zend_language_scanner.c" +yy777: + YYDEBUG(777, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(774, *YYCURSOR); + YYDEBUG(778, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1062 "Zend/zend_language_scanner.l" { return T_ENDIF; } -#line 7006 "Zend/zend_language_scanner.c" -yy775: - YYDEBUG(775, *YYCURSOR); +#line 7028 "Zend/zend_language_scanner.c" +yy779: + YYDEBUG(779, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy776; + if (yych == 'R') goto yy780; if (yych != 'r') goto yy187; -yy776: - YYDEBUG(776, *YYCURSOR); +yy780: + YYDEBUG(780, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '^') { if (yych <= '@') { - if (yych <= '/') goto yy777; + if (yych <= '/') goto yy781; if (yych <= '9') goto yy186; } else { - if (yych == 'E') goto yy778; + if (yych == 'E') goto yy782; if (yych <= 'Z') goto yy186; } } else { if (yych <= 'd') { if (yych != '`') goto yy186; } else { - if (yych <= 'e') goto yy778; + if (yych <= 'e') goto yy782; if (yych <= 'z') goto yy186; if (yych >= 0x7F) goto yy186; } } -yy777: - YYDEBUG(777, *YYCURSOR); +yy781: + YYDEBUG(781, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1086 "Zend/zend_language_scanner.l" { return T_ENDFOR; } -#line 7039 "Zend/zend_language_scanner.c" -yy778: - YYDEBUG(778, *YYCURSOR); +#line 7061 "Zend/zend_language_scanner.c" +yy782: + YYDEBUG(782, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy779; + if (yych == 'A') goto yy783; if (yych != 'a') goto yy187; -yy779: - YYDEBUG(779, *YYCURSOR); +yy783: + YYDEBUG(783, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy780; + if (yych == 'C') goto yy784; if (yych != 'c') goto yy187; -yy780: - YYDEBUG(780, *YYCURSOR); +yy784: + YYDEBUG(784, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'H') goto yy781; + if (yych == 'H') goto yy785; if (yych != 'h') goto yy187; -yy781: - YYDEBUG(781, *YYCURSOR); +yy785: + YYDEBUG(785, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(782, *YYCURSOR); + YYDEBUG(786, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1094 "Zend/zend_language_scanner.l" { return T_ENDFOREACH; } -#line 7067 "Zend/zend_language_scanner.c" -yy783: - YYDEBUG(783, *YYCURSOR); +#line 7089 "Zend/zend_language_scanner.c" +yy787: + YYDEBUG(787, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'C') goto yy784; + if (yych == 'C') goto yy788; if (yych != 'c') goto yy187; -yy784: - YYDEBUG(784, *YYCURSOR); +yy788: + YYDEBUG(788, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'L') goto yy785; + if (yych == 'L') goto yy789; if (yych != 'l') goto yy187; -yy785: - YYDEBUG(785, *YYCURSOR); +yy789: + YYDEBUG(789, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'A') goto yy786; + if (yych == 'A') goto yy790; if (yych != 'a') goto yy187; -yy786: - YYDEBUG(786, *YYCURSOR); +yy790: + YYDEBUG(790, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'R') goto yy787; + if (yych == 'R') goto yy791; if (yych != 'r') goto yy187; -yy787: - YYDEBUG(787, *YYCURSOR); +yy791: + YYDEBUG(791, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy788; + if (yych == 'E') goto yy792; if (yych != 'e') goto yy187; -yy788: - YYDEBUG(788, *YYCURSOR); +yy792: + YYDEBUG(792, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(789, *YYCURSOR); + YYDEBUG(793, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1102 "Zend/zend_language_scanner.l" { return T_ENDDECLARE; } -#line 7105 "Zend/zend_language_scanner.c" -yy790: - YYDEBUG(790, *YYCURSOR); +#line 7127 "Zend/zend_language_scanner.c" +yy794: + YYDEBUG(794, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'T') goto yy791; + if (yych == 'T') goto yy795; if (yych != 't') goto yy187; -yy791: - YYDEBUG(791, *YYCURSOR); +yy795: + YYDEBUG(795, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'Y') goto yy792; + if (yych == 'Y') goto yy796; if (yych != 'y') goto yy187; -yy792: - YYDEBUG(792, *YYCURSOR); +yy796: + YYDEBUG(796, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(793, *YYCURSOR); + YYDEBUG(797, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1290 "Zend/zend_language_scanner.l" { return T_EMPTY; } -#line 7128 "Zend/zend_language_scanner.c" -yy794: - YYDEBUG(794, *YYCURSOR); +#line 7150 "Zend/zend_language_scanner.c" +yy798: + YYDEBUG(798, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'E') goto yy795; + if (yych == 'E') goto yy799; if (yych != 'e') goto yy187; -yy795: - YYDEBUG(795, *YYCURSOR); +yy799: + YYDEBUG(799, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '^') { if (yych <= '@') { - if (yych <= '/') goto yy796; + if (yych <= '/') goto yy800; if (yych <= '9') goto yy186; } else { - if (yych == 'I') goto yy797; + if (yych == 'I') goto yy801; if (yych <= 'Z') goto yy186; } } else { if (yych <= 'h') { if (yych != '`') goto yy186; } else { - if (yych <= 'i') goto yy797; + if (yych <= 'i') goto yy801; if (yych <= 'z') goto yy186; if (yych >= 0x7F) goto yy186; } } -yy796: - YYDEBUG(796, *YYCURSOR); +yy800: + YYDEBUG(800, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1066 "Zend/zend_language_scanner.l" { return T_ELSE; } -#line 7161 "Zend/zend_language_scanner.c" -yy797: - YYDEBUG(797, *YYCURSOR); +#line 7183 "Zend/zend_language_scanner.c" +yy801: + YYDEBUG(801, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'F') goto yy798; + if (yych == 'F') goto yy802; if (yych != 'f') goto yy187; -yy798: - YYDEBUG(798, *YYCURSOR); +yy802: + YYDEBUG(802, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(799, *YYCURSOR); + YYDEBUG(803, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1058 "Zend/zend_language_scanner.l" { return T_ELSEIF; } -#line 7179 "Zend/zend_language_scanner.c" -yy800: - YYDEBUG(800, *YYCURSOR); +#line 7201 "Zend/zend_language_scanner.c" +yy804: + YYDEBUG(804, *YYCURSOR); yych = *++YYCURSOR; - if (yych == 'O') goto yy801; + if (yych == 'O') goto yy805; if (yych != 'o') goto yy187; -yy801: - YYDEBUG(801, *YYCURSOR); +yy805: + YYDEBUG(805, *YYCURSOR); ++YYCURSOR; if (yybm[0+(yych = *YYCURSOR)] & 4) { goto yy186; } - YYDEBUG(802, *YYCURSOR); + YYDEBUG(806, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1142 "Zend/zend_language_scanner.l" { return T_ECHO; } -#line 7197 "Zend/zend_language_scanner.c" +#line 7219 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_LOOKING_FOR_PROPERTY: @@ -7232,39 +7254,39 @@ yyc_ST_LOOKING_FOR_PROPERTY: 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, }; - YYDEBUG(803, *YYCURSOR); + YYDEBUG(807, *YYCURSOR); YYFILL(2); yych = *YYCURSOR; if (yych <= '-') { if (yych <= '\r') { - if (yych <= 0x08) goto yy811; - if (yych <= '\n') goto yy805; - if (yych <= '\f') goto yy811; + if (yych <= 0x08) goto yy815; + if (yych <= '\n') goto yy809; + if (yych <= '\f') goto yy815; } else { - if (yych == ' ') goto yy805; - if (yych <= ',') goto yy811; - goto yy807; + if (yych == ' ') goto yy809; + if (yych <= ',') goto yy815; + goto yy811; } } else { if (yych <= '_') { - if (yych <= '@') goto yy811; - if (yych <= 'Z') goto yy809; - if (yych <= '^') goto yy811; - goto yy809; + if (yych <= '@') goto yy815; + if (yych <= 'Z') goto yy813; + if (yych <= '^') goto yy815; + goto yy813; } else { - if (yych <= '`') goto yy811; - if (yych <= 'z') goto yy809; - if (yych <= '~') goto yy811; - goto yy809; + if (yych <= '`') goto yy815; + if (yych <= 'z') goto yy813; + if (yych <= '~') goto yy815; + goto yy813; } } -yy805: - YYDEBUG(805, *YYCURSOR); +yy809: + YYDEBUG(809, *YYCURSOR); ++YYCURSOR; yych = *YYCURSOR; - goto yy817; -yy806: - YYDEBUG(806, *YYCURSOR); + goto yy821; +yy810: + YYDEBUG(810, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1175 "Zend/zend_language_scanner.l" { @@ -7272,13 +7294,13 @@ yy806: HANDLE_NEWLINES(yytext, yyleng); return T_WHITESPACE; } -#line 7276 "Zend/zend_language_scanner.c" -yy807: - YYDEBUG(807, *YYCURSOR); +#line 7298 "Zend/zend_language_scanner.c" +yy811: + YYDEBUG(811, *YYCURSOR); ++YYCURSOR; - if ((yych = *YYCURSOR) == '>') goto yy814; -yy808: - YYDEBUG(808, *YYCURSOR); + if ((yych = *YYCURSOR) == '>') goto yy818; +yy812: + YYDEBUG(812, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1192 "Zend/zend_language_scanner.l" { @@ -7286,14 +7308,14 @@ yy808: yy_pop_state(TSRMLS_C); goto restart; } -#line 7290 "Zend/zend_language_scanner.c" -yy809: - YYDEBUG(809, *YYCURSOR); +#line 7312 "Zend/zend_language_scanner.c" +yy813: + YYDEBUG(813, *YYCURSOR); ++YYCURSOR; yych = *YYCURSOR; - goto yy813; -yy810: - YYDEBUG(810, *YYCURSOR); + goto yy817; +yy814: + YYDEBUG(814, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1185 "Zend/zend_language_scanner.l" { @@ -7302,43 +7324,43 @@ yy810: zendlval->type = IS_STRING; return T_STRING; } -#line 7306 "Zend/zend_language_scanner.c" -yy811: - YYDEBUG(811, *YYCURSOR); +#line 7328 "Zend/zend_language_scanner.c" +yy815: + YYDEBUG(815, *YYCURSOR); yych = *++YYCURSOR; - goto yy808; -yy812: - YYDEBUG(812, *YYCURSOR); + goto yy812; +yy816: + YYDEBUG(816, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy813: - YYDEBUG(813, *YYCURSOR); +yy817: + YYDEBUG(817, *YYCURSOR); if (yybm[0+yych] & 64) { - goto yy812; + goto yy816; } - goto yy810; -yy814: - YYDEBUG(814, *YYCURSOR); + goto yy814; +yy818: + YYDEBUG(818, *YYCURSOR); ++YYCURSOR; - YYDEBUG(815, *YYCURSOR); + YYDEBUG(819, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); #line 1181 "Zend/zend_language_scanner.l" { return T_OBJECT_OPERATOR; } -#line 7331 "Zend/zend_language_scanner.c" -yy816: - YYDEBUG(816, *YYCURSOR); +#line 7353 "Zend/zend_language_scanner.c" +yy820: + YYDEBUG(820, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy817: - YYDEBUG(817, *YYCURSOR); +yy821: + YYDEBUG(821, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy816; + goto yy820; } - goto yy806; + goto yy810; } /* *********************************** */ yyc_ST_LOOKING_FOR_VARNAME: @@ -7377,74 +7399,74 @@ yyc_ST_LOOKING_FOR_VARNAME: 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, }; - YYDEBUG(818, *YYCURSOR); + YYDEBUG(822, *YYCURSOR); YYFILL(2); yych = *YYCURSOR; if (yych <= '_') { - if (yych <= '@') goto yy822; - if (yych <= 'Z') goto yy820; - if (yych <= '^') goto yy822; + if (yych <= '@') goto yy826; + if (yych <= 'Z') goto yy824; + if (yych <= '^') goto yy826; } else { - if (yych <= '`') goto yy822; - if (yych <= 'z') goto yy820; - if (yych <= '~') goto yy822; + if (yych <= '`') goto yy826; + if (yych <= 'z') goto yy824; + if (yych <= '~') goto yy826; } -yy820: - YYDEBUG(820, *YYCURSOR); +yy824: + YYDEBUG(824, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= '_') { if (yych <= '@') { - if (yych <= '/') goto yy821; - if (yych <= '9') goto yy824; + if (yych <= '/') goto yy825; + if (yych <= '9') goto yy828; } else { - if (yych <= '[') goto yy824; - if (yych >= '_') goto yy824; + if (yych <= '[') goto yy828; + if (yych >= '_') goto yy828; } } else { if (yych <= '|') { - if (yych <= '`') goto yy821; - if (yych <= 'z') goto yy824; + if (yych <= '`') goto yy825; + if (yych <= 'z') goto yy828; } else { - if (yych != '~') goto yy824; + if (yych != '~') goto yy828; } } -yy821: - YYDEBUG(821, *YYCURSOR); +yy825: + YYDEBUG(825, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1482 "Zend/zend_language_scanner.l" +#line 1490 "Zend/zend_language_scanner.l" { yyless(0); yy_pop_state(TSRMLS_C); yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); goto restart; } -#line 7423 "Zend/zend_language_scanner.c" -yy822: - YYDEBUG(822, *YYCURSOR); +#line 7445 "Zend/zend_language_scanner.c" +yy826: + YYDEBUG(826, *YYCURSOR); yych = *++YYCURSOR; - goto yy821; -yy823: - YYDEBUG(823, *YYCURSOR); + goto yy825; +yy827: + YYDEBUG(827, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy824: - YYDEBUG(824, *YYCURSOR); +yy828: + YYDEBUG(828, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy823; + goto yy827; } - if (yych == '[') goto yy826; - if (yych == '}') goto yy826; - YYDEBUG(825, *YYCURSOR); + if (yych == '[') goto yy830; + if (yych == '}') goto yy830; + YYDEBUG(829, *YYCURSOR); YYCURSOR = YYMARKER; - goto yy821; -yy826: - YYDEBUG(826, *YYCURSOR); + goto yy825; +yy830: + YYDEBUG(830, *YYCURSOR); ++YYCURSOR; - YYDEBUG(827, *YYCURSOR); + YYDEBUG(831, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1472 "Zend/zend_language_scanner.l" +#line 1480 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); zend_copy_value(zendlval, yytext, yyleng); @@ -7453,18 +7475,18 @@ yy826: yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); return T_STRING_VARNAME; } -#line 7457 "Zend/zend_language_scanner.c" +#line 7479 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_NOWDOC: - YYDEBUG(828, *YYCURSOR); + YYDEBUG(832, *YYCURSOR); YYFILL(1); yych = *YYCURSOR; - YYDEBUG(830, *YYCURSOR); + YYDEBUG(834, *YYCURSOR); ++YYCURSOR; - YYDEBUG(831, *YYCURSOR); + YYDEBUG(835, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2302 "Zend/zend_language_scanner.l" +#line 2310 "Zend/zend_language_scanner.l" { int newline = 0; @@ -7521,7 +7543,7 @@ nowdoc_scan_done: HANDLE_NEWLINES(yytext, yyleng - newline); return T_ENCAPSED_AND_WHITESPACE; } -#line 7525 "Zend/zend_language_scanner.c" +#line 7547 "Zend/zend_language_scanner.c" /* *********************************** */ yyc_ST_VAR_OFFSET: { @@ -7559,76 +7581,76 @@ yyc_ST_VAR_OFFSET: 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, }; - YYDEBUG(832, *YYCURSOR); + YYDEBUG(836, *YYCURSOR); YYFILL(3); yych = *YYCURSOR; if (yych <= '/') { if (yych <= ' ') { if (yych <= '\f') { - if (yych <= 0x08) goto yy846; - if (yych <= '\n') goto yy842; - goto yy846; + if (yych <= 0x08) goto yy850; + if (yych <= '\n') goto yy846; + goto yy850; } else { - if (yych <= '\r') goto yy842; - if (yych <= 0x1F) goto yy846; - goto yy842; + if (yych <= '\r') goto yy846; + if (yych <= 0x1F) goto yy850; + goto yy846; } } else { if (yych <= '$') { - if (yych <= '"') goto yy841; - if (yych <= '#') goto yy842; - goto yy837; - } else { - if (yych == '\'') goto yy842; + if (yych <= '"') goto yy845; + if (yych <= '#') goto yy846; goto yy841; + } else { + if (yych == '\'') goto yy846; + goto yy845; } } } else { if (yych <= '\\') { if (yych <= '@') { - if (yych <= '0') goto yy834; - if (yych <= '9') goto yy836; - goto yy841; + if (yych <= '0') goto yy838; + if (yych <= '9') goto yy840; + goto yy845; } else { - if (yych <= 'Z') goto yy844; - if (yych <= '[') goto yy841; - goto yy842; + if (yych <= 'Z') goto yy848; + if (yych <= '[') goto yy845; + goto yy846; } } else { if (yych <= '_') { - if (yych <= ']') goto yy839; - if (yych <= '^') goto yy841; - goto yy844; + if (yych <= ']') goto yy843; + if (yych <= '^') goto yy845; + goto yy848; } else { - if (yych <= '`') goto yy841; - if (yych <= 'z') goto yy844; - if (yych <= '~') goto yy841; - goto yy844; + if (yych <= '`') goto yy845; + if (yych <= 'z') goto yy848; + if (yych <= '~') goto yy845; + goto yy848; } } } -yy834: - YYDEBUG(834, *YYCURSOR); +yy838: + YYDEBUG(838, *YYCURSOR); yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if (yych <= 'W') { if (yych <= '9') { - if (yych >= '0') goto yy858; + if (yych >= '0') goto yy862; } else { - if (yych == 'B') goto yy855; + if (yych == 'B') goto yy859; } } else { if (yych <= 'b') { - if (yych <= 'X') goto yy857; - if (yych >= 'b') goto yy855; + if (yych <= 'X') goto yy861; + if (yych >= 'b') goto yy859; } else { - if (yych == 'x') goto yy857; + if (yych == 'x') goto yy861; } } -yy835: - YYDEBUG(835, *YYCURSOR); +yy839: + YYDEBUG(839, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1558 "Zend/zend_language_scanner.l" +#line 1566 "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)) { ZVAL_LONG(zendlval, strtol(yytext, NULL, 10)); @@ -7637,81 +7659,81 @@ yy835: } return T_NUM_STRING; } -#line 7641 "Zend/zend_language_scanner.c" -yy836: - YYDEBUG(836, *YYCURSOR); +#line 7663 "Zend/zend_language_scanner.c" +yy840: + YYDEBUG(840, *YYCURSOR); yych = *++YYCURSOR; - goto yy854; -yy837: - YYDEBUG(837, *YYCURSOR); + goto yy858; +yy841: + YYDEBUG(841, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) <= '_') { - if (yych <= '@') goto yy838; - if (yych <= 'Z') goto yy850; - if (yych >= '_') goto yy850; + if (yych <= '@') goto yy842; + if (yych <= 'Z') goto yy854; + if (yych >= '_') goto yy854; } else { - if (yych <= '`') goto yy838; - if (yych <= 'z') goto yy850; - if (yych >= 0x7F) goto yy850; + if (yych <= '`') goto yy842; + if (yych <= 'z') goto yy854; + if (yych >= 0x7F) goto yy854; } -yy838: - YYDEBUG(838, *YYCURSOR); +yy842: + YYDEBUG(842, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1834 "Zend/zend_language_scanner.l" +#line 1842 "Zend/zend_language_scanner.l" { /* Only '[' can be valid, but returning other tokens will allow a more explicit parse error */ return yytext[0]; } -#line 7666 "Zend/zend_language_scanner.c" -yy839: - YYDEBUG(839, *YYCURSOR); +#line 7688 "Zend/zend_language_scanner.c" +yy843: + YYDEBUG(843, *YYCURSOR); ++YYCURSOR; - YYDEBUG(840, *YYCURSOR); + YYDEBUG(844, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1829 "Zend/zend_language_scanner.l" +#line 1837 "Zend/zend_language_scanner.l" { yy_pop_state(TSRMLS_C); return ']'; } -#line 7677 "Zend/zend_language_scanner.c" -yy841: - YYDEBUG(841, *YYCURSOR); +#line 7699 "Zend/zend_language_scanner.c" +yy845: + YYDEBUG(845, *YYCURSOR); yych = *++YYCURSOR; - goto yy838; -yy842: - YYDEBUG(842, *YYCURSOR); + goto yy842; +yy846: + YYDEBUG(846, *YYCURSOR); ++YYCURSOR; - YYDEBUG(843, *YYCURSOR); + YYDEBUG(847, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1839 "Zend/zend_language_scanner.l" +#line 1847 "Zend/zend_language_scanner.l" { /* Invalid rule to return a more explicit parse error with proper line number */ yyless(0); yy_pop_state(TSRMLS_C); return T_ENCAPSED_AND_WHITESPACE; } -#line 7694 "Zend/zend_language_scanner.c" -yy844: - YYDEBUG(844, *YYCURSOR); +#line 7716 "Zend/zend_language_scanner.c" +yy848: + YYDEBUG(848, *YYCURSOR); ++YYCURSOR; yych = *YYCURSOR; - goto yy849; -yy845: - YYDEBUG(845, *YYCURSOR); + goto yy853; +yy849: + YYDEBUG(849, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1846 "Zend/zend_language_scanner.l" +#line 1854 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, yytext, yyleng); zendlval->type = IS_STRING; return T_STRING; } -#line 7709 "Zend/zend_language_scanner.c" -yy846: - YYDEBUG(846, *YYCURSOR); +#line 7731 "Zend/zend_language_scanner.c" +yy850: + YYDEBUG(850, *YYCURSOR); ++YYCURSOR; - YYDEBUG(847, *YYCURSOR); + YYDEBUG(851, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2360 "Zend/zend_language_scanner.l" +#line 2368 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { return 0; @@ -7720,116 +7742,116 @@ yy846: zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); goto restart; } -#line 7724 "Zend/zend_language_scanner.c" -yy848: - YYDEBUG(848, *YYCURSOR); +#line 7746 "Zend/zend_language_scanner.c" +yy852: + YYDEBUG(852, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy849: - YYDEBUG(849, *YYCURSOR); +yy853: + YYDEBUG(853, *YYCURSOR); if (yybm[0+yych] & 16) { - goto yy848; + goto yy852; } - goto yy845; -yy850: - YYDEBUG(850, *YYCURSOR); + goto yy849; +yy854: + YYDEBUG(854, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(851, *YYCURSOR); + YYDEBUG(855, *YYCURSOR); if (yych <= '^') { if (yych <= '9') { - if (yych >= '0') goto yy850; + if (yych >= '0') goto yy854; } else { - if (yych <= '@') goto yy852; - if (yych <= 'Z') goto yy850; + if (yych <= '@') goto yy856; + if (yych <= 'Z') goto yy854; } } else { if (yych <= '`') { - if (yych <= '_') goto yy850; + if (yych <= '_') goto yy854; } else { - if (yych <= 'z') goto yy850; - if (yych >= 0x7F) goto yy850; + if (yych <= 'z') goto yy854; + if (yych >= 0x7F) goto yy854; } } -yy852: - YYDEBUG(852, *YYCURSOR); +yy856: + YYDEBUG(856, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1823 "Zend/zend_language_scanner.l" +#line 1831 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); zendlval->type = IS_STRING; return T_VARIABLE; } -#line 7766 "Zend/zend_language_scanner.c" -yy853: - YYDEBUG(853, *YYCURSOR); +#line 7788 "Zend/zend_language_scanner.c" +yy857: + YYDEBUG(857, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; -yy854: - YYDEBUG(854, *YYCURSOR); +yy858: + YYDEBUG(858, *YYCURSOR); if (yybm[0+yych] & 32) { - goto yy853; + goto yy857; } - goto yy835; -yy855: - YYDEBUG(855, *YYCURSOR); + goto yy839; +yy859: + YYDEBUG(859, *YYCURSOR); yych = *++YYCURSOR; if (yybm[0+yych] & 128) { - goto yy863; + goto yy867; } -yy856: - YYDEBUG(856, *YYCURSOR); +yy860: + YYDEBUG(860, *YYCURSOR); YYCURSOR = YYMARKER; - goto yy835; -yy857: - YYDEBUG(857, *YYCURSOR); + goto yy839; +yy861: + YYDEBUG(861, *YYCURSOR); yych = *++YYCURSOR; if (yybm[0+yych] & 64) { - goto yy861; + goto yy865; } - goto yy856; -yy858: - YYDEBUG(858, *YYCURSOR); + goto yy860; +yy862: + YYDEBUG(862, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(859, *YYCURSOR); - if (yych <= '/') goto yy860; - if (yych <= '9') goto yy858; -yy860: - YYDEBUG(860, *YYCURSOR); + YYDEBUG(863, *YYCURSOR); + if (yych <= '/') goto yy864; + if (yych <= '9') goto yy862; +yy864: + YYDEBUG(864, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1567 "Zend/zend_language_scanner.l" +#line 1575 "Zend/zend_language_scanner.l" { /* Offset must be treated as a string */ ZVAL_STRINGL(zendlval, yytext, yyleng, 1); return T_NUM_STRING; } -#line 7811 "Zend/zend_language_scanner.c" -yy861: - YYDEBUG(861, *YYCURSOR); +#line 7833 "Zend/zend_language_scanner.c" +yy865: + YYDEBUG(865, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(862, *YYCURSOR); + YYDEBUG(866, *YYCURSOR); if (yybm[0+yych] & 64) { - goto yy861; + goto yy865; } - goto yy860; -yy863: - YYDEBUG(863, *YYCURSOR); + goto yy864; +yy867: + YYDEBUG(867, *YYCURSOR); ++YYCURSOR; YYFILL(1); yych = *YYCURSOR; - YYDEBUG(864, *YYCURSOR); + YYDEBUG(868, *YYCURSOR); if (yybm[0+yych] & 128) { - goto yy863; + goto yy867; } - goto yy860; + goto yy864; } } -#line 2369 "Zend/zend_language_scanner.l" +#line 2377 "Zend/zend_language_scanner.l" } diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index ccf8a4ca00..4f50658a59 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -1383,6 +1383,14 @@ NEWLINE ("\r"|"\n"|"\r\n") return T_MUL_EQUAL; } +"*\*" { + return T_POW; +} + +"*\*=" { + return T_POW_EQUAL; +} + "/=" { return T_DIV_EQUAL; } diff --git a/Zend/zend_language_scanner_defs.h b/Zend/zend_language_scanner_defs.h index 70ce8b890c..5926e3c61d 100644 --- a/Zend/zend_language_scanner_defs.h +++ b/Zend/zend_language_scanner_defs.h @@ -1,4 +1,4 @@ -/* Generated by re2c 0.13.5 on Sun Dec 22 13:03:33 2013 */ +/* Generated by re2c 0.13.5 */ #line 3 "Zend/zend_language_scanner_defs.h" enum YYCONDTYPE { diff --git a/Zend/zend_opcode.c b/Zend/zend_opcode.c index af64e5a7f9..457f08f313 100644 --- a/Zend/zend_opcode.c +++ b/Zend/zend_opcode.c @@ -768,6 +768,9 @@ ZEND_API binary_op_type get_binary_op(int opcode) case ZEND_ASSIGN_MUL: return (binary_op_type) mul_function; break; + case ZEND_POW: + return (binary_op_type) pow_function; + break; case ZEND_DIV: case ZEND_ASSIGN_DIV: return (binary_op_type) div_function; diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index 3434694f4c..03dbb15264 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -963,6 +963,87 @@ ZEND_API int mul_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* {{{ * } /* }}} */ +ZEND_API int pow_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) +{ + zval op1_copy, op2_copy; + int converted = 0; + + while (1) { + switch (TYPE_PAIR(Z_TYPE_P(op1), Z_TYPE_P(op2))) { + case TYPE_PAIR(IS_LONG, IS_LONG): + if (Z_LVAL_P(op2) >= 0) { + long l1 = 1, l2 = Z_LVAL_P(op1), i = Z_LVAL_P(op2); + + if (i == 0) { + ZVAL_LONG(result, 1L); + return SUCCESS; + } else if (l2 == 0) { + ZVAL_LONG(result, 0); + return SUCCESS; + } + + while (i >= 1) { + long overflow; + double dval = 0.0; + + if (i % 2) { + --i; + ZEND_SIGNED_MULTIPLY_LONG(l1, l2, l1, dval, overflow); + if (overflow) { + ZVAL_DOUBLE(result, dval * pow(l2, i)); + return SUCCESS; + } + } else { + i /= 2; + ZEND_SIGNED_MULTIPLY_LONG(l2, l2, l2, dval, overflow); + if (overflow) { + ZVAL_DOUBLE(result, (double)l1 * pow(dval, i)); + return SUCCESS; + } + } + } + /* i == 0 */ + ZVAL_LONG(result, l1); + } else { + ZVAL_DOUBLE(result, pow((double)Z_LVAL_P(op1), (double)Z_LVAL_P(op2))); + } + return SUCCESS; + + case TYPE_PAIR(IS_LONG, IS_DOUBLE): + ZVAL_DOUBLE(result, pow((double)Z_LVAL_P(op1), Z_DVAL_P(op2))); + return SUCCESS; + + case TYPE_PAIR(IS_DOUBLE, IS_LONG): + ZVAL_DOUBLE(result, pow(Z_DVAL_P(op1), (double)Z_LVAL_P(op2))); + return SUCCESS; + + case TYPE_PAIR(IS_DOUBLE, IS_DOUBLE): + ZVAL_DOUBLE(result, pow(Z_DVAL_P(op1), Z_DVAL_P(op2))); + return SUCCESS; + + default: + if (!converted) { + ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_POW); + + if (Z_TYPE_P(op1) == IS_ARRAY) { + ZVAL_LONG(op1, 0); + } else { + zendi_convert_scalar_to_number(op1, op1_copy, result); + } + if (Z_TYPE_P(op2) == IS_ARRAY) { + ZVAL_LONG(op2, 0); + } else { + zendi_convert_scalar_to_number(op2, op2_copy, result); + } + converted = 1; + } else { + zend_error(E_ERROR, "Unsupported operand types"); + return FAILURE; + } + } + } +} + ZEND_API int div_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* {{{ */ { zval op1_copy, op2_copy; diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h index cfc84063e4..1fab481269 100644 --- a/Zend/zend_operators.h +++ b/Zend/zend_operators.h @@ -47,6 +47,7 @@ BEGIN_EXTERN_C() ZEND_API int add_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); ZEND_API int sub_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); ZEND_API int mul_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); +ZEND_API int pow_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); ZEND_API int div_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); ZEND_API int mod_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); ZEND_API int boolean_xor_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 1e8a831551..713d6fadee 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -5659,4 +5659,24 @@ ZEND_VM_HANDLER(163, ZEND_FAST_RET, ANY, ANY) } } +ZEND_VM_HANDLER(166, ZEND_POW, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV) +{ + USE_OPLINE + zend_free_op free_op1, free_op2; + + SAVE_OPLINE(); + pow_function(&EX_T(opline->result.var).tmp_var, + GET_OP1_ZVAL_PTR(BP_VAR_R), + GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC); + FREE_OP1(); + FREE_OP2(); + CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); +} + +ZEND_VM_HANDLER(167, ZEND_ASSIGN_POW, VAR|UNUSED|CV, CONST|TMP|VAR|UNUSED|CV) +{ + ZEND_VM_DISPATCH_TO_HELPER_EX(zend_binary_assign_op_helper, binary_op,pow_function); +} + ZEND_VM_EXPORT_HELPER(zend_do_fcall, zend_do_fcall_common_helper) diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 7e613cd6e8..2593c26f43 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -4492,6 +4492,21 @@ static int ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLE ZEND_VM_RETURN(); } +static int ZEND_FASTCALL ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + USE_OPLINE + + + SAVE_OPLINE(); + pow_function(&EX_T(opline->result.var).tmp_var, + opline->op1.zv, + opline->op2.zv TSRMLS_CC); + + + CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); +} + static int ZEND_FASTCALL ZEND_ADD_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -5179,6 +5194,21 @@ static int ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ ZEND_VM_RETURN(); } +static int ZEND_FASTCALL ZEND_POW_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + USE_OPLINE + zend_free_op free_op2; + + SAVE_OPLINE(); + pow_function(&EX_T(opline->result.var).tmp_var, + opline->op1.zv, + _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC); + + zval_dtor(free_op2.var); + CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); +} + static int ZEND_FASTCALL ZEND_ADD_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -6192,6 +6222,21 @@ static int ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ ZEND_VM_RETURN(); } +static int ZEND_FASTCALL ZEND_POW_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + USE_OPLINE + zend_free_op free_op2; + + SAVE_OPLINE(); + pow_function(&EX_T(opline->result.var).tmp_var, + opline->op1.zv, + _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC); + + zval_ptr_dtor_nogc(&free_op2.var); + CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); +} + static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int type, ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -7660,6 +7705,21 @@ static int ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_A ZEND_VM_RETURN(); } +static int ZEND_FASTCALL ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + USE_OPLINE + + + SAVE_OPLINE(); + pow_function(&EX_T(opline->result.var).tmp_var, + opline->op1.zv, + _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC); + + + CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); +} + static int ZEND_FASTCALL ZEND_BW_NOT_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -9709,6 +9769,21 @@ static int ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ ZEND_VM_RETURN(); } +static int ZEND_FASTCALL ZEND_POW_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + USE_OPLINE + zend_free_op free_op1; + + SAVE_OPLINE(); + pow_function(&EX_T(opline->result.var).tmp_var, + _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC), + opline->op2.zv TSRMLS_CC); + zval_dtor(free_op1.var); + + CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); +} + static int ZEND_FASTCALL ZEND_ADD_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -10398,6 +10473,21 @@ static int ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_AR ZEND_VM_RETURN(); } +static int ZEND_FASTCALL ZEND_POW_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + USE_OPLINE + zend_free_op free_op1, free_op2; + + SAVE_OPLINE(); + pow_function(&EX_T(opline->result.var).tmp_var, + _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC), + _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC); + zval_dtor(free_op1.var); + zval_dtor(free_op2.var); + CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); +} + static int ZEND_FASTCALL ZEND_ADD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -11413,6 +11503,21 @@ static int ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR ZEND_VM_RETURN(); } +static int ZEND_FASTCALL ZEND_POW_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + USE_OPLINE + zend_free_op free_op1, free_op2; + + SAVE_OPLINE(); + pow_function(&EX_T(opline->result.var).tmp_var, + _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC), + _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC); + zval_dtor(free_op1.var); + zval_ptr_dtor_nogc(&free_op2.var); + CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); +} + static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_UNUSED(int type, ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -12678,6 +12783,21 @@ static int ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARG ZEND_VM_RETURN(); } +static int ZEND_FASTCALL ZEND_POW_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + USE_OPLINE + zend_free_op free_op1; + + SAVE_OPLINE(); + pow_function(&EX_T(opline->result.var).tmp_var, + _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC), + _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC); + zval_dtor(free_op1.var); + + CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); +} + static int ZEND_FASTCALL ZEND_BW_NOT_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -16575,6 +16695,26 @@ static int ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ ZEND_VM_RETURN(); } +static int ZEND_FASTCALL ZEND_POW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + USE_OPLINE + zend_free_op free_op1; + + SAVE_OPLINE(); + pow_function(&EX_T(opline->result.var).tmp_var, + _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC), + opline->op2.zv TSRMLS_CC); + zval_ptr_dtor_nogc(&free_op1.var); + + CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); +} + +static int ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + return zend_binary_assign_op_helper_SPEC_VAR_CONST(pow_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); +} + static int ZEND_FASTCALL ZEND_ADD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -18645,6 +18785,26 @@ static int ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_AR ZEND_VM_RETURN(); } +static int ZEND_FASTCALL ZEND_POW_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + USE_OPLINE + zend_free_op free_op1, free_op2; + + SAVE_OPLINE(); + pow_function(&EX_T(opline->result.var).tmp_var, + _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC), + _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC); + zval_ptr_dtor_nogc(&free_op1.var); + zval_dtor(free_op2.var); + CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); +} + +static int ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + return zend_binary_assign_op_helper_SPEC_VAR_TMP(pow_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); +} + static int ZEND_FASTCALL ZEND_ADD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -21096,6 +21256,26 @@ static int ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR ZEND_VM_RETURN(); } +static int ZEND_FASTCALL ZEND_POW_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + USE_OPLINE + zend_free_op free_op1, free_op2; + + SAVE_OPLINE(); + pow_function(&EX_T(opline->result.var).tmp_var, + _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC), + _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC); + zval_ptr_dtor_nogc(&free_op1.var); + zval_ptr_dtor_nogc(&free_op2.var); + CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); +} + +static int ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + return zend_binary_assign_op_helper_SPEC_VAR_VAR(pow_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); +} + static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -22243,6 +22423,11 @@ static int ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER ZEND_VM_RETURN(); } +static int ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(pow_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); +} + static int ZEND_FASTCALL ZEND_ADD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -24362,6 +24547,26 @@ static int ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARG ZEND_VM_RETURN(); } +static int ZEND_FASTCALL ZEND_POW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + USE_OPLINE + zend_free_op free_op1; + + SAVE_OPLINE(); + pow_function(&EX_T(opline->result.var).tmp_var, + _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC), + _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC); + zval_ptr_dtor_nogc(&free_op1.var); + + CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); +} + +static int ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + return zend_binary_assign_op_helper_SPEC_VAR_CV(pow_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); +} + static int ZEND_FASTCALL ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -25854,6 +26059,11 @@ static int ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDL ZEND_VM_RETURN(); } +static int ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(pow_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); +} + static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMP(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -27163,6 +27373,11 @@ static int ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER ZEND_VM_RETURN(); } +static int ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(pow_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); +} + static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_VAR(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -28473,6 +28688,11 @@ static int ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER ZEND_VM_RETURN(); } +static int ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(pow_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); +} + static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_UNUSED(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -28897,6 +29117,11 @@ static int ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HAND ZEND_VM_RETURN(); } +static int ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(pow_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); +} + static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -30203,6 +30428,11 @@ static int ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ ZEND_VM_RETURN(); } +static int ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + return zend_binary_assign_op_helper_SPEC_UNUSED_CV(pow_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); +} + static int ZEND_FASTCALL ZEND_BW_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -33699,6 +33929,26 @@ static int ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_A ZEND_VM_RETURN(); } +static int ZEND_FASTCALL ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + USE_OPLINE + + + SAVE_OPLINE(); + pow_function(&EX_T(opline->result.var).tmp_var, + _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC), + opline->op2.zv TSRMLS_CC); + + + CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); +} + +static int ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + return zend_binary_assign_op_helper_SPEC_CV_CONST(pow_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); +} + static int ZEND_FASTCALL ZEND_ADD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -35630,6 +35880,26 @@ static int ZEND_FASTCALL ZEND_YIELD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARG ZEND_VM_RETURN(); } +static int ZEND_FASTCALL ZEND_POW_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + USE_OPLINE + zend_free_op free_op2; + + SAVE_OPLINE(); + pow_function(&EX_T(opline->result.var).tmp_var, + _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC), + _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC); + + zval_dtor(free_op2.var); + CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); +} + +static int ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + return zend_binary_assign_op_helper_SPEC_CV_TMP(pow_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); +} + static int ZEND_FASTCALL ZEND_ADD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -37941,6 +38211,26 @@ static int ZEND_FASTCALL ZEND_YIELD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG ZEND_VM_RETURN(); } +static int ZEND_FASTCALL ZEND_POW_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + USE_OPLINE + zend_free_op free_op2; + + SAVE_OPLINE(); + pow_function(&EX_T(opline->result.var).tmp_var, + _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC), + _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC); + + zval_ptr_dtor_nogc(&free_op2.var); + CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); +} + +static int ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + return zend_binary_assign_op_helper_SPEC_CV_VAR(pow_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); +} + static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -38939,6 +39229,11 @@ static int ZEND_FASTCALL ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ ZEND_VM_RETURN(); } +static int ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + return zend_binary_assign_op_helper_SPEC_CV_UNUSED(pow_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); +} + static int ZEND_FASTCALL ZEND_ADD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -40918,6 +41213,26 @@ static int ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS ZEND_VM_RETURN(); } +static int ZEND_FASTCALL ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + USE_OPLINE + + + SAVE_OPLINE(); + pow_function(&EX_T(opline->result.var).tmp_var, + _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC), + _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC); + + + CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); +} + +static int ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + return zend_binary_assign_op_helper_SPEC_CV_CV(pow_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); +} + static int ZEND_FASTCALL ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_error_noreturn(E_ERROR, "Invalid opcode %d/%d/%d.", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type); @@ -45078,6 +45393,56 @@ void zend_init_opcodes_handlers(void) ZEND_SEND_UNPACK_SPEC_HANDLER, ZEND_SEND_UNPACK_SPEC_HANDLER, ZEND_SEND_UNPACK_SPEC_HANDLER, + ZEND_POW_SPEC_CONST_CONST_HANDLER, + ZEND_POW_SPEC_CONST_TMP_HANDLER, + ZEND_POW_SPEC_CONST_VAR_HANDLER, + ZEND_NULL_HANDLER, + ZEND_POW_SPEC_CONST_CV_HANDLER, + ZEND_POW_SPEC_TMP_CONST_HANDLER, + ZEND_POW_SPEC_TMP_TMP_HANDLER, + ZEND_POW_SPEC_TMP_VAR_HANDLER, + ZEND_NULL_HANDLER, + ZEND_POW_SPEC_TMP_CV_HANDLER, + ZEND_POW_SPEC_VAR_CONST_HANDLER, + ZEND_POW_SPEC_VAR_TMP_HANDLER, + ZEND_POW_SPEC_VAR_VAR_HANDLER, + ZEND_NULL_HANDLER, + ZEND_POW_SPEC_VAR_CV_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, + ZEND_POW_SPEC_CV_CONST_HANDLER, + ZEND_POW_SPEC_CV_TMP_HANDLER, + ZEND_POW_SPEC_CV_VAR_HANDLER, + ZEND_NULL_HANDLER, + ZEND_POW_SPEC_CV_CV_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, + ZEND_NULL_HANDLER, + ZEND_ASSIGN_POW_SPEC_VAR_CONST_HANDLER, + ZEND_ASSIGN_POW_SPEC_VAR_TMP_HANDLER, + ZEND_ASSIGN_POW_SPEC_VAR_VAR_HANDLER, + ZEND_ASSIGN_POW_SPEC_VAR_UNUSED_HANDLER, + ZEND_ASSIGN_POW_SPEC_VAR_CV_HANDLER, + ZEND_ASSIGN_POW_SPEC_UNUSED_CONST_HANDLER, + ZEND_ASSIGN_POW_SPEC_UNUSED_TMP_HANDLER, + ZEND_ASSIGN_POW_SPEC_UNUSED_VAR_HANDLER, + ZEND_ASSIGN_POW_SPEC_UNUSED_UNUSED_HANDLER, + ZEND_ASSIGN_POW_SPEC_UNUSED_CV_HANDLER, + ZEND_ASSIGN_POW_SPEC_CV_CONST_HANDLER, + ZEND_ASSIGN_POW_SPEC_CV_TMP_HANDLER, + ZEND_ASSIGN_POW_SPEC_CV_VAR_HANDLER, + ZEND_ASSIGN_POW_SPEC_CV_UNUSED_HANDLER, + ZEND_ASSIGN_POW_SPEC_CV_CV_HANDLER, ZEND_NULL_HANDLER }; zend_opcode_handlers = (opcode_handler_t*)labels; diff --git a/Zend/zend_vm_opcodes.c b/Zend/zend_vm_opcodes.c index d6f51cce5c..23edabc47f 100644 --- a/Zend/zend_vm_opcodes.c +++ b/Zend/zend_vm_opcodes.c @@ -21,7 +21,7 @@ #include #include -const char *zend_vm_opcodes_map[166] = { +const char *zend_vm_opcodes_map[168] = { "ZEND_NOP", "ZEND_ADD", "ZEND_SUB", @@ -188,6 +188,8 @@ const char *zend_vm_opcodes_map[166] = { "ZEND_FAST_RET", "ZEND_RECV_VARIADIC", "ZEND_SEND_UNPACK", + "ZEND_POW", + "ZEND_ASSIGN_POW", }; ZEND_API const char* zend_get_opcode_name(zend_uchar opcode) { diff --git a/Zend/zend_vm_opcodes.h b/Zend/zend_vm_opcodes.h index 0f75196ffb..f9c30ca126 100644 --- a/Zend/zend_vm_opcodes.h +++ b/Zend/zend_vm_opcodes.h @@ -171,5 +171,7 @@ ZEND_API const char *zend_get_opcode_name(zend_uchar opcode); #define ZEND_FAST_RET 163 #define ZEND_RECV_VARIADIC 164 #define ZEND_SEND_UNPACK 165 +#define ZEND_POW 166 +#define ZEND_ASSIGN_POW 167 #endif -- cgit v1.2.1 From 363ff60475d93716722034b8f7a2486229bf4cfb Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Thu, 6 Feb 2014 21:31:40 +0100 Subject: Fixed memory leak in pow operator --- Zend/zend_operators.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'Zend') diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index 03dbb15264..f022909bc3 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -1026,12 +1026,14 @@ ZEND_API int pow_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_POW); if (Z_TYPE_P(op1) == IS_ARRAY) { - ZVAL_LONG(op1, 0); + ZVAL_LONG(result, 0); + return SUCCESS; } else { zendi_convert_scalar_to_number(op1, op1_copy, result); } if (Z_TYPE_P(op2) == IS_ARRAY) { - ZVAL_LONG(op2, 0); + ZVAL_LONG(result, 1L); + return SUCCESS; } else { zendi_convert_scalar_to_number(op2, op2_copy, result); } -- cgit v1.2.1 From 1e752ce9c57310cced0a5ba8399778c1f500f2b4 Mon Sep 17 00:00:00 2001 From: Sara Golemon Date: Mon, 17 Feb 2014 19:13:00 -0800 Subject: Add __debugInfo() magic method class Foo { private $val = 'Random, meaningless data'; public function count() { return 42; } public function __debugInfo() { return ['count' => $this->count()]; } } $f = new Foo; var_dump($f); --- Zend/tests/debug_info.phpt | 26 ++++++++++++++++++++++++++ Zend/zend.h | 1 + Zend/zend_API.c | 13 ++++++++++++- Zend/zend_API.h | 1 + Zend/zend_compile.c | 12 ++++++++++++ Zend/zend_compile.h | 1 + Zend/zend_object_handlers.c | 35 ++++++++++++++++++++++++++++++++--- 7 files changed, 85 insertions(+), 4 deletions(-) create mode 100644 Zend/tests/debug_info.phpt (limited to 'Zend') diff --git a/Zend/tests/debug_info.phpt b/Zend/tests/debug_info.phpt new file mode 100644 index 0000000000..c7c9f23be5 --- /dev/null +++ b/Zend/tests/debug_info.phpt @@ -0,0 +1,26 @@ +--TEST-- +Testing __debugInfo() magic method +--FILE-- +1, "\0*\0b"=>2, "\0Foo\0c"=>3]; + } +} + +$f = new Foo; +var_dump($f); +--EXPECT-- +object(Foo)#1 (3) { + ["a"]=> + int(1) + ["b":protected]=> + int(2) + ["c":"Foo":private]=> + int(3) +} diff --git a/Zend/zend.h b/Zend/zend.h index ac2b28a1ef..82e81370e8 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -502,6 +502,7 @@ struct _zend_class_entry { union _zend_function *__call; union _zend_function *__callstatic; union _zend_function *__tostring; + union _zend_function *__debugInfo; union _zend_function *serialize_func; union _zend_function *unserialize_func; diff --git a/Zend/zend_API.c b/Zend/zend_API.c index c17af98136..ed13c6a7d6 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -2018,6 +2018,9 @@ ZEND_API void zend_check_magic_method_implementation(const zend_class_entry *ce, !memcmp(lcname, ZEND_TOSTRING_FUNC_NAME, sizeof(ZEND_TOSTRING_FUNC_NAME)-1) && fptr->common.num_args != 0 ) { zend_error(error_type, "Method %s::%s() cannot take arguments", ce->name, ZEND_TOSTRING_FUNC_NAME); + } else if (name_len == sizeof(ZEND_DEBUGINFO_FUNC_NAME) - 1 && + !memcmp(lcname, ZEND_DEBUGINFO_FUNC_NAME, sizeof(ZEND_DEBUGINFO_FUNC_NAME)-1) && fptr->common.num_args != 0) { + zend_error(error_type, "Method %s::%s() cannot take arguments", ce->name, ZEND_DEBUGINFO_FUNC_NAME); } } /* }}} */ @@ -2031,7 +2034,7 @@ ZEND_API int zend_register_functions(zend_class_entry *scope, const zend_functio int count=0, unload=0; HashTable *target_function_table = function_table; int error_type; - zend_function *ctor = NULL, *dtor = NULL, *clone = NULL, *__get = NULL, *__set = NULL, *__unset = NULL, *__isset = NULL, *__call = NULL, *__callstatic = NULL, *__tostring = NULL; + zend_function *ctor = NULL, *dtor = NULL, *clone = NULL, *__get = NULL, *__set = NULL, *__unset = NULL, *__isset = NULL, *__call = NULL, *__callstatic = NULL, *__tostring = NULL, *__debugInfo = NULL; const char *lowercase_name; int fname_len; const char *lc_class_name = NULL; @@ -2180,6 +2183,8 @@ ZEND_API int zend_register_functions(zend_class_entry *scope, const zend_functio __unset = reg_function; } else if ((fname_len == sizeof(ZEND_ISSET_FUNC_NAME)-1) && !memcmp(lowercase_name, ZEND_ISSET_FUNC_NAME, sizeof(ZEND_ISSET_FUNC_NAME) - 1)) { __isset = reg_function; + } else if ((fname_len == sizeof(ZEND_DEBUGINFO_FUNC_NAME)-1) && !memcmp(lowercase_name, ZEND_DEBUGINFO_FUNC_NAME, sizeof(ZEND_DEBUGINFO_FUNC_NAME) - 1)) { + __debugInfo = reg_function; } else { reg_function = NULL; } @@ -2218,6 +2223,7 @@ ZEND_API int zend_register_functions(zend_class_entry *scope, const zend_functio scope->__set = __set; scope->__unset = __unset; scope->__isset = __isset; + scope->__debugInfo = __debugInfo; if (ctor) { ctor->common.fn_flags |= ZEND_ACC_CTOR; if (ctor->common.fn_flags & ZEND_ACC_STATIC) { @@ -2281,6 +2287,11 @@ ZEND_API int zend_register_functions(zend_class_entry *scope, const zend_functio } __isset->common.fn_flags &= ~ZEND_ACC_ALLOW_STATIC; } + if (__debugInfo) { + if (__debugInfo->common.fn_flags & ZEND_ACC_STATIC) { + zend_error(error_type, "Method %s::%s() cannot be static", scope->name, __debugInfo->common.function_name); + } + } efree((char*)lc_class_name); } return SUCCESS; diff --git a/Zend/zend_API.h b/Zend/zend_API.h index 0a7695b1c8..efc267f918 100644 --- a/Zend/zend_API.h +++ b/Zend/zend_API.h @@ -197,6 +197,7 @@ typedef struct _zend_fcall_info_cache { class_container.__set = handle_propset; \ class_container.__unset = handle_propunset; \ class_container.__isset = handle_propisset; \ + class_container.__debugInfo = NULL; \ class_container.serialize_func = NULL; \ class_container.unserialize_func = NULL; \ class_container.serialize = NULL; \ diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index f789e3397f..34cc6cd580 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1622,6 +1622,11 @@ void zend_do_begin_function_declaration(znode *function_token, znode *function_n if (fn_flags & ((ZEND_ACC_PPP_MASK | ZEND_ACC_STATIC) ^ ZEND_ACC_PUBLIC)) { zend_error(E_WARNING, "The magic method __invoke() must have public visibility and cannot be static"); } + + } else if ((name_len == sizeof(ZEND_DEBUGINFO_FUNC_NAME)-1) && (!memcmp(lcname, ZEND_DEBUGINFO_FUNC_NAME, sizeof(ZEND_DEBUGINFO_FUNC_NAME)-1))) { + if (fn_flags & ((ZEND_ACC_PPP_MASK | ZEND_ACC_STATIC) ^ ZEND_ACC_PUBLIC)) { + zend_error(E_WARNING, "The magic method __debugInfo() must have public visibility and cannot be static"); + } } } else { char *class_lcname; @@ -1682,6 +1687,11 @@ void zend_do_begin_function_declaration(znode *function_token, znode *function_n if (fn_flags & ((ZEND_ACC_PPP_MASK | ZEND_ACC_STATIC) ^ ZEND_ACC_PUBLIC)) { zend_error(E_WARNING, "The magic method __invoke() must have public visibility and cannot be static"); } + } else if ((name_len == sizeof(ZEND_DEBUGINFO_FUNC_NAME)-1) && (!memcmp(lcname, ZEND_DEBUGINFO_FUNC_NAME, sizeof(ZEND_DEBUGINFO_FUNC_NAME)-1))) { + if (fn_flags & ((ZEND_ACC_PPP_MASK | ZEND_ACC_STATIC) ^ ZEND_ACC_PUBLIC)) { + zend_error(E_WARNING, "The magic method __debugInfo() must have public visibility and cannot be static"); + } + CG(active_class_entry)->__debugInfo = (zend_function *) CG(active_op_array); } else if (!(fn_flags & ZEND_ACC_STATIC)) { CG(active_op_array)->fn_flags |= ZEND_ACC_ALLOW_STATIC; } @@ -3954,6 +3964,8 @@ static void zend_add_magic_methods(zend_class_entry* ce, const char* mname, uint ce->__callstatic = fe; } else if (!strncmp(mname, ZEND_TOSTRING_FUNC_NAME, mname_len)) { ce->__tostring = fe; + } else if (!strncmp(mname, ZEND_DEBUGINFO_FUNC_NAME, mname_len)) { + ce->__debugInfo = fe; } else if (ce->name_length + 1 == mname_len) { char *lowercase_name = emalloc(ce->name_length + 1); zend_str_tolower_copy(lowercase_name, ce->name, ce->name_length); diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index f884df1946..9974c18431 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -873,6 +873,7 @@ END_EXTERN_C() #define ZEND_TOSTRING_FUNC_NAME "__tostring" #define ZEND_AUTOLOAD_FUNC_NAME "__autoload" #define ZEND_INVOKE_FUNC_NAME "__invoke" +#define ZEND_DEBUGINFO_FUNC_NAME "__debuginfo" /* The following constants may be combined in CG(compiler_options) * to change the default compiler behavior */ diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 991dca2eec..bc65313962 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -137,8 +137,37 @@ ZEND_API HashTable *zend_std_get_gc(zval *object, zval ***table, int *n TSRMLS_D ZEND_API HashTable *zend_std_get_debug_info(zval *object, int *is_temp TSRMLS_DC) /* {{{ */ { - *is_temp = 0; - return zend_std_get_properties(object TSRMLS_CC); + zend_class_entry *ce = Z_OBJCE_P(object); + zval *retval = NULL; + + if (!ce->__debugInfo) { + *is_temp = 0; + return Z_OBJ_HANDLER_P(object, get_properties) + ? Z_OBJ_HANDLER_P(object, get_properties)(object TSRMLS_CC) + : NULL; + } + + zend_call_method_with_0_params(&object, ce, &ce->__debugInfo, ZEND_DEBUGINFO_FUNC_NAME, &retval); + if (retval && Z_TYPE_P(retval) == IS_ARRAY) { + HashTable *ht = Z_ARRVAL_P(retval); + if (Z_REFCOUNT_P(retval) <= 1) { + *is_temp = 1; + efree(retval); + return ht; + } else { + *is_temp = 0; + zval_ptr_dtor(&retval); + } + return ht; + } + if (retval && Z_TYPE_P(retval) == IS_NULL) { + zval ret; + array_init(&ret); + *is_temp = 1; + return Z_ARRVAL(ret); + } + + zend_error_noreturn(E_ERROR, ZEND_DEBUGINFO_FUNC_NAME "() must return an array"); } /* }}} */ @@ -1638,7 +1667,7 @@ ZEND_API zend_object_handlers std_object_handlers = { zend_std_compare_objects, /* compare_objects */ zend_std_cast_object_tostring, /* cast_object */ NULL, /* count_elements */ - NULL, /* get_debug_info */ + zend_std_get_debug_info, /* get_debug_info */ zend_std_get_closure, /* get_closure */ zend_std_get_gc, /* get_gc */ NULL, /* do_operation */ -- cgit v1.2.1 From 47204c63416ad741666186b2522b362df741ea42 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Thu, 20 Feb 2014 02:07:34 +0100 Subject: some missing pieces for __debugInfo --- Zend/zend_compile.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'Zend') diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 34cc6cd580..a31c401228 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -3133,6 +3133,9 @@ static void do_inherit_parent_constructor(zend_class_entry *ce) /* {{{ */ if (!ce->destructor) { ce->destructor = ce->parent->destructor; } + if (!ce->__debugInfo) { + ce->__debugInfo = ce->parent->__debugInfo; + } if (ce->constructor) { if (ce->parent->constructor && ce->parent->constructor->common.fn_flags & ZEND_ACC_FINAL) { zend_error(E_ERROR, "Cannot override final %s::%s() with %s::%s()", @@ -6958,6 +6961,7 @@ ZEND_API void zend_initialize_class_data(zend_class_entry *ce, zend_bool nullify ce->unserialize = NULL; ce->serialize_func = NULL; ce->unserialize_func = NULL; + ce->__debugInfo = NULL; if (ce->type == ZEND_INTERNAL_CLASS) { ce->info.internal.module = NULL; ce->info.internal.builtin_functions = NULL; -- cgit v1.2.1 From afa03a470ef90a53f2b59a8175f77afdb6b5a651 Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Thu, 20 Feb 2014 17:39:58 +0100 Subject: Use nicer output for characters < 32 and > 126 in exception strings Using question marks might confuse more than it helps. Users are wondering what happened to their string... --- Zend/zend_exceptions.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 58 insertions(+), 3 deletions(-) (limited to 'Zend') diff --git a/Zend/zend_exceptions.c b/Zend/zend_exceptions.c index 2ef74ad106..ced1ebf639 100644 --- a/Zend/zend_exceptions.c +++ b/Zend/zend_exceptions.c @@ -360,6 +360,11 @@ ZEND_METHOD(error_exception, getSeverity) } \ } + +#define TRACE_ARG_APPEND(vallen) \ + *str = (char*)erealloc(*str, *len + 1 + vallen); \ + memcpy((*str) + *len - l_added + 1 + vallen, (*str) + *len - l_added + 1, l_added); + /* }}} */ static int _build_trace_args(zval **arg TSRMLS_DC, int num_args, va_list args, zend_hash_key *hash_key) /* {{{ */ @@ -371,7 +376,7 @@ static int _build_trace_args(zval **arg TSRMLS_DC, int num_args, va_list args, z len = va_arg(args, int*); /* the trivial way would be to do: - * conver_to_string_ex(arg); + * convert_to_string_ex(arg); * append it and kill the now tmp arg. * but that could cause some E_NOTICE and also damn long lines. */ @@ -394,8 +399,58 @@ static int _build_trace_args(zval **arg TSRMLS_DC, int num_args, va_list args, z l_added += 3 + 1; } while (--l_added) { - if ((*str)[*len - l_added] < 32) { - (*str)[*len - l_added] = '?'; + unsigned char chr = (*str)[*len - l_added]; + if (chr < 32 || chr == '\\' || chr > 126) { + (*str)[*len - l_added] = '\\'; + + switch (chr) { + case '\n': + TRACE_ARG_APPEND(1); + (*str)[++(*len) - l_added] = 'n'; + break; + case '\r': + TRACE_ARG_APPEND(1); + (*str)[++(*len) - l_added] = 'r'; + break; + case '\t': + TRACE_ARG_APPEND(1); + (*str)[++(*len) - l_added] = 't'; + break; + case '\f': + TRACE_ARG_APPEND(1); + (*str)[++(*len) - l_added] = 'f'; + break; + case '\v': + TRACE_ARG_APPEND(1); + (*str)[++(*len) - l_added] = 'v'; + break; +#ifndef PHP_WIN32 + case '\e': +#else + case VK_ESCAPE: +#endif + TRACE_ARG_APPEND(1); + (*str)[++(*len) - l_added] = 'e'; + break; + case '\\': + TRACE_ARG_APPEND(1); + (*str)[++(*len) - l_added] = '\\'; + break; + default: + TRACE_ARG_APPEND(3); + (*str)[*len - l_added + 1] = 'x'; + if ((chr >> 4) < 10) { + (*str)[*len - l_added + 2] = (chr >> 4) + '0'; + } else { + (*str)[*len - l_added + 2] = (chr >> 4) + 'A' - 10; + } + if (chr % 16 < 10) { + (*str)[*len - l_added + 3] = chr % 16 + '0'; + } else { + (*str)[*len - l_added + 3] = chr % 16 + 'A' - 10; + } + *len += 3; + } } } break; -- cgit v1.2.1 From 14c08ea362e5f16527b3d9772ddc75ca49cc22d7 Mon Sep 17 00:00:00 2001 From: Sara Golemon Date: Thu, 20 Feb 2014 11:55:27 -0800 Subject: Add more tests for __debugInfo() and fix leak --- Zend/tests/debug_info-error-0.0.phpt | 19 +++++++++++++++++++ Zend/tests/debug_info-error-0.phpt | 19 +++++++++++++++++++ Zend/tests/debug_info-error-1.0.phpt | 19 +++++++++++++++++++ Zend/tests/debug_info-error-1.phpt | 19 +++++++++++++++++++ Zend/tests/debug_info-error-empty_str.phpt | 19 +++++++++++++++++++ Zend/tests/debug_info-error-false.phpt | 19 +++++++++++++++++++ Zend/tests/debug_info-error-object.phpt | 19 +++++++++++++++++++ Zend/tests/debug_info-error-resource.phpt | 19 +++++++++++++++++++ Zend/tests/debug_info-error-str.phpt | 19 +++++++++++++++++++ Zend/tests/debug_info-error-true.phpt | 19 +++++++++++++++++++ Zend/tests/debug_info.phpt | 17 +++++++++++++++-- Zend/zend_object_handlers.c | 1 + 12 files changed, 206 insertions(+), 2 deletions(-) create mode 100644 Zend/tests/debug_info-error-0.0.phpt create mode 100644 Zend/tests/debug_info-error-0.phpt create mode 100644 Zend/tests/debug_info-error-1.0.phpt create mode 100644 Zend/tests/debug_info-error-1.phpt create mode 100644 Zend/tests/debug_info-error-empty_str.phpt create mode 100644 Zend/tests/debug_info-error-false.phpt create mode 100644 Zend/tests/debug_info-error-object.phpt create mode 100644 Zend/tests/debug_info-error-resource.phpt create mode 100644 Zend/tests/debug_info-error-str.phpt create mode 100644 Zend/tests/debug_info-error-true.phpt (limited to 'Zend') diff --git a/Zend/tests/debug_info-error-0.0.phpt b/Zend/tests/debug_info-error-0.0.phpt new file mode 100644 index 0000000000..67cbe8a749 --- /dev/null +++ b/Zend/tests/debug_info-error-0.0.phpt @@ -0,0 +1,19 @@ +--TEST-- +Testing __debugInfo() magic method with bad returns ZERO (float) +--FILE-- +val; + } + public function __construct($val) { + $this->val = $val; + } +} + +$c = new C(0.0); +var_dump($c); +--EXPECTF-- +Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-0.0.php on line %d diff --git a/Zend/tests/debug_info-error-0.phpt b/Zend/tests/debug_info-error-0.phpt new file mode 100644 index 0000000000..97352a8017 --- /dev/null +++ b/Zend/tests/debug_info-error-0.phpt @@ -0,0 +1,19 @@ +--TEST-- +Testing __debugInfo() magic method with bad returns ZERO +--FILE-- +val; + } + public function __construct($val) { + $this->val = $val; + } +} + +$c = new C(0); +var_dump($c); +--EXPECTF-- +Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-0.php on line %d diff --git a/Zend/tests/debug_info-error-1.0.phpt b/Zend/tests/debug_info-error-1.0.phpt new file mode 100644 index 0000000000..e89a47c199 --- /dev/null +++ b/Zend/tests/debug_info-error-1.0.phpt @@ -0,0 +1,19 @@ +--TEST-- +Testing __debugInfo() magic method with bad returns ONE (float) +--FILE-- +val; + } + public function __construct($val) { + $this->val = $val; + } +} + +$c = new C(1.0); +var_dump($c); +--EXPECTF-- +Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-1.0.php on line %d diff --git a/Zend/tests/debug_info-error-1.phpt b/Zend/tests/debug_info-error-1.phpt new file mode 100644 index 0000000000..a77500df2c --- /dev/null +++ b/Zend/tests/debug_info-error-1.phpt @@ -0,0 +1,19 @@ +--TEST-- +Testing __debugInfo() magic method with bad returns ONE +--FILE-- +val; + } + public function __construct($val) { + $this->val = $val; + } +} + +$c = new C(1); +var_dump($c); +--EXPECTF-- +Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-1.php on line %d diff --git a/Zend/tests/debug_info-error-empty_str.phpt b/Zend/tests/debug_info-error-empty_str.phpt new file mode 100644 index 0000000000..ea55b65ecb --- /dev/null +++ b/Zend/tests/debug_info-error-empty_str.phpt @@ -0,0 +1,19 @@ +--TEST-- +Testing __debugInfo() magic method with bad returns EMPTY STRING +--FILE-- +val; + } + public function __construct($val) { + $this->val = $val; + } +} + +$c = new C(""); +var_dump($c); +--EXPECTF-- +Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-empty_str.php on line %d diff --git a/Zend/tests/debug_info-error-false.phpt b/Zend/tests/debug_info-error-false.phpt new file mode 100644 index 0000000000..9e9111326c --- /dev/null +++ b/Zend/tests/debug_info-error-false.phpt @@ -0,0 +1,19 @@ +--TEST-- +Testing __debugInfo() magic method with bad returns FALSE +--FILE-- +val; + } + public function __construct($val) { + $this->val = $val; + } +} + +$c = new C(false); +var_dump($c); +--EXPECTF-- +Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-false.php on line %d diff --git a/Zend/tests/debug_info-error-object.phpt b/Zend/tests/debug_info-error-object.phpt new file mode 100644 index 0000000000..6562b5b6da --- /dev/null +++ b/Zend/tests/debug_info-error-object.phpt @@ -0,0 +1,19 @@ +--TEST-- +Testing __debugInfo() magic method with bad returns OBJECT +--FILE-- +val; + } + public function __construct($val) { + $this->val = $val; + } +} + +$c = new C(new stdClass); +var_dump($c); +--EXPECTF-- +Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-object.php on line %d diff --git a/Zend/tests/debug_info-error-resource.phpt b/Zend/tests/debug_info-error-resource.phpt new file mode 100644 index 0000000000..c6d7be4cd9 --- /dev/null +++ b/Zend/tests/debug_info-error-resource.phpt @@ -0,0 +1,19 @@ +--TEST-- +Testing __debugInfo() magic method with bad returns RESOURCE +--FILE-- +val; + } + public function __construct($val) { + $this->val = $val; + } +} + +$c = new C(fopen("data:text/plain,Foo", 'r')); +var_dump($c); +--EXPECTF-- +Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-resource.php on line %d diff --git a/Zend/tests/debug_info-error-str.phpt b/Zend/tests/debug_info-error-str.phpt new file mode 100644 index 0000000000..230ad0e93b --- /dev/null +++ b/Zend/tests/debug_info-error-str.phpt @@ -0,0 +1,19 @@ +--TEST-- +Testing __debugInfo() magic method with bad returns STRING +--FILE-- +val; + } + public function __construct($val) { + $this->val = $val; + } +} + +$c = new C("foo"); +var_dump($c); +--EXPECTF-- +Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-str.php on line %d diff --git a/Zend/tests/debug_info-error-true.phpt b/Zend/tests/debug_info-error-true.phpt new file mode 100644 index 0000000000..886c601286 --- /dev/null +++ b/Zend/tests/debug_info-error-true.phpt @@ -0,0 +1,19 @@ +--TEST-- +Testing __debugInfo() magic method with bad returns TRUE +--FILE-- +val; + } + public function __construct($val) { + $this->val = $val; + } +} + +$c = new C(true); +var_dump($c); +--EXPECTF-- +Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-true.php on line %d diff --git a/Zend/tests/debug_info.phpt b/Zend/tests/debug_info.phpt index c7c9f23be5..c82ddb2143 100644 --- a/Zend/tests/debug_info.phpt +++ b/Zend/tests/debug_info.phpt @@ -13,10 +13,21 @@ class Foo { } } +class Bar { + public $val = 123; + + public function __debugInfo() { + return null; + } +} + $f = new Foo; var_dump($f); ---EXPECT-- -object(Foo)#1 (3) { + +$b = new Bar; +var_dump($b); +--EXPECTF-- +object(Foo)#%d (3) { ["a"]=> int(1) ["b":protected]=> @@ -24,3 +35,5 @@ object(Foo)#1 (3) { ["c":"Foo":private]=> int(3) } +object(Bar)#%d (0) { +} diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index bc65313962..2ba05399b4 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -164,6 +164,7 @@ ZEND_API HashTable *zend_std_get_debug_info(zval *object, int *is_temp TSRMLS_DC zval ret; array_init(&ret); *is_temp = 1; + zval_ptr_dtor(&retval); return Z_ARRVAL(ret); } -- cgit v1.2.1 From 5d0d88d1f2202896d62c21d0043264487fb12785 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Fri, 21 Feb 2014 00:23:01 +0100 Subject: fixed path separator in the tests --- Zend/tests/debug_info-error-0.0.phpt | 2 +- Zend/tests/debug_info-error-0.phpt | 2 +- Zend/tests/debug_info-error-1.0.phpt | 2 +- Zend/tests/debug_info-error-1.phpt | 2 +- Zend/tests/debug_info-error-empty_str.phpt | 2 +- Zend/tests/debug_info-error-false.phpt | 2 +- Zend/tests/debug_info-error-object.phpt | 2 +- Zend/tests/debug_info-error-resource.phpt | 2 +- Zend/tests/debug_info-error-str.phpt | 2 +- Zend/tests/debug_info-error-true.phpt | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) (limited to 'Zend') diff --git a/Zend/tests/debug_info-error-0.0.phpt b/Zend/tests/debug_info-error-0.0.phpt index 67cbe8a749..1c8dfc8853 100644 --- a/Zend/tests/debug_info-error-0.0.phpt +++ b/Zend/tests/debug_info-error-0.0.phpt @@ -16,4 +16,4 @@ class C { $c = new C(0.0); var_dump($c); --EXPECTF-- -Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-0.0.php on line %d +Fatal error: __debuginfo() must return an array in %s%eZend%etests%edebug_info-error-0.0.php on line %d diff --git a/Zend/tests/debug_info-error-0.phpt b/Zend/tests/debug_info-error-0.phpt index 97352a8017..868ac2f75f 100644 --- a/Zend/tests/debug_info-error-0.phpt +++ b/Zend/tests/debug_info-error-0.phpt @@ -16,4 +16,4 @@ class C { $c = new C(0); var_dump($c); --EXPECTF-- -Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-0.php on line %d +Fatal error: __debuginfo() must return an array in %s%eZend%etests%edebug_info-error-0.php on line %d diff --git a/Zend/tests/debug_info-error-1.0.phpt b/Zend/tests/debug_info-error-1.0.phpt index e89a47c199..27611237bb 100644 --- a/Zend/tests/debug_info-error-1.0.phpt +++ b/Zend/tests/debug_info-error-1.0.phpt @@ -16,4 +16,4 @@ class C { $c = new C(1.0); var_dump($c); --EXPECTF-- -Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-1.0.php on line %d +Fatal error: __debuginfo() must return an array in %s%eZend%etests%edebug_info-error-1.0.php on line %d diff --git a/Zend/tests/debug_info-error-1.phpt b/Zend/tests/debug_info-error-1.phpt index a77500df2c..e2e9823ed4 100644 --- a/Zend/tests/debug_info-error-1.phpt +++ b/Zend/tests/debug_info-error-1.phpt @@ -16,4 +16,4 @@ class C { $c = new C(1); var_dump($c); --EXPECTF-- -Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-1.php on line %d +Fatal error: __debuginfo() must return an array in %s%eZend%etests%edebug_info-error-1.php on line %d diff --git a/Zend/tests/debug_info-error-empty_str.phpt b/Zend/tests/debug_info-error-empty_str.phpt index ea55b65ecb..72ab85d7d8 100644 --- a/Zend/tests/debug_info-error-empty_str.phpt +++ b/Zend/tests/debug_info-error-empty_str.phpt @@ -16,4 +16,4 @@ class C { $c = new C(""); var_dump($c); --EXPECTF-- -Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-empty_str.php on line %d +Fatal error: __debuginfo() must return an array in %s%eZend%etests%edebug_info-error-empty_str.php on line %d diff --git a/Zend/tests/debug_info-error-false.phpt b/Zend/tests/debug_info-error-false.phpt index 9e9111326c..d6e19938af 100644 --- a/Zend/tests/debug_info-error-false.phpt +++ b/Zend/tests/debug_info-error-false.phpt @@ -16,4 +16,4 @@ class C { $c = new C(false); var_dump($c); --EXPECTF-- -Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-false.php on line %d +Fatal error: __debuginfo() must return an array in %s%eZend%etests%edebug_info-error-false.php on line %d diff --git a/Zend/tests/debug_info-error-object.phpt b/Zend/tests/debug_info-error-object.phpt index 6562b5b6da..40737db2b6 100644 --- a/Zend/tests/debug_info-error-object.phpt +++ b/Zend/tests/debug_info-error-object.phpt @@ -16,4 +16,4 @@ class C { $c = new C(new stdClass); var_dump($c); --EXPECTF-- -Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-object.php on line %d +Fatal error: __debuginfo() must return an array in %s%eZend%etests%edebug_info-error-object.php on line %d diff --git a/Zend/tests/debug_info-error-resource.phpt b/Zend/tests/debug_info-error-resource.phpt index c6d7be4cd9..ebdc37e534 100644 --- a/Zend/tests/debug_info-error-resource.phpt +++ b/Zend/tests/debug_info-error-resource.phpt @@ -16,4 +16,4 @@ class C { $c = new C(fopen("data:text/plain,Foo", 'r')); var_dump($c); --EXPECTF-- -Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-resource.php on line %d +Fatal error: __debuginfo() must return an array in %s%eZend%etests%edebug_info-error-resource.php on line %d diff --git a/Zend/tests/debug_info-error-str.phpt b/Zend/tests/debug_info-error-str.phpt index 230ad0e93b..aa16d5bf7c 100644 --- a/Zend/tests/debug_info-error-str.phpt +++ b/Zend/tests/debug_info-error-str.phpt @@ -16,4 +16,4 @@ class C { $c = new C("foo"); var_dump($c); --EXPECTF-- -Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-str.php on line %d +Fatal error: __debuginfo() must return an array in %s%eZend%etests%edebug_info-error-str.php on line %d diff --git a/Zend/tests/debug_info-error-true.phpt b/Zend/tests/debug_info-error-true.phpt index 886c601286..2501e8a412 100644 --- a/Zend/tests/debug_info-error-true.phpt +++ b/Zend/tests/debug_info-error-true.phpt @@ -16,4 +16,4 @@ class C { $c = new C(true); var_dump($c); --EXPECTF-- -Fatal error: __debuginfo() must return an array in %s/Zend/tests/debug_info-error-true.php on line %d +Fatal error: __debuginfo() must return an array in %s%eZend%etests%edebug_info-error-true.php on line %d -- cgit v1.2.1 From 3f258e6b46f1f74c672f68a23b2b0905b435aa5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Schl=C3=BCter?= Date: Sun, 23 Feb 2014 14:55:29 +0100 Subject: Make sure value is initialized --- Zend/zend_highlight.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Zend') diff --git a/Zend/zend_highlight.c b/Zend/zend_highlight.c index 5ea55155c2..a38441b39a 100644 --- a/Zend/zend_highlight.c +++ b/Zend/zend_highlight.c @@ -57,7 +57,7 @@ ZEND_API void zend_html_putc(char c) ZEND_API void zend_html_puts(const char *s, uint len TSRMLS_DC) { const unsigned char *ptr = (const unsigned char*)s, *end = ptr + len; - unsigned char *filtered; + unsigned char *filtered = NULL; size_t filtered_len; if (LANG_SCNG(output_filter)) { -- cgit v1.2.1 From cefa7f8d087e707f65f50a046ad2260f3e2b1405 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Tue, 25 Feb 2014 23:39:50 +0100 Subject: Introduce zend_function_call_entry structure Instead of directly pushing the zend_function* onto the function_call_stack, push this structure. This allows us to store additional data on this stack. --- Zend/zend_compile.c | 44 ++++++++++++++++++++++++-------------------- Zend/zend_compile.h | 3 +++ 2 files changed, 27 insertions(+), 20 deletions(-) (limited to 'Zend') diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index a31c401228..76a38d2818 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -102,6 +102,13 @@ ZEND_API zend_compiler_globals compiler_globals; ZEND_API zend_executor_globals executor_globals; #endif +static void zend_push_function_call_entry(zend_function *fbc TSRMLS_DC) /* {{{ */ +{ + zend_function_call_entry fcall = { fbc }; + zend_stack_push(&CG(function_call_stack), &fcall, sizeof(zend_function_call_entry)); +} +/* }}} */ + static void zend_duplicate_property_info(zend_property_info *property_info) /* {{{ */ { property_info->name = str_estrndup(property_info->name, property_info->name_length); @@ -1989,7 +1996,7 @@ int zend_do_begin_function_call(znode *function_name, zend_bool check_namespace efree(Z_STRVAL(function_name->u.constant)); Z_STRVAL(function_name->u.constant) = lcname; - zend_stack_push(&CG(function_call_stack), (void *) &function, sizeof(zend_function *)); + zend_push_function_call_entry(function TSRMLS_CC); if (CG(context).nested_calls + 1 > CG(active_op_array)->nested_calls) { CG(active_op_array)->nested_calls = CG(context).nested_calls + 1; } @@ -2002,7 +2009,6 @@ void zend_do_begin_method_call(znode *left_bracket TSRMLS_DC) /* {{{ */ { zend_op *last_op; int last_op_number; - unsigned char *ptr = NULL; zend_do_end_variable_parse(left_bracket, BP_VAR_R, 0 TSRMLS_CC); zend_do_begin_variable_parse(TSRMLS_C); @@ -2046,7 +2052,7 @@ void zend_do_begin_method_call(znode *left_bracket TSRMLS_DC) /* {{{ */ } } - zend_stack_push(&CG(function_call_stack), (void *) &ptr, sizeof(zend_function *)); + zend_push_function_call_entry(NULL TSRMLS_CC); if (++CG(context).nested_calls > CG(active_op_array)->nested_calls) { CG(active_op_array)->nested_calls = CG(context).nested_calls; } @@ -2069,7 +2075,6 @@ void zend_do_clone(znode *result, const znode *expr TSRMLS_DC) /* {{{ */ void zend_do_begin_dynamic_function_call(znode *function_name, int ns_call TSRMLS_DC) /* {{{ */ { - unsigned char *ptr = NULL; zend_op *opline; opline = get_next_op(CG(active_op_array) TSRMLS_CC); @@ -2095,7 +2100,7 @@ void zend_do_begin_dynamic_function_call(znode *function_name, int ns_call TSRML } } - zend_stack_push(&CG(function_call_stack), (void *) &ptr, sizeof(zend_function *)); + zend_push_function_call_entry(NULL TSRMLS_CC); if (++CG(context).nested_calls > CG(active_op_array)->nested_calls) { CG(active_op_array)->nested_calls = CG(context).nested_calls; } @@ -2490,7 +2495,6 @@ void zend_do_build_full_name(znode *result, znode *prefix, znode *name, int is_c int zend_do_begin_class_member_function_call(znode *class_name, znode *method_name TSRMLS_DC) /* {{{ */ { znode class_node; - unsigned char *ptr = NULL; zend_op *opline; if (method_name->op_type == IS_CONST) { @@ -2539,7 +2543,7 @@ int zend_do_begin_class_member_function_call(znode *class_name, znode *method_na SET_NODE(opline->op2, method_name); } - zend_stack_push(&CG(function_call_stack), (void *) &ptr, sizeof(zend_function *)); + zend_push_function_call_entry(NULL TSRMLS_CC); if (++CG(context).nested_calls > CG(active_op_array)->nested_calls) { CG(active_op_array)->nested_calls = CG(context).nested_calls; } @@ -2559,11 +2563,11 @@ void zend_do_end_function_call(znode *function_name, znode *result, const znode } opline = &CG(active_op_array)->opcodes[Z_LVAL(function_name->u.constant)]; } else { - zend_function **function_ptr_ptr; - zend_stack_top(&CG(function_call_stack), (void **) &function_ptr_ptr); + zend_function_call_entry *fcall; + zend_stack_top(&CG(function_call_stack), (void **) &fcall); opline = get_next_op(CG(active_op_array) TSRMLS_CC); - if (*function_ptr_ptr) { + if (fcall->fbc) { opline->opcode = ZEND_DO_FCALL; SET_NODE(opline->op1, function_name); SET_UNUSED(opline->op2); @@ -2603,12 +2607,13 @@ void zend_do_pass_param(znode *param, zend_uchar op, int offset TSRMLS_DC) /* {{ { zend_op *opline; int original_op = op; - zend_function **function_ptr_ptr, *function_ptr; + zend_function_call_entry *fcall; + zend_function *function_ptr; int send_by_reference = 0; int send_function = 0; - zend_stack_top(&CG(function_call_stack), (void **) &function_ptr_ptr); - function_ptr = *function_ptr_ptr; + zend_stack_top(&CG(function_call_stack), (void **) &fcall); + function_ptr = fcall->fbc; if (original_op == ZEND_SEND_REF) { if (function_ptr && @@ -2710,15 +2715,15 @@ void zend_do_pass_param(znode *param, zend_uchar op, int offset TSRMLS_DC) /* {{ void zend_do_unpack_params(znode *params, int offset TSRMLS_DC) /* {{{ */ { zend_op *opline; - zend_function **function_ptr_ptr; + zend_function_call_entry *fcall; - zend_stack_top(&CG(function_call_stack), (void **) &function_ptr_ptr); - if (*function_ptr_ptr) { + zend_stack_top(&CG(function_call_stack), (void **) &fcall); + if (fcall->fbc) { /* If argument unpacking is used argument numbers and sending modes can no longer be * computed at compile time, thus we need access to EX(call). In order to have it we * retroactively emit a ZEND_INIT_FCALL_BY_NAME opcode. */ zval func_name; - ZVAL_STRING(&func_name, (*function_ptr_ptr)->common.function_name, 1); + ZVAL_STRING(&func_name, fcall->fbc->common.function_name, 1); opline = get_next_op(CG(active_op_array) TSRMLS_CC); opline->opcode = ZEND_INIT_FCALL_BY_NAME; @@ -2729,7 +2734,7 @@ void zend_do_unpack_params(znode *params, int offset TSRMLS_DC) /* {{{ */ GET_CACHE_SLOT(opline->op2.constant); ++CG(context).nested_calls; - *function_ptr_ptr = NULL; + fcall->fbc = NULL; } opline = get_next_op(CG(active_op_array) TSRMLS_CC); @@ -5577,7 +5582,6 @@ void zend_do_pop_object(znode *object TSRMLS_DC) /* {{{ */ void zend_do_begin_new_object(znode *new_token, znode *class_type TSRMLS_DC) /* {{{ */ { zend_op *opline; - unsigned char *ptr = NULL; new_token->u.op.opline_num = get_next_op_number(CG(active_op_array)); opline = get_next_op(CG(active_op_array) TSRMLS_CC); @@ -5588,7 +5592,7 @@ void zend_do_begin_new_object(znode *new_token, znode *class_type TSRMLS_DC) /* SET_NODE(opline->op1, class_type); SET_UNUSED(opline->op2); - zend_stack_push(&CG(function_call_stack), (void *) &ptr, sizeof(unsigned char *)); + zend_push_function_call_entry(NULL TSRMLS_CC); if (++CG(context).nested_calls > CG(active_op_array)->nested_calls) { CG(active_op_array)->nested_calls = CG(context).nested_calls; } diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index 9974c18431..0ea3be4f11 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -363,6 +363,9 @@ typedef struct _zend_function_state { void **arguments; } zend_function_state; +typedef struct _zend_function_call_entry { + zend_function *fbc; +} zend_function_call_entry; typedef struct _zend_switch_entry { znode cond; -- cgit v1.2.1 From 2eae18794945db6c8e2540525b10a59759e0ade9 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Wed, 26 Feb 2014 00:14:50 +0100 Subject: Store arg_num in fcall entry Instead of storing the argument number in the znode of the parameter list, store it in fcall->arg_num. This mainly cleans up the parameter parsing code, which previously had to duplicate all rules (this becomes more excessive as more features are added, e.g. named params would already require a minimum of 14 rules...) --- Zend/zend_compile.c | 38 +++++++++++++++++++------------------- Zend/zend_compile.h | 9 +++++---- Zend/zend_language_parser.y | 41 +++++++++++++++++++++-------------------- 3 files changed, 45 insertions(+), 43 deletions(-) (limited to 'Zend') diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 76a38d2818..d53cb96cd0 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2552,20 +2552,19 @@ int zend_do_begin_class_member_function_call(znode *class_name, znode *method_na } /* }}} */ -void zend_do_end_function_call(znode *function_name, znode *result, const znode *argument_list, int is_method, int is_dynamic_fcall TSRMLS_DC) /* {{{ */ +void zend_do_end_function_call(znode *function_name, znode *result, int is_method, int is_dynamic_fcall TSRMLS_DC) /* {{{ */ { zend_op *opline; + zend_function_call_entry *fcall; + zend_stack_top(&CG(function_call_stack), (void **) &fcall); if (is_method && function_name && function_name->op_type == IS_UNUSED) { /* clone */ - if (Z_LVAL(argument_list->u.constant) != 0) { + if (fcall->arg_num != 0) { zend_error(E_WARNING, "Clone method does not require arguments"); } opline = &CG(active_op_array)->opcodes[Z_LVAL(function_name->u.constant)]; } else { - zend_function_call_entry *fcall; - zend_stack_top(&CG(function_call_stack), (void **) &fcall); - opline = get_next_op(CG(active_op_array) TSRMLS_CC); if (fcall->fbc) { opline->opcode = ZEND_DO_FCALL; @@ -2592,18 +2591,17 @@ void zend_do_end_function_call(znode *function_name, znode *result, const znode opline->result.var = get_temporary_variable(CG(active_op_array)); opline->result_type = IS_VAR; GET_NODE(result, opline->result); - - zend_stack_del_top(&CG(function_call_stack)); - opline->extended_value = Z_LVAL(argument_list->u.constant); + opline->extended_value = fcall->arg_num; if (CG(context).used_stack + 1 > CG(active_op_array)->used_stack) { CG(active_op_array)->used_stack = CG(context).used_stack + 1; } - CG(context).used_stack -= Z_LVAL(argument_list->u.constant); + CG(context).used_stack -= fcall->arg_num; + zend_stack_del_top(&CG(function_call_stack)); } /* }}} */ -void zend_do_pass_param(znode *param, zend_uchar op, int offset TSRMLS_DC) /* {{{ */ +void zend_do_pass_param(znode *param, zend_uchar op TSRMLS_DC) /* {{{ */ { zend_op *opline; int original_op = op; @@ -2614,12 +2612,13 @@ void zend_do_pass_param(znode *param, zend_uchar op, int offset TSRMLS_DC) /* {{ zend_stack_top(&CG(function_call_stack), (void **) &fcall); function_ptr = fcall->fbc; + fcall->arg_num++; if (original_op == ZEND_SEND_REF) { if (function_ptr && function_ptr->common.function_name && function_ptr->common.type == ZEND_USER_FUNCTION && - !ARG_SHOULD_BE_SENT_BY_REF(function_ptr, (zend_uint) offset)) { + !ARG_SHOULD_BE_SENT_BY_REF(function_ptr, fcall->arg_num)) { zend_error_noreturn(E_COMPILE_ERROR, "Call-time pass-by-reference has been removed; " "If you would like to pass argument by reference, modify the declaration of %s().", @@ -2631,7 +2630,7 @@ void zend_do_pass_param(znode *param, zend_uchar op, int offset TSRMLS_DC) /* {{ } if (function_ptr) { - if (ARG_MAY_BE_SENT_BY_REF(function_ptr, (zend_uint) offset)) { + if (ARG_MAY_BE_SENT_BY_REF(function_ptr, fcall->arg_num)) { if (op == ZEND_SEND_VAR && param->op_type & (IS_VAR|IS_CV)) { send_by_reference = ZEND_ARG_SEND_BY_REF; if (zend_is_function_or_method_call(param)) { @@ -2642,7 +2641,7 @@ void zend_do_pass_param(znode *param, zend_uchar op, int offset TSRMLS_DC) /* {{ } else { op = ZEND_SEND_VAL; } - } else if (ARG_SHOULD_BE_SENT_BY_REF(function_ptr, (zend_uint) offset)) { + } else if (ARG_SHOULD_BE_SENT_BY_REF(function_ptr, fcall->arg_num)) { send_by_reference = ZEND_ARG_SEND_BY_REF; } } @@ -2677,7 +2676,7 @@ void zend_do_pass_param(znode *param, zend_uchar op, int offset TSRMLS_DC) /* {{ if (function_ptr) { zend_do_end_variable_parse(param, BP_VAR_R, 0 TSRMLS_CC); } else { - zend_do_end_variable_parse(param, BP_VAR_FUNC_ARG, offset TSRMLS_CC); + zend_do_end_variable_parse(param, BP_VAR_FUNC_ARG, fcall->arg_num TSRMLS_CC); } break; case ZEND_SEND_REF: @@ -2703,7 +2702,7 @@ void zend_do_pass_param(znode *param, zend_uchar op, int offset TSRMLS_DC) /* {{ } opline->opcode = op; SET_NODE(opline->op1, param); - opline->op2.opline_num = offset; + opline->op2.opline_num = fcall->arg_num; SET_UNUSED(opline->op2); if (++CG(context).used_stack > CG(active_op_array)->used_stack) { @@ -2712,12 +2711,13 @@ void zend_do_pass_param(znode *param, zend_uchar op, int offset TSRMLS_DC) /* {{ } /* }}} */ -void zend_do_unpack_params(znode *params, int offset TSRMLS_DC) /* {{{ */ +void zend_do_unpack_params(znode *params TSRMLS_DC) /* {{{ */ { zend_op *opline; zend_function_call_entry *fcall; zend_stack_top(&CG(function_call_stack), (void **) &fcall); + if (fcall->fbc) { /* If argument unpacking is used argument numbers and sending modes can no longer be * computed at compile time, thus we need access to EX(call). In order to have it we @@ -2741,7 +2741,7 @@ void zend_do_unpack_params(znode *params, int offset TSRMLS_DC) /* {{{ */ opline->opcode = ZEND_SEND_UNPACK; SET_NODE(opline->op1, params); SET_UNUSED(opline->op2); - opline->op2.num = (zend_uint) offset; + opline->op2.num = fcall->arg_num; } /* }}} */ @@ -5599,11 +5599,11 @@ void zend_do_begin_new_object(znode *new_token, znode *class_type TSRMLS_DC) /* } /* }}} */ -void zend_do_end_new_object(znode *result, const znode *new_token, const znode *argument_list TSRMLS_DC) /* {{{ */ +void zend_do_end_new_object(znode *result, const znode *new_token TSRMLS_DC) /* {{{ */ { znode ctor_result; - zend_do_end_function_call(NULL, &ctor_result, argument_list, 1, 0 TSRMLS_CC); + zend_do_end_function_call(NULL, &ctor_result, 1, 0 TSRMLS_CC); zend_do_free(&ctor_result TSRMLS_CC); CG(active_op_array)->opcodes[new_token->u.op.opline_num].op2.opline_num = get_next_op_number(CG(active_op_array)); diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index 0ea3be4f11..270c085d03 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -365,6 +365,7 @@ typedef struct _zend_function_state { typedef struct _zend_function_call_entry { zend_function *fbc; + zend_uint arg_num; } zend_function_call_entry; typedef struct _zend_switch_entry { @@ -521,7 +522,7 @@ void zend_do_begin_dynamic_function_call(znode *function_name, int prefix_len TS void zend_do_fetch_class(znode *result, znode *class_name TSRMLS_DC); void zend_do_build_full_name(znode *result, znode *prefix, znode *name, int is_class_member TSRMLS_DC); int zend_do_begin_class_member_function_call(znode *class_name, znode *method_name TSRMLS_DC); -void zend_do_end_function_call(znode *function_name, znode *result, const znode *argument_list, int is_method, int is_dynamic_fcall TSRMLS_DC); +void zend_do_end_function_call(znode *function_name, znode *result, int is_method, int is_dynamic_fcall TSRMLS_DC); void zend_do_return(znode *expr, int do_end_vparse TSRMLS_DC); void zend_do_yield(znode *result, znode *value, const znode *key, zend_bool is_variable TSRMLS_DC); void zend_do_handle_exception(TSRMLS_D); @@ -557,8 +558,8 @@ ZEND_API void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent void zend_do_early_binding(TSRMLS_D); ZEND_API void zend_do_delayed_early_binding(const zend_op_array *op_array TSRMLS_DC); -void zend_do_pass_param(znode *param, zend_uchar op, int offset TSRMLS_DC); -void zend_do_unpack_params(znode *params, int offset TSRMLS_DC); +void zend_do_pass_param(znode *param, zend_uchar op TSRMLS_DC); +void zend_do_unpack_params(znode *params TSRMLS_DC); void zend_do_boolean_or_begin(znode *expr1, znode *op_token TSRMLS_DC); @@ -588,7 +589,7 @@ void zend_do_pop_object(znode *object TSRMLS_DC); void zend_do_begin_new_object(znode *new_token, znode *class_type TSRMLS_DC); -void zend_do_end_new_object(znode *result, const znode *new_token, const znode *argument_list TSRMLS_DC); +void zend_do_end_new_object(znode *result, const znode *new_token TSRMLS_DC); void zend_do_fetch_constant(znode *result, znode *constant_container, znode *constant_name, int mode, zend_bool check_namespace TSRMLS_DC); diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index 5d3f73beaf..d3844540cf 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -580,19 +580,20 @@ optional_class_type: function_call_parameter_list: '(' ')' { Z_LVAL($$.u.constant) = 0; } | '(' non_empty_function_call_parameter_list ')' { $$ = $2; } - | '(' yield_expr ')' { Z_LVAL($$.u.constant) = 1; zend_do_pass_param(&$2, ZEND_SEND_VAL, Z_LVAL($$.u.constant) TSRMLS_CC); } + | '(' yield_expr ')' { zend_do_pass_param(&$2, ZEND_SEND_VAL TSRMLS_CC); } ; non_empty_function_call_parameter_list: - expr_without_variable { Z_LVAL($$.u.constant) = 1; zend_do_pass_param(&$1, ZEND_SEND_VAL, Z_LVAL($$.u.constant) TSRMLS_CC); } - | variable { Z_LVAL($$.u.constant) = 1; zend_do_pass_param(&$1, ZEND_SEND_VAR, Z_LVAL($$.u.constant) TSRMLS_CC); } - | '&' w_variable { Z_LVAL($$.u.constant) = 1; zend_do_pass_param(&$2, ZEND_SEND_REF, Z_LVAL($$.u.constant) TSRMLS_CC); } - | T_ELLIPSIS expr { Z_LVAL($$.u.constant) = 0; zend_do_unpack_params(&$2, Z_LVAL($$.u.constant) TSRMLS_CC); } - | non_empty_function_call_parameter_list ',' expr_without_variable { Z_LVAL($$.u.constant)=Z_LVAL($1.u.constant)+1; zend_do_pass_param(&$3, ZEND_SEND_VAL, Z_LVAL($$.u.constant) TSRMLS_CC); } - | non_empty_function_call_parameter_list ',' variable { Z_LVAL($$.u.constant)=Z_LVAL($1.u.constant)+1; zend_do_pass_param(&$3, ZEND_SEND_VAR, Z_LVAL($$.u.constant) TSRMLS_CC); } - | non_empty_function_call_parameter_list ',' '&' w_variable { Z_LVAL($$.u.constant)=Z_LVAL($1.u.constant)+1; zend_do_pass_param(&$4, ZEND_SEND_REF, Z_LVAL($$.u.constant) TSRMLS_CC); } - | non_empty_function_call_parameter_list ',' T_ELLIPSIS expr { Z_LVAL($$.u.constant)=Z_LVAL($1.u.constant); zend_do_unpack_params(&$4, Z_LVAL($$.u.constant) TSRMLS_CC); } + function_call_parameter + | non_empty_function_call_parameter_list ',' function_call_parameter +; + +function_call_parameter: + expr_without_variable { zend_do_pass_param(&$1, ZEND_SEND_VAL TSRMLS_CC); } + | variable { zend_do_pass_param(&$1, ZEND_SEND_VAR TSRMLS_CC); } + | '&' w_variable { zend_do_pass_param(&$2, ZEND_SEND_REF TSRMLS_CC); } + | T_ELLIPSIS expr { zend_do_unpack_params(&$2 TSRMLS_CC); } ; global_var_list: @@ -769,14 +770,14 @@ instance_call: ; new_expr: - T_NEW class_name_reference { zend_do_extended_fcall_begin(TSRMLS_C); zend_do_begin_new_object(&$1, &$2 TSRMLS_CC); } ctor_arguments { zend_do_end_new_object(&$$, &$1, &$4 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} + T_NEW class_name_reference { zend_do_extended_fcall_begin(TSRMLS_C); zend_do_begin_new_object(&$1, &$2 TSRMLS_CC); } ctor_arguments { zend_do_end_new_object(&$$, &$1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} ; expr_without_variable: T_LIST '(' { zend_do_list_init(TSRMLS_C); } assignment_list ')' '=' expr { zend_do_list_end(&$$, &$7 TSRMLS_CC); } | variable '=' expr { zend_check_writable_variable(&$1); zend_do_assign(&$$, &$1, &$3 TSRMLS_CC); } | variable '=' '&' variable { zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$4, BP_VAR_W, 1 TSRMLS_CC); zend_do_end_variable_parse(&$1, BP_VAR_W, 0 TSRMLS_CC); zend_do_assign_ref(&$$, &$1, &$4 TSRMLS_CC); } - | variable '=' '&' T_NEW class_name_reference { zend_error(E_DEPRECATED, "Assigning the return value of new by reference is deprecated"); zend_check_writable_variable(&$1); zend_do_extended_fcall_begin(TSRMLS_C); zend_do_begin_new_object(&$4, &$5 TSRMLS_CC); } ctor_arguments { zend_do_end_new_object(&$3, &$4, &$7 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); zend_do_end_variable_parse(&$1, BP_VAR_W, 0 TSRMLS_CC); $3.EA = ZEND_PARSED_NEW; zend_do_assign_ref(&$$, &$1, &$3 TSRMLS_CC); } + | variable '=' '&' T_NEW class_name_reference { zend_error(E_DEPRECATED, "Assigning the return value of new by reference is deprecated"); zend_check_writable_variable(&$1); zend_do_extended_fcall_begin(TSRMLS_C); zend_do_begin_new_object(&$4, &$5 TSRMLS_CC); } ctor_arguments { zend_do_end_new_object(&$3, &$4 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); zend_do_end_variable_parse(&$1, BP_VAR_W, 0 TSRMLS_CC); $3.EA = ZEND_PARSED_NEW; zend_do_assign_ref(&$$, &$1, &$3 TSRMLS_CC); } | T_CLONE expr { zend_do_clone(&$$, &$2 TSRMLS_CC); } | variable T_PLUS_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_ADD, &$$, &$1, &$3 TSRMLS_CC); } | variable T_MINUS_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(&$1, BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SUB, &$$, &$1, &$3 TSRMLS_CC); } @@ -890,21 +891,21 @@ lexical_var_list: function_call: namespace_name { $$.u.op.opline_num = zend_do_begin_function_call(&$1, 1 TSRMLS_CC); } - function_call_parameter_list { zend_do_end_function_call(&$1, &$$, &$3, 0, $2.u.op.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); } + function_call_parameter_list { zend_do_end_function_call(&$1, &$$, 0, $2.u.op.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); } | T_NAMESPACE T_NS_SEPARATOR namespace_name { $1.op_type = IS_CONST; ZVAL_EMPTY_STRING(&$1.u.constant); zend_do_build_namespace_name(&$1, &$1, &$3 TSRMLS_CC); $$.u.op.opline_num = zend_do_begin_function_call(&$1, 0 TSRMLS_CC); } - function_call_parameter_list { zend_do_end_function_call(&$1, &$$, &$5, 0, $4.u.op.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); } + function_call_parameter_list { zend_do_end_function_call(&$1, &$$, 0, $4.u.op.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); } | T_NS_SEPARATOR namespace_name { $$.u.op.opline_num = zend_do_begin_function_call(&$2, 0 TSRMLS_CC); } - function_call_parameter_list { zend_do_end_function_call(&$2, &$$, &$4, 0, $3.u.op.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); } + function_call_parameter_list { zend_do_end_function_call(&$2, &$$, 0, $3.u.op.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); } | class_name T_PAAMAYIM_NEKUDOTAYIM variable_name { $$.u.op.opline_num = zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); } - function_call_parameter_list { zend_do_end_function_call($4.u.op.opline_num?NULL:&$3, &$$, &$5, $4.u.op.opline_num, $4.u.op.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} + function_call_parameter_list { zend_do_end_function_call($4.u.op.opline_num?NULL:&$3, &$$, $4.u.op.opline_num, $4.u.op.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} | class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { zend_do_end_variable_parse(&$3, BP_VAR_R, 0 TSRMLS_CC); zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); } - function_call_parameter_list { zend_do_end_function_call(NULL, &$$, &$5, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} + function_call_parameter_list { zend_do_end_function_call(NULL, &$$, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} | variable_class_name T_PAAMAYIM_NEKUDOTAYIM variable_name { zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); } - function_call_parameter_list { zend_do_end_function_call(NULL, &$$, &$5, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} + function_call_parameter_list { zend_do_end_function_call(NULL, &$$, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} | variable_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { zend_do_end_variable_parse(&$3, BP_VAR_R, 0 TSRMLS_CC); zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); } - function_call_parameter_list { zend_do_end_function_call(NULL, &$$, &$5, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} + function_call_parameter_list { zend_do_end_function_call(NULL, &$$, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} | variable_without_objects { zend_do_end_variable_parse(&$1, BP_VAR_R, 0 TSRMLS_CC); zend_do_begin_dynamic_function_call(&$1, 0 TSRMLS_CC); } - function_call_parameter_list { zend_do_end_function_call(&$1, &$$, &$3, 0, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} + function_call_parameter_list { zend_do_end_function_call(&$1, &$$, 0, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} ; class_name: @@ -1117,7 +1118,7 @@ array_method_dereference: method: { zend_do_pop_object(&$$ TSRMLS_CC); zend_do_begin_method_call(&$$ TSRMLS_CC); } - function_call_parameter_list { zend_do_end_function_call(&$1, &$$, &$2, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); } + function_call_parameter_list { zend_do_end_function_call(&$1, &$$, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); } ; method_or_not: -- cgit v1.2.1 From d3b484df8268f7ab31c4ac39734d4b68ce2e6159 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Wed, 26 Feb 2014 16:08:58 +0100 Subject: Disallow use of positional args after unpacking This commit disallows the use of trailing positional arguments after argument unpacking was used. The following calls are no longer valid: fn(...$array, $var); fn(...$array1, $var, ...$array2); However, all of the following continue to be valid: fn($var, ...$array); fn(...$array1, ...$array2); fn($var, ...$array1, ...$array2); The reason behind this change is a stack allocation issue pointed out by Dmitry: As of PHP 5.5 the stack necessary for pushing arguments is precomputed and preallocated, as such the individual SEND opcodes no longer verify that there is enough stack space. The unpacked arguments will occupy some of that preallocated space and as such following positional arguments could write past a stack page boundary. An alternative resolution for this issue is to ensure that there is enough space for the remaining arguments in the UNPACK opcode. However making this allocation precise (rather than using a conversative over-estimate) would require some effort. Given that this particular aspect of the feature wasn't very popular in the first place, it doesn't seem worth the effort. --- Zend/tests/arg_unpack/basic.phpt | 14 +-- Zend/tests/arg_unpack/by_ref.phpt | 134 ++++++++++----------- Zend/tests/arg_unpack/dynamic.phpt | 2 +- Zend/tests/arg_unpack/invalid_type.phpt | 2 +- Zend/tests/arg_unpack/method.phpt | 15 +-- Zend/tests/arg_unpack/new.phpt | 8 +- .../positional_arg_after_unpack_error.phpt | 10 ++ .../arg_unpack/traversable_throwing_exception.phpt | 4 +- .../traversable_with_by_ref_parameters.phpt | 3 - Zend/zend_compile.c | 6 + Zend/zend_compile.h | 1 + 11 files changed, 94 insertions(+), 105 deletions(-) create mode 100644 Zend/tests/arg_unpack/positional_arg_after_unpack_error.phpt (limited to 'Zend') diff --git a/Zend/tests/arg_unpack/basic.phpt b/Zend/tests/arg_unpack/basic.phpt index 9c0365586a..f8bd019378 100644 --- a/Zend/tests/arg_unpack/basic.phpt +++ b/Zend/tests/arg_unpack/basic.phpt @@ -30,12 +30,12 @@ test(...getArray([1, 2, 3])); test(...arrayGen([])); test(...arrayGen([1, 2, 3])); -test(1, ...[2, 3], ...[4, 5], 6); -test(1, ...getArray([2, 3]), ...arrayGen([4, 5]), 6); +test(1, ...[2, 3], ...[4, 5]); +test(1, ...getArray([2, 3]), ...arrayGen([4, 5])); test2(...[1, 2]); test2(...[1, 2, 3]); -test2(...[1], ...[], ...[], ...[2, 3], 4, ...[5, 6]); +test2(...[1], ...[], ...[], ...[2, 3], ...[4, 5]); ?> --EXPECT-- @@ -75,7 +75,7 @@ array(3) { [2]=> int(3) } -array(6) { +array(5) { [0]=> int(1) [1]=> @@ -86,10 +86,8 @@ array(6) { int(4) [4]=> int(5) - [5]=> - int(6) } -array(6) { +array(5) { [0]=> int(1) [1]=> @@ -100,8 +98,6 @@ array(6) { int(4) [4]=> int(5) - [5]=> - int(6) } int(1) int(2) diff --git a/Zend/tests/arg_unpack/by_ref.phpt b/Zend/tests/arg_unpack/by_ref.phpt index 0619a3bab8..7c8a86be48 100644 --- a/Zend/tests/arg_unpack/by_ref.phpt +++ b/Zend/tests/arg_unpack/by_ref.phpt @@ -17,46 +17,37 @@ $array = [1, 2, 3]; test1(...$array); var_dump($array); -$array1 = [1, 2]; $val2 = 3; $array2 = [4, 5]; -test1(...$array1, $val2, ...$array2); -var_dump($array1, $val2, $array2); +$array1 = [1, 2]; $array2 = [3, 4]; +test1(...$array1, ...$array2); +var_dump($array1, $array2); function test2($val1, &$ref1, $val2, &$ref2) { $ref1++; $ref2++; } -$array = [1, 2, 3, 4]; +$array = [0, 0, 0, 0]; test2(...$array); var_dump($array); -$a = $b = $c = $d = 0; +$array1 = [1, 2]; $array2 = [4, 5]; +test1(...$array1, ...$array2); +var_dump($array1, $array2); -$array = []; -test2(...$array, $a, $b, $c, $d); -var_dump($array, $a, $b, $c, $d); +$a = $b = $c = $d = 0; +$array = [0, 0, 0, 0]; -$array = [1]; -test2(...$array, $a, $b, $c, $d); -var_dump($array, $a, $b, $c, $d); +test2($a, ...$array); +var_dump($a, $array); -$array = [1, 2]; -test2(...$array, $a, $b, $c, $d); -var_dump($array, $a, $b, $c, $d); +test2($a, $b, ...$array); +var_dump($a, $b, $array); -$array = [1, 2, 3]; -test2(...$array, $a, $b, $c, $d); -var_dump($array, $a, $b, $c, $d); +test2($a, $b, $c, ...$array); +var_dump($a, $b, $c, $array); -$vars = []; -$array = []; -test2(...$array, $vars['a'], $vars['b'], $vars['c'], $vars['d']); -var_dump($vars); - -$vars = []; -$array = [1]; -test2(...$array, $vars['a'], $vars['b'], $vars['c'], $vars['d']); -var_dump($vars); +test2($a, $b, $c, $d, ...$array); +var_dump($a, $b, $c, $d, $array); ?> --EXPECTF-- @@ -74,76 +65,81 @@ array(2) { [1]=> int(3) } -int(4) array(2) { [0]=> - int(5) + int(4) [1]=> - int(6) + int(5) } array(4) { [0]=> - int(1) + int(0) [1]=> - int(3) + int(1) [2]=> - int(3) + int(0) [3]=> - int(5) -} -array(0) { + int(1) } -int(0) -int(1) -int(0) -int(1) -array(1) { +array(2) { [0]=> - int(1) + int(2) + [1]=> + int(3) } -int(1) -int(1) -int(1) -int(1) array(2) { + [0]=> + int(5) + [1]=> + int(6) +} +int(0) +array(4) { [0]=> int(1) [1]=> - int(3) + int(0) + [2]=> + int(1) + [3]=> + int(0) } +int(0) int(1) -int(2) -int(1) -int(1) -array(3) { +array(4) { [0]=> int(1) [1]=> - int(3) + int(1) [2]=> - int(3) + int(1) + [3]=> + int(0) } +int(0) int(2) -int(2) -int(1) -int(1) - -Notice: Undefined index: a in %s on line %d - -Notice: Undefined index: c in %s on line %d -array(2) { - ["b"]=> +int(0) +array(4) { + [0]=> + int(2) + [1]=> int(1) - ["d"]=> + [2]=> int(1) + [3]=> + int(0) } - -Notice: Undefined index: b in %s on line %d - -Notice: Undefined index: d in %s on line %d -array(2) { - ["a"]=> +int(0) +int(3) +int(0) +int(1) +array(4) { + [0]=> + int(2) + [1]=> int(1) - ["c"]=> + [2]=> int(1) + [3]=> + int(0) } diff --git a/Zend/tests/arg_unpack/dynamic.phpt b/Zend/tests/arg_unpack/dynamic.phpt index efed84da78..8f129f85a6 100644 --- a/Zend/tests/arg_unpack/dynamic.phpt +++ b/Zend/tests/arg_unpack/dynamic.phpt @@ -9,7 +9,7 @@ $fn = function(...$args) { $fn(...[]); $fn(...[1, 2, 3]); -$fn(1, ...[2, 3], ...[], 4, 5); +$fn(1, ...[2, 3], ...[], ...[4, 5]); ?> --EXPECT-- diff --git a/Zend/tests/arg_unpack/invalid_type.phpt b/Zend/tests/arg_unpack/invalid_type.phpt index 3efffebc76..1ef545558c 100644 --- a/Zend/tests/arg_unpack/invalid_type.phpt +++ b/Zend/tests/arg_unpack/invalid_type.phpt @@ -12,7 +12,7 @@ test(...42); test(...new stdClass); test(1, 2, 3, ..."foo", ...[4, 5]); -test(1, 2, ...new StdClass, 3, ...3.14, ...[4, 5]); +test(1, 2, 3, ...new StdClass, ...3.14, ...[4, 5]); ?> --EXPECTF-- diff --git a/Zend/tests/arg_unpack/method.phpt b/Zend/tests/arg_unpack/method.phpt index d6a6e4712b..fb9ace8378 100644 --- a/Zend/tests/arg_unpack/method.phpt +++ b/Zend/tests/arg_unpack/method.phpt @@ -14,8 +14,7 @@ class Foo { } $foo = new Foo; -$foo->test(...[1, 2], 3, 4, ...[], 5); -Foo::test2(1, 2, ...[3, 4], ...[], 5); +Foo::test2(1, 2, ...[3, 4], ...[], ...[5]); ?> --EXPECT-- @@ -31,15 +30,3 @@ array(5) { [4]=> int(5) } -array(5) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) -} diff --git a/Zend/tests/arg_unpack/new.phpt b/Zend/tests/arg_unpack/new.phpt index 3cf224f288..7a0968e2c9 100644 --- a/Zend/tests/arg_unpack/new.phpt +++ b/Zend/tests/arg_unpack/new.phpt @@ -11,7 +11,7 @@ class Foo { new Foo(...[]); new Foo(...[1, 2, 3]); -new Foo(...[1], 2, ...[], ...[3, 4], 5); +new Foo(...[1], ...[], ...[2, 3]); ?> --EXPECT-- @@ -25,15 +25,11 @@ array(3) { [2]=> int(3) } -array(5) { +array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) - [3]=> - int(4) - [4]=> - int(5) } diff --git a/Zend/tests/arg_unpack/positional_arg_after_unpack_error.phpt b/Zend/tests/arg_unpack/positional_arg_after_unpack_error.phpt new file mode 100644 index 0000000000..30e13e3d10 --- /dev/null +++ b/Zend/tests/arg_unpack/positional_arg_after_unpack_error.phpt @@ -0,0 +1,10 @@ +--TEST-- +Positional arguments cannot be used after argument unpacking +--FILE-- + +--EXPECTF-- +Fatal error: Cannot use positional argument after argument unpacking in %s on line %d diff --git a/Zend/tests/arg_unpack/traversable_throwing_exception.phpt b/Zend/tests/arg_unpack/traversable_throwing_exception.phpt index 8ddc24dc74..abbf537587 100644 --- a/Zend/tests/arg_unpack/traversable_throwing_exception.phpt +++ b/Zend/tests/arg_unpack/traversable_throwing_exception.phpt @@ -20,11 +20,11 @@ function gen() { } try { - test(1, 2, ...new Foo, 3, 4); + test(1, 2, ...new Foo, ...[3, 4]); } catch (Exception $e) { var_dump($e->getMessage()); } try { - test(1, 2, ...gen(), 3, 4); + test(1, 2, ...gen(), ...[3, 4]); } catch (Exception $e) { var_dump($e->getMessage()); } ?> diff --git a/Zend/tests/arg_unpack/traversable_with_by_ref_parameters.phpt b/Zend/tests/arg_unpack/traversable_with_by_ref_parameters.phpt index e862341652..711287eded 100644 --- a/Zend/tests/arg_unpack/traversable_with_by_ref_parameters.phpt +++ b/Zend/tests/arg_unpack/traversable_with_by_ref_parameters.phpt @@ -13,8 +13,6 @@ function gen($array) { } } -test(...gen([1, 2, 3]), $a); -var_dump($a); test(1, 2, 3, $b, ...gen([4, 5, 6])); var_dump($b); @@ -25,7 +23,6 @@ test(...gen([1, 2]), ...gen([3, 4])); ?> --EXPECTF-- int(42) -int(42) Warning: Cannot pass by-reference argument 4 of test() by unpacking a Traversable, passing by-value instead in %s on line %d diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index d53cb96cd0..1bcd430840 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2614,6 +2614,11 @@ void zend_do_pass_param(znode *param, zend_uchar op TSRMLS_DC) /* {{{ */ function_ptr = fcall->fbc; fcall->arg_num++; + if (fcall->uses_argument_unpacking) { + zend_error_noreturn(E_COMPILE_ERROR, + "Cannot use positional argument after argument unpacking"); + } + if (original_op == ZEND_SEND_REF) { if (function_ptr && function_ptr->common.function_name && @@ -2717,6 +2722,7 @@ void zend_do_unpack_params(znode *params TSRMLS_DC) /* {{{ */ zend_function_call_entry *fcall; zend_stack_top(&CG(function_call_stack), (void **) &fcall); + fcall->uses_argument_unpacking = 1; if (fcall->fbc) { /* If argument unpacking is used argument numbers and sending modes can no longer be diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index 270c085d03..5362058fa2 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -366,6 +366,7 @@ typedef struct _zend_function_state { typedef struct _zend_function_call_entry { zend_function *fbc; zend_uint arg_num; + zend_bool uses_argument_unpacking; } zend_function_call_entry; typedef struct _zend_switch_entry { -- cgit v1.2.1 From 95c73f99d358f42960cdd536c589244abf35174e Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Wed, 26 Feb 2014 16:25:10 +0100 Subject: Don't add num_additional_args in SEND opcodes Now that trailing positional args are disallowed, num_additional_args will always be zero in SEND opcodes (and FUNC_ARG fetches). --- Zend/zend_execute.c | 2 +- Zend/zend_vm_def.h | 17 ++++++----------- Zend/zend_vm_execute.h | 34 ++++++++++++---------------------- 3 files changed, 19 insertions(+), 34 deletions(-) (limited to 'Zend') diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 31caceecbe..66accd61e9 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -1686,7 +1686,7 @@ ZEND_API zend_execute_data *zend_create_execute_data_from_op_array(zend_op_array static zend_always_inline zend_bool zend_is_by_ref_func_arg_fetch(zend_op *opline, call_slot *call TSRMLS_DC) /* {{{ */ { - zend_uint arg_num = (opline->extended_value & ZEND_FETCH_ARG_MASK) + call->num_additional_args; + zend_uint arg_num = opline->extended_value & ZEND_FETCH_ARG_MASK; return ARG_SHOULD_BE_SENT_BY_REF(call->fbc, arg_num); } /* }}} */ diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 713d6fadee..ed353edbac 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -3063,9 +3063,8 @@ ZEND_VM_HANDLER(65, ZEND_SEND_VAL, CONST|TMP, ANY) SAVE_OPLINE(); if (opline->extended_value == ZEND_DO_FCALL_BY_NAME) { - int arg_num = opline->op2.num + EX(call)->num_additional_args; - if (ARG_MUST_BE_SENT_BY_REF(EX(call)->fbc, arg_num)) { - zend_error_noreturn(E_ERROR, "Cannot pass parameter %d by reference", arg_num); + if (ARG_MUST_BE_SENT_BY_REF(EX(call)->fbc, opline->op2.num)) { + zend_error_noreturn(E_ERROR, "Cannot pass parameter %d by reference", opline->op2.num); } } @@ -3126,7 +3125,6 @@ ZEND_VM_HANDLER(106, ZEND_SEND_VAR_NO_REF, VAR|CV, ANY) USE_OPLINE zend_free_op free_op1; zval *varptr; - int arg_num; SAVE_OPLINE(); if (opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) { /* Had function_ptr at compile_time */ @@ -3134,8 +3132,7 @@ ZEND_VM_HANDLER(106, ZEND_SEND_VAR_NO_REF, VAR|CV, ANY) ZEND_VM_DISPATCH_TO_HELPER(zend_send_by_var_helper); } } else { - arg_num = opline->op2.num + EX(call)->num_additional_args; - if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, arg_num)) { + if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, opline->op2.num)) { ZEND_VM_DISPATCH_TO_HELPER(zend_send_by_var_helper); } } @@ -3155,7 +3152,7 @@ ZEND_VM_HANDLER(106, ZEND_SEND_VAR_NO_REF, VAR|CV, ANY) if ((opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) ? !(opline->extended_value & ZEND_ARG_SEND_SILENT) : - !ARG_MAY_BE_SENT_BY_REF(EX(call)->fbc, arg_num)) { + !ARG_MAY_BE_SENT_BY_REF(EX(call)->fbc, opline->op2.num)) { zend_error(E_STRICT, "Only variables should be passed by reference"); } ALLOC_ZVAL(valptr); @@ -3193,8 +3190,7 @@ ZEND_VM_HANDLER(67, ZEND_SEND_REF, VAR|CV, ANY) if (opline->extended_value == ZEND_DO_FCALL_BY_NAME && EX(function_state).function->type == ZEND_INTERNAL_FUNCTION) { - int arg_num = opline->op2.num + EX(call)->num_additional_args; - if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, arg_num)) { + if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, opline->op2.num)) { ZEND_VM_DISPATCH_TO_HELPER(zend_send_by_var_helper); } } @@ -3214,8 +3210,7 @@ ZEND_VM_HANDLER(66, ZEND_SEND_VAR, VAR|CV, ANY) USE_OPLINE if (opline->extended_value == ZEND_DO_FCALL_BY_NAME) { - int arg_num = opline->op2.num + EX(call)->num_additional_args; - if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, arg_num)) { + if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, opline->op2.num)) { ZEND_VM_DISPATCH_TO_HANDLER(ZEND_SEND_REF); } } diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 2593c26f43..a4e3350eaa 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -2736,9 +2736,8 @@ static int ZEND_FASTCALL ZEND_SEND_VAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_A SAVE_OPLINE(); if (opline->extended_value == ZEND_DO_FCALL_BY_NAME) { - int arg_num = opline->op2.num + EX(call)->num_additional_args; - if (ARG_MUST_BE_SENT_BY_REF(EX(call)->fbc, arg_num)) { - zend_error_noreturn(E_ERROR, "Cannot pass parameter %d by reference", arg_num); + if (ARG_MUST_BE_SENT_BY_REF(EX(call)->fbc, opline->op2.num)) { + zend_error_noreturn(E_ERROR, "Cannot pass parameter %d by reference", opline->op2.num); } } @@ -8094,9 +8093,8 @@ static int ZEND_FASTCALL ZEND_SEND_VAL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARG SAVE_OPLINE(); if (opline->extended_value == ZEND_DO_FCALL_BY_NAME) { - int arg_num = opline->op2.num + EX(call)->num_additional_args; - if (ARG_MUST_BE_SENT_BY_REF(EX(call)->fbc, arg_num)) { - zend_error_noreturn(E_ERROR, "Cannot pass parameter %d by reference", arg_num); + if (ARG_MUST_BE_SENT_BY_REF(EX(call)->fbc, opline->op2.num)) { + zend_error_noreturn(E_ERROR, "Cannot pass parameter %d by reference", opline->op2.num); } } @@ -13385,7 +13383,6 @@ static int ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HAND USE_OPLINE zend_free_op free_op1; zval *varptr; - int arg_num; SAVE_OPLINE(); if (opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) { /* Had function_ptr at compile_time */ @@ -13393,8 +13390,7 @@ static int ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HAND return zend_send_by_var_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } } else { - arg_num = opline->op2.num + EX(call)->num_additional_args; - if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, arg_num)) { + if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, opline->op2.num)) { return zend_send_by_var_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } } @@ -13414,7 +13410,7 @@ static int ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HAND if ((opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) ? !(opline->extended_value & ZEND_ARG_SEND_SILENT) : - !ARG_MAY_BE_SENT_BY_REF(EX(call)->fbc, arg_num)) { + !ARG_MAY_BE_SENT_BY_REF(EX(call)->fbc, opline->op2.num)) { zend_error(E_STRICT, "Only variables should be passed by reference"); } ALLOC_ZVAL(valptr); @@ -13452,8 +13448,7 @@ static int ZEND_FASTCALL ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG if (opline->extended_value == ZEND_DO_FCALL_BY_NAME && EX(function_state).function->type == ZEND_INTERNAL_FUNCTION) { - int arg_num = opline->op2.num + EX(call)->num_additional_args; - if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, arg_num)) { + if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, opline->op2.num)) { return zend_send_by_var_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } } @@ -13473,8 +13468,7 @@ static int ZEND_FASTCALL ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG USE_OPLINE if (opline->extended_value == ZEND_DO_FCALL_BY_NAME) { - int arg_num = opline->op2.num + EX(call)->num_additional_args; - if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, arg_num)) { + if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, opline->op2.num)) { return ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } } @@ -31000,7 +30994,6 @@ static int ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDL USE_OPLINE zval *varptr; - int arg_num; SAVE_OPLINE(); if (opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) { /* Had function_ptr at compile_time */ @@ -31008,8 +31001,7 @@ static int ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDL return zend_send_by_var_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } } else { - arg_num = opline->op2.num + EX(call)->num_additional_args; - if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, arg_num)) { + if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, opline->op2.num)) { return zend_send_by_var_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } } @@ -31029,7 +31021,7 @@ static int ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDL if ((opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) ? !(opline->extended_value & ZEND_ARG_SEND_SILENT) : - !ARG_MAY_BE_SENT_BY_REF(EX(call)->fbc, arg_num)) { + !ARG_MAY_BE_SENT_BY_REF(EX(call)->fbc, opline->op2.num)) { zend_error(E_STRICT, "Only variables should be passed by reference"); } ALLOC_ZVAL(valptr); @@ -31067,8 +31059,7 @@ static int ZEND_FASTCALL ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS if (opline->extended_value == ZEND_DO_FCALL_BY_NAME && EX(function_state).function->type == ZEND_INTERNAL_FUNCTION) { - int arg_num = opline->op2.num + EX(call)->num_additional_args; - if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, arg_num)) { + if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, opline->op2.num)) { return zend_send_by_var_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } } @@ -31087,8 +31078,7 @@ static int ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS USE_OPLINE if (opline->extended_value == ZEND_DO_FCALL_BY_NAME) { - int arg_num = opline->op2.num + EX(call)->num_additional_args; - if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, arg_num)) { + if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->fbc, opline->op2.num)) { return ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); } } -- cgit v1.2.1 From 561843c9731f976f15867a09b906132999c73039 Mon Sep 17 00:00:00 2001 From: Ferenc Kovacs Date: Thu, 27 Feb 2014 11:28:46 +0100 Subject: typo spotted by Lajos Veres --- Zend/zend_vm_gen.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Zend') diff --git a/Zend/zend_vm_gen.php b/Zend/zend_vm_gen.php index 98e7f3e045..5da3405dd7 100644 --- a/Zend/zend_vm_gen.php +++ b/Zend/zend_vm_gen.php @@ -1237,7 +1237,7 @@ function gen_vm($def, $skel) { out($f, "# pragma warning(once : 6285)\n"); // Suppress ( || ) warnings on windows out($f, "# pragma warning(once : 6286)\n"); - // Suppress constant with constant comparsion warnings on windows + // Suppress constant with constant comparison warnings on windows out($f, "# pragma warning(once : 6326)\n"); } out($f, "#endif\n"); -- cgit v1.2.1 From 3d1fa4cb17038e530561a7a20c1b9497cec68f92 Mon Sep 17 00:00:00 2001 From: Tjerk Meesters Date: Thu, 6 Mar 2014 08:31:01 +0800 Subject: Allow T_POW in constant expressions --- Zend/tests/constant_expressions.phpt | 5 +++++ Zend/zend_ast.c | 7 +++++++ Zend/zend_language_parser.y | 1 + 3 files changed, 13 insertions(+) (limited to 'Zend') diff --git a/Zend/tests/constant_expressions.phpt b/Zend/tests/constant_expressions.phpt index 7dea0d83f7..cf6474bd63 100644 --- a/Zend/tests/constant_expressions.phpt +++ b/Zend/tests/constant_expressions.phpt @@ -35,6 +35,9 @@ const T_25 = 1 + 2 * 3; // Test for memory leaks const T_26 = "1" + 2 + "3"; +// Allow T_POW +const T_27 = 2 ** 3; + var_dump(T_1); var_dump(T_2); var_dump(T_3); @@ -61,6 +64,7 @@ var_dump(T_23); var_dump(T_24); var_dump(T_25); var_dump(T_26); +var_dump(T_27); ?> --EXPECT-- int(2) @@ -89,3 +93,4 @@ bool(false) bool(true) int(7) int(6) +int(8) diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c index cf595b4d58..9a0808db9d 100644 --- a/Zend/zend_ast.c +++ b/Zend/zend_ast.c @@ -107,6 +107,13 @@ ZEND_API void zend_ast_evaluate(zval *result, zend_ast *ast, zend_class_entry *s zval_dtor(&op1); zval_dtor(&op2); break; + case ZEND_POW: + zend_ast_evaluate(&op1, (&ast->u.child)[0], scope TSRMLS_CC); + zend_ast_evaluate(&op2, (&ast->u.child)[1], scope TSRMLS_CC); + pow_function(result, &op1, &op2 TSRMLS_CC); + zval_dtor(&op1); + zval_dtor(&op2); + break; case ZEND_DIV: zend_ast_evaluate(&op1, (&ast->u.child)[0], scope TSRMLS_CC); zend_ast_evaluate(&op2, (&ast->u.child)[1], scope TSRMLS_CC); diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index d3844540cf..b7467b7552 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -1006,6 +1006,7 @@ static_operation: static_scalar_value '+' static_scalar_value { $$.u.ast = zend_ast_create_binary(ZEND_ADD, $1.u.ast, $3.u.ast); } | static_scalar_value '-' static_scalar_value { $$.u.ast = zend_ast_create_binary(ZEND_SUB, $1.u.ast, $3.u.ast); } | static_scalar_value '*' static_scalar_value { $$.u.ast = zend_ast_create_binary(ZEND_MUL, $1.u.ast, $3.u.ast); } + | static_scalar_value T_POW static_scalar_value { $$.u.ast = zend_ast_create_binary(ZEND_POW, $1.u.ast, $3.u.ast); } | static_scalar_value '/' static_scalar_value { $$.u.ast = zend_ast_create_binary(ZEND_DIV, $1.u.ast, $3.u.ast); } | static_scalar_value '%' static_scalar_value { $$.u.ast = zend_ast_create_binary(ZEND_MOD, $1.u.ast, $3.u.ast); } | '!' static_scalar_value { $$.u.ast = zend_ast_create_unary(ZEND_BOOL_NOT, $2.u.ast); } -- cgit v1.2.1 From 994fcfcff90e3ce3c078e58d44beb636c5111eec Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 20 Mar 2014 22:58:10 +0100 Subject: Remove unnecessary check In case of an update the key already existed, so the next free element can not change. --- Zend/zend_hash.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'Zend') diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index 829cd33641..b5c310623e 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -358,9 +358,6 @@ ZEND_API int _zend_hash_index_update_or_next_insert(HashTable *ht, ulong h, void } UPDATE_DATA(ht, p, pData, nDataSize); HANDLE_UNBLOCK_INTERRUPTIONS(); - if ((long)h >= (long)ht->nNextFreeElement) { - ht->nNextFreeElement = h < LONG_MAX ? h + 1 : LONG_MAX; - } if (pDest) { *pDest = p->pData; } -- cgit v1.2.1 From c3a317117ad89694b60b9aa387b6737d6f2774cb Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 20 Mar 2014 23:08:31 +0100 Subject: Add helper function for updating bucket contents --- Zend/zend_hash.c | 72 +++++++++++++++++++++++++------------------------------- 1 file changed, 32 insertions(+), 40 deletions(-) (limited to 'Zend') diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index b5c310623e..ac713c6add 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -141,6 +141,21 @@ ZEND_API ulong zend_hash_func(const char *arKey, uint nKeyLength) static const Bucket *uninitialized_bucket = NULL; +static inline void zend_hash_bucket_update( + const HashTable *ht, Bucket *p, void *pData, uint nDataSize, void **pDest ZEND_FILE_LINE_DC +) { + ZEND_ASSERT(p->pData != pData); + HANDLE_BLOCK_INTERRUPTIONS(); + if (ht->pDestructor) { + ht->pDestructor(p->pData); + } + UPDATE_DATA(ht, p, pData, nDataSize); + HANDLE_UNBLOCK_INTERRUPTIONS(); + if (pDest) { + *pDest = p->pData; + } +} + ZEND_API int _zend_hash_init(HashTable *ht, uint nSize, dtor_func_t pDestructor, zend_bool persistent ZEND_FILE_LINE_DC) { uint i = 3; @@ -209,21 +224,14 @@ ZEND_API int _zend_hash_add_or_update(HashTable *ht, const char *arKey, uint nKe p = ht->arBuckets[nIndex]; while (p != NULL) { if (p->arKey == arKey || - ((p->h == h) && (p->nKeyLength == nKeyLength) && !memcmp(p->arKey, arKey, nKeyLength))) { - if (flag & HASH_ADD) { - return FAILURE; - } - ZEND_ASSERT(p->pData != pData); - HANDLE_BLOCK_INTERRUPTIONS(); - if (ht->pDestructor) { - ht->pDestructor(p->pData); - } - UPDATE_DATA(ht, p, pData, nDataSize); - if (pDest) { - *pDest = p->pData; - } - HANDLE_UNBLOCK_INTERRUPTIONS(); - return SUCCESS; + ((p->h == h) && (p->nKeyLength == nKeyLength) + && !memcmp(p->arKey, arKey, nKeyLength)) + ) { + if (flag & HASH_ADD) { + return FAILURE; + } + zend_hash_bucket_update(ht, p, pData, nDataSize, pDest ZEND_FILE_LINE_RELAY_CC); + return SUCCESS; } p = p->pNext; } @@ -272,21 +280,14 @@ ZEND_API int _zend_hash_quick_add_or_update(HashTable *ht, const char *arKey, ui p = ht->arBuckets[nIndex]; while (p != NULL) { if (p->arKey == arKey || - ((p->h == h) && (p->nKeyLength == nKeyLength) && !memcmp(p->arKey, arKey, nKeyLength))) { - if (flag & HASH_ADD) { - return FAILURE; - } - ZEND_ASSERT(p->pData != pData); - HANDLE_BLOCK_INTERRUPTIONS(); - if (ht->pDestructor) { - ht->pDestructor(p->pData); - } - UPDATE_DATA(ht, p, pData, nDataSize); - if (pDest) { - *pDest = p->pData; - } - HANDLE_UNBLOCK_INTERRUPTIONS(); - return SUCCESS; + ((p->h == h) && (p->nKeyLength == nKeyLength) + && !memcmp(p->arKey, arKey, nKeyLength)) + ) { + if (flag & HASH_ADD) { + return FAILURE; + } + zend_hash_bucket_update(ht, p, pData, nDataSize, pDest ZEND_FILE_LINE_RELAY_CC); + return SUCCESS; } p = p->pNext; } @@ -351,16 +352,7 @@ ZEND_API int _zend_hash_index_update_or_next_insert(HashTable *ht, ulong h, void if (flag & HASH_NEXT_INSERT || flag & HASH_ADD) { return FAILURE; } - ZEND_ASSERT(p->pData != pData); - HANDLE_BLOCK_INTERRUPTIONS(); - if (ht->pDestructor) { - ht->pDestructor(p->pData); - } - UPDATE_DATA(ht, p, pData, nDataSize); - HANDLE_UNBLOCK_INTERRUPTIONS(); - if (pDest) { - *pDest = p->pData; - } + zend_hash_bucket_update(ht, p, pData, nDataSize, pDest ZEND_FILE_LINE_RELAY_CC); return SUCCESS; } p = p->pNext; -- cgit v1.2.1 From 4efa58dd593409eb5a4359780bf6b3f83995499b Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 20 Mar 2014 23:25:53 +0100 Subject: Make zend_hash_apply_deleter() void, to allow reuse Also remove lies in the comment above the function. apply_deleter is not safe against modification, if the modification involves removing the next bucket. Also modified the implementation of zend_hash_graceful_destroy() to be fully graceful (the reverse variant already was). --- Zend/zend_hash.c | 58 ++++++++++++++++++++++++-------------------------------- 1 file changed, 25 insertions(+), 33 deletions(-) (limited to 'Zend') diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index ac713c6add..ab8601c2eb 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -543,13 +543,10 @@ ZEND_API void zend_hash_clean(HashTable *ht) } /* This function is used by the various apply() functions. - * It deletes the passed bucket, and returns the address of the - * next bucket. The hash *may* be altered during that time, the - * returned value will still be valid. + * It deletes the passed bucket. */ -static Bucket *zend_hash_apply_deleter(HashTable *ht, Bucket *p) +static void zend_hash_apply_deleter(HashTable *ht, Bucket *p) { - Bucket *retval; #ifdef ZEND_SIGNALS TSRMLS_FETCH(); #endif @@ -592,23 +589,18 @@ static Bucket *zend_hash_apply_deleter(HashTable *ht, Bucket *p) if (p->pData != &p->pDataPtr) { pefree(p->pData, ht->persistent); } - retval = p->pListNext; pefree(p, ht->persistent); - - return retval; } ZEND_API void zend_hash_graceful_destroy(HashTable *ht) { - Bucket *p; - IS_CONSISTENT(ht); - p = ht->pListHead; - while (p != NULL) { - p = zend_hash_apply_deleter(ht, p); + while (ht->pListHead != NULL) { + zend_hash_apply_deleter(ht, ht->pListHead); } + if (ht->nTableMask) { pefree(ht->arBuckets, ht->persistent); } @@ -618,14 +610,10 @@ ZEND_API void zend_hash_graceful_destroy(HashTable *ht) ZEND_API void zend_hash_graceful_reverse_destroy(HashTable *ht) { - Bucket *p; - IS_CONSISTENT(ht); - p = ht->pListTail; - while (p != NULL) { - zend_hash_apply_deleter(ht, p); - p = ht->pListTail; + while (ht->pListTail != NULL) { + zend_hash_apply_deleter(ht, ht->pListTail); } if (ht->nTableMask) { @@ -654,12 +642,13 @@ ZEND_API void zend_hash_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC) p = ht->pListHead; while (p != NULL) { int result = apply_func(p->pData TSRMLS_CC); - + + Bucket *p_next = p->pListNext; if (result & ZEND_HASH_APPLY_REMOVE) { - p = zend_hash_apply_deleter(ht, p); - } else { - p = p->pListNext; + zend_hash_apply_deleter(ht, p); } + p = p_next; + if (result & ZEND_HASH_APPLY_STOP) { break; } @@ -679,11 +668,12 @@ ZEND_API void zend_hash_apply_with_argument(HashTable *ht, apply_func_arg_t appl while (p != NULL) { int result = apply_func(p->pData, argument TSRMLS_CC); + Bucket *p_next = p->pListNext; if (result & ZEND_HASH_APPLY_REMOVE) { - p = zend_hash_apply_deleter(ht, p); - } else { - p = p->pListNext; + zend_hash_apply_deleter(ht, p); } + p = p_next; + if (result & ZEND_HASH_APPLY_STOP) { break; } @@ -711,11 +701,12 @@ ZEND_API void zend_hash_apply_with_arguments(HashTable *ht TSRMLS_DC, apply_func hash_key.h = p->h; result = apply_func(p->pData TSRMLS_CC, num_args, args, &hash_key); + Bucket *p_next = p->pListNext; if (result & ZEND_HASH_APPLY_REMOVE) { - p = zend_hash_apply_deleter(ht, p); - } else { - p = p->pListNext; + zend_hash_apply_deleter(ht, p); } + p = p_next; + if (result & ZEND_HASH_APPLY_STOP) { va_end(args); break; @@ -729,7 +720,7 @@ ZEND_API void zend_hash_apply_with_arguments(HashTable *ht TSRMLS_DC, apply_func ZEND_API void zend_hash_reverse_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC) { - Bucket *p, *q; + Bucket *p; IS_CONSISTENT(ht); @@ -738,11 +729,12 @@ ZEND_API void zend_hash_reverse_apply(HashTable *ht, apply_func_t apply_func TSR while (p != NULL) { int result = apply_func(p->pData TSRMLS_CC); - q = p; - p = p->pListLast; + Bucket *p_last = p->pListLast; if (result & ZEND_HASH_APPLY_REMOVE) { - zend_hash_apply_deleter(ht, q); + zend_hash_apply_deleter(ht, p); } + p = p_last; + if (result & ZEND_HASH_APPLY_STOP) { break; } -- cgit v1.2.1 From 4e7e301dda2fa081c1310279b027a2350c05801e Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 20 Mar 2014 23:50:04 +0100 Subject: Rename+move zend_hash_apply_deleter and reuse it The interruption handling was normalized to wrap the entire deletion operation (instead of leaving out the destructor call and/or the deallocation) per the recommendation of somebody (don't remember who) familiar with zend signals. There is an always-inlined variant of the function for use in the main deletion function, to ensure there is no performance impact. --- Zend/zend_hash.c | 212 +++++++++++++++---------------------------------------- 1 file changed, 57 insertions(+), 155 deletions(-) (limited to 'Zend') diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index ab8601c2eb..aa3587c675 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -156,6 +156,51 @@ static inline void zend_hash_bucket_update( } } +static zend_always_inline void i_zend_hash_bucket_delete(HashTable *ht, Bucket *p) +{ +#ifdef ZEND_SIGNALS + TSRMLS_FETCH(); +#endif + + HANDLE_BLOCK_INTERRUPTIONS(); + if (p->pLast) { + p->pLast->pNext = p->pNext; + } else { + ht->arBuckets[p->h & ht->nTableMask] = p->pNext; + } + if (p->pNext) { + p->pNext->pLast = p->pLast; + } + if (p->pListLast != NULL) { + p->pListLast->pListNext = p->pListNext; + } else { + /* Deleting the head of the list */ + ht->pListHead = p->pListNext; + } + if (p->pListNext != NULL) { + p->pListNext->pListLast = p->pListLast; + } else { + /* Deleting the tail of the list */ + ht->pListTail = p->pListLast; + } + if (ht->pInternalPointer == p) { + ht->pInternalPointer = p->pListNext; + } + ht->nNumOfElements--; + if (ht->pDestructor) { + ht->pDestructor(p->pData); + } + if (p->pData != &p->pDataPtr) { + pefree(p->pData, ht->persistent); + } + pefree(p, ht->persistent); + HANDLE_UNBLOCK_INTERRUPTIONS(); +} + +static void zend_hash_bucket_delete(HashTable *ht, Bucket *p) { + i_zend_hash_bucket_delete(ht, p); +} + ZEND_API int _zend_hash_init(HashTable *ht, uint nSize, dtor_func_t pDestructor, zend_bool persistent ZEND_FILE_LINE_DC) { uint i = 3; @@ -427,9 +472,6 @@ ZEND_API int zend_hash_del_key_or_index(HashTable *ht, const char *arKey, uint n { uint nIndex; Bucket *p; -#ifdef ZEND_SIGNALS - TSRMLS_FETCH(); -#endif IS_CONSISTENT(ht); @@ -444,38 +486,7 @@ ZEND_API int zend_hash_del_key_or_index(HashTable *ht, const char *arKey, uint n && (p->nKeyLength == nKeyLength) && ((p->nKeyLength == 0) /* Numeric index (short circuits the memcmp() check) */ || !memcmp(p->arKey, arKey, nKeyLength))) { /* String index */ - HANDLE_BLOCK_INTERRUPTIONS(); - if (p == ht->arBuckets[nIndex]) { - ht->arBuckets[nIndex] = p->pNext; - } else { - p->pLast->pNext = p->pNext; - } - if (p->pNext) { - p->pNext->pLast = p->pLast; - } - if (p->pListLast != NULL) { - p->pListLast->pListNext = p->pListNext; - } else { - /* Deleting the head of the list */ - ht->pListHead = p->pListNext; - } - if (p->pListNext != NULL) { - p->pListNext->pListLast = p->pListLast; - } else { - ht->pListTail = p->pListLast; - } - if (ht->pInternalPointer == p) { - ht->pInternalPointer = p->pListNext; - } - ht->nNumOfElements--; - if (ht->pDestructor) { - ht->pDestructor(p->pData); - } - if (p->pData != &p->pDataPtr) { - pefree(p->pData, ht->persistent); - } - pefree(p, ht->persistent); - HANDLE_UNBLOCK_INTERRUPTIONS(); + i_zend_hash_bucket_delete(ht, p); return SUCCESS; } p = p->pNext; @@ -542,63 +553,12 @@ ZEND_API void zend_hash_clean(HashTable *ht) } } -/* This function is used by the various apply() functions. - * It deletes the passed bucket. - */ -static void zend_hash_apply_deleter(HashTable *ht, Bucket *p) -{ -#ifdef ZEND_SIGNALS - TSRMLS_FETCH(); -#endif - - HANDLE_BLOCK_INTERRUPTIONS(); - if (p->pLast) { - p->pLast->pNext = p->pNext; - } else { - uint nIndex; - - nIndex = p->h & ht->nTableMask; - ht->arBuckets[nIndex] = p->pNext; - } - if (p->pNext) { - p->pNext->pLast = p->pLast; - } else { - /* Nothing to do as this list doesn't have a tail */ - } - - if (p->pListLast != NULL) { - p->pListLast->pListNext = p->pListNext; - } else { - /* Deleting the head of the list */ - ht->pListHead = p->pListNext; - } - if (p->pListNext != NULL) { - p->pListNext->pListLast = p->pListLast; - } else { - ht->pListTail = p->pListLast; - } - if (ht->pInternalPointer == p) { - ht->pInternalPointer = p->pListNext; - } - ht->nNumOfElements--; - HANDLE_UNBLOCK_INTERRUPTIONS(); - - if (ht->pDestructor) { - ht->pDestructor(p->pData); - } - if (p->pData != &p->pDataPtr) { - pefree(p->pData, ht->persistent); - } - pefree(p, ht->persistent); -} - - ZEND_API void zend_hash_graceful_destroy(HashTable *ht) { IS_CONSISTENT(ht); while (ht->pListHead != NULL) { - zend_hash_apply_deleter(ht, ht->pListHead); + zend_hash_bucket_delete(ht, ht->pListHead); } if (ht->nTableMask) { @@ -613,7 +573,7 @@ ZEND_API void zend_hash_graceful_reverse_destroy(HashTable *ht) IS_CONSISTENT(ht); while (ht->pListTail != NULL) { - zend_hash_apply_deleter(ht, ht->pListTail); + zend_hash_bucket_delete(ht, ht->pListTail); } if (ht->nTableMask) { @@ -645,7 +605,7 @@ ZEND_API void zend_hash_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC) Bucket *p_next = p->pListNext; if (result & ZEND_HASH_APPLY_REMOVE) { - zend_hash_apply_deleter(ht, p); + zend_hash_bucket_delete(ht, p); } p = p_next; @@ -670,7 +630,7 @@ ZEND_API void zend_hash_apply_with_argument(HashTable *ht, apply_func_arg_t appl Bucket *p_next = p->pListNext; if (result & ZEND_HASH_APPLY_REMOVE) { - zend_hash_apply_deleter(ht, p); + zend_hash_bucket_delete(ht, p); } p = p_next; @@ -703,7 +663,7 @@ ZEND_API void zend_hash_apply_with_arguments(HashTable *ht TSRMLS_DC, apply_func Bucket *p_next = p->pListNext; if (result & ZEND_HASH_APPLY_REMOVE) { - zend_hash_apply_deleter(ht, p); + zend_hash_bucket_delete(ht, p); } p = p_next; @@ -731,7 +691,7 @@ ZEND_API void zend_hash_reverse_apply(HashTable *ht, apply_func_t apply_func TSR Bucket *p_last = p->pListLast; if (result & ZEND_HASH_APPLY_REMOVE) { - zend_hash_apply_deleter(ht, p); + zend_hash_bucket_delete(ht, p); } p = p_last; @@ -1204,8 +1164,6 @@ ZEND_API int zend_hash_update_current_key_ex(HashTable *ht, int key_type, const return FAILURE; } - HANDLE_BLOCK_INTERRUPTIONS(); - if (q) { if (mode != HASH_UPDATE_KEY_ANYWAY) { Bucket *r = p->pListLast; @@ -1220,73 +1178,17 @@ ZEND_API int zend_hash_update_current_key_ex(HashTable *ht, int key_type, const } if (mode & found) { /* delete current bucket */ - if (p == ht->arBuckets[p->h & ht->nTableMask]) { - ht->arBuckets[p->h & ht->nTableMask] = p->pNext; - } else { - p->pLast->pNext = p->pNext; - } - if (p->pNext) { - p->pNext->pLast = p->pLast; - } - if (p->pListLast != NULL) { - p->pListLast->pListNext = p->pListNext; - } else { - /* Deleting the head of the list */ - ht->pListHead = p->pListNext; - } - if (p->pListNext != NULL) { - p->pListNext->pListLast = p->pListLast; - } else { - ht->pListTail = p->pListLast; - } - if (ht->pInternalPointer == p) { - ht->pInternalPointer = p->pListNext; - } - ht->nNumOfElements--; - if (ht->pDestructor) { - ht->pDestructor(p->pData); - } - if (p->pData != &p->pDataPtr) { - pefree(p->pData, ht->persistent); - } - pefree(p, ht->persistent); - HANDLE_UNBLOCK_INTERRUPTIONS(); + zend_hash_bucket_delete(ht, p); return FAILURE; } } + /* delete another bucket with the same key */ - if (q == ht->arBuckets[q->h & ht->nTableMask]) { - ht->arBuckets[q->h & ht->nTableMask] = q->pNext; - } else { - q->pLast->pNext = q->pNext; - } - if (q->pNext) { - q->pNext->pLast = q->pLast; - } - if (q->pListLast != NULL) { - q->pListLast->pListNext = q->pListNext; - } else { - /* Deleting the head of the list */ - ht->pListHead = q->pListNext; - } - if (q->pListNext != NULL) { - q->pListNext->pListLast = q->pListLast; - } else { - ht->pListTail = q->pListLast; - } - if (ht->pInternalPointer == q) { - ht->pInternalPointer = q->pListNext; - } - ht->nNumOfElements--; - if (ht->pDestructor) { - ht->pDestructor(q->pData); - } - if (q->pData != &q->pDataPtr) { - pefree(q->pData, ht->persistent); - } - pefree(q, ht->persistent); + zend_hash_bucket_delete(ht, q); } + HANDLE_BLOCK_INTERRUPTIONS(); + if (p->pNext) { p->pNext->pLast = p->pLast; } -- cgit v1.2.1 From f331ed14143e78afe409018b00b19b05ed35c122 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 21 Mar 2014 01:32:49 +0100 Subject: Revert "Add helper function for updating bucket contents" Reverting this for now, because it would require further changes thanks to the zend signals tsrms-but-only-sometimes awesomeness. --- Zend/zend_hash.c | 72 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 40 insertions(+), 32 deletions(-) (limited to 'Zend') diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index aa3587c675..135d3c3fa3 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -141,21 +141,6 @@ ZEND_API ulong zend_hash_func(const char *arKey, uint nKeyLength) static const Bucket *uninitialized_bucket = NULL; -static inline void zend_hash_bucket_update( - const HashTable *ht, Bucket *p, void *pData, uint nDataSize, void **pDest ZEND_FILE_LINE_DC -) { - ZEND_ASSERT(p->pData != pData); - HANDLE_BLOCK_INTERRUPTIONS(); - if (ht->pDestructor) { - ht->pDestructor(p->pData); - } - UPDATE_DATA(ht, p, pData, nDataSize); - HANDLE_UNBLOCK_INTERRUPTIONS(); - if (pDest) { - *pDest = p->pData; - } -} - static zend_always_inline void i_zend_hash_bucket_delete(HashTable *ht, Bucket *p) { #ifdef ZEND_SIGNALS @@ -269,14 +254,21 @@ ZEND_API int _zend_hash_add_or_update(HashTable *ht, const char *arKey, uint nKe p = ht->arBuckets[nIndex]; while (p != NULL) { if (p->arKey == arKey || - ((p->h == h) && (p->nKeyLength == nKeyLength) - && !memcmp(p->arKey, arKey, nKeyLength)) - ) { - if (flag & HASH_ADD) { - return FAILURE; - } - zend_hash_bucket_update(ht, p, pData, nDataSize, pDest ZEND_FILE_LINE_RELAY_CC); - return SUCCESS; + ((p->h == h) && (p->nKeyLength == nKeyLength) && !memcmp(p->arKey, arKey, nKeyLength))) { + if (flag & HASH_ADD) { + return FAILURE; + } + ZEND_ASSERT(p->pData != pData); + HANDLE_BLOCK_INTERRUPTIONS(); + if (ht->pDestructor) { + ht->pDestructor(p->pData); + } + UPDATE_DATA(ht, p, pData, nDataSize); + if (pDest) { + *pDest = p->pData; + } + HANDLE_UNBLOCK_INTERRUPTIONS(); + return SUCCESS; } p = p->pNext; } @@ -325,14 +317,21 @@ ZEND_API int _zend_hash_quick_add_or_update(HashTable *ht, const char *arKey, ui p = ht->arBuckets[nIndex]; while (p != NULL) { if (p->arKey == arKey || - ((p->h == h) && (p->nKeyLength == nKeyLength) - && !memcmp(p->arKey, arKey, nKeyLength)) - ) { - if (flag & HASH_ADD) { - return FAILURE; - } - zend_hash_bucket_update(ht, p, pData, nDataSize, pDest ZEND_FILE_LINE_RELAY_CC); - return SUCCESS; + ((p->h == h) && (p->nKeyLength == nKeyLength) && !memcmp(p->arKey, arKey, nKeyLength))) { + if (flag & HASH_ADD) { + return FAILURE; + } + ZEND_ASSERT(p->pData != pData); + HANDLE_BLOCK_INTERRUPTIONS(); + if (ht->pDestructor) { + ht->pDestructor(p->pData); + } + UPDATE_DATA(ht, p, pData, nDataSize); + if (pDest) { + *pDest = p->pData; + } + HANDLE_UNBLOCK_INTERRUPTIONS(); + return SUCCESS; } p = p->pNext; } @@ -397,7 +396,16 @@ ZEND_API int _zend_hash_index_update_or_next_insert(HashTable *ht, ulong h, void if (flag & HASH_NEXT_INSERT || flag & HASH_ADD) { return FAILURE; } - zend_hash_bucket_update(ht, p, pData, nDataSize, pDest ZEND_FILE_LINE_RELAY_CC); + ZEND_ASSERT(p->pData != pData); + HANDLE_BLOCK_INTERRUPTIONS(); + if (ht->pDestructor) { + ht->pDestructor(p->pData); + } + UPDATE_DATA(ht, p, pData, nDataSize); + HANDLE_UNBLOCK_INTERRUPTIONS(); + if (pDest) { + *pDest = p->pData; + } return SUCCESS; } p = p->pNext; -- cgit v1.2.1 From 9d4001f1c8502d0217417c859b59b771e38ed487 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Sat, 22 Mar 2014 10:44:01 +0100 Subject: fix C89 compat --- Zend/zend_hash.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'Zend') diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index 135d3c3fa3..f419e8a571 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -663,13 +663,15 @@ ZEND_API void zend_hash_apply_with_arguments(HashTable *ht TSRMLS_DC, apply_func p = ht->pListHead; while (p != NULL) { int result; + Bucket *p_next; + va_start(args, num_args); hash_key.arKey = p->arKey; hash_key.nKeyLength = p->nKeyLength; hash_key.h = p->h; result = apply_func(p->pData TSRMLS_CC, num_args, args, &hash_key); - Bucket *p_next = p->pListNext; + p_next = p->pListNext; if (result & ZEND_HASH_APPLY_REMOVE) { zend_hash_bucket_delete(ht, p); } -- cgit v1.2.1 From 0e273217cfd1e72b5109a880fb4334edd2f61448 Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Mon, 7 Apr 2014 17:14:38 +0200 Subject: Fix Linux specific fail in error traces Linux apparently does not like memcpy in overlapping regions... --- Zend/zend_exceptions.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Zend') diff --git a/Zend/zend_exceptions.c b/Zend/zend_exceptions.c index 9b7d3689c6..e4570269e3 100644 --- a/Zend/zend_exceptions.c +++ b/Zend/zend_exceptions.c @@ -363,7 +363,7 @@ ZEND_METHOD(error_exception, getSeverity) #define TRACE_ARG_APPEND(vallen) \ *str = (char*)erealloc(*str, *len + 1 + vallen); \ - memcpy((*str) + *len - l_added + 1 + vallen, (*str) + *len - l_added + 1, l_added); + memmove((*str) + *len - l_added + 1 + vallen, (*str) + *len - l_added + 1, l_added); /* }}} */ -- cgit v1.2.1 From 1aa8719e32663fbfcad9668364fbac0bc415b678 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Tue, 8 Apr 2014 11:17:17 +0200 Subject: Add zend_hash_reindex The implementation differs from the original in array.c in that it rehashes the hashtable in the same loop. This is approximately two times faster (not counting the rare case of a purely associative array). --- Zend/zend_hash.c | 27 ++++++++++++++++++++++++--- Zend/zend_hash.h | 1 + 2 files changed, 25 insertions(+), 3 deletions(-) (limited to 'Zend') diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index f419e8a571..d41ad43969 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -466,16 +466,37 @@ ZEND_API int zend_hash_rehash(HashTable *ht) } memset(ht->arBuckets, 0, ht->nTableSize * sizeof(Bucket *)); - p = ht->pListHead; - while (p != NULL) { + for (p = ht->pListHead; p != NULL; p = p->pListNext) { nIndex = p->h & ht->nTableMask; CONNECT_TO_BUCKET_DLLIST(p, ht->arBuckets[nIndex]); ht->arBuckets[nIndex] = p; - p = p->pListNext; } return SUCCESS; } +ZEND_API void zend_hash_reindex(HashTable *ht) { + Bucket *p; + uint nIndex; + ulong offset = 0; + + IS_CONSISTENT(ht); + if (UNEXPECTED(ht->nNumOfElements == 0)) { + return; + } + + memset(ht->arBuckets, 0, ht->nTableSize * sizeof(Bucket *)); + for (p = ht->pListHead; p != NULL; p = p->pListNext) { + if (p->nKeyLength == 0) { + p->h = offset++; + } + + nIndex = p->h & ht->nTableMask; + CONNECT_TO_BUCKET_DLLIST(p, ht->arBuckets[nIndex]); + ht->arBuckets[nIndex] = p; + } + ht->nNextFreeElement = offset; +} + ZEND_API int zend_hash_del_key_or_index(HashTable *ht, const char *arKey, uint nKeyLength, ulong h, int flag) { uint nIndex; diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h index d990c16674..eb9a53769e 100644 --- a/Zend/zend_hash.h +++ b/Zend/zend_hash.h @@ -227,6 +227,7 @@ ZEND_API int zend_hash_minmax(const HashTable *ht, compare_func_t compar, int fl ZEND_API int zend_hash_num_elements(const HashTable *ht); ZEND_API int zend_hash_rehash(HashTable *ht); +ZEND_API void zend_hash_reindex(HashTable *ht); /* * DJBX33A (Daniel J. Bernstein, Times 33 with Addition) -- cgit v1.2.1 From 22d3eb3117b1b5c484152c9fec5a74b0e95024ea Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Tue, 8 Apr 2014 23:24:52 +0200 Subject: Add zend_hash_splice This implements the original functionality of php_splice, but as an in-place operation, thus avoiding copying the HT. This is much faster (~10x) if the splice removes a small portion of the array and doesn't insert many elements. --- Zend/zend_hash.c | 116 +++++++++++++++++++++++++++++++++++++++++++------------ Zend/zend_hash.h | 4 ++ 2 files changed, 95 insertions(+), 25 deletions(-) (limited to 'Zend') diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index d41ad43969..a33e8726e2 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -29,18 +29,24 @@ (element)->pNext->pLast = (element); \ } -#define CONNECT_TO_GLOBAL_DLLIST(element, ht) \ - (element)->pListLast = (ht)->pListTail; \ - (ht)->pListTail = (element); \ - (element)->pListNext = NULL; \ - if ((element)->pListLast != NULL) { \ - (element)->pListLast->pListNext = (element); \ - } \ - if (!(ht)->pListHead) { \ +#define CONNECT_TO_GLOBAL_DLLIST_EX(element, ht, last, next)\ + (element)->pListLast = (last); \ + (element)->pListNext = (next); \ + if ((last) != NULL) { \ + (last)->pListNext = (element); \ + } else { \ (ht)->pListHead = (element); \ } \ - if ((ht)->pInternalPointer == NULL) { \ - (ht)->pInternalPointer = (element); \ + if ((next) != NULL) { \ + (next)->pListLast = (element); \ + } else { \ + (ht)->pListTail = (element); \ + } \ + +#define CONNECT_TO_GLOBAL_DLLIST(element, ht) \ + CONNECT_TO_GLOBAL_DLLIST_EX(element, ht, (ht)->pListTail, (Bucket *) NULL); \ + if ((ht)->pInternalPointer == NULL) { \ + (ht)->pInternalPointer = (element); \ } #if ZEND_DEBUG @@ -122,13 +128,13 @@ ZEND_API ulong zend_hash_func(const char *arKey, uint nKeyLength) memcpy((p)->pData, pData, nDataSize); \ } -#define INIT_DATA(ht, p, pData, nDataSize); \ +#define INIT_DATA(ht, p, _pData, nDataSize); \ if (nDataSize == sizeof(void*)) { \ - memcpy(&(p)->pDataPtr, pData, sizeof(void *)); \ + memcpy(&(p)->pDataPtr, (_pData), sizeof(void *)); \ (p)->pData = &(p)->pDataPtr; \ } else { \ (p)->pData = (void *) pemalloc_rel(nDataSize, (ht)->persistent);\ - memcpy((p)->pData, pData, nDataSize); \ + memcpy((p)->pData, (_pData), nDataSize); \ (p)->pDataPtr=NULL; \ } @@ -1246,21 +1252,12 @@ ZEND_API int zend_hash_update_current_key_ex(HashTable *ht, int key_type, const q->pData = p->pData; } q->pDataPtr = p->pDataPtr; - q->pListNext = p->pListNext; - q->pListLast = p->pListLast; - if (q->pListNext) { - p->pListNext->pListLast = q; - } else { - ht->pListTail = q; - } - if (q->pListLast) { - p->pListLast->pListNext = q; - } else { - ht->pListHead = q; - } + + CONNECT_TO_GLOBAL_DLLIST_EX(q, ht, p->pListLast, p->pListNext); if (ht->pInternalPointer == p) { ht->pInternalPointer = q; } + if (pos) { *pos = q; } @@ -1291,6 +1288,75 @@ ZEND_API int zend_hash_update_current_key_ex(HashTable *ht, int key_type, const } } +/* Performs an in-place splice operation on a hashtable: + * The elements between offset and offset+length are removed and the elements in list[list_count] + * are inserted in their place. The removed elements can be optionally collected into a hashtable. + * This operation reindexes the hashtable, i.e. integer keys will be zero-based and sequential, + * while string keys stay intact. The same applies to the elements inserted into the removed HT. */ +ZEND_API void _zend_hash_splice(HashTable *ht, uint nDataSize, copy_ctor_func_t pCopyConstructor, uint offset, uint length, void **list, uint list_count, HashTable *removed ZEND_FILE_LINE_DC) /* {{{ */ +{ + int pos; + Bucket *p; + + IS_CONSISTENT(ht); + CHECK_INIT(ht); + + /* Skip all elements until offset */ + for (pos = 0, p = ht->pListHead; pos < offset && p; pos++, p = p->pListNext); + + while (pos < offset + length && p) { + /* Copy removed element into HT, if it was specified */ + if (removed != NULL) { + void *new_entry; + + if (p->nKeyLength == 0) { + zend_hash_next_index_insert(removed, p->pData, sizeof(zval *), &new_entry); + } else { + zend_hash_quick_update(removed, p->arKey, p->nKeyLength, p->h, p->pData, sizeof(zval *), &new_entry); + } + + if (pCopyConstructor) { + pCopyConstructor(new_entry); + } + } + + /* Remove element */ + { + Bucket *p_next = p->pListNext; + zend_hash_bucket_delete(ht, p); + p = p_next; + } + + pos++; + } + + if (list != NULL) { + int i; + for (i = 0; i < list_count; i++) { + /* Add new element only to the global linked list, not the bucket list. + * Also use key 0 for everything, as we'll reindex the hashtable anyways. */ + Bucket *q = pemalloc_rel(sizeof(Bucket), ht->persistent); + q->arKey = NULL; + q->nKeyLength = 0; + q->h = 0; + INIT_DATA(ht, q, list[i], nDataSize); + + CONNECT_TO_GLOBAL_DLLIST_EX(q, ht, p ? p->pListLast : ht->pListTail, p); + + ht->nNumOfElements++; + + if (pCopyConstructor) { + pCopyConstructor(q->pData); + } + } + + ZEND_HASH_IF_FULL_DO_RESIZE(ht); + } + + zend_hash_reindex(ht); +} +/* }}} */ + ZEND_API int zend_hash_sort(HashTable *ht, sort_func_t sort_func, compare_func_t compar, int renumber TSRMLS_DC) { diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h index eb9a53769e..b07efc84ec 100644 --- a/Zend/zend_hash.h +++ b/Zend/zend_hash.h @@ -229,6 +229,10 @@ ZEND_API int zend_hash_num_elements(const HashTable *ht); ZEND_API int zend_hash_rehash(HashTable *ht); ZEND_API void zend_hash_reindex(HashTable *ht); +ZEND_API void _zend_hash_splice(HashTable *ht, uint nDataSize, copy_ctor_func_t pCopyConstructor, uint offset, uint length, void **list, uint list_count, HashTable *removed ZEND_FILE_LINE_DC); +#define zend_hash_splice(ht, nDataSize, pCopyConstructor, offset, length, list, list_count, removed) \ + _zend_hash_splice(ht, nDataSize, pCopyConstructor, offset, length, list, list_count, removed ZEND_FILE_LINE_CC) + /* * DJBX33A (Daniel J. Bernstein, Times 33 with Addition) * -- cgit v1.2.1 From ad2ef3d97edab0d0ce034e65b7e3da1a38cc15dd Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Wed, 9 Apr 2014 11:20:55 +0200 Subject: Add only_integer_keys option to zend_hash_reindex This allows to either do a full reindex, or only reindex the integer keys. --- Zend/zend_hash.c | 17 +++++------------ Zend/zend_hash.h | 2 +- 2 files changed, 6 insertions(+), 13 deletions(-) (limited to 'Zend') diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index a33e8726e2..309631338a 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -480,7 +480,7 @@ ZEND_API int zend_hash_rehash(HashTable *ht) return SUCCESS; } -ZEND_API void zend_hash_reindex(HashTable *ht) { +ZEND_API void zend_hash_reindex(HashTable *ht, zend_bool only_integer_keys) { Bucket *p; uint nIndex; ulong offset = 0; @@ -492,8 +492,9 @@ ZEND_API void zend_hash_reindex(HashTable *ht) { memset(ht->arBuckets, 0, ht->nTableSize * sizeof(Bucket *)); for (p = ht->pListHead; p != NULL; p = p->pListNext) { - if (p->nKeyLength == 0) { + if (!only_integer_keys || p->nKeyLength == 0) { p->h = offset++; + p->nKeyLength = 0; } nIndex = p->h & ht->nTableMask; @@ -1353,7 +1354,7 @@ ZEND_API void _zend_hash_splice(HashTable *ht, uint nDataSize, copy_ctor_func_t ZEND_HASH_IF_FULL_DO_RESIZE(ht); } - zend_hash_reindex(ht); + zend_hash_reindex(ht, 1); } /* }}} */ @@ -1403,15 +1404,7 @@ ZEND_API int zend_hash_sort(HashTable *ht, sort_func_t sort_func, HANDLE_UNBLOCK_INTERRUPTIONS(); if (renumber) { - p = ht->pListHead; - i=0; - while (p != NULL) { - p->nKeyLength = 0; - p->h = i++; - p = p->pListNext; - } - ht->nNextFreeElement = i; - zend_hash_rehash(ht); + zend_hash_reindex(ht, 0); } return SUCCESS; } diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h index b07efc84ec..03f83dfb18 100644 --- a/Zend/zend_hash.h +++ b/Zend/zend_hash.h @@ -227,7 +227,7 @@ ZEND_API int zend_hash_minmax(const HashTable *ht, compare_func_t compar, int fl ZEND_API int zend_hash_num_elements(const HashTable *ht); ZEND_API int zend_hash_rehash(HashTable *ht); -ZEND_API void zend_hash_reindex(HashTable *ht); +ZEND_API void zend_hash_reindex(HashTable *ht, zend_bool only_integer_keys); ZEND_API void _zend_hash_splice(HashTable *ht, uint nDataSize, copy_ctor_func_t pCopyConstructor, uint offset, uint length, void **list, uint list_count, HashTable *removed ZEND_FILE_LINE_DC); #define zend_hash_splice(ht, nDataSize, pCopyConstructor, offset, length, list, list_count, removed) \ -- cgit v1.2.1 From f614fc68984b2d7fce3f275b8106955b5d910472 Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Fri, 11 Apr 2014 10:06:17 +0200 Subject: Fix bug #66015 by reverting "Removed operations on constant arrays." --- Zend/tests/bug66015.phpt | 32 ++++++++++++ Zend/tests/errmsg_040.phpt | 2 + Zend/tests/ns_059.phpt | 2 + Zend/zend.h | 7 +-- Zend/zend_API.c | 1 - Zend/zend_ast.c | 63 ++++++++++++++++------- Zend/zend_ast.h | 3 ++ Zend/zend_compile.c | 55 ++++---------------- Zend/zend_compile.h | 2 +- Zend/zend_execute_API.c | 119 +------------------------------------------- Zend/zend_language_parser.y | 18 +++---- Zend/zend_variables.c | 7 +-- Zend/zend_vm_def.h | 3 -- 13 files changed, 109 insertions(+), 205 deletions(-) create mode 100644 Zend/tests/bug66015.phpt (limited to 'Zend') diff --git a/Zend/tests/bug66015.phpt b/Zend/tests/bug66015.phpt new file mode 100644 index 0000000000..f1cbd37aec --- /dev/null +++ b/Zend/tests/bug66015.phpt @@ -0,0 +1,32 @@ +--TEST-- +Bug #66015 (wrong array indexing in class's static property) +--FILE-- + 'first', + 'second', + 'third' + ]; + + public function __construct() + { + var_export(self::$array); + } +} + +$test = new Test(); +?> +===DONE=== +--EXPECTF-- +array ( + 1 => 'first', + 2 => 'second', + 3 => 'third', +) +===DONE=== diff --git a/Zend/tests/errmsg_040.phpt b/Zend/tests/errmsg_040.phpt index f3d0afcf0a..2b192d0b83 100644 --- a/Zend/tests/errmsg_040.phpt +++ b/Zend/tests/errmsg_040.phpt @@ -1,5 +1,7 @@ --TEST-- errmsg: arrays are not allowed in class constants +--XFAIL-- +Actually it's hard to test where the array comes from (property, constant, ...) --FILE-- type & ZEND_INTERNAL_CLASS) { switch(Z_TYPE_P(property)) { case IS_ARRAY: - case IS_CONSTANT_ARRAY: case IS_OBJECT: case IS_RESOURCE: zend_error(E_CORE_ERROR, "Internal zval's can't be arrays, objects or resources"); diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c index 9a0808db9d..8a3df98c10 100644 --- a/Zend/zend_ast.c +++ b/Zend/zend_ast.c @@ -63,6 +63,27 @@ ZEND_API zend_ast* zend_ast_create_ternary(uint kind, zend_ast *op0, zend_ast *o return ast; } +ZEND_API zend_ast* zend_ast_create_dynamic(uint kind) +{ + zend_ast *ast = emalloc(sizeof(zend_ast) + sizeof(zend_ast*) * 3); /* use 4 children as deafult */ + ast->kind = kind; + ast->children = 0; + return ast; +} + +ZEND_API void zend_ast_dynamic_add(zend_ast **ast, zend_ast *op) +{ + if ((*ast)->children >= 4 && (*ast)->children == ((*ast)->children & -(*ast)->children)) { + *ast = erealloc(*ast, sizeof(zend_ast) + sizeof(zend_ast*) * ((*ast)->children * 2 + 1)); + } + (&(*ast)->u.child)[(*ast)->children++] = op; +} + +ZEND_API void zend_ast_dynamic_shrink(zend_ast **ast) +{ + *ast = erealloc(*ast, sizeof(zend_ast) + sizeof(zend_ast*) * ((*ast)->children - 1)); +} + ZEND_API int zend_ast_is_ct_constant(zend_ast *ast) { int i; @@ -284,6 +305,23 @@ ZEND_API void zend_ast_evaluate(zval *result, zend_ast *ast, zend_class_entry *s sub_function(result, &op1, &op2 TSRMLS_CC); zval_dtor(&op2); break; + case ZEND_INIT_ARRAY: + INIT_PZVAL(result); + array_init(result); + { + int i; + zend_bool has_key; + for (i = 0; i < ast->children; i+=2) { + zval *expr; + MAKE_STD_ZVAL(expr); + if ((has_key = !!(&ast->u.child)[i])) { + zend_ast_evaluate(&op1, (&ast->u.child)[i], scope TSRMLS_CC); + } + zend_ast_evaluate(expr, (&ast->u.child)[i+1], scope TSRMLS_CC); + zend_do_add_static_array_element(result, has_key?&op1:NULL, expr); + } + } + break; default: zend_error(E_ERROR, "Unsupported constant expression"); } @@ -297,26 +335,15 @@ ZEND_API zend_ast *zend_ast_copy(zend_ast *ast) zend_ast *copy = zend_ast_create_constant(ast->u.val); zval_copy_ctor(copy->u.val); return copy; - } else { - switch (ast->children) { - case 1: - return zend_ast_create_unary( - ast->kind, - zend_ast_copy((&ast->u.child)[0])); - case 2: - return zend_ast_create_binary( - ast->kind, - zend_ast_copy((&ast->u.child)[0]), - zend_ast_copy((&ast->u.child)[1])); - case 3: - return zend_ast_create_ternary( - ast->kind, - zend_ast_copy((&ast->u.child)[0]), - zend_ast_copy((&ast->u.child)[1]), - zend_ast_copy((&ast->u.child)[2])); + } else if (ast->children) { + zend_ast *new = emalloc(sizeof(zend_ast) + sizeof(zend_ast*) * (ast->children - 1)); + int i; + new->kind = ast->kind; + for (i = 0; i < ast->children; i++) { + (&new->u.child)[i] = zend_ast_copy((&ast->u.child)[i]); } } - return NULL; + return zend_ast_create_dynamic(ast->kind); } ZEND_API void zend_ast_destroy(zend_ast *ast) diff --git a/Zend/zend_ast.h b/Zend/zend_ast.h index 927e99cff8..f8df15c95b 100644 --- a/Zend/zend_ast.h +++ b/Zend/zend_ast.h @@ -50,6 +50,9 @@ ZEND_API zend_ast *zend_ast_create_constant(zval *zv); ZEND_API zend_ast *zend_ast_create_unary(uint kind, zend_ast *op0); ZEND_API zend_ast *zend_ast_create_binary(uint kind, zend_ast *op0, zend_ast *op1); ZEND_API zend_ast *zend_ast_create_ternary(uint kind, zend_ast *op0, zend_ast *op1, zend_ast *op2); +ZEND_API zend_ast* zend_ast_create_dynamic(uint kind); +ZEND_API void zend_ast_dynamic_add(zend_ast **ast, zend_ast *op); +ZEND_API void zend_ast_dynamic_shrink(zend_ast **ast); ZEND_API int zend_ast_is_ct_constant(zend_ast *ast); diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 1bcd430840..099120ae83 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1933,7 +1933,7 @@ void zend_do_receive_param(zend_uchar op, znode *varname, const znode *initializ if (op == ZEND_RECV_INIT) { if (Z_TYPE(initialization->u.constant) == IS_NULL || (Z_TYPE(initialization->u.constant) == IS_CONSTANT && !strcasecmp(Z_STRVAL(initialization->u.constant), "NULL")) || Z_TYPE(initialization->u.constant) == IS_CONSTANT_AST) { cur_arg_info->allow_null = 1; - } else if (Z_TYPE(initialization->u.constant) != IS_ARRAY && Z_TYPE(initialization->u.constant) != IS_CONSTANT_ARRAY) { + } else if (Z_TYPE(initialization->u.constant) != IS_ARRAY) { zend_error_noreturn(E_COMPILE_ERROR, "Default value for parameters with array type hint can only be an array or NULL"); } } @@ -5442,10 +5442,6 @@ void zend_do_declare_class_constant(znode *var_name, const znode *value TSRMLS_D const char *cname = NULL; zend_ulong hash; - if(Z_TYPE(value->u.constant) == IS_CONSTANT_ARRAY) { - zend_error_noreturn(E_COMPILE_ERROR, "Arrays are not allowed in class constants"); - return; - } if ((CG(active_class_entry)->ce_flags & ZEND_ACC_TRAIT) == ZEND_ACC_TRAIT) { zend_error_noreturn(E_COMPILE_ERROR, "Traits cannot have constants"); return; @@ -5887,57 +5883,30 @@ void zend_do_add_array_element(znode *result, const znode *expr, const znode *of } /* }}} */ -void zend_do_add_static_array_element(znode *result, znode *offset, const znode *expr) /* {{{ */ +void zend_do_add_static_array_element(zval *result, zval *offset, const zval *expr) /* {{{ */ { - zval *element; - - ALLOC_ZVAL(element); - *element = expr->u.constant; if (offset) { - switch (Z_TYPE(offset->u.constant) & IS_CONSTANT_TYPE_MASK) { - case IS_CONSTANT: - /* Ugly hack to denote that this value has a constant index */ - Z_TYPE_P(element) |= IS_CONSTANT_INDEX; - Z_STRVAL(offset->u.constant) = erealloc(Z_STRVAL(offset->u.constant), Z_STRLEN(offset->u.constant)+3); - Z_STRVAL(offset->u.constant)[Z_STRLEN(offset->u.constant)+1] = Z_TYPE(offset->u.constant); - Z_STRVAL(offset->u.constant)[Z_STRLEN(offset->u.constant)+2] = 0; - zend_symtable_update(Z_ARRVAL(result->u.constant), Z_STRVAL(offset->u.constant), Z_STRLEN(offset->u.constant)+3, &element, sizeof(zval *), NULL); - zval_dtor(&offset->u.constant); - break; - case IS_CONSTANT_AST: { - /* Another ugly hack to store the data about the AST in the array */ - char* key; - int len = sizeof(zend_ast *); - Z_TYPE_P(element) |= IS_CONSTANT_INDEX; - - key = emalloc(len + 2); - *(zend_ast **)key = Z_AST(offset->u.constant); - key[len] = Z_TYPE(offset->u.constant); - key[len + 1] = 0; - zend_symtable_update(Z_ARRVAL(result->u.constant), key, len + 2, &element, sizeof(zval *), NULL); - efree(key); - break; - } + switch (Z_TYPE_P(offset)) { case IS_STRING: - zend_symtable_update(Z_ARRVAL(result->u.constant), Z_STRVAL(offset->u.constant), Z_STRLEN(offset->u.constant)+1, &element, sizeof(zval *), NULL); - zval_dtor(&offset->u.constant); + zend_symtable_update(Z_ARRVAL_P(result), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, &expr, sizeof(zval *), NULL); + zval_dtor(offset); break; case IS_NULL: - zend_symtable_update(Z_ARRVAL(result->u.constant), "", 1, &element, sizeof(zval *), NULL); + zend_symtable_update(Z_ARRVAL_P(result), "", 1, &expr, sizeof(zval *), NULL); break; case IS_LONG: case IS_BOOL: - zend_hash_index_update(Z_ARRVAL(result->u.constant), Z_LVAL(offset->u.constant), &element, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL_P(result), Z_LVAL_P(offset), &expr, sizeof(zval *), NULL); break; case IS_DOUBLE: - zend_hash_index_update(Z_ARRVAL(result->u.constant), zend_dval_to_lval(Z_DVAL(offset->u.constant)), &element, sizeof(zval *), NULL); + zend_hash_index_update(Z_ARRVAL_P(result), zend_dval_to_lval(Z_DVAL_P(offset)), &expr, sizeof(zval *), NULL); break; - case IS_CONSTANT_ARRAY: + case IS_ARRAY: zend_error(E_ERROR, "Illegal offset type"); break; } } else { - zend_hash_next_index_insert(Z_ARRVAL(result->u.constant), &element, sizeof(zval *), NULL); + zend_hash_next_index_insert(Z_ARRVAL_P(result), &expr, sizeof(zval *), NULL); } } /* }}} */ @@ -7318,10 +7287,6 @@ void zend_do_declare_constant(znode *name, znode *value TSRMLS_DC) /* {{{ */ zend_op *opline; zval **ns_name; - if(Z_TYPE(value->u.constant) == IS_CONSTANT_ARRAY) { - zend_error_noreturn(E_COMPILE_ERROR, "Arrays are not allowed as constants"); - } - if (zend_get_ct_const(&name->u.constant, 0 TSRMLS_CC)) { zend_error_noreturn(E_COMPILE_ERROR, "Cannot redeclare constant '%s'", Z_STRVAL(name->u.constant)); } diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index 5362058fa2..99d3704b76 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -598,7 +598,7 @@ void zend_do_shell_exec(znode *result, const znode *cmd TSRMLS_DC); void zend_do_init_array(znode *result, const znode *expr, const znode *offset, zend_bool is_ref TSRMLS_DC); void zend_do_add_array_element(znode *result, const znode *expr, const znode *offset, zend_bool is_ref TSRMLS_DC); -void zend_do_add_static_array_element(znode *result, znode *offset, const znode *expr); +void zend_do_add_static_array_element(zval *result, zval *offset, const zval *expr); void zend_do_list_init(TSRMLS_D); void zend_do_list_end(znode *result, znode *expr TSRMLS_DC); void zend_do_add_list_element(const znode *element TSRMLS_DC); diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index 5d5153dc13..692ec83cc3 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -451,24 +451,11 @@ ZEND_API int zend_is_true(zval *op) /* {{{ */ #include "../TSRM/tsrm_strtok_r.h" -#define IS_VISITED_CONSTANT IS_CONSTANT_INDEX +#define IS_VISITED_CONSTANT 0x80 #define IS_CONSTANT_VISITED(p) (Z_TYPE_P(p) & IS_VISITED_CONSTANT) #define Z_REAL_TYPE_P(p) (Z_TYPE_P(p) & ~IS_VISITED_CONSTANT) #define MARK_CONSTANT_VISITED(p) Z_TYPE_P(p) |= IS_VISITED_CONSTANT -static void zval_deep_copy(zval **p) -{ - zval *value; - - ALLOC_ZVAL(value); - *value = **p; - Z_TYPE_P(value) &= ~IS_CONSTANT_INDEX; - zval_copy_ctor(value); - Z_TYPE_P(value) = Z_TYPE_PP(p); - INIT_PZVAL(value); - *p = value; -} - ZEND_API int zval_update_constant_ex(zval **pp, void *arg, zend_class_entry *scope TSRMLS_DC) /* {{{ */ { zval *p = *pp; @@ -559,110 +546,6 @@ ZEND_API int zval_update_constant_ex(zval **pp, void *arg, zend_class_entry *sco Z_SET_REFCOUNT_P(p, refcount); Z_SET_ISREF_TO_P(p, is_ref); - } else if (Z_TYPE_P(p) == IS_CONSTANT_ARRAY) { - zval **element, *new_val; - char *str_index; - uint str_index_len; - ulong num_index; - int ret; - - SEPARATE_ZVAL_IF_NOT_REF(pp); - p = *pp; - Z_TYPE_P(p) = IS_ARRAY; - - if (!inline_change) { - zval *tmp; - HashTable *tmp_ht = NULL; - - ALLOC_HASHTABLE(tmp_ht); - zend_hash_init(tmp_ht, zend_hash_num_elements(Z_ARRVAL_P(p)), NULL, ZVAL_PTR_DTOR, 0); - zend_hash_copy(tmp_ht, Z_ARRVAL_P(p), (copy_ctor_func_t) zval_deep_copy, (void *) &tmp, sizeof(zval *)); - Z_ARRVAL_P(p) = tmp_ht; - } - - /* First go over the array and see if there are any constant indices */ - zend_hash_internal_pointer_reset(Z_ARRVAL_P(p)); - while (zend_hash_get_current_data(Z_ARRVAL_P(p), (void **) &element) == SUCCESS) { - if (!(Z_TYPE_PP(element) & IS_CONSTANT_INDEX)) { - zend_hash_move_forward(Z_ARRVAL_P(p)); - continue; - } - Z_TYPE_PP(element) &= ~IS_CONSTANT_INDEX; - if (zend_hash_get_current_key_ex(Z_ARRVAL_P(p), &str_index, &str_index_len, &num_index, 0, NULL) != HASH_KEY_IS_STRING) { - zend_hash_move_forward(Z_ARRVAL_P(p)); - continue; - } - if (str_index[str_index_len - 2] == IS_CONSTANT_AST) { - zend_ast_evaluate(&const_value, *(zend_ast **)str_index, scope TSRMLS_CC); - zend_ast_destroy(*(zend_ast **)str_index); - } else if (!zend_get_constant_ex(str_index, str_index_len - 3, &const_value, scope, str_index[str_index_len - 2] TSRMLS_CC)) { - char *actual; - const char *save = str_index; - if ((colon = (char*)zend_memrchr(str_index, ':', str_index_len - 3))) { - zend_error(E_ERROR, "Undefined class constant '%s'", str_index); - str_index_len -= ((colon - str_index) + 1); - str_index = colon; - } else { - if (str_index[str_index_len - 2] & IS_CONSTANT_UNQUALIFIED) { - if ((actual = (char *)zend_memrchr(str_index, '\\', str_index_len - 3))) { - actual++; - str_index_len -= (actual - str_index); - str_index = actual; - } - } - if (str_index[0] == '\\') { - ++str_index; - --str_index_len; - } - if (save[0] == '\\') { - ++save; - } - if ((str_index[str_index_len - 2] & IS_CONSTANT_UNQUALIFIED) == 0) { - zend_error(E_ERROR, "Undefined constant '%s'", save); - } - zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'", str_index, str_index); - } - ZVAL_STRINGL(&const_value, str_index, str_index_len-3, 1); - } - - if (Z_REFCOUNT_PP(element) > 1) { - ALLOC_ZVAL(new_val); - *new_val = **element; - zval_copy_ctor(new_val); - Z_SET_REFCOUNT_P(new_val, 1); - Z_UNSET_ISREF_P(new_val); - - /* preserve this bit for inheritance */ - Z_TYPE_PP(element) |= IS_CONSTANT_INDEX; - zval_ptr_dtor(element); - *element = new_val; - } - - switch (Z_TYPE(const_value)) { - case IS_STRING: - ret = zend_symtable_update_current_key(Z_ARRVAL_P(p), Z_STRVAL(const_value), Z_STRLEN(const_value) + 1, HASH_UPDATE_KEY_IF_BEFORE); - break; - case IS_BOOL: - case IS_LONG: - ret = zend_hash_update_current_key_ex(Z_ARRVAL_P(p), HASH_KEY_IS_LONG, NULL, 0, Z_LVAL(const_value), HASH_UPDATE_KEY_IF_BEFORE, NULL); - break; - case IS_DOUBLE: - ret = zend_hash_update_current_key_ex(Z_ARRVAL_P(p), HASH_KEY_IS_LONG, NULL, 0, zend_dval_to_lval(Z_DVAL(const_value)), HASH_UPDATE_KEY_IF_BEFORE, NULL); - break; - case IS_NULL: - ret = zend_hash_update_current_key_ex(Z_ARRVAL_P(p), HASH_KEY_IS_STRING, "", 1, 0, HASH_UPDATE_KEY_IF_BEFORE, NULL); - break; - default: - ret = SUCCESS; - break; - } - if (ret == SUCCESS) { - zend_hash_move_forward(Z_ARRVAL_P(p)); - } - zval_dtor(&const_value); - } - zend_hash_apply_with_argument(Z_ARRVAL_P(p), (apply_func_arg_t) zval_update_constant_inline_change, (void *) scope TSRMLS_CC); - zend_hash_internal_pointer_reset(Z_ARRVAL_P(p)); } else if (Z_TYPE_P(p) == IS_CONSTANT_AST) { SEPARATE_ZVAL_IF_NOT_REF(pp); p = *pp; diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index b7467b7552..40e5c05bce 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -986,9 +986,7 @@ static_class_constant: ; static_scalar: /* compile-time evaluated scalars */ - static_scalar_value { zend_do_constant_expression(&$$, $1.u.ast TSRMLS_CC); } - | T_ARRAY '(' static_array_pair_list ')' { $$ = $3; Z_TYPE($$.u.constant) = IS_CONSTANT_ARRAY; } - | '[' static_array_pair_list ']' { $$ = $2; Z_TYPE($$.u.constant) = IS_CONSTANT_ARRAY; } + static_scalar_value { zend_do_constant_expression(&$$, $1.u.ast TSRMLS_CC); } ; static_scalar_value: @@ -997,6 +995,8 @@ static_scalar_value: | namespace_name { zend_do_fetch_constant(&$$, NULL, &$1, ZEND_CT, 1 TSRMLS_CC); $$.u.ast = zend_ast_create_constant(&$$.u.constant); } | T_NAMESPACE T_NS_SEPARATOR namespace_name { $$.op_type = IS_CONST; ZVAL_EMPTY_STRING(&$$.u.constant); zend_do_build_namespace_name(&$$, &$$, &$3 TSRMLS_CC); $3 = $$; zend_do_fetch_constant(&$$, NULL, &$3, ZEND_CT, 0 TSRMLS_CC); $$.u.ast = zend_ast_create_constant(&$$.u.constant); } | T_NS_SEPARATOR namespace_name { char *tmp = estrndup(Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); memcpy(&(tmp[1]), Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); tmp[0] = '\\'; efree(Z_STRVAL($2.u.constant)); Z_STRVAL($2.u.constant) = tmp; ++Z_STRLEN($2.u.constant); zend_do_fetch_constant(&$$, NULL, &$2, ZEND_CT, 0 TSRMLS_CC); $$.u.ast = zend_ast_create_constant(&$$.u.constant); } + | T_ARRAY '(' static_array_pair_list ')' { $$ = $3; } + | '[' static_array_pair_list ']' { $$ = $2; } | static_class_constant { $$.u.ast = zend_ast_create_constant(&$1.u.constant); } | T_CLASS_C { $$.u.ast = zend_ast_create_constant(&$1.u.constant); } | static_operation { $$ = $1; } @@ -1053,8 +1053,8 @@ scalar: static_array_pair_list: - /* empty */ { $$.op_type = IS_CONST; INIT_PZVAL(&$$.u.constant); array_init(&$$.u.constant); } - | non_empty_static_array_pair_list possible_comma { $$ = $1; } + /* empty */ { $$.op_type = IS_CONST; INIT_PZVAL(&$$.u.constant); array_init(&$$.u.constant); $$.u.ast = zend_ast_create_constant(&$$.u.constant); } + | non_empty_static_array_pair_list possible_comma { zend_ast_dynamic_shrink(&$1.u.ast); $$ = $1; } ; possible_comma: @@ -1063,10 +1063,10 @@ possible_comma: ; non_empty_static_array_pair_list: - non_empty_static_array_pair_list ',' static_scalar T_DOUBLE_ARROW static_scalar { zend_do_add_static_array_element(&$$, &$3, &$5); } - | non_empty_static_array_pair_list ',' static_scalar { zend_do_add_static_array_element(&$$, NULL, &$3); } - | static_scalar T_DOUBLE_ARROW static_scalar { $$.op_type = IS_CONST; INIT_PZVAL(&$$.u.constant); array_init(&$$.u.constant); zend_do_add_static_array_element(&$$, &$1, &$3); } - | static_scalar { $$.op_type = IS_CONST; INIT_PZVAL(&$$.u.constant); array_init(&$$.u.constant); zend_do_add_static_array_element(&$$, NULL, &$1); } + non_empty_static_array_pair_list ',' static_scalar_value T_DOUBLE_ARROW static_scalar_value { zend_ast_dynamic_add(&$$.u.ast, $3.u.ast); zend_ast_dynamic_add(&$$.u.ast, $5.u.ast); } + | non_empty_static_array_pair_list ',' static_scalar_value { zend_ast_dynamic_add(&$$.u.ast, NULL); zend_ast_dynamic_add(&$$.u.ast, $3.u.ast); } + | static_scalar_value T_DOUBLE_ARROW static_scalar_value { $$.u.ast = zend_ast_create_dynamic(ZEND_INIT_ARRAY); zend_ast_dynamic_add(&$$.u.ast, $1.u.ast); zend_ast_dynamic_add(&$$.u.ast, $3.u.ast); } + | static_scalar_value { $$.u.ast = zend_ast_create_dynamic(ZEND_INIT_ARRAY); zend_ast_dynamic_add(&$$.u.ast, NULL); zend_ast_dynamic_add(&$$.u.ast, $1.u.ast); } ; expr: diff --git a/Zend/zend_variables.c b/Zend/zend_variables.c index a18591fdf7..0f9e184b7e 100644 --- a/Zend/zend_variables.c +++ b/Zend/zend_variables.c @@ -36,8 +36,7 @@ ZEND_API void _zval_dtor_func(zval *zvalue ZEND_FILE_LINE_DC) CHECK_ZVAL_STRING_REL(zvalue); str_efree_rel(zvalue->value.str.val); break; - case IS_ARRAY: - case IS_CONSTANT_ARRAY: { + case IS_ARRAY: { TSRMLS_FETCH(); if (zvalue->value.ht && (zvalue->value.ht != &EG(symbol_table))) { @@ -86,7 +85,6 @@ ZEND_API void _zval_internal_dtor(zval *zvalue ZEND_FILE_LINE_DC) str_free(zvalue->value.str.val); break; case IS_ARRAY: - case IS_CONSTANT_ARRAY: case IS_CONSTANT_AST: case IS_OBJECT: case IS_RESOURCE: @@ -128,8 +126,7 @@ ZEND_API void _zval_copy_ctor_func(zval *zvalue ZEND_FILE_LINE_DC) zvalue->value.str.val = (char *) estrndup_rel(zvalue->value.str.val, zvalue->value.str.len); } break; - case IS_ARRAY: - case IS_CONSTANT_ARRAY: { + case IS_ARRAY: { zval *tmp; HashTable *original_ht = zvalue->value.ht; HashTable *tmp_ht = NULL; diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index ed353edbac..08eb471d49 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -5376,9 +5376,6 @@ ZEND_VM_HANDLER(143, ZEND_DECLARE_CONST, CONST, CONST) zval *tmp_ptr = &tmp; ZVAL_COPY_VALUE(&tmp, val); - if (Z_TYPE_P(val) == IS_CONSTANT_ARRAY) { - zval_copy_ctor(&tmp); - } INIT_PZVAL(&tmp); zval_update_constant(&tmp_ptr, NULL TSRMLS_CC); c.value = *tmp_ptr; -- cgit v1.2.1 From ad05d3898eae472532620ce9623c9d39c23ef16a Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Fri, 11 Apr 2014 16:18:42 +0200 Subject: Updated zend_vm_execute.h --- Zend/zend_vm_execute.h | 3 --- 1 file changed, 3 deletions(-) (limited to 'Zend') diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index a4e3350eaa..e0277725d6 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -4309,9 +4309,6 @@ static int ZEND_FASTCALL ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCOD zval *tmp_ptr = &tmp; ZVAL_COPY_VALUE(&tmp, val); - if (Z_TYPE_P(val) == IS_CONSTANT_ARRAY) { - zval_copy_ctor(&tmp); - } INIT_PZVAL(&tmp); zval_update_constant(&tmp_ptr, NULL TSRMLS_CC); c.value = *tmp_ptr; -- cgit v1.2.1 From ee2a7c7d41ec98c7529b46583f49e0936cac8774 Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Fri, 11 Apr 2014 18:21:46 +0200 Subject: Fixed disallowal of array usage in constants at run-time Added at the same time the possibility of array dereferencing to complete the set of features (useful application of arrays in constants) --- Zend/tests/bug66015.phpt | 2 -- Zend/tests/errmsg_040.phpt | 6 +++--- Zend/tests/ns_059.phpt | 7 ++++--- Zend/zend_ast.c | 12 +++++++++++ Zend/zend_execute.c | 8 ++++++- Zend/zend_execute.h | 2 ++ Zend/zend_language_parser.y | 3 ++- Zend/zend_vm_def.h | 17 +++++++-------- Zend/zend_vm_execute.h | 51 +++++++++++++++++++++------------------------ 9 files changed, 62 insertions(+), 46 deletions(-) (limited to 'Zend') diff --git a/Zend/tests/bug66015.phpt b/Zend/tests/bug66015.phpt index f1cbd37aec..4f6d51e0dd 100644 --- a/Zend/tests/bug66015.phpt +++ b/Zend/tests/bug66015.phpt @@ -22,11 +22,9 @@ class Test $test = new Test(); ?> -===DONE=== --EXPECTF-- array ( 1 => 'first', 2 => 'second', 3 => 'third', ) -===DONE=== diff --git a/Zend/tests/errmsg_040.phpt b/Zend/tests/errmsg_040.phpt index 2b192d0b83..c3a007f8c1 100644 --- a/Zend/tests/errmsg_040.phpt +++ b/Zend/tests/errmsg_040.phpt @@ -1,7 +1,5 @@ --TEST-- errmsg: arrays are not allowed in class constants ---XFAIL-- -Actually it's hard to test where the array comes from (property, constant, ...) --FILE-- --EXPECTF-- -Fatal error: Arrays are not allowed in class constants in %s on line %d +Fatal error: Arrays are not allowed in constants at run-time in %s on line %d diff --git a/Zend/tests/ns_059.phpt b/Zend/tests/ns_059.phpt index b9fcfee5c0..48da40b3f6 100644 --- a/Zend/tests/ns_059.phpt +++ b/Zend/tests/ns_059.phpt @@ -1,10 +1,11 @@ --TEST-- 059: Constant arrays ---XFAIL-- -Actually it's hard to test where the array comes from (property, constant, ...) --FILE-- --EXPECTF-- -Fatal error: Arrays are not allowed as constants in %sns_059.php on line 2 +Fatal error: Arrays are not allowed in constants at run-time in %sns_059.php on line 4 diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c index 8a3df98c10..fa32232516 100644 --- a/Zend/zend_ast.c +++ b/Zend/zend_ast.c @@ -322,6 +322,18 @@ ZEND_API void zend_ast_evaluate(zval *result, zend_ast *ast, zend_class_entry *s } } break; + case ZEND_FETCH_DIM_R: + zend_ast_evaluate(&op1, (&ast->u.child)[0], scope TSRMLS_CC); + zend_ast_evaluate(&op2, (&ast->u.child)[1], scope TSRMLS_CC); + { + zval *tmp; + zend_fetch_dimension_by_zval(&tmp, &op1, &op2 TSRMLS_CC); + *result = *tmp; + efree(tmp); + } + zval_dtor(&op1); + zval_dtor(&op2); + break; default: zend_error(E_ERROR, "Unsupported constant expression"); } diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 66accd61e9..bdf8b6e70f 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -1352,9 +1352,15 @@ static void zend_fetch_dimension_address_read(temp_variable *result, zval *conta } } +ZEND_API void zend_fetch_dimension_by_zval(zval **result, zval *container, zval *dim TSRMLS_DC) { + temp_variable tmp; + zend_fetch_dimension_address_read(&tmp, container, dim, IS_TMP_VAR, BP_VAR_R TSRMLS_CC); + *result = tmp.var.ptr; +} + static void zend_fetch_property_address(temp_variable *result, zval **container_ptr, zval *prop_ptr, const zend_literal *key, int type TSRMLS_DC) { - zval *container = *container_ptr;; + zval *container = *container_ptr; if (Z_TYPE_P(container) != IS_OBJECT) { if (container == &EG(error_zval)) { diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h index 0d3a908a15..179eacdf52 100644 --- a/Zend/zend_execute.h +++ b/Zend/zend_execute.h @@ -362,6 +362,8 @@ ZEND_API zend_class_entry *zend_fetch_class(const char *class_name, uint class_n ZEND_API zend_class_entry *zend_fetch_class_by_name(const char *class_name, uint class_name_len, const zend_literal *key, int fetch_type TSRMLS_DC); void zend_verify_abstract_class(zend_class_entry *ce TSRMLS_DC); +ZEND_API void zend_fetch_dimension_by_zval(zval **result, zval *container, zval *dim TSRMLS_DC); + #ifdef ZEND_WIN32 void zend_init_timeout_thread(void); void zend_shutdown_timeout_thread(void); diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index 40e5c05bce..56e702e8f9 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -1003,7 +1003,8 @@ static_scalar_value: ; static_operation: - static_scalar_value '+' static_scalar_value { $$.u.ast = zend_ast_create_binary(ZEND_ADD, $1.u.ast, $3.u.ast); } + static_scalar_value '[' static_scalar_value ']' { $$.u.ast = zend_ast_create_binary(ZEND_FETCH_DIM_R, $1.u.ast, $3.u.ast); } + | static_scalar_value '+' static_scalar_value { $$.u.ast = zend_ast_create_binary(ZEND_ADD, $1.u.ast, $3.u.ast); } | static_scalar_value '-' static_scalar_value { $$.u.ast = zend_ast_create_binary(ZEND_SUB, $1.u.ast, $3.u.ast); } | static_scalar_value '*' static_scalar_value { $$.u.ast = zend_ast_create_binary(ZEND_MUL, $1.u.ast, $3.u.ast); } | static_scalar_value T_POW static_scalar_value { $$.u.ast = zend_ast_create_binary(ZEND_POW, $1.u.ast, $3.u.ast); } diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 08eb471d49..85e348c901 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -3710,8 +3710,6 @@ ZEND_VM_HANDLER(99, ZEND_FETCH_CONSTANT, VAR|CONST|UNUSED, CONST) retval = &EX_T(opline->result.var).tmp_var; ZVAL_COPY_VALUE(retval, &c->value); zval_copy_ctor(retval); - CHECK_EXCEPTION(); - ZEND_VM_NEXT_OPCODE(); } else { /* class constant */ zend_class_entry *ce; @@ -3722,8 +3720,7 @@ ZEND_VM_HANDLER(99, ZEND_FETCH_CONSTANT, VAR|CONST|UNUSED, CONST) value = CACHED_PTR(opline->op2.literal->cache_slot); ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, *value); zval_copy_ctor(&EX_T(opline->result.var).tmp_var); - CHECK_EXCEPTION(); - ZEND_VM_NEXT_OPCODE(); + goto constant_fetch_end; } else if (CACHED_PTR(opline->op1.literal->cache_slot)) { ce = CACHED_PTR(opline->op1.literal->cache_slot); } else { @@ -3741,8 +3738,7 @@ ZEND_VM_HANDLER(99, ZEND_FETCH_CONSTANT, VAR|CONST|UNUSED, CONST) if ((value = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce)) != NULL) { ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, *value); zval_copy_ctor(&EX_T(opline->result.var).tmp_var); - CHECK_EXCEPTION(); - ZEND_VM_NEXT_OPCODE(); + goto constant_fetch_end; } } @@ -3767,10 +3763,13 @@ ZEND_VM_HANDLER(99, ZEND_FETCH_CONSTANT, VAR|CONST|UNUSED, CONST) } else { zend_error_noreturn(E_ERROR, "Undefined class constant '%s'", Z_STRVAL_P(opline->op2.zv)); } - - CHECK_EXCEPTION(); - ZEND_VM_NEXT_OPCODE(); } +constant_fetch_end: + if (Z_TYPE(EX_T(opline->result.var).tmp_var) == IS_ARRAY) { + zend_error_noreturn(E_ERROR, "Arrays are not allowed in constants at run-time"); + } + CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(72, ZEND_ADD_ARRAY_ELEMENT, CONST|TMP|VAR|CV, CONST|TMP|VAR|UNUSED|CV) diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index e0277725d6..ec665e75fd 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -3971,8 +3971,6 @@ static int ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCO retval = &EX_T(opline->result.var).tmp_var; ZVAL_COPY_VALUE(retval, &c->value); zval_copy_ctor(retval); - CHECK_EXCEPTION(); - ZEND_VM_NEXT_OPCODE(); } else { /* class constant */ zend_class_entry *ce; @@ -3983,8 +3981,7 @@ static int ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCO value = CACHED_PTR(opline->op2.literal->cache_slot); ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, *value); zval_copy_ctor(&EX_T(opline->result.var).tmp_var); - CHECK_EXCEPTION(); - ZEND_VM_NEXT_OPCODE(); + goto constant_fetch_end; } else if (CACHED_PTR(opline->op1.literal->cache_slot)) { ce = CACHED_PTR(opline->op1.literal->cache_slot); } else { @@ -4002,8 +3999,7 @@ static int ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCO if ((value = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce)) != NULL) { ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, *value); zval_copy_ctor(&EX_T(opline->result.var).tmp_var); - CHECK_EXCEPTION(); - ZEND_VM_NEXT_OPCODE(); + goto constant_fetch_end; } } @@ -4028,10 +4024,13 @@ static int ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCO } else { zend_error_noreturn(E_ERROR, "Undefined class constant '%s'", Z_STRVAL_P(opline->op2.zv)); } - - CHECK_EXCEPTION(); - ZEND_VM_NEXT_OPCODE(); } +constant_fetch_end: + if (Z_TYPE(EX_T(opline->result.var).tmp_var) == IS_ARRAY) { + zend_error_noreturn(E_ERROR, "Arrays are not allowed in constants at run-time"); + } + CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static int ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -15921,8 +15920,6 @@ static int ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE retval = &EX_T(opline->result.var).tmp_var; ZVAL_COPY_VALUE(retval, &c->value); zval_copy_ctor(retval); - CHECK_EXCEPTION(); - ZEND_VM_NEXT_OPCODE(); } else { /* class constant */ zend_class_entry *ce; @@ -15933,8 +15930,7 @@ static int ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE value = CACHED_PTR(opline->op2.literal->cache_slot); ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, *value); zval_copy_ctor(&EX_T(opline->result.var).tmp_var); - CHECK_EXCEPTION(); - ZEND_VM_NEXT_OPCODE(); + goto constant_fetch_end; } else if (CACHED_PTR(opline->op1.literal->cache_slot)) { ce = CACHED_PTR(opline->op1.literal->cache_slot); } else { @@ -15952,8 +15948,7 @@ static int ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE if ((value = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce)) != NULL) { ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, *value); zval_copy_ctor(&EX_T(opline->result.var).tmp_var); - CHECK_EXCEPTION(); - ZEND_VM_NEXT_OPCODE(); + goto constant_fetch_end; } } @@ -15978,10 +15973,13 @@ static int ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE } else { zend_error_noreturn(E_ERROR, "Undefined class constant '%s'", Z_STRVAL_P(opline->op2.zv)); } - - CHECK_EXCEPTION(); - ZEND_VM_NEXT_OPCODE(); } +constant_fetch_end: + if (Z_TYPE(EX_T(opline->result.var).tmp_var) == IS_ARRAY) { + zend_error_noreturn(E_ERROR, "Arrays are not allowed in constants at run-time"); + } + CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static int ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -25534,8 +25532,6 @@ static int ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPC retval = &EX_T(opline->result.var).tmp_var; ZVAL_COPY_VALUE(retval, &c->value); zval_copy_ctor(retval); - CHECK_EXCEPTION(); - ZEND_VM_NEXT_OPCODE(); } else { /* class constant */ zend_class_entry *ce; @@ -25546,8 +25542,7 @@ static int ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPC value = CACHED_PTR(opline->op2.literal->cache_slot); ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, *value); zval_copy_ctor(&EX_T(opline->result.var).tmp_var); - CHECK_EXCEPTION(); - ZEND_VM_NEXT_OPCODE(); + goto constant_fetch_end; } else if (CACHED_PTR(opline->op1.literal->cache_slot)) { ce = CACHED_PTR(opline->op1.literal->cache_slot); } else { @@ -25565,8 +25560,7 @@ static int ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPC if ((value = CACHED_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, ce)) != NULL) { ZVAL_COPY_VALUE(&EX_T(opline->result.var).tmp_var, *value); zval_copy_ctor(&EX_T(opline->result.var).tmp_var); - CHECK_EXCEPTION(); - ZEND_VM_NEXT_OPCODE(); + goto constant_fetch_end; } } @@ -25591,10 +25585,13 @@ static int ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPC } else { zend_error_noreturn(E_ERROR, "Undefined class constant '%s'", Z_STRVAL_P(opline->op2.zv)); } - - CHECK_EXCEPTION(); - ZEND_VM_NEXT_OPCODE(); } +constant_fetch_end: + if (Z_TYPE(EX_T(opline->result.var).tmp_var) == IS_ARRAY) { + zend_error_noreturn(E_ERROR, "Arrays are not allowed in constants at run-time"); + } + CHECK_EXCEPTION(); + ZEND_VM_NEXT_OPCODE(); } static int ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -- cgit v1.2.1 From 35b895fdf0fd2b4fe9ba0e9e7edc513a0a39e205 Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Fri, 11 Apr 2014 19:18:58 +0200 Subject: Removed useless void* parameter and replaced with zend_bool on zval_update_constant* functions --- Zend/zend_API.c | 6 +++--- Zend/zend_ast.c | 2 +- Zend/zend_compile.c | 2 +- Zend/zend_constants.c | 4 ++-- Zend/zend_execute.h | 8 ++++---- Zend/zend_execute_API.c | 15 +++++++-------- Zend/zend_vm_def.h | 6 +++--- Zend/zend_vm_execute.h | 32 ++++++++++++++++---------------- 8 files changed, 37 insertions(+), 38 deletions(-) (limited to 'Zend') diff --git a/Zend/zend_API.c b/Zend/zend_API.c index 106799cd82..b8dd3434ca 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -1070,7 +1070,7 @@ static int zval_update_class_constant(zval **pp, int is_static, int offset TSRML int ret; zend_class_entry *old_scope = *scope; *scope = prop_info->ce; - ret = zval_update_constant(pp, (void*)1 TSRMLS_CC); + ret = zval_update_constant(pp, 1 TSRMLS_CC); *scope = old_scope; return ret; } @@ -1079,7 +1079,7 @@ static int zval_update_class_constant(zval **pp, int is_static, int offset TSRML } while (ce); } - return zval_update_constant(pp, (void*)1 TSRMLS_CC); + return zval_update_constant(pp, 1 TSRMLS_CC); } return 0; } @@ -1093,7 +1093,7 @@ ZEND_API void zend_update_class_constants(zend_class_entry *class_type TSRMLS_DC int i; *scope = class_type; - zend_hash_apply_with_argument(&class_type->constants_table, (apply_func_arg_t) zval_update_constant, (void*)1 TSRMLS_CC); + zend_hash_apply_with_argument(&class_type->constants_table, (apply_func_arg_t) zval_update_constant, (void *)1 TSRMLS_CC); for (i = 0; i < class_type->default_properties_count; i++) { if (class_type->default_properties_table[i]) { diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c index fa32232516..d7fbba1215 100644 --- a/Zend/zend_ast.c +++ b/Zend/zend_ast.c @@ -254,7 +254,7 @@ ZEND_API void zend_ast_evaluate(zval *result, zend_ast *ast, zend_class_entry *s *result = *ast->u.val; zval_copy_ctor(result); if (IS_CONSTANT_TYPE(Z_TYPE_P(result))) { - zval_update_constant_ex(&result, (void *) 1, scope TSRMLS_CC); + zval_update_constant_ex(&result, 1, scope TSRMLS_CC); } break; case ZEND_BOOL_AND: diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 099120ae83..beb53402ba 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -3461,7 +3461,7 @@ static char * zend_get_function_declaration(zend_function *fptr TSRMLS_DC) /* {{ *zv = *precv->op2.zv; zval_copy_ctor(zv); INIT_PZVAL(zv); - zval_update_constant_ex(&zv, (void*)1, fptr->common.scope TSRMLS_CC); + zval_update_constant_ex(&zv, 1, fptr->common.scope TSRMLS_CC); if (Z_TYPE_P(zv) == IS_BOOL) { if (Z_LVAL_P(zv)) { memcpy(offset, "true", 4); diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c index 03762b50d7..0f44f58a77 100644 --- a/Zend/zend_constants.c +++ b/Zend/zend_constants.c @@ -408,7 +408,7 @@ ZEND_API int zend_get_constant_ex(const char *name, uint name_len, zval *result, efree(lcname); if(found_const) { *result = c->value; - zval_update_constant_ex(&result, (void*)1, NULL TSRMLS_CC); + zval_update_constant_ex(&result, 1, NULL TSRMLS_CC); zval_copy_ctor(result); Z_SET_REFCOUNT_P(result, 1); Z_UNSET_ISREF_P(result); @@ -423,7 +423,7 @@ ZEND_API int zend_get_constant_ex(const char *name, uint name_len, zval *result, retval = 0; finish: if (retval) { - zval_update_constant_ex(ret_constant, (void*)1, ce TSRMLS_CC); + zval_update_constant_ex(ret_constant, 1, ce TSRMLS_CC); *result = **ret_constant; zval_copy_ctor(result); INIT_PZVAL(result); diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h index 179eacdf52..9bde312e53 100644 --- a/Zend/zend_execute.h +++ b/Zend/zend_execute.h @@ -158,10 +158,10 @@ static zend_always_inline int i_zend_is_true(zval *op) return result; } -ZEND_API int zval_update_constant(zval **pp, void *arg TSRMLS_DC); -ZEND_API int zval_update_constant_inline_change(zval **pp, void *arg TSRMLS_DC); -ZEND_API int zval_update_constant_no_inline_change(zval **pp, void *arg TSRMLS_DC); -ZEND_API int zval_update_constant_ex(zval **pp, void *arg, zend_class_entry *scope TSRMLS_DC); +ZEND_API int zval_update_constant(zval **pp, zend_bool inline_change TSRMLS_DC); +ZEND_API int zval_update_constant_inline_change(zval **pp, zend_class_entry *scope TSRMLS_DC); +ZEND_API int zval_update_constant_no_inline_change(zval **pp, zend_class_entry *scope TSRMLS_DC); +ZEND_API int zval_update_constant_ex(zval **pp, zend_bool inline_change, zend_class_entry *scope TSRMLS_DC); /* dedicated Zend executor functions - do not use! */ #define ZEND_VM_STACK_PAGE_SIZE ((16 * 1024) - 16) diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index 692ec83cc3..c9de6b93ca 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -456,10 +456,9 @@ ZEND_API int zend_is_true(zval *op) /* {{{ */ #define Z_REAL_TYPE_P(p) (Z_TYPE_P(p) & ~IS_VISITED_CONSTANT) #define MARK_CONSTANT_VISITED(p) Z_TYPE_P(p) |= IS_VISITED_CONSTANT -ZEND_API int zval_update_constant_ex(zval **pp, void *arg, zend_class_entry *scope TSRMLS_DC) /* {{{ */ +ZEND_API int zval_update_constant_ex(zval **pp, zend_bool inline_change, zend_class_entry *scope TSRMLS_DC) /* {{{ */ { zval *p = *pp; - zend_bool inline_change = (zend_bool) (zend_uintptr_t) arg; zval const_value; char *colon; @@ -560,21 +559,21 @@ ZEND_API int zval_update_constant_ex(zval **pp, void *arg, zend_class_entry *sco } /* }}} */ -ZEND_API int zval_update_constant_inline_change(zval **pp, void *scope TSRMLS_DC) /* {{{ */ +ZEND_API int zval_update_constant_inline_change(zval **pp, zend_class_entry *scope TSRMLS_DC) /* {{{ */ { - return zval_update_constant_ex(pp, (void*)1, scope TSRMLS_CC); + return zval_update_constant_ex(pp, 1, scope TSRMLS_CC); } /* }}} */ -ZEND_API int zval_update_constant_no_inline_change(zval **pp, void *scope TSRMLS_DC) /* {{{ */ +ZEND_API int zval_update_constant_no_inline_change(zval **pp, zend_class_entry *scope TSRMLS_DC) /* {{{ */ { - return zval_update_constant_ex(pp, (void*)0, scope TSRMLS_CC); + return zval_update_constant_ex(pp, 0, scope TSRMLS_CC); } /* }}} */ -ZEND_API int zval_update_constant(zval **pp, void *arg TSRMLS_DC) /* {{{ */ +ZEND_API int zval_update_constant(zval **pp, zend_bool inline_change TSRMLS_DC) /* {{{ */ { - return zval_update_constant_ex(pp, arg, NULL TSRMLS_CC); + return zval_update_constant_ex(pp, inline_change, NULL TSRMLS_CC); } /* }}} */ diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 85e348c901..da4f03a2bd 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -1081,7 +1081,7 @@ ZEND_VM_HELPER_EX(zend_fetch_var_address_helper, CONST|TMP|VAR|CV, UNUSED|CONST| FREE_OP1(); break; case ZEND_FETCH_STATIC: - zval_update_constant(retval, (void*) 1 TSRMLS_CC); + zval_update_constant(retval, 1 TSRMLS_CC); break; case ZEND_FETCH_GLOBAL_LOCK: if (OP1_TYPE == IS_VAR && !free_op1.var) { @@ -3747,7 +3747,7 @@ ZEND_VM_HANDLER(99, ZEND_FETCH_CONSTANT, VAR|CONST|UNUSED, CONST) zend_class_entry *old_scope = EG(scope); EG(scope) = ce; - zval_update_constant(value, (void *) 1 TSRMLS_CC); + zval_update_constant(value, 1 TSRMLS_CC); EG(scope) = old_scope; } if (OP1_TYPE == IS_CONST) { @@ -5376,7 +5376,7 @@ ZEND_VM_HANDLER(143, ZEND_DECLARE_CONST, CONST, CONST) ZVAL_COPY_VALUE(&tmp, val); INIT_PZVAL(&tmp); - zval_update_constant(&tmp_ptr, NULL TSRMLS_CC); + zval_update_constant(&tmp_ptr, 0 TSRMLS_CC); c.value = *tmp_ptr; } else { INIT_PZVAL_COPY(&c.value, val); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index ec665e75fd..3fb5ab3ebe 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -3684,7 +3684,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_CONST(int type break; case ZEND_FETCH_STATIC: - zval_update_constant(retval, (void*) 1 TSRMLS_CC); + zval_update_constant(retval, 1 TSRMLS_CC); break; case ZEND_FETCH_GLOBAL_LOCK: if (IS_CONST == IS_VAR && !free_op1.var) { @@ -4008,7 +4008,7 @@ static int ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCO zend_class_entry *old_scope = EG(scope); EG(scope) = ce; - zval_update_constant(value, (void *) 1 TSRMLS_CC); + zval_update_constant(value, 1 TSRMLS_CC); EG(scope) = old_scope; } if (IS_CONST == IS_CONST) { @@ -4309,7 +4309,7 @@ static int ZEND_FASTCALL ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCOD ZVAL_COPY_VALUE(&tmp, val); INIT_PZVAL(&tmp); - zval_update_constant(&tmp_ptr, NULL TSRMLS_CC); + zval_update_constant(&tmp_ptr, 0 TSRMLS_CC); c.value = *tmp_ptr; } else { INIT_PZVAL_COPY(&c.value, val); @@ -5568,7 +5568,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_VAR(int type, break; case ZEND_FETCH_STATIC: - zval_update_constant(retval, (void*) 1 TSRMLS_CC); + zval_update_constant(retval, 1 TSRMLS_CC); break; case ZEND_FETCH_GLOBAL_LOCK: if (IS_CONST == IS_VAR && !free_op1.var) { @@ -6320,7 +6320,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int typ break; case ZEND_FETCH_STATIC: - zval_update_constant(retval, (void*) 1 TSRMLS_CC); + zval_update_constant(retval, 1 TSRMLS_CC); break; case ZEND_FETCH_GLOBAL_LOCK: if (IS_CONST == IS_VAR && !free_op1.var) { @@ -9090,7 +9090,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_CONST(int type, zval_dtor(free_op1.var); break; case ZEND_FETCH_STATIC: - zval_update_constant(retval, (void*) 1 TSRMLS_CC); + zval_update_constant(retval, 1 TSRMLS_CC); break; case ZEND_FETCH_GLOBAL_LOCK: if (IS_TMP_VAR == IS_VAR && !free_op1.var) { @@ -10846,7 +10846,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_VAR(int type, ZE zval_dtor(free_op1.var); break; case ZEND_FETCH_STATIC: - zval_update_constant(retval, (void*) 1 TSRMLS_CC); + zval_update_constant(retval, 1 TSRMLS_CC); break; case ZEND_FETCH_GLOBAL_LOCK: if (IS_TMP_VAR == IS_VAR && !free_op1.var) { @@ -11600,7 +11600,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_UNUSED(int type, zval_dtor(free_op1.var); break; case ZEND_FETCH_STATIC: - zval_update_constant(retval, (void*) 1 TSRMLS_CC); + zval_update_constant(retval, 1 TSRMLS_CC); break; case ZEND_FETCH_GLOBAL_LOCK: if (IS_TMP_VAR == IS_VAR && !free_op1.var) { @@ -15020,7 +15020,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_CONST(int type, zval_ptr_dtor_nogc(&free_op1.var); break; case ZEND_FETCH_STATIC: - zval_update_constant(retval, (void*) 1 TSRMLS_CC); + zval_update_constant(retval, 1 TSRMLS_CC); break; case ZEND_FETCH_GLOBAL_LOCK: if (IS_VAR == IS_VAR && !free_op1.var) { @@ -15957,7 +15957,7 @@ static int ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE zend_class_entry *old_scope = EG(scope); EG(scope) = ce; - zval_update_constant(value, (void *) 1 TSRMLS_CC); + zval_update_constant(value, 1 TSRMLS_CC); EG(scope) = old_scope; } if (IS_VAR == IS_CONST) { @@ -19617,7 +19617,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_VAR(int type, ZE zval_ptr_dtor_nogc(&free_op1.var); break; case ZEND_FETCH_STATIC: - zval_update_constant(retval, (void*) 1 TSRMLS_CC); + zval_update_constant(retval, 1 TSRMLS_CC); break; case ZEND_FETCH_GLOBAL_LOCK: if (IS_VAR == IS_VAR && !free_op1.var) { @@ -21605,7 +21605,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_UNUSED(int type, zval_ptr_dtor_nogc(&free_op1.var); break; case ZEND_FETCH_STATIC: - zval_update_constant(retval, (void*) 1 TSRMLS_CC); + zval_update_constant(retval, 1 TSRMLS_CC); break; case ZEND_FETCH_GLOBAL_LOCK: if (IS_VAR == IS_VAR && !free_op1.var) { @@ -25569,7 +25569,7 @@ static int ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPC zend_class_entry *old_scope = EG(scope); EG(scope) = ce; - zval_update_constant(value, (void *) 1 TSRMLS_CC); + zval_update_constant(value, 1 TSRMLS_CC); EG(scope) = old_scope; } if (IS_UNUSED == IS_CONST) { @@ -32482,7 +32482,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_CONST(int type, Z break; case ZEND_FETCH_STATIC: - zval_update_constant(retval, (void*) 1 TSRMLS_CC); + zval_update_constant(retval, 1 TSRMLS_CC); break; case ZEND_FETCH_GLOBAL_LOCK: if (IS_CV == IS_VAR && !free_op1.var) { @@ -36706,7 +36706,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_VAR(int type, ZEN break; case ZEND_FETCH_STATIC: - zval_update_constant(retval, (void*) 1 TSRMLS_CC); + zval_update_constant(retval, 1 TSRMLS_CC); break; case ZEND_FETCH_GLOBAL_LOCK: if (IS_CV == IS_VAR && !free_op1.var) { @@ -38554,7 +38554,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type, break; case ZEND_FETCH_STATIC: - zval_update_constant(retval, (void*) 1 TSRMLS_CC); + zval_update_constant(retval, 1 TSRMLS_CC); break; case ZEND_FETCH_GLOBAL_LOCK: if (IS_CV == IS_VAR && !free_op1.var) { -- cgit v1.2.1 From 99d1a1bb3f96364d1ee7bf3e9c84215001200112 Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Fri, 11 Apr 2014 19:33:56 +0200 Subject: Shut up, my lovely compiler; I do not like your warnings --- Zend/zend_object_handlers.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'Zend') diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 2ba05399b4..c7adf38f3b 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -169,6 +169,8 @@ ZEND_API HashTable *zend_std_get_debug_info(zval *object, int *is_temp TSRMLS_DC } zend_error_noreturn(E_ERROR, ZEND_DEBUGINFO_FUNC_NAME "() must return an array"); + + return NULL; /* Compilers are dumb and don't understand that noreturn means that the function does NOT need a return value... */ } /* }}} */ -- cgit v1.2.1 From 096e40a027eb3df6364c3674660b8c9592e1f1b6 Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Fri, 11 Apr 2014 20:13:24 +0200 Subject: Fixed tests for recent constant array changes --- Zend/zend_ast.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'Zend') diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c index d7fbba1215..583a52321b 100644 --- a/Zend/zend_ast.c +++ b/Zend/zend_ast.c @@ -351,9 +351,11 @@ ZEND_API zend_ast *zend_ast_copy(zend_ast *ast) zend_ast *new = emalloc(sizeof(zend_ast) + sizeof(zend_ast*) * (ast->children - 1)); int i; new->kind = ast->kind; + new->children = ast->children; for (i = 0; i < ast->children; i++) { (&new->u.child)[i] = zend_ast_copy((&ast->u.child)[i]); } + return new; } return zend_ast_create_dynamic(ast->kind); } -- cgit v1.2.1 From 20036525e2b5ee7613a6d3ead0270631b23f6a15 Mon Sep 17 00:00:00 2001 From: Ferenc Kovacs Date: Sun, 13 Apr 2014 10:45:46 +0200 Subject: Fix bug #66660: use str_efree instead of efree to handle interned empty strings correctly --- Zend/tests/bug66660.phpt | 13 +++++++++++++ Zend/zend_highlight.c | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 Zend/tests/bug66660.phpt (limited to 'Zend') diff --git a/Zend/tests/bug66660.phpt b/Zend/tests/bug66660.phpt new file mode 100644 index 0000000000..9ae8a27336 --- /dev/null +++ b/Zend/tests/bug66660.phpt @@ -0,0 +1,13 @@ +--TEST-- +Bug #66660 (Composer.phar install/update fails) +--STDIN-- + +--FILE-- +"); +echo php_strip_whitespace(__DIR__."/bug66660.tmp.php"); +?> +--CLEAN-- + +--EXPECT-- + diff --git a/Zend/zend_highlight.c b/Zend/zend_highlight.c index e4f8d0237a..68f2b7b72d 100644 --- a/Zend/zend_highlight.c +++ b/Zend/zend_highlight.c @@ -211,7 +211,7 @@ ZEND_API void zend_strip(TSRMLS_D) break; default: - efree(token.value.str.val); + STR_FREE(token.value.str.val); break; } } -- cgit v1.2.1 From 5e988a888ab97091da0f1b87e1bb4e33204c1c2c Mon Sep 17 00:00:00 2001 From: Tjerk Meesters Date: Fri, 18 Apr 2014 08:29:32 +0800 Subject: Fixed test case for 5328d42 --- Zend/tests/generators/errors/serialize_unserialize_error.phpt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'Zend') diff --git a/Zend/tests/generators/errors/serialize_unserialize_error.phpt b/Zend/tests/generators/errors/serialize_unserialize_error.phpt index aa2d4693f7..d06d4be4f1 100644 --- a/Zend/tests/generators/errors/serialize_unserialize_error.phpt +++ b/Zend/tests/generators/errors/serialize_unserialize_error.phpt @@ -34,9 +34,8 @@ Stack trace: exception 'Exception' with message 'Unserialization of 'Generator' is not allowed' in %s:%d Stack trace: -#0 [internal function]: Generator->__wakeup() -#1 %s(%d): unserialize('O:9:"Generator"...') -#2 {main} +#0 %s(%d): unserialize('O:9:"Generator"...') +#1 {main} exception 'Exception' with message 'Unserialization of 'Generator' is not allowed' in %s:%d Stack trace: -- cgit v1.2.1 From d963cf94a545f9b09d8e5bdf84ae48b5b5ead842 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Fri, 18 Apr 2014 15:16:09 +0200 Subject: refixed the test related to bug #67072 --- Zend/tests/generators/errors/serialize_unserialize_error.phpt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'Zend') diff --git a/Zend/tests/generators/errors/serialize_unserialize_error.phpt b/Zend/tests/generators/errors/serialize_unserialize_error.phpt index d06d4be4f1..b5e77e5028 100644 --- a/Zend/tests/generators/errors/serialize_unserialize_error.phpt +++ b/Zend/tests/generators/errors/serialize_unserialize_error.phpt @@ -32,11 +32,11 @@ Stack trace: #0 %s(%d): serialize(Object(Generator)) #1 {main} -exception 'Exception' with message 'Unserialization of 'Generator' is not allowed' in %s:%d -Stack trace: -#0 %s(%d): unserialize('O:9:"Generator"...') -#1 {main} +Warning: Erroneous data format for unserializing 'Generator' in %sserialize_unserialize_error.php on line %d + +Notice: unserialize(): Error at offset 19 of 20 bytes in %sserialize_unserialize_error.php on line %s +bool(false) exception 'Exception' with message 'Unserialization of 'Generator' is not allowed' in %s:%d Stack trace: #0 %s(%d): unserialize('C:9:"Generator"...') -- cgit v1.2.1