git.samba.org
/
metze
/
samba
/
wip.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
8fa7ac7
)
pidl/NDR: give anonymous structs and unions a name
author
Stefan Metzmacher
<metze@samba.org>
Sat, 18 Sep 2010 17:40:52 +0000
(19:40 +0200)
committer
Stefan Metzmacher
<metze@samba.org>
Tue, 4 Jun 2019 11:14:55 +0000
(13:14 +0200)
metze
pidl/lib/Parse/Pidl/NDR.pm
patch
|
blob
|
history
diff --git
a/pidl/lib/Parse/Pidl/NDR.pm
b/pidl/lib/Parse/Pidl/NDR.pm
index 003156e3a11ef7efce7195afe0cb4e12c4ba183d..60428c99a7ee541499ff2cf3ed362ac492bdb6be 100644
(file)
--- 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;
sub ParseStruct($$$)
{
my ($struct, $pointer_default, $ms_union) = @_;
my @elements = ();
my $surrounding = undef;
+ my $name = ParseName($struct);
return {
TYPE => "STRUCT",
return {
TYPE => "STRUCT",
- NAME => $
struct->{NAME}
,
+ NAME => $
name
,
SURROUNDING_ELEMENT => undef,
ELEMENTS => undef,
PROPERTIES => $struct->{PROPERTIES},
SURROUNDING_ELEMENT => undef,
ELEMENTS => undef,
PROPERTIES => $struct->{PROPERTIES},
@@
-560,14
+584,11
@@
sub ParseStruct($$$)
$surrounding = $struct->{ELEMENTS}[-1];
}
$surrounding = $struct->{ELEMENTS}[-1];
}
- my $align = undef;
- if ($struct->{NAME}) {
- $align = align_type($struct->{NAME});
- }
-
+ my $align = align_type($name);
+
return {
TYPE => "STRUCT",
return {
TYPE => "STRUCT",
- NAME => $
struct->{NAME}
,
+ NAME => $
name
,
SURROUNDING_ELEMENT => $surrounding,
ELEMENTS => \@elements,
PROPERTIES => $struct->{PROPERTIES},
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 $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",
return {
TYPE => "UNION",
- NAME => $
e->{NAME}
,
+ NAME => $
name
,
SWITCH_TYPE => $switch_type,
ELEMENTS => undef,
PROPERTIES => $e->{PROPERTIES},
SWITCH_TYPE => $switch_type,
ELEMENTS => undef,
PROPERTIES => $e->{PROPERTIES},
@@
-620,14
+642,11
@@
sub ParseUnion($$)
push @elements, $t;
}
push @elements, $t;
}
- my $align = undef;
- if ($e->{NAME}) {
- $align = align_type($e->{NAME});
- }
+ my $align = align_type($name);
return {
TYPE => "UNION",
return {
TYPE => "UNION",
- NAME => $
e->{NAME}
,
+ NAME => $
name
,
SWITCH_TYPE => $switch_type,
ELEMENTS => \@elements,
PROPERTIES => $e->{PROPERTIES},
SWITCH_TYPE => $switch_type,
ELEMENTS => \@elements,
PROPERTIES => $e->{PROPERTIES},
@@
-641,10
+660,11
@@
sub ParseUnion($$)
sub ParseEnum($$)
{
my ($e, $pointer_default, $ms_union) = @_;
sub ParseEnum($$)
{
my ($e, $pointer_default, $ms_union) = @_;
+ my $name = ParseName($e);
return {
TYPE => "ENUM",
return {
TYPE => "ENUM",
- NAME => $
e->{NAME}
,
+ NAME => $
name
,
BASE_TYPE => Parse::Pidl::Typelist::enum_type_fn($e),
ELEMENTS => $e->{ELEMENTS},
PROPERTIES => $e->{PROPERTIES},
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) = @_;
sub ParseBitmap($$$)
{
my ($e, $pointer_default, $ms_union) = @_;
+ my $name = ParseName($e);
return {
TYPE => "BITMAP",
return {
TYPE => "BITMAP",
- NAME => $
e->{NAME}
,
+ NAME => $
name
,
BASE_TYPE => Parse::Pidl::Typelist::bitmap_type_fn($e),
ELEMENTS => $e->{ELEMENTS},
PROPERTIES => $e->{PROPERTIES},
BASE_TYPE => Parse::Pidl::Typelist::bitmap_type_fn($e),
ELEMENTS => $e->{ELEMENTS},
PROPERTIES => $e->{PROPERTIES},