diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-05-19 15:45:46 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-05-19 15:45:46 +0000 |
commit | 7e35911e105409fabe48dc2a6214479b6a6ffa24 (patch) | |
tree | 5b28440687c1701389b14598454e99aee9a925ba /compar.c | |
parent | e08bc0a22ae6c2d2ac0664d82675ca81a30df607 (diff) |
* ext/pty/pty.c (pty_finalize_syswait): join (using Thread#value)
before detach pid. [ruby-talk:71519]
* eval.c (PUSH_FRAME): save outer ruby_block. [ruby-list:37677],
[ruby-dev:20202]
* eval.c (BEGIN_CALLARGS): restore outer block by using
ruby_block->outer.
* eval.c (block_pass): do not alter block->prev, but block->outer.
* array.c (get_inspect_tbl): warning on wrong condition.
* eval.c (localjump_xvalue): renamed exitstatus to exit_value
since it's not exit "status" after all.
* eval.c (localjump_error): add reason to LocalJumpError.
* compar.c (rb_cmpint): raise error via rb_cmperr(), if cmp value
is nil. now take new 2 arguments.
* time.c (time_cmp): 2003-05-16 fix was incomplete.
(ruby-bugs-ja:PR#458)
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3823 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'compar.c')
-rw-r--r-- | compar.c | 19 |
1 files changed, 11 insertions, 8 deletions
@@ -17,9 +17,12 @@ VALUE rb_mComparable; static ID cmp; int -rb_cmpint(val) - VALUE val; +rb_cmpint(val, a, b) + VALUE val, a, b; { + if (NIL_P(val)) { + rb_cmperr(a, b); + } if (FIXNUM_P(val)) return FIX2INT(val); if (TYPE(val) == T_BIGNUM) { if (RBIGNUM(val)->sign) return 1; @@ -43,7 +46,7 @@ rb_cmperr(x, y) else { classname = rb_obj_classname(y); } - rb_raise(rb_eArgError, "comparison of %s to %s failed", + rb_raise(rb_eArgError, "comparison of %s with %s failed", rb_obj_classname(x), classname); } @@ -60,7 +63,7 @@ cmp_equal(x, y) c = rb_funcall(x, cmp, 1, y); if (NIL_P(c)) return Qnil; if (c == INT2FIX(0)) return Qtrue; - if (rb_cmpint(c) == 0) return Qtrue; + if (rb_cmpint(c, x, y) == 0) return Qtrue; return Qfalse; } @@ -71,7 +74,7 @@ cmp_gt(x, y) VALUE c = rb_funcall(x, cmp, 1, y); if (NIL_P(c)) return cmperr(); - if (rb_cmpint(c) > 0) return Qtrue; + if (rb_cmpint(c, x, y) > 0) return Qtrue; return Qfalse; } @@ -82,7 +85,7 @@ cmp_ge(x, y) VALUE c = rb_funcall(x, cmp, 1, y); if (NIL_P(c)) return cmperr(); - if (rb_cmpint(c) >= 0) return Qtrue; + if (rb_cmpint(c, x, y) >= 0) return Qtrue; return Qfalse; } @@ -93,7 +96,7 @@ cmp_lt(x, y) VALUE c = rb_funcall(x, cmp, 1, y); if (NIL_P(c)) return cmperr(); - if (rb_cmpint(c) < 0) return Qtrue; + if (rb_cmpint(c, x, y) < 0) return Qtrue; return Qfalse; } @@ -104,7 +107,7 @@ cmp_le(x, y) VALUE c = rb_funcall(x, cmp, 1, y); if (NIL_P(c)) return cmperr(); - if (rb_cmpint(c) <= 0) return Qtrue; + if (rb_cmpint(c, x, y) <= 0) return Qtrue; return Qfalse; } |