1 : /* Generated by re2c 0.13.5 on Wed Jun 03 09:59:17 2009 */
2 : #line 1 "Zend/zend_language_scanner.l"
3 : /*
4 : +----------------------------------------------------------------------+
5 : | Zend Engine |
6 : +----------------------------------------------------------------------+
7 : | Copyright (c) 1998-2009 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: zend_language_scanner.c 282162 2009-06-15 14:06:30Z pajoye $ */
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 : #include "zend_alloc.h"
39 : #include <zend_language_parser.h>
40 : #include "zend_compile.h"
41 : #include "zend_language_scanner.h"
42 : #include "zend_highlight.h"
43 : #include "zend_constants.h"
44 : #include "zend_variables.h"
45 : #include "zend_operators.h"
46 : #include "zend_API.h"
47 : #include "zend_strtod.h"
48 : #include "zend_unicode.h"
49 : #include "tsrm_virtual_cwd.h"
50 : #include "tsrm_config_common.h"
51 :
52 : #define YYCTYPE unsigned char
53 : #define YYFILL(n) { if ((YYCURSOR + n) >= (YYLIMIT + ZEND_MMAP_AHEAD)) { return 0; } }
54 : #define YYCURSOR SCNG(yy_cursor)
55 : #define YYLIMIT SCNG(yy_limit)
56 : #define YYMARKER SCNG(yy_marker)
57 :
58 : #define YYGETCONDITION() SCNG(yy_state)
59 : #define YYSETCONDITION(s) SCNG(yy_state) = s
60 :
61 : #define STATE(name) yyc##name
62 :
63 : /* emulate flex constructs */
64 : #define BEGIN(state) YYSETCONDITION(STATE(state))
65 : #define YYSTATE YYGETCONDITION()
66 : #define yytext ((char*)SCNG(yy_text))
67 : #define yyleng SCNG(yy_leng)
68 : #define yyless(x) do { YYCURSOR = (unsigned char*)yytext + (x); \
69 : yyleng = (unsigned int)(x); } while(0)
70 : #define yymore() goto yymore_restart
71 :
72 : /* perform sanity check. If this message is triggered you should
73 : increase the ZEND_MMAP_AHEAD value in the zend_streams.h file */
74 : #define YYMAXFILL 16
75 : #if ZEND_MMAP_AHEAD < YYMAXFILL
76 : # error ZEND_MMAP_AHEAD should be greater than or equal to YYMAXFILL
77 : #endif
78 :
79 : #ifdef HAVE_STDARG_H
80 : # include <stdarg.h>
81 : #endif
82 :
83 : #ifdef HAVE_UNISTD_H
84 : # include <unistd.h>
85 : #endif
86 :
87 : /* Globals Macros */
88 : #define SCNG LANG_SCNG
89 : #ifdef ZTS
90 : ZEND_API ts_rsrc_id language_scanner_globals_id;
91 : #else
92 : ZEND_API zend_php_scanner_globals language_scanner_globals;
93 : #endif
94 :
95 : /*
96 : #define YY_INPUT(buf, result, max_size) \
97 : if ( ((result = zend_unicode_yyinput(yyin, buf, max_size TSRMLS_CC)) == 0)) \
98 : YY_FATAL_ERROR( "input in flex scanner failed" );
99 : */
100 :
101 : #define HANDLE_NEWLINES(s, l) \
102 : do { \
103 : char *p = (s), *boundary = p+(l); \
104 : \
105 : while (p<boundary) { \
106 : if (*p == '\n' || (*p == '\r' && (*(p+1) != '\n'))) { \
107 : CG(zend_lineno)++; \
108 : } \
109 : p++; \
110 : } \
111 : } while (0)
112 :
113 : #define HANDLE_NEWLINE(c) \
114 : { \
115 : if (c == '\n' || c == '\r') { \
116 : CG(zend_lineno)++; \
117 : } \
118 : }
119 :
120 : /* To save initial string length after scanning to first variable, CG(doc_comment_len) can be reused */
121 : #define SET_DOUBLE_QUOTES_SCANNED_LENGTH(len) CG(doc_comment_len) = (len)
122 : #define GET_DOUBLE_QUOTES_SCANNED_LENGTH() CG(doc_comment_len)
123 :
124 : #define IS_LABEL_START(c) (((c) >= 'a' && (c) <= 'z') || ((c) >= 'A' && (c) <= 'Z') || (c) == '_' || (c) >= 0x7F)
125 :
126 : #define ZEND_IS_OCT(c) ((c)>='0' && (c)<='7')
127 : #define ZEND_IS_HEX(c) (((c)>='0' && (c)<='9') || ((c)>='a' && (c)<='f') || ((c)>='A' && (c)<='F'))
128 :
129 : BEGIN_EXTERN_C()
130 :
131 : static void _yy_push_state(int new_state TSRMLS_DC)
132 : {
133 : zend_stack_push(&SCNG(state_stack), (void *) &YYGETCONDITION(), sizeof(int));
134 : YYSETCONDITION(new_state);
135 : }
136 :
137 : #define yy_push_state(state_and_tsrm) _yy_push_state(yyc##state_and_tsrm)
138 :
139 : static void yy_pop_state(TSRMLS_D)
140 : {
141 : int *stack_state;
142 : zend_stack_top(&SCNG(state_stack), (void **) &stack_state);
143 : YYSETCONDITION(*stack_state);
144 : zend_stack_del_top(&SCNG(state_stack));
145 : }
146 :
147 : static void yy_scan_buffer(char *str, unsigned int len TSRMLS_DC)
148 : {
149 : YYCURSOR = (YYCTYPE*)str;
150 : SCNG(yy_start) = YYCURSOR;
151 : YYLIMIT = YYCURSOR + len;
152 : }
153 :
154 : void startup_scanner(TSRMLS_D)
155 : {
156 : CG(heredoc) = NULL;
157 : CG(heredoc_len) = 0;
158 : CG(doc_comment) = NULL_ZSTR;
159 : CG(doc_comment_len) = 0;
160 :
161 : SCNG(input_conv) = NULL;
162 : SCNG(output_conv) = NULL;
163 : SCNG(encoding_checked) = 0;
164 : SCNG(rest_str) = NULL;
165 : SCNG(rest_len) = 0;
166 :
167 : zend_stack_init(&SCNG(state_stack));
168 : }
169 :
170 :
171 : void shutdown_scanner(TSRMLS_D)
172 : {
173 : if (CG(heredoc)) {
174 : efree(CG(heredoc));
175 : CG(heredoc_len)=0;
176 : }
177 : zend_stack_destroy(&SCNG(state_stack));
178 : RESET_DOC_COMMENT();
179 :
180 : if (SCNG(input_conv)) {
181 : ucnv_close(SCNG(input_conv));
182 : SCNG(input_conv) = NULL;
183 : }
184 : if (SCNG(output_conv)) {
185 : ucnv_close(SCNG(output_conv));
186 : SCNG(output_conv) = NULL;
187 : }
188 : SCNG(encoding_checked) = 0;
189 : if (SCNG(rest_str)) {
190 : efree(SCNG(rest_str));
191 : SCNG(rest_str) = NULL;
192 : }
193 : SCNG(rest_len) = 0;
194 : }
195 :
196 : ZEND_API void zend_save_lexical_state(zend_lex_state *lex_state TSRMLS_DC)
197 : {
198 : lex_state->yy_leng = SCNG(yy_leng);
199 : lex_state->yy_start = SCNG(yy_start);
200 : lex_state->yy_text = SCNG(yy_text);
201 : lex_state->yy_cursor = SCNG(yy_cursor);
202 : lex_state->yy_marker = SCNG(yy_marker);
203 : lex_state->yy_limit = SCNG(yy_limit);
204 :
205 : lex_state->state_stack = SCNG(state_stack);
206 : zend_stack_init(&SCNG(state_stack));
207 :
208 : lex_state->in = SCNG(yy_in);
209 : lex_state->yy_state = YYSTATE;
210 : lex_state->filename = zend_get_compiled_filename(TSRMLS_C);
211 : lex_state->lineno = CG(zend_lineno);
212 :
213 : lex_state->input_conv = SCNG(input_conv);
214 : lex_state->output_conv = SCNG(output_conv);
215 : lex_state->encoding_checked = SCNG(encoding_checked);
216 : lex_state->rest_str = SCNG(rest_str);
217 : lex_state->rest_len = SCNG(rest_len);
218 : SCNG(input_conv) = NULL;
219 : SCNG(output_conv) = NULL;
220 : SCNG(encoding_checked) = 0;
221 : SCNG(rest_str) = NULL;
222 : SCNG(rest_len) = 0;
223 : }
224 :
225 : ZEND_API void zend_restore_lexical_state(zend_lex_state *lex_state TSRMLS_DC)
226 : {
227 : SCNG(yy_leng) = lex_state->yy_leng;
228 : SCNG(yy_start) = lex_state->yy_start;
229 : SCNG(yy_text) = lex_state->yy_text;
230 : SCNG(yy_cursor) = lex_state->yy_cursor;
231 : SCNG(yy_marker) = lex_state->yy_marker;
232 : SCNG(yy_limit) = lex_state->yy_limit;
233 :
234 : zend_stack_destroy(&SCNG(state_stack));
235 : SCNG(state_stack) = lex_state->state_stack;
236 :
237 : SCNG(yy_in) = lex_state->in;
238 : YYSETCONDITION(lex_state->yy_state);
239 : CG(zend_lineno) = lex_state->lineno;
240 : zend_restore_compiled_filename(lex_state->filename TSRMLS_CC);
241 : zend_restore_compiled_script_encoding(lex_state->script_encoding TSRMLS_CC);
242 :
243 : if (SCNG(input_conv)) {
244 : ucnv_close(SCNG(input_conv));
245 : }
246 : SCNG(input_conv) = lex_state->input_conv;
247 : if (SCNG(output_conv)) {
248 : ucnv_close(SCNG(output_conv));
249 : }
250 : SCNG(output_conv) = lex_state->output_conv;
251 : SCNG(encoding_checked) = lex_state->encoding_checked;
252 : if (SCNG(rest_str)) {
253 : efree(SCNG(rest_str));
254 : }
255 : SCNG(rest_str) = lex_state->rest_str;
256 : SCNG(rest_len) = lex_state->rest_len;
257 : }
258 :
259 : ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle TSRMLS_DC)
260 : {
261 : zend_llist_del_element(&CG(open_files), file_handle, (int (*)(void *, void *)) zend_compare_file_handles);
262 : /* zend_file_handle_dtor() operates on the copy, so we have to NULLify the original here */
263 : file_handle->opened_path = NULL;
264 : if (file_handle->free_filename) {
265 : file_handle->filename = NULL;
266 : }
267 : }
268 :
269 : /* Convert one octal digit to a numeric value 0..7, or -1 on failure */
270 : static inline int8_t zend_get_octal_digit(UChar c) {
271 : if (c >= 0x0030 && c <= 0x0037) {
272 : return (int8_t)(c - 0x0030);
273 : }
274 : return -1;
275 : }
276 :
277 : /*
278 : * Convert one hex digit to a numeric value 0..F, or -1 on failure.
279 : * Borrowed from ICU.
280 : */
281 : static inline int8_t zend_get_hex_digit(UChar c) {
282 : if (c >= 0x0030 && c <= 0x0039) {
283 : return (int8_t)(c - 0x0030);
284 : }
285 : if (c >= 0x0041 && c <= 0x0046) {
286 : return (int8_t)(c - (0x0041 - 10));
287 : }
288 : if (c >= 0x0061 && c <= 0x0066) {
289 : return (int8_t)(c - (0x0061 - 10));
290 : }
291 : return -1;
292 : }
293 :
294 : static inline zend_bool zend_udigits_to_codepoint(UChar *s, UChar *end, UChar32 *c, int8_t digits)
295 : {
296 : int8_t n = 0;
297 : int8_t digit = 0;
298 : UChar32 codepoint = 0;
299 :
300 : while (s < end && n < digits) {
301 : digit = zend_get_hex_digit(*s);
302 : if (digit < 0) {
303 : break;
304 : }
305 : codepoint = (codepoint << 4) | digit;
306 : ++s;
307 : ++n;
308 : }
309 :
310 : if (n < digits) {
311 : return 0;
312 : }
313 :
314 : *c = codepoint;
315 : return 1;
316 : }
317 :
318 : static inline int zend_uchar_from_uname(UChar *name, int name_len, UChar32 *c TSRMLS_DC)
319 : {
320 : UChar32 codepoint = 0;
321 : UErrorCode status = U_ZERO_ERROR;
322 : char *buf;
323 :
324 : buf = zend_unicode_to_ascii(name, name_len TSRMLS_CC);
325 : if (!buf) return 0;
326 : codepoint = u_charFromName(U_UNICODE_CHAR_NAME, buf, &status);
327 : efree(buf);
328 : if (U_SUCCESS(status)) {
329 : *c = codepoint;
330 : return 1;
331 : } else {
332 : return 0;
333 : }
334 : }
335 :
336 : static inline int zend_parse_charname_sequence(UChar **s, UChar *end, UChar32 *c TSRMLS_DC)
337 : {
338 : UChar *start;
339 :
340 : if (**s == '{') {
341 : start = ++(*s);
342 : while ((*s)++ != end) {
343 : if (**s == '}') {
344 : if (zend_uchar_from_uname(start, *s - start, c TSRMLS_CC)) {
345 : return 1;
346 : } else {
347 : /* safe, since *s points to '}' */
348 : **s = 0;
349 : zend_error(E_COMPILE_WARNING, "Invalid Unicode character name: '%r'", start);
350 : break;
351 : }
352 : }
353 : }
354 : }
355 :
356 : return 0;
357 : }
358 :
359 : ZEND_API int zend_copy_scanner_string(zval *zendlval, char *str, zend_uint str_len, zend_uchar type, UConverter *conv TSRMLS_DC)
360 : {
361 : UErrorCode status = U_ZERO_ERROR;
362 : int consumed = 0;
363 :
364 : if (type == IS_UNICODE) {
365 : consumed = zend_convert_scanner_output(conv, &Z_USTRVAL_P(zendlval), &Z_USTRLEN_P(zendlval), str, str_len, &status TSRMLS_CC);
366 :
367 : if (U_FAILURE(status)) {
368 : zend_error(E_COMPILE_WARNING,"Illegal or truncated character in input: offset %d, state=%d", consumed, YYSTATE);
369 : efree(Z_USTRVAL_P(zendlval));
370 : return 0;
371 : }
372 : Z_TYPE_P(zendlval) = IS_UNICODE;
373 : } else {
374 : Z_STRVAL_P(zendlval) = (char *)estrndup(str, str_len);
375 : Z_STRLEN_P(zendlval) = str_len;
376 : Z_TYPE_P(zendlval) = IS_STRING;
377 : }
378 :
379 : return 1;
380 : }
381 :
382 : static inline int zend_check_and_normalize_identifier(zval *zendlval)
383 : {
384 : UChar *norm;
385 : int norm_len;
386 :
387 : if (!zend_is_valid_identifier(Z_USTRVAL_P(zendlval), Z_USTRLEN_P(zendlval))) {
388 : zend_error(E_COMPILE_WARNING, "Invalid identifier syntax: %r", Z_USTRVAL_P(zendlval));
389 : efree(Z_USTRVAL_P(zendlval));
390 : return 0;
391 : }
392 : if (zend_normalize_identifier(&norm, &norm_len, Z_USTRVAL_P(zendlval), Z_USTRLEN_P(zendlval), 0) == FAILURE) {
393 : zend_error(E_COMPILE_WARNING, "Could not normalize identifier: %r", Z_USTRVAL_P(zendlval));
394 : efree(Z_USTRVAL_P(zendlval));
395 : return 0;
396 : }
397 : if (norm != Z_USTRVAL_P(zendlval)) {
398 : efree(Z_USTRVAL_P(zendlval));
399 : ZVAL_UNICODEL(zendlval, norm, norm_len, 0);
400 : }
401 : return 1;
402 : }
403 :
404 : static void zend_scanner_output_callback(
405 : const void *context,
406 : UConverterToUnicodeArgs *toUArgs,
407 : const char *codeUnits,
408 : int32_t length,
409 : UConverterCallbackReason reason,
410 : UErrorCode *err
411 : )
412 : {
413 : if (*err == U_TRUNCATED_CHAR_FOUND ||
414 : *err == U_ILLEGAL_CHAR_FOUND ||
415 : *err == U_INVALID_CHAR_FOUND) {
416 : *(const char **)context = toUArgs->source - length;
417 : }
418 :
419 : return;
420 : }
421 :
422 : static int is_encoding_flex_compatible(const char *enc TSRMLS_DC)
423 : {
424 : int key_len = strlen(enc)+1;
425 : unsigned char ret;
426 : unsigned char *ret_ptr;
427 :
428 : if (zend_hash_find(&UG(flex_compatible), (char*)enc, key_len, (void**)&ret_ptr) == SUCCESS) {
429 : return *ret_ptr;
430 : } else {
431 : UErrorCode status = U_ZERO_ERROR;
432 : UConverter *conv = ucnv_open(enc, &status);
433 :
434 : if (U_FAILURE(status)) {
435 : return 0;
436 : }
437 :
438 : switch (ucnv_getType(conv)) {
439 : case UCNV_DBCS:
440 : case UCNV_UTF16_BigEndian:
441 : case UCNV_UTF16_LittleEndian:
442 : case UCNV_UTF32_BigEndian:
443 : case UCNV_UTF32_LittleEndian:
444 : case UCNV_EBCDIC_STATEFUL:
445 : case UCNV_ISO_2022:
446 : case UCNV_LMBCS_1:
447 : case UCNV_LMBCS_2:
448 : case UCNV_LMBCS_3:
449 : case UCNV_LMBCS_4:
450 : case UCNV_LMBCS_5:
451 : case UCNV_LMBCS_6:
452 : case UCNV_LMBCS_8:
453 : case UCNV_LMBCS_11:
454 : case UCNV_LMBCS_16:
455 : case UCNV_LMBCS_17:
456 : case UCNV_LMBCS_18:
457 : case UCNV_LMBCS_19:
458 : case UCNV_HZ:
459 : case UCNV_SCSU:
460 : case UCNV_UTF7:
461 : case UCNV_BOCU1:
462 : case UCNV_UTF16:
463 : case UCNV_UTF32:
464 : case UCNV_IMAP_MAILBOX:
465 : ret = 0;
466 : break;
467 : case UCNV_LATIN_1:
468 : case UCNV_UTF8:
469 : case UCNV_ISCII:
470 : case UCNV_US_ASCII:
471 : case UCNV_CESU8:
472 : ret = 1;
473 : break;
474 : default: {
475 : static const UChar ascii[] = {
476 : 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
477 : 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
478 : 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
479 : 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
480 : 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
481 : 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
482 : 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
483 : 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E
484 : };
485 : static const char expected[] =
486 : "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F"
487 : "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F"
488 : "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2A\x2B\x2C\x2D\x2E\x2F"
489 : "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F"
490 : "\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F"
491 : "\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x5B\x5C\x5D\x5E\x5F"
492 : "\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F"
493 : "\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7A\x7B\x7C\x7D\x7E";
494 : char output[sizeof(expected)];
495 :
496 : if (ucnv_fromUChars(conv,
497 : output, sizeof(output),
498 : ascii, sizeof(expected),
499 : &status) != sizeof(expected) ||
500 : U_FAILURE(status)) {
501 : ret = 0;
502 : } else {
503 : ret = (memcmp(expected, output, sizeof(expected)) == 0);
504 : }
505 : }
506 : }
507 : ucnv_close(conv);
508 :
509 : zend_hash_add(&UG(flex_compatible), (char*)enc, key_len, (void**)&ret, sizeof(ret), NULL);
510 :
511 : return ret;
512 : }
513 : }
514 :
515 : ZEND_API int zend_prepare_scanner_converters(const char *onetime_encoding, int run_time TSRMLS_DC)
516 : {
517 : const char *encoding = NULL;
518 :
519 : if (SCNG(input_conv)) {
520 : /* Script is already converted to UTF-8 */
521 : return zend_set_converter_encoding(&SCNG(output_conv), "UTF-8");
522 : } else {
523 : encoding = onetime_encoding;
524 : }
525 :
526 : /* We need to convert the input stream only if script_encoding is not ASCII compatible */
527 : if (!is_encoding_flex_compatible(encoding TSRMLS_CC)) {
528 : if (zend_set_converter_encoding(&SCNG(input_conv), encoding) == FAILURE) {
529 : return FAILURE;
530 : }
531 : #ifdef scottmac_0
532 : if (run_time) {
533 : /* Convert rest of the buffer to unicode.runtime_encoding. */
534 : YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
535 : int offset, length, size;
536 : const char *src, *old_src;
537 : char rt_buf[8192];
538 : char *target = rt_buf;
539 : UErrorCode status = U_ZERO_ERROR;
540 :
541 : old_src = src = yy_c_buf_p;
542 : offset = yy_c_buf_p - b->yy_ch_buf;
543 : length = b->yy_n_chars - offset;
544 : size = b->yy_buf_size - offset;
545 :
546 : ucnv_convertEx(UG(utf8_conv),
547 : SCNG(input_conv),
548 : &target, rt_buf+size-2,
549 : &src, src+length,
550 : NULL, NULL, NULL, NULL,
551 : TRUE, TRUE,
552 : &status);
553 :
554 : if (src - old_src < length) {
555 : /* Cannot fit into buffer. Schedule for next read. */
556 : SCNG(rest_len) = length - (src - old_src);
557 : SCNG(rest_str) = emalloc(SCNG(rest_len));
558 : memcpy(SCNG(rest_str), src, SCNG(rest_len));
559 : }
560 : length = target - rt_buf;
561 : memcpy(yy_c_buf_p, rt_buf, length);
562 : SCNG(yy_n_chars) = b->yy_n_chars = length + offset;
563 : b->yy_ch_buf[b->yy_n_chars] = YY_END_OF_BUFFER_CHAR;
564 : b->yy_ch_buf[b->yy_n_chars+1] = YY_END_OF_BUFFER_CHAR;
565 : }
566 : #endif
567 : encoding = "UTF-8";
568 : }
569 : return zend_set_converter_encoding(&SCNG(output_conv), encoding);
570 : }
571 :
572 : ZEND_API int zend_convert_scanner_output(UConverter *conv, UChar **target, int *target_len, const char *source, int source_len, UErrorCode *status TSRMLS_DC)
573 : {
574 : const char *source_consumed = NULL;
575 :
576 : /* set our custom callback with context */
577 : ucnv_setToUCallBack(conv, zend_scanner_output_callback, &source_consumed, NULL, NULL, status);
578 :
579 : /* reset the error and perform conversion */
580 : *status = U_ZERO_ERROR;
581 : zend_string_to_unicode_ex(conv, target, target_len, source, source_len, status);
582 :
583 : /* figure out how many source bytes were consumed */
584 : if (U_SUCCESS(*status)) {
585 : return source_len;
586 : } else if (source_consumed) {
587 : return source_consumed - source;
588 : } else {
589 : return 0;
590 : }
591 : }
592 :
593 : int zend_unicode_yyinput(zend_file_handle *file_handle, char *buf, size_t len TSRMLS_DC)
594 : {
595 : size_t n = len;
596 : const char *src = buf;
597 :
598 : #ifdef scottmac_0
599 : /* Look of we have rest from previous call */
600 : if (SCNG(rest_str)) {
601 : if (len >= SCNG(rest_len)) {
602 : memcpy(buf, SCNG(rest_str), SCNG(rest_len));
603 : efree(SCNG(rest_str));
604 : SCNG(rest_str) = NULL;
605 : n = SCNG(rest_len);
606 : SCNG(rest_len) = 0;
607 : } else {
608 : memcpy(buf, SCNG(rest_str), len);
609 : memcpy(SCNG(rest_str), SCNG(rest_str)+len, SCNG(rest_len)-len);
610 : n = len;
611 : SCNG(rest_len) -= len;
612 : }
613 : } else {
614 : n = zend_stream_read(file_handle, buf, len TSRMLS_CC);
615 : }
616 : #endif
617 : /* Autodetect encoding */
618 : if (!SCNG(encoding_checked)) {
619 : int32_t signatureLength;
620 : UErrorCode status = U_ZERO_ERROR;
621 : const char *encoding;
622 :
623 : encoding = ucnv_detectUnicodeSignature(buf, n, &signatureLength, &status);
624 : if (encoding && U_SUCCESS(status)) {
625 : src += signatureLength;
626 : n -= signatureLength;
627 : if (is_encoding_flex_compatible(encoding TSRMLS_CC)) {
628 : if (SCNG(input_conv)) {
629 : ucnv_close(SCNG(input_conv));
630 : SCNG(input_conv) = NULL;
631 : }
632 : zend_set_converter_encoding(&SCNG(output_conv), encoding);
633 : if (signatureLength > 0) {
634 : memcpy(buf, src, n);
635 : }
636 : } else {
637 : zend_set_converter_encoding(&SCNG(input_conv), encoding);
638 : zend_set_converter_encoding(&SCNG(output_conv), "UTF-8");
639 : }
640 : }
641 : status = U_ZERO_ERROR;
642 : SCNG(encoding_checked) = 1;
643 : }
644 :
645 : if (SCNG(input_conv) && n >= 0) {
646 : UErrorCode status = U_ZERO_ERROR;
647 : char rt_buf[8192];
648 : char *target = rt_buf;
649 : const char *old_src = src;
650 :
651 : ucnv_convertEx(UG(utf8_conv),
652 : SCNG(input_conv),
653 : &target, rt_buf+len,
654 : &src, src+n,
655 : NULL, NULL, NULL, NULL,
656 : TRUE, TRUE,
657 : &status);
658 : if (src - old_src < n) {
659 : /* Cannot fit into buffer. Schedule for next read. */
660 : SCNG(rest_len) = n - (src - old_src);
661 : SCNG(rest_str) = emalloc(SCNG(rest_len));
662 : memcpy(SCNG(rest_str), src, SCNG(rest_len));
663 : }
664 : n = target - rt_buf;
665 : memcpy(buf, rt_buf, n);
666 : }
667 : return n;
668 : }
669 :
670 : ZEND_API int open_file_for_scanning(zend_file_handle *file_handle TSRMLS_DC)
671 : {
672 : char *file_path=NULL, *buf;
673 : UErrorCode status = U_ZERO_ERROR;
674 : size_t size;
675 :
676 : if (zend_stream_fixup(file_handle, &buf, &size TSRMLS_CC) == FAILURE) {
677 : return FAILURE;
678 : }
679 :
680 : zend_llist_add_element(&CG(open_files), file_handle);
681 :
682 : if (file_handle->handle.stream.handle >= (void*)file_handle && file_handle->handle.stream.handle <= (void*)(file_handle+1)) {
683 : zend_file_handle *fh = (zend_file_handle*)zend_llist_get_last(&CG(open_files));
684 : size_t diff = (char*)file_handle->handle.stream.handle - (char*)file_handle;
685 : fh->handle.stream.handle = (void*)(((char*)fh) + diff);
686 : file_handle->handle.stream.handle = fh->handle.stream.handle;
687 : }
688 :
689 : /* Reset the scanner for scanning the new file */
690 : SCNG(yy_in) = file_handle;
691 :
692 : zend_prepare_scanner_converters(ucnv_getName(ZEND_U_CONVERTER(UG(script_encoding_conv)), &status), 0 TSRMLS_CC);
693 :
694 : if (size != -1) {
695 : /* Re-encode for Unicode if needed */
696 : yy_scan_buffer(buf, size TSRMLS_CC);
697 : } else {
698 : zend_error_noreturn(E_COMPILE_ERROR, "zend_stream_mmap() failed");
699 : }
700 :
701 : BEGIN(INITIAL);
702 :
703 : if (file_handle->opened_path) {
704 : file_path = file_handle->opened_path;
705 : } else {
706 : file_path = file_handle->filename;
707 : }
708 :
709 : zend_set_compiled_filename(file_path TSRMLS_CC);
710 : zend_set_compiled_script_encoding((char*)ucnv_getName(SCNG(output_conv), &status) TSRMLS_CC);
711 :
712 : if (CG(start_lineno)) {
713 : CG(zend_lineno) = CG(start_lineno);
714 : CG(start_lineno) = 0;
715 : } else {
716 : CG(zend_lineno) = 1;
717 : }
718 :
719 : CG(increment_lineno) = 0;
720 : return SUCCESS;
721 : }
722 : END_EXTERN_C()
723 :
724 :
725 : ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type TSRMLS_DC)
726 : {
727 : zend_lex_state original_lex_state;
728 : zend_op_array *op_array = (zend_op_array *) emalloc(sizeof(zend_op_array));
729 : zend_op_array *original_active_op_array = CG(active_op_array);
730 : zend_op_array *retval=NULL;
731 : int compiler_result;
732 : zend_bool compilation_successful=0;
733 : znode retval_znode;
734 : zend_bool original_in_compilation = CG(in_compilation);
735 :
736 : retval_znode.op_type = IS_CONST;
737 : Z_TYPE(retval_znode.u.constant) = IS_LONG;
738 : Z_LVAL(retval_znode.u.constant) = 1;
739 : Z_UNSET_ISREF(retval_znode.u.constant);
740 : Z_SET_REFCOUNT(retval_znode.u.constant, 1);
741 :
742 : zend_save_lexical_state(&original_lex_state TSRMLS_CC);
743 :
744 : retval = op_array; /* success oriented */
745 :
746 : if (open_file_for_scanning(file_handle TSRMLS_CC)==FAILURE) {
747 : if (type==ZEND_REQUIRE) {
748 : zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, file_handle->filename TSRMLS_CC);
749 : zend_bailout();
750 : } else {
751 : zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, file_handle->filename TSRMLS_CC);
752 : }
753 : compilation_successful=0;
754 : } else {
755 : init_op_array(op_array, ZEND_USER_FUNCTION, INITIAL_OP_ARRAY_SIZE TSRMLS_CC);
756 : CG(in_compilation) = 1;
757 : CG(active_op_array) = op_array;
758 : compiler_result = zendparse(TSRMLS_C);
759 : zend_do_return(&retval_znode, 0 TSRMLS_CC);
760 : CG(in_compilation) = original_in_compilation;
761 : if (compiler_result==1) { /* parser error */
762 : zend_bailout();
763 : }
764 : compilation_successful=1;
765 : }
766 :
767 : if (retval) {
768 : CG(active_op_array) = original_active_op_array;
769 : if (compilation_successful) {
770 : pass_two(op_array TSRMLS_CC);
771 : zend_release_labels(TSRMLS_C);
772 : } else {
773 : efree(op_array);
774 : retval = NULL;
775 : }
776 : }
777 : zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
778 : return retval;
779 : }
780 :
781 :
782 : zend_op_array *compile_filename(int type, zval *filename TSRMLS_DC)
783 : {
784 : zend_file_handle file_handle;
785 : zval tmp;
786 : zend_op_array *retval;
787 : char *opened_path = NULL;
788 :
789 : if (Z_TYPE_P(filename) != IS_STRING) {
790 : tmp = *filename;
791 : zval_copy_ctor(&tmp);
792 : convert_to_string(&tmp);
793 : filename = &tmp;
794 : }
795 : file_handle.filename = Z_STRVAL_P(filename);
796 : file_handle.free_filename = 0;
797 : file_handle.type = ZEND_HANDLE_FILENAME;
798 : file_handle.opened_path = NULL;
799 : file_handle.handle.fp = NULL;
800 :
801 : retval = zend_compile_file(&file_handle, type TSRMLS_CC);
802 : if (retval && file_handle.handle.stream.handle) {
803 : int dummy = 1;
804 :
805 : if (!file_handle.opened_path) {
806 : file_handle.opened_path = opened_path = estrndup(Z_STRVAL_P(filename), Z_STRLEN_P(filename));
807 : }
808 :
809 : zend_hash_add(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1, (void *)&dummy, sizeof(int), NULL);
810 :
811 : if (opened_path) {
812 : efree(opened_path);
813 : }
814 : }
815 : zend_destroy_file_handle(&file_handle TSRMLS_CC);
816 :
817 : if (filename==&tmp) {
818 : zval_dtor(&tmp);
819 : }
820 : return retval;
821 : }
822 :
823 : ZEND_API int zend_prepare_string_for_scanning(zval *str, char *filename TSRMLS_DC)
824 : {
825 : const char *encoding;
826 : UErrorCode status = U_ZERO_ERROR;
827 :
828 : if (Z_TYPE_P(str) == IS_UNICODE) {
829 : convert_to_string_with_converter(str, UG(utf8_conv));
830 : encoding = "UTF-8";
831 : } else {
832 : UErrorCode status = U_ZERO_ERROR;
833 : encoding = ucnv_getName(ZEND_U_CONVERTER(UG(runtime_encoding_conv)), &status);
834 : }
835 :
836 : str->value.str.val = safe_erealloc(str->value.str.val, 1, str->value.str.len, ZEND_MMAP_AHEAD);
837 : memset(str->value.str.val + str->value.str.len, 0, ZEND_MMAP_AHEAD);
838 :
839 : SCNG(yy_in)=NULL;
840 :
841 : zend_prepare_scanner_converters(encoding, 0 TSRMLS_CC);
842 : /* Re-encode for Unicode if needed */
843 : yy_scan_buffer(Z_STRVAL_P(str), Z_STRLEN_P(str) TSRMLS_CC);
844 :
845 : zend_set_compiled_filename(filename TSRMLS_CC);
846 : zend_set_compiled_script_encoding((char*)ucnv_getName(SCNG(output_conv), &status) TSRMLS_CC);
847 : CG(zend_lineno) = 1;
848 : CG(increment_lineno) = 0;
849 : return SUCCESS;
850 : }
851 :
852 :
853 : ZEND_API size_t zend_get_scanned_file_offset(TSRMLS_D)
854 : {
855 : return SCNG(yy_cursor) - SCNG(yy_start);
856 : }
857 :
858 :
859 : zend_op_array *compile_string(zval *source_string, char *filename TSRMLS_DC)
860 : {
861 : zend_lex_state original_lex_state;
862 : zend_op_array *op_array = (zend_op_array *) emalloc(sizeof(zend_op_array));
863 : zend_op_array *original_active_op_array = CG(active_op_array);
864 : zend_op_array *retval;
865 : zval tmp;
866 : int compiler_result;
867 : zend_bool original_in_compilation = CG(in_compilation);
868 :
869 : tmp = *source_string;
870 : zval_copy_ctor(&tmp);
871 : if (Z_TYPE(tmp) != IS_STRING && Z_TYPE(tmp) != IS_UNICODE) {
872 : convert_to_unicode(&tmp);
873 : }
874 : source_string = &tmp;
875 :
876 : if (Z_UNILEN_P(source_string)==0) {
877 : efree(op_array);
878 : zval_dtor(&tmp);
879 : return NULL;
880 : }
881 :
882 : CG(in_compilation) = 1;
883 :
884 : zend_save_lexical_state(&original_lex_state TSRMLS_CC);
885 : if (zend_prepare_string_for_scanning(source_string, filename TSRMLS_CC)==FAILURE) {
886 : zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
887 : efree(op_array);
888 : retval = NULL;
889 : } else {
890 : zend_bool orig_interactive = CG(interactive);
891 :
892 : CG(interactive) = 0;
893 : init_op_array(op_array, ZEND_EVAL_CODE, INITIAL_OP_ARRAY_SIZE TSRMLS_CC);
894 : CG(interactive) = orig_interactive;
895 : CG(active_op_array) = op_array;
896 : BEGIN(ST_IN_SCRIPTING);
897 : compiler_result = zendparse(TSRMLS_C);
898 :
899 : if (compiler_result==1) {
900 : CG(active_op_array) = original_active_op_array;
901 : CG(unclean_shutdown)=1;
902 : retval = NULL;
903 : } else {
904 : zend_do_return(NULL, 0 TSRMLS_CC);
905 : CG(active_op_array) = original_active_op_array;
906 : pass_two(op_array TSRMLS_CC);
907 : zend_release_labels(TSRMLS_C);
908 : retval = op_array;
909 : }
910 : zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
911 : }
912 : zval_dtor(&tmp);
913 : CG(in_compilation) = original_in_compilation;
914 : return retval;
915 : }
916 :
917 :
918 : BEGIN_EXTERN_C()
919 : int highlight_file(char *filename, zend_syntax_highlighter_ini *syntax_highlighter_ini TSRMLS_DC)
920 : {
921 : zend_lex_state original_lex_state;
922 : zend_file_handle file_handle;
923 :
924 : file_handle.type = ZEND_HANDLE_FILENAME;
925 : file_handle.filename = filename;
926 : file_handle.free_filename = 0;
927 : file_handle.opened_path = NULL;
928 : zend_save_lexical_state(&original_lex_state TSRMLS_CC);
929 : if (open_file_for_scanning(&file_handle TSRMLS_CC)==FAILURE) {
930 : zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
931 : zend_message_dispatcher(ZMSG_FAILED_HIGHLIGHT_FOPEN, filename TSRMLS_CC);
932 : return FAILURE;
933 : }
934 : zend_highlight(syntax_highlighter_ini TSRMLS_CC);
935 : zend_destroy_file_handle(&file_handle TSRMLS_CC);
936 : zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
937 : return SUCCESS;
938 : }
939 :
940 : int highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, char *str_name TSRMLS_DC)
941 : {
942 : zend_lex_state original_lex_state;
943 : zval tmp = *str;
944 :
945 : str = &tmp;
946 : zval_copy_ctor(str);
947 : zend_save_lexical_state(&original_lex_state TSRMLS_CC);
948 : if (zend_prepare_string_for_scanning(str, str_name TSRMLS_CC)==FAILURE) {
949 : zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
950 : return FAILURE;
951 : }
952 : BEGIN(INITIAL);
953 : zend_highlight(syntax_highlighter_ini TSRMLS_CC);
954 : zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
955 : zval_dtor(str);
956 : return SUCCESS;
957 : }
958 : END_EXTERN_C()
959 :
960 : #define zend_copy_value(zendlval, yytext, yyleng) \
961 : Z_STRVAL_P(zendlval) = (char *)estrndup(yytext, yyleng); \
962 : Z_STRLEN_P(zendlval) = yyleng;
963 :
964 : static int zend_scan_unicode_escape_string(zval *zendlval, char *str, int len, UChar quote_type, int type TSRMLS_DC)
965 : {
966 : register UChar *s, *t, c;
967 : UChar *end;
968 : UChar32 codepoint = 0;
969 : int8_t digit;
970 : int8_t min_digits = 0, max_digits = 0;
971 : int8_t bits;
972 : int8_t n;
973 :
974 : if (!zend_copy_scanner_string(zendlval, str, len, IS_UNICODE, SCNG(output_conv) TSRMLS_CC)) {
975 : return 0;
976 : }
977 :
978 : /* convert escape sequences */
979 : s = t = Z_USTRVAL_P(zendlval);
980 : end = s+Z_USTRLEN_P(zendlval);
981 : while (s<end) {
982 : if (*s==0x5C /*'\\'*/) {
983 : s++;
984 : c = *s;
985 : if (s >= end) {
986 : *t++ = 0x5C; /*'\\'*/
987 : break;
988 : }
989 :
990 : min_digits = 0;
991 : codepoint = 0;
992 : bits = 4;
993 : n = 0;
994 :
995 : switch(c) {
996 : case 0x6E: /*'n'*/
997 : *t++ = (UChar) 0x0A; /*'\n'*/
998 : Z_USTRLEN_P(zendlval)--;
999 : break;
1000 : case 0x72: /*'r'*/
1001 : *t++ = (UChar) 0x0D; /*'\r'*/
1002 : Z_USTRLEN_P(zendlval)--;
1003 : break;
1004 : case 0x74: /*'t'*/
1005 : *t++ = (UChar) 0x09; /*'\t'*/
1006 : Z_USTRLEN_P(zendlval)--;
1007 : break;
1008 : case 0x66: /*'f'*/
1009 : *t++ = (UChar) 0x0C; /*'\f'*/
1010 : Z_USTRLEN_P(zendlval)--;
1011 : break;
1012 : case 0x76: /*'v'*/
1013 : *t++ = (UChar) 0x0B; /*'\v'*/
1014 : Z_USTRLEN_P(zendlval)--;
1015 : break;
1016 : case 0x22: /*'"'*/
1017 : case 0x60: /*'`'*/
1018 : if (c != quote_type) {
1019 : *t++ = 0x5C; /*'\\'*/
1020 : *t++ = *s;
1021 : break;
1022 : }
1023 : case 0x5C: /*'\\'*/
1024 : case 0x24: /*'$'*/
1025 : *t++ = *s;
1026 : Z_USTRLEN_P(zendlval)--;
1027 : break;
1028 : case 0x43: /*'C'*/
1029 : {
1030 : UChar *p = s+1;
1031 : if (p < end && zend_parse_charname_sequence(&p, end, &codepoint TSRMLS_CC)) {
1032 : Z_USTRLEN_P(zendlval) -= p - s + 1;
1033 : s = p;
1034 : if (U_IS_BMP(codepoint)) {
1035 : *t++ = (UChar) codepoint;
1036 : } else {
1037 : *t++ = (UChar) U16_LEAD(codepoint);
1038 : *t++ = (UChar) U16_TRAIL(codepoint);
1039 : Z_USTRLEN_P(zendlval)++;
1040 : }
1041 : } else {
1042 : zend_error(E_COMPILE_WARNING, "Invalid \\C{..} sequence");
1043 : efree(Z_USTRVAL_P(zendlval));
1044 : return 0;
1045 : }
1046 : break;
1047 : }
1048 : case 0x75: /*'u'*/
1049 : min_digits = 4;
1050 : max_digits = 4;
1051 : Z_USTRLEN_P(zendlval)--;
1052 : break;
1053 : case 0x55: /*'U'*/
1054 : min_digits = 6;
1055 : max_digits = 6;
1056 : Z_USTRLEN_P(zendlval)--;
1057 : break;
1058 : case 0x78: /*'x'*/
1059 : case 0x58: /*'X'*/
1060 : if ((digit = zend_get_hex_digit(*(s+1))) >= 0) {
1061 : min_digits = 1;
1062 : max_digits = 2;
1063 : Z_USTRLEN_P(zendlval)--;
1064 : s++;
1065 : n = 1; /* already have one digit */
1066 : codepoint = digit;
1067 : } else {
1068 : *t++ = 0x5C; /*'\\'*/
1069 : *t++ = *s;
1070 : }
1071 : break;
1072 : default:
1073 : digit = zend_get_octal_digit(*s);
1074 : if (digit >= 0) {
1075 : min_digits = 1;
1076 : max_digits = 3;
1077 : bits = 3;
1078 : n = 1; /* already have one digit */
1079 : codepoint = digit;
1080 : } else {
1081 : *t++ = 0x5C; /*'\\'*/
1082 : *t++ = *s;
1083 : }
1084 : break;
1085 : }
1086 :
1087 : /* need to parse a number for one of the escape sequences */
1088 : if (min_digits != 0) {
1089 : while (s++ < end && n < max_digits) {
1090 : digit = (bits == 4) ? zend_get_hex_digit(*s) : zend_get_octal_digit(*s);
1091 : if (digit < 0) {
1092 : break;
1093 : }
1094 : codepoint = (codepoint << bits) | digit;
1095 : n++;
1096 : }
1097 :
1098 : if (n < min_digits) {
1099 : /* can only happen for \u and \U sequences */
1100 : zend_error(E_COMPILE_WARNING,"\\%c escape sequence requires exactly %d hexadecimal digits", (char) c, min_digits);
1101 : efree(Z_USTRVAL_P(zendlval));
1102 : return 0;
1103 : }
1104 :
1105 : if (U_IS_BMP(codepoint)) {
1106 : *t++ = (UChar) codepoint;
1107 : Z_USTRLEN_P(zendlval) -= n;
1108 : } else if (codepoint <= 0x10FFFF) {
1109 : *t++ = (UChar) U16_LEAD(codepoint);
1110 : *t++ = (UChar) U16_TRAIL(codepoint);
1111 : Z_USTRLEN_P(zendlval) -= n-1;
1112 : } else {
1113 : zend_error(E_COMPILE_WARNING,"\\U%06x is above the highest valid codepoint 0x10FFFF", codepoint);
1114 : efree(Z_USTRVAL_P(zendlval));
1115 : return 0;
1116 : }
1117 :
1118 : /* s is already incremented and not past a newline */
1119 : continue;
1120 : }
1121 : } else {
1122 : *t++ = *s;
1123 : }
1124 :
1125 : if (*s == 0x0A /*'\n'*/ || (*s == 0x0D /*'\r'*/ && (*(s+1) != 0x0A /*'\n'*/))) {
1126 : CG(zend_lineno)++;
1127 : }
1128 : s++;
1129 : }
1130 : *t = 0;
1131 :
1132 : return type;
1133 : }
1134 :
1135 : static int zend_scan_unicode_single_string(zval *zendlval TSRMLS_DC)
1136 : {
1137 : register UChar *s, *t;
1138 : UChar *end;
1139 :
1140 : if (!zend_copy_scanner_string(zendlval, yytext+1, yyleng-2, IS_UNICODE, SCNG(output_conv) TSRMLS_CC)) {
1141 : return 0;
1142 : }
1143 :
1144 : /* convert escape sequences */
1145 : s = t = Z_USTRVAL_P(zendlval);
1146 : end = s+Z_USTRLEN_P(zendlval);
1147 : while (s<end) {
1148 : if (*s==0x5C /*'\\'*/) {
1149 : s++;
1150 :
1151 : switch(*s) {
1152 : case 0x5C: /*'\\'*/
1153 : case 0x27: /*'\''*/
1154 : *t++ = *s;
1155 : Z_USTRLEN_P(zendlval)--;
1156 : break;
1157 : default:
1158 : *t++ = 0x5C; /*'\\'*/
1159 : *t++ = *s;
1160 : break;
1161 : }
1162 : } else {
1163 : *t++ = *s;
1164 : }
1165 :
1166 : if (*s == 0x0A /*'\n'*/ || (*s == 0x0D /*'\r'*/ && (*(s+1) != 0x0A /*'\n'*/))) {
1167 : CG(zend_lineno)++;
1168 : }
1169 : s++;
1170 : }
1171 : *t = 0;
1172 :
1173 : return T_CONSTANT_ENCAPSED_STRING;
1174 : }
1175 :
1176 : static void zend_scan_binary_escape_string(zval *zendlval, char *str, int len, char quote_type TSRMLS_DC)
1177 : {
1178 : register char *s, *t;
1179 : char *end;
1180 :
1181 : ZVAL_STRINGL(zendlval, str, len, 1);
1182 :
1183 : /* convert escape sequences */
1184 : s = t = Z_STRVAL_P(zendlval);
1185 : end = s+Z_STRLEN_P(zendlval);
1186 : while (s<end) {
1187 : if (*s=='\\') {
1188 : s++;
1189 : if (s >= end) {
1190 : *t++ = '\\';
1191 : break;
1192 : }
1193 :
1194 : switch(*s) {
1195 : case 'n':
1196 : *t++ = '\n';
1197 : Z_STRLEN_P(zendlval)--;
1198 : break;
1199 : case 'r':
1200 : *t++ = '\r';
1201 : Z_STRLEN_P(zendlval)--;
1202 : break;
1203 : case 't':
1204 : *t++ = '\t';
1205 : Z_STRLEN_P(zendlval)--;
1206 : break;
1207 : case 'f':
1208 : *t++ = '\f';
1209 : zendlval->value.str.len--;
1210 : break;
1211 : case 'v':
1212 : *t++ = '\v';
1213 : zendlval->value.str.len--;
1214 : break;
1215 : case '"':
1216 : case '`':
1217 : if (*s != quote_type) {
1218 : *t++ = '\\';
1219 : *t++ = *s;
1220 : break;
1221 : }
1222 : case '\\':
1223 : case '$':
1224 : *t++ = *s;
1225 : Z_STRLEN_P(zendlval)--;
1226 : break;
1227 : case 'x':
1228 : case 'X':
1229 : if (ZEND_IS_HEX(*(s+1))) {
1230 : char hex_buf[3] = { 0, 0, 0 };
1231 :
1232 : Z_STRLEN_P(zendlval)--; /* for the 'x' */
1233 :
1234 : hex_buf[0] = *(++s);
1235 : Z_STRLEN_P(zendlval)--;
1236 : if (ZEND_IS_HEX(*(s+1))) {
1237 : hex_buf[1] = *(++s);
1238 : Z_STRLEN_P(zendlval)--;
1239 : }
1240 : *t++ = (char) strtol(hex_buf, NULL, 16);
1241 : } else {
1242 : *t++ = '\\';
1243 : *t++ = *s;
1244 : }
1245 : break;
1246 : default:
1247 : /* check for an octal */
1248 : if (ZEND_IS_OCT(*s)) {
1249 : char octal_buf[4] = { 0, 0, 0, 0 };
1250 :
1251 : octal_buf[0] = *s;
1252 : Z_STRLEN_P(zendlval)--;
1253 : if (ZEND_IS_OCT(*(s+1))) {
1254 : octal_buf[1] = *(++s);
1255 : Z_STRLEN_P(zendlval)--;
1256 : if (ZEND_IS_OCT(*(s+1))) {
1257 : octal_buf[2] = *(++s);
1258 : Z_STRLEN_P(zendlval)--;
1259 : }
1260 : }
1261 : *t++ = (char) strtol(octal_buf, NULL, 8);
1262 : } else {
1263 : *t++ = '\\';
1264 : *t++ = *s;
1265 : }
1266 : break;
1267 : }
1268 : } else {
1269 : *t++ = *s;
1270 : }
1271 :
1272 : if (*s == '\n' || (*s == '\r' && (*(s+1) != '\n'))) {
1273 : CG(zend_lineno)++;
1274 : }
1275 : s++;
1276 : }
1277 : *t = 0;
1278 : }
1279 :
1280 : static void zend_scan_binary_single_string(zval *zendlval, char *str, int len TSRMLS_DC)
1281 : {
1282 : register char *s, *t;
1283 : char *end;
1284 :
1285 : ZVAL_STRINGL(zendlval, str, len, 1);
1286 :
1287 : /* convert escape sequences */
1288 : s = t = Z_STRVAL_P(zendlval);
1289 : end = s+Z_STRLEN_P(zendlval);
1290 : while (s<end) {
1291 : if (*s=='\\') {
1292 : s++;
1293 :
1294 : switch(*s) {
1295 : case '\\':
1296 : case '\'':
1297 : *t++ = *s;
1298 : Z_STRLEN_P(zendlval)--;
1299 : break;
1300 : default:
1301 : *t++ = '\\';
1302 : *t++ = *s;
1303 : break;
1304 : }
1305 : } else {
1306 : *t++ = *s;
1307 : }
1308 :
1309 : if (*s == '\n' || (*s == '\r' && (*(s+1) != '\n'))) {
1310 : CG(zend_lineno)++;
1311 : }
1312 : s++;
1313 : }
1314 : *t = 0;
1315 : }
1316 :
1317 :
1318 : int lex_scan(zval *zendlval TSRMLS_DC)
1319 : {
1320 : restart:
1321 : SCNG(yy_text) = YYCURSOR;
1322 :
1323 : yymore_restart:
1324 :
1325 :
1326 : #line 1327 "Zend/zend_language_scanner.c"
1327 : {
1328 : YYCTYPE yych;
1329 5521540 : unsigned int yyaccept = 0;
1330 5521540 : if (YYGETCONDITION() < 5) {
1331 5466085 : if (YYGETCONDITION() < 2) {
1332 5419168 : if (YYGETCONDITION() < 1) {
1333 5387722 : goto yyc_ST_IN_SCRIPTING;
1334 : } else {
1335 31446 : goto yyc_ST_LOOKING_FOR_PROPERTY;
1336 : }
1337 : } else {
1338 46917 : if (YYGETCONDITION() < 3) {
1339 422 : goto yyc_ST_BACKQUOTE;
1340 : } else {
1341 46495 : if (YYGETCONDITION() < 4) {
1342 44281 : goto yyc_ST_DOUBLE_QUOTES;
1343 : } else {
1344 2214 : goto yyc_ST_HEREDOC;
1345 : }
1346 : }
1347 : }
1348 : } else {
1349 55455 : if (YYGETCONDITION() < 7) {
1350 2663 : if (YYGETCONDITION() < 6) {
1351 85 : goto yyc_ST_LOOKING_FOR_VARNAME;
1352 : } else {
1353 2578 : goto yyc_ST_VAR_OFFSET;
1354 : }
1355 : } else {
1356 52792 : if (YYGETCONDITION() < 8) {
1357 51375 : goto yyc_INITIAL;
1358 : } else {
1359 1417 : if (YYGETCONDITION() < 9) {
1360 1380 : goto yyc_ST_END_HEREDOC;
1361 : } else {
1362 37 : goto yyc_ST_NOWDOC;
1363 : }
1364 : }
1365 : }
1366 : }
1367 : /* *********************************** */
1368 51375 : yyc_INITIAL:
1369 : {
1370 : static const unsigned char yybm[] = {
1371 : 0, 0, 0, 0, 0, 0, 0, 0,
1372 : 0, 128, 128, 0, 0, 128, 0, 0,
1373 : 0, 0, 0, 0, 0, 0, 0, 0,
1374 : 0, 0, 0, 0, 0, 0, 0, 0,
1375 : 128, 0, 0, 0, 0, 0, 0, 0,
1376 : 0, 0, 0, 0, 0, 0, 0, 0,
1377 : 0, 0, 0, 0, 0, 0, 0, 0,
1378 : 0, 0, 0, 0, 0, 0, 0, 0,
1379 : 0, 0, 0, 0, 0, 0, 0, 0,
1380 : 0, 0, 0, 0, 0, 0, 0, 0,
1381 : 0, 0, 0, 0, 0, 0, 0, 0,
1382 : 0, 0, 0, 0, 0, 0, 0, 0,
1383 : 0, 0, 0, 0, 0, 0, 0, 0,
1384 : 0, 0, 0, 0, 0, 0, 0, 0,
1385 : 0, 0, 0, 0, 0, 0, 0, 0,
1386 : 0, 0, 0, 0, 0, 0, 0, 0,
1387 : 0, 0, 0, 0, 0, 0, 0, 0,
1388 : 0, 0, 0, 0, 0, 0, 0, 0,
1389 : 0, 0, 0, 0, 0, 0, 0, 0,
1390 : 0, 0, 0, 0, 0, 0, 0, 0,
1391 : 0, 0, 0, 0, 0, 0, 0, 0,
1392 : 0, 0, 0, 0, 0, 0, 0, 0,
1393 : 0, 0, 0, 0, 0, 0, 0, 0,
1394 : 0, 0, 0, 0, 0, 0, 0, 0,
1395 : 0, 0, 0, 0, 0, 0, 0, 0,
1396 : 0, 0, 0, 0, 0, 0, 0, 0,
1397 : 0, 0, 0, 0, 0, 0, 0, 0,
1398 : 0, 0, 0, 0, 0, 0, 0, 0,
1399 : 0, 0, 0, 0, 0, 0, 0, 0,
1400 : 0, 0, 0, 0, 0, 0, 0, 0,
1401 : 0, 0, 0, 0, 0, 0, 0, 0,
1402 : 0, 0, 0, 0, 0, 0, 0, 0,
1403 : };
1404 :
1405 : YYDEBUG(0, *YYCURSOR);
1406 51375 : YYFILL(8);
1407 51375 : yych = *YYCURSOR;
1408 51375 : if (yych != '<') goto yy4;
1409 : YYDEBUG(2, *YYCURSOR);
1410 24832 : yyaccept = 0;
1411 24832 : yych = *(YYMARKER = ++YYCURSOR);
1412 24832 : if (yych <= '?') {
1413 24732 : if (yych == '%') goto yy7;
1414 24730 : if (yych >= '?') goto yy5;
1415 : } else {
1416 100 : if (yych <= 'S') {
1417 3 : if (yych >= 'S') goto yy9;
1418 : } else {
1419 97 : if (yych == 's') goto yy9;
1420 : }
1421 : }
1422 26639 : yy3:
1423 : YYDEBUG(3, *YYCURSOR);
1424 26639 : yyleng = YYCURSOR - SCNG(yy_text);
1425 : #line 2068 "Zend/zend_language_scanner.l"
1426 : {
1427 : if (YYCURSOR > YYLIMIT) {
1428 : return 0;
1429 : }
1430 :
1431 : inline_char_handler:
1432 :
1433 : while (1) {
1434 : YYCTYPE *ptr = memchr(YYCURSOR, '<', YYLIMIT - YYCURSOR);
1435 :
1436 : YYCURSOR = ptr ? ptr + 1 : YYLIMIT;
1437 :
1438 : if (YYCURSOR < YYLIMIT) {
1439 : switch (*YYCURSOR) {
1440 : case '?':
1441 : if (CG(short_tags) || !strncasecmp(YYCURSOR + 1, "php", 3)) { /* Assume [ \t\n\r] follows "php" */
1442 : break;
1443 : }
1444 : continue;
1445 : case '%':
1446 : if (CG(asp_tags)) {
1447 : break;
1448 : }
1449 : continue;
1450 : case 's':
1451 : case 'S':
1452 : /* Probably NOT an opening PHP <script> tag, so don't end the HTML chunk yet
1453 : * If it is, the PHP <script> tag rule checks for any HTML scanned before it */
1454 : YYCURSOR--;
1455 : yymore();
1456 : default:
1457 : continue;
1458 : }
1459 :
1460 : YYCURSOR--;
1461 : }
1462 :
1463 : break;
1464 : }
1465 :
1466 : inline_html:
1467 : yyleng = YYCURSOR - SCNG(yy_text);
1468 :
1469 : Z_STRVAL_P(zendlval) = (char *) estrndup(yytext, yyleng);
1470 : Z_STRLEN_P(zendlval) = yyleng;
1471 : Z_TYPE_P(zendlval) = IS_STRING;
1472 : HANDLE_NEWLINES(yytext, yyleng);
1473 : return T_INLINE_HTML;
1474 : }
1475 : #line 1476 "Zend/zend_language_scanner.c"
1476 26543 : yy4:
1477 : YYDEBUG(4, *YYCURSOR);
1478 26543 : yych = *++YYCURSOR;
1479 26543 : goto yy3;
1480 24729 : yy5:
1481 : YYDEBUG(5, *YYCURSOR);
1482 24729 : yyaccept = 1;
1483 24729 : yych = *(YYMARKER = ++YYCURSOR);
1484 24729 : if (yych <= 'O') {
1485 10 : if (yych == '=') goto yy45;
1486 : } else {
1487 24719 : if (yych <= 'P') goto yy47;
1488 24353 : if (yych == 'p') goto yy47;
1489 : }
1490 6 : yy6:
1491 : YYDEBUG(6, *YYCURSOR);
1492 6 : yyleng = YYCURSOR - SCNG(yy_text);
1493 : #line 2056 "Zend/zend_language_scanner.l"
1494 : {
1495 : if (CG(short_tags)) {
1496 : Z_STRVAL_P(zendlval) = yytext; /* no copying - intentional */
1497 : Z_STRLEN_P(zendlval) = yyleng;
1498 : Z_TYPE_P(zendlval) = IS_STRING;
1499 : BEGIN(ST_IN_SCRIPTING);
1500 : return T_OPEN_TAG;
1501 : } else {
1502 : goto inline_char_handler;
1503 : }
1504 : }
1505 : #line 1506 "Zend/zend_language_scanner.c"
1506 2 : yy7:
1507 : YYDEBUG(7, *YYCURSOR);
1508 2 : ++YYCURSOR;
1509 2 : if ((yych = *YYCURSOR) == '=') goto yy43;
1510 : YYDEBUG(8, *YYCURSOR);
1511 0 : yyleng = YYCURSOR - SCNG(yy_text);
1512 : #line 2033 "Zend/zend_language_scanner.l"
1513 : {
1514 : if (CG(asp_tags)) {
1515 : Z_STRVAL_P(zendlval) = yytext; /* no copying - intentional */
1516 : Z_STRLEN_P(zendlval) = yyleng;
1517 : Z_TYPE_P(zendlval) = IS_STRING;
1518 : BEGIN(ST_IN_SCRIPTING);
1519 : return T_OPEN_TAG;
1520 : } else {
1521 : goto inline_char_handler;
1522 : }
1523 : }
1524 : #line 1525 "Zend/zend_language_scanner.c"
1525 10 : yy9:
1526 : YYDEBUG(9, *YYCURSOR);
1527 10 : yych = *++YYCURSOR;
1528 10 : if (yych == 'C') goto yy11;
1529 10 : if (yych == 'c') goto yy11;
1530 5 : yy10:
1531 : YYDEBUG(10, *YYCURSOR);
1532 5 : YYCURSOR = YYMARKER;
1533 5 : if (yyaccept <= 0) {
1534 5 : goto yy3;
1535 : } else {
1536 0 : goto yy6;
1537 : }
1538 9 : yy11:
1539 : YYDEBUG(11, *YYCURSOR);
1540 9 : yych = *++YYCURSOR;
1541 9 : if (yych == 'R') goto yy12;
1542 9 : if (yych != 'r') goto yy10;
1543 8 : yy12:
1544 : YYDEBUG(12, *YYCURSOR);
1545 8 : yych = *++YYCURSOR;
1546 8 : if (yych == 'I') goto yy13;
1547 8 : if (yych != 'i') goto yy10;
1548 8 : yy13:
1549 : YYDEBUG(13, *YYCURSOR);
1550 8 : yych = *++YYCURSOR;
1551 8 : if (yych == 'P') goto yy14;
1552 8 : if (yych != 'p') goto yy10;
1553 8 : yy14:
1554 : YYDEBUG(14, *YYCURSOR);
1555 8 : yych = *++YYCURSOR;
1556 8 : if (yych == 'T') goto yy15;
1557 8 : if (yych != 't') goto yy10;
1558 8 : yy15:
1559 : YYDEBUG(15, *YYCURSOR);
1560 8 : yych = *++YYCURSOR;
1561 8 : if (yych == 'L') goto yy10;
1562 8 : if (yych == 'l') goto yy10;
1563 8 : goto yy17;
1564 7 : yy16:
1565 : YYDEBUG(16, *YYCURSOR);
1566 7 : ++YYCURSOR;
1567 7 : YYFILL(8);
1568 7 : yych = *YYCURSOR;
1569 15 : yy17:
1570 : YYDEBUG(17, *YYCURSOR);
1571 15 : if (yybm[0+yych] & 128) {
1572 7 : goto yy16;
1573 : }
1574 8 : if (yych == 'L') goto yy18;
1575 8 : if (yych != 'l') goto yy10;
1576 7 : yy18:
1577 : YYDEBUG(18, *YYCURSOR);
1578 7 : yych = *++YYCURSOR;
1579 7 : if (yych == 'A') goto yy19;
1580 7 : if (yych != 'a') goto yy10;
1581 7 : yy19:
1582 : YYDEBUG(19, *YYCURSOR);
1583 7 : yych = *++YYCURSOR;
1584 7 : if (yych == 'N') goto yy20;
1585 7 : if (yych != 'n') goto yy10;
1586 7 : yy20:
1587 : YYDEBUG(20, *YYCURSOR);
1588 7 : yych = *++YYCURSOR;
1589 7 : if (yych == 'G') goto yy21;
1590 7 : if (yych != 'g') goto yy10;
1591 7 : yy21:
1592 : YYDEBUG(21, *YYCURSOR);
1593 7 : yych = *++YYCURSOR;
1594 7 : if (yych == 'U') goto yy22;
1595 7 : if (yych != 'u') goto yy10;
1596 7 : yy22:
1597 : YYDEBUG(22, *YYCURSOR);
1598 7 : yych = *++YYCURSOR;
1599 7 : if (yych == 'A') goto yy23;
1600 7 : if (yych != 'a') goto yy10;
1601 7 : yy23:
1602 : YYDEBUG(23, *YYCURSOR);
1603 7 : yych = *++YYCURSOR;
1604 7 : if (yych == 'G') goto yy24;
1605 7 : if (yych != 'g') goto yy10;
1606 7 : yy24:
1607 : YYDEBUG(24, *YYCURSOR);
1608 7 : yych = *++YYCURSOR;
1609 7 : if (yych == 'E') goto yy25;
1610 7 : if (yych != 'e') goto yy10;
1611 7 : yy25:
1612 : YYDEBUG(25, *YYCURSOR);
1613 7 : ++YYCURSOR;
1614 7 : YYFILL(1);
1615 7 : yych = *YYCURSOR;
1616 : YYDEBUG(26, *YYCURSOR);
1617 7 : if (yych <= '\r') {
1618 0 : if (yych <= 0x08) goto yy10;
1619 0 : if (yych <= '\n') goto yy25;
1620 0 : if (yych <= '\f') goto yy10;
1621 0 : goto yy25;
1622 : } else {
1623 7 : if (yych <= ' ') {
1624 0 : if (yych <= 0x1F) goto yy10;
1625 0 : goto yy25;
1626 : } else {
1627 7 : if (yych != '=') goto yy10;
1628 : }
1629 : }
1630 6 : yy27:
1631 : YYDEBUG(27, *YYCURSOR);
1632 6 : ++YYCURSOR;
1633 6 : YYFILL(5);
1634 6 : yych = *YYCURSOR;
1635 : YYDEBUG(28, *YYCURSOR);
1636 6 : if (yych <= '!') {
1637 0 : if (yych <= '\f') {
1638 0 : if (yych <= 0x08) goto yy10;
1639 0 : if (yych <= '\n') goto yy27;
1640 0 : goto yy10;
1641 : } else {
1642 0 : if (yych <= '\r') goto yy27;
1643 0 : if (yych == ' ') goto yy27;
1644 0 : goto yy10;
1645 : }
1646 : } else {
1647 6 : if (yych <= 'O') {
1648 3 : if (yych <= '"') goto yy30;
1649 2 : if (yych == '\'') goto yy31;
1650 1 : goto yy10;
1651 : } else {
1652 3 : if (yych <= 'P') goto yy29;
1653 3 : if (yych != 'p') goto yy10;
1654 : }
1655 : }
1656 3 : yy29:
1657 : YYDEBUG(29, *YYCURSOR);
1658 3 : yych = *++YYCURSOR;
1659 3 : if (yych == 'H') goto yy42;
1660 3 : if (yych == 'h') goto yy42;
1661 0 : goto yy10;
1662 1 : yy30:
1663 : YYDEBUG(30, *YYCURSOR);
1664 1 : yych = *++YYCURSOR;
1665 1 : if (yych == 'P') goto yy39;
1666 1 : if (yych == 'p') goto yy39;
1667 0 : goto yy10;
1668 1 : yy31:
1669 : YYDEBUG(31, *YYCURSOR);
1670 1 : yych = *++YYCURSOR;
1671 1 : if (yych == 'P') goto yy32;
1672 1 : if (yych != 'p') goto yy10;
1673 1 : yy32:
1674 : YYDEBUG(32, *YYCURSOR);
1675 1 : yych = *++YYCURSOR;
1676 1 : if (yych == 'H') goto yy33;
1677 1 : if (yych != 'h') goto yy10;
1678 1 : yy33:
1679 : YYDEBUG(33, *YYCURSOR);
1680 1 : yych = *++YYCURSOR;
1681 1 : if (yych == 'P') goto yy34;
1682 1 : if (yych != 'p') goto yy10;
1683 1 : yy34:
1684 : YYDEBUG(34, *YYCURSOR);
1685 1 : yych = *++YYCURSOR;
1686 1 : if (yych != '\'') goto yy10;
1687 5 : yy35:
1688 : YYDEBUG(35, *YYCURSOR);
1689 5 : ++YYCURSOR;
1690 5 : YYFILL(1);
1691 5 : yych = *YYCURSOR;
1692 : YYDEBUG(36, *YYCURSOR);
1693 5 : if (yych <= '\r') {
1694 0 : if (yych <= 0x08) goto yy10;
1695 0 : if (yych <= '\n') goto yy35;
1696 0 : if (yych <= '\f') goto yy10;
1697 0 : goto yy35;
1698 : } else {
1699 5 : if (yych <= ' ') {
1700 0 : if (yych <= 0x1F) goto yy10;
1701 0 : goto yy35;
1702 : } else {
1703 5 : if (yych != '>') goto yy10;
1704 : }
1705 : }
1706 : YYDEBUG(37, *YYCURSOR);
1707 5 : ++YYCURSOR;
1708 : YYDEBUG(38, *YYCURSOR);
1709 5 : yyleng = YYCURSOR - SCNG(yy_text);
1710 : #line 1990 "Zend/zend_language_scanner.l"
1711 : {
1712 : YYCTYPE *bracket = zend_memrchr(yytext, '<', yyleng - (sizeof("script language=php>") - 1));
1713 :
1714 : if (bracket != SCNG(yy_text)) {
1715 : /* Handle previously scanned HTML, as possible <script> tags found are assumed to not be PHP's */
1716 : YYCURSOR = bracket;
1717 : goto inline_html;
1718 : }
1719 :
1720 : HANDLE_NEWLINES(yytext, yyleng);
1721 : Z_STRVAL_P(zendlval) = yytext; /* no copying - intentional */
1722 : Z_STRLEN_P(zendlval) = yyleng;
1723 : Z_TYPE_P(zendlval) = IS_STRING;
1724 : BEGIN(ST_IN_SCRIPTING);
1725 : return T_OPEN_TAG;
1726 : }
1727 : #line 1728 "Zend/zend_language_scanner.c"
1728 1 : yy39:
1729 : YYDEBUG(39, *YYCURSOR);
1730 1 : yych = *++YYCURSOR;
1731 1 : if (yych == 'H') goto yy40;
1732 1 : if (yych != 'h') goto yy10;
1733 1 : yy40:
1734 : YYDEBUG(40, *YYCURSOR);
1735 1 : yych = *++YYCURSOR;
1736 1 : if (yych == 'P') goto yy41;
1737 1 : if (yych != 'p') goto yy10;
1738 1 : yy41:
1739 : YYDEBUG(41, *YYCURSOR);
1740 1 : yych = *++YYCURSOR;
1741 1 : if (yych == '"') goto yy35;
1742 0 : goto yy10;
1743 3 : yy42:
1744 : YYDEBUG(42, *YYCURSOR);
1745 3 : yych = *++YYCURSOR;
1746 3 : if (yych == 'P') goto yy35;
1747 3 : if (yych == 'p') goto yy35;
1748 0 : goto yy10;
1749 2 : yy43:
1750 : YYDEBUG(43, *YYCURSOR);
1751 2 : ++YYCURSOR;
1752 : YYDEBUG(44, *YYCURSOR);
1753 2 : yyleng = YYCURSOR - SCNG(yy_text);
1754 : #line 2007 "Zend/zend_language_scanner.l"
1755 : {
1756 : if (CG(asp_tags)) {
1757 : Z_STRVAL_P(zendlval) = yytext; /* no copying - intentional */
1758 : Z_STRLEN_P(zendlval) = yyleng;
1759 : Z_TYPE_P(zendlval) = IS_STRING;
1760 : BEGIN(ST_IN_SCRIPTING);
1761 : return T_OPEN_TAG_WITH_ECHO;
1762 : } else {
1763 : goto inline_char_handler;
1764 : }
1765 : }
1766 : #line 1767 "Zend/zend_language_scanner.c"
1767 4 : yy45:
1768 : YYDEBUG(45, *YYCURSOR);
1769 4 : ++YYCURSOR;
1770 : YYDEBUG(46, *YYCURSOR);
1771 4 : yyleng = YYCURSOR - SCNG(yy_text);
1772 : #line 2020 "Zend/zend_language_scanner.l"
1773 : {
1774 : if (CG(short_tags)) {
1775 : Z_STRVAL_P(zendlval) = yytext; /* no copying - intentional */
1776 : Z_STRLEN_P(zendlval) = yyleng;
1777 : Z_TYPE_P(zendlval) = IS_STRING;
1778 : BEGIN(ST_IN_SCRIPTING);
1779 : return T_OPEN_TAG_WITH_ECHO;
1780 : } else {
1781 : goto inline_char_handler;
1782 : }
1783 : }
1784 : #line 1785 "Zend/zend_language_scanner.c"
1785 24719 : yy47:
1786 : YYDEBUG(47, *YYCURSOR);
1787 24719 : yych = *++YYCURSOR;
1788 24719 : if (yych == 'H') goto yy48;
1789 24353 : if (yych != 'h') goto yy10;
1790 24719 : yy48:
1791 : YYDEBUG(48, *YYCURSOR);
1792 24719 : yych = *++YYCURSOR;
1793 24719 : if (yych == 'P') goto yy49;
1794 24353 : if (yych != 'p') goto yy10;
1795 24719 : yy49:
1796 : YYDEBUG(49, *YYCURSOR);
1797 24719 : yych = *++YYCURSOR;
1798 24719 : if (yych <= '\f') {
1799 19740 : if (yych <= 0x08) goto yy10;
1800 19740 : if (yych >= '\v') goto yy10;
1801 : } else {
1802 4979 : if (yych <= '\r') goto yy52;
1803 4832 : if (yych != ' ') goto yy10;
1804 : }
1805 24719 : yy50:
1806 : YYDEBUG(50, *YYCURSOR);
1807 24719 : ++YYCURSOR;
1808 24719 : yy51:
1809 : YYDEBUG(51, *YYCURSOR);
1810 24719 : yyleng = YYCURSOR - SCNG(yy_text);
1811 : #line 2046 "Zend/zend_language_scanner.l"
1812 : {
1813 : Z_STRVAL_P(zendlval) = yytext; /* no copying - intentional */
1814 : Z_STRLEN_P(zendlval) = yyleng;
1815 : Z_TYPE_P(zendlval) = IS_STRING;
1816 : HANDLE_NEWLINE(yytext[yyleng-1]);
1817 : BEGIN(ST_IN_SCRIPTING);
1818 : return T_OPEN_TAG;
1819 : }
1820 : #line 1821 "Zend/zend_language_scanner.c"
1821 147 : yy52:
1822 : YYDEBUG(52, *YYCURSOR);
1823 147 : ++YYCURSOR;
1824 147 : if ((yych = *YYCURSOR) == '\n') goto yy50;
1825 0 : goto yy51;
1826 : }
1827 : /* *********************************** */
1828 422 : yyc_ST_BACKQUOTE:
1829 : {
1830 : static const unsigned char yybm[] = {
1831 : 0, 0, 0, 0, 0, 0, 0, 0,
1832 : 0, 0, 0, 0, 0, 0, 0, 0,
1833 : 0, 0, 0, 0, 0, 0, 0, 0,
1834 : 0, 0, 0, 0, 0, 0, 0, 0,
1835 : 0, 0, 0, 0, 0, 0, 0, 0,
1836 : 0, 0, 0, 0, 0, 0, 0, 0,
1837 : 128, 128, 128, 128, 128, 128, 128, 128,
1838 : 128, 128, 0, 0, 0, 0, 0, 0,
1839 : 0, 128, 128, 128, 128, 128, 128, 128,
1840 : 128, 128, 128, 128, 128, 128, 128, 128,
1841 : 128, 128, 128, 128, 128, 128, 128, 128,
1842 : 128, 128, 128, 0, 0, 0, 0, 128,
1843 : 0, 128, 128, 128, 128, 128, 128, 128,
1844 : 128, 128, 128, 128, 128, 128, 128, 128,
1845 : 128, 128, 128, 128, 128, 128, 128, 128,
1846 : 128, 128, 128, 0, 0, 0, 0, 128,
1847 : 128, 128, 128, 128, 128, 128, 128, 128,
1848 : 128, 128, 128, 128, 128, 128, 128, 128,
1849 : 128, 128, 128, 128, 128, 128, 128, 128,
1850 : 128, 128, 128, 128, 128, 128, 128, 128,
1851 : 128, 128, 128, 128, 128, 128, 128, 128,
1852 : 128, 128, 128, 128, 128, 128, 128, 128,
1853 : 128, 128, 128, 128, 128, 128, 128, 128,
1854 : 128, 128, 128, 128, 128, 128, 128, 128,
1855 : 128, 128, 128, 128, 128, 128, 128, 128,
1856 : 128, 128, 128, 128, 128, 128, 128, 128,
1857 : 128, 128, 128, 128, 128, 128, 128, 128,
1858 : 128, 128, 128, 128, 128, 128, 128, 128,
1859 : 128, 128, 128, 128, 128, 128, 128, 128,
1860 : 128, 128, 128, 128, 128, 128, 128, 128,
1861 : 128, 128, 128, 128, 128, 128, 128, 128,
1862 : 128, 128, 128, 128, 128, 128, 128, 128,
1863 : };
1864 : YYDEBUG(53, *YYCURSOR);
1865 422 : YYFILL(2);
1866 422 : yych = *YYCURSOR;
1867 422 : if (yych <= '_') {
1868 305 : if (yych != '$') goto yy60;
1869 : } else {
1870 117 : if (yych <= '`') goto yy58;
1871 12 : if (yych == '{') goto yy57;
1872 12 : goto yy60;
1873 : }
1874 : YYDEBUG(55, *YYCURSOR);
1875 137 : ++YYCURSOR;
1876 137 : if ((yych = *YYCURSOR) <= '_') {
1877 0 : if (yych <= '@') goto yy56;
1878 0 : if (yych <= 'Z') goto yy63;
1879 0 : if (yych >= '_') goto yy63;
1880 : } else {
1881 137 : if (yych <= 'z') {
1882 137 : if (yych >= 'a') goto yy63;
1883 : } else {
1884 0 : if (yych <= '{') goto yy66;
1885 0 : if (yych >= 0x7F) goto yy63;
1886 : }
1887 : }
1888 180 : yy56:
1889 : YYDEBUG(56, *YYCURSOR);
1890 180 : yyleng = YYCURSOR - SCNG(yy_text);
1891 : #line 2510 "Zend/zend_language_scanner.l"
1892 : {
1893 : if (YYCURSOR > YYLIMIT) {
1894 : return 0;
1895 : }
1896 : if (yytext[0] == '\\' && YYCURSOR < YYLIMIT) {
1897 : YYCURSOR++;
1898 : }
1899 :
1900 : while (YYCURSOR < YYLIMIT) {
1901 : switch (*YYCURSOR++) {
1902 : case '`':
1903 : break;
1904 : case '$':
1905 : if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {
1906 : break;
1907 : }
1908 : continue;
1909 : case '{':
1910 : if (*YYCURSOR == '$') {
1911 : break;
1912 : }
1913 : continue;
1914 : case '\\':
1915 : if (YYCURSOR < YYLIMIT) {
1916 : YYCURSOR++;
1917 : }
1918 : /* fall through */
1919 : default:
1920 : continue;
1921 : }
1922 :
1923 : YYCURSOR--;
1924 : break;
1925 : }
1926 :
1927 : yyleng = YYCURSOR - SCNG(yy_text);
1928 :
1929 : if (CG(literal_type) == IS_UNICODE) {
1930 : return zend_scan_unicode_escape_string(zendlval, yytext, yyleng, 0x60 /*'`'*/, T_ENCAPSED_AND_WHITESPACE TSRMLS_CC);
1931 : } else {
1932 : zend_scan_binary_escape_string(zendlval, yytext, yyleng, '`' TSRMLS_CC);
1933 : return T_ENCAPSED_AND_WHITESPACE;
1934 : }
1935 : }
1936 : #line 1937 "Zend/zend_language_scanner.c"
1937 0 : yy57:
1938 : YYDEBUG(57, *YYCURSOR);
1939 0 : yych = *++YYCURSOR;
1940 0 : if (yych == '$') goto yy61;
1941 0 : goto yy56;
1942 105 : yy58:
1943 : YYDEBUG(58, *YYCURSOR);
1944 105 : ++YYCURSOR;
1945 : YYDEBUG(59, *YYCURSOR);
1946 105 : yyleng = YYCURSOR - SCNG(yy_text);
1947 : #line 2450 "Zend/zend_language_scanner.l"
1948 : {
1949 : BEGIN(ST_IN_SCRIPTING);
1950 : return '`';
1951 : }
1952 : #line 1953 "Zend/zend_language_scanner.c"
1953 180 : yy60:
1954 : YYDEBUG(60, *YYCURSOR);
1955 180 : yych = *++YYCURSOR;
1956 180 : goto yy56;
1957 0 : yy61:
1958 : YYDEBUG(61, *YYCURSOR);
1959 0 : ++YYCURSOR;
1960 : YYDEBUG(62, *YYCURSOR);
1961 0 : yyleng = YYCURSOR - SCNG(yy_text);
1962 : #line 2437 "Zend/zend_language_scanner.l"
1963 : {
1964 : Z_LVAL_P(zendlval) = (long) '{';
1965 : yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
1966 : yyless(1);
1967 : return T_CURLY_OPEN;
1968 : }
1969 : #line 1970 "Zend/zend_language_scanner.c"
1970 590 : yy63:
1971 : YYDEBUG(63, *YYCURSOR);
1972 590 : yyaccept = 0;
1973 590 : YYMARKER = ++YYCURSOR;
1974 590 : YYFILL(3);
1975 590 : yych = *YYCURSOR;
1976 : YYDEBUG(64, *YYCURSOR);
1977 590 : if (yybm[0+yych] & 128) {
1978 453 : goto yy63;
1979 : }
1980 137 : if (yych == '-') goto yy68;
1981 137 : if (yych == '[') goto yy70;
1982 137 : yy65:
1983 : YYDEBUG(65, *YYCURSOR);
1984 137 : yyleng = YYCURSOR - SCNG(yy_text);
1985 : #line 2149 "Zend/zend_language_scanner.l"
1986 : {
1987 : if (!zend_copy_scanner_string(zendlval, (yytext+1), (yyleng-1), IS_UNICODE, SCNG(output_conv) TSRMLS_CC)) {
1988 : return 0;
1989 : }
1990 : if (!zend_check_and_normalize_identifier(zendlval)) {
1991 : return 0;
1992 : }
1993 : return T_VARIABLE;
1994 : }
1995 : #line 1996 "Zend/zend_language_scanner.c"
1996 0 : yy66:
1997 : YYDEBUG(66, *YYCURSOR);
1998 0 : ++YYCURSOR;
1999 : YYDEBUG(67, *YYCURSOR);
2000 0 : yyleng = YYCURSOR - SCNG(yy_text);
2001 : #line 1773 "Zend/zend_language_scanner.l"
2002 : {
2003 : yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
2004 : return T_DOLLAR_OPEN_CURLY_BRACES;
2005 : }
2006 : #line 2007 "Zend/zend_language_scanner.c"
2007 0 : yy68:
2008 : YYDEBUG(68, *YYCURSOR);
2009 0 : yych = *++YYCURSOR;
2010 0 : if (yych == '>') goto yy72;
2011 0 : yy69:
2012 : YYDEBUG(69, *YYCURSOR);
2013 0 : YYCURSOR = YYMARKER;
2014 0 : goto yy65;
2015 0 : yy70:
2016 : YYDEBUG(70, *YYCURSOR);
2017 0 : ++YYCURSOR;
2018 : YYDEBUG(71, *YYCURSOR);
2019 0 : yyleng = YYCURSOR - SCNG(yy_text);
2020 : #line 2136 "Zend/zend_language_scanner.l"
2021 : {
2022 : yyless(yyleng - 1);
2023 : yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
2024 :
2025 : if (!zend_copy_scanner_string(zendlval, (yytext+1), (yyleng-1), IS_UNICODE, SCNG(output_conv) TSRMLS_CC)) {
2026 : return 0;
2027 : }
2028 : if (!zend_check_and_normalize_identifier(zendlval)) {
2029 : return 0;
2030 : }
2031 : return T_VARIABLE;
2032 : }
2033 : #line 2034 "Zend/zend_language_scanner.c"
2034 0 : yy72:
2035 : YYDEBUG(72, *YYCURSOR);
2036 0 : yych = *++YYCURSOR;
2037 0 : if (yych <= '_') {
2038 0 : if (yych <= '@') goto yy69;
2039 0 : if (yych <= 'Z') goto yy73;
2040 0 : if (yych <= '^') goto yy69;
2041 : } else {
2042 0 : if (yych <= '`') goto yy69;
2043 0 : if (yych <= 'z') goto yy73;
2044 0 : if (yych <= '~') goto yy69;
2045 : }
2046 0 : yy73:
2047 : YYDEBUG(73, *YYCURSOR);
2048 0 : ++YYCURSOR;
2049 : YYDEBUG(74, *YYCURSOR);
2050 0 : yyleng = YYCURSOR - SCNG(yy_text);
2051 : #line 2121 "Zend/zend_language_scanner.l"
2052 : {
2053 : yyless(yyleng - 3);
2054 : yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
2055 :
2056 : if (!zend_copy_scanner_string(zendlval, (yytext+1), (yyleng-1), IS_UNICODE, SCNG(output_conv) TSRMLS_CC)) {
2057 : return 0;
2058 : }
2059 : if (!zend_check_and_normalize_identifier(zendlval)) {
2060 : return 0;
2061 : }
2062 : return T_VARIABLE;
2063 : }
2064 : #line 2065 "Zend/zend_language_scanner.c"
2065 : }
2066 : /* *********************************** */
2067 44281 : yyc_ST_DOUBLE_QUOTES:
2068 : {
2069 : static const unsigned char yybm[] = {
2070 : 0, 0, 0, 0, 0, 0, 0, 0,
2071 : 0, 0, 0, 0, 0, 0, 0, 0,
2072 : 0, 0, 0, 0, 0, 0, 0, 0,
2073 : 0, 0, 0, 0, 0, 0, 0, 0,
2074 : 0, 0, 0, 0, 0, 0, 0, 0,
2075 : 0, 0, 0, 0, 0, 0, 0, 0,
2076 : 128, 128, 128, 128, 128, 128, 128, 128,
2077 : 128, 128, 0, 0, 0, 0, 0, 0,
2078 : 0, 128, 128, 128, 128, 128, 128, 128,
2079 : 128, 128, 128, 128, 128, 128, 128, 128,
2080 : 128, 128, 128, 128, 128, 128, 128, 128,
2081 : 128, 128, 128, 0, 0, 0, 0, 128,
2082 : 0, 128, 128, 128, 128, 128, 128, 128,
2083 : 128, 128, 128, 128, 128, 128, 128, 128,
2084 : 128, 128, 128, 128, 128, 128, 128, 128,
2085 : 128, 128, 128, 0, 0, 0, 0, 128,
2086 : 128, 128, 128, 128, 128, 128, 128, 128,
2087 : 128, 128, 128, 128, 128, 128, 128, 128,
2088 : 128, 128, 128, 128, 128, 128, 128, 128,
2089 : 128, 128, 128, 128, 128, 128, 128, 128,
2090 : 128, 128, 128, 128, 128, 128, 128, 128,
2091 : 128, 128, 128, 128, 128, 128, 128, 128,
2092 : 128, 128, 128, 128, 128, 128, 128, 128,
2093 : 128, 128, 128, 128, 128, 128, 128, 128,
2094 : 128, 128, 128, 128, 128, 128, 128, 128,
2095 : 128, 128, 128, 128, 128, 128, 128, 128,
2096 : 128, 128, 128, 128, 128, 128, 128, 128,
2097 : 128, 128, 128, 128, 128, 128, 128, 128,
2098 : 128, 128, 128, 128, 128, 128, 128, 128,
2099 : 128, 128, 128, 128, 128, 128, 128, 128,
2100 : 128, 128, 128, 128, 128, 128, 128, 128,
2101 : 128, 128, 128, 128, 128, 128, 128, 128,
2102 : };
2103 : YYDEBUG(75, *YYCURSOR);
2104 44281 : YYFILL(2);
2105 44281 : yych = *YYCURSOR;
2106 44281 : if (yych <= '#') {
2107 12503 : if (yych == '"') goto yy80;
2108 2002 : goto yy82;
2109 : } else {
2110 31778 : if (yych <= '$') goto yy77;
2111 16661 : if (yych == '{') goto yy79;
2112 16427 : goto yy82;
2113 : }
2114 15117 : yy77:
2115 : YYDEBUG(77, *YYCURSOR);
2116 15117 : ++YYCURSOR;
2117 15117 : if ((yych = *YYCURSOR) <= '_') {
2118 55 : if (yych <= '@') goto yy78;
2119 54 : if (yych <= 'Z') goto yy85;
2120 0 : if (yych >= '_') goto yy85;
2121 : } else {
2122 15062 : if (yych <= 'z') {
2123 14977 : if (yych >= 'a') goto yy85;
2124 : } else {
2125 85 : if (yych <= '{') goto yy88;
2126 0 : if (yych >= 0x7F) goto yy85;
2127 : }
2128 : }
2129 18430 : yy78:
2130 : YYDEBUG(78, *YYCURSOR);
2131 18430 : yyleng = YYCURSOR - SCNG(yy_text);
2132 : #line 2456 "Zend/zend_language_scanner.l"
2133 : {
2134 : if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) {
2135 : YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1;
2136 : SET_DOUBLE_QUOTES_SCANNED_LENGTH(0);
2137 :
2138 : goto double_quotes_scan_done;
2139 : }
2140 :
2141 : if (YYCURSOR > YYLIMIT) {
2142 : return 0;
2143 : }
2144 : if (yytext[0] == '\\' && YYCURSOR < YYLIMIT) {
2145 : YYCURSOR++;
2146 : }
2147 :
2148 : while (YYCURSOR < YYLIMIT) {
2149 : switch (*YYCURSOR++) {
2150 : case '"':
2151 : break;
2152 : case '$':
2153 : if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {
2154 : break;
2155 : }
2156 : continue;
2157 : case '{':
2158 : if (*YYCURSOR == '$') {
2159 : break;
2160 : }
2161 : continue;
2162 : case '\\':
2163 : if (YYCURSOR < YYLIMIT) {
2164 : YYCURSOR++;
2165 : }
2166 : /* fall through */
2167 : default:
2168 : continue;
2169 : }
2170 :
2171 : YYCURSOR--;
2172 : break;
2173 : }
2174 :
2175 : double_quotes_scan_done:
2176 : yyleng = YYCURSOR - SCNG(yy_text);
2177 :
2178 : if (CG(literal_type) == IS_UNICODE) {
2179 : return zend_scan_unicode_escape_string(zendlval, yytext, yyleng, 0x22 /*'"'*/, T_ENCAPSED_AND_WHITESPACE TSRMLS_CC);
2180 : } else {
2181 : zend_scan_binary_escape_string(zendlval, yytext, yyleng, '"' TSRMLS_CC);
2182 : return T_ENCAPSED_AND_WHITESPACE;
2183 : }
2184 : }
2185 : #line 2186 "Zend/zend_language_scanner.c"
2186 234 : yy79:
2187 : YYDEBUG(79, *YYCURSOR);
2188 234 : yych = *++YYCURSOR;
2189 234 : if (yych == '$') goto yy83;
2190 0 : goto yy78;
2191 10501 : yy80:
2192 : YYDEBUG(80, *YYCURSOR);
2193 10501 : ++YYCURSOR;
2194 : YYDEBUG(81, *YYCURSOR);
2195 10501 : yyleng = YYCURSOR - SCNG(yy_text);
2196 : #line 2445 "Zend/zend_language_scanner.l"
2197 : {
2198 : BEGIN(ST_IN_SCRIPTING);
2199 : return '"';
2200 : }
2201 : #line 2202 "Zend/zend_language_scanner.c"
2202 18429 : yy82:
2203 : YYDEBUG(82, *YYCURSOR);
2204 18429 : yych = *++YYCURSOR;
2205 18429 : goto yy78;
2206 234 : yy83:
2207 : YYDEBUG(83, *YYCURSOR);
2208 234 : ++YYCURSOR;
2209 : YYDEBUG(84, *YYCURSOR);
2210 234 : yyleng = YYCURSOR - SCNG(yy_text);
2211 : #line 2437 "Zend/zend_language_scanner.l"
2212 : {
2213 : Z_LVAL_P(zendlval) = (long) '{';
2214 : yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
2215 : yyless(1);
2216 : return T_CURLY_OPEN;
2217 : }
2218 : #line 2219 "Zend/zend_language_scanner.c"
2219 63099 : yy85:
2220 : YYDEBUG(85, *YYCURSOR);
2221 63099 : yyaccept = 0;
2222 63099 : YYMARKER = ++YYCURSOR;
2223 63099 : YYFILL(3);
2224 63099 : yych = *YYCURSOR;
2225 : YYDEBUG(86, *YYCURSOR);
2226 63099 : if (yybm[0+yych] & 128) {
2227 48068 : goto yy85;
2228 : }
2229 15031 : if (yych == '-') goto yy90;
2230 14716 : if (yych == '[') goto yy92;
2231 14113 : yy87:
2232 : YYDEBUG(87, *YYCURSOR);
2233 14113 : yyleng = YYCURSOR - SCNG(yy_text);
2234 : #line 2149 "Zend/zend_language_scanner.l"
2235 : {
2236 : if (!zend_copy_scanner_string(zendlval, (yytext+1), (yyleng-1), IS_UNICODE, SCNG(output_conv) TSRMLS_CC)) {
2237 : return 0;
2238 : }
2239 : if (!zend_check_and_normalize_identifier(zendlval)) {
2240 : return 0;
2241 : }
2242 : return T_VARIABLE;
2243 : }
2244 : #line 2245 "Zend/zend_language_scanner.c"
2245 85 : yy88:
2246 : YYDEBUG(88, *YYCURSOR);
2247 85 : ++YYCURSOR;
2248 : YYDEBUG(89, *YYCURSOR);
2249 85 : yyleng = YYCURSOR - SCNG(yy_text);
2250 : #line 1773 "Zend/zend_language_scanner.l"
2251 : {
2252 : yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
2253 : return T_DOLLAR_OPEN_CURLY_BRACES;
2254 : }
2255 : #line 2256 "Zend/zend_language_scanner.c"
2256 315 : yy90:
2257 : YYDEBUG(90, *YYCURSOR);
2258 315 : yych = *++YYCURSOR;
2259 315 : if (yych == '>') goto yy94;
2260 256 : yy91:
2261 : YYDEBUG(91, *YYCURSOR);
2262 256 : YYCURSOR = YYMARKER;
2263 256 : goto yy87;
2264 859 : yy92:
2265 : YYDEBUG(92, *YYCURSOR);
2266 859 : ++YYCURSOR;
2267 : YYDEBUG(93, *YYCURSOR);
2268 859 : yyleng = YYCURSOR - SCNG(yy_text);
2269 : #line 2136 "Zend/zend_language_scanner.l"
2270 : {
2271 : yyless(yyleng - 1);
2272 : yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
2273 :
2274 : if (!zend_copy_scanner_string(zendlval, (yytext+1), (yyleng-1), IS_UNICODE, SCNG(output_conv) TSRMLS_CC)) {
2275 : return 0;
2276 : }
2277 : if (!zend_check_and_normalize_identifier(zendlval)) {
2278 : return 0;
2279 : }
2280 : return T_VARIABLE;
2281 : }
2282 : #line 2283 "Zend/zend_language_scanner.c"
2283 59 : yy94:
2284 : YYDEBUG(94, *YYCURSOR);
2285 59 : yych = *++YYCURSOR;
2286 59 : if (yych <= '_') {
2287 0 : if (yych <= '@') goto yy91;
2288 0 : if (yych <= 'Z') goto yy95;
2289 0 : if (yych <= '^') goto yy91;
2290 : } else {
2291 59 : if (yych <= '`') goto yy91;
2292 59 : if (yych <= 'z') goto yy95;
2293 0 : if (yych <= '~') goto yy91;
2294 : }
2295 59 : yy95:
2296 : YYDEBUG(95, *YYCURSOR);
2297 59 : ++YYCURSOR;
2298 : YYDEBUG(96, *YYCURSOR);
2299 59 : yyleng = YYCURSOR - SCNG(yy_text);
2300 : #line 2121 "Zend/zend_language_scanner.l"
2301 : {
2302 : yyless(yyleng - 3);
2303 : yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
2304 :
2305 : if (!zend_copy_scanner_string(zendlval, (yytext+1), (yyleng-1), IS_UNICODE, SCNG(output_conv) TSRMLS_CC)) {
2306 : return 0;
2307 : }
2308 : if (!zend_check_and_normalize_identifier(zendlval)) {
2309 : return 0;
2310 : }
2311 : return T_VARIABLE;
2312 : }
2313 : #line 2314 "Zend/zend_language_scanner.c"
2314 : }
2315 : /* *********************************** */
2316 1380 : yyc_ST_END_HEREDOC:
2317 : YYDEBUG(97, *YYCURSOR);
2318 1380 : YYFILL(1);
2319 1380 : yych = *YYCURSOR;
2320 : YYDEBUG(99, *YYCURSOR);
2321 1380 : ++YYCURSOR;
2322 : YYDEBUG(100, *YYCURSOR);
2323 1380 : yyleng = YYCURSOR - SCNG(yy_text);
2324 : #line 2424 "Zend/zend_language_scanner.l"
2325 : {
2326 : YYCURSOR += CG(heredoc_len) - 1;
2327 : yyleng = CG(heredoc_len);
2328 :
2329 : Z_STRVAL_P(zendlval) = CG(heredoc);
2330 : Z_STRLEN_P(zendlval) = CG(heredoc_len);
2331 : CG(heredoc) = NULL;
2332 : CG(heredoc_len) = 0;
2333 : BEGIN(ST_IN_SCRIPTING);
2334 : return T_END_HEREDOC;
2335 : }
2336 : #line 2337 "Zend/zend_language_scanner.c"
2337 : /* *********************************** */
2338 2214 : yyc_ST_HEREDOC:
2339 : {
2340 : static const unsigned char yybm[] = {
2341 : 0, 0, 0, 0, 0, 0, 0, 0,
2342 : 0, 0, 0, 0, 0, 0, 0, 0,
2343 : 0, 0, 0, 0, 0, 0, 0, 0,
2344 : 0, 0, 0, 0, 0, 0, 0, 0,
2345 : 0, 0, 0, 0, 0, 0, 0, 0,
2346 : 0, 0, 0, 0, 0, 0, 0, 0,
2347 : 128, 128, 128, 128, 128, 128, 128, 128,
2348 : 128, 128, 0, 0, 0, 0, 0, 0,
2349 : 0, 128, 128, 128, 128, 128, 128, 128,
2350 : 128, 128, 128, 128, 128, 128, 128, 128,
2351 : 128, 128, 128, 128, 128, 128, 128, 128,
2352 : 128, 128, 128, 0, 0, 0, 0, 128,
2353 : 0, 128, 128, 128, 128, 128, 128, 128,
2354 : 128, 128, 128, 128, 128, 128, 128, 128,
2355 : 128, 128, 128, 128, 128, 128, 128, 128,
2356 : 128, 128, 128, 0, 0, 0, 0, 128,
2357 : 128, 128, 128, 128, 128, 128, 128, 128,
2358 : 128, 128, 128, 128, 128, 128, 128, 128,
2359 : 128, 128, 128, 128, 128, 128, 128, 128,
2360 : 128, 128, 128, 128, 128, 128, 128, 128,
2361 : 128, 128, 128, 128, 128, 128, 128, 128,
2362 : 128, 128, 128, 128, 128, 128, 128, 128,
2363 : 128, 128, 128, 128, 128, 128, 128, 128,
2364 : 128, 128, 128, 128, 128, 128, 128, 128,
2365 : 128, 128, 128, 128, 128, 128, 128, 128,
2366 : 128, 128, 128, 128, 128, 128, 128, 128,
2367 : 128, 128, 128, 128, 128, 128, 128, 128,
2368 : 128, 128, 128, 128, 128, 128, 128, 128,
2369 : 128, 128, 128, 128, 128, 128, 128, 128,
2370 : 128, 128, 128, 128, 128, 128, 128, 128,
2371 : 128, 128, 128, 128, 128, 128, 128, 128,
2372 : 128, 128, 128, 128, 128, 128, 128, 128,
2373 : };
2374 : YYDEBUG(101, *YYCURSOR);
2375 2214 : YYFILL(2);
2376 2214 : yych = *YYCURSOR;
2377 2214 : if (yych == '$') goto yy103;
2378 1772 : if (yych == '{') goto yy105;
2379 1745 : goto yy106;
2380 442 : yy103:
2381 : YYDEBUG(103, *YYCURSOR);
2382 442 : ++YYCURSOR;
2383 442 : if ((yych = *YYCURSOR) <= '_') {
2384 2 : if (yych <= '@') goto yy104;
2385 2 : if (yych <= 'Z') goto yy109;
2386 0 : if (yych >= '_') goto yy109;
2387 : } else {
2388 440 : if (yych <= 'z') {
2389 440 : if (yych >= 'a') goto yy109;
2390 : } else {
2391 0 : if (yych <= '{') goto yy112;
2392 0 : if (yych >= 0x7F) goto yy109;
2393 : }
2394 : }
2395 1745 : yy104:
2396 : YYDEBUG(104, *YYCURSOR);
2397 1745 : yyleng = YYCURSOR - SCNG(yy_text);
2398 : #line 2556 "Zend/zend_language_scanner.l"
2399 : {
2400 : int newline = 0;
2401 :
2402 : if (YYCURSOR > YYLIMIT) {
2403 : return 0;
2404 : }
2405 :
2406 : YYCURSOR--;
2407 :
2408 : while (YYCURSOR < YYLIMIT) {
2409 : switch (*YYCURSOR++) {
2410 : case '\r':
2411 : if (*YYCURSOR == '\n') {
2412 : YYCURSOR++;
2413 : }
2414 : /* fall through */
2415 : case '\n':
2416 : /* Check for ending label on the next line */
2417 : if (IS_LABEL_START(*YYCURSOR) && CG(heredoc_len) < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, CG(heredoc), CG(heredoc_len))) {
2418 : YYCTYPE *end = YYCURSOR + CG(heredoc_len);
2419 :
2420 : if (*end == ';') {
2421 : end++;
2422 : }
2423 :
2424 : if (*end == '\n' || *end == '\r') {
2425 : /* newline before label will be subtracted from returned text, but
2426 : * yyleng/yytext will include it, for zend_highlight/strip, tokenizer, etc. */
2427 : if (YYCURSOR[-2] == '\r' && YYCURSOR[-1] == '\n') {
2428 : newline = 2; /* Windows newline */
2429 : } else {
2430 : newline = 1;
2431 : }
2432 :
2433 : CG(increment_lineno) = 1; /* For newline before label */
2434 : BEGIN(ST_END_HEREDOC);
2435 :
2436 : goto heredoc_scan_done;
2437 : }
2438 : }
2439 : continue;
2440 : case '$':
2441 : if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {
2442 : break;
2443 : }
2444 : continue;
2445 : case '{':
2446 : if (*YYCURSOR == '$') {
2447 : break;
2448 : }
2449 : continue;
2450 : case '\\':
2451 : if (YYCURSOR < YYLIMIT && *YYCURSOR != '\n' && *YYCURSOR != '\r') {
2452 : YYCURSOR++;
2453 : }
2454 : /* fall through */
2455 : default:
2456 : continue;
2457 : }
2458 :
2459 : YYCURSOR--;
2460 : break;
2461 : }
2462 :
2463 : heredoc_scan_done:
2464 : yyleng = YYCURSOR - SCNG(yy_text);
2465 :
2466 : if (CG(literal_type) == IS_UNICODE) {
2467 : return zend_scan_unicode_escape_string(zendlval, yytext, yyleng - newline, 0, T_ENCAPSED_AND_WHITESPACE TSRMLS_CC);
2468 : } else {
2469 : zend_scan_binary_escape_string(zendlval, yytext, yyleng - newline, 0 TSRMLS_CC);
2470 : return T_ENCAPSED_AND_WHITESPACE;
2471 : }
2472 : }
2473 : #line 2474 "Zend/zend_language_scanner.c"
2474 27 : yy105:
2475 : YYDEBUG(105, *YYCURSOR);
2476 27 : yych = *++YYCURSOR;
2477 27 : if (yych == '$') goto yy107;
2478 0 : goto yy104;
2479 1745 : yy106:
2480 : YYDEBUG(106, *YYCURSOR);
2481 1745 : yych = *++YYCURSOR;
2482 1745 : goto yy104;
2483 27 : yy107:
2484 : YYDEBUG(107, *YYCURSOR);
2485 27 : ++YYCURSOR;
2486 : YYDEBUG(108, *YYCURSOR);
2487 27 : yyleng = YYCURSOR - SCNG(yy_text);
2488 : #line 2437 "Zend/zend_language_scanner.l"
2489 : {
2490 : Z_LVAL_P(zendlval) = (long) '{';
2491 : yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
2492 : yyless(1);
2493 : return T_CURLY_OPEN;
2494 : }
2495 : #line 2496 "Zend/zend_language_scanner.c"
2496 3293 : yy109:
2497 : YYDEBUG(109, *YYCURSOR);
2498 3293 : yyaccept = 0;
2499 3293 : YYMARKER = ++YYCURSOR;
2500 3293 : YYFILL(3);
2501 3293 : yych = *YYCURSOR;
2502 : YYDEBUG(110, *YYCURSOR);
2503 3293 : if (yybm[0+yych] & 128) {
2504 2851 : goto yy109;
2505 : }
2506 442 : if (yych == '-') goto yy114;
2507 442 : if (yych == '[') goto yy116;
2508 441 : yy111:
2509 : YYDEBUG(111, *YYCURSOR);
2510 441 : yyleng = YYCURSOR - SCNG(yy_text);
2511 : #line 2149 "Zend/zend_language_scanner.l"
2512 : {
2513 : if (!zend_copy_scanner_string(zendlval, (yytext+1), (yyleng-1), IS_UNICODE, SCNG(output_conv) TSRMLS_CC)) {
2514 : return 0;
2515 : }
2516 : if (!zend_check_and_normalize_identifier(zendlval)) {
2517 : return 0;
2518 : }
2519 : return T_VARIABLE;
2520 : }
2521 : #line 2522 "Zend/zend_language_scanner.c"
2522 0 : yy112:
2523 : YYDEBUG(112, *YYCURSOR);
2524 0 : ++YYCURSOR;
2525 : YYDEBUG(113, *YYCURSOR);
2526 0 : yyleng = YYCURSOR - SCNG(yy_text);
2527 : #line 1773 "Zend/zend_language_scanner.l"
2528 : {
2529 : yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
2530 : return T_DOLLAR_OPEN_CURLY_BRACES;
2531 : }
2532 : #line 2533 "Zend/zend_language_scanner.c"
2533 0 : yy114:
2534 : YYDEBUG(114, *YYCURSOR);
2535 0 : yych = *++YYCURSOR;
2536 0 : if (yych == '>') goto yy118;
2537 0 : yy115:
2538 : YYDEBUG(115, *YYCURSOR);
2539 0 : YYCURSOR = YYMARKER;
2540 0 : goto yy111;
2541 1 : yy116:
2542 : YYDEBUG(116, *YYCURSOR);
2543 1 : ++YYCURSOR;
2544 : YYDEBUG(117, *YYCURSOR);
2545 1 : yyleng = YYCURSOR - SCNG(yy_text);
2546 : #line 2136 "Zend/zend_language_scanner.l"
2547 : {
2548 : yyless(yyleng - 1);
2549 : yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
2550 :
2551 : if (!zend_copy_scanner_string(zendlval, (yytext+1), (yyleng-1), IS_UNICODE, SCNG(output_conv) TSRMLS_CC)) {
2552 : return 0;
2553 : }
2554 : if (!zend_check_and_normalize_identifier(zendlval)) {
2555 : return 0;
2556 : }
2557 : return T_VARIABLE;
2558 : }
2559 : #line 2560 "Zend/zend_language_scanner.c"
2560 0 : yy118:
2561 : YYDEBUG(118, *YYCURSOR);
2562 0 : yych = *++YYCURSOR;
2563 0 : if (yych <= '_') {
2564 0 : if (yych <= '@') goto yy115;
2565 0 : if (yych <= 'Z') goto yy119;
2566 0 : if (yych <= '^') goto yy115;
2567 : } else {
2568 0 : if (yych <= '`') goto yy115;
2569 0 : if (yych <= 'z') goto yy119;
2570 0 : if (yych <= '~') goto yy115;
2571 : }
2572 0 : yy119:
2573 : YYDEBUG(119, *YYCURSOR);
2574 0 : ++YYCURSOR;
2575 : YYDEBUG(120, *YYCURSOR);
2576 0 : yyleng = YYCURSOR - SCNG(yy_text);
2577 : #line 2121 "Zend/zend_language_scanner.l"
2578 : {
2579 : yyless(yyleng - 3);
2580 : yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
2581 :
2582 : if (!zend_copy_scanner_string(zendlval, (yytext+1), (yyleng-1), IS_UNICODE, SCNG(output_conv) TSRMLS_CC)) {
2583 : return 0;
2584 : }
2585 : if (!zend_check_and_normalize_identifier(zendlval)) {
2586 : return 0;
2587 : }
2588 : return T_VARIABLE;
2589 : }
2590 : #line 2591 "Zend/zend_language_scanner.c"
2591 : }
2592 : /* *********************************** */
2593 5387722 : yyc_ST_IN_SCRIPTING:
2594 : {
2595 : static const unsigned char yybm[] = {
2596 : 0, 0, 0, 0, 0, 0, 0, 0,
2597 : 0, 192, 64, 0, 0, 64, 0, 0,
2598 : 0, 0, 0, 0, 0, 0, 0, 0,
2599 : 0, 0, 0, 0, 0, 0, 0, 0,
2600 : 192, 0, 0, 0, 0, 0, 0, 0,
2601 : 0, 0, 0, 0, 0, 0, 0, 0,
2602 : 56, 56, 56, 56, 56, 56, 56, 56,
2603 : 56, 56, 0, 0, 0, 0, 0, 0,
2604 : 0, 40, 40, 40, 40, 40, 40, 8,
2605 : 8, 8, 8, 8, 8, 8, 8, 8,
2606 : 8, 8, 8, 8, 8, 8, 8, 8,
2607 : 8, 8, 8, 0, 0, 0, 0, 8,
2608 : 0, 40, 40, 40, 40, 40, 40, 8,
2609 : 8, 8, 8, 8, 8, 8, 8, 8,
2610 : 8, 8, 8, 8, 8, 8, 8, 8,
2611 : 8, 8, 8, 0, 0, 0, 0, 8,
2612 : 8, 8, 8, 8, 8, 8, 8, 8,
2613 : 8, 8, 8, 8, 8, 8, 8, 8,
2614 : 8, 8, 8, 8, 8, 8, 8, 8,
2615 : 8, 8, 8, 8, 8, 8, 8, 8,
2616 : 8, 8, 8, 8, 8, 8, 8, 8,
2617 : 8, 8, 8, 8, 8, 8, 8, 8,
2618 : 8, 8, 8, 8, 8, 8, 8, 8,
2619 : 8, 8, 8, 8, 8, 8, 8, 8,
2620 : 8, 8, 8, 8, 8, 8, 8, 8,
2621 : 8, 8, 8, 8, 8, 8, 8, 8,
2622 : 8, 8, 8, 8, 8, 8, 8, 8,
2623 : 8, 8, 8, 8, 8, 8, 8, 8,
2624 : 8, 8, 8, 8, 8, 8, 8, 8,
2625 : 8, 8, 8, 8, 8, 8, 8, 8,
2626 : 8, 8, 8, 8, 8, 8, 8, 8,
2627 : 8, 8, 8, 8, 8, 8, 8, 8,
2628 : };
2629 : YYDEBUG(121, *YYCURSOR);
2630 5387722 : YYFILL(16);
2631 5387722 : yych = *YYCURSOR;
2632 : YYDEBUG(-1, yych);
2633 5387722 : switch (yych) {
2634 : case 0x00:
2635 : case 0x01:
2636 : case 0x02:
2637 : case 0x03:
2638 : case 0x04:
2639 : case 0x05:
2640 : case 0x06:
2641 : case 0x07:
2642 : case 0x08:
2643 : case '\v':
2644 : case '\f':
2645 : case 0x0E:
2646 : case 0x0F:
2647 : case 0x10:
2648 : case 0x11:
2649 : case 0x12:
2650 : case 0x13:
2651 : case 0x14:
2652 : case 0x15:
2653 : case 0x16:
2654 : case 0x17:
2655 : case 0x18:
2656 : case 0x19:
2657 : case 0x1A:
2658 : case 0x1B:
2659 : case 0x1C:
2660 : case 0x1D:
2661 : case 0x1E:
2662 1445 : case 0x1F: goto yy183;
2663 : case '\t':
2664 : case '\n':
2665 : case '\r':
2666 1600074 : case ' ': goto yy139;
2667 31579 : case '!': goto yy152;
2668 158809 : case '"': goto yy179;
2669 1642 : case '#': goto yy175;
2670 538447 : case '$': goto yy164;
2671 118 : case '%': goto yy158;
2672 5778 : case '&': goto yy159;
2673 185672 : case '\'': goto yy177;
2674 417824 : case '(': goto yy146;
2675 : case ')':
2676 : case ',':
2677 : case ';':
2678 : case '@':
2679 : case '[':
2680 : case ']':
2681 1157513 : case '~': goto yy165;
2682 2364 : case '*': goto yy155;
2683 9581 : case '+': goto yy151;
2684 38119 : case '-': goto yy137;
2685 32190 : case '.': goto yy157;
2686 59028 : case '/': goto yy156;
2687 23472 : case '0': goto yy171;
2688 : case '1':
2689 : case '2':
2690 : case '3':
2691 : case '4':
2692 : case '5':
2693 : case '6':
2694 : case '7':
2695 : case '8':
2696 63294 : case '9': goto yy173;
2697 33576 : case ':': goto yy141;
2698 4400 : case '<': goto yy153;
2699 171566 : case '=': goto yy149;
2700 1060 : case '>': goto yy154;
2701 40824 : case '?': goto yy166;
2702 : case 'A':
2703 37332 : case 'a': goto yy132;
2704 : case 'B':
2705 6858 : case 'b': goto yy134;
2706 : case 'C':
2707 20806 : case 'c': goto yy127;
2708 : case 'D':
2709 28045 : case 'd': goto yy125;
2710 : case 'E':
2711 66189 : case 'e': goto yy123;
2712 : case 'F':
2713 85182 : case 'f': goto yy126;
2714 : case 'G':
2715 44554 : case 'g': goto yy135;
2716 : case 'I':
2717 69925 : case 'i': goto yy130;
2718 : case 'L':
2719 4320 : case 'l': goto yy150;
2720 : case 'N':
2721 23469 : case 'n': goto yy144;
2722 : case 'O':
2723 7745 : case 'o': goto yy162;
2724 : case 'P':
2725 42587 : case 'p': goto yy136;
2726 : case 'R':
2727 45210 : case 'r': goto yy128;
2728 : case 'S':
2729 36930 : case 's': goto yy133;
2730 : case 'T':
2731 24863 : case 't': goto yy129;
2732 : case 'U':
2733 7976 : case 'u': goto yy147;
2734 : case 'V':
2735 28626 : case 'v': goto yy145;
2736 : case 'W':
2737 1367 : case 'w': goto yy131;
2738 : case 'X':
2739 826 : case 'x': goto yy163;
2740 466 : case '\\': goto yy142;
2741 21 : case '^': goto yy161;
2742 12459 : case '_': goto yy148;
2743 105 : case '`': goto yy181;
2744 88992 : case '{': goto yy167;
2745 2545 : case '|': goto yy160;
2746 89253 : case '}': goto yy169;
2747 32696 : default: goto yy174;
2748 : }
2749 66189 : yy123:
2750 : YYDEBUG(123, *YYCURSOR);
2751 66189 : ++YYCURSOR;
2752 : YYDEBUG(-1, yych);
2753 66189 : switch ((yych = *YYCURSOR)) {
2754 : case 'C':
2755 29047 : case 'c': goto yy709;
2756 : case 'L':
2757 16185 : case 'l': goto yy710;
2758 : case 'M':
2759 5481 : case 'm': goto yy711;
2760 : case 'N':
2761 346 : case 'n': goto yy712;
2762 : case 'V':
2763 1704 : case 'v': goto yy713;
2764 : case 'X':
2765 11282 : case 'x': goto yy714;
2766 2144 : default: goto yy186;
2767 : }
2768 352199 : yy124:
2769 : YYDEBUG(124, *YYCURSOR);
2770 352199 : yyleng = YYCURSOR - SCNG(yy_text);
2771 : #line 2176 "Zend/zend_language_scanner.l"
2772 : {
2773 : if (!zend_copy_scanner_string(zendlval, yytext, yyleng, IS_UNICODE, SCNG(output_conv) TSRMLS_CC)) {
2774 : return 0;
2775 : }
2776 : if (!zend_check_and_normalize_identifier(zendlval)) {
2777 : return 0;
2778 : }
2779 : return T_STRING;
2780 : }
2781 : #line 2782 "Zend/zend_language_scanner.c"
2782 28045 : yy125:
2783 : YYDEBUG(125, *YYCURSOR);
2784 28045 : yych = *++YYCURSOR;
2785 28045 : if (yych <= 'O') {
2786 1049 : if (yych <= 'H') {
2787 318 : if (yych == 'E') goto yy691;
2788 302 : goto yy186;
2789 : } else {
2790 731 : if (yych <= 'I') goto yy692;
2791 190 : if (yych <= 'N') goto yy186;
2792 190 : goto yy693;
2793 : }
2794 : } else {
2795 26996 : if (yych <= 'h') {
2796 7167 : if (yych == 'e') goto yy691;
2797 2042 : goto yy186;
2798 : } else {
2799 19829 : if (yych <= 'i') goto yy692;
2800 1314 : if (yych == 'o') goto yy693;
2801 778 : goto yy186;
2802 : }
2803 : }
2804 85182 : yy126:
2805 : YYDEBUG(126, *YYCURSOR);
2806 85182 : yych = *++YYCURSOR;
2807 85182 : if (yych <= 'U') {
2808 5834 : if (yych <= 'N') {
2809 5756 : if (yych == 'I') goto yy670;
2810 5249 : goto yy186;
2811 : } else {
2812 78 : if (yych <= 'O') goto yy671;
2813 40 : if (yych <= 'T') goto yy186;
2814 4 : goto yy672;
2815 : }
2816 : } else {
2817 79348 : if (yych <= 'n') {
2818 32545 : if (yych == 'i') goto yy670;
2819 27323 : goto yy186;
2820 : } else {
2821 46803 : if (yych <= 'o') goto yy671;
2822 32431 : if (yych == 'u') goto yy672;
2823 4734 : goto yy186;
2824 : }
2825 : }
2826 20806 : yy127:
2827 : YYDEBUG(127, *YYCURSOR);
2828 20806 : yych = *++YYCURSOR;
2829 20806 : if (yych <= 'O') {
2830 1841 : if (yych <= 'K') {
2831 1750 : if (yych == 'A') goto yy642;
2832 657 : goto yy186;
2833 : } else {
2834 91 : if (yych <= 'L') goto yy643;
2835 55 : if (yych <= 'N') goto yy186;
2836 54 : goto yy644;
2837 : }
2838 : } else {
2839 18965 : if (yych <= 'k') {
2840 5946 : if (yych == 'a') goto yy642;
2841 2357 : goto yy186;
2842 : } else {
2843 13019 : if (yych <= 'l') goto yy643;
2844 4858 : if (yych == 'o') goto yy644;
2845 2141 : goto yy186;
2846 : }
2847 : }
2848 45210 : yy128:
2849 : YYDEBUG(128, *YYCURSOR);
2850 45210 : yych = *++YYCURSOR;
2851 45210 : if (yych == 'E') goto yy624;
2852 45209 : if (yych == 'e') goto yy624;
2853 2442 : goto yy186;
2854 24863 : yy129:
2855 : YYDEBUG(129, *YYCURSOR);
2856 24863 : yych = *++YYCURSOR;
2857 24863 : if (yych <= 'R') {
2858 3939 : if (yych == 'H') goto yy616;
2859 3935 : if (yych <= 'Q') goto yy186;
2860 3777 : goto yy617;
2861 : } else {
2862 20924 : if (yych <= 'h') {
2863 6739 : if (yych <= 'g') goto yy186;
2864 266 : goto yy616;
2865 : } else {
2866 14185 : if (yych == 'r') goto yy617;
2867 636 : goto yy186;
2868 : }
2869 : }
2870 69925 : yy130:
2871 : YYDEBUG(130, *YYCURSOR);
2872 69925 : yych = *++YYCURSOR;
2873 69925 : if (yych <= 'S') {
2874 407 : if (yych <= 'L') {
2875 199 : if (yych == 'F') goto yy569;
2876 192 : goto yy186;
2877 : } else {
2878 208 : if (yych <= 'M') goto yy571;
2879 124 : if (yych <= 'N') goto yy572;
2880 28 : if (yych <= 'R') goto yy186;
2881 28 : goto yy573;
2882 : }
2883 : } else {
2884 69518 : if (yych <= 'm') {
2885 57026 : if (yych == 'f') goto yy569;
2886 2770 : if (yych <= 'l') goto yy186;
2887 2575 : goto yy571;
2888 : } else {
2889 12492 : if (yych <= 'n') goto yy572;
2890 6871 : if (yych == 's') goto yy573;
2891 179 : goto yy186;
2892 : }
2893 : }
2894 1367 : yy131:
2895 : YYDEBUG(131, *YYCURSOR);
2896 1367 : yych = *++YYCURSOR;
2897 1367 : if (yych == 'H') goto yy564;
2898 1367 : if (yych == 'h') goto yy564;
2899 337 : goto yy186;
2900 37332 : yy132:
2901 : YYDEBUG(132, *YYCURSOR);
2902 37332 : yych = *++YYCURSOR;
2903 37332 : if (yych <= 'S') {
2904 842 : if (yych <= 'M') {
2905 763 : if (yych == 'B') goto yy546;
2906 751 : goto yy186;
2907 : } else {
2908 79 : if (yych <= 'N') goto yy547;
2909 79 : if (yych <= 'Q') goto yy186;
2910 67 : if (yych <= 'R') goto yy548;
2911 52 : goto yy549;
2912 : }
2913 : } else {
2914 36490 : if (yych <= 'n') {
2915 4163 : if (yych == 'b') goto yy546;
2916 4001 : if (yych <= 'm') goto yy186;
2917 82 : goto yy547;
2918 : } else {
2919 32327 : if (yych <= 'q') goto yy186;
2920 32309 : if (yych <= 'r') goto yy548;
2921 9245 : if (yych <= 's') goto yy549;
2922 86 : goto yy186;
2923 : }
2924 : }
2925 36930 : yy133:
2926 : YYDEBUG(133, *YYCURSOR);
2927 36930 : yych = *++YYCURSOR;
2928 36930 : if (yych <= 'W') {
2929 1614 : if (yych == 'T') goto yy534;
2930 1402 : if (yych <= 'V') goto yy186;
2931 0 : goto yy535;
2932 : } else {
2933 35316 : if (yych <= 't') {
2934 30731 : if (yych <= 's') goto yy186;
2935 19920 : goto yy534;
2936 : } else {
2937 4585 : if (yych == 'w') goto yy535;
2938 4145 : goto yy186;
2939 : }
2940 : }
2941 6858 : yy134:
2942 : YYDEBUG(134, *YYCURSOR);
2943 6858 : yyaccept = 0;
2944 6858 : yych = *(YYMARKER = ++YYCURSOR);
2945 6858 : if (yych <= ';') {
2946 2459 : if (yych <= '"') {
2947 1332 : if (yych <= '!') goto yy186;
2948 1134 : goto yy526;
2949 : } else {
2950 1127 : if (yych == '\'') goto yy527;
2951 191 : goto yy186;
2952 : }
2953 : } else {
2954 4399 : if (yych <= 'R') {
2955 127 : if (yych <= '<') goto yy525;
2956 24 : if (yych <= 'Q') goto yy186;
2957 0 : goto yy528;
2958 : } else {
2959 4272 : if (yych == 'r') goto yy528;
2960 2640 : goto yy186;
2961 : }
2962 : }
2963 44554 : yy135:
2964 : YYDEBUG(135, *YYCURSOR);
2965 44554 : yych = *++YYCURSOR;
2966 44554 : if (yych <= 'O') {
2967 66 : if (yych == 'L') goto yy515;
2968 57 : if (yych <= 'N') goto yy186;
2969 0 : goto yy516;
2970 : } else {
2971 44488 : if (yych <= 'l') {
2972 42803 : if (yych <= 'k') goto yy186;
2973 3753 : goto yy515;
2974 : } else {
2975 1685 : if (yych == 'o') goto yy516;
2976 1644 : goto yy186;
2977 : }
2978 : }
2979 42587 : yy136:
2980 : YYDEBUG(136, *YYCURSOR);
2981 42587 : yych = *++YYCURSOR;
2982 42587 : if (yych <= 'U') {
2983 14642 : if (yych == 'R') goto yy491;
2984 14560 : if (yych <= 'T') goto yy186;
2985 0 : goto yy492;
2986 : } else {
2987 27945 : if (yych <= 'r') {
2988 22202 : if (yych <= 'q') goto yy186;
2989 16017 : goto yy491;
2990 : } else {
2991 5743 : if (yych == 'u') goto yy492;
2992 48 : goto yy186;
2993 : }
2994 : }
2995 38119 : yy137:
2996 : YYDEBUG(137, *YYCURSOR);
2997 38119 : ++YYCURSOR;
2998 38119 : if ((yych = *YYCURSOR) <= '<') {
2999 6597 : if (yych == '-') goto yy487;
3000 : } else {
3001 31522 : if (yych <= '=') goto yy485;
3002 31383 : if (yych <= '>') goto yy489;
3003 : }
3004 1802233 : yy138:
3005 : YYDEBUG(138, *YYCURSOR);
3006 1802233 : yyleng = YYCURSOR - SCNG(yy_text);
3007 : #line 1762 "Zend/zend_language_scanner.l"
3008 : {
3009 : return yytext[0];
3010 : }
3011 : #line 3012 "Zend/zend_language_scanner.c"
3012 1600074 : yy139:
3013 : YYDEBUG(139, *YYCURSOR);
3014 1600074 : ++YYCURSOR;
3015 1600074 : yych = *YYCURSOR;
3016 1600074 : goto yy484;
3017 1600074 : yy140:
3018 : YYDEBUG(140, *YYCURSOR);
3019 1600074 : yyleng = YYCURSOR - SCNG(yy_text);
3020 : #line 1489 "Zend/zend_language_scanner.l"
3021 : {
3022 : Z_STRVAL_P(zendlval) = yytext; /* no copying - intentional */
3023 : Z_STRLEN_P(zendlval) = yyleng;
3024 : Z_TYPE_P(zendlval) = IS_STRING;
3025 : HANDLE_NEWLINES(yytext, yyleng);
3026 : return T_WHITESPACE;
3027 : }
3028 : #line 3029 "Zend/zend_language_scanner.c"
3029 33576 : yy141:
3030 : YYDEBUG(141, *YYCURSOR);
3031 33576 : yych = *++YYCURSOR;
3032 33576 : if (yych == ':') goto yy481;
3033 18829 : goto yy138;
3034 466 : yy142:
3035 : YYDEBUG(142, *YYCURSOR);
3036 466 : ++YYCURSOR;
3037 : YYDEBUG(143, *YYCURSOR);
3038 466 : yyleng = YYCURSOR - SCNG(yy_text);
3039 : #line 1522 "Zend/zend_language_scanner.l"
3040 : {
3041 : return T_NS_SEPARATOR;
3042 : }
3043 : #line 3044 "Zend/zend_language_scanner.c"
3044 23469 : yy144:
3045 : YYDEBUG(144, *YYCURSOR);
3046 23469 : yych = *++YYCURSOR;
3047 23469 : if (yych <= 'E') {
3048 23 : if (yych == 'A') goto yy469;
3049 0 : if (yych <= 'D') goto yy186;
3050 0 : goto yy470;
3051 : } else {
3052 23446 : if (yych <= 'a') {
3053 7773 : if (yych <= '`') goto yy186;
3054 223 : goto yy469;
3055 : } else {
3056 15673 : if (yych == 'e') goto yy470;
3057 5537 : goto yy186;
3058 : }
3059 : }
3060 28626 : yy145:
3061 : YYDEBUG(145, *YYCURSOR);
3062 28626 : yych = *++YYCURSOR;
3063 28626 : if (yych == 'A') goto yy466;
3064 28613 : if (yych == 'a') goto yy466;
3065 577 : goto yy186;
3066 417824 : yy146:
3067 : YYDEBUG(146, *YYCURSOR);
3068 417824 : yyaccept = 1;
3069 417824 : yych = *(YYMARKER = ++YYCURSOR);
3070 417824 : if (yych <= 'S') {
3071 356823 : if (yych <= 'D') {
3072 347001 : if (yych <= ' ') {
3073 23068 : if (yych == '\t') goto yy379;
3074 23064 : if (yych <= 0x1F) goto yy138;
3075 18477 : goto yy379;
3076 : } else {
3077 323933 : if (yych <= '@') goto yy138;
3078 826 : if (yych == 'C') goto yy138;
3079 760 : goto yy379;
3080 : }
3081 : } else {
3082 9822 : if (yych <= 'I') {
3083 1132 : if (yych == 'F') goto yy379;
3084 953 : if (yych <= 'H') goto yy138;
3085 112 : goto yy379;
3086 : } else {
3087 8690 : if (yych == 'O') goto yy379;
3088 8668 : if (yych <= 'Q') goto yy138;
3089 208 : goto yy379;
3090 : }
3091 : }
3092 : } else {
3093 61001 : if (yych <= 'f') {
3094 27175 : if (yych <= 'b') {
3095 12707 : if (yych == 'U') goto yy379;
3096 12695 : if (yych <= '`') goto yy138;
3097 4885 : goto yy379;
3098 : } else {
3099 14468 : if (yych == 'd') goto yy379;
3100 8706 : if (yych <= 'e') goto yy138;
3101 6589 : goto yy379;
3102 : }
3103 : } else {
3104 33826 : if (yych <= 'o') {
3105 20095 : if (yych == 'i') goto yy379;
3106 10034 : if (yych <= 'n') goto yy138;
3107 947 : goto yy379;
3108 : } else {
3109 13731 : if (yych <= 's') {
3110 10105 : if (yych <= 'q') goto yy138;
3111 6269 : goto yy379;
3112 : } else {
3113 3626 : if (yych == 'u') goto yy379;
3114 2005 : goto yy138;
3115 : }
3116 : }
3117 : }
3118 : }
3119 7976 : yy147:
3120 : YYDEBUG(147, *YYCURSOR);
3121 7976 : yych = *++YYCURSOR;
3122 7976 : if (yych <= 'S') {
3123 14 : if (yych == 'N') goto yy370;
3124 13 : if (yych <= 'R') goto yy186;
3125 13 : goto yy371;
3126 : } else {
3127 7962 : if (yych <= 'n') {
3128 7671 : if (yych <= 'm') goto yy186;
3129 7576 : goto yy370;
3130 : } else {
3131 291 : if (yych == 's') goto yy371;
3132 58 : goto yy186;
3133 : }
3134 : }
3135 12459 : yy148:
3136 : YYDEBUG(148, *YYCURSOR);
3137 12459 : yych = *++YYCURSOR;
3138 12459 : if (yych == '_') goto yy296;
3139 129 : goto yy186;
3140 171566 : yy149:
3141 : YYDEBUG(149, *YYCURSOR);
3142 171566 : yych = *++YYCURSOR;
3143 171566 : if (yych <= '<') goto yy138;
3144 44335 : if (yych <= '=') goto yy290;
3145 27867 : if (yych <= '>') goto yy292;
3146 389 : goto yy138;
3147 4320 : yy150:
3148 : YYDEBUG(150, *YYCURSOR);
3149 4320 : yych = *++YYCURSOR;
3150 4320 : if (yych == 'I') goto yy286;
3151 4307 : if (yych == 'i') goto yy286;
3152 3943 : goto yy186;
3153 9581 : yy151:
3154 : YYDEBUG(151, *YYCURSOR);
3155 9581 : yych = *++YYCURSOR;
3156 9581 : if (yych == '+') goto yy284;
3157 4021 : if (yych == '=') goto yy282;
3158 3398 : goto yy138;
3159 31579 : yy152:
3160 : YYDEBUG(152, *YYCURSOR);
3161 31579 : yych = *++YYCURSOR;
3162 31579 : if (yych == '=') goto yy279;
3163 22694 : goto yy138;
3164 4400 : yy153:
3165 : YYDEBUG(153, *YYCURSOR);
3166 4400 : yyaccept = 1;
3167 4400 : yych = *(YYMARKER = ++YYCURSOR);
3168 4400 : if (yych <= ';') {
3169 1372 : if (yych == '/') goto yy251;
3170 1369 : goto yy138;
3171 : } else {
3172 3028 : if (yych <= '<') goto yy249;
3173 1641 : if (yych <= '=') goto yy252;
3174 32 : if (yych <= '>') goto yy254;
3175 29 : goto yy138;
3176 : }
3177 1060 : yy154:
3178 : YYDEBUG(154, *YYCURSOR);
3179 1060 : yych = *++YYCURSOR;
3180 1060 : if (yych <= '<') goto yy138;
3181 301 : if (yych <= '=') goto yy245;
3182 43 : if (yych <= '>') goto yy243;
3183 4 : goto yy138;
3184 2364 : yy155:
3185 : YYDEBUG(155, *YYCURSOR);
3186 2364 : yych = *++YYCURSOR;
3187 2364 : if (yych == '=') goto yy241;
3188 2351 : goto yy138;
3189 59028 : yy156:
3190 : YYDEBUG(156, *YYCURSOR);
3191 59028 : yych = *++YYCURSOR;
3192 59028 : if (yych <= '.') {
3193 21824 : if (yych == '*') goto yy233;
3194 476 : goto yy138;
3195 : } else {
3196 37204 : if (yych <= '/') goto yy235;
3197 21 : if (yych == '=') goto yy236;
3198 17 : goto yy138;
3199 : }
3200 32190 : yy157:
3201 : YYDEBUG(157, *YYCURSOR);
3202 32190 : yych = *++YYCURSOR;
3203 32190 : if (yych <= '/') goto yy138;
3204 4405 : if (yych <= '9') goto yy229;
3205 3507 : if (yych == '=') goto yy231;
3206 1573 : goto yy138;
3207 118 : yy158:
3208 : YYDEBUG(158, *YYCURSOR);
3209 118 : yych = *++YYCURSOR;
3210 118 : if (yych <= '<') goto yy138;
3211 3 : if (yych <= '=') goto yy225;
3212 2 : if (yych <= '>') goto yy223;
3213 0 : goto yy138;
3214 5778 : yy159:
3215 : YYDEBUG(159, *YYCURSOR);
3216 5778 : yych = *++YYCURSOR;
3217 5778 : if (yych == '&') goto yy219;
3218 2115 : if (yych == '=') goto yy221;
3219 2112 : goto yy138;
3220 2545 : yy160:
3221 : YYDEBUG(160, *YYCURSOR);
3222 2545 : yych = *++YYCURSOR;
3223 2545 : if (yych == '=') goto yy217;
3224 2449 : if (yych == '|') goto yy215;
3225 487 : goto yy138;
3226 21 : yy161:
3227 : YYDEBUG(161, *YYCURSOR);
3228 21 : yych = *++YYCURSOR;
3229 21 : if (yych == '=') goto yy213;
3230 19 : goto yy138;
3231 7745 : yy162:
3232 : YYDEBUG(162, *YYCURSOR);
3233 7745 : yych = *++YYCURSOR;
3234 7745 : if (yych == 'R') goto yy211;
3235 7745 : if (yych == 'r') goto yy211;
3236 7070 : goto yy186;
3237 826 : yy163:
3238 : YYDEBUG(163, *YYCURSOR);
3239 826 : yych = *++YYCURSOR;
3240 826 : if (yych == 'O') goto yy208;
3241 826 : if (yych == 'o') goto yy208;
3242 825 : goto yy186;
3243 538447 : yy164:
3244 : YYDEBUG(164, *YYCURSOR);
3245 538447 : yych = *++YYCURSOR;
3246 538447 : if (yych <= '_') {
3247 18321 : if (yych <= '@') goto yy138;
3248 18171 : if (yych <= 'Z') goto yy205;
3249 9960 : if (yych <= '^') goto yy138;
3250 9960 : goto yy205;
3251 : } else {
3252 520126 : if (yych <= '`') goto yy138;
3253 520126 : if (yych <= 'z') goto yy205;
3254 33 : if (yych <= '~') goto yy138;
3255 3 : goto yy205;
3256 : }
3257 1157513 : yy165:
3258 : YYDEBUG(165, *YYCURSOR);
3259 1157513 : yych = *++YYCURSOR;
3260 1157513 : goto yy138;
3261 40824 : yy166:
3262 : YYDEBUG(166, *YYCURSOR);
3263 40824 : yych = *++YYCURSOR;
3264 40824 : if (yych == '>') goto yy201;
3265 17068 : goto yy138;
3266 88992 : yy167:
3267 : YYDEBUG(167, *YYCURSOR);
3268 88992 : ++YYCURSOR;
3269 : YYDEBUG(168, *YYCURSOR);
3270 88992 : yyleng = YYCURSOR - SCNG(yy_text);
3271 : #line 1767 "Zend/zend_language_scanner.l"
3272 : {
3273 : yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
3274 : return '{';
3275 : }
3276 : #line 3277 "Zend/zend_language_scanner.c"
3277 89253 : yy169:
3278 : YYDEBUG(169, *YYCURSOR);
3279 89253 : ++YYCURSOR;
3280 : YYDEBUG(170, *YYCURSOR);
3281 89253 : yyleng = YYCURSOR - SCNG(yy_text);
3282 : #line 1779 "Zend/zend_language_scanner.l"
3283 : {
3284 : RESET_DOC_COMMENT();
3285 : if (!zend_stack_is_empty(&SCNG(state_stack))) {
3286 : yy_pop_state(TSRMLS_C);
3287 : }
3288 : return '}';
3289 : }
3290 : #line 3291 "Zend/zend_language_scanner.c"
3291 23472 : yy171:
3292 : YYDEBUG(171, *YYCURSOR);
3293 23472 : yyaccept = 2;
3294 23472 : yych = *(YYMARKER = ++YYCURSOR);
3295 23472 : if (yych <= 'E') {
3296 17567 : if (yych <= '/') {
3297 12634 : if (yych == '.') goto yy187;
3298 : } else {
3299 4933 : if (yych <= '9') goto yy190;
3300 3365 : if (yych >= 'E') goto yy192;
3301 : }
3302 : } else {
3303 5905 : if (yych <= 'd') {
3304 4603 : if (yych == 'X') goto yy197;
3305 : } else {
3306 1302 : if (yych <= 'e') goto yy192;
3307 1298 : if (yych == 'x') goto yy197;
3308 : }
3309 : }
3310 79493 : yy172:
3311 : YYDEBUG(172, *YYCURSOR);
3312 79493 : yyleng = YYCURSOR - SCNG(yy_text);
3313 : #line 1809 "Zend/zend_language_scanner.l"
3314 : {
3315 : if (yyleng < MAX_LENGTH_OF_LONG - 1) { /* Won't overflow */
3316 : Z_LVAL_P(zendlval) = strtol(yytext, NULL, 0);
3317 : } else {
3318 : errno = 0;
3319 : Z_LVAL_P(zendlval) = strtol(yytext, NULL, 0);
3320 : if (errno == ERANGE) { /* Overflow */
3321 : if (yytext[0] == '0') { /* octal overflow */
3322 : Z_DVAL_P(zendlval) = zend_oct_strtod(yytext, NULL);
3323 : } else {
3324 : Z_DVAL_P(zendlval) = zend_strtod(yytext, NULL);
3325 : }
3326 : Z_TYPE_P(zendlval) = IS_DOUBLE;
3327 : return T_DNUMBER;
3328 : }
3329 : }
3330 :
3331 : Z_TYPE_P(zendlval) = IS_LONG;
3332 : return T_LNUMBER;
3333 : }
3334 : #line 3335 "Zend/zend_language_scanner.c"
3335 63294 : yy173:
3336 : YYDEBUG(173, *YYCURSOR);
3337 63294 : yyaccept = 2;
3338 63294 : yych = *(YYMARKER = ++YYCURSOR);
3339 63294 : if (yych <= '9') {
3340 50780 : if (yych == '.') goto yy187;
3341 49165 : if (yych <= '/') goto yy172;
3342 23129 : goto yy190;
3343 : } else {
3344 12514 : if (yych <= 'E') {
3345 6226 : if (yych <= 'D') goto yy172;
3346 101 : goto yy192;
3347 : } else {
3348 6288 : if (yych == 'e') goto yy192;
3349 6030 : goto yy172;
3350 : }
3351 : }
3352 32696 : yy174:
3353 : YYDEBUG(174, *YYCURSOR);
3354 32696 : yych = *++YYCURSOR;
3355 32696 : goto yy186;
3356 1642 : yy175:
3357 : YYDEBUG(175, *YYCURSOR);
3358 1642 : ++YYCURSOR;
3359 38825 : yy176:
3360 : YYDEBUG(176, *YYCURSOR);
3361 38825 : yyleng = YYCURSOR - SCNG(yy_text);
3362 : #line 2194 "Zend/zend_language_scanner.l"
3363 : {
3364 : while (YYCURSOR < YYLIMIT) {
3365 : switch (*YYCURSOR++) {
3366 : case '\r':
3367 : if (*YYCURSOR == '\n') {
3368 : YYCURSOR++;
3369 : }
3370 : /* fall through */
3371 : case '\n':
3372 : CG(zend_lineno)++;
3373 : break;
3374 : case '%':
3375 : if (!CG(asp_tags)) {
3376 : continue;
3377 : }
3378 : /* fall through */
3379 : case '?':
3380 : if (*YYCURSOR == '>') {
3381 : YYCURSOR--;
3382 : break;
3383 : }
3384 : /* fall through */
3385 : default:
3386 : continue;
3387 : }
3388 :
3389 : break;
3390 : }
3391 :
3392 : yyleng = YYCURSOR - SCNG(yy_text);
3393 :
3394 : return T_COMMENT;
3395 : }
3396 : #line 3397 "Zend/zend_language_scanner.c"
3397 185672 : yy177:
3398 : YYDEBUG(177, *YYCURSOR);
3399 185672 : ++YYCURSOR;
3400 186608 : yy178:
3401 : YYDEBUG(178, *YYCURSOR);
3402 186608 : yyleng = YYCURSOR - SCNG(yy_text);
3403 : #line 2290 "Zend/zend_language_scanner.l"
3404 : {
3405 : int bprefix = (yytext[0] != '\'') ? 1 : 0;
3406 :
3407 : while (1) {
3408 : if (YYCURSOR < YYLIMIT) {
3409 : if (*YYCURSOR == '\'') {
3410 : YYCURSOR++;
3411 : yyleng = YYCURSOR - SCNG(yy_text);
3412 :
3413 : break;
3414 : } else if (*YYCURSOR++ == '\\' && YYCURSOR < YYLIMIT) {
3415 : YYCURSOR++;
3416 : }
3417 : } else {
3418 : yyleng = YYLIMIT - SCNG(yy_text);
3419 :
3420 : /* Unclosed single quotes; treat similar to double quotes, but without a separate token
3421 : * for ' (unrecognized by parser), instead of old flex fallback to "Unexpected character..."
3422 : * rule, which continued in ST_IN_SCRIPTING state after the quote */
3423 : return T_ENCAPSED_AND_WHITESPACE;
3424 : }
3425 : }
3426 :
3427 : if (bprefix) {
3428 : zend_scan_binary_single_string(zendlval, yytext+2, yyleng-3 TSRMLS_CC);
3429 : return T_CONSTANT_ENCAPSED_STRING;
3430 : } else {
3431 : return zend_scan_unicode_single_string(zendlval TSRMLS_CC);
3432 : }
3433 : }
3434 : #line 3435 "Zend/zend_language_scanner.c"
3435 158809 : yy179:
3436 : YYDEBUG(179, *YYCURSOR);
3437 158809 : ++YYCURSOR;
3438 159943 : yy180:
3439 : YYDEBUG(180, *YYCURSOR);
3440 159943 : yyleng = YYCURSOR - SCNG(yy_text);
3441 : #line 2322 "Zend/zend_language_scanner.l"
3442 : {
3443 : int bprefix = (yytext[0] != '"') ? 1 : 0;
3444 :
3445 : while (YYCURSOR < YYLIMIT) {
3446 : switch (*YYCURSOR++) {
3447 : case '"':
3448 : yyleng = YYCURSOR - SCNG(yy_text);
3449 :
3450 : if (bprefix) {
3451 : zend_scan_binary_escape_string(zendlval, yytext+2, yyleng-3, '"' TSRMLS_CC);
3452 : return T_CONSTANT_ENCAPSED_STRING;
3453 : } else {
3454 : return zend_scan_unicode_escape_string(zendlval, yytext+1, yyleng-2, 0x22 /*'"'*/, T_CONSTANT_ENCAPSED_STRING TSRMLS_CC);
3455 : }
3456 : case '$':
3457 : if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {
3458 : break;
3459 : }
3460 : continue;
3461 : case '{':
3462 : if (*YYCURSOR == '$') {
3463 : break;
3464 : }
3465 : continue;
3466 : case '\\':
3467 : if (YYCURSOR < YYLIMIT) {
3468 : YYCURSOR++;
3469 : }
3470 : /* fall through */
3471 : default:
3472 : continue;
3473 : }
3474 :
3475 : YYCURSOR--;
3476 : break;
3477 : }
3478 :
3479 : /* Remember how much was scanned to save rescanning */
3480 : SET_DOUBLE_QUOTES_SCANNED_LENGTH(YYCURSOR - SCNG(yy_text) - yyleng);
3481 :
3482 : YYCURSOR = SCNG(yy_text) + yyleng;
3483 :
3484 : BEGIN(ST_DOUBLE_QUOTES);
3485 : return bprefix ? T_BINARY_DOUBLE : '"';
3486 : }
3487 : #line 3488 "Zend/zend_language_scanner.c"
3488 105 : yy181:
3489 : YYDEBUG(181, *YYCURSOR);
3490 105 : ++YYCURSOR;
3491 : YYDEBUG(182, *YYCURSOR);
3492 105 : yyleng = YYCURSOR - SCNG(yy_text);
3493 : #line 2418 "Zend/zend_language_scanner.l"
3494 : {
3495 : BEGIN(ST_BACKQUOTE);
3496 : return '`';
3497 : }
3498 : #line 3499 "Zend/zend_language_scanner.c"
3499 1445 : yy183:
3500 : YYDEBUG(183, *YYCURSOR);
3501 1445 : ++YYCURSOR;
3502 : YYDEBUG(184, *YYCURSOR);
3503 1445 : yyleng = YYCURSOR - SCNG(yy_text);
3504 : #line 2689 "Zend/zend_language_scanner.l"
3505 : {
3506 : if (YYCURSOR > YYLIMIT) {
3507 : return 0;
3508 : }
3509 :
3510 : zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
3511 : goto restart;
3512 : }
3513 : #line 3514 "Zend/zend_language_scanner.c"
3514 12924581 : yy185:
3515 : YYDEBUG(185, *YYCURSOR);
3516 12924581 : ++YYCURSOR;
3517 12924581 : YYFILL(1);
3518 12924581 : yych = *YYCURSOR;
3519 13227752 : yy186:
3520 : YYDEBUG(186, *YYCURSOR);
3521 13227752 : if (yybm[0+yych] & 8) {
3522 12875553 : goto yy185;
3523 : }
3524 352199 : goto yy124;
3525 24695 : yy187:
3526 : YYDEBUG(187, *YYCURSOR);
3527 24695 : yyaccept = 3;
3528 24695 : YYMARKER = ++YYCURSOR;
3529 24695 : YYFILL(3);
3530 24695 : yych = *YYCURSOR;
3531 : YYDEBUG(188, *YYCURSOR);
3532 24695 : if (yybm[0+yych] & 16) {
3533 19186 : goto yy187;
3534 : }
3535 5509 : if (yych == 'E') goto yy192;
3536 5004 : if (yych == 'e') goto yy192;
3537 6817 : yy189:
3538 : YYDEBUG(189, *YYCURSOR);
3539 6817 : yyleng = YYCURSOR - SCNG(yy_text);
3540 : #line 1870 "Zend/zend_language_scanner.l"
3541 : {
3542 : Z_DVAL_P(zendlval) = zend_strtod(yytext, NULL);
3543 : Z_TYPE_P(zendlval) = IS_DOUBLE;
3544 : return T_DNUMBER;
3545 : }
3546 : #line 3547 "Zend/zend_language_scanner.c"
3547 61048 : yy190:
3548 : YYDEBUG(190, *YYCURSOR);
3549 61048 : yyaccept = 2;
3550 61048 : YYMARKER = ++YYCURSOR;
3551 61048 : YYFILL(3);
3552 61048 : yych = *YYCURSOR;
3553 : YYDEBUG(191, *YYCURSOR);
3554 61048 : if (yych <= '9') {
3555 55471 : if (yych == '.') goto yy187;
3556 51966 : if (yych <= '/') goto yy172;
3557 36351 : goto yy190;
3558 : } else {
3559 5577 : if (yych <= 'E') {
3560 5520 : if (yych <= 'D') goto yy172;
3561 : } else {
3562 57 : if (yych != 'e') goto yy172;
3563 : }
3564 : }
3565 2105 : yy192:
3566 : YYDEBUG(192, *YYCURSOR);
3567 2105 : yych = *++YYCURSOR;
3568 2105 : if (yych <= ',') {
3569 178 : if (yych == '+') goto yy194;
3570 : } else {
3571 1927 : if (yych <= '-') goto yy194;
3572 1332 : if (yych <= '/') goto yy193;
3573 1332 : if (yych <= '9') goto yy195;
3574 : }
3575 49408 : yy193:
3576 : YYDEBUG(193, *YYCURSOR);
3577 49408 : YYCURSOR = YYMARKER;
3578 49408 : if (yyaccept <= 2) {
3579 49325 : if (yyaccept <= 1) {
3580 49325 : if (yyaccept <= 0) {
3581 0 : goto yy124;
3582 : } else {
3583 49325 : goto yy138;
3584 : }
3585 : } else {
3586 0 : goto yy172;
3587 : }
3588 : } else {
3589 83 : if (yyaccept <= 4) {
3590 82 : if (yyaccept <= 3) {
3591 0 : goto yy189;
3592 : } else {
3593 82 : goto yy234;
3594 : }
3595 : } else {
3596 1 : goto yy250;
3597 : }
3598 : }
3599 773 : yy194:
3600 : YYDEBUG(194, *YYCURSOR);
3601 773 : yych = *++YYCURSOR;
3602 773 : if (yych <= '/') goto yy193;
3603 773 : if (yych >= ':') goto yy193;
3604 3376 : yy195:
3605 : YYDEBUG(195, *YYCURSOR);
3606 3376 : ++YYCURSOR;
3607 3376 : YYFILL(1);
3608 3376 : yych = *YYCURSOR;
3609 : YYDEBUG(196, *YYCURSOR);
3610 3376 : if (yych <= '/') goto yy189;
3611 1314 : if (yych <= '9') goto yy195;
3612 43 : goto yy189;
3613 1354 : yy197:
3614 : YYDEBUG(197, *YYCURSOR);
3615 1354 : yych = *++YYCURSOR;
3616 1354 : if (yybm[0+yych] & 32) {
3617 1354 : goto yy198;
3618 : }
3619 0 : goto yy193;
3620 5579 : yy198:
3621 : YYDEBUG(198, *YYCURSOR);
3622 5579 : ++YYCURSOR;
3623 5579 : YYFILL(1);
3624 5579 : yych = *YYCURSOR;
3625 : YYDEBUG(199, *YYCURSOR);
3626 5579 : if (yybm[0+yych] & 32) {
3627 4225 : goto yy198;
3628 : }
3629 : YYDEBUG(200, *YYCURSOR);
3630 1354 : yyleng = YYCURSOR - SCNG(yy_text);
3631 : #line 1830 "Zend/zend_language_scanner.l"
3632 : {
3633 : char *hex = yytext + 2; /* Skip "0x" */
3634 : int len = yyleng - 2;
3635 :
3636 : /* Skip any leading 0s */
3637 : while (*hex == '0') {
3638 : hex++;
3639 : len--;
3640 : }
3641 :
3642 : if (len < SIZEOF_LONG * 2 || (len == SIZEOF_LONG * 2 && *hex <= '7')) {
3643 : Z_LVAL_P(zendlval) = strtol(hex, NULL, 16);
3644 : Z_TYPE_P(zendlval) = IS_LONG;
3645 : return T_LNUMBER;
3646 : } else {
3647 : Z_DVAL_P(zendlval) = zend_hex_strtod(hex, NULL);
3648 : Z_TYPE_P(zendlval) = IS_DOUBLE;
3649 : return T_DNUMBER;
3650 : }
3651 : }
3652 : #line 3653 "Zend/zend_language_scanner.c"
3653 23759 : yy201:
3654 : YYDEBUG(201, *YYCURSOR);
3655 23759 : ++YYCURSOR;
3656 23759 : if ((yych = *YYCURSOR) == '\n') goto yy203;
3657 4512 : if (yych == '\r') goto yy204;
3658 23759 : yy202:
3659 : YYDEBUG(202, *YYCURSOR);
3660 23759 : yyleng = YYCURSOR - SCNG(yy_text);
3661 : #line 2267 "Zend/zend_language_scanner.l"
3662 : {
3663 : Z_STRVAL_P(zendlval) = yytext; /* no copying - intentional */
3664 : Z_STRLEN_P(zendlval) = yyleng;
3665 : Z_TYPE_P(zendlval) = IS_STRING;
3666 : BEGIN(INITIAL);
3667 : return T_CLOSE_TAG; /* implicit ';' at php-end tag */
3668 : }
3669 : #line 3670 "Zend/zend_language_scanner.c"
3670 19369 : yy203:
3671 : YYDEBUG(203, *YYCURSOR);
3672 19369 : yych = *++YYCURSOR;
3673 19369 : goto yy202;
3674 122 : yy204:
3675 : YYDEBUG(204, *YYCURSOR);
3676 122 : yych = *++YYCURSOR;
3677 122 : if (yych == '\n') goto yy203;
3678 0 : goto yy202;
3679 3131890 : yy205:
3680 : YYDEBUG(205, *YYCURSOR);
3681 3131890 : ++YYCURSOR;
3682 3131890 : YYFILL(1);
3683 3131890 : yych = *YYCURSOR;
3684 : YYDEBUG(206, *YYCURSOR);
3685 3131890 : if (yych <= '^') {
3686 849792 : if (yych <= '9') {
3687 647690 : if (yych >= '0') goto yy205;
3688 : } else {
3689 202102 : if (yych <= '@') goto yy207;
3690 174168 : if (yych <= 'Z') goto yy205;
3691 : }
3692 : } else {
3693 2282098 : if (yych <= '`') {
3694 118252 : if (yych <= '_') goto yy205;
3695 : } else {
3696 2163846 : if (yych <= 'z') goto yy205;
3697 325 : if (yych >= 0x7F) goto yy205;
3698 : }
3699 : }
3700 538267 : yy207:
3701 : YYDEBUG(207, *YYCURSOR);
3702 538267 : yyleng = YYCURSOR - SCNG(yy_text);
3703 : #line 2149 "Zend/zend_language_scanner.l"
3704 : {
3705 : if (!zend_copy_scanner_string(zendlval, (yytext+1), (yyleng-1), IS_UNICODE, SCNG(output_conv) TSRMLS_CC)) {
3706 : return 0;
3707 : }
3708 : if (!zend_check_and_normalize_identifier(zendlval)) {
3709 : return 0;
3710 : }
3711 : return T_VARIABLE;
3712 : }
3713 : #line 3714 "Zend/zend_language_scanner.c"
3714 1 : yy208:
3715 : YYDEBUG(208, *YYCURSOR);
3716 1 : yych = *++YYCURSOR;
3717 1 : if (yych == 'R') goto yy209;
3718 1 : if (yych != 'r') goto yy186;
3719 1 : yy209:
3720 : YYDEBUG(209, *YYCURSOR);
3721 1 : ++YYCURSOR;
3722 1 : if (yybm[0+(yych = *YYCURSOR)] & 8) {
3723 0 : goto yy185;
3724 : }
3725 : YYDEBUG(210, *YYCURSOR);
3726 1 : yyleng = YYCURSOR - SCNG(yy_text);
3727 : #line 1750 "Zend/zend_language_scanner.l"
3728 : {
3729 : return T_LOGICAL_XOR;
3730 : }
3731 : #line 3732 "Zend/zend_language_scanner.c"
3732 675 : yy211:
3733 : YYDEBUG(211, *YYCURSOR);
3734 675 : ++YYCURSOR;
3735 675 : if (yybm[0+(yych = *YYCURSOR)] & 8) {
3736 36 : goto yy185;
3737 : }
3738 : YYDEBUG(212, *YYCURSOR);
3739 639 : yyleng = YYCURSOR - SCNG(yy_text);
3740 : #line 1742 "Zend/zend_language_scanner.l"
3741 : {
3742 : return T_LOGICAL_OR;
3743 : }
3744 : #line 3745 "Zend/zend_language_scanner.c"
3745 2 : yy213:
3746 : YYDEBUG(213, *YYCURSOR);
3747 2 : ++YYCURSOR;
3748 : YYDEBUG(214, *YYCURSOR);
3749 2 : yyleng = YYCURSOR - SCNG(yy_text);
3750 : #line 1730 "Zend/zend_language_scanner.l"
3751 : {
3752 : return T_XOR_EQUAL;
3753 : }
3754 : #line 3755 "Zend/zend_language_scanner.c"
3755 1962 : yy215:
3756 : YYDEBUG(215, *YYCURSOR);
3757 1962 : ++YYCURSOR;
3758 : YYDEBUG(216, *YYCURSOR);
3759 1962 : yyleng = YYCURSOR - SCNG(yy_text);
3760 : #line 1734 "Zend/zend_language_scanner.l"
3761 : {
3762 : return T_BOOLEAN_OR;
3763 : }
3764 : #line 3765 "Zend/zend_language_scanner.c"
3765 96 : yy217:
3766 : YYDEBUG(217, *YYCURSOR);
3767 96 : ++YYCURSOR;
3768 : YYDEBUG(218, *YYCURSOR);
3769 96 : yyleng = YYCURSOR - SCNG(yy_text);
3770 : #line 1726 "Zend/zend_language_scanner.l"
3771 : {
3772 : return T_OR_EQUAL;
3773 : }
3774 : #line 3775 "Zend/zend_language_scanner.c"
3775 3663 : yy219:
3776 : YYDEBUG(219, *YYCURSOR);
3777 3663 : ++YYCURSOR;
3778 : YYDEBUG(220, *YYCURSOR);
3779 3663 : yyleng = YYCURSOR - SCNG(yy_text);
3780 : #line 1738 "Zend/zend_language_scanner.l"
3781 : {
3782 : return T_BOOLEAN_AND;
3783 : }
3784 : #line 3785 "Zend/zend_language_scanner.c"
3785 3 : yy221:
3786 : YYDEBUG(221, *YYCURSOR);
3787 3 : ++YYCURSOR;
3788 : YYDEBUG(222, *YYCURSOR);
3789 3 : yyleng = YYCURSOR - SCNG(yy_text);
3790 : #line 1722 "Zend/zend_language_scanner.l"
3791 : {
3792 : return T_AND_EQUAL;
3793 : }
3794 : #line 3795 "Zend/zend_language_scanner.c"
3795 2 : yy223:
3796 : YYDEBUG(223, *YYCURSOR);
3797 2 : ++YYCURSOR;
3798 2 : if ((yych = *YYCURSOR) == '\n') goto yy227;
3799 0 : if (yych == '\r') goto yy228;
3800 2 : yy224:
3801 : YYDEBUG(224, *YYCURSOR);
3802 2 : yyleng = YYCURSOR - SCNG(yy_text);
3803 : #line 2276 "Zend/zend_language_scanner.l"
3804 : {
3805 : if (CG(asp_tags)) {
3806 : BEGIN(INITIAL);
3807 : Z_STRLEN_P(zendlval) = yyleng;
3808 : Z_TYPE_P(zendlval) = IS_STRING;
3809 : Z_STRVAL_P(zendlval) = yytext; /* no copying - intentional */
3810 : return T_CLOSE_TAG; /* implicit ';' at php-end tag */
3811 : } else {
3812 : yyless(1);
3813 : return yytext[0];
3814 : }
3815 : }
3816 : #line 3817 "Zend/zend_language_scanner.c"
3817 1 : yy225:
3818 : YYDEBUG(225, *YYCURSOR);
3819 1 : ++YYCURSOR;
3820 : YYDEBUG(226, *YYCURSOR);
3821 1 : yyleng = YYCURSOR - SCNG(yy_text);
3822 : #line 1710 "Zend/zend_language_scanner.l"
3823 : {
3824 : return T_MOD_EQUAL;
3825 : }
3826 : #line 3827 "Zend/zend_language_scanner.c"
3827 2 : yy227:
3828 : YYDEBUG(227, *YYCURSOR);
3829 2 : yych = *++YYCURSOR;
3830 2 : goto yy224;
3831 0 : yy228:
3832 : YYDEBUG(228, *YYCURSOR);
3833 0 : yych = *++YYCURSOR;
3834 0 : if (yych == '\n') goto yy227;
3835 0 : goto yy224;
3836 1194 : yy229:
3837 : YYDEBUG(229, *YYCURSOR);
3838 1194 : yyaccept = 3;
3839 1194 : YYMARKER = ++YYCURSOR;
3840 1194 : YYFILL(3);
3841 1194 : yych = *YYCURSOR;
3842 : YYDEBUG(230, *YYCURSOR);
3843 1194 : if (yych <= 'D') {
3844 1032 : if (yych <= '/') goto yy189;
3845 296 : if (yych <= '9') goto yy229;
3846 0 : goto yy189;
3847 : } else {
3848 162 : if (yych <= 'E') goto yy192;
3849 79 : if (yych == 'e') goto yy192;
3850 0 : goto yy189;
3851 : }
3852 1934 : yy231:
3853 : YYDEBUG(231, *YYCURSOR);
3854 1934 : ++YYCURSOR;
3855 : YYDEBUG(232, *YYCURSOR);
3856 1934 : yyleng = YYCURSOR - SCNG(yy_text);
3857 : #line 1706 "Zend/zend_language_scanner.l"
3858 : {
3859 : return T_CONCAT_EQUAL;
3860 : }
3861 : #line 3862 "Zend/zend_language_scanner.c"
3862 21348 : yy233:
3863 : YYDEBUG(233, *YYCURSOR);
3864 21348 : yyaccept = 4;
3865 21348 : yych = *(YYMARKER = ++YYCURSOR);
3866 21348 : if (yych == '*') goto yy238;
3867 21348 : yy234:
3868 : YYDEBUG(234, *YYCURSOR);
3869 21348 : yyleng = YYCURSOR - SCNG(yy_text);
3870 : #line 2228 "Zend/zend_language_scanner.l"
3871 : {
3872 : int doc_com;
3873 :
3874 : if (yyleng > 2) {
3875 : doc_com = 1;
3876 : RESET_DOC_COMMENT();
3877 : } else {
3878 : doc_com = 0;
3879 : }
3880 :
3881 : while (YYCURSOR < YYLIMIT) {
3882 : if (*YYCURSOR++ == '*' && *YYCURSOR == '/') {
3883 : break;
3884 : }
3885 : }
3886 :
3887 : if (YYCURSOR < YYLIMIT) {
3888 : YYCURSOR++;
3889 : } else {
3890 : zend_error(E_COMPILE_WARNING, "Unterminated comment starting line %d", CG(zend_lineno));
3891 : }
3892 :
3893 : yyleng = YYCURSOR - SCNG(yy_text);
3894 : HANDLE_NEWLINES(yytext, yyleng);
3895 :
3896 : if (doc_com) {
3897 : zval tmp;
3898 :
3899 : if (!zend_copy_scanner_string(&tmp, yytext, yyleng, IS_UNICODE, SCNG(output_conv) TSRMLS_CC)) {
3900 : return 0;
3901 : }
3902 : CG(doc_comment) = tmp.value.uni.val;
3903 : CG(doc_comment_len) = tmp.value.uni.len;
3904 : return T_DOC_COMMENT;
3905 : }
3906 :
3907 : return T_COMMENT;
3908 : }
3909 : #line 3910 "Zend/zend_language_scanner.c"
3910 37183 : yy235:
3911 : YYDEBUG(235, *YYCURSOR);
3912 37183 : yych = *++YYCURSOR;
3913 37183 : goto yy176;
3914 4 : yy236:
3915 : YYDEBUG(236, *YYCURSOR);
3916 4 : ++YYCURSOR;
3917 : YYDEBUG(237, *YYCURSOR);
3918 4 : yyleng = YYCURSOR - SCNG(yy_text);
3919 : #line 1702 "Zend/zend_language_scanner.l"
3920 : {
3921 : return T_DIV_EQUAL;
3922 : }
3923 : #line 3924 "Zend/zend_language_scanner.c"
3924 2087 : yy238:
3925 : YYDEBUG(238, *YYCURSOR);
3926 2087 : yych = *++YYCURSOR;
3927 2087 : if (yybm[0+yych] & 64) {
3928 2005 : goto yy239;
3929 : }
3930 82 : goto yy193;
3931 6000 : yy239:
3932 : YYDEBUG(239, *YYCURSOR);
3933 6000 : ++YYCURSOR;
3934 6000 : YYFILL(1);
3935 6000 : yych = *YYCURSOR;
3936 : YYDEBUG(240, *YYCURSOR);
3937 6000 : if (yybm[0+yych] & 64) {
3938 3995 : goto yy239;
3939 : }
3940 2005 : goto yy234;
3941 13 : yy241:
3942 : YYDEBUG(241, *YYCURSOR);
3943 13 : ++YYCURSOR;
3944 : YYDEBUG(242, *YYCURSOR);
3945 13 : yyleng = YYCURSOR - SCNG(yy_text);
3946 : #line 1698 "Zend/zend_language_scanner.l"
3947 : {
3948 : return T_MUL_EQUAL;
3949 : }
3950 : #line 3951 "Zend/zend_language_scanner.c"
3951 39 : yy243:
3952 : YYDEBUG(243, *YYCURSOR);
3953 39 : ++YYCURSOR;
3954 39 : if ((yych = *YYCURSOR) == '=') goto yy247;
3955 : YYDEBUG(244, *YYCURSOR);
3956 34 : yyleng = YYCURSOR - SCNG(yy_text);
3957 : #line 1758 "Zend/zend_language_scanner.l"
3958 : {
3959 : return T_SR;
3960 : }
3961 : #line 3962 "Zend/zend_language_scanner.c"
3962 258 : yy245:
3963 : YYDEBUG(245, *YYCURSOR);
3964 258 : ++YYCURSOR;
3965 : YYDEBUG(246, *YYCURSOR);
3966 258 : yyleng = YYCURSOR - SCNG(yy_text);
3967 : #line 1686 "Zend/zend_language_scanner.l"
3968 : {
3969 : return T_IS_GREATER_OR_EQUAL;
3970 : }
3971 : #line 3972 "Zend/zend_language_scanner.c"
3972 5 : yy247:
3973 : YYDEBUG(247, *YYCURSOR);
3974 5 : ++YYCURSOR;
3975 : YYDEBUG(248, *YYCURSOR);
3976 5 : yyleng = YYCURSOR - SCNG(yy_text);
3977 : #line 1718 "Zend/zend_language_scanner.l"
3978 : {
3979 : return T_SR_EQUAL;
3980 : }
3981 : #line 3982 "Zend/zend_language_scanner.c"
3982 1387 : yy249:
3983 : YYDEBUG(249, *YYCURSOR);
3984 1387 : yyaccept = 5;
3985 1387 : yych = *(YYMARKER = ++YYCURSOR);
3986 1387 : if (yych <= ';') goto yy250;
3987 1284 : if (yych <= '<') goto yy265;
3988 4 : if (yych <= '=') goto yy263;
3989 104 : yy250:
3990 : YYDEBUG(250, *YYCURSOR);
3991 104 : yyleng = YYCURSOR - SCNG(yy_text);
3992 : #line 1754 "Zend/zend_language_scanner.l"
3993 : {
3994 : return T_SL;
3995 : }
3996 : #line 3997 "Zend/zend_language_scanner.c"
3997 3 : yy251:
3998 : YYDEBUG(251, *YYCURSOR);
3999 3 : yych = *++YYCURSOR;
4000 3 : if (yych == 'S') goto yy256;
4001 3 : if (yych == 's') goto yy256;
4002 0 : goto yy193;
4003 1609 : yy252:
4004 : YYDEBUG(252, *YYCURSOR);
4005 1609 : ++YYCURSOR;
4006 : YYDEBUG(253, *YYCURSOR);
4007 1609 : yyleng = YYCURSOR - SCNG(yy_text);
4008 : #line 1682 "Zend/zend_language_scanner.l"
4009 : {
4010 : return T_IS_SMALLER_OR_EQUAL;
4011 : }
4012 : #line 4013 "Zend/zend_language_scanner.c"
4013 3 : yy254:
4014 : YYDEBUG(254, *YYCURSOR);
4015 3 : ++YYCURSOR;
4016 2412 : yy255:
4017 : YYDEBUG(255, *YYCURSOR);
4018 2412 : yyleng = YYCURSOR - SCNG(yy_text);
4019 : #line 1678 "Zend/zend_language_scanner.l"
4020 : {
4021 : return T_IS_NOT_EQUAL;
4022 : }
4023 : #line 4024 "Zend/zend_language_scanner.c"
4024 3 : yy256:
4025 : YYDEBUG(256, *YYCURSOR);
4026 3 : yych = *++YYCURSOR;
4027 3 : if (yych == 'C') goto yy257;
4028 3 : if (yych != 'c') goto yy193;
4029 3 : yy257:
4030 : YYDEBUG(257, *YYCURSOR);
4031 3 : yych = *++YYCURSOR;
4032 3 : if (yych == 'R') goto yy258;
4033 3 : if (yych != 'r') goto yy193;
4034 3 : yy258:
4035 : YYDEBUG(258, *YYCURSOR);
4036 3 : yych = *++YYCURSOR;
4037 3 : if (yych == 'I') goto yy259;
4038 3 : if (yych != 'i') goto yy193;
4039 3 : yy259:
4040 : YYDEBUG(259, *YYCURSOR);
4041 3 : yych = *++YYCURSOR;
4042 3 : if (yych == 'P') goto yy260;
4043 3 : if (yych != 'p') goto yy193;
4044 3 : yy260:
4045 : YYDEBUG(260, *YYCURSOR);
4046 3 : yych = *++YYCURSOR;
4047 3 : if (yych == 'T') goto yy261;
4048 3 : if (yych != 't') goto yy193;
4049 3 : yy261:
4050 : YYDEBUG(261, *YYCURSOR);
4051 3 : ++YYCURSOR;
4052 3 : YYFILL(3);
4053 3 : yych = *YYCURSOR;
4054 : YYDEBUG(262, *YYCURSOR);
4055 3 : if (yych <= '\r') {
4056 0 : if (yych <= 0x08) goto yy193;
4057 0 : if (yych <= '\n') goto yy261;
4058 0 : if (yych <= '\f') goto yy193;
4059 0 : goto yy261;
4060 : } else {
4061 3 : if (yych <= ' ') {
4062 0 : if (yych <= 0x1F) goto yy193;
4063 0 : goto yy261;
4064 : } else {
4065 3 : if (yych == '>') goto yy201;
4066 0 : goto yy193;
4067 : }
4068 : }
4069 4 : yy263:
4070 : YYDEBUG(263, *YYCURSOR);
4071 4 : ++YYCURSOR;
4072 : YYDEBUG(264, *YYCURSOR);
4073 4 : yyleng = YYCURSOR - SCNG(yy_text);
4074 : #line 1714 "Zend/zend_language_scanner.l"
4075 : {
4076 : return T_SL_EQUAL;
4077 : }
4078 : #line 4079 "Zend/zend_language_scanner.c"
4079 1410 : yy265:
4080 : YYDEBUG(265, *YYCURSOR);
4081 1410 : ++YYCURSOR;
4082 1410 : YYFILL(2);
4083 1410 : yych = *YYCURSOR;
4084 : YYDEBUG(266, *YYCURSOR);
4085 1410 : if (yybm[0+yych] & 128) {
4086 27 : goto yy265;
4087 : }
4088 1383 : if (yych <= 'Z') {
4089 1376 : if (yych <= '&') {
4090 10 : if (yych == '"') goto yy270;
4091 0 : goto yy193;
4092 : } else {
4093 1366 : if (yych <= '\'') goto yy269;
4094 1324 : if (yych <= '@') goto yy193;
4095 : }
4096 : } else {
4097 7 : if (yych <= '`') {
4098 2 : if (yych != '_') goto yy193;
4099 : } else {
4100 5 : if (yych <= 'z') goto yy267;
4101 0 : if (yych <= '~') goto yy193;
4102 : }
4103 : }
4104 4457 : yy267:
4105 : YYDEBUG(267, *YYCURSOR);
4106 4457 : ++YYCURSOR;
4107 4457 : YYFILL(2);
4108 4457 : yych = *YYCURSOR;
4109 : YYDEBUG(268, *YYCURSOR);
4110 4457 : if (yych <= '@') {
4111 1371 : if (yych <= '\f') {
4112 1331 : if (yych == '\n') goto yy274;
4113 0 : goto yy193;
4114 : } else {
4115 40 : if (yych <= '\r') goto yy276;
4116 40 : if (yych <= '/') goto yy193;
4117 40 : if (yych <= '9') goto yy267;
4118 0 : goto yy193;
4119 : }
4120 : } else {
4121 3086 : if (yych <= '_') {
4122 3002 : if (yych <= 'Z') goto yy267;
4123 16 : if (yych <= '^') goto yy193;
4124 16 : goto yy267;
4125 : } else {
4126 84 : if (yych <= '`') goto yy193;
4127 84 : if (yych <= 'z') goto yy267;
4128 0 : if (yych <= '~') goto yy193;
4129 0 : goto yy267;
4130 : }
4131 : }
4132 42 : yy269:
4133 : YYDEBUG(269, *YYCURSOR);
4134 42 : yych = *++YYCURSOR;
4135 42 : if (yych == '\'') goto yy193;
4136 42 : if (yych <= '/') goto yy278;
4137 42 : if (yych <= '9') goto yy193;
4138 42 : goto yy278;
4139 10 : yy270:
4140 : YYDEBUG(270, *YYCURSOR);
4141 10 : yych = *++YYCURSOR;
4142 10 : if (yych == '"') goto yy193;
4143 10 : if (yych <= '/') goto yy272;
4144 10 : if (yych <= '9') goto yy193;
4145 10 : goto yy272;
4146 47 : yy271:
4147 : YYDEBUG(271, *YYCURSOR);
4148 47 : ++YYCURSOR;
4149 47 : YYFILL(3);
4150 47 : yych = *YYCURSOR;
4151 57 : yy272:
4152 : YYDEBUG(272, *YYCURSOR);
4153 57 : if (yych <= 'Z') {
4154 57 : if (yych <= '/') {
4155 10 : if (yych != '"') goto yy193;
4156 : } else {
4157 47 : if (yych <= '9') goto yy271;
4158 47 : if (yych <= '@') goto yy193;
4159 47 : goto yy271;
4160 : }
4161 : } else {
4162 0 : if (yych <= '`') {
4163 0 : if (yych == '_') goto yy271;
4164 0 : goto yy193;
4165 : } else {
4166 0 : if (yych <= 'z') goto yy271;
4167 0 : if (yych <= '~') goto yy193;
4168 0 : goto yy271;
4169 : }
4170 : }
4171 51 : yy273:
4172 : YYDEBUG(273, *YYCURSOR);
4173 51 : yych = *++YYCURSOR;
4174 51 : if (yych == '\n') goto yy274;
4175 0 : if (yych == '\r') goto yy276;
4176 0 : goto yy193;
4177 1382 : yy274:
4178 : YYDEBUG(274, *YYCURSOR);
4179 1382 : ++YYCURSOR;
4180 1382 : yy275:
4181 : YYDEBUG(275, *YYCURSOR);
4182 1382 : yyleng = YYCURSOR - SCNG(yy_text);
4183 : #line 2369 "Zend/zend_language_scanner.l"
4184 : {
4185 : char *s;
4186 : int bprefix = (yytext[0] != '<') ? 1 : 0;
4187 :
4188 : /* save old heredoc label */
4189 : Z_STRVAL_P(zendlval) = CG(heredoc);
4190 : Z_STRLEN_P(zendlval) = CG(heredoc_len);
4191 :
4192 : CG(zend_lineno)++;
4193 : CG(heredoc_len) = yyleng-bprefix-3-1-(yytext[yyleng-2]=='\r'?1:0);
4194 : s = yytext+bprefix+3;
4195 : while ((*s == ' ') || (*s == '\t')) {
4196 : s++;
4197 : CG(heredoc_len)--;
4198 : }
4199 :
4200 : if (*s == '\'') {
4201 : s++;
4202 : CG(heredoc_len) -= 2;
4203 :
4204 : BEGIN(ST_NOWDOC);
4205 : } else {
4206 : if (*s == '"') {
4207 : s++;
4208 : CG(heredoc_len) -= 2;
4209 : }
4210 :
4211 : BEGIN(ST_HEREDOC);
4212 : }
4213 :
4214 : CG(heredoc) = estrndup(s, CG(heredoc_len));
4215 :
4216 : /* Check for ending label on the next line */
4217 : if (CG(heredoc_len) < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, s, CG(heredoc_len))) {
4218 : YYCTYPE *end = YYCURSOR + CG(heredoc_len);
4219 :
4220 : if (*end == ';') {
4221 : end++;
4222 : }
4223 :
4224 : if (*end == '\n' || *end == '\r') {
4225 : BEGIN(ST_END_HEREDOC);
4226 : }
4227 : }
4228 :
4229 : return bprefix ? T_BINARY_HEREDOC : T_START_HEREDOC;
4230 : }
4231 : #line 4232 "Zend/zend_language_scanner.c"
4232 0 : yy276:
4233 : YYDEBUG(276, *YYCURSOR);
4234 0 : yych = *++YYCURSOR;
4235 0 : if (yych == '\n') goto yy274;
4236 0 : goto yy275;
4237 312 : yy277:
4238 : YYDEBUG(277, *YYCURSOR);
4239 312 : ++YYCURSOR;
4240 312 : YYFILL(3);
4241 312 : yych = *YYCURSOR;
4242 354 : yy278:
4243 : YYDEBUG(278, *YYCURSOR);
4244 354 : if (yych <= 'Z') {
4245 348 : if (yych <= '/') {
4246 42 : if (yych == '\'') goto yy273;
4247 0 : goto yy193;
4248 : } else {
4249 306 : if (yych <= '9') goto yy277;
4250 306 : if (yych <= '@') goto yy193;
4251 306 : goto yy277;
4252 : }
4253 : } else {
4254 6 : if (yych <= '`') {
4255 0 : if (yych == '_') goto yy277;
4256 0 : goto yy193;
4257 : } else {
4258 6 : if (yych <= 'z') goto yy277;
4259 0 : if (yych <= '~') goto yy193;
4260 0 : goto yy277;
4261 : }
4262 : }
4263 8885 : yy279:
4264 : YYDEBUG(279, *YYCURSOR);
4265 8885 : yych = *++YYCURSOR;
4266 8885 : if (yych != '=') goto yy255;
4267 : YYDEBUG(280, *YYCURSOR);
4268 6476 : ++YYCURSOR;
4269 : YYDEBUG(281, *YYCURSOR);
4270 6476 : yyleng = YYCURSOR - SCNG(yy_text);
4271 : #line 1670 "Zend/zend_language_scanner.l"
4272 : {
4273 : return T_IS_NOT_IDENTICAL;
4274 : }
4275 : #line 4276 "Zend/zend_language_scanner.c"
4276 623 : yy282:
4277 : YYDEBUG(282, *YYCURSOR);
4278 623 : ++YYCURSOR;
4279 : YYDEBUG(283, *YYCURSOR);
4280 623 : yyleng = YYCURSOR - SCNG(yy_text);
4281 : #line 1690 "Zend/zend_language_scanner.l"
4282 : {
4283 : return T_PLUS_EQUAL;
4284 : }
4285 : #line 4286 "Zend/zend_language_scanner.c"
4286 5560 : yy284:
4287 : YYDEBUG(284, *YYCURSOR);
4288 5560 : ++YYCURSOR;
4289 : YYDEBUG(285, *YYCURSOR);
4290 5560 : yyleng = YYCURSOR - SCNG(yy_text);
4291 : #line 1658 "Zend/zend_language_scanner.l"
4292 : {
4293 : return T_INC;
4294 : }
4295 : #line 4296 "Zend/zend_language_scanner.c"
4296 377 : yy286:
4297 : YYDEBUG(286, *YYCURSOR);
4298 377 : yych = *++YYCURSOR;
4299 377 : if (yych == 'S') goto yy287;
4300 377 : if (yych != 's') goto yy186;
4301 113 : yy287:
4302 : YYDEBUG(287, *YYCURSOR);
4303 113 : yych = *++YYCURSOR;
4304 113 : if (yych == 'T') goto yy288;
4305 113 : if (yych != 't') goto yy186;
4306 113 : yy288:
4307 : YYDEBUG(288, *YYCURSOR);
4308 113 : ++YYCURSOR;
4309 113 : if (yybm[0+(yych = *YYCURSOR)] & 8) {
4310 2 : goto yy185;
4311 : }
4312 : YYDEBUG(289, *YYCURSOR);
4313 111 : yyleng = YYCURSOR - SCNG(yy_text);
4314 : #line 1650 "Zend/zend_language_scanner.l"
4315 : {
4316 : return T_LIST;
4317 : }
4318 : #line 4319 "Zend/zend_language_scanner.c"
4319 16468 : yy290:
4320 : YYDEBUG(290, *YYCURSOR);
4321 16468 : ++YYCURSOR;
4322 16468 : if ((yych = *YYCURSOR) == '=') goto yy294;
4323 : YYDEBUG(291, *YYCURSOR);
4324 11695 : yyleng = YYCURSOR - SCNG(yy_text);
4325 : #line 1674 "Zend/zend_language_scanner.l"
4326 : {
4327 : return T_IS_EQUAL;
4328 : }
4329 : #line 4330 "Zend/zend_language_scanner.c"
4330 27478 : yy292:
4331 : YYDEBUG(292, *YYCURSOR);
4332 27478 : ++YYCURSOR;
4333 : YYDEBUG(293, *YYCURSOR);
4334 27478 : yyleng = YYCURSOR - SCNG(yy_text);
4335 : #line 1646 "Zend/zend_language_scanner.l"
4336 : {
4337 : return T_DOUBLE_ARROW;
4338 : }
4339 : #line 4340 "Zend/zend_language_scanner.c"
4340 4773 : yy294:
4341 : YYDEBUG(294, *YYCURSOR);
4342 4773 : ++YYCURSOR;
4343 : YYDEBUG(295, *YYCURSOR);
4344 4773 : yyleng = YYCURSOR - SCNG(yy_text);
4345 : #line 1666 "Zend/zend_language_scanner.l"
4346 : {
4347 : return T_IS_IDENTICAL;
4348 : }
4349 : #line 4350 "Zend/zend_language_scanner.c"
4350 12330 : yy296:
4351 : YYDEBUG(296, *YYCURSOR);
4352 12330 : yych = *++YYCURSOR;
4353 : YYDEBUG(-1, yych);
4354 12330 : switch (yych) {
4355 : case 'C':
4356 2499 : case 'c': goto yy298;
4357 : case 'D':
4358 267 : case 'd': goto yy302;
4359 : case 'F':
4360 7526 : case 'f': goto yy299;
4361 : case 'H':
4362 272 : case 'h': goto yy297;
4363 : case 'L':
4364 73 : case 'l': goto yy301;
4365 : case 'M':
4366 746 : case 'm': goto yy300;
4367 : case 'N':
4368 33 : case 'n': goto yy303;
4369 914 : default: goto yy186;
4370 : }
4371 272 : yy297:
4372 : YYDEBUG(297, *YYCURSOR);
4373 272 : yych = *++YYCURSOR;
4374 272 : if (yych == 'A') goto yy357;
4375 23 : if (yych == 'a') goto yy357;
4376 0 : goto yy186;
4377 2499 : yy298:
4378 : YYDEBUG(298, *YYCURSOR);
4379 2499 : yych = *++YYCURSOR;
4380 2499 : if (yych == 'L') goto yy350;
4381 2424 : if (yych == 'l') goto yy350;
4382 2402 : goto yy186;
4383 7526 : yy299:
4384 : YYDEBUG(299, *YYCURSOR);
4385 7526 : yych = *++YYCURSOR;
4386 7526 : if (yych <= 'U') {
4387 7524 : if (yych == 'I') goto yy334;
4388 97 : if (yych <= 'T') goto yy186;
4389 97 : goto yy335;
4390 : } else {
4391 2 : if (yych <= 'i') {
4392 1 : if (yych <= 'h') goto yy186;
4393 1 : goto yy334;
4394 : } else {
4395 1 : if (yych == 'u') goto yy335;
4396 0 : goto yy186;
4397 : }
4398 : }
4399 746 : yy300:
4400 : YYDEBUG(300, *YYCURSOR);
4401 746 : yych = *++YYCURSOR;
4402 746 : if (yych == 'E') goto yy326;
4403 1 : if (yych == 'e') goto yy326;
4404 0 : goto yy186;
4405 73 : yy301:
4406 : YYDEBUG(301, *YYCURSOR);
4407 73 : yych = *++YYCURSOR;
4408 73 : if (yych == 'I') goto yy320;
4409 58 : if (yych == 'i') goto yy320;
4410 57 : goto yy186;
4411 267 : yy302:
4412 : YYDEBUG(302, *YYCURSOR);
4413 267 : yych = *++YYCURSOR;
4414 267 : if (yych == 'I') goto yy315;
4415 171 : if (yych == 'i') goto yy315;
4416 170 : goto yy186;
4417 33 : yy303:
4418 : YYDEBUG(303, *YYCURSOR);
4419 33 : yych = *++YYCURSOR;
4420 33 : if (yych == 'A') goto yy304;
4421 1 : if (yych != 'a') goto yy186;
4422 33 : yy304:
4423 : YYDEBUG(304, *YYCURSOR);
4424 33 : yych = *++YYCURSOR;
4425 33 : if (yych == 'M') goto yy305;
4426 1 : if (yych != 'm') goto yy186;
4427 33 : yy305:
4428 : YYDEBUG(305, *YYCURSOR);
4429 33 : yych = *++YYCURSOR;
4430 33 : if (yych == 'E') goto yy306;
4431 1 : if (yych != 'e') goto yy186;
4432 33 : yy306:
4433 : YYDEBUG(306, *YYCURSOR);
4434 33 : yych = *++YYCURSOR;
4435 33 : if (yych == 'S') goto yy307;
4436 1 : if (yych != 's') goto yy186;
4437 33 : yy307:
4438 : YYDEBUG(307, *YYCURSOR);
4439 33 : yych = *++YYCURSOR;
4440 33 : if (yych == 'P') goto yy308;
4441 1 : if (yych != 'p') goto yy186;
4442 33 : yy308:
4443 : YYDEBUG(308, *YYCURSOR);
4444 33 : yych = *++YYCURSOR;
4445 33 : if (yych == 'A') goto yy309;
4446 1 : if (yych != 'a') goto yy186;
4447 33 : yy309:
4448 : YYDEBUG(309, *YYCURSOR);
4449 33 : yych = *++YYCURSOR;
4450 33 : if (yych == 'C') goto yy310;
4451 1 : if (yych != 'c') goto yy186;
4452 33 : yy310:
4453 : YYDEBUG(310, *YYCURSOR);
4454 33 : yych = *++YYCURSOR;
4455 33 : if (yych == 'E') goto yy311;
4456 1 : if (yych != 'e') goto yy186;
4457 33 : yy311:
4458 : YYDEBUG(311, *YYCURSOR);
4459 33 : yych = *++YYCURSOR;
4460 33 : if (yych != '_') goto yy186;
4461 : YYDEBUG(312, *YYCURSOR);
4462 33 : yych = *++YYCURSOR;
4463 33 : if (yych != '_') goto yy186;
4464 : YYDEBUG(313, *YYCURSOR);
4465 33 : ++YYCURSOR;
4466 33 : if (yybm[0+(yych = *YYCURSOR)] & 8) {
4467 0 : goto yy185;
4468 : }
4469 : YYDEBUG(314, *YYCURSOR);
4470 33 : yyleng = YYCURSOR - SCNG(yy_text);
4471 : #line 1980 "Zend/zend_language_scanner.l"
4472 : {
4473 : if (CG(current_namespace)) {
4474 : *zendlval = *CG(current_namespace);
4475 : zval_copy_ctor(zendlval);
4476 : } else {
4477 : ZVAL_EMPTY_UNICODE(zendlval);
4478 : }
4479 : return T_NS_C;
4480 : }
4481 : #line 4482 "Zend/zend_language_scanner.c"
4482 97 : yy315:
4483 : YYDEBUG(315, *YYCURSOR);
4484 97 : yych = *++YYCURSOR;
4485 97 : if (yych == 'R') goto yy316;
4486 1 : if (yych != 'r') goto yy186;
4487 97 : yy316:
4488 : YYDEBUG(316, *YYCURSOR);
4489 97 : yych = *++YYCURSOR;
4490 97 : if (yych != '_') goto yy186;
4491 : YYDEBUG(317, *YYCURSOR);
4492 97 : yych = *++YYCURSOR;
4493 97 : if (yych != '_') goto yy186;
4494 : YYDEBUG(318, *YYCURSOR);
4495 97 : ++YYCURSOR;
4496 97 : if (yybm[0+(yych = *YYCURSOR)] & 8) {
4497 0 : goto yy185;
4498 : }
4499 : YYDEBUG(319, *YYCURSOR);
4500 97 : yyleng = YYCURSOR - SCNG(yy_text);
4501 : #line 1953 "Zend/zend_language_scanner.l"
4502 : {
4503 : char *filename = zend_get_compiled_filename(TSRMLS_C);
4504 : const size_t filename_len = strlen(filename);
4505 : char *dirname;
4506 :
4507 : if (!filename) {
4508 : filename = "";
4509 : }
4510 :
4511 : dirname = estrndup(filename, filename_len);
4512 : zend_dirname(dirname, filename_len);
4513 :
4514 : if (strcmp(dirname, ".") == 0) {
4515 : dirname = erealloc(dirname, MAXPATHLEN);
4516 : #if HAVE_GETCWD
4517 : VCWD_GETCWD(dirname, MAXPATHLEN);
4518 : #elif HAVE_GETWD
4519 : VCWD_GETWD(dirname);
4520 : #endif
4521 : }
4522 :
4523 : zendlval->value.str.len = strlen(dirname);
4524 : zendlval->value.str.val = dirname;
4525 : zendlval->type = IS_STRING;
4526 : return T_DIR;
4527 : }
4528 : #line 4529 "Zend/zend_language_scanner.c"
4529 16 : yy320:
4530 : YYDEBUG(320, *YYCURSOR);
4531 16 : yych = *++YYCURSOR;
4532 16 : if (yych == 'N') goto yy321;
4533 1 : if (yych != 'n') goto yy186;
4534 16 : yy321:
4535 : YYDEBUG(321, *YYCURSOR);
4536 16 : yych = *++YYCURSOR;
4537 16 : if (yych == 'E') goto yy322;
4538 1 : if (yych != 'e') goto yy186;
4539 16 : yy322:
4540 : YYDEBUG(322, *YYCURSOR);
4541 16 : yych = *++YYCURSOR;
4542 16 : if (yych != '_') goto yy186;
4543 : YYDEBUG(323, *YYCURSOR);
4544 16 : yych = *++YYCURSOR;
4545 16 : if (yych != '_') goto yy186;
4546 : YYDEBUG(324, *YYCURSOR);
4547 16 : ++YYCURSOR;
4548 16 : if (yybm[0+(yych = *YYCURSOR)] & 8) {
4549 0 : goto yy185;
4550 : }
4551 : YYDEBUG(325, *YYCURSOR);
4552 16 : yyleng = YYCURSOR - SCNG(yy_text);
4553 : #line 1937 "Zend/zend_language_scanner.l"
4554 : {
4555 : Z_LVAL_P(zendlval) = CG(zend_lineno);
4556 : Z_TYPE_P(zendlval) = IS_LONG;
4557 : return T_LINE;
4558 : }
4559 : #line 4560 "Zend/zend_language_scanner.c"
4560 746 : yy326:
4561 : YYDEBUG(326, *YYCURSOR);
4562 746 : yych = *++YYCURSOR;
4563 746 : if (yych == 'T') goto yy327;
4564 1 : if (yych != 't') goto yy186;
4565 746 : yy327:
4566 : YYDEBUG(327, *YYCURSOR);
4567 746 : yych = *++YYCURSOR;
4568 746 : if (yych == 'H') goto yy328;
4569 1 : if (yych != 'h') goto yy186;
4570 746 : yy328:
4571 : YYDEBUG(328, *YYCURSOR);
4572 746 : yych = *++YYCURSOR;
4573 746 : if (yych == 'O') goto yy329;
4574 1 : if (yych != 'o') goto yy186;
4575 746 : yy329:
4576 : YYDEBUG(329, *YYCURSOR);
4577 746 : yych = *++YYCURSOR;
4578 746 : if (yych == 'D') goto yy330;
4579 1 : if (yych != 'd') goto yy186;
4580 746 : yy330:
4581 : YYDEBUG(330, *YYCURSOR);
4582 746 : yych = *++YYCURSOR;
4583 746 : if (yych != '_') goto yy186;
4584 : YYDEBUG(331, *YYCURSOR);
4585 746 : yych = *++YYCURSOR;
4586 746 : if (yych != '_') goto yy186;
4587 : YYDEBUG(332, *YYCURSOR);
4588 746 : ++YYCURSOR;
4589 746 : if (yybm[0+(yych = *YYCURSOR)] & 8) {
4590 0 : goto yy185;
4591 : }
4592 : YYDEBUG(333, *YYCURSOR);
4593 746 : yyleng = YYCURSOR - SCNG(yy_text);
4594 : #line 1906 "Zend/zend_language_scanner.l"
4595 : {
4596 : zstr class_name = CG(active_class_entry) ? CG(active_class_entry)->name : NULL_ZSTR;
4597 : zstr func_name = CG(active_op_array)? CG(active_op_array)->function_name : NULL_ZSTR;
4598 : size_t len = 0;
4599 : size_t len1;
4600 :
4601 : if (class_name.u) {
4602 : len += len1 = u_strlen(class_name.u);
4603 : len += 2;
4604 : }
4605 : if (func_name.u) {
4606 : len += u_strlen(func_name.u);
4607 : } else {
4608 : func_name.u = EMPTY_STR;
4609 : }
4610 : Z_USTRLEN_P(zendlval) = len;
4611 : Z_USTRVAL_P(zendlval) = eumalloc(len+1);
4612 : if (class_name.u) {
4613 : u_strcpy(Z_USTRVAL_P(zendlval), class_name.u);
4614 : Z_USTRVAL_P(zendlval)[len1] = 0x3a; /* ':' */
4615 : Z_USTRVAL_P(zendlval)[len1+1] = 0x3a; /* ':' */
4616 : Z_USTRVAL_P(zendlval)[len1+2] = 0;
4617 : } else {
4618 : Z_USTRVAL_P(zendlval)[0] = 0;
4619 : }
4620 : u_strcat(Z_USTRVAL_P(zendlval), func_name.u);
4621 : Z_TYPE_P(zendlval) = IS_UNICODE;
4622 :
4623 : return T_METHOD_C;
4624 : }
4625 : #line 4626 "Zend/zend_language_scanner.c"
4626 7428 : yy334:
4627 : YYDEBUG(334, *YYCURSOR);
4628 7428 : yych = *++YYCURSOR;
4629 7428 : if (yych == 'L') goto yy345;
4630 1 : if (yych == 'l') goto yy345;
4631 0 : goto yy186;
4632 98 : yy335:
4633 : YYDEBUG(335, *YYCURSOR);
4634 98 : yych = *++YYCURSOR;
4635 98 : if (yych == 'N') goto yy336;
4636 1 : if (yych != 'n') goto yy186;
4637 98 : yy336:
4638 : YYDEBUG(336, *YYCURSOR);
4639 98 : yych = *++YYCURSOR;
4640 98 : if (yych == 'C') goto yy337;
4641 1 : if (yych != 'c') goto yy186;
4642 98 : yy337:
4643 : YYDEBUG(337, *YYCURSOR);
4644 98 : yych = *++YYCURSOR;
4645 98 : if (yych == 'T') goto yy338;
4646 1 : if (yych != 't') goto yy186;
4647 98 : yy338:
4648 : YYDEBUG(338, *YYCURSOR);
4649 98 : yych = *++YYCURSOR;
4650 98 : if (yych == 'I') goto yy339;
4651 1 : if (yych != 'i') goto yy186;
4652 98 : yy339:
4653 : YYDEBUG(339, *YYCURSOR);
4654 98 : yych = *++YYCURSOR;
4655 98 : if (yych == 'O') goto yy340;
4656 1 : if (yych != 'o') goto yy186;
4657 98 : yy340:
4658 : YYDEBUG(340, *YYCURSOR);
4659 98 : yych = *++YYCURSOR;
4660 98 : if (yych == 'N') goto yy341;
4661 1 : if (yych != 'n') goto yy186;
4662 98 : yy341:
4663 : YYDEBUG(341, *YYCURSOR);
4664 98 : yych = *++YYCURSOR;
4665 98 : if (yych != '_') goto yy186;
4666 : YYDEBUG(342, *YYCURSOR);
4667 98 : yych = *++YYCURSOR;
4668 98 : if (yych != '_') goto yy186;
4669 : YYDEBUG(343, *YYCURSOR);
4670 98 : ++YYCURSOR;
4671 98 : if (yybm[0+(yych = *YYCURSOR)] & 8) {
4672 0 : goto yy185;
4673 : }
4674 : YYDEBUG(344, *YYCURSOR);
4675 98 : yyleng = YYCURSOR - SCNG(yy_text);
4676 : #line 1891 "Zend/zend_language_scanner.l"
4677 : {
4678 : zstr func_name = NULL_ZSTR;
4679 :
4680 : if (CG(active_op_array)) {
4681 : func_name = CG(active_op_array)->function_name;
4682 : }
4683 :
4684 : if (!func_name.v) {
4685 : ZVAL_EMPTY_UNICODE(zendlval);
4686 : } else {
4687 : ZVAL_UNICODE(zendlval, func_name.u, 1);
4688 : }
4689 : return T_FUNC_C;
4690 : }
4691 : #line 4692 "Zend/zend_language_scanner.c"
4692 7428 : yy345:
4693 : YYDEBUG(345, *YYCURSOR);
4694 7428 : yych = *++YYCURSOR;
4695 7428 : if (yych == 'E') goto yy346;
4696 1 : if (yych != 'e') goto yy186;
4697 7428 : yy346:
4698 : YYDEBUG(346, *YYCURSOR);
4699 7428 : yych = *++YYCURSOR;
4700 7428 : if (yych != '_') goto yy186;
4701 : YYDEBUG(347, *YYCURSOR);
4702 7428 : yych = *++YYCURSOR;
4703 7428 : if (yych != '_') goto yy186;
4704 : YYDEBUG(348, *YYCURSOR);
4705 7428 : ++YYCURSOR;
4706 7428 : if (yybm[0+(yych = *YYCURSOR)] & 8) {
4707 0 : goto yy185;
4708 : }
4709 : YYDEBUG(349, *YYCURSOR);
4710 7428 : yyleng = YYCURSOR - SCNG(yy_text);
4711 : #line 1943 "Zend/zend_language_scanner.l"
4712 : {
4713 : char *filename = zend_get_compiled_filename(TSRMLS_C);
4714 :
4715 : if (!filename) {
4716 : filename = "";
4717 : }
4718 : ZVAL_RT_STRING(zendlval, filename, 1);
4719 : return T_FILE;
4720 : }
4721 : #line 4722 "Zend/zend_language_scanner.c"
4722 97 : yy350:
4723 : YYDEBUG(350, *YYCURSOR);
4724 97 : yych = *++YYCURSOR;
4725 97 : if (yych == 'A') goto yy351;
4726 22 : if (yych != 'a') goto yy186;
4727 76 : yy351:
4728 : YYDEBUG(351, *YYCURSOR);
4729 76 : yych = *++YYCURSOR;
4730 76 : if (yych == 'S') goto yy352;
4731 1 : if (yych != 's') goto yy186;
4732 76 : yy352:
4733 : YYDEBUG(352, *YYCURSOR);
4734 76 : yych = *++YYCURSOR;
4735 76 : if (yych == 'S') goto yy353;
4736 1 : if (yych != 's') goto yy186;
4737 76 : yy353:
4738 : YYDEBUG(353, *YYCURSOR);
4739 76 : yych = *++YYCURSOR;
4740 76 : if (yych != '_') goto yy186;
4741 : YYDEBUG(354, *YYCURSOR);
4742 76 : yych = *++YYCURSOR;
4743 76 : if (yych != '_') goto yy186;
4744 : YYDEBUG(355, *YYCURSOR);
4745 76 : ++YYCURSOR;
4746 76 : if (yybm[0+(yych = *YYCURSOR)] & 8) {
4747 0 : goto yy185;
4748 : }
4749 : YYDEBUG(356, *YYCURSOR);
4750 76 : yyleng = YYCURSOR - SCNG(yy_text);
4751 : #line 1876 "Zend/zend_language_scanner.l"
4752 : {
4753 : zstr class_name = NULL_ZSTR;
4754 :
4755 : if (CG(active_class_entry)) {
4756 : class_name = CG(active_class_entry)->name;
4757 : }
4758 :
4759 : if (!class_name.v) {
4760 : ZVAL_EMPTY_UNICODE(zendlval);
4761 : } else {
4762 : ZVAL_UNICODE(zendlval, class_name.u, 1);
4763 : }
4764 : return T_CLASS_C;
4765 : }
4766 : #line 4767 "Zend/zend_language_scanner.c"
4767 272 : yy357:
4768 : YYDEBUG(357, *YYCURSOR);
4769 272 : yych = *++YYCURSOR;
4770 272 : if (yych == 'L') goto yy358;
4771 23 : if (yych != 'l') goto yy186;
4772 272 : yy358:
4773 : YYDEBUG(358, *YYCURSOR);
4774 272 : yych = *++YYCURSOR;
4775 272 : if (yych == 'T') goto yy359;
4776 23 : if (yych != 't') goto yy186;
4777 272 : yy359:
4778 : YYDEBUG(359, *YYCURSOR);
4779 272 : yych = *++YYCURSOR;
4780 272 : if (yych != '_') goto yy186;
4781 : YYDEBUG(360, *YYCURSOR);
4782 272 : yych = *++YYCURSOR;
4783 272 : if (yych == 'C') goto yy361;
4784 23 : if (yych != 'c') goto yy186;
4785 272 : yy361:
4786 : YYDEBUG(361, *YYCURSOR);
4787 272 : yych = *++YYCURSOR;
4788 272 : if (yych == 'O') goto yy362;
4789 23 : if (yych != 'o') goto yy186;
4790 272 : yy362:
4791 : YYDEBUG(362, *YYCURSOR);
4792 272 : yych = *++YYCURSOR;
4793 272 : if (yych == 'M') goto yy363;
4794 23 : if (yych != 'm') goto yy186;
4795 272 : yy363:
4796 : YYDEBUG(363, *YYCURSOR);
4797 272 : yych = *++YYCURSOR;
4798 272 : if (yych == 'P') goto yy364;
4799 23 : if (yych != 'p') goto yy186;
4800 272 : yy364:
4801 : YYDEBUG(364, *YYCURSOR);
4802 272 : yych = *++YYCURSOR;
4803 272 : if (yych == 'I') goto yy365;
4804 23 : if (yych != 'i') goto yy186;
4805 272 : yy365:
4806 : YYDEBUG(365, *YYCURSOR);
4807 272 : yych = *++YYCURSOR;
4808 272 : if (yych == 'L') goto yy366;
4809 23 : if (yych != 'l') goto yy186;
4810 272 : yy366:
4811 : YYDEBUG(366, *YYCURSOR);
4812 272 : yych = *++YYCURSOR;
4813 272 : if (yych == 'E') goto yy367;
4814 23 : if (yych != 'e') goto yy186;
4815 272 : yy367:
4816 : YYDEBUG(367, *YYCURSOR);
4817 272 : yych = *++YYCURSOR;
4818 272 : if (yych == 'R') goto yy368;
4819 23 : if (yych != 'r') goto yy186;
4820 272 : yy368:
4821 : YYDEBUG(368, *YYCURSOR);
4822 272 : ++YYCURSOR;
4823 272 : if (yybm[0+(yych = *YYCURSOR)] & 8) {
4824 0 : goto yy185;
4825 : }
4826 : YYDEBUG(369, *YYCURSOR);
4827 272 : yyleng = YYCURSOR - SCNG(yy_text);
4828 : #line 1614 "Zend/zend_language_scanner.l"
4829 : {
4830 : return T_HALT_COMPILER;
4831 : }
4832 : #line 4833 "Zend/zend_language_scanner.c"
4833 7577 : yy370:
4834 : YYDEBUG(370, *YYCURSOR);
4835 7577 : yych = *++YYCURSOR;
4836 7577 : if (yych == 'S') goto yy374;
4837 7577 : if (yych == 's') goto yy374;
4838 5022 : goto yy186;
4839 246 : yy371:
4840 : YYDEBUG(371, *YYCURSOR);
4841 246 : yych = *++YYCURSOR;
4842 246 : if (yych == 'E') goto yy372;
4843 233 : if (yych != 'e') goto yy186;
4844 195 : yy372:
4845 : YYDEBUG(372, *YYCURSOR);
4846 195 : ++YYCURSOR;
4847 195 : if (yybm[0+(yych = *YYCURSOR)] & 8) {
4848 124 : goto yy185;
4849 : }
4850 : YYDEBUG(373, *YYCURSOR);
4851 71 : yyleng = YYCURSOR - SCNG(yy_text);
4852 : #line 1598 "Zend/zend_language_scanner.l"
4853 : {
4854 : return T_USE;
4855 : }
4856 : #line 4857 "Zend/zend_language_scanner.c"
4857 2555 : yy374:
4858 : YYDEBUG(374, *YYCURSOR);
4859 2555 : yych = *++YYCURSOR;
4860 2555 : if (yych == 'E') goto yy375;
4861 2555 : if (yych != 'e') goto yy186;
4862 2555 : yy375:
4863 : YYDEBUG(375, *YYCURSOR);
4864 2555 : yych = *++YYCURSOR;
4865 2555 : if (yych == 'T') goto yy376;
4866 2555 : if (yych != 't') goto yy186;
4867 1370 : yy376:
4868 : YYDEBUG(376, *YYCURSOR);
4869 1370 : ++YYCURSOR;
4870 1370 : if (yybm[0+(yych = *YYCURSOR)] & 8) {
4871 15 : goto yy185;
4872 : }
4873 : YYDEBUG(377, *YYCURSOR);
4874 1355 : yyleng = YYCURSOR - SCNG(yy_text);
4875 : #line 1642 "Zend/zend_language_scanner.l"
4876 : {
4877 : return T_UNSET;
4878 : }
4879 : #line 4880 "Zend/zend_language_scanner.c"
4880 18644 : yy378:
4881 : YYDEBUG(378, *YYCURSOR);
4882 18644 : ++YYCURSOR;
4883 18644 : YYFILL(7);
4884 18644 : yych = *YYCURSOR;
4885 74552 : yy379:
4886 : YYDEBUG(379, *YYCURSOR);
4887 74552 : if (yych <= 'S') {
4888 31073 : if (yych <= 'D') {
4889 30492 : if (yych <= ' ') {
4890 18736 : if (yych == '\t') goto yy378;
4891 18730 : if (yych <= 0x1F) goto yy193;
4892 18638 : goto yy378;
4893 : } else {
4894 11756 : if (yych <= 'A') {
4895 11587 : if (yych <= '@') goto yy193;
4896 631 : goto yy383;
4897 : } else {
4898 169 : if (yych <= 'B') goto yy381;
4899 136 : if (yych <= 'C') goto yy193;
4900 135 : goto yy386;
4901 : }
4902 : }
4903 : } else {
4904 581 : if (yych <= 'I') {
4905 319 : if (yych == 'F') goto yy387;
4906 115 : if (yych <= 'H') goto yy193;
4907 112 : goto yy388;
4908 : } else {
4909 262 : if (yych <= 'O') {
4910 52 : if (yych <= 'N') goto yy193;
4911 22 : goto yy382;
4912 : } else {
4913 210 : if (yych <= 'Q') goto yy193;
4914 209 : if (yych <= 'R') goto yy385;
4915 128 : goto yy384;
4916 : }
4917 : }
4918 : }
4919 : } else {
4920 43479 : if (yych <= 'f') {
4921 20935 : if (yych <= 'a') {
4922 3213 : if (yych == 'U') goto yy380;
4923 3201 : if (yych <= '`') goto yy193;
4924 3166 : goto yy383;
4925 : } else {
4926 17722 : if (yych <= 'c') {
4927 3326 : if (yych <= 'b') goto yy381;
4928 408 : goto yy193;
4929 : } else {
4930 14396 : if (yych <= 'd') goto yy386;
4931 8327 : if (yych <= 'e') goto yy193;
4932 8156 : goto yy387;
4933 : }
4934 : }
4935 : } else {
4936 22544 : if (yych <= 'q') {
4937 12485 : if (yych <= 'i') {
4938 10863 : if (yych <= 'h') goto yy193;
4939 10484 : goto yy388;
4940 : } else {
4941 1622 : if (yych == 'o') goto yy382;
4942 649 : goto yy193;
4943 : }
4944 : } else {
4945 10059 : if (yych <= 's') {
4946 7819 : if (yych <= 'r') goto yy385;
4947 5910 : goto yy384;
4948 : } else {
4949 2240 : if (yych != 'u') goto yy193;
4950 : }
4951 : }
4952 : }
4953 : }
4954 1891 : yy380:
4955 : YYDEBUG(380, *YYCURSOR);
4956 1891 : yych = *++YYCURSOR;
4957 1891 : if (yych == 'N') goto yy451;
4958 1891 : if (yych == 'n') goto yy451;
4959 140 : goto yy193;
4960 2951 : yy381:
4961 : YYDEBUG(381, *YYCURSOR);
4962 2951 : yych = *++YYCURSOR;
4963 2951 : if (yych <= 'O') {
4964 |