pidl: parse idl 'pipe' typedefs, but print out a not supported message for now
[ira/wip.git] / pidl / lib / Parse / Pidl / IDL.pm
index 06d54fb4b5f524905f79523af4a359b619112025..1a3c59d35cf40b85e142399845e5db3e167fcab3 100644 (file)
@@ -38,7 +38,7 @@ sub new {
                        "import" => 7,
                        "include" => 13
                },
-               DEFAULT => -85,
+               DEFAULT => -89,
                GOTOS => {
                        'cpp_quote' => 11,
                        'importlib' => 10,
@@ -124,7 +124,7 @@ sub new {
                }
        },
        {#State 16
-               DEFAULT => -116
+               DEFAULT => -120
        },
        {#State 17
                DEFAULT => -11
@@ -184,7 +184,7 @@ sub new {
                }
        },
        {#State 26
-               DEFAULT => -112
+               DEFAULT => -116
        },
        {#State 27
                ACTIONS => {
@@ -210,10 +210,10 @@ sub new {
                ACTIONS => {
                        "(" => 41
                },
-               DEFAULT => -89
+               DEFAULT => -93
        },
        {#State 31
-               DEFAULT => -87
+               DEFAULT => -91
        },
        {#State 32
                DEFAULT => -8
@@ -256,7 +256,7 @@ sub new {
                }
        },
        {#State 40
-               DEFAULT => -86
+               DEFAULT => -90
        },
        {#State 41
                ACTIONS => {
@@ -264,7 +264,7 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
                        'text' => 51,
@@ -284,72 +284,73 @@ sub new {
        },
        {#State 44
                ACTIONS => {
-                       "const" => 63
+                       "const" => 64
                },
-               DEFAULT => -85,
+               DEFAULT => -89,
                GOTOS => {
                        'typedecl' => 54,
                        'function' => 55,
-                       'definitions' => 57,
-                       'bitmap' => 56,
-                       'definition' => 60,
-                       'property_list' => 59,
-                       'usertype' => 58,
-                       'const' => 62,
-                       'struct' => 61,
-                       'typedef' => 65,
-                       'enum' => 64,
-                       'union' => 66
+                       'pipe' => 56,
+                       'definitions' => 58,
+                       'bitmap' => 57,
+                       'definition' => 61,
+                       'property_list' => 60,
+                       'usertype' => 59,
+                       'const' => 63,
+                       'struct' => 62,
+                       'typedef' => 66,
+                       'enum' => 65,
+                       'union' => 67
                }
        },
        {#State 45
-               DEFAULT => -88
+               DEFAULT => -92
        },
        {#State 46
                ACTIONS => {
-                       "-" => 68,
-                       ":" => 67,
-                       "<" => 70,
-                       "+" => 72,
-                       "~" => 71,
-                       "*" => 79,
-                       "?" => 69,
-                       "{" => 73,
-                       "&" => 74,
-                       "/" => 75,
-                       "=" => 76,
-                       "(" => 77,
-                       "|" => 78,
-                       "." => 80,
-                       ">" => 81
+                       "-" => 69,
+                       ":" => 68,
+                       "<" => 71,
+                       "+" => 73,
+                       "~" => 72,
+                       "*" => 80,
+                       "?" => 70,
+                       "{" => 74,
+                       "&" => 75,
+                       "/" => 76,
+                       "=" => 77,
+                       "(" => 78,
+                       "|" => 79,
+                       "." => 81,
+                       ">" => 82
                },
-               DEFAULT => -91
+               DEFAULT => -95
        },
        {#State 47
-               DEFAULT => -95
+               DEFAULT => -99
        },
        {#State 48
-               DEFAULT => -115
+               DEFAULT => -119
        },
        {#State 49
                ACTIONS => {
-                       "," => 82,
-                       ")" => 83
+                       "," => 83,
+                       ")" => 84
                }
        },
        {#State 50
-               DEFAULT => -94
+               DEFAULT => -98
        },
        {#State 51
-               DEFAULT => -96
+               DEFAULT => -100
        },
        {#State 52
                ACTIONS => {
-                       ";" => 85
+                       ";" => 86
                },
-               DEFAULT => -117,
+               DEFAULT => -121,
                GOTOS => {
-                       'optional_semicolon' => 84
+                       'optional_semicolon' => 85
                }
        },
        {#State 53
@@ -357,7 +358,7 @@ sub new {
                        'IDENTIFIER' => 26
                },
                GOTOS => {
-                       'identifier' => 86
+                       'identifier' => 87
                }
        },
        {#State 54
@@ -367,98 +368,90 @@ sub new {
                DEFAULT => -22
        },
        {#State 56
-               DEFAULT => -33
+               DEFAULT => -34
        },
        {#State 57
+               DEFAULT => -33
+       },
+       {#State 58
                ACTIONS => {
-                       "}" => 87,
-                       "const" => 63
+                       "}" => 88,
+                       "const" => 64
                },
-               DEFAULT => -85,
+               DEFAULT => -89,
                GOTOS => {
                        'typedecl' => 54,
                        'function' => 55,
-                       'bitmap' => 56,
-                       'definition' => 88,
-                       'property_list' => 59,
-                       'usertype' => 58,
-                       'struct' => 61,
-                       'const' => 62,
-                       'typedef' => 65,
-                       'enum' => 64,
-                       'union' => 66
+                       'pipe' => 56,
+                       'bitmap' => 57,
+                       'definition' => 89,
+                       'property_list' => 60,
+                       'usertype' => 59,
+                       'const' => 63,
+                       'struct' => 62,
+                       'typedef' => 66,
+                       'enum' => 65,
+                       'union' => 67
                }
        },
-       {#State 58
+       {#State 59
                ACTIONS => {
-                       ";" => 89
+                       ";" => 90
                }
        },
-       {#State 59
+       {#State 60
                ACTIONS => {
-                       "typedef" => 90,
+                       "typedef" => 91,
                        'IDENTIFIER' => 26,
-                       "signed" => 98,
-                       "union" => 91,
-                       "enum" => 100,
-                       "bitmap" => 101,
-                       'void' => 92,
-                       "unsigned" => 102,
+                       "signed" => 100,
+                       "union" => 92,
+                       "enum" => 101,
+                       "bitmap" => 102,
+                       'void' => 93,
+                       "pipe" => 103,
+                       "unsigned" => 104,
                        "[" => 20,
-                       "struct" => 97
+                       "struct" => 98
                },
                GOTOS => {
                        'existingtype' => 99,
-                       'bitmap' => 56,
-                       'usertype' => 94,
-                       'property_list' => 93,
-                       'identifier' => 95,
-                       'struct' => 61,
-                       'enum' => 64,
-                       'type' => 103,
-                       'union' => 66,
-                       'sign' => 96
+                       'pipe' => 56,
+                       'bitmap' => 57,
+                       'usertype' => 95,
+                       'property_list' => 94,
+                       'identifier' => 96,
+                       'struct' => 62,
+                       'enum' => 65,
+                       'type' => 105,
+                       'union' => 67,
+                       'sign' => 97
                }
        },
-       {#State 60
+       {#State 61
                DEFAULT => -20
        },
-       {#State 61
+       {#State 62
                DEFAULT => -30
        },
-       {#State 62
+       {#State 63
                DEFAULT => -23
        },
-       {#State 63
+       {#State 64
                ACTIONS => {
                        'IDENTIFIER' => 26
                },
                GOTOS => {
-                       'identifier' => 104
+                       'identifier' => 106
                }
        },
-       {#State 64
-               DEFAULT => -32
-       },
        {#State 65
-               DEFAULT => -24
+               DEFAULT => -32
        },
        {#State 66
-               DEFAULT => -31
+               DEFAULT => -24
        },
        {#State 67
-               ACTIONS => {
-                       'CONSTANT' => 48,
-                       'TEXT' => 16,
-                       'IDENTIFIER' => 26
-               },
-               DEFAULT => -93,
-               GOTOS => {
-                       'identifier' => 50,
-                       'anytext' => 105,
-                       'text' => 51,
-                       'constant' => 47
-               }
+               DEFAULT => -31
        },
        {#State 68
                ACTIONS => {
@@ -466,10 +459,10 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 106,
+                       'anytext' => 107,
                        'text' => 51,
                        'constant' => 47
                }
@@ -480,10 +473,10 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 107,
+                       'anytext' => 108,
                        'text' => 51,
                        'constant' => 47
                }
@@ -494,10 +487,10 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 108,
+                       'anytext' => 109,
                        'text' => 51,
                        'constant' => 47
                }
@@ -508,10 +501,10 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 109,
+                       'anytext' => 110,
                        'text' => 51,
                        'constant' => 47
                }
@@ -522,10 +515,10 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 110,
+                       'anytext' => 111,
                        'text' => 51,
                        'constant' => 47
                }
@@ -536,13 +529,12 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 46,
+                       'anytext' => 112,
                        'text' => 51,
-                       'constant' => 47,
-                       'commalisttext' => 111
+                       'constant' => 47
                }
        },
        {#State 74
@@ -551,12 +543,13 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 112,
+                       'anytext' => 46,
                        'text' => 51,
-                       'constant' => 47
+                       'constant' => 47,
+                       'commalisttext' => 113
                }
        },
        {#State 75
@@ -565,10 +558,10 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 113,
+                       'anytext' => 114,
                        'text' => 51,
                        'constant' => 47
                }
@@ -579,10 +572,10 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 114,
+                       'anytext' => 115,
                        'text' => 51,
                        'constant' => 47
                }
@@ -593,13 +586,12 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 46,
+                       'anytext' => 116,
                        'text' => 51,
-                       'constant' => 47,
-                       'commalisttext' => 115
+                       'constant' => 47
                }
        },
        {#State 78
@@ -608,12 +600,13 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 116,
+                       'anytext' => 46,
                        'text' => 51,
-                       'constant' => 47
+                       'constant' => 47,
+                       'commalisttext' => 117
                }
        },
        {#State 79
@@ -622,10 +615,10 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 117,
+                       'anytext' => 118,
                        'text' => 51,
                        'constant' => 47
                }
@@ -636,10 +629,10 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 118,
+                       'anytext' => 119,
                        'text' => 51,
                        'constant' => 47
                }
@@ -650,10 +643,10 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 119,
+                       'anytext' => 120,
                        'text' => 51,
                        'constant' => 47
                }
@@ -664,1039 +657,1101 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 120,
+                       'anytext' => 121,
                        'text' => 51,
                        'constant' => 47
                }
        },
        {#State 83
-               DEFAULT => -90
+               ACTIONS => {
+                       'CONSTANT' => 48,
+                       'TEXT' => 16,
+                       'IDENTIFIER' => 26
+               },
+               DEFAULT => -97,
+               GOTOS => {
+                       'identifier' => 50,
+                       'anytext' => 122,
+                       'text' => 51,
+                       'constant' => 47
+               }
        },
        {#State 84
-               DEFAULT => -13
+               DEFAULT => -94
        },
        {#State 85
-               DEFAULT => -118
+               DEFAULT => -13
        },
        {#State 86
+               DEFAULT => -122
+       },
+       {#State 87
                ACTIONS => {
-                       ";" => 121
+                       ";" => 123
                }
        },
-       {#State 87
+       {#State 88
                ACTIONS => {
-                       ";" => 85
+                       ";" => 86
                },
-               DEFAULT => -117,
+               DEFAULT => -121,
                GOTOS => {
-                       'optional_semicolon' => 122
+                       'optional_semicolon' => 124
                }
        },
-       {#State 88
-               DEFAULT => -21
-       },
        {#State 89
-               DEFAULT => -34
+               DEFAULT => -21
        },
        {#State 90
+               DEFAULT => -35
+       },
+       {#State 91
                ACTIONS => {
                        'IDENTIFIER' => 26,
-                       "signed" => 98,
-                       'void' => 92,
-                       "unsigned" => 102
+                       "signed" => 100,
+                       'void' => 93,
+                       "unsigned" => 104
                },
-               DEFAULT => -85,
+               DEFAULT => -89,
                GOTOS => {
                        'existingtype' => 99,
-                       'bitmap' => 56,
-                       'usertype' => 94,
-                       'property_list' => 93,
-                       'identifier' => 95,
-                       'struct' => 61,
-                       'enum' => 64,
-                       'type' => 123,
-                       'union' => 66,
-                       'sign' => 96
+                       'pipe' => 56,
+                       'bitmap' => 57,
+                       'usertype' => 95,
+                       'property_list' => 94,
+                       'identifier' => 96,
+                       'struct' => 62,
+                       'enum' => 65,
+                       'type' => 125,
+                       'union' => 67,
+                       'sign' => 97
                }
        },
-       {#State 91
+       {#State 92
                ACTIONS => {
-                       'IDENTIFIER' => 124
+                       'IDENTIFIER' => 126
                },
-               DEFAULT => -114,
+               DEFAULT => -117,
                GOTOS => {
-                       'optional_identifier' => 125
+                       'optional_identifier' => 127
                }
        },
-       {#State 92
-               DEFAULT => -41
-       },
        {#State 93
+               DEFAULT => -42
+       },
+       {#State 94
                ACTIONS => {
-                       "union" => 91,
-                       "enum" => 100,
-                       "bitmap" => 101,
+                       "pipe" => 103,
+                       "union" => 92,
+                       "enum" => 101,
+                       "bitmap" => 102,
                        "[" => 20,
-                       "struct" => 97
+                       "struct" => 98
                }
        },
-       {#State 94
-               DEFAULT => -39
-       },
        {#State 95
-               DEFAULT => -38
+               DEFAULT => -40
        },
        {#State 96
+               DEFAULT => -39
+       },
+       {#State 97
                ACTIONS => {
                        'IDENTIFIER' => 26
                },
                GOTOS => {
-                       'identifier' => 126
+                       'identifier' => 128
                }
        },
-       {#State 97
+       {#State 98
                ACTIONS => {
-                       'IDENTIFIER' => 124
+                       'IDENTIFIER' => 126
                },
-               DEFAULT => -114,
+               DEFAULT => -117,
                GOTOS => {
-                       'optional_identifier' => 127
+                       'optional_identifier' => 129
                }
        },
-       {#State 98
-               DEFAULT => -35
-       },
        {#State 99
-               DEFAULT => -40
+               DEFAULT => -41
        },
        {#State 100
+               DEFAULT => -36
+       },
+       {#State 101
                ACTIONS => {
-                       'IDENTIFIER' => 124
+                       'IDENTIFIER' => 126
                },
-               DEFAULT => -114,
+               DEFAULT => -117,
                GOTOS => {
-                       'optional_identifier' => 128
+                       'optional_identifier' => 130
                }
        },
-       {#State 101
+       {#State 102
                ACTIONS => {
-                       'IDENTIFIER' => 124
+                       'IDENTIFIER' => 126
                },
-               DEFAULT => -114,
+               DEFAULT => -117,
                GOTOS => {
-                       'optional_identifier' => 129
+                       'optional_identifier' => 131
                }
        },
-       {#State 102
-               DEFAULT => -36
-       },
        {#State 103
                ACTIONS => {
-                       'IDENTIFIER' => 26
+                       'IDENTIFIER' => 26,
+                       "signed" => 100,
+                       'void' => 93,
+                       "unsigned" => 104
                },
+               DEFAULT => -89,
                GOTOS => {
-                       'identifier' => 130
+                       'existingtype' => 99,
+                       'pipe' => 56,
+                       'bitmap' => 57,
+                       'usertype' => 95,
+                       'property_list' => 94,
+                       'identifier' => 96,
+                       'struct' => 62,
+                       'enum' => 65,
+                       'type' => 132,
+                       'union' => 67,
+                       'sign' => 97
                }
        },
        {#State 104
-               DEFAULT => -74,
-               GOTOS => {
-                       'pointers' => 131
-               }
+               DEFAULT => -37
        },
        {#State 105
                ACTIONS => {
-                       "-" => 68,
-                       ":" => 67,
-                       "<" => 70,
-                       "+" => 72,
-                       "~" => 71,
-                       "*" => 79,
-                       "?" => 69,
-                       "{" => 73,
-                       "&" => 74,
-                       "/" => 75,
-                       "=" => 76,
-                       "(" => 77,
-                       "|" => 78,
-                       "." => 80,
-                       ">" => 81
+                       'IDENTIFIER' => 26
                },
-               DEFAULT => -106
+               GOTOS => {
+                       'identifier' => 133
+               }
        },
        {#State 106
-               ACTIONS => {
-                       ":" => 67,
-                       "<" => 70,
-                       "~" => 71,
-                       "?" => 69,
-                       "{" => 73,
-                       "=" => 76
-               },
-               DEFAULT => -97
+               DEFAULT => -75,
+               GOTOS => {
+                       'pointers' => 134
+               }
        },
        {#State 107
                ACTIONS => {
-                       "-" => 68,
-                       ":" => 67,
-                       "<" => 70,
-                       "+" => 72,
-                       "~" => 71,
-                       "*" => 79,
-                       "?" => 69,
-                       "{" => 73,
-                       "&" => 74,
-                       "/" => 75,
-                       "=" => 76,
-                       "(" => 77,
-                       "|" => 78,
-                       "." => 80,
-                       ">" => 81
+                       "-" => 69,
+                       ":" => 68,
+                       "<" => 71,
+                       "+" => 73,
+                       "~" => 72,
+                       "*" => 80,
+                       "?" => 70,
+                       "{" => 74,
+                       "&" => 75,
+                       "/" => 76,
+                       "=" => 77,
+                       "(" => 78,
+                       "|" => 79,
+                       "." => 81,
+                       ">" => 82
                },
-               DEFAULT => -105
+               DEFAULT => -110
        },
        {#State 108
                ACTIONS => {
-                       "-" => 68,
-                       ":" => 67,
-                       "<" => 70,
-                       "+" => 72,
-                       "~" => 71,
-                       "*" => 79,
-                       "?" => 69,
-                       "{" => 73,
-                       "&" => 74,
-                       "/" => 75,
-                       "=" => 76,
-                       "(" => 77,
-                       "|" => 78,
-                       "." => 80,
-                       ">" => 81
+                       ":" => 68,
+                       "<" => 71,
+                       "~" => 72,
+                       "?" => 70,
+                       "{" => 74,
+                       "=" => 77
                },
                DEFAULT => -101
        },
        {#State 109
                ACTIONS => {
-                       "-" => 68,
-                       ":" => 67,
-                       "<" => 70,
-                       "+" => 72,
-                       "~" => 71,
-                       "*" => 79,
-                       "?" => 69,
-                       "{" => 73,
-                       "&" => 74,
-                       "/" => 75,
-                       "=" => 76,
-                       "(" => 77,
-                       "|" => 78,
-                       "." => 80,
-                       ">" => 81
+                       "-" => 69,
+                       ":" => 68,
+                       "<" => 71,
+                       "+" => 73,
+                       "~" => 72,
+                       "*" => 80,
+                       "?" => 70,
+                       "{" => 74,
+                       "&" => 75,
+                       "/" => 76,
+                       "=" => 77,
+                       "(" => 78,
+                       "|" => 79,
+                       "." => 81,
+                       ">" => 82
                },
                DEFAULT => -109
        },
        {#State 110
                ACTIONS => {
-                       ":" => 67,
-                       "<" => 70,
-                       "~" => 71,
-                       "?" => 69,
-                       "{" => 73,
-                       "=" => 76
+                       "-" => 69,
+                       ":" => 68,
+                       "<" => 71,
+                       "+" => 73,
+                       "~" => 72,
+                       "*" => 80,
+                       "?" => 70,
+                       "{" => 74,
+                       "&" => 75,
+                       "/" => 76,
+                       "=" => 77,
+                       "(" => 78,
+                       "|" => 79,
+                       "." => 81,
+                       ">" => 82
                },
-               DEFAULT => -108
+               DEFAULT => -105
        },
        {#State 111
                ACTIONS => {
-                       "}" => 132,
-                       "," => 82
-               }
+                       "-" => 69,
+                       ":" => 68,
+                       "<" => 71,
+                       "+" => 73,
+                       "~" => 72,
+                       "*" => 80,
+                       "?" => 70,
+                       "{" => 74,
+                       "&" => 75,
+                       "/" => 76,
+                       "=" => 77,
+                       "(" => 78,
+                       "|" => 79,
+                       "." => 81,
+                       ">" => 82
+               },
+               DEFAULT => -113
        },
        {#State 112
                ACTIONS => {
-                       ":" => 67,
-                       "<" => 70,
-                       "~" => 71,
-                       "?" => 69,
-                       "{" => 73,
-                       "=" => 76
+                       ":" => 68,
+                       "<" => 71,
+                       "~" => 72,
+                       "?" => 70,
+                       "{" => 74,
+                       "=" => 77
                },
-               DEFAULT => -103
+               DEFAULT => -112
        },
        {#State 113
                ACTIONS => {
-                       ":" => 67,
-                       "<" => 70,
-                       "~" => 71,
-                       "?" => 69,
-                       "{" => 73,
-                       "=" => 76
-               },
-               DEFAULT => -104
+                       "}" => 135,
+                       "," => 83
+               }
        },
        {#State 114
                ACTIONS => {
-                       "-" => 68,
-                       ":" => 67,
-                       "<" => 70,
-                       "+" => 72,
-                       "~" => 71,
-                       "*" => 79,
-                       "?" => 69,
-                       "{" => 73,
-                       "&" => 74,
-                       "/" => 75,
-                       "=" => 76,
-                       "(" => 77,
-                       "|" => 78,
-                       "." => 80,
-                       ">" => 81
+                       ":" => 68,
+                       "<" => 71,
+                       "~" => 72,
+                       "?" => 70,
+                       "{" => 74,
+                       "=" => 77
                },
                DEFAULT => -107
        },
        {#State 115
                ACTIONS => {
-                       "," => 82,
-                       ")" => 133
-               }
+                       ":" => 68,
+                       "<" => 71,
+                       "~" => 72,
+                       "?" => 70,
+                       "{" => 74,
+                       "=" => 77
+               },
+               DEFAULT => -108
        },
        {#State 116
                ACTIONS => {
-                       ":" => 67,
-                       "<" => 70,
-                       "~" => 71,
-                       "?" => 69,
-                       "{" => 73,
-                       "=" => 76
+                       "-" => 69,
+                       ":" => 68,
+                       "<" => 71,
+                       "+" => 73,
+                       "~" => 72,
+                       "*" => 80,
+                       "?" => 70,
+                       "{" => 74,
+                       "&" => 75,
+                       "/" => 76,
+                       "=" => 77,
+                       "(" => 78,
+                       "|" => 79,
+                       "." => 81,
+                       ">" => 82
                },
-               DEFAULT => -102
+               DEFAULT => -111
        },
        {#State 117
                ACTIONS => {
-                       ":" => 67,
-                       "<" => 70,
-                       "~" => 71,
-                       "?" => 69,
-                       "{" => 73,
-                       "=" => 76
-               },
-               DEFAULT => -99
+                       "," => 83,
+                       ")" => 136
+               }
        },
        {#State 118
                ACTIONS => {
-                       ":" => 67,
-                       "<" => 70,
-                       "~" => 71,
-                       "?" => 69,
-                       "{" => 73,
-                       "=" => 76
+                       ":" => 68,
+                       "<" => 71,
+                       "~" => 72,
+                       "?" => 70,
+                       "{" => 74,
+                       "=" => 77
                },
-               DEFAULT => -98
+               DEFAULT => -106
        },
        {#State 119
                ACTIONS => {
-                       ":" => 67,
-                       "<" => 70,
-                       "~" => 71,
-                       "?" => 69,
-                       "{" => 73,
-                       "=" => 76
+                       ":" => 68,
+                       "<" => 71,
+                       "~" => 72,
+                       "?" => 70,
+                       "{" => 74,
+                       "=" => 77
                },
-               DEFAULT => -100
+               DEFAULT => -103
        },
        {#State 120
                ACTIONS => {
-                       "-" => 68,
-                       ":" => 67,
-                       "<" => 70,
-                       "+" => 72,
-                       "~" => 71,
-                       "*" => 79,
-                       "?" => 69,
-                       "{" => 73,
-                       "&" => 74,
-                       "/" => 75,
-                       "=" => 76,
-                       "(" => 77,
-                       "|" => 78,
-                       "." => 80,
-                       ">" => 81
+                       ":" => 68,
+                       "<" => 71,
+                       "~" => 72,
+                       "?" => 70,
+                       "{" => 74,
+                       "=" => 77
                },
-               DEFAULT => -92
+               DEFAULT => -102
        },
        {#State 121
-               DEFAULT => -15
+               ACTIONS => {
+                       ":" => 68,
+                       "<" => 71,
+                       "~" => 72,
+                       "?" => 70,
+                       "{" => 74,
+                       "=" => 77
+               },
+               DEFAULT => -104
        },
        {#State 122
-               DEFAULT => -16
-       },
-       {#State 123
                ACTIONS => {
-                       'IDENTIFIER' => 26
+                       "-" => 69,
+                       ":" => 68,
+                       "<" => 71,
+                       "+" => 73,
+                       "~" => 72,
+                       "*" => 80,
+                       "?" => 70,
+                       "{" => 74,
+                       "&" => 75,
+                       "/" => 76,
+                       "=" => 77,
+                       "(" => 78,
+                       "|" => 79,
+                       "." => 81,
+                       ">" => 82
                },
-               GOTOS => {
-                       'identifier' => 134
-               }
+               DEFAULT => -96
+       },
+       {#State 123
+               DEFAULT => -15
        },
        {#State 124
-               DEFAULT => -113
+               DEFAULT => -16
        },
        {#State 125
                ACTIONS => {
-                       "{" => 136
+                       'IDENTIFIER' => 26
                },
-               DEFAULT => -70,
                GOTOS => {
-                       'union_body' => 137,
-                       'opt_union_body' => 135
+                       'identifier' => 137
                }
        },
        {#State 126
-               DEFAULT => -37
+               DEFAULT => -118
        },
        {#State 127
                ACTIONS => {
                        "{" => 139
                },
-               DEFAULT => -60,
+               DEFAULT => -71,
                GOTOS => {
-                       'struct_body' => 138,
-                       'opt_struct_body' => 140
+                       'union_body' => 140,
+                       'opt_union_body' => 138
                }
        },
        {#State 128
+               DEFAULT => -38
+       },
+       {#State 129
                ACTIONS => {
-                       "{" => 141
+                       "{" => 142
                },
-               DEFAULT => -43,
+               DEFAULT => -61,
                GOTOS => {
-                       'opt_enum_body' => 143,
-                       'enum_body' => 142
+                       'struct_body' => 141,
+                       'opt_struct_body' => 143
                }
        },
-       {#State 129
+       {#State 130
                ACTIONS => {
-                       "{" => 145
+                       "{" => 144
                },
-               DEFAULT => -51,
+               DEFAULT => -44,
                GOTOS => {
-                       'bitmap_body' => 146,
-                       'opt_bitmap_body' => 144
+                       'opt_enum_body' => 146,
+                       'enum_body' => 145
                }
        },
-       {#State 130
+       {#State 131
                ACTIONS => {
-                       "(" => 147
+                       "{" => 148
+               },
+               DEFAULT => -52,
+               GOTOS => {
+                       'bitmap_body' => 149,
+                       'opt_bitmap_body' => 147
                }
        },
-       {#State 131
+       {#State 132
+               DEFAULT => -77
+       },
+       {#State 133
+               ACTIONS => {
+                       "(" => 150
+               }
+       },
+       {#State 134
                ACTIONS => {
                        'IDENTIFIER' => 26,
-                       "*" => 149
+                       "*" => 152
                },
                GOTOS => {
-                       'identifier' => 148
+                       'identifier' => 151
                }
        },
-       {#State 132
+       {#State 135
                ACTIONS => {
                        'CONSTANT' => 48,
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 150,
+                       'anytext' => 153,
                        'text' => 51,
                        'constant' => 47
                }
        },
-       {#State 133
+       {#State 136
                ACTIONS => {
                        'CONSTANT' => 48,
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 151,
+                       'anytext' => 154,
                        'text' => 51,
                        'constant' => 47
                }
        },
-       {#State 134
+       {#State 137
                ACTIONS => {
-                       "[" => 152
+                       "[" => 155
                },
-               DEFAULT => -82,
+               DEFAULT => -86,
                GOTOS => {
-                       'array_len' => 153
+                       'array_len' => 156
                }
        },
-       {#State 135
-               DEFAULT => -72
+       {#State 138
+               DEFAULT => -73
        },
-       {#State 136
-               DEFAULT => -67,
+       {#State 139
+               DEFAULT => -68,
                GOTOS => {
-                       'union_elements' => 154
+                       'union_elements' => 157
                }
        },
-       {#State 137
-               DEFAULT => -71
+       {#State 140
+               DEFAULT => -72
        },
-       {#State 138
-               DEFAULT => -61
+       {#State 141
+               DEFAULT => -62
        },
-       {#State 139
-               DEFAULT => -76,
+       {#State 142
+               DEFAULT => -78,
                GOTOS => {
-                       'element_list1' => 155
+                       'element_list1' => 158
                }
        },
-       {#State 140
-               DEFAULT => -62
+       {#State 143
+               DEFAULT => -63
        },
-       {#State 141
+       {#State 144
                ACTIONS => {
                        'IDENTIFIER' => 26
                },
                GOTOS => {
-                       'identifier' => 156,
-                       'enum_element' => 157,
-                       'enum_elements' => 158
+                       'identifier' => 159,
+                       'enum_element' => 160,
+                       'enum_elements' => 161
                }
        },
-       {#State 142
-               DEFAULT => -44
-       },
-       {#State 143
+       {#State 145
                DEFAULT => -45
        },
-       {#State 144
-               DEFAULT => -53
+       {#State 146
+               DEFAULT => -46
        },
-       {#State 145
+       {#State 147
+               DEFAULT => -54
+       },
+       {#State 148
                ACTIONS => {
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -56,
+               DEFAULT => -57,
                GOTOS => {
-                       'identifier' => 161,
-                       'bitmap_element' => 160,
-                       'bitmap_elements' => 159,
-                       'opt_bitmap_elements' => 162
+                       'identifier' => 164,
+                       'bitmap_element' => 163,
+                       'bitmap_elements' => 162,
+                       'opt_bitmap_elements' => 165
                }
        },
-       {#State 146
-               DEFAULT => -52
+       {#State 149
+               DEFAULT => -53
        },
-       {#State 147
+       {#State 150
                ACTIONS => {
-                       "," => -78,
-                       "void" => 166,
-                       ")" => -78
+                       "," => -82,
+                       "void" => 169,
+                       "const" => 167,
+                       ")" => -82
                },
-               DEFAULT => -85,
+               DEFAULT => -80,
                GOTOS => {
-                       'base_element' => 163,
-                       'element_list2' => 165,
-                       'property_list' => 164
+                       'optional_const' => 166,
+                       'element_list2' => 168
                }
        },
-       {#State 148
+       {#State 151
                ACTIONS => {
-                       "[" => 152,
-                       "=" => 168
+                       "[" => 155,
+                       "=" => 171
                },
                GOTOS => {
-                       'array_len' => 167
+                       'array_len' => 170
                }
        },
-       {#State 149
-               DEFAULT => -75
+       {#State 152
+               DEFAULT => -76
        },
-       {#State 150
+       {#State 153
                ACTIONS => {
-                       "-" => 68,
-                       ":" => 67,
-                       "<" => 70,
-                       "+" => 72,
-                       "~" => 71,
-                       "*" => 79,
-                       "?" => 69,
-                       "{" => 73,
-                       "&" => 74,
-                       "/" => 75,
-                       "=" => 76,
-                       "(" => 77,
-                       "|" => 78,
-                       "." => 80,
-                       ">" => 81
+                       "-" => 69,
+                       ":" => 68,
+                       "<" => 71,
+                       "+" => 73,
+                       "~" => 72,
+                       "*" => 80,
+                       "?" => 70,
+                       "{" => 74,
+                       "&" => 75,
+                       "/" => 76,
+                       "=" => 77,
+                       "(" => 78,
+                       "|" => 79,
+                       "." => 81,
+                       ">" => 82
                },
-               DEFAULT => -111
+               DEFAULT => -115
        },
-       {#State 151
+       {#State 154
                ACTIONS => {
-                       ":" => 67,
-                       "<" => 70,
-                       "~" => 71,
-                       "?" => 69,
-                       "{" => 73,
-                       "=" => 76
+                       ":" => 68,
+                       "<" => 71,
+                       "~" => 72,
+                       "?" => 70,
+                       "{" => 74,
+                       "=" => 77
                },
-               DEFAULT => -110
+               DEFAULT => -114
        },
-       {#State 152
+       {#State 155
                ACTIONS => {
                        'CONSTANT' => 48,
                        'TEXT' => 16,
-                       "]" => 169,
+                       "]" => 172,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 170,
+                       'anytext' => 173,
                        'text' => 51,
                        'constant' => 47
                }
        },
-       {#State 153
-               ACTIONS => {
-                       ";" => 171
-               }
-       },
-       {#State 154
+       {#State 156
                ACTIONS => {
-                       "}" => 172
-               },
-               DEFAULT => -85,
-               GOTOS => {
-                       'optional_base_element' => 174,
-                       'property_list' => 173
+                       ";" => 174
                }
        },
-       {#State 155
+       {#State 157
                ACTIONS => {
                        "}" => 175
                },
-               DEFAULT => -85,
+               DEFAULT => -89,
                GOTOS => {
-                       'base_element' => 176,
-                       'property_list' => 164
+                       'optional_base_element' => 177,
+                       'property_list' => 176
                }
        },
-       {#State 156
-               ACTIONS => {
-                       "=" => 177
-               },
-               DEFAULT => -48
-       },
-       {#State 157
-               DEFAULT => -46
-       },
        {#State 158
                ACTIONS => {
-                       "}" => 178,
-                       "," => 179
+                       "}" => 178
+               },
+               DEFAULT => -89,
+               GOTOS => {
+                       'base_element' => 179,
+                       'property_list' => 180
                }
        },
        {#State 159
                ACTIONS => {
-                       "," => 180
+                       "=" => 181
                },
-               DEFAULT => -57
+               DEFAULT => -49
        },
        {#State 160
-               DEFAULT => -54
+               DEFAULT => -47
        },
        {#State 161
                ACTIONS => {
-                       "=" => 181
+                       "}" => 182,
+                       "," => 183
                }
        },
        {#State 162
                ACTIONS => {
-                       "}" => 182
-               }
+                       "," => 184
+               },
+               DEFAULT => -58
        },
        {#State 163
-               DEFAULT => -80
+               DEFAULT => -55
        },
        {#State 164
                ACTIONS => {
-                       'IDENTIFIER' => 26,
-                       "signed" => 98,
-                       'void' => 92,
-                       "unsigned" => 102,
-                       "[" => 20
-               },
-               DEFAULT => -85,
-               GOTOS => {
-                       'existingtype' => 99,
-                       'bitmap' => 56,
-                       'usertype' => 94,
-                       'property_list' => 93,
-                       'identifier' => 95,
-                       'struct' => 61,
-                       'enum' => 64,
-                       'type' => 183,
-                       'union' => 66,
-                       'sign' => 96
+                       "=" => 185
                }
        },
        {#State 165
                ACTIONS => {
-                       "," => 184,
-                       ")" => 185
+                       "}" => 186
                }
        },
        {#State 166
-               DEFAULT => -79
+               DEFAULT => -89,
+               GOTOS => {
+                       'base_element' => 187,
+                       'property_list' => 180
+               }
        },
        {#State 167
+               DEFAULT => -81
+       },
+       {#State 168
                ACTIONS => {
-                       "=" => 186
+                       "," => 188,
+                       ")" => 189
                }
        },
-       {#State 168
+       {#State 169
+               DEFAULT => -83
+       },
+       {#State 170
+               ACTIONS => {
+                       "=" => 190
+               }
+       },
+       {#State 171
                ACTIONS => {
                        'CONSTANT' => 48,
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 187,
+                       'anytext' => 191,
                        'text' => 51,
                        'constant' => 47
                }
        },
-       {#State 169
+       {#State 172
                ACTIONS => {
-                       "[" => 152
+                       "[" => 155
                },
-               DEFAULT => -82,
+               DEFAULT => -86,
                GOTOS => {
-                       'array_len' => 188
+                       'array_len' => 192
                }
        },
-       {#State 170
+       {#State 173
                ACTIONS => {
-                       "-" => 68,
-                       ":" => 67,
-                       "?" => 69,
-                       "<" => 70,
-                       "+" => 72,
-                       "~" => 71,
-                       "&" => 74,
-                       "{" => 73,
-                       "/" => 75,
-                       "=" => 76,
-                       "|" => 78,
-                       "(" => 77,
-                       "*" => 79,
-                       "." => 80,
-                       "]" => 189,
-                       ">" => 81
+                       "-" => 69,
+                       ":" => 68,
+                       "?" => 70,
+                       "<" => 71,
+                       "+" => 73,
+                       "~" => 72,
+                       "&" => 75,
+                       "{" => 74,
+                       "/" => 76,
+                       "=" => 77,
+                       "|" => 79,
+                       "(" => 78,
+                       "*" => 80,
+                       "." => 81,
+                       "]" => 193,
+                       ">" => 82
                }
        },
-       {#State 171
+       {#State 174
                DEFAULT => -29
        },
-       {#State 172
-               DEFAULT => -69
+       {#State 175
+               DEFAULT => -70
        },
-       {#State 173
+       {#State 176
                ACTIONS => {
                        "[" => 20
                },
-               DEFAULT => -85,
+               DEFAULT => -89,
                GOTOS => {
-                       'base_or_empty' => 190,
-                       'base_element' => 191,
-                       'empty_element' => 192,
-                       'property_list' => 193
+                       'base_or_empty' => 194,
+                       'base_element' => 195,
+                       'empty_element' => 196,
+                       'property_list' => 197
                }
        },
-       {#State 174
-               DEFAULT => -68
+       {#State 177
+               DEFAULT => -69
        },
-       {#State 175
-               DEFAULT => -59
+       {#State 178
+               DEFAULT => -60
        },
-       {#State 176
+       {#State 179
                ACTIONS => {
-                       ";" => 194
+                       ";" => 198
                }
        },
-       {#State 177
+       {#State 180
+               ACTIONS => {
+                       'IDENTIFIER' => 26,
+                       "signed" => 100,
+                       'void' => 93,
+                       "unsigned" => 104,
+                       "[" => 20
+               },
+               DEFAULT => -89,
+               GOTOS => {
+                       'existingtype' => 99,
+                       'pipe' => 56,
+                       'bitmap' => 57,
+                       'usertype' => 95,
+                       'property_list' => 94,
+                       'identifier' => 96,
+                       'struct' => 62,
+                       'enum' => 65,
+                       'type' => 199,
+                       'union' => 67,
+                       'sign' => 97
+               }
+       },
+       {#State 181
                ACTIONS => {
                        'CONSTANT' => 48,
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 195,
+                       'anytext' => 200,
                        'text' => 51,
                        'constant' => 47
                }
        },
-       {#State 178
-               DEFAULT => -42
+       {#State 182
+               DEFAULT => -43
        },
-       {#State 179
+       {#State 183
                ACTIONS => {
                        'IDENTIFIER' => 26
                },
                GOTOS => {
-                       'identifier' => 156,
-                       'enum_element' => 196
+                       'identifier' => 159,
+                       'enum_element' => 201
                }
        },
-       {#State 180
+       {#State 184
                ACTIONS => {
                        'IDENTIFIER' => 26
                },
                GOTOS => {
-                       'identifier' => 161,
-                       'bitmap_element' => 197
+                       'identifier' => 164,
+                       'bitmap_element' => 202
                }
        },
-       {#State 181
+       {#State 185
                ACTIONS => {
                        'CONSTANT' => 48,
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 198,
+                       'anytext' => 203,
                        'text' => 51,
                        'constant' => 47
                }
        },
-       {#State 182
-               DEFAULT => -50
+       {#State 186
+               DEFAULT => -51
        },
-       {#State 183
-               DEFAULT => -74,
-               GOTOS => {
-                       'pointers' => 199
-               }
+       {#State 187
+               DEFAULT => -84
        },
-       {#State 184
-               DEFAULT => -85,
+       {#State 188
+               ACTIONS => {
+                       "const" => 167
+               },
+               DEFAULT => -80,
                GOTOS => {
-                       'base_element' => 200,
-                       'property_list' => 164
+                       'optional_const' => 204
                }
        },
-       {#State 185
+       {#State 189
                ACTIONS => {
-                       ";" => 201
+                       ";" => 205
                }
        },
-       {#State 186
+       {#State 190
                ACTIONS => {
                        'CONSTANT' => 48,
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 202,
+                       'anytext' => 206,
                        'text' => 51,
                        'constant' => 47
                }
        },
-       {#State 187
+       {#State 191
                ACTIONS => {
-                       "-" => 68,
-                       ":" => 67,
-                       "?" => 69,
-                       "<" => 70,
-                       ";" => 203,
-                       "+" => 72,
-                       "~" => 71,
-                       "&" => 74,
-                       "{" => 73,
-                       "/" => 75,
-                       "=" => 76,
-                       "|" => 78,
-                       "(" => 77,
-                       "*" => 79,
-                       "." => 80,
-                       ">" => 81
+                       "-" => 69,
+                       ":" => 68,
+                       "?" => 70,
+                       "<" => 71,
+                       ";" => 207,
+                       "+" => 73,
+                       "~" => 72,
+                       "&" => 75,
+                       "{" => 74,
+                       "/" => 76,
+                       "=" => 77,
+                       "|" => 79,
+                       "(" => 78,
+                       "*" => 80,
+                       "." => 81,
+                       ">" => 82
                }
        },
-       {#State 188
-               DEFAULT => -83
+       {#State 192
+               DEFAULT => -87
        },
-       {#State 189
+       {#State 193
                ACTIONS => {
-                       "[" => 152
+                       "[" => 155
                },
-               DEFAULT => -82,
+               DEFAULT => -86,
                GOTOS => {
-                       'array_len' => 204
+                       'array_len' => 208
                }
        },
-       {#State 190
-               DEFAULT => -66
+       {#State 194
+               DEFAULT => -67
        },
-       {#State 191
+       {#State 195
                ACTIONS => {
-                       ";" => 205
+                       ";" => 209
                }
        },
-       {#State 192
-               DEFAULT => -65
+       {#State 196
+               DEFAULT => -66
        },
-       {#State 193
+       {#State 197
                ACTIONS => {
                        'IDENTIFIER' => 26,
-                       "signed" => 98,
-                       ";" => 206,
-                       'void' => 92,
-                       "unsigned" => 102,
+                       "signed" => 100,
+                       ";" => 210,
+                       'void' => 93,
+                       "unsigned" => 104,
                        "[" => 20
                },
-               DEFAULT => -85,
+               DEFAULT => -89,
                GOTOS => {
                        'existingtype' => 99,
-                       'bitmap' => 56,
-                       'usertype' => 94,
-                       'property_list' => 93,
-                       'identifier' => 95,
-                       'struct' => 61,
-                       'enum' => 64,
-                       'type' => 183,
-                       'union' => 66,
-                       'sign' => 96
+                       'pipe' => 56,
+                       'bitmap' => 57,
+                       'usertype' => 95,
+                       'property_list' => 94,
+                       'identifier' => 96,
+                       'struct' => 62,
+                       'enum' => 65,
+                       'type' => 199,
+                       'union' => 67,
+                       'sign' => 97
                }
        },
-       {#State 194
-               DEFAULT => -77
+       {#State 198
+               DEFAULT => -79
        },
-       {#State 195
+       {#State 199
+               DEFAULT => -75,
+               GOTOS => {
+                       'pointers' => 211
+               }
+       },
+       {#State 200
                ACTIONS => {
-                       "-" => 68,
-                       ":" => 67,
-                       "<" => 70,
-                       "+" => 72,
-                       "~" => 71,
-                       "*" => 79,
-                       "?" => 69,
-                       "{" => 73,
-                       "&" => 74,
-                       "/" => 75,
-                       "=" => 76,
-                       "(" => 77,
-                       "|" => 78,
-                       "." => 80,
-                       ">" => 81
+                       "-" => 69,
+                       ":" => 68,
+                       "<" => 71,
+                       "+" => 73,
+                       "~" => 72,
+                       "*" => 80,
+                       "?" => 70,
+                       "{" => 74,
+                       "&" => 75,
+                       "/" => 76,
+                       "=" => 77,
+                       "(" => 78,
+                       "|" => 79,
+                       "." => 81,
+                       ">" => 82
                },
-               DEFAULT => -49
+               DEFAULT => -50
        },
-       {#State 196
-               DEFAULT => -47
+       {#State 201
+               DEFAULT => -48
        },
-       {#State 197
-               DEFAULT => -55
+       {#State 202
+               DEFAULT => -56
        },
-       {#State 198
+       {#State 203
                ACTIONS => {
-                       "-" => 68,
-                       ":" => 67,
-                       "<" => 70,
-                       "+" => 72,
-                       "~" => 71,
-                       "*" => 79,
-                       "?" => 69,
-                       "{" => 73,
-                       "&" => 74,
-                       "/" => 75,
-                       "=" => 76,
-                       "(" => 77,
-                       "|" => 78,
-                       "." => 80,
-                       ">" => 81
+                       "-" => 69,
+                       ":" => 68,
+                       "<" => 71,
+                       "+" => 73,
+                       "~" => 72,
+                       "*" => 80,
+                       "?" => 70,
+                       "{" => 74,
+                       "&" => 75,
+                       "/" => 76,
+                       "=" => 77,
+                       "(" => 78,
+                       "|" => 79,
+                       "." => 81,
+                       ">" => 82
                },
-               DEFAULT => -58
+               DEFAULT => -59
        },
-       {#State 199
-               ACTIONS => {
-                       'IDENTIFIER' => 26,
-                       "*" => 149
-               },
+       {#State 204
+               DEFAULT => -89,
                GOTOS => {
-                       'identifier' => 207
+                       'base_element' => 212,
+                       'property_list' => 180
                }
        },
-       {#State 200
-               DEFAULT => -81
-       },
-       {#State 201
+       {#State 205
                DEFAULT => -28
        },
-       {#State 202
+       {#State 206
                ACTIONS => {
-                       "-" => 68,
-                       ":" => 67,
-                       "?" => 69,
-                       "<" => 70,
-                       ";" => 208,
-                       "+" => 72,
-                       "~" => 71,
-                       "&" => 74,
-                       "{" => 73,
-                       "/" => 75,
-                       "=" => 76,
-                       "|" => 78,
-                       "(" => 77,
-                       "*" => 79,
-                       "." => 80,
-                       ">" => 81
+                       "-" => 69,
+                       ":" => 68,
+                       "?" => 70,
+                       "<" => 71,
+                       ";" => 213,
+                       "+" => 73,
+                       "~" => 72,
+                       "&" => 75,
+                       "{" => 74,
+                       "/" => 76,
+                       "=" => 77,
+                       "|" => 79,
+                       "(" => 78,
+                       "*" => 80,
+                       "." => 81,
+                       ">" => 82
                }
        },
-       {#State 203
+       {#State 207
                DEFAULT => -26
        },
-       {#State 204
-               DEFAULT => -84
+       {#State 208
+               DEFAULT => -88
        },
-       {#State 205
-               DEFAULT => -64
+       {#State 209
+               DEFAULT => -65
        },
-       {#State 206
-               DEFAULT => -63
+       {#State 210
+               DEFAULT => -64
        },
-       {#State 207
+       {#State 211
                ACTIONS => {
-                       "[" => 152
+                       'IDENTIFIER' => 26,
+                       "*" => 152
                },
-               DEFAULT => -82,
                GOTOS => {
-                       'array_len' => 209
+                       'identifier' => 214
                }
        },
-       {#State 208
+       {#State 212
+               DEFAULT => -85
+       },
+       {#State 213
                DEFAULT => -27
        },
-       {#State 209
-               DEFAULT => -73
+       {#State 214
+               ACTIONS => {
+                       "[" => 155
+               },
+               DEFAULT => -86,
+               GOTOS => {
+                       'array_len' => 215
+               }
+       },
+       {#State 215
+               DEFAULT => -74
        }
 ],
                                   yyrules  =>
@@ -1710,96 +1765,96 @@ sub new {
        [#Rule 2
                 'idl', 2,
 sub
-#line 19 "pidl/idl.yp"
+#line 20 "./../pidl/idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 3
                 'idl', 2,
 sub
-#line 20 "pidl/idl.yp"
+#line 22 "./../pidl/idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 4
                 'idl', 2,
 sub
-#line 21 "pidl/idl.yp"
+#line 24 "./../pidl/idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 5
                 'idl', 2,
 sub
-#line 22 "pidl/idl.yp"
+#line 26 "./../pidl/idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 6
                 'idl', 2,
 sub
-#line 23 "pidl/idl.yp"
+#line 28 "./../pidl/idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 7
                 'idl', 2,
 sub
-#line 24 "pidl/idl.yp"
+#line 30 "./../pidl/idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 8
                 'import', 3,
 sub
-#line 27 "pidl/idl.yp"
+#line 35 "./../pidl/idl.yp"
 {{
-                       "TYPE" => "IMPORT", 
-                       "PATHS" => $_[2],
-                  "FILE" => $_[0]->YYData->{FILE},
-                  "LINE" => $_[0]->YYData->{LINE}
-               }}
+               "TYPE" => "IMPORT",
+               "PATHS" => $_[2],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
        ],
        [#Rule 9
                 'include', 3,
 sub
-#line 34 "pidl/idl.yp"
-{{ 
-                       "TYPE" => "INCLUDE", 
-                       "PATHS" => $_[2],
-                  "FILE" => $_[0]->YYData->{FILE},
-                  "LINE" => $_[0]->YYData->{LINE}
-               }}
+#line 45 "./../pidl/idl.yp"
+{{
+               "TYPE" => "INCLUDE",
+               "PATHS" => $_[2],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
        ],
        [#Rule 10
                 'importlib', 3,
 sub
-#line 41 "pidl/idl.yp"
-{{ 
-                       "TYPE" => "IMPORTLIB", 
-                       "PATHS" => $_[2],
-                  "FILE" => $_[0]->YYData->{FILE},
-                  "LINE" => $_[0]->YYData->{LINE}
-               }}
+#line 55 "./../pidl/idl.yp"
+{{
+               "TYPE" => "IMPORTLIB",
+               "PATHS" => $_[2],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
        ],
        [#Rule 11
                 'commalist', 1,
 sub
-#line 50 "pidl/idl.yp"
+#line 64 "./../pidl/idl.yp"
 { [ $_[1] ] }
        ],
        [#Rule 12
                 'commalist', 3,
 sub
-#line 51 "pidl/idl.yp"
+#line 66 "./../pidl/idl.yp"
 { push(@{$_[1]}, $_[3]); $_[1] }
        ],
        [#Rule 13
                 'coclass', 7,
 sub
-#line 55 "pidl/idl.yp"
+#line 71 "./../pidl/idl.yp"
 {{
-               "TYPE" => "COCLASS", 
-              "PROPERTIES" => $_[1],
-              "NAME" => $_[3],
-              "DATA" => $_[5],
-                  "FILE" => $_[0]->YYData->{FILE},
-                  "LINE" => $_[0]->YYData->{LINE},
-          }}
+               "TYPE" => "COCLASS",
+               "PROPERTIES" => $_[1],
+               "NAME" => $_[3],
+               "DATA" => $_[5],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
        ],
        [#Rule 14
                 'interface_names', 0, undef
@@ -1807,22 +1862,22 @@ sub
        [#Rule 15
                 'interface_names', 4,
 sub
-#line 67 "pidl/idl.yp"
+#line 84 "./../pidl/idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 16
                 'interface', 8,
 sub
-#line 71 "pidl/idl.yp"
+#line 89 "./../pidl/idl.yp"
 {{
-               "TYPE" => "INTERFACE", 
-              "PROPERTIES" => $_[1],
-              "NAME" => $_[3],
-                  "BASE" => $_[4],
-              "DATA" => $_[6],
-                  "FILE" => $_[0]->YYData->{FILE},
-                  "LINE" => $_[0]->YYData->{LINE},
-          }}
+               "TYPE" => "INTERFACE",
+               "PROPERTIES" => $_[1],
+               "NAME" => $_[3],
+               "BASE" => $_[4],
+               "DATA" => $_[6],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
        ],
        [#Rule 17
                 'base_interface', 0, undef
@@ -1830,30 +1885,30 @@ sub
        [#Rule 18
                 'base_interface', 2,
 sub
-#line 84 "pidl/idl.yp"
+#line 103 "./../pidl/idl.yp"
 { $_[2] }
        ],
        [#Rule 19
                 'cpp_quote', 4,
 sub
-#line 89 "pidl/idl.yp"
+#line 109 "./../pidl/idl.yp"
 {{
                 "TYPE" => "CPP_QUOTE",
+                "DATA" => $_[3],
                 "FILE" => $_[0]->YYData->{FILE},
                 "LINE" => $_[0]->YYData->{LINE},
-                "DATA" => $_[3]
        }}
        ],
        [#Rule 20
                 'definitions', 1,
 sub
-#line 98 "pidl/idl.yp"
+#line 118 "./../pidl/idl.yp"
 { [ $_[1] ] }
        ],
        [#Rule 21
                 'definitions', 2,
 sub
-#line 99 "pidl/idl.yp"
+#line 120 "./../pidl/idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 22
@@ -1871,36 +1926,36 @@ sub
        [#Rule 26
                 'const', 7,
 sub
-#line 107 "pidl/idl.yp"
+#line 135 "./../pidl/idl.yp"
 {{
-                     "TYPE"  => "CONST", 
-                    "DTYPE"  => $_[2],
-                        "POINTERS" => $_[3],
-                    "NAME"  => $_[4],
-                    "VALUE" => $_[6],
-                    "FILE" => $_[0]->YYData->{FILE},
-                    "LINE" => $_[0]->YYData->{LINE},
-        }}
+               "TYPE"  => "CONST",
+               "DTYPE"  => $_[2],
+               "POINTERS" => $_[3],
+               "NAME"  => $_[4],
+               "VALUE" => $_[6],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
        ],
        [#Rule 27
                 'const', 8,
 sub
-#line 117 "pidl/idl.yp"
+#line 146 "./../pidl/idl.yp"
 {{
-                     "TYPE"  => "CONST", 
-                    "DTYPE"  => $_[2],
-                        "POINTERS" => $_[3],
-                    "NAME"  => $_[4],
-                    "ARRAY_LEN" => $_[5],
-                    "VALUE" => $_[7],
-                    "FILE" => $_[0]->YYData->{FILE},
-                    "LINE" => $_[0]->YYData->{LINE},
-        }}
+               "TYPE"  => "CONST",
+               "DTYPE"  => $_[2],
+               "POINTERS" => $_[3],
+               "NAME"  => $_[4],
+               "ARRAY_LEN" => $_[5],
+               "VALUE" => $_[7],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
        ],
        [#Rule 28
                 'function', 7,
 sub
-#line 131 "pidl/idl.yp"
+#line 160 "./../pidl/idl.yp"
 {{
                "TYPE" => "FUNCTION",
                "NAME" => $_[3],
@@ -1909,20 +1964,20 @@ sub
                "ELEMENTS" => $_[5],
                "FILE" => $_[0]->YYData->{FILE},
                "LINE" => $_[0]->YYData->{LINE},
-         }}
+       }}
        ],
        [#Rule 29
                 'typedef', 6,
 sub
-#line 143 "pidl/idl.yp"
+#line 173 "./../pidl/idl.yp"
 {{
-                    "TYPE" => "TYPEDEF", 
-                     "PROPERTIES" => $_[1],
-                    "NAME" => $_[4],
-                    "DATA" => $_[3],
-                    "ARRAY_LEN" => $_[5],
-                    "FILE" => $_[0]->YYData->{FILE},
-                    "LINE" => $_[0]->YYData->{LINE},
+               "TYPE" => "TYPEDEF",
+               "PROPERTIES" => $_[1],
+               "NAME" => $_[4],
+               "DATA" => $_[3],
+               "ARRAY_LEN" => $_[5],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
         }}
        ],
        [#Rule 30
@@ -1938,450 +1993,480 @@ sub
                 'usertype', 1, undef
        ],
        [#Rule 34
+                'usertype', 1, undef
+       ],
+       [#Rule 35
                 'typedecl', 2,
 sub
-#line 156 "pidl/idl.yp"
+#line 197 "./../pidl/idl.yp"
 { $_[1] }
        ],
-       [#Rule 35
-                'sign', 1, undef
-       ],
        [#Rule 36
                 'sign', 1, undef
        ],
        [#Rule 37
+                'sign', 1, undef
+       ],
+       [#Rule 38
                 'existingtype', 2,
 sub
-#line 161 "pidl/idl.yp"
+#line 207 "./../pidl/idl.yp"
 { ($_[1]?$_[1]:"signed") ." $_[2]" }
        ],
-       [#Rule 38
-                'existingtype', 1, undef
-       ],
        [#Rule 39
-                'type', 1, undef
+                'existingtype', 1, undef
        ],
        [#Rule 40
                 'type', 1, undef
        ],
        [#Rule 41
+                'type', 1, undef
+       ],
+       [#Rule 42
                 'type', 1,
 sub
-#line 165 "pidl/idl.yp"
+#line 217 "./../pidl/idl.yp"
 { "void" }
        ],
-       [#Rule 42
+       [#Rule 43
                 'enum_body', 3,
 sub
-#line 167 "pidl/idl.yp"
+#line 221 "./../pidl/idl.yp"
 { $_[2] }
        ],
-       [#Rule 43
+       [#Rule 44
                 'opt_enum_body', 0, undef
        ],
-       [#Rule 44
+       [#Rule 45
                 'opt_enum_body', 1, undef
        ],
-       [#Rule 45
+       [#Rule 46
                 'enum', 4,
 sub
-#line 170 "pidl/idl.yp"
+#line 232 "./../pidl/idl.yp"
 {{
-             "TYPE" => "ENUM", 
-                        "PROPERTIES" => $_[1],
-                        "NAME" => $_[3],
-                    "ELEMENTS" => $_[4]
-        }}
+               "TYPE" => "ENUM",
+               "PROPERTIES" => $_[1],
+               "NAME" => $_[3],
+               "ELEMENTS" => $_[4],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
        ],
-       [#Rule 46
+       [#Rule 47
                 'enum_elements', 1,
 sub
-#line 179 "pidl/idl.yp"
+#line 243 "./../pidl/idl.yp"
 { [ $_[1] ] }
        ],
-       [#Rule 47
+       [#Rule 48
                 'enum_elements', 3,
 sub
-#line 180 "pidl/idl.yp"
+#line 245 "./../pidl/idl.yp"
 { push(@{$_[1]}, $_[3]); $_[1] }
        ],
-       [#Rule 48
+       [#Rule 49
                 'enum_element', 1, undef
        ],
-       [#Rule 49
+       [#Rule 50
                 'enum_element', 3,
 sub
-#line 184 "pidl/idl.yp"
+#line 251 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 50
+       [#Rule 51
                 'bitmap_body', 3,
 sub
-#line 187 "pidl/idl.yp"
+#line 255 "./../pidl/idl.yp"
 { $_[2] }
        ],
-       [#Rule 51
+       [#Rule 52
                 'opt_bitmap_body', 0, undef
        ],
-       [#Rule 52
+       [#Rule 53
                 'opt_bitmap_body', 1, undef
        ],
-       [#Rule 53
+       [#Rule 54
                 'bitmap', 4,
 sub
-#line 190 "pidl/idl.yp"
+#line 266 "./../pidl/idl.yp"
 {{
-             "TYPE" => "BITMAP", 
-                    "PROPERTIES" => $_[1],
-                        "NAME" => $_[3],
-                    "ELEMENTS" => $_[4]
-        }}
+               "TYPE" => "BITMAP",
+               "PROPERTIES" => $_[1],
+               "NAME" => $_[3],
+               "ELEMENTS" => $_[4],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
        ],
-       [#Rule 54
+       [#Rule 55
                 'bitmap_elements', 1,
 sub
-#line 199 "pidl/idl.yp"
+#line 277 "./../pidl/idl.yp"
 { [ $_[1] ] }
        ],
-       [#Rule 55
+       [#Rule 56
                 'bitmap_elements', 3,
 sub
-#line 200 "pidl/idl.yp"
+#line 279 "./../pidl/idl.yp"
 { push(@{$_[1]}, $_[3]); $_[1] }
        ],
-       [#Rule 56
+       [#Rule 57
                 'opt_bitmap_elements', 0, undef
        ],
-       [#Rule 57
+       [#Rule 58
                 'opt_bitmap_elements', 1, undef
        ],
-       [#Rule 58
+       [#Rule 59
                 'bitmap_element', 3,
 sub
-#line 205 "pidl/idl.yp"
+#line 289 "./../pidl/idl.yp"
 { "$_[1] ( $_[3] )" }
        ],
-       [#Rule 59
+       [#Rule 60
                 'struct_body', 3,
 sub
-#line 208 "pidl/idl.yp"
+#line 293 "./../pidl/idl.yp"
 { $_[2] }
        ],
-       [#Rule 60
+       [#Rule 61
                 'opt_struct_body', 0, undef
        ],
-       [#Rule 61
+       [#Rule 62
                 'opt_struct_body', 1, undef
        ],
-       [#Rule 62
+       [#Rule 63
                 'struct', 4,
 sub
-#line 212 "pidl/idl.yp"
+#line 304 "./../pidl/idl.yp"
 {{
-             "TYPE" => "STRUCT", 
-                        "PROPERTIES" => $_[1],
-                        "NAME" => $_[3],
-                    "ELEMENTS" => $_[4]
-        }}
+               "TYPE" => "STRUCT",
+               "PROPERTIES" => $_[1],
+               "NAME" => $_[3],
+               "ELEMENTS" => $_[4],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
        ],
-       [#Rule 63
+       [#Rule 64
                 'empty_element', 2,
 sub
-#line 221 "pidl/idl.yp"
+#line 316 "./../pidl/idl.yp"
 {{
-                "NAME" => "",
-                "TYPE" => "EMPTY",
-                "PROPERTIES" => $_[1],
-                "POINTERS" => 0,
-                "ARRAY_LEN" => [],
-                "FILE" => $_[0]->YYData->{FILE},
-                "LINE" => $_[0]->YYData->{LINE},
-        }}
+               "NAME" => "",
+               "TYPE" => "EMPTY",
+               "PROPERTIES" => $_[1],
+               "POINTERS" => 0,
+               "ARRAY_LEN" => [],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
        ],
-       [#Rule 64
+       [#Rule 65
                 'base_or_empty', 2, undef
        ],
-       [#Rule 65
+       [#Rule 66
                 'base_or_empty', 1, undef
        ],
-       [#Rule 66
+       [#Rule 67
                 'optional_base_element', 2,
 sub
-#line 235 "pidl/idl.yp"
+#line 333 "./../pidl/idl.yp"
 { $_[2]->{PROPERTIES} = FlattenHash([$_[1],$_[2]->{PROPERTIES}]); $_[2] }
        ],
-       [#Rule 67
+       [#Rule 68
                 'union_elements', 0, undef
        ],
-       [#Rule 68
+       [#Rule 69
                 'union_elements', 2,
 sub
-#line 240 "pidl/idl.yp"
+#line 339 "./../pidl/idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
-       [#Rule 69
+       [#Rule 70
                 'union_body', 3,
 sub
-#line 243 "pidl/idl.yp"
+#line 343 "./../pidl/idl.yp"
 { $_[2] }
        ],
-       [#Rule 70
+       [#Rule 71
                 'opt_union_body', 0, undef
        ],
-       [#Rule 71
+       [#Rule 72
                 'opt_union_body', 1, undef
        ],
-       [#Rule 72
+       [#Rule 73
                 'union', 4,
 sub
-#line 247 "pidl/idl.yp"
+#line 354 "./../pidl/idl.yp"
 {{
-             "TYPE" => "UNION", 
-                        "PROPERTIES" => $_[1],
-                    "NAME" => $_[3],
-                    "ELEMENTS" => $_[4]
-        }}
+               "TYPE" => "UNION",
+               "PROPERTIES" => $_[1],
+               "NAME" => $_[3],
+               "ELEMENTS" => $_[4],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
        ],
-       [#Rule 73
+       [#Rule 74
                 'base_element', 5,
 sub
-#line 256 "pidl/idl.yp"
+#line 366 "./../pidl/idl.yp"
 {{
-                          "NAME" => $_[4],
-                          "TYPE" => $_[2],
-                          "PROPERTIES" => $_[1],
-                          "POINTERS" => $_[3],
-                          "ARRAY_LEN" => $_[5],
-                      "FILE" => $_[0]->YYData->{FILE},
-                      "LINE" => $_[0]->YYData->{LINE},
-              }}
+               "NAME" => $_[4],
+               "TYPE" => $_[2],
+               "PROPERTIES" => $_[1],
+               "POINTERS" => $_[3],
+               "ARRAY_LEN" => $_[5],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
        ],
-       [#Rule 74
+       [#Rule 75
                 'pointers', 0,
 sub
-#line 270 "pidl/idl.yp"
+#line 379 "./../pidl/idl.yp"
 { 0 }
        ],
-       [#Rule 75
+       [#Rule 76
                 'pointers', 2,
 sub
-#line 271 "pidl/idl.yp"
+#line 381 "./../pidl/idl.yp"
 { $_[1]+1 }
        ],
-       [#Rule 76
+       [#Rule 77
+                'pipe', 3,
+sub
+#line 386 "./../pidl/idl.yp"
+{{
+               "TYPE" => "PIPE",
+               "PROPERTIES" => $_[1],
+               "NAME" => $_[4],
+               "DATA" => $_[3],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
+       ],
+       [#Rule 78
                 'element_list1', 0,
 sub
-#line 275 "pidl/idl.yp"
+#line 398 "./../pidl/idl.yp"
 { [] }
        ],
-       [#Rule 77
+       [#Rule 79
                 'element_list1', 3,
 sub
-#line 276 "pidl/idl.yp"
+#line 400 "./../pidl/idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
-       [#Rule 78
+       [#Rule 80
+                'optional_const', 0, undef
+       ],
+       [#Rule 81
+                'optional_const', 1, undef
+       ],
+       [#Rule 82
                 'element_list2', 0, undef
        ],
-       [#Rule 79
+       [#Rule 83
                 'element_list2', 1, undef
        ],
-       [#Rule 80
-                'element_list2', 1,
+       [#Rule 84
+                'element_list2', 2,
 sub
-#line 282 "pidl/idl.yp"
-{ [ $_[1] ] }
+#line 414 "./../pidl/idl.yp"
+{ [ $_[2] ] }
        ],
-       [#Rule 81
-                'element_list2', 3,
+       [#Rule 85
+                'element_list2', 4,
 sub
-#line 283 "pidl/idl.yp"
-{ push(@{$_[1]}, $_[3]); $_[1] }
+#line 416 "./../pidl/idl.yp"
+{ push(@{$_[1]}, $_[4]); $_[1] }
        ],
-       [#Rule 82
+       [#Rule 86
                 'array_len', 0, undef
        ],
-       [#Rule 83
+       [#Rule 87
                 'array_len', 3,
 sub
-#line 288 "pidl/idl.yp"
+#line 422 "./../pidl/idl.yp"
 { push(@{$_[3]}, "*"); $_[3] }
        ],
-       [#Rule 84
+       [#Rule 88
                 'array_len', 4,
 sub
-#line 289 "pidl/idl.yp"
+#line 424 "./../pidl/idl.yp"
 { push(@{$_[4]}, "$_[2]"); $_[4] }
        ],
-       [#Rule 85
+       [#Rule 89
                 'property_list', 0, undef
        ],
-       [#Rule 86
+       [#Rule 90
                 'property_list', 4,
 sub
-#line 295 "pidl/idl.yp"
+#line 430 "./../pidl/idl.yp"
 { FlattenHash([$_[1],$_[3]]); }
        ],
-       [#Rule 87
+       [#Rule 91
                 'properties', 1,
 sub
-#line 298 "pidl/idl.yp"
+#line 434 "./../pidl/idl.yp"
 { $_[1] }
        ],
-       [#Rule 88
+       [#Rule 92
                 'properties', 3,
 sub
-#line 299 "pidl/idl.yp"
+#line 436 "./../pidl/idl.yp"
 { FlattenHash([$_[1], $_[3]]); }
        ],
-       [#Rule 89
+       [#Rule 93
                 'property', 1,
 sub
-#line 302 "pidl/idl.yp"
+#line 440 "./../pidl/idl.yp"
 {{ "$_[1]" => "1"     }}
        ],
-       [#Rule 90
+       [#Rule 94
                 'property', 4,
 sub
-#line 303 "pidl/idl.yp"
+#line 442 "./../pidl/idl.yp"
 {{ "$_[1]" => "$_[3]" }}
        ],
-       [#Rule 91
+       [#Rule 95
                 'commalisttext', 1, undef
        ],
-       [#Rule 92
+       [#Rule 96
                 'commalisttext', 3,
 sub
-#line 308 "pidl/idl.yp"
+#line 448 "./../pidl/idl.yp"
 { "$_[1],$_[3]" }
        ],
-       [#Rule 93
+       [#Rule 97
                 'anytext', 0,
 sub
-#line 312 "pidl/idl.yp"
+#line 453 "./../pidl/idl.yp"
 { "" }
        ],
-       [#Rule 94
+       [#Rule 98
                 'anytext', 1, undef
        ],
-       [#Rule 95
+       [#Rule 99
                 'anytext', 1, undef
        ],
-       [#Rule 96
+       [#Rule 100
                 'anytext', 1, undef
        ],
-       [#Rule 97
+       [#Rule 101
                 'anytext', 3,
 sub
-#line 314 "pidl/idl.yp"
+#line 461 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 98
+       [#Rule 102
                 'anytext', 3,
 sub
-#line 315 "pidl/idl.yp"
+#line 463 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 99
+       [#Rule 103
                 'anytext', 3,
 sub
-#line 316 "pidl/idl.yp"
+#line 465 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 100
+       [#Rule 104
                 'anytext', 3,
 sub
-#line 317 "pidl/idl.yp"
+#line 467 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 101
+       [#Rule 105
                 'anytext', 3,
 sub
-#line 318 "pidl/idl.yp"
+#line 469 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 102
+       [#Rule 106
                 'anytext', 3,
 sub
-#line 319 "pidl/idl.yp"
+#line 471 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 103
+       [#Rule 107
                 'anytext', 3,
 sub
-#line 320 "pidl/idl.yp"
+#line 473 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 104
+       [#Rule 108
                 'anytext', 3,
 sub
-#line 321 "pidl/idl.yp"
+#line 475 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 105
+       [#Rule 109
                 'anytext', 3,
 sub
-#line 322 "pidl/idl.yp"
+#line 477 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 106
+       [#Rule 110
                 'anytext', 3,
 sub
-#line 323 "pidl/idl.yp"
+#line 479 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 107
+       [#Rule 111
                 'anytext', 3,
 sub
-#line 324 "pidl/idl.yp"
+#line 481 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 108
+       [#Rule 112
                 'anytext', 3,
 sub
-#line 325 "pidl/idl.yp"
+#line 483 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 109
+       [#Rule 113
                 'anytext', 3,
 sub
-#line 326 "pidl/idl.yp"
+#line 485 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 110
+       [#Rule 114
                 'anytext', 5,
 sub
-#line 327 "pidl/idl.yp"
+#line 487 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]$_[4]$_[5]" }
        ],
-       [#Rule 111
+       [#Rule 115
                 'anytext', 5,
 sub
-#line 328 "pidl/idl.yp"
+#line 489 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]$_[4]$_[5]" }
        ],
-       [#Rule 112
+       [#Rule 116
                 'identifier', 1, undef
        ],
-       [#Rule 113
-                'optional_identifier', 1, undef
-       ],
-       [#Rule 114
+       [#Rule 117
                 'optional_identifier', 0, undef
        ],
-       [#Rule 115
+       [#Rule 118
+                'optional_identifier', 1, undef
+       ],
+       [#Rule 119
                 'constant', 1, undef
        ],
-       [#Rule 116
+       [#Rule 120
                 'text', 1,
 sub
-#line 342 "pidl/idl.yp"
+#line 507 "./../pidl/idl.yp"
 { "\"$_[1]\"" }
        ],
-       [#Rule 117
+       [#Rule 121
                 'optional_semicolon', 0, undef
        ],
-       [#Rule 118
+       [#Rule 122
                 'optional_semicolon', 1, undef
        ]
 ],
@@ -2389,58 +2474,63 @@ sub
     bless($self,$class);
 }
 
-#line 353 "pidl/idl.yp"
+#line 519 "./../pidl/idl.yp"
 
 
 use Parse::Pidl qw(error);
 
 #####################################################################
 # flatten an array of hashes into a single hash
-sub FlattenHash($) 
-{ 
-    my $a = shift;
-    my %b;
-    for my $d (@{$a}) {
-       for my $k (keys %{$d}) {
-           $b{$k} = $d->{$k};
+sub FlattenHash($)
+{
+       my $a = shift;
+       my %b;
+       for my $d (@{$a}) {
+               for my $k (keys %{$d}) {
+               $b{$k} = $d->{$k};
+               }
        }
-    }
-    return \%b;
+       return \%b;
 }
 
-
-
 #####################################################################
 # traverse a perl data structure removing any empty arrays or
 # hashes and any hash elements that map to undef
 sub CleanData($)
 {
-    sub CleanData($);
-    my($v) = shift;
+       sub CleanData($);
+       my($v) = shift;
+
        return undef if (not defined($v));
-    if (ref($v) eq "ARRAY") {
-       foreach my $i (0 .. $#{$v}) {
-           CleanData($v->[$i]);
-       }
-       # this removes any undefined elements from the array
-       @{$v} = grep { defined $_ } @{$v};
-    } elsif (ref($v) eq "HASH") {
-       foreach my $x (keys %{$v}) {
-           CleanData($v->{$x});
-           if (!defined $v->{$x}) { delete($v->{$x}); next; }
+
+       if (ref($v) eq "ARRAY") {
+               foreach my $i (0 .. $#{$v}) {
+                       CleanData($v->[$i]);
+               }
+               # this removes any undefined elements from the array
+               @{$v} = grep { defined $_ } @{$v};
+       } elsif (ref($v) eq "HASH") {
+               foreach my $x (keys %{$v}) {
+                       CleanData($v->{$x});
+                       if (!defined $v->{$x}) {
+                               delete($v->{$x});
+                               next;
+                       }
+               }
        }
-    }
+
        return $v;
 }
 
 sub _Error {
-    if (exists $_[0]->YYData->{ERRMSG}) {
+       if (exists $_[0]->YYData->{ERRMSG}) {
                error($_[0]->YYData, $_[0]->YYData->{ERRMSG});
                delete $_[0]->YYData->{ERRMSG};
                return;
        }
+
        my $last_token = $_[0]->YYData->{LAST_TOKEN};
-       
+
        error($_[0]->YYData, "Syntax error near '$last_token'");
 }
 
@@ -2448,7 +2538,7 @@ sub _Lexer($)
 {
        my($parser)=shift;
 
-    $parser->YYData->{INPUT} or return('',undef);
+       $parser->YYData->{INPUT} or return('',undef);
 
 again:
        $parser->YYData->{INPUT} =~ s/^[ \t]*//;
@@ -2475,18 +2565,19 @@ again:
                }
                if (s/^\"(.*?)\"//) {
                        $parser->YYData->{LAST_TOKEN} = $1;
-                       return('TEXT',$1); 
+                       return('TEXT',$1);
                }
                if (s/^(\d+)(\W|$)/$2/) {
                        $parser->YYData->{LAST_TOKEN} = $1;
-                       return('CONSTANT',$1); 
+                       return('CONSTANT',$1);
                }
                if (s/^([\w_]+)//) {
                        $parser->YYData->{LAST_TOKEN} = $1;
-                       if ($1 =~ 
-                           /^(coclass|interface|const|typedef|union|cpp_quote
-                             |struct|enum|bitmap|void|unsigned|signed|import|include
-                                 |importlib)$/x) {
+                       if ($1 =~
+                           /^(coclass|interface|import|importlib
+                             |include|cpp_quote|typedef
+                             |union|struct|enum|bitmap|pipe
+                             |void|const|unsigned|signed)$/x) {
                                return $1;
                        }
                        return('IDENTIFIER',$1);
@@ -2504,10 +2595,10 @@ sub parse_string
 
        my $self = new Parse::Pidl::IDL;
 
-    $self->YYData->{FILE} = $filename;
-    $self->YYData->{INPUT} = $data;
-    $self->YYData->{LINE} = 0;
-    $self->YYData->{LAST_TOKEN} = "NONE";
+       $self->YYData->{FILE} = $filename;
+       $self->YYData->{INPUT} = $data;
+       $self->YYData->{LINE} = 0;
+       $self->YYData->{LAST_TOKEN} = "NONE";
 
        my $idl = $self->YYParse( yylex => \&_Lexer, yyerror => \&_Error );