@@ -330,16 +330,33 @@ static zend_result pass_errors_by_ref_and_free(zval *errors_zv, zval *errors)
330
330
}
331
331
332
332
ZEND_ATTRIBUTE_NONNULL_ARGS (1 , 2 ) PHPAPI void php_uri_instantiate_uri (
333
- INTERNAL_FUNCTION_PARAMETERS , const uri_parser_t * uri_parser , const zend_string * uri_str , const zend_object * base_url_object ,
333
+ INTERNAL_FUNCTION_PARAMETERS , const zend_string * uri_str , const zend_object * base_url_object ,
334
334
bool should_throw , bool should_update_this_object , zval * errors_zv
335
335
) {
336
+
337
+ uri_object_t * uri_object ;
338
+ if (should_update_this_object ) {
339
+ uri_object = Z_URI_OBJECT_P (ZEND_THIS );
340
+ } else {
341
+ if (EX (func )-> common .fn_flags & ZEND_ACC_STATIC ) {
342
+ object_init_ex (return_value , Z_CE_P (ZEND_THIS ));
343
+ } else {
344
+ object_init_ex (return_value , Z_OBJCE_P (ZEND_THIS ));
345
+ }
346
+ uri_object = Z_URI_OBJECT_P (return_value );
347
+ }
348
+
349
+ const uri_parser_t * uri_parser = uri_object -> internal .parser ;
350
+
336
351
zval errors ;
337
352
ZVAL_UNDEF (& errors );
338
353
339
354
void * base_url = NULL ;
340
355
if (base_url_object != NULL ) {
356
+ ZEND_ASSERT (base_url_object -> ce == uri_object -> std .ce );
341
357
uri_internal_t * internal_base_url = uri_internal_from_obj (base_url_object );
342
358
URI_ASSERT_INITIALIZATION (internal_base_url );
359
+ ZEND_ASSERT (internal_base_url -> parser == uri_parser );
343
360
base_url = internal_base_url -> uri ;
344
361
}
345
362
@@ -352,6 +369,7 @@ ZEND_ATTRIBUTE_NONNULL_ARGS(1, 2) PHPAPI void php_uri_instantiate_uri(
352
369
if (pass_errors_by_ref_and_free (errors_zv , & errors ) == FAILURE ) {
353
370
RETURN_THROWS ();
354
371
}
372
+ zval_ptr_dtor (return_value );
355
373
RETURN_NULL ();
356
374
}
357
375
}
@@ -361,19 +379,6 @@ ZEND_ATTRIBUTE_NONNULL_ARGS(1, 2) PHPAPI void php_uri_instantiate_uri(
361
379
RETURN_THROWS ();
362
380
}
363
381
364
- uri_object_t * uri_object ;
365
- if (should_update_this_object ) {
366
- uri_object = Z_URI_OBJECT_P (ZEND_THIS );
367
- } else {
368
- if (EX (func )-> common .fn_flags & ZEND_ACC_STATIC ) {
369
- object_init_ex (return_value , Z_CE_P (ZEND_THIS ));
370
- } else {
371
- object_init_ex (return_value , Z_OBJCE_P (ZEND_THIS ));
372
- }
373
- uri_object = Z_URI_OBJECT_P (return_value );
374
- }
375
-
376
- uri_object -> internal .parser = uri_parser ;
377
382
uri_object -> internal .uri = uri ;
378
383
}
379
384
@@ -388,7 +393,7 @@ static void create_rfc3986_uri(INTERNAL_FUNCTION_PARAMETERS, bool is_constructor
388
393
Z_PARAM_OBJ_OF_CLASS_OR_NULL (base_url_object , uri_rfc3986_uri_ce )
389
394
ZEND_PARSE_PARAMETERS_END ();
390
395
391
- php_uri_instantiate_uri (INTERNAL_FUNCTION_PARAM_PASSTHRU , & php_uri_parser_rfc3986 , uri_str , base_url_object , is_constructor , is_constructor , NULL );
396
+ php_uri_instantiate_uri (INTERNAL_FUNCTION_PARAM_PASSTHRU , uri_str , base_url_object , is_constructor , is_constructor , NULL );
392
397
}
393
398
394
399
PHP_METHOD (Uri_Rfc3986_Uri , parse )
@@ -475,7 +480,7 @@ static void create_whatwg_uri(INTERNAL_FUNCTION_PARAMETERS, bool is_constructor)
475
480
Z_PARAM_ZVAL (errors )
476
481
ZEND_PARSE_PARAMETERS_END ();
477
482
478
- php_uri_instantiate_uri (INTERNAL_FUNCTION_PARAM_PASSTHRU , & php_uri_parser_whatwg , uri_str , base_url_object , is_constructor , is_constructor , errors );
483
+ php_uri_instantiate_uri (INTERNAL_FUNCTION_PARAM_PASSTHRU , uri_str , base_url_object , is_constructor , is_constructor , errors );
479
484
}
480
485
481
486
PHP_METHOD (Uri_WhatWg_Url , parse )
@@ -690,11 +695,7 @@ PHP_METHOD(Uri_Rfc3986_Uri, resolve)
690
695
Z_PARAM_PATH_STR (uri_str )
691
696
ZEND_PARSE_PARAMETERS_END ();
692
697
693
- zend_object * this_object = Z_OBJ_P (ZEND_THIS );
694
- uri_internal_t * internal_uri = uri_internal_from_obj (this_object );
695
- URI_ASSERT_INITIALIZATION (internal_uri );
696
-
697
- php_uri_instantiate_uri (INTERNAL_FUNCTION_PARAM_PASSTHRU , internal_uri -> parser , uri_str , this_object , true, false, NULL );
698
+ php_uri_instantiate_uri (INTERNAL_FUNCTION_PARAM_PASSTHRU , uri_str , Z_OBJ_P (ZEND_THIS ), true, false, NULL );
698
699
}
699
700
700
701
PHP_METHOD (Uri_Rfc3986_Uri , __serialize )
@@ -902,11 +903,7 @@ PHP_METHOD(Uri_WhatWg_Url, resolve)
902
903
Z_PARAM_ZVAL (errors )
903
904
ZEND_PARSE_PARAMETERS_END ();
904
905
905
- zend_object * this_object = Z_OBJ_P (ZEND_THIS );
906
- uri_internal_t * internal_uri = uri_internal_from_obj (this_object );
907
- URI_ASSERT_INITIALIZATION (internal_uri );
908
-
909
- php_uri_instantiate_uri (INTERNAL_FUNCTION_PARAM_PASSTHRU , internal_uri -> parser , uri_str , this_object , true, false, errors );
906
+ php_uri_instantiate_uri (INTERNAL_FUNCTION_PARAM_PASSTHRU , uri_str , Z_OBJ_P (ZEND_THIS ), true, false, errors );
910
907
}
911
908
912
909
PHP_METHOD (Uri_WhatWg_Url , __serialize )
0 commit comments