pidl: Remove support for the "declare" keyword in the parser.
[ira/wip.git] / source / pidl / lib / Parse / Pidl / IDL.pm
index 85c5b8b8285af744e2d5b2b6f132f5c6147c0521..5956c43e43b8c1e08ca9bf3e93f60ce45ad7566d 100644 (file)
@@ -12,482 +12,7 @@ use vars qw ( @ISA );
 use strict;
 
 @ISA= qw ( Parse::Yapp::Driver );
-#Included Parse/Yapp/Driver.pm file----------------------------------------
-{
-#
-# Module Parse::Yapp::Driver
-#
-# This module is part of the Parse::Yapp package available on your
-# nearest CPAN
-#
-# Any use of this module in a standalone parser make the included
-# text under the same copyright as the Parse::Yapp module itself.
-#
-# This notice should remain unchanged.
-#
-# (c) Copyright 1998-2001 Francois Desarmenien, all rights reserved.
-# (see the pod text in Parse::Yapp module for use and distribution rights)
-#
-
-package Parse::Yapp::Driver;
-
-require 5.004;
-
-use strict;
-
-use vars qw ( $VERSION $COMPATIBLE $FILENAME );
-
-$VERSION = '1.05';
-$COMPATIBLE = '0.07';
-$FILENAME=__FILE__;
-
-use Carp;
-
-#Known parameters, all starting with YY (leading YY will be discarded)
-my(%params)=(YYLEX => 'CODE', 'YYERROR' => 'CODE', YYVERSION => '',
-                        YYRULES => 'ARRAY', YYSTATES => 'ARRAY', YYDEBUG => '');
-#Mandatory parameters
-my(@params)=('LEX','RULES','STATES');
-
-sub new {
-    my($class)=shift;
-       my($errst,$nberr,$token,$value,$check,$dotpos);
-    my($self)={ ERROR => \&_Error,
-                               ERRST => \$errst,
-                NBERR => \$nberr,
-                               TOKEN => \$token,
-                               VALUE => \$value,
-                               DOTPOS => \$dotpos,
-                               STACK => [],
-                               DEBUG => 0,
-                               CHECK => \$check };
-
-       _CheckParams( [], \%params, \@_, $self );
-
-               exists($$self{VERSION})
-       and     $$self{VERSION} < $COMPATIBLE
-       and     croak "Yapp driver version $VERSION ".
-                         "incompatible with version $$self{VERSION}:\n".
-                         "Please recompile parser module.";
-
-        ref($class)
-    and $class=ref($class);
-
-    bless($self,$class);
-}
-
-sub YYParse {
-    my($self)=shift;
-    my($retval);
-
-       _CheckParams( \@params, \%params, \@_, $self );
-
-       if($$self{DEBUG}) {
-               _DBLoad();
-               $retval = eval '$self->_DBParse()';#Do not create stab entry on compile
-        $@ and die $@;
-       }
-       else {
-               $retval = $self->_Parse();
-       }
-    $retval
-}
-
-sub YYData {
-       my($self)=shift;
-
-               exists($$self{USER})
-       or      $$self{USER}={};
-
-       $$self{USER};
-       
-}
-
-sub YYErrok {
-       my($self)=shift;
-
-       ${$$self{ERRST}}=0;
-    undef;
-}
-
-sub YYNberr {
-       my($self)=shift;
-
-       ${$$self{NBERR}};
-}
-
-sub YYRecovering {
-       my($self)=shift;
-
-       ${$$self{ERRST}} != 0;
-}
-
-sub YYAbort {
-       my($self)=shift;
-
-       ${$$self{CHECK}}='ABORT';
-    undef;
-}
-
-sub YYAccept {
-       my($self)=shift;
-
-       ${$$self{CHECK}}='ACCEPT';
-    undef;
-}
-
-sub YYError {
-       my($self)=shift;
-
-       ${$$self{CHECK}}='ERROR';
-    undef;
-}
-
-sub YYSemval {
-       my($self)=shift;
-       my($index)= $_[0] - ${$$self{DOTPOS}} - 1;
-
-               $index < 0
-       and     -$index <= @{$$self{STACK}}
-       and     return $$self{STACK}[$index][1];
-
-       undef;  #Invalid index
-}
-
-sub YYCurtok {
-       my($self)=shift;
-
-        @_
-    and ${$$self{TOKEN}}=$_[0];
-    ${$$self{TOKEN}};
-}
-
-sub YYCurval {
-       my($self)=shift;
-
-        @_
-    and ${$$self{VALUE}}=$_[0];
-    ${$$self{VALUE}};
-}
-
-sub YYExpect {
-    my($self)=shift;
-
-    keys %{$self->{STATES}[$self->{STACK}[-1][0]]{ACTIONS}}
-}
-
-sub YYLexer {
-    my($self)=shift;
-
-       $$self{LEX};
-}
-
-
-#################
-# Private stuff #
-#################
-
-
-sub _CheckParams {
-       my($mandatory,$checklist,$inarray,$outhash)=@_;
-       my($prm,$value);
-       my($prmlst)={};
-
-       while(($prm,$value)=splice(@$inarray,0,2)) {
-        $prm=uc($prm);
-                       exists($$checklist{$prm})
-               or      croak("Unknow parameter '$prm'");
-                       ref($value) eq $$checklist{$prm}
-               or      croak("Invalid value for parameter '$prm'");
-        $prm=unpack('@2A*',$prm);
-               $$outhash{$prm}=$value;
-       }
-       for (@$mandatory) {
-                       exists($$outhash{$_})
-               or      croak("Missing mandatory parameter '".lc($_)."'");
-       }
-}
-
-sub _Error {
-       print "Parse error.\n";
-}
-
-sub _DBLoad {
-       {
-               no strict 'refs';
-
-                       exists(${__PACKAGE__.'::'}{_DBParse})#Already loaded ?
-               and     return;
-       }
-       my($fname)=__FILE__;
-       my(@drv);
-       open(DRV,"<$fname") or die "Report this as a BUG: Cannot open $fname";
-       while(<DRV>) {
-                       /^\s*sub\s+_Parse\s*{\s*$/ .. /^\s*}\s*#\s*_Parse\s*$/
-               and     do {
-                       s/^#DBG>//;
-                       push(@drv,$_);
-               }
-       }
-       close(DRV);
-
-       $drv[0]=~s/_P/_DBP/;
-       eval join('',@drv);
-}
-
-#Note that for loading debugging version of the driver,
-#this file will be parsed from 'sub _Parse' up to '}#_Parse' inclusive.
-#So, DO NOT remove comment at end of sub !!!
-sub _Parse {
-    my($self)=shift;
-
-       my($rules,$states,$lex,$error)
-     = @$self{ 'RULES', 'STATES', 'LEX', 'ERROR' };
-       my($errstatus,$nberror,$token,$value,$stack,$check,$dotpos)
-     = @$self{ 'ERRST', 'NBERR', 'TOKEN', 'VALUE', 'STACK', 'CHECK', 'DOTPOS' };
-
-#DBG>  my($debug)=$$self{DEBUG};
-#DBG>  my($dbgerror)=0;
-
-#DBG>  my($ShowCurToken) = sub {
-#DBG>          my($tok)='>';
-#DBG>          for (split('',$$token)) {
-#DBG>                  $tok.=          (ord($_) < 32 or ord($_) > 126)
-#DBG>                                  ?       sprintf('<%02X>',ord($_))
-#DBG>                                  :       $_;
-#DBG>          }
-#DBG>          $tok.='<';
-#DBG>  };
-
-       $$errstatus=0;
-       $$nberror=0;
-       ($$token,$$value)=(undef,undef);
-       @$stack=( [ 0, undef ] );
-       $$check='';
-
-    while(1) {
-        my($actions,$act,$stateno);
-
-        $stateno=$$stack[-1][0];
-        $actions=$$states[$stateno];
-
-#DBG>  print STDERR ('-' x 40),"\n";
-#DBG>          $debug & 0x2
-#DBG>  and     print STDERR "In state $stateno:\n";
-#DBG>          $debug & 0x08
-#DBG>  and     print STDERR "Stack:[".
-#DBG>                                   join(',',map { $$_[0] } @$stack).
-#DBG>                                   "]\n";
-
-
-        if  (exists($$actions{ACTIONS})) {
-
-                               defined($$token)
-            or do {
-                               ($$token,$$value)=&$lex($self);
-#DBG>                          $debug & 0x01
-#DBG>                  and     print STDERR "Need token. Got ".&$ShowCurToken."\n";
-                       };
-
-            $act=   exists($$actions{ACTIONS}{$$token})
-                    ?   $$actions{ACTIONS}{$$token}
-                    :   exists($$actions{DEFAULT})
-                        ?   $$actions{DEFAULT}
-                        :   undef;
-        }
-        else {
-            $act=$$actions{DEFAULT};
-#DBG>                  $debug & 0x01
-#DBG>          and     print STDERR "Don't need token.\n";
-        }
-
-            defined($act)
-        and do {
-
-                $act > 0
-            and do {        #shift
-
-#DBG>                          $debug & 0x04
-#DBG>                  and     print STDERR "Shift and go to state $act.\n";
-
-                                       $$errstatus
-                               and     do {
-                                       --$$errstatus;
-
-#DBG>                                  $debug & 0x10
-#DBG>                          and     $dbgerror
-#DBG>                          and     $$errstatus == 0
-#DBG>                          and     do {
-#DBG>                                  print STDERR "**End of Error recovery.\n";
-#DBG>                                  $dbgerror=0;
-#DBG>                          };
-                               };
-
-
-                push(@$stack,[ $act, $$value ]);
-
-                                       $$token ne ''   #Don't eat the eof
-                               and     $$token=$$value=undef;
-                next;
-            };
-
-            #reduce
-            my($lhs,$len,$code,@sempar,$semval);
-            ($lhs,$len,$code)=@{$$rules[-$act]};
-
-#DBG>                  $debug & 0x04
-#DBG>          and     $act
-#DBG>          and     print STDERR "Reduce using rule ".-$act." ($lhs,$len): ";
-
-                $act
-            or  $self->YYAccept();
-
-            $$dotpos=$len;
-
-                unpack('A1',$lhs) eq '@'    #In line rule
-            and do {
-                    $lhs =~ /^\@[0-9]+\-([0-9]+)$/
-                or  die "In line rule name '$lhs' ill formed: ".
-                        "report it as a BUG.\n";
-                $$dotpos = $1;
-            };
-
-            @sempar =       $$dotpos
-                        ?   map { $$_[1] } @$stack[ -$$dotpos .. -1 ]
-                        :   ();
-
-            $semval = $code ? &$code( $self, @sempar )
-                            : @sempar ? $sempar[0] : undef;
-
-            splice(@$stack,-$len,$len);
-
-                $$check eq 'ACCEPT'
-            and do {
-
-#DBG>                  $debug & 0x04
-#DBG>          and     print STDERR "Accept.\n";
-
-                               return($semval);
-                       };
-
-                $$check eq 'ABORT'
-            and        do {
-
-#DBG>                  $debug & 0x04
-#DBG>          and     print STDERR "Abort.\n";
-
-                               return(undef);
-
-                       };
-
-#DBG>                  $debug & 0x04
-#DBG>          and     print STDERR "Back to state $$stack[-1][0], then ";
-
-                $$check eq 'ERROR'
-            or  do {
-#DBG>                          $debug & 0x04
-#DBG>                  and     print STDERR 
-#DBG>                              "go to state $$states[$$stack[-1][0]]{GOTOS}{$lhs}.\n";
-
-#DBG>                          $debug & 0x10
-#DBG>                  and     $dbgerror
-#DBG>                  and     $$errstatus == 0
-#DBG>                  and     do {
-#DBG>                          print STDERR "**End of Error recovery.\n";
-#DBG>                          $dbgerror=0;
-#DBG>                  };
-
-                           push(@$stack,
-                     [ $$states[$$stack[-1][0]]{GOTOS}{$lhs}, $semval ]);
-                $$check='';
-                next;
-            };
-
-#DBG>                  $debug & 0x04
-#DBG>          and     print STDERR "Forced Error recovery.\n";
-
-            $$check='';
-
-        };
-
-        #Error
-            $$errstatus
-        or   do {
-
-            $$errstatus = 1;
-            &$error($self);
-                $$errstatus # if 0, then YYErrok has been called
-            or  next;       # so continue parsing
-
-#DBG>                  $debug & 0x10
-#DBG>          and     do {
-#DBG>                  print STDERR "**Entering Error recovery.\n";
-#DBG>                  ++$dbgerror;
-#DBG>          };
-
-            ++$$nberror;
-
-        };
-
-                       $$errstatus == 3        #The next token is not valid: discard it
-               and     do {
-                               $$token eq ''   # End of input: no hope
-                       and     do {
-#DBG>                          $debug & 0x10
-#DBG>                  and     print STDERR "**At eof: aborting.\n";
-                               return(undef);
-                       };
-
-#DBG>                  $debug & 0x10
-#DBG>          and     print STDERR "**Dicard invalid token ".&$ShowCurToken.".\n";
-
-                       $$token=$$value=undef;
-               };
-
-        $$errstatus=3;
-
-               while(    @$stack
-                         and (         not exists($$states[$$stack[-1][0]]{ACTIONS})
-                               or  not exists($$states[$$stack[-1][0]]{ACTIONS}{error})
-                                       or      $$states[$$stack[-1][0]]{ACTIONS}{error} <= 0)) {
-
-#DBG>                  $debug & 0x10
-#DBG>          and     print STDERR "**Pop state $$stack[-1][0].\n";
-
-                       pop(@$stack);
-               }
-
-                       @$stack
-               or      do {
-
-#DBG>                  $debug & 0x10
-#DBG>          and     print STDERR "**No state left on stack: aborting.\n";
-
-                       return(undef);
-               };
-
-               #shift the error token
-
-#DBG>                  $debug & 0x10
-#DBG>          and     print STDERR "**Shift \$error token and go to state ".
-#DBG>                                           $$states[$$stack[-1][0]]{ACTIONS}{error}.
-#DBG>                                           ".\n";
-
-               push(@$stack, [ $$states[$$stack[-1][0]]{ACTIONS}{error}, undef ]);
-
-    }
-
-    #never reached
-       croak("Error in driver logic. Please, report it as a BUG");
-
-}#_Parse
-#DO NOT remove comment
-
-1;
-
-}
-#End of include--------------------------------------------------
-
+use Parse::Yapp::Driver;
 
 
 
@@ -508,18 +33,20 @@ sub new {
        {#State 1
                ACTIONS => {
                        '' => 2,
-                       "importlib" => 3,
-                       "import" => 6,
-                       "include" => 11
+                       "cpp_quote" => 3,
+                       "importlib" => 4,
+                       "import" => 7,
+                       "include" => 13
                },
-               DEFAULT => -92,
+               DEFAULT => -83,
                GOTOS => {
-                       'importlib' => 9,
-                       'interface' => 8,
-                       'include' => 4,
-                       'coclass' => 10,
-                       'import' => 7,
-                       'property_list' => 5
+                       'cpp_quote' => 11,
+                       'importlib' => 10,
+                       'interface' => 9,
+                       'include' => 5,
+                       'coclass' => 12,
+                       'import' => 8,
+                       'property_list' => 6
                }
        },
        {#State 2
@@ -527,1754 +54,1683 @@ sub new {
        },
        {#State 3
                ACTIONS => {
-                       'TEXT' => 13
+                       "(" => 14
+               }
+       },
+       {#State 4
+               ACTIONS => {
+                       'TEXT' => 16
                },
                GOTOS => {
-                       'commalist' => 12,
-                       'text' => 14
+                       'commalist' => 15,
+                       'text' => 17
                }
        },
-       {#State 4
+       {#State 5
                DEFAULT => -5
        },
-       {#State 5
+       {#State 6
                ACTIONS => {
-                       "coclass" => 15,
-                       "[" => 17,
-                       "interface" => 16
+                       "coclass" => 18,
+                       "[" => 20,
+                       "interface" => 19
                }
        },
-       {#State 6
+       {#State 7
                ACTIONS => {
-                       'TEXT' => 13
+                       'TEXT' => 16
                },
                GOTOS => {
-                       'commalist' => 18,
-                       'text' => 14
+                       'commalist' => 21,
+                       'text' => 17
                }
        },
-       {#State 7
-               DEFAULT => -4
-       },
        {#State 8
-               DEFAULT => -2
+               DEFAULT => -4
        },
        {#State 9
-               DEFAULT => -6
+               DEFAULT => -2
        },
        {#State 10
-               DEFAULT => -3
+               DEFAULT => -6
        },
        {#State 11
-               ACTIONS => {
-                       'TEXT' => 13
-               },
-               GOTOS => {
-                       'commalist' => 19,
-                       'text' => 14
-               }
+               DEFAULT => -7
        },
        {#State 12
-               ACTIONS => {
-                       ";" => 20,
-                       "," => 21
-               }
+               DEFAULT => -3
        },
        {#State 13
-               DEFAULT => -125
-       },
-       {#State 14
-               DEFAULT => -10
-       },
-       {#State 15
                ACTIONS => {
-                       'IDENTIFIER' => 22
+                       'TEXT' => 16
                },
                GOTOS => {
-                       'identifier' => 23
+                       'commalist' => 22,
+                       'text' => 17
                }
        },
-       {#State 16
+       {#State 14
                ACTIONS => {
-                       'IDENTIFIER' => 22
+                       'TEXT' => 16
                },
                GOTOS => {
-                       'identifier' => 24
+                       'text' => 23
                }
        },
-       {#State 17
+       {#State 15
                ACTIONS => {
-                       'IDENTIFIER' => 22
-               },
-               GOTOS => {
-                       'identifier' => 26,
-                       'property' => 27,
-                       'properties' => 25
+                       ";" => 24,
+                       "," => 25
                }
        },
+       {#State 16
+               DEFAULT => -116
+       },
+       {#State 17
+               DEFAULT => -11
+       },
        {#State 18
                ACTIONS => {
-                       ";" => 28,
-                       "," => 21
+                       'IDENTIFIER' => 26
+               },
+               GOTOS => {
+                       'identifier' => 27
                }
        },
        {#State 19
                ACTIONS => {
-                       ";" => 29,
-                       "," => 21
+                       'IDENTIFIER' => 26
+               },
+               GOTOS => {
+                       'identifier' => 28
                }
        },
        {#State 20
-               DEFAULT => -9
-       },
-       {#State 21
                ACTIONS => {
-                       'TEXT' => 13
+                       'IDENTIFIER' => 26
                },
                GOTOS => {
-                       'text' => 30
+                       'identifier' => 30,
+                       'property' => 31,
+                       'properties' => 29
+               }
+       },
+       {#State 21
+               ACTIONS => {
+                       ";" => 32,
+                       "," => 25
                }
        },
        {#State 22
-               DEFAULT => -121
+               ACTIONS => {
+                       ";" => 33,
+                       "," => 25
+               }
        },
        {#State 23
                ACTIONS => {
-                       "{" => 31
+                       ")" => 34
                }
        },
        {#State 24
-               ACTIONS => {
-                       ":" => 32
-               },
-               DEFAULT => -16,
-               GOTOS => {
-                       'base_interface' => 33
-               }
+               DEFAULT => -10
        },
        {#State 25
                ACTIONS => {
-                       "," => 34,
-                       "]" => 35
+                       'TEXT' => 16
+               },
+               GOTOS => {
+                       'text' => 35
                }
        },
        {#State 26
-               ACTIONS => {
-                       "(" => 36
-               },
-               DEFAULT => -96
+               DEFAULT => -112
        },
        {#State 27
-               DEFAULT => -94
+               ACTIONS => {
+                       "{" => 36
+               }
        },
        {#State 28
-               DEFAULT => -7
+               ACTIONS => {
+                       "{" => 37
+               }
        },
        {#State 29
-               DEFAULT => -8
+               ACTIONS => {
+                       "," => 38,
+                       "]" => 39
+               }
        },
        {#State 30
-               DEFAULT => -11
+               ACTIONS => {
+                       "(" => 40
+               },
+               DEFAULT => -87
        },
        {#State 31
-               DEFAULT => -13,
-               GOTOS => {
-                       'interface_names' => 37
-               }
+               DEFAULT => -85
        },
        {#State 32
-               ACTIONS => {
-                       'IDENTIFIER' => 22
-               },
-               GOTOS => {
-                       'identifier' => 38
-               }
+               DEFAULT => -8
        },
        {#State 33
-               ACTIONS => {
-                       "{" => 39
-               }
+               DEFAULT => -9
        },
        {#State 34
-               ACTIONS => {
-                       'IDENTIFIER' => 22
-               },
-               GOTOS => {
-                       'identifier' => 26,
-                       'property' => 40
-               }
+               DEFAULT => -17
        },
        {#State 35
-               DEFAULT => -93
+               DEFAULT => -12
        },
        {#State 36
-               ACTIONS => {
-                       'CONSTANT' => 44,
-                       'TEXT' => 13,
-                       'IDENTIFIER' => 22
-               },
-               DEFAULT => -102,
+               DEFAULT => -14,
                GOTOS => {
-                       'identifier' => 45,
-                       'text' => 46,
-                       'listtext' => 42,
-                       'anytext' => 41,
-                       'constant' => 43
+                       'interface_names' => 41
                }
        },
        {#State 37
                ACTIONS => {
-                       "}" => 47,
-                       "interface" => 48
+                       "const" => 51
+               },
+               DEFAULT => -83,
+               GOTOS => {
+                       'typedecl' => 42,
+                       'function' => 43,
+                       'definitions' => 45,
+                       'bitmap' => 44,
+                       'definition' => 48,
+                       'property_list' => 47,
+                       'usertype' => 46,
+                       'const' => 50,
+                       'struct' => 49,
+                       'typedef' => 53,
+                       'enum' => 52,
+                       'union' => 54
                }
        },
        {#State 38
-               DEFAULT => -17
-       },
-       {#State 39
                ACTIONS => {
-                       "typedef" => 49,
-                       "union" => 50,
-                       "enum" => 63,
-                       "bitmap" => 64,
-                       "declare" => 56,
-                       "const" => 58,
-                       "struct" => 61
-               },
-               DEFAULT => -92,
-               GOTOS => {
-                       'typedecl' => 62,
-                       'function' => 51,
-                       'bitmap' => 65,
-                       'definitions' => 52,
-                       'definition' => 55,
-                       'property_list' => 54,
-                       'usertype' => 53,
-                       'declare' => 67,
-                       'const' => 66,
-                       'struct' => 57,
-                       'enum' => 59,
-                       'typedef' => 60,
-                       'union' => 68
+                       'IDENTIFIER' => 26
+               },
+               GOTOS => {
+                       'identifier' => 30,
+                       'property' => 55
                }
        },
-       {#State 40
-               DEFAULT => -95
+       {#State 39
+               DEFAULT => -84
        },
-       {#State 41
+       {#State 40
                ACTIONS => {
-                       "-" => 70,
-                       ":" => 69,
-                       "<" => 71,
-                       "+" => 73,
-                       "~" => 72,
-                       "*" => 74,
-                       "?" => 75,
-                       "{" => 76,
-                       "&" => 77,
-                       "/" => 78,
-                       "=" => 79,
-                       "(" => 80,
-                       "|" => 81,
-                       "." => 82,
-                       ">" => 83
+                       'CONSTANT' => 59,
+                       'TEXT' => 16,
+                       'IDENTIFIER' => 26
                },
-               DEFAULT => -98
+               DEFAULT => -93,
+               GOTOS => {
+                       'identifier' => 60,
+                       'text' => 61,
+                       'listtext' => 57,
+                       'anytext' => 56,
+                       'constant' => 58
+               }
        },
-       {#State 42
+       {#State 41
                ACTIONS => {
-                       "," => 84,
-                       ")" => 85
+                       "}" => 62,
+                       "interface" => 63
                }
        },
+       {#State 42
+               DEFAULT => -23
+       },
        {#State 43
-               DEFAULT => -104
+               DEFAULT => -20
        },
        {#State 44
-               DEFAULT => -124
+               DEFAULT => -31
        },
        {#State 45
-               DEFAULT => -103
+               ACTIONS => {
+                       "}" => 64,
+                       "const" => 51
+               },
+               DEFAULT => -83,
+               GOTOS => {
+                       'typedecl' => 42,
+                       'function' => 43,
+                       'bitmap' => 44,
+                       'definition' => 65,
+                       'property_list' => 47,
+                       'usertype' => 46,
+                       'struct' => 49,
+                       'const' => 50,
+                       'typedef' => 53,
+                       'enum' => 52,
+                       'union' => 54
+               }
        },
        {#State 46
-               DEFAULT => -105
+               ACTIONS => {
+                       ";" => 66
+               }
        },
        {#State 47
                ACTIONS => {
-                       ";" => 86
-               },
-               DEFAULT => -126,
-               GOTOS => {
-                       'optional_semicolon' => 87
+                       "typedef" => 67,
+                       'IDENTIFIER' => 26,
+                       "signed" => 75,
+                       "union" => 68,
+                       "enum" => 77,
+                       "bitmap" => 78,
+                       'void' => 69,
+                       "unsigned" => 79,
+                       "[" => 20,
+                       "struct" => 74
+               },
+               GOTOS => {
+                       'existingtype' => 76,
+                       'bitmap' => 44,
+                       'usertype' => 71,
+                       'property_list' => 70,
+                       'identifier' => 72,
+                       'struct' => 49,
+                       'enum' => 52,
+                       'type' => 80,
+                       'union' => 54,
+                       'sign' => 73
                }
        },
        {#State 48
-               ACTIONS => {
-                       'IDENTIFIER' => 22
-               },
-               GOTOS => {
-                       'identifier' => 88
-               }
+               DEFAULT => -18
        },
        {#State 49
-               DEFAULT => -92,
-               GOTOS => {
-                       'property_list' => 89
-               }
+               DEFAULT => -28
        },
        {#State 50
+               DEFAULT => -21
+       },
+       {#State 51
                ACTIONS => {
-                       'IDENTIFIER' => 90
+                       'IDENTIFIER' => 26
                },
-               DEFAULT => -123,
                GOTOS => {
-                       'optional_identifier' => 91
+                       'identifier' => 81
                }
        },
-       {#State 51
-               DEFAULT => -20
-       },
        {#State 52
-               ACTIONS => {
-                       "}" => 92,
-                       "typedef" => 49,
-                       "union" => 50,
-                       "enum" => 63,
-                       "bitmap" => 64,
-                       "declare" => 56,
-                       "const" => 58,
-                       "struct" => 61
-               },
-               DEFAULT => -92,
-               GOTOS => {
-                       'typedecl' => 62,
-                       'function' => 51,
-                       'bitmap' => 65,
-                       'definition' => 93,
-                       'property_list' => 54,
-                       'usertype' => 53,
-                       'const' => 66,
-                       'struct' => 57,
-                       'declare' => 67,
-                       'enum' => 59,
-                       'typedef' => 60,
-                       'union' => 68
-               }
+               DEFAULT => -30
        },
        {#State 53
-               ACTIONS => {
-                       ";" => 94
-               }
+               DEFAULT => -22
        },
        {#State 54
-               ACTIONS => {
-                       'IDENTIFIER' => 22,
-                       "signed" => 100,
-                       "union" => 50,
-                       "enum" => 63,
-                       "bitmap" => 64,
-                       'void' => 95,
-                       "unsigned" => 101,
-                       "[" => 17,
-                       "struct" => 61
-               },
-               GOTOS => {
-                       'existingtype' => 99,
-                       'bitmap' => 65,
-                       'usertype' => 96,
-                       'identifier' => 97,
-                       'struct' => 57,
-                       'enum' => 59,
-                       'type' => 102,
-                       'union' => 68,
-                       'sign' => 98
-               }
+               DEFAULT => -29
        },
        {#State 55
-               DEFAULT => -18
+               DEFAULT => -86
        },
        {#State 56
-               DEFAULT => -92,
-               GOTOS => {
-                       'property_list' => 103
-               }
+               ACTIONS => {
+                       "-" => 83,
+                       ":" => 82,
+                       "<" => 84,
+                       "+" => 86,
+                       "~" => 85,
+                       "*" => 87,
+                       "?" => 88,
+                       "{" => 89,
+                       "&" => 90,
+                       "/" => 91,
+                       "=" => 92,
+                       "(" => 93,
+                       "|" => 94,
+                       "." => 95,
+                       ">" => 96
+               },
+               DEFAULT => -89
        },
        {#State 57
-               DEFAULT => -36
-       },
-       {#State 58
                ACTIONS => {
-                       'IDENTIFIER' => 22
-               },
-               GOTOS => {
-                       'identifier' => 104
+                       "," => 97,
+                       ")" => 98
                }
        },
+       {#State 58
+               DEFAULT => -95
+       },
        {#State 59
-               DEFAULT => -38
+               DEFAULT => -115
        },
        {#State 60
-               DEFAULT => -22
+               DEFAULT => -94
        },
        {#State 61
+               DEFAULT => -96
+       },
+       {#State 62
                ACTIONS => {
-                       'IDENTIFIER' => 90
+                       ";" => 99
                },
-               DEFAULT => -123,
+               DEFAULT => -117,
                GOTOS => {
-                       'optional_identifier' => 105
+                       'optional_semicolon' => 100
                }
        },
-       {#State 62
-               DEFAULT => -24
-       },
        {#State 63
                ACTIONS => {
-                       'IDENTIFIER' => 90
+                       'IDENTIFIER' => 26
                },
-               DEFAULT => -123,
                GOTOS => {
-                       'optional_identifier' => 106
+                       'identifier' => 101
                }
        },
        {#State 64
                ACTIONS => {
-                       'IDENTIFIER' => 90
+                       ";" => 99
                },
-               DEFAULT => -123,
+               DEFAULT => -117,
                GOTOS => {
-                       'optional_identifier' => 107
+                       'optional_semicolon' => 102
                }
        },
        {#State 65
-               DEFAULT => -39
+               DEFAULT => -19
        },
        {#State 66
-               DEFAULT => -21
+               DEFAULT => -32
        },
        {#State 67
-               DEFAULT => -23
-       },
-       {#State 68
-               DEFAULT => -37
-       },
-       {#State 69
                ACTIONS => {
-                       'CONSTANT' => 44,
-                       'TEXT' => 13,
-                       'IDENTIFIER' => 22
+                       'IDENTIFIER' => 26,
+                       "signed" => 75,
+                       'void' => 69,
+                       "unsigned" => 79
                },
-               DEFAULT => -102,
+               DEFAULT => -83,
                GOTOS => {
-                       'identifier' => 45,
-                       'anytext' => 108,
-                       'text' => 46,
-                       'constant' => 43
+                       'existingtype' => 76,
+                       'bitmap' => 44,
+                       'usertype' => 71,
+                       'property_list' => 70,
+                       'identifier' => 72,
+                       'struct' => 49,
+                       'enum' => 52,
+                       'type' => 103,
+                       'union' => 54,
+                       'sign' => 73
                }
        },
-       {#State 70
+       {#State 68
                ACTIONS => {
-                       'CONSTANT' => 44,
-                       'TEXT' => 13,
-                       'IDENTIFIER' => 22
+                       'IDENTIFIER' => 104
                },
-               DEFAULT => -102,
+               DEFAULT => -114,
                GOTOS => {
-                       'identifier' => 45,
-                       'anytext' => 109,
-                       'text' => 46,
-                       'constant' => 43
+                       'optional_identifier' => 105
                }
        },
-       {#State 71
+       {#State 69
+               DEFAULT => -39
+       },
+       {#State 70
                ACTIONS => {
-                       'CONSTANT' => 44,
-                       'TEXT' => 13,
-                       'IDENTIFIER' => 22
-               },
-               DEFAULT => -102,
-               GOTOS => {
-                       'identifier' => 45,
-                       'anytext' => 110,
-                       'text' => 46,
-                       'constant' => 43
+                       "union" => 68,
+                       "enum" => 77,
+                       "bitmap" => 78,
+                       "[" => 20,
+                       "struct" => 74
                }
        },
+       {#State 71
+               DEFAULT => -37
+       },
        {#State 72
-               ACTIONS => {
-                       'CONSTANT' => 44,
-                       'TEXT' => 13,
-                       'IDENTIFIER' => 22
-               },
-               DEFAULT => -102,
-               GOTOS => {
-                       'identifier' => 45,
-                       'anytext' => 111,
-                       'text' => 46,
-                       'constant' => 43
-               }
+               DEFAULT => -36
        },
        {#State 73
                ACTIONS => {
-                       'CONSTANT' => 44,
-                       'TEXT' => 13,
-                       'IDENTIFIER' => 22
+                       'IDENTIFIER' => 26
                },
-               DEFAULT => -102,
                GOTOS => {
-                       'identifier' => 45,
-                       'anytext' => 112,
-                       'text' => 46,
-                       'constant' => 43
+                       'identifier' => 106
                }
        },
        {#State 74
                ACTIONS => {
-                       'CONSTANT' => 44,
-                       'TEXT' => 13,
-                       'IDENTIFIER' => 22
+                       'IDENTIFIER' => 104
                },
-               DEFAULT => -102,
+               DEFAULT => -114,
                GOTOS => {
-                       'identifier' => 45,
-                       'anytext' => 113,
-                       'text' => 46,
-                       'constant' => 43
+                       'optional_identifier' => 107
                }
        },
        {#State 75
-               ACTIONS => {
-                       'CONSTANT' => 44,
-                       'TEXT' => 13,
-                       'IDENTIFIER' => 22
-               },
-               DEFAULT => -102,
-               GOTOS => {
-                       'identifier' => 45,
-                       'anytext' => 114,
-                       'text' => 46,
-                       'constant' => 43
-               }
+               DEFAULT => -33
        },
        {#State 76
-               ACTIONS => {
-                       'CONSTANT' => 44,
-                       'TEXT' => 13,
-                       'IDENTIFIER' => 22
-               },
-               DEFAULT => -102,
-               GOTOS => {
-                       'identifier' => 45,
-                       'anytext' => 115,
-                       'text' => 46,
-                       'constant' => 43,
-                       'commalisttext' => 116
-               }
+               DEFAULT => -38
        },
        {#State 77
                ACTIONS => {
-                       'CONSTANT' => 44,
-                       'TEXT' => 13,
-                       'IDENTIFIER' => 22
+                       'IDENTIFIER' => 104
                },
-               DEFAULT => -102,
+               DEFAULT => -114,
                GOTOS => {
-                       'identifier' => 45,
-                       'anytext' => 117,
-                       'text' => 46,
-                       'constant' => 43
+                       'optional_identifier' => 108
                }
        },
        {#State 78
                ACTIONS => {
-                       'CONSTANT' => 44,
-                       'TEXT' => 13,
-                       'IDENTIFIER' => 22
+                       'IDENTIFIER' => 104
                },
-               DEFAULT => -102,
+               DEFAULT => -114,
                GOTOS => {
-                       'identifier' => 45,
-                       'anytext' => 118,
-                       'text' => 46,
-                       'constant' => 43
+                       'optional_identifier' => 109
                }
        },
        {#State 79
-               ACTIONS => {
-                       'CONSTANT' => 44,
-                       'TEXT' => 13,
-                       'IDENTIFIER' => 22
-               },
-               DEFAULT => -102,
-               GOTOS => {
-                       'identifier' => 45,
-                       'anytext' => 119,
-                       'text' => 46,
-                       'constant' => 43
-               }
+               DEFAULT => -34
        },
        {#State 80
                ACTIONS => {
-                       'CONSTANT' => 44,
-                       'TEXT' => 13,
-                       'IDENTIFIER' => 22
+                       'IDENTIFIER' => 26
                },
-               DEFAULT => -102,
                GOTOS => {
-                       'identifier' => 45,
-                       'anytext' => 115,
-                       'text' => 46,
-                       'constant' => 43,
-                       'commalisttext' => 120
+                       'identifier' => 110
                }
        },
        {#State 81
-               ACTIONS => {
-                       'CONSTANT' => 44,
-                       'TEXT' => 13,
-                       'IDENTIFIER' => 22
-               },
-               DEFAULT => -102,
+               DEFAULT => -72,
                GOTOS => {
-                       'identifier' => 45,
-                       'anytext' => 121,
-                       'text' => 46,
-                       'constant' => 43
+                       'pointers' => 111
                }
        },
        {#State 82
                ACTIONS => {
-                       'CONSTANT' => 44,
-                       'TEXT' => 13,
-                       'IDENTIFIER' => 22
+                       'CONSTANT' => 59,
+                       'TEXT' => 16,
+                       'IDENTIFIER' => 26
                },
-               DEFAULT => -102,
+               DEFAULT => -93,
                GOTOS => {
-                       'identifier' => 45,
-                       'anytext' => 122,
-                       'text' => 46,
-                       'constant' => 43
+                       'identifier' => 60,
+                       'anytext' => 112,
+                       'text' => 61,
+                       'constant' => 58
                }
        },
        {#State 83
                ACTIONS => {
-                       'CONSTANT' => 44,
-                       'TEXT' => 13,
-                       'IDENTIFIER' => 22
+                       'CONSTANT' => 59,
+                       'TEXT' => 16,
+                       'IDENTIFIER' => 26
                },
-               DEFAULT => -102,
+               DEFAULT => -93,
                GOTOS => {
-                       'identifier' => 45,
-                       'anytext' => 123,
-                       'text' => 46,
-                       'constant' => 43
+                       'identifier' => 60,
+                       'anytext' => 113,
+                       'text' => 61,
+                       'constant' => 58
                }
        },
        {#State 84
                ACTIONS => {
-                       'CONSTANT' => 44,
-                       'TEXT' => 13,
-                       'IDENTIFIER' => 22
+                       'CONSTANT' => 59,
+                       'TEXT' => 16,
+                       'IDENTIFIER' => 26
                },
-               DEFAULT => -102,
+               DEFAULT => -93,
                GOTOS => {
-                       'identifier' => 45,
-                       'anytext' => 124,
-                       'text' => 46,
-                       'constant' => 43
+                       'identifier' => 60,
+                       'anytext' => 114,
+                       'text' => 61,
+                       'constant' => 58
                }
        },
        {#State 85
-               DEFAULT => -97
+               ACTIONS => {
+                       'CONSTANT' => 59,
+                       'TEXT' => 16,
+                       'IDENTIFIER' => 26
+               },
+               DEFAULT => -93,
+               GOTOS => {
+                       'identifier' => 60,
+                       'anytext' => 115,
+                       'text' => 61,
+                       'constant' => 58
+               }
        },
        {#State 86
-               DEFAULT => -127
+               ACTIONS => {
+                       'CONSTANT' => 59,
+                       'TEXT' => 16,
+                       'IDENTIFIER' => 26
+               },
+               DEFAULT => -93,
+               GOTOS => {
+                       'identifier' => 60,
+                       'anytext' => 116,
+                       'text' => 61,
+                       'constant' => 58
+               }
        },
        {#State 87
-               DEFAULT => -12
+               ACTIONS => {
+                       'CONSTANT' => 59,
+                       'TEXT' => 16,
+                       'IDENTIFIER' => 26
+               },
+               DEFAULT => -93,
+               GOTOS => {
+                       'identifier' => 60,
+                       'anytext' => 117,
+                       'text' => 61,
+                       'constant' => 58
+               }
        },
        {#State 88
                ACTIONS => {
-                       ";" => 125
+                       'CONSTANT' => 59,
+                       'TEXT' => 16,
+                       'IDENTIFIER' => 26
+               },
+               DEFAULT => -93,
+               GOTOS => {
+                       'identifier' => 60,
+                       'anytext' => 118,
+                       'text' => 61,
+                       'constant' => 58
                }
        },
        {#State 89
                ACTIONS => {
-                       'IDENTIFIER' => 22,
-                       "signed" => 100,
-                       "union" => 50,
-                       "enum" => 63,
-                       "bitmap" => 64,
-                       'void' => 95,
-                       "unsigned" => 101,
-                       "[" => 17,
-                       "struct" => 61
+                       'CONSTANT' => 59,
+                       'TEXT' => 16,
+                       'IDENTIFIER' => 26
                },
+               DEFAULT => -93,
                GOTOS => {
-                       'existingtype' => 99,
-                       'bitmap' => 65,
-                       'usertype' => 96,
-                       'identifier' => 97,
-                       'struct' => 57,
-                       'enum' => 59,
-                       'type' => 126,
-                       'union' => 68,
-                       'sign' => 98
+                       'identifier' => 60,
+                       'anytext' => 119,
+                       'text' => 61,
+                       'constant' => 58,
+                       'commalisttext' => 120
                }
        },
        {#State 90
-               DEFAULT => -122
+               ACTIONS => {
+                       'CONSTANT' => 59,
+                       'TEXT' => 16,
+                       'IDENTIFIER' => 26
+               },
+               DEFAULT => -93,
+               GOTOS => {
+                       'identifier' => 60,
+                       'anytext' => 121,
+                       'text' => 61,
+                       'constant' => 58
+               }
        },
        {#State 91
                ACTIONS => {
-                       "{" => 128
+                       'CONSTANT' => 59,
+                       'TEXT' => 16,
+                       'IDENTIFIER' => 26
                },
-               DEFAULT => -77,
+               DEFAULT => -93,
                GOTOS => {
-                       'union_body' => 129,
-                       'opt_union_body' => 127
+                       'identifier' => 60,
+                       'anytext' => 122,
+                       'text' => 61,
+                       'constant' => 58
                }
        },
        {#State 92
                ACTIONS => {
-                       ";" => 86
+                       'CONSTANT' => 59,
+                       'TEXT' => 16,
+                       'IDENTIFIER' => 26
                },
-               DEFAULT => -126,
+               DEFAULT => -93,
                GOTOS => {
-                       'optional_semicolon' => 130
+                       'identifier' => 60,
+                       'anytext' => 123,
+                       'text' => 61,
+                       'constant' => 58
                }
        },
        {#State 93
-               DEFAULT => -19
+               ACTIONS => {
+                       'CONSTANT' => 59,
+                       'TEXT' => 16,
+                       'IDENTIFIER' => 26
+               },
+               DEFAULT => -93,
+               GOTOS => {
+                       'identifier' => 60,
+                       'anytext' => 119,
+                       'text' => 61,
+                       'constant' => 58,
+                       'commalisttext' => 124
+               }
        },
        {#State 94
-               DEFAULT => -40
+               ACTIONS => {
+                       'CONSTANT' => 59,
+                       'TEXT' => 16,
+                       'IDENTIFIER' => 26
+               },
+               DEFAULT => -93,
+               GOTOS => {
+                       'identifier' => 60,
+                       'anytext' => 125,
+                       'text' => 61,
+                       'constant' => 58
+               }
        },
        {#State 95
-               DEFAULT => -48
+               ACTIONS => {
+                       'CONSTANT' => 59,
+                       'TEXT' => 16,
+                       'IDENTIFIER' => 26
+               },
+               DEFAULT => -93,
+               GOTOS => {
+                       'identifier' => 60,
+                       'anytext' => 126,
+                       'text' => 61,
+                       'constant' => 58
+               }
        },
        {#State 96
-               DEFAULT => -46
+               ACTIONS => {
+                       'CONSTANT' => 59,
+                       'TEXT' => 16,
+                       'IDENTIFIER' => 26
+               },
+               DEFAULT => -93,
+               GOTOS => {
+                       'identifier' => 60,
+                       'anytext' => 127,
+                       'text' => 61,
+                       'constant' => 58
+               }
        },
        {#State 97
-               DEFAULT => -45
-       },
-       {#State 98
                ACTIONS => {
-                       'IDENTIFIER' => 22
+                       'CONSTANT' => 59,
+                       'TEXT' => 16,
+                       'IDENTIFIER' => 26
                },
+               DEFAULT => -93,
                GOTOS => {
-                       'identifier' => 131
+                       'identifier' => 60,
+                       'anytext' => 128,
+                       'text' => 61,
+                       'constant' => 58
                }
        },
+       {#State 98
+               DEFAULT => -88
+       },
        {#State 99
-               DEFAULT => -47
+               DEFAULT => -118
        },
        {#State 100
-               DEFAULT => -41
+               DEFAULT => -13
        },
        {#State 101
-               DEFAULT => -42
-       },
-       {#State 102
                ACTIONS => {
-                       'IDENTIFIER' => 22
-               },
-               GOTOS => {
-                       'identifier' => 132
+                       ";" => 129
                }
        },
+       {#State 102
+               DEFAULT => -16
+       },
        {#State 103
                ACTIONS => {
-                       "union" => 133,
-                       "enum" => 138,
-                       "bitmap" => 139,
-                       "[" => 17
+                       'IDENTIFIER' => 26
                },
                GOTOS => {
-                       'decl_enum' => 134,
-                       'decl_bitmap' => 135,
-                       'decl_type' => 137,
-                       'decl_union' => 136
+                       'identifier' => 130
                }
        },
        {#State 104
-               DEFAULT => -81,
-               GOTOS => {
-                       'pointers' => 140
-               }
+               DEFAULT => -113
        },
        {#State 105
                ACTIONS => {
-                       "{" => 142
+                       "{" => 132
                },
-               DEFAULT => -67,
+               DEFAULT => -68,
                GOTOS => {
-                       'struct_body' => 141,
-                       'opt_struct_body' => 143
+                       'union_body' => 133,
+                       'opt_union_body' => 131
                }
        },
        {#State 106
-               ACTIONS => {
-                       "{" => 144
-               },
-               DEFAULT => -50,
-               GOTOS => {
-                       'opt_enum_body' => 146,
-                       'enum_body' => 145
-               }
+               DEFAULT => -35
        },
        {#State 107
                ACTIONS => {
-                       "{" => 148
+                       "{" => 135
                },
                DEFAULT => -58,
                GOTOS => {
-                       'bitmap_body' => 149,
-                       'opt_bitmap_body' => 147
+                       'struct_body' => 134,
+                       'opt_struct_body' => 136
                }
        },
        {#State 108
                ACTIONS => {
-                       "-" => 70,
-                       ":" => 69,
-                       "<" => 71,
-                       "+" => 73,
-                       "~" => 72,
-                       "*" => 74,
-                       "?" => 75,
-                       "{" => 76,
-                       "&" => 77,
-                       "/" => 78,
-                       "=" => 79,
-                       "(" => 80,
-                       "|" => 81,
-                       "." => 82,
-                       ">" => 83
+                       "{" => 137
                },
-               DEFAULT => -115
+               DEFAULT => -41,
+               GOTOS => {
+                       'opt_enum_body' => 139,
+                       'enum_body' => 138
+               }
        },
        {#State 109
                ACTIONS => {
-                       ":" => 69,
-                       "<" => 71,
-                       "~" => 72,
-                       "?" => 75,
-                       "{" => 76,
-                       "=" => 79
+                       "{" => 141
                },
-               DEFAULT => -106
+               DEFAULT => -49,
+               GOTOS => {
+                       'bitmap_body' => 142,
+                       'opt_bitmap_body' => 140
+               }
        },
        {#State 110
                ACTIONS => {
-                       "-" => 70,
-                       ":" => 69,
-                       "<" => 71,
-                       "+" => 73,
-                       "~" => 72,
-                       "*" => 74,
-                       "?" => 75,
-                       "{" => 76,
-                       "&" => 77,
-                       "/" => 78,
-                       "=" => 79,
-                       "(" => 80,
-                       "|" => 81,
-                       "." => 82,
-                       ">" => 83
-               },
-               DEFAULT => -110
+                       "(" => 143
+               }
        },
        {#State 111
                ACTIONS => {
-                       "-" => 70,
-                       ":" => 69,
-                       "<" => 71,
-                       "+" => 73,
-                       "~" => 72,
-                       "*" => 74,
-                       "?" => 75,
-                       "{" => 76,
-                       "&" => 77,
-                       "/" => 78,
-                       "=" => 79,
-                       "(" => 80,
-                       "|" => 81,
-                       "." => 82,
-                       ">" => 83
+                       'IDENTIFIER' => 26,
+                       "*" => 145
                },
-               DEFAULT => -118
+               GOTOS => {
+                       'identifier' => 144
+               }
        },
        {#State 112
                ACTIONS => {
-                       ":" => 69,
-                       "<" => 71,
-                       "~" => 72,
-                       "?" => 75,
-                       "{" => 76,
-                       "=" => 79
+                       "-" => 83,
+                       ":" => 82,
+                       "<" => 84,
+                       "+" => 86,
+                       "~" => 85,
+                       "*" => 87,
+                       "?" => 88,
+                       "{" => 89,
+                       "&" => 90,
+                       "/" => 91,
+                       "=" => 92,
+                       "(" => 93,
+                       "|" => 94,
+                       "." => 95,
+                       ">" => 96
                },
-               DEFAULT => -117
+               DEFAULT => -106
        },
        {#State 113
                ACTIONS => {
-                       ":" => 69,
-                       "<" => 71,
-                       "~" => 72,
-                       "?" => 75,
-                       "{" => 76,
-                       "=" => 79
+                       ":" => 82,
+                       "<" => 84,
+                       "~" => 85,
+                       "?" => 88,
+                       "{" => 89,
+                       "=" => 92
                },
-               DEFAULT => -108
+               DEFAULT => -97
        },
        {#State 114
                ACTIONS => {
-                       "-" => 70,
-                       ":" => 69,
-                       "<" => 71,
-                       "+" => 73,
-                       "~" => 72,
-                       "*" => 74,
-                       "?" => 75,
-                       "{" => 76,
-                       "&" => 77,
-                       "/" => 78,
-                       "=" => 79,
-                       "(" => 80,
-                       "|" => 81,
-                       "." => 82,
-                       ">" => 83
-               },
-               DEFAULT => -114
+                       "-" => 83,
+                       ":" => 82,
+                       "<" => 84,
+                       "+" => 86,
+                       "~" => 85,
+                       "*" => 87,
+                       "?" => 88,
+                       "{" => 89,
+                       "&" => 90,
+                       "/" => 91,
+                       "=" => 92,
+                       "(" => 93,
+                       "|" => 94,
+                       "." => 95,
+                       ">" => 96
+               },
+               DEFAULT => -101
        },
        {#State 115
                ACTIONS => {
-                       "-" => 70,
-                       ":" => 69,
-                       "<" => 71,
-                       "+" => 73,
-                       "~" => 72,
-                       "*" => 74,
-                       "?" => 75,
-                       "{" => 76,
-                       "&" => 77,
-                       "/" => 78,
-                       "=" => 79,
-                       "(" => 80,
-                       "|" => 81,
-                       "." => 82,
-                       ">" => 83
+                       "-" => 83,
+                       ":" => 82,
+                       "<" => 84,
+                       "+" => 86,
+                       "~" => 85,
+                       "*" => 87,
+                       "?" => 88,
+                       "{" => 89,
+                       "&" => 90,
+                       "/" => 91,
+                       "=" => 92,
+                       "(" => 93,
+                       "|" => 94,
+                       "." => 95,
+                       ">" => 96
                },
-               DEFAULT => -100
+               DEFAULT => -109
        },
        {#State 116
                ACTIONS => {
-                       "}" => 150,
-                       "," => 151
-               }
+                       ":" => 82,
+                       "<" => 84,
+                       "~" => 85,
+                       "?" => 88,
+                       "{" => 89,
+                       "=" => 92
+               },
+               DEFAULT => -108
        },
        {#State 117
                ACTIONS => {
-                       ":" => 69,
-                       "<" => 71,
-                       "~" => 72,
-                       "?" => 75,
-                       "{" => 76,
-                       "=" => 79
+                       ":" => 82,
+                       "<" => 84,
+                       "~" => 85,
+                       "?" => 88,
+                       "{" => 89,
+                       "=" => 92
                },
-               DEFAULT => -112
+               DEFAULT => -99
        },
        {#State 118
                ACTIONS => {
-                       ":" => 69,
-                       "<" => 71,
-                       "~" => 72,
-                       "?" => 75,
-                       "{" => 76,
-                       "=" => 79
+                       "-" => 83,
+                       ":" => 82,
+                       "<" => 84,
+                       "+" => 86,
+                       "~" => 85,
+                       "*" => 87,
+                       "?" => 88,
+                       "{" => 89,
+                       "&" => 90,
+                       "/" => 91,
+                       "=" => 92,
+                       "(" => 93,
+                       "|" => 94,
+                       "." => 95,
+                       ">" => 96
                },
-               DEFAULT => -113
+               DEFAULT => -105
        },
        {#State 119
                ACTIONS => {
-                       "-" => 70,
-                       ":" => 69,
-                       "<" => 71,
-                       "+" => 73,
-                       "~" => 72,
-                       "*" => 74,
-                       "?" => 75,
-                       "{" => 76,
-                       "&" => 77,
-                       "/" => 78,
-                       "=" => 79,
-                       "(" => 80,
-                       "|" => 81,
-                       "." => 82,
-                       ">" => 83
+                       "-" => 83,
+                       ":" => 82,
+                       "<" => 84,
+                       "+" => 86,
+                       "~" => 85,
+                       "*" => 87,
+                       "?" => 88,
+                       "{" => 89,
+                       "&" => 90,
+                       "/" => 91,
+                       "=" => 92,
+                       "(" => 93,
+                       "|" => 94,
+                       "." => 95,
+                       ">" => 96
                },
-               DEFAULT => -116
+               DEFAULT => -91
        },
        {#State 120
                ACTIONS => {
-                       "," => 151,
-                       ")" => 152
+                       "}" => 146,
+                       "," => 147
                }
        },
        {#State 121
                ACTIONS => {
-                       ":" => 69,
-                       "<" => 71,
-                       "~" => 72,
-                       "?" => 75,
-                       "{" => 76,
-                       "=" => 79
+                       ":" => 82,
+                       "<" => 84,
+                       "~" => 85,
+                       "?" => 88,
+                       "{" => 89,
+                       "=" => 92
                },
-               DEFAULT => -111
+               DEFAULT => -103
        },
        {#State 122
                ACTIONS => {
-                       ":" => 69,
-                       "<" => 71,
-                       "~" => 72,
-                       "?" => 75,
-                       "{" => 76,
-                       "=" => 79
+                       ":" => 82,
+                       "<" => 84,
+                       "~" => 85,
+                       "?" => 88,
+                       "{" => 89,
+                       "=" => 92
                },
-               DEFAULT => -107
+               DEFAULT => -104
        },
        {#State 123
                ACTIONS => {
-                       ":" => 69,
-                       "<" => 71,
-                       "~" => 72,
-                       "?" => 75,
-                       "{" => 76,
-                       "=" => 79
+                       "-" => 83,
+                       ":" => 82,
+                       "<" => 84,
+                       "+" => 86,
+                       "~" => 85,
+                       "*" => 87,
+                       "?" => 88,
+                       "{" => 89,
+                       "&" => 90,
+                       "/" => 91,
+                       "=" => 92,
+                       "(" => 93,
+                       "|" => 94,
+                       "." => 95,
+                       ">" => 96
                },
-               DEFAULT => -109
+               DEFAULT => -107
        },
        {#State 124
                ACTIONS => {
-                       "-" => 70,
-                       ":" => 69,
-                       "<" => 71,
-                       "+" => 73,
-                       "~" => 72,
-                       "*" => 74,
-                       "?" => 75,
-                       "{" => 76,
-                       "&" => 77,
-                       "/" => 78,
-                       "=" => 79,
-                       "(" => 80,
-                       "|" => 81,
-                       "." => 82,
-                       ">" => 83
-               },
-               DEFAULT => -99
+                       "," => 147,
+                       ")" => 148
+               }
        },
        {#State 125
-               DEFAULT => -14
+               ACTIONS => {
+                       ":" => 82,
+                       "<" => 84,
+                       "~" => 85,
+                       "?" => 88,
+                       "{" => 89,
+                       "=" => 92
+               },
+               DEFAULT => -102
        },
        {#State 126
                ACTIONS => {
-                       'IDENTIFIER' => 22
+                       ":" => 82,
+                       "<" => 84,
+                       "~" => 85,
+                       "?" => 88,
+                       "{" => 89,
+                       "=" => 92
                },
-               GOTOS => {
-                       'identifier' => 153
-               }
+               DEFAULT => -98
        },
        {#State 127
-               DEFAULT => -79
+               ACTIONS => {
+                       ":" => 82,
+                       "<" => 84,
+                       "~" => 85,
+                       "?" => 88,
+                       "{" => 89,
+                       "=" => 92
+               },
+               DEFAULT => -100
        },
        {#State 128
-               DEFAULT => -74,
-               GOTOS => {
-                       'union_elements' => 154
-               }
+               ACTIONS => {
+                       "-" => 83,
+                       ":" => 82,
+                       "<" => 84,
+                       "+" => 86,
+                       "~" => 85,
+                       "*" => 87,
+                       "?" => 88,
+                       "{" => 89,
+                       "&" => 90,
+                       "/" => 91,
+                       "=" => 92,
+                       "(" => 93,
+                       "|" => 94,
+                       "." => 95,
+                       ">" => 96
+               },
+               DEFAULT => -90
        },
        {#State 129
-               DEFAULT => -78
+               DEFAULT => -15
        },
        {#State 130
-               DEFAULT => -15
+               ACTIONS => {
+                       "[" => 149
+               },
+               DEFAULT => -80,
+               GOTOS => {
+                       'array_len' => 150
+               }
        },
        {#State 131
-               DEFAULT => -44
+               DEFAULT => -70
        },
        {#State 132
-               ACTIONS => {
-                       "(" => 155
+               DEFAULT => -65,
+               GOTOS => {
+                       'union_elements' => 151
                }
        },
        {#State 133
-               DEFAULT => -34
+               DEFAULT => -69
        },
        {#State 134
-               DEFAULT => -29
+               DEFAULT => -59
        },
        {#State 135
-               DEFAULT => -30
+               DEFAULT => -74,
+               GOTOS => {
+                       'element_list1' => 152
+               }
        },
        {#State 136
-               DEFAULT => -31
+               DEFAULT => -60
        },
        {#State 137
                ACTIONS => {
-                       'IDENTIFIER' => 22
+                       'IDENTIFIER' => 26
                },
                GOTOS => {
-                       'identifier' => 156
+                       'identifier' => 153,
+                       'enum_element' => 154,
+                       'enum_elements' => 155
                }
        },
        {#State 138
-               DEFAULT => -32
+               DEFAULT => -42
        },
        {#State 139
-               DEFAULT => -33
+               DEFAULT => -43
        },
        {#State 140
+               DEFAULT => -51
+       },
+       {#State 141
                ACTIONS => {
-                       'IDENTIFIER' => 22,
-                       "*" => 158
+                       'IDENTIFIER' => 26
                },
+               DEFAULT => -54,
                GOTOS => {
-                       'identifier' => 157
+                       'identifier' => 158,
+                       'bitmap_element' => 157,
+                       'bitmap_elements' => 156,
+                       'opt_bitmap_elements' => 159
                }
        },
-       {#State 141
-               DEFAULT => -68
-       },
        {#State 142
+               DEFAULT => -50
+       },
+       {#State 143
+               ACTIONS => {
+                       "," => -76,
+                       "void" => 163,
+                       ")" => -76
+               },
                DEFAULT => -83,
                GOTOS => {
-                       'element_list1' => 159
+                       'base_element' => 160,
+                       'element_list2' => 162,
+                       'property_list' => 161
                }
        },
-       {#State 143
-               DEFAULT => -69
-       },
        {#State 144
                ACTIONS => {
-                       'IDENTIFIER' => 22
+                       "[" => 149,
+                       "=" => 165
                },
                GOTOS => {
-                       'identifier' => 160,
-                       'enum_element' => 161,
-                       'enum_elements' => 162
+                       'array_len' => 164
                }
        },
        {#State 145
-               DEFAULT => -51
+               DEFAULT => -73
        },
        {#State 146
-               DEFAULT => -52
-       },
-       {#State 147
-               DEFAULT => -60
-       },
-       {#State 148
                ACTIONS => {
-                       'IDENTIFIER' => 22
+                       'CONSTANT' => 59,
+                       'TEXT' => 16,
+                       'IDENTIFIER' => 26
                },
-               DEFAULT => -63,
+               DEFAULT => -93,
                GOTOS => {
-                       'identifier' => 165,
-                       'bitmap_element' => 164,
-                       'bitmap_elements' => 163,
-                       'opt_bitmap_elements' => 166
+                       'identifier' => 60,
+                       'anytext' => 166,
+                       'text' => 61,
+                       'constant' => 58
                }
        },
-       {#State 149
-               DEFAULT => -59
-       },
-       {#State 150
+       {#State 147
                ACTIONS => {
-                       'CONSTANT' => 44,
-                       'TEXT' => 13,
-                       'IDENTIFIER' => 22
+                       'CONSTANT' => 59,
+                       'TEXT' => 16,
+                       'IDENTIFIER' => 26
                },
-               DEFAULT => -102,
+               DEFAULT => -93,
                GOTOS => {
-                       'identifier' => 45,
+                       'identifier' => 60,
                        'anytext' => 167,
-                       'text' => 46,
-                       'constant' => 43
+                       'text' => 61,
+                       'constant' => 58
                }
        },
-       {#State 151
+       {#State 148
                ACTIONS => {
-                       'CONSTANT' => 44,
-                       'TEXT' => 13,
-                       'IDENTIFIER' => 22
+                       'CONSTANT' => 59,
+                       'TEXT' => 16,
+                       'IDENTIFIER' => 26
                },
-               DEFAULT => -102,
+               DEFAULT => -93,
                GOTOS => {
-                       'identifier' => 45,
+                       'identifier' => 60,
                        'anytext' => 168,
-                       'text' => 46,
-                       'constant' => 43
+                       'text' => 61,
+                       'constant' => 58
                }
        },
-       {#State 152
+       {#State 149
                ACTIONS => {
-                       'CONSTANT' => 44,
-                       'TEXT' => 13,
-                       'IDENTIFIER' => 22
+                       'CONSTANT' => 59,
+                       'TEXT' => 16,
+                       "]" => 169,
+                       'IDENTIFIER' => 26
                },
-               DEFAULT => -102,
+               DEFAULT => -93,
                GOTOS => {
-                       'identifier' => 45,
-                       'anytext' => 169,
-                       'text' => 46,
-                       'constant' => 43
+                       'identifier' => 60,
+                       'anytext' => 170,
+                       'text' => 61,
+                       'constant' => 58
                }
        },
-       {#State 153
+       {#State 150
                ACTIONS => {
-                       "[" => 170
-               },
-               DEFAULT => -89,
-               GOTOS => {
-                       'array_len' => 171
+                       ";" => 171
                }
        },
-       {#State 154
+       {#State 151
                ACTIONS => {
                        "}" => 172
                },
-               DEFAULT => -92,
+               DEFAULT => -83,
                GOTOS => {
                        'optional_base_element' => 174,
                        'property_list' => 173
                }
        },
-       {#State 155
+       {#State 152
                ACTIONS => {
-                       "," => -85,
-                       "void" => 178,
-                       ")" => -85
+                       "}" => 175
                },
-               DEFAULT => -92,
+               DEFAULT => -83,
                GOTOS => {
-                       'base_element' => 175,
-                       'element_list2' => 177,
-                       'property_list' => 176
+                       'base_element' => 176,
+                       'property_list' => 161
                }
        },
-       {#State 156
+       {#State 153
+               ACTIONS => {
+                       "=" => 177
+               },
+               DEFAULT => -46
+       },
+       {#State 154
+               DEFAULT => -44
+       },
+       {#State 155
                ACTIONS => {
-                       ";" => 179
+                       "}" => 178,
+                       "," => 179
                }
        },
-       {#State 157
+       {#State 156
                ACTIONS => {
-                       "[" => 170,
-                       "=" => 181
+                       "," => 180
                },
-               GOTOS => {
-                       'array_len' => 180
-               }
+               DEFAULT => -55
+       },
+       {#State 157
+               DEFAULT => -52
        },
        {#State 158
-               DEFAULT => -82
+               ACTIONS => {
+                       "=" => 181
+               }
        },
        {#State 159
                ACTIONS => {
                        "}" => 182
-               },
-               DEFAULT => -92,
-               GOTOS => {
-                       'base_element' => 183,
-                       'property_list' => 176
                }
        },
        {#State 160
-               ACTIONS => {
-                       "=" => 184
-               },
-               DEFAULT => -55
+               DEFAULT => -78
        },
        {#State 161
-               DEFAULT => -53
+               ACTIONS => {
+                       'IDENTIFIER' => 26,
+                       "signed" => 75,
+                       'void' => 69,
+                       "unsigned" => 79,
+                       "[" => 20
+               },
+               DEFAULT => -83,
+               GOTOS => {
+                       'existingtype' => 76,
+                       'bitmap' => 44,
+                       'usertype' => 71,
+                       'property_list' => 70,
+                       'identifier' => 72,
+                       'struct' => 49,
+                       'enum' => 52,
+                       'type' => 183,
+                       'union' => 54,
+                       'sign' => 73
+               }
        },
        {#State 162
                ACTIONS => {
-                       "}" => 185,
-                       "," => 186
+                       "," => 184,
+                       ")" => 185
                }
        },
        {#State 163
-               ACTIONS => {
-                       "," => 187
-               },
-               DEFAULT => -64
+               DEFAULT => -77
        },
        {#State 164
-               DEFAULT => -61
+               ACTIONS => {
+                       "=" => 186
+               }
        },
        {#State 165
                ACTIONS => {
-                       "=" => 188
+                       'CONSTANT' => 59,
+                       'TEXT' => 16,
+                       'IDENTIFIER' => 26
+               },
+               DEFAULT => -93,
+               GOTOS => {
+                       'identifier' => 60,
+                       'anytext' => 187,
+                       'text' => 61,
+                       'constant' => 58
                }
        },
        {#State 166
                ACTIONS => {
-                       "}" => 189
-               }
+                       "-" => 83,
+                       ":" => 82,
+                       "<" => 84,
+                       "+" => 86,
+                       "~" => 85,
+                       "*" => 87,
+                       "?" => 88,
+                       "{" => 89,
+                       "&" => 90,
+                       "/" => 91,
+                       "=" => 92,
+                       "(" => 93,
+                       "|" => 94,
+                       "." => 95,
+                       ">" => 96
+               },
+               DEFAULT => -111
        },
        {#State 167
                ACTIONS => {
-                       "-" => 70,
-                       ":" => 69,
-                       "<" => 71,
-                       "+" => 73,
-                       "~" => 72,
-                       "*" => 74,
-                       "?" => 75,
-                       "{" => 76,
-                       "&" => 77,
-                       "/" => 78,
-                       "=" => 79,
-                       "(" => 80,
-                       "|" => 81,
-                       "." => 82,
-                       ">" => 83
-               },
-               DEFAULT => -120
+                       "-" => 83,
+                       ":" => 82,
+                       "<" => 84,
+                       "+" => 86,
+                       "~" => 85,
+                       "*" => 87,
+                       "?" => 88,
+                       "{" => 89,
+                       "&" => 90,
+                       "/" => 91,
+                       "=" => 92,
+                       "(" => 93,
+                       "|" => 94,
+                       "." => 95,
+                       ">" => 96
+               },
+               DEFAULT => -92
        },
        {#State 168
                ACTIONS => {
-                       "-" => 70,
-                       ":" => 69,
-                       "<" => 71,
-                       "+" => 73,
-                       "~" => 72,
-                       "*" => 74,
-                       "?" => 75,
-                       "{" => 76,
-                       "&" => 77,
-                       "/" => 78,
-                       "=" => 79,
-                       "(" => 80,
-                       "|" => 81,
-                       "." => 82,
-                       ">" => 83
+                       ":" => 82,
+                       "<" => 84,
+                       "~" => 85,
+                       "?" => 88,
+                       "{" => 89,
+                       "=" => 92
                },
-               DEFAULT => -101
+               DEFAULT => -110
        },
        {#State 169
                ACTIONS => {
-                       ":" => 69,
-                       "<" => 71,
-                       "~" => 72,
-                       "?" => 75,
-                       "{" => 76,
-                       "=" => 79
+                       "[" => 149
                },
-               DEFAULT => -119
+               DEFAULT => -80,
+               GOTOS => {
+                       'array_len' => 188
+               }
        },
        {#State 170
                ACTIONS => {
-                       'CONSTANT' => 44,
-                       'TEXT' => 13,
-                       "]" => 190,
-                       'IDENTIFIER' => 22
-               },
-               DEFAULT => -102,
-               GOTOS => {
-                       'identifier' => 45,
-                       'anytext' => 191,
-                       'text' => 46,
-                       'constant' => 43
+                       "-" => 83,
+                       ":" => 82,
+                       "?" => 88,
+                       "<" => 84,
+                       "+" => 86,
+                       "~" => 85,
+                       "&" => 90,
+                       "{" => 89,
+                       "/" => 91,
+                       "=" => 92,
+                       "|" => 94,
+                       "(" => 93,
+                       "*" => 87,
+                       "." => 95,
+                       "]" => 189,
+                       ">" => 96
                }
        },
        {#State 171
-               ACTIONS => {
-                       ";" => 192
-               }
+               DEFAULT => -27
        },
        {#State 172
-               DEFAULT => -76
+               DEFAULT => -67
        },
        {#State 173
                ACTIONS => {
-                       "[" => 17
+                       "[" => 20
                },
-               DEFAULT => -92,
+               DEFAULT => -83,
                GOTOS => {
-                       'base_or_empty' => 193,
-                       'base_element' => 194,
-                       'empty_element' => 195,
-                       'property_list' => 196
+                       'base_or_empty' => 190,
+                       'base_element' => 191,
+                       'empty_element' => 192,
+                       'property_list' => 193
                }
        },
        {#State 174
-               DEFAULT => -75
+               DEFAULT => -66
        },
        {#State 175
-               DEFAULT => -87
+               DEFAULT => -57
        },
        {#State 176
                ACTIONS => {
-                       'IDENTIFIER' => 22,
-                       "signed" => 100,
-                       "union" => 50,
-                       "enum" => 63,
-                       "bitmap" => 64,
-                       'void' => 95,
-                       "unsigned" => 101,
-                       "[" => 17,
-                       "struct" => 61
-               },
-               DEFAULT => -43,
-               GOTOS => {
-                       'existingtype' => 99,
-                       'bitmap' => 65,
-                       'usertype' => 96,
-                       'identifier' => 97,
-                       'struct' => 57,
-                       'enum' => 59,
-                       'type' => 197,
-                       'union' => 68,
-                       'sign' => 98
+                       ";" => 194
                }
        },
        {#State 177
                ACTIONS => {
-                       "," => 198,
-                       ")" => 199
+                       'CONSTANT' => 59,
+                       'TEXT' => 16,
+                       'IDENTIFIER' => 26
+               },
+               DEFAULT => -93,
+               GOTOS => {
+                       'identifier' => 60,
+                       'anytext' => 195,
+                       'text' => 61,
+                       'constant' => 58
                }
        },
        {#State 178
-               DEFAULT => -86
+               DEFAULT => -40
        },
        {#State 179
-               DEFAULT => -28
+               ACTIONS => {
+                       'IDENTIFIER' => 26
+               },
+               GOTOS => {
+                       'identifier' => 153,
+                       'enum_element' => 196
+               }
        },
        {#State 180
                ACTIONS => {
-                       "=" => 200
+                       'IDENTIFIER' => 26
+               },
+               GOTOS => {
+                       'identifier' => 158,
+                       'bitmap_element' => 197
                }
        },
        {#State 181
                ACTIONS => {
-                       'CONSTANT' => 44,
-                       'TEXT' => 13,
-                       'IDENTIFIER' => 22
+                       'CONSTANT' => 59,
+                       'TEXT' => 16,
+                       'IDENTIFIER' => 26
                },
-               DEFAULT => -102,
+               DEFAULT => -93,
                GOTOS => {
-                       'identifier' => 45,
-                       'anytext' => 201,
-                       'text' => 46,
-                       'constant' => 43
+                       'identifier' => 60,
+                       'anytext' => 198,
+                       'text' => 61,
+                       'constant' => 58
                }
        },
        {#State 182
-               DEFAULT => -66
+               DEFAULT => -48
        },
        {#State 183
-               ACTIONS => {
-                       ";" => 202
+               DEFAULT => -72,
+               GOTOS => {
+                       'pointers' => 199
                }
        },
        {#State 184
-               ACTIONS => {
-                       'CONSTANT' => 44,
-                       'TEXT' => 13,
-                       'IDENTIFIER' => 22
-               },
-               DEFAULT => -102,
+               DEFAULT => -83,
                GOTOS => {
-                       'identifier' => 45,
-                       'anytext' => 203,
-                       'text' => 46,
-                       'constant' => 43
+                       'base_element' => 200,
+                       'property_list' => 161
                }
        },
        {#State 185
-               DEFAULT => -49
+               ACTIONS => {
+                       ";" => 201
+               }
        },
        {#State 186
                ACTIONS => {
-                       'IDENTIFIER' => 22
+                       'CONSTANT' => 59,
+                       'TEXT' => 16,
+                       'IDENTIFIER' => 26
                },
+               DEFAULT => -93,
                GOTOS => {
-                       'identifier' => 160,
-                       'enum_element' => 204
+                       'identifier' => 60,
+                       'anytext' => 202,
+                       'text' => 61,
+                       'constant' => 58
                }
        },
        {#State 187
                ACTIONS => {
-                       'IDENTIFIER' => 22
-               },
-               GOTOS => {
-                       'identifier' => 165,
-                       'bitmap_element' => 205
+                       "-" => 83,
+                       ":" => 82,
+                       "?" => 88,
+                       "<" => 84,
+                       ";" => 203,
+                       "+" => 86,
+                       "~" => 85,
+                       "&" => 90,
+                       "{" => 89,
+                       "/" => 91,
+                       "=" => 92,
+                       "|" => 94,
+                       "(" => 93,
+                       "*" => 87,
+                       "." => 95,
+                       ">" => 96
                }
        },
        {#State 188
-               ACTIONS => {
-                       'CONSTANT' => 44,
-                       'TEXT' => 13,
-                       'IDENTIFIER' => 22
-               },
-               DEFAULT => -102,
-               GOTOS => {
-                       'identifier' => 45,
-                       'anytext' => 206,
-                       'text' => 46,
-                       'constant' => 43
-               }
+               DEFAULT => -81
        },
        {#State 189
-               DEFAULT => -57
-       },
-       {#State 190
                ACTIONS => {
-                       "[" => 170
+                       "[" => 149
                },
-               DEFAULT => -89,
+               DEFAULT => -80,
                GOTOS => {
-                       'array_len' => 207
+                       'array_len' => 204
                }
        },
+       {#State 190
+               DEFAULT => -64
+       },
        {#State 191
                ACTIONS => {
-                       "-" => 70,
-                       ":" => 69,
-                       "?" => 75,
-                       "<" => 71,
-                       "+" => 73,
-                       "~" => 72,
-                       "&" => 77,
-                       "{" => 76,
-                       "/" => 78,
-                       "=" => 79,
-                       "|" => 81,
-                       "(" => 80,
-                       "*" => 74,
-                       "." => 82,
-                       "]" => 208,
-                       ">" => 83
+                       ";" => 205
                }
        },
        {#State 192
-               DEFAULT => -35
+               DEFAULT => -63
        },
        {#State 193
-               DEFAULT => -73
-       },
-       {#State 194
                ACTIONS => {
-                       ";" => 209
+                       'IDENTIFIER' => 26,
+                       "signed" => 75,
+                       ";" => 206,
+                       'void' => 69,
+                       "unsigned" => 79,
+                       "[" => 20
+               },
+               DEFAULT => -83,
+               GOTOS => {
+                       'existingtype' => 76,
+                       'bitmap' => 44,
+                       'usertype' => 71,
+                       'property_list' => 70,
+                       'identifier' => 72,
+                       'struct' => 49,
+                       'enum' => 52,
+                       'type' => 183,
+                       'union' => 54,
+                       'sign' => 73
                }
        },
+       {#State 194
+               DEFAULT => -75
+       },
        {#State 195
-               DEFAULT => -72
+               ACTIONS => {
+                       "-" => 83,
+                       ":" => 82,
+                       "<" => 84,
+                       "+" => 86,
+                       "~" => 85,
+                       "*" => 87,
+                       "?" => 88,
+                       "{" => 89,
+                       "&" => 90,
+                       "/" => 91,
+                       "=" => 92,
+                       "(" => 93,
+                       "|" => 94,
+                       "." => 95,
+                       ">" => 96
+               },
+               DEFAULT => -47
        },
        {#State 196
-               ACTIONS => {
-                       'IDENTIFIER' => 22,
-                       "signed" => 100,
-                       "union" => 50,
-                       ";" => 210,
-                       "enum" => 63,
-                       "bitmap" => 64,
-                       'void' => 95,
-                       "unsigned" => 101,
-                       "[" => 17,
-                       "struct" => 61
-               },
-               DEFAULT => -43,
-               GOTOS => {
-                       'existingtype' => 99,
-                       'bitmap' => 65,
-                       'usertype' => 96,
-                       'identifier' => 97,
-                       'struct' => 57,
-                       'enum' => 59,
-                       'type' => 197,
-                       'union' => 68,
-                       'sign' => 98
-               }
+               DEFAULT => -45
        },
        {#State 197
-               DEFAULT => -81,
-               GOTOS => {
-                       'pointers' => 211
-               }
+               DEFAULT => -53
        },
        {#State 198
-               DEFAULT => -92,
-               GOTOS => {
-                       'base_element' => 212,
-                       'property_list' => 176
-               }
-       },
-       {#State 199
                ACTIONS => {
-                       ";" => 213
-               }
+                       "-" => 83,
+                       ":" => 82,
+                       "<" => 84,
+                       "+" => 86,
+                       "~" => 85,
+                       "*" => 87,
+                       "?" => 88,
+                       "{" => 89,
+                       "&" => 90,
+                       "/" => 91,
+                       "=" => 92,
+                       "(" => 93,
+                       "|" => 94,
+                       "." => 95,
+                       ">" => 96
+               },
+               DEFAULT => -56
        },
-       {#State 200
+       {#State 199
                ACTIONS => {
-                       'CONSTANT' => 44,
-                       'TEXT' => 13,
-                       'IDENTIFIER' => 22
+                       'IDENTIFIER' => 26,
+                       "*" => 145
                },
-               DEFAULT => -102,
                GOTOS => {
-                       'identifier' => 45,
-                       'anytext' => 214,
-                       'text' => 46,
-                       'constant' => 43
+                       'identifier' => 207
                }
        },
+       {#State 200
+               DEFAULT => -79
+       },
        {#State 201
-               ACTIONS => {
-                       "-" => 70,
-                       ":" => 69,
-                       "?" => 75,
-                       "<" => 71,
-                       ";" => 215,
-                       "+" => 73,
-                       "~" => 72,
-                       "&" => 77,
-                       "{" => 76,
-                       "/" => 78,
-                       "=" => 79,
-                       "|" => 81,
-                       "(" => 80,
-                       "*" => 74,
-                       "." => 82,
-                       ">" => 83
-               }
+               DEFAULT => -26
        },
        {#State 202
-               DEFAULT => -84
+               ACTIONS => {
+                       "-" => 83,
+                       ":" => 82,
+                       "?" => 88,
+                       "<" => 84,
+                       ";" => 208,
+                       "+" => 86,
+                       "~" => 85,
+                       "&" => 90,
+                       "{" => 89,
+                       "/" => 91,
+                       "=" => 92,
+                       "|" => 94,
+                       "(" => 93,
+                       "*" => 87,
+                       "." => 95,
+                       ">" => 96
+               }
        },
        {#State 203
-               ACTIONS => {
-                       "-" => 70,
-                       ":" => 69,
-                       "<" => 71,
-                       "+" => 73,
-                       "~" => 72,
-                       "*" => 74,
-                       "?" => 75,
-                       "{" => 76,
-                       "&" => 77,
-                       "/" => 78,
-                       "=" => 79,
-                       "(" => 80,
-                       "|" => 81,
-                       "." => 82,
-                       ">" => 83
-               },
-               DEFAULT => -56
+               DEFAULT => -24
        },
        {#State 204
-               DEFAULT => -54
+               DEFAULT => -82
        },
        {#State 205
                DEFAULT => -62
        },
        {#State 206
-               ACTIONS => {
-                       "-" => 70,
-                       ":" => 69,
-                       "<" => 71,
-                       "+" => 73,
-                       "~" => 72,
-                       "*" => 74,
-                       "?" => 75,
-                       "{" => 76,
-                       "&" => 77,
-                       "/" => 78,
-                       "=" => 79,
-                       "(" => 80,
-                       "|" => 81,
-                       "." => 82,
-                       ">" => 83
-               },
-               DEFAULT => -65
+               DEFAULT => -61
        },
        {#State 207
-               DEFAULT => -90
-       },
-       {#State 208
-               ACTIONS => {
-                       "[" => 170
-               },
-               DEFAULT => -89,
-               GOTOS => {
-                       'array_len' => 216
-               }
-       },
-       {#State 209
-               DEFAULT => -71
-       },
-       {#State 210
-               DEFAULT => -70
-       },
-       {#State 211
                ACTIONS => {
-                       'IDENTIFIER' => 22,
-                       "*" => 158
+                       "[" => 149
                },
+               DEFAULT => -80,
                GOTOS => {
-                       'identifier' => 217
+                       'array_len' => 209
                }
        },
-       {#State 212
-               DEFAULT => -88
-       },
-       {#State 213
-               DEFAULT => -27
-       },
-       {#State 214
-               ACTIONS => {
-                       "-" => 70,
-                       ":" => 69,
-                       "?" => 75,
-                       "<" => 71,
-                       ";" => 218,
-                       "+" => 73,
-                       "~" => 72,
-                       "&" => 77,
-                       "{" => 76,
-                       "/" => 78,
-                       "=" => 79,
-                       "|" => 81,
-                       "(" => 80,
-                       "*" => 74,
-                       "." => 82,
-                       ">" => 83
-               }
-       },
-       {#State 215
+       {#State 208
                DEFAULT => -25
        },
-       {#State 216
-               DEFAULT => -91
-       },
-       {#State 217
-               ACTIONS => {
-                       "[" => 170
-               },
-               DEFAULT => -89,
-               GOTOS => {
-                       'array_len' => 219
-               }
-       },
-       {#State 218
-               DEFAULT => -26
-       },
-       {#State 219
-               DEFAULT => -80
+       {#State 209
+               DEFAULT => -71
        }
 ],
                                   yyrules  =>
@@ -2316,105 +1772,112 @@ sub
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 7
+                'idl', 2,
+sub
+#line 24 "pidl/idl.yp"
+{ push(@{$_[1]}, $_[2]); $_[1] }
+       ],
+       [#Rule 8
                 'import', 3,
 sub
-#line 26 "pidl/idl.yp"
+#line 27 "pidl/idl.yp"
 {{
                        "TYPE" => "IMPORT", 
                        "PATHS" => $_[2],
-                  "FILE" => $_[0]->YYData->{INPUT_FILENAME},
+                  "FILE" => $_[0]->YYData->{FILE},
                   "LINE" => $_[0]->YYData->{LINE}
                }}
        ],
-       [#Rule 8
+       [#Rule 9
                 'include', 3,
 sub
-#line 33 "pidl/idl.yp"
+#line 34 "pidl/idl.yp"
 {{ 
                        "TYPE" => "INCLUDE", 
                        "PATHS" => $_[2],
-                  "FILE" => $_[0]->YYData->{INPUT_FILENAME},
+                  "FILE" => $_[0]->YYData->{FILE},
                   "LINE" => $_[0]->YYData->{LINE}
                }}
        ],
-       [#Rule 9
+       [#Rule 10
                 'importlib', 3,
 sub
-#line 40 "pidl/idl.yp"
+#line 41 "pidl/idl.yp"
 {{ 
                        "TYPE" => "IMPORTLIB", 
                        "PATHS" => $_[2],
-                  "FILE" => $_[0]->YYData->{INPUT_FILENAME},
+                  "FILE" => $_[0]->YYData->{FILE},
                   "LINE" => $_[0]->YYData->{LINE}
                }}
        ],
-       [#Rule 10
+       [#Rule 11
                 'commalist', 1,
 sub
-#line 49 "pidl/idl.yp"
+#line 50 "pidl/idl.yp"
 { [ $_[1] ] }
        ],
-       [#Rule 11
+       [#Rule 12
                 'commalist', 3,
 sub
-#line 50 "pidl/idl.yp"
+#line 51 "pidl/idl.yp"
 { push(@{$_[1]}, $_[3]); $_[1] }
        ],
-       [#Rule 12
+       [#Rule 13
                 'coclass', 7,
 sub
-#line 54 "pidl/idl.yp"
+#line 55 "pidl/idl.yp"
 {{
                "TYPE" => "COCLASS", 
               "PROPERTIES" => $_[1],
               "NAME" => $_[3],
               "DATA" => $_[5],
-                  "FILE" => $_[0]->YYData->{INPUT_FILENAME},
+                  "FILE" => $_[0]->YYData->{FILE},
                   "LINE" => $_[0]->YYData->{LINE},
           }}
        ],
-       [#Rule 13
+       [#Rule 14
                 'interface_names', 0, undef
        ],
-       [#Rule 14
+       [#Rule 15
                 'interface_names', 4,
 sub
-#line 66 "pidl/idl.yp"
+#line 67 "pidl/idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
-       [#Rule 15
-                'interface', 8,
+       [#Rule 16
+                'interface', 7,
 sub
-#line 70 "pidl/idl.yp"
+#line 71 "pidl/idl.yp"
 {{
                "TYPE" => "INTERFACE", 
               "PROPERTIES" => $_[1],
               "NAME" => $_[3],
-              "BASE" => $_[4],
-              "DATA" => $_[6],
-                  "FILE" => $_[0]->YYData->{INPUT_FILENAME},
+              "DATA" => $_[5],
+                  "FILE" => $_[0]->YYData->{FILE},
                   "LINE" => $_[0]->YYData->{LINE},
           }}
        ],
-       [#Rule 16
-                'base_interface', 0, undef
-       ],
        [#Rule 17
-                'base_interface', 2,
+                'cpp_quote', 4,
 sub
-#line 83 "pidl/idl.yp"
-{ $_[2] }
+#line 82 "pidl/idl.yp"
+{{
+                "TYPE" => "CPP_QUOTE",
+                "FILE" => $_[0]->YYData->{FILE},
+                "LINE" => $_[0]->YYData->{LINE},
+                "DATA" => $_[3]
+       }}
        ],
        [#Rule 18
                 'definitions', 1,
 sub
-#line 87 "pidl/idl.yp"
+#line 91 "pidl/idl.yp"
 { [ $_[1] ] }
        ],
        [#Rule 19
                 'definitions', 2,
 sub
-#line 88 "pidl/idl.yp"
+#line 92 "pidl/idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 20
@@ -2430,26 +1893,23 @@ sub
                 'definition', 1, undef
        ],
        [#Rule 24
-                'definition', 1, undef
-       ],
-       [#Rule 25
                 'const', 7,
 sub
-#line 96 "pidl/idl.yp"
+#line 100 "pidl/idl.yp"
 {{
                      "TYPE"  => "CONST", 
                     "DTYPE"  => $_[2],
                         "POINTERS" => $_[3],
                     "NAME"  => $_[4],
                     "VALUE" => $_[6],
-                    "FILE" => $_[0]->YYData->{INPUT_FILENAME},
+                    "FILE" => $_[0]->YYData->{FILE},
                     "LINE" => $_[0]->YYData->{LINE},
         }}
        ],
-       [#Rule 26
+       [#Rule 25
                 'const', 8,
 sub
-#line 106 "pidl/idl.yp"
+#line 110 "pidl/idl.yp"
 {{
                      "TYPE"  => "CONST", 
                     "DTYPE"  => $_[2],
@@ -2457,546 +1917,504 @@ sub
                     "NAME"  => $_[4],
                     "ARRAY_LEN" => $_[5],
                     "VALUE" => $_[7],
-                    "FILE" => $_[0]->YYData->{INPUT_FILENAME},
+                    "FILE" => $_[0]->YYData->{FILE},
                     "LINE" => $_[0]->YYData->{LINE},
         }}
        ],
-       [#Rule 27
+       [#Rule 26
                 'function', 7,
 sub
-#line 120 "pidl/idl.yp"
+#line 124 "pidl/idl.yp"
 {{
                "TYPE" => "FUNCTION",
                "NAME" => $_[3],
                "RETURN_TYPE" => $_[2],
                "PROPERTIES" => $_[1],
                "ELEMENTS" => $_[5],
-               "FILE" => $_[0]->YYData->{INPUT_FILENAME},
+               "FILE" => $_[0]->YYData->{FILE},
                "LINE" => $_[0]->YYData->{LINE},
          }}
        ],
-       [#Rule 28
-                'declare', 5,
-sub
-#line 132 "pidl/idl.yp"
-{{
-                    "TYPE" => "DECLARE", 
-                     "PROPERTIES" => $_[2],
-                    "NAME" => $_[4],
-                    "DATA" => $_[3],
-                    "FILE" => $_[0]->YYData->{INPUT_FILENAME},
-                    "LINE" => $_[0]->YYData->{LINE},
-        }}
-       ],
-       [#Rule 29
-                'decl_type', 1, undef
-       ],
-       [#Rule 30
-                'decl_type', 1, undef
-       ],
-       [#Rule 31
-                'decl_type', 1, undef
-       ],
-       [#Rule 32
-                'decl_enum', 1,
-sub
-#line 146 "pidl/idl.yp"
-{{
-                     "TYPE" => "ENUM"
-        }}
-       ],
-       [#Rule 33
-                'decl_bitmap', 1,
-sub
-#line 152 "pidl/idl.yp"
-{{
-                     "TYPE" => "BITMAP"
-        }}
-       ],
-       [#Rule 34
-                'decl_union', 1,
-sub
-#line 158 "pidl/idl.yp"
-{{
-                     "TYPE" => "UNION"
-        }}
-       ],
-       [#Rule 35
+       [#Rule 27
                 'typedef', 6,
 sub
-#line 164 "pidl/idl.yp"
+#line 136 "pidl/idl.yp"
 {{
                     "TYPE" => "TYPEDEF", 
-                     "PROPERTIES" => $_[2],
+                     "PROPERTIES" => $_[1],
                     "NAME" => $_[4],
                     "DATA" => $_[3],
                     "ARRAY_LEN" => $_[5],
-                    "FILE" => $_[0]->YYData->{INPUT_FILENAME},
+                    "FILE" => $_[0]->YYData->{FILE},
                     "LINE" => $_[0]->YYData->{LINE},
         }}
        ],
-       [#Rule 36
+       [#Rule 28
                 'usertype', 1, undef
        ],
-       [#Rule 37
+       [#Rule 29
                 'usertype', 1, undef
        ],
-       [#Rule 38
+       [#Rule 30
                 'usertype', 1, undef
        ],
-       [#Rule 39
+       [#Rule 31
                 'usertype', 1, undef
        ],
-       [#Rule 40
+       [#Rule 32
                 'typedecl', 2,
 sub
-#line 177 "pidl/idl.yp"
+#line 149 "pidl/idl.yp"
 { $_[1] }
        ],
-       [#Rule 41
+       [#Rule 33
                 'sign', 1, undef
        ],
-       [#Rule 42
+       [#Rule 34
                 'sign', 1, undef
        ],
-       [#Rule 43
-                'existingtype', 0, undef
-       ],
-       [#Rule 44
+       [#Rule 35
                 'existingtype', 2,
 sub
-#line 182 "pidl/idl.yp"
-{ "$_[1] $_[2]" }
+#line 154 "pidl/idl.yp"
+{ ($_[1]?$_[1]:"signed") ." $_[2]" }
        ],
-       [#Rule 45
+       [#Rule 36
                 'existingtype', 1, undef
        ],
-       [#Rule 46
+       [#Rule 37
                 'type', 1, undef
        ],
-       [#Rule 47
+       [#Rule 38
                 'type', 1, undef
        ],
-       [#Rule 48
+       [#Rule 39
                 'type', 1,
 sub
-#line 186 "pidl/idl.yp"
+#line 158 "pidl/idl.yp"
 { "void" }
        ],
-       [#Rule 49
+       [#Rule 40
                 'enum_body', 3,
 sub
-#line 188 "pidl/idl.yp"
+#line 160 "pidl/idl.yp"
 { $_[2] }
        ],
-       [#Rule 50
+       [#Rule 41
                 'opt_enum_body', 0, undef
        ],
-       [#Rule 51
+       [#Rule 42
                 'opt_enum_body', 1, undef
        ],
-       [#Rule 52
-                'enum', 3,
+       [#Rule 43
+                'enum', 4,
 sub
-#line 191 "pidl/idl.yp"
+#line 163 "pidl/idl.yp"
 {{
              "TYPE" => "ENUM", 
-                        "NAME" => $_[2],
-                    "ELEMENTS" => $_[3]
+                        "PROPERTIES" => $_[1],
+                        "NAME" => $_[3],
+                    "ELEMENTS" => $_[4]
         }}
        ],
-       [#Rule 53
+       [#Rule 44
                 'enum_elements', 1,
 sub
-#line 199 "pidl/idl.yp"
+#line 172 "pidl/idl.yp"
 { [ $_[1] ] }
        ],
-       [#Rule 54
+       [#Rule 45
                 'enum_elements', 3,
 sub
-#line 200 "pidl/idl.yp"
+#line 173 "pidl/idl.yp"
 { push(@{$_[1]}, $_[3]); $_[1] }
        ],
-       [#Rule 55
+       [#Rule 46
                 'enum_element', 1, undef
        ],
-       [#Rule 56
+       [#Rule 47
                 'enum_element', 3,
 sub
-#line 204 "pidl/idl.yp"
+#line 177 "pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 57
+       [#Rule 48
                 'bitmap_body', 3,
 sub
-#line 207 "pidl/idl.yp"
+#line 180 "pidl/idl.yp"
 { $_[2] }
        ],
-       [#Rule 58
+       [#Rule 49
                 'opt_bitmap_body', 0, undef
        ],
-       [#Rule 59
+       [#Rule 50
                 'opt_bitmap_body', 1, undef
        ],
-       [#Rule 60
-                'bitmap', 3,
+       [#Rule 51
+                'bitmap', 4,
 sub
-#line 210 "pidl/idl.yp"
+#line 183 "pidl/idl.yp"
 {{
              "TYPE" => "BITMAP", 
-                        "NAME" => $_[2],
-                    "ELEMENTS" => $_[3]
+                    "PROPERTIES" => $_[1],
+                        "NAME" => $_[3],
+                    "ELEMENTS" => $_[4]
         }}
        ],
-       [#Rule 61
+       [#Rule 52
                 'bitmap_elements', 1,
 sub
-#line 218 "pidl/idl.yp"
+#line 192 "pidl/idl.yp"
 { [ $_[1] ] }
        ],
-       [#Rule 62
+       [#Rule 53
                 'bitmap_elements', 3,
 sub
-#line 219 "pidl/idl.yp"
+#line 193 "pidl/idl.yp"
 { push(@{$_[1]}, $_[3]); $_[1] }
        ],
-       [#Rule 63
+       [#Rule 54
                 'opt_bitmap_elements', 0, undef
        ],
-       [#Rule 64
+       [#Rule 55
                 'opt_bitmap_elements', 1, undef
        ],
-       [#Rule 65
+       [#Rule 56
                 'bitmap_element', 3,
 sub
-#line 224 "pidl/idl.yp"
+#line 198 "pidl/idl.yp"
 { "$_[1] ( $_[3] )" }
        ],
-       [#Rule 66
+       [#Rule 57
                 'struct_body', 3,
 sub
-#line 227 "pidl/idl.yp"
+#line 201 "pidl/idl.yp"
 { $_[2] }
        ],
-       [#Rule 67
+       [#Rule 58
                 'opt_struct_body', 0, undef
        ],
-       [#Rule 68
+       [#Rule 59
                 'opt_struct_body', 1, undef
        ],
-       [#Rule 69
-                'struct', 3,
+       [#Rule 60
+                'struct', 4,
 sub
-#line 231 "pidl/idl.yp"
+#line 205 "pidl/idl.yp"
 {{
              "TYPE" => "STRUCT", 
-                        "NAME" => $_[2],
-                    "ELEMENTS" => $_[3]
+                        "PROPERTIES" => $_[1],
+                        "NAME" => $_[3],
+                    "ELEMENTS" => $_[4]
         }}
        ],
-       [#Rule 70
+       [#Rule 61
                 'empty_element', 2,
 sub
-#line 239 "pidl/idl.yp"
+#line 214 "pidl/idl.yp"
 {{
                 "NAME" => "",
                 "TYPE" => "EMPTY",
                 "PROPERTIES" => $_[1],
                 "POINTERS" => 0,
                 "ARRAY_LEN" => [],
-                "FILE" => $_[0]->YYData->{INPUT_FILENAME},
+                "FILE" => $_[0]->YYData->{FILE},
                 "LINE" => $_[0]->YYData->{LINE},
         }}
        ],
-       [#Rule 71
+       [#Rule 62
                 'base_or_empty', 2, undef
        ],
-       [#Rule 72
+       [#Rule 63
                 'base_or_empty', 1, undef
        ],
-       [#Rule 73
+       [#Rule 64
                 'optional_base_element', 2,
 sub
-#line 253 "pidl/idl.yp"
+#line 228 "pidl/idl.yp"
 { $_[2]->{PROPERTIES} = FlattenHash([$_[1],$_[2]->{PROPERTIES}]); $_[2] }
        ],
-       [#Rule 74
+       [#Rule 65
                 'union_elements', 0, undef
        ],
-       [#Rule 75
+       [#Rule 66
                 'union_elements', 2,
 sub
-#line 258 "pidl/idl.yp"
+#line 233 "pidl/idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
-       [#Rule 76
+       [#Rule 67
                 'union_body', 3,
 sub
-#line 261 "pidl/idl.yp"
+#line 236 "pidl/idl.yp"
 { $_[2] }
        ],
-       [#Rule 77
+       [#Rule 68
                 'opt_union_body', 0, undef
        ],
-       [#Rule 78
+       [#Rule 69
                 'opt_union_body', 1, undef
        ],
-       [#Rule 79
-                'union', 3,
+       [#Rule 70
+                'union', 4,
 sub
-#line 265 "pidl/idl.yp"
+#line 240 "pidl/idl.yp"
 {{
              "TYPE" => "UNION", 
-                    "NAME" => $_[2],
-                    "ELEMENTS" => $_[3]
+                        "PROPERTIES" => $_[1],
+                    "NAME" => $_[3],
+                    "ELEMENTS" => $_[4]
         }}
        ],
-       [#Rule 80
+       [#Rule 71
                 'base_element', 5,
 sub
-#line 273 "pidl/idl.yp"
+#line 249 "pidl/idl.yp"
 {{
                           "NAME" => $_[4],
                           "TYPE" => $_[2],
                           "PROPERTIES" => $_[1],
                           "POINTERS" => $_[3],
                           "ARRAY_LEN" => $_[5],
-                      "FILE" => $_[0]->YYData->{INPUT_FILENAME},
+                      "FILE" => $_[0]->YYData->{FILE},
                       "LINE" => $_[0]->YYData->{LINE},
               }}
        ],
-       [#Rule 81
+       [#Rule 72
                 'pointers', 0,
 sub
-#line 287 "pidl/idl.yp"
+#line 263 "pidl/idl.yp"
 { 0 }
        ],
-       [#Rule 82
+       [#Rule 73
                 'pointers', 2,
 sub
-#line 288 "pidl/idl.yp"
+#line 264 "pidl/idl.yp"
 { $_[1]+1 }
        ],
-       [#Rule 83
-                'element_list1', 0, undef
+       [#Rule 74
+                'element_list1', 0,
+sub
+#line 268 "pidl/idl.yp"
+{ [] }
        ],
-       [#Rule 84
+       [#Rule 75
                 'element_list1', 3,
 sub
-#line 293 "pidl/idl.yp"
+#line 269 "pidl/idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
-       [#Rule 85
+       [#Rule 76
                 'element_list2', 0, undef
        ],
-       [#Rule 86
+       [#Rule 77
                 'element_list2', 1, undef
        ],
-       [#Rule 87
+       [#Rule 78
                 'element_list2', 1,
 sub
-#line 299 "pidl/idl.yp"
+#line 275 "pidl/idl.yp"
 { [ $_[1] ] }
        ],
-       [#Rule 88
+       [#Rule 79
                 'element_list2', 3,
 sub
-#line 300 "pidl/idl.yp"
+#line 276 "pidl/idl.yp"
 { push(@{$_[1]}, $_[3]); $_[1] }
        ],
-       [#Rule 89
+       [#Rule 80
                 'array_len', 0, undef
        ],
-       [#Rule 90
+       [#Rule 81
                 'array_len', 3,
 sub
-#line 305 "pidl/idl.yp"
+#line 281 "pidl/idl.yp"
 { push(@{$_[3]}, "*"); $_[3] }
        ],
-       [#Rule 91
+       [#Rule 82
                 'array_len', 4,
 sub
-#line 306 "pidl/idl.yp"
+#line 282 "pidl/idl.yp"
 { push(@{$_[4]}, "$_[2]"); $_[4] }
        ],
-       [#Rule 92
+       [#Rule 83
                 'property_list', 0, undef
        ],
-       [#Rule 93
+       [#Rule 84
                 'property_list', 4,
 sub
-#line 312 "pidl/idl.yp"
+#line 288 "pidl/idl.yp"
 { FlattenHash([$_[1],$_[3]]); }
        ],
-       [#Rule 94
+       [#Rule 85
                 'properties', 1,
 sub
-#line 315 "pidl/idl.yp"
+#line 291 "pidl/idl.yp"
 { $_[1] }
        ],
-       [#Rule 95
+       [#Rule 86
                 'properties', 3,
 sub
-#line 316 "pidl/idl.yp"
+#line 292 "pidl/idl.yp"
 { FlattenHash([$_[1], $_[3]]); }
        ],
-       [#Rule 96
+       [#Rule 87
                 'property', 1,
 sub
-#line 319 "pidl/idl.yp"
+#line 295 "pidl/idl.yp"
 {{ "$_[1]" => "1"     }}
        ],
-       [#Rule 97
+       [#Rule 88
                 'property', 4,
 sub
-#line 320 "pidl/idl.yp"
+#line 296 "pidl/idl.yp"
 {{ "$_[1]" => "$_[3]" }}
        ],
-       [#Rule 98
+       [#Rule 89
                 'listtext', 1, undef
        ],
-       [#Rule 99
+       [#Rule 90
                 'listtext', 3,
 sub
-#line 325 "pidl/idl.yp"
+#line 301 "pidl/idl.yp"
 { "$_[1] $_[3]" }
        ],
-       [#Rule 100
+       [#Rule 91
                 'commalisttext', 1, undef
        ],
-       [#Rule 101
+       [#Rule 92
                 'commalisttext', 3,
 sub
-#line 330 "pidl/idl.yp"
+#line 306 "pidl/idl.yp"
 { "$_[1],$_[3]" }
        ],
-       [#Rule 102
+       [#Rule 93
                 'anytext', 0,
 sub
-#line 334 "pidl/idl.yp"
+#line 310 "pidl/idl.yp"
 { "" }
        ],
-       [#Rule 103
+       [#Rule 94
                 'anytext', 1, undef
        ],
-       [#Rule 104
+       [#Rule 95
                 'anytext', 1, undef
        ],
-       [#Rule 105
+       [#Rule 96
                 'anytext', 1, undef
        ],
-       [#Rule 106
+       [#Rule 97
                 'anytext', 3,
 sub
-#line 336 "pidl/idl.yp"
+#line 312 "pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 107
+       [#Rule 98
                 'anytext', 3,
 sub
-#line 337 "pidl/idl.yp"
+#line 313 "pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 108
+       [#Rule 99
                 'anytext', 3,
 sub
-#line 338 "pidl/idl.yp"
+#line 314 "pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 109
+       [#Rule 100
                 'anytext', 3,
 sub
-#line 339 "pidl/idl.yp"
+#line 315 "pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 110
+       [#Rule 101
                 'anytext', 3,
 sub
-#line 340 "pidl/idl.yp"
+#line 316 "pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 111
+       [#Rule 102
                 'anytext', 3,
 sub
-#line 341 "pidl/idl.yp"
+#line 317 "pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 112
+       [#Rule 103
                 'anytext', 3,
 sub
-#line 342 "pidl/idl.yp"
+#line 318 "pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 113
+       [#Rule 104
                 'anytext', 3,
 sub
-#line 343 "pidl/idl.yp"
+#line 319 "pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 114
+       [#Rule 105
                 'anytext', 3,
 sub
-#line 344 "pidl/idl.yp"
+#line 320 "pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 115
+       [#Rule 106
                 'anytext', 3,
 sub
-#line 345 "pidl/idl.yp"
+#line 321 "pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 116
+       [#Rule 107
                 'anytext', 3,
 sub
-#line 346 "pidl/idl.yp"
+#line 322 "pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 117
+       [#Rule 108
                 'anytext', 3,
 sub
-#line 347 "pidl/idl.yp"
+#line 323 "pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 118
+       [#Rule 109
                 'anytext', 3,
 sub
-#line 348 "pidl/idl.yp"
+#line 324 "pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 119
+       [#Rule 110
                 'anytext', 5,
 sub
-#line 349 "pidl/idl.yp"
+#line 325 "pidl/idl.yp"
 { "$_[1]$_[2]$_[3]$_[4]$_[5]" }
        ],
-       [#Rule 120
+       [#Rule 111
                 'anytext', 5,
 sub
-#line 350 "pidl/idl.yp"
+#line 326 "pidl/idl.yp"
 { "$_[1]$_[2]$_[3]$_[4]$_[5]" }
        ],
-       [#Rule 121
+       [#Rule 112
                 'identifier', 1, undef
        ],
-       [#Rule 122
+       [#Rule 113
                 'optional_identifier', 1, undef
        ],
-       [#Rule 123
+       [#Rule 114
                 'optional_identifier', 0, undef
        ],
-       [#Rule 124
+       [#Rule 115
                 'constant', 1, undef
        ],
-       [#Rule 125
+       [#Rule 116
                 'text', 1,
 sub
-#line 364 "pidl/idl.yp"
+#line 340 "pidl/idl.yp"
 { "\"$_[1]\"" }
        ],
-       [#Rule 126
+       [#Rule 117
                 'optional_semicolon', 0, undef
        ],
-       [#Rule 127
+       [#Rule 118
                 'optional_semicolon', 1, undef
        ]
 ],
@@ -3004,8 +2422,10 @@ sub
     bless($self,$class);
 }
 
-#line 375 "pidl/idl.yp"
+#line 351 "pidl/idl.yp"
+
 
+use Parse::Pidl qw(error);
 
 #####################################################################
 # flatten an array of hashes into a single hash
@@ -3034,10 +2454,6 @@ sub CleanData($)
     if (ref($v) eq "ARRAY") {
        foreach my $i (0 .. $#{$v}) {
            CleanData($v->[$i]);
-           if (ref($v->[$i]) eq "ARRAY" && $#{$v->[$i]}==-1) { 
-                   $v->[$i] = undef; 
-                   next; 
-           }
        }
        # this removes any undefined elements from the array
        @{$v} = grep { defined $_ } @{$v};
@@ -3045,7 +2461,6 @@ sub CleanData($)
        foreach my $x (keys %{$v}) {
            CleanData($v->{$x});
            if (!defined $v->{$x}) { delete($v->{$x}); next; }
-           if (ref($v->{$x}) eq "ARRAY" && $#{$v->{$x}}==-1) { delete($v->{$x}); next; }
        }
     }
        return $v;
@@ -3053,15 +2468,13 @@ sub CleanData($)
 
 sub _Error {
     if (exists $_[0]->YYData->{ERRMSG}) {
-               print $_[0]->YYData->{ERRMSG};
+               error($_[0]->YYData, $_[0]->YYData->{ERRMSG});
                delete $_[0]->YYData->{ERRMSG};
                return;
        };
-       my $line = $_[0]->YYData->{LINE};
        my $last_token = $_[0]->YYData->{LAST_TOKEN};
-       my $file = $_[0]->YYData->{INPUT_FILENAME};
        
-       print "$file:$line: Syntax error near '$last_token'\n";
+       error($_[0]->YYData, "Syntax error near '$last_token'");
 }
 
 sub _Lexer($)
@@ -3077,12 +2490,12 @@ again:
                if (/^\#/) {
                        if (s/^\# (\d+) \"(.*?)\"( \d+|)//) {
                                $parser->YYData->{LINE} = $1-1;
-                               $parser->YYData->{INPUT_FILENAME} = $2;
+                               $parser->YYData->{FILE} = $2;
                                goto again;
                        }
                        if (s/^\#line (\d+) \"(.*?)\"( \d+|)//) {
                                $parser->YYData->{LINE} = $1-1;
-                               $parser->YYData->{INPUT_FILENAME} = $2;
+                               $parser->YYData->{FILE} = $2;
                                goto again;
                        }
                        if (s/^(\#.*)$//m) {
@@ -3104,7 +2517,7 @@ again:
                if (s/^([\w_]+)//) {
                        $parser->YYData->{LAST_TOKEN} = $1;
                        if ($1 =~ 
-                           /^(coclass|interface|const|typedef|declare|union
+                           /^(coclass|interface|const|typedef|union|cpp_quote
                              |struct|enum|bitmap|void|unsigned|signed|import|include
                                  |importlib)$/x) {
                                return $1;
@@ -3124,7 +2537,7 @@ sub parse_string
 
        my $self = new Parse::Pidl::IDL;
 
-    $self->YYData->{INPUT_FILENAME} = $filename;
+    $self->YYData->{FILE} = $filename;
     $self->YYData->{INPUT} = $data;
     $self->YYData->{LINE} = 0;
     $self->YYData->{LAST_TOKEN} = "NONE";