#1733: calling convention broken
---------------------+------------------------------------------------------
 Reporter:  fperrad  |       Owner:       
     Type:  bug      |      Status:  new  
 Priority:  normal   |   Milestone:       
Component:  core     |     Version:  2.6.0
 Severity:  high     |    Keywords:       
     Lang:           |       Patch:       
 Platform:           |  
---------------------+------------------------------------------------------
 The scheme of calling convention used by Lua is broken.

 With Lua, all known parameters are optional, and extra parameters or
 vararg are collected by a final slurpy.

 The following PIR code shows the problem :

 {{{
 .sub 'main' :main
     $P1 = box "p1"
     $P2 = box "p2"
     $P3 = box "p3"
     f($P1, $P2, $P3) # ok
     f($P1, $P2) # ok
     f($P1) # fails
 .end

 # f() has 2 known parameters
 .sub 'f'
     .param pmc p1 :optional
     .param int has_p1 :opt_flag
     .param pmc p2 :optional
     .param int has_p2 :opt_flag
     .param pmc extra :slurpy
     unless has_p1 goto L1
     say p1
     unless has_p2 goto L1
     say p2
     $P0 = iter extra
   L2:
     unless $P0 goto L1
     $P1 = shift $P0
     say $P1
     goto L2
   L1:
 .end
 }}}

 Here, the current output :

 {{{
 p1
 p2
 p3
 p1
 p2
 FixedPMCArray: Cannot set array size to a negative number (-1)
 current instr.: 'f' pc 45 (prm.pir:8)
 called from Sub 'main' pc 40 (prm.pir:8)
 }}}

-- 
Ticket URL: <https://trac.parrot.org/parrot/ticket/1733>
Parrot <https://trac.parrot.org/parrot/>
Parrot Development
_______________________________________________
parrot-tickets mailing list
[email protected]
http://lists.parrot.org/mailman/listinfo/parrot-tickets

Reply via email to