summaryrefslogtreecommitdiff
path: root/source4/pidl
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2007-02-18 16:21:28 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:48:32 -0500
commit8cf122c2d2a0913fd9a7c55032c549598844111c (patch)
treef2e5612d40c043d0c3a2a755fecac9ee8af16d48 /source4/pidl
parent069f0cc15bfe6ba38950d8b5a0b2befb74aa397e (diff)
downloadsamba-8cf122c2d2a0913fd9a7c55032c549598844111c.tar.gz
samba-8cf122c2d2a0913fd9a7c55032c549598844111c.tar.bz2
samba-8cf122c2d2a0913fd9a7c55032c549598844111c.zip
r21430: Support tagged types without typedef. This means:
struct foo { ... }; in IDL will now work. This is the first step towards nested types and using typedefs for partial types (such as "typedef int *bar;"), a requirement for complex uses of represent_as(). (This used to be commit a716aa70f0c90898e6fcf57d63a2cf4c40e7d4df)
Diffstat (limited to 'source4/pidl')
-rw-r--r--source4/pidl/TODO7
-rw-r--r--source4/pidl/idl.yp32
-rw-r--r--source4/pidl/lib/Parse/Pidl/Expr.pm72
-rw-r--r--source4/pidl/lib/Parse/Pidl/IDL.pm1786
-rw-r--r--source4/pidl/lib/Parse/Pidl/NDR.pm84
-rw-r--r--source4/pidl/lib/Parse/Pidl/Samba4/Header.pm10
-rw-r--r--source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm213
-rw-r--r--source4/pidl/tests/Util.pm1
-rwxr-xr-xsource4/pidl/tests/header.pl4
-rwxr-xr-xsource4/pidl/tests/ndr_deprecations.pl2
-rwxr-xr-xsource4/pidl/tests/ndr_tagtype.pl12
-rwxr-xr-xsource4/pidl/tests/parse_idl.pl6
-rwxr-xr-xsource4/pidl/tests/samba-ndr.pl14
13 files changed, 1161 insertions, 1082 deletions
diff --git a/source4/pidl/TODO b/source4/pidl/TODO
index 4e344e3c37..2d4ca8a265 100644
--- a/source4/pidl/TODO
+++ b/source4/pidl/TODO
@@ -7,10 +7,11 @@
- strip out pidl-specific properties
- support nested elements
- - generate names for anonymous tagged types
+ - allow non-typedef structs
+ - generate names for anonymous tagged types. Simple MD5Sum of contents?
- support typedefs properly
-
-- improve represent_as(): allow it to be used for arrays and other complex types
+ - improve represent_as(): allow it to be used for arrays and other complex
+ types
- --explain-ndr option that dumps out parse tree ?
diff --git a/source4/pidl/idl.yp b/source4/pidl/idl.yp
index 5ef4dca379..3ca02c3872 100644
--- a/source4/pidl/idl.yp
+++ b/source4/pidl/idl.yp
@@ -160,10 +160,10 @@ decl_union: 'union'
}}
;
-typedef: 'typedef' property_list type identifier array_len ';'
+typedef: property_list 'typedef' type identifier array_len ';'
{{
"TYPE" => "TYPEDEF",
- "PROPERTIES" => $_[2],
+ "PROPERTIES" => $_[1],
"NAME" => $_[4],
"DATA" => $_[3],
"ARRAY_LEN" => $_[5],
@@ -187,11 +187,12 @@ type: usertype | existingtype | void { "void" } ;
enum_body: '{' enum_elements '}' { $_[2] };
opt_enum_body: | enum_body;
-enum: 'enum' optional_identifier opt_enum_body
+enum: property_list 'enum' optional_identifier opt_enum_body
{{
"TYPE" => "ENUM",
- "NAME" => $_[2],
- "ELEMENTS" => $_[3]
+ "PROPERTIES" => $_[1],
+ "NAME" => $_[3],
+ "ELEMENTS" => $_[4]
}}
;
@@ -206,11 +207,12 @@ enum_element: identifier
bitmap_body: '{' opt_bitmap_elements '}' { $_[2] };
opt_bitmap_body: | bitmap_body;
-bitmap: 'bitmap' optional_identifier opt_bitmap_body
+bitmap: property_list 'bitmap' optional_identifier opt_bitmap_body
{{
"TYPE" => "BITMAP",
- "NAME" => $_[2],
- "ELEMENTS" => $_[3]
+ "PROPERTIES" => $_[1],
+ "NAME" => $_[3],
+ "ELEMENTS" => $_[4]
}}
;
@@ -227,11 +229,12 @@ bitmap_element: identifier '=' anytext { "$_[1] ( $_[3] )" }
struct_body: '{' element_list1 '}' { $_[2] };
opt_struct_body: | struct_body;
-struct: 'struct' optional_identifier opt_struct_body
+struct: property_list 'struct' optional_identifier opt_struct_body
{{
"TYPE" => "STRUCT",
- "NAME" => $_[2],
- "ELEMENTS" => $_[3]
+ "PROPERTIES" => $_[1],
+ "NAME" => $_[3],
+ "ELEMENTS" => $_[4]
}}
;
@@ -261,11 +264,12 @@ union_elements:
union_body: '{' union_elements '}' { $_[2] };
opt_union_body: | union_body;
-union: 'union' optional_identifier opt_union_body
+union: property_list 'union' optional_identifier opt_union_body
{{
"TYPE" => "UNION",
- "NAME" => $_[2],
- "ELEMENTS" => $_[3]
+ "PROPERTIES" => $_[1],
+ "NAME" => $_[3],
+ "ELEMENTS" => $_[4]
}}
;
diff --git a/source4/pidl/lib/Parse/Pidl/Expr.pm b/source4/pidl/lib/Parse/Pidl/Expr.pm
index f64db508d6..4e02be0575 100644
--- a/source4/pidl/lib/Parse/Pidl/Expr.pm
+++ b/source4/pidl/lib/Parse/Pidl/Expr.pm
@@ -1127,7 +1127,7 @@ sub new {
[#Rule 2
'exp', 1,
sub
-#line 22 "expr.yp"
+#line 22 "pidl/expr.yp"
{ "\"$_[1]\"" }
],
[#Rule 3
@@ -1139,199 +1139,199 @@ sub
[#Rule 5
'exp', 2,
sub
-#line 25 "expr.yp"
+#line 25 "pidl/expr.yp"
{ "~$_[2]" }
],
[#Rule 6
'exp', 3,
sub
-#line 26 "expr.yp"
+#line 26 "pidl/expr.yp"
{ "$_[1] + $_[3]" }
],
[#Rule 7
'exp', 3,
sub
-#line 27 "expr.yp"
+#line 27 "pidl/expr.yp"
{ "$_[1] - $_[3]" }
],
[#Rule 8
'exp', 3,
sub
-#line 28 "expr.yp"
+#line 28 "pidl/expr.yp"
{ "$_[1] * $_[3]" }
],
[#Rule 9
'exp', 3,
sub
-#line 29 "expr.yp"
+#line 29 "pidl/expr.yp"
{ "$_[1] % $_[3]" }
],
[#Rule 10
'exp', 3,
sub
-#line 30 "expr.yp"
+#line 30 "pidl/expr.yp"
{ "$_[1] < $_[3]" }
],
[#Rule 11
'exp', 3,
sub
-#line 31 "expr.yp"
+#line 31 "pidl/expr.yp"
{ "$_[1] > $_[3]" }
],
[#Rule 12
'exp', 3,
sub
-#line 32 "expr.yp"
+#line 32 "pidl/expr.yp"
{ "$_[1] | $_[3]" }
],
[#Rule 13
'exp', 3,
sub
-#line 33 "expr.yp"
+#line 33 "pidl/expr.yp"
{ "$_[1] == $_[3]" }
],
[#Rule 14
'exp', 3,
sub
-#line 34 "expr.yp"
+#line 34 "pidl/expr.yp"
{ "$_[1] <= $_[3]" }
],
[#Rule 15
'exp', 3,
sub
-#line 35 "expr.yp"
+#line 35 "pidl/expr.yp"
{ "$_[1] => $_[3]" }
],
[#Rule 16
'exp', 3,
sub
-#line 36 "expr.yp"
+#line 36 "pidl/expr.yp"
{ "$_[1] << $_[3]" }
],
[#Rule 17
'exp', 3,
sub
-#line 37 "expr.yp"
+#line 37 "pidl/expr.yp"
{ "$_[1] >> $_[3]" }
],
[#Rule 18
'exp', 3,
sub
-#line 38 "expr.yp"
+#line 38 "pidl/expr.yp"
{ "$_[1] != $_[3]" }
],
[#Rule 19
'exp', 3,
sub
-#line 39 "expr.yp"
+#line 39 "pidl/expr.yp"
{ "$_[1] || $_[3]" }
],
[#Rule 20
'exp', 3,
sub
-#line 40 "expr.yp"
+#line 40 "pidl/expr.yp"
{ "$_[1] && $_[3]" }
],
[#Rule 21
'exp', 3,
sub
-#line 41 "expr.yp"
+#line 41 "pidl/expr.yp"
{ "$_[1] & $_[3]" }
],
[#Rule 22
'exp', 5,
sub
-#line 42 "expr.yp"
+#line 42 "pidl/expr.yp"
{ "$_[1]?$_[3]:$_[5]" }
],
[#Rule 23
'exp', 2,
sub
-#line 43 "expr.yp"
+#line 43 "pidl/expr.yp"
{ "~$_[1]" }
],
[#Rule 24
'exp', 2,
sub
-#line 44 "expr.yp"
+#line 44 "pidl/expr.yp"
{ "not $_[1]" }
],
[#Rule 25
'exp', 3,
sub
-#line 45 "expr.yp"
+#line 45 "pidl/expr.yp"
{ "$_[1] / $_[3]" }
],
[#Rule 26
'exp', 2,
sub
-#line 46 "expr.yp"
+#line 46 "pidl/expr.yp"
{ "-$_[2]" }
],
[#Rule 27
'exp', 2,
sub
-#line 47 "expr.yp"
+#line 47 "pidl/expr.yp"
{ "&$_[2]" }
],
[#Rule 28
'exp', 3,
sub
-#line 48 "expr.yp"
+#line 48 "pidl/expr.yp"
{ "$_[1]^$_[3]" }
],
[#Rule 29
'exp', 3,
sub
-#line 49 "expr.yp"
+#line 49 "pidl/expr.yp"
{ "($_[2])" }
],
[#Rule 30
'possible_pointer', 1,
sub
-#line 53 "expr.yp"
+#line 53 "pidl/expr.yp"
{ $_[0]->_Lookup($_[1]) }
],
[#Rule 31
'possible_pointer', 2,
sub
-#line 54 "expr.yp"
+#line 54 "pidl/expr.yp"
{ $_[0]->_Dereference($_[2]); "*$_[2]" }
],
[#Rule 32
'var', 1,
sub
-#line 57 "expr.yp"
+#line 57 "pidl/expr.yp"
{ $_[0]->_Use($_[1]) }
],
[#Rule 33
'var', 3,
sub
-#line 58 "expr.yp"
+#line 58 "pidl/expr.yp"
{ $_[0]->_Use("$_[1].$_[3]") }
],
[#Rule 34
'var', 3,
sub
-#line 59 "expr.yp"
+#line 59 "pidl/expr.yp"
{ "($_[2])" }
],
[#Rule 35
'var', 3,
sub
-#line 60 "expr.yp"
+#line 60 "pidl/expr.yp"
{ $_[0]->_Use("*$_[1]"); $_[1]."->".$_[3] }
],
[#Rule 36
'func', 4,
sub
-#line 64 "expr.yp"
+#line 64 "pidl/expr.yp"
{ "$_[1]($_[3])" }
],
[#Rule 37
'opt_args', 0,
sub
-#line 65 "expr.yp"
+#line 65 "pidl/expr.yp"
{ "" }
],
[#Rule 38
@@ -1349,7 +1349,7 @@ sub
[#Rule 42
'args', 3,
sub
-#line 68 "expr.yp"
+#line 68 "pidl/expr.yp"
{ "$_[1], $_[3]" }
]
],
@@ -1357,7 +1357,7 @@ sub
bless($self,$class);
}
-#line 71 "expr.yp"
+#line 71 "pidl/expr.yp"
package Parse::Pidl::Expr;
diff --git a/source4/pidl/lib/Parse/Pidl/IDL.pm b/source4/pidl/lib/Parse/Pidl/IDL.pm
index 71c4470870..e547b2caa8 100644
--- a/source4/pidl/lib/Parse/Pidl/IDL.pm
+++ b/source4/pidl/lib/Parse/Pidl/IDL.pm
@@ -258,29 +258,24 @@ sub new {
},
{#State 39
ACTIONS => {
- "typedef" => 49,
- "union" => 50,
- "enum" => 63,
- "bitmap" => 64,
"declare" => 56,
- "const" => 58,
- "struct" => 61
+ "const" => 60
},
DEFAULT => -91,
GOTOS => {
- 'typedecl' => 62,
- 'function' => 51,
- 'bitmap' => 65,
+ 'typedecl' => 49,
+ 'function' => 50,
'definitions' => 52,
+ 'bitmap' => 51,
'definition' => 55,
'property_list' => 54,
'usertype' => 53,
- 'declare' => 67,
- 'const' => 66,
+ 'const' => 59,
+ 'declare' => 58,
'struct' => 57,
- 'enum' => 59,
- 'typedef' => 60,
- 'union' => 68
+ 'typedef' => 62,
+ 'enum' => 61,
+ 'union' => 63
}
},
{#State 40
@@ -288,28 +283,28 @@ sub new {
},
{#State 41
ACTIONS => {
- "-" => 70,
- ":" => 69,
- "<" => 71,
- "+" => 73,
- "~" => 72,
- "*" => 74,
- "?" => 75,
- "{" => 76,
- "&" => 77,
- "/" => 78,
- "=" => 79,
- "(" => 80,
- "|" => 81,
- "." => 82,
- ">" => 83
+ "-" => 65,
+ ":" => 64,
+ "<" => 67,
+ "+" => 69,
+ "~" => 68,
+ "*" => 76,
+ "?" => 66,
+ "{" => 70,
+ "&" => 71,
+ "/" => 72,
+ "=" => 73,
+ "(" => 74,
+ "|" => 75,
+ "." => 77,
+ ">" => 78
},
DEFAULT => -97
},
{#State 42
ACTIONS => {
- "," => 84,
- ")" => 85
+ "," => 79,
+ ")" => 80
}
},
{#State 43
@@ -326,11 +321,11 @@ sub new {
},
{#State 47
ACTIONS => {
- ";" => 86
+ ";" => 82
},
DEFAULT => -125,
GOTOS => {
- 'optional_semicolon' => 87
+ 'optional_semicolon' => 81
}
},
{#State 48
@@ -338,81 +333,69 @@ sub new {
'IDENTIFIER' => 22
},
GOTOS => {
- 'identifier' => 88
+ 'identifier' => 83
}
},
{#State 49
- DEFAULT => -91,
- GOTOS => {
- 'property_list' => 89
- }
+ DEFAULT => -24
},
{#State 50
- ACTIONS => {
- 'IDENTIFIER' => 90
- },
- DEFAULT => -122,
- GOTOS => {
- 'optional_identifier' => 91
- }
+ DEFAULT => -20
},
{#State 51
- DEFAULT => -20
+ DEFAULT => -39
},
{#State 52
ACTIONS => {
- "}" => 92,
- "typedef" => 49,
- "union" => 50,
- "enum" => 63,
- "bitmap" => 64,
+ "}" => 84,
"declare" => 56,
- "const" => 58,
- "struct" => 61
+ "const" => 60
},
DEFAULT => -91,
GOTOS => {
- 'typedecl' => 62,
- 'function' => 51,
- 'bitmap' => 65,
- 'definition' => 93,
+ 'typedecl' => 49,
+ 'function' => 50,
+ 'bitmap' => 51,
+ 'definition' => 85,
'property_list' => 54,
'usertype' => 53,
- 'const' => 66,
+ 'const' => 59,
'struct' => 57,
- 'declare' => 67,
- 'enum' => 59,
- 'typedef' => 60,
- 'union' => 68
+ 'declare' => 58,
+ 'typedef' => 62,
+ 'enum' => 61,
+ 'union' => 63
}
},
{#State 53
ACTIONS => {
- ";" => 94
+ ";" => 86
}
},
{#State 54
ACTIONS => {
+ "typedef" => 87,
'IDENTIFIER' => 22,
- "signed" => 100,
- "union" => 50,
- "enum" => 63,
- "bitmap" => 64,
- 'void' => 95,
- "unsigned" => 101,
+ "signed" => 95,
+ "union" => 88,
+ "enum" => 97,
+ "bitmap" => 98,
+ 'void' => 89,
+ "unsigned" => 99,
"[" => 17,
- "struct" => 61
+ "struct" => 94
},
GOTOS => {
- 'existingtype' => 99,
- 'bitmap' => 65,
- 'usertype' => 96,
- 'identifier' => 97,
+ 'existingtype' => 96,
+ 'bitmap' => 51,
+ 'usertype' => 91,
+ 'property_list' => 90,
+ 'identifier' => 92,
'struct' => 57,
- 'enum' => 59,
- 'type' => 102,
- 'union' => 68,
- 'sign' => 98
+ 'enum' => 61,
+ 'type' => 100,
+ 'union' => 63,
+ 'sign' => 93
}
},
{#State 55
@@ -421,69 +404,36 @@ sub new {
{#State 56
DEFAULT => -91,
GOTOS => {
- 'property_list' => 103
+ 'property_list' => 101
}
},
{#State 57
DEFAULT => -36
},
{#State 58
- ACTIONS => {
- 'IDENTIFIER' => 22
- },
- GOTOS => {
- 'identifier' => 104
- }
+ DEFAULT => -23
},
{#State 59
- DEFAULT => -38
+ DEFAULT => -21
},
{#State 60
- DEFAULT => -22
- },
- {#State 61
ACTIONS => {
- 'IDENTIFIER' => 90
+ 'IDENTIFIER' => 22
},
- DEFAULT => -122,
GOTOS => {
- 'optional_identifier' => 105
+ 'identifier' => 102
}
},
+ {#State 61
+ DEFAULT => -38
+ },
{#State 62
- DEFAULT => -24
+ DEFAULT => -22
},
{#State 63
- ACTIONS => {
- 'IDENTIFIER' => 90
- },
- DEFAULT => -122,
- GOTOS => {
- 'optional_identifier' => 106
- }
- },
- {#State 64
- ACTIONS => {
- 'IDENTIFIER' => 90
- },
- DEFAULT => -122,
- GOTOS => {
- 'optional_identifier' => 107
- }
- },
- {#State 65
- DEFAULT => -39
- },
- {#State 66
- DEFAULT => -21
- },
- {#State 67
- DEFAULT => -23
- },
- {#State 68
DEFAULT => -37
},
- {#State 69
+ {#State 64
ACTIONS => {
'CONSTANT' => 44,
'TEXT' => 13,
@@ -492,12 +442,12 @@ sub new {
DEFAULT => -101,
GOTOS => {
'identifier' => 45,
- 'anytext' => 108,
+ 'anytext' => 103,
'text' => 46,
'constant' => 43
}
},
- {#State 70
+ {#State 65
ACTIONS => {
'CONSTANT' => 44,
'TEXT' => 13,
@@ -506,12 +456,12 @@ sub new {
DEFAULT => -101,
GOTOS => {
'identifier' => 45,
- 'anytext' => 109,
+ 'anytext' => 104,
'text' => 46,
'constant' => 43
}
},
- {#State 71
+ {#State 66
ACTIONS => {
'CONSTANT' => 44,
'TEXT' => 13,
@@ -520,12 +470,12 @@ sub new {
DEFAULT => -101,
GOTOS => {
'identifier' => 45,
- 'anytext' => 110,
+ 'anytext' => 105,
'text' => 46,
'constant' => 43
}
},
- {#State 72
+ {#State 67
ACTIONS => {
'CONSTANT' => 44,
'TEXT' => 13,
@@ -534,12 +484,12 @@ sub new {
DEFAULT => -101,
GOTOS => {
'identifier' => 45,
- 'anytext' => 111,
+ 'anytext' => 106,
'text' => 46,
'constant' => 43
}
},
- {#State 73
+ {#State 68
ACTIONS => {
'CONSTANT' => 44,
'TEXT' => 13,
@@ -548,12 +498,12 @@ sub new {
DEFAULT => -101,
GOTOS => {
'identifier' => 45,
- 'anytext' => 112,
+ 'anytext' => 107,
'text' => 46,
'constant' => 43
}
},
- {#State 74
+ {#State 69
ACTIONS => {
'CONSTANT' => 44,
'TEXT' => 13,
@@ -562,12 +512,12 @@ sub new {
DEFAULT => -101,
GOTOS => {
'identifier' => 45,
- 'anytext' => 113,
+ 'anytext' => 108,
'text' => 46,
'constant' => 43
}
},
- {#State 75
+ {#State 70
ACTIONS => {
'CONSTANT' => 44,
'TEXT' => 13,
@@ -576,12 +526,13 @@ sub new {
DEFAULT => -101,
GOTOS => {
'identifier' => 45,
- 'anytext' => 114,
+ 'anytext' => 109,
'text' => 46,
- 'constant' => 43
+ 'constant' => 43,
+ 'commalisttext' => 110
}
},
- {#State 76
+ {#State 71
ACTIONS => {
'CONSTANT' => 44,
'TEXT' => 13,
@@ -590,13 +541,12 @@ sub new {
DEFAULT => -101,
GOTOS => {
'identifier' => 45,
- 'anytext' => 115,
+ 'anytext' => 111,
'text' => 46,
- 'constant' => 43,
- 'commalisttext' => 116
+ 'constant' => 43
}
},
- {#State 77
+ {#State 72
ACTIONS => {
'CONSTANT' => 44,
'TEXT' => 13,
@@ -605,12 +555,12 @@ sub new {
DEFAULT => -101,
GOTOS => {
'identifier' => 45,
- 'anytext' => 117,
+ 'anytext' => 112,
'text' => 46,
'constant' => 43
}
},
- {#State 78
+ {#State 73
ACTIONS => {
'CONSTANT' => 44,
'TEXT' => 13,
@@ -619,12 +569,12 @@ sub new {
DEFAULT => -101,
GOTOS => {
'identifier' => 45,
- 'anytext' => 118,
+ 'anytext' => 113,
'text' => 46,
'constant' => 43
}
},
- {#State 79
+ {#State 74
ACTIONS => {
'CONSTANT' => 44,
'TEXT' => 13,
@@ -633,12 +583,13 @@ sub new {
DEFAULT => -101,
GOTOS => {
'identifier' => 45,
- 'anytext' => 119,
+ 'anytext' => 109,
'text' => 46,
- 'constant' => 43
+ 'constant' => 43,
+ 'commalisttext' => 114
}
},
- {#State 80
+ {#State 75
ACTIONS => {
'CONSTANT' => 44,
'TEXT' => 13,
@@ -649,11 +600,10 @@ sub new {
'identifier' => 45,
'anytext' => 115,
'text' => 46,
- 'constant' => 43,
- 'commalisttext' => 120
+ 'constant' => 43
}
},
- {#State 81
+ {#State 76
ACTIONS => {
'CONSTANT' => 44,
'TEXT' => 13,
@@ -662,12 +612,12 @@ sub new {
DEFAULT => -101,
GOTOS => {
'identifier' => 45,
- 'anytext' => 121,
+ 'anytext' => 116,
'text' => 46,
'constant' => 43
}
},
- {#State 82
+ {#State 77
ACTIONS => {
'CONSTANT' => 44,
'TEXT' => 13,
@@ -676,12 +626,12 @@ sub new {
DEFAULT => -101,
GOTOS => {
'identifier' => 45,
- 'anytext' => 122,
+ 'anytext' => 117,
'text' => 46,
'constant' => 43
}
},
- {#State 83
+ {#State 78
ACTIONS => {
'CONSTANT' => 44,
'TEXT' => 13,
@@ -690,12 +640,12 @@ sub new {
DEFAULT => -101,
GOTOS => {
'identifier' => 45,
- 'anytext' => 123,
+ 'anytext' => 118,
'text' => 46,
'constant' => 43
}
},
- {#State 84
+ {#State 79
ACTIONS => {
'CONSTANT' => 44,
'TEXT' => 13,
@@ -704,517 +654,501 @@ sub new {
DEFAULT => -101,
GOTOS => {
'identifier' => 45,
- 'anytext' => 124,
+ 'anytext' => 119,
'text' => 46,
'constant' => 43
}
},
- {#State 85
+ {#State 80
DEFAULT => -96
},
- {#State 86
+ {#State 81
+ DEFAULT => -12
+ },
+ {#State 82
DEFAULT => -126
},
- {#State 87
- DEFAULT => -12
+ {#State 83
+ ACTIONS => {
+ ";" => 120
+ }
},
- {#State 88
+ {#State 84
ACTIONS => {
- ";" => 125
+ ";" => 82
+ },
+ DEFAULT => -125,
+ GOTOS => {
+ 'optional_semicolon' => 121
}
},
- {#State 89
+ {#State 85
+ DEFAULT => -19
+ },
+ {#State 86
+ DEFAULT => -40
+ },
+ {#State 87
ACTIONS => {
'IDENTIFIER' => 22,
- "signed" => 100,
- "union" => 50,
- "enum" => 63,
- "bitmap" => 64,
- 'void' => 95,
- "unsigned" => 101,
- "[" => 17,
- "struct" => 61
+ "signed" => 95,
+ 'void' => 89,
+ "unsigned" => 99
},
+ DEFAULT => -91,
GOTOS => {
- 'existingtype' => 99,
- 'bitmap' => 65,
- 'usertype' => 96,
- 'identifier' => 97,
+ 'existingtype' => 96,
+ 'bitmap' => 51,
+ 'usertype' => 91,
+ 'property_list' => 90,
+ 'identifier' => 92,
'struct' => 57,
- 'enum' => 59,
- 'type' => 126,
- 'union' => 68,
- 'sign' => 98
+ 'enum' => 61,
+ 'type' => 122,
+ 'union' => 63,
+ 'sign' => 93
}
},
- {#State 90
- DEFAULT => -121
- },
- {#State 91
+ {#State 88
ACTIONS => {
- "{" => 128
+ 'IDENTIFIER' => 123
},
- DEFAULT => -76,
+ DEFAULT => -122,
GOTOS => {
- 'union_body' => 129,
- 'opt_union_body' => 127
+ 'optional_identifier' => 124
+ }
+ },
+ {#State 89
+ DEFAULT => -47
+ },
+ {#State 90
+ ACTIONS => {
+ "union" => 88,
+ "enum" => 97,
+ "bitmap" => 98,
+ "[" => 17,
+ "struct" => 94
}
},
+ {#State 91
+ DEFAULT => -45
+ },
{#State 92
+ DEFAULT => -44
+ },
+ {#State 93
ACTIONS => {
- ";" => 86
+ 'IDENTIFIER' => 22
},
- DEFAULT => -125,
GOTOS => {
- 'optional_semicolon' => 130
+ 'identifier' => 125
}
},
- {#State 93
- DEFAULT => -19
- },
{#State 94
- DEFAULT => -40
+ ACTIONS => {
+ 'IDENTIFIER' => 123
+ },
+ DEFAULT => -122,
+ GOTOS => {
+ 'optional_identifier' => 126
+ }
},
{#State 95
- DEFAULT => -47
+ DEFAULT => -41
},
{#State 96
- DEFAULT => -45
+ DEFAULT => -46
},
{#State 97
- DEFAULT => -44
+ ACTIONS => {
+ 'IDENTIFIER' => 123
+ },
+ DEFAULT => -122,
+ GOTOS => {
+ 'optional_identifier' => 127
+ }
},
{#State 98
ACTIONS => {
- 'IDENTIFIER' => 22
+ 'IDENTIFIER' => 123
},
+ DEFAULT => -122,
GOTOS => {
- 'identifier' => 131
+ 'optional_identifier' => 128
}
},
{#State 99
- DEFAULT => -46
- },
- {#State 100
- DEFAULT => -41
- },
- {#State 101
DEFAULT => -42
},
- {#State 102
+ {#State 100
ACTIONS => {
'IDENTIFIER' => 22
},
GOTOS => {
- 'identifier' => 132
+ 'identifier' => 129
}
},
- {#State 103
+ {#State 101
ACTIONS => {
- "union" => 133,
- "enum" => 138,
- "bitmap" => 139,
+ "union" => 130,
+ "enum" => 135,
+ "bitmap" => 136,
"[" => 17
},
GOTOS => {
- 'decl_enum' => 134,
- 'decl_bitmap' => 135,
- 'decl_type' => 137,
- 'decl_union' => 136
+ 'decl_enum' => 131,
+ 'decl_bitmap' => 132,
+ 'decl_type' => 134,
+ 'decl_union' => 133
}
},
- {#State 104
+ {#State 102
DEFAULT => -80,
GOTOS => {
- 'pointers' => 140
+ 'pointers' => 137
}
},
+ {#State 103
+ ACTIONS => {
+ "-" => 65,
+ ":" => 64,
+ "<" => 67,
+ "+" => 69,
+ "~" => 68,
+ "*" => 76,
+ "?" => 66,
+ "{" => 70,
+ "&" => 71,
+ "/" => 72,
+ "=" => 73,
+ "(" => 74,
+ "|" => 75,
+ "." => 77,
+ ">" => 78
+ },
+ DEFAULT => -114
+ },
+ {#State 104
+ ACTIONS => {
+ ":" => 64,
+ "<" => 67,
+ "~" => 68,
+ "?" => 66,
+ "{" => 70,
+ "=" => 73
+ },
+ DEFAULT => -105
+ },
{#State 105
ACTIONS => {
- "{" => 142
+ "-" => 65,
+ ":" => 64,
+ "<" => 67,
+ "+" => 69,
+ "~" => 68,
+ "*" => 76,
+ "?" => 66,
+ "{" => 70,
+ "&" => 71,
+ "/" => 72,
+ "=" => 73,
+ "(" => 74,
+ "|" => 75,
+ "." => 77,
+ ">" => 78
},
- DEFAULT => -66,
- GOTOS => {
- 'struct_body' => 141,
- 'opt_struct_body' => 143
- }
+ DEFAULT => -113
},
{#State 106
ACTIONS => {
- "{" => 144
+ "-" => 65,
+ ":" => 64,
+ "<" => 67,
+ "+" => 69,
+ "~" => 68,
+ "*" => 76,
+ "?" => 66,
+ "{" => 70,
+ "&" => 71,
+ "/" => 72,
+ "=" => 73,
+ "(" => 74,
+ "|" => 75,
+ "." => 77,
+ ">" => 78
},
- DEFAULT => -49,
- GOTOS => {
- 'opt_enum_body' => 146,
- 'enum_body' => 145
- }
+ DEFAULT => -109
},
{#State 107
ACTIONS => {
- "{" => 148
+ "-" => 65,
+ ":" => 64,
+ "<" => 67,
+ "+" => 69,
+ "~" => 68,
+ "*" => 76,
+ "?" => 66,
+ "{" => 70,
+ "&" => 71,
+ "/" => 72,
+ "=" => 73,
+ "(" => 74,
+ "|" => 75,
+ "." => 77,
+ ">" => 78
},
- DEFAULT => -57,
- GOTOS => {
- 'bitmap_body' => 149,
- 'opt_bitmap_body' => 147
- }
+ DEFAULT => -117
},
{#State 108
ACTIONS => {
- "-" => 70,
- ":" => 69,
- "<" => 71,
- "+" => 73,
- "~" => 72,
- "*" => 74,
- "?" => 75,
- "{" => 76,
- "&" => 77,
- "/" => 78,
- "=" => 79,
- "(" => 80,
- "|" => 81,
- "." => 82,
- ">" => 83
+ ":" => 64,
+ "<" => 67,
+ "~" => 68,
+ "?" => 66,
+ "{" => 70,
+ "=" => 73
},
- DEFAULT => -114
+ DEFAULT => -116
},
{#State 109
ACTIONS => {
- ":" => 69,
- "<" => 71,
- "~" => 72,
- "?" => 75,
- "{" => 76,
- "=" => 79
+ "-" => 65,
+ ":" => 64,
+ "<" => 67,
+ "+" => 69,
+ "~" => 68,
+ "*" => 76,
+ "?" => 66,
+ "{" => 70,
+ "&" => 71,
+ "/" => 72,
+ "=" => 73,
+ "(" => 74,
+ "|" => 75,
+ "." => 77,
+ ">" => 78
},
- DEFAULT => -105
+ DEFAULT => -99
},
{#State 110
ACTIONS => {
- "-" => 70,
- ":" => 69,
- "<" => 71,
- "+" => 73,
- "~" => 72,
- "*" => 74,
- "?" => 75,
- "{" => 76,
- "&" => 77,
- "/" => 78,
- "=" => 79,
- "(" => 80,
- "|" => 81,
- "." => 82,
- ">" => 83
- },
- DEFAULT => -109
+ "}" => 138,
+ "," => 139
+ }
},
{#State 111
ACTIONS => {
- "-" => 70,
- ":" => 69,
- "<" => 71,
- "+" => 73,
- "~" => 72,
- "*" => 74,
- "?" => 75,
- "{" => 76,
- "&" => 77,
- "/" => 78,
- "=" => 79,
- "(" => 80,
- "|" => 81,
- "." => 82,
- ">" => 83
+ ":" => 64,
+ "<" => 67,
+ "~" => 68,
+ "?" => 66,
+ "{" => 70,
+ "=" => 73
},
- DEFAULT => -117
+ DEFAULT => -111
},
{#State 112
ACTIONS => {
- ":" => 69,
- "<" => 71,
- "~" => 72,
- "?" => 75,
- "{" => 76,
- "=" => 79
+ ":" => 64,
+ "<" => 67,
+ "~" => 68,
+ "?" => 66,
+ "{" => 70,
+ "=" => 73
},
- DEFAULT => -116
+ DEFAULT => -112
},
{#State 113
ACTIONS => {
- ":" => 69,
- "<" => 71,
- "~" => 72,
- "?" => 75,
- "{" => 76,
- "=" => 79
+ "-" => 65,
+ ":" => 64,
+ "<" => 67,
+ "+" => 69,
+ "~" => 68,
+ "*" => 76,
+ "?" => 66,
+ "{" => 70,
+ "&" => 71,
+ "/" => 72,
+ "=" => 73,
+ "(" => 74,
+ "|" => 75,
+ "." => 77,
+ ">" => 78
},
- DEFAULT => -107
+ DEFAULT => -115
},
{#State 114
ACTIONS => {
- "-" => 70,
- ":" => 69,
- "<" => 71,
- "+" => 73,
- "~" => 72,
- "*" => 74,
- "?" => 75,
- "{" => 76,
- "&" => 77,
- "/" => 78,
- "=" => 79,
- "(" => 80,
- "|" => 81,
- "." => 82,
- ">" => 83
- },
- DEFAULT => -113
+ "," => 139,
+ ")" => 140
+ }
},
{#State 115
ACTIONS => {
- "-" => 70,
- ":" => 69,
- "<" => 71,
- "+" => 73,
- "~" => 72,
- "*" => 74,
- "?" => 75,
- "{" => 76,
- "&" => 77,
- "/" => 78,
- "=" => 79,
- "(" => 80,
- "|" => 81,
- "." => 82,
- ">" => 83
+ ":" => 64,
+ "<" => 67,
+ "~" => 68,
+ "?" => 66,
+ "{" => 70,
+ "=" => 73
},
- DEFAULT => -99
+ DEFAULT => -110
},
{#State 116
ACTIONS => {
- "}" => 150,
- "," => 151
- }
+ ":" => 64,
+ "<" => 67,
+ "~" => 68,
+ "?" => 66,
+ "{" => 70,
+ "=" => 73
+ },
+ DEFAULT => -107
},
{#State 117
ACTIONS => {
- ":" => 69,
- "<" => 71,
- "~" => 72,
- "?" => 75,
- "{" => 76,
- "=" => 79
+ ":" => 64,
+ "<" => 67,
+ "~" => 68,
+ "?" => 66,
+ "{" => 70,
+ "=" => 73
},
- DEFAULT => -111
+ DEFAULT => -106
},
{#State 118
ACTIONS => {
- ":" => 69,
- "<" => 71,
- "~" => 72,
- "?" => 75,
- "{" => 76,
- "=" => 79
+ ":" => 64,
+ "<" => 67,
+ "~" => 68,
+ "?" => 66,
+ "{" => 70,
+ "=" => 73
},
- DEFAULT => -112
+ DEFAULT => -108
},
{#State 119
ACTIONS => {
- "-" => 70,
- ":" => 69,
- "<" => 71,
- "+" => 73,
- "~" => 72,
- "*" => 74,
- "?" => 75,
- "{" => 76,
- "&" => 77,
- "/" => 78,
- "=" => 79,
- "(" => 80,
- "|" => 81,
- "." => 82,
- ">" => 83
+ "-" => 65,
+ ":" => 64,
+ "<" => 67,
+ "+" => 69,
+ "~" => 68,
+ "*" => 76,
+ "?" => 66,
+ "{" => 70,
+ "&" => 71,
+ "/" => 72,
+ "=" => 73,
+ "(" => 74,
+ "|" => 75,
+ "." => 77,
+ ">" => 78
},
- DEFAULT => -115
+ DEFAULT => -98
},
{#State 120
- ACTIONS => {
- "," => 151,
- ")" => 152
- }
+ DEFAULT => -14
},
{#State 121
- ACTIONS => {
- ":" => 69,
- "<" => 71,
- "~" => 72,
- "?" => 75,
- "{" => 76,
- "=" => 79
- },
- DEFAULT => -110
+ DEFAULT => -15
},
{#State 122
ACTIONS => {
- ":" => 69,
- "<" => 71,
- "~" => 72,
- "?" => 75,
- "{" => 76,
- "=" => 79
+ 'IDENTIFIER' => 22
},
- DEFAULT => -106
+ GOTOS => {
+ 'identifier' => 141
+ }
},
{#State 123
- ACTIONS => {
- ":" => 69,
- "<" => 71,
- "~" => 72,
- "?" => 75,
- "{" => 76,
- "=" => 79
- },
- DEFAULT => -108
+ DEFAULT => -121
},
{#State 124
ACTIONS => {
- "-" => 70,
- ":" => 69,
- "<" => 71,
- "+" => 73,
- "~" => 72,
- "*" => 74,
- "?" => 75,
- "{" => 76,
- "&" => 77,
- "/" => 78,
- "=" => 79,
- "(" => 80,
- "|" => 81,
- "." => 82,
- ">" => 83
+ "{" => 143
},
- DEFAULT => -98
+ DEFAULT => -76,
+ GOTOS => {
+ 'union_body' => 144,
+ 'opt_union_body' => 142
+ }
},
{#State 125
- DEFAULT => -14
+ DEFAULT => -43
},
{#State 126
ACTIONS => {
- 'IDENTIFIER' => 22
+ "{" => 146
},
+ DEFAULT => -66,
GOTOS => {
- 'identifier' => 153
+ 'struct_body' => 145,
+ 'opt_struct_body' => 147
}
},
{#State 127
- DEFAULT => -78
+ ACTIONS => {
+ "{" => 148
+ },
+ DEFAULT => -49,
+ GOTOS => {
+ 'opt_enum_body' => 150,
+ 'enum_body' => 149
+ }
},
{#State 128
- DEFAULT => -73,
+ ACTIONS => {
+ "{" => 152
+ },
+ DEFAULT => -57,
GOTOS => {
- 'union_elements' => 154
+ 'bitmap_body' => 153,
+ 'opt_bitmap_body' => 151
}
},
{#State 129
- DEFAULT => -77
- },
- {#State 130
- DEFAULT => -15
- },
- {#State 131
- DEFAULT => -43
- },
- {#State 132
ACTIONS => {
- "(" => 155
+ "(" => 154
}
},
- {#State 133
+ {#State 130
DEFAULT => -34
},
- {#State 134
+ {#State 131
DEFAULT => -29
},
- {#State 135
+ {#State 132
DEFAULT => -30
},
- {#State 136
+ {#State 133
DEFAULT => -31
},
- {#State 137
+ {#State 134
ACTIONS => {
'IDENTIFIER' => 22
},
GOTOS => {
- 'identifier' => 156
+ 'identifier' => 155
}
},
- {#State 138
+ {#State 135
DEFAULT => -32
},
- {#State 139
+ {#State 136
DEFAULT => -33
},
- {#State 140
+ {#State 137
ACTIONS => {
'IDENTIFIER' => 22,
- "*" => 158
- },
- GOTOS => {
- 'identifier' => 157
- }
- },
- {#State 141
- DEFAULT => -67
- },
- {#State 142
- DEFAULT => -82,
- GOTOS => {
- 'element_list1' => 159
- }
- },
- {#State 143
- DEFAULT => -68
- },
- {#State 144
- ACTIONS => {
- 'IDENTIFIER' => 22
+ "*" => 157
},
GOTOS => {
- 'identifier' => 160,
- 'enum_element' => 161,
- 'enum_elements' => 162
- }
- },
- {#State 145
- DEFAULT => -50
- },
- {#State 146
- DEFAULT => -51
- },
- {#State 147
- DEFAULT => -59
- },
- {#State 148
- ACTIONS => {
- 'IDENTIFIER' => 22
- },
- DEFAULT => -62,
- GOTOS => {
- 'identifier' => 165,
- 'bitmap_element' => 164,
- 'bitmap_elements' => 163,
- 'opt_bitmap_elements' => 166
+ 'identifier' => 156
}
},
- {#State 149
- DEFAULT => -58
- },
- {#State 150
+ {#State 138
ACTIONS => {
'CONSTANT' => 44,
'TEXT' => 13,
@@ -1223,12 +1157,12 @@ sub new {
DEFAULT => -101,
GOTOS => {
'identifier' => 45,
- 'anytext' => 167,
+ 'anytext' => 158,
'text' => 46,
'constant' => 43
}
},
- {#State 151
+ {#State 139
ACTIONS => {
'CONSTANT' => 44,
'TEXT' => 13,
@@ -1237,12 +1171,12 @@ sub new {
DEFAULT => -101,
GOTOS => {
'identifier' => 45,
- 'anytext' => 168,
+ 'anytext' => 159,
'text' => 46,
'constant' => 43
}
},
- {#State 152
+ {#State 140
ACTIONS => {
'CONSTANT' => 44,
'TEXT' => 13,
@@ -1251,238 +1185,276 @@ sub new {
DEFAULT => -101,
GOTOS => {
'identifier' => 45,
- 'anytext' => 169,
+ 'anytext' => 160,
'text' => 46,
'constant' => 43
}
},
- {#State 153
+ {#State 141
ACTIONS => {
- "[" => 170
+ "[" => 161
},
DEFAULT => -88,
GOTOS => {
- 'array_len' => 171
+ 'array_len' => 162
}
},
- {#State 154
+ {#State 142
+ DEFAULT => -78
+ },
+ {#State 143
+ DEFAULT => -73,
+ GOTOS => {
+ 'union_elements' => 163
+ }
+ },
+ {#State 144
+ DEFAULT => -77
+ },
+ {#State 145
+ DEFAULT => -67
+ },
+ {#State 146
+ DEFAULT => -82,
+ GOTOS => {
+ 'element_list1' => 164
+ }
+ },
+ {#State 147
+ DEFAULT => -68
+ },
+ {#State 148
ACTIONS => {
- "}" => 172
+ 'IDENTIFIER' => 22
},
- DEFAULT => -91,
GOTOS => {
- 'optional_base_element' => 174,
- 'property_list' => 173
+ 'identifier' => 165,
+ 'enum_element' => 166,
+ 'enum_elements' => 167
}
},
- {#State 155
+ {#State 149
+ DEFAULT => -50
+ },
+ {#State 150
+ DEFAULT => -51
+ },
+ {#State 151
+ DEFAULT => -59
+ },
+ {#State 152
+ ACTIONS => {
+ 'IDENTIFIER' => 22
+ },
+ DEFAULT => -62,
+ GOTOS => {
+ 'identifier' => 170,
+ 'bitmap_element' => 169,
+ 'bitmap_elements' => 168,
+ 'opt_bitmap_elements' => 171
+ }
+ },
+ {#State 153
+ DEFAULT => -58
+ },
+ {#State 154
ACTIONS => {
"," => -84,
- "void" => 178,
+ "void" => 175,
")" => -84
},
DEFAULT => -91,
GOTOS => {
- 'base_element' => 175,
- 'element_list2' => 177,
- 'property_list' => 176
+ 'base_element' => 172,
+ 'element_list2' => 174,
+ 'property_list' => 173
}
},
- {#State 156
+ {#State 155
ACTIONS => {
- ";" => 179
+ ";" => 176
}
},
- {#State 157
+ {#State 156
ACTIONS => {
- "[" => 170,
- "=" => 181
+ "[" => 161,
+ "=" => 178
},
GOTOS => {
- 'array_len' => 180
+ 'array_len' => 177
}
},
- {#State 158
+ {#State 157
DEFAULT => -81
},
+ {#State 158
+ ACTIONS => {
+ "-" => 65,
+ ":" => 64,
+ "<" => 67,
+ "+" => 69,
+ "~" => 68,
+ "*" => 76,
+ "?" => 66,
+ "{" => 70,
+ "&" => 71,
+ "/" => 72,
+ "=" => 73,
+ "(" => 74,
+ "|" => 75,
+ "." => 77,
+ ">" => 78
+ },
+ DEFAULT => -119
+ },
{#State 159
ACTIONS => {
- "}" => 182
+ "-" => 65,
+ ":" => 64,
+ "<" => 67,
+ "+" => 69,
+ "~" => 68,
+ "*" => 76,
+ "?" => 66,
+ "{" => 70,
+ "&" => 71,
+ "/" => 72,
+ "=" => 73,
+ "(" => 74,
+ "|" => 75,
+ "." => 77,
+ ">" => 78
},
- DEFAULT => -91,
- GOTOS => {
- 'base_element' => 183,
- 'property_list' => 176
- }
+ DEFAULT => -100
},
{#State 160
ACTIONS => {
- "=" => 184
+ ":" => 64,
+ "<" => 67,
+ "~" => 68,
+ "?" => 66,
+ "{" => 70,
+ "=" => 73
},
- DEFAULT => -54
+ DEFAULT => -118
},
{#State 161
- DEFAULT => -52
+ ACTIONS => {
+ 'CONSTANT' => 44,
+ 'TEXT' => 13,
+ "]" => 179,
+ 'IDENTIFIER' => 22
+ },
+ DEFAULT => -101,
+ GOTOS => {
+ 'identifier' => 45,
+ 'anytext' => 180,
+ 'text' => 46,
+ 'constant' => 43
+ }
},
{#State 162
ACTIONS => {
- "}" => 185,
- "," => 186
+ ";" => 181
}
},
{#State 163
ACTIONS => {
- "," => 187
+ "}" => 182
},
- DEFAULT => -63
+ DEFAULT => -91,
+ GOTOS => {
+ 'optional_base_element' => 184,
+ 'property_list' => 183
+ }
},
{#State 164
- DEFAULT => -60
+ ACTIONS => {
+ "}" => 185
+ },
+ DEFAULT => -91,
+ GOTOS => {
+ 'base_element' => 186,
+ 'property_list' => 173
+ }
},
{#State 165
ACTIONS => {
- "=" => 188
- }
+ "=" => 187
+ },
+ DEFAULT => -54
},
{#State 166
- ACTIONS => {
- "}" => 189
- }
+ DEFAULT => -52
},
{#State 167
ACTIONS => {
- "-" => 70,
- ":" => 69,
- "<" => 71,
- "+" => 73,
- "~" => 72,
- "*" => 74,
- "?" => 75,
- "{" => 76,
- "&" => 77,
- "/" => 78,
- "=" => 79,
- "(" => 80,
- "|" => 81,
- "." => 82,
- ">" => 83
- },
- DEFAULT => -119
+ "}" => 188,
+ "," => 189
+ }
},
{#State 168
ACTIONS => {
- "-" => 70,
- ":" => 69,
- "<" => 71,
- "+" => 73,
- "~" => 72,
- "*" => 74,
- "?" => 75,
- "{" => 76,
- "&" => 77,
- "/" => 78,
- "=" => 79,
- "(" => 80,
- "|" => 81,
- "." => 82,
- ">" => 83
+ "," => 190
},
- DEFAULT => -100
+ DEFAULT => -63
},
{#State 169
- ACTIONS => {
- ":" => 69,
- "<" => 71,
- "~" => 72,
- "?" => 75,
- "{" => 76,
- "=" => 79
- },
- DEFAULT => -118
+ DEFAULT => -60
},
{#State 170
ACTIONS => {
- 'CONSTANT' => 44,
- 'TEXT' => 13,
- "]" => 190,
- 'IDENTIFIER' => 22
- },
- DEFAULT => -101,
- GOTOS => {
- 'identifier' => 45,
- 'anytext' => 191,
- 'text' => 46,
- 'constant' => 43
+ "=" => 191
}
},
{#State 171
ACTIONS => {
- ";" => 192
+ "}" => 192
}
},
{#State 172
- DEFAULT => -75
+ DEFAULT => -86
},
{#State 173
ACTIONS => {
+ 'IDENTIFIER' => 22,
+ "signed" => 95,
+ 'void' => 89,
+ "unsigned" => 99,
"[" => 17
},
DEFAULT => -91,
GOTOS => {
- 'base_or_empty' => 193,
- 'base_element' => 194,
- 'empty_element' => 195,
- 'property_list' => 196
- }
- },
- {#State 174
- DEFAULT => -74
- },
- {#State 175
- DEFAULT => -86
- },
- {#State 176
- ACTIONS => {
- 'IDENTIFIER' => 22,
- "signed" => 100,
- "union" => 50,
- "enum" => 63,
- "bitmap" => 64,
- 'void' => 95,
- "unsigned" => 101,
- "[" => 17,
- "struct" => 61
- },
- GOTOS => {
- 'existingtype' => 99,
- 'bitmap' => 65,
- 'usertype' => 96,
- 'identifier' => 97,
+ 'existingtype' => 96,
+ 'bitmap' => 51,
+ 'usertype' => 91,
+ 'property_list' => 90,
+ 'identifier' => 92,
'struct' => 57,
- 'enum' => 59,
- 'type' => 197,
- 'union' => 68,
- 'sign' => 98
+ 'enum' => 61,
+ 'type' => 193,
+ 'union' => 63,
+ 'sign' => 93
}
},
- {#State 177
+ {#State 174
ACTIONS => {
- "," => 198,
- ")" => 199
+ "," => 194,
+ ")" => 195
}
},
- {#State 178
+ {#State 175
DEFAULT => -85
},
- {#State 179
+ {#State 176
DEFAULT => -28
},
- {#State 180
+ {#State 177
ACTIONS => {
- "=" => 200
+ "=" => 196
}
},
- {#State 181
+ {#State 178
ACTIONS => {
'CONSTANT' => 44,
'TEXT' => 13,
@@ -1491,20 +1463,70 @@ sub new {
DEFAULT => -101,
GOTOS => {
'identifier' => 45,
- 'anytext' => 201,
+ 'anytext' => 197,
'text' => 46,
'constant' => 43
}
},
+ {#State 179
+ ACTIONS => {
+ "[" => 161
+ },
+ DEFAULT => -88,
+ GOTOS => {
+ 'array_len' => 198
+ }
+ },
+ {#State 180
+ ACTIONS => {
+ "-" => 65,
+ ":" => 64,
+ "?" => 66,
+ "<" => 67,
+ "+" => 69,
+ "~" => 68,
+ "&" => 71,
+ "{" => 70,
+ "/" => 72,
+ "=" => 73,
+ "|" => 75,
+ "(" => 74,
+ "*" => 76,
+ "." => 77,
+ "]" => 199,
+ ">" => 78
+ }
+ },
+ {#State 181
+ DEFAULT => -35
+ },
{#State 182
- DEFAULT => -65
+ DEFAULT => -75
},
{#State 183
ACTIONS => {
- ";" => 202
+ "[" => 17
+ },
+ DEFAULT => -91,
+ GOTOS => {
+ 'base_or_empty' => 200,
+ 'base_element' => 201,
+ 'empty_element' => 202,
+ 'property_list' => 203
}
},
{#State 184
+ DEFAULT => -74
+ },
+ {#State 185
+ DEFAULT => -65
+ },
+ {#State 186
+ ACTIONS => {
+ ";" => 204
+ }
+ },
+ {#State 187
ACTIONS => {
'CONSTANT' => 44,
'TEXT' => 13,
@@ -1513,33 +1535,33 @@ sub new {
DEFAULT => -101,
GOTOS => {
'identifier' => 45,
- 'anytext' => 203,
+ 'anytext' => 205,
'text' => 46,
'constant' => 43
}
},
- {#State 185
+ {#State 188
DEFAULT => -48
},
- {#State 186
+ {#State 189
ACTIONS => {
'IDENTIFIER' => 22
},
GOTOS => {
- 'identifier' => 160,
- 'enum_element' => 204
+ 'identifier' => 165,
+ 'enum_element' => 206
}
},
- {#State 187
+ {#State 190
ACTIONS => {
'IDENTIFIER' => 22
},
GOTOS => {
- 'identifier' => 165,
- 'bitmap_element' => 205
+ 'identifier' => 170,
+ 'bitmap_element' => 207
}
},
- {#State 188
+ {#State 191
ACTIONS => {
'CONSTANT' => 44,
'TEXT' => 13,
@@ -1548,245 +1570,211 @@ sub new {
DEFAULT => -101,
GOTOS => {
'identifier' => 45,
- 'anytext' => 206,
+ 'anytext' => 208,
'text' => 46,
'constant' => 43
}
},
- {#State 189
+ {#State 192
DEFAULT => -56
},
- {#State 190
- ACTIONS => {
- "[" => 170
- },
- DEFAULT => -88,
+ {#State 193
+ DEFAULT => -80,
GOTOS => {
- 'array_len' => 207
- }
- },
- {#State 191
- ACTIONS => {
- "-" => 70,
- ":" => 69,
- "?" => 75,
- "<" => 71,
- "+" => 73,
- "~" => 72,
- "&" => 77,
- "{" => 76,
- "/" => 78,
- "=" => 79,
- "|" => 81,
- "(" => 80,
- "*" => 74,
- "." => 82,
- "]" => 208,
- ">" => 83
+ 'pointers' => 209
}
},
- {#State 192
- DEFAULT => -35
- },
- {#State 193
- DEFAULT => -72
- },
{#State 194
- ACTIONS => {
- ";" => 209
+ DEFAULT => -91,
+ GOTOS => {
+ 'base_element' => 210,
+ 'property_list' => 173
}
},
{#State 195
- DEFAULT => -71
+ ACTIONS => {
+ ";" => 211
+ }
},
{#State 196
ACTIONS => {
- 'IDENTIFIER' => 22,
- "signed" => 100,
- "union" => 50,
- ";" => 210,
- "enum" => 63,
- "bitmap" => 64,
- 'void' => 95,
- "unsigned" => 101,
- "[" => 17,
- "struct" => 61
+ 'CONSTANT' => 44,
+ 'TEXT' => 13,
+ 'IDENTIFIER' => 22
},
+ DEFAULT => -101,
GOTOS => {
- 'existingtype' => 99,
- 'bitmap' => 65,
- 'usertype' => 96,
- 'identifier' => 97,
- 'struct' => 57,
- 'enum' => 59,
- 'type' => 197,
- 'union' => 68,
- 'sign' => 98
+ 'identifier' => 45,
+ 'anytext' => 212,
+ 'text' => 46,
+ 'constant' => 43
}
},
{#State 197
- DEFAULT => -80,
- GOTOS => {
- 'pointers' => 211
+ ACTIONS => {
+ "-" => 65,
+ ":" => 64,
+ "?" => 66,
+ "<" => 67,
+ ";" => 213,
+ "+" => 69,
+ "~" => 68,
+ "&" => 71,
+ "{" => 70,
+ "/" => 72,
+ "=" => 73,
+ "|" => 75,
+ "(" => 74,
+ "*" => 76,
+ "." => 77,
+ ">" => 78
}
},
{#State 198
- DEFAULT => -91,
- GOTOS => {
- 'base_element' => 212,
- 'property_list' => 176
- }
+ DEFAULT => -89
},
{#State 199
ACTIONS => {
- ";" => 213
- }
- },
- {#State 200
- ACTIONS => {
- 'CONSTANT' => 44,
- 'TEXT' => 13,
- 'IDENTIFIER' => 22
+ "[" => 161
},
- DEFAULT => -101,
+ DEFAULT => -88,
GOTOS => {
- 'identifier' => 45,
- 'anytext' => 214,
- 'text' => 46,
- 'constant' => 43
+ 'array_len' => 214
}
},
+ {#State 200
+ DEFAULT => -72
+ },
{#State 201
ACTIONS => {
- "-" => 70,
- ":" => 69,
- "?" => 75,
- "<" => 71,
- ";" => 215,
- "+" => 73,
- "~" => 72,
- "&" => 77,
- "{" => 76,
- "/" => 78,
- "=" => 79,
- "|" => 81,
- "(" => 80,
- "*" => 74,
- "." => 82,
- ">" => 83
+ ";" => 215
}
},
{#State 202
- DEFAULT => -83
+ DEFAULT => -71
},
{#State 203
ACTIONS => {
- "-" => 70,
- ":" => 69,
- "<" => 71,
- "+" => 73,
- "~" => 72,
- "*" => 74,
- "?" => 75,
- "{" => 76,
- "&" => 77,
- "/" => 78,
- "=" => 79,
- "(" => 80,
- "|" => 81,
- "." => 82,
- ">" => 83
+ 'IDENTIFIER' => 22,
+ "signed" => 95,
+ ";" => 216,
+ 'void' => 89,
+ "unsigned" => 99,
+ "[" => 17
},
- DEFAULT => -55
+ DEFAULT => -91,
+ GOTOS => {
+ 'existingtype' => 96,
+ 'bitmap' => 51,
+ 'usertype' => 91,
+ 'property_list' => 90,
+ 'identifier' => 92,
+ 'struct' => 57,
+ 'enum' => 61,
+ 'type' => 193,
+ 'union' => 63,
+ 'sign' => 93
+ }
},
{#State 204
- DEFAULT => -53
+ DEFAULT => -83
},
{#State 205
- DEFAULT => -61
- },
- {#State 206
ACTIONS => {
- "-" => 70,
- ":" => 69,
- "<" => 71,
- "+" => 73,
- "~" => 72,
- "*" => 74,
- "?" => 75,
- "{" => 76,
- "&" => 77,
- "/" => 78,
- "=" => 79,
- "(" => 80,
- "|" => 81,
- "." => 82,
- ">" => 83
+ "-" => 65,
+ ":" => 64,
+ "<" => 67,
+ "+" => 69,
+ "~" => 68,
+ "*" => 76,
+ "?" => 66,
+ "{" => 70,
+ "&" => 71,
+ "/" => 72,
+ "=" => 73,
+ "(" => 74,
+ "|" => 75,
+ "." => 77,
+ ">" => 78
},
- DEFAULT => -64
+ DEFAULT => -55
+ },
+ {#State 206
+ DEFAULT => -53
},
{#State 207
- DEFAULT => -89
+ DEFAULT => -61
},
{#State 208
ACTIONS => {
- "[" => 170
+ "-" => 65,
+ ":" => 64,
+ "<" => 67,
+ "+" => 69,
+ "~" => 68,
+ "*" => 76,
+ "?" => 66,
+ "{" => 70,
+ "&" => 71,
+ "/" => 72,
+ "=" => 73,
+ "(" => 74,
+ "|" => 75,
+ "." => 77,
+ ">" => 78
},
- DEFAULT => -88,
- GOTOS => {
- 'array_len' => 216
- }
+ DEFAULT => -64
},
{#State 209
- DEFAULT => -70
- },
- {#State 210
- DEFAULT => -69
- },
- {#State 211
ACTIONS => {
'IDENTIFIER' => 22,
- "*" => 158
+ "*" => 157
},
GOTOS => {
'identifier' => 217
}
},
- {#State 212
+ {#State 210
DEFAULT => -87
},
- {#State 213
+ {#State 211
DEFAULT => -27
},
- {#State 214
+ {#State 212
ACTIONS => {
- "-" => 70,
- ":" => 69,
- "?" => 75,
- "<" => 71,
+ "-" => 65,
+ ":" => 64,
+ "?" => 66,
+ "<" => 67,
";" => 218,
- "+" => 73,
- "~" => 72,
- "&" => 77,
- "{" => 76,
- "/" => 78,
- "=" => 79,
- "|" => 81,
- "(" => 80,
- "*" => 74,
- "." => 82,
- ">" => 83
+ "+" => 69,
+ "~" => 68,
+ "&" => 71,
+ "{" => 70,
+ "/" => 72,
+ "=" => 73,
+ "|" => 75,
+ "(" => 74,
+ "*" => 76,
+ "." => 77,
+ ">" => 78
}
},
- {#State 215
+ {#State 213
DEFAULT => -25
},
- {#State 216
+ {#State 214
DEFAULT => -90
},
+ {#State 215
+ DEFAULT => -70
+ },
+ {#State 216
+ DEFAULT => -69
+ },
{#State 217
ACTIONS => {
- "[" => 170
+ "[" => 161
},
DEFAULT => -88,
GOTOS => {
@@ -1811,37 +1799,37 @@ sub new {
[#Rule 2
'idl', 2,
sub
-#line 19 "pidl/idl.yp"
+#line 19 "idl.yp"
{ push(@{$_[1]}, $_[2]); $_[1] }
],
[#Rule 3
'idl', 2,
sub
-#line 20 "pidl/idl.yp"
+#line 20 "idl.yp"
{ push(@{$_[1]}, $_[2]); $_[1] }
],
[#Rule 4
'idl', 2,
sub
-#line 21 "pidl/idl.yp"
+#line 21 "idl.yp"
{ push(@{$_[1]}, $_[2]); $_[1] }
],
[#Rule 5
'idl', 2,
sub
-#line 22 "pidl/idl.yp"
+#line 22 "idl.yp"
{ push(@{$_[1]}, $_[2]); $_[1] }
],
[#Rule 6
'idl', 2,
sub
-#line 23 "pidl/idl.yp"
+#line 23 "idl.yp"
{ push(@{$_[1]}, $_[2]); $_[1] }
],
[#Rule 7
'import', 3,
sub
-#line 26 "pidl/idl.yp"
+#line 26 "idl.yp"
{{
"TYPE" => "IMPORT",
"PATHS" => $_[2],
@@ -1852,7 +1840,7 @@ sub
[#Rule 8
'include', 3,
sub
-#line 33 "pidl/idl.yp"
+#line 33 "idl.yp"
{{
"TYPE" => "INCLUDE",
"PATHS" => $_[2],
@@ -1863,7 +1851,7 @@ sub
[#Rule 9
'importlib', 3,
sub
-#line 40 "pidl/idl.yp"
+#line 40 "idl.yp"
{{
"TYPE" => "IMPORTLIB",
"PATHS" => $_[2],
@@ -1874,19 +1862,19 @@ sub
[#Rule 10
'commalist', 1,
sub
-#line 49 "pidl/idl.yp"
+#line 49 "idl.yp"
{ [ $_[1] ] }
],
[#Rule 11
'commalist', 3,
sub
-#line 50 "pidl/idl.yp"
+#line 50 "idl.yp"
{ push(@{$_[1]}, $_[3]); $_[1] }
],
[#Rule 12
'coclass', 7,
sub
-#line 54 "pidl/idl.yp"
+#line 54 "idl.yp"
{{
"TYPE" => "COCLASS",
"PROPERTIES" => $_[1],
@@ -1902,13 +1890,13 @@ sub
[#Rule 14
'interface_names', 4,
sub
-#line 66 "pidl/idl.yp"
+#line 66 "idl.yp"
{ push(@{$_[1]}, $_[2]); $_[1] }
],
[#Rule 15
'interface', 8,
sub
-#line 70 "pidl/idl.yp"
+#line 70 "idl.yp"
{{
"TYPE" => "INTERFACE",
"PROPERTIES" => $_[1],
@@ -1925,19 +1913,19 @@ sub
[#Rule 17
'base_interface', 2,
sub
-#line 83 "pidl/idl.yp"
+#line 83 "idl.yp"
{ $_[2] }
],
[#Rule 18
'definitions', 1,
sub
-#line 87 "pidl/idl.yp"
+#line 87 "idl.yp"
{ [ $_[1] ] }
],
[#Rule 19
'definitions', 2,
sub
-#line 88 "pidl/idl.yp"
+#line 88 "idl.yp"
{ push(@{$_[1]}, $_[2]); $_[1] }
],
[#Rule 20
@@ -1958,7 +1946,7 @@ sub
[#Rule 25
'const', 7,
sub
-#line 96 "pidl/idl.yp"
+#line 96 "idl.yp"
{{
"TYPE" => "CONST",
"DTYPE" => $_[2],
@@ -1972,7 +1960,7 @@ sub
[#Rule 26
'const', 8,
sub
-#line 106 "pidl/idl.yp"
+#line 106 "idl.yp"
{{
"TYPE" => "CONST",
"DTYPE" => $_[2],
@@ -1987,7 +1975,7 @@ sub
[#Rule 27
'function', 7,
sub
-#line 120 "pidl/idl.yp"
+#line 120 "idl.yp"
{{
"TYPE" => "FUNCTION",
"NAME" => $_[3],
@@ -2001,7 +1989,7 @@ sub
[#Rule 28
'declare', 5,
sub
-#line 132 "pidl/idl.yp"
+#line 132 "idl.yp"
{{
"TYPE" => "DECLARE",
"PROPERTIES" => $_[2],
@@ -2023,7 +2011,7 @@ sub
[#Rule 32
'decl_enum', 1,
sub
-#line 146 "pidl/idl.yp"
+#line 146 "idl.yp"
{{
"TYPE" => "ENUM"
}}
@@ -2031,7 +2019,7 @@ sub
[#Rule 33
'decl_bitmap', 1,
sub
-#line 152 "pidl/idl.yp"
+#line 152 "idl.yp"
{{
"TYPE" => "BITMAP"
}}
@@ -2039,7 +2027,7 @@ sub
[#Rule 34
'decl_union', 1,
sub
-#line 158 "pidl/idl.yp"
+#line 158 "idl.yp"
{{
"TYPE" => "UNION"
}}
@@ -2047,10 +2035,10 @@ sub
[#Rule 35
'typedef', 6,
sub
-#line 164 "pidl/idl.yp"
+#line 164 "idl.yp"
{{
"TYPE" => "TYPEDEF",
- "PROPERTIES" => $_[2],
+ "PROPERTIES" => $_[1],
"NAME" => $_[4],
"DATA" => $_[3],
"ARRAY_LEN" => $_[5],
@@ -2073,7 +2061,7 @@ sub
[#Rule 40
'typedecl', 2,
sub
-#line 177 "pidl/idl.yp"
+#line 177 "idl.yp"
{ $_[1] }
],
[#Rule 41
@@ -2085,7 +2073,7 @@ sub
[#Rule 43
'existingtype', 2,
sub
-#line 182 "pidl/idl.yp"
+#line 182 "idl.yp"
{ ($_[1]?$_[1]:"signed") ." $_[2]" }
],
[#Rule 44
@@ -2100,13 +2088,13 @@ sub
[#Rule 47
'type', 1,
sub
-#line 186 "pidl/idl.yp"
+#line 186 "idl.yp"
{ "void" }
],
[#Rule 48
'enum_body', 3,
sub
-#line 188 "pidl/idl.yp"
+#line 188 "idl.yp"
{ $_[2] }
],
[#Rule 49
@@ -2116,25 +2104,26 @@ sub
'opt_enum_body', 1, undef
],
[#Rule 51
- 'enum', 3,
+ 'enum', 4,
sub
-#line 191 "pidl/idl.yp"
+#line 191 "idl.yp"
{{
"TYPE" => "ENUM",
- "NAME" => $_[2],
- "ELEMENTS" => $_[3]
+ "PROPERTIES" => $_[1],
+ "NAME" => $_[3],
+ "ELEMENTS" => $_[4]
}}
],
[#Rule 52
'enum_elements', 1,
sub
-#line 199 "pidl/idl.yp"
+#line 200 "idl.yp"
{ [ $_[1] ] }
],
[#Rule 53
'enum_elements', 3,
sub
-#line 200 "pidl/idl.yp"
+#line 201 "idl.yp"
{ push(@{$_[1]}, $_[3]); $_[1] }
],
[#Rule 54
@@ -2143,13 +2132,13 @@ sub
[#Rule 55
'enum_element', 3,
sub
-#line 204 "pidl/idl.yp"
+#line 205 "idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
[#Rule 56
'bitmap_body', 3,
sub
-#line 207 "pidl/idl.yp"
+#line 208 "idl.yp"
{ $_[2] }
],
[#Rule 57
@@ -2159,25 +2148,26 @@ sub
'opt_bitmap_body', 1, undef
],
[#Rule 59
- 'bitmap', 3,
+ 'bitmap', 4,
sub
-#line 210 "pidl/idl.yp"
+#line 211 "idl.yp"
{{
"TYPE" => "BITMAP",
- "NAME" => $_[2],
- "ELEMENTS" => $_[3]
+ "PROPERTIES" => $_[1],
+ "NAME" => $_[3],
+ "ELEMENTS" => $_[4]
}}
],
[#Rule 60
'bitmap_elements', 1,
sub
-#line 218 "pidl/idl.yp"
+#line 220 "idl.yp"
{ [ $_[1] ] }
],
[#Rule 61
'bitmap_elements', 3,
sub
-#line 219 "pidl/idl.yp"
+#line 221 "idl.yp"
{ push(@{$_[1]}, $_[3]); $_[1] }
],
[#Rule 62
@@ -2189,13 +2179,13 @@ sub
[#Rule 64
'bitmap_element', 3,
sub
-#line 224 "pidl/idl.yp"
+#line 226 "idl.yp"
{ "$_[1] ( $_[3] )" }
],
[#Rule 65
'struct_body', 3,
sub
-#line 227 "pidl/idl.yp"
+#line 229 "idl.yp"
{ $_[2] }
],
[#Rule 66
@@ -2205,19 +2195,20 @@ sub
'opt_struct_body', 1, undef
],
[#Rule 68
- 'struct', 3,
+ 'struct', 4,
sub
-#line 231 "pidl/idl.yp"
+#line 233 "idl.yp"
{{
"TYPE" => "STRUCT",
- "NAME" => $_[2],
- "ELEMENTS" => $_[3]
+ "PROPERTIES" => $_[1],
+ "NAME" => $_[3],
+ "ELEMENTS" => $_[4]
}}
],
[#Rule 69
'empty_element', 2,
sub
-#line 239 "pidl/idl.yp"
+#line 242 "idl.yp"
{{
"NAME" => "",
"TYPE" => "EMPTY",
@@ -2237,7 +2228,7 @@ sub
[#Rule 72
'optional_base_element', 2,
sub
-#line 253 "pidl/idl.yp"
+#line 256 "idl.yp"
{ $_[2]->{PROPERTIES} = FlattenHash([$_[1],$_[2]->{PROPERTIES}]); $_[2] }
],
[#Rule 73
@@ -2246,13 +2237,13 @@ sub
[#Rule 74
'union_elements', 2,
sub
-#line 258 "pidl/idl.yp"
+#line 261 "idl.yp"
{ push(@{$_[1]}, $_[2]); $_[1] }
],
[#Rule 75
'union_body', 3,
sub
-#line 261 "pidl/idl.yp"
+#line 264 "idl.yp"
{ $_[2] }
],
[#Rule 76
@@ -2262,19 +2253,20 @@ sub
'opt_union_body', 1, undef
],
[#Rule 78
- 'union', 3,
+ 'union', 4,
sub
-#line 265 "pidl/idl.yp"
+#line 268 "idl.yp"
{{
"TYPE" => "UNION",
- "NAME" => $_[2],
- "ELEMENTS" => $_[3]
+ "PROPERTIES" => $_[1],
+ "NAME" => $_[3],
+ "ELEMENTS" => $_[4]
}}
],
[#Rule 79
'base_element', 5,
sub
-#line 273 "pidl/idl.yp"
+#line 277 "idl.yp"
{{
"NAME" => $_[4],
"TYPE" => $_[2],
@@ -2288,13 +2280,13 @@ sub
[#Rule 80
'pointers', 0,
sub
-#line 287 "pidl/idl.yp"
+#line 291 "idl.yp"
{ 0 }
],
[#Rule 81
'pointers', 2,
sub
-#line 288 "pidl/idl.yp"
+#line 292 "idl.yp"
{ $_[1]+1 }
],
[#Rule 82
@@ -2303,7 +2295,7 @@ sub
[#Rule 83
'element_list1', 3,
sub
-#line 293 "pidl/idl.yp"
+#line 297 "idl.yp"
{ push(@{$_[1]}, $_[2]); $_[1] }
],
[#Rule 84
@@ -2315,13 +2307,13 @@ sub
[#Rule 86
'element_list2', 1,
sub
-#line 299 "pidl/idl.yp"
+#line 303 "idl.yp"
{ [ $_[1] ] }
],
[#Rule 87
'element_list2', 3,
sub
-#line 300 "pidl/idl.yp"
+#line 304 "idl.yp"
{ push(@{$_[1]}, $_[3]); $_[1] }
],
[#Rule 88
@@ -2330,13 +2322,13 @@ sub
[#Rule 89
'array_len', 3,
sub
-#line 305 "pidl/idl.yp"
+#line 309 "idl.yp"
{ push(@{$_[3]}, "*"); $_[3] }
],
[#Rule 90
'array_len', 4,
sub
-#line 306 "pidl/idl.yp"
+#line 310 "idl.yp"
{ push(@{$_[4]}, "$_[2]"); $_[4] }
],
[#Rule 91
@@ -2345,31 +2337,31 @@ sub
[#Rule 92
'property_list', 4,
sub
-#line 312 "pidl/idl.yp"
+#line 316 "idl.yp"
{ FlattenHash([$_[1],$_[3]]); }
],
[#Rule 93
'properties', 1,
sub
-#line 315 "pidl/idl.yp"
+#line 319 "idl.yp"
{ $_[1] }
],
[#Rule 94
'properties', 3,
sub
-#line 316 "pidl/idl.yp"
+#line 320 "idl.yp"
{ FlattenHash([$_[1], $_[3]]); }
],
[#Rule 95
'property', 1,
sub
-#line 319 "pidl/idl.yp"
+#line 323 "idl.yp"
{{ "$_[1]" => "1" }}
],
[#Rule 96
'property', 4,
sub
-#line 320 "pidl/idl.yp"
+#line 324 "idl.yp"
{{ "$_[1]" => "$_[3]" }}
],
[#Rule 97
@@ -2378,7 +2370,7 @@ sub
[#Rule 98
'listtext', 3,
sub
-#line 325 "pidl/idl.yp"
+#line 329 "idl.yp"
{ "$_[1] $_[3]" }
],
[#Rule 99
@@ -2387,13 +2379,13 @@ sub
[#Rule 100
'commalisttext', 3,
sub
-#line 330 "pidl/idl.yp"
+#line 334 "idl.yp"
{ "$_[1],$_[3]" }
],
[#Rule 101
'anytext', 0,
sub
-#line 334 "pidl/idl.yp"
+#line 338 "idl.yp"
{ "" }
],
[#Rule 102
@@ -2408,91 +2400,91 @@ sub
[#Rule 105
'anytext', 3,
sub
-#line 336 "pidl/idl.yp"
+#line 340 "idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
[#Rule 106
'anytext', 3,
sub
-#line 337 "pidl/idl.yp"
+#line 341 "idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
[#Rule 107
'anytext', 3,
sub
-#line 338 "pidl/idl.yp"
+#line 342 "idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
[#Rule 108
'anytext', 3,
sub
-#line 339 "pidl/idl.yp"
+#line 343 "idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
[#Rule 109
'anytext', 3,
sub
-#line 340 "pidl/idl.yp"
+#line 344 "idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
[#Rule 110
'anytext', 3,
sub
-#line 341 "pidl/idl.yp"
+#line 345 "idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
[#Rule 111
'anytext', 3,
sub
-#line 342 "pidl/idl.yp"
+#line 346 "idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
[#Rule 112
'anytext', 3,
sub
-#line 343 "pidl/idl.yp"
+#line 347 "idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
[#Rule 113
'anytext', 3,
sub
-#line 344 "pidl/idl.yp"
+#line 348 "idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
[#Rule 114
'anytext', 3,
sub
-#line 345 "pidl/idl.yp"
+#line 349 "idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
[#Rule 115
'anytext', 3,
sub
-#line 346 "pidl/idl.yp"
+#line 350 "idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
[#Rule 116
'anytext', 3,
sub
-#line 347 "pidl/idl.yp"
+#line 351 "idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
[#Rule 117
'anytext', 3,
sub
-#line 348 "pidl/idl.yp"
+#line 352 "idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
[#Rule 118
'anytext', 5,
sub
-#line 349 "pidl/idl.yp"
+#line 353 "idl.yp"
{ "$_[1]$_[2]$_[3]$_[4]$_[5]" }
],
[#Rule 119
'anytext', 5,
sub
-#line 350 "pidl/idl.yp"
+#line 354 "idl.yp"
{ "$_[1]$_[2]$_[3]$_[4]$_[5]" }
],
[#Rule 120
@@ -2510,7 +2502,7 @@ sub
[#Rule 124
'text', 1,
sub
-#line 364 "pidl/idl.yp"
+#line 368 "idl.yp"
{ "\"$_[1]\"" }
],
[#Rule 125
@@ -2524,7 +2516,7 @@ sub
bless($self,$class);
}
-#line 375 "pidl/idl.yp"
+#line 379 "idl.yp"
use Parse::Pidl qw(error);
diff --git a/source4/pidl/lib/Parse/Pidl/NDR.pm b/source4/pidl/lib/Parse/Pidl/NDR.pm
index b76a0f5a38..d55df7a452 100644
--- a/source4/pidl/lib/Parse/Pidl/NDR.pm
+++ b/source4/pidl/lib/Parse/Pidl/NDR.pm
@@ -383,6 +383,7 @@ sub ParseStruct($$)
my @elements = ();
my $surrounding = undef;
+
foreach my $x (@{$struct->{ELEMENTS}})
{
my $e = ParseElement($x);
@@ -403,13 +404,20 @@ sub ParseStruct($$)
&& property_matches($e, "flag", ".*LIBNDR_FLAG_STR_CONFORMANT.*")) {
$surrounding = $struct->{ELEMENTS}[-1];
}
+
+ my $align = undef;
+ if ($struct->{NAME}) {
+ $align = align_type($struct->{NAME});
+ }
return {
TYPE => "STRUCT",
+ NAME => $struct->{NAME},
SURROUNDING_ELEMENT => $surrounding,
ELEMENTS => \@elements,
PROPERTIES => $struct->{PROPERTIES},
- ORIGINAL => $struct
+ ORIGINAL => $struct,
+ ALIGN => $align
};
}
@@ -444,6 +452,7 @@ sub ParseUnion($$)
return {
TYPE => "UNION",
+ NAME => $e->{NAME},
SWITCH_TYPE => $switch_type,
ELEMENTS => \@elements,
PROPERTIES => $e->{PROPERTIES},
@@ -458,6 +467,7 @@ sub ParseEnum($$)
return {
TYPE => "ENUM",
+ NAME => $e->{NAME},
BASE_TYPE => Parse::Pidl::Typelist::enum_type_fn($e),
ELEMENTS => $e->{ELEMENTS},
PROPERTIES => $e->{PROPERTIES},
@@ -471,6 +481,7 @@ sub ParseBitmap($$)
return {
TYPE => "BITMAP",
+ NAME => $e->{NAME},
BASE_TYPE => Parse::Pidl::Typelist::bitmap_type_fn($e),
ELEMENTS => $e->{ELEMENTS},
PROPERTIES => $e->{PROPERTIES},
@@ -501,8 +512,8 @@ sub ParseTypedef($$)
{
my ($ndr,$d) = @_;
- if (defined($d->{PROPERTIES}) && !defined($d->{DATA}->{PROPERTIES})) {
- $d->{DATA}->{PROPERTIES} = $d->{PROPERTIES};
+ if (defined($d->{DATA}->{PROPERTIES}) && !defined($d->{PROPERTIES})) {
+ $d->{PROPERTIES} = $d->{DATA}->{PROPERTIES};
}
my $data = ParseType($ndr, $d->{DATA});
@@ -865,7 +876,7 @@ sub mapToScalar($)
}
#####################################################################
-# parse a struct
+# validate an element
sub ValidElement($)
{
my $e = shift;
@@ -881,8 +892,8 @@ sub ValidElement($)
fatal($e, el_name($e) . ": switch_is() used on non-union type $e->{TYPE} which is a $type->{DATA}->{TYPE}");
}
- if (!has_property($type, "nodiscriminant") and defined($e2)) {
- my $discriminator_type = has_property($type, "switch_type");
+ if (not has_property($type->{DATA}, "nodiscriminant") and defined($e2)) {
+ my $discriminator_type = has_property($type->{DATA}, "switch_type");
$discriminator_type = "uint32" unless defined ($discriminator_type);
my $t1 = mapToScalar($discriminator_type);
@@ -940,12 +951,30 @@ sub ValidElement($)
}
#####################################################################
-# parse a struct
+# validate an enum
+sub ValidEnum($)
+{
+ my ($enum) = @_;
+
+ ValidProperties($enum, "ENUM");
+}
+
+#####################################################################
+# validate a bitmap
+sub ValidBitmap($)
+{
+ my ($bitmap) = @_;
+
+ ValidProperties($bitmap, "BITMAP");
+}
+
+#####################################################################
+# validate a struct
sub ValidStruct($)
{
my($struct) = shift;
- ValidProperties($struct,"STRUCT");
+ ValidProperties($struct, "STRUCT");
foreach my $e (@{$struct->{ELEMENTS}}) {
$e->{PARENT} = $struct;
@@ -994,23 +1023,15 @@ sub ValidTypedef($)
my($typedef) = shift;
my $data = $typedef->{DATA};
- ValidProperties($typedef,"TYPEDEF");
+ ValidProperties($typedef, "TYPEDEF");
$data->{PARENT} = $typedef;
- if (ref($data) eq "HASH") {
- if ($data->{TYPE} eq "STRUCT") {
- ValidStruct($data);
- }
-
- if ($data->{TYPE} eq "UNION") {
- ValidUnion($data);
- }
- }
+ ValidType($data) if (ref($data) eq "HASH");
}
#####################################################################
-# parse a function
+# validate a function
sub ValidFunction($)
{
my($fn) = shift;
@@ -1027,6 +1048,21 @@ sub ValidFunction($)
}
#####################################################################
+# validate a type
+sub ValidType($)
+{
+ my ($t) = @_;
+
+ {
+ TYPEDEF => \&ValidTypedef,
+ STRUCT => \&ValidStruct,
+ UNION => \&ValidUnion,
+ ENUM => \&ValidEnum,
+ BITMAP => \&ValidBitmap
+ }->{$t->{TYPE}}->($t);
+}
+
+#####################################################################
# parse the interface definitions
sub ValidInterface($)
{
@@ -1059,10 +1095,12 @@ sub ValidInterface($)
}
foreach my $d (@{$data}) {
- ($d->{TYPE} eq "TYPEDEF") &&
- ValidTypedef($d);
- ($d->{TYPE} eq "FUNCTION") &&
- ValidFunction($d);
+ ($d->{TYPE} eq "FUNCTION") && ValidFunction($d);
+ ($d->{TYPE} eq "TYPEDEF" or
+ $d->{TYPE} eq "STRUCT" or
+ $d->{TYPE} eq "UNION" or
+ $d->{TYPE} eq "ENUM" or
+ $d->{TYPE} eq "BITMAP") && ValidType($d);
}
}
diff --git a/source4/pidl/lib/Parse/Pidl/Samba4/Header.pm b/source4/pidl/lib/Parse/Pidl/Samba4/Header.pm
index 110a483fc4..fbc00d7c13 100644
--- a/source4/pidl/lib/Parse/Pidl/Samba4/Header.pm
+++ b/source4/pidl/lib/Parse/Pidl/Samba4/Header.pm
@@ -219,8 +219,6 @@ sub HeaderTypedef($)
{
my($typedef) = shift;
HeaderType($typedef, $typedef->{DATA}, $typedef->{NAME});
- pidl ";\n\n" unless ($typedef->{DATA}->{TYPE} eq "BITMAP" or
- $typedef->{DATA}->{TYPE} eq "ENUM");
}
#####################################################################
@@ -354,8 +352,12 @@ sub HeaderInterface($)
}
foreach my $d (@{$interface->{DATA}}) {
- next if ($d->{TYPE} ne "TYPEDEF");
- HeaderTypedef($d);
+ HeaderTypedef($d) if ($d->{TYPE} eq "TYPEDEF");
+ HeaderStruct($d, $d->{NAME}) if ($d->{TYPE} eq "STRUCT");
+ HeaderUnion($d, $d->{NAME}) if ($d->{TYPE} eq "UNION");
+ HeaderEnum($d, $d->{NAME}) if ($d->{TYPE} eq "ENUM");
+ HeaderBitmap($d, $d->{NAME}) if ($d->{TYPE} eq "BITMAP");
+ pidl ";\n\n";
}
foreach my $d (@{$interface->{DATA}}) {
diff --git a/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm b/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
index 6e4d5825d0..15618bb534 100644
--- a/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
+++ b/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
@@ -12,7 +12,7 @@ require Exporter;
@EXPORT = qw(is_charset_array);
@EXPORT_OK = qw(check_null_pointer GenerateFunctionInEnv
GenerateFunctionOutEnv EnvSubstituteValue GenerateStructEnv NeededFunction
- NeededElement NeededTypedef);
+ NeededElement NeededType);
use strict;
use Parse::Pidl::Typelist qw(hasType getType mapType);
@@ -1335,10 +1335,10 @@ sub ParseEnumPrint($$)
end_flags($enum);
}
-sub DeclEnum($)
+sub DeclEnum($$$)
{
- my ($e,$t) = @_;
- return "enum $e->{NAME} " .
+ my ($e,$t,$name) = @_;
+ return "enum $name " .
($t eq "pull"?"*":"") . "r";
}
@@ -1418,10 +1418,10 @@ sub ParseBitmapPrint($$)
end_flags($bitmap);
}
-sub DeclBitmap($$)
+sub DeclBitmap($$$)
{
- my ($e,$t) = @_;
- return mapType(Parse::Pidl::Typelist::bitmap_type_fn($e->{DATA})) .
+ my ($e,$t,$name) = @_;
+ return mapType(Parse::Pidl::Typelist::bitmap_type_fn($e)) .
($t eq "pull"?" *":" ") . "r";
}
@@ -1581,27 +1581,27 @@ sub ParseStructPull($$)
#####################################################################
# calculate size of ndr struct
-sub ParseStructNdrSize($)
+sub ParseStructNdrSize($$)
{
- my $t = shift;
+ my ($t, $name) = @_;
my $sizevar;
if (my $flags = has_property($t, "flag")) {
pidl "flags |= $flags;";
}
- pidl "return ndr_size_struct(r, flags, (ndr_push_flags_fn_t)ndr_push_$t->{NAME});";
+ pidl "return ndr_size_struct(r, flags, (ndr_push_flags_fn_t)ndr_push_$name);";
}
-sub DeclStruct($)
+sub DeclStruct($$$)
{
- my ($e,$t) = @_;
- return ($t ne "pull"?"const ":"") . "struct $e->{NAME} *r";
+ my ($e,$t,$name) = @_;
+ return ($t ne "pull"?"const ":"") . "struct $name *r";
}
-sub ArgsStructNdrSize($)
+sub ArgsStructNdrSize($$)
{
- my $d = shift;
- return "const struct $d->{NAME} *r, int flags";
+ my ($d, $name) = @_;
+ return "const struct $name *r, int flags";
}
$typefamily{STRUCT} = {
@@ -1615,16 +1615,16 @@ $typefamily{STRUCT} = {
#####################################################################
# calculate size of ndr struct
-sub ParseUnionNdrSize($)
+sub ParseUnionNdrSize($$)
{
- my $t = shift;
+ my ($t, $name) = @_;
my $sizevar;
if (my $flags = has_property($t, "flag")) {
pidl "flags |= $flags;";
}
- pidl "return ndr_size_union(r, flags, level, (ndr_push_flags_fn_t)ndr_push_$t->{NAME});";
+ pidl "return ndr_size_union(r, flags, level, (ndr_push_flags_fn_t)ndr_push_$name);";
}
#####################################################################
@@ -1864,16 +1864,16 @@ sub ParseUnionPull($$)
pidl "ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset);" if defined($e->{PROPERTIES}{relative_base});
}
-sub DeclUnion($$)
+sub DeclUnion($$$)
{
- my ($e,$t) = @_;
- return ($t ne "pull"?"const ":"") . "union $e->{NAME} *r";
+ my ($e,$t,$name) = @_;
+ return ($t ne "pull"?"const ":"") . "union $name *r";
}
-sub ArgsUnionNdrSize($)
+sub ArgsUnionNdrSize($$)
{
- my $d = shift;
- return "const union $d->{NAME} *r, uint32_t level, int flags";
+ my ($d,$name) = @_;
+ return "const union $name *r, uint32_t level, int flags";
}
$typefamily{UNION} = {
@@ -1887,81 +1887,62 @@ $typefamily{UNION} = {
#####################################################################
# parse a typedef - push side
-sub ParseTypedefPush($)
+sub ParseTypedefPush($$)
{
- my($e) = shift;
-
- my $args = $typefamily{$e->{DATA}->{TYPE}}->{DECL}->($e,"push");
- fn_declare("push", $e, "NTSTATUS ndr_push_$e->{NAME}(struct ndr_push *ndr, int ndr_flags, $args)") or return;
+ my($e,$name) = @_;
- pidl "{";
- indent;
- $typefamily{$e->{DATA}->{TYPE}}->{PUSH_FN_BODY}->($e->{DATA}, $e->{NAME});
- pidl "return NT_STATUS_OK;";
- deindent;
- pidl "}";
- pidl "";;
+ $typefamily{$e->{DATA}->{TYPE}}->{PUSH_FN_BODY}->($e->{DATA}, $name);
}
#####################################################################
# parse a typedef - pull side
-sub ParseTypedefPull($)
+sub ParseTypedefPull($$)
{
- my($e) = shift;
-
- my $args = $typefamily{$e->{DATA}->{TYPE}}->{DECL}->($e,"pull");
-
- fn_declare("pull", $e, "NTSTATUS ndr_pull_$e->{NAME}(struct ndr_pull *ndr, int ndr_flags, $args)") or return;
+ my($e,$name) = @_;
- pidl "{";
- indent;
- $typefamily{$e->{DATA}->{TYPE}}->{PULL_FN_BODY}->($e->{DATA}, $e->{NAME});
- pidl "return NT_STATUS_OK;";
- deindent;
- pidl "}";
- pidl "";
+ $typefamily{$e->{DATA}->{TYPE}}->{PULL_FN_BODY}->($e->{DATA}, $name);
}
#####################################################################
# parse a typedef - print side
-sub ParseTypedefPrint($)
+sub ParseTypedefPrint($$)
{
- my($e) = shift;
-
- my $args = $typefamily{$e->{DATA}->{TYPE}}->{DECL}->($e,"print");
-
- pidl_hdr "void ndr_print_$e->{NAME}(struct ndr_print *ndr, const char *name, $args);";
-
- return if (has_property($e, "noprint"));
+ my($e,$name) = @_;
- pidl "_PUBLIC_ void ndr_print_$e->{NAME}(struct ndr_print *ndr, const char *name, $args)";
- pidl "{";
- indent;
- $typefamily{$e->{DATA}->{TYPE}}->{PRINT_FN_BODY}->($e->{DATA}, $e->{NAME});
- deindent;
- pidl "}";
- pidl "";
+ $typefamily{$e->{DATA}->{TYPE}}->{PRINT_FN_BODY}->($e->{DATA}, $name);
}
#####################################################################
## calculate the size of a structure
-sub ParseTypedefNdrSize($)
+sub ParseTypedefNdrSize($$)
{
- my($t) = shift;
+ my($t,$name) = @_;
- my $tf = $typefamily{$t->{DATA}->{TYPE}};
- my $args = $tf->{SIZE_FN_ARGS}->($t);
+ $typefamily{$t->{DATA}->{TYPE}}->{SIZE_FN_BODY}->($t->{DATA}, $name);
+}
- fn_declare("size", $t, "size_t ndr_size_$t->{NAME}($args)") or return;
+sub DeclTypedef($$$)
+{
+ my ($e, $t, $name) = @_;
+
+ return $typefamily{$e->{DATA}->{TYPE}}->{DECL}->($e->{DATA}, $t, $name);
+}
- pidl "{";
- indent;
- $typefamily{$t->{DATA}->{TYPE}}->{SIZE_FN_BODY}->($t);
- deindent;
- pidl "}";
- pidl "";
+sub ArgsTypedefNdrSize($$)
+{
+ my ($d, $name) = @_;
+ return $typefamily{$d->{DATA}->{TYPE}}->{SIZE_FN_ARGS}->($d->{DATA}, $name);
}
+$typefamily{TYPEDEF} = {
+ PUSH_FN_BODY => \&ParseTypedefPush,
+ DECL => \&DeclTypedef,
+ PULL_FN_BODY => \&ParseTypedefPull,
+ PRINT_FN_BODY => \&ParseTypedefPrint,
+ SIZE_FN_ARGS => \&ArgsTypedefNdrSize,
+ SIZE_FN_BODY => \&ParseTypedefNdrSize,
+};
+
#####################################################################
# parse a function - print side
sub ParseFunctionPrint($)
@@ -2379,6 +2360,74 @@ sub HeaderInterface($)
}
+sub ParseTypePush($)
+{
+ my ($e) = @_;
+
+ my $args = $typefamily{$e->{TYPE}}->{DECL}->($e, "push", $e->{NAME});
+ fn_declare("push", $e, "NTSTATUS ndr_push_$e->{NAME}(struct ndr_push *ndr, int ndr_flags, $args)") or return;
+
+ pidl "{";
+ indent;
+ $typefamily{$e->{TYPE}}->{PUSH_FN_BODY}->($e, $e->{NAME});
+ pidl "return NT_STATUS_OK;";
+ deindent;
+ pidl "}";
+ pidl "";;
+}
+
+sub ParseTypePull($)
+{
+ my ($e) = @_;
+
+ my $args = $typefamily{$e->{TYPE}}->{DECL}->($e, "pull", $e->{NAME});
+
+ fn_declare("pull", $e, "NTSTATUS ndr_pull_$e->{NAME}(struct ndr_pull *ndr, int ndr_flags, $args)") or return;
+
+ pidl "{";
+ indent;
+ $typefamily{$e->{TYPE}}->{PULL_FN_BODY}->($e, $e->{NAME});
+ pidl "return NT_STATUS_OK;";
+ deindent;
+ pidl "}";
+ pidl "";
+}
+
+sub ParseTypePrint($)
+{
+ my ($e) = @_;
+ my $args = $typefamily{$e->{TYPE}}->{DECL}->($e, "print", $e->{NAME});
+
+ pidl_hdr "void ndr_print_$e->{NAME}(struct ndr_print *ndr, const char *name, $args);";
+
+ return if (has_property($e, "noprint"));
+
+ pidl "_PUBLIC_ void ndr_print_$e->{NAME}(struct ndr_print *ndr, const char *name, $args)";
+ pidl "{";
+ indent;
+ $typefamily{$e->{TYPE}}->{PRINT_FN_BODY}->($e, $e->{NAME});
+ deindent;
+ pidl "}";
+ pidl "";
+}
+
+sub ParseTypeNdrSize($)
+{
+ my ($t) = @_;
+
+ my $tf = $typefamily{$t->{TYPE}};
+ my $args = $tf->{SIZE_FN_ARGS}->($t, $t->{NAME});
+
+ fn_declare("size", $t, "size_t ndr_size_$t->{NAME}($args)") or return;
+
+ pidl "{";
+ indent;
+ $typefamily{$t->{TYPE}}->{SIZE_FN_BODY}->($t, $t->{NAME});
+ deindent;
+ pidl "}";
+ pidl "";
+}
+
#####################################################################
# parse the interface definitions
sub ParseInterface($$)
@@ -2398,15 +2447,15 @@ sub ParseInterface($$)
# Typedefs
foreach my $d (@{$interface->{TYPES}}) {
- ($needed->{"push_$d->{NAME}"}) && ParseTypedefPush($d);
- ($needed->{"pull_$d->{NAME}"}) && ParseTypedefPull($d);
- ($needed->{"print_$d->{NAME}"}) && ParseTypedefPrint($d);
+ ($needed->{"push_$d->{NAME}"}) && ParseTypePush($d);
+ ($needed->{"pull_$d->{NAME}"}) && ParseTypePull($d);
+ ($needed->{"print_$d->{NAME}"}) && ParseTypePrint($d);
# Make sure we don't generate a function twice...
$needed->{"push_$d->{NAME}"} = $needed->{"pull_$d->{NAME}"} =
$needed->{"print_$d->{NAME}"} = 0;
- ($needed->{"ndr_size_$d->{NAME}"}) && ParseTypedefNdrSize($d);
+ ($needed->{"ndr_size_$d->{NAME}"}) && ParseTypeNdrSize($d);
}
# Functions
@@ -2524,7 +2573,7 @@ sub NeededFunction($$)
}
}
-sub NeededTypedef($$)
+sub NeededType($$)
{
my ($t,$needed) = @_;
if (has_property($t, "public")) {
@@ -2556,7 +2605,7 @@ sub NeededInterface($$)
{
my ($interface,$needed) = @_;
NeededFunction($_, $needed) foreach (@{$interface->{FUNCTIONS}});
- NeededTypedef($_, $needed) foreach (reverse @{$interface->{TYPES}});
+ NeededType($_, $needed) foreach (reverse @{$interface->{TYPES}});
}
1;
diff --git a/source4/pidl/tests/Util.pm b/source4/pidl/tests/Util.pm
index a406b868e1..a65cd89c55 100644
--- a/source4/pidl/tests/Util.pm
+++ b/source4/pidl/tests/Util.pm
@@ -91,7 +91,6 @@ SKIP: {
my $cmd = "$cc $cflags -x c - -o $outfile $flags $ldflags";
$cmd =~ s/\n//g;
- print "$cmd\n";
open CC, "|$cmd";
print CC "#define uint_t unsigned int\n";
print CC "#define _GNU_SOURCE\n";
diff --git a/source4/pidl/tests/header.pl b/source4/pidl/tests/header.pl
index b7c0b285f3..3dae33ae6c 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 => 9;
+use Test::More tests => 10;
use FindBin qw($RealBin);
use lib "$RealBin";
use Util;
@@ -34,3 +34,5 @@ like(parse_idl("interface x { void foo ([out] uint32 x); };"),
like(parse_idl("interface x { void foo ([in,out] uint32 x); };"),
qr/struct foo.*{.*struct\s+{\s+uint32_t x;\s+} in;\s+struct\s+{\s+uint32_t x;\s+} out;.*};/sm, "fn in,out arg works");
like(parse_idl("interface x { void foo (uint32 x); };"), qr/struct foo.*{.*struct\s+{\s+uint32_t x;\s+} in;\s+struct\s+{\s+uint32_t x;\s+} out;.*};/sm, "fn with no props implies in,out");
+like(parse_idl("interface p { struct x { int y; }; };"),
+ qr/struct x.*{.*int32_t y;.*}.*;/sm, "interface member generated properly");
diff --git a/source4/pidl/tests/ndr_deprecations.pl b/source4/pidl/tests/ndr_deprecations.pl
index 89738e42f6..86828e5982 100755
--- a/source4/pidl/tests/ndr_deprecations.pl
+++ b/source4/pidl/tests/ndr_deprecations.pl
@@ -24,5 +24,3 @@ my $e = {
test_warnings("foo.idl:42: subcontext() is deprecated. Use represent_as() or transmit_as() instead\n",
sub { ValidElement($e); });
-
-
diff --git a/source4/pidl/tests/ndr_tagtype.pl b/source4/pidl/tests/ndr_tagtype.pl
index a7f7d0490a..067fa096b4 100755
--- a/source4/pidl/tests/ndr_tagtype.pl
+++ b/source4/pidl/tests/ndr_tagtype.pl
@@ -8,15 +8,7 @@ use FindBin qw($RealBin);
use lib "$RealBin";
use Util qw(test_samba4_ndr);
-SKIP: {
- skip "Tagged types without typedef are not supported yet", 8;
-
-test_samba4_ndr('struct-notypedef',
-'
- struct bla {
- uint8 x;
- };
-',
+test_samba4_ndr('struct-notypedef', '[public] struct bla { uint8 x; }; ',
'
struct ndr_push *ndr = ndr_push_init_ctx(NULL);
struct bla r;
@@ -33,5 +25,3 @@ test_samba4_ndr('struct-notypedef',
if (!data_blob_equal(&result_blob, &expected_blob))
return 2;
');
-
-}
diff --git a/source4/pidl/tests/parse_idl.pl b/source4/pidl/tests/parse_idl.pl
index 859c2b4e46..265ac7a2bd 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 => 59 * 2;
+use Test::More tests => 62 * 2;
use FindBin qw($RealBin);
use lib "$RealBin";
use Util qw(test_errors);
@@ -83,8 +83,12 @@ testok "nested1", "interface test { struct x { struct { int a; } z; }; };";
testok "nested2", "interface test { struct x { struct y { int a; } z; }; };";
testok "bitmap1", "interface test { bitmap x { a=1 }; };";
testok "unsigned", "interface test { struct x { unsigned short y; }; };";
+testok "struct-property", "interface test { [public] struct x { short y; }; };";
testok "signed", "interface test { struct x { signed short y; }; };";
testok "declarg", "interface test { void test(struct { int x; } a); };";
+testok "structarg", "interface test { void test(struct a b); };";
+testfail "structargmissing", "interface test { void test(struct a); };",
+ "<structargmissing>:0: Syntax error near ')'\n";
testok "structqual", "interface test { struct x { struct y z; }; };";
testok "unionqual", "interface test { struct x { union y z; }; };";
testok "enumqual", "interface test { struct x { enum y z; }; };";
diff --git a/source4/pidl/tests/samba-ndr.pl b/source4/pidl/tests/samba-ndr.pl
index 1f859db788..50b0bd269f 100755
--- a/source4/pidl/tests/samba-ndr.pl
+++ b/source4/pidl/tests/samba-ndr.pl
@@ -11,7 +11,7 @@ use Util;
use Parse::Pidl::Util qw(MyDumper);
use Parse::Pidl::Samba4::NDR::Parser qw(check_null_pointer
GenerateFunctionInEnv GenerateFunctionOutEnv GenerateStructEnv
- EnvSubstituteValue NeededFunction NeededElement NeededTypedef);
+ EnvSubstituteValue NeededFunction NeededElement NeededType);
my $output;
sub print_fn($) { my $x = shift; $output.=$x; }
@@ -202,19 +202,19 @@ is_deeply($needed, { pull_foo => 1, print_foo => 1, push_foo => 1,
# public structs are always needed
$needed = {};
-NeededTypedef({ NAME => "bla", DATA => { TYPE => "STRUCT", ELEMENTS => [] } },
+NeededType({ NAME => "bla", DATA => { TYPE => "STRUCT", ELEMENTS => [] } },
$needed);
is_deeply($needed, { });
$needed = {};
-NeededTypedef({ PROPERTIES => { public => 1 }, NAME => "bla",
+NeededType({ PROPERTIES => { public => 1 }, NAME => "bla",
DATA => { TYPE => "STRUCT", ELEMENTS => [] } },
$needed);
is_deeply($needed, { pull_bla => 1, print_bla => 1, push_bla => 1 });
# make sure types for elements are set too
$needed = {};
-NeededTypedef({ PROPERTIES => { public => 1 }, NAME => "bla",
+NeededType({ PROPERTIES => { public => 1 }, NAME => "bla",
DATA => { TYPE => "STRUCT",
ELEMENTS => [ { TYPE => "bar", REPRESENTATION_TYPE => "bar" } ] } },
$needed);
@@ -222,7 +222,7 @@ is_deeply($needed, { pull_bla => 1, print_bla => 1, push_bla => 1,
pull_bar => 1, print_bar => 1, push_bar => 1});
$needed = {};
-NeededTypedef({ PROPERTIES => { gensize => 1}, NAME => "bla",
+NeededType({ PROPERTIES => { gensize => 1}, NAME => "bla",
DATA => { TYPE => "STRUCT",
ELEMENTS => [ { TYPE => "bar", REPRESENTATION_TYPE => "bar" } ] } },
$needed);
@@ -230,14 +230,14 @@ is_deeply($needed, { ndr_size_bla => 1 });
# make sure types for elements are set too
$needed = { pull_bla => 1 };
-NeededTypedef({ NAME => "bla",
+NeededType({ NAME => "bla",
DATA => { TYPE => "STRUCT",
ELEMENTS => [ { TYPE => "bar", REPRESENTATION_TYPE => "bar" } ] } },
$needed);
is_deeply($needed, { pull_bla => 1, pull_bar => 1 });
$needed = {};
-NeededTypedef({ PROPERTIES => { public => 1},
+NeededType({ PROPERTIES => { public => 1},
NAME => "bla",
DATA => { TYPE => "STRUCT",
ELEMENTS => [ { TYPE => "bar", REPRESENTATION_TYPE => "rep" } ] } },