From 27e492bec76b039f69678c42942d113e1f48d811 Mon Sep 17 00:00:00 2001 From: nobu Date: Sat, 13 Feb 2010 19:45:35 +0000 Subject: * marshal.c (r_object0): register regexp object before encoding name. [ruby-dev:40414] * re.c (rb_reg_alloc, rb_reg_init_str): split from rb_reg_new_str. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26661 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 +++++++ include/ruby/intern.h | 2 ++ marshal.c | 3 ++- re.c | 17 ++++++++++++++--- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8e2c599b62..1cca4c6ed3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Sun Feb 14 04:45:31 2010 Nobuyoshi Nakada + + * marshal.c (r_object0): register regexp object before encoding + name. [ruby-dev:40414] + + * re.c (rb_reg_alloc, rb_reg_init_str): split from rb_reg_new_str. + Sat Feb 13 17:07:20 2010 Yukihiro Matsumoto * array.c (rb_ary_delete): RDoc update. a patch from Hugh Sasse. diff --git a/include/ruby/intern.h b/include/ruby/intern.h index 66791a0bca..7872ca8007 100644 --- a/include/ruby/intern.h +++ b/include/ruby/intern.h @@ -553,6 +553,8 @@ VALUE rb_reg_match_last(VALUE); #define HAVE_RB_REG_NEW_STR 1 VALUE rb_reg_new_str(VALUE, int); VALUE rb_reg_new(const char *, long, int); +VALUE rb_reg_alloc(void); +VALUE rb_reg_init_str(VALUE re, VALUE s, int options); VALUE rb_reg_match(VALUE, VALUE); VALUE rb_reg_match2(VALUE); int rb_reg_options(VALUE); diff --git a/marshal.c b/marshal.c index deb7d2853b..e8f43d90ee 100644 --- a/marshal.c +++ b/marshal.c @@ -1495,6 +1495,7 @@ r_object0(struct load_arg *arg, int *ivp, VALUE extmod) int options = r_byte(arg); int has_encoding = FALSE; + v = r_entry(rb_reg_alloc(), arg); if (ivp) { r_ivar(str, &has_encoding, arg); *ivp = FALSE; @@ -1518,7 +1519,7 @@ r_object0(struct load_arg *arg, int *ivp, VALUE extmod) } rb_str_set_len(str, dst - ptr); } - v = r_entry(rb_reg_new_str(str, options), arg); + v = r_entry(rb_reg_init_str(v, str, options), arg); v = r_leave(v, arg); } break; diff --git a/re.c b/re.c index 24b3435806..35af6aa1db 100644 --- a/re.c +++ b/re.c @@ -2418,10 +2418,21 @@ rb_reg_s_alloc(VALUE klass) return (VALUE)re; } +VALUE +rb_reg_alloc(void) +{ + return rb_reg_s_alloc(rb_cRegexp); +} + VALUE rb_reg_new_str(VALUE s, int options) { - VALUE re = rb_reg_s_alloc(rb_cRegexp); + return rb_reg_init_str(rb_reg_alloc(), s, options); +} + +VALUE +rb_reg_init_str(VALUE re, VALUE s, int options) +{ onig_errmsg_buffer err = ""; if (rb_reg_initialize_str(re, s, options, err, NULL, 0) != 0) { @@ -2440,7 +2451,7 @@ rb_reg_new_ary(VALUE ary, int opt) VALUE rb_enc_reg_new(const char *s, long len, rb_encoding *enc, int options) { - VALUE re = rb_reg_s_alloc(rb_cRegexp); + VALUE re = rb_reg_alloc(); onig_errmsg_buffer err = ""; if (rb_reg_initialize(re, s, len, enc, options, err, NULL, 0) != 0) { @@ -2459,7 +2470,7 @@ rb_reg_new(const char *s, long len, int options) VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline) { - VALUE re = rb_reg_s_alloc(rb_cRegexp); + VALUE re = rb_reg_alloc(); onig_errmsg_buffer err = ""; if (!str) str = rb_str_new(0,0); -- cgit v1.2.3