1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* 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]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@16768 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
knu 2008-06-03 04:00:30 +00:00
parent 5d7f110052
commit b5af8dbe17
2 changed files with 23 additions and 6 deletions

View file

@ -1,3 +1,10 @@
Tue Jun 3 12:51:57 2008 Akinori MUSHA <knu@iDaemons.org>
* 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@fsij.org> Tue Jun 3 10:34:42 2008 Tanaka Akira <akr@fsij.org>
* common.mk (SPEC_GIT_BASE): update RubySpec GIT URL. * common.mk (SPEC_GIT_BASE): update RubySpec GIT URL.

View file

@ -55,7 +55,7 @@ enumerator_ptr(obj)
"wrong argument type %s (expected Enumerable::Enumerator)", "wrong argument type %s (expected Enumerable::Enumerator)",
rb_obj_classname(obj)); rb_obj_classname(obj));
} }
if (!ptr) { if (!ptr || ptr->obj == Qundef) {
rb_raise(rb_eArgError, "uninitialized enumerator"); rb_raise(rb_eArgError, "uninitialized enumerator");
} }
return ptr; return ptr;
@ -214,8 +214,13 @@ enumerator_allocate(klass)
VALUE klass; VALUE klass;
{ {
struct enumerator *ptr; struct enumerator *ptr;
return Data_Make_Struct(klass, struct enumerator, VALUE enum_obj;
enumerator_mark, -1, ptr);
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)); static VALUE enumerator_each_i _((VALUE, VALUE));
@ -235,7 +240,13 @@ enumerator_init(enum_obj, obj, meth, argc, argv)
int argc; int argc;
VALUE *argv; 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->obj = obj;
ptr->meth = rb_to_id(meth); ptr->meth = rb_to_id(meth);
@ -253,8 +264,7 @@ enumerator_init(enum_obj, obj, meth, argc, argv)
* used as an Enumerable object using the given object's given * used as an Enumerable object using the given object's given
* method with the given arguments. * method with the given arguments.
* *
* Use of this method is not discouraged. Use Kernel#enum_for() * Use of this method is discouraged. Use Kernel#enum_for() instead.
* instead.
*/ */
static VALUE static VALUE
enumerator_initialize(argc, argv, obj) enumerator_initialize(argc, argv, obj)