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 + + * marshal.c (w_unique): should not dump anonymous class. + Fri Oct 5 11:59:13 2001 Nobuyoshi Nakada * 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; } @@ -1041,20 +1052,6 @@ rb_reg_initialize_m(argc, argv, self) return 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;