mirror of
https://github.com/samba-team/samba.git
synced 2025-11-09 20:23:51 +03:00
93 lines
2.0 KiB
Perl
93 lines
2.0 KiB
Perl
###################################################
|
|
# Samba4 parser generator for IDL structures
|
|
# Copyright tridge@samba.org 2000-2004
|
|
# Copyright jelmer@samba.org 2004
|
|
# released under the GNU GPL
|
|
|
|
package needed;
|
|
|
|
use strict;
|
|
|
|
# the list of needed functions
|
|
my %needed;
|
|
|
|
sub NeededFunction($)
|
|
{
|
|
my $fn = shift;
|
|
$needed{"pull_$fn->{NAME}"} = 1;
|
|
$needed{"push_$fn->{NAME}"} = 1;
|
|
foreach my $e (@{$fn->{DATA}}) {
|
|
$e->{PARENT} = $fn;
|
|
$needed{"pull_$e->{TYPE}"} = 1;
|
|
$needed{"push_$e->{TYPE}"} = 1;
|
|
}
|
|
}
|
|
|
|
sub NeededTypedef($)
|
|
{
|
|
my $t = shift;
|
|
if (util::has_property($t, "public")) {
|
|
$needed{"pull_$t->{NAME}"} = 1;
|
|
$needed{"push_$t->{NAME}"} = 1;
|
|
}
|
|
|
|
if ($t->{DATA}->{TYPE} eq "STRUCT") {
|
|
if (util::has_property($t, "gensize")) {
|
|
$needed{"ndr_size_$t->{NAME}"} = 1;
|
|
}
|
|
|
|
for my $e (@{$t->{DATA}->{ELEMENTS}}) {
|
|
$e->{PARENT} = $t->{DATA};
|
|
if ($needed{"pull_$t->{NAME}"}) {
|
|
$needed{"pull_$e->{TYPE}"} = 1;
|
|
}
|
|
if ($needed{"push_$t->{NAME}"}) {
|
|
$needed{"push_$e->{TYPE}"} = 1;
|
|
}
|
|
if ($needed{"ndr_size_$t->{NAME}"}) {
|
|
$needed{"ndr_size_$e->{TYPE}"} = 1;
|
|
}
|
|
}
|
|
}
|
|
if ($t->{DATA}->{TYPE} eq "UNION") {
|
|
for my $e (@{$t->{DATA}->{DATA}}) {
|
|
$e->{PARENT} = $t->{DATA};
|
|
if ($e->{TYPE} eq "UNION_ELEMENT") {
|
|
if ($needed{"pull_$t->{NAME}"}) {
|
|
$needed{"pull_$e->{DATA}->{TYPE}"} = 1;
|
|
}
|
|
if ($needed{"push_$t->{NAME}"}) {
|
|
$needed{"push_$e->{DATA}->{TYPE}"} = 1;
|
|
}
|
|
if ($needed{"ndr_size_$t->{NAME}"}) {
|
|
$needed{"ndr_size_$e->{DATA}->{TYPE}"} = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
#####################################################################
|
|
# work out what parse functions are needed
|
|
sub BuildNeeded($)
|
|
{
|
|
my($interface) = shift;
|
|
my($data) = $interface->{DATA};
|
|
foreach my $d (@{$data}) {
|
|
($d->{TYPE} eq "FUNCTION") &&
|
|
NeededFunction($d);
|
|
}
|
|
foreach my $d (reverse @{$data}) {
|
|
($d->{TYPE} eq "TYPEDEF") &&
|
|
NeededTypedef($d);
|
|
}
|
|
}
|
|
|
|
sub is_needed($)
|
|
{
|
|
my $name = shift;
|
|
return $needed{$name};
|
|
}
|
|
|
|
1;
|