Project

General

Profile

Bug #20720

Updated by luke-gru (Luke Gruber) 3 months ago

```ruby 
 class A 
   def foo(*b, &block) 
   end 
 end 

 class B < A 
   def foo(...) 
     super() 
     puts "2" 
   end 
 end 
 ``` 

 results in: 

 ``` 
 ./ruby --parser=prism -I../ruby/lib -I. -I.ext/x86_64-linux -I.ext/common -r./x86_64-linux-fake ../ruby/test.rb 

 -- raw disasm-------- 

    trace: 8 

    trace: 1 

  <L000> [sp: 0, unremovable: 0, refcnt: 0] 

    0000 putself                                                            ( 284) 

    0001 invokesuperforward     <calldata:, 0>, nil                           ( 284) 

 *    0004 pop                                                                ( 284) 

    trace: 1 

    0005 putself                                                            ( 285) 

    0006 putchilledstring       "2"                                           ( 285) 

    0008 opt_send_without_block <calldata:puts, 1>                          ( 285) 

    trace: 10 

    0010 leave                                                              ( 286) 

 --------------------- 

 ../ruby/test.rb: ../ruby/test.rb:284: argument stack underflow (-1) (SyntaxError) 
 ``` 

 It should differentiate between forwarding ZSUPER type nodes and non-ZSUPER Super super nodes with no arguments. in this case.

Back