From 82d84d741eed6aab81323e42439a81dd7d0cecd2 Mon Sep 17 00:00:00 2001 From: Jemma Issroff Date: Thu, 24 Aug 2023 11:26:38 -0700 Subject: [PATCH] [ruby/yarp] Added BlockNode case to ScopeNode, fixed ScopeNode to have body https://github.com/ruby/yarp/commit/8bd3f59621 --- yarp/node.h | 2 +- yarp/yarp.c | 23 +++++++++++++++-------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/yarp/node.h b/yarp/node.h index 8e059f957a..f2d5be8bf2 100644 --- a/yarp/node.h +++ b/yarp/node.h @@ -41,6 +41,6 @@ YP_EXPORTED_FUNCTION const char * yp_node_type_to_str(yp_node_type_t node_type); typedef struct yp_scope_node { yp_node_t base; struct yp_parameters_node *parameters; - struct yp_statements_node *statements; + yp_node_t *body; yp_constant_id_list_t locals; } yp_scope_node_t; diff --git a/yarp/yarp.c b/yarp/yarp.c index 6665368d01..5cae9e6d2f 100644 --- a/yarp/yarp.c +++ b/yarp/yarp.c @@ -1017,7 +1017,7 @@ yp_block_argument_node_create(yp_parser_t *parser, const yp_token_t *operator, y } static void -YP_ATTRIBUTE_UNUSED yp_scope_node_create(yp_parameters_node_t *parameters, yp_statements_node_t *statements, yp_constant_id_list_t locals, const char *start, const char *end, yp_scope_node_t *dest) +YP_ATTRIBUTE_UNUSED yp_scope_node_create(yp_parameters_node_t *parameters, yp_node_t *body, yp_constant_id_list_t locals, const char *start, const char *end, yp_scope_node_t *dest) { *dest = (yp_scope_node_t) { { @@ -1025,7 +1025,7 @@ YP_ATTRIBUTE_UNUSED yp_scope_node_create(yp_parameters_node_t *parameters, yp_st .location = { .start = start, .end = end }, }, .parameters = parameters, - .statements = statements, + .body = body, .locals = locals, }; return; @@ -1035,34 +1035,41 @@ YP_ATTRIBUTE_UNUSED yp_scope_node_create(yp_parameters_node_t *parameters, yp_st void yp_scope_node_init(yp_node_t *node, yp_scope_node_t *dest) { yp_parameters_node_t *parameters = NULL; - yp_statements_node_t *statements; + yp_node_t *body; yp_constant_id_list_t locals; const char *start = node->location.start; const char *end = node->location.end; switch (node->type) { + case YP_NODE_BLOCK_NODE: { + yp_block_node_t *block_node = (yp_block_node_t *) node; + body = (yp_node_t *)block_node->body; + locals = block_node->locals; + parameters = block_node->parameters->parameters; + break; + } case YP_NODE_CLASS_NODE: { yp_class_node_t *class_node = (yp_class_node_t *) node; - statements = (yp_statements_node_t *)class_node->body; + body = (yp_node_t *)class_node->body; locals = class_node->locals; break; } case YP_NODE_DEF_NODE: { yp_def_node_t *def_node = (yp_def_node_t *) node; parameters = def_node->parameters; - statements = (yp_statements_node_t *)def_node->body; + body = (yp_node_t *)def_node->body; locals = def_node->locals; break; } case YP_NODE_MODULE_NODE: { yp_module_node_t *module_node = (yp_module_node_t *) node; - statements = (yp_statements_node_t *)module_node->body; + body = (yp_node_t *)module_node->body; locals = module_node->locals; break; } case YP_NODE_SINGLETON_CLASS_NODE: { yp_singleton_class_node_t *singleton_class_node = (yp_singleton_class_node_t *) node; - statements = (yp_statements_node_t *)singleton_class_node->body; + body = (yp_node_t *)singleton_class_node->body; locals = singleton_class_node->locals; break; } @@ -1072,7 +1079,7 @@ yp_scope_node_init(yp_node_t *node, yp_scope_node_t *dest) { return; } - yp_scope_node_create(parameters, statements, locals, start, end, dest); + yp_scope_node_create(parameters, body, locals, start, end, dest); return; }