зеркало из https://github.com/github/ruby.git
Revert "Revert "[ruby/prism] Change ScopeNode to point to previous ScopeNode""
This reverts commit fd87372a74
.
This commit is contained in:
Родитель
d2b0c9da2e
Коммит
a9512e80b0
|
@ -33,10 +33,17 @@ PRISM_EXPORTED_FUNCTION const char * pm_node_type_to_str(pm_node_type_t node_typ
|
|||
// declare them here to avoid generating them.
|
||||
typedef struct pm_scope_node {
|
||||
pm_node_t base;
|
||||
struct pm_scope_node *previous;
|
||||
pm_node_t *ast_node;
|
||||
struct pm_parameters_node *parameters;
|
||||
pm_node_t *body;
|
||||
pm_constant_id_list_t locals;
|
||||
pm_parser_t *parser;
|
||||
|
||||
// We don't have the CRuby types ID and st_table within Prism
|
||||
// so we use void *
|
||||
void *constants; // ID *constants
|
||||
void *index_lookup_table; // st_table *index_lookup_table
|
||||
} pm_scope_node_t;
|
||||
|
||||
#endif // PRISM_NODE_H
|
||||
|
|
|
@ -654,14 +654,22 @@ pm_arguments_validate_block(pm_parser_t *parser, pm_arguments_t *arguments, pm_b
|
|||
|
||||
// Generate a scope node from the given node.
|
||||
void
|
||||
pm_scope_node_init(pm_node_t *node, pm_scope_node_t *scope) {
|
||||
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->ast_node = node;
|
||||
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)) {
|
||||
|
|
|
@ -34,7 +34,7 @@ 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(pm_node_t *node, pm_scope_node_t *dest);
|
||||
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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче