1/* Generated by re2c 0.13.5 */
2#line 1 "Zend/zend_language_scanner.l"
3/*
4   +----------------------------------------------------------------------+
5   | Zend Engine                                                          |
6   +----------------------------------------------------------------------+
7   | Copyright (c) 1998-2013 Zend Technologies Ltd. (http://www.zend.com) |
8   +----------------------------------------------------------------------+
9   | This source file is subject to version 2.00 of the Zend license,     |
10   | that is bundled with this package in the file LICENSE, and is        |
11   | available through the world-wide-web at the following url:           |
12   | http://www.zend.com/license/2_00.txt.                                |
13   | If you did not receive a copy of the Zend license and are unable to  |
14   | obtain it through the world-wide-web, please send a note to          |
15   | license@zend.com so we can mail you a copy immediately.              |
16   +----------------------------------------------------------------------+
17   | Authors: Marcus Boerger <helly@php.net>                              |
18   |          Nuno Lopes <nlopess@php.net>                                |
19   |          Scott MacVicar <scottmac@php.net>                           |
20   | Flex version authors:                                                |
21   |          Andi Gutmans <andi@zend.com>                                |
22   |          Zeev Suraski <zeev@zend.com>                                |
23   +----------------------------------------------------------------------+
24*/
25
26/* $Id$ */
27
28#if 0
29# define YYDEBUG(s, c) printf("state: %d char: %c\n", s, c)
30#else
31# define YYDEBUG(s, c)
32#endif
33
34#include "zend_language_scanner_defs.h"
35
36#include <errno.h>
37#include "zend.h"
38#ifdef PHP_WIN32
39# include <Winuser.h>
40#endif
41#include "zend_alloc.h"
42#include <zend_language_parser.h>
43#include "zend_compile.h"
44#include "zend_language_scanner.h"
45#include "zend_highlight.h"
46#include "zend_constants.h"
47#include "zend_variables.h"
48#include "zend_operators.h"
49#include "zend_API.h"
50#include "zend_strtod.h"
51#include "zend_exceptions.h"
52#include "tsrm_virtual_cwd.h"
53#include "tsrm_config_common.h"
54
55#define YYCTYPE   unsigned char
56#define YYFILL(n) { if ((YYCURSOR + n) >= (YYLIMIT + ZEND_MMAP_AHEAD)) { return 0; } }
57#define YYCURSOR  SCNG(yy_cursor)
58#define YYLIMIT   SCNG(yy_limit)
59#define YYMARKER  SCNG(yy_marker)
60
61#define YYGETCONDITION()  SCNG(yy_state)
62#define YYSETCONDITION(s) SCNG(yy_state) = s
63
64#define STATE(name)  yyc##name
65
66/* emulate flex constructs */
67#define BEGIN(state) YYSETCONDITION(STATE(state))
68#define YYSTATE      YYGETCONDITION()
69#define yytext       ((char*)SCNG(yy_text))
70#define yyleng       SCNG(yy_leng)
71#define yyless(x)    do { YYCURSOR = (unsigned char*)yytext + x; \
72                          yyleng   = (unsigned int)x; } while(0)
73#define yymore()     goto yymore_restart
74
75/* perform sanity check. If this message is triggered you should
76   increase the ZEND_MMAP_AHEAD value in the zend_streams.h file */
77#define YYMAXFILL 16
78#if ZEND_MMAP_AHEAD < YYMAXFILL
79# error ZEND_MMAP_AHEAD should be greater than or equal to YYMAXFILL
80#endif
81
82#ifdef HAVE_STDARG_H
83# include <stdarg.h>
84#endif
85
86#ifdef HAVE_UNISTD_H
87# include <unistd.h>
88#endif
89
90/* Globals Macros */
91#define SCNG    LANG_SCNG
92#ifdef ZTS
93ZEND_API ts_rsrc_id language_scanner_globals_id;
94#else
95ZEND_API zend_php_scanner_globals language_scanner_globals;
96#endif
97
98#define HANDLE_NEWLINES(s, l)                                                   \
99do {                                                                            \
100    char *p = (s), *boundary = p+(l);                                           \
101                                                                                \
102    while (p<boundary) {                                                        \
103        if (*p == '\n' || (*p == '\r' && (*(p+1) != '\n'))) {                   \
104            CG(zend_lineno)++;                                                  \
105        }                                                                       \
106        p++;                                                                    \
107    }                                                                           \
108} while (0)
109
110#define HANDLE_NEWLINE(c) \
111{ \
112    if (c == '\n' || c == '\r') { \
113        CG(zend_lineno)++; \
114    } \
115}
116
117/* To save initial string length after scanning to first variable, CG(doc_comment_len) can be reused */
118#define SET_DOUBLE_QUOTES_SCANNED_LENGTH(len) CG(doc_comment_len) = (len)
119#define GET_DOUBLE_QUOTES_SCANNED_LENGTH()    CG(doc_comment_len)
120
121#define IS_LABEL_START(c) (((c) >= 'a' && (c) <= 'z') || ((c) >= 'A' && (c) <= 'Z') || (c) == '_' || (c) >= 0x7F)
122
123#define ZEND_IS_OCT(c)  ((c)>='0' && (c)<='7')
124#define ZEND_IS_HEX(c)  (((c)>='0' && (c)<='9') || ((c)>='a' && (c)<='f') || ((c)>='A' && (c)<='F'))
125
126BEGIN_EXTERN_C()
127
128static size_t encoding_filter_script_to_internal(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length TSRMLS_DC)
129{
130    const zend_encoding *internal_encoding = zend_multibyte_get_internal_encoding(TSRMLS_C);
131    assert(internal_encoding && zend_multibyte_check_lexer_compatibility(internal_encoding));
132    return zend_multibyte_encoding_converter(to, to_length, from, from_length, internal_encoding, LANG_SCNG(script_encoding) TSRMLS_CC);
133}
134
135static size_t encoding_filter_script_to_intermediate(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length TSRMLS_DC)
136{
137    return zend_multibyte_encoding_converter(to, to_length, from, from_length, zend_multibyte_encoding_utf8, LANG_SCNG(script_encoding) TSRMLS_CC);
138}
139
140static size_t encoding_filter_intermediate_to_script(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length TSRMLS_DC)
141{
142    return zend_multibyte_encoding_converter(to, to_length, from, from_length,
143LANG_SCNG(script_encoding), zend_multibyte_encoding_utf8 TSRMLS_CC);
144}
145
146static size_t encoding_filter_intermediate_to_internal(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length TSRMLS_DC)
147{
148    const zend_encoding *internal_encoding = zend_multibyte_get_internal_encoding(TSRMLS_C);
149    assert(internal_encoding && zend_multibyte_check_lexer_compatibility(internal_encoding));
150    return zend_multibyte_encoding_converter(to, to_length, from, from_length,
151internal_encoding, zend_multibyte_encoding_utf8 TSRMLS_CC);
152}
153
154
155static void _yy_push_state(int new_state TSRMLS_DC)
156{
157    zend_stack_push(&SCNG(state_stack), (void *) &YYGETCONDITION(), sizeof(int));
158    YYSETCONDITION(new_state);
159}
160
161#define yy_push_state(state_and_tsrm) _yy_push_state(yyc##state_and_tsrm)
162
163static void yy_pop_state(TSRMLS_D)
164{
165    int *stack_state;
166    zend_stack_top(&SCNG(state_stack), (void **) &stack_state);
167    YYSETCONDITION(*stack_state);
168    zend_stack_del_top(&SCNG(state_stack));
169}
170
171static void yy_scan_buffer(char *str, unsigned int len TSRMLS_DC)
172{
173    YYCURSOR       = (YYCTYPE*)str;
174    YYLIMIT        = YYCURSOR + len;
175    if (!SCNG(yy_start)) {
176        SCNG(yy_start) = YYCURSOR;
177    }
178}
179
180void startup_scanner(TSRMLS_D)
181{
182    CG(parse_error) = 0;
183    CG(doc_comment) = NULL;
184    CG(doc_comment_len) = 0;
185    zend_stack_init(&SCNG(state_stack));
186    zend_ptr_stack_init(&SCNG(heredoc_label_stack));
187}
188
189static void heredoc_label_dtor(zend_heredoc_label *heredoc_label) {
190    efree(heredoc_label->label);
191}
192
193void shutdown_scanner(TSRMLS_D)
194{
195    CG(parse_error) = 0;
196    RESET_DOC_COMMENT();
197    zend_stack_destroy(&SCNG(state_stack));
198    zend_ptr_stack_clean(&SCNG(heredoc_label_stack), (void (*)(void *)) &heredoc_label_dtor, 1);
199    zend_ptr_stack_destroy(&SCNG(heredoc_label_stack));
200}
201
202ZEND_API void zend_save_lexical_state(zend_lex_state *lex_state TSRMLS_DC)
203{
204    lex_state->yy_leng   = SCNG(yy_leng);
205    lex_state->yy_start  = SCNG(yy_start);
206    lex_state->yy_text   = SCNG(yy_text);
207    lex_state->yy_cursor = SCNG(yy_cursor);
208    lex_state->yy_marker = SCNG(yy_marker);
209    lex_state->yy_limit  = SCNG(yy_limit);
210
211    lex_state->state_stack = SCNG(state_stack);
212    zend_stack_init(&SCNG(state_stack));
213
214    lex_state->heredoc_label_stack = SCNG(heredoc_label_stack);
215    zend_ptr_stack_init(&SCNG(heredoc_label_stack));
216
217    lex_state->in = SCNG(yy_in);
218    lex_state->yy_state = YYSTATE;
219    lex_state->filename = zend_get_compiled_filename(TSRMLS_C);
220    lex_state->lineno = CG(zend_lineno);
221
222    lex_state->script_org = SCNG(script_org);
223    lex_state->script_org_size = SCNG(script_org_size);
224    lex_state->script_filtered = SCNG(script_filtered);
225    lex_state->script_filtered_size = SCNG(script_filtered_size);
226    lex_state->input_filter = SCNG(input_filter);
227    lex_state->output_filter = SCNG(output_filter);
228    lex_state->script_encoding = SCNG(script_encoding);
229}
230
231ZEND_API void zend_restore_lexical_state(zend_lex_state *lex_state TSRMLS_DC)
232{
233    SCNG(yy_leng)   = lex_state->yy_leng;
234    SCNG(yy_start)  = lex_state->yy_start;
235    SCNG(yy_text)   = lex_state->yy_text;
236    SCNG(yy_cursor) = lex_state->yy_cursor;
237    SCNG(yy_marker) = lex_state->yy_marker;
238    SCNG(yy_limit)  = lex_state->yy_limit;
239
240    zend_stack_destroy(&SCNG(state_stack));
241    SCNG(state_stack) = lex_state->state_stack;
242
243    zend_ptr_stack_clean(&SCNG(heredoc_label_stack), (void (*)(void *)) &heredoc_label_dtor, 1);
244    zend_ptr_stack_destroy(&SCNG(heredoc_label_stack));
245    SCNG(heredoc_label_stack) = lex_state->heredoc_label_stack;
246
247    SCNG(yy_in) = lex_state->in;
248    YYSETCONDITION(lex_state->yy_state);
249    CG(zend_lineno) = lex_state->lineno;
250    zend_restore_compiled_filename(lex_state->filename TSRMLS_CC);
251
252    if (SCNG(script_filtered)) {
253        efree(SCNG(script_filtered));
254        SCNG(script_filtered) = NULL;
255    }
256    SCNG(script_org) = lex_state->script_org;
257    SCNG(script_org_size) = lex_state->script_org_size;
258    SCNG(script_filtered) = lex_state->script_filtered;
259    SCNG(script_filtered_size) = lex_state->script_filtered_size;
260    SCNG(input_filter) = lex_state->input_filter;
261    SCNG(output_filter) = lex_state->output_filter;
262    SCNG(script_encoding) = lex_state->script_encoding;
263}
264
265ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle TSRMLS_DC)
266{
267    zend_llist_del_element(&CG(open_files), file_handle, (int (*)(void *, void *)) zend_compare_file_handles);
268    /* zend_file_handle_dtor() operates on the copy, so we have to NULLify the original here */
269    file_handle->opened_path = NULL;
270    if (file_handle->free_filename) {
271        file_handle->filename = NULL;
272    }
273}
274
275#define BOM_UTF32_BE    "\x00\x00\xfe\xff"
276#define BOM_UTF32_LE    "\xff\xfe\x00\x00"
277#define BOM_UTF16_BE    "\xfe\xff"
278#define BOM_UTF16_LE    "\xff\xfe"
279#define BOM_UTF8        "\xef\xbb\xbf"
280
281static const zend_encoding *zend_multibyte_detect_utf_encoding(const unsigned char *script, size_t script_size TSRMLS_DC)
282{
283    const unsigned char *p;
284    int wchar_size = 2;
285    int le = 0;
286
287    /* utf-16 or utf-32? */
288    p = script;
289    while ((p-script) < script_size) {
290        p = memchr(p, 0, script_size-(p-script)-2);
291        if (!p) {
292            break;
293        }
294        if (*(p+1) == '\0' && *(p+2) == '\0') {
295            wchar_size = 4;
296            break;
297        }
298
299        /* searching for UTF-32 specific byte orders, so this will do */
300        p += 4;
301    }
302
303    /* BE or LE? */
304    p = script;
305    while ((p-script) < script_size) {
306        if (*p == '\0' && *(p+wchar_size-1) != '\0') {
307            /* BE */
308            le = 0;
309            break;
310        } else if (*p != '\0' && *(p+wchar_size-1) == '\0') {
311            /* LE* */
312            le = 1;
313            break;
314        }
315        p += wchar_size;
316    }
317
318    if (wchar_size == 2) {
319        return le ? zend_multibyte_encoding_utf16le : zend_multibyte_encoding_utf16be;
320    } else {
321        return le ? zend_multibyte_encoding_utf32le : zend_multibyte_encoding_utf32be;
322    }
323
324    return NULL;
325}
326
327static const zend_encoding* zend_multibyte_detect_unicode(TSRMLS_D)
328{
329    const zend_encoding *script_encoding = NULL;
330    int bom_size;
331    unsigned char *pos1, *pos2;
332
333    if (LANG_SCNG(script_org_size) < sizeof(BOM_UTF32_LE)-1) {
334        return NULL;
335    }
336
337    /* check out BOM */
338    if (!memcmp(LANG_SCNG(script_org), BOM_UTF32_BE, sizeof(BOM_UTF32_BE)-1)) {
339        script_encoding = zend_multibyte_encoding_utf32be;
340        bom_size = sizeof(BOM_UTF32_BE)-1;
341    } else if (!memcmp(LANG_SCNG(script_org), BOM_UTF32_LE, sizeof(BOM_UTF32_LE)-1)) {
342        script_encoding = zend_multibyte_encoding_utf32le;
343        bom_size = sizeof(BOM_UTF32_LE)-1;
344    } else if (!memcmp(LANG_SCNG(script_org), BOM_UTF16_BE, sizeof(BOM_UTF16_BE)-1)) {
345        script_encoding = zend_multibyte_encoding_utf16be;
346        bom_size = sizeof(BOM_UTF16_BE)-1;
347    } else if (!memcmp(LANG_SCNG(script_org), BOM_UTF16_LE, sizeof(BOM_UTF16_LE)-1)) {
348        script_encoding = zend_multibyte_encoding_utf16le;
349        bom_size = sizeof(BOM_UTF16_LE)-1;
350    } else if (!memcmp(LANG_SCNG(script_org), BOM_UTF8, sizeof(BOM_UTF8)-1)) {
351        script_encoding = zend_multibyte_encoding_utf8;
352        bom_size = sizeof(BOM_UTF8)-1;
353    }
354
355    if (script_encoding) {
356        /* remove BOM */
357        LANG_SCNG(script_org) += bom_size;
358        LANG_SCNG(script_org_size) -= bom_size;
359
360        return script_encoding;
361    }
362
363    /* script contains NULL bytes -> auto-detection */
364    if ((pos1 = memchr(LANG_SCNG(script_org), 0, LANG_SCNG(script_org_size)))) {
365        /* check if the NULL byte is after the __HALT_COMPILER(); */
366        pos2 = LANG_SCNG(script_org);
367
368        while (pos1 - pos2 >= sizeof("__HALT_COMPILER();")-1) {
369            pos2 = memchr(pos2, '_', pos1 - pos2);
370            if (!pos2) break;
371            pos2++;
372            if (strncasecmp((char*)pos2, "_HALT_COMPILER", sizeof("_HALT_COMPILER")-1) == 0) {
373                pos2 += sizeof("_HALT_COMPILER")-1;
374                while (*pos2 == ' '  ||
375                       *pos2 == '\t' ||
376                       *pos2 == '\r' ||
377                       *pos2 == '\n') {
378                    pos2++;
379                }
380                if (*pos2 == '(') {
381                    pos2++;
382                    while (*pos2 == ' '  ||
383                           *pos2 == '\t' ||
384                           *pos2 == '\r' ||
385                           *pos2 == '\n') {
386                        pos2++;
387                    }
388                    if (*pos2 == ')') {
389                        pos2++;
390                        while (*pos2 == ' '  ||
391                               *pos2 == '\t' ||
392                               *pos2 == '\r' ||
393                               *pos2 == '\n') {
394                            pos2++;
395                        }
396                        if (*pos2 == ';') {
397                            return NULL;
398                        }
399                    }
400                }
401            }
402        }
403        /* make best effort if BOM is missing */
404        return zend_multibyte_detect_utf_encoding(LANG_SCNG(script_org), LANG_SCNG(script_org_size) TSRMLS_CC);
405    }
406
407    return NULL;
408}
409
410static const zend_encoding* zend_multibyte_find_script_encoding(TSRMLS_D)
411{
412    const zend_encoding *script_encoding;
413
414    if (CG(detect_unicode)) {
415        /* check out bom(byte order mark) and see if containing wchars */
416        script_encoding = zend_multibyte_detect_unicode(TSRMLS_C);
417        if (script_encoding != NULL) {
418            /* bom or wchar detection is prior to 'script_encoding' option */
419            return script_encoding;
420        }
421    }
422
423    /* if no script_encoding specified, just leave alone */
424    if (!CG(script_encoding_list) || !CG(script_encoding_list_size)) {
425        return NULL;
426    }
427
428    /* if multiple encodings specified, detect automagically */
429    if (CG(script_encoding_list_size) > 1) {
430        return zend_multibyte_encoding_detector(LANG_SCNG(script_org), LANG_SCNG(script_org_size), CG(script_encoding_list), CG(script_encoding_list_size) TSRMLS_CC);
431    }
432
433    return CG(script_encoding_list)[0];
434}
435
436ZEND_API int zend_multibyte_set_filter(const zend_encoding *onetime_encoding TSRMLS_DC)
437{
438    const zend_encoding *internal_encoding = zend_multibyte_get_internal_encoding(TSRMLS_C);
439    const zend_encoding *script_encoding = onetime_encoding ? onetime_encoding: zend_multibyte_find_script_encoding(TSRMLS_C);
440
441    if (!script_encoding) {
442        return FAILURE;
443    }
444
445    /* judge input/output filter */
446    LANG_SCNG(script_encoding) = script_encoding;
447    LANG_SCNG(input_filter) = NULL;
448    LANG_SCNG(output_filter) = NULL;
449
450    if (!internal_encoding || LANG_SCNG(script_encoding) == internal_encoding) {
451        if (!zend_multibyte_check_lexer_compatibility(LANG_SCNG(script_encoding))) {
452            /* and if not, work around w/ script_encoding -> utf-8 -> script_encoding conversion */
453            LANG_SCNG(input_filter) = encoding_filter_script_to_intermediate;
454            LANG_SCNG(output_filter) = encoding_filter_intermediate_to_script;
455        } else {
456            LANG_SCNG(input_filter) = NULL;
457            LANG_SCNG(output_filter) = NULL;
458        }
459        return SUCCESS;
460    }
461
462    if (zend_multibyte_check_lexer_compatibility(internal_encoding)) {
463        LANG_SCNG(input_filter) = encoding_filter_script_to_internal;
464        LANG_SCNG(output_filter) = NULL;
465    } else if (zend_multibyte_check_lexer_compatibility(LANG_SCNG(script_encoding))) {
466        LANG_SCNG(input_filter) = NULL;
467        LANG_SCNG(output_filter) = encoding_filter_script_to_internal;
468    } else {
469        /* both script and internal encodings are incompatible w/ flex */
470        LANG_SCNG(input_filter) = encoding_filter_script_to_intermediate;
471        LANG_SCNG(output_filter) = encoding_filter_intermediate_to_internal;
472    }
473
474    return 0;
475}
476
477ZEND_API int open_file_for_scanning(zend_file_handle *file_handle TSRMLS_DC)
478{
479    const char *file_path = NULL;
480    char *buf;
481    size_t size, offset = 0;
482
483    /* The shebang line was read, get the current position to obtain the buffer start */
484    if (CG(start_lineno) == 2 && file_handle->type == ZEND_HANDLE_FP && file_handle->handle.fp) {
485        if ((offset = ftell(file_handle->handle.fp)) == -1) {
486            offset = 0;
487        }
488    }
489
490    if (zend_stream_fixup(file_handle, &buf, &size TSRMLS_CC) == FAILURE) {
491        return FAILURE;
492    }
493
494    zend_llist_add_element(&CG(open_files), file_handle);
495    if (file_handle->handle.stream.handle >= (void*)file_handle && file_handle->handle.stream.handle <= (void*)(file_handle+1)) {
496        zend_file_handle *fh = (zend_file_handle*)zend_llist_get_last(&CG(open_files));
497        size_t diff = (char*)file_handle->handle.stream.handle - (char*)file_handle;
498        fh->handle.stream.handle = (void*)(((char*)fh) + diff);
499        file_handle->handle.stream.handle = fh->handle.stream.handle;
500    }
501
502    /* Reset the scanner for scanning the new file */
503    SCNG(yy_in) = file_handle;
504    SCNG(yy_start) = NULL;
505
506    if (size != -1) {
507        if (CG(multibyte)) {
508            SCNG(script_org) = (unsigned char*)buf;
509            SCNG(script_org_size) = size;
510            SCNG(script_filtered) = NULL;
511
512            zend_multibyte_set_filter(NULL TSRMLS_CC);
513
514            if (SCNG(input_filter)) {
515                if ((size_t)-1 == SCNG(input_filter)(&SCNG(script_filtered), &SCNG(script_filtered_size), SCNG(script_org), SCNG(script_org_size) TSRMLS_CC)) {
516                    zend_error_noreturn(E_COMPILE_ERROR, "Could not convert the script from the detected "
517                            "encoding \"%s\" to a compatible encoding", zend_multibyte_get_encoding_name(LANG_SCNG(script_encoding)));
518                }
519                buf = (char*)SCNG(script_filtered);
520                size = SCNG(script_filtered_size);
521            }
522        }
523        SCNG(yy_start) = (unsigned char *)buf - offset;
524        yy_scan_buffer(buf, size TSRMLS_CC);
525    } else {
526        zend_error_noreturn(E_COMPILE_ERROR, "zend_stream_mmap() failed");
527    }
528
529    BEGIN(INITIAL);
530
531    if (file_handle->opened_path) {
532        file_path = file_handle->opened_path;
533    } else {
534        file_path = file_handle->filename;
535    }
536
537    zend_set_compiled_filename(file_path TSRMLS_CC);
538
539    if (CG(start_lineno)) {
540        CG(zend_lineno) = CG(start_lineno);
541        CG(start_lineno) = 0;
542    } else {
543        CG(zend_lineno) = 1;
544    }
545
546    CG(increment_lineno) = 0;
547    return SUCCESS;
548}
549END_EXTERN_C()
550
551
552ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type TSRMLS_DC)
553{
554    zend_lex_state original_lex_state;
555    zend_op_array *op_array = (zend_op_array *) emalloc(sizeof(zend_op_array));
556    zend_op_array *original_active_op_array = CG(active_op_array);
557    zend_op_array *retval=NULL;
558    int compiler_result;
559    zend_bool compilation_successful=0;
560    znode retval_znode;
561    zend_bool original_in_compilation = CG(in_compilation);
562
563    retval_znode.op_type = IS_CONST;
564    retval_znode.u.constant.type = IS_LONG;
565    retval_znode.u.constant.value.lval = 1;
566    Z_UNSET_ISREF(retval_znode.u.constant);
567    Z_SET_REFCOUNT(retval_znode.u.constant, 1);
568
569    zend_save_lexical_state(&original_lex_state TSRMLS_CC);
570
571    retval = op_array; /* success oriented */
572
573    if (open_file_for_scanning(file_handle TSRMLS_CC)==FAILURE) {
574        if (type==ZEND_REQUIRE) {
575            zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, file_handle->filename TSRMLS_CC);
576            zend_bailout();
577        } else {
578            zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, file_handle->filename TSRMLS_CC);
579        }
580        compilation_successful=0;
581    } else {
582        init_op_array(op_array, ZEND_USER_FUNCTION, INITIAL_OP_ARRAY_SIZE TSRMLS_CC);
583        CG(in_compilation) = 1;
584        CG(active_op_array) = op_array;
585        zend_stack_push(&CG(context_stack), (void *) &CG(context), sizeof(CG(context)));
586        zend_init_compiler_context(TSRMLS_C);
587        compiler_result = zendparse(TSRMLS_C);
588        zend_do_return(&retval_znode, 0 TSRMLS_CC);
589        CG(in_compilation) = original_in_compilation;
590        if (compiler_result==1) { /* parser error */
591            zend_bailout();
592        }
593        compilation_successful=1;
594    }
595
596    if (retval) {
597        CG(active_op_array) = original_active_op_array;
598        if (compilation_successful) {
599            pass_two(op_array TSRMLS_CC);
600            zend_release_labels(0 TSRMLS_CC);
601        } else {
602            efree(op_array);
603            retval = NULL;
604        }
605    }
606    zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
607    return retval;
608}
609
610
611zend_op_array *compile_filename(int type, zval *filename TSRMLS_DC)
612{
613    zend_file_handle file_handle;
614    zval tmp;
615    zend_op_array *retval;
616    char *opened_path = NULL;
617
618    if (filename->type != IS_STRING) {
619        tmp = *filename;
620        zval_copy_ctor(&tmp);
621        convert_to_string(&tmp);
622        filename = &tmp;
623    }
624    file_handle.filename = filename->value.str.val;
625    file_handle.free_filename = 0;
626    file_handle.type = ZEND_HANDLE_FILENAME;
627    file_handle.opened_path = NULL;
628    file_handle.handle.fp = NULL;
629
630    retval = zend_compile_file(&file_handle, type TSRMLS_CC);
631    if (retval && file_handle.handle.stream.handle) {
632        int dummy = 1;
633
634        if (!file_handle.opened_path) {
635            file_handle.opened_path = opened_path = estrndup(filename->value.str.val, filename->value.str.len);
636        }
637
638        zend_hash_add(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1, (void *)&dummy, sizeof(int), NULL);
639
640        if (opened_path) {
641            efree(opened_path);
642        }
643    }
644    zend_destroy_file_handle(&file_handle TSRMLS_CC);
645
646    if (filename==&tmp) {
647        zval_dtor(&tmp);
648    }
649    return retval;
650}
651
652ZEND_API int zend_prepare_string_for_scanning(zval *str, char *filename TSRMLS_DC)
653{
654    char *buf;
655    size_t size;
656
657    /* enforce two trailing NULLs for flex... */
658    if (IS_INTERNED(str->value.str.val)) {
659        char *tmp = safe_emalloc(1, str->value.str.len, ZEND_MMAP_AHEAD);
660        memcpy(tmp, str->value.str.val, str->value.str.len + ZEND_MMAP_AHEAD);
661        str->value.str.val = tmp;
662    } else {
663        str->value.str.val = safe_erealloc(str->value.str.val, 1, str->value.str.len, ZEND_MMAP_AHEAD);
664    }
665
666    memset(str->value.str.val + str->value.str.len, 0, ZEND_MMAP_AHEAD);
667
668    SCNG(yy_in) = NULL;
669    SCNG(yy_start) = NULL;
670
671    buf = str->value.str.val;
672    size = str->value.str.len;
673
674    if (CG(multibyte)) {
675        SCNG(script_org) = (unsigned char*)buf;
676        SCNG(script_org_size) = size;
677        SCNG(script_filtered) = NULL;
678
679        zend_multibyte_set_filter(zend_multibyte_get_internal_encoding(TSRMLS_C) TSRMLS_CC);
680
681        if (SCNG(input_filter)) {
682            if ((size_t)-1 == SCNG(input_filter)(&SCNG(script_filtered), &SCNG(script_filtered_size), SCNG(script_org), SCNG(script_org_size) TSRMLS_CC)) {
683                zend_error_noreturn(E_COMPILE_ERROR, "Could not convert the script from the detected "
684                        "encoding \"%s\" to a compatible encoding", zend_multibyte_get_encoding_name(LANG_SCNG(script_encoding)));
685            }
686            buf = (char*)SCNG(script_filtered);
687            size = SCNG(script_filtered_size);
688        }
689    }
690
691    yy_scan_buffer(buf, size TSRMLS_CC);
692
693    zend_set_compiled_filename(filename TSRMLS_CC);
694    CG(zend_lineno) = 1;
695    CG(increment_lineno) = 0;
696    return SUCCESS;
697}
698
699
700ZEND_API size_t zend_get_scanned_file_offset(TSRMLS_D)
701{
702    size_t offset = SCNG(yy_cursor) - SCNG(yy_start);
703    if (SCNG(input_filter)) {
704        size_t original_offset = offset, length = 0;
705        do {
706            unsigned char *p = NULL;
707            if ((size_t)-1 == SCNG(input_filter)(&p, &length, SCNG(script_org), offset TSRMLS_CC)) {
708                return (size_t)-1;
709            }
710            efree(p);
711            if (length > original_offset) {
712                offset--;
713            } else if (length < original_offset) {
714                offset++;
715            }
716        } while (original_offset != length);
717    }
718    return offset;
719}
720
721
722zend_op_array *compile_string(zval *source_string, char *filename TSRMLS_DC)
723{
724    zend_lex_state original_lex_state;
725    zend_op_array *op_array = (zend_op_array *) emalloc(sizeof(zend_op_array));
726    zend_op_array *original_active_op_array = CG(active_op_array);
727    zend_op_array *retval;
728    zval tmp;
729    int compiler_result;
730    zend_bool original_in_compilation = CG(in_compilation);
731
732    if (source_string->value.str.len==0) {
733        efree(op_array);
734        return NULL;
735    }
736
737    CG(in_compilation) = 1;
738
739    tmp = *source_string;
740    zval_copy_ctor(&tmp);
741    convert_to_string(&tmp);
742    source_string = &tmp;
743
744    zend_save_lexical_state(&original_lex_state TSRMLS_CC);
745    if (zend_prepare_string_for_scanning(source_string, filename TSRMLS_CC)==FAILURE) {
746        efree(op_array);
747        retval = NULL;
748    } else {
749        zend_bool orig_interactive = CG(interactive);
750
751        CG(interactive) = 0;
752        init_op_array(op_array, ZEND_EVAL_CODE, INITIAL_OP_ARRAY_SIZE TSRMLS_CC);
753        CG(interactive) = orig_interactive;
754        CG(active_op_array) = op_array;
755        zend_stack_push(&CG(context_stack), (void *) &CG(context), sizeof(CG(context)));
756        zend_init_compiler_context(TSRMLS_C);
757        BEGIN(ST_IN_SCRIPTING);
758        compiler_result = zendparse(TSRMLS_C);
759
760        if (SCNG(script_filtered)) {
761            efree(SCNG(script_filtered));
762            SCNG(script_filtered) = NULL;
763        }
764
765        if (compiler_result==1) {
766            CG(active_op_array) = original_active_op_array;
767            CG(unclean_shutdown)=1;
768            destroy_op_array(op_array TSRMLS_CC);
769            efree(op_array);
770            retval = NULL;
771        } else {
772            zend_do_return(NULL, 0 TSRMLS_CC);
773            CG(active_op_array) = original_active_op_array;
774            pass_two(op_array TSRMLS_CC);
775            zend_release_labels(0 TSRMLS_CC);
776            retval = op_array;
777        }
778    }
779    zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
780    zval_dtor(&tmp);
781    CG(in_compilation) = original_in_compilation;
782    return retval;
783}
784
785
786BEGIN_EXTERN_C()
787int highlight_file(char *filename, zend_syntax_highlighter_ini *syntax_highlighter_ini TSRMLS_DC)
788{
789    zend_lex_state original_lex_state;
790    zend_file_handle file_handle;
791
792    file_handle.type = ZEND_HANDLE_FILENAME;
793    file_handle.filename = filename;
794    file_handle.free_filename = 0;
795    file_handle.opened_path = NULL;
796    zend_save_lexical_state(&original_lex_state TSRMLS_CC);
797    if (open_file_for_scanning(&file_handle TSRMLS_CC)==FAILURE) {
798        zend_message_dispatcher(ZMSG_FAILED_HIGHLIGHT_FOPEN, filename TSRMLS_CC);
799        zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
800        return FAILURE;
801    }
802    zend_highlight(syntax_highlighter_ini TSRMLS_CC);
803    if (SCNG(script_filtered)) {
804        efree(SCNG(script_filtered));
805        SCNG(script_filtered) = NULL;
806    }
807    zend_destroy_file_handle(&file_handle TSRMLS_CC);
808    zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
809    return SUCCESS;
810}
811
812int highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, char *str_name TSRMLS_DC)
813{
814    zend_lex_state original_lex_state;
815    zval tmp = *str;
816
817    str = &tmp;
818    zval_copy_ctor(str);
819    zend_save_lexical_state(&original_lex_state TSRMLS_CC);
820    if (zend_prepare_string_for_scanning(str, str_name TSRMLS_CC)==FAILURE) {
821        zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
822        return FAILURE;
823    }
824    BEGIN(INITIAL);
825    zend_highlight(syntax_highlighter_ini TSRMLS_CC);
826    if (SCNG(script_filtered)) {
827        efree(SCNG(script_filtered));
828        SCNG(script_filtered) = NULL;
829    }
830    zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
831    zval_dtor(str);
832    return SUCCESS;
833}
834
835ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter old_input_filter, const zend_encoding *old_encoding TSRMLS_DC)
836{
837    size_t length;
838    unsigned char *new_yy_start;
839
840    /* convert and set */
841    if (!SCNG(input_filter)) {
842        if (SCNG(script_filtered)) {
843            efree(SCNG(script_filtered));
844            SCNG(script_filtered) = NULL;
845        }
846        SCNG(script_filtered_size) = 0;
847        length = SCNG(script_org_size);
848        new_yy_start = SCNG(script_org);
849    } else {
850        if ((size_t)-1 == SCNG(input_filter)(&new_yy_start, &length, SCNG(script_org), SCNG(script_org_size) TSRMLS_CC)) {
851            zend_error_noreturn(E_COMPILE_ERROR, "Could not convert the script from the detected "
852                    "encoding \"%s\" to a compatible encoding", zend_multibyte_get_encoding_name(LANG_SCNG(script_encoding)));
853        }
854        SCNG(script_filtered) = new_yy_start;
855        SCNG(script_filtered_size) = length;
856    }
857
858    SCNG(yy_cursor) = new_yy_start + (SCNG(yy_cursor) - SCNG(yy_start));
859    SCNG(yy_marker) = new_yy_start + (SCNG(yy_marker) - SCNG(yy_start));
860    SCNG(yy_text) = new_yy_start + (SCNG(yy_text) - SCNG(yy_start));
861    SCNG(yy_limit) = new_yy_start + (SCNG(yy_limit) - SCNG(yy_start));
862
863    SCNG(yy_start) = new_yy_start;
864}
865
866
867# define zend_copy_value(zendlval, yytext, yyleng) \
868    if (SCNG(output_filter)) { \
869        size_t sz = 0; \
870        SCNG(output_filter)((unsigned char **)&(zendlval->value.str.val), &sz, (unsigned char *)yytext, (size_t)yyleng TSRMLS_CC); \
871        zendlval->value.str.len = sz; \
872    } else { \
873        zendlval->value.str.val = (char *) estrndup(yytext, yyleng); \
874        zendlval->value.str.len = yyleng; \
875    }
876
877static void zend_scan_escape_string(zval *zendlval, char *str, int len, char quote_type TSRMLS_DC)
878{
879    register char *s, *t;
880    char *end;
881
882    ZVAL_STRINGL(zendlval, str, len, 1);
883
884    /* convert escape sequences */
885    s = t = zendlval->value.str.val;
886    end = s+zendlval->value.str.len;
887    while (s<end) {
888        if (*s=='\\') {
889            s++;
890            if (s >= end) {
891                *t++ = '\\';
892                break;
893            }
894
895            switch(*s) {
896                case 'n':
897                    *t++ = '\n';
898                    zendlval->value.str.len--;
899                    break;
900                case 'r':
901                    *t++ = '\r';
902                    zendlval->value.str.len--;
903                    break;
904                case 't':
905                    *t++ = '\t';
906                    zendlval->value.str.len--;
907                    break;
908                case 'f':
909                    *t++ = '\f';
910                    zendlval->value.str.len--;
911                    break;
912                case 'v':
913                    *t++ = '\v';
914                    zendlval->value.str.len--;
915                    break;
916                case 'e':
917#ifdef PHP_WIN32
918                    *t++ = VK_ESCAPE;
919#else
920                    *t++ = '\e';
921#endif
922                    zendlval->value.str.len--;
923                    break;
924                case '"':
925                case '`':
926                    if (*s != quote_type) {
927                        *t++ = '\\';
928                        *t++ = *s;
929                        break;
930                    }
931                case '\\':
932                case '$':
933                    *t++ = *s;
934                    zendlval->value.str.len--;
935                    break;
936                case 'x':
937                case 'X':
938                    if (ZEND_IS_HEX(*(s+1))) {
939                        char hex_buf[3] = { 0, 0, 0 };
940
941                        zendlval->value.str.len--; /* for the 'x' */
942
943                        hex_buf[0] = *(++s);
944                        zendlval->value.str.len--;
945                        if (ZEND_IS_HEX(*(s+1))) {
946                            hex_buf[1] = *(++s);
947                            zendlval->value.str.len--;
948                        }
949                        *t++ = (char) strtol(hex_buf, NULL, 16);
950                    } else {
951                        *t++ = '\\';
952                        *t++ = *s;
953                    }
954                    break;
955                default:
956                    /* check for an octal */
957                    if (ZEND_IS_OCT(*s)) {
958                        char octal_buf[4] = { 0, 0, 0, 0 };
959
960                        octal_buf[0] = *s;
961                        zendlval->value.str.len--;
962                        if (ZEND_IS_OCT(*(s+1))) {
963                            octal_buf[1] = *(++s);
964                            zendlval->value.str.len--;
965                            if (ZEND_IS_OCT(*(s+1))) {
966                                octal_buf[2] = *(++s);
967                                zendlval->value.str.len--;
968                            }
969                        }
970                        *t++ = (char) strtol(octal_buf, NULL, 8);
971                    } else {
972                        *t++ = '\\';
973                        *t++ = *s;
974                    }
975                    break;
976            }
977        } else {
978            *t++ = *s;
979        }
980
981        if (*s == '\n' || (*s == '\r' && (*(s+1) != '\n'))) {
982            CG(zend_lineno)++;
983        }
984        s++;
985    }
986    *t = 0;
987    if (SCNG(output_filter)) {
988        size_t sz = 0;
989        s = zendlval->value.str.val;
990        SCNG(output_filter)((unsigned char **)&(zendlval->value.str.val), &sz, (unsigned char *)s, (size_t)zendlval->value.str.len TSRMLS_CC);
991        zendlval->value.str.len = sz;
992        efree(s);
993    }
994}
995
996
997int lex_scan(zval *zendlval TSRMLS_DC)
998{
999restart:
1000    SCNG(yy_text) = YYCURSOR;
1001
1002yymore_restart:
1003
1004
1005#line 1006 "Zend/zend_language_scanner.c"
1006{
1007    YYCTYPE yych;
1008    unsigned int yyaccept = 0;
1009    if (YYGETCONDITION() < 5) {
1010        if (YYGETCONDITION() < 2) {
1011            if (YYGETCONDITION() < 1) {
1012                goto yyc_ST_IN_SCRIPTING;
1013            } else {
1014                goto yyc_ST_LOOKING_FOR_PROPERTY;
1015            }
1016        } else {
1017            if (YYGETCONDITION() < 3) {
1018                goto yyc_ST_BACKQUOTE;
1019            } else {
1020                if (YYGETCONDITION() < 4) {
1021                    goto yyc_ST_DOUBLE_QUOTES;
1022                } else {
1023                    goto yyc_ST_HEREDOC;
1024                }
1025            }
1026        }
1027    } else {
1028        if (YYGETCONDITION() < 7) {
1029            if (YYGETCONDITION() < 6) {
1030                goto yyc_ST_LOOKING_FOR_VARNAME;
1031            } else {
1032                goto yyc_ST_VAR_OFFSET;
1033            }
1034        } else {
1035            if (YYGETCONDITION() < 8) {
1036                goto yyc_INITIAL;
1037            } else {
1038                if (YYGETCONDITION() < 9) {
1039                    goto yyc_ST_END_HEREDOC;
1040                } else {
1041                    goto yyc_ST_NOWDOC;
1042                }
1043            }
1044        }
1045    }
1046/* *********************************** */
1047yyc_INITIAL:
1048    {
1049        static const unsigned char yybm[] = {
1050              0,   0,   0,   0,   0,   0,   0,   0,
1051              0, 128, 128,   0,   0, 128,   0,   0,
1052              0,   0,   0,   0,   0,   0,   0,   0,
1053              0,   0,   0,   0,   0,   0,   0,   0,
1054            128,   0,   0,   0,   0,   0,   0,   0,
1055              0,   0,   0,   0,   0,   0,   0,   0,
1056              0,   0,   0,   0,   0,   0,   0,   0,
1057              0,   0,   0,   0,   0,   0,   0,   0,
1058              0,   0,   0,   0,   0,   0,   0,   0,
1059              0,   0,   0,   0,   0,   0,   0,   0,
1060              0,   0,   0,   0,   0,   0,   0,   0,
1061              0,   0,   0,   0,   0,   0,   0,   0,
1062              0,   0,   0,   0,   0,   0,   0,   0,
1063              0,   0,   0,   0,   0,   0,   0,   0,
1064              0,   0,   0,   0,   0,   0,   0,   0,
1065              0,   0,   0,   0,   0,   0,   0,   0,
1066              0,   0,   0,   0,   0,   0,   0,   0,
1067              0,   0,   0,   0,   0,   0,   0,   0,
1068              0,   0,   0,   0,   0,   0,   0,   0,
1069              0,   0,   0,   0,   0,   0,   0,   0,
1070              0,   0,   0,   0,   0,   0,   0,   0,
1071              0,   0,   0,   0,   0,   0,   0,   0,
1072              0,   0,   0,   0,   0,   0,   0,   0,
1073              0,   0,   0,   0,   0,   0,   0,   0,
1074              0,   0,   0,   0,   0,   0,   0,   0,
1075              0,   0,   0,   0,   0,   0,   0,   0,
1076              0,   0,   0,   0,   0,   0,   0,   0,
1077              0,   0,   0,   0,   0,   0,   0,   0,
1078              0,   0,   0,   0,   0,   0,   0,   0,
1079              0,   0,   0,   0,   0,   0,   0,   0,
1080              0,   0,   0,   0,   0,   0,   0,   0,
1081              0,   0,   0,   0,   0,   0,   0,   0,
1082        };
1083
1084        YYDEBUG(0, *YYCURSOR);
1085        YYFILL(8);
1086        yych = *YYCURSOR;
1087        if (yych != '<') goto yy4;
1088        YYDEBUG(2, *YYCURSOR);
1089        yyaccept = 0;
1090        yych = *(YYMARKER = ++YYCURSOR);
1091        if (yych <= '?') {
1092            if (yych == '%') goto yy7;
1093            if (yych >= '?') goto yy5;
1094        } else {
1095            if (yych <= 'S') {
1096                if (yych >= 'S') goto yy9;
1097            } else {
1098                if (yych == 's') goto yy9;
1099            }
1100        }
1101yy3:
1102        YYDEBUG(3, *YYCURSOR);
1103        yyleng = YYCURSOR - SCNG(yy_text);
1104#line 1803 "Zend/zend_language_scanner.l"
1105        {
1106    if (YYCURSOR > YYLIMIT) {
1107        return 0;
1108    }
1109
1110inline_char_handler:
1111
1112    while (1) {
1113        YYCTYPE *ptr = memchr(YYCURSOR, '<', YYLIMIT - YYCURSOR);
1114
1115        YYCURSOR = ptr ? ptr + 1 : YYLIMIT;
1116
1117        if (YYCURSOR < YYLIMIT) {
1118            switch (*YYCURSOR) {
1119                case '?':
1120                    if (CG(short_tags) || !strncasecmp((char*)YYCURSOR + 1, "php", 3) || (*(YYCURSOR + 1) == '=')) { /* Assume [ \t\n\r] follows "php" */
1121                        break;
1122                    }
1123                    continue;
1124                case '%':
1125                    if (CG(asp_tags)) {
1126                        break;
1127                    }
1128                    continue;
1129                case 's':
1130                case 'S':
1131                    /* Probably NOT an opening PHP <script> tag, so don't end the HTML chunk yet
1132                     * If it is, the PHP <script> tag rule checks for any HTML scanned before it */
1133                    YYCURSOR--;
1134                    yymore();
1135                default:
1136                    continue;
1137            }
1138
1139            YYCURSOR--;
1140        }
1141
1142        break;
1143    }
1144
1145inline_html:
1146    yyleng = YYCURSOR - SCNG(yy_text);
1147
1148    if (SCNG(output_filter)) {
1149        int readsize;
1150        size_t sz = 0;
1151        readsize = SCNG(output_filter)((unsigned char **)&(zendlval->value.str.val), &sz, (unsigned char *)yytext, (size_t)yyleng TSRMLS_CC);
1152        zendlval->value.str.len = sz;
1153        if (readsize < yyleng) {
1154            yyless(readsize);
1155        }
1156    } else {
1157      zendlval->value.str.val = (char *) estrndup(yytext, yyleng);
1158      zendlval->value.str.len = yyleng;
1159    }
1160    zendlval->type = IS_STRING;
1161    HANDLE_NEWLINES(yytext, yyleng);
1162    return T_INLINE_HTML;
1163}
1164#line 1165 "Zend/zend_language_scanner.c"
1165yy4:
1166        YYDEBUG(4, *YYCURSOR);
1167        yych = *++YYCURSOR;
1168        goto yy3;
1169yy5:
1170        YYDEBUG(5, *YYCURSOR);
1171        yyaccept = 1;
1172        yych = *(YYMARKER = ++YYCURSOR);
1173        if (yych <= 'O') {
1174            if (yych == '=') goto yy45;
1175        } else {
1176            if (yych <= 'P') goto yy47;
1177            if (yych == 'p') goto yy47;
1178        }
1179yy6:
1180        YYDEBUG(6, *YYCURSOR);
1181        yyleng = YYCURSOR - SCNG(yy_text);
1182#line 1791 "Zend/zend_language_scanner.l"
1183        {
1184    if (CG(short_tags)) {
1185        zendlval->value.str.val = yytext; /* no copying - intentional */
1186        zendlval->value.str.len = yyleng;
1187        zendlval->type = IS_STRING;
1188        BEGIN(ST_IN_SCRIPTING);
1189        return T_OPEN_TAG;
1190    } else {
1191        goto inline_char_handler;
1192    }
1193}
1194#line 1195 "Zend/zend_language_scanner.c"
1195yy7:
1196        YYDEBUG(7, *YYCURSOR);
1197        ++YYCURSOR;
1198        if ((yych = *YYCURSOR) == '=') goto yy43;
1199        YYDEBUG(8, *YYCURSOR);
1200        yyleng = YYCURSOR - SCNG(yy_text);
1201#line 1768 "Zend/zend_language_scanner.l"
1202        {
1203    if (CG(asp_tags)) {
1204        zendlval->value.str.val = yytext; /* no copying - intentional */
1205        zendlval->value.str.len = yyleng;
1206        zendlval->type = IS_STRING;
1207        BEGIN(ST_IN_SCRIPTING);
1208        return T_OPEN_TAG;
1209    } else {
1210        goto inline_char_handler;
1211    }
1212}
1213#line 1214 "Zend/zend_language_scanner.c"
1214yy9:
1215        YYDEBUG(9, *YYCURSOR);
1216        yych = *++YYCURSOR;
1217        if (yych == 'C') goto yy11;
1218        if (yych == 'c') goto yy11;
1219yy10:
1220        YYDEBUG(10, *YYCURSOR);
1221        YYCURSOR = YYMARKER;
1222        if (yyaccept <= 0) {
1223            goto yy3;
1224        } else {
1225            goto yy6;
1226        }
1227yy11:
1228        YYDEBUG(11, *YYCURSOR);
1229        yych = *++YYCURSOR;
1230        if (yych == 'R') goto yy12;
1231        if (yych != 'r') goto yy10;
1232yy12:
1233        YYDEBUG(12, *YYCURSOR);
1234        yych = *++YYCURSOR;
1235        if (yych == 'I') goto yy13;
1236        if (yych != 'i') goto yy10;
1237yy13:
1238        YYDEBUG(13, *YYCURSOR);
1239        yych = *++YYCURSOR;
1240        if (yych == 'P') goto yy14;
1241        if (yych != 'p') goto yy10;
1242yy14:
1243        YYDEBUG(14, *YYCURSOR);
1244        yych = *++YYCURSOR;
1245        if (yych == 'T') goto yy15;
1246        if (yych != 't') goto yy10;
1247yy15:
1248        YYDEBUG(15, *YYCURSOR);
1249        yych = *++YYCURSOR;
1250        if (yych == 'L') goto yy10;
1251        if (yych == 'l') goto yy10;
1252        goto yy17;
1253yy16:
1254        YYDEBUG(16, *YYCURSOR);
1255        ++YYCURSOR;
1256        YYFILL(8);
1257        yych = *YYCURSOR;
1258yy17:
1259        YYDEBUG(17, *YYCURSOR);
1260        if (yybm[0+yych] & 128) {
1261            goto yy16;
1262        }
1263        if (yych == 'L') goto yy18;
1264        if (yych != 'l') goto yy10;
1265yy18:
1266        YYDEBUG(18, *YYCURSOR);
1267        yych = *++YYCURSOR;
1268        if (yych == 'A') goto yy19;
1269        if (yych != 'a') goto yy10;
1270yy19:
1271        YYDEBUG(19, *YYCURSOR);
1272        yych = *++YYCURSOR;
1273        if (yych == 'N') goto yy20;
1274        if (yych != 'n') goto yy10;
1275yy20:
1276        YYDEBUG(20, *YYCURSOR);
1277        yych = *++YYCURSOR;
1278        if (yych == 'G') goto yy21;
1279        if (yych != 'g') goto yy10;
1280yy21:
1281        YYDEBUG(21, *YYCURSOR);
1282        yych = *++YYCURSOR;
1283        if (yych == 'U') goto yy22;
1284        if (yych != 'u') goto yy10;
1285yy22:
1286        YYDEBUG(22, *YYCURSOR);
1287        yych = *++YYCURSOR;
1288        if (yych == 'A') goto yy23;
1289        if (yych != 'a') goto yy10;
1290yy23:
1291        YYDEBUG(23, *YYCURSOR);
1292        yych = *++YYCURSOR;
1293        if (yych == 'G') goto yy24;
1294        if (yych != 'g') goto yy10;
1295yy24:
1296        YYDEBUG(24, *YYCURSOR);
1297        yych = *++YYCURSOR;
1298        if (yych == 'E') goto yy25;
1299        if (yych != 'e') goto yy10;
1300yy25:
1301        YYDEBUG(25, *YYCURSOR);
1302        ++YYCURSOR;
1303        YYFILL(1);
1304        yych = *YYCURSOR;
1305        YYDEBUG(26, *YYCURSOR);
1306        if (yych <= '\r') {
1307            if (yych <= 0x08) goto yy10;
1308            if (yych <= '\n') goto yy25;
1309            if (yych <= '\f') goto yy10;
1310            goto yy25;
1311        } else {
1312            if (yych <= ' ') {
1313                if (yych <= 0x1F) goto yy10;
1314                goto yy25;
1315            } else {
1316                if (yych != '=') goto yy10;
1317            }
1318        }
1319yy27:
1320        YYDEBUG(27, *YYCURSOR);
1321        ++YYCURSOR;
1322        YYFILL(5);
1323        yych = *YYCURSOR;
1324        YYDEBUG(28, *YYCURSOR);
1325        if (yych <= '!') {
1326            if (yych <= '\f') {
1327                if (yych <= 0x08) goto yy10;
1328                if (yych <= '\n') goto yy27;
1329                goto yy10;
1330            } else {
1331                if (yych <= '\r') goto yy27;
1332                if (yych == ' ') goto yy27;
1333                goto yy10;
1334            }
1335        } else {
1336            if (yych <= 'O') {
1337                if (yych <= '"') goto yy30;
1338                if (yych == '\'') goto yy31;
1339                goto yy10;
1340            } else {
1341                if (yych <= 'P') goto yy29;
1342                if (yych != 'p') goto yy10;
1343            }
1344        }
1345yy29:
1346        YYDEBUG(29, *YYCURSOR);
1347        yych = *++YYCURSOR;
1348        if (yych == 'H') goto yy42;
1349        if (yych == 'h') goto yy42;
1350        goto yy10;
1351yy30:
1352        YYDEBUG(30, *YYCURSOR);
1353        yych = *++YYCURSOR;
1354        if (yych == 'P') goto yy39;
1355        if (yych == 'p') goto yy39;
1356        goto yy10;
1357yy31:
1358        YYDEBUG(31, *YYCURSOR);
1359        yych = *++YYCURSOR;
1360        if (yych == 'P') goto yy32;
1361        if (yych != 'p') goto yy10;
1362yy32:
1363        YYDEBUG(32, *YYCURSOR);
1364        yych = *++YYCURSOR;
1365        if (yych == 'H') goto yy33;
1366        if (yych != 'h') goto yy10;
1367yy33:
1368        YYDEBUG(33, *YYCURSOR);
1369        yych = *++YYCURSOR;
1370        if (yych == 'P') goto yy34;
1371        if (yych != 'p') goto yy10;
1372yy34:
1373        YYDEBUG(34, *YYCURSOR);
1374        yych = *++YYCURSOR;
1375        if (yych != '\'') goto yy10;
1376yy35:
1377        YYDEBUG(35, *YYCURSOR);
1378        ++YYCURSOR;
1379        YYFILL(1);
1380        yych = *YYCURSOR;
1381        YYDEBUG(36, *YYCURSOR);
1382        if (yych <= '\r') {
1383            if (yych <= 0x08) goto yy10;
1384            if (yych <= '\n') goto yy35;
1385            if (yych <= '\f') goto yy10;
1386            goto yy35;
1387        } else {
1388            if (yych <= ' ') {
1389                if (yych <= 0x1F) goto yy10;
1390                goto yy35;
1391            } else {
1392                if (yych != '>') goto yy10;
1393            }
1394        }
1395        YYDEBUG(37, *YYCURSOR);
1396        ++YYCURSOR;
1397        YYDEBUG(38, *YYCURSOR);
1398        yyleng = YYCURSOR - SCNG(yy_text);
1399#line 1728 "Zend/zend_language_scanner.l"
1400        {
1401    YYCTYPE *bracket = (YYCTYPE*)zend_memrchr(yytext, '<', yyleng - (sizeof("script language=php>") - 1));
1402
1403    if (bracket != SCNG(yy_text)) {
1404        /* Handle previously scanned HTML, as possible <script> tags found are assumed to not be PHP's */
1405        YYCURSOR = bracket;
1406        goto inline_html;
1407    }
1408
1409    HANDLE_NEWLINES(yytext, yyleng);
1410    zendlval->value.str.val = yytext; /* no copying - intentional */
1411    zendlval->value.str.len = yyleng;
1412    zendlval->type = IS_STRING;
1413    BEGIN(ST_IN_SCRIPTING);
1414    return T_OPEN_TAG;
1415}
1416#line 1417 "Zend/zend_language_scanner.c"
1417yy39:
1418        YYDEBUG(39, *YYCURSOR);
1419        yych = *++YYCURSOR;
1420        if (yych == 'H') goto yy40;
1421        if (yych != 'h') goto yy10;
1422yy40:
1423        YYDEBUG(40, *YYCURSOR);
1424        yych = *++YYCURSOR;
1425        if (yych == 'P') goto yy41;
1426        if (yych != 'p') goto yy10;
1427yy41:
1428        YYDEBUG(41, *YYCURSOR);
1429        yych = *++YYCURSOR;
1430        if (yych == '"') goto yy35;
1431        goto yy10;
1432yy42:
1433        YYDEBUG(42, *YYCURSOR);
1434        yych = *++YYCURSOR;
1435        if (yych == 'P') goto yy35;
1436        if (yych == 'p') goto yy35;
1437        goto yy10;
1438yy43:
1439        YYDEBUG(43, *YYCURSOR);
1440        ++YYCURSOR;
1441        YYDEBUG(44, *YYCURSOR);
1442        yyleng = YYCURSOR - SCNG(yy_text);
1443#line 1746 "Zend/zend_language_scanner.l"
1444        {
1445    if (CG(asp_tags)) {
1446        zendlval->value.str.val = yytext; /* no copying - intentional */
1447        zendlval->value.str.len = yyleng;
1448        zendlval->type = IS_STRING;
1449        BEGIN(ST_IN_SCRIPTING);
1450        return T_OPEN_TAG_WITH_ECHO;
1451    } else {
1452        goto inline_char_handler;
1453    }
1454}
1455#line 1456 "Zend/zend_language_scanner.c"
1456yy45:
1457        YYDEBUG(45, *YYCURSOR);
1458        ++YYCURSOR;
1459        YYDEBUG(46, *YYCURSOR);
1460        yyleng = YYCURSOR - SCNG(yy_text);
1461#line 1759 "Zend/zend_language_scanner.l"
1462        {
1463    zendlval->value.str.val = yytext; /* no copying - intentional */
1464    zendlval->value.str.len = yyleng;
1465    zendlval->type = IS_STRING;
1466    BEGIN(ST_IN_SCRIPTING);
1467    return T_OPEN_TAG_WITH_ECHO;
1468}
1469#line 1470 "Zend/zend_language_scanner.c"
1470yy47:
1471        YYDEBUG(47, *YYCURSOR);
1472        yych = *++YYCURSOR;
1473        if (yych == 'H') goto yy48;
1474        if (yych != 'h') goto yy10;
1475yy48:
1476        YYDEBUG(48, *YYCURSOR);
1477        yych = *++YYCURSOR;
1478        if (yych == 'P') goto yy49;
1479        if (yych != 'p') goto yy10;
1480yy49:
1481        YYDEBUG(49, *YYCURSOR);
1482        yych = *++YYCURSOR;
1483        if (yych <= '\f') {
1484            if (yych <= 0x08) goto yy10;
1485            if (yych >= '\v') goto yy10;
1486        } else {
1487            if (yych <= '\r') goto yy52;
1488            if (yych != ' ') goto yy10;
1489        }
1490yy50:
1491        YYDEBUG(50, *YYCURSOR);
1492        ++YYCURSOR;
1493yy51:
1494        YYDEBUG(51, *YYCURSOR);
1495        yyleng = YYCURSOR - SCNG(yy_text);
1496#line 1781 "Zend/zend_language_scanner.l"
1497        {
1498    zendlval->value.str.val = yytext; /* no copying - intentional */
1499    zendlval->value.str.len = yyleng;
1500    zendlval->type = IS_STRING;
1501    HANDLE_NEWLINE(yytext[yyleng-1]);
1502    BEGIN(ST_IN_SCRIPTING);
1503    return T_OPEN_TAG;
1504}
1505#line 1506 "Zend/zend_language_scanner.c"
1506yy52:
1507        YYDEBUG(52, *YYCURSOR);
1508        ++YYCURSOR;
1509        if ((yych = *YYCURSOR) == '\n') goto yy50;
1510        goto yy51;
1511    }
1512/* *********************************** */
1513yyc_ST_BACKQUOTE:
1514    {
1515        static const unsigned char yybm[] = {
1516              0,   0,   0,   0,   0,   0,   0,   0,
1517              0,   0,   0,   0,   0,   0,   0,   0,
1518              0,   0,   0,   0,   0,   0,   0,   0,
1519              0,   0,   0,   0,   0,   0,   0,   0,
1520              0,   0,   0,   0,   0,   0,   0,   0,
1521              0,   0,   0,   0,   0,   0,   0,   0,
1522            128, 128, 128, 128, 128, 128, 128, 128,
1523            128, 128,   0,   0,   0,   0,   0,   0,
1524              0, 128, 128, 128, 128, 128, 128, 128,
1525            128, 128, 128, 128, 128, 128, 128, 128,
1526            128, 128, 128, 128, 128, 128, 128, 128,
1527            128, 128, 128,   0,   0,   0,   0, 128,
1528              0, 128, 128, 128, 128, 128, 128, 128,
1529            128, 128, 128, 128, 128, 128, 128, 128,
1530            128, 128, 128, 128, 128, 128, 128, 128,
1531            128, 128, 128,   0,   0,   0,   0, 128,
1532            128, 128, 128, 128, 128, 128, 128, 128,
1533            128, 128, 128, 128, 128, 128, 128, 128,
1534            128, 128, 128, 128, 128, 128, 128, 128,
1535            128, 128, 128, 128, 128, 128, 128, 128,
1536            128, 128, 128, 128, 128, 128, 128, 128,
1537            128, 128, 128, 128, 128, 128, 128, 128,
1538            128, 128, 128, 128, 128, 128, 128, 128,
1539            128, 128, 128, 128, 128, 128, 128, 128,
1540            128, 128, 128, 128, 128, 128, 128, 128,
1541            128, 128, 128, 128, 128, 128, 128, 128,
1542            128, 128, 128, 128, 128, 128, 128, 128,
1543            128, 128, 128, 128, 128, 128, 128, 128,
1544            128, 128, 128, 128, 128, 128, 128, 128,
1545            128, 128, 128, 128, 128, 128, 128, 128,
1546            128, 128, 128, 128, 128, 128, 128, 128,
1547            128, 128, 128, 128, 128, 128, 128, 128,
1548        };
1549        YYDEBUG(53, *YYCURSOR);
1550        YYFILL(2);
1551        yych = *YYCURSOR;
1552        if (yych <= '_') {
1553            if (yych != '$') goto yy60;
1554        } else {
1555            if (yych <= '`') goto yy58;
1556            if (yych == '{') goto yy57;
1557            goto yy60;
1558        }
1559        YYDEBUG(55, *YYCURSOR);
1560        ++YYCURSOR;
1561        if ((yych = *YYCURSOR) <= '_') {
1562            if (yych <= '@') goto yy56;
1563            if (yych <= 'Z') goto yy63;
1564            if (yych >= '_') goto yy63;
1565        } else {
1566            if (yych <= 'z') {
1567                if (yych >= 'a') goto yy63;
1568            } else {
1569                if (yych <= '{') goto yy66;
1570                if (yych >= 0x7F) goto yy63;
1571            }
1572        }
1573yy56:
1574        YYDEBUG(56, *YYCURSOR);
1575        yyleng = YYCURSOR - SCNG(yy_text);
1576#line 2254 "Zend/zend_language_scanner.l"
1577        {
1578    if (YYCURSOR > YYLIMIT) {
1579        return 0;
1580    }
1581    if (yytext[0] == '\\' && YYCURSOR < YYLIMIT) {
1582        YYCURSOR++;
1583    }
1584
1585    while (YYCURSOR < YYLIMIT) {
1586        switch (*YYCURSOR++) {
1587            case '`':
1588                break;
1589            case '$':
1590                if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {
1591                    break;
1592                }
1593                continue;
1594            case '{':
1595                if (*YYCURSOR == '$') {
1596                    break;
1597                }
1598                continue;
1599            case '\\':
1600                if (YYCURSOR < YYLIMIT) {
1601                    YYCURSOR++;
1602                }
1603                /* fall through */
1604            default:
1605                continue;
1606        }
1607
1608        YYCURSOR--;
1609        break;
1610    }
1611
1612    yyleng = YYCURSOR - SCNG(yy_text);
1613
1614    zend_scan_escape_string(zendlval, yytext, yyleng, '`' TSRMLS_CC);
1615    return T_ENCAPSED_AND_WHITESPACE;
1616}
1617#line 1618 "Zend/zend_language_scanner.c"
1618yy57:
1619        YYDEBUG(57, *YYCURSOR);
1620        yych = *++YYCURSOR;
1621        if (yych == '$') goto yy61;
1622        goto yy56;
1623yy58:
1624        YYDEBUG(58, *YYCURSOR);
1625        ++YYCURSOR;
1626        YYDEBUG(59, *YYCURSOR);
1627        yyleng = YYCURSOR - SCNG(yy_text);
1628#line 2198 "Zend/zend_language_scanner.l"
1629        {
1630    BEGIN(ST_IN_SCRIPTING);
1631    return '`';
1632}
1633#line 1634 "Zend/zend_language_scanner.c"
1634yy60:
1635        YYDEBUG(60, *YYCURSOR);
1636        yych = *++YYCURSOR;
1637        goto yy56;
1638yy61:
1639        YYDEBUG(61, *YYCURSOR);
1640        ++YYCURSOR;
1641        YYDEBUG(62, *YYCURSOR);
1642        yyleng = YYCURSOR - SCNG(yy_text);
1643#line 2185 "Zend/zend_language_scanner.l"
1644        {
1645    zendlval->value.lval = (long) '{';
1646    yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
1647    yyless(1);
1648    return T_CURLY_OPEN;
1649}
1650#line 1651 "Zend/zend_language_scanner.c"
1651yy63:
1652        YYDEBUG(63, *YYCURSOR);
1653        yyaccept = 0;
1654        YYMARKER = ++YYCURSOR;
1655        YYFILL(3);
1656        yych = *YYCURSOR;
1657        YYDEBUG(64, *YYCURSOR);
1658        if (yybm[0+yych] & 128) {
1659            goto yy63;
1660        }
1661        if (yych == '-') goto yy68;
1662        if (yych == '[') goto yy70;
1663yy65:
1664        YYDEBUG(65, *YYCURSOR);
1665        yyleng = YYCURSOR - SCNG(yy_text);
1666#line 1885 "Zend/zend_language_scanner.l"
1667        {
1668    zend_copy_value(zendlval, (yytext+1), (yyleng-1));
1669    zendlval->type = IS_STRING;
1670    return T_VARIABLE;
1671}
1672#line 1673 "Zend/zend_language_scanner.c"
1673yy66:
1674        YYDEBUG(66, *YYCURSOR);
1675        ++YYCURSOR;
1676        YYDEBUG(67, *YYCURSOR);
1677        yyleng = YYCURSOR - SCNG(yy_text);
1678#line 1461 "Zend/zend_language_scanner.l"
1679        {
1680    yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
1681    return T_DOLLAR_OPEN_CURLY_BRACES;
1682}
1683#line 1684 "Zend/zend_language_scanner.c"
1684yy68:
1685        YYDEBUG(68, *YYCURSOR);
1686        yych = *++YYCURSOR;
1687        if (yych == '>') goto yy72;
1688yy69:
1689        YYDEBUG(69, *YYCURSOR);
1690        YYCURSOR = YYMARKER;
1691        goto yy65;
1692yy70:
1693        YYDEBUG(70, *YYCURSOR);
1694        ++YYCURSOR;
1695        YYDEBUG(71, *YYCURSOR);
1696        yyleng = YYCURSOR - SCNG(yy_text);
1697#line 1877 "Zend/zend_language_scanner.l"
1698        {
1699    yyless(yyleng - 1);
1700    yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
1701    zend_copy_value(zendlval, (yytext+1), (yyleng-1));
1702    zendlval->type = IS_STRING;
1703    return T_VARIABLE;
1704}
1705#line 1706 "Zend/zend_language_scanner.c"
1706yy72:
1707        YYDEBUG(72, *YYCURSOR);
1708        yych = *++YYCURSOR;
1709        if (yych <= '_') {
1710            if (yych <= '@') goto yy69;
1711            if (yych <= 'Z') goto yy73;
1712            if (yych <= '^') goto yy69;
1713        } else {
1714            if (yych <= '`') goto yy69;
1715            if (yych <= 'z') goto yy73;
1716            if (yych <= '~') goto yy69;
1717        }
1718yy73:
1719        YYDEBUG(73, *YYCURSOR);
1720        ++YYCURSOR;
1721        YYDEBUG(74, *YYCURSOR);
1722        yyleng = YYCURSOR - SCNG(yy_text);
1723#line 1867 "Zend/zend_language_scanner.l"
1724        {
1725    yyless(yyleng - 3);
1726    yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
1727    zend_copy_value(zendlval, (yytext+1), (yyleng-1));
1728    zendlval->type = IS_STRING;
1729    return T_VARIABLE;
1730}
1731#line 1732 "Zend/zend_language_scanner.c"
1732    }
1733/* *********************************** */
1734yyc_ST_DOUBLE_QUOTES:
1735    {
1736        static const unsigned char yybm[] = {
1737              0,   0,   0,   0,   0,   0,   0,   0,
1738              0,   0,   0,   0,   0,   0,   0,   0,
1739              0,   0,   0,   0,   0,   0,   0,   0,
1740              0,   0,   0,   0,   0,   0,   0,   0,
1741              0,   0,   0,   0,   0,   0,   0,   0,
1742              0,   0,   0,   0,   0,   0,   0,   0,
1743            128, 128, 128, 128, 128, 128, 128, 128,
1744            128, 128,   0,   0,   0,   0,   0,   0,
1745              0, 128, 128, 128, 128, 128, 128, 128,
1746            128, 128, 128, 128, 128, 128, 128, 128,
1747            128, 128, 128, 128, 128, 128, 128, 128,
1748            128, 128, 128,   0,   0,   0,   0, 128,
1749              0, 128, 128, 128, 128, 128, 128, 128,
1750            128, 128, 128, 128, 128, 128, 128, 128,
1751            128, 128, 128, 128, 128, 128, 128, 128,
1752            128, 128, 128,   0,   0,   0,   0, 128,
1753            128, 128, 128, 128, 128, 128, 128, 128,
1754            128, 128, 128, 128, 128, 128, 128, 128,
1755            128, 128, 128, 128, 128, 128, 128, 128,
1756            128, 128, 128, 128, 128, 128, 128, 128,
1757            128, 128, 128, 128, 128, 128, 128, 128,
1758            128, 128, 128, 128, 128, 128, 128, 128,
1759            128, 128, 128, 128, 128, 128, 128, 128,
1760            128, 128, 128, 128, 128, 128, 128, 128,
1761            128, 128, 128, 128, 128, 128, 128, 128,
1762            128, 128, 128, 128, 128, 128, 128, 128,
1763            128, 128, 128, 128, 128, 128, 128, 128,
1764            128, 128, 128, 128, 128, 128, 128, 128,
1765            128, 128, 128, 128, 128, 128, 128, 128,
1766            128, 128, 128, 128, 128, 128, 128, 128,
1767            128, 128, 128, 128, 128, 128, 128, 128,
1768            128, 128, 128, 128, 128, 128, 128, 128,
1769        };
1770        YYDEBUG(75, *YYCURSOR);
1771        YYFILL(2);
1772        yych = *YYCURSOR;
1773        if (yych <= '#') {
1774            if (yych == '"') goto yy80;
1775            goto yy82;
1776        } else {
1777            if (yych <= '$') goto yy77;
1778            if (yych == '{') goto yy79;
1779            goto yy82;
1780        }
1781yy77:
1782        YYDEBUG(77, *YYCURSOR);
1783        ++YYCURSOR;
1784        if ((yych = *YYCURSOR) <= '_') {
1785            if (yych <= '@') goto yy78;
1786            if (yych <= 'Z') goto yy85;
1787            if (yych >= '_') goto yy85;
1788        } else {
1789            if (yych <= 'z') {
1790                if (yych >= 'a') goto yy85;
1791            } else {
1792                if (yych <= '{') goto yy88;
1793                if (yych >= 0x7F) goto yy85;
1794            }
1795        }
1796yy78:
1797        YYDEBUG(78, *YYCURSOR);
1798        yyleng = YYCURSOR - SCNG(yy_text);
1799#line 2204 "Zend/zend_language_scanner.l"
1800        {
1801    if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) {
1802        YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1;
1803        SET_DOUBLE_QUOTES_SCANNED_LENGTH(0);
1804
1805        goto double_quotes_scan_done;
1806    }
1807
1808    if (YYCURSOR > YYLIMIT) {
1809        return 0;
1810    }
1811    if (yytext[0] == '\\' && YYCURSOR < YYLIMIT) {
1812        YYCURSOR++;
1813    }
1814
1815    while (YYCURSOR < YYLIMIT) {
1816        switch (*YYCURSOR++) {
1817            case '"':
1818                break;
1819            case '$':
1820                if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {
1821                    break;
1822                }
1823                continue;
1824            case '{':
1825                if (*YYCURSOR == '$') {
1826                    break;
1827                }
1828                continue;
1829            case '\\':
1830                if (YYCURSOR < YYLIMIT) {
1831                    YYCURSOR++;
1832                }
1833                /* fall through */
1834            default:
1835                continue;
1836        }
1837
1838        YYCURSOR--;
1839        break;
1840    }
1841
1842double_quotes_scan_done:
1843    yyleng = YYCURSOR - SCNG(yy_text);
1844
1845    zend_scan_escape_string(zendlval, yytext, yyleng, '"' TSRMLS_CC);
1846    return T_ENCAPSED_AND_WHITESPACE;
1847}
1848#line 1849 "Zend/zend_language_scanner.c"
1849yy79:
1850        YYDEBUG(79, *YYCURSOR);
1851        yych = *++YYCURSOR;
1852        if (yych == '$') goto yy83;
1853        goto yy78;
1854yy80:
1855        YYDEBUG(80, *YYCURSOR);
1856        ++YYCURSOR;
1857        YYDEBUG(81, *YYCURSOR);
1858        yyleng = YYCURSOR - SCNG(yy_text);
1859#line 2193 "Zend/zend_language_scanner.l"
1860        {
1861    BEGIN(ST_IN_SCRIPTING);
1862    return '"';
1863}
1864#line 1865 "Zend/zend_language_scanner.c"
1865yy82:
1866        YYDEBUG(82, *YYCURSOR);
1867        yych = *++YYCURSOR;
1868        goto yy78;
1869yy83:
1870        YYDEBUG(83, *YYCURSOR);
1871        ++YYCURSOR;
1872        YYDEBUG(84, *YYCURSOR);
1873        yyleng = YYCURSOR - SCNG(yy_text);
1874#line 2185 "Zend/zend_language_scanner.l"
1875        {
1876    zendlval->value.lval = (long) '{';
1877    yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
1878    yyless(1);
1879    return T_CURLY_OPEN;
1880}
1881#line 1882 "Zend/zend_language_scanner.c"
1882yy85:
1883        YYDEBUG(85, *YYCURSOR);
1884        yyaccept = 0;
1885        YYMARKER = ++YYCURSOR;
1886        YYFILL(3);
1887        yych = *YYCURSOR;
1888        YYDEBUG(86, *YYCURSOR);
1889        if (yybm[0+yych] & 128) {
1890            goto yy85;
1891        }
1892        if (yych == '-') goto yy90;
1893        if (yych == '[') goto yy92;
1894yy87:
1895        YYDEBUG(87, *YYCURSOR);
1896        yyleng = YYCURSOR - SCNG(yy_text);
1897#line 1885 "Zend/zend_language_scanner.l"
1898        {
1899    zend_copy_value(zendlval, (yytext+1), (yyleng-1));
1900    zendlval->type = IS_STRING;
1901    return T_VARIABLE;
1902}
1903#line 1904 "Zend/zend_language_scanner.c"
1904yy88:
1905        YYDEBUG(88, *YYCURSOR);
1906        ++YYCURSOR;
1907        YYDEBUG(89, *YYCURSOR);
1908        yyleng = YYCURSOR - SCNG(yy_text);
1909#line 1461 "Zend/zend_language_scanner.l"
1910        {
1911    yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
1912    return T_DOLLAR_OPEN_CURLY_BRACES;
1913}
1914#line 1915 "Zend/zend_language_scanner.c"
1915yy90:
1916        YYDEBUG(90, *YYCURSOR);
1917        yych = *++YYCURSOR;
1918        if (yych == '>') goto yy94;
1919yy91:
1920        YYDEBUG(91, *YYCURSOR);
1921        YYCURSOR = YYMARKER;
1922        goto yy87;
1923yy92:
1924        YYDEBUG(92, *YYCURSOR);
1925        ++YYCURSOR;
1926        YYDEBUG(93, *YYCURSOR);
1927        yyleng = YYCURSOR - SCNG(yy_text);
1928#line 1877 "Zend/zend_language_scanner.l"
1929        {
1930    yyless(yyleng - 1);
1931    yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
1932    zend_copy_value(zendlval, (yytext+1), (yyleng-1));
1933    zendlval->type = IS_STRING;
1934    return T_VARIABLE;
1935}
1936#line 1937 "Zend/zend_language_scanner.c"
1937yy94:
1938        YYDEBUG(94, *YYCURSOR);
1939        yych = *++YYCURSOR;
1940        if (yych <= '_') {
1941            if (yych <= '@') goto yy91;
1942            if (yych <= 'Z') goto yy95;
1943            if (yych <= '^') goto yy91;
1944        } else {
1945            if (yych <= '`') goto yy91;
1946            if (yych <= 'z') goto yy95;
1947            if (yych <= '~') goto yy91;
1948        }
1949yy95:
1950        YYDEBUG(95, *YYCURSOR);
1951        ++YYCURSOR;
1952        YYDEBUG(96, *YYCURSOR);
1953        yyleng = YYCURSOR - SCNG(yy_text);
1954#line 1867 "Zend/zend_language_scanner.l"
1955        {
1956    yyless(yyleng - 3);
1957    yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
1958    zend_copy_value(zendlval, (yytext+1), (yyleng-1));
1959    zendlval->type = IS_STRING;
1960    return T_VARIABLE;
1961}
1962#line 1963 "Zend/zend_language_scanner.c"
1963    }
1964/* *********************************** */
1965yyc_ST_END_HEREDOC:
1966    YYDEBUG(97, *YYCURSOR);
1967    YYFILL(1);
1968    yych = *YYCURSOR;
1969    YYDEBUG(99, *YYCURSOR);
1970    ++YYCURSOR;
1971    YYDEBUG(100, *YYCURSOR);
1972    yyleng = YYCURSOR - SCNG(yy_text);
1973#line 2171 "Zend/zend_language_scanner.l"
1974    {
1975    zend_heredoc_label *heredoc_label = zend_ptr_stack_pop(&SCNG(heredoc_label_stack));
1976
1977    YYCURSOR += heredoc_label->length - 1;
1978    yyleng = heredoc_label->length;
1979
1980    heredoc_label_dtor(heredoc_label);
1981    efree(heredoc_label);
1982
1983    BEGIN(ST_IN_SCRIPTING);
1984    return T_END_HEREDOC;
1985}
1986#line 1987 "Zend/zend_language_scanner.c"
1987/* *********************************** */
1988yyc_ST_HEREDOC:
1989    {
1990        static const unsigned char yybm[] = {
1991              0,   0,   0,   0,   0,   0,   0,   0,
1992              0,   0,   0,   0,   0,   0,   0,   0,
1993              0,   0,   0,   0,   0,   0,   0,   0,
1994              0,   0,   0,   0,   0,   0,   0,   0,
1995              0,   0,   0,   0,   0,   0,   0,   0,
1996              0,   0,   0,   0,   0,   0,   0,   0,
1997            128, 128, 128, 128, 128, 128, 128, 128,
1998            128, 128,   0,   0,   0,   0,   0,   0,
1999              0, 128, 128, 128, 128, 128, 128, 128,
2000            128, 128, 128, 128, 128, 128, 128, 128,
2001            128, 128, 128, 128, 128, 128, 128, 128,
2002            128, 128, 128,   0,   0,   0,   0, 128,
2003              0, 128, 128, 128, 128, 128, 128, 128,
2004            128, 128, 128, 128, 128, 128, 128, 128,
2005            128, 128, 128, 128, 128, 128, 128, 128,
2006            128, 128, 128,   0,   0,   0,   0, 128,
2007            128, 128, 128, 128, 128, 128, 128, 128,
2008            128, 128, 128, 128, 128, 128, 128, 128,
2009            128, 128, 128, 128, 128, 128, 128, 128,
2010            128, 128, 128, 128, 128, 128, 128, 128,
2011            128, 128, 128, 128, 128, 128, 128, 128,
2012            128, 128, 128, 128, 128, 128, 128, 128,
2013            128, 128, 128, 128, 128, 128, 128, 128,
2014            128, 128, 128, 128, 128, 128, 128, 128,
2015            128, 128, 128, 128, 128, 128, 128, 128,
2016            128, 128, 128, 128, 128, 128, 128, 128,
2017            128, 128, 128, 128, 128, 128, 128, 128,
2018            128, 128, 128, 128, 128, 128, 128, 128,
2019            128, 128, 128, 128, 128, 128, 128, 128,
2020            128, 128, 128, 128, 128, 128, 128, 128,
2021            128, 128, 128, 128, 128, 128, 128, 128,
2022            128, 128, 128, 128, 128, 128, 128, 128,
2023        };
2024        YYDEBUG(101, *YYCURSOR);
2025        YYFILL(2);
2026        yych = *YYCURSOR;
2027        if (yych == '$') goto yy103;
2028        if (yych == '{') goto yy105;
2029        goto yy106;
2030yy103:
2031        YYDEBUG(103, *YYCURSOR);
2032        ++YYCURSOR;
2033        if ((yych = *YYCURSOR) <= '_') {
2034            if (yych <= '@') goto yy104;
2035            if (yych <= 'Z') goto yy109;
2036            if (yych >= '_') goto yy109;
2037        } else {
2038            if (yych <= 'z') {
2039                if (yych >= 'a') goto yy109;
2040            } else {
2041                if (yych <= '{') goto yy112;
2042                if (yych >= 0x7F) goto yy109;
2043            }
2044        }
2045yy104:
2046        YYDEBUG(104, *YYCURSOR);
2047        yyleng = YYCURSOR - SCNG(yy_text);
2048#line 2296 "Zend/zend_language_scanner.l"
2049        {
2050    int newline = 0;
2051
2052    zend_heredoc_label *heredoc_label = zend_ptr_stack_top(&SCNG(heredoc_label_stack));
2053
2054    if (YYCURSOR > YYLIMIT) {
2055        return 0;
2056    }
2057
2058    YYCURSOR--;
2059
2060    while (YYCURSOR < YYLIMIT) {
2061        switch (*YYCURSOR++) {
2062            case '\r':
2063                if (*YYCURSOR == '\n') {
2064                    YYCURSOR++;
2065                }
2066                /* fall through */
2067            case '\n':
2068                /* Check for ending label on the next line */
2069                if (IS_LABEL_START(*YYCURSOR) && heredoc_label->length < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, heredoc_label->label, heredoc_label->length)) {
2070                    YYCTYPE *end = YYCURSOR + heredoc_label->length;
2071
2072                    if (*end == ';') {
2073                        end++;
2074                    }
2075
2076                    if (*end == '\n' || *end == '\r') {
2077                        /* newline before label will be subtracted from returned text, but
2078                         * yyleng/yytext will include it, for zend_highlight/strip, tokenizer, etc. */
2079                        if (YYCURSOR[-2] == '\r' && YYCURSOR[-1] == '\n') {
2080                            newline = 2; /* Windows newline */
2081                        } else {
2082                            newline = 1;
2083                        }
2084
2085                        CG(increment_lineno) = 1; /* For newline before label */
2086                        BEGIN(ST_END_HEREDOC);
2087
2088                        goto heredoc_scan_done;
2089                    }
2090                }
2091                continue;
2092            case '$':
2093                if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {
2094                    break;
2095                }
2096                continue;
2097            case '{':
2098                if (*YYCURSOR == '$') {
2099                    break;
2100                }
2101                continue;
2102            case '\\':
2103                if (YYCURSOR < YYLIMIT && *YYCURSOR != '\n' && *YYCURSOR != '\r') {
2104                    YYCURSOR++;
2105                }
2106                /* fall through */
2107            default:
2108                continue;
2109        }
2110
2111        YYCURSOR--;
2112        break;
2113    }
2114
2115heredoc_scan_done:
2116    yyleng = YYCURSOR - SCNG(yy_text);
2117
2118    zend_scan_escape_string(zendlval, yytext, yyleng - newline, 0 TSRMLS_CC);
2119    return T_ENCAPSED_AND_WHITESPACE;
2120}
2121#line 2122 "Zend/zend_language_scanner.c"
2122yy105:
2123        YYDEBUG(105, *YYCURSOR);
2124        yych = *++YYCURSOR;
2125        if (yych == '$') goto yy107;
2126        goto yy104;
2127yy106:
2128        YYDEBUG(106, *YYCURSOR);
2129        yych = *++YYCURSOR;
2130        goto yy104;
2131yy107:
2132        YYDEBUG(107, *YYCURSOR);
2133        ++YYCURSOR;
2134        YYDEBUG(108, *YYCURSOR);
2135        yyleng = YYCURSOR - SCNG(yy_text);
2136#line 2185 "Zend/zend_language_scanner.l"
2137        {
2138    zendlval->value.lval = (long) '{';
2139    yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
2140    yyless(1);
2141    return T_CURLY_OPEN;
2142}
2143#line 2144 "Zend/zend_language_scanner.c"
2144yy109:
2145        YYDEBUG(109, *YYCURSOR);
2146        yyaccept = 0;
2147        YYMARKER = ++YYCURSOR;
2148        YYFILL(3);
2149        yych = *YYCURSOR;
2150        YYDEBUG(110, *YYCURSOR);
2151        if (yybm[0+yych] & 128) {
2152            goto yy109;
2153        }
2154        if (yych == '-') goto yy114;
2155        if (yych == '[') goto yy116;
2156yy111:
2157        YYDEBUG(111, *YYCURSOR);
2158        yyleng = YYCURSOR - SCNG(yy_text);
2159#line 1885 "Zend/zend_language_scanner.l"
2160        {
2161    zend_copy_value(zendlval, (yytext+1), (yyleng-1));
2162    zendlval->type = IS_STRING;
2163    return T_VARIABLE;
2164}
2165#line 2166 "Zend/zend_language_scanner.c"
2166yy112:
2167        YYDEBUG(112, *YYCURSOR);
2168        ++YYCURSOR;
2169        YYDEBUG(113, *YYCURSOR);
2170        yyleng = YYCURSOR - SCNG(yy_text);
2171#line 1461 "Zend/zend_language_scanner.l"
2172        {
2173    yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
2174    return T_DOLLAR_OPEN_CURLY_BRACES;
2175}
2176#line 2177 "Zend/zend_language_scanner.c"
2177yy114:
2178        YYDEBUG(114, *YYCURSOR);
2179        yych = *++YYCURSOR;
2180        if (yych == '>') goto yy118;
2181yy115:
2182        YYDEBUG(115, *YYCURSOR);
2183        YYCURSOR = YYMARKER;
2184        goto yy111;
2185yy116:
2186        YYDEBUG(116, *YYCURSOR);
2187        ++YYCURSOR;
2188        YYDEBUG(117, *YYCURSOR);
2189        yyleng = YYCURSOR - SCNG(yy_text);
2190#line 1877 "Zend/zend_language_scanner.l"
2191        {
2192    yyless(yyleng - 1);
2193    yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
2194    zend_copy_value(zendlval, (yytext+1), (yyleng-1));
2195    zendlval->type = IS_STRING;
2196    return T_VARIABLE;
2197}
2198#line 2199 "Zend/zend_language_scanner.c"
2199yy118:
2200        YYDEBUG(118, *YYCURSOR);
2201        yych = *++YYCURSOR;
2202        if (yych <= '_') {
2203            if (yych <= '@') goto yy115;
2204            if (yych <= 'Z') goto yy119;
2205            if (yych <= '^') goto yy115;
2206        } else {
2207            if (yych <= '`') goto yy115;
2208            if (yych <= 'z') goto yy119;
2209            if (yych <= '~') goto yy115;
2210        }
2211yy119:
2212        YYDEBUG(119, *YYCURSOR);
2213        ++YYCURSOR;
2214        YYDEBUG(120, *YYCURSOR);
2215        yyleng = YYCURSOR - SCNG(yy_text);
2216#line 1867 "Zend/zend_language_scanner.l"
2217        {
2218    yyless(yyleng - 3);
2219    yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
2220    zend_copy_value(zendlval, (yytext+1), (yyleng-1));
2221    zendlval->type = IS_STRING;
2222    return T_VARIABLE;
2223}
2224#line 2225 "Zend/zend_language_scanner.c"
2225    }
2226/* *********************************** */
2227yyc_ST_IN_SCRIPTING:
2228    {
2229        static const unsigned char yybm[] = {
2230              0,   0,   0,   0,   0,   0,   0,   0,
2231              0, 192,  64,   0,   0,  64,   0,   0,
2232              0,   0,   0,   0,   0,   0,   0,   0,
2233              0,   0,   0,   0,   0,   0,   0,   0,
2234            192,   0,   0,   0,   0,   0,   0,   0,
2235              0,   0,   0,   0,   0,   0,   0,   0,
2236             60,  60,  44,  44,  44,  44,  44,  44,
2237             44,  44,   0,   0,   0,   0,   0,   0,
2238              0,  36,  36,  36,  36,  36,  36,   4,
2239              4,   4,   4,   4,   4,   4,   4,   4,
2240              4,   4,   4,   4,   4,   4,   4,   4,
2241              4,   4,   4,   0,   0,   0,   0,   4,
2242              0,  36,  36,  36,  36,  36,  36,   4,
2243              4,   4,   4,   4,   4,   4,   4,   4,
2244              4,   4,   4,   4,   4,   4,   4,   4,
2245              4,   4,   4,   0,   0,   0,   0,   4,
2246              4,   4,   4,   4,   4,   4,   4,   4,
2247              4,   4,   4,   4,   4,   4,   4,   4,
2248              4,   4,   4,   4,   4,   4,   4,   4,
2249              4,   4,   4,   4,   4,   4,   4,   4,
2250              4,   4,   4,   4,   4,   4,   4,   4,
2251              4,   4,   4,   4,   4,   4,   4,   4,
2252              4,   4,   4,   4,   4,   4,   4,   4,
2253              4,   4,   4,   4,   4,   4,   4,   4,
2254              4,   4,   4,   4,   4,   4,   4,   4,
2255              4,   4,   4,   4,   4,   4,   4,   4,
2256              4,   4,   4,   4,   4,   4,   4,   4,
2257              4,   4,   4,   4,   4,   4,   4,   4,
2258              4,   4,   4,   4,   4,   4,   4,   4,
2259              4,   4,   4,   4,   4,   4,   4,   4,
2260              4,   4,   4,   4,   4,   4,   4,   4,
2261              4,   4,   4,   4,   4,   4,   4,   4,
2262        };
2263        YYDEBUG(121, *YYCURSOR);
2264        YYFILL(16);
2265        yych = *YYCURSOR;
2266        YYDEBUG(-1, yych);
2267        switch (yych) {
2268        case 0x00:
2269        case 0x01:
2270        case 0x02:
2271        case 0x03:
2272        case 0x04:
2273        case 0x05:
2274        case 0x06:
2275        case 0x07:
2276        case 0x08:
2277        case '\v':
2278        case '\f':
2279        case 0x0E:
2280        case 0x0F:
2281        case 0x10:
2282        case 0x11:
2283        case 0x12:
2284        case 0x13:
2285        case 0x14:
2286        case 0x15:
2287        case 0x16:
2288        case 0x17:
2289        case 0x18:
2290        case 0x19:
2291        case 0x1A:
2292        case 0x1B:
2293        case 0x1C:
2294        case 0x1D:
2295        case 0x1E:
2296        case 0x1F:  goto yy184;
2297        case '\t':
2298        case '\n':
2299        case '\r':
2300        case ' ':   goto yy140;
2301        case '!':   goto yy153;
2302        case '"':   goto yy180;
2303        case '#':   goto yy176;
2304        case '$':   goto yy165;
2305        case '%':   goto yy159;
2306        case '&':   goto yy160;
2307        case '\'':  goto yy178;
2308        case '(':   goto yy147;
2309        case ')':
2310        case ',':
2311        case ';':
2312        case '@':
2313        case '[':
2314        case ']':
2315        case '~':   goto yy166;
2316        case '*':   goto yy156;
2317        case '+':   goto yy152;
2318        case '-':   goto yy138;
2319        case '.':   goto yy158;
2320        case '/':   goto yy157;
2321        case '0':   goto yy172;
2322        case '1':
2323        case '2':
2324        case '3':
2325        case '4':
2326        case '5':
2327        case '6':
2328        case '7':
2329        case '8':
2330        case '9':   goto yy174;
2331        case ':':   goto yy142;
2332        case '<':   goto yy154;
2333        case '=':   goto yy150;
2334        case '>':   goto yy155;
2335        case '?':   goto yy167;
2336        case 'A':
2337        case 'a':   goto yy133;
2338        case 'B':
2339        case 'b':   goto yy135;
2340        case 'C':
2341        case 'c':   goto yy127;
2342        case 'D':
2343        case 'd':   goto yy125;
2344        case 'E':
2345        case 'e':   goto yy123;
2346        case 'F':
2347        case 'f':   goto yy126;
2348        case 'G':
2349        case 'g':   goto yy136;
2350        case 'I':
2351        case 'i':   goto yy131;
2352        case 'L':
2353        case 'l':   goto yy151;
2354        case 'N':
2355        case 'n':   goto yy145;
2356        case 'O':
2357        case 'o':   goto yy163;
2358        case 'P':
2359        case 'p':   goto yy137;
2360        case 'R':
2361        case 'r':   goto yy128;
2362        case 'S':
2363        case 's':   goto yy134;
2364        case 'T':
2365        case 't':   goto yy130;
2366        case 'U':
2367        case 'u':   goto yy148;
2368        case 'V':
2369        case 'v':   goto yy146;
2370        case 'W':
2371        case 'w':   goto yy132;
2372        case 'X':
2373        case 'x':   goto yy164;
2374        case 'Y':
2375        case 'y':   goto yy129;
2376        case '\\':  goto yy143;
2377        case '^':   goto yy162;
2378        case '_':   goto yy149;
2379        case '`':   goto yy182;
2380        case '{':   goto yy168;
2381        case '|':   goto yy161;
2382        case '}':   goto yy170;
2383        default:    goto yy175;
2384        }
2385yy123:
2386        YYDEBUG(123, *YYCURSOR);
2387        ++YYCURSOR;
2388        YYDEBUG(-1, yych);
2389        switch ((yych = *YYCURSOR)) {
2390        case 'C':
2391        case 'c':   goto yy735;
2392        case 'L':
2393        case 'l':   goto yy736;
2394        case 'M':
2395        case 'm':   goto yy737;
2396        case 'N':
2397        case 'n':   goto yy738;
2398        case 'V':
2399        case 'v':   goto yy739;
2400        case 'X':
2401        case 'x':   goto yy740;
2402        default:    goto yy187;
2403        }
2404yy124:
2405        YYDEBUG(124, *YYCURSOR);
2406        yyleng = YYCURSOR - SCNG(yy_text);
2407#line 1908 "Zend/zend_language_scanner.l"
2408        {
2409    zend_copy_value(zendlval, yytext, yyleng);
2410    zendlval->type = IS_STRING;
2411    return T_STRING;
2412}
2413#line 2414 "Zend/zend_language_scanner.c"
2414yy125:
2415        YYDEBUG(125, *YYCURSOR);
2416        yych = *++YYCURSOR;
2417        if (yych <= 'O') {
2418            if (yych <= 'H') {
2419                if (yych == 'E') goto yy717;
2420                goto yy187;
2421            } else {
2422                if (yych <= 'I') goto yy718;
2423                if (yych <= 'N') goto yy187;
2424                goto yy719;
2425            }
2426        } else {
2427            if (yych <= 'h') {
2428                if (yych == 'e') goto yy717;
2429                goto yy187;
2430            } else {
2431                if (yych <= 'i') goto yy718;
2432                if (yych == 'o') goto yy719;
2433                goto yy187;
2434            }
2435        }
2436yy126:
2437        YYDEBUG(126, *YYCURSOR);
2438        yych = *++YYCURSOR;
2439        if (yych <= 'U') {
2440            if (yych <= 'N') {
2441                if (yych == 'I') goto yy693;
2442                goto yy187;
2443            } else {
2444                if (yych <= 'O') goto yy694;
2445                if (yych <= 'T') goto yy187;
2446                goto yy695;
2447            }
2448        } else {
2449            if (yych <= 'n') {
2450                if (yych == 'i') goto yy693;
2451                goto yy187;
2452            } else {
2453                if (yych <= 'o') goto yy694;
2454                if (yych == 'u') goto yy695;
2455                goto yy187;
2456            }
2457        }
2458yy127:
2459        YYDEBUG(127, *YYCURSOR);
2460        yych = *++YYCURSOR;
2461        if (yych <= 'O') {
2462            if (yych <= 'K') {
2463                if (yych == 'A') goto yy658;
2464                goto yy187;
2465            } else {
2466                if (yych <= 'L') goto yy659;
2467                if (yych <= 'N') goto yy187;
2468                goto yy660;
2469            }
2470        } else {
2471            if (yych <= 'k') {
2472                if (yych == 'a') goto yy658;
2473                goto yy187;
2474            } else {
2475                if (yych <= 'l') goto yy659;
2476                if (yych == 'o') goto yy660;
2477                goto yy187;
2478            }
2479        }
2480yy128:
2481        YYDEBUG(128, *YYCURSOR);
2482        yych = *++YYCURSOR;
2483        if (yych == 'E') goto yy640;
2484        if (yych == 'e') goto yy640;
2485        goto yy187;
2486yy129:
2487        YYDEBUG(129, *YYCURSOR);
2488        yych = *++YYCURSOR;
2489        if (yych == 'I') goto yy635;
2490        if (yych == 'i') goto yy635;
2491        goto yy187;
2492yy130:
2493        YYDEBUG(130, *YYCURSOR);
2494        yych = *++YYCURSOR;
2495        if (yych <= 'R') {
2496            if (yych == 'H') goto yy623;
2497            if (yych <= 'Q') goto yy187;
2498            goto yy624;
2499        } else {
2500            if (yych <= 'h') {
2501                if (yych <= 'g') goto yy187;
2502                goto yy623;
2503            } else {
2504                if (yych == 'r') goto yy624;
2505                goto yy187;
2506            }
2507        }
2508yy131:
2509        YYDEBUG(131, *YYCURSOR);
2510        yych = *++YYCURSOR;
2511        if (yych <= 'S') {
2512            if (yych <= 'L') {
2513                if (yych == 'F') goto yy570;
2514                goto yy187;
2515            } else {
2516                if (yych <= 'M') goto yy572;
2517                if (yych <= 'N') goto yy573;
2518                if (yych <= 'R') goto yy187;
2519                goto yy574;
2520            }
2521        } else {
2522            if (yych <= 'm') {
2523                if (yych == 'f') goto yy570;
2524                if (yych <= 'l') goto yy187;
2525                goto yy572;
2526            } else {
2527                if (yych <= 'n') goto yy573;
2528                if (yych == 's') goto yy574;
2529                goto yy187;
2530            }
2531        }
2532yy132:
2533        YYDEBUG(132, *YYCURSOR);
2534        yych = *++YYCURSOR;
2535        if (yych == 'H') goto yy565;
2536        if (yych == 'h') goto yy565;
2537        goto yy187;
2538yy133:
2539        YYDEBUG(133, *YYCURSOR);
2540        yych = *++YYCURSOR;
2541        if (yych <= 'S') {
2542            if (yych <= 'M') {
2543                if (yych == 'B') goto yy547;
2544                goto yy187;
2545            } else {
2546                if (yych <= 'N') goto yy548;
2547                if (yych <= 'Q') goto yy187;
2548                if (yych <= 'R') goto yy549;
2549                goto yy550;
2550            }
2551        } else {
2552            if (yych <= 'n') {
2553                if (yych == 'b') goto yy547;
2554                if (yych <= 'm') goto yy187;
2555                goto yy548;
2556            } else {
2557                if (yych <= 'q') goto yy187;
2558                if (yych <= 'r') goto yy549;
2559                if (yych <= 's') goto yy550;
2560                goto yy187;
2561            }
2562        }
2563yy134:
2564        YYDEBUG(134, *YYCURSOR);
2565        yych = *++YYCURSOR;
2566        if (yych <= 'W') {
2567            if (yych == 'T') goto yy535;
2568            if (yych <= 'V') goto yy187;
2569            goto yy536;
2570        } else {
2571            if (yych <= 't') {
2572                if (yych <= 's') goto yy187;
2573                goto yy535;
2574            } else {
2575                if (yych == 'w') goto yy536;
2576                goto yy187;
2577            }
2578        }
2579yy135:
2580        YYDEBUG(135, *YYCURSOR);
2581        yyaccept = 0;
2582        yych = *(YYMARKER = ++YYCURSOR);
2583        if (yych <= ';') {
2584            if (yych <= '"') {
2585                if (yych <= '!') goto yy187;
2586                goto yy527;
2587            } else {
2588                if (yych == '\'') goto yy528;
2589                goto yy187;
2590            }
2591        } else {
2592            if (yych <= 'R') {
2593                if (yych <= '<') goto yy526;
2594                if (yych <= 'Q') goto yy187;
2595                goto yy529;
2596            } else {
2597                if (yych == 'r') goto yy529;
2598                goto yy187;
2599            }
2600        }
2601yy136:
2602        YYDEBUG(136, *YYCURSOR);
2603        yych = *++YYCURSOR;
2604        if (yych <= 'O') {
2605            if (yych == 'L') goto yy516;
2606            if (yych <= 'N') goto yy187;
2607            goto yy517;
2608        } else {
2609            if (yych <= 'l') {
2610                if (yych <= 'k') goto yy187;
2611                goto yy516;
2612            } else {
2613                if (yych == 'o') goto yy517;
2614                goto yy187;
2615            }
2616        }
2617yy137:
2618        YYDEBUG(137, *YYCURSOR);
2619        yych = *++YYCURSOR;
2620        if (yych <= 'U') {
2621            if (yych == 'R') goto yy492;
2622            if (yych <= 'T') goto yy187;
2623            goto yy493;
2624        } else {
2625            if (yych <= 'r') {
2626                if (yych <= 'q') goto yy187;
2627                goto yy492;
2628            } else {
2629                if (yych == 'u') goto yy493;
2630                goto yy187;
2631            }
2632        }
2633yy138:
2634        YYDEBUG(138, *YYCURSOR);
2635        ++YYCURSOR;
2636        if ((yych = *YYCURSOR) <= '<') {
2637            if (yych == '-') goto yy488;
2638        } else {
2639            if (yych <= '=') goto yy486;
2640            if (yych <= '>') goto yy490;
2641        }
2642yy139:
2643        YYDEBUG(139, *YYCURSOR);
2644        yyleng = YYCURSOR - SCNG(yy_text);
2645#line 1450 "Zend/zend_language_scanner.l"
2646        {
2647    return yytext[0];
2648}
2649#line 2650 "Zend/zend_language_scanner.c"
2650yy140:
2651        YYDEBUG(140, *YYCURSOR);
2652        ++YYCURSOR;
2653        yych = *YYCURSOR;
2654        goto yy485;
2655yy141:
2656        YYDEBUG(141, *YYCURSOR);
2657        yyleng = YYCURSOR - SCNG(yy_text);
2658#line 1181 "Zend/zend_language_scanner.l"
2659        {
2660    zendlval->value.str.val = yytext; /* no copying - intentional */
2661    zendlval->value.str.len = yyleng;
2662    zendlval->type = IS_STRING;
2663    HANDLE_NEWLINES(yytext, yyleng);
2664    return T_WHITESPACE;
2665}
2666#line 2667 "Zend/zend_language_scanner.c"
2667yy142:
2668        YYDEBUG(142, *YYCURSOR);
2669        yych = *++YYCURSOR;
2670        if (yych == ':') goto yy482;
2671        goto yy139;
2672yy143:
2673        YYDEBUG(143, *YYCURSOR);
2674        ++YYCURSOR;
2675        YYDEBUG(144, *YYCURSOR);
2676        yyleng = YYCURSOR - SCNG(yy_text);
2677#line 1210 "Zend/zend_language_scanner.l"
2678        {
2679    return T_NS_SEPARATOR;
2680}
2681#line 2682 "Zend/zend_language_scanner.c"
2682yy145:
2683        YYDEBUG(145, *YYCURSOR);
2684        yych = *++YYCURSOR;
2685        if (yych <= 'E') {
2686            if (yych == 'A') goto yy470;
2687            if (yych <= 'D') goto yy187;
2688            goto yy471;
2689        } else {
2690            if (yych <= 'a') {
2691                if (yych <= '`') goto yy187;
2692                goto yy470;
2693            } else {
2694                if (yych == 'e') goto yy471;
2695                goto yy187;
2696            }
2697        }
2698yy146:
2699        YYDEBUG(146, *YYCURSOR);
2700        yych = *++YYCURSOR;
2701        if (yych == 'A') goto yy467;
2702        if (yych == 'a') goto yy467;
2703        goto yy187;
2704yy147:
2705        YYDEBUG(147, *YYCURSOR);
2706        yyaccept = 1;
2707        yych = *(YYMARKER = ++YYCURSOR);
2708        if (yych <= 'S') {
2709            if (yych <= 'D') {
2710                if (yych <= ' ') {
2711                    if (yych == '\t') goto yy392;
2712                    if (yych <= 0x1F) goto yy139;
2713                    goto yy392;
2714                } else {
2715                    if (yych <= '@') goto yy139;
2716                    if (yych == 'C') goto yy139;
2717                    goto yy392;
2718                }
2719            } else {
2720                if (yych <= 'I') {
2721                    if (yych == 'F') goto yy392;
2722                    if (yych <= 'H') goto yy139;
2723                    goto yy392;
2724                } else {
2725                    if (yych == 'O') goto yy392;
2726                    if (yych <= 'Q') goto yy139;
2727                    goto yy392;
2728                }
2729            }
2730        } else {
2731            if (yych <= 'f') {
2732                if (yych <= 'b') {
2733                    if (yych == 'U') goto yy392;
2734                    if (yych <= '`') goto yy139;
2735                    goto yy392;
2736                } else {
2737                    if (yych == 'd') goto yy392;
2738                    if (yych <= 'e') goto yy139;
2739                    goto yy392;
2740                }
2741            } else {
2742                if (yych <= 'o') {
2743                    if (yych == 'i') goto yy392;
2744                    if (yych <= 'n') goto yy139;
2745                    goto yy392;
2746                } else {
2747                    if (yych <= 's') {
2748                        if (yych <= 'q') goto yy139;
2749                        goto yy392;
2750                    } else {
2751                        if (yych == 'u') goto yy392;
2752                        goto yy139;
2753                    }
2754                }
2755            }
2756        }
2757yy148:
2758        YYDEBUG(148, *YYCURSOR);
2759        yych = *++YYCURSOR;
2760        if (yych <= 'S') {
2761            if (yych == 'N') goto yy383;
2762            if (yych <= 'R') goto yy187;
2763            goto yy384;
2764        } else {
2765            if (yych <= 'n') {
2766                if (yych <= 'm') goto yy187;
2767                goto yy383;
2768            } else {
2769                if (yych == 's') goto yy384;
2770                goto yy187;
2771            }
2772        }
2773yy149:
2774        YYDEBUG(149, *YYCURSOR);
2775        yych = *++YYCURSOR;
2776        if (yych == '_') goto yy301;
2777        goto yy187;
2778yy150:
2779        YYDEBUG(150, *YYCURSOR);
2780        yych = *++YYCURSOR;
2781        if (yych <= '<') goto yy139;
2782        if (yych <= '=') goto yy295;
2783        if (yych <= '>') goto yy297;
2784        goto yy139;
2785yy151:
2786        YYDEBUG(151, *YYCURSOR);
2787        yych = *++YYCURSOR;
2788        if (yych == 'I') goto yy291;
2789        if (yych == 'i') goto yy291;
2790        goto yy187;
2791yy152:
2792        YYDEBUG(152, *YYCURSOR);
2793        yych = *++YYCURSOR;
2794        if (yych == '+') goto yy289;
2795        if (yych == '=') goto yy287;
2796        goto yy139;
2797yy153:
2798        YYDEBUG(153, *YYCURSOR);
2799        yych = *++YYCURSOR;
2800        if (yych == '=') goto yy284;
2801        goto yy139;
2802yy154:
2803        YYDEBUG(154, *YYCURSOR);
2804        yyaccept = 1;
2805        yych = *(YYMARKER = ++YYCURSOR);
2806        if (yych <= ';') {
2807            if (yych == '/') goto yy256;
2808            goto yy139;
2809        } else {
2810            if (yych <= '<') goto yy254;
2811            if (yych <= '=') goto yy257;
2812            if (yych <= '>') goto yy259;
2813            goto yy139;
2814        }
2815yy155:
2816        YYDEBUG(155, *YYCURSOR);
2817        yych = *++YYCURSOR;
2818        if (yych <= '<') goto yy139;
2819        if (yych <= '=') goto yy250;
2820        if (yych <= '>') goto yy248;
2821        goto yy139;
2822yy156:
2823        YYDEBUG(156, *YYCURSOR);
2824        yych = *++YYCURSOR;
2825        if (yych == '=') goto yy246;
2826        goto yy139;
2827yy157:
2828        YYDEBUG(157, *YYCURSOR);
2829        yych = *++YYCURSOR;
2830        if (yych <= '.') {
2831            if (yych == '*') goto yy238;
2832            goto yy139;
2833        } else {
2834            if (yych <= '/') goto yy240;
2835            if (yych == '=') goto yy241;
2836            goto yy139;
2837        }
2838yy158:
2839        YYDEBUG(158, *YYCURSOR);
2840        yych = *++YYCURSOR;
2841        if (yych <= '/') goto yy139;
2842        if (yych <= '9') goto yy234;
2843        if (yych == '=') goto yy236;
2844        goto yy139;
2845yy159:
2846        YYDEBUG(159, *YYCURSOR);
2847        yych = *++YYCURSOR;
2848        if (yych <= '<') goto yy139;
2849        if (yych <= '=') goto yy230;
2850        if (yych <= '>') goto yy228;
2851        goto yy139;
2852yy160:
2853        YYDEBUG(160, *YYCURSOR);
2854        yych = *++YYCURSOR;
2855        if (yych == '&') goto yy224;
2856        if (yych == '=') goto yy226;
2857        goto yy139;
2858yy161:
2859        YYDEBUG(161, *YYCURSOR);
2860        yych = *++YYCURSOR;
2861        if (yych == '=') goto yy222;
2862        if (yych == '|') goto yy220;
2863        goto yy139;
2864yy162:
2865        YYDEBUG(162, *YYCURSOR);
2866        yych = *++YYCURSOR;
2867        if (yych == '=') goto yy218;
2868        goto yy139;
2869yy163:
2870        YYDEBUG(163, *YYCURSOR);
2871        yych = *++YYCURSOR;
2872        if (yych == 'R') goto yy216;
2873        if (yych == 'r') goto yy216;
2874        goto yy187;
2875yy164:
2876        YYDEBUG(164, *YYCURSOR);
2877        yych = *++YYCURSOR;
2878        if (yych == 'O') goto yy213;
2879        if (yych == 'o') goto yy213;
2880        goto yy187;
2881yy165:
2882        YYDEBUG(165, *YYCURSOR);
2883        yych = *++YYCURSOR;
2884        if (yych <= '_') {
2885            if (yych <= '@') goto yy139;
2886            if (yych <= 'Z') goto yy210;
2887            if (yych <= '^') goto yy139;
2888            goto yy210;
2889        } else {
2890            if (yych <= '`') goto yy139;
2891            if (yych <= 'z') goto yy210;
2892            if (yych <= '~') goto yy139;
2893            goto yy210;
2894        }
2895yy166:
2896        YYDEBUG(166, *YYCURSOR);
2897        yych = *++YYCURSOR;
2898        goto yy139;
2899yy167:
2900        YYDEBUG(167, *YYCURSOR);
2901        yych = *++YYCURSOR;
2902        if (yych == '>') goto yy206;
2903        goto yy139;
2904yy168:
2905        YYDEBUG(168, *YYCURSOR);
2906        ++YYCURSOR;
2907        YYDEBUG(169, *YYCURSOR);
2908        yyleng = YYCURSOR - SCNG(yy_text);
2909#line 1455 "Zend/zend_language_scanner.l"
2910        {
2911    yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
2912    return '{';
2913}
2914#line 2915 "Zend/zend_language_scanner.c"
2915yy170:
2916        YYDEBUG(170, *YYCURSOR);
2917        ++YYCURSOR;
2918        YYDEBUG(171, *YYCURSOR);
2919        yyleng = YYCURSOR - SCNG(yy_text);
2920#line 1467 "Zend/zend_language_scanner.l"
2921        {
2922    RESET_DOC_COMMENT();
2923    if (!zend_stack_is_empty(&SCNG(state_stack))) {
2924        yy_pop_state(TSRMLS_C);
2925    }
2926    return '}';
2927}
2928#line 2929 "Zend/zend_language_scanner.c"
2929yy172:
2930        YYDEBUG(172, *YYCURSOR);
2931        yyaccept = 2;
2932        yych = *(YYMARKER = ++YYCURSOR);
2933        if (yych <= 'E') {
2934            if (yych <= '9') {
2935                if (yych == '.') goto yy188;
2936                if (yych >= '0') goto yy191;
2937            } else {
2938                if (yych == 'B') goto yy199;
2939                if (yych >= 'E') goto yy193;
2940            }
2941        } else {
2942            if (yych <= 'b') {
2943                if (yych == 'X') goto yy198;
2944                if (yych >= 'b') goto yy199;
2945            } else {
2946                if (yych <= 'e') {
2947                    if (yych >= 'e') goto yy193;
2948                } else {
2949                    if (yych == 'x') goto yy198;
2950                }
2951            }
2952        }
2953yy173:
2954        YYDEBUG(173, *YYCURSOR);
2955        yyleng = YYCURSOR - SCNG(yy_text);
2956#line 1518 "Zend/zend_language_scanner.l"
2957        {
2958    if (yyleng < MAX_LENGTH_OF_LONG - 1) { /* Won't overflow */
2959        zendlval->value.lval = strtol(yytext, NULL, 0);
2960    } else {
2961        errno = 0;
2962        zendlval->value.lval = strtol(yytext, NULL, 0);
2963        if (errno == ERANGE) { /* Overflow */
2964            if (yytext[0] == '0') { /* octal overflow */
2965                zendlval->value.dval = zend_oct_strtod(yytext, NULL);
2966            } else {
2967                zendlval->value.dval = zend_strtod(yytext, NULL);
2968            }
2969            zendlval->type = IS_DOUBLE;
2970            return T_DNUMBER;
2971        }
2972    }
2973
2974    zendlval->type = IS_LONG;
2975    return T_LNUMBER;
2976}
2977#line 2978 "Zend/zend_language_scanner.c"
2978yy174:
2979        YYDEBUG(174, *YYCURSOR);
2980        yyaccept = 2;
2981        yych = *(YYMARKER = ++YYCURSOR);
2982        if (yych <= '9') {
2983            if (yych == '.') goto yy188;
2984            if (yych <= '/') goto yy173;
2985            goto yy191;
2986        } else {
2987            if (yych <= 'E') {
2988                if (yych <= 'D') goto yy173;
2989                goto yy193;
2990            } else {
2991                if (yych == 'e') goto yy193;
2992                goto yy173;
2993            }
2994        }
2995yy175:
2996        YYDEBUG(175, *YYCURSOR);
2997        yych = *++YYCURSOR;
2998        goto yy187;
2999yy176:
3000        YYDEBUG(176, *YYCURSOR);
3001        ++YYCURSOR;
3002yy177:
3003        YYDEBUG(177, *YYCURSOR);
3004        yyleng = YYCURSOR - SCNG(yy_text);
3005#line 1915 "Zend/zend_language_scanner.l"
3006        {
3007    while (YYCURSOR < YYLIMIT) {
3008        switch (*YYCURSOR++) {
3009            case '\r':
3010                if (*YYCURSOR == '\n') {
3011                    YYCURSOR++;
3012                }
3013                /* fall through */
3014            case '\n':
3015                CG(zend_lineno)++;
3016                break;
3017            case '%':
3018                if (!CG(asp_tags)) {
3019                    continue;
3020                }
3021                /* fall through */
3022            case '?':
3023                if (*YYCURSOR == '>') {
3024                    YYCURSOR--;
3025                    break;
3026                }
3027                /* fall through */
3028            default:
3029                continue;
3030        }
3031
3032        break;
3033    }
3034
3035    yyleng = YYCURSOR - SCNG(yy_text);
3036
3037    return T_COMMENT;
3038}
3039#line 3040 "Zend/zend_language_scanner.c"
3040yy178:
3041        YYDEBUG(178, *YYCURSOR);
3042        ++YYCURSOR;
3043yy179:
3044        YYDEBUG(179, *YYCURSOR);
3045        yyleng = YYCURSOR - SCNG(yy_text);
3046#line 2006 "Zend/zend_language_scanner.l"
3047        {
3048    register char *s, *t;
3049    char *end;
3050    int bprefix = (yytext[0] != '\'') ? 1 : 0;
3051
3052    while (1) {
3053        if (YYCURSOR < YYLIMIT) {
3054            if (*YYCURSOR == '\'') {
3055                YYCURSOR++;
3056                yyleng = YYCURSOR - SCNG(yy_text);
3057
3058                break;
3059            } else if (*YYCURSOR++ == '\\' && YYCURSOR < YYLIMIT) {
3060                YYCURSOR++;
3061            }
3062        } else {
3063            yyleng = YYLIMIT - SCNG(yy_text);
3064
3065            /* Unclosed single quotes; treat similar to double quotes, but without a separate token
3066             * for ' (unrecognized by parser), instead of old flex fallback to "Unexpected character..."
3067             * rule, which continued in ST_IN_SCRIPTING state after the quote */
3068            return T_ENCAPSED_AND_WHITESPACE;
3069        }
3070    }
3071
3072    zendlval->value.str.val = estrndup(yytext+bprefix+1, yyleng-bprefix-2);
3073    zendlval->value.str.len = yyleng-bprefix-2;
3074    zendlval->type = IS_STRING;
3075
3076    /* convert escape sequences */
3077    s = t = zendlval->value.str.val;
3078    end = s+zendlval->value.str.len;
3079    while (s<end) {
3080        if (*s=='\\') {
3081            s++;
3082
3083            switch(*s) {
3084                case '\\':
3085                case '\'':
3086                    *t++ = *s;
3087                    zendlval->value.str.len--;
3088                    break;
3089                default:
3090                    *t++ = '\\';
3091                    *t++ = *s;
3092                    break;
3093            }
3094        } else {
3095            *t++ = *s;
3096        }
3097
3098        if (*s == '\n' || (*s == '\r' && (*(s+1) != '\n'))) {
3099            CG(zend_lineno)++;
3100        }
3101        s++;
3102    }
3103    *t = 0;
3104
3105    if (SCNG(output_filter)) {
3106        size_t sz = 0;
3107        s = zendlval->value.str.val;
3108        SCNG(output_filter)((unsigned char **)&(zendlval->value.str.val), &sz, (unsigned char *)s, (size_t)zendlval->value.str.len TSRMLS_CC);
3109        zendlval->value.str.len = sz;
3110        efree(s);
3111    }
3112    return T_CONSTANT_ENCAPSED_STRING;
3113}
3114#line 3115 "Zend/zend_language_scanner.c"
3115yy180:
3116        YYDEBUG(180, *YYCURSOR);
3117        ++YYCURSOR;
3118yy181:
3119        YYDEBUG(181, *YYCURSOR);
3120        yyleng = YYCURSOR - SCNG(yy_text);
3121#line 2075 "Zend/zend_language_scanner.l"
3122        {
3123    int bprefix = (yytext[0] != '"') ? 1 : 0;
3124
3125    while (YYCURSOR < YYLIMIT) {
3126        switch (*YYCURSOR++) {
3127            case '"':
3128                yyleng = YYCURSOR - SCNG(yy_text);
3129                zend_scan_escape_string(zendlval, yytext+bprefix+1, yyleng-bprefix-2, '"' TSRMLS_CC);
3130                return T_CONSTANT_ENCAPSED_STRING;
3131            case '$':
3132                if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {
3133                    break;
3134                }
3135                continue;
3136            case '{':
3137                if (*YYCURSOR == '$') {
3138                    break;
3139                }
3140                continue;
3141            case '\\':
3142                if (YYCURSOR < YYLIMIT) {
3143                    YYCURSOR++;
3144                }
3145                /* fall through */
3146            default:
3147                continue;
3148        }
3149
3150        YYCURSOR--;
3151        break;
3152    }
3153
3154    /* Remember how much was scanned to save rescanning */
3155    SET_DOUBLE_QUOTES_SCANNED_LENGTH(YYCURSOR - SCNG(yy_text) - yyleng);
3156
3157    YYCURSOR = SCNG(yy_text) + yyleng;
3158
3159    BEGIN(ST_DOUBLE_QUOTES);
3160    return '"';
3161}
3162#line 3163 "Zend/zend_language_scanner.c"
3163yy182:
3164        YYDEBUG(182, *YYCURSOR);
3165        ++YYCURSOR;
3166        YYDEBUG(183, *YYCURSOR);
3167        yyleng = YYCURSOR - SCNG(yy_text);
3168#line 2165 "Zend/zend_language_scanner.l"
3169        {
3170    BEGIN(ST_BACKQUOTE);
3171    return '`';
3172}
3173#line 3174 "Zend/zend_language_scanner.c"
3174yy184:
3175        YYDEBUG(184, *YYCURSOR);
3176        ++YYCURSOR;
3177        YYDEBUG(185, *YYCURSOR);
3178        yyleng = YYCURSOR - SCNG(yy_text);
3179#line 2428 "Zend/zend_language_scanner.l"
3180        {
3181    if (YYCURSOR > YYLIMIT) {
3182        return 0;
3183    }
3184
3185    zend_error(E_COMPILE_WARNING,"Unexpected character in input:  '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
3186    goto restart;
3187}
3188#line 3189 "Zend/zend_language_scanner.c"
3189yy186:
3190        YYDEBUG(186, *YYCURSOR);
3191        ++YYCURSOR;
3192        YYFILL(1);
3193        yych = *YYCURSOR;
3194yy187:
3195        YYDEBUG(187, *YYCURSOR);
3196        if (yybm[0+yych] & 4) {
3197            goto yy186;
3198        }
3199        goto yy124;
3200yy188:
3201        YYDEBUG(188, *YYCURSOR);
3202        yyaccept = 3;
3203        YYMARKER = ++YYCURSOR;
3204        YYFILL(3);
3205        yych = *YYCURSOR;
3206        YYDEBUG(189, *YYCURSOR);
3207        if (yybm[0+yych] & 8) {
3208            goto yy188;
3209        }
3210        if (yych == 'E') goto yy193;
3211        if (yych == 'e') goto yy193;
3212yy190:
3213        YYDEBUG(190, *YYCURSOR);
3214        yyleng = YYCURSOR - SCNG(yy_text);
3215#line 1583 "Zend/zend_language_scanner.l"
3216        {
3217    zendlval->value.dval = zend_strtod(yytext, NULL);
3218    zendlval->type = IS_DOUBLE;
3219    return T_DNUMBER;
3220}
3221#line 3222 "Zend/zend_language_scanner.c"
3222yy191:
3223        YYDEBUG(191, *YYCURSOR);
3224        yyaccept = 2;
3225        YYMARKER = ++YYCURSOR;
3226        YYFILL(3);
3227        yych = *YYCURSOR;
3228        YYDEBUG(192, *YYCURSOR);
3229        if (yych <= '9') {
3230            if (yych == '.') goto yy188;
3231            if (yych <= '/') goto yy173;
3232            goto yy191;
3233        } else {
3234            if (yych <= 'E') {
3235                if (yych <= 'D') goto yy173;
3236            } else {
3237                if (yych != 'e') goto yy173;
3238            }
3239        }
3240yy193:
3241        YYDEBUG(193, *YYCURSOR);
3242        yych = *++YYCURSOR;
3243        if (yych <= ',') {
3244            if (yych == '+') goto yy195;
3245        } else {
3246            if (yych <= '-') goto yy195;
3247            if (yych <= '/') goto yy194;
3248            if (yych <= '9') goto yy196;
3249        }
3250yy194:
3251        YYDEBUG(194, *YYCURSOR);
3252        YYCURSOR = YYMARKER;
3253        if (yyaccept <= 2) {
3254            if (yyaccept <= 1) {
3255                if (yyaccept <= 0) {
3256                    goto yy124;
3257                } else {
3258                    goto yy139;
3259                }
3260            } else {
3261                goto yy173;
3262            }
3263        } else {
3264            if (yyaccept <= 4) {
3265                if (yyaccept <= 3) {
3266                    goto yy190;
3267                } else {
3268                    goto yy239;
3269                }
3270            } else {
3271                goto yy255;
3272            }
3273        }
3274yy195:
3275        YYDEBUG(195, *YYCURSOR);
3276        yych = *++YYCURSOR;
3277        if (yych <= '/') goto yy194;
3278        if (yych >= ':') goto yy194;
3279yy196:
3280        YYDEBUG(196, *YYCURSOR);
3281        ++YYCURSOR;
3282        YYFILL(1);
3283        yych = *YYCURSOR;
3284        YYDEBUG(197, *YYCURSOR);
3285        if (yych <= '/') goto yy190;
3286        if (yych <= '9') goto yy196;
3287        goto yy190;
3288yy198:
3289        YYDEBUG(198, *YYCURSOR);
3290        yych = *++YYCURSOR;
3291        if (yybm[0+yych] & 32) {
3292            goto yy203;
3293        }
3294        goto yy194;
3295yy199:
3296        YYDEBUG(199, *YYCURSOR);
3297        yych = *++YYCURSOR;
3298        if (yybm[0+yych] & 16) {
3299            goto yy200;
3300        }
3301        goto yy194;
3302yy200:
3303        YYDEBUG(200, *YYCURSOR);
3304        ++YYCURSOR;
3305        YYFILL(1);
3306        yych = *YYCURSOR;
3307        YYDEBUG(201, *YYCURSOR);
3308        if (yybm[0+yych] & 16) {
3309            goto yy200;
3310        }
3311        YYDEBUG(202, *YYCURSOR);
3312        yyleng = YYCURSOR - SCNG(yy_text);
3313#line 1493 "Zend/zend_language_scanner.l"
3314        {
3315    char *bin = yytext + 2; /* Skip "0b" */
3316    int len = yyleng - 2;
3317
3318    /* Skip any leading 0s */
3319    while (*bin == '0') {
3320        ++bin;
3321        --len;
3322    }
3323
3324    if (len < SIZEOF_LONG * 8) {
3325        if (len == 0) {
3326            zendlval->value.lval = 0;
3327        } else {
3328            zendlval->value.lval = strtol(bin, NULL, 2);
3329        }
3330        zendlval->type = IS_LONG;
3331        return T_LNUMBER;
3332    } else {
3333        zendlval->value.dval = zend_bin_strtod(bin, NULL);
3334        zendlval->type = IS_DOUBLE;
3335        return T_DNUMBER;
3336    }
3337}
3338#line 3339 "Zend/zend_language_scanner.c"
3339yy203:
3340        YYDEBUG(203, *YYCURSOR);
3341        ++YYCURSOR;
3342        YYFILL(1);
3343        yych = *YYCURSOR;
3344        YYDEBUG(204, *YYCURSOR);
3345        if (yybm[0+yych] & 32) {
3346            goto yy203;
3347        }
3348        YYDEBUG(205, *YYCURSOR);
3349        yyleng = YYCURSOR - SCNG(yy_text);
3350#line 1539 "Zend/zend_language_scanner.l"
3351        {
3352    char *hex = yytext + 2; /* Skip "0x" */
3353    int len = yyleng - 2;
3354
3355    /* Skip any leading 0s */
3356    while (*hex == '0') {
3357        hex++;
3358        len--;
3359    }
3360
3361    if (len < SIZEOF_LONG * 2 || (len == SIZEOF_LONG * 2 && *hex <= '7')) {
3362        if (len == 0) {
3363            zendlval->value.lval = 0;
3364        } else {
3365            zendlval->value.lval = strtol(hex, NULL, 16);
3366        }
3367        zendlval->type = IS_LONG;
3368        return T_LNUMBER;
3369    } else {
3370        zendlval->value.dval = zend_hex_strtod(hex, NULL);
3371        zendlval->type = IS_DOUBLE;
3372        return T_DNUMBER;
3373    }
3374}
3375#line 3376 "Zend/zend_language_scanner.c"
3376yy206:
3377        YYDEBUG(206, *YYCURSOR);
3378        ++YYCURSOR;
3379        if ((yych = *YYCURSOR) == '\n') goto yy208;
3380        if (yych == '\r') goto yy209;
3381yy207:
3382        YYDEBUG(207, *YYCURSOR);
3383        yyleng = YYCURSOR - SCNG(yy_text);
3384#line 1983 "Zend/zend_language_scanner.l"
3385        {
3386    zendlval->value.str.val = yytext; /* no copying - intentional */
3387    zendlval->value.str.len = yyleng;
3388    zendlval->type = IS_STRING;
3389    BEGIN(INITIAL);
3390    return T_CLOSE_TAG;  /* implicit ';' at php-end tag */
3391}
3392#line 3393 "Zend/zend_language_scanner.c"
3393yy208:
3394        YYDEBUG(208, *YYCURSOR);
3395        yych = *++YYCURSOR;
3396        goto yy207;
3397yy209:
3398        YYDEBUG(209, *YYCURSOR);
3399        yych = *++YYCURSOR;
3400        if (yych == '\n') goto yy208;
3401        goto yy207;
3402yy210:
3403        YYDEBUG(210, *YYCURSOR);
3404        ++YYCURSOR;
3405        YYFILL(1);
3406        yych = *YYCURSOR;
3407        YYDEBUG(211, *YYCURSOR);
3408        if (yych <= '^') {
3409            if (yych <= '9') {
3410                if (yych >= '0') goto yy210;
3411            } else {
3412                if (yych <= '@') goto yy212;
3413                if (yych <= 'Z') goto yy210;
3414            }
3415        } else {
3416            if (yych <= '`') {
3417                if (yych <= '_') goto yy210;
3418            } else {
3419                if (yych <= 'z') goto yy210;
3420                if (yych >= 0x7F) goto yy210;
3421            }
3422        }
3423yy212:
3424        YYDEBUG(212, *YYCURSOR);
3425        yyleng = YYCURSOR - SCNG(yy_text);
3426#line 1885 "Zend/zend_language_scanner.l"
3427        {
3428    zend_copy_value(zendlval, (yytext+1), (yyleng-1));
3429    zendlval->type = IS_STRING;
3430    return T_VARIABLE;
3431}
3432#line 3433 "Zend/zend_language_scanner.c"
3433yy213:
3434        YYDEBUG(213, *YYCURSOR);
3435        yych = *++YYCURSOR;
3436        if (yych == 'R') goto yy214;
3437        if (yych != 'r') goto yy187;
3438yy214:
3439        YYDEBUG(214, *YYCURSOR);
3440        ++YYCURSOR;
3441        if (yybm[0+(yych = *YYCURSOR)] & 4) {
3442            goto yy186;
3443        }
3444        YYDEBUG(215, *YYCURSOR);
3445        yyleng = YYCURSOR - SCNG(yy_text);
3446#line 1438 "Zend/zend_language_scanner.l"
3447        {
3448    return T_LOGICAL_XOR;
3449}
3450#line 3451 "Zend/zend_language_scanner.c"
3451yy216:
3452        YYDEBUG(216, *YYCURSOR);
3453        ++YYCURSOR;
3454        if (yybm[0+(yych = *YYCURSOR)] & 4) {
3455            goto yy186;
3456        }
3457        YYDEBUG(217, *YYCURSOR);
3458        yyleng = YYCURSOR - SCNG(yy_text);
3459#line 1430 "Zend/zend_language_scanner.l"
3460        {
3461    return T_LOGICAL_OR;
3462}
3463#line 3464 "Zend/zend_language_scanner.c"
3464yy218:
3465        YYDEBUG(218, *YYCURSOR);
3466        ++YYCURSOR;
3467        YYDEBUG(219, *YYCURSOR);
3468        yyleng = YYCURSOR - SCNG(yy_text);
3469#line 1418 "Zend/zend_language_scanner.l"
3470        {
3471    return T_XOR_EQUAL;
3472}
3473#line 3474 "Zend/zend_language_scanner.c"
3474yy220:
3475        YYDEBUG(220, *YYCURSOR);
3476        ++YYCURSOR;
3477        YYDEBUG(221, *YYCURSOR);
3478        yyleng = YYCURSOR - SCNG(yy_text);
3479#line 1422 "Zend/zend_language_scanner.l"
3480        {
3481    return T_BOOLEAN_OR;
3482}
3483#line 3484 "Zend/zend_language_scanner.c"
3484yy222:
3485        YYDEBUG(222, *YYCURSOR);
3486        ++YYCURSOR;
3487        YYDEBUG(223, *YYCURSOR);
3488        yyleng = YYCURSOR - SCNG(yy_text);
3489#line 1414 "Zend/zend_language_scanner.l"
3490        {
3491    return T_OR_EQUAL;
3492}
3493#line 3494 "Zend/zend_language_scanner.c"
3494yy224:
3495        YYDEBUG(224, *YYCURSOR);
3496        ++YYCURSOR;
3497        YYDEBUG(225, *YYCURSOR);
3498        yyleng = YYCURSOR - SCNG(yy_text);
3499#line 1426 "Zend/zend_language_scanner.l"
3500        {
3501    return T_BOOLEAN_AND;
3502}
3503#line 3504 "Zend/zend_language_scanner.c"
3504yy226:
3505        YYDEBUG(226, *YYCURSOR);
3506        ++YYCURSOR;
3507        YYDEBUG(227, *YYCURSOR);
3508        yyleng = YYCURSOR - SCNG(yy_text);
3509#line 1410 "Zend/zend_language_scanner.l"
3510        {
3511    return T_AND_EQUAL;
3512}
3513#line 3514 "Zend/zend_language_scanner.c"
3514yy228:
3515        YYDEBUG(228, *YYCURSOR);
3516        ++YYCURSOR;
3517        if ((yych = *YYCURSOR) == '\n') goto yy232;
3518        if (yych == '\r') goto yy233;
3519yy229:
3520        YYDEBUG(229, *YYCURSOR);
3521        yyleng = YYCURSOR - SCNG(yy_text);
3522#line 1992 "Zend/zend_language_scanner.l"
3523        {
3524    if (CG(asp_tags)) {
3525        BEGIN(INITIAL);
3526        zendlval->value.str.len = yyleng;
3527        zendlval->type = IS_STRING;
3528        zendlval->value.str.val = yytext; /* no copying - intentional */
3529        return T_CLOSE_TAG;  /* implicit ';' at php-end tag */
3530    } else {
3531        yyless(1);
3532        return yytext[0];
3533    }
3534}
3535#line 3536 "Zend/zend_language_scanner.c"
3536yy230:
3537        YYDEBUG(230, *YYCURSOR);
3538        ++YYCURSOR;
3539        YYDEBUG(231, *YYCURSOR);
3540        yyleng = YYCURSOR - SCNG(yy_text);
3541#line 1398 "Zend/zend_language_scanner.l"
3542        {
3543    return T_MOD_EQUAL;
3544}
3545#line 3546 "Zend/zend_language_scanner.c"
3546yy232:
3547        YYDEBUG(232, *YYCURSOR);
3548        yych = *++YYCURSOR;
3549        goto yy229;
3550yy233:
3551        YYDEBUG(233, *YYCURSOR);
3552        yych = *++YYCURSOR;
3553        if (yych == '\n') goto yy232;
3554        goto yy229;
3555yy234:
3556        YYDEBUG(234, *YYCURSOR);
3557        yyaccept = 3;
3558        YYMARKER = ++YYCURSOR;
3559        YYFILL(3);
3560        yych = *YYCURSOR;
3561        YYDEBUG(235, *YYCURSOR);
3562        if (yych <= 'D') {
3563            if (yych <= '/') goto yy190;
3564            if (yych <= '9') goto yy234;
3565            goto yy190;
3566        } else {
3567            if (yych <= 'E') goto yy193;
3568            if (yych == 'e') goto yy193;
3569            goto yy190;
3570        }
3571yy236:
3572        YYDEBUG(236, *YYCURSOR);
3573        ++YYCURSOR;
3574        YYDEBUG(237, *YYCURSOR);
3575        yyleng = YYCURSOR - SCNG(yy_text);
3576#line 1394 "Zend/zend_language_scanner.l"
3577        {
3578    return T_CONCAT_EQUAL;
3579}
3580#line 3581 "Zend/zend_language_scanner.c"
3581yy238:
3582        YYDEBUG(238, *YYCURSOR);
3583        yyaccept = 4;
3584        yych = *(YYMARKER = ++YYCURSOR);
3585        if (yych == '*') goto yy243;
3586yy239:
3587        YYDEBUG(239, *YYCURSOR);
3588        yyleng = YYCURSOR - SCNG(yy_text);
3589#line 1949 "Zend/zend_language_scanner.l"
3590        {
3591    int doc_com;
3592
3593    if (yyleng > 2) {
3594        doc_com = 1;
3595        RESET_DOC_COMMENT();
3596    } else {
3597        doc_com = 0;
3598    }
3599
3600    while (YYCURSOR < YYLIMIT) {
3601        if (*YYCURSOR++ == '*' && *YYCURSOR == '/') {
3602            break;
3603        }
3604    }
3605
3606    if (YYCURSOR < YYLIMIT) {
3607        YYCURSOR++;
3608    } else {
3609        zend_error(E_COMPILE_WARNING, "Unterminated comment starting line %d", CG(zend_lineno));
3610    }
3611
3612    yyleng = YYCURSOR - SCNG(yy_text);
3613    HANDLE_NEWLINES(yytext, yyleng);
3614
3615    if (doc_com) {
3616        CG(doc_comment) = estrndup(yytext, yyleng);
3617        CG(doc_comment_len) = yyleng;
3618        return T_DOC_COMMENT;
3619    }
3620
3621    return T_COMMENT;
3622}
3623#line 3624 "Zend/zend_language_scanner.c"
3624yy240:
3625        YYDEBUG(240, *YYCURSOR);
3626        yych = *++YYCURSOR;
3627        goto yy177;
3628yy241:
3629        YYDEBUG(241, *YYCURSOR);
3630        ++YYCURSOR;
3631        YYDEBUG(242, *YYCURSOR);
3632        yyleng = YYCURSOR - SCNG(yy_text);
3633#line 1390 "Zend/zend_language_scanner.l"
3634        {
3635    return T_DIV_EQUAL;
3636}
3637#line 3638 "Zend/zend_language_scanner.c"
3638yy243:
3639        YYDEBUG(243, *YYCURSOR);
3640        yych = *++YYCURSOR;
3641        if (yybm[0+yych] & 64) {
3642            goto yy244;
3643        }
3644        goto yy194;
3645yy244:
3646        YYDEBUG(244, *YYCURSOR);
3647        ++YYCURSOR;
3648        YYFILL(1);
3649        yych = *YYCURSOR;
3650        YYDEBUG(245, *YYCURSOR);
3651        if (yybm[0+yych] & 64) {
3652            goto yy244;
3653        }
3654        goto yy239;
3655yy246:
3656        YYDEBUG(246, *YYCURSOR);
3657        ++YYCURSOR;
3658        YYDEBUG(247, *YYCURSOR);
3659        yyleng = YYCURSOR - SCNG(yy_text);
3660#line 1386 "Zend/zend_language_scanner.l"
3661        {
3662    return T_MUL_EQUAL;
3663}
3664#line 3665 "Zend/zend_language_scanner.c"
3665yy248:
3666        YYDEBUG(248, *YYCURSOR);
3667        ++YYCURSOR;
3668        if ((yych = *YYCURSOR) == '=') goto yy252;
3669        YYDEBUG(249, *YYCURSOR);
3670        yyleng = YYCURSOR - SCNG(yy_text);
3671#line 1446 "Zend/zend_language_scanner.l"
3672        {
3673    return T_SR;
3674}
3675#line 3676 "Zend/zend_language_scanner.c"
3676yy250:
3677        YYDEBUG(250, *YYCURSOR);
3678        ++YYCURSOR;
3679        YYDEBUG(251, *YYCURSOR);
3680        yyleng = YYCURSOR - SCNG(yy_text);
3681#line 1374 "Zend/zend_language_scanner.l"
3682        {
3683    return T_IS_GREATER_OR_EQUAL;
3684}
3685#line 3686 "Zend/zend_language_scanner.c"
3686yy252:
3687        YYDEBUG(252, *YYCURSOR);
3688        ++YYCURSOR;
3689        YYDEBUG(253, *YYCURSOR);
3690        yyleng = YYCURSOR - SCNG(yy_text);
3691#line 1406 "Zend/zend_language_scanner.l"
3692        {
3693    return T_SR_EQUAL;
3694}
3695#line 3696 "Zend/zend_language_scanner.c"
3696yy254:
3697        YYDEBUG(254, *YYCURSOR);
3698        yyaccept = 5;
3699        yych = *(YYMARKER = ++YYCURSOR);
3700        if (yych <= ';') goto yy255;
3701        if (yych <= '<') goto yy270;
3702        if (yych <= '=') goto yy268;
3703yy255:
3704        YYDEBUG(255, *YYCURSOR);
3705        yyleng = YYCURSOR - SCNG(yy_text);
3706#line 1442 "Zend/zend_language_scanner.l"
3707        {
3708    return T_SL;
3709}
3710#line 3711 "Zend/zend_language_scanner.c"
3711yy256:
3712        YYDEBUG(256, *YYCURSOR);
3713        yych = *++YYCURSOR;
3714        if (yych == 'S') goto yy261;
3715        if (yych == 's') goto yy261;
3716        goto yy194;
3717yy257:
3718        YYDEBUG(257, *YYCURSOR);
3719        ++YYCURSOR;
3720        YYDEBUG(258, *YYCURSOR);
3721        yyleng = YYCURSOR - SCNG(yy_text);
3722#line 1370 "Zend/zend_language_scanner.l"
3723        {
3724    return T_IS_SMALLER_OR_EQUAL;
3725}
3726#line 3727 "Zend/zend_language_scanner.c"
3727yy259:
3728        YYDEBUG(259, *YYCURSOR);
3729        ++YYCURSOR;
3730yy260:
3731        YYDEBUG(260, *YYCURSOR);
3732        yyleng = YYCURSOR - SCNG(yy_text);
3733#line 1366 "Zend/zend_language_scanner.l"
3734        {
3735    return T_IS_NOT_EQUAL;
3736}
3737#line 3738 "Zend/zend_language_scanner.c"
3738yy261:
3739        YYDEBUG(261, *YYCURSOR);
3740        yych = *++YYCURSOR;
3741        if (yych == 'C') goto yy262;
3742        if (yych != 'c') goto yy194;
3743yy262:
3744        YYDEBUG(262, *YYCURSOR);
3745        yych = *++YYCURSOR;
3746        if (yych == 'R') goto yy263;
3747        if (yych != 'r') goto yy194;
3748yy263:
3749        YYDEBUG(263, *YYCURSOR);
3750        yych = *++YYCURSOR;
3751        if (yych == 'I') goto yy264;
3752        if (yych != 'i') goto yy194;
3753yy264:
3754        YYDEBUG(264, *YYCURSOR);
3755        yych = *++YYCURSOR;
3756        if (yych == 'P') goto yy265;
3757        if (yych != 'p') goto yy194;
3758yy265:
3759        YYDEBUG(265, *YYCURSOR);
3760        yych = *++YYCURSOR;
3761        if (yych == 'T') goto yy266;
3762        if (yych != 't') goto yy194;
3763yy266:
3764        YYDEBUG(266, *YYCURSOR);
3765        ++YYCURSOR;
3766        YYFILL(3);
3767        yych = *YYCURSOR;
3768        YYDEBUG(267, *YYCURSOR);
3769        if (yych <= '\r') {
3770            if (yych <= 0x08) goto yy194;
3771            if (yych <= '\n') goto yy266;
3772            if (yych <= '\f') goto yy194;
3773            goto yy266;
3774        } else {
3775            if (yych <= ' ') {
3776                if (yych <= 0x1F) goto yy194;
3777                goto yy266;
3778            } else {
3779                if (yych == '>') goto yy206;
3780                goto yy194;
3781            }
3782        }
3783yy268:
3784        YYDEBUG(268, *YYCURSOR);
3785        ++YYCURSOR;
3786        YYDEBUG(269, *YYCURSOR);
3787        yyleng = YYCURSOR - SCNG(yy_text);
3788#line 1402 "Zend/zend_language_scanner.l"
3789        {
3790    return T_SL_EQUAL;
3791}
3792#line 3793 "Zend/zend_language_scanner.c"
3793yy270:
3794        YYDEBUG(270, *YYCURSOR);
3795        ++YYCURSOR;
3796        YYFILL(2);
3797        yych = *YYCURSOR;
3798        YYDEBUG(271, *YYCURSOR);
3799        if (yybm[0+yych] & 128) {
3800            goto yy270;
3801        }
3802        if (yych <= 'Z') {
3803            if (yych <= '&') {
3804                if (yych == '"') goto yy275;
3805                goto yy194;
3806            } else {
3807                if (yych <= '\'') goto yy274;
3808                if (yych <= '@') goto yy194;
3809            }
3810        } else {
3811            if (yych <= '`') {
3812                if (yych != '_') goto yy194;
3813            } else {
3814                if (yych <= 'z') goto yy272;
3815                if (yych <= '~') goto yy194;
3816            }
3817        }
3818yy272:
3819        YYDEBUG(272, *YYCURSOR);
3820        ++YYCURSOR;
3821        YYFILL(2);
3822        yych = *YYCURSOR;
3823        YYDEBUG(273, *YYCURSOR);
3824        if (yych <= '@') {
3825            if (yych <= '\f') {
3826                if (yych == '\n') goto yy279;
3827                goto yy194;
3828            } else {
3829                if (yych <= '\r') goto yy281;
3830                if (yych <= '/') goto yy194;
3831                if (yych <= '9') goto yy272;
3832                goto yy194;
3833            }
3834        } else {
3835            if (yych <= '_') {
3836                if (yych <= 'Z') goto yy272;
3837                if (yych <= '^') goto yy194;
3838                goto yy272;
3839            } else {
3840                if (yych <= '`') goto yy194;
3841                if (yych <= 'z') goto yy272;
3842                if (yych <= '~') goto yy194;
3843                goto yy272;
3844            }
3845        }
3846yy274:
3847        YYDEBUG(274, *YYCURSOR);
3848        yych = *++YYCURSOR;
3849        if (yych == '\'') goto yy194;
3850        if (yych <= '/') goto yy283;
3851        if (yych <= '9') goto yy194;
3852        goto yy283;
3853yy275:
3854        YYDEBUG(275, *YYCURSOR);
3855        yych = *++YYCURSOR;
3856        if (yych == '"') goto yy194;
3857        if (yych <= '/') goto yy277;
3858        if (yych <= '9') goto yy194;
3859        goto yy277;
3860yy276:
3861        YYDEBUG(276, *YYCURSOR);
3862        ++YYCURSOR;
3863        YYFILL(3);
3864        yych = *YYCURSOR;
3865yy277:
3866        YYDEBUG(277, *YYCURSOR);
3867        if (yych <= 'Z') {
3868            if (yych <= '/') {
3869                if (yych != '"') goto yy194;
3870            } else {
3871                if (yych <= '9') goto yy276;
3872                if (yych <= '@') goto yy194;
3873                goto yy276;
3874            }
3875        } else {
3876            if (yych <= '`') {
3877                if (yych == '_') goto yy276;
3878                goto yy194;
3879            } else {
3880                if (yych <= 'z') goto yy276;
3881                if (yych <= '~') goto yy194;
3882                goto yy276;
3883            }
3884        }
3885yy278:
3886        YYDEBUG(278, *YYCURSOR);
3887        yych = *++YYCURSOR;
3888        if (yych == '\n') goto yy279;
3889        if (yych == '\r') goto yy281;
3890        goto yy194;
3891yy279:
3892        YYDEBUG(279, *YYCURSOR);
3893        ++YYCURSOR;
3894yy280:
3895        YYDEBUG(280, *YYCURSOR);
3896        yyleng = YYCURSOR - SCNG(yy_text);
3897#line 2117 "Zend/zend_language_scanner.l"
3898        {
3899    char *s;
3900    int bprefix = (yytext[0] != '<') ? 1 : 0;
3901    zend_heredoc_label *heredoc_label = emalloc(sizeof(zend_heredoc_label));
3902
3903    CG(zend_lineno)++;
3904    heredoc_label->length = yyleng-bprefix-3-1-(yytext[yyleng-2]=='\r'?1:0);
3905    s = yytext+bprefix+3;
3906    while ((*s == ' ') || (*s == '\t')) {
3907        s++;
3908        heredoc_label->length--;
3909    }
3910
3911    if (*s == '\'') {
3912        s++;
3913        heredoc_label->length -= 2;
3914
3915        BEGIN(ST_NOWDOC);
3916    } else {
3917        if (*s == '"') {
3918            s++;
3919            heredoc_label->length -= 2;
3920        }
3921
3922        BEGIN(ST_HEREDOC);
3923    }
3924
3925    heredoc_label->label = estrndup(s, heredoc_label->length);
3926
3927    /* Check for ending label on the next line */
3928    if (heredoc_label->length < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, s, heredoc_label->length)) {
3929        YYCTYPE *end = YYCURSOR + heredoc_label->length;
3930
3931        if (*end == ';') {
3932            end++;
3933        }
3934
3935        if (*end == '\n' || *end == '\r') {
3936            BEGIN(ST_END_HEREDOC);
3937        }
3938    }
3939
3940    zend_ptr_stack_push(&SCNG(heredoc_label_stack), (void *) heredoc_label);
3941
3942    return T_START_HEREDOC;
3943}
3944#line 3945 "Zend/zend_language_scanner.c"
3945yy281:
3946        YYDEBUG(281, *YYCURSOR);
3947        yych = *++YYCURSOR;
3948        if (yych == '\n') goto yy279;
3949        goto yy280;
3950yy282:
3951        YYDEBUG(282, *YYCURSOR);
3952        ++YYCURSOR;
3953        YYFILL(3);
3954        yych = *YYCURSOR;
3955yy283:
3956        YYDEBUG(283, *YYCURSOR);
3957        if (yych <= 'Z') {
3958            if (yych <= '/') {
3959                if (yych == '\'') goto yy278;
3960                goto yy194;
3961            } else {
3962                if (yych <= '9') goto yy282;
3963                if (yych <= '@') goto yy194;
3964                goto yy282;
3965            }
3966        } else {
3967            if (yych <= '`') {
3968                if (yych == '_') goto yy282;
3969                goto yy194;
3970            } else {
3971                if (yych <= 'z') goto yy282;
3972                if (yych <= '~') goto yy194;
3973                goto yy282;
3974            }
3975        }
3976yy284:
3977        YYDEBUG(284, *YYCURSOR);
3978        yych = *++YYCURSOR;
3979        if (yych != '=') goto yy260;
3980        YYDEBUG(285, *YYCURSOR);
3981        ++YYCURSOR;
3982        YYDEBUG(286, *YYCURSOR);
3983        yyleng = YYCURSOR - SCNG(yy_text);
3984#line 1358 "Zend/zend_language_scanner.l"
3985        {
3986    return T_IS_NOT_IDENTICAL;
3987}
3988#line 3989 "Zend/zend_language_scanner.c"
3989yy287:
3990        YYDEBUG(287, *YYCURSOR);
3991        ++YYCURSOR;
3992        YYDEBUG(288, *YYCURSOR);
3993        yyleng = YYCURSOR - SCNG(yy_text);
3994#line 1378 "Zend/zend_language_scanner.l"
3995        {
3996    return T_PLUS_EQUAL;
3997}
3998#line 3999 "Zend/zend_language_scanner.c"
3999yy289:
4000        YYDEBUG(289, *YYCURSOR);
4001        ++YYCURSOR;
4002        YYDEBUG(290, *YYCURSOR);
4003        yyleng = YYCURSOR - SCNG(yy_text);
4004#line 1346 "Zend/zend_language_scanner.l"
4005        {
4006    return T_INC;
4007}
4008#line 4009 "Zend/zend_language_scanner.c"
4009yy291:
4010        YYDEBUG(291, *YYCURSOR);
4011        yych = *++YYCURSOR;
4012        if (yych == 'S') goto yy292;
4013        if (yych != 's') goto yy187;
4014yy292:
4015        YYDEBUG(292, *YYCURSOR);
4016        yych = *++YYCURSOR;
4017        if (yych == 'T') goto yy293;
4018        if (yych != 't') goto yy187;
4019yy293:
4020        YYDEBUG(293, *YYCURSOR);
4021        ++YYCURSOR;
4022        if (yybm[0+(yych = *YYCURSOR)] & 4) {
4023            goto yy186;
4024        }
4025        YYDEBUG(294, *YYCURSOR);
4026        yyleng = YYCURSOR - SCNG(yy_text);
4027#line 1334 "Zend/zend_language_scanner.l"
4028        {
4029    return T_LIST;
4030}
4031#line 4032 "Zend/zend_language_scanner.c"
4032yy295:
4033        YYDEBUG(295, *YYCURSOR);
4034        ++YYCURSOR;
4035        if ((yych = *YYCURSOR) == '=') goto yy299;
4036        YYDEBUG(296, *YYCURSOR);
4037        yyleng = YYCURSOR - SCNG(yy_text);
4038#line 1362 "Zend/zend_language_scanner.l"
4039        {
4040    return T_IS_EQUAL;
4041}
4042#line 4043 "Zend/zend_language_scanner.c"
4043yy297:
4044        YYDEBUG(297, *YYCURSOR);
4045        ++YYCURSOR;
4046        YYDEBUG(298, *YYCURSOR);
4047        yyleng = YYCURSOR - SCNG(yy_text);
4048#line 1330 "Zend/zend_language_scanner.l"
4049        {
4050    return T_DOUBLE_ARROW;
4051}
4052#line 4053 "Zend/zend_language_scanner.c"
4053yy299:
4054        YYDEBUG(299, *YYCURSOR);
4055        ++YYCURSOR;
4056        YYDEBUG(300, *YYCURSOR);
4057        yyleng = YYCURSOR - SCNG(yy_text);
4058#line 1354 "Zend/zend_language_scanner.l"
4059        {
4060    return T_IS_IDENTICAL;
4061}
4062#line 4063 "Zend/zend_language_scanner.c"
4063yy301:
4064        YYDEBUG(301, *YYCURSOR);
4065        yych = *++YYCURSOR;
4066        YYDEBUG(-1, yych);
4067        switch (yych) {
4068        case 'C':
4069        case 'c':   goto yy303;
4070        case 'D':
4071        case 'd':   goto yy308;
4072        case 'F':
4073        case 'f':   goto yy305;
4074        case 'H':
4075        case 'h':   goto yy302;
4076        case 'L':
4077        case 'l':   goto yy307;
4078        case 'M':
4079        case 'm':   goto yy306;
4080        case 'N':
4081        case 'n':   goto yy309;
4082        case 'T':
4083        case 't':   goto yy304;
4084        default:    goto yy187;
4085        }
4086yy302:
4087        YYDEBUG(302, *YYCURSOR);
4088        yych = *++YYCURSOR;
4089        if (yych == 'A') goto yy370;
4090        if (yych == 'a') goto yy370;
4091        goto yy187;
4092yy303:
4093        YYDEBUG(303, *YYCURSOR);
4094        yych = *++YYCURSOR;
4095        if (yych == 'L') goto yy363;
4096        if (yych == 'l') goto yy363;
4097        goto yy187;
4098yy304:
4099        YYDEBUG(304, *YYCURSOR);
4100        yych = *++YYCURSOR;
4101        if (yych == 'R') goto yy356;
4102        if (yych == 'r') goto yy356;
4103        goto yy187;
4104yy305:
4105        YYDEBUG(305, *YYCURSOR);
4106        yych = *++YYCURSOR;
4107        if (yych <= 'U') {
4108            if (yych == 'I') goto yy340;
4109            if (yych <= 'T') goto yy187;
4110            goto yy341;
4111        } else {
4112            if (yych <= 'i') {
4113                if (yych <= 'h') goto yy187;
4114                goto yy340;
4115            } else {
4116                if (yych == 'u') goto yy341;
4117                goto yy187;
4118            }
4119        }
4120yy306:
4121        YYDEBUG(306, *YYCURSOR);
4122        yych = *++YYCURSOR;
4123        if (yych == 'E') goto yy332;
4124        if (yych == 'e') goto yy332;
4125        goto yy187;
4126yy307:
4127        YYDEBUG(307, *YYCURSOR);
4128        yych = *++YYCURSOR;
4129        if (yych == 'I') goto yy326;
4130        if (yych == 'i') goto yy326;
4131        goto yy187;
4132yy308:
4133        YYDEBUG(308, *YYCURSOR);
4134        yych = *++YYCURSOR;
4135        if (yych == 'I') goto yy321;
4136        if (yych == 'i') goto yy321;
4137        goto yy187;
4138yy309:
4139        YYDEBUG(309, *YYCURSOR);
4140        yych = *++YYCURSOR;
4141        if (yych == 'A') goto yy310;
4142        if (yych != 'a') goto yy187;
4143yy310:
4144        YYDEBUG(310, *YYCURSOR);
4145        yych = *++YYCURSOR;
4146        if (yych == 'M') goto yy311;
4147        if (yych != 'm') goto yy187;
4148yy311:
4149        YYDEBUG(311, *YYCURSOR);
4150        yych = *++YYCURSOR;
4151        if (yych == 'E') goto yy312;
4152        if (yych != 'e') goto yy187;
4153yy312:
4154        YYDEBUG(312, *YYCURSOR);
4155        yych = *++YYCURSOR;
4156        if (yych == 'S') goto yy313;
4157        if (yych != 's') goto yy187;
4158yy313:
4159        YYDEBUG(313, *YYCURSOR);
4160        yych = *++YYCURSOR;
4161        if (yych == 'P') goto yy314;
4162        if (yych != 'p') goto yy187;
4163yy314:
4164        YYDEBUG(314, *YYCURSOR);
4165        yych = *++YYCURSOR;
4166        if (yych == 'A') goto yy315;
4167        if (yych != 'a') goto yy187;
4168yy315:
4169        YYDEBUG(315, *YYCURSOR);
4170        yych = *++YYCURSOR;
4171        if (yych == 'C') goto yy316;
4172        if (yych != 'c') goto yy187;
4173yy316:
4174        YYDEBUG(316, *YYCURSOR);
4175        yych = *++YYCURSOR;
4176        if (yych == 'E') goto yy317;
4177        if (yych != 'e') goto yy187;
4178yy317:
4179        YYDEBUG(317, *YYCURSOR);
4180        yych = *++YYCURSOR;
4181        if (yych != '_') goto yy187;
4182        YYDEBUG(318, *YYCURSOR);
4183        yych = *++YYCURSOR;
4184        if (yych != '_') goto yy187;
4185        YYDEBUG(319, *YYCURSOR);
4186        ++YYCURSOR;
4187        if (yybm[0+(yych = *YYCURSOR)] & 4) {
4188            goto yy186;
4189        }
4190        YYDEBUG(320, *YYCURSOR);
4191        yyleng = YYCURSOR - SCNG(yy_text);
4192#line 1718 "Zend/zend_language_scanner.l"
4193        {
4194    if (CG(current_namespace)) {
4195        *zendlval = *CG(current_namespace);
4196        zval_copy_ctor(zendlval);
4197    } else {
4198        ZVAL_EMPTY_STRING(zendlval);
4199    }
4200    return T_NS_C;
4201}
4202#line 4203 "Zend/zend_language_scanner.c"
4203yy321:
4204        YYDEBUG(321, *YYCURSOR);
4205        yych = *++YYCURSOR;
4206        if (yych == 'R') goto yy322;
4207        if (yych != 'r') goto yy187;
4208yy322:
4209        YYDEBUG(322, *YYCURSOR);
4210        yych = *++YYCURSOR;
4211        if (yych != '_') goto yy187;
4212        YYDEBUG(323, *YYCURSOR);
4213        yych = *++YYCURSOR;
4214        if (yych != '_') goto yy187;
4215        YYDEBUG(324, *YYCURSOR);
4216        ++YYCURSOR;
4217        if (yybm[0+(yych = *YYCURSOR)] & 4) {
4218            goto yy186;
4219        }
4220        YYDEBUG(325, *YYCURSOR);
4221        yyleng = YYCURSOR - SCNG(yy_text);
4222#line 1691 "Zend/zend_language_scanner.l"
4223        {
4224    char *filename = zend_get_compiled_filename(TSRMLS_C);
4225    const size_t filename_len = strlen(filename);
4226    char *dirname;
4227
4228    if (!filename) {
4229        filename = "";
4230    }
4231
4232    dirname = estrndup(filename, filename_len);
4233    zend_dirname(dirname, filename_len);
4234
4235    if (strcmp(dirname, ".") == 0) {
4236        dirname = erealloc(dirname, MAXPATHLEN);
4237#if HAVE_GETCWD
4238        VCWD_GETCWD(dirname, MAXPATHLEN);
4239#elif HAVE_GETWD
4240        VCWD_GETWD(dirname);
4241#endif
4242    }
4243
4244    zendlval->value.str.len = strlen(dirname);
4245    zendlval->value.str.val = dirname;
4246    zendlval->type = IS_STRING;
4247    return T_DIR;
4248}
4249#line 4250 "Zend/zend_language_scanner.c"
4250yy326:
4251        YYDEBUG(326, *YYCURSOR);
4252        yych = *++YYCURSOR;
4253        if (yych == 'N') goto yy327;
4254        if (yych != 'n') goto yy187;
4255yy327:
4256        YYDEBUG(327, *YYCURSOR);
4257        yych = *++YYCURSOR;
4258        if (yych == 'E') goto yy328;
4259        if (yych != 'e') goto yy187;
4260yy328:
4261        YYDEBUG(328, *YYCURSOR);
4262        yych = *++YYCURSOR;
4263        if (yych != '_') goto yy187;
4264        YYDEBUG(329, *YYCURSOR);
4265        yych = *++YYCURSOR;
4266        if (yych != '_') goto yy187;
4267        YYDEBUG(330, *YYCURSOR);
4268        ++YYCURSOR;
4269        if (yybm[0+(yych = *YYCURSOR)] & 4) {
4270            goto yy186;
4271        }
4272        YYDEBUG(331, *YYCURSOR);
4273        yyleng = YYCURSOR - SCNG(yy_text);
4274#line 1673 "Zend/zend_language_scanner.l"
4275        {
4276    zendlval->value.lval = CG(zend_lineno);
4277    zendlval->type = IS_LONG;
4278    return T_LINE;
4279}
4280#line 4281 "Zend/zend_language_scanner.c"
4281yy332:
4282        YYDEBUG(332, *YYCURSOR);
4283        yych = *++YYCURSOR;
4284        if (yych == 'T') goto yy333;
4285        if (yych != 't') goto yy187;
4286yy333:
4287        YYDEBUG(333, *YYCURSOR);
4288        yych = *++YYCURSOR;
4289        if (yych == 'H') goto yy334;
4290        if (yych != 'h') goto yy187;
4291yy334:
4292        YYDEBUG(334, *YYCURSOR);
4293        yych = *++YYCURSOR;
4294        if (yych == 'O') goto yy335;
4295        if (yych != 'o') goto yy187;
4296yy335:
4297        YYDEBUG(335, *YYCURSOR);
4298        yych = *++YYCURSOR;
4299        if (yych == 'D') goto yy336;
4300        if (yych != 'd') goto yy187;
4301yy336:
4302        YYDEBUG(336, *YYCURSOR);
4303        yych = *++YYCURSOR;
4304        if (yych != '_') goto yy187;
4305        YYDEBUG(337, *YYCURSOR);
4306        yych = *++YYCURSOR;
4307        if (yych != '_') goto yy187;
4308        YYDEBUG(338, *YYCURSOR);
4309        ++YYCURSOR;
4310        if (yybm[0+(yych = *YYCURSOR)] & 4) {
4311            goto yy186;
4312        }
4313        YYDEBUG(339, *YYCURSOR);
4314        yyleng = YYCURSOR - SCNG(yy_text);
4315#line 1652 "Zend/zend_language_scanner.l"
4316        {
4317    const char *class_name = CG(active_class_entry) ? CG(active_class_entry)->name : NULL;
4318    const char *func_name = CG(active_op_array)? CG(active_op_array)->function_name : NULL;
4319    size_t len = 0;
4320
4321    if (class_name) {
4322        len += strlen(class_name) + 2;
4323    }
4324    if (func_name) {
4325        len += strlen(func_name);
4326    }
4327
4328    zendlval->value.str.len = zend_spprintf(&zendlval->value.str.val, 0, "%s%s%s",
4329        class_name ? class_name : "",
4330        class_name && func_name ? "::" : "",
4331        func_name ? func_name : ""
4332        );
4333    zendlval->type = IS_STRING;
4334    return T_METHOD_C;
4335}
4336#line 4337 "Zend/zend_language_scanner.c"
4337yy340:
4338        YYDEBUG(340, *YYCURSOR);
4339        yych = *++YYCURSOR;
4340        if (yych == 'L') goto yy351;
4341        if (yych == 'l') goto yy351;
4342        goto yy187;
4343yy341:
4344        YYDEBUG(341, *YYCURSOR);
4345        yych = *++YYCURSOR;
4346        if (yych == 'N') goto yy342;
4347        if (yych != 'n') goto yy187;
4348yy342:
4349        YYDEBUG(342, *YYCURSOR);
4350        yych = *++YYCURSOR;
4351        if (yych == 'C') goto yy343;
4352        if (yych != 'c') goto yy187;
4353yy343:
4354        YYDEBUG(343, *YYCURSOR);
4355        yych = *++YYCURSOR;
4356        if (yych == 'T') goto yy344;
4357        if (yych != 't') goto yy187;
4358yy344:
4359        YYDEBUG(344, *YYCURSOR);
4360        yych = *++YYCURSOR;
4361        if (yych == 'I') goto yy345;
4362        if (yych != 'i') goto yy187;
4363yy345:
4364        YYDEBUG(345, *YYCURSOR);
4365        yych = *++YYCURSOR;
4366        if (yych == 'O') goto yy346;
4367        if (yych != 'o') goto yy187;
4368yy346:
4369        YYDEBUG(346, *YYCURSOR);
4370        yych = *++YYCURSOR;
4371        if (yych == 'N') goto yy347;
4372        if (yych != 'n') goto yy187;
4373yy347:
4374        YYDEBUG(347, *YYCURSOR);
4375        yych = *++YYCURSOR;
4376        if (yych != '_') goto yy187;
4377        YYDEBUG(348, *YYCURSOR);
4378        yych = *++YYCURSOR;
4379        if (yych != '_') goto yy187;
4380        YYDEBUG(349, *YYCURSOR);
4381        ++YYCURSOR;
4382        if (yybm[0+(yych = *YYCURSOR)] & 4) {
4383            goto yy186;
4384        }
4385        YYDEBUG(350, *YYCURSOR);
4386        yyleng = YYCURSOR - SCNG(yy_text);
4387#line 1636 "Zend/zend_language_scanner.l"
4388        {
4389    const char *func_name = NULL;
4390
4391    if (CG(active_op_array)) {
4392        func_name = CG(active_op_array)->function_name;
4393    }
4394
4395    if (!func_name) {
4396        func_name = "";
4397    }
4398    zendlval->value.str.len = strlen(func_name);
4399    zendlval->value.str.val = estrndup(func_name, zendlval->value.str.len);
4400    zendlval->type = IS_STRING;
4401    return T_FUNC_C;
4402}
4403#line 4404 "Zend/zend_language_scanner.c"
4404yy351:
4405        YYDEBUG(351, *YYCURSOR);
4406        yych = *++YYCURSOR;
4407        if (yych == 'E') goto yy352;
4408        if (yych != 'e') goto yy187;
4409yy352:
4410        YYDEBUG(352, *YYCURSOR);
4411        yych = *++YYCURSOR;
4412        if (yych != '_') goto yy187;
4413        YYDEBUG(353, *YYCURSOR);
4414        yych = *++YYCURSOR;
4415        if (yych != '_') goto yy187;
4416        YYDEBUG(354, *YYCURSOR);
4417        ++YYCURSOR;
4418        if (yybm[0+(yych = *YYCURSOR)] & 4) {
4419            goto yy186;
4420        }
4421        YYDEBUG(355, *YYCURSOR);
4422        yyleng = YYCURSOR - SCNG(yy_text);
4423#line 1679 "Zend/zend_language_scanner.l"
4424        {
4425    char *filename = zend_get_compiled_filename(TSRMLS_C);
4426
4427    if (!filename) {
4428        filename = "";
4429    }
4430    zendlval->value.str.len = strlen(filename);
4431    zendlval->value.str.val = estrndup(filename, zendlval->value.str.len);
4432    zendlval->type = IS_STRING;
4433    return T_FILE;
4434}
4435#line 4436 "Zend/zend_language_scanner.c"
4436yy356:
4437        YYDEBUG(356, *YYCURSOR);
4438        yych = *++YYCURSOR;
4439        if (yych == 'A') goto yy357;
4440        if (yych != 'a') goto yy187;
4441yy357:
4442        YYDEBUG(357, *YYCURSOR);
4443        yych = *++YYCURSOR;
4444        if (yych == 'I') goto yy358;
4445        if (yych != 'i') goto yy187;
4446yy358:
4447        YYDEBUG(358, *YYCURSOR);
4448        yych = *++YYCURSOR;
4449        if (yych == 'T') goto yy359;
4450        if (yych != 't') goto yy187;
4451yy359:
4452        YYDEBUG(359, *YYCURSOR);
4453        yych = *++YYCURSOR;
4454        if (yych != '_') goto yy187;
4455        YYDEBUG(360, *YYCURSOR);
4456        yych = *++YYCURSOR;
4457        if (yych != '_') goto yy187;
4458        YYDEBUG(361, *YYCURSOR);
4459        ++YYCURSOR;
4460        if (yybm[0+(yych = *YYCURSOR)] & 4) {
4461            goto yy186;
4462        }
4463        YYDEBUG(362, *YYCURSOR);
4464        yyleng = YYCURSOR - SCNG(yy_text);
4465#line 1616 "Zend/zend_language_scanner.l"
4466        {
4467    const char *trait_name = NULL;
4468
4469    if (CG(active_class_entry)
4470        && (ZEND_ACC_TRAIT ==
4471            (CG(active_class_entry)->ce_flags & ZEND_ACC_TRAIT))) {
4472        trait_name = CG(active_class_entry)->name;
4473    }
4474
4475    if (!trait_name) {
4476        trait_name = "";
4477    }
4478
4479    zendlval->value.str.len = strlen(trait_name);
4480    zendlval->value.str.val = estrndup(trait_name, zendlval->value.str.len);
4481    zendlval->type = IS_STRING;
4482
4483    return T_TRAIT_C;
4484}
4485#line 4486 "Zend/zend_language_scanner.c"
4486yy363:
4487        YYDEBUG(363, *YYCURSOR);
4488        yych = *++YYCURSOR;
4489        if (yych == 'A') goto yy364;
4490        if (yych != 'a') goto yy187;
4491yy364:
4492        YYDEBUG(364, *YYCURSOR);
4493        yych = *++YYCURSOR;
4494        if (yych == 'S') goto yy365;
4495        if (yych != 's') goto yy187;
4496yy365:
4497        YYDEBUG(365, *YYCURSOR);
4498        yych = *++YYCURSOR;
4499        if (yych == 'S') goto yy366;
4500        if (yych != 's') goto yy187;
4501yy366:
4502        YYDEBUG(366, *YYCURSOR);
4503        yych = *++YYCURSOR;
4504        if (yych != '_') goto yy187;
4505        YYDEBUG(367, *YYCURSOR);
4506        yych = *++YYCURSOR;
4507        if (yych != '_') goto yy187;
4508        YYDEBUG(368, *YYCURSOR);
4509        ++YYCURSOR;
4510        if (yybm[0+(yych = *YYCURSOR)] & 4) {
4511            goto yy186;
4512        }
4513        YYDEBUG(369, *YYCURSOR);
4514        yyleng = YYCURSOR - SCNG(yy_text);
4515#line 1589 "Zend/zend_language_scanner.l"
4516        {
4517    const char *class_name = NULL;
4518
4519    if (CG(active_class_entry)
4520        && (ZEND_ACC_TRAIT ==
4521            (CG(active_class_entry)->ce_flags & ZEND_ACC_TRAIT))) {
4522        /* We create a special __CLASS__ constant that is going to be resolved
4523           at run-time */
4524        zendlval->value.str.len = sizeof("__CLASS__")-1;
4525        zendlval->value.str.val = estrndup("__CLASS__", zendlval->value.str.len);
4526        zendlval->type = IS_CONSTANT;
4527    } else {
4528        if (CG(active_class_entry)) {
4529            class_name = CG(active_class_entry)->name;
4530        }
4531
4532        if (!class_name) {
4533            class_name = "";
4534        }
4535
4536        zendlval->value.str.len = strlen(class_name);
4537        zendlval->value.str.val = estrndup(class_name, zendlval->value.str.len);
4538        zendlval->type = IS_STRING;
4539    }
4540    return T_CLASS_C;
4541}
4542#line 4543 "Zend/zend_language_scanner.c"
4543yy370:
4544        YYDEBUG(370, *YYCURSOR);
4545        yych = *++YYCURSOR;
4546        if (yych == 'L') goto yy371;
4547        if (yych != 'l') goto yy187;
4548yy371:
4549        YYDEBUG(371, *YYCURSOR);
4550        yych = *++YYCURSOR;
4551        if (yych == 'T') goto yy372;
4552        if (yych != 't') goto yy187;
4553yy372:
4554        YYDEBUG(372, *YYCURSOR);
4555        yych = *++YYCURSOR;
4556        if (yych != '_') goto yy187;
4557        YYDEBUG(373, *YYCURSOR);
4558        yych = *++YYCURSOR;
4559        if (yych == 'C') goto yy374;
4560        if (yych != 'c') goto yy187;
4561yy374:
4562        YYDEBUG(374, *YYCURSOR);
4563        yych = *++YYCURSOR;
4564        if (yych == 'O') goto yy375;
4565        if (yych != 'o') goto yy187;
4566yy375:
4567        YYDEBUG(375, *YYCURSOR);
4568        yych = *++YYCURSOR;
4569        if (yych == 'M') goto yy376;
4570        if (yych != 'm') goto yy187;
4571yy376:
4572        YYDEBUG(376, *YYCURSOR);
4573        yych = *++YYCURSOR;
4574        if (yych == 'P') goto yy377;
4575        if (yych != 'p') goto yy187;
4576yy377:
4577        YYDEBUG(377, *YYCURSOR);
4578        yych = *++YYCURSOR;
4579        if (yych == 'I') goto yy378;
4580        if (yych != 'i') goto yy187;
4581yy378:
4582        YYDEBUG(378, *YYCURSOR);
4583        yych = *++YYCURSOR;
4584        if (yych == 'L') goto yy379;
4585        if (yych != 'l') goto yy187;
4586yy379:
4587        YYDEBUG(379, *YYCURSOR);
4588        yych = *++YYCURSOR;
4589        if (yych == 'E') goto yy380;
4590        if (yych != 'e') goto yy187;
4591yy380:
4592        YYDEBUG(380, *YYCURSOR);
4593        yych = *++YYCURSOR;
4594        if (yych == 'R') goto yy381;
4595        if (yych != 'r') goto yy187;
4596yy381:
4597        YYDEBUG(381, *YYCURSOR);
4598        ++YYCURSOR;
4599        if (yybm[0+(yych = *YYCURSOR)] & 4) {
4600            goto yy186;
4601        }
4602        YYDEBUG(382, *YYCURSOR);
4603        yyleng = YYCURSOR - SCNG(yy_text);
4604#line 1298 "Zend/zend_language_scanner.l"
4605        {
4606    return T_HALT_COMPILER;
4607}
4608#line 4609 "Zend/zend_language_scanner.c"
4609yy383:
4610        YYDEBUG(383, *YYCURSOR);
4611        yych = *++YYCURSOR;
4612        if (yych == 'S') goto yy387;
4613        if (yych == 's') goto yy387;
4614        goto yy187;
4615yy384:
4616        YYDEBUG(384, *YYCURSOR);
4617        yych = *++YYCURSOR;
4618        if (yych == 'E') goto yy385;
4619        if (yych != 'e') goto yy187;
4620yy385:
4621        YYDEBUG(385, *YYCURSOR);
4622        ++YYCURSOR;
4623        if (yybm[0+(yych = *YYCURSOR)] & 4) {
4624            goto yy186;
4625        }
4626        YYDEBUG(386, *YYCURSOR);
4627        yyleng = YYCURSOR - SCNG(yy_text);
4628#line 1278 "Zend/zend_language_scanner.l"
4629        {
4630    return T_USE;
4631}
4632#line 4633 "Zend/zend_language_scanner.c"
4633yy387:
4634        YYDEBUG(387, *YYCURSOR);
4635        yych = *++YYCURSOR;
4636        if (yych == 'E') goto yy388;
4637        if (yych != 'e') goto yy187;
4638yy388:
4639        YYDEBUG(388, *YYCURSOR);
4640        yych = *++YYCURSOR;
4641        if (yych == 'T') goto yy389;
4642        if (yych != 't') goto yy187;
4643yy389:
4644        YYDEBUG(389, *YYCURSOR);
4645        ++YYCURSOR;
4646        if (yybm[0+(yych = *YYCURSOR)] & 4) {
4647            goto yy186;
4648        }
4649        YYDEBUG(390, *YYCURSOR);
4650        yyleng = YYCURSOR - SCNG(yy_text);
4651#line 1326 "Zend/zend_language_scanner.l"
4652        {
4653    return T_UNSET;
4654}
4655#line 4656 "Zend/zend_language_scanner.c"
4656yy391:
4657        YYDEBUG(391, *YYCURSOR);
4658        ++YYCURSOR;
4659        YYFILL(7);
4660        yych = *YYCURSOR;
4661yy392:
4662        YYDEBUG(392, *YYCURSOR);
4663        if (yych <= 'S') {
4664            if (yych <= 'D') {
4665                if (yych <= ' ') {
4666                    if (yych == '\t') goto yy391;
4667                    if (yych <= 0x1F) goto yy194;
4668                    goto yy391;
4669                } else {
4670                    if (yych <= 'A') {
4671                        if (yych <= '@') goto yy194;
4672                        goto yy396;
4673                    } else {
4674                        if (yych <= 'B') goto yy394;
4675                        if (yych <= 'C') goto yy194;
4676                        goto yy399;
4677                    }
4678                }
4679            } else {
4680                if (yych <= 'I') {
4681                    if (yych == 'F') goto yy400;
4682                    if (yych <= 'H') goto yy194;
4683                    goto yy401;
4684                } else {
4685                    if (yych <= 'O') {
4686                        if (yych <= 'N') goto yy194;
4687                        goto yy395;
4688                    } else {
4689                        if (yych <= 'Q') goto yy194;
4690                        if (yych <= 'R') goto yy398;
4691                        goto yy397;
4692                    }
4693                }
4694            }
4695        } else {
4696            if (yych <= 'f') {
4697                if (yych <= 'a') {
4698                    if (yych == 'U') goto yy393;
4699                    if (yych <= '`') goto yy194;
4700                    goto yy396;
4701                } else {
4702                    if (yych <= 'c') {
4703                        if (yych <= 'b') goto yy394;
4704                        goto yy194;
4705                    } else {
4706                        if (yych <= 'd') goto yy399;
4707                        if (yych <= 'e') goto yy194;
4708                        goto yy400;
4709                    }
4710                }
4711            } else {
4712                if (yych <= 'q') {
4713                    if (yych <= 'i') {
4714                        if (yych <= 'h') goto yy194;
4715                        goto yy401;
4716                    } else {
4717                        if (yych == 'o') goto yy395;
4718                        goto yy194;
4719                    }
4720                } else {
4721                    if (yych <= 's') {
4722                        if (yych <= 'r') goto yy398;
4723                        goto yy397;
4724                    } else {
4725                        if (yych != 'u') goto yy194;
4726                    }
4727                }
4728            }
4729        }
4730yy393:
4731        YYDEBUG(393, *YYCURSOR);
4732        yych = *++YYCURSOR;
4733        if (yych == 'N') goto yy460;
4734        if (yych == 'n') goto yy460;
4735        goto yy194;
4736yy394:
4737        YYDEBUG(394, *YYCURSOR);
4738        yych = *++YYCURSOR;
4739        if (yych <= 'O') {
4740            if (yych == 'I') goto yy447;
4741            if (yych <= 'N') goto yy194;
4742            goto yy448;
4743        } else {
4744            if (yych <= 'i') {
4745                if (yych <= 'h') goto yy194;
4746                goto yy447;
4747            } else {
4748                if (yych == 'o') goto yy448;
4749                goto yy194;
4750            }
4751        }
4752yy395:
4753        YYDEBUG(395, *YYCURSOR);
4754        yych = *++YYCURSOR;
4755        if (yych == 'B') goto yy439;
4756        if (yych == 'b') goto yy439;
4757        goto yy194;
4758yy396:
4759        YYDEBUG(396, *YYCURSOR);
4760        yych = *++YYCURSOR;
4761        if (yych == 'R') goto yy432;
4762        if (yych == 'r') goto yy432;
4763        goto yy194;
4764yy397:
4765        YYDEBUG(397, *YYCURSOR);
4766        yych = *++YYCURSOR;
4767        if (yych == 'T') goto yy424;
4768        if (yych == 't') goto yy424;
4769        goto yy194;
4770yy398:
4771        YYDEBUG(398, *YYCURSOR);
4772        yych = *++YYCURSOR;
4773        if (yych == 'E') goto yy422;
4774        if (yych == 'e') goto yy422;
4775        goto yy194;
4776yy399:
4777        YYDEBUG(399, *YYCURSOR);
4778        yych = *++YYCURSOR;
4779        if (yych == 'O') goto yy418;
4780        if (yych == 'o') goto yy418;
4781        goto yy194;
4782yy400:
4783        YYDEBUG(400, *YYCURSOR);
4784        yych = *++YYCURSOR;
4785        if (yych == 'L') goto yy411;
4786        if (yych == 'l') goto yy411;
4787        goto yy194;
4788yy401:
4789        YYDEBUG(401, *YYCURSOR);
4790        yych = *++YYCURSOR;
4791        if (yych == 'N') goto yy402;
4792        if (yych != 'n') goto yy194;
4793yy402:
4794        YYDEBUG(402, *YYCURSOR);
4795        yych = *++YYCURSOR;
4796        if (yych == 'T') goto yy403;
4797        if (yych != 't') goto yy194;
4798yy403:
4799        YYDEBUG(403, *YYCURSOR);
4800        yych = *++YYCURSOR;
4801        if (yych == 'E') goto yy404;
4802        if (yych != 'e') goto yy406;
4803yy404:
4804        YYDEBUG(404, *YYCURSOR);
4805        yych = *++YYCURSOR;
4806        if (yych == 'G') goto yy409;
4807        if (yych == 'g') goto yy409;
4808        goto yy194;
4809yy405:
4810        YYDEBUG(405, *YYCURSOR);
4811        ++YYCURSOR;
4812        YYFILL(1);
4813        yych = *YYCURSOR;
4814yy406:
4815        YYDEBUG(406, *YYCURSOR);
4816        if (yych <= 0x1F) {
4817            if (yych == '\t') goto yy405;
4818            goto yy194;
4819        } else {
4820            if (yych <= ' ') goto yy405;
4821            if (yych != ')') goto yy194;
4822        }
4823        YYDEBUG(407, *YYCURSOR);
4824        ++YYCURSOR;
4825        YYDEBUG(408, *YYCURSOR);
4826        yyleng = YYCURSOR - SCNG(yy_text);
4827#line 1226 "Zend/zend_language_scanner.l"
4828        {
4829    return T_INT_CAST;
4830}
4831#line 4832 "Zend/zend_language_scanner.c"
4832yy409:
4833        YYDEBUG(409, *YYCURSOR);
4834        yych = *++YYCURSOR;
4835        if (yych == 'E') goto yy410;
4836        if (yych != 'e') goto yy194;
4837yy410:
4838        YYDEBUG(410, *YYCURSOR);
4839        yych = *++YYCURSOR;
4840        if (yych == 'R') goto yy405;
4841        if (yych == 'r') goto yy405;
4842        goto yy194;
4843yy411:
4844        YYDEBUG(411, *YYCURSOR);
4845        yych = *++YYCURSOR;
4846        if (yych == 'O') goto yy412;
4847        if (yych != 'o') goto yy194;
4848yy412:
4849        YYDEBUG(412, *YYCURSOR);
4850        yych = *++YYCURSOR;
4851        if (yych == 'A') goto yy413;
4852        if (yych != 'a') goto yy194;
4853yy413:
4854        YYDEBUG(413, *YYCURSOR);
4855        yych = *++YYCURSOR;
4856        if (yych == 'T') goto yy414;
4857        if (yych != 't') goto yy194;
4858yy414:
4859        YYDEBUG(414, *YYCURSOR);
4860        ++YYCURSOR;
4861        YYFILL(1);
4862        yych = *YYCURSOR;
4863        YYDEBUG(415, *YYCURSOR);
4864        if (yych <= 0x1F) {
4865            if (yych == '\t') goto yy414;
4866            goto yy194;
4867        } else {
4868            if (yych <= ' ') goto yy414;
4869            if (yych != ')') goto yy194;
4870        }
4871        YYDEBUG(416, *YYCURSOR);
4872        ++YYCURSOR;
4873        YYDEBUG(417, *YYCURSOR);
4874        yyleng = YYCURSOR - SCNG(yy_text);
4875#line 1230 "Zend/zend_language_scanner.l"
4876        {
4877    return T_DOUBLE_CAST;
4878}
4879#line 4880 "Zend/zend_language_scanner.c"
4880yy418:
4881        YYDEBUG(418, *YYCURSOR);
4882        yych = *++YYCURSOR;
4883        if (yych == 'U') goto yy419;
4884        if (yych != 'u') goto yy194;
4885yy419:
4886        YYDEBUG(419, *YYCURSOR);
4887        yych = *++YYCURSOR;
4888        if (yych == 'B') goto yy420;
4889        if (yych != 'b') goto yy194;
4890yy420:
4891        YYDEBUG(420, *YYCURSOR);
4892        yych = *++YYCURSOR;
4893        if (yych == 'L') goto yy421;
4894        if (yych != 'l') goto yy194;
4895yy421:
4896        YYDEBUG(421, *YYCURSOR);
4897        yych = *++YYCURSOR;
4898        if (yych == 'E') goto yy414;
4899        if (yych == 'e') goto yy414;
4900        goto yy194;
4901yy422:
4902        YYDEBUG(422, *YYCURSOR);
4903        yych = *++YYCURSOR;
4904        if (yych == 'A') goto yy423;
4905        if (yych != 'a') goto yy194;
4906yy423:
4907        YYDEBUG(423, *YYCURSOR);
4908        yych = *++YYCURSOR;
4909        if (yych == 'L') goto yy414;
4910        if (yych == 'l') goto yy414;
4911        goto yy194;
4912yy424:
4913        YYDEBUG(424, *YYCURSOR);
4914        yych = *++YYCURSOR;
4915        if (yych == 'R') goto yy425;
4916        if (yych != 'r') goto yy194;
4917yy425:
4918        YYDEBUG(425, *YYCURSOR);
4919        yych = *++YYCURSOR;
4920        if (yych == 'I') goto yy426;
4921        if (yych != 'i') goto yy194;
4922yy426:
4923        YYDEBUG(426, *YYCURSOR);
4924        yych = *++YYCURSOR;
4925        if (yych == 'N') goto yy427;
4926        if (yych != 'n') goto yy194;
4927yy427:
4928        YYDEBUG(427, *YYCURSOR);
4929        yych = *++YYCURSOR;
4930        if (yych == 'G') goto yy428;
4931        if (yych != 'g') goto yy194;
4932yy428:
4933        YYDEBUG(428, *YYCURSOR);
4934        ++YYCURSOR;
4935        YYFILL(1);
4936        yych = *YYCURSOR;
4937        YYDEBUG(429, *YYCURSOR);
4938        if (yych <= 0x1F) {
4939            if (yych == '\t') goto yy428;
4940            goto yy194;
4941        } else {
4942            if (yych <= ' ') goto yy428;
4943            if (yych != ')') goto yy194;
4944        }
4945        YYDEBUG(430, *YYCURSOR);
4946        ++YYCURSOR;
4947        YYDEBUG(431, *YYCURSOR);
4948        yyleng = YYCURSOR - SCNG(yy_text);
4949#line 1234 "Zend/zend_language_scanner.l"
4950        {
4951    return T_STRING_CAST;
4952}
4953#line 4954 "Zend/zend_language_scanner.c"
4954yy432:
4955        YYDEBUG(432, *YYCURSOR);
4956        yych = *++YYCURSOR;
4957        if (yych == 'R') goto yy433;
4958        if (yych != 'r') goto yy194;
4959yy433:
4960        YYDEBUG(433, *YYCURSOR);
4961        yych = *++YYCURSOR;
4962        if (yych == 'A') goto yy434;
4963        if (yych != 'a') goto yy194;
4964yy434:
4965        YYDEBUG(434, *YYCURSOR);
4966        yych = *++YYCURSOR;
4967        if (yych == 'Y') goto yy435;
4968        if (yych != 'y') goto yy194;
4969yy435:
4970        YYDEBUG(435, *YYCURSOR);
4971        ++YYCURSOR;
4972        YYFILL(1);
4973        yych = *YYCURSOR;
4974        YYDEBUG(436, *YYCURSOR);
4975        if (yych <= 0x1F) {
4976            if (yych == '\t') goto yy435;
4977            goto yy194;
4978        } else {
4979            if (yych <= ' ') goto yy435;
4980            if (yych != ')') goto yy194;
4981        }
4982        YYDEBUG(437, *YYCURSOR);
4983        ++YYCURSOR;
4984        YYDEBUG(438, *YYCURSOR);
4985        yyleng = YYCURSOR - SCNG(yy_text);
4986#line 1238 "Zend/zend_language_scanner.l"
4987        {
4988    return T_ARRAY_CAST;
4989}
4990#line 4991 "Zend/zend_language_scanner.c"
4991yy439:
4992        YYDEBUG(439, *YYCURSOR);
4993        yych = *++YYCURSOR;
4994        if (yych == 'J') goto yy440;
4995        if (yych != 'j') goto yy194;
4996yy440:
4997        YYDEBUG(440, *YYCURSOR);
4998        yych = *++YYCURSOR;
4999        if (yych == 'E') goto yy441;
5000        if (yych != 'e') goto yy194;
5001yy441:
5002        YYDEBUG(441, *YYCURSOR);
5003        yych = *++YYCURSOR;
5004        if (yych == 'C') goto yy442;
5005        if (yych != 'c') goto yy194;
5006yy442:
5007        YYDEBUG(442, *YYCURSOR);
5008        yych = *++YYCURSOR;
5009        if (yych == 'T') goto yy443;
5010        if (yych != 't') goto yy194;
5011yy443:
5012        YYDEBUG(443, *YYCURSOR);
5013        ++YYCURSOR;
5014        YYFILL(1);
5015        yych = *YYCURSOR;
5016        YYDEBUG(444, *YYCURSOR);
5017        if (yych <= 0x1F) {
5018            if (yych == '\t') goto yy443;
5019            goto yy194;
5020        } else {
5021            if (yych <= ' ') goto yy443;
5022            if (yych != ')') goto yy194;
5023        }
5024        YYDEBUG(445, *YYCURSOR);
5025        ++YYCURSOR;
5026        YYDEBUG(446, *YYCURSOR);
5027        yyleng = YYCURSOR - SCNG(yy_text);
5028#line 1242 "Zend/zend_language_scanner.l"
5029        {
5030    return T_OBJECT_CAST;
5031}
5032#line 5033 "Zend/zend_language_scanner.c"
5033yy447:
5034        YYDEBUG(447, *YYCURSOR);
5035        yych = *++YYCURSOR;
5036        if (yych == 'N') goto yy457;
5037        if (yych == 'n') goto yy457;
5038        goto yy194;
5039yy448:
5040        YYDEBUG(448, *YYCURSOR);
5041        yych = *++YYCURSOR;
5042        if (yych == 'O') goto yy449;
5043        if (yych != 'o') goto yy194;
5044yy449:
5045        YYDEBUG(449, *YYCURSOR);
5046        yych = *++YYCURSOR;
5047        if (yych == 'L') goto yy450;
5048        if (yych != 'l') goto yy194;
5049yy450:
5050        YYDEBUG(450, *YYCURSOR);
5051        yych = *++YYCURSOR;
5052        if (yych == 'E') goto yy455;
5053        if (yych == 'e') goto yy455;
5054        goto yy452;
5055yy451:
5056        YYDEBUG(451, *YYCURSOR);
5057        ++YYCURSOR;
5058        YYFILL(1);
5059        yych = *YYCURSOR;
5060yy452:
5061        YYDEBUG(452, *YYCURSOR);
5062        if (yych <= 0x1F) {
5063            if (yych == '\t') goto yy451;
5064            goto yy194;
5065        } else {
5066            if (yych <= ' ') goto yy451;
5067            if (yych != ')') goto yy194;
5068        }
5069        YYDEBUG(453, *YYCURSOR);
5070        ++YYCURSOR;
5071        YYDEBUG(454, *YYCURSOR);
5072        yyleng = YYCURSOR - SCNG(yy_text);
5073#line 1246 "Zend/zend_language_scanner.l"
5074        {
5075    return T_BOOL_CAST;
5076}
5077#line 5078 "Zend/zend_language_scanner.c"
5078yy455:
5079        YYDEBUG(455, *YYCURSOR);
5080        yych = *++YYCURSOR;
5081        if (yych == 'A') goto yy456;
5082        if (yych != 'a') goto yy194;
5083yy456:
5084        YYDEBUG(456, *YYCURSOR);
5085        yych = *++YYCURSOR;
5086        if (yych == 'N') goto yy451;
5087        if (yych == 'n') goto yy451;
5088        goto yy194;
5089yy457:
5090        YYDEBUG(457, *YYCURSOR);
5091        yych = *++YYCURSOR;
5092        if (yych == 'A') goto yy458;
5093        if (yych != 'a') goto yy194;
5094yy458:
5095        YYDEBUG(458, *YYCURSOR);
5096        yych = *++YYCURSOR;
5097        if (yych == 'R') goto yy459;
5098        if (yych != 'r') goto yy194;
5099yy459:
5100        YYDEBUG(459, *YYCURSOR);
5101        yych = *++YYCURSOR;
5102        if (yych == 'Y') goto yy428;
5103        if (yych == 'y') goto yy428;
5104        goto yy194;
5105yy460:
5106        YYDEBUG(460, *YYCURSOR);
5107        yych = *++YYCURSOR;
5108        if (yych == 'S') goto yy461;
5109        if (yych != 's') goto yy194;
5110yy461:
5111        YYDEBUG(461, *YYCURSOR);
5112        yych = *++YYCURSOR;
5113        if (yych == 'E') goto yy462;
5114        if (yych != 'e') goto yy194;
5115yy462:
5116        YYDEBUG(462, *YYCURSOR);
5117        yych = *++YYCURSOR;
5118        if (yych == 'T') goto yy463;
5119        if (yych != 't') goto yy194;
5120yy463:
5121        YYDEBUG(463, *YYCURSOR);
5122        ++YYCURSOR;
5123        YYFILL(1);
5124        yych = *YYCURSOR;
5125        YYDEBUG(464, *YYCURSOR);
5126        if (yych <= 0x1F) {
5127            if (yych == '\t') goto yy463;
5128            goto yy194;
5129        } else {
5130            if (yych <= ' ') goto yy463;
5131            if (yych != ')') goto yy194;
5132        }
5133        YYDEBUG(465, *YYCURSOR);
5134        ++YYCURSOR;
5135        YYDEBUG(466, *YYCURSOR);
5136        yyleng = YYCURSOR - SCNG(yy_text);
5137#line 1250 "Zend/zend_language_scanner.l"
5138        {
5139    return T_UNSET_CAST;
5140}
5141#line 5142 "Zend/zend_language_scanner.c"
5142yy467:
5143        YYDEBUG(467, *YYCURSOR);
5144        yych = *++YYCURSOR;
5145        if (yych == 'R') goto yy468;
5146        if (yych != 'r') goto yy187;
5147yy468:
5148        YYDEBUG(468, *YYCURSOR);
5149        ++YYCURSOR;
5150        if (yybm[0+(yych = *YYCURSOR)] & 4) {
5151            goto yy186;
5152        }
5153        YYDEBUG(469, *YYCURSOR);
5154        yyleng = YYCURSOR - SCNG(yy_text);
5155#line 1222 "Zend/zend_language_scanner.l"
5156        {
5157    return T_VAR;
5158}
5159#line 5160 "Zend/zend_language_scanner.c"
5160yy470:
5161        YYDEBUG(470, *YYCURSOR);
5162        yych = *++YYCURSOR;
5163        if (yych == 'M') goto yy474;
5164        if (yych == 'm') goto yy474;
5165        goto yy187;
5166yy471:
5167        YYDEBUG(471, *YYCURSOR);
5168        yych = *++YYCURSOR;
5169        if (yych == 'W') goto yy472;
5170        if (yych != 'w') goto yy187;
5171yy472:
5172        YYDEBUG(472, *YYCURSOR);
5173        ++YYCURSOR;
5174        if (yybm[0+(yych = *YYCURSOR)] & 4) {
5175            goto yy186;
5176        }
5177        YYDEBUG(473, *YYCURSOR);
5178        yyleng = YYCURSOR - SCNG(yy_text);
5179#line 1214 "Zend/zend_language_scanner.l"
5180        {
5181    return T_NEW;
5182}
5183#line 5184 "Zend/zend_language_scanner.c"
5184yy474:
5185        YYDEBUG(474, *YYCURSOR);
5186        yych = *++YYCURSOR;
5187        if (yych == 'E') goto yy475;
5188        if (yych != 'e') goto yy187;
5189yy475:
5190        YYDEBUG(475, *YYCURSOR);
5191        yych = *++YYCURSOR;
5192        if (yych == 'S') goto yy476;
5193        if (yych != 's') goto yy187;
5194yy476:
5195        YYDEBUG(476, *YYCURSOR);
5196        yych = *++YYCURSOR;
5197        if (yych == 'P') goto yy477;
5198        if (yych != 'p') goto yy187;
5199yy477:
5200        YYDEBUG(477, *YYCURSOR);
5201        yych = *++YYCURSOR;
5202        if (yych == 'A') goto yy478;
5203        if (yych != 'a') goto yy187;
5204yy478:
5205        YYDEBUG(478, *YYCURSOR);
5206        yych = *++YYCURSOR;
5207        if (yych == 'C') goto yy479;
5208        if (yych != 'c') goto yy187;
5209yy479:
5210        YYDEBUG(479, *YYCURSOR);
5211        yych = *++YYCURSOR;
5212        if (yych == 'E') goto yy480;
5213        if (yych != 'e') goto yy187;
5214yy480:
5215        YYDEBUG(480, *YYCURSOR);
5216        ++YYCURSOR;
5217        if (yybm[0+(yych = *YYCURSOR)] & 4) {
5218            goto yy186;
5219        }
5220        YYDEBUG(481, *YYCURSOR);
5221        yyleng = YYCURSOR - SCNG(yy_text);
5222#line 1274 "Zend/zend_language_scanner.l"
5223        {
5224    return T_NAMESPACE;
5225}
5226#line 5227 "Zend/zend_language_scanner.c"
5227yy482:
5228        YYDEBUG(482, *YYCURSOR);
5229        ++YYCURSOR;
5230        YYDEBUG(483, *YYCURSOR);
5231        yyleng = YYCURSOR - SCNG(yy_text);
5232#line 1206 "Zend/zend_language_scanner.l"
5233        {
5234    return T_PAAMAYIM_NEKUDOTAYIM;
5235}
5236#line 5237 "Zend/zend_language_scanner.c"
5237yy484:
5238        YYDEBUG(484, *YYCURSOR);
5239        ++YYCURSOR;
5240        YYFILL(1);
5241        yych = *YYCURSOR;
5242yy485:
5243        YYDEBUG(485, *YYCURSOR);
5244        if (yych <= '\f') {
5245            if (yych <= 0x08) goto yy141;
5246            if (yych <= '\n') goto yy484;
5247            goto yy141;
5248        } else {
5249            if (yych <= '\r') goto yy484;
5250            if (yych == ' ') goto yy484;
5251            goto yy141;
5252        }
5253yy486:
5254        YYDEBUG(486, *YYCURSOR);
5255        ++YYCURSOR;
5256        YYDEBUG(487, *YYCURSOR);
5257        yyleng = YYCURSOR - SCNG(yy_text);
5258#line 1382 "Zend/zend_language_scanner.l"
5259        {
5260    return T_MINUS_EQUAL;
5261}
5262#line 5263 "Zend/zend_language_scanner.c"
5263yy488:
5264        YYDEBUG(488, *YYCURSOR);
5265        ++YYCURSOR;
5266        YYDEBUG(489, *YYCURSOR);
5267        yyleng = YYCURSOR - SCNG(yy_text);
5268#line 1350 "Zend/zend_language_scanner.l"
5269        {
5270    return T_DEC;
5271}
5272#line 5273 "Zend/zend_language_scanner.c"
5273yy490:
5274        YYDEBUG(490, *YYCURSOR);
5275        ++YYCURSOR;
5276        YYDEBUG(491, *YYCURSOR);
5277        yyleng = YYCURSOR - SCNG(yy_text);
5278#line 1176 "Zend/zend_language_scanner.l"
5279        {
5280    yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
5281    return T_OBJECT_OPERATOR;
5282}
5283#line 5284 "Zend/zend_language_scanner.c"
5284yy492:
5285        YYDEBUG(492, *YYCURSOR);
5286        yych = *++YYCURSOR;
5287        if (yych <= 'O') {
5288            if (yych == 'I') goto yy499;
5289            if (yych <= 'N') goto yy187;
5290            goto yy500;
5291        } else {
5292            if (yych <= 'i') {
5293                if (yych <= 'h') goto yy187;
5294                goto yy499;
5295            } else {
5296                if (yych == 'o') goto yy500;
5297                goto yy187;
5298            }
5299        }
5300yy493:
5301        YYDEBUG(493, *YYCURSOR);
5302        yych = *++YYCURSOR;
5303        if (yych == 'B') goto yy494;
5304        if (yych != 'b') goto yy187;
5305yy494:
5306        YYDEBUG(494, *YYCURSOR);
5307        yych = *++YYCURSOR;
5308        if (yych == 'L') goto yy495;
5309        if (yych != 'l') goto yy187;
5310yy495:
5311        YYDEBUG(495, *YYCURSOR);
5312        yych = *++YYCURSOR;
5313        if (yych == 'I') goto yy496;
5314        if (yych != 'i') goto yy187;
5315yy496:
5316        YYDEBUG(496, *YYCURSOR);
5317        yych = *++YYCURSOR;
5318        if (yych == 'C') goto yy497;
5319        if (yych != 'c') goto yy187;
5320yy497:
5321        YYDEBUG(497, *YYCURSOR);
5322        ++YYCURSOR;
5323        if (yybm[0+(yych = *YYCURSOR)] & 4) {
5324            goto yy186;
5325        }
5326        YYDEBUG(498, *YYCURSOR);
5327        yyleng = YYCURSOR - SCNG(yy_text);
5328#line 1322 "Zend/zend_language_scanner.l"
5329        {
5330    return T_PUBLIC;
5331}
5332#line 5333 "Zend/zend_language_scanner.c"
5333yy499:
5334        YYDEBUG(499, *YYCURSOR);
5335        yych = *++YYCURSOR;
5336        if (yych <= 'V') {
5337            if (yych == 'N') goto yy508;
5338            if (yych <= 'U') goto yy187;
5339            goto yy509;
5340        } else {
5341            if (yych <= 'n') {
5342                if (yych <= 'm') goto yy187;
5343                goto yy508;
5344            } else {
5345                if (yych == 'v') goto yy509;
5346                goto yy187;
5347            }
5348        }
5349yy500:
5350        YYDEBUG(500, *YYCURSOR);
5351        yych = *++YYCURSOR;
5352        if (yych == 'T') goto yy501;
5353        if (yych != 't') goto yy187;
5354yy501:
5355        YYDEBUG(501, *YYCURSOR);
5356        yych = *++YYCURSOR;
5357        if (yych == 'E') goto yy502;
5358        if (yych != 'e') goto yy187;
5359yy502:
5360        YYDEBUG(502, *YYCURSOR);
5361        yych = *++YYCURSOR;
5362        if (yych == 'C') goto yy503;
5363        if (yych != 'c') goto yy187;
5364yy503:
5365        YYDEBUG(503, *YYCURSOR);
5366        yych = *++YYCURSOR;
5367        if (yych == 'T') goto yy504;
5368        if (yych != 't') goto yy187;
5369yy504:
5370        YYDEBUG(504, *YYCURSOR);
5371        yych = *++YYCURSOR;
5372        if (yych == 'E') goto yy505;
5373        if (yych != 'e') goto yy187;
5374yy505:
5375        YYDEBUG(505, *YYCURSOR);
5376        yych = *++YYCURSOR;
5377        if (yych == 'D') goto yy506;
5378        if (yych != 'd') goto yy187;
5379yy506:
5380        YYDEBUG(506, *YYCURSOR);
5381        ++YYCURSOR;
5382        if (yybm[0+(yych = *YYCURSOR)] & 4) {
5383            goto yy186;
5384        }
5385        YYDEBUG(507, *YYCURSOR);
5386        yyleng = YYCURSOR - SCNG(yy_text);
5387#line 1318 "Zend/zend_language_scanner.l"
5388        {
5389    return T_PROTECTED;
5390}
5391#line 5392 "Zend/zend_language_scanner.c"
5392yy508:
5393        YYDEBUG(508, *YYCURSOR);
5394        yych = *++YYCURSOR;
5395        if (yych == 'T') goto yy514;
5396        if (yych == 't') goto yy514;
5397        goto yy187;
5398yy509:
5399        YYDEBUG(509, *YYCURSOR);
5400        yych = *++YYCURSOR;
5401        if (yych == 'A') goto yy510;
5402        if (yych != 'a') goto yy187;
5403yy510:
5404        YYDEBUG(510, *YYCURSOR);
5405        yych = *++YYCURSOR;
5406        if (yych == 'T') goto yy511;
5407        if (yych != 't') goto yy187;
5408yy511:
5409        YYDEBUG(511, *YYCURSOR);
5410        yych = *++YYCURSOR;
5411        if (yych == 'E') goto yy512;
5412        if (yych != 'e') goto yy187;
5413yy512:
5414        YYDEBUG(512, *YYCURSOR);
5415        ++YYCURSOR;
5416        if (yybm[0+(yych = *YYCURSOR)] & 4) {
5417            goto yy186;
5418        }
5419        YYDEBUG(513, *YYCURSOR);
5420        yyleng = YYCURSOR - SCNG(yy_text);
5421#line 1314 "Zend/zend_language_scanner.l"
5422        {
5423    return T_PRIVATE;
5424}
5425#line 5426 "Zend/zend_language_scanner.c"
5426yy514:
5427        YYDEBUG(514, *YYCURSOR);
5428        ++YYCURSOR;
5429        if (yybm[0+(yych = *YYCURSOR)] & 4) {
5430            goto yy186;
5431        }
5432        YYDEBUG(515, *YYCURSOR);
5433        yyleng = YYCURSOR - SCNG(yy_text);
5434#line 1152 "Zend/zend_language_scanner.l"
5435        {
5436    return T_PRINT;
5437}
5438#line 5439 "Zend/zend_language_scanner.c"
5439yy516:
5440        YYDEBUG(516, *YYCURSOR);
5441        yych = *++YYCURSOR;
5442        if (yych == 'O') goto yy521;
5443        if (yych == 'o') goto yy521;
5444        goto yy187;
5445yy517:
5446        YYDEBUG(517, *YYCURSOR);
5447        yych = *++YYCURSOR;
5448        if (yych == 'T') goto yy518;
5449        if (yych != 't') goto yy187;
5450yy518:
5451        YYDEBUG(518, *YYCURSOR);
5452        yych = *++YYCURSOR;
5453        if (yych == 'O') goto yy519;
5454        if (yych != 'o') goto yy187;
5455yy519:
5456        YYDEBUG(519, *YYCURSOR);
5457        ++YYCURSOR;
5458        if (yybm[0+(yych = *YYCURSOR)] & 4) {
5459            goto yy186;
5460        }
5461        YYDEBUG(520, *YYCURSOR);
5462        yyleng = YYCURSOR - SCNG(yy_text);
5463#line 1144 "Zend/zend_language_scanner.l"
5464        {
5465    return T_GOTO;
5466}
5467#line 5468 "Zend/zend_language_scanner.c"
5468yy521:
5469        YYDEBUG(521, *YYCURSOR);
5470        yych = *++YYCURSOR;
5471        if (yych == 'B') goto yy522;
5472        if (yych != 'b') goto yy187;
5473yy522:
5474        YYDEBUG(522, *YYCURSOR);
5475        yych = *++YYCURSOR;
5476        if (yych == 'A') goto yy523;
5477        if (yych != 'a') goto yy187;
5478yy523:
5479        YYDEBUG(523, *YYCURSOR);
5480        yych = *++YYCURSOR;
5481        if (yych == 'L') goto yy524;
5482        if (yych != 'l') goto yy187;
5483yy524:
5484        YYDEBUG(524, *YYCURSOR);
5485        ++YYCURSOR;
5486        if (yybm[0+(yych = *YYCURSOR)] & 4) {
5487            goto yy186;
5488        }
5489        YYDEBUG(525, *YYCURSOR);
5490        yyleng = YYCURSOR - SCNG(yy_text);
5491#line 1286 "Zend/zend_language_scanner.l"
5492        {
5493    return T_GLOBAL;
5494}
5495#line 5496 "Zend/zend_language_scanner.c"
5496yy526:
5497        YYDEBUG(526, *YYCURSOR);
5498        yych = *++YYCURSOR;
5499        if (yych == '<') goto yy534;
5500        goto yy194;
5501yy527:
5502        YYDEBUG(527, *YYCURSOR);
5503        yych = *++YYCURSOR;
5504        goto yy181;
5505yy528:
5506        YYDEBUG(528, *YYCURSOR);
5507        yych = *++YYCURSOR;
5508        goto yy179;
5509yy529:
5510        YYDEBUG(529, *YYCURSOR);
5511        yych = *++YYCURSOR;
5512        if (yych == 'E') goto yy530;
5513        if (yych != 'e') goto yy187;
5514yy530:
5515        YYDEBUG(530, *YYCURSOR);
5516        yych = *++YYCURSOR;
5517        if (yych == 'A') goto yy531;
5518        if (yych != 'a') goto yy187;
5519yy531:
5520        YYDEBUG(531, *YYCURSOR);
5521        yych = *++YYCURSOR;
5522        if (yych == 'K') goto yy532;
5523        if (yych != 'k') goto yy187;
5524yy532:
5525        YYDEBUG(532, *YYCURSOR);
5526        ++YYCURSOR;
5527        if (yybm[0+(yych = *YYCURSOR)] & 4) {
5528            goto yy186;
5529        }
5530        YYDEBUG(533, *YYCURSOR);
5531        yyleng = YYCURSOR - SCNG(yy_text);
5532#line 1136 "Zend/zend_language_scanner.l"
5533        {
5534    return T_BREAK;
5535}
5536#line 5537 "Zend/zend_language_scanner.c"
5537yy534:
5538        YYDEBUG(534, *YYCURSOR);
5539        yych = *++YYCURSOR;
5540        if (yych == '<') goto yy270;
5541        goto yy194;
5542yy535:
5543        YYDEBUG(535, *YYCURSOR);
5544        yych = *++YYCURSOR;
5545        if (yych == 'A') goto yy542;
5546        if (yych == 'a') goto yy542;
5547        goto yy187;
5548yy536:
5549        YYDEBUG(536, *YYCURSOR);
5550        yych = *++YYCURSOR;
5551        if (yych == 'I') goto yy537;
5552        if (yych != 'i') goto yy187;
5553yy537:
5554        YYDEBUG(537, *YYCURSOR);
5555        yych = *++YYCURSOR;
5556        if (yych == 'T') goto yy538;
5557        if (yych != 't') goto yy187;
5558yy538:
5559        YYDEBUG(538, *YYCURSOR);
5560        yych = *++YYCURSOR;
5561        if (yych == 'C') goto yy539;
5562        if (yych != 'c') goto yy187;
5563yy539:
5564        YYDEBUG(539, *YYCURSOR);
5565        yych = *++YYCURSOR;
5566        if (yych == 'H') goto yy540;
5567        if (yych != 'h') goto yy187;
5568yy540:
5569        YYDEBUG(540, *YYCURSOR);
5570        ++YYCURSOR;
5571        if (yybm[0+(yych = *YYCURSOR)] & 4) {
5572            goto yy186;
5573        }
5574        YYDEBUG(541, *YYCURSOR);
5575        yyleng = YYCURSOR - SCNG(yy_text);
5576#line 1120 "Zend/zend_language_scanner.l"
5577        {
5578    return T_SWITCH;
5579}
5580#line 5581 "Zend/zend_language_scanner.c"
5581yy542:
5582        YYDEBUG(542, *YYCURSOR);
5583        yych = *++YYCURSOR;
5584        if (yych == 'T') goto yy543;
5585        if (yych != 't') goto yy187;
5586yy543:
5587        YYDEBUG(543, *YYCURSOR);
5588        yych = *++YYCURSOR;
5589        if (yych == 'I') goto yy544;
5590        if (yych != 'i') goto yy187;
5591yy544:
5592        YYDEBUG(544, *YYCURSOR);
5593        yych = *++YYCURSOR;
5594        if (yych == 'C') goto yy545;
5595        if (yych != 'c') goto yy187;
5596yy545:
5597        YYDEBUG(545, *YYCURSOR);
5598        ++YYCURSOR;
5599        if (yybm[0+(yych = *YYCURSOR)] & 4) {
5600            goto yy186;
5601        }
5602        YYDEBUG(546, *YYCURSOR);
5603        yyleng = YYCURSOR - SCNG(yy_text);
5604#line 1302 "Zend/zend_language_scanner.l"
5605        {
5606    return T_STATIC;
5607}
5608#line 5609 "Zend/zend_language_scanner.c"
5609yy547:
5610        YYDEBUG(547, *YYCURSOR);
5611        yych = *++YYCURSOR;
5612        if (yych == 'S') goto yy558;
5613        if (yych == 's') goto yy558;
5614        goto yy187;
5615yy548:
5616        YYDEBUG(548, *YYCURSOR);
5617        yych = *++YYCURSOR;
5618        if (yych == 'D') goto yy556;
5619        if (yych == 'd') goto yy556;
5620        goto yy187;
5621yy549:
5622        YYDEBUG(549, *YYCURSOR);
5623        yych = *++YYCURSOR;
5624        if (yych == 'R') goto yy552;
5625        if (yych == 'r') goto yy552;
5626        goto yy187;
5627yy550:
5628        YYDEBUG(550, *YYCURSOR);
5629        ++YYCURSOR;
5630        if (yybm[0+(yych = *YYCURSOR)] & 4) {
5631            goto yy186;
5632        }
5633        YYDEBUG(551, *YYCURSOR);
5634        yyleng = YYCURSOR - SCNG(yy_text);
5635#line 1116 "Zend/zend_language_scanner.l"
5636        {
5637    return T_AS;
5638}
5639#line 5640 "Zend/zend_language_scanner.c"
5640yy552:
5641        YYDEBUG(552, *YYCURSOR);
5642        yych = *++YYCURSOR;
5643        if (yych == 'A') goto yy553;
5644        if (yych != 'a') goto yy187;
5645yy553:
5646        YYDEBUG(553, *YYCURSOR);
5647        yych = *++YYCURSOR;
5648        if (yych == 'Y') goto yy554;
5649        if (yych != 'y') goto yy187;
5650yy554:
5651        YYDEBUG(554, *YYCURSOR);
5652        ++YYCURSOR;
5653        if (yybm[0+(yych = *YYCURSOR)] & 4) {
5654            goto yy186;
5655        }
5656        YYDEBUG(555, *YYCURSOR);
5657        yyleng = YYCURSOR - SCNG(yy_text);
5658#line 1338 "Zend/zend_language_scanner.l"
5659        {
5660    return T_ARRAY;
5661}
5662#line 5663 "Zend/zend_language_scanner.c"
5663yy556:
5664        YYDEBUG(556, *YYCURSOR);
5665        ++YYCURSOR;
5666        if (yybm[0+(yych = *YYCURSOR)] & 4) {
5667            goto yy186;
5668        }
5669        YYDEBUG(557, *YYCURSOR);
5670        yyleng = YYCURSOR - SCNG(yy_text);
5671#line 1434 "Zend/zend_language_scanner.l"
5672        {
5673    return T_LOGICAL_AND;
5674}
5675#line 5676 "Zend/zend_language_scanner.c"
5676yy558:
5677        YYDEBUG(558, *YYCURSOR);
5678        yych = *++YYCURSOR;
5679        if (yych == 'T') goto yy559;
5680        if (yych != 't') goto yy187;
5681yy559:
5682        YYDEBUG(559, *YYCURSOR);
5683        yych = *++YYCURSOR;
5684        if (yych == 'R') goto yy560;
5685        if (yych != 'r') goto yy187;
5686yy560:
5687        YYDEBUG(560, *YYCURSOR);
5688        yych = *++YYCURSOR;
5689        if (yych == 'A') goto yy561;
5690        if (yych != 'a') goto yy187;
5691yy561:
5692        YYDEBUG(561, *YYCURSOR);
5693        yych = *++YYCURSOR;
5694        if (yych == 'C') goto yy562;
5695        if (yych != 'c') goto yy187;
5696yy562:
5697        YYDEBUG(562, *YYCURSOR);
5698        yych = *++YYCURSOR;
5699        if (yych == 'T') goto yy563;
5700        if (yych != 't') goto yy187;
5701yy563:
5702        YYDEBUG(563, *YYCURSOR);
5703        ++YYCURSOR;
5704        if (yybm[0+(yych = *YYCURSOR)] & 4) {
5705            goto yy186;
5706        }
5707        YYDEBUG(564, *YYCURSOR);
5708        yyleng = YYCURSOR - SCNG(yy_text);
5709#line 1306 "Zend/zend_language_scanner.l"
5710        {
5711    return T_ABSTRACT;
5712}
5713#line 5714 "Zend/zend_language_scanner.c"
5714yy565:
5715        YYDEBUG(565, *YYCURSOR);
5716        yych = *++YYCURSOR;
5717        if (yych == 'I') goto yy566;
5718        if (yych != 'i') goto yy187;
5719yy566:
5720        YYDEBUG(566, *YYCURSOR);
5721        yych = *++YYCURSOR;
5722        if (yych == 'L') goto yy567;
5723        if (yych != 'l') goto yy187;
5724yy567:
5725        YYDEBUG(567, *YYCURSOR);
5726        yych = *++YYCURSOR;
5727        if (yych == 'E') goto yy568;
5728        if (yych != 'e') goto yy187;
5729yy568:
5730        YYDEBUG(568, *YYCURSOR);
5731        ++YYCURSOR;
5732        if (yybm[0+(yych = *YYCURSOR)] & 4) {
5733            goto yy186;
5734        }
5735        YYDEBUG(569, *YYCURSOR);
5736        yyleng = YYCURSOR - SCNG(yy_text);
5737#line 1076 "Zend/zend_language_scanner.l"
5738        {
5739    return T_WHILE;
5740}
5741#line 5742 "Zend/zend_language_scanner.c"
5742yy570:
5743        YYDEBUG(570, *YYCURSOR);
5744        ++YYCURSOR;
5745        if (yybm[0+(yych = *YYCURSOR)] & 4) {
5746            goto yy186;
5747        }
5748        YYDEBUG(571, *YYCURSOR);
5749        yyleng = YYCURSOR - SCNG(yy_text);
5750#line 1060 "Zend/zend_language_scanner.l"
5751        {
5752    return T_IF;
5753}
5754#line 5755 "Zend/zend_language_scanner.c"
5755yy572:
5756        YYDEBUG(572, *YYCURSOR);
5757        yych = *++YYCURSOR;
5758        if (yych == 'P') goto yy614;
5759        if (yych == 'p') goto yy614;
5760        goto yy187;
5761yy573:
5762        YYDEBUG(573, *YYCURSOR);
5763        yych = *++YYCURSOR;
5764        if (yych <= 'T') {
5765            if (yych <= 'C') {
5766                if (yych <= 'B') goto yy187;
5767                goto yy581;
5768            } else {
5769                if (yych <= 'R') goto yy187;
5770                if (yych <= 'S') goto yy579;
5771                goto yy580;
5772            }
5773        } else {
5774            if (yych <= 'r') {
5775                if (yych == 'c') goto yy581;
5776                goto yy187;
5777            } else {
5778                if (yych <= 's') goto yy579;
5779                if (yych <= 't') goto yy580;
5780                goto yy187;
5781            }
5782        }
5783yy574:
5784        YYDEBUG(574, *YYCURSOR);
5785        yych = *++YYCURSOR;
5786        if (yych == 'S') goto yy575;
5787        if (yych != 's') goto yy187;
5788yy575:
5789        YYDEBUG(575, *YYCURSOR);
5790        yych = *++YYCURSOR;
5791        if (yych == 'E') goto yy576;
5792        if (yych != 'e') goto yy187;
5793yy576:
5794        YYDEBUG(576, *YYCURSOR);
5795        yych = *++YYCURSOR;
5796        if (yych == 'T') goto yy577;
5797        if (yych != 't') goto yy187;
5798yy577:
5799        YYDEBUG(577, *YYCURSOR);
5800        ++YYCURSOR;
5801        if (yybm[0+(yych = *YYCURSOR)] & 4) {
5802            goto yy186;
5803        }
5804        YYDEBUG(578, *YYCURSOR);
5805        yyleng = YYCURSOR - SCNG(yy_text);
5806#line 1290 "Zend/zend_language_scanner.l"
5807        {
5808    return T_ISSET;
5809}
5810#line 5811 "Zend/zend_language_scanner.c"
5811yy579:
5812        YYDEBUG(579, *YYCURSOR);
5813        yych = *++YYCURSOR;
5814        if (yych == 'T') goto yy600;
5815        if (yych == 't') goto yy600;
5816        goto yy187;
5817yy580:
5818        YYDEBUG(580, *YYCURSOR);
5819        yych = *++YYCURSOR;
5820        if (yych == 'E') goto yy593;
5821        if (yych == 'e') goto yy593;
5822        goto yy187;
5823yy581:
5824        YYDEBUG(581, *YYCURSOR);
5825        yych = *++YYCURSOR;
5826        if (yych == 'L') goto yy582;
5827        if (yych != 'l') goto yy187;
5828yy582:
5829        YYDEBUG(582, *YYCURSOR);
5830        yych = *++YYCURSOR;
5831        if (yych == 'U') goto yy583;
5832        if (yych != 'u') goto yy187;
5833yy583:
5834        YYDEBUG(583, *YYCURSOR);
5835        yych = *++YYCURSOR;
5836        if (yych == 'D') goto yy584;
5837        if (yych != 'd') goto yy187;
5838yy584:
5839        YYDEBUG(584, *YYCURSOR);
5840        yych = *++YYCURSOR;
5841        if (yych == 'E') goto yy585;
5842        if (yych != 'e') goto yy187;
5843yy585:
5844        YYDEBUG(585, *YYCURSOR);
5845        ++YYCURSOR;
5846        if ((yych = *YYCURSOR) <= '^') {
5847            if (yych <= '9') {
5848                if (yych >= '0') goto yy186;
5849            } else {
5850                if (yych <= '@') goto yy586;
5851                if (yych <= 'Z') goto yy186;
5852            }
5853        } else {
5854            if (yych <= '`') {
5855                if (yych <= '_') goto yy587;
5856            } else {
5857                if (yych <= 'z') goto yy186;
5858                if (yych >= 0x7F) goto yy186;
5859            }
5860        }
5861yy586:
5862        YYDEBUG(586, *YYCURSOR);
5863        yyleng = YYCURSOR - SCNG(yy_text);
5864#line 1258 "Zend/zend_language_scanner.l"
5865        {
5866    return T_INCLUDE;
5867}
5868#line 5869 "Zend/zend_language_scanner.c"
5869yy587:
5870        YYDEBUG(587, *YYCURSOR);
5871        yych = *++YYCURSOR;
5872        if (yych == 'O') goto yy588;
5873        if (yych != 'o') goto yy187;
5874yy588:
5875        YYDEBUG(588, *YYCURSOR);
5876        yych = *++YYCURSOR;
5877        if (yych == 'N') goto yy589;
5878        if (yych != 'n') goto yy187;
5879yy589:
5880        YYDEBUG(589, *YYCURSOR);
5881        yych = *++YYCURSOR;
5882        if (yych == 'C') goto yy590;
5883        if (yych != 'c') goto yy187;
5884yy590:
5885        YYDEBUG(590, *YYCURSOR);
5886        yych = *++YYCURSOR;
5887        if (yych == 'E') goto yy591;
5888        if (yych != 'e') goto yy187;
5889yy591:
5890        YYDEBUG(591, *YYCURSOR);
5891        ++YYCURSOR;
5892        if (yybm[0+(yych = *YYCURSOR)] & 4) {
5893            goto yy186;
5894        }
5895        YYDEBUG(592, *YYCURSOR);
5896        yyleng = YYCURSOR - SCNG(yy_text);
5897#line 1262 "Zend/zend_language_scanner.l"
5898        {
5899    return T_INCLUDE_ONCE;
5900}
5901#line 5902 "Zend/zend_language_scanner.c"
5902yy593:
5903        YYDEBUG(593, *YYCURSOR);
5904        yych = *++YYCURSOR;
5905        if (yych == 'R') goto yy594;
5906        if (yych != 'r') goto yy187;
5907yy594:
5908        YYDEBUG(594, *YYCURSOR);
5909        yych = *++YYCURSOR;
5910        if (yych == 'F') goto yy595;
5911        if (yych != 'f') goto yy187;
5912yy595:
5913        YYDEBUG(595, *YYCURSOR);
5914        yych = *++YYCURSOR;
5915        if (yych == 'A') goto yy596;
5916        if (yych != 'a') goto yy187;
5917yy596:
5918        YYDEBUG(596, *YYCURSOR);
5919        yych = *++YYCURSOR;
5920        if (yych == 'C') goto yy597;
5921        if (yych != 'c') goto yy187;
5922yy597:
5923        YYDEBUG(597, *YYCURSOR);
5924        yych = *++YYCURSOR;
5925        if (yych == 'E') goto yy598;
5926        if (yych != 'e') goto yy187;
5927yy598:
5928        YYDEBUG(598, *YYCURSOR);
5929        ++YYCURSOR;
5930        if (yybm[0+(yych = *YYCURSOR)] & 4) {
5931            goto yy186;
5932        }
5933        YYDEBUG(599, *YYCURSOR);
5934        yyleng = YYCURSOR - SCNG(yy_text);
5935#line 1160 "Zend/zend_language_scanner.l"
5936        {
5937    return T_INTERFACE;
5938}
5939#line 5940 "Zend/zend_language_scanner.c"
5940yy600:
5941        YYDEBUG(600, *YYCURSOR);
5942        yych = *++YYCURSOR;
5943        if (yych <= 'E') {
5944            if (yych == 'A') goto yy601;
5945            if (yych <= 'D') goto yy187;
5946            goto yy602;
5947        } else {
5948            if (yych <= 'a') {
5949                if (yych <= '`') goto yy187;
5950            } else {
5951                if (yych == 'e') goto yy602;
5952                goto yy187;
5953            }
5954        }
5955yy601:
5956        YYDEBUG(601, *YYCURSOR);
5957        yych = *++YYCURSOR;
5958        if (yych == 'N') goto yy608;
5959        if (yych == 'n') goto yy608;
5960        goto yy187;
5961yy602:
5962        YYDEBUG(602, *YYCURSOR);
5963        yych = *++YYCURSOR;
5964        if (yych == 'A') goto yy603;
5965        if (yych != 'a') goto yy187;
5966yy603:
5967        YYDEBUG(603, *YYCURSOR);
5968        yych = *++YYCURSOR;
5969        if (yych == 'D') goto yy604;
5970        if (yych != 'd') goto yy187;
5971yy604:
5972        YYDEBUG(604, *YYCURSOR);
5973        yych = *++YYCURSOR;
5974        if (yych == 'O') goto yy605;
5975        if (yych != 'o') goto yy187;
5976yy605:
5977        YYDEBUG(605, *YYCURSOR);
5978        yych = *++YYCURSOR;
5979        if (yych == 'F') goto yy606;
5980        if (yych != 'f') goto yy187;
5981yy606:
5982        YYDEBUG(606, *YYCURSOR);
5983        ++YYCURSOR;
5984        if (yybm[0+(yych = *YYCURSOR)] & 4) {
5985            goto yy186;
5986        }
5987        YYDEBUG(607, *YYCURSOR);
5988        yyleng = YYCURSOR - SCNG(yy_text);
5989#line 1282 "Zend/zend_language_scanner.l"
5990        {
5991        return T_INSTEADOF;
5992}
5993#line 5994 "Zend/zend_language_scanner.c"
5994yy608:
5995        YYDEBUG(608, *YYCURSOR);
5996        yych = *++YYCURSOR;
5997        if (yych == 'C') goto yy609;
5998        if (yych != 'c') goto yy187;
5999yy609:
6000        YYDEBUG(609, *YYCURSOR);
6001        yych = *++YYCURSOR;
6002        if (yych == 'E') goto yy610;
6003        if (yych != 'e') goto yy187;
6004yy610:
6005        YYDEBUG(610, *YYCURSOR);
6006        yych = *++YYCURSOR;
6007        if (yych == 'O') goto yy611;
6008        if (yych != 'o') goto yy187;
6009yy611:
6010        YYDEBUG(611, *YYCURSOR);
6011        yych = *++YYCURSOR;
6012        if (yych == 'F') goto yy612;
6013        if (yych != 'f') goto yy187;
6014yy612:
6015        YYDEBUG(612, *YYCURSOR);
6016        ++YYCURSOR;
6017        if (yybm[0+(yych = *YYCURSOR)] & 4) {
6018            goto yy186;
6019        }
6020        YYDEBUG(613, *YYCURSOR);
6021        yyleng = YYCURSOR - SCNG(yy_text);
6022#line 1112 "Zend/zend_language_scanner.l"
6023        {
6024    return T_INSTANCEOF;
6025}
6026#line 6027 "Zend/zend_language_scanner.c"
6027yy614:
6028        YYDEBUG(614, *YYCURSOR);
6029        yych = *++YYCURSOR;
6030        if (yych == 'L') goto yy615;
6031        if (yych != 'l') goto yy187;
6032yy615:
6033        YYDEBUG(615, *YYCURSOR);
6034        yych = *++YYCURSOR;
6035        if (yych == 'E') goto yy616;
6036        if (yych != 'e') goto yy187;
6037yy616:
6038        YYDEBUG(616, *YYCURSOR);
6039        yych = *++YYCURSOR;
6040        if (yych == 'M') goto yy617;
6041        if (yych != 'm') goto yy187;
6042yy617:
6043        YYDEBUG(617, *YYCURSOR);
6044        yych = *++YYCURSOR;
6045        if (yych == 'E') goto yy618;
6046        if (yych != 'e') goto yy187;
6047yy618:
6048        YYDEBUG(618, *YYCURSOR);
6049        yych = *++YYCURSOR;
6050        if (yych == 'N') goto yy619;
6051        if (yych != 'n') goto yy187;
6052yy619:
6053        YYDEBUG(619, *YYCURSOR);
6054        yych = *++YYCURSOR;
6055        if (yych == 'T') goto yy620;
6056        if (yych != 't') goto yy187;
6057yy620:
6058        YYDEBUG(620, *YYCURSOR);
6059        yych = *++YYCURSOR;
6060        if (yych == 'S') goto yy621;
6061        if (yych != 's') goto yy187;
6062yy621:
6063        YYDEBUG(621, *YYCURSOR);
6064        ++YYCURSOR;
6065        if (yybm[0+(yych = *YYCURSOR)] & 4) {
6066            goto yy186;
6067        }
6068        YYDEBUG(622, *YYCURSOR);
6069        yyleng = YYCURSOR - SCNG(yy_text);
6070#line 1172 "Zend/zend_language_scanner.l"
6071        {
6072    return T_IMPLEMENTS;
6073}
6074#line 6075 "Zend/zend_language_scanner.c"
6075yy623:
6076        YYDEBUG(623, *YYCURSOR);
6077        yych = *++YYCURSOR;
6078        if (yych == 'R') goto yy631;
6079        if (yych == 'r') goto yy631;
6080        goto yy187;
6081yy624:
6082        YYDEBUG(624, *YYCURSOR);
6083        yych = *++YYCURSOR;
6084        if (yych <= 'Y') {
6085            if (yych == 'A') goto yy627;
6086            if (yych <= 'X') goto yy187;
6087        } else {
6088            if (yych <= 'a') {
6089                if (yych <= '`') goto yy187;
6090                goto yy627;
6091            } else {
6092                if (yych != 'y') goto yy187;
6093            }
6094        }
6095        YYDEBUG(625, *YYCURSOR);
6096        ++YYCURSOR;
6097        if (yybm[0+(yych = *YYCURSOR)] & 4) {
6098            goto yy186;
6099        }
6100        YYDEBUG(626, *YYCURSOR);
6101        yyleng = YYCURSOR - SCNG(yy_text);
6102#line 1044 "Zend/zend_language_scanner.l"
6103        {
6104    return T_TRY;
6105}
6106#line 6107 "Zend/zend_language_scanner.c"
6107yy627:
6108        YYDEBUG(627, *YYCURSOR);
6109        yych = *++YYCURSOR;
6110        if (yych == 'I') goto yy628;
6111        if (yych != 'i') goto yy187;
6112yy628:
6113        YYDEBUG(628, *YYCURSOR);
6114        yych = *++YYCURSOR;
6115        if (yych == 'T') goto yy629;
6116        if (yych != 't') goto yy187;
6117yy629:
6118        YYDEBUG(629, *YYCURSOR);
6119        ++YYCURSOR;
6120        if (yybm[0+(yych = *YYCURSOR)] & 4) {
6121            goto yy186;
6122        }
6123        YYDEBUG(630, *YYCURSOR);
6124        yyleng = YYCURSOR - SCNG(yy_text);
6125#line 1164 "Zend/zend_language_scanner.l"
6126        {
6127    return T_TRAIT;
6128}
6129#line 6130 "Zend/zend_language_scanner.c"
6130yy631:
6131        YYDEBUG(631, *YYCURSOR);
6132        yych = *++YYCURSOR;
6133        if (yych == 'O') goto yy632;
6134        if (yych != 'o') goto yy187;
6135yy632:
6136        YYDEBUG(632, *YYCURSOR);
6137        yych = *++YYCURSOR;
6138        if (yych == 'W') goto yy633;
6139        if (yych != 'w') goto yy187;
6140yy633:
6141        YYDEBUG(633, *YYCURSOR);
6142        ++YYCURSOR;
6143        if (yybm[0+(yych = *YYCURSOR)] & 4) {
6144            goto yy186;
6145        }
6146        YYDEBUG(634, *YYCURSOR);
6147        yyleng = YYCURSOR - SCNG(yy_text);
6148#line 1056 "Zend/zend_language_scanner.l"
6149        {
6150    return T_THROW;
6151}
6152#line 6153 "Zend/zend_language_scanner.c"
6153yy635:
6154        YYDEBUG(635, *YYCURSOR);
6155        yych = *++YYCURSOR;
6156        if (yych == 'E') goto yy636;
6157        if (yych != 'e') goto yy187;
6158yy636:
6159        YYDEBUG(636, *YYCURSOR);
6160        yych = *++YYCURSOR;
6161        if (yych == 'L') goto yy637;
6162        if (yych != 'l') goto yy187;
6163yy637:
6164        YYDEBUG(637, *YYCURSOR);
6165        yych = *++YYCURSOR;
6166        if (yych == 'D') goto yy638;
6167        if (yych != 'd') goto yy187;
6168yy638:
6169        YYDEBUG(638, *YYCURSOR);
6170        ++YYCURSOR;
6171        if (yybm[0+(yych = *YYCURSOR)] & 4) {
6172            goto yy186;
6173        }
6174        YYDEBUG(639, *YYCURSOR);
6175        yyleng = YYCURSOR - SCNG(yy_text);
6176#line 1040 "Zend/zend_language_scanner.l"
6177        {
6178    return T_YIELD;
6179}
6180#line 6181 "Zend/zend_language_scanner.c"
6181yy640:
6182        YYDEBUG(640, *YYCURSOR);
6183        yych = *++YYCURSOR;
6184        if (yych <= 'T') {
6185            if (yych == 'Q') goto yy642;
6186            if (yych <= 'S') goto yy187;
6187        } else {
6188            if (yych <= 'q') {
6189                if (yych <= 'p') goto yy187;
6190                goto yy642;
6191            } else {
6192                if (yych != 't') goto yy187;
6193            }
6194        }
6195        YYDEBUG(641, *YYCURSOR);
6196        yych = *++YYCURSOR;
6197        if (yych == 'U') goto yy654;
6198        if (yych == 'u') goto yy654;
6199        goto yy187;
6200yy642:
6201        YYDEBUG(642, *YYCURSOR);
6202        yych = *++YYCURSOR;
6203        if (yych == 'U') goto yy643;
6204        if (yych != 'u') goto yy187;
6205yy643:
6206        YYDEBUG(643, *YYCURSOR);
6207        yych = *++YYCURSOR;
6208        if (yych == 'I') goto yy644;
6209        if (yych != 'i') goto yy187;
6210yy644:
6211        YYDEBUG(644, *YYCURSOR);
6212        yych = *++YYCURSOR;
6213        if (yych == 'R') goto yy645;
6214        if (yych != 'r') goto yy187;
6215yy645:
6216        YYDEBUG(645, *YYCURSOR);
6217        yych = *++YYCURSOR;
6218        if (yych == 'E') goto yy646;
6219        if (yych != 'e') goto yy187;
6220yy646:
6221        YYDEBUG(646, *YYCURSOR);
6222        ++YYCURSOR;
6223        if ((yych = *YYCURSOR) <= '^') {
6224            if (yych <= '9') {
6225                if (yych >= '0') goto yy186;
6226            } else {
6227                if (yych <= '@') goto yy647;
6228                if (yych <= 'Z') goto yy186;
6229            }
6230        } else {
6231            if (yych <= '`') {
6232                if (yych <= '_') goto yy648;
6233            } else {
6234                if (yych <= 'z') goto yy186;
6235                if (yych >= 0x7F) goto yy186;
6236            }
6237        }
6238yy647:
6239        YYDEBUG(647, *YYCURSOR);
6240        yyleng = YYCURSOR - SCNG(yy_text);
6241#line 1266 "Zend/zend_language_scanner.l"
6242        {
6243    return T_REQUIRE;
6244}
6245#line 6246 "Zend/zend_language_scanner.c"
6246yy648:
6247        YYDEBUG(648, *YYCURSOR);
6248        yych = *++YYCURSOR;
6249        if (yych == 'O') goto yy649;
6250        if (yych != 'o') goto yy187;
6251yy649:
6252        YYDEBUG(649, *YYCURSOR);
6253        yych = *++YYCURSOR;
6254        if (yych == 'N') goto yy650;
6255        if (yych != 'n') goto yy187;
6256yy650:
6257        YYDEBUG(650, *YYCURSOR);
6258        yych = *++YYCURSOR;
6259        if (yych == 'C') goto yy651;
6260        if (yych != 'c') goto yy187;
6261yy651:
6262        YYDEBUG(651, *YYCURSOR);
6263        yych = *++YYCURSOR;
6264        if (yych == 'E') goto yy652;
6265        if (yych != 'e') goto yy187;
6266yy652:
6267        YYDEBUG(652, *YYCURSOR);
6268        ++YYCURSOR;
6269        if (yybm[0+(yych = *YYCURSOR)] & 4) {
6270            goto yy186;
6271        }
6272        YYDEBUG(653, *YYCURSOR);
6273        yyleng = YYCURSOR - SCNG(yy_text);
6274#line 1270 "Zend/zend_language_scanner.l"
6275        {
6276    return T_REQUIRE_ONCE;
6277}
6278#line 6279 "Zend/zend_language_scanner.c"
6279yy654:
6280        YYDEBUG(654, *YYCURSOR);
6281        yych = *++YYCURSOR;
6282        if (yych == 'R') goto yy655;
6283        if (yych != 'r') goto yy187;
6284yy655:
6285        YYDEBUG(655, *YYCURSOR);
6286        yych = *++YYCURSOR;
6287        if (yych == 'N') goto yy656;
6288        if (yych != 'n') goto yy187;
6289yy656:
6290        YYDEBUG(656, *YYCURSOR);
6291        ++YYCURSOR;
6292        if (yybm[0+(yych = *YYCURSOR)] & 4) {
6293            goto yy186;
6294        }
6295        YYDEBUG(657, *YYCURSOR);
6296        yyleng = YYCURSOR - SCNG(yy_text);
6297#line 1036 "Zend/zend_language_scanner.l"
6298        {
6299    return T_RETURN;
6300}
6301#line 6302 "Zend/zend_language_scanner.c"
6302yy658:
6303        YYDEBUG(658, *YYCURSOR);
6304        yych = *++YYCURSOR;
6305        if (yych <= 'T') {
6306            if (yych <= 'L') {
6307                if (yych <= 'K') goto yy187;
6308                goto yy681;
6309            } else {
6310                if (yych <= 'R') goto yy187;
6311                if (yych <= 'S') goto yy680;
6312                goto yy679;
6313            }
6314        } else {
6315            if (yych <= 'r') {
6316                if (yych == 'l') goto yy681;
6317                goto yy187;
6318            } else {
6319                if (yych <= 's') goto yy680;
6320                if (yych <= 't') goto yy679;
6321                goto yy187;
6322            }
6323        }
6324yy659:
6325        YYDEBUG(659, *YYCURSOR);
6326        yych = *++YYCURSOR;
6327        if (yych <= 'O') {
6328            if (yych == 'A') goto yy671;
6329            if (yych <= 'N') goto yy187;
6330            goto yy672;
6331        } else {
6332            if (yych <= 'a') {
6333                if (yych <= '`') goto yy187;
6334                goto yy671;
6335            } else {
6336                if (yych == 'o') goto yy672;
6337                goto yy187;
6338            }
6339        }
6340yy660:
6341        YYDEBUG(660, *YYCURSOR);
6342        yych = *++YYCURSOR;
6343        if (yych == 'N') goto yy661;
6344        if (yych != 'n') goto yy187;
6345yy661:
6346        YYDEBUG(661, *YYCURSOR);
6347        yych = *++YYCURSOR;
6348        if (yych <= 'T') {
6349            if (yych <= 'R') goto yy187;
6350            if (yych >= 'T') goto yy663;
6351        } else {
6352            if (yych <= 'r') goto yy187;
6353            if (yych <= 's') goto yy662;
6354            if (yych <= 't') goto yy663;
6355            goto yy187;
6356        }
6357yy662:
6358        YYDEBUG(662, *YYCURSOR);
6359        yych = *++YYCURSOR;
6360        if (yych == 'T') goto yy669;
6361        if (yych == 't') goto yy669;
6362        goto yy187;
6363yy663:
6364        YYDEBUG(663, *YYCURSOR);
6365        yych = *++YYCURSOR;
6366        if (yych == 'I') goto yy664;
6367        if (yych != 'i') goto yy187;
6368yy664:
6369        YYDEBUG(664, *YYCURSOR);
6370        yych = *++YYCURSOR;
6371        if (yych == 'N') goto yy665;
6372        if (yych != 'n') goto yy187;
6373yy665:
6374        YYDEBUG(665, *YYCURSOR);
6375        yych = *++YYCURSOR;
6376        if (yych == 'U') goto yy666;
6377        if (yych != 'u') goto yy187;
6378yy666:
6379        YYDEBUG(666, *YYCURSOR);
6380        yych = *++YYCURSOR;
6381        if (yych == 'E') goto yy667;
6382        if (yych != 'e') goto yy187;
6383yy667:
6384        YYDEBUG(667, *YYCURSOR);
6385        ++YYCURSOR;
6386        if (yybm[0+(yych = *YYCURSOR)] & 4) {
6387            goto yy186;
6388        }
6389        YYDEBUG(668, *YYCURSOR);
6390        yyleng = YYCURSOR - SCNG(yy_text);
6391#line 1140 "Zend/zend_language_scanner.l"
6392        {
6393    return T_CONTINUE;
6394}
6395#line 6396 "Zend/zend_language_scanner.c"
6396yy669:
6397        YYDEBUG(669, *YYCURSOR);
6398        ++YYCURSOR;
6399        if (yybm[0+(yych = *YYCURSOR)] & 4) {
6400            goto yy186;
6401        }
6402        YYDEBUG(670, *YYCURSOR);
6403        yyleng = YYCURSOR - SCNG(yy_text);
6404#line 1032 "Zend/zend_language_scanner.l"
6405        {
6406    return T_CONST;
6407}
6408#line 6409 "Zend/zend_language_scanner.c"
6409yy671:
6410        YYDEBUG(671, *YYCURSOR);
6411        yych = *++YYCURSOR;
6412        if (yych == 'S') goto yy676;
6413        if (yych == 's') goto yy676;
6414        goto yy187;
6415yy672:
6416        YYDEBUG(672, *YYCURSOR);
6417        yych = *++YYCURSOR;
6418        if (yych == 'N') goto yy673;
6419        if (yych != 'n') goto yy187;
6420yy673:
6421        YYDEBUG(673, *YYCURSOR);
6422        yych = *++YYCURSOR;
6423        if (yych == 'E') goto yy674;
6424        if (yych != 'e') goto yy187;
6425yy674:
6426        YYDEBUG(674, *YYCURSOR);
6427        ++YYCURSOR;
6428        if (yybm[0+(yych = *YYCURSOR)] & 4) {
6429            goto yy186;
6430        }
6431        YYDEBUG(675, *YYCURSOR);
6432        yyleng = YYCURSOR - SCNG(yy_text);
6433#line 1218 "Zend/zend_language_scanner.l"
6434        {
6435    return T_CLONE;
6436}
6437#line 6438 "Zend/zend_language_scanner.c"
6438yy676:
6439        YYDEBUG(676, *YYCURSOR);
6440        yych = *++YYCURSOR;
6441        if (yych == 'S') goto yy677;
6442        if (yych != 's') goto yy187;
6443yy677:
6444        YYDEBUG(677, *YYCURSOR);
6445        ++YYCURSOR;
6446        if (yybm[0+(yych = *YYCURSOR)] & 4) {
6447            goto yy186;
6448        }
6449        YYDEBUG(678, *YYCURSOR);
6450        yyleng = YYCURSOR - SCNG(yy_text);
6451#line 1156 "Zend/zend_language_scanner.l"
6452        {
6453    return T_CLASS;
6454}
6455#line 6456 "Zend/zend_language_scanner.c"
6456yy679:
6457        YYDEBUG(679, *YYCURSOR);
6458        yych = *++YYCURSOR;
6459        if (yych == 'C') goto yy690;
6460        if (yych == 'c') goto yy690;
6461        goto yy187;
6462yy680:
6463        YYDEBUG(680, *YYCURSOR);
6464        yych = *++YYCURSOR;
6465        if (yych == 'E') goto yy688;
6466        if (yych == 'e') goto yy688;
6467        goto yy187;
6468yy681:
6469        YYDEBUG(681, *YYCURSOR);
6470        yych = *++YYCURSOR;
6471        if (yych == 'L') goto yy682;
6472        if (yych != 'l') goto yy187;
6473yy682:
6474        YYDEBUG(682, *YYCURSOR);
6475        yych = *++YYCURSOR;
6476        if (yych == 'A') goto yy683;
6477        if (yych != 'a') goto yy187;
6478yy683:
6479        YYDEBUG(683, *YYCURSOR);
6480        yych = *++YYCURSOR;
6481        if (yych == 'B') goto yy684;
6482        if (yych != 'b') goto yy187;
6483yy684:
6484        YYDEBUG(684, *YYCURSOR);
6485        yych = *++YYCURSOR;
6486        if (yych == 'L') goto yy685;
6487        if (yych != 'l') goto yy187;
6488yy685:
6489        YYDEBUG(685, *YYCURSOR);
6490        yych = *++YYCURSOR;
6491        if (yych == 'E') goto yy686;
6492        if (yych != 'e') goto yy187;
6493yy686:
6494        YYDEBUG(686, *YYCURSOR);
6495        ++YYCURSOR;
6496        if (yybm[0+(yych = *YYCURSOR)] & 4) {
6497            goto yy186;
6498        }
6499        YYDEBUG(687, *YYCURSOR);
6500        yyleng = YYCURSOR - SCNG(yy_text);
6501#line 1342 "Zend/zend_language_scanner.l"
6502        {
6503 return T_CALLABLE;
6504}
6505#line 6506 "Zend/zend_language_scanner.c"
6506yy688:
6507        YYDEBUG(688, *YYCURSOR);
6508        ++YYCURSOR;
6509        if (yybm[0+(yych = *YYCURSOR)] & 4) {
6510            goto yy186;
6511        }
6512        YYDEBUG(689, *YYCURSOR);
6513        yyleng = YYCURSOR - SCNG(yy_text);
6514#line 1128 "Zend/zend_language_scanner.l"
6515        {
6516    return T_CASE;
6517}
6518#line 6519 "Zend/zend_language_scanner.c"
6519yy690:
6520        YYDEBUG(690, *YYCURSOR);
6521        yych = *++YYCURSOR;
6522        if (yych == 'H') goto yy691;
6523        if (yych != 'h') goto yy187;
6524yy691:
6525        YYDEBUG(691, *YYCURSOR);
6526        ++YYCURSOR;
6527        if (yybm[0+(yych = *YYCURSOR)] & 4) {
6528            goto yy186;
6529        }
6530        YYDEBUG(692, *YYCURSOR);
6531        yyleng = YYCURSOR - SCNG(yy_text);
6532#line 1048 "Zend/zend_language_scanner.l"
6533        {
6534    return T_CATCH;
6535}
6536#line 6537 "Zend/zend_language_scanner.c"
6537yy693:
6538        YYDEBUG(693, *YYCURSOR);
6539        yych = *++YYCURSOR;
6540        if (yych == 'N') goto yy710;
6541        if (yych == 'n') goto yy710;
6542        goto yy187;
6543yy694:
6544        YYDEBUG(694, *YYCURSOR);
6545        yych = *++YYCURSOR;
6546        if (yych == 'R') goto yy703;
6547        if (yych == 'r') goto yy703;
6548        goto yy187;
6549yy695:
6550        YYDEBUG(695, *YYCURSOR);
6551        yych = *++YYCURSOR;
6552        if (yych == 'N') goto yy696;
6553        if (yych != 'n') goto yy187;
6554yy696:
6555        YYDEBUG(696, *YYCURSOR);
6556        yych = *++YYCURSOR;
6557        if (yych == 'C') goto yy697;
6558        if (yych != 'c') goto yy187;
6559yy697:
6560        YYDEBUG(697, *YYCURSOR);
6561        yych = *++YYCURSOR;
6562        if (yych == 'T') goto yy698;
6563        if (yych != 't') goto yy187;
6564yy698:
6565        YYDEBUG(698, *YYCURSOR);
6566        yych = *++YYCURSOR;
6567        if (yych == 'I') goto yy699;
6568        if (yych != 'i') goto yy187;
6569yy699:
6570        YYDEBUG(699, *YYCURSOR);
6571        yych = *++YYCURSOR;
6572        if (yych == 'O') goto yy700;
6573        if (yych != 'o') goto yy187;
6574yy700:
6575        YYDEBUG(700, *YYCURSOR);
6576        yych = *++YYCURSOR;
6577        if (yych == 'N') goto yy701;
6578        if (yych != 'n') goto yy187;
6579yy701:
6580        YYDEBUG(701, *YYCURSOR);
6581        ++YYCURSOR;
6582        if (yybm[0+(yych = *YYCURSOR)] & 4) {
6583            goto yy186;
6584        }
6585        YYDEBUG(702, *YYCURSOR);
6586        yyleng = YYCURSOR - SCNG(yy_text);
6587#line 1028 "Zend/zend_language_scanner.l"
6588        {
6589    return T_FUNCTION;
6590}
6591#line 6592 "Zend/zend_language_scanner.c"
6592yy703:
6593        YYDEBUG(703, *YYCURSOR);
6594        ++YYCURSOR;
6595        if ((yych = *YYCURSOR) <= '^') {
6596            if (yych <= '@') {
6597                if (yych <= '/') goto yy704;
6598                if (yych <= '9') goto yy186;
6599            } else {
6600                if (yych == 'E') goto yy705;
6601                if (yych <= 'Z') goto yy186;
6602            }
6603        } else {
6604            if (yych <= 'd') {
6605                if (yych != '`') goto yy186;
6606            } else {
6607                if (yych <= 'e') goto yy705;
6608                if (yych <= 'z') goto yy186;
6609                if (yych >= 0x7F) goto yy186;
6610            }
6611        }
6612yy704:
6613        YYDEBUG(704, *YYCURSOR);
6614        yyleng = YYCURSOR - SCNG(yy_text);
6615#line 1088 "Zend/zend_language_scanner.l"
6616        {
6617    return T_FOR;
6618}
6619#line 6620 "Zend/zend_language_scanner.c"
6620yy705:
6621        YYDEBUG(705, *YYCURSOR);
6622        yych = *++YYCURSOR;
6623        if (yych == 'A') goto yy706;
6624        if (yych != 'a') goto yy187;
6625yy706:
6626        YYDEBUG(706, *YYCURSOR);
6627        yych = *++YYCURSOR;
6628        if (yych == 'C') goto yy707;
6629        if (yych != 'c') goto yy187;
6630yy707:
6631        YYDEBUG(707, *YYCURSOR);
6632        yych = *++YYCURSOR;
6633        if (yych == 'H') goto yy708;
6634        if (yych != 'h') goto yy187;
6635yy708:
6636        YYDEBUG(708, *YYCURSOR);
6637        ++YYCURSOR;
6638        if (yybm[0+(yych = *YYCURSOR)] & 4) {
6639            goto yy186;
6640        }
6641        YYDEBUG(709, *YYCURSOR);
6642        yyleng = YYCURSOR - SCNG(yy_text);
6643#line 1096 "Zend/zend_language_scanner.l"
6644        {
6645    return T_FOREACH;
6646}
6647#line 6648 "Zend/zend_language_scanner.c"
6648yy710:
6649        YYDEBUG(710, *YYCURSOR);
6650        yych = *++YYCURSOR;
6651        if (yych == 'A') goto yy711;
6652        if (yych != 'a') goto yy187;