diff --git a/lib/AsmParser/llvmAsmParser.cpp.cvs b/lib/AsmParser/llvmAsmParser.cpp.cvs
index eec7105..a3e1235 100644
--- a/lib/AsmParser/llvmAsmParser.cpp.cvs
+++ b/lib/AsmParser/llvmAsmParser.cpp.cvs
@@ -1,161 +1,378 @@
+/* A Bison parser, made by GNU Bison 2.3.  */
 
-/*  A Bison parser, made from /Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y
-    by GNU Bison version 1.28  */
+/* Skeleton implementation for Bison's Yacc-like parsers in C
 
-#define YYBISON 1  /* Identify Bison output.  */
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   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 2, 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, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* 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 "2.3"
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 0
+
+/* Using locations.  */
+#define YYLSP_NEEDED 0
+
+/* Substitute the variable and function names.  */
 #define yyparse llvmAsmparse
-#define yylex llvmAsmlex
+#define yylex   llvmAsmlex
 #define yyerror llvmAsmerror
-#define yylval llvmAsmlval
-#define yychar llvmAsmchar
+#define yylval  llvmAsmlval
+#define yychar  llvmAsmchar
 #define yydebug llvmAsmdebug
 #define yynerrs llvmAsmnerrs
-#define	ESINT64VAL	257
-#define	EUINT64VAL	258
-#define	ESAPINTVAL	259
-#define	EUAPINTVAL	260
-#define	LOCALVAL_ID	261
-#define	GLOBALVAL_ID	262
-#define	FPVAL	263
-#define	VOID	264
-#define	INTTYPE	265
-#define	FLOAT	266
-#define	DOUBLE	267
-#define	X86_FP80	268
-#define	FP128	269
-#define	PPC_FP128	270
-#define	LABEL	271
-#define	TYPE	272
-#define	LOCALVAR	273
-#define	GLOBALVAR	274
-#define	LABELSTR	275
-#define	STRINGCONSTANT	276
-#define	ATSTRINGCONSTANT	277
-#define	PCTSTRINGCONSTANT	278
-#define	ZEROINITIALIZER	279
-#define	TRUETOK	280
-#define	FALSETOK	281
-#define	BEGINTOK	282
-#define	ENDTOK	283
-#define	DECLARE	284
-#define	DEFINE	285
-#define	GLOBAL	286
-#define	CONSTANT	287
-#define	SECTION	288
-#define	ALIAS	289
-#define	VOLATILE	290
-#define	THREAD_LOCAL	291
-#define	TO	292
-#define	DOTDOTDOT	293
-#define	NULL_TOK	294
-#define	UNDEF	295
-#define	INTERNAL	296
-#define	LINKONCE	297
-#define	WEAK	298
-#define	APPENDING	299
-#define	DLLIMPORT	300
-#define	DLLEXPORT	301
-#define	EXTERN_WEAK	302
-#define	OPAQUE	303
-#define	EXTERNAL	304
-#define	TARGET	305
-#define	TRIPLE	306
-#define	ALIGN	307
-#define	DEPLIBS	308
-#define	CALL	309
-#define	TAIL	310
-#define	ASM_TOK	311
-#define	MODULE	312
-#define	SIDEEFFECT	313
-#define	CC_TOK	314
-#define	CCC_TOK	315
-#define	FASTCC_TOK	316
-#define	COLDCC_TOK	317
-#define	X86_STDCALLCC_TOK	318
-#define	X86_FASTCALLCC_TOK	319
-#define	DATALAYOUT	320
-#define	RET	321
-#define	BR	322
-#define	SWITCH	323
-#define	INVOKE	324
-#define	UNWIND	325
-#define	UNREACHABLE	326
-#define	ADD	327
-#define	SUB	328
-#define	MUL	329
-#define	UDIV	330
-#define	SDIV	331
-#define	FDIV	332
-#define	UREM	333
-#define	SREM	334
-#define	FREM	335
-#define	AND	336
-#define	OR	337
-#define	XOR	338
-#define	SHL	339
-#define	LSHR	340
-#define	ASHR	341
-#define	ICMP	342
-#define	FCMP	343
-#define	EQ	344
-#define	NE	345
-#define	SLT	346
-#define	SGT	347
-#define	SLE	348
-#define	SGE	349
-#define	ULT	350
-#define	UGT	351
-#define	ULE	352
-#define	UGE	353
-#define	OEQ	354
-#define	ONE	355
-#define	OLT	356
-#define	OGT	357
-#define	OLE	358
-#define	OGE	359
-#define	ORD	360
-#define	UNO	361
-#define	UEQ	362
-#define	UNE	363
-#define	MALLOC	364
-#define	ALLOCA	365
-#define	FREE	366
-#define	LOAD	367
-#define	STORE	368
-#define	GETELEMENTPTR	369
-#define	TRUNC	370
-#define	ZEXT	371
-#define	SEXT	372
-#define	FPTRUNC	373
-#define	FPEXT	374
-#define	BITCAST	375
-#define	UITOFP	376
-#define	SITOFP	377
-#define	FPTOUI	378
-#define	FPTOSI	379
-#define	INTTOPTR	380
-#define	PTRTOINT	381
-#define	PHI_TOK	382
-#define	SELECT	383
-#define	VAARG	384
-#define	EXTRACTELEMENT	385
-#define	INSERTELEMENT	386
-#define	SHUFFLEVECTOR	387
-#define	SIGNEXT	388
-#define	ZEROEXT	389
-#define	NORETURN	390
-#define	INREG	391
-#define	SRET	392
-#define	NOUNWIND	393
-#define	NOALIAS	394
-#define	BYVAL	395
-#define	NEST	396
-#define	DEFAULT	397
-#define	HIDDEN	398
-#define	PROTECTED	399
 
-#line 14 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     ESINT64VAL = 258,
+     EUINT64VAL = 259,
+     ESAPINTVAL = 260,
+     EUAPINTVAL = 261,
+     LOCALVAL_ID = 262,
+     GLOBALVAL_ID = 263,
+     FPVAL = 264,
+     VOID = 265,
+     INTTYPE = 266,
+     FLOAT = 267,
+     DOUBLE = 268,
+     X86_FP80 = 269,
+     FP128 = 270,
+     PPC_FP128 = 271,
+     LABEL = 272,
+     TYPE = 273,
+     LOCALVAR = 274,
+     GLOBALVAR = 275,
+     LABELSTR = 276,
+     STRINGCONSTANT = 277,
+     ATSTRINGCONSTANT = 278,
+     PCTSTRINGCONSTANT = 279,
+     ZEROINITIALIZER = 280,
+     TRUETOK = 281,
+     FALSETOK = 282,
+     BEGINTOK = 283,
+     ENDTOK = 284,
+     DECLARE = 285,
+     DEFINE = 286,
+     GLOBAL = 287,
+     CONSTANT = 288,
+     SECTION = 289,
+     ALIAS = 290,
+     VOLATILE = 291,
+     THREAD_LOCAL = 292,
+     TO = 293,
+     DOTDOTDOT = 294,
+     NULL_TOK = 295,
+     UNDEF = 296,
+     INTERNAL = 297,
+     LINKONCE = 298,
+     WEAK = 299,
+     APPENDING = 300,
+     DLLIMPORT = 301,
+     DLLEXPORT = 302,
+     EXTERN_WEAK = 303,
+     OPAQUE = 304,
+     EXTERNAL = 305,
+     TARGET = 306,
+     TRIPLE = 307,
+     ALIGN = 308,
+     DEPLIBS = 309,
+     CALL = 310,
+     TAIL = 311,
+     ASM_TOK = 312,
+     MODULE = 313,
+     SIDEEFFECT = 314,
+     CC_TOK = 315,
+     CCC_TOK = 316,
+     FASTCC_TOK = 317,
+     COLDCC_TOK = 318,
+     X86_STDCALLCC_TOK = 319,
+     X86_FASTCALLCC_TOK = 320,
+     DATALAYOUT = 321,
+     RET = 322,
+     BR = 323,
+     SWITCH = 324,
+     INVOKE = 325,
+     UNWIND = 326,
+     UNREACHABLE = 327,
+     ADD = 328,
+     SUB = 329,
+     MUL = 330,
+     UDIV = 331,
+     SDIV = 332,
+     FDIV = 333,
+     UREM = 334,
+     SREM = 335,
+     FREM = 336,
+     AND = 337,
+     OR = 338,
+     XOR = 339,
+     SHL = 340,
+     LSHR = 341,
+     ASHR = 342,
+     ICMP = 343,
+     FCMP = 344,
+     EQ = 345,
+     NE = 346,
+     SLT = 347,
+     SGT = 348,
+     SLE = 349,
+     SGE = 350,
+     ULT = 351,
+     UGT = 352,
+     ULE = 353,
+     UGE = 354,
+     OEQ = 355,
+     ONE = 356,
+     OLT = 357,
+     OGT = 358,
+     OLE = 359,
+     OGE = 360,
+     ORD = 361,
+     UNO = 362,
+     UEQ = 363,
+     UNE = 364,
+     MALLOC = 365,
+     ALLOCA = 366,
+     FREE = 367,
+     LOAD = 368,
+     STORE = 369,
+     GETELEMENTPTR = 370,
+     TRUNC = 371,
+     ZEXT = 372,
+     SEXT = 373,
+     FPTRUNC = 374,
+     FPEXT = 375,
+     BITCAST = 376,
+     UITOFP = 377,
+     SITOFP = 378,
+     FPTOUI = 379,
+     FPTOSI = 380,
+     INTTOPTR = 381,
+     PTRTOINT = 382,
+     PHI_TOK = 383,
+     SELECT = 384,
+     VAARG = 385,
+     EXTRACTELEMENT = 386,
+     INSERTELEMENT = 387,
+     SHUFFLEVECTOR = 388,
+     SIGNEXT = 389,
+     ZEROEXT = 390,
+     NORETURN = 391,
+     INREG = 392,
+     SRET = 393,
+     NOUNWIND = 394,
+     NOALIAS = 395,
+     BYVAL = 396,
+     NEST = 397,
+     CONST = 398,
+     PURE = 399,
+     DEFAULT = 400,
+     HIDDEN = 401,
+     PROTECTED = 402
+   };
+#endif
+/* Tokens.  */
+#define ESINT64VAL 258
+#define EUINT64VAL 259
+#define ESAPINTVAL 260
+#define EUAPINTVAL 261
+#define LOCALVAL_ID 262
+#define GLOBALVAL_ID 263
+#define FPVAL 264
+#define VOID 265
+#define INTTYPE 266
+#define FLOAT 267
+#define DOUBLE 268
+#define X86_FP80 269
+#define FP128 270
+#define PPC_FP128 271
+#define LABEL 272
+#define TYPE 273
+#define LOCALVAR 274
+#define GLOBALVAR 275
+#define LABELSTR 276
+#define STRINGCONSTANT 277
+#define ATSTRINGCONSTANT 278
+#define PCTSTRINGCONSTANT 279
+#define ZEROINITIALIZER 280
+#define TRUETOK 281
+#define FALSETOK 282
+#define BEGINTOK 283
+#define ENDTOK 284
+#define DECLARE 285
+#define DEFINE 286
+#define GLOBAL 287
+#define CONSTANT 288
+#define SECTION 289
+#define ALIAS 290
+#define VOLATILE 291
+#define THREAD_LOCAL 292
+#define TO 293
+#define DOTDOTDOT 294
+#define NULL_TOK 295
+#define UNDEF 296
+#define INTERNAL 297
+#define LINKONCE 298
+#define WEAK 299
+#define APPENDING 300
+#define DLLIMPORT 301
+#define DLLEXPORT 302
+#define EXTERN_WEAK 303
+#define OPAQUE 304
+#define EXTERNAL 305
+#define TARGET 306
+#define TRIPLE 307
+#define ALIGN 308
+#define DEPLIBS 309
+#define CALL 310
+#define TAIL 311
+#define ASM_TOK 312
+#define MODULE 313
+#define SIDEEFFECT 314
+#define CC_TOK 315
+#define CCC_TOK 316
+#define FASTCC_TOK 317
+#define COLDCC_TOK 318
+#define X86_STDCALLCC_TOK 319
+#define X86_FASTCALLCC_TOK 320
+#define DATALAYOUT 321
+#define RET 322
+#define BR 323
+#define SWITCH 324
+#define INVOKE 325
+#define UNWIND 326
+#define UNREACHABLE 327
+#define ADD 328
+#define SUB 329
+#define MUL 330
+#define UDIV 331
+#define SDIV 332
+#define FDIV 333
+#define UREM 334
+#define SREM 335
+#define FREM 336
+#define AND 337
+#define OR 338
+#define XOR 339
+#define SHL 340
+#define LSHR 341
+#define ASHR 342
+#define ICMP 343
+#define FCMP 344
+#define EQ 345
+#define NE 346
+#define SLT 347
+#define SGT 348
+#define SLE 349
+#define SGE 350
+#define ULT 351
+#define UGT 352
+#define ULE 353
+#define UGE 354
+#define OEQ 355
+#define ONE 356
+#define OLT 357
+#define OGT 358
+#define OLE 359
+#define OGE 360
+#define ORD 361
+#define UNO 362
+#define UEQ 363
+#define UNE 364
+#define MALLOC 365
+#define ALLOCA 366
+#define FREE 367
+#define LOAD 368
+#define STORE 369
+#define GETELEMENTPTR 370
+#define TRUNC 371
+#define ZEXT 372
+#define SEXT 373
+#define FPTRUNC 374
+#define FPEXT 375
+#define BITCAST 376
+#define UITOFP 377
+#define SITOFP 378
+#define FPTOUI 379
+#define FPTOSI 380
+#define INTTOPTR 381
+#define PTRTOINT 382
+#define PHI_TOK 383
+#define SELECT 384
+#define VAARG 385
+#define EXTRACTELEMENT 386
+#define INSERTELEMENT 387
+#define SHUFFLEVECTOR 388
+#define SIGNEXT 389
+#define ZEROEXT 390
+#define NORETURN 391
+#define INREG 392
+#define SRET 393
+#define NOUNWIND 394
+#define NOALIAS 395
+#define BYVAL 396
+#define NEST 397
+#define CONST 398
+#define PURE 399
+#define DEFAULT 400
+#define HIDDEN 401
+#define PROTECTED 402
+
+
+
+
+/* Copy the first part of user declarations.  */
+#line 14 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
 
 #include "ParserInternals.h"
 #include "llvm/CallingConv.h"
@@ -1109,8 +1326,29 @@
 }
 
 
-#line 968 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-typedef union {
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+#line 968 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+{
   llvm::Module                           *ModuleVal;
   llvm::Function                         *FunctionVal;
   llvm::BasicBlock                       *BasicBlockVal;
@@ -1155,1162 +1393,1843 @@
   llvm::Instruction::OtherOps       OtherOpVal;
   llvm::ICmpInst::Predicate         IPredicate;
   llvm::FCmpInst::Predicate         FPredicate;
-} YYSTYPE;
-#include <stdio.h>
-
-#ifndef __cplusplus
-#ifndef __STDC__
-#define const
-#endif
+}
+/* Line 187 of yacc.c.  */
+#line 1399 "llvmAsmParser.tab.c"
+	YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
 #endif
 
 
 
-#define	YYFINAL		600
-#define	YYFLAG		-32768
-#define	YYNTBASE	160
+/* Copy the second part of user declarations.  */
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 399 ? yytranslate[x] : 241)
 
-static const short 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,     2,     2,     2,     2,     2,     2,     2,   150,
-   151,   148,     2,   147,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,   155,
-   146,   156,     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,
-   152,   149,   154,     2,     2,     2,     2,     2,   159,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,   153,
-     2,     2,   157,     2,   158,     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,     2,     1,     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
-};
+/* Line 216 of yacc.c.  */
+#line 1412 "llvmAsmParser.tab.c"
 
-#if YYDEBUG != 0
-static const short yyprhs[] = {     0,
-     0,     2,     4,     6,     8,    10,    12,    14,    16,    18,
-    20,    22,    24,    26,    28,    30,    32,    34,    36,    38,
-    40,    42,    44,    46,    48,    50,    52,    54,    56,    58,
-    60,    62,    64,    66,    68,    70,    72,    74,    76,    78,
-    80,    82,    84,    86,    88,    90,    92,    94,    96,    98,
-   100,   102,   104,   106,   108,   110,   112,   114,   116,   118,
-   120,   122,   124,   126,   127,   130,   131,   133,   135,   137,
-   138,   141,   143,   145,   147,   149,   151,   153,   155,   157,
-   158,   160,   162,   164,   165,   167,   169,   170,   172,   174,
-   176,   178,   179,   181,   183,   184,   186,   188,   190,   192,
-   194,   197,   199,   201,   203,   205,   207,   209,   211,   213,
-   215,   216,   219,   221,   223,   225,   227,   228,   231,   232,
-   235,   236,   240,   243,   244,   246,   247,   251,   253,   256,
-   258,   260,   262,   264,   266,   268,   270,   272,   274,   277,
-   279,   282,   288,   294,   300,   306,   310,   313,   319,   324,
-   327,   329,   331,   333,   337,   339,   343,   345,   346,   348,
-   352,   357,   361,   365,   370,   375,   379,   386,   392,   395,
-   398,   401,   404,   407,   410,   413,   416,   419,   422,   425,
-   428,   435,   441,   450,   457,   464,   472,   480,   487,   496,
-   505,   509,   511,   513,   515,   517,   518,   521,   528,   530,
-   531,   533,   536,   537,   541,   542,   546,   550,   554,   558,
-   559,   567,   568,   577,   578,   587,   593,   596,   600,   602,
-   606,   610,   614,   618,   620,   621,   627,   631,   633,   637,
-   639,   640,   650,   652,   654,   659,   661,   663,   666,   670,
-   671,   673,   675,   677,   679,   681,   683,   685,   687,   689,
-   693,   695,   701,   703,   705,   707,   709,   711,   713,   716,
-   719,   722,   726,   729,   730,   732,   735,   738,   742,   752,
-   762,   771,   786,   788,   790,   797,   803,   806,   813,   821,
-   825,   829,   835,   841,   842,   843,   847,   850,   852,   858,
-   864,   871,   878,   883,   890,   895,   900,   907,   914,   917,
-   926,   928,   930,   931,   935,   942,   946,   953,   956,   962,
-   970
-};
-
-static const short yyrhs[] = {    73,
-     0,    74,     0,    75,     0,    76,     0,    77,     0,    78,
-     0,    79,     0,    80,     0,    81,     0,    85,     0,    86,
-     0,    87,     0,    82,     0,    83,     0,    84,     0,   116,
-     0,   117,     0,   118,     0,   119,     0,   120,     0,   121,
-     0,   122,     0,   123,     0,   124,     0,   125,     0,   126,
-     0,   127,     0,    90,     0,    91,     0,    92,     0,    93,
-     0,    94,     0,    95,     0,    96,     0,    97,     0,    98,
-     0,    99,     0,   100,     0,   101,     0,   102,     0,   103,
-     0,   104,     0,   105,     0,   106,     0,   107,     0,   108,
-     0,   109,     0,    96,     0,    97,     0,    98,     0,    99,
-     0,    26,     0,    27,     0,    11,     0,    12,     0,    13,
-     0,    16,     0,    15,     0,    14,     0,    19,     0,    22,
-     0,    24,     0,   167,     0,     0,   167,   146,     0,     0,
-    20,     0,    23,     0,   172,     0,     0,   170,   146,     0,
-    42,     0,    44,     0,    43,     0,    45,     0,    47,     0,
-    46,     0,    48,     0,    50,     0,     0,   143,     0,   144,
-     0,   145,     0,     0,    46,     0,    48,     0,     0,    42,
-     0,    43,     0,    44,     0,    47,     0,     0,    44,     0,
-    42,     0,     0,    61,     0,    62,     0,    63,     0,    64,
-     0,    65,     0,    60,     4,     0,   135,     0,   117,     0,
-   134,     0,   118,     0,   137,     0,   138,     0,   140,     0,
-   141,     0,   142,     0,     0,   181,   180,     0,   136,     0,
-   139,     0,   135,     0,   134,     0,     0,   183,   182,     0,
-     0,    53,     4,     0,     0,   147,    53,     4,     0,    34,
-    22,     0,     0,   186,     0,     0,   147,   189,   188,     0,
-   186,     0,    53,     4,     0,    11,     0,    12,     0,    13,
-     0,    16,     0,    15,     0,    14,     0,    17,     0,    49,
-     0,   190,     0,   191,   148,     0,   225,     0,   149,     4,
-     0,   191,   150,   195,   151,   183,     0,    10,   150,   195,
-   151,   183,     0,   152,     4,   153,   191,   154,     0,   155,
-     4,   153,   191,   156,     0,   157,   196,   158,     0,   157,
-   158,     0,   155,   157,   196,   158,   156,     0,   155,   157,
-   158,   156,     0,   191,   181,     0,   191,     0,    10,     0,
-   192,     0,   194,   147,   192,     0,   194,     0,   194,   147,
-    39,     0,    39,     0,     0,   191,     0,   196,   147,   191,
-     0,   191,   152,   199,   154,     0,   191,   152,   154,     0,
-   191,   159,    22,     0,   191,   155,   199,   156,     0,   191,
-   157,   199,   158,     0,   191,   157,   158,     0,   191,   155,
-   157,   199,   158,   156,     0,   191,   155,   157,   158,   156,
-     0,   191,    40,     0,   191,    41,     0,   191,   225,     0,
-   191,   198,     0,   191,    25,     0,   165,     3,     0,   165,
-     5,     0,   165,     4,     0,   165,     6,     0,    11,    26,
-     0,    11,    27,     0,   166,     9,     0,   162,   150,   197,
-    38,   191,   151,     0,   115,   150,   197,   236,   151,     0,
-   129,   150,   197,   147,   197,   147,   197,   151,     0,   160,
-   150,   197,   147,   197,   151,     0,   161,   150,   197,   147,
-   197,   151,     0,    88,   163,   150,   197,   147,   197,   151,
-     0,    89,   164,   150,   197,   147,   197,   151,     0,   131,
-   150,   197,   147,   197,   151,     0,   132,   150,   197,   147,
-   197,   147,   197,   151,     0,   133,   150,   197,   147,   197,
-   147,   197,   151,     0,   199,   147,   197,     0,   197,     0,
-    32,     0,    33,     0,    37,     0,     0,   193,   225,     0,
-   121,   150,   202,    38,   191,   151,     0,   204,     0,     0,
-   205,     0,   204,   205,     0,     0,    31,   206,   221,     0,
-     0,    30,   207,   222,     0,    58,    57,   211,     0,   169,
-    18,   191,     0,   169,    18,    10,     0,     0,   171,   175,
-   201,   200,   197,   208,   188,     0,     0,   171,   173,   175,
-   201,   200,   197,   209,   188,     0,     0,   171,   174,   175,
-   201,   200,   191,   210,   188,     0,   171,   175,    35,   178,
-   202,     0,    51,   212,     0,    54,   146,   213,     0,    22,
-     0,    52,   146,    22,     0,    66,   146,    22,     0,   152,
-   214,   154,     0,   214,   147,    22,     0,    22,     0,     0,
-   215,   147,   191,   181,   168,     0,   191,   181,   168,     0,
-   215,     0,   215,   147,    39,     0,    39,     0,     0,   179,
-   193,   170,   150,   216,   151,   183,   187,   184,     0,    28,
-     0,   157,     0,   177,   175,   217,   218,     0,    29,     0,
-   158,     0,   228,   220,     0,   176,   175,   217,     0,     0,
-    59,     0,     3,     0,     4,     0,     9,     0,    26,     0,
-    27,     0,    40,     0,    41,     0,    25,     0,   155,   199,
-   156,     0,   198,     0,    57,   223,    22,   147,    22,     0,
-     7,     0,     8,     0,   167,     0,   170,     0,   225,     0,
-   224,     0,   191,   226,     0,   228,   229,     0,   219,   229,
-     0,   230,   169,   231,     0,   230,   233,     0,     0,    21,
-     0,    67,   227,     0,    67,    10,     0,    68,    17,   226,
-     0,    68,    11,   226,   147,    17,   226,   147,    17,   226,
-     0,    69,   165,   226,   147,    17,   226,   152,   232,   154,
-     0,    69,   165,   226,   147,    17,   226,   152,   154,     0,
-    70,   179,   193,   226,   150,   235,   151,   183,    38,    17,
-   226,    71,    17,   226,     0,    71,     0,    72,     0,   232,
-   165,   224,   147,    17,   226,     0,   165,   224,   147,    17,
-   226,     0,   169,   238,     0,   191,   152,   226,   147,   226,
-   154,     0,   234,   147,   152,   226,   147,   226,   154,     0,
-   191,   226,   181,     0,    17,   226,   181,     0,   235,   147,
-   191,   226,   181,     0,   235,   147,    17,   226,   181,     0,
-     0,     0,   236,   147,   227,     0,    56,    55,     0,    55,
-     0,   160,   191,   226,   147,   226,     0,   161,   191,   226,
-   147,   226,     0,    88,   163,   191,   226,   147,   226,     0,
-    89,   164,   191,   226,   147,   226,     0,   162,   227,    38,
-   191,     0,   129,   227,   147,   227,   147,   227,     0,   130,
-   227,   147,   191,     0,   131,   227,   147,   227,     0,   132,
-   227,   147,   227,   147,   227,     0,   133,   227,   147,   227,
-   147,   227,     0,   128,   234,     0,   237,   179,   193,   226,
-   150,   235,   151,   183,     0,   240,     0,    36,     0,     0,
-   110,   191,   185,     0,   110,   191,   147,    11,   226,   185,
-     0,   111,   191,   185,     0,   111,   191,   147,    11,   226,
-   185,     0,   112,   227,     0,   239,   113,   191,   226,   185,
-     0,   239,   114,   227,   147,   191,   226,   185,     0,   115,
-   191,   226,   236,     0
-};
-
+#ifdef short
+# undef short
 #endif
 
-#if YYDEBUG != 0
-static const short yyrline[] = { 0,
-  1127,  1127,  1127,  1127,  1127,  1127,  1127,  1127,  1127,  1128,
-  1128,  1128,  1128,  1128,  1128,  1129,  1129,  1129,  1129,  1129,
-  1129,  1129,  1130,  1130,  1130,  1130,  1130,  1133,  1133,  1134,
-  1134,  1135,  1135,  1136,  1136,  1137,  1137,  1141,  1141,  1142,
-  1142,  1143,  1143,  1144,  1144,  1145,  1145,  1146,  1146,  1147,
-  1147,  1148,  1149,  1154,  1155,  1155,  1155,  1155,  1155,  1157,
-  1157,  1157,  1158,  1158,  1162,  1166,  1171,  1171,  1173,  1174,
-  1179,  1185,  1186,  1187,  1188,  1189,  1193,  1194,  1195,  1199,
-  1200,  1201,  1202,  1206,  1207,  1208,  1212,  1213,  1214,  1215,
-  1216,  1220,  1221,  1222,  1225,  1225,  1226,  1227,  1228,  1229,
-  1230,  1238,  1239,  1240,  1241,  1242,  1243,  1244,  1245,  1246,
-  1249,  1250,  1255,  1256,  1257,  1258,  1261,  1262,  1269,  1269,
-  1276,  1276,  1285,  1293,  1293,  1299,  1299,  1301,  1306,  1319,
-  1319,  1319,  1319,  1319,  1319,  1319,  1322,  1326,  1330,  1337,
-  1342,  1350,  1380,  1411,  1416,  1428,  1438,  1442,  1452,  1459,
-  1466,  1473,  1478,  1483,  1490,  1491,  1498,  1505,  1513,  1519,
-  1531,  1559,  1575,  1602,  1630,  1656,  1676,  1702,  1722,  1734,
-  1741,  1807,  1817,  1827,  1833,  1843,  1849,  1859,  1864,  1869,
-  1882,  1894,  1916,  1924,  1930,  1941,  1946,  1951,  1957,  1963,
-  1972,  1976,  1984,  1984,  1987,  1987,  1990,  2002,  2023,  2028,
-  2036,  2037,  2041,  2041,  2045,  2045,  2048,  2051,  2075,  2086,
-  2093,  2096,  2102,  2105,  2112,  2116,  2156,  2159,  2165,  2175,
-  2179,  2184,  2186,  2191,  2196,  2205,  2215,  2226,  2230,  2239,
-  2248,  2253,  2374,  2374,  2376,  2385,  2385,  2387,  2392,  2404,
-  2408,  2413,  2417,  2421,  2425,  2429,  2433,  2437,  2441,  2445,
-  2470,  2474,  2484,  2488,  2492,  2497,  2504,  2504,  2510,  2519,
-  2523,  2532,  2541,  2550,  2554,  2561,  2565,  2569,  2574,  2584,
-  2603,  2612,  2692,  2696,  2703,  2714,  2727,  2737,  2748,  2758,
-  2767,  2773,  2782,  2788,  2791,  2792,  2799,  2803,  2808,  2829,
-  2846,  2860,  2874,  2886,  2894,  2901,  2907,  2913,  2919,  2934,
-  3019,  3024,  3028,  3035,  3042,  3050,  3057,  3065,  3073,  3087,
-  3104
-};
-#endif
-
-
-#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
-
-static const char * const yytname[] = {   "$","error","$undefined.","ESINT64VAL",
-"EUINT64VAL","ESAPINTVAL","EUAPINTVAL","LOCALVAL_ID","GLOBALVAL_ID","FPVAL",
-"VOID","INTTYPE","FLOAT","DOUBLE","X86_FP80","FP128","PPC_FP128","LABEL","TYPE",
-"LOCALVAR","GLOBALVAR","LABELSTR","STRINGCONSTANT","ATSTRINGCONSTANT","PCTSTRINGCONSTANT",
-"ZEROINITIALIZER","TRUETOK","FALSETOK","BEGINTOK","ENDTOK","DECLARE","DEFINE",
-"GLOBAL","CONSTANT","SECTION","ALIAS","VOLATILE","THREAD_LOCAL","TO","DOTDOTDOT",
-"NULL_TOK","UNDEF","INTERNAL","LINKONCE","WEAK","APPENDING","DLLIMPORT","DLLEXPORT",
-"EXTERN_WEAK","OPAQUE","EXTERNAL","TARGET","TRIPLE","ALIGN","DEPLIBS","CALL",
-"TAIL","ASM_TOK","MODULE","SIDEEFFECT","CC_TOK","CCC_TOK","FASTCC_TOK","COLDCC_TOK",
-"X86_STDCALLCC_TOK","X86_FASTCALLCC_TOK","DATALAYOUT","RET","BR","SWITCH","INVOKE",
-"UNWIND","UNREACHABLE","ADD","SUB","MUL","UDIV","SDIV","FDIV","UREM","SREM",
-"FREM","AND","OR","XOR","SHL","LSHR","ASHR","ICMP","FCMP","EQ","NE","SLT","SGT",
-"SLE","SGE","ULT","UGT","ULE","UGE","OEQ","ONE","OLT","OGT","OLE","OGE","ORD",
-"UNO","UEQ","UNE","MALLOC","ALLOCA","FREE","LOAD","STORE","GETELEMENTPTR","TRUNC",
-"ZEXT","SEXT","FPTRUNC","FPEXT","BITCAST","UITOFP","SITOFP","FPTOUI","FPTOSI",
-"INTTOPTR","PTRTOINT","PHI_TOK","SELECT","VAARG","EXTRACTELEMENT","INSERTELEMENT",
-"SHUFFLEVECTOR","SIGNEXT","ZEROEXT","NORETURN","INREG","SRET","NOUNWIND","NOALIAS",
-"BYVAL","NEST","DEFAULT","HIDDEN","PROTECTED","'='","','","'*'","'\\\\'","'('",
-"')'","'['","'x'","']'","'<'","'>'","'{'","'}'","'c'","ArithmeticOps","LogicalOps",
-"CastOps","IPredicates","FPredicates","IntType","FPType","LocalName","OptLocalName",
-"OptLocalAssign","GlobalName","OptGlobalAssign","GlobalAssign","GVInternalLinkage",
-"GVExternalLinkage","GVVisibilityStyle","FunctionDeclareLinkage","FunctionDefineLinkage",
-"AliasLinkage","OptCallingConv","ParamAttr","OptParamAttrs","FuncAttr","OptFuncAttrs",
-"OptAlign","OptCAlign","SectionString","OptSection","GlobalVarAttributes","GlobalVarAttribute",
-"PrimType","Types","ArgType","ResultTypes","ArgTypeList","ArgTypeListI","TypeListI",
-"ConstVal","ConstExpr","ConstVector","GlobalType","ThreadLocal","AliaseeRef",
-"Module","DefinitionList","Definition","@1","@2","@3","@4","@5","AsmBlock","TargetDefinition",
-"LibrariesDefinition","LibList","ArgListH","ArgList","FunctionHeaderH","BEGIN",
-"FunctionHeader","END","Function","FunctionProto","OptSideEffect","ConstValueRef",
-"SymbolicValueRef","ValueRef","ResolvedVal","BasicBlockList","BasicBlock","InstructionList",
-"BBTerminatorInst","JumpTable","Inst","PHIList","ParamList","IndexList","OptTailCall",
-"InstVal","OptVolatile","MemoryInst", NULL
-};
-#endif
-
-static const short yyr1[] = {     0,
-   160,   160,   160,   160,   160,   160,   160,   160,   160,   161,
-   161,   161,   161,   161,   161,   162,   162,   162,   162,   162,
-   162,   162,   162,   162,   162,   162,   162,   163,   163,   163,
-   163,   163,   163,   163,   163,   163,   163,   164,   164,   164,
-   164,   164,   164,   164,   164,   164,   164,   164,   164,   164,
-   164,   164,   164,   165,   166,   166,   166,   166,   166,   167,
-   167,   167,   168,   168,   169,   169,   170,   170,   171,   171,
-   172,   173,   173,   173,   173,   173,   174,   174,   174,   175,
-   175,   175,   175,   176,   176,   176,   177,   177,   177,   177,
-   177,   178,   178,   178,   179,   179,   179,   179,   179,   179,
-   179,   180,   180,   180,   180,   180,   180,   180,   180,   180,
-   181,   181,   182,   182,   182,   182,   183,   183,   184,   184,
-   185,   185,   186,   187,   187,   188,   188,   189,   189,   190,
-   190,   190,   190,   190,   190,   190,   191,   191,   191,   191,
-   191,   191,   191,   191,   191,   191,   191,   191,   191,   192,
-   193,   193,   194,   194,   195,   195,   195,   195,   196,   196,
-   197,   197,   197,   197,   197,   197,   197,   197,   197,   197,
-   197,   197,   197,   197,   197,   197,   197,   197,   197,   197,
-   198,   198,   198,   198,   198,   198,   198,   198,   198,   198,
-   199,   199,   200,   200,   201,   201,   202,   202,   203,   203,
-   204,   204,   206,   205,   207,   205,   205,   205,   205,   208,
-   205,   209,   205,   210,   205,   205,   205,   205,   211,   212,
-   212,   213,   214,   214,   214,   215,   215,   216,   216,   216,
-   216,   217,   218,   218,   219,   220,   220,   221,   222,   223,
-   223,   224,   224,   224,   224,   224,   224,   224,   224,   224,
-   224,   224,   225,   225,   225,   225,   226,   226,   227,   228,
-   228,   229,   230,   230,   230,   231,   231,   231,   231,   231,
-   231,   231,   231,   231,   232,   232,   233,   234,   234,   235,
-   235,   235,   235,   235,   236,   236,   237,   237,   238,   238,
-   238,   238,   238,   238,   238,   238,   238,   238,   238,   238,
-   238,   239,   239,   240,   240,   240,   240,   240,   240,   240,
-   240
-};
-
-static const short yyr2[] = {     0,
-     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,     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,     0,     2,     0,     1,     1,     1,     0,
-     2,     1,     1,     1,     1,     1,     1,     1,     1,     0,
-     1,     1,     1,     0,     1,     1,     0,     1,     1,     1,
-     1,     0,     1,     1,     0,     1,     1,     1,     1,     1,
-     2,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-     0,     2,     1,     1,     1,     1,     0,     2,     0,     2,
-     0,     3,     2,     0,     1,     0,     3,     1,     2,     1,
-     1,     1,     1,     1,     1,     1,     1,     1,     2,     1,
-     2,     5,     5,     5,     5,     3,     2,     5,     4,     2,
-     1,     1,     1,     3,     1,     3,     1,     0,     1,     3,
-     4,     3,     3,     4,     4,     3,     6,     5,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     6,     5,     8,     6,     6,     7,     7,     6,     8,     8,
-     3,     1,     1,     1,     1,     0,     2,     6,     1,     0,
-     1,     2,     0,     3,     0,     3,     3,     3,     3,     0,
-     7,     0,     8,     0,     8,     5,     2,     3,     1,     3,
-     3,     3,     3,     1,     0,     5,     3,     1,     3,     1,
-     0,     9,     1,     1,     4,     1,     1,     2,     3,     0,
-     1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
-     1,     5,     1,     1,     1,     1,     1,     1,     2,     2,
-     2,     3,     2,     0,     1,     2,     2,     3,     9,     9,
-     8,    14,     1,     1,     6,     5,     2,     6,     7,     3,
-     3,     5,     5,     0,     0,     3,     2,     1,     5,     5,
-     6,     6,     4,     6,     4,     4,     6,     6,     2,     8,
-     1,     1,     0,     3,     6,     3,     6,     2,     5,     7,
-     4
-};
-
-static const short yydefact[] = {    70,
-    60,    67,    61,    68,    62,   205,   203,     0,     0,     0,
-     0,     0,     0,    80,    69,    70,   201,    84,    87,     0,
-     0,   217,     0,     0,    65,     0,    71,    72,    74,    73,
-    75,    77,    76,    78,    79,    81,    82,    83,    80,    80,
-   196,   202,    85,    86,    80,   206,    88,    89,    90,    91,
-    80,   264,   204,   264,     0,     0,   225,   218,   219,   207,
-   253,   254,   209,   130,   131,   132,   135,   134,   133,   136,
-   137,     0,     0,     0,     0,   255,   256,   138,   208,   140,
-   196,   196,    92,   195,     0,    95,    95,   265,   261,    66,
-   236,   237,   238,   260,   220,   221,   224,     0,   158,   141,
-     0,     0,     0,     0,   147,   159,     0,   139,   158,     0,
-     0,    94,    93,     0,   193,   194,     0,     0,    96,    97,
-    98,    99,   100,     0,   239,     0,   303,   263,     0,   222,
-   157,   111,   153,   155,     0,     0,     0,     0,     0,     0,
-   146,     0,     0,     0,   152,     0,   151,     0,   216,   130,
-   131,   132,   135,   134,   133,     0,     0,     0,   210,   101,
-     0,   233,   234,   235,   302,   288,     0,     0,     0,     0,
-    95,   273,   274,     1,     2,     3,     4,     5,     6,     7,
-     8,     9,    13,    14,    15,    10,    11,    12,     0,     0,
-     0,     0,     0,     0,    16,    17,    18,    19,    20,    21,
-    22,    23,    24,    25,    26,    27,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   262,    95,   277,     0,   301,
-   223,   150,     0,   117,     0,     0,   149,     0,   160,   117,
-   212,   214,     0,   197,   178,   179,   174,   176,   175,   177,
-   180,   173,   169,   170,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   172,   171,
-   126,     0,   287,   267,     0,   266,     0,     0,    54,     0,
-     0,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-    37,     0,    52,    53,    48,    49,    50,    51,    38,    39,
-    40,    41,    42,    43,    44,    45,    46,    47,     0,   121,
-   121,   308,     0,     0,   299,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   103,   105,   104,   102,
-   106,   107,   108,   109,   110,   112,   156,   154,   143,   144,
-   145,   148,   142,   126,   126,     0,     0,     0,     0,     0,
-     0,     0,     0,   162,   192,     0,     0,     0,   166,     0,
-   163,     0,     0,     0,     0,   211,   231,   242,   243,   244,
-   249,   245,   246,   247,   248,   240,     0,   251,   258,   257,
-   259,     0,   268,     0,     0,     0,     0,     0,   304,     0,
-   306,   285,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   116,   115,   113,   114,   118,
-   213,   215,     0,     0,     0,   285,     0,     0,     0,     0,
-     0,   161,   147,   159,     0,   164,   165,     0,     0,     0,
-     0,     0,   128,   126,   230,   111,   228,     0,   241,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   311,
-     0,     0,     0,   295,   296,     0,     0,     0,     0,   293,
-     0,   121,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   191,   168,     0,     0,     0,     0,   123,   129,   127,
-    64,     0,   117,     0,   250,     0,     0,   284,     0,     0,
-   121,   122,   121,     0,     0,     0,     0,     0,     0,   289,
-   290,   284,     0,   309,     0,   198,     0,     0,   182,     0,
-     0,     0,     0,   167,     0,     0,     0,    63,   227,   229,
-   111,   124,     0,     0,     0,   136,     0,     0,   291,   292,
-   305,   307,   286,     0,     0,   294,   297,   298,     0,   121,
-     0,     0,     0,   188,     0,     0,   184,   185,   181,    64,
-   125,   119,   252,     0,     0,   111,   111,     0,   117,   278,
-     0,   117,   310,   186,   187,     0,     0,     0,   226,     0,
-   232,     0,   271,     0,     0,   281,   280,   136,     0,     0,
-   279,   300,   183,   189,   190,   120,   269,     0,   270,     0,
-   111,   111,     0,     0,     0,   283,   282,     0,     0,     0,
-     0,   276,     0,     0,   275,     0,   272,     0,     0,     0
-};
-
-static const short yydefgoto[] = {   256,
-   257,   258,   282,   299,   156,   157,    76,   509,    12,    77,
-    14,    15,    39,    40,    41,    45,    51,   114,   124,   326,
-   222,   400,   329,   561,   379,   423,   542,   356,   424,    78,
-   158,   133,   148,   134,   135,   107,   345,   368,   346,   117,
-    85,   149,   598,    16,    17,    19,    18,   261,   334,   335,
-    60,    22,    58,    98,   427,   428,   125,   164,    52,    93,
-    53,    46,   430,   369,    80,   371,   266,    54,    89,    90,
-   216,   565,   128,   305,   518,   440,   217,   218,   219,   220
-};
-
-static const short yypact[] = {    42,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,    -8,  -110,    13,
-   -39,   104,     5,   167,-32768,   321,-32768,    83,    74,    12,
-    17,-32768,    41,   148,-32768,  1305,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   117,   117,
-    11,-32768,-32768,-32768,   117,-32768,-32768,-32768,-32768,-32768,
-   117,   154,-32768,   -10,   181,   204,   212,-32768,-32768,-32768,
--32768,-32768,    98,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,   254,   259,     3,   958,-32768,-32768,-32768,    49,-32768,
-   231,   231,   225,-32768,    65,   215,   215,-32768,-32768,   131,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,   -34,  1038,-32768,
-   120,   128,   976,    98,-32768,    49,  -123,-32768,  1038,    65,
-    65,-32768,-32768,  1056,-32768,-32768,  1327,   280,-32768,-32768,
--32768,-32768,-32768,  1345,-32768,   -16,  1663,-32768,   263,-32768,
--32768,    49,-32768,   139,   136,  1398,  1398,   132,   -95,  1398,
--32768,   143,  1327,  1398,    98,   145,    49,   213,-32768,    50,
-   287,   289,   298,   299,   300,   219,   304,   805,-32768,-32768,
-   233,-32768,-32768,-32768,-32768,-32768,   260,  1496,    70,   303,
-   215,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   396,   449,
-  1398,  1398,  1398,  1398,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,  1398,  1398,  1398,  1398,
-  1398,  1398,  1398,  1398,  1398,-32768,   215,-32768,   125,-32768,
--32768,   -32,  1078,-32768,    23,  -105,-32768,   160,    49,-32768,
--32768,    49,  1056,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,   396,   449,   168,   169,   170,   173,
-   174,  1229,  1514,   998,   295,   175,   179,   183,-32768,-32768,
-   187,   185,-32768,    98,   646,-32768,   780,   780,-32768,   780,
-  1345,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,  1398,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1398,    97,
-   102,-32768,   646,    24,   195,   203,   208,   209,   210,   211,
-   646,   646,   332,  1345,  1398,  1398,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    10,-32768,
--32768,-32768,    10,   187,   187,   333,   186,   223,  1327,  1327,
-  1327,  1327,  1327,-32768,-32768,   -15,  1016,   -55,-32768,   -79,
--32768,  1327,  1327,  1327,    -4,-32768,  1247,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,   317,  1327,-32768,-32768,-32768,
--32768,   234,-32768,   235,   780,   646,   646,     4,-32768,    22,
--32768,-32768,   780,   207,  1398,  1398,  1398,  1398,  1398,   236,
-   240,  1398,   780,   646,   241,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,  1398,  1327,  1327,-32768,   244,   246,   247,   251,
-  1327,-32768,   224,   805,   -78,-32768,-32768,   252,   253,   363,
-   380,   399,-32768,   187,-32768,    49,   257,   256,-32768,   386,
-   -52,   392,   393,   261,   270,   275,   780,   422,   780,   282,
-   283,   780,   284,    49,-32768,   285,   288,   780,   780,    49,
-   277,   290,  1398,    30,   291,   292,   -80,  1327,  1327,  1327,
-  1327,-32768,-32768,   293,  1327,  1327,  1398,-32768,-32768,-32768,
-   278,  1287,-32768,   294,-32768,   780,   780,  1554,   780,   780,
-   290,-32768,   290,  1398,   780,   296,  1398,  1398,  1398,-32768,
--32768,  1554,   383,-32768,   646,-32768,  1327,  1327,-32768,   297,
-   301,   307,   308,-32768,   305,   309,    68,-32768,-32768,-32768,
-    49,   -11,   418,   314,   313,   780,   646,    -9,-32768,-32768,
--32768,-32768,-32768,   312,   780,-32768,-32768,-32768,    44,   290,
-   318,   319,  1327,-32768,  1327,  1327,-32768,-32768,-32768,   278,
--32768,   395,-32768,   428,    -7,-32768,-32768,  1572,-32768,-32768,
-   320,-32768,-32768,-32768,-32768,   322,   328,   329,-32768,   442,
--32768,   780,-32768,   503,    -2,   -32,   -32,   780,   646,     1,
--32768,    10,-32768,-32768,-32768,-32768,-32768,   325,-32768,   503,
--32768,-32768,   433,   451,   334,   -32,   -32,   780,   780,   466,
-   413,-32768,   780,   479,-32768,   780,-32768,   500,   501,-32768
-};
-
-static const short yypgoto[] = {   375,
-   376,   377,   264,   262,  -168,-32768,     0,   -30,   421,    18,
--32768,-32768,-32768,-32768,    43,-32768,-32768,-32768,  -158,-32768,
-  -420,-32768,  -222,-32768,  -287,     2,-32768,  -294,-32768,-32768,
-   -25,   302,  -107,-32768,   404,   414,  -112,  -155,  -233,   144,
-   189,   286,-32768,-32768,   502,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,   434,-32768,-32768,-32768,
--32768,-32768,-32768,  -542,  -111,   122,  -183,-32768,   468,-32768,
--32768,-32768,-32768,-32768,    28,   118,-32768,-32768,-32768,-32768
-};
-
-
-#define	YYLAST		1796
-
-
-static const short yytable[] = {    11,
-    79,   270,   259,   269,   159,   471,   102,   333,   269,   302,
-    88,   162,   271,   381,   437,    11,   161,    13,    91,   348,
-   350,   578,   421,   140,   306,   307,   308,   309,   310,   421,
-   231,   313,   439,    13,   141,    23,   234,   585,   583,   401,
-   402,  -200,   108,    20,   109,    83,   260,    84,   422,   106,
-   331,   140,   -54,   -54,   -54,   -54,   438,    21,   314,   -66,
-     1,     2,   228,     3,     4,     5,   484,   411,   411,    24,
-   499,     6,     7,   132,   438,   235,   236,   106,   417,   464,
-   267,    81,    82,   132,   317,   318,   268,    86,   147,    11,
-   540,   411,     8,    87,   411,     9,   115,   116,   147,    10,
-   416,   319,   320,   475,   321,   322,    25,   323,   324,   325,
-   225,   226,   129,   415,   229,    47,    48,    49,   232,   130,
-    50,    26,   396,   397,   398,   566,   567,   399,    43,   470,
-    44,   411,   395,   431,   396,   397,   398,   548,   412,   399,
-   163,   549,   265,   396,   397,   398,   563,    92,   399,     1,
-    27,   579,     3,   370,     5,   370,   370,    55,   370,   103,
-   586,   587,    56,   375,   494,   300,   301,   265,   303,    59,
-   108,   108,   109,   109,    88,   383,   330,   108,   262,   109,
-   496,   304,   265,   265,   265,   265,   265,   311,   312,   265,
-   548,   370,    57,   521,   552,   522,   108,   132,   109,   370,
-   370,   443,    95,   445,   446,   447,   393,   147,    28,    29,
-    30,    31,    32,    33,    34,   108,    35,   109,   539,    61,
-    62,   237,   238,   239,   240,    96,   406,   407,   408,   409,
-   410,     1,     2,    97,     3,     4,     5,   315,   316,   418,
-   419,   420,   553,   378,   108,   147,   109,    99,   380,   108,
-   512,   109,     2,   143,   144,     4,   376,   100,   259,    36,
-    37,    38,   101,   370,   370,   370,   112,    84,   113,   110,
-   111,   370,   136,   377,   118,   119,   120,   121,   122,   123,
-   137,   370,   370,   160,   221,   223,   224,   227,   147,   394,
-   265,   455,   456,   230,   233,   -55,     1,   -56,   462,     3,
-   523,     5,   260,   526,   527,   528,   -59,   -58,   -57,    36,
-    37,    38,   241,   269,   263,   332,   351,   339,   340,   341,
-  -199,   414,   342,   343,   352,   370,   570,   370,   353,   572,
-   370,   426,   354,   355,   357,   404,   370,   370,   -66,     1,
-     2,   384,     3,     4,     5,   500,   501,   502,   503,   385,
-     6,     7,   505,   506,   386,   387,   388,   389,   442,   265,
-   444,   265,   265,   265,   370,   370,   450,   370,   370,   392,
-   403,     8,   405,   370,     9,   429,   564,   454,    10,   463,
-   432,   433,   448,   370,   531,   532,   449,   453,   372,   373,
-   458,   374,   459,   460,   317,   318,   580,   461,   465,   466,
-   467,   468,   469,   472,   370,   370,   473,   474,   476,   477,
-   478,   319,   320,   370,   321,   322,   479,   323,   324,   325,
-   556,   480,   557,   558,   382,   482,   492,   495,   484,   485,
-   487,   488,   390,   391,   489,   438,   493,   497,   498,   543,
-   513,   507,   525,   533,   562,   576,   511,   560,   504,   588,
-   370,   534,   517,   535,   536,   537,   370,   370,   265,   538,
-   544,   265,   265,   265,   545,   550,   517,   589,   554,   555,
-   508,   584,   573,   571,   283,   284,   370,   370,   574,   575,
-   590,   370,   593,   594,   370,   272,   273,   274,   275,   276,
-   277,   278,   279,   280,   281,   596,   434,   435,   436,   599,
-   600,   213,   214,   215,   441,   358,   359,   338,   337,   559,
-   127,   360,   142,   541,   451,   452,   139,    42,   336,   529,
-   126,    94,   569,   457,   328,     0,     0,   361,   362,   363,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   508,
-     0,     0,   364,   365,   285,   286,   287,   288,   289,   290,
-   291,   292,   293,   294,   295,   296,   297,   298,   481,   366,
-   483,     0,     0,   486,     0,     0,     0,     0,     0,   490,
-   491,     0,     0,     0,     0,   174,   175,   176,   177,   178,
-   179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-   245,   246,     0,     0,     0,     0,     0,   514,   515,     0,
-   519,   520,     0,     0,     0,     0,   524,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   530,   247,   195,   196,
-   197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     0,   248,     0,   249,   250,   251,     0,   546,   547,     0,
-     0,     0,     0,     0,     0,     0,   551,     0,   358,   359,
-     0,     0,    61,    62,   360,     0,     0,   367,     0,     0,
-     0,     0,     0,     0,     1,     2,     0,     3,     4,     5,
-   361,   362,   363,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   577,     0,   364,   365,     0,     0,   581,
-   582,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   366,     0,     0,     0,     0,     0,     0,   591,
-   592,     0,     0,     0,   595,     0,     0,   597,   174,   175,
-   176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-   186,   187,   188,   245,   246,     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,
-   247,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-   204,   205,   206,     0,   248,     0,   249,   250,   251,     0,
-     0,     0,   358,   359,     0,     0,    61,    62,   360,     0,
-     0,     0,     0,   108,     0,   109,     0,     0,     1,     2,
-   367,     3,     4,     5,   361,   362,   363,     0,     0,     0,
-     0,    61,    62,     0,     0,     0,     0,     0,     0,   364,
-   365,     0,     0,     1,     2,     0,     3,     4,     5,   242,
-     0,     0,     0,     0,     0,     0,   366,     0,     0,     0,
-     0,     0,     0,     0,   243,   244,     0,     0,     0,     0,
-     0,     0,   174,   175,   176,   177,   178,   179,   180,   181,
-   182,   183,   184,   185,   186,   187,   188,   245,   246,     0,
-     0,     0,     0,     0,     0,     0,     0,   174,   175,   176,
-   177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-   187,   188,   245,   246,   247,   195,   196,   197,   198,   199,
-   200,   201,   202,   203,   204,   205,   206,     0,   248,     0,
-   249,   250,   251,     0,     0,     0,     0,     0,     0,   247,
-   195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-   205,   206,     0,   248,   367,   249,   250,   251,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   108,     0,   109,     0,   252,     0,     0,   253,
-     0,   254,     0,   255,    61,    62,     0,   104,    64,    65,
-    66,    67,    68,    69,    70,     0,     1,     2,     0,     3,
-     4,     5,    61,    62,     0,   104,    64,    65,    66,    67,
-    68,    69,    70,     0,     1,     2,     0,     3,     4,     5,
-     0,     0,     0,     0,    61,    62,    71,   104,   150,   151,
-   152,   153,   154,   155,    70,     0,     1,     2,     0,     3,
-     4,     5,    61,    62,    71,   104,   150,   151,   152,   153,
-   154,   155,    70,     0,     1,     2,     0,     3,     4,     5,
-     0,     0,     0,     0,    61,    62,    71,   104,    64,    65,
-    66,    67,    68,    69,    70,     0,     1,     2,     0,     3,
-     4,     5,    61,    62,    71,   145,    64,    65,    66,    67,
-    68,    69,    70,     0,     1,     2,   131,     3,     4,     5,
-     0,     0,     0,     0,    61,    62,    71,   104,    64,    65,
-    66,    67,    68,    69,    70,     0,     1,     2,     0,     3,
-     4,     5,     0,     0,    71,     0,    72,     0,     0,    73,
-     0,     0,    74,     0,    75,   105,   327,     0,     0,     0,
-     0,     0,     0,     0,    72,     0,    71,    73,     0,     0,
-    74,     0,    75,   138,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    72,     0,     0,    73,
-     0,     0,    74,     0,    75,   349,     0,     0,     0,     0,
-     0,     0,     0,     0,    72,     0,     0,    73,     0,     0,
-    74,     0,    75,   413,     0,     0,   146,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    72,     0,     0,    73,
-     0,     0,    74,     0,    75,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,    72,     0,     0,    73,     0,     0,
-    74,     0,    75,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    72,     0,     0,    73,
-     0,     0,    74,     0,    75,    61,    62,     0,   104,   150,
-   151,   152,   153,   154,   155,    70,     0,     1,     2,     0,
-     3,     4,     5,    61,    62,     0,   104,    64,    65,    66,
-    67,    68,    69,    70,     0,     1,     2,     0,     3,     4,
-     5,     0,     0,     0,     0,     0,     0,    71,     0,     0,
-     0,     0,     0,     0,     0,   425,     0,     0,     0,     0,
-     0,     0,     0,    61,    62,    71,   104,    64,    65,    66,
-    67,    68,    69,    70,     0,     1,     2,     0,     3,     4,
-     5,    61,    62,     0,    63,    64,    65,    66,    67,    68,
-    69,    70,     0,     1,     2,   510,     3,     4,     5,     0,
-     0,     0,     0,    61,    62,    71,   104,   150,   151,   152,
-   153,   154,   155,    70,     0,     1,     2,     0,     3,     4,
-     5,    61,    62,    71,   145,    64,    65,    66,    67,    68,
-    69,    70,     0,     1,     2,     0,     3,     4,     5,     0,
-     0,     0,     0,     0,     0,    71,     0,    72,     0,     0,
-    73,     0,   344,    74,     0,    75,     0,     0,     0,     0,
-     0,     0,     0,    71,     0,    72,     0,     0,    73,     0,
-     0,    74,     0,    75,    61,    62,     0,   104,    64,    65,
-    66,    67,    68,    69,    70,     0,     1,     2,     0,     3,
-     4,     5,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,    72,     0,     0,    73,     0,
-     0,    74,     0,    75,     0,     0,    71,     0,     0,     0,
-     0,     0,     0,    72,     0,     0,    73,     0,     0,    74,
-     0,    75,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,    72,     0,     0,    73,     0,
-     0,    74,     0,    75,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    72,     0,     0,    73,     0,     0,    74,
-     0,    75,    61,    62,     0,   264,    64,    65,    66,    67,
-    68,    69,    70,     0,     1,     2,     0,     3,     4,     5,
-    61,    62,     0,   104,   150,   151,   152,   153,   154,   155,
-    70,     0,     1,     2,     0,     3,     4,     5,     0,     0,
-     0,     0,     0,     0,    71,     0,    72,     0,     0,    73,
-     0,     0,    74,     0,    75,     0,     0,     0,     0,     0,
-    61,    62,    71,   104,    64,    65,    66,    67,    68,    69,
-   516,     0,     1,     2,     0,     3,     4,     5,    61,    62,
-     0,   104,    64,    65,    66,    67,    68,    69,   568,     0,
-     1,     2,     0,     3,     4,     5,     0,     0,     0,     0,
-     0,     0,    71,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    71,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,    72,     0,     0,    73,     0,     0,
-    74,     0,    75,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,    72,     0,     0,    73,     0,     0,    74,     0,
-   347,     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,   165,     0,
-     0,     0,    72,     0,     0,    73,     0,     0,    74,     0,
-    75,     0,     0,     0,     0,     0,     0,   166,   167,     0,
-    72,     0,     0,    73,     0,     0,    74,     0,    75,   168,
-   169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-   179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-   189,   190,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   191,   192,   193,     0,     0,   194,   195,   196,
-   197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-   207,   208,   209,   210,   211,   212
-};
-
-static const short yycheck[] = {     0,
-    26,   170,   158,    11,   117,   426,     4,   230,    11,   193,
-    21,    28,   171,   301,    11,    16,   124,     0,    29,   253,
-   254,   564,    34,   147,   208,   209,   210,   211,   212,    34,
-   143,   215,    11,    16,   158,   146,   148,   580,    38,   334,
-   335,     0,   148,    52,   150,    35,   158,    37,    53,    75,
-   156,   147,     3,     4,     5,     6,    53,    66,   217,    18,
-    19,    20,   158,    22,    23,    24,   147,   147,   147,    57,
-   151,    30,    31,    99,    53,    26,    27,   103,   158,   158,
-    11,    39,    40,   109,   117,   118,    17,    45,   114,    90,
-   511,   147,    51,    51,   147,    54,    32,    33,   124,    58,
-   156,   134,   135,   156,   137,   138,   146,   140,   141,   142,
-   136,   137,   147,   347,   140,    42,    43,    44,   144,   154,
-    47,    18,   134,   135,   136,   546,   547,   139,    46,   424,
-    48,   147,   316,   367,   134,   135,   136,   147,   154,   139,
-   157,   151,   168,   134,   135,   136,   154,   158,   139,    19,
-   146,   154,    22,   265,    24,   267,   268,   146,   270,   157,
-   581,   582,   146,   271,   452,   191,   192,   193,   194,    22,
-   148,   148,   150,   150,    21,   152,   154,   148,   161,   150,
-   151,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-   147,   303,   152,   481,   151,   483,   148,   223,   150,   311,
-   312,   385,    22,   387,   388,   389,   314,   233,    42,    43,
-    44,    45,    46,    47,    48,   148,    50,   150,   151,     7,
-     8,     3,     4,     5,     6,    22,   339,   340,   341,   342,
-   343,    19,    20,    22,    22,    23,    24,   113,   114,   352,
-   353,   354,   530,   147,   148,   271,   150,   150,   147,   148,
-   473,   150,    20,   110,   111,    23,   282,     4,   414,   143,
-   144,   145,     4,   375,   376,   377,    42,    37,    44,    81,
-    82,   383,   153,   299,    60,    61,    62,    63,    64,    65,
-   153,   393,   394,     4,    22,   147,   151,   156,   314,   315,
-   316,   404,   405,   151,   150,     9,    19,     9,   411,    22,
-   484,    24,   414,   487,   488,   489,     9,     9,     9,   143,
-   144,   145,     9,    11,    55,   156,    22,   150,   150,   150,
-     0,   347,   150,   150,   150,   437,   549,   439,   150,   552,
-   442,   357,   150,   147,   150,   150,   448,   449,    18,    19,
-    20,   147,    22,    23,    24,   458,   459,   460,   461,   147,
-    30,    31,   465,   466,   147,   147,   147,   147,   152,   385,
-   386,   387,   388,   389,   476,   477,   392,   479,   480,    38,
-    38,    51,   150,   485,    54,    59,   545,   403,    58,   156,
-   147,   147,   147,   495,   497,   498,   147,   147,   267,   268,
-   147,   270,   147,   147,   117,   118,   565,   147,   147,   147,
-    38,    22,     4,   147,   516,   517,   151,    22,    17,    17,
-   150,   134,   135,   525,   137,   138,   147,   140,   141,   142,
-   533,   147,   535,   536,   303,     4,   150,   453,   147,   147,
-   147,   147,   311,   312,   147,    53,   147,   147,   147,    22,
-   147,   467,   147,   147,    17,     4,   472,    53,   156,    17,
-   562,   151,   478,   147,   147,   151,   568,   569,   484,   151,
-   147,   487,   488,   489,   152,   154,   492,    17,   151,   151,
-   471,   147,   151,   154,    26,    27,   588,   589,   151,   151,
-   147,   593,    17,    71,   596,    90,    91,    92,    93,    94,
-    95,    96,    97,    98,    99,    17,   375,   376,   377,     0,
-     0,   127,   127,   127,   383,     3,     4,   246,   245,   540,
-    90,     9,   109,   512,   393,   394,   103,    16,   233,   492,
-    87,    54,   548,   406,   223,    -1,    -1,    25,    26,    27,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   540,
-    -1,    -1,    40,    41,    96,    97,    98,    99,   100,   101,
-   102,   103,   104,   105,   106,   107,   108,   109,   437,    57,
-   439,    -1,    -1,   442,    -1,    -1,    -1,    -1,    -1,   448,
-   449,    -1,    -1,    -1,    -1,    73,    74,    75,    76,    77,
-    78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-    88,    89,    -1,    -1,    -1,    -1,    -1,   476,   477,    -1,
-   479,   480,    -1,    -1,    -1,    -1,   485,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   495,   115,   116,   117,
-   118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-    -1,   129,    -1,   131,   132,   133,    -1,   516,   517,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   525,    -1,     3,     4,
-    -1,    -1,     7,     8,     9,    -1,    -1,   155,    -1,    -1,
-    -1,    -1,    -1,    -1,    19,    20,    -1,    22,    23,    24,
-    25,    26,    27,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   562,    -1,    40,    41,    -1,    -1,   568,
-   569,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    57,    -1,    -1,    -1,    -1,    -1,    -1,   588,
-   589,    -1,    -1,    -1,   593,    -1,    -1,   596,    73,    74,
-    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-    85,    86,    87,    88,    89,    -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,
-   115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-   125,   126,   127,    -1,   129,    -1,   131,   132,   133,    -1,
-    -1,    -1,     3,     4,    -1,    -1,     7,     8,     9,    -1,
-    -1,    -1,    -1,   148,    -1,   150,    -1,    -1,    19,    20,
-   155,    22,    23,    24,    25,    26,    27,    -1,    -1,    -1,
-    -1,     7,     8,    -1,    -1,    -1,    -1,    -1,    -1,    40,
-    41,    -1,    -1,    19,    20,    -1,    22,    23,    24,    25,
-    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    40,    41,    -1,    -1,    -1,    -1,
-    -1,    -1,    73,    74,    75,    76,    77,    78,    79,    80,
-    81,    82,    83,    84,    85,    86,    87,    88,    89,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    73,    74,    75,
-    76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-    86,    87,    88,    89,   115,   116,   117,   118,   119,   120,
-   121,   122,   123,   124,   125,   126,   127,    -1,   129,    -1,
-   131,   132,   133,    -1,    -1,    -1,    -1,    -1,    -1,   115,
-   116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-   126,   127,    -1,   129,   155,   131,   132,   133,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   148,    -1,   150,    -1,   152,    -1,    -1,   155,
-    -1,   157,    -1,   159,     7,     8,    -1,    10,    11,    12,
-    13,    14,    15,    16,    17,    -1,    19,    20,    -1,    22,
-    23,    24,     7,     8,    -1,    10,    11,    12,    13,    14,
-    15,    16,    17,    -1,    19,    20,    -1,    22,    23,    24,
-    -1,    -1,    -1,    -1,     7,     8,    49,    10,    11,    12,
-    13,    14,    15,    16,    17,    -1,    19,    20,    -1,    22,
-    23,    24,     7,     8,    49,    10,    11,    12,    13,    14,
-    15,    16,    17,    -1,    19,    20,    -1,    22,    23,    24,
-    -1,    -1,    -1,    -1,     7,     8,    49,    10,    11,    12,
-    13,    14,    15,    16,    17,    -1,    19,    20,    -1,    22,
-    23,    24,     7,     8,    49,    10,    11,    12,    13,    14,
-    15,    16,    17,    -1,    19,    20,    39,    22,    23,    24,
-    -1,    -1,    -1,    -1,     7,     8,    49,    10,    11,    12,
-    13,    14,    15,    16,    17,    -1,    19,    20,    -1,    22,
-    23,    24,    -1,    -1,    49,    -1,   149,    -1,    -1,   152,
-    -1,    -1,   155,    -1,   157,   158,    39,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   149,    -1,    49,   152,    -1,    -1,
-   155,    -1,   157,   158,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   149,    -1,    -1,   152,
-    -1,    -1,   155,    -1,   157,   158,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   149,    -1,    -1,   152,    -1,    -1,
-   155,    -1,   157,   158,    -1,    -1,   121,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   149,    -1,    -1,   152,
-    -1,    -1,   155,    -1,   157,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   149,    -1,    -1,   152,    -1,    -1,
-   155,    -1,   157,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   149,    -1,    -1,   152,
-    -1,    -1,   155,    -1,   157,     7,     8,    -1,    10,    11,
-    12,    13,    14,    15,    16,    17,    -1,    19,    20,    -1,
-    22,    23,    24,     7,     8,    -1,    10,    11,    12,    13,
-    14,    15,    16,    17,    -1,    19,    20,    -1,    22,    23,
-    24,    -1,    -1,    -1,    -1,    -1,    -1,    49,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,     7,     8,    49,    10,    11,    12,    13,
-    14,    15,    16,    17,    -1,    19,    20,    -1,    22,    23,
-    24,     7,     8,    -1,    10,    11,    12,    13,    14,    15,
-    16,    17,    -1,    19,    20,    39,    22,    23,    24,    -1,
-    -1,    -1,    -1,     7,     8,    49,    10,    11,    12,    13,
-    14,    15,    16,    17,    -1,    19,    20,    -1,    22,    23,
-    24,     7,     8,    49,    10,    11,    12,    13,    14,    15,
-    16,    17,    -1,    19,    20,    -1,    22,    23,    24,    -1,
-    -1,    -1,    -1,    -1,    -1,    49,    -1,   149,    -1,    -1,
-   152,    -1,   154,   155,    -1,   157,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    49,    -1,   149,    -1,    -1,   152,    -1,
-    -1,   155,    -1,   157,     7,     8,    -1,    10,    11,    12,
-    13,    14,    15,    16,    17,    -1,    19,    20,    -1,    22,
-    23,    24,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   149,    -1,    -1,   152,    -1,
-    -1,   155,    -1,   157,    -1,    -1,    49,    -1,    -1,    -1,
-    -1,    -1,    -1,   149,    -1,    -1,   152,    -1,    -1,   155,
-    -1,   157,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   149,    -1,    -1,   152,    -1,
-    -1,   155,    -1,   157,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   149,    -1,    -1,   152,    -1,    -1,   155,
-    -1,   157,     7,     8,    -1,    10,    11,    12,    13,    14,
-    15,    16,    17,    -1,    19,    20,    -1,    22,    23,    24,
-     7,     8,    -1,    10,    11,    12,    13,    14,    15,    16,
-    17,    -1,    19,    20,    -1,    22,    23,    24,    -1,    -1,
-    -1,    -1,    -1,    -1,    49,    -1,   149,    -1,    -1,   152,
-    -1,    -1,   155,    -1,   157,    -1,    -1,    -1,    -1,    -1,
-     7,     8,    49,    10,    11,    12,    13,    14,    15,    16,
-    17,    -1,    19,    20,    -1,    22,    23,    24,     7,     8,
-    -1,    10,    11,    12,    13,    14,    15,    16,    17,    -1,
-    19,    20,    -1,    22,    23,    24,    -1,    -1,    -1,    -1,
-    -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   149,    -1,    -1,   152,    -1,    -1,
-   155,    -1,   157,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   149,    -1,    -1,   152,    -1,    -1,   155,    -1,
-   157,    -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,    36,    -1,
-    -1,    -1,   149,    -1,    -1,   152,    -1,    -1,   155,    -1,
-   157,    -1,    -1,    -1,    -1,    -1,    -1,    55,    56,    -1,
-   149,    -1,    -1,   152,    -1,    -1,   155,    -1,   157,    67,
-    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-    78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-    88,    89,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   110,   111,   112,    -1,    -1,   115,   116,   117,
-   118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-   128,   129,   130,   131,   132,   133
-};
-/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/share/bison.simple"
-/* This file comes from bison-1.28.  */
-
-/* Skeleton output parser for bison,
-   Copyright (C) 1984, 1989, 1990 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 2, 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, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
-
-/* As a special exception, when this file is copied by Bison into a
-   Bison output file, you may use that output file without restriction.
-   This special exception was added by the Free Software Foundation
-   in version 1.24 of Bison.  */
-
-/* This is the parser code that is written into each bison parser
-  when the %semantic_parser declaration is not specified in the grammar.
-  It was written by Richard Stallman by simplifying the hairy parser
-  used when %semantic_parser is specified.  */
-
-#ifndef YYSTACK_USE_ALLOCA
-#ifdef alloca
-#define YYSTACK_USE_ALLOCA
-#else /* alloca not defined */
-#ifdef __GNUC__
-#define YYSTACK_USE_ALLOCA
-#define alloca __builtin_alloca
-#else /* not GNU C.  */
-#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
-#define YYSTACK_USE_ALLOCA
-#include <alloca.h>
-#else /* not sparc */
-/* We think this test detects Watcom and Microsoft C.  */
-/* This used to test MSDOS, but that is a bad idea
-   since that symbol is in the user namespace.  */
-#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
-#if 0 /* No need for malloc.h, which pollutes the namespace;
-	 instead, just don't use alloca.  */
-#include <malloc.h>
-#endif
-#else /* not MSDOS, or __TURBOC__ */
-#if defined(_AIX)
-/* I don't know what this was needed for, but it pollutes the namespace.
-   So I turned it off.   rms, 2 May 1997.  */
-/* #include <malloc.h>  */
- #pragma alloca
-#define YYSTACK_USE_ALLOCA
-#else /* not MSDOS, or __TURBOC__, or _AIX */
-#if 0
-#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
-		 and on HPUX 10.  Eventually we can turn this on.  */
-#define YYSTACK_USE_ALLOCA
-#define alloca __builtin_alloca
-#endif /* __hpux */
-#endif
-#endif /* not _AIX */
-#endif /* not MSDOS, or __TURBOC__ */
-#endif /* not sparc */
-#endif /* not GNU C */
-#endif /* alloca not defined */
-#endif /* YYSTACK_USE_ALLOCA not defined */
-
-#ifdef YYSTACK_USE_ALLOCA
-#define YYSTACK_ALLOC alloca
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
 #else
-#define YYSTACK_ALLOC malloc
+typedef unsigned char yytype_uint8;
 #endif
 
-/* Note: there must be only one dollar sign in this file.
-   It is replaced by the list of actions, each action
-   as one case of the switch.  */
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int 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 && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
+# else
+#  define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if 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
+
+/* Suppress unused-variable warnings by "using" E.  */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int i)
+#else
+static int
+YYID (i)
+    int i;
+#endif
+{
+  return i;
+}
+#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 _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     ifndef _STDLIB_H
+#      define _STDLIB_H 1
+#     endif
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (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 _STDLIB_H \
+       && ! ((defined YYMALLOC || defined malloc) \
+	     && (defined YYFREE || defined free)))
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   ifndef _STDLIB_H
+#    define _STDLIB_H 1
+#   endif
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+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;
+  YYSTYPE yyvs;
+  };
+
+/* 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)
+
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)		\
+      do					\
+	{					\
+	  YYSIZE_T yyi;				\
+	  for (yyi = 0; yyi < (Count); yyi++)	\
+	    (To)[yyi] = (From)[yyi];		\
+	}					\
+      while (YYID (0))
+#  endif
+# endif
+
+/* 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)					\
+    do									\
+      {									\
+	YYSIZE_T yynewbytes;						\
+	YYCOPY (&yyptr->Stack, Stack, yysize);				\
+	Stack = &yyptr->Stack;						\
+	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+	yyptr += yynewbytes / sizeof (*yyptr);				\
+      }									\
+    while (YYID (0))
+
+#endif
+
+/* YYFINAL -- State number of the termination state.  */
+#define YYFINAL  43
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   1754
+
+/* YYNTOKENS -- Number of terminals.  */
+#define YYNTOKENS  162
+/* YYNNTS -- Number of nonterminals.  */
+#define YYNNTS  82
+/* YYNRULES -- Number of rules.  */
+#define YYNRULES  314
+/* YYNRULES -- Number of states.  */
+#define YYNSTATES  602
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   402
+
+#define YYTRANSLATE(YYX)						\
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+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,     2,     2,     2,     2,     2,     2,     2,
+     152,   153,   150,     2,   149,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     157,   148,   158,     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,   154,   151,   156,     2,     2,     2,     2,     2,   161,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     155,     2,     2,   159,     2,   160,     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,     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
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const yytype_uint16 yyprhs[] =
+{
+       0,     0,     3,     5,     7,     9,    11,    13,    15,    17,
+      19,    21,    23,    25,    27,    29,    31,    33,    35,    37,
+      39,    41,    43,    45,    47,    49,    51,    53,    55,    57,
+      59,    61,    63,    65,    67,    69,    71,    73,    75,    77,
+      79,    81,    83,    85,    87,    89,    91,    93,    95,    97,
+      99,   101,   103,   105,   107,   109,   111,   113,   115,   117,
+     119,   121,   123,   125,   127,   129,   130,   133,   134,   136,
+     138,   140,   141,   144,   146,   148,   150,   152,   154,   156,
+     158,   160,   161,   163,   165,   167,   168,   170,   172,   173,
+     175,   177,   179,   181,   182,   184,   186,   187,   189,   191,
+     193,   195,   197,   200,   202,   204,   206,   208,   210,   212,
+     214,   216,   218,   219,   222,   224,   226,   228,   230,   232,
+     234,   235,   238,   239,   242,   243,   247,   250,   251,   253,
+     254,   258,   260,   263,   265,   267,   269,   271,   273,   275,
+     277,   279,   281,   284,   286,   289,   295,   301,   307,   313,
+     317,   320,   326,   331,   334,   336,   338,   340,   344,   346,
+     350,   352,   353,   355,   359,   364,   368,   372,   377,   382,
+     386,   393,   399,   402,   405,   408,   411,   414,   417,   420,
+     423,   426,   429,   432,   435,   442,   448,   457,   464,   471,
+     479,   487,   494,   503,   512,   516,   518,   520,   522,   524,
+     525,   528,   535,   537,   538,   540,   543,   544,   548,   549,
+     553,   557,   561,   565,   566,   574,   575,   584,   585,   594,
+     600,   603,   607,   609,   613,   617,   621,   625,   627,   628,
+     634,   638,   640,   644,   646,   647,   657,   659,   661,   666,
+     668,   670,   673,   677,   678,   680,   682,   684,   686,   688,
+     690,   692,   694,   696,   700,   702,   708,   710,   712,   714,
+     716,   718,   720,   723,   726,   729,   733,   736,   737,   739,
+     742,   745,   749,   759,   769,   778,   793,   795,   797,   804,
+     810,   813,   820,   828,   832,   836,   842,   848,   849,   850,
+     854,   857,   859,   865,   871,   878,   885,   890,   897,   902,
+     907,   914,   921,   924,   933,   935,   937,   938,   942,   949,
+     953,   960,   963,   969,   977
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+static const yytype_int16 yyrhs[] =
+{
+     206,     0,    -1,    73,    -1,    74,    -1,    75,    -1,    76,
+      -1,    77,    -1,    78,    -1,    79,    -1,    80,    -1,    81,
+      -1,    85,    -1,    86,    -1,    87,    -1,    82,    -1,    83,
+      -1,    84,    -1,   116,    -1,   117,    -1,   118,    -1,   119,
+      -1,   120,    -1,   121,    -1,   122,    -1,   123,    -1,   124,
+      -1,   125,    -1,   126,    -1,   127,    -1,    90,    -1,    91,
+      -1,    92,    -1,    93,    -1,    94,    -1,    95,    -1,    96,
+      -1,    97,    -1,    98,    -1,    99,    -1,   100,    -1,   101,
+      -1,   102,    -1,   103,    -1,   104,    -1,   105,    -1,   106,
+      -1,   107,    -1,   108,    -1,   109,    -1,    96,    -1,    97,
+      -1,    98,    -1,    99,    -1,    26,    -1,    27,    -1,    11,
+      -1,    12,    -1,    13,    -1,    16,    -1,    15,    -1,    14,
+      -1,    19,    -1,    22,    -1,    24,    -1,   170,    -1,    -1,
+     170,   148,    -1,    -1,    20,    -1,    23,    -1,   175,    -1,
+      -1,   173,   148,    -1,    42,    -1,    44,    -1,    43,    -1,
+      45,    -1,    47,    -1,    46,    -1,    48,    -1,    50,    -1,
+      -1,   145,    -1,   146,    -1,   147,    -1,    -1,    46,    -1,
+      48,    -1,    -1,    42,    -1,    43,    -1,    44,    -1,    47,
+      -1,    -1,    44,    -1,    42,    -1,    -1,    61,    -1,    62,
+      -1,    63,    -1,    64,    -1,    65,    -1,    60,     4,    -1,
+     135,    -1,   117,    -1,   134,    -1,   118,    -1,   137,    -1,
+     138,    -1,   140,    -1,   141,    -1,   142,    -1,    -1,   184,
+     183,    -1,   136,    -1,   139,    -1,   135,    -1,   134,    -1,
+     144,    -1,   143,    -1,    -1,   186,   185,    -1,    -1,    53,
+       4,    -1,    -1,   149,    53,     4,    -1,    34,    22,    -1,
+      -1,   189,    -1,    -1,   149,   192,   191,    -1,   189,    -1,
+      53,     4,    -1,    11,    -1,    12,    -1,    13,    -1,    16,
+      -1,    15,    -1,    14,    -1,    17,    -1,    49,    -1,   193,
+      -1,   194,   150,    -1,   228,    -1,   151,     4,    -1,   194,
+     152,   198,   153,   186,    -1,    10,   152,   198,   153,   186,
+      -1,   154,     4,   155,   194,   156,    -1,   157,     4,   155,
+     194,   158,    -1,   159,   199,   160,    -1,   159,   160,    -1,
+     157,   159,   199,   160,   158,    -1,   157,   159,   160,   158,
+      -1,   194,   184,    -1,   194,    -1,    10,    -1,   195,    -1,
+     197,   149,   195,    -1,   197,    -1,   197,   149,    39,    -1,
+      39,    -1,    -1,   194,    -1,   199,   149,   194,    -1,   194,
+     154,   202,   156,    -1,   194,   154,   156,    -1,   194,   161,
+      22,    -1,   194,   157,   202,   158,    -1,   194,   159,   202,
+     160,    -1,   194,   159,   160,    -1,   194,   157,   159,   202,
+     160,   158,    -1,   194,   157,   159,   160,   158,    -1,   194,
+      40,    -1,   194,    41,    -1,   194,   228,    -1,   194,   201,
+      -1,   194,    25,    -1,   168,     3,    -1,   168,     5,    -1,
+     168,     4,    -1,   168,     6,    -1,    11,    26,    -1,    11,
+      27,    -1,   169,     9,    -1,   165,   152,   200,    38,   194,
+     153,    -1,   115,   152,   200,   239,   153,    -1,   129,   152,
+     200,   149,   200,   149,   200,   153,    -1,   163,   152,   200,
+     149,   200,   153,    -1,   164,   152,   200,   149,   200,   153,
+      -1,    88,   166,   152,   200,   149,   200,   153,    -1,    89,
+     167,   152,   200,   149,   200,   153,    -1,   131,   152,   200,
+     149,   200,   153,    -1,   132,   152,   200,   149,   200,   149,
+     200,   153,    -1,   133,   152,   200,   149,   200,   149,   200,
+     153,    -1,   202,   149,   200,    -1,   200,    -1,    32,    -1,
+      33,    -1,    37,    -1,    -1,   196,   228,    -1,   121,   152,
+     205,    38,   194,   153,    -1,   207,    -1,    -1,   208,    -1,
+     207,   208,    -1,    -1,    31,   209,   224,    -1,    -1,    30,
+     210,   225,    -1,    58,    57,   214,    -1,   172,    18,   194,
+      -1,   172,    18,    10,    -1,    -1,   174,   178,   204,   203,
+     200,   211,   191,    -1,    -1,   174,   176,   178,   204,   203,
+     200,   212,   191,    -1,    -1,   174,   177,   178,   204,   203,
+     194,   213,   191,    -1,   174,   178,    35,   181,   205,    -1,
+      51,   215,    -1,    54,   148,   216,    -1,    22,    -1,    52,
+     148,    22,    -1,    66,   148,    22,    -1,   154,   217,   156,
+      -1,   217,   149,    22,    -1,    22,    -1,    -1,   218,   149,
+     194,   184,   171,    -1,   194,   184,   171,    -1,   218,    -1,
+     218,   149,    39,    -1,    39,    -1,    -1,   182,   196,   173,
+     152,   219,   153,   186,   190,   187,    -1,    28,    -1,   159,
+      -1,   180,   178,   220,   221,    -1,    29,    -1,   160,    -1,
+     231,   223,    -1,   179,   178,   220,    -1,    -1,    59,    -1,
+       3,    -1,     4,    -1,     9,    -1,    26,    -1,    27,    -1,
+      40,    -1,    41,    -1,    25,    -1,   157,   202,   158,    -1,
+     201,    -1,    57,   226,    22,   149,    22,    -1,     7,    -1,
+       8,    -1,   170,    -1,   173,    -1,   228,    -1,   227,    -1,
+     194,   229,    -1,   231,   232,    -1,   222,   232,    -1,   233,
+     172,   234,    -1,   233,   236,    -1,    -1,    21,    -1,    67,
+     230,    -1,    67,    10,    -1,    68,    17,   229,    -1,    68,
+      11,   229,   149,    17,   229,   149,    17,   229,    -1,    69,
+     168,   229,   149,    17,   229,   154,   235,   156,    -1,    69,
+     168,   229,   149,    17,   229,   154,   156,    -1,    70,   182,
+     196,   229,   152,   238,   153,   186,    38,    17,   229,    71,
+      17,   229,    -1,    71,    -1,    72,    -1,   235,   168,   227,
+     149,    17,   229,    -1,   168,   227,   149,    17,   229,    -1,
+     172,   241,    -1,   194,   154,   229,   149,   229,   156,    -1,
+     237,   149,   154,   229,   149,   229,   156,    -1,   194,   229,
+     184,    -1,    17,   229,   184,    -1,   238,   149,   194,   229,
+     184,    -1,   238,   149,    17,   229,   184,    -1,    -1,    -1,
+     239,   149,   230,    -1,    56,    55,    -1,    55,    -1,   163,
+     194,   229,   149,   229,    -1,   164,   194,   229,   149,   229,
+      -1,    88,   166,   194,   229,   149,   229,    -1,    89,   167,
+     194,   229,   149,   229,    -1,   165,   230,    38,   194,    -1,
+     129,   230,   149,   230,   149,   230,    -1,   130,   230,   149,
+     194,    -1,   131,   230,   149,   230,    -1,   132,   230,   149,
+     230,   149,   230,    -1,   133,   230,   149,   230,   149,   230,
+      -1,   128,   237,    -1,   240,   182,   196,   229,   152,   238,
+     153,   186,    -1,   243,    -1,    36,    -1,    -1,   110,   194,
+     188,    -1,   110,   194,   149,    11,   229,   188,    -1,   111,
+     194,   188,    -1,   111,   194,   149,    11,   229,   188,    -1,
+     112,   230,    -1,   242,   113,   194,   229,   188,    -1,   242,
+     114,   230,   149,   194,   229,   188,    -1,   115,   194,   229,
+     239,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const yytype_uint16 yyrline[] =
+{
+       0,  1128,  1128,  1128,  1128,  1128,  1128,  1128,  1128,  1128,
+    1128,  1129,  1129,  1129,  1129,  1129,  1129,  1130,  1130,  1130,
+    1130,  1130,  1130,  1131,  1131,  1131,  1131,  1131,  1131,  1134,
+    1134,  1135,  1135,  1136,  1136,  1137,  1137,  1138,  1138,  1142,
+    1142,  1143,  1143,  1144,  1144,  1145,  1145,  1146,  1146,  1147,
+    1147,  1148,  1148,  1149,  1150,  1155,  1156,  1156,  1156,  1156,
+    1156,  1158,  1158,  1158,  1159,  1159,  1163,  1167,  1172,  1172,
+    1174,  1175,  1180,  1186,  1187,  1188,  1189,  1190,  1194,  1195,
+    1196,  1200,  1201,  1202,  1203,  1207,  1208,  1209,  1213,  1214,
+    1215,  1216,  1217,  1221,  1222,  1223,  1226,  1227,  1228,  1229,
+    1230,  1231,  1232,  1239,  1240,  1241,  1242,  1243,  1244,  1245,
+    1246,  1247,  1250,  1251,  1256,  1257,  1258,  1259,  1260,  1261,
+    1264,  1265,  1272,  1273,  1279,  1280,  1288,  1296,  1297,  1302,
+    1303,  1304,  1309,  1322,  1322,  1322,  1322,  1322,  1322,  1322,
+    1325,  1329,  1333,  1340,  1345,  1353,  1383,  1414,  1419,  1431,
+    1441,  1445,  1455,  1462,  1469,  1476,  1481,  1486,  1493,  1494,
+    1501,  1508,  1516,  1522,  1534,  1562,  1578,  1605,  1633,  1659,
+    1679,  1705,  1725,  1737,  1744,  1810,  1820,  1830,  1836,  1846,
+    1852,  1862,  1867,  1872,  1885,  1897,  1919,  1927,  1933,  1944,
+    1949,  1954,  1960,  1966,  1975,  1979,  1987,  1987,  1990,  1990,
+    1993,  2005,  2026,  2031,  2039,  2040,  2044,  2044,  2048,  2048,
+    2051,  2054,  2078,  2089,  2089,  2100,  2099,  2109,  2108,  2119,
+    2159,  2162,  2168,  2178,  2182,  2187,  2189,  2194,  2199,  2208,
+    2218,  2229,  2233,  2242,  2251,  2256,  2377,  2377,  2379,  2388,
+    2388,  2390,  2395,  2407,  2411,  2416,  2420,  2424,  2428,  2432,
+    2436,  2440,  2444,  2448,  2473,  2477,  2487,  2491,  2495,  2500,
+    2507,  2507,  2513,  2522,  2526,  2535,  2544,  2553,  2557,  2564,
+    2568,  2572,  2577,  2587,  2606,  2615,  2695,  2699,  2706,  2717,
+    2730,  2740,  2751,  2761,  2770,  2776,  2785,  2791,  2794,  2795,
+    2802,  2806,  2811,  2827,  2844,  2858,  2872,  2884,  2892,  2899,
+    2905,  2911,  2917,  2932,  3017,  3022,  3026,  3033,  3040,  3048,
+    3055,  3063,  3071,  3085,  3102
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* 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", "ESINT64VAL", "EUINT64VAL", "ESAPINTVAL",
+  "EUAPINTVAL", "LOCALVAL_ID", "GLOBALVAL_ID", "FPVAL", "VOID", "INTTYPE",
+  "FLOAT", "DOUBLE", "X86_FP80", "FP128", "PPC_FP128", "LABEL", "TYPE",
+  "LOCALVAR", "GLOBALVAR", "LABELSTR", "STRINGCONSTANT",
+  "ATSTRINGCONSTANT", "PCTSTRINGCONSTANT", "ZEROINITIALIZER", "TRUETOK",
+  "FALSETOK", "BEGINTOK", "ENDTOK", "DECLARE", "DEFINE", "GLOBAL",
+  "CONSTANT", "SECTION", "ALIAS", "VOLATILE", "THREAD_LOCAL", "TO",
+  "DOTDOTDOT", "NULL_TOK", "UNDEF", "INTERNAL", "LINKONCE", "WEAK",
+  "APPENDING", "DLLIMPORT", "DLLEXPORT", "EXTERN_WEAK", "OPAQUE",
+  "EXTERNAL", "TARGET", "TRIPLE", "ALIGN", "DEPLIBS", "CALL", "TAIL",
+  "ASM_TOK", "MODULE", "SIDEEFFECT", "CC_TOK", "CCC_TOK", "FASTCC_TOK",
+  "COLDCC_TOK", "X86_STDCALLCC_TOK", "X86_FASTCALLCC_TOK", "DATALAYOUT",
+  "RET", "BR", "SWITCH", "INVOKE", "UNWIND", "UNREACHABLE", "ADD", "SUB",
+  "MUL", "UDIV", "SDIV", "FDIV", "UREM", "SREM", "FREM", "AND", "OR",
+  "XOR", "SHL", "LSHR", "ASHR", "ICMP", "FCMP", "EQ", "NE", "SLT", "SGT",
+  "SLE", "SGE", "ULT", "UGT", "ULE", "UGE", "OEQ", "ONE", "OLT", "OGT",
+  "OLE", "OGE", "ORD", "UNO", "UEQ", "UNE", "MALLOC", "ALLOCA", "FREE",
+  "LOAD", "STORE", "GETELEMENTPTR", "TRUNC", "ZEXT", "SEXT", "FPTRUNC",
+  "FPEXT", "BITCAST", "UITOFP", "SITOFP", "FPTOUI", "FPTOSI", "INTTOPTR",
+  "PTRTOINT", "PHI_TOK", "SELECT", "VAARG", "EXTRACTELEMENT",
+  "INSERTELEMENT", "SHUFFLEVECTOR", "SIGNEXT", "ZEROEXT", "NORETURN",
+  "INREG", "SRET", "NOUNWIND", "NOALIAS", "BYVAL", "NEST", "CONST", "PURE",
+  "DEFAULT", "HIDDEN", "PROTECTED", "'='", "','", "'*'", "'\\\\'", "'('",
+  "')'", "'['", "'x'", "']'", "'<'", "'>'", "'{'", "'}'", "'c'", "$accept",
+  "ArithmeticOps", "LogicalOps", "CastOps", "IPredicates", "FPredicates",
+  "IntType", "FPType", "LocalName", "OptLocalName", "OptLocalAssign",
+  "GlobalName", "OptGlobalAssign", "GlobalAssign", "GVInternalLinkage",
+  "GVExternalLinkage", "GVVisibilityStyle", "FunctionDeclareLinkage",
+  "FunctionDefineLinkage", "AliasLinkage", "OptCallingConv", "ParamAttr",
+  "OptParamAttrs", "FuncAttr", "OptFuncAttrs", "OptAlign", "OptCAlign",
+  "SectionString", "OptSection", "GlobalVarAttributes",
+  "GlobalVarAttribute", "PrimType", "Types", "ArgType", "ResultTypes",
+  "ArgTypeList", "ArgTypeListI", "TypeListI", "ConstVal", "ConstExpr",
+  "ConstVector", "GlobalType", "ThreadLocal", "AliaseeRef", "Module",
+  "DefinitionList", "Definition", "@1", "@2", "@3", "@4", "@5", "AsmBlock",
+  "TargetDefinition", "LibrariesDefinition", "LibList", "ArgListH",
+  "ArgList", "FunctionHeaderH", "BEGIN", "FunctionHeader", "END",
+  "Function", "FunctionProto", "OptSideEffect", "ConstValueRef",
+  "SymbolicValueRef", "ValueRef", "ResolvedVal", "BasicBlockList",
+  "BasicBlock", "InstructionList", "BBTerminatorInst", "JumpTable", "Inst",
+  "PHIList", "ParamList", "IndexList", "OptTailCall", "InstVal",
+  "OptVolatile", "MemoryInst", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+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,    61,    44,
+      42,    92,    40,    41,    91,   120,    93,    60,    62,   123,
+     125,    99
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
+{
+       0,   162,   163,   163,   163,   163,   163,   163,   163,   163,
+     163,   164,   164,   164,   164,   164,   164,   165,   165,   165,
+     165,   165,   165,   165,   165,   165,   165,   165,   165,   166,
+     166,   166,   166,   166,   166,   166,   166,   166,   166,   167,
+     167,   167,   167,   167,   167,   167,   167,   167,   167,   167,
+     167,   167,   167,   167,   167,   168,   169,   169,   169,   169,
+     169,   170,   170,   170,   171,   171,   172,   172,   173,   173,
+     174,   174,   175,   176,   176,   176,   176,   176,   177,   177,
+     177,   178,   178,   178,   178,   179,   179,   179,   180,   180,
+     180,   180,   180,   181,   181,   181,   182,   182,   182,   182,
+     182,   182,   182,   183,   183,   183,   183,   183,   183,   183,
+     183,   183,   184,   184,   185,   185,   185,   185,   185,   185,
+     186,   186,   187,   187,   188,   188,   189,   190,   190,   191,
+     191,   192,   192,   193,   193,   193,   193,   193,   193,   193,
+     194,   194,   194,   194,   194,   194,   194,   194,   194,   194,
+     194,   194,   194,   195,   196,   196,   197,   197,   198,   198,
+     198,   198,   199,   199,   200,   200,   200,   200,   200,   200,
+     200,   200,   200,   200,   200,   200,   200,   200,   200,   200,
+     200,   200,   200,   200,   201,   201,   201,   201,   201,   201,
+     201,   201,   201,   201,   202,   202,   203,   203,   204,   204,
+     205,   205,   206,   206,   207,   207,   209,   208,   210,   208,
+     208,   208,   208,   211,   208,   212,   208,   213,   208,   208,
+     208,   208,   214,   215,   215,   216,   217,   217,   217,   218,
+     218,   219,   219,   219,   219,   220,   221,   221,   222,   223,
+     223,   224,   225,   226,   226,   227,   227,   227,   227,   227,
+     227,   227,   227,   227,   227,   227,   228,   228,   228,   228,
+     229,   229,   230,   231,   231,   232,   233,   233,   233,   234,
+     234,   234,   234,   234,   234,   234,   234,   234,   235,   235,
+     236,   237,   237,   238,   238,   238,   238,   238,   239,   239,
+     240,   240,   241,   241,   241,   241,   241,   241,   241,   241,
+     241,   241,   241,   241,   241,   242,   242,   243,   243,   243,
+     243,   243,   243,   243,   243
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     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,
+       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,     0,     2,     0,     1,     1,
+       1,     0,     2,     1,     1,     1,     1,     1,     1,     1,
+       1,     0,     1,     1,     1,     0,     1,     1,     0,     1,
+       1,     1,     1,     0,     1,     1,     0,     1,     1,     1,
+       1,     1,     2,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     0,     2,     1,     1,     1,     1,     1,     1,
+       0,     2,     0,     2,     0,     3,     2,     0,     1,     0,
+       3,     1,     2,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     2,     1,     2,     5,     5,     5,     5,     3,
+       2,     5,     4,     2,     1,     1,     1,     3,     1,     3,
+       1,     0,     1,     3,     4,     3,     3,     4,     4,     3,
+       6,     5,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     6,     5,     8,     6,     6,     7,
+       7,     6,     8,     8,     3,     1,     1,     1,     1,     0,
+       2,     6,     1,     0,     1,     2,     0,     3,     0,     3,
+       3,     3,     3,     0,     7,     0,     8,     0,     8,     5,
+       2,     3,     1,     3,     3,     3,     3,     1,     0,     5,
+       3,     1,     3,     1,     0,     9,     1,     1,     4,     1,
+       1,     2,     3,     0,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     3,     1,     5,     1,     1,     1,     1,
+       1,     1,     2,     2,     2,     3,     2,     0,     1,     2,
+       2,     3,     9,     9,     8,    14,     1,     1,     6,     5,
+       2,     6,     7,     3,     3,     5,     5,     0,     0,     3,
+       2,     1,     5,     5,     6,     6,     4,     6,     4,     4,
+       6,     6,     2,     8,     1,     1,     0,     3,     6,     3,
+       6,     2,     5,     7,     4
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const yytype_uint16 yydefact[] =
+{
+      71,    61,    68,    62,    69,    63,   208,   206,     0,     0,
+       0,     0,     0,     0,    81,    70,     0,    71,   204,    85,
+      88,     0,     0,   220,     0,     0,    66,     0,    72,    73,
+      75,    74,    76,    78,    77,    79,    80,    82,    83,    84,
+      81,    81,   199,     1,   205,    86,    87,    81,   209,    89,
+      90,    91,    92,    81,   267,   207,   267,     0,     0,   228,
+     221,   222,   210,   256,   257,   212,   133,   134,   135,   138,
+     137,   136,   139,   140,     0,     0,     0,     0,   258,   259,
+     141,   211,   143,   199,   199,    93,   198,     0,    96,    96,
+     268,   264,    67,   239,   240,   241,   263,   223,   224,   227,
+       0,   161,   144,     0,     0,     0,     0,   150,   162,     0,
+     142,   161,     0,     0,    95,    94,     0,   196,   197,     0,
+       0,    97,    98,    99,   100,   101,     0,   242,     0,   306,
+     266,     0,   225,   160,   112,   156,   158,     0,     0,     0,
+       0,     0,     0,   149,     0,     0,     0,   155,     0,   154,
+       0,   219,   133,   134,   135,   138,   137,   136,     0,     0,
+       0,   213,   102,     0,   236,   237,   238,   305,   291,     0,
+       0,     0,     0,    96,   276,   277,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    14,    15,    16,    11,    12,
+      13,     0,     0,     0,     0,     0,     0,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   265,    96,
+     280,     0,   304,   226,   153,     0,   120,     0,     0,   152,
+       0,   163,   120,   215,   217,     0,   200,   181,   182,   177,
+     179,   178,   180,   183,   176,   172,   173,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   175,   174,   129,     0,   290,   270,     0,   269,     0,
+       0,    55,     0,     0,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,     0,    53,    54,    49,    50,    51,
+      52,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,     0,   124,   124,   311,     0,     0,   302,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   104,
+     106,   105,   103,   107,   108,   109,   110,   111,   113,   159,
+     157,   146,   147,   148,   151,   145,   129,   129,     0,     0,
+       0,     0,     0,     0,     0,     0,   165,   195,     0,     0,
+       0,   169,     0,   166,     0,     0,     0,     0,   214,   234,
+     245,   246,   247,   252,   248,   249,   250,   251,   243,     0,
+     254,   261,   260,   262,     0,   271,     0,     0,     0,     0,
+       0,   307,     0,   309,   288,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   117,   116,
+     114,   115,   119,   118,   121,   216,   218,     0,     0,     0,
+     288,     0,     0,     0,     0,     0,   164,   150,   162,     0,
+     167,   168,     0,     0,     0,     0,     0,   131,   129,   233,
+     112,   231,     0,   244,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   314,     0,     0,     0,   298,   299,
+       0,     0,     0,     0,   296,     0,   124,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   194,   171,     0,     0,
+       0,     0,   126,   132,   130,    65,     0,   120,     0,   253,
+       0,     0,   287,     0,     0,   124,   125,   124,     0,     0,
+       0,     0,     0,     0,   292,   293,   287,     0,   312,     0,
+     201,     0,     0,   185,     0,     0,     0,     0,   170,     0,
+       0,     0,    64,   230,   232,   112,   127,     0,     0,     0,
+     139,     0,     0,   294,   295,   308,   310,   289,     0,     0,
+     297,   300,   301,     0,   124,     0,     0,     0,   191,     0,
+       0,   187,   188,   184,    65,   128,   122,   255,     0,     0,
+     112,   112,     0,   120,   281,     0,   120,   313,   189,   190,
+       0,     0,     0,   229,     0,   235,     0,   274,     0,     0,
+     284,   283,   139,     0,     0,   282,   303,   186,   192,   193,
+     123,   272,     0,   273,     0,   112,   112,     0,     0,     0,
+     286,   285,     0,     0,     0,     0,   279,     0,     0,   278,
+       0,   275
+};
+
+/* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int16 yydefgoto[] =
+{
+      -1,   258,   259,   260,   284,   301,   158,   159,    78,   513,
+      12,    79,    14,    15,    40,    41,    42,    47,    53,   116,
+     126,   328,   224,   404,   331,   565,   381,   427,   546,   358,
+     428,    80,   160,   135,   150,   136,   137,   109,   347,   370,
+     348,   119,    87,   151,    16,    17,    18,    20,    19,   263,
+     336,   337,    62,    23,    60,   100,   431,   432,   127,   166,
+      54,    95,    55,    48,   434,   371,    82,   373,   268,    56,
+      91,    92,   218,   569,   130,   307,   522,   444,   219,   220,
+     221,   222
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -549
+static const yytype_int16 yypact[] =
+{
+     322,  -549,  -549,  -549,  -549,  -549,  -549,  -549,   -18,  -120,
+       6,  -117,    62,   -60,   224,  -549,   111,   464,  -549,   103,
+     184,   -12,    -7,  -549,    21,   133,  -549,  1309,  -549,  -549,
+    -549,  -549,  -549,  -549,  -549,  -549,  -549,  -549,  -549,  -549,
+     140,   140,   211,  -549,  -549,  -549,  -549,   140,  -549,  -549,
+    -549,  -549,  -549,   140,   139,  -549,   -14,   157,   174,   182,
+    -549,  -549,  -549,  -549,  -549,    60,  -549,  -549,  -549,  -549,
+    -549,  -549,  -549,  -549,   215,   233,     2,   526,  -549,  -549,
+    -549,   150,  -549,   178,   178,   269,  -549,    14,   274,   274,
+    -549,  -549,   134,  -549,  -549,  -549,  -549,  -549,  -549,  -549,
+     -23,    54,  -549,    97,   105,   993,    60,  -549,   150,  -125,
+    -549,    54,    14,    14,  -549,  -549,  1093,  -549,  -549,  1340,
+     260,  -549,  -549,  -549,  -549,  -549,  1358,  -549,   -17,  1584,
+    -549,   251,  -549,  -549,   150,  -549,   128,   146,  1380,  1380,
+     145,  -106,  1380,  -549,   151,  1340,  1380,    60,   155,   150,
+     231,  -549,   101,   303,   305,   308,   312,   315,   229,   320,
+     808,  -549,  -549,   187,  -549,  -549,  -549,  -549,  -549,   275,
+    1423,    85,   321,   274,  -549,  -549,  -549,  -549,  -549,  -549,
+    -549,  -549,  -549,  -549,  -549,  -549,  -549,  -549,  -549,  -549,
+    -549,   461,   481,  1380,  1380,  1380,  1380,  -549,  -549,  -549,
+    -549,  -549,  -549,  -549,  -549,  -549,  -549,  -549,  -549,  1380,
+    1380,  1380,  1380,  1380,  1380,  1380,  1380,  1380,  -549,   274,
+    -549,   110,  -549,  -549,   -85,  1116,  -549,    -2,   -33,  -549,
+     173,   150,  -549,  -549,   150,  1093,  -549,  -549,  -549,  -549,
+    -549,  -549,  -549,  -549,  -549,  -549,  -549,   461,   481,   191,
+     198,   199,   203,   204,  1156,  1534,  1033,   335,   206,   207,
+     208,  -549,  -549,   217,   223,  -549,    60,   649,  -549,   785,
+     785,  -549,   785,  1358,  -549,  -549,  -549,  -549,  -549,  -549,
+    -549,  -549,  -549,  -549,  1380,  -549,  -549,  -549,  -549,  -549,
+    -549,  -549,  -549,  -549,  -549,  -549,  -549,  -549,  -549,  -549,
+    -549,  1380,   107,   113,  -549,   649,    26,   218,   236,   237,
+     238,   239,   240,   649,   649,   340,  1358,  1380,  1380,  -549,
+    -549,  -549,  -549,  -549,  -549,  -549,  -549,  -549,  -549,  -549,
+    -549,   162,  -549,  -549,  -549,   162,   217,   217,   344,   242,
+     243,  1340,  1340,  1340,  1340,  1340,  -549,  -549,    -9,  1073,
+     -50,  -549,   -63,  -549,  1340,  1340,  1340,   -11,  -549,  1187,
+    -549,  -549,  -549,  -549,  -549,  -549,  -549,  -549,   333,  1340,
+    -549,  -549,  -549,  -549,   247,  -549,   248,   785,   649,   649,
+       7,  -549,    34,  -549,  -549,   785,   244,  1380,  1380,  1380,
+    1380,  1380,   256,   257,  1380,   785,   649,   258,  -549,  -549,
+    -549,  -549,  -549,  -549,  -549,  -549,  -549,  1380,  1340,  1340,
+    -549,   261,   264,   267,   268,  1340,  -549,   263,   808,   -51,
+    -549,  -549,   270,   273,   362,   396,   419,  -549,   217,  -549,
+     150,   276,   271,  -549,   405,   -48,   411,   412,   280,   284,
+     287,   785,   433,   785,   289,   290,   785,   293,   150,  -549,
+     294,   295,   785,   785,   150,   296,   297,  1380,    90,   298,
+     300,    13,  1340,  1340,  1340,  1340,  -549,  -549,   299,  1340,
+    1340,  1380,  -549,  -549,  -549,    -3,  1269,  -549,   304,  -549,
+     785,   785,  1577,   785,   785,   297,  -549,   297,  1380,   785,
+     306,  1380,  1380,  1380,  -549,  -549,  1577,   401,  -549,   649,
+    -549,  1340,  1340,  -549,   309,   310,   319,   323,  -549,   316,
+     318,   126,  -549,  -549,  -549,   150,    38,   437,   324,   307,
+     785,   649,    44,  -549,  -549,  -549,  -549,  -549,   325,   785,
+    -549,  -549,  -549,    53,   297,   327,   332,  1340,  -549,  1340,
+    1340,  -549,  -549,  -549,    -3,  -549,   421,  -549,   460,     1,
+    -549,  -549,  1595,  -549,  -549,   334,  -549,  -549,  -549,  -549,
+     336,   338,   339,  -549,   489,  -549,   785,  -549,   945,     3,
+     -85,   -85,   785,   649,    86,  -549,   162,  -549,  -549,  -549,
+    -549,  -549,   347,  -549,   945,  -549,  -549,   484,   485,   356,
+     -85,   -85,   785,   785,   492,   439,  -549,   785,   494,  -549,
+     785,  -549
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const yytype_int16 yypgoto[] =
+{
+    -549,   383,   384,   385,   272,   277,  -170,  -549,     0,   -24,
+     429,     8,  -549,  -549,  -549,  -549,    42,  -549,  -549,  -549,
+    -160,  -549,  -421,  -549,  -228,  -549,  -293,    11,  -549,  -310,
+    -549,  -549,   -26,   341,  -121,  -549,   418,   425,   -61,  -157,
+    -226,     9,   205,   326,  -549,  -549,   515,  -549,  -549,  -549,
+    -549,  -549,  -549,  -549,  -549,  -549,  -549,  -549,   446,  -549,
+    -549,  -549,  -549,  -549,  -549,  -548,   -69,   121,  -173,  -549,
+     491,  -549,  -549,  -549,  -549,  -549,    67,   158,  -549,  -549,
+    -549,  -549
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If zero, do what YYDEFACT says.
+   If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -204
+static const yytype_int16 yytable[] =
+{
+      11,    81,   272,   261,   335,   163,   104,    90,    13,   475,
+     383,   164,   271,   273,   271,    93,     1,    11,   441,     3,
+     582,     5,   304,   425,   142,    13,   405,   406,    24,   350,
+     352,    26,   319,   320,    21,   143,   589,   308,   309,   310,
+     311,   312,   426,   142,   315,   443,   117,   118,    22,   321,
+     322,   108,   323,   324,   230,   325,   326,   327,   161,   316,
+     442,    63,    64,    25,   106,    66,    67,    68,    69,    70,
+      71,    72,   425,     1,     2,   134,     3,     4,     5,   108,
+      27,   236,    83,    84,   233,   134,   415,   442,    28,    88,
+     149,   262,    11,   133,   544,    89,   269,   421,   415,   415,
+     149,   415,   270,    73,   -55,   -55,   -55,   -55,   420,   468,
+     479,    43,   227,   228,   319,   320,   231,   110,   474,   111,
+     234,   145,   146,   419,   587,   333,   131,   237,   238,   570,
+     571,   321,   322,   132,   323,   324,    57,   325,   326,   327,
+     415,    58,   165,   435,   267,   397,    94,   416,   110,    45,
+     111,    46,   377,     1,   332,    61,     3,   567,     5,   583,
+      90,   105,   488,   498,   590,   591,   503,   302,   303,   267,
+     305,   264,   398,   399,   400,    59,   110,   401,   111,    97,
+     385,   402,   403,   306,   267,   267,   267,   267,   267,   313,
+     314,   267,   525,   552,   526,   395,    98,   553,   372,   134,
+     372,   372,   552,   372,    99,    74,   556,     2,    75,   149,
+       4,    76,   101,    77,   447,    86,   449,   450,   451,   102,
+     398,   399,   400,   317,   318,   401,    49,    50,    51,   402,
+     403,    52,   239,   240,   241,   242,   372,   103,    63,    64,
+     110,   557,   111,   500,   372,   372,    85,   149,    86,   516,
+       1,     2,   138,     3,     4,     5,   380,   110,   378,   111,
+     139,   261,   382,   110,   162,   111,    29,    30,    31,    32,
+      33,    34,    35,   223,    36,   379,   110,   225,   111,   543,
+     410,   411,   412,   413,   414,    37,    38,    39,   112,   113,
+     149,   396,   267,   422,   423,   424,   398,   399,   400,   226,
+     110,   401,   111,   229,   232,   402,   403,   235,   372,   372,
+     372,   114,   -56,   115,   -57,   527,   372,   -60,   530,   531,
+     532,   -59,  -203,   418,   -58,   574,   372,   372,   576,   243,
+     265,   334,   271,   430,   120,   121,   122,   123,   124,   125,
+     -67,     1,     2,   341,     3,     4,     5,   459,   460,   262,
+     342,   343,     6,     7,   466,   344,   345,   353,   354,   355,
+     356,   267,   448,   267,   267,   267,   357,   386,   454,    37,
+      38,    39,   372,     8,   372,   359,     9,   372,   394,   568,
+      10,   458,   407,   372,   372,   387,   388,   389,   390,   391,
+     374,   375,   433,   376,   408,   409,   436,   437,   446,   584,
+     471,   504,   505,   506,   507,   452,   453,   457,   509,   510,
+     462,   372,   372,   463,   372,   372,   464,   465,   472,   469,
+     372,   467,   470,   473,   477,   476,   384,   478,   480,   481,
+     372,   499,   482,   483,   392,   393,   484,   486,   488,   489,
+     535,   536,   491,   492,   493,   511,   497,   501,   496,   502,
+     515,   372,   372,   517,   442,   529,   521,   508,   537,   547,
+     372,   549,   267,   538,  -202,   267,   267,   267,   539,   541,
+     521,   542,   540,   548,   564,   512,   560,   566,   561,   562,
+     558,   554,   -67,     1,     2,   559,     3,     4,     5,   577,
+     575,   578,   579,   580,     6,     7,   588,   372,   438,   439,
+     440,   592,   593,   372,   372,   594,   445,   285,   286,   597,
+     598,   600,   215,   216,   217,     8,   455,   456,     9,   339,
+     563,   129,    10,   372,   372,   340,   573,   545,   372,   144,
+     141,   372,    44,    63,    64,   128,   106,    66,    67,    68,
+      69,    70,    71,    72,   512,     1,     2,    96,     3,     4,
+       5,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   338,   485,   533,   487,     0,   330,   490,   461,     0,
+       0,     0,     0,   494,   495,    73,     0,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   518,   519,     0,   523,   524,     0,     0,     0,     0,
+     528,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     534,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   550,   551,     0,     0,     0,     0,     0,     0,     0,
+     555,     0,   360,   361,     0,     0,    63,    64,   362,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     1,     2,
+       0,     3,     4,     5,   363,   364,   365,    74,     0,     0,
+      75,     0,     0,    76,     0,    77,   107,   581,     0,   366,
+     367,     0,     0,   585,   586,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   368,     0,     0,     0,
+       0,     0,     0,   595,   596,     0,     0,     0,   599,     0,
+       0,   601,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   247,   248,     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,   249,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,     0,   250,     0,
+     251,   252,   253,     0,     0,     0,     0,     0,   360,   361,
+       0,     0,    63,    64,   362,     0,     0,     0,     0,   110,
+       0,   111,     0,     0,     1,     2,   369,     3,     4,     5,
+     363,   364,   365,     0,     0,    63,    64,     0,     0,     0,
+       0,     0,     0,     0,     0,   366,   367,     1,     2,     0,
+       3,     4,     5,   244,     0,     0,     0,     0,     0,     0,
+       0,     0,   368,     0,     0,     0,     0,     0,   245,   246,
+       0,     0,     0,     0,     0,     0,     0,     0,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   247,   248,     0,     0,     0,     0,     0,
+       0,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   247,   248,     0,     0,
+     249,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,     0,   250,     0,   251,   252,   253,     0,
+       0,     0,     0,   249,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,     0,   250,     0,   251,
+     252,   253,   369,     0,     0,     0,     0,     0,   360,   361,
+       0,     0,     0,     0,   362,     0,     0,     0,   110,     0,
+     111,     0,   254,     0,     0,   255,     0,   256,     0,   257,
+     363,   364,   365,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   366,   367,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      63,    64,   368,   106,    66,    67,    68,    69,    70,    71,
+      72,     0,     1,     2,     0,     3,     4,     5,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   247,   248,     0,     0,     0,     0,     0,
+      63,    64,    73,   106,   152,   153,   154,   155,   156,   157,
+      72,     0,     1,     2,     0,     3,     4,     5,     0,     0,
+     249,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,     0,   250,     0,   251,   252,   253,     0,
+      63,    64,    73,   106,   152,   153,   154,   155,   156,   157,
+      72,     0,     1,     2,     0,     3,     4,     5,     0,     0,
+      63,    64,   369,   147,    66,    67,    68,    69,    70,    71,
+      72,     0,     1,     2,     0,     3,     4,     5,     0,     0,
+       0,     0,    73,    63,    64,     0,   106,    66,    67,    68,
+      69,    70,    71,    72,     0,     1,     2,     0,     3,     4,
+       5,     0,    73,     0,    74,     0,     0,    75,     0,     0,
+      76,     0,    77,   140,     0,   329,     0,     0,     0,     0,
+       0,     0,     0,    63,    64,    73,   106,   152,   153,   154,
+     155,   156,   157,    72,     0,     1,     2,     0,     3,     4,
+       5,     0,     0,     0,    74,     0,     0,    75,     0,     0,
+      76,     0,    77,   351,    63,    64,     0,   106,    66,    67,
+      68,    69,    70,    71,    72,    73,     1,     2,     0,     3,
+       4,     5,     0,     0,   148,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    74,     0,   429,    75,     0,     0,
+      76,     0,    77,   417,     0,     0,    73,     0,     0,     0,
+       0,     0,     0,     0,    74,     0,     0,    75,     0,     0,
+      76,     0,    77,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    74,     0,     0,
+      75,     0,     0,    76,     0,    77,    63,    64,     0,   106,
+      66,    67,    68,    69,    70,    71,    72,     0,     1,     2,
+       0,     3,     4,     5,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    74,   514,     0,
+      75,     0,   346,    76,     0,    77,    63,    64,    73,    65,
+      66,    67,    68,    69,    70,    71,    72,     0,     1,     2,
+       0,     3,     4,     5,     0,     0,     0,     0,    74,     0,
+       0,    75,     0,     0,    76,     0,    77,    63,    64,     0,
+     106,   152,   153,   154,   155,   156,   157,    72,    73,     1,
+       2,     0,     3,     4,     5,    63,    64,     0,   147,    66,
+      67,    68,    69,    70,    71,    72,     0,     1,     2,     0,
+       3,     4,     5,     0,     0,     0,     0,    63,    64,    73,
+     106,    66,    67,    68,    69,    70,    71,    72,     0,     1,
+       2,     0,     3,     4,     5,     0,     0,    73,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      74,     0,     0,    75,     0,     0,    76,     0,    77,    73,
+      63,    64,     0,   266,    66,    67,    68,    69,    70,    71,
+      72,     0,     1,     2,     0,     3,     4,     5,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      74,     0,     0,    75,     0,     0,    76,     0,    77,     0,
+       0,     0,    73,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    74,     0,     0,    75,     0,     0,    76,     0,    77,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    74,
+       0,     0,    75,     0,     0,    76,     0,    77,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    74,     0,     0,    75,     0,     0,    76,     0,    77,
+       0,    63,    64,     0,   106,   152,   153,   154,   155,   156,
+     157,    72,     0,     1,     2,     0,     3,     4,     5,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    74,     0,     0,    75,     0,     0,
+      76,     0,    77,    73,    63,    64,     0,   106,    66,    67,
+      68,    69,    70,    71,   520,     0,     1,     2,     0,     3,
+       4,     5,    63,    64,     0,   106,    66,    67,    68,    69,
+      70,    71,   572,     0,     1,     2,     0,     3,     4,     5,
+     167,     0,     0,     0,     0,     0,    73,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   168,
+     169,     0,     0,     0,    73,     0,     0,     0,     0,     0,
+       0,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    74,     0,     0,    75,     0,
+       0,    76,     0,   349,   193,   194,   195,     0,     0,   196,
+     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
+     207,   208,   209,   210,   211,   212,   213,   214,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    74,     0,
+       0,    75,     0,     0,    76,     0,    77,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    74,     0,     0,    75,
+       0,     0,    76,     0,    77
+};
+
+static const yytype_int16 yycheck[] =
+{
+       0,    27,   172,   160,   232,   126,     4,    21,     0,   430,
+     303,    28,    11,   173,    11,    29,    19,    17,    11,    22,
+     568,    24,   195,    34,   149,    17,   336,   337,   148,   255,
+     256,   148,   117,   118,    52,   160,   584,   210,   211,   212,
+     213,   214,    53,   149,   217,    11,    32,    33,    66,   134,
+     135,    77,   137,   138,   160,   140,   141,   142,   119,   219,
+      53,     7,     8,    57,    10,    11,    12,    13,    14,    15,
+      16,    17,    34,    19,    20,   101,    22,    23,    24,   105,
+      18,   150,    40,    41,   145,   111,   149,    53,   148,    47,
+     116,   160,    92,    39,   515,    53,    11,   160,   149,   149,
+     126,   149,    17,    49,     3,     4,     5,     6,   158,   160,
+     158,     0,   138,   139,   117,   118,   142,   150,   428,   152,
+     146,   112,   113,   349,    38,   158,   149,    26,    27,   550,
+     551,   134,   135,   156,   137,   138,   148,   140,   141,   142,
+     149,   148,   159,   369,   170,   318,   160,   156,   150,    46,
+     152,    48,   273,    19,   156,    22,    22,   156,    24,   156,
+      21,   159,   149,   456,   585,   586,   153,   193,   194,   195,
+     196,   163,   134,   135,   136,   154,   150,   139,   152,    22,
+     154,   143,   144,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   485,   149,   487,   316,    22,   153,   267,   225,
+     269,   270,   149,   272,    22,   151,   153,    20,   154,   235,
+      23,   157,   152,   159,   387,    37,   389,   390,   391,     4,
+     134,   135,   136,   113,   114,   139,    42,    43,    44,   143,
+     144,    47,     3,     4,     5,     6,   305,     4,     7,     8,
+     150,   534,   152,   153,   313,   314,    35,   273,    37,   477,
+      19,    20,   155,    22,    23,    24,   149,   150,   284,   152,
+     155,   418,   149,   150,     4,   152,    42,    43,    44,    45,
+      46,    47,    48,    22,    50,   301,   150,   149,   152,   153,
+     341,   342,   343,   344,   345,   145,   146,   147,    83,    84,
+     316,   317,   318,   354,   355,   356,   134,   135,   136,   153,
+     150,   139,   152,   158,   153,   143,   144,   152,   377,   378,
+     379,    42,     9,    44,     9,   488,   385,     9,   491,   492,
+     493,     9,     0,   349,     9,   553,   395,   396,   556,     9,
+      55,   158,    11,   359,    60,    61,    62,    63,    64,    65,
+      18,    19,    20,   152,    22,    23,    24,   408,   409,   418,
+     152,   152,    30,    31,   415,   152,   152,    22,   152,   152,
+     152,   387,   388,   389,   390,   391,   149,   149,   394,   145,
+     146,   147,   441,    51,   443,   152,    54,   446,    38,   549,
+      58,   407,    38,   452,   453,   149,   149,   149,   149,   149,
+     269,   270,    59,   272,   152,   152,   149,   149,   154,   569,
+      38,   462,   463,   464,   465,   149,   149,   149,   469,   470,
+     149,   480,   481,   149,   483,   484,   149,   149,    22,   149,
+     489,   158,   149,     4,   153,   149,   305,    22,    17,    17,
+     499,   457,   152,   149,   313,   314,   149,     4,   149,   149,
+     501,   502,   149,   149,   149,   471,   149,   149,   152,   149,
+     476,   520,   521,   149,    53,   149,   482,   158,   149,    22,
+     529,   154,   488,   153,     0,   491,   492,   493,   149,   153,
+     496,   153,   149,   149,    53,   475,   537,    17,   539,   540,
+     153,   156,    18,    19,    20,   153,    22,    23,    24,   153,
+     156,   153,   153,     4,    30,    31,   149,   566,   377,   378,
+     379,    17,    17,   572,   573,   149,   385,    26,    27,    17,
+      71,    17,   129,   129,   129,    51,   395,   396,    54,   247,
+     544,    92,    58,   592,   593,   248,   552,   516,   597,   111,
+     105,   600,    17,     7,     8,    89,    10,    11,    12,    13,
+      14,    15,    16,    17,   544,    19,    20,    56,    22,    23,
+      24,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   235,   441,   496,   443,    -1,   225,   446,   410,    -1,
+      -1,    -1,    -1,   452,   453,    49,    -1,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   480,   481,    -1,   483,   484,    -1,    -1,    -1,    -1,
+     489,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     499,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   520,   521,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     529,    -1,     3,     4,    -1,    -1,     7,     8,     9,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    19,    20,
+      -1,    22,    23,    24,    25,    26,    27,   151,    -1,    -1,
+     154,    -1,    -1,   157,    -1,   159,   160,   566,    -1,    40,
+      41,    -1,    -1,   572,   573,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    -1,
+      -1,    -1,    -1,   592,   593,    -1,    -1,    -1,   597,    -1,
+      -1,   600,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    -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,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,    -1,   129,    -1,
+     131,   132,   133,    -1,    -1,    -1,    -1,    -1,     3,     4,
+      -1,    -1,     7,     8,     9,    -1,    -1,    -1,    -1,   150,
+      -1,   152,    -1,    -1,    19,    20,   157,    22,    23,    24,
+      25,    26,    27,    -1,    -1,     7,     8,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    40,    41,    19,    20,    -1,
+      22,    23,    24,    25,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    57,    -1,    -1,    -1,    -1,    -1,    40,    41,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    -1,    -1,    -1,    -1,    -1,
+      -1,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    -1,    -1,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,    -1,   129,    -1,   131,   132,   133,    -1,
+      -1,    -1,    -1,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,    -1,   129,    -1,   131,
+     132,   133,   157,    -1,    -1,    -1,    -1,    -1,     3,     4,
+      -1,    -1,    -1,    -1,     9,    -1,    -1,    -1,   150,    -1,
+     152,    -1,   154,    -1,    -1,   157,    -1,   159,    -1,   161,
+      25,    26,    27,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    40,    41,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       7,     8,    57,    10,    11,    12,    13,    14,    15,    16,
+      17,    -1,    19,    20,    -1,    22,    23,    24,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    -1,    -1,    -1,    -1,    -1,
+       7,     8,    49,    10,    11,    12,    13,    14,    15,    16,
+      17,    -1,    19,    20,    -1,    22,    23,    24,    -1,    -1,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,    -1,   129,    -1,   131,   132,   133,    -1,
+       7,     8,    49,    10,    11,    12,    13,    14,    15,    16,
+      17,    -1,    19,    20,    -1,    22,    23,    24,    -1,    -1,
+       7,     8,   157,    10,    11,    12,    13,    14,    15,    16,
+      17,    -1,    19,    20,    -1,    22,    23,    24,    -1,    -1,
+      -1,    -1,    49,     7,     8,    -1,    10,    11,    12,    13,
+      14,    15,    16,    17,    -1,    19,    20,    -1,    22,    23,
+      24,    -1,    49,    -1,   151,    -1,    -1,   154,    -1,    -1,
+     157,    -1,   159,   160,    -1,    39,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,     7,     8,    49,    10,    11,    12,    13,
+      14,    15,    16,    17,    -1,    19,    20,    -1,    22,    23,
+      24,    -1,    -1,    -1,   151,    -1,    -1,   154,    -1,    -1,
+     157,    -1,   159,   160,     7,     8,    -1,    10,    11,    12,
+      13,    14,    15,    16,    17,    49,    19,    20,    -1,    22,
+      23,    24,    -1,    -1,   121,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   151,    -1,    39,   154,    -1,    -1,
+     157,    -1,   159,   160,    -1,    -1,    49,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   151,    -1,    -1,   154,    -1,    -1,
+     157,    -1,   159,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   151,    -1,    -1,
+     154,    -1,    -1,   157,    -1,   159,     7,     8,    -1,    10,
+      11,    12,    13,    14,    15,    16,    17,    -1,    19,    20,
+      -1,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   151,    39,    -1,
+     154,    -1,   156,   157,    -1,   159,     7,     8,    49,    10,
+      11,    12,    13,    14,    15,    16,    17,    -1,    19,    20,
+      -1,    22,    23,    24,    -1,    -1,    -1,    -1,   151,    -1,
+      -1,   154,    -1,    -1,   157,    -1,   159,     7,     8,    -1,
+      10,    11,    12,    13,    14,    15,    16,    17,    49,    19,
+      20,    -1,    22,    23,    24,     7,     8,    -1,    10,    11,
+      12,    13,    14,    15,    16,    17,    -1,    19,    20,    -1,
+      22,    23,    24,    -1,    -1,    -1,    -1,     7,     8,    49,
+      10,    11,    12,    13,    14,    15,    16,    17,    -1,    19,
+      20,    -1,    22,    23,    24,    -1,    -1,    49,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     151,    -1,    -1,   154,    -1,    -1,   157,    -1,   159,    49,
+       7,     8,    -1,    10,    11,    12,    13,    14,    15,    16,
+      17,    -1,    19,    20,    -1,    22,    23,    24,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     151,    -1,    -1,   154,    -1,    -1,   157,    -1,   159,    -1,
+      -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   151,    -1,    -1,   154,    -1,    -1,   157,    -1,   159,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   151,
+      -1,    -1,   154,    -1,    -1,   157,    -1,   159,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   151,    -1,    -1,   154,    -1,    -1,   157,    -1,   159,
+      -1,     7,     8,    -1,    10,    11,    12,    13,    14,    15,
+      16,    17,    -1,    19,    20,    -1,    22,    23,    24,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   151,    -1,    -1,   154,    -1,    -1,
+     157,    -1,   159,    49,     7,     8,    -1,    10,    11,    12,
+      13,    14,    15,    16,    17,    -1,    19,    20,    -1,    22,
+      23,    24,     7,     8,    -1,    10,    11,    12,    13,    14,
+      15,    16,    17,    -1,    19,    20,    -1,    22,    23,    24,
+      36,    -1,    -1,    -1,    -1,    -1,    49,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    55,
+      56,    -1,    -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,
+      -1,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   151,    -1,    -1,   154,    -1,
+      -1,   157,    -1,   159,   110,   111,   112,    -1,    -1,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   151,    -1,
+      -1,   154,    -1,    -1,   157,    -1,   159,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   151,    -1,    -1,   154,
+      -1,    -1,   157,    -1,   159
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const yytype_uint8 yystos[] =
+{
+       0,    19,    20,    22,    23,    24,    30,    31,    51,    54,
+      58,   170,   172,   173,   174,   175,   206,   207,   208,   210,
+     209,    52,    66,   215,   148,    57,   148,    18,   148,    42,
+      43,    44,    45,    46,    47,    48,    50,   145,   146,   147,
+     176,   177,   178,     0,   208,    46,    48,   179,   225,    42,
+      43,    44,    47,   180,   222,   224,   231,   148,   148,   154,
+     216,    22,   214,     7,     8,    10,    11,    12,    13,    14,
+      15,    16,    17,    49,   151,   154,   157,   159,   170,   173,
+     193,   194,   228,   178,   178,    35,    37,   204,   178,   178,
+      21,   232,   233,    29,   160,   223,   232,    22,    22,    22,
+     217,   152,     4,     4,     4,   159,    10,   160,   194,   199,
+     150,   152,   204,   204,    42,    44,   181,    32,    33,   203,
+      60,    61,    62,    63,    64,    65,   182,   220,   220,   172,
+     236,   149,   156,    39,   194,   195,   197,   198,   155,   155,
+     160,   199,   149,   160,   198,   203,   203,    10,   121,   194,
+     196,   205,    11,    12,    13,    14,    15,    16,   168,   169,
+     194,   200,     4,   196,    28,   159,   221,    36,    55,    56,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+      87,    88,    89,   110,   111,   112,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   163,   164,   165,   234,   240,
+     241,   242,   243,    22,   184,   149,   153,   194,   194,   158,
+     160,   194,   153,   200,   194,   152,   228,    26,    27,     3,
+       4,     5,     6,     9,    25,    40,    41,    88,    89,   115,
+     129,   131,   132,   133,   154,   157,   159,   161,   163,   164,
+     165,   201,   228,   211,   173,    55,    10,   194,   230,    11,
+      17,    11,   168,   182,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   166,    26,    27,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   167,   194,   194,   230,   194,   194,   237,   230,   230,
+     230,   230,   230,   194,   194,   230,   182,   113,   114,   117,
+     118,   134,   135,   137,   138,   140,   141,   142,   183,    39,
+     195,   186,   156,   158,   158,   186,   212,   213,   205,   166,
+     167,   152,   152,   152,   152,   152,   156,   200,   202,   159,
+     202,   160,   202,    22,   152,   152,   152,   149,   191,   152,
+       3,     4,     9,    25,    26,    27,    40,    41,    57,   157,
+     201,   227,   228,   229,   229,   229,   229,   196,   194,   194,
+     149,   188,   149,   188,   229,   154,   149,   149,   149,   149,
+     149,   149,   229,   229,    38,   196,   194,   230,   134,   135,
+     136,   139,   143,   144,   185,   191,   191,    38,   152,   152,
+     200,   200,   200,   200,   200,   149,   156,   160,   194,   202,
+     158,   160,   200,   200,   200,    34,    53,   189,   192,    39,
+     194,   218,   219,    59,   226,   202,   149,   149,   229,   229,
+     229,    11,    53,    11,   239,   229,   154,   230,   194,   230,
+     230,   230,   149,   149,   194,   229,   229,   149,   194,   200,
+     200,   239,   149,   149,   149,   149,   200,   158,   160,   149,
+     149,    38,    22,     4,   191,   184,   149,   153,    22,   158,
+      17,    17,   152,   149,   149,   229,     4,   229,   149,   149,
+     229,   149,   149,   149,   229,   229,   152,   149,   188,   194,
+     153,   149,   149,   153,   200,   200,   200,   200,   158,   200,
+     200,   194,   170,   171,    39,   194,   186,   149,   229,   229,
+      17,   194,   238,   229,   229,   188,   188,   230,   229,   149,
+     230,   230,   230,   238,   229,   200,   200,   149,   153,   149,
+     149,   153,   153,   153,   184,   189,   190,    22,   149,   154,
+     229,   229,   149,   153,   156,   229,   153,   188,   153,   153,
+     200,   200,   200,   171,    53,   187,    17,   156,   168,   235,
+     184,   184,    17,   194,   186,   156,   186,   153,   153,   153,
+       4,   229,   227,   156,   168,   229,   229,    38,   149,   227,
+     184,   184,    17,    17,   149,   229,   229,    17,    71,   229,
+      17,   229
+};
 
 #define yyerrok		(yyerrstatus = 0)
 #define yyclearin	(yychar = YYEMPTY)
-#define YYEMPTY		-2
+#define YYEMPTY		(-2)
 #define YYEOF		0
+
 #define YYACCEPT	goto yyacceptlab
-#define YYABORT 	goto yyabortlab
-#define YYERROR		goto yyerrlab1
-/* Like YYERROR except do call yyerror.
-   This remains here temporarily to ease the
-   transition to the new meaning of YYERROR, for GCC.
+#define YYABORT		goto yyabortlab
+#define YYERROR		goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
    Once GCC version 2 has supplanted version 1, this can go.  */
+
 #define YYFAIL		goto yyerrlab
+
 #define YYRECOVERING()  (!!yyerrstatus)
-#define YYBACKUP(token, value) \
+
+#define YYBACKUP(Token, Value)					\
 do								\
   if (yychar == YYEMPTY && yylen == 1)				\
-    { yychar = (token), yylval = (value);			\
-      yychar1 = YYTRANSLATE (yychar);				\
-      YYPOPSTACK;						\
+    {								\
+      yychar = (Token);						\
+      yylval = (Value);						\
+      yytoken = YYTRANSLATE (yychar);				\
+      YYPOPSTACK (1);						\
       goto yybackup;						\
     }								\
   else								\
-    { yyerror ("syntax error: cannot back up"); YYERROR; }	\
-while (0)
+    {								\
+      yyerror (YY_("syntax error: cannot back up")); \
+      YYERROR;							\
+    }								\
+while (YYID (0))
+
 
 #define YYTERROR	1
 #define YYERRCODE	256
 
-#ifndef YYPURE
-#define YYLEX		yylex()
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)				\
+    do									\
+      if (YYID (N))                                                    \
+	{								\
+	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
+	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
+	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
+	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
+	}								\
+      else								\
+	{								\
+	  (Current).first_line   = (Current).last_line   =		\
+	    YYRHSLOC (Rhs, 0).last_line;				\
+	  (Current).first_column = (Current).last_column =		\
+	    YYRHSLOC (Rhs, 0).last_column;				\
+	}								\
+    while (YYID (0))
 #endif
 
-#ifdef YYPURE
-#ifdef YYLSP_NEEDED
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+   This macro was not mandated originally: define only if we know
+   we won't break user code: when these are the locations we know.  */
+
+#ifndef YY_LOCATION_PRINT
+# if YYLTYPE_IS_TRIVIAL
+#  define YY_LOCATION_PRINT(File, Loc)			\
+     fprintf (File, "%d.%d-%d.%d",			\
+	      (Loc).first_line, (Loc).first_column,	\
+	      (Loc).last_line,  (Loc).last_column)
+# else
+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
 #ifdef YYLEX_PARAM
-#define YYLEX		yylex(&yylval, &yylloc, YYLEX_PARAM)
+# define YYLEX yylex (YYLEX_PARAM)
 #else
-#define YYLEX		yylex(&yylval, &yylloc)
+# define YYLEX yylex ()
 #endif
-#else /* not YYLSP_NEEDED */
-#ifdef YYLEX_PARAM
-#define YYLEX		yylex(&yylval, YYLEX_PARAM)
+
+/* 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 (YYID (0))
+
+# 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 (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
 #else
-#define YYLEX		yylex(&yylval)
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
 #endif
-#endif /* not YYLSP_NEEDED */
+{
+  if (!yyvaluep)
+    return;
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+  YYUSE (yyoutput);
+# endif
+  switch (yytype)
+    {
+      default:
+	break;
+    }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
 #endif
+{
+  if (yytype < YYNTOKENS)
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
 
-/* If nonreentrant, generate the variables here */
+  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+  YYFPRINTF (yyoutput, ")");
+}
 
-#ifndef YYPURE
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included).                                                   |
+`------------------------------------------------------------------*/
 
-int	yychar;			/*  the lookahead symbol		*/
-YYSTYPE	yylval;			/*  the semantic value of the		*/
-				/*  lookahead symbol			*/
-
-#ifdef YYLSP_NEEDED
-YYLTYPE yylloc;			/*  location data for the lookahead	*/
-				/*  symbol				*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+#else
+static void
+yy_stack_print (bottom, top)
+    yytype_int16 *bottom;
+    yytype_int16 *top;
 #endif
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (; bottom <= top; ++bottom)
+    YYFPRINTF (stderr, " %d", *bottom);
+  YYFPRINTF (stderr, "\n");
+}
 
-int yynerrs;			/*  number of parse errors so far       */
-#endif  /* not YYPURE */
+# define YY_STACK_PRINT(Bottom, Top)				\
+do {								\
+  if (yydebug)							\
+    yy_stack_print ((Bottom), (Top));				\
+} while (YYID (0))
 
-#if YYDEBUG != 0
-int yydebug;			/*  nonzero means print parse trace	*/
-/* Since this is uninitialized, it does not stop multiple parsers
-   from coexisting.  */
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+    YYSTYPE *yyvsp;
+    int yyrule;
 #endif
+{
+  int yynrhs = yyr2[yyrule];
+  int yyi;
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+	     yyrule - 1, yylno);
+  /* The symbols being reduced.  */
+  for (yyi = 0; yyi < yynrhs; yyi++)
+    {
+      fprintf (stderr, "   $%d = ", yyi + 1);
+      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+		       &(yyvsp[(yyi + 1) - (yynrhs)])
+		       		       );
+      fprintf (stderr, "\n");
+    }
+}
 
-/*  YYINITDEPTH indicates the initial size of the parser's stacks	*/
+# define YY_REDUCE_PRINT(Rule)		\
+do {					\
+  if (yydebug)				\
+    yy_reduce_print (yyvsp, Rule); \
+} while (YYID (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
+# define YYINITDEPTH 200
 #endif
 
-/*  YYMAXDEPTH is the maximum size the stacks can grow to
-    (effective only if the built-in stack extension method is used).  */
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
 
-#if YYMAXDEPTH == 0
-#undef YYMAXDEPTH
-#endif
+   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
+# define YYMAXDEPTH 10000
 #endif
+
 
-/* Define __yy_memcpy.  Note that the size argument
-   should be passed with type unsigned int, because that is what the non-GCC
-   definitions require.  With GCC, __builtin_memcpy takes an arg
-   of type size_t, but it can handle unsigned int.  */
 
-#if __GNUC__ > 1		/* GNU C and GNU C++ define this.  */
-#define __yy_memcpy(TO,FROM,COUNT)	__builtin_memcpy(TO,FROM,COUNT)
-#else				/* not GNU C or C++ */
-#ifndef __cplusplus
+#if YYERROR_VERBOSE
 
-/* This is the most reliable way to avoid incompatibilities
-   in available built-in functions on various systems.  */
-static void
-__yy_memcpy (to, from, count)
-     char *to;
-     char *from;
-     unsigned int count;
-{
-  register char *f = from;
-  register char *t = to;
-  register int i = count;
-
-  while (i-- > 0)
-    *t++ = *f++;
-}
-
-#else /* __cplusplus */
-
-/* This is the most reliable way to avoid incompatibilities
-   in available built-in functions on various systems.  */
-static void
-__yy_memcpy (char *to, char *from, unsigned int count)
-{
-  register char *t = to;
-  register char *f = from;
-  register int i = count;
-
-  while (i-- > 0)
-    *t++ = *f++;
-}
-
-#endif
-#endif
-
-#line 217 "/usr/share/bison.simple"
-
-/* The user can define YYPARSE_PARAM as the name of an argument to be passed
-   into yyparse.  The argument should have type void *.
-   It should actually point to an object.
-   Grammar actions can access the variable by casting it
-   to the proper pointer type.  */
-
-#ifdef YYPARSE_PARAM
-#ifdef __cplusplus
-#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL
-#else /* not __cplusplus */
-#define YYPARSE_PARAM_ARG YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
-#endif /* not __cplusplus */
-#else /* not YYPARSE_PARAM */
-#define YYPARSE_PARAM_ARG
-#define YYPARSE_PARAM_DECL
-#endif /* not YYPARSE_PARAM */
-
-/* Prevent warning if -Wstrict-prototypes.  */
-#ifdef __GNUC__
-#ifdef YYPARSE_PARAM
-int yyparse (void *);
+# ifndef yystrlen
+#  if defined __GLIBC__ && defined _STRING_H
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
 #else
+static YYSIZE_T
+yystrlen (yystr)
+    const char *yystr;
+#endif
+{
+  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.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+    char *yydest;
+    const char *yysrc;
+#endif
+{
+  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 YYRESULT an error message about the unexpected token
+   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
+   including the terminating null byte.  If YYRESULT is null, do not
+   copy anything; just return the number of bytes that would be
+   copied.  As a special case, return 0 if an ordinary "syntax error"
+   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
+   size calculation.  */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+  int yyn = yypact[yystate];
+
+  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+    return 0;
+  else
+    {
+      int yytype = YYTRANSLATE (yychar);
+      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+      YYSIZE_T yysize = yysize0;
+      YYSIZE_T yysize1;
+      int yysize_overflow = 0;
+      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+      int yyx;
+
+# if 0
+      /* This is so xgettext sees the translatable formats that are
+	 constructed on the fly.  */
+      YY_("syntax error, unexpected %s");
+      YY_("syntax error, unexpected %s, expecting %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+      char *yyfmt;
+      char const *yyf;
+      static char const yyunexpected[] = "syntax error, unexpected %s";
+      static char const yyexpecting[] = ", expecting %s";
+      static char const yyor[] = " or %s";
+      char yyformat[sizeof yyunexpected
+		    + sizeof yyexpecting - 1
+		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+		       * (sizeof yyor - 1))];
+      char const *yyprefix = yyexpecting;
+
+      /* Start YYX at -YYN if negative to avoid negative indexes in
+	 YYCHECK.  */
+      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 yycount = 1;
+
+      yyarg[0] = yytname[yytype];
+      yyfmt = yystpcpy (yyformat, yyunexpected);
+
+      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+	  {
+	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+	      {
+		yycount = 1;
+		yysize = yysize0;
+		yyformat[sizeof yyunexpected - 1] = '\0';
+		break;
+	      }
+	    yyarg[yycount++] = yytname[yyx];
+	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+	    yysize_overflow |= (yysize1 < yysize);
+	    yysize = yysize1;
+	    yyfmt = yystpcpy (yyfmt, yyprefix);
+	    yyprefix = yyor;
+	  }
+
+      yyf = YY_(yyformat);
+      yysize1 = yysize + yystrlen (yyf);
+      yysize_overflow |= (yysize1 < yysize);
+      yysize = yysize1;
+
+      if (yysize_overflow)
+	return YYSIZE_MAXIMUM;
+
+      if (yyresult)
+	{
+	  /* 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 = yyresult;
+	  int yyi = 0;
+	  while ((*yyp = *yyf) != '\0')
+	    {
+	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+		{
+		  yyp += yytnamerr (yyp, yyarg[yyi++]);
+		  yyf += 2;
+		}
+	      else
+		{
+		  yyp++;
+		  yyf++;
+		}
+	    }
+	}
+      return yysize;
+    }
+}
+#endif /* YYERROR_VERBOSE */
+
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+    const char *yymsg;
+    int yytype;
+    YYSTYPE *yyvaluep;
+#endif
+{
+  YYUSE (yyvaluep);
+
+  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+  switch (yytype)
+    {
+
+      default:
+	break;
+    }
+}
+
+
+/* Prevent warnings from -Wmissing-prototypes.  */
+
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
 int yyparse (void);
-#endif
-#endif
-
-int
-yyparse(YYPARSE_PARAM_ARG)
-     YYPARSE_PARAM_DECL
-{
-  register int yystate;
-  register int yyn;
-  register short *yyssp;
-  register YYSTYPE *yyvsp;
-  int yyerrstatus;	/*  number of tokens to shift before error messages enabled */
-  int yychar1 = 0;		/*  lookahead token as an internal (translated) token number */
-
-  short	yyssa[YYINITDEPTH];	/*  the state stack			*/
-  YYSTYPE yyvsa[YYINITDEPTH];	/*  the semantic value stack		*/
-
-  short *yyss = yyssa;		/*  refer to the stacks thru separate pointers */
-  YYSTYPE *yyvs = yyvsa;	/*  to allow yyoverflow to reallocate them elsewhere */
-
-#ifdef YYLSP_NEEDED
-  YYLTYPE yylsa[YYINITDEPTH];	/*  the location stack			*/
-  YYLTYPE *yyls = yylsa;
-  YYLTYPE *yylsp;
-
-#define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
 #else
-#define YYPOPSTACK   (yyvsp--, yyssp--)
+int yyparse ();
 #endif
+#endif /* ! YYPARSE_PARAM */
 
-  int yystacksize = YYINITDEPTH;
-  int yyfree_stacks = 0;
 
-#ifdef YYPURE
-  int yychar;
-  YYSTYPE yylval;
-  int yynerrs;
-#ifdef YYLSP_NEEDED
-  YYLTYPE yylloc;
+
+/* The look-ahead symbol.  */
+int yychar;
+
+/* The semantic value of the look-ahead symbol.  */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far.  */
+int yynerrs;
+
+
+
+/*----------.
+| yyparse.  |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+    void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
 #endif
 #endif
-
-  YYSTYPE yyval;		/*  the variable used to return		*/
-				/*  semantic values from the action	*/
-				/*  routines				*/
-
-  int yylen;
-
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Starting parse\n");
+{
+  
+  int yystate;
+  int yyn;
+  int yyresult;
+  /* Number of tokens to shift before error messages enabled.  */
+  int yyerrstatus;
+  /* Look-ahead token as an internal (translated) token number.  */
+  int yytoken = 0;
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char yymsgbuf[128];
+  char *yymsg = yymsgbuf;
+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
 #endif
 
+  /* Three stacks and their tools:
+     `yyss': related to states,
+     `yyvs': related to semantic values,
+     `yyls': related to locations.
+
+     Refer to the stacks thru separate pointers, to allow yyoverflow
+     to reallocate them elsewhere.  */
+
+  /* The state stack.  */
+  yytype_int16 yyssa[YYINITDEPTH];
+  yytype_int16 *yyss = yyssa;
+  yytype_int16 *yyssp;
+
+  /* The semantic value stack.  */
+  YYSTYPE yyvsa[YYINITDEPTH];
+  YYSTYPE *yyvs = yyvsa;
+  YYSTYPE *yyvsp;
+
+
+
+#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+
+  YYSIZE_T yystacksize = YYINITDEPTH;
+
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+
+  /* The number of symbols on the RHS of the reduced rule.
+     Keep to zero when no symbol should be popped.  */
+  int yylen = 0;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
   yystate = 0;
   yyerrstatus = 0;
   yynerrs = 0;
@@ -2321,700 +3240,750 @@
      so that they stay on the same level as the state stack.
      The wasted elements are never initialized.  */
 
-  yyssp = yyss - 1;
+  yyssp = yyss;
   yyvsp = yyvs;
-#ifdef YYLSP_NEEDED
-  yylsp = yyls;
-#endif
 
-/* Push a new state, which is found in  yystate  .  */
-/* In all cases, when you get here, the value and location stacks
-   have just been pushed. so pushing a state here evens the stacks.  */
-yynewstate:
+  goto yysetstate;
 
-  *++yyssp = yystate;
+/*------------------------------------------------------------.
+| 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++;
 
-  if (yyssp >= yyss + yystacksize - 1)
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
     {
-      /* 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;
-      short *yyss1 = yyss;
-#ifdef YYLSP_NEEDED
-      YYLTYPE *yyls1 = yyls;
-#endif
-
       /* Get the current used size of the three stacks, in elements.  */
-      int size = yyssp - yyss + 1;
+      YYSIZE_T yysize = yyssp - yyss + 1;
 
 #ifdef yyoverflow
-      /* Each stack pointer address is followed by the size of
-	 the data in use in that stack, in bytes.  */
-#ifdef YYLSP_NEEDED
-      /* This used to be a conditional around just the two extra args,
-	 but that might be undefined if yyoverflow is a macro.  */
-      yyoverflow("parser stack overflow",
-		 &yyss1, size * sizeof (*yyssp),
-		 &yyvs1, size * sizeof (*yyvsp),
-		 &yyls1, size * sizeof (*yylsp),
-		 &yystacksize);
-#else
-      yyoverflow("parser stack overflow",
-		 &yyss1, size * sizeof (*yyssp),
-		 &yyvs1, size * sizeof (*yyvsp),
-		 &yystacksize);
-#endif
+      {
+	/* 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;
 
-      yyss = yyss1; yyvs = yyvs1;
-#ifdef YYLSP_NEEDED
-      yyls = yyls1;
-#endif
+
+	/* 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 (yystacksize >= YYMAXDEPTH)
-	{
-	  yyerror("parser stack overflow");
-	  if (yyfree_stacks)
-	    {
-	      free (yyss);
-	      free (yyvs);
-#ifdef YYLSP_NEEDED
-	      free (yyls);
-#endif
-	    }
-	  return 2;
-	}
+      if (YYMAXDEPTH <= yystacksize)
+	goto yyexhaustedlab;
       yystacksize *= 2;
-      if (yystacksize > YYMAXDEPTH)
+      if (YYMAXDEPTH < yystacksize)
 	yystacksize = YYMAXDEPTH;
-#ifndef YYSTACK_USE_ALLOCA
-      yyfree_stacks = 1;
-#endif
-      yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
-      __yy_memcpy ((char *)yyss, (char *)yyss1,
-		   size * (unsigned int) sizeof (*yyssp));
-      yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
-      __yy_memcpy ((char *)yyvs, (char *)yyvs1,
-		   size * (unsigned int) sizeof (*yyvsp));
-#ifdef YYLSP_NEEDED
-      yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
-      __yy_memcpy ((char *)yyls, (char *)yyls1,
-		   size * (unsigned int) sizeof (*yylsp));
-#endif
+
+      {
+	yytype_int16 *yyss1 = yyss;
+	union yyalloc *yyptr =
+	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+	if (! yyptr)
+	  goto yyexhaustedlab;
+	YYSTACK_RELOCATE (yyss);
+	YYSTACK_RELOCATE (yyvs);
+
+#  undef YYSTACK_RELOCATE
+	if (yyss1 != yyssa)
+	  YYSTACK_FREE (yyss1);
+      }
+# endif
 #endif /* no yyoverflow */
 
-      yyssp = yyss + size - 1;
-      yyvsp = yyvs + size - 1;
-#ifdef YYLSP_NEEDED
-      yylsp = yyls + size - 1;
-#endif
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
 
-#if YYDEBUG != 0
-      if (yydebug)
-	fprintf(stderr, "Stack size increased to %d\n", yystacksize);
-#endif
 
-      if (yyssp >= yyss + yystacksize - 1)
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+		  (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
 	YYABORT;
     }
 
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Entering state %d\n", yystate);
-#endif
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
 
   goto yybackup;
- yybackup:
 
-/* Do appropriate processing given the current state.  */
-/* Read a lookahead token if we need one and don't already have one.  */
-/* yyresume: */
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
 
-  /* First try to decide what to do without reference to lookahead token.  */
+  /* Do appropriate processing given the current state.  Read a
+     look-ahead token if we need one and don't already have one.  */
 
+  /* First try to decide what to do without reference to look-ahead token.  */
   yyn = yypact[yystate];
-  if (yyn == YYFLAG)
+  if (yyn == YYPACT_NINF)
     goto yydefault;
 
-  /* Not known => get a lookahead token if don't already have one.  */
+  /* Not known => get a look-ahead token if don't already have one.  */
 
-  /* yychar is either YYEMPTY or YYEOF
-     or a valid token in external form.  */
-
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
   if (yychar == YYEMPTY)
     {
-#if YYDEBUG != 0
-      if (yydebug)
-	fprintf(stderr, "Reading a token: ");
-#endif
+      YYDPRINTF ((stderr, "Reading a token: "));
       yychar = YYLEX;
     }
 
-  /* Convert token to internal form (in yychar1) for indexing tables with */
-
-  if (yychar <= 0)		/* This means end of input. */
+  if (yychar <= YYEOF)
     {
-      yychar1 = 0;
-      yychar = YYEOF;		/* Don't call YYLEX any more */
-
-#if YYDEBUG != 0
-      if (yydebug)
-	fprintf(stderr, "Now at end of input.\n");
-#endif
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
     }
   else
     {
-      yychar1 = YYTRANSLATE(yychar);
-
-#if YYDEBUG != 0
-      if (yydebug)
-	{
-	  fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
-	  /* Give the individual parser a way to print the precise meaning
-	     of a token, for further debugging info.  */
-#ifdef YYPRINT
-	  YYPRINT (stderr, yychar, yylval);
-#endif
-	  fprintf (stderr, ")\n");
-	}
-#endif
+      yytoken = YYTRANSLATE (yychar);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
     }
 
-  yyn += yychar1;
-  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
+  /* 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];
-
-  /* yyn is what to do for this token type in this state.
-     Negative => reduce, -yyn is rule number.
-     Positive => shift, yyn is new state.
-       New state is final state => don't bother to shift,
-       just return success.
-     0, or most negative number => error.  */
-
-  if (yyn < 0)
+  if (yyn <= 0)
     {
-      if (yyn == YYFLAG)
+      if (yyn == 0 || yyn == YYTABLE_NINF)
 	goto yyerrlab;
       yyn = -yyn;
       goto yyreduce;
     }
-  else if (yyn == 0)
-    goto yyerrlab;
 
   if (yyn == YYFINAL)
     YYACCEPT;
 
-  /* Shift the lookahead token.  */
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
 
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
-#endif
+  /* Shift the look-ahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
 
-  /* Discard the token being shifted unless it is eof.  */
+  /* Discard the shifted token unless it is eof.  */
   if (yychar != YYEOF)
     yychar = YYEMPTY;
 
-  *++yyvsp = yylval;
-#ifdef YYLSP_NEEDED
-  *++yylsp = yylloc;
-#endif
-
-  /* count tokens shifted since error; after three, turn off error status.  */
-  if (yyerrstatus) yyerrstatus--;
-
   yystate = yyn;
+  *++yyvsp = yylval;
+
   goto yynewstate;
 
-/* Do the default action for the current state.  */
-yydefault:
 
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
   yyn = yydefact[yystate];
   if (yyn == 0)
     goto yyerrlab;
+  goto yyreduce;
 
-/* Do a reduction.  yyn is the number of a rule to reduce with.  */
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
 yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
   yylen = yyr2[yyn];
-  if (yylen > 0)
-    yyval = yyvsp[1-yylen]; /* implement default value of the action */
 
-#if YYDEBUG != 0
-  if (yydebug)
+  /* 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)
     {
-      int i;
+        case 29:
+#line 1134 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;}
+    break;
 
-      fprintf (stderr, "Reducing via rule %d (line %d), ",
-	       yyn, yyrline[yyn]);
+  case 30:
+#line 1134 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;}
+    break;
 
-      /* Print the symbols being reduced, and their result.  */
-      for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
-	fprintf (stderr, "%s ", yytname[yyrhs[i]]);
-      fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
-    }
-#endif
+  case 31:
+#line 1135 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_SLT; ;}
+    break;
 
+  case 32:
+#line 1135 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;}
+    break;
 
-  switch (yyn) {
+  case 33:
+#line 1136 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;}
+    break;
 
-case 28:
-#line 1133 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_EQ; ;
-    break;}
-case 29:
-#line 1133 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_NE; ;
-    break;}
-case 30:
-#line 1134 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_SLT; ;
-    break;}
-case 31:
-#line 1134 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_SGT; ;
-    break;}
-case 32:
-#line 1135 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_SLE; ;
-    break;}
-case 33:
-#line 1135 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_SGE; ;
-    break;}
-case 34:
-#line 1136 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_ULT; ;
-    break;}
-case 35:
-#line 1136 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_UGT; ;
-    break;}
-case 36:
-#line 1137 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_ULE; ;
-    break;}
-case 37:
-#line 1137 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_UGE; ;
-    break;}
-case 38:
-#line 1141 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_OEQ; ;
-    break;}
-case 39:
-#line 1141 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_ONE; ;
-    break;}
-case 40:
-#line 1142 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_OLT; ;
-    break;}
-case 41:
-#line 1142 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_OGT; ;
-    break;}
-case 42:
-#line 1143 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_OLE; ;
-    break;}
-case 43:
-#line 1143 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_OGE; ;
-    break;}
-case 44:
-#line 1144 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_ORD; ;
-    break;}
-case 45:
-#line 1144 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_UNO; ;
-    break;}
-case 46:
-#line 1145 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_UEQ; ;
-    break;}
-case 47:
-#line 1145 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_UNE; ;
-    break;}
-case 48:
-#line 1146 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_ULT; ;
-    break;}
-case 49:
-#line 1146 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_UGT; ;
-    break;}
-case 50:
-#line 1147 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_ULE; ;
-    break;}
-case 51:
-#line 1147 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_UGE; ;
-    break;}
-case 52:
-#line 1148 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_TRUE; ;
-    break;}
-case 53:
-#line 1149 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_FALSE; ;
-    break;}
-case 64:
-#line 1158 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.StrVal = 0; ;
-    break;}
-case 65:
-#line 1162 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.StrVal = yyvsp[-1].StrVal;
+  case 34:
+#line 1136 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;}
+    break;
+
+  case 35:
+#line 1137 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;}
+    break;
+
+  case 36:
+#line 1137 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;}
+    break;
+
+  case 37:
+#line 1138 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;}
+    break;
+
+  case 38:
+#line 1138 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;}
+    break;
+
+  case 39:
+#line 1142 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;}
+    break;
+
+  case 40:
+#line 1142 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;}
+    break;
+
+  case 41:
+#line 1143 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;}
+    break;
+
+  case 42:
+#line 1143 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;}
+    break;
+
+  case 43:
+#line 1144 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;}
+    break;
+
+  case 44:
+#line 1144 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;}
+    break;
+
+  case 45:
+#line 1145 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;}
+    break;
+
+  case 46:
+#line 1145 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;}
+    break;
+
+  case 47:
+#line 1146 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;}
+    break;
+
+  case 48:
+#line 1146 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;}
+    break;
+
+  case 49:
+#line 1147 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;}
+    break;
+
+  case 50:
+#line 1147 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;}
+    break;
+
+  case 51:
+#line 1148 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;}
+    break;
+
+  case 52:
+#line 1148 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;}
+    break;
+
+  case 53:
+#line 1149 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;}
+    break;
+
+  case 54:
+#line 1150 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;}
+    break;
+
+  case 65:
+#line 1159 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.StrVal) = 0; ;}
+    break;
+
+  case 66:
+#line 1163 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.StrVal) = (yyvsp[(1) - (2)].StrVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 66:
-#line 1166 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.StrVal = 0;
+  ;}
+    break;
+
+  case 67:
+#line 1167 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.StrVal) = 0;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 70:
-#line 1174 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.StrVal = 0;
+  ;}
+    break;
+
+  case 71:
+#line 1175 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.StrVal) = 0;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 71:
-#line 1179 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.StrVal = yyvsp[-1].StrVal;
+  ;}
+    break;
+
+  case 72:
+#line 1180 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.StrVal) = (yyvsp[(1) - (2)].StrVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 72:
-#line 1185 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::InternalLinkage; ;
-    break;}
-case 73:
-#line 1186 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::WeakLinkage; ;
-    break;}
-case 74:
-#line 1187 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
-    break;}
-case 75:
-#line 1188 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::AppendingLinkage; ;
-    break;}
-case 76:
-#line 1189 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::DLLExportLinkage; ;
-    break;}
-case 77:
-#line 1193 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::DLLImportLinkage; ;
-    break;}
-case 78:
-#line 1194 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;
-    break;}
-case 79:
-#line 1195 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
-    break;}
-case 80:
-#line 1199 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Visibility = GlobalValue::DefaultVisibility;   ;
-    break;}
-case 81:
-#line 1200 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Visibility = GlobalValue::DefaultVisibility;   ;
-    break;}
-case 82:
-#line 1201 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Visibility = GlobalValue::HiddenVisibility;    ;
-    break;}
-case 83:
-#line 1202 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Visibility = GlobalValue::ProtectedVisibility; ;
-    break;}
-case 84:
-#line 1206 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
-    break;}
-case 85:
-#line 1207 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::DLLImportLinkage; ;
-    break;}
-case 86:
-#line 1208 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;
-    break;}
-case 87:
-#line 1212 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
-    break;}
-case 88:
-#line 1213 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::InternalLinkage; ;
-    break;}
-case 89:
-#line 1214 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
-    break;}
-case 90:
-#line 1215 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::WeakLinkage; ;
-    break;}
-case 91:
-#line 1216 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::DLLExportLinkage; ;
-    break;}
-case 92:
-#line 1220 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
-    break;}
-case 93:
-#line 1221 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::WeakLinkage; ;
-    break;}
-case 94:
-#line 1222 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::InternalLinkage; ;
-    break;}
-case 95:
-#line 1225 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = CallingConv::C; ;
-    break;}
-case 96:
-#line 1226 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = CallingConv::C; ;
-    break;}
-case 97:
-#line 1227 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = CallingConv::Fast; ;
-    break;}
-case 98:
-#line 1228 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = CallingConv::Cold; ;
-    break;}
-case 99:
-#line 1229 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = CallingConv::X86_StdCall; ;
-    break;}
-case 100:
-#line 1230 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = CallingConv::X86_FastCall; ;
-    break;}
-case 101:
-#line 1231 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-                   if ((unsigned)yyvsp[0].UInt64Val != yyvsp[0].UInt64Val)
+  ;}
+    break;
+
+  case 73:
+#line 1186 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
+    break;
+
+  case 74:
+#line 1187 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
+    break;
+
+  case 75:
+#line 1188 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
+    break;
+
+  case 76:
+#line 1189 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
+    break;
+
+  case 77:
+#line 1190 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
+    break;
+
+  case 78:
+#line 1194 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
+    break;
+
+  case 79:
+#line 1195 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
+    break;
+
+  case 80:
+#line 1196 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
+    break;
+
+  case 81:
+#line 1200 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Visibility) = GlobalValue::DefaultVisibility;   ;}
+    break;
+
+  case 82:
+#line 1201 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Visibility) = GlobalValue::DefaultVisibility;   ;}
+    break;
+
+  case 83:
+#line 1202 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Visibility) = GlobalValue::HiddenVisibility;    ;}
+    break;
+
+  case 84:
+#line 1203 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Visibility) = GlobalValue::ProtectedVisibility; ;}
+    break;
+
+  case 85:
+#line 1207 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
+    break;
+
+  case 86:
+#line 1208 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
+    break;
+
+  case 87:
+#line 1209 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
+    break;
+
+  case 88:
+#line 1213 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
+    break;
+
+  case 89:
+#line 1214 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
+    break;
+
+  case 90:
+#line 1215 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
+    break;
+
+  case 91:
+#line 1216 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
+    break;
+
+  case 92:
+#line 1217 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
+    break;
+
+  case 93:
+#line 1221 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
+    break;
+
+  case 94:
+#line 1222 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
+    break;
+
+  case 95:
+#line 1223 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
+    break;
+
+  case 96:
+#line 1226 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = CallingConv::C; ;}
+    break;
+
+  case 97:
+#line 1227 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = CallingConv::C; ;}
+    break;
+
+  case 98:
+#line 1228 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = CallingConv::Fast; ;}
+    break;
+
+  case 99:
+#line 1229 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = CallingConv::Cold; ;}
+    break;
+
+  case 100:
+#line 1230 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = CallingConv::X86_StdCall; ;}
+    break;
+
+  case 101:
+#line 1231 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = CallingConv::X86_FastCall; ;}
+    break;
+
+  case 102:
+#line 1232 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+                   if ((unsigned)(yyvsp[(2) - (2)].UInt64Val) != (yyvsp[(2) - (2)].UInt64Val))
                      GEN_ERROR("Calling conv too large");
-                   yyval.UIntVal = yyvsp[0].UInt64Val;
+                   (yyval.UIntVal) = (yyvsp[(2) - (2)].UInt64Val);
                   CHECK_FOR_ERROR
-                 ;
-    break;}
-case 102:
-#line 1238 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = ParamAttr::ZExt;      ;
-    break;}
-case 103:
-#line 1239 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = ParamAttr::ZExt;      ;
-    break;}
-case 104:
-#line 1240 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = ParamAttr::SExt;      ;
-    break;}
-case 105:
-#line 1241 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = ParamAttr::SExt;      ;
-    break;}
-case 106:
-#line 1242 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = ParamAttr::InReg;     ;
-    break;}
-case 107:
-#line 1243 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = ParamAttr::StructRet; ;
-    break;}
-case 108:
-#line 1244 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = ParamAttr::NoAlias;   ;
-    break;}
-case 109:
-#line 1245 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = ParamAttr::ByVal;     ;
-    break;}
-case 110:
-#line 1246 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = ParamAttr::Nest;      ;
-    break;}
-case 111:
-#line 1249 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = ParamAttr::None; ;
-    break;}
-case 112:
-#line 1250 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-                yyval.ParamAttrs = yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs;
-              ;
-    break;}
-case 113:
-#line 1255 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = ParamAttr::NoReturn; ;
-    break;}
-case 114:
-#line 1256 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = ParamAttr::NoUnwind; ;
-    break;}
-case 115:
-#line 1257 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = ParamAttr::ZExt;     ;
-    break;}
-case 116:
-#line 1258 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = ParamAttr::SExt;     ;
-    break;}
-case 117:
-#line 1261 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = ParamAttr::None; ;
-    break;}
-case 118:
-#line 1262 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-                yyval.ParamAttrs = yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs;
-              ;
-    break;}
-case 119:
-#line 1269 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = 0; ;
-    break;}
-case 120:
-#line 1270 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  yyval.UIntVal = yyvsp[0].UInt64Val;
-  if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal))
+                 ;}
+    break;
+
+  case 103:
+#line 1239 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = ParamAttr::ZExt;      ;}
+    break;
+
+  case 104:
+#line 1240 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = ParamAttr::ZExt;      ;}
+    break;
+
+  case 105:
+#line 1241 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = ParamAttr::SExt;      ;}
+    break;
+
+  case 106:
+#line 1242 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = ParamAttr::SExt;      ;}
+    break;
+
+  case 107:
+#line 1243 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = ParamAttr::InReg;     ;}
+    break;
+
+  case 108:
+#line 1244 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = ParamAttr::StructRet; ;}
+    break;
+
+  case 109:
+#line 1245 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = ParamAttr::NoAlias;   ;}
+    break;
+
+  case 110:
+#line 1246 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = ParamAttr::ByVal;     ;}
+    break;
+
+  case 111:
+#line 1247 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = ParamAttr::Nest;      ;}
+    break;
+
+  case 112:
+#line 1250 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = ParamAttr::None; ;}
+    break;
+
+  case 113:
+#line 1251 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+                (yyval.ParamAttrs) = (yyvsp[(1) - (2)].ParamAttrs) | (yyvsp[(2) - (2)].ParamAttrs);
+              ;}
+    break;
+
+  case 114:
+#line 1256 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = ParamAttr::NoReturn; ;}
+    break;
+
+  case 115:
+#line 1257 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = ParamAttr::NoUnwind; ;}
+    break;
+
+  case 116:
+#line 1258 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = ParamAttr::ZExt;     ;}
+    break;
+
+  case 117:
+#line 1259 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = ParamAttr::SExt;     ;}
+    break;
+
+  case 118:
+#line 1260 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = ParamAttr::Pure;     ;}
+    break;
+
+  case 119:
+#line 1261 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = ParamAttr::Const;    ;}
+    break;
+
+  case 120:
+#line 1264 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = ParamAttr::None; ;}
+    break;
+
+  case 121:
+#line 1265 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+                (yyval.ParamAttrs) = (yyvsp[(1) - (2)].ParamAttrs) | (yyvsp[(2) - (2)].ParamAttrs);
+              ;}
+    break;
+
+  case 122:
+#line 1272 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = 0; ;}
+    break;
+
+  case 123:
+#line 1273 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+  (yyval.UIntVal) = (yyvsp[(2) - (2)].UInt64Val);
+  if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
     GEN_ERROR("Alignment must be a power of two");
   CHECK_FOR_ERROR
-;
-    break;}
-case 121:
-#line 1276 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = 0; ;
-    break;}
-case 122:
-#line 1277 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  yyval.UIntVal = yyvsp[0].UInt64Val;
-  if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal))
+;}
+    break;
+
+  case 124:
+#line 1279 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = 0; ;}
+    break;
+
+  case 125:
+#line 1280 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+  (yyval.UIntVal) = (yyvsp[(3) - (3)].UInt64Val);
+  if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
     GEN_ERROR("Alignment must be a power of two");
   CHECK_FOR_ERROR
-;
-    break;}
-case 123:
-#line 1285 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  for (unsigned i = 0, e = yyvsp[0].StrVal->length(); i != e; ++i)
-    if ((*yyvsp[0].StrVal)[i] == '"' || (*yyvsp[0].StrVal)[i] == '\\')
+;}
+    break;
+
+  case 126:
+#line 1288 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+  for (unsigned i = 0, e = (yyvsp[(2) - (2)].StrVal)->length(); i != e; ++i)
+    if ((*(yyvsp[(2) - (2)].StrVal))[i] == '"' || (*(yyvsp[(2) - (2)].StrVal))[i] == '\\')
       GEN_ERROR("Invalid character in section name");
-  yyval.StrVal = yyvsp[0].StrVal;
+  (yyval.StrVal) = (yyvsp[(2) - (2)].StrVal);
   CHECK_FOR_ERROR
-;
-    break;}
-case 124:
-#line 1293 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.StrVal = 0; ;
-    break;}
-case 125:
-#line 1294 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.StrVal = yyvsp[0].StrVal; ;
-    break;}
-case 126:
-#line 1299 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{;
-    break;}
-case 127:
-#line 1300 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{;
-    break;}
-case 128:
-#line 1301 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    CurGV->setSection(*yyvsp[0].StrVal);
-    delete yyvsp[0].StrVal;
+;}
+    break;
+
+  case 127:
+#line 1296 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.StrVal) = 0; ;}
+    break;
+
+  case 128:
+#line 1297 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.StrVal) = (yyvsp[(1) - (1)].StrVal); ;}
+    break;
+
+  case 129:
+#line 1302 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {;}
+    break;
+
+  case 130:
+#line 1303 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {;}
+    break;
+
+  case 131:
+#line 1304 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    CurGV->setSection(*(yyvsp[(1) - (1)].StrVal));
+    delete (yyvsp[(1) - (1)].StrVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 129:
-#line 1306 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[0].UInt64Val != 0 && !isPowerOf2_32(yyvsp[0].UInt64Val))
+  ;}
+    break;
+
+  case 132:
+#line 1309 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[(2) - (2)].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[(2) - (2)].UInt64Val)))
       GEN_ERROR("Alignment must be a power of two");
-    CurGV->setAlignment(yyvsp[0].UInt64Val);
+    CurGV->setAlignment((yyvsp[(2) - (2)].UInt64Val));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 137:
-#line 1322 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeVal = new PATypeHolder(OpaqueType::get());
+  ;}
+    break;
+
+  case 140:
+#line 1325 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 138:
-#line 1326 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeVal = new PATypeHolder(yyvsp[0].PrimType);
+  ;}
+    break;
+
+  case 141:
+#line 1329 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeVal) = new PATypeHolder((yyvsp[(1) - (1)].PrimType));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 139:
-#line 1330 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{                             // Pointer type?
-    if (*yyvsp[-1].TypeVal == Type::LabelTy)
+  ;}
+    break;
+
+  case 142:
+#line 1333 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {                             // Pointer type?
+    if (*(yyvsp[(1) - (2)].TypeVal) == Type::LabelTy)
       GEN_ERROR("Cannot form a pointer to a basic block");
-    yyval.TypeVal = new PATypeHolder(HandleUpRefs(PointerType::get(*yyvsp[-1].TypeVal)));
-    delete yyvsp[-1].TypeVal;
+    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PointerType::get(*(yyvsp[(1) - (2)].TypeVal))));
+    delete (yyvsp[(1) - (2)].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 140:
-#line 1337 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{            // Named types are also simple types...
-    const Type* tmp = getTypeVal(yyvsp[0].ValIDVal);
+  ;}
+    break;
+
+  case 143:
+#line 1340 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {            // Named types are also simple types...
+    const Type* tmp = getTypeVal((yyvsp[(1) - (1)].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.TypeVal = new PATypeHolder(tmp);
-  ;
-    break;}
-case 141:
-#line 1342 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{                   // Type UpReference
-    if (yyvsp[0].UInt64Val > (uint64_t)~0U) GEN_ERROR("Value out of range");
+    (yyval.TypeVal) = new PATypeHolder(tmp);
+  ;}
+    break;
+
+  case 144:
+#line 1345 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {                   // Type UpReference
+    if ((yyvsp[(2) - (2)].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range");
     OpaqueType *OT = OpaqueType::get();        // Use temporary placeholder
-    UpRefs.push_back(UpRefRecord((unsigned)yyvsp[0].UInt64Val, OT));  // Add to vector...
-    yyval.TypeVal = new PATypeHolder(OT);
+    UpRefs.push_back(UpRefRecord((unsigned)(yyvsp[(2) - (2)].UInt64Val), OT));  // Add to vector...
+    (yyval.TypeVal) = new PATypeHolder(OT);
     UR_OUT("New Upreference!\n");
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 142:
-#line 1350 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 145:
+#line 1353 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     std::vector<const Type*> Params;
     ParamAttrsVector Attrs;
-    if (yyvsp[0].ParamAttrs != ParamAttr::None) {
-      ParamAttrsWithIndex X; X.index = 0; X.attrs = yyvsp[0].ParamAttrs;
+    if ((yyvsp[(5) - (5)].ParamAttrs) != ParamAttr::None) {
+      ParamAttrsWithIndex X; X.index = 0; X.attrs = (yyvsp[(5) - (5)].ParamAttrs);
       Attrs.push_back(X);
     }
     unsigned index = 1;
-    TypeWithAttrsList::iterator I = yyvsp[-2].TypeWithAttrsList->begin(), E = yyvsp[-2].TypeWithAttrsList->end();
+    TypeWithAttrsList::iterator I = (yyvsp[(3) - (5)].TypeWithAttrsList)->begin(), E = (yyvsp[(3) - (5)].TypeWithAttrsList)->end();
     for (; I != E; ++I, ++index) {
       const Type *Ty = I->Ty->get();
       Params.push_back(Ty);
@@ -3030,23 +3999,24 @@
     ParamAttrsList *ActualAttrs = 0;
     if (!Attrs.empty())
       ActualAttrs = ParamAttrsList::get(Attrs);
-    FunctionType *FT = FunctionType::get(*yyvsp[-4].TypeVal, Params, isVarArg, ActualAttrs);
-    delete yyvsp[-2].TypeWithAttrsList;   // Delete the argument list
-    delete yyvsp[-4].TypeVal;   // Delete the return type handle
-    yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT)); 
+    FunctionType *FT = FunctionType::get(*(yyvsp[(1) - (5)].TypeVal), Params, isVarArg, ActualAttrs);
+    delete (yyvsp[(3) - (5)].TypeWithAttrsList);   // Delete the argument list
+    delete (yyvsp[(1) - (5)].TypeVal);   // Delete the return type handle
+    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT)); 
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 143:
-#line 1380 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 146:
+#line 1383 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     std::vector<const Type*> Params;
     ParamAttrsVector Attrs;
-    if (yyvsp[0].ParamAttrs != ParamAttr::None) {
-      ParamAttrsWithIndex X; X.index = 0; X.attrs = yyvsp[0].ParamAttrs;
+    if ((yyvsp[(5) - (5)].ParamAttrs) != ParamAttr::None) {
+      ParamAttrsWithIndex X; X.index = 0; X.attrs = (yyvsp[(5) - (5)].ParamAttrs);
       Attrs.push_back(X);
     }
-    TypeWithAttrsList::iterator I = yyvsp[-2].TypeWithAttrsList->begin(), E = yyvsp[-2].TypeWithAttrsList->end();
+    TypeWithAttrsList::iterator I = (yyvsp[(3) - (5)].TypeWithAttrsList)->begin(), E = (yyvsp[(3) - (5)].TypeWithAttrsList)->end();
     unsigned index = 1;
     for ( ; I != E; ++I, ++index) {
       const Type* Ty = I->Ty->get();
@@ -3064,282 +4034,303 @@
     if (!Attrs.empty())
       ActualAttrs = ParamAttrsList::get(Attrs);
 
-    FunctionType *FT = FunctionType::get(yyvsp[-4].PrimType, Params, isVarArg, ActualAttrs);
-    delete yyvsp[-2].TypeWithAttrsList;      // Delete the argument list
-    yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT)); 
+    FunctionType *FT = FunctionType::get((yyvsp[(1) - (5)].PrimType), Params, isVarArg, ActualAttrs);
+    delete (yyvsp[(3) - (5)].TypeWithAttrsList);      // Delete the argument list
+    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT)); 
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 144:
-#line 1411 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{          // Sized array type?
-    yyval.TypeVal = new PATypeHolder(HandleUpRefs(ArrayType::get(*yyvsp[-1].TypeVal, (unsigned)yyvsp[-3].UInt64Val)));
-    delete yyvsp[-1].TypeVal;
+  ;}
+    break;
+
+  case 147:
+#line 1414 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {          // Sized array type?
+    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[(4) - (5)].TypeVal), (unsigned)(yyvsp[(2) - (5)].UInt64Val))));
+    delete (yyvsp[(4) - (5)].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 145:
-#line 1416 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{          // Vector type?
-     const llvm::Type* ElemTy = yyvsp[-1].TypeVal->get();
-     if ((unsigned)yyvsp[-3].UInt64Val != yyvsp[-3].UInt64Val)
+  ;}
+    break;
+
+  case 148:
+#line 1419 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {          // Vector type?
+     const llvm::Type* ElemTy = (yyvsp[(4) - (5)].TypeVal)->get();
+     if ((unsigned)(yyvsp[(2) - (5)].UInt64Val) != (yyvsp[(2) - (5)].UInt64Val))
         GEN_ERROR("Unsigned result not equal to signed result");
      if (!ElemTy->isFloatingPoint() && !ElemTy->isInteger())
         GEN_ERROR("Element type of a VectorType must be primitive");
-     if (!isPowerOf2_32(yyvsp[-3].UInt64Val))
+     if (!isPowerOf2_32((yyvsp[(2) - (5)].UInt64Val)))
        GEN_ERROR("Vector length should be a power of 2");
-     yyval.TypeVal = new PATypeHolder(HandleUpRefs(VectorType::get(*yyvsp[-1].TypeVal, (unsigned)yyvsp[-3].UInt64Val)));
-     delete yyvsp[-1].TypeVal;
+     (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(VectorType::get(*(yyvsp[(4) - (5)].TypeVal), (unsigned)(yyvsp[(2) - (5)].UInt64Val))));
+     delete (yyvsp[(4) - (5)].TypeVal);
      CHECK_FOR_ERROR
-  ;
-    break;}
-case 146:
-#line 1428 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{                        // Structure type?
+  ;}
+    break;
+
+  case 149:
+#line 1431 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {                        // Structure type?
     std::vector<const Type*> Elements;
-    for (std::list<llvm::PATypeHolder>::iterator I = yyvsp[-1].TypeList->begin(),
-           E = yyvsp[-1].TypeList->end(); I != E; ++I)
+    for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[(2) - (3)].TypeList)->begin(),
+           E = (yyvsp[(2) - (3)].TypeList)->end(); I != E; ++I)
       Elements.push_back(*I);
 
-    yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
-    delete yyvsp[-1].TypeList;
+    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
+    delete (yyvsp[(2) - (3)].TypeList);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 147:
-#line 1438 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{                                  // Empty structure type?
-    yyval.TypeVal = new PATypeHolder(StructType::get(std::vector<const Type*>()));
+  ;}
+    break;
+
+  case 150:
+#line 1441 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {                                  // Empty structure type?
+    (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>()));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 148:
-#line 1442 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 151:
+#line 1445 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     std::vector<const Type*> Elements;
-    for (std::list<llvm::PATypeHolder>::iterator I = yyvsp[-2].TypeList->begin(),
-           E = yyvsp[-2].TypeList->end(); I != E; ++I)
+    for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[(3) - (5)].TypeList)->begin(),
+           E = (yyvsp[(3) - (5)].TypeList)->end(); I != E; ++I)
       Elements.push_back(*I);
 
-    yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true)));
-    delete yyvsp[-2].TypeList;
+    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true)));
+    delete (yyvsp[(3) - (5)].TypeList);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 149:
-#line 1452 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{                         // Empty structure type?
-    yyval.TypeVal = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
+  ;}
+    break;
+
+  case 152:
+#line 1455 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {                         // Empty structure type?
+    (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 150:
-#line 1459 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ 
-    yyval.TypeWithAttrs.Ty = yyvsp[-1].TypeVal; 
-    yyval.TypeWithAttrs.Attrs = yyvsp[0].ParamAttrs; 
-  ;
-    break;}
-case 151:
-#line 1466 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 153:
+#line 1462 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { 
+    (yyval.TypeWithAttrs).Ty = (yyvsp[(1) - (2)].TypeVal); 
+    (yyval.TypeWithAttrs).Attrs = (yyvsp[(2) - (2)].ParamAttrs); 
+  ;}
+    break;
+
+  case 154:
+#line 1469 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
-    if (!(*yyvsp[0].TypeVal)->isFirstClassType())
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (1)].TypeVal))->getDescription());
+    if (!(*(yyvsp[(1) - (1)].TypeVal))->isFirstClassType())
       GEN_ERROR("LLVM functions cannot return aggregate types");
-    yyval.TypeVal = yyvsp[0].TypeVal;
-  ;
-    break;}
-case 152:
-#line 1473 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeVal = new PATypeHolder(Type::VoidTy);
-  ;
-    break;}
-case 153:
-#line 1478 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeWithAttrsList = new TypeWithAttrsList();
-    yyval.TypeWithAttrsList->push_back(yyvsp[0].TypeWithAttrs);
+    (yyval.TypeVal) = (yyvsp[(1) - (1)].TypeVal);
+  ;}
+    break;
+
+  case 155:
+#line 1476 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeVal) = new PATypeHolder(Type::VoidTy);
+  ;}
+    break;
+
+  case 156:
+#line 1481 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
+    (yyval.TypeWithAttrsList)->push_back((yyvsp[(1) - (1)].TypeWithAttrs));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 154:
-#line 1483 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    (yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList)->push_back(yyvsp[0].TypeWithAttrs);
+  ;}
+    break;
+
+  case 157:
+#line 1486 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    ((yyval.TypeWithAttrsList)=(yyvsp[(1) - (3)].TypeWithAttrsList))->push_back((yyvsp[(3) - (3)].TypeWithAttrs));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 156:
-#line 1491 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList;
+  ;}
+    break;
+
+  case 159:
+#line 1494 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeWithAttrsList)=(yyvsp[(1) - (3)].TypeWithAttrsList);
     TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None;
     TWA.Ty = new PATypeHolder(Type::VoidTy);
-    yyval.TypeWithAttrsList->push_back(TWA);
+    (yyval.TypeWithAttrsList)->push_back(TWA);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 157:
-#line 1498 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeWithAttrsList = new TypeWithAttrsList;
+  ;}
+    break;
+
+  case 160:
+#line 1501 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeWithAttrsList) = new TypeWithAttrsList;
     TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None;
     TWA.Ty = new PATypeHolder(Type::VoidTy);
-    yyval.TypeWithAttrsList->push_back(TWA);
+    (yyval.TypeWithAttrsList)->push_back(TWA);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 158:
-#line 1505 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeWithAttrsList = new TypeWithAttrsList();
+  ;}
+    break;
+
+  case 161:
+#line 1508 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 159:
-#line 1513 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeList = new std::list<PATypeHolder>();
-    yyval.TypeList->push_back(*yyvsp[0].TypeVal); 
-    delete yyvsp[0].TypeVal;
+  ;}
+    break;
+
+  case 162:
+#line 1516 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeList) = new std::list<PATypeHolder>();
+    (yyval.TypeList)->push_back(*(yyvsp[(1) - (1)].TypeVal)); 
+    delete (yyvsp[(1) - (1)].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 160:
-#line 1519 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    (yyval.TypeList=yyvsp[-2].TypeList)->push_back(*yyvsp[0].TypeVal); 
-    delete yyvsp[0].TypeVal;
+  ;}
+    break;
+
+  case 163:
+#line 1522 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    ((yyval.TypeList)=(yyvsp[(1) - (3)].TypeList))->push_back(*(yyvsp[(3) - (3)].TypeVal)); 
+    delete (yyvsp[(3) - (3)].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 161:
-#line 1531 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ // Nonempty unsized arr
+  ;}
+    break;
+
+  case 164:
+#line 1534 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { // Nonempty unsized arr
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
-    const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-3].TypeVal->get());
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (4)].TypeVal))->getDescription());
+    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[(1) - (4)].TypeVal)->get());
     if (ATy == 0)
       GEN_ERROR("Cannot make array constant with type: '" + 
-                     (*yyvsp[-3].TypeVal)->getDescription() + "'");
+                     (*(yyvsp[(1) - (4)].TypeVal))->getDescription() + "'");
     const Type *ETy = ATy->getElementType();
     int NumElements = ATy->getNumElements();
 
     // Verify that we have the correct size...
-    if (NumElements != -1 && NumElements != (int)yyvsp[-1].ConstVector->size())
+    if (NumElements != -1 && NumElements != (int)(yyvsp[(3) - (4)].ConstVector)->size())
       GEN_ERROR("Type mismatch: constant sized array initialized with " +
-                     utostr(yyvsp[-1].ConstVector->size()) +  " arguments, but has size of " + 
+                     utostr((yyvsp[(3) - (4)].ConstVector)->size()) +  " arguments, but has size of " + 
                      itostr(NumElements) + "");
 
     // Verify all elements are correct type!
-    for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
-      if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
+    for (unsigned i = 0; i < (yyvsp[(3) - (4)].ConstVector)->size(); i++) {
+      if (ETy != (*(yyvsp[(3) - (4)].ConstVector))[i]->getType())
         GEN_ERROR("Element #" + utostr(i) + " is not of type '" + 
                        ETy->getDescription() +"' as required!\nIt is of type '"+
-                       (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
+                       (*(yyvsp[(3) - (4)].ConstVector))[i]->getType()->getDescription() + "'.");
     }
 
-    yyval.ConstVal = ConstantArray::get(ATy, *yyvsp[-1].ConstVector);
-    delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
+    (yyval.ConstVal) = ConstantArray::get(ATy, *(yyvsp[(3) - (4)].ConstVector));
+    delete (yyvsp[(1) - (4)].TypeVal); delete (yyvsp[(3) - (4)].ConstVector);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 162:
-#line 1559 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 165:
+#line 1562 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
-    const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-2].TypeVal->get());
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
+    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[(1) - (3)].TypeVal)->get());
     if (ATy == 0)
       GEN_ERROR("Cannot make array constant with type: '" + 
-                     (*yyvsp[-2].TypeVal)->getDescription() + "'");
+                     (*(yyvsp[(1) - (3)].TypeVal))->getDescription() + "'");
 
     int NumElements = ATy->getNumElements();
     if (NumElements != -1 && NumElements != 0) 
       GEN_ERROR("Type mismatch: constant sized array initialized with 0"
                      " arguments, but has size of " + itostr(NumElements) +"");
-    yyval.ConstVal = ConstantArray::get(ATy, std::vector<Constant*>());
-    delete yyvsp[-2].TypeVal;
+    (yyval.ConstVal) = ConstantArray::get(ATy, std::vector<Constant*>());
+    delete (yyvsp[(1) - (3)].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 163:
-#line 1575 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 166:
+#line 1578 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
-    const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-2].TypeVal->get());
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
+    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[(1) - (3)].TypeVal)->get());
     if (ATy == 0)
       GEN_ERROR("Cannot make array constant with type: '" + 
-                     (*yyvsp[-2].TypeVal)->getDescription() + "'");
+                     (*(yyvsp[(1) - (3)].TypeVal))->getDescription() + "'");
 
     int NumElements = ATy->getNumElements();
     const Type *ETy = ATy->getElementType();
-    if (NumElements != -1 && NumElements != int(yyvsp[0].StrVal->length()))
+    if (NumElements != -1 && NumElements != int((yyvsp[(3) - (3)].StrVal)->length()))
       GEN_ERROR("Can't build string constant of size " + 
-                     itostr((int)(yyvsp[0].StrVal->length())) +
+                     itostr((int)((yyvsp[(3) - (3)].StrVal)->length())) +
                      " when array has size " + itostr(NumElements) + "");
     std::vector<Constant*> Vals;
     if (ETy == Type::Int8Ty) {
-      for (unsigned i = 0; i < yyvsp[0].StrVal->length(); ++i)
-        Vals.push_back(ConstantInt::get(ETy, (*yyvsp[0].StrVal)[i]));
+      for (unsigned i = 0; i < (yyvsp[(3) - (3)].StrVal)->length(); ++i)
+        Vals.push_back(ConstantInt::get(ETy, (*(yyvsp[(3) - (3)].StrVal))[i]));
     } else {
-      delete yyvsp[0].StrVal;
+      delete (yyvsp[(3) - (3)].StrVal);
       GEN_ERROR("Cannot build string arrays of non byte sized elements");
     }
-    delete yyvsp[0].StrVal;
-    yyval.ConstVal = ConstantArray::get(ATy, Vals);
-    delete yyvsp[-2].TypeVal;
+    delete (yyvsp[(3) - (3)].StrVal);
+    (yyval.ConstVal) = ConstantArray::get(ATy, Vals);
+    delete (yyvsp[(1) - (3)].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 164:
-#line 1602 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ // Nonempty unsized arr
+  ;}
+    break;
+
+  case 167:
+#line 1605 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { // Nonempty unsized arr
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
-    const VectorType *PTy = dyn_cast<VectorType>(yyvsp[-3].TypeVal->get());
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (4)].TypeVal))->getDescription());
+    const VectorType *PTy = dyn_cast<VectorType>((yyvsp[(1) - (4)].TypeVal)->get());
     if (PTy == 0)
       GEN_ERROR("Cannot make packed constant with type: '" + 
-                     (*yyvsp[-3].TypeVal)->getDescription() + "'");
+                     (*(yyvsp[(1) - (4)].TypeVal))->getDescription() + "'");
     const Type *ETy = PTy->getElementType();
     int NumElements = PTy->getNumElements();
 
     // Verify that we have the correct size...
-    if (NumElements != -1 && NumElements != (int)yyvsp[-1].ConstVector->size())
+    if (NumElements != -1 && NumElements != (int)(yyvsp[(3) - (4)].ConstVector)->size())
       GEN_ERROR("Type mismatch: constant sized packed initialized with " +
-                     utostr(yyvsp[-1].ConstVector->size()) +  " arguments, but has size of " + 
+                     utostr((yyvsp[(3) - (4)].ConstVector)->size()) +  " arguments, but has size of " + 
                      itostr(NumElements) + "");
 
     // Verify all elements are correct type!
-    for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
-      if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
+    for (unsigned i = 0; i < (yyvsp[(3) - (4)].ConstVector)->size(); i++) {
+      if (ETy != (*(yyvsp[(3) - (4)].ConstVector))[i]->getType())
         GEN_ERROR("Element #" + utostr(i) + " is not of type '" + 
            ETy->getDescription() +"' as required!\nIt is of type '"+
-           (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
+           (*(yyvsp[(3) - (4)].ConstVector))[i]->getType()->getDescription() + "'.");
     }
 
-    yyval.ConstVal = ConstantVector::get(PTy, *yyvsp[-1].ConstVector);
-    delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
+    (yyval.ConstVal) = ConstantVector::get(PTy, *(yyvsp[(3) - (4)].ConstVector));
+    delete (yyvsp[(1) - (4)].TypeVal); delete (yyvsp[(3) - (4)].ConstVector);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 165:
-#line 1630 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    const StructType *STy = dyn_cast<StructType>(yyvsp[-3].TypeVal->get());
+  ;}
+    break;
+
+  case 168:
+#line 1633 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    const StructType *STy = dyn_cast<StructType>((yyvsp[(1) - (4)].TypeVal)->get());
     if (STy == 0)
       GEN_ERROR("Cannot make struct constant with type: '" + 
-                     (*yyvsp[-3].TypeVal)->getDescription() + "'");
+                     (*(yyvsp[(1) - (4)].TypeVal))->getDescription() + "'");
 
-    if (yyvsp[-1].ConstVector->size() != STy->getNumContainedTypes())
+    if ((yyvsp[(3) - (4)].ConstVector)->size() != STy->getNumContainedTypes())
       GEN_ERROR("Illegal number of initializers for structure type");
 
     // Check to ensure that constants are compatible with the type initializer!
-    for (unsigned i = 0, e = yyvsp[-1].ConstVector->size(); i != e; ++i)
-      if ((*yyvsp[-1].ConstVector)[i]->getType() != STy->getElementType(i))
+    for (unsigned i = 0, e = (yyvsp[(3) - (4)].ConstVector)->size(); i != e; ++i)
+      if ((*(yyvsp[(3) - (4)].ConstVector))[i]->getType() != STy->getElementType(i))
         GEN_ERROR("Expected type '" +
                        STy->getElementType(i)->getDescription() +
                        "' for element #" + utostr(i) +
@@ -3350,20 +4341,21 @@
       GEN_ERROR("Unpacked Initializer to vector type '" +
                 STy->getDescription() + "'");
 
-    yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-1].ConstVector);
-    delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
+    (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[(3) - (4)].ConstVector));
+    delete (yyvsp[(1) - (4)].TypeVal); delete (yyvsp[(3) - (4)].ConstVector);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 166:
-#line 1656 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 169:
+#line 1659 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
-    const StructType *STy = dyn_cast<StructType>(yyvsp[-2].TypeVal->get());
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
+    const StructType *STy = dyn_cast<StructType>((yyvsp[(1) - (3)].TypeVal)->get());
     if (STy == 0)
       GEN_ERROR("Cannot make struct constant with type: '" + 
-                     (*yyvsp[-2].TypeVal)->getDescription() + "'");
+                     (*(yyvsp[(1) - (3)].TypeVal))->getDescription() + "'");
 
     if (STy->getNumContainedTypes() != 0)
       GEN_ERROR("Illegal number of initializers for structure type");
@@ -3373,25 +4365,26 @@
       GEN_ERROR("Unpacked Initializer to vector type '" +
                 STy->getDescription() + "'");
 
-    yyval.ConstVal = ConstantStruct::get(STy, std::vector<Constant*>());
-    delete yyvsp[-2].TypeVal;
+    (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
+    delete (yyvsp[(1) - (3)].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 167:
-#line 1676 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    const StructType *STy = dyn_cast<StructType>(yyvsp[-5].TypeVal->get());
+  ;}
+    break;
+
+  case 170:
+#line 1679 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    const StructType *STy = dyn_cast<StructType>((yyvsp[(1) - (6)].TypeVal)->get());
     if (STy == 0)
       GEN_ERROR("Cannot make struct constant with type: '" + 
-                     (*yyvsp[-5].TypeVal)->getDescription() + "'");
+                     (*(yyvsp[(1) - (6)].TypeVal))->getDescription() + "'");
 
-    if (yyvsp[-2].ConstVector->size() != STy->getNumContainedTypes())
+    if ((yyvsp[(4) - (6)].ConstVector)->size() != STy->getNumContainedTypes())
       GEN_ERROR("Illegal number of initializers for structure type");
 
     // Check to ensure that constants are compatible with the type initializer!
-    for (unsigned i = 0, e = yyvsp[-2].ConstVector->size(); i != e; ++i)
-      if ((*yyvsp[-2].ConstVector)[i]->getType() != STy->getElementType(i))
+    for (unsigned i = 0, e = (yyvsp[(4) - (6)].ConstVector)->size(); i != e; ++i)
+      if ((*(yyvsp[(4) - (6)].ConstVector))[i]->getType() != STy->getElementType(i))
         GEN_ERROR("Expected type '" +
                        STy->getElementType(i)->getDescription() +
                        "' for element #" + utostr(i) +
@@ -3402,20 +4395,21 @@
       GEN_ERROR("Vector initializer to non-vector type '" + 
                 STy->getDescription() + "'");
 
-    yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-2].ConstVector);
-    delete yyvsp[-5].TypeVal; delete yyvsp[-2].ConstVector;
+    (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[(4) - (6)].ConstVector));
+    delete (yyvsp[(1) - (6)].TypeVal); delete (yyvsp[(4) - (6)].ConstVector);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 168:
-#line 1702 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 171:
+#line 1705 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
-    const StructType *STy = dyn_cast<StructType>(yyvsp[-4].TypeVal->get());
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (5)].TypeVal))->getDescription());
+    const StructType *STy = dyn_cast<StructType>((yyvsp[(1) - (5)].TypeVal)->get());
     if (STy == 0)
       GEN_ERROR("Cannot make struct constant with type: '" + 
-                     (*yyvsp[-4].TypeVal)->getDescription() + "'");
+                     (*(yyvsp[(1) - (5)].TypeVal))->getDescription() + "'");
 
     if (STy->getNumContainedTypes() != 0)
       GEN_ERROR("Illegal number of initializers for structure type");
@@ -3425,42 +4419,45 @@
       GEN_ERROR("Vector initializer to non-vector type '" + 
                 STy->getDescription() + "'");
 
-    yyval.ConstVal = ConstantStruct::get(STy, std::vector<Constant*>());
-    delete yyvsp[-4].TypeVal;
+    (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
+    delete (yyvsp[(1) - (5)].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 169:
-#line 1722 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 172:
+#line 1725 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
-    const PointerType *PTy = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
+    const PointerType *PTy = dyn_cast<PointerType>((yyvsp[(1) - (2)].TypeVal)->get());
     if (PTy == 0)
       GEN_ERROR("Cannot make null pointer constant with type: '" + 
-                     (*yyvsp[-1].TypeVal)->getDescription() + "'");
+                     (*(yyvsp[(1) - (2)].TypeVal))->getDescription() + "'");
 
-    yyval.ConstVal = ConstantPointerNull::get(PTy);
-    delete yyvsp[-1].TypeVal;
+    (yyval.ConstVal) = ConstantPointerNull::get(PTy);
+    delete (yyvsp[(1) - (2)].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 170:
-#line 1734 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 173:
+#line 1737 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
-    yyval.ConstVal = UndefValue::get(yyvsp[-1].TypeVal->get());
-    delete yyvsp[-1].TypeVal;
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
+    (yyval.ConstVal) = UndefValue::get((yyvsp[(1) - (2)].TypeVal)->get());
+    delete (yyvsp[(1) - (2)].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 171:
-#line 1741 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 174:
+#line 1744 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
-    const PointerType *Ty = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
+    const PointerType *Ty = dyn_cast<PointerType>((yyvsp[(1) - (2)].TypeVal)->get());
     if (Ty == 0)
       GEN_ERROR("Global const reference must be a pointer type");
 
@@ -3474,7 +4471,7 @@
     Function *SavedCurFn = CurFun.CurrentFunction;
     CurFun.CurrentFunction = 0;
 
-    Value *V = getExistingVal(Ty, yyvsp[0].ValIDVal);
+    Value *V = getExistingVal(Ty, (yyvsp[(2) - (2)].ValIDVal));
     CHECK_FOR_ERROR
 
     CurFun.CurrentFunction = SavedCurFn;
@@ -3489,16 +4486,16 @@
 
       // First check to see if the forward references value is already created!
       PerModuleInfo::GlobalRefsType::iterator I =
-        CurModule.GlobalRefs.find(std::make_pair(PT, yyvsp[0].ValIDVal));
+        CurModule.GlobalRefs.find(std::make_pair(PT, (yyvsp[(2) - (2)].ValIDVal)));
     
       if (I != CurModule.GlobalRefs.end()) {
         V = I->second;             // Placeholder already exists, use it...
-        yyvsp[0].ValIDVal.destroy();
+        (yyvsp[(2) - (2)].ValIDVal).destroy();
       } else {
         std::string Name;
-        if (yyvsp[0].ValIDVal.Type == ValID::GlobalName)
-          Name = yyvsp[0].ValIDVal.getName();
-        else if (yyvsp[0].ValIDVal.Type != ValID::GlobalID)
+        if ((yyvsp[(2) - (2)].ValIDVal).Type == ValID::GlobalName)
+          Name = (yyvsp[(2) - (2)].ValIDVal).getName();
+        else if ((yyvsp[(2) - (2)].ValIDVal).Type != ValID::GlobalID)
           GEN_ERROR("Invalid reference to global");
 
         // Create the forward referenced global.
@@ -3514,342 +4511,377 @@
         }
 
         // Keep track of the fact that we have a forward ref to recycle it
-        CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, yyvsp[0].ValIDVal), GV));
+        CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, (yyvsp[(2) - (2)].ValIDVal)), GV));
         V = GV;
       }
     }
 
-    yyval.ConstVal = cast<GlobalValue>(V);
-    delete yyvsp[-1].TypeVal;            // Free the type handle
+    (yyval.ConstVal) = cast<GlobalValue>(V);
+    delete (yyvsp[(1) - (2)].TypeVal);            // Free the type handle
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 172:
-#line 1807 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 175:
+#line 1810 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
-    if (yyvsp[-1].TypeVal->get() != yyvsp[0].ConstVal->getType())
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
+    if ((yyvsp[(1) - (2)].TypeVal)->get() != (yyvsp[(2) - (2)].ConstVal)->getType())
       GEN_ERROR("Mismatched types for constant expression: " + 
-        (*yyvsp[-1].TypeVal)->getDescription() + " and " + yyvsp[0].ConstVal->getType()->getDescription());
-    yyval.ConstVal = yyvsp[0].ConstVal;
-    delete yyvsp[-1].TypeVal;
+        (*(yyvsp[(1) - (2)].TypeVal))->getDescription() + " and " + (yyvsp[(2) - (2)].ConstVal)->getType()->getDescription());
+    (yyval.ConstVal) = (yyvsp[(2) - (2)].ConstVal);
+    delete (yyvsp[(1) - (2)].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 173:
-#line 1817 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 176:
+#line 1820 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
-    const Type *Ty = yyvsp[-1].TypeVal->get();
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
+    const Type *Ty = (yyvsp[(1) - (2)].TypeVal)->get();
     if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
       GEN_ERROR("Cannot create a null initialized value of this type");
-    yyval.ConstVal = Constant::getNullValue(Ty);
-    delete yyvsp[-1].TypeVal;
+    (yyval.ConstVal) = Constant::getNullValue(Ty);
+    delete (yyvsp[(1) - (2)].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 174:
-#line 1827 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{      // integral constants
-    if (!ConstantInt::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].SInt64Val))
+  ;}
+    break;
+
+  case 177:
+#line 1830 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {      // integral constants
+    if (!ConstantInt::isValueValidForType((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].SInt64Val)))
       GEN_ERROR("Constant value doesn't fit in type");
-    yyval.ConstVal = ConstantInt::get(yyvsp[-1].PrimType, yyvsp[0].SInt64Val, true);
+    (yyval.ConstVal) = ConstantInt::get((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].SInt64Val), true);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 175:
-#line 1833 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{      // arbitrary precision integer constants
-    uint32_t BitWidth = cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth();
-    if (yyvsp[0].APIntVal->getBitWidth() > BitWidth) {
+  ;}
+    break;
+
+  case 178:
+#line 1836 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {      // arbitrary precision integer constants
+    uint32_t BitWidth = cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth();
+    if ((yyvsp[(2) - (2)].APIntVal)->getBitWidth() > BitWidth) {
       GEN_ERROR("Constant value does not fit in type");
     }
-    yyvsp[0].APIntVal->sextOrTrunc(BitWidth);
-    yyval.ConstVal = ConstantInt::get(*yyvsp[0].APIntVal);
-    delete yyvsp[0].APIntVal;
+    (yyvsp[(2) - (2)].APIntVal)->sextOrTrunc(BitWidth);
+    (yyval.ConstVal) = ConstantInt::get(*(yyvsp[(2) - (2)].APIntVal));
+    delete (yyvsp[(2) - (2)].APIntVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 176:
-#line 1843 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{      // integral constants
-    if (!ConstantInt::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].UInt64Val))
+  ;}
+    break;
+
+  case 179:
+#line 1846 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {      // integral constants
+    if (!ConstantInt::isValueValidForType((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].UInt64Val)))
       GEN_ERROR("Constant value doesn't fit in type");
-    yyval.ConstVal = ConstantInt::get(yyvsp[-1].PrimType, yyvsp[0].UInt64Val, false);
+    (yyval.ConstVal) = ConstantInt::get((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].UInt64Val), false);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 177:
-#line 1849 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{      // arbitrary precision integer constants
-    uint32_t BitWidth = cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth();
-    if (yyvsp[0].APIntVal->getBitWidth() > BitWidth) {
+  ;}
+    break;
+
+  case 180:
+#line 1852 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {      // arbitrary precision integer constants
+    uint32_t BitWidth = cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth();
+    if ((yyvsp[(2) - (2)].APIntVal)->getBitWidth() > BitWidth) {
       GEN_ERROR("Constant value does not fit in type");
     } 
-    yyvsp[0].APIntVal->zextOrTrunc(BitWidth);
-    yyval.ConstVal = ConstantInt::get(*yyvsp[0].APIntVal);
-    delete yyvsp[0].APIntVal;
+    (yyvsp[(2) - (2)].APIntVal)->zextOrTrunc(BitWidth);
+    (yyval.ConstVal) = ConstantInt::get(*(yyvsp[(2) - (2)].APIntVal));
+    delete (yyvsp[(2) - (2)].APIntVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 178:
-#line 1859 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{                      // Boolean constants
-    assert(cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth() == 1 && "Not Bool?");
-    yyval.ConstVal = ConstantInt::getTrue();
+  ;}
+    break;
+
+  case 181:
+#line 1862 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {                      // Boolean constants
+    assert(cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth() == 1 && "Not Bool?");
+    (yyval.ConstVal) = ConstantInt::getTrue();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 179:
-#line 1864 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{                     // Boolean constants
-    assert(cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth() == 1 && "Not Bool?");
-    yyval.ConstVal = ConstantInt::getFalse();
+  ;}
+    break;
+
+  case 182:
+#line 1867 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {                     // Boolean constants
+    assert(cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth() == 1 && "Not Bool?");
+    (yyval.ConstVal) = ConstantInt::getFalse();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 180:
-#line 1869 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{                   // Floating point constants
-    if (!ConstantFP::isValueValidForType(yyvsp[-1].PrimType, *yyvsp[0].FPVal))
+  ;}
+    break;
+
+  case 183:
+#line 1872 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {                   // Floating point constants
+    if (!ConstantFP::isValueValidForType((yyvsp[(1) - (2)].PrimType), *(yyvsp[(2) - (2)].FPVal)))
       GEN_ERROR("Floating point constant invalid for type");
     // Lexer has no type info, so builds all float and double FP constants 
     // as double.  Fix this here.  Long double is done right.
-    if (&yyvsp[0].FPVal->getSemantics()==&APFloat::IEEEdouble && yyvsp[-1].PrimType==Type::FloatTy)
-      yyvsp[0].FPVal->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven);
-    yyval.ConstVal = ConstantFP::get(yyvsp[-1].PrimType, *yyvsp[0].FPVal);
-    delete yyvsp[0].FPVal;
+    if (&(yyvsp[(2) - (2)].FPVal)->getSemantics()==&APFloat::IEEEdouble && (yyvsp[(1) - (2)].PrimType)==Type::FloatTy)
+      (yyvsp[(2) - (2)].FPVal)->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven);
+    (yyval.ConstVal) = ConstantFP::get((yyvsp[(1) - (2)].PrimType), *(yyvsp[(2) - (2)].FPVal));
+    delete (yyvsp[(2) - (2)].FPVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 181:
-#line 1882 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 184:
+#line 1885 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
-    Constant *Val = yyvsp[-3].ConstVal;
-    const Type *DestTy = yyvsp[-1].TypeVal->get();
-    if (!CastInst::castIsValid(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy))
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(5) - (6)].TypeVal))->getDescription());
+    Constant *Val = (yyvsp[(3) - (6)].ConstVal);
+    const Type *DestTy = (yyvsp[(5) - (6)].TypeVal)->get();
+    if (!CastInst::castIsValid((yyvsp[(1) - (6)].CastOpVal), (yyvsp[(3) - (6)].ConstVal), DestTy))
       GEN_ERROR("invalid cast opcode for cast from '" +
                 Val->getType()->getDescription() + "' to '" +
                 DestTy->getDescription() + "'"); 
-    yyval.ConstVal = ConstantExpr::getCast(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy);
-    delete yyvsp[-1].TypeVal;
-  ;
-    break;}
-case 182:
-#line 1894 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!isa<PointerType>(yyvsp[-2].ConstVal->getType()))
+    (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[(1) - (6)].CastOpVal), (yyvsp[(3) - (6)].ConstVal), DestTy);
+    delete (yyvsp[(5) - (6)].TypeVal);
+  ;}
+    break;
+
+  case 185:
+#line 1897 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!isa<PointerType>((yyvsp[(3) - (5)].ConstVal)->getType()))
       GEN_ERROR("GetElementPtr requires a pointer operand");
 
     const Type *IdxTy =
-      GetElementPtrInst::getIndexedType(yyvsp[-2].ConstVal->getType(), yyvsp[-1].ValueList->begin(), yyvsp[-1].ValueList->end(),
+      GetElementPtrInst::getIndexedType((yyvsp[(3) - (5)].ConstVal)->getType(), (yyvsp[(4) - (5)].ValueList)->begin(), (yyvsp[(4) - (5)].ValueList)->end(),
                                         true);
     if (!IdxTy)
       GEN_ERROR("Index list invalid for constant getelementptr");
 
     SmallVector<Constant*, 8> IdxVec;
-    for (unsigned i = 0, e = yyvsp[-1].ValueList->size(); i != e; ++i)
-      if (Constant *C = dyn_cast<Constant>((*yyvsp[-1].ValueList)[i]))
+    for (unsigned i = 0, e = (yyvsp[(4) - (5)].ValueList)->size(); i != e; ++i)
+      if (Constant *C = dyn_cast<Constant>((*(yyvsp[(4) - (5)].ValueList))[i]))
         IdxVec.push_back(C);
       else
         GEN_ERROR("Indices to constant getelementptr must be constants");
 
-    delete yyvsp[-1].ValueList;
+    delete (yyvsp[(4) - (5)].ValueList);
 
-    yyval.ConstVal = ConstantExpr::getGetElementPtr(yyvsp[-2].ConstVal, &IdxVec[0], IdxVec.size());
+    (yyval.ConstVal) = ConstantExpr::getGetElementPtr((yyvsp[(3) - (5)].ConstVal), &IdxVec[0], IdxVec.size());
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 183:
-#line 1916 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[-5].ConstVal->getType() != Type::Int1Ty)
+  ;}
+    break;
+
+  case 186:
+#line 1919 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[(3) - (8)].ConstVal)->getType() != Type::Int1Ty)
       GEN_ERROR("Select condition must be of boolean type");
-    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
+    if ((yyvsp[(5) - (8)].ConstVal)->getType() != (yyvsp[(7) - (8)].ConstVal)->getType())
       GEN_ERROR("Select operand types must match");
-    yyval.ConstVal = ConstantExpr::getSelect(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
+    (yyval.ConstVal) = ConstantExpr::getSelect((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 184:
-#line 1924 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
+  ;}
+    break;
+
+  case 187:
+#line 1927 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[(3) - (6)].ConstVal)->getType() != (yyvsp[(5) - (6)].ConstVal)->getType())
       GEN_ERROR("Binary operator types must match");
     CHECK_FOR_ERROR;
-    yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
-  ;
-    break;}
-case 185:
-#line 1930 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
+    (yyval.ConstVal) = ConstantExpr::get((yyvsp[(1) - (6)].BinaryOpVal), (yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal));
+  ;}
+    break;
+
+  case 188:
+#line 1933 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[(3) - (6)].ConstVal)->getType() != (yyvsp[(5) - (6)].ConstVal)->getType())
       GEN_ERROR("Logical operator types must match");
-    if (!yyvsp[-3].ConstVal->getType()->isInteger()) {
-      if (Instruction::isShift(yyvsp[-5].BinaryOpVal) || !isa<VectorType>(yyvsp[-3].ConstVal->getType()) || 
-          !cast<VectorType>(yyvsp[-3].ConstVal->getType())->getElementType()->isInteger())
+    if (!(yyvsp[(3) - (6)].ConstVal)->getType()->isInteger()) {
+      if (Instruction::isShift((yyvsp[(1) - (6)].BinaryOpVal)) || !isa<VectorType>((yyvsp[(3) - (6)].ConstVal)->getType()) || 
+          !cast<VectorType>((yyvsp[(3) - (6)].ConstVal)->getType())->getElementType()->isInteger())
         GEN_ERROR("Logical operator requires integral operands");
     }
-    yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
+    (yyval.ConstVal) = ConstantExpr::get((yyvsp[(1) - (6)].BinaryOpVal), (yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 186:
-#line 1941 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
+  ;}
+    break;
+
+  case 189:
+#line 1944 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[(4) - (7)].ConstVal)->getType() != (yyvsp[(6) - (7)].ConstVal)->getType())
       GEN_ERROR("icmp operand types must match");
-    yyval.ConstVal = ConstantExpr::getICmp(yyvsp[-5].IPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
-  ;
-    break;}
-case 187:
-#line 1946 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
+    (yyval.ConstVal) = ConstantExpr::getICmp((yyvsp[(2) - (7)].IPredicate), (yyvsp[(4) - (7)].ConstVal), (yyvsp[(6) - (7)].ConstVal));
+  ;}
+    break;
+
+  case 190:
+#line 1949 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[(4) - (7)].ConstVal)->getType() != (yyvsp[(6) - (7)].ConstVal)->getType())
       GEN_ERROR("fcmp operand types must match");
-    yyval.ConstVal = ConstantExpr::getFCmp(yyvsp[-5].FPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
-  ;
-    break;}
-case 188:
-#line 1951 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!ExtractElementInst::isValidOperands(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
+    (yyval.ConstVal) = ConstantExpr::getFCmp((yyvsp[(2) - (7)].FPredicate), (yyvsp[(4) - (7)].ConstVal), (yyvsp[(6) - (7)].ConstVal));
+  ;}
+    break;
+
+  case 191:
+#line 1954 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!ExtractElementInst::isValidOperands((yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal)))
       GEN_ERROR("Invalid extractelement operands");
-    yyval.ConstVal = ConstantExpr::getExtractElement(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
+    (yyval.ConstVal) = ConstantExpr::getExtractElement((yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 189:
-#line 1957 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!InsertElementInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
+  ;}
+    break;
+
+  case 192:
+#line 1960 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!InsertElementInst::isValidOperands((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal)))
       GEN_ERROR("Invalid insertelement operands");
-    yyval.ConstVal = ConstantExpr::getInsertElement(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
+    (yyval.ConstVal) = ConstantExpr::getInsertElement((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 190:
-#line 1963 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!ShuffleVectorInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
+  ;}
+    break;
+
+  case 193:
+#line 1966 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!ShuffleVectorInst::isValidOperands((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal)))
       GEN_ERROR("Invalid shufflevector operands");
-    yyval.ConstVal = ConstantExpr::getShuffleVector(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
+    (yyval.ConstVal) = ConstantExpr::getShuffleVector((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 191:
-#line 1972 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    (yyval.ConstVector = yyvsp[-2].ConstVector)->push_back(yyvsp[0].ConstVal);
+  ;}
+    break;
+
+  case 194:
+#line 1975 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    ((yyval.ConstVector) = (yyvsp[(1) - (3)].ConstVector))->push_back((yyvsp[(3) - (3)].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 192:
-#line 1976 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ConstVector = new std::vector<Constant*>();
-    yyval.ConstVector->push_back(yyvsp[0].ConstVal);
+  ;}
+    break;
+
+  case 195:
+#line 1979 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ConstVector) = new std::vector<Constant*>();
+    (yyval.ConstVector)->push_back((yyvsp[(1) - (1)].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 193:
-#line 1984 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.BoolVal = false; ;
-    break;}
-case 194:
-#line 1984 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.BoolVal = true; ;
-    break;}
-case 195:
-#line 1987 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.BoolVal = true; ;
-    break;}
-case 196:
-#line 1987 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.BoolVal = false; ;
-    break;}
-case 197:
-#line 1990 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    const Type* VTy = yyvsp[-1].TypeVal->get();
-    Value *V = getVal(VTy, yyvsp[0].ValIDVal);
+  ;}
+    break;
+
+  case 196:
+#line 1987 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.BoolVal) = false; ;}
+    break;
+
+  case 197:
+#line 1987 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.BoolVal) = true; ;}
+    break;
+
+  case 198:
+#line 1990 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.BoolVal) = true; ;}
+    break;
+
+  case 199:
+#line 1990 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.BoolVal) = false; ;}
+    break;
+
+  case 200:
+#line 1993 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    const Type* VTy = (yyvsp[(1) - (2)].TypeVal)->get();
+    Value *V = getVal(VTy, (yyvsp[(2) - (2)].ValIDVal));
     CHECK_FOR_ERROR
     GlobalValue* Aliasee = dyn_cast<GlobalValue>(V);
     if (!Aliasee)
       GEN_ERROR("Aliases can be created only to global values");
 
-    yyval.ConstVal = Aliasee;
+    (yyval.ConstVal) = Aliasee;
     CHECK_FOR_ERROR
-    delete yyvsp[-1].TypeVal;
-   ;
-    break;}
-case 198:
-#line 2002 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    Constant *Val = yyvsp[-3].ConstVal;
-    const Type *DestTy = yyvsp[-1].TypeVal->get();
-    if (!CastInst::castIsValid(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy))
+    delete (yyvsp[(1) - (2)].TypeVal);
+   ;}
+    break;
+
+  case 201:
+#line 2005 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    Constant *Val = (yyvsp[(3) - (6)].ConstVal);
+    const Type *DestTy = (yyvsp[(5) - (6)].TypeVal)->get();
+    if (!CastInst::castIsValid((yyvsp[(1) - (6)].CastOpVal), (yyvsp[(3) - (6)].ConstVal), DestTy))
       GEN_ERROR("invalid cast opcode for cast from '" +
                 Val->getType()->getDescription() + "' to '" +
                 DestTy->getDescription() + "'");
     
-    yyval.ConstVal = ConstantExpr::getCast(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy);
+    (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[(1) - (6)].CastOpVal), (yyvsp[(3) - (6)].ConstVal), DestTy);
     CHECK_FOR_ERROR
-    delete yyvsp[-1].TypeVal;
-   ;
-    break;}
-case 199:
-#line 2023 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ModuleVal = ParserResult = CurModule.CurrentModule;
+    delete (yyvsp[(5) - (6)].TypeVal);
+   ;}
+    break;
+
+  case 202:
+#line 2026 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
     CurModule.ModuleDone();
     CHECK_FOR_ERROR;
-  ;
-    break;}
-case 200:
-#line 2028 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ModuleVal = ParserResult = CurModule.CurrentModule;
+  ;}
+    break;
+
+  case 203:
+#line 2031 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
     CurModule.ModuleDone();
     CHECK_FOR_ERROR;
-  ;
-    break;}
-case 203:
-#line 2041 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ CurFun.isDeclare = false; ;
-    break;}
-case 204:
-#line 2041 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 206:
+#line 2044 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { CurFun.isDeclare = false; ;}
+    break;
+
+  case 207:
+#line 2044 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     CurFun.FunctionDone();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 205:
-#line 2045 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ CurFun.isDeclare = true; ;
-    break;}
-case 206:
-#line 2045 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 208:
+#line 2048 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { CurFun.isDeclare = true; ;}
+    break;
+
+  case 209:
+#line 2048 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 207:
-#line 2048 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 210:
+#line 2051 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 208:
-#line 2051 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 211:
+#line 2054 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (3)].TypeVal))->getDescription());
     // Eagerly resolve types.  This is not an optimization, this is a
     // requirement that is due to the fact that we could have this:
     //
@@ -3859,100 +4891,108 @@
     // If types are not resolved eagerly, then the two types will not be
     // determined to be the same type!
     //
-    ResolveTypeTo(yyvsp[-2].StrVal, *yyvsp[0].TypeVal);
+    ResolveTypeTo((yyvsp[(1) - (3)].StrVal), *(yyvsp[(3) - (3)].TypeVal));
 
-    if (!setTypeName(*yyvsp[0].TypeVal, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) {
+    if (!setTypeName(*(yyvsp[(3) - (3)].TypeVal), (yyvsp[(1) - (3)].StrVal)) && !(yyvsp[(1) - (3)].StrVal)) {
       CHECK_FOR_ERROR
       // If this is a named type that is not a redefinition, add it to the slot
       // table.
-      CurModule.Types.push_back(*yyvsp[0].TypeVal);
+      CurModule.Types.push_back(*(yyvsp[(3) - (3)].TypeVal));
     }
 
-    delete yyvsp[0].TypeVal;
+    delete (yyvsp[(3) - (3)].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 209:
-#line 2075 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    ResolveTypeTo(yyvsp[-2].StrVal, yyvsp[0].PrimType);
+  ;}
+    break;
 
-    if (!setTypeName(yyvsp[0].PrimType, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) {
+  case 212:
+#line 2078 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    ResolveTypeTo((yyvsp[(1) - (3)].StrVal), (yyvsp[(3) - (3)].PrimType));
+
+    if (!setTypeName((yyvsp[(3) - (3)].PrimType), (yyvsp[(1) - (3)].StrVal)) && !(yyvsp[(1) - (3)].StrVal)) {
       CHECK_FOR_ERROR
       // If this is a named type that is not a redefinition, add it to the slot
       // table.
-      CurModule.Types.push_back(yyvsp[0].PrimType);
+      CurModule.Types.push_back((yyvsp[(3) - (3)].PrimType));
     }
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 210:
-#line 2086 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ 
+  ;}
+    break;
+
+  case 213:
+#line 2089 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { 
     /* "Externally Visible" Linkage */
-    if (yyvsp[0].ConstVal == 0) 
+    if ((yyvsp[(5) - (5)].ConstVal) == 0) 
       GEN_ERROR("Global value initializer is not a constant");
-    CurGV = ParseGlobalVariable(yyvsp[-4].StrVal, GlobalValue::ExternalLinkage,
-                                yyvsp[-3].Visibility, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal, yyvsp[-2].BoolVal);
+    CurGV = ParseGlobalVariable((yyvsp[(1) - (5)].StrVal), GlobalValue::ExternalLinkage,
+                                (yyvsp[(2) - (5)].Visibility), (yyvsp[(4) - (5)].BoolVal), (yyvsp[(5) - (5)].ConstVal)->getType(), (yyvsp[(5) - (5)].ConstVal), (yyvsp[(3) - (5)].BoolVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 211:
-#line 2093 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 214:
+#line 2096 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     CurGV = 0;
-  ;
-    break;}
-case 212:
-#line 2097 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[0].ConstVal == 0) 
+  ;}
+    break;
+
+  case 215:
+#line 2100 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[(6) - (6)].ConstVal) == 0) 
       GEN_ERROR("Global value initializer is not a constant");
-    CurGV = ParseGlobalVariable(yyvsp[-5].StrVal, yyvsp[-4].Linkage, yyvsp[-3].Visibility, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal, yyvsp[-2].BoolVal);
+    CurGV = ParseGlobalVariable((yyvsp[(1) - (6)].StrVal), (yyvsp[(2) - (6)].Linkage), (yyvsp[(3) - (6)].Visibility), (yyvsp[(5) - (6)].BoolVal), (yyvsp[(6) - (6)].ConstVal)->getType(), (yyvsp[(6) - (6)].ConstVal), (yyvsp[(4) - (6)].BoolVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 213:
-#line 2102 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 216:
+#line 2105 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     CurGV = 0;
-  ;
-    break;}
-case 214:
-#line 2106 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 217:
+#line 2109 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
-    CurGV = ParseGlobalVariable(yyvsp[-5].StrVal, yyvsp[-4].Linkage, yyvsp[-3].Visibility, yyvsp[-1].BoolVal, *yyvsp[0].TypeVal, 0, yyvsp[-2].BoolVal);
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(6) - (6)].TypeVal))->getDescription());
+    CurGV = ParseGlobalVariable((yyvsp[(1) - (6)].StrVal), (yyvsp[(2) - (6)].Linkage), (yyvsp[(3) - (6)].Visibility), (yyvsp[(5) - (6)].BoolVal), *(yyvsp[(6) - (6)].TypeVal), 0, (yyvsp[(4) - (6)].BoolVal));
     CHECK_FOR_ERROR
-    delete yyvsp[0].TypeVal;
-  ;
-    break;}
-case 215:
-#line 2112 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    delete (yyvsp[(6) - (6)].TypeVal);
+  ;}
+    break;
+
+  case 218:
+#line 2115 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     CurGV = 0;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 216:
-#line 2116 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 219:
+#line 2119 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     std::string Name;
-    if (yyvsp[-4].StrVal) {
-      Name = *yyvsp[-4].StrVal;
-      delete yyvsp[-4].StrVal;
+    if ((yyvsp[(1) - (5)].StrVal)) {
+      Name = *(yyvsp[(1) - (5)].StrVal);
+      delete (yyvsp[(1) - (5)].StrVal);
     }
     if (Name.empty())
       GEN_ERROR("Alias name cannot be empty");
     
-    Constant* Aliasee = yyvsp[0].ConstVal;
+    Constant* Aliasee = (yyvsp[(5) - (5)].ConstVal);
     if (Aliasee == 0)
       GEN_ERROR(std::string("Invalid aliasee for alias: ") + Name);
 
-    GlobalAlias* GA = new GlobalAlias(Aliasee->getType(), yyvsp[-1].Linkage, Name, Aliasee,
+    GlobalAlias* GA = new GlobalAlias(Aliasee->getType(), (yyvsp[(4) - (5)].Linkage), Name, Aliasee,
                                       CurModule.CurrentModule);
-    GA->setVisibility(yyvsp[-3].Visibility);
+    GA->setVisibility((yyvsp[(2) - (5)].Visibility));
     InsertValue(GA, CurModule.Values);
     
     
@@ -3976,152 +5016,167 @@
     ID.destroy();
     
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 217:
-#line 2156 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ 
+  ;}
+    break;
+
+  case 220:
+#line 2159 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { 
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 218:
-#line 2159 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 221:
+#line 2162 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 219:
-#line 2165 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 222:
+#line 2168 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
   const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
   if (AsmSoFar.empty())
-    CurModule.CurrentModule->setModuleInlineAsm(*yyvsp[0].StrVal);
+    CurModule.CurrentModule->setModuleInlineAsm(*(yyvsp[(1) - (1)].StrVal));
   else
-    CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+*yyvsp[0].StrVal);
-  delete yyvsp[0].StrVal;
+    CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+*(yyvsp[(1) - (1)].StrVal));
+  delete (yyvsp[(1) - (1)].StrVal);
   CHECK_FOR_ERROR
-;
-    break;}
-case 220:
-#line 2175 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    CurModule.CurrentModule->setTargetTriple(*yyvsp[0].StrVal);
-    delete yyvsp[0].StrVal;
-  ;
-    break;}
-case 221:
-#line 2179 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    CurModule.CurrentModule->setDataLayout(*yyvsp[0].StrVal);
-    delete yyvsp[0].StrVal;
-  ;
-    break;}
-case 223:
-#line 2186 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-          CurModule.CurrentModule->addLibrary(*yyvsp[0].StrVal);
-          delete yyvsp[0].StrVal;
+;}
+    break;
+
+  case 223:
+#line 2178 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    CurModule.CurrentModule->setTargetTriple(*(yyvsp[(3) - (3)].StrVal));
+    delete (yyvsp[(3) - (3)].StrVal);
+  ;}
+    break;
+
+  case 224:
+#line 2182 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    CurModule.CurrentModule->setDataLayout(*(yyvsp[(3) - (3)].StrVal));
+    delete (yyvsp[(3) - (3)].StrVal);
+  ;}
+    break;
+
+  case 226:
+#line 2189 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+          CurModule.CurrentModule->addLibrary(*(yyvsp[(3) - (3)].StrVal));
+          delete (yyvsp[(3) - (3)].StrVal);
           CHECK_FOR_ERROR
-        ;
-    break;}
-case 224:
-#line 2191 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-          CurModule.CurrentModule->addLibrary(*yyvsp[0].StrVal);
-          delete yyvsp[0].StrVal;
+        ;}
+    break;
+
+  case 227:
+#line 2194 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+          CurModule.CurrentModule->addLibrary(*(yyvsp[(1) - (1)].StrVal));
+          delete (yyvsp[(1) - (1)].StrVal);
           CHECK_FOR_ERROR
-        ;
-    break;}
-case 225:
-#line 2196 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+        ;}
+    break;
+
+  case 228:
+#line 2199 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
           CHECK_FOR_ERROR
-        ;
-    break;}
-case 226:
-#line 2205 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+        ;}
+    break;
+
+  case 229:
+#line 2208 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
-    if (*yyvsp[-2].TypeVal == Type::VoidTy)
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (5)].TypeVal))->getDescription());
+    if (*(yyvsp[(3) - (5)].TypeVal) == Type::VoidTy)
       GEN_ERROR("void typed arguments are invalid");
-    ArgListEntry E; E.Attrs = yyvsp[-1].ParamAttrs; E.Ty = yyvsp[-2].TypeVal; E.Name = yyvsp[0].StrVal;
-    yyval.ArgList = yyvsp[-4].ArgList;
-    yyvsp[-4].ArgList->push_back(E);
+    ArgListEntry E; E.Attrs = (yyvsp[(4) - (5)].ParamAttrs); E.Ty = (yyvsp[(3) - (5)].TypeVal); E.Name = (yyvsp[(5) - (5)].StrVal);
+    (yyval.ArgList) = (yyvsp[(1) - (5)].ArgList);
+    (yyvsp[(1) - (5)].ArgList)->push_back(E);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 227:
-#line 2215 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 230:
+#line 2218 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
-    if (*yyvsp[-2].TypeVal == Type::VoidTy)
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
+    if (*(yyvsp[(1) - (3)].TypeVal) == Type::VoidTy)
       GEN_ERROR("void typed arguments are invalid");
-    ArgListEntry E; E.Attrs = yyvsp[-1].ParamAttrs; E.Ty = yyvsp[-2].TypeVal; E.Name = yyvsp[0].StrVal;
-    yyval.ArgList = new ArgListType;
-    yyval.ArgList->push_back(E);
+    ArgListEntry E; E.Attrs = (yyvsp[(2) - (3)].ParamAttrs); E.Ty = (yyvsp[(1) - (3)].TypeVal); E.Name = (yyvsp[(3) - (3)].StrVal);
+    (yyval.ArgList) = new ArgListType;
+    (yyval.ArgList)->push_back(E);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 228:
-#line 2226 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ArgList = yyvsp[0].ArgList;
+  ;}
+    break;
+
+  case 231:
+#line 2229 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ArgList) = (yyvsp[(1) - (1)].ArgList);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 229:
-#line 2230 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ArgList = yyvsp[-2].ArgList;
+  ;}
+    break;
+
+  case 232:
+#line 2233 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ArgList) = (yyvsp[(1) - (3)].ArgList);
     struct ArgListEntry E;
     E.Ty = new PATypeHolder(Type::VoidTy);
     E.Name = 0;
     E.Attrs = ParamAttr::None;
-    yyval.ArgList->push_back(E);
+    (yyval.ArgList)->push_back(E);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 230:
-#line 2239 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ArgList = new ArgListType;
+  ;}
+    break;
+
+  case 233:
+#line 2242 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ArgList) = new ArgListType;
     struct ArgListEntry E;
     E.Ty = new PATypeHolder(Type::VoidTy);
     E.Name = 0;
     E.Attrs = ParamAttr::None;
-    yyval.ArgList->push_back(E);
+    (yyval.ArgList)->push_back(E);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 231:
-#line 2248 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ArgList = 0;
+  ;}
+    break;
+
+  case 234:
+#line 2251 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ArgList) = 0;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 232:
-#line 2254 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  std::string FunctionName(*yyvsp[-6].StrVal);
-  delete yyvsp[-6].StrVal;  // Free strdup'd memory!
+  ;}
+    break;
+
+  case 235:
+#line 2257 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+  std::string FunctionName(*(yyvsp[(3) - (9)].StrVal));
+  delete (yyvsp[(3) - (9)].StrVal);  // Free strdup'd memory!
   
   // Check the function result for abstractness if this is a define. We should
   // have no abstract types at this point
-  if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(yyvsp[-7].TypeVal))
-    GEN_ERROR("Reference to abstract result: "+ yyvsp[-7].TypeVal->get()->getDescription());
+  if (!CurFun.isDeclare && CurModule.TypeIsUnresolved((yyvsp[(2) - (9)].TypeVal)))
+    GEN_ERROR("Reference to abstract result: "+ (yyvsp[(2) - (9)].TypeVal)->get()->getDescription());
 
   std::vector<const Type*> ParamTypeList;
   ParamAttrsVector Attrs;
-  if (yyvsp[-2].ParamAttrs != ParamAttr::None) {
-    ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = yyvsp[-2].ParamAttrs;
+  if ((yyvsp[(7) - (9)].ParamAttrs) != ParamAttr::None) {
+    ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = (yyvsp[(7) - (9)].ParamAttrs);
     Attrs.push_back(PAWI);
   }
-  if (yyvsp[-4].ArgList) {   // If there are arguments...
+  if ((yyvsp[(5) - (9)].ArgList)) {   // If there are arguments...
     unsigned index = 1;
-    for (ArgListType::iterator I = yyvsp[-4].ArgList->begin(); I != yyvsp[-4].ArgList->end(); ++I, ++index) {
+    for (ArgListType::iterator I = (yyvsp[(5) - (9)].ArgList)->begin(); I != (yyvsp[(5) - (9)].ArgList)->end(); ++I, ++index) {
       const Type* Ty = I->Ty->get();
       if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(I->Ty))
         GEN_ERROR("Reference to abstract argument: " + Ty->getDescription());
@@ -4141,9 +5196,9 @@
   if (!Attrs.empty())
     PAL = ParamAttrsList::get(Attrs);
 
-  FunctionType *FT = FunctionType::get(*yyvsp[-7].TypeVal, ParamTypeList, isVarArg, PAL);
+  FunctionType *FT = FunctionType::get(*(yyvsp[(2) - (9)].TypeVal), ParamTypeList, isVarArg, PAL);
   const PointerType *PFT = PointerType::get(FT);
-  delete yyvsp[-7].TypeVal;
+  delete (yyvsp[(2) - (9)].TypeVal);
 
   ValID ID;
   if (!FunctionName.empty()) {
@@ -4192,26 +5247,26 @@
     Fn->setLinkage(CurFun.Linkage);
     Fn->setVisibility(CurFun.Visibility);
   }
-  Fn->setCallingConv(yyvsp[-8].UIntVal);
-  Fn->setAlignment(yyvsp[0].UIntVal);
-  if (yyvsp[-1].StrVal) {
-    Fn->setSection(*yyvsp[-1].StrVal);
-    delete yyvsp[-1].StrVal;
+  Fn->setCallingConv((yyvsp[(1) - (9)].UIntVal));
+  Fn->setAlignment((yyvsp[(9) - (9)].UIntVal));
+  if ((yyvsp[(8) - (9)].StrVal)) {
+    Fn->setSection(*(yyvsp[(8) - (9)].StrVal));
+    delete (yyvsp[(8) - (9)].StrVal);
   }
 
   // Add all of the arguments we parsed to the function...
-  if (yyvsp[-4].ArgList) {                     // Is null if empty...
+  if ((yyvsp[(5) - (9)].ArgList)) {                     // Is null if empty...
     if (isVarArg) {  // Nuke the last entry
-      assert(yyvsp[-4].ArgList->back().Ty->get() == Type::VoidTy && yyvsp[-4].ArgList->back().Name == 0 &&
+      assert((yyvsp[(5) - (9)].ArgList)->back().Ty->get() == Type::VoidTy && (yyvsp[(5) - (9)].ArgList)->back().Name == 0 &&
              "Not a varargs marker!");
-      delete yyvsp[-4].ArgList->back().Ty;
-      yyvsp[-4].ArgList->pop_back();  // Delete the last entry
+      delete (yyvsp[(5) - (9)].ArgList)->back().Ty;
+      (yyvsp[(5) - (9)].ArgList)->pop_back();  // Delete the last entry
     }
     Function::arg_iterator ArgIt = Fn->arg_begin();
     Function::arg_iterator ArgEnd = Fn->arg_end();
     unsigned Idx = 1;
-    for (ArgListType::iterator I = yyvsp[-4].ArgList->begin(); 
-         I != yyvsp[-4].ArgList->end() && ArgIt != ArgEnd; ++I, ++ArgIt) {
+    for (ArgListType::iterator I = (yyvsp[(5) - (9)].ArgList)->begin(); 
+         I != (yyvsp[(5) - (9)].ArgList)->end() && ArgIt != ArgEnd; ++I, ++ArgIt) {
       delete I->Ty;                          // Delete the typeholder...
       setValueName(ArgIt, I->Name);       // Insert arg into symtab...
       CHECK_FOR_ERROR
@@ -4219,114 +5274,128 @@
       Idx++;
     }
 
-    delete yyvsp[-4].ArgList;                     // We're now done with the argument list
+    delete (yyvsp[(5) - (9)].ArgList);                     // We're now done with the argument list
   }
   CHECK_FOR_ERROR
-;
-    break;}
-case 235:
-#line 2376 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  yyval.FunctionVal = CurFun.CurrentFunction;
+;}
+    break;
+
+  case 238:
+#line 2379 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+  (yyval.FunctionVal) = CurFun.CurrentFunction;
 
   // Make sure that we keep track of the linkage type even if there was a
   // previous "declare".
-  yyval.FunctionVal->setLinkage(yyvsp[-3].Linkage);
-  yyval.FunctionVal->setVisibility(yyvsp[-2].Visibility);
-;
-    break;}
-case 238:
-#line 2387 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  yyval.FunctionVal = yyvsp[-1].FunctionVal;
+  (yyval.FunctionVal)->setLinkage((yyvsp[(1) - (4)].Linkage));
+  (yyval.FunctionVal)->setVisibility((yyvsp[(2) - (4)].Visibility));
+;}
+    break;
+
+  case 241:
+#line 2390 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+  (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal);
   CHECK_FOR_ERROR
-;
-    break;}
-case 239:
-#line 2392 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    CurFun.CurrentFunction->setLinkage(yyvsp[-2].Linkage);
-    CurFun.CurrentFunction->setVisibility(yyvsp[-1].Visibility);
-    yyval.FunctionVal = CurFun.CurrentFunction;
+;}
+    break;
+
+  case 242:
+#line 2395 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    CurFun.CurrentFunction->setLinkage((yyvsp[(1) - (3)].Linkage));
+    CurFun.CurrentFunction->setVisibility((yyvsp[(2) - (3)].Visibility));
+    (yyval.FunctionVal) = CurFun.CurrentFunction;
     CurFun.FunctionDone();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 240:
-#line 2404 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BoolVal = false;
+  ;}
+    break;
+
+  case 243:
+#line 2407 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.BoolVal) = false;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 241:
-#line 2408 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BoolVal = true;
+  ;}
+    break;
+
+  case 244:
+#line 2411 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.BoolVal) = true;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 242:
-#line 2413 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{    // A reference to a direct constant
-    yyval.ValIDVal = ValID::create(yyvsp[0].SInt64Val);
+  ;}
+    break;
+
+  case 245:
+#line 2416 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {    // A reference to a direct constant
+    (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].SInt64Val));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 243:
-#line 2417 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::create(yyvsp[0].UInt64Val);
+  ;}
+    break;
+
+  case 246:
+#line 2420 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].UInt64Val));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 244:
-#line 2421 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{                     // Perhaps it's an FP constant?
-    yyval.ValIDVal = ValID::create(yyvsp[0].FPVal);
+  ;}
+    break;
+
+  case 247:
+#line 2424 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {                     // Perhaps it's an FP constant?
+    (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].FPVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 245:
-#line 2425 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::create(ConstantInt::getTrue());
+  ;}
+    break;
+
+  case 248:
+#line 2428 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::create(ConstantInt::getTrue());
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 246:
-#line 2429 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::create(ConstantInt::getFalse());
+  ;}
+    break;
+
+  case 249:
+#line 2432 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::create(ConstantInt::getFalse());
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 247:
-#line 2433 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::createNull();
+  ;}
+    break;
+
+  case 250:
+#line 2436 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::createNull();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 248:
-#line 2437 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::createUndef();
+  ;}
+    break;
+
+  case 251:
+#line 2440 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::createUndef();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 249:
-#line 2441 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{     // A vector zero constant.
-    yyval.ValIDVal = ValID::createZeroInit();
+  ;}
+    break;
+
+  case 252:
+#line 2444 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {     // A vector zero constant.
+    (yyval.ValIDVal) = ValID::createZeroInit();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 250:
-#line 2445 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ // Nonempty unsized packed vector
-    const Type *ETy = (*yyvsp[-1].ConstVector)[0]->getType();
-    int NumElements = yyvsp[-1].ConstVector->size(); 
+  ;}
+    break;
+
+  case 253:
+#line 2448 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { // Nonempty unsized packed vector
+    const Type *ETy = (*(yyvsp[(2) - (3)].ConstVector))[0]->getType();
+    int NumElements = (yyvsp[(2) - (3)].ConstVector)->size(); 
     
     VectorType* pt = VectorType::get(ETy, NumElements);
     PATypeHolder* PTy = new PATypeHolder(
@@ -4338,213 +5407,233 @@
                                          );
     
     // Verify all elements are correct type!
-    for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
-      if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
+    for (unsigned i = 0; i < (yyvsp[(2) - (3)].ConstVector)->size(); i++) {
+      if (ETy != (*(yyvsp[(2) - (3)].ConstVector))[i]->getType())
         GEN_ERROR("Element #" + utostr(i) + " is not of type '" + 
                      ETy->getDescription() +"' as required!\nIt is of type '" +
-                     (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
+                     (*(yyvsp[(2) - (3)].ConstVector))[i]->getType()->getDescription() + "'.");
     }
 
-    yyval.ValIDVal = ValID::create(ConstantVector::get(pt, *yyvsp[-1].ConstVector));
-    delete PTy; delete yyvsp[-1].ConstVector;
+    (yyval.ValIDVal) = ValID::create(ConstantVector::get(pt, *(yyvsp[(2) - (3)].ConstVector)));
+    delete PTy; delete (yyvsp[(2) - (3)].ConstVector);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 251:
-#line 2470 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::create(yyvsp[0].ConstVal);
+  ;}
+    break;
+
+  case 254:
+#line 2473 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 252:
-#line 2474 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::createInlineAsm(*yyvsp[-2].StrVal, *yyvsp[0].StrVal, yyvsp[-3].BoolVal);
-    delete yyvsp[-2].StrVal;
-    delete yyvsp[0].StrVal;
+  ;}
+    break;
+
+  case 255:
+#line 2477 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::createInlineAsm(*(yyvsp[(3) - (5)].StrVal), *(yyvsp[(5) - (5)].StrVal), (yyvsp[(2) - (5)].BoolVal));
+    delete (yyvsp[(3) - (5)].StrVal);
+    delete (yyvsp[(5) - (5)].StrVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 253:
-#line 2484 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{  // Is it an integer reference...?
-    yyval.ValIDVal = ValID::createLocalID(yyvsp[0].UIntVal);
+  ;}
+    break;
+
+  case 256:
+#line 2487 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {  // Is it an integer reference...?
+    (yyval.ValIDVal) = ValID::createLocalID((yyvsp[(1) - (1)].UIntVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 254:
-#line 2488 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::createGlobalID(yyvsp[0].UIntVal);
+  ;}
+    break;
+
+  case 257:
+#line 2491 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::createGlobalID((yyvsp[(1) - (1)].UIntVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 255:
-#line 2492 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{                   // Is it a named reference...?
-    yyval.ValIDVal = ValID::createLocalName(*yyvsp[0].StrVal);
-    delete yyvsp[0].StrVal;
+  ;}
+    break;
+
+  case 258:
+#line 2495 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {                   // Is it a named reference...?
+    (yyval.ValIDVal) = ValID::createLocalName(*(yyvsp[(1) - (1)].StrVal));
+    delete (yyvsp[(1) - (1)].StrVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 256:
-#line 2497 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{                   // Is it a named reference...?
-    yyval.ValIDVal = ValID::createGlobalName(*yyvsp[0].StrVal);
-    delete yyvsp[0].StrVal;
+  ;}
+    break;
+
+  case 259:
+#line 2500 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {                   // Is it a named reference...?
+    (yyval.ValIDVal) = ValID::createGlobalName(*(yyvsp[(1) - (1)].StrVal));
+    delete (yyvsp[(1) - (1)].StrVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 259:
-#line 2510 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 262:
+#line 2513 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
-    yyval.ValueVal = getVal(*yyvsp[-1].TypeVal, yyvsp[0].ValIDVal); 
-    delete yyvsp[-1].TypeVal;
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
+    (yyval.ValueVal) = getVal(*(yyvsp[(1) - (2)].TypeVal), (yyvsp[(2) - (2)].ValIDVal)); 
+    delete (yyvsp[(1) - (2)].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 260:
-#line 2519 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.FunctionVal = yyvsp[-1].FunctionVal;
+  ;}
+    break;
+
+  case 263:
+#line 2522 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 261:
-#line 2523 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ // Do not allow functions with 0 basic blocks   
-    yyval.FunctionVal = yyvsp[-1].FunctionVal;
+  ;}
+    break;
+
+  case 264:
+#line 2526 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { // Do not allow functions with 0 basic blocks   
+    (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 262:
-#line 2532 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    setValueName(yyvsp[0].TermInstVal, yyvsp[-1].StrVal);
+  ;}
+    break;
+
+  case 265:
+#line 2535 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    setValueName((yyvsp[(3) - (3)].TermInstVal), (yyvsp[(2) - (3)].StrVal));
     CHECK_FOR_ERROR
-    InsertValue(yyvsp[0].TermInstVal);
-    yyvsp[-2].BasicBlockVal->getInstList().push_back(yyvsp[0].TermInstVal);
-    yyval.BasicBlockVal = yyvsp[-2].BasicBlockVal;
+    InsertValue((yyvsp[(3) - (3)].TermInstVal));
+    (yyvsp[(1) - (3)].BasicBlockVal)->getInstList().push_back((yyvsp[(3) - (3)].TermInstVal));
+    (yyval.BasicBlockVal) = (yyvsp[(1) - (3)].BasicBlockVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 263:
-#line 2541 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (CastInst *CI1 = dyn_cast<CastInst>(yyvsp[0].InstVal))
+  ;}
+    break;
+
+  case 266:
+#line 2544 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (CastInst *CI1 = dyn_cast<CastInst>((yyvsp[(2) - (2)].InstVal)))
       if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0)))
         if (CI2->getParent() == 0)
-          yyvsp[-1].BasicBlockVal->getInstList().push_back(CI2);
-    yyvsp[-1].BasicBlockVal->getInstList().push_back(yyvsp[0].InstVal);
-    yyval.BasicBlockVal = yyvsp[-1].BasicBlockVal;
+          (yyvsp[(1) - (2)].BasicBlockVal)->getInstList().push_back(CI2);
+    (yyvsp[(1) - (2)].BasicBlockVal)->getInstList().push_back((yyvsp[(2) - (2)].InstVal));
+    (yyval.BasicBlockVal) = (yyvsp[(1) - (2)].BasicBlockVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 264:
-#line 2550 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{          // Empty space between instruction lists
-    yyval.BasicBlockVal = defineBBVal(ValID::createLocalID(CurFun.NextValNum));
+  ;}
+    break;
+
+  case 267:
+#line 2553 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {          // Empty space between instruction lists
+    (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalID(CurFun.NextValNum));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 265:
-#line 2554 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{             // Labelled (named) basic block
-    yyval.BasicBlockVal = defineBBVal(ValID::createLocalName(*yyvsp[0].StrVal));
-    delete yyvsp[0].StrVal;
+  ;}
+    break;
+
+  case 268:
+#line 2557 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {             // Labelled (named) basic block
+    (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalName(*(yyvsp[(1) - (1)].StrVal)));
+    delete (yyvsp[(1) - (1)].StrVal);
     CHECK_FOR_ERROR
 
-  ;
-    break;}
-case 266:
-#line 2561 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{              // Return with a result...
-    yyval.TermInstVal = new ReturnInst(yyvsp[0].ValueVal);
-    CHECK_FOR_ERROR
-  ;
-    break;}
-case 267:
-#line 2565 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{                                    // Return with no result...
-    yyval.TermInstVal = new ReturnInst();
-    CHECK_FOR_ERROR
-  ;
-    break;}
-case 268:
-#line 2569 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{                           // Unconditional Branch...
-    BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
-    CHECK_FOR_ERROR
-    yyval.TermInstVal = new BranchInst(tmpBB);
-  ;
-    break;}
-case 269:
-#line 2574 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{  
-    assert(cast<IntegerType>(yyvsp[-7].PrimType)->getBitWidth() == 1 && "Not Bool?");
-    BasicBlock* tmpBBA = getBBVal(yyvsp[-3].ValIDVal);
-    CHECK_FOR_ERROR
-    BasicBlock* tmpBBB = getBBVal(yyvsp[0].ValIDVal);
-    CHECK_FOR_ERROR
-    Value* tmpVal = getVal(Type::Int1Ty, yyvsp[-6].ValIDVal);
-    CHECK_FOR_ERROR
-    yyval.TermInstVal = new BranchInst(tmpBBA, tmpBBB, tmpVal);
-  ;
-    break;}
-case 270:
-#line 2584 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    Value* tmpVal = getVal(yyvsp[-7].PrimType, yyvsp[-6].ValIDVal);
-    CHECK_FOR_ERROR
-    BasicBlock* tmpBB = getBBVal(yyvsp[-3].ValIDVal);
-    CHECK_FOR_ERROR
-    SwitchInst *S = new SwitchInst(tmpVal, tmpBB, yyvsp[-1].JumpTable->size());
-    yyval.TermInstVal = S;
+  ;}
+    break;
 
-    std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = yyvsp[-1].JumpTable->begin(),
-      E = yyvsp[-1].JumpTable->end();
+  case 269:
+#line 2564 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {              // Return with a result...
+    (yyval.TermInstVal) = new ReturnInst((yyvsp[(2) - (2)].ValueVal));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 270:
+#line 2568 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {                                    // Return with no result...
+    (yyval.TermInstVal) = new ReturnInst();
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 271:
+#line 2572 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {                           // Unconditional Branch...
+    BasicBlock* tmpBB = getBBVal((yyvsp[(3) - (3)].ValIDVal));
+    CHECK_FOR_ERROR
+    (yyval.TermInstVal) = new BranchInst(tmpBB);
+  ;}
+    break;
+
+  case 272:
+#line 2577 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {  
+    assert(cast<IntegerType>((yyvsp[(2) - (9)].PrimType))->getBitWidth() == 1 && "Not Bool?");
+    BasicBlock* tmpBBA = getBBVal((yyvsp[(6) - (9)].ValIDVal));
+    CHECK_FOR_ERROR
+    BasicBlock* tmpBBB = getBBVal((yyvsp[(9) - (9)].ValIDVal));
+    CHECK_FOR_ERROR
+    Value* tmpVal = getVal(Type::Int1Ty, (yyvsp[(3) - (9)].ValIDVal));
+    CHECK_FOR_ERROR
+    (yyval.TermInstVal) = new BranchInst(tmpBBA, tmpBBB, tmpVal);
+  ;}
+    break;
+
+  case 273:
+#line 2587 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    Value* tmpVal = getVal((yyvsp[(2) - (9)].PrimType), (yyvsp[(3) - (9)].ValIDVal));
+    CHECK_FOR_ERROR
+    BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (9)].ValIDVal));
+    CHECK_FOR_ERROR
+    SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[(8) - (9)].JumpTable)->size());
+    (yyval.TermInstVal) = S;
+
+    std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = (yyvsp[(8) - (9)].JumpTable)->begin(),
+      E = (yyvsp[(8) - (9)].JumpTable)->end();
     for (; I != E; ++I) {
       if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
           S->addCase(CI, I->second);
       else
         GEN_ERROR("Switch case is constant, but not a simple integer");
     }
-    delete yyvsp[-1].JumpTable;
+    delete (yyvsp[(8) - (9)].JumpTable);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 271:
-#line 2603 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    Value* tmpVal = getVal(yyvsp[-6].PrimType, yyvsp[-5].ValIDVal);
+  ;}
+    break;
+
+  case 274:
+#line 2606 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    Value* tmpVal = getVal((yyvsp[(2) - (8)].PrimType), (yyvsp[(3) - (8)].ValIDVal));
     CHECK_FOR_ERROR
-    BasicBlock* tmpBB = getBBVal(yyvsp[-2].ValIDVal);
+    BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (8)].ValIDVal));
     CHECK_FOR_ERROR
     SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
-    yyval.TermInstVal = S;
+    (yyval.TermInstVal) = S;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 272:
-#line 2613 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 275:
+#line 2616 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
 
     // Handle the short syntax
     const PointerType *PFTy = 0;
     const FunctionType *Ty = 0;
-    if (!(PFTy = dyn_cast<PointerType>(yyvsp[-11].TypeVal->get())) ||
+    if (!(PFTy = dyn_cast<PointerType>((yyvsp[(3) - (14)].TypeVal)->get())) ||
         !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
       // Pull out the types of all of the arguments...
       std::vector<const Type*> ParamTypes;
       ParamAttrsVector Attrs;
-      if (yyvsp[-6].ParamAttrs != ParamAttr::None) {
-        ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = yyvsp[-6].ParamAttrs;
+      if ((yyvsp[(8) - (14)].ParamAttrs) != ParamAttr::None) {
+        ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = (yyvsp[(8) - (14)].ParamAttrs);
         Attrs.push_back(PAWI);
       }
-      ParamList::iterator I = yyvsp[-8].ParamList->begin(), E = yyvsp[-8].ParamList->end();
+      ParamList::iterator I = (yyvsp[(6) - (14)].ParamList)->begin(), E = (yyvsp[(6) - (14)].ParamList)->end();
       unsigned index = 1;
       for (; I != E; ++I, ++index) {
         const Type *Ty = I->Val->getType();
@@ -4560,22 +5649,22 @@
       ParamAttrsList *PAL = 0;
       if (!Attrs.empty())
         PAL = ParamAttrsList::get(Attrs);
-      Ty = FunctionType::get(yyvsp[-11].TypeVal->get(), ParamTypes, false, PAL);
+      Ty = FunctionType::get((yyvsp[(3) - (14)].TypeVal)->get(), ParamTypes, false, PAL);
       PFTy = PointerType::get(Ty);
     }
 
-    delete yyvsp[-11].TypeVal;
+    delete (yyvsp[(3) - (14)].TypeVal);
 
-    Value *V = getVal(PFTy, yyvsp[-10].ValIDVal);   // Get the function we're calling...
+    Value *V = getVal(PFTy, (yyvsp[(4) - (14)].ValIDVal));   // Get the function we're calling...
     CHECK_FOR_ERROR
-    BasicBlock *Normal = getBBVal(yyvsp[-3].ValIDVal);
+    BasicBlock *Normal = getBBVal((yyvsp[(11) - (14)].ValIDVal));
     CHECK_FOR_ERROR
-    BasicBlock *Except = getBBVal(yyvsp[0].ValIDVal);
+    BasicBlock *Except = getBBVal((yyvsp[(14) - (14)].ValIDVal));
     CHECK_FOR_ERROR
 
     // Check the arguments
     ValueList Args;
-    if (yyvsp[-8].ParamList->empty()) {                                   // Has no arguments?
+    if ((yyvsp[(6) - (14)].ParamList)->empty()) {                                   // Has no arguments?
       // Make sure no arguments is a good thing!
       if (Ty->getNumParams() != 0)
         GEN_ERROR("No arguments passed to a function that "
@@ -4585,7 +5674,7 @@
       // correctly!
       FunctionType::param_iterator I = Ty->param_begin();
       FunctionType::param_iterator E = Ty->param_end();
-      ParamList::iterator ArgI = yyvsp[-8].ParamList->begin(), ArgE = yyvsp[-8].ParamList->end();
+      ParamList::iterator ArgI = (yyvsp[(6) - (14)].ParamList)->begin(), ArgE = (yyvsp[(6) - (14)].ParamList)->end();
 
       for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
         if (ArgI->Val->getType() != *I)
@@ -4604,340 +5693,363 @@
 
     // Create the InvokeInst
     InvokeInst *II = new InvokeInst(V, Normal, Except, Args.begin(), Args.end());
-    II->setCallingConv(yyvsp[-12].UIntVal);
-    yyval.TermInstVal = II;
-    delete yyvsp[-8].ParamList;
+    II->setCallingConv((yyvsp[(2) - (14)].UIntVal));
+    (yyval.TermInstVal) = II;
+    delete (yyvsp[(6) - (14)].ParamList);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 273:
-#line 2692 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TermInstVal = new UnwindInst();
+  ;}
+    break;
+
+  case 276:
+#line 2695 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TermInstVal) = new UnwindInst();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 274:
-#line 2696 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TermInstVal = new UnreachableInst();
+  ;}
+    break;
+
+  case 277:
+#line 2699 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TermInstVal) = new UnreachableInst();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 275:
-#line 2703 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.JumpTable = yyvsp[-5].JumpTable;
-    Constant *V = cast<Constant>(getExistingVal(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal));
+  ;}
+    break;
+
+  case 278:
+#line 2706 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.JumpTable) = (yyvsp[(1) - (6)].JumpTable);
+    Constant *V = cast<Constant>(getExistingVal((yyvsp[(2) - (6)].PrimType), (yyvsp[(3) - (6)].ValIDVal)));
     CHECK_FOR_ERROR
     if (V == 0)
       GEN_ERROR("May only switch on a constant pool value");
 
-    BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
+    BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (6)].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.JumpTable->push_back(std::make_pair(V, tmpBB));
-  ;
-    break;}
-case 276:
-#line 2714 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.JumpTable = new std::vector<std::pair<Constant*, BasicBlock*> >();
-    Constant *V = cast<Constant>(getExistingVal(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal));
+    (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
+  ;}
+    break;
+
+  case 279:
+#line 2717 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
+    Constant *V = cast<Constant>(getExistingVal((yyvsp[(1) - (5)].PrimType), (yyvsp[(2) - (5)].ValIDVal)));
     CHECK_FOR_ERROR
 
     if (V == 0)
       GEN_ERROR("May only switch on a constant pool value");
 
-    BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
+    BasicBlock* tmpBB = getBBVal((yyvsp[(5) - (5)].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.JumpTable->push_back(std::make_pair(V, tmpBB)); 
-  ;
-    break;}
-case 277:
-#line 2727 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB)); 
+  ;}
+    break;
+
+  case 280:
+#line 2730 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     // Is this definition named?? if so, assign the name...
-    setValueName(yyvsp[0].InstVal, yyvsp[-1].StrVal);
+    setValueName((yyvsp[(2) - (2)].InstVal), (yyvsp[(1) - (2)].StrVal));
     CHECK_FOR_ERROR
-    InsertValue(yyvsp[0].InstVal);
-    yyval.InstVal = yyvsp[0].InstVal;
+    InsertValue((yyvsp[(2) - (2)].InstVal));
+    (yyval.InstVal) = (yyvsp[(2) - (2)].InstVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 278:
-#line 2737 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{    // Used for PHI nodes
+  ;}
+    break;
+
+  case 281:
+#line 2740 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {    // Used for PHI nodes
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-5].TypeVal)->getDescription());
-    yyval.PHIList = new std::list<std::pair<Value*, BasicBlock*> >();
-    Value* tmpVal = getVal(*yyvsp[-5].TypeVal, yyvsp[-3].ValIDVal);
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (6)].TypeVal))->getDescription());
+    (yyval.PHIList) = new std::list<std::pair<Value*, BasicBlock*> >();
+    Value* tmpVal = getVal(*(yyvsp[(1) - (6)].TypeVal), (yyvsp[(3) - (6)].ValIDVal));
     CHECK_FOR_ERROR
-    BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal);
+    BasicBlock* tmpBB = getBBVal((yyvsp[(5) - (6)].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.PHIList->push_back(std::make_pair(tmpVal, tmpBB));
-    delete yyvsp[-5].TypeVal;
-  ;
-    break;}
-case 279:
-#line 2748 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.PHIList = yyvsp[-6].PHIList;
-    Value* tmpVal = getVal(yyvsp[-6].PHIList->front().first->getType(), yyvsp[-3].ValIDVal);
+    (yyval.PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
+    delete (yyvsp[(1) - (6)].TypeVal);
+  ;}
+    break;
+
+  case 282:
+#line 2751 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.PHIList) = (yyvsp[(1) - (7)].PHIList);
+    Value* tmpVal = getVal((yyvsp[(1) - (7)].PHIList)->front().first->getType(), (yyvsp[(4) - (7)].ValIDVal));
     CHECK_FOR_ERROR
-    BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal);
+    BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (7)].ValIDVal));
     CHECK_FOR_ERROR
-    yyvsp[-6].PHIList->push_back(std::make_pair(tmpVal, tmpBB));
-  ;
-    break;}
-case 280:
-#line 2758 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{    
+    (yyvsp[(1) - (7)].PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
+  ;}
+    break;
+
+  case 283:
+#line 2761 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {    
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
     // Used for call and invoke instructions
-    yyval.ParamList = new ParamList();
-    ParamListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-2].TypeVal->get(), yyvsp[-1].ValIDVal);
-    yyval.ParamList->push_back(E);
-    delete yyvsp[-2].TypeVal;
-  ;
-    break;}
-case 281:
-#line 2767 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    (yyval.ParamList) = new ParamList();
+    ParamListEntry E; E.Attrs = (yyvsp[(3) - (3)].ParamAttrs); E.Val = getVal((yyvsp[(1) - (3)].TypeVal)->get(), (yyvsp[(2) - (3)].ValIDVal));
+    (yyval.ParamList)->push_back(E);
+    delete (yyvsp[(1) - (3)].TypeVal);
+  ;}
+    break;
+
+  case 284:
+#line 2770 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     // Labels are only valid in ASMs
-    yyval.ParamList = new ParamList();
-    ParamListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getBBVal(yyvsp[-1].ValIDVal);
-    yyval.ParamList->push_back(E);
-  ;
-    break;}
-case 282:
-#line 2773 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    (yyval.ParamList) = new ParamList();
+    ParamListEntry E; E.Attrs = (yyvsp[(3) - (3)].ParamAttrs); E.Val = getBBVal((yyvsp[(2) - (3)].ValIDVal));
+    (yyval.ParamList)->push_back(E);
+  ;}
+    break;
+
+  case 285:
+#line 2776 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
-    yyval.ParamList = yyvsp[-4].ParamList;
-    ParamListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-2].TypeVal->get(), yyvsp[-1].ValIDVal);
-    yyval.ParamList->push_back(E);
-    delete yyvsp[-2].TypeVal;
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (5)].TypeVal))->getDescription());
+    (yyval.ParamList) = (yyvsp[(1) - (5)].ParamList);
+    ParamListEntry E; E.Attrs = (yyvsp[(5) - (5)].ParamAttrs); E.Val = getVal((yyvsp[(3) - (5)].TypeVal)->get(), (yyvsp[(4) - (5)].ValIDVal));
+    (yyval.ParamList)->push_back(E);
+    delete (yyvsp[(3) - (5)].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 283:
-#line 2782 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ParamList = yyvsp[-4].ParamList;
-    ParamListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getBBVal(yyvsp[-1].ValIDVal);
-    yyval.ParamList->push_back(E);
+  ;}
+    break;
+
+  case 286:
+#line 2785 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ParamList) = (yyvsp[(1) - (5)].ParamList);
+    ParamListEntry E; E.Attrs = (yyvsp[(5) - (5)].ParamAttrs); E.Val = getBBVal((yyvsp[(4) - (5)].ValIDVal));
+    (yyval.ParamList)->push_back(E);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 284:
-#line 2788 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamList = new ParamList(); ;
-    break;}
-case 285:
-#line 2791 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ValueList = new std::vector<Value*>(); ;
-    break;}
-case 286:
-#line 2792 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValueList = yyvsp[-2].ValueList;
-    yyval.ValueList->push_back(yyvsp[0].ValueVal);
+  ;}
+    break;
+
+  case 287:
+#line 2791 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamList) = new ParamList(); ;}
+    break;
+
+  case 288:
+#line 2794 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ValueList) = new std::vector<Value*>(); ;}
+    break;
+
+  case 289:
+#line 2795 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValueList) = (yyvsp[(1) - (3)].ValueList);
+    (yyval.ValueList)->push_back((yyvsp[(3) - (3)].ValueVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 287:
-#line 2799 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BoolVal = true;
+  ;}
+    break;
+
+  case 290:
+#line 2802 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.BoolVal) = true;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 288:
-#line 2803 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BoolVal = false;
+  ;}
+    break;
+
+  case 291:
+#line 2806 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.BoolVal) = false;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 289:
-#line 2808 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 292:
+#line 2811 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
-    if (!(*yyvsp[-3].TypeVal)->isInteger() && !(*yyvsp[-3].TypeVal)->isFloatingPoint() && 
-        !isa<VectorType>((*yyvsp[-3].TypeVal).get()))
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (5)].TypeVal))->getDescription());
+    if (!(*(yyvsp[(2) - (5)].TypeVal))->isInteger() && !(*(yyvsp[(2) - (5)].TypeVal))->isFloatingPoint() && 
+        !isa<VectorType>((*(yyvsp[(2) - (5)].TypeVal)).get()))
       GEN_ERROR(
         "Arithmetic operator requires integer, FP, or packed operands");
-    if (isa<VectorType>((*yyvsp[-3].TypeVal).get()) && 
-        (yyvsp[-4].BinaryOpVal == Instruction::URem || 
-         yyvsp[-4].BinaryOpVal == Instruction::SRem ||
-         yyvsp[-4].BinaryOpVal == Instruction::FRem))
-      GEN_ERROR("Remainder not supported on vector types");
-    Value* val1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal); 
+    Value* val1 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(3) - (5)].ValIDVal)); 
     CHECK_FOR_ERROR
-    Value* val2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
+    Value* val2 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(5) - (5)].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.InstVal = BinaryOperator::create(yyvsp[-4].BinaryOpVal, val1, val2);
-    if (yyval.InstVal == 0)
+    (yyval.InstVal) = BinaryOperator::create((yyvsp[(1) - (5)].BinaryOpVal), val1, val2);
+    if ((yyval.InstVal) == 0)
       GEN_ERROR("binary operator returned null");
-    delete yyvsp[-3].TypeVal;
-  ;
-    break;}
-case 290:
-#line 2829 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    delete (yyvsp[(2) - (5)].TypeVal);
+  ;}
+    break;
+
+  case 293:
+#line 2827 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
-    if (!(*yyvsp[-3].TypeVal)->isInteger()) {
-      if (Instruction::isShift(yyvsp[-4].BinaryOpVal) || !isa<VectorType>(yyvsp[-3].TypeVal->get()) ||
-          !cast<VectorType>(yyvsp[-3].TypeVal->get())->getElementType()->isInteger())
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (5)].TypeVal))->getDescription());
+    if (!(*(yyvsp[(2) - (5)].TypeVal))->isInteger()) {
+      if (Instruction::isShift((yyvsp[(1) - (5)].BinaryOpVal)) || !isa<VectorType>((yyvsp[(2) - (5)].TypeVal)->get()) ||
+          !cast<VectorType>((yyvsp[(2) - (5)].TypeVal)->get())->getElementType()->isInteger())
         GEN_ERROR("Logical operator requires integral operands");
     }
-    Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
+    Value* tmpVal1 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(3) - (5)].ValIDVal));
     CHECK_FOR_ERROR
-    Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
+    Value* tmpVal2 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(5) - (5)].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.InstVal = BinaryOperator::create(yyvsp[-4].BinaryOpVal, tmpVal1, tmpVal2);
-    if (yyval.InstVal == 0)
+    (yyval.InstVal) = BinaryOperator::create((yyvsp[(1) - (5)].BinaryOpVal), tmpVal1, tmpVal2);
+    if ((yyval.InstVal) == 0)
       GEN_ERROR("binary operator returned null");
-    delete yyvsp[-3].TypeVal;
-  ;
-    break;}
-case 291:
-#line 2846 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    delete (yyvsp[(2) - (5)].TypeVal);
+  ;}
+    break;
+
+  case 294:
+#line 2844 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
-    if (isa<VectorType>((*yyvsp[-3].TypeVal).get()))
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (6)].TypeVal))->getDescription());
+    if (isa<VectorType>((*(yyvsp[(3) - (6)].TypeVal)).get()))
       GEN_ERROR("Vector types not supported by icmp instruction");
-    Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
+    Value* tmpVal1 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(4) - (6)].ValIDVal));
     CHECK_FOR_ERROR
-    Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
+    Value* tmpVal2 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(6) - (6)].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.InstVal = CmpInst::create(yyvsp[-5].OtherOpVal, yyvsp[-4].IPredicate, tmpVal1, tmpVal2);
-    if (yyval.InstVal == 0)
+    (yyval.InstVal) = CmpInst::create((yyvsp[(1) - (6)].OtherOpVal), (yyvsp[(2) - (6)].IPredicate), tmpVal1, tmpVal2);
+    if ((yyval.InstVal) == 0)
       GEN_ERROR("icmp operator returned null");
-    delete yyvsp[-3].TypeVal;
-  ;
-    break;}
-case 292:
-#line 2860 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    delete (yyvsp[(3) - (6)].TypeVal);
+  ;}
+    break;
+
+  case 295:
+#line 2858 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
-    if (isa<VectorType>((*yyvsp[-3].TypeVal).get()))
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (6)].TypeVal))->getDescription());
+    if (isa<VectorType>((*(yyvsp[(3) - (6)].TypeVal)).get()))
       GEN_ERROR("Vector types not supported by fcmp instruction");
-    Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
+    Value* tmpVal1 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(4) - (6)].ValIDVal));
     CHECK_FOR_ERROR
-    Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
+    Value* tmpVal2 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(6) - (6)].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.InstVal = CmpInst::create(yyvsp[-5].OtherOpVal, yyvsp[-4].FPredicate, tmpVal1, tmpVal2);
-    if (yyval.InstVal == 0)
+    (yyval.InstVal) = CmpInst::create((yyvsp[(1) - (6)].OtherOpVal), (yyvsp[(2) - (6)].FPredicate), tmpVal1, tmpVal2);
+    if ((yyval.InstVal) == 0)
       GEN_ERROR("fcmp operator returned null");
-    delete yyvsp[-3].TypeVal;
-  ;
-    break;}
-case 293:
-#line 2874 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    delete (yyvsp[(3) - (6)].TypeVal);
+  ;}
+    break;
+
+  case 296:
+#line 2872 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
-    Value* Val = yyvsp[-2].ValueVal;
-    const Type* DestTy = yyvsp[0].TypeVal->get();
-    if (!CastInst::castIsValid(yyvsp[-3].CastOpVal, Val, DestTy))
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(4) - (4)].TypeVal))->getDescription());
+    Value* Val = (yyvsp[(2) - (4)].ValueVal);
+    const Type* DestTy = (yyvsp[(4) - (4)].TypeVal)->get();
+    if (!CastInst::castIsValid((yyvsp[(1) - (4)].CastOpVal), Val, DestTy))
       GEN_ERROR("invalid cast opcode for cast from '" +
                 Val->getType()->getDescription() + "' to '" +
                 DestTy->getDescription() + "'"); 
-    yyval.InstVal = CastInst::create(yyvsp[-3].CastOpVal, Val, DestTy);
-    delete yyvsp[0].TypeVal;
-  ;
-    break;}
-case 294:
-#line 2886 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[-4].ValueVal->getType() != Type::Int1Ty)
+    (yyval.InstVal) = CastInst::create((yyvsp[(1) - (4)].CastOpVal), Val, DestTy);
+    delete (yyvsp[(4) - (4)].TypeVal);
+  ;}
+    break;
+
+  case 297:
+#line 2884 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[(2) - (6)].ValueVal)->getType() != Type::Int1Ty)
       GEN_ERROR("select condition must be boolean");
-    if (yyvsp[-2].ValueVal->getType() != yyvsp[0].ValueVal->getType())
+    if ((yyvsp[(4) - (6)].ValueVal)->getType() != (yyvsp[(6) - (6)].ValueVal)->getType())
       GEN_ERROR("select value types should match");
-    yyval.InstVal = new SelectInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
+    (yyval.InstVal) = new SelectInst((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 295:
-#line 2894 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 298:
+#line 2892 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
-    yyval.InstVal = new VAArgInst(yyvsp[-2].ValueVal, *yyvsp[0].TypeVal);
-    delete yyvsp[0].TypeVal;
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(4) - (4)].TypeVal))->getDescription());
+    (yyval.InstVal) = new VAArgInst((yyvsp[(2) - (4)].ValueVal), *(yyvsp[(4) - (4)].TypeVal));
+    delete (yyvsp[(4) - (4)].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 296:
-#line 2901 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!ExtractElementInst::isValidOperands(yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
+  ;}
+    break;
+
+  case 299:
+#line 2899 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!ExtractElementInst::isValidOperands((yyvsp[(2) - (4)].ValueVal), (yyvsp[(4) - (4)].ValueVal)))
       GEN_ERROR("Invalid extractelement operands");
-    yyval.InstVal = new ExtractElementInst(yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
+    (yyval.InstVal) = new ExtractElementInst((yyvsp[(2) - (4)].ValueVal), (yyvsp[(4) - (4)].ValueVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 297:
-#line 2907 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!InsertElementInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
+  ;}
+    break;
+
+  case 300:
+#line 2905 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!InsertElementInst::isValidOperands((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal)))
       GEN_ERROR("Invalid insertelement operands");
-    yyval.InstVal = new InsertElementInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
+    (yyval.InstVal) = new InsertElementInst((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 298:
-#line 2913 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!ShuffleVectorInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
+  ;}
+    break;
+
+  case 301:
+#line 2911 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!ShuffleVectorInst::isValidOperands((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal)))
       GEN_ERROR("Invalid shufflevector operands");
-    yyval.InstVal = new ShuffleVectorInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
+    (yyval.InstVal) = new ShuffleVectorInst((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 299:
-#line 2919 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    const Type *Ty = yyvsp[0].PHIList->front().first->getType();
+  ;}
+    break;
+
+  case 302:
+#line 2917 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    const Type *Ty = (yyvsp[(2) - (2)].PHIList)->front().first->getType();
     if (!Ty->isFirstClassType())
       GEN_ERROR("PHI node operands must be of first class type");
-    yyval.InstVal = new PHINode(Ty);
-    ((PHINode*)yyval.InstVal)->reserveOperandSpace(yyvsp[0].PHIList->size());
-    while (yyvsp[0].PHIList->begin() != yyvsp[0].PHIList->end()) {
-      if (yyvsp[0].PHIList->front().first->getType() != Ty) 
+    (yyval.InstVal) = new PHINode(Ty);
+    ((PHINode*)(yyval.InstVal))->reserveOperandSpace((yyvsp[(2) - (2)].PHIList)->size());
+    while ((yyvsp[(2) - (2)].PHIList)->begin() != (yyvsp[(2) - (2)].PHIList)->end()) {
+      if ((yyvsp[(2) - (2)].PHIList)->front().first->getType() != Ty) 
         GEN_ERROR("All elements of a PHI node must be of the same type");
-      cast<PHINode>(yyval.InstVal)->addIncoming(yyvsp[0].PHIList->front().first, yyvsp[0].PHIList->front().second);
-      yyvsp[0].PHIList->pop_front();
+      cast<PHINode>((yyval.InstVal))->addIncoming((yyvsp[(2) - (2)].PHIList)->front().first, (yyvsp[(2) - (2)].PHIList)->front().second);
+      (yyvsp[(2) - (2)].PHIList)->pop_front();
     }
-    delete yyvsp[0].PHIList;  // Free the list...
+    delete (yyvsp[(2) - (2)].PHIList);  // Free the list...
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 300:
-#line 2935 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 303:
+#line 2933 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
 
     // Handle the short syntax
     const PointerType *PFTy = 0;
     const FunctionType *Ty = 0;
-    if (!(PFTy = dyn_cast<PointerType>(yyvsp[-5].TypeVal->get())) ||
+    if (!(PFTy = dyn_cast<PointerType>((yyvsp[(3) - (8)].TypeVal)->get())) ||
         !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
       // Pull out the types of all of the arguments...
       std::vector<const Type*> ParamTypes;
       ParamAttrsVector Attrs;
-      if (yyvsp[0].ParamAttrs != ParamAttr::None) {
-        ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = yyvsp[0].ParamAttrs;
+      if ((yyvsp[(8) - (8)].ParamAttrs) != ParamAttr::None) {
+        ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = (yyvsp[(8) - (8)].ParamAttrs);
         Attrs.push_back(PAWI);
       }
       unsigned index = 1;
-      ParamList::iterator I = yyvsp[-2].ParamList->begin(), E = yyvsp[-2].ParamList->end();
+      ParamList::iterator I = (yyvsp[(6) - (8)].ParamList)->begin(), E = (yyvsp[(6) - (8)].ParamList)->end();
       for (; I != E; ++I, ++index) {
         const Type *Ty = I->Val->getType();
         if (Ty == Type::VoidTy)
@@ -4953,11 +6065,11 @@
       if (!Attrs.empty())
         PAL = ParamAttrsList::get(Attrs);
 
-      Ty = FunctionType::get(yyvsp[-5].TypeVal->get(), ParamTypes, false, PAL);
+      Ty = FunctionType::get((yyvsp[(3) - (8)].TypeVal)->get(), ParamTypes, false, PAL);
       PFTy = PointerType::get(Ty);
     }
 
-    Value *V = getVal(PFTy, yyvsp[-4].ValIDVal);   // Get the function we're calling...
+    Value *V = getVal(PFTy, (yyvsp[(4) - (8)].ValIDVal));   // Get the function we're calling...
     CHECK_FOR_ERROR
 
     // Check for call to invalid intrinsic to avoid crashing later.
@@ -4971,7 +6083,7 @@
 
     // Check the arguments 
     ValueList Args;
-    if (yyvsp[-2].ParamList->empty()) {                                   // Has no arguments?
+    if ((yyvsp[(6) - (8)].ParamList)->empty()) {                                   // Has no arguments?
       // Make sure no arguments is a good thing!
       if (Ty->getNumParams() != 0)
         GEN_ERROR("No arguments passed to a function that "
@@ -4982,7 +6094,7 @@
       //
       FunctionType::param_iterator I = Ty->param_begin();
       FunctionType::param_iterator E = Ty->param_end();
-      ParamList::iterator ArgI = yyvsp[-2].ParamList->begin(), ArgE = yyvsp[-2].ParamList->end();
+      ParamList::iterator ArgI = (yyvsp[(6) - (8)].ParamList)->begin(), ArgE = (yyvsp[(6) - (8)].ParamList)->end();
 
       for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
         if (ArgI->Val->getType() != *I)
@@ -4999,365 +6111,371 @@
     }
     // Create the call node
     CallInst *CI = new CallInst(V, Args.begin(), Args.end());
-    CI->setTailCall(yyvsp[-7].BoolVal);
-    CI->setCallingConv(yyvsp[-6].UIntVal);
-    yyval.InstVal = CI;
-    delete yyvsp[-2].ParamList;
-    delete yyvsp[-5].TypeVal;
+    CI->setTailCall((yyvsp[(1) - (8)].BoolVal));
+    CI->setCallingConv((yyvsp[(2) - (8)].UIntVal));
+    (yyval.InstVal) = CI;
+    delete (yyvsp[(6) - (8)].ParamList);
+    delete (yyvsp[(3) - (8)].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 301:
-#line 3019 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.InstVal = yyvsp[0].InstVal;
+  ;}
+    break;
+
+  case 304:
+#line 3017 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.InstVal) = (yyvsp[(1) - (1)].InstVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 302:
-#line 3024 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BoolVal = true;
+  ;}
+    break;
+
+  case 305:
+#line 3022 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.BoolVal) = true;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 303:
-#line 3028 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BoolVal = false;
+  ;}
+    break;
+
+  case 306:
+#line 3026 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.BoolVal) = false;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 304:
-#line 3035 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 307:
+#line 3033 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
-    yyval.InstVal = new MallocInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal);
-    delete yyvsp[-1].TypeVal;
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (3)].TypeVal))->getDescription());
+    (yyval.InstVal) = new MallocInst(*(yyvsp[(2) - (3)].TypeVal), 0, (yyvsp[(3) - (3)].UIntVal));
+    delete (yyvsp[(2) - (3)].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 305:
-#line 3042 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 308:
+#line 3040 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
-    Value* tmpVal = getVal(yyvsp[-2].PrimType, yyvsp[-1].ValIDVal);
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (6)].TypeVal))->getDescription());
+    Value* tmpVal = getVal((yyvsp[(4) - (6)].PrimType), (yyvsp[(5) - (6)].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.InstVal = new MallocInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
-    delete yyvsp[-4].TypeVal;
-  ;
-    break;}
-case 306:
-#line 3050 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    (yyval.InstVal) = new MallocInst(*(yyvsp[(2) - (6)].TypeVal), tmpVal, (yyvsp[(6) - (6)].UIntVal));
+    delete (yyvsp[(2) - (6)].TypeVal);
+  ;}
+    break;
+
+  case 309:
+#line 3048 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
-    yyval.InstVal = new AllocaInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal);
-    delete yyvsp[-1].TypeVal;
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (3)].TypeVal))->getDescription());
+    (yyval.InstVal) = new AllocaInst(*(yyvsp[(2) - (3)].TypeVal), 0, (yyvsp[(3) - (3)].UIntVal));
+    delete (yyvsp[(2) - (3)].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 307:
-#line 3057 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 310:
+#line 3055 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
-    Value* tmpVal = getVal(yyvsp[-2].PrimType, yyvsp[-1].ValIDVal);
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (6)].TypeVal))->getDescription());
+    Value* tmpVal = getVal((yyvsp[(4) - (6)].PrimType), (yyvsp[(5) - (6)].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.InstVal = new AllocaInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
-    delete yyvsp[-4].TypeVal;
-  ;
-    break;}
-case 308:
-#line 3065 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!isa<PointerType>(yyvsp[0].ValueVal->getType()))
+    (yyval.InstVal) = new AllocaInst(*(yyvsp[(2) - (6)].TypeVal), tmpVal, (yyvsp[(6) - (6)].UIntVal));
+    delete (yyvsp[(2) - (6)].TypeVal);
+  ;}
+    break;
+
+  case 311:
+#line 3063 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!isa<PointerType>((yyvsp[(2) - (2)].ValueVal)->getType()))
       GEN_ERROR("Trying to free nonpointer type " + 
-                     yyvsp[0].ValueVal->getType()->getDescription() + "");
-    yyval.InstVal = new FreeInst(yyvsp[0].ValueVal);
+                     (yyvsp[(2) - (2)].ValueVal)->getType()->getDescription() + "");
+    (yyval.InstVal) = new FreeInst((yyvsp[(2) - (2)].ValueVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 309:
-#line 3073 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 312:
+#line 3071 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
-    if (!isa<PointerType>(yyvsp[-2].TypeVal->get()))
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (5)].TypeVal))->getDescription());
+    if (!isa<PointerType>((yyvsp[(3) - (5)].TypeVal)->get()))
       GEN_ERROR("Can't load from nonpointer type: " +
-                     (*yyvsp[-2].TypeVal)->getDescription());
-    if (!cast<PointerType>(yyvsp[-2].TypeVal->get())->getElementType()->isFirstClassType())
+                     (*(yyvsp[(3) - (5)].TypeVal))->getDescription());
+    if (!cast<PointerType>((yyvsp[(3) - (5)].TypeVal)->get())->getElementType()->isFirstClassType())
       GEN_ERROR("Can't load from pointer of non-first-class type: " +
-                     (*yyvsp[-2].TypeVal)->getDescription());
-    Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal);
+                     (*(yyvsp[(3) - (5)].TypeVal))->getDescription());
+    Value* tmpVal = getVal(*(yyvsp[(3) - (5)].TypeVal), (yyvsp[(4) - (5)].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.InstVal = new LoadInst(tmpVal, "", yyvsp[-4].BoolVal, yyvsp[0].UIntVal);
-    delete yyvsp[-2].TypeVal;
-  ;
-    break;}
-case 310:
-#line 3087 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    (yyval.InstVal) = new LoadInst(tmpVal, "", (yyvsp[(1) - (5)].BoolVal), (yyvsp[(5) - (5)].UIntVal));
+    delete (yyvsp[(3) - (5)].TypeVal);
+  ;}
+    break;
+
+  case 313:
+#line 3085 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
-    const PointerType *PT = dyn_cast<PointerType>(yyvsp[-2].TypeVal->get());
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(5) - (7)].TypeVal))->getDescription());
+    const PointerType *PT = dyn_cast<PointerType>((yyvsp[(5) - (7)].TypeVal)->get());
     if (!PT)
       GEN_ERROR("Can't store to a nonpointer type: " +
-                     (*yyvsp[-2].TypeVal)->getDescription());
+                     (*(yyvsp[(5) - (7)].TypeVal))->getDescription());
     const Type *ElTy = PT->getElementType();
-    if (ElTy != yyvsp[-4].ValueVal->getType())
-      GEN_ERROR("Can't store '" + yyvsp[-4].ValueVal->getType()->getDescription() +
+    if (ElTy != (yyvsp[(3) - (7)].ValueVal)->getType())
+      GEN_ERROR("Can't store '" + (yyvsp[(3) - (7)].ValueVal)->getType()->getDescription() +
                      "' into space of type '" + ElTy->getDescription() + "'");
 
-    Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal);
+    Value* tmpVal = getVal(*(yyvsp[(5) - (7)].TypeVal), (yyvsp[(6) - (7)].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.InstVal = new StoreInst(yyvsp[-4].ValueVal, tmpVal, yyvsp[-6].BoolVal, yyvsp[0].UIntVal);
-    delete yyvsp[-2].TypeVal;
-  ;
-    break;}
-case 311:
-#line 3104 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    (yyval.InstVal) = new StoreInst((yyvsp[(3) - (7)].ValueVal), tmpVal, (yyvsp[(1) - (7)].BoolVal), (yyvsp[(7) - (7)].UIntVal));
+    delete (yyvsp[(5) - (7)].TypeVal);
+  ;}
+    break;
+
+  case 314:
+#line 3102 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
-    if (!isa<PointerType>(yyvsp[-2].TypeVal->get()))
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (4)].TypeVal))->getDescription());
+    if (!isa<PointerType>((yyvsp[(2) - (4)].TypeVal)->get()))
       GEN_ERROR("getelementptr insn requires pointer operand");
 
-    if (!GetElementPtrInst::getIndexedType(*yyvsp[-2].TypeVal, yyvsp[0].ValueList->begin(), yyvsp[0].ValueList->end(), true))
+    if (!GetElementPtrInst::getIndexedType(*(yyvsp[(2) - (4)].TypeVal), (yyvsp[(4) - (4)].ValueList)->begin(), (yyvsp[(4) - (4)].ValueList)->end(), true))
       GEN_ERROR("Invalid getelementptr indices for type '" +
-                     (*yyvsp[-2].TypeVal)->getDescription()+ "'");
-    Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal);
+                     (*(yyvsp[(2) - (4)].TypeVal))->getDescription()+ "'");
+    Value* tmpVal = getVal(*(yyvsp[(2) - (4)].TypeVal), (yyvsp[(3) - (4)].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.InstVal = new GetElementPtrInst(tmpVal, yyvsp[0].ValueList->begin(), yyvsp[0].ValueList->end());
-    delete yyvsp[-2].TypeVal; 
-    delete yyvsp[0].ValueList;
-  ;
-    break;}
-}
-   /* the action file gets copied in in place of this dollarsign */
-#line 543 "/usr/share/bison.simple"
-
-  yyvsp -= yylen;
-  yyssp -= yylen;
-#ifdef YYLSP_NEEDED
-  yylsp -= yylen;
-#endif
+    (yyval.InstVal) = new GetElementPtrInst(tmpVal, (yyvsp[(4) - (4)].ValueList)->begin(), (yyvsp[(4) - (4)].ValueList)->end());
+    delete (yyvsp[(2) - (4)].TypeVal); 
+    delete (yyvsp[(4) - (4)].ValueList);
+  ;}
+    break;
 
-#if YYDEBUG != 0
-  if (yydebug)
-    {
-      short *ssp1 = yyss - 1;
-      fprintf (stderr, "state stack now");
-      while (ssp1 != yyssp)
-	fprintf (stderr, " %d", *++ssp1);
-      fprintf (stderr, "\n");
+
+/* Line 1267 of yacc.c.  */
+#line 6265 "llvmAsmParser.tab.c"
+      default: break;
     }
-#endif
+  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
 
   *++yyvsp = yyval;
 
-#ifdef YYLSP_NEEDED
-  yylsp++;
-  if (yylen == 0)
-    {
-      yylsp->first_line = yylloc.first_line;
-      yylsp->first_column = yylloc.first_column;
-      yylsp->last_line = (yylsp-1)->last_line;
-      yylsp->last_column = (yylsp-1)->last_column;
-      yylsp->text = 0;
-    }
-  else
-    {
-      yylsp->last_line = (yylsp+yylen-1)->last_line;
-      yylsp->last_column = (yylsp+yylen-1)->last_column;
-    }
-#endif
 
-  /* 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.  */
+  /* 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 - YYNTBASE] + *yyssp;
-  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
     yystate = yytable[yystate];
   else
-    yystate = yydefgoto[yyn - YYNTBASE];
+    yystate = yydefgoto[yyn - YYNTOKENS];
 
   goto yynewstate;
 
-yyerrlab:   /* here on detecting error */
 
-  if (! yyerrstatus)
-    /* If not already recovering from an error, report this error.  */
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
     {
       ++yynerrs;
+#if ! YYERROR_VERBOSE
+      yyerror (YY_("syntax error"));
+#else
+      {
+	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+	  {
+	    YYSIZE_T yyalloc = 2 * yysize;
+	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
+	    if (yymsg != yymsgbuf)
+	      YYSTACK_FREE (yymsg);
+	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+	    if (yymsg)
+	      yymsg_alloc = yyalloc;
+	    else
+	      {
+		yymsg = yymsgbuf;
+		yymsg_alloc = sizeof yymsgbuf;
+	      }
+	  }
 
-#ifdef YYERROR_VERBOSE
-      yyn = yypact[yystate];
-
-      if (yyn > YYFLAG && yyn < YYLAST)
-	{
-	  int size = 0;
-	  char *msg;
-	  int x, count;
-
-	  count = 0;
-	  /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
-	  for (x = (yyn < 0 ? -yyn : 0);
-	       x < (sizeof(yytname) / sizeof(char *)); x++)
-	    if (yycheck[x + yyn] == x)
-	      size += strlen(yytname[x]) + 15, count++;
-	  msg = (char *) malloc(size + 15);
-	  if (msg != 0)
-	    {
-	      strcpy(msg, "parse error");
-
-	      if (count < 5)
-		{
-		  count = 0;
-		  for (x = (yyn < 0 ? -yyn : 0);
-		       x < (sizeof(yytname) / sizeof(char *)); x++)
-		    if (yycheck[x + yyn] == x)
-		      {
-			strcat(msg, count == 0 ? ", expecting `" : " or `");
-			strcat(msg, yytname[x]);
-			strcat(msg, "'");
-			count++;
-		      }
-		}
-	      yyerror(msg);
-	      free(msg);
-	    }
-	  else
-	    yyerror ("parse error; also virtual memory exceeded");
-	}
-      else
-#endif /* YYERROR_VERBOSE */
-	yyerror("parse error");
+	if (0 < yysize && yysize <= yymsg_alloc)
+	  {
+	    (void) yysyntax_error (yymsg, yystate, yychar);
+	    yyerror (yymsg);
+	  }
+	else
+	  {
+	    yyerror (YY_("syntax error"));
+	    if (yysize != 0)
+	      goto yyexhaustedlab;
+	  }
+      }
+#endif
     }
 
-  goto yyerrlab1;
-yyerrlab1:   /* here on error raised explicitly by an action */
+
 
   if (yyerrstatus == 3)
     {
-      /* if just tried and failed to reuse lookahead token after an error, discard it.  */
+      /* If just tried and failed to reuse look-ahead token after an
+	 error, discard it.  */
 
-      /* return failure if at end of input */
-      if (yychar == YYEOF)
+      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 look-ahead 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 which 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 (yyn != YYPACT_NINF)
+	{
+	  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;
 
-#if YYDEBUG != 0
-      if (yydebug)
-	fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
-#endif
 
-      yychar = YYEMPTY;
+      yydestruct ("Error: popping",
+		  yystos[yystate], yyvsp);
+      YYPOPSTACK (1);
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
     }
 
-  /* Else will try to reuse lookahead token
-     after shifting the error token.  */
-
-  yyerrstatus = 3;		/* Each real token shifted decrements this */
-
-  goto yyerrhandle;
-
-yyerrdefault:  /* current state does not do anything special for the error token. */
-
-#if 0
-  /* This is wrong; only states that explicitly want error tokens
-     should shift them.  */
-  yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
-  if (yyn) goto yydefault;
-#endif
-
-yyerrpop:   /* pop the current state because it cannot handle the error token */
-
-  if (yyssp == yyss) YYABORT;
-  yyvsp--;
-  yystate = *--yyssp;
-#ifdef YYLSP_NEEDED
-  yylsp--;
-#endif
-
-#if YYDEBUG != 0
-  if (yydebug)
-    {
-      short *ssp1 = yyss - 1;
-      fprintf (stderr, "Error: state stack now");
-      while (ssp1 != yyssp)
-	fprintf (stderr, " %d", *++ssp1);
-      fprintf (stderr, "\n");
-    }
-#endif
-
-yyerrhandle:
-
-  yyn = yypact[yystate];
-  if (yyn == YYFLAG)
-    goto yyerrdefault;
-
-  yyn += YYTERROR;
-  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
-    goto yyerrdefault;
-
-  yyn = yytable[yyn];
-  if (yyn < 0)
-    {
-      if (yyn == YYFLAG)
-	goto yyerrpop;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-  else if (yyn == 0)
-    goto yyerrpop;
-
   if (yyn == YYFINAL)
     YYACCEPT;
 
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Shifting error token, ");
-#endif
-
   *++yyvsp = yylval;
-#ifdef YYLSP_NEEDED
-  *++yylsp = yylloc;
-#endif
+
+
+  /* Shift the error token.  */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
 
   yystate = yyn;
   goto yynewstate;
 
- yyacceptlab:
-  /* YYACCEPT comes here.  */
-  if (yyfree_stacks)
-    {
-      free (yyss);
-      free (yyvs);
-#ifdef YYLSP_NEEDED
-      free (yyls);
-#endif
-    }
-  return 0;
 
- yyabortlab:
-  /* YYABORT comes here.  */
-  if (yyfree_stacks)
-    {
-      free (yyss);
-      free (yyvs);
-#ifdef YYLSP_NEEDED
-      free (yyls);
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#ifndef yyoverflow
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (YY_("memory exhausted"));
+  yyresult = 2;
+  /* Fall through.  */
 #endif
+
+yyreturn:
+  if (yychar != YYEOF && yychar != YYEMPTY)
+     yydestruct ("Cleanup: discarding lookahead",
+		 yytoken, &yylval);
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYABORT or YYACCEPT.  */
+  YYPOPSTACK (yylen);
+  YY_STACK_PRINT (yyss, yyssp);
+  while (yyssp != yyss)
+    {
+      yydestruct ("Cleanup: popping",
+		  yystos[*yyssp], yyvsp);
+      YYPOPSTACK (1);
     }
-  return 1;
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+  if (yymsg != yymsgbuf)
+    YYSTACK_FREE (yymsg);
+#endif
+  /* Make sure YYID is used.  */
+  return YYID (yyresult);
 }
-#line 3121 "/Volumes/MacOS9/gcc/llvm-gcc-main/llvm/lib/AsmParser/llvmAsmParser.y"
+
+
+#line 3119 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
 
 
 // common code from the two 'RunVMAsmParser' functions
@@ -5438,3 +6556,4 @@
   GenerateError(errMsg);
   return 0;
 }
+
