svn commit: samba r24518 - in
branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl: .
metze at samba.org
metze at samba.org
Fri Aug 17 13:01:51 GMT 2007
Author: metze
Date: 2007-08-17 13:01:51 +0000 (Fri, 17 Aug 2007)
New Revision: 24518
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=24518
Log:
get rid of using ->{ORIGINAL} and move stuff
into subfunctions
metze
Modified:
branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba4.pm
Changeset:
Modified: branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba4.pm
===================================================================
--- branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba4.pm 2007-08-17 12:55:47 UTC (rev 24517)
+++ branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba4.pm 2007-08-17 13:01:51 UTC (rev 24518)
@@ -10,6 +10,7 @@
@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 @@
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);
+ $res .= ElementStars($e);
}
- $ret.=$element->{NAME};
- foreach (@{$element->{ORIGINAL}->{ARRAY_LEN}}) {
- next unless (is_constant($_) and not has_property($element, "charset"));
- $ret.="[$_]";
- }
+ $res .= $e->{NAME};
+ $res .= ArrayBrackets($e);
- return $ret;
+ return $res;
}
1;
More information about the samba-cvs
mailing list