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/