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