mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* time.c (eq): apply RTEST.
(ne): ditto. (add): avoid method dispatch for bignums. (sub): ditto. (mul): ditto. (mod): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24709 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
fc6be8cdeb
commit
570d8f55b2
2 changed files with 49 additions and 6 deletions
|
@ -1,3 +1,12 @@
|
|||
Sun Aug 30 10:24:43 2009 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* time.c (eq): apply RTEST.
|
||||
(ne): ditto.
|
||||
(add): avoid method dispatch for bignums.
|
||||
(sub): ditto.
|
||||
(mul): ditto.
|
||||
(mod): ditto.
|
||||
|
||||
Sun Aug 30 09:45:11 2009 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* bignum.c (bigmul1_single): new function specialized respect to
|
||||
|
|
46
time.c
46
time.c
|
@ -106,17 +106,51 @@ rb_localtime(const time_t *tm, struct tm *result)
|
|||
static ID id_divmod, id_mul, id_submicro, id_subnano;
|
||||
static ID id_eq, id_ne, id_quo, id_div, id_cmp, id_lshift;
|
||||
|
||||
#define eq(x,y) (rb_funcall((x), id_eq, 1, (y)))
|
||||
#define ne(x,y) (rb_funcall((x), id_ne, 1, (y)))
|
||||
#define eq(x,y) (RTEST(rb_funcall((x), id_eq, 1, (y))))
|
||||
#define ne(x,y) (RTEST(rb_funcall((x), id_ne, 1, (y))))
|
||||
#define lt(x,y) (RTEST(rb_funcall((x), '<', 1, (y))))
|
||||
#define gt(x,y) (RTEST(rb_funcall((x), '>', 1, (y))))
|
||||
#define le(x,y) (!gt(x,y))
|
||||
#define ge(x,y) (!lt(x,y))
|
||||
#define add(x,y) (rb_funcall((x), '+', 1, (y)))
|
||||
#define sub(x,y) (rb_funcall((x), '-', 1, (y)))
|
||||
#define mul(x,y) (rb_funcall((x), '*', 1, (y)))
|
||||
|
||||
static VALUE
|
||||
add(VALUE x, VALUE y)
|
||||
{
|
||||
switch (TYPE(x)) {
|
||||
case T_BIGNUM: return rb_big_plus(x, y);
|
||||
default: return rb_funcall(x, '+', 1, y);
|
||||
}
|
||||
}
|
||||
|
||||
static VALUE
|
||||
sub(VALUE x, VALUE y)
|
||||
{
|
||||
switch (TYPE(x)) {
|
||||
case T_BIGNUM: return rb_big_minus(x, y);
|
||||
default: return rb_funcall(x, '-', 1, y);
|
||||
}
|
||||
}
|
||||
|
||||
static VALUE
|
||||
mul(VALUE x, VALUE y)
|
||||
{
|
||||
switch (TYPE(x)) {
|
||||
case T_BIGNUM: return rb_big_mul(x, y);
|
||||
default: return rb_funcall(x, '*', 1, y);
|
||||
}
|
||||
}
|
||||
|
||||
#define div(x,y) (rb_funcall((x), id_div, 1, (y)))
|
||||
#define mod(x,y) (rb_funcall((x), '%', 1, (y)))
|
||||
|
||||
static VALUE
|
||||
mod(VALUE x, VALUE y)
|
||||
{
|
||||
switch (TYPE(x)) {
|
||||
case T_BIGNUM: return rb_big_modulo(x, y);
|
||||
default: return rb_funcall(x, '%', 1, y);
|
||||
}
|
||||
}
|
||||
|
||||
#define neg(x) (sub(INT2FIX(0), (x)))
|
||||
#define cmp(x,y) (rb_funcall((x), id_cmp, 1, (y)))
|
||||
#define lshift(x,y) (rb_funcall((x), id_lshift, 1, (y)))
|
||||
|
|
Loading…
Reference in a new issue