Feature #14042 ยป ruby-changes.patch
| io.c (working copy) | ||
|---|---|---|
| 
         return rb_funcallv(io, id_write, 1, &str); 
   | 
||
| 
     } 
   | 
||
| 
     VALUE 
   | 
||
| 
     rb_io_writev(VALUE io, int argc, VALUE *argv) 
   | 
||
| 
     { 
   | 
||
| 
         return rb_funcallv(io, id_write, argc, argv); 
   | 
||
| 
     } 
   | 
||
| 
     /* 
   | 
||
| 
      *  call-seq: 
   | 
||
| 
      *     ios << obj     -> ios 
   | 
||
| ... | ... | |
| 
         return Qtrue; 
   | 
||
| 
     } 
   | 
||
| 
     void 
   | 
||
| 
     io_puts_string(VALUE out, VALUE str) 
   | 
||
| 
     { 
   | 
||
| 
         if (RSTRING_LEN(str) == 0 || !rb_str_end_with_asciichar(str, '\n')) { 
   | 
||
| 
     #ifdef HAVE_WRITEV 
   | 
||
| 
             VALUE args[2]; 
   | 
||
| 
             args[0] = str; 
   | 
||
| 
             args[1] = rb_default_rs; 
   | 
||
| 
             rb_io_writev(out, 2, args); 
   | 
||
| 
     #else 
   | 
||
| 
             rb_io_write(out, str); 
   | 
||
| 
             rb_io_write(out, rb_default_rs); 
   | 
||
| 
     #endif 
   | 
||
| 
         } 
   | 
||
| 
         else { 
   | 
||
| 
             rb_io_write(out, str); 
   | 
||
| 
         } 
   | 
||
| 
     } 
   | 
||
| 
     /* 
   | 
||
| 
      *  call-seq: 
   | 
||
| 
      *     ios.puts(obj, ...)    -> nil 
   | 
||
| ... | ... | |
| 
     rb_io_puts(int argc, const VALUE *argv, VALUE out) 
   | 
||
| 
     { 
   | 
||
| 
         int i; 
   | 
||
| 
         VALUE line; 
   | 
||
| 
         /* if no argument given, print newline. */ 
   | 
||
| 
         if (argc == 0) { 
   | 
||
| 
     	rb_io_write(out, rb_default_rs); 
   | 
||
| 
     	return Qnil; 
   | 
||
| 
             rb_io_write(out, rb_default_rs); 
   | 
||
| 
             return Qnil; 
   | 
||
| 
         } 
   | 
||
| 
         for (i=0; i<argc; i++) { 
   | 
||
| 
     	if (RB_TYPE_P(argv[i], T_STRING)) { 
   | 
||
| 
     	    line = argv[i]; 
   | 
||
| 
     	    goto string; 
   | 
||
| 
     	} 
   | 
||
| 
     	if (rb_exec_recursive(io_puts_ary, argv[i], out)) { 
   | 
||
| 
     	    continue; 
   | 
||
| 
     	} 
   | 
||
| 
     	line = rb_obj_as_string(argv[i]); 
   | 
||
| 
           string: 
   | 
||
| 
     	rb_io_write(out, line); 
   | 
||
| 
     	if (RSTRING_LEN(line) == 0 || 
   | 
||
| 
                 !rb_str_end_with_asciichar(line, '\n')) { 
   | 
||
| 
     	    rb_io_write(out, rb_default_rs); 
   | 
||
| 
     	} 
   | 
||
| 
             if (RB_TYPE_P(argv[i], T_STRING)) { 
   | 
||
| 
                 io_puts_string(out, argv[i]); 
   | 
||
| 
                 continue; 
   | 
||
| 
             } 
   | 
||
| 
             if (rb_exec_recursive(io_puts_ary, argv[i], out)) { 
   | 
||
| 
                 continue; 
   | 
||
| 
             } 
   | 
||
| 
             io_puts_string(out, rb_obj_as_string(argv[i])); 
   | 
||
| 
         } 
   | 
||
| 
         return Qnil; 
   | 
||
| test/mkmf/base.rb (working copy) | ||
|---|---|---|
| 
         def filter(&block) 
   | 
||
| 
           @filter = block 
   | 
||
| 
         end 
   | 
||
| 
         def write(s) 
   | 
||
| 
         def write(*args) 
   | 
||
| 
           if @out 
   | 
||
| 
             @buffer << s 
   | 
||
| 
             @buffer << args.join 
   | 
||
| 
           elsif @origin 
   | 
||
| 
             @origin << s 
   | 
||
| 
             @origin << args.join 
   | 
||
| 
           end 
   | 
||
| 
         end 
   | 
||
| 
       end 
   | 
||
| test/ruby/test_io.rb (working copy) | ||
|---|---|---|
| 
         end) 
   | 
||
| 
       end 
   | 
||
| 
       def test_puts_parallel 
   | 
||
| 
         pipe(proc do |w| 
   | 
||
| 
           threads = [] 
   | 
||
| 
           100.times do 
   | 
||
| 
             threads << Thread.new { w.puts "hey" } 
   | 
||
| 
           end 
   | 
||
| 
           threads.each(&:join) 
   | 
||
| 
           w.close 
   | 
||
| 
         end, proc do |r| 
   | 
||
| 
           assert_equal("hey\n" * 100, r.read) 
   | 
||
| 
         end) 
   | 
||
| 
       end 
   | 
||
| 
       def test_display 
   | 
||
| 
         pipe(proc do |w| 
   | 
||
| 
           "foo".display(w) 
   | 
||