Bug #15018
Updated by chopraanmol1 (Anmol Chopra) over 6 years ago
Instead of wrapping following arguments in one list, current implementation creates multiple list wrapping only 2 elements. e.g. for [*args,1,2,3,4,5,6] **Expected AST**: Expected AST: ~~~ NODE_ARGSCAT---nd_head-->NODE_SPLAT(args) | |---nd_body-->NODE_ARRAY(1,2,3,4,5,6) ~~~ **Current AST**: Current AST: ~~~ NODE_ARGSCAT---nd_head-->NODE_ARGSCAT--nd_head-->NODE_ARGSCAT--nd_head-->NODE_SPLAT(args) | | | | | |---nd_body-->NODE_ARRAY(1,2) | | | |---nd_body-->NODE_ARRAY(3,4) | |---nd_body-->NODE_ARRAY(5,6) ~~~ Current Implementation result into something like ~~~ args + [1,2] + [3,4] + [5,6] ~~~ instead of ~~~ args + [1,2,3,4,5,6] ~~~ Benchmark result With patch: ~~~ user system total real argscat 0.556000 0.000000 0.556000 ( 0.553981) argscat_multiple 2.372000 0.000000 2.372000 ( 2.373701) ~~~ Trunk: ~~~ user system total real argscat 1.656000 0.000000 1.656000 ( 1.655868) argscat_multiple 6.232000 0.000000 6.232000 ( 6.234846) ~~~ Implementation: **https://github.com/ruby/ruby/pull/1940** https://github.com/ruby/ruby/pull/1940