1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-25 14:50:24 +03:00

pidl: add support for pointers in typedefs

metze
This commit is contained in:
Stefan Metzmacher 2009-08-05 13:43:49 +02:00
parent d4636c47c7
commit fcee50b9c9
4 changed files with 319 additions and 298 deletions

View File

@ -169,13 +169,14 @@ function:
;
typedef:
property_list 'typedef' type identifier array_len ';'
property_list 'typedef' type pointers identifier array_len ';'
{{
"TYPE" => "TYPEDEF",
"PROPERTIES" => $_[1],
"NAME" => $_[4],
"NAME" => $_[5],
"DATA" => $_[3],
"ARRAY_LEN" => $_[5],
"POINTERS" => $_[4],
"ARRAY_LEN" => $_[6],
"FILE" => $_[0]->YYData->{FILE},
"LINE" => $_[0]->YYData->{LINE},
}}

File diff suppressed because it is too large Load Diff

View File

@ -610,12 +610,19 @@ sub ParseTypedef($$)
{
my ($d, $pointer_default) = @_;
if (defined($d->{DATA}->{PROPERTIES}) && !defined($d->{PROPERTIES})) {
$d->{PROPERTIES} = $d->{DATA}->{PROPERTIES};
}
my $data;
my $data = ParseType($d->{DATA}, $pointer_default);
$data->{ALIGN} = align_type($d->{NAME});
if (ref($d->{DATA}) eq "HASH") {
if (defined($d->{DATA}->{PROPERTIES})
and not defined($d->{PROPERTIES})) {
$d->{PROPERTIES} = $d->{DATA}->{PROPERTIES};
}
$data = ParseType($d->{DATA}, $pointer_default);
$data->{ALIGN} = align_type($d->{NAME});
} else {
$data = getType($d->{DATA});
}
return {
NAME => $d->{NAME},
@ -899,13 +906,13 @@ my %property_list = (
"out" => ["ELEMENT"],
# pointer
"ref" => ["ELEMENT"],
"ptr" => ["ELEMENT"],
"unique" => ["ELEMENT"],
"ref" => ["ELEMENT", "TYPEDEF"],
"ptr" => ["ELEMENT", "TYPEDEF"],
"unique" => ["ELEMENT", "TYPEDEF"],
"ignore" => ["ELEMENT"],
"relative" => ["ELEMENT"],
"relative_short" => ["ELEMENT"],
"null_is_ffffffff" => ["ELEMENT"],
"relative" => ["ELEMENT", "TYPEDEF"],
"relative_short" => ["ELEMENT", "TYPEDEF"],
"null_is_ffffffff" => ["ELEMENT"],
"relative_base" => ["TYPEDEF", "STRUCT", "UNION"],
"gensize" => ["TYPEDEF", "STRUCT", "UNION"],
@ -1161,12 +1168,14 @@ sub ValidTypedef($)
ValidProperties($typedef, "TYPEDEF");
return unless (ref($data) eq "HASH");
$data->{PARENT} = $typedef;
$data->{FILE} = $typedef->{FILE} unless defined($data->{FILE});
$data->{LINE} = $typedef->{LINE} unless defined($data->{LINE});
ValidType($data) if (ref($data) eq "HASH");
ValidType($data);
}
#####################################################################

View File

@ -158,6 +158,7 @@ is_deeply($x, [ {
'DATA' => [ {
'TYPE' => 'TYPEDEF',
'NAME' => 'y',
'POINTERS' => 0,
'DATA' => {
'TYPE' => 'STRUCT',
'NAME' => 'x',
@ -180,6 +181,7 @@ is_deeply($x, [ {
'DATA' => [ {
'TYPE' => 'TYPEDEF',
'NAME' => 'y',
'POINTERS' => 0,
'DATA' => {
'TYPE' => 'STRUCT',
'ELEMENTS' => [],
@ -202,6 +204,7 @@ is_deeply($x, [ {
'DATA' => [ {
'TYPE' => 'TYPEDEF',
'NAME' => 'y',
'POINTERS' => 0,
'DATA' => {
'TYPE' => 'BITMAP',
'NAME' => 'x',
@ -225,6 +228,7 @@ is_deeply($x, [ {
'DATA' => [ {
'TYPE' => 'TYPEDEF',
'NAME' => 'y',
'POINTERS' => 0,
'DATA' => {
'TYPE' => 'UNION',
'NAME' => 'x',