[macruby-changes] [3752] MacRuby/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Fri Mar 12 19:27:20 PST 2010
Revision: 3752
http://trac.macosforge.org/projects/ruby/changeset/3752
Author: lsansonetti at apple.com
Date: 2010-03-12 19:27:20 -0800 (Fri, 12 Mar 2010)
Log Message:
-----------
support for objc immediates, removed reference to CFNumber
Modified Paths:
--------------
MacRuby/trunk/include/ruby/ruby.h
MacRuby/trunk/numeric.c
MacRuby/trunk/objc.h
Modified: MacRuby/trunk/include/ruby/ruby.h
===================================================================
--- MacRuby/trunk/include/ruby/ruby.h 2010-03-13 03:26:45 UTC (rev 3751)
+++ MacRuby/trunk/include/ruby/ruby.h 2010-03-13 03:27:20 UTC (rev 3752)
@@ -1092,7 +1092,7 @@
RUBY_EXTERN VALUE rb_cNSHash;
RUBY_EXTERN VALUE rb_cNSMutableHash;
RUBY_EXTERN VALUE rb_cRubyHash;
-RUBY_EXTERN VALUE rb_cCFNumber;
+RUBY_EXTERN VALUE rb_cNSNumber;
RUBY_EXTERN VALUE rb_cBoxed;
RUBY_EXTERN VALUE rb_cPointer;
RUBY_EXTERN VALUE rb_cTopLevel;
Modified: MacRuby/trunk/numeric.c
===================================================================
--- MacRuby/trunk/numeric.c 2010-03-13 03:26:45 UTC (rev 3751)
+++ MacRuby/trunk/numeric.c 2010-03-13 03:27:20 UTC (rev 3752)
@@ -85,7 +85,6 @@
static ID id_to_i, id_eq;
VALUE rb_cNumeric;
-VALUE rb_cCFNumber;
VALUE rb_cNSNumber;
VALUE rb_cFloat;
VALUE rb_cInteger;
@@ -3411,8 +3410,6 @@
rb_eZeroDivError = rb_define_class("ZeroDivisionError", rb_eStandardError);
rb_eFloatDomainError = rb_define_class("FloatDomainError", rb_eRangeError);
rb_cNSNumber = (VALUE)objc_getClass("NSNumber");
- rb_cCFNumber = (VALUE)objc_getClass(NSCFNUMBER_CNAME);
- assert(rb_cCFNumber != 0);
rb_cNumeric = rb_define_class("Numeric", rb_cNSNumber);
RCLASS_SET_VERSION_FLAG(rb_cNumeric, RCLASS_IS_OBJECT_SUBCLASS);
rb_define_object_special_methods(rb_cNumeric);
Modified: MacRuby/trunk/objc.h
===================================================================
--- MacRuby/trunk/objc.h 2010-03-13 03:26:45 UTC (rev 3751)
+++ MacRuby/trunk/objc.h 2010-03-13 03:27:20 UTC (rev 3752)
@@ -205,28 +205,28 @@
if (obj == (id)kCFNull || obj == nil) {
return Qnil;
}
- if (*(Class *)obj == (Class)rb_cFixnum) {
- return LONG2FIX(RFIXNUM(obj)->value);
- }
-#if 0 // XXX this does not seem to be needed
- if (*(Class *)obj == (Class)rb_cFloat) {
- extern VALUE rb_float_new(double);
- return rb_float_new(RFLOAT(obj)->float_value);
- }
-#endif
- if (*(Class *)obj == (Class)rb_cCFNumber) {
- /* TODO NSNumber should implement the Numeric primitive methods */
- if (CFNumberIsFloatType((CFNumberRef)obj)) {
- double v;
- assert(CFNumberGetValue((CFNumberRef)obj, kCFNumberDoubleType, &v));
- extern VALUE rb_float_new(double);
- return rb_float_new(v);
+ if (((unsigned long)obj & 0x1) == 0x1) {
+ // An Objective-C immediate! We only recognize NSNumbers for now.
+ Class k = object_getClass(obj);
+ while (k != NULL) {
+ if (k == (Class)rb_cNSNumber) {
+ if (CFNumberIsFloatType((CFNumberRef)obj)) {
+ // Will likely not happen, but just in case...
+ double v;
+ assert(CFNumberGetValue((CFNumberRef)obj,
+ kCFNumberDoubleType, &v));
+ return DOUBLE2NUM(v);
+ }
+ else {
+ long v;
+ assert(CFNumberGetValue((CFNumberRef)obj,
+ kCFNumberLongType, &v));
+ return LONG2FIX(v);
+ }
+ }
+ k = class_getSuperclass(k);
}
- else {
- long v;
- assert(CFNumberGetValue((CFNumberRef)obj, kCFNumberLongType, &v));
- return LONG2FIX(v);
- }
+ rb_bug("unknown Objective-C immediate: %p\n", obj);
}
return (VALUE)obj;
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100312/2c192783/attachment.html>
More information about the macruby-changes
mailing list