[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