@@ -500,7 +500,12 @@ PHP_METHOD(Uri_Rfc3986_Uri, getRawScheme)
500500 uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_SCHEME , URI_COMPONENT_READ_RAW );
501501}
502502
503- static void read_uriparser_userinfo (INTERNAL_FUNCTION_PARAMETERS , uri_component_read_mode_t read_mode )
503+ PHP_METHOD (Uri_Rfc3986_Uri , withScheme )
504+ {
505+ uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_SCHEME );
506+ }
507+
508+ static void rfc3986_userinfo_read (INTERNAL_FUNCTION_PARAMETERS , uri_component_read_mode_t read_mode )
504509{
505510 ZEND_PARSE_PARAMETERS_NONE ();
506511
@@ -515,12 +520,48 @@ static void read_uriparser_userinfo(INTERNAL_FUNCTION_PARAMETERS, uri_component_
515520
516521PHP_METHOD (Uri_Rfc3986_Uri , getUserInfo )
517522{
518- read_uriparser_userinfo (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_COMPONENT_READ_NORMALIZED_ASCII );
523+ rfc3986_userinfo_read (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_COMPONENT_READ_NORMALIZED_ASCII );
519524}
520525
521526PHP_METHOD (Uri_Rfc3986_Uri , getRawUserInfo )
522527{
523- read_uriparser_userinfo (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_COMPONENT_READ_RAW );
528+ rfc3986_userinfo_read (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_COMPONENT_READ_RAW );
529+ }
530+
531+ PHP_METHOD (Uri_Rfc3986_Uri , withUserInfo )
532+ {
533+ zend_string * value ;
534+
535+ ZEND_PARSE_PARAMETERS_START (1 , 1 )
536+ Z_PARAM_PATH_STR_OR_NULL (value )
537+ ZEND_PARSE_PARAMETERS_END ();
538+
539+ zval zv ;
540+ if (value == NULL ) {
541+ ZVAL_NULL (& zv );
542+ } else {
543+ ZVAL_STR (& zv , value );
544+ }
545+
546+ uri_internal_t * internal_uri = Z_URI_INTERNAL_P (ZEND_THIS );
547+ URI_ASSERT_INITIALIZATION (internal_uri );
548+
549+ zend_object * new_object = uri_clone_obj_handler (Z_OBJ_P (ZEND_THIS ));
550+ ZEND_ASSERT (new_object != NULL );
551+
552+ uri_internal_t * new_internal_uri = uri_internal_from_obj (new_object );
553+ URI_ASSERT_INITIALIZATION (new_internal_uri );
554+
555+ zval errors ;
556+ ZVAL_UNDEF (& errors );
557+ if (UNEXPECTED (php_uri_parser_rfc3986_userinfo_write (new_internal_uri , & zv , NULL ) == FAILURE )) {
558+ zval_ptr_dtor (& errors );
559+ zend_object_release (new_object );
560+ RETURN_THROWS ();
561+ }
562+
563+ ZEND_ASSERT (Z_ISUNDEF (errors ));
564+ RETVAL_OBJ (new_object );
524565}
525566
526567PHP_METHOD (Uri_Rfc3986_Uri , getUsername )
@@ -553,11 +594,21 @@ PHP_METHOD(Uri_Rfc3986_Uri, getRawHost)
553594 uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_HOST , URI_COMPONENT_READ_RAW );
554595}
555596
597+ PHP_METHOD (Uri_Rfc3986_Uri , withHost )
598+ {
599+ uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_HOST );
600+ }
601+
556602PHP_METHOD (Uri_Rfc3986_Uri , getPort )
557603{
558604 uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PORT , URI_COMPONENT_READ_NORMALIZED_ASCII );
559605}
560606
607+ PHP_METHOD (Uri_Rfc3986_Uri , withPort )
608+ {
609+ uri_write_component_long_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PORT );
610+ }
611+
561612PHP_METHOD (Uri_Rfc3986_Uri , getPath )
562613{
563614 uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PATH , URI_COMPONENT_READ_NORMALIZED_ASCII );
@@ -568,6 +619,11 @@ PHP_METHOD(Uri_Rfc3986_Uri, getRawPath)
568619 uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PATH , URI_COMPONENT_READ_RAW );
569620}
570621
622+ PHP_METHOD (Uri_Rfc3986_Uri , withPath )
623+ {
624+ uri_write_component_str (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PATH );
625+ }
626+
571627PHP_METHOD (Uri_Rfc3986_Uri , getQuery )
572628{
573629 uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_QUERY , URI_COMPONENT_READ_NORMALIZED_ASCII );
@@ -578,6 +634,11 @@ PHP_METHOD(Uri_Rfc3986_Uri, getRawQuery)
578634 uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_QUERY , URI_COMPONENT_READ_RAW );
579635}
580636
637+ PHP_METHOD (Uri_Rfc3986_Uri , withQuery )
638+ {
639+ uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_QUERY );
640+ }
641+
581642PHP_METHOD (Uri_Rfc3986_Uri , getFragment )
582643{
583644 uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_FRAGMENT , URI_COMPONENT_READ_NORMALIZED_ASCII );
@@ -588,6 +649,11 @@ PHP_METHOD(Uri_Rfc3986_Uri, getRawFragment)
588649 uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_FRAGMENT , URI_COMPONENT_READ_RAW );
589650}
590651
652+ PHP_METHOD (Uri_Rfc3986_Uri , withFragment )
653+ {
654+ uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_FRAGMENT );
655+ }
656+
591657static void throw_cannot_recompose_uri_to_string (zend_object * object )
592658{
593659 zend_throw_exception_ex (NULL , 0 , "Cannot recompose %s to a string" , ZSTR_VAL (object -> ce -> name ));
@@ -833,29 +899,9 @@ PHP_METHOD(Uri_WhatWg_Url, getUnicodeHost)
833899 uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_HOST , URI_COMPONENT_READ_NORMALIZED_UNICODE );
834900}
835901
836- PHP_METHOD (Uri_WhatWg_Url , withHost )
837- {
838- uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_HOST );
839- }
840-
841- PHP_METHOD (Uri_WhatWg_Url , withPort )
842- {
843- uri_write_component_long_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PORT );
844- }
845-
846- PHP_METHOD (Uri_WhatWg_Url , withPath )
902+ PHP_METHOD (Uri_WhatWg_Url , getFragment )
847903{
848- uri_write_component_str (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PATH );
849- }
850-
851- PHP_METHOD (Uri_WhatWg_Url , withQuery )
852- {
853- uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_QUERY );
854- }
855-
856- PHP_METHOD (Uri_WhatWg_Url , withFragment )
857- {
858- uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_FRAGMENT );
904+ uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_FRAGMENT , URI_COMPONENT_READ_NORMALIZED_UNICODE );
859905}
860906
861907PHP_METHOD (Uri_WhatWg_Url , equals )
0 commit comments