aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJemma Issroff <jemmaissroff@gmail.com>2023-10-24 16:54:44 -0300
committerJemma Issroff <jemmaissroff@gmail.com>2023-10-25 18:18:35 -0300
commit0abf2d86b963089a52af9ee221d1b7da7ba9b2ee (patch)
tree4cd1cc4be8b1039d678c29051d5ea5d81c4b1217
parentf87c31f3e061fc1ac6435a7f32be18e39d6abc06 (diff)
downloadruby-0abf2d86b963089a52af9ee221d1b7da7ba9b2ee.tar.gz
[PRISM] Move pm_scope_node_init to prism_compile.c
pm_scope_node_init is only used for CRuby, so should not live in the ruby/prism repo. We will merge the changes here first so they're not breaking, and will then remove from ruby/prism
-rw-r--r--iseq.c2
-rw-r--r--prism/prism.c86
-rw-r--r--prism/prism.h3
-rw-r--r--prism_compile.c83
4 files changed, 85 insertions, 89 deletions
diff --git a/iseq.c b/iseq.c
index 10cddcf57a..933e5c99d4 100644
--- a/iseq.c
+++ b/iseq.c
@@ -1391,6 +1391,8 @@ iseqw_s_compile(int argc, VALUE *argv, VALUE self)
return iseqw_new(rb_iseq_compile_with_option(src, file, path, line, opt));
}
+void pm_scope_node_init(const pm_node_t *node, pm_scope_node_t *scope, pm_scope_node_t *previous, pm_parser_t *parser);
+
static VALUE
iseqw_s_compile_prism(int argc, VALUE *argv, VALUE self)
{
diff --git a/prism/prism.c b/prism/prism.c
index c10e079f6b..93a665c79c 100644
--- a/prism/prism.c
+++ b/prism/prism.c
@@ -649,92 +649,6 @@ pm_arguments_validate_block(pm_parser_t *parser, pm_arguments_t *arguments, pm_b
}
/******************************************************************************/
-/* Scope node functions */
-/******************************************************************************/
-
-// Generate a scope node from the given node.
-void
-pm_scope_node_init(const pm_node_t *node, pm_scope_node_t *scope, pm_scope_node_t *previous, pm_parser_t *parser) {
- scope->base.type = PM_SCOPE_NODE;
- scope->base.location.start = node->location.start;
- scope->base.location.end = node->location.end;
-
- scope->previous = previous;
- scope->parser = parser;
- scope->ast_node = (pm_node_t *)node;
- scope->parameters = NULL;
- scope->body = NULL;
- scope->constants = NULL;
- if (previous) {
- scope->constants = previous->constants;
- }
- scope->index_lookup_table = NULL;
-
- pm_constant_id_list_init(&scope->locals);
-
- switch (PM_NODE_TYPE(node)) {
- case PM_BLOCK_NODE: {
- pm_block_node_t *cast = (pm_block_node_t *) node;
- if (cast->parameters) scope->parameters = cast->parameters->parameters;
- scope->body = cast->body;
- scope->locals = cast->locals;
- break;
- }
- case PM_CLASS_NODE: {
- pm_class_node_t *cast = (pm_class_node_t *) node;
- scope->body = cast->body;
- scope->locals = cast->locals;
- break;
- }
- case PM_DEF_NODE: {
- pm_def_node_t *cast = (pm_def_node_t *) node;
- scope->parameters = cast->parameters;
- scope->body = cast->body;
- scope->locals = cast->locals;
- break;
- }
- case PM_FOR_NODE: {
- pm_for_node_t *cast = (pm_for_node_t *)node;
- scope->body = (pm_node_t *)cast->statements;
- break;
- }
- case PM_LAMBDA_NODE: {
- pm_lambda_node_t *cast = (pm_lambda_node_t *) node;
- if (cast->parameters) scope->parameters = cast->parameters->parameters;
- scope->body = cast->body;
- scope->locals = cast->locals;
- break;
- }
- case PM_MODULE_NODE: {
- pm_module_node_t *cast = (pm_module_node_t *) node;
- scope->body = cast->body;
- scope->locals = cast->locals;
- break;
- }
- case PM_POST_EXECUTION_NODE: {
- pm_post_execution_node_t *cast = (pm_post_execution_node_t *) node;
- scope->body = (pm_node_t *) cast->statements;
- break;
- }
- case PM_PROGRAM_NODE: {
- pm_program_node_t *cast = (pm_program_node_t *) node;
- scope->body = (pm_node_t *) cast->statements;
- scope->locals = cast->locals;
- break;
- }
- case PM_SINGLETON_CLASS_NODE: {
- pm_singleton_class_node_t *cast = (pm_singleton_class_node_t *) node;
- scope->body = cast->body;
- scope->locals = cast->locals;
- break;
- }
- default:
- assert(false && "unreachable");
- break;
- }
-}
-
-/******************************************************************************/
/* Node creation functions */
/******************************************************************************/
diff --git a/prism/prism.h b/prism/prism.h
index c06e0fd278..25ac08f68b 100644
--- a/prism/prism.h
+++ b/prism/prism.h
@@ -33,9 +33,6 @@ void pm_print_node(pm_parser_t *parser, pm_node_t *node);
void pm_parser_metadata(pm_parser_t *parser, const char *metadata);
-// Generate a scope node from the given node.
-void pm_scope_node_init(const pm_node_t *node, pm_scope_node_t *scope, pm_scope_node_t *previous, pm_parser_t *parser);
-
// The prism version and the serialization format.
PRISM_EXPORTED_FUNCTION const char * pm_version(void);
diff --git a/prism_compile.c b/prism_compile.c
index 4b103b9e24..4d54ea34ad 100644
--- a/prism_compile.c
+++ b/prism_compile.c
@@ -896,6 +896,89 @@ pm_compile_pattern(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *const re
return COMPILE_OK;
}
+// Generate a scope node from the given node.
+void
+pm_scope_node_init(const pm_node_t *node, pm_scope_node_t *scope, pm_scope_node_t *previous, pm_parser_t *parser)
+{
+ scope->base.type = PM_SCOPE_NODE;
+ scope->base.location.start = node->location.start;
+ scope->base.location.end = node->location.end;
+
+ scope->previous = previous;
+ scope->parser = parser;
+ scope->ast_node = (pm_node_t *)node;
+ scope->parameters = NULL;
+ scope->body = NULL;
+ scope->constants = NULL;
+ if (previous) {
+ scope->constants = previous->constants;
+ }
+ scope->index_lookup_table = NULL;
+
+ pm_constant_id_list_init(&scope->locals);
+
+ switch (PM_NODE_TYPE(node)) {
+ case PM_BLOCK_NODE: {
+ pm_block_node_t *cast = (pm_block_node_t *) node;
+ if (cast->parameters) scope->parameters = cast->parameters->parameters;
+ scope->body = cast->body;
+ scope->locals = cast->locals;
+ break;
+ }
+ case PM_CLASS_NODE: {
+ pm_class_node_t *cast = (pm_class_node_t *) node;
+ scope->body = cast->body;
+ scope->locals = cast->locals;
+ break;
+ }
+ case PM_DEF_NODE: {
+ pm_def_node_t *cast = (pm_def_node_t *) node;
+ scope->parameters = cast->parameters;
+ scope->body = cast->body;
+ scope->locals = cast->locals;
+ break;
+ }
+ case PM_FOR_NODE: {
+ pm_for_node_t *cast = (pm_for_node_t *)node;
+ scope->body = (pm_node_t *)cast->statements;
+ break;
+ }
+ case PM_LAMBDA_NODE: {
+ pm_lambda_node_t *cast = (pm_lambda_node_t *) node;
+ if (cast->parameters) scope->parameters = cast->parameters->parameters;
+ scope->body = cast->body;
+ scope->locals = cast->locals;
+ break;
+ }
+ case PM_MODULE_NODE: {
+ pm_module_node_t *cast = (pm_module_node_t *) node;
+ scope->body = cast->body;
+ scope->locals = cast->locals;
+ break;
+ }
+ case PM_POST_EXECUTION_NODE: {
+ pm_post_execution_node_t *cast = (pm_post_execution_node_t *) node;
+ scope->body = (pm_node_t *) cast->statements;
+ break;
+ }
+ case PM_PROGRAM_NODE: {
+ pm_program_node_t *cast = (pm_program_node_t *) node;
+ scope->body = (pm_node_t *) cast->statements;
+ scope->locals = cast->locals;
+ break;
+ }
+ case PM_SINGLETON_CLASS_NODE: {
+ pm_singleton_class_node_t *cast = (pm_singleton_class_node_t *) node;
+ scope->body = cast->body;
+ scope->locals = cast->locals;
+ break;
+ }
+ default:
+ assert(false && "unreachable");
+ break;
+ }
+}
+
/*
* Compiles a prism node into instruction sequences
*