Hi Eric, Could you create an issue on github issues at http://github.com/evanphx/rubinius/issues with all this information? That is actively used and tracked for issues so it's probably a better place to handle it.
-- Regards, Dirkjan Bussink On 25 Sep 2010, at 06:53, Eric Wong wrote: > Hi all, > > I noticed subclassing IO didn't work as expected for pipe/popen and > pushed the following patch out to the "io-subclass-fix" branch of > git://git.bogomips.org/rubinius.git > > I'm not sure about the spec location/style, but the fix itself is > trivially correct to me. Let me know if you have any > questions/comments. > > From 69e7a1cc0a7b2187f13245930980171b46afcc6f Mon Sep 17 00:00:00 2001 > From: Eric Wong <[email protected]> > Date: Sat, 25 Sep 2010 04:31:47 +0000 > Subject: [PATCH] subclassing IO works properly for pipe/popen > > Subclasses of IO should return objects of the > subclass, not the core IO object. > --- > kernel/common/io.rb | 8 ++-- > spec/ruby/core/io/subclass_singleton_spec.rb | 41 ++++++++++++++++++++++++++ > 2 files changed, 45 insertions(+), 4 deletions(-) > create mode 100644 spec/ruby/core/io/subclass_singleton_spec.rb > > diff --git a/kernel/common/io.rb b/kernel/common/io.rb > index 8907631..67c7bee 100644 > --- a/kernel/common/io.rb > +++ b/kernel/common/io.rb > @@ -340,8 +340,8 @@ class IO > # Sending message to parent > # Parent got: <Hi Dad> > def self.pipe > - lhs = IO.allocate > - rhs = IO.allocate > + lhs = allocate > + rhs = allocate > connect_pipe(lhs, rhs) > lhs.sync = true > rhs.sync = true > @@ -401,8 +401,8 @@ class IO > readable = true > end > > - pa_read, ch_write = IO.pipe if readable > - ch_read, pa_write = IO.pipe if writable > + pa_read, ch_write = pipe if readable > + ch_read, pa_write = pipe if writable > > pid = Process.fork > > diff --git a/spec/ruby/core/io/subclass_singleton_spec.rb > b/spec/ruby/core/io/subclass_singleton_spec.rb > new file mode 100644 > index 0000000..d7ac05b > --- /dev/null > +++ b/spec/ruby/core/io/subclass_singleton_spec.rb > @@ -0,0 +1,41 @@ > +require File.expand_path('../../../spec_helper', __FILE__) > + > +class SubIO < IO > +end > + > +describe "subclassed IO singleton methods exposes subclassed objects" do > + > + it "lets subclassed popen yield an object of subclass" do > + SubIO.popen("true", "r") do |io| > + io.should be_an_instance_of(SubIO) > + end > + end > + > + it "lets subclassed popen return an object of subclass" do > + io = SubIO.popen("true", "r") > + io.should be_an_instance_of(SubIO) > + io.close > + end > + > + it "returns a pipe belonging to subclasses" do > + r, w = SubIO.pipe > + r.should be_an_instance_of(SubIO) > + w.should be_an_instance_of(SubIO) > + w.close > + r.close > + end > + > + it "creates objects belonging to subclasses from file descriptors" do > + r, w = IO.pipe > + r.should be_an_instance_of(IO) > + w.should be_an_instance_of(IO) > + sr = SubIO.for_fd(r.fileno) > + sr.should be_an_instance_of(SubIO) > + sr.close > + begin > + r.close > + rescue Errno::EBADF > + end > + w.close > + end > +end > -- > Eric Wong > > -- > --- !ruby/object:MailingList > name: rubinius-dev > view: http://groups.google.com/group/rubinius-dev?hl=en > post: [email protected] > unsubscribe: [email protected] -- --- !ruby/object:MailingList name: rubinius-dev view: http://groups.google.com/group/rubinius-dev?hl=en post: [email protected] unsubscribe: [email protected]
