summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-02-28 17:07:36 +0100
committerNikita Popov <nikita.ppv@gmail.com>2020-02-28 17:07:36 +0100
commit375191aae7d4d066367c751727bcd37bb862827b (patch)
treecbc949d4b741b7dc1c9ad0ac8593b7777a0442b5
parent0bffee4a35f0aa67de756f77ccbdeec7d8a9ab23 (diff)
parent6c48da9a50a68cbb27873ead6bf936494c006236 (diff)
downloadphp-git-375191aae7d4d066367c751727bcd37bb862827b.tar.gz
Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3: Fixed bug #79062
-rw-r--r--NEWS12
-rw-r--r--Zend/zend_language_scanner.c8488
-rw-r--r--Zend/zend_language_scanner.l3
-rw-r--r--ext/reflection/tests/bug79062.phpt34
4 files changed, 8533 insertions, 4 deletions
diff --git a/NEWS b/NEWS
index dc6d2311a6..21e25c71d4 100644
--- a/NEWS
+++ b/NEWS
@@ -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(&current_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(&current_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(&current_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(&current_state.heredoc_label_stack, copy_heredoc_label_stack);
@@ -2493,6 +2495,7 @@ skip_escape_conversion:
zend_restore_lexical_state(&current_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 */"