summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/build/pidl/header.pm34
-rw-r--r--source4/build/pidl/idl.pm1029
-rw-r--r--source4/build/pidl/idl.yp28
-rw-r--r--source4/build/pidl/parser.pm5
4 files changed, 622 insertions, 474 deletions
diff --git a/source4/build/pidl/header.pm b/source4/build/pidl/header.pm
index 10adf94dba..0deead29ff 100644
--- a/source4/build/pidl/header.pm
+++ b/source4/build/pidl/header.pm
@@ -200,6 +200,19 @@ sub HeaderType($$$)
}
#####################################################################
+# parse a declare
+sub HeaderDeclare($)
+{
+ my($declare) = shift;
+
+ if ($declare->{DATA}->{TYPE} eq "ENUM") {
+ util::enum_bitmap($declare, $declare->{NAME});
+ } elsif ($declare->{DATA}->{TYPE} eq "BITMAP") {
+ util::register_bitmap($declare, $declare->{NAME});
+ }
+}
+
+#####################################################################
# parse a typedef
sub HeaderTypedef($)
{
@@ -237,6 +250,23 @@ sub HeaderTypedefProto($)
$res .= "void ndr_print_$d->{NAME}(struct ndr_print *ndr, const char *name, int level, union $d->{NAME} *r);\n";
}
}
+
+ if ($d->{DATA}{TYPE} eq "ENUM") {
+ $res .= "NTSTATUS ndr_push_$d->{NAME}(struct ndr_push *ndr, enum $d->{NAME} r);\n";
+ $res .= "NTSTATUS ndr_pull_$d->{NAME}(struct ndr_pull *ndr, enum $d->{NAME} *r);\n";
+ if (!util::has_property($d, "noprint")) {
+ $res .= "void ndr_print_$d->{NAME}(struct ndr_print *ndr, const char *name, enum $d->{NAME} r);\n";
+ }
+ }
+
+ if ($d->{DATA}{TYPE} eq "BITMAP") {
+ my $type_decl = util::bitmap_type_decl($d->{DATA});
+ $res .= "NTSTATUS ndr_push_$d->{NAME}(struct ndr_push *ndr, $type_decl r);\n";
+ $res .= "NTSTATUS ndr_pull_$d->{NAME}(struct ndr_pull *ndr, $type_decl *r);\n";
+ if (!util::has_property($d, "noprint")) {
+ $res .= "void ndr_print_$d->{NAME}(struct ndr_print *ndr, const char *name, $type_decl r);\n";
+ }
+ }
}
#####################################################################
@@ -431,6 +461,8 @@ sub HeaderInterface($)
foreach my $d (@{$data}) {
($d->{TYPE} eq "CONST") &&
HeaderConst($d);
+ ($d->{TYPE} eq "DECLARE") &&
+ HeaderDeclare($d);
($d->{TYPE} eq "TYPEDEF") &&
HeaderTypedef($d);
($d->{TYPE} eq "TYPEDEF") &&
@@ -438,7 +470,7 @@ sub HeaderInterface($)
($d->{TYPE} eq "FUNCTION") &&
HeaderFunction($d);
($d->{TYPE} eq "FUNCTION") &&
- HeaderFnProto($interface, $d);
+ HeaderFnProto($interface, $d);
}
(util::has_property($interface, "object")) &&
diff --git a/source4/build/pidl/idl.pm b/source4/build/pidl/idl.pm
index a3e23fcda1..e1600b5b40 100644
--- a/source4/build/pidl/idl.pm
+++ b/source4/build/pidl/idl.pm
@@ -509,7 +509,7 @@ sub new {
ACTIONS => {
'' => 2
},
- DEFAULT => -54,
+ DEFAULT => -60,
GOTOS => {
'interface' => 3,
'coclass' => 4,
@@ -559,7 +559,7 @@ sub new {
}
},
{#State 9
- DEFAULT => -78
+ DEFAULT => -84
},
{#State 10
ACTIONS => {
@@ -570,10 +570,10 @@ sub new {
ACTIONS => {
"(" => 16
},
- DEFAULT => -58
+ DEFAULT => -64
},
{#State 12
- DEFAULT => -56
+ DEFAULT => -62
},
{#State 13
ACTIONS => {
@@ -602,7 +602,7 @@ sub new {
'TEXT' => 22,
'IDENTIFIER' => 9
},
- DEFAULT => -64,
+ DEFAULT => -70,
GOTOS => {
'identifier' => 23,
'listtext' => 26,
@@ -621,7 +621,7 @@ sub new {
}
},
{#State 18
- DEFAULT => -55
+ DEFAULT => -61
},
{#State 19
ACTIONS => {
@@ -640,20 +640,20 @@ sub new {
ACTIONS => {
"}" => 32
},
- DEFAULT => -54,
+ DEFAULT => -60,
GOTOS => {
'interface' => 33,
'property_list' => 34
}
},
{#State 22
- DEFAULT => -80
+ DEFAULT => -86
},
{#State 23
- DEFAULT => -65
+ DEFAULT => -71
},
{#State 24
- DEFAULT => -67
+ DEFAULT => -73
},
{#State 25
ACTIONS => {
@@ -668,7 +668,7 @@ sub new {
"." => 43,
">" => 44
},
- DEFAULT => -60
+ DEFAULT => -66
},
{#State 26
ACTIONS => {
@@ -677,13 +677,13 @@ sub new {
}
},
{#State 27
- DEFAULT => -66
+ DEFAULT => -72
},
{#State 28
- DEFAULT => -79
+ DEFAULT => -85
},
{#State 29
- DEFAULT => -57
+ DEFAULT => -63
},
{#State 30
DEFAULT => -9
@@ -691,13 +691,15 @@ sub new {
{#State 31
ACTIONS => {
"typedef" => 47,
- "const" => 53
+ "declare" => 52,
+ "const" => 55
},
- DEFAULT => -54,
+ DEFAULT => -60,
GOTOS => {
- 'const' => 52,
+ 'const' => 54,
+ 'declare' => 53,
'function' => 48,
- 'typedef' => 54,
+ 'typedef' => 56,
'definitions' => 49,
'definition' => 51,
'property_list' => 50
@@ -705,11 +707,11 @@ sub new {
},
{#State 32
ACTIONS => {
- ";" => 56
+ ";" => 58
},
- DEFAULT => -81,
+ DEFAULT => -87,
GOTOS => {
- 'optional_semicolon' => 55
+ 'optional_semicolon' => 57
}
},
{#State 33
@@ -727,11 +729,11 @@ sub new {
'TEXT' => 22,
'IDENTIFIER' => 9
},
- DEFAULT => -64,
+ DEFAULT => -70,
GOTOS => {
'identifier' => 23,
'text' => 24,
- 'anytext' => 57,
+ 'anytext' => 59,
'constant' => 27
}
},
@@ -741,11 +743,11 @@ sub new {
'TEXT' => 22,
'IDENTIFIER' => 9
},
- DEFAULT => -64,
+ DEFAULT => -70,
GOTOS => {
'identifier' => 23,
'text' => 24,
- 'anytext' => 58,
+ 'anytext' => 60,
'constant' => 27
}
},
@@ -755,13 +757,13 @@ sub new {
'TEXT' => 22,
'IDENTIFIER' => 9
},
- DEFAULT => -64,
+ DEFAULT => -70,
GOTOS => {
'identifier' => 23,
'text' => 24,
- 'anytext' => 59,
+ 'anytext' => 61,
'constant' => 27,
- 'commalisttext' => 60
+ 'commalisttext' => 62
}
},
{#State 38
@@ -770,11 +772,11 @@ sub new {
'TEXT' => 22,
'IDENTIFIER' => 9
},
- DEFAULT => -64,
+ DEFAULT => -70,
GOTOS => {
'identifier' => 23,
'text' => 24,
- 'anytext' => 61,
+ 'anytext' => 63,
'constant' => 27
}
},
@@ -784,11 +786,11 @@ sub new {
'TEXT' => 22,
'IDENTIFIER' => 9
},
- DEFAULT => -64,
+ DEFAULT => -70,
GOTOS => {
'identifier' => 23,
'text' => 24,
- 'anytext' => 62,
+ 'anytext' => 64,
'constant' => 27
}
},
@@ -798,11 +800,11 @@ sub new {
'TEXT' => 22,
'IDENTIFIER' => 9
},
- DEFAULT => -64,
+ DEFAULT => -70,
GOTOS => {
'identifier' => 23,
'text' => 24,
- 'anytext' => 63,
+ 'anytext' => 65,
'constant' => 27
}
},
@@ -812,13 +814,13 @@ sub new {
'TEXT' => 22,
'IDENTIFIER' => 9
},
- DEFAULT => -64,
+ DEFAULT => -70,
GOTOS => {
'identifier' => 23,
'text' => 24,
- 'anytext' => 59,
+ 'anytext' => 61,
'constant' => 27,
- 'commalisttext' => 64
+ 'commalisttext' => 66
}
},
{#State 42
@@ -827,11 +829,11 @@ sub new {
'TEXT' => 22,
'IDENTIFIER' => 9
},
- DEFAULT => -64,
+ DEFAULT => -70,
GOTOS => {
'identifier' => 23,
'text' => 24,
- 'anytext' => 65,
+ 'anytext' => 67,
'constant' => 27
}
},
@@ -841,11 +843,11 @@ sub new {
'TEXT' => 22,
'IDENTIFIER' => 9
},
- DEFAULT => -64,
+ DEFAULT => -70,
GOTOS => {
'identifier' => 23,
'text' => 24,
- 'anytext' => 66,
+ 'anytext' => 68,
'constant' => 27
}
},
@@ -855,11 +857,11 @@ sub new {
'TEXT' => 22,
'IDENTIFIER' => 9
},
- DEFAULT => -64,
+ DEFAULT => -70,
GOTOS => {
'identifier' => 23,
'text' => 24,
- 'anytext' => 67,
+ 'anytext' => 69,
'constant' => 27
}
},
@@ -869,21 +871,21 @@ sub new {
'TEXT' => 22,
'IDENTIFIER' => 9
},
- DEFAULT => -64,
+ DEFAULT => -70,
GOTOS => {
'identifier' => 23,
'text' => 24,
- 'anytext' => 68,
+ 'anytext' => 70,
'constant' => 27
}
},
{#State 46
- DEFAULT => -59
+ DEFAULT => -65
},
{#State 47
- DEFAULT => -54,
+ DEFAULT => -60,
GOTOS => {
- 'property_list' => 69
+ 'property_list' => 71
}
},
{#State 48
@@ -891,74 +893,85 @@ sub new {
},
{#State 49
ACTIONS => {
- "}" => 70,
+ "}" => 72,
"typedef" => 47,
- "const" => 53
+ "declare" => 52,
+ "const" => 55
},
- DEFAULT => -54,
+ DEFAULT => -60,
GOTOS => {
- 'const' => 52,
+ 'const' => 54,
+ 'declare' => 53,
'function' => 48,
- 'typedef' => 54,
- 'definition' => 71,
+ 'typedef' => 56,
+ 'definition' => 73,
'property_list' => 50
}
},
{#State 50
ACTIONS => {
'IDENTIFIER' => 9,
- "union" => 72,
- "enum" => 73,
+ "union" => 74,
+ "enum" => 75,
"[" => 7,
- 'void' => 75,
- "bitmap" => 74,
- "struct" => 82
+ 'void' => 77,
+ "bitmap" => 76,
+ "struct" => 84
},
GOTOS => {
- 'identifier' => 77,
- 'struct' => 78,
- 'enum' => 79,
- 'type' => 80,
- 'union' => 81,
- 'bitmap' => 76
+ 'identifier' => 79,
+ 'struct' => 80,
+ 'enum' => 81,
+ 'type' => 82,
+ 'union' => 83,
+ 'bitmap' => 78
}
},
{#State 51
DEFAULT => -10
},
{#State 52
- DEFAULT => -13
+ DEFAULT => -60,
+ GOTOS => {
+ 'property_list' => 85
+ }
},
{#State 53
+ DEFAULT => -15
+ },
+ {#State 54
+ DEFAULT => -13
+ },
+ {#State 55
ACTIONS => {
'IDENTIFIER' => 9
},
GOTOS => {
- 'identifier' => 83
+ 'identifier' => 86
}
},
- {#State 54
+ {#State 56
DEFAULT => -14
},
- {#State 55
+ {#State 57
DEFAULT => -4
},
- {#State 56
- DEFAULT => -82
+ {#State 58
+ DEFAULT => -88
},
- {#State 57
+ {#State 59
ACTIONS => {
"{" => 37
},
- DEFAULT => -68
+ DEFAULT => -74
},
- {#State 58
+ {#State 60
ACTIONS => {
"{" => 37
},
- DEFAULT => -75
+ DEFAULT => -81
},
- {#State 59
+ {#State 61
ACTIONS => {
"-" => 35,
"+" => 36,
@@ -971,57 +984,57 @@ sub new {
"." => 43,
">" => 44
},
- DEFAULT => -62
+ DEFAULT => -68
},
- {#State 60
+ {#State 62
ACTIONS => {
- "}" => 84,
- "," => 85
+ "}" => 87,
+ "," => 88
}
},
- {#State 61
+ {#State 63
ACTIONS => {
"{" => 37
},
- DEFAULT => -73
+ DEFAULT => -79
},
- {#State 62
+ {#State 64
ACTIONS => {
"{" => 37
},
- DEFAULT => -74
+ DEFAULT => -80
},
- {#State 63
+ {#State 65
ACTIONS => {
"{" => 37
},
- DEFAULT => -72
+ DEFAULT => -78
},
- {#State 64
+ {#State 66
ACTIONS => {
- "," => 85,
- ")" => 86
+ "," => 88,
+ ")" => 89
}
},
- {#State 65
+ {#State 67
ACTIONS => {
"{" => 37
},
- DEFAULT => -70
+ DEFAULT => -76
},
- {#State 66
+ {#State 68
ACTIONS => {
"{" => 37
},
- DEFAULT => -69
+ DEFAULT => -75
},
- {#State 67
+ {#State 69
ACTIONS => {
"{" => 37
},
- DEFAULT => -71
+ DEFAULT => -77
},
- {#State 68
+ {#State 70
ACTIONS => {
"-" => 35,
"+" => 36,
@@ -1034,196 +1047,228 @@ sub new {
"." => 43,
">" => 44
},
- DEFAULT => -61
+ DEFAULT => -67
},
- {#State 69
+ {#State 71
ACTIONS => {
'IDENTIFIER' => 9,
- "union" => 72,
- "enum" => 73,
+ "union" => 74,
+ "enum" => 75,
"[" => 7,
- 'void' => 75,
- "bitmap" => 74,
- "struct" => 82
+ 'void' => 77,
+ "bitmap" => 76,
+ "struct" => 84
},
GOTOS => {
- 'identifier' => 77,
- 'struct' => 78,
- 'enum' => 79,
- 'type' => 87,
- 'union' => 81,
- 'bitmap' => 76
+ 'identifier' => 79,
+ 'struct' => 80,
+ 'enum' => 81,
+ 'type' => 90,
+ 'union' => 83,
+ 'bitmap' => 78
}
},
- {#State 70
+ {#State 72
ACTIONS => {
- ";" => 56
+ ";" => 58
},
- DEFAULT => -81,
+ DEFAULT => -87,
GOTOS => {
- 'optional_semicolon' => 88
+ 'optional_semicolon' => 91
}
},
- {#State 71
+ {#State 73
DEFAULT => -11
},
- {#State 72
+ {#State 74
ACTIONS => {
- "{" => 89
+ "{" => 92
}
},
- {#State 73
+ {#State 75
ACTIONS => {
- "{" => 90
+ "{" => 93
}
},
- {#State 74
+ {#State 76
ACTIONS => {
- "{" => 91
+ "{" => 94
}
},
- {#State 75
- DEFAULT => -24
- },
- {#State 76
- DEFAULT => -22
- },
{#State 77
- DEFAULT => -23
+ DEFAULT => -30
},
{#State 78
- DEFAULT => -19
+ DEFAULT => -28
},
{#State 79
- DEFAULT => -21
+ DEFAULT => -29
},
{#State 80
+ DEFAULT => -25
+ },
+ {#State 81
+ DEFAULT => -27
+ },
+ {#State 82
ACTIONS => {
'IDENTIFIER' => 9
},
GOTOS => {
- 'identifier' => 92
+ 'identifier' => 95
}
},
- {#State 81
- DEFAULT => -20
+ {#State 83
+ DEFAULT => -26
},
- {#State 82
+ {#State 84
ACTIONS => {
- "{" => 93
+ "{" => 96
}
},
- {#State 83
+ {#State 85
+ ACTIONS => {
+ "enum" => 97,
+ "[" => 7,
+ "bitmap" => 98
+ },
+ GOTOS => {
+ 'decl_enum' => 99,
+ 'decl_bitmap' => 100,
+ 'decl_type' => 101
+ }
+ },
+ {#State 86
ACTIONS => {
'IDENTIFIER' => 9
},
GOTOS => {
- 'identifier' => 94
+ 'identifier' => 102
}
},
- {#State 84
+ {#State 87
ACTIONS => {
'CONSTANT' => 28,
'TEXT' => 22,
'IDENTIFIER' => 9
},
- DEFAULT => -64,
+ DEFAULT => -70,
GOTOS => {
'identifier' => 23,
'text' => 24,
- 'anytext' => 95,
+ 'anytext' => 103,
'constant' => 27
}
},
- {#State 85
+ {#State 88
ACTIONS => {
'CONSTANT' => 28,
'TEXT' => 22,
'IDENTIFIER' => 9
},
- DEFAULT => -64,
+ DEFAULT => -70,
GOTOS => {
'identifier' => 23,
'text' => 24,
- 'anytext' => 96,
+ 'anytext' => 104,
'constant' => 27
}
},
- {#State 86
+ {#State 89
ACTIONS => {
'CONSTANT' => 28,
'TEXT' => 22,
'IDENTIFIER' => 9
},
- DEFAULT => -64,
+ DEFAULT => -70,
GOTOS => {
'identifier' => 23,
'text' => 24,
- 'anytext' => 97,
+ 'anytext' => 105,
'constant' => 27
}
},
- {#State 87
+ {#State 90
ACTIONS => {
'IDENTIFIER' => 9
},
GOTOS => {
- 'identifier' => 98
+ 'identifier' => 106
}
},
- {#State 88
+ {#State 91
DEFAULT => -7
},
- {#State 89
+ {#State 92
ACTIONS => {
- "[" => 101
+ "[" => 109
},
GOTOS => {
- 'union_elements' => 99,
- 'union_element' => 100
+ 'union_elements' => 107,
+ 'union_element' => 108
}
},
- {#State 90
+ {#State 93
ACTIONS => {
'IDENTIFIER' => 9
},
GOTOS => {
- 'identifier' => 102,
- 'enum_element' => 103,
- 'enum_elements' => 104
+ 'identifier' => 110,
+ 'enum_element' => 111,
+ 'enum_elements' => 112
}
},
- {#State 91
+ {#State 94
ACTIONS => {
'IDENTIFIER' => 9
},
GOTOS => {
- 'identifier' => 107,
- 'bitmap_elements' => 106,
- 'bitmap_element' => 105
+ 'identifier' => 115,
+ 'bitmap_elements' => 114,
+ 'bitmap_element' => 113
}
},
- {#State 92
+ {#State 95
ACTIONS => {
- "(" => 108
+ "(" => 116
}
},
- {#State 93
- DEFAULT => -45,
+ {#State 96
+ DEFAULT => -51,
GOTOS => {
- 'element_list1' => 109
+ 'element_list1' => 117
}
},
- {#State 94
+ {#State 97
+ DEFAULT => -22
+ },
+ {#State 98
+ DEFAULT => -23
+ },
+ {#State 99
+ DEFAULT => -20
+ },
+ {#State 100
+ DEFAULT => -21
+ },
+ {#State 101
ACTIONS => {
- "[" => 112,
- "=" => 111
+ 'IDENTIFIER' => 9
},
GOTOS => {
- 'array_len' => 110
+ 'identifier' => 118
}
},
- {#State 95
+ {#State 102
+ ACTIONS => {
+ "[" => 121,
+ "=" => 120
+ },
+ GOTOS => {
+ 'array_len' => 119
+ }
+ },
+ {#State 103
ACTIONS => {
"-" => 35,
"+" => 36,
@@ -1236,9 +1281,9 @@ sub new {
"." => 43,
">" => 44
},
- DEFAULT => -77
+ DEFAULT => -83
},
- {#State 96
+ {#State 104
ACTIONS => {
"-" => 35,
"+" => 36,
@@ -1251,257 +1296,265 @@ sub new {
"." => 43,
">" => 44
},
- DEFAULT => -63
+ DEFAULT => -69
},
- {#State 97
+ {#State 105
ACTIONS => {
"{" => 37
},
- DEFAULT => -76
+ DEFAULT => -82
},
- {#State 98
+ {#State 106
ACTIONS => {
- "[" => 112
+ "[" => 121
},
- DEFAULT => -51,
+ DEFAULT => -57,
GOTOS => {
- 'array_len' => 113
+ 'array_len' => 122
}
},
- {#State 99
+ {#State 107
ACTIONS => {
- "}" => 114,
- "[" => 101
+ "}" => 123,
+ "[" => 109
},
GOTOS => {
- 'union_element' => 115
+ 'union_element' => 124
}
},
- {#State 100
- DEFAULT => -36
+ {#State 108
+ DEFAULT => -42
},
- {#State 101
+ {#State 109
ACTIONS => {
- "case" => 116,
- "default" => 117
+ "case" => 125,
+ "default" => 126
}
},
- {#State 102
+ {#State 110
ACTIONS => {
- "=" => 118
+ "=" => 127
},
- DEFAULT => -28
+ DEFAULT => -34
},
- {#State 103
- DEFAULT => -26
+ {#State 111
+ DEFAULT => -32
},
- {#State 104
+ {#State 112
ACTIONS => {
- "}" => 119,
- "," => 120
+ "}" => 128,
+ "," => 129
}
},
- {#State 105
- DEFAULT => -31
+ {#State 113
+ DEFAULT => -37
},
- {#State 106
+ {#State 114
ACTIONS => {
- "}" => 121,
- "," => 122
+ "}" => 130,
+ "," => 131
}
},
- {#State 107
+ {#State 115
ACTIONS => {
- "=" => 123
+ "=" => 132
}
},
- {#State 108
+ {#State 116
ACTIONS => {
- "," => -47,
- "void" => 126,
- ")" => -47
+ "," => -53,
+ "void" => 135,
+ ")" => -53
},
- DEFAULT => -54,
+ DEFAULT => -60,
GOTOS => {
- 'base_element' => 124,
- 'element_list2' => 127,
- 'property_list' => 125
+ 'base_element' => 133,
+ 'element_list2' => 136,
+ 'property_list' => 134
}
},
- {#State 109
+ {#State 117
ACTIONS => {
- "}" => 128
+ "}" => 137
},
- DEFAULT => -54,
+ DEFAULT => -60,
GOTOS => {
- 'base_element' => 129,
- 'property_list' => 125
+ 'base_element' => 138,
+ 'property_list' => 134
}
},
- {#State 110
+ {#State 118
ACTIONS => {
- "=" => 130
+ ";" => 139
}
},
- {#State 111
+ {#State 119
+ ACTIONS => {
+ "=" => 140
+ }
+ },
+ {#State 120
ACTIONS => {
'IDENTIFIER' => 9,
'CONSTANT' => 28,
'TEXT' => 22
},
- DEFAULT => -64,
+ DEFAULT => -70,
GOTOS => {
'identifier' => 23,
'text' => 24,
- 'anytext' => 131,
+ 'anytext' => 141,
'constant' => 27
}
},
- {#State 112
+ {#State 121
ACTIONS => {
'IDENTIFIER' => 9,
'CONSTANT' => 28,
'TEXT' => 22,
- "]" => 133
+ "]" => 143
},
- DEFAULT => -64,
+ DEFAULT => -70,
GOTOS => {
'identifier' => 23,
'text' => 24,
- 'anytext' => 132,
+ 'anytext' => 142,
'constant' => 27
}
},
- {#State 113
+ {#State 122
ACTIONS => {
- ";" => 134
+ ";" => 144
}
},
- {#State 114
- DEFAULT => -35
+ {#State 123
+ DEFAULT => -41
},
- {#State 115
- DEFAULT => -37
+ {#State 124
+ DEFAULT => -43
},
- {#State 116
+ {#State 125
ACTIONS => {
- "(" => 135
+ "(" => 145
}
},
- {#State 117
+ {#State 126
ACTIONS => {
- "]" => 136
+ "]" => 146
}
},
- {#State 118
+ {#State 127
ACTIONS => {
'CONSTANT' => 28,
'TEXT' => 22,
'IDENTIFIER' => 9
},
- DEFAULT => -64,
+ DEFAULT => -70,
GOTOS => {
'identifier' => 23,
'text' => 24,
- 'anytext' => 137,
+ 'anytext' => 147,
'constant' => 27
}
},
- {#State 119
- DEFAULT => -25
+ {#State 128
+ DEFAULT => -31
},
- {#State 120
+ {#State 129
ACTIONS => {
'IDENTIFIER' => 9
},
GOTOS => {
- 'identifier' => 102,
- 'enum_element' => 138
+ 'identifier' => 110,
+ 'enum_element' => 148
}
},
- {#State 121
- DEFAULT => -30
+ {#State 130
+ DEFAULT => -36
},
- {#State 122
+ {#State 131
ACTIONS => {
'IDENTIFIER' => 9
},
GOTOS => {
- 'identifier' => 107,
- 'bitmap_element' => 139
+ 'identifier' => 115,
+ 'bitmap_element' => 149
}
},
- {#State 123
+ {#State 132
ACTIONS => {
'CONSTANT' => 28,
'TEXT' => 22,
'IDENTIFIER' => 9
},
- DEFAULT => -64,
+ DEFAULT => -70,
GOTOS => {
'identifier' => 23,
'text' => 24,
- 'anytext' => 140,
+ 'anytext' => 150,
'constant' => 27
}
},
- {#State 124
- DEFAULT => -49
+ {#State 133
+ DEFAULT => -55
},
- {#State 125
+ {#State 134
ACTIONS => {
'IDENTIFIER' => 9,
- "union" => 72,
- "enum" => 73,
+ "union" => 74,
+ "enum" => 75,
"[" => 7,
- 'void' => 75,
- "bitmap" => 74,
- "struct" => 82
+ 'void' => 77,
+ "bitmap" => 76,
+ "struct" => 84
},
GOTOS => {
- 'identifier' => 77,
- 'struct' => 78,
- 'enum' => 79,
- 'type' => 141,
- 'union' => 81,
- 'bitmap' => 76
+ 'identifier' => 79,
+ 'struct' => 80,
+ 'enum' => 81,
+ 'type' => 151,
+ 'union' => 83,
+ 'bitmap' => 78
}
},
- {#State 126
- DEFAULT => -48
+ {#State 135
+ DEFAULT => -54
},
- {#State 127
+ {#State 136
ACTIONS => {
- "," => 142,
- ")" => 143
+ "," => 152,
+ ")" => 153
}
},
- {#State 128
- DEFAULT => -34
+ {#State 137
+ DEFAULT => -40
},
- {#State 129
+ {#State 138
ACTIONS => {
- ";" => 144
+ ";" => 154
}
},
- {#State 130
+ {#State 139
+ DEFAULT => -19
+ },
+ {#State 140
ACTIONS => {
'IDENTIFIER' => 9,
'CONSTANT' => 28,
'TEXT' => 22
},
- DEFAULT => -64,
+ DEFAULT => -70,
GOTOS => {
'identifier' => 23,
'text' => 24,
- 'anytext' => 145,
+ 'anytext' => 155,
'constant' => 27
}
},
- {#State 131
+ {#State 141
ACTIONS => {
"-" => 35,
- ";" => 146,
+ ";" => 156,
"+" => 36,
"&" => 38,
"{" => 37,
@@ -1513,7 +1566,7 @@ sub new {
">" => 44
}
},
- {#State 132
+ {#State 142
ACTIONS => {
"-" => 35,
"+" => 36,
@@ -1524,41 +1577,41 @@ sub new {
"|" => 40,
"*" => 42,
"." => 43,
- "]" => 147,
+ "]" => 157,
">" => 44
}
},
- {#State 133
- DEFAULT => -52
+ {#State 143
+ DEFAULT => -58
},
- {#State 134
- DEFAULT => -18
+ {#State 144
+ DEFAULT => -24
},
- {#State 135
+ {#State 145
ACTIONS => {
'IDENTIFIER' => 9,
'CONSTANT' => 28,
'TEXT' => 22
},
- DEFAULT => -64,
+ DEFAULT => -70,
GOTOS => {
'identifier' => 23,
'text' => 24,
- 'anytext' => 148,
+ 'anytext' => 158,
'constant' => 27
}
},
- {#State 136
+ {#State 146
ACTIONS => {
- ";" => 149
+ ";" => 159
},
- DEFAULT => -54,
+ DEFAULT => -60,
GOTOS => {
- 'base_element' => 150,
- 'property_list' => 125
+ 'base_element' => 160,
+ 'property_list' => 134
}
},
- {#State 137
+ {#State 147
ACTIONS => {
"-" => 35,
"+" => 36,
@@ -1571,15 +1624,15 @@ sub new {
"." => 43,
">" => 44
},
- DEFAULT => -29
+ DEFAULT => -35
},
- {#State 138
- DEFAULT => -27
+ {#State 148
+ DEFAULT => -33
},
- {#State 139
- DEFAULT => -32
+ {#State 149
+ DEFAULT => -38
},
- {#State 140
+ {#State 150
ACTIONS => {
"-" => 35,
"+" => 36,
@@ -1592,33 +1645,33 @@ sub new {
"." => 43,
">" => 44
},
- DEFAULT => -33
+ DEFAULT => -39
},
- {#State 141
- DEFAULT => -43,
+ {#State 151
+ DEFAULT => -49,
GOTOS => {
- 'pointers' => 151
+ 'pointers' => 161
}
},
- {#State 142
- DEFAULT => -54,
+ {#State 152
+ DEFAULT => -60,
GOTOS => {
- 'base_element' => 152,
- 'property_list' => 125
+ 'base_element' => 162,
+ 'property_list' => 134
}
},
- {#State 143
+ {#State 153
ACTIONS => {
- ";" => 153
+ ";" => 163
}
},
- {#State 144
- DEFAULT => -46
+ {#State 154
+ DEFAULT => -52
},
- {#State 145
+ {#State 155
ACTIONS => {
"-" => 35,
- ";" => 154,
+ ";" => 164,
"+" => 36,
"&" => 38,
"{" => 37,
@@ -1630,13 +1683,13 @@ sub new {
">" => 44
}
},
- {#State 146
- DEFAULT => -15
+ {#State 156
+ DEFAULT => -16
},
- {#State 147
- DEFAULT => -53
+ {#State 157
+ DEFAULT => -59
},
- {#State 148
+ {#State 158
ACTIONS => {
"-" => 35,
"+" => 36,
@@ -1647,79 +1700,79 @@ sub new {
"|" => 40,
"*" => 42,
"." => 43,
- ")" => 155,
+ ")" => 165,
">" => 44
}
},
- {#State 149
- DEFAULT => -41
+ {#State 159
+ DEFAULT => -47
},
- {#State 150
+ {#State 160
ACTIONS => {
- ";" => 156
+ ";" => 166
}
},
- {#State 151
+ {#State 161
ACTIONS => {
'IDENTIFIER' => 9,
- "*" => 158
+ "*" => 168
},
GOTOS => {
- 'identifier' => 157
+ 'identifier' => 167
}
},
- {#State 152
- DEFAULT => -50
+ {#State 162
+ DEFAULT => -56
},
- {#State 153
- DEFAULT => -17
+ {#State 163
+ DEFAULT => -18
},
- {#State 154
- DEFAULT => -16
+ {#State 164
+ DEFAULT => -17
},
- {#State 155
+ {#State 165
ACTIONS => {
- "]" => 159
+ "]" => 169
}
},
- {#State 156
- DEFAULT => -40
+ {#State 166
+ DEFAULT => -46
},
- {#State 157
+ {#State 167
ACTIONS => {
- "[" => 112
+ "[" => 121
},
- DEFAULT => -51,
+ DEFAULT => -57,
GOTOS => {
- 'array_len' => 160
+ 'array_len' => 170
}
},
- {#State 158
- DEFAULT => -44
+ {#State 168
+ DEFAULT => -50
},
- {#State 159
+ {#State 169
ACTIONS => {
- ";" => 161
+ ";" => 171
},
- DEFAULT => -54,
+ DEFAULT => -60,
GOTOS => {
- 'base_element' => 162,
- 'property_list' => 125
+ 'base_element' => 172,
+ 'property_list' => 134
}
},
- {#State 160
- DEFAULT => -42
+ {#State 170
+ DEFAULT => -48
},
- {#State 161
- DEFAULT => -39
+ {#State 171
+ DEFAULT => -45
},
- {#State 162
+ {#State 172
ACTIONS => {
- ";" => 163
+ ";" => 173
}
},
- {#State 163
- DEFAULT => -38
+ {#State 173
+ DEFAULT => -44
}
],
yyrules =>
@@ -1805,6 +1858,9 @@ sub
'definition', 1, undef
],
[#Rule 15
+ 'definition', 1, undef
+ ],
+ [#Rule 16
'const', 6,
sub
#line 62 "build/pidl/idl.yp"
@@ -1815,7 +1871,7 @@ sub
"VALUE" => $_[5]
}}
],
- [#Rule 16
+ [#Rule 17
'const', 7,
sub
#line 69 "build/pidl/idl.yp"
@@ -1827,7 +1883,7 @@ sub
"VALUE" => $_[6],
}}
],
- [#Rule 17
+ [#Rule 18
'function', 7,
sub
#line 80 "build/pidl/idl.yp"
@@ -1839,11 +1895,44 @@ sub
"DATA" => $_[5]
}}
],
- [#Rule 18
- 'typedef', 6,
+ [#Rule 19
+ 'declare', 5,
sub
#line 90 "build/pidl/idl.yp"
{{
+ "TYPE" => "DECLARE",
+ "PROPERTIES" => $_[2],
+ "NAME" => $_[4],
+ "DATA" => $_[3],
+ }}
+ ],
+ [#Rule 20
+ 'decl_type', 1, undef
+ ],
+ [#Rule 21
+ 'decl_type', 1, undef
+ ],
+ [#Rule 22
+ 'decl_enum', 1,
+sub
+#line 102 "build/pidl/idl.yp"
+{{
+ "TYPE" => "ENUM"
+ }}
+ ],
+ [#Rule 23
+ 'decl_bitmap', 1,
+sub
+#line 108 "build/pidl/idl.yp"
+{{
+ "TYPE" => "BITMAP"
+ }}
+ ],
+ [#Rule 24
+ 'typedef', 6,
+sub
+#line 114 "build/pidl/idl.yp"
+{{
"TYPE" => "TYPEDEF",
"PROPERTIES" => $_[2],
"NAME" => $_[4],
@@ -1851,156 +1940,156 @@ sub
"ARRAY_LEN" => $_[5]
}}
],
- [#Rule 19
+ [#Rule 25
'type', 1, undef
],
- [#Rule 20
+ [#Rule 26
'type', 1, undef
],
- [#Rule 21
+ [#Rule 27
'type', 1, undef
],
- [#Rule 22
+ [#Rule 28
'type', 1, undef
],
- [#Rule 23
+ [#Rule 29
'type', 1, undef
],
- [#Rule 24
+ [#Rule 30
'type', 1,
sub
-#line 100 "build/pidl/idl.yp"
+#line 124 "build/pidl/idl.yp"
{ "void" }
],
- [#Rule 25
+ [#Rule 31
'enum', 4,
sub
-#line 105 "build/pidl/idl.yp"
+#line 129 "build/pidl/idl.yp"
{{
"TYPE" => "ENUM",
"ELEMENTS" => $_[3]
}}
],
- [#Rule 26
+ [#Rule 32
'enum_elements', 1,
sub
-#line 112 "build/pidl/idl.yp"
+#line 136 "build/pidl/idl.yp"
{ [ $_[1] ] }
],
- [#Rule 27
+ [#Rule 33
'enum_elements', 3,
sub
-#line 113 "build/pidl/idl.yp"
+#line 137 "build/pidl/idl.yp"
{ push(@{$_[1]}, $_[3]); $_[1] }
],
- [#Rule 28
+ [#Rule 34
'enum_element', 1, undef
],
- [#Rule 29
+ [#Rule 35
'enum_element', 3,
sub
-#line 117 "build/pidl/idl.yp"
+#line 141 "build/pidl/idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
- [#Rule 30
+ [#Rule 36
'bitmap', 4,
sub
-#line 121 "build/pidl/idl.yp"
+#line 145 "build/pidl/idl.yp"
{{
"TYPE" => "BITMAP",
"ELEMENTS" => $_[3]
}}
],
- [#Rule 31
+ [#Rule 37
'bitmap_elements', 1,
sub
-#line 128 "build/pidl/idl.yp"
+#line 152 "build/pidl/idl.yp"
{ [ $_[1] ] }
],
- [#Rule 32
+ [#Rule 38
'bitmap_elements', 3,
sub
-#line 129 "build/pidl/idl.yp"
+#line 153 "build/pidl/idl.yp"
{ push(@{$_[1]}, $_[3]); $_[1] }
],
- [#Rule 33
+ [#Rule 39
'bitmap_element', 3,
sub
-#line 132 "build/pidl/idl.yp"
+#line 156 "build/pidl/idl.yp"
{ "$_[1] ( $_[3] )" }
],
- [#Rule 34
+ [#Rule 40
'struct', 4,
sub
-#line 136 "build/pidl/idl.yp"
+#line 160 "build/pidl/idl.yp"
{{
"TYPE" => "STRUCT",
"ELEMENTS" => $_[3]
}}
],
- [#Rule 35
+ [#Rule 41
'union', 4,
sub
-#line 143 "build/pidl/idl.yp"
+#line 167 "build/pidl/idl.yp"
{{
"TYPE" => "UNION",
"DATA" => $_[3]
}}
],
- [#Rule 36
+ [#Rule 42
'union_elements', 1,
sub
-#line 150 "build/pidl/idl.yp"
+#line 174 "build/pidl/idl.yp"
{ [ $_[1] ] }
],
- [#Rule 37
+ [#Rule 43
'union_elements', 2,
sub
-#line 151 "build/pidl/idl.yp"
+#line 175 "build/pidl/idl.yp"
{ push(@{$_[1]}, $_[2]); $_[1] }
],
- [#Rule 38
+ [#Rule 44
'union_element', 8,
sub
-#line 156 "build/pidl/idl.yp"
+#line 180 "build/pidl/idl.yp"
{{
"TYPE" => "UNION_ELEMENT",
"CASE" => $_[4],
"DATA" => $_[7]
}}
],
- [#Rule 39
+ [#Rule 45
'union_element', 7,
sub
-#line 162 "build/pidl/idl.yp"
+#line 186 "build/pidl/idl.yp"
{{
"TYPE" => "EMPTY",
"CASE" => $_[4],
}}
],
- [#Rule 40
+ [#Rule 46
'union_element', 5,
sub
-#line 167 "build/pidl/idl.yp"
+#line 191 "build/pidl/idl.yp"
{{
"TYPE" => "UNION_ELEMENT",
"CASE" => "default",
"DATA" => $_[4]
}}
],
- [#Rule 41
+ [#Rule 47
'union_element', 4,
sub
-#line 173 "build/pidl/idl.yp"
+#line 197 "build/pidl/idl.yp"
{{
"TYPE" => "EMPTY",
"CASE" => "default",
}}
],
- [#Rule 42
+ [#Rule 48
'base_element', 5,
sub
-#line 180 "build/pidl/idl.yp"
+#line 204 "build/pidl/idl.yp"
{{
"NAME" => $_[4],
"TYPE" => $_[2],
@@ -2009,202 +2098,202 @@ sub
"ARRAY_LEN" => $_[5]
}}
],
- [#Rule 43
+ [#Rule 49
'pointers', 0,
sub
-#line 192 "build/pidl/idl.yp"
+#line 216 "build/pidl/idl.yp"
{ 0 }
],
- [#Rule 44
+ [#Rule 50
'pointers', 2,
sub
-#line 193 "build/pidl/idl.yp"
+#line 217 "build/pidl/idl.yp"
{ $_[1]+1 }
],
- [#Rule 45
+ [#Rule 51
'element_list1', 0, undef
],
- [#Rule 46
+ [#Rule 52
'element_list1', 3,
sub
-#line 200 "build/pidl/idl.yp"
+#line 224 "build/pidl/idl.yp"
{ push(@{$_[1]}, $_[2]); $_[1] }
],
- [#Rule 47
+ [#Rule 53
'element_list2', 0, undef
],
- [#Rule 48
+ [#Rule 54
'element_list2', 1, undef
],
- [#Rule 49
+ [#Rule 55
'element_list2', 1,
sub
-#line 206 "build/pidl/idl.yp"
+#line 230 "build/pidl/idl.yp"
{ [ $_[1] ] }
],
- [#Rule 50
+ [#Rule 56
'element_list2', 3,
sub
-#line 207 "build/pidl/idl.yp"
+#line 231 "build/pidl/idl.yp"
{ push(@{$_[1]}, $_[3]); $_[1] }
],
- [#Rule 51
+ [#Rule 57
'array_len', 0, undef
],
- [#Rule 52
+ [#Rule 58
'array_len', 2,
sub
-#line 212 "build/pidl/idl.yp"
+#line 236 "build/pidl/idl.yp"
{ "*" }
],
- [#Rule 53
+ [#Rule 59
'array_len', 3,
sub
-#line 213 "build/pidl/idl.yp"
+#line 237 "build/pidl/idl.yp"
{ "$_[2]" }
],
- [#Rule 54
+ [#Rule 60
'property_list', 0, undef
],
- [#Rule 55
+ [#Rule 61
'property_list', 4,
sub
-#line 219 "build/pidl/idl.yp"
+#line 243 "build/pidl/idl.yp"
{ util::FlattenHash([$_[1],$_[3]]); }
],
- [#Rule 56
+ [#Rule 62
'properties', 1,
sub
-#line 222 "build/pidl/idl.yp"
+#line 246 "build/pidl/idl.yp"
{ $_[1] }
],
- [#Rule 57
+ [#Rule 63
'properties', 3,
sub
-#line 223 "build/pidl/idl.yp"
+#line 247 "build/pidl/idl.yp"
{ util::FlattenHash([$_[1], $_[3]]); }
],
- [#Rule 58
+ [#Rule 64
'property', 1,
sub
-#line 226 "build/pidl/idl.yp"
+#line 250 "build/pidl/idl.yp"
{{ "$_[1]" => "1" }}
],
- [#Rule 59
+ [#Rule 65
'property', 4,
sub
-#line 227 "build/pidl/idl.yp"
+#line 251 "build/pidl/idl.yp"
{{ "$_[1]" => "$_[3]" }}
],
- [#Rule 60
+ [#Rule 66
'listtext', 1, undef
],
- [#Rule 61
+ [#Rule 67
'listtext', 3,
sub
-#line 232 "build/pidl/idl.yp"
+#line 256 "build/pidl/idl.yp"
{ "$_[1] $_[3]" }
],
- [#Rule 62
+ [#Rule 68
'commalisttext', 1, undef
],
- [#Rule 63
+ [#Rule 69
'commalisttext', 3,
sub
-#line 237 "build/pidl/idl.yp"
+#line 261 "build/pidl/idl.yp"
{ "$_[1],$_[3]" }
],
- [#Rule 64
+ [#Rule 70
'anytext', 0,
sub
-#line 241 "build/pidl/idl.yp"
+#line 265 "build/pidl/idl.yp"
{ "" }
],
- [#Rule 65
+ [#Rule 71
'anytext', 1, undef
],
- [#Rule 66
+ [#Rule 72
'anytext', 1, undef
],
- [#Rule 67
+ [#Rule 73
'anytext', 1, undef
],
- [#Rule 68
+ [#Rule 74
'anytext', 3,
sub
-#line 243 "build/pidl/idl.yp"
+#line 267 "build/pidl/idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
- [#Rule 69
+ [#Rule 75
'anytext', 3,
sub
-#line 244 "build/pidl/idl.yp"
+#line 268 "build/pidl/idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
- [#Rule 70
+ [#Rule 76
'anytext', 3,
sub
-#line 245 "build/pidl/idl.yp"
+#line 269 "build/pidl/idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
- [#Rule 71
+ [#Rule 77
'anytext', 3,
sub
-#line 246 "build/pidl/idl.yp"
+#line 270 "build/pidl/idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
- [#Rule 72
+ [#Rule 78
'anytext', 3,
sub
-#line 247 "build/pidl/idl.yp"
+#line 271 "build/pidl/idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
- [#Rule 73
+ [#Rule 79
'anytext', 3,
sub
-#line 248 "build/pidl/idl.yp"
+#line 272 "build/pidl/idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
- [#Rule 74
+ [#Rule 80
'anytext', 3,
sub
-#line 249 "build/pidl/idl.yp"
+#line 273 "build/pidl/idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
- [#Rule 75
+ [#Rule 81
'anytext', 3,
sub
-#line 250 "build/pidl/idl.yp"
+#line 274 "build/pidl/idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
- [#Rule 76
+ [#Rule 82
'anytext', 5,
sub
-#line 251 "build/pidl/idl.yp"
+#line 275 "build/pidl/idl.yp"
{ "$_[1]$_[2]$_[3]$_[4]$_[5]" }
],
- [#Rule 77
+ [#Rule 83
'anytext', 5,
sub
-#line 252 "build/pidl/idl.yp"
+#line 276 "build/pidl/idl.yp"
{ "$_[1]$_[2]$_[3]$_[4]$_[5]" }
],
- [#Rule 78
+ [#Rule 84
'identifier', 1, undef
],
- [#Rule 79
+ [#Rule 85
'constant', 1, undef
],
- [#Rule 80
+ [#Rule 86
'text', 1,
sub
-#line 261 "build/pidl/idl.yp"
+#line 285 "build/pidl/idl.yp"
{ "\"$_[1]\"" }
],
- [#Rule 81
+ [#Rule 87
'optional_semicolon', 0, undef
],
- [#Rule 82
+ [#Rule 88
'optional_semicolon', 1, undef
]
],
@@ -2212,7 +2301,7 @@ sub
bless($self,$class);
}
-#line 272 "build/pidl/idl.yp"
+#line 296 "build/pidl/idl.yp"
use util;
@@ -2271,7 +2360,7 @@ again:
if (s/^([\w_]+)//) {
$parser->YYData->{LAST_TOKEN} = $1;
if ($1 =~
- /^(coclass|interface|const|typedef|union
+ /^(coclass|interface|const|typedef|declare|union
|struct|enum|bitmap|void|case|default)$/x) {
return $1;
}
diff --git a/source4/build/pidl/idl.yp b/source4/build/pidl/idl.yp
index f77062adf6..73b9a44b3f 100644
--- a/source4/build/pidl/idl.yp
+++ b/source4/build/pidl/idl.yp
@@ -55,7 +55,7 @@ definitions:
;
-definition: function | const | typedef
+definition: function | const | typedef | declare
;
const: 'const' identifier identifier '=' anytext ';'
@@ -86,6 +86,30 @@ function: property_list type identifier '(' element_list2 ')' ';'
}}
;
+declare: 'declare' property_list decl_type identifier';'
+ {{
+ "TYPE" => "DECLARE",
+ "PROPERTIES" => $_[2],
+ "NAME" => $_[4],
+ "DATA" => $_[3],
+ }}
+;
+
+decl_type: decl_enum | decl_bitmap
+;
+
+decl_enum: 'enum'
+ {{
+ "TYPE" => "ENUM"
+ }}
+;
+
+decl_bitmap: 'bitmap'
+ {{
+ "TYPE" => "BITMAP"
+ }}
+;
+
typedef: 'typedef' property_list type identifier array_len ';'
{{
"TYPE" => "TYPEDEF",
@@ -327,7 +351,7 @@ again:
if (s/^([\w_]+)//) {
$parser->YYData->{LAST_TOKEN} = $1;
if ($1 =~
- /^(coclass|interface|const|typedef|union
+ /^(coclass|interface|const|typedef|declare|union
|struct|enum|bitmap|void|case|default)$/x) {
return $1;
}
diff --git a/source4/build/pidl/parser.pm b/source4/build/pidl/parser.pm
index 2aa7dfc3d6..33937b5800 100644
--- a/source4/build/pidl/parser.pm
+++ b/source4/build/pidl/parser.pm
@@ -1716,9 +1716,12 @@ sub ParseInterface($)
my($data) = $interface->{DATA};
foreach my $d (@{$data}) {
+ if ($d->{TYPE} eq "DECLARE") {
+ $structs{$d->{NAME}} = $d;
+ }
if ($d->{TYPE} eq "TYPEDEF") {
$structs{$d->{NAME}} = $d;
- }
+ }
}
foreach my $d (@{$data}) {