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

ruby-changes:5269

From: knu <ko1@a...>
Date: Tue, 3 Jun 2008 13:00:40 +0900 (JST)
Subject: [ruby-changes:5269] Ruby:r16768 (ruby_1_8): * enumerator.c (enumerator_allocate, enumerator_ptr): Properly

knu	2008-06-03 13:00:30 +0900 (Tue, 03 Jun 2008)

  New Revision: 16768

  Modified files:
    branches/ruby_1_8/ChangeLog
    branches/ruby_1_8/enumerator.c

  Log:
    * enumerator.c (enumerator_allocate, enumerator_ptr): Properly
      detect if the object is initialized and raise error when
      appropriate.
      (enumerator_initialize): Fix a typo in rdoc. [ruby-core:17052]


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/ChangeLog?r1=16768&r2=16767&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/enumerator.c?r1=16768&r2=16767&diff_format=u

Index: ruby_1_8/ChangeLog
===================================================================
--- ruby_1_8/ChangeLog	(revision 16767)
+++ ruby_1_8/ChangeLog	(revision 16768)
@@ -1,3 +1,10 @@
+Tue Jun  3 12:51:57 2008  Akinori MUSHA  <knu@i...>
+
+	* enumerator.c (enumerator_allocate, enumerator_ptr): Properly
+	  detect if the object is initialized and raise error when
+	  appropriate.
+	  (enumerator_initialize): Fix a typo in rdoc. [ruby-core:17052]
+
 Tue Jun  3 10:34:42 2008  Tanaka Akira  <akr@f...>
 
 	* common.mk (SPEC_GIT_BASE): update RubySpec GIT URL.
Index: ruby_1_8/enumerator.c
===================================================================
--- ruby_1_8/enumerator.c	(revision 16767)
+++ ruby_1_8/enumerator.c	(revision 16768)
@@ -55,7 +55,7 @@
 		 "wrong argument type %s (expected Enumerable::Enumerator)",
 		 rb_obj_classname(obj));
     }
-    if (!ptr) {
+    if (!ptr || ptr->obj == Qundef) {
 	rb_raise(rb_eArgError, "uninitialized enumerator");
     }
     return ptr;
@@ -214,8 +214,13 @@
     VALUE klass;
 {
     struct enumerator *ptr;
-    return Data_Make_Struct(klass, struct enumerator,
-			    enumerator_mark, -1, ptr);
+    VALUE enum_obj;
+
+    enum_obj = Data_Make_Struct(klass, struct enumerator,
+				enumerator_mark, -1, ptr);
+    ptr->obj = Qundef;
+
+    return enum_obj;
 }
 
 static VALUE enumerator_each_i _((VALUE, VALUE));
@@ -235,8 +240,14 @@
     int argc;
     VALUE *argv;
 {
-    struct enumerator *ptr = enumerator_ptr(enum_obj);
+    struct enumerator *ptr;
 
+    Data_Get_Struct(enum_obj, struct enumerator, ptr);
+
+    if (!ptr) {
+	rb_raise(rb_eArgError, "unallocated enumerator");
+    }
+
     ptr->obj  = obj;
     ptr->meth = rb_to_id(meth);
     ptr->iter = enumerator_each_i;
@@ -253,8 +264,7 @@
  *  used as an Enumerable object using the given object's given
  *  method with the given arguments.
  *
- *  Use of this method is not discouraged.  Use Kernel#enum_for()
- *  instead.
+ *  Use of this method is discouraged.  Use Kernel#enum_for() instead.
  */
 static VALUE
 enumerator_initialize(argc, argv, obj)

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

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