@@ -1833,16 +1833,14 @@ unique_ptr<parser::Node> Translator::translate(pm_node_t *node) {
18331833
18341834 case PM_NUMBERED_PARAMETERS_NODE: { // The params in a PM_BLOCK_NODE with numbered params
18351835 // Like the implicit `|_1, _2, _3|` in `foo { _3 }`
1836- auto numberedParamsNode = down_cast<pm_numbered_parameters_node>(blockNode->parameters );
18371836
18381837 // Use a 0-length loc just after the `do` or `{` token, as if you had written:
18391838 // do|_1, _2| ... end`
18401839 // ^
18411840 // {|_1, _2| ... }`
18421841 // ^
18431842
1844- blockParamsStore = translateNumberedParametersNode (
1845- numberedParamsNode, down_cast<pm_statements_node>(blockNode->body ));
1843+ blockParamsStore = translateNumberedParametersNode (blockNode);
18461844
18471845 break ;
18481846 }
@@ -4428,9 +4426,12 @@ Translator::findNumberedParamsUsageLocs(core::LocOffsets loc, pm_statements_node
44284426 return result;
44294427}
44304428
4431- ast::MethodDef::PARAMS_store
4432- Translator::translateNumberedParametersNode (pm_numbered_parameters_node *numberedParamsNode,
4433- pm_statements_node_t *statements) {
4429+ // Desugaring numbered parameters requires access to the whole block node (not just its parameters node),
4430+ // because we need to walk through its body to find the locations of the usages of the numbered parameters.
4431+ ast::MethodDef::PARAMS_store Translator::translateNumberedParametersNode (pm_block_node *blockNode) {
4432+ auto numberedParamsNode = down_cast<pm_numbered_parameters_node>(blockNode->parameters );
4433+ auto statements = down_cast<pm_statements_node>(blockNode->body );
4434+
44344435 auto location = translateLoc (numberedParamsNode->base .location );
44354436
44364437 auto paramCount = numberedParamsNode->maximum ;
0 commit comments