diff options
Diffstat (limited to 'source4')
-rw-r--r-- | source4/pidl/TODO | 13 | ||||
-rw-r--r-- | source4/pidl/idl.yp | 17 | ||||
-rw-r--r-- | source4/pidl/lib/Parse/Pidl/IDL.pm | 2340 | ||||
-rw-r--r-- | source4/pidl/lib/Parse/Pidl/NDR.pm | 5 | ||||
-rwxr-xr-x | source4/pidl/tests/header.pl | 8 | ||||
-rwxr-xr-x | source4/pidl/tests/parse_idl.pl | 16 |
6 files changed, 1191 insertions, 1208 deletions
diff --git a/source4/pidl/TODO b/source4/pidl/TODO index 859b3d5317..487d51d11e 100644 --- a/source4/pidl/TODO +++ b/source4/pidl/TODO @@ -1,5 +1,3 @@ -- allow [public] on typedefs only - - EJS output backend shouldn't use the NDR levels stuff but instead as the "C levels" and NDR levels don't necessarily match. @@ -8,14 +6,19 @@ - compatibility mode for generating MIDL-readable data: - strip out pidl-specific properties +- remove declare in favor of typedef +- make bitmap an optional attribute on enum - support nested elements - - support typedefs properly - - improve represent_as(): allow it to be used for arrays and other complex - types +- support typedefs properly (e.g. allow "typedef void **bla;") +- make typedefs generate real typedefs +- improve represent_as(): allow it to be used for arrays and other complex + types - --explain-ndr option that dumps out parse tree ? - seperate tables for NDR and DCE/RPC + - maybe no tables for NDR at all? we only need them for ndrdump + and that can use dlsym() - allow data structures outside of interfaces diff --git a/source4/pidl/idl.yp b/source4/pidl/idl.yp index 3ca02c3872..e7d1ce7898 100644 --- a/source4/pidl/idl.yp +++ b/source4/pidl/idl.yp @@ -66,23 +66,17 @@ interface_names: | interface_names 'interface' identifier ';' { push(@{$_[1]}, $_[2]); $_[1] } ; -interface: property_list 'interface' identifier base_interface '{' definitions '}' optional_semicolon +interface: property_list 'interface' identifier '{' definitions '}' optional_semicolon {{ "TYPE" => "INTERFACE", "PROPERTIES" => $_[1], "NAME" => $_[3], - "BASE" => $_[4], - "DATA" => $_[6], + "DATA" => $_[5], "FILE" => $_[0]->YYData->{FILE}, "LINE" => $_[0]->YYData->{LINE}, }} ; -base_interface: - #empty - | ':' identifier { $_[2] } -; - definitions: definition { [ $_[1] ] } | definitions definition { push(@{$_[1]}, $_[2]); $_[1] } @@ -293,7 +287,7 @@ pointers: ; element_list1: - #empty + { [] } | element_list1 base_element ';' { push(@{$_[1]}, $_[2]); $_[1] } ; @@ -407,10 +401,6 @@ sub CleanData($) if (ref($v) eq "ARRAY") { foreach my $i (0 .. $#{$v}) { CleanData($v->[$i]); - if (ref($v->[$i]) eq "ARRAY" && $#{$v->[$i]}==-1) { - $v->[$i] = undef; - next; - } } # this removes any undefined elements from the array @{$v} = grep { defined $_ } @{$v}; @@ -418,7 +408,6 @@ sub CleanData($) foreach my $x (keys %{$v}) { CleanData($v->{$x}); if (!defined $v->{$x}) { delete($v->{$x}); next; } - if (ref($v->{$x}) eq "ARRAY" && $#{$v->{$x}}==-1) { delete($v->{$x}); next; } } } return $v; diff --git a/source4/pidl/lib/Parse/Pidl/IDL.pm b/source4/pidl/lib/Parse/Pidl/IDL.pm index e547b2caa8..36c83c5922 100644 --- a/source4/pidl/lib/Parse/Pidl/IDL.pm +++ b/source4/pidl/lib/Parse/Pidl/IDL.pm @@ -37,7 +37,7 @@ sub new { "import" => 6, "include" => 11 }, - DEFAULT => -91, + DEFAULT => -89, GOTOS => { 'importlib' => 9, 'interface' => 8, @@ -106,7 +106,7 @@ sub new { } }, {#State 13 - DEFAULT => -124 + DEFAULT => -122 }, {#State 14 DEFAULT => -10 @@ -161,7 +161,7 @@ sub new { } }, {#State 22 - DEFAULT => -120 + DEFAULT => -118 }, {#State 23 ACTIONS => { @@ -170,27 +170,23 @@ sub new { }, {#State 24 ACTIONS => { - ":" => 32 - }, - DEFAULT => -16, - GOTOS => { - 'base_interface' => 33 + "{" => 32 } }, {#State 25 ACTIONS => { - "," => 34, - "]" => 35 + "," => 33, + "]" => 34 } }, {#State 26 ACTIONS => { - "(" => 36 + "(" => 35 }, - DEFAULT => -95 + DEFAULT => -93 }, {#State 27 - DEFAULT => -93 + DEFAULT => -91 }, {#State 28 DEFAULT => -7 @@ -204,1588 +200,1572 @@ sub new { {#State 31 DEFAULT => -13, GOTOS => { - 'interface_names' => 37 + 'interface_names' => 36 } }, {#State 32 ACTIONS => { - 'IDENTIFIER' => 22 + "declare" => 44, + "const" => 48 }, + DEFAULT => -89, GOTOS => { - 'identifier' => 38 + 'typedecl' => 37, + 'function' => 38, + 'definitions' => 40, + 'bitmap' => 39, + 'definition' => 43, + 'property_list' => 42, + 'usertype' => 41, + 'const' => 47, + 'declare' => 46, + 'struct' => 45, + 'typedef' => 50, + 'enum' => 49, + 'union' => 51 } }, {#State 33 ACTIONS => { - "{" => 39 - } - }, - {#State 34 - ACTIONS => { 'IDENTIFIER' => 22 }, GOTOS => { 'identifier' => 26, - 'property' => 40 + 'property' => 52 } }, - {#State 35 - DEFAULT => -92 + {#State 34 + DEFAULT => -90 }, - {#State 36 + {#State 35 ACTIONS => { - 'CONSTANT' => 44, + 'CONSTANT' => 56, 'TEXT' => 13, 'IDENTIFIER' => 22 }, - DEFAULT => -101, + DEFAULT => -99, GOTOS => { - 'identifier' => 45, - 'text' => 46, - 'listtext' => 42, - 'anytext' => 41, - 'constant' => 43 + 'identifier' => 57, + 'text' => 58, + 'listtext' => 54, + 'anytext' => 53, + 'constant' => 55 } }, - {#State 37 + {#State 36 ACTIONS => { - "}" => 47, - "interface" => 48 + "}" => 59, + "interface" => 60 } }, + {#State 37 + DEFAULT => -22 + }, {#State 38 - DEFAULT => -17 + DEFAULT => -18 }, {#State 39 + DEFAULT => -37 + }, + {#State 40 ACTIONS => { - "declare" => 56, - "const" => 60 + "}" => 61, + "declare" => 44, + "const" => 48 }, - DEFAULT => -91, + DEFAULT => -89, GOTOS => { - 'typedecl' => 49, - 'function' => 50, - 'definitions' => 52, - 'bitmap' => 51, - 'definition' => 55, - 'property_list' => 54, - 'usertype' => 53, - 'const' => 59, - 'declare' => 58, - 'struct' => 57, - 'typedef' => 62, - 'enum' => 61, - 'union' => 63 + 'typedecl' => 37, + 'function' => 38, + 'bitmap' => 39, + 'definition' => 62, + 'property_list' => 42, + 'usertype' => 41, + 'const' => 47, + 'struct' => 45, + 'declare' => 46, + 'typedef' => 50, + 'enum' => 49, + 'union' => 51 } }, - {#State 40 - DEFAULT => -94 - }, {#State 41 ACTIONS => { - "-" => 65, - ":" => 64, - "<" => 67, - "+" => 69, - "~" => 68, - "*" => 76, - "?" => 66, - "{" => 70, - "&" => 71, - "/" => 72, - "=" => 73, - "(" => 74, - "|" => 75, - "." => 77, - ">" => 78 - }, - DEFAULT => -97 + ";" => 63 + } }, {#State 42 ACTIONS => { - "," => 79, - ")" => 80 + "typedef" => 64, + 'IDENTIFIER' => 22, + "signed" => 72, + "union" => 65, + "enum" => 74, + "bitmap" => 75, + 'void' => 66, + "unsigned" => 76, + "[" => 17, + "struct" => 71 + }, + GOTOS => { + 'existingtype' => 73, + 'bitmap' => 39, + 'usertype' => 68, + 'property_list' => 67, + 'identifier' => 69, + 'struct' => 45, + 'enum' => 49, + 'type' => 77, + 'union' => 51, + 'sign' => 70 } }, {#State 43 - DEFAULT => -103 + DEFAULT => -16 }, {#State 44 - DEFAULT => -123 + DEFAULT => -89, + GOTOS => { + 'property_list' => 78 + } }, {#State 45 - DEFAULT => -102 + DEFAULT => -34 }, {#State 46 - DEFAULT => -104 + DEFAULT => -21 }, {#State 47 - ACTIONS => { - ";" => 82 - }, - DEFAULT => -125, - GOTOS => { - 'optional_semicolon' => 81 - } + DEFAULT => -19 }, {#State 48 ACTIONS => { 'IDENTIFIER' => 22 }, GOTOS => { - 'identifier' => 83 + 'identifier' => 79 } }, {#State 49 - DEFAULT => -24 + DEFAULT => -36 }, {#State 50 DEFAULT => -20 }, {#State 51 - DEFAULT => -39 + DEFAULT => -35 }, {#State 52 - ACTIONS => { - "}" => 84, - "declare" => 56, - "const" => 60 - }, - DEFAULT => -91, - GOTOS => { - 'typedecl' => 49, - 'function' => 50, - 'bitmap' => 51, - 'definition' => 85, - 'property_list' => 54, - 'usertype' => 53, - 'const' => 59, - 'struct' => 57, - 'declare' => 58, - 'typedef' => 62, - 'enum' => 61, - 'union' => 63 - } + DEFAULT => -92 }, {#State 53 ACTIONS => { - ";" => 86 - } + "-" => 81, + ":" => 80, + "<" => 82, + "+" => 84, + "~" => 83, + "*" => 85, + "?" => 86, + "{" => 87, + "&" => 88, + "/" => 89, + "=" => 90, + "(" => 91, + "|" => 92, + "." => 93, + ">" => 94 + }, + DEFAULT => -95 }, {#State 54 ACTIONS => { - "typedef" => 87, - 'IDENTIFIER' => 22, - "signed" => 95, - "union" => 88, - "enum" => 97, - "bitmap" => 98, - 'void' => 89, - "unsigned" => 99, - "[" => 17, - "struct" => 94 - }, - GOTOS => { - 'existingtype' => 96, - 'bitmap' => 51, - 'usertype' => 91, - 'property_list' => 90, - 'identifier' => 92, - 'struct' => 57, - 'enum' => 61, - 'type' => 100, - 'union' => 63, - 'sign' => 93 + "," => 95, + ")" => 96 } }, {#State 55 - DEFAULT => -18 + DEFAULT => -101 }, {#State 56 - DEFAULT => -91, - GOTOS => { - 'property_list' => 101 - } + DEFAULT => -121 }, {#State 57 - DEFAULT => -36 + DEFAULT => -100 }, {#State 58 - DEFAULT => -23 + DEFAULT => -102 }, {#State 59 - DEFAULT => -21 + ACTIONS => { + ";" => 97 + }, + DEFAULT => -123, + GOTOS => { + 'optional_semicolon' => 98 + } }, {#State 60 ACTIONS => { 'IDENTIFIER' => 22 }, GOTOS => { - 'identifier' => 102 + 'identifier' => 99 } }, {#State 61 - DEFAULT => -38 + ACTIONS => { + ";" => 97 + }, + DEFAULT => -123, + GOTOS => { + 'optional_semicolon' => 100 + } }, {#State 62 - DEFAULT => -22 + DEFAULT => -17 }, {#State 63 - DEFAULT => -37 + DEFAULT => -38 }, {#State 64 ACTIONS => { - 'CONSTANT' => 44, - 'TEXT' => 13, - 'IDENTIFIER' => 22 + 'IDENTIFIER' => 22, + "signed" => 72, + 'void' => 66, + "unsigned" => 76 }, - DEFAULT => -101, + DEFAULT => -89, GOTOS => { - 'identifier' => 45, - 'anytext' => 103, - 'text' => 46, - 'constant' => 43 + 'existingtype' => 73, + 'bitmap' => 39, + 'usertype' => 68, + 'property_list' => 67, + 'identifier' => 69, + 'struct' => 45, + 'enum' => 49, + 'type' => 101, + 'union' => 51, + 'sign' => 70 } }, {#State 65 ACTIONS => { - 'CONSTANT' => 44, - 'TEXT' => 13, - 'IDENTIFIER' => 22 + 'IDENTIFIER' => 102 }, - DEFAULT => -101, + DEFAULT => -120, GOTOS => { - 'identifier' => 45, - 'anytext' => 104, - 'text' => 46, - 'constant' => 43 + 'optional_identifier' => 103 } }, {#State 66 + DEFAULT => -45 + }, + {#State 67 + ACTIONS => { + "union" => 65, + "enum" => 74, + "bitmap" => 75, + "[" => 17, + "struct" => 71 + } + }, + {#State 68 + DEFAULT => -43 + }, + {#State 69 + DEFAULT => -42 + }, + {#State 70 ACTIONS => { - 'CONSTANT' => 44, - 'TEXT' => 13, 'IDENTIFIER' => 22 }, - DEFAULT => -101, GOTOS => { - 'identifier' => 45, - 'anytext' => 105, - 'text' => 46, - 'constant' => 43 + 'identifier' => 104 } }, - {#State 67 + {#State 71 ACTIONS => { - 'CONSTANT' => 44, - 'TEXT' => 13, - 'IDENTIFIER' => 22 + 'IDENTIFIER' => 102 }, - DEFAULT => -101, + DEFAULT => -120, GOTOS => { - 'identifier' => 45, - 'anytext' => 106, - 'text' => 46, - 'constant' => 43 + 'optional_identifier' => 105 } }, - {#State 68 + {#State 72 + DEFAULT => -39 + }, + {#State 73 + DEFAULT => -44 + }, + {#State 74 ACTIONS => { - 'CONSTANT' => 44, - 'TEXT' => 13, - 'IDENTIFIER' => 22 + 'IDENTIFIER' => 102 }, - DEFAULT => -101, + DEFAULT => -120, GOTOS => { - 'identifier' => 45, - 'anytext' => 107, - 'text' => 46, - 'constant' => 43 + 'optional_identifier' => 106 } }, - {#State 69 + {#State 75 ACTIONS => { - 'CONSTANT' => 44, - 'TEXT' => 13, - 'IDENTIFIER' => 22 + 'IDENTIFIER' => 102 }, - DEFAULT => -101, + DEFAULT => -120, GOTOS => { - 'identifier' => 45, - 'anytext' => 108, - 'text' => 46, - 'constant' => 43 + 'optional_identifier' => 107 } }, - {#State 70 + {#State 76 + DEFAULT => -40 + }, + {#State 77 ACTIONS => { - 'CONSTANT' => 44, - 'TEXT' => 13, 'IDENTIFIER' => 22 }, - DEFAULT => -101, GOTOS => { - 'identifier' => 45, - 'anytext' => 109, - 'text' => 46, - 'constant' => 43, - 'commalisttext' => 110 + 'identifier' => 108 } }, - {#State 71 + {#State 78 ACTIONS => { - 'CONSTANT' => 44, - 'TEXT' => 13, - 'IDENTIFIER' => 22 + "union" => 109, + "enum" => 114, + "bitmap" => 115, + "[" => 17 }, - DEFAULT => -101, GOTOS => { - 'identifier' => 45, - 'anytext' => 111, - 'text' => 46, - 'constant' => 43 + 'decl_enum' => 110, + 'decl_bitmap' => 111, + 'decl_type' => 113, + 'decl_union' => 112 } }, - {#State 72 + {#State 79 + DEFAULT => -78, + GOTOS => { + 'pointers' => 116 + } + }, + {#State 80 ACTIONS => { - 'CONSTANT' => 44, + 'CONSTANT' => 56, 'TEXT' => 13, 'IDENTIFIER' => 22 }, - DEFAULT => -101, + DEFAULT => -99, GOTOS => { - 'identifier' => 45, - 'anytext' => 112, - 'text' => 46, - 'constant' => 43 + 'identifier' => 57, + 'anytext' => 117, + 'text' => 58, + 'constant' => 55 } }, - {#State 73 + {#State 81 ACTIONS => { - 'CONSTANT' => 44, + 'CONSTANT' => 56, 'TEXT' => 13, 'IDENTIFIER' => 22 }, - DEFAULT => -101, + DEFAULT => -99, GOTOS => { - 'identifier' => 45, - 'anytext' => 113, - 'text' => 46, - 'constant' => 43 + 'identifier' => 57, + 'anytext' => 118, + 'text' => 58, + 'constant' => 55 } }, - {#State 74 + {#State 82 ACTIONS => { - 'CONSTANT' => 44, + 'CONSTANT' => 56, 'TEXT' => 13, 'IDENTIFIER' => 22 }, - DEFAULT => -101, + DEFAULT => -99, GOTOS => { - 'identifier' => 45, - 'anytext' => 109, - 'text' => 46, - 'constant' => 43, - 'commalisttext' => 114 + 'identifier' => 57, + 'anytext' => 119, + 'text' => 58, + 'constant' => 55 } }, - {#State 75 + {#State 83 ACTIONS => { - 'CONSTANT' => 44, + 'CONSTANT' => 56, 'TEXT' => 13, 'IDENTIFIER' => 22 }, - DEFAULT => -101, + DEFAULT => -99, GOTOS => { - 'identifier' => 45, - 'anytext' => 115, - 'text' => 46, - 'constant' => 43 + 'identifier' => 57, + 'anytext' => 120, + 'text' => 58, + 'constant' => 55 } }, - {#State 76 + {#State 84 ACTIONS => { - 'CONSTANT' => 44, + 'CONSTANT' => 56, 'TEXT' => 13, 'IDENTIFIER' => 22 }, - DEFAULT => -101, + DEFAULT => -99, GOTOS => { - 'identifier' => 45, - 'anytext' => 116, - 'text' => 46, - 'constant' => 43 + 'identifier' => 57, + 'anytext' => 121, + 'text' => 58, + 'constant' => 55 } }, - {#State 77 + {#State 85 ACTIONS => { - 'CONSTANT' => 44, + 'CONSTANT' => 56, 'TEXT' => 13, 'IDENTIFIER' => 22 }, - DEFAULT => -101, + DEFAULT => -99, GOTOS => { - 'identifier' => 45, - 'anytext' => 117, - 'text' => 46, - 'constant' => 43 + 'identifier' => 57, + 'anytext' => 122, + 'text' => 58, + 'constant' => 55 } }, - {#State 78 + {#State 86 ACTIONS => { - 'CONSTANT' => 44, + 'CONSTANT' => 56, 'TEXT' => 13, 'IDENTIFIER' => 22 }, - DEFAULT => -101, + DEFAULT => -99, GOTOS => { - 'identifier' => 45, - 'anytext' => 118, - 'text' => 46, - 'constant' => 43 + 'identifier' => 57, + 'anytext' => 123, + 'text' => 58, + 'constant' => 55 } }, - {#State 79 + {#State 87 ACTIONS => { - 'CONSTANT' => 44, + 'CONSTANT' => 56, 'TEXT' => 13, 'IDENTIFIER' => 22 }, - DEFAULT => -101, + DEFAULT => -99, GOTOS => { - 'identifier' => 45, - 'anytext' => 119, - 'text' => 46, - 'constant' => 43 + 'identifier' => 57, + 'anytext' => 124, + 'text' => 58, + 'constant' => 55, + 'commalisttext' => 125 } }, - {#State 80 - DEFAULT => -96 - }, - {#State 81 - DEFAULT => -12 - }, - {#State 82 - DEFAULT => -126 - }, - {#State 83 + {#State 88 ACTIONS => { - ";" => 120 + 'CONSTANT' => 56, + 'TEXT' => 13, + 'IDENTIFIER' => 22 + }, + DEFAULT => -99, + GOTOS => { + 'identifier' => 57, + 'anytext' => 126, + 'text' => 58, + 'constant' => 55 } }, - {#State 84 + {#State 89 ACTIONS => { - ";" => 82 + 'CONSTANT' => 56, + 'TEXT' => 13, + 'IDENTIFIER' => 22 }, - DEFAULT => -125, + DEFAULT => -99, GOTOS => { - 'optional_semicolon' => 121 + 'identifier' => 57, + 'anytext' => 127, + 'text' => 58, + 'constant' => 55 } }, - {#State 85 - DEFAULT => -19 - }, - {#State 86 - DEFAULT => -40 - }, - {#State 87 + {#State 90 ACTIONS => { - 'IDENTIFIER' => 22, - "signed" => 95, - 'void' => 89, - "unsigned" => 99 + 'CONSTANT' => 56, + 'TEXT' => 13, + 'IDENTIFIER' => 22 }, - DEFAULT => -91, + DEFAULT => -99, GOTOS => { - 'existingtype' => 96, - 'bitmap' => 51, - 'usertype' => 91, - 'property_list' => 90, - 'identifier' => 92, - 'struct' => 57, - 'enum' => 61, - 'type' => 122, - 'union' => 63, - 'sign' => 93 + 'identifier' => 57, + 'anytext' => 128, + 'text' => 58, + 'constant' => 55 } }, - {#State 88 + {#State 91 ACTIONS => { - 'IDENTIFIER' => 123 + 'CONSTANT' => 56, + 'TEXT' => 13, + 'IDENTIFIER' => 22 }, - DEFAULT => -122, + DEFAULT => -99, GOTOS => { - 'optional_identifier' => 124 + 'identifier' => 57, + 'anytext' => 124, + 'text' => 58, + 'constant' => 55, + 'commalisttext' => 129 } }, - {#State 89 - DEFAULT => -47 - }, - {#State 90 + {#State 92 ACTIONS => { - "union" => 88, - "enum" => 97, - "bitmap" => 98, - "[" => 17, - "struct" => 94 + 'CONSTANT' => 56, + 'TEXT' => 13, + 'IDENTIFIER' => 22 + }, + DEFAULT => -99, + GOTOS => { + 'identifier' => 57, + 'anytext' => 130, + 'text' => 58, + 'constant' => 55 } }, - {#State 91 - DEFAULT => -45 - }, - {#State 92 - DEFAULT => -44 - }, {#State 93 ACTIONS => { + 'CONSTANT' => 56, + 'TEXT' => 13, 'IDENTIFIER' => 22 }, + DEFAULT => -99, GOTOS => { - 'identifier' => 125 + 'identifier' => 57, + 'anytext' => 131, + 'text' => 58, + 'constant' => 55 } }, {#State 94 ACTIONS => { - 'IDENTIFIER' => 123 + 'CONSTANT' => 56, + 'TEXT' => 13, + 'IDENTIFIER' => 22 }, - DEFAULT => -122, + DEFAULT => -99, GOTOS => { - 'optional_identifier' => 126 + 'identifier' => 57, + 'anytext' => 132, + 'text' => 58, + 'constant' => 55 } }, {#State 95 - DEFAULT => -41 - }, - {#State 96 - DEFAULT => -46 - }, - {#State 97 ACTIONS => { - 'IDENTIFIER' => 123 + 'CONSTANT' => 56, + 'TEXT' => 13, + 'IDENTIFIER' => 22 }, - DEFAULT => -122, + DEFAULT => -99, GOTOS => { - 'optional_identifier' => 127 + 'identifier' => 57, + 'anytext' => 133, + 'text' => 58, + 'constant' => 55 } }, + {#State 96 + DEFAULT => -94 + }, + {#State 97 + DEFAULT => -124 + }, {#State 98 - ACTIONS => { - 'IDENTIFIER' => 123 - }, - DEFAULT => -122, - GOTOS => { - 'optional_identifier' => 128 - } + DEFAULT => -12 }, {#State 99 - DEFAULT => -42 - }, - {#State 100 ACTIONS => { - 'IDENTIFIER' => 22 - }, - GOTOS => { - 'identifier' => 129 + ";" => 134 } }, + {#State 100 + DEFAULT => -15 + }, {#State 101 ACTIONS => { - "union" => 130, - "enum" => 135, - "bitmap" => 136, - "[" => 17 + 'IDENTIFIER' => 22 }, GOTOS => { - 'decl_enum' => 131, - 'decl_bitmap' => 132, - 'decl_type' => 134, - 'decl_union' => 133 + 'identifier' => 135 } }, {#State 102 - DEFAULT => -80, - GOTOS => { - 'pointers' => 137 - } + DEFAULT => -119 }, {#State 103 ACTIONS => { - "-" => 65, - ":" => 64, - "<" => 67, - "+" => 69, - "~" => 68, - "*" => 76, - "?" => 66, - "{" => 70, - "&" => 71, - "/" => 72, - "=" => 73, - "(" => 74, - "|" => 75, - "." => 77, - ">" => 78 + "{" => 137 }, - DEFAULT => -114 + DEFAULT => -74, + GOTOS => { + 'union_body' => 138, + 'opt_union_body' => 136 + } }, {#State 104 - ACTIONS => { - ":" => 64, - "<" => 67, - "~" => 68, - "?" => 66, - "{" => 70, - "=" => 73 - }, - DEFAULT => -105 + DEFAULT => -41 }, {#State 105 ACTIONS => { - "-" => 65, - ":" => 64, - "<" => 67, - "+" => 69, - "~" => 68, - "*" => 76, - "?" => 66, - "{" => 70, - "&" => 71, - "/" => 72, - "=" => 73, - "(" => 74, - "|" => 75, - "." => 77, - ">" => 78 + "{" => 140 }, - DEFAULT => -113 + DEFAULT => -64, + GOTOS => { + 'struct_body' => 139, + 'opt_struct_body' => 141 + } }, {#State 106 ACTIONS => { - "-" => 65, - ":" => 64, - "<" => 67, - "+" => 69, - "~" => 68, - "*" => 76, - "?" => 66, - "{" => 70, - "&" => 71, - "/" => 72, - "=" => 73, - "(" => 74, - "|" => 75, - "." => 77, - ">" => 78 + "{" => 142 }, - DEFAULT => -109 + DEFAULT => -47, + GOTOS => { + 'opt_enum_body' => 144, + 'enum_body' => 143 + } }, {#State 107 ACTIONS => { - "-" => 65, - ":" => 64, - "<" => 67, - "+" => 69, - "~" => 68, - "*" => 76, - "?" => 66, - "{" => 70, - "&" => 71, - "/" => 72, - "=" => 73, - "(" => 74, - "|" => 75, - "." => 77, - ">" => 78 + "{" => 146 }, - DEFAULT => -117 + DEFAULT => -55, + GOTOS => { + 'bitmap_body' => 147, + 'opt_bitmap_body' => 145 + } }, {#State 108 ACTIONS => { - ":" => 64, - "<" => 67, - "~" => 68, - "?" => 66, - "{" => 70, - "=" => 73 - }, - DEFAULT => -116 + "(" => 148 + } }, {#State 109 - ACTIONS => { - "-" => 65, - ":" => 64, - "<" => 67, - "+" => 69, - "~" => 68, - "*" => 76, - "?" => 66, - "{" => 70, - "&" => 71, - "/" => 72, - "=" => 73, - "(" => 74, - "|" => 75, - "." => 77, - ">" => 78 - }, - DEFAULT => -99 + DEFAULT => -32 }, {#State 110 - ACTIONS => { - "}" => 138, - "," => 139 - } + DEFAULT => -27 }, {#State 111 - ACTIONS => { - ":" => 64, - "<" => 67, - "~" => 68, - "?" => 66, - "{" => 70, - "=" => 73 - }, - DEFAULT => -111 + DEFAULT => -28 }, {#State 112 - ACTIONS => { - ":" => 64, - "<" => 67, - "~" => 68, - "?" => 66, - "{" => 70, - "=" => 73 - }, - DEFAULT => -112 + DEFAULT => -29 }, {#State 113 ACTIONS => { - "-" => 65, - ":" => 64, - "<" => 67, - "+" => 69, - "~" => 68, - "*" => 76, - "?" => 66, - "{" => 70, - "&" => 71, - "/" => 72, - "=" => 73, - "(" => 74, - "|" => 75, - "." => 77, - ">" => 78 + 'IDENTIFIER' => 22 }, - DEFAULT => -115 + GOTOS => { + 'identifier' => 149 + } }, {#State 114 - ACTIONS => { - "," => 139, - ")" => 140 - } + DEFAULT => -30 }, {#State 115 - ACTIONS => { - ":" => 64, - "<" => 67, - "~" => 68, - "?" => 66, - "{" => 70, - "=" => 73 - }, - DEFAULT => -110 + DEFAULT => -31 }, {#State 116 ACTIONS => { - ":" => 64, - "<" => 67, - "~" => 68, - "?" => 66, - "{" => 70, - "=" => 73 + 'IDENTIFIER' => 22, + "*" => 151 }, - DEFAULT => -107 + GOTOS => { + 'identifier' => 150 + } }, {#State 117 ACTIONS => { - ":" => 64, - "<" => 67, - "~" => 68, - "?" => 66, - "{" => 70, - "=" => 73 + "-" => 81, + ":" => 80, + "<" => 82, + "+" => 84, + "~" => 83, + "*" => 85, + "?" => 86, + "{" => 87, + "&" => 88, + "/" => 89, + "=" => 90, + "(" => 91, + "|" => 92, + "." => 93, + ">" => 94 }, - DEFAULT => -106 + DEFAULT => -112 }, {#State 118 ACTIONS => { - ":" => 64, - "<" => 67, - "~" => 68, - "?" => 66, - "{" => 70, - "=" => 73 + ":" => 80, + "<" => 82, + "~" => 83, + "?" => 86, + "{" => 87, + "=" => 90 }, - DEFAULT => -108 + DEFAULT => -103 }, {#State 119 ACTIONS => { - "-" => 65, - ":" => 64, - "<" => 67, - "+" => 69, - "~" => 68, - "*" => 76, - "?" => 66, - "{" => 70, - "&" => 71, - "/" => 72, - "=" => 73, - "(" => 74, - "|" => 75, - "." => 77, - ">" => 78 + "-" => 81, + ":" => 80, + "<" => 82, + "+" => 84, + "~" => 83, + "*" => 85, + "?" => 86, + "{" => 87, + "&" => 88, + "/" => 89, + "=" => 90, + "(" => 91, + "|" => 92, + "." => 93, + ">" => 94 }, - DEFAULT => -98 + DEFAULT => -107 }, {#State 120 - DEFAULT => -14 + ACTIONS => { + "-" => 81, + ":" => 80, + "<" => 82, + "+" => 84, + "~" => 83, + "*" => 85, + "?" => 86, + "{" => 87, + "&" => 88, + "/" => 89, + "=" => 90, + "(" => 91, + "|" => 92, + "." => 93, + ">" => 94 + }, + DEFAULT => -115 }, {#State 121 - DEFAULT => -15 + ACTIONS => { + ":" => 80, + "<" => 82, + "~" => 83, + "?" => 86, + "{" => 87, + "=" => 90 + }, + DEFAULT => -114 }, {#State 122 ACTIONS => { - 'IDENTIFIER' => 22 + ":" => 80, + "<" => 82, + "~" => 83, + "?" => 86, + "{" => 87, + "=" => 90 }, - GOTOS => { - 'identifier' => 141 - } + DEFAULT => -105 }, {#State 123 - DEFAULT => -121 + ACTIONS => { + "-" => 81, + ":" => 80, + "<" => 82, + "+" => 84, + "~" => 83, + "*" => 85, + "?" => 86, + "{" => 87, + "&" => 88, + "/" => 89, + "=" => 90, + "(" => 91, + "|" => 92, + "." => 93, + ">" => 94 + }, + DEFAULT => -111 }, {#State 124 ACTIONS => { - "{" => 143 + "-" => 81, + ":" => 80, + "<" => 82, + "+" => 84, + "~" => 83, + "*" => 85, + "?" => 86, + "{" => 87, + "&" => 88, + "/" => 89, + "=" => 90, + "(" => 91, + "|" => 92, + "." => 93, + ">" => 94 }, - DEFAULT => -76, - GOTOS => { - 'union_body' => 144, - 'opt_union_body' => 142 - } + DEFAULT => -97 }, {#State 125 - DEFAULT => -43 + ACTIONS => { + "}" => 152, + "," => 153 + } }, {#State 126 ACTIONS => { - "{" => 146 + ":" => 80, + "<" => 82, + "~" => 83, + "?" => 86, + "{" => 87, + "=" => 90 }, - DEFAULT => -66, - GOTOS => { - 'struct_body' => 145, - 'opt_struct_body' => 147 - } + DEFAULT => -109 }, {#State 127 ACTIONS => { - "{" => 148 + ":" => 80, + "<" => 82, + "~" => 83, + "?" => 86, + "{" => 87, + "=" => 90 }, - DEFAULT => -49, - GOTOS => { - 'opt_enum_body' => 150, - 'enum_body' => 149 - } + DEFAULT => -110 }, {#State 128 ACTIONS => { - "{" => 152 + "-" => 81, + ":" => 80, + "<" => 82, + "+" => 84, + "~" => 83, + "*" => 85, + "?" => 86, + "{" => 87, + "&" => 88, + "/" => 89, + "=" => 90, + "(" => 91, + "|" => 92, + "." => 93, + ">" => 94 }, - DEFAULT => -57, - GOTOS => { - 'bitmap_body' => 153, - 'opt_bitmap_body' => 151 - } + DEFAULT => -113 }, {#State 129 ACTIONS => { - "(" => 154 + "," => 153, + ")" => 154 } }, {#State 130 - DEFAULT => -34 + ACTIONS => { + ":" => 80, + "<" => 82, + "~" => 83, + "?" => 86, + "{" => 87, + "=" => 90 + }, + DEFAULT => -108 }, {#State 131 - DEFAULT => -29 + ACTIONS => { + ":" => 80, + "<" => 82, + "~" => 83, + "?" => 86, + "{" => 87, + "=" => 90 + }, + DEFAULT => -104 }, {#State 132 - DEFAULT => -30 + ACTIONS => { + ":" => 80, + "<" => 82, + "~" => 83, + "?" => 86, + "{" => 87, + "=" => 90 + }, + DEFAULT => -106 }, {#State 133 - DEFAULT => -31 + ACTIONS => { + "-" => 81, + ":" => 80, + "<" => 82, + "+" => 84, + "~" => 83, + "*" => 85, + "?" => 86, + "{" => 87, + "&" => 88, + "/" => 89, + "=" => 90, + "(" => 91, + "|" => 92, + "." => 93, + ">" => 94 + }, + DEFAULT => -96 }, {#State 134 + DEFAULT => -14 + }, + {#State 135 ACTIONS => { - 'IDENTIFIER' => 22 + "[" => 155 }, + DEFAULT => -86, GOTOS => { - 'identifier' => 155 + 'array_len' => 156 } }, - {#State 135 - DEFAULT => -32 - }, {#State 136 - DEFAULT => -33 + DEFAULT => -76 }, {#State 137 - ACTIONS => { - 'IDENTIFIER' => 22, - "*" => 157 - }, + DEFAULT => -71, GOTOS => { - 'identifier' => 156 + 'union_elements' => 157 } }, {#State 138 - ACTIONS => { - 'CONSTANT' => 44, - 'TEXT' => 13, - 'IDENTIFIER' => 22 - }, - DEFAULT => -101, - GOTOS => { - 'identifier' => 45, - 'anytext' => 158, - 'text' => 46, - 'constant' => 43 - } + DEFAULT => -75 }, {#State 139 - ACTIONS => { - 'CONSTANT' => 44, - 'TEXT' => 13, - 'IDENTIFIER' => 22 - }, - DEFAULT => -101, - GOTOS => { - 'identifier' => 45, - 'anytext' => 159, - 'text' => 46, - 'constant' => 43 - } + DEFAULT => -65 }, {#State 140 - ACTIONS => { - 'CONSTANT' => 44, - 'TEXT' => 13, - 'IDENTIFIER' => 22 - }, - DEFAULT => -101, + DEFAULT => -80, GOTOS => { - 'identifier' => 45, - 'anytext' => 160, - 'text' => 46, - 'constant' => 43 + 'element_list1' => 158 } }, {#State 141 + DEFAULT => -66 + }, + {#State 142 ACTIONS => { - "[" => 161 + 'IDENTIFIER' => 22 }, - DEFAULT => -88, GOTOS => { - 'array_len' => 162 + 'identifier' => 159, + 'enum_element' => 160, + 'enum_elements' => 161 } }, - {#State 142 - DEFAULT => -78 - }, {#State 143 - DEFAULT => -73, - GOTOS => { - 'union_elements' => 163 - } + DEFAULT => -48 }, {#State 144 - DEFAULT => -77 + DEFAULT => -49 }, {#State 145 - DEFAULT => -67 + DEFAULT => -57 }, {#State 146 - DEFAULT => -82, + ACTIONS => { + 'IDENTIFIER' => 22 + }, + DEFAULT => -60, GOTOS => { - 'element_list1' => 164 + 'identifier' => 164, + 'bitmap_element' => 163, + 'bitmap_elements' => 162, + 'opt_bitmap_elements' => 165 } }, {#State 147 - DEFAULT => -68 + DEFAULT => -56 }, {#State 148 ACTIONS => { - 'IDENTIFIER' => 22 + "," => -82, + "void" => 169, + ")" => -82 }, + DEFAULT => -89, GOTOS => { - 'identifier' => 165, - 'enum_element' => 166, - 'enum_elements' => 167 + 'base_element' => 166, + 'element_list2' => 168, + 'property_list' => 167 } }, {#State 149 - DEFAULT => -50 + ACTIONS => { + ";" => 170 + } }, {#State 150 - DEFAULT => -51 + ACTIONS => { + "[" => 155, + "=" => 172 + }, + GOTOS => { + 'array_len' => 171 + } }, {#State 151 - DEFAULT => -59 + DEFAULT => -79 }, {#State 152 ACTIONS => { + 'CONSTANT' => 56, + 'TEXT' => 13, 'IDENTIFIER' => 22 }, - DEFAULT => -62, + DEFAULT => -99, GOTOS => { - 'identifier' => 170, - 'bitmap_element' => 169, - 'bitmap_elements' => 168, - 'opt_bitmap_elements' => 171 + 'identifier' => 57, + 'anytext' => 173, + 'text' => 58, + 'constant' => 55 } }, {#State 153 - DEFAULT => -58 + ACTIONS => { + 'CONSTANT' => 56, + 'TEXT' => 13, + 'IDENTIFIER' => 22 + }, + DEFAULT => -99, + GOTOS => { + 'identifier' => 57, + 'anytext' => 174, + 'text' => 58, + 'constant' => 55 + } }, {#State 154 ACTIONS => { - "," => -84, - "void" => 175, - ")" => -84 + 'CONSTANT' => 56, + 'TEXT' => 13, + 'IDENTIFIER' => 22 }, - DEFAULT => -91, + DEFAULT => -99, GOTOS => { - 'base_element' => 172, - 'element_list2' => 174, - 'property_list' => 173 + 'identifier' => 57, + 'anytext' => 175, + 'text' => 58, + 'constant' => 55 } }, {#State 155 ACTIONS => { - ";" => 176 + 'CONSTANT' => 56, + 'TEXT' => 13, + "]" => 176, + 'IDENTIFIER' => 22 + }, + DEFAULT => -99, + GOTOS => { + 'identifier' => 57, + 'anytext' => 177, + 'text' => 58, + 'constant' => 55 } }, {#State 156 ACTIONS => { - "[" => 161, - "=" => 178 - }, - GOTOS => { - 'array_len' => 177 + ";" => 178 } }, {#State 157 - DEFAULT => -81 + ACTIONS => { + "}" => 179 + }, + DEFAULT => -89, + GOTOS => { + 'optional_base_element' => 181, + 'property_list' => 180 + } }, {#State 158 ACTIONS => { - "-" => 65, - ":" => 64, - "<" => 67, - "+" => 69, - "~" => 68, - "*" => 76, - "?" => 66, - "{" => 70, - "&" => 71, - "/" => 72, - "=" => 73, - "(" => 74, - "|" => 75, - "." => 77, - ">" => 78 + "}" => 182 }, - DEFAULT => -119 + DEFAULT => -89, + GOTOS => { + 'base_element' => 183, + 'property_list' => 167 + } }, {#State 159 ACTIONS => { - "-" => 65, - ":" => 64, - "<" => 67, - "+" => 69, - "~" => 68, - "*" => 76, - "?" => 66, - "{" => 70, - "&" => 71, - "/" => 72, - "=" => 73, - "(" => 74, - "|" => 75, - "." => 77, - ">" => 78 + "=" => 184 }, - DEFAULT => -100 + DEFAULT => -52 }, {#State 160 - ACTIONS => { - ":" => 64, - "<" => 67, - "~" => 68, - "?" => 66, - "{" => 70, - "=" => 73 - }, - DEFAULT => -118 + DEFAULT => -50 }, {#State 161 ACTIONS => { - 'CONSTANT' => 44, - 'TEXT' => 13, - "]" => 179, - 'IDENTIFIER' => 22 - }, - DEFAULT => -101, - GOTOS => { - 'identifier' => 45, - 'anytext' => 180, - 'text' => 46, - 'constant' => 43 + "}" => 185, + "," => 186 } }, {#State 162 ACTIONS => { - ";" => 181 - } + "," => 187 + }, + DEFAULT => -61 }, {#State 163 - ACTIONS => { - "}" => 182 - }, - DEFAULT => -91, - GOTOS => { - 'optional_base_element' => 184, - 'property_list' => 183 - } + DEFAULT => -58 }, {#State 164 ACTIONS => { - "}" => 185 - }, - DEFAULT => -91, - GOTOS => { - 'base_element' => 186, - 'property_list' => 173 + "=" => 188 } }, {#State 165 ACTIONS => { - "=" => 187 - }, - DEFAULT => -54 + "}" => 189 + } }, {#State 166 - DEFAULT => -52 + DEFAULT => -84 }, {#State 167 ACTIONS => { - "}" => 188, - "," => 189 + 'IDENTIFIER' => 22, + "signed" => 72, + 'void' => 66, + "unsigned" => 76, + "[" => 17 + }, + DEFAULT => -89, + GOTOS => { + 'existingtype' => 73, + 'bitmap' => 39, + 'usertype' => 68, + 'property_list' => 67, + 'identifier' => 69, + 'struct' => 45, + 'enum' => 49, + 'type' => 190, + 'union' => 51, + 'sign' => 70 } }, {#State 168 ACTIONS => { - "," => 190 - }, - DEFAULT => -63 + "," => 191, + ")" => 192 + } }, {#State 169 - DEFAULT => -60 + DEFAULT => -83 }, {#State 170 - ACTIONS => { - "=" => 191 - } + DEFAULT => -26 }, {#State 171 ACTIONS => { - "}" => 192 + "=" => 193 } }, {#State 172 - DEFAULT => -86 - }, - {#State 173 ACTIONS => { - 'IDENTIFIER' => 22, - "signed" => 95, - 'void' => 89, - "unsigned" => 99, - "[" => 17 + 'CONSTANT' => 56, + 'TEXT' => 13, + 'IDENTIFIER' => 22 }, - DEFAULT => -91, + DEFAULT => -99, GOTOS => { - 'existingtype' => 96, - 'bitmap' => 51, - 'usertype' => 91, - 'property_list' => 90, - 'identifier' => 92, - 'struct' => 57, - 'enum' => 61, - 'type' => 193, - 'union' => 63, - 'sign' => 93 + 'identifier' => 57, + 'anytext' => 194, + 'text' => 58, + 'constant' => 55 } }, - {#State 174 + {#State 173 ACTIONS => { - "," => 194, - ")" => 195 - } - }, - {#State 175 - DEFAULT => -85 - }, - {#State 176 - DEFAULT => -28 + "-" => 81, + ":" => 80, + "<" => 82, + "+" => 84, + "~" => 83, + "*" => 85, + "?" => 86, + "{" => 87, + "&" => 88, + "/" => 89, + "=" => 90, + "(" => 91, + "|" => 92, + "." => 93, + ">" => 94 + }, + DEFAULT => -117 }, - {#State 177 + {#State 174 ACTIONS => { - "=" => 196 - } + "-" => 81, + ":" => 80, + "<" => 82, + "+" => 84, + "~" => 83, + "*" => 85, + "?" => 86, + "{" => 87, + "&" => 88, + "/" => 89, + "=" => 90, + "(" => 91, + "|" => 92, + "." => 93, + ">" => 94 + }, + DEFAULT => -98 }, - {#State 178 + {#State 175 ACTIONS => { - 'CONSTANT' => 44, - 'TEXT' => 13, - 'IDENTIFIER' => 22 + ":" => 80, + "<" => 82, + "~" => 83, + "?" => 86, + "{" => 87, + "=" => 90 }, - DEFAULT => -101, - GOTOS => { - 'identifier' => 45, - 'anytext' => 197, - 'text' => 46, - 'constant' => 43 - } + DEFAULT => -116 }, - {#State 179 + {#State 176 ACTIONS => { - "[" => 161 + "[" => 155 }, - DEFAULT => -88, + DEFAULT => -86, GOTOS => { - 'array_len' => 198 + 'array_len' => 195 } }, - {#State 180 + {#State 177 ACTIONS => { - "-" => 65, - ":" => 64, - "?" => 66, - "<" => 67, - "+" => 69, - "~" => 68, - "&" => 71, - "{" => 70, - "/" => 72, - "=" => 73, - "|" => 75, - "(" => 74, - "*" => 76, - "." => 77, - "]" => 199, - ">" => 78 + "-" => 81, + ":" => 80, + "?" => 86, + "<" => 82, + "+" => 84, + "~" => 83, + "&" => 88, + "{" => 87, + "/" => 89, + "=" => 90, + "|" => 92, + "(" => 91, + "*" => 85, + "." => 93, + "]" => 196, + ">" => 94 } }, - {#State 181 - DEFAULT => -35 + {#State 178 + DEFAULT => -33 }, - {#State 182 - DEFAULT => -75 + {#State 179 + DEFAULT => -73 }, - {#State 183 + {#State 180 ACTIONS => { "[" => 17 }, - DEFAULT => -91, + DEFAULT => -89, GOTOS => { - 'base_or_empty' => 200, - 'base_element' => 201, - 'empty_element' => 202, - 'property_list' => 203 + 'base_or_empty' => 197, + 'base_element' => 198, + 'empty_element' => 199, + 'property_list' => 200 } }, - {#State 184 - DEFAULT => -74 + {#State 181 + DEFAULT => -72 }, - {#State 185 - DEFAULT => -65 + {#State 182 + DEFAULT => -63 }, - {#State 186 + {#State 183 ACTIONS => { - ";" => 204 + ";" => 201 } }, - {#State 187 + {#State 184 ACTIONS => { - 'CONSTANT' => 44, + 'CONSTANT' => 56, 'TEXT' => 13, 'IDENTIFIER' => 22 }, - DEFAULT => -101, + DEFAULT => -99, GOTOS => { - 'identifier' => 45, - 'anytext' => 205, - 'text' => 46, - 'constant' => 43 + 'identifier' => 57, + 'anytext' => 202, + 'text' => 58, + 'constant' => 55 } }, - {#State 188 - DEFAULT => -48 + {#State 185 + DEFAULT => -46 }, - {#State 189 + {#State 186 ACTIONS => { 'IDENTIFIER' => 22 }, GOTOS => { - 'identifier' => 165, - 'enum_element' => 206 + 'identifier' => 159, + 'enum_element' => 203 } }, - {#State 190 + {#State 187 ACTIONS => { 'IDENTIFIER' => 22 }, GOTOS => { - 'identifier' => 170, - 'bitmap_element' => 207 + 'identifier' => 164, + 'bitmap_element' => 204 } }, - {#State 191 + {#State 188 ACTIONS => { - 'CONSTANT' => 44, + 'CONSTANT' => 56, 'TEXT' => 13, 'IDENTIFIER' => 22 }, - DEFAULT => -101, + DEFAULT => -99, GOTOS => { - 'identifier' => 45, - 'anytext' => 208, - 'text' => 46, - 'constant' => 43 + 'identifier' => 57, + 'anytext' => 205, + 'text' => 58, + 'constant' => 55 } }, - {#State 192 - DEFAULT => -56 + {#State 189 + DEFAULT => -54 }, - {#State 193 - DEFAULT => -80, + {#State 190 + DEFAULT => -78, GOTOS => { - 'pointers' => 209 + 'pointers' => 206 } }, - {#State 194 - DEFAULT => -91, + {#State 191 + DEFAULT => -89, GOTOS => { - 'base_element' => 210, - 'property_list' => 173 + 'base_element' => 207, + 'property_list' => 167 } }, - {#State 195 + {#State 192 ACTIONS => { - ";" => 211 + ";" => 208 } }, - {#State 196 + {#State 193 ACTIONS => { - 'CONSTANT' => 44, + 'CONSTANT' => 56, 'TEXT' => 13, 'IDENTIFIER' => 22 }, - DEFAULT => -101, + DEFAULT => -99, GOTOS => { - 'identifier' => 45, - 'anytext' => 212, - 'text' => 46, - 'constant' => 43 + 'identifier' => 57, + 'anytext' => 209, + 'text' => 58, + 'constant' => 55 } }, - {#State 197 + {#State 194 ACTIONS => { - "-" => 65, - ":" => 64, - "?" => 66, - "<" => 67, - ";" => 213, - "+" => 69, - "~" => 68, - "&" => 71, - "{" => 70, - "/" => 72, - "=" => 73, - "|" => 75, - "(" => 74, - "*" => 76, - "." => 77, - ">" => 78 + "-" => 81, + ":" => 80, + "?" => 86, + "<" => 82, + ";" => 210, + "+" => 84, + "~" => 83, + "&" => 88, + "{" => 87, + "/" => 89, + "=" => 90, + "|" => 92, + "(" => 91, + "*" => 85, + "." => 93, + ">" => 94 } }, - {#State 198 - DEFAULT => -89 + {#State 195 + DEFAULT => -87 }, - {#State 199 + {#State 196 ACTIONS => { - "[" => 161 + "[" => 155 }, - DEFAULT => -88, + DEFAULT => -86, GOTOS => { - 'array_len' => 214 + 'array_len' => 211 } }, - {#State 200 - DEFAULT => -72 + {#State 197 + DEFAULT => -70 }, - {#State 201 + {#State 198 ACTIONS => { - ";" => 215 + ";" => 212 } }, - {#State 202 - DEFAULT => -71 + {#State 199 + DEFAULT => -69 }, - {#State 203 + {#State 200 ACTIONS => { 'IDENTIFIER' => 22, - "signed" => 95, - ";" => 216, - 'void' => 89, - "unsigned" => 99, + "signed" => 72, + ";" => 213, + 'void' => 66, + "unsigned" => 76, "[" => 17 }, - DEFAULT => -91, + DEFAULT => -89, GOTOS => { - 'existingtype' => 96, - 'bitmap' => 51, - 'usertype' => 91, - 'property_list' => 90, - 'identifier' => 92, - 'struct' => 57, - 'enum' => 61, - 'type' => 193, - 'union' => 63, - 'sign' => 93 + 'existingtype' => 73, + 'bitmap' => 39, + 'usertype' => 68, + 'property_list' => 67, + 'identifier' => 69, + 'struct' => 45, + 'enum' => 49, + 'type' => 190, + 'union' => 51, + 'sign' => 70 } }, + {#State 201 + DEFAULT => -81 + }, + {#State 202 + ACTIONS => { + "-" => 81, + ":" => 80, + "<" => 82, + "+" => 84, + "~" => 83, + "*" => 85, + "?" => 86, + "{" => 87, + "&" => 88, + "/" => 89, + "=" => 90, + "(" => 91, + "|" => 92, + "." => 93, + ">" => 94 + }, + DEFAULT => -53 + }, + {#State 203 + DEFAULT => -51 + }, {#State 204 - DEFAULT => -83 + DEFAULT => -59 }, {#State 205 ACTIONS => { - "-" => 65, - ":" => 64, - "<" => 67, - "+" => 69, - "~" => 68, - "*" => 76, - "?" => 66, - "{" => 70, - "&" => 71, - "/" => 72, - "=" => 73, - "(" => 74, - "|" => 75, - "." => 77, - ">" => 78 - }, - DEFAULT => -55 + "-" => 81, + ":" => 80, + "<" => 82, + "+" => 84, + "~" => 83, + "*" => 85, + "?" => 86, + "{" => 87, + "&" => 88, + "/" => 89, + "=" => 90, + "(" => 91, + "|" => 92, + "." => 93, + ">" => 94 + }, + DEFAULT => -62 }, {#State 206 - DEFAULT => -53 + ACTIONS => { + 'IDENTIFIER' => 22, + "*" => 151 + }, + GOTOS => { + 'identifier' => 214 + } }, {#State 207 - DEFAULT => -61 + DEFAULT => -85 }, {#State 208 - ACTIONS => { - "-" => 65, - ":" => 64, - "<" => 67, - "+" => 69, - "~" => 68, - "*" => 76, - "?" => 66, - "{" => 70, - "&" => 71, - "/" => 72, - "=" => 73, - "(" => 74, - "|" => 75, - "." => 77, - ">" => 78 - }, - DEFAULT => -64 + DEFAULT => -25 }, {#State 209 ACTIONS => { - 'IDENTIFIER' => 22, - "*" => 157 - }, - GOTOS => { - 'identifier' => 217 + "-" => 81, + ":" => 80, + "?" => 86, + "<" => 82, + ";" => 215, + "+" => 84, + "~" => 83, + "&" => 88, + "{" => 87, + "/" => 89, + "=" => 90, + "|" => 92, + "(" => 91, + "*" => 85, + "." => 93, + ">" => 94 } }, {#State 210 - DEFAULT => -87 + DEFAULT => -23 }, {#State 211 - DEFAULT => -27 + DEFAULT => -88 }, {#State 212 - ACTIONS => { - "-" => 65, - ":" => 64, - "?" => 66, - "<" => 67, - ";" => 218, - "+" => 69, - "~" => 68, - "&" => 71, - "{" => 70, - "/" => 72, - "=" => 73, - "|" => 75, - "(" => 74, - "*" => 76, - "." => 77, - ">" => 78 - } + DEFAULT => -68 }, {#State 213 - DEFAULT => -25 + DEFAULT => -67 }, {#State 214 - DEFAULT => -90 - }, - {#State 215 - DEFAULT => -70 - }, - {#State 216 - DEFAULT => -69 - }, - {#State 217 ACTIONS => { - "[" => 161 + "[" => 155 }, - DEFAULT => -88, + DEFAULT => -86, GOTOS => { - 'array_len' => 219 + 'array_len' => 216 } }, - {#State 218 - DEFAULT => -26 + {#State 215 + DEFAULT => -24 }, - {#State 219 - DEFAULT => -79 + {#State 216 + DEFAULT => -77 } ], yyrules => @@ -1894,59 +1874,49 @@ sub { push(@{$_[1]}, $_[2]); $_[1] } ], [#Rule 15 - 'interface', 8, + 'interface', 7, sub #line 70 "idl.yp" {{ "TYPE" => "INTERFACE", "PROPERTIES" => $_[1], "NAME" => $_[3], - "BASE" => $_[4], - "DATA" => $_[6], + "DATA" => $_[5], "FILE" => $_[0]->YYData->{FILE}, "LINE" => $_[0]->YYData->{LINE}, }} ], [#Rule 16 - 'base_interface', 0, undef - ], - [#Rule 17 - 'base_interface', 2, -sub -#line 83 "idl.yp" -{ $_[2] } - ], - [#Rule 18 'definitions', 1, sub -#line 87 "idl.yp" +#line 81 "idl.yp" { [ $_[1] ] } ], - [#Rule 19 + [#Rule 17 'definitions', 2, sub -#line 88 "idl.yp" +#line 82 "idl.yp" { push(@{$_[1]}, $_[2]); $_[1] } ], - [#Rule 20 + [#Rule 18 'definition', 1, undef ], - [#Rule 21 + [#Rule 19 'definition', 1, undef ], - [#Rule 22 + [#Rule 20 'definition', 1, undef ], - [#Rule 23 + [#Rule 21 'definition', 1, undef ], - [#Rule 24 + [#Rule 22 'definition', 1, undef ], - [#Rule 25 + [#Rule 23 'const', 7, sub -#line 96 "idl.yp" +#line 90 "idl.yp" {{ "TYPE" => "CONST", "DTYPE" => $_[2], @@ -1957,10 +1927,10 @@ sub "LINE" => $_[0]->YYData->{LINE}, }} ], - [#Rule 26 + [#Rule 24 'const', 8, sub -#line 106 "idl.yp" +#line 100 "idl.yp" {{ "TYPE" => "CONST", "DTYPE" => $_[2], @@ -1972,10 +1942,10 @@ sub "LINE" => $_[0]->YYData->{LINE}, }} ], - [#Rule 27 + [#Rule 25 'function', 7, sub -#line 120 "idl.yp" +#line 114 "idl.yp" {{ "TYPE" => "FUNCTION", "NAME" => $_[3], @@ -1986,10 +1956,10 @@ sub "LINE" => $_[0]->YYData->{LINE}, }} ], - [#Rule 28 + [#Rule 26 'declare', 5, sub -#line 132 "idl.yp" +#line 126 "idl.yp" {{ "TYPE" => "DECLARE", "PROPERTIES" => $_[2], @@ -1999,43 +1969,43 @@ sub "LINE" => $_[0]->YYData->{LINE}, }} ], - [#Rule 29 + [#Rule 27 'decl_type', 1, undef ], - [#Rule 30 + [#Rule 28 'decl_type', 1, undef ], - [#Rule 31 + [#Rule 29 'decl_type', 1, undef ], - [#Rule 32 + [#Rule 30 'decl_enum', 1, sub -#line 146 "idl.yp" +#line 140 "idl.yp" {{ "TYPE" => "ENUM" }} ], - [#Rule 33 + [#Rule 31 'decl_bitmap', 1, sub -#line 152 "idl.yp" +#line 146 "idl.yp" {{ "TYPE" => "BITMAP" }} ], - [#Rule 34 + [#Rule 32 'decl_union', 1, sub -#line 158 "idl.yp" +#line 152 "idl.yp" {{ "TYPE" => "UNION" }} ], - [#Rule 35 + [#Rule 33 'typedef', 6, sub -#line 164 "idl.yp" +#line 158 "idl.yp" {{ "TYPE" => "TYPEDEF", "PROPERTIES" => $_[1], @@ -2046,67 +2016,67 @@ sub "LINE" => $_[0]->YYData->{LINE}, }} ], - [#Rule 36 + [#Rule 34 'usertype', 1, undef ], - [#Rule 37 + [#Rule 35 'usertype', 1, undef ], - [#Rule 38 + [#Rule 36 'usertype', 1, undef ], - [#Rule 39 + [#Rule 37 'usertype', 1, undef ], - [#Rule 40 + [#Rule 38 'typedecl', 2, sub -#line 177 "idl.yp" +#line 171 "idl.yp" { $_[1] } ], - [#Rule 41 + [#Rule 39 'sign', 1, undef ], - [#Rule 42 + [#Rule 40 'sign', 1, undef ], - [#Rule 43 + [#Rule 41 'existingtype', 2, sub -#line 182 "idl.yp" +#line 176 "idl.yp" { ($_[1]?$_[1]:"signed") ." $_[2]" } ], - [#Rule 44 + [#Rule 42 'existingtype', 1, undef ], - [#Rule 45 + [#Rule 43 'type', 1, undef ], - [#Rule 46 + [#Rule 44 'type', 1, undef ], - [#Rule 47 + [#Rule 45 'type', 1, sub -#line 186 "idl.yp" +#line 180 "idl.yp" { "void" } ], - [#Rule 48 + [#Rule 46 'enum_body', 3, sub -#line 188 "idl.yp" +#line 182 "idl.yp" { $_[2] } ], - [#Rule 49 + [#Rule 47 'opt_enum_body', 0, undef ], - [#Rule 50 + [#Rule 48 'opt_enum_body', 1, undef ], - [#Rule 51 + [#Rule 49 'enum', 4, sub -#line 191 "idl.yp" +#line 185 "idl.yp" {{ "TYPE" => "ENUM", "PROPERTIES" => $_[1], @@ -2114,43 +2084,43 @@ sub "ELEMENTS" => $_[4] }} ], - [#Rule 52 + [#Rule 50 'enum_elements', 1, sub -#line 200 "idl.yp" +#line 194 "idl.yp" { [ $_[1] ] } ], - [#Rule 53 + [#Rule 51 'enum_elements', 3, sub -#line 201 "idl.yp" +#line 195 "idl.yp" { push(@{$_[1]}, $_[3]); $_[1] } ], - [#Rule 54 + [#Rule 52 'enum_element', 1, undef ], - [#Rule 55 + [#Rule 53 'enum_element', 3, sub -#line 205 "idl.yp" +#line 199 "idl.yp" { "$_[1]$_[2]$_[3]" } ], - [#Rule 56 + [#Rule 54 'bitmap_body', 3, sub -#line 208 "idl.yp" +#line 202 "idl.yp" { $_[2] } ], - [#Rule 57 + [#Rule 55 'opt_bitmap_body', 0, undef ], - [#Rule 58 + [#Rule 56 'opt_bitmap_body', 1, undef ], - [#Rule 59 + [#Rule 57 'bitmap', 4, sub -#line 211 "idl.yp" +#line 205 "idl.yp" {{ "TYPE" => "BITMAP", "PROPERTIES" => $_[1], @@ -2158,46 +2128,46 @@ sub "ELEMENTS" => $_[4] }} ], - [#Rule 60 + [#Rule 58 'bitmap_elements', 1, sub -#line 220 "idl.yp" +#line 214 "idl.yp" { [ $_[1] ] } ], - [#Rule 61 + [#Rule 59 'bitmap_elements', 3, sub -#line 221 "idl.yp" +#line 215 "idl.yp" { push(@{$_[1]}, $_[3]); $_[1] } ], - [#Rule 62 + [#Rule 60 'opt_bitmap_elements', 0, undef ], - [#Rule 63 + [#Rule 61 'opt_bitmap_elements', 1, undef ], - [#Rule 64 + [#Rule 62 'bitmap_element', 3, sub -#line 226 "idl.yp" +#line 220 "idl.yp" { "$_[1] ( $_[3] )" } ], - [#Rule 65 + [#Rule 63 'struct_body', 3, sub -#line 229 "idl.yp" +#line 223 "idl.yp" { $_[2] } ], - [#Rule 66 + [#Rule 64 'opt_struct_body', 0, undef ], - [#Rule 67 + [#Rule 65 'opt_struct_body', 1, undef ], - [#Rule 68 + [#Rule 66 'struct', 4, sub -#line 233 "idl.yp" +#line 227 "idl.yp" {{ "TYPE" => "STRUCT", "PROPERTIES" => $_[1], @@ -2205,10 +2175,10 @@ sub "ELEMENTS" => $_[4] }} ], - [#Rule 69 + [#Rule 67 'empty_element', 2, sub -#line 242 "idl.yp" +#line 236 "idl.yp" {{ "NAME" => "", "TYPE" => "EMPTY", @@ -2219,43 +2189,43 @@ sub "LINE" => $_[0]->YYData->{LINE}, }} ], - [#Rule 70 + [#Rule 68 'base_or_empty', 2, undef ], - [#Rule 71 + [#Rule 69 'base_or_empty', 1, undef ], - [#Rule 72 + [#Rule 70 'optional_base_element', 2, sub -#line 256 "idl.yp" +#line 250 "idl.yp" { $_[2]->{PROPERTIES} = FlattenHash([$_[1],$_[2]->{PROPERTIES}]); $_[2] } ], - [#Rule 73 + [#Rule 71 'union_elements', 0, undef ], - [#Rule 74 + [#Rule 72 'union_elements', 2, sub -#line 261 "idl.yp" +#line 255 "idl.yp" { push(@{$_[1]}, $_[2]); $_[1] } ], - [#Rule 75 + [#Rule 73 'union_body', 3, sub -#line 264 "idl.yp" +#line 258 "idl.yp" { $_[2] } ], - [#Rule 76 + [#Rule 74 'opt_union_body', 0, undef ], - [#Rule 77 + [#Rule 75 'opt_union_body', 1, undef ], - [#Rule 78 + [#Rule 76 'union', 4, sub -#line 268 "idl.yp" +#line 262 "idl.yp" {{ "TYPE" => "UNION", "PROPERTIES" => $_[1], @@ -2263,10 +2233,10 @@ sub "ELEMENTS" => $_[4] }} ], - [#Rule 79 + [#Rule 77 'base_element', 5, sub -#line 277 "idl.yp" +#line 271 "idl.yp" {{ "NAME" => $_[4], "TYPE" => $_[2], @@ -2277,238 +2247,241 @@ sub "LINE" => $_[0]->YYData->{LINE}, }} ], - [#Rule 80 + [#Rule 78 'pointers', 0, sub -#line 291 "idl.yp" +#line 285 "idl.yp" { 0 } ], - [#Rule 81 + [#Rule 79 'pointers', 2, sub -#line 292 "idl.yp" +#line 286 "idl.yp" { $_[1]+1 } ], - [#Rule 82 - 'element_list1', 0, undef + [#Rule 80 + 'element_list1', 0, +sub +#line 290 "idl.yp" +{ [] } ], - [#Rule 83 + [#Rule 81 'element_list1', 3, sub -#line 297 "idl.yp" +#line 291 "idl.yp" { push(@{$_[1]}, $_[2]); $_[1] } ], - [#Rule 84 + [#Rule 82 'element_list2', 0, undef ], - [#Rule 85 + [#Rule 83 'element_list2', 1, undef ], - [#Rule 86 + [#Rule 84 'element_list2', 1, sub -#line 303 "idl.yp" +#line 297 "idl.yp" { [ $_[1] ] } ], - [#Rule 87 + [#Rule 85 'element_list2', 3, sub -#line 304 "idl.yp" +#line 298 "idl.yp" { push(@{$_[1]}, $_[3]); $_[1] } ], - [#Rule 88 + [#Rule 86 'array_len', 0, undef ], - [#Rule 89 + [#Rule 87 'array_len', 3, sub -#line 309 "idl.yp" +#line 303 "idl.yp" { push(@{$_[3]}, "*"); $_[3] } ], - [#Rule 90 + [#Rule 88 'array_len', 4, sub -#line 310 "idl.yp" +#line 304 "idl.yp" { push(@{$_[4]}, "$_[2]"); $_[4] } ], - [#Rule 91 + [#Rule 89 'property_list', 0, undef ], - [#Rule 92 + [#Rule 90 'property_list', 4, sub -#line 316 "idl.yp" +#line 310 "idl.yp" { FlattenHash([$_[1],$_[3]]); } ], - [#Rule 93 + [#Rule 91 'properties', 1, sub -#line 319 "idl.yp" +#line 313 "idl.yp" { $_[1] } ], - [#Rule 94 + [#Rule 92 'properties', 3, sub -#line 320 "idl.yp" +#line 314 "idl.yp" { FlattenHash([$_[1], $_[3]]); } ], - [#Rule 95 + [#Rule 93 'property', 1, sub -#line 323 "idl.yp" +#line 317 "idl.yp" {{ "$_[1]" => "1" }} ], - [#Rule 96 + [#Rule 94 'property', 4, sub -#line 324 "idl.yp" +#line 318 "idl.yp" {{ "$_[1]" => "$_[3]" }} ], - [#Rule 97 + [#Rule 95 'listtext', 1, undef ], - [#Rule 98 + [#Rule 96 'listtext', 3, sub -#line 329 "idl.yp" +#line 323 "idl.yp" { "$_[1] $_[3]" } ], - [#Rule 99 + [#Rule 97 'commalisttext', 1, undef ], - [#Rule 100 + [#Rule 98 'commalisttext', 3, sub -#line 334 "idl.yp" +#line 328 "idl.yp" { "$_[1],$_[3]" } ], - [#Rule 101 + [#Rule 99 'anytext', 0, sub -#line 338 "idl.yp" +#line 332 "idl.yp" { "" } ], + [#Rule 100 + 'anytext', 1, undef + ], + [#Rule 101 + 'anytext', 1, undef + ], [#Rule 102 'anytext', 1, undef ], [#Rule 103 - 'anytext', 1, undef + 'anytext', 3, +sub +#line 334 "idl.yp" +{ "$_[1]$_[2]$_[3]" } ], [#Rule 104 - 'anytext', 1, undef + 'anytext', 3, +sub +#line 335 "idl.yp" +{ "$_[1]$_[2]$_[3]" } ], [#Rule 105 'anytext', 3, sub -#line 340 "idl.yp" +#line 336 "idl.yp" { "$_[1]$_[2]$_[3]" } ], [#Rule 106 'anytext', 3, sub -#line 341 "idl.yp" +#line 337 "idl.yp" { "$_[1]$_[2]$_[3]" } ], [#Rule 107 'anytext', 3, sub -#line 342 "idl.yp" +#line 338 "idl.yp" { "$_[1]$_[2]$_[3]" } ], [#Rule 108 'anytext', 3, sub -#line 343 "idl.yp" +#line 339 "idl.yp" { "$_[1]$_[2]$_[3]" } ], [#Rule 109 'anytext', 3, sub -#line 344 "idl.yp" +#line 340 "idl.yp" { "$_[1]$_[2]$_[3]" } ], [#Rule 110 'anytext', 3, sub -#line 345 "idl.yp" +#line 341 "idl.yp" { "$_[1]$_[2]$_[3]" } ], [#Rule 111 'anytext', 3, sub -#line 346 "idl.yp" +#line 342 "idl.yp" { "$_[1]$_[2]$_[3]" } ], [#Rule 112 'anytext', 3, sub -#line 347 "idl.yp" +#line 343 "idl.yp" { "$_[1]$_[2]$_[3]" } ], [#Rule 113 'anytext', 3, sub -#line 348 "idl.yp" +#line 344 "idl.yp" { "$_[1]$_[2]$_[3]" } ], [#Rule 114 'anytext', 3, sub -#line 349 "idl.yp" +#line 345 "idl.yp" { "$_[1]$_[2]$_[3]" } ], [#Rule 115 'anytext', 3, sub -#line 350 "idl.yp" +#line 346 "idl.yp" { "$_[1]$_[2]$_[3]" } ], [#Rule 116 - 'anytext', 3, -sub -#line 351 "idl.yp" -{ "$_[1]$_[2]$_[3]" } - ], - [#Rule 117 - 'anytext', 3, -sub -#line 352 "idl.yp" -{ "$_[1]$_[2]$_[3]" } - ], - [#Rule 118 'anytext', 5, sub -#line 353 "idl.yp" +#line 347 "idl.yp" { "$_[1]$_[2]$_[3]$_[4]$_[5]" } ], - [#Rule 119 + [#Rule 117 'anytext', 5, sub -#line 354 "idl.yp" +#line 348 "idl.yp" { "$_[1]$_[2]$_[3]$_[4]$_[5]" } ], - [#Rule 120 + [#Rule 118 'identifier', 1, undef ], - [#Rule 121 + [#Rule 119 'optional_identifier', 1, undef ], - [#Rule 122 + [#Rule 120 'optional_identifier', 0, undef ], - [#Rule 123 + [#Rule 121 'constant', 1, undef ], - [#Rule 124 + [#Rule 122 'text', 1, sub -#line 368 "idl.yp" +#line 362 "idl.yp" { "\"$_[1]\"" } ], - [#Rule 125 + [#Rule 123 'optional_semicolon', 0, undef ], - [#Rule 126 + [#Rule 124 'optional_semicolon', 1, undef ] ], @@ -2516,7 +2489,7 @@ sub bless($self,$class); } -#line 379 "idl.yp" +#line 373 "idl.yp" use Parse::Pidl qw(error); @@ -2548,10 +2521,6 @@ sub CleanData($) if (ref($v) eq "ARRAY") { foreach my $i (0 .. $#{$v}) { CleanData($v->[$i]); - if (ref($v->[$i]) eq "ARRAY" && $#{$v->[$i]}==-1) { - $v->[$i] = undef; - next; - } } # this removes any undefined elements from the array @{$v} = grep { defined $_ } @{$v}; @@ -2559,7 +2528,6 @@ sub CleanData($) foreach my $x (keys %{$v}) { CleanData($v->{$x}); if (!defined $v->{$x}) { delete($v->{$x}); next; } - if (ref($v->{$x}) eq "ARRAY" && $#{$v->{$x}}==-1) { delete($v->{$x}); next; } } } return $v; diff --git a/source4/pidl/lib/Parse/Pidl/NDR.pm b/source4/pidl/lib/Parse/Pidl/NDR.pm index f05e3120c7..88420374ee 100644 --- a/source4/pidl/lib/Parse/Pidl/NDR.pm +++ b/source4/pidl/lib/Parse/Pidl/NDR.pm @@ -271,10 +271,13 @@ sub GetElementLevelTable($) ##################################################################### # see if a type contains any deferred data -sub can_contain_deferred +sub can_contain_deferred($) { + sub can_contain_deferred($); my $e = shift; + print "$e->{NAME}\n"; + return 0 if (Parse::Pidl::Typelist::is_scalar($e->{TYPE})); return 1 unless (hasType($e->{TYPE})); # assume the worst diff --git a/source4/pidl/tests/header.pl b/source4/pidl/tests/header.pl index 7092eb0d14..bb09969d0f 100755 --- a/source4/pidl/tests/header.pl +++ b/source4/pidl/tests/header.pl @@ -4,7 +4,7 @@ use strict; use warnings; -use Test::More tests => 12; +use Test::More tests => 14; use FindBin qw($RealBin); use lib "$RealBin"; use Util; @@ -42,3 +42,9 @@ like(parse_idl("interface p { struct x { struct y z; }; };"), like(parse_idl("interface p { struct x { union y z; }; };"), qr/struct x.*{.*union y z;.*}.*;/sm, "tagged type union member"); + +like(parse_idl("interface p { struct x { }; };"), + qr/struct x.*{.*char _empty_;.*}.*;/sm, "empty struct"); + +like(parse_idl("interface p { struct x; };"), + qr/struct x;/sm, "struct declaration"); diff --git a/source4/pidl/tests/parse_idl.pl b/source4/pidl/tests/parse_idl.pl index 265ac7a2bd..727f41a293 100755 --- a/source4/pidl/tests/parse_idl.pl +++ b/source4/pidl/tests/parse_idl.pl @@ -4,7 +4,7 @@ # Published under the GNU General Public License use strict; -use Test::More tests => 62 * 2; +use Test::More tests => 63 * 2 + 2; use FindBin qw($RealBin); use lib "$RealBin"; use Util qw(test_errors); @@ -107,3 +107,17 @@ testfail "import-nosemicolon", "import \"foo.idl\"", "<import-nosemicolon>:0: Syntax error near 'foo.idl'\n"; testok "import-multiple", "import \"foo.idl\", \"bar.idl\";"; testok "include-multiple", "include \"foo.idl\", \"bar.idl\";"; +testok "empty-struct", "interface test { struct foo { }; }"; + +my $x = Parse::Pidl::IDL::parse_string("interface foo { struct x {}; }", "<foo>"); + +is_deeply($x, + [ { 'FILE' => '<foo>', 'NAME' => 'foo', 'DATA' => [ + { 'NAME' => 'x', 'TYPE' => 'STRUCT', ELEMENTS => [] } ], + 'TYPE' => 'INTERFACE', 'LINE' => 0 } ]); + +$x = Parse::Pidl::IDL::parse_string("interface foo { struct x; }", "<foo>"); +is_deeply($x, + [ { 'FILE' => '<foo>', 'NAME' => 'foo', 'DATA' => [ + { 'NAME' => 'x', 'TYPE' => 'STRUCT' } ], + 'TYPE' => 'INTERFACE', 'LINE' => 0 } ]); |