summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--enumerator.c12
2 files changed, 15 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 55cafec259..d7b1164923 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Mon Apr 12 22:48:47 2010 Tanaka Akira <akr@fsij.org>
+
+ * enumerator.c (inspect_enumerator): don't raise for uninitialized
+ enumerator.
+
Mon Apr 12 21:47:41 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
* LEGAL: separated the section for parse.c. contributed by Paul
diff --git a/enumerator.c b/enumerator.c
index 53cd49a361..91bb3be14f 100644
--- a/enumerator.c
+++ b/enumerator.c
@@ -725,11 +725,19 @@ enumerator_rewind(VALUE obj)
static VALUE
inspect_enumerator(VALUE obj, VALUE dummy, int recur)
{
- struct enumerator *e = enumerator_ptr(obj);
- const char *cname = rb_obj_classname(obj);
+ struct enumerator *e;
+ const char *cname;
VALUE eobj, str;
int tainted, untrusted;
+ TypedData_Get_Struct(obj, struct enumerator, &enumerator_data_type, e);
+
+ cname = rb_obj_classname(obj);
+
+ if (!e || e->obj == Qundef) {
+ return rb_sprintf("#<%s: uninitialized>", cname);
+ }
+
if (recur) {
str = rb_sprintf("#<%s: ...>", cname);
OBJ_TAINT(str);