[macruby-changes] [4525] MacRuby/trunk/objc.m
source_changes at macosforge.org
source_changes at macosforge.org
Fri Sep 17 14:57:00 PDT 2010
Revision: 4525
http://trac.macosforge.org/projects/ruby/changeset/4525
Author: lsansonetti at apple.com
Date: 2010-09-17 14:56:59 -0700 (Fri, 17 Sep 2010)
Log Message:
-----------
better/faster handling of NSDates
Modified Paths:
--------------
MacRuby/trunk/objc.m
Modified: MacRuby/trunk/objc.m
===================================================================
--- MacRuby/trunk/objc.m 2010-09-17 21:38:19 UTC (rev 4524)
+++ MacRuby/trunk/objc.m 2010-09-17 21:56:59 UTC (rev 4525)
@@ -580,10 +580,15 @@
abort();
}
+static SEL sel_at = 0;
+
VALUE
rb_objc_convert_immediate(id obj)
{
- Class k = object_getClass(obj); // might be an immediate
+ const bool is_immediate = ((unsigned long)obj & 0x1) == 0x1;
+
+ Class orig_k = object_getClass(obj); // might be an immediate
+ Class k = orig_k;
do {
if (k == (Class)rb_cNSNumber) {
// TODO: this could be optimized in case the object is an immediate.
@@ -599,17 +604,23 @@
}
}
else if (k == (Class)rb_cNSDate) {
- CFAbsoluteTime time = CFDateGetAbsoluteTime((CFDateRef)obj);
- return rb_funcall(rb_cTime, rb_intern("at"), 1, DBL2NUM(time + CF_REFERENCE_DATE));
+ @try {
+ CFAbsoluteTime time = CFDateGetAbsoluteTime((CFDateRef)obj);
+ VALUE arg = DBL2NUM(time + CF_REFERENCE_DATE);
+ return rb_vm_call(rb_cTime, sel_at, 1, &arg);
+ }
+ @catch (NSException *e) {
+ // Some NSDates might return an exception (example: uninitialized objects).
+ break;
+ }
}
k = class_getSuperclass(k);
}
while (k != NULL);
- if (((unsigned long)obj & 0x1) == 0x1) {
- rb_bug("unknown Objective-C immediate: %p\n", obj);
+ if (is_immediate) {
+ rb_bug("unknown Objective-C immediate: %p (%s)\n", obj, class_getName(orig_k));
}
-
return (VALUE)obj;
}
@@ -784,6 +795,8 @@
void
Init_ObjC(void)
{
+ sel_at = sel_registerName("at:");
+
rb_objc_define_module_function(rb_mKernel, "load_bridge_support_file", rb_objc_load_bs, 1);
rb_objc_define_module_function(rb_mKernel, "load_plist", rb_objc_load_plist, 1);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100917/bcb50905/attachment-0001.html>
More information about the macruby-changes
mailing list