diff options
| author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-08-12 08:13:28 +0000 |
|---|---|---|
| committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-08-12 08:13:28 +0000 |
| commit | 9ea490c3eebb963d771be6da00efc85c014df965 (patch) | |
| tree | 127adbc9559d0dd3f365f14a9ce9b5bc778f34e6 /numeric.c | |
| parent | c83746c9101b1e3319af8764439c19a0b140e43f (diff) | |
| download | ruby-9ea490c3eebb963d771be6da00efc85c014df965.tar.gz ruby-9ea490c3eebb963d771be6da00efc85c014df965.tar.xz ruby-9ea490c3eebb963d771be6da00efc85c014df965.zip | |
* parse.y (f_larglist): allow optional arguments even when
parentheses are omitted. based on Nobu's patch from
http://www.rubyist.net/~nobu/t/20050805.html
* parse.y (parser_yylex): update & maintain lpar_beg for detect
lambda parameters.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@8971 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'numeric.c')
| -rw-r--r-- | numeric.c | 42 |
1 files changed, 36 insertions, 6 deletions
@@ -2289,7 +2289,12 @@ fix_equal(x, y) if (FIXNUM_P(y)) { return (FIX2LONG(x) == FIX2LONG(y))?Qtrue:Qfalse; } - else { + switch (TYPE(y)) { + case T_BIGNUM: + return rb_big_eq(y, x); + case T_FLOAT: + return (double)FIX2LONG(x) == RFLOAT(y)->value ? Qtrue : Qfalse; + default: return num_equal(x, y); } } @@ -2314,7 +2319,12 @@ fix_cmp(x, y) if (a > b) return INT2FIX(1); return INT2FIX(-1); } - else { + switch (TYPE(y)) { + case T_BIGNUM: + return rb_big_cmp(rb_int2big(FIX2LONG(x)), y); + case T_FLOAT: + return rb_dbl_cmp((double)FIX2LONG(x), RFLOAT(y)->value); + default: return rb_num_coerce_cmp(x, y); } } @@ -2337,7 +2347,12 @@ fix_gt(x, y) if (a > b) return Qtrue; return Qfalse; } - else { + switch (TYPE(y)) { + case T_BIGNUM: + return FIX2INT(rb_big_cmp(rb_int2big(FIX2LONG(x)), y)) > 0 ? Qtrue : Qfalse; + case T_FLOAT: + return (double)FIX2LONG(x) > RFLOAT(y)->value ? Qtrue : Qfalse; + default: return rb_num_coerce_relop(x, y); } } @@ -2360,7 +2375,12 @@ fix_ge(x, y) if (a >= b) return Qtrue; return Qfalse; } - else { + switch (TYPE(y)) { + case T_BIGNUM: + return FIX2INT(rb_big_cmp(rb_int2big(FIX2LONG(x)), y)) >= 0 ? Qtrue : Qfalse; + case T_FLOAT: + return (double)FIX2LONG(x) >= RFLOAT(y)->value ? Qtrue : Qfalse; + default: return rb_num_coerce_relop(x, y); } } @@ -2383,7 +2403,12 @@ fix_lt(x, y) if (a < b) return Qtrue; return Qfalse; } - else { + switch (TYPE(y)) { + case T_BIGNUM: + return FIX2INT(rb_big_cmp(rb_int2big(FIX2LONG(x)), y)) < 0 ? Qtrue : Qfalse; + case T_FLOAT: + return (double)FIX2LONG(x) < RFLOAT(y)->value ? Qtrue : Qfalse; + default: return rb_num_coerce_relop(x, y); } } @@ -2406,7 +2431,12 @@ fix_le(x, y) if (a <= b) return Qtrue; return Qfalse; } - else { + switch (TYPE(y)) { + case T_BIGNUM: + return FIX2INT(rb_big_cmp(rb_int2big(FIX2LONG(x)), y)) <= 0 ? Qtrue : Qfalse; + case T_FLOAT: + return (double)FIX2LONG(x) <= RFLOAT(y)->value ? Qtrue : Qfalse; + default: return rb_num_coerce_relop(x, y); } } |
