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:
/ZendEngine2zend_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.25r2=1.131.2.11.2.13.2.26diff_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.25Sat 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.30r2=1.316.2.8.2.12.2.31diff_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