summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Zhu <peter@peterzhu.ca>2024-01-23 12:11:14 -0500
committerPeter Zhu <peter@peterzhu.ca>2024-01-23 15:23:13 -0500
commit333f4b4930bf397f87bd99767b53fcce4f9a3e43 (patch)
treec444fd8229b15cbc052f5e2686f2da269aa08ffe
parentc84237f9531aed3b204d3fdacc2dd9d2bd4c7d81 (diff)
[PRISM] Support block parameters with no name
Fixes ruby/prism#2249.
-rw-r--r--prism_compile.c6
-rw-r--r--test/ruby/test_compile_prism.rb4
2 files changed, 8 insertions, 2 deletions
diff --git a/prism_compile.c b/prism_compile.c
index cf9bc74625..9ddd502117 100644
--- a/prism_compile.c
+++ b/prism_compile.c
@@ -6632,8 +6632,10 @@ pm_compile_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *const ret,
body->param.flags.has_block = true;
pm_constant_id_t name = ((pm_block_parameter_node_t *)parameters_node->block)->name;
- pm_insert_local_index(name, local_index, index_lookup_table, local_table_for_iseq, scope_node);
- local_index++;
+ if (name != 0) {
+ pm_insert_local_index(name, local_index, index_lookup_table, local_table_for_iseq, scope_node);
+ local_index++;
+ }
}
}
diff --git a/test/ruby/test_compile_prism.rb b/test/ruby/test_compile_prism.rb
index 10def69ff2..66fbefd27b 100644
--- a/test/ruby/test_compile_prism.rb
+++ b/test/ruby/test_compile_prism.rb
@@ -2055,6 +2055,10 @@ end
def test_BlockParameterNode
assert_prism_eval("def prism_test_block_parameter_node(&bar) end")
assert_prism_eval("->(b, c=1, *d, e, &f){}")
+
+ # Test BlockParameterNode with no name
+ assert_prism_eval("->(&){}")
+ assert_prism_eval("def prism_test_block_parameter_node(&); end")
end
def test_BlockParametersNode