diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-02-28 17:07:36 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-02-28 17:07:36 +0100 |
commit | 375191aae7d4d066367c751727bcd37bb862827b (patch) | |
tree | cbc949d4b741b7dc1c9ad0ac8593b7777a0442b5 | |
parent | 0bffee4a35f0aa67de756f77ccbdeec7d8a9ab23 (diff) | |
parent | 6c48da9a50a68cbb27873ead6bf936494c006236 (diff) | |
download | php-git-375191aae7d4d066367c751727bcd37bb862827b.tar.gz |
Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
Fixed bug #79062
-rw-r--r-- | NEWS | 12 | ||||
-rw-r--r-- | Zend/zend_language_scanner.c | 8488 | ||||
-rw-r--r-- | Zend/zend_language_scanner.l | 3 | ||||
-rw-r--r-- | ext/reflection/tests/bug79062.phpt | 34 |
4 files changed, 8533 insertions, 4 deletions
@@ -38,6 +38,10 @@ PHP NEWS - MySQLi: . Fixed bug #64032 (mysqli reports different client_version). (cmb) +- Opcache: + . Fixed bug #79252 (preloading causes php-fpm to segfault during exit). + (Nikita) + - PCRE: . Fixed bug #79188 (Memory corruption in preg_replace/preg_replace_callback and unicode). (Nikita) @@ -48,6 +52,10 @@ PHP NEWS - PDO_ODBC: . Fixed bug #79038 (PDOStatement::nextRowset() leaks column values). (cmb) +- Reflection: + . Fixed bug #79062 (Property with heredoc default value returns false for + getDocComment). (Nikita) + - SQLite3: . Fixed bug #79294 (::columnType() may fail after SQLite3Stmt::reset()). (cmb) @@ -60,10 +68,6 @@ PHP NEWS . Fixed bug #79315 (ZipArchive::addFile doesn't honor start/length parameters). (Remi) -- Opcache: - . Fixed bug #79252 (preloading causes php-fpm to segfault during exit). - (Nikita) - 20 Feb 2020, PHP 7.4.3 - Core: diff --git a/Zend/zend_language_scanner.c b/Zend/zend_language_scanner.c new file mode 100644 index 0000000000..46bafe5e52 --- /dev/null +++ b/Zend/zend_language_scanner.c @@ -0,0 +1,8488 @@ +/* Generated by re2c 1.0.1 */ +#line 1 "Zend/zend_language_scanner.l" +/* + +----------------------------------------------------------------------+ + | Zend Engine | + +----------------------------------------------------------------------+ + | Copyright (c) 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: Marcus Boerger <helly@php.net> | + | Nuno Lopes <nlopess@php.net> | + | Scott MacVicar <scottmac@php.net> | + | Flex version authors: | + | Andi Gutmans <andi@php.net> | + | Zeev Suraski <zeev@php.net> | + +----------------------------------------------------------------------+ +*/ + +#if 0 +# define YYDEBUG(s, c) printf("state: %d char: %c\n", s, c) +#else +# define YYDEBUG(s, c) +#endif + +#include "zend_language_scanner_defs.h" + +#include <errno.h> +#include "zend.h" +#ifdef ZEND_WIN32 +# include <Winuser.h> +#endif +#include "zend_alloc.h" +#include <zend_language_parser.h> +#include "zend_compile.h" +#include "zend_language_scanner.h" +#include "zend_highlight.h" +#include "zend_constants.h" +#include "zend_variables.h" +#include "zend_operators.h" +#include "zend_API.h" +#include "zend_strtod.h" +#include "zend_exceptions.h" +#include "zend_virtual_cwd.h" + +#define YYCTYPE unsigned char +#define YYFILL(n) { if ((YYCURSOR + n) >= (YYLIMIT + ZEND_MMAP_AHEAD)) { 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 16 + +#if ZEND_MMAP_AHEAD < YYMAXFILL +# error ZEND_MMAP_AHEAD should be greater than or equal to YYMAXFILL +#endif + +#include <stdarg.h> + +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif + +/* Globals Macros */ +#define SCNG LANG_SCNG +#ifdef ZTS +ZEND_API ts_rsrc_id language_scanner_globals_id; +ZEND_API size_t language_scanner_globals_offset; +#else +ZEND_API zend_php_scanner_globals language_scanner_globals; +#endif + +#define HANDLE_NEWLINES(s, l) \ +do { \ + char *p = (s), *boundary = p+(l); \ + \ + while (p<boundary) { \ + if (*p == '\n' || (*p == '\r' && (*(p+1) != '\n'))) { \ + CG(zend_lineno)++; \ + } \ + p++; \ + } \ +} while (0) + +#define HANDLE_NEWLINE(c) \ +{ \ + if (c == '\n' || c == '\r') { \ + CG(zend_lineno)++; \ + } \ +} + +/* To save initial string length after scanning to first variable */ +#define SET_DOUBLE_QUOTES_SCANNED_LENGTH(len) SCNG(scanned_string_len) = (len) +#define GET_DOUBLE_QUOTES_SCANNED_LENGTH() SCNG(scanned_string_len) + +#define IS_LABEL_START(c) (((c) >= 'a' && (c) <= 'z') || ((c) >= 'A' && (c) <= 'Z') || (c) == '_' || (c) >= 0x80) +#define IS_LABEL_SUCCESSOR(c) (((c) >= 'a' && (c) <= 'z') || ((c) >= 'A' && (c) <= 'Z') || ((c) >= '0' && (c) <= '9') || (c) == '_' || (c) >= 0x80) + +#define ZEND_IS_OCT(c) ((c)>='0' && (c)<='7') +#define ZEND_IS_HEX(c) (((c)>='0' && (c)<='9') || ((c)>='a' && (c)<='f') || ((c)>='A' && (c)<='F')) + +BEGIN_EXTERN_C() + +static void strip_underscores(char *str, size_t *len) +{ + char *src = str, *dest = str; + while (*src != '\0') { + if (*src != '_') { + *dest = *src; + dest++; + } else { + --(*len); + } + src++; + } + *dest = '\0'; +} + +static size_t encoding_filter_script_to_internal(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length) +{ + const zend_encoding *internal_encoding = zend_multibyte_get_internal_encoding(); + ZEND_ASSERT(internal_encoding); + return zend_multibyte_encoding_converter(to, to_length, from, from_length, internal_encoding, LANG_SCNG(script_encoding)); +} + +static size_t encoding_filter_script_to_intermediate(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length) +{ + return zend_multibyte_encoding_converter(to, to_length, from, from_length, zend_multibyte_encoding_utf8, LANG_SCNG(script_encoding)); +} + +static size_t encoding_filter_intermediate_to_script(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length) +{ + return zend_multibyte_encoding_converter(to, to_length, from, from_length, +LANG_SCNG(script_encoding), zend_multibyte_encoding_utf8); +} + +static size_t encoding_filter_intermediate_to_internal(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length) +{ + const zend_encoding *internal_encoding = zend_multibyte_get_internal_encoding(); + ZEND_ASSERT(internal_encoding); + return zend_multibyte_encoding_converter(to, to_length, from, from_length, +internal_encoding, zend_multibyte_encoding_utf8); +} + + +static void _yy_push_state(int new_state) +{ + zend_stack_push(&SCNG(state_stack), (void *) &YYGETCONDITION()); + YYSETCONDITION(new_state); +} + +#define yy_push_state(state_and_tsrm) _yy_push_state(yyc##state_and_tsrm) + +static void yy_pop_state(void) +{ + int *stack_state = zend_stack_top(&SCNG(state_stack)); + YYSETCONDITION(*stack_state); + zend_stack_del_top(&SCNG(state_stack)); +} + +static void yy_scan_buffer(char *str, unsigned int len) +{ + YYCURSOR = (YYCTYPE*)str; + YYLIMIT = YYCURSOR + len; + if (!SCNG(yy_start)) { + SCNG(yy_start) = YYCURSOR; + } +} + +void startup_scanner(void) +{ + CG(parse_error) = 0; + CG(doc_comment) = NULL; + CG(extra_fn_flags) = 0; + zend_stack_init(&SCNG(state_stack), sizeof(int)); + zend_ptr_stack_init(&SCNG(heredoc_label_stack)); + SCNG(heredoc_scan_ahead) = 0; +} + +static void heredoc_label_dtor(zend_heredoc_label *heredoc_label) { + efree(heredoc_label->label); +} + +void shutdown_scanner(void) +{ + CG(parse_error) = 0; + RESET_DOC_COMMENT(); + zend_stack_destroy(&SCNG(state_stack)); + zend_ptr_stack_clean(&SCNG(heredoc_label_stack), (void (*)(void *)) &heredoc_label_dtor, 1); + zend_ptr_stack_destroy(&SCNG(heredoc_label_stack)); + SCNG(heredoc_scan_ahead) = 0; + SCNG(on_event) = NULL; +} + +ZEND_API void zend_save_lexical_state(zend_lex_state *lex_state) +{ + lex_state->yy_leng = SCNG(yy_leng); + lex_state->yy_start = SCNG(yy_start); + lex_state->yy_text = SCNG(yy_text); + lex_state->yy_cursor = SCNG(yy_cursor); + lex_state->yy_marker = SCNG(yy_marker); + lex_state->yy_limit = SCNG(yy_limit); + + lex_state->state_stack = SCNG(state_stack); + zend_stack_init(&SCNG(state_stack), sizeof(int)); + + lex_state->heredoc_label_stack = SCNG(heredoc_label_stack); + zend_ptr_stack_init(&SCNG(heredoc_label_stack)); + + lex_state->in = SCNG(yy_in); + lex_state->yy_state = YYSTATE; + lex_state->filename = zend_get_compiled_filename(); + lex_state->lineno = CG(zend_lineno); + + lex_state->script_org = SCNG(script_org); + lex_state->script_org_size = SCNG(script_org_size); + lex_state->script_filtered = SCNG(script_filtered); + lex_state->script_filtered_size = SCNG(script_filtered_size); + lex_state->input_filter = SCNG(input_filter); + lex_state->output_filter = SCNG(output_filter); + lex_state->script_encoding = SCNG(script_encoding); + + lex_state->on_event = SCNG(on_event); + lex_state->on_event_context = SCNG(on_event_context); + + lex_state->ast = CG(ast); + lex_state->ast_arena = CG(ast_arena); +} + +ZEND_API void zend_restore_lexical_state(zend_lex_state *lex_state) +{ + SCNG(yy_leng) = lex_state->yy_leng; + SCNG(yy_start) = lex_state->yy_start; + SCNG(yy_text) = lex_state->yy_text; + SCNG(yy_cursor) = lex_state->yy_cursor; + SCNG(yy_marker) = lex_state->yy_marker; + SCNG(yy_limit) = lex_state->yy_limit; + + zend_stack_destroy(&SCNG(state_stack)); + SCNG(state_stack) = lex_state->state_stack; + + zend_ptr_stack_clean(&SCNG(heredoc_label_stack), (void (*)(void *)) &heredoc_label_dtor, 1); + zend_ptr_stack_destroy(&SCNG(heredoc_label_stack)); + SCNG(heredoc_label_stack) = lex_state->heredoc_label_stack; + + SCNG(yy_in) = lex_state->in; + YYSETCONDITION(lex_state->yy_state); + CG(zend_lineno) = lex_state->lineno; + zend_restore_compiled_filename(lex_state->filename); + + if (SCNG(script_filtered)) { + efree(SCNG(script_filtered)); + SCNG(script_filtered) = NULL; + } + SCNG(script_org) = lex_state->script_org; + SCNG(script_org_size) = lex_state->script_org_size; + SCNG(script_filtered) = lex_state->script_filtered; + SCNG(script_filtered_size) = lex_state->script_filtered_size; + SCNG(input_filter) = lex_state->input_filter; + SCNG(output_filter) = lex_state->output_filter; + SCNG(script_encoding) = lex_state->script_encoding; + + SCNG(on_event) = lex_state->on_event; + SCNG(on_event_context) = lex_state->on_event_context; + + CG(ast) = lex_state->ast; + CG(ast_arena) = lex_state->ast_arena; + + RESET_DOC_COMMENT(); +} + +ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle) +{ + zend_llist_del_element(&CG(open_files), file_handle, (int (*)(void *, void *)) zend_compare_file_handles); + /* zend_file_handle_dtor() operates on the copy, so we have to NULLify the original here */ + file_handle->opened_path = NULL; + if (file_handle->free_filename) { + file_handle->filename = NULL; + } +} + +ZEND_API void zend_lex_tstring(zval *zv) +{ + if (SCNG(on_event)) { + SCNG(on_event)(ON_FEEDBACK, T_STRING, 0, SCNG(on_event_context)); + } + + ZVAL_STRINGL(zv, (char*)SCNG(yy_text), SCNG(yy_leng)); +} + +#define BOM_UTF32_BE "\x00\x00\xfe\xff" +#define BOM_UTF32_LE "\xff\xfe\x00\x00" +#define BOM_UTF16_BE "\xfe\xff" +#define BOM_UTF16_LE "\xff\xfe" +#define BOM_UTF8 "\xef\xbb\xbf" + +static const zend_encoding *zend_multibyte_detect_utf_encoding(const unsigned char *script, size_t script_size) +{ + const unsigned char *p; + int wchar_size = 2; + int le = 0; + + /* utf-16 or utf-32? */ + p = script; + assert(p >= script); + while ((size_t)(p-script) < script_size) { + p = memchr(p, 0, script_size-(p-script)-2); + if (!p) { + break; + } + if (*(p+1) == '\0' && *(p+2) == '\0') { + wchar_size = 4; + break; + } + + /* searching for UTF-32 specific byte orders, so this will do */ + p += 4; + } + + /* BE or LE? */ + p = script; + assert(p >= script); + while ((size_t)(p-script) < script_size) { + if (*p == '\0' && *(p+wchar_size-1) != '\0') { + /* BE */ + le = 0; + break; + } else if (*p != '\0' && *(p+wchar_size-1) == '\0') { + /* LE* */ + le = 1; + break; + } + p += wchar_size; + } + + if (wchar_size == 2) { + return le ? zend_multibyte_encoding_utf16le : zend_multibyte_encoding_utf16be; + } else { + return le ? zend_multibyte_encoding_utf32le : zend_multibyte_encoding_utf32be; + } + + return NULL; +} + +static const zend_encoding* zend_multibyte_detect_unicode(void) +{ + const zend_encoding *script_encoding = NULL; + int bom_size; + unsigned char *pos1, *pos2; + + if (LANG_SCNG(script_org_size) < sizeof(BOM_UTF32_LE)-1) { + return NULL; + } + + /* check out BOM */ + if (!memcmp(LANG_SCNG(script_org), BOM_UTF32_BE, sizeof(BOM_UTF32_BE)-1)) { + script_encoding = zend_multibyte_encoding_utf32be; + bom_size = sizeof(BOM_UTF32_BE)-1; + } else if (!memcmp(LANG_SCNG(script_org), BOM_UTF32_LE, sizeof(BOM_UTF32_LE)-1)) { + script_encoding = zend_multibyte_encoding_utf32le; + bom_size = sizeof(BOM_UTF32_LE)-1; + } else if (!memcmp(LANG_SCNG(script_org), BOM_UTF16_BE, sizeof(BOM_UTF16_BE)-1)) { + script_encoding = zend_multibyte_encoding_utf16be; + bom_size = sizeof(BOM_UTF16_BE)-1; + } else if (!memcmp(LANG_SCNG(script_org), BOM_UTF16_LE, sizeof(BOM_UTF16_LE)-1)) { + script_encoding = zend_multibyte_encoding_utf16le; + bom_size = sizeof(BOM_UTF16_LE)-1; + } else if (!memcmp(LANG_SCNG(script_org), BOM_UTF8, sizeof(BOM_UTF8)-1)) { + script_encoding = zend_multibyte_encoding_utf8; + bom_size = sizeof(BOM_UTF8)-1; + } + + if (script_encoding) { + /* remove BOM */ + LANG_SCNG(script_org) += bom_size; + LANG_SCNG(script_org_size) -= bom_size; + + return script_encoding; + } + + /* script contains NULL bytes -> auto-detection */ + if ((pos1 = memchr(LANG_SCNG(script_org), 0, LANG_SCNG(script_org_size)))) { + /* check if the NULL byte is after the __HALT_COMPILER(); */ + pos2 = LANG_SCNG(script_org); + + while ((size_t)(pos1 - pos2) >= sizeof("__HALT_COMPILER();")-1) { + pos2 = memchr(pos2, '_', pos1 - pos2); + if (!pos2) break; + pos2++; + if (strncasecmp((char*)pos2, "_HALT_COMPILER", sizeof("_HALT_COMPILER")-1) == 0) { + pos2 += sizeof("_HALT_COMPILER")-1; + while (*pos2 == ' ' || + *pos2 == '\t' || + *pos2 == '\r' || + *pos2 == '\n') { + pos2++; + } + if (*pos2 == '(') { + pos2++; + while (*pos2 == ' ' || + *pos2 == '\t' || + *pos2 == '\r' || + *pos2 == '\n') { + pos2++; + } + if (*pos2 == ')') { + pos2++; + while (*pos2 == ' ' || + *pos2 == '\t' || + *pos2 == '\r' || + *pos2 == '\n') { + pos2++; + } + if (*pos2 == ';') { + return NULL; + } + } + } + } + } + /* make best effort if BOM is missing */ + return zend_multibyte_detect_utf_encoding(LANG_SCNG(script_org), LANG_SCNG(script_org_size)); + } + + return NULL; +} + +static const zend_encoding* zend_multibyte_find_script_encoding(void) +{ + const zend_encoding *script_encoding; + + if (CG(detect_unicode)) { + /* check out bom(byte order mark) and see if containing wchars */ + script_encoding = zend_multibyte_detect_unicode(); + if (script_encoding != NULL) { + /* bom or wchar detection is prior to 'script_encoding' option */ + return script_encoding; + } + } + + /* if no script_encoding specified, just leave alone */ + if (!CG(script_encoding_list) || !CG(script_encoding_list_size)) { + return NULL; + } + + /* if multiple encodings specified, detect automagically */ + if (CG(script_encoding_list_size) > 1) { + return zend_multibyte_encoding_detector(LANG_SCNG(script_org), LANG_SCNG(script_org_size), CG(script_encoding_list), CG(script_encoding_list_size)); + } + + return CG(script_encoding_list)[0]; +} + +ZEND_API int zend_multibyte_set_filter(const zend_encoding *onetime_encoding) +{ + const zend_encoding *internal_encoding = zend_multibyte_get_internal_encoding(); + const zend_encoding *script_encoding = onetime_encoding ? onetime_encoding: zend_multibyte_find_script_encoding(); + + if (!script_encoding) { + return FAILURE; + } + + /* judge input/output filter */ + LANG_SCNG(script_encoding) = script_encoding; + LANG_SCNG(input_filter) = NULL; + LANG_SCNG(output_filter) = NULL; + + if (!internal_encoding || LANG_SCNG(script_encoding) == internal_encoding) { + if (!zend_multibyte_check_lexer_compatibility(LANG_SCNG(script_encoding))) { + /* and if not, work around w/ script_encoding -> utf-8 -> script_encoding conversion */ + LANG_SCNG(input_filter) = encoding_filter_script_to_intermediate; + LANG_SCNG(output_filter) = encoding_filter_intermediate_to_script; + } else { + LANG_SCNG(input_filter) = NULL; + LANG_SCNG(output_filter) = NULL; + } + return SUCCESS; + } + + if (zend_multibyte_check_lexer_compatibility(internal_encoding)) { + LANG_SCNG(input_filter) = encoding_filter_script_to_internal; + LANG_SCNG(output_filter) = NULL; + } else if (zend_multibyte_check_lexer_compatibility(LANG_SCNG(script_encoding))) { + LANG_SCNG(input_filter) = NULL; + LANG_SCNG(output_filter) = encoding_filter_script_to_internal; + } else { + /* both script and internal encodings are incompatible w/ flex */ + LANG_SCNG(input_filter) = encoding_filter_script_to_intermediate; + LANG_SCNG(output_filter) = encoding_filter_intermediate_to_internal; + } + + return 0; +} + +ZEND_API int open_file_for_scanning(zend_file_handle *file_handle) +{ + char *buf; + size_t size; + zend_string *compiled_filename; + + if (zend_stream_fixup(file_handle, &buf, &size) == FAILURE) { + /* Still add it to open_files to make destroy_file_handle work */ + zend_llist_add_element(&CG(open_files), file_handle); + return FAILURE; + } + + ZEND_ASSERT(!EG(exception) && "stream_fixup() should have failed"); + zend_llist_add_element(&CG(open_files), file_handle); + if (file_handle->handle.stream.handle >= (void*)file_handle && file_handle->handle.stream.handle <= (void*)(file_handle+1)) { + zend_file_handle *fh = (zend_file_handle*)zend_llist_get_last(&CG(open_files)); + size_t diff = (char*)file_handle->handle.stream.handle - (char*)file_handle; + fh->handle.stream.handle = (void*)(((char*)fh) + diff); + file_handle->handle.stream.handle = fh->handle.stream.handle; + } + + /* Reset the scanner for scanning the new file */ + SCNG(yy_in) = file_handle; + SCNG(yy_start) = NULL; + + if (size != (size_t)-1) { + if (CG(multibyte)) { + SCNG(script_org) = (unsigned char*)buf; + SCNG(script_org_size) = size; + SCNG(script_filtered) = NULL; + + zend_multibyte_set_filter(NULL); + + if (SCNG(input_filter)) { + if ((size_t)-1 == SCNG(input_filter)(&SCNG(script_filtered), &SCNG(script_filtered_size), SCNG(script_org), SCNG(script_org_size))) { + zend_error_noreturn(E_COMPILE_ERROR, "Could not convert the script from the detected " + "encoding \"%s\" to a compatible encoding", zend_multibyte_get_encoding_name(LANG_SCNG(script_encoding))); + } + buf = (char*)SCNG(script_filtered); + size = SCNG(script_filtered_size); + } + } + SCNG(yy_start) = (unsigned char *)buf; + yy_scan_buffer(buf, (unsigned int)size); + } else { + zend_error_noreturn(E_COMPILE_ERROR, "zend_stream_mmap() failed"); + } + + if (CG(skip_shebang)) { + CG(skip_shebang) = 0; + BEGIN(SHEBANG); + } else { + BEGIN(INITIAL); + } + + if (file_handle->opened_path) { + compiled_filename = zend_string_copy(file_handle->opened_path); + } else { + compiled_filename = zend_string_init(file_handle->filename, strlen(file_handle->filename), 0); + } + + zend_set_compiled_filename(compiled_filename); + zend_string_release_ex(compiled_filename, 0); + + RESET_DOC_COMMENT(); + CG(zend_lineno) = 1; + CG(increment_lineno) = 0; + return SUCCESS; +} +END_EXTERN_C() + +static zend_op_array *zend_compile(int type) +{ + zend_op_array *op_array = NULL; + zend_bool original_in_compilation = CG(in_compilation); + + CG(in_compilation) = 1; + CG(ast) = NULL; + CG(ast_arena) = zend_arena_create(1024 * 32); + + if (!zendparse()) { + int last_lineno = CG(zend_lineno); + zend_file_context original_file_context; + zend_oparray_context original_oparray_context; + zend_op_array *original_active_op_array = CG(active_op_array); + + op_array = emalloc(sizeof(zend_op_array)); + init_op_array(op_array, type, INITIAL_OP_ARRAY_SIZE); + CG(active_op_array) = op_array; + + /* Use heap to not waste arena memory */ + op_array->fn_flags |= ZEND_ACC_HEAP_RT_CACHE; + + if (zend_ast_process) { + zend_ast_process(CG(ast)); + } + + zend_file_context_begin(&original_file_context); + zend_oparray_context_begin(&original_oparray_context); + zend_compile_top_stmt(CG(ast)); + CG(zend_lineno) = last_lineno; + zend_emit_final_return(type == ZEND_USER_FUNCTION); + op_array->line_start = 1; + op_array->line_end = last_lineno; + pass_two(op_array); + zend_oparray_context_end(&original_oparray_context); + zend_file_context_end(&original_file_context); + + CG(active_op_array) = original_active_op_array; + } + + zend_ast_destroy(CG(ast)); + zend_arena_destroy(CG(ast_arena)); + + CG(in_compilation) = original_in_compilation; + + return op_array; +} + +ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type) +{ + zend_lex_state original_lex_state; + zend_op_array *op_array = NULL; + zend_save_lexical_state(&original_lex_state); + + if (open_file_for_scanning(file_handle)==FAILURE) { + if (!EG(exception)) { + if (type==ZEND_REQUIRE) { + zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, file_handle->filename); + zend_bailout(); + } else { + zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, file_handle->filename); + } + } + } else { + op_array = zend_compile(ZEND_USER_FUNCTION); + } + + zend_restore_lexical_state(&original_lex_state); + return op_array; +} + + +zend_op_array *compile_filename(int type, zval *filename) +{ + zend_file_handle file_handle; + zval tmp; + zend_op_array *retval; + zend_string *opened_path = NULL; + + if (Z_TYPE_P(filename) != IS_STRING) { + ZVAL_STR(&tmp, zval_get_string(filename)); + filename = &tmp; + } + zend_stream_init_filename(&file_handle, Z_STRVAL_P(filename)); + + retval = zend_compile_file(&file_handle, type); + if (retval && file_handle.handle.stream.handle) { + if (!file_handle.opened_path) { + file_handle.opened_path = opened_path = zend_string_copy(Z_STR_P(filename)); + } + + zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path); + + if (opened_path) { + zend_string_release_ex(opened_path, 0); + } + } + zend_destroy_file_handle(&file_handle); + + if (UNEXPECTED(filename == &tmp)) { + zval_ptr_dtor(&tmp); + } + return retval; +} + +ZEND_API int zend_prepare_string_for_scanning(zval *str, char *filename) +{ + char *buf; + size_t size, old_len; + zend_string *new_compiled_filename; + + /* enforce ZEND_MMAP_AHEAD trailing NULLs for flex... */ + old_len = Z_STRLEN_P(str); + Z_STR_P(str) = zend_string_extend(Z_STR_P(str), old_len + ZEND_MMAP_AHEAD, 0); + Z_TYPE_INFO_P(str) = IS_STRING_EX; + memset(Z_STRVAL_P(str) + old_len, 0, ZEND_MMAP_AHEAD + 1); + + SCNG(yy_in) = NULL; + SCNG(yy_start) = NULL; + + buf = Z_STRVAL_P(str); + size = old_len; + + if (CG(multibyte)) { + SCNG(script_org) = (unsigned char*)buf; + SCNG(script_org_size) = size; + SCNG(script_filtered) = NULL; + + zend_multibyte_set_filter(zend_multibyte_get_internal_encoding()); + + if (SCNG(input_filter)) { + if ((size_t)-1 == SCNG(input_filter)(&SCNG(script_filtered), &SCNG(script_filtered_size), SCNG(script_org), SCNG(script_org_size))) { + zend_error_noreturn(E_COMPILE_ERROR, "Could not convert the script from the detected " + "encoding \"%s\" to a compatible encoding", zend_multibyte_get_encoding_name(LANG_SCNG(script_encoding))); + } + buf = (char*)SCNG(script_filtered); + size = SCNG(script_filtered_size); + } + } + + yy_scan_buffer(buf, (unsigned int)size); + + new_compiled_filename = zend_string_init(filename, strlen(filename), 0); + zend_set_compiled_filename(new_compiled_filename); + zend_string_release_ex(new_compiled_filename, 0); + CG(zend_lineno) = 1; + CG(increment_lineno) = 0; + RESET_DOC_COMMENT(); + return SUCCESS; +} + + +ZEND_API size_t zend_get_scanned_file_offset(void) +{ + size_t offset = SCNG(yy_cursor) - SCNG(yy_start); + if (SCNG(input_filter)) { + size_t original_offset = offset, length = 0; + do { + unsigned char *p = NULL; + if ((size_t)-1 == SCNG(input_filter)(&p, &length, SCNG(script_org), offset)) { + return (size_t)-1; + } + efree(p); + if (length > original_offset) { + offset--; + } else if (length < original_offset) { + offset++; + } + } while (original_offset != length); + } + return offset; +} + +zend_op_array *compile_string(zval *source_string, char *filename) +{ + zend_lex_state original_lex_state; + zend_op_array *op_array = NULL; + zval tmp; + + if (UNEXPECTED(Z_TYPE_P(source_string) != IS_STRING)) { + ZVAL_STR(&tmp, zval_get_string_func(source_string)); + } else { + ZVAL_COPY(&tmp, source_string); + } + + if (Z_STRLEN(tmp)==0) { + zval_ptr_dtor(&tmp); + return NULL; + } + + zend_save_lexical_state(&original_lex_state); + if (zend_prepare_string_for_scanning(&tmp, filename) == SUCCESS) { + BEGIN(ST_IN_SCRIPTING); + op_array = zend_compile(ZEND_EVAL_CODE); + } + + zend_restore_lexical_state(&original_lex_state); + zval_ptr_dtor(&tmp); + + return op_array; +} + + +BEGIN_EXTERN_C() +int highlight_file(char *filename, zend_syntax_highlighter_ini *syntax_highlighter_ini) +{ + zend_lex_state original_lex_state; + zend_file_handle file_handle; + + zend_stream_init_filename(&file_handle, filename); + zend_save_lexical_state(&original_lex_state); + if (open_file_for_scanning(&file_handle)==FAILURE) { + zend_message_dispatcher(ZMSG_FAILED_HIGHLIGHT_FOPEN, filename); + zend_restore_lexical_state(&original_lex_state); + return FAILURE; + } + zend_highlight(syntax_highlighter_ini); + if (SCNG(script_filtered)) { + efree(SCNG(script_filtered)); + SCNG(script_filtered) = NULL; + } + zend_destroy_file_handle(&file_handle); + zend_restore_lexical_state(&original_lex_state); + return SUCCESS; +} + +int highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, char *str_name) +{ + zend_lex_state original_lex_state; + zval tmp; + + if (UNEXPECTED(Z_TYPE_P(str) != IS_STRING)) { + ZVAL_STR(&tmp, zval_get_string_func(str)); + str = &tmp; + } + zend_save_lexical_state(&original_lex_state); + if (zend_prepare_string_for_scanning(str, str_name)==FAILURE) { + zend_restore_lexical_state(&original_lex_state); + if (UNEXPECTED(str == &tmp)) { + zval_ptr_dtor(&tmp); + } + return FAILURE; + } + BEGIN(INITIAL); + zend_highlight(syntax_highlighter_ini); + if (SCNG(script_filtered)) { + efree(SCNG(script_filtered)); + SCNG(script_filtered) = NULL; + } + zend_restore_lexical_state(&original_lex_state); + if (UNEXPECTED(str == &tmp)) { + zval_ptr_dtor(&tmp); + } + return SUCCESS; +} + +ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter old_input_filter, const zend_encoding *old_encoding) +{ + size_t length; + unsigned char *new_yy_start; + + /* convert and set */ + if (!SCNG(input_filter)) { + if (SCNG(script_filtered)) { + efree(SCNG(script_filtered)); + SCNG(script_filtered) = NULL; + } + SCNG(script_filtered_size) = 0; + length = SCNG(script_org_size); + new_yy_start = SCNG(script_org); + } else { + if ((size_t)-1 == SCNG(input_filter)(&new_yy_start, &length, SCNG(script_org), SCNG(script_org_size))) { + zend_error_noreturn(E_COMPILE_ERROR, "Could not convert the script from the detected " + "encoding \"%s\" to a compatible encoding", zend_multibyte_get_encoding_name(LANG_SCNG(script_encoding))); + } + if (SCNG(script_filtered)) { + efree(SCNG(script_filtered)); + } + SCNG(script_filtered) = new_yy_start; + SCNG(script_filtered_size) = length; + } + + SCNG(yy_cursor) = new_yy_start + (SCNG(yy_cursor) - SCNG(yy_start)); + SCNG(yy_marker) = new_yy_start + (SCNG(yy_marker) - SCNG(yy_start)); + SCNG(yy_text) = new_yy_start + (SCNG(yy_text) - SCNG(yy_start)); + SCNG(yy_limit) = new_yy_start + length; + + SCNG(yy_start) = new_yy_start; +} + + +// TODO: avoid reallocation ??? +# define zend_copy_value(zendlval, yytext, yyleng) \ + if (SCNG(output_filter)) { \ + size_t sz = 0; \ + char *s = NULL; \ + SCNG(output_filter)((unsigned char **)&s, &sz, (unsigned char *)yytext, (size_t)yyleng); \ + ZVAL_STRINGL(zendlval, s, sz); \ + efree(s); \ + } else if (yyleng == 1) { \ + ZVAL_INTERNED_STR(zendlval, ZSTR_CHAR((zend_uchar)*(yytext))); \ + } else { \ + ZVAL_STRINGL(zendlval, yytext, yyleng); \ + } + +static int zend_scan_escape_string(zval *zendlval, char *str, int len, char quote_type) +{ + register char *s, *t; + char *end; + + if (len <= 1) { + if (len < 1) { + ZVAL_EMPTY_STRING(zendlval); + } else { + zend_uchar c = (zend_uchar)*str; + if (c == '\n' || c == '\r') { + CG(zend_lineno)++; + } + ZVAL_INTERNED_STR(zendlval, ZSTR_CHAR(c)); + } + goto skip_escape_conversion; + } + + ZVAL_STRINGL(zendlval, str, len); + + /* convert escape sequences */ + s = Z_STRVAL_P(zendlval); + end = s+Z_STRLEN_P(zendlval); + while (1) { + if (UNEXPECTED(*s=='\\')) { + break; + } + if (*s == '\n' || (*s == '\r' && (*(s+1) != '\n'))) { + CG(zend_lineno)++; + } + s++; + if (s == end) { + goto skip_escape_conversion; + } + } + + t = s; + while (s<end) { + if (*s=='\\') { + s++; + if (s >= end) { + *t++ = '\\'; + break; + } + + switch(*s) { + case 'n': + *t++ = '\n'; + break; + case 'r': + *t++ = '\r'; + break; + case 't': + *t++ = '\t'; + break; + case 'f': + *t++ = '\f'; + break; + case 'v': + *t++ = '\v'; + break; + case 'e': +#ifdef ZEND_WIN32 + *t++ = VK_ESCAPE; +#else + *t++ = '\e'; +#endif + break; + case '"': + case '`': + if (*s != quote_type) { + *t++ = '\\'; + *t++ = *s; + break; + } + case '\\': + case '$': + *t++ = *s; + break; + case 'x': + case 'X': + if (ZEND_IS_HEX(*(s+1))) { + char hex_buf[3] = { 0, 0, 0 }; + + hex_buf[0] = *(++s); + if (ZEND_IS_HEX(*(s+1))) { + hex_buf[1] = *(++s); + } + *t++ = (char) ZEND_STRTOL(hex_buf, NULL, 16); + } else { + *t++ = '\\'; + *t++ = *s; + } + break; + /* UTF-8 codepoint escape, format: /\\u\{\x+\}/ */ + case 'u': + { + /* cache where we started so we can parse after validating */ + char *start = s + 1; + size_t len = 0; + zend_bool valid = 1; + unsigned long codepoint; + + if (*start != '{') { + /* we silently let this pass to avoid breaking code + * with JSON in string literals (e.g. "\"\u202e\"" + */ + *t++ = '\\'; + *t++ = 'u'; + break; + } else { + /* on the other hand, invalid \u{blah} errors */ + s++; + len++; + s++; + while (*s != '}') { + if (!ZEND_IS_HEX(*s)) { + valid = 0; + break; + } else { + len++; + } + s++; + } + if (*s == '}') { + valid = 1; + len++; + } + } + + /* \u{} is invalid */ + if (len <= 2) { + valid = 0; + } + + if (!valid) { + zend_throw_exception(zend_ce_parse_error, + "Invalid UTF-8 codepoint escape sequence", 0); + zval_ptr_dtor(zendlval); + ZVAL_UNDEF(zendlval); + return FAILURE; + } + + errno = 0; + codepoint = strtoul(start + 1, NULL, 16); + + /* per RFC 3629, UTF-8 can only represent 21 bits */ + if (codepoint > 0x10FFFF || errno) { + zend_throw_exception(zend_ce_parse_error, + "Invalid UTF-8 codepoint escape sequence: Codepoint too large", 0); + zval_ptr_dtor(zendlval); + ZVAL_UNDEF(zendlval); + return FAILURE; + } + + /* based on https://en.wikipedia.org/wiki/UTF-8#Sample_code */ + if (codepoint < 0x80) { + *t++ = codepoint; + } else if (codepoint <= 0x7FF) { + *t++ = (codepoint >> 6) + 0xC0; + *t++ = (codepoint & 0x3F) + 0x80; + } else if (codepoint <= 0xFFFF) { + *t++ = (codepoint >> 12) + 0xE0; + *t++ = ((codepoint >> 6) & 0x3F) + 0x80; + *t++ = (codepoint & 0x3F) + 0x80; + } else if (codepoint <= 0x10FFFF) { + *t++ = (codepoint >> 18) + 0xF0; + *t++ = ((codepoint >> 12) & 0x3F) + 0x80; + *t++ = ((codepoint >> 6) & 0x3F) + 0x80; + *t++ = (codepoint & 0x3F) + 0x80; + } + } + break; + default: + /* check for an octal */ + if (ZEND_IS_OCT(*s)) { + char octal_buf[4] = { 0, 0, 0, 0 }; + + octal_buf[0] = *s; + if (ZEND_IS_OCT(*(s+1))) { + octal_buf[1] = *(++s); + if (ZEND_IS_OCT(*(s+1))) { + octal_buf[2] = *(++s); + } + } + if (octal_buf[2] && + (octal_buf[0] > '3')) { + /* 3 octit values must not overflow 0xFF (\377) */ + zend_error(E_COMPILE_WARNING, "Octal escape sequence overflow \\%s is greater than \\377", octal_buf); + } + + *t++ = (char) ZEND_STRTOL(octal_buf, NULL, 8); + } else { + *t++ = '\\'; + *t++ = *s; + } + break; + } + } else { + *t++ = *s; + } + + if (*s == '\n' || (*s == '\r' && (*(s+1) != '\n'))) { + CG(zend_lineno)++; + } + s++; + } + *t = 0; + Z_STRLEN_P(zendlval) = t - Z_STRVAL_P(zendlval); + +skip_escape_conversion: + if (SCNG(output_filter)) { + size_t sz = 0; + unsigned char *str; + // TODO: avoid realocation ??? + s = Z_STRVAL_P(zendlval); + SCNG(output_filter)(&str, &sz, (unsigned char *)s, (size_t)Z_STRLEN_P(zendlval)); + zval_ptr_dtor(zendlval); + ZVAL_STRINGL(zendlval, (char *) str, sz); + efree(str); + } + return SUCCESS; +} + +#define HEREDOC_USING_SPACES 1 +#define HEREDOC_USING_TABS 2 + +static const char *next_newline(const char *str, const char *end, size_t *newline_len) { + for (; str < end; str++) { + if (*str == '\r') { + *newline_len = str + 1 < end && *(str + 1) == '\n' ? 2 : 1; + } else if (*str == '\n') { + *newline_len = 1; + return str; + } + } + *newline_len = 0; + return NULL; +} + +static zend_bool strip_multiline_string_indentation( + zval *zendlval, int indentation, zend_bool using_spaces, + zend_bool newline_at_start, zend_bool newline_at_end) +{ + const char *str = Z_STRVAL_P(zendlval), *end = str + Z_STRLEN_P(zendlval); + char *copy = Z_STRVAL_P(zendlval); + + int newline_count = 0; + size_t newline_len; + const char *nl; + + if (!newline_at_start) { + nl = next_newline(str, end, &newline_len); + if (!nl) { + return 1; + } + + str = nl + newline_len; + copy = (char *) nl + newline_len; + newline_count++; + } else { + nl = str; + } + + /* <= intentional */ + while (str <= end && nl) { + size_t skip; + nl = next_newline(str, end, &newline_len); + if (!nl && newline_at_end) { + nl = end; + } + + /* Try to skip indentation */ + for (skip = 0; skip < indentation; skip++, str++) { + if (str == nl) { + /* Don't require full indentation on whitespace-only lines */ + break; + } + + if (str == end || (*str != ' ' && *str != '\t')) { + CG(zend_lineno) += newline_count; + zend_throw_exception_ex(zend_ce_parse_error, 0, + "Invalid body indentation level (expecting an indentation level of at least %d)", indentation); + goto error; + } + + if ((!using_spaces && *str == ' ') || (using_spaces && *str == '\t')) { + CG(zend_lineno) += newline_count; + zend_throw_exception(zend_ce_parse_error, + "Invalid indentation - tabs and spaces cannot be mixed", 0); + goto error; + } + } + + if (str == end) { + break; + } + + size_t len = nl ? (nl - str + newline_len) : (end - str); + memmove(copy, str, len); + str += len; + copy += len; + newline_count++; + } + + *copy = '\0'; + Z_STRLEN_P(zendlval) = copy - Z_STRVAL_P(zendlval); + return 1; + +error: + zval_ptr_dtor_str(zendlval); + ZVAL_UNDEF(zendlval); + + return 0; +} + +static void copy_heredoc_label_stack(void *void_heredoc_label) +{ + zend_heredoc_label *heredoc_label = void_heredoc_label; + zend_heredoc_label *new_heredoc_label = emalloc(sizeof(zend_heredoc_label)); + + *new_heredoc_label = *heredoc_label; + new_heredoc_label->label = estrndup(heredoc_label->label, heredoc_label->length); + + zend_ptr_stack_push(&SCNG(heredoc_label_stack), (void *) new_heredoc_label); +} + +#define PARSER_MODE() \ + EXPECTED(elem != NULL) + +#define RETURN_TOKEN(_token) do { \ + token = _token; \ + goto emit_token; \ + } while (0) + +#define RETURN_TOKEN_WITH_VAL(_token) do { \ + token = _token; \ + goto emit_token_with_val; \ + } while (0) + +#define RETURN_TOKEN_WITH_STR(_token, _offset) do { \ + token = _token; \ + offset = _offset; \ + goto emit_token_with_str; \ + } while (0) + +#define RETURN_OR_SKIP_TOKEN(_token) do { \ + token = _token; \ + if (PARSER_MODE()) { \ + goto skip_token; \ + } \ + goto emit_token; \ + } while (0) + +int ZEND_FASTCALL lex_scan(zval *zendlval, zend_parser_stack_elem *elem) +{ +int token; +int offset; +int start_line = CG(zend_lineno); + + ZVAL_UNDEF(zendlval); +restart: + SCNG(yy_text) = YYCURSOR; + + +#line 1259 "Zend/zend_language_scanner.c" +{ + YYCTYPE yych; + unsigned int yyaccept = 0; + if (YYGETCONDITION() < 5) { + if (YYGETCONDITION() < 2) { + if (YYGETCONDITION() < 1) { + goto yyc_ST_IN_SCRIPTING; + } else { + goto yyc_ST_LOOKING_FOR_PROPERTY; + } + } else { + if (YYGETCONDITION() < 3) { + goto yyc_ST_BACKQUOTE; + } else { + if (YYGETCONDITION() < 4) { + goto yyc_ST_DOUBLE_QUOTES; + } else { + goto yyc_ST_HEREDOC; + } + } + } + } else { + if (YYGETCONDITION() < 8) { + if (YYGETCONDITION() < 6) { + goto yyc_ST_LOOKING_FOR_VARNAME; + } else { + if (YYGETCONDITION() < 7) { + goto yyc_ST_VAR_OFFSET; + } else { + goto yyc_SHEBANG; + } + } + } else { + if (YYGETCONDITION() < 9) { + goto yyc_INITIAL; + } else { + if (YYGETCONDITION() < 10) { + goto yyc_ST_END_HEREDOC; + } else { + goto yyc_ST_NOWDOC; + } + } + } + } +/* *********************************** */ +yyc_ST_IN_SCRIPTING: + { + static const unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 4, 0, 0, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 36, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 216, 216, 152, 152, 152, 152, 152, 152, + 152, 152, 0, 0, 0, 0, 0, 0, + 0, 144, 144, 144, 144, 144, 144, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 0, 0, 0, 0, 16, + 0, 144, 144, 144, 144, 144, 144, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 0, 0, 0, 0, 0, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + }; + YYDEBUG(1, *YYCURSOR); + YYFILL(16); + yych = *YYCURSOR; + if (yybm[0+yych] & 4) { + goto yy5; + } + switch (yych) { + case 0x00: + case 0x01: + case 0x02: + case 0x03: + case 0x04: + case 0x05: + case 0x06: + case 0x07: + case 0x08: + case '\t': + case '\n': + case '\v': + case '\f': + case '\r': + case 0x0E: + case 0x0F: + case 0x10: + case 0x11: + case 0x12: + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + case 0x18: + case 0x19: + case 0x1A: + case 0x1B: + case 0x1C: + case 0x1D: + case 0x1E: + case 0x1F: + case 0x7F: goto yy3; + case ' ': + case '!': goto yy8; + case '"': goto yy10; + case '#': goto yy12; + case '$': goto yy14; + case '%': goto yy15; + case '&': goto yy16; + case '\'': goto yy17; + case '(': goto yy19; + case ')': + case ',': + case ';': + case '@': + case '[': + case ']': + case '~': goto yy20; + case '*': goto yy21; + case '+': goto yy22; + case '-': goto yy23; + case '.': goto yy24; + case '/': goto yy25; + case '0': goto yy26; + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy28; + case ':': goto yy30; + case '<': goto yy31; + case '=': goto yy32; + case '>': goto yy33; + case '?': goto yy34; + case 'A': + case 'a': goto yy35; + case 'B': + case 'b': goto yy37; + case 'C': + case 'c': goto yy38; + case 'D': + case 'd': goto yy39; + case 'E': + case 'e': goto yy40; + case 'F': + case 'f': goto yy41; + case 'G': + case 'g': goto yy42; + case 'I': + case 'i': goto yy45; + case 'L': + case 'l': goto yy46; + case 'N': + case 'n': goto yy47; + case 'O': + case 'o': goto yy48; + case 'P': + case 'p': goto yy49; + case 'R': + case 'r': goto yy50; + case 'S': + case 's': goto yy51; + case 'T': + case 't': goto yy52; + case 'U': + case 'u': goto yy53; + case 'V': + case 'v': goto yy54; + case 'W': + case 'w': goto yy55; + case 'X': + case 'x': goto yy56; + case 'Y': + case 'y': goto yy57; + case '\\': goto yy58; + case '^': goto yy60; + case '_': goto yy61; + case '`': goto yy62; + case '{': goto yy64; + case '|': goto yy66; + case '}': goto yy67; + default: goto yy43; + } +yy3: + YYDEBUG(3, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(4, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2862 "Zend/zend_language_scanner.l" + { + if (YYCURSOR > YYLIMIT) { + RETURN_TOKEN(END); + } + + if (!SCNG(heredoc_scan_ahead)) { + zend_error(E_COMPILE_WARNING, "Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); + } + if (PARSER_MODE()) { + goto restart; + } else { + RETURN_TOKEN(T_BAD_CHARACTER); + } +} +#line 1486 "Zend/zend_language_scanner.c" +yy5: + YYDEBUG(5, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(6, *YYCURSOR); + if (yybm[0+yych] & 4) { + goto yy5; + } + YYDEBUG(7, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1442 "Zend/zend_language_scanner.l" + { + goto return_whitespace; +} +#line 1502 "Zend/zend_language_scanner.c" +yy8: + YYDEBUG(8, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '=') goto yy69; +yy9: + YYDEBUG(9, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1736 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(yytext[0]); +} +#line 1514 "Zend/zend_language_scanner.c" +yy10: + YYDEBUG(10, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(11, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2318 "Zend/zend_language_scanner.l" + { + int bprefix = (yytext[0] != '"') ? 1 : 0; + + while (YYCURSOR < YYLIMIT) { + switch (*YYCURSOR++) { + case '"': + yyleng = YYCURSOR - SCNG(yy_text); + if (EXPECTED(zend_scan_escape_string(zendlval, yytext+bprefix+1, yyleng-bprefix-2, '"') == SUCCESS) + || !PARSER_MODE()) { + RETURN_TOKEN_WITH_VAL(T_CONSTANT_ENCAPSED_STRING); + } else { + RETURN_TOKEN(T_ERROR); + } + case '$': + if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') { + break; + } + continue; + case '{': + if (*YYCURSOR == '$') { + break; + } + continue; + case '\\': + if (YYCURSOR < YYLIMIT) { + YYCURSOR++; + } + /* fall through */ + default: + continue; + } + + YYCURSOR--; + break; + } + + /* Remember how much was scanned to save rescanning */ + SET_DOUBLE_QUOTES_SCANNED_LENGTH(YYCURSOR - SCNG(yy_text) - yyleng); + + YYCURSOR = SCNG(yy_text) + yyleng; + + BEGIN(ST_DOUBLE_QUOTES); + RETURN_TOKEN('"'); +} +#line 1565 "Zend/zend_language_scanner.c" +yy12: + YYDEBUG(12, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(13, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2149 "Zend/zend_language_scanner.l" + { + while (YYCURSOR < YYLIMIT) { + switch (*YYCURSOR++) { + case '\r': + if (*YYCURSOR == '\n') { + YYCURSOR++; + } + /* fall through */ + case '\n': + CG(zend_lineno)++; + break; + case '?': + if (*YYCURSOR == '>') { + YYCURSOR--; + break; + } + /* fall through */ + default: + continue; + } + + break; + } + + yyleng = YYCURSOR - SCNG(yy_text); + RETURN_OR_SKIP_TOKEN(T_COMMENT); +} +#line 1599 "Zend/zend_language_scanner.c" +yy14: + YYDEBUG(14, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '_') { + if (yych <= '@') goto yy9; + if (yych <= 'Z') goto yy71; + if (yych <= '^') goto yy9; + goto yy71; + } else { + if (yych <= '`') goto yy9; + if (yych <= 'z') goto yy71; + if (yych <= 0x7F) goto yy9; + goto yy71; + } +yy15: + YYDEBUG(15, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '=') goto yy74; + goto yy9; +yy16: + YYDEBUG(16, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '&') goto yy76; + if (yych == '=') goto yy78; + goto yy9; +yy17: + YYDEBUG(17, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(18, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2222 "Zend/zend_language_scanner.l" + { + register char *s, *t; + char *end; + int bprefix = (yytext[0] != '\'') ? 1 : 0; + + while (1) { + if (YYCURSOR < YYLIMIT) { + if (*YYCURSOR == '\'') { + YYCURSOR++; + yyleng = YYCURSOR - SCNG(yy_text); + + break; + } else if (*YYCURSOR++ == '\\' && YYCURSOR < YYLIMIT) { + YYCURSOR++; + } + } else { + yyleng = YYLIMIT - SCNG(yy_text); + + /* Unclosed single quotes; treat similar to double quotes, but without a separate token + * for ' (unrecognized by parser), instead of old flex fallback to "Unexpected character..." + * rule, which continued in ST_IN_SCRIPTING state after the quote */ + ZVAL_NULL(zendlval); + RETURN_TOKEN_WITH_VAL(T_ENCAPSED_AND_WHITESPACE); + } + } + + if (yyleng-bprefix-2 <= 1) { + if (yyleng-bprefix-2 < 1) { + ZVAL_EMPTY_STRING(zendlval); + } else { + zend_uchar c = (zend_uchar)*(yytext+bprefix+1); + if (c == '\n' || c == '\r') { + CG(zend_lineno)++; + } + ZVAL_INTERNED_STR(zendlval, ZSTR_CHAR(c)); + } + goto skip_escape_conversion; + } + ZVAL_STRINGL(zendlval, yytext+bprefix+1, yyleng-bprefix-2); + + /* convert escape sequences */ + s = Z_STRVAL_P(zendlval); + end = s+Z_STRLEN_P(zendlval); + while (1) { + if (UNEXPECTED(*s=='\\')) { + break; + } + if (*s == '\n' || (*s == '\r' && (*(s+1) != '\n'))) { + CG(zend_lineno)++; + } + s++; + if (s == end) { + goto skip_escape_conversion; + } + } + + t = s; + while (s<end) { + if (*s=='\\') { + s++; + if (*s == '\\' || *s == '\'') { + *t++ = *s; + } else { + *t++ = '\\'; + *t++ = *s; + } + } else { + *t++ = *s; + } + if (*s == '\n' || (*s == '\r' && (*(s+1) != '\n'))) { + CG(zend_lineno)++; + } + s++; + } + *t = 0; + Z_STRLEN_P(zendlval) = t - Z_STRVAL_P(zendlval); + +skip_escape_conversion: + if (SCNG(output_filter)) { + size_t sz = 0; + char *str = NULL; + zend_string *new_str; + s = Z_STRVAL_P(zendlval); + // TODO: avoid reallocation ??? + SCNG(output_filter)((unsigned char **)&str, &sz, (unsigned char *)s, (size_t)Z_STRLEN_P(zendlval)); + new_str = zend_string_init(str, sz, 0); + if (str != s) { + efree(str); + } + zend_string_release_ex(Z_STR_P(zendlval), 0); + ZVAL_STR(zendlval, new_str); + } + RETURN_TOKEN_WITH_VAL(T_CONSTANT_ENCAPSED_STRING); +} +#line 1725 "Zend/zend_language_scanner.c" +yy19: + YYDEBUG(19, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= 'S') { + if (yych <= 'D') { + if (yych <= ' ') { + if (yych == '\t') goto yy81; + if (yych <= 0x1F) goto yy9; + goto yy81; + } else { + if (yych <= '@') goto yy9; + if (yych == 'C') goto yy9; + goto yy81; + } + } else { + if (yych <= 'I') { + if (yych == 'F') goto yy81; + if (yych <= 'H') goto yy9; + goto yy81; + } else { + if (yych == 'O') goto yy81; + if (yych <= 'Q') goto yy9; + goto yy81; + } + } + } else { + if (yych <= 'f') { + if (yych <= 'b') { + if (yych == 'U') goto yy81; + if (yych <= '`') goto yy9; + goto yy81; + } else { + if (yych == 'd') goto yy81; + if (yych <= 'e') goto yy9; + goto yy81; + } + } else { + if (yych <= 'o') { + if (yych == 'i') goto yy81; + if (yych <= 'n') goto yy9; + goto yy81; + } else { + if (yych <= 's') { + if (yych <= 'q') goto yy9; + goto yy81; + } else { + if (yych == 'u') goto yy81; + goto yy9; + } + } + } + } +yy20: + YYDEBUG(20, *YYCURSOR); + ++YYCURSOR; + goto yy9; +yy21: + YYDEBUG(21, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '*') goto yy92; + if (yych == '=') goto yy94; + goto yy9; +yy22: + YYDEBUG(22, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '+') goto yy96; + if (yych == '=') goto yy98; + goto yy9; +yy23: + YYDEBUG(23, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '<') { + if (yych == '-') goto yy100; + goto yy9; + } else { + if (yych <= '=') goto yy102; + if (yych <= '>') goto yy104; + goto yy9; + } +yy24: + YYDEBUG(24, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '/') { + if (yych == '.') goto yy106; + goto yy9; + } else { + if (yych <= '9') goto yy107; + if (yych == '=') goto yy110; + goto yy9; + } +yy25: + YYDEBUG(25, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '.') { + if (yych == '*') goto yy112; + goto yy9; + } else { + if (yych <= '/') goto yy12; + if (yych == '=') goto yy114; + goto yy9; + } +yy26: + YYDEBUG(26, *YYCURSOR); + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= 'X') { + if (yych == 'B') goto yy117; + if (yych <= 'W') goto yy29; + goto yy119; + } else { + if (yych <= 'b') { + if (yych <= 'a') goto yy29; + goto yy117; + } else { + if (yych == 'x') goto yy119; + goto yy29; + } + } +yy27: + YYDEBUG(27, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1819 "Zend/zend_language_scanner.l" + { + size_t len = yyleng; + char *end, *lnum = yytext; + zend_bool is_octal = lnum[0] == '0'; + zend_bool contains_underscores = (memchr(lnum, '_', len) != NULL); + + if (contains_underscores) { + lnum = estrndup(lnum, len); + strip_underscores(lnum, &len); + } + + /* Digits 8 and 9 are illegal in octal literals. */ + if (is_octal) { + size_t i; + for (i = 0; i < len; i++) { + if (lnum[i] == '8' || lnum[i] == '9') { + zend_throw_exception(zend_ce_parse_error, "Invalid numeric literal", 0); + if (PARSER_MODE()) { + if (contains_underscores) { + efree(lnum); + } + ZVAL_UNDEF(zendlval); + RETURN_TOKEN(T_ERROR); + } + + /* Continue in order to determine if this is T_LNUMBER or T_DNUMBER. */ + len = i; + break; + } + } + } + + + if (len < MAX_LENGTH_OF_LONG - 1) { /* Won't overflow */ + errno = 0; + /* base must be passed explicitly for correct parse error on Windows */ + ZVAL_LONG(zendlval, ZEND_STRTOL(lnum, &end, is_octal ? 8 : 10)); + ZEND_ASSERT(end == lnum + len); + } else { + errno = 0; + ZVAL_LONG(zendlval, ZEND_STRTOL(lnum, &end, 0)); + if (errno == ERANGE) { /* Overflow */ + errno = 0; + if (is_octal) { /* octal overflow */ + ZVAL_DOUBLE(zendlval, zend_oct_strtod(lnum, (const char **)&end)); + } else { + ZVAL_DOUBLE(zendlval, zend_strtod(lnum, (const char **)&end)); + } + ZEND_ASSERT(end == lnum + len); + if (contains_underscores) { + efree(lnum); + } + RETURN_TOKEN_WITH_VAL(T_DNUMBER); + } + ZEND_ASSERT(end == lnum + len); + } + ZEND_ASSERT(!errno); + if (contains_underscores) { + efree(lnum); + } + RETURN_TOKEN_WITH_VAL(T_LNUMBER); +} +#line 1912 "Zend/zend_language_scanner.c" +yy28: + YYDEBUG(28, *YYCURSOR); + yyaccept = 1; + YYMARKER = ++YYCURSOR; + YYFILL(3); + yych = *YYCURSOR; +yy29: + YYDEBUG(29, *YYCURSOR); + if (yybm[0+yych] & 8) { + goto yy28; + } + if (yych <= 'E') { + if (yych == '.') goto yy116; + if (yych <= 'D') goto yy27; + goto yy118; + } else { + if (yych <= '_') { + if (yych <= '^') goto yy27; + goto yy120; + } else { + if (yych == 'e') goto yy118; + goto yy27; + } + } +yy30: + YYDEBUG(30, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == ':') goto yy121; + goto yy9; +yy31: + YYDEBUG(31, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= ';') goto yy9; + if (yych <= '<') goto yy123; + if (yych <= '=') goto yy125; + if (yych <= '>') goto yy127; + goto yy9; +yy32: + YYDEBUG(32, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '<') goto yy9; + if (yych <= '=') goto yy128; + if (yych <= '>') goto yy130; + goto yy9; +yy33: + YYDEBUG(33, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '<') goto yy9; + if (yych <= '=') goto yy132; + if (yych <= '>') goto yy134; + goto yy9; +yy34: + YYDEBUG(34, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '=') goto yy9; + if (yych <= '>') goto yy136; + if (yych <= '?') goto yy138; + goto yy9; +yy35: + YYDEBUG(35, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'S') { + if (yych <= 'M') { + if (yych == 'B') goto yy140; + goto yy44; + } else { + if (yych <= 'N') goto yy141; + if (yych <= 'Q') goto yy44; + if (yych <= 'R') goto yy142; + goto yy143; + } + } else { + if (yych <= 'n') { + if (yych == 'b') goto yy140; + if (yych <= 'm') goto yy44; + goto yy141; + } else { + if (yych <= 'q') goto yy44; + if (yych <= 'r') goto yy142; + if (yych <= 's') goto yy143; + goto yy44; + } + } +yy36: + YYDEBUG(36, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2144 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN_WITH_STR(T_STRING, 0); +} +#line 2003 "Zend/zend_language_scanner.c" +yy37: + YYDEBUG(37, *YYCURSOR); + yyaccept = 2; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= ';') { + if (yych <= '"') { + if (yych <= '!') goto yy44; + goto yy10; + } else { + if (yych == '\'') goto yy17; + goto yy44; + } + } else { + if (yych <= 'R') { + if (yych <= '<') goto yy145; + if (yych <= 'Q') goto yy44; + goto yy146; + } else { + if (yych == 'r') goto yy146; + goto yy44; + } + } +yy38: + YYDEBUG(38, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'O') { + if (yych <= 'K') { + if (yych == 'A') goto yy147; + goto yy44; + } else { + if (yych <= 'L') goto yy148; + if (yych <= 'N') goto yy44; + goto yy149; + } + } else { + if (yych <= 'k') { + if (yych == 'a') goto yy147; + goto yy44; + } else { + if (yych <= 'l') goto yy148; + if (yych == 'o') goto yy149; + goto yy44; + } + } +yy39: + YYDEBUG(39, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'O') { + if (yych <= 'H') { + if (yych == 'E') goto yy150; + goto yy44; + } else { + if (yych <= 'I') goto yy151; + if (yych <= 'N') goto yy44; + goto yy152; + } + } else { + if (yych <= 'h') { + if (yych == 'e') goto yy150; + goto yy44; + } else { + if (yych <= 'i') goto yy151; + if (yych == 'o') goto yy152; + goto yy44; + } + } +yy40: + YYDEBUG(40, *YYCURSOR); + yych = *++YYCURSOR; + switch (yych) { + case 'C': + case 'c': goto yy154; + case 'L': + case 'l': goto yy155; + case 'M': + case 'm': goto yy156; + case 'N': + case 'n': goto yy157; + case 'V': + case 'v': goto yy158; + case 'X': + case 'x': goto yy159; + default: goto yy44; + } +yy41: + YYDEBUG(41, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'U') { + if (yych <= 'M') { + if (yych == 'I') goto yy160; + goto yy44; + } else { + if (yych <= 'N') goto yy161; + if (yych <= 'O') goto yy163; + if (yych <= 'T') goto yy44; + goto yy164; + } + } else { + if (yych <= 'n') { + if (yych == 'i') goto yy160; + if (yych <= 'm') goto yy44; + goto yy161; + } else { + if (yych <= 'o') goto yy163; + if (yych == 'u') goto yy164; + goto yy44; + } + } +yy42: + YYDEBUG(42, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'O') { + if (yych == 'L') goto yy165; + if (yych <= 'N') goto yy44; + goto yy166; + } else { + if (yych <= 'l') { + if (yych <= 'k') goto yy44; + goto yy165; + } else { + if (yych == 'o') goto yy166; + goto yy44; + } + } +yy43: + YYDEBUG(43, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; +yy44: + YYDEBUG(44, *YYCURSOR); + if (yybm[0+yych] & 16) { + goto yy43; + } + goto yy36; +yy45: + YYDEBUG(45, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'S') { + if (yych <= 'L') { + if (yych == 'F') goto yy167; + goto yy44; + } else { + if (yych <= 'M') goto yy169; + if (yych <= 'N') goto yy170; + if (yych <= 'R') goto yy44; + goto yy171; + } + } else { + if (yych <= 'm') { + if (yych == 'f') goto yy167; + if (yych <= 'l') goto yy44; + goto yy169; + } else { + if (yych <= 'n') goto yy170; + if (yych == 's') goto yy171; + goto yy44; + } + } +yy46: + YYDEBUG(46, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'I') goto yy172; + if (yych == 'i') goto yy172; + goto yy44; +yy47: + YYDEBUG(47, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'E') { + if (yych == 'A') goto yy173; + if (yych <= 'D') goto yy44; + goto yy174; + } else { + if (yych <= 'a') { + if (yych <= '`') goto yy44; + goto yy173; + } else { + if (yych == 'e') goto yy174; + goto yy44; + } + } +yy48: + YYDEBUG(48, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy175; + if (yych == 'r') goto yy175; + goto yy44; +yy49: + YYDEBUG(49, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'U') { + if (yych == 'R') goto yy177; + if (yych <= 'T') goto yy44; + goto yy178; + } else { + if (yych <= 'r') { + if (yych <= 'q') goto yy44; + goto yy177; + } else { + if (yych == 'u') goto yy178; + goto yy44; + } + } +yy50: + YYDEBUG(50, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy179; + if (yych == 'e') goto yy179; + goto yy44; +yy51: + YYDEBUG(51, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'W') { + if (yych == 'T') goto yy180; + if (yych <= 'V') goto yy44; + goto yy181; + } else { + if (yych <= 't') { + if (yych <= 's') goto yy44; + goto yy180; + } else { + if (yych == 'w') goto yy181; + goto yy44; + } + } +yy52: + YYDEBUG(52, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'R') { + if (yych == 'H') goto yy182; + if (yych <= 'Q') goto yy44; + goto yy183; + } else { + if (yych <= 'h') { + if (yych <= 'g') goto yy44; + goto yy182; + } else { + if (yych == 'r') goto yy183; + goto yy44; + } + } +yy53: + YYDEBUG(53, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'S') { + if (yych == 'N') goto yy184; + if (yych <= 'R') goto yy44; + goto yy185; + } else { + if (yych <= 'n') { + if (yych <= 'm') goto yy44; + goto yy184; + } else { + if (yych == 's') goto yy185; + goto yy44; + } + } +yy54: + YYDEBUG(54, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy186; + if (yych == 'a') goto yy186; + goto yy44; +yy55: + YYDEBUG(55, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'H') goto yy187; + if (yych == 'h') goto yy187; + goto yy44; +yy56: + YYDEBUG(56, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'O') goto yy188; + if (yych == 'o') goto yy188; + goto yy44; +yy57: + YYDEBUG(57, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'I') goto yy189; + if (yych == 'i') goto yy189; + goto yy44; +yy58: + YYDEBUG(58, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(59, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1465 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_NS_SEPARATOR); +} +#line 2294 "Zend/zend_language_scanner.c" +yy60: + YYDEBUG(60, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '=') goto yy190; + goto yy9; +yy61: + YYDEBUG(61, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '_') goto yy192; + goto yy44; +yy62: + YYDEBUG(62, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(63, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2509 "Zend/zend_language_scanner.l" + { + BEGIN(ST_BACKQUOTE); + RETURN_TOKEN('`'); +} +#line 2315 "Zend/zend_language_scanner.c" +yy64: + YYDEBUG(64, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(65, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1741 "Zend/zend_language_scanner.l" + { + yy_push_state(ST_IN_SCRIPTING); + RETURN_TOKEN('{'); +} +#line 2326 "Zend/zend_language_scanner.c" +yy66: + YYDEBUG(66, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '=') goto yy193; + if (yych == '|') goto yy195; + goto yy9; +yy67: + YYDEBUG(67, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(68, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1753 "Zend/zend_language_scanner.l" + { + RESET_DOC_COMMENT(); + if (!zend_stack_is_empty(&SCNG(state_stack))) { + yy_pop_state(); + } + RETURN_TOKEN('}'); +} +#line 2346 "Zend/zend_language_scanner.c" +yy69: + YYDEBUG(69, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '=') goto yy197; +yy70: + YYDEBUG(70, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1636 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_IS_NOT_EQUAL); +} +#line 2358 "Zend/zend_language_scanner.c" +yy71: + YYDEBUG(71, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(72, *YYCURSOR); + if (yych <= '^') { + if (yych <= '9') { + if (yych >= '0') goto yy71; + } else { + if (yych <= '@') goto yy73; + if (yych <= 'Z') goto yy71; + } + } else { + if (yych <= '`') { + if (yych <= '_') goto yy71; + } else { + if (yych <= 'z') goto yy71; + if (yych >= 0x80) goto yy71; + } + } +yy73: + YYDEBUG(73, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2122 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN_WITH_STR(T_VARIABLE, 1); +} +#line 2387 "Zend/zend_language_scanner.c" +yy74: + YYDEBUG(74, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(75, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1680 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_MOD_EQUAL); +} +#line 2397 "Zend/zend_language_scanner.c" +yy76: + YYDEBUG(76, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(77, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1712 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_BOOLEAN_AND); +} +#line 2407 "Zend/zend_language_scanner.c" +yy78: + YYDEBUG(78, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(79, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1692 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_AND_EQUAL); +} +#line 2417 "Zend/zend_language_scanner.c" +yy80: + YYDEBUG(80, *YYCURSOR); + ++YYCURSOR; + YYFILL(7); + yych = *YYCURSOR; +yy81: + YYDEBUG(81, *YYCURSOR); + if (yybm[0+yych] & 32) { + goto yy80; + } + switch (yych) { + case 'A': + case 'a': goto yy83; + case 'B': + case 'b': goto yy84; + case 'D': + case 'd': goto yy85; + case 'F': + case 'f': goto yy86; + case 'I': + case 'i': goto yy87; + case 'O': + case 'o': goto yy88; + case 'R': + case 'r': goto yy89; + case 'S': + case 's': goto yy90; + case 'U': + case 'u': goto yy91; + default: goto yy82; + } +yy82: + YYDEBUG(82, *YYCURSOR); + YYCURSOR = YYMARKER; + if (yyaccept <= 4) { + if (yyaccept <= 2) { + if (yyaccept <= 1) { + if (yyaccept == 0) { + goto yy9; + } else { + goto yy27; + } + } else { + goto yy36; + } + } else { + if (yyaccept == 3) { + goto yy109; + } else { + goto yy113; + } + } + } else { + if (yyaccept <= 6) { + if (yyaccept == 5) { + goto yy124; + } else { + goto yy217; + } + } else { + if (yyaccept == 7) { + goto yy223; + } else { + goto yy464; + } + } + } +yy83: + YYDEBUG(83, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy199; + if (yych == 'r') goto yy199; + goto yy82; +yy84: + YYDEBUG(84, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'O') { + if (yych == 'I') goto yy200; + if (yych <= 'N') goto yy82; + goto yy201; + } else { + if (yych <= 'i') { + if (yych <= 'h') goto yy82; + goto yy200; + } else { + if (yych == 'o') goto yy201; + goto yy82; + } + } +yy85: + YYDEBUG(85, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'O') goto yy202; + if (yych == 'o') goto yy202; + goto yy82; +yy86: + YYDEBUG(86, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy203; + if (yych == 'l') goto yy203; + goto yy82; +yy87: + YYDEBUG(87, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'N') goto yy204; + if (yych == 'n') goto yy204; + goto yy82; +yy88: + YYDEBUG(88, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'B') goto yy205; + if (yych == 'b') goto yy205; + goto yy82; +yy89: + YYDEBUG(89, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy206; + if (yych == 'e') goto yy206; + goto yy82; +yy90: + YYDEBUG(90, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy207; + if (yych == 't') goto yy207; + goto yy82; +yy91: + YYDEBUG(91, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'N') goto yy208; + if (yych == 'n') goto yy208; + goto yy82; +yy92: + YYDEBUG(92, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '=') goto yy209; + YYDEBUG(93, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1664 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_POW); +} +#line 2559 "Zend/zend_language_scanner.c" +yy94: + YYDEBUG(94, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(95, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1660 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_MUL_EQUAL); +} +#line 2569 "Zend/zend_language_scanner.c" +yy96: + YYDEBUG(96, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(97, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1616 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_INC); +} +#line 2579 "Zend/zend_language_scanner.c" +yy98: + YYDEBUG(98, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(99, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1652 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_PLUS_EQUAL); +} +#line 2589 "Zend/zend_language_scanner.c" +yy100: + YYDEBUG(100, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(101, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1620 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_DEC); +} +#line 2599 "Zend/zend_language_scanner.c" +yy102: + YYDEBUG(102, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(103, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1656 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_MINUS_EQUAL); +} +#line 2609 "Zend/zend_language_scanner.c" +yy104: + YYDEBUG(104, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(105, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1437 "Zend/zend_language_scanner.l" + { + yy_push_state(ST_LOOKING_FOR_PROPERTY); + RETURN_TOKEN(T_OBJECT_OPERATOR); +} +#line 2620 "Zend/zend_language_scanner.c" +yy106: + YYDEBUG(106, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '.') goto yy211; + goto yy82; +yy107: + YYDEBUG(107, *YYCURSOR); + yyaccept = 3; + YYMARKER = ++YYCURSOR; + YYFILL(2); + yych = *YYCURSOR; +yy108: + YYDEBUG(108, *YYCURSOR); + if (yych <= 'E') { + if (yych <= '/') goto yy109; + if (yych <= '9') goto yy107; + if (yych >= 'E') goto yy118; + } else { + if (yych <= '_') { + if (yych >= '_') goto yy213; + } else { + if (yych == 'e') goto yy118; + } + } +yy109: + YYDEBUG(109, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1949 "Zend/zend_language_scanner.l" + { + const char *end; + size_t len = yyleng; + char *dnum = yytext; + zend_bool contains_underscores = (memchr(dnum, '_', len) != NULL); + + if (contains_underscores) { + dnum = estrndup(dnum, len); + strip_underscores(dnum, &len); + } + + ZVAL_DOUBLE(zendlval, zend_strtod(dnum, &end)); + /* errno isn't checked since we allow HUGE_VAL/INF overflow */ + ZEND_ASSERT(end == dnum + len); + if (contains_underscores) { + efree(dnum); + } + RETURN_TOKEN_WITH_VAL(T_DNUMBER); +} +#line 2668 "Zend/zend_language_scanner.c" +yy110: + YYDEBUG(110, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(111, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1676 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_CONCAT_EQUAL); +} +#line 2678 "Zend/zend_language_scanner.c" +yy112: + YYDEBUG(112, *YYCURSOR); + yyaccept = 4; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == '*') goto yy214; +yy113: + YYDEBUG(113, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2177 "Zend/zend_language_scanner.l" + { + int doc_com; + + if (yyleng > 2) { + doc_com = 1; + RESET_DOC_COMMENT(); + } else { + doc_com = 0; + } + + while (YYCURSOR < YYLIMIT) { + if (*YYCURSOR++ == '*' && *YYCURSOR == '/') { + break; + } + } + + if (YYCURSOR < YYLIMIT) { + YYCURSOR++; + } else if (!SCNG(heredoc_scan_ahead)) { + zend_error(E_COMPILE_WARNING, "Unterminated comment starting line %d", CG(zend_lineno)); + } + + yyleng = YYCURSOR - SCNG(yy_text); + HANDLE_NEWLINES(yytext, yyleng); + + if (doc_com) { + CG(doc_comment) = zend_string_init(yytext, yyleng, 0); + RETURN_OR_SKIP_TOKEN(T_DOC_COMMENT); + } + + RETURN_OR_SKIP_TOKEN(T_COMMENT); +} +#line 2720 "Zend/zend_language_scanner.c" +yy114: + YYDEBUG(114, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(115, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1672 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_DIV_EQUAL); +} +#line 2730 "Zend/zend_language_scanner.c" +yy116: + YYDEBUG(116, *YYCURSOR); + yyaccept = 3; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == '_') goto yy109; + goto yy108; +yy117: + YYDEBUG(117, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + if (yybm[0+yych] & 64) { + goto yy215; + } + goto yy82; +yy118: + YYDEBUG(118, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= ',') { + if (yych == '+') goto yy218; + goto yy82; + } else { + if (yych <= '-') goto yy218; + if (yych <= '/') goto yy82; + if (yych <= '9') goto yy219; + goto yy82; + } +yy119: + YYDEBUG(119, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + if (yybm[0+yych] & 128) { + goto yy221; + } + goto yy82; +yy120: + YYDEBUG(120, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + if (yybm[0+yych] & 8) { + goto yy28; + } + goto yy82; +yy121: + YYDEBUG(121, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(122, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1461 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_PAAMAYIM_NEKUDOTAYIM); +} +#line 2785 "Zend/zend_language_scanner.c" +yy123: + YYDEBUG(123, *YYCURSOR); + yyaccept = 5; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= ';') goto yy124; + if (yych <= '<') goto yy224; + if (yych <= '=') goto yy226; +yy124: + YYDEBUG(124, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1728 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_SL); +} +#line 2800 "Zend/zend_language_scanner.c" +yy125: + YYDEBUG(125, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '>') goto yy228; + YYDEBUG(126, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1644 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_IS_SMALLER_OR_EQUAL); +} +#line 2811 "Zend/zend_language_scanner.c" +yy127: + YYDEBUG(127, *YYCURSOR); + ++YYCURSOR; + goto yy70; +yy128: + YYDEBUG(128, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '=') goto yy230; + YYDEBUG(129, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1632 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_IS_EQUAL); +} +#line 2826 "Zend/zend_language_scanner.c" +yy130: + YYDEBUG(130, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(131, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1600 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_DOUBLE_ARROW); +} +#line 2836 "Zend/zend_language_scanner.c" +yy132: + YYDEBUG(132, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(133, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1648 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_IS_GREATER_OR_EQUAL); +} +#line 2846 "Zend/zend_language_scanner.c" +yy134: + YYDEBUG(134, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '=') goto yy232; + YYDEBUG(135, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1732 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_SR); +} +#line 2857 "Zend/zend_language_scanner.c" +yy136: + YYDEBUG(136, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '\n') goto yy234; + if (yych == '\r') goto yy235; +yy137: + YYDEBUG(137, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2210 "Zend/zend_language_scanner.l" + { + BEGIN(INITIAL); + if (yytext[yyleng-1] != '>') { + CG(increment_lineno) = 1; + } + if (PARSER_MODE()) { + RETURN_TOKEN(';'); /* implicit ';' at php-end tag */ + } + RETURN_TOKEN(T_CLOSE_TAG); +} +#line 2877 "Zend/zend_language_scanner.c" +yy138: + YYDEBUG(138, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '=') goto yy236; + YYDEBUG(139, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1473 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_COALESCE); +} +#line 2888 "Zend/zend_language_scanner.c" +yy140: + YYDEBUG(140, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'S') goto yy238; + if (yych == 's') goto yy238; + goto yy44; +yy141: + YYDEBUG(141, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'D') goto yy239; + if (yych == 'd') goto yy239; + goto yy44; +yy142: + YYDEBUG(142, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy241; + if (yych == 'r') goto yy241; + goto yy44; +yy143: + YYDEBUG(143, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(144, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1377 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_AS); +} +#line 2919 "Zend/zend_language_scanner.c" +yy145: + YYDEBUG(145, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '<') goto yy242; + goto yy82; +yy146: + YYDEBUG(146, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy243; + if (yych == 'e') goto yy243; + goto yy44; +yy147: + YYDEBUG(147, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'T') { + if (yych <= 'L') { + if (yych <= 'K') goto yy44; + goto yy244; + } else { + if (yych <= 'R') goto yy44; + if (yych <= 'S') goto yy245; + goto yy246; + } + } else { + if (yych <= 'r') { + if (yych == 'l') goto yy244; + goto yy44; + } else { + if (yych <= 's') goto yy245; + if (yych <= 't') goto yy246; + goto yy44; + } + } +yy148: + YYDEBUG(148, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'O') { + if (yych == 'A') goto yy247; + if (yych <= 'N') goto yy44; + goto yy248; + } else { + if (yych <= 'a') { + if (yych <= '`') goto yy44; + goto yy247; + } else { + if (yych == 'o') goto yy248; + goto yy44; + } + } +yy149: + YYDEBUG(149, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'N') goto yy249; + if (yych == 'n') goto yy249; + goto yy44; +yy150: + YYDEBUG(150, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'F') { + if (yych == 'C') goto yy250; + if (yych <= 'E') goto yy44; + goto yy251; + } else { + if (yych <= 'c') { + if (yych <= 'b') goto yy44; + goto yy250; + } else { + if (yych == 'f') goto yy251; + goto yy44; + } + } +yy151: + YYDEBUG(151, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy252; + if (yych == 'e') goto yy252; + goto yy44; +yy152: + YYDEBUG(152, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(153, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1345 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_DO); +} +#line 3009 "Zend/zend_language_scanner.c" +yy154: + YYDEBUG(154, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'H') goto yy254; + if (yych == 'h') goto yy254; + goto yy44; +yy155: + YYDEBUG(155, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'S') goto yy255; + if (yych == 's') goto yy255; + goto yy44; +yy156: + YYDEBUG(156, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'P') goto yy256; + if (yych == 'p') goto yy256; + goto yy44; +yy157: + YYDEBUG(157, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'D') goto yy257; + if (yych == 'd') goto yy257; + goto yy44; +yy158: + YYDEBUG(158, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy258; + if (yych == 'a') goto yy258; + goto yy44; +yy159: + YYDEBUG(159, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'T') { + if (yych == 'I') goto yy259; + if (yych <= 'S') goto yy44; + goto yy260; + } else { + if (yych <= 'i') { + if (yych <= 'h') goto yy44; + goto yy259; + } else { + if (yych == 't') goto yy260; + goto yy44; + } + } +yy160: + YYDEBUG(160, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'N') goto yy261; + if (yych == 'n') goto yy261; + goto yy44; +yy161: + YYDEBUG(161, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(162, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1279 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_FN); +} +#line 3074 "Zend/zend_language_scanner.c" +yy163: + YYDEBUG(163, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy262; + if (yych == 'r') goto yy262; + goto yy44; +yy164: + YYDEBUG(164, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'N') goto yy264; + if (yych == 'n') goto yy264; + goto yy44; +yy165: + YYDEBUG(165, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'O') goto yy265; + if (yych == 'o') goto yy265; + goto yy44; +yy166: + YYDEBUG(166, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy266; + if (yych == 't') goto yy266; + goto yy44; +yy167: + YYDEBUG(167, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(168, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1321 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_IF); +} +#line 3111 "Zend/zend_language_scanner.c" +yy169: + YYDEBUG(169, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'P') goto yy267; + if (yych == 'p') goto yy267; + goto yy44; +yy170: + YYDEBUG(170, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'T') { + if (yych <= 'C') { + if (yych <= 'B') goto yy44; + goto yy268; + } else { + if (yych <= 'R') goto yy44; + if (yych <= 'S') goto yy269; + goto yy270; + } + } else { + if (yych <= 'r') { + if (yych == 'c') goto yy268; + goto yy44; + } else { + if (yych <= 's') goto yy269; + if (yych <= 't') goto yy270; + goto yy44; + } + } +yy171: + YYDEBUG(171, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'S') goto yy271; + if (yych == 's') goto yy271; + goto yy44; +yy172: + YYDEBUG(172, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'S') goto yy272; + if (yych == 's') goto yy272; + goto yy44; +yy173: + YYDEBUG(173, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'M') goto yy273; + if (yych == 'm') goto yy273; + goto yy44; +yy174: + YYDEBUG(174, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'W') goto yy274; + if (yych == 'w') goto yy274; + goto yy44; +yy175: + YYDEBUG(175, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(176, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1716 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_LOGICAL_OR); +} +#line 3176 "Zend/zend_language_scanner.c" +yy177: + YYDEBUG(177, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'O') { + if (yych == 'I') goto yy276; + if (yych <= 'N') goto yy44; + goto yy277; + } else { + if (yych <= 'i') { + if (yych <= 'h') goto yy44; + goto yy276; + } else { + if (yych == 'o') goto yy277; + goto yy44; + } + } +yy178: + YYDEBUG(178, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'B') goto yy278; + if (yych == 'b') goto yy278; + goto yy44; +yy179: + YYDEBUG(179, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'T') { + if (yych == 'Q') goto yy279; + if (yych <= 'S') goto yy44; + goto yy280; + } else { + if (yych <= 'q') { + if (yych <= 'p') goto yy44; + goto yy279; + } else { + if (yych == 't') goto yy280; + goto yy44; + } + } +yy180: + YYDEBUG(180, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy281; + if (yych == 'a') goto yy281; + goto yy44; +yy181: + YYDEBUG(181, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'I') goto yy282; + if (yych == 'i') goto yy282; + goto yy44; +yy182: + YYDEBUG(182, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy283; + if (yych == 'r') goto yy283; + goto yy44; +yy183: + YYDEBUG(183, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'Y') { + if (yych == 'A') goto yy284; + if (yych <= 'X') goto yy44; + goto yy285; + } else { + if (yych <= 'a') { + if (yych <= '`') goto yy44; + goto yy284; + } else { + if (yych == 'y') goto yy285; + goto yy44; + } + } +yy184: + YYDEBUG(184, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'S') goto yy287; + if (yych == 's') goto yy287; + goto yy44; +yy185: + YYDEBUG(185, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy288; + if (yych == 'e') goto yy288; + goto yy44; +yy186: + YYDEBUG(186, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy290; + if (yych == 'r') goto yy290; + goto yy44; +yy187: + YYDEBUG(187, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'I') goto yy292; + if (yych == 'i') goto yy292; + goto yy44; +yy188: + YYDEBUG(188, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy293; + if (yych == 'r') goto yy293; + goto yy44; +yy189: + YYDEBUG(189, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy295; + if (yych == 'e') goto yy295; + goto yy44; +yy190: + YYDEBUG(190, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(191, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1700 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_XOR_EQUAL); +} +#line 3294 "Zend/zend_language_scanner.c" +yy192: + YYDEBUG(192, *YYCURSOR); + yych = *++YYCURSOR; + switch (yych) { + case 'C': + case 'c': goto yy296; + case 'D': + case 'd': goto yy297; + case 'F': + case 'f': goto yy298; + case 'H': + case 'h': goto yy299; + case 'L': + case 'l': goto yy300; + case 'M': + case 'm': goto yy301; + case 'N': + case 'n': goto yy302; + case 'T': + case 't': goto yy303; + default: goto yy44; + } +yy193: + YYDEBUG(193, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(194, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1696 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_OR_EQUAL); +} +#line 3326 "Zend/zend_language_scanner.c" +yy195: + YYDEBUG(195, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(196, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1708 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_BOOLEAN_OR); +} +#line 3336 "Zend/zend_language_scanner.c" +yy197: + YYDEBUG(197, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(198, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1628 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_IS_NOT_IDENTICAL); +} +#line 3346 "Zend/zend_language_scanner.c" +yy199: + YYDEBUG(199, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy304; + if (yych == 'r') goto yy304; + goto yy82; +yy200: + YYDEBUG(200, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'N') goto yy305; + if (yych == 'n') goto yy305; + goto yy82; +yy201: + YYDEBUG(201, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'O') goto yy306; + if (yych == 'o') goto yy306; + goto yy82; +yy202: + YYDEBUG(202, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'U') goto yy307; + if (yych == 'u') goto yy307; + goto yy82; +yy203: + YYDEBUG(203, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'O') goto yy308; + if (yych == 'o') goto yy308; + goto yy82; +yy204: + YYDEBUG(204, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy309; + if (yych == 't') goto yy309; + goto yy82; +yy205: + YYDEBUG(205, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'J') goto yy310; + if (yych == 'j') goto yy310; + goto yy82; +yy206: + YYDEBUG(206, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy311; + if (yych == 'a') goto yy311; + goto yy82; +yy207: + YYDEBUG(207, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy312; + if (yych == 'r') goto yy312; + goto yy82; +yy208: + YYDEBUG(208, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'S') goto yy313; + if (yych == 's') goto yy313; + goto yy82; +yy209: + YYDEBUG(209, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(210, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1668 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_POW_EQUAL); +} +#line 3416 "Zend/zend_language_scanner.c" +yy211: + YYDEBUG(211, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(212, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1469 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ELLIPSIS); +} +#line 3426 "Zend/zend_language_scanner.c" +yy213: + YYDEBUG(213, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + if (yych <= '/') goto yy82; + if (yych <= '9') goto yy107; + goto yy82; +yy214: + YYDEBUG(214, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '\f') { + if (yych <= 0x08) goto yy82; + if (yych <= '\n') goto yy314; + goto yy82; + } else { + if (yych <= '\r') goto yy314; + if (yych == ' ') goto yy314; + goto yy82; + } +yy215: + YYDEBUG(215, *YYCURSOR); + yyaccept = 6; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(216, *YYCURSOR); + if (yybm[0+yych] & 64) { + goto yy215; + } + if (yych == '_') goto yy117; +yy217: + YYDEBUG(217, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1777 "Zend/zend_language_scanner.l" + { + /* The +/- 2 skips "0b" */ + size_t len = yyleng - 2; + char *end, *bin = yytext + 2; + zend_bool contains_underscores; + + /* Skip any leading 0s */ + while (len > 0 && (*bin == '0' || *bin == '_')) { + ++bin; + --len; + } + + contains_underscores = (memchr(bin, '_', len) != NULL); + + if (contains_underscores) { + bin = estrndup(bin, len); + strip_underscores(bin, &len); + } + + if (len < SIZEOF_ZEND_LONG * 8) { + if (len == 0) { + ZVAL_LONG(zendlval, 0); + } else { + errno = 0; + ZVAL_LONG(zendlval, ZEND_STRTOL(bin, &end, 2)); + ZEND_ASSERT(!errno && end == bin + len); + } + if (contains_underscores) { + efree(bin); + } + RETURN_TOKEN_WITH_VAL(T_LNUMBER); + } else { + ZVAL_DOUBLE(zendlval, zend_bin_strtod(bin, (const char **)&end)); + /* errno isn't checked since we allow HUGE_VAL/INF overflow */ + ZEND_ASSERT(end == bin + len); + if (contains_underscores) { + efree(bin); + } + RETURN_TOKEN_WITH_VAL(T_DNUMBER); + } +} +#line 3503 "Zend/zend_language_scanner.c" +yy218: + YYDEBUG(218, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + if (yych <= '/') goto yy82; + if (yych >= ':') goto yy82; +yy219: + YYDEBUG(219, *YYCURSOR); + yyaccept = 3; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(220, *YYCURSOR); + if (yych <= '/') goto yy109; + if (yych <= '9') goto yy219; + if (yych == '_') goto yy218; + goto yy109; +yy221: + YYDEBUG(221, *YYCURSOR); + yyaccept = 7; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(222, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy221; + } + if (yych == '_') goto yy119; +yy223: + YYDEBUG(223, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1882 "Zend/zend_language_scanner.l" + { + /* The +/- 2 skips "0x" */ + size_t len = yyleng - 2; + char *end, *hex = yytext + 2; + zend_bool contains_underscores; + + /* Skip any leading 0s */ + while (len > 0 && (*hex == '0' || *hex == '_')) { + ++hex; + --len; + } + + contains_underscores = (memchr(hex, '_', len) != NULL); + + if (contains_underscores) { + hex = estrndup(hex, len); + strip_underscores(hex, &len); + } + + if (len < SIZEOF_ZEND_LONG * 2 || (len == SIZEOF_ZEND_LONG * 2 && *hex <= '7')) { + if (len == 0) { + ZVAL_LONG(zendlval, 0); + } else { + errno = 0; + ZVAL_LONG(zendlval, ZEND_STRTOL(hex, &end, 16)); + ZEND_ASSERT(!errno && end == hex + len); + } + if (contains_underscores) { + efree(hex); + } + RETURN_TOKEN_WITH_VAL(T_LNUMBER); + } else { + ZVAL_DOUBLE(zendlval, zend_hex_strtod(hex, (const char **)&end)); + /* errno isn't checked since we allow HUGE_VAL/INF overflow */ + ZEND_ASSERT(end == hex + len); + if (contains_underscores) { + efree(hex); + } + RETURN_TOKEN_WITH_VAL(T_DNUMBER); + } +} +#line 3578 "Zend/zend_language_scanner.c" +yy224: + YYDEBUG(224, *YYCURSOR); + ++YYCURSOR; + YYFILL(2); + yych = *YYCURSOR; + YYDEBUG(225, *YYCURSOR); + if (yych <= '\'') { + if (yych <= ' ') { + if (yych == '\t') goto yy224; + if (yych <= 0x1F) goto yy82; + goto yy224; + } else { + if (yych == '"') goto yy316; + if (yych <= '&') goto yy82; + goto yy317; + } + } else { + if (yych <= '_') { + if (yych <= '@') goto yy82; + if (yych <= 'Z') goto yy318; + if (yych <= '^') goto yy82; + goto yy318; + } else { + if (yych <= '`') goto yy82; + if (yych <= 'z') goto yy318; + if (yych <= 0x7F) goto yy82; + goto yy318; + } + } +yy226: + YYDEBUG(226, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(227, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1684 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_SL_EQUAL); +} +#line 3617 "Zend/zend_language_scanner.c" +yy228: + YYDEBUG(228, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(229, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1640 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_SPACESHIP); +} +#line 3627 "Zend/zend_language_scanner.c" +yy230: + YYDEBUG(230, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(231, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1624 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_IS_IDENTICAL); +} +#line 3637 "Zend/zend_language_scanner.c" +yy232: + YYDEBUG(232, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(233, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1688 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_SR_EQUAL); +} +#line 3647 "Zend/zend_language_scanner.c" +yy234: + YYDEBUG(234, *YYCURSOR); + ++YYCURSOR; + goto yy137; +yy235: + YYDEBUG(235, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '\n') goto yy234; + goto yy137; +yy236: + YYDEBUG(236, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(237, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1704 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_COALESCE_EQUAL); +} +#line 3666 "Zend/zend_language_scanner.c" +yy238: + YYDEBUG(238, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy320; + if (yych == 't') goto yy320; + goto yy44; +yy239: + YYDEBUG(239, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(240, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1720 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_LOGICAL_AND); +} +#line 3685 "Zend/zend_language_scanner.c" +yy241: + YYDEBUG(241, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy321; + if (yych == 'a') goto yy321; + goto yy44; +yy242: + YYDEBUG(242, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '<') goto yy224; + goto yy82; +yy243: + YYDEBUG(243, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy322; + if (yych == 'a') goto yy322; + goto yy44; +yy244: + YYDEBUG(244, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy323; + if (yych == 'l') goto yy323; + goto yy44; +yy245: + YYDEBUG(245, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy324; + if (yych == 'e') goto yy324; + goto yy44; +yy246: + YYDEBUG(246, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy326; + if (yych == 'c') goto yy326; + goto yy44; +yy247: + YYDEBUG(247, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'S') goto yy327; + if (yych == 's') goto yy327; + goto yy44; +yy248: + YYDEBUG(248, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'N') goto yy328; + if (yych == 'n') goto yy328; + goto yy44; +yy249: + YYDEBUG(249, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'T') { + if (yych <= 'R') goto yy44; + if (yych <= 'S') goto yy329; + goto yy330; + } else { + if (yych <= 'r') goto yy44; + if (yych <= 's') goto yy329; + if (yych <= 't') goto yy330; + goto yy44; + } +yy250: + YYDEBUG(250, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy331; + if (yych == 'l') goto yy331; + goto yy44; +yy251: + YYDEBUG(251, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy332; + if (yych == 'a') goto yy332; + goto yy44; +yy252: + YYDEBUG(252, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(253, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1275 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_EXIT); +} +#line 3770 "Zend/zend_language_scanner.c" +yy254: + YYDEBUG(254, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'O') goto yy333; + if (yych == 'o') goto yy333; + goto yy44; +yy255: + YYDEBUG(255, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy335; + if (yych == 'e') goto yy335; + goto yy44; +yy256: + YYDEBUG(256, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy337; + if (yych == 't') goto yy337; + goto yy44; +yy257: + YYDEBUG(257, *YYCURSOR); + yych = *++YYCURSOR; + switch (yych) { + case 'D': + case 'd': goto yy338; + case 'F': + case 'f': goto yy339; + case 'I': + case 'i': goto yy340; + case 'S': + case 's': goto yy341; + case 'W': + case 'w': goto yy342; + default: goto yy44; + } +yy258: + YYDEBUG(258, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy343; + if (yych == 'l') goto yy343; + goto yy44; +yy259: + YYDEBUG(259, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy345; + if (yych == 't') goto yy345; + goto yy44; +yy260: + YYDEBUG(260, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy347; + if (yych == 'e') goto yy347; + goto yy44; +yy261: + YYDEBUG(261, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy348; + if (yych == 'a') goto yy348; + goto yy44; +yy262: + YYDEBUG(262, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '^') { + if (yych <= '@') { + if (yych <= '/') goto yy263; + if (yych <= '9') goto yy43; + } else { + if (yych == 'E') goto yy349; + if (yych <= 'Z') goto yy43; + } + } else { + if (yych <= 'd') { + if (yych != '`') goto yy43; + } else { + if (yych <= 'e') goto yy349; + if (yych <= 'z') goto yy43; + if (yych >= 0x80) goto yy43; + } + } +yy263: + YYDEBUG(263, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1349 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_FOR); +} +#line 3856 "Zend/zend_language_scanner.c" +yy264: + YYDEBUG(264, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy350; + if (yych == 'c') goto yy350; + goto yy44; +yy265: + YYDEBUG(265, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'B') goto yy351; + if (yych == 'b') goto yy351; + goto yy44; +yy266: + YYDEBUG(266, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'O') goto yy352; + if (yych == 'o') goto yy352; + goto yy44; +yy267: + YYDEBUG(267, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy354; + if (yych == 'l') goto yy354; + goto yy44; +yy268: + YYDEBUG(268, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy355; + if (yych == 'l') goto yy355; + goto yy44; +yy269: + YYDEBUG(269, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy356; + if (yych == 't') goto yy356; + goto yy44; +yy270: + YYDEBUG(270, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy357; + if (yych == 'e') goto yy357; + goto yy44; +yy271: + YYDEBUG(271, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy358; + if (yych == 'e') goto yy358; + goto yy44; +yy272: + YYDEBUG(272, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy359; + if (yych == 't') goto yy359; + goto yy44; +yy273: + YYDEBUG(273, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy361; + if (yych == 'e') goto yy361; + goto yy44; +yy274: + YYDEBUG(274, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(275, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1477 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_NEW); +} +#line 3929 "Zend/zend_language_scanner.c" +yy276: + YYDEBUG(276, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'V') { + if (yych == 'N') goto yy362; + if (yych <= 'U') goto yy44; + goto yy363; + } else { + if (yych <= 'n') { + if (yych <= 'm') goto yy44; + goto yy362; + } else { + if (yych == 'v') goto yy363; + goto yy44; + } + } +yy277: + YYDEBUG(277, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy364; + if (yych == 't') goto yy364; + goto yy44; +yy278: + YYDEBUG(278, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy365; + if (yych == 'l') goto yy365; + goto yy44; +yy279: + YYDEBUG(279, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'U') goto yy366; + if (yych == 'u') goto yy366; + goto yy44; +yy280: + YYDEBUG(280, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'U') goto yy367; + if (yych == 'u') goto yy367; + goto yy44; +yy281: + YYDEBUG(281, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy368; + if (yych == 't') goto yy368; + goto yy44; +yy282: + YYDEBUG(282, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy369; + if (yych == 't') goto yy369; + goto yy44; +yy283: + YYDEBUG(283, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'O') goto yy370; + if (yych == 'o') goto yy370; + goto yy44; +yy284: + YYDEBUG(284, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'I') goto yy371; + if (yych == 'i') goto yy371; + goto yy44; +yy285: + YYDEBUG(285, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(286, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1305 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_TRY); +} +#line 4006 "Zend/zend_language_scanner.c" +yy287: + YYDEBUG(287, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy372; + if (yych == 'e') goto yy372; + goto yy44; +yy288: + YYDEBUG(288, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(289, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1548 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_USE); +} +#line 4025 "Zend/zend_language_scanner.c" +yy290: + YYDEBUG(290, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(291, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1485 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_VAR); +} +#line 4038 "Zend/zend_language_scanner.c" +yy292: + YYDEBUG(292, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy373; + if (yych == 'l') goto yy373; + goto yy44; +yy293: + YYDEBUG(293, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(294, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1724 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_LOGICAL_XOR); +} +#line 4057 "Zend/zend_language_scanner.c" +yy295: + YYDEBUG(295, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy374; + if (yych == 'l') goto yy374; + goto yy44; +yy296: + YYDEBUG(296, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy375; + if (yych == 'l') goto yy375; + goto yy44; +yy297: + YYDEBUG(297, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'I') goto yy376; + if (yych == 'i') goto yy376; + goto yy44; +yy298: + YYDEBUG(298, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'U') { + if (yych == 'I') goto yy377; + if (yych <= 'T') goto yy44; + goto yy378; + } else { + if (yych <= 'i') { + if (yych <= 'h') goto yy44; + goto yy377; + } else { + if (yych == 'u') goto yy378; + goto yy44; + } + } +yy299: + YYDEBUG(299, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy379; + if (yych == 'a') goto yy379; + goto yy44; +yy300: + YYDEBUG(300, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'I') goto yy380; + if (yych == 'i') goto yy380; + goto yy44; +yy301: + YYDEBUG(301, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy381; + if (yych == 'e') goto yy381; + goto yy44; +yy302: + YYDEBUG(302, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy382; + if (yych == 'a') goto yy382; + goto yy44; +yy303: + YYDEBUG(303, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy383; + if (yych == 'r') goto yy383; + goto yy44; +yy304: + YYDEBUG(304, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy384; + if (yych == 'a') goto yy384; + goto yy82; +yy305: + YYDEBUG(305, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy385; + if (yych == 'a') goto yy385; + goto yy82; +yy306: + YYDEBUG(306, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy386; + if (yych == 'l') goto yy386; + goto yy82; +yy307: + YYDEBUG(307, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'B') goto yy387; + if (yych == 'b') goto yy387; + goto yy82; +yy308: + YYDEBUG(308, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy388; + if (yych == 'a') goto yy388; + goto yy82; +yy309: + YYDEBUG(309, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy393; + if (yych == 'e') goto yy393; + goto yy390; +yy310: + YYDEBUG(310, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy394; + if (yych == 'e') goto yy394; + goto yy82; +yy311: + YYDEBUG(311, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy395; + if (yych == 'l') goto yy395; + goto yy82; +yy312: + YYDEBUG(312, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'I') goto yy397; + if (yych == 'i') goto yy397; + goto yy82; +yy313: + YYDEBUG(313, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy398; + if (yych == 'e') goto yy398; + goto yy82; +yy314: + YYDEBUG(314, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(315, *YYCURSOR); + if (yych <= '\f') { + if (yych <= 0x08) goto yy113; + if (yych <= '\n') goto yy314; + goto yy113; + } else { + if (yych <= '\r') goto yy314; + if (yych == ' ') goto yy314; + goto yy113; + } +yy316: + YYDEBUG(316, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '"') goto yy82; + if (yych <= '/') goto yy400; + if (yych <= '9') goto yy82; + goto yy400; +yy317: + YYDEBUG(317, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '\'') goto yy82; + if (yych <= '/') goto yy402; + if (yych <= '9') goto yy82; + goto yy402; +yy318: + YYDEBUG(318, *YYCURSOR); + ++YYCURSOR; + YYFILL(2); + yych = *YYCURSOR; + YYDEBUG(319, *YYCURSOR); + if (yych <= '@') { + if (yych <= '\f') { + if (yych == '\n') goto yy403; + goto yy82; + } else { + if (yych <= '\r') goto yy405; + if (yych <= '/') goto yy82; + if (yych <= '9') goto yy318; + goto yy82; + } + } else { + if (yych <= '_') { + if (yych <= 'Z') goto yy318; + if (yych <= '^') goto yy82; + goto yy318; + } else { + if (yych <= '`') goto yy82; + if (yych <= 'z') goto yy318; + if (yych <= 0x7F) goto yy82; + goto yy318; + } + } +yy320: + YYDEBUG(320, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy406; + if (yych == 'r') goto yy406; + goto yy44; +yy321: + YYDEBUG(321, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'Y') goto yy407; + if (yych == 'y') goto yy407; + goto yy44; +yy322: + YYDEBUG(322, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'K') goto yy409; + if (yych == 'k') goto yy409; + goto yy44; +yy323: + YYDEBUG(323, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy411; + if (yych == 'a') goto yy411; + goto yy44; +yy324: + YYDEBUG(324, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(325, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1389 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_CASE); +} +#line 4275 "Zend/zend_language_scanner.c" +yy326: + YYDEBUG(326, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'H') goto yy412; + if (yych == 'h') goto yy412; + goto yy44; +yy327: + YYDEBUG(327, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'S') goto yy414; + if (yych == 's') goto yy414; + goto yy44; +yy328: + YYDEBUG(328, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy416; + if (yych == 'e') goto yy416; + goto yy44; +yy329: + YYDEBUG(329, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy418; + if (yych == 't') goto yy418; + goto yy44; +yy330: + YYDEBUG(330, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'I') goto yy420; + if (yych == 'i') goto yy420; + goto yy44; +yy331: + YYDEBUG(331, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy421; + if (yych == 'a') goto yy421; + goto yy44; +yy332: + YYDEBUG(332, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'U') goto yy422; + if (yych == 'u') goto yy422; + goto yy44; +yy333: + YYDEBUG(333, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(334, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1409 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ECHO); +} +#line 4330 "Zend/zend_language_scanner.c" +yy335: + YYDEBUG(335, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '^') { + if (yych <= '@') { + if (yych <= '/') goto yy336; + if (yych <= '9') goto yy43; + } else { + if (yych == 'I') goto yy423; + if (yych <= 'Z') goto yy43; + } + } else { + if (yych <= 'h') { + if (yych != '`') goto yy43; + } else { + if (yych <= 'i') goto yy423; + if (yych <= 'z') goto yy43; + if (yych >= 0x80) goto yy43; + } + } +yy336: + YYDEBUG(336, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1333 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ELSE); +} +#line 4358 "Zend/zend_language_scanner.c" +yy337: + YYDEBUG(337, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'Y') goto yy424; + if (yych == 'y') goto yy424; + goto yy44; +yy338: + YYDEBUG(338, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy426; + if (yych == 'e') goto yy426; + goto yy44; +yy339: + YYDEBUG(339, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'O') goto yy427; + if (yych == 'o') goto yy427; + goto yy44; +yy340: + YYDEBUG(340, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'F') goto yy428; + if (yych == 'f') goto yy428; + goto yy44; +yy341: + YYDEBUG(341, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'W') goto yy430; + if (yych == 'w') goto yy430; + goto yy44; +yy342: + YYDEBUG(342, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'H') goto yy431; + if (yych == 'h') goto yy431; + goto yy44; +yy343: + YYDEBUG(343, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(344, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1524 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_EVAL); +} +#line 4407 "Zend/zend_language_scanner.c" +yy345: + YYDEBUG(345, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(346, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1271 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_EXIT); +} +#line 4420 "Zend/zend_language_scanner.c" +yy347: + YYDEBUG(347, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'N') goto yy432; + if (yych == 'n') goto yy432; + goto yy44; +yy348: + YYDEBUG(348, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy433; + if (yych == 'l') goto yy433; + goto yy44; +yy349: + YYDEBUG(349, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy435; + if (yych == 'a') goto yy435; + goto yy44; +yy350: + YYDEBUG(350, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy436; + if (yych == 't') goto yy436; + goto yy44; +yy351: + YYDEBUG(351, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy437; + if (yych == 'a') goto yy437; + goto yy44; +yy352: + YYDEBUG(352, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(353, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1405 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_GOTO); +} +#line 4463 "Zend/zend_language_scanner.c" +yy354: + YYDEBUG(354, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy438; + if (yych == 'e') goto yy438; + goto yy44; +yy355: + YYDEBUG(355, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'U') goto yy439; + if (yych == 'u') goto yy439; + goto yy44; +yy356: + YYDEBUG(356, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= 'E') { + if (yych == 'A') goto yy440; + if (yych <= 'D') goto yy44; + goto yy441; + } else { + if (yych <= 'a') { + if (yych <= '`') goto yy44; + goto yy440; + } else { + if (yych == 'e') goto yy441; + goto yy44; + } + } +yy357: + YYDEBUG(357, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy442; + if (yych == 'r') goto yy442; + goto yy44; +yy358: + YYDEBUG(358, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy443; + if (yych == 't') goto yy443; + goto yy44; +yy359: + YYDEBUG(359, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(360, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1604 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_LIST); +} +#line 4516 "Zend/zend_language_scanner.c" +yy361: + YYDEBUG(361, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'S') goto yy445; + if (yych == 's') goto yy445; + goto yy44; +yy362: + YYDEBUG(362, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy446; + if (yych == 't') goto yy446; + goto yy44; +yy363: + YYDEBUG(363, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy448; + if (yych == 'a') goto yy448; + goto yy44; +yy364: + YYDEBUG(364, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy449; + if (yych == 'e') goto yy449; + goto yy44; +yy365: + YYDEBUG(365, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'I') goto yy450; + if (yych == 'i') goto yy450; + goto yy44; +yy366: + YYDEBUG(366, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'I') goto yy451; + if (yych == 'i') goto yy451; + goto yy44; +yy367: + YYDEBUG(367, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy452; + if (yych == 'r') goto yy452; + goto yy44; +yy368: + YYDEBUG(368, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'I') goto yy453; + if (yych == 'i') goto yy453; + goto yy44; +yy369: + YYDEBUG(369, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy454; + if (yych == 'c') goto yy454; + goto yy44; +yy370: + YYDEBUG(370, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'W') goto yy455; + if (yych == 'w') goto yy455; + goto yy44; +yy371: + YYDEBUG(371, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy457; + if (yych == 't') goto yy457; + goto yy44; +yy372: + YYDEBUG(372, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy459; + if (yych == 't') goto yy459; + goto yy44; +yy373: + YYDEBUG(373, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy461; + if (yych == 'e') goto yy461; + goto yy44; +yy374: + YYDEBUG(374, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'D') goto yy463; + if (yych == 'd') goto yy463; + goto yy44; +yy375: + YYDEBUG(375, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy465; + if (yych == 'a') goto yy465; + goto yy44; +yy376: + YYDEBUG(376, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy466; + if (yych == 'r') goto yy466; + goto yy44; +yy377: + YYDEBUG(377, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy467; + if (yych == 'l') goto yy467; + goto yy44; +yy378: + YYDEBUG(378, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'N') goto yy468; + if (yych == 'n') goto yy468; + goto yy44; +yy379: + YYDEBUG(379, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy469; + if (yych == 'l') goto yy469; + goto yy44; +yy380: + YYDEBUG(380, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'N') goto yy470; + if (yych == 'n') goto yy470; + goto yy44; +yy381: + YYDEBUG(381, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy471; + if (yych == 't') goto yy471; + goto yy44; +yy382: + YYDEBUG(382, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'M') goto yy472; + if (yych == 'm') goto yy472; + goto yy44; +yy383: + YYDEBUG(383, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy473; + if (yych == 'a') goto yy473; + goto yy44; +yy384: + YYDEBUG(384, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'Y') goto yy474; + if (yych == 'y') goto yy474; + goto yy82; +yy385: + YYDEBUG(385, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy476; + if (yych == 'r') goto yy476; + goto yy82; +yy386: + YYDEBUG(386, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy481; + if (yych == 'e') goto yy481; + goto yy478; +yy387: + YYDEBUG(387, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy482; + if (yych == 'l') goto yy482; + goto yy82; +yy388: + YYDEBUG(388, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy483; + if (yych == 't') goto yy483; + goto yy82; +yy389: + YYDEBUG(389, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; +yy390: + YYDEBUG(390, *YYCURSOR); + if (yych <= 0x1F) { + if (yych == '\t') goto yy389; + goto yy82; + } else { + if (yych <= ' ') goto yy389; + if (yych != ')') goto yy82; + } + YYDEBUG(391, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(392, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1489 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_INT_CAST); +} +#line 4707 "Zend/zend_language_scanner.c" +yy393: + YYDEBUG(393, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'G') goto yy485; + if (yych == 'g') goto yy485; + goto yy82; +yy394: + YYDEBUG(394, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy486; + if (yych == 'c') goto yy486; + goto yy82; +yy395: + YYDEBUG(395, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(396, *YYCURSOR); + if (yych <= 0x1F) { + if (yych == '\t') goto yy395; + goto yy82; + } else { + if (yych <= ' ') goto yy395; + if (yych == ')') goto yy487; + goto yy82; + } +yy397: + YYDEBUG(397, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'N') goto yy489; + if (yych == 'n') goto yy489; + goto yy82; +yy398: + YYDEBUG(398, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy490; + if (yych == 't') goto yy490; + goto yy82; +yy399: + YYDEBUG(399, *YYCURSOR); + ++YYCURSOR; + YYFILL(3); + yych = *YYCURSOR; +yy400: + YYDEBUG(400, *YYCURSOR); + if (yych <= 'Z') { + if (yych <= '/') { + if (yych == '"') goto yy492; + goto yy82; + } else { + if (yych <= '9') goto yy399; + if (yych <= '@') goto yy82; + goto yy399; + } + } else { + if (yych <= '`') { + if (yych == '_') goto yy399; + goto yy82; + } else { + if (yych <= 'z') goto yy399; + if (yych <= 0x7F) goto yy82; + goto yy399; + } + } +yy401: + YYDEBUG(401, *YYCURSOR); + ++YYCURSOR; + YYFILL(3); + yych = *YYCURSOR; +yy402: + YYDEBUG(402, *YYCURSOR); + if (yych <= 'Z') { + if (yych <= '/') { + if (yych == '\'') goto yy492; + goto yy82; + } else { + if (yych <= '9') goto yy401; + if (yych <= '@') goto yy82; + goto yy401; + } + } else { + if (yych <= '`') { + if (yych == '_') goto yy401; + goto yy82; + } else { + if (yych <= 'z') goto yy401; + if (yych <= 0x7F) goto yy82; + goto yy401; + } + } +yy403: + YYDEBUG(403, *YYCURSOR); + ++YYCURSOR; +yy404: + YYDEBUG(404, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2364 "Zend/zend_language_scanner.l" + { + char *s; + unsigned char *saved_cursor; + int bprefix = (yytext[0] != '<') ? 1 : 0, spacing = 0, indentation = 0; + zend_heredoc_label *heredoc_label = emalloc(sizeof(zend_heredoc_label)); + zend_bool is_heredoc = 1; + + CG(zend_lineno)++; + heredoc_label->length = yyleng-bprefix-3-1-(yytext[yyleng-2]=='\r'?1:0); + s = yytext+bprefix+3; + while ((*s == ' ') || (*s == '\t')) { + s++; + heredoc_label->length--; + } + + if (*s == '\'') { + s++; + heredoc_label->length -= 2; + is_heredoc = 0; + + BEGIN(ST_NOWDOC); + } else { + if (*s == '"') { + s++; + heredoc_label->length -= 2; + } + + BEGIN(ST_HEREDOC); + } + + heredoc_label->label = estrndup(s, heredoc_label->length); + heredoc_label->indentation = 0; + saved_cursor = YYCURSOR; + + zend_ptr_stack_push(&SCNG(heredoc_label_stack), (void *) heredoc_label); + + while (YYCURSOR < YYLIMIT && (*YYCURSOR == ' ' || *YYCURSOR == '\t')) { + if (*YYCURSOR == '\t') { + spacing |= HEREDOC_USING_TABS; + } else { + spacing |= HEREDOC_USING_SPACES; + } + ++YYCURSOR; + ++indentation; + } + + if (YYCURSOR == YYLIMIT) { + YYCURSOR = saved_cursor; + RETURN_TOKEN(T_START_HEREDOC); + } + + /* Check for ending label on the next line */ + if (heredoc_label->length < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, s, heredoc_label->length)) { + if (!IS_LABEL_SUCCESSOR(YYCURSOR[heredoc_label->length])) { + if (spacing == (HEREDOC_USING_SPACES | HEREDOC_USING_TABS)) { + zend_throw_exception(zend_ce_parse_error, "Invalid indentation - tabs and spaces cannot be mixed", 0); + if (PARSER_MODE()) { + RETURN_TOKEN(T_ERROR); + } + } + + YYCURSOR = saved_cursor; + heredoc_label->indentation = indentation; + + BEGIN(ST_END_HEREDOC); + RETURN_TOKEN(T_START_HEREDOC); + } + } + + YYCURSOR = saved_cursor; + + if (is_heredoc && !SCNG(heredoc_scan_ahead)) { + zend_lex_state current_state; + zend_string *saved_doc_comment = CG(doc_comment); + int heredoc_nesting_level = 1; + int first_token = 0; + int error = 0; + + zend_save_lexical_state(¤t_state); + + SCNG(heredoc_scan_ahead) = 1; + SCNG(heredoc_indentation) = 0; + SCNG(heredoc_indentation_uses_spaces) = 0; + LANG_SCNG(on_event) = NULL; + CG(doc_comment) = NULL; + + zend_ptr_stack_reverse_apply(¤t_state.heredoc_label_stack, copy_heredoc_label_stack); + + zend_exception_save(); + while (heredoc_nesting_level) { + zval zv; + int retval; + + ZVAL_UNDEF(&zv); + retval = lex_scan(&zv, NULL); + zval_ptr_dtor_nogc(&zv); + + if (EG(exception)) { + zend_clear_exception(); + break; + } + + if (!first_token) { + first_token = retval; + } + + switch (retval) { + case T_START_HEREDOC: + ++heredoc_nesting_level; + break; + case T_END_HEREDOC: + --heredoc_nesting_level; + break; + case END: + heredoc_nesting_level = 0; + } + } + zend_exception_restore(); + + if ( + (first_token == T_VARIABLE + || first_token == T_DOLLAR_OPEN_CURLY_BRACES + || first_token == T_CURLY_OPEN + ) && SCNG(heredoc_indentation)) { + zend_throw_exception_ex(zend_ce_parse_error, 0, "Invalid body indentation level (expecting an indentation level of at least %d)", SCNG(heredoc_indentation)); + error = 1; + } + + heredoc_label->indentation = SCNG(heredoc_indentation); + heredoc_label->indentation_uses_spaces = SCNG(heredoc_indentation_uses_spaces); + + zend_restore_lexical_state(¤t_state); + SCNG(heredoc_scan_ahead) = 0; + CG(increment_lineno) = 0; + CG(doc_comment) = saved_doc_comment; + + if (PARSER_MODE() && error) { + RETURN_TOKEN(T_ERROR); + } + } + + RETURN_TOKEN(T_START_HEREDOC); +} +#line 4948 "Zend/zend_language_scanner.c" +yy405: + YYDEBUG(405, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '\n') goto yy403; + goto yy404; +yy406: + YYDEBUG(406, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy493; + if (yych == 'a') goto yy493; + goto yy44; +yy407: + YYDEBUG(407, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(408, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1608 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ARRAY); +} +#line 4972 "Zend/zend_language_scanner.c" +yy409: + YYDEBUG(409, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(410, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1397 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_BREAK); +} +#line 4985 "Zend/zend_language_scanner.c" +yy411: + YYDEBUG(411, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'B') goto yy494; + if (yych == 'b') goto yy494; + goto yy44; +yy412: + YYDEBUG(412, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(413, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1309 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_CATCH); +} +#line 5004 "Zend/zend_language_scanner.c" +yy414: + YYDEBUG(414, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(415, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1417 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_CLASS); +} +#line 5017 "Zend/zend_language_scanner.c" +yy416: + YYDEBUG(416, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(417, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1481 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_CLONE); +} +#line 5030 "Zend/zend_language_scanner.c" +yy418: + YYDEBUG(418, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(419, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1287 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_CONST); +} +#line 5043 "Zend/zend_language_scanner.c" +yy420: + YYDEBUG(420, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'N') goto yy495; + if (yych == 'n') goto yy495; + goto yy44; +yy421: + YYDEBUG(421, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy496; + if (yych == 'r') goto yy496; + goto yy44; +yy422: + YYDEBUG(422, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy497; + if (yych == 'l') goto yy497; + goto yy44; +yy423: + YYDEBUG(423, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'F') goto yy498; + if (yych == 'f') goto yy498; + goto yy44; +yy424: + YYDEBUG(424, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(425, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1564 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_EMPTY); +} +#line 5080 "Zend/zend_language_scanner.c" +yy426: + YYDEBUG(426, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy500; + if (yych == 'c') goto yy500; + goto yy44; +yy427: + YYDEBUG(427, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy501; + if (yych == 'r') goto yy501; + goto yy44; +yy428: + YYDEBUG(428, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(429, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1329 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ENDIF); +} +#line 5105 "Zend/zend_language_scanner.c" +yy430: + YYDEBUG(430, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'I') goto yy503; + if (yych == 'i') goto yy503; + goto yy44; +yy431: + YYDEBUG(431, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'I') goto yy504; + if (yych == 'i') goto yy504; + goto yy44; +yy432: + YYDEBUG(432, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'D') goto yy505; + if (yych == 'd') goto yy505; + goto yy44; +yy433: + YYDEBUG(433, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '^') { + if (yych <= '@') { + if (yych <= '/') goto yy434; + if (yych <= '9') goto yy43; + } else { + if (yych == 'L') goto yy506; + if (yych <= 'Z') goto yy43; + } + } else { + if (yych <= 'k') { + if (yych != '`') goto yy43; + } else { + if (yych <= 'l') goto yy506; + if (yych <= 'z') goto yy43; + if (yych >= 0x80) goto yy43; + } + } +yy434: + YYDEBUG(434, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1580 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_FINAL); +} +#line 5151 "Zend/zend_language_scanner.c" +yy435: + YYDEBUG(435, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy507; + if (yych == 'c') goto yy507; + goto yy44; +yy436: + YYDEBUG(436, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'I') goto yy508; + if (yych == 'i') goto yy508; + goto yy44; +yy437: + YYDEBUG(437, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy509; + if (yych == 'l') goto yy509; + goto yy44; +yy438: + YYDEBUG(438, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'M') goto yy511; + if (yych == 'm') goto yy511; + goto yy44; +yy439: + YYDEBUG(439, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'D') goto yy512; + if (yych == 'd') goto yy512; + goto yy44; +yy440: + YYDEBUG(440, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'N') goto yy513; + if (yych == 'n') goto yy513; + goto yy44; +yy441: + YYDEBUG(441, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy514; + if (yych == 'a') goto yy514; + goto yy44; +yy442: + YYDEBUG(442, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'F') goto yy515; + if (yych == 'f') goto yy515; + goto yy44; +yy443: + YYDEBUG(443, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(444, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1560 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ISSET); +} +#line 5212 "Zend/zend_language_scanner.c" +yy445: + YYDEBUG(445, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'P') goto yy516; + if (yych == 'p') goto yy516; + goto yy44; +yy446: + YYDEBUG(446, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(447, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1413 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_PRINT); +} +#line 5231 "Zend/zend_language_scanner.c" +yy448: + YYDEBUG(448, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy517; + if (yych == 't') goto yy517; + goto yy44; +yy449: + YYDEBUG(449, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy518; + if (yych == 'c') goto yy518; + goto yy44; +yy450: + YYDEBUG(450, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy519; + if (yych == 'c') goto yy519; + goto yy44; +yy451: + YYDEBUG(451, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy521; + if (yych == 'r') goto yy521; + goto yy44; +yy452: + YYDEBUG(452, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'N') goto yy522; + if (yych == 'n') goto yy522; + goto yy44; +yy453: + YYDEBUG(453, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy524; + if (yych == 'c') goto yy524; + goto yy44; +yy454: + YYDEBUG(454, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'H') goto yy526; + if (yych == 'h') goto yy526; + goto yy44; +yy455: + YYDEBUG(455, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(456, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1317 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_THROW); +} +#line 5286 "Zend/zend_language_scanner.c" +yy457: + YYDEBUG(457, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(458, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1425 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_TRAIT); +} +#line 5299 "Zend/zend_language_scanner.c" +yy459: + YYDEBUG(459, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(460, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1596 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_UNSET); +} +#line 5312 "Zend/zend_language_scanner.c" +yy461: + YYDEBUG(461, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(462, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1337 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_WHILE); +} +#line 5325 "Zend/zend_language_scanner.c" +yy463: + YYDEBUG(463, *YYCURSOR); + yyaccept = 8; + yych = *(YYMARKER = ++YYCURSOR); + if (yybm[0+yych] & 16) { + goto yy43; + } + if (yych <= '\f') { + if (yych <= 0x08) goto yy464; + if (yych <= '\n') goto yy528; + } else { + if (yych <= '\r') goto yy528; + if (yych == ' ') goto yy528; + } +yy464: + YYDEBUG(464, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1301 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_YIELD); +} +#line 5347 "Zend/zend_language_scanner.c" +yy465: + YYDEBUG(465, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'S') goto yy530; + if (yych == 's') goto yy530; + goto yy44; +yy466: + YYDEBUG(466, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '_') goto yy531; + goto yy44; +yy467: + YYDEBUG(467, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy532; + if (yych == 'e') goto yy532; + goto yy44; +yy468: + YYDEBUG(468, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy533; + if (yych == 'c') goto yy533; + goto yy44; +yy469: + YYDEBUG(469, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy534; + if (yych == 't') goto yy534; + goto yy44; +yy470: + YYDEBUG(470, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy535; + if (yych == 'e') goto yy535; + goto yy44; +yy471: + YYDEBUG(471, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'H') goto yy536; + if (yych == 'h') goto yy536; + goto yy44; +yy472: + YYDEBUG(472, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy537; + if (yych == 'e') goto yy537; + goto yy44; +yy473: + YYDEBUG(473, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'I') goto yy538; + if (yych == 'i') goto yy538; + goto yy44; +yy474: + YYDEBUG(474, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(475, *YYCURSOR); + if (yych <= 0x1F) { + if (yych == '\t') goto yy474; + goto yy82; + } else { + if (yych <= ' ') goto yy474; + if (yych == ')') goto yy539; + goto yy82; + } +yy476: + YYDEBUG(476, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'Y') goto yy541; + if (yych == 'y') goto yy541; + goto yy82; +yy477: + YYDEBUG(477, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; +yy478: + YYDEBUG(478, *YYCURSOR); + if (yych <= 0x1F) { + if (yych == '\t') goto yy477; + goto yy82; + } else { + if (yych <= ' ') goto yy477; + if (yych != ')') goto yy82; + } + YYDEBUG(479, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(480, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1516 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_BOOL_CAST); +} +#line 5443 "Zend/zend_language_scanner.c" +yy481: + YYDEBUG(481, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy543; + if (yych == 'a') goto yy543; + goto yy82; +yy482: + YYDEBUG(482, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy483; + if (yych != 'e') goto yy82; +yy483: + YYDEBUG(483, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(484, *YYCURSOR); + if (yych <= 0x1F) { + if (yych == '\t') goto yy483; + goto yy82; + } else { + if (yych <= ' ') goto yy483; + if (yych == ')') goto yy544; + goto yy82; + } +yy485: + YYDEBUG(485, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy546; + if (yych == 'e') goto yy546; + goto yy82; +yy486: + YYDEBUG(486, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy547; + if (yych == 't') goto yy547; + goto yy82; +yy487: + YYDEBUG(487, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(488, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1497 "Zend/zend_language_scanner.l" + { + if (PARSER_MODE()) { + zend_error(E_DEPRECATED, "The (real) cast is deprecated, use (float) instead"); + } + RETURN_TOKEN(T_DOUBLE_CAST); +} +#line 5493 "Zend/zend_language_scanner.c" +yy489: + YYDEBUG(489, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'G') goto yy541; + if (yych == 'g') goto yy541; + goto yy82; +yy490: + YYDEBUG(490, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(491, *YYCURSOR); + if (yych <= 0x1F) { + if (yych == '\t') goto yy490; + goto yy82; + } else { + if (yych <= ' ') goto yy490; + if (yych == ')') goto yy549; + goto yy82; + } +yy492: + YYDEBUG(492, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '\n') goto yy403; + if (yych == '\r') goto yy405; + goto yy82; +yy493: + YYDEBUG(493, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy551; + if (yych == 'c') goto yy551; + goto yy44; +yy494: + YYDEBUG(494, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy552; + if (yych == 'l') goto yy552; + goto yy44; +yy495: + YYDEBUG(495, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'U') goto yy553; + if (yych == 'u') goto yy553; + goto yy44; +yy496: + YYDEBUG(496, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy554; + if (yych == 'e') goto yy554; + goto yy44; +yy497: + YYDEBUG(497, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy556; + if (yych == 't') goto yy556; + goto yy44; +yy498: + YYDEBUG(498, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(499, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1325 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ELSEIF); +} +#line 5562 "Zend/zend_language_scanner.c" +yy500: + YYDEBUG(500, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy558; + if (yych == 'l') goto yy558; + goto yy44; +yy501: + YYDEBUG(501, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '^') { + if (yych <= '@') { + if (yych <= '/') goto yy502; + if (yych <= '9') goto yy43; + } else { + if (yych == 'E') goto yy559; + if (yych <= 'Z') goto yy43; + } + } else { + if (yych <= 'd') { + if (yych != '`') goto yy43; + } else { + if (yych <= 'e') goto yy559; + if (yych <= 'z') goto yy43; + if (yych >= 0x80) goto yy43; + } + } +yy502: + YYDEBUG(502, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1353 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ENDFOR); +} +#line 5596 "Zend/zend_language_scanner.c" +yy503: + YYDEBUG(503, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy560; + if (yych == 't') goto yy560; + goto yy44; +yy504: + YYDEBUG(504, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy561; + if (yych == 'l') goto yy561; + goto yy44; +yy505: + YYDEBUG(505, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'S') goto yy562; + if (yych == 's') goto yy562; + goto yy44; +yy506: + YYDEBUG(506, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'Y') goto yy564; + if (yych == 'y') goto yy564; + goto yy44; +yy507: + YYDEBUG(507, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'H') goto yy566; + if (yych == 'h') goto yy566; + goto yy44; +yy508: + YYDEBUG(508, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'O') goto yy568; + if (yych == 'o') goto yy568; + goto yy44; +yy509: + YYDEBUG(509, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(510, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1556 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_GLOBAL); +} +#line 5645 "Zend/zend_language_scanner.c" +yy511: + YYDEBUG(511, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy569; + if (yych == 'e') goto yy569; + goto yy44; +yy512: + YYDEBUG(512, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy570; + if (yych == 'e') goto yy570; + goto yy44; +yy513: + YYDEBUG(513, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy572; + if (yych == 'c') goto yy572; + goto yy44; +yy514: + YYDEBUG(514, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'D') goto yy573; + if (yych == 'd') goto yy573; + goto yy44; +yy515: + YYDEBUG(515, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy574; + if (yych == 'a') goto yy574; + goto yy44; +yy516: + YYDEBUG(516, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy575; + if (yych == 'a') goto yy575; + goto yy44; +yy517: + YYDEBUG(517, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy576; + if (yych == 'e') goto yy576; + goto yy44; +yy518: + YYDEBUG(518, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy578; + if (yych == 't') goto yy578; + goto yy44; +yy519: + YYDEBUG(519, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(520, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1592 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_PUBLIC); +} +#line 5706 "Zend/zend_language_scanner.c" +yy521: + YYDEBUG(521, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy579; + if (yych == 'e') goto yy579; + goto yy44; +yy522: + YYDEBUG(522, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(523, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1291 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_RETURN); +} +#line 5725 "Zend/zend_language_scanner.c" +yy524: + YYDEBUG(524, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(525, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1572 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_STATIC); +} +#line 5738 "Zend/zend_language_scanner.c" +yy526: + YYDEBUG(526, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(527, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1381 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_SWITCH); +} +#line 5751 "Zend/zend_language_scanner.c" +yy528: + YYDEBUG(528, *YYCURSOR); + ++YYCURSOR; + YYFILL(5); + yych = *YYCURSOR; + YYDEBUG(529, *YYCURSOR); + if (yych <= 0x1F) { + if (yych <= '\n') { + if (yych <= 0x08) goto yy82; + goto yy528; + } else { + if (yych == '\r') goto yy528; + goto yy82; + } + } else { + if (yych <= 'F') { + if (yych <= ' ') goto yy528; + if (yych <= 'E') goto yy82; + goto yy581; + } else { + if (yych == 'f') goto yy581; + goto yy82; + } + } +yy530: + YYDEBUG(530, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'S') goto yy582; + if (yych == 's') goto yy582; + goto yy44; +yy531: + YYDEBUG(531, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '_') goto yy583; + goto yy44; +yy532: + YYDEBUG(532, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '_') goto yy585; + goto yy44; +yy533: + YYDEBUG(533, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy586; + if (yych == 't') goto yy586; + goto yy44; +yy534: + YYDEBUG(534, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '_') goto yy587; + goto yy44; +yy535: + YYDEBUG(535, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '_') goto yy588; + goto yy44; +yy536: + YYDEBUG(536, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'O') goto yy589; + if (yych == 'o') goto yy589; + goto yy44; +yy537: + YYDEBUG(537, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'S') goto yy590; + if (yych == 's') goto yy590; + goto yy44; +yy538: + YYDEBUG(538, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy591; + if (yych == 't') goto yy591; + goto yy44; +yy539: + YYDEBUG(539, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(540, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1508 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ARRAY_CAST); +} +#line 5835 "Zend/zend_language_scanner.c" +yy541: + YYDEBUG(541, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(542, *YYCURSOR); + if (yych <= 0x1F) { + if (yych == '\t') goto yy541; + goto yy82; + } else { + if (yych <= ' ') goto yy541; + if (yych == ')') goto yy592; + goto yy82; + } +yy543: + YYDEBUG(543, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'N') goto yy477; + if (yych == 'n') goto yy477; + goto yy82; +yy544: + YYDEBUG(544, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(545, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1493 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_DOUBLE_CAST); +} +#line 5865 "Zend/zend_language_scanner.c" +yy546: + YYDEBUG(546, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy389; + if (yych == 'r') goto yy389; + goto yy82; +yy547: + YYDEBUG(547, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(548, *YYCURSOR); + if (yych <= 0x1F) { + if (yych == '\t') goto yy547; + goto yy82; + } else { + if (yych <= ' ') goto yy547; + if (yych == ')') goto yy594; + goto yy82; + } +yy549: + YYDEBUG(549, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(550, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1520 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_UNSET_CAST); +} +#line 5895 "Zend/zend_language_scanner.c" +yy551: + YYDEBUG(551, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy596; + if (yych == 't') goto yy596; + goto yy44; +yy552: + YYDEBUG(552, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy598; + if (yych == 'e') goto yy598; + goto yy44; +yy553: + YYDEBUG(553, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy600; + if (yych == 'e') goto yy600; + goto yy44; +yy554: + YYDEBUG(554, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(555, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1365 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_DECLARE); +} +#line 5926 "Zend/zend_language_scanner.c" +yy556: + YYDEBUG(556, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(557, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1393 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_DEFAULT); +} +#line 5939 "Zend/zend_language_scanner.c" +yy558: + YYDEBUG(558, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy602; + if (yych == 'a') goto yy602; + goto yy44; +yy559: + YYDEBUG(559, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy603; + if (yych == 'a') goto yy603; + goto yy44; +yy560: + YYDEBUG(560, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy604; + if (yych == 'c') goto yy604; + goto yy44; +yy561: + YYDEBUG(561, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy605; + if (yych == 'e') goto yy605; + goto yy44; +yy562: + YYDEBUG(562, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(563, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1429 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_EXTENDS); +} +#line 5976 "Zend/zend_language_scanner.c" +yy564: + YYDEBUG(564, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(565, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1313 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_FINALLY); +} +#line 5989 "Zend/zend_language_scanner.c" +yy566: + YYDEBUG(566, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(567, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1357 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_FOREACH); +} +#line 6002 "Zend/zend_language_scanner.c" +yy568: + YYDEBUG(568, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'N') goto yy607; + if (yych == 'n') goto yy607; + goto yy44; +yy569: + YYDEBUG(569, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'N') goto yy609; + if (yych == 'n') goto yy609; + goto yy44; +yy570: + YYDEBUG(570, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '^') { + if (yych <= '9') { + if (yych >= '0') goto yy43; + } else { + if (yych <= '@') goto yy571; + if (yych <= 'Z') goto yy43; + } + } else { + if (yych <= '`') { + if (yych <= '_') goto yy610; + } else { + if (yych <= 'z') goto yy43; + if (yych >= 0x80) goto yy43; + } + } +yy571: + YYDEBUG(571, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1528 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_INCLUDE); +} +#line 6040 "Zend/zend_language_scanner.c" +yy572: + YYDEBUG(572, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy611; + if (yych == 'e') goto yy611; + goto yy44; +yy573: + YYDEBUG(573, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'O') goto yy612; + if (yych == 'o') goto yy612; + goto yy44; +yy574: + YYDEBUG(574, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy613; + if (yych == 'c') goto yy613; + goto yy44; +yy575: + YYDEBUG(575, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy614; + if (yych == 'c') goto yy614; + goto yy44; +yy576: + YYDEBUG(576, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(577, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1584 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_PRIVATE); +} +#line 6077 "Zend/zend_language_scanner.c" +yy578: + YYDEBUG(578, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy615; + if (yych == 'e') goto yy615; + goto yy44; +yy579: + YYDEBUG(579, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '^') { + if (yych <= '9') { + if (yych >= '0') goto yy43; + } else { + if (yych <= '@') goto yy580; + if (yych <= 'Z') goto yy43; + } + } else { + if (yych <= '`') { + if (yych <= '_') goto yy616; + } else { + if (yych <= 'z') goto yy43; + if (yych >= 0x80) goto yy43; + } + } +yy580: + YYDEBUG(580, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1536 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_REQUIRE); +} +#line 6109 "Zend/zend_language_scanner.c" +yy581: + YYDEBUG(581, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy617; + if (yych == 'r') goto yy617; + goto yy82; +yy582: + YYDEBUG(582, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '_') goto yy618; + goto yy44; +yy583: + YYDEBUG(583, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(584, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1993 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_DIR); +} +#line 6133 "Zend/zend_language_scanner.c" +yy585: + YYDEBUG(585, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '_') goto yy619; + goto yy44; +yy586: + YYDEBUG(586, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'I') goto yy621; + if (yych == 'i') goto yy621; + goto yy44; +yy587: + YYDEBUG(587, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy622; + if (yych == 'c') goto yy622; + goto yy44; +yy588: + YYDEBUG(588, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '_') goto yy623; + goto yy44; +yy589: + YYDEBUG(589, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'D') goto yy625; + if (yych == 'd') goto yy625; + goto yy44; +yy590: + YYDEBUG(590, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'P') goto yy626; + if (yych == 'p') goto yy626; + goto yy44; +yy591: + YYDEBUG(591, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '_') goto yy627; + goto yy44; +yy592: + YYDEBUG(592, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(593, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1504 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_STRING_CAST); +} +#line 6182 "Zend/zend_language_scanner.c" +yy594: + YYDEBUG(594, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(595, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1512 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_OBJECT_CAST); +} +#line 6192 "Zend/zend_language_scanner.c" +yy596: + YYDEBUG(596, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(597, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1576 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ABSTRACT); +} +#line 6205 "Zend/zend_language_scanner.c" +yy598: + YYDEBUG(598, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(599, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1612 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_CALLABLE); +} +#line 6218 "Zend/zend_language_scanner.c" +yy600: + YYDEBUG(600, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(601, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1401 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_CONTINUE); +} +#line 6231 "Zend/zend_language_scanner.c" +yy602: + YYDEBUG(602, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy628; + if (yych == 'r') goto yy628; + goto yy44; +yy603: + YYDEBUG(603, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy629; + if (yych == 'c') goto yy629; + goto yy44; +yy604: + YYDEBUG(604, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'H') goto yy630; + if (yych == 'h') goto yy630; + goto yy44; +yy605: + YYDEBUG(605, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(606, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1341 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ENDWHILE); +} +#line 6262 "Zend/zend_language_scanner.c" +yy607: + YYDEBUG(607, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(608, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1283 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_FUNCTION); +} +#line 6275 "Zend/zend_language_scanner.c" +yy609: + YYDEBUG(609, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'T') goto yy632; + if (yych == 't') goto yy632; + goto yy44; +yy610: + YYDEBUG(610, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'O') goto yy633; + if (yych == 'o') goto yy633; + goto yy44; +yy611: + YYDEBUG(611, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'O') goto yy634; + if (yych == 'o') goto yy634; + goto yy44; +yy612: + YYDEBUG(612, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'F') goto yy635; + if (yych == 'f') goto yy635; + goto yy44; +yy613: + YYDEBUG(613, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy637; + if (yych == 'e') goto yy637; + goto yy44; +yy614: + YYDEBUG(614, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy639; + if (yych == 'e') goto yy639; + goto yy44; +yy615: + YYDEBUG(615, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'D') goto yy641; + if (yych == 'd') goto yy641; + goto yy44; +yy616: + YYDEBUG(616, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'O') goto yy643; + if (yych == 'o') goto yy643; + goto yy44; +yy617: + YYDEBUG(617, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'O') goto yy644; + if (yych == 'o') goto yy644; + goto yy82; +yy618: + YYDEBUG(618, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '_') goto yy645; + goto yy44; +yy619: + YYDEBUG(619, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(620, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1989 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_FILE); +} +#line 6347 "Zend/zend_language_scanner.c" +yy621: + YYDEBUG(621, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'O') goto yy647; + if (yych == 'o') goto yy647; + goto yy44; +yy622: + YYDEBUG(622, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'O') goto yy648; + if (yych == 'o') goto yy648; + goto yy44; +yy623: + YYDEBUG(623, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(624, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1985 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_LINE); +} +#line 6372 "Zend/zend_language_scanner.c" +yy625: + YYDEBUG(625, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '_') goto yy649; + goto yy44; +yy626: + YYDEBUG(626, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'A') goto yy650; + if (yych == 'a') goto yy650; + goto yy44; +yy627: + YYDEBUG(627, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '_') goto yy651; + goto yy44; +yy628: + YYDEBUG(628, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy653; + if (yych == 'e') goto yy653; + goto yy44; +yy629: + YYDEBUG(629, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'H') goto yy655; + if (yych == 'h') goto yy655; + goto yy44; +yy630: + YYDEBUG(630, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(631, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1385 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ENDSWITCH); +} +#line 6413 "Zend/zend_language_scanner.c" +yy632: + YYDEBUG(632, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'S') goto yy657; + if (yych == 's') goto yy657; + goto yy44; +yy633: + YYDEBUG(633, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'N') goto yy659; + if (yych == 'n') goto yy659; + goto yy44; +yy634: + YYDEBUG(634, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'F') goto yy660; + if (yych == 'f') goto yy660; + goto yy44; +yy635: + YYDEBUG(635, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(636, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1552 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_INSTEADOF); +} +#line 6444 "Zend/zend_language_scanner.c" +yy637: + YYDEBUG(637, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(638, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1421 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_INTERFACE); +} +#line 6457 "Zend/zend_language_scanner.c" +yy639: + YYDEBUG(639, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(640, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1544 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_NAMESPACE); +} +#line 6470 "Zend/zend_language_scanner.c" +yy641: + YYDEBUG(641, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(642, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1588 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_PROTECTED); +} +#line 6483 "Zend/zend_language_scanner.c" +yy643: + YYDEBUG(643, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'N') goto yy662; + if (yych == 'n') goto yy662; + goto yy44; +yy644: + YYDEBUG(644, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'M') goto yy663; + if (yych == 'm') goto yy663; + goto yy82; +yy645: + YYDEBUG(645, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(646, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1969 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_CLASS_C); +} +#line 6508 "Zend/zend_language_scanner.c" +yy647: + YYDEBUG(647, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'N') goto yy664; + if (yych == 'n') goto yy664; + goto yy44; +yy648: + YYDEBUG(648, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'M') goto yy665; + if (yych == 'm') goto yy665; + goto yy44; +yy649: + YYDEBUG(649, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '_') goto yy666; + goto yy44; +yy650: + YYDEBUG(650, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy668; + if (yych == 'c') goto yy668; + goto yy44; +yy651: + YYDEBUG(651, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(652, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1973 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_TRAIT_C); +} +#line 6544 "Zend/zend_language_scanner.c" +yy653: + YYDEBUG(653, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(654, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1369 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ENDDECLARE); +} +#line 6557 "Zend/zend_language_scanner.c" +yy655: + YYDEBUG(655, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(656, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1361 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_ENDFOREACH); +} +#line 6570 "Zend/zend_language_scanner.c" +yy657: + YYDEBUG(657, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(658, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1433 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_IMPLEMENTS); +} +#line 6583 "Zend/zend_language_scanner.c" +yy659: + YYDEBUG(659, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy669; + if (yych == 'c') goto yy669; + goto yy44; +yy660: + YYDEBUG(660, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(661, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1373 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_INSTANCEOF); +} +#line 6602 "Zend/zend_language_scanner.c" +yy662: + YYDEBUG(662, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'C') goto yy670; + if (yych == 'c') goto yy670; + goto yy44; +yy663: + YYDEBUG(663, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '^') { + if (yych <= '9') { + if (yych <= '/') goto yy671; + goto yy82; + } else { + if (yych <= '@') goto yy671; + if (yych <= 'Z') goto yy82; + goto yy671; + } + } else { + if (yych <= '`') { + if (yych <= '_') goto yy82; + goto yy671; + } else { + if (yych <= 'z') goto yy82; + if (yych <= 0x7F) goto yy671; + goto yy82; + } + } +yy664: + YYDEBUG(664, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '_') goto yy673; + goto yy44; +yy665: + YYDEBUG(665, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'P') goto yy674; + if (yych == 'p') goto yy674; + goto yy44; +yy666: + YYDEBUG(666, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(667, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1981 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_METHOD_C); +} +#line 6654 "Zend/zend_language_scanner.c" +yy668: + YYDEBUG(668, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy675; + if (yych == 'e') goto yy675; + goto yy44; +yy669: + YYDEBUG(669, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy676; + if (yych == 'e') goto yy676; + goto yy44; +yy670: + YYDEBUG(670, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy678; + if (yych == 'e') goto yy678; + goto yy44; +yy671: + YYDEBUG(671, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(672, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1295 "Zend/zend_language_scanner.l" + { + yyless(yyleng - 1); + HANDLE_NEWLINES(yytext, yyleng); + RETURN_TOKEN(T_YIELD_FROM); +} +#line 6684 "Zend/zend_language_scanner.c" +yy673: + YYDEBUG(673, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '_') goto yy680; + goto yy44; +yy674: + YYDEBUG(674, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'I') goto yy682; + if (yych == 'i') goto yy682; + goto yy44; +yy675: + YYDEBUG(675, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '_') goto yy683; + goto yy44; +yy676: + YYDEBUG(676, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(677, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1532 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_INCLUDE_ONCE); +} +#line 6713 "Zend/zend_language_scanner.c" +yy678: + YYDEBUG(678, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(679, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1540 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_REQUIRE_ONCE); +} +#line 6726 "Zend/zend_language_scanner.c" +yy680: + YYDEBUG(680, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(681, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1977 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_FUNC_C); +} +#line 6739 "Zend/zend_language_scanner.c" +yy682: + YYDEBUG(682, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'L') goto yy684; + if (yych == 'l') goto yy684; + goto yy44; +yy683: + YYDEBUG(683, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '_') goto yy685; + goto yy44; +yy684: + YYDEBUG(684, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'E') goto yy687; + if (yych == 'e') goto yy687; + goto yy44; +yy685: + YYDEBUG(685, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(686, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1997 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_NS_C); +} +#line 6769 "Zend/zend_language_scanner.c" +yy687: + YYDEBUG(687, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'R') goto yy688; + if (yych != 'r') goto yy44; +yy688: + YYDEBUG(688, *YYCURSOR); + yych = *++YYCURSOR; + if (yybm[0+yych] & 16) { + goto yy43; + } + YYDEBUG(689, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1568 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_HALT_COMPILER); +} +#line 6787 "Zend/zend_language_scanner.c" + } +/* *********************************** */ +yyc_ST_LOOKING_FOR_PROPERTY: + { + static const unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 64, 64, 0, 0, 64, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 64, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 0, 0, 0, 0, 0, 0, + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 0, 0, 0, 0, 128, + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 0, 0, 0, 0, 0, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + }; + YYDEBUG(690, *YYCURSOR); + YYFILL(2); + yych = *YYCURSOR; + if (yybm[0+yych] & 64) { + goto yy694; + } + if (yych <= '^') { + if (yych <= '-') { + if (yych >= '-') goto yy697; + } else { + if (yych <= '@') goto yy692; + if (yych <= 'Z') goto yy698; + } + } else { + if (yych <= '`') { + if (yych <= '_') goto yy698; + } else { + if (yych <= 'z') goto yy698; + if (yych >= 0x80) goto yy698; + } + } +yy692: + YYDEBUG(692, *YYCURSOR); + ++YYCURSOR; +yy693: + YYDEBUG(693, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1455 "Zend/zend_language_scanner.l" + { + yyless(0); + yy_pop_state(); + goto restart; +} +#line 6859 "Zend/zend_language_scanner.c" +yy694: + YYDEBUG(694, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(695, *YYCURSOR); + if (yybm[0+yych] & 64) { + goto yy694; + } + YYDEBUG(696, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1442 "Zend/zend_language_scanner.l" + { + goto return_whitespace; +} +#line 6875 "Zend/zend_language_scanner.c" +yy697: + YYDEBUG(697, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '>') goto yy701; + goto yy693; +yy698: + YYDEBUG(698, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(699, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy698; + } + YYDEBUG(700, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1450 "Zend/zend_language_scanner.l" + { + yy_pop_state(); + RETURN_TOKEN_WITH_STR(T_STRING, 0); +} +#line 6897 "Zend/zend_language_scanner.c" +yy701: + YYDEBUG(701, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(702, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1446 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN(T_OBJECT_OPERATOR); +} +#line 6907 "Zend/zend_language_scanner.c" + } +/* *********************************** */ +yyc_ST_BACKQUOTE: + { + static const unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 0, 0, 0, 0, 0, 0, + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 0, 0, 0, 0, 128, + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 0, 0, 0, 0, 0, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + }; + YYDEBUG(703, *YYCURSOR); + YYFILL(2); + yych = *YYCURSOR; + if (yych <= '_') { + if (yych == '$') goto yy707; + } else { + if (yych <= '`') goto yy708; + if (yych == '{') goto yy710; + } + YYDEBUG(705, *YYCURSOR); + ++YYCURSOR; +yy706: + YYDEBUG(706, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2601 "Zend/zend_language_scanner.l" + { + if (YYCURSOR > YYLIMIT) { + RETURN_TOKEN(END); + } + if (yytext[0] == '\\' && YYCURSOR < YYLIMIT) { + YYCURSOR++; + } + + while (YYCURSOR < YYLIMIT) { + switch (*YYCURSOR++) { + case '`': + break; + case '$': + if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') { + break; + } + continue; + case '{': + if (*YYCURSOR == '$') { + break; + } + continue; + case '\\': + if (YYCURSOR < YYLIMIT) { + YYCURSOR++; + } + /* fall through */ + default: + continue; + } + + YYCURSOR--; + break; + } + + yyleng = YYCURSOR - SCNG(yy_text); + + if (EXPECTED(zend_scan_escape_string(zendlval, yytext, yyleng, '`') == SUCCESS) + || !PARSER_MODE()) { + RETURN_TOKEN_WITH_VAL(T_ENCAPSED_AND_WHITESPACE); + } else { + RETURN_TOKEN(T_ERROR); + } +} +#line 7005 "Zend/zend_language_scanner.c" +yy707: + YYDEBUG(707, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '_') { + if (yych <= '@') goto yy706; + if (yych <= 'Z') goto yy711; + if (yych <= '^') goto yy706; + goto yy711; + } else { + if (yych <= 'z') { + if (yych <= '`') goto yy706; + goto yy711; + } else { + if (yych <= '{') goto yy714; + if (yych <= 0x7F) goto yy706; + goto yy711; + } + } +yy708: + YYDEBUG(708, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(709, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2541 "Zend/zend_language_scanner.l" + { + BEGIN(ST_IN_SCRIPTING); + RETURN_TOKEN('`'); +} +#line 7034 "Zend/zend_language_scanner.c" +yy710: + YYDEBUG(710, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '$') goto yy716; + goto yy706; +yy711: + YYDEBUG(711, *YYCURSOR); + YYMARKER = ++YYCURSOR; + YYFILL(3); + yych = *YYCURSOR; + YYDEBUG(712, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy711; + } + if (yych == '-') goto yy718; + if (yych <= '@') goto yy713; + if (yych <= '[') goto yy720; +yy713: + YYDEBUG(713, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2122 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN_WITH_STR(T_VARIABLE, 1); +} +#line 7059 "Zend/zend_language_scanner.c" +yy714: + YYDEBUG(714, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(715, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1747 "Zend/zend_language_scanner.l" + { + yy_push_state(ST_LOOKING_FOR_VARNAME); + RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES); +} +#line 7070 "Zend/zend_language_scanner.c" +yy716: + YYDEBUG(716, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(717, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2529 "Zend/zend_language_scanner.l" + { + yy_push_state(ST_IN_SCRIPTING); + yyless(1); + RETURN_TOKEN(T_CURLY_OPEN); +} +#line 7082 "Zend/zend_language_scanner.c" +yy718: + YYDEBUG(718, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '>') goto yy722; +yy719: + YYDEBUG(719, *YYCURSOR); + YYCURSOR = YYMARKER; + goto yy713; +yy720: + YYDEBUG(720, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(721, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2116 "Zend/zend_language_scanner.l" + { + yyless(yyleng - 1); + yy_push_state(ST_VAR_OFFSET); + RETURN_TOKEN_WITH_STR(T_VARIABLE, 1); +} +#line 7102 "Zend/zend_language_scanner.c" +yy722: + YYDEBUG(722, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '_') { + if (yych <= '@') goto yy719; + if (yych <= 'Z') goto yy723; + if (yych <= '^') goto yy719; + } else { + if (yych <= '`') goto yy719; + if (yych <= 'z') goto yy723; + if (yych <= 0x7F) goto yy719; + } +yy723: + YYDEBUG(723, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(724, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2108 "Zend/zend_language_scanner.l" + { + yyless(yyleng - 3); + yy_push_state(ST_LOOKING_FOR_PROPERTY); + RETURN_TOKEN_WITH_STR(T_VARIABLE, 1); +} +#line 7126 "Zend/zend_language_scanner.c" + } +/* *********************************** */ +yyc_ST_DOUBLE_QUOTES: + { + static const unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 0, 0, 0, 0, 0, 0, + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 0, 0, 0, 0, 128, + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 0, 0, 0, 0, 0, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + }; + YYDEBUG(725, *YYCURSOR); + YYFILL(2); + yych = *YYCURSOR; + if (yych <= '#') { + if (yych == '"') goto yy729; + } else { + if (yych <= '$') goto yy731; + if (yych == '{') goto yy732; + } + YYDEBUG(727, *YYCURSOR); + ++YYCURSOR; +yy728: + YYDEBUG(728, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2547 "Zend/zend_language_scanner.l" + { + if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) { + YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1; + SET_DOUBLE_QUOTES_SCANNED_LENGTH(0); + + goto double_quotes_scan_done; + } + + if (YYCURSOR > YYLIMIT) { + RETURN_TOKEN(END); + } + if (yytext[0] == '\\' && YYCURSOR < YYLIMIT) { + YYCURSOR++; + } + + while (YYCURSOR < YYLIMIT) { + switch (*YYCURSOR++) { + case '"': + break; + case '$': + if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') { + break; + } + continue; + case '{': + if (*YYCURSOR == '$') { + break; + } + continue; + case '\\': + if (YYCURSOR < YYLIMIT) { + YYCURSOR++; + } + /* fall through */ + default: + continue; + } + + YYCURSOR--; + break; + } + +double_quotes_scan_done: + yyleng = YYCURSOR - SCNG(yy_text); + + if (EXPECTED(zend_scan_escape_string(zendlval, yytext, yyleng, '"') == SUCCESS) + || !PARSER_MODE()) { + RETURN_TOKEN_WITH_VAL(T_ENCAPSED_AND_WHITESPACE); + } else { + RETURN_TOKEN(T_ERROR); + } +} +#line 7232 "Zend/zend_language_scanner.c" +yy729: + YYDEBUG(729, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(730, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2536 "Zend/zend_language_scanner.l" + { + BEGIN(ST_IN_SCRIPTING); + RETURN_TOKEN('"'); +} +#line 7243 "Zend/zend_language_scanner.c" +yy731: + YYDEBUG(731, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '_') { + if (yych <= '@') goto yy728; + if (yych <= 'Z') goto yy733; + if (yych <= '^') goto yy728; + goto yy733; + } else { + if (yych <= 'z') { + if (yych <= '`') goto yy728; + goto yy733; + } else { + if (yych <= '{') goto yy736; + if (yych <= 0x7F) goto yy728; + goto yy733; + } + } +yy732: + YYDEBUG(732, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '$') goto yy738; + goto yy728; +yy733: + YYDEBUG(733, *YYCURSOR); + YYMARKER = ++YYCURSOR; + YYFILL(3); + yych = *YYCURSOR; + YYDEBUG(734, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy733; + } + if (yych == '-') goto yy740; + if (yych <= '@') goto yy735; + if (yych <= '[') goto yy742; +yy735: + YYDEBUG(735, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2122 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN_WITH_STR(T_VARIABLE, 1); +} +#line 7286 "Zend/zend_language_scanner.c" +yy736: + YYDEBUG(736, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(737, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1747 "Zend/zend_language_scanner.l" + { + yy_push_state(ST_LOOKING_FOR_VARNAME); + RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES); +} +#line 7297 "Zend/zend_language_scanner.c" +yy738: + YYDEBUG(738, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(739, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2529 "Zend/zend_language_scanner.l" + { + yy_push_state(ST_IN_SCRIPTING); + yyless(1); + RETURN_TOKEN(T_CURLY_OPEN); +} +#line 7309 "Zend/zend_language_scanner.c" +yy740: + YYDEBUG(740, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '>') goto yy744; +yy741: + YYDEBUG(741, *YYCURSOR); + YYCURSOR = YYMARKER; + goto yy735; +yy742: + YYDEBUG(742, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(743, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2116 "Zend/zend_language_scanner.l" + { + yyless(yyleng - 1); + yy_push_state(ST_VAR_OFFSET); + RETURN_TOKEN_WITH_STR(T_VARIABLE, 1); +} +#line 7329 "Zend/zend_language_scanner.c" +yy744: + YYDEBUG(744, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '_') { + if (yych <= '@') goto yy741; + if (yych <= 'Z') goto yy745; + if (yych <= '^') goto yy741; + } else { + if (yych <= '`') goto yy741; + if (yych <= 'z') goto yy745; + if (yych <= 0x7F) goto yy741; + } +yy745: + YYDEBUG(745, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(746, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2108 "Zend/zend_language_scanner.l" + { + yyless(yyleng - 3); + yy_push_state(ST_LOOKING_FOR_PROPERTY); + RETURN_TOKEN_WITH_STR(T_VARIABLE, 1); +} +#line 7353 "Zend/zend_language_scanner.c" + } +/* *********************************** */ +yyc_ST_HEREDOC: + { + static const unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 0, 0, 0, 0, 0, 0, + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 0, 0, 0, 0, 128, + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 0, 0, 0, 0, 0, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + }; + YYDEBUG(747, *YYCURSOR); + YYFILL(2); + yych = *YYCURSOR; + if (yych == '$') goto yy751; + if (yych == '{') goto yy752; + YYDEBUG(749, *YYCURSOR); + ++YYCURSOR; +yy750: + YYDEBUG(750, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2647 "Zend/zend_language_scanner.l" + { + zend_heredoc_label *heredoc_label = zend_ptr_stack_top(&SCNG(heredoc_label_stack)); + int newline = 0, indentation = 0, spacing = 0; + + if (YYCURSOR > YYLIMIT) { + RETURN_TOKEN(END); + } + + YYCURSOR--; + + while (YYCURSOR < YYLIMIT) { + switch (*YYCURSOR++) { + case '\r': + if (*YYCURSOR == '\n') { + YYCURSOR++; + } + /* fall through */ + case '\n': + indentation = spacing = 0; + + while (YYCURSOR < YYLIMIT && (*YYCURSOR == ' ' || *YYCURSOR == '\t')) { + if (*YYCURSOR == '\t') { + spacing |= HEREDOC_USING_TABS; + } else { + spacing |= HEREDOC_USING_SPACES; + } + ++YYCURSOR; + ++indentation; + } + + if (YYCURSOR == YYLIMIT) { + yyleng = YYCURSOR - SCNG(yy_text); + HANDLE_NEWLINES(yytext, yyleng); + ZVAL_NULL(zendlval); + RETURN_TOKEN_WITH_VAL(T_ENCAPSED_AND_WHITESPACE); + } + + /* Check for ending label on the next line */ + if (IS_LABEL_START(*YYCURSOR) && heredoc_label->length < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, heredoc_label->label, heredoc_label->length)) { + if (IS_LABEL_SUCCESSOR(YYCURSOR[heredoc_label->length])) { + continue; + } + + if (spacing == (HEREDOC_USING_SPACES | HEREDOC_USING_TABS)) { + zend_throw_exception(zend_ce_parse_error, "Invalid indentation - tabs and spaces cannot be mixed", 0); + if (PARSER_MODE()) { + RETURN_TOKEN(T_ERROR); + } + } + + /* newline before label will be subtracted from returned text, but + * yyleng/yytext will include it, for zend_highlight/strip, tokenizer, etc. */ + if (YYCURSOR[-indentation - 2] == '\r' && YYCURSOR[-indentation - 1] == '\n') { + newline = 2; /* Windows newline */ + } else { + newline = 1; + } + + CG(increment_lineno) = 1; /* For newline before label */ + + if (SCNG(heredoc_scan_ahead)) { + SCNG(heredoc_indentation) = indentation; + SCNG(heredoc_indentation_uses_spaces) = (spacing == HEREDOC_USING_SPACES); + } else { + YYCURSOR -= indentation; + } + + BEGIN(ST_END_HEREDOC); + + goto heredoc_scan_done; + } + continue; + case '$': + if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') { + break; + } + continue; + case '{': + if (*YYCURSOR == '$') { + break; + } + continue; + case '\\': + if (YYCURSOR < YYLIMIT && *YYCURSOR != '\n' && *YYCURSOR != '\r') { + YYCURSOR++; + } + /* fall through */ + default: + continue; + } + + YYCURSOR--; + break; + } + +heredoc_scan_done: + + yyleng = YYCURSOR - SCNG(yy_text); + ZVAL_STRINGL(zendlval, yytext, yyleng - newline); + + if (!SCNG(heredoc_scan_ahead) && !EG(exception) && PARSER_MODE()) { + zend_bool newline_at_start = *(yytext - 1) == '\n' || *(yytext - 1) == '\r'; + zend_string *copy = Z_STR_P(zendlval); + + if (!strip_multiline_string_indentation( + zendlval, heredoc_label->indentation, heredoc_label->indentation_uses_spaces, + newline_at_start, newline != 0)) { + RETURN_TOKEN(T_ERROR); + } + + if (UNEXPECTED(zend_scan_escape_string(zendlval, ZSTR_VAL(copy), ZSTR_LEN(copy), 0) != SUCCESS)) { + zend_string_efree(copy); + RETURN_TOKEN(T_ERROR); + } + + zend_string_efree(copy); + } else { + HANDLE_NEWLINES(yytext, yyleng - newline); + } + + RETURN_TOKEN_WITH_VAL(T_ENCAPSED_AND_WHITESPACE); +} +#line 7525 "Zend/zend_language_scanner.c" +yy751: + YYDEBUG(751, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '_') { + if (yych <= '@') goto yy750; + if (yych <= 'Z') goto yy753; + if (yych <= '^') goto yy750; + goto yy753; + } else { + if (yych <= 'z') { + if (yych <= '`') goto yy750; + goto yy753; + } else { + if (yych <= '{') goto yy756; + if (yych <= 0x7F) goto yy750; + goto yy753; + } + } +yy752: + YYDEBUG(752, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '$') goto yy758; + goto yy750; +yy753: + YYDEBUG(753, *YYCURSOR); + YYMARKER = ++YYCURSOR; + YYFILL(3); + yych = *YYCURSOR; + YYDEBUG(754, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy753; + } + if (yych == '-') goto yy760; + if (yych <= '@') goto yy755; + if (yych <= '[') goto yy762; +yy755: + YYDEBUG(755, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2122 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN_WITH_STR(T_VARIABLE, 1); +} +#line 7568 "Zend/zend_language_scanner.c" +yy756: + YYDEBUG(756, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(757, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1747 "Zend/zend_language_scanner.l" + { + yy_push_state(ST_LOOKING_FOR_VARNAME); + RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES); +} +#line 7579 "Zend/zend_language_scanner.c" +yy758: + YYDEBUG(758, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(759, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2529 "Zend/zend_language_scanner.l" + { + yy_push_state(ST_IN_SCRIPTING); + yyless(1); + RETURN_TOKEN(T_CURLY_OPEN); +} +#line 7591 "Zend/zend_language_scanner.c" +yy760: + YYDEBUG(760, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '>') goto yy764; +yy761: + YYDEBUG(761, *YYCURSOR); + YYCURSOR = YYMARKER; + goto yy755; +yy762: + YYDEBUG(762, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(763, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2116 "Zend/zend_language_scanner.l" + { + yyless(yyleng - 1); + yy_push_state(ST_VAR_OFFSET); + RETURN_TOKEN_WITH_STR(T_VARIABLE, 1); +} +#line 7611 "Zend/zend_language_scanner.c" +yy764: + YYDEBUG(764, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '_') { + if (yych <= '@') goto yy761; + if (yych <= 'Z') goto yy765; + if (yych <= '^') goto yy761; + } else { + if (yych <= '`') goto yy761; + if (yych <= 'z') goto yy765; + if (yych <= 0x7F) goto yy761; + } +yy765: + YYDEBUG(765, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(766, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2108 "Zend/zend_language_scanner.l" + { + yyless(yyleng - 3); + yy_push_state(ST_LOOKING_FOR_PROPERTY); + RETURN_TOKEN_WITH_STR(T_VARIABLE, 1); +} +#line 7635 "Zend/zend_language_scanner.c" + } +/* *********************************** */ +yyc_ST_LOOKING_FOR_VARNAME: + { + static const unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 0, 0, 0, 0, 0, 0, + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 0, 0, 0, 0, 128, + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 0, 0, 0, 0, 0, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + }; + YYDEBUG(767, *YYCURSOR); + YYFILL(2); + yych = *YYCURSOR; + if (yych <= '_') { + if (yych <= '@') goto yy769; + if (yych <= 'Z') goto yy771; + if (yych >= '_') goto yy771; + } else { + if (yych <= '`') goto yy769; + if (yych <= 'z') goto yy771; + if (yych >= 0x80) goto yy771; + } +yy769: + YYDEBUG(769, *YYCURSOR); + ++YYCURSOR; +yy770: + YYDEBUG(770, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1770 "Zend/zend_language_scanner.l" + { + yyless(0); + yy_pop_state(); + yy_push_state(ST_IN_SCRIPTING); + goto restart; +} +#line 7699 "Zend/zend_language_scanner.c" +yy771: + YYDEBUG(771, *YYCURSOR); + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '_') { + if (yych <= '@') { + if (yych <= '/') goto yy770; + if (yych <= '9') goto yy773; + goto yy770; + } else { + if (yych <= '[') goto yy773; + if (yych <= '^') goto yy770; + goto yy773; + } + } else { + if (yych <= '|') { + if (yych <= '`') goto yy770; + if (yych <= 'z') goto yy773; + goto yy770; + } else { + if (yych <= '}') goto yy773; + if (yych <= 0x7F) goto yy770; + goto yy773; + } + } +yy772: + YYDEBUG(772, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; +yy773: + YYDEBUG(773, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy772; + } + if (yych <= '@') goto yy774; + if (yych <= '[') goto yy775; + if (yych == '}') goto yy775; +yy774: + YYDEBUG(774, *YYCURSOR); + YYCURSOR = YYMARKER; + goto yy770; +yy775: + YYDEBUG(775, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(776, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1762 "Zend/zend_language_scanner.l" + { + yyless(yyleng - 1); + yy_pop_state(); + yy_push_state(ST_IN_SCRIPTING); + RETURN_TOKEN_WITH_STR(T_STRING_VARNAME, 0); +} +#line 7753 "Zend/zend_language_scanner.c" + } +/* *********************************** */ +yyc_ST_VAR_OFFSET: + { + static const unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 240, 240, 176, 176, 176, 176, 176, 176, + 176, 176, 0, 0, 0, 0, 0, 0, + 0, 160, 160, 160, 160, 160, 160, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 0, 0, 0, 0, 32, + 0, 160, 160, 160, 160, 160, 160, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 0, 0, 0, 0, 0, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + }; + YYDEBUG(777, *YYCURSOR); + YYFILL(2); + yych = *YYCURSOR; + if (yych <= '0') { + if (yych <= ' ') { + if (yych <= '\f') { + if (yych <= 0x08) goto yy779; + if (yych <= '\n') goto yy781; + } else { + if (yych <= '\r') goto yy781; + if (yych >= ' ') goto yy781; + } + } else { + if (yych <= '$') { + if (yych <= '"') goto yy783; + if (yych <= '#') goto yy781; + goto yy785; + } else { + if (yych == '\'') goto yy781; + if (yych <= '/') goto yy783; + goto yy786; + } + } + } else { + if (yych <= ']') { + if (yych <= 'Z') { + if (yych <= '9') goto yy788; + if (yych <= '@') goto yy783; + goto yy790; + } else { + if (yych <= '[') goto yy783; + if (yych <= '\\') goto yy781; + goto yy793; + } + } else { + if (yych <= '`') { + if (yych == '_') goto yy790; + goto yy783; + } else { + if (yych <= 'z') goto yy790; + if (yych <= '~') goto yy783; + if (yych >= 0x80) goto yy790; + } + } + } +yy779: + YYDEBUG(779, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(780, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2862 "Zend/zend_language_scanner.l" + { + if (YYCURSOR > YYLIMIT) { + RETURN_TOKEN(END); + } + + if (!SCNG(heredoc_scan_ahead)) { + zend_error(E_COMPILE_WARNING, "Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); + } + if (PARSER_MODE()) { + goto restart; + } else { + RETURN_TOKEN(T_BAD_CHARACTER); + } +} +#line 7857 "Zend/zend_language_scanner.c" +yy781: + YYDEBUG(781, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(782, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2136 "Zend/zend_language_scanner.l" + { + /* Invalid rule to return a more explicit parse error with proper line number */ + yyless(0); + yy_pop_state(); + ZVAL_NULL(zendlval); + RETURN_TOKEN_WITH_VAL(T_ENCAPSED_AND_WHITESPACE); +} +#line 7871 "Zend/zend_language_scanner.c" +yy783: + YYDEBUG(783, *YYCURSOR); + ++YYCURSOR; +yy784: + YYDEBUG(784, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2131 "Zend/zend_language_scanner.l" + { + /* Only '[' or '-' can be valid, but returning other tokens will allow a more explicit parse error */ + RETURN_TOKEN(yytext[0]); +} +#line 7883 "Zend/zend_language_scanner.c" +yy785: + YYDEBUG(785, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '_') { + if (yych <= '@') goto yy784; + if (yych <= 'Z') goto yy795; + if (yych <= '^') goto yy784; + goto yy795; + } else { + if (yych <= '`') goto yy784; + if (yych <= 'z') goto yy795; + if (yych <= 0x7F) goto yy784; + goto yy795; + } +yy786: + YYDEBUG(786, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= 'X') { + if (yych <= 'A') { + if (yych <= '/') goto yy787; + if (yych <= '9') goto yy798; + } else { + if (yych <= 'B') goto yy801; + if (yych >= 'X') goto yy803; + } + } else { + if (yych <= 'a') { + if (yych == '_') goto yy804; + } else { + if (yych <= 'b') goto yy801; + if (yych == 'x') goto yy803; + } + } +yy787: + YYDEBUG(787, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1924 "Zend/zend_language_scanner.l" + { /* Offset could be treated as a long */ + if (yyleng < MAX_LENGTH_OF_LONG - 1 || (yyleng == MAX_LENGTH_OF_LONG - 1 && strcmp(yytext, long_min_digits) < 0)) { + char *end; + errno = 0; + ZVAL_LONG(zendlval, ZEND_STRTOL(yytext, &end, 10)); + if (errno == ERANGE) { + goto string; + } + ZEND_ASSERT(end == yytext + yyleng); + } else { +string: + ZVAL_STRINGL(zendlval, yytext, yyleng); + } + RETURN_TOKEN_WITH_VAL(T_NUM_STRING); +} +#line 7937 "Zend/zend_language_scanner.c" +yy788: + YYDEBUG(788, *YYCURSOR); + yyaccept = 0; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(789, *YYCURSOR); + if (yybm[0+yych] & 16) { + goto yy788; + } + if (yych == '_') goto yy804; + goto yy787; +yy790: + YYDEBUG(790, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(791, *YYCURSOR); + if (yybm[0+yych] & 32) { + goto yy790; + } + YYDEBUG(792, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2144 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN_WITH_STR(T_STRING, 0); +} +#line 7965 "Zend/zend_language_scanner.c" +yy793: + YYDEBUG(793, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(794, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2126 "Zend/zend_language_scanner.l" + { + yy_pop_state(); + RETURN_TOKEN(']'); +} +#line 7976 "Zend/zend_language_scanner.c" +yy795: + YYDEBUG(795, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(796, *YYCURSOR); + if (yych <= '^') { + if (yych <= '9') { + if (yych >= '0') goto yy795; + } else { + if (yych <= '@') goto yy797; + if (yych <= 'Z') goto yy795; + } + } else { + if (yych <= '`') { + if (yych <= '_') goto yy795; + } else { + if (yych <= 'z') goto yy795; + if (yych >= 0x80) goto yy795; + } + } +yy797: + YYDEBUG(797, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2122 "Zend/zend_language_scanner.l" + { + RETURN_TOKEN_WITH_STR(T_VARIABLE, 1); +} +#line 8005 "Zend/zend_language_scanner.c" +yy798: + YYDEBUG(798, *YYCURSOR); + yyaccept = 1; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(799, *YYCURSOR); + if (yych <= '/') goto yy800; + if (yych <= '9') goto yy798; + if (yych == '_') goto yy804; +yy800: + YYDEBUG(800, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 1940 "Zend/zend_language_scanner.l" + { /* Offset must be treated as a string */ + if (yyleng == 1) { + ZVAL_INTERNED_STR(zendlval, ZSTR_CHAR((zend_uchar)*(yytext))); + } else { + ZVAL_STRINGL(zendlval, yytext, yyleng); + } + RETURN_TOKEN_WITH_VAL(T_NUM_STRING); +} +#line 8028 "Zend/zend_language_scanner.c" +yy801: + YYDEBUG(801, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + if (yybm[0+yych] & 64) { + goto yy805; + } +yy802: + YYDEBUG(802, *YYCURSOR); + YYCURSOR = YYMARKER; + if (yyaccept == 0) { + goto yy787; + } else { + goto yy800; + } +yy803: + YYDEBUG(803, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + if (yybm[0+yych] & 128) { + goto yy807; + } + goto yy802; +yy804: + YYDEBUG(804, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + if (yych <= '/') goto yy802; + if (yych <= '9') goto yy798; + goto yy802; +yy805: + YYDEBUG(805, *YYCURSOR); + yyaccept = 1; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(806, *YYCURSOR); + if (yybm[0+yych] & 64) { + goto yy805; + } + if (yych == '_') goto yy801; + goto yy800; +yy807: + YYDEBUG(807, *YYCURSOR); + yyaccept = 1; + YYMARKER = ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(808, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy807; + } + if (yych == '_') goto yy803; + goto yy800; + } +/* *********************************** */ +yyc_SHEBANG: + { + static const unsigned char yybm[] = { + 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, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 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(809, *YYCURSOR); + YYFILL(2); + yych = *YYCURSOR; + if (yych == '#') goto yy813; + YYDEBUG(811, *YYCURSOR); + ++YYCURSOR; +yy812: + YYDEBUG(812, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2007 "Zend/zend_language_scanner.l" + { + yyless(0); + BEGIN(INITIAL); + goto restart; +} +#line 8139 "Zend/zend_language_scanner.c" +yy813: + YYDEBUG(813, *YYCURSOR); + yych = *++YYCURSOR; + if (yych != '!') goto yy812; +yy814: + YYDEBUG(814, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(815, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy814; + } + YYDEBUG(816, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(817, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2001 "Zend/zend_language_scanner.l" + { + CG(zend_lineno)++; + BEGIN(INITIAL); + goto restart; +} +#line 8163 "Zend/zend_language_scanner.c" + } +/* *********************************** */ +yyc_INITIAL: + YYDEBUG(818, *YYCURSOR); + YYFILL(7); + yych = *YYCURSOR; + if (yych == '<') goto yy822; + YYDEBUG(820, *YYCURSOR); + ++YYCURSOR; +yy821: + YYDEBUG(821, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2052 "Zend/zend_language_scanner.l" + { + if (YYCURSOR > YYLIMIT) { + RETURN_TOKEN(END); + } + +inline_char_handler: + + while (1) { + YYCTYPE *ptr = memchr(YYCURSOR, '<', YYLIMIT - YYCURSOR); + + YYCURSOR = ptr ? ptr + 1 : YYLIMIT; + + if (YYCURSOR >= YYLIMIT) { + break; + } + + if (*YYCURSOR == '?') { + if (CG(short_tags) /* <? */ + || (*(YYCURSOR + 1) == '=') /* <?= */ + || (!strncasecmp((char*)YYCURSOR + 1, "php", 3) && /* <?php[ \t\r\n] */ + (YYCURSOR + 4 == YYLIMIT || + YYCURSOR[4] == ' ' || YYCURSOR[4] == '\t' || + YYCURSOR[4] == '\n' || YYCURSOR[4] == '\r')) + ) { + YYCURSOR--; + break; + } + } + } + + yyleng = YYCURSOR - SCNG(yy_text); + + if (SCNG(output_filter)) { + size_t readsize; + char *s = NULL; + size_t sz = 0; + // TODO: avoid reallocation ??? + readsize = SCNG(output_filter)((unsigned char **)&s, &sz, (unsigned char *)yytext, (size_t)yyleng); + ZVAL_STRINGL(zendlval, s, sz); + efree(s); + if (readsize < yyleng) { + yyless(readsize); + } + } else if (yyleng == 1) { + ZVAL_INTERNED_STR(zendlval, ZSTR_CHAR((zend_uchar)*yytext)); + } else { + ZVAL_STRINGL(zendlval, yytext, yyleng); + } + HANDLE_NEWLINES(yytext, yyleng); + RETURN_TOKEN_WITH_VAL(T_INLINE_HTML); +} +#line 8228 "Zend/zend_language_scanner.c" +yy822: + YYDEBUG(822, *YYCURSOR); + yych = *++YYCURSOR; + if (yych != '?') goto yy821; + YYDEBUG(823, *YYCURSOR); + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= 'O') { + if (yych == '=') goto yy825; + } else { + if (yych <= 'P') goto yy827; + if (yych == 'p') goto yy827; + } +yy824: + YYDEBUG(824, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2043 "Zend/zend_language_scanner.l" + { + if (CG(short_tags)) { + BEGIN(ST_IN_SCRIPTING); + RETURN_OR_SKIP_TOKEN(T_OPEN_TAG); + } else { + goto inline_char_handler; + } +} +#line 8253 "Zend/zend_language_scanner.c" +yy825: + YYDEBUG(825, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(826, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2013 "Zend/zend_language_scanner.l" + { + BEGIN(ST_IN_SCRIPTING); + if (PARSER_MODE()) { + RETURN_TOKEN(T_ECHO); + } + RETURN_TOKEN(T_OPEN_TAG_WITH_ECHO); +} +#line 8267 "Zend/zend_language_scanner.c" +yy827: + YYDEBUG(827, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'H') goto yy829; + if (yych == 'h') goto yy829; +yy828: + YYDEBUG(828, *YYCURSOR); + YYCURSOR = YYMARKER; + goto yy824; +yy829: + YYDEBUG(829, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'P') goto yy830; + if (yych != 'p') goto yy828; +yy830: + YYDEBUG(830, *YYCURSOR); + yych = *++YYCURSOR; + if (yych <= '\f') { + if (yych <= 0x08) goto yy831; + if (yych <= '\n') goto yy832; + } else { + if (yych <= '\r') goto yy834; + if (yych == ' ') goto yy832; + } +yy831: + YYDEBUG(831, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2028 "Zend/zend_language_scanner.l" + { + /* Allow <?php followed by end of file. */ + if (YYCURSOR == YYLIMIT) { + BEGIN(ST_IN_SCRIPTING); + RETURN_OR_SKIP_TOKEN(T_OPEN_TAG); + } + /* Degenerate case: <?phpX is interpreted as <? phpX with short tags. */ + if (CG(short_tags)) { + yyless(2); + BEGIN(ST_IN_SCRIPTING); + RETURN_OR_SKIP_TOKEN(T_OPEN_TAG); + } + goto inline_char_handler; +} +#line 8310 "Zend/zend_language_scanner.c" +yy832: + YYDEBUG(832, *YYCURSOR); + ++YYCURSOR; +yy833: + YYDEBUG(833, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2022 "Zend/zend_language_scanner.l" + { + HANDLE_NEWLINE(yytext[yyleng-1]); + BEGIN(ST_IN_SCRIPTING); + RETURN_OR_SKIP_TOKEN(T_OPEN_TAG); +} +#line 8323 "Zend/zend_language_scanner.c" +yy834: + YYDEBUG(834, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '\n') goto yy832; + goto yy833; +/* *********************************** */ +yyc_ST_END_HEREDOC: + YYDEBUG(835, *YYCURSOR); + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(837, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(838, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2515 "Zend/zend_language_scanner.l" + { + zend_heredoc_label *heredoc_label = zend_ptr_stack_pop(&SCNG(heredoc_label_stack)); + + yyleng = heredoc_label->indentation + heredoc_label->length; + YYCURSOR += yyleng - 1; + + heredoc_label_dtor(heredoc_label); + efree(heredoc_label); + + BEGIN(ST_IN_SCRIPTING); + RETURN_TOKEN(T_END_HEREDOC); +} +#line 8351 "Zend/zend_language_scanner.c" +/* *********************************** */ +yyc_ST_NOWDOC: + YYDEBUG(839, *YYCURSOR); + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(841, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(842, *YYCURSOR); + yyleng = YYCURSOR - SCNG(yy_text); +#line 2771 "Zend/zend_language_scanner.l" + { + zend_heredoc_label *heredoc_label = zend_ptr_stack_top(&SCNG(heredoc_label_stack)); + int newline = 0, indentation = 0, spacing = -1; + + if (YYCURSOR > YYLIMIT) { + RETURN_TOKEN(END); + } + + YYCURSOR--; + + while (YYCURSOR < YYLIMIT) { + switch (*YYCURSOR++) { + case '\r': + if (*YYCURSOR == '\n') { + YYCURSOR++; + } + /* fall through */ + case '\n': + indentation = spacing = 0; + + while (YYCURSOR < YYLIMIT && (*YYCURSOR == ' ' || *YYCURSOR == '\t')) { + if (*YYCURSOR == '\t') { + spacing |= HEREDOC_USING_TABS; + } else { + spacing |= HEREDOC_USING_SPACES; + } + ++YYCURSOR; + ++indentation; + } + + if (YYCURSOR == YYLIMIT) { + yyleng = YYCURSOR - SCNG(yy_text); + HANDLE_NEWLINES(yytext, yyleng); + ZVAL_NULL(zendlval); + RETURN_TOKEN_WITH_VAL(T_ENCAPSED_AND_WHITESPACE); + } + + /* Check for ending label on the next line */ + if (IS_LABEL_START(*YYCURSOR) && heredoc_label->length < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, heredoc_label->label, heredoc_label->length)) { + if (IS_LABEL_SUCCESSOR(YYCURSOR[heredoc_label->length])) { + continue; + } + + if (spacing == (HEREDOC_USING_SPACES | HEREDOC_USING_TABS)) { + zend_throw_exception(zend_ce_parse_error, "Invalid indentation - tabs and spaces cannot be mixed", 0); + if (PARSER_MODE()) { + RETURN_TOKEN(T_ERROR); + } + } + + /* newline before label will be subtracted from returned text, but + * yyleng/yytext will include it, for zend_highlight/strip, tokenizer, etc. */ + if (YYCURSOR[-indentation - 2] == '\r' && YYCURSOR[-indentation - 1] == '\n') { + newline = 2; /* Windows newline */ + } else { + newline = 1; + } + + CG(increment_lineno) = 1; /* For newline before label */ + + YYCURSOR -= indentation; + heredoc_label->indentation = indentation; + + BEGIN(ST_END_HEREDOC); + + goto nowdoc_scan_done; + } + /* fall through */ + default: + continue; + } + } + +nowdoc_scan_done: + yyleng = YYCURSOR - SCNG(yy_text); + ZVAL_STRINGL(zendlval, yytext, yyleng - newline); + + if (!EG(exception) && spacing != -1 && PARSER_MODE()) { + zend_bool newline_at_start = *(yytext - 1) == '\n' || *(yytext - 1) == '\r'; + if (!strip_multiline_string_indentation( + zendlval, indentation, spacing == HEREDOC_USING_SPACES, + newline_at_start, newline != 0)) { + RETURN_TOKEN(T_ERROR); + } + } + + HANDLE_NEWLINES(yytext, yyleng - newline); + RETURN_TOKEN_WITH_VAL(T_ENCAPSED_AND_WHITESPACE); +} +#line 8451 "Zend/zend_language_scanner.c" +} +#line 2877 "Zend/zend_language_scanner.l" + + +emit_token_with_str: + zend_copy_value(zendlval, (yytext + offset), (yyleng - offset)); + +emit_token_with_val: + if (PARSER_MODE()) { + ZEND_ASSERT(Z_TYPE_P(zendlval) != IS_UNDEF); + elem->ast = zend_ast_create_zval_with_lineno(zendlval, start_line); + } + +emit_token: + if (SCNG(on_event)) { + SCNG(on_event)(ON_TOKEN, token, start_line, SCNG(on_event_context)); + } + return token; + +return_whitespace: + HANDLE_NEWLINES(yytext, yyleng); + if (SCNG(on_event)) { + SCNG(on_event)(ON_TOKEN, T_WHITESPACE, start_line, SCNG(on_event_context)); + } + if (PARSER_MODE()) { + start_line = CG(zend_lineno); + goto restart; + } else { + return T_WHITESPACE; + } + +skip_token: + if (SCNG(on_event)) { + SCNG(on_event)(ON_TOKEN, token, start_line, SCNG(on_event_context)); + } + start_line = CG(zend_lineno); + goto restart; +} diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index 412356cdc1..92fa9b7230 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -2434,6 +2434,7 @@ skip_escape_conversion: if (is_heredoc && !SCNG(heredoc_scan_ahead)) { zend_lex_state current_state; + zend_string *saved_doc_comment = CG(doc_comment); int heredoc_nesting_level = 1; int first_token = 0; int error = 0; @@ -2444,6 +2445,7 @@ skip_escape_conversion: SCNG(heredoc_indentation) = 0; SCNG(heredoc_indentation_uses_spaces) = 0; LANG_SCNG(on_event) = NULL; + CG(doc_comment) = NULL; zend_ptr_stack_reverse_apply(¤t_state.heredoc_label_stack, copy_heredoc_label_stack); @@ -2493,6 +2495,7 @@ skip_escape_conversion: zend_restore_lexical_state(¤t_state); SCNG(heredoc_scan_ahead) = 0; CG(increment_lineno) = 0; + CG(doc_comment) = saved_doc_comment; if (PARSER_MODE() && error) { RETURN_TOKEN(T_ERROR); diff --git a/ext/reflection/tests/bug79062.phpt b/ext/reflection/tests/bug79062.phpt new file mode 100644 index 0000000000..57a293333d --- /dev/null +++ b/ext/reflection/tests/bug79062.phpt @@ -0,0 +1,34 @@ +--TEST-- +Bug #79062: Property with heredoc default value returns false for getDocComment +--FILE-- +<?php + +class BugReportMailrcConfigTests +{ + /** @var string */ + private $s1 = <<<STRING +I'm a string :( +STRING; + /** @var string */ + private $s2 = <<<'STRING' +I'm a string :) +STRING; + /** @var string */ + private $s3 = 'I\'m a string :)'; +} + +$ref = new \ReflectionClass(BugReportMailrcConfigTests::class); +$s1 = $ref->getProperty('s1'); +var_dump($s1->getDocComment()); + +$s2 = $ref->getProperty('s2'); +var_dump($s2->getDocComment()); + +$s3 = $ref->getProperty('s3'); +var_dump($s2->getDocComment()); + +?> +--EXPECT-- +string(18) "/** @var string */" +string(18) "/** @var string */" +string(18) "/** @var string */" |