Skip to content

Commit

Permalink
Use method name logic for placeholder error
Browse files Browse the repository at this point in the history
Rather than figure this out redundantly, let's just move the placeholder check down
past the place we calculate the PAST's name and use that
  • Loading branch information
hoelzro committed Oct 23, 2018
1 parent 04d7763 commit cc93646
Showing 1 changed file with 24 additions and 23 deletions.
47 changes: 24 additions & 23 deletions src/Perl6/Actions.nqp
Expand Up @@ -4530,29 +4530,6 @@ class Perl6::Actions is HLL::Actions does STDActions {
}
else {
$past := WANTED($<blockoid>.ast,'method_def');
if $past.ann('placeholder_sig') {
my $placeholders := nqp::iterator($past.ann('placeholder_sig'));
my @non-placeholder-names;
my $method-name := $<longname><name>;
while $placeholders {
my $placeholder := nqp::shift($placeholders);
my $name := $placeholder<placeholder>;
my $non-placeholder-name;
if $placeholder<named_names> {
$non-placeholder-name := nqp::concat(':', nqp::concat(nqp::substr($name, 0, 1), nqp::substr($name, 2)));
} else {
$non-placeholder-name := nqp::concat(nqp::substr($name, 0, 1), nqp::substr($name, 2));
}
nqp::push( @non-placeholder-names, $non-placeholder-name);
}

my $non-placeholder-names := nqp::join(', ', @non-placeholder-names);

my $first-placeholder := $past.ann('placeholder_sig')[0];
my $first-placeholder-name := $first-placeholder<placeholder>;

$first-placeholder<ast>.PRECURSOR.panic("Placeholder variables (eg. $first-placeholder-name) cannot be used in a method.\nPlease specify an explicit signature, like $*METHODTYPE $method-name ($non-placeholder-names) \{ ... \}");
}
if is_clearly_returnless($past) {
$past[1] := QAST::Op.new(
:op('p6decontrv'),
Expand Down Expand Up @@ -4601,6 +4578,30 @@ class Perl6::Actions is HLL::Actions does STDActions {
}
$past.name($name ?? $name !! '<anon>');

if $past.ann('placeholder_sig') {
my $placeholders := nqp::iterator($past.ann('placeholder_sig'));
my @non-placeholder-names;
my $method-name := $past.name;
while $placeholders {
my $placeholder := nqp::shift($placeholders);
my $name := $placeholder<placeholder>;
my $non-placeholder-name;
if $placeholder<named_names> {
$non-placeholder-name := nqp::concat(':', nqp::concat(nqp::substr($name, 0, 1), nqp::substr($name, 2)));
} else {
$non-placeholder-name := nqp::concat(nqp::substr($name, 0, 1), nqp::substr($name, 2));
}
nqp::push( @non-placeholder-names, $non-placeholder-name);
}

my $non-placeholder-names := nqp::join(', ', @non-placeholder-names);

my $first-placeholder := $past.ann('placeholder_sig')[0];
my $first-placeholder-name := $first-placeholder<placeholder>;

$first-placeholder<ast>.PRECURSOR.panic("Placeholder variables (eg. $first-placeholder-name) cannot be used in a method.\nPlease specify an explicit signature, like $*METHODTYPE $method-name ($non-placeholder-names) \{ ... \}");
}

my $code := methodize_block($/, $*DECLARAND, $past, $*SIG_OBJ,
%*SIG_INFO, :yada(is_yada($/)));

Expand Down

0 comments on commit cc93646

Please sign in to comment.