Project

General

Profile

Feature #14042 ยป ruby-changes.patch

Updated patch file - rohitpaulk (Paul Kuruvilla), 10/23/2017 12:06 PM

View differences:

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)
    (1-1/1)