From e0d2080219c7d52559a5bbcc7294995fccbd5e52 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 21 Jan 2005 06:46:07 +0000 Subject: r4884: - 2nd part of support ndr_size_ generation on unions as well as structures - added "nopull" and "nopush" flags, to allow for externally written parsers for sub-structures (This used to be commit f65f239978425de795a0e188aaad3d5d1167da32) --- source4/build/pidl/idl.pm | 908 +++++++++++++++++++++++-------------------- source4/build/pidl/idl.yp | 1 + source4/build/pidl/needed.pm | 11 + source4/build/pidl/parser.pm | 20 + 4 files changed, 514 insertions(+), 426 deletions(-) (limited to 'source4/build') diff --git a/source4/build/pidl/idl.pm b/source4/build/pidl/idl.pm index e1600b5b40..cbfe8e10e3 100644 --- a/source4/build/pidl/idl.pm +++ b/source4/build/pidl/idl.pm @@ -559,7 +559,7 @@ sub new { } }, {#State 9 - DEFAULT => -84 + DEFAULT => -85 }, {#State 10 ACTIONS => { @@ -647,7 +647,7 @@ sub new { } }, {#State 22 - DEFAULT => -86 + DEFAULT => -87 }, {#State 23 DEFAULT => -71 @@ -658,29 +658,30 @@ sub new { {#State 25 ACTIONS => { "-" => 35, - "+" => 36, - "&" => 38, - "{" => 37, - "/" => 39, - "|" => 40, - "(" => 41, - "*" => 42, - "." => 43, - ">" => 44 + "<" => 36, + "+" => 37, + "&" => 39, + "{" => 38, + "/" => 40, + "|" => 41, + "(" => 42, + "*" => 43, + "." => 44, + ">" => 45 }, DEFAULT => -66 }, {#State 26 ACTIONS => { - "," => 45, - ")" => 46 + "," => 46, + ")" => 47 } }, {#State 27 DEFAULT => -72 }, {#State 28 - DEFAULT => -85 + DEFAULT => -86 }, {#State 29 DEFAULT => -63 @@ -690,28 +691,28 @@ sub new { }, {#State 31 ACTIONS => { - "typedef" => 47, - "declare" => 52, - "const" => 55 + "typedef" => 48, + "declare" => 53, + "const" => 56 }, DEFAULT => -60, GOTOS => { - 'const' => 54, - 'declare' => 53, - 'function' => 48, - 'typedef' => 56, - 'definitions' => 49, - 'definition' => 51, - 'property_list' => 50 + 'const' => 55, + 'declare' => 54, + 'function' => 49, + 'typedef' => 57, + 'definitions' => 50, + 'definition' => 52, + 'property_list' => 51 } }, {#State 32 ACTIONS => { - ";" => 58 + ";" => 59 }, - DEFAULT => -87, + DEFAULT => -88, GOTOS => { - 'optional_semicolon' => 57 + 'optional_semicolon' => 58 } }, {#State 33 @@ -733,7 +734,7 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 59, + 'anytext' => 60, 'constant' => 27 } }, @@ -747,7 +748,7 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 60, + 'anytext' => 61, 'constant' => 27 } }, @@ -761,9 +762,8 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 61, - 'constant' => 27, - 'commalisttext' => 62 + 'anytext' => 62, + 'constant' => 27 } }, {#State 38 @@ -777,7 +777,8 @@ sub new { 'identifier' => 23, 'text' => 24, 'anytext' => 63, - 'constant' => 27 + 'constant' => 27, + 'commalisttext' => 64 } }, {#State 39 @@ -790,7 +791,7 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 64, + 'anytext' => 65, 'constant' => 27 } }, @@ -804,7 +805,7 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 65, + 'anytext' => 66, 'constant' => 27 } }, @@ -818,9 +819,8 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 61, - 'constant' => 27, - 'commalisttext' => 66 + 'anytext' => 67, + 'constant' => 27 } }, {#State 42 @@ -833,8 +833,9 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 67, - 'constant' => 27 + 'anytext' => 63, + 'constant' => 27, + 'commalisttext' => 68 } }, {#State 43 @@ -847,7 +848,7 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 68, + 'anytext' => 69, 'constant' => 27 } }, @@ -861,7 +862,7 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 69, + 'anytext' => 70, 'constant' => 27 } }, @@ -875,278 +876,318 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 70, + 'anytext' => 71, 'constant' => 27 } }, {#State 46 - DEFAULT => -65 + ACTIONS => { + 'CONSTANT' => 28, + 'TEXT' => 22, + 'IDENTIFIER' => 9 + }, + DEFAULT => -70, + GOTOS => { + 'identifier' => 23, + 'text' => 24, + 'anytext' => 72, + 'constant' => 27 + } }, {#State 47 + DEFAULT => -65 + }, + {#State 48 DEFAULT => -60, GOTOS => { - 'property_list' => 71 + 'property_list' => 73 } }, - {#State 48 + {#State 49 DEFAULT => -12 }, - {#State 49 + {#State 50 ACTIONS => { - "}" => 72, - "typedef" => 47, - "declare" => 52, - "const" => 55 + "}" => 74, + "typedef" => 48, + "declare" => 53, + "const" => 56 }, DEFAULT => -60, GOTOS => { - 'const' => 54, - 'declare' => 53, - 'function' => 48, - 'typedef' => 56, - 'definition' => 73, - 'property_list' => 50 + 'const' => 55, + 'declare' => 54, + 'function' => 49, + 'typedef' => 57, + 'definition' => 75, + 'property_list' => 51 } }, - {#State 50 + {#State 51 ACTIONS => { 'IDENTIFIER' => 9, - "union" => 74, - "enum" => 75, + "union" => 76, + "enum" => 77, "[" => 7, - 'void' => 77, - "bitmap" => 76, - "struct" => 84 + 'void' => 79, + "bitmap" => 78, + "struct" => 86 }, GOTOS => { - 'identifier' => 79, - 'struct' => 80, - 'enum' => 81, - 'type' => 82, - 'union' => 83, - 'bitmap' => 78 + 'identifier' => 81, + 'struct' => 82, + 'enum' => 83, + 'type' => 84, + 'union' => 85, + 'bitmap' => 80 } }, - {#State 51 + {#State 52 DEFAULT => -10 }, - {#State 52 + {#State 53 DEFAULT => -60, GOTOS => { - 'property_list' => 85 + 'property_list' => 87 } }, - {#State 53 + {#State 54 DEFAULT => -15 }, - {#State 54 + {#State 55 DEFAULT => -13 }, - {#State 55 + {#State 56 ACTIONS => { 'IDENTIFIER' => 9 }, GOTOS => { - 'identifier' => 86 + 'identifier' => 88 } }, - {#State 56 - DEFAULT => -14 - }, {#State 57 - DEFAULT => -4 + DEFAULT => -14 }, {#State 58 - DEFAULT => -88 + DEFAULT => -4 }, {#State 59 - ACTIONS => { - "{" => 37 - }, - DEFAULT => -74 + DEFAULT => -89 }, {#State 60 ACTIONS => { - "{" => 37 + "<" => 36, + "{" => 38 }, - DEFAULT => -81 + DEFAULT => -74 }, {#State 61 ACTIONS => { "-" => 35, - "+" => 36, - "&" => 38, - "{" => 37, - "/" => 39, - "(" => 41, - "|" => 40, - "*" => 42, - "." => 43, - ">" => 44 + "<" => 36, + "+" => 37, + "*" => 43, + "{" => 38, + "&" => 39, + "/" => 40, + "|" => 41, + "(" => 42, + "." => 44, + ">" => 45 }, - DEFAULT => -68 + DEFAULT => -78 }, {#State 62 ACTIONS => { - "}" => 87, - "," => 88 - } + "<" => 36, + "{" => 38 + }, + DEFAULT => -82 }, {#State 63 ACTIONS => { - "{" => 37 + "-" => 35, + "<" => 36, + "+" => 37, + "&" => 39, + "{" => 38, + "/" => 40, + "(" => 42, + "|" => 41, + "*" => 43, + "." => 44, + ">" => 45 }, - DEFAULT => -79 + DEFAULT => -68 }, {#State 64 ACTIONS => { - "{" => 37 - }, - DEFAULT => -80 + "}" => 89, + "," => 90 + } }, {#State 65 ACTIONS => { - "{" => 37 + "<" => 36, + "{" => 38 }, - DEFAULT => -78 + DEFAULT => -80 }, {#State 66 ACTIONS => { - "," => 88, - ")" => 89 - } + "<" => 36, + "{" => 38 + }, + DEFAULT => -81 }, {#State 67 ACTIONS => { - "{" => 37 + "<" => 36, + "{" => 38 }, - DEFAULT => -76 + DEFAULT => -79 }, {#State 68 ACTIONS => { - "{" => 37 + "," => 90, + ")" => 91 + } + }, + {#State 69 + ACTIONS => { + "<" => 36, + "{" => 38 + }, + DEFAULT => -76 + }, + {#State 70 + ACTIONS => { + "<" => 36, + "{" => 38 }, DEFAULT => -75 }, - {#State 69 + {#State 71 ACTIONS => { - "{" => 37 + "<" => 36, + "{" => 38 }, DEFAULT => -77 }, - {#State 70 + {#State 72 ACTIONS => { "-" => 35, - "+" => 36, - "&" => 38, - "{" => 37, - "/" => 39, - "(" => 41, - "|" => 40, - "*" => 42, - "." => 43, - ">" => 44 + "<" => 36, + "+" => 37, + "&" => 39, + "{" => 38, + "/" => 40, + "(" => 42, + "|" => 41, + "*" => 43, + "." => 44, + ">" => 45 }, DEFAULT => -67 }, - {#State 71 + {#State 73 ACTIONS => { 'IDENTIFIER' => 9, - "union" => 74, - "enum" => 75, + "union" => 76, + "enum" => 77, "[" => 7, - 'void' => 77, - "bitmap" => 76, - "struct" => 84 + 'void' => 79, + "bitmap" => 78, + "struct" => 86 }, GOTOS => { - 'identifier' => 79, - 'struct' => 80, - 'enum' => 81, - 'type' => 90, - 'union' => 83, - 'bitmap' => 78 + 'identifier' => 81, + 'struct' => 82, + 'enum' => 83, + 'type' => 92, + 'union' => 85, + 'bitmap' => 80 } }, - {#State 72 + {#State 74 ACTIONS => { - ";" => 58 + ";" => 59 }, - DEFAULT => -87, + DEFAULT => -88, GOTOS => { - 'optional_semicolon' => 91 + 'optional_semicolon' => 93 } }, - {#State 73 + {#State 75 DEFAULT => -11 }, - {#State 74 + {#State 76 ACTIONS => { - "{" => 92 + "{" => 94 } }, - {#State 75 + {#State 77 ACTIONS => { - "{" => 93 + "{" => 95 } }, - {#State 76 + {#State 78 ACTIONS => { - "{" => 94 + "{" => 96 } }, - {#State 77 + {#State 79 DEFAULT => -30 }, - {#State 78 + {#State 80 DEFAULT => -28 }, - {#State 79 + {#State 81 DEFAULT => -29 }, - {#State 80 + {#State 82 DEFAULT => -25 }, - {#State 81 + {#State 83 DEFAULT => -27 }, - {#State 82 + {#State 84 ACTIONS => { 'IDENTIFIER' => 9 }, GOTOS => { - 'identifier' => 95 + 'identifier' => 97 } }, - {#State 83 + {#State 85 DEFAULT => -26 }, - {#State 84 + {#State 86 ACTIONS => { - "{" => 96 + "{" => 98 } }, - {#State 85 + {#State 87 ACTIONS => { - "enum" => 97, + "enum" => 99, "[" => 7, - "bitmap" => 98 + "bitmap" => 100 }, GOTOS => { - 'decl_enum' => 99, - 'decl_bitmap' => 100, - 'decl_type' => 101 + 'decl_enum' => 101, + 'decl_bitmap' => 102, + 'decl_type' => 103 } }, - {#State 86 + {#State 88 ACTIONS => { 'IDENTIFIER' => 9 }, GOTOS => { - 'identifier' => 102 + 'identifier' => 104 } }, - {#State 87 + {#State 89 ACTIONS => { 'CONSTANT' => 28, 'TEXT' => 22, @@ -1156,11 +1197,11 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 103, + 'anytext' => 105, 'constant' => 27 } }, - {#State 88 + {#State 90 ACTIONS => { 'CONSTANT' => 28, 'TEXT' => 22, @@ -1170,11 +1211,11 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 104, + 'anytext' => 106, 'constant' => 27 } }, - {#State 89 + {#State 91 ACTIONS => { 'CONSTANT' => 28, 'TEXT' => 22, @@ -1184,216 +1225,219 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 105, + 'anytext' => 107, 'constant' => 27 } }, - {#State 90 + {#State 92 ACTIONS => { 'IDENTIFIER' => 9 }, GOTOS => { - 'identifier' => 106 + 'identifier' => 108 } }, - {#State 91 + {#State 93 DEFAULT => -7 }, - {#State 92 + {#State 94 ACTIONS => { - "[" => 109 + "[" => 111 }, GOTOS => { - 'union_elements' => 107, - 'union_element' => 108 + 'union_elements' => 109, + 'union_element' => 110 } }, - {#State 93 + {#State 95 ACTIONS => { 'IDENTIFIER' => 9 }, GOTOS => { - 'identifier' => 110, - 'enum_element' => 111, - 'enum_elements' => 112 + 'identifier' => 112, + 'enum_element' => 113, + 'enum_elements' => 114 } }, - {#State 94 + {#State 96 ACTIONS => { 'IDENTIFIER' => 9 }, GOTOS => { - 'identifier' => 115, - 'bitmap_elements' => 114, - 'bitmap_element' => 113 + 'identifier' => 117, + 'bitmap_elements' => 116, + 'bitmap_element' => 115 } }, - {#State 95 + {#State 97 ACTIONS => { - "(" => 116 + "(" => 118 } }, - {#State 96 + {#State 98 DEFAULT => -51, GOTOS => { - 'element_list1' => 117 + 'element_list1' => 119 } }, - {#State 97 + {#State 99 DEFAULT => -22 }, - {#State 98 + {#State 100 DEFAULT => -23 }, - {#State 99 + {#State 101 DEFAULT => -20 }, - {#State 100 + {#State 102 DEFAULT => -21 }, - {#State 101 + {#State 103 ACTIONS => { 'IDENTIFIER' => 9 }, GOTOS => { - 'identifier' => 118 + 'identifier' => 120 } }, - {#State 102 + {#State 104 ACTIONS => { - "[" => 121, - "=" => 120 + "[" => 123, + "=" => 122 }, GOTOS => { - 'array_len' => 119 + 'array_len' => 121 } }, - {#State 103 + {#State 105 ACTIONS => { "-" => 35, - "+" => 36, - "*" => 42, - "{" => 37, - "&" => 38, - "/" => 39, - "|" => 40, - "(" => 41, - "." => 43, - ">" => 44 + "<" => 36, + "+" => 37, + "*" => 43, + "{" => 38, + "&" => 39, + "/" => 40, + "|" => 41, + "(" => 42, + "." => 44, + ">" => 45 }, - DEFAULT => -83 + DEFAULT => -84 }, - {#State 104 + {#State 106 ACTIONS => { "-" => 35, - "+" => 36, - "&" => 38, - "{" => 37, - "/" => 39, - "(" => 41, - "|" => 40, - "*" => 42, - "." => 43, - ">" => 44 + "<" => 36, + "+" => 37, + "&" => 39, + "{" => 38, + "/" => 40, + "(" => 42, + "|" => 41, + "*" => 43, + "." => 44, + ">" => 45 }, DEFAULT => -69 }, - {#State 105 + {#State 107 ACTIONS => { - "{" => 37 + "<" => 36, + "{" => 38 }, - DEFAULT => -82 + DEFAULT => -83 }, - {#State 106 + {#State 108 ACTIONS => { - "[" => 121 + "[" => 123 }, DEFAULT => -57, GOTOS => { - 'array_len' => 122 + 'array_len' => 124 } }, - {#State 107 + {#State 109 ACTIONS => { - "}" => 123, - "[" => 109 + "}" => 125, + "[" => 111 }, GOTOS => { - 'union_element' => 124 + 'union_element' => 126 } }, - {#State 108 + {#State 110 DEFAULT => -42 }, - {#State 109 + {#State 111 ACTIONS => { - "case" => 125, - "default" => 126 + "case" => 127, + "default" => 128 } }, - {#State 110 + {#State 112 ACTIONS => { - "=" => 127 + "=" => 129 }, DEFAULT => -34 }, - {#State 111 + {#State 113 DEFAULT => -32 }, - {#State 112 + {#State 114 ACTIONS => { - "}" => 128, - "," => 129 + "}" => 130, + "," => 131 } }, - {#State 113 + {#State 115 DEFAULT => -37 }, - {#State 114 + {#State 116 ACTIONS => { - "}" => 130, - "," => 131 + "}" => 132, + "," => 133 } }, - {#State 115 + {#State 117 ACTIONS => { - "=" => 132 + "=" => 134 } }, - {#State 116 + {#State 118 ACTIONS => { "," => -53, - "void" => 135, + "void" => 137, ")" => -53 }, DEFAULT => -60, GOTOS => { - 'base_element' => 133, - 'element_list2' => 136, - 'property_list' => 134 + 'base_element' => 135, + 'element_list2' => 138, + 'property_list' => 136 } }, - {#State 117 + {#State 119 ACTIONS => { - "}" => 137 + "}" => 139 }, DEFAULT => -60, GOTOS => { - 'base_element' => 138, - 'property_list' => 134 + 'base_element' => 140, + 'property_list' => 136 } }, - {#State 118 + {#State 120 ACTIONS => { - ";" => 139 + ";" => 141 } }, - {#State 119 + {#State 121 ACTIONS => { - "=" => 140 + "=" => 142 } }, - {#State 120 + {#State 122 ACTIONS => { 'IDENTIFIER' => 9, 'CONSTANT' => 28, @@ -1403,47 +1447,47 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 141, + 'anytext' => 143, 'constant' => 27 } }, - {#State 121 + {#State 123 ACTIONS => { 'IDENTIFIER' => 9, 'CONSTANT' => 28, 'TEXT' => 22, - "]" => 143 + "]" => 145 }, DEFAULT => -70, GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 142, + 'anytext' => 144, 'constant' => 27 } }, - {#State 122 + {#State 124 ACTIONS => { - ";" => 144 + ";" => 146 } }, - {#State 123 + {#State 125 DEFAULT => -41 }, - {#State 124 + {#State 126 DEFAULT => -43 }, - {#State 125 + {#State 127 ACTIONS => { - "(" => 145 + "(" => 147 } }, - {#State 126 + {#State 128 ACTIONS => { - "]" => 146 + "]" => 148 } }, - {#State 127 + {#State 129 ACTIONS => { 'CONSTANT' => 28, 'TEXT' => 22, @@ -1453,35 +1497,35 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 147, + 'anytext' => 149, 'constant' => 27 } }, - {#State 128 + {#State 130 DEFAULT => -31 }, - {#State 129 + {#State 131 ACTIONS => { 'IDENTIFIER' => 9 }, GOTOS => { - 'identifier' => 110, - 'enum_element' => 148 + 'identifier' => 112, + 'enum_element' => 150 } }, - {#State 130 + {#State 132 DEFAULT => -36 }, - {#State 131 + {#State 133 ACTIONS => { 'IDENTIFIER' => 9 }, GOTOS => { - 'identifier' => 115, - 'bitmap_element' => 149 + 'identifier' => 117, + 'bitmap_element' => 151 } }, - {#State 132 + {#State 134 ACTIONS => { 'CONSTANT' => 28, 'TEXT' => 22, @@ -1491,53 +1535,53 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 150, + 'anytext' => 152, 'constant' => 27 } }, - {#State 133 + {#State 135 DEFAULT => -55 }, - {#State 134 + {#State 136 ACTIONS => { 'IDENTIFIER' => 9, - "union" => 74, - "enum" => 75, + "union" => 76, + "enum" => 77, "[" => 7, - 'void' => 77, - "bitmap" => 76, - "struct" => 84 + 'void' => 79, + "bitmap" => 78, + "struct" => 86 }, GOTOS => { - 'identifier' => 79, - 'struct' => 80, - 'enum' => 81, - 'type' => 151, - 'union' => 83, - 'bitmap' => 78 + 'identifier' => 81, + 'struct' => 82, + 'enum' => 83, + 'type' => 153, + 'union' => 85, + 'bitmap' => 80 } }, - {#State 135 + {#State 137 DEFAULT => -54 }, - {#State 136 + {#State 138 ACTIONS => { - "," => 152, - ")" => 153 + "," => 154, + ")" => 155 } }, - {#State 137 + {#State 139 DEFAULT => -40 }, - {#State 138 + {#State 140 ACTIONS => { - ";" => 154 + ";" => 156 } }, - {#State 139 + {#State 141 DEFAULT => -19 }, - {#State 140 + {#State 142 ACTIONS => { 'IDENTIFIER' => 9, 'CONSTANT' => 28, @@ -1547,47 +1591,49 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 155, + 'anytext' => 157, 'constant' => 27 } }, - {#State 141 + {#State 143 ACTIONS => { "-" => 35, - ";" => 156, - "+" => 36, - "&" => 38, - "{" => 37, - "/" => 39, - "(" => 41, - "|" => 40, - "*" => 42, - "." => 43, - ">" => 44 + "<" => 36, + ";" => 158, + "+" => 37, + "&" => 39, + "{" => 38, + "/" => 40, + "(" => 42, + "|" => 41, + "*" => 43, + "." => 44, + ">" => 45 } }, - {#State 142 + {#State 144 ACTIONS => { "-" => 35, - "+" => 36, - "&" => 38, - "{" => 37, - "/" => 39, - "(" => 41, - "|" => 40, - "*" => 42, - "." => 43, - "]" => 157, - ">" => 44 + "<" => 36, + "+" => 37, + "&" => 39, + "{" => 38, + "/" => 40, + "(" => 42, + "|" => 41, + "*" => 43, + "]" => 159, + "." => 44, + ">" => 45 } }, - {#State 143 + {#State 145 DEFAULT => -58 }, - {#State 144 + {#State 146 DEFAULT => -24 }, - {#State 145 + {#State 147 ACTIONS => { 'IDENTIFIER' => 9, 'CONSTANT' => 28, @@ -1597,181 +1643,185 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 158, + 'anytext' => 160, 'constant' => 27 } }, - {#State 146 + {#State 148 ACTIONS => { - ";" => 159 + ";" => 161 }, DEFAULT => -60, GOTOS => { - 'base_element' => 160, - 'property_list' => 134 + 'base_element' => 162, + 'property_list' => 136 } }, - {#State 147 + {#State 149 ACTIONS => { "-" => 35, - "+" => 36, - "&" => 38, - "{" => 37, - "/" => 39, - "(" => 41, - "|" => 40, - "*" => 42, - "." => 43, - ">" => 44 + "<" => 36, + "+" => 37, + "&" => 39, + "{" => 38, + "/" => 40, + "(" => 42, + "|" => 41, + "*" => 43, + "." => 44, + ">" => 45 }, DEFAULT => -35 }, - {#State 148 + {#State 150 DEFAULT => -33 }, - {#State 149 + {#State 151 DEFAULT => -38 }, - {#State 150 + {#State 152 ACTIONS => { "-" => 35, - "+" => 36, - "&" => 38, - "{" => 37, - "/" => 39, - "(" => 41, - "|" => 40, - "*" => 42, - "." => 43, - ">" => 44 + "<" => 36, + "+" => 37, + "&" => 39, + "{" => 38, + "/" => 40, + "(" => 42, + "|" => 41, + "*" => 43, + "." => 44, + ">" => 45 }, DEFAULT => -39 }, - {#State 151 + {#State 153 DEFAULT => -49, GOTOS => { - 'pointers' => 161 + 'pointers' => 163 } }, - {#State 152 + {#State 154 DEFAULT => -60, GOTOS => { - 'base_element' => 162, - 'property_list' => 134 + 'base_element' => 164, + 'property_list' => 136 } }, - {#State 153 + {#State 155 ACTIONS => { - ";" => 163 + ";" => 165 } }, - {#State 154 + {#State 156 DEFAULT => -52 }, - {#State 155 + {#State 157 ACTIONS => { "-" => 35, - ";" => 164, - "+" => 36, - "&" => 38, - "{" => 37, - "/" => 39, - "(" => 41, - "|" => 40, - "*" => 42, - "." => 43, - ">" => 44 + "<" => 36, + ";" => 166, + "+" => 37, + "&" => 39, + "{" => 38, + "/" => 40, + "(" => 42, + "|" => 41, + "*" => 43, + "." => 44, + ">" => 45 } }, - {#State 156 + {#State 158 DEFAULT => -16 }, - {#State 157 + {#State 159 DEFAULT => -59 }, - {#State 158 + {#State 160 ACTIONS => { "-" => 35, - "+" => 36, - "&" => 38, - "{" => 37, - "/" => 39, - "(" => 41, - "|" => 40, - "*" => 42, - "." => 43, - ")" => 165, - ">" => 44 + "<" => 36, + "+" => 37, + "&" => 39, + "{" => 38, + "/" => 40, + "(" => 42, + "|" => 41, + "*" => 43, + ")" => 167, + "." => 44, + ">" => 45 } }, - {#State 159 + {#State 161 DEFAULT => -47 }, - {#State 160 + {#State 162 ACTIONS => { - ";" => 166 + ";" => 168 } }, - {#State 161 + {#State 163 ACTIONS => { 'IDENTIFIER' => 9, - "*" => 168 + "*" => 170 }, GOTOS => { - 'identifier' => 167 + 'identifier' => 169 } }, - {#State 162 + {#State 164 DEFAULT => -56 }, - {#State 163 + {#State 165 DEFAULT => -18 }, - {#State 164 + {#State 166 DEFAULT => -17 }, - {#State 165 + {#State 167 ACTIONS => { - "]" => 169 + "]" => 171 } }, - {#State 166 + {#State 168 DEFAULT => -46 }, - {#State 167 + {#State 169 ACTIONS => { - "[" => 121 + "[" => 123 }, DEFAULT => -57, GOTOS => { - 'array_len' => 170 + 'array_len' => 172 } }, - {#State 168 + {#State 170 DEFAULT => -50 }, - {#State 169 + {#State 171 ACTIONS => { - ";" => 171 + ";" => 173 }, DEFAULT => -60, GOTOS => { - 'base_element' => 172, - 'property_list' => 134 + 'base_element' => 174, + 'property_list' => 136 } }, - {#State 170 + {#State 172 DEFAULT => -48 }, - {#State 171 + {#State 173 DEFAULT => -45 }, - {#State 172 + {#State 174 ACTIONS => { - ";" => 173 + ";" => 175 } }, - {#State 173 + {#State 175 DEFAULT => -44 } ], @@ -2267,10 +2317,10 @@ sub { "$_[1]$_[2]$_[3]" } ], [#Rule 82 - 'anytext', 5, + 'anytext', 3, sub #line 275 "build/pidl/idl.yp" -{ "$_[1]$_[2]$_[3]$_[4]$_[5]" } +{ "$_[1]$_[2]$_[3]" } ], [#Rule 83 'anytext', 5, @@ -2279,21 +2329,27 @@ sub { "$_[1]$_[2]$_[3]$_[4]$_[5]" } ], [#Rule 84 - 'identifier', 1, undef + 'anytext', 5, +sub +#line 277 "build/pidl/idl.yp" +{ "$_[1]$_[2]$_[3]$_[4]$_[5]" } ], [#Rule 85 - 'constant', 1, undef + 'identifier', 1, undef ], [#Rule 86 + 'constant', 1, undef + ], + [#Rule 87 'text', 1, sub -#line 285 "build/pidl/idl.yp" +#line 286 "build/pidl/idl.yp" { "\"$_[1]\"" } ], - [#Rule 87 + [#Rule 88 'optional_semicolon', 0, undef ], - [#Rule 88 + [#Rule 89 'optional_semicolon', 1, undef ] ], @@ -2301,7 +2357,7 @@ sub bless($self,$class); } -#line 296 "build/pidl/idl.yp" +#line 297 "build/pidl/idl.yp" use util; diff --git a/source4/build/pidl/idl.yp b/source4/build/pidl/idl.yp index 73b9a44b3f..4e4071d317 100644 --- a/source4/build/pidl/idl.yp +++ b/source4/build/pidl/idl.yp @@ -268,6 +268,7 @@ anytext: #empty | anytext '.' anytext { "$_[1]$_[2]$_[3]" } | anytext '*' anytext { "$_[1]$_[2]$_[3]" } | anytext '>' anytext { "$_[1]$_[2]$_[3]" } + | anytext '<' anytext { "$_[1]$_[2]$_[3]" } | anytext '|' anytext { "$_[1]$_[2]$_[3]" } | anytext '&' anytext { "$_[1]$_[2]$_[3]" } | anytext '/' anytext { "$_[1]$_[2]$_[3]" } diff --git a/source4/build/pidl/needed.pm b/source4/build/pidl/needed.pm index 2f42ce6703..37edbef83b 100644 --- a/source4/build/pidl/needed.pm +++ b/source4/build/pidl/needed.pm @@ -31,6 +31,13 @@ sub NeededTypedef($) $needed{"push_$t->{NAME}"} = 1; } + if (util::has_property($t, "nopull")) { + $needed{"pull_$t->{NAME}"} = 0; + } + if (util::has_property($t, "nopush")) { + $needed{"push_$t->{NAME}"} = 0; + } + if ($t->{DATA}->{TYPE} eq "STRUCT") { if (util::has_property($t, "gensize")) { $needed{"ndr_size_$t->{NAME}"} = 1; @@ -47,6 +54,10 @@ sub NeededTypedef($) } } if ($t->{DATA}->{TYPE} eq "UNION") { + if (util::has_property($t, "gensize")) { + $needed{"ndr_size_$t->{NAME}"} = 1; + } + for my $e (@{$t->{DATA}->{DATA}}) { $e->{PARENT} = $t->{DATA}; if ($e->{TYPE} eq "UNION_ELEMENT") { diff --git a/source4/build/pidl/parser.pm b/source4/build/pidl/parser.pm index ac45b4d9bc..1368099403 100644 --- a/source4/build/pidl/parser.pm +++ b/source4/build/pidl/parser.pm @@ -1035,6 +1035,23 @@ sub ParseStructNdrSize($) pidl "}\n\n"; } +##################################################################### +# calculate size of ndr struct +sub ParseUnionNdrSize($) +{ + my $t = shift; + my $static = fn_prefix($t); + my $sizevar; + + pidl "size_t ndr_size_$t->{NAME}(const union $t->{NAME} *r, uint32_t level, int flags)\n"; + pidl "{\n"; + if (my $flags = util::has_property($t, "flag")) { + pidl "\tflags |= $flags;\n"; + } + pidl "\treturn ndr_size_union(r, flags, level, (ndr_push_union_fn_t)ndr_push_$t->{NAME});\n"; + pidl "}\n\n"; +} + ##################################################################### # parse a union - push side sub ParseUnionPush($) @@ -1395,6 +1412,9 @@ sub ParseTypedefNdrSize($) ($t->{DATA}->{TYPE} eq "STRUCT") && ParseStructNdrSize($t); + + ($t->{DATA}->{TYPE} eq "UNION") && + ParseUnionNdrSize($t); } ##################################################################### -- cgit