Revision: 1895 http://trac.macosforge.org/projects/ruby/changeset/1895 Author: lsansonetti@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;
participants (1)
-
source_changes@macosforge.org