[macruby-changes] [392] MacRuby/branches/lrz_unstable
source_changes at macosforge.org
source_changes at macosforge.org
Sat Aug 2 01:05:21 PDT 2008
Revision: 392
http://trac.macosforge.org/projects/ruby/changeset/392
Author: lsansonetti at apple.com
Date: 2008-08-02 01:05:20 -0700 (Sat, 02 Aug 2008)
Log Message:
-----------
wip
Modified Paths:
--------------
MacRuby/branches/lrz_unstable/array.c
MacRuby/branches/lrz_unstable/bignum.c
MacRuby/branches/lrz_unstable/numeric.c
MacRuby/branches/lrz_unstable/object.c
Modified: MacRuby/branches/lrz_unstable/array.c
===================================================================
--- MacRuby/branches/lrz_unstable/array.c 2008-08-02 02:56:32 UTC (rev 391)
+++ MacRuby/branches/lrz_unstable/array.c 2008-08-02 08:05:20 UTC (rev 392)
@@ -1736,10 +1736,19 @@
rb_ary_modify(ary);
n = RARRAY_LEN(ary);
if (n > 0) {
+ void **values;
+ CFRange range;
long i;
- for (i = 0; i < (n / 2); i++)
- CFArrayExchangeValuesAtIndices((CFMutableArrayRef)ary,
- i, n - i - 1);
+
+ values = alloca(sizeof(void *) * n);
+ range = CFRangeMake(0, n);
+ CFArrayGetValues((CFArrayRef)ary, range, (const void **)values);
+ for (i = 0; i < (n / 2); i++) {
+ void *v = values[i];
+ values[i] = values[n - i - 1];
+ values[n - i - 1] = v;
+ }
+ CFArrayReplaceValues((CFMutableArrayRef)ary, range, (const void **)values, n);
}
#else
VALUE *p1, *p2;
Modified: MacRuby/branches/lrz_unstable/bignum.c
===================================================================
--- MacRuby/branches/lrz_unstable/bignum.c 2008-08-02 02:56:32 UTC (rev 391)
+++ MacRuby/branches/lrz_unstable/bignum.c 2008-08-02 08:05:20 UTC (rev 392)
@@ -2680,6 +2680,16 @@
return NUM2LL(rcv);
}
+static bool
+imp_rb_bignum_isEqual(void *rcv, SEL sel, void *other)
+{
+ if (other == NULL)
+ return false;
+ if (*(Class *)other != (Class)rb_cBignum)
+ return false;
+ return rb_big_eq((VALUE)rcv, (VALUE)other) == Qtrue;
+}
+
static inline void
rb_objc_install_method(Class klass, SEL sel, IMP imp)
{
@@ -2698,6 +2708,8 @@
(IMP)imp_rb_bignum_getValue);
rb_objc_install_method(klass, sel_registerName("longLongValue"),
(IMP)imp_rb_bignum_longLongValue);
+ rb_objc_install_method(klass, sel_registerName("isEqual:"),
+ (IMP)imp_rb_bignum_isEqual);
}
#endif
Modified: MacRuby/branches/lrz_unstable/numeric.c
===================================================================
--- MacRuby/branches/lrz_unstable/numeric.c 2008-08-02 02:56:32 UTC (rev 391)
+++ MacRuby/branches/lrz_unstable/numeric.c 2008-08-02 08:05:20 UTC (rev 392)
@@ -106,7 +106,7 @@
val = (struct RFixnum *)CFDictionaryGetValue(fixnum_cache, (const void *)fixnum);
if (val == NULL) {
- val = (struct RFixnum *)rb_objc_newobj(sizeof(struct RFixnum));
+ val = (struct RFixnum *)malloc(sizeof(struct RFixnum));
val->klass = rb_cFixnum;
val->value = FIX2LONG(fixnum);
CFDictionarySetValue(fixnum_cache, (const void *)fixnum, (const void *)val);
Modified: MacRuby/branches/lrz_unstable/object.c
===================================================================
--- MacRuby/branches/lrz_unstable/object.c 2008-08-02 02:56:32 UTC (rev 391)
+++ MacRuby/branches/lrz_unstable/object.c 2008-08-02 08:05:20 UTC (rev 392)
@@ -1598,11 +1598,14 @@
obj = rb_obj_alloc(klass);
init_obj = rb_obj_call_init(obj, argc, argv);
- p = CLASS_OF(init_obj);
- while (p != 0) {
- if (p == klass)
- return init_obj;
- p = RCLASS_SUPER(p);
+
+ if (init_obj != Qnil) {
+ p = CLASS_OF(init_obj);
+ while (p != 0) {
+ if (p == klass)
+ return init_obj;
+ p = RCLASS_SUPER(p);
+ }
}
return obj;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macruby-changes/attachments/20080802/78241d8e/attachment.html
More information about the macruby-changes
mailing list