X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=generate;h=15e2235d68000c14306eeb477e215c27717cbc92;hb=1b25048c9412df63208906cb00c3572647039c7a;hp=f91cba8145134987c1191cea6660956ad67912b1;hpb=9178f4c13177c6436d08182e1649d8476b4c3b8a;p=secnet.git diff --git a/generate b/generate index f91cba8..15e2235 100755 --- a/generate +++ b/generate @@ -153,6 +153,7 @@ END } our %varref; +our %varref_exp; our ($dir_prefix, $dir_suffix, $dir_name, $var_prefix, $var_prefix_name); @@ -262,6 +263,7 @@ sub process_input_mk ($$$$) { # accurate, since it is only going to be used for advice to the user. my $note_varref = sub { my ($vn,$amp) = @_; + return if $varref_exp{$vn}{$amp}; $varref{$vn}{$amp}{"$f:$."} = 1; }; @@ -294,8 +296,9 @@ sub process_input_mk ($$$$) { next; } elsif (s#^\s*$esc\:local\+global\s+(\S.*)$##) { foreach my $vn (split /\s+/, $1) { - $vn =~ s{^$esc}{}; - $varref{$vn}{NoWarn} = 1; + my $pos = !($vn =~ s{^!}{}); + my $amp = $vn =~ s{^$esc}{}; + $varref_exp{$vn}{!!$amp} = $pos; } next; } elsif (s#^\s*$esc\:(?=(-?)include|macro)##) { @@ -435,6 +438,8 @@ sub process_subtree ($$) { #use Data::Dumper; #print STDERR Dumper(\@_); + local %varref_exp; + my $dir_prefix = dir_prefix($path); # ^ this is the only var which we need before we come back from # the recursion. @@ -526,7 +531,6 @@ sub print_varref_warnings () { foreach my $vn (sort keys %varref) { my $vv = $varref{$vn}; next unless $vv->{''} && $vv->{1}; - next if $vv->{NoWarn}; wrncore 'local+global', "saw both $vn and &$vn" or return; foreach my $amp ('', 1) { printf STDERR " saw %s%s at %s\n",