};
}
+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},
$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},
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},
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},
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},
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},