@@ -504,20 +504,22 @@ ZEND_API int ZEND_FASTCALL zend_parse_arg_str_weak(zval *arg, zend_string **dest
504504 convert_to_string (arg );
505505 * dest = Z_STR_P (arg );
506506 } else if (UNEXPECTED (Z_TYPE_P (arg ) == IS_OBJECT )) {
507+ zend_object * zobj = Z_OBJ_P (arg );
508+
507509 if (Z_OBJ_HANDLER_P (arg , cast_object )) {
508510 zval obj ;
509- if (Z_OBJ_HANDLER_P ( arg , cast_object )( arg , & obj , IS_STRING ) == SUCCESS ) {
510- zval_ptr_dtor ( arg );
511+ if (zobj -> handlers -> cast_object ( zobj , & obj , IS_STRING ) == SUCCESS ) {
512+ OBJ_RELEASE ( zobj );
511513 ZVAL_COPY_VALUE (arg , & obj );
512514 * dest = Z_STR_P (arg );
513515 return 1 ;
514516 }
515- } else if (Z_OBJ_HANDLER_P ( arg , get ) ) {
517+ } else if (zobj -> handlers -> get ) {
516518 zval rv ;
517- zval * z = Z_OBJ_HANDLER_P ( arg , get )( arg , & rv );
519+ zval * z = zobj -> handlers -> get ( zobj , & rv );
518520
519521 if (Z_TYPE_P (z ) != IS_OBJECT ) {
520- zval_ptr_dtor ( arg );
522+ OBJ_RELEASE ( zobj );
521523 if (Z_TYPE_P (z ) == IS_STRING ) {
522524 ZVAL_COPY_VALUE (arg , z );
523525 } else {
@@ -1101,18 +1103,16 @@ ZEND_API int zend_parse_method_parameters_ex(int flags, int num_args, zval *this
11011103 * because it may call __set from the uninitialized object otherwise. */
11021104ZEND_API void zend_merge_properties (zval * obj , HashTable * properties ) /* {{{ */
11031105{
1104- const zend_object_handlers * obj_ht = Z_OBJ_HT_P (obj );
1106+ zend_object * zobj = Z_OBJ_P (obj );
1107+ zend_object_write_property_t write_property = zobj -> handlers -> write_property ;
11051108 zend_class_entry * old_scope = EG (fake_scope );
11061109 zend_string * key ;
11071110 zval * value ;
11081111
11091112 EG (fake_scope ) = Z_OBJCE_P (obj );
11101113 ZEND_HASH_FOREACH_STR_KEY_VAL (properties , key , value ) {
11111114 if (key ) {
1112- zval member ;
1113-
1114- ZVAL_STR (& member , key );
1115- obj_ht -> write_property (obj , & member , value , NULL );
1115+ write_property (zobj , key , value , NULL );
11161116 }
11171117 } ZEND_HASH_FOREACH_END ();
11181118 EG (fake_scope ) = old_scope ;
@@ -1728,11 +1728,11 @@ ZEND_API int add_property_stringl_ex(zval *arg, const char *key, size_t key_len,
17281728
17291729ZEND_API int add_property_zval_ex (zval * arg , const char * key , size_t key_len , zval * value ) /* {{{ */
17301730{
1731- zval z_key ;
1731+ zend_string * str ;
17321732
1733- ZVAL_STRINGL ( & z_key , key , key_len );
1734- Z_OBJ_HANDLER_P (arg , write_property )(arg , & z_key , value , NULL );
1735- zval_ptr_dtor ( & z_key );
1733+ str = zend_string_init ( key , key_len , 0 );
1734+ Z_OBJ_HANDLER_P (arg , write_property )(Z_OBJ_P ( arg ), str , value , NULL );
1735+ zend_string_release_ex ( str , 0 );
17361736 return SUCCESS ;
17371737}
17381738/* }}} */
@@ -3143,16 +3143,18 @@ ZEND_API zend_string *zend_get_callable_name_ex(zval *callable, zend_object *obj
31433143 zend_class_entry * calling_scope ;
31443144 zend_function * fptr ;
31453145 zend_object * object ;
3146- if (Z_OBJ_HANDLER_P (callable , get_closure )
3147- && Z_OBJ_HANDLER_P (callable , get_closure )(callable , & calling_scope , & fptr , & object ) == SUCCESS ) {
3148- zend_class_entry * ce = Z_OBJCE_P (callable );
3146+ zend_object * zobj = Z_OBJ_P (callable );
3147+
3148+ if (zobj -> handlers -> get_closure
3149+ && zobj -> handlers -> get_closure (zobj , & calling_scope , & fptr , & object ) == SUCCESS ) {
3150+ zend_class_entry * ce = zobj -> ce ;
31493151 zend_string * callable_name = zend_string_alloc (
31503152 ZSTR_LEN (ce -> name ) + sizeof ("::__invoke" ) - 1 , 0 );
31513153 memcpy (ZSTR_VAL (callable_name ), ZSTR_VAL (ce -> name ), ZSTR_LEN (ce -> name ));
31523154 memcpy (ZSTR_VAL (callable_name ) + ZSTR_LEN (ce -> name ), "::__invoke" , sizeof ("::__invoke" ));
31533155 return callable_name ;
31543156 }
3155- return zval_get_string (callable );
3157+ return zval_get_string_func (callable );
31563158 }
31573159 case IS_REFERENCE :
31583160 callable = Z_REFVAL_P (callable );
@@ -3277,7 +3279,7 @@ static zend_always_inline zend_bool zend_is_callable_impl(zval *callable, zend_o
32773279 }
32783280 return 0 ;
32793281 case IS_OBJECT :
3280- if (Z_OBJ_HANDLER_P (callable , get_closure ) && Z_OBJ_HANDLER_P (callable , get_closure )(callable , & fcc -> calling_scope , & fcc -> function_handler , & fcc -> object ) == SUCCESS ) {
3282+ if (Z_OBJ_HANDLER_P (callable , get_closure ) && Z_OBJ_HANDLER_P (callable , get_closure )(Z_OBJ_P ( callable ) , & fcc -> calling_scope , & fcc -> function_handler , & fcc -> object ) == SUCCESS ) {
32813283 fcc -> called_scope = fcc -> calling_scope ;
32823284 return 1 ;
32833285 }
@@ -3944,28 +3946,26 @@ ZEND_API int zend_declare_class_constant_string(zend_class_entry *ce, const char
39443946
39453947ZEND_API void zend_update_property_ex (zend_class_entry * scope , zval * object , zend_string * name , zval * value ) /* {{{ */
39463948{
3947- zval property ;
39483949 zend_class_entry * old_scope = EG (fake_scope );
39493950
39503951 EG (fake_scope ) = scope ;
39513952
3952- ZVAL_STR (& property , name );
3953- Z_OBJ_HT_P (object )-> write_property (object , & property , value , NULL );
3953+ Z_OBJ_HT_P (object )-> write_property (Z_OBJ_P (object ), name , value , NULL );
39543954
39553955 EG (fake_scope ) = old_scope ;
39563956}
39573957/* }}} */
39583958
39593959ZEND_API void zend_update_property (zend_class_entry * scope , zval * object , const char * name , size_t name_length , zval * value ) /* {{{ */
39603960{
3961- zval property ;
3961+ zend_string * property ;
39623962 zend_class_entry * old_scope = EG (fake_scope );
39633963
39643964 EG (fake_scope ) = scope ;
39653965
3966- ZVAL_STRINGL ( & property , name , name_length );
3967- Z_OBJ_HT_P (object )-> write_property (object , & property , value , NULL );
3968- zval_ptr_dtor ( & property );
3966+ property = zend_string_init ( name , name_length , 0 );
3967+ Z_OBJ_HT_P (object )-> write_property (Z_OBJ_P ( object ), property , value , NULL );
3968+ zend_string_release_ex ( property , 0 );
39693969
39703970 EG (fake_scope ) = old_scope ;
39713971}
@@ -3982,14 +3982,14 @@ ZEND_API void zend_update_property_null(zend_class_entry *scope, zval *object, c
39823982
39833983ZEND_API void zend_unset_property (zend_class_entry * scope , zval * object , const char * name , size_t name_length ) /* {{{ */
39843984{
3985- zval property ;
3985+ zend_string * property ;
39863986 zend_class_entry * old_scope = EG (fake_scope );
39873987
39883988 EG (fake_scope ) = scope ;
39893989
3990- ZVAL_STRINGL ( & property , name , name_length );
3991- Z_OBJ_HT_P (object )-> unset_property (object , & property , 0 );
3992- zval_ptr_dtor ( & property );
3990+ property = zend_string_init ( name , name_length , 0 );
3991+ Z_OBJ_HT_P (object )-> unset_property (Z_OBJ_P ( object ), property , 0 );
3992+ zend_string_release_ex ( property , 0 );
39933993
39943994 EG (fake_scope ) = old_scope ;
39953995}
@@ -4148,13 +4148,12 @@ ZEND_API int zend_update_static_property_stringl(zend_class_entry *scope, const
41484148
41494149ZEND_API zval * zend_read_property_ex (zend_class_entry * scope , zval * object , zend_string * name , zend_bool silent , zval * rv ) /* {{{ */
41504150{
4151- zval property , * value ;
4151+ zval * value ;
41524152 zend_class_entry * old_scope = EG (fake_scope );
41534153
41544154 EG (fake_scope ) = scope ;
41554155
4156- ZVAL_STR (& property , name );
4157- value = Z_OBJ_HT_P (object )-> read_property (object , & property , silent ?BP_VAR_IS :BP_VAR_R , NULL , rv );
4156+ value = Z_OBJ_HT_P (object )-> read_property (Z_OBJ_P (object ), name , silent ?BP_VAR_IS :BP_VAR_R , NULL , rv );
41584157
41594158 EG (fake_scope ) = old_scope ;
41604159 return value ;
0 commit comments