diff options
author | yui-knk <[email protected]> | 2024-07-18 13:47:13 +0900 |
---|---|---|
committer | Yuichiro Kaneko <[email protected]> | 2024-07-20 11:25:26 +0900 |
commit | 6be539aab5b8fd66685e6079afc6ca83c89fcbd6 (patch) | |
tree | fc3164f28dbb1f2a4ee752626521648937f15289 /ast.c | |
parent | 174c01b80e31236ca144dc510a662cd18b9a20ee (diff) |
Change UNDEF Node structure
Change UNDEF Node to hold their items to keep the original grammar
structure.
For example:
```
undef a, b
```
Before:
```
@ NODE_BLOCK (id: 4, line: 1, location: (1,6)-(1,10))*
+- nd_head (1):
| @ NODE_UNDEF (id: 1, line: 1, location: (1,6)-(1,7))
| +- nd_undef:
| @ NODE_SYM (id: 0, line: 1, location: (1,6)-(1,7))
| +- string: :a
+- nd_head (2):
@ NODE_UNDEF (id: 3, line: 1, location: (1,9)-(1,10))
+- nd_undef:
@ NODE_SYM (id: 2, line: 1, location: (1,9)-(1,10))
+- string: :b
```
After:
```
@ NODE_UNDEF (id: 1, line: 1, location: (1,6)-(1,10))*
+- nd_undefs:
+- length: 2
+- element (0):
| @ NODE_SYM (id: 0, line: 1, location: (1,6)-(1,7))
| +- string: :a
+- element (1):
@ NODE_SYM (id: 2, line: 1, location: (1,9)-(1,10))
+- string: :b
```
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/11213
Diffstat (limited to 'ast.c')
-rw-r--r-- | ast.c | 20 |
1 files changed, 19 insertions, 1 deletions
@@ -334,6 +334,24 @@ dump_array(VALUE ast_value, const struct RNode_LIST *node) } static VALUE +dump_parser_array(VALUE ast_value, rb_parser_ary_t *p_ary) +{ + VALUE ary; + + if (p_ary->data_type != PARSER_ARY_DATA_NODE) { + rb_bug("unexpected rb_parser_ary_data_type: %d", p_ary->data_type); + } + + ary = rb_ary_new(); + + for (long i = 0; i < p_ary->len; i++) { + rb_ary_push(ary, NEW_CHILD(ast_value, p_ary->data[i])); + } + + return ary; +} + +static VALUE var_name(ID id) { if (!id) return Qnil; @@ -577,7 +595,7 @@ node_children(VALUE ast_value, const NODE *node) case NODE_VALIAS: return rb_ary_new_from_args(2, ID2SYM(RNODE_VALIAS(node)->nd_alias), ID2SYM(RNODE_VALIAS(node)->nd_orig)); case NODE_UNDEF: - return rb_ary_new_from_node_args(ast_value, 1, RNODE_UNDEF(node)->nd_undef); + return rb_ary_new_from_args(1, dump_parser_array(ast_value, RNODE_UNDEF(node)->nd_undefs)); case NODE_CLASS: return rb_ary_new_from_node_args(ast_value, 3, RNODE_CLASS(node)->nd_cpath, RNODE_CLASS(node)->nd_super, RNODE_CLASS(node)->nd_body); case NODE_MODULE: |