cvs: ZendEngine2 / zend.h zend_execute_API.c zend_object_handlers.c zend_object_handlers.h zend_vm_def.h zend_vm_execute.h
| From: | Johannes Schl�ter | Date: | Thu, 30 Aug 2007 14:48:39 +0000 |
| Subject: | cvs: ZendEngine2 / zend.h zend_execute_API.c zend_object_handlers.c zend_object_handlers.h zend_vm_def.h zend_vm_execute.h | ||
| Groups: | php.zend-engine.cvs | ||
| Request: | Send a blank email to php-zend-engine-cvs+get-5980@lists.php.net to get a copy of this message | ||
johannes Thu Aug 30 14:48:39 2007 UTC
Modified files:
/ZendEngine2 zend.h zend_execute_API.c zend_object_handlers.c
zend_object_handlers.h zend_vm_def.h zend_vm_execute.h
Log:
- Allow binary strings as method name in $class::$method(), fixes
tests/lang/044.phpt (Etienne Kneuss)
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend.h?r1=1.336&r2=1.337&diff_format=u Index: ZendEngine2/zend.h diff -u ZendEngine2/zend.h:1.336 ZendEngine2/zend.h:1.337 --- ZendEngine2/zend.h:1.336 Fri Aug 24 13:50:52 2007 +++ ZendEngine2/zend.h Thu Aug 30 14:48:39 2007 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend.h,v 1.336 2007/08/24 13:50:52 dmitry Exp $ */ +/* $Id: zend.h,v 1.337 2007/08/30 14:48:39 johannes Exp $ */ #ifndef ZEND_H #define ZEND_H @@ -389,7 +389,7 @@ zend_object_value (*create_object)(zend_class_entry *class_type TSRMLS_DC); zend_object_iterator *(*get_iterator)(zend_class_entry *ce, zval *object, int by_ref TSRMLS_DC); int (*interface_gets_implemented)(zend_class_entry *iface, zend_class_entry *class_type TSRMLS_DC); /* a class implements this interface */ - union _zend_function *(*get_static_method)(zend_class_entry *ce, zstr method, int method_len TSRMLS_DC); + union _zend_function *(*get_static_method)(zend_class_entry *ce, zend_uchar type, zstr method, int method_len TSRMLS_DC); /* serializer callbacks */ int (*serialize)(zval *object, int *type, zstr *buffer, zend_uint *buf_len, zend_serialize_data *data TSRMLS_DC); http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_execute_API.c?r1=1.413&r2=1.414&diff_format=u Index: ZendEngine2/zend_execute_API.c diff -u ZendEngine2/zend_execute_API.c:1.413 ZendEngine2/zend_execute_API.c:1.414 --- ZendEngine2/zend_execute_API.c:1.413 Fri Aug 24 13:50:52 2007 +++ ZendEngine2/zend_execute_API.c Thu Aug 30 14:48:39 2007 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_execute_API.c,v 1.413 2007/08/24 13:50:52 dmitry Exp $ */ +/* $Id: zend_execute_API.c,v 1.414 2007/08/30 14:48:39 johannes Exp $ */ #include <stdio.h> #include <signal.h> @@ -889,9 +889,9 @@ zstr lcname = zend_u_str_case_fold(Z_TYPE_P(fci->function_name), fname, fname_len, 1, &lcname_len); if (calling_scope->get_static_method) { - EX(function_state).function = calling_scope->get_static_method(calling_scope, lcname, lcname_len TSRMLS_CC); + EX(function_state).function = calling_scope->get_static_method(calling_scope, Z_TYPE_P(fci->function_name), lcname, lcname_len TSRMLS_CC); } else { - EX(function_state).function = zend_std_get_static_method(calling_scope, lcname, lcname_len TSRMLS_CC); + EX(function_state).function = zend_std_get_static_method(calling_scope, Z_TYPE_P(fci->function_name), lcname, lcname_len TSRMLS_CC); } efree(lcname.v); http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_object_handlers.c?r1=1.188&r2=1.189&diff_format=u Index: ZendEngine2/zend_object_handlers.c diff -u ZendEngine2/zend_object_handlers.c:1.188 ZendEngine2/zend_object_handlers.c:1.189 --- ZendEngine2/zend_object_handlers.c:1.188 Tue Jul 24 11:40:07 2007 +++ ZendEngine2/zend_object_handlers.c Thu Aug 30 14:48:39 2007 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_object_handlers.c,v 1.188 2007/07/24 11:40:07 dmitry Exp $ */ +/* $Id: zend_object_handlers.c,v 1.189 2007/08/30 14:48:39 johannes Exp $ */ #include "zend.h" #include "zend_globals.h" @@ -903,11 +903,9 @@ /* }}} */ -ZEND_API zend_function *zend_std_get_static_method(zend_class_entry *ce, zstr function_name_strval, int function_name_strlen TSRMLS_DC) /* {{{ */ +ZEND_API zend_function *zend_std_get_static_method(zend_class_entry *ce, zend_uchar type, zstr function_name_strval, int function_name_strlen TSRMLS_DC) /* {{{ */ { zend_function *fbc; - /* FIXME: type is default */ - zend_uchar type = UG(unicode)?IS_UNICODE:IS_STRING; if (zend_u_hash_find(&ce->function_table, type, function_name_strval, function_name_strlen + 1, (void **) &fbc)==FAILURE) { if (ce->__callstatic) { http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_object_handlers.h?r1=1.62&r2=1.63&diff_format=u Index: ZendEngine2/zend_object_handlers.h diff -u ZendEngine2/zend_object_handlers.h:1.62 ZendEngine2/zend_object_handlers.h:1.63 --- ZendEngine2/zend_object_handlers.h:1.62 Thu Jan 18 23:23:13 2007 +++ ZendEngine2/zend_object_handlers.h Thu Aug 30 14:48:39 2007 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_object_handlers.h,v 1.62 2007/01/18 23:23:13 helly Exp $ */ +/* $Id: zend_object_handlers.h,v 1.63 2007/08/30 14:48:39 johannes Exp $ */ #ifndef ZEND_OBJECT_HANDLERS_H #define ZEND_OBJECT_HANDLERS_H @@ -140,7 +140,7 @@ extern ZEND_API zend_object_handlers std_object_handlers; BEGIN_EXTERN_C() -ZEND_API union _zend_function *zend_std_get_static_method(zend_class_entry *ce, zstr function_name_strval, int function_name_strlen TSRMLS_DC); +ZEND_API union _zend_function *zend_std_get_static_method(zend_class_entry *ce, zend_uchar type, zstr function_name_strval, int function_name_strlen TSRMLS_DC); ZEND_API zval **zend_std_get_static_property(zend_class_entry *ce, zend_uchar type, zstr property_name, int property_name_len, zend_bool silent TSRMLS_DC); ZEND_API zend_bool zend_std_unset_static_property(zend_class_entry *ce, zend_uchar type, zstr property_name, int property_name_len TSRMLS_DC); ZEND_API union _zend_function *zend_std_get_constructor(zval *object TSRMLS_DC); http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_def.h?r1=1.179&r2=1.180&diff_format=u Index: ZendEngine2/zend_vm_def.h diff -u ZendEngine2/zend_vm_def.h:1.179 ZendEngine2/zend_vm_def.h:1.180 --- ZendEngine2/zend_vm_def.h:1.179 Fri Aug 24 13:50:52 2007 +++ ZendEngine2/zend_vm_def.h Thu Aug 30 14:48:39 2007 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_vm_def.h,v 1.179 2007/08/24 13:50:52 dmitry Exp $ */ +/* $Id: zend_vm_def.h,v 1.180 2007/08/30 14:48:39 johannes Exp $ */ /* If you change this file, please regenerate the zend_vm_execute.h and * zend_vm_opcodes.h files by running: @@ -1815,10 +1815,11 @@ unsigned int function_name_strlen; zend_bool is_const = (OP2_TYPE == IS_CONST); zend_free_op free_op2; - + zend_uchar function_name_type; if (is_const) { function_name_strval = Z_UNIVAL(opline->op2.u.constant); function_name_strlen = Z_UNILEN(opline->op2.u.constant); + function_name_type = Z_TYPE(opline->op2.u.constant); } else { function_name = GET_OP2_ZVAL_PTR(BP_VAR_R); @@ -1826,12 +1827,13 @@ zend_error_noreturn(E_ERROR, "Function name must be a string"); } function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); + function_name_type = Z_TYPE_P(function_name); } if (ce->get_static_method) { - EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = ce->get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } else { - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = zend_std_get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } if (!is_const) { http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_execute.h?r1=1.183&r2=1.184&diff_format=u Index: ZendEngine2/zend_vm_execute.h diff -u ZendEngine2/zend_vm_execute.h:1.183 ZendEngine2/zend_vm_execute.h:1.184 --- ZendEngine2/zend_vm_execute.h:1.183 Fri Aug 24 13:50:52 2007 +++ ZendEngine2/zend_vm_execute.h Thu Aug 30 14:48:39 2007 @@ -2567,10 +2567,11 @@ unsigned int function_name_strlen; zend_bool is_const = (IS_CONST == IS_CONST); - + zend_uchar function_name_type; if (is_const) { function_name_strval = Z_UNIVAL(opline->op2.u.constant); function_name_strlen = Z_UNILEN(opline->op2.u.constant); + function_name_type = Z_TYPE(opline->op2.u.constant); } else { function_name = &opline->op2.u.constant; @@ -2578,12 +2579,13 @@ zend_error_noreturn(E_ERROR, "Function name must be a string"); } function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); + function_name_type = Z_TYPE_P(function_name); } if (ce->get_static_method) { - EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = ce->get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } else { - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = zend_std_get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } if (!is_const) { @@ -3110,10 +3112,11 @@ unsigned int function_name_strlen; zend_bool is_const = (IS_TMP_VAR == IS_CONST); zend_free_op free_op2; - + zend_uchar function_name_type; if (is_const) { function_name_strval = Z_UNIVAL(opline->op2.u.constant); function_name_strlen = Z_UNILEN(opline->op2.u.constant); + function_name_type = Z_TYPE(opline->op2.u.constant); } else { function_name = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); @@ -3121,12 +3124,13 @@ zend_error_noreturn(E_ERROR, "Function name must be a string"); } function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); + function_name_type = Z_TYPE_P(function_name); } if (ce->get_static_method) { - EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = ce->get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } else { - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = zend_std_get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } if (!is_const) { @@ -3555,10 +3559,11 @@ unsigned int function_name_strlen; zend_bool is_const = (IS_VAR == IS_CONST); zend_free_op free_op2; - + zend_uchar function_name_type; if (is_const) { function_name_strval = Z_UNIVAL(opline->op2.u.constant); function_name_strlen = Z_UNILEN(opline->op2.u.constant); + function_name_type = Z_TYPE(opline->op2.u.constant); } else { function_name = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); @@ -3566,12 +3571,13 @@ zend_error_noreturn(E_ERROR, "Function name must be a string"); } function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); + function_name_type = Z_TYPE_P(function_name); } if (ce->get_static_method) { - EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = ce->get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } else { - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = zend_std_get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } if (!is_const) { @@ -3766,10 +3772,11 @@ unsigned int function_name_strlen; zend_bool is_const = (IS_UNUSED == IS_CONST); - + zend_uchar function_name_type; if (is_const) { function_name_strval = Z_UNIVAL(opline->op2.u.constant); function_name_strlen = Z_UNILEN(opline->op2.u.constant); + function_name_type = Z_TYPE(opline->op2.u.constant); } else { function_name = NULL; @@ -3777,12 +3784,13 @@ zend_error_noreturn(E_ERROR, "Function name must be a string"); } function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); + function_name_type = Z_TYPE_P(function_name); } if (ce->get_static_method) { - EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = ce->get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } else { - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = zend_std_get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } if (!is_const) { @@ -4179,10 +4187,11 @@ unsigned int function_name_strlen; zend_bool is_const = (IS_CV == IS_CONST); - + zend_uchar function_name_type; if (is_const) { function_name_strval = Z_UNIVAL(opline->op2.u.constant); function_name_strlen = Z_UNILEN(opline->op2.u.constant); + function_name_type = Z_TYPE(opline->op2.u.constant); } else { function_name = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); @@ -4190,12 +4199,13 @@ zend_error_noreturn(E_ERROR, "Function name must be a string"); } function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); + function_name_type = Z_TYPE_P(function_name); } if (ce->get_static_method) { - EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = ce->get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } else { - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = zend_std_get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } if (!is_const) { @@ -10024,10 +10034,11 @@ unsigned int function_name_strlen; zend_bool is_const = (IS_CONST == IS_CONST); - + zend_uchar function_name_type; if (is_const) { function_name_strval = Z_UNIVAL(opline->op2.u.constant); function_name_strlen = Z_UNILEN(opline->op2.u.constant); + function_name_type = Z_TYPE(opline->op2.u.constant); } else { function_name = &opline->op2.u.constant; @@ -10035,12 +10046,13 @@ zend_error_noreturn(E_ERROR, "Function name must be a string"); } function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); + function_name_type = Z_TYPE_P(function_name); } if (ce->get_static_method) { - EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = ce->get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } else { - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = zend_std_get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } if (!is_const) { @@ -11714,10 +11726,11 @@ unsigned int function_name_strlen; zend_bool is_const = (IS_TMP_VAR == IS_CONST); zend_free_op free_op2; - + zend_uchar function_name_type; if (is_const) { function_name_strval = Z_UNIVAL(opline->op2.u.constant); function_name_strlen = Z_UNILEN(opline->op2.u.constant); + function_name_type = Z_TYPE(opline->op2.u.constant); } else { function_name = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); @@ -11725,12 +11738,13 @@ zend_error_noreturn(E_ERROR, "Function name must be a string"); } function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); + function_name_type = Z_TYPE_P(function_name); } if (ce->get_static_method) { - EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = ce->get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } else { - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = zend_std_get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } if (!is_const) { @@ -13382,10 +13396,11 @@ unsigned int function_name_strlen; zend_bool is_const = (IS_VAR == IS_CONST); zend_free_op free_op2; - + zend_uchar function_name_type; if (is_const) { function_name_strval = Z_UNIVAL(opline->op2.u.constant); function_name_strlen = Z_UNILEN(opline->op2.u.constant); + function_name_type = Z_TYPE(opline->op2.u.constant); } else { function_name = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); @@ -13393,12 +13408,13 @@ zend_error_noreturn(E_ERROR, "Function name must be a string"); } function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); + function_name_type = Z_TYPE_P(function_name); } if (ce->get_static_method) { - EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = ce->get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } else { - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = zend_std_get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } if (!is_const) { @@ -14248,10 +14264,11 @@ unsigned int function_name_strlen; zend_bool is_const = (IS_UNUSED == IS_CONST); - + zend_uchar function_name_type; if (is_const) { function_name_strval = Z_UNIVAL(opline->op2.u.constant); function_name_strlen = Z_UNILEN(opline->op2.u.constant); + function_name_type = Z_TYPE(opline->op2.u.constant); } else { function_name = NULL; @@ -14259,12 +14276,13 @@ zend_error_noreturn(E_ERROR, "Function name must be a string"); } function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); + function_name_type = Z_TYPE_P(function_name); } if (ce->get_static_method) { - EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = ce->get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } else { - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = zend_std_get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } if (!is_const) { @@ -15566,10 +15584,11 @@ unsigned int function_name_strlen; zend_bool is_const = (IS_CV == IS_CONST); - + zend_uchar function_name_type; if (is_const) { function_name_strval = Z_UNIVAL(opline->op2.u.constant); function_name_strlen = Z_UNILEN(opline->op2.u.constant); + function_name_type = Z_TYPE(opline->op2.u.constant); } else { function_name = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); @@ -15577,12 +15596,13 @@ zend_error_noreturn(E_ERROR, "Function name must be a string"); } function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); + function_name_type = Z_TYPE_P(function_name); } if (ce->get_static_method) { - EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = ce->get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } else { - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = zend_std_get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } if (!is_const) {
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend.h?r1=1.336&r2=1.337&diff_format=u Index: ZendEngine2/zend.h diff -u ZendEngine2/zend.h:1.336 ZendEngine2/zend.h:1.337 --- ZendEngine2/zend.h:1.336 Fri Aug 24 13:50:52 2007 +++ ZendEngine2/zend.h Thu Aug 30 14:48:39 2007 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend.h,v 1.336 2007/08/24 13:50:52 dmitry Exp $ */ +/* $Id: zend.h,v 1.337 2007/08/30 14:48:39 johannes Exp $ */ #ifndef ZEND_H #define ZEND_H @@ -389,7 +389,7 @@ zend_object_value (*create_object)(zend_class_entry *class_type TSRMLS_DC); zend_object_iterator *(*get_iterator)(zend_class_entry *ce, zval *object, int by_ref TSRMLS_DC); int (*interface_gets_implemented)(zend_class_entry *iface, zend_class_entry *class_type TSRMLS_DC); /* a class implements this interface */ - union _zend_function *(*get_static_method)(zend_class_entry *ce, zstr method, int method_len TSRMLS_DC); + union _zend_function *(*get_static_method)(zend_class_entry *ce, zend_uchar type, zstr method, int method_len TSRMLS_DC); /* serializer callbacks */ int (*serialize)(zval *object, int *type, zstr *buffer, zend_uint *buf_len, zend_serialize_data *data TSRMLS_DC); http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_execute_API.c?r1=1.413&r2=1.414&diff_format=u Index: ZendEngine2/zend_execute_API.c diff -u ZendEngine2/zend_execute_API.c:1.413 ZendEngine2/zend_execute_API.c:1.414 --- ZendEngine2/zend_execute_API.c:1.413 Fri Aug 24 13:50:52 2007 +++ ZendEngine2/zend_execute_API.c Thu Aug 30 14:48:39 2007 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_execute_API.c,v 1.413 2007/08/24 13:50:52 dmitry Exp $ */ +/* $Id: zend_execute_API.c,v 1.414 2007/08/30 14:48:39 johannes Exp $ */ #include <stdio.h> #include <signal.h> @@ -889,9 +889,9 @@ zstr lcname = zend_u_str_case_fold(Z_TYPE_P(fci->function_name), fname, fname_len, 1, &lcname_len); if (calling_scope->get_static_method) { - EX(function_state).function = calling_scope->get_static_method(calling_scope, lcname, lcname_len TSRMLS_CC); + EX(function_state).function = calling_scope->get_static_method(calling_scope, Z_TYPE_P(fci->function_name), lcname, lcname_len TSRMLS_CC); } else { - EX(function_state).function = zend_std_get_static_method(calling_scope, lcname, lcname_len TSRMLS_CC); + EX(function_state).function = zend_std_get_static_method(calling_scope, Z_TYPE_P(fci->function_name), lcname, lcname_len TSRMLS_CC); } efree(lcname.v); http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_object_handlers.c?r1=1.188&r2=1.189&diff_format=u Index: ZendEngine2/zend_object_handlers.c diff -u ZendEngine2/zend_object_handlers.c:1.188 ZendEngine2/zend_object_handlers.c:1.189 --- ZendEngine2/zend_object_handlers.c:1.188 Tue Jul 24 11:40:07 2007 +++ ZendEngine2/zend_object_handlers.c Thu Aug 30 14:48:39 2007 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_object_handlers.c,v 1.188 2007/07/24 11:40:07 dmitry Exp $ */ +/* $Id: zend_object_handlers.c,v 1.189 2007/08/30 14:48:39 johannes Exp $ */ #include "zend.h" #include "zend_globals.h" @@ -903,11 +903,9 @@ /* }}} */ -ZEND_API zend_function *zend_std_get_static_method(zend_class_entry *ce, zstr function_name_strval, int function_name_strlen TSRMLS_DC) /* {{{ */ +ZEND_API zend_function *zend_std_get_static_method(zend_class_entry *ce, zend_uchar type, zstr function_name_strval, int function_name_strlen TSRMLS_DC) /* {{{ */ { zend_function *fbc; - /* FIXME: type is default */ - zend_uchar type = UG(unicode)?IS_UNICODE:IS_STRING; if (zend_u_hash_find(&ce->function_table, type, function_name_strval, function_name_strlen + 1, (void **) &fbc)==FAILURE) { if (ce->__callstatic) { http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_object_handlers.h?r1=1.62&r2=1.63&diff_format=u Index: ZendEngine2/zend_object_handlers.h diff -u ZendEngine2/zend_object_handlers.h:1.62 ZendEngine2/zend_object_handlers.h:1.63 --- ZendEngine2/zend_object_handlers.h:1.62 Thu Jan 18 23:23:13 2007 +++ ZendEngine2/zend_object_handlers.h Thu Aug 30 14:48:39 2007 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_object_handlers.h,v 1.62 2007/01/18 23:23:13 helly Exp $ */ +/* $Id: zend_object_handlers.h,v 1.63 2007/08/30 14:48:39 johannes Exp $ */ #ifndef ZEND_OBJECT_HANDLERS_H #define ZEND_OBJECT_HANDLERS_H @@ -140,7 +140,7 @@ extern ZEND_API zend_object_handlers std_object_handlers; BEGIN_EXTERN_C() -ZEND_API union _zend_function *zend_std_get_static_method(zend_class_entry *ce, zstr function_name_strval, int function_name_strlen TSRMLS_DC); +ZEND_API union _zend_function *zend_std_get_static_method(zend_class_entry *ce, zend_uchar type, zstr function_name_strval, int function_name_strlen TSRMLS_DC); ZEND_API zval **zend_std_get_static_property(zend_class_entry *ce, zend_uchar type, zstr property_name, int property_name_len, zend_bool silent TSRMLS_DC); ZEND_API zend_bool zend_std_unset_static_property(zend_class_entry *ce, zend_uchar type, zstr property_name, int property_name_len TSRMLS_DC); ZEND_API union _zend_function *zend_std_get_constructor(zval *object TSRMLS_DC); http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_def.h?r1=1.179&r2=1.180&diff_format=u Index: ZendEngine2/zend_vm_def.h diff -u ZendEngine2/zend_vm_def.h:1.179 ZendEngine2/zend_vm_def.h:1.180 --- ZendEngine2/zend_vm_def.h:1.179 Fri Aug 24 13:50:52 2007 +++ ZendEngine2/zend_vm_def.h Thu Aug 30 14:48:39 2007 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_vm_def.h,v 1.179 2007/08/24 13:50:52 dmitry Exp $ */ +/* $Id: zend_vm_def.h,v 1.180 2007/08/30 14:48:39 johannes Exp $ */ /* If you change this file, please regenerate the zend_vm_execute.h and * zend_vm_opcodes.h files by running: @@ -1815,10 +1815,11 @@ unsigned int function_name_strlen; zend_bool is_const = (OP2_TYPE == IS_CONST); zend_free_op free_op2; - + zend_uchar function_name_type; if (is_const) { function_name_strval = Z_UNIVAL(opline->op2.u.constant); function_name_strlen = Z_UNILEN(opline->op2.u.constant); + function_name_type = Z_TYPE(opline->op2.u.constant); } else { function_name = GET_OP2_ZVAL_PTR(BP_VAR_R); @@ -1826,12 +1827,13 @@ zend_error_noreturn(E_ERROR, "Function name must be a string"); } function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); + function_name_type = Z_TYPE_P(function_name); } if (ce->get_static_method) { - EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = ce->get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } else { - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = zend_std_get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } if (!is_const) { http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_execute.h?r1=1.183&r2=1.184&diff_format=u Index: ZendEngine2/zend_vm_execute.h diff -u ZendEngine2/zend_vm_execute.h:1.183 ZendEngine2/zend_vm_execute.h:1.184 --- ZendEngine2/zend_vm_execute.h:1.183 Fri Aug 24 13:50:52 2007 +++ ZendEngine2/zend_vm_execute.h Thu Aug 30 14:48:39 2007 @@ -2567,10 +2567,11 @@ unsigned int function_name_strlen; zend_bool is_const = (IS_CONST == IS_CONST); - + zend_uchar function_name_type; if (is_const) { function_name_strval = Z_UNIVAL(opline->op2.u.constant); function_name_strlen = Z_UNILEN(opline->op2.u.constant); + function_name_type = Z_TYPE(opline->op2.u.constant); } else { function_name = &opline->op2.u.constant; @@ -2578,12 +2579,13 @@ zend_error_noreturn(E_ERROR, "Function name must be a string"); } function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); + function_name_type = Z_TYPE_P(function_name); } if (ce->get_static_method) { - EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = ce->get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } else { - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = zend_std_get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } if (!is_const) { @@ -3110,10 +3112,11 @@ unsigned int function_name_strlen; zend_bool is_const = (IS_TMP_VAR == IS_CONST); zend_free_op free_op2; - + zend_uchar function_name_type; if (is_const) { function_name_strval = Z_UNIVAL(opline->op2.u.constant); function_name_strlen = Z_UNILEN(opline->op2.u.constant); + function_name_type = Z_TYPE(opline->op2.u.constant); } else { function_name = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); @@ -3121,12 +3124,13 @@ zend_error_noreturn(E_ERROR, "Function name must be a string"); } function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); + function_name_type = Z_TYPE_P(function_name); } if (ce->get_static_method) { - EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = ce->get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } else { - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = zend_std_get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } if (!is_const) { @@ -3555,10 +3559,11 @@ unsigned int function_name_strlen; zend_bool is_const = (IS_VAR == IS_CONST); zend_free_op free_op2; - + zend_uchar function_name_type; if (is_const) { function_name_strval = Z_UNIVAL(opline->op2.u.constant); function_name_strlen = Z_UNILEN(opline->op2.u.constant); + function_name_type = Z_TYPE(opline->op2.u.constant); } else { function_name = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); @@ -3566,12 +3571,13 @@ zend_error_noreturn(E_ERROR, "Function name must be a string"); } function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); + function_name_type = Z_TYPE_P(function_name); } if (ce->get_static_method) { - EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = ce->get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } else { - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = zend_std_get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } if (!is_const) { @@ -3766,10 +3772,11 @@ unsigned int function_name_strlen; zend_bool is_const = (IS_UNUSED == IS_CONST); - + zend_uchar function_name_type; if (is_const) { function_name_strval = Z_UNIVAL(opline->op2.u.constant); function_name_strlen = Z_UNILEN(opline->op2.u.constant); + function_name_type = Z_TYPE(opline->op2.u.constant); } else { function_name = NULL; @@ -3777,12 +3784,13 @@ zend_error_noreturn(E_ERROR, "Function name must be a string"); } function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); + function_name_type = Z_TYPE_P(function_name); } if (ce->get_static_method) { - EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = ce->get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } else { - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = zend_std_get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } if (!is_const) { @@ -4179,10 +4187,11 @@ unsigned int function_name_strlen; zend_bool is_const = (IS_CV == IS_CONST); - + zend_uchar function_name_type; if (is_const) { function_name_strval = Z_UNIVAL(opline->op2.u.constant); function_name_strlen = Z_UNILEN(opline->op2.u.constant); + function_name_type = Z_TYPE(opline->op2.u.constant); } else { function_name = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); @@ -4190,12 +4199,13 @@ zend_error_noreturn(E_ERROR, "Function name must be a string"); } function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); + function_name_type = Z_TYPE_P(function_name); } if (ce->get_static_method) { - EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = ce->get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } else { - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = zend_std_get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } if (!is_const) { @@ -10024,10 +10034,11 @@ unsigned int function_name_strlen; zend_bool is_const = (IS_CONST == IS_CONST); - + zend_uchar function_name_type; if (is_const) { function_name_strval = Z_UNIVAL(opline->op2.u.constant); function_name_strlen = Z_UNILEN(opline->op2.u.constant); + function_name_type = Z_TYPE(opline->op2.u.constant); } else { function_name = &opline->op2.u.constant; @@ -10035,12 +10046,13 @@ zend_error_noreturn(E_ERROR, "Function name must be a string"); } function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); + function_name_type = Z_TYPE_P(function_name); } if (ce->get_static_method) { - EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = ce->get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } else { - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = zend_std_get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } if (!is_const) { @@ -11714,10 +11726,11 @@ unsigned int function_name_strlen; zend_bool is_const = (IS_TMP_VAR == IS_CONST); zend_free_op free_op2; - + zend_uchar function_name_type; if (is_const) { function_name_strval = Z_UNIVAL(opline->op2.u.constant); function_name_strlen = Z_UNILEN(opline->op2.u.constant); + function_name_type = Z_TYPE(opline->op2.u.constant); } else { function_name = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); @@ -11725,12 +11738,13 @@ zend_error_noreturn(E_ERROR, "Function name must be a string"); } function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); + function_name_type = Z_TYPE_P(function_name); } if (ce->get_static_method) { - EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = ce->get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } else { - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = zend_std_get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } if (!is_const) { @@ -13382,10 +13396,11 @@ unsigned int function_name_strlen; zend_bool is_const = (IS_VAR == IS_CONST); zend_free_op free_op2; - + zend_uchar function_name_type; if (is_const) { function_name_strval = Z_UNIVAL(opline->op2.u.constant); function_name_strlen = Z_UNILEN(opline->op2.u.constant); + function_name_type = Z_TYPE(opline->op2.u.constant); } else { function_name = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); @@ -13393,12 +13408,13 @@ zend_error_noreturn(E_ERROR, "Function name must be a string"); } function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); + function_name_type = Z_TYPE_P(function_name); } if (ce->get_static_method) { - EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = ce->get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } else { - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = zend_std_get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } if (!is_const) { @@ -14248,10 +14264,11 @@ unsigned int function_name_strlen; zend_bool is_const = (IS_UNUSED == IS_CONST); - + zend_uchar function_name_type; if (is_const) { function_name_strval = Z_UNIVAL(opline->op2.u.constant); function_name_strlen = Z_UNILEN(opline->op2.u.constant); + function_name_type = Z_TYPE(opline->op2.u.constant); } else { function_name = NULL; @@ -14259,12 +14276,13 @@ zend_error_noreturn(E_ERROR, "Function name must be a string"); } function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); + function_name_type = Z_TYPE_P(function_name); } if (ce->get_static_method) { - EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = ce->get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } else { - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = zend_std_get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } if (!is_const) { @@ -15566,10 +15584,11 @@ unsigned int function_name_strlen; zend_bool is_const = (IS_CV == IS_CONST); - + zend_uchar function_name_type; if (is_const) { function_name_strval = Z_UNIVAL(opline->op2.u.constant); function_name_strlen = Z_UNILEN(opline->op2.u.constant); + function_name_type = Z_TYPE(opline->op2.u.constant); } else { function_name = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); @@ -15577,12 +15596,13 @@ zend_error_noreturn(E_ERROR, "Function name must be a string"); } function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); + function_name_type = Z_TYPE_P(function_name); } if (ce->get_static_method) { - EX(fbc) = ce->get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = ce->get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } else { - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); + EX(fbc) = zend_std_get_static_method(ce, function_name_type, function_name_strval, function_name_strlen TSRMLS_CC); } if (!is_const) {