summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--array.c2
-rw-r--r--marshal.c3
-rw-r--r--re.c33
4 files changed, 23 insertions, 19 deletions
diff --git a/ChangeLog b/ChangeLog
index a3149b613b..e1dfa1b990 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Fri Oct 5 15:19:46 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (w_unique): should not dump anonymous class.
+
Fri Oct 5 11:59:13 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
* eval.c (proc_s_new): revived.
diff --git a/array.c b/array.c
index 9b81bd58c1..7402bff78d 100644
--- a/array.c
+++ b/array.c
@@ -76,7 +76,7 @@ rb_ary_s_alloc(klass)
VALUE klass;
{
NEWOBJ(ary, struct RArray);
- OBJSETUP(ary, rb_cArray, T_ARRAY);
+ OBJSETUP(ary, klass, T_ARRAY);
ary->len = 0;
ary->capa = 0;
diff --git a/marshal.c b/marshal.c
index a7b2efebc6..318292b125 100644
--- a/marshal.c
+++ b/marshal.c
@@ -213,6 +213,9 @@ w_unique(s, arg)
char *s;
struct dump_arg *arg;
{
+ if (s[0] == '#') {
+ rb_raise(rb_eArgError, "can't dump anonymous class %s", s);
+ }
w_symbol(rb_intern(s), arg);
}
diff --git a/re.c b/re.c
index 1121615896..4b908ef95d 100644
--- a/re.c
+++ b/re.c
@@ -883,17 +883,28 @@ rb_reg_initialize(obj, s, len, options)
}
}
+static VALUE
+rb_reg_s_alloc(klass)
+ VALUE klass;
+{
+ NEWOBJ(re, struct RRegexp);
+ OBJSETUP(re, klass, T_REGEXP);
+
+ re->ptr = 0;
+ re->len = 0;
+ re->str = 0;
+
+ return (VALUE)re;
+}
+
VALUE
rb_reg_new(s, len, options)
const char *s;
long len;
int options;
{
-
- NEWOBJ(re, struct RRegexp);
- OBJSETUP(re, rb_cRegexp, T_REGEXP);
+ VALUE re = rb_reg_s_alloc(rb_cRegexp);
- re->ptr = 0; re->len = 0; re->str = 0;
rb_reg_initialize(re, s, len, options);
return (VALUE)re;
}
@@ -1042,20 +1053,6 @@ rb_reg_initialize_m(argc, argv, self)
}
static VALUE
-rb_reg_s_alloc(klass)
- VALUE klass;
-{
- NEWOBJ(re, struct RRegexp);
- OBJSETUP(re, klass, T_REGEXP);
-
- re->ptr = 0;
- re->len = 0;
- re->str = 0;
-
- return (VALUE)re;
-}
-
-static VALUE
rb_reg_s_quote(argc, argv)
int argc;
VALUE *argv;