From e03e1982bdc2d815298b211d44534908d79aec4e Mon Sep 17 00:00:00 2001 From: Kazuki Tsujimoto Date: Sun, 1 Nov 2020 16:19:07 +0900 Subject: 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 --- node.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'node.c') 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"); -- cgit v1.2.1