diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-11-13 08:22:29 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-11-13 08:22:29 +0000 |
commit | e4d7dbf5a35c8e4ea0de3d50c331c0753a421b32 (patch) | |
tree | 4a78771d1a5d26d2ff798fa7670f56ef7057b76e /range.c | |
parent | 4caab0e0f53d54cf55abb0430352893a1e4f29d9 (diff) |
* signal.c (sighandle): should not re-register sighandler if
POSIX_SIGNAL is defined.
* eval.c (error_print): errat array may be empty.
* parse.y (yylex): float '1_.0' should not be allowed.
* variable.c (var_getter): should care about var as Qfalse
(ruby-bugs#PR199).
* array.c (cmpint): <=> or block for {min,max} may return bignum.
* array.c (sort_1): use rb_compint.
* array.c (sort_2): ditto.
* enum.c (min_ii): ditto.
* enum.c (min_ii): ditto.
* enum.c (max_i): ditto.
* enum.c (max_ii): ditto.
* mkconfig.rb: use String#dump to generate Ruby string literal.
* range.c (range_eql): should override 'eql?'
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_6@1828 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'range.c')
-rw-r--r-- | range.c | 34 |
1 files changed, 34 insertions, 0 deletions
@@ -136,6 +136,38 @@ range_eqq(range, obj) } static VALUE +range_eql(range, obj) + VALUE range, obj; +{ + if (range == obj) return Qtrue; + if (!rb_obj_is_kind_of(obj, rb_cRange)) return Qfalse; + + if (!rb_eql(rb_ivar_get(range, id_beg), rb_ivar_get(obj, id_beg))) + return Qfalse; + if (!rb_eql(rb_ivar_get(range, id_end), rb_ivar_get(obj, id_end))) + return Qfalse; + + if (EXCL(range) != EXCL(obj)) return Qfalse; + + return Qtrue; +} + +static VALUE +range_hash(range, obj) + VALUE range, obj; +{ + long hash = EXCL(range); + VALUE v; + + v = rb_hash(rb_ivar_get(range, id_beg)); + hash ^= v << 1; + v = rb_hash(rb_ivar_get(range, id_end)); + hash ^= v << 9; + + return INT2FIX(hash); +} + +static VALUE range_each(range) VALUE range; { @@ -353,6 +385,8 @@ Init_Range() rb_define_method(rb_cRange, "initialize", range_initialize, -1); rb_define_method(rb_cRange, "==", range_eq, 1); rb_define_method(rb_cRange, "===", range_eqq, 1); + rb_define_method(rb_cRange, "eql?", range_eql, 1); + rb_define_method(rb_cRange, "hash", range_hash, 0); rb_define_method(rb_cRange, "each", range_each, 0); rb_define_method(rb_cRange, "first", range_first, 0); rb_define_method(rb_cRange, "last", range_last, 0); |