+ local $ddbl;
+ my @nest = (['']);
+ my $evalcall_brackets;
+
+ my $push_nest = sub {
+ my ($nk, $nndbl, $what) = @_;
+ unshift @nest, [ $nk, $ddbl, $what, $. ];
+ $ddbl = $nndbl;
+ };
+ my $pop_nest = sub {
+ my ($nk) = @_;
+ err "unexpectedly closed $nk in middle of $nest[0][0] ($nest[0][2])"
+ unless $nest[0][0] eq $nk;
+ $ddbl = (shift @nest)[1];
+ };
+
+ # Our detection of variable settings does not have to be completely
+ # accurate, since it is only going to be used for advice to the user.
+ my $note_varref = sub {
+ my ($vn,$amp) = @_;
+ $varref{$vn}{$amp}{"$f:$."} = 1;
+ };
+