Re: cvs: ZendEngine2(PHP_5_3) / Zend.m4 zend.c zend_compile.c zend_globals.h zend_highlight.c zend_language_scanner.c zend_language_scanner.h zend_language_scanner.l zend_language_scanner_defs.h zend_multibyte.h
Marcus Boerger <[email protected]>
| Newsgroups | gmane.comp.php.cvs.zend |
|---|---|
| Message-ID | <[email protected]> |
Hello Rui,
briefly scanning to this you took a complete different approach I did.
While used newer re2c features to generate two different scanners you seem
to have reapplied the the old code. That would mean you're most likely a
bit slower but have less code too. Did you change anything or did you
simply reapply one by one? If you did just copy I might spend some time
appliying a few fixes I encountered. Also we are still missing tests.
Without tests I feel we have to remove all of this anyway.
marcus
Sunday, June 29, 2008, 10:21:36 AM, you wrote:
> http://cvs.php.net/viewvc.cgi/ZendEngine2/Zend.m4?r1=1.58.4.4.2.3&r2=1.58.4.4.2.4&diff_format=u
> Index: ZendEngine2/Zend.m4
> diff -u ZendEngine2/Zend.m4:1.58.4.4.2.3 ZendEngine2/Zend.m4:1.58.4.4.2.4
> --- ZendEngine2/Zend.m4:1.58.4.4.2.3 Tue Mar 18 21:14:27 2008
> +++ ZendEngine2/Zend.m4 Sun Jun 29 08:21:34 2008
> @@ -1,5 +1,5 @@
> dnl
> -dnl $Id: Zend.m4,v 1.58.4.4.2.3 2008/03/18 21:14:27 rasmus Exp $
> +dnl $Id: Zend.m4,v 1.58.4.4.2.4 2008/06/29 08:21:34 hirokawa Exp $
> dnl
> dnl This file contains Zend specific autoconf functions.
> dnl
> @@ -154,6 +154,13 @@
> ZEND_INLINE_OPTIMIZATION=yes
> ])
>
> +AC_ARG_ENABLE(zend-multibyte,
> +[ --enable-zend-multibyte Compile with zend multibyte support], [
> + ZEND_MULTIBYTE=$enableval
> +],[
> + ZEND_MULTIBYTE=no
> +])
> +
> AC_MSG_CHECKING([virtual machine dispatch method])
> AC_MSG_RESULT($PHP_ZEND_VM)
>
> @@ -166,6 +173,9 @@
> AC_MSG_CHECKING(whether to enable Zend debugging)
> AC_MSG_RESULT($ZEND_DEBUG)
>
> +AC_MSG_CHECKING(whether to enable Zend multibyte)
> +AC_MSG_RESULT($ZEND_MULTIBYTE)
> +
> case $PHP_ZEND_VM in
> SWITCH)
> AC_DEFINE(ZEND_VM_KIND,ZEND_VM_KIND_SWITCH,[virtual machine dispatch method])
> @@ -200,6 +210,10 @@
> LIBZEND_CPLUSPLUS_CHECKS
> fi
>
> +if test "$ZEND_MULTIBYTE" = "yes"; then
> + AC_DEFINE(ZEND_MULTIBYTE, 1, [ ])
> +fi
> +
> changequote({,})
> if test -n "$GCC" && test "$ZEND_INLINE_OPTIMIZATION" != "yes"; then
> INLINE_CFLAGS=`echo $ac_n "$CFLAGS $ac_c" | sed s/-O[0-9s]*//`
> http://cvs.php.net/viewvc.cgi/ZendEngine2/zend.c?r1=1.308.2.12.2.35.2.18&r2=1.308.2.12.2.35.2.19&diff_format=u
> Index: ZendEngine2/zend.c
> diff -u ZendEngine2/zend.c:1.308.2.12.2.35.2.18
> ZendEngine2/zend.c:1.308.2.12.2.35.2.19
> --- ZendEngine2/zend.c:1.308.2.12.2.35.2.18 Tue Apr 29 08:15:16 2008
> +++ ZendEngine2/zend.c Sun Jun 29 08:21:34 2008
> @@ -17,7 +17,7 @@
>
> +----------------------------------------------------------------------+
> */
>
> -/* $Id: zend.c,v 1.308.2.12.2.35.2.18 2008/04/29 08:15:16 dmitry Exp $ */
> +/* $Id: zend.c,v 1.308.2.12.2.35.2.19 2008/06/29 08:21:34 hirokawa Exp $ */
>
> #include "zend.h"
> #include "zend_extensions.h"
> @@ -91,6 +91,9 @@
> ZEND_INI_BEGIN()
> ZEND_INI_ENTRY("error_reporting",
> NULL, ZEND_INI_ALL, OnUpdateErrorReporting)
> STD_ZEND_INI_BOOLEAN("zend.enable_gc",
> "1", ZEND_INI_ALL, OnUpdateGCEnabled, gc_enabled, zend_gc_globals, gc_globals)
> +#ifdef ZEND_MULTIBYTE
> + STD_ZEND_INI_BOOLEAN("detect_unicode", "1", ZEND_INI_ALL,
> OnUpdateBool, detect_unicode, zend_compiler_globals, compiler_globals)
> +#endif
> ZEND_INI_END()
>
>
> http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_compile.c?r1=1.647.2.27.2.41.2.69&r2=1.647.2.27.2.41.2.70&diff_format=u
> Index: ZendEngine2/zend_compile.c
> diff -u ZendEngine2/zend_compile.c:1.647.2.27.2.41.2.69
> ZendEngine2/zend_compile.c:1.647.2.27.2.41.2.70
> --- ZendEngine2/zend_compile.c:1.647.2.27.2.41.2.69 Fri Jun 20 17:17:05 2008
> +++ ZendEngine2/zend_compile.c Sun Jun 29 08:21:34 2008
> @@ -17,7 +17,7 @@
>
> +----------------------------------------------------------------------+
> */
>
> -/* $Id: zend_compile.c,v 1.647.2.27.2.41.2.69 2008/06/20 17:17:05 dmitry Exp $ */
> +/* $Id: zend_compile.c,v 1.647.2.27.2.41.2.70 2008/06/29 08:21:34 hirokawa Exp $ */
>
> #include <zend_language_parser.h>
> #include "zend.h"
> @@ -28,6 +28,10 @@
> #include "zend_exceptions.h"
> #include "tsrm_virtual_cwd.h"
>
> +#ifdef ZEND_MULTIBYTE
> +#include "zend_multibyte.h"
> +#endif /* ZEND_MULTIBYTE */
> +
> ZEND_API zend_op_array *(*zend_compile_file)(zend_file_handle *file_handle, int type TSRMLS_DC);
> ZEND_API zend_op_array *(*zend_compile_string)(zval *source_string, char *filename TSRMLS_DC);
>
> @@ -80,7 +84,14 @@
>
> /* NULL, name length, filename length, last accepting char position length */
> result->value.str.len =
> 1+name_length+strlen(filename)+char_pos_len;
> +#ifdef ZEND_MULTIBYTE
> + /* must be binary safe */
> + result->value.str.val = (char *)
> safe_emalloc(result->value.str.len, 1, 1);
> + result->value.str.val[0] = '\0';
> + sprintf(result->value.str.val+1, "%s%s%s", name, filename, char_pos_buf);
> +#else
> zend_spprintf(&result->value.str.val, 0, "%c%s%s%s", '\0', name, filename, char_pos_buf);
> +#endif /* ZEND_MULTIBYTE */
> result->type = IS_STRING;
> Z_SET_REFCOUNT_P(result, 1);
> }
> @@ -132,6 +143,15 @@
> zend_hash_apply(CG(auto_globals), (apply_func_t) zend_auto_global_arm TSRMLS_CC);
> zend_stack_init(&CG(labels_stack));
> CG(labels) = NULL;
> +
> +#ifdef ZEND_MULTIBYTE
> + CG(script_encoding_list) = NULL;
> + CG(script_encoding_list_size) = 0;
> + CG(internal_encoding) = NULL;
> + CG(encoding_detector) = NULL;
> + CG(encoding_converter) = NULL;
> + CG(encoding_oddlen) = NULL;
> +#endif /* ZEND_MULTIBYTE */
> }
>
>
> @@ -166,6 +186,12 @@
> zend_hash_destroy(&CG(filenames_table));
> zend_llist_destroy(&CG(open_files));
> zend_stack_destroy(&CG(labels_stack));
> +
> +#ifdef ZEND_MULTIBYTE
> + if (CG(script_encoding_list)) {
> + efree(CG(script_encoding_list));
> + }
> +#endif /* ZEND_MULTIBYTE */
> }
>
>
> @@ -4512,9 +4538,55 @@
> if (!zend_binary_strcasecmp(var->u.constant.value.str.val,
> var->u.constant.value.str.len, "ticks", sizeof("ticks")-1)) {
> convert_to_long(&val->u.constant);
> CG(declarables).ticks = val->u.constant;
> +#ifdef ZEND_MULTIBYTE
> + } else if
> (!zend_binary_strcasecmp(var->u.constant.value.str.val,
> var->u.constant.value.str.len, "encoding", sizeof("encoding")-1)) {
> + zend_encoding *new_encoding, *old_encoding;
> + zend_encoding_filter old_input_filter;
> +
> + if (Z_TYPE(val->u.constant) == IS_CONSTANT) {
> + zend_error(E_COMPILE_ERROR, "Cannot use constants as encoding");
> + }
> +
> + /*
> + * Check that the pragma comes before any opcodes. If the compilation
> + * got as far as this, the previous portion of the script must have been
> + * parseable according to the .ini script_encoding setting. We still
> + * want to tell them to put declare() at the top.
> + */
> + if (CG(active_op_array)->last > 0) {
> + /* ignore ZEND_EXT_STMT and ZEND_TICKS */
> + int num = CG(active_op_array)->last;
> + while (num > 0 &&
> +
> (CG(active_op_array)->opcodes[num-1].opcode == ZEND_EXT_STMT ||
> +
> CG(active_op_array)->opcodes[num-1].opcode == ZEND_TICKS)) {
> + --num;
> + }
> + if (num > 0) {
> + zend_error(E_COMPILE_ERROR, "Encoding
> declaration pragma has to be the very first statement in the script");
> + }
> + }
> +
> + convert_to_string(&val->u.constant);
> + new_encoding =
> zend_multibyte_fetch_encoding(val->u.constant.value.str.val);
> + if (!new_encoding) {
> + zend_error(E_COMPILE_WARNING, "Unsupported
> encoding [%s]", val->u.constant.value.str.val);
> + } else {
> + old_input_filter = LANG_SCNG(input_filter);
> + old_encoding = LANG_SCNG(script_encoding);
> + zend_multibyte_set_filter(new_encoding TSRMLS_CC);
> +
> + /* need to re-scan if input filter changed */
> + if (old_input_filter != LANG_SCNG(input_filter) ||
> + ((old_input_filter ==
> zend_multibyte_script_encoding_filter) &&
> + (new_encoding != old_encoding))) {
> +
> zend_multibyte_yyinput_again(old_input_filter, old_encoding TSRMLS_CC);
> + }
> + }
> +#else /* !ZEND_MULTIBYTE */
> } else if
> (!zend_binary_strcasecmp(var->u.constant.value.str.val,
> var->u.constant.value.str.len, "encoding", sizeof("encoding")-1)) {
> /* Do not generate any kind of warning for encoding declares */
> /* zend_error(E_COMPILE_WARNING, "Declare encoding [%s]
> not supported", val->u.constant.value.str.val); */
> +#endif /* ZEND_MULTIBYTE */
> efree(val->u.constant.value.str.val);
> } else {
> zend_error(E_COMPILE_WARNING, "Unsupported declare
> '%s'", var->u.constant.value.str.val);
> http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_globals.h?r1=1.141.2.3.2.7.2.15&r2=1.141.2.3.2.7.2.16&diff_format=u
> Index: ZendEngine2/zend_globals.h
> diff -u ZendEngine2/zend_globals.h:1.141.2.3.2.7.2.15
> ZendEngine2/zend_globals.h:1.141.2.3.2.7.2.16
> --- ZendEngine2/zend_globals.h:1.141.2.3.2.7.2.15 Wed Apr 9 20:50:58 2008
> +++ ZendEngine2/zend_globals.h Sun Jun 29 08:21:34 2008
> @@ -17,7 +17,7 @@
>
> +----------------------------------------------------------------------+
> */
>
> -/* $Id: zend_globals.h,v 1.141.2.3.2.7.2.15 2008/04/09 20:50:58 scottmac Exp $ */
> +/* $Id: zend_globals.h,v 1.141.2.3.2.7.2.16 2008/06/29 08:21:34 hirokawa Exp $ */
>
> #ifndef ZEND_GLOBALS_H
> #define ZEND_GLOBALS_H
> @@ -35,6 +35,10 @@
> #include "zend_objects_API.h"
> #include "zend_modules.h"
>
> +#ifdef ZEND_MULTIBYTE
> +#include "zend_multibyte.h"
> +#endif /* ZEND_MULTIBYTE */
> +
> /* Define ZTS if you want a thread-safe Zend */
> /*#undef ZTS*/
>
> @@ -134,6 +138,19 @@
> HashTable *labels;
> zend_stack labels_stack;
>
> +#ifdef ZEND_MULTIBYTE
> + zend_encoding **script_encoding_list;
> + int script_encoding_list_size;
> + zend_bool detect_unicode;
> +
> + zend_encoding *internal_encoding;
> +
> + /* multibyte utility functions */
> + zend_encoding_detector encoding_detector;
> + zend_encoding_converter encoding_converter;
> + zend_encoding_oddlen encoding_oddlen;
> +#endif /* ZEND_MULTIBYTE */
> +
> #ifdef ZTS
> HashTable **static_members;
> int last_static_member;
> @@ -271,6 +288,22 @@
> zend_stack state_stack;
>
> zend_llist used_state_stacks;
> +
> +#ifdef ZEND_MULTIBYTE
> + /* original (unfiltered) script */
> + char *script_org;
> + int script_org_size;
> +
> + /* filtered script */
> + char *script_filtered;
> + int script_filtered_size;
> +
> + /* input/ouput filters */
> + zend_encoding_filter input_filter;
> + zend_encoding_filter output_filter;
> + zend_encoding *script_encoding;
> + zend_encoding *internal_encoding;
> +#endif /* ZEND_MULTIBYTE */
> };
>
> #endif /* ZEND_GLOBALS_H */
> http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_highlight.c?r1=1.49.2.3.2.2.2.3&r2=1.49.2.3.2.2.2.4&diff_format=u
> Index: ZendEngine2/zend_highlight.c
> diff -u ZendEngine2/zend_highlight.c:1.49.2.3.2.2.2.3
> ZendEngine2/zend_highlight.c:1.49.2.3.2.2.2.4
> --- ZendEngine2/zend_highlight.c:1.49.2.3.2.2.2.3 Sun Mar 16 21:05:33 2008
> +++ ZendEngine2/zend_highlight.c Sun Jun 29 08:21:34 2008
> @@ -17,7 +17,7 @@
>
> +----------------------------------------------------------------------+
> */
>
> -/* $Id: zend_highlight.c,v 1.49.2.3.2.2.2.3 2008/03/16 21:05:33 helly Exp $ */
> +/* $Id: zend_highlight.c,v 1.49.2.3.2.2.2.4 2008/06/29 08:21:34 hirokawa Exp $ */
>
> #include "zend.h"
> #include <zend_language_parser.h>
> @@ -58,6 +58,17 @@
> {
> const char *ptr=s, *end=s+len;
>
> +#ifdef ZEND_MULTIBYTE
> + char *filtered;
> + int filtered_len;
> +
> + if (LANG_SCNG(output_filter)) {
> + LANG_SCNG(output_filter)(&filtered, &filtered_len, s, len TSRMLS_CC);
> + ptr = filtered;
> + end = filtered + filtered_len;
> + }
> +#endif /* ZEND_MULTIBYTE */
> +
> while (ptr<end) {
> if (*ptr==' ') {
> do {
> @@ -67,6 +78,12 @@
> zend_html_putc(*ptr++);
> }
> }
> +
> +#ifdef ZEND_MULTIBYTE
> + if (LANG_SCNG(output_filter)) {
> + efree(filtered);
> + }
> +#endif /* ZEND_MULTIBYTE */
> }
>
>
> http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_language_scanner.c?r1=1.1.2.12&r2=1.1.2.13&diff_format=u
> Index: ZendEngine2/zend_language_scanner.c
> diff -u ZendEngine2/zend_language_scanner.c:1.1.2.12
> ZendEngine2/zend_language_scanner.c:1.1.2.13
> --- ZendEngine2/zend_language_scanner.c:1.1.2.12 Sat May 10 09:17:28 2008
> +++ ZendEngine2/zend_language_scanner.c Sun Jun 29 08:21:35 2008
> @@ -1,4 +1,4 @@
> -/* Generated by re2c 0.13.4 on Sat May 10 03:48:00 2008 */
> +/* Generated by re2c 0.13.5 on Sun Jun 29 17:06:51 2008 */
> #line 1 "Zend/zend_language_scanner.l"
> /*
>
> +----------------------------------------------------------------------+
> @@ -23,7 +23,7 @@
>
> +----------------------------------------------------------------------+
> */
>
> -/* $Id: zend_language_scanner.c,v 1.1.2.12 2008/05/10 09:17:28 mattwil Exp $ */
> +/* $Id: zend_language_scanner.c,v 1.1.2.13 2008/06/29 08:21:35 hirokawa Exp $ */
>
> #if 0
> # define YYDEBUG(s, c) printf("state: %d char: %c\n", s, c)
> @@ -182,6 +182,17 @@
> lex_state->yy_state = YYSTATE;
> lex_state->filename = zend_get_compiled_filename(TSRMLS_C);
> lex_state->lineno = CG(zend_lineno);
> +
> +#ifdef ZEND_MULTIBYTE
> + lex_state->script_org = SCNG(script_org);
> + lex_state->script_org_size = SCNG(script_org_size);
> + lex_state->script_filtered = SCNG(script_filtered);
> + lex_state->script_filtered_size = SCNG(script_filtered_size);
> + lex_state->input_filter = SCNG(input_filter);
> + lex_state->output_filter = SCNG(output_filter);
> + lex_state->script_encoding = SCNG(script_encoding);
> + lex_state->internal_encoding = SCNG(internal_encoding);
> +#endif /* ZEND_MULTIBYTE */
> }
>
> ZEND_API void zend_restore_lexical_state(zend_lex_state *lex_state TSRMLS_DC)
> @@ -200,6 +211,24 @@
> YYSETCONDITION(lex_state->yy_state);
> CG(zend_lineno) = lex_state->lineno;
> zend_restore_compiled_filename(lex_state->filename TSRMLS_CC);
> +#ifdef ZEND_MULTIBYTE
> + if (SCNG(script_org)) {
> + efree(SCNG(script_org));
> + SCNG(script_org) = NULL;
> + }
> + if (SCNG(script_filtered)) {
> + efree(SCNG(script_filtered));
> + SCNG(script_filtered) = NULL;
> + }
> + SCNG(script_org) = lex_state->script_org;
> + SCNG(script_org_size) = lex_state->script_org_size;
> + SCNG(script_filtered) = lex_state->script_filtered;
> + SCNG(script_filtered_size) = lex_state->script_filtered_size;
> + SCNG(input_filter) = lex_state->input_filter;
> + SCNG(output_filter) = lex_state->output_filter;
> + SCNG(script_encoding) = lex_state->script_encoding;
> + SCNG(internal_encoding) = lex_state->internal_encoding;
> +#endif /* ZEND_MULTIBYTE */
> }
>
> ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle TSRMLS_DC)
> @@ -234,8 +263,27 @@
> SCNG(yy_in) = file_handle;
>
> if (size != -1) {
> - /* TODO: For MULTIBYTE we need to do some clever re-encoding */
> +#ifdef ZEND_MULTIBYTE
> + if (zend_multibyte_read_script(buf, size TSRMLS_CC) != 0) {
> + return FAILURE;
> + }
> +
> + SCNG(yy_in) = NULL;
> +
> + zend_multibyte_set_filter(NULL TSRMLS_CC);
> +
> + if (!SCNG(input_filter)) {
> + SCNG(script_filtered) =
> (char*)emalloc(SCNG(script_org_size)+1);
> + memcpy(SCNG(script_filtered), SCNG(script_org), SCNG(script_org_size)+1);
> + SCNG(script_filtered_size) = SCNG(script_org_size);
> + } else {
> + SCNG(input_filter)(&SCNG(script_filtered),
> &SCNG(script_filtered_size), SCNG(script_org), SCNG(script_org_size) TSRMLS_CC);
> + }
> +
> + yy_scan_buffer(SCNG(script_filtered),
> SCNG(script_filtered_size) TSRMLS_CC);
> +#else /* !ZEND_MULTIBYTE */
> yy_scan_buffer(buf, size TSRMLS_CC);
> +#endif /* ZEND_MULTIBYTE */
> } else {
> zend_error_noreturn(E_COMPILE_ERROR, "zend_stream_mmap() failed");
> }
> @@ -372,8 +420,24 @@
>
> SCNG(yy_in)=NULL;
>
> - /* TODO: For MULTIBYTE we need to do some clever re-encoding */
> +#ifdef ZEND_MULTIBYTE
> + SCNG(script_org) = estrdup(str->value.str.val);
> + SCNG(script_org_size) = str->value.str.len;
> +
> + zend_multibyte_set_filter(CG(internal_encoding) TSRMLS_CC);
> +
> + if (!SCNG(input_filter)) {
> + SCNG(script_filtered) =
> (char*)emalloc(SCNG(script_org_size)+1);
> + memcpy(SCNG(script_filtered), SCNG(script_org), SCNG(script_org_size)+1);
> + SCNG(script_filtered_size) = SCNG(script_org_size);
> + } else {
> + SCNG(input_filter)(&SCNG(script_filtered),
> &SCNG(script_filtered_size), SCNG(script_org), SCNG(script_org_size) TSRMLS_CC);
> + }
> +
> + yy_scan_buffer(SCNG(script_filtered), SCNG(script_filtered_size) TSRMLS_CC);
> +#else /* !ZEND_MULTIBYTE */
> yy_scan_buffer(str->value.str.val, str->value.str.len TSRMLS_CC);
> +#endif /* ZEND_MULTIBYTE */
>
> zend_set_compiled_filename(filename TSRMLS_CC);
> CG(zend_lineno) = 1;
> @@ -424,6 +488,17 @@
> BEGIN(ST_IN_SCRIPTING);
> compiler_result = zendparse(TSRMLS_C);
>
> +#ifdef ZEND_MULTIBYTE
> + if (SCNG(script_org)) {
> + efree(SCNG(script_org));
> + SCNG(script_org) = NULL;
> + }
> + if (SCNG(script_filtered)) {
> + efree(SCNG(script_filtered));
> + SCNG(script_filtered) = NULL;
> + }
> +#endif /* ZEND_MULTIBYTE */
> +
> if (compiler_result==1) {
> CG(active_op_array) = original_active_op_array;
> CG(unclean_shutdown)=1;
> @@ -459,6 +534,16 @@
> return FAILURE;
> }
> zend_highlight(syntax_highlighter_ini TSRMLS_CC);
> +#ifdef ZEND_MULTIBYTE
> + if (SCNG(script_org)) {
> + efree(SCNG(script_org));
> + SCNG(script_org) = NULL;
> + }
> + if (SCNG(script_filtered)) {
> + efree(SCNG(script_filtered));
> + SCNG(script_filtered) = NULL;
> + }
> +#endif /* ZEND_MULTIBYTE */
> zend_destroy_file_handle(&file_handle TSRMLS_CC);
> zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
> return SUCCESS;
> @@ -477,15 +562,147 @@
> }
> BEGIN(INITIAL);
> zend_highlight(syntax_highlighter_ini TSRMLS_CC);
> +#ifdef ZEND_MULTIBYTE
> + if (SCNG(script_org)) {
> + efree(SCNG(script_org));
> + SCNG(script_org) = NULL;
> + }
> + if (SCNG(script_filtered)) {
> + efree(SCNG(script_filtered));
> + SCNG(script_filtered) = NULL;
> + }
> +#endif /* ZEND_MULTIBYTE */
> zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
> zval_dtor(str);
> return SUCCESS;
> }
> END_EXTERN_C()
>
> +#ifdef ZEND_MULTIBYTE
> +BEGIN_EXTERN_C()
> +ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter
> old_input_filter, zend_encoding *old_encoding TSRMLS_DC)
> +{
> + int offset, original_offset, length, free_flag, new_len;
> + char *p;
> + zend_encoding *new_encoding;
> + unsigned char *yy_c_buf_p;
> +
> + /* calculate current position */
> + offset = original_offset = YYCURSOR - SCNG(yy_start);
> + if (old_input_filter && original_offset > 0) {
> + new_encoding = SCNG(script_encoding);
> + SCNG(script_encoding) = old_encoding;
> + do {
> + (old_input_filter)(&p, &length,
> SCNG(script_org), offset TSRMLS_CC);
> + if (!p) {
> + SCNG(script_encoding) = new_encoding;
> + return;
> + }
> + efree(p);
> + if (length > original_offset) {
> + offset--;
> + } else if (length < original_offset) {
> + offset++;
> + }
> + } while (original_offset != length);
> + SCNG(script_encoding) = new_encoding;
> + }
> +
> + /* convert and set */
> + if (!SCNG(input_filter)) {
> + length = SCNG(script_org_size)-offset-1;
> + p = SCNG(script_org)+offset+1;
> + free_flag = 0;
> + } else {
> + SCNG(input_filter)(&p, &length,
> SCNG(script_org)+offset+1, SCNG(script_org_size)-offset-1 TSRMLS_CC);
> + free_flag = 1;
> + }
> +
> + new_len = original_offset+length+1;
> +
> + if (new_len > YYLIMIT-SCNG(yy_start)) {
> + YYLIMIT = SCNG(yy_start) + new_len;
> + SCNG(yy_start) = erealloc(SCNG(yy_start), new_len);
> + SCNG(script_filtered) = SCNG(yy_start);
> + SCNG(script_filtered_size) = new_len;
> + }
> +
> + yy_c_buf_p = SCNG(yy_start) + original_offset;
> + strncpy(yy_c_buf_p+1, p, length);
> +
> + if (free_flag) {
> + efree(p);
> + }
> +}
> +
> +
> +ZEND_API int zend_multibyte_yyinput(zend_file_handle *file_handle, char *buf, size_t len TSRMLS_DC)
> +{
> + int c = '*', n;
> +
> + if (CG(interactive) == 0) {
> + if (zend_stream_fixup(file_handle, &buf, &len TSRMLS_CC) == FAILURE) {
> + return FAILURE;
> + }
> + n = len;
> + return n;
> + }
> +
> + /* interactive */
> + if (SCNG(script_org)) {
> + efree(SCNG(script_org));
> + }
> + if (SCNG(script_filtered)) {
> + efree(SCNG(script_filtered));
> + }
> + SCNG(script_org) = NULL;
> + SCNG(script_org_size) = 0;
> +
> + /* TODO: support widechars */
> + if (zend_stream_fixup(file_handle, &buf, &len TSRMLS_CC) == FAILURE) {
> + return FAILURE;
> + }
> + n = len;
> +
> + SCNG(script_org_size) = n;
> + SCNG(script_org) = (char*)emalloc(SCNG(script_org_size) + 1);
> + memcpy(SCNG(script_org), buf, n);
> +
> + return n;
> +}
> +
> +
> +ZEND_API int zend_multibyte_read_script(char *buf, int n TSRMLS_DC)
> +{
> + if (SCNG(script_org)) {
> + efree(SCNG(script_org));
> + }
> + if (n<0) {
> + return -1;
> + }
> + SCNG(script_org_size) = n;
> + SCNG(script_org) = (char*)erealloc(SCNG(script_org), SCNG(script_org_size));
> + memcpy(SCNG(script_org) + SCNG(script_org_size) - n, buf, n);
> +
> + SCNG(script_org) = (char*)erealloc(SCNG(script_org), SCNG(script_org_size) + 1);
> + *(SCNG(script_org)+SCNG(script_org_size)) = '\0';
> +
> + return 0;
> +}
> +
> +
> +# define zend_copy_value(zendlval, yytext, yyleng) \
> + if (SCNG(output_filter)) { \
> + SCNG(output_filter)(&(zendlval->value.str.val),
> &(zendlval->value.str.len), yytext, yyleng TSRMLS_CC); \
> + } else { \
> + zendlval->value.str.val = (char *) estrndup(yytext, yyleng); \
> + zendlval->value.str.len = yyleng; \
> + }
> +#else /* ZEND_MULTIBYTE */
> # define zend_copy_value(zendlval, yytext, yyleng) \
> zendlval->value.str.val = (char *)estrndup(yytext, yyleng); \
> zendlval->value.str.len = yyleng;
> +#endif /* ZEND_MULTIBYTE */
>
> static void zend_scan_escape_string(zval *zendlval, char *str, int len, char quote_type TSRMLS_DC)
> {
> @@ -589,6 +806,13 @@
> s++;
> }
> *t = 0;
> +#ifdef ZEND_MULTIBYTE
> + if (SCNG(output_filter)) {
> + s = zendlval->value.str.val;
> + SCNG(output_filter)(&(zendlval->value.str.val),
> &(zendlval->value.str.len), s, zendlval->value.str.len TSRMLS_CC);
> + efree(s);
> + }
> +#endif /* ZEND_MULTIBYTE */
> }
>
>
> @@ -610,7 +834,7 @@
> }
>
>
> -#line 614 "Zend/zend_language_scanner.c"
> +#line 838 "Zend/zend_language_scanner.c"
> {
> YYCTYPE yych;
> unsigned int yyaccept = 0;
> @@ -734,7 +958,7 @@
> yy3:
> YYDEBUG(3, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1402 "Zend/zend_language_scanner.l"
> +#line 1626 "Zend/zend_language_scanner.l"
> {
>
> while (1) {
> @@ -759,13 +983,26 @@
>
> inline_char_handler:
>
> +#ifdef ZEND_MULTIBYTE
> + if (SCNG(output_filter)) {
> + int readsize;
> + readsize =
> SCNG(output_filter)(&(zendlval->value.str.val),
> &(zendlval->value.str.len), yytext, yyleng TSRMLS_CC);
> + if (readsize < yyleng) {
> + yyless(readsize);
> + }
> + } else {
> + zendlval->value.str.val = (char *) estrndup(yytext, yyleng);
> + zendlval->value.str.len = yyleng;
> + }
> +#else /* !ZEND_MULTIBYTE */
> zendlval->value.str.val = (char *) estrndup(yytext, yyleng);
> - zendlval->value.str.len = yyleng;
> + zendlval->value.str.len = yyleng;
> +#endif
> zendlval->type = IS_STRING;
> HANDLE_NEWLINES(yytext, yyleng);
> return T_INLINE_HTML;
> }
> -#line 769 "Zend/zend_language_scanner.c"
> +#line 1006 "Zend/zend_language_scanner.c"
> yy4:
> YYDEBUG(4, *YYCURSOR);
> yyaccept = 0;
> @@ -792,7 +1029,7 @@
> yy9:
> YYDEBUG(9, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1393 "Zend/zend_language_scanner.l"
> +#line 1617 "Zend/zend_language_scanner.l"
> {
> if ((YYCTYPE*)yytext == SCNG(yy_start)) {
> /* ignore first line when it's started with a # */
> @@ -801,7 +1038,7 @@
> goto inline_char_handler;
> }
> }
> -#line 805 "Zend/zend_language_scanner.c"
> +#line 1042 "Zend/zend_language_scanner.c"
> yy10:
> YYDEBUG(10, *YYCURSOR);
> yyaccept = 1;
> @@ -827,7 +1064,7 @@
> yy13:
> YYDEBUG(13, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1377 "Zend/zend_language_scanner.l"
> +#line 1601 "Zend/zend_language_scanner.l"
> {
> HANDLE_NEWLINES(yytext, yyleng);
> if (CG(short_tags)) {
> @@ -843,14 +1080,14 @@
> return T_INLINE_HTML;
> }
> }
> -#line 847 "Zend/zend_language_scanner.c"
> +#line 1084 "Zend/zend_language_scanner.c"
> yy14:
> YYDEBUG(14, *YYCURSOR);
> ++YYCURSOR;
> if ((yych = *YYCURSOR) == '=') goto yy50;
> YYDEBUG(15, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1351 "Zend/zend_language_scanner.l"
> +#line 1575 "Zend/zend_language_scanner.l"
> {
> if (CG(asp_tags)) {
> zendlval->value.str.val = yytext; /* no copying - intentional */
> @@ -865,7 +1102,7 @@
> return T_INLINE_HTML;
> }
> }
> -#line 869 "Zend/zend_language_scanner.c"
> +#line 1106 "Zend/zend_language_scanner.c"
> yy16:
> YYDEBUG(16, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -1055,7 +1292,7 @@
> ++YYCURSOR;
> YYDEBUG(45, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1309 "Zend/zend_language_scanner.l"
> +#line 1533 "Zend/zend_language_scanner.l"
> {
> HANDLE_NEWLINES(yytext, yyleng);
> zendlval->value.str.val = yytext; /* no copying - intentional */
> @@ -1064,7 +1301,7 @@
> BEGIN(ST_IN_SCRIPTING);
> return T_OPEN_TAG;
> }
> -#line 1068 "Zend/zend_language_scanner.c"
> +#line 1305 "Zend/zend_language_scanner.c"
> yy46:
> YYDEBUG(46, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -1091,7 +1328,7 @@
> ++YYCURSOR;
> YYDEBUG(51, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1319 "Zend/zend_language_scanner.l"
> +#line 1543 "Zend/zend_language_scanner.l"
> {
> if (CG(asp_tags)) {
> zendlval->value.str.val = yytext; /* no copying - intentional */
> @@ -1106,13 +1343,13 @@
> return T_INLINE_HTML;
> }
> }
> -#line 1110 "Zend/zend_language_scanner.c"
> +#line 1347 "Zend/zend_language_scanner.c"
> yy52:
> YYDEBUG(52, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(53, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1335 "Zend/zend_language_scanner.l"
> +#line 1559 "Zend/zend_language_scanner.l"
> {
> if (CG(short_tags)) {
> zendlval->value.str.val = yytext; /* no copying - intentional */
> @@ -1127,7 +1364,7 @@
> return T_INLINE_HTML;
> }
> }
> -#line 1131 "Zend/zend_language_scanner.c"
> +#line 1368 "Zend/zend_language_scanner.c"
> yy54:
> YYDEBUG(54, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -1154,7 +1391,7 @@
> yy58:
> YYDEBUG(58, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1367 "Zend/zend_language_scanner.l"
> +#line 1591 "Zend/zend_language_scanner.l"
> {
> zendlval->value.str.val = yytext; /* no copying - intentional */
> zendlval->value.str.len = yyleng;
> @@ -1163,7 +1400,7 @@
> BEGIN(ST_IN_SCRIPTING);
> return T_OPEN_TAG;
> }
> -#line 1167 "Zend/zend_language_scanner.c"
> +#line 1404 "Zend/zend_language_scanner.c"
> yy59:
> YYDEBUG(59, *YYCURSOR);
> ++YYCURSOR;
> @@ -1254,13 +1491,13 @@
> yy64:
> YYDEBUG(64, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1763 "Zend/zend_language_scanner.l"
> +#line 2007 "Zend/zend_language_scanner.l"
> {
> zendlval->value.lval = (long) '{';
> yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
> return T_CURLY_OPEN;
> }
> -#line 1264 "Zend/zend_language_scanner.c"
> +#line 1501 "Zend/zend_language_scanner.c"
> yy65:
> YYDEBUG(65, *YYCURSOR);
> yyaccept = 1;
> @@ -1278,12 +1515,12 @@
> yy67:
> YYDEBUG(67, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1788 "Zend/zend_language_scanner.l"
> +#line 2032 "Zend/zend_language_scanner.l"
> {
> zend_scan_escape_string(zendlval, yytext, yyleng, '`' TSRMLS_CC);
> return T_ENCAPSED_AND_WHITESPACE;
> }
> -#line 1287 "Zend/zend_language_scanner.c"
> +#line 1524 "Zend/zend_language_scanner.c"
> yy68:
> YYDEBUG(68, *YYCURSOR);
> ++YYCURSOR;
> @@ -1295,12 +1532,12 @@
> ++YYCURSOR;
> YYDEBUG(70, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1924 "Zend/zend_language_scanner.l"
> +#line 2168 "Zend/zend_language_scanner.l"
> {
> BEGIN(ST_IN_SCRIPTING);
> return '`';
> }
> -#line 1304 "Zend/zend_language_scanner.c"
> +#line 1541 "Zend/zend_language_scanner.c"
> yy71:
> YYDEBUG(71, *YYCURSOR);
> ++YYCURSOR;
> @@ -1388,13 +1625,13 @@
> yy77:
> YYDEBUG(77, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1793 "Zend/zend_language_scanner.l"
> +#line 2037 "Zend/zend_language_scanner.l"
> {
> yyless(yyleng - 1);
> zend_scan_escape_string(zendlval, yytext, yyleng, '`' TSRMLS_CC);
> return T_ENCAPSED_AND_WHITESPACE;
> }
> -#line 1398 "Zend/zend_language_scanner.c"
> +#line 1635 "Zend/zend_language_scanner.c"
> yy78:
> YYDEBUG(78, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -1428,24 +1665,24 @@
> yy83:
> YYDEBUG(83, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1455 "Zend/zend_language_scanner.l"
> +#line 1692 "Zend/zend_language_scanner.l"
> {
> zend_copy_value(zendlval, (yytext+1), (yyleng-1));
> zendlval->type = IS_STRING;
> return T_VARIABLE;
> }
> -#line 1438 "Zend/zend_language_scanner.c"
> +#line 1675 "Zend/zend_language_scanner.c"
> yy84:
> YYDEBUG(84, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(85, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1102 "Zend/zend_language_scanner.l"
> +#line 1326 "Zend/zend_language_scanner.l"
> {
> yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
> return T_DOLLAR_OPEN_CURLY_BRACES;
> }
> -#line 1449 "Zend/zend_language_scanner.c"
> +#line 1686 "Zend/zend_language_scanner.c"
> yy86:
> YYDEBUG(86, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -1456,7 +1693,7 @@
> ++YYCURSOR;
> YYDEBUG(88, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1447 "Zend/zend_language_scanner.l"
> +#line 1684 "Zend/zend_language_scanner.l"
> {
> yyless(yyleng - 1);
> yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
> @@ -1464,7 +1701,7 @@
> zendlval->type = IS_STRING;
> return T_VARIABLE;
> }
> -#line 1468 "Zend/zend_language_scanner.c"
> +#line 1705 "Zend/zend_language_scanner.c"
> yy89:
> YYDEBUG(89, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -1482,7 +1719,7 @@
> ++YYCURSOR;
> YYDEBUG(91, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1437 "Zend/zend_language_scanner.l"
> +#line 1674 "Zend/zend_language_scanner.l"
> {
> yyless(yyleng - 3);
> yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
> @@ -1490,7 +1727,7 @@
> zendlval->type = IS_STRING;
> return T_VARIABLE;
> }
> -#line 1494 "Zend/zend_language_scanner.c"
> +#line 1731 "Zend/zend_language_scanner.c"
> }
> /* *********************************** */
> yyc_ST_COMMENT:
> @@ -1547,34 +1784,34 @@
> }
> YYDEBUG(96, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1547 "Zend/zend_language_scanner.l"
> +#line 1784 "Zend/zend_language_scanner.l"
> {
> yymore();
> }
> -#line 1555 "Zend/zend_language_scanner.c"
> +#line 1792 "Zend/zend_language_scanner.c"
> yy97:
> YYDEBUG(97, *YYCURSOR);
> ++YYCURSOR;
> if ((yych = *YYCURSOR) == '/') goto yy99;
> YYDEBUG(98, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1565 "Zend/zend_language_scanner.l"
> +#line 1802 "Zend/zend_language_scanner.l"
> {
> yymore();
> }
> -#line 1566 "Zend/zend_language_scanner.c"
> +#line 1803 "Zend/zend_language_scanner.c"
> yy99:
> YYDEBUG(99, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(100, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1559 "Zend/zend_language_scanner.l"
> +#line 1796 "Zend/zend_language_scanner.l"
> {
> HANDLE_NEWLINES(yytext, yyleng);
> BEGIN(ST_IN_SCRIPTING);
> return T_COMMENT;
> }
> -#line 1578 "Zend/zend_language_scanner.c"
> +#line 1815 "Zend/zend_language_scanner.c"
> }
> /* *********************************** */
> yyc_ST_DOC_COMMENT:
> @@ -1631,28 +1868,28 @@
> }
> YYDEBUG(105, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1547 "Zend/zend_language_scanner.l"
> +#line 1784 "Zend/zend_language_scanner.l"
> {
> yymore();
> }
> -#line 1639 "Zend/zend_language_scanner.c"
> +#line 1876 "Zend/zend_language_scanner.c"
> yy106:
> YYDEBUG(106, *YYCURSOR);
> ++YYCURSOR;
> if ((yych = *YYCURSOR) == '/') goto yy108;
> YYDEBUG(107, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1565 "Zend/zend_language_scanner.l"
> +#line 1802 "Zend/zend_language_scanner.l"
> {
> yymore();
> }
> -#line 1650 "Zend/zend_language_scanner.c"
> +#line 1887 "Zend/zend_language_scanner.c"
> yy108:
> YYDEBUG(108, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(109, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1551 "Zend/zend_language_scanner.l"
> +#line 1788 "Zend/zend_language_scanner.l"
> {
> CG(doc_comment) = estrndup(yytext, yyleng);
> CG(doc_comment_len) = yyleng;
> @@ -1660,7 +1897,7 @@
> BEGIN(ST_IN_SCRIPTING);
> return T_DOC_COMMENT;
> }
> -#line 1664 "Zend/zend_language_scanner.c"
> +#line 1901 "Zend/zend_language_scanner.c"
> }
> /* *********************************** */
> yyc_ST_DOUBLE_QUOTES:
> @@ -1747,13 +1984,13 @@
> yy114:
> YYDEBUG(114, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1763 "Zend/zend_language_scanner.l"
> +#line 2007 "Zend/zend_language_scanner.l"
> {
> zendlval->value.lval = (long) '{';
> yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
> return T_CURLY_OPEN;
> }
> -#line 1757 "Zend/zend_language_scanner.c"
> +#line 1994 "Zend/zend_language_scanner.c"
> yy115:
> YYDEBUG(115, *YYCURSOR);
> yyaccept = 1;
> @@ -1772,12 +2009,12 @@
> yy117:
> YYDEBUG(117, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1770 "Zend/zend_language_scanner.l"
> +#line 2014 "Zend/zend_language_scanner.l"
> {
> zend_scan_escape_string(zendlval, yytext, yyleng, '"' TSRMLS_CC);
> return T_ENCAPSED_AND_WHITESPACE;
> }
> -#line 1781 "Zend/zend_language_scanner.c"
> +#line 2018 "Zend/zend_language_scanner.c"
> yy118:
> YYDEBUG(118, *YYCURSOR);
> ++YYCURSOR;
> @@ -1789,12 +2026,12 @@
> ++YYCURSOR;
> YYDEBUG(120, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1918 "Zend/zend_language_scanner.l"
> +#line 2162 "Zend/zend_language_scanner.l"
> {
> BEGIN(ST_IN_SCRIPTING);
> return '"';
> }
> -#line 1798 "Zend/zend_language_scanner.c"
> +#line 2035 "Zend/zend_language_scanner.c"
> yy121:
> YYDEBUG(121, *YYCURSOR);
> ++YYCURSOR;
> @@ -1885,13 +2122,13 @@
> yy127:
> YYDEBUG(127, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1781 "Zend/zend_language_scanner.l"
> +#line 2025 "Zend/zend_language_scanner.l"
> {
> yyless(yyleng - 1);
> zend_scan_escape_string(zendlval, yytext, yyleng, '"' TSRMLS_CC);
> return T_ENCAPSED_AND_WHITESPACE;
> }
> -#line 1895 "Zend/zend_language_scanner.c"
> +#line 2132 "Zend/zend_language_scanner.c"
> yy128:
> YYDEBUG(128, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -1925,24 +2162,24 @@
> yy133:
> YYDEBUG(133, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1455 "Zend/zend_language_scanner.l"
> +#line 1692 "Zend/zend_language_scanner.l"
> {
> zend_copy_value(zendlval, (yytext+1), (yyleng-1));
> zendlval->type = IS_STRING;
> return T_VARIABLE;
> }
> -#line 1935 "Zend/zend_language_scanner.c"
> +#line 2172 "Zend/zend_language_scanner.c"
> yy134:
> YYDEBUG(134, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(135, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1102 "Zend/zend_language_scanner.l"
> +#line 1326 "Zend/zend_language_scanner.l"
> {
> yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
> return T_DOLLAR_OPEN_CURLY_BRACES;
> }
> -#line 1946 "Zend/zend_language_scanner.c"
> +#line 2183 "Zend/zend_language_scanner.c"
> yy136:
> YYDEBUG(136, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -1953,7 +2190,7 @@
> ++YYCURSOR;
> YYDEBUG(138, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1447 "Zend/zend_language_scanner.l"
> +#line 1684 "Zend/zend_language_scanner.l"
> {
> yyless(yyleng - 1);
> yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
> @@ -1961,7 +2198,7 @@
> zendlval->type = IS_STRING;
> return T_VARIABLE;
> }
> -#line 1965 "Zend/zend_language_scanner.c"
> +#line 2202 "Zend/zend_language_scanner.c"
> yy139:
> YYDEBUG(139, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -1979,7 +2216,7 @@
> ++YYCURSOR;
> YYDEBUG(141, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1437 "Zend/zend_language_scanner.l"
> +#line 1674 "Zend/zend_language_scanner.l"
> {
> yyless(yyleng - 3);
> yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
> @@ -1987,7 +2224,7 @@
> zendlval->type = IS_STRING;
> return T_VARIABLE;
> }
> -#line 1991 "Zend/zend_language_scanner.c"
> +#line 2228 "Zend/zend_language_scanner.c"
> }
> /* *********************************** */
> yyc_ST_END_HEREDOC:
> @@ -1998,7 +2235,7 @@
> ++YYCURSOR;
> YYDEBUG(145, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1752 "Zend/zend_language_scanner.l"
> +#line 1996 "Zend/zend_language_scanner.l"
> {
> SCNG(yy_text) = Z_STRVAL_P(zendlval) = CG(heredoc);
> SCNG(yy_leng) = Z_STRLEN_P(zendlval) = CG(heredoc_len);
> @@ -2007,7 +2244,7 @@
> BEGIN(ST_IN_SCRIPTING);
> return T_END_HEREDOC;
> }
> -#line 2011 "Zend/zend_language_scanner.c"
> +#line 2248 "Zend/zend_language_scanner.c"
> /* *********************************** */
> yyc_ST_END_NOWDOC:
> YYDEBUG(146, *YYCURSOR);
> @@ -2017,7 +2254,7 @@
> ++YYCURSOR;
> YYDEBUG(149, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1907 "Zend/zend_language_scanner.l"
> +#line 2151 "Zend/zend_language_scanner.l"
> {
> SCNG(yy_text) = Z_STRVAL_P(zendlval) = CG(heredoc);
> SCNG(yy_leng) = Z_STRLEN_P(zendlval) = CG(heredoc_len);
> @@ -2026,7 +2263,7 @@
> BEGIN(ST_IN_SCRIPTING);
> return T_END_NOWDOC;
> }
> -#line 2030 "Zend/zend_language_scanner.c"
> +#line 2267 "Zend/zend_language_scanner.c"
> /* *********************************** */
> yyc_ST_HEREDOC:
> {
> @@ -2083,12 +2320,12 @@
> yy152:
> YYDEBUG(152, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1807 "Zend/zend_language_scanner.l"
> +#line 2051 "Zend/zend_language_scanner.l"
> {
> zend_scan_escape_string(zendlval, yytext, yyleng, 0 TSRMLS_CC);
> return T_ENCAPSED_AND_WHITESPACE;
> }
> -#line 2092 "Zend/zend_language_scanner.c"
> +#line 2329 "Zend/zend_language_scanner.c"
> yy153:
> YYDEBUG(153, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -2134,13 +2371,13 @@
> yy155:
> YYDEBUG(155, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1763 "Zend/zend_language_scanner.l"
> +#line 2007 "Zend/zend_language_scanner.l"
> {
> zendlval->value.lval = (long) '{';
> yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
> return T_CURLY_OPEN;
> }
> -#line 2144 "Zend/zend_language_scanner.c"
> +#line 2381 "Zend/zend_language_scanner.c"
> yy156:
> YYDEBUG(156, *YYCURSOR);
> yyaccept = 0;
> @@ -2391,13 +2628,13 @@
> yy174:
> YYDEBUG(174, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1812 "Zend/zend_language_scanner.l"
> +#line 2056 "Zend/zend_language_scanner.l"
> {
> yyless(yyleng - 1);
> zend_scan_escape_string(zendlval, yytext, yyleng, 0 TSRMLS_CC);
> return T_ENCAPSED_AND_WHITESPACE;
> }
> -#line 2401 "Zend/zend_language_scanner.c"
> +#line 2638 "Zend/zend_language_scanner.c"
> yy175:
> YYDEBUG(175, *YYCURSOR);
> yyaccept = 2;
> @@ -2496,7 +2733,7 @@
> ++YYCURSOR;
> YYDEBUG(182, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1712 "Zend/zend_language_scanner.l"
> +#line 1956 "Zend/zend_language_scanner.l"
> {
> char *end = yytext + yyleng - 1;
>
> @@ -2536,7 +2773,7 @@
> yymore();
> }
> }
> -#line 2540 "Zend/zend_language_scanner.c"
> +#line 2777 "Zend/zend_language_scanner.c"
> yy183:
> YYDEBUG(183, *YYCURSOR);
> yyaccept = 2;
> @@ -2796,24 +3033,24 @@
> yy204:
> YYDEBUG(204, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1455 "Zend/zend_language_scanner.l"
> +#line 1692 "Zend/zend_language_scanner.l"
> {
> zend_copy_value(zendlval, (yytext+1), (yyleng-1));
> zendlval->type = IS_STRING;
> return T_VARIABLE;
> }
> -#line 2806 "Zend/zend_language_scanner.c"
> +#line 3043 "Zend/zend_language_scanner.c"
> yy205:
> YYDEBUG(205, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(206, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1102 "Zend/zend_language_scanner.l"
> +#line 1326 "Zend/zend_language_scanner.l"
> {
> yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
> return T_DOLLAR_OPEN_CURLY_BRACES;
> }
> -#line 2817 "Zend/zend_language_scanner.c"
> +#line 3054 "Zend/zend_language_scanner.c"
> yy207:
> YYDEBUG(207, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -2824,7 +3061,7 @@
> ++YYCURSOR;
> YYDEBUG(209, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1447 "Zend/zend_language_scanner.l"
> +#line 1684 "Zend/zend_language_scanner.l"
> {
> yyless(yyleng - 1);
> yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
> @@ -2832,7 +3069,7 @@
> zendlval->type = IS_STRING;
> return T_VARIABLE;
> }
> -#line 2836 "Zend/zend_language_scanner.c"
> +#line 3073 "Zend/zend_language_scanner.c"
> yy210:
> YYDEBUG(210, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -2850,7 +3087,7 @@
> ++YYCURSOR;
> YYDEBUG(212, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1437 "Zend/zend_language_scanner.l"
> +#line 1674 "Zend/zend_language_scanner.l"
> {
> yyless(yyleng - 3);
> yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
> @@ -2858,7 +3095,7 @@
> zendlval->type = IS_STRING;
> return T_VARIABLE;
> }
> -#line 2862 "Zend/zend_language_scanner.c"
> +#line 3099 "Zend/zend_language_scanner.c"
> }
> /* *********************************** */
> yyc_ST_IN_SCRIPTING:
> @@ -3073,13 +3310,13 @@
> yy216:
> YYDEBUG(216, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1479 "Zend/zend_language_scanner.l"
> +#line 1716 "Zend/zend_language_scanner.l"
> {
> zend_copy_value(zendlval, yytext, yyleng);
> zendlval->type = IS_STRING;
> return T_STRING;
> }
> -#line 3083 "Zend/zend_language_scanner.c"
> +#line 3320 "Zend/zend_language_scanner.c"
> yy217:
> YYDEBUG(217, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -3326,11 +3563,11 @@
> yy230:
> YYDEBUG(230, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1091 "Zend/zend_language_scanner.l"
> +#line 1315 "Zend/zend_language_scanner.l"
> {
> return yytext[0];
> }
> -#line 3334 "Zend/zend_language_scanner.c"
> +#line 3571 "Zend/zend_language_scanner.c"
> yy231:
> YYDEBUG(231, *YYCURSOR);
> ++YYCURSOR;
> @@ -3339,7 +3576,7 @@
> yy232:
> YYDEBUG(232, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 830 "Zend/zend_language_scanner.l"
> +#line 1054 "Zend/zend_language_scanner.l"
> {
> zendlval->value.str.val = yytext; /* no copying - intentional */
> zendlval->value.str.len = yyleng;
> @@ -3347,7 +3584,7 @@
> HANDLE_NEWLINES(yytext, yyleng);
> return T_WHITESPACE;
> }
> -#line 3351 "Zend/zend_language_scanner.c"
> +#line 3588 "Zend/zend_language_scanner.c"
> yy233:
> YYDEBUG(233, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -3580,18 +3817,18 @@
> ++YYCURSOR;
> YYDEBUG(258, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1096 "Zend/zend_language_scanner.l"
> +#line 1320 "Zend/zend_language_scanner.l"
> {
> yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
> return '{';
> }
> -#line 3589 "Zend/zend_language_scanner.c"
> +#line 3826 "Zend/zend_language_scanner.c"
> yy259:
> YYDEBUG(259, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(260, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1108 "Zend/zend_language_scanner.l"
> +#line 1332 "Zend/zend_language_scanner.l"
> {
> RESET_DOC_COMMENT();
> if (!zend_stack_is_empty(&SCNG(state_stack))) {
> @@ -3599,7 +3836,7 @@
> }
> return '}';
> }
> -#line 3603 "Zend/zend_language_scanner.c"
> +#line 3840 "Zend/zend_language_scanner.c"
> yy261:
> YYDEBUG(261, *YYCURSOR);
> yyaccept = 2;
> @@ -3622,7 +3859,7 @@
> yy262:
> YYDEBUG(262, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1134 "Zend/zend_language_scanner.l"
> +#line 1358 "Zend/zend_language_scanner.l"
> {
> if (yyleng < MAX_LENGTH_OF_LONG - 1) { /* Won't overflow */
> zendlval->value.lval = strtol(yytext, NULL, 0);
> @@ -3643,7 +3880,7 @@
> zendlval->type = IS_LONG;
> return T_LNUMBER;
> }
> -#line 3647 "Zend/zend_language_scanner.c"
> +#line 3884 "Zend/zend_language_scanner.c"
> yy263:
> YYDEBUG(263, *YYCURSOR);
> yyaccept = 2;
> @@ -3671,12 +3908,12 @@
> yy266:
> YYDEBUG(266, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1486 "Zend/zend_language_scanner.l"
> +#line 1723 "Zend/zend_language_scanner.l"
> {
> BEGIN(ST_ONE_LINE_COMMENT);
> yymore();
> }
> -#line 3680 "Zend/zend_language_scanner.c"
> +#line 3917 "Zend/zend_language_scanner.c"
> yy267:
> YYDEBUG(267, *YYCURSOR);
> yyaccept = 3;
> @@ -3685,12 +3922,12 @@
> yy268:
> YYDEBUG(268, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1644 "Zend/zend_language_scanner.l"
> +#line 1888 "Zend/zend_language_scanner.l"
> {
> BEGIN(ST_DOUBLE_QUOTES);
> return '"';
> }
> -#line 3694 "Zend/zend_language_scanner.c"
> +#line 3931 "Zend/zend_language_scanner.c"
> yy269:
> YYDEBUG(269, *YYCURSOR);
> yyaccept = 4;
> @@ -3699,23 +3936,23 @@
> yy270:
> YYDEBUG(270, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1930 "Zend/zend_language_scanner.l"
> +#line 2174 "Zend/zend_language_scanner.l"
> {
> zend_error(E_COMPILE_WARNING,"Unexpected character in input:
> '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
> goto restart;
> }
> -#line 3708 "Zend/zend_language_scanner.c"
> +#line 3945 "Zend/zend_language_scanner.c"
> yy271:
> YYDEBUG(271, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(272, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1672 "Zend/zend_language_scanner.l"
> +#line 1916 "Zend/zend_language_scanner.l"
> {
> BEGIN(ST_BACKQUOTE);
> return '`';
> }
> -#line 3719 "Zend/zend_language_scanner.c"
> +#line 3956 "Zend/zend_language_scanner.c"
> yy273:
> YYDEBUG(273, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -3741,7 +3978,7 @@
> ++YYCURSOR;
> YYDEBUG(278, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1602 "Zend/zend_language_scanner.l"
> +#line 1839 "Zend/zend_language_scanner.l"
> {
> register char *s, *t;
> char *end;
> @@ -3780,9 +4017,16 @@
> }
> *t = 0;
>
> +#ifdef ZEND_MULTIBYTE
> + if (SCNG(output_filter)) {
> + s = zendlval->value.str.val;
> + SCNG(output_filter)(&(zendlval->value.str.val),
> &(zendlval->value.str.len), s, zendlval->value.str.len TSRMLS_CC);
> + efree(s);
> + }
> +#endif /* ZEND_MULTIBYTE */
> return T_CONSTANT_ENCAPSED_STRING;
> }
> -#line 3786 "Zend/zend_language_scanner.c"
> +#line 4030 "Zend/zend_language_scanner.c"
> yy279:
> YYDEBUG(279, *YYCURSOR);
> ++YYCURSOR;
> @@ -3879,14 +4123,14 @@
> ++YYCURSOR;
> YYDEBUG(288, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1594 "Zend/zend_language_scanner.l"
> +#line 1831 "Zend/zend_language_scanner.l"
> {
> int bprefix = (yytext[0] != '"') ? 1 : 0;
>
> zend_scan_escape_string(zendlval, yytext+bprefix+1, yyleng-bprefix-2, '"' TSRMLS_CC);
> return T_CONSTANT_ENCAPSED_STRING;
> }
> -#line 3890 "Zend/zend_language_scanner.c"
> +#line 4134 "Zend/zend_language_scanner.c"
> yy289:
> YYDEBUG(289, *YYCURSOR);
> ++YYCURSOR;
> @@ -3919,13 +4163,13 @@
> yy294:
> YYDEBUG(294, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1195 "Zend/zend_language_scanner.l"
> +#line 1419 "Zend/zend_language_scanner.l"
> {
> zendlval->value.dval = zend_strtod(yytext, NULL);
> zendlval->type = IS_DOUBLE;
> return T_DNUMBER;
> }
> -#line 3929 "Zend/zend_language_scanner.c"
> +#line 4173 "Zend/zend_language_scanner.c"
> yy295:
> YYDEBUG(295, *YYCURSOR);
> yyaccept = 2;
> @@ -3987,7 +4231,7 @@
> }
> YYDEBUG(304, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1155 "Zend/zend_language_scanner.l"
> +#line 1379 "Zend/zend_language_scanner.l"
> {
> char *hex = yytext + 2; /* Skip "0x" */
> int len = yyleng - 2;
> @@ -4008,7 +4252,7 @@
> return T_DNUMBER;
> }
> }
> -#line 4012 "Zend/zend_language_scanner.c"
> +#line 4256 "Zend/zend_language_scanner.c"
> yy305:
> YYDEBUG(305, *YYCURSOR);
> ++YYCURSOR;
> @@ -4017,7 +4261,7 @@
> yy306:
> YYDEBUG(306, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1569 "Zend/zend_language_scanner.l"
> +#line 1806 "Zend/zend_language_scanner.l"
> {
> zendlval->value.str.val = yytext; /* no copying - intentional */
> zendlval->value.str.len = yyleng;
> @@ -4025,7 +4269,7 @@
> BEGIN(INITIAL);
> return T_CLOSE_TAG; /* implicit ';' at php-end tag */
> }
> -#line 4029 "Zend/zend_language_scanner.c"
> +#line 4273 "Zend/zend_language_scanner.c"
> yy307:
> YYDEBUG(307, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -4059,13 +4303,13 @@
> yy311:
> YYDEBUG(311, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1455 "Zend/zend_language_scanner.l"
> +#line 1692 "Zend/zend_language_scanner.l"
> {
> zend_copy_value(zendlval, (yytext+1), (yyleng-1));
> zendlval->type = IS_STRING;
> return T_VARIABLE;
> }
> -#line 4069 "Zend/zend_language_scanner.c"
> +#line 4313 "Zend/zend_language_scanner.c"
> yy312:
> YYDEBUG(312, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -4079,11 +4323,11 @@
> }
> YYDEBUG(314, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1079 "Zend/zend_language_scanner.l"
> +#line 1303 "Zend/zend_language_scanner.l"
> {
> return T_LOGICAL_XOR;
> }
> -#line 4087 "Zend/zend_language_scanner.c"
> +#line 4331 "Zend/zend_language_scanner.c"
> yy315:
> YYDEBUG(315, *YYCURSOR);
> ++YYCURSOR;
> @@ -4092,61 +4336,61 @@
> }
> YYDEBUG(316, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1071 "Zend/zend_language_scanner.l"
> +#line 1295 "Zend/zend_language_scanner.l"
> {
> return T_LOGICAL_OR;
> }
> -#line 4100 "Zend/zend_language_scanner.c"
> +#line 4344 "Zend/zend_language_scanner.c"
> yy317:
> YYDEBUG(317, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(318, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1059 "Zend/zend_language_scanner.l"
> +#line 1283 "Zend/zend_language_scanner.l"
> {
> return T_XOR_EQUAL;
> }
> -#line 4110 "Zend/zend_language_scanner.c"
> +#line 4354 "Zend/zend_language_scanner.c"
> yy319:
> YYDEBUG(319, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(320, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1063 "Zend/zend_language_scanner.l"
> +#line 1287 "Zend/zend_language_scanner.l"
> {
> return T_BOOLEAN_OR;
> }
> -#line 4120 "Zend/zend_language_scanner.c"
> +#line 4364 "Zend/zend_language_scanner.c"
> yy321:
> YYDEBUG(321, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(322, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1055 "Zend/zend_language_scanner.l"
> +#line 1279 "Zend/zend_language_scanner.l"
> {
> return T_OR_EQUAL;
> }
> -#line 4130 "Zend/zend_language_scanner.c"
> +#line 4374 "Zend/zend_language_scanner.c"
> yy323:
> YYDEBUG(323, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(324, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1067 "Zend/zend_language_scanner.l"
> +#line 1291 "Zend/zend_language_scanner.l"
> {
> return T_BOOLEAN_AND;
> }
> -#line 4140 "Zend/zend_language_scanner.c"
> +#line 4384 "Zend/zend_language_scanner.c"
> yy325:
> YYDEBUG(325, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(326, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1051 "Zend/zend_language_scanner.l"
> +#line 1275 "Zend/zend_language_scanner.l"
> {
> return T_AND_EQUAL;
> }
> -#line 4150 "Zend/zend_language_scanner.c"
> +#line 4394 "Zend/zend_language_scanner.c"
> yy327:
> YYDEBUG(327, *YYCURSOR);
> ++YYCURSOR;
> @@ -4155,7 +4399,7 @@
> yy328:
> YYDEBUG(328, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1578 "Zend/zend_language_scanner.l"
> +#line 1815 "Zend/zend_language_scanner.l"
> {
> if (CG(asp_tags)) {
> BEGIN(INITIAL);
> @@ -4168,17 +4412,17 @@
> return yytext[0];
> }
> }
> -#line 4172 "Zend/zend_language_scanner.c"
> +#line 4416 "Zend/zend_language_scanner.c"
> yy329:
> YYDEBUG(329, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(330, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1039 "Zend/zend_language_scanner.l"
> +#line 1263 "Zend/zend_language_scanner.l"
> {
> return T_MOD_EQUAL;
> }
> -#line 4182 "Zend/zend_language_scanner.c"
> +#line 4426 "Zend/zend_language_scanner.c"
> yy331:
> YYDEBUG(331, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -4209,11 +4453,11 @@
> ++YYCURSOR;
> YYDEBUG(336, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1035 "Zend/zend_language_scanner.l"
> +#line 1259 "Zend/zend_language_scanner.l"
> {
> return T_CONCAT_EQUAL;
> }
> -#line 4217 "Zend/zend_language_scanner.c"
> +#line 4461 "Zend/zend_language_scanner.c"
> yy337:
> YYDEBUG(337, *YYCURSOR);
> yyaccept = 6;
> @@ -4222,12 +4466,12 @@
> yy338:
> YYDEBUG(338, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1541 "Zend/zend_language_scanner.l"
> +#line 1778 "Zend/zend_language_scanner.l"
> {
> BEGIN(ST_COMMENT);
> yymore();
> }
> -#line 4231 "Zend/zend_language_scanner.c"
> +#line 4475 "Zend/zend_language_scanner.c"
> yy339:
> YYDEBUG(339, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -4237,11 +4481,11 @@
> ++YYCURSOR;
> YYDEBUG(341, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1031 "Zend/zend_language_scanner.l"
> +#line 1255 "Zend/zend_language_scanner.l"
> {
> return T_DIV_EQUAL;
> }
> -#line 4245 "Zend/zend_language_scanner.c"
> +#line 4489 "Zend/zend_language_scanner.c"
> yy342:
> YYDEBUG(342, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -4260,54 +4504,54 @@
> }
> YYDEBUG(345, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1535 "Zend/zend_language_scanner.l"
> +#line 1772 "Zend/zend_language_scanner.l"
> {
> RESET_DOC_COMMENT();
> BEGIN(ST_DOC_COMMENT);
> yymore();
> }
> -#line 4270 "Zend/zend_language_scanner.c"
> +#line 4514 "Zend/zend_language_scanner.c"
> yy346:
> YYDEBUG(346, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(347, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1027 "Zend/zend_language_scanner.l"
> +#line 1251 "Zend/zend_language_scanner.l"
> {
> return T_MUL_EQUAL;
> }
> -#line 4280 "Zend/zend_language_scanner.c"
> +#line 4524 "Zend/zend_language_scanner.c"
> yy348:
> YYDEBUG(348, *YYCURSOR);
> ++YYCURSOR;
> if ((yych = *YYCURSOR) == '=') goto yy352;
> YYDEBUG(349, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1087 "Zend/zend_language_scanner.l"
> +#line 1311 "Zend/zend_language_scanner.l"
> {
> return T_SR;
> }
> -#line 4291 "Zend/zend_language_scanner.c"
> +#line 4535 "Zend/zend_language_scanner.c"
> yy350:
> YYDEBUG(350, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(351, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1015 "Zend/zend_language_scanner.l"
> +#line 1239 "Zend/zend_language_scanner.l"
> {
> return T_IS_GREATER_OR_EQUAL;
> }
> -#line 4301 "Zend/zend_language_scanner.c"
> +#line 4545 "Zend/zend_language_scanner.c"
> yy352:
> YYDEBUG(352, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(353, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1047 "Zend/zend_language_scanner.l"
> +#line 1271 "Zend/zend_language_scanner.l"
> {
> return T_SR_EQUAL;
> }
> -#line 4311 "Zend/zend_language_scanner.c"
> +#line 4555 "Zend/zend_language_scanner.c"
> yy354:
> YYDEBUG(354, *YYCURSOR);
> yyaccept = 7;
> @@ -4318,11 +4562,11 @@
> yy355:
> YYDEBUG(355, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1083 "Zend/zend_language_scanner.l"
> +#line 1307 "Zend/zend_language_scanner.l"
> {
> return T_SL;
> }
> -#line 4326 "Zend/zend_language_scanner.c"
> +#line 4570 "Zend/zend_language_scanner.c"
> yy356:
> YYDEBUG(356, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -4334,22 +4578,22 @@
> ++YYCURSOR;
> YYDEBUG(358, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1011 "Zend/zend_language_scanner.l"
> +#line 1235 "Zend/zend_language_scanner.l"
> {
> return T_IS_SMALLER_OR_EQUAL;
> }
> -#line 4342 "Zend/zend_language_scanner.c"
> +#line 4586 "Zend/zend_language_scanner.c"
> yy359:
> YYDEBUG(359, *YYCURSOR);
> ++YYCURSOR;
> yy360:
> YYDEBUG(360, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1007 "Zend/zend_language_scanner.l"
> +#line 1231 "Zend/zend_language_scanner.l"
> {
> return T_IS_NOT_EQUAL;
> }
> -#line 4353 "Zend/zend_language_scanner.c"
> +#line 4597 "Zend/zend_language_scanner.c"
> yy361:
> YYDEBUG(361, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -4400,11 +4644,11 @@
> ++YYCURSOR;
> YYDEBUG(369, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1043 "Zend/zend_language_scanner.l"
> +#line 1267 "Zend/zend_language_scanner.l"
> {
> return T_SL_EQUAL;
> }
> -#line 4408 "Zend/zend_language_scanner.c"
> +#line 4652 "Zend/zend_language_scanner.c"
> yy370:
> YYDEBUG(370, *YYCURSOR);
> ++YYCURSOR;
> @@ -4511,7 +4755,7 @@
> yy380:
> YYDEBUG(380, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1650 "Zend/zend_language_scanner.l"
> +#line 1894 "Zend/zend_language_scanner.l"
> {
> char *s;
> int bprefix = (yytext[0] != '<') ? 1 : 0;
> @@ -4532,7 +4776,7 @@
> BEGIN(ST_START_HEREDOC);
> return T_START_HEREDOC;
> }
> -#line 4536 "Zend/zend_language_scanner.c"
> +#line 4780 "Zend/zend_language_scanner.c"
> yy381:
> YYDEBUG(381, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -4574,7 +4818,7 @@
> yy386:
> YYDEBUG(386, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1821 "Zend/zend_language_scanner.l"
> +#line 2065 "Zend/zend_language_scanner.l"
> {
> int bprefix = (yytext[0] != '<') ? 1 : 0;
> char *s;
> @@ -4591,7 +4835,7 @@
> BEGIN(ST_START_NOWDOC);
> return T_START_NOWDOC;
> }
> -#line 4595 "Zend/zend_language_scanner.c"
> +#line 4839 "Zend/zend_language_scanner.c"
> yy387:
> YYDEBUG(387, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -4605,31 +4849,31 @@
> ++YYCURSOR;
> YYDEBUG(390, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 999 "Zend/zend_language_scanner.l"
> +#line 1223 "Zend/zend_language_scanner.l"
> {
> return T_IS_NOT_IDENTICAL;
> }
> -#line 4613 "Zend/zend_language_scanner.c"
> +#line 4857 "Zend/zend_language_scanner.c"
> yy391:
> YYDEBUG(391, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(392, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1019 "Zend/zend_language_scanner.l"
> +#line 1243 "Zend/zend_language_scanner.l"
> {
> return T_PLUS_EQUAL;
> }
> -#line 4623 "Zend/zend_language_scanner.c"
> +#line 4867 "Zend/zend_language_scanner.c"
> yy393:
> YYDEBUG(393, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(394, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 987 "Zend/zend_language_scanner.l"
> +#line 1211 "Zend/zend_language_scanner.l"
> {
> return T_INC;
> }
> -#line 4633 "Zend/zend_language_scanner.c"
> +#line 4877 "Zend/zend_language_scanner.c"
> yy395:
> YYDEBUG(395, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -4648,42 +4892,42 @@
> }
> YYDEBUG(398, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 979 "Zend/zend_language_scanner.l"
> +#line 1203 "Zend/zend_language_scanner.l"
> {
> return T_LIST;
> }
> -#line 4656 "Zend/zend_language_scanner.c"
> +#line 4900 "Zend/zend_language_scanner.c"
> yy399:
> YYDEBUG(399, *YYCURSOR);
> ++YYCURSOR;
> if ((yych = *YYCURSOR) == '=') goto yy403;
> YYDEBUG(400, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1003 "Zend/zend_language_scanner.l"
> +#line 1227 "Zend/zend_language_scanner.l"
> {
> return T_IS_EQUAL;
> }
> -#line 4667 "Zend/zend_language_scanner.c"
> +#line 4911 "Zend/zend_language_scanner.c"
> yy401:
> YYDEBUG(401, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(402, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 975 "Zend/zend_language_scanner.l"
> +#line 1199 "Zend/zend_language_scanner.l"
> {
> return T_DOUBLE_ARROW;
> }
> -#line 4677 "Zend/zend_language_scanner.c"
> +#line 4921 "Zend/zend_language_scanner.c"
> yy403:
> YYDEBUG(403, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(404, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 995 "Zend/zend_language_scanner.l"
> +#line 1219 "Zend/zend_language_scanner.l"
> {
> return T_IS_IDENTICAL;
> }
> -#line 4687 "Zend/zend_language_scanner.c"
> +#line 4931 "Zend/zend_language_scanner.c"
> yy405:
> YYDEBUG(405, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -4775,7 +5019,7 @@
> }
> YYDEBUG(423, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1299 "Zend/zend_language_scanner.l"
> +#line 1523 "Zend/zend_language_scanner.l"
> {
> if (CG(current_namespace)) {
> *zendlval = *CG(current_namespace);
> @@ -4785,7 +5029,7 @@
> }
> return T_NS_C;
> }
> -#line 4789 "Zend/zend_language_scanner.c"
> +#line 5033 "Zend/zend_language_scanner.c"
> yy424:
> YYDEBUG(424, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -4803,7 +5047,7 @@
> }
> YYDEBUG(428, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1272 "Zend/zend_language_scanner.l"
> +#line 1496 "Zend/zend_language_scanner.l"
> {
> char *filename = zend_get_compiled_filename(TSRMLS_C);
> const size_t filename_len = strlen(filename);
> @@ -4830,7 +5074,7 @@
> zendlval->type = IS_STRING;
> return T_DIR;
> }
> -#line 4834 "Zend/zend_language_scanner.c"
> +#line 5078 "Zend/zend_language_scanner.c"
> yy429:
> YYDEBUG(429, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -4851,13 +5095,13 @@
> }
> YYDEBUG(434, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1254 "Zend/zend_language_scanner.l"
> +#line 1478 "Zend/zend_language_scanner.l"
> {
> zendlval->value.lval = CG(zend_lineno);
> zendlval->type = IS_LONG;
> return T_LINE;
> }
> -#line 4861 "Zend/zend_language_scanner.c"
> +#line 5105 "Zend/zend_language_scanner.c"
> yy435:
> YYDEBUG(435, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -4884,7 +5128,7 @@
> }
> YYDEBUG(442, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1233 "Zend/zend_language_scanner.l"
> +#line 1457 "Zend/zend_language_scanner.l"
> {
> char *class_name = CG(active_class_entry) ?
> CG(active_class_entry)->name : NULL;
> char *func_name = CG(active_op_array)?
> CG(active_op_array)->function_name : NULL;
> @@ -4905,7 +5149,7 @@
> zendlval->type = IS_STRING;
> return T_METHOD_C;
> }
> -#line 4909 "Zend/zend_language_scanner.c"
> +#line 5153 "Zend/zend_language_scanner.c"
> yy443:
> YYDEBUG(443, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -4943,7 +5187,7 @@
> }
> YYDEBUG(453, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1217 "Zend/zend_language_scanner.l"
> +#line 1441 "Zend/zend_language_scanner.l"
> {
> char *func_name = NULL;
>
> @@ -4959,7 +5203,7 @@
> zendlval->type = IS_STRING;
> return T_FUNC_C;
> }
> -#line 4963 "Zend/zend_language_scanner.c"
> +#line 5207 "Zend/zend_language_scanner.c"
> yy454:
> YYDEBUG(454, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -4977,7 +5221,7 @@
> }
> YYDEBUG(458, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1260 "Zend/zend_language_scanner.l"
> +#line 1484 "Zend/zend_language_scanner.l"
> {
> char *filename = zend_get_compiled_filename(TSRMLS_C);
>
> @@ -4989,7 +5233,7 @@
> zendlval->type = IS_STRING;
> return T_FILE;
> }
> -#line 4993 "Zend/zend_language_scanner.c"
> +#line 5237 "Zend/zend_language_scanner.c"
> yy459:
> YYDEBUG(459, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -5013,7 +5257,7 @@
> }
> YYDEBUG(465, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1201 "Zend/zend_language_scanner.l"
> +#line 1425 "Zend/zend_language_scanner.l"
> {
> char *class_name = NULL;
>
> @@ -5029,7 +5273,7 @@
> zendlval->type = IS_STRING;
> return T_CLASS_C;
> }
> -#line 5033 "Zend/zend_language_scanner.c"
> +#line 5277 "Zend/zend_language_scanner.c"
> yy466:
> YYDEBUG(466, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -5091,11 +5335,11 @@
> }
> YYDEBUG(478, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 943 "Zend/zend_language_scanner.l"
> +#line 1167 "Zend/zend_language_scanner.l"
> {
> return T_HALT_COMPILER;
> }
> -#line 5099 "Zend/zend_language_scanner.c"
> +#line 5343 "Zend/zend_language_scanner.c"
> yy479:
> YYDEBUG(479, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -5115,11 +5359,11 @@
> }
> YYDEBUG(482, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 927 "Zend/zend_language_scanner.l"
> +#line 1151 "Zend/zend_language_scanner.l"
> {
> return T_USE;
> }
> -#line 5123 "Zend/zend_language_scanner.c"
> +#line 5367 "Zend/zend_language_scanner.c"
> yy483:
> YYDEBUG(483, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -5138,11 +5382,11 @@
> }
> YYDEBUG(486, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 971 "Zend/zend_language_scanner.l"
> +#line 1195 "Zend/zend_language_scanner.l"
> {
> return T_UNSET;
> }
> -#line 5146 "Zend/zend_language_scanner.c"
> +#line 5390 "Zend/zend_language_scanner.c"
> yy487:
> YYDEBUG(487, *YYCURSOR);
> ++YYCURSOR;
> @@ -5314,11 +5558,11 @@
> ++YYCURSOR;
> YYDEBUG(504, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 871 "Zend/zend_language_scanner.l"
> +#line 1095 "Zend/zend_language_scanner.l"
> {
> return T_INT_CAST;
> }
> -#line 5322 "Zend/zend_language_scanner.c"
> +#line 5566 "Zend/zend_language_scanner.c"
> yy505:
> YYDEBUG(505, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -5362,11 +5606,11 @@
> ++YYCURSOR;
> YYDEBUG(513, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 875 "Zend/zend_language_scanner.l"
> +#line 1099 "Zend/zend_language_scanner.l"
> {
> return T_DOUBLE_CAST;
> }
> -#line 5370 "Zend/zend_language_scanner.c"
> +#line 5614 "Zend/zend_language_scanner.c"
> yy514:
> YYDEBUG(514, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -5436,11 +5680,11 @@
> ++YYCURSOR;
> YYDEBUG(527, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 879 "Zend/zend_language_scanner.l"
> +#line 1103 "Zend/zend_language_scanner.l"
> {
> return T_STRING_CAST;
> }
> -#line 5444 "Zend/zend_language_scanner.c"
> +#line 5688 "Zend/zend_language_scanner.c"
> yy528:
> YYDEBUG(528, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -5473,11 +5717,11 @@
> ++YYCURSOR;
> YYDEBUG(534, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 887 "Zend/zend_language_scanner.l"
> +#line 1111 "Zend/zend_language_scanner.l"
> {
> return T_ARRAY_CAST;
> }
> -#line 5481 "Zend/zend_language_scanner.c"
> +#line 5725 "Zend/zend_language_scanner.c"
> yy535:
> YYDEBUG(535, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -5515,11 +5759,11 @@
> ++YYCURSOR;
> YYDEBUG(542, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 891 "Zend/zend_language_scanner.l"
> +#line 1115 "Zend/zend_language_scanner.l"
> {
> return T_OBJECT_CAST;
> }
> -#line 5523 "Zend/zend_language_scanner.c"
> +#line 5767 "Zend/zend_language_scanner.c"
> yy543:
> YYDEBUG(543, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -5560,11 +5804,11 @@
> ++YYCURSOR;
> YYDEBUG(550, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 895 "Zend/zend_language_scanner.l"
> +#line 1119 "Zend/zend_language_scanner.l"
> {
> return T_BOOL_CAST;
> }
> -#line 5568 "Zend/zend_language_scanner.c"
> +#line 5812 "Zend/zend_language_scanner.c"
> yy551:
> YYDEBUG(551, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -5608,11 +5852,11 @@
> ++YYCURSOR;
> YYDEBUG(559, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 883 "Zend/zend_language_scanner.l"
> +#line 1107 "Zend/zend_language_scanner.l"
> {
> return T_STRING_CAST;
> }
> -#line 5616 "Zend/zend_language_scanner.c"
> +#line 5860 "Zend/zend_language_scanner.c"
> yy560:
> YYDEBUG(560, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -5645,11 +5889,11 @@
> ++YYCURSOR;
> YYDEBUG(566, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 899 "Zend/zend_language_scanner.l"
> +#line 1123 "Zend/zend_language_scanner.l"
> {
> return T_UNSET_CAST;
> }
> -#line 5653 "Zend/zend_language_scanner.c"
> +#line 5897 "Zend/zend_language_scanner.c"
> yy567:
> YYDEBUG(567, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -5663,11 +5907,11 @@
> }
> YYDEBUG(569, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 867 "Zend/zend_language_scanner.l"
> +#line 1091 "Zend/zend_language_scanner.l"
> {
> return T_VAR;
> }
> -#line 5671 "Zend/zend_language_scanner.c"
> +#line 5915 "Zend/zend_language_scanner.c"
> yy570:
> YYDEBUG(570, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -5687,11 +5931,11 @@
> }
> YYDEBUG(573, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 859 "Zend/zend_language_scanner.l"
> +#line 1083 "Zend/zend_language_scanner.l"
> {
> return T_NEW;
> }
> -#line 5695 "Zend/zend_language_scanner.c"
> +#line 5939 "Zend/zend_language_scanner.c"
> yy574:
> YYDEBUG(574, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -5730,21 +5974,21 @@
> }
> YYDEBUG(581, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 923 "Zend/zend_language_scanner.l"
> +#line 1147 "Zend/zend_language_scanner.l"
> {
> return T_NAMESPACE;
> }
> -#line 5738 "Zend/zend_language_scanner.c"
> +#line 5982 "Zend/zend_language_scanner.c"
> yy582:
> YYDEBUG(582, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(583, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 855 "Zend/zend_language_scanner.l"
> +#line 1079 "Zend/zend_language_scanner.l"
> {
> return T_PAAMAYIM_NEKUDOTAYIM;
> }
> -#line 5748 "Zend/zend_language_scanner.c"
> +#line 5992 "Zend/zend_language_scanner.c"
> yy584:
> YYDEBUG(584, *YYCURSOR);
> ++YYCURSOR;
> @@ -5766,32 +6010,32 @@
> ++YYCURSOR;
> YYDEBUG(587, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1023 "Zend/zend_language_scanner.l"
> +#line 1247 "Zend/zend_language_scanner.l"
> {
> return T_MINUS_EQUAL;
> }
> -#line 5774 "Zend/zend_language_scanner.c"
> +#line 6018 "Zend/zend_language_scanner.c"
> yy588:
> YYDEBUG(588, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(589, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 991 "Zend/zend_language_scanner.l"
> +#line 1215 "Zend/zend_language_scanner.l"
> {
> return T_DEC;
> }
> -#line 5784 "Zend/zend_language_scanner.c"
> +#line 6028 "Zend/zend_language_scanner.c"
> yy590:
> YYDEBUG(590, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(591, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 825 "Zend/zend_language_scanner.l"
> +#line 1049 "Zend/zend_language_scanner.l"
> {
> yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
> return T_OBJECT_OPERATOR;
> }
> -#line 5795 "Zend/zend_language_scanner.c"
> +#line 6039 "Zend/zend_language_scanner.c"
> yy592:
> YYDEBUG(592, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -5836,11 +6080,11 @@
> }
> YYDEBUG(598, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 967 "Zend/zend_language_scanner.l"
> +#line 1191 "Zend/zend_language_scanner.l"
> {
> return T_PUBLIC;
> }
> -#line 5844 "Zend/zend_language_scanner.c"
> +#line 6088 "Zend/zend_language_scanner.c"
> yy599:
> YYDEBUG(599, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -5895,11 +6139,11 @@
> }
> YYDEBUG(607, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 963 "Zend/zend_language_scanner.l"
> +#line 1187 "Zend/zend_language_scanner.l"
> {
> return T_PROTECTED;
> }
> -#line 5903 "Zend/zend_language_scanner.c"
> +#line 6147 "Zend/zend_language_scanner.c"
> yy608:
> YYDEBUG(608, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -5929,11 +6173,11 @@
> }
> YYDEBUG(613, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 959 "Zend/zend_language_scanner.l"
> +#line 1183 "Zend/zend_language_scanner.l"
> {
> return T_PRIVATE;
> }
> -#line 5937 "Zend/zend_language_scanner.c"
> +#line 6181 "Zend/zend_language_scanner.c"
> yy614:
> YYDEBUG(614, *YYCURSOR);
> ++YYCURSOR;
> @@ -5942,11 +6186,11 @@
> }
> YYDEBUG(615, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 805 "Zend/zend_language_scanner.l"
> +#line 1029 "Zend/zend_language_scanner.l"
> {
> return T_PRINT;
> }
> -#line 5950 "Zend/zend_language_scanner.c"
> +#line 6194 "Zend/zend_language_scanner.c"
> yy616:
> YYDEBUG(616, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -5971,11 +6215,11 @@
> }
> YYDEBUG(620, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 797 "Zend/zend_language_scanner.l"
> +#line 1021 "Zend/zend_language_scanner.l"
> {
> return T_GOTO;
> }
> -#line 5979 "Zend/zend_language_scanner.c"
> +#line 6223 "Zend/zend_language_scanner.c"
> yy621:
> YYDEBUG(621, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -5999,11 +6243,11 @@
> }
> YYDEBUG(625, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 931 "Zend/zend_language_scanner.l"
> +#line 1155 "Zend/zend_language_scanner.l"
> {
> return T_GLOBAL;
> }
> -#line 6007 "Zend/zend_language_scanner.c"
> +#line 6251 "Zend/zend_language_scanner.c"
> yy626:
> YYDEBUG(626, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -6037,11 +6281,11 @@
> }
> YYDEBUG(632, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 789 "Zend/zend_language_scanner.l"
> +#line 1013 "Zend/zend_language_scanner.l"
> {
> return T_BREAK;
> }
> -#line 6045 "Zend/zend_language_scanner.c"
> +#line 6289 "Zend/zend_language_scanner.c"
> yy633:
> YYDEBUG(633, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -6081,11 +6325,11 @@
> }
> YYDEBUG(640, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 773 "Zend/zend_language_scanner.l"
> +#line 997 "Zend/zend_language_scanner.l"
> {
> return T_SWITCH;
> }
> -#line 6089 "Zend/zend_language_scanner.c"
> +#line 6333 "Zend/zend_language_scanner.c"
> yy641:
> YYDEBUG(641, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -6109,11 +6353,11 @@
> }
> YYDEBUG(645, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 947 "Zend/zend_language_scanner.l"
> +#line 1171 "Zend/zend_language_scanner.l"
> {
> return T_STATIC;
> }
> -#line 6117 "Zend/zend_language_scanner.c"
> +#line 6361 "Zend/zend_language_scanner.c"
> yy646:
> YYDEBUG(646, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -6140,11 +6384,11 @@
> }
> YYDEBUG(650, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 769 "Zend/zend_language_scanner.l"
> +#line 993 "Zend/zend_language_scanner.l"
> {
> return T_AS;
> }
> -#line 6148 "Zend/zend_language_scanner.c"
> +#line 6392 "Zend/zend_language_scanner.c"
> yy651:
> YYDEBUG(651, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -6163,11 +6407,11 @@
> }
> YYDEBUG(654, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 983 "Zend/zend_language_scanner.l"
> +#line 1207 "Zend/zend_language_scanner.l"
> {
> return T_ARRAY;
> }
> -#line 6171 "Zend/zend_language_scanner.c"
> +#line 6415 "Zend/zend_language_scanner.c"
> yy655:
> YYDEBUG(655, *YYCURSOR);
> ++YYCURSOR;
> @@ -6176,11 +6420,11 @@
> }
> YYDEBUG(656, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1075 "Zend/zend_language_scanner.l"
> +#line 1299 "Zend/zend_language_scanner.l"
> {
> return T_LOGICAL_AND;
> }
> -#line 6184 "Zend/zend_language_scanner.c"
> +#line 6428 "Zend/zend_language_scanner.c"
> yy657:
> YYDEBUG(657, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -6214,11 +6458,11 @@
> }
> YYDEBUG(663, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 951 "Zend/zend_language_scanner.l"
> +#line 1175 "Zend/zend_language_scanner.l"
> {
> return T_ABSTRACT;
> }
> -#line 6222 "Zend/zend_language_scanner.c"
> +#line 6466 "Zend/zend_language_scanner.c"
> yy664:
> YYDEBUG(664, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -6242,11 +6486,11 @@
> }
> YYDEBUG(668, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 729 "Zend/zend_language_scanner.l"
> +#line 953 "Zend/zend_language_scanner.l"
> {
> return T_WHILE;
> }
> -#line 6250 "Zend/zend_language_scanner.c"
> +#line 6494 "Zend/zend_language_scanner.c"
> yy669:
> YYDEBUG(669, *YYCURSOR);
> ++YYCURSOR;
> @@ -6255,11 +6499,11 @@
> }
> YYDEBUG(670, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 713 "Zend/zend_language_scanner.l"
> +#line 937 "Zend/zend_language_scanner.l"
> {
> return T_IF;
> }
> -#line 6263 "Zend/zend_language_scanner.c"
> +#line 6507 "Zend/zend_language_scanner.c"
> yy671:
> YYDEBUG(671, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -6311,11 +6555,11 @@
> }
> YYDEBUG(677, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 935 "Zend/zend_language_scanner.l"
> +#line 1159 "Zend/zend_language_scanner.l"
> {
> return T_ISSET;
> }
> -#line 6319 "Zend/zend_language_scanner.c"
> +#line 6563 "Zend/zend_language_scanner.c"
> yy678:
> YYDEBUG(678, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -6369,11 +6613,11 @@
> yy685:
> YYDEBUG(685, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 907 "Zend/zend_language_scanner.l"
> +#line 1131 "Zend/zend_language_scanner.l"
> {
> return T_INCLUDE;
> }
> -#line 6377 "Zend/zend_language_scanner.c"
> +#line 6621 "Zend/zend_language_scanner.c"
> yy686:
> YYDEBUG(686, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -6402,11 +6646,11 @@
> }
> YYDEBUG(691, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 911 "Zend/zend_language_scanner.l"
> +#line 1135 "Zend/zend_language_scanner.l"
> {
> return T_INCLUDE_ONCE;
> }
> -#line 6410 "Zend/zend_language_scanner.c"
> +#line 6654 "Zend/zend_language_scanner.c"
> yy692:
> YYDEBUG(692, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -6440,11 +6684,11 @@
> }
> YYDEBUG(698, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 813 "Zend/zend_language_scanner.l"
> +#line 1037 "Zend/zend_language_scanner.l"
> {
> return T_INTERFACE;
> }
> -#line 6448 "Zend/zend_language_scanner.c"
> +#line 6692 "Zend/zend_language_scanner.c"
> yy699:
> YYDEBUG(699, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -6483,11 +6727,11 @@
> }
> YYDEBUG(706, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 765 "Zend/zend_language_scanner.l"
> +#line 989 "Zend/zend_language_scanner.l"
> {
> return T_INSTANCEOF;
> }
> -#line 6491 "Zend/zend_language_scanner.c"
> +#line 6735 "Zend/zend_language_scanner.c"
> yy707:
> YYDEBUG(707, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -6531,11 +6775,11 @@
> }
> YYDEBUG(715, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 821 "Zend/zend_language_scanner.l"
> +#line 1045 "Zend/zend_language_scanner.l"
> {
> return T_IMPLEMENTS;
> }
> -#line 6539 "Zend/zend_language_scanner.c"
> +#line 6783 "Zend/zend_language_scanner.c"
> yy716:
> YYDEBUG(716, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -6555,11 +6799,11 @@
> }
> YYDEBUG(719, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 701 "Zend/zend_language_scanner.l"
> +#line 925 "Zend/zend_language_scanner.l"
> {
> return T_TRY;
> }
> -#line 6563 "Zend/zend_language_scanner.c"
> +#line 6807 "Zend/zend_language_scanner.c"
> yy720:
> YYDEBUG(720, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -6578,11 +6822,11 @@
> }
> YYDEBUG(723, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 709 "Zend/zend_language_scanner.l"
> +#line 933 "Zend/zend_language_scanner.l"
> {
> return T_THROW;
> }
> -#line 6586 "Zend/zend_language_scanner.c"
> +#line 6830 "Zend/zend_language_scanner.c"
> yy724:
> YYDEBUG(724, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -6643,11 +6887,11 @@
> yy731:
> YYDEBUG(731, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 915 "Zend/zend_language_scanner.l"
> +#line 1139 "Zend/zend_language_scanner.l"
> {
> return T_REQUIRE;
> }
> -#line 6651 "Zend/zend_language_scanner.c"
> +#line 6895 "Zend/zend_language_scanner.c"
> yy732:
> YYDEBUG(732, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -6676,11 +6920,11 @@
> }
> YYDEBUG(737, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 919 "Zend/zend_language_scanner.l"
> +#line 1143 "Zend/zend_language_scanner.l"
> {
> return T_REQUIRE_ONCE;
> }
> -#line 6684 "Zend/zend_language_scanner.c"
> +#line 6928 "Zend/zend_language_scanner.c"
> yy738:
> YYDEBUG(738, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -6699,11 +6943,11 @@
> }
> YYDEBUG(741, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 697 "Zend/zend_language_scanner.l"
> +#line 921 "Zend/zend_language_scanner.l"
> {
> return T_RETURN;
> }
> -#line 6707 "Zend/zend_language_scanner.c"
> +#line 6951 "Zend/zend_language_scanner.c"
> yy742:
> YYDEBUG(742, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -6784,11 +7028,11 @@
> }
> YYDEBUG(752, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 793 "Zend/zend_language_scanner.l"
> +#line 1017 "Zend/zend_language_scanner.l"
> {
> return T_CONTINUE;
> }
> -#line 6792 "Zend/zend_language_scanner.c"
> +#line 7036 "Zend/zend_language_scanner.c"
> yy753:
> YYDEBUG(753, *YYCURSOR);
> ++YYCURSOR;
> @@ -6797,11 +7041,11 @@
> }
> YYDEBUG(754, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 693 "Zend/zend_language_scanner.l"
> +#line 917 "Zend/zend_language_scanner.l"
> {
> return T_CONST;
> }
> -#line 6805 "Zend/zend_language_scanner.c"
> +#line 7049 "Zend/zend_language_scanner.c"
> yy755:
> YYDEBUG(755, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -6826,11 +7070,11 @@
> }
> YYDEBUG(759, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 863 "Zend/zend_language_scanner.l"
> +#line 1087 "Zend/zend_language_scanner.l"
> {
> return T_CLONE;
> }
> -#line 6834 "Zend/zend_language_scanner.c"
> +#line 7078 "Zend/zend_language_scanner.c"
> yy760:
> YYDEBUG(760, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -6844,11 +7088,11 @@
> }
> YYDEBUG(762, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 809 "Zend/zend_language_scanner.l"
> +#line 1033 "Zend/zend_language_scanner.l"
> {
> return T_CLASS;
> }
> -#line 6852 "Zend/zend_language_scanner.c"
> +#line 7096 "Zend/zend_language_scanner.c"
> yy763:
> YYDEBUG(763, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -6868,11 +7112,11 @@
> }
> YYDEBUG(766, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 781 "Zend/zend_language_scanner.l"
> +#line 1005 "Zend/zend_language_scanner.l"
> {
> return T_CASE;
> }
> -#line 6876 "Zend/zend_language_scanner.c"
> +#line 7120 "Zend/zend_language_scanner.c"
> yy767:
> YYDEBUG(767, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -6886,11 +7130,11 @@
> }
> YYDEBUG(769, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 705 "Zend/zend_language_scanner.l"
> +#line 929 "Zend/zend_language_scanner.l"
> {
> return T_CATCH;
> }
> -#line 6894 "Zend/zend_language_scanner.c"
> +#line 7138 "Zend/zend_language_scanner.c"
> yy770:
> YYDEBUG(770, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -6941,11 +7185,11 @@
> }
> YYDEBUG(779, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 689 "Zend/zend_language_scanner.l"
> +#line 913 "Zend/zend_language_scanner.l"
> {
> return T_FUNCTION;
> }
> -#line 6949 "Zend/zend_language_scanner.c"
> +#line 7193 "Zend/zend_language_scanner.c"
> yy780:
> YYDEBUG(780, *YYCURSOR);
> ++YYCURSOR;
> @@ -6969,11 +7213,11 @@
> yy781:
> YYDEBUG(781, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 741 "Zend/zend_language_scanner.l"
> +#line 965 "Zend/zend_language_scanner.l"
> {
> return T_FOR;
> }
> -#line 6977 "Zend/zend_language_scanner.c"
> +#line 7221 "Zend/zend_language_scanner.c"
> yy782:
> YYDEBUG(782, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -6997,11 +7241,11 @@
> }
> YYDEBUG(786, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 749 "Zend/zend_language_scanner.l"
> +#line 973 "Zend/zend_language_scanner.l"
> {
> return T_FOREACH;
> }
> -#line 7005 "Zend/zend_language_scanner.c"
> +#line 7249 "Zend/zend_language_scanner.c"
> yy787:
> YYDEBUG(787, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -7020,11 +7264,11 @@
> }
> YYDEBUG(790, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 955 "Zend/zend_language_scanner.l"
> +#line 1179 "Zend/zend_language_scanner.l"
> {
> return T_FINAL;
> }
> -#line 7028 "Zend/zend_language_scanner.c"
> +#line 7272 "Zend/zend_language_scanner.c"
> yy791:
> YYDEBUG(791, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -7055,11 +7299,11 @@
> }
> YYDEBUG(794, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 737 "Zend/zend_language_scanner.l"
> +#line 961 "Zend/zend_language_scanner.l"
> {
> return T_DO;
> }
> -#line 7063 "Zend/zend_language_scanner.c"
> +#line 7307 "Zend/zend_language_scanner.c"
> yy795:
> YYDEBUG(795, *YYCURSOR);
> ++YYCURSOR;
> @@ -7068,11 +7312,11 @@
> }
> YYDEBUG(796, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 685 "Zend/zend_language_scanner.l"
> +#line 909 "Zend/zend_language_scanner.l"
> {
> return T_EXIT;
> }
> -#line 7076 "Zend/zend_language_scanner.c"
> +#line 7320 "Zend/zend_language_scanner.c"
> yy797:
> YYDEBUG(797, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -7107,11 +7351,11 @@
> }
> YYDEBUG(803, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 785 "Zend/zend_language_scanner.l"
> +#line 1009 "Zend/zend_language_scanner.l"
> {
> return T_DEFAULT;
> }
> -#line 7115 "Zend/zend_language_scanner.c"
> +#line 7359 "Zend/zend_language_scanner.c"
> yy804:
> YYDEBUG(804, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -7135,11 +7379,11 @@
> }
> YYDEBUG(808, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 757 "Zend/zend_language_scanner.l"
> +#line 981 "Zend/zend_language_scanner.l"
> {
> return T_DECLARE;
> }
> -#line 7143 "Zend/zend_language_scanner.c"
> +#line 7387 "Zend/zend_language_scanner.c"
> yy809:
> YYDEBUG(809, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -7219,11 +7463,11 @@
> }
> YYDEBUG(821, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 817 "Zend/zend_language_scanner.l"
> +#line 1041 "Zend/zend_language_scanner.l"
> {
> return T_EXTENDS;
> }
> -#line 7227 "Zend/zend_language_scanner.c"
> +#line 7471 "Zend/zend_language_scanner.c"
> yy822:
> YYDEBUG(822, *YYCURSOR);
> ++YYCURSOR;
> @@ -7232,11 +7476,11 @@
> }
> YYDEBUG(823, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 681 "Zend/zend_language_scanner.l"
> +#line 905 "Zend/zend_language_scanner.l"
> {
> return T_EXIT;
> }
> -#line 7240 "Zend/zend_language_scanner.c"
> +#line 7484 "Zend/zend_language_scanner.c"
> yy824:
> YYDEBUG(824, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -7250,11 +7494,11 @@
> }
> YYDEBUG(826, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 903 "Zend/zend_language_scanner.l"
> +#line 1127 "Zend/zend_language_scanner.l"
> {
> return T_EVAL;
> }
> -#line 7258 "Zend/zend_language_scanner.c"
> +#line 7502 "Zend/zend_language_scanner.c"
> yy827:
> YYDEBUG(827, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -7324,11 +7568,11 @@
> }
> YYDEBUG(837, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 733 "Zend/zend_language_scanner.l"
> +#line 957 "Zend/zend_language_scanner.l"
> {
> return T_ENDWHILE;
> }
> -#line 7332 "Zend/zend_language_scanner.c"
> +#line 7576 "Zend/zend_language_scanner.c"
> yy838:
> YYDEBUG(838, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -7357,11 +7601,11 @@
> }
> YYDEBUG(843, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 777 "Zend/zend_language_scanner.l"
> +#line 1001 "Zend/zend_language_scanner.l"
> {
> return T_ENDSWITCH;
> }
> -#line 7365 "Zend/zend_language_scanner.c"
> +#line 7609 "Zend/zend_language_scanner.c"
> yy844:
> YYDEBUG(844, *YYCURSOR);
> ++YYCURSOR;
> @@ -7370,11 +7614,11 @@
> }
> YYDEBUG(845, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 721 "Zend/zend_language_scanner.l"
> +#line 945 "Zend/zend_language_scanner.l"
> {
> return T_ENDIF;
> }
> -#line 7378 "Zend/zend_language_scanner.c"
> +#line 7622 "Zend/zend_language_scanner.c"
> yy846:
> YYDEBUG(846, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -7403,11 +7647,11 @@
> yy848:
> YYDEBUG(848, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 745 "Zend/zend_language_scanner.l"
> +#line 969 "Zend/zend_language_scanner.l"
> {
> return T_ENDFOR;
> }
> -#line 7411 "Zend/zend_language_scanner.c"
> +#line 7655 "Zend/zend_language_scanner.c"
> yy849:
> YYDEBUG(849, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -7431,11 +7675,11 @@
> }
> YYDEBUG(853, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 753 "Zend/zend_language_scanner.l"
> +#line 977 "Zend/zend_language_scanner.l"
> {
> return T_ENDFOREACH;
> }
> -#line 7439 "Zend/zend_language_scanner.c"
> +#line 7683 "Zend/zend_language_scanner.c"
> yy854:
> YYDEBUG(854, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -7469,11 +7713,11 @@
> }
> YYDEBUG(860, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 761 "Zend/zend_language_scanner.l"
> +#line 985 "Zend/zend_language_scanner.l"
> {
> return T_ENDDECLARE;
> }
> -#line 7477 "Zend/zend_language_scanner.c"
> +#line 7721 "Zend/zend_language_scanner.c"
> yy861:
> YYDEBUG(861, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -7492,11 +7736,11 @@
> }
> YYDEBUG(864, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 939 "Zend/zend_language_scanner.l"
> +#line 1163 "Zend/zend_language_scanner.l"
> {
> return T_EMPTY;
> }
> -#line 7500 "Zend/zend_language_scanner.c"
> +#line 7744 "Zend/zend_language_scanner.c"
> yy865:
> YYDEBUG(865, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -7525,11 +7769,11 @@
> yy867:
> YYDEBUG(867, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 725 "Zend/zend_language_scanner.l"
> +#line 949 "Zend/zend_language_scanner.l"
> {
> return T_ELSE;
> }
> -#line 7533 "Zend/zend_language_scanner.c"
> +#line 7777 "Zend/zend_language_scanner.c"
> yy868:
> YYDEBUG(868, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -7543,11 +7787,11 @@
> }
> YYDEBUG(870, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 717 "Zend/zend_language_scanner.l"
> +#line 941 "Zend/zend_language_scanner.l"
> {
> return T_ELSEIF;
> }
> -#line 7551 "Zend/zend_language_scanner.c"
> +#line 7795 "Zend/zend_language_scanner.c"
> yy871:
> YYDEBUG(871, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -7561,11 +7805,11 @@
> }
> YYDEBUG(873, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 801 "Zend/zend_language_scanner.l"
> +#line 1025 "Zend/zend_language_scanner.l"
> {
> return T_ECHO;
> }
> -#line 7569 "Zend/zend_language_scanner.c"
> +#line 7813 "Zend/zend_language_scanner.c"
> }
> /* *********************************** */
> yyc_ST_LOOKING_FOR_PROPERTY:
> @@ -7638,7 +7882,7 @@
> yy877:
> YYDEBUG(877, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 830 "Zend/zend_language_scanner.l"
> +#line 1054 "Zend/zend_language_scanner.l"
> {
> zendlval->value.str.val = yytext; /* no copying - intentional */
> zendlval->value.str.len = yyleng;
> @@ -7646,7 +7890,7 @@
> HANDLE_NEWLINES(yytext, yyleng);
> return T_WHITESPACE;
> }
> -#line 7650 "Zend/zend_language_scanner.c"
> +#line 7894 "Zend/zend_language_scanner.c"
> yy878:
> YYDEBUG(878, *YYCURSOR);
> ++YYCURSOR;
> @@ -7654,13 +7898,13 @@
> yy879:
> YYDEBUG(879, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 849 "Zend/zend_language_scanner.l"
> +#line 1073 "Zend/zend_language_scanner.l"
> {
> yyless(0);
> yy_pop_state(TSRMLS_C);
> goto restart;
> }
> -#line 7664 "Zend/zend_language_scanner.c"
> +#line 7908 "Zend/zend_language_scanner.c"
> yy880:
> YYDEBUG(880, *YYCURSOR);
> ++YYCURSOR;
> @@ -7669,14 +7913,14 @@
> yy881:
> YYDEBUG(881, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 842 "Zend/zend_language_scanner.l"
> +#line 1066 "Zend/zend_language_scanner.l"
> {
> yy_pop_state(TSRMLS_C);
> zend_copy_value(zendlval, yytext, yyleng);
> zendlval->type = IS_STRING;
> return T_STRING;
> }
> -#line 7680 "Zend/zend_language_scanner.c"
> +#line 7924 "Zend/zend_language_scanner.c"
> yy882:
> YYDEBUG(882, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -7697,11 +7941,11 @@
> ++YYCURSOR;
> YYDEBUG(886, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 838 "Zend/zend_language_scanner.l"
> +#line 1062 "Zend/zend_language_scanner.l"
> {
> return T_OBJECT_OPERATOR;
> }
> -#line 7705 "Zend/zend_language_scanner.c"
> +#line 7949 "Zend/zend_language_scanner.c"
> yy887:
> YYDEBUG(887, *YYCURSOR);
> ++YYCURSOR;
> @@ -7771,7 +8015,7 @@
> yy892:
> YYDEBUG(892, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1117 "Zend/zend_language_scanner.l"
> +#line 1341 "Zend/zend_language_scanner.l"
> {
> zend_copy_value(zendlval, yytext, yyleng);
> zendlval->type = IS_STRING;
> @@ -7779,20 +8023,20 @@
> yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
> return T_STRING_VARNAME;
> }
> -#line 7783 "Zend/zend_language_scanner.c"
> +#line 8027 "Zend/zend_language_scanner.c"
> yy893:
> YYDEBUG(893, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(894, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1126 "Zend/zend_language_scanner.l"
> +#line 1350 "Zend/zend_language_scanner.l"
> {
> yyless(0);
> yy_pop_state(TSRMLS_C);
> yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
> goto restart;
> }
> -#line 7796 "Zend/zend_language_scanner.c"
> +#line 8040 "Zend/zend_language_scanner.c"
> yy895:
> YYDEBUG(895, *YYCURSOR);
> ++YYCURSOR;
> @@ -8254,7 +8498,7 @@
> ++YYCURSOR;
> YYDEBUG(933, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1864 "Zend/zend_language_scanner.l"
> +#line 2108 "Zend/zend_language_scanner.l"
> {
> char *end = yytext + yyleng - 1;
>
> @@ -8297,7 +8541,7 @@
> yymore();
> }
> }
> -#line 8301 "Zend/zend_language_scanner.c"
> +#line 8545 "Zend/zend_language_scanner.c"
> }
> /* *********************************** */
> yyc_ST_ONE_LINE_COMMENT:
> @@ -8354,11 +8598,11 @@
> yy937:
> YYDEBUG(937, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1491 "Zend/zend_language_scanner.l"
> +#line 1728 "Zend/zend_language_scanner.l"
> {
> yymore();
> }
> -#line 8362 "Zend/zend_language_scanner.c"
> +#line 8606 "Zend/zend_language_scanner.c"
> yy938:
> YYDEBUG(938, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -8381,7 +8625,7 @@
> yy942:
> YYDEBUG(942, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1495 "Zend/zend_language_scanner.l"
> +#line 1732 "Zend/zend_language_scanner.l"
> {
> switch (yytext[yyleng-1]) {
> case '?': case '%': case '>':
> @@ -8399,7 +8643,7 @@
> return T_COMMENT;
> }
> }
> -#line 8403 "Zend/zend_language_scanner.c"
> +#line 8647 "Zend/zend_language_scanner.c"
> yy943:
> YYDEBUG(943, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -8412,7 +8656,7 @@
> ++YYCURSOR;
> YYDEBUG(946, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1513 "Zend/zend_language_scanner.l"
> +#line 1750 "Zend/zend_language_scanner.l"
> {
> zendlval->value.str.val = yytext; /* no copying - intentional */
> zendlval->value.str.len = yyleng;
> @@ -8421,7 +8665,7 @@
> CG(zend_lineno)++;
> return T_COMMENT;
> }
> -#line 8425 "Zend/zend_language_scanner.c"
> +#line 8669 "Zend/zend_language_scanner.c"
> yy947:
> YYDEBUG(947, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -8431,7 +8675,7 @@
> ++YYCURSOR;
> YYDEBUG(949, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1522 "Zend/zend_language_scanner.l"
> +#line 1759 "Zend/zend_language_scanner.l"
> {
> if (CG(asp_tags) || yytext[yyleng-2] != '%') { /* asp comment? */
> zendlval->value.str.val = yytext; /* no copying - intentional */
> @@ -8444,7 +8688,7 @@
> yymore();
> }
> }
> -#line 8448 "Zend/zend_language_scanner.c"
> +#line 8692 "Zend/zend_language_scanner.c"
> }
> /* *********************************** */
> yyc_ST_START_HEREDOC:
> @@ -8501,13 +8745,13 @@
> yy953:
> YYDEBUG(953, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1678 "Zend/zend_language_scanner.l"
> +#line 1922 "Zend/zend_language_scanner.l"
> {
> yyless(0);
> BEGIN(ST_HEREDOC);
> goto restart;
> }
> -#line 8511 "Zend/zend_language_scanner.c"
> +#line 8755 "Zend/zend_language_scanner.c"
> yy954:
> YYDEBUG(954, *YYCURSOR);
> yyaccept = 0;
> @@ -8552,7 +8796,7 @@
> ++YYCURSOR;
> YYDEBUG(960, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1684 "Zend/zend_language_scanner.l"
> +#line 1928 "Zend/zend_language_scanner.l"
> {
> int label_len = yyleng - 1;
>
> @@ -8574,7 +8818,7 @@
> yymore();
> }
> }
> -#line 8578 "Zend/zend_language_scanner.c"
> +#line 8822 "Zend/zend_language_scanner.c"
> }
> /* *********************************** */
> yyc_ST_START_NOWDOC:
> @@ -8631,13 +8875,13 @@
> yy964:
> YYDEBUG(964, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1838 "Zend/zend_language_scanner.l"
> +#line 2082 "Zend/zend_language_scanner.l"
> {
> yyless(0);
> BEGIN(ST_NOWDOC);
> goto restart;
> }
> -#line 8641 "Zend/zend_language_scanner.c"
> +#line 8885 "Zend/zend_language_scanner.c"
> yy965:
> YYDEBUG(965, *YYCURSOR);
> yyaccept = 0;
> @@ -8682,7 +8926,7 @@
> ++YYCURSOR;
> YYDEBUG(971, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1844 "Zend/zend_language_scanner.l"
> +#line 2088 "Zend/zend_language_scanner.l"
> {
> int label_len = yyleng - 1;
>
> @@ -8702,7 +8946,7 @@
> yymore();
> }
> }
> -#line 8706 "Zend/zend_language_scanner.c"
> +#line 8950 "Zend/zend_language_scanner.c"
> }
> /* *********************************** */
> yyc_ST_VAR_OFFSET:
> @@ -8803,7 +9047,7 @@
> yy975:
> YYDEBUG(975, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1176 "Zend/zend_language_scanner.l"
> +#line 1400 "Zend/zend_language_scanner.l"
> { /* Offset could be treated as a long */
> if (yyleng < MAX_LENGTH_OF_LONG - 1 || (yyleng ==
> MAX_LENGTH_OF_LONG - 1 && strcmp(yytext, long_min_digits) < 0)) {
> zendlval->value.lval = strtol(yytext, NULL, 10);
> @@ -8815,7 +9059,7 @@
> }
> return T_NUM_STRING;
> }
> -#line 8819 "Zend/zend_language_scanner.c"
> +#line 9063 "Zend/zend_language_scanner.c"
> yy976:
> YYDEBUG(976, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -8835,23 +9079,23 @@
> yy978:
> YYDEBUG(978, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1466 "Zend/zend_language_scanner.l"
> +#line 1703 "Zend/zend_language_scanner.l"
> {
> /* Only '[' can be valid, but returning other tokens will allow a more explicit parse error */
> return yytext[0];
> }
> -#line 8844 "Zend/zend_language_scanner.c"
> +#line 9088 "Zend/zend_language_scanner.c"
> yy979:
> YYDEBUG(979, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(980, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1461 "Zend/zend_language_scanner.l"
> +#line 1698 "Zend/zend_language_scanner.l"
> {
> yy_pop_state(TSRMLS_C);
> return ']';
> }
> -#line 8855 "Zend/zend_language_scanner.c"
> +#line 9099 "Zend/zend_language_scanner.c"
> yy981:
> YYDEBUG(981, *YYCURSOR);
> yych = *++YYCURSOR;
> @@ -8861,7 +9105,7 @@
> ++YYCURSOR;
> YYDEBUG(983, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1471 "Zend/zend_language_scanner.l"
> +#line 1708 "Zend/zend_language_scanner.l"
> {
> /* Invalid rule to return a more explicit parse error with proper line number */
> yyless(0);
> @@ -8869,7 +9113,7 @@
> ZVAL_EMPTY_STRING(zendlval); /* Empty since it won't be used */
> return T_ENCAPSED_AND_WHITESPACE;
> }
> -#line 8873 "Zend/zend_language_scanner.c"
> +#line 9117 "Zend/zend_language_scanner.c"
> yy984:
> YYDEBUG(984, *YYCURSOR);
> ++YYCURSOR;
> @@ -8878,24 +9122,24 @@
> yy985:
> YYDEBUG(985, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1479 "Zend/zend_language_scanner.l"
> +#line 1716 "Zend/zend_language_scanner.l"
> {
> zend_copy_value(zendlval, yytext, yyleng);
> zendlval->type = IS_STRING;
> return T_STRING;
> }
> -#line 8888 "Zend/zend_language_scanner.c"
> +#line 9132 "Zend/zend_language_scanner.c"
> yy986:
> YYDEBUG(986, *YYCURSOR);
> ++YYCURSOR;
> YYDEBUG(987, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1930 "Zend/zend_language_scanner.l"
> +#line 2174 "Zend/zend_language_scanner.l"
> {
> zend_error(E_COMPILE_WARNING,"Unexpected character in input:
> '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
> goto restart;
> }
> -#line 8899 "Zend/zend_language_scanner.c"
> +#line 9143 "Zend/zend_language_scanner.c"
> yy988:
> YYDEBUG(988, *YYCURSOR);
> ++YYCURSOR;
> @@ -8931,13 +9175,13 @@
> yy992:
> YYDEBUG(992, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1455 "Zend/zend_language_scanner.l"
> +#line 1692 "Zend/zend_language_scanner.l"
> {
> zend_copy_value(zendlval, (yytext+1), (yyleng-1));
> zendlval->type = IS_STRING;
> return T_VARIABLE;
> }
> -#line 8941 "Zend/zend_language_scanner.c"
> +#line 9185 "Zend/zend_language_scanner.c"
> yy993:
> YYDEBUG(993, *YYCURSOR);
> ++YYCURSOR;
> @@ -8969,14 +9213,14 @@
> yy999:
> YYDEBUG(999, *YYCURSOR);
> yyleng = YYCURSOR - SCNG(yy_text);
> -#line 1188 "Zend/zend_language_scanner.l"
> +#line 1412 "Zend/zend_language_scanner.l"
> { /* Offset must be treated as a string */
> zendlval->value.str.val = (char *)estrndup(yytext, yyleng);
> zendlval->value.str.len = yyleng;
> zendlval->type = IS_STRING;
> return T_NUM_STRING;
> }
> -#line 8980 "Zend/zend_language_scanner.c"
> +#line 9224 "Zend/zend_language_scanner.c"
> yy1000:
> YYDEBUG(1000, *YYCURSOR);
> ++YYCURSOR;
> @@ -8989,6 +9233,6 @@
> goto yy999;
> }
> }
> -#line 1935 "Zend/zend_language_scanner.l"
> +#line 2179 "Zend/zend_language_scanner.l"
>
> }
> http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_language_scanner.h?r1=1.19.2.1.2.1.2.2&r2=1.19.2.1.2.1.2.3&diff_format=u
> Index: ZendEngine2/zend_language_scanner.h
> diff -u ZendEngine2/zend_language_scanner.h:1.19.2.1.2.1.2.2
> ZendEngine2/zend_language_scanner.h:1.19.2.1.2.1.2.3
> --- ZendEngine2/zend_language_scanner.h:1.19.2.1.2.1.2.2 Sun Mar 16 21:05:33 2008
> +++ ZendEngine2/zend_language_scanner.h Sun Jun 29 08:21:35 2008
> @@ -17,7 +17,7 @@
>
> +----------------------------------------------------------------------+
> */
>
> -/* $Id: zend_language_scanner.h,v 1.19.2.1.2.1.2.2 2008/03/16 21:05:33 helly Exp $ */
> +/* $Id: zend_language_scanner.h,v 1.19.2.1.2.1.2.3 2008/06/29 08:21:35 hirokawa Exp $ */
>
> #ifndef ZEND_SCANNER_H
> #define ZEND_SCANNER_H
> @@ -35,6 +35,22 @@
> zend_file_handle *in;
> uint lineno;
> char *filename;
> +
> +#ifdef ZEND_MULTIBYTE
> + /* original (unfiltered) script */
> + char *script_org;
> + int script_org_size;
> +
> + /* filtered script */
> + char *script_filtered;
> + int script_filtered_size;
> +
> + /* input/ouput filters */
> + zend_encoding_filter input_filter;
> + zend_encoding_filter output_filter;
> + zend_encoding *script_encoding;
> + zend_encoding *internal_encoding;
> +#endif /* ZEND_MULTIBYTE */
> } zend_lex_state;
>
>
> http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_language_scanner.l?r1=1.131.2.11.2.13.2.17&r2=1.131.2.11.2.13.2.18&diff_format=u
> Index: ZendEngine2/zend_language_scanner.l
> diff -u ZendEngine2/zend_language_scanner.l:1.131.2.11.2.13.2.17
> ZendEngine2/zend_language_scanner.l:1.131.2.11.2.13.2.18
> --- ZendEngine2/zend_language_scanner.l:1.131.2.11.2.13.2.17 Sat May 10 09:17:29 2008
> +++ ZendEngine2/zend_language_scanner.l Sun Jun 29 08:21:35 2008
> @@ -21,7 +21,7 @@
>
> +----------------------------------------------------------------------+
> */
>
> -/* $Id: zend_language_scanner.l,v 1.131.2.11.2.13.2.17 2008/05/10 09:17:29 mattwil Exp $ */
> +/* $Id: zend_language_scanner.l,v 1.131.2.11.2.13.2.18 2008/06/29 08:21:35 hirokawa Exp $ */
>
> #if 0
> # define YYDEBUG(s, c) printf("state: %d char: %c\n", s, c)
> @@ -180,6 +180,17 @@
> lex_state->yy_state = YYSTATE;
> lex_state->filename = zend_get_compiled_filename(TSRMLS_C);
> lex_state->lineno = CG(zend_lineno);
> +
> +#ifdef ZEND_MULTIBYTE
> + lex_state->script_org = SCNG(script_org);
> + lex_state->script_org_size = SCNG(script_org_size);
> + lex_state->script_filtered = SCNG(script_filtered);
> + lex_state->script_filtered_size = SCNG(script_filtered_size);
> + lex_state->input_filter = SCNG(input_filter);
> + lex_state->output_filter = SCNG(output_filter);
> + lex_state->script_encoding = SCNG(script_encoding);
> + lex_state->internal_encoding = SCNG(internal_encoding);
> +#endif /* ZEND_MULTIBYTE */
> }
>
> ZEND_API void zend_restore_lexical_state(zend_lex_state *lex_state TSRMLS_DC)
> @@ -198,6 +209,24 @@
> YYSETCONDITION(lex_state->yy_state);
> CG(zend_lineno) = lex_state->lineno;
> zend_restore_compiled_filename(lex_state->filename TSRMLS_CC);
> +#ifdef ZEND_MULTIBYTE
> + if (SCNG(script_org)) {
> + efree(SCNG(script_org));
> + SCNG(script_org) = NULL;
> + }
> + if (SCNG(script_filtered)) {
> + efree(SCNG(script_filtered));
> + SCNG(script_filtered) = NULL;
> + }
> + SCNG(script_org) = lex_state->script_org;
> + SCNG(script_org_size) = lex_state->script_org_size;
> + SCNG(script_filtered) = lex_state->script_filtered;
> + SCNG(script_filtered_size) = lex_state->script_filtered_size;
> + SCNG(input_filter) = lex_state->input_filter;
> + SCNG(output_filter) = lex_state->output_filter;
> + SCNG(script_encoding) = lex_state->script_encoding;
> + SCNG(internal_encoding) = lex_state->internal_encoding;
> +#endif /* ZEND_MULTIBYTE */
> }
>
> ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle TSRMLS_DC)
> @@ -232,8 +261,27 @@
> SCNG(yy_in) = file_handle;
>
> if (size != -1) {
> - /* TODO: For MULTIBYTE we need to do some clever re-encoding */
> +#ifdef ZEND_MULTIBYTE
> + if (zend_multibyte_read_script(buf, size TSRMLS_CC) != 0) {
> + return FAILURE;
> + }
> +
> + SCNG(yy_in) = NULL;
> +
> + zend_multibyte_set_filter(NULL TSRMLS_CC);
> +
> + if (!SCNG(input_filter)) {
> + SCNG(script_filtered) =
> (char*)emalloc(SCNG(script_org_size)+1);
> + memcpy(SCNG(script_filtered), SCNG(script_org), SCNG(script_org_size)+1);
> + SCNG(script_filtered_size) = SCNG(script_org_size);
> + } else {
> + SCNG(input_filter)(&SCNG(script_filtered),
> &SCNG(script_filtered_size), SCNG(script_org), SCNG(script_org_size) TSRMLS_CC);
> + }
> +
> + yy_scan_buffer(SCNG(script_filtered),
> SCNG(script_filtered_size) TSRMLS_CC);
> +#else /* !ZEND_MULTIBYTE */
> yy_scan_buffer(buf, size TSRMLS_CC);
> +#endif /* ZEND_MULTIBYTE */
> } else {
> zend_error_noreturn(E_COMPILE_ERROR, "zend_stream_mmap() failed");
> }
> @@ -370,8 +418,24 @@
>
> SCNG(yy_in)=NULL;
>
> - /* TODO: For MULTIBYTE we need to do some clever re-encoding */
> +#ifdef ZEND_MULTIBYTE
> + SCNG(script_org) = estrdup(str->value.str.val);
> + SCNG(script_org_size) = str->value.str.len;
> +
> + zend_multibyte_set_filter(CG(internal_encoding) TSRMLS_CC);
> +
> + if (!SCNG(input_filter)) {
> + SCNG(script_filtered) =
> (char*)emalloc(SCNG(script_org_size)+1);
> + memcpy(SCNG(script_filtered), SCNG(script_org), SCNG(script_org_size)+1);
> + SCNG(script_filtered_size) = SCNG(script_org_size);
> + } else {
> + SCNG(input_filter)(&SCNG(script_filtered),
> &SCNG(script_filtered_size), SCNG(script_org), SCNG(script_org_size) TSRMLS_CC);
> + }
> +
> + yy_scan_buffer(SCNG(script_filtered), SCNG(script_filtered_size) TSRMLS_CC);
> +#else /* !ZEND_MULTIBYTE */
> yy_scan_buffer(str->value.str.val, str->value.str.len TSRMLS_CC);
> +#endif /* ZEND_MULTIBYTE */
>
> zend_set_compiled_filename(filename TSRMLS_CC);
> CG(zend_lineno) = 1;
> @@ -422,6 +486,17 @@
> BEGIN(ST_IN_SCRIPTING);
> compiler_result = zendparse(TSRMLS_C);
>
> +#ifdef ZEND_MULTIBYTE
> + if (SCNG(script_org)) {
> + efree(SCNG(script_org));
> + SCNG(script_org) = NULL;
> + }
> + if (SCNG(script_filtered)) {
> + efree(SCNG(script_filtered));
> + SCNG(script_filtered) = NULL;
> + }
> +#endif /* ZEND_MULTIBYTE */
> +
> if (compiler_result==1) {
> CG(active_op_array) = original_active_op_array;
> CG(unclean_shutdown)=1;
> @@ -457,6 +532,16 @@
> return FAILURE;
> }
> zend_highlight(syntax_highlighter_ini TSRMLS_CC);
> +#ifdef ZEND_MULTIBYTE
> + if (SCNG(script_org)) {
> + efree(SCNG(script_org));
> + SCNG(script_org) = NULL;
> + }
> + if (SCNG(script_filtered)) {
> + efree(SCNG(script_filtered));
> + SCNG(script_filtered) = NULL;
> + }
> +#endif /* ZEND_MULTIBYTE */
> zend_destroy_file_handle(&file_handle TSRMLS_CC);
> zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
> return SUCCESS;
> @@ -475,15 +560,147 @@
> }
> BEGIN(INITIAL);
> zend_highlight(syntax_highlighter_ini TSRMLS_CC);
> +#ifdef ZEND_MULTIBYTE
> + if (SCNG(script_org)) {
> + efree(SCNG(script_org));
> + SCNG(script_org) = NULL;
> + }
> + if (SCNG(script_filtered)) {
> + efree(SCNG(script_filtered));
> + SCNG(script_filtered) = NULL;
> + }
> +#endif /* ZEND_MULTIBYTE */
> zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
> zval_dtor(str);
> return SUCCESS;
> }
> END_EXTERN_C()
>
> +#ifdef ZEND_MULTIBYTE
> +BEGIN_EXTERN_C()
> +ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter
> old_input_filter, zend_encoding *old_encoding TSRMLS_DC)
> +{
> + int offset, original_offset, length, free_flag, new_len;
> + char *p;
> + zend_encoding *new_encoding;
> + unsigned char *yy_c_buf_p;
> +
> + /* calculate current position */
> + offset = original_offset = YYCURSOR - SCNG(yy_start);
> + if (old_input_filter && original_offset > 0) {
> + new_encoding = SCNG(script_encoding);
> + SCNG(script_encoding) = old_encoding;
> + do {
> + (old_input_filter)(&p, &length,
> SCNG(script_org), offset TSRMLS_CC);
> + if (!p) {
> + SCNG(script_encoding) = new_encoding;
> + return;
> + }
> + efree(p);
> + if (length > original_offset) {
> + offset--;
> + } else if (length < original_offset) {
> + offset++;
> + }
> + } while (original_offset != length);
> + SCNG(script_encoding) = new_encoding;
> + }
> +
> + /* convert and set */
> + if (!SCNG(input_filter)) {
> + length = SCNG(script_org_size)-offset-1;
> + p = SCNG(script_org)+offset+1;
> + free_flag = 0;
> + } else {
> + SCNG(input_filter)(&p, &length,
> SCNG(script_org)+offset+1, SCNG(script_org_size)-offset-1 TSRMLS_CC);
> + free_flag = 1;
> + }
> +
> + new_len = original_offset+length+1;
> +
> + if (new_len > YYLIMIT-SCNG(yy_start)) {
> + YYLIMIT = SCNG(yy_start) + new_len;
> + SCNG(yy_start) = erealloc(SCNG(yy_start), new_len);
> + SCNG(script_filtered) = SCNG(yy_start);
> + SCNG(script_filtered_size) = new_len;
> + }
> +
> + yy_c_buf_p = SCNG(yy_start) + original_offset;
> + strncpy(yy_c_buf_p+1, p, length);
> +
> + if (free_flag) {
> + efree(p);
> + }
> +}
> +
> +
> +ZEND_API int zend_multibyte_yyinput(zend_file_handle *file_handle, char *buf, size_t len TSRMLS_DC)
> +{
> + int c = '*', n;
> +
> + if (CG(interactive) == 0) {
> + if (zend_stream_fixup(file_handle, &buf, &len TSRMLS_CC) == FAILURE) {
> + return FAILURE;
> + }
> + n = len;
> + return n;
> + }
> +
> + /* interactive */
> + if (SCNG(script_org)) {
> + efree(SCNG(script_org));
> + }
> + if (SCNG(script_filtered)) {
> + efree(SCNG(script_filtered));
> + }
> + SCNG(script_org) = NULL;
> + SCNG(script_org_size) = 0;
> +
> + /* TODO: support widechars */
> + if (zend_stream_fixup(file_handle, &buf, &len TSRMLS_CC) == FAILURE) {
> + return FAILURE;
> + }
> + n = len;
> +
> + SCNG(script_org_size) = n;
> + SCNG(script_org) = (char*)emalloc(SCNG(script_org_size) + 1);
> + memcpy(SCNG(script_org), buf, n);
> +
> + return n;
> +}
> +
> +
> +ZEND_API int zend_multibyte_read_script(char *buf, int n TSRMLS_DC)
> +{
> + if (SCNG(script_org)) {
> + efree(SCNG(script_org));
> + }
> + if (n<0) {
> + return -1;
> + }
> + SCNG(script_org_size) = n;
> + SCNG(script_org) = (char*)erealloc(SCNG(script_org), SCNG(script_org_size));
> + memcpy(SCNG(script_org) + SCNG(script_org_size) - n, buf, n);
> +
> + SCNG(script_org) = (char*)erealloc(SCNG(script_org), SCNG(script_org_size) + 1);
> + *(SCNG(script_org)+SCNG(script_org_size)) = '\0';
> +
> + return 0;
> +}
> +
> +
> +# define zend_copy_value(zendlval, yytext, yyleng) \
> + if (SCNG(output_filter)) { \
> + SCNG(output_filter)(&(zendlval->value.str.val),
> &(zendlval->value.str.len), yytext, yyleng TSRMLS_CC); \
> + } else { \
> + zendlval->value.str.val = (char *) estrndup(yytext, yyleng); \
> + zendlval->value.str.len = yyleng; \
> + }
> +#else /* ZEND_MULTIBYTE */
> # define zend_copy_value(zendlval, yytext, yyleng) \
> zendlval->value.str.val = (char *)estrndup(yytext, yyleng); \
> zendlval->value.str.len = yyleng;
> +#endif /* ZEND_MULTIBYTE */
>
> static void zend_scan_escape_string(zval *zendlval, char *str, int len, char quote_type TSRMLS_DC)
> {
> @@ -587,6 +804,13 @@
> s++;
> }
> *t = 0;
> +#ifdef ZEND_MULTIBYTE
> + if (SCNG(output_filter)) {
> + s = zendlval->value.str.val;
> + SCNG(output_filter)(&(zendlval->value.str.val),
> &(zendlval->value.str.len), s, zendlval->value.str.len TSRMLS_CC);
> + efree(s);
> + }
> +#endif /* ZEND_MULTIBYTE */
> }
>
>
> @@ -1423,8 +1647,21 @@
>
> inline_char_handler:
>
> +#ifdef ZEND_MULTIBYTE
> + if (SCNG(output_filter)) {
> + int readsize;
> + readsize =
> SCNG(output_filter)(&(zendlval->value.str.val),
> &(zendlval->value.str.len), yytext, yyleng TSRMLS_CC);
> + if (readsize < yyleng) {
> + yyless(readsize);
> + }
> + } else {
> + zendlval->value.str.val = (char *) estrndup(yytext, yyleng);
> + zendlval->value.str.len = yyleng;
> + }
> +#else /* !ZEND_MULTIBYTE */
> zendlval->value.str.val = (char *) estrndup(yytext, yyleng);
> - zendlval->value.str.len = yyleng;
> + zendlval->value.str.len = yyleng;
> +#endif
> zendlval->type = IS_STRING;
> HANDLE_NEWLINES(yytext, yyleng);
> return T_INLINE_HTML;
> @@ -1637,6 +1874,13 @@
> }
> *t = 0;
>
> +#ifdef ZEND_MULTIBYTE
> + if (SCNG(output_filter)) {
> + s = zendlval->value.str.val;
> + SCNG(output_filter)(&(zendlval->value.str.val),
> &(zendlval->value.str.len), s, zendlval->value.str.len TSRMLS_CC);
> + efree(s);
> + }
> +#endif /* ZEND_MULTIBYTE */
> return T_CONSTANT_ENCAPSED_STRING;
> }
>
> http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_language_scanner_defs.h?r1=1.1.2.8&r2=1.1.2.9&diff_format=u
> Index: ZendEngine2/zend_language_scanner_defs.h
> diff -u ZendEngine2/zend_language_scanner_defs.h:1.1.2.8
> ZendEngine2/zend_language_scanner_defs.h:1.1.2.9
> --- ZendEngine2/zend_language_scanner_defs.h:1.1.2.8 Thu Apr 10 19:19:04 2008
> +++ ZendEngine2/zend_language_scanner_defs.h Sun Jun 29 08:21:35 2008
> @@ -1,4 +1,4 @@
> -/* Generated by re2c 0.13.5.dev on Thu Apr 10 20:01:41 2008 */
> +/* Generated by re2c 0.13.5 on Sun Jun 29 17:06:51 2008 */
> #line 3 "Zend/zend_language_scanner_defs.h"
>
> enum YYCONDTYPE {
> http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_multibyte.h?r1=1.3.2.3.2.1.2.1&r2=1.3.2.3.2.1.2.2&diff_format=u
> Index: ZendEngine2/zend_multibyte.h
> diff -u ZendEngine2/zend_multibyte.h:1.3.2.3.2.1.2.1
> ZendEngine2/zend_multibyte.h:1.3.2.3.2.1.2.2
> --- ZendEngine2/zend_multibyte.h:1.3.2.3.2.1.2.1 Mon Dec 31 07:17:04 2007
> +++ ZendEngine2/zend_multibyte.h Sun Jun 29 08:21:35 2008
> @@ -17,7 +17,7 @@
>
> +----------------------------------------------------------------------+
> */
>
> -/* $Id: zend_multibyte.h,v 1.3.2.3.2.1.2.1 2007/12/31 07:17:04 sebastian Exp $ */
> +/* $Id: zend_multibyte.h,v 1.3.2.3.2.1.2.2 2008/06/29 08:21:35 hirokawa Exp $ */
>
> #ifndef ZEND_MULTIBYTE_H
> #define ZEND_MULTIBYTE_H
> @@ -62,7 +62,7 @@
> /* in zend_language_scanner.l */
> ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter
> old_input_filter, zend_encoding *old_encoding TSRMLS_DC);
> ZEND_API int zend_multibyte_yyinput(zend_file_handle *file_handle, char *buf, size_t len TSRMLS_DC);
> -ZEND_API int zend_multibyte_read_script(TSRMLS_D);
> +ZEND_API int zend_multibyte_read_script(char *buf, int n TSRMLS_DC);
> END_EXTERN_C()
>
> #endif /* ZEND_MULTIBYTE */
Best regards,
Marcus
--
Zend Engine CVS Mailing List (http://cvs.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php