]> granicus.if.org Git - php/commitdiff
- Revived zend multibyte
authorMoriyoshi Koizumi <moriyoshi@php.net>
Thu, 24 Jul 2008 22:21:41 +0000 (22:21 +0000)
committerMoriyoshi Koizumi <moriyoshi@php.net>
Thu, 24 Jul 2008 22:21:41 +0000 (22:21 +0000)
22 files changed:
Zend/zend_compile.c
Zend/zend_globals.h
Zend/zend_language_scanner.c
Zend/zend_language_scanner.h
Zend/zend_language_scanner.l
Zend/zend_language_scanner_defs.h
Zend/zend_multibyte.c
Zend/zend_multibyte.h
ext/mbstring/mbstring.c
ext/mbstring/mbstring.h
ext/mbstring/tests/zend_multibyte-01.phpt [moved from ext/mbstring/tests/zend-multibyte.phpt with 95% similarity]
ext/mbstring/tests/zend_multibyte-02.phpt [new file with mode: 0644]
ext/mbstring/tests/zend_multibyte-03.phpt [new file with mode: 0644]
ext/mbstring/tests/zend_multibyte-04.phpt [new file with mode: 0644]
ext/mbstring/tests/zend_multibyte-05.phpt [new file with mode: 0644]
ext/mbstring/tests/zend_multibyte-06.phpt [new file with mode: 0644]
ext/mbstring/tests/zend_multibyte-07.phpt [new file with mode: 0644]
ext/mbstring/tests/zend_multibyte-08.phpt [new file with mode: 0644]
ext/mbstring/tests/zend_multibyte-09.phpt [new file with mode: 0644]
ext/mbstring/tests/zend_multibyte-10.phpt [new file with mode: 0644]
ext/mbstring/tests/zend_multibyte-11.phpt [new file with mode: 0644]
ext/mbstring/tests/zend_multibyte-12.phpt [new file with mode: 0644]

index 2c020c63ecc7274da4f2d3feb926f6f419c053ce..48e5eb967addc16ef37369bc20ea1665db0ad8ed 100644 (file)
@@ -4611,18 +4611,20 @@ void zend_do_declare_stmt(znode *var, znode *val TSRMLS_DC)
                 * 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;
+                       /* ignore ZEND_EXT_STMT and ZEND_TICKS */
                        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");
+
+                       if (num > 0 || CG(encoding_declared)) {
+                               zend_error(E_COMPILE_ERROR, "Encoding declaration pragma must be the very first statement in the script");
                        }
-               }               
+               }
+               CG(encoding_declared) = 1;
 
                convert_to_string(&val->u.constant);
                new_encoding = zend_multibyte_fetch_encoding(val->u.constant.value.str.val);
index 67684a4b9618b276f011c85ad088ab8bb5e7f240..53b30cfae89dcba711c8242e2c6ca8f3769e4a38 100644 (file)
@@ -140,8 +140,9 @@ struct _zend_compiler_globals {
 
 #ifdef ZEND_MULTIBYTE
        zend_encoding **script_encoding_list;
-       int script_encoding_list_size;
+       size_t script_encoding_list_size;
        zend_bool detect_unicode;
+       zend_bool encoding_declared;
 
        zend_encoding *internal_encoding;
 
@@ -258,14 +259,14 @@ struct _zend_ini_scanner_globals {
        zend_file_handle *yy_in;
        zend_file_handle *yy_out;
 
-        unsigned int yy_leng;
-        unsigned char *yy_start;
-        unsigned char *yy_text;
-        unsigned char *yy_cursor;
-        unsigned char *yy_marker;
-        unsigned char *yy_limit;
-        int yy_state;
-        zend_stack state_stack;
+       unsigned int yy_leng;
+       unsigned char *yy_start;
+       unsigned char *yy_text;
+       unsigned char *yy_cursor;
+       unsigned char *yy_marker;
+       unsigned char *yy_limit;
+       int yy_state;
+       zend_stack state_stack;
 
        char *filename;
        int lineno;
@@ -291,12 +292,12 @@ struct _zend_php_scanner_globals {
 
 #ifdef ZEND_MULTIBYTE
        /* original (unfiltered) script */
-       char *script_org;
-       int script_org_size;
+       unsigned char *script_org;
+       size_t script_org_size;
 
        /* filtered script */
-       char *script_filtered;
-       int script_filtered_size;
+       unsigned char *script_filtered;
+       size_t script_filtered_size;
 
        /* input/ouput filters */
        zend_encoding_filter input_filter;
index c8c1ea043706a8b9b3bef6965ebcf84d6875d7f4..fd69776bf979d1ecfb20d2c5926748360333a828 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.6.dev on Tue Jul  8 16:16:41 2008 */
+/* Generated by re2c 0.13.5 on Fri Jul 25 07:14:28 2008 */
 #line 1 "Zend/zend_language_scanner.l"
 /*
    +----------------------------------------------------------------------+
@@ -264,7 +264,7 @@ ZEND_API int open_file_for_scanning(zend_file_handle *file_handle TSRMLS_DC)
 
        if (size != -1) {
 #ifdef ZEND_MULTIBYTE
-               if (zend_multibyte_read_script(buf, size TSRMLS_CC) != 0) {
+               if (zend_multibyte_read_script((unsigned char *)buf, size TSRMLS_CC) != 0) {
                        return FAILURE;
                }
 
@@ -273,14 +273,14 @@ ZEND_API int open_file_for_scanning(zend_file_handle *file_handle TSRMLS_DC)
                zend_multibyte_set_filter(NULL TSRMLS_CC);
 
                if (!SCNG(input_filter)) {
-                       SCNG(script_filtered) = (char*)emalloc(SCNG(script_org_size)+1);
+                       SCNG(script_filtered) = (unsigned 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);
+               yy_scan_buffer((char *)SCNG(script_filtered), SCNG(script_filtered_size) TSRMLS_CC);
 #else /* !ZEND_MULTIBYTE */
                yy_scan_buffer(buf, size TSRMLS_CC);
 #endif /* ZEND_MULTIBYTE */
@@ -421,20 +421,20 @@ ZEND_API int zend_prepare_string_for_scanning(zval *str, char *filename TSRMLS_D
        SCNG(yy_in)=NULL;
 
 #ifdef ZEND_MULTIBYTE
-       SCNG(script_org) = estrdup(str->value.str.val);
+       SCNG(script_org) = (unsigned char *)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);
+               SCNG(script_filtered) = (unsigned 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);    
+       yy_scan_buffer((char *)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 */
@@ -583,10 +583,9 @@ END_EXTERN_C()
 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;
+       size_t offset, original_offset, length, free_flag, new_len;
+       unsigned char *p;
        zend_encoding *new_encoding;
-       unsigned char *yy_c_buf_p;
 
        /* calculate current position */
        offset = original_offset = YYCURSOR - SCNG(yy_start);
@@ -611,25 +610,28 @@ ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter old_input_filter
 
        /* convert and set */
        if (!SCNG(input_filter)) {
-               length = SCNG(script_org_size)-offset-1;
-               p = SCNG(script_org)+offset+1;
+               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);
+               SCNG(input_filter)(&p, &length, SCNG(script_org) + offset, SCNG(script_org_size) - offset TSRMLS_CC);
                free_flag = 1;
        }
 
-       new_len = original_offset+length+1;
+       new_len = original_offset + length;
 
-       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);
+       if (new_len > YYLIMIT - SCNG(yy_start)) {
+               unsigned char *new_yy_start = erealloc(SCNG(yy_start), new_len);
+               SCNG(yy_cursor) = new_yy_start + (SCNG(yy_cursor) - SCNG(yy_start));
+               SCNG(yy_marker) = new_yy_start + (SCNG(yy_marker) - SCNG(yy_start));
+               SCNG(yy_text) = new_yy_start + (SCNG(yy_text) - SCNG(yy_start));
+               SCNG(yy_start) = new_yy_start;
+               SCNG(script_filtered) = new_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);
+       SCNG(yy_limit) = SCNG(yy_start) + new_len;
+       memmove(SCNG(yy_start) + original_offset, p, length);
 
        if (free_flag) {
                efree(p);
@@ -639,7 +641,7 @@ ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter old_input_filter
 
 ZEND_API int zend_multibyte_yyinput(zend_file_handle *file_handle, char *buf, size_t len TSRMLS_DC)
 {
-       int c = '*', n;
+       size_t n;
 
        if (CG(interactive) == 0) {
                if (zend_stream_fixup(file_handle, &buf, &len TSRMLS_CC) == FAILURE) {
@@ -666,26 +668,23 @@ ZEND_API int zend_multibyte_yyinput(zend_file_handle *file_handle, char *buf, si
        n = len;
 
        SCNG(script_org_size) = n;
-       SCNG(script_org) = (char*)emalloc(SCNG(script_org_size) + 1);
+       SCNG(script_org) = (unsigned 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)
+ZEND_API int zend_multibyte_read_script(unsigned char *buf, size_t 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));
+       SCNG(script_org) = (unsigned 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) = (unsigned char*)erealloc(SCNG(script_org), SCNG(script_org_size) + 1);
        *(SCNG(script_org)+SCNG(script_org_size)) = '\0';
 
        return 0;
@@ -694,7 +693,9 @@ ZEND_API int zend_multibyte_read_script(char *buf, int n TSRMLS_DC)
 
 # 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); \
+               size_t sz = 0; \
+               SCNG(output_filter)((unsigned char **)&(zendlval->value.str.val), &sz, (unsigned char *)yytext, (size_t)yyleng TSRMLS_CC); \
+               zendlval->value.str.len = sz; \
        } else { \
                zendlval->value.str.val = (char *) estrndup(yytext, yyleng); \
                zendlval->value.str.len = yyleng; \
@@ -809,8 +810,10 @@ static void zend_scan_escape_string(zval *zendlval, char *str, int len, char quo
        *t = 0;
 #ifdef ZEND_MULTIBYTE
        if (SCNG(output_filter)) {
+               size_t sz = 0;
                s = zendlval->value.str.val;
-               SCNG(output_filter)(&(zendlval->value.str.val), &(zendlval->value.str.len), s, zendlval->value.str.len TSRMLS_CC);
+               SCNG(output_filter)((unsigned char **)&(zendlval->value.str.val), &sz, (unsigned char *)s, (size_t)zendlval->value.str.len TSRMLS_CC);
+               zendlval->value.str.len = sz;
                efree(s);
        }
 #endif /* ZEND_MULTIBYTE */
@@ -854,7 +857,7 @@ yymore_restart:
        }
 
 
-#line 858 "Zend/zend_language_scanner.c"
+#line 861 "Zend/zend_language_scanner.c"
 {
        YYCTYPE yych;
        unsigned int yyaccept = 0;
@@ -977,7 +980,7 @@ yyc_INITIAL:
 yy3:
                YYDEBUG(3, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1624 "Zend/zend_language_scanner.l"
+#line 1627 "Zend/zend_language_scanner.l"
                {
 
 inline_char_handler:
@@ -1005,7 +1008,9 @@ 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);
+               size_t sz = 0;
+               readsize = SCNG(output_filter)((unsigned char **)&(zendlval->value.str.val), &sz, (unsigned char *)yytext, (size_t)yyleng TSRMLS_CC);
+               zendlval->value.str.len = sz;
                if (readsize < yyleng) {
                        yyless(readsize);
                }
@@ -1021,7 +1026,7 @@ inline_char_handler:
        HANDLE_NEWLINES(yytext, yyleng);
        return T_INLINE_HTML;
 }
-#line 1025 "Zend/zend_language_scanner.c"
+#line 1030 "Zend/zend_language_scanner.c"
 yy4:
                YYDEBUG(4, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -1039,7 +1044,7 @@ yy5:
 yy6:
                YYDEBUG(6, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1612 "Zend/zend_language_scanner.l"
+#line 1615 "Zend/zend_language_scanner.l"
                {
        if (CG(short_tags)) {
                zendlval->value.str.val = yytext; /* no copying - intentional */
@@ -1051,14 +1056,14 @@ yy6:
                goto inline_char_handler;
        }
 }
-#line 1055 "Zend/zend_language_scanner.c"
+#line 1060 "Zend/zend_language_scanner.c"
 yy7:
                YYDEBUG(7, *YYCURSOR);
                ++YYCURSOR;
                if ((yych = *YYCURSOR) == '=') goto yy43;
                YYDEBUG(8, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1589 "Zend/zend_language_scanner.l"
+#line 1592 "Zend/zend_language_scanner.l"
                {
        if (CG(asp_tags)) {
                zendlval->value.str.val = yytext; /* no copying - intentional */
@@ -1070,7 +1075,7 @@ yy7:
                goto inline_char_handler;
        }
 }
-#line 1074 "Zend/zend_language_scanner.c"
+#line 1079 "Zend/zend_language_scanner.c"
 yy9:
                YYDEBUG(9, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -1256,7 +1261,7 @@ yy35:
                ++YYCURSOR;
                YYDEBUG(38, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1553 "Zend/zend_language_scanner.l"
+#line 1556 "Zend/zend_language_scanner.l"
                {
        HANDLE_NEWLINES(yytext, yyleng);
        zendlval->value.str.val = yytext; /* no copying - intentional */
@@ -1265,7 +1270,7 @@ yy35:
        BEGIN(ST_IN_SCRIPTING);
        return T_OPEN_TAG;
 }
-#line 1269 "Zend/zend_language_scanner.c"
+#line 1274 "Zend/zend_language_scanner.c"
 yy39:
                YYDEBUG(39, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -1292,7 +1297,7 @@ yy43:
                ++YYCURSOR;
                YYDEBUG(44, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1563 "Zend/zend_language_scanner.l"
+#line 1566 "Zend/zend_language_scanner.l"
                {
        if (CG(asp_tags)) {
                zendlval->value.str.val = yytext; /* no copying - intentional */
@@ -1304,13 +1309,13 @@ yy43:
                goto inline_char_handler;
        }
 }
-#line 1308 "Zend/zend_language_scanner.c"
+#line 1313 "Zend/zend_language_scanner.c"
 yy45:
                YYDEBUG(45, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(46, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1576 "Zend/zend_language_scanner.l"
+#line 1579 "Zend/zend_language_scanner.l"
                {
        if (CG(short_tags)) {
                zendlval->value.str.val = yytext; /* no copying - intentional */
@@ -1322,7 +1327,7 @@ yy45:
                goto inline_char_handler;
        }
 }
-#line 1326 "Zend/zend_language_scanner.c"
+#line 1331 "Zend/zend_language_scanner.c"
 yy47:
                YYDEBUG(47, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -1349,7 +1354,7 @@ yy50:
 yy51:
                YYDEBUG(51, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1602 "Zend/zend_language_scanner.l"
+#line 1605 "Zend/zend_language_scanner.l"
                {
        zendlval->value.str.val = yytext; /* no copying - intentional */
        zendlval->value.str.len = yyleng;
@@ -1358,7 +1363,7 @@ yy51:
        BEGIN(ST_IN_SCRIPTING);
        return T_OPEN_TAG;
 }
-#line 1362 "Zend/zend_language_scanner.c"
+#line 1367 "Zend/zend_language_scanner.c"
 yy52:
                YYDEBUG(52, *YYCURSOR);
                ++YYCURSOR;
@@ -1449,13 +1454,13 @@ yy56:
 yy57:
                YYDEBUG(57, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2005 "Zend/zend_language_scanner.l"
+#line 2012 "Zend/zend_language_scanner.l"
                {
        zendlval->value.lval = (long) '{';
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
        return T_CURLY_OPEN;
 }
-#line 1459 "Zend/zend_language_scanner.c"
+#line 1464 "Zend/zend_language_scanner.c"
 yy58:
                YYDEBUG(58, *YYCURSOR);
                yyaccept = 1;
@@ -1473,12 +1478,12 @@ yy59:
 yy60:
                YYDEBUG(60, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2030 "Zend/zend_language_scanner.l"
+#line 2037 "Zend/zend_language_scanner.l"
                {
        zend_scan_escape_string(zendlval, yytext, yyleng, '`' TSRMLS_CC);
        return T_ENCAPSED_AND_WHITESPACE;
 }
-#line 1482 "Zend/zend_language_scanner.c"
+#line 1487 "Zend/zend_language_scanner.c"
 yy61:
                YYDEBUG(61, *YYCURSOR);
                ++YYCURSOR;
@@ -1490,12 +1495,12 @@ yy62:
                ++YYCURSOR;
                YYDEBUG(63, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2166 "Zend/zend_language_scanner.l"
+#line 2173 "Zend/zend_language_scanner.l"
                {
        BEGIN(ST_IN_SCRIPTING);
        return '`';
 }
-#line 1499 "Zend/zend_language_scanner.c"
+#line 1504 "Zend/zend_language_scanner.c"
 yy64:
                YYDEBUG(64, *YYCURSOR);
                ++YYCURSOR;
@@ -1583,13 +1588,13 @@ yy68:
 yy70:
                YYDEBUG(70, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2035 "Zend/zend_language_scanner.l"
+#line 2042 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        zend_scan_escape_string(zendlval, yytext, yyleng, '`' TSRMLS_CC);
        return T_ENCAPSED_AND_WHITESPACE;
 }
-#line 1593 "Zend/zend_language_scanner.c"
+#line 1598 "Zend/zend_language_scanner.c"
 yy71:
                YYDEBUG(71, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -1623,24 +1628,24 @@ yy74:
 yy76:
                YYDEBUG(76, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1690 "Zend/zend_language_scanner.l"
+#line 1695 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 1633 "Zend/zend_language_scanner.c"
+#line 1638 "Zend/zend_language_scanner.c"
 yy77:
                YYDEBUG(77, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(78, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1346 "Zend/zend_language_scanner.l"
+#line 1349 "Zend/zend_language_scanner.l"
                {
        yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
        return T_DOLLAR_OPEN_CURLY_BRACES;
 }
-#line 1644 "Zend/zend_language_scanner.c"
+#line 1649 "Zend/zend_language_scanner.c"
 yy79:
                YYDEBUG(79, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -1651,7 +1656,7 @@ yy80:
                ++YYCURSOR;
                YYDEBUG(81, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1682 "Zend/zend_language_scanner.l"
+#line 1687 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
@@ -1659,7 +1664,7 @@ yy80:
        zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 1663 "Zend/zend_language_scanner.c"
+#line 1668 "Zend/zend_language_scanner.c"
 yy82:
                YYDEBUG(82, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -1677,7 +1682,7 @@ yy83:
                ++YYCURSOR;
                YYDEBUG(84, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1672 "Zend/zend_language_scanner.l"
+#line 1677 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 3);
        yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
@@ -1685,7 +1690,7 @@ yy83:
        zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 1689 "Zend/zend_language_scanner.c"
+#line 1694 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_COMMENT:
@@ -1742,34 +1747,34 @@ yy87:
                }
                YYDEBUG(89, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1782 "Zend/zend_language_scanner.l"
+#line 1787 "Zend/zend_language_scanner.l"
                {
        yymore();
 }
-#line 1750 "Zend/zend_language_scanner.c"
+#line 1755 "Zend/zend_language_scanner.c"
 yy90:
                YYDEBUG(90, *YYCURSOR);
                ++YYCURSOR;
                if ((yych = *YYCURSOR) == '/') goto yy92;
                YYDEBUG(91, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1800 "Zend/zend_language_scanner.l"
+#line 1805 "Zend/zend_language_scanner.l"
                {
        yymore();
 }
-#line 1761 "Zend/zend_language_scanner.c"
+#line 1766 "Zend/zend_language_scanner.c"
 yy92:
                YYDEBUG(92, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(93, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1794 "Zend/zend_language_scanner.l"
+#line 1799 "Zend/zend_language_scanner.l"
                {
        HANDLE_NEWLINES(yytext, yyleng);
        BEGIN(ST_IN_SCRIPTING);
        return T_COMMENT;
 }
-#line 1773 "Zend/zend_language_scanner.c"
+#line 1778 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_DOC_COMMENT:
@@ -1826,28 +1831,28 @@ yy96:
                }
                YYDEBUG(98, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1782 "Zend/zend_language_scanner.l"
+#line 1787 "Zend/zend_language_scanner.l"
                {
        yymore();
 }
-#line 1834 "Zend/zend_language_scanner.c"
+#line 1839 "Zend/zend_language_scanner.c"
 yy99:
                YYDEBUG(99, *YYCURSOR);
                ++YYCURSOR;
                if ((yych = *YYCURSOR) == '/') goto yy101;
                YYDEBUG(100, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1800 "Zend/zend_language_scanner.l"
+#line 1805 "Zend/zend_language_scanner.l"
                {
        yymore();
 }
-#line 1845 "Zend/zend_language_scanner.c"
+#line 1850 "Zend/zend_language_scanner.c"
 yy101:
                YYDEBUG(101, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(102, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1786 "Zend/zend_language_scanner.l"
+#line 1791 "Zend/zend_language_scanner.l"
                {
        CG(doc_comment) = estrndup(yytext, yyleng);
        CG(doc_comment_len) = yyleng;
@@ -1855,7 +1860,7 @@ yy101:
        BEGIN(ST_IN_SCRIPTING);
        return T_DOC_COMMENT;
 }
-#line 1859 "Zend/zend_language_scanner.c"
+#line 1864 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_DOUBLE_QUOTES:
@@ -1942,13 +1947,13 @@ yy106:
 yy107:
                YYDEBUG(107, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2005 "Zend/zend_language_scanner.l"
+#line 2012 "Zend/zend_language_scanner.l"
                {
        zendlval->value.lval = (long) '{';
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
        return T_CURLY_OPEN;
 }
-#line 1952 "Zend/zend_language_scanner.c"
+#line 1957 "Zend/zend_language_scanner.c"
 yy108:
                YYDEBUG(108, *YYCURSOR);
                yyaccept = 1;
@@ -1967,12 +1972,12 @@ yy109:
 yy110:
                YYDEBUG(110, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2012 "Zend/zend_language_scanner.l"
+#line 2019 "Zend/zend_language_scanner.l"
                {
        zend_scan_escape_string(zendlval, yytext, yyleng, '"' TSRMLS_CC);
        return T_ENCAPSED_AND_WHITESPACE;
 }
-#line 1976 "Zend/zend_language_scanner.c"
+#line 1981 "Zend/zend_language_scanner.c"
 yy111:
                YYDEBUG(111, *YYCURSOR);
                ++YYCURSOR;
@@ -1984,12 +1989,12 @@ yy112:
                ++YYCURSOR;
                YYDEBUG(113, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2160 "Zend/zend_language_scanner.l"
+#line 2167 "Zend/zend_language_scanner.l"
                {
        BEGIN(ST_IN_SCRIPTING);
        return '"';
 }
-#line 1993 "Zend/zend_language_scanner.c"
+#line 1998 "Zend/zend_language_scanner.c"
 yy114:
                YYDEBUG(114, *YYCURSOR);
                ++YYCURSOR;
@@ -2080,13 +2085,13 @@ yy118:
 yy120:
                YYDEBUG(120, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2023 "Zend/zend_language_scanner.l"
+#line 2030 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        zend_scan_escape_string(zendlval, yytext, yyleng, '"' TSRMLS_CC);
        return T_ENCAPSED_AND_WHITESPACE;
 }
-#line 2090 "Zend/zend_language_scanner.c"
+#line 2095 "Zend/zend_language_scanner.c"
 yy121:
                YYDEBUG(121, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -2120,24 +2125,24 @@ yy124:
 yy126:
                YYDEBUG(126, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1690 "Zend/zend_language_scanner.l"
+#line 1695 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 2130 "Zend/zend_language_scanner.c"
+#line 2135 "Zend/zend_language_scanner.c"
 yy127:
                YYDEBUG(127, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(128, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1346 "Zend/zend_language_scanner.l"
+#line 1349 "Zend/zend_language_scanner.l"
                {
        yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
        return T_DOLLAR_OPEN_CURLY_BRACES;
 }
-#line 2141 "Zend/zend_language_scanner.c"
+#line 2146 "Zend/zend_language_scanner.c"
 yy129:
                YYDEBUG(129, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -2148,7 +2153,7 @@ yy130:
                ++YYCURSOR;
                YYDEBUG(131, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1682 "Zend/zend_language_scanner.l"
+#line 1687 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
@@ -2156,7 +2161,7 @@ yy130:
        zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 2160 "Zend/zend_language_scanner.c"
+#line 2165 "Zend/zend_language_scanner.c"
 yy132:
                YYDEBUG(132, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -2174,7 +2179,7 @@ yy133:
                ++YYCURSOR;
                YYDEBUG(134, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1672 "Zend/zend_language_scanner.l"
+#line 1677 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 3);
        yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
@@ -2182,7 +2187,7 @@ yy133:
        zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 2186 "Zend/zend_language_scanner.c"
+#line 2191 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_END_HEREDOC:
@@ -2193,16 +2198,16 @@ yyc_ST_END_HEREDOC:
        ++YYCURSOR;
        YYDEBUG(138, *YYCURSOR);
        yyleng = YYCURSOR - SCNG(yy_text);
-#line 1994 "Zend/zend_language_scanner.l"
+#line 2001 "Zend/zend_language_scanner.l"
        {
-       SCNG(yy_text) = Z_STRVAL_P(zendlval) = CG(heredoc);
+       SCNG(yy_text) = (unsigned char *)(Z_STRVAL_P(zendlval) = CG(heredoc));
        SCNG(yy_leng) = Z_STRLEN_P(zendlval) = CG(heredoc_len);
        CG(heredoc) = NULL;
        CG(heredoc_len) = 0;
        BEGIN(ST_IN_SCRIPTING);
        return T_END_HEREDOC;
 }
-#line 2206 "Zend/zend_language_scanner.c"
+#line 2211 "Zend/zend_language_scanner.c"
 /* *********************************** */
 yyc_ST_END_NOWDOC:
        YYDEBUG(139, *YYCURSOR);
@@ -2212,16 +2217,16 @@ yyc_ST_END_NOWDOC:
        ++YYCURSOR;
        YYDEBUG(142, *YYCURSOR);
        yyleng = YYCURSOR - SCNG(yy_text);
-#line 2149 "Zend/zend_language_scanner.l"
+#line 2156 "Zend/zend_language_scanner.l"
        {
-       SCNG(yy_text) = Z_STRVAL_P(zendlval) = CG(heredoc);
+       SCNG(yy_text) = (unsigned char*)(Z_STRVAL_P(zendlval) = CG(heredoc));
        SCNG(yy_leng) = Z_STRLEN_P(zendlval) = CG(heredoc_len);
        CG(heredoc) = NULL;
        CG(heredoc_len) = 0;
        BEGIN(ST_IN_SCRIPTING);
        return T_END_NOWDOC;
 }
-#line 2225 "Zend/zend_language_scanner.c"
+#line 2230 "Zend/zend_language_scanner.c"
 /* *********************************** */
 yyc_ST_HEREDOC:
        {
@@ -2278,12 +2283,12 @@ yyc_ST_HEREDOC:
 yy145:
                YYDEBUG(145, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2049 "Zend/zend_language_scanner.l"
+#line 2056 "Zend/zend_language_scanner.l"
                {
        zend_scan_escape_string(zendlval, yytext, yyleng, 0 TSRMLS_CC);
        return T_ENCAPSED_AND_WHITESPACE;
 }
-#line 2287 "Zend/zend_language_scanner.c"
+#line 2292 "Zend/zend_language_scanner.c"
 yy146:
                YYDEBUG(146, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -2329,13 +2334,13 @@ yy147:
 yy148:
                YYDEBUG(148, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2005 "Zend/zend_language_scanner.l"
+#line 2012 "Zend/zend_language_scanner.l"
                {
        zendlval->value.lval = (long) '{';
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
        return T_CURLY_OPEN;
 }
-#line 2339 "Zend/zend_language_scanner.c"
+#line 2344 "Zend/zend_language_scanner.c"
 yy149:
                YYDEBUG(149, *YYCURSOR);
                yyaccept = 0;
@@ -2586,13 +2591,13 @@ yy165:
 yy167:
                YYDEBUG(167, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2054 "Zend/zend_language_scanner.l"
+#line 2061 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        zend_scan_escape_string(zendlval, yytext, yyleng, 0 TSRMLS_CC);
        return T_ENCAPSED_AND_WHITESPACE;
 }
-#line 2596 "Zend/zend_language_scanner.c"
+#line 2601 "Zend/zend_language_scanner.c"
 yy168:
                YYDEBUG(168, *YYCURSOR);
                yyaccept = 2;
@@ -2691,7 +2696,7 @@ yy174:
                ++YYCURSOR;
                YYDEBUG(175, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1954 "Zend/zend_language_scanner.l"
+#line 1961 "Zend/zend_language_scanner.l"
                {
        char *end = yytext + yyleng - 1;
 
@@ -2731,7 +2736,7 @@ yy174:
                yymore();
        }
 }
-#line 2735 "Zend/zend_language_scanner.c"
+#line 2740 "Zend/zend_language_scanner.c"
 yy176:
                YYDEBUG(176, *YYCURSOR);
                yyaccept = 2;
@@ -2991,24 +2996,24 @@ yy195:
 yy197:
                YYDEBUG(197, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1690 "Zend/zend_language_scanner.l"
+#line 1695 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 3001 "Zend/zend_language_scanner.c"
+#line 3006 "Zend/zend_language_scanner.c"
 yy198:
                YYDEBUG(198, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(199, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1346 "Zend/zend_language_scanner.l"
+#line 1349 "Zend/zend_language_scanner.l"
                {
        yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
        return T_DOLLAR_OPEN_CURLY_BRACES;
 }
-#line 3012 "Zend/zend_language_scanner.c"
+#line 3017 "Zend/zend_language_scanner.c"
 yy200:
                YYDEBUG(200, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3019,7 +3024,7 @@ yy201:
                ++YYCURSOR;
                YYDEBUG(202, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1682 "Zend/zend_language_scanner.l"
+#line 1687 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
@@ -3027,7 +3032,7 @@ yy201:
        zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 3031 "Zend/zend_language_scanner.c"
+#line 3036 "Zend/zend_language_scanner.c"
 yy203:
                YYDEBUG(203, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3045,7 +3050,7 @@ yy204:
                ++YYCURSOR;
                YYDEBUG(205, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1672 "Zend/zend_language_scanner.l"
+#line 1677 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 3);
        yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
@@ -3053,7 +3058,7 @@ yy204:
        zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 3057 "Zend/zend_language_scanner.c"
+#line 3062 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_IN_SCRIPTING:
@@ -3268,13 +3273,13 @@ yy208:
 yy209:
                YYDEBUG(209, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1714 "Zend/zend_language_scanner.l"
+#line 1719 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, yytext, yyleng);
        zendlval->type = IS_STRING;
        return T_STRING;
 }
-#line 3278 "Zend/zend_language_scanner.c"
+#line 3283 "Zend/zend_language_scanner.c"
 yy210:
                YYDEBUG(210, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3521,11 +3526,11 @@ yy222:
 yy223:
                YYDEBUG(223, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1335 "Zend/zend_language_scanner.l"
+#line 1338 "Zend/zend_language_scanner.l"
                {
        return yytext[0];
 }
-#line 3529 "Zend/zend_language_scanner.c"
+#line 3534 "Zend/zend_language_scanner.c"
 yy224:
                YYDEBUG(224, *YYCURSOR);
                ++YYCURSOR;
@@ -3534,7 +3539,7 @@ yy224:
 yy225:
                YYDEBUG(225, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1074 "Zend/zend_language_scanner.l"
+#line 1077 "Zend/zend_language_scanner.l"
                {
        zendlval->value.str.val = yytext; /* no copying - intentional */
        zendlval->value.str.len = yyleng;
@@ -3542,7 +3547,7 @@ yy225:
        HANDLE_NEWLINES(yytext, yyleng);
        return T_WHITESPACE;
 }
-#line 3546 "Zend/zend_language_scanner.c"
+#line 3551 "Zend/zend_language_scanner.c"
 yy226:
                YYDEBUG(226, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3775,18 +3780,18 @@ yy250:
                ++YYCURSOR;
                YYDEBUG(251, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1340 "Zend/zend_language_scanner.l"
+#line 1343 "Zend/zend_language_scanner.l"
                {
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
        return '{';
 }
-#line 3784 "Zend/zend_language_scanner.c"
+#line 3789 "Zend/zend_language_scanner.c"
 yy252:
                YYDEBUG(252, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(253, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1352 "Zend/zend_language_scanner.l"
+#line 1355 "Zend/zend_language_scanner.l"
                {
        RESET_DOC_COMMENT();
        if (!zend_stack_is_empty(&SCNG(state_stack))) {
@@ -3794,7 +3799,7 @@ yy252:
        }
        return '}';
 }
-#line 3798 "Zend/zend_language_scanner.c"
+#line 3803 "Zend/zend_language_scanner.c"
 yy254:
                YYDEBUG(254, *YYCURSOR);
                yyaccept = 2;
@@ -3817,7 +3822,7 @@ yy254:
 yy255:
                YYDEBUG(255, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1378 "Zend/zend_language_scanner.l"
+#line 1381 "Zend/zend_language_scanner.l"
                {
        if (yyleng < MAX_LENGTH_OF_LONG - 1) { /* Won't overflow */
                zendlval->value.lval = strtol(yytext, NULL, 0);
@@ -3838,7 +3843,7 @@ yy255:
        zendlval->type = IS_LONG;
        return T_LNUMBER;
 }
-#line 3842 "Zend/zend_language_scanner.c"
+#line 3847 "Zend/zend_language_scanner.c"
 yy256:
                YYDEBUG(256, *YYCURSOR);
                yyaccept = 2;
@@ -3866,12 +3871,12 @@ yy258:
 yy259:
                YYDEBUG(259, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1721 "Zend/zend_language_scanner.l"
+#line 1726 "Zend/zend_language_scanner.l"
                {
        BEGIN(ST_ONE_LINE_COMMENT);
        yymore();
 }
-#line 3875 "Zend/zend_language_scanner.c"
+#line 3880 "Zend/zend_language_scanner.c"
 yy260:
                YYDEBUG(260, *YYCURSOR);
                yyaccept = 3;
@@ -3880,12 +3885,12 @@ yy260:
 yy261:
                YYDEBUG(261, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1886 "Zend/zend_language_scanner.l"
+#line 1893 "Zend/zend_language_scanner.l"
                {
        BEGIN(ST_DOUBLE_QUOTES);
        return '"';
 }
-#line 3889 "Zend/zend_language_scanner.c"
+#line 3894 "Zend/zend_language_scanner.c"
 yy262:
                YYDEBUG(262, *YYCURSOR);
                yyaccept = 4;
@@ -3894,23 +3899,23 @@ yy262:
 yy263:
                YYDEBUG(263, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2172 "Zend/zend_language_scanner.l"
+#line 2179 "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 3903 "Zend/zend_language_scanner.c"
+#line 3908 "Zend/zend_language_scanner.c"
 yy264:
                YYDEBUG(264, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(265, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1914 "Zend/zend_language_scanner.l"
+#line 1921 "Zend/zend_language_scanner.l"
                {
        BEGIN(ST_BACKQUOTE);
        return '`';
 }
-#line 3914 "Zend/zend_language_scanner.c"
+#line 3919 "Zend/zend_language_scanner.c"
 yy266:
                YYDEBUG(266, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3936,7 +3941,7 @@ yy270:
                ++YYCURSOR;
                YYDEBUG(271, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1837 "Zend/zend_language_scanner.l"
+#line 1842 "Zend/zend_language_scanner.l"
                {
        register char *s, *t;
        char *end;
@@ -3977,14 +3982,16 @@ yy270:
 
 #ifdef ZEND_MULTIBYTE
        if (SCNG(output_filter)) {
+               size_t sz = 0;
                s = zendlval->value.str.val;
-               SCNG(output_filter)(&(zendlval->value.str.val), &(zendlval->value.str.len), s, zendlval->value.str.len TSRMLS_CC);
+               SCNG(output_filter)((unsigned char **)&(zendlval->value.str.val), &sz, (unsigned char *)s, (size_t)zendlval->value.str.len TSRMLS_CC);
+               zendlval->value.str.len = sz;
                efree(s);
        }
 #endif /* ZEND_MULTIBYTE */
        return T_CONSTANT_ENCAPSED_STRING;
 }
-#line 3988 "Zend/zend_language_scanner.c"
+#line 3995 "Zend/zend_language_scanner.c"
 yy272:
                YYDEBUG(272, *YYCURSOR);
                ++YYCURSOR;
@@ -4081,14 +4088,14 @@ yy280:
                ++YYCURSOR;
                YYDEBUG(281, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1829 "Zend/zend_language_scanner.l"
+#line 1834 "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 4092 "Zend/zend_language_scanner.c"
+#line 4099 "Zend/zend_language_scanner.c"
 yy282:
                YYDEBUG(282, *YYCURSOR);
                ++YYCURSOR;
@@ -4121,13 +4128,13 @@ yy285:
 yy287:
                YYDEBUG(287, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1439 "Zend/zend_language_scanner.l"
+#line 1442 "Zend/zend_language_scanner.l"
                {
        zendlval->value.dval = zend_strtod(yytext, NULL);
        zendlval->type = IS_DOUBLE;
        return T_DNUMBER;
 }
-#line 4131 "Zend/zend_language_scanner.c"
+#line 4138 "Zend/zend_language_scanner.c"
 yy288:
                YYDEBUG(288, *YYCURSOR);
                yyaccept = 2;
@@ -4189,7 +4196,7 @@ yy295:
                }
                YYDEBUG(297, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1399 "Zend/zend_language_scanner.l"
+#line 1402 "Zend/zend_language_scanner.l"
                {
        char *hex = yytext + 2; /* Skip "0x" */
        int len = yyleng - 2;
@@ -4210,7 +4217,7 @@ yy295:
                return T_DNUMBER;
        }
 }
-#line 4214 "Zend/zend_language_scanner.c"
+#line 4221 "Zend/zend_language_scanner.c"
 yy298:
                YYDEBUG(298, *YYCURSOR);
                ++YYCURSOR;
@@ -4219,7 +4226,7 @@ yy298:
 yy299:
                YYDEBUG(299, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1804 "Zend/zend_language_scanner.l"
+#line 1809 "Zend/zend_language_scanner.l"
                {
        zendlval->value.str.val = yytext; /* no copying - intentional */
        zendlval->value.str.len = yyleng;
@@ -4227,7 +4234,7 @@ yy299:
        BEGIN(INITIAL);
        return T_CLOSE_TAG;  /* implicit ';' at php-end tag */
 }
-#line 4231 "Zend/zend_language_scanner.c"
+#line 4238 "Zend/zend_language_scanner.c"
 yy300:
                YYDEBUG(300, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4261,13 +4268,13 @@ yy302:
 yy304:
                YYDEBUG(304, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1690 "Zend/zend_language_scanner.l"
+#line 1695 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 4271 "Zend/zend_language_scanner.c"
+#line 4278 "Zend/zend_language_scanner.c"
 yy305:
                YYDEBUG(305, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4281,11 +4288,11 @@ yy306:
                }
                YYDEBUG(307, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1323 "Zend/zend_language_scanner.l"
+#line 1326 "Zend/zend_language_scanner.l"
                {
        return T_LOGICAL_XOR;
 }
-#line 4289 "Zend/zend_language_scanner.c"
+#line 4296 "Zend/zend_language_scanner.c"
 yy308:
                YYDEBUG(308, *YYCURSOR);
                ++YYCURSOR;
@@ -4294,61 +4301,61 @@ yy308:
                }
                YYDEBUG(309, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1315 "Zend/zend_language_scanner.l"
+#line 1318 "Zend/zend_language_scanner.l"
                {
        return T_LOGICAL_OR;
 }
-#line 4302 "Zend/zend_language_scanner.c"
+#line 4309 "Zend/zend_language_scanner.c"
 yy310:
                YYDEBUG(310, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(311, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1303 "Zend/zend_language_scanner.l"
+#line 1306 "Zend/zend_language_scanner.l"
                {
        return T_XOR_EQUAL;
 }
-#line 4312 "Zend/zend_language_scanner.c"
+#line 4319 "Zend/zend_language_scanner.c"
 yy312:
                YYDEBUG(312, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(313, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1307 "Zend/zend_language_scanner.l"
+#line 1310 "Zend/zend_language_scanner.l"
                {
        return T_BOOLEAN_OR;
 }
-#line 4322 "Zend/zend_language_scanner.c"
+#line 4329 "Zend/zend_language_scanner.c"
 yy314:
                YYDEBUG(314, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(315, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1299 "Zend/zend_language_scanner.l"
+#line 1302 "Zend/zend_language_scanner.l"
                {
        return T_OR_EQUAL;
 }
-#line 4332 "Zend/zend_language_scanner.c"
+#line 4339 "Zend/zend_language_scanner.c"
 yy316:
                YYDEBUG(316, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(317, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1311 "Zend/zend_language_scanner.l"
+#line 1314 "Zend/zend_language_scanner.l"
                {
        return T_BOOLEAN_AND;
 }
-#line 4342 "Zend/zend_language_scanner.c"
+#line 4349 "Zend/zend_language_scanner.c"
 yy318:
                YYDEBUG(318, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(319, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1295 "Zend/zend_language_scanner.l"
+#line 1298 "Zend/zend_language_scanner.l"
                {
        return T_AND_EQUAL;
 }
-#line 4352 "Zend/zend_language_scanner.c"
+#line 4359 "Zend/zend_language_scanner.c"
 yy320:
                YYDEBUG(320, *YYCURSOR);
                ++YYCURSOR;
@@ -4357,7 +4364,7 @@ yy320:
 yy321:
                YYDEBUG(321, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1813 "Zend/zend_language_scanner.l"
+#line 1818 "Zend/zend_language_scanner.l"
                {
        if (CG(asp_tags)) {
                BEGIN(INITIAL);
@@ -4370,17 +4377,17 @@ yy321:
                return yytext[0];
        }
 }
-#line 4374 "Zend/zend_language_scanner.c"
+#line 4381 "Zend/zend_language_scanner.c"
 yy322:
                YYDEBUG(322, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(323, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1283 "Zend/zend_language_scanner.l"
+#line 1286 "Zend/zend_language_scanner.l"
                {
        return T_MOD_EQUAL;
 }
-#line 4384 "Zend/zend_language_scanner.c"
+#line 4391 "Zend/zend_language_scanner.c"
 yy324:
                YYDEBUG(324, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4411,11 +4418,11 @@ yy328:
                ++YYCURSOR;
                YYDEBUG(329, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1279 "Zend/zend_language_scanner.l"
+#line 1282 "Zend/zend_language_scanner.l"
                {
        return T_CONCAT_EQUAL;
 }
-#line 4419 "Zend/zend_language_scanner.c"
+#line 4426 "Zend/zend_language_scanner.c"
 yy330:
                YYDEBUG(330, *YYCURSOR);
                yyaccept = 6;
@@ -4424,12 +4431,12 @@ yy330:
 yy331:
                YYDEBUG(331, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1776 "Zend/zend_language_scanner.l"
+#line 1781 "Zend/zend_language_scanner.l"
                {
        BEGIN(ST_COMMENT);
        yymore();
 }
-#line 4433 "Zend/zend_language_scanner.c"
+#line 4440 "Zend/zend_language_scanner.c"
 yy332:
                YYDEBUG(332, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4439,11 +4446,11 @@ yy333:
                ++YYCURSOR;
                YYDEBUG(334, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1275 "Zend/zend_language_scanner.l"
+#line 1278 "Zend/zend_language_scanner.l"
                {
        return T_DIV_EQUAL;
 }
-#line 4447 "Zend/zend_language_scanner.c"
+#line 4454 "Zend/zend_language_scanner.c"
 yy335:
                YYDEBUG(335, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4462,54 +4469,54 @@ yy336:
                }
                YYDEBUG(338, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1770 "Zend/zend_language_scanner.l"
+#line 1775 "Zend/zend_language_scanner.l"
                {
        RESET_DOC_COMMENT();
        BEGIN(ST_DOC_COMMENT);
        yymore();
 }
-#line 4472 "Zend/zend_language_scanner.c"
+#line 4479 "Zend/zend_language_scanner.c"
 yy339:
                YYDEBUG(339, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(340, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1271 "Zend/zend_language_scanner.l"
+#line 1274 "Zend/zend_language_scanner.l"
                {
        return T_MUL_EQUAL;
 }
-#line 4482 "Zend/zend_language_scanner.c"
+#line 4489 "Zend/zend_language_scanner.c"
 yy341:
                YYDEBUG(341, *YYCURSOR);
                ++YYCURSOR;
                if ((yych = *YYCURSOR) == '=') goto yy345;
                YYDEBUG(342, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1331 "Zend/zend_language_scanner.l"
+#line 1334 "Zend/zend_language_scanner.l"
                {
        return T_SR;
 }
-#line 4493 "Zend/zend_language_scanner.c"
+#line 4500 "Zend/zend_language_scanner.c"
 yy343:
                YYDEBUG(343, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(344, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1259 "Zend/zend_language_scanner.l"
+#line 1262 "Zend/zend_language_scanner.l"
                {
        return T_IS_GREATER_OR_EQUAL;
 }
-#line 4503 "Zend/zend_language_scanner.c"
+#line 4510 "Zend/zend_language_scanner.c"
 yy345:
                YYDEBUG(345, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(346, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1291 "Zend/zend_language_scanner.l"
+#line 1294 "Zend/zend_language_scanner.l"
                {
        return T_SR_EQUAL;
 }
-#line 4513 "Zend/zend_language_scanner.c"
+#line 4520 "Zend/zend_language_scanner.c"
 yy347:
                YYDEBUG(347, *YYCURSOR);
                yyaccept = 7;
@@ -4520,11 +4527,11 @@ yy347:
 yy348:
                YYDEBUG(348, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1327 "Zend/zend_language_scanner.l"
+#line 1330 "Zend/zend_language_scanner.l"
                {
        return T_SL;
 }
-#line 4528 "Zend/zend_language_scanner.c"
+#line 4535 "Zend/zend_language_scanner.c"
 yy349:
                YYDEBUG(349, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4536,22 +4543,22 @@ yy350:
                ++YYCURSOR;
                YYDEBUG(351, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1255 "Zend/zend_language_scanner.l"
+#line 1258 "Zend/zend_language_scanner.l"
                {
        return T_IS_SMALLER_OR_EQUAL;
 }
-#line 4544 "Zend/zend_language_scanner.c"
+#line 4551 "Zend/zend_language_scanner.c"
 yy352:
                YYDEBUG(352, *YYCURSOR);
                ++YYCURSOR;
 yy353:
                YYDEBUG(353, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1251 "Zend/zend_language_scanner.l"
+#line 1254 "Zend/zend_language_scanner.l"
                {
        return T_IS_NOT_EQUAL;
 }
-#line 4555 "Zend/zend_language_scanner.c"
+#line 4562 "Zend/zend_language_scanner.c"
 yy354:
                YYDEBUG(354, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4602,11 +4609,11 @@ yy361:
                ++YYCURSOR;
                YYDEBUG(362, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1287 "Zend/zend_language_scanner.l"
+#line 1290 "Zend/zend_language_scanner.l"
                {
        return T_SL_EQUAL;
 }
-#line 4610 "Zend/zend_language_scanner.c"
+#line 4617 "Zend/zend_language_scanner.c"
 yy363:
                YYDEBUG(363, *YYCURSOR);
                ++YYCURSOR;
@@ -4713,7 +4720,7 @@ yy372:
 yy373:
                YYDEBUG(373, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1892 "Zend/zend_language_scanner.l"
+#line 1899 "Zend/zend_language_scanner.l"
                {
        char *s;
        int bprefix = (yytext[0] != '<') ? 1 : 0;
@@ -4734,7 +4741,7 @@ yy373:
        BEGIN(ST_START_HEREDOC);
        return T_START_HEREDOC;
 }
-#line 4738 "Zend/zend_language_scanner.c"
+#line 4745 "Zend/zend_language_scanner.c"
 yy374:
                YYDEBUG(374, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4776,7 +4783,7 @@ yy378:
 yy379:
                YYDEBUG(379, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2063 "Zend/zend_language_scanner.l"
+#line 2070 "Zend/zend_language_scanner.l"
                {
        int bprefix = (yytext[0] != '<') ? 1 : 0;
        char *s;
@@ -4793,7 +4800,7 @@ yy379:
        BEGIN(ST_START_NOWDOC);
        return T_START_NOWDOC;
 }
-#line 4797 "Zend/zend_language_scanner.c"
+#line 4804 "Zend/zend_language_scanner.c"
 yy380:
                YYDEBUG(380, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4807,31 +4814,31 @@ yy381:
                ++YYCURSOR;
                YYDEBUG(383, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1243 "Zend/zend_language_scanner.l"
+#line 1246 "Zend/zend_language_scanner.l"
                {
        return T_IS_NOT_IDENTICAL;
 }
-#line 4815 "Zend/zend_language_scanner.c"
+#line 4822 "Zend/zend_language_scanner.c"
 yy384:
                YYDEBUG(384, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(385, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1263 "Zend/zend_language_scanner.l"
+#line 1266 "Zend/zend_language_scanner.l"
                {
        return T_PLUS_EQUAL;
 }
-#line 4825 "Zend/zend_language_scanner.c"
+#line 4832 "Zend/zend_language_scanner.c"
 yy386:
                YYDEBUG(386, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(387, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1231 "Zend/zend_language_scanner.l"
+#line 1234 "Zend/zend_language_scanner.l"
                {
        return T_INC;
 }
-#line 4835 "Zend/zend_language_scanner.c"
+#line 4842 "Zend/zend_language_scanner.c"
 yy388:
                YYDEBUG(388, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4850,42 +4857,42 @@ yy390:
                }
                YYDEBUG(391, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1223 "Zend/zend_language_scanner.l"
+#line 1226 "Zend/zend_language_scanner.l"
                {
        return T_LIST;
 }
-#line 4858 "Zend/zend_language_scanner.c"
+#line 4865 "Zend/zend_language_scanner.c"
 yy392:
                YYDEBUG(392, *YYCURSOR);
                ++YYCURSOR;
                if ((yych = *YYCURSOR) == '=') goto yy396;
                YYDEBUG(393, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1247 "Zend/zend_language_scanner.l"
+#line 1250 "Zend/zend_language_scanner.l"
                {
        return T_IS_EQUAL;
 }
-#line 4869 "Zend/zend_language_scanner.c"
+#line 4876 "Zend/zend_language_scanner.c"
 yy394:
                YYDEBUG(394, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(395, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1219 "Zend/zend_language_scanner.l"
+#line 1222 "Zend/zend_language_scanner.l"
                {
        return T_DOUBLE_ARROW;
 }
-#line 4879 "Zend/zend_language_scanner.c"
+#line 4886 "Zend/zend_language_scanner.c"
 yy396:
                YYDEBUG(396, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(397, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1239 "Zend/zend_language_scanner.l"
+#line 1242 "Zend/zend_language_scanner.l"
                {
        return T_IS_IDENTICAL;
 }
-#line 4889 "Zend/zend_language_scanner.c"
+#line 4896 "Zend/zend_language_scanner.c"
 yy398:
                YYDEBUG(398, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4977,7 +4984,7 @@ yy405:
                }
                YYDEBUG(416, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1543 "Zend/zend_language_scanner.l"
+#line 1546 "Zend/zend_language_scanner.l"
                {
        if (CG(current_namespace)) {
                *zendlval = *CG(current_namespace);
@@ -4987,7 +4994,7 @@ yy405:
        }
        return T_NS_C;
 }
-#line 4991 "Zend/zend_language_scanner.c"
+#line 4998 "Zend/zend_language_scanner.c"
 yy417:
                YYDEBUG(417, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5005,7 +5012,7 @@ yy417:
                }
                YYDEBUG(421, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1516 "Zend/zend_language_scanner.l"
+#line 1519 "Zend/zend_language_scanner.l"
                {
        char *filename = zend_get_compiled_filename(TSRMLS_C);
        const size_t filename_len = strlen(filename);
@@ -5032,7 +5039,7 @@ yy417:
        zendlval->type = IS_STRING;
        return T_DIR;
 }
-#line 5036 "Zend/zend_language_scanner.c"
+#line 5043 "Zend/zend_language_scanner.c"
 yy422:
                YYDEBUG(422, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5053,13 +5060,13 @@ yy422:
                }
                YYDEBUG(427, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1498 "Zend/zend_language_scanner.l"
+#line 1501 "Zend/zend_language_scanner.l"
                {
        zendlval->value.lval = CG(zend_lineno);
        zendlval->type = IS_LONG;
        return T_LINE;
 }
-#line 5063 "Zend/zend_language_scanner.c"
+#line 5070 "Zend/zend_language_scanner.c"
 yy428:
                YYDEBUG(428, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5086,7 +5093,7 @@ yy428:
                }
                YYDEBUG(435, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1477 "Zend/zend_language_scanner.l"
+#line 1480 "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;
@@ -5107,7 +5114,7 @@ yy428:
        zendlval->type = IS_STRING;
        return T_METHOD_C;
 }
-#line 5111 "Zend/zend_language_scanner.c"
+#line 5118 "Zend/zend_language_scanner.c"
 yy436:
                YYDEBUG(436, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5145,7 +5152,7 @@ yy437:
                }
                YYDEBUG(446, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1461 "Zend/zend_language_scanner.l"
+#line 1464 "Zend/zend_language_scanner.l"
                {
        char *func_name = NULL;
 
@@ -5161,7 +5168,7 @@ yy437:
        zendlval->type = IS_STRING;
        return T_FUNC_C;
 }
-#line 5165 "Zend/zend_language_scanner.c"
+#line 5172 "Zend/zend_language_scanner.c"
 yy447:
                YYDEBUG(447, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5179,7 +5186,7 @@ yy447:
                }
                YYDEBUG(451, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1504 "Zend/zend_language_scanner.l"
+#line 1507 "Zend/zend_language_scanner.l"
                {
        char *filename = zend_get_compiled_filename(TSRMLS_C);
 
@@ -5191,7 +5198,7 @@ yy447:
        zendlval->type = IS_STRING;
        return T_FILE;
 }
-#line 5195 "Zend/zend_language_scanner.c"
+#line 5202 "Zend/zend_language_scanner.c"
 yy452:
                YYDEBUG(452, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5215,7 +5222,7 @@ yy452:
                }
                YYDEBUG(458, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1445 "Zend/zend_language_scanner.l"
+#line 1448 "Zend/zend_language_scanner.l"
                {
        char *class_name = NULL;
 
@@ -5231,7 +5238,7 @@ yy452:
        zendlval->type = IS_STRING;
        return T_CLASS_C;
 }
-#line 5235 "Zend/zend_language_scanner.c"
+#line 5242 "Zend/zend_language_scanner.c"
 yy459:
                YYDEBUG(459, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5293,11 +5300,11 @@ yy470:
                }
                YYDEBUG(471, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1187 "Zend/zend_language_scanner.l"
+#line 1190 "Zend/zend_language_scanner.l"
                {
        return T_HALT_COMPILER;
 }
-#line 5301 "Zend/zend_language_scanner.c"
+#line 5308 "Zend/zend_language_scanner.c"
 yy472:
                YYDEBUG(472, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5317,11 +5324,11 @@ yy474:
                }
                YYDEBUG(475, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1171 "Zend/zend_language_scanner.l"
+#line 1174 "Zend/zend_language_scanner.l"
                {
        return T_USE;
 }
-#line 5325 "Zend/zend_language_scanner.c"
+#line 5332 "Zend/zend_language_scanner.c"
 yy476:
                YYDEBUG(476, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5340,11 +5347,11 @@ yy478:
                }
                YYDEBUG(479, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1215 "Zend/zend_language_scanner.l"
+#line 1218 "Zend/zend_language_scanner.l"
                {
        return T_UNSET;
 }
-#line 5348 "Zend/zend_language_scanner.c"
+#line 5355 "Zend/zend_language_scanner.c"
 yy480:
                YYDEBUG(480, *YYCURSOR);
                ++YYCURSOR;
@@ -5516,11 +5523,11 @@ yy495:
                ++YYCURSOR;
                YYDEBUG(497, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1115 "Zend/zend_language_scanner.l"
+#line 1118 "Zend/zend_language_scanner.l"
                {
        return T_INT_CAST;
 }
-#line 5524 "Zend/zend_language_scanner.c"
+#line 5531 "Zend/zend_language_scanner.c"
 yy498:
                YYDEBUG(498, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5564,11 +5571,11 @@ yy503:
                ++YYCURSOR;
                YYDEBUG(506, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1119 "Zend/zend_language_scanner.l"
+#line 1122 "Zend/zend_language_scanner.l"
                {
        return T_DOUBLE_CAST;
 }
-#line 5572 "Zend/zend_language_scanner.c"
+#line 5579 "Zend/zend_language_scanner.c"
 yy507:
                YYDEBUG(507, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5638,11 +5645,11 @@ yy517:
                ++YYCURSOR;
                YYDEBUG(520, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1123 "Zend/zend_language_scanner.l"
+#line 1126 "Zend/zend_language_scanner.l"
                {
        return T_STRING_CAST;
 }
-#line 5646 "Zend/zend_language_scanner.c"
+#line 5653 "Zend/zend_language_scanner.c"
 yy521:
                YYDEBUG(521, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5675,11 +5682,11 @@ yy524:
                ++YYCURSOR;
                YYDEBUG(527, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1131 "Zend/zend_language_scanner.l"
+#line 1134 "Zend/zend_language_scanner.l"
                {
        return T_ARRAY_CAST;
 }
-#line 5683 "Zend/zend_language_scanner.c"
+#line 5690 "Zend/zend_language_scanner.c"
 yy528:
                YYDEBUG(528, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5717,11 +5724,11 @@ yy532:
                ++YYCURSOR;
                YYDEBUG(535, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1135 "Zend/zend_language_scanner.l"
+#line 1138 "Zend/zend_language_scanner.l"
                {
        return T_OBJECT_CAST;
 }
-#line 5725 "Zend/zend_language_scanner.c"
+#line 5732 "Zend/zend_language_scanner.c"
 yy536:
                YYDEBUG(536, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5762,11 +5769,11 @@ yy541:
                ++YYCURSOR;
                YYDEBUG(543, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1139 "Zend/zend_language_scanner.l"
+#line 1142 "Zend/zend_language_scanner.l"
                {
        return T_BOOL_CAST;
 }
-#line 5770 "Zend/zend_language_scanner.c"
+#line 5777 "Zend/zend_language_scanner.c"
 yy544:
                YYDEBUG(544, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5810,11 +5817,11 @@ yy549:
                ++YYCURSOR;
                YYDEBUG(552, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1127 "Zend/zend_language_scanner.l"
+#line 1130 "Zend/zend_language_scanner.l"
                {
        return T_STRING_CAST;
 }
-#line 5818 "Zend/zend_language_scanner.c"
+#line 5825 "Zend/zend_language_scanner.c"
 yy553:
                YYDEBUG(553, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5847,11 +5854,11 @@ yy556:
                ++YYCURSOR;
                YYDEBUG(559, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1143 "Zend/zend_language_scanner.l"
+#line 1146 "Zend/zend_language_scanner.l"
                {
        return T_UNSET_CAST;
 }
-#line 5855 "Zend/zend_language_scanner.c"
+#line 5862 "Zend/zend_language_scanner.c"
 yy560:
                YYDEBUG(560, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5865,11 +5872,11 @@ yy561:
                }
                YYDEBUG(562, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1111 "Zend/zend_language_scanner.l"
+#line 1114 "Zend/zend_language_scanner.l"
                {
        return T_VAR;
 }
-#line 5873 "Zend/zend_language_scanner.c"
+#line 5880 "Zend/zend_language_scanner.c"
 yy563:
                YYDEBUG(563, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5889,11 +5896,11 @@ yy565:
                }
                YYDEBUG(566, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1103 "Zend/zend_language_scanner.l"
+#line 1106 "Zend/zend_language_scanner.l"
                {
        return T_NEW;
 }
-#line 5897 "Zend/zend_language_scanner.c"
+#line 5904 "Zend/zend_language_scanner.c"
 yy567:
                YYDEBUG(567, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5932,21 +5939,21 @@ yy573:
                }
                YYDEBUG(574, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1167 "Zend/zend_language_scanner.l"
+#line 1170 "Zend/zend_language_scanner.l"
                {
        return T_NAMESPACE;
 }
-#line 5940 "Zend/zend_language_scanner.c"
+#line 5947 "Zend/zend_language_scanner.c"
 yy575:
                YYDEBUG(575, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(576, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1099 "Zend/zend_language_scanner.l"
+#line 1102 "Zend/zend_language_scanner.l"
                {
        return T_PAAMAYIM_NEKUDOTAYIM;
 }
-#line 5950 "Zend/zend_language_scanner.c"
+#line 5957 "Zend/zend_language_scanner.c"
 yy577:
                YYDEBUG(577, *YYCURSOR);
                ++YYCURSOR;
@@ -5968,32 +5975,32 @@ yy579:
                ++YYCURSOR;
                YYDEBUG(580, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1267 "Zend/zend_language_scanner.l"
+#line 1270 "Zend/zend_language_scanner.l"
                {
        return T_MINUS_EQUAL;
 }
-#line 5976 "Zend/zend_language_scanner.c"
+#line 5983 "Zend/zend_language_scanner.c"
 yy581:
                YYDEBUG(581, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(582, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1235 "Zend/zend_language_scanner.l"
+#line 1238 "Zend/zend_language_scanner.l"
                {
        return T_DEC;
 }
-#line 5986 "Zend/zend_language_scanner.c"
+#line 5993 "Zend/zend_language_scanner.c"
 yy583:
                YYDEBUG(583, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(584, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1069 "Zend/zend_language_scanner.l"
+#line 1072 "Zend/zend_language_scanner.l"
                {
        yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
        return T_OBJECT_OPERATOR;
 }
-#line 5997 "Zend/zend_language_scanner.c"
+#line 6004 "Zend/zend_language_scanner.c"
 yy585:
                YYDEBUG(585, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6038,11 +6045,11 @@ yy590:
                }
                YYDEBUG(591, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1211 "Zend/zend_language_scanner.l"
+#line 1214 "Zend/zend_language_scanner.l"
                {
        return T_PUBLIC;
 }
-#line 6046 "Zend/zend_language_scanner.c"
+#line 6053 "Zend/zend_language_scanner.c"
 yy592:
                YYDEBUG(592, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6097,11 +6104,11 @@ yy599:
                }
                YYDEBUG(600, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1207 "Zend/zend_language_scanner.l"
+#line 1210 "Zend/zend_language_scanner.l"
                {
        return T_PROTECTED;
 }
-#line 6105 "Zend/zend_language_scanner.c"
+#line 6112 "Zend/zend_language_scanner.c"
 yy601:
                YYDEBUG(601, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6131,11 +6138,11 @@ yy605:
                }
                YYDEBUG(606, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1203 "Zend/zend_language_scanner.l"
+#line 1206 "Zend/zend_language_scanner.l"
                {
        return T_PRIVATE;
 }
-#line 6139 "Zend/zend_language_scanner.c"
+#line 6146 "Zend/zend_language_scanner.c"
 yy607:
                YYDEBUG(607, *YYCURSOR);
                ++YYCURSOR;
@@ -6144,11 +6151,11 @@ yy607:
                }
                YYDEBUG(608, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1049 "Zend/zend_language_scanner.l"
+#line 1052 "Zend/zend_language_scanner.l"
                {
        return T_PRINT;
 }
-#line 6152 "Zend/zend_language_scanner.c"
+#line 6159 "Zend/zend_language_scanner.c"
 yy609:
                YYDEBUG(609, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6173,11 +6180,11 @@ yy612:
                }
                YYDEBUG(613, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1041 "Zend/zend_language_scanner.l"
+#line 1044 "Zend/zend_language_scanner.l"
                {
        return T_GOTO;
 }
-#line 6181 "Zend/zend_language_scanner.c"
+#line 6188 "Zend/zend_language_scanner.c"
 yy614:
                YYDEBUG(614, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6201,11 +6208,11 @@ yy617:
                }
                YYDEBUG(618, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1175 "Zend/zend_language_scanner.l"
+#line 1178 "Zend/zend_language_scanner.l"
                {
        return T_GLOBAL;
 }
-#line 6209 "Zend/zend_language_scanner.c"
+#line 6216 "Zend/zend_language_scanner.c"
 yy619:
                YYDEBUG(619, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6239,11 +6246,11 @@ yy624:
                }
                YYDEBUG(625, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1033 "Zend/zend_language_scanner.l"
+#line 1036 "Zend/zend_language_scanner.l"
                {
        return T_BREAK;
 }
-#line 6247 "Zend/zend_language_scanner.c"
+#line 6254 "Zend/zend_language_scanner.c"
 yy626:
                YYDEBUG(626, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6283,11 +6290,11 @@ yy632:
                }
                YYDEBUG(633, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1017 "Zend/zend_language_scanner.l"
+#line 1020 "Zend/zend_language_scanner.l"
                {
        return T_SWITCH;
 }
-#line 6291 "Zend/zend_language_scanner.c"
+#line 6298 "Zend/zend_language_scanner.c"
 yy634:
                YYDEBUG(634, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6311,11 +6318,11 @@ yy637:
                }
                YYDEBUG(638, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1191 "Zend/zend_language_scanner.l"
+#line 1194 "Zend/zend_language_scanner.l"
                {
        return T_STATIC;
 }
-#line 6319 "Zend/zend_language_scanner.c"
+#line 6326 "Zend/zend_language_scanner.c"
 yy639:
                YYDEBUG(639, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6342,11 +6349,11 @@ yy642:
                }
                YYDEBUG(643, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1013 "Zend/zend_language_scanner.l"
+#line 1016 "Zend/zend_language_scanner.l"
                {
        return T_AS;
 }
-#line 6350 "Zend/zend_language_scanner.c"
+#line 6357 "Zend/zend_language_scanner.c"
 yy644:
                YYDEBUG(644, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6365,11 +6372,11 @@ yy646:
                }
                YYDEBUG(647, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1227 "Zend/zend_language_scanner.l"
+#line 1230 "Zend/zend_language_scanner.l"
                {
        return T_ARRAY;
 }
-#line 6373 "Zend/zend_language_scanner.c"
+#line 6380 "Zend/zend_language_scanner.c"
 yy648:
                YYDEBUG(648, *YYCURSOR);
                ++YYCURSOR;
@@ -6378,11 +6385,11 @@ yy648:
                }
                YYDEBUG(649, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1319 "Zend/zend_language_scanner.l"
+#line 1322 "Zend/zend_language_scanner.l"
                {
        return T_LOGICAL_AND;
 }
-#line 6386 "Zend/zend_language_scanner.c"
+#line 6393 "Zend/zend_language_scanner.c"
 yy650:
                YYDEBUG(650, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6416,11 +6423,11 @@ yy655:
                }
                YYDEBUG(656, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1195 "Zend/zend_language_scanner.l"
+#line 1198 "Zend/zend_language_scanner.l"
                {
        return T_ABSTRACT;
 }
-#line 6424 "Zend/zend_language_scanner.c"
+#line 6431 "Zend/zend_language_scanner.c"
 yy657:
                YYDEBUG(657, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6444,11 +6451,11 @@ yy660:
                }
                YYDEBUG(661, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 973 "Zend/zend_language_scanner.l"
+#line 976 "Zend/zend_language_scanner.l"
                {
        return T_WHILE;
 }
-#line 6452 "Zend/zend_language_scanner.c"
+#line 6459 "Zend/zend_language_scanner.c"
 yy662:
                YYDEBUG(662, *YYCURSOR);
                ++YYCURSOR;
@@ -6457,11 +6464,11 @@ yy662:
                }
                YYDEBUG(663, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 957 "Zend/zend_language_scanner.l"
+#line 960 "Zend/zend_language_scanner.l"
                {
        return T_IF;
 }
-#line 6465 "Zend/zend_language_scanner.c"
+#line 6472 "Zend/zend_language_scanner.c"
 yy664:
                YYDEBUG(664, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6513,11 +6520,11 @@ yy669:
                }
                YYDEBUG(670, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1179 "Zend/zend_language_scanner.l"
+#line 1182 "Zend/zend_language_scanner.l"
                {
        return T_ISSET;
 }
-#line 6521 "Zend/zend_language_scanner.c"
+#line 6528 "Zend/zend_language_scanner.c"
 yy671:
                YYDEBUG(671, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6571,11 +6578,11 @@ yy677:
 yy678:
                YYDEBUG(678, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1151 "Zend/zend_language_scanner.l"
+#line 1154 "Zend/zend_language_scanner.l"
                {
        return T_INCLUDE;
 }
-#line 6579 "Zend/zend_language_scanner.c"
+#line 6586 "Zend/zend_language_scanner.c"
 yy679:
                YYDEBUG(679, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6604,11 +6611,11 @@ yy683:
                }
                YYDEBUG(684, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1155 "Zend/zend_language_scanner.l"
+#line 1158 "Zend/zend_language_scanner.l"
                {
        return T_INCLUDE_ONCE;
 }
-#line 6612 "Zend/zend_language_scanner.c"
+#line 6619 "Zend/zend_language_scanner.c"
 yy685:
                YYDEBUG(685, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6642,11 +6649,11 @@ yy690:
                }
                YYDEBUG(691, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1057 "Zend/zend_language_scanner.l"
+#line 1060 "Zend/zend_language_scanner.l"
                {
        return T_INTERFACE;
 }
-#line 6650 "Zend/zend_language_scanner.c"
+#line 6657 "Zend/zend_language_scanner.c"
 yy692:
                YYDEBUG(692, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6685,11 +6692,11 @@ yy698:
                }
                YYDEBUG(699, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1009 "Zend/zend_language_scanner.l"
+#line 1012 "Zend/zend_language_scanner.l"
                {
        return T_INSTANCEOF;
 }
-#line 6693 "Zend/zend_language_scanner.c"
+#line 6700 "Zend/zend_language_scanner.c"
 yy700:
                YYDEBUG(700, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6733,11 +6740,11 @@ yy707:
                }
                YYDEBUG(708, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1065 "Zend/zend_language_scanner.l"
+#line 1068 "Zend/zend_language_scanner.l"
                {
        return T_IMPLEMENTS;
 }
-#line 6741 "Zend/zend_language_scanner.c"
+#line 6748 "Zend/zend_language_scanner.c"
 yy709:
                YYDEBUG(709, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6757,11 +6764,11 @@ yy711:
                }
                YYDEBUG(712, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 945 "Zend/zend_language_scanner.l"
+#line 948 "Zend/zend_language_scanner.l"
                {
        return T_TRY;
 }
-#line 6765 "Zend/zend_language_scanner.c"
+#line 6772 "Zend/zend_language_scanner.c"
 yy713:
                YYDEBUG(713, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6780,11 +6787,11 @@ yy715:
                }
                YYDEBUG(716, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 953 "Zend/zend_language_scanner.l"
+#line 956 "Zend/zend_language_scanner.l"
                {
        return T_THROW;
 }
-#line 6788 "Zend/zend_language_scanner.c"
+#line 6795 "Zend/zend_language_scanner.c"
 yy717:
                YYDEBUG(717, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6845,11 +6852,11 @@ yy723:
 yy724:
                YYDEBUG(724, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1159 "Zend/zend_language_scanner.l"
+#line 1162 "Zend/zend_language_scanner.l"
                {
        return T_REQUIRE;
 }
-#line 6853 "Zend/zend_language_scanner.c"
+#line 6860 "Zend/zend_language_scanner.c"
 yy725:
                YYDEBUG(725, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6878,11 +6885,11 @@ yy729:
                }
                YYDEBUG(730, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1163 "Zend/zend_language_scanner.l"
+#line 1166 "Zend/zend_language_scanner.l"
                {
        return T_REQUIRE_ONCE;
 }
-#line 6886 "Zend/zend_language_scanner.c"
+#line 6893 "Zend/zend_language_scanner.c"
 yy731:
                YYDEBUG(731, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6901,11 +6908,11 @@ yy733:
                }
                YYDEBUG(734, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 941 "Zend/zend_language_scanner.l"
+#line 944 "Zend/zend_language_scanner.l"
                {
        return T_RETURN;
 }
-#line 6909 "Zend/zend_language_scanner.c"
+#line 6916 "Zend/zend_language_scanner.c"
 yy735:
                YYDEBUG(735, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6986,11 +6993,11 @@ yy744:
                }
                YYDEBUG(745, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1037 "Zend/zend_language_scanner.l"
+#line 1040 "Zend/zend_language_scanner.l"
                {
        return T_CONTINUE;
 }
-#line 6994 "Zend/zend_language_scanner.c"
+#line 7001 "Zend/zend_language_scanner.c"
 yy746:
                YYDEBUG(746, *YYCURSOR);
                ++YYCURSOR;
@@ -6999,11 +7006,11 @@ yy746:
                }
                YYDEBUG(747, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 937 "Zend/zend_language_scanner.l"
+#line 940 "Zend/zend_language_scanner.l"
                {
        return T_CONST;
 }
-#line 7007 "Zend/zend_language_scanner.c"
+#line 7014 "Zend/zend_language_scanner.c"
 yy748:
                YYDEBUG(748, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7028,11 +7035,11 @@ yy751:
                }
                YYDEBUG(752, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1107 "Zend/zend_language_scanner.l"
+#line 1110 "Zend/zend_language_scanner.l"
                {
        return T_CLONE;
 }
-#line 7036 "Zend/zend_language_scanner.c"
+#line 7043 "Zend/zend_language_scanner.c"
 yy753:
                YYDEBUG(753, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7046,11 +7053,11 @@ yy754:
                }
                YYDEBUG(755, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1053 "Zend/zend_language_scanner.l"
+#line 1056 "Zend/zend_language_scanner.l"
                {
        return T_CLASS;
 }
-#line 7054 "Zend/zend_language_scanner.c"
+#line 7061 "Zend/zend_language_scanner.c"
 yy756:
                YYDEBUG(756, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7070,11 +7077,11 @@ yy758:
                }
                YYDEBUG(759, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1025 "Zend/zend_language_scanner.l"
+#line 1028 "Zend/zend_language_scanner.l"
                {
        return T_CASE;
 }
-#line 7078 "Zend/zend_language_scanner.c"
+#line 7085 "Zend/zend_language_scanner.c"
 yy760:
                YYDEBUG(760, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7088,11 +7095,11 @@ yy761:
                }
                YYDEBUG(762, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 949 "Zend/zend_language_scanner.l"
+#line 952 "Zend/zend_language_scanner.l"
                {
        return T_CATCH;
 }
-#line 7096 "Zend/zend_language_scanner.c"
+#line 7103 "Zend/zend_language_scanner.c"
 yy763:
                YYDEBUG(763, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7143,11 +7150,11 @@ yy771:
                }
                YYDEBUG(772, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 933 "Zend/zend_language_scanner.l"
+#line 936 "Zend/zend_language_scanner.l"
                {
        return T_FUNCTION;
 }
-#line 7151 "Zend/zend_language_scanner.c"
+#line 7158 "Zend/zend_language_scanner.c"
 yy773:
                YYDEBUG(773, *YYCURSOR);
                ++YYCURSOR;
@@ -7171,11 +7178,11 @@ yy773:
 yy774:
                YYDEBUG(774, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 985 "Zend/zend_language_scanner.l"
+#line 988 "Zend/zend_language_scanner.l"
                {
        return T_FOR;
 }
-#line 7179 "Zend/zend_language_scanner.c"
+#line 7186 "Zend/zend_language_scanner.c"
 yy775:
                YYDEBUG(775, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7199,11 +7206,11 @@ yy778:
                }
                YYDEBUG(779, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 993 "Zend/zend_language_scanner.l"
+#line 996 "Zend/zend_language_scanner.l"
                {
        return T_FOREACH;
 }
-#line 7207 "Zend/zend_language_scanner.c"
+#line 7214 "Zend/zend_language_scanner.c"
 yy780:
                YYDEBUG(780, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7222,11 +7229,11 @@ yy782:
                }
                YYDEBUG(783, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1199 "Zend/zend_language_scanner.l"
+#line 1202 "Zend/zend_language_scanner.l"
                {
        return T_FINAL;
 }
-#line 7230 "Zend/zend_language_scanner.c"
+#line 7237 "Zend/zend_language_scanner.c"
 yy784:
                YYDEBUG(784, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7257,11 +7264,11 @@ yy786:
                }
                YYDEBUG(787, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 981 "Zend/zend_language_scanner.l"
+#line 984 "Zend/zend_language_scanner.l"
                {
        return T_DO;
 }
-#line 7265 "Zend/zend_language_scanner.c"
+#line 7272 "Zend/zend_language_scanner.c"
 yy788:
                YYDEBUG(788, *YYCURSOR);
                ++YYCURSOR;
@@ -7270,11 +7277,11 @@ yy788:
                }
                YYDEBUG(789, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 929 "Zend/zend_language_scanner.l"
+#line 932 "Zend/zend_language_scanner.l"
                {
        return T_EXIT;
 }
-#line 7278 "Zend/zend_language_scanner.c"
+#line 7285 "Zend/zend_language_scanner.c"
 yy790:
                YYDEBUG(790, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7309,11 +7316,11 @@ yy795:
                }
                YYDEBUG(796, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1029 "Zend/zend_language_scanner.l"
+#line 1032 "Zend/zend_language_scanner.l"
                {
        return T_DEFAULT;
 }
-#line 7317 "Zend/zend_language_scanner.c"
+#line 7324 "Zend/zend_language_scanner.c"
 yy797:
                YYDEBUG(797, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7337,11 +7344,11 @@ yy800:
                }
                YYDEBUG(801, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1001 "Zend/zend_language_scanner.l"
+#line 1004 "Zend/zend_language_scanner.l"
                {
        return T_DECLARE;
 }
-#line 7345 "Zend/zend_language_scanner.c"
+#line 7352 "Zend/zend_language_scanner.c"
 yy802:
                YYDEBUG(802, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7421,11 +7428,11 @@ yy813:
                }
                YYDEBUG(814, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1061 "Zend/zend_language_scanner.l"
+#line 1064 "Zend/zend_language_scanner.l"
                {
        return T_EXTENDS;
 }
-#line 7429 "Zend/zend_language_scanner.c"
+#line 7436 "Zend/zend_language_scanner.c"
 yy815:
                YYDEBUG(815, *YYCURSOR);
                ++YYCURSOR;
@@ -7434,11 +7441,11 @@ yy815:
                }
                YYDEBUG(816, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 925 "Zend/zend_language_scanner.l"
+#line 928 "Zend/zend_language_scanner.l"
                {
        return T_EXIT;
 }
-#line 7442 "Zend/zend_language_scanner.c"
+#line 7449 "Zend/zend_language_scanner.c"
 yy817:
                YYDEBUG(817, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7452,11 +7459,11 @@ yy818:
                }
                YYDEBUG(819, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1147 "Zend/zend_language_scanner.l"
+#line 1150 "Zend/zend_language_scanner.l"
                {
        return T_EVAL;
 }
-#line 7460 "Zend/zend_language_scanner.c"
+#line 7467 "Zend/zend_language_scanner.c"
 yy820:
                YYDEBUG(820, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7526,11 +7533,11 @@ yy829:
                }
                YYDEBUG(830, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 977 "Zend/zend_language_scanner.l"
+#line 980 "Zend/zend_language_scanner.l"
                {
        return T_ENDWHILE;
 }
-#line 7534 "Zend/zend_language_scanner.c"
+#line 7541 "Zend/zend_language_scanner.c"
 yy831:
                YYDEBUG(831, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7559,11 +7566,11 @@ yy835:
                }
                YYDEBUG(836, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1021 "Zend/zend_language_scanner.l"
+#line 1024 "Zend/zend_language_scanner.l"
                {
        return T_ENDSWITCH;
 }
-#line 7567 "Zend/zend_language_scanner.c"
+#line 7574 "Zend/zend_language_scanner.c"
 yy837:
                YYDEBUG(837, *YYCURSOR);
                ++YYCURSOR;
@@ -7572,11 +7579,11 @@ yy837:
                }
                YYDEBUG(838, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 965 "Zend/zend_language_scanner.l"
+#line 968 "Zend/zend_language_scanner.l"
                {
        return T_ENDIF;
 }
-#line 7580 "Zend/zend_language_scanner.c"
+#line 7587 "Zend/zend_language_scanner.c"
 yy839:
                YYDEBUG(839, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7605,11 +7612,11 @@ yy840:
 yy841:
                YYDEBUG(841, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 989 "Zend/zend_language_scanner.l"
+#line 992 "Zend/zend_language_scanner.l"
                {
        return T_ENDFOR;
 }
-#line 7613 "Zend/zend_language_scanner.c"
+#line 7620 "Zend/zend_language_scanner.c"
 yy842:
                YYDEBUG(842, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7633,11 +7640,11 @@ yy845:
                }
                YYDEBUG(846, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 997 "Zend/zend_language_scanner.l"
+#line 1000 "Zend/zend_language_scanner.l"
                {
        return T_ENDFOREACH;
 }
-#line 7641 "Zend/zend_language_scanner.c"
+#line 7648 "Zend/zend_language_scanner.c"
 yy847:
                YYDEBUG(847, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7671,11 +7678,11 @@ yy852:
                }
                YYDEBUG(853, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1005 "Zend/zend_language_scanner.l"
+#line 1008 "Zend/zend_language_scanner.l"
                {
        return T_ENDDECLARE;
 }
-#line 7679 "Zend/zend_language_scanner.c"
+#line 7686 "Zend/zend_language_scanner.c"
 yy854:
                YYDEBUG(854, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7694,11 +7701,11 @@ yy856:
                }
                YYDEBUG(857, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1183 "Zend/zend_language_scanner.l"
+#line 1186 "Zend/zend_language_scanner.l"
                {
        return T_EMPTY;
 }
-#line 7702 "Zend/zend_language_scanner.c"
+#line 7709 "Zend/zend_language_scanner.c"
 yy858:
                YYDEBUG(858, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7727,11 +7734,11 @@ yy859:
 yy860:
                YYDEBUG(860, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 969 "Zend/zend_language_scanner.l"
+#line 972 "Zend/zend_language_scanner.l"
                {
        return T_ELSE;
 }
-#line 7735 "Zend/zend_language_scanner.c"
+#line 7742 "Zend/zend_language_scanner.c"
 yy861:
                YYDEBUG(861, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7745,11 +7752,11 @@ yy862:
                }
                YYDEBUG(863, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 961 "Zend/zend_language_scanner.l"
+#line 964 "Zend/zend_language_scanner.l"
                {
        return T_ELSEIF;
 }
-#line 7753 "Zend/zend_language_scanner.c"
+#line 7760 "Zend/zend_language_scanner.c"
 yy864:
                YYDEBUG(864, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7763,11 +7770,11 @@ yy865:
                }
                YYDEBUG(866, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1045 "Zend/zend_language_scanner.l"
+#line 1048 "Zend/zend_language_scanner.l"
                {
        return T_ECHO;
 }
-#line 7771 "Zend/zend_language_scanner.c"
+#line 7778 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_LOOKING_FOR_PROPERTY:
@@ -7840,7 +7847,7 @@ yy869:
 yy870:
                YYDEBUG(870, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1074 "Zend/zend_language_scanner.l"
+#line 1077 "Zend/zend_language_scanner.l"
                {
        zendlval->value.str.val = yytext; /* no copying - intentional */
        zendlval->value.str.len = yyleng;
@@ -7848,7 +7855,7 @@ yy870:
        HANDLE_NEWLINES(yytext, yyleng);
        return T_WHITESPACE;
 }
-#line 7852 "Zend/zend_language_scanner.c"
+#line 7859 "Zend/zend_language_scanner.c"
 yy871:
                YYDEBUG(871, *YYCURSOR);
                ++YYCURSOR;
@@ -7856,13 +7863,13 @@ yy871:
 yy872:
                YYDEBUG(872, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1093 "Zend/zend_language_scanner.l"
+#line 1096 "Zend/zend_language_scanner.l"
                {
        yyless(0);
        yy_pop_state(TSRMLS_C);
        goto restart;
 }
-#line 7866 "Zend/zend_language_scanner.c"
+#line 7873 "Zend/zend_language_scanner.c"
 yy873:
                YYDEBUG(873, *YYCURSOR);
                ++YYCURSOR;
@@ -7871,14 +7878,14 @@ yy873:
 yy874:
                YYDEBUG(874, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1086 "Zend/zend_language_scanner.l"
+#line 1089 "Zend/zend_language_scanner.l"
                {
        yy_pop_state(TSRMLS_C);
        zend_copy_value(zendlval, yytext, yyleng);
        zendlval->type = IS_STRING;
        return T_STRING;
 }
-#line 7882 "Zend/zend_language_scanner.c"
+#line 7889 "Zend/zend_language_scanner.c"
 yy875:
                YYDEBUG(875, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7899,11 +7906,11 @@ yy878:
                ++YYCURSOR;
                YYDEBUG(879, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1082 "Zend/zend_language_scanner.l"
+#line 1085 "Zend/zend_language_scanner.l"
                {
        return T_OBJECT_OPERATOR;
 }
-#line 7907 "Zend/zend_language_scanner.c"
+#line 7914 "Zend/zend_language_scanner.c"
 yy880:
                YYDEBUG(880, *YYCURSOR);
                ++YYCURSOR;
@@ -7973,7 +7980,7 @@ yy884:
 yy885:
                YYDEBUG(885, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1361 "Zend/zend_language_scanner.l"
+#line 1364 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, yytext, yyleng);
        zendlval->type = IS_STRING;
@@ -7981,20 +7988,20 @@ yy885:
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
        return T_STRING_VARNAME;
 }
-#line 7985 "Zend/zend_language_scanner.c"
+#line 7992 "Zend/zend_language_scanner.c"
 yy886:
                YYDEBUG(886, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(887, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1370 "Zend/zend_language_scanner.l"
+#line 1373 "Zend/zend_language_scanner.l"
                {
        yyless(0);
        yy_pop_state(TSRMLS_C);
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
        goto restart;
 }
-#line 7998 "Zend/zend_language_scanner.c"
+#line 8005 "Zend/zend_language_scanner.c"
 yy888:
                YYDEBUG(888, *YYCURSOR);
                ++YYCURSOR;
@@ -8456,7 +8463,7 @@ yy925:
                ++YYCURSOR;
                YYDEBUG(926, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2106 "Zend/zend_language_scanner.l"
+#line 2113 "Zend/zend_language_scanner.l"
                {
        char *end = yytext + yyleng - 1;
 
@@ -8499,7 +8506,7 @@ yy925:
                yymore();
        }
 }
-#line 8503 "Zend/zend_language_scanner.c"
+#line 8510 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_ONE_LINE_COMMENT:
@@ -8556,11 +8563,11 @@ yy929:
 yy930:
                YYDEBUG(930, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1726 "Zend/zend_language_scanner.l"
+#line 1731 "Zend/zend_language_scanner.l"
                {
        yymore();
 }
-#line 8564 "Zend/zend_language_scanner.c"
+#line 8571 "Zend/zend_language_scanner.c"
 yy931:
                YYDEBUG(931, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -8583,7 +8590,7 @@ yy933:
 yy935:
                YYDEBUG(935, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1730 "Zend/zend_language_scanner.l"
+#line 1735 "Zend/zend_language_scanner.l"
                {
        switch (yytext[yyleng-1]) {
                case '?': case '%': case '>':
@@ -8601,7 +8608,7 @@ yy935:
                        return T_COMMENT;
        }
 }
-#line 8605 "Zend/zend_language_scanner.c"
+#line 8612 "Zend/zend_language_scanner.c"
 yy936:
                YYDEBUG(936, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -8614,7 +8621,7 @@ yy937:
                ++YYCURSOR;
                YYDEBUG(939, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1748 "Zend/zend_language_scanner.l"
+#line 1753 "Zend/zend_language_scanner.l"
                {
        zendlval->value.str.val = yytext; /* no copying - intentional */
        zendlval->value.str.len = yyleng;
@@ -8623,7 +8630,7 @@ yy937:
        CG(zend_lineno)++;
        return T_COMMENT;
 }
-#line 8627 "Zend/zend_language_scanner.c"
+#line 8634 "Zend/zend_language_scanner.c"
 yy940:
                YYDEBUG(940, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -8633,9 +8640,9 @@ yy941:
                ++YYCURSOR;
                YYDEBUG(942, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1757 "Zend/zend_language_scanner.l"
+#line 1762 "Zend/zend_language_scanner.l"
                {
-    if (CG(asp_tags) || yytext[yyleng-2] != '%') { /* asp comment? */
+       if (CG(asp_tags) || yytext[yyleng-2] != '%') { /* asp comment? */
                zendlval->value.str.val = yytext; /* no copying - intentional */
                zendlval->value.str.len = yyleng-2;
                zendlval->type = IS_STRING;
@@ -8646,7 +8653,7 @@ yy941:
                yymore();
        }
 }
-#line 8650 "Zend/zend_language_scanner.c"
+#line 8657 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_START_HEREDOC:
@@ -8703,13 +8710,13 @@ yy945:
 yy946:
                YYDEBUG(946, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1920 "Zend/zend_language_scanner.l"
+#line 1927 "Zend/zend_language_scanner.l"
                {
        yyless(0);
        BEGIN(ST_HEREDOC);
        goto restart;
 }
-#line 8713 "Zend/zend_language_scanner.c"
+#line 8720 "Zend/zend_language_scanner.c"
 yy947:
                YYDEBUG(947, *YYCURSOR);
                yyaccept = 0;
@@ -8754,7 +8761,7 @@ yy952:
                ++YYCURSOR;
                YYDEBUG(953, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1926 "Zend/zend_language_scanner.l"
+#line 1933 "Zend/zend_language_scanner.l"
                {
        int label_len = yyleng - 1;
 
@@ -8776,7 +8783,7 @@ yy952:
                yymore();
        }
 }
-#line 8780 "Zend/zend_language_scanner.c"
+#line 8787 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_START_NOWDOC:
@@ -8833,13 +8840,13 @@ yy956:
 yy957:
                YYDEBUG(957, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2080 "Zend/zend_language_scanner.l"
+#line 2087 "Zend/zend_language_scanner.l"
                {
        yyless(0);
        BEGIN(ST_NOWDOC);
        goto restart;
 }
-#line 8843 "Zend/zend_language_scanner.c"
+#line 8850 "Zend/zend_language_scanner.c"
 yy958:
                YYDEBUG(958, *YYCURSOR);
                yyaccept = 0;
@@ -8884,7 +8891,7 @@ yy963:
                ++YYCURSOR;
                YYDEBUG(964, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2086 "Zend/zend_language_scanner.l"
+#line 2093 "Zend/zend_language_scanner.l"
                {
        int label_len = yyleng - 1;
 
@@ -8904,7 +8911,7 @@ yy963:
                yymore();
        }
 }
-#line 8908 "Zend/zend_language_scanner.c"
+#line 8915 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_VAR_OFFSET:
@@ -9005,7 +9012,7 @@ yy967:
 yy968:
                YYDEBUG(968, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1420 "Zend/zend_language_scanner.l"
+#line 1423 "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);
@@ -9017,7 +9024,7 @@ yy968:
        }
        return T_NUM_STRING;
 }
-#line 9021 "Zend/zend_language_scanner.c"
+#line 9028 "Zend/zend_language_scanner.c"
 yy969:
                YYDEBUG(969, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -9037,23 +9044,23 @@ yy970:
 yy971:
                YYDEBUG(971, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1701 "Zend/zend_language_scanner.l"
+#line 1706 "Zend/zend_language_scanner.l"
                {
        /* Only '[' can be valid, but returning other tokens will allow a more explicit parse error */
        return yytext[0];
 }
-#line 9046 "Zend/zend_language_scanner.c"
+#line 9053 "Zend/zend_language_scanner.c"
 yy972:
                YYDEBUG(972, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(973, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1696 "Zend/zend_language_scanner.l"
+#line 1701 "Zend/zend_language_scanner.l"
                {
        yy_pop_state(TSRMLS_C);
        return ']';
 }
-#line 9057 "Zend/zend_language_scanner.c"
+#line 9064 "Zend/zend_language_scanner.c"
 yy974:
                YYDEBUG(974, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -9063,7 +9070,7 @@ yy975:
                ++YYCURSOR;
                YYDEBUG(976, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1706 "Zend/zend_language_scanner.l"
+#line 1711 "Zend/zend_language_scanner.l"
                {
        /* Invalid rule to return a more explicit parse error with proper line number */
        yyless(0);
@@ -9071,7 +9078,7 @@ yy975:
        ZVAL_EMPTY_STRING(zendlval); /* Empty since it won't be used */
        return T_ENCAPSED_AND_WHITESPACE;
 }
-#line 9075 "Zend/zend_language_scanner.c"
+#line 9082 "Zend/zend_language_scanner.c"
 yy977:
                YYDEBUG(977, *YYCURSOR);
                ++YYCURSOR;
@@ -9080,24 +9087,24 @@ yy977:
 yy978:
                YYDEBUG(978, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1714 "Zend/zend_language_scanner.l"
+#line 1719 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, yytext, yyleng);
        zendlval->type = IS_STRING;
        return T_STRING;
 }
-#line 9090 "Zend/zend_language_scanner.c"
+#line 9097 "Zend/zend_language_scanner.c"
 yy979:
                YYDEBUG(979, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(980, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2172 "Zend/zend_language_scanner.l"
+#line 2179 "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 9101 "Zend/zend_language_scanner.c"
+#line 9108 "Zend/zend_language_scanner.c"
 yy981:
                YYDEBUG(981, *YYCURSOR);
                ++YYCURSOR;
@@ -9133,13 +9140,13 @@ yy983:
 yy985:
                YYDEBUG(985, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1690 "Zend/zend_language_scanner.l"
+#line 1695 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 9143 "Zend/zend_language_scanner.c"
+#line 9150 "Zend/zend_language_scanner.c"
 yy986:
                YYDEBUG(986, *YYCURSOR);
                ++YYCURSOR;
@@ -9171,14 +9178,14 @@ yy990:
 yy992:
                YYDEBUG(992, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1432 "Zend/zend_language_scanner.l"
+#line 1435 "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 9182 "Zend/zend_language_scanner.c"
+#line 9189 "Zend/zend_language_scanner.c"
 yy993:
                YYDEBUG(993, *YYCURSOR);
                ++YYCURSOR;
@@ -9191,6 +9198,6 @@ yy993:
                goto yy992;
        }
 }
-#line 2177 "Zend/zend_language_scanner.l"
+#line 2184 "Zend/zend_language_scanner.l"
 
 }
index 273f00d1ff5717744cd90aad395fe007065d9be2..3419785179310a69a56bc272d692468083d70e88 100644 (file)
@@ -38,12 +38,12 @@ typedef struct _zend_lex_state {
 
 #ifdef ZEND_MULTIBYTE
        /* original (unfiltered) script */
-       char *script_org;
-       int script_org_size;
+       unsigned char *script_org;
+       size_t script_org_size;
 
        /* filtered script */
-       char *script_filtered;
-       int script_filtered_size;
+       unsigned char *script_filtered;
+       size_t script_filtered_size;
 
        /* input/ouput filters */
        zend_encoding_filter input_filter;
index 39f2c5b30cf2ff64806342c5c41c74e85f95cb02..76ccedb1d9514a6bdd415bcedfdfc4816eb84c6a 100644 (file)
@@ -262,7 +262,7 @@ ZEND_API int open_file_for_scanning(zend_file_handle *file_handle TSRMLS_DC)
 
        if (size != -1) {
 #ifdef ZEND_MULTIBYTE
-               if (zend_multibyte_read_script(buf, size TSRMLS_CC) != 0) {
+               if (zend_multibyte_read_script((unsigned char *)buf, size TSRMLS_CC) != 0) {
                        return FAILURE;
                }
 
@@ -271,14 +271,14 @@ ZEND_API int open_file_for_scanning(zend_file_handle *file_handle TSRMLS_DC)
                zend_multibyte_set_filter(NULL TSRMLS_CC);
 
                if (!SCNG(input_filter)) {
-                       SCNG(script_filtered) = (char*)emalloc(SCNG(script_org_size)+1);
+                       SCNG(script_filtered) = (unsigned 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);
+               yy_scan_buffer((char *)SCNG(script_filtered), SCNG(script_filtered_size) TSRMLS_CC);
 #else /* !ZEND_MULTIBYTE */
                yy_scan_buffer(buf, size TSRMLS_CC);
 #endif /* ZEND_MULTIBYTE */
@@ -419,20 +419,20 @@ ZEND_API int zend_prepare_string_for_scanning(zval *str, char *filename TSRMLS_D
        SCNG(yy_in)=NULL;
 
 #ifdef ZEND_MULTIBYTE
-       SCNG(script_org) = estrdup(str->value.str.val);
+       SCNG(script_org) = (unsigned char *)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);
+               SCNG(script_filtered) = (unsigned 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);    
+       yy_scan_buffer((char *)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 */
@@ -581,10 +581,9 @@ END_EXTERN_C()
 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;
+       size_t offset, original_offset, length, free_flag, new_len;
+       unsigned char *p;
        zend_encoding *new_encoding;
-       unsigned char *yy_c_buf_p;
 
        /* calculate current position */
        offset = original_offset = YYCURSOR - SCNG(yy_start);
@@ -609,25 +608,28 @@ ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter old_input_filter
 
        /* convert and set */
        if (!SCNG(input_filter)) {
-               length = SCNG(script_org_size)-offset-1;
-               p = SCNG(script_org)+offset+1;
+               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);
+               SCNG(input_filter)(&p, &length, SCNG(script_org) + offset, SCNG(script_org_size) - offset TSRMLS_CC);
                free_flag = 1;
        }
 
-       new_len = original_offset+length+1;
+       new_len = original_offset + length;
 
-       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);
+       if (new_len > YYLIMIT - SCNG(yy_start)) {
+               unsigned char *new_yy_start = erealloc(SCNG(yy_start), new_len);
+               SCNG(yy_cursor) = new_yy_start + (SCNG(yy_cursor) - SCNG(yy_start));
+               SCNG(yy_marker) = new_yy_start + (SCNG(yy_marker) - SCNG(yy_start));
+               SCNG(yy_text) = new_yy_start + (SCNG(yy_text) - SCNG(yy_start));
+               SCNG(yy_start) = new_yy_start;
+               SCNG(script_filtered) = new_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);
+       SCNG(yy_limit) = SCNG(yy_start) + new_len;
+       memmove(SCNG(yy_start) + original_offset, p, length);
 
        if (free_flag) {
                efree(p);
@@ -637,7 +639,7 @@ ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter old_input_filter
 
 ZEND_API int zend_multibyte_yyinput(zend_file_handle *file_handle, char *buf, size_t len TSRMLS_DC)
 {
-       int c = '*', n;
+       size_t n;
 
        if (CG(interactive) == 0) {
                if (zend_stream_fixup(file_handle, &buf, &len TSRMLS_CC) == FAILURE) {
@@ -664,26 +666,23 @@ ZEND_API int zend_multibyte_yyinput(zend_file_handle *file_handle, char *buf, si
        n = len;
 
        SCNG(script_org_size) = n;
-       SCNG(script_org) = (char*)emalloc(SCNG(script_org_size) + 1);
+       SCNG(script_org) = (unsigned 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)
+ZEND_API int zend_multibyte_read_script(unsigned char *buf, size_t 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));
+       SCNG(script_org) = (unsigned 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) = (unsigned char*)erealloc(SCNG(script_org), SCNG(script_org_size) + 1);
        *(SCNG(script_org)+SCNG(script_org_size)) = '\0';
 
        return 0;
@@ -692,7 +691,9 @@ ZEND_API int zend_multibyte_read_script(char *buf, int n TSRMLS_DC)
 
 # 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); \
+               size_t sz = 0; \
+               SCNG(output_filter)((unsigned char **)&(zendlval->value.str.val), &sz, (unsigned char *)yytext, (size_t)yyleng TSRMLS_CC); \
+               zendlval->value.str.len = sz; \
        } else { \
                zendlval->value.str.val = (char *) estrndup(yytext, yyleng); \
                zendlval->value.str.len = yyleng; \
@@ -807,8 +808,10 @@ static void zend_scan_escape_string(zval *zendlval, char *str, int len, char quo
        *t = 0;
 #ifdef ZEND_MULTIBYTE
        if (SCNG(output_filter)) {
+               size_t sz = 0;
                s = zendlval->value.str.val;
-               SCNG(output_filter)(&(zendlval->value.str.val), &(zendlval->value.str.len), s, zendlval->value.str.len TSRMLS_CC);
+               SCNG(output_filter)((unsigned char **)&(zendlval->value.str.val), &sz, (unsigned char *)s, (size_t)zendlval->value.str.len TSRMLS_CC);
+               zendlval->value.str.len = sz;
                efree(s);
        }
 #endif /* ZEND_MULTIBYTE */
@@ -1648,7 +1651,9 @@ 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);
+               size_t sz = 0;
+               readsize = SCNG(output_filter)((unsigned char **)&(zendlval->value.str.val), &sz, (unsigned char *)yytext, (size_t)yyleng TSRMLS_CC);
+               zendlval->value.str.len = sz;
                if (readsize < yyleng) {
                        yyless(readsize);
                }
@@ -1755,7 +1760,7 @@ inline_char_handler:
 }
 
 <ST_ONE_LINE_COMMENT>"?>"|"%>" {
-    if (CG(asp_tags) || yytext[yyleng-2] != '%') { /* asp comment? */
+       if (CG(asp_tags) || yytext[yyleng-2] != '%') { /* asp comment? */
                zendlval->value.str.val = yytext; /* no copying - intentional */
                zendlval->value.str.len = yyleng-2;
                zendlval->type = IS_STRING;
@@ -1874,8 +1879,10 @@ inline_char_handler:
 
 #ifdef ZEND_MULTIBYTE
        if (SCNG(output_filter)) {
+               size_t sz = 0;
                s = zendlval->value.str.val;
-               SCNG(output_filter)(&(zendlval->value.str.val), &(zendlval->value.str.len), s, zendlval->value.str.len TSRMLS_CC);
+               SCNG(output_filter)((unsigned char **)&(zendlval->value.str.val), &sz, (unsigned char *)s, (size_t)zendlval->value.str.len TSRMLS_CC);
+               zendlval->value.str.len = sz;
                efree(s);
        }
 #endif /* ZEND_MULTIBYTE */
@@ -1992,7 +1999,7 @@ inline_char_handler:
 }
 
 <ST_END_HEREDOC>{ANY_CHAR} {
-       SCNG(yy_text) = Z_STRVAL_P(zendlval) = CG(heredoc);
+       SCNG(yy_text) = (unsigned char *)(Z_STRVAL_P(zendlval) = CG(heredoc));
        SCNG(yy_leng) = Z_STRLEN_P(zendlval) = CG(heredoc_len);
        CG(heredoc) = NULL;
        CG(heredoc_len) = 0;
@@ -2147,7 +2154,7 @@ inline_char_handler:
 }
 
 <ST_END_NOWDOC>{ANY_CHAR} {
-       SCNG(yy_text) = Z_STRVAL_P(zendlval) = CG(heredoc);
+       SCNG(yy_text) = (unsigned char*)(Z_STRVAL_P(zendlval) = CG(heredoc));
        SCNG(yy_leng) = Z_STRLEN_P(zendlval) = CG(heredoc_len);
        CG(heredoc) = NULL;
        CG(heredoc_len) = 0;
index 1ff758e680243a3524fb7e87def52b8be3413f84..fbd9f33cabac324afdc3d5c6dccf84461dbc58f5 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.6.dev on Tue Jul  8 16:16:41 2008 */
+/* Generated by re2c 0.13.5 on Fri Jul 25 07:14:28 2008 */
 #line 3 "Zend/zend_language_scanner_defs.h"
 
 enum YYCONDTYPE {
index 6f4e86b65a2cc5702d7eba6f328379db148fbd2c..9f47298f6471db84d1e39a638df4394165e7d084 100644 (file)
 #include "zend_multibyte.h"
 
 #ifdef ZEND_MULTIBYTE
-static int zend_multibyte_encoding_filter(char **to, int *to_length, const char *to_encoding, const char *from, int from_length, const char *from_encoding TSRMLS_DC);
-int sjis_input_filter(char **buf, int *length, const char *sjis, int sjis_length TSRMLS_DC);
-int sjis_output_filter(char **buf, int *length, const char *sjis, int sjis_length TSRMLS_DC);
-static char* zend_multibyte_assemble_encoding_list(zend_encoding **encoding_list, int encoding_list_size);
-static int zend_multibyte_parse_encoding_list(const char *encoding_list, int encoding_list_size, zend_encoding ***result, int *result_size);
-static zend_encoding* zend_multibyte_find_script_encoding(zend_encoding *onetime_encoding TSRMLS_DC);
-static zend_encoding* zend_multibyte_detect_unicode(TSRMLS_D);
-static zend_encoding* zend_multibyte_detect_utf_encoding(char *script, int script_size TSRMLS_DC);
+static size_t zend_multibyte_encoding_filter(unsigned char **to, size_t *to_length, const char *to_encoding, const unsigned char *from, size_t from_length, const char *from_encoding TSRMLS_DC);
+size_t sjis_input_filter(unsigned char **buf, size_t *length, const unsigned char *sjis, size_t sjis_length TSRMLS_DC);
+size_t sjis_output_filter(unsigned char **buf, size_t *length, const unsigned char *sjis, size_t sjis_length TSRMLS_DC);
+static char* zend_multibyte_assemble_encoding_list(zend_encoding **encoding_list, size_t encoding_list_size);
+static int zend_multibyte_parse_encoding_list(const char *encoding_list,
+size_t encoding_list_size, zend_encoding ***result, size_t *result_size);
+static zend_encoding *zend_multibyte_find_script_encoding(zend_encoding *onetime_encoding TSRMLS_DC);
+static zend_encoding *zend_multibyte_detect_unicode(TSRMLS_D);
+static zend_encoding *zend_multibyte_detect_utf_encoding(const unsigned char *script, size_t script_size TSRMLS_DC);
 
 /*
  * encodings
@@ -475,7 +476,8 @@ zend_encoding *zend_encoding_table[] = {
 
 
 
-ZEND_API int zend_multibyte_set_script_encoding(char *encoding_list, int encoding_list_size TSRMLS_DC)
+ZEND_API int zend_multibyte_set_script_encoding(const char *encoding_list,
+size_t encoding_list_size TSRMLS_DC)
 {
        if (CG(script_encoding_list)) {
                efree(CG(script_encoding_list));
@@ -493,7 +495,7 @@ ZEND_API int zend_multibyte_set_script_encoding(char *encoding_list, int encodin
 }
 
 
-ZEND_API int zend_multibyte_set_internal_encoding(char *encoding_name, int encoding_name_size TSRMLS_DC)
+ZEND_API int zend_multibyte_set_internal_encoding(const char *encoding_name TSRMLS_DC)
 {
        CG(internal_encoding) = zend_multibyte_fetch_encoding(encoding_name);
        return 0;
@@ -558,7 +560,7 @@ ZEND_API int zend_multibyte_set_filter(zend_encoding *onetime_encoding TSRMLS_DC
 }
 
 
-ZEND_API zend_encoding* zend_multibyte_fetch_encoding(char *encoding_name)
+ZEND_API zend_encoding* zend_multibyte_fetch_encoding(const char *encoding_name)
 {
        int i, j;
        zend_encoding *encoding;
@@ -568,7 +570,7 @@ ZEND_API zend_encoding* zend_multibyte_fetch_encoding(char *encoding_name)
        }
 
        for (i = 0; (encoding = zend_encoding_table[i]) != NULL; i++) {
-               if (zend_binary_strcasecmp((char*)encoding->name, strlen(encoding->name), encoding_name, strlen(encoding_name)) == 0) {
+               if (zend_binary_strcasecmp(encoding->name, strlen(encoding->name), encoding_name, strlen(encoding_name)) == 0) {
                        return encoding;
                }
        }
@@ -576,7 +578,7 @@ ZEND_API zend_encoding* zend_multibyte_fetch_encoding(char *encoding_name)
        for (i = 0; (encoding = zend_encoding_table[i]) != NULL; i++) {
                if (encoding->aliases != NULL) {
                        for (j = 0; (*encoding->aliases)[j] != NULL; j++) {
-                               if (zend_binary_strcasecmp((char*)(*encoding->aliases)[j], strlen((*encoding->aliases)[j]), encoding_name, strlen(encoding_name)) == 0) {
+                               if (zend_binary_strcasecmp((*encoding->aliases)[j], strlen((*encoding->aliases)[j]), encoding_name, strlen(encoding_name)) == 0) {
                                        return encoding;
                                }
                        }
@@ -587,7 +589,8 @@ ZEND_API zend_encoding* zend_multibyte_fetch_encoding(char *encoding_name)
 }
 
 
-ZEND_API int zend_multibyte_script_encoding_filter(char **to, int *to_length, const char *from, int from_length TSRMLS_DC)
+ZEND_API size_t zend_multibyte_script_encoding_filter(unsigned char **to, size_t
+*to_length, const unsigned char *from, size_t from_length TSRMLS_DC)
 {
        const char *name;
 
@@ -600,7 +603,7 @@ ZEND_API int zend_multibyte_script_encoding_filter(char **to, int *to_length, co
        return zend_multibyte_encoding_filter(to, to_length, name, from, from_length, LANG_SCNG(script_encoding)->name TSRMLS_CC);
 }
 
-ZEND_API int zend_multibyte_internal_encoding_filter(char **to, int *to_length, const char *from, int from_length TSRMLS_DC)
+ZEND_API size_t zend_multibyte_internal_encoding_filter(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length TSRMLS_DC)
 {
        const char *name;
 
@@ -613,9 +616,9 @@ ZEND_API int zend_multibyte_internal_encoding_filter(char **to, int *to_length,
        return zend_multibyte_encoding_filter(to, to_length, LANG_SCNG(internal_encoding)->name, from, from_length, name TSRMLS_CC);
 }
 
-static int zend_multibyte_encoding_filter(char **to, int *to_length, const char *to_encoding, const char *from, int from_length, const char *from_encoding TSRMLS_DC)
+static size_t zend_multibyte_encoding_filter(unsigned char **to, size_t *to_length, const char *to_encoding, const unsigned char *from, size_t from_length, const char *from_encoding TSRMLS_DC)
 {
-       int oddlen;
+       size_t oddlen;
 
        if (!CG(encoding_converter)) {
                return 0;
@@ -658,21 +661,22 @@ static const unsigned char table_sjis[] = { /* 0x80-0x9f,0xE0-0xEF */
   3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 0, 0, 0
 };
 
-int sjis_input_filter(char **buf, int *length, const char *sjis, int sjis_length TSRMLS_DC)
+size_t sjis_input_filter(unsigned char **buf, size_t *length, const unsigned char *sjis, size_t sjis_length TSRMLS_DC)
 {
-       unsigned char *p, *q;
+       const unsigned char *p;
+       unsigned char *q;
        unsigned char  c1, c2;
 
-       *buf = (char*)emalloc(sjis_length*3/2+1);
+       *buf = (unsigned char*)emalloc(sjis_length * 3 / 2 + 1);
        if (!*buf)
                return 0;
        *length = 0;
 
-       p = (unsigned char*)sjis;
-       q = (unsigned char*)*buf;
+       p = sjis;
+       q = *buf;
 
        /* convert [SJIS -> EUC-JP] (for lex scan) -- some other better ways? */
-       while (*p && (p-(unsigned char*)sjis) < sjis_length) {
+       while (*p && (p - sjis) < sjis_length) {
                if (!(*p & 0x80)) {
                        *q++ = *p++;
                        continue;
@@ -694,7 +698,7 @@ int sjis_input_filter(char **buf, int *length, const char *sjis, int sjis_length
                if (table_sjis[*p] == 2) {
                        /* 2 byte kanji code */
                        c1 = *p++;
-                       if (!*p || (p-(unsigned char*)sjis) >= sjis_length) {
+                       if (!*p || (p - sjis) >= sjis_length) {
                                break;
                        }
                        c2 = *p++;
@@ -725,11 +729,11 @@ int sjis_input_filter(char **buf, int *length, const char *sjis, int sjis_length
                         * so, these code are for perfect RESTORING in sjis_output_filter()
                         */
                        c1 = *p++;
-                       if (!*p || (p-(unsigned char*)sjis) >= sjis_length) {
+                       if (!*p || (p - sjis) >= sjis_length) {
                                break;
                        }
                        c2 = *p++;
-                       *q++ = (char)0x8f;
+                       *q++ = 0x8f;
                        /*
                         * MAP TO (EUC-JP):
                         * type A: 0xeba1 - 0xf4fe
@@ -754,8 +758,8 @@ int sjis_input_filter(char **buf, int *length, const char *sjis, int sjis_length
                        *q++ = c2;
                }
        }
-       *q = (char)NULL;
-       *length = (char*)q - *buf;
+       *q = '\0';
+       *length = q - *buf;
 
        return *length;
 }
@@ -779,18 +783,18 @@ static const unsigned char table_eucjp[] = { /* 0xA1-0xFE */
   2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
 };
 
-int sjis_output_filter(char **sjis, int *sjis_length, const char *buf, int length TSRMLS_DC)
+size_t sjis_output_filter(unsigned char **sjis, size_t *sjis_length, const unsigned char *buf, size_t length TSRMLS_DC)
 {
        unsigned char c1, c2;
-       char *p;
-       const char *q;
+       unsigned char *p;
+       const unsigned char *q;
 
        if (!sjis || !sjis_length) {
                return 0;
        }
 
        /* always Shift_JIS <= EUC-JP */
-       *sjis = (char*)emalloc(length+1);
+       *sjis = (unsigned char*)emalloc(length+1);
        if (!sjis) {
                return 0;
        }
@@ -798,14 +802,14 @@ int sjis_output_filter(char **sjis, int *sjis_length, const char *buf, int lengt
        q = buf;
 
        /* restore converted strings [EUC-JP -> Shift_JIS] */
-       while (*q) {
+       while (*q && (q - buf) < length) {
                if (!(*q & 0x80)) {
                        *p++ = *q++;
                        continue;
                }
 
                /* hankaku kana */
-               if (*q == (char)0x8e) {
+               if (*q == 0x8e) {
                        q++;
                        if (*q) {
                                *p++ = *q++;
@@ -814,7 +818,7 @@ int sjis_output_filter(char **sjis, int *sjis_length, const char *buf, int lengt
                }
 
                /* 2 byte kanji code */
-               if (table_eucjp[(unsigned char)*q] == 2) {
+               if (table_eucjp[*q] == 2) {
                        c1 = (*q++ & ~0x80) & 0xff;
                        if (*q) {
                                c2 = (*q++ & ~0x80) & 0xff;
@@ -837,7 +841,7 @@ int sjis_output_filter(char **sjis, int *sjis_length, const char *buf, int lengt
                        continue;
                }
 
-               if (*q == (char)0x8f) {
+               if (*q == 0x8f) {
                        q++;
                        if (*q) {
                                c1 = (*q++ & ~0x80) & 0xff;
@@ -882,7 +886,7 @@ int sjis_output_filter(char **sjis, int *sjis_length, const char *buf, int lengt
 }
 
 
-static char* zend_multibyte_assemble_encoding_list(zend_encoding **encoding_list, int encoding_list_size)
+static char *zend_multibyte_assemble_encoding_list(zend_encoding **encoding_list, size_t encoding_list_size)
 {
        int i, list_size = 0;
        const char *name;
@@ -901,7 +905,7 @@ static char* zend_multibyte_assemble_encoding_list(zend_encoding **encoding_list
                                if (!list) {
                                        return NULL;
                                }
-                               *list = (char)NULL;
+                               *list = '\0';
                        } else {
                                list = (char*)erealloc(list, list_size);
                                if (!list) {
@@ -916,7 +920,8 @@ static char* zend_multibyte_assemble_encoding_list(zend_encoding **encoding_list
 }
 
 
-static int zend_multibyte_parse_encoding_list(const char *encoding_list, int encoding_list_size, zend_encoding ***result, int *result_size)
+static int zend_multibyte_parse_encoding_list(const char *encoding_list,
+size_t encoding_list_size, zend_encoding ***result, size_t *result_size)
 {
        int n, size;
        char *p, *p1, *p2, *endp, *tmpstr;
@@ -1034,7 +1039,7 @@ static zend_encoding* zend_multibyte_detect_unicode(TSRMLS_D)
 {
        zend_encoding *script_encoding = NULL;
        int bom_size;
-       char *script;
+       unsigned char *script;
 
        if (LANG_SCNG(script_org_size) < sizeof(BOM_UTF32_LE)-1) {
                return NULL;
@@ -1060,7 +1065,7 @@ static zend_encoding* zend_multibyte_detect_unicode(TSRMLS_D)
 
        if (script_encoding) {
                /* remove BOM */
-               script = (char*)emalloc(LANG_SCNG(script_org_size)+1-bom_size);
+               script = (unsigned char*)emalloc(LANG_SCNG(script_org_size)+1-bom_size);
                memcpy(script, LANG_SCNG(script_org)+bom_size, LANG_SCNG(script_org_size)+1-bom_size);
                efree(LANG_SCNG(script_org));
                LANG_SCNG(script_org) = script;
@@ -1078,9 +1083,9 @@ static zend_encoding* zend_multibyte_detect_unicode(TSRMLS_D)
        return NULL;
 }
 
-static zend_encoding* zend_multibyte_detect_utf_encoding(char *script, int script_size TSRMLS_DC)
+static zend_encoding *zend_multibyte_detect_utf_encoding(const unsigned char *script, size_t script_size TSRMLS_DC)
 {
-       char *p;
+       const unsigned char *p;
        int wchar_size = 2;
        int le = 0;
 
@@ -1091,7 +1096,7 @@ static zend_encoding* zend_multibyte_detect_utf_encoding(char *script, int scrip
                if (!p) {
                        break;
                }
-               if (*(p+1) == (char)NULL && *(p+2) == (char)NULL) {
+               if (*(p+1) == '\0' && *(p+2) == '\0') {
                        wchar_size = 4;
                        break;
                }
@@ -1103,11 +1108,11 @@ static zend_encoding* zend_multibyte_detect_utf_encoding(char *script, int scrip
        /* BE or LE? */
        p = script;
        while ((p-script) < script_size) {
-               if (*p == (char)NULL && *(p+wchar_size-1) != (char)NULL) {
+               if (*p == '\0' && *(p+wchar_size-1) != '\0') {
                        /* BE */
                        le = 0;
                        break;
-               } else if (*p != (char)NULL && *(p+wchar_size-1) == (char)NULL) {
+               } else if (*p != '\0' && *(p+wchar_size-1) == '\0') {
                        /* LE* */
                        le = 1;
                        break;
index 874cbe6f06ecb92541374c5bcedae989d8cc948f..1214da1e87166ae92b5d389f952a0e80627caa5a 100644 (file)
 #define        BOM_UTF16_LE    "\xff\xfe"
 #define        BOM_UTF8                "\xef\xbb\xbf"
 
-typedef int (*zend_encoding_filter)(char **str, int *str_length, const char *buf, int length TSRMLS_DC);
+typedef size_t (*zend_encoding_filter)(unsigned char **str, size_t *str_length, const unsigned char *buf, size_t length TSRMLS_DC);
 
-typedef char* (*zend_encoding_detector)(const char *string, int length, char *list TSRMLS_DC);
+typedef char* (*zend_encoding_detector)(const unsigned char *string, size_t length, char *list TSRMLS_DC);
 
-typedef int (*zend_encoding_converter)(char **to, int *to_length, const char *from, int from_length, const char *encoding_to, const char *encoding_from TSRMLS_DC);
+typedef int (*zend_encoding_converter)(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length, const char *encoding_to, const char *encoding_from TSRMLS_DC);
 
-typedef int (*zend_encoding_oddlen)(const char *string, int length, const char *encoding TSRMLS_DC);
+typedef size_t (*zend_encoding_oddlen)(const unsigned char *string, size_t length, const char *encoding TSRMLS_DC);
 
 typedef struct _zend_encoding {
        zend_encoding_filter input_filter;              /* escape input filter */
        zend_encoding_filter output_filter;             /* escape output filter */
        const char *name;                                       /* encoding name */
        const char *(*aliases)[];                       /* encoding name aliases */
-       int compatible;                                         /* flex compatible or not */
+       zend_bool compatible;                                           /* flex compatible or not */
 } zend_encoding;
 
 
@@ -51,18 +51,20 @@ typedef struct _zend_encoding {
  * zend multibyte APIs
  */
 BEGIN_EXTERN_C()
-ZEND_API int zend_multibyte_set_script_encoding(char *encoding_list, int encoding_list_size TSRMLS_DC);
-ZEND_API int zend_multibyte_set_internal_encoding(char *encoding_name, int encoding_name_size TSRMLS_DC);
+ZEND_API int zend_multibyte_set_script_encoding(const char *encoding_list,
+size_t encoding_list_size TSRMLS_DC);
+ZEND_API int zend_multibyte_set_internal_encoding(const char *encoding_name TSRMLS_DC);
 ZEND_API int zend_multibyte_set_functions(zend_encoding_detector encoding_detector, zend_encoding_converter encoding_converter, zend_encoding_oddlen encoding_oddlen TSRMLS_DC);
 ZEND_API int zend_multibyte_set_filter(zend_encoding *onetime_encoding TSRMLS_DC);
-ZEND_API zend_encoding* zend_multibyte_fetch_encoding(char *encoding_name);
-ZEND_API int zend_multibyte_script_encoding_filter(char **to, int *to_length, const char *from, int from_length TSRMLS_DC);
-ZEND_API int zend_multibyte_internal_encoding_filter(char **to, int *to_length, const char *from, int from_length TSRMLS_DC);
+ZEND_API zend_encoding* zend_multibyte_fetch_encoding(const char *encoding_name);
+ZEND_API size_t zend_multibyte_script_encoding_filter(unsigned char **to, size_t 
+*to_length, const unsigned char *from, size_t from_length TSRMLS_DC);
+ZEND_API size_t zend_multibyte_internal_encoding_filter(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length TSRMLS_DC);
 
 /* 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(char *buf, int n TSRMLS_DC);
+ZEND_API int zend_multibyte_read_script(unsigned char *buf, size_t n TSRMLS_DC);
 END_EXTERN_C()
 
 #endif /* ZEND_MULTIBYTE */
index 3389f41706f1c3447987a125d2b11f458c817b30..5b35c8cea9fd9324388ae0b931866e161c405d41 100644 (file)
@@ -981,6 +981,169 @@ void _php_mb_free_regex(void *opaque)
 /* }}} */
 #endif
 
+#ifdef ZEND_MULTIBYTE
+/* {{{ char *php_mb_encoding_detector()
+ * Interface for Zend Engine
+ */
+static char* php_mb_encoding_detector(const unsigned char *arg_string, size_t arg_length, char *arg_list TSRMLS_DC)
+{
+       mbfl_string string;
+       const char *ret;
+       enum mbfl_no_encoding *elist;
+       int size, *list;
+
+       /* make encoding list */
+       list = NULL;
+       size = 0;
+       php_mb_parse_encoding_list(arg_list, strlen(arg_list), &list, &size, 0 TSRMLS_CC);
+       if (size <= 0) {
+               return NULL;
+       }
+       if (size > 0 && list != NULL) {
+               elist = list;
+       } else {
+               elist = MBSTRG(current_detect_order_list);
+               size = MBSTRG(current_detect_order_list_size);
+       }
+
+       mbfl_string_init(&string);
+       string.no_language = MBSTRG(current_language);
+       string.val = (unsigned char *)arg_string;
+       string.len = arg_length;
+       ret = mbfl_identify_encoding_name(&string, elist, size, 0);
+       if (list != NULL) {
+               efree((void *)list);
+       }
+       if (ret != NULL) {
+               return estrdup(ret);
+       } else {
+               return NULL;
+       }
+}
+/* }}} */
+
+/*     {{{ int php_mb_encoding_converter() */
+static int php_mb_encoding_converter(unsigned char **to, size_t *to_length,
+               const unsigned char *from, size_t from_length,
+               const char *encoding_to, const char *encoding_from TSRMLS_DC)
+{
+       mbfl_string string, result, *ret;
+       enum mbfl_no_encoding from_encoding, to_encoding;
+       mbfl_buffer_converter *convd;
+
+       /* new encoding */
+       to_encoding = mbfl_name2no_encoding(encoding_to);
+       if (to_encoding == mbfl_no_encoding_invalid) {
+               return -1;
+       }       
+       /* old encoding */
+       from_encoding = mbfl_name2no_encoding(encoding_from);
+       if (from_encoding == mbfl_no_encoding_invalid) {
+               return -1;
+       }
+       /* initialize string */
+       mbfl_string_init(&string);
+       mbfl_string_init(&result);
+       string.no_encoding = from_encoding;
+       string.no_language = MBSTRG(current_language);
+       string.val = (unsigned char*)from;
+       string.len = from_length;
+
+       /* initialize converter */
+       convd = mbfl_buffer_converter_new(from_encoding, to_encoding, string.len);
+       if (convd == NULL) {
+               return -1;
+       }
+       mbfl_buffer_converter_illegal_mode(convd, MBSTRG(current_filter_illegal_mode));
+       mbfl_buffer_converter_illegal_substchar(convd, MBSTRG(current_filter_illegal_substchar));
+
+       /* do it */
+       ret = mbfl_buffer_converter_feed_result(convd, &string, &result);
+       if (ret != NULL) {
+               *to = ret->val;
+               *to_length = ret->len;
+       }
+
+       MBSTRG(illegalchars) += mbfl_buffer_illegalchars(convd);
+       mbfl_buffer_converter_delete(convd);
+
+       return ret ? 0 : -1;
+}
+/* }}} */
+
+/* {{{ int php_mb_oddlen()
+ *     returns number of odd (e.g. appears only first byte of multibyte
+ *     character) chars
+ */
+static size_t php_mb_oddlen(const unsigned char *string, size_t length, const char *encoding TSRMLS_DC)
+{
+       mbfl_string mb_string;
+
+       mbfl_string_init(&mb_string);
+       mb_string.no_language = MBSTRG(current_language);
+       mb_string.no_encoding = mbfl_name2no_encoding(encoding);
+       mb_string.val = (unsigned char *)string;
+       mb_string.len = length;
+
+       if (mb_string.no_encoding == mbfl_no_encoding_invalid) {
+               return 0;
+       }
+       return mbfl_oddlen(&mb_string);
+}
+/* }}} */
+
+/* {{{ php_mb_set_zend_encoding() */
+static int php_mb_set_zend_encoding(TSRMLS_D)
+{
+       /* 'd better use mbfl_memory_device? */
+       char *name, *list = NULL;
+       int n, *entry, list_size = 0;
+       zend_encoding_detector encoding_detector;
+       zend_encoding_converter encoding_converter;
+       zend_encoding_oddlen encoding_oddlen;
+
+       /* notify script encoding to Zend Engine */
+       entry = MBSTRG(script_encoding_list);
+       n = MBSTRG(script_encoding_list_size);
+       while (n > 0) {
+               name = (char *)mbfl_no_encoding2name(*entry);
+               if (name) {
+                       list_size += strlen(name) + 1;
+                       if (!list) {
+                               list = (char*)emalloc(list_size);
+                               *list = (char)NULL;
+                       } else {
+                               list = (char*)erealloc(list, list_size);
+                               strcat(list, ",");
+                       }
+                       strcat(list, name);
+               }
+               entry++;
+               n--;
+       }
+       zend_multibyte_set_script_encoding(list, (list ? strlen(list) : 0) TSRMLS_CC);
+       if (list) {
+               efree(list);
+       }
+       encoding_detector = php_mb_encoding_detector;
+       encoding_converter = php_mb_encoding_converter;
+       encoding_oddlen = php_mb_oddlen;
+
+       /* TODO: make independent from mbstring.encoding_translation? */
+       if (MBSTRG(encoding_translation)) {
+               /* notify internal encoding to Zend Engine */
+               name = (char*)mbfl_no_encoding2name(MBSTRG(current_internal_encoding));
+               zend_multibyte_set_internal_encoding(name TSRMLS_CC);
+       }
+
+       zend_multibyte_set_functions(encoding_detector, encoding_converter, encoding_oddlen TSRMLS_CC);
+
+       return 0;
+}
+/* }}} */
+#endif /* ZEND_MULTIBYTE */
+
+
 /* {{{ php_mb_nls_get_default_detect_order_list */
 static int php_mb_nls_get_default_detect_order_list(enum mbfl_no_language lang, enum mbfl_no_encoding **plist, int* plist_size)
 {
@@ -1098,9 +1261,6 @@ static PHP_INI_MH(OnUpdate_mbstring_internal_encoding)
                        php_mb_regex_set_mbctype(new_value TSRMLS_CC);
                }
 #endif
-#ifdef ZEND_MULTIBYTE
-               zend_multibyte_set_internal_encoding(new_value, new_value_length TSRMLS_CC);
-#endif /* ZEND_MULTIBYTE */
        } else {
                if (new_value != NULL && new_value_length > 0) {
                        return FAILURE;
@@ -1464,6 +1624,7 @@ PHP_RINIT_FUNCTION(mbstring)
        PHP_RINIT(mb_regex) (INIT_FUNC_ARGS_PASSTHRU);
 #endif
 #ifdef ZEND_MULTIBYTE
+       zend_multibyte_set_internal_encoding(mbfl_no_encoding2name(MBSTRG(internal_encoding)) TSRMLS_CC);
        php_mb_set_zend_encoding(TSRMLS_C);
 #endif /* ZEND_MULTIBYTE */
 
@@ -1594,7 +1755,7 @@ PHP_FUNCTION(mb_internal_encoding)
 #ifdef ZEND_MULTIBYTE
                        /* TODO: make independent from mbstring.encoding_translation? */
                        if (MBSTRG(encoding_translation)) {
-                               zend_multibyte_set_internal_encoding(name, name_len TSRMLS_CC);
+                               zend_multibyte_set_internal_encoding(name TSRMLS_CC);
                        }
 #endif /* ZEND_MULTIBYTE */
                        RETURN_TRUE;
@@ -4609,8 +4770,7 @@ MBSTRING_API size_t php_mb_gpc_mbchar_bytes(const char *s TSRMLS_DC)
 /* }}} */
 
 /*     {{{ MBSTRING_API int php_mb_gpc_encoding_converter() */
-MBSTRING_API int php_mb_gpc_encoding_converter(char **str, int *len, int num, const char *encoding_to, const char *encoding_from 
-               TSRMLS_DC)
+MBSTRING_API int php_mb_gpc_encoding_converter(char **str, int *len, int num, const char *encoding_to, const char *encoding_from TSRMLS_DC)
 {
        int i;
        mbfl_string string, result, *ret = NULL;
@@ -4817,168 +4977,6 @@ MBSTRING_API int php_mb_stripos(int mode, const char *old_haystack, unsigned int
 }
 /* }}} */
 
-#ifdef ZEND_MULTIBYTE
-/* {{{ MBSTRING_API int php_mb_set_zend_encoding() */
-MBSTRING_API int php_mb_set_zend_encoding(TSRMLS_D)
-{
-       /* 'd better use mbfl_memory_device? */
-       char *name, *list = NULL;
-       int n, *entry, list_size = 0;
-       zend_encoding_detector encoding_detector;
-       zend_encoding_converter encoding_converter;
-       zend_encoding_oddlen encoding_oddlen;
-
-       /* notify script encoding to Zend Engine */
-       entry = MBSTRG(script_encoding_list);
-       n = MBSTRG(script_encoding_list_size);
-       while (n > 0) {
-               name = (char *)mbfl_no_encoding2name(*entry);
-               if (name) {
-                       list_size += strlen(name) + 1;
-                       if (!list) {
-                               list = (char*)emalloc(list_size);
-                               *list = (char)NULL;
-                       } else {
-                               list = (char*)erealloc(list, list_size);
-                               strcat(list, ",");
-                       }
-                       strcat(list, name);
-               }
-               entry++;
-               n--;
-       }
-       zend_multibyte_set_script_encoding(list, (list ? strlen(list) : 0) TSRMLS_CC);
-       if (list) {
-               efree(list);
-       }
-       encoding_detector = php_mb_encoding_detector;
-       encoding_converter = php_mb_encoding_converter;
-       encoding_oddlen = php_mb_oddlen;
-
-       /* TODO: make independent from mbstring.encoding_translation? */
-       if (MBSTRG(encoding_translation)) {
-               /* notify internal encoding to Zend Engine */
-               name = (char*)mbfl_no_encoding2name(MBSTRG(current_internal_encoding));
-               zend_multibyte_set_internal_encoding(name, strlen(name) TSRMLS_CC);
-       }
-
-       zend_multibyte_set_functions(encoding_detector, encoding_converter, encoding_oddlen TSRMLS_CC);
-
-       return 0;
-}
-/* }}} */
-
-/* {{{ char *php_mb_encoding_detector()
- * Interface for Zend Engine
- */
-char* php_mb_encoding_detector(const char *arg_string, int arg_length, char *arg_list TSRMLS_DC)
-{
-       mbfl_string string;
-       const char *ret;
-       enum mbfl_no_encoding *elist;
-       int size, *list;
-
-       /* make encoding list */
-       list = NULL;
-       size = 0;
-       php_mb_parse_encoding_list(arg_list, strlen(arg_list), &list, &size, 0 TSRMLS_CC);
-       if (size <= 0) {
-               return NULL;
-       }
-       if (size > 0 && list != NULL) {
-               elist = list;
-       } else {
-               elist = MBSTRG(current_detect_order_list);
-               size = MBSTRG(current_detect_order_list_size);
-       }
-
-       mbfl_string_init(&string);
-       string.no_language = MBSTRG(current_language);
-       string.val = (char*)arg_string;
-       string.len = arg_length;
-       ret = mbfl_identify_encoding_name(&string, elist, size, 0);
-       if (list != NULL) {
-               efree((void *)list);
-       }
-       if (ret != NULL) {
-               return estrdup(ret);
-       } else {
-               return NULL;
-       }
-}
-/* }}} */
-
-/*     {{{ int php_mb_encoding_converter() */
-int php_mb_encoding_converter(char **to, int *to_length, const char *from,
-               int from_length, const char *encoding_to, const char *encoding_from 
-               TSRMLS_DC)
-{
-       mbfl_string string, result, *ret;
-       enum mbfl_no_encoding from_encoding, to_encoding;
-       mbfl_buffer_converter *convd;
-
-       /* new encoding */
-       to_encoding = mbfl_name2no_encoding(encoding_to);
-       if (to_encoding == mbfl_no_encoding_invalid) {
-               return -1;
-       }       
-       /* old encoding */
-       from_encoding = mbfl_name2no_encoding(encoding_from);
-       if (from_encoding == mbfl_no_encoding_invalid) {
-               return -1;
-       }
-       /* initialize string */
-       mbfl_string_init(&string);
-       mbfl_string_init(&result);
-       string.no_encoding = from_encoding;
-       string.no_language = MBSTRG(current_language);
-       string.val = (char*)from;
-       string.len = from_length;
-
-       /* initialize converter */
-       convd = mbfl_buffer_converter_new(from_encoding, to_encoding, string.len);
-       if (convd == NULL) {
-               return -1;
-       }
-       mbfl_buffer_converter_illegal_mode(convd, MBSTRG(current_filter_illegal_mode));
-       mbfl_buffer_converter_illegal_substchar(convd, MBSTRG(current_filter_illegal_substchar));
-
-       /* do it */
-       ret = mbfl_buffer_converter_feed_result(convd, &string, &result);
-       if (ret != NULL) {
-               *to = ret->val;
-               *to_length = ret->len;
-       }
-
-       MBSTRG(illegalchars) += mbfl_buffer_illegalchars(convd);
-       mbfl_buffer_converter_delete(convd);
-
-       return ret ? 0 : -1;
-}
-/* }}} */
-
-/* {{{ int php_mb_oddlen()
- *     returns number of odd (e.g. appears only first byte of multibyte
- *     character) chars
- */
-int php_mb_oddlen(const char *string, int length, const char *encoding TSRMLS_DC)
-{
-       mbfl_string mb_string;
-
-       mbfl_string_init(&mb_string);
-       mb_string.no_language = MBSTRG(current_language);
-       mb_string.no_encoding = mbfl_name2no_encoding(encoding);
-       mb_string.val = (char*)string;
-       mb_string.len = length;
-
-       if (mb_string.no_encoding == mbfl_no_encoding_invalid) {
-               return 0;
-       }
-       return mbfl_oddlen(&mb_string);
-}
-/* }}} */
-#endif /* ZEND_MULTIBYTE */
-
 #endif /* HAVE_MBSTRING */
 
 /*
index fd22da97c664585def0ed65e937194d92cfc6bf3..c17726dda746b571a5de2a509d6057e22324aaea 100644 (file)
@@ -216,16 +216,6 @@ struct mb_overload_def {
 #define MBSTRG(v) (mbstring_globals.v)
 #endif
 
-#ifdef ZEND_MULTIBYTE
-MBSTRING_API int php_mb_set_zend_encoding(TSRMLS_D);
-char* php_mb_encoding_detector(const char *string, int length, char *list
-               TSRMLS_DC);
-int php_mb_encoding_converter(char **to, int *to_length, const char *from,
-               int from_length, const char *encoding_to, const char *encoding_from
-               TSRMLS_DC);
-int php_mb_oddlen(const char *string, int length, const char *encoding TSRMLS_DC);
-#endif /* ZEND_MULTIBYTE */
-
 #else  /* HAVE_MBSTRING */
 
 #define mbstring_module_ptr NULL
similarity index 95%
rename from ext/mbstring/tests/zend-multibyte.phpt
rename to ext/mbstring/tests/zend_multibyte-01.phpt
index 9268fdd2f61c1cfe06044d727b74355e5da41635..d96e0f07d35bf7982090dd5cfde20783a15b7303 100644 (file)
@@ -1,5 +1,5 @@
 --TEST--
-zend multibyte
+zend multibyte (1)
 --SKIPIF--
 <?php
 ini_set("mbstring.script_encoding","SJIS");
diff --git a/ext/mbstring/tests/zend_multibyte-02.phpt b/ext/mbstring/tests/zend_multibyte-02.phpt
new file mode 100644 (file)
index 0000000..aaae8f1
--- /dev/null
@@ -0,0 +1,17 @@
+--TEST--
+zend multibyte (2)
+--SKIP--
+<?php
+ini_set("mbstring.script_encoding", "SJIS");
+ini_set("mbstring.script_encoding", "***") != "SJIS" or
+       die("skip zend-multibyte is not available");
+?>
+--INI--
+mbstring.script_encoding=UTF-8
+mbstring.internal_encoding=CP932
+--FILE--
+<?php
+var_dump(bin2hex("テスト"));
+?>
+--EXPECT--
+string(12) "836583588367"
diff --git a/ext/mbstring/tests/zend_multibyte-03.phpt b/ext/mbstring/tests/zend_multibyte-03.phpt
new file mode 100644 (file)
index 0000000..ed11c17
--- /dev/null
@@ -0,0 +1,17 @@
+--TEST--
+zend multibyte (3)
+--SKIP--
+<?php
+ini_set("mbstring.script_encoding", "SJIS");
+ini_set("mbstring.script_encoding", "***") != "SJIS" or
+       die("skip zend-multibyte is not available");
+?>
+--INI--
+mbstring.script_encoding=UTF-8
+mbstring.internal_encoding=EUC-JP
+--FILE--
+<?php
+var_dump(bin2hex("テスト"));
+?>
+--EXPECT--
+string(12) "a5c6a5b9a5c8"
diff --git a/ext/mbstring/tests/zend_multibyte-04.phpt b/ext/mbstring/tests/zend_multibyte-04.phpt
new file mode 100644 (file)
index 0000000..a89858e
--- /dev/null
@@ -0,0 +1,17 @@
+--TEST--
+zend multibyte (4)
+--SKIP--
+<?php
+ini_set("mbstring.script_encoding", "SJIS");
+ini_set("mbstring.script_encoding", "***") != "SJIS" or
+       die("skip zend-multibyte is not available");
+?>
+--INI--
+mbstring.script_encoding=CP932
+mbstring.internal_encoding=UTF-8
+--FILE--
+<?php
+var_dump(bin2hex("\83e\83X\83g"));
+?>
+--EXPECT--
+string(18) "e38386e382b9e38388"
diff --git a/ext/mbstring/tests/zend_multibyte-05.phpt b/ext/mbstring/tests/zend_multibyte-05.phpt
new file mode 100644 (file)
index 0000000..4b1d84d
--- /dev/null
@@ -0,0 +1,20 @@
+--TEST--
+zend multibyte (5)
+--SKIP--
+<?php
+ini_set("mbstring.script_encoding", "SJIS");
+ini_set("mbstring.script_encoding", "***") != "SJIS" or
+       die("skip zend-multibyte is not available");
+?>
+--INI--
+mbstring.script_encoding=EUC-JP
+mbstring.internal_encoding=UTF-8
+--FILE--
+<?php
+// forcefully interpret an UTF-8 encoded string as EUC-JP and then convert it
+// back to UTF-8. There should be only a pair of consecutive bytes that is
+// valid EUC-encoded character "鴻".
+var_dump(bin2hex("テスト"));
+?>
+--EXPECT--
+string(16) "3f3f3fe9b4bb3f3f"
diff --git a/ext/mbstring/tests/zend_multibyte-06.phpt b/ext/mbstring/tests/zend_multibyte-06.phpt
new file mode 100644 (file)
index 0000000..2816817
--- /dev/null
@@ -0,0 +1,18 @@
+--TEST--
+zend multibyte (6)
+--SKIP--
+<?php
+ini_set("mbstring.script_encoding", "SJIS");
+ini_set("mbstring.script_encoding", "***") != "SJIS" or
+       die("skip zend-multibyte is not available");
+?>
+--INI--
+mbstring.script_encoding=EUC-JP
+mbstring.internal_encoding=CP932
+--FILE--
+<?php
+declare(encoding="UTF-8");
+var_dump(bin2hex("テスト"));
+?>
+--EXPECT--
+string(12) "836583588367"
diff --git a/ext/mbstring/tests/zend_multibyte-07.phpt b/ext/mbstring/tests/zend_multibyte-07.phpt
new file mode 100644 (file)
index 0000000..21589c1
--- /dev/null
@@ -0,0 +1,18 @@
+--TEST--
+zend multibyte (7)
+--SKIP--
+<?php
+ini_set("mbstring.script_encoding", "SJIS");
+ini_set("mbstring.script_encoding", "***") != "SJIS" or
+       die("skip zend-multibyte is not available");
+?>
+--INI--
+mbstring.script_encoding=ISO-8859-1
+mbstring.internal_encoding=EUC-JP
+--FILE--
+<?php
+declare(encoding="UTF-8");
+var_dump(bin2hex("テスト"));
+?>
+--EXPECT--
+string(12) "a5c6a5b9a5c8"
diff --git a/ext/mbstring/tests/zend_multibyte-08.phpt b/ext/mbstring/tests/zend_multibyte-08.phpt
new file mode 100644 (file)
index 0000000..75728fa
--- /dev/null
@@ -0,0 +1,18 @@
+--TEST--
+zend multibyte (8)
+--SKIP--
+<?php
+ini_set("mbstring.script_encoding", "SJIS");
+ini_set("mbstring.script_encoding", "***") != "SJIS" or
+       die("skip zend-multibyte is not available");
+?>
+--INI--
+mbstring.script_encoding=ISO-8859-1
+mbstring.internal_encoding=UTF-8
+--FILE--
+<?php
+declare(encoding="CP932");
+var_dump(bin2hex("\83e\83X\83g"));
+?>
+--EXPECT--
+string(18) "e38386e382b9e38388"
diff --git a/ext/mbstring/tests/zend_multibyte-09.phpt b/ext/mbstring/tests/zend_multibyte-09.phpt
new file mode 100644 (file)
index 0000000..a90ed93
--- /dev/null
@@ -0,0 +1,21 @@
+--TEST--
+zend multibyte (9)
+--SKIP--
+<?php
+ini_set("mbstring.script_encoding", "SJIS");
+ini_set("mbstring.script_encoding", "***") != "SJIS" or
+       die("skip zend-multibyte is not available");
+?>
+--INI--
+mbstring.script_encoding=cp1251
+mbstring.internal_encoding=UTF-8
+--FILE--
+<?php
+declare(encoding="EUC-JP");
+// forcefully interpret an UTF-8 encoded string as EUC-JP and then convert it
+// back to UTF-8. There should be only a pair of consecutive bytes that is
+// valid EUC-encoded character "鴻".
+var_dump(bin2hex("テスト"));
+?>
+--EXPECT--
+string(16) "3f3f3fe9b4bb3f3f"
diff --git a/ext/mbstring/tests/zend_multibyte-10.phpt b/ext/mbstring/tests/zend_multibyte-10.phpt
new file mode 100644 (file)
index 0000000..cfa948d
--- /dev/null
@@ -0,0 +1,15 @@
+--TEST--
+zend multibyte (10)
+--SKIP--
+<?php
+ini_set("mbstring.script_encoding", "SJIS");
+ini_set("mbstring.script_encoding", "***") != "SJIS" or
+       die("skip zend-multibyte is not available");
+?>
+--FILE--
+<?php
+declare(encoding="ISO-8859-15");
+declare(encoding="ISO-8859-1");
+?>
+--EXPECTF--
+Fatal error: Encoding declaration pragma must be the very first statement in the script in %s on line 3
diff --git a/ext/mbstring/tests/zend_multibyte-11.phpt b/ext/mbstring/tests/zend_multibyte-11.phpt
new file mode 100644 (file)
index 0000000..6409615
--- /dev/null
@@ -0,0 +1,16 @@
+--TEST--
+zend multibyte (11)
+--SKIP--
+<?php
+ini_set("mbstring.script_encoding", "SJIS");
+ini_set("mbstring.script_encoding", "***") != "SJIS" or
+       die("skip zend-multibyte is not available");
+?>
+--FILE--
+<?php
+declare(encoding="ISO-8859-15") {
+       declare(encoding="ISO-8859-1");
+}
+?>
+--EXPECTF--
+Fatal error: Encoding declaration pragma must be the very first statement in the script in %s on line 3
diff --git a/ext/mbstring/tests/zend_multibyte-12.phpt b/ext/mbstring/tests/zend_multibyte-12.phpt
new file mode 100644 (file)
index 0000000..4af5284
--- /dev/null
@@ -0,0 +1,16 @@
+--TEST--
+zend multibyte (12)
+--SKIP--
+<?php
+ini_set("mbstring.script_encoding", "SJIS");
+ini_set("mbstring.script_encoding", "***") != "SJIS" or
+       die("skip zend-multibyte is not available");
+?>
+--FILE--
+<?php
+declare(encoding="ISO-8859-15");
+echo 1;
+declare(encoding="ISO-8859-1");
+?>
+--EXPECTF--
+Fatal error: Encoding declaration pragma must be the very first statement in the script in %s on line 4