Hello Moriyoshi,

Monday, July 28, 2008, 7:59:17 AM, you wrote:

> moriyoshi               Mon Jul 28 05:59:17 2008 UTC

>   Added files:                 (Branch: PHP_5_3)
>     /php-src/ext/mbstring/tests       zend_multibyte-13.phpt 

>   Modified files:              
>     /ZendEngine2        zend_language_scanner.l zend_compile.h 
>   Log:
>   - Fix __halt_compiler() weirdness with zend-mulibyte enabled
>   
>   
> http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_language_scanner.l?r1=1.131.2.11.2.13.2.25&r2=1.131.2.11.2.13.2.26&diff_format=u
> Index: ZendEngine2/zend_language_scanner.l
> diff -u ZendEngine2/zend_language_scanner.l:1.131.2.11.2.13.2.25
> ZendEngine2/zend_language_scanner.l:1.131.2.11.2.13.2.26
> --- ZendEngine2/zend_language_scanner.l:1.131.2.11.2.13.2.25    Sat Jul 26 
> 15:30:25 2008
> +++ ZendEngine2/zend_language_scanner.l       Mon Jul 28 05:59:16 2008
> @@ -21,7 +21,7 @@
>    
> +----------------------------------------------------------------------+
>  */
>  
> -/* $Id: zend_language_scanner.l,v 1.131.2.11.2.13.2.25 2008/07/26 15:30:25 
> dmitry Exp $ */
> +/* $Id: zend_language_scanner.l,v 1.131.2.11.2.13.2.26 2008/07/28 05:59:16 
> moriyoshi Exp $ */
>  
>  #if 0
>  # define YYDEBUG(s, c) printf("state: %d char: %c\n", s, c)
> @@ -444,9 +444,26 @@
>  }
>  
>  
> -ZEND_API int zend_get_scanned_file_offset(TSRMLS_D)
> +ZEND_API size_t zend_get_scanned_file_offset(TSRMLS_D)
>  {
> -       return SCNG(yy_cursor) - SCNG(yy_start);
> +       size_t offset = SCNG(yy_cursor) - SCNG(yy_start);
> +#ifdef ZEND_MULTIBYTE
> +    size_t original_offset = offset, length = 0;
> +    do {
> +        unsigned char *p = NULL;
> +        SCNG(input_filter)(&p, &length, SCNG(script_org), offset TSRMLS_CC);
> +        if (!p) {
> +            break;
> +        }
> +        efree(p);
> +        if (length > original_offset) {
> +            offset--;
> +        } else if (length < original_offset) {
> +            offset++;
> +        }
> +    } while (original_offset != length);
> +#endif
> +    return offset;
>  }
>  
>  
> @@ -581,29 +598,19 @@
>  BEGIN_EXTERN_C()
>  ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter
> old_input_filter, zend_encoding *old_encoding TSRMLS_DC)
>  {
> -       size_t offset, original_offset, length, free_flag, new_len;
> +       size_t original_offset, offset, free_flag, new_len, length;
>         unsigned char *p;
> -       zend_encoding *new_encoding;
>  
>         /* calculate current position */
>         offset = original_offset = YYCURSOR - SCNG(yy_start);
> -       if (old_input_filter && original_offset > 0) {
> -               new_encoding = SCNG(script_encoding);
> +       if (old_input_filter && offset > 0) {
> +               zend_encoding *new_encoding = SCNG(script_encoding);
> +        zend_encoding_filter new_filter = SCNG(input_filter);

You broke indentation here and at severl other places.

>                 SCNG(script_encoding) = old_encoding;
> -               do {
> -                       (old_input_filter)(&p, &length,
> SCNG(script_org), offset TSRMLS_CC);
> -                       if (!p) {
> -                               SCNG(script_encoding) = new_encoding;
> -                               return;
> -                       }
> -                       efree(p);
> -                       if (length > original_offset) {
> -                               offset--;
> -                       } else if (length < original_offset) {
> -                               offset++;
> -                       }
> -               } while (original_offset != length);
> +        SCNG(input_filter) = new_filter;
> +        offset = zend_get_scanned_file_offset(TSRMLS_C);
>                 SCNG(script_encoding) = new_encoding;
> +               SCNG(input_filter) = new_filter;
>         }
>  
>         /* convert and set */
> @@ -1926,7 +1933,7 @@
>  
>         /* Check for ending label on the next line */
>         if (CG(heredoc_len) < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, s, 
> CG(heredoc_len))) {
> -               char *end = YYCURSOR + CG(heredoc_len);
> +               unsigned char *end = YYCURSOR + CG(heredoc_len);
>  
>                 if (*end == ';') {
>                         end++;
> http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_compile.h?r1=1.316.2.8.2.12.2.30&r2=1.316.2.8.2.12.2.31&diff_format=u
> Index: ZendEngine2/zend_compile.h
> diff -u ZendEngine2/zend_compile.h:1.316.2.8.2.12.2.30
> ZendEngine2/zend_compile.h:1.316.2.8.2.12.2.31
> --- ZendEngine2/zend_compile.h:1.316.2.8.2.12.2.30      Sat Jul 26 15:30:24 
> 2008
> +++ ZendEngine2/zend_compile.h  Mon Jul 28 05:59:16 2008
> @@ -17,7 +17,7 @@
>    
> +----------------------------------------------------------------------+
>  */
>  
> -/* $Id: zend_compile.h,v 1.316.2.8.2.12.2.30 2008/07/26 15:30:24 dmitry Exp 
> $ */
> +/* $Id: zend_compile.h,v 1.316.2.8.2.12.2.31 2008/07/28 05:59:16 moriyoshi 
> Exp $ */
>  
>  #ifndef ZEND_COMPILE_H
>  #define ZEND_COMPILE_H
> @@ -357,7 +357,7 @@
>  ZEND_API void zend_restore_compiled_filename(char
> *original_compiled_filename TSRMLS_DC);
>  ZEND_API char *zend_get_compiled_filename(TSRMLS_D);
>  ZEND_API int zend_get_compiled_lineno(TSRMLS_D);
> -ZEND_API int zend_get_scanned_file_offset(TSRMLS_D);
> +ZEND_API size_t zend_get_scanned_file_offset(TSRMLS_D);
>  
>  void zend_resolve_class_name(znode *class_name, ulong *fetch_type, int 
> check_ns_name TSRMLS_DC);
>  ZEND_API char* zend_get_compiled_variable_name(zend_op_array *op_array, 
> zend_uint var, int* name_len);

> http://cvs.php.net/viewvc.cgi/php-src/ext/mbstring/tests/zend_multibyte-13.phpt?view=markup&rev=1.1
> Index: php-src/ext/mbstring/tests/zend_multibyte-13.phpt
> +++ php-src/ext/mbstring/tests/zend_multibyte-13.phpt






Best regards,
 Marcus


-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to