diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-07-17 09:28:46 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-07-17 09:28:46 +0000 |
commit | bc2df4136536496e72a8bbdf14a8980f65b259b8 (patch) | |
tree | 882005fec039591bb92936dad9f76ced7c653763 | |
parent | 2cdcc564fd9a15e8f6d7f20c972cdc6e98243b67 (diff) |
* range.c (recursive_hash): extracted from range_hash. reject
recursive key.
(range_hash): use recursive_hash.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24167 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | range.c | 29 |
2 files changed, 25 insertions, 10 deletions
@@ -1,3 +1,9 @@ +Fri Jul 17 18:18:23 2009 Tanaka Akira <[email protected]> + + * range.c (recursive_hash): extracted from range_hash. reject + recursive key. + (range_hash): use recursive_hash. + Fri Jul 17 18:11:32 2009 Tanaka Akira <[email protected]> * struct.c (recursive_hash): extracted from rb_struct_hash. reject @@ -201,21 +201,15 @@ range_eql(VALUE range, VALUE obj) return Qtrue; } -/* - * call-seq: - * rng.hash => fixnum - * - * Generate a hash value such that two ranges with the same start and - * end points, and the same value for the "exclude end" flag, generate - * the same hash value. - */ - static VALUE -range_hash(VALUE range) +recursive_hash(VALUE range, VALUE dummy, int recur) { unsigned long hash = EXCL(range); VALUE v; + if (recur) { + rb_raise(rb_eArgError, "recursive key for hash"); + } hash = rb_hash_start(hash); v = rb_hash(RANGE_BEG(range)); hash = rb_hash_uint(hash, NUM2LONG(v)); @@ -227,6 +221,21 @@ range_hash(VALUE range) return LONG2FIX(hash); } +/* + * call-seq: + * rng.hash => fixnum + * + * Generate a hash value such that two ranges with the same start and + * end points, and the same value for the "exclude end" flag, generate + * the same hash value. + */ + +static VALUE +range_hash(VALUE range) +{ + return rb_exec_recursive(recursive_hash, range, 0); +} + static void range_each_func(VALUE range, VALUE (*func) (VALUE, void *), void *arg) { |