Author: jelmer
Date: 2007-02-28 00:19:57 +0000 (Wed, 28 Feb 2007)
New Revision: 21573

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=21573

Log:
Remove more code that assumed all types are typedefs.
Modified:
   branches/SAMBA_4_0/
   branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/NDR.pm
   branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Typelist.pm
   branches/SAMBA_4_0/source/pidl/tests/ndr.pl
   branches/SAMBA_4_0/source/pidl/tests/typelist.pl


Changeset:

Property changes on: branches/SAMBA_4_0
___________________________________________________________________
Name: bzr:merge
   - [EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]

   + [EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]


Modified: branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/NDR.pm
===================================================================
--- branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/NDR.pm        2007-02-27 
23:47:07 UTC (rev 21572)
+++ branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/NDR.pm        2007-02-28 
00:19:57 UTC (rev 21573)
@@ -35,7 +35,7 @@
 $VERSION = '0.01';
 @ISA = qw(Exporter);
 @EXPORT = qw(GetPrevLevel GetNextLevel ContainsDeferred ContainsString);
[EMAIL PROTECTED] = qw(GetElementLevelTable ParseElement ValidElement 
align_type);
[EMAIL PROTECTED] = qw(GetElementLevelTable ParseElement ValidElement 
align_type mapToScalar);
 
 use strict;
 use Parse::Pidl qw(warning fatal);
@@ -880,17 +880,19 @@
 
 sub mapToScalar($)
 {
+       sub mapToScalar($);
        my $t = shift;
+       return $t->{NAME} if (ref($t) eq "HASH" and $t->{TYPE} eq "SCALAR");
        my $ti = getType($t);
 
        if (not defined ($ti)) {
                return undef;
-       } elsif ($ti->{DATA}->{TYPE} eq "ENUM") {
-               return Parse::Pidl::Typelist::enum_type_fn($ti->{DATA});
-       } elsif ($ti->{DATA}->{TYPE} eq "BITMAP") {
-               return Parse::Pidl::Typelist::enum_type_fn($ti->{DATA});
-       } elsif ($ti->{DATA}->{TYPE} eq "SCALAR") {
-               return $t;
+       } elsif ($ti->{TYPE} eq "TYPEDEF") {
+               return mapToScalar($ti->{DATA});
+       } elsif ($ti->{TYPE} eq "ENUM") {
+               return Parse::Pidl::Typelist::enum_type_fn($ti);
+       } elsif ($ti->{TYPE} eq "BITMAP") {
+               return Parse::Pidl::Typelist::bitmap_type_fn($ti);
        }
 
        return undef;

Modified: branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Typelist.pm
===================================================================
--- branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Typelist.pm   2007-02-27 
23:47:07 UTC (rev 21572)
+++ branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Typelist.pm   2007-02-28 
00:19:57 UTC (rev 21573)
@@ -107,8 +107,13 @@
 sub typeIs($$)
 {
        my ($t,$tt) = @_;
-
-       return 1 if (hasType($t) and getType($t)->{DATA}->{TYPE} eq $tt);
+       
+       if (ref($t) eq "HASH") {
+               return 1 if ($t->{TYPE} eq $tt);
+               return 0;
+       }
+       return 1 if (hasType($t) and getType($t)->{TYPE} eq "TYPEDEF" and 
+                        getType($t)->{DATA}->{TYPE} eq $tt);
        return 0;
 }
 
@@ -116,6 +121,7 @@
 {
        my $t = shift;
        if (ref($t) eq "HASH") {
+               return 1 if (not defined($t->{NAME}));
                return 1 if (defined($types{$t->{NAME}}) and 
                        $types{$t->{NAME}}->{TYPE} eq $t->{TYPE});
                return 0;
@@ -128,10 +134,12 @@
 {
        my $type = shift;
 
-       return 0 unless(hasType($type));
+       return 1 if (ref($type) eq "HASH" and $type->{TYPE} eq "SCALAR");
 
-       if (my $dt = getType($type)->{DATA}->{TYPE}) {
-               return 1 if ($dt eq "SCALAR" or $dt eq "ENUM" or $dt eq 
"BITMAP");
+       if (my $dt = getType($type)) {
+               return is_scalar($dt->{DATA}) if ($dt->{TYPE} eq "TYPEDEF");
+               return 1 if ($dt->{TYPE} eq "SCALAR" or $dt->{TYPE} eq "ENUM" 
or 
+                                $dt->{TYPE} eq "BITMAP");
        }
 
        return 0;

Modified: branches/SAMBA_4_0/source/pidl/tests/ndr.pl
===================================================================
--- branches/SAMBA_4_0/source/pidl/tests/ndr.pl 2007-02-27 23:47:07 UTC (rev 
21572)
+++ branches/SAMBA_4_0/source/pidl/tests/ndr.pl 2007-02-28 00:19:57 UTC (rev 
21573)
@@ -4,12 +4,12 @@
 use strict;
 use warnings;
 
-use Test::More tests => 17;
+use Test::More tests => 22;
 use FindBin qw($RealBin);
 use lib "$RealBin";
 use Util;
 use Parse::Pidl::Util qw(MyDumper);
-use Parse::Pidl::NDR qw(GetElementLevelTable ParseElement align_type);
+use Parse::Pidl::NDR qw(GetElementLevelTable ParseElement align_type 
mapToScalar);
 
 # Case 1
 
@@ -211,3 +211,10 @@
                            ELEMENTS => [ { TYPE => "uint16" } ] }), 4);
 is(align_type({ TYPE => "STRUCT", "NAME" => "bla", 
                            ELEMENTS => [ { TYPE => "uint8" } ] }), 4);
+
+is(mapToScalar("someverymuchnotexistingtype"), undef);
+is(mapToScalar("uint32"), "uint32");
+is(mapToScalar({TYPE => "ENUM", PARENT => { PROPERTIES => { enum8bit => 1 } } 
}), "uint8");
+is(mapToScalar({TYPE => "BITMAP", PROPERTIES => { bitmap64bit => 1 } }),
+       "hyper");
+is(mapToScalar({TYPE => "TYPEDEF", DATA => {TYPE => "ENUM", PARENT => { 
PROPERTIES => { enum8bit => 1 } } }}), "uint8");

Modified: branches/SAMBA_4_0/source/pidl/tests/typelist.pl
===================================================================
--- branches/SAMBA_4_0/source/pidl/tests/typelist.pl    2007-02-27 23:47:07 UTC 
(rev 21572)
+++ branches/SAMBA_4_0/source/pidl/tests/typelist.pl    2007-02-28 00:19:57 UTC 
(rev 21573)
@@ -4,7 +4,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 38;
+use Test::More tests => 50;
 use FindBin qw($RealBin);
 use lib "$RealBin";
 use Util;
@@ -34,14 +34,27 @@
                DATA => { NAME => "uint16", TYPE => "SCALAR" }});
 
 is(0, typeIs("someUnknownType", "ENUM"));
+is(0, typeIs("foo", "ENUM"));
+addType({NAME => "mytypedef", TYPE => "TYPEDEF", DATA => { TYPE => "ENUM" }});
+is(1, typeIs("mytypedef", "ENUM"));
+is(0, typeIs("mytypedef", "BITMAP"));
+is(1, typeIs({ TYPE => "ENUM"}, "ENUM"));
+is(0, typeIs({ TYPE => "BITMAP"}, "ENUM"));
+is(1, typeIs("uint32", "SCALAR"));
+is(0, typeIs("uint32", "ENUM"));
 
 is(1, hasType("foo"));
 is(0, hasType("nonexistant"));
 is(0, hasType({TYPE => "ENUM", NAME => "someUnknownType"}));
 is(1, hasType({TYPE => "ENUM", NAME => "foo"}));
+is(1, hasType({TYPE => "ENUM"}));
+is(1, hasType({TYPE => "STRUCT"}));
 
 is(1, is_scalar("uint32"));
 is(0, is_scalar("nonexistant"));
+is(1, is_scalar({TYPE => "ENUM"}));
+is(0, is_scalar({TYPE => "STRUCT"}));
+is(1, is_scalar({TYPE => "TYPEDEF", DATA => {TYPE => "ENUM" }}));
 
 is(1, scalar_is_reference("string"));
 is(0, scalar_is_reference("uint32"));

Reply via email to