diff options
| author | Masaki Muranaka <[email protected]> | 2012-07-07 09:23:00 +0900 |
|---|---|---|
| committer | Masaki Muranaka <[email protected]> | 2012-07-07 09:23:00 +0900 |
| commit | e896c1cee36d8a8e36dfc06a10d8370156d34ada (patch) | |
| tree | e7f989158e1da5442fd229444fb4d11d976370ae /src/range.c | |
| parent | 8268ba2755ec467d100c799dbf53c13f38fda436 (diff) | |
| download | mruby-e896c1cee36d8a8e36dfc06a10d8370156d34ada.tar.gz mruby-e896c1cee36d8a8e36dfc06a10d8370156d34ada.zip | |
Range optimization. similar to #348
Diffstat (limited to 'src/range.c')
| -rw-r--r-- | src/range.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/range.c b/src/range.c index 34ca79a0d..8308309ef 100644 --- a/src/range.c +++ b/src/range.c @@ -199,27 +199,28 @@ r_le(mrb_state *mrb, mrb_value a, mrb_value b) static int r_gt(mrb_state *mrb, mrb_value a, mrb_value b) { - //int c; mrb_value r = mrb_funcall(mrb, a, "<=>", 1, b); /* output :a < b => -1, a = b => 0, a > b => +1 */ - if (mrb_nil_p(r)) return FALSE; + if (mrb_type(r) == MRB_TT_FIXNUM) { + int c = mrb_fixnum(r); + if (c == 1) return TRUE; + } - if (mrb_obj_equal(mrb, r, mrb_fixnum_value(1))) return TRUE; return FALSE; } static int r_ge(mrb_state *mrb, mrb_value a, mrb_value b) { - //int c; mrb_value r = mrb_funcall(mrb, a, "<=>", 1, b); /* compare result */ /* output :a < b => -1, a = b => 0, a > b => +1 */ - if (mrb_nil_p(r)) return FALSE; + if (mrb_type(r) == MRB_TT_FIXNUM) { + int c = mrb_fixnum(r); + if (c == 0 || c == 1) return TRUE; + } - if (mrb_obj_equal(mrb, r, mrb_fixnum_value(0))) return TRUE; - if (mrb_obj_equal(mrb, r, mrb_fixnum_value(1))) return TRUE; return FALSE; } |
