diff options
author | Kazuki Tsujimoto <[email protected]> | 2020-11-01 16:19:07 +0900 |
---|---|---|
committer | Kazuki Tsujimoto <[email protected]> | 2020-11-01 16:19:07 +0900 |
commit | e03e1982bdc2d815298b211d44534908d79aec4e (patch) | |
tree | edb06eabeb1365fb33cdd7702fcf59499df26fa2 /node.c | |
parent | 305c79af2f3358f3c330b00c6a883634894bc35c (diff) |
Change NODE layout for pattern matching
I prefer pconst to be the first element of NODE.
Before:
| ARYPTN | FNDPTN | HSHPTN
---+--------+--------+-----------
u1 | imemo | imemo | pkwargs
u2 | pconst | pconst | pconst
u3 | apinfo | fpinfo | pkwrestarg
After:
| ARYPTN | FNDPTN | HSHPTN
---+--------+--------+-----------
u1 | pconst | pconst | pconst
u2 | imemo | imemo | pkwargs
u3 | apinfo | fpinfo | pkwrestarg
Diffstat (limited to 'node.c')
-rw-r--r-- | node.c | 8 |
1 files changed, 6 insertions, 2 deletions
@@ -1328,9 +1328,11 @@ mark_ast_value(void *ctx, NODE * node) case NODE_DXSTR: case NODE_DREGX: case NODE_DSYM: + rb_gc_mark_movable(node->nd_lit); + break; case NODE_ARYPTN: case NODE_FNDPTN: - rb_gc_mark_movable(node->nd_lit); + rb_gc_mark_movable(node->nd_rval); break; default: rb_bug("unreachable node %s", ruby_node_name(nd_type(node))); @@ -1355,9 +1357,11 @@ update_ast_value(void *ctx, NODE * node) case NODE_DXSTR: case NODE_DREGX: case NODE_DSYM: + node->nd_lit = rb_gc_location(node->nd_lit); + break; case NODE_ARYPTN: case NODE_FNDPTN: - node->nd_lit = rb_gc_location(node->nd_lit); + node->nd_rval = rb_gc_location(node->nd_rval); break; default: rb_bug("unreachable"); |