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:
parent
d4636c47c7
commit
fcee50b9c9
@ -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
@ -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);
|
||||
}
|
||||
|
||||
#####################################################################
|
||||
|
@ -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',
|
||||
|
Loading…
x
Reference in New Issue
Block a user