r2933: Only pull a union once when it occurs in a subcontext
authorJelmer Vernooij <jelmer@samba.org>
Tue, 12 Oct 2004 10:32:54 +0000 (10:32 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:59:49 +0000 (12:59 -0500)
source/build/pidl/parser.pm

index 621b12aa620e9c417e604c891162990ee63138a4..edecc24284911dd9265b74b91edbf6042a27bcc3 100644 (file)
@@ -454,7 +454,9 @@ sub ParseElementPullSwitch($$$$)
 
        my $sub_size = util::has_property($e, "subcontext");
        if (defined $sub_size) {
-               pidl "\tNDR_CHECK(ndr_pull_subcontext_union_fn(ndr, $sub_size, $switch_var, $cprefix$var_prefix$e->{NAME}, (ndr_pull_union_fn_t) ndr_pull_$e->{TYPE}));\n";
+               pidl "\tif (($ndr_flags) & NDR_SCALARS) {\n";
+               pidl "\t\tNDR_CHECK(ndr_pull_subcontext_union_fn(ndr, $sub_size, $switch_var, $cprefix$var_prefix$e->{NAME}, (ndr_pull_union_fn_t) ndr_pull_$e->{TYPE}));\n";
+               pidl "\t}\n";
        } else {
                pidl "\tNDR_CHECK(ndr_pull_$e->{TYPE}(ndr, $ndr_flags, $switch_var, $cprefix$var_prefix$e->{NAME}));\n";
        }
@@ -484,7 +486,9 @@ sub ParseElementPushSwitch($$$$)
 
        my $sub_size = util::has_property($e, "subcontext");
        if (defined $sub_size) {
-               pidl "\tNDR_CHECK(ndr_push_subcontext_union_fn(ndr, $sub_size, $switch_var, $cprefix$var_prefix$e->{NAME}, (ndr_push_union_fn_t) ndr_push_$e->{TYPE}));\n";
+               pidl "\tif(($ndr_flags) & NDR_SCALARS) {\n";
+               pidl "\t\tNDR_CHECK(ndr_push_subcontext_union_fn(ndr, $sub_size, $switch_var, $cprefix$var_prefix$e->{NAME}, (ndr_push_union_fn_t) ndr_push_$e->{TYPE}));\n";
+               pidl "\t}\n";
        } else {
                pidl "\tNDR_CHECK(ndr_push_$e->{TYPE}(ndr, $ndr_flags, $switch_var, $cprefix$var_prefix$e->{NAME}));\n";
        }