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