[ruby/yarp] Added BlockNode case to ScopeNode, fixed ScopeNode to have body
https://github.com/ruby/yarp/commit/8bd3f59621
This commit is contained in:
parent
ef82054bb5
commit
82d84d741e
@ -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 {
|
typedef struct yp_scope_node {
|
||||||
yp_node_t base;
|
yp_node_t base;
|
||||||
struct yp_parameters_node *parameters;
|
struct yp_parameters_node *parameters;
|
||||||
struct yp_statements_node *statements;
|
yp_node_t *body;
|
||||||
yp_constant_id_list_t locals;
|
yp_constant_id_list_t locals;
|
||||||
} yp_scope_node_t;
|
} yp_scope_node_t;
|
||||||
|
23
yarp/yarp.c
23
yarp/yarp.c
@ -1017,7 +1017,7 @@ yp_block_argument_node_create(yp_parser_t *parser, const yp_token_t *operator, y
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
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) {
|
*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 },
|
.location = { .start = start, .end = end },
|
||||||
},
|
},
|
||||||
.parameters = parameters,
|
.parameters = parameters,
|
||||||
.statements = statements,
|
.body = body,
|
||||||
.locals = locals,
|
.locals = locals,
|
||||||
};
|
};
|
||||||
return;
|
return;
|
||||||
@ -1035,34 +1035,41 @@ YP_ATTRIBUTE_UNUSED yp_scope_node_create(yp_parameters_node_t *parameters, yp_st
|
|||||||
void
|
void
|
||||||
yp_scope_node_init(yp_node_t *node, yp_scope_node_t *dest) {
|
yp_scope_node_init(yp_node_t *node, yp_scope_node_t *dest) {
|
||||||
yp_parameters_node_t *parameters = NULL;
|
yp_parameters_node_t *parameters = NULL;
|
||||||
yp_statements_node_t *statements;
|
yp_node_t *body;
|
||||||
yp_constant_id_list_t locals;
|
yp_constant_id_list_t locals;
|
||||||
const char *start = node->location.start;
|
const char *start = node->location.start;
|
||||||
const char *end = node->location.end;
|
const char *end = node->location.end;
|
||||||
|
|
||||||
switch (node->type) {
|
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: {
|
case YP_NODE_CLASS_NODE: {
|
||||||
yp_class_node_t *class_node = (yp_class_node_t *) 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;
|
locals = class_node->locals;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case YP_NODE_DEF_NODE: {
|
case YP_NODE_DEF_NODE: {
|
||||||
yp_def_node_t *def_node = (yp_def_node_t *) node;
|
yp_def_node_t *def_node = (yp_def_node_t *) node;
|
||||||
parameters = def_node->parameters;
|
parameters = def_node->parameters;
|
||||||
statements = (yp_statements_node_t *)def_node->body;
|
body = (yp_node_t *)def_node->body;
|
||||||
locals = def_node->locals;
|
locals = def_node->locals;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case YP_NODE_MODULE_NODE: {
|
case YP_NODE_MODULE_NODE: {
|
||||||
yp_module_node_t *module_node = (yp_module_node_t *) 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;
|
locals = module_node->locals;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case YP_NODE_SINGLETON_CLASS_NODE: {
|
case YP_NODE_SINGLETON_CLASS_NODE: {
|
||||||
yp_singleton_class_node_t *singleton_class_node = (yp_singleton_class_node_t *) 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;
|
locals = singleton_class_node->locals;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1072,7 +1079,7 @@ yp_scope_node_init(yp_node_t *node, yp_scope_node_t *dest) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
yp_scope_node_create(parameters, statements, locals, start, end, dest);
|
yp_scope_node_create(parameters, body, locals, start, end, dest);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user