summaryrefslogtreecommitdiff
path: root/node.c
diff options
context:
space:
mode:
authorKazuki Tsujimoto <kazuki@callcc.net>2020-08-02 01:03:43 +0900
committerKazuki Tsujimoto <kazuki@callcc.net>2020-08-02 01:04:06 +0900
commitfcdbdff631a1a6bcc2229d448ed7c76041fe3258 (patch)
treecb73eb7446f547b744365e9141657f4790ab92b2 /node.c
parentb6175c9e4fe25b978252d8998fe791d65d998fc5 (diff)
rb_{ary,fnd}_pattern_info: Remove imemo member to reduce memory usage
This is a partial revert commit of 8f096226e1b76f95f4d853d3dea2bc75eeeb5244. NODE layout: Before: | ARYPTN | FNDPTN | HSHPTN ---+--------+--------+----------- u1 | pconst | pconst | pconst u2 | unused | unused | pkwargs u3 | apinfo | fpinfo | pkwrestarg After: | ARYPTN | FNDPTN | HSHPTN ---+--------+--------+----------- u1 | imemo | imemo | pkwargs u2 | pconst | pconst | pconst u3 | apinfo | fpinfo | pkwrestarg
Diffstat (limited to 'node.c')
-rw-r--r--node.c28
1 files changed, 4 insertions, 24 deletions
diff --git a/node.c b/node.c
index 01ec4bee04..7c291a80ad 100644
--- a/node.c
+++ b/node.c
@@ -1294,18 +1294,6 @@ static void
mark_ast_value(void *ctx, NODE * node)
{
switch (nd_type(node)) {
- case NODE_ARYPTN:
- {
- struct rb_ary_pattern_info *apinfo = node->nd_apinfo;
- rb_gc_mark_movable(apinfo->imemo);
- break;
- }
- case NODE_FNDPTN:
- {
- struct rb_fnd_pattern_info *fpinfo = node->nd_fpinfo;
- rb_gc_mark_movable(fpinfo->imemo);
- break;
- }
case NODE_ARGS:
{
struct rb_args_info *args = node->nd_ainfo;
@@ -1320,6 +1308,8 @@ mark_ast_value(void *ctx, NODE * node)
case NODE_DXSTR:
case NODE_DREGX:
case NODE_DSYM:
+ case NODE_ARYPTN:
+ case NODE_FNDPTN:
rb_gc_mark_movable(node->nd_lit);
break;
default:
@@ -1331,18 +1321,6 @@ static void
update_ast_value(void *ctx, NODE * node)
{
switch (nd_type(node)) {
- case NODE_ARYPTN:
- {
- struct rb_ary_pattern_info *apinfo = node->nd_apinfo;
- apinfo->imemo = rb_gc_location(apinfo->imemo);
- break;
- }
- case NODE_FNDPTN:
- {
- struct rb_fnd_pattern_info *fpinfo = node->nd_fpinfo;
- fpinfo->imemo = rb_gc_location(fpinfo->imemo);
- break;
- }
case NODE_ARGS:
{
struct rb_args_info *args = node->nd_ainfo;
@@ -1357,6 +1335,8 @@ update_ast_value(void *ctx, NODE * node)
case NODE_DXSTR:
case NODE_DREGX:
case NODE_DSYM:
+ case NODE_ARYPTN:
+ case NODE_FNDPTN:
node->nd_lit = rb_gc_location(node->nd_lit);
break;
default: