diff --git a/src/NQP/Actions.pm b/src/NQP/Actions.pm index c3ad74c..5353e1a 100644 --- a/src/NQP/Actions.pm +++ b/src/NQP/Actions.pm @@ -490,7 +490,7 @@ method signature($/) { if $*MULTINESS eq "multi" { my @params; for $BLOCKINIT.list { - @params.push($_.multitype // '_'); + @params.push($_.multitype // '_') unless $_; } @BLOCK[0].multi(@params); } @@ -504,15 +504,18 @@ method parameter($/) { if $quant ne '!' { $past.viviself( vivitype($) ); } + $past := 1; } else { $past := $.ast; if $quant eq '*' { $past.slurpy(1); $past.named( $ eq '%' ); + $past := 1; } elsif $quant eq '?' { $past.viviself( vivitype($) ); + $past := 1; } } if $ { diff --git a/t/nqp/51-multi.t b/t/nqp/51-multi.t index 33f9a0b..7bd733f 100644 --- a/t/nqp/51-multi.t +++ b/t/nqp/51-multi.t @@ -1,6 +1,6 @@ #! nqp -say("1..5"); +say("1..7"); our multi sub foo(Float $f) { say("ok 1"); @@ -32,3 +32,18 @@ my $f := Foo.new; $f.bar(43.5 - 0.5); $f.bar("ok 5"); + +class Bar { + our multi method foo($x, :$opt?) { + say($x); + } + + our multi method foo(Float $x, :$opt?) { + say("ok 6"); + } +} + +my $b := Bar.new; +$b.foo(43.5 - 0.5); +$b.foo("ok 7"); +