ruby-changes:2573
From: ko1@a...
Date: 1 Dec 2007 14:22:35 +0900
Subject: [ruby-changes:2573] matz - Ruby:r14064 (trunk): * io.c (rb_f_open): use to_open for every non-string object. path
matz 2007-12-01 14:22:15 +0900 (Sat, 01 Dec 2007) New Revision: 14064 Modified files: trunk/ChangeLog trunk/io.c Log: * io.c (rb_f_open): use to_open for every non-string object. path object may use method_missing. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=14064&r2=14063 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/io.c?r1=14064&r2=14063 Index: ChangeLog =================================================================== --- ChangeLog (revision 14063) +++ ChangeLog (revision 14064) @@ -13,6 +13,11 @@ * bootstraptest/test_block.rb: ditto. +Sat Dec 1 10:45:56 2007 Yukihiro Matsumoto <matz@r...> + + * io.c (rb_f_open): use to_open for every non-string object. path + object may use method_missing. + Sat Dec 1 09:44:32 2007 Yukihiro Matsumoto <matz@r...> * insns.def (concatarray, splatarray): use to_a instead of Index: io.c =================================================================== --- io.c (revision 14063) +++ io.c (revision 14064) @@ -3782,20 +3782,20 @@ static VALUE rb_f_open(int argc, VALUE *argv) { + ID to_open; + int redirect = Qfalse; + if (argc >= 1) { - ID to_open = rb_intern("to_open"); - + to_open = rb_intern("to_open"); if (rb_respond_to(argv[0], to_open)) { - VALUE io = rb_funcall2(argv[0], to_open, argc-1, argv+1); - - if (rb_block_given_p()) { - return rb_ensure(rb_yield, io, io_close, io); - } - return io; + redirect = Qtrue; } else { VALUE tmp = rb_check_string_type(argv[0]); - if (!NIL_P(tmp)) { + if (NIL_P(tmp)) { + redirect = Qtrue; + } + else { char *str = StringValuePtr(tmp); if (str && str[0] == '|') { argv[0] = rb_str_new(str+1, RSTRING_LEN(tmp)-1); @@ -3805,6 +3805,14 @@ } } } + if (redirect) { + VALUE io = rb_funcall2(argv[0], to_open, argc-1, argv+1); + + if (rb_block_given_p()) { + return rb_ensure(rb_yield, io, io_close, io); + } + return io; + } return rb_io_s_open(argc, argv, rb_cFile); } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml