@@ -254,16 +254,15 @@ def evaluate_call_node(node, scope)
254254 elsif node . block . is_a? Prism ::BlockNode
255255 call_block_proc = -> ( block_args , block_self_type ) do
256256 scope . conditional do |s |
257- numbered_parameters = node . block . locals . grep ( /\A _[1-9]/ ) . map ( &:to_s )
258257 params_table = node . block . locals . to_h { [ _1 . to_s , Types ::NIL ] }
259258 table = { **params_table , Scope ::BREAK_RESULT => nil , Scope ::NEXT_RESULT => nil }
260259 block_scope = Scope . new s , table , self_type : block_self_type , trace_ivar : !block_self_type
261260 # TODO kwargs
262- if node . block . parameters &.parameters
263- # node.block.parameters is Prism::BlockParametersNode
261+ case node . block . parameters
262+ when Prism ::NumberedParametersNode
263+ assign_numbered_parameters node . block . parameters . maximum , block_scope , block_args , { }
264+ when Prism ::BlockParametersNode
264265 assign_parameters node . block . parameters . parameters , block_scope , block_args , { }
265- elsif !numbered_parameters . empty?
266- assign_numbered_parameters numbered_parameters , block_scope , block_args , { }
267266 end
268267 result = node . block . body ? evaluate ( node . block . body , block_scope ) : Types ::NIL
269268 block_scope . merge_jumps
@@ -946,16 +945,13 @@ def assign_parameters(node, scope, args, kwargs)
946945 end
947946 end
948947
949- def assign_numbered_parameters ( numbered_parameters , scope , args , _kwargs )
950- return if numbered_parameters . empty?
951- max_num = numbered_parameters . map { _1 [ 1 ] . to_i } . max
952- if max_num == 1
948+ def assign_numbered_parameters ( maximum , scope , args , _kwargs )
949+ if maximum == 1
953950 scope [ '_1' ] = args . first || Types ::NIL
954951 else
955- args = sized_splat ( args . first , :to_ary , max_num ) if args . size == 1
956- numbered_parameters . each do |name |
957- index = name [ 1 ] . to_i - 1
958- scope [ name ] = args [ index ] || Types ::NIL
952+ args = sized_splat ( args . first , :to_ary , maximum ) if args . size == 1
953+ maximum . times do |index |
954+ scope [ "_#{ index + 1 } " ] = args [ index ] || Types ::NIL
959955 end
960956 end
961957 end
0 commit comments