r7161: - Add support for "aliases" for pidls scalar types and add a few aliases.
[samba.git] / source / build / pidl / idl.pm
index a3e23fcda10b80fed5d41c2ddc11691e2d6788f6..8b6cf3956e0f649bf1d805f6884b1ff856515c45 100644 (file)
@@ -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 => -86
        },
        {#State 10
                ACTIONS => {
@@ -570,10 +570,10 @@ sub new {
                ACTIONS => {
                        "(" => 16
                },
-               DEFAULT => -58
+               DEFAULT => -64
        },
        {#State 12
-               DEFAULT => -56
+               DEFAULT => -62
        },
        {#State 13
                ACTIONS => {
@@ -593,7 +593,7 @@ sub new {
        {#State 15
                DEFAULT => -5,
                GOTOS => {
-                       'interfaces' => 21
+                       'interface_names' => 21
                }
        },
        {#State 16
@@ -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 => {
@@ -638,87 +638,100 @@ sub new {
        },
        {#State 21
                ACTIONS => {
-                       "}" => 32
-               },
-               DEFAULT => -54,
-               GOTOS => {
-                       'interface' => 33,
-                       'property_list' => 34
+                       "}" => 32,
+                       "interface" => 33
                }
        },
        {#State 22
-               DEFAULT => -80
+               DEFAULT => -88
        },
        {#State 23
-               DEFAULT => -65
+               DEFAULT => -71
        },
        {#State 24
-               DEFAULT => -67
+               DEFAULT => -73
        },
        {#State 25
                ACTIONS => {
-                       "-" => 35,
-                       "+" => 36,
-                       "&" => 38,
-                       "{" => 37,
-                       "/" => 39,
-                       "|" => 40,
+                       "-" => 34,
+                       "<" => 35,
+                       "+" => 37,
+                       "~" => 36,
+                       "&" => 39,
+                       "{" => 38,
+                       "/" => 40,
                        "(" => 41,
-                       "*" => 42,
-                       "." => 43,
-                       ">" => 44
+                       "|" => 42,
+                       "*" => 43,
+                       "." => 44,
+                       ">" => 45
                },
-               DEFAULT => -60
+               DEFAULT => -66
        },
        {#State 26
                ACTIONS => {
-                       "," => 45,
-                       ")" => 46
+                       "," => 46,
+                       ")" => 47
                }
        },
        {#State 27
-               DEFAULT => -66
+               DEFAULT => -72
        },
        {#State 28
-               DEFAULT => -79
+               DEFAULT => -87
        },
        {#State 29
-               DEFAULT => -57
+               DEFAULT => -63
        },
        {#State 30
                DEFAULT => -9
        },
        {#State 31
                ACTIONS => {
-                       "typedef" => 47,
-                       "const" => 53
+                       "typedef" => 48,
+                       "declare" => 53,
+                       "const" => 56
                },
-               DEFAULT => -54,
+               DEFAULT => -60,
                GOTOS => {
-                       'const' => 52,
-                       'function' => 48,
-                       'typedef' => 54,
-                       '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 => {
-                       ";" => 56
+                       ";" => 59
                },
-               DEFAULT => -81,
+               DEFAULT => -89,
                GOTOS => {
-                       'optional_semicolon' => 55
+                       'optional_semicolon' => 58
                }
        },
        {#State 33
-               DEFAULT => -6
+               ACTIONS => {
+                       'IDENTIFIER' => 9
+               },
+               GOTOS => {
+                       'identifier' => 60
+               }
        },
        {#State 34
                ACTIONS => {
-                       "[" => 7,
-                       "interface" => 8
+                       'CONSTANT' => 28,
+                       'TEXT' => 22,
+                       'IDENTIFIER' => 9
+               },
+               DEFAULT => -70,
+               GOTOS => {
+                       'identifier' => 23,
+                       'text' => 24,
+                       'anytext' => 61,
+                       'constant' => 27
                }
        },
        {#State 35
@@ -727,11 +740,11 @@ sub new {
                        'TEXT' => 22,
                        'IDENTIFIER' => 9
                },
-               DEFAULT => -64,
+               DEFAULT => -70,
                GOTOS => {
                        'identifier' => 23,
                        'text' => 24,
-                       'anytext' => 57,
+                       'anytext' => 62,
                        'constant' => 27
                }
        },
@@ -741,11 +754,11 @@ sub new {
                        'TEXT' => 22,
                        'IDENTIFIER' => 9
                },
-               DEFAULT => -64,
+               DEFAULT => -70,
                GOTOS => {
                        'identifier' => 23,
                        'text' => 24,
-                       'anytext' => 58,
+                       'anytext' => 63,
                        'constant' => 27
                }
        },
@@ -755,13 +768,12 @@ sub new {
                        'TEXT' => 22,
                        'IDENTIFIER' => 9
                },
-               DEFAULT => -64,
+               DEFAULT => -70,
                GOTOS => {
                        'identifier' => 23,
                        'text' => 24,
-                       'anytext' => 59,
-                       'constant' => 27,
-                       'commalisttext' => 60
+                       'anytext' => 64,
+                       'constant' => 27
                }
        },
        {#State 38
@@ -770,12 +782,13 @@ sub new {
                        'TEXT' => 22,
                        'IDENTIFIER' => 9
                },
-               DEFAULT => -64,
+               DEFAULT => -70,
                GOTOS => {
                        'identifier' => 23,
                        'text' => 24,
-                       'anytext' => 61,
-                       'constant' => 27
+                       'anytext' => 65,
+                       'constant' => 27,
+                       'commalisttext' => 66
                }
        },
        {#State 39
@@ -784,11 +797,11 @@ sub new {
                        'TEXT' => 22,
                        'IDENTIFIER' => 9
                },
-               DEFAULT => -64,
+               DEFAULT => -70,
                GOTOS => {
                        'identifier' => 23,
                        'text' => 24,
-                       'anytext' => 62,
+                       'anytext' => 67,
                        'constant' => 27
                }
        },
@@ -798,11 +811,11 @@ sub new {
                        'TEXT' => 22,
                        'IDENTIFIER' => 9
                },
-               DEFAULT => -64,
+               DEFAULT => -70,
                GOTOS => {
                        'identifier' => 23,
                        'text' => 24,
-                       'anytext' => 63,
+                       'anytext' => 68,
                        'constant' => 27
                }
        },
@@ -812,13 +825,13 @@ sub new {
                        'TEXT' => 22,
                        'IDENTIFIER' => 9
                },
-               DEFAULT => -64,
+               DEFAULT => -70,
                GOTOS => {
                        'identifier' => 23,
                        'text' => 24,
-                       'anytext' => 59,
+                       'anytext' => 65,
                        'constant' => 27,
-                       'commalisttext' => 64
+                       'commalisttext' => 69
                }
        },
        {#State 42
@@ -827,11 +840,11 @@ sub new {
                        'TEXT' => 22,
                        'IDENTIFIER' => 9
                },
-               DEFAULT => -64,
+               DEFAULT => -70,
                GOTOS => {
                        'identifier' => 23,
                        'text' => 24,
-                       'anytext' => 65,
+                       'anytext' => 70,
                        'constant' => 27
                }
        },
@@ -841,11 +854,11 @@ sub new {
                        'TEXT' => 22,
                        'IDENTIFIER' => 9
                },
-               DEFAULT => -64,
+               DEFAULT => -70,
                GOTOS => {
                        'identifier' => 23,
                        'text' => 24,
-                       'anytext' => 66,
+                       'anytext' => 71,
                        'constant' => 27
                }
        },
@@ -855,11 +868,11 @@ sub new {
                        'TEXT' => 22,
                        'IDENTIFIER' => 9
                },
-               DEFAULT => -64,
+               DEFAULT => -70,
                GOTOS => {
                        'identifier' => 23,
                        'text' => 24,
-                       'anytext' => 67,
+                       'anytext' => 72,
                        'constant' => 27
                }
        },
@@ -869,857 +882,970 @@ sub new {
                        'TEXT' => 22,
                        'IDENTIFIER' => 9
                },
-               DEFAULT => -64,
+               DEFAULT => -70,
                GOTOS => {
                        'identifier' => 23,
                        'text' => 24,
-                       'anytext' => 68,
+                       'anytext' => 73,
                        'constant' => 27
                }
        },
        {#State 46
-               DEFAULT => -59
+               ACTIONS => {
+                       'CONSTANT' => 28,
+                       'TEXT' => 22,
+                       'IDENTIFIER' => 9
+               },
+               DEFAULT => -70,
+               GOTOS => {
+                       'identifier' => 23,
+                       'text' => 24,
+                       'anytext' => 74,
+                       'constant' => 27
+               }
        },
        {#State 47
-               DEFAULT => -54,
+               DEFAULT => -65
+       },
+       {#State 48
+               DEFAULT => -60,
                GOTOS => {
-                       'property_list' => 69
+                       'property_list' => 75
                }
        },
-       {#State 48
+       {#State 49
                DEFAULT => -12
        },
-       {#State 49
+       {#State 50
                ACTIONS => {
-                       "}" => 70,
-                       "typedef" => 47,
-                       "const" => 53
+                       "}" => 76,
+                       "typedef" => 48,
+                       "declare" => 53,
+                       "const" => 56
                },
-               DEFAULT => -54,
+               DEFAULT => -60,
                GOTOS => {
-                       'const' => 52,
-                       'function' => 48,
-                       'typedef' => 54,
-                       'definition' => 71,
-                       'property_list' => 50
+                       'const' => 55,
+                       'declare' => 54,
+                       'function' => 49,
+                       'typedef' => 57,
+                       'definition' => 77,
+                       'property_list' => 51
                }
        },
-       {#State 50
+       {#State 51
                ACTIONS => {
                        'IDENTIFIER' => 9,
-                       "union" => 72,
-                       "enum" => 73,
+                       "union" => 78,
+                       "enum" => 79,
                        "[" => 7,
-                       'void' => 75,
-                       "bitmap" => 74,
-                       "struct" => 82
+                       'void' => 81,
+                       "bitmap" => 80,
+                       "struct" => 88
                },
                GOTOS => {
-                       'identifier' => 77,
-                       'struct' => 78,
-                       'enum' => 79,
-                       'type' => 80,
-                       'union' => 81,
-                       'bitmap' => 76
+                       'identifier' => 83,
+                       'struct' => 84,
+                       'enum' => 85,
+                       'type' => 86,
+                       'union' => 87,
+                       'bitmap' => 82
                }
        },
-       {#State 51
-               DEFAULT => -10
-       },
        {#State 52
-               DEFAULT => -13
+               DEFAULT => -10
        },
        {#State 53
-               ACTIONS => {
-                       'IDENTIFIER' => 9
-               },
+               DEFAULT => -60,
                GOTOS => {
-                       'identifier' => 83
+                       'property_list' => 89
                }
        },
        {#State 54
-               DEFAULT => -14
+               DEFAULT => -15
        },
        {#State 55
-               DEFAULT => -4
+               DEFAULT => -13
        },
        {#State 56
-               DEFAULT => -82
-       },
-       {#State 57
                ACTIONS => {
-                       "{" => 37
+                       'IDENTIFIER' => 9
                },
-               DEFAULT => -68
+               GOTOS => {
+                       'identifier' => 90
+               }
+       },
+       {#State 57
+               DEFAULT => -14
        },
        {#State 58
-               ACTIONS => {
-                       "{" => 37
-               },
-               DEFAULT => -75
+               DEFAULT => -4
        },
        {#State 59
-               ACTIONS => {
-                       "-" => 35,
-                       "+" => 36,
-                       "&" => 38,
-                       "{" => 37,
-                       "/" => 39,
-                       "(" => 41,
-                       "|" => 40,
-                       "*" => 42,
-                       "." => 43,
-                       ">" => 44
-               },
-               DEFAULT => -62
+               DEFAULT => -90
        },
        {#State 60
                ACTIONS => {
-                       "}" => 84,
-                       "," => 85
+                       ";" => 91
                }
        },
        {#State 61
                ACTIONS => {
-                       "{" => 37
+                       "<" => 35,
+                       "~" => 36,
+                       "{" => 38
                },
-               DEFAULT => -73
+               DEFAULT => -74
        },
        {#State 62
                ACTIONS => {
-                       "{" => 37
+                       "-" => 34,
+                       "<" => 35,
+                       "+" => 37,
+                       "~" => 36,
+                       "*" => 43,
+                       "{" => 38,
+                       "&" => 39,
+                       "/" => 40,
+                       "|" => 42,
+                       "(" => 41,
+                       "." => 44,
+                       ">" => 45
                },
-               DEFAULT => -74
+               DEFAULT => -78
        },
        {#State 63
                ACTIONS => {
-                       "{" => 37
+                       "-" => 34,
+                       "<" => 35,
+                       "+" => 37,
+                       "~" => 36,
+                       "*" => 43,
+                       "{" => 38,
+                       "&" => 39,
+                       "/" => 40,
+                       "|" => 42,
+                       "(" => 41,
+                       "." => 44,
+                       ">" => 45
                },
-               DEFAULT => -72
+               DEFAULT => -83
        },
        {#State 64
                ACTIONS => {
-                       "," => 85,
-                       ")" => 86
-               }
+                       "<" => 35,
+                       "~" => 36,
+                       "{" => 38
+               },
+               DEFAULT => -82
        },
        {#State 65
                ACTIONS => {
-                       "{" => 37
+                       "-" => 34,
+                       "<" => 35,
+                       "+" => 37,
+                       "~" => 36,
+                       "*" => 43,
+                       "{" => 38,
+                       "&" => 39,
+                       "/" => 40,
+                       "|" => 42,
+                       "(" => 41,
+                       "." => 44,
+                       ">" => 45
                },
-               DEFAULT => -70
+               DEFAULT => -68
        },
        {#State 66
                ACTIONS => {
-                       "{" => 37
-               },
-               DEFAULT => -69
+                       "}" => 92,
+                       "," => 93
+               }
        },
        {#State 67
                ACTIONS => {
-                       "{" => 37
+                       "<" => 35,
+                       "~" => 36,
+                       "{" => 38
                },
-               DEFAULT => -71
+               DEFAULT => -80
        },
        {#State 68
                ACTIONS => {
-                       "-" => 35,
-                       "+" => 36,
-                       "&" => 38,
-                       "{" => 37,
-                       "/" => 39,
-                       "(" => 41,
-                       "|" => 40,
-                       "*" => 42,
-                       "." => 43,
-                       ">" => 44
+                       "<" => 35,
+                       "~" => 36,
+                       "{" => 38
                },
-               DEFAULT => -61
+               DEFAULT => -81
        },
        {#State 69
                ACTIONS => {
-                       'IDENTIFIER' => 9,
-                       "union" => 72,
-                       "enum" => 73,
-                       "[" => 7,
-                       'void' => 75,
-                       "bitmap" => 74,
-                       "struct" => 82
-               },
-               GOTOS => {
-                       'identifier' => 77,
-                       'struct' => 78,
-                       'enum' => 79,
-                       'type' => 87,
-                       'union' => 81,
-                       'bitmap' => 76
+                       "," => 93,
+                       ")" => 94
                }
        },
        {#State 70
                ACTIONS => {
-                       ";" => 56
+                       "<" => 35,
+                       "~" => 36,
+                       "{" => 38
                },
-               DEFAULT => -81,
-               GOTOS => {
-                       'optional_semicolon' => 88
-               }
+               DEFAULT => -79
        },
        {#State 71
-               DEFAULT => -11
+               ACTIONS => {
+                       "<" => 35,
+                       "~" => 36,
+                       "{" => 38
+               },
+               DEFAULT => -76
        },
        {#State 72
                ACTIONS => {
-                       "{" => 89
-               }
+                       "<" => 35,
+                       "~" => 36,
+                       "{" => 38
+               },
+               DEFAULT => -75
        },
        {#State 73
                ACTIONS => {
-                       "{" => 90
-               }
+                       "<" => 35,
+                       "~" => 36,
+                       "{" => 38
+               },
+               DEFAULT => -77
        },
        {#State 74
                ACTIONS => {
-                       "{" => 91
-               }
+                       "-" => 34,
+                       "<" => 35,
+                       "+" => 37,
+                       "~" => 36,
+                       "&" => 39,
+                       "{" => 38,
+                       "/" => 40,
+                       "(" => 41,
+                       "|" => 42,
+                       "*" => 43,
+                       "." => 44,
+                       ">" => 45
+               },
+               DEFAULT => -67
        },
        {#State 75
-               DEFAULT => -24
+               ACTIONS => {
+                       'IDENTIFIER' => 9,
+                       "union" => 78,
+                       "enum" => 79,
+                       "[" => 7,
+                       'void' => 81,
+                       "bitmap" => 80,
+                       "struct" => 88
+               },
+               GOTOS => {
+                       'identifier' => 83,
+                       'struct' => 84,
+                       'enum' => 85,
+                       'type' => 95,
+                       'union' => 87,
+                       'bitmap' => 82
+               }
        },
        {#State 76
-               DEFAULT => -22
+               ACTIONS => {
+                       ";" => 59
+               },
+               DEFAULT => -89,
+               GOTOS => {
+                       'optional_semicolon' => 96
+               }
        },
        {#State 77
-               DEFAULT => -23
+               DEFAULT => -11
        },
        {#State 78
-               DEFAULT => -19
+               ACTIONS => {
+                       "{" => 97
+               }
        },
        {#State 79
-               DEFAULT => -21
+               ACTIONS => {
+                       "{" => 98
+               }
        },
        {#State 80
+               ACTIONS => {
+                       "{" => 99
+               }
+       },
+       {#State 81
+               DEFAULT => -30
+       },
+       {#State 82
+               DEFAULT => -28
+       },
+       {#State 83
+               DEFAULT => -29
+       },
+       {#State 84
+               DEFAULT => -25
+       },
+       {#State 85
+               DEFAULT => -27
+       },
+       {#State 86
                ACTIONS => {
                        'IDENTIFIER' => 9
                },
                GOTOS => {
-                       'identifier' => 92
+                       'identifier' => 100
                }
        },
-       {#State 81
-               DEFAULT => -20
+       {#State 87
+               DEFAULT => -26
        },
-       {#State 82
+       {#State 88
                ACTIONS => {
-                       "{" => 93
+                       "{" => 101
                }
        },
-       {#State 83
+       {#State 89
+               ACTIONS => {
+                       "enum" => 102,
+                       "[" => 7,
+                       "bitmap" => 103
+               },
+               GOTOS => {
+                       'decl_enum' => 104,
+                       'decl_bitmap' => 105,
+                       'decl_type' => 106
+               }
+       },
+       {#State 90
                ACTIONS => {
                        'IDENTIFIER' => 9
                },
                GOTOS => {
-                       'identifier' => 94
+                       'identifier' => 107
                }
        },
-       {#State 84
+       {#State 91
+               DEFAULT => -6
+       },
+       {#State 92
                ACTIONS => {
                        'CONSTANT' => 28,
                        'TEXT' => 22,
                        'IDENTIFIER' => 9
                },
-               DEFAULT => -64,
+               DEFAULT => -70,
                GOTOS => {
                        'identifier' => 23,
                        'text' => 24,
-                       'anytext' => 95,
+                       'anytext' => 108,
                        'constant' => 27
                }
        },
-       {#State 85
+       {#State 93
                ACTIONS => {
                        'CONSTANT' => 28,
                        'TEXT' => 22,
                        'IDENTIFIER' => 9
                },
-               DEFAULT => -64,
+               DEFAULT => -70,
                GOTOS => {
                        'identifier' => 23,
                        'text' => 24,
-                       'anytext' => 96,
+                       'anytext' => 109,
                        'constant' => 27
                }
        },
-       {#State 86
+       {#State 94
                ACTIONS => {
                        'CONSTANT' => 28,
                        'TEXT' => 22,
                        'IDENTIFIER' => 9
                },
-               DEFAULT => -64,
+               DEFAULT => -70,
                GOTOS => {
                        'identifier' => 23,
                        'text' => 24,
-                       'anytext' => 97,
+                       'anytext' => 110,
                        'constant' => 27
                }
        },
-       {#State 87
+       {#State 95
                ACTIONS => {
                        'IDENTIFIER' => 9
                },
                GOTOS => {
-                       'identifier' => 98
+                       'identifier' => 111
                }
        },
-       {#State 88
+       {#State 96
                DEFAULT => -7
        },
-       {#State 89
-               ACTIONS => {
-                       "[" => 101
-               },
+       {#State 97
+               DEFAULT => -45,
                GOTOS => {
-                       'union_elements' => 99,
-                       'union_element' => 100
+                       'union_elements' => 112
                }
        },
-       {#State 90
+       {#State 98
                ACTIONS => {
                        'IDENTIFIER' => 9
                },
                GOTOS => {
-                       'identifier' => 102,
-                       'enum_element' => 103,
-                       'enum_elements' => 104
+                       'identifier' => 113,
+                       'enum_element' => 114,
+                       'enum_elements' => 115
                }
        },
-       {#State 91
+       {#State 99
                ACTIONS => {
                        'IDENTIFIER' => 9
                },
                GOTOS => {
-                       'identifier' => 107,
-                       'bitmap_elements' => 106,
-                       'bitmap_element' => 105
+                       'identifier' => 118,
+                       'bitmap_elements' => 117,
+                       'bitmap_element' => 116
                }
        },
-       {#State 92
+       {#State 100
                ACTIONS => {
-                       "(" => 108
+                       "(" => 119
                }
        },
-       {#State 93
-               DEFAULT => -45,
+       {#State 101
+               DEFAULT => -51,
                GOTOS => {
-                       'element_list1' => 109
+                       'element_list1' => 120
                }
        },
-       {#State 94
+       {#State 102
+               DEFAULT => -22
+       },
+       {#State 103
+               DEFAULT => -23
+       },
+       {#State 104
+               DEFAULT => -20
+       },
+       {#State 105
+               DEFAULT => -21
+       },
+       {#State 106
                ACTIONS => {
-                       "[" => 112,
-                       "=" => 111
+                       'IDENTIFIER' => 9
                },
                GOTOS => {
-                       'array_len' => 110
+                       'identifier' => 121
                }
        },
-       {#State 95
+       {#State 107
+               ACTIONS => {
+                       "[" => 124,
+                       "=" => 123
+               },
+               GOTOS => {
+                       'array_len' => 122
+               }
+       },
+       {#State 108
                ACTIONS => {
-                       "-" => 35,
-                       "+" => 36,
-                       "*" => 42,
-                       "{" => 37,
-                       "&" => 38,
-                       "/" => 39,
-                       "|" => 40,
+                       "-" => 34,
+                       "<" => 35,
+                       "+" => 37,
+                       "~" => 36,
+                       "*" => 43,
+                       "{" => 38,
+                       "&" => 39,
+                       "/" => 40,
+                       "|" => 42,
                        "(" => 41,
-                       "." => 43,
-                       ">" => 44
+                       "." => 44,
+                       ">" => 45
                },
-               DEFAULT => -77
+               DEFAULT => -85
        },
-       {#State 96
+       {#State 109
                ACTIONS => {
-                       "-" => 35,
-                       "+" => 36,
-                       "&" => 38,
-                       "{" => 37,
-                       "/" => 39,
+                       "-" => 34,
+                       "<" => 35,
+                       "+" => 37,
+                       "~" => 36,
+                       "*" => 43,
+                       "{" => 38,
+                       "&" => 39,
+                       "/" => 40,
+                       "|" => 42,
                        "(" => 41,
-                       "|" => 40,
-                       "*" => 42,
-                       "." => 43,
-                       ">" => 44
+                       "." => 44,
+                       ">" => 45
                },
-               DEFAULT => -63
+               DEFAULT => -69
        },
-       {#State 97
+       {#State 110
                ACTIONS => {
-                       "{" => 37
+                       "<" => 35,
+                       "~" => 36,
+                       "{" => 38
                },
-               DEFAULT => -76
+               DEFAULT => -84
        },
-       {#State 98
+       {#State 111
                ACTIONS => {
-                       "[" => 112
+                       "[" => 124
                },
-               DEFAULT => -51,
+               DEFAULT => -57,
                GOTOS => {
-                       'array_len' => 113
+                       'array_len' => 125
                }
        },
-       {#State 99
+       {#State 112
                ACTIONS => {
-                       "}" => 114,
-                       "[" => 101
+                       "}" => 126
                },
+               DEFAULT => -60,
                GOTOS => {
-                       'union_element' => 115
-               }
-       },
-       {#State 100
-               DEFAULT => -36
-       },
-       {#State 101
-               ACTIONS => {
-                       "case" => 116,
-                       "default" => 117
+                       'optional_base_element' => 128,
+                       'property_list' => 127
                }
        },
-       {#State 102
+       {#State 113
                ACTIONS => {
-                       "=" => 118
+                       "=" => 129
                },
-               DEFAULT => -28
+               DEFAULT => -34
        },
-       {#State 103
-               DEFAULT => -26
+       {#State 114
+               DEFAULT => -32
        },
-       {#State 104
+       {#State 115
                ACTIONS => {
-                       "}" => 119,
-                       "," => 120
+                       "}" => 130,
+                       "," => 131
                }
        },
-       {#State 105
-               DEFAULT => -31
+       {#State 116
+               DEFAULT => -37
        },
-       {#State 106
+       {#State 117
                ACTIONS => {
-                       "}" => 121,
-                       "," => 122
+                       "}" => 132,
+                       "," => 133
                }
        },
-       {#State 107
+       {#State 118
                ACTIONS => {
-                       "=" => 123
+                       "=" => 134
                }
        },
-       {#State 108
+       {#State 119
                ACTIONS => {
-                       "," => -47,
-                       "void" => 126,
-                       ")" => -47
+                       "," => -53,
+                       "void" => 137,
+                       ")" => -53
                },
-               DEFAULT => -54,
+               DEFAULT => -60,
                GOTOS => {
-                       'base_element' => 124,
-                       'element_list2' => 127,
-                       'property_list' => 125
+                       'base_element' => 135,
+                       'element_list2' => 138,
+                       'property_list' => 136
                }
        },
-       {#State 109
+       {#State 120
                ACTIONS => {
-                       "}" => 128
+                       "}" => 139
                },
-               DEFAULT => -54,
+               DEFAULT => -60,
                GOTOS => {
-                       'base_element' => 129,
-                       'property_list' => 125
+                       'base_element' => 140,
+                       'property_list' => 136
                }
        },
-       {#State 110
+       {#State 121
                ACTIONS => {
-                       "=" => 130
+                       ";" => 141
                }
        },
-       {#State 111
+       {#State 122
+               ACTIONS => {
+                       "=" => 142
+               }
+       },
+       {#State 123
                ACTIONS => {
-                       'IDENTIFIER' => 9,
                        'CONSTANT' => 28,
-                       'TEXT' => 22
+                       'TEXT' => 22,
+                       'IDENTIFIER' => 9
                },
-               DEFAULT => -64,
+               DEFAULT => -70,
                GOTOS => {
                        'identifier' => 23,
                        'text' => 24,
-                       'anytext' => 131,
+                       'anytext' => 143,
                        'constant' => 27
                }
        },
-       {#State 112
+       {#State 124
                ACTIONS => {
-                       'IDENTIFIER' => 9,
                        'CONSTANT' => 28,
                        'TEXT' => 22,
-                       "]" => 133
+                       "]" => 145,
+                       'IDENTIFIER' => 9
                },
-               DEFAULT => -64,
+               DEFAULT => -70,
                GOTOS => {
                        'identifier' => 23,
                        'text' => 24,
-                       'anytext' => 132,
+                       'anytext' => 144,
                        'constant' => 27
                }
        },
-       {#State 113
+       {#State 125
                ACTIONS => {
-                       ";" => 134
+                       ";" => 146
                }
        },
-       {#State 114
-               DEFAULT => -35
-       },
-       {#State 115
-               DEFAULT => -37
+       {#State 126
+               DEFAULT => -47
        },
-       {#State 116
+       {#State 127
                ACTIONS => {
-                       "(" => 135
+                       "[" => 7
+               },
+               DEFAULT => -60,
+               GOTOS => {
+                       'base_or_empty' => 147,
+                       'base_element' => 148,
+                       'empty_element' => 149,
+                       'property_list' => 150
                }
        },
-       {#State 117
-               ACTIONS => {
-                       "]" => 136
-               }
+       {#State 128
+               DEFAULT => -46
        },
-       {#State 118
+       {#State 129
                ACTIONS => {
                        'CONSTANT' => 28,
                        'TEXT' => 22,
                        'IDENTIFIER' => 9
                },
-               DEFAULT => -64,
+               DEFAULT => -70,
                GOTOS => {
                        'identifier' => 23,
                        'text' => 24,
-                       'anytext' => 137,
+                       'anytext' => 151,
                        'constant' => 27
                }
        },
-       {#State 119
-               DEFAULT => -25
+       {#State 130
+               DEFAULT => -31
        },
-       {#State 120
+       {#State 131
                ACTIONS => {
                        'IDENTIFIER' => 9
                },
                GOTOS => {
-                       'identifier' => 102,
-                       'enum_element' => 138
+                       'identifier' => 113,
+                       'enum_element' => 152
                }
        },
-       {#State 121
-               DEFAULT => -30
+       {#State 132
+               DEFAULT => -36
        },
-       {#State 122
+       {#State 133
                ACTIONS => {
                        'IDENTIFIER' => 9
                },
                GOTOS => {
-                       'identifier' => 107,
-                       'bitmap_element' => 139
+                       'identifier' => 118,
+                       'bitmap_element' => 153
                }
        },
-       {#State 123
+       {#State 134
                ACTIONS => {
                        'CONSTANT' => 28,
                        'TEXT' => 22,
                        'IDENTIFIER' => 9
                },
-               DEFAULT => -64,
+               DEFAULT => -70,
                GOTOS => {
                        'identifier' => 23,
                        'text' => 24,
-                       'anytext' => 140,
+                       'anytext' => 154,
                        'constant' => 27
                }
        },
-       {#State 124
-               DEFAULT => -49
+       {#State 135
+               DEFAULT => -55
        },
-       {#State 125
+       {#State 136
                ACTIONS => {
                        'IDENTIFIER' => 9,
-                       "union" => 72,
-                       "enum" => 73,
+                       "union" => 78,
+                       "enum" => 79,
                        "[" => 7,
-                       'void' => 75,
-                       "bitmap" => 74,
-                       "struct" => 82
+                       'void' => 81,
+                       "bitmap" => 80,
+                       "struct" => 88
                },
                GOTOS => {
-                       'identifier' => 77,
-                       'struct' => 78,
-                       'enum' => 79,
-                       'type' => 141,
-                       'union' => 81,
-                       'bitmap' => 76
+                       'identifier' => 83,
+                       'struct' => 84,
+                       'enum' => 85,
+                       'type' => 155,
+                       'union' => 87,
+                       'bitmap' => 82
                }
        },
-       {#State 126
-               DEFAULT => -48
+       {#State 137
+               DEFAULT => -54
        },
-       {#State 127
+       {#State 138
                ACTIONS => {
-                       "," => 142,
-                       ")" => 143
+                       "," => 156,
+                       ")" => 157
                }
        },
-       {#State 128
-               DEFAULT => -34
+       {#State 139
+               DEFAULT => -40
        },
-       {#State 129
+       {#State 140
                ACTIONS => {
-                       ";" => 144
+                       ";" => 158
                }
        },
-       {#State 130
+       {#State 141
+               DEFAULT => -19
+       },
+       {#State 142
                ACTIONS => {
-                       'IDENTIFIER' => 9,
                        'CONSTANT' => 28,
-                       'TEXT' => 22
+                       'TEXT' => 22,
+                       'IDENTIFIER' => 9
                },
-               DEFAULT => -64,
+               DEFAULT => -70,
                GOTOS => {
                        'identifier' => 23,
                        'text' => 24,
-                       'anytext' => 145,
+                       'anytext' => 159,
                        'constant' => 27
                }
        },
-       {#State 131
+       {#State 143
                ACTIONS => {
-                       "-" => 35,
-                       ";" => 146,
-                       "+" => 36,
-                       "&" => 38,
-                       "{" => 37,
-                       "/" => 39,
+                       "-" => 34,
+                       "<" => 35,
+                       ";" => 160,
+                       "+" => 37,
+                       "~" => 36,
+                       "&" => 39,
+                       "{" => 38,
+                       "/" => 40,
                        "(" => 41,
-                       "|" => 40,
-                       "*" => 42,
-                       "." => 43,
-                       ">" => 44
+                       "|" => 42,
+                       "*" => 43,
+                       "." => 44,
+                       ">" => 45
                }
        },
-       {#State 132
+       {#State 144
                ACTIONS => {
-                       "-" => 35,
-                       "+" => 36,
-                       "&" => 38,
-                       "{" => 37,
-                       "/" => 39,
+                       "-" => 34,
+                       "<" => 35,
+                       "+" => 37,
+                       "~" => 36,
+                       "&" => 39,
+                       "{" => 38,
+                       "/" => 40,
                        "(" => 41,
-                       "|" => 40,
-                       "*" => 42,
-                       "." => 43,
-                       "]" => 147,
-                       ">" => 44
+                       "|" => 42,
+                       "*" => 43,
+                       "]" => 161,
+                       "." => 44,
+                       ">" => 45
                }
        },
-       {#State 133
-               DEFAULT => -52
-       },
-       {#State 134
-               DEFAULT => -18
-       },
-       {#State 135
+       {#State 145
                ACTIONS => {
-                       'IDENTIFIER' => 9,
-                       'CONSTANT' => 28,
-                       'TEXT' => 22
+                       "[" => 124
                },
-               DEFAULT => -64,
+               DEFAULT => -57,
                GOTOS => {
-                       'identifier' => 23,
-                       'text' => 24,
-                       'anytext' => 148,
-                       'constant' => 27
+                       'array_len' => 162
                }
        },
-       {#State 136
+       {#State 146
+               DEFAULT => -24
+       },
+       {#State 147
+               DEFAULT => -44
+       },
+       {#State 148
+               ACTIONS => {
+                       ";" => 163
+               }
+       },
+       {#State 149
+               DEFAULT => -43
+       },
+       {#State 150
                ACTIONS => {
-                       ";" => 149
+                       'IDENTIFIER' => 9,
+                       "union" => 78,
+                       ";" => 164,
+                       "enum" => 79,
+                       "[" => 7,
+                       'void' => 81,
+                       "bitmap" => 80,
+                       "struct" => 88
                },
-               DEFAULT => -54,
                GOTOS => {
-                       'base_element' => 150,
-                       'property_list' => 125
+                       'identifier' => 83,
+                       'struct' => 84,
+                       'enum' => 85,
+                       'type' => 155,
+                       'union' => 87,
+                       'bitmap' => 82
                }
        },
-       {#State 137
+       {#State 151
                ACTIONS => {
-                       "-" => 35,
-                       "+" => 36,
-                       "&" => 38,
-                       "{" => 37,
-                       "/" => 39,
+                       "-" => 34,
+                       "<" => 35,
+                       "+" => 37,
+                       "~" => 36,
+                       "&" => 39,
+                       "{" => 38,
+                       "/" => 40,
                        "(" => 41,
-                       "|" => 40,
-                       "*" => 42,
-                       "." => 43,
-                       ">" => 44
+                       "|" => 42,
+                       "*" => 43,
+                       "." => 44,
+                       ">" => 45
                },
-               DEFAULT => -29
+               DEFAULT => -35
        },
-       {#State 138
-               DEFAULT => -27
+       {#State 152
+               DEFAULT => -33
        },
-       {#State 139
-               DEFAULT => -32
+       {#State 153
+               DEFAULT => -38
        },
-       {#State 140
+       {#State 154
                ACTIONS => {
-                       "-" => 35,
-                       "+" => 36,
-                       "&" => 38,
-                       "{" => 37,
-                       "/" => 39,
+                       "-" => 34,
+                       "<" => 35,
+                       "+" => 37,
+                       "~" => 36,
+                       "&" => 39,
+                       "{" => 38,
+                       "/" => 40,
                        "(" => 41,
-                       "|" => 40,
-                       "*" => 42,
-                       "." => 43,
-                       ">" => 44
+                       "|" => 42,
+                       "*" => 43,
+                       "." => 44,
+                       ">" => 45
                },
-               DEFAULT => -33
+               DEFAULT => -39
        },
-       {#State 141
-               DEFAULT => -43,
+       {#State 155
+               DEFAULT => -49,
                GOTOS => {
-                       'pointers' => 151
+                       'pointers' => 165
                }
        },
-       {#State 142
-               DEFAULT => -54,
+       {#State 156
+               DEFAULT => -60,
                GOTOS => {
-                       'base_element' => 152,
-                       'property_list' => 125
+                       'base_element' => 166,
+                       'property_list' => 136
                }
        },
-       {#State 143
+       {#State 157
                ACTIONS => {
-                       ";" => 153
+                       ";" => 167
                }
        },
-       {#State 144
-               DEFAULT => -46
+       {#State 158
+               DEFAULT => -52
        },
-       {#State 145
+       {#State 159
                ACTIONS => {
-                       "-" => 35,
-                       ";" => 154,
-                       "+" => 36,
-                       "&" => 38,
-                       "{" => 37,
-                       "/" => 39,
+                       "-" => 34,
+                       "<" => 35,
+                       ";" => 168,
+                       "+" => 37,
+                       "~" => 36,
+                       "&" => 39,
+                       "{" => 38,
+                       "/" => 40,
                        "(" => 41,
-                       "|" => 40,
-                       "*" => 42,
-                       "." => 43,
-                       ">" => 44
+                       "|" => 42,
+                       "*" => 43,
+                       "." => 44,
+                       ">" => 45
                }
        },
-       {#State 146
-               DEFAULT => -15
-       },
-       {#State 147
-               DEFAULT => -53
+       {#State 160
+               DEFAULT => -16
        },
-       {#State 148
+       {#State 161
                ACTIONS => {
-                       "-" => 35,
-                       "+" => 36,
-                       "&" => 38,
-                       "{" => 37,
-                       "/" => 39,
-                       "(" => 41,
-                       "|" => 40,
-                       "*" => 42,
-                       "." => 43,
-                       ")" => 155,
-                       ">" => 44
+                       "[" => 124
+               },
+               DEFAULT => -57,
+               GOTOS => {
+                       'array_len' => 169
                }
        },
-       {#State 149
-               DEFAULT => -41
+       {#State 162
+               DEFAULT => -58
        },
-       {#State 150
-               ACTIONS => {
-                       ";" => 156
-               }
+       {#State 163
+               DEFAULT => -42
        },
-       {#State 151
+       {#State 164
+               DEFAULT => -41
+       },
+       {#State 165
                ACTIONS => {
                        'IDENTIFIER' => 9,
-                       "*" => 158
+                       "*" => 171
                },
                GOTOS => {
-                       'identifier' => 157
+                       'identifier' => 170
                }
        },
-       {#State 152
-               DEFAULT => -50
-       },
-       {#State 153
-               DEFAULT => -17
-       },
-       {#State 154
-               DEFAULT => -16
-       },
-       {#State 155
-               ACTIONS => {
-                       "]" => 159
-               }
+       {#State 166
+               DEFAULT => -56
        },
-       {#State 156
-               DEFAULT => -40
+       {#State 167
+               DEFAULT => -18
        },
-       {#State 157
-               ACTIONS => {
-                       "[" => 112
-               },
-               DEFAULT => -51,
-               GOTOS => {
-                       'array_len' => 160
-               }
+       {#State 168
+               DEFAULT => -17
        },
-       {#State 158
-               DEFAULT => -44
+       {#State 169
+               DEFAULT => -59
        },
-       {#State 159
+       {#State 170
                ACTIONS => {
-                       ";" => 161
+                       "[" => 124
                },
-               DEFAULT => -54,
+               DEFAULT => -57,
                GOTOS => {
-                       'base_element' => 162,
-                       'property_list' => 125
+                       'array_len' => 172
                }
        },
-       {#State 160
-               DEFAULT => -42
-       },
-       {#State 161
-               DEFAULT => -39
-       },
-       {#State 162
-               ACTIONS => {
-                       ";" => 163
-               }
+       {#State 171
+               DEFAULT => -50
        },
-       {#State 163
-               DEFAULT => -38
+       {#State 172
+               DEFAULT => -48
        }
 ],
                                   yyrules  =>
@@ -1751,27 +1877,31 @@ sub
               "PROPERTIES" => $_[1],
               "NAME" => $_[3],
               "DATA" => $_[5],
+                  "FILE" => $_[0]->YYData->{INPUT_FILENAME},
+                  "LINE" => $_[0]->YYData->{LINE},
           }}
        ],
        [#Rule 5
-                'interfaces', 0, undef
+                'interface_names', 0, undef
        ],
        [#Rule 6
-                'interfaces', 2,
+                'interface_names', 4,
 sub
-#line 34 "build/pidl/idl.yp"
+#line 36 "build/pidl/idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 7
                 'interface', 8,
 sub
-#line 38 "build/pidl/idl.yp"
+#line 40 "build/pidl/idl.yp"
 {$_[3] => {
                "TYPE" => "INTERFACE", 
               "PROPERTIES" => $_[1],
               "NAME" => $_[3],
               "BASE" => $_[4],
               "DATA" => $_[6],
+                  "FILE" => $_[0]->YYData->{INPUT_FILENAME},
+                  "LINE" => $_[0]->YYData->{LINE},
           }}
        ],
        [#Rule 8
@@ -1780,19 +1910,19 @@ sub
        [#Rule 9
                 'base_interface', 2,
 sub
-#line 49 "build/pidl/idl.yp"
+#line 53 "build/pidl/idl.yp"
 { $_[2] }
        ],
        [#Rule 10
                 'definitions', 1,
 sub
-#line 53 "build/pidl/idl.yp"
+#line 57 "build/pidl/idl.yp"
 { [ $_[1] ] }
        ],
        [#Rule 11
                 'definitions', 2,
 sub
-#line 54 "build/pidl/idl.yp"
+#line 58 "build/pidl/idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 12
@@ -1805,406 +1935,451 @@ sub
                 'definition', 1, undef
        ],
        [#Rule 15
+                'definition', 1, undef
+       ],
+       [#Rule 16
                 'const', 6,
 sub
-#line 62 "build/pidl/idl.yp"
+#line 66 "build/pidl/idl.yp"
 {{
                      "TYPE"  => "CONST", 
                     "DTYPE"  => $_[2],
                     "NAME"  => $_[3],
-                    "VALUE" => $_[5]
+                    "VALUE" => $_[5],
+                    "FILE" => $_[0]->YYData->{INPUT_FILENAME},
+                    "LINE" => $_[0]->YYData->{LINE},
         }}
        ],
-       [#Rule 16
+       [#Rule 17
                 'const', 7,
 sub
-#line 69 "build/pidl/idl.yp"
+#line 75 "build/pidl/idl.yp"
 {{
                      "TYPE"  => "CONST", 
                     "DTYPE"  => $_[2],
                     "NAME"  => $_[3],
                     "ARRAY_LEN" => $_[4],
                     "VALUE" => $_[6],
+                    "FILE" => $_[0]->YYData->{INPUT_FILENAME},
+                    "LINE" => $_[0]->YYData->{LINE},
         }}
        ],
-       [#Rule 17
+       [#Rule 18
                 'function', 7,
 sub
-#line 80 "build/pidl/idl.yp"
+#line 88 "build/pidl/idl.yp"
 {{
                "TYPE" => "FUNCTION",
                "NAME" => $_[3],
                "RETURN_TYPE" => $_[2],
                "PROPERTIES" => $_[1],
-               "DATA" => $_[5]
-        }}
+               "ELEMENTS" => $_[5],
+               "FILE" => $_[0]->YYData->{INPUT_FILENAME},
+               "LINE" => $_[0]->YYData->{LINE},
+         }}
        ],
-       [#Rule 18
+       [#Rule 19
+                'declare', 5,
+sub
+#line 100 "build/pidl/idl.yp"
+{{
+                    "TYPE" => "DECLARE", 
+                     "PROPERTIES" => $_[2],
+                    "NAME" => $_[4],
+                    "DATA" => $_[3],
+                    "FILE" => $_[0]->YYData->{INPUT_FILENAME},
+                    "LINE" => $_[0]->YYData->{LINE},
+        }}
+       ],
+       [#Rule 20
+                'decl_type', 1, undef
+       ],
+       [#Rule 21
+                'decl_type', 1, undef
+       ],
+       [#Rule 22
+                'decl_enum', 1,
+sub
+#line 114 "build/pidl/idl.yp"
+{{
+                     "TYPE" => "ENUM"
+        }}
+       ],
+       [#Rule 23
+                'decl_bitmap', 1,
+sub
+#line 120 "build/pidl/idl.yp"
+{{
+                     "TYPE" => "BITMAP"
+        }}
+       ],
+       [#Rule 24
                 'typedef', 6,
 sub
-#line 90 "build/pidl/idl.yp"
+#line 126 "build/pidl/idl.yp"
 {{
                     "TYPE" => "TYPEDEF", 
                      "PROPERTIES" => $_[2],
                     "NAME" => $_[4],
                     "DATA" => $_[3],
-                    "ARRAY_LEN" => $_[5]
+                    "ARRAY_LEN" => $_[5],
+                    "FILE" => $_[0]->YYData->{INPUT_FILENAME},
+                    "LINE" => $_[0]->YYData->{LINE},
         }}
        ],
-       [#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 138 "build/pidl/idl.yp"
 { "void" }
        ],
-       [#Rule 25
+       [#Rule 31
                 'enum', 4,
 sub
-#line 105 "build/pidl/idl.yp"
+#line 143 "build/pidl/idl.yp"
 {{
-                     "TYPE" => "ENUM", 
+             "TYPE" => "ENUM", 
                     "ELEMENTS" => $_[3]
         }}
        ],
-       [#Rule 26
+       [#Rule 32
                 'enum_elements', 1,
 sub
-#line 112 "build/pidl/idl.yp"
+#line 150 "build/pidl/idl.yp"
 { [ $_[1] ] }
        ],
-       [#Rule 27
+       [#Rule 33
                 'enum_elements', 3,
 sub
-#line 113 "build/pidl/idl.yp"
+#line 151 "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 155 "build/pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 30
+       [#Rule 36
                 'bitmap', 4,
 sub
-#line 121 "build/pidl/idl.yp"
+#line 159 "build/pidl/idl.yp"
 {{
                      "TYPE" => "BITMAP", 
                     "ELEMENTS" => $_[3]
         }}
        ],
-       [#Rule 31
+       [#Rule 37
                 'bitmap_elements', 1,
 sub
-#line 128 "build/pidl/idl.yp"
+#line 166 "build/pidl/idl.yp"
 { [ $_[1] ] }
        ],
-       [#Rule 32
+       [#Rule 38
                 'bitmap_elements', 3,
 sub
-#line 129 "build/pidl/idl.yp"
+#line 167 "build/pidl/idl.yp"
 { push(@{$_[1]}, $_[3]); $_[1] }
        ],
-       [#Rule 33
+       [#Rule 39
                 'bitmap_element', 3,
 sub
-#line 132 "build/pidl/idl.yp"
+#line 170 "build/pidl/idl.yp"
 { "$_[1] ( $_[3] )" }
        ],
-       [#Rule 34
+       [#Rule 40
                 'struct', 4,
 sub
-#line 136 "build/pidl/idl.yp"
+#line 174 "build/pidl/idl.yp"
 {{
                      "TYPE" => "STRUCT", 
                     "ELEMENTS" => $_[3]
         }}
        ],
-       [#Rule 35
-                'union', 4,
+       [#Rule 41
+                'empty_element', 2,
 sub
-#line 143 "build/pidl/idl.yp"
+#line 181 "build/pidl/idl.yp"
 {{
-               "TYPE" => "UNION",
-               "DATA" => $_[3]
+                "NAME" => "",
+                "TYPE" => "EMPTY",
+                "PROPERTIES" => $_[1],
+                "POINTERS" => 0,
+                "ARRAY_LEN" => [],
+                "FILE" => $_[0]->YYData->{INPUT_FILENAME},
+                "LINE" => $_[0]->YYData->{LINE},
         }}
        ],
-       [#Rule 36
-                'union_elements', 1,
-sub
-#line 150 "build/pidl/idl.yp"
-{ [ $_[1] ] }
+       [#Rule 42
+                'base_or_empty', 2, undef
        ],
-       [#Rule 37
-                'union_elements', 2,
-sub
-#line 151 "build/pidl/idl.yp"
-{ push(@{$_[1]}, $_[2]); $_[1] }
+       [#Rule 43
+                'base_or_empty', 1, undef
        ],
-       [#Rule 38
-                'union_element', 8,
+       [#Rule 44
+                'optional_base_element', 2,
 sub
-#line 156 "build/pidl/idl.yp"
-{{
-               "TYPE" => "UNION_ELEMENT",
-               "CASE" => $_[4],
-               "DATA" => $_[7]
-        }}
+#line 195 "build/pidl/idl.yp"
+{ $_[2]->{PROPERTIES} = util::FlattenHash([$_[1],$_[2]->{PROPERTIES}]); $_[2] }
        ],
-       [#Rule 39
-                'union_element', 7,
-sub
-#line 162 "build/pidl/idl.yp"
-{{
-               "TYPE" => "EMPTY",
-               "CASE" => $_[4],
-        }}
+       [#Rule 45
+                'union_elements', 0, undef
        ],
-       [#Rule 40
-                'union_element', 5,
+       [#Rule 46
+                'union_elements', 2,
 sub
-#line 167 "build/pidl/idl.yp"
-{{
-               "TYPE" => "UNION_ELEMENT",
-               "CASE" => "default",
-               "DATA" => $_[4]
-        }}
+#line 200 "build/pidl/idl.yp"
+{ push(@{$_[1]}, $_[2]); $_[1] }
        ],
-       [#Rule 41
-                'union_element', 4,
+       [#Rule 47
+                'union', 4,
 sub
-#line 173 "build/pidl/idl.yp"
+#line 204 "build/pidl/idl.yp"
 {{
-               "TYPE" => "EMPTY",
-               "CASE" => "default",
-        }}
+                     "TYPE" => "UNION", 
+                    "ELEMENTS" => $_[3]
+        }}
        ],
-       [#Rule 42
+       [#Rule 48
                 'base_element', 5,
 sub
-#line 180 "build/pidl/idl.yp"
+#line 211 "build/pidl/idl.yp"
 {{
                           "NAME" => $_[4],
                           "TYPE" => $_[2],
                           "PROPERTIES" => $_[1],
                           "POINTERS" => $_[3],
-                          "ARRAY_LEN" => $_[5]
+                          "ARRAY_LEN" => $_[5],
+                      "FILE" => $_[0]->YYData->{INPUT_FILENAME},
+                      "LINE" => $_[0]->YYData->{LINE},
               }}
        ],
-       [#Rule 43
+       [#Rule 49
                 'pointers', 0,
 sub
-#line 192 "build/pidl/idl.yp"
+#line 225 "build/pidl/idl.yp"
 { 0 }
        ],
-       [#Rule 44
+       [#Rule 50
                 'pointers', 2,
 sub
-#line 193 "build/pidl/idl.yp"
+#line 226 "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 231 "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 237 "build/pidl/idl.yp"
 { [ $_[1] ] }
        ],
-       [#Rule 50
+       [#Rule 56
                 'element_list2', 3,
 sub
-#line 207 "build/pidl/idl.yp"
+#line 238 "build/pidl/idl.yp"
 { push(@{$_[1]}, $_[3]); $_[1] }
        ],
-       [#Rule 51
+       [#Rule 57
                 'array_len', 0, undef
        ],
-       [#Rule 52
-                'array_len', 2,
+       [#Rule 58
+                'array_len', 3,
 sub
-#line 212 "build/pidl/idl.yp"
-{ "*" }
+#line 243 "build/pidl/idl.yp"
+{ push(@{$_[3]}, "*"); $_[3] }
        ],
-       [#Rule 53
-                'array_len', 3,
+       [#Rule 59
+                'array_len', 4,
 sub
-#line 213 "build/pidl/idl.yp"
-{ "$_[2]" }
+#line 244 "build/pidl/idl.yp"
+{ push(@{$_[4]}, "$_[2]"); $_[4] }
        ],
-       [#Rule 54
+       [#Rule 60
                 'property_list', 0, undef
        ],
-       [#Rule 55
+       [#Rule 61
                 'property_list', 4,
 sub
-#line 219 "build/pidl/idl.yp"
+#line 250 "build/pidl/idl.yp"
 { util::FlattenHash([$_[1],$_[3]]); }
        ],
-       [#Rule 56
+       [#Rule 62
                 'properties', 1,
 sub
-#line 222 "build/pidl/idl.yp"
+#line 253 "build/pidl/idl.yp"
 { $_[1] }
        ],
-       [#Rule 57
+       [#Rule 63
                 'properties', 3,
 sub
-#line 223 "build/pidl/idl.yp"
+#line 254 "build/pidl/idl.yp"
 { util::FlattenHash([$_[1], $_[3]]); }
        ],
-       [#Rule 58
+       [#Rule 64
                 'property', 1,
 sub
-#line 226 "build/pidl/idl.yp"
+#line 257 "build/pidl/idl.yp"
 {{ "$_[1]" => "1"     }}
        ],
-       [#Rule 59
+       [#Rule 65
                 'property', 4,
 sub
-#line 227 "build/pidl/idl.yp"
+#line 258 "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 263 "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 268 "build/pidl/idl.yp"
 { "$_[1],$_[3]" }
        ],
-       [#Rule 64
+       [#Rule 70
                 'anytext', 0,
 sub
-#line 241 "build/pidl/idl.yp"
+#line 272 "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 274 "build/pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 69
+       [#Rule 75
                 'anytext', 3,
 sub
-#line 244 "build/pidl/idl.yp"
+#line 275 "build/pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 70
+       [#Rule 76
                 'anytext', 3,
 sub
-#line 245 "build/pidl/idl.yp"
+#line 276 "build/pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 71
+       [#Rule 77
                 'anytext', 3,
 sub
-#line 246 "build/pidl/idl.yp"
+#line 277 "build/pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 72
+       [#Rule 78
                 'anytext', 3,
 sub
-#line 247 "build/pidl/idl.yp"
+#line 278 "build/pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 73
+       [#Rule 79
                 'anytext', 3,
 sub
-#line 248 "build/pidl/idl.yp"
+#line 279 "build/pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 74
+       [#Rule 80
                 'anytext', 3,
 sub
-#line 249 "build/pidl/idl.yp"
+#line 280 "build/pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 75
+       [#Rule 81
                 'anytext', 3,
 sub
-#line 250 "build/pidl/idl.yp"
+#line 281 "build/pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 76
+       [#Rule 82
+                'anytext', 3,
+sub
+#line 282 "build/pidl/idl.yp"
+{ "$_[1]$_[2]$_[3]" }
+       ],
+       [#Rule 83
+                'anytext', 3,
+sub
+#line 283 "build/pidl/idl.yp"
+{ "$_[1]$_[2]$_[3]" }
+       ],
+       [#Rule 84
                 'anytext', 5,
 sub
-#line 251 "build/pidl/idl.yp"
+#line 284 "build/pidl/idl.yp"
 { "$_[1]$_[2]$_[3]$_[4]$_[5]" }
        ],
-       [#Rule 77
+       [#Rule 85
                 'anytext', 5,
 sub
-#line 252 "build/pidl/idl.yp"
+#line 285 "build/pidl/idl.yp"
 { "$_[1]$_[2]$_[3]$_[4]$_[5]" }
        ],
-       [#Rule 78
+       [#Rule 86
                 'identifier', 1, undef
        ],
-       [#Rule 79
+       [#Rule 87
                 'constant', 1, undef
        ],
-       [#Rule 80
+       [#Rule 88
                 'text', 1,
 sub
-#line 261 "build/pidl/idl.yp"
+#line 294 "build/pidl/idl.yp"
 { "\"$_[1]\"" }
        ],
-       [#Rule 81
+       [#Rule 89
                 'optional_semicolon', 0, undef
        ],
-       [#Rule 82
+       [#Rule 90
                 'optional_semicolon', 1, undef
        ]
 ],
@@ -2212,13 +2387,13 @@ sub
     bless($self,$class);
 }
 
-#line 272 "build/pidl/idl.yp"
+#line 305 "build/pidl/idl.yp"
 
 
-use util;
+use pidl::util;
 
 sub _Error {
-        if (exists $_[0]->YYData->{ERRMSG}) {
+    if (exists $_[0]->YYData->{ERRMSG}) {
                print $_[0]->YYData->{ERRMSG};
                delete $_[0]->YYData->{ERRMSG};
                return;
@@ -2271,8 +2446,8 @@ again:
                if (s/^([\w_]+)//) {
                        $parser->YYData->{LAST_TOKEN} = $1;
                        if ($1 =~ 
-                           /^(coclass|interface|const|typedef|union
-                             |struct|enum|bitmap|void|case|default)$/x) {
+                           /^(coclass|interface|const|typedef|declare|union
+                             |struct|enum|bitmap|void)$/x) {
                                return $1;
                        }
                        return('IDENTIFIER',$1);
@@ -2295,7 +2470,7 @@ sub parse_idl($$)
        if (! defined $cpp) {
                $cpp = "cpp"
        }
-       my $data = `$cpp -xc $filename`;
+       my $data = `$cpp -D__PIDL__ -xc $filename`;
        $/ = $saved_delim;
 
     $self->YYData->{INPUT} = $data;
@@ -2304,44 +2479,7 @@ sub parse_idl($$)
 
        my $idl = $self->YYParse( yylex => \&_Lexer, yyerror => \&_Error );
 
-       foreach my $x (@{$idl}) {
-               # Add [in] ORPCTHIS *this, [out] ORPCTHAT *that
-               # for 'object' interfaces
-               if (defined($x->{PROPERTIES}->{object})) {
-                       foreach my $e (@{$x->{DATA}}) {
-                               if($e->{TYPE} eq "FUNCTION") {
-                                       $e->{PROPERTIES}->{object} = 1;
-                                       unshift(@{$e->{DATA}}, 
-                        { 'NAME' => 'ORPCthis',
-                          'POINTERS' => 0,
-                          'PROPERTIES' => { 'in' => '1' },
-                          'TYPE' => 'ORPCTHIS'
-                        });
-                                       unshift(@{$e->{DATA}},
-                        { 'NAME' => 'ORPCthat',
-                          'POINTERS' => 0,
-                          'PROPERTIES' => { 'out' => '1' },
-                                                 'TYPE' => 'ORPCTHAT'
-                        });
-                               }
-                       }
-               }
-               
-               # Do the inheritance
-               if (defined($x->{BASE}) and $x->{BASE} ne "") {
-                       my $parent = util::get_interface($idl, $x->{BASE});
-
-                       if(not defined($parent)) { 
-                               die("No such parent interface " . $x->{BASE});
-                       }
-                       
-                       @{$x->{INHERITED_DATA}} = (@{$parent->{INHERITED_DATA}}, @{$x->{DATA}});
-               } else {
-                       $x->{INHERITED_DATA} = $x->{DATA};
-               }
-       }
-
-       return $idl;
+       return util::CleanData($idl);
 }
 
 1;