[前][次][番号順一覧][スレッド一覧]

ruby-changes:12466

From: akr <ko1@a...>
Date: Fri, 17 Jul 2009 18:13:50 +0900 (JST)
Subject: [ruby-changes:12466] Ruby:r24166 (trunk): * struct.c (recursive_hash): extracted from rb_struct_hash. reject

akr	2009-07-17 18:13:29 +0900 (Fri, 17 Jul 2009)

  New Revision: 24166

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=24166

  Log:
    * struct.c (recursive_hash): extracted from rb_struct_hash.  reject
      recursive key.
      (rb_struct_hash): use recursive_hash.

  Modified files:
    trunk/ChangeLog
    trunk/struct.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 24165)
+++ ChangeLog	(revision 24166)
@@ -1,3 +1,9 @@
+Fri Jul 17 18:11:32 2009  Tanaka Akira  <akr@f...>
+
+	* struct.c (recursive_hash): extracted from rb_struct_hash.  reject
+	  recursive key.
+	  (rb_struct_hash): use recursive_hash.
+
 Fri Jul 17 16:45:22 2009  Tanaka Akira  <akr@f...>
 
 	* array.c (recursive_hash): reject recursive key.
Index: struct.c
===================================================================
--- struct.c	(revision 24165)
+++ struct.c	(revision 24166)
@@ -802,20 +802,16 @@
     return Qtrue;
 }
 
-/*
- * call-seq:
- *   struct.hash   => fixnum
- *
- * Return a hash value based on this struct's contents.
- */
-
 static VALUE
-rb_struct_hash(VALUE s)
+recursive_hash(VALUE s, VALUE dummy, int recur)
 {
     long i;
     unsigned long h;
     VALUE n;
 
+    if (recur) {
+        rb_raise(rb_eArgError, "recursive key for hash");
+    }
     h = rb_hash_start(rb_hash(rb_obj_class(s)));
     for (i = 0; i < RSTRUCT_LEN(s); i++) {
 	n = rb_hash(RSTRUCT_PTR(s)[i]);
@@ -826,6 +822,19 @@
 }
 
 /*
+ * call-seq:
+ *   struct.hash   => fixnum
+ *
+ * Return a hash value based on this struct's contents.
+ */
+
+static VALUE
+rb_struct_hash(VALUE s)
+{
+    return rb_exec_recursive(recursive_hash, s, 0);
+}
+
+/*
  * code-seq:
  *   struct.eql?(other)   => true or false
  *

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]