[ruby/prism] Fix it parameters for parser translation
https://github.com/ruby/prism/commit/2f3feb8d51
This commit is contained in:
parent
6cfd929034
commit
2e80ceb6ff
@ -1030,6 +1030,12 @@ module Prism
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# -> { it }
|
||||||
|
# ^^^^^^^^^
|
||||||
|
def visit_it_parameters_node(node)
|
||||||
|
builder.args(nil, [], nil, false)
|
||||||
|
end
|
||||||
|
|
||||||
# foo(bar: baz)
|
# foo(bar: baz)
|
||||||
# ^^^^^^^^
|
# ^^^^^^^^
|
||||||
def visit_keyword_hash_node(node)
|
def visit_keyword_hash_node(node)
|
||||||
@ -1052,13 +1058,14 @@ module Prism
|
|||||||
# ^^^^^
|
# ^^^^^
|
||||||
def visit_lambda_node(node)
|
def visit_lambda_node(node)
|
||||||
parameters = node.parameters
|
parameters = node.parameters
|
||||||
|
implicit_parameters = parameters.is_a?(NumberedParametersNode) || parameters.is_a?(ItParametersNode)
|
||||||
|
|
||||||
builder.block(
|
builder.block(
|
||||||
builder.call_lambda(token(node.operator_loc)),
|
builder.call_lambda(token(node.operator_loc)),
|
||||||
[node.opening, srange(node.opening_loc)],
|
[node.opening, srange(node.opening_loc)],
|
||||||
if parameters.nil?
|
if parameters.nil?
|
||||||
builder.args(nil, [], nil, false)
|
builder.args(nil, [], nil, false)
|
||||||
elsif node.parameters.is_a?(NumberedParametersNode)
|
elsif implicit_parameters
|
||||||
visit(node.parameters)
|
visit(node.parameters)
|
||||||
else
|
else
|
||||||
builder.args(
|
builder.args(
|
||||||
@ -1068,7 +1075,7 @@ module Prism
|
|||||||
false
|
false
|
||||||
)
|
)
|
||||||
end,
|
end,
|
||||||
node.body&.accept(copy_compiler(forwarding: parameters.is_a?(NumberedParametersNode) ? [] : find_forwarding(parameters&.parameters))),
|
node.body&.accept(copy_compiler(forwarding: implicit_parameters ? [] : find_forwarding(parameters&.parameters))),
|
||||||
[node.closing, srange(node.closing_loc)]
|
[node.closing, srange(node.closing_loc)]
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
@ -1076,7 +1083,14 @@ module Prism
|
|||||||
# foo
|
# foo
|
||||||
# ^^^
|
# ^^^
|
||||||
def visit_local_variable_read_node(node)
|
def visit_local_variable_read_node(node)
|
||||||
builder.ident([node.name, srange(node.location)]).updated(:lvar)
|
name = node.name
|
||||||
|
|
||||||
|
# This is just a guess. parser doesn't have support for the implicit
|
||||||
|
# `it` variable yet, so we'll probably have to visit this once it
|
||||||
|
# does.
|
||||||
|
name = :it if name == :"0it"
|
||||||
|
|
||||||
|
builder.ident([name, srange(node.location)]).updated(:lvar)
|
||||||
end
|
end
|
||||||
|
|
||||||
# foo = 1
|
# foo = 1
|
||||||
@ -1875,13 +1889,14 @@ module Prism
|
|||||||
def visit_block(call, block)
|
def visit_block(call, block)
|
||||||
if block
|
if block
|
||||||
parameters = block.parameters
|
parameters = block.parameters
|
||||||
|
implicit_parameters = parameters.is_a?(NumberedParametersNode) || parameters.is_a?(ItParametersNode)
|
||||||
|
|
||||||
builder.block(
|
builder.block(
|
||||||
call,
|
call,
|
||||||
token(block.opening_loc),
|
token(block.opening_loc),
|
||||||
if parameters.nil?
|
if parameters.nil?
|
||||||
builder.args(nil, [], nil, false)
|
builder.args(nil, [], nil, false)
|
||||||
elsif parameters.is_a?(NumberedParametersNode)
|
elsif implicit_parameters
|
||||||
visit(parameters)
|
visit(parameters)
|
||||||
else
|
else
|
||||||
builder.args(
|
builder.args(
|
||||||
@ -1896,7 +1911,7 @@ module Prism
|
|||||||
false
|
false
|
||||||
)
|
)
|
||||||
end,
|
end,
|
||||||
block.body&.accept(copy_compiler(forwarding: parameters.is_a?(NumberedParametersNode) ? [] : find_forwarding(parameters&.parameters))),
|
block.body&.accept(copy_compiler(forwarding: implicit_parameters ? [] : find_forwarding(parameters&.parameters))),
|
||||||
token(block.closing_loc)
|
token(block.closing_loc)
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
|
Loading…
x
Reference in New Issue
Block a user