diff options
Diffstat (limited to 'source4/pidl/lib/Parse/Pidl')
-rw-r--r-- | source4/pidl/lib/Parse/Pidl/Samba4/EJS.pm | 56 |
1 files changed, 28 insertions, 28 deletions
diff --git a/source4/pidl/lib/Parse/Pidl/Samba4/EJS.pm b/source4/pidl/lib/Parse/Pidl/Samba4/EJS.pm index e1a8feb1cd..218b882323 100644 --- a/source4/pidl/lib/Parse/Pidl/Samba4/EJS.pm +++ b/source4/pidl/lib/Parse/Pidl/Samba4/EJS.pm @@ -422,15 +422,13 @@ sub EjsPullFunction($) # on the non-array elements foreach my $e (@{$d->{ELEMENTS}}) { next unless (grep(/in/, @{$e->{DIRECTION}})); - next if (has_property($e, "length_is") || - has_property($e, "size_is")); + next if (has_property($e, "length_is") || has_property($e, "size_is")); EjsPullElementTop($e, $env); } foreach my $e (@{$d->{ELEMENTS}}) { next unless (grep(/in/, @{$e->{DIRECTION}})); - next unless (has_property($e, "length_is") || - has_property($e, "size_is")); + next unless (has_property($e, "length_is") || has_property($e, "size_is")); EjsPullElementTop($e, $env); } @@ -760,7 +758,7 @@ sub EjsInterface($$) foreach my $d (@{$interface->{FUNCTIONS}}) { next if not defined($d->{OPNUM}); - next if Parse::Pidl::Util::has_property($d, "noejs"); + next if has_property($d, "noejs"); EjsPullFunction($d); EjsPushFunction($d); @@ -846,14 +844,17 @@ sub Parse($$) sub NeededFunction($$) { my ($fn,$needed) = @_; + $needed->{"pull_$fn->{NAME}"} = 1; $needed->{"push_$fn->{NAME}"} = 1; - foreach my $e (@{$fn->{ELEMENTS}}) { - if (grep (/in/, @{$e->{DIRECTION}})) { - $needed->{"pull_$e->{TYPE}"} = 1; + + foreach (@{$fn->{ELEMENTS}}) { + next if (has_property($_, "subcontext")); #FIXME: Support subcontexts + if (grep(/in/, @{$_->{DIRECTION}})) { + $needed->{"pull_$_->{TYPE}"} = 1; } - if (grep (/out/, @{$e->{DIRECTION}})) { - $needed->{"push_$e->{TYPE}"} = 1; + if (grep(/out/, @{$_->{DIRECTION}})) { + $needed->{"push_$_->{TYPE}"} = 1; } } } @@ -861,20 +862,22 @@ sub NeededFunction($$) sub NeededTypedef($$) { my ($t,$needed) = @_; - if (Parse::Pidl::Util::has_property($t, "public")) { - $needed->{"pull_$t->{NAME}"} = not Parse::Pidl::Util::has_property($t, "noejs"); - $needed->{"push_$t->{NAME}"} = not Parse::Pidl::Util::has_property($t, "noejs"); - } - if ($t->{DATA}->{TYPE} ne "STRUCT" && - $t->{DATA}->{TYPE} ne "UNION") { - return; + + if (has_property($t, "public")) { + $needed->{"pull_$t->{NAME}"} = not has_property($t, "noejs"); + $needed->{"push_$t->{NAME}"} = not has_property($t, "noejs"); } - for my $e (@{$t->{DATA}->{ELEMENTS}}) { - if ($needed->{"pull_$t->{NAME}"}) { - $needed->{"pull_$e->{TYPE}"} = 1; + + return if (($t->{DATA}->{TYPE} ne "STRUCT") and + ($t->{DATA}->{TYPE} ne "UNION")); + + foreach (@{$t->{DATA}->{ELEMENTS}}) { + next if (has_property($_, "subcontext")); #FIXME: Support subcontexts + unless (defined($needed->{"pull_$_->{TYPE}"})) { + $needed->{"pull_$_->{TYPE}"} = $needed->{"pull_$t->{NAME}"}; } - if ($needed->{"push_$t->{NAME}"}) { - $needed->{"push_$e->{TYPE}"} = 1; + unless (defined($needed->{"push_$_->{TYPE}"})) { + $needed->{"push_$_->{TYPE}"} = $needed->{"push_$t->{NAME}"}; } } } @@ -884,12 +887,9 @@ sub NeededTypedef($$) sub NeededInterface($$) { my ($interface,$needed) = @_; - foreach my $d (@{$interface->{FUNCTIONS}}) { - NeededFunction($d, $needed); - } - foreach my $d (reverse @{$interface->{TYPES}}) { - NeededTypedef($d, $needed); - } + + NeededFunction($_, $needed) foreach (@{$interface->{FUNCTIONS}}); + NeededTypedef($_, $needed) foreach (reverse @{$interface->{TYPES}}); } 1; |