From: Stefan Metzmacher Date: Sat, 18 Sep 2010 17:40:52 +0000 (+0200) Subject: pidl/NDR: give anonymous structs and unions a name X-Git-Url: http://git.samba.org/?p=metze%2Fsamba%2Fwip.git;a=commitdiff_plain;h=4cc9af9438d53c8d9b483f16f735a5b870b60814 pidl/NDR: give anonymous structs and unions a name metze --- diff --git a/pidl/lib/Parse/Pidl/NDR.pm b/pidl/lib/Parse/Pidl/NDR.pm index 003156e3a11e..60428c99a7ee 100644 --- a/pidl/lib/Parse/Pidl/NDR.pm +++ b/pidl/lib/Parse/Pidl/NDR.pm @@ -521,15 +521,39 @@ sub ParseElement($$$) }; } +sub ParseName($) +{ + my ($e) = @_; + my $name = $e->{NAME}; + + return $name if defined($name); + + my $parent = $e->{PARENT}; + my $parent_name = undef; + + while (not defined($parent_name)) { + last unless defined($parent); + + $parent_name = $parent->{NAME}; + $parent = $parent->{PARENT}; + } + + $parent_name = "global" unless defined($parent_name); + $name = "__pidl_".$e->{TYPE}."_".$parent_name."_".$e->{LINE}; + + return $name; +} + sub ParseStruct($$$) { my ($struct, $pointer_default, $ms_union) = @_; my @elements = (); my $surrounding = undef; + my $name = ParseName($struct); return { TYPE => "STRUCT", - NAME => $struct->{NAME}, + NAME => $name, SURROUNDING_ELEMENT => undef, ELEMENTS => undef, PROPERTIES => $struct->{PROPERTIES}, @@ -560,14 +584,11 @@ sub ParseStruct($$$) $surrounding = $struct->{ELEMENTS}[-1]; } - my $align = undef; - if ($struct->{NAME}) { - $align = align_type($struct->{NAME}); - } - + my $align = align_type($name); + return { TYPE => "STRUCT", - NAME => $struct->{NAME}, + NAME => $name, SURROUNDING_ELEMENT => $surrounding, ELEMENTS => \@elements, PROPERTIES => $struct->{PROPERTIES}, @@ -586,10 +607,11 @@ sub ParseUnion($$) my $switch_type = has_property($e, "switch_type"); unless (defined($switch_type)) { $switch_type = "uint32"; } if (has_property($e, "nodiscriminant")) { $switch_type = undef; } + my $name = ParseName($e); return { TYPE => "UNION", - NAME => $e->{NAME}, + NAME => $name, SWITCH_TYPE => $switch_type, ELEMENTS => undef, PROPERTIES => $e->{PROPERTIES}, @@ -620,14 +642,11 @@ sub ParseUnion($$) push @elements, $t; } - my $align = undef; - if ($e->{NAME}) { - $align = align_type($e->{NAME}); - } + my $align = align_type($name); return { TYPE => "UNION", - NAME => $e->{NAME}, + NAME => $name, SWITCH_TYPE => $switch_type, ELEMENTS => \@elements, PROPERTIES => $e->{PROPERTIES}, @@ -641,10 +660,11 @@ sub ParseUnion($$) sub ParseEnum($$) { my ($e, $pointer_default, $ms_union) = @_; + my $name = ParseName($e); return { TYPE => "ENUM", - NAME => $e->{NAME}, + NAME => $name, BASE_TYPE => Parse::Pidl::Typelist::enum_type_fn($e), ELEMENTS => $e->{ELEMENTS}, PROPERTIES => $e->{PROPERTIES}, @@ -655,10 +675,11 @@ sub ParseEnum($$) sub ParseBitmap($$$) { my ($e, $pointer_default, $ms_union) = @_; + my $name = ParseName($e); return { TYPE => "BITMAP", - NAME => $e->{NAME}, + NAME => $name, BASE_TYPE => Parse::Pidl::Typelist::bitmap_type_fn($e), ELEMENTS => $e->{ELEMENTS}, PROPERTIES => $e->{PROPERTIES},