diff options
author | Kazuki Tsujimoto <[email protected]> | 2020-08-02 01:03:43 +0900 |
---|---|---|
committer | Kazuki Tsujimoto <[email protected]> | 2020-08-02 01:04:06 +0900 |
commit | fcdbdff631a1a6bcc2229d448ed7c76041fe3258 (patch) | |
tree | cb73eb7446f547b744365e9141657f4790ab92b2 /node.c | |
parent | b6175c9e4fe25b978252d8998fe791d65d998fc5 (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.c | 28 |
1 files changed, 4 insertions, 24 deletions
@@ -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: |