diff options
-rw-r--r-- | source4/build/pidl/idl.yp | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/source4/build/pidl/idl.yp b/source4/build/pidl/idl.yp index be152c5475..f77062adf6 100644 --- a/source4/build/pidl/idl.yp +++ b/source4/build/pidl/idl.yp @@ -16,7 +16,7 @@ %% idl: #empty { {} } - | idl interface { push(@{$_[1]}, $_[2]); $_[1] } + | idl interface { push(@{$_[1]}, $_[2]); $_[1] } | idl coclass { push(@{$_[1]}, $_[2]); $_[1] } ; @@ -96,7 +96,7 @@ typedef: 'typedef' property_list type identifier array_len ';' }} ; -type: struct | union | enum | identifier +type: struct | union | enum | bitmap | identifier | void { "void" } ; @@ -117,6 +117,21 @@ enum_element: identifier | identifier '=' anytext { "$_[1]$_[2]$_[3]" } ; +bitmap: 'bitmap' '{' bitmap_elements '}' + {{ + "TYPE" => "BITMAP", + "ELEMENTS" => $_[3] + }} +; + +bitmap_elements: + bitmap_element { [ $_[1] ] } + | bitmap_elements ',' bitmap_element { push(@{$_[1]}, $_[3]); $_[1] } +; + +bitmap_element: identifier '=' anytext { "$_[1] ( $_[3] )" } +; + struct: 'struct' '{' element_list1 '}' {{ "TYPE" => "STRUCT", @@ -313,7 +328,7 @@ again: $parser->YYData->{LAST_TOKEN} = $1; if ($1 =~ /^(coclass|interface|const|typedef|union - |struct|enum|void|case|default)$/x) { + |struct|enum|bitmap|void|case|default)$/x) { return $1; } return('IDENTIFIER',$1); |