/* A Bison parser, made by GNU Bison 3.1.  */

/* Bison implementation for Yacc-like parsers in C

   Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

/* As a special exception, you may create a larger work that contains
   part or all of the Bison parser skeleton and distribute that work
   under terms of your choice, so long as that work isn't itself a
   parser generator using the skeleton or a modified version thereof
   as a parser skeleton.  Alternatively, if you modify or redistribute
   the parser skeleton itself, you may (at your option) remove this
   special exception, which will cause the skeleton and the resulting
   Bison output files to be licensed under the GNU General Public
   License without this special exception.

   This special exception was added by the Free Software Foundation in
   version 2.2 of Bison.  */

/* C LALR(1) parser skeleton written by Richard Stallman, by
   simplifying the original so-called "semantic" parser.  */

/* All symbols defined below should begin with yy or YY, to avoid
   infringing on user name space.  This should be done even for local
   variables, as they might otherwise be expanded by user macros.
   There are some unavoidable exceptions within include files to
   define necessary library symbols; they are noted "INFRINGES ON
   USER NAME SPACE" below.  */

/* Identify Bison output.  */
#define YYBISON 1

/* Bison version.  */
#define YYBISON_VERSION "3.1"

/* Skeleton name.  */
#define YYSKELETON_NAME "yacc.c"

/* Pure parsers.  */
#define YYPURE 0

/* Push parsers.  */
#define YYPUSH 0

/* Pull parsers.  */
#define YYPULL 1


/* Substitute the variable and function names.  */
#define yyparse         parser_parse
#define yylex           parser_lex
#define yyerror         parser_error
#define yydebug         parser_debug
#define yynerrs         parser_nerrs

#define yylval          parser_lval
#define yychar          parser_char

/* Copy the first part of user declarations.  */
#line 1 "parser.y" /* yacc.c:339  */

/*
 * IDL Compiler
 *
 * Copyright 2002 Ove Kaaven
 * Copyright 2006-2008 Robert Shearman
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#include "config.h"

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <assert.h>
#include <ctype.h>
#include <string.h>

#include "widl.h"
#include "utils.h"
#include "parser.h"
#include "header.h"
#include "typelib.h"
#include "typegen.h"
#include "expr.h"
#include "typetree.h"

static unsigned char pointer_default = FC_UP;

typedef struct list typelist_t;
struct typenode {
  type_t *type;
  struct list entry;
};

struct _import_t
{
  char *name;
  int import_performed;
};

typedef struct _decl_spec_t
{
  type_t *type;
  attr_list_t *attrs;
  enum storage_class stgclass;
} decl_spec_t;

typelist_t incomplete_types = LIST_INIT(incomplete_types);

static void fix_incomplete(void);
static void fix_incomplete_types(type_t *complete_type);

static str_list_t *append_str(str_list_t *list, char *str);
static attr_list_t *append_attr(attr_list_t *list, attr_t *attr);
static attr_list_t *append_attr_list(attr_list_t *new_list, attr_list_t *old_list);
static decl_spec_t *make_decl_spec(type_t *type, decl_spec_t *left, decl_spec_t *right, attr_t *attr, enum storage_class stgclass);
static attr_t *make_attr(enum attr_type type);
static attr_t *make_attrv(enum attr_type type, unsigned int val);
static attr_t *make_attrp(enum attr_type type, void *val);
static expr_list_t *append_expr(expr_list_t *list, expr_t *expr);
static type_t *append_array(type_t *chain, expr_t *expr);
static var_t *declare_var(attr_list_t *attrs, decl_spec_t *decl_spec, const declarator_t *decl, int top);
static var_list_t *set_var_types(attr_list_t *attrs, decl_spec_t *decl_spec, declarator_list_t *decls);
static ifref_list_t *append_ifref(ifref_list_t *list, ifref_t *iface);
static ifref_t *make_ifref(type_t *iface);
static var_list_t *append_var_list(var_list_t *list, var_list_t *vars);
static declarator_list_t *append_declarator(declarator_list_t *list, declarator_t *p);
static declarator_t *make_declarator(var_t *var);
static type_t *make_safearray(type_t *type);
static typelib_t *make_library(const char *name, const attr_list_t *attrs);
static type_t *append_chain_type(type_t *chain, type_t *type);
static warning_list_t *append_warning(warning_list_t *, int);

static type_t *reg_typedefs(decl_spec_t *decl_spec, var_list_t *names, attr_list_t *attrs);
static type_t *find_type_or_error(const char *name, int t);
static type_t *find_type_or_error2(char *name, int t);

static var_t *reg_const(var_t *var);

static void push_namespace(const char *name);
static void pop_namespace(const char *name);

static char *gen_name(void);
static void check_arg_attrs(const var_t *arg);
static void check_statements(const statement_list_t *stmts, int is_inside_library);
static void check_all_user_types(const statement_list_t *stmts);
static attr_list_t *check_iface_attrs(const char *name, attr_list_t *attrs);
static attr_list_t *check_function_attrs(const char *name, attr_list_t *attrs);
static attr_list_t *check_typedef_attrs(attr_list_t *attrs);
static attr_list_t *check_enum_attrs(attr_list_t *attrs);
static attr_list_t *check_struct_attrs(attr_list_t *attrs);
static attr_list_t *check_union_attrs(attr_list_t *attrs);
static attr_list_t *check_field_attrs(const char *name, attr_list_t *attrs);
static attr_list_t *check_library_attrs(const char *name, attr_list_t *attrs);
static attr_list_t *check_dispiface_attrs(const char *name, attr_list_t *attrs);
static attr_list_t *check_module_attrs(const char *name, attr_list_t *attrs);
static attr_list_t *check_coclass_attrs(const char *name, attr_list_t *attrs);
const char *get_attr_display_name(enum attr_type type);
static void add_explicit_handle_if_necessary(const type_t *iface, var_t *func);
static void check_def(const type_t *t);

static void check_async_uuid(type_t *iface);

static statement_t *make_statement(enum statement_type type);
static statement_t *make_statement_type_decl(type_t *type);
static statement_t *make_statement_reference(type_t *type);
static statement_t *make_statement_declaration(var_t *var);
static statement_t *make_statement_library(typelib_t *typelib);
static statement_t *make_statement_pragma(const char *str);
static statement_t *make_statement_cppquote(const char *str);
static statement_t *make_statement_importlib(const char *str);
static statement_t *make_statement_module(type_t *type);
static statement_t *make_statement_typedef(var_list_t *names);
static statement_t *make_statement_import(const char *str);
static statement_list_t *append_statement(statement_list_t *list, statement_t *stmt);
static statement_list_t *append_statements(statement_list_t *, statement_list_t *);
static attr_list_t *append_attribs(attr_list_t *, attr_list_t *);

static struct namespace global_namespace = {
    NULL, NULL, LIST_INIT(global_namespace.entry), LIST_INIT(global_namespace.children)
};

static struct namespace *current_namespace = &global_namespace;

static typelib_t *current_typelib;


#line 216 "parser.tab.c" /* yacc.c:339  */

# ifndef YY_NULLPTR
#  if defined __cplusplus && 201103L <= __cplusplus
#   define YY_NULLPTR nullptr
#  else
#   define YY_NULLPTR 0
#  endif
# endif

/* Enabling verbose error messages.  */
#ifdef YYERROR_VERBOSE
# undef YYERROR_VERBOSE
# define YYERROR_VERBOSE 1
#else
# define YYERROR_VERBOSE 1
#endif


/* Debug traces.  */
#ifndef YYDEBUG
# define YYDEBUG 0
#endif
#if YYDEBUG
extern int parser_debug;
#endif

/* Token type.  */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
  enum yytokentype
  {
    aIDENTIFIER = 258,
    aPRAGMA = 259,
    aKNOWNTYPE = 260,
    aNUM = 261,
    aHEXNUM = 262,
    aDOUBLE = 263,
    aSTRING = 264,
    aWSTRING = 265,
    aSQSTRING = 266,
    aUUID = 267,
    aEOF = 268,
    aACF = 269,
    SHL = 270,
    SHR = 271,
    MEMBERPTR = 272,
    EQUALITY = 273,
    INEQUALITY = 274,
    GREATEREQUAL = 275,
    LESSEQUAL = 276,
    LOGICALOR = 277,
    LOGICALAND = 278,
    ELLIPSIS = 279,
    tAGGREGATABLE = 280,
    tALLOCATE = 281,
    tANNOTATION = 282,
    tAPPOBJECT = 283,
    tASYNC = 284,
    tASYNCUUID = 285,
    tAUTOHANDLE = 286,
    tBINDABLE = 287,
    tBOOLEAN = 288,
    tBROADCAST = 289,
    tBYTE = 290,
    tBYTECOUNT = 291,
    tCALLAS = 292,
    tCALLBACK = 293,
    tCASE = 294,
    tCDECL = 295,
    tCHAR = 296,
    tCOCLASS = 297,
    tCODE = 298,
    tCOMMSTATUS = 299,
    tCONST = 300,
    tCONTEXTHANDLE = 301,
    tCONTEXTHANDLENOSERIALIZE = 302,
    tCONTEXTHANDLESERIALIZE = 303,
    tCONTROL = 304,
    tCPPQUOTE = 305,
    tDECODE = 306,
    tDEFAULT = 307,
    tDEFAULTBIND = 308,
    tDEFAULTCOLLELEM = 309,
    tDEFAULTVALUE = 310,
    tDEFAULTVTABLE = 311,
    tDISABLECONSISTENCYCHECK = 312,
    tDISPLAYBIND = 313,
    tDISPINTERFACE = 314,
    tDLLNAME = 315,
    tDOUBLE = 316,
    tDUAL = 317,
    tENABLEALLOCATE = 318,
    tENCODE = 319,
    tENDPOINT = 320,
    tENTRY = 321,
    tENUM = 322,
    tERRORSTATUST = 323,
    tEXPLICITHANDLE = 324,
    tEXTERN = 325,
    tFALSE = 326,
    tFASTCALL = 327,
    tFAULTSTATUS = 328,
    tFLOAT = 329,
    tFORCEALLOCATE = 330,
    tHANDLE = 331,
    tHANDLET = 332,
    tHELPCONTEXT = 333,
    tHELPFILE = 334,
    tHELPSTRING = 335,
    tHELPSTRINGCONTEXT = 336,
    tHELPSTRINGDLL = 337,
    tHIDDEN = 338,
    tHYPER = 339,
    tID = 340,
    tIDEMPOTENT = 341,
    tIGNORE = 342,
    tIIDIS = 343,
    tIMMEDIATEBIND = 344,
    tIMPLICITHANDLE = 345,
    tIMPORT = 346,
    tIMPORTLIB = 347,
    tIN = 348,
    tIN_LINE = 349,
    tINLINE = 350,
    tINPUTSYNC = 351,
    tINT = 352,
    tINT32 = 353,
    tINT3264 = 354,
    tINT64 = 355,
    tINTERFACE = 356,
    tLCID = 357,
    tLENGTHIS = 358,
    tLIBRARY = 359,
    tLICENSED = 360,
    tLOCAL = 361,
    tLONG = 362,
    tMAYBE = 363,
    tMESSAGE = 364,
    tMETHODS = 365,
    tMODULE = 366,
    tNAMESPACE = 367,
    tNOCODE = 368,
    tNONBROWSABLE = 369,
    tNONCREATABLE = 370,
    tNONEXTENSIBLE = 371,
    tNOTIFY = 372,
    tNOTIFYFLAG = 373,
    tNULL = 374,
    tOBJECT = 375,
    tODL = 376,
    tOLEAUTOMATION = 377,
    tOPTIMIZE = 378,
    tOPTIONAL = 379,
    tOUT = 380,
    tPARTIALIGNORE = 381,
    tPASCAL = 382,
    tPOINTERDEFAULT = 383,
    tPRAGMA_WARNING = 384,
    tPROGID = 385,
    tPROPERTIES = 386,
    tPROPGET = 387,
    tPROPPUT = 388,
    tPROPPUTREF = 389,
    tPROXY = 390,
    tPTR = 391,
    tPUBLIC = 392,
    tRANGE = 393,
    tREADONLY = 394,
    tREF = 395,
    tREGISTER = 396,
    tREPRESENTAS = 397,
    tREQUESTEDIT = 398,
    tRESTRICTED = 399,
    tRETVAL = 400,
    tSAFEARRAY = 401,
    tSHORT = 402,
    tSIGNED = 403,
    tSIZEIS = 404,
    tSIZEOF = 405,
    tSMALL = 406,
    tSOURCE = 407,
    tSTATIC = 408,
    tSTDCALL = 409,
    tSTRICTCONTEXTHANDLE = 410,
    tSTRING = 411,
    tSTRUCT = 412,
    tSWITCH = 413,
    tSWITCHIS = 414,
    tSWITCHTYPE = 415,
    tTHREADING = 416,
    tTRANSMITAS = 417,
    tTRUE = 418,
    tTYPEDEF = 419,
    tUIDEFAULT = 420,
    tUNION = 421,
    tUNIQUE = 422,
    tUNSIGNED = 423,
    tUSESGETLASTERROR = 424,
    tUSERMARSHAL = 425,
    tUUID = 426,
    tV1ENUM = 427,
    tVARARG = 428,
    tVERSION = 429,
    tVIPROGID = 430,
    tVOID = 431,
    tWCHAR = 432,
    tWIREMARSHAL = 433,
    tAPARTMENT = 434,
    tNEUTRAL = 435,
    tSINGLE = 436,
    tFREE = 437,
    tBOTH = 438,
    CAST = 439,
    PPTR = 440,
    POS = 441,
    NEG = 442,
    ADDRESSOF = 443
  };
#endif

/* Value type.  */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED

union YYSTYPE
{
#line 142 "parser.y" /* yacc.c:355  */

	attr_t *attr;
	attr_list_t *attr_list;
	str_list_t *str_list;
	expr_t *expr;
	expr_list_t *expr_list;
	type_t *type;
	var_t *var;
	var_list_t *var_list;
	declarator_t *declarator;
	declarator_list_t *declarator_list;
	statement_t *statement;
	statement_list_t *stmt_list;
	warning_t *warning;
	warning_list_t *warning_list;
	ifref_t *ifref;
	ifref_list_t *ifref_list;
	char *str;
	UUID *uuid;
	unsigned int num;
	double dbl;
	interface_info_t ifinfo;
	typelib_t *typelib;
	struct _import_t *import;
	struct _decl_spec_t *declspec;
	enum storage_class stgclass;

#line 470 "parser.tab.c" /* yacc.c:355  */
};

typedef union YYSTYPE YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define YYSTYPE_IS_DECLARED 1
#endif


extern YYSTYPE parser_lval;

int parser_parse (void);



/* Copy the second part of user declarations.  */

#line 487 "parser.tab.c" /* yacc.c:358  */

#ifdef short
# undef short
#endif

#ifdef YYTYPE_UINT8
typedef YYTYPE_UINT8 yytype_uint8;
#else
typedef unsigned char yytype_uint8;
#endif

#ifdef YYTYPE_INT8
typedef YYTYPE_INT8 yytype_int8;
#else
typedef signed char yytype_int8;
#endif

#ifdef YYTYPE_UINT16
typedef YYTYPE_UINT16 yytype_uint16;
#else
typedef unsigned short yytype_uint16;
#endif

#ifdef YYTYPE_INT16
typedef YYTYPE_INT16 yytype_int16;
#else
typedef short yytype_int16;
#endif

#ifndef YYSIZE_T
# ifdef __SIZE_TYPE__
#  define YYSIZE_T __SIZE_TYPE__
# elif defined size_t
#  define YYSIZE_T size_t
# elif ! defined YYSIZE_T
#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
#  define YYSIZE_T size_t
# else
#  define YYSIZE_T unsigned
# endif
#endif

#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)

#ifndef YY_
# if defined YYENABLE_NLS && YYENABLE_NLS
#  if ENABLE_NLS
#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
#   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
#  endif
# endif
# ifndef YY_
#  define YY_(Msgid) Msgid
# endif
#endif

#ifndef YY_ATTRIBUTE
# if (defined __GNUC__                                               \
      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
# else
#  define YY_ATTRIBUTE(Spec) /* empty */
# endif
#endif

#ifndef YY_ATTRIBUTE_PURE
# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
#endif

#ifndef YY_ATTRIBUTE_UNUSED
# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
#endif

#if !defined _Noreturn \
     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
# if defined _MSC_VER && 1200 <= _MSC_VER
#  define _Noreturn __declspec (noreturn)
# else
#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
# endif
#endif

/* Suppress unused-variable warnings by "using" E.  */
#if ! defined lint || defined __GNUC__
# define YYUSE(E) ((void) (E))
#else
# define YYUSE(E) /* empty */
#endif

#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
    _Pragma ("GCC diagnostic push") \
    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
    _Pragma ("GCC diagnostic pop")
#else
# define YY_INITIAL_VALUE(Value) Value
#endif
#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
# define YY_IGNORE_MAYBE_UNINITIALIZED_END
#endif
#ifndef YY_INITIAL_VALUE
# define YY_INITIAL_VALUE(Value) /* Nothing. */
#endif


#if ! defined yyoverflow || YYERROR_VERBOSE

/* The parser invokes alloca or malloc; define the necessary symbols.  */

# ifdef YYSTACK_USE_ALLOCA
#  if YYSTACK_USE_ALLOCA
#   ifdef __GNUC__
#    define YYSTACK_ALLOC __builtin_alloca
#   elif defined __BUILTIN_VA_ARG_INCR
#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
#   elif defined _AIX
#    define YYSTACK_ALLOC __alloca
#   elif defined _MSC_VER
#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
#    define alloca _alloca
#   else
#    define YYSTACK_ALLOC alloca
#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
#     ifndef EXIT_SUCCESS
#      define EXIT_SUCCESS 0
#     endif
#    endif
#   endif
#  endif
# endif

# ifdef YYSTACK_ALLOC
   /* Pacify GCC's 'empty if-body' warning.  */
#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
#  ifndef YYSTACK_ALLOC_MAXIMUM
    /* The OS might guarantee only one guard page at the bottom of the stack,
       and a page size can be as small as 4096 bytes.  So we cannot safely
       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
       to allow for a few compiler-allocated temporary stack slots.  */
#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
#  endif
# else
#  define YYSTACK_ALLOC YYMALLOC
#  define YYSTACK_FREE YYFREE
#  ifndef YYSTACK_ALLOC_MAXIMUM
#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
#  endif
#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
       && ! ((defined YYMALLOC || defined malloc) \
             && (defined YYFREE || defined free)))
#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
#   ifndef EXIT_SUCCESS
#    define EXIT_SUCCESS 0
#   endif
#  endif
#  ifndef YYMALLOC
#   define YYMALLOC malloc
#   if ! defined malloc && ! defined EXIT_SUCCESS
void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
#   endif
#  endif
#  ifndef YYFREE
#   define YYFREE free
#   if ! defined free && ! defined EXIT_SUCCESS
void free (void *); /* INFRINGES ON USER NAME SPACE */
#   endif
#  endif
# endif
#endif /* ! defined yyoverflow || YYERROR_VERBOSE */


#if (! defined yyoverflow \
     && (! defined __cplusplus \
         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))

/* A type that is properly aligned for any stack member.  */
union yyalloc
{
  yytype_int16 yyss_alloc;
  YYSTYPE yyvs_alloc;
};

/* The size of the maximum gap between one aligned stack and the next.  */
# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)

/* The size of an array large to enough to hold all stacks, each with
   N elements.  */
# define YYSTACK_BYTES(N) \
     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
      + YYSTACK_GAP_MAXIMUM)

# define YYCOPY_NEEDED 1

/* Relocate STACK from its old location to the new one.  The
   local variables YYSIZE and YYSTACKSIZE give the old and new number of
   elements in the stack, and YYPTR gives the new location of the
   stack.  Advance YYPTR to a properly aligned location for the next
   stack.  */
# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
    do                                                                  \
      {                                                                 \
        YYSIZE_T yynewbytes;                                            \
        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
        Stack = &yyptr->Stack_alloc;                                    \
        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
        yyptr += yynewbytes / sizeof (*yyptr);                          \
      }                                                                 \
    while (0)

#endif

#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
/* Copy COUNT objects from SRC to DST.  The source and destination do
   not overlap.  */
# ifndef YYCOPY
#  if defined __GNUC__ && 1 < __GNUC__
#   define YYCOPY(Dst, Src, Count) \
      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
#  else
#   define YYCOPY(Dst, Src, Count)              \
      do                                        \
        {                                       \
          YYSIZE_T yyi;                         \
          for (yyi = 0; yyi < (Count); yyi++)   \
            (Dst)[yyi] = (Src)[yyi];            \
        }                                       \
      while (0)
#  endif
# endif
#endif /* !YYCOPY_NEEDED */

/* YYFINAL -- State number of the termination state.  */
#define YYFINAL  3
/* YYLAST -- Last index in YYTABLE.  */
#define YYLAST   3047

/* YYNTOKENS -- Number of terminals.  */
#define YYNTOKENS  213
/* YYNNTS -- Number of nonterminals.  */
#define YYNNTS  113
/* YYNRULES -- Number of rules.  */
#define YYNRULES  410
/* YYNSTATES -- Number of states.  */
#define YYNSTATES  718

/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
   by yylex, with out-of-bounds checking.  */
#define YYUNDEFTOK  2
#define YYMAXUTOK   443

#define YYTRANSLATE(YYX)                                                \
  ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)

/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
   as returned by yylex, without out-of-bounds checking.  */
static const yytype_uint8 yytranslate[] =
{
       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,   197,     2,     2,     2,   196,   189,     2,
     210,   211,   194,   193,   184,   192,   204,   195,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,   186,   209,
     190,   212,   191,   185,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,   205,     2,   206,   188,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,   207,   187,   208,   198,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
     175,   176,   177,   178,   179,   180,   181,   182,   183,   199,
     200,   201,   202,   203
};

#if YYDEBUG
  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
static const yytype_uint16 yyrline[] =
{
       0,   325,   325,   340,   340,   342,   343,   343,   345,   346,
     347,   350,   353,   354,   355,   358,   359,   360,   360,   362,
     363,   364,   367,   368,   369,   370,   373,   374,   377,   378,
     382,   383,   384,   385,   386,   387,   388,   391,   402,   403,
     407,   408,   409,   410,   411,   412,   413,   414,   415,   418,
     420,   428,   434,   438,   439,   441,   445,   449,   450,   453,
     454,   457,   458,   462,   467,   474,   478,   479,   482,   483,
     487,   490,   491,   492,   495,   496,   499,   500,   501,   502,
     503,   504,   505,   506,   507,   508,   509,   510,   511,   512,
     513,   514,   515,   516,   517,   518,   519,   520,   521,   522,
     523,   524,   525,   526,   527,   528,   529,   530,   531,   532,
     533,   534,   535,   536,   537,   538,   539,   540,   541,   542,
     543,   544,   545,   546,   547,   548,   549,   550,   551,   552,
     553,   554,   555,   556,   557,   558,   559,   560,   561,   562,
     563,   564,   565,   566,   567,   568,   569,   570,   571,   572,
     573,   574,   578,   579,   580,   581,   582,   583,   584,   585,
     586,   587,   588,   589,   590,   591,   592,   593,   594,   595,
     596,   597,   598,   599,   600,   601,   605,   606,   611,   612,
     613,   614,   617,   618,   621,   625,   631,   632,   633,   636,
     640,   652,   656,   661,   664,   665,   668,   669,   672,   673,
     674,   675,   676,   677,   678,   679,   680,   681,   682,   683,
     684,   685,   686,   687,   688,   689,   690,   691,   692,   693,
     694,   695,   696,   697,   698,   699,   700,   701,   702,   703,
     704,   705,   706,   707,   708,   709,   711,   713,   714,   717,
     718,   721,   727,   733,   734,   737,   742,   749,   750,   753,
     754,   758,   759,   762,   766,   772,   780,   784,   789,   790,
     793,   794,   795,   798,   800,   803,   804,   805,   806,   807,
     808,   809,   810,   811,   812,   813,   816,   817,   820,   821,
     822,   823,   824,   825,   826,   827,   828,   831,   832,   840,
     846,   850,   853,   854,   858,   861,   862,   865,   874,   875,
     878,   879,   882,   888,   894,   895,   898,   899,   902,   912,
     922,   928,   932,   933,   936,   937,   940,   945,   952,   953,
     954,   958,   962,   965,   966,   969,   970,   974,   975,   979,
     980,   981,   985,   987,   989,   993,   994,   995,   996,  1004,
    1006,  1008,  1013,  1015,  1020,  1021,  1026,  1027,  1028,  1029,
    1034,  1043,  1045,  1046,  1051,  1053,  1057,  1058,  1065,  1066,
    1067,  1068,  1069,  1074,  1082,  1083,  1086,  1087,  1090,  1097,
    1098,  1103,  1104,  1108,  1109,  1110,  1111,  1112,  1116,  1117,
    1118,  1121,  1124,  1125,  1126,  1127,  1128,  1129,  1130,  1131,
    1132,  1133,  1136,  1143,  1145,  1151,  1152,  1153,  1156,  1158,
    1160,  1162,  1165,  1170,  1178,  1179,  1182,  1183,  1186,  1187,
    1188
};
#endif

#if YYDEBUG || YYERROR_VERBOSE || 1
/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
static const char *const yytname[] =
{
  "$end", "error", "$undefined", "aIDENTIFIER", "aPRAGMA", "aKNOWNTYPE",
  "aNUM", "aHEXNUM", "aDOUBLE", "aSTRING", "aWSTRING", "aSQSTRING",
  "aUUID", "aEOF", "aACF", "SHL", "SHR", "MEMBERPTR", "EQUALITY",
  "INEQUALITY", "GREATEREQUAL", "LESSEQUAL", "LOGICALOR", "LOGICALAND",
  "ELLIPSIS", "tAGGREGATABLE", "tALLOCATE", "tANNOTATION", "tAPPOBJECT",
  "tASYNC", "tASYNCUUID", "tAUTOHANDLE", "tBINDABLE", "tBOOLEAN",
  "tBROADCAST", "tBYTE", "tBYTECOUNT", "tCALLAS", "tCALLBACK", "tCASE",
  "tCDECL", "tCHAR", "tCOCLASS", "tCODE", "tCOMMSTATUS", "tCONST",
  "tCONTEXTHANDLE", "tCONTEXTHANDLENOSERIALIZE", "tCONTEXTHANDLESERIALIZE",
  "tCONTROL", "tCPPQUOTE", "tDECODE", "tDEFAULT", "tDEFAULTBIND",
  "tDEFAULTCOLLELEM", "tDEFAULTVALUE", "tDEFAULTVTABLE",
  "tDISABLECONSISTENCYCHECK", "tDISPLAYBIND", "tDISPINTERFACE", "tDLLNAME",
  "tDOUBLE", "tDUAL", "tENABLEALLOCATE", "tENCODE", "tENDPOINT", "tENTRY",
  "tENUM", "tERRORSTATUST", "tEXPLICITHANDLE", "tEXTERN", "tFALSE",
  "tFASTCALL", "tFAULTSTATUS", "tFLOAT", "tFORCEALLOCATE", "tHANDLE",
  "tHANDLET", "tHELPCONTEXT", "tHELPFILE", "tHELPSTRING",
  "tHELPSTRINGCONTEXT", "tHELPSTRINGDLL", "tHIDDEN", "tHYPER", "tID",
  "tIDEMPOTENT", "tIGNORE", "tIIDIS", "tIMMEDIATEBIND", "tIMPLICITHANDLE",
  "tIMPORT", "tIMPORTLIB", "tIN", "tIN_LINE", "tINLINE", "tINPUTSYNC",
  "tINT", "tINT32", "tINT3264", "tINT64", "tINTERFACE", "tLCID",
  "tLENGTHIS", "tLIBRARY", "tLICENSED", "tLOCAL", "tLONG", "tMAYBE",
  "tMESSAGE", "tMETHODS", "tMODULE", "tNAMESPACE", "tNOCODE",
  "tNONBROWSABLE", "tNONCREATABLE", "tNONEXTENSIBLE", "tNOTIFY",
  "tNOTIFYFLAG", "tNULL", "tOBJECT", "tODL", "tOLEAUTOMATION", "tOPTIMIZE",
  "tOPTIONAL", "tOUT", "tPARTIALIGNORE", "tPASCAL", "tPOINTERDEFAULT",
  "tPRAGMA_WARNING", "tPROGID", "tPROPERTIES", "tPROPGET", "tPROPPUT",
  "tPROPPUTREF", "tPROXY", "tPTR", "tPUBLIC", "tRANGE", "tREADONLY",
  "tREF", "tREGISTER", "tREPRESENTAS", "tREQUESTEDIT", "tRESTRICTED",
  "tRETVAL", "tSAFEARRAY", "tSHORT", "tSIGNED", "tSIZEIS", "tSIZEOF",
  "tSMALL", "tSOURCE", "tSTATIC", "tSTDCALL", "tSTRICTCONTEXTHANDLE",
  "tSTRING", "tSTRUCT", "tSWITCH", "tSWITCHIS", "tSWITCHTYPE",
  "tTHREADING", "tTRANSMITAS", "tTRUE", "tTYPEDEF", "tUIDEFAULT", "tUNION",
  "tUNIQUE", "tUNSIGNED", "tUSESGETLASTERROR", "tUSERMARSHAL", "tUUID",
  "tV1ENUM", "tVARARG", "tVERSION", "tVIPROGID", "tVOID", "tWCHAR",
  "tWIREMARSHAL", "tAPARTMENT", "tNEUTRAL", "tSINGLE", "tFREE", "tBOTH",
  "','", "'?'", "':'", "'|'", "'^'", "'&'", "'<'", "'>'", "'-'", "'+'",
  "'*'", "'/'", "'%'", "'!'", "'~'", "CAST", "PPTR", "POS", "NEG",
  "ADDRESSOF", "'.'", "'['", "']'", "'{'", "'}'", "';'", "'('", "')'",
  "'='", "$accept", "input", "m_acf", "gbl_statements", "$@1",
  "imp_statements", "$@2", "int_statements", "semicolon_opt", "statement",
  "pragma_warning", "warnings", "typedecl", "cppquote", "import_start",
  "import", "importlib", "libraryhdr", "library_start", "librarydef",
  "m_args", "arg_list", "args", "arg", "array", "m_attributes",
  "attributes", "attrib_list", "str_list", "attribute", "uuid_string",
  "callconv", "cases", "case", "enums", "enum_list", "enum", "enumdef",
  "m_exprs", "m_expr", "expr", "expr_list_int_const", "expr_int_const",
  "expr_const", "fields", "field", "ne_union_field", "ne_union_fields",
  "union_field", "s_field", "funcdef", "declaration", "m_ident", "t_ident",
  "ident", "base_type", "m_int", "int_std", "coclass", "coclasshdr",
  "coclassdef", "namespacedef", "coclass_ints", "coclass_int",
  "dispinterface", "dispinterfacehdr", "dispint_props", "dispint_meths",
  "dispinterfacedef", "inherit", "interface", "interfacehdr",
  "interfacedef", "interfacedec", "module", "modulehdr", "moduledef",
  "storage_cls_spec", "function_specifier", "type_qualifier",
  "m_type_qual_list", "decl_spec", "m_decl_spec_no_type",
  "decl_spec_no_type", "declarator", "direct_declarator",
  "abstract_declarator", "abstract_declarator_no_direct",
  "m_abstract_declarator", "abstract_direct_declarator", "any_declarator",
  "any_declarator_no_direct", "m_any_declarator", "any_direct_declarator",
  "declarator_list", "m_bitfield", "struct_declarator",
  "struct_declarator_list", "init_declarator", "threading_type",
  "pointer_type", "structdef", "type", "typedef", "uniondef", "version",
  "acf_statements", "acf_int_statements", "acf_int_statement",
  "acf_interface", "acf_attributes", "acf_attribute_list", "acf_attribute", YY_NULLPTR
};
#endif

# ifdef YYPRINT
/* YYTOKNUM[NUM] -- (External) token number corresponding to the
   (internal) symbol number NUM (which must be that of a token).  */
static const yytype_uint16 yytoknum[] =
{
       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
     385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
     395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
     405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
     415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
     425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
     435,   436,   437,   438,    44,    63,    58,   124,    94,    38,
      60,    62,    45,    43,    42,    47,    37,    33,   126,   439,
     440,   441,   442,   443,    46,    91,    93,   123,   125,    59,
      40,    41,    61
};
# endif

#define YYPACT_NINF -560

#define yypact_value_is_default(Yystate) \
  (!!((Yystate) == (-560)))

#define YYTABLE_NINF -405

#define yytable_value_is_error(Yytable_value) \
  0

  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
     STATE-NUM.  */
static const yytype_int16 yypact[] =
{
    -560,    94,  1606,  -560,  -560,  -560,   -57,  -560,  -560,  -560,
     147,  -560,   -89,   165,  -560,   169,  -560,  -560,  -560,  -560,
      35,   149,  -560,  -560,  -560,  -560,  -560,   172,    35,   164,
     -34,  -560,   -29,    35,   333,  -560,  -560,   192,   197,   333,
    -560,  -560,  2869,  -560,  -560,  -560,   -27,  -560,  -560,  -560,
    -560,  -560,    21,  2567,   -13,   -10,  -560,  -560,     9,   -36,
    -560,     2,    12,    38,    23,    46,    41,  -560,  -560,    57,
    -560,   128,   128,   128,   175,  2716,    76,   128,    81,    88,
      61,  -560,   -57,   219,  -560,  -560,   315,  -560,  -560,    15,
    -560,   121,  -560,  -560,   123,  -560,  -560,  -560,  -560,   331,
    2716,  -560,  -560,    58,   129,   -94,  -112,  -560,  -560,   130,
    -560,  -560,   131,  -560,  -560,  -560,   132,   134,  -560,  -560,
    -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,   138,  -560,
    -560,  -560,   140,  -560,  -560,  -560,   141,   146,  -560,  -560,
    -560,  -560,   150,   151,   153,   157,   158,  -560,   160,  -560,
    -560,   161,  -560,   163,  -560,  -560,   166,   167,  -560,  -560,
    -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,
    -560,   168,  -560,  -560,  -560,   170,   171,  -560,  -560,  -560,
    -560,  -560,  -560,   174,  -560,  -560,   185,  -560,  -560,  -560,
     187,  -560,  -560,  -560,   188,   189,   190,   191,  -560,  -560,
    -560,   195,   196,  -560,  -560,   206,   209,   211,  -132,  -560,
    -560,  -560,  1736,   851,   133,   267,   270,   273,   283,   286,
     220,   148,  -560,  -560,  -560,  -560,   175,   173,   216,  -560,
    -560,  -560,  -560,  -560,   -42,  -560,  -560,  -560,   290,   222,
    -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,
    -560,  -560,   175,   175,  -560,   127,  -101,  -560,  -560,  -560,
     128,  -560,  -560,  -560,  -560,  -560,  -560,  -119,  -560,  -560,
     374,   215,   291,  -560,   249,   225,  -560,   227,  -560,   429,
      84,   291,   710,   710,   430,   432,   710,   710,   435,   458,
     710,   461,   710,   710,  2097,   710,   710,   463,   -68,   464,
     710,  2716,   710,   710,  2716,   -38,  2716,  2716,    84,   324,
     466,  2716,  2869,   271,  -560,   268,  -560,  -560,  -560,   272,
    -560,   278,  -560,  -560,  -560,    23,  2612,  -560,   279,  -560,
    -560,  -560,  -560,   279,   -91,  -560,  -560,  -122,  -560,   293,
     -65,   280,   284,  -560,  -560,  1193,    52,   266,  -560,   710,
     542,  2097,  -560,  -560,    61,  -560,   285,  -560,   282,   303,
    -560,   281,   488,  -560,   -49,   133,   -39,   294,  -560,  -560,
     295,   296,  -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,
    -560,   305,  -560,   710,   710,   710,   710,   710,   710,   596,
    2299,  -135,  -560,  2299,   306,   307,  -560,  -111,   308,   309,
     314,   316,   317,   323,   326,   371,   327,  2612,    77,   328,
    -106,  -560,  2299,   329,   330,   332,   311,   335,  -100,  1397,
     343,  -560,  -560,  -560,  -560,  -560,   344,   346,   359,   360,
     292,  -560,   361,   362,   367,  -560,  2869,   492,  -560,  -560,
    -560,   175,    23,   -11,  -560,  1089,  -560,   340,  2612,   370,
    1476,   334,   413,  1297,    23,  -560,  2612,  -560,  -560,  -560,
    -560,   611,  -560,  2190,   377,   402,  -560,  -560,  -560,   380,
    -560,   291,   710,  -560,    18,  -560,  2612,  -560,   378,  -560,
     384,  -560,   389,  -560,  -560,  -560,  2612,    36,    36,    36,
      36,    36,    36,  2102,   496,   710,   710,   597,   710,   710,
     710,   710,   710,   710,   710,   710,   710,   710,   710,   710,
     710,   710,   710,   710,   710,   605,   710,   710,  -560,  -560,
    -560,   600,  -560,  -560,  -560,  -560,  -560,  -560,  -560,  -560,
    -560,  -560,    77,  -560,  1833,  -560,    77,  -560,  -560,  -560,
     -87,  -560,   710,  -560,  -560,  -560,  -560,   710,  -560,  -560,
    -560,  -560,  -560,  -560,  -560,  -560,   604,  -560,  -560,  -560,
    -560,   400,  -560,  -560,   428,  -560,  -560,  -560,  -560,   175,
     116,  -560,  -560,  2612,   407,  -560,  -560,  -560,    23,  -560,
    -560,  -560,  -560,  2009,   419,   417,   380,  -560,  -560,  -560,
    -560,    77,   418,   291,  -560,  -560,   496,  -560,  -560,  1921,
    -560,   496,  -560,   415,   -74,   318,   318,  -560,   575,   575,
     482,   482,  2318,  2337,  2260,  2372,  2394,   218,   482,   482,
      54,    54,    36,    36,    36,  -560,  2212,  -560,  -560,  -560,
      74,  -560,   421,    77,   422,  -560,  2097,  -560,  -560,   424,
    -560,    23,   970,   175,  -560,  -560,  1401,  -560,  -560,  -560,
     623,  -560,  -560,   444,  -560,  -103,  -560,   431,  -560,   425,
     375,  -560,   434,    77,   437,  -560,   710,  2097,  -560,   710,
    -560,  -560,    74,  -560,  -560,  -560,   440,  -560,  -560,  -560,
    -560,    23,   433,   710,  -560,    77,  -560,  -560,  -560,  -560,
      74,  -560,  -560,  -560,    36,   441,  2299,  -560,  -560,  -560,
    -560,  -560,  -560,    -1,  -560,  -560,   710,   453,  -560,  -560,
     468,   -58,   -58,  -560,  -560,   447,  -560,  -560
};

  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
     Performed when YYTABLE does not specify something else to do.  Zero
     means the default is an error.  */
static const yytype_uint16 yydefact[] =
{
       5,     0,     3,     1,    35,   383,   398,   273,   265,   284,
       0,   322,     0,     0,   272,   260,   274,   318,   271,   275,
     276,     0,   321,   278,   285,   286,   283,     0,   276,     0,
       0,   320,     0,   276,     0,   280,   319,   260,   260,   270,
     382,   266,    76,     2,    14,    36,     0,    30,    15,    33,
      15,    13,     0,    69,   385,     0,   384,   267,     0,     0,
      11,     0,     0,     0,    28,     0,   304,     9,     8,     0,
      12,   327,   327,   327,     0,     0,   387,   327,     0,   389,
       0,     4,   398,     0,   287,   288,     0,   295,   296,   386,
     262,     0,   277,   282,     0,   306,   307,   281,   291,     0,
       0,   279,   268,   388,     0,   390,     0,   269,    77,     0,
      79,    80,     0,    81,    82,    83,     0,     0,    86,    87,
      88,    89,    90,    91,    92,    93,    94,    95,     0,    97,
      98,    99,     0,   101,   102,   103,     0,     0,   106,   107,
     108,   109,     0,     0,     0,     0,     0,   115,     0,   117,
     118,     0,   120,     0,   122,   123,   126,     0,   127,   128,
     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
     139,     0,   141,   142,   143,     0,     0,   146,   147,   148,
     149,   380,   150,     0,   152,   378,     0,   154,   155,   156,
       0,   158,   159,   160,     0,     0,     0,     0,   165,   379,
     166,     0,     0,   170,   171,     0,     0,     0,     0,    71,
     175,    31,    68,    68,    68,   260,     0,     0,   260,   260,
       0,   385,   289,   297,   308,   316,     0,   387,   389,    32,
      10,   292,     6,   313,     0,    29,   311,   312,     0,     0,
      26,   331,   328,   330,   329,   263,   264,   178,   179,   180,
     181,   323,     0,     0,   335,   371,   334,   257,   385,   387,
     327,   389,   325,    34,   409,   408,   410,     0,   406,   399,
       0,     0,   186,    50,     0,     0,   243,     0,   249,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,   196,     0,     0,     0,
       0,     0,   196,     0,     0,     0,     0,     0,     0,     0,
       0,     0,    76,    70,    51,     0,    23,    24,    25,     0,
      21,     0,    19,    16,    22,    28,     0,    69,   386,    53,
      54,   314,   315,   388,   390,    55,   256,    68,     5,     0,
      68,     0,     0,   305,    26,    68,     0,     0,   333,     0,
       0,    57,   337,   326,     0,   405,     0,    49,     0,   188,
     189,   192,     0,   391,    68,    68,    68,     0,   177,   176,
       0,     0,   207,   198,   199,   200,   204,   205,   206,   201,
     202,     0,   203,     0,     0,     0,     0,     0,     0,     0,
     241,     0,   239,   242,     0,     0,    74,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,   356,     0,
       0,   194,   197,     0,     0,     0,     0,     0,     0,     0,
       0,   373,   374,   375,   376,   377,     0,     0,     0,     0,
     395,   397,     0,     0,     0,    72,    76,     0,    20,    17,
      56,     0,    28,     0,   293,    68,   298,     0,     0,     0,
       0,     0,     0,    68,    28,    27,    69,   324,   332,   336,
     372,     0,    67,     0,     0,    61,    58,    59,   407,   400,
     193,   187,     0,    38,     0,   381,     0,   244,     0,   393,
      69,   250,     0,    78,   169,    84,     0,   231,   230,   229,
     232,   227,   228,     0,   344,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,    85,    96,
     100,     0,   104,   105,   110,   111,   112,   113,   114,   116,
     119,   121,   356,   323,    57,   361,   356,   358,   357,    64,
     353,   125,   196,   124,   140,   144,   145,     0,   153,   157,
     161,   162,   164,   163,   167,   168,     0,   172,   173,   174,
      73,     0,    15,   364,   392,   290,   294,     7,   300,     0,
     387,   299,   302,     0,     0,   255,   303,    26,    28,   317,
      66,    65,   338,     0,   404,     0,   400,   190,   191,    39,
      37,     0,   389,   258,   248,   247,   344,   238,   323,    57,
     348,   344,   345,     0,   341,   220,   221,   233,   214,   215,
     218,   219,   209,   210,     0,   211,   212,   213,   217,   216,
     223,   222,   225,   226,   224,   234,     0,   240,    75,    63,
     356,   323,     0,   356,     0,   352,    57,   360,   195,     0,
     396,    28,    68,     0,   253,   301,    68,   309,    62,    60,
       0,   403,   401,   366,   369,     0,   246,     0,   259,     0,
     344,   323,     0,   356,     0,   340,     0,    57,   347,     0,
     237,   351,   356,   362,   355,   359,     0,   151,    52,    18,
     365,    28,     0,     0,   368,     0,   245,   182,   236,   339,
     356,   349,   343,   346,   235,     0,   208,   354,   363,   310,
     402,   367,   370,     0,   342,   350,     0,     0,   394,   183,
       0,    68,    68,   252,   185,     0,   184,   251
};

  /* YYPGOTO[NTERM-NUM].  */
static const yytype_int16 yypgoto[] =
{
    -560,  -560,  -560,   320,  -560,   -46,  -560,  -317,  -315,     0,
    -560,  -560,  -560,  -560,  -560,   208,  -560,  -560,  -560,    10,
    -514,  -560,  -560,  -261,  -242,  -203,    -2,  -560,  -560,  -272,
     354,   -66,  -560,  -560,  -560,  -560,   198,    13,   366,   137,
    -195,  -560,  -264,  -280,  -560,  -560,  -560,  -560,   -41,  -237,
    -560,   233,  -560,    25,   -69,  -560,    42,    99,     5,  -560,
      11,    17,  -560,  -560,   619,  -560,  -560,  -560,  -560,  -560,
     -18,  -560,    19,    16,  -560,  -560,    20,  -560,  -560,  -307,
    -496,   -52,   -43,   -30,  -236,  -560,  -560,  -560,  -540,  -560,
    -559,  -560,    51,  -560,  -560,  -560,     3,  -560,   459,  -560,
     391,     1,   -50,  -560,     7,  -560,   615,   112,  -560,  -560,
     115,  -560,   348
};

  /* YYDEFGOTO[NTERM-NUM].  */
static const yytype_int16 yydefgoto[] =
{
      -1,     1,    43,     2,   338,   212,   562,   345,   236,   316,
      45,   474,    46,    47,    48,    49,   317,   220,    50,   318,
     464,   465,   466,   467,   535,    52,   327,   208,   397,   209,
     370,   536,   703,   709,   358,   359,   360,   258,   410,   411,
     390,   391,   392,   394,   364,   477,   481,   366,   714,   715,
     574,    55,   657,    91,   537,    56,    93,    57,   319,    59,
     320,   321,   337,   444,    62,    63,   340,   450,    64,   239,
      65,    66,   322,   323,   225,    69,   324,    71,    72,    73,
     346,    74,   241,    75,   255,   256,   602,   664,   603,   604,
     538,   634,   539,   540,   564,   684,   654,   655,   257,   426,
     210,   259,    77,    78,   261,   432,    81,   585,   586,    82,
      83,   267,   268
};

  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
     positive, shift that token.  If negative, reduce the rule whose
     number is the opposite.  If YYTABLE_NINF, syntax error.  */
static const yytype_int16 yytable[] =
{
      53,   226,    44,    76,   213,   254,   398,    58,   253,    79,
     440,   326,    51,    60,   352,    54,   347,   348,    68,    61,
     632,    67,    70,   399,   589,   260,   402,   453,   404,   243,
     244,   409,   653,   406,   262,   224,   416,   630,   706,   457,
     435,   242,   242,   242,  -404,   447,   277,   242,    13,   517,
     275,   707,   312,   497,   227,   245,   659,   246,   222,    27,
     228,   665,   104,   106,  -261,   354,   221,  -261,   181,   460,
      97,   497,   185,   521,   313,   101,   518,   245,   542,   246,
     245,   685,   246,    42,   542,   662,   442,   355,   393,   339,
      27,   393,   247,   368,     3,   278,   369,    11,   405,   199,
     522,   412,   660,   449,   350,   543,   686,   412,   419,   351,
     458,   549,   264,  -261,   247,   -45,  -261,   247,   350,    11,
     689,    86,   676,   636,   248,   265,   653,   565,   478,   482,
     266,   350,    92,   102,   443,   672,   667,   448,   107,   579,
      42,   421,   422,   423,   424,   425,   248,    42,    80,   248,
      84,   713,    85,   695,   393,   463,    42,   254,    94,   475,
     253,   476,   448,   448,   560,   690,    42,    98,    87,   479,
      88,   231,    89,    11,    90,    95,    99,    96,   245,   249,
     246,   100,   211,   254,   254,   214,   253,   253,   487,   488,
     489,   490,   491,   492,   493,   103,   -40,    90,    17,   229,
     105,   249,    90,   361,   249,   563,   250,   708,   588,   232,
      53,    53,   371,    76,    76,   247,   341,   353,   230,    79,
      79,   233,  -261,    22,   -41,    54,    54,   238,   250,   590,
     242,   250,   235,   495,   496,   497,   498,   499,   500,   501,
     515,   516,   408,   104,   106,   234,   251,   248,   512,   513,
     514,   417,   600,   627,   420,   237,   427,   428,   515,   516,
     646,   434,   252,   647,   240,  -261,   490,   -43,   533,    31,
     328,   533,    90,   329,   441,   330,   331,   254,   332,   350,
     253,    36,   350,   639,   534,   -42,   333,   534,    90,   334,
     263,    90,   407,   342,   245,   343,   246,   -44,   637,   408,
     605,   606,   249,   608,   609,   610,   611,   612,   613,   614,
     615,   616,   617,   618,   619,   620,   621,   622,   623,   624,
     270,   626,   649,   457,   271,  -254,   678,  -254,   272,   250,
     430,   431,   273,   644,   274,   497,   276,   494,    42,   349,
     279,   280,   281,   456,   282,   455,    76,   412,   283,   407,
     284,   285,    79,   457,   600,   532,   286,   -46,    54,   600,
     287,   288,   668,   289,   480,   457,   699,   290,   291,   251,
     292,   293,   254,   294,     9,   253,   295,   296,   297,   356,
     298,   299,   -47,   457,   300,   252,   495,   496,   497,   498,
     499,   500,   501,   502,   503,   301,   569,   302,   303,   304,
     305,   306,   361,   701,   226,   307,   308,   680,   508,   509,
     510,   511,   512,   513,   514,   247,   309,    20,   600,   310,
      11,   311,   515,   516,   591,   -48,   357,   335,   601,   344,
      23,    24,    25,    26,   596,   362,   363,   365,   367,   395,
      28,   396,   710,    53,   400,    44,    76,   248,   573,   570,
      58,   456,    79,   455,    76,    51,    60,   227,    54,   566,
      79,    68,    61,   228,    67,    70,    54,   401,   633,   221,
     403,   694,   413,   415,   696,   433,   436,   459,   437,   446,
      33,   438,   408,   592,    35,   439,  -261,   471,   393,   451,
     470,   452,   469,   472,   473,   547,   556,   495,   496,   497,
     254,   561,   249,   253,    21,   483,   484,   485,   448,   448,
     510,   511,   512,   513,   514,   486,   642,   519,   520,   523,
     524,   226,   515,   516,   658,   525,   568,   526,   527,   250,
     601,   408,   407,   663,   528,   601,   247,   529,   531,   541,
     544,   545,   576,   546,   584,   372,   548,   408,   373,   374,
     375,   376,   377,   378,   551,   552,   504,   553,   505,   506,
     507,   508,   509,   510,   511,   512,   513,   514,   248,   598,
     554,   555,   557,   558,   254,   515,   516,   253,   559,   571,
     350,   407,   530,   629,   408,   599,   583,   635,   582,   593,
     495,   496,   497,   594,   601,   500,   501,   407,   595,   372,
     607,     5,   373,   374,   375,   376,   377,   378,   625,   628,
     640,   641,   643,   379,   372,   408,   645,   373,   374,   375,
     376,   377,   378,   249,    80,   651,   666,   656,   682,     7,
     683,     8,   673,   675,   407,   677,   688,     9,   687,   711,
      53,    11,   700,    76,   456,   691,   455,    76,   693,    79,
     250,   698,   705,    79,   712,    54,   717,    14,   445,    54,
     577,   380,   429,   215,    16,   407,    17,   379,   418,   587,
      18,   716,   223,    19,   510,   511,   512,   513,   514,   638,
      20,   671,   379,   575,   674,   336,   515,   516,   702,   414,
     598,    22,   381,    23,    24,    25,    26,   269,   652,   650,
       0,   350,   468,    28,     0,   382,   599,     0,     0,     0,
       0,     0,     0,   372,   692,   380,   373,   374,   375,   376,
     377,   378,     0,   697,     0,     0,     0,     0,     0,     0,
     380,   383,     0,     0,   384,   385,   461,    31,     0,   387,
     388,   704,    32,    33,    34,     0,   381,    35,   462,    36,
       0,     0,   389,   218,     0,     0,     0,     0,     0,   382,
       0,   381,   219,     0,    39,   508,   509,   510,   511,   512,
     513,   514,    40,    41,   382,     0,     0,     0,     0,   515,
     516,   379,     0,     0,     0,   383,     0,     0,   384,   385,
     386,     0,     0,   387,   388,     0,     0,     0,     0,     0,
     383,     0,     0,   384,   385,   386,   389,     0,   387,   388,
       0,     0,     0,     0,     0,     0,     0,   580,     0,     0,
       0,   389,     0,     0,     0,     0,     0,     0,     0,   380,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     4,     5,     0,     0,     0,
     381,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,   382,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     7,     0,     8,     0,     0,     0,
       0,     0,     9,    10,     0,     0,    11,     0,     0,   383,
       0,    12,   384,   385,   386,     0,     0,   387,   388,     0,
      13,     0,    14,     0,     0,     0,     0,     0,    15,    16,
     389,    17,     0,     0,     0,    18,     0,     0,    19,     0,
       0,     0,     0,     0,     0,    20,     0,     0,     0,     0,
       0,     0,    21,   315,     0,     0,    22,     0,    23,    24,
      25,    26,    27,     0,     0,     0,     0,     0,    28,     0,
       0,     0,     0,    29,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     4,     5,     0,     0,     0,     0,
      30,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,    31,     0,     0,     0,     0,    32,    33,    34,
       0,     0,    35,     7,    36,     8,     0,     0,    37,     0,
       0,     9,    10,     0,     0,    11,     0,    38,     0,    39,
      12,     0,     0,     0,     0,     0,     0,    40,    41,    13,
       0,    14,     0,     0,     0,     0,     0,    15,    16,     0,
      17,     0,     0,     0,    18,     0,     0,    19,     0,     0,
       0,     0,     0,     0,    20,     0,    42,     0,     0,   325,
       0,    21,   315,     0,     0,    22,     0,    23,    24,    25,
      26,    27,     0,     0,     0,     0,     0,    28,     0,     0,
       0,     0,    29,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     4,     5,     0,     0,     0,     0,    30,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,    31,     0,     0,     0,     0,    32,    33,    34,     0,
       0,    35,     7,    36,     8,     0,     0,    37,     0,     0,
       9,    10,     0,     0,    11,     0,    38,     0,    39,    12,
       0,     0,     0,     0,     0,     0,    40,    41,    13,     0,
      14,     0,     0,     0,     0,     0,    15,    16,     0,    17,
       0,     0,     0,    18,     0,     0,    19,     0,     0,     0,
       0,     0,     0,    20,     0,    42,     0,     0,   679,     0,
      21,     0,     0,     0,    22,     0,    23,    24,    25,    26,
      27,     0,     0,     0,     0,     0,    28,     4,     5,     0,
       0,    29,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,    30,     0,
       0,     0,     0,     0,     0,     0,     7,     0,     8,     0,
      31,     0,     0,     0,     9,    32,    33,    34,    11,     0,
      35,     0,    36,    12,     0,     0,    37,     0,     0,     0,
       0,     0,     0,     0,    14,    38,     0,    39,     0,     0,
      15,    16,     0,    17,     0,    40,    41,    18,     0,     0,
      19,     0,     0,     0,     0,     0,     0,    20,     0,     0,
       0,     0,     0,     0,    21,     0,     0,     0,    22,     0,
      23,    24,    25,    26,    42,     0,     0,   567,     0,     0,
      28,     4,     5,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,    30,     0,     0,     0,     0,     0,     0,     0,
       7,     0,     8,     0,    31,     0,     0,     0,     9,    32,
      33,    34,    11,     0,    35,     0,    36,    12,     0,     0,
      37,     0,     0,     0,     0,     0,     0,     0,    14,    38,
       0,    39,     0,     0,    15,    16,     0,    17,     0,    40,
      41,    18,     0,     0,    19,     0,     0,     0,     0,     0,
       0,    20,     0,     0,     0,     0,     0,     0,    21,     0,
       0,     0,    22,     0,    23,    24,    25,    26,    42,     0,
       0,   454,     0,     0,    28,     4,     5,     0,     0,     0,
       0,     0,   495,   496,   497,   498,   499,   500,   501,   502,
     503,     0,     0,     0,     0,     0,    30,     0,     0,     0,
       0,     0,     0,     0,     7,     0,     8,     0,    31,     0,
       0,     0,     9,    32,    33,    34,    11,     0,    35,     0,
      36,    12,     0,     0,    37,     0,     0,     0,     0,     0,
       0,     0,    14,    38,     0,    39,     0,     0,    15,    16,
       0,    17,     0,    40,    41,    18,     0,     0,    19,     0,
       0,     5,     0,     0,     0,    20,     0,     0,     0,     0,
       0,     0,    21,     0,     0,     0,    22,     0,    23,    24,
      25,    26,    42,     0,     0,   578,     0,     0,    28,     7,
       0,     8,     0,     0,     0,     0,     0,     9,     0,     0,
       0,    11,     0,     0,     0,     0,     0,     0,     0,     0,
      30,     0,     0,     0,     0,     0,     0,    14,     0,     0,
       0,     0,    31,   215,    16,     0,    17,    32,    33,    34,
      18,     0,    35,    19,    36,     0,     0,     0,    37,     0,
      20,     0,     0,     0,     0,     0,     0,    38,     0,    39,
       0,    22,     0,    23,    24,    25,    26,    40,    41,     0,
       0,     0,   504,    28,   505,   506,   507,   508,   509,   510,
     511,   512,   513,   514,     0,     0,     0,     0,     0,     0,
       0,   515,   516,     0,     0,     0,    42,     0,   550,   681,
       4,     5,     0,     0,     0,     0,     0,    31,     0,     0,
       6,     0,    32,    33,    34,     0,     0,    35,     0,    36,
       0,     0,     0,   218,     0,     0,     0,     0,     0,     7,
       0,     8,   219,     0,    39,     0,     0,     9,    10,     0,
       0,    11,    40,    41,     0,     0,    12,     0,     0,     0,
       0,     0,     0,     0,     0,    13,     0,    14,     0,     0,
       0,     0,     0,    15,    16,     0,    17,     0,     0,     0,
      18,    42,     0,    19,   572,     0,     0,     0,     0,     0,
      20,     0,     0,     0,     0,     0,     0,    21,     0,     0,
       0,    22,     0,    23,    24,    25,    26,    27,     0,     0,
       0,     0,     0,    28,     0,     0,     0,     0,    29,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,    30,     0,     0,     0,     0,
       4,     5,     0,     0,     0,     0,     0,    31,     0,   314,
       0,     0,    32,    33,    34,     0,     0,    35,     0,    36,
       0,     0,     0,    37,     0,     0,     0,     0,     0,     7,
     -68,     8,    38,     0,    39,     0,     0,     9,    10,     0,
       0,    11,    40,    41,     0,     0,    12,     0,     0,     0,
       0,     0,     0,     0,     0,    13,     0,    14,     0,     0,
       0,     0,     0,    15,    16,     0,    17,     0,     0,     0,
      18,    42,     0,    19,     0,     0,     0,     0,     0,     0,
      20,     0,     0,     0,     0,     0,     0,    21,   315,     0,
       0,    22,     0,    23,    24,    25,    26,    27,     5,     0,
       0,     0,     0,    28,     0,     0,     0,     0,    29,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,    30,     7,     0,     8,     0,
       0,     0,     0,   247,     9,     0,     0,    31,    11,     0,
       0,     0,    32,    33,    34,     0,     0,    35,     0,    36,
       0,     0,     0,    37,    14,     0,     0,     0,     0,     0,
     215,    16,    38,    17,    39,   248,     0,    18,     0,     0,
      19,     0,    40,    41,     0,     0,     0,    20,     0,     0,
       0,     0,     0,     0,     0,     0,     5,     0,    22,     0,
      23,    24,    25,    26,     0,     0,     0,     0,     0,     0,
      28,    42,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     7,     0,     8,     0,     0,     0,
     249,   247,     9,     0,     0,     0,    11,     0,     0,     0,
       0,     0,     0,     0,    31,     0,     0,     0,     0,    32,
      33,    34,    14,     0,    35,     0,    36,   250,   215,    16,
     218,    17,     0,   248,     0,    18,     0,     0,    19,   219,
       0,    39,     0,     0,     0,    20,     0,     0,     0,    40,
      41,     0,     0,     0,     5,     0,    22,     0,    23,    24,
      25,    26,     0,     0,     0,     0,     0,   631,    28,     0,
       0,     0,     0,   648,     0,     0,     0,     0,    42,     0,
       0,     0,     7,     0,     8,     0,     0,     0,   249,     0,
       9,     0,     0,     0,    11,     0,     0,     0,     0,     0,
       0,     0,    31,     0,     0,     0,     0,    32,    33,    34,
      14,     0,    35,     0,    36,   250,   215,    16,   218,    17,
       0,     0,     0,    18,     0,     0,    19,   219,     0,    39,
       0,     0,     0,    20,     0,     0,     0,    40,    41,     0,
       0,     0,     5,     0,    22,     0,    23,    24,    25,    26,
       0,     0,     0,     0,     0,   661,    28,   495,   496,   497,
     498,   499,   500,   501,   502,   503,    42,     0,     0,     0,
       7,     0,     8,     0,     0,     0,     0,     0,     9,     0,
       0,     0,    11,     0,     0,     0,     0,     0,     0,     0,
      31,     0,     0,     0,     0,    32,    33,    34,    14,     0,
      35,     0,    36,     0,   215,    16,   218,    17,     0,     0,
       0,    18,     0,     0,    19,   219,     0,    39,     0,     0,
       0,    20,     0,     0,     0,    40,    41,     0,     0,     0,
       0,     0,    22,     0,    23,    24,    25,    26,     0,     0,
       0,     0,     0,     0,    28,   495,   496,   497,   498,   499,
     500,   501,   502,   503,    42,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,   495,   496,   497,
     498,   499,   500,   501,   502,   503,     0,     0,    31,     0,
       0,     0,     0,    32,    33,    34,     0,     0,    35,     0,
      36,     0,     0,     0,   218,     0,     0,     0,     0,     0,
       0,     0,     0,   219,     0,    39,     0,     0,     0,     0,
       0,     0,     0,    40,    41,   495,   496,   497,   498,   499,
     500,   501,   502,   503,     0,     0,     0,   504,     0,   505,
     506,   507,   508,   509,   510,   511,   512,   513,   514,     0,
       0,     0,    42,     0,     0,     0,   515,   516,     0,     0,
       0,     0,     0,   597,   495,   496,   497,   498,   499,   500,
     501,   502,   503,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,   495,   496,   497,   498,   499,   500,   501,
       0,   503,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,   495,   496,   497,   498,   499,   500,   501,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,   504,     0,   505,   506,   507,
     508,   509,   510,   511,   512,   513,   514,   495,   496,   497,
     498,   499,   500,   501,   515,   516,   581,   504,     0,   505,
     506,   507,   508,   509,   510,   511,   512,   513,   514,   495,
     496,   497,   498,   499,   500,   501,   515,   516,   670,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,   504,   669,   505,   506,   507,
     508,   509,   510,   511,   512,   513,   514,     0,     0,     0,
       0,     0,     0,     0,   515,   516,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,   504,     0,   505,   506,   507,   508,
     509,   510,   511,   512,   513,   514,     0,     0,     0,     0,
       0,     0,     0,   515,   516,   505,   506,   507,   508,   509,
     510,   511,   512,   513,   514,     0,     0,     0,     0,     0,
       0,     0,   515,   516,   505,   506,   507,   508,   509,   510,
     511,   512,   513,   514,     0,     0,     0,     0,     0,     0,
       0,   515,   516,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     506,   507,   508,   509,   510,   511,   512,   513,   514,     0,
       0,     0,     5,     0,     0,     0,   515,   516,     0,     0,
       0,     0,     0,   507,   508,   509,   510,   511,   512,   513,
     514,     0,     0,     0,     0,     0,     0,     0,   515,   516,
       7,     0,     8,     0,     0,     0,     0,     0,     9,    10,
       0,     0,    11,     0,     0,     0,     0,     5,     0,     0,
       0,     0,     0,     0,     0,     0,    13,     0,    14,     0,
       0,     0,     0,     0,   215,    16,     0,    17,     0,     0,
       0,    18,     0,     0,    19,     7,     0,     8,     0,     0,
       0,    20,     0,     9,     0,     0,     0,    11,     0,     0,
       0,     0,    22,     0,    23,    24,    25,    26,    27,     0,
       0,   216,     0,    14,    28,     0,     0,     0,   217,   215,
      16,     0,    17,     0,     0,     0,    18,     0,     0,    19,
       0,     0,     0,     0,     0,     0,    20,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,    22,    31,    23,
      24,    25,    26,    32,    33,    34,     0,     0,    35,    28,
      36,     5,     0,     0,   218,     0,     0,     0,     0,     0,
       0,     0,     0,   219,     0,    39,     0,     0,     0,     0,
       0,     0,     0,    40,    41,     0,     0,     0,     0,     7,
       0,     8,     0,    31,     0,     0,     0,     9,    32,    33,
      34,     0,     0,    35,     0,    36,     0,     0,     0,   218,
       0,     0,     0,     0,     0,     0,     0,    14,   219,     0,
      39,     0,     0,   215,    16,     0,     0,     0,    40,    41,
      18,     0,     0,    19,     0,     0,     0,     0,     0,     0,
      20,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,    23,    24,    25,    26,     0,     0,     0,
       0,     0,     0,    28,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       0,     0,    32,    33,    34,     0,     0,    35,     0,     0,
       0,     0,     0,   218,     0,     0,     0,     0,     0,     0,
       0,     0,   219,     0,    39,     0,     0,     0,     0,     0,
       0,     0,    40,    41,   108,     0,   109,   110,   111,   112,
     113,   114,     0,   115,     0,     0,   116,     0,   117,     0,
       0,     0,   118,   119,     0,   120,   121,   122,   123,     0,
     124,   125,   126,   127,   128,   129,   130,   131,     0,   132,
       0,   133,   134,   135,   136,   137,     0,     0,   138,     0,
       0,     0,   139,     0,   140,   141,     0,   142,   143,   144,
     145,   146,   147,     0,   148,   149,   150,   151,   152,   153,
       0,     0,   154,     0,     0,   155,     0,     0,     0,     0,
       0,   156,   157,     0,   158,   159,     0,   160,   161,     0,
       0,     0,   162,   163,   164,   165,   166,   167,     0,   168,
     169,   170,   171,   172,   173,   174,     0,   175,     0,   176,
       0,   177,   178,   179,   180,   181,   182,   183,   184,   185,
       0,   186,   187,   188,   189,     0,     0,     0,   190,     0,
       0,   191,     0,     0,   192,   193,     0,     0,   194,   195,
     196,   197,     0,     0,   198,     0,   199,     0,   200,   201,
     202,   203,   204,   205,   206,     0,     0,   207
};

static const yytype_int16 yycheck[] =
{
       2,    53,     2,     2,    50,    74,   286,     2,    74,     2,
     325,   214,     2,     2,   256,     2,   252,   253,     2,     2,
     534,     2,     2,   287,     6,    75,   290,   344,   292,    72,
      73,   295,   591,   294,    77,    53,   300,   533,    39,   346,
     312,    71,    72,    73,   101,   110,   158,    77,    59,   184,
     100,    52,   184,    17,    53,     3,   596,     5,    53,   101,
      53,   601,    37,    38,   158,   184,    53,   158,   136,   349,
      28,    17,   140,   184,   206,    33,   211,     3,   184,     5,
       3,   184,     5,   205,   184,   599,   208,   206,   283,   131,
     101,   286,    40,     9,     0,   207,    12,    45,   293,   167,
     211,   296,   598,   340,   205,   211,   209,   302,   303,   210,
     346,   211,    51,   207,    40,   209,   207,    40,   205,    45,
     660,   210,   636,   210,    72,    64,   685,   442,   365,   366,
      69,   205,    97,    34,   337,   631,   210,   340,    39,   454,
     205,   179,   180,   181,   182,   183,    72,   205,   205,    72,
       3,   209,     5,   667,   349,   350,   205,   226,     9,   208,
     226,   364,   365,   366,   436,   661,   205,     3,     3,   208,
       5,   207,     3,    45,     5,     3,   210,     5,     3,   127,
       5,   210,   209,   252,   253,   164,   252,   253,   383,   384,
     385,   386,   387,   388,   389,     3,   209,     5,    70,   209,
       3,   127,     5,   272,   127,   441,   154,   208,   472,   207,
     212,   213,   281,   212,   213,    40,   234,   260,   209,   212,
     213,   209,   207,    95,   209,   212,   213,   186,   154,   211,
     260,   154,   209,    15,    16,    17,    18,    19,    20,    21,
     204,   205,   294,   218,   219,   207,   194,    72,   194,   195,
     196,   301,   494,   517,   304,   209,   306,   307,   204,   205,
     577,   311,   210,   578,   207,   207,   461,   209,   194,   141,
       3,   194,     5,     3,   326,     5,     3,   346,     5,   205,
     346,   153,   205,   547,   210,   209,     3,   210,     5,     3,
     209,     5,   294,     3,     3,     5,     5,   209,   540,   351,
     495,   496,   127,   498,   499,   500,   501,   502,   503,   504,
     505,   506,   507,   508,   509,   510,   511,   512,   513,   514,
     101,   516,   583,   630,     9,   209,   641,   211,   207,   154,
       6,     7,   209,   569,     3,    17,   207,   389,   205,   212,
     210,   210,   210,   345,   210,   345,   345,   542,   210,   351,
     210,   210,   345,   660,   596,   407,   210,   209,   345,   601,
     210,   210,   604,   210,   366,   672,   681,   210,   210,   194,
     210,   210,   441,   210,    41,   441,   210,   210,   210,     5,
     210,   210,   209,   690,   210,   210,    15,    16,    17,    18,
      19,    20,    21,    22,    23,   210,   448,   210,   210,   210,
     210,   210,   471,   683,   456,   210,   210,   643,   190,   191,
     192,   193,   194,   195,   196,    40,   210,    84,   660,   210,
      45,   210,   204,   205,   476,   209,   211,   207,   494,   207,
      97,    98,    99,   100,   486,   186,   211,   210,     9,     9,
     107,     9,   706,   445,     9,   445,   445,    72,   450,   448,
     445,   453,   445,   453,   453,   445,   445,   456,   445,   443,
     453,   445,   445,   456,   445,   445,   453,     9,   534,   456,
       9,   666,     9,     9,   669,     9,   205,   211,   210,   186,
     147,   209,   534,   476,   151,   207,   207,   184,   683,   209,
     208,   207,   207,   212,     6,   184,   204,    15,    16,    17,
     569,     9,   127,   569,    91,   211,   211,   211,   711,   712,
     192,   193,   194,   195,   196,   210,   562,   211,   211,   211,
     211,   573,   204,   205,   593,   211,   186,   211,   211,   154,
     596,   583,   534,   599,   211,   601,    40,   211,   211,   211,
     211,   211,   208,   211,   164,     3,   211,   599,     6,     7,
       8,     9,    10,    11,   211,   211,   185,   211,   187,   188,
     189,   190,   191,   192,   193,   194,   195,   196,    72,   194,
     211,   211,   211,   211,   643,   204,   205,   643,   211,   209,
     205,   583,   211,   532,   636,   210,   184,   536,   211,   211,
      15,    16,    17,   209,   660,    20,    21,   599,   209,     3,
       3,     5,     6,     7,     8,     9,    10,    11,     3,     9,
       6,   211,   184,    71,     3,   667,   209,     6,     7,     8,
       9,    10,    11,   127,   205,   208,   211,   209,     5,    33,
     186,    35,   211,   211,   636,   211,   211,    41,   207,   186,
     642,    45,   209,   642,   646,   211,   646,   646,   211,   642,
     154,   211,   211,   646,   186,   642,   209,    61,   338,   646,
     452,   119,   308,    67,    68,   667,    70,    71,   302,   471,
      74,   712,    53,    77,   192,   193,   194,   195,   196,   542,
      84,   630,    71,   450,   633,   226,   204,   205,   685,   298,
     194,    95,   150,    97,    98,    99,   100,    82,   586,   584,
      -1,   205,   354,   107,    -1,   163,   210,    -1,    -1,    -1,
      -1,    -1,    -1,     3,   663,   119,     6,     7,     8,     9,
      10,    11,    -1,   672,    -1,    -1,    -1,    -1,    -1,    -1,
     119,   189,    -1,    -1,   192,   193,   194,   141,    -1,   197,
     198,   690,   146,   147,   148,    -1,   150,   151,   206,   153,
      -1,    -1,   210,   157,    -1,    -1,    -1,    -1,    -1,   163,
      -1,   150,   166,    -1,   168,   190,   191,   192,   193,   194,
     195,   196,   176,   177,   163,    -1,    -1,    -1,    -1,   204,
     205,    71,    -1,    -1,    -1,   189,    -1,    -1,   192,   193,
     194,    -1,    -1,   197,   198,    -1,    -1,    -1,    -1,    -1,
     189,    -1,    -1,   192,   193,   194,   210,    -1,   197,   198,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,   206,    -1,    -1,
      -1,   210,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,     4,     5,    -1,    -1,    -1,
     150,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    33,    -1,    35,    -1,    -1,    -1,
      -1,    -1,    41,    42,    -1,    -1,    45,    -1,    -1,   189,
      -1,    50,   192,   193,   194,    -1,    -1,   197,   198,    -1,
      59,    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,    68,
     210,    70,    -1,    -1,    -1,    74,    -1,    -1,    77,    -1,
      -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    -1,    -1,
      -1,    -1,    91,    92,    -1,    -1,    95,    -1,    97,    98,
      99,   100,   101,    -1,    -1,    -1,    -1,    -1,   107,    -1,
      -1,    -1,    -1,   112,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,     4,     5,    -1,    -1,    -1,    -1,
     129,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,   141,    -1,    -1,    -1,    -1,   146,   147,   148,
      -1,    -1,   151,    33,   153,    35,    -1,    -1,   157,    -1,
      -1,    41,    42,    -1,    -1,    45,    -1,   166,    -1,   168,
      50,    -1,    -1,    -1,    -1,    -1,    -1,   176,   177,    59,
      -1,    61,    -1,    -1,    -1,    -1,    -1,    67,    68,    -1,
      70,    -1,    -1,    -1,    74,    -1,    -1,    77,    -1,    -1,
      -1,    -1,    -1,    -1,    84,    -1,   205,    -1,    -1,   208,
      -1,    91,    92,    -1,    -1,    95,    -1,    97,    98,    99,
     100,   101,    -1,    -1,    -1,    -1,    -1,   107,    -1,    -1,
      -1,    -1,   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,     4,     5,    -1,    -1,    -1,    -1,   129,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,   141,    -1,    -1,    -1,    -1,   146,   147,   148,    -1,
      -1,   151,    33,   153,    35,    -1,    -1,   157,    -1,    -1,
      41,    42,    -1,    -1,    45,    -1,   166,    -1,   168,    50,
      -1,    -1,    -1,    -1,    -1,    -1,   176,   177,    59,    -1,
      61,    -1,    -1,    -1,    -1,    -1,    67,    68,    -1,    70,
      -1,    -1,    -1,    74,    -1,    -1,    77,    -1,    -1,    -1,
      -1,    -1,    -1,    84,    -1,   205,    -1,    -1,   208,    -1,
      91,    -1,    -1,    -1,    95,    -1,    97,    98,    99,   100,
     101,    -1,    -1,    -1,    -1,    -1,   107,     4,     5,    -1,
      -1,   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   129,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    33,    -1,    35,    -1,
     141,    -1,    -1,    -1,    41,   146,   147,   148,    45,    -1,
     151,    -1,   153,    50,    -1,    -1,   157,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    61,   166,    -1,   168,    -1,    -1,
      67,    68,    -1,    70,    -1,   176,   177,    74,    -1,    -1,
      77,    -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,
      -1,    -1,    -1,    -1,    91,    -1,    -1,    -1,    95,    -1,
      97,    98,    99,   100,   205,    -1,    -1,   208,    -1,    -1,
     107,     4,     5,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,   129,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      33,    -1,    35,    -1,   141,    -1,    -1,    -1,    41,   146,
     147,   148,    45,    -1,   151,    -1,   153,    50,    -1,    -1,
     157,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    61,   166,
      -1,   168,    -1,    -1,    67,    68,    -1,    70,    -1,   176,
     177,    74,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,
      -1,    84,    -1,    -1,    -1,    -1,    -1,    -1,    91,    -1,
      -1,    -1,    95,    -1,    97,    98,    99,   100,   205,    -1,
      -1,   208,    -1,    -1,   107,     4,     5,    -1,    -1,    -1,
      -1,    -1,    15,    16,    17,    18,    19,    20,    21,    22,
      23,    -1,    -1,    -1,    -1,    -1,   129,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    33,    -1,    35,    -1,   141,    -1,
      -1,    -1,    41,   146,   147,   148,    45,    -1,   151,    -1,
     153,    50,    -1,    -1,   157,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    61,   166,    -1,   168,    -1,    -1,    67,    68,
      -1,    70,    -1,   176,   177,    74,    -1,    -1,    77,    -1,
      -1,     5,    -1,    -1,    -1,    84,    -1,    -1,    -1,    -1,
      -1,    -1,    91,    -1,    -1,    -1,    95,    -1,    97,    98,
      99,   100,   205,    -1,    -1,   208,    -1,    -1,   107,    33,
      -1,    35,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,
      -1,    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     129,    -1,    -1,    -1,    -1,    -1,    -1,    61,    -1,    -1,
      -1,    -1,   141,    67,    68,    -1,    70,   146,   147,   148,
      74,    -1,   151,    77,   153,    -1,    -1,    -1,   157,    -1,
      84,    -1,    -1,    -1,    -1,    -1,    -1,   166,    -1,   168,
      -1,    95,    -1,    97,    98,    99,   100,   176,   177,    -1,
      -1,    -1,   185,   107,   187,   188,   189,   190,   191,   192,
     193,   194,   195,   196,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,   204,   205,    -1,    -1,    -1,   205,    -1,   211,   208,
       4,     5,    -1,    -1,    -1,    -1,    -1,   141,    -1,    -1,
      14,    -1,   146,   147,   148,    -1,    -1,   151,    -1,   153,
      -1,    -1,    -1,   157,    -1,    -1,    -1,    -1,    -1,    33,
      -1,    35,   166,    -1,   168,    -1,    -1,    41,    42,    -1,
      -1,    45,   176,   177,    -1,    -1,    50,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,    59,    -1,    61,    -1,    -1,
      -1,    -1,    -1,    67,    68,    -1,    70,    -1,    -1,    -1,
      74,   205,    -1,    77,   208,    -1,    -1,    -1,    -1,    -1,
      84,    -1,    -1,    -1,    -1,    -1,    -1,    91,    -1,    -1,
      -1,    95,    -1,    97,    98,    99,   100,   101,    -1,    -1,
      -1,    -1,    -1,   107,    -1,    -1,    -1,    -1,   112,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,   129,    -1,    -1,    -1,    -1,
       4,     5,    -1,    -1,    -1,    -1,    -1,   141,    -1,    13,
      -1,    -1,   146,   147,   148,    -1,    -1,   151,    -1,   153,
      -1,    -1,    -1,   157,    -1,    -1,    -1,    -1,    -1,    33,
     164,    35,   166,    -1,   168,    -1,    -1,    41,    42,    -1,
      -1,    45,   176,   177,    -1,    -1,    50,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,    59,    -1,    61,    -1,    -1,
      -1,    -1,    -1,    67,    68,    -1,    70,    -1,    -1,    -1,
      74,   205,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,
      84,    -1,    -1,    -1,    -1,    -1,    -1,    91,    92,    -1,
      -1,    95,    -1,    97,    98,    99,   100,   101,     5,    -1,
      -1,    -1,    -1,   107,    -1,    -1,    -1,    -1,   112,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,   129,    33,    -1,    35,    -1,
      -1,    -1,    -1,    40,    41,    -1,    -1,   141,    45,    -1,
      -1,    -1,   146,   147,   148,    -1,    -1,   151,    -1,   153,
      -1,    -1,    -1,   157,    61,    -1,    -1,    -1,    -1,    -1,
      67,    68,   166,    70,   168,    72,    -1,    74,    -1,    -1,
      77,    -1,   176,   177,    -1,    -1,    -1,    84,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,     5,    -1,    95,    -1,
      97,    98,    99,   100,    -1,    -1,    -1,    -1,    -1,    -1,
     107,   205,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    33,    -1,    35,    -1,    -1,    -1,
     127,    40,    41,    -1,    -1,    -1,    45,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,   141,    -1,    -1,    -1,    -1,   146,
     147,   148,    61,    -1,   151,    -1,   153,   154,    67,    68,
     157,    70,    -1,    72,    -1,    74,    -1,    -1,    77,   166,
      -1,   168,    -1,    -1,    -1,    84,    -1,    -1,    -1,   176,
     177,    -1,    -1,    -1,     5,    -1,    95,    -1,    97,    98,
      99,   100,    -1,    -1,    -1,    -1,    -1,   194,   107,    -1,
      -1,    -1,    -1,    24,    -1,    -1,    -1,    -1,   205,    -1,
      -1,    -1,    33,    -1,    35,    -1,    -1,    -1,   127,    -1,
      41,    -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,   141,    -1,    -1,    -1,    -1,   146,   147,   148,
      61,    -1,   151,    -1,   153,   154,    67,    68,   157,    70,
      -1,    -1,    -1,    74,    -1,    -1,    77,   166,    -1,   168,
      -1,    -1,    -1,    84,    -1,    -1,    -1,   176,   177,    -1,
      -1,    -1,     5,    -1,    95,    -1,    97,    98,    99,   100,
      -1,    -1,    -1,    -1,    -1,   194,   107,    15,    16,    17,
      18,    19,    20,    21,    22,    23,   205,    -1,    -1,    -1,
      33,    -1,    35,    -1,    -1,    -1,    -1,    -1,    41,    -1,
      -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     141,    -1,    -1,    -1,    -1,   146,   147,   148,    61,    -1,
     151,    -1,   153,    -1,    67,    68,   157,    70,    -1,    -1,
      -1,    74,    -1,    -1,    77,   166,    -1,   168,    -1,    -1,
      -1,    84,    -1,    -1,    -1,   176,   177,    -1,    -1,    -1,
      -1,    -1,    95,    -1,    97,    98,    99,   100,    -1,    -1,
      -1,    -1,    -1,    -1,   107,    15,    16,    17,    18,    19,
      20,    21,    22,    23,   205,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    15,    16,    17,
      18,    19,    20,    21,    22,    23,    -1,    -1,   141,    -1,
      -1,    -1,    -1,   146,   147,   148,    -1,    -1,   151,    -1,
     153,    -1,    -1,    -1,   157,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,   166,    -1,   168,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,   176,   177,    15,    16,    17,    18,    19,
      20,    21,    22,    23,    -1,    -1,    -1,   185,    -1,   187,
     188,   189,   190,   191,   192,   193,   194,   195,   196,    -1,
      -1,    -1,   205,    -1,    -1,    -1,   204,   205,    -1,    -1,
      -1,    -1,    -1,   211,    15,    16,    17,    18,    19,    20,
      21,    22,    23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    15,    16,    17,    18,    19,    20,    21,
      -1,    23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    15,    16,    17,    18,    19,    20,    21,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,   185,    -1,   187,   188,   189,
     190,   191,   192,   193,   194,   195,   196,    15,    16,    17,
      18,    19,    20,    21,   204,   205,   206,   185,    -1,   187,
     188,   189,   190,   191,   192,   193,   194,   195,   196,    15,
      16,    17,    18,    19,    20,    21,   204,   205,   206,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,   185,   186,   187,   188,   189,
     190,   191,   192,   193,   194,   195,   196,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,   204,   205,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,   185,    -1,   187,   188,   189,   190,
     191,   192,   193,   194,   195,   196,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,   204,   205,   187,   188,   189,   190,   191,
     192,   193,   194,   195,   196,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,   204,   205,   187,   188,   189,   190,   191,   192,
     193,   194,   195,   196,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,   204,   205,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     188,   189,   190,   191,   192,   193,   194,   195,   196,    -1,
      -1,    -1,     5,    -1,    -1,    -1,   204,   205,    -1,    -1,
      -1,    -1,    -1,   189,   190,   191,   192,   193,   194,   195,
     196,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   204,   205,
      33,    -1,    35,    -1,    -1,    -1,    -1,    -1,    41,    42,
      -1,    -1,    45,    -1,    -1,    -1,    -1,     5,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    59,    -1,    61,    -1,
      -1,    -1,    -1,    -1,    67,    68,    -1,    70,    -1,    -1,
      -1,    74,    -1,    -1,    77,    33,    -1,    35,    -1,    -1,
      -1,    84,    -1,    41,    -1,    -1,    -1,    45,    -1,    -1,
      -1,    -1,    95,    -1,    97,    98,    99,   100,   101,    -1,
      -1,   104,    -1,    61,   107,    -1,    -1,    -1,   111,    67,
      68,    -1,    70,    -1,    -1,    -1,    74,    -1,    -1,    77,
      -1,    -1,    -1,    -1,    -1,    -1,    84,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,   141,    97,
      98,    99,   100,   146,   147,   148,    -1,    -1,   151,   107,
     153,     5,    -1,    -1,   157,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,   166,    -1,   168,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,   176,   177,    -1,    -1,    -1,    -1,    33,
      -1,    35,    -1,   141,    -1,    -1,    -1,    41,   146,   147,
     148,    -1,    -1,   151,    -1,   153,    -1,    -1,    -1,   157,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    61,   166,    -1,
     168,    -1,    -1,    67,    68,    -1,    -1,    -1,   176,   177,
      74,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,
      84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    97,    98,    99,   100,    -1,    -1,    -1,
      -1,    -1,    -1,   107,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,   146,   147,   148,    -1,    -1,   151,    -1,    -1,
      -1,    -1,    -1,   157,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,   166,    -1,   168,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,   176,   177,    25,    -1,    27,    28,    29,    30,
      31,    32,    -1,    34,    -1,    -1,    37,    -1,    39,    -1,
      -1,    -1,    43,    44,    -1,    46,    47,    48,    49,    -1,
      51,    52,    53,    54,    55,    56,    57,    58,    -1,    60,
      -1,    62,    63,    64,    65,    66,    -1,    -1,    69,    -1,
      -1,    -1,    73,    -1,    75,    76,    -1,    78,    79,    80,
      81,    82,    83,    -1,    85,    86,    87,    88,    89,    90,
      -1,    -1,    93,    -1,    -1,    96,    -1,    -1,    -1,    -1,
      -1,   102,   103,    -1,   105,   106,    -1,   108,   109,    -1,
      -1,    -1,   113,   114,   115,   116,   117,   118,    -1,   120,
     121,   122,   123,   124,   125,   126,    -1,   128,    -1,   130,
      -1,   132,   133,   134,   135,   136,   137,   138,   139,   140,
      -1,   142,   143,   144,   145,    -1,    -1,    -1,   149,    -1,
      -1,   152,    -1,    -1,   155,   156,    -1,    -1,   159,   160,
     161,   162,    -1,    -1,   165,    -1,   167,    -1,   169,   170,
     171,   172,   173,   174,   175,    -1,    -1,   178
};

  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
     symbol of state STATE-NUM.  */
static const yytype_uint16 yystos[] =
{
       0,   214,   216,     0,     4,     5,    14,    33,    35,    41,
      42,    45,    50,    59,    61,    67,    68,    70,    74,    77,
      84,    91,    95,    97,    98,    99,   100,   101,   107,   112,
     129,   141,   146,   147,   148,   151,   153,   157,   166,   168,
     176,   177,   205,   215,   222,   223,   225,   226,   227,   228,
     231,   232,   238,   239,   250,   264,   268,   270,   271,   272,
     273,   274,   277,   278,   281,   283,   284,   285,   286,   288,
     289,   290,   291,   292,   294,   296,   314,   315,   316,   317,
     205,   319,   322,   323,     3,     5,   210,     3,     5,     3,
       5,   266,    97,   269,     9,     3,     5,   269,     3,   210,
     210,   269,   270,     3,   266,     3,   266,   270,    25,    27,
      28,    29,    30,    31,    32,    34,    37,    39,    43,    44,
      46,    47,    48,    49,    51,    52,    53,    54,    55,    56,
      57,    58,    60,    62,    63,    64,    65,    66,    69,    73,
      75,    76,    78,    79,    80,    81,    82,    83,    85,    86,
      87,    88,    89,    90,    93,    96,   102,   103,   105,   106,
     108,   109,   113,   114,   115,   116,   117,   118,   120,   121,
     122,   123,   124,   125,   126,   128,   130,   132,   133,   134,
     135,   136,   137,   138,   139,   140,   142,   143,   144,   145,
     149,   152,   155,   156,   159,   160,   161,   162,   165,   167,
     169,   170,   171,   172,   173,   174,   175,   178,   240,   242,
     313,   209,   218,   218,   164,    67,   104,   111,   157,   166,
     230,   250,   271,   277,   283,   287,   294,   314,   317,   209,
     209,   207,   207,   209,   207,   209,   221,   209,   186,   282,
     207,   295,   296,   295,   295,     3,     5,    40,    72,   127,
     154,   194,   210,   244,   267,   297,   298,   311,   250,   314,
     315,   317,   295,   209,    51,    64,    69,   324,   325,   319,
     101,     9,   207,   209,     3,   315,   207,   158,   207,   210,
     210,   210,   210,   210,   210,   210,   210,   210,   210,   210,
     210,   210,   210,   210,   210,   210,   210,   210,   210,   210,
     210,   210,   210,   210,   210,   210,   210,   210,   210,   210,
     210,   210,   184,   206,    13,    92,   222,   229,   232,   271,
     273,   274,   285,   286,   289,   208,   238,   239,     3,     3,
       5,     3,     5,     3,     3,   207,   311,   275,   217,   131,
     279,   283,     3,     5,   207,   220,   293,   297,   297,   212,
     205,   210,   237,   295,   184,   206,     5,   211,   247,   248,
     249,   267,   186,   211,   257,   210,   260,     9,     9,    12,
     243,   267,     3,     6,     7,     8,     9,    10,    11,    71,
     119,   150,   163,   189,   192,   193,   194,   197,   198,   210,
     253,   254,   255,   253,   256,     9,     9,   241,   256,   255,
       9,     9,   255,     9,   255,   253,   236,   239,   294,   255,
     251,   252,   253,     9,   313,     9,   255,   315,   251,   253,
     315,   179,   180,   181,   182,   183,   312,   315,   315,   243,
       6,     7,   318,     9,   315,   242,   205,   210,   209,   207,
     221,   294,   208,   238,   276,   216,   186,   110,   238,   262,
     280,   209,   207,   220,   208,   222,   239,   292,   297,   211,
     256,   194,   206,   253,   233,   234,   235,   236,   325,   207,
     208,   184,   212,     6,   224,   208,   238,   258,   262,   208,
     239,   259,   262,   211,   211,   211,   210,   253,   253,   253,
     253,   253,   253,   253,   294,    15,    16,    17,    18,    19,
      20,    21,    22,    23,   185,   187,   188,   189,   190,   191,
     192,   193,   194,   195,   196,   204,   205,   184,   211,   211,
     211,   184,   211,   211,   211,   211,   211,   211,   211,   211,
     211,   211,   294,   194,   210,   237,   244,   267,   303,   305,
     306,   211,   184,   211,   211,   211,   211,   184,   211,   211,
     211,   211,   211,   211,   211,   211,   204,   211,   211,   211,
     242,     9,   219,   297,   307,   221,   286,   208,   186,   294,
     314,   209,   208,   239,   263,   264,   208,   228,   208,   221,
     206,   206,   211,   184,   164,   320,   321,   249,   255,     6,
     211,   294,   317,   211,   209,   209,   294,   211,   194,   210,
     237,   244,   299,   301,   302,   253,   253,     3,   253,   253,
     253,   253,   253,   253,   253,   253,   253,   253,   253,   253,
     253,   253,   253,   253,   253,     3,   253,   255,     9,   305,
     293,   194,   233,   244,   304,   305,   210,   237,   252,   255,
       6,   211,   218,   184,   297,   209,   220,   221,    24,   236,
     323,   208,   320,   303,   309,   310,   209,   265,   267,   301,
     293,   194,   233,   244,   300,   301,   211,   210,   237,   186,
     206,   305,   293,   211,   305,   211,   233,   211,   221,   208,
     297,   208,     5,   186,   308,   184,   209,   207,   211,   301,
     293,   211,   305,   211,   253,   233,   253,   305,   211,   221,
     209,   256,   309,   245,   305,   211,    39,    52,   208,   246,
     255,   186,   186,   209,   261,   262,   261,   209
};

  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
static const yytype_uint16 yyr1[] =
{
       0,   213,   214,   215,   215,   216,   217,   216,   216,   216,
     216,   216,   216,   216,   216,   218,   218,   219,   218,   218,
     218,   218,   218,   218,   218,   218,   220,   220,   221,   221,
     222,   222,   222,   222,   222,   222,   222,   223,   224,   224,
     225,   225,   225,   225,   225,   225,   225,   225,   225,   226,
     227,   228,   229,   230,   230,   231,   232,   233,   233,   234,
     234,   235,   235,   236,   236,   237,   237,   237,   238,   238,
     239,   240,   240,   240,   241,   241,   242,   242,   242,   242,
     242,   242,   242,   242,   242,   242,   242,   242,   242,   242,
     242,   242,   242,   242,   242,   242,   242,   242,   242,   242,
     242,   242,   242,   242,   242,   242,   242,   242,   242,   242,
     242,   242,   242,   242,   242,   242,   242,   242,   242,   242,
     242,   242,   242,   242,   242,   242,   242,   242,   242,   242,
     242,   242,   242,   242,   242,   242,   242,   242,   242,   242,
     242,   242,   242,   242,   242,   242,   242,   242,   242,   242,
     242,   242,   242,   242,   242,   242,   242,   242,   242,   242,
     242,   242,   242,   242,   242,   242,   242,   242,   242,   242,
     242,   242,   242,   242,   242,   242,   243,   243,   244,   244,
     244,   244,   245,   245,   246,   246,   247,   247,   247,   248,
     248,   249,   249,   250,   251,   251,   252,   252,   253,   253,
     253,   253,   253,   253,   253,   253,   253,   253,   253,   253,
     253,   253,   253,   253,   253,   253,   253,   253,   253,   253,
     253,   253,   253,   253,   253,   253,   253,   253,   253,   253,
     253,   253,   253,   253,   253,   253,   253,   253,   253,   254,
     254,   255,   256,   257,   257,   258,   258,   259,   259,   260,
     260,   261,   261,   262,   262,   263,   264,   264,   265,   265,
     266,   266,   266,   267,   267,   268,   268,   268,   268,   268,
     268,   268,   268,   268,   268,   268,   269,   269,   270,   270,
     270,   270,   270,   270,   270,   270,   270,   271,   271,   272,
     273,   274,   275,   275,   276,   277,   277,   278,   279,   279,
     280,   280,   281,   281,   282,   282,   283,   283,   284,   285,
     285,   285,   286,   286,   287,   287,   288,   289,   290,   290,
     290,   291,   292,   293,   293,   294,   294,   295,   295,   296,
     296,   296,   297,   297,   297,   298,   298,   298,   298,   299,
     299,   299,   300,   300,   301,   301,   302,   302,   302,   302,
     302,   303,   303,   303,   304,   304,   305,   305,   306,   306,
     306,   306,   306,   306,   307,   307,   308,   308,   309,   310,
     310,   311,   311,   312,   312,   312,   312,   312,   313,   313,
     313,   314,   315,   315,   315,   315,   315,   315,   315,   315,
     315,   315,   316,   317,   317,   318,   318,   318,   319,   319,
     320,   320,   321,   322,   323,   323,   324,   324,   325,   325,
     325
};

  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
static const yytype_uint8 yyr2[] =
{
       0,     2,     2,     0,     2,     0,     0,     6,     2,     2,
       3,     2,     2,     2,     2,     0,     2,     0,     6,     2,
       3,     2,     2,     2,     2,     2,     0,     2,     0,     1,
       1,     2,     2,     1,     2,     1,     1,     6,     1,     2,
       1,     2,     1,     2,     1,     2,     2,     2,     2,     4,
       3,     3,     5,     2,     2,     3,     4,     0,     1,     1,
       3,     1,     3,     3,     2,     3,     3,     2,     0,     1,
       3,     1,     3,     4,     1,     3,     0,     1,     4,     1,
       1,     1,     1,     1,     4,     4,     1,     1,     1,     1,
       1,     1,     1,     1,     1,     1,     4,     1,     1,     1,
       4,     1,     1,     1,     4,     4,     1,     1,     1,     1,
       4,     4,     4,     4,     4,     1,     4,     1,     1,     4,
       1,     4,     1,     1,     4,     4,     1,     1,     1,     1,
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
       4,     1,     1,     1,     4,     4,     1,     1,     1,     1,
       1,     6,     1,     4,     1,     1,     1,     4,     1,     1,
       1,     4,     4,     4,     4,     1,     1,     4,     4,     4,
       1,     1,     4,     4,     4,     1,     1,     1,     1,     1,
       1,     1,     0,     2,     4,     3,     0,     2,     1,     1,
       3,     3,     1,     5,     1,     3,     0,     1,     1,     1,
       1,     1,     1,     1,     1,     1,     1,     1,     5,     3,
       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
       3,     3,     3,     3,     3,     3,     3,     2,     2,     2,
       2,     2,     2,     3,     3,     5,     5,     4,     3,     1,
       3,     1,     1,     0,     2,     4,     3,     2,     2,     0,
       2,     2,     1,     3,     2,     1,     3,     2,     0,     1,
       0,     1,     1,     1,     1,     1,     1,     1,     2,     2,
       1,     1,     1,     1,     1,     1,     0,     1,     1,     2,
       1,     2,     2,     1,     1,     1,     1,     2,     2,     2,
       5,     2,     0,     2,     2,     2,     2,     2,     2,     3,
       2,     3,     5,     5,     0,     2,     2,     2,     2,     6,
       8,     2,     2,     2,     2,     2,     2,     5,     1,     1,
       1,     1,     1,     0,     2,     2,     3,     0,     1,     2,
       2,     2,     3,     2,     1,     1,     3,     2,     4,     3,
       2,     1,     3,     2,     0,     1,     3,     2,     1,     3,
       4,     3,     2,     1,     3,     2,     0,     1,     1,     3,
       2,     1,     3,     4,     1,     3,     0,     2,     2,     1,
       3,     1,     3,     1,     1,     1,     1,     1,     1,     1,
       1,     5,     1,     1,     1,     1,     2,     1,     2,     1,
       2,     4,     5,     5,    10,     1,     3,     1,     0,     2,
       0,     2,     4,     6,     0,     3,     1,     3,     1,     1,
       1
};


#define yyerrok         (yyerrstatus = 0)
#define yyclearin       (yychar = YYEMPTY)
#define YYEMPTY         (-2)
#define YYEOF           0

#define YYACCEPT        goto yyacceptlab
#define YYABORT         goto yyabortlab
#define YYERROR         goto yyerrorlab


#define YYRECOVERING()  (!!yyerrstatus)

#define YYBACKUP(Token, Value)                                  \
do                                                              \
  if (yychar == YYEMPTY)                                        \
    {                                                           \
      yychar = (Token);                                         \
      yylval = (Value);                                         \
      YYPOPSTACK (yylen);                                       \
      yystate = *yyssp;                                         \
      goto yybackup;                                            \
    }                                                           \
  else                                                          \
    {                                                           \
      yyerror (YY_("syntax error: cannot back up")); \
      YYERROR;                                                  \
    }                                                           \
while (0)

/* Error token number */
#define YYTERROR        1
#define YYERRCODE       256



/* Enable debugging if requested.  */
#if YYDEBUG

# ifndef YYFPRINTF
#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
#  define YYFPRINTF fprintf
# endif

# define YYDPRINTF(Args)                        \
do {                                            \
  if (yydebug)                                  \
    YYFPRINTF Args;                             \
} while (0)

/* This macro is provided for backward compatibility. */
#ifndef YY_LOCATION_PRINT
# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
#endif


# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
do {                                                                      \
  if (yydebug)                                                            \
    {                                                                     \
      YYFPRINTF (stderr, "%s ", Title);                                   \
      yy_symbol_print (stderr,                                            \
                  Type, Value); \
      YYFPRINTF (stderr, "\n");                                           \
    }                                                                     \
} while (0)


/*----------------------------------------.
| Print this symbol's value on YYOUTPUT.  |
`----------------------------------------*/

static void
yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
{
  FILE *yyo = yyoutput;
  YYUSE (yyo);
  if (!yyvaluep)
    return;
# ifdef YYPRINT
  if (yytype < YYNTOKENS)
    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
# endif
  YYUSE (yytype);
}


/*--------------------------------.
| Print this symbol on YYOUTPUT.  |
`--------------------------------*/

static void
yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
{
  YYFPRINTF (yyoutput, "%s %s (",
             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);

  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
  YYFPRINTF (yyoutput, ")");
}

/*------------------------------------------------------------------.
| yy_stack_print -- Print the state stack from its BOTTOM up to its |
| TOP (included).                                                   |
`------------------------------------------------------------------*/

static void
yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
{
  YYFPRINTF (stderr, "Stack now");
  for (; yybottom <= yytop; yybottom++)
    {
      int yybot = *yybottom;
      YYFPRINTF (stderr, " %d", yybot);
    }
  YYFPRINTF (stderr, "\n");
}

# define YY_STACK_PRINT(Bottom, Top)                            \
do {                                                            \
  if (yydebug)                                                  \
    yy_stack_print ((Bottom), (Top));                           \
} while (0)


/*------------------------------------------------.
| Report that the YYRULE is going to be reduced.  |
`------------------------------------------------*/

static void
yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
{
  unsigned long yylno = yyrline[yyrule];
  int yynrhs = yyr2[yyrule];
  int yyi;
  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
             yyrule - 1, yylno);
  /* The symbols being reduced.  */
  for (yyi = 0; yyi < yynrhs; yyi++)
    {
      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
      yy_symbol_print (stderr,
                       yystos[yyssp[yyi + 1 - yynrhs]],
                       &(yyvsp[(yyi + 1) - (yynrhs)])
                                              );
      YYFPRINTF (stderr, "\n");
    }
}

# define YY_REDUCE_PRINT(Rule)          \
do {                                    \
  if (yydebug)                          \
    yy_reduce_print (yyssp, yyvsp, Rule); \
} while (0)

/* Nonzero means print parse trace.  It is left uninitialized so that
   multiple parsers can coexist.  */
int yydebug;
#else /* !YYDEBUG */
# define YYDPRINTF(Args)
# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
# define YY_STACK_PRINT(Bottom, Top)
# define YY_REDUCE_PRINT(Rule)
#endif /* !YYDEBUG */


/* YYINITDEPTH -- initial size of the parser's stacks.  */
#ifndef YYINITDEPTH
# define YYINITDEPTH 200
#endif

/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
   if the built-in stack extension method is used).

   Do not make this value too large; the results are undefined if
   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
   evaluated with infinite-precision integer arithmetic.  */

#ifndef YYMAXDEPTH
# define YYMAXDEPTH 10000
#endif


#if YYERROR_VERBOSE

# ifndef yystrlen
#  if defined __GLIBC__ && defined _STRING_H
#   define yystrlen strlen
#  else
/* Return the length of YYSTR.  */
static YYSIZE_T
yystrlen (const char *yystr)
{
  YYSIZE_T yylen;
  for (yylen = 0; yystr[yylen]; yylen++)
    continue;
  return yylen;
}
#  endif
# endif

# ifndef yystpcpy
#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
#   define yystpcpy stpcpy
#  else
/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
   YYDEST.  */
static char *
yystpcpy (char *yydest, const char *yysrc)
{
  char *yyd = yydest;
  const char *yys = yysrc;

  while ((*yyd++ = *yys++) != '\0')
    continue;

  return yyd - 1;
}
#  endif
# endif

# ifndef yytnamerr
/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
   quotes and backslashes, so that it's suitable for yyerror.  The
   heuristic is that double-quoting is unnecessary unless the string
   contains an apostrophe, a comma, or backslash (other than
   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
   null, do not copy; instead, return the length of what the result
   would have been.  */
static YYSIZE_T
yytnamerr (char *yyres, const char *yystr)
{
  if (*yystr == '"')
    {
      YYSIZE_T yyn = 0;
      char const *yyp = yystr;

      for (;;)
        switch (*++yyp)
          {
          case '\'':
          case ',':
            goto do_not_strip_quotes;

          case '\\':
            if (*++yyp != '\\')
              goto do_not_strip_quotes;
            /* Fall through.  */
          default:
            if (yyres)
              yyres[yyn] = *yyp;
            yyn++;
            break;

          case '"':
            if (yyres)
              yyres[yyn] = '\0';
            return yyn;
          }
    do_not_strip_quotes: ;
    }

  if (! yyres)
    return yystrlen (yystr);

  return yystpcpy (yyres, yystr) - yyres;
}
# endif

/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
   about the unexpected token YYTOKEN for the state stack whose top is
   YYSSP.

   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
   not large enough to hold the message.  In that case, also set
   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
   required number of bytes is too large to store.  */
static int
yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
                yytype_int16 *yyssp, int yytoken)
{
  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
  YYSIZE_T yysize = yysize0;
  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
  /* Internationalized format string. */
  const char *yyformat = YY_NULLPTR;
  /* Arguments of yyformat. */
  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
  /* Number of reported tokens (one for the "unexpected", one per
     "expected"). */
  int yycount = 0;

  /* There are many possibilities here to consider:
     - If this state is a consistent state with a default action, then
       the only way this function was invoked is if the default action
       is an error action.  In that case, don't check for expected
       tokens because there are none.
     - The only way there can be no lookahead present (in yychar) is if
       this state is a consistent state with a default action.  Thus,
       detecting the absence of a lookahead is sufficient to determine
       that there is no unexpected or expected token to report.  In that
       case, just report a simple "syntax error".
     - Don't assume there isn't a lookahead just because this state is a
       consistent state with a default action.  There might have been a
       previous inconsistent state, consistent state with a non-default
       action, or user semantic action that manipulated yychar.
     - Of course, the expected token list depends on states to have
       correct lookahead information, and it depends on the parser not
       to perform extra reductions after fetching a lookahead from the
       scanner and before detecting a syntax error.  Thus, state merging
       (from LALR or IELR) and default reductions corrupt the expected
       token list.  However, the list is correct for canonical LR with
       one exception: it will still contain any token that will not be
       accepted due to an error action in a later state.
  */
  if (yytoken != YYEMPTY)
    {
      int yyn = yypact[*yyssp];
      yyarg[yycount++] = yytname[yytoken];
      if (!yypact_value_is_default (yyn))
        {
          /* Start YYX at -YYN if negative to avoid negative indexes in
             YYCHECK.  In other words, skip the first -YYN actions for
             this state because they are default actions.  */
          int yyxbegin = yyn < 0 ? -yyn : 0;
          /* Stay within bounds of both yycheck and yytname.  */
          int yychecklim = YYLAST - yyn + 1;
          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
          int yyx;

          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
                && !yytable_value_is_error (yytable[yyx + yyn]))
              {
                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
                  {
                    yycount = 1;
                    yysize = yysize0;
                    break;
                  }
                yyarg[yycount++] = yytname[yyx];
                {
                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
                  if (! (yysize <= yysize1
                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
                    return 2;
                  yysize = yysize1;
                }
              }
        }
    }

  switch (yycount)
    {
# define YYCASE_(N, S)                      \
      case N:                               \
        yyformat = S;                       \
      break
    default: /* Avoid compiler warnings. */
      YYCASE_(0, YY_("syntax error"));
      YYCASE_(1, YY_("syntax error, unexpected %s"));
      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
# undef YYCASE_
    }

  {
    YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
    if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
      return 2;
    yysize = yysize1;
  }

  if (*yymsg_alloc < yysize)
    {
      *yymsg_alloc = 2 * yysize;
      if (! (yysize <= *yymsg_alloc
             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
      return 1;
    }

  /* Avoid sprintf, as that infringes on the user's name space.
     Don't have undefined behavior even if the translation
     produced a string with the wrong number of "%s"s.  */
  {
    char *yyp = *yymsg;
    int yyi = 0;
    while ((*yyp = *yyformat) != '\0')
      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
        {
          yyp += yytnamerr (yyp, yyarg[yyi++]);
          yyformat += 2;
        }
      else
        {
          yyp++;
          yyformat++;
        }
  }
  return 0;
}
#endif /* YYERROR_VERBOSE */

/*-----------------------------------------------.
| Release the memory associated to this symbol.  |
`-----------------------------------------------*/

static void
yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
{
  YYUSE (yyvaluep);
  if (!yymsg)
    yymsg = "Deleting";
  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);

  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
  YYUSE (yytype);
  YY_IGNORE_MAYBE_UNINITIALIZED_END
}




/* The lookahead symbol.  */
int yychar;

/* The semantic value of the lookahead symbol.  */
YYSTYPE yylval;
/* Number of syntax errors so far.  */
int yynerrs;


/*----------.
| yyparse.  |
`----------*/

int
yyparse (void)
{
    int yystate;
    /* Number of tokens to shift before error messages enabled.  */
    int yyerrstatus;

    /* The stacks and their tools:
       'yyss': related to states.
       'yyvs': related to semantic values.

       Refer to the stacks through separate pointers, to allow yyoverflow
       to reallocate them elsewhere.  */

    /* The state stack.  */
    yytype_int16 yyssa[YYINITDEPTH];
    yytype_int16 *yyss;
    yytype_int16 *yyssp;

    /* The semantic value stack.  */
    YYSTYPE yyvsa[YYINITDEPTH];
    YYSTYPE *yyvs;
    YYSTYPE *yyvsp;

    YYSIZE_T yystacksize;

  int yyn;
  int yyresult;
  /* Lookahead token as an internal (translated) token number.  */
  int yytoken = 0;
  /* The variables used to return semantic value and location from the
     action routines.  */
  YYSTYPE yyval;

#if YYERROR_VERBOSE
  /* Buffer for error messages, and its allocated size.  */
  char yymsgbuf[128];
  char *yymsg = yymsgbuf;
  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
#endif

#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))

  /* The number of symbols on the RHS of the reduced rule.
     Keep to zero when no symbol should be popped.  */
  int yylen = 0;

  yyssp = yyss = yyssa;
  yyvsp = yyvs = yyvsa;
  yystacksize = YYINITDEPTH;

  YYDPRINTF ((stderr, "Starting parse\n"));

  yystate = 0;
  yyerrstatus = 0;
  yynerrs = 0;
  yychar = YYEMPTY; /* Cause a token to be read.  */
  goto yysetstate;

/*------------------------------------------------------------.
| yynewstate -- Push a new state, which is found in yystate.  |
`------------------------------------------------------------*/
 yynewstate:
  /* In all cases, when you get here, the value and location stacks
     have just been pushed.  So pushing a state here evens the stacks.  */
  yyssp++;

 yysetstate:
  *yyssp = yystate;

  if (yyss + yystacksize - 1 <= yyssp)
    {
      /* Get the current used size of the three stacks, in elements.  */
      YYSIZE_T yysize = yyssp - yyss + 1;

#ifdef yyoverflow
      {
        /* Give user a chance to reallocate the stack.  Use copies of
           these so that the &'s don't force the real ones into
           memory.  */
        YYSTYPE *yyvs1 = yyvs;
        yytype_int16 *yyss1 = yyss;

        /* Each stack pointer address is followed by the size of the
           data in use in that stack, in bytes.  This used to be a
           conditional around just the two extra args, but that might
           be undefined if yyoverflow is a macro.  */
        yyoverflow (YY_("memory exhausted"),
                    &yyss1, yysize * sizeof (*yyssp),
                    &yyvs1, yysize * sizeof (*yyvsp),
                    &yystacksize);

        yyss = yyss1;
        yyvs = yyvs1;
      }
#else /* no yyoverflow */
# ifndef YYSTACK_RELOCATE
      goto yyexhaustedlab;
# else
      /* Extend the stack our own way.  */
      if (YYMAXDEPTH <= yystacksize)
        goto yyexhaustedlab;
      yystacksize *= 2;
      if (YYMAXDEPTH < yystacksize)
        yystacksize = YYMAXDEPTH;

      {
        yytype_int16 *yyss1 = yyss;
        union yyalloc *yyptr =
          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
        if (! yyptr)
          goto yyexhaustedlab;
        YYSTACK_RELOCATE (yyss_alloc, yyss);
        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
#  undef YYSTACK_RELOCATE
        if (yyss1 != yyssa)
          YYSTACK_FREE (yyss1);
      }
# endif
#endif /* no yyoverflow */

      yyssp = yyss + yysize - 1;
      yyvsp = yyvs + yysize - 1;

      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
                  (unsigned long) yystacksize));

      if (yyss + yystacksize - 1 <= yyssp)
        YYABORT;
    }

  YYDPRINTF ((stderr, "Entering state %d\n", yystate));

  if (yystate == YYFINAL)
    YYACCEPT;

  goto yybackup;

/*-----------.
| yybackup.  |
`-----------*/
yybackup:

  /* Do appropriate processing given the current state.  Read a
     lookahead token if we need one and don't already have one.  */

  /* First try to decide what to do without reference to lookahead token.  */
  yyn = yypact[yystate];
  if (yypact_value_is_default (yyn))
    goto yydefault;

  /* Not known => get a lookahead token if don't already have one.  */

  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
  if (yychar == YYEMPTY)
    {
      YYDPRINTF ((stderr, "Reading a token: "));
      yychar = yylex ();
    }

  if (yychar <= YYEOF)
    {
      yychar = yytoken = YYEOF;
      YYDPRINTF ((stderr, "Now at end of input.\n"));
    }
  else
    {
      yytoken = YYTRANSLATE (yychar);
      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
    }

  /* If the proper action on seeing token YYTOKEN is to reduce or to
     detect an error, take that action.  */
  yyn += yytoken;
  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
    goto yydefault;
  yyn = yytable[yyn];
  if (yyn <= 0)
    {
      if (yytable_value_is_error (yyn))
        goto yyerrlab;
      yyn = -yyn;
      goto yyreduce;
    }

  /* Count tokens shifted since error; after three, turn off error
     status.  */
  if (yyerrstatus)
    yyerrstatus--;

  /* Shift the lookahead token.  */
  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);

  /* Discard the shifted token.  */
  yychar = YYEMPTY;

  yystate = yyn;
  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
  *++yyvsp = yylval;
  YY_IGNORE_MAYBE_UNINITIALIZED_END

  goto yynewstate;


/*-----------------------------------------------------------.
| yydefault -- do the default action for the current state.  |
`-----------------------------------------------------------*/
yydefault:
  yyn = yydefact[yystate];
  if (yyn == 0)
    goto yyerrlab;
  goto yyreduce;


/*-----------------------------.
| yyreduce -- Do a reduction.  |
`-----------------------------*/
yyreduce:
  /* yyn is the number of a rule to reduce with.  */
  yylen = yyr2[yyn];

  /* If YYLEN is nonzero, implement the default value of the action:
     '$$ = $1'.

     Otherwise, the following line sets YYVAL to garbage.
     This behavior is undocumented and Bison
     users should not rely upon it.  Assigning to YYVAL
     unconditionally makes the parser a bit smaller, and it avoids a
     GCC warning that YYVAL may be used uninitialized.  */
  yyval = yyvsp[1-yylen];


  YY_REDUCE_PRINT (yyn);
  switch (yyn)
    {
        case 2:
#line 325 "parser.y" /* yacc.c:1651  */
    { fix_incomplete();
						  check_statements((yyvsp[-1].stmt_list), FALSE);
						  check_all_user_types((yyvsp[-1].stmt_list));
						  write_header((yyvsp[-1].stmt_list));
						  write_id_data((yyvsp[-1].stmt_list));
						  write_proxies((yyvsp[-1].stmt_list));
						  write_client((yyvsp[-1].stmt_list));
						  write_server((yyvsp[-1].stmt_list));
						  write_regscript((yyvsp[-1].stmt_list));
						  write_typelib_regscript((yyvsp[-1].stmt_list));
						  write_dlldata((yyvsp[-1].stmt_list));
						  write_local_stubs((yyvsp[-1].stmt_list));
						}
#line 2633 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 5:
#line 342 "parser.y" /* yacc.c:1651  */
    { (yyval.stmt_list) = NULL; }
#line 2639 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 6:
#line 343 "parser.y" /* yacc.c:1651  */
    { push_namespace((yyvsp[-1].str)); }
#line 2645 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 7:
#line 344 "parser.y" /* yacc.c:1651  */
    { pop_namespace((yyvsp[-4].str)); (yyval.stmt_list) = append_statements((yyvsp[-5].stmt_list), (yyvsp[-1].stmt_list)); }
#line 2651 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 8:
#line 345 "parser.y" /* yacc.c:1651  */
    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_reference((yyvsp[0].type))); }
#line 2657 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 9:
#line 346 "parser.y" /* yacc.c:1651  */
    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); }
#line 2663 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 10:
#line 347 "parser.y" /* yacc.c:1651  */
    { (yyval.stmt_list) = (yyvsp[-2].stmt_list);
						  reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0);
						}
#line 2671 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 11:
#line 350 "parser.y" /* yacc.c:1651  */
    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type)));
						  reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0);
						}
#line 2679 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 12:
#line 353 "parser.y" /* yacc.c:1651  */
    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_module((yyvsp[0].type))); }
#line 2685 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 13:
#line 354 "parser.y" /* yacc.c:1651  */
    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_library((yyvsp[0].typelib))); }
#line 2691 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 14:
#line 355 "parser.y" /* yacc.c:1651  */
    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
#line 2697 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 15:
#line 358 "parser.y" /* yacc.c:1651  */
    { (yyval.stmt_list) = NULL; }
#line 2703 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 16:
#line 359 "parser.y" /* yacc.c:1651  */
    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_reference((yyvsp[0].type))); }
#line 2709 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 17:
#line 360 "parser.y" /* yacc.c:1651  */
    { push_namespace((yyvsp[-1].str)); }
#line 2715 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 18:
#line 361 "parser.y" /* yacc.c:1651  */
    { pop_namespace((yyvsp[-4].str)); (yyval.stmt_list) = append_statements((yyvsp[-5].stmt_list), (yyvsp[-1].stmt_list)); }
#line 2721 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 19:
#line 362 "parser.y" /* yacc.c:1651  */
    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); }
#line 2727 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 20:
#line 363 "parser.y" /* yacc.c:1651  */
    { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); }
#line 2733 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 21:
#line 364 "parser.y" /* yacc.c:1651  */
    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type)));
						  reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0);
						}
#line 2741 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 22:
#line 367 "parser.y" /* yacc.c:1651  */
    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_module((yyvsp[0].type))); }
#line 2747 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 23:
#line 368 "parser.y" /* yacc.c:1651  */
    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
#line 2753 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 24:
#line 369 "parser.y" /* yacc.c:1651  */
    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_importlib((yyvsp[0].str))); }
#line 2759 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 25:
#line 370 "parser.y" /* yacc.c:1651  */
    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_library((yyvsp[0].typelib))); }
#line 2765 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 26:
#line 373 "parser.y" /* yacc.c:1651  */
    { (yyval.stmt_list) = NULL; }
#line 2771 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 27:
#line 374 "parser.y" /* yacc.c:1651  */
    { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); }
#line 2777 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 30:
#line 382 "parser.y" /* yacc.c:1651  */
    { (yyval.statement) = make_statement_cppquote((yyvsp[0].str)); }
#line 2783 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 31:
#line 383 "parser.y" /* yacc.c:1651  */
    { (yyval.statement) = make_statement_type_decl((yyvsp[-1].type)); }
#line 2789 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 32:
#line 384 "parser.y" /* yacc.c:1651  */
    { (yyval.statement) = make_statement_declaration((yyvsp[-1].var)); }
#line 2795 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 33:
#line 385 "parser.y" /* yacc.c:1651  */
    { (yyval.statement) = make_statement_import((yyvsp[0].str)); }
#line 2801 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 34:
#line 386 "parser.y" /* yacc.c:1651  */
    { (yyval.statement) = (yyvsp[-1].statement); }
#line 2807 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 35:
#line 387 "parser.y" /* yacc.c:1651  */
    { (yyval.statement) = make_statement_pragma((yyvsp[0].str)); }
#line 2813 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 36:
#line 388 "parser.y" /* yacc.c:1651  */
    { (yyval.statement) = NULL; }
#line 2819 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 37:
#line 392 "parser.y" /* yacc.c:1651  */
    {
                      int result;
                      (yyval.statement) = NULL;
                      result = do_warning((yyvsp[-3].str), (yyvsp[-1].warning_list));
                      if(!result)
                          error_loc("expected \"disable\" or \"enable\"\n");
                  }
#line 2831 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 38:
#line 402 "parser.y" /* yacc.c:1651  */
    { (yyval.warning_list) = append_warning(NULL, (yyvsp[0].num)); }
#line 2837 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 39:
#line 403 "parser.y" /* yacc.c:1651  */
    { (yyval.warning_list) = append_warning((yyvsp[-1].warning_list), (yyvsp[0].num)); }
#line 2843 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 41:
#line 408 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_new_enum((yyvsp[0].str), current_namespace, FALSE, NULL); }
#line 2849 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 43:
#line 410 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_new_struct((yyvsp[0].str), current_namespace, FALSE, NULL); }
#line 2855 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 45:
#line 412 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_new_nonencapsulated_union((yyvsp[0].str), FALSE, NULL); }
#line 2861 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 46:
#line 413 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_enum_attrs((yyvsp[-1].attr_list)); }
#line 2867 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 47:
#line 414 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_struct_attrs((yyvsp[-1].attr_list)); }
#line 2873 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 48:
#line 415 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_union_attrs((yyvsp[-1].attr_list)); }
#line 2879 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 49:
#line 418 "parser.y" /* yacc.c:1651  */
    { (yyval.str) = (yyvsp[-1].str); }
#line 2885 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 50:
#line 420 "parser.y" /* yacc.c:1651  */
    { assert(yychar == YYEMPTY);
						  (yyval.import) = xmalloc(sizeof(struct _import_t));
						  (yyval.import)->name = (yyvsp[-1].str);
						  (yyval.import)->import_performed = do_import((yyvsp[-1].str));
						  if (!(yyval.import)->import_performed) yychar = aEOF;
						}
#line 2896 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 51:
#line 428 "parser.y" /* yacc.c:1651  */
    { (yyval.str) = (yyvsp[-2].import)->name;
						  if ((yyvsp[-2].import)->import_performed) pop_import();
						  free((yyvsp[-2].import));
						}
#line 2905 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 52:
#line 435 "parser.y" /* yacc.c:1651  */
    { (yyval.str) = (yyvsp[-2].str); if(!parse_only) add_importlib((yyvsp[-2].str), current_typelib); }
#line 2911 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 53:
#line 438 "parser.y" /* yacc.c:1651  */
    { (yyval.str) = (yyvsp[0].str); }
#line 2917 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 54:
#line 439 "parser.y" /* yacc.c:1651  */
    { (yyval.str) = (yyvsp[0].str); }
#line 2923 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 55:
#line 441 "parser.y" /* yacc.c:1651  */
    { (yyval.typelib) = make_library((yyvsp[-1].str), check_library_attrs((yyvsp[-1].str), (yyvsp[-2].attr_list)));
						  if (!parse_only && do_typelib) current_typelib = (yyval.typelib);
						}
#line 2931 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 56:
#line 446 "parser.y" /* yacc.c:1651  */
    { (yyval.typelib) = (yyvsp[-3].typelib); (yyval.typelib)->stmts = (yyvsp[-2].stmt_list); }
#line 2937 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 57:
#line 449 "parser.y" /* yacc.c:1651  */
    { (yyval.var_list) = NULL; }
#line 2943 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 59:
#line 453 "parser.y" /* yacc.c:1651  */
    { check_arg_attrs((yyvsp[0].var)); (yyval.var_list) = append_var( NULL, (yyvsp[0].var) ); }
#line 2949 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 60:
#line 454 "parser.y" /* yacc.c:1651  */
    { check_arg_attrs((yyvsp[0].var)); (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[0].var) ); }
#line 2955 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 62:
#line 458 "parser.y" /* yacc.c:1651  */
    { (yyval.var_list) = append_var( (yyvsp[-2].var_list), make_var(strdup("...")) ); }
#line 2961 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 63:
#line 462 "parser.y" /* yacc.c:1651  */
    { if ((yyvsp[-1].declspec)->stgclass != STG_NONE && (yyvsp[-1].declspec)->stgclass != STG_REGISTER)
						    error_loc("invalid storage class for function parameter\n");
						  (yyval.var) = declare_var((yyvsp[-2].attr_list), (yyvsp[-1].declspec), (yyvsp[0].declarator), TRUE);
						  free((yyvsp[-1].declspec)); free((yyvsp[0].declarator));
						}
#line 2971 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 64:
#line 467 "parser.y" /* yacc.c:1651  */
    { if ((yyvsp[-1].declspec)->stgclass != STG_NONE && (yyvsp[-1].declspec)->stgclass != STG_REGISTER)
						    error_loc("invalid storage class for function parameter\n");
						  (yyval.var) = declare_var(NULL, (yyvsp[-1].declspec), (yyvsp[0].declarator), TRUE);
						  free((yyvsp[-1].declspec)); free((yyvsp[0].declarator));
						}
#line 2981 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 65:
#line 474 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = (yyvsp[-1].expr);
						  if (!(yyval.expr)->is_const || (yyval.expr)->cval <= 0)
						      error_loc("array dimension is not a positive integer constant\n");
						}
#line 2990 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 66:
#line 478 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr(EXPR_VOID); }
#line 2996 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 67:
#line 479 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr(EXPR_VOID); }
#line 3002 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 68:
#line 482 "parser.y" /* yacc.c:1651  */
    { (yyval.attr_list) = NULL; }
#line 3008 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 70:
#line 487 "parser.y" /* yacc.c:1651  */
    { (yyval.attr_list) = (yyvsp[-1].attr_list); }
#line 3014 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 71:
#line 490 "parser.y" /* yacc.c:1651  */
    { (yyval.attr_list) = append_attr( NULL, (yyvsp[0].attr) ); }
#line 3020 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 72:
#line 491 "parser.y" /* yacc.c:1651  */
    { (yyval.attr_list) = append_attr( (yyvsp[-2].attr_list), (yyvsp[0].attr) ); }
#line 3026 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 73:
#line 492 "parser.y" /* yacc.c:1651  */
    { (yyval.attr_list) = append_attr( (yyvsp[-3].attr_list), (yyvsp[0].attr) ); }
#line 3032 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 74:
#line 495 "parser.y" /* yacc.c:1651  */
    { (yyval.str_list) = append_str( NULL, (yyvsp[0].str) ); }
#line 3038 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 75:
#line 496 "parser.y" /* yacc.c:1651  */
    { (yyval.str_list) = append_str( (yyvsp[-2].str_list), (yyvsp[0].str) ); }
#line 3044 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 76:
#line 499 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = NULL; }
#line 3050 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 77:
#line 500 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_AGGREGATABLE); }
#line 3056 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 78:
#line 501 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_ANNOTATION, (yyvsp[-1].str)); }
#line 3062 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 79:
#line 502 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_APPOBJECT); }
#line 3068 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 80:
#line 503 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_ASYNC); }
#line 3074 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 81:
#line 504 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_AUTO_HANDLE); }
#line 3080 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 82:
#line 505 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_BINDABLE); }
#line 3086 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 83:
#line 506 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_BROADCAST); }
#line 3092 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 84:
#line 507 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_CALLAS, (yyvsp[-1].var)); }
#line 3098 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 85:
#line 508 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_CASE, (yyvsp[-1].expr_list)); }
#line 3104 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 86:
#line 509 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_CODE); }
#line 3110 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 87:
#line 510 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_COMMSTATUS); }
#line 3116 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 88:
#line 511 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); }
#line 3122 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 89:
#line 512 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_DONT_SERIALIZE */ }
#line 3128 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 90:
#line 513 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_SERIALIZE */ }
#line 3134 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 91:
#line 514 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_CONTROL); }
#line 3140 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 92:
#line 515 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_DECODE); }
#line 3146 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 93:
#line 516 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_DEFAULT); }
#line 3152 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 94:
#line 517 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_DEFAULTBIND); }
#line 3158 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 95:
#line 518 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_DEFAULTCOLLELEM); }
#line 3164 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 96:
#line 519 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_DEFAULTVALUE, (yyvsp[-1].expr)); }
#line 3170 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 97:
#line 520 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_DEFAULTVTABLE); }
#line 3176 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 98:
#line 521 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_DISABLECONSISTENCYCHECK); }
#line 3182 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 99:
#line 522 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_DISPLAYBIND); }
#line 3188 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 100:
#line 523 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_DLLNAME, (yyvsp[-1].str)); }
#line 3194 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 101:
#line 524 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_DUAL); }
#line 3200 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 102:
#line 525 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_ENABLEALLOCATE); }
#line 3206 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 103:
#line 526 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_ENCODE); }
#line 3212 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 104:
#line 527 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_ENDPOINT, (yyvsp[-1].str_list)); }
#line 3218 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 105:
#line 528 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_ENTRY, (yyvsp[-1].expr)); }
#line 3224 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 106:
#line 529 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); }
#line 3230 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 107:
#line 530 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_FAULTSTATUS); }
#line 3236 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 108:
#line 531 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_FORCEALLOCATE); }
#line 3242 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 109:
#line 532 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_HANDLE); }
#line 3248 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 110:
#line 533 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_HELPCONTEXT, (yyvsp[-1].expr)); }
#line 3254 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 111:
#line 534 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_HELPFILE, (yyvsp[-1].str)); }
#line 3260 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 112:
#line 535 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_HELPSTRING, (yyvsp[-1].str)); }
#line 3266 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 113:
#line 536 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_HELPSTRINGCONTEXT, (yyvsp[-1].expr)); }
#line 3272 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 114:
#line 537 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_HELPSTRINGDLL, (yyvsp[-1].str)); }
#line 3278 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 115:
#line 538 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_HIDDEN); }
#line 3284 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 116:
#line 539 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_ID, (yyvsp[-1].expr)); }
#line 3290 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 117:
#line 540 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_IDEMPOTENT); }
#line 3296 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 118:
#line 541 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_IGNORE); }
#line 3302 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 119:
#line 542 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_IIDIS, (yyvsp[-1].expr)); }
#line 3308 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 120:
#line 543 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_IMMEDIATEBIND); }
#line 3314 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 121:
#line 544 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_IMPLICIT_HANDLE, (yyvsp[-1].var)); }
#line 3320 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 122:
#line 545 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_IN); }
#line 3326 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 123:
#line 546 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_INPUTSYNC); }
#line 3332 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 124:
#line 547 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_LENGTHIS, (yyvsp[-1].expr_list)); }
#line 3338 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 125:
#line 548 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_LIBLCID, (yyvsp[-1].expr)); }
#line 3344 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 126:
#line 549 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_PARAMLCID); }
#line 3350 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 127:
#line 550 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_LICENSED); }
#line 3356 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 128:
#line 551 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_LOCAL); }
#line 3362 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 129:
#line 552 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_MAYBE); }
#line 3368 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 130:
#line 553 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_MESSAGE); }
#line 3374 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 131:
#line 554 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_NOCODE); }
#line 3380 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 132:
#line 555 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_NONBROWSABLE); }
#line 3386 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 133:
#line 556 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_NONCREATABLE); }
#line 3392 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 134:
#line 557 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_NONEXTENSIBLE); }
#line 3398 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 135:
#line 558 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_NOTIFY); }
#line 3404 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 136:
#line 559 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_NOTIFYFLAG); }
#line 3410 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 137:
#line 560 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_OBJECT); }
#line 3416 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 138:
#line 561 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_ODL); }
#line 3422 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 139:
#line 562 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_OLEAUTOMATION); }
#line 3428 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 140:
#line 563 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_OPTIMIZE, (yyvsp[-1].str)); }
#line 3434 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 141:
#line 564 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_OPTIONAL); }
#line 3440 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 142:
#line 565 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_OUT); }
#line 3446 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 143:
#line 566 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_PARTIALIGNORE); }
#line 3452 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 144:
#line 567 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrv(ATTR_POINTERDEFAULT, (yyvsp[-1].num)); }
#line 3458 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 145:
#line 568 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_PROGID, (yyvsp[-1].str)); }
#line 3464 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 146:
#line 569 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_PROPGET); }
#line 3470 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 147:
#line 570 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_PROPPUT); }
#line 3476 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 148:
#line 571 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_PROPPUTREF); }
#line 3482 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 149:
#line 572 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_PROXY); }
#line 3488 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 150:
#line 573 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_PUBLIC); }
#line 3494 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 151:
#line 575 "parser.y" /* yacc.c:1651  */
    { expr_list_t *list = append_expr( NULL, (yyvsp[-3].expr) );
						  list = append_expr( list, (yyvsp[-1].expr) );
						  (yyval.attr) = make_attrp(ATTR_RANGE, list); }
#line 3502 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 152:
#line 578 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_READONLY); }
#line 3508 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 153:
#line 579 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_REPRESENTAS, (yyvsp[-1].type)); }
#line 3514 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 154:
#line 580 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_REQUESTEDIT); }
#line 3520 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 155:
#line 581 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_RESTRICTED); }
#line 3526 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 156:
#line 582 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_RETVAL); }
#line 3532 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 157:
#line 583 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_SIZEIS, (yyvsp[-1].expr_list)); }
#line 3538 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 158:
#line 584 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_SOURCE); }
#line 3544 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 159:
#line 585 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_STRICTCONTEXTHANDLE); }
#line 3550 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 160:
#line 586 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_STRING); }
#line 3556 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 161:
#line 587 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_SWITCHIS, (yyvsp[-1].expr)); }
#line 3562 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 162:
#line 588 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_SWITCHTYPE, (yyvsp[-1].type)); }
#line 3568 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 163:
#line 589 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_TRANSMITAS, (yyvsp[-1].type)); }
#line 3574 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 164:
#line 590 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrv(ATTR_THREADING, (yyvsp[-1].num)); }
#line 3580 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 165:
#line 591 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_UIDEFAULT); }
#line 3586 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 166:
#line 592 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_USESGETLASTERROR); }
#line 3592 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 167:
#line 593 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_USERMARSHAL, (yyvsp[-1].type)); }
#line 3598 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 168:
#line 594 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_UUID, (yyvsp[-1].uuid)); }
#line 3604 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 169:
#line 595 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_ASYNCUUID, (yyvsp[-1].uuid)); }
#line 3610 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 170:
#line 596 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_V1ENUM); }
#line 3616 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 171:
#line 597 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_VARARG); }
#line 3622 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 172:
#line 598 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrv(ATTR_VERSION, (yyvsp[-1].num)); }
#line 3628 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 173:
#line 599 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_VIPROGID, (yyvsp[-1].str)); }
#line 3634 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 174:
#line 600 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrp(ATTR_WIREMARSHAL, (yyvsp[-1].type)); }
#line 3640 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 175:
#line 601 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attrv(ATTR_POINTERTYPE, (yyvsp[0].num)); }
#line 3646 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 177:
#line 606 "parser.y" /* yacc.c:1651  */
    { if (!is_valid_uuid((yyvsp[0].str)))
						    error_loc("invalid UUID: %s\n", (yyvsp[0].str));
						  (yyval.uuid) = parse_uuid((yyvsp[0].str)); }
#line 3654 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 178:
#line 611 "parser.y" /* yacc.c:1651  */
    { (yyval.str) = xstrdup("__cdecl"); }
#line 3660 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 179:
#line 612 "parser.y" /* yacc.c:1651  */
    { (yyval.str) = xstrdup("__fastcall"); }
#line 3666 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 180:
#line 613 "parser.y" /* yacc.c:1651  */
    { (yyval.str) = xstrdup("__pascal"); }
#line 3672 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 181:
#line 614 "parser.y" /* yacc.c:1651  */
    { (yyval.str) = xstrdup("__stdcall"); }
#line 3678 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 182:
#line 617 "parser.y" /* yacc.c:1651  */
    { (yyval.var_list) = NULL; }
#line 3684 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 183:
#line 618 "parser.y" /* yacc.c:1651  */
    { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); }
#line 3690 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 184:
#line 621 "parser.y" /* yacc.c:1651  */
    { attr_t *a = make_attrp(ATTR_CASE, append_expr( NULL, (yyvsp[-2].expr) ));
						  (yyval.var) = (yyvsp[0].var); if (!(yyval.var)) (yyval.var) = make_var(NULL);
						  (yyval.var)->attrs = append_attr( (yyval.var)->attrs, a );
						}
#line 3699 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 185:
#line 625 "parser.y" /* yacc.c:1651  */
    { attr_t *a = make_attr(ATTR_DEFAULT);
						  (yyval.var) = (yyvsp[0].var); if (!(yyval.var)) (yyval.var) = make_var(NULL);
						  (yyval.var)->attrs = append_attr( (yyval.var)->attrs, a );
						}
#line 3708 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 186:
#line 631 "parser.y" /* yacc.c:1651  */
    { (yyval.var_list) = NULL; }
#line 3714 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 187:
#line 632 "parser.y" /* yacc.c:1651  */
    { (yyval.var_list) = (yyvsp[-1].var_list); }
#line 3720 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 189:
#line 636 "parser.y" /* yacc.c:1651  */
    { if (!(yyvsp[0].var)->eval)
						    (yyvsp[0].var)->eval = make_exprl(EXPR_NUM, 0 /* default for first enum entry */);
                                                  (yyval.var_list) = append_var( NULL, (yyvsp[0].var) );
						}
#line 3729 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 190:
#line 640 "parser.y" /* yacc.c:1651  */
    { if (!(yyvsp[0].var)->eval)
                                                  {
                                                    var_t *last = LIST_ENTRY( list_tail((yyval.var_list)), var_t, entry );
                                                    enum expr_type type = EXPR_NUM;
                                                    if (last->eval->type == EXPR_HEXNUM) type = EXPR_HEXNUM;
                                                    if (last->eval->cval + 1 < 0) type = EXPR_HEXNUM;
                                                    (yyvsp[0].var)->eval = make_exprl(type, last->eval->cval + 1);
                                                  }
                                                  (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[0].var) );
						}
#line 3744 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 191:
#line 652 "parser.y" /* yacc.c:1651  */
    { (yyval.var) = reg_const((yyvsp[-2].var));
						  (yyval.var)->eval = (yyvsp[0].expr);
                                                  (yyval.var)->type = type_new_int(TYPE_BASIC_INT, 0);
						}
#line 3753 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 192:
#line 656 "parser.y" /* yacc.c:1651  */
    { (yyval.var) = reg_const((yyvsp[0].var));
                                                  (yyval.var)->type = type_new_int(TYPE_BASIC_INT, 0);
						}
#line 3761 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 193:
#line 661 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_new_enum((yyvsp[-3].str), current_namespace, TRUE, (yyvsp[-1].var_list)); }
#line 3767 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 194:
#line 664 "parser.y" /* yacc.c:1651  */
    { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); }
#line 3773 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 195:
#line 665 "parser.y" /* yacc.c:1651  */
    { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); }
#line 3779 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 196:
#line 668 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr(EXPR_VOID); }
#line 3785 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 198:
#line 672 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_exprl(EXPR_NUM, (yyvsp[0].num)); }
#line 3791 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 199:
#line 673 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_exprl(EXPR_HEXNUM, (yyvsp[0].num)); }
#line 3797 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 200:
#line 674 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_exprd(EXPR_DOUBLE, (yyvsp[0].dbl)); }
#line 3803 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 201:
#line 675 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 0); }
#line 3809 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 202:
#line 676 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_exprl(EXPR_NUM, 0); }
#line 3815 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 203:
#line 677 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_exprl(EXPR_TRUEFALSE, 1); }
#line 3821 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 204:
#line 678 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_exprs(EXPR_STRLIT, (yyvsp[0].str)); }
#line 3827 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 205:
#line 679 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_exprs(EXPR_WSTRLIT, (yyvsp[0].str)); }
#line 3833 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 206:
#line 680 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_exprs(EXPR_CHARCONST, (yyvsp[0].str)); }
#line 3839 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 207:
#line 681 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str)); }
#line 3845 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 208:
#line 682 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr3(EXPR_COND, (yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); }
#line 3851 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 209:
#line 683 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr2(EXPR_LOGOR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
#line 3857 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 210:
#line 684 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr2(EXPR_LOGAND, (yyvsp[-2].expr), (yyvsp[0].expr)); }
#line 3863 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 211:
#line 685 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr2(EXPR_OR , (yyvsp[-2].expr), (yyvsp[0].expr)); }
#line 3869 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 212:
#line 686 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr2(EXPR_XOR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
#line 3875 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 213:
#line 687 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr2(EXPR_AND, (yyvsp[-2].expr), (yyvsp[0].expr)); }
#line 3881 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 214:
#line 688 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr2(EXPR_EQUALITY, (yyvsp[-2].expr), (yyvsp[0].expr)); }
#line 3887 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 215:
#line 689 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr2(EXPR_INEQUALITY, (yyvsp[-2].expr), (yyvsp[0].expr)); }
#line 3893 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 216:
#line 690 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr2(EXPR_GTR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
#line 3899 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 217:
#line 691 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr2(EXPR_LESS, (yyvsp[-2].expr), (yyvsp[0].expr)); }
#line 3905 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 218:
#line 692 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr2(EXPR_GTREQL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
#line 3911 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 219:
#line 693 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr2(EXPR_LESSEQL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
#line 3917 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 220:
#line 694 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr2(EXPR_SHL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
#line 3923 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 221:
#line 695 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr2(EXPR_SHR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
#line 3929 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 222:
#line 696 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr2(EXPR_ADD, (yyvsp[-2].expr), (yyvsp[0].expr)); }
#line 3935 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 223:
#line 697 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr2(EXPR_SUB, (yyvsp[-2].expr), (yyvsp[0].expr)); }
#line 3941 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 224:
#line 698 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr2(EXPR_MOD, (yyvsp[-2].expr), (yyvsp[0].expr)); }
#line 3947 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 225:
#line 699 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr2(EXPR_MUL, (yyvsp[-2].expr), (yyvsp[0].expr)); }
#line 3953 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 226:
#line 700 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr2(EXPR_DIV, (yyvsp[-2].expr), (yyvsp[0].expr)); }
#line 3959 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 227:
#line 701 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr1(EXPR_LOGNOT, (yyvsp[0].expr)); }
#line 3965 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 228:
#line 702 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr1(EXPR_NOT, (yyvsp[0].expr)); }
#line 3971 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 229:
#line 703 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr1(EXPR_POS, (yyvsp[0].expr)); }
#line 3977 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 230:
#line 704 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr1(EXPR_NEG, (yyvsp[0].expr)); }
#line 3983 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 231:
#line 705 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr1(EXPR_ADDRESSOF, (yyvsp[0].expr)); }
#line 3989 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 232:
#line 706 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr1(EXPR_PPTR, (yyvsp[0].expr)); }
#line 3995 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 233:
#line 707 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr2(EXPR_MEMBER, make_expr1(EXPR_PPTR, (yyvsp[-2].expr)), make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str))); }
#line 4001 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 234:
#line 708 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr2(EXPR_MEMBER, (yyvsp[-2].expr), make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str))); }
#line 4007 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 235:
#line 710 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_exprt(EXPR_CAST, declare_var(NULL, (yyvsp[-3].declspec), (yyvsp[-2].declarator), 0), (yyvsp[0].expr)); free((yyvsp[-3].declspec)); free((yyvsp[-2].declarator)); }
#line 4013 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 236:
#line 712 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_exprt(EXPR_SIZEOF, declare_var(NULL, (yyvsp[-2].declspec), (yyvsp[-1].declarator), 0), NULL); free((yyvsp[-2].declspec)); free((yyvsp[-1].declarator)); }
#line 4019 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 237:
#line 713 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = make_expr2(EXPR_ARRAY, (yyvsp[-3].expr), (yyvsp[-1].expr)); }
#line 4025 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 238:
#line 714 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = (yyvsp[-1].expr); }
#line 4031 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 239:
#line 717 "parser.y" /* yacc.c:1651  */
    { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); }
#line 4037 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 240:
#line 718 "parser.y" /* yacc.c:1651  */
    { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); }
#line 4043 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 241:
#line 721 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = (yyvsp[0].expr);
						  if (!(yyval.expr)->is_const)
						      error_loc("expression is not an integer constant\n");
						}
#line 4052 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 242:
#line 727 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = (yyvsp[0].expr);
						  if (!(yyval.expr)->is_const && (yyval.expr)->type != EXPR_STRLIT && (yyval.expr)->type != EXPR_WSTRLIT)
						      error_loc("expression is not constant\n");
						}
#line 4061 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 243:
#line 733 "parser.y" /* yacc.c:1651  */
    { (yyval.var_list) = NULL; }
#line 4067 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 244:
#line 734 "parser.y" /* yacc.c:1651  */
    { (yyval.var_list) = append_var_list((yyvsp[-1].var_list), (yyvsp[0].var_list)); }
#line 4073 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 245:
#line 738 "parser.y" /* yacc.c:1651  */
    { const char *first = LIST_ENTRY(list_head((yyvsp[-1].declarator_list)), declarator_t, entry)->var->name;
						  check_field_attrs(first, (yyvsp[-3].attr_list));
						  (yyval.var_list) = set_var_types((yyvsp[-3].attr_list), (yyvsp[-2].declspec), (yyvsp[-1].declarator_list));
						}
#line 4082 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 246:
#line 742 "parser.y" /* yacc.c:1651  */
    { var_t *v = make_var(NULL);
						  v->type = (yyvsp[-1].type); v->attrs = (yyvsp[-2].attr_list);
						  (yyval.var_list) = append_var(NULL, v);
						}
#line 4091 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 247:
#line 749 "parser.y" /* yacc.c:1651  */
    { (yyval.var) = (yyvsp[-1].var); }
#line 4097 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 248:
#line 750 "parser.y" /* yacc.c:1651  */
    { (yyval.var) = make_var(NULL); (yyval.var)->attrs = (yyvsp[-1].attr_list); }
#line 4103 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 249:
#line 753 "parser.y" /* yacc.c:1651  */
    { (yyval.var_list) = NULL; }
#line 4109 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 250:
#line 754 "parser.y" /* yacc.c:1651  */
    { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); }
#line 4115 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 251:
#line 758 "parser.y" /* yacc.c:1651  */
    { (yyval.var) = (yyvsp[-1].var); }
#line 4121 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 252:
#line 759 "parser.y" /* yacc.c:1651  */
    { (yyval.var) = NULL; }
#line 4127 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 253:
#line 762 "parser.y" /* yacc.c:1651  */
    { (yyval.var) = declare_var(check_field_attrs((yyvsp[0].declarator)->var->name, (yyvsp[-2].attr_list)),
						                (yyvsp[-1].declspec), (yyvsp[0].declarator), FALSE);
						  free((yyvsp[0].declarator));
						}
#line 4136 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 254:
#line 766 "parser.y" /* yacc.c:1651  */
    { var_t *v = make_var(NULL);
						  v->type = (yyvsp[0].type); v->attrs = (yyvsp[-1].attr_list);
						  (yyval.var) = v;
						}
#line 4145 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 255:
#line 772 "parser.y" /* yacc.c:1651  */
    { (yyval.var) = (yyvsp[0].var);
						  if (type_get_type((yyval.var)->type) != TYPE_FUNCTION)
						    error_loc("only methods may be declared inside the methods section of a dispinterface\n");
						  check_function_attrs((yyval.var)->name, (yyval.var)->attrs);
						}
#line 4155 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 256:
#line 781 "parser.y" /* yacc.c:1651  */
    { (yyval.var) = declare_var((yyvsp[-2].attr_list), (yyvsp[-1].declspec), (yyvsp[0].declarator), FALSE);
						  free((yyvsp[0].declarator));
						}
#line 4163 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 257:
#line 784 "parser.y" /* yacc.c:1651  */
    { (yyval.var) = declare_var(NULL, (yyvsp[-1].declspec), (yyvsp[0].declarator), FALSE);
						  free((yyvsp[0].declarator));
						}
#line 4171 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 258:
#line 789 "parser.y" /* yacc.c:1651  */
    { (yyval.var) = NULL; }
#line 4177 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 260:
#line 793 "parser.y" /* yacc.c:1651  */
    { (yyval.str) = NULL; }
#line 4183 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 261:
#line 794 "parser.y" /* yacc.c:1651  */
    { (yyval.str) = (yyvsp[0].str); }
#line 4189 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 262:
#line 795 "parser.y" /* yacc.c:1651  */
    { (yyval.str) = (yyvsp[0].str); }
#line 4195 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 263:
#line 798 "parser.y" /* yacc.c:1651  */
    { (yyval.var) = make_var((yyvsp[0].str)); }
#line 4201 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 264:
#line 800 "parser.y" /* yacc.c:1651  */
    { (yyval.var) = make_var((yyvsp[0].str)); }
#line 4207 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 265:
#line 803 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
#line 4213 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 266:
#line 804 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
#line 4219 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 268:
#line 806 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[0].type)), -1); }
#line 4225 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 269:
#line 807 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[0].type)), 1); }
#line 4231 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 270:
#line 808 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_new_int(TYPE_BASIC_INT, 1); }
#line 4237 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 271:
#line 809 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
#line 4243 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 272:
#line 810 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
#line 4249 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 273:
#line 811 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
#line 4255 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 274:
#line 812 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
#line 4261 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 275:
#line 813 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
#line 4267 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 278:
#line 820 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_new_int(TYPE_BASIC_INT, 0); }
#line 4273 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 279:
#line 821 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_new_int(TYPE_BASIC_INT16, 0); }
#line 4279 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 280:
#line 822 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_new_int(TYPE_BASIC_INT8, 0); }
#line 4285 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 281:
#line 823 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_new_int(TYPE_BASIC_LONG, 0); }
#line 4291 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 282:
#line 824 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_new_int(TYPE_BASIC_HYPER, 0); }
#line 4297 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 283:
#line 825 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_new_int(TYPE_BASIC_INT64, 0); }
#line 4303 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 284:
#line 826 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_new_int(TYPE_BASIC_CHAR, 0); }
#line 4309 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 285:
#line 827 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_new_int(TYPE_BASIC_INT32, 0); }
#line 4315 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 286:
#line 828 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_new_int(TYPE_BASIC_INT3264, 0); }
#line 4321 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 287:
#line 831 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_new_coclass((yyvsp[0].str)); }
#line 4327 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 288:
#line 832 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = find_type((yyvsp[0].str), NULL, 0);
						  if (type_get_type_detect_alias((yyval.type)) != TYPE_COCLASS)
						    error_loc("%s was not declared a coclass at %s:%d\n",
							      (yyvsp[0].str), (yyval.type)->loc_info.input_name,
							      (yyval.type)->loc_info.line_number);
						}
#line 4338 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 289:
#line 840 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = (yyvsp[0].type);
						  check_def((yyval.type));
						  (yyval.type)->attrs = check_coclass_attrs((yyvsp[0].type)->name, (yyvsp[-1].attr_list));
						}
#line 4347 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 290:
#line 847 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_coclass_define((yyvsp[-4].type), (yyvsp[-2].ifref_list)); }
#line 4353 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 291:
#line 850 "parser.y" /* yacc.c:1651  */
    { (yyval.str) = (yyvsp[0].str); }
#line 4359 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 292:
#line 853 "parser.y" /* yacc.c:1651  */
    { (yyval.ifref_list) = NULL; }
#line 4365 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 293:
#line 854 "parser.y" /* yacc.c:1651  */
    { (yyval.ifref_list) = append_ifref( (yyvsp[-1].ifref_list), (yyvsp[0].ifref) ); }
#line 4371 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 294:
#line 858 "parser.y" /* yacc.c:1651  */
    { (yyval.ifref) = make_ifref((yyvsp[0].type)); (yyval.ifref)->attrs = (yyvsp[-1].attr_list); }
#line 4377 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 295:
#line 861 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
#line 4383 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 296:
#line 862 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
#line 4389 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 297:
#line 865 "parser.y" /* yacc.c:1651  */
    { attr_t *attrs;
						  (yyval.type) = (yyvsp[0].type);
						  check_def((yyval.type));
						  attrs = make_attr(ATTR_DISPINTERFACE);
						  (yyval.type)->attrs = append_attr( check_dispiface_attrs((yyvsp[0].type)->name, (yyvsp[-1].attr_list)), attrs );
						  (yyval.type)->defined = TRUE;
						}
#line 4401 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 298:
#line 874 "parser.y" /* yacc.c:1651  */
    { (yyval.var_list) = NULL; }
#line 4407 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 299:
#line 875 "parser.y" /* yacc.c:1651  */
    { (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[-1].var) ); }
#line 4413 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 300:
#line 878 "parser.y" /* yacc.c:1651  */
    { (yyval.var_list) = NULL; }
#line 4419 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 301:
#line 879 "parser.y" /* yacc.c:1651  */
    { (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[-1].var) ); }
#line 4425 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 302:
#line 885 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = (yyvsp[-4].type);
						  type_dispinterface_define((yyval.type), (yyvsp[-2].var_list), (yyvsp[-1].var_list));
						}
#line 4433 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 303:
#line 889 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = (yyvsp[-4].type);
						  type_dispinterface_define_from_iface((yyval.type), (yyvsp[-2].type));
						}
#line 4441 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 304:
#line 894 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = NULL; }
#line 4447 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 305:
#line 895 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = find_type_or_error2((yyvsp[0].str), 0); }
#line 4453 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 306:
#line 898 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
#line 4459 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 307:
#line 899 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); }
#line 4465 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 308:
#line 902 "parser.y" /* yacc.c:1651  */
    { (yyval.ifinfo).interface = (yyvsp[0].type);
						  (yyval.ifinfo).old_pointer_default = pointer_default;
						  if (is_attr((yyvsp[-1].attr_list), ATTR_POINTERDEFAULT))
						    pointer_default = get_attrv((yyvsp[-1].attr_list), ATTR_POINTERDEFAULT);
						  check_def((yyvsp[0].type));
						  (yyvsp[0].type)->attrs = check_iface_attrs((yyvsp[0].type)->name, (yyvsp[-1].attr_list));
						  (yyvsp[0].type)->defined = TRUE;
						}
#line 4478 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 309:
#line 913 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = (yyvsp[-5].ifinfo).interface;
						  if((yyval.type) == (yyvsp[-4].type))
						    error_loc("Interface can't inherit from itself\n");
						  type_interface_define((yyval.type), (yyvsp[-4].type), (yyvsp[-2].stmt_list));
						  check_async_uuid((yyval.type));
						  pointer_default = (yyvsp[-5].ifinfo).old_pointer_default;
						}
#line 4490 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 310:
#line 924 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = (yyvsp[-7].ifinfo).interface;
						  type_interface_define((yyval.type), find_type_or_error2((yyvsp[-5].str), 0), (yyvsp[-2].stmt_list));
						  pointer_default = (yyvsp[-7].ifinfo).old_pointer_default;
						}
#line 4499 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 311:
#line 928 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = (yyvsp[-1].type); }
#line 4505 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 312:
#line 932 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = (yyvsp[-1].type); }
#line 4511 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 313:
#line 933 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = (yyvsp[-1].type); }
#line 4517 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 314:
#line 936 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_new_module((yyvsp[0].str)); }
#line 4523 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 315:
#line 937 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_new_module((yyvsp[0].str)); }
#line 4529 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 316:
#line 940 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = (yyvsp[0].type);
						  (yyval.type)->attrs = check_module_attrs((yyvsp[0].type)->name, (yyvsp[-1].attr_list));
						}
#line 4537 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 317:
#line 946 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = (yyvsp[-4].type);
                                                  type_module_define((yyval.type), (yyvsp[-2].stmt_list));
						}
#line 4545 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 318:
#line 952 "parser.y" /* yacc.c:1651  */
    { (yyval.stgclass) = STG_EXTERN; }
#line 4551 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 319:
#line 953 "parser.y" /* yacc.c:1651  */
    { (yyval.stgclass) = STG_STATIC; }
#line 4557 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 320:
#line 954 "parser.y" /* yacc.c:1651  */
    { (yyval.stgclass) = STG_REGISTER; }
#line 4563 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 321:
#line 958 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_INLINE); }
#line 4569 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 322:
#line 962 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_CONST); }
#line 4575 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 323:
#line 965 "parser.y" /* yacc.c:1651  */
    { (yyval.attr_list) = NULL; }
#line 4581 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 324:
#line 966 "parser.y" /* yacc.c:1651  */
    { (yyval.attr_list) = append_attr((yyvsp[-1].attr_list), (yyvsp[0].attr)); }
#line 4587 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 325:
#line 969 "parser.y" /* yacc.c:1651  */
    { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[0].declspec), NULL, NULL, STG_NONE); }
#line 4593 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 326:
#line 971 "parser.y" /* yacc.c:1651  */
    { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[-2].declspec), (yyvsp[0].declspec), NULL, STG_NONE); }
#line 4599 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 327:
#line 974 "parser.y" /* yacc.c:1651  */
    { (yyval.declspec) = NULL; }
#line 4605 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 329:
#line 979 "parser.y" /* yacc.c:1651  */
    { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, (yyvsp[-1].attr), STG_NONE); }
#line 4611 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 330:
#line 980 "parser.y" /* yacc.c:1651  */
    { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, (yyvsp[-1].attr), STG_NONE); }
#line 4617 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 331:
#line 981 "parser.y" /* yacc.c:1651  */
    { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, NULL, (yyvsp[-1].stgclass)); }
#line 4623 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 332:
#line 986 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = (yyvsp[0].declarator); (yyval.declarator)->type = append_chain_type((yyval.declarator)->type, type_new_pointer(pointer_default, NULL, (yyvsp[-1].attr_list))); }
#line 4629 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 333:
#line 987 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = (yyvsp[0].declarator); if ((yyval.declarator)->func_type) (yyval.declarator)->func_type->attrs = append_attr((yyval.declarator)->func_type->attrs, make_attrp(ATTR_CALLCONV, (yyvsp[-1].str)));
						           else if ((yyval.declarator)->type) (yyval.declarator)->type->attrs = append_attr((yyval.declarator)->type->attrs, make_attrp(ATTR_CALLCONV, (yyvsp[-1].str))); }
#line 4636 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 335:
#line 993 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = make_declarator((yyvsp[0].var)); }
#line 4642 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 336:
#line 994 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = (yyvsp[-1].declarator); }
#line 4648 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 337:
#line 995 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = (yyvsp[-1].declarator); (yyval.declarator)->type = append_array((yyval.declarator)->type, (yyvsp[0].expr)); }
#line 4654 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 338:
#line 996 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = (yyvsp[-3].declarator);
						  (yyval.declarator)->func_type = append_chain_type((yyval.declarator)->type, type_new_function((yyvsp[-1].var_list)));
						  (yyval.declarator)->type = NULL;
						}
#line 4663 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 339:
#line 1005 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = (yyvsp[0].declarator); (yyval.declarator)->type = append_chain_type((yyval.declarator)->type, type_new_pointer(pointer_default, NULL, (yyvsp[-1].attr_list))); }
#line 4669 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 340:
#line 1006 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = (yyvsp[0].declarator); if ((yyval.declarator)->func_type) (yyval.declarator)->func_type->attrs = append_attr((yyval.declarator)->func_type->attrs, make_attrp(ATTR_CALLCONV, (yyvsp[-1].str)));
						           else if ((yyval.declarator)->type) (yyval.declarator)->type->attrs = append_attr((yyval.declarator)->type->attrs, make_attrp(ATTR_CALLCONV, (yyvsp[-1].str))); }
#line 4676 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 342:
#line 1014 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = (yyvsp[0].declarator); (yyval.declarator)->type = append_chain_type((yyval.declarator)->type, type_new_pointer(pointer_default, NULL, (yyvsp[-1].attr_list))); }
#line 4682 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 343:
#line 1015 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = (yyvsp[0].declarator); if ((yyval.declarator)->func_type) (yyval.declarator)->func_type->attrs = append_attr((yyval.declarator)->func_type->attrs, make_attrp(ATTR_CALLCONV, (yyvsp[-1].str)));
						           else if ((yyval.declarator)->type) (yyval.declarator)->type->attrs = append_attr((yyval.declarator)->type->attrs, make_attrp(ATTR_CALLCONV, (yyvsp[-1].str))); }
#line 4689 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 344:
#line 1020 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = make_declarator(NULL); }
#line 4695 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 346:
#line 1026 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = (yyvsp[-1].declarator); }
#line 4701 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 347:
#line 1027 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = (yyvsp[-1].declarator); (yyval.declarator)->type = append_array((yyval.declarator)->type, (yyvsp[0].expr)); }
#line 4707 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 348:
#line 1028 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = make_declarator(NULL); (yyval.declarator)->type = append_array((yyval.declarator)->type, (yyvsp[0].expr)); }
#line 4713 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 349:
#line 1030 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = make_declarator(NULL);
						  (yyval.declarator)->func_type = append_chain_type((yyval.declarator)->type, type_new_function((yyvsp[-1].var_list)));
						  (yyval.declarator)->type = NULL;
						}
#line 4722 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 350:
#line 1035 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = (yyvsp[-3].declarator);
						  (yyval.declarator)->func_type = append_chain_type((yyval.declarator)->type, type_new_function((yyvsp[-1].var_list)));
						  (yyval.declarator)->type = NULL;
						}
#line 4731 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 351:
#line 1044 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = (yyvsp[0].declarator); (yyval.declarator)->type = append_chain_type((yyval.declarator)->type, type_new_pointer(pointer_default, NULL, (yyvsp[-1].attr_list))); }
#line 4737 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 352:
#line 1045 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = (yyvsp[0].declarator); (yyval.declarator)->type->attrs = append_attr((yyval.declarator)->type->attrs, make_attrp(ATTR_CALLCONV, (yyvsp[-1].str))); }
#line 4743 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 354:
#line 1052 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = (yyvsp[0].declarator); (yyval.declarator)->type = append_chain_type((yyval.declarator)->type, type_new_pointer(pointer_default, NULL, (yyvsp[-1].attr_list))); }
#line 4749 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 355:
#line 1053 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = (yyvsp[0].declarator); (yyval.declarator)->type->attrs = append_attr((yyval.declarator)->type->attrs, make_attrp(ATTR_CALLCONV, (yyvsp[-1].str))); }
#line 4755 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 356:
#line 1057 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = make_declarator(NULL); }
#line 4761 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 358:
#line 1065 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = make_declarator((yyvsp[0].var)); }
#line 4767 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 359:
#line 1066 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = (yyvsp[-1].declarator); }
#line 4773 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 360:
#line 1067 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = (yyvsp[-1].declarator); (yyval.declarator)->type = append_array((yyval.declarator)->type, (yyvsp[0].expr)); }
#line 4779 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 361:
#line 1068 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = make_declarator(NULL); (yyval.declarator)->type = append_array((yyval.declarator)->type, (yyvsp[0].expr)); }
#line 4785 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 362:
#line 1070 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = make_declarator(NULL);
						  (yyval.declarator)->func_type = append_chain_type((yyval.declarator)->type, type_new_function((yyvsp[-1].var_list)));
						  (yyval.declarator)->type = NULL;
						}
#line 4794 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 363:
#line 1075 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = (yyvsp[-3].declarator);
						  (yyval.declarator)->func_type = append_chain_type((yyval.declarator)->type, type_new_function((yyvsp[-1].var_list)));
						  (yyval.declarator)->type = NULL;
						}
#line 4803 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 364:
#line 1082 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[0].declarator) ); }
#line 4809 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 365:
#line 1083 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator_list) = append_declarator( (yyvsp[-2].declarator_list), (yyvsp[0].declarator) ); }
#line 4815 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 366:
#line 1086 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = NULL; }
#line 4821 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 367:
#line 1087 "parser.y" /* yacc.c:1651  */
    { (yyval.expr) = (yyvsp[0].expr); }
#line 4827 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 368:
#line 1090 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = (yyvsp[-1].declarator); (yyval.declarator)->bits = (yyvsp[0].expr);
						  if (!(yyval.declarator)->bits && !(yyval.declarator)->var->name)
						    error_loc("unnamed fields are not allowed\n");
						}
#line 4836 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 369:
#line 1097 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[0].declarator) ); }
#line 4842 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 370:
#line 1099 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator_list) = append_declarator( (yyvsp[-2].declarator_list), (yyvsp[0].declarator) ); }
#line 4848 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 371:
#line 1103 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = (yyvsp[0].declarator); }
#line 4854 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 372:
#line 1104 "parser.y" /* yacc.c:1651  */
    { (yyval.declarator) = (yyvsp[-2].declarator); (yyvsp[-2].declarator)->var->eval = (yyvsp[0].expr); }
#line 4860 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 373:
#line 1108 "parser.y" /* yacc.c:1651  */
    { (yyval.num) = THREADING_APARTMENT; }
#line 4866 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 374:
#line 1109 "parser.y" /* yacc.c:1651  */
    { (yyval.num) = THREADING_NEUTRAL; }
#line 4872 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 375:
#line 1110 "parser.y" /* yacc.c:1651  */
    { (yyval.num) = THREADING_SINGLE; }
#line 4878 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 376:
#line 1111 "parser.y" /* yacc.c:1651  */
    { (yyval.num) = THREADING_FREE; }
#line 4884 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 377:
#line 1112 "parser.y" /* yacc.c:1651  */
    { (yyval.num) = THREADING_BOTH; }
#line 4890 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 378:
#line 1116 "parser.y" /* yacc.c:1651  */
    { (yyval.num) = FC_RP; }
#line 4896 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 379:
#line 1117 "parser.y" /* yacc.c:1651  */
    { (yyval.num) = FC_UP; }
#line 4902 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 380:
#line 1118 "parser.y" /* yacc.c:1651  */
    { (yyval.num) = FC_FP; }
#line 4908 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 381:
#line 1121 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_new_struct((yyvsp[-3].str), current_namespace, TRUE, (yyvsp[-1].var_list)); }
#line 4914 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 382:
#line 1124 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_new_void(); }
#line 4920 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 383:
#line 1125 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = find_type_or_error((yyvsp[0].str), 0); }
#line 4926 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 384:
#line 1126 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = (yyvsp[0].type); }
#line 4932 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 385:
#line 1127 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = (yyvsp[0].type); }
#line 4938 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 386:
#line 1128 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_new_enum((yyvsp[0].str), current_namespace, FALSE, NULL); }
#line 4944 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 387:
#line 1129 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = (yyvsp[0].type); }
#line 4950 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 388:
#line 1130 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_new_struct((yyvsp[0].str), current_namespace, FALSE, NULL); }
#line 4956 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 389:
#line 1131 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = (yyvsp[0].type); }
#line 4962 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 390:
#line 1132 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_new_nonencapsulated_union((yyvsp[0].str), FALSE, NULL); }
#line 4968 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 391:
#line 1133 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = make_safearray((yyvsp[-1].type)); }
#line 4974 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 392:
#line 1137 "parser.y" /* yacc.c:1651  */
    { (yyvsp[-4].attr_list) = append_attribs((yyvsp[-4].attr_list), (yyvsp[-2].attr_list));
						  reg_typedefs((yyvsp[-1].declspec), (yyvsp[0].declarator_list), check_typedef_attrs((yyvsp[-4].attr_list)));
						  (yyval.statement) = make_statement_typedef((yyvsp[0].declarator_list));
						}
#line 4983 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 393:
#line 1144 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_new_nonencapsulated_union((yyvsp[-3].str), TRUE, (yyvsp[-1].var_list)); }
#line 4989 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 394:
#line 1147 "parser.y" /* yacc.c:1651  */
    { (yyval.type) = type_new_encapsulated_union((yyvsp[-8].str), (yyvsp[-5].var), (yyvsp[-3].var), (yyvsp[-1].var_list)); }
#line 4995 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 395:
#line 1151 "parser.y" /* yacc.c:1651  */
    { (yyval.num) = MAKEVERSION((yyvsp[0].num), 0); }
#line 5001 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 396:
#line 1152 "parser.y" /* yacc.c:1651  */
    { (yyval.num) = MAKEVERSION((yyvsp[-2].num), (yyvsp[0].num)); }
#line 5007 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 397:
#line 1153 "parser.y" /* yacc.c:1651  */
    { (yyval.num) = (yyvsp[0].num); }
#line 5013 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 402:
#line 1166 "parser.y" /* yacc.c:1651  */
    { type_t *type = find_type_or_error((yyvsp[-1].str), 0);
                                                  type->attrs = append_attr_list(type->attrs, (yyvsp[-2].attr_list));
                                                }
#line 5021 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 403:
#line 1171 "parser.y" /* yacc.c:1651  */
    {  type_t *iface = find_type_or_error2((yyvsp[-3].str), 0);
                                                   if (type_get_type(iface) != TYPE_INTERFACE)
                                                       error_loc("%s is not an interface\n", iface->name);
                                                   iface->attrs = append_attr_list(iface->attrs, (yyvsp[-5].attr_list));
                                                }
#line 5031 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 404:
#line 1178 "parser.y" /* yacc.c:1651  */
    { (yyval.attr_list) = NULL; }
#line 5037 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 405:
#line 1179 "parser.y" /* yacc.c:1651  */
    { (yyval.attr_list) = (yyvsp[-1].attr_list); }
#line 5043 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 406:
#line 1182 "parser.y" /* yacc.c:1651  */
    { (yyval.attr_list) = append_attr(NULL, (yyvsp[0].attr)); }
#line 5049 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 407:
#line 1183 "parser.y" /* yacc.c:1651  */
    { (yyval.attr_list) = append_attr((yyvsp[-2].attr_list), (yyvsp[0].attr)); }
#line 5055 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 408:
#line 1186 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_ENCODE); }
#line 5061 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 409:
#line 1187 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_DECODE); }
#line 5067 "parser.tab.c" /* yacc.c:1651  */
    break;

  case 410:
#line 1188 "parser.y" /* yacc.c:1651  */
    { (yyval.attr) = make_attr(ATTR_EXPLICIT_HANDLE); }
#line 5073 "parser.tab.c" /* yacc.c:1651  */
    break;


#line 5077 "parser.tab.c" /* yacc.c:1651  */
      default: break;
    }
  /* User semantic actions sometimes alter yychar, and that requires
     that yytoken be updated with the new translation.  We take the
     approach of translating immediately before every use of yytoken.
     One alternative is translating here after every semantic action,
     but that translation would be missed if the semantic action invokes
     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
     incorrect destructor might then be invoked immediately.  In the
     case of YYERROR or YYBACKUP, subsequent parser actions might lead
     to an incorrect destructor call or verbose syntax error message
     before the lookahead is translated.  */
  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);

  YYPOPSTACK (yylen);
  yylen = 0;
  YY_STACK_PRINT (yyss, yyssp);

  *++yyvsp = yyval;

  /* Now 'shift' the result of the reduction.  Determine what state
     that goes to, based on the state we popped back to and the rule
     number reduced by.  */

  yyn = yyr1[yyn];

  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
    yystate = yytable[yystate];
  else
    yystate = yydefgoto[yyn - YYNTOKENS];

  goto yynewstate;


/*--------------------------------------.
| yyerrlab -- here on detecting error.  |
`--------------------------------------*/
yyerrlab:
  /* Make sure we have latest lookahead translation.  See comments at
     user semantic actions for why this is necessary.  */
  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);

  /* If not already recovering from an error, report this error.  */
  if (!yyerrstatus)
    {
      ++yynerrs;
#if ! YYERROR_VERBOSE
      yyerror (YY_("syntax error"));
#else
# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
                                        yyssp, yytoken)
      {
        char const *yymsgp = YY_("syntax error");
        int yysyntax_error_status;
        yysyntax_error_status = YYSYNTAX_ERROR;
        if (yysyntax_error_status == 0)
          yymsgp = yymsg;
        else if (yysyntax_error_status == 1)
          {
            if (yymsg != yymsgbuf)
              YYSTACK_FREE (yymsg);
            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
            if (!yymsg)
              {
                yymsg = yymsgbuf;
                yymsg_alloc = sizeof yymsgbuf;
                yysyntax_error_status = 2;
              }
            else
              {
                yysyntax_error_status = YYSYNTAX_ERROR;
                yymsgp = yymsg;
              }
          }
        yyerror (yymsgp);
        if (yysyntax_error_status == 2)
          goto yyexhaustedlab;
      }
# undef YYSYNTAX_ERROR
#endif
    }



  if (yyerrstatus == 3)
    {
      /* If just tried and failed to reuse lookahead token after an
         error, discard it.  */

      if (yychar <= YYEOF)
        {
          /* Return failure if at end of input.  */
          if (yychar == YYEOF)
            YYABORT;
        }
      else
        {
          yydestruct ("Error: discarding",
                      yytoken, &yylval);
          yychar = YYEMPTY;
        }
    }

  /* Else will try to reuse lookahead token after shifting the error
     token.  */
  goto yyerrlab1;


/*---------------------------------------------------.
| yyerrorlab -- error raised explicitly by YYERROR.  |
`---------------------------------------------------*/
yyerrorlab:

  /* Pacify compilers like GCC when the user code never invokes
     YYERROR and the label yyerrorlab therefore never appears in user
     code.  */
  if (/*CONSTCOND*/ 0)
     goto yyerrorlab;

  /* Do not reclaim the symbols of the rule whose action triggered
     this YYERROR.  */
  YYPOPSTACK (yylen);
  yylen = 0;
  YY_STACK_PRINT (yyss, yyssp);
  yystate = *yyssp;
  goto yyerrlab1;


/*-------------------------------------------------------------.
| yyerrlab1 -- common code for both syntax error and YYERROR.  |
`-------------------------------------------------------------*/
yyerrlab1:
  yyerrstatus = 3;      /* Each real token shifted decrements this.  */

  for (;;)
    {
      yyn = yypact[yystate];
      if (!yypact_value_is_default (yyn))
        {
          yyn += YYTERROR;
          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
            {
              yyn = yytable[yyn];
              if (0 < yyn)
                break;
            }
        }

      /* Pop the current state because it cannot handle the error token.  */
      if (yyssp == yyss)
        YYABORT;


      yydestruct ("Error: popping",
                  yystos[yystate], yyvsp);
      YYPOPSTACK (1);
      yystate = *yyssp;
      YY_STACK_PRINT (yyss, yyssp);
    }

  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
  *++yyvsp = yylval;
  YY_IGNORE_MAYBE_UNINITIALIZED_END


  /* Shift the error token.  */
  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);

  yystate = yyn;
  goto yynewstate;


/*-------------------------------------.
| yyacceptlab -- YYACCEPT comes here.  |
`-------------------------------------*/
yyacceptlab:
  yyresult = 0;
  goto yyreturn;

/*-----------------------------------.
| yyabortlab -- YYABORT comes here.  |
`-----------------------------------*/
yyabortlab:
  yyresult = 1;
  goto yyreturn;

#if !defined yyoverflow || YYERROR_VERBOSE
/*-------------------------------------------------.
| yyexhaustedlab -- memory exhaustion comes here.  |
`-------------------------------------------------*/
yyexhaustedlab:
  yyerror (YY_("memory exhausted"));
  yyresult = 2;
  /* Fall through.  */
#endif

yyreturn:
  if (yychar != YYEMPTY)
    {
      /* Make sure we have latest lookahead translation.  See comments at
         user semantic actions for why this is necessary.  */
      yytoken = YYTRANSLATE (yychar);
      yydestruct ("Cleanup: discarding lookahead",
                  yytoken, &yylval);
    }
  /* Do not reclaim the symbols of the rule whose action triggered
     this YYABORT or YYACCEPT.  */
  YYPOPSTACK (yylen);
  YY_STACK_PRINT (yyss, yyssp);
  while (yyssp != yyss)
    {
      yydestruct ("Cleanup: popping",
                  yystos[*yyssp], yyvsp);
      YYPOPSTACK (1);
    }
#ifndef yyoverflow
  if (yyss != yyssa)
    YYSTACK_FREE (yyss);
#endif
#if YYERROR_VERBOSE
  if (yymsg != yymsgbuf)
    YYSTACK_FREE (yymsg);
#endif
  return yyresult;
}
#line 1190 "parser.y" /* yacc.c:1910  */


static void decl_builtin_basic(const char *name, enum type_basic_type type)
{
  type_t *t = type_new_basic(type);
  reg_type(t, name, NULL, 0);
}

static void decl_builtin_alias(const char *name, type_t *t)
{
  reg_type(type_new_alias(t, name), name, NULL, 0);
}

void init_types(void)
{
  decl_builtin_basic("byte", TYPE_BASIC_BYTE);
  decl_builtin_basic("wchar_t", TYPE_BASIC_WCHAR);
  decl_builtin_basic("float", TYPE_BASIC_FLOAT);
  decl_builtin_basic("double", TYPE_BASIC_DOUBLE);
  decl_builtin_basic("error_status_t", TYPE_BASIC_ERROR_STATUS_T);
  decl_builtin_basic("handle_t", TYPE_BASIC_HANDLE);
  decl_builtin_alias("boolean", type_new_basic(TYPE_BASIC_BYTE));
}

static str_list_t *append_str(str_list_t *list, char *str)
{
    struct str_list_entry_t *entry;

    if (!str) return list;
    if (!list)
    {
        list = xmalloc( sizeof(*list) );
        list_init( list );
    }
    entry = xmalloc( sizeof(*entry) );
    entry->str = str;
    list_add_tail( list, &entry->entry );
    return list;
}

static attr_list_t *append_attr(attr_list_t *list, attr_t *attr)
{
    attr_t *attr_existing;
    if (!attr) return list;
    if (!list)
    {
        list = xmalloc( sizeof(*list) );
        list_init( list );
    }
    LIST_FOR_EACH_ENTRY(attr_existing, list, attr_t, entry)
        if (attr_existing->type == attr->type)
        {
            parser_warning("duplicate attribute %s\n", get_attr_display_name(attr->type));
            /* use the last attribute, like MIDL does */
            list_remove(&attr_existing->entry);
            break;
        }
    list_add_tail( list, &attr->entry );
    return list;
}

static attr_list_t *move_attr(attr_list_t *dst, attr_list_t *src, enum attr_type type)
{
  attr_t *attr;
  if (!src) return dst;
  LIST_FOR_EACH_ENTRY(attr, src, attr_t, entry)
    if (attr->type == type)
    {
      list_remove(&attr->entry);
      return append_attr(dst, attr);
    }
  return dst;
}

static attr_list_t *append_attr_list(attr_list_t *new_list, attr_list_t *old_list)
{
  struct list *entry;

  if (!old_list) return new_list;

  while ((entry = list_head(old_list)))
  {
    attr_t *attr = LIST_ENTRY(entry, attr_t, entry);
    list_remove(entry);
    new_list = append_attr(new_list, attr);
  }
  return new_list;
}

typedef int (*map_attrs_filter_t)(attr_list_t*,const attr_t*);

static attr_list_t *map_attrs(const attr_list_t *list, map_attrs_filter_t filter)
{
  attr_list_t *new_list;
  const attr_t *attr;
  attr_t *new_attr;

  if (!list) return NULL;

  new_list = xmalloc( sizeof(*list) );
  list_init( new_list );
  LIST_FOR_EACH_ENTRY(attr, list, const attr_t, entry)
  {
    if (filter && !filter(new_list, attr)) continue;
    new_attr = xmalloc(sizeof(*new_attr));
    *new_attr = *attr;
    list_add_tail(new_list, &new_attr->entry);
  }
  return new_list;
}

static decl_spec_t *make_decl_spec(type_t *type, decl_spec_t *left, decl_spec_t *right, attr_t *attr, enum storage_class stgclass)
{
  decl_spec_t *declspec = left ? left : right;
  if (!declspec)
  {
    declspec = xmalloc(sizeof(*declspec));
    declspec->type = NULL;
    declspec->attrs = NULL;
    declspec->stgclass = STG_NONE;
  }
  declspec->type = type;
  if (left && declspec != left)
  {
    declspec->attrs = append_attr_list(declspec->attrs, left->attrs);
    if (declspec->stgclass == STG_NONE)
      declspec->stgclass = left->stgclass;
    else if (left->stgclass != STG_NONE)
      error_loc("only one storage class can be specified\n");
    assert(!left->type);
    free(left);
  }
  if (right && declspec != right)
  {
    declspec->attrs = append_attr_list(declspec->attrs, right->attrs);
    if (declspec->stgclass == STG_NONE)
      declspec->stgclass = right->stgclass;
    else if (right->stgclass != STG_NONE)
      error_loc("only one storage class can be specified\n");
    assert(!right->type);
    free(right);
  }

  declspec->attrs = append_attr(declspec->attrs, attr);
  if (declspec->stgclass == STG_NONE)
    declspec->stgclass = stgclass;
  else if (stgclass != STG_NONE)
    error_loc("only one storage class can be specified\n");

  /* apply attributes to type */
  if (type && declspec->attrs)
  {
    attr_list_t *attrs;
    declspec->type = duptype(type, 1);
    attrs = map_attrs(type->attrs, NULL);
    declspec->type->attrs = append_attr_list(attrs, declspec->attrs);
    declspec->attrs = NULL;
  }

  return declspec;
}

static attr_t *make_attr(enum attr_type type)
{
  attr_t *a = xmalloc(sizeof(attr_t));
  a->type = type;
  a->u.ival = 0;
  return a;
}

static attr_t *make_attrv(enum attr_type type, unsigned int val)
{
  attr_t *a = xmalloc(sizeof(attr_t));
  a->type = type;
  a->u.ival = val;
  return a;
}

static attr_t *make_attrp(enum attr_type type, void *val)
{
  attr_t *a = xmalloc(sizeof(attr_t));
  a->type = type;
  a->u.pval = val;
  return a;
}

static expr_list_t *append_expr(expr_list_t *list, expr_t *expr)
{
    if (!expr) return list;
    if (!list)
    {
        list = xmalloc( sizeof(*list) );
        list_init( list );
    }
    list_add_tail( list, &expr->entry );
    return list;
}

static type_t *append_array(type_t *chain, expr_t *expr)
{
    type_t *array;

    if (!expr)
        return chain;

    /* An array is always a reference pointer unless explicitly marked otherwise
     * (regardless of what the default pointer attribute is). */
    array = type_new_array(NULL, NULL, FALSE, expr->is_const ? expr->cval : 0,
            expr->is_const ? NULL : expr, NULL, FC_RP);

    return append_chain_type(chain, array);
}

static struct list type_pool = LIST_INIT(type_pool);
typedef struct
{
  type_t data;
  struct list link;
} type_pool_node_t;

type_t *alloc_type(void)
{
  type_pool_node_t *node = xmalloc(sizeof *node);
  list_add_tail(&type_pool, &node->link);
  return &node->data;
}

void set_all_tfswrite(int val)
{
  type_pool_node_t *node;
  LIST_FOR_EACH_ENTRY(node, &type_pool, type_pool_node_t, link)
    node->data.tfswrite = val;
}

void clear_all_offsets(void)
{
  type_pool_node_t *node;
  LIST_FOR_EACH_ENTRY(node, &type_pool, type_pool_node_t, link)
    node->data.typestring_offset = node->data.ptrdesc = 0;
}

static void type_function_add_head_arg(type_t *type, var_t *arg)
{
    if (!type->details.function->args)
    {
        type->details.function->args = xmalloc( sizeof(*type->details.function->args) );
        list_init( type->details.function->args );
    }
    list_add_head( type->details.function->args, &arg->entry );
}

static int is_allowed_range_type(const type_t *type)
{
    switch (type_get_type(type))
    {
    case TYPE_ENUM:
        return TRUE;
    case TYPE_BASIC:
        switch (type_basic_get_type(type))
        {
        case TYPE_BASIC_INT8:
        case TYPE_BASIC_INT16:
        case TYPE_BASIC_INT32:
        case TYPE_BASIC_INT64:
        case TYPE_BASIC_INT:
        case TYPE_BASIC_INT3264:
        case TYPE_BASIC_LONG:
        case TYPE_BASIC_BYTE:
        case TYPE_BASIC_CHAR:
        case TYPE_BASIC_WCHAR:
        case TYPE_BASIC_HYPER:
            return TRUE;
        case TYPE_BASIC_FLOAT:
        case TYPE_BASIC_DOUBLE:
        case TYPE_BASIC_ERROR_STATUS_T:
        case TYPE_BASIC_HANDLE:
            return FALSE;
        }
        return FALSE;
    default:
        return FALSE;
    }
}

static type_t *get_array_or_ptr_ref(type_t *type)
{
    if (is_ptr(type))
        return type_pointer_get_ref(type);
    else if (is_array(type))
        return type_array_get_element(type);
    return NULL;
}

static type_t *append_chain_type(type_t *chain, type_t *type)
{
    type_t *chain_type;

    if (!chain)
        return type;
    for (chain_type = chain; get_array_or_ptr_ref(chain_type); chain_type = get_array_or_ptr_ref(chain_type))
        ;

    if (is_ptr(chain_type))
        chain_type->details.pointer.ref = type;
    else if (is_array(chain_type))
        chain_type->details.array.elem = type;
    else
        assert(0);

    return chain;
}

static warning_list_t *append_warning(warning_list_t *list, int num)
{
    warning_t *entry;

    if(!list)
    {
        list = xmalloc( sizeof(*list) );
        list_init( list );
    }
    entry = xmalloc( sizeof(*entry) );
    entry->num = num;
    list_add_tail( list, &entry->entry );
    return list;
}

static var_t *declare_var(attr_list_t *attrs, decl_spec_t *decl_spec, const declarator_t *decl,
                       int top)
{
  var_t *v = decl->var;
  expr_list_t *sizes = get_attrp(attrs, ATTR_SIZEIS);
  expr_list_t *lengs = get_attrp(attrs, ATTR_LENGTHIS);
  expr_t *dim;
  type_t **ptype;
  type_t *func_type = decl ? decl->func_type : NULL;
  type_t *type = decl_spec->type;

  if (is_attr(type->attrs, ATTR_INLINE))
  {
    if (!func_type)
      error_loc("inline attribute applied to non-function type\n");
    else
    {
      type_t *t;
      /* move inline attribute from return type node to function node */
      for (t = func_type; is_ptr(t); t = type_pointer_get_ref(t))
        ;
      t->attrs = move_attr(t->attrs, type->attrs, ATTR_INLINE);
    }
  }

  /* add type onto the end of the pointers in pident->type */
  v->type = append_chain_type(decl ? decl->type : NULL, type);
  v->stgclass = decl_spec->stgclass;
  v->attrs = attrs;

  /* check for pointer attribute being applied to non-pointer, non-array
   * type */
  if (!is_array(v->type))
  {
    int ptr_attr = get_attrv(v->attrs, ATTR_POINTERTYPE);
    const type_t *ptr = NULL;
    /* pointer attributes on the left side of the type belong to the function
     * pointer, if one is being declared */
    type_t **pt = func_type ? &func_type : &v->type;
    for (ptr = *pt; ptr && !ptr_attr; )
    {
      ptr_attr = get_attrv(ptr->attrs, ATTR_POINTERTYPE);
      if (!ptr_attr && type_is_alias(ptr))
        ptr = type_alias_get_aliasee(ptr);
      else
        break;
    }
    if (is_ptr(ptr))
    {
      if (ptr_attr && ptr_attr != FC_UP &&
          type_get_type(type_pointer_get_ref(ptr)) == TYPE_INTERFACE)
          warning_loc_info(&v->loc_info,
                           "%s: pointer attribute applied to interface "
                           "pointer type has no effect\n", v->name);
      if (!ptr_attr && top && (*pt)->details.pointer.def_fc != FC_RP)
      {
        /* FIXME: this is a horrible hack to cope with the issue that we
         * store an offset to the typeformat string in the type object, but
         * two typeformat strings may be written depending on whether the
         * pointer is a toplevel parameter or not */
        *pt = duptype(*pt, 1);
      }
    }
    else if (ptr_attr)
       error_loc("%s: pointer attribute applied to non-pointer type\n", v->name);
  }

  if (is_attr(v->attrs, ATTR_STRING))
  {
    type_t *t = type;

    if (!is_ptr(v->type) && !is_array(v->type))
      error_loc("'%s': [string] attribute applied to non-pointer, non-array type\n",
                v->name);

    for (;;)
    {
        if (is_ptr(t))
            t = type_pointer_get_ref(t);
        else if (is_array(t))
            t = type_array_get_element(t);
        else
            break;
    }

    if (type_get_type(t) != TYPE_BASIC &&
        (get_basic_fc(t) != FC_CHAR &&
         get_basic_fc(t) != FC_BYTE &&
         get_basic_fc(t) != FC_WCHAR))
    {
      error_loc("'%s': [string] attribute is only valid on 'char', 'byte', or 'wchar_t' pointers and arrays\n",
                v->name);
    }
  }

  if (is_attr(v->attrs, ATTR_V1ENUM))
  {
    if (type_get_type_detect_alias(v->type) != TYPE_ENUM)
      error_loc("'%s': [v1_enum] attribute applied to non-enum type\n", v->name);
  }

  if (is_attr(v->attrs, ATTR_RANGE) && !is_allowed_range_type(v->type))
    error_loc("'%s': [range] attribute applied to non-integer type\n",
              v->name);

  ptype = &v->type;
  if (sizes) LIST_FOR_EACH_ENTRY(dim, sizes, expr_t, entry)
  {
    if (dim->type != EXPR_VOID)
    {
      if (is_array(*ptype))
      {
        if (!type_array_get_conformance(*ptype) ||
            type_array_get_conformance(*ptype)->type != EXPR_VOID)
          error_loc("%s: cannot specify size_is for an already sized array\n", v->name);
        else
          *ptype = type_new_array((*ptype)->name,
                                  type_array_get_element(*ptype), FALSE,
                                  0, dim, NULL, 0);
      }
      else if (is_ptr(*ptype))
        *ptype = type_new_array((*ptype)->name, type_pointer_get_ref(*ptype), TRUE,
                                0, dim, NULL, pointer_default);
      else
        error_loc("%s: size_is attribute applied to illegal type\n", v->name);
    }

    if (is_ptr(*ptype))
      ptype = &(*ptype)->details.pointer.ref;
    else if (is_array(*ptype))
      ptype = &(*ptype)->details.array.elem;
    else
      error_loc("%s: too many expressions in size_is attribute\n", v->name);
  }

  ptype = &v->type;
  if (lengs) LIST_FOR_EACH_ENTRY(dim, lengs, expr_t, entry)
  {
    if (dim->type != EXPR_VOID)
    {
      if (is_array(*ptype))
      {
        *ptype = type_new_array((*ptype)->name,
                                type_array_get_element(*ptype),
                                type_array_is_decl_as_ptr(*ptype),
                                type_array_get_dim(*ptype),
                                type_array_get_conformance(*ptype),
                                dim, type_array_get_ptr_default_fc(*ptype));
      }
      else
        error_loc("%s: length_is attribute applied to illegal type\n", v->name);
    }

    if (is_ptr(*ptype))
      ptype = &(*ptype)->details.pointer.ref;
    else if (is_array(*ptype))
      ptype = &(*ptype)->details.array.elem;
    else
      error_loc("%s: too many expressions in length_is attribute\n", v->name);
  }

  /* v->type is currently pointing to the type on the left-side of the
   * declaration, so we need to fix this up so that it is the return type of the
   * function and make v->type point to the function side of the declaration */
  if (func_type)
  {
    type_t *ft, *t;
    type_t *return_type = v->type;
    v->type = func_type;
    for (ft = v->type; is_ptr(ft); ft = type_pointer_get_ref(ft))
      ;
    assert(type_get_type_detect_alias(ft) == TYPE_FUNCTION);
    ft->details.function->retval = make_var(xstrdup("_RetVal"));
    ft->details.function->retval->type = return_type;
    /* move calling convention attribute, if present, from pointer nodes to
     * function node */
    for (t = v->type; is_ptr(t); t = type_pointer_get_ref(t))
      ft->attrs = move_attr(ft->attrs, t->attrs, ATTR_CALLCONV);
  }
  else
  {
    type_t *t;
    for (t = v->type; is_ptr(t); t = type_pointer_get_ref(t))
      if (is_attr(t->attrs, ATTR_CALLCONV))
        error_loc("calling convention applied to non-function-pointer type\n");
  }

  if (decl->bits)
    v->type = type_new_bitfield(v->type, decl->bits);

  return v;
}

static var_list_t *set_var_types(attr_list_t *attrs, decl_spec_t *decl_spec, declarator_list_t *decls)
{
  declarator_t *decl, *next;
  var_list_t *var_list = NULL;

  LIST_FOR_EACH_ENTRY_SAFE( decl, next, decls, declarator_t, entry )
  {
    var_t *var = declare_var(attrs, decl_spec, decl, 0);
    var_list = append_var(var_list, var);
    free(decl);
  }
  free(decl_spec);
  return var_list;
}

static ifref_list_t *append_ifref(ifref_list_t *list, ifref_t *iface)
{
    if (!iface) return list;
    if (!list)
    {
        list = xmalloc( sizeof(*list) );
        list_init( list );
    }
    list_add_tail( list, &iface->entry );
    return list;
}

static ifref_t *make_ifref(type_t *iface)
{
  ifref_t *l = xmalloc(sizeof(ifref_t));
  l->iface = iface;
  l->attrs = NULL;
  return l;
}

var_list_t *append_var(var_list_t *list, var_t *var)
{
    if (!var) return list;
    if (!list)
    {
        list = xmalloc( sizeof(*list) );
        list_init( list );
    }
    list_add_tail( list, &var->entry );
    return list;
}

static var_list_t *append_var_list(var_list_t *list, var_list_t *vars)
{
    if (!vars) return list;
    if (!list)
    {
        list = xmalloc( sizeof(*list) );
        list_init( list );
    }
    list_move_tail( list, vars );
    return list;
}

var_t *make_var(char *name)
{
  var_t *v = xmalloc(sizeof(var_t));
  v->name = name;
  v->type = NULL;
  v->attrs = NULL;
  v->eval = NULL;
  v->stgclass = STG_NONE;
  init_loc_info(&v->loc_info);
  return v;
}

static var_t *copy_var(var_t *src, char *name, map_attrs_filter_t attr_filter)
{
  var_t *v = xmalloc(sizeof(var_t));
  v->name = name;
  v->type = src->type;
  v->attrs = map_attrs(src->attrs, attr_filter);
  v->eval = src->eval;
  v->stgclass = src->stgclass;
  v->loc_info = src->loc_info;
  return v;
}

static declarator_list_t *append_declarator(declarator_list_t *list, declarator_t *d)
{
  if (!d) return list;
  if (!list) {
    list = xmalloc(sizeof(*list));
    list_init(list);
  }
  list_add_tail(list, &d->entry);
  return list;
}

static declarator_t *make_declarator(var_t *var)
{
  declarator_t *d = xmalloc(sizeof(*d));
  d->var = var ? var : make_var(NULL);
  d->type = NULL;
  d->func_type = NULL;
  d->bits = NULL;
  return d;
}

static type_t *make_safearray(type_t *type)
{
  return type_new_array(NULL, type_new_alias(type, "SAFEARRAY"), TRUE, 0,
                        NULL, NULL, FC_RP);
}

static typelib_t *make_library(const char *name, const attr_list_t *attrs)
{
    typelib_t *typelib = xmalloc(sizeof(*typelib));
    typelib->name = xstrdup(name);
    typelib->attrs = attrs;
    list_init( &typelib->importlibs );
    return typelib;
}

static int hash_ident(const char *name)
{
  const char *p = name;
  int sum = 0;
  /* a simple sum hash is probably good enough */
  while (*p) {
    sum += *p;
    p++;
  }
  return sum & (HASHMAX-1);
}

/***** type repository *****/

static struct namespace *find_sub_namespace(struct namespace *namespace, const char *name)
{
  struct namespace *cur;

  LIST_FOR_EACH_ENTRY(cur, &namespace->children, struct namespace, entry) {
    if(!strcmp(cur->name, name))
      return cur;
  }

  return NULL;
}

static void push_namespace(const char *name)
{
  struct namespace *namespace;

  namespace = find_sub_namespace(current_namespace, name);
  if(!namespace) {
    namespace = xmalloc(sizeof(*namespace));
    namespace->name = xstrdup(name);
    namespace->parent = current_namespace;
    list_add_tail(&current_namespace->children, &namespace->entry);
    list_init(&namespace->children);
    memset(namespace->type_hash, 0, sizeof(namespace->type_hash));
  }

  current_namespace = namespace;
}

static void pop_namespace(const char *name)
{
  assert(!strcmp(current_namespace->name, name) && current_namespace->parent);
  current_namespace = current_namespace->parent;
}

struct rtype {
  const char *name;
  type_t *type;
  int t;
  struct rtype *next;
};

type_t *reg_type(type_t *type, const char *name, struct namespace *namespace, int t)
{
  struct rtype *nt;
  int hash;
  if (!name) {
    error_loc("registering named type without name\n");
    return type;
  }
  if (!namespace)
    namespace = &global_namespace;
  hash = hash_ident(name);
  nt = xmalloc(sizeof(struct rtype));
  nt->name = name;
  if (is_global_namespace(namespace))
    type->c_name = name;
  else
    type->c_name = format_namespace(namespace, "__x_", "_C", name);
  nt->type = type;
  nt->t = t;
  nt->next = namespace->type_hash[hash];
  namespace->type_hash[hash] = nt;
  if ((t == tsSTRUCT || t == tsUNION))
    fix_incomplete_types(type);
  return type;
}

static int is_incomplete(const type_t *t)
{
  return !t->defined &&
    (type_get_type_detect_alias(t) == TYPE_STRUCT ||
     type_get_type_detect_alias(t) == TYPE_UNION ||
     type_get_type_detect_alias(t) == TYPE_ENCAPSULATED_UNION);
}

void add_incomplete(type_t *t)
{
  struct typenode *tn = xmalloc(sizeof *tn);
  tn->type = t;
  list_add_tail(&incomplete_types, &tn->entry);
}

static void fix_type(type_t *t)
{
  if (type_is_alias(t) && is_incomplete(t)) {
    type_t *ot = type_alias_get_aliasee(t);
    fix_type(ot);
    if (type_get_type_detect_alias(ot) == TYPE_STRUCT ||
        type_get_type_detect_alias(ot) == TYPE_UNION ||
        type_get_type_detect_alias(ot) == TYPE_ENCAPSULATED_UNION)
      t->details.structure = ot->details.structure;
    t->defined = ot->defined;
  }
}

static void fix_incomplete(void)
{
  struct typenode *tn, *next;

  LIST_FOR_EACH_ENTRY_SAFE(tn, next, &incomplete_types, struct typenode, entry) {
    fix_type(tn->type);
    list_remove(&tn->entry);
    free(tn);
  }
}

static void fix_incomplete_types(type_t *complete_type)
{
  struct typenode *tn, *next;

  LIST_FOR_EACH_ENTRY_SAFE(tn, next, &incomplete_types, struct typenode, entry)
  {
    if (type_is_equal(complete_type, tn->type))
    {
      tn->type->details.structure = complete_type->details.structure;
      list_remove(&tn->entry);
      free(tn);
    }
  }
}

static type_t *reg_typedefs(decl_spec_t *decl_spec, declarator_list_t *decls, attr_list_t *attrs)
{
  const declarator_t *decl;
  type_t *type = decl_spec->type;

  if (is_attr(attrs, ATTR_UUID) && !is_attr(attrs, ATTR_PUBLIC))
    attrs = append_attr( attrs, make_attr(ATTR_PUBLIC) );

  /* We must generate names for tagless enum, struct or union.
     Typedef-ing a tagless enum, struct or union means we want the typedef
     to be included in a library hence the public attribute.  */
  if (type_get_type_detect_alias(type) == TYPE_ENUM ||
      type_get_type_detect_alias(type) == TYPE_STRUCT ||
      type_get_type_detect_alias(type) == TYPE_UNION ||
      type_get_type_detect_alias(type) == TYPE_ENCAPSULATED_UNION)
  {
    if (!type->name)
      type->name = gen_name();

    /* replace existing attributes when generating a typelib */
    if (do_typelib)
        type->attrs = attrs;
  }

  LIST_FOR_EACH_ENTRY( decl, decls, const declarator_t, entry )
  {

    if (decl->var->name) {
      type_t *cur;
      var_t *name;

      cur = find_type(decl->var->name, current_namespace, 0);

      /*
       * MIDL allows shadowing types that are declared in imported files.
       * We don't throw an error in this case and instead add a new type
       * (which is earlier on the list in hash table, so it will be used
       * instead of shadowed type).
       *
       * FIXME: We may consider string separated type tables for each input
       *        for cleaner solution.
       */
      if (cur && input_name == cur->loc_info.input_name)
          error_loc("%s: redefinition error; original definition was at %s:%d\n",
                    cur->name, cur->loc_info.input_name,
                    cur->loc_info.line_number);

      name = declare_var(attrs, decl_spec, decl, 0);
      cur = type_new_alias(name->type, name->name);
      cur->attrs = attrs;

      if (is_incomplete(cur))
        add_incomplete(cur);
      reg_type(cur, cur->name, current_namespace, 0);
    }
  }
  return type;
}

type_t *find_type(const char *name, struct namespace *namespace, int t)
{
  struct rtype *cur;

  if(namespace && namespace != &global_namespace) {
    for(cur = namespace->type_hash[hash_ident(name)]; cur; cur = cur->next) {
      if(cur->t == t && !strcmp(cur->name, name))
        return cur->type;
    }
  }
  for(cur = global_namespace.type_hash[hash_ident(name)]; cur; cur = cur->next) {
    if(cur->t == t && !strcmp(cur->name, name))
      return cur->type;
  }
  return NULL;
}

static type_t *find_type_or_error(const char *name, int t)
{
  type_t *type = find_type(name, NULL, t);
  if (!type) {
    error_loc("type '%s' not found\n", name);
    return NULL;
  }
  return type;
}

static type_t *find_type_or_error2(char *name, int t)
{
  type_t *tp = find_type_or_error(name, t);
  free(name);
  return tp;
}

int is_type(const char *name)
{
  return find_type(name, current_namespace, 0) != NULL;
}

type_t *get_type(enum type_type type, char *name, struct namespace *namespace, int t)
{
  type_t *tp;
  if (!namespace)
    namespace = &global_namespace;
  if (name) {
    tp = find_type(name, namespace, t);
    if (tp) {
      free(name);
      return tp;
    }
  }
  tp = make_type(type);
  tp->name = name;
  tp->namespace = namespace;
  if (!name) return tp;
  return reg_type(tp, name, namespace, t);
}

/***** constant repository *****/

struct rconst {
  char *name;
  var_t *var;
  struct rconst *next;
};

struct rconst *const_hash[HASHMAX];

static var_t *reg_const(var_t *var)
{
  struct rconst *nc;
  int hash;
  if (!var->name) {
    error_loc("registering constant without name\n");
    return var;
  }
  hash = hash_ident(var->name);
  nc = xmalloc(sizeof(struct rconst));
  nc->name = var->name;
  nc->var = var;
  nc->next = const_hash[hash];
  const_hash[hash] = nc;
  return var;
}

var_t *find_const(const char *name, int f)
{
  struct rconst *cur = const_hash[hash_ident(name)];
  while (cur && strcmp(cur->name, name))
    cur = cur->next;
  if (!cur) {
    if (f) error_loc("constant '%s' not found\n", name);
    return NULL;
  }
  return cur->var;
}

static char *gen_name(void)
{
  static const char format[] = "__WIDL_%s_generated_name_%08lX";
  static unsigned long n = 0;
  static const char *file_id;
  static size_t size;
  char *name;

  if (! file_id)
  {
    char *dst = dup_basename(input_idl_name, ".idl");
    file_id = dst;

    for (; *dst; ++dst)
      if (! isalnum((unsigned char) *dst))
        *dst = '_';

    size = sizeof format - 7 + strlen(file_id) + 8;
  }

  name = xmalloc(size);
  sprintf(name, format, file_id, n++);
  return name;
}

struct allowed_attr
{
    unsigned int dce_compatible : 1;
    unsigned int acf : 1;
    unsigned int on_interface : 1;
    unsigned int on_function : 1;
    unsigned int on_arg : 1;
    unsigned int on_type : 1;
    unsigned int on_enum : 1;
    unsigned int on_struct : 2;
    unsigned int on_union : 1;
    unsigned int on_field : 1;
    unsigned int on_library : 1;
    unsigned int on_dispinterface : 1;
    unsigned int on_module : 1;
    unsigned int on_coclass : 1;
    const char *display_name;
};

struct allowed_attr allowed_attr[] =
{
    /* attr                        { D ACF I Fn ARG T En St Un Fi  L  DI M  C  <display name> } */
    /* ATTR_AGGREGATABLE */        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "aggregatable" },
    /* ATTR_ANNOTATION */          { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "annotation" },
    /* ATTR_APPOBJECT */           { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "appobject" },
    /* ATTR_ASYNC */               { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "async" },
    /* ATTR_ASYNCUUID */           { 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, "async_uuid" },
    /* ATTR_AUTO_HANDLE */         { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "auto_handle" },
    /* ATTR_BINDABLE */            { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "bindable" },
    /* ATTR_BROADCAST */           { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "broadcast" },
    /* ATTR_CALLAS */              { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "call_as" },
    /* ATTR_CALLCONV */            { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL },
    /* ATTR_CASE */                { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, "case" },
    /* ATTR_CODE */                { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "code" },
    /* ATTR_COMMSTATUS */          { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "comm_status" },
    /* ATTR_CONST */               { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "const" },
    /* ATTR_CONTEXTHANDLE */       { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "context_handle" },
    /* ATTR_CONTROL */             { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, "control" },
    /* ATTR_DECODE */              { 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "decode" },
    /* ATTR_DEFAULT */             { 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, "default" },
    /* ATTR_DEFAULTBIND */         { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "defaultbind" },
    /* ATTR_DEFAULTCOLLELEM */     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "defaultcollelem" },
    /* ATTR_DEFAULTVALUE */        { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "defaultvalue" },
    /* ATTR_DEFAULTVTABLE */       { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "defaultvtable" },
 /* ATTR_DISABLECONSISTENCYCHECK */{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "disable_consistency_check" },
    /* ATTR_DISPINTERFACE */       { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL },
    /* ATTR_DISPLAYBIND */         { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "displaybind" },
    /* ATTR_DLLNAME */             { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, "dllname" },
    /* ATTR_DUAL */                { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "dual" },
    /* ATTR_ENABLEALLOCATE */      { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "enable_allocate" },
    /* ATTR_ENCODE */              { 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "encode" },
    /* ATTR_ENDPOINT */            { 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "endpoint" },
    /* ATTR_ENTRY */               { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "entry" },
    /* ATTR_EXPLICIT_HANDLE */     { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "explicit_handle" },
    /* ATTR_FAULTSTATUS */         { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "fault_status" },
    /* ATTR_FORCEALLOCATE */       { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "force_allocate" },
    /* ATTR_HANDLE */              { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "handle" },
    /* ATTR_HELPCONTEXT */         { 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, "helpcontext" },
    /* ATTR_HELPFILE */            { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, "helpfile" },
    /* ATTR_HELPSTRING */          { 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, "helpstring" },
    /* ATTR_HELPSTRINGCONTEXT */   { 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, "helpstringcontext" },
    /* ATTR_HELPSTRINGDLL */       { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, "helpstringdll" },
    /* ATTR_HIDDEN */              { 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, "hidden" },
    /* ATTR_ID */                  { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, "id" },
    /* ATTR_IDEMPOTENT */          { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "idempotent" },
    /* ATTR_IGNORE */              { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, "ignore" },
    /* ATTR_IIDIS */               { 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, "iid_is" },
    /* ATTR_IMMEDIATEBIND */       { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "immediatebind" },
    /* ATTR_IMPLICIT_HANDLE */     { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "implicit_handle" },
    /* ATTR_IN */                  { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "in" },
    /* ATTR_INLINE */              { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "inline" },
    /* ATTR_INPUTSYNC */           { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "inputsync" },
    /* ATTR_LENGTHIS */            { 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, "length_is" },
    /* ATTR_LIBLCID */             { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, "lcid" },
    /* ATTR_LICENSED */            { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "licensed" },
    /* ATTR_LOCAL */               { 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "local" },
    /* ATTR_MAYBE */               { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "maybe" },
    /* ATTR_MESSAGE */             { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "message" },
    /* ATTR_NOCODE */              { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "nocode" },
    /* ATTR_NONBROWSABLE */        { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "nonbrowsable" },
    /* ATTR_NONCREATABLE */        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "noncreatable" },
    /* ATTR_NONEXTENSIBLE */       { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "nonextensible" },
    /* ATTR_NOTIFY */              { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "notify" },
    /* ATTR_NOTIFYFLAG */          { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "notify_flag" },
    /* ATTR_OBJECT */              { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "object" },
    /* ATTR_ODL */                 { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "odl" },
    /* ATTR_OLEAUTOMATION */       { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "oleautomation" },
    /* ATTR_OPTIMIZE */            { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "optimize" },
    /* ATTR_OPTIONAL */            { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "optional" },
    /* ATTR_OUT */                 { 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "out" },
    /* ATTR_PARAMLCID */           { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "lcid" },
    /* ATTR_PARTIALIGNORE */       { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "partial_ignore" },
    /* ATTR_POINTERDEFAULT */      { 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "pointer_default" },
    /* ATTR_POINTERTYPE */         { 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, "ref, unique or ptr" },
    /* ATTR_PROGID */              { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "progid" },
    /* ATTR_PROPGET */             { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "propget" },
    /* ATTR_PROPPUT */             { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "propput" },
    /* ATTR_PROPPUTREF */          { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "propputref" },
    /* ATTR_PROXY */               { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "proxy" },
    /* ATTR_PUBLIC */              { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "public" },
    /* ATTR_RANGE */               { 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, "range" },
    /* ATTR_READONLY */            { 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, "readonly" },
    /* ATTR_REPRESENTAS */         { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "represent_as" },
    /* ATTR_REQUESTEDIT */         { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "requestedit" },
    /* ATTR_RESTRICTED */          { 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, "restricted" },
    /* ATTR_RETVAL */              { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "retval" },
    /* ATTR_SIZEIS */              { 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, "size_is" },
    /* ATTR_SOURCE */              { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, "source" },
    /* ATTR_STRICTCONTEXTHANDLE */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "strict_context_handle" },
    /* ATTR_STRING */              { 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, "string" },
    /* ATTR_SWITCHIS */            { 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, "switch_is" },
    /* ATTR_SWITCHTYPE */          { 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, "switch_type" },
    /* ATTR_THREADING */           { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "threading" },
    /* ATTR_TRANSMITAS */          { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "transmit_as" },
    /* ATTR_UIDEFAULT */           { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "uidefault" },
    /* ATTR_USESGETLASTERROR */    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "usesgetlasterror" },
    /* ATTR_USERMARSHAL */         { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "user_marshal" },
    /* ATTR_UUID */                { 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, "uuid" },
    /* ATTR_V1ENUM */              { 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, "v1_enum" },
    /* ATTR_VARARG */              { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "vararg" },
    /* ATTR_VERSION */             { 1, 0, 1, 0, 0, 1, 1, 2, 0, 0, 1, 0, 0, 1, "version" },
    /* ATTR_VIPROGID */            { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "vi_progid" },
    /* ATTR_WIREMARSHAL */         { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "wire_marshal" },
};

const char *get_attr_display_name(enum attr_type type)
{
    return allowed_attr[type].display_name;
}

static attr_list_t *check_iface_attrs(const char *name, attr_list_t *attrs)
{
  const attr_t *attr;
  if (!attrs) return attrs;
  LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
  {
    if (!allowed_attr[attr->type].on_interface)
      error_loc("inapplicable attribute %s for interface %s\n",
                allowed_attr[attr->type].display_name, name);
    if (attr->type == ATTR_IMPLICIT_HANDLE)
    {
        const var_t *var = attr->u.pval;
        if (type_get_type( var->type) == TYPE_BASIC &&
            type_basic_get_type( var->type ) == TYPE_BASIC_HANDLE)
            continue;
        if (is_aliaschain_attr( var->type, ATTR_HANDLE ))
            continue;
      error_loc("attribute %s requires a handle type in interface %s\n",
                allowed_attr[attr->type].display_name, name);
    }
  }
  return attrs;
}

static attr_list_t *check_function_attrs(const char *name, attr_list_t *attrs)
{
  const attr_t *attr;
  if (!attrs) return attrs;
  LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
  {
    if (!allowed_attr[attr->type].on_function)
      error_loc("inapplicable attribute %s for function %s\n",
                allowed_attr[attr->type].display_name, name);
  }
  return attrs;
}

static void check_arg_attrs(const var_t *arg)
{
  const attr_t *attr;

  if (arg->attrs)
  {
    LIST_FOR_EACH_ENTRY(attr, arg->attrs, const attr_t, entry)
    {
      if (!allowed_attr[attr->type].on_arg)
        error_loc("inapplicable attribute %s for argument %s\n",
                  allowed_attr[attr->type].display_name, arg->name);
    }
  }
}

static attr_list_t *check_typedef_attrs(attr_list_t *attrs)
{
  const attr_t *attr;
  if (!attrs) return attrs;
  LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
  {
    if (!allowed_attr[attr->type].on_type)
      error_loc("inapplicable attribute %s for typedef\n",
                allowed_attr[attr->type].display_name);
  }
  return attrs;
}

static attr_list_t *check_enum_attrs(attr_list_t *attrs)
{
  const attr_t *attr;
  if (!attrs) return attrs;
  LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
  {
    if (!allowed_attr[attr->type].on_enum)
      error_loc("inapplicable attribute %s for enum\n",
                allowed_attr[attr->type].display_name);
  }
  return attrs;
}

static attr_list_t *check_struct_attrs(attr_list_t *attrs)
{
  int mask = winrt_mode ? 3 : 1;
  const attr_t *attr;
  if (!attrs) return attrs;
  LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
  {
    if (!(allowed_attr[attr->type].on_struct & mask))
      error_loc("inapplicable attribute %s for struct\n",
                allowed_attr[attr->type].display_name);
  }
  return attrs;
}

static attr_list_t *check_union_attrs(attr_list_t *attrs)
{
  const attr_t *attr;
  if (!attrs) return attrs;
  LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
  {
    if (!allowed_attr[attr->type].on_union)
      error_loc("inapplicable attribute %s for union\n",
                allowed_attr[attr->type].display_name);
  }
  return attrs;
}

static attr_list_t *check_field_attrs(const char *name, attr_list_t *attrs)
{
  const attr_t *attr;
  if (!attrs) return attrs;
  LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
  {
    if (!allowed_attr[attr->type].on_field)
      error_loc("inapplicable attribute %s for field %s\n",
                allowed_attr[attr->type].display_name, name);
  }
  return attrs;
}

static attr_list_t *check_library_attrs(const char *name, attr_list_t *attrs)
{
  const attr_t *attr;
  if (!attrs) return attrs;
  LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
  {
    if (!allowed_attr[attr->type].on_library)
      error_loc("inapplicable attribute %s for library %s\n",
                allowed_attr[attr->type].display_name, name);
  }
  return attrs;
}

static attr_list_t *check_dispiface_attrs(const char *name, attr_list_t *attrs)
{
  const attr_t *attr;
  if (!attrs) return attrs;
  LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
  {
    if (!allowed_attr[attr->type].on_dispinterface)
      error_loc("inapplicable attribute %s for dispinterface %s\n",
                allowed_attr[attr->type].display_name, name);
  }
  return attrs;
}

static attr_list_t *check_module_attrs(const char *name, attr_list_t *attrs)
{
  const attr_t *attr;
  if (!attrs) return attrs;
  LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
  {
    if (!allowed_attr[attr->type].on_module)
      error_loc("inapplicable attribute %s for module %s\n",
                allowed_attr[attr->type].display_name, name);
  }
  return attrs;
}

static attr_list_t *check_coclass_attrs(const char *name, attr_list_t *attrs)
{
  const attr_t *attr;
  if (!attrs) return attrs;
  LIST_FOR_EACH_ENTRY(attr, attrs, const attr_t, entry)
  {
    if (!allowed_attr[attr->type].on_coclass)
      error_loc("inapplicable attribute %s for coclass %s\n",
                allowed_attr[attr->type].display_name, name);
  }
  return attrs;
}

static int is_allowed_conf_type(const type_t *type)
{
    switch (type_get_type(type))
    {
    case TYPE_ENUM:
        return TRUE;
    case TYPE_BASIC:
        switch (type_basic_get_type(type))
        {
        case TYPE_BASIC_INT8:
        case TYPE_BASIC_INT16:
        case TYPE_BASIC_INT32:
        case TYPE_BASIC_INT64:
        case TYPE_BASIC_INT:
        case TYPE_BASIC_LONG:
        case TYPE_BASIC_CHAR:
        case TYPE_BASIC_HYPER:
        case TYPE_BASIC_BYTE:
        case TYPE_BASIC_WCHAR:
            return TRUE;
        default:
            return FALSE;
        }
    case TYPE_ALIAS:
        /* shouldn't get here because of type_get_type call above */
        assert(0);
        /* fall through */
    case TYPE_STRUCT:
    case TYPE_UNION:
    case TYPE_ENCAPSULATED_UNION:
    case TYPE_ARRAY:
    case TYPE_POINTER:
    case TYPE_VOID:
    case TYPE_MODULE:
    case TYPE_COCLASS:
    case TYPE_FUNCTION:
    case TYPE_INTERFACE:
    case TYPE_BITFIELD:
        return FALSE;
    }
    return FALSE;
}

static int is_ptr_guid_type(const type_t *type)
{
    /* first, make sure it is a pointer to something */
    if (!is_ptr(type)) return FALSE;

    /* second, make sure it is a pointer to something of size sizeof(GUID),
     * i.e. 16 bytes */
    return (type_memsize(type_pointer_get_ref(type)) == 16);
}

static void check_conformance_expr_list(const char *attr_name, const var_t *arg, const type_t *container_type, expr_list_t *expr_list)
{
    expr_t *dim;
    struct expr_loc expr_loc;
    expr_loc.v = arg;
    expr_loc.attr = attr_name;
    if (expr_list) LIST_FOR_EACH_ENTRY(dim, expr_list, expr_t, entry)
    {
        if (dim->type != EXPR_VOID)
        {
            const type_t *expr_type = expr_resolve_type(&expr_loc, container_type, dim);
            if (!is_allowed_conf_type(expr_type))
                error_loc_info(&arg->loc_info, "expression must resolve to integral type <= 32bits for attribute %s\n",
                               attr_name);
        }
    }
}

static void check_remoting_fields(const var_t *var, type_t *type);

/* checks that properties common to fields and arguments are consistent */
static void check_field_common(const type_t *container_type,
                               const char *container_name, const var_t *arg)
{
    type_t *type = arg->type;
    int more_to_do;
    const char *container_type_name;
    const char *var_type;

    switch (type_get_type(container_type))
    {
    case TYPE_STRUCT:
        container_type_name = "struct";
        var_type = "field";
        break;
    case TYPE_UNION:
        container_type_name = "union";
        var_type = "arm";
        break;
    case TYPE_ENCAPSULATED_UNION:
        container_type_name = "encapsulated union";
        var_type = "arm";
        break;
    case TYPE_FUNCTION:
        container_type_name = "function";
        var_type = "parameter";
        break;
    default:
        /* should be no other container types */
        assert(0);
        return;
    }

    if (is_attr(arg->attrs, ATTR_LENGTHIS) &&
        (is_attr(arg->attrs, ATTR_STRING) || is_aliaschain_attr(arg->type, ATTR_STRING)))
        error_loc_info(&arg->loc_info,
                       "string and length_is specified for argument %s are mutually exclusive attributes\n",
                       arg->name);

    if (is_attr(arg->attrs, ATTR_SIZEIS))
    {
        expr_list_t *size_is_exprs = get_attrp(arg->attrs, ATTR_SIZEIS);
        check_conformance_expr_list("size_is", arg, container_type, size_is_exprs);
    }
    if (is_attr(arg->attrs, ATTR_LENGTHIS))
    {
        expr_list_t *length_is_exprs = get_attrp(arg->attrs, ATTR_LENGTHIS);
        check_conformance_expr_list("length_is", arg, container_type, length_is_exprs);
    }
    if (is_attr(arg->attrs, ATTR_IIDIS))
    {
        struct expr_loc expr_loc;
        expr_t *expr = get_attrp(arg->attrs, ATTR_IIDIS);
        if (expr->type != EXPR_VOID)
        {
            const type_t *expr_type;
            expr_loc.v = arg;
            expr_loc.attr = "iid_is";
            expr_type = expr_resolve_type(&expr_loc, container_type, expr);
            if (!expr_type || !is_ptr_guid_type(expr_type))
                error_loc_info(&arg->loc_info, "expression must resolve to pointer to GUID type for attribute iid_is\n");
        }
    }
    if (is_attr(arg->attrs, ATTR_SWITCHIS))
    {
        struct expr_loc expr_loc;
        expr_t *expr = get_attrp(arg->attrs, ATTR_SWITCHIS);
        if (expr->type != EXPR_VOID)
        {
            const type_t *expr_type;
            expr_loc.v = arg;
            expr_loc.attr = "switch_is";
            expr_type = expr_resolve_type(&expr_loc, container_type, expr);
            if (!expr_type || !is_allowed_conf_type(expr_type))
                error_loc_info(&arg->loc_info, "expression must resolve to integral type <= 32bits for attribute %s\n",
                               expr_loc.attr);
        }
    }

    do
    {
        more_to_do = FALSE;

        switch (typegen_detect_type(type, arg->attrs, TDT_IGNORE_STRINGS))
        {
        case TGT_STRUCT:
        case TGT_UNION:
            check_remoting_fields(arg, type);
            break;
        case TGT_INVALID:
        {
            const char *reason = "is invalid";
            switch (type_get_type(type))
            {
            case TYPE_VOID:
                reason = "cannot derive from void *";
                break;
            case TYPE_FUNCTION:
                reason = "cannot be a function pointer";
                break;
            case TYPE_BITFIELD:
                reason = "cannot be a bit-field";
                break;
            case TYPE_COCLASS:
                reason = "cannot be a class";
                break;
            case TYPE_INTERFACE:
                reason = "cannot be a non-pointer to an interface";
                break;
            case TYPE_MODULE:
                reason = "cannot be a module";
                break;
            default:
                break;
            }
            error_loc_info(&arg->loc_info, "%s \'%s\' of %s \'%s\' %s\n",
                           var_type, arg->name, container_type_name, container_name, reason);
            break;
        }
        case TGT_CTXT_HANDLE:
        case TGT_CTXT_HANDLE_POINTER:
            if (type_get_type(container_type) != TYPE_FUNCTION)
                error_loc_info(&arg->loc_info,
                               "%s \'%s\' of %s \'%s\' cannot be a context handle\n",
                               var_type, arg->name, container_type_name,
                               container_name);
            break;
        case TGT_STRING:
        {
            const type_t *t = type;
            while (is_ptr(t))
                t = type_pointer_get_ref(t);
            if (is_aliaschain_attr(t, ATTR_RANGE))
                warning_loc_info(&arg->loc_info, "%s: range not verified for a string of ranged types\n", arg->name);
            break;
        }
        case TGT_POINTER:
            type = type_pointer_get_ref(type);
            more_to_do = TRUE;
            break;
        case TGT_ARRAY:
            type = type_array_get_element(type);
            more_to_do = TRUE;
            break;
        case TGT_USER_TYPE:
        case TGT_IFACE_POINTER:
        case TGT_BASIC:
        case TGT_ENUM:
        case TGT_RANGE:
            /* nothing to do */
            break;
        }
    } while (more_to_do);
}

static void check_remoting_fields(const var_t *var, type_t *type)
{
    const var_t *field;
    const var_list_t *fields = NULL;

    type = type_get_real_type(type);

    if (type->checked)
        return;

    type->checked = TRUE;

    if (type_get_type(type) == TYPE_STRUCT)
    {
        if (type_is_complete(type))
            fields = type_struct_get_fields(type);
        else
            error_loc_info(&var->loc_info, "undefined type declaration %s\n", type->name);
    }
    else if (type_get_type(type) == TYPE_UNION || type_get_type(type) == TYPE_ENCAPSULATED_UNION)
        fields = type_union_get_cases(type);

    if (fields) LIST_FOR_EACH_ENTRY( field, fields, const var_t, entry )
        if (field->type) check_field_common(type, type->name, field);
}

/* checks that arguments for a function make sense for marshalling and unmarshalling */
static void check_remoting_args(const var_t *func)
{
    const char *funcname = func->name;
    const var_t *arg;

    if (func->type->details.function->args) LIST_FOR_EACH_ENTRY( arg, func->type->details.function->args, const var_t, entry )
    {
        const type_t *type = arg->type;

        /* check that [out] parameters have enough pointer levels */
        if (is_attr(arg->attrs, ATTR_OUT))
        {
            switch (typegen_detect_type(type, arg->attrs, TDT_ALL_TYPES))
            {
            case TGT_BASIC:
            case TGT_ENUM:
            case TGT_RANGE:
            case TGT_STRUCT:
            case TGT_UNION:
            case TGT_CTXT_HANDLE:
            case TGT_USER_TYPE:
                error_loc_info(&arg->loc_info, "out parameter \'%s\' of function \'%s\' is not a pointer\n", arg->name, funcname);
                break;
            case TGT_IFACE_POINTER:
                error_loc_info(&arg->loc_info, "out interface pointer \'%s\' of function \'%s\' is not a double pointer\n", arg->name, funcname);
                break;
            case TGT_STRING:
                if (is_array(type))
                {
                    /* needs conformance or fixed dimension */
                    if (type_array_has_conformance(type) &&
                        type_array_get_conformance(type)->type != EXPR_VOID) break;
                    if (!type_array_has_conformance(type) && type_array_get_dim(type)) break;
                }
                if (is_attr( arg->attrs, ATTR_IN )) break;
                error_loc_info(&arg->loc_info, "out parameter \'%s\' of function \'%s\' cannot be an unsized string\n", arg->name, funcname);
                break;
            case TGT_INVALID:
                /* already error'd before we get here */
            case TGT_CTXT_HANDLE_POINTER:
            case TGT_POINTER:
            case TGT_ARRAY:
                /* OK */
                break;
            }
        }

        check_field_common(func->type, funcname, arg);
    }

    if (type_get_type(type_function_get_rettype(func->type)) != TYPE_VOID)
    {
        var_t var;
        var = *func;
        var.type = type_function_get_rettype(func->type);
        var.name = xstrdup("return value");
        check_field_common(func->type, funcname, &var);
        free(var.name);
    }
}

static void add_explicit_handle_if_necessary(const type_t *iface, var_t *func)
{
    unsigned char explicit_fc, implicit_fc;

    /* check for a defined binding handle */
    if (!get_func_handle_var( iface, func, &explicit_fc, &implicit_fc ) || !explicit_fc)
    {
        /* no explicit handle specified so add
         * "[in] handle_t IDL_handle" as the first parameter to the
         * function */
        var_t *idl_handle = make_var(xstrdup("IDL_handle"));
        idl_handle->attrs = append_attr(NULL, make_attr(ATTR_IN));
        idl_handle->type = find_type_or_error("handle_t", 0);
        type_function_add_head_arg(func->type, idl_handle);
    }
}

static void check_functions(const type_t *iface, int is_inside_library)
{
    const statement_t *stmt;
    if (is_attr(iface->attrs, ATTR_EXPLICIT_HANDLE))
    {
        STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) )
        {
            var_t *func = stmt->u.var;
            add_explicit_handle_if_necessary(iface, func);
        }
    }
    if (!is_inside_library && !is_attr(iface->attrs, ATTR_LOCAL))
    {
        STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) )
        {
            const var_t *func = stmt->u.var;
            if (!is_attr(func->attrs, ATTR_LOCAL))
                check_remoting_args(func);
        }
    }
}

static char *concat_str(const char *prefix, const char *str)
{
    char *ret = xmalloc(strlen(prefix) + strlen(str) + 1);
    strcpy(ret, prefix);
    strcat(ret, str);
    return ret;
}

static int async_iface_attrs(attr_list_t *attrs, const attr_t *attr)
{
    switch(attr->type)
    {
    case ATTR_UUID:
        return 0;
    case ATTR_ASYNCUUID:
        append_attr(attrs, make_attrp(ATTR_UUID, attr->u.pval));
        return 0;
    default:
        return 1;
    }
}

static int arg_in_attrs(attr_list_t *attrs, const attr_t *attr)
{
    return attr->type != ATTR_OUT && attr->type != ATTR_RETVAL;
}

static int arg_out_attrs(attr_list_t *attrs, const attr_t *attr)
{
    return attr->type != ATTR_IN;
}

static void check_async_uuid(type_t *iface)
{
    statement_list_t *stmts = NULL;
    statement_t *stmt;
    type_t *async_iface;
    type_t *inherit;

    if (!is_attr(iface->attrs, ATTR_ASYNCUUID)) return;

    inherit = iface->details.iface->inherit;
    if (inherit && strcmp(inherit->name, "IUnknown"))
        inherit = inherit->details.iface->async_iface;
    if (!inherit)
        error_loc("async_uuid applied to an interface with incompatible parent\n");

    async_iface = get_type(TYPE_INTERFACE, concat_str("Async", iface->name), iface->namespace, 0);
    async_iface->attrs = map_attrs(iface->attrs, async_iface_attrs);

    STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) )
    {
        var_t *begin_func, *finish_func, *func = stmt->u.var, *arg;
        var_list_t *begin_args = NULL, *finish_args = NULL, *args;

        args = func->type->details.function->args;
        if (args) LIST_FOR_EACH_ENTRY(arg, args, var_t, entry)
        {
            if (is_attr(arg->attrs, ATTR_IN) || !is_attr(arg->attrs, ATTR_OUT))
                begin_args = append_var(begin_args, copy_var(arg, strdup(arg->name), arg_in_attrs));
            if (is_attr(arg->attrs, ATTR_OUT))
                finish_args = append_var(finish_args, copy_var(arg, strdup(arg->name), arg_out_attrs));
        }

        begin_func = copy_var(func, concat_str("Begin_", func->name), NULL);
        begin_func->type = type_new_function(begin_args);
        begin_func->type->attrs = func->attrs;
        begin_func->type->details.function->retval = func->type->details.function->retval;
        stmts = append_statement(stmts, make_statement_declaration(begin_func));

        finish_func = copy_var(func, concat_str("Finish_", func->name), NULL);
        finish_func->type = type_new_function(finish_args);
        finish_func->type->attrs = func->attrs;
        finish_func->type->details.function->retval = func->type->details.function->retval;
        stmts = append_statement(stmts, make_statement_declaration(finish_func));
    }

    type_interface_define(async_iface, inherit, stmts);
    iface->details.iface->async_iface = async_iface->details.iface->async_iface = async_iface;
}

static void check_statements(const statement_list_t *stmts, int is_inside_library)
{
    const statement_t *stmt;

    if (stmts) LIST_FOR_EACH_ENTRY(stmt, stmts, const statement_t, entry)
    {
        switch(stmt->type) {
        case STMT_LIBRARY:
            check_statements(stmt->u.lib->stmts, TRUE);
            break;
        case STMT_TYPE:
            switch(type_get_type(stmt->u.type)) {
            case TYPE_INTERFACE:
                check_functions(stmt->u.type, is_inside_library);
                break;
            case TYPE_COCLASS:
                if(winrt_mode)
                    error_loc("coclass is not allowed in Windows Runtime mode\n");
                break;
            default:
                break;
            }
            break;
        default:
            break;
        }
    }
}

static void check_all_user_types(const statement_list_t *stmts)
{
  const statement_t *stmt;
  const var_t *v;

  if (stmts) LIST_FOR_EACH_ENTRY(stmt, stmts, const statement_t, entry)
  {
    if (stmt->type == STMT_LIBRARY)
      check_all_user_types(stmt->u.lib->stmts);
    else if (stmt->type == STMT_TYPE && type_get_type(stmt->u.type) == TYPE_INTERFACE &&
             !is_local(stmt->u.type->attrs))
    {
      const statement_t *stmt_func;
      STATEMENTS_FOR_EACH_FUNC(stmt_func, type_iface_get_stmts(stmt->u.type)) {
        const var_t *func = stmt_func->u.var;
        if (func->type->details.function->args)
          LIST_FOR_EACH_ENTRY( v, func->type->details.function->args, const var_t, entry )
            check_for_additional_prototype_types(v->type);
        check_for_additional_prototype_types(type_function_get_rettype(func->type));
      }
    }
  }
}

int is_valid_uuid(const char *s)
{
  int i;

  for (i = 0; i < 36; ++i)
    if (i == 8 || i == 13 || i == 18 || i == 23)
    {
      if (s[i] != '-')
        return FALSE;
    }
    else
      if (!isxdigit(s[i]))
        return FALSE;

  return s[i] == '\0';
}

static statement_t *make_statement(enum statement_type type)
{
    statement_t *stmt = xmalloc(sizeof(*stmt));
    stmt->type = type;
    return stmt;
}

static statement_t *make_statement_type_decl(type_t *type)
{
    statement_t *stmt = make_statement(STMT_TYPE);
    stmt->u.type = type;
    return stmt;
}

static statement_t *make_statement_reference(type_t *type)
{
    statement_t *stmt = make_statement(STMT_TYPEREF);
    stmt->u.type = type;
    return stmt;
}

static statement_t *make_statement_declaration(var_t *var)
{
    statement_t *stmt = make_statement(STMT_DECLARATION);
    stmt->u.var = var;
    if (var->stgclass == STG_EXTERN && var->eval)
        warning("'%s' initialised and declared extern\n", var->name);
    if (is_const_decl(var))
    {
        if (var->eval)
            reg_const(var);
    }
    else if (type_get_type(var->type) == TYPE_FUNCTION)
        check_function_attrs(var->name, var->attrs);
    else if (var->stgclass == STG_NONE || var->stgclass == STG_REGISTER)
        error_loc("instantiation of data is illegal\n");
    return stmt;
}

static statement_t *make_statement_library(typelib_t *typelib)
{
    statement_t *stmt = make_statement(STMT_LIBRARY);
    stmt->u.lib = typelib;
    return stmt;
}

static statement_t *make_statement_pragma(const char *str)
{
    statement_t *stmt = make_statement(STMT_PRAGMA);
    stmt->u.str = str;
    return stmt;
}

static statement_t *make_statement_cppquote(const char *str)
{
    statement_t *stmt = make_statement(STMT_CPPQUOTE);
    stmt->u.str = str;
    return stmt;
}

static statement_t *make_statement_importlib(const char *str)
{
    statement_t *stmt = make_statement(STMT_IMPORTLIB);
    stmt->u.str = str;
    return stmt;
}

static statement_t *make_statement_import(const char *str)
{
    statement_t *stmt = make_statement(STMT_IMPORT);
    stmt->u.str = str;
    return stmt;
}

static statement_t *make_statement_module(type_t *type)
{
    statement_t *stmt = make_statement(STMT_MODULE);
    stmt->u.type = type;
    return stmt;
}

static statement_t *make_statement_typedef(declarator_list_t *decls)
{
    declarator_t *decl, *next;
    statement_t *stmt;
    type_list_t **type_list;

    if (!decls) return NULL;

    stmt = make_statement(STMT_TYPEDEF);
    stmt->u.type_list = NULL;
    type_list = &stmt->u.type_list;

    LIST_FOR_EACH_ENTRY_SAFE( decl, next, decls, declarator_t, entry )
    {
        var_t *var = decl->var;
        type_t *type = find_type_or_error(var->name, 0);
        *type_list = xmalloc(sizeof(type_list_t));
        (*type_list)->type = type;
        (*type_list)->next = NULL;

        type_list = &(*type_list)->next;
        free(decl);
        free(var);
    }

    return stmt;
}

static statement_list_t *append_statements(statement_list_t *l1, statement_list_t *l2)
{
    if (!l2) return l1;
    if (!l1 || l1 == l2) return l2;
    list_move_tail (l1, l2);
    return l1;
}

static attr_list_t *append_attribs(attr_list_t *l1, attr_list_t *l2)
{
    if (!l2) return l1;
    if (!l1 || l1 == l2) return l2;
    list_move_tail (l1, l2);
    return l1;
}

static statement_list_t *append_statement(statement_list_t *list, statement_t *stmt)
{
    if (!stmt) return list;
    if (!list)
    {
        list = xmalloc( sizeof(*list) );
        list_init( list );
    }
    list_add_tail( list, &stmt->entry );
    return list;
}

void init_loc_info(loc_info_t *i)
{
    i->input_name = input_name ? input_name : "stdin";
    i->line_number = line_number;
    i->near_text = parser_text;
}

static void check_def(const type_t *t)
{
    if (t->defined)
        error_loc("%s: redefinition error; original definition was at %s:%d\n",
                  t->name, t->loc_info.input_name, t->loc_info.line_number);
}
