Revision: 3429 http://trac.macosforge.org/projects/ruby/changeset/3429 Author: lsansonetti@apple.com Date: 2010-02-03 18:10:07 -0800 (Wed, 03 Feb 2010) Log Message: ----------- faster rb_eql() Modified Paths: -------------- MacRuby/trunk/object.c Modified: MacRuby/trunk/object.c =================================================================== --- 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");
participants (1)
-
source_changes@macosforge.org