@@ -498,7 +498,12 @@ PHP_METHOD(Uri_Rfc3986_Uri, getRawScheme)
498498	uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_SCHEME , URI_COMPONENT_READ_RAW );
499499}
500500
501- static  void  read_uriparser_userinfo (INTERNAL_FUNCTION_PARAMETERS , uri_component_read_mode_t  read_mode )
501+ PHP_METHOD (Uri_Rfc3986_Uri , withScheme )
502+ {
503+ 	uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_SCHEME );
504+ }
505+ 
506+ static  void  rfc3986_userinfo_read (INTERNAL_FUNCTION_PARAMETERS , uri_component_read_mode_t  read_mode )
502507{
503508	ZEND_PARSE_PARAMETERS_NONE ();
504509
@@ -513,12 +518,48 @@ static void read_uriparser_userinfo(INTERNAL_FUNCTION_PARAMETERS, uri_component_
513518
514519PHP_METHOD (Uri_Rfc3986_Uri , getUserInfo )
515520{
516- 	read_uriparser_userinfo (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_COMPONENT_READ_NORMALIZED_ASCII );
521+ 	rfc3986_userinfo_read (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_COMPONENT_READ_NORMALIZED_ASCII );
517522}
518523
519524PHP_METHOD (Uri_Rfc3986_Uri , getRawUserInfo )
520525{
521- 	read_uriparser_userinfo (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_COMPONENT_READ_RAW );
526+ 	rfc3986_userinfo_read (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_COMPONENT_READ_RAW );
527+ }
528+ 
529+ PHP_METHOD (Uri_Rfc3986_Uri , withUserInfo )
530+ {
531+ 	zend_string  * value ;
532+ 
533+ 	ZEND_PARSE_PARAMETERS_START (1 , 1 )
534+ 		Z_PARAM_PATH_STR_OR_NULL (value )
535+ 	ZEND_PARSE_PARAMETERS_END ();
536+ 
537+ 	zval  zv ;
538+ 	if  (value  ==  NULL ) {
539+ 		ZVAL_NULL (& zv );
540+ 	} else  {
541+ 		ZVAL_STR (& zv , value );
542+ 	}
543+ 
544+ 	zend_object  * old_object  =  Z_OBJ_P (ZEND_THIS );
545+ 	uri_internal_t  * internal_uri  =  Z_URI_INTERNAL_P (ZEND_THIS );
546+ 	URI_ASSERT_INITIALIZATION (internal_uri );
547+ 
548+ 	zend_object  * new_object  =  old_object -> handlers -> clone_obj (old_object );
549+ 	if  (new_object  ==  NULL ) {
550+ 		RETURN_THROWS ();
551+ 	}
552+ 
553+ 	/* Assign the object early. The engine will take care of destruction in 
554+ 	 * case of an exception being thrown. */ 
555+ 	RETVAL_OBJ (new_object );
556+ 
557+ 	uri_internal_t  * new_internal_uri  =  uri_internal_from_obj (new_object );
558+ 	URI_ASSERT_INITIALIZATION (new_internal_uri );
559+ 
560+ 	if  (UNEXPECTED (php_uri_parser_rfc3986_userinfo_write (new_internal_uri , & zv , NULL ) ==  FAILURE )) {
561+ 		RETURN_THROWS ();
562+ 	}
522563}
523564
524565PHP_METHOD (Uri_Rfc3986_Uri , getUsername )
@@ -551,11 +592,21 @@ PHP_METHOD(Uri_Rfc3986_Uri, getRawHost)
551592	uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_HOST , URI_COMPONENT_READ_RAW );
552593}
553594
595+ PHP_METHOD (Uri_Rfc3986_Uri , withHost )
596+ {
597+ 	uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_HOST );
598+ }
599+ 
554600PHP_METHOD (Uri_Rfc3986_Uri , getPort )
555601{
556602	uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PORT , URI_COMPONENT_READ_RAW );
557603}
558604
605+ PHP_METHOD (Uri_Rfc3986_Uri , withPort )
606+ {
607+ 	uri_write_component_long_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PORT );
608+ }
609+ 
559610PHP_METHOD (Uri_Rfc3986_Uri , getPath )
560611{
561612	uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PATH , URI_COMPONENT_READ_NORMALIZED_ASCII );
@@ -566,6 +617,11 @@ PHP_METHOD(Uri_Rfc3986_Uri, getRawPath)
566617	uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PATH , URI_COMPONENT_READ_RAW );
567618}
568619
620+ PHP_METHOD (Uri_Rfc3986_Uri , withPath )
621+ {
622+ 	uri_write_component_str (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PATH );
623+ }
624+ 
569625PHP_METHOD (Uri_Rfc3986_Uri , getQuery )
570626{
571627	uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_QUERY , URI_COMPONENT_READ_NORMALIZED_ASCII );
@@ -576,6 +632,11 @@ PHP_METHOD(Uri_Rfc3986_Uri, getRawQuery)
576632	uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_QUERY , URI_COMPONENT_READ_RAW );
577633}
578634
635+ PHP_METHOD (Uri_Rfc3986_Uri , withQuery )
636+ {
637+ 	uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_QUERY );
638+ }
639+ 
579640PHP_METHOD (Uri_Rfc3986_Uri , getFragment )
580641{
581642	uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_FRAGMENT , URI_COMPONENT_READ_NORMALIZED_ASCII );
@@ -586,6 +647,11 @@ PHP_METHOD(Uri_Rfc3986_Uri, getRawFragment)
586647	uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_FRAGMENT , URI_COMPONENT_READ_RAW );
587648}
588649
650+ PHP_METHOD (Uri_Rfc3986_Uri , withFragment )
651+ {
652+ 	uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_FRAGMENT );
653+ }
654+ 
589655static  void  throw_cannot_recompose_uri_to_string (zend_object  * object )
590656{
591657	zend_throw_exception_ex (NULL , 0 , "Cannot recompose %s to a string" , ZSTR_VAL (object -> ce -> name ));
@@ -831,29 +897,9 @@ PHP_METHOD(Uri_WhatWg_Url, getUnicodeHost)
831897	uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_HOST , URI_COMPONENT_READ_NORMALIZED_UNICODE );
832898}
833899
834- PHP_METHOD (Uri_WhatWg_Url , withHost )
835- {
836- 	uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_HOST );
837- }
838- 
839- PHP_METHOD (Uri_WhatWg_Url , withPort )
840- {
841- 	uri_write_component_long_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PORT );
842- }
843- 
844- PHP_METHOD (Uri_WhatWg_Url , withPath )
900+ PHP_METHOD (Uri_WhatWg_Url , getFragment )
845901{
846- 	uri_write_component_str (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PATH );
847- }
848- 
849- PHP_METHOD (Uri_WhatWg_Url , withQuery )
850- {
851- 	uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_QUERY );
852- }
853- 
854- PHP_METHOD (Uri_WhatWg_Url , withFragment )
855- {
856- 	uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_FRAGMENT );
902+ 	uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_FRAGMENT , URI_COMPONENT_READ_NORMALIZED_UNICODE );
857903}
858904
859905PHP_METHOD (Uri_WhatWg_Url , equals )
0 commit comments