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

Rui Hirokawa <[email protected]>
Newsgroups gmane.comp.php.cvs.zend
Message-ID <[email protected]>
Hello Marcus,

On Sat, 5 Jul 2008 20:46:33 +0200
Marcus Boerger <[email protected]> wrote:

> 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. 

Thank you for comments. 
My implementation is ported code from PHP 5.2 with minimal change
because I am not familiar with lexical analizer including re2c, flex.
I read man page of re2c on the web site, and Peter's paper,
but, I couldn't understand the detail.


What we need to define for multibyte encoding support is 
how to treat some flex incompatible encodings like Shift_JIS.

The implementation is like,
1. read script from file system.
2. convert from script encoding to flex compatible encoding
3. applied to lexer
4.convert from flex compatible encoding to internal encoding (if
necessary)

The script encoding is specified by mbstinrg.scirpt_encoding 
in php.ini , the script file itself as BOM in Unicode (like UTF-8, UTF16), 
in the script file using 'declare'.

The approach used in PHP 5.2 might be ineffective for re2c.
I will appreciate if you make a better implementaion based on
the advanced feature of re2c.

> Also we are still missing tests.
> Without tests I feel we have to remove all of this anyway.

Currently,  a couple of test scripts is already existing in
Zend/tests/multibyte/*.phpt

'still missing' means we should make a huge number of test scripts
or a higher percentage of code coverage is necessary ?

The encoding converstion engine part is already tested
as mbstring extension.
The scanner part including encoding conversion, encoding
detection should be tested.

The current test scipts are covering the most important 
feature of zend-multibyte support,

1. test for flex incompatible encoding (0x5c issue) and 'declare' sentence
  multibye_encoding_001.phpt
2. test for UTF-8 BOM
  multibye_encoding_002.phpt
3. test for UTF-16 BOM and UTF-16 encoded Unicode script
  multibye_encoding_003.phpt

The encoding conversion feature is also covered by these scripts.
What kind of test scripts do you need ?

Rui

> 
> 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
> 
> 
> No virus found in this incoming message.
> Checked by AVG - http://www.grisoft.jp 
> Version: 8.0.136 / Virus Database: 270.4.5/1535 - Release Date: 2008/07/04 17:03
> 

-- 
Rui Hirokawa <[email protected]>


-- 
Zend Engine CVS Mailing List (http://cvs.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.