Track `$what' which is a kind of example for the error message.
Use it in error messages.
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
my @nest = (['']);
my $push_nest = sub {
my @nest = (['']);
my $push_nest = sub {
- my ($nk, $nndbl) = @_;
- unshift @nest, [ $nk, $ddbl ];
+ my ($nk, $nndbl, $what) = @_;
+ unshift @nest, [ $nk, $ddbl, $what, $. ];
$ddbl = $nndbl;
};
my $pop_nest = sub {
my ($nk) = @_;
$ddbl = $nndbl;
};
my $pop_nest = sub {
my ($nk) = @_;
- die unless $nest[0][0] eq $nk;
- # ^ xxx need better message
+ err "unexpectedly closed $nk in middle of $nest[0][0] ($nest[0][2])"
+ unless $nest[0][0] eq $nk;
$ddbl = (shift @nest)[1];
};
$ddbl = (shift @nest)[1];
};
elsif (s{^\$\{}{}) {
err 'macro invocation cannot be re-$-doubled' if $ddbl;
od '${eval ${call ';
elsif (s{^\$\{}{}) {
err 'macro invocation cannot be re-$-doubled' if $ddbl;
od '${eval ${call ';
- $push_nest->('Eval',1);
+ $push_nest->('Eval',1, '&${...}');
} elsif (s{^([~^]?)(?=[ \t])}{}) {
my $prefix = $pfxmap{$1} // die "internal error ($1?)";
my $after='';
} elsif (s{^([~^]?)(?=[ \t])}{}) {
my $prefix = $pfxmap{$1} // die "internal error ($1?)";
my $after='';
- die "unclosed $nest[0][0]" if $nest[0][0];
+ die "subdirmk: $f:$nest[0][3]: unclosed $nest[0][0] ($nest[0][2])\n"
+ if $nest[0][0];
$input->error and die "read $f: $!\n";
close $input or die "close $f: $!\n";
}
$input->error and die "read $f: $!\n";
close $input or die "close $f: $!\n";
}