@@ -4459,20 +4459,45 @@ ast::ExpressionPtr Translator::desugarHash(core::LocOffsets loc, NodeVec &kvPair
44594459// or `pm_lambda_node *`, and wrapping it around the given `Send` node.
44604460unique_ptr<parser::Node> Translator::translateCallWithBlock (pm_node_t *prismBlockOrLambdaNode,
44614461 unique_ptr<parser::Node> sendNode) {
4462- unique_ptr<parser::Node> parametersNode ;
4462+ pm_node_t *prismParametersNode ;
44634463 unique_ptr<parser::Node> body;
44644464 auto blockLoc = translateLoc (prismBlockOrLambdaNode->location );
44654465 if (PM_NODE_TYPE_P (prismBlockOrLambdaNode, PM_BLOCK_NODE)) {
44664466 auto prismBlockNode = down_cast<pm_block_node>(prismBlockOrLambdaNode);
4467- parametersNode = translate ( prismBlockNode->parameters ) ;
4467+ prismParametersNode = prismBlockNode->parameters ;
44684468 body = this ->enterBlockContext ().translate (prismBlockNode->body );
44694469 } else {
44704470 ENFORCE (PM_NODE_TYPE_P (prismBlockOrLambdaNode, PM_LAMBDA_NODE))
44714471 auto prismLambdaNode = down_cast<pm_lambda_node>(prismBlockOrLambdaNode);
4472- parametersNode = translate ( prismLambdaNode->parameters );
4472+ prismParametersNode = prismLambdaNode->parameters ; // need to change location here.
44734473 body = this ->enterBlockContext ().translate (prismLambdaNode->body );
44744474 }
44754475
4476+ unique_ptr<parser::Node> parametersNode;
4477+ if (prismParametersNode != nullptr ) {
4478+ switch (PM_NODE_TYPE (prismParametersNode)) {
4479+ case PM_NUMBERED_PARAMETERS_NODE: {
4480+ if (PM_NODE_TYPE_P (prismBlockOrLambdaNode, PM_BLOCK_NODE)) {
4481+ auto prismBlockNode = down_cast<pm_block_node>(prismBlockOrLambdaNode);
4482+ parametersNode = translate (prismBlockNode->parameters );
4483+ } else {
4484+ ENFORCE (PM_NODE_TYPE_P (prismBlockOrLambdaNode, PM_LAMBDA_NODE))
4485+ auto prismLambdaNode = down_cast<pm_lambda_node>(prismBlockOrLambdaNode);
4486+ prismLambdaNode->parameters ->location = (pm_location_t ){.start = prismLambdaNode->operator_loc .end ,
4487+ .end = prismLambdaNode->operator_loc .end };
4488+ parametersNode = translate (prismLambdaNode->parameters );
4489+ body = this ->enterBlockContext ().translate (prismLambdaNode->body );
4490+ }
4491+
4492+ break ;
4493+ }
4494+ default : {
4495+ parametersNode = translate (prismParametersNode);
4496+ break ;
4497+ }
4498+ }
4499+ }
4500+
44764501 // Modify send node's endLoc to be position before first space
44774502 // This fixes location for cases like:
44784503 // Module.new do
0 commit comments