From c5f22b5b75f839c0da5c504a4c9e9956545dc1ca Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Thu, 15 Feb 2024 16:09:57 -0500 Subject: [PATCH] Make all fields in AST movable --- node.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/node.c b/node.c index 9123b606d9..8068c7edc8 100644 --- a/node.c +++ b/node.c @@ -405,9 +405,13 @@ void rb_ast_update_references(rb_ast_t *ast) { if (ast->node_buffer) { - node_buffer_t *nb = ast->node_buffer; + ast->node_buffer->mark_hash = rb_gc_location(ast->node_buffer->mark_hash); + ast->node_buffer->tokens = rb_gc_location(ast->node_buffer->tokens); + node_buffer_t *nb = ast->node_buffer; iterate_node_values(ast, &nb->markable, update_ast_value, NULL); + + if (ast->body.script_lines) ast->body.script_lines = rb_gc_location(ast->body.script_lines); } } @@ -415,11 +419,13 @@ void rb_ast_mark(rb_ast_t *ast) { if (ast->node_buffer) { - rb_gc_mark(ast->node_buffer->mark_hash); - rb_gc_mark(ast->node_buffer->tokens); + rb_gc_mark_movable(ast->node_buffer->mark_hash); + rb_gc_mark_movable(ast->node_buffer->tokens); + node_buffer_t *nb = ast->node_buffer; iterate_node_values(ast, &nb->markable, mark_ast_value, NULL); - if (ast->body.script_lines) rb_gc_mark(ast->body.script_lines); + + if (ast->body.script_lines) rb_gc_mark_movable(ast->body.script_lines); } }