r14691: Fix printing elements with represent_as set
authorJelmer Vernooij <jelmer@samba.org>
Fri, 24 Mar 2006 14:13:02 +0000 (14:13 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:59:09 +0000 (13:59 -0500)
source/pidl/lib/Parse/Pidl/NDR.pm
source/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm

index 1d5059bfb59a8d7a52f2ce3ec4a2e612bd52fd5d..c8a971788922da7f518dfad7d32cf7015a91b418 100644 (file)
@@ -917,6 +917,10 @@ sub ValidElement($)
                fatal($e, el_name($e) . " : represent_as() and transmit_as() can not be used on the same element");
        }
 
+       if (has_property($e, "represent_as") and has_property($e, "value")) {
+               fatal($e, el_name($e) . " : represent_as() and value() can not be used on the same element");
+       }
+
        if (defined (has_property($e, "subcontext_size")) and not defined(has_property($e, "subcontext"))) {
                fatal($e, el_name($e) . " : subcontext_size() on non-subcontext element");
        }
index d9666a20fe914706c4016f805ef3ac93886d0913..e3058665f229e376bfb32fdd70d37e0f3780816f 100644 (file)
@@ -729,9 +729,15 @@ sub ParseElementPrint($$$)
 {
        my($e,$var_name,$env) = @_;
 
-       $var_name = append_prefix($e, $var_name);
        return if (has_property($e, "noprint"));
 
+       if ($e->{REPRESENTATION_TYPE}) {
+               pidl "ndr_print_$e->{REPRESENTATION_TYPE}(ndr, \"$e->{NAME}\", $var_name);";
+               return;
+       }
+
+       $var_name = append_prefix($e, $var_name);
+
        if (my $value = has_property($e, "value")) {
                $var_name = "(ndr->flags & LIBNDR_PRINT_SET_VALUES)?" . ParseExpr($value,$env) . ":$var_name";
        }
@@ -1411,18 +1417,15 @@ sub ParseStructPrint($$)
 
        EnvSubstituteValue($env, $struct);
 
-       foreach my $e (@{$struct->{ELEMENTS}}) {
-               DeclareArrayVariables($e);
-       }
+       DeclareArrayVariables($_) foreach (@{$struct->{ELEMENTS}});
 
        pidl "ndr_print_struct(ndr, name, \"$name\");";
 
        start_flags($struct);
 
        pidl "ndr->depth++;";
-       foreach my $e (@{$struct->{ELEMENTS}}) {
-               ParseElementPrint($e, "r->$e->{NAME}", $env);
-       }
+       
+       ParseElementPrint($_, "r->$_->{NAME}", $env) foreach (@{$struct->{ELEMENTS}});
        pidl "ndr->depth--;";
 
        end_flags($struct);