summaryrefslogtreecommitdiff
path: root/node.c
diff options
context:
space:
mode:
authorKazuki Tsujimoto <kazuki@callcc.net>2020-11-01 16:19:07 +0900
committerKazuki Tsujimoto <kazuki@callcc.net>2020-11-01 16:19:07 +0900
commite03e1982bdc2d815298b211d44534908d79aec4e (patch)
treeedb06eabeb1365fb33cdd7702fcf59499df26fa2 /node.c
parent305c79af2f3358f3c330b00c6a883634894bc35c (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.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/node.c b/node.c
index b68d9c1cfe..9b4255bf4a 100644
--- a/node.c
+++ b/node.c
@@ -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");