[macruby-changes] [1895] MacRuby/branches/experimental

source_changes at macosforge.org source_changes at macosforge.org
Fri Jun 19 17:57:51 PDT 2009


Revision: 1895
          http://trac.macosforge.org/projects/ruby/changeset/1895
Author:   lsansonetti at apple.com
Date:     2009-06-19 17:57:44 -0700 (Fri, 19 Jun 2009)
Log Message:
-----------
better version of last commit

Modified Paths:
--------------
    MacRuby/branches/experimental/bridgesupport.cpp
    MacRuby/branches/experimental/bridgesupport.h
    MacRuby/branches/experimental/compiler.cpp

Modified: MacRuby/branches/experimental/bridgesupport.cpp
===================================================================
--- MacRuby/branches/experimental/bridgesupport.cpp	2009-06-20 00:47:41 UTC (rev 1894)
+++ MacRuby/branches/experimental/bridgesupport.cpp	2009-06-20 00:57:44 UTC (rev 1895)
@@ -537,11 +537,15 @@
     return Data_Wrap_Struct(rb_cPointer, NULL, NULL, ptr);
 }
 
+static VALUE rb_pointer_assign(VALUE rcv, SEL sel, VALUE val);
+
 VALUE
-rb_pointer_new2(const char *type_str)
+rb_pointer_new2(const char *type_str, VALUE rval)
 {
-    return rb_pointer_new(type_str,
+    VALUE p = rb_pointer_new(type_str,
 	    xmalloc(GET_VM()->get_sizeof(type_str)));
+    rb_pointer_assign(p, 0, rval);
+    return p;
 }
 
 static VALUE
@@ -612,7 +616,7 @@
 static VALUE
 rb_pointer_assign(VALUE rcv, SEL sel, VALUE val)
 {
-    return rb_pointer_aset(rcv, 0, FIX2INT(0), val);
+    return rb_pointer_aset(rcv, 0, INT2FIX(0), val);
 }
 
 static VALUE

Modified: MacRuby/branches/experimental/bridgesupport.h
===================================================================
--- MacRuby/branches/experimental/bridgesupport.h	2009-06-20 00:47:41 UTC (rev 1894)
+++ MacRuby/branches/experimental/bridgesupport.h	2009-06-20 00:57:44 UTC (rev 1895)
@@ -26,7 +26,7 @@
 } rb_vm_bs_boxed_t;
 
 VALUE rb_pointer_new(const char *type_str, void *val);
-VALUE rb_pointer_new2(const char *type_str);
+VALUE rb_pointer_new2(const char *type_str, VALUE val);
 void *rb_pointer_get_data(VALUE rcv, const char *type);
 
 bool rb_boxed_is_type(VALUE klass, const char *type);

Modified: MacRuby/branches/experimental/compiler.cpp
===================================================================
--- MacRuby/branches/experimental/compiler.cpp	2009-06-20 00:47:41 UTC (rev 1894)
+++ MacRuby/branches/experimental/compiler.cpp	2009-06-20 00:57:44 UTC (rev 1895)
@@ -4604,13 +4604,12 @@
     if (NIL_P(rval)) {
 	*cptr = NULL;
     }
-    else if (rb_boxed_is_type(CLASS_OF(rval), type + 1)) {
-	// A convenience helper so that the user can pass a Boxed object
-	// instead of a Pointer to the object.
-	VALUE ptr = rb_pointer_new2(type + 1);
-	*cptr = rb_pointer_get_data(ptr, type);
-    }
     else {
+	if (rb_boxed_is_type(CLASS_OF(rval), type + 1)) {
+	    // A convenience helper so that the user can pass a Boxed object
+	    // instead of a Pointer to the object.
+	    rval = rb_pointer_new2(type + 1, rval);
+	}
 	*cptr = rb_pointer_get_data(rval, type);
     }
     return *cptr;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090619/edbb500d/attachment.html>


More information about the macruby-changes mailing list