diff options
-rw-r--r-- | re.c | 43 |
1 files changed, 36 insertions, 7 deletions
@@ -3213,6 +3213,15 @@ rb_reg_preprocess_dregexp(VALUE ary, int options) return result; } static int rb_reg_initialize(VALUE obj, const char *s, long len, rb_encoding *enc, int options, onig_errmsg_buffer err, @@ -3223,10 +3232,7 @@ rb_reg_initialize(VALUE obj, const char *s, long len, rb_encoding *enc, rb_encoding *fixed_enc = 0; rb_encoding *a_enc = rb_ascii8bit_encoding(); - rb_check_frozen(obj); - if (re->ptr) - rb_raise(rb_eTypeError, "already initialized regexp"); - re->ptr = 0; if (rb_enc_dummy_p(enc)) { errcpy(err, "can't make regexp with dummy encoding"); @@ -3862,6 +3868,24 @@ set_timeout(rb_hrtime_t *hrt, VALUE timeout) double2hrtime(hrt, timeout_d); } struct reg_init_args { VALUE str; VALUE timeout; @@ -3931,9 +3955,14 @@ static VALUE rb_reg_initialize_m(int argc, VALUE *argv, VALUE self) { struct reg_init_args args; - reg_extract_args(argc, argv, &args); - reg_init_args(self, args.str, args.enc, args.flags); set_timeout(&RREGEXP_PTR(self)->timelimit, args.timeout); @@ -4356,7 +4385,7 @@ rb_reg_init_copy(VALUE copy, VALUE re) { if (!OBJ_INIT_COPY(copy, re)) return copy; rb_reg_check(re); - return rb_reg_init_str(copy, RREGEXP_SRC(re), rb_reg_options(re)); } VALUE |