Project

General

Profile

Bug #15018

Updated by chopraanmol1 (Anmol Chopra) over 5 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

Back