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