summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJemma Issroff <jemmaissroff@gmail.com>2023-08-24 11:26:38 -0700
committergit <svn-admin@ruby-lang.org>2023-08-24 19:06:01 +0000
commit82d84d741eed6aab81323e42439a81dd7d0cecd2 (patch)
tree0d7d089bc5013ac4d8d9491a4447f86afac9727f
parentef82054bb5e74fcaf3ef6c803246f93b57e88c3d (diff)
[ruby/yarp] Added BlockNode case to ScopeNode, fixed ScopeNode to have body
https://github.com/ruby/yarp/commit/8bd3f59621
-rw-r--r--yarp/node.h2
-rw-r--r--yarp/yarp.c23
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;
}