@@ -2791,7 +2791,7 @@ rb_ary_resurrect(VALUE ary)
27912791 return ary_make_partial (ary , rb_cArray , 0 , RARRAY_LEN (ary ));
27922792}
27932793
2794- extern VALUE rb_output_fs ;
2794+ extern VALUE rb_get_output_fs ( void ) ;
27952795
27962796static void ary_join_1 (VALUE obj , VALUE ary , VALUE sep , long i , VALUE result , int * first );
27972797
@@ -2858,31 +2858,37 @@ ary_join_1_ary(VALUE obj, VALUE ary, VALUE sep, VALUE result, VALUE val, int *fi
28582858 }
28592859}
28602860
2861+ void
2862+ rb_ary_join_1 (VALUE obj , VALUE ary , VALUE val , VALUE sep , VALUE result , int * first )
2863+ {
2864+ VALUE tmp ;
2865+
2866+ if (!* first && !NIL_P (sep ))
2867+ rb_str_buf_append (result , sep );
2868+
2869+ if (RB_TYPE_P (val , T_STRING )) {
2870+ ary_join_1_str (result , val , first );
2871+ }
2872+ else if (RB_TYPE_P (val , T_ARRAY )) {
2873+ ary_join_1_ary (val , ary , sep , result , val , first );
2874+ }
2875+ else if (!NIL_P (tmp = rb_check_string_type (val ))) {
2876+ ary_join_1_str (result , tmp , first );
2877+ }
2878+ else if (!NIL_P (tmp = rb_check_array_type (val ))) {
2879+ ary_join_1_ary (val , ary , sep , result , tmp , first );
2880+ }
2881+ else {
2882+ ary_join_1_str (result , rb_obj_as_string (val ), first );
2883+ }
2884+ }
2885+
28612886static void
28622887ary_join_1 (VALUE obj , VALUE ary , VALUE sep , long i , VALUE result , int * first )
28632888{
2864- VALUE val , tmp ;
2865-
28662889 for (; i < RARRAY_LEN (ary ); i ++ ) {
2867- if (i > 0 && !NIL_P (sep ))
2868- rb_str_buf_append (result , sep );
2869-
2870- val = RARRAY_AREF (ary , i );
2871- if (RB_TYPE_P (val , T_STRING )) {
2872- ary_join_1_str (result , val , first );
2873- }
2874- else if (RB_TYPE_P (val , T_ARRAY )) {
2875- ary_join_1_ary (val , ary , sep , result , val , first );
2876- }
2877- else if (!NIL_P (tmp = rb_check_string_type (val ))) {
2878- ary_join_1_str (result , tmp , first );
2879- }
2880- else if (!NIL_P (tmp = rb_check_array_type (val ))) {
2881- ary_join_1_ary (val , ary , sep , result , tmp , first );
2882- }
2883- else {
2884- ary_join_1_str (result , rb_obj_as_string (val ), first );
2885- }
2890+ VALUE val = RARRAY_AREF (ary , i );
2891+ rb_ary_join_1 (obj , ary , val , sep , result , first );
28862892 }
28872893}
28882894
@@ -2960,10 +2966,7 @@ rb_ary_join_m(int argc, VALUE *argv, VALUE ary)
29602966 VALUE sep ;
29612967
29622968 if (rb_check_arity (argc , 0 , 1 ) == 0 || NIL_P (sep = argv [0 ])) {
2963- sep = rb_output_fs ;
2964- if (!NIL_P (sep )) {
2965- rb_category_warn (RB_WARN_CATEGORY_DEPRECATED , "$, is set to non-nil value" );
2966- }
2969+ sep = rb_get_output_fs ();
29672970 }
29682971
29692972 return rb_ary_join (ary , sep );
0 commit comments