YJIT: Optional parameter rework and bugfix (#8220)
YJIT: Fix splatting empty array with rest param
YJIT: Rework optional parameter handling to fix corner case
The old code had a few unintuitive parts. The starting PC of the callee was set in different places; num_param, which one would assume to be static for a particular callee seemingly tallied to different amounts depending on the what the caller passed; opts_filled_with_splat was greater than zero even when the opts were not filled by items in the splat array. Functionally, the bits that lets the callee know which keyword parameters are unspecified were not passed properly when there are optional parameters and a rest parameter, and then optional parameters are all filled.
Make num_param non-mut and use parameter information in the callee iseq as-is. Move local variable nil fill and placing of the rest array out of gen_push_frame() as they are only ever relevant for iseq calls. Always place the rest array at lead_num + opt_num to fix the previously buggy situation.
YJIT: Compile splat calls to iseqs with rest params
YJIT: Optional parameter rework and bugfix (#8220)
YJIT: Fix splatting empty array with rest param
YJIT: Rework optional parameter handling to fix corner case
The old code had a few unintuitive parts. The starting PC of the callee
was set in different places;
num_param, which one would assume to bestatic for a particular callee seemingly tallied to different amounts
depending on the what the caller passed;
opts_filled_with_splatwasgreater than zero even when the opts were not filled by items in the
splat array. Functionally, the bits that lets the callee know which
keyword parameters are unspecified were not passed properly when there
are optional parameters and a rest parameter, and then optional
parameters are all filled.
Make
num_paramnon-mut and use parameter information in the calleeiseq as-is. Move local variable nil fill and placing of the rest array
out of
gen_push_frame()as they are only ever relevant for iseq calls.Always place the rest array at
lead_num + opt_numto fix thepreviously buggy situation.
Test interactions with optional parameters.