зеркало из https://github.com/github/ruby.git
Make imemo_ast WB-protected again
by firing the write barrier of imemo_ast after nd_lit is modified. This will fix the issue of https://github.com/ruby/ruby/pull/4416 more gracefully.
This commit is contained in:
Родитель
e48109d86f
Коммит
d405b1a878
6
parse.y
6
parse.y
|
@ -11072,6 +11072,7 @@ const_decl_path(struct parser_params *p, NODE **dest)
|
|||
path = rb_fstring(path);
|
||||
}
|
||||
*dest = n = NEW_LIT(path, loc);
|
||||
RB_OBJ_WRITTEN(p->ast, Qnil, n->nd_lit);
|
||||
}
|
||||
return n;
|
||||
}
|
||||
|
@ -11159,7 +11160,9 @@ shareable_literal_constant(struct parser_params *p, enum shareability shareable,
|
|||
case NODE_ZLIST:
|
||||
lit = rb_ary_new();
|
||||
OBJ_FREEZE_RAW(lit);
|
||||
return NEW_LIT(lit, loc);
|
||||
NODE *n = NEW_LIT(lit, loc);
|
||||
RB_OBJ_WRITTEN(p->ast, Qnil, n->nd_lit);
|
||||
return n;
|
||||
|
||||
case NODE_LIST:
|
||||
lit = rb_ary_new();
|
||||
|
@ -11245,6 +11248,7 @@ shareable_literal_constant(struct parser_params *p, enum shareability shareable,
|
|||
}
|
||||
else {
|
||||
value = NEW_LIT(rb_ractor_make_shareable(lit), loc);
|
||||
RB_OBJ_WRITTEN(p->ast, Qnil, value->nd_lit);
|
||||
}
|
||||
|
||||
return value;
|
||||
|
|
Загрузка…
Ссылка в новой задаче