From 55781cdce67bdba9c6f37024ae1c76c74a8881de Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 27 May 2005 18:14:43 +0000 Subject: r7036: Allow more operations in several properties (such as size_is, length_is, switch_is, etc) and simplify the code involved (This used to be commit 86de98ee09348297f2c30ce15888ba5e5637c078) --- source4/build/pidl/idl.pm | 901 +++++++++++++++++++++------------------ source4/build/pidl/idl.yp | 1 + source4/build/pidl/ndr_parser.pm | 32 +- 3 files changed, 491 insertions(+), 443 deletions(-) (limited to 'source4/build') diff --git a/source4/build/pidl/idl.pm b/source4/build/pidl/idl.pm index 1e15db18c8..21c06ab200 100644 --- a/source4/build/pidl/idl.pm +++ b/source4/build/pidl/idl.pm @@ -559,7 +559,7 @@ sub new { } }, {#State 9 - DEFAULT => -85 + DEFAULT => -86 }, {#State 10 ACTIONS => { @@ -643,7 +643,7 @@ sub new { } }, {#State 22 - DEFAULT => -87 + DEFAULT => -88 }, {#State 23 DEFAULT => -71 @@ -655,29 +655,30 @@ sub new { ACTIONS => { "-" => 34, "<" => 35, - "+" => 36, - "&" => 38, - "{" => 37, - "/" => 39, - "|" => 40, + "+" => 37, + "~" => 36, + "&" => 39, + "{" => 38, + "/" => 40, "(" => 41, - "*" => 42, - "." => 43, - ">" => 44 + "|" => 42, + "*" => 43, + "." => 44, + ">" => 45 }, DEFAULT => -66 }, {#State 26 ACTIONS => { - "," => 45, - ")" => 46 + "," => 46, + ")" => 47 } }, {#State 27 DEFAULT => -72 }, {#State 28 - DEFAULT => -86 + DEFAULT => -87 }, {#State 29 DEFAULT => -63 @@ -687,28 +688,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 => -88, + DEFAULT => -89, GOTOS => { - 'optional_semicolon' => 57 + 'optional_semicolon' => 58 } }, {#State 33 @@ -716,7 +717,7 @@ sub new { 'IDENTIFIER' => 9 }, GOTOS => { - 'identifier' => 59 + 'identifier' => 60 } }, {#State 34 @@ -729,7 +730,7 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 60, + 'anytext' => 61, 'constant' => 27 } }, @@ -743,7 +744,7 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 61, + 'anytext' => 62, 'constant' => 27 } }, @@ -757,7 +758,7 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 62, + 'anytext' => 63, 'constant' => 27 } }, @@ -771,9 +772,8 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 63, - 'constant' => 27, - 'commalisttext' => 64 + 'anytext' => 64, + 'constant' => 27 } }, {#State 38 @@ -787,7 +787,8 @@ sub new { 'identifier' => 23, 'text' => 24, 'anytext' => 65, - 'constant' => 27 + 'constant' => 27, + 'commalisttext' => 66 } }, {#State 39 @@ -800,7 +801,7 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 66, + 'anytext' => 67, 'constant' => 27 } }, @@ -814,7 +815,7 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 67, + 'anytext' => 68, 'constant' => 27 } }, @@ -828,9 +829,9 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 63, + 'anytext' => 65, 'constant' => 27, - 'commalisttext' => 68 + 'commalisttext' => 69 } }, {#State 42 @@ -843,7 +844,7 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 69, + 'anytext' => 70, 'constant' => 27 } }, @@ -857,7 +858,7 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 70, + 'anytext' => 71, 'constant' => 27 } }, @@ -871,7 +872,7 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 71, + 'anytext' => 72, 'constant' => 27 } }, @@ -885,312 +886,354 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 72, + 'anytext' => 73, 'constant' => 27 } }, {#State 46 - DEFAULT => -65 + ACTIONS => { + 'CONSTANT' => 28, + 'TEXT' => 22, + 'IDENTIFIER' => 9 + }, + DEFAULT => -70, + GOTOS => { + 'identifier' => 23, + 'text' => 24, + 'anytext' => 74, + 'constant' => 27 + } }, {#State 47 + DEFAULT => -65 + }, + {#State 48 DEFAULT => -60, GOTOS => { - 'property_list' => 73 + 'property_list' => 75 } }, - {#State 48 + {#State 49 DEFAULT => -12 }, - {#State 49 + {#State 50 ACTIONS => { - "}" => 74, - "typedef" => 47, - "declare" => 52, - "const" => 55 + "}" => 76, + "typedef" => 48, + "declare" => 53, + "const" => 56 }, DEFAULT => -60, GOTOS => { - 'const' => 54, - 'declare' => 53, - 'function' => 48, - 'typedef' => 56, - 'definition' => 75, - 'property_list' => 50 + 'const' => 55, + 'declare' => 54, + 'function' => 49, + 'typedef' => 57, + 'definition' => 77, + 'property_list' => 51 } }, - {#State 50 + {#State 51 ACTIONS => { 'IDENTIFIER' => 9, - "union" => 76, - "enum" => 77, + "union" => 78, + "enum" => 79, "[" => 7, - 'void' => 79, - "bitmap" => 78, - "struct" => 86 + 'void' => 81, + "bitmap" => 80, + "struct" => 88 }, GOTOS => { - 'identifier' => 81, - 'struct' => 82, - 'enum' => 83, - 'type' => 84, - 'union' => 85, - 'bitmap' => 80 + 'identifier' => 83, + 'struct' => 84, + 'enum' => 85, + 'type' => 86, + 'union' => 87, + 'bitmap' => 82 } }, - {#State 51 + {#State 52 DEFAULT => -10 }, - {#State 52 + {#State 53 DEFAULT => -60, GOTOS => { - 'property_list' => 87 + 'property_list' => 89 } }, - {#State 53 + {#State 54 DEFAULT => -15 }, - {#State 54 + {#State 55 DEFAULT => -13 }, - {#State 55 + {#State 56 ACTIONS => { 'IDENTIFIER' => 9 }, GOTOS => { - 'identifier' => 88 + 'identifier' => 90 } }, - {#State 56 - DEFAULT => -14 - }, {#State 57 - DEFAULT => -4 + DEFAULT => -14 }, {#State 58 - DEFAULT => -89 + DEFAULT => -4 }, {#State 59 + DEFAULT => -90 + }, + {#State 60 ACTIONS => { - ";" => 89 + ";" => 91 } }, - {#State 60 + {#State 61 ACTIONS => { "<" => 35, - "{" => 37 + "~" => 36, + "{" => 38 }, DEFAULT => -74 }, - {#State 61 + {#State 62 ACTIONS => { "-" => 34, "<" => 35, - "+" => 36, - "*" => 42, - "{" => 37, - "&" => 38, - "/" => 39, - "|" => 40, + "+" => 37, + "~" => 36, + "*" => 43, + "{" => 38, + "&" => 39, + "/" => 40, + "|" => 42, "(" => 41, - "." => 43, - ">" => 44 + "." => 44, + ">" => 45 }, DEFAULT => -78 }, - {#State 62 + {#State 63 ACTIONS => { + "-" => 34, "<" => 35, - "{" => 37 + "+" => 37, + "~" => 36, + "*" => 43, + "{" => 38, + "&" => 39, + "/" => 40, + "|" => 42, + "(" => 41, + "." => 44, + ">" => 45 + }, + DEFAULT => -83 + }, + {#State 64 + ACTIONS => { + "<" => 35, + "~" => 36, + "{" => 38 }, DEFAULT => -82 }, - {#State 63 + {#State 65 ACTIONS => { "-" => 34, "<" => 35, - "+" => 36, - "&" => 38, - "{" => 37, - "/" => 39, + "+" => 37, + "~" => 36, + "*" => 43, + "{" => 38, + "&" => 39, + "/" => 40, + "|" => 42, "(" => 41, - "|" => 40, - "*" => 42, - "." => 43, - ">" => 44 + "." => 44, + ">" => 45 }, DEFAULT => -68 }, - {#State 64 + {#State 66 ACTIONS => { - "}" => 90, - "," => 91 + "}" => 92, + "," => 93 } }, - {#State 65 + {#State 67 ACTIONS => { "<" => 35, - "{" => 37 + "~" => 36, + "{" => 38 }, DEFAULT => -80 }, - {#State 66 + {#State 68 ACTIONS => { "<" => 35, - "{" => 37 + "~" => 36, + "{" => 38 }, DEFAULT => -81 }, - {#State 67 + {#State 69 + ACTIONS => { + "," => 93, + ")" => 94 + } + }, + {#State 70 ACTIONS => { "<" => 35, - "{" => 37 + "~" => 36, + "{" => 38 }, DEFAULT => -79 }, - {#State 68 - ACTIONS => { - "," => 91, - ")" => 92 - } - }, - {#State 69 + {#State 71 ACTIONS => { "<" => 35, - "{" => 37 + "~" => 36, + "{" => 38 }, DEFAULT => -76 }, - {#State 70 + {#State 72 ACTIONS => { "<" => 35, - "{" => 37 + "~" => 36, + "{" => 38 }, DEFAULT => -75 }, - {#State 71 + {#State 73 ACTIONS => { "<" => 35, - "{" => 37 + "~" => 36, + "{" => 38 }, DEFAULT => -77 }, - {#State 72 + {#State 74 ACTIONS => { "-" => 34, "<" => 35, - "+" => 36, - "&" => 38, - "{" => 37, - "/" => 39, + "+" => 37, + "~" => 36, + "&" => 39, + "{" => 38, + "/" => 40, "(" => 41, - "|" => 40, - "*" => 42, - "." => 43, - ">" => 44 + "|" => 42, + "*" => 43, + "." => 44, + ">" => 45 }, DEFAULT => -67 }, - {#State 73 + {#State 75 ACTIONS => { 'IDENTIFIER' => 9, - "union" => 76, - "enum" => 77, + "union" => 78, + "enum" => 79, "[" => 7, - 'void' => 79, - "bitmap" => 78, - "struct" => 86 + 'void' => 81, + "bitmap" => 80, + "struct" => 88 }, GOTOS => { - 'identifier' => 81, - 'struct' => 82, - 'enum' => 83, - 'type' => 93, - 'union' => 85, - 'bitmap' => 80 + 'identifier' => 83, + 'struct' => 84, + 'enum' => 85, + 'type' => 95, + 'union' => 87, + 'bitmap' => 82 } }, - {#State 74 + {#State 76 ACTIONS => { - ";" => 58 + ";" => 59 }, - DEFAULT => -88, + DEFAULT => -89, GOTOS => { - 'optional_semicolon' => 94 + 'optional_semicolon' => 96 } }, - {#State 75 + {#State 77 DEFAULT => -11 }, - {#State 76 + {#State 78 ACTIONS => { - "{" => 95 + "{" => 97 } }, - {#State 77 + {#State 79 ACTIONS => { - "{" => 96 + "{" => 98 } }, - {#State 78 + {#State 80 ACTIONS => { - "{" => 97 + "{" => 99 } }, - {#State 79 + {#State 81 DEFAULT => -30 }, - {#State 80 + {#State 82 DEFAULT => -28 }, - {#State 81 + {#State 83 DEFAULT => -29 }, - {#State 82 + {#State 84 DEFAULT => -25 }, - {#State 83 + {#State 85 DEFAULT => -27 }, - {#State 84 + {#State 86 ACTIONS => { 'IDENTIFIER' => 9 }, GOTOS => { - 'identifier' => 98 + 'identifier' => 100 } }, - {#State 85 + {#State 87 DEFAULT => -26 }, - {#State 86 + {#State 88 ACTIONS => { - "{" => 99 + "{" => 101 } }, - {#State 87 + {#State 89 ACTIONS => { - "enum" => 100, + "enum" => 102, "[" => 7, - "bitmap" => 101 + "bitmap" => 103 }, GOTOS => { - 'decl_enum' => 102, - 'decl_bitmap' => 103, - 'decl_type' => 104 + 'decl_enum' => 104, + 'decl_bitmap' => 105, + 'decl_type' => 106 } }, - {#State 88 + {#State 90 ACTIONS => { 'IDENTIFIER' => 9 }, GOTOS => { - 'identifier' => 105 + 'identifier' => 107 } }, - {#State 89 + {#State 91 DEFAULT => -6 }, - {#State 90 + {#State 92 ACTIONS => { 'CONSTANT' => 28, 'TEXT' => 22, @@ -1200,11 +1243,11 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 106, + 'anytext' => 108, 'constant' => 27 } }, - {#State 91 + {#State 93 ACTIONS => { 'CONSTANT' => 28, 'TEXT' => 22, @@ -1214,11 +1257,11 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 107, + 'anytext' => 109, 'constant' => 27 } }, - {#State 92 + {#State 94 ACTIONS => { 'CONSTANT' => 28, 'TEXT' => 22, @@ -1228,260 +1271,263 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 108, + 'anytext' => 110, 'constant' => 27 } }, - {#State 93 + {#State 95 ACTIONS => { 'IDENTIFIER' => 9 }, GOTOS => { - 'identifier' => 109 + 'identifier' => 111 } }, - {#State 94 + {#State 96 DEFAULT => -7 }, - {#State 95 + {#State 97 DEFAULT => -45, GOTOS => { - 'union_elements' => 110 + 'union_elements' => 112 } }, - {#State 96 + {#State 98 ACTIONS => { 'IDENTIFIER' => 9 }, GOTOS => { - 'identifier' => 111, - 'enum_element' => 112, - 'enum_elements' => 113 + 'identifier' => 113, + 'enum_element' => 114, + 'enum_elements' => 115 } }, - {#State 97 + {#State 99 ACTIONS => { 'IDENTIFIER' => 9 }, GOTOS => { - 'identifier' => 116, - 'bitmap_elements' => 115, - 'bitmap_element' => 114 + 'identifier' => 118, + 'bitmap_elements' => 117, + 'bitmap_element' => 116 } }, - {#State 98 + {#State 100 ACTIONS => { - "(" => 117 + "(" => 119 } }, - {#State 99 + {#State 101 DEFAULT => -51, GOTOS => { - 'element_list1' => 118 + 'element_list1' => 120 } }, - {#State 100 + {#State 102 DEFAULT => -22 }, - {#State 101 + {#State 103 DEFAULT => -23 }, - {#State 102 + {#State 104 DEFAULT => -20 }, - {#State 103 + {#State 105 DEFAULT => -21 }, - {#State 104 + {#State 106 ACTIONS => { 'IDENTIFIER' => 9 }, GOTOS => { - 'identifier' => 119 + 'identifier' => 121 } }, - {#State 105 + {#State 107 ACTIONS => { - "[" => 122, - "=" => 121 + "[" => 124, + "=" => 123 }, GOTOS => { - 'array_len' => 120 + 'array_len' => 122 } }, - {#State 106 + {#State 108 ACTIONS => { "-" => 34, "<" => 35, - "+" => 36, - "*" => 42, - "{" => 37, - "&" => 38, - "/" => 39, - "|" => 40, + "+" => 37, + "~" => 36, + "*" => 43, + "{" => 38, + "&" => 39, + "/" => 40, + "|" => 42, "(" => 41, - "." => 43, - ">" => 44 + "." => 44, + ">" => 45 }, - DEFAULT => -84 + DEFAULT => -85 }, - {#State 107 + {#State 109 ACTIONS => { "-" => 34, "<" => 35, - "+" => 36, - "&" => 38, - "{" => 37, - "/" => 39, + "+" => 37, + "~" => 36, + "*" => 43, + "{" => 38, + "&" => 39, + "/" => 40, + "|" => 42, "(" => 41, - "|" => 40, - "*" => 42, - "." => 43, - ">" => 44 + "." => 44, + ">" => 45 }, DEFAULT => -69 }, - {#State 108 + {#State 110 ACTIONS => { "<" => 35, - "{" => 37 + "~" => 36, + "{" => 38 }, - DEFAULT => -83 + DEFAULT => -84 }, - {#State 109 + {#State 111 ACTIONS => { - "[" => 122 + "[" => 124 }, DEFAULT => -57, GOTOS => { - 'array_len' => 123 + 'array_len' => 125 } }, - {#State 110 + {#State 112 ACTIONS => { - "}" => 124 + "}" => 126 }, DEFAULT => -60, GOTOS => { - 'optional_base_element' => 126, - 'property_list' => 125 + 'optional_base_element' => 128, + 'property_list' => 127 } }, - {#State 111 + {#State 113 ACTIONS => { - "=" => 127 + "=" => 129 }, DEFAULT => -34 }, - {#State 112 + {#State 114 DEFAULT => -32 }, - {#State 113 + {#State 115 ACTIONS => { - "}" => 128, - "," => 129 + "}" => 130, + "," => 131 } }, - {#State 114 + {#State 116 DEFAULT => -37 }, - {#State 115 + {#State 117 ACTIONS => { - "}" => 130, - "," => 131 + "}" => 132, + "," => 133 } }, - {#State 116 + {#State 118 ACTIONS => { - "=" => 132 + "=" => 134 } }, - {#State 117 + {#State 119 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 118 + {#State 120 ACTIONS => { - "}" => 137 + "}" => 139 }, DEFAULT => -60, GOTOS => { - 'base_element' => 138, - 'property_list' => 134 + 'base_element' => 140, + 'property_list' => 136 } }, - {#State 119 + {#State 121 ACTIONS => { - ";" => 139 + ";" => 141 } }, - {#State 120 + {#State 122 ACTIONS => { - "=" => 140 + "=" => 142 } }, - {#State 121 + {#State 123 ACTIONS => { - 'IDENTIFIER' => 9, 'CONSTANT' => 28, - 'TEXT' => 22 + 'TEXT' => 22, + 'IDENTIFIER' => 9 }, DEFAULT => -70, GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 141, + 'anytext' => 143, 'constant' => 27 } }, - {#State 122 + {#State 124 ACTIONS => { - 'IDENTIFIER' => 9, 'CONSTANT' => 28, 'TEXT' => 22, - "]" => 143 + "]" => 145, + 'IDENTIFIER' => 9 }, DEFAULT => -70, GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 142, + 'anytext' => 144, 'constant' => 27 } }, - {#State 123 + {#State 125 ACTIONS => { - ";" => 144 + ";" => 146 } }, - {#State 124 + {#State 126 DEFAULT => -47 }, - {#State 125 + {#State 127 ACTIONS => { "[" => 7 }, DEFAULT => -60, GOTOS => { - 'base_or_empty' => 145, - 'base_element' => 146, - 'empty_element' => 147, - 'property_list' => 148 + 'base_or_empty' => 147, + 'base_element' => 148, + 'empty_element' => 149, + 'property_list' => 150 } }, - {#State 126 + {#State 128 DEFAULT => -46 }, - {#State 127 + {#State 129 ACTIONS => { 'CONSTANT' => 28, 'TEXT' => 22, @@ -1491,35 +1537,35 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 149, + 'anytext' => 151, 'constant' => 27 } }, - {#State 128 + {#State 130 DEFAULT => -31 }, - {#State 129 + {#State 131 ACTIONS => { 'IDENTIFIER' => 9 }, GOTOS => { - 'identifier' => 111, - 'enum_element' => 150 + 'identifier' => 113, + 'enum_element' => 152 } }, - {#State 130 + {#State 132 DEFAULT => -36 }, - {#State 131 + {#State 133 ACTIONS => { 'IDENTIFIER' => 9 }, GOTOS => { - 'identifier' => 116, - 'bitmap_element' => 151 + 'identifier' => 118, + 'bitmap_element' => 153 } }, - {#State 132 + {#State 134 ACTIONS => { 'CONSTANT' => 28, 'TEXT' => 22, @@ -1529,271 +1575,276 @@ sub new { GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 152, + 'anytext' => 154, 'constant' => 27 } }, - {#State 133 + {#State 135 DEFAULT => -55 }, - {#State 134 + {#State 136 ACTIONS => { 'IDENTIFIER' => 9, - "union" => 76, - "enum" => 77, + "union" => 78, + "enum" => 79, "[" => 7, - 'void' => 79, - "bitmap" => 78, - "struct" => 86 + 'void' => 81, + "bitmap" => 80, + "struct" => 88 }, GOTOS => { - 'identifier' => 81, - 'struct' => 82, - 'enum' => 83, - 'type' => 153, - 'union' => 85, - 'bitmap' => 80 + 'identifier' => 83, + 'struct' => 84, + 'enum' => 85, + 'type' => 155, + 'union' => 87, + 'bitmap' => 82 } }, - {#State 135 + {#State 137 DEFAULT => -54 }, - {#State 136 + {#State 138 ACTIONS => { - "," => 154, - ")" => 155 + "," => 156, + ")" => 157 } }, - {#State 137 + {#State 139 DEFAULT => -40 }, - {#State 138 + {#State 140 ACTIONS => { - ";" => 156 + ";" => 158 } }, - {#State 139 + {#State 141 DEFAULT => -19 }, - {#State 140 + {#State 142 ACTIONS => { - 'IDENTIFIER' => 9, 'CONSTANT' => 28, - 'TEXT' => 22 + 'TEXT' => 22, + 'IDENTIFIER' => 9 }, DEFAULT => -70, GOTOS => { 'identifier' => 23, 'text' => 24, - 'anytext' => 157, + 'anytext' => 159, 'constant' => 27 } }, - {#State 141 + {#State 143 ACTIONS => { "-" => 34, "<" => 35, - ";" => 158, - "+" => 36, - "&" => 38, - "{" => 37, - "/" => 39, + ";" => 160, + "+" => 37, + "~" => 36, + "&" => 39, + "{" => 38, + "/" => 40, "(" => 41, - "|" => 40, - "*" => 42, - "." => 43, - ">" => 44 + "|" => 42, + "*" => 43, + "." => 44, + ">" => 45 } }, - {#State 142 + {#State 144 ACTIONS => { "-" => 34, "<" => 35, - "+" => 36, - "&" => 38, - "{" => 37, - "/" => 39, + "+" => 37, + "~" => 36, + "&" => 39, + "{" => 38, + "/" => 40, "(" => 41, - "|" => 40, - "*" => 42, - "]" => 159, - "." => 43, - ">" => 44 + "|" => 42, + "*" => 43, + "]" => 161, + "." => 44, + ">" => 45 } }, - {#State 143 + {#State 145 ACTIONS => { - "[" => 122 + "[" => 124 }, DEFAULT => -57, GOTOS => { - 'array_len' => 160 + 'array_len' => 162 } }, - {#State 144 + {#State 146 DEFAULT => -24 }, - {#State 145 + {#State 147 DEFAULT => -44 }, - {#State 146 + {#State 148 ACTIONS => { - ";" => 161 + ";" => 163 } }, - {#State 147 + {#State 149 DEFAULT => -43 }, - {#State 148 + {#State 150 ACTIONS => { 'IDENTIFIER' => 9, - "union" => 76, - ";" => 162, - "enum" => 77, + "union" => 78, + ";" => 164, + "enum" => 79, "[" => 7, - 'void' => 79, - "bitmap" => 78, - "struct" => 86 + 'void' => 81, + "bitmap" => 80, + "struct" => 88 }, GOTOS => { - 'identifier' => 81, - 'struct' => 82, - 'enum' => 83, - 'type' => 153, - 'union' => 85, - 'bitmap' => 80 + 'identifier' => 83, + 'struct' => 84, + 'enum' => 85, + 'type' => 155, + 'union' => 87, + 'bitmap' => 82 } }, - {#State 149 + {#State 151 ACTIONS => { "-" => 34, "<" => 35, - "+" => 36, - "&" => 38, - "{" => 37, - "/" => 39, + "+" => 37, + "~" => 36, + "&" => 39, + "{" => 38, + "/" => 40, "(" => 41, - "|" => 40, - "*" => 42, - "." => 43, - ">" => 44 + "|" => 42, + "*" => 43, + "." => 44, + ">" => 45 }, DEFAULT => -35 }, - {#State 150 + {#State 152 DEFAULT => -33 }, - {#State 151 + {#State 153 DEFAULT => -38 }, - {#State 152 + {#State 154 ACTIONS => { "-" => 34, "<" => 35, - "+" => 36, - "&" => 38, - "{" => 37, - "/" => 39, + "+" => 37, + "~" => 36, + "&" => 39, + "{" => 38, + "/" => 40, "(" => 41, - "|" => 40, - "*" => 42, - "." => 43, - ">" => 44 + "|" => 42, + "*" => 43, + "." => 44, + ">" => 45 }, DEFAULT => -39 }, - {#State 153 + {#State 155 DEFAULT => -49, GOTOS => { - 'pointers' => 163 + 'pointers' => 165 } }, - {#State 154 + {#State 156 DEFAULT => -60, GOTOS => { - 'base_element' => 164, - 'property_list' => 134 + 'base_element' => 166, + 'property_list' => 136 } }, - {#State 155 + {#State 157 ACTIONS => { - ";" => 165 + ";" => 167 } }, - {#State 156 + {#State 158 DEFAULT => -52 }, - {#State 157 + {#State 159 ACTIONS => { "-" => 34, "<" => 35, - ";" => 166, - "+" => 36, - "&" => 38, - "{" => 37, - "/" => 39, + ";" => 168, + "+" => 37, + "~" => 36, + "&" => 39, + "{" => 38, + "/" => 40, "(" => 41, - "|" => 40, - "*" => 42, - "." => 43, - ">" => 44 + "|" => 42, + "*" => 43, + "." => 44, + ">" => 45 } }, - {#State 158 + {#State 160 DEFAULT => -16 }, - {#State 159 + {#State 161 ACTIONS => { - "[" => 122 + "[" => 124 }, DEFAULT => -57, GOTOS => { - 'array_len' => 167 + 'array_len' => 169 } }, - {#State 160 + {#State 162 DEFAULT => -58 }, - {#State 161 + {#State 163 DEFAULT => -42 }, - {#State 162 + {#State 164 DEFAULT => -41 }, - {#State 163 + {#State 165 ACTIONS => { 'IDENTIFIER' => 9, - "*" => 169 + "*" => 171 }, GOTOS => { - 'identifier' => 168 + 'identifier' => 170 } }, - {#State 164 + {#State 166 DEFAULT => -56 }, - {#State 165 + {#State 167 DEFAULT => -18 }, - {#State 166 + {#State 168 DEFAULT => -17 }, - {#State 167 + {#State 169 DEFAULT => -59 }, - {#State 168 + {#State 170 ACTIONS => { - "[" => 122 + "[" => 124 }, DEFAULT => -57, GOTOS => { - 'array_len' => 170 + 'array_len' => 172 } }, - {#State 169 + {#State 171 DEFAULT => -50 }, - {#State 170 + {#State 172 DEFAULT => -48 } ], @@ -2296,10 +2347,10 @@ sub { "$_[1]$_[2]$_[3]" } ], [#Rule 83 - 'anytext', 5, + 'anytext', 3, sub #line 283 "build/pidl/idl.yp" -{ "$_[1]$_[2]$_[3]$_[4]$_[5]" } +{ "$_[1]$_[2]$_[3]" } ], [#Rule 84 'anytext', 5, @@ -2308,21 +2359,27 @@ sub { "$_[1]$_[2]$_[3]$_[4]$_[5]" } ], [#Rule 85 - 'identifier', 1, undef + 'anytext', 5, +sub +#line 285 "build/pidl/idl.yp" +{ "$_[1]$_[2]$_[3]$_[4]$_[5]" } ], [#Rule 86 - 'constant', 1, undef + 'identifier', 1, undef ], [#Rule 87 + 'constant', 1, undef + ], + [#Rule 88 'text', 1, sub -#line 293 "build/pidl/idl.yp" +#line 294 "build/pidl/idl.yp" { "\"$_[1]\"" } ], - [#Rule 88 + [#Rule 89 'optional_semicolon', 0, undef ], - [#Rule 89 + [#Rule 90 'optional_semicolon', 1, undef ] ], @@ -2330,7 +2387,7 @@ sub bless($self,$class); } -#line 304 "build/pidl/idl.yp" +#line 305 "build/pidl/idl.yp" use util; diff --git a/source4/build/pidl/idl.yp b/source4/build/pidl/idl.yp index f81316cd9f..2b839b0e21 100644 --- a/source4/build/pidl/idl.yp +++ b/source4/build/pidl/idl.yp @@ -280,6 +280,7 @@ anytext: #empty | anytext '&' anytext { "$_[1]$_[2]$_[3]" } | anytext '/' anytext { "$_[1]$_[2]$_[3]" } | anytext '+' anytext { "$_[1]$_[2]$_[3]" } + | anytext '~' anytext { "$_[1]$_[2]$_[3]" } | anytext '(' commalisttext ')' anytext { "$_[1]$_[2]$_[3]$_[4]$_[5]" } | anytext '{' commalisttext '}' anytext { "$_[1]$_[2]$_[3]$_[4]$_[5]" } ; diff --git a/source4/build/pidl/ndr_parser.pm b/source4/build/pidl/ndr_parser.pm index 1abf8f7006..f94de5e2be 100644 --- a/source4/build/pidl/ndr_parser.pm +++ b/source4/build/pidl/ndr_parser.pm @@ -116,33 +116,23 @@ sub deindent() # work out the name of a size_is() variable sub ParseExpr($$) { - my($orig_expr) = shift; + my($expr) = shift; my $varlist = shift; - die("Undefined value in ParseExpr") if not defined($orig_expr); + die("Undefined value in ParseExpr") if not defined($expr); - my $expr = $orig_expr; + my @tokens = split /((?:[A-Za-z_])(?:(?:(?:[A-Za-z0-9_.])|(?:->))+))/, $expr; + my $ret = ""; - return $expr if (util::is_constant($expr)); - - my $prefix = ""; - my $postfix = ""; - - if ($expr =~ /\*(.*)/) { - $expr = $1; - $prefix = "*"; - } - - if ($expr =~ /^(.*)([\&\|\/+])(.*)$/) { - $postfix = $2.$3; - $expr = $1; - } - - if (defined($varlist->{$expr})) { - return $prefix.$varlist->{$expr}.$postfix; + foreach my $t (@tokens) { + if (defined($varlist->{$t})) { + $ret .= $varlist->{$t}; + } else { + $ret .= $t; + } } - return $prefix.$expr.$postfix; + return $ret; } ##################################################################### -- cgit