1
0
mirror of https://github.com/samba-team/samba.git synced 2025-11-23 20:23:50 +03:00

r24518: get rid of using ->{ORIGINAL} and move stuff

into subfunctions

metze
This commit is contained in:
Stefan Metzmacher
2007-08-17 13:01:51 +00:00
committed by Gerald (Jerry) Carter
parent ee92d47b53
commit ff7fa11e70

View File

@@ -10,6 +10,7 @@ require Exporter;
@EXPORT = qw(is_intree choose_header DeclLong);
use Parse::Pidl::Util qw(has_property is_constant);
use Parse::Pidl::NDR qw(GetNextLevel);
use Parse::Pidl::Typelist qw(mapTypeName scalar_is_reference);
use strict;
@@ -34,40 +35,84 @@ sub choose_header($$)
return "#include <$out>";
}
sub NumStars($;$)
{
my ($e, $d) = @_;
$d = 0 unless defined($d);
my $n = 0;
foreach my $l (@{$e->{LEVELS}}) {
next unless ($l->{TYPE} eq "POINTER");
my $nl = GetNextLevel($e, $l);
next if (defined($nl) and $nl->{TYPE} eq "ARRAY");
$n++;
}
if ($n >= 1) {
$n-- if (scalar_is_reference($e->{TYPE}));
}
foreach my $l (@{$e->{LEVELS}}) {
next unless ($l->{TYPE} eq "ARRAY");
next if ($l->{IS_FIXED}) and not has_property($e, "charset");
$n++;
}
fatal($e->{ORIGINAL}, "Too few pointers $n < $d") if ($n < $d);
$n -= $d;
return $n;
}
sub ElementStars($;$)
{
my ($e, $d) = @_;
my $res = "";
my $n = 0;
$n = NumStars($e, $d);
$res .= "*" foreach (1..$n);
return $res;
}
sub ArrayBrackets($)
{
my ($e) = @_;
my $res = "";
foreach my $l (@{$e->{LEVELS}}) {
next unless ($l->{TYPE} eq "ARRAY");
next unless ($l->{IS_FIXED}) and not has_property($e, "charset");
$res .= "[$l->{SIZE_IS}]";
}
return $res;
}
sub DeclLong($)
{
my($element) = shift;
my $ret = "";
my ($e, $d) = shift;
my $res = "";
if (has_property($element, "represent_as")) {
$ret.=mapTypeName($element->{PROPERTIES}->{represent_as})." ";
if (has_property($e, "represent_as")) {
$res .= mapTypeName($e->{PROPERTIES}->{represent_as})." ";
} else {
if (has_property($element, "charset")) {
$ret.="const char";
if (has_property($e, "charset")) {
$res .= "const char ";
} else {
$ret.=mapTypeName($element->{TYPE});
$res .= mapTypeName($e->{TYPE})." ";
}
$ret.=" ";
my $numstar = $element->{ORIGINAL}->{POINTERS};
if ($numstar >= 1) {
$numstar-- if scalar_is_reference($element->{TYPE});
}
foreach (@{$element->{ORIGINAL}->{ARRAY_LEN}})
{
next if is_constant($_) and
not has_property($element, "charset");
$numstar++;
}
$ret.="*" foreach (1..$numstar);
}
$ret.=$element->{NAME};
foreach (@{$element->{ORIGINAL}->{ARRAY_LEN}}) {
next unless (is_constant($_) and not has_property($element, "charset"));
$ret.="[$_]";
$res .= ElementStars($e);
}
$res .= $e->{NAME};
$res .= ArrayBrackets($e);
return $ret;
return $res;
}
1;