Revision
3429
Author
lsansonetti@apple.com
Date
2010-02-03 18:10:07 -0800 (Wed, 03 Feb 2010)

Log Message

faster rb_eql()

Modified Paths

Diff

Modified: MacRuby/trunk/object.c (3428 => 3429)


--- MacRuby/trunk/object.c	2010-02-04 02:09:52 UTC (rev 3428)
+++ MacRuby/trunk/object.c	2010-02-04 02:10:07 UTC (rev 3429)
@@ -35,8 +35,11 @@
 VALUE rb_cTrueClass;
 VALUE rb_cFalseClass;
 
-static ID id_eq, id_eql, id_match, id_inspect, id_init_copy;
+static ID id_eq, id_match, id_inspect, id_init_copy;
 
+static SEL eqlSel = 0;
+static void *eqlCache = NULL;
+
 static void *allocCache = NULL;
 static void *initializeCache = NULL;
 static void *initialize2Cache = NULL;
@@ -82,7 +85,7 @@
 int
 rb_eql(VALUE obj1, VALUE obj2)
 {
-    return RTEST(rb_funcall(obj1, id_eql, 1, obj2));
+    return RTEST(rb_vm_call_with_cache(eqlCache, obj1, eqlSel, 1, &obj2));
 }
 
 /*
@@ -2947,6 +2950,8 @@
     initialize2Cache = rb_vm_get_call_cache(selInitialize2);
     eqCache = rb_vm_get_call_cache(selEq);
     dupCache = rb_vm_get_call_cache(selDup);
+    eqlSel = sel_registerName("eql?:");
+    eqlCache = rb_vm_get_call_cache(eqlSel);
 
     rb_objc_define_method(*(VALUE *)rb_cModule, "alloc", rb_module_s_alloc, 0);
     rb_objc_define_method(*(VALUE *)rb_cClass, "alloc", rb_class_s_alloc, 0);
@@ -3142,7 +3147,6 @@
     rb_define_global_const("FALSE", Qfalse);
 
     id_eq = rb_intern("==");
-    id_eql = rb_intern("eql?");
     id_match = rb_intern("=~");
     id_inspect = rb_intern("inspect");
     id_init_copy = rb_intern("initialize_copy");