Author: jelmer
Date: 2007-02-19 22:10:23 +0000 (Mon, 19 Feb 2007)
New Revision: 21457

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

Log:
Cope with anonymous nested types in the NDR layer. This doesn't handled 
named nested types yet, as these have to be registered.

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: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]


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-19 
21:37:54 UTC (rev 21456)
+++ branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/NDR.pm        2007-02-19 
22:10:23 UTC (rev 21457)
@@ -257,8 +257,6 @@
 
        push (@$order, {
                TYPE => "DATA",
-               CONVERT_TO => has_property($e, ""),
-               CONVERT_FROM => has_property($e, ""),
                DATA_TYPE => $e->{TYPE},
                IS_DEFERRED => $is_deferred,
                CONTAINS_DEFERRED => can_contain_deferred($e),
@@ -360,12 +358,16 @@
        die("Unknown data type type $dt->{TYPE}");
 }
 
-sub ParseElement($)
+sub ParseElement($$)
 {
-       my $e = shift;
+       my ($e, $pointer_default) = @_;
 
        $e->{TYPE} = expandAlias($e->{TYPE});
 
+       if (ref($e->{TYPE}) eq "HASH") {
+               $e->{TYPE} = ParseType($e->{TYPE}, $pointer_default);
+       }
+
        return {
                NAME => $e->{NAME},
                TYPE => $e->{TYPE},
@@ -379,14 +381,13 @@
 
 sub ParseStruct($$)
 {
-       my ($ndr,$struct) = @_;
+       my ($struct, $pointer_default) = @_;
        my @elements = ();
        my $surrounding = undef;
 
-
        foreach my $x (@{$struct->{ELEMENTS}}) 
        {
-               my $e = ParseElement($x);
+               my $e = ParseElement($x, $pointer_default);
                if ($x != $struct->{ELEMENTS}[-1] and 
                        $e->{LEVELS}[0]->{IS_SURROUNDING}) {
                        fatal($x, "conformant member not at end of struct");
@@ -423,7 +424,7 @@
 
 sub ParseUnion($$)
 {
-       my ($ndr,$e) = @_;
+       my ($e, $pointer_default) = @_;
        my @elements = ();
        my $switch_type = has_property($e, "switch_type");
        unless (defined($switch_type)) { $switch_type = "uint32"; }
@@ -437,7 +438,7 @@
                if ($x->{TYPE} eq "EMPTY") {
                        $t = { TYPE => "EMPTY" };
                } else {
-                       $t = ParseElement($x);
+                       $t = ParseElement($x, $pointer_default);
                }
                if (has_property($x, "default")) {
                        $t->{CASE} = "default";
@@ -463,7 +464,7 @@
 
 sub ParseEnum($$)
 {
-       my ($ndr,$e) = @_;
+       my ($e, $pointer_default) = @_;
 
        return {
                TYPE => "ENUM",
@@ -477,7 +478,7 @@
 
 sub ParseBitmap($$)
 {
-       my ($ndr,$e) = @_;
+       my ($e, $pointer_default) = @_;
 
        return {
                TYPE => "BITMAP",
@@ -491,10 +492,10 @@
 
 sub ParseType($$)
 {
-       my ($ndr, $d) = @_;
+       my ($d, $pointer_default) = @_;
 
        if ($d->{TYPE} eq "STRUCT" or $d->{TYPE} eq "UNION") {
-               CheckPointerTypes($d, $ndr->{PROPERTIES}->{pointer_default});
+               CheckPointerTypes($d, $pointer_default);
        }
 
        my $data = {
@@ -503,20 +504,20 @@
                ENUM => \&ParseEnum,
                BITMAP => \&ParseBitmap,
                TYPEDEF => \&ParseTypedef,
-       }->{$d->{TYPE}}->($ndr, $d);
+       }->{$d->{TYPE}}->($d, $pointer_default);
 
        return $data;
 }
 
 sub ParseTypedef($$)
 {
-       my ($ndr,$d) = @_;
+       my ($d, $pointer_default) = @_;
 
        if (defined($d->{DATA}->{PROPERTIES}) && !defined($d->{PROPERTIES})) {
                $d->{PROPERTIES} = $d->{DATA}->{PROPERTIES};
        }
 
-       my $data = ParseType($ndr, $d->{DATA});
+       my $data = ParseType($d->{DATA}, $pointer_default);
        $data->{ALIGN} = align_type($d->{NAME});
 
        return {
@@ -550,7 +551,7 @@
        }
 
        foreach my $x (@{$d->{ELEMENTS}}) {
-               my $e = ParseElement($x);
+               my $e = ParseElement($x, $ndr->{PROPERTIES}->{pointer_default});
                push (@{$e->{DIRECTION}}, "in") if (has_property($x, "in"));
                push (@{$e->{DIRECTION}}, "out") if (has_property($x, "out"));
 
@@ -618,7 +619,7 @@
                } elsif ($d->{TYPE} eq "CONST") {
                        push (@consts, ParseConst($idl, $d));
                } else {
-                       push (@types, ParseType($idl, $d));
+                       push (@types, ParseType($d, 
$idl->{PROPERTIES}->{pointer_default}));
                }
        }
 

Modified: branches/SAMBA_4_0/source/pidl/tests/ndr.pl
===================================================================
--- branches/SAMBA_4_0/source/pidl/tests/ndr.pl 2007-02-19 21:37:54 UTC (rev 
21456)
+++ branches/SAMBA_4_0/source/pidl/tests/ndr.pl 2007-02-19 22:10:23 UTC (rev 
21457)
@@ -27,15 +27,13 @@
                'IS_DEFERRED' => 0,
                'LEVEL_INDEX' => 0,
                'DATA_TYPE' => 'uint8',
-               'CONVERT_FROM' => undef,
                'CONTAINS_DEFERRED' => 0,
                'TYPE' => 'DATA',
                'IS_SURROUNDING' => 0,
-               'CONVERT_TO' => undef
        }
 ]);
 
-my $ne = ParseElement($e);
+my $ne = ParseElement($e, undef);
 is($ne->{ORIGINAL}, $e);
 is($ne->{NAME}, "v");
 is($ne->{ALIGN}, 1);
@@ -45,11 +43,9 @@
                'IS_DEFERRED' => 0,
                'LEVEL_INDEX' => 0,
                'DATA_TYPE' => 'uint8',
-               'CONVERT_FROM' => undef,
                'CONTAINS_DEFERRED' => 0,
                'TYPE' => 'DATA',
                'IS_SURROUNDING' => 0,
-               'CONVERT_TO' => undef
        }
 ]);
 
@@ -77,11 +73,9 @@
                'IS_DEFERRED' => 1,
                'LEVEL_INDEX' => 1,
                'DATA_TYPE' => 'uint8',
-               'CONVERT_FROM' => undef,
                'CONTAINS_DEFERRED' => 0,
                'TYPE' => 'DATA',
                'IS_SURROUNDING' => 0,
-               'CONVERT_TO' => undef
        }
 ]);
 
@@ -117,11 +111,9 @@
                'IS_DEFERRED' => 1,
                'LEVEL_INDEX' => 2,
                'DATA_TYPE' => 'uint8',
-               'CONVERT_FROM' => undef,
                'CONTAINS_DEFERRED' => 0,
                'TYPE' => 'DATA',
                'IS_SURROUNDING' => 0,
-               'CONVERT_TO' => undef
        }
 ]);
 
@@ -149,11 +141,9 @@
                'IS_DEFERRED' => 1,
                'LEVEL_INDEX' => 1,
                'DATA_TYPE' => 'uint8',
-               'CONVERT_FROM' => undef,
                'CONTAINS_DEFERRED' => 0,
                'TYPE' => 'DATA',
                'IS_SURROUNDING' => 0,
-               'CONVERT_TO' => undef
        }
 ]);
 
@@ -182,11 +172,9 @@
                'IS_DEFERRED' => 0,
                'LEVEL_INDEX' => 1,
                'DATA_TYPE' => 'uint8',
-               'CONVERT_FROM' => undef,
                'CONTAINS_DEFERRED' => 0,
                'TYPE' => 'DATA',
                'IS_SURROUNDING' => 0,
-               'CONVERT_TO' => undef
        }
 ]);
 
@@ -200,7 +188,7 @@
        'PARENT' => { TYPE => 'STRUCT' },
        'LINE' => 42 };
 
-$ne = ParseElement($e);
+$ne = ParseElement($e, undef);
 is($ne->{REPRESENTATION_TYPE}, "bar");
 
 # representation_type
@@ -213,5 +201,5 @@
        'PARENT' => { TYPE => 'STRUCT' },
        'LINE' => 42 };
 
-$ne = ParseElement($e);
+$ne = ParseElement($e, undef);
 is($ne->{REPRESENTATION_TYPE}, "uint8");

Reply via email to