@@ -659,6 +659,7 @@ static HashTable *date_object_get_gc_timezone(zval *object, zval **table, int *n
659
659
660
660
zval * date_interval_read_property (zval * object , zval * member , int type , void * * cache_slot , zval * rv );
661
661
void date_interval_write_property (zval * object , zval * member , zval * value , void * * cache_slot );
662
+ static zval * date_interval_get_property_ptr_ptr (zval * object , zval * member , int type , void * * cache_slot );
662
663
static zval * date_period_read_property (zval * object , zval * member , int type , void * * cache_slot , zval * rv );
663
664
static void date_period_write_property (zval * object , zval * member , zval * value , void * * cache_slot );
664
665
@@ -2149,7 +2150,7 @@ static void date_register_classes(void) /* {{{ */
2149
2150
date_object_handlers_interval .read_property = date_interval_read_property ;
2150
2151
date_object_handlers_interval .write_property = date_interval_write_property ;
2151
2152
date_object_handlers_interval .get_properties = date_object_get_properties_interval ;
2152
- date_object_handlers_interval .get_property_ptr_ptr = NULL ;
2153
+ date_object_handlers_interval .get_property_ptr_ptr = date_interval_get_property_ptr_ptr ;
2153
2154
date_object_handlers_interval .get_gc = date_object_get_gc_interval ;
2154
2155
2155
2156
INIT_CLASS_ENTRY (ce_period , "DatePeriod" , date_funcs_period );
@@ -4250,6 +4251,40 @@ void date_interval_write_property(zval *object, zval *member, zval *value, void
4250
4251
}
4251
4252
/* }}} */
4252
4253
4254
+ /* {{{ date_interval_get_property_ptr_ptr */
4255
+ static zval * date_interval_get_property_ptr_ptr (zval * object , zval * member , int type , void * * cache_slot )
4256
+ {
4257
+ zval tmp_member , * ret ;
4258
+
4259
+ if (Z_TYPE_P (member ) != IS_STRING ) {
4260
+ tmp_member = * member ;
4261
+ zval_copy_ctor (& tmp_member );
4262
+ convert_to_string (& tmp_member );
4263
+ member = & tmp_member ;
4264
+ cache_slot = NULL ;
4265
+ }
4266
+
4267
+ if (zend_binary_strcmp ("y" , sizeof ("y" ) - 1 , Z_STRVAL_P (member ), Z_STRLEN_P (member )) == 0 ||
4268
+ zend_binary_strcmp ("m" , sizeof ("m" ) - 1 , Z_STRVAL_P (member ), Z_STRLEN_P (member )) == 0 ||
4269
+ zend_binary_strcmp ("d" , sizeof ("d" ) - 1 , Z_STRVAL_P (member ), Z_STRLEN_P (member )) == 0 ||
4270
+ zend_binary_strcmp ("h" , sizeof ("h" ) - 1 , Z_STRVAL_P (member ), Z_STRLEN_P (member )) == 0 ||
4271
+ zend_binary_strcmp ("i" , sizeof ("i" ) - 1 , Z_STRVAL_P (member ), Z_STRLEN_P (member )) == 0 ||
4272
+ zend_binary_strcmp ("s" , sizeof ("s" ) - 1 , Z_STRVAL_P (member ), Z_STRLEN_P (member )) == 0 ||
4273
+ zend_binary_strcmp ("days" , sizeof ("days" ) - 1 , Z_STRVAL_P (member ), Z_STRLEN_P (member )) == 0 ||
4274
+ zend_binary_strcmp ("invert" , sizeof ("invert" ) - 1 , Z_STRVAL_P (member ), Z_STRLEN_P (member )) == 0 ) {
4275
+ /* Fallback to read_property. */
4276
+ ret = NULL ;
4277
+ } else {
4278
+ ret = (zend_get_std_object_handlers ())-> get_property_ptr_ptr (object , member , type , cache_slot );
4279
+ }
4280
+
4281
+ if (member == & tmp_member ) {
4282
+ zval_dtor (member );
4283
+ }
4284
+
4285
+ return ret ;
4286
+ }
4287
+ /* }}} */
4253
4288
4254
4289
/* {{{ proto DateInterval::__construct([string interval_spec])
4255
4290
Creates new DateInterval object.
0 commit comments