* 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>
|
Fri Jun 21 18:56:58 2013 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
* bignum.c (bigsub_int): Use bdigit_roomof.
|
* 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
|
#ifndef RGENGC_WB_PROTECTED_OBJECT
|
||||||
#define RGENGC_WB_PROTECTED_OBJECT 1
|
#define RGENGC_WB_PROTECTED_OBJECT 1
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef RGENGC_WB_PROTECTED_REGEXP
|
||||||
|
#define RGENGC_WB_PROTECTED_REGEXP 1
|
||||||
|
#endif
|
||||||
#ifndef RGENGC_WB_PROTECTED_CLASS
|
#ifndef RGENGC_WB_PROTECTED_CLASS
|
||||||
#define RGENGC_WB_PROTECTED_CLASS 1
|
#define RGENGC_WB_PROTECTED_CLASS 1
|
||||||
#endif
|
#endif
|
||||||
@ -971,7 +974,7 @@ struct RArray {
|
|||||||
struct RRegexp {
|
struct RRegexp {
|
||||||
struct RBasic basic;
|
struct RBasic basic;
|
||||||
struct re_pattern_buffer *ptr;
|
struct re_pattern_buffer *ptr;
|
||||||
VALUE src;
|
const VALUE src;
|
||||||
unsigned long usecnt;
|
unsigned long usecnt;
|
||||||
};
|
};
|
||||||
#define RREGEXP_SRC(r) RREGEXP(r)->src
|
#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,
|
options & ARG_REG_OPTION_MASK, err,
|
||||||
sourcefile, sourceline);
|
sourcefile, sourceline);
|
||||||
if (!re->ptr) return -1;
|
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);
|
OBJ_FREEZE(re->src);
|
||||||
RB_GC_GUARD(unescaped);
|
RB_GC_GUARD(unescaped);
|
||||||
return 0;
|
return 0;
|
||||||
@ -2470,10 +2470,10 @@ rb_reg_initialize_str(VALUE obj, VALUE str, int options, onig_errmsg_buffer err,
|
|||||||
static VALUE
|
static VALUE
|
||||||
rb_reg_s_alloc(VALUE klass)
|
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->ptr = 0;
|
||||||
re->src = 0;
|
OBJ_WRITE(re, (VALUE *)&re->src, 0);
|
||||||
re->usecnt = 0;
|
re->usecnt = 0;
|
||||||
|
|
||||||
return (VALUE)re;
|
return (VALUE)re;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user