summaryrefslogtreecommitdiff
path: root/source4/build/pidl/idl.yp
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2005-02-11 02:05:47 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:09:41 -0500
commit0de6851e83d075e8c001255990b2018acc4a56c2 (patch)
tree9f5ebc9512992d2da6fcc7b9b034cfb9472b4077 /source4/build/pidl/idl.yp
parentaf7e9f2b5907a36d0d3c454d9ba9e49f98a11426 (diff)
downloadsamba-0de6851e83d075e8c001255990b2018acc4a56c2.tar.gz
samba-0de6851e83d075e8c001255990b2018acc4a56c2.tar.bz2
samba-0de6851e83d075e8c001255990b2018acc4a56c2.zip
r5320: Treat structs and unions somewhat more similarly:
- use same names in hashes (DATA -> ELEMENTS, etc) - [case()] and [default] are no longer special case, they're just regular properties (This used to be commit 6a0f599f822f5c42d93e78c13765804ab2223968)
Diffstat (limited to 'source4/build/pidl/idl.yp')
-rw-r--r--source4/build/pidl/idl.yp52
1 files changed, 20 insertions, 32 deletions
diff --git a/source4/build/pidl/idl.yp b/source4/build/pidl/idl.yp
index 4e4071d317..ae13c29543 100644
--- a/source4/build/pidl/idl.yp
+++ b/source4/build/pidl/idl.yp
@@ -163,41 +163,31 @@ struct: 'struct' '{' element_list1 '}'
}}
;
-union: 'union' '{' union_elements '}'
- {{
- "TYPE" => "UNION",
- "DATA" => $_[3]
+empty_element: property_list ';'
+ {{
+ "NAME" => "",
+ "TYPE" => "EMPTY",
+ "PROPERTIES" => $_[0],
+ "POINTERS" => 0
}}
;
+base_or_empty: base_element ';' | empty_element;
+
+optional_base_element:
+ property_list base_or_empty { $_[2]->{PROPERTIES} = util::FlattenHash([$_[1],$_[2]->{PROPERTIES}]); $_[2] }
+;
+
union_elements:
- union_element { [ $_[1] ] }
- | union_elements union_element { push(@{$_[1]}, $_[2]); $_[1] }
+ #empty
+ | union_elements optional_base_element { push(@{$_[1]}, $_[2]); $_[1] }
;
-union_element:
- '[' 'case' '(' anytext ')' ']' base_element ';'
- {{
- "TYPE" => "UNION_ELEMENT",
- "CASE" => $_[4],
- "DATA" => $_[7]
- }}
- | '[' 'case' '(' anytext ')' ']' ';'
- {{
- "TYPE" => "EMPTY",
- "CASE" => $_[4],
- }}
- | '[' 'default' ']' base_element ';'
- {{
- "TYPE" => "UNION_ELEMENT",
- "CASE" => "default",
- "DATA" => $_[4]
- }}
- | '[' 'default' ']' ';'
- {{
- "TYPE" => "EMPTY",
- "CASE" => "default",
- }}
+union: 'union' '{' union_elements '}'
+ {{
+ "TYPE" => "UNION",
+ "ELEMENTS" => $_[3]
+ }}
;
base_element: property_list type pointers identifier array_len
@@ -217,8 +207,6 @@ pointers:
| pointers '*' { $_[1]+1 }
;
-
-
element_list1:
#empty
| element_list1 base_element ';' { push(@{$_[1]}, $_[2]); $_[1] }
@@ -353,7 +341,7 @@ again:
$parser->YYData->{LAST_TOKEN} = $1;
if ($1 =~
/^(coclass|interface|const|typedef|declare|union
- |struct|enum|bitmap|void|case|default)$/x) {
+ |struct|enum|bitmap|void)$/x) {
return $1;
}
return('IDENTIFIER',$1);