[macruby-changes] [2097] MacRuby/branches/experimental
source_changes at macosforge.org
source_changes at macosforge.org
Sun Jul 26 23:10:21 PDT 2009
Revision: 2097
http://trac.macosforge.org/projects/ruby/changeset/2097
Author: lsansonetti at apple.com
Date: 2009-07-26 23:10:21 -0700 (Sun, 26 Jul 2009)
Log Message:
-----------
IO#write: if the receiver isn't an IO object, dispatches the write: selector on it instead
Modified Paths:
--------------
MacRuby/branches/experimental/id.c
MacRuby/branches/experimental/id.h
MacRuby/branches/experimental/io.c
Modified: MacRuby/branches/experimental/id.c
===================================================================
--- MacRuby/branches/experimental/id.c 2009-07-27 06:09:53 UTC (rev 2096)
+++ MacRuby/branches/experimental/id.c 2009-07-27 06:10:21 UTC (rev 2097)
@@ -91,6 +91,7 @@
selMethodAdded = sel_registerName("method_added:");
selSingletonMethodAdded = sel_registerName("singleton_method_added:");
selIsEqual = sel_registerName("isEqual:");
+ selWrite = sel_registerName("write:");
cacheEach = rb_vm_get_call_cache(selEach);
#endif
Modified: MacRuby/branches/experimental/id.h
===================================================================
--- MacRuby/branches/experimental/id.h 2009-07-27 06:09:53 UTC (rev 2096)
+++ MacRuby/branches/experimental/id.h 2009-07-27 06:10:21 UTC (rev 2097)
@@ -100,6 +100,7 @@
extern SEL selMethodAdded;
extern SEL selSingletonMethodAdded;
extern SEL selIsEqual;
+extern SEL selWrite;
extern ID idIncludedModules;
extern ID idIncludedInClasses;
extern ID idAncestors;
Modified: MacRuby/branches/experimental/io.c
===================================================================
--- MacRuby/branches/experimental/io.c 2009-07-27 06:09:53 UTC (rev 2096)
+++ MacRuby/branches/experimental/io.c 2009-07-27 06:10:21 UTC (rev 2097)
@@ -15,6 +15,7 @@
#include "ruby/node.h"
#include "vm.h"
#include "objc.h"
+#include "id.h"
#include <errno.h>
#include <paths.h>
@@ -85,6 +86,12 @@
return rb_convert_type(io, T_FILE, "IO", "to_io");
}
+static inline VALUE
+rb_io_check_io(VALUE io)
+{
+ return rb_check_convert_type(io, T_FILE, "IO", "to_io");
+}
+
static int
convert_mode_string_to_fmode(VALUE rstr)
{
@@ -474,7 +481,6 @@
* That was 15 bytes of data
*/
-
static VALUE
io_write(VALUE io, SEL sel, VALUE to_write)
{
@@ -483,6 +489,13 @@
CFIndex length;
rb_secure(4);
+
+ VALUE tmp = rb_io_check_io(io);
+ if (NIL_P(tmp)) {
+ // receiver is not IO, dispatch the write method on it
+ return rb_vm_call(io, selWrite, 1, &to_write, false);
+ }
+ io = tmp;
io_struct = ExtractIOStruct(io);
rb_io_assert_writable(io_struct);
@@ -2711,7 +2724,8 @@
rb_io_write(rb_stdout, 0, rb_default_rs);
}
-VALUE rb_io_write(VALUE v, SEL sel, VALUE i)
+VALUE
+rb_io_write(VALUE v, SEL sel, VALUE i)
{
io_write(v, 0, i);
return Qnil;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090726/a0c9a8cb/attachment-0001.html>
More information about the macruby-changes
mailing list