svn commit: samba r25166 - in branches/SAMBA_4_0: .
source/pidl/lib/Parse/Pidl source/pidl/tests
jelmer at samba.org
jelmer at samba.org
Fri Sep 14 18:06:54 GMT 2007
Author: jelmer
Date: 2007-09-14 18:06:51 +0000 (Fri, 14 Sep 2007)
New Revision: 25166
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=25166
Log:
Simplify can_contain_deferred and add tests for it.
Modified:
branches/SAMBA_4_0/
branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/NDR.pm
branches/SAMBA_4_0/source/pidl/tests/ndr.pl
Changeset:
Property changes on: branches/SAMBA_4_0
___________________________________________________________________
Name: bzr:revision-info
...skipped...
Name: bzr:revision-id:v3-trunk0
...skipped...
Modified: branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/NDR.pm
===================================================================
--- branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/NDR.pm 2007-09-14 17:42:10 UTC (rev 25165)
+++ branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/NDR.pm 2007-09-14 18:06:51 UTC (rev 25166)
@@ -35,7 +35,7 @@
$VERSION = '0.01';
@ISA = qw(Exporter);
@EXPORT = qw(GetPrevLevel GetNextLevel ContainsDeferred ContainsString);
- at EXPORT_OK = qw(GetElementLevelTable ParseElement ValidElement align_type mapToScalar ParseType);
+ at EXPORT_OK = qw(GetElementLevelTable ParseElement ValidElement align_type mapToScalar ParseType can_contain_deferred);
use strict;
use Parse::Pidl qw(warning fatal);
@@ -264,7 +264,7 @@
TYPE => "DATA",
DATA_TYPE => $e->{TYPE},
IS_DEFERRED => $is_deferred,
- CONTAINS_DEFERRED => can_contain_deferred($e),
+ CONTAINS_DEFERRED => can_contain_deferred($e->{TYPE}),
IS_SURROUNDING => 0 #FIXME
});
@@ -279,29 +279,25 @@
sub can_contain_deferred($)
{
sub can_contain_deferred($);
- my $e = shift;
+ my ($type) = @_;
- return 0 if (Parse::Pidl::Typelist::is_scalar($e->{TYPE}));
- return 1 unless (hasType($e->{TYPE})); # assume the worst
+ return 1 unless (hasType($type)); # assume the worst
- my $type = getType($e->{TYPE});
+ $type = getType($type);
+ return 0 if (Parse::Pidl::Typelist::is_scalar($type));
+
return 1 if ($type->{TYPE} eq "DECLARE"); # assume the worst
if ($type->{TYPE} eq "TYPEDEF") {
- return 0 unless defined($type->{DATA}->{ELEMENTS});
+ return can_contain_deferred($type->{DATA});
+ }
- foreach my $x (@{$type->{DATA}->{ELEMENTS}}) {
- return 1 if ($x->{POINTERS});
- return 1 if (can_contain_deferred ($x));
- }
- } else {
- return 0 unless defined($type->{ELEMENTS});
+ return 0 unless defined($type->{ELEMENTS});
- foreach my $x (@{$type->{ELEMENTS}}) {
- return 1 if ($x->{POINTERS});
- return 1 if (can_contain_deferred ($x));
- }
+ foreach my $x (@{$type->{ELEMENTS}}) {
+ return 1 if ($x->{POINTERS});
+ return 1 if (can_contain_deferred ($x));
}
return 0;
Modified: branches/SAMBA_4_0/source/pidl/tests/ndr.pl
===================================================================
--- branches/SAMBA_4_0/source/pidl/tests/ndr.pl 2007-09-14 17:42:10 UTC (rev 25165)
+++ branches/SAMBA_4_0/source/pidl/tests/ndr.pl 2007-09-14 18:06:51 UTC (rev 25166)
@@ -4,12 +4,12 @@
use strict;
use warnings;
-use Test::More tests => 27;
+use Test::More tests => 33;
use FindBin qw($RealBin);
use lib "$RealBin";
use Util;
use Parse::Pidl::Util qw(MyDumper);
-use Parse::Pidl::NDR qw(GetElementLevelTable ParseElement align_type mapToScalar ParseType);
+use Parse::Pidl::NDR qw(GetElementLevelTable ParseElement align_type mapToScalar ParseType can_contain_deferred);
# Case 1
@@ -253,3 +253,16 @@
}
};
is_deeply(ParseType($t->{ORIGINAL}, "ref"), $t);
+
+ok(not can_contain_deferred("uint32"));
+ok(can_contain_deferred("some_unknown_type"));
+ok(can_contain_deferred({ TYPE => "STRUCT",
+ ELEMENTS => [ { TYPE => "uint32", POINTERS => 40 } ]}));
+ok(can_contain_deferred({ TYPE => "TYPEDEF",
+ DATA => { TYPE => "STRUCT",
+ ELEMENTS => [ { TYPE => "uint32", POINTERS => 40 } ]}}));
+ok(not can_contain_deferred({ TYPE => "STRUCT",
+ ELEMENTS => [ { TYPE => "uint32" } ]}));
+ok(not can_contain_deferred({ TYPE => "TYPEDEF",
+ DATA => { TYPE => "STRUCT",
+ ELEMENTS => [ { TYPE => "uint32" } ]}}));
More information about the samba-cvs
mailing list