pidl: Don't generate variables declarations for pointless array counters.
authorTim Prouty <tprouty@samba.org>
Tue, 3 Mar 2009 21:04:14 +0000 (13:04 -0800)
committerTim Prouty <tprouty@samba.org>
Thu, 5 Mar 2009 02:32:13 +0000 (18:32 -0800)
Code isn't generated to iterate over arrays of length 0, but the
variable declarations still are.  The result is 'unused variable'
warnings. This only seems to be happening in one place right now, so I
targeted the fix to this case, but refactoring could be done to make
all variable declarations do this zero length check.  Making it the
default would be a much more invasive fix.

Jelmer, please check!

pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm

index 34aebc7f0fb112265df27386224f101ff13ec7b5..7ce9708e148d31a21fa1c3a6aa7fdd958e1d5923 100644 (file)
@@ -1256,7 +1256,7 @@ sub ParseStructPush($$$$)
 
        EnvSubstituteValue($env, $struct);
 
 
        EnvSubstituteValue($env, $struct);
 
-       $self->DeclareArrayVariables($_) foreach (@{$struct->{ELEMENTS}});
+       $self->DeclareArrayVariablesNoZero($_, $env) foreach (@{$struct->{ELEMENTS}});
 
        $self->start_flags($struct, $ndr);
 
 
        $self->start_flags($struct, $ndr);
 
@@ -1481,6 +1481,24 @@ sub DeclareArrayVariables($$)
        }
 }
 
        }
 }
 
+sub DeclareArrayVariablesNoZero($$$)
+{
+       my ($self,$e,$env) = @_;
+
+       foreach my $l (@{$e->{LEVELS}}) {
+               next if has_fast_array($e,$l);
+               next if is_charset_array($e,$l);
+               if ($l->{TYPE} eq "ARRAY") {
+                   my $length = ParseExpr($l->{LENGTH_IS}, $env, $e->{ORIGINAL});
+                   if ($length eq "0") {
+                       warning($e->{ORIGINAL}, "pointless array cntr: 'cntr_$e->{NAME}_$l->{LEVEL_INDEX}': length=$length");
+                   } else {
+                       $self->pidl("uint32_t cntr_$e->{NAME}_$l->{LEVEL_INDEX};");
+                   }
+               }
+       }
+}
+
 sub DeclareMemCtxVariables($$)
 {
        my ($self,$e) = @_;
 sub DeclareMemCtxVariables($$)
 {
        my ($self,$e) = @_;