Skip to content

Commit 427fedd

Browse files
committed
Cope properly with params whose name is "".
1 parent c52b1cb commit 427fedd

File tree

2 files changed

+16
-11
lines changed

2 files changed

+16
-11
lines changed

src/QAST/Node.nqp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class QAST::Node {
3131

3232
method named($value = NO_VALUE) {
3333
if $value =:= NO_VALUE {
34-
""
34+
NQPMu
3535
}
3636
else {
3737
self.HOW.mixin(self, QAST::SpecialArg);

src/vm/moar/QAST/QASTCompilerMAST.nqp

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -858,15 +858,19 @@ my class MASTCompilerInstance {
858858
my int $pos_slurpy := 0;
859859
my int $named_slurpy := 0;
860860
for $block.params {
861-
if $_.named {
862-
# Don't count towards arity or count.
863-
if $_.slurpy { $named_slurpy := 1 }
864-
}
865-
elsif $_.slurpy {
866-
if $pos_slurpy {
867-
nqp::die("Only one slurpy positional allowed");
861+
if $_.slurpy {
862+
if $_.named {
863+
$named_slurpy := 1
864+
}
865+
else {
866+
if $pos_slurpy {
867+
nqp::die("Only one slurpy positional allowed");
868+
}
869+
$pos_slurpy := 1;
868870
}
869-
$pos_slurpy := 1;
871+
}
872+
elsif nqp::defined($_.named) {
873+
# Don't count towards arity or count.
870874
}
871875
elsif $_.default {
872876
if $pos_slurpy {
@@ -899,7 +903,7 @@ my class MASTCompilerInstance {
899903
my $param_kind := self.type_to_register_kind($var.returns);
900904
my $opslot := @kind_to_op_slot[$param_kind];
901905

902-
my $opname_index := ($var.named
906+
my $opname_index := (nqp::defined($var.named)
903907
?? (nqp::islist($var.named) ?? 16 !! 8)
904908
!! 0)
905909
+ ($var.default ?? 4 !! 0) + $opslot;
@@ -917,7 +921,8 @@ my class MASTCompilerInstance {
917921
$opname := "param_sp";
918922
}
919923
}
920-
elsif $var.named -> $name {
924+
elsif nqp::defined($var.named) {
925+
my $name := $var.named;
921926
if nqp::islist($name) {
922927
unless nqp::elems($name) == 2 {
923928
nqp::die("Can only support a single fallback name for a named parameter");

0 commit comments

Comments
 (0)