[macruby-changes] [2128] MacRuby/branches/experimental
source_changes at macosforge.org
source_changes at macosforge.org
Fri Jul 31 22:21:29 PDT 2009
Revision: 2128
http://trac.macosforge.org/projects/ruby/changeset/2128
Author: lsansonetti at apple.com
Date: 2009-07-31 22:21:26 -0700 (Fri, 31 Jul 2009)
Log Message:
-----------
optimize numeric coerce dispatch calls
Modified Paths:
--------------
MacRuby/branches/experimental/include/ruby/intern.h
MacRuby/branches/experimental/numeric.c
Modified: MacRuby/branches/experimental/include/ruby/intern.h
===================================================================
--- MacRuby/branches/experimental/include/ruby/intern.h 2009-08-01 04:01:30 UTC (rev 2127)
+++ MacRuby/branches/experimental/include/ruby/intern.h 2009-08-01 05:21:26 UTC (rev 2128)
@@ -407,7 +407,7 @@
void rb_num_zerodiv(void);
VALUE rb_num_coerce_bin(VALUE, VALUE, ID);
VALUE rb_num_coerce_cmp(VALUE, VALUE, ID);
-VALUE rb_num_coerce_relop(VALUE, VALUE, ID);
+VALUE rb_num_coerce_relop(VALUE, VALUE, SEL);
VALUE rb_float_new(double);
VALUE rb_num2fix(VALUE);
VALUE rb_fix2str(VALUE, int);
Modified: MacRuby/branches/experimental/numeric.c
===================================================================
--- MacRuby/branches/experimental/numeric.c 2009-08-01 04:01:30 UTC (rev 2127)
+++ MacRuby/branches/experimental/numeric.c 2009-08-01 05:21:26 UTC (rev 2128)
@@ -18,6 +18,7 @@
#include "objc.h"
#include <ruby/node.h>
#include "vm.h"
+#include "id.h"
#ifdef HAVE_FLOAT_H
#include <float.h>
@@ -80,7 +81,8 @@
}
#endif
-static ID id_coerce, id_to_i, id_eq;
+static SEL sel_coerce;
+static ID id_to_i, id_eq;
VALUE rb_cNumeric;
VALUE rb_cCFNumber;
@@ -178,7 +180,7 @@
static VALUE
coerce_body(VALUE *x)
{
- return rb_funcall(x[1], id_coerce, 1, x[0]);
+ return rb_vm_call(x[1], sel_coerce, 1, &x[0], false);
}
static VALUE
@@ -231,12 +233,12 @@
}
VALUE
-rb_num_coerce_relop(VALUE x, VALUE y, ID func)
+rb_num_coerce_relop(VALUE x, VALUE y, SEL sel)
{
VALUE c, x0 = x, y0 = y;
if (!do_coerce(&x, &y, Qfalse) ||
- NIL_P(c = rb_funcall(x, func, 1, y))) {
+ NIL_P(c = rb_vm_call(x, sel, 1, &y, false))) {
rb_cmperr(x0, y0);
return Qnil; /* not reached */
}
@@ -1032,7 +1034,7 @@
break;
default:
- return rb_num_coerce_relop(x, y, '>');
+ return rb_num_coerce_relop(x, y, selGT);
}
if (isnan(a)) return Qfalse;
return (a > b)?Qtrue:Qfalse;
@@ -1067,7 +1069,7 @@
break;
default:
- return rb_num_coerce_relop(x, y, rb_intern(">="));
+ return rb_num_coerce_relop(x, y, selGE);
}
if (isnan(a)) return Qfalse;
return (a >= b)?Qtrue:Qfalse;
@@ -1101,7 +1103,7 @@
break;
default:
- return rb_num_coerce_relop(x, y, '<');
+ return rb_num_coerce_relop(x, y, selLT);
}
if (isnan(a)) return Qfalse;
return (a < b)?Qtrue:Qfalse;
@@ -1136,7 +1138,7 @@
break;
default:
- return rb_num_coerce_relop(x, y, rb_intern("<="));
+ return rb_num_coerce_relop(x, y, selLE);
}
if (isnan(a)) return Qfalse;
return (a <= b)?Qtrue:Qfalse;
@@ -2615,7 +2617,7 @@
case T_FLOAT:
return (double)FIX2LONG(x) > RFLOAT_VALUE(y) ? Qtrue : Qfalse;
default:
- return rb_num_coerce_relop(x, y, '>');
+ return rb_num_coerce_relop(x, y, selGT);
}
}
@@ -2640,7 +2642,7 @@
case T_FLOAT:
return (double)FIX2LONG(x) >= RFLOAT_VALUE(y) ? Qtrue : Qfalse;
default:
- return rb_num_coerce_relop(x, y, rb_intern(">="));
+ return rb_num_coerce_relop(x, y, selGE);
}
}
@@ -2665,7 +2667,7 @@
case T_FLOAT:
return (double)FIX2LONG(x) < RFLOAT_VALUE(y) ? Qtrue : Qfalse;
default:
- return rb_num_coerce_relop(x, y, '<');
+ return rb_num_coerce_relop(x, y, selLT);
}
}
@@ -2690,7 +2692,7 @@
case T_FLOAT:
return (double)FIX2LONG(x) <= RFLOAT_VALUE(y) ? Qtrue : Qfalse;
default:
- return rb_num_coerce_relop(x, y, rb_intern("<="));
+ return rb_num_coerce_relop(x, y, selLE);
}
}
@@ -3255,7 +3257,7 @@
void
Init_Numeric(void)
{
- id_coerce = rb_intern("coerce");
+ sel_coerce = sel_registerName("coerce:");
id_to_i = rb_intern("to_i");
id_eq = rb_intern("==");
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090731/746e9e87/attachment-0001.html>
More information about the macruby-changes
mailing list