summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-06-03 04:00:30 +0000
committerknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-06-03 04:00:30 +0000
commitb5af8dbe1754e722096decc64afc4416ee485587 (patch)
treeb839eadf419d0d84050191cd7ce4e9eb5fa6ffa2
parent5d7f110052611883b58733748d959642fb329749 (diff)
* 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
-rw-r--r--ChangeLog7
-rw-r--r--enumerator.c22
2 files changed, 23 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 4f35a9b74e..ddcbb39fb3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
* common.mk (SPEC_GIT_BASE): update RubySpec GIT URL.
diff --git a/enumerator.c b/enumerator.c
index e0365fc5bc..8d5061d308 100644
--- a/enumerator.c
+++ b/enumerator.c
@@ -55,7 +55,7 @@ enumerator_ptr(obj)
"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 @@ enumerator_allocate(klass)
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,7 +240,13 @@ enumerator_init(enum_obj, obj, meth, argc, argv)
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);
@@ -253,8 +264,7 @@ enumerator_init(enum_obj, obj, meth, argc, argv)
* 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)