* include/ruby/ruby.h, re.c: support write barrier for T_REGEXP.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41530 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
6e19e1b876
commit
9296bd49da
@ -1,3 +1,7 @@
|
||||
Fri Jun 21 19:11:56 2013 Koichi Sasada <ko1@atdot.net>
|
||||
|
||||
* include/ruby/ruby.h, re.c: support write barrier for T_REGEXP.
|
||||
|
||||
Fri Jun 21 18:56:58 2013 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* bignum.c (bigsub_int): Use bdigit_roomof.
|
||||
|
@ -715,6 +715,9 @@ VALUE rb_obj_setup(VALUE obj, VALUE klass, VALUE type);
|
||||
#ifndef RGENGC_WB_PROTECTED_OBJECT
|
||||
#define RGENGC_WB_PROTECTED_OBJECT 1
|
||||
#endif
|
||||
#ifndef RGENGC_WB_PROTECTED_REGEXP
|
||||
#define RGENGC_WB_PROTECTED_REGEXP 1
|
||||
#endif
|
||||
#ifndef RGENGC_WB_PROTECTED_CLASS
|
||||
#define RGENGC_WB_PROTECTED_CLASS 1
|
||||
#endif
|
||||
@ -971,7 +974,7 @@ struct RArray {
|
||||
struct RRegexp {
|
||||
struct RBasic basic;
|
||||
struct re_pattern_buffer *ptr;
|
||||
VALUE src;
|
||||
const VALUE src;
|
||||
unsigned long usecnt;
|
||||
};
|
||||
#define RREGEXP_SRC(r) RREGEXP(r)->src
|
||||
|
6
re.c
6
re.c
@ -2438,7 +2438,7 @@ rb_reg_initialize(VALUE obj, const char *s, long len, rb_encoding *enc,
|
||||
options & ARG_REG_OPTION_MASK, err,
|
||||
sourcefile, sourceline);
|
||||
if (!re->ptr) return -1;
|
||||
re->src = rb_enc_str_new(s, len, enc);
|
||||
OBJ_WRITE(obj, (VALUE *)&re->src, rb_enc_str_new(s, len, enc));
|
||||
OBJ_FREEZE(re->src);
|
||||
RB_GC_GUARD(unescaped);
|
||||
return 0;
|
||||
@ -2470,10 +2470,10 @@ rb_reg_initialize_str(VALUE obj, VALUE str, int options, onig_errmsg_buffer err,
|
||||
static VALUE
|
||||
rb_reg_s_alloc(VALUE klass)
|
||||
{
|
||||
NEWOBJ_OF(re, struct RRegexp, klass, T_REGEXP);
|
||||
NEWOBJ_OF(re, struct RRegexp, klass, T_REGEXP | (RGENGC_WB_PROTECTED_REGEXP ? FL_WB_PROTECTED : 0));
|
||||
|
||||
re->ptr = 0;
|
||||
re->src = 0;
|
||||
OBJ_WRITE(re, (VALUE *)&re->src, 0);
|
||||
re->usecnt = 0;
|
||||
|
||||
return (VALUE)re;
|
||||
|
Loading…
x
Reference in New Issue
Block a user