diff --git a/lib/AsmParser/llvmAsmParser.cpp.cvs b/lib/AsmParser/llvmAsmParser.cpp.cvs
index 1d3a05d..1719f06 100644
--- a/lib/AsmParser/llvmAsmParser.cpp.cvs
+++ b/lib/AsmParser/llvmAsmParser.cpp.cvs
@@ -1,148 +1,338 @@
+/* A Bison parser, made by GNU Bison 2.1.  */
 
-/*  A Bison parser, made from /Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y
-    by GNU Bison version 1.28  */
+/* Skeleton parser for Yacc-like parsing with Bison,
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 
-#define YYBISON 1  /* Identify Bison output.  */
+   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, 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.  */
+
+/* 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.1"
+
+/* 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	SINTVAL	259
-#define	UINTVAL	260
-#define	FPVAL	261
-#define	VOID	262
-#define	INTTYPE	263
-#define	FLOAT	264
-#define	DOUBLE	265
-#define	LABEL	266
-#define	TYPE	267
-#define	VAR_ID	268
-#define	LABELSTR	269
-#define	STRINGCONSTANT	270
-#define	IMPLEMENTATION	271
-#define	ZEROINITIALIZER	272
-#define	TRUETOK	273
-#define	FALSETOK	274
-#define	BEGINTOK	275
-#define	ENDTOK	276
-#define	DECLARE	277
-#define	DEFINE	278
-#define	GLOBAL	279
-#define	CONSTANT	280
-#define	SECTION	281
-#define	VOLATILE	282
-#define	TO	283
-#define	DOTDOTDOT	284
-#define	NULL_TOK	285
-#define	UNDEF	286
-#define	INTERNAL	287
-#define	LINKONCE	288
-#define	WEAK	289
-#define	APPENDING	290
-#define	DLLIMPORT	291
-#define	DLLEXPORT	292
-#define	EXTERN_WEAK	293
-#define	OPAQUE	294
-#define	EXTERNAL	295
-#define	TARGET	296
-#define	TRIPLE	297
-#define	ENDIAN	298
-#define	POINTERSIZE	299
-#define	LITTLE	300
-#define	BIG	301
-#define	ALIGN	302
-#define	DEPLIBS	303
-#define	CALL	304
-#define	TAIL	305
-#define	ASM_TOK	306
-#define	MODULE	307
-#define	SIDEEFFECT	308
-#define	CC_TOK	309
-#define	CCC_TOK	310
-#define	CSRETCC_TOK	311
-#define	FASTCC_TOK	312
-#define	COLDCC_TOK	313
-#define	X86_STDCALLCC_TOK	314
-#define	X86_FASTCALLCC_TOK	315
-#define	DATALAYOUT	316
-#define	RET	317
-#define	BR	318
-#define	SWITCH	319
-#define	INVOKE	320
-#define	UNWIND	321
-#define	UNREACHABLE	322
-#define	ADD	323
-#define	SUB	324
-#define	MUL	325
-#define	UDIV	326
-#define	SDIV	327
-#define	FDIV	328
-#define	UREM	329
-#define	SREM	330
-#define	FREM	331
-#define	AND	332
-#define	OR	333
-#define	XOR	334
-#define	ICMP	335
-#define	FCMP	336
-#define	EQ	337
-#define	NE	338
-#define	SLT	339
-#define	SGT	340
-#define	SLE	341
-#define	SGE	342
-#define	ULT	343
-#define	UGT	344
-#define	ULE	345
-#define	UGE	346
-#define	OEQ	347
-#define	ONE	348
-#define	OLT	349
-#define	OGT	350
-#define	OLE	351
-#define	OGE	352
-#define	ORD	353
-#define	UNO	354
-#define	UEQ	355
-#define	UNE	356
-#define	MALLOC	357
-#define	ALLOCA	358
-#define	FREE	359
-#define	LOAD	360
-#define	STORE	361
-#define	GETELEMENTPTR	362
-#define	TRUNC	363
-#define	ZEXT	364
-#define	SEXT	365
-#define	FPTRUNC	366
-#define	FPEXT	367
-#define	BITCAST	368
-#define	UITOFP	369
-#define	SITOFP	370
-#define	FPTOUI	371
-#define	FPTOSI	372
-#define	INTTOPTR	373
-#define	PTRTOINT	374
-#define	PHI_TOK	375
-#define	SELECT	376
-#define	SHL	377
-#define	LSHR	378
-#define	ASHR	379
-#define	VAARG	380
-#define	EXTRACTELEMENT	381
-#define	INSERTELEMENT	382
-#define	SHUFFLEVECTOR	383
-#define	NORETURN	384
-#define	DEFAULT	385
-#define	HIDDEN	386
 
-#line 14 "/Users/sabre/cvs/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,
+     SINTVAL = 260,
+     UINTVAL = 261,
+     FPVAL = 262,
+     VOID = 263,
+     INTTYPE = 264,
+     FLOAT = 265,
+     DOUBLE = 266,
+     LABEL = 267,
+     TYPE = 268,
+     VAR_ID = 269,
+     LABELSTR = 270,
+     STRINGCONSTANT = 271,
+     IMPLEMENTATION = 272,
+     ZEROINITIALIZER = 273,
+     TRUETOK = 274,
+     FALSETOK = 275,
+     BEGINTOK = 276,
+     ENDTOK = 277,
+     DECLARE = 278,
+     DEFINE = 279,
+     GLOBAL = 280,
+     CONSTANT = 281,
+     SECTION = 282,
+     VOLATILE = 283,
+     TO = 284,
+     DOTDOTDOT = 285,
+     NULL_TOK = 286,
+     UNDEF = 287,
+     INTERNAL = 288,
+     LINKONCE = 289,
+     WEAK = 290,
+     APPENDING = 291,
+     DLLIMPORT = 292,
+     DLLEXPORT = 293,
+     EXTERN_WEAK = 294,
+     OPAQUE = 295,
+     EXTERNAL = 296,
+     TARGET = 297,
+     TRIPLE = 298,
+     ENDIAN = 299,
+     POINTERSIZE = 300,
+     LITTLE = 301,
+     BIG = 302,
+     ALIGN = 303,
+     DEPLIBS = 304,
+     CALL = 305,
+     TAIL = 306,
+     ASM_TOK = 307,
+     MODULE = 308,
+     SIDEEFFECT = 309,
+     CC_TOK = 310,
+     CCC_TOK = 311,
+     CSRETCC_TOK = 312,
+     FASTCC_TOK = 313,
+     COLDCC_TOK = 314,
+     X86_STDCALLCC_TOK = 315,
+     X86_FASTCALLCC_TOK = 316,
+     DATALAYOUT = 317,
+     RET = 318,
+     BR = 319,
+     SWITCH = 320,
+     INVOKE = 321,
+     UNWIND = 322,
+     UNREACHABLE = 323,
+     ADD = 324,
+     SUB = 325,
+     MUL = 326,
+     UDIV = 327,
+     SDIV = 328,
+     FDIV = 329,
+     UREM = 330,
+     SREM = 331,
+     FREM = 332,
+     AND = 333,
+     OR = 334,
+     XOR = 335,
+     ICMP = 336,
+     FCMP = 337,
+     EQ = 338,
+     NE = 339,
+     SLT = 340,
+     SGT = 341,
+     SLE = 342,
+     SGE = 343,
+     ULT = 344,
+     UGT = 345,
+     ULE = 346,
+     UGE = 347,
+     OEQ = 348,
+     ONE = 349,
+     OLT = 350,
+     OGT = 351,
+     OLE = 352,
+     OGE = 353,
+     ORD = 354,
+     UNO = 355,
+     UEQ = 356,
+     UNE = 357,
+     MALLOC = 358,
+     ALLOCA = 359,
+     FREE = 360,
+     LOAD = 361,
+     STORE = 362,
+     GETELEMENTPTR = 363,
+     TRUNC = 364,
+     ZEXT = 365,
+     SEXT = 366,
+     FPTRUNC = 367,
+     FPEXT = 368,
+     BITCAST = 369,
+     UITOFP = 370,
+     SITOFP = 371,
+     FPTOUI = 372,
+     FPTOSI = 373,
+     INTTOPTR = 374,
+     PTRTOINT = 375,
+     PHI_TOK = 376,
+     SELECT = 377,
+     SHL = 378,
+     LSHR = 379,
+     ASHR = 380,
+     VAARG = 381,
+     EXTRACTELEMENT = 382,
+     INSERTELEMENT = 383,
+     SHUFFLEVECTOR = 384,
+     NORETURN = 385,
+     DEFAULT = 386,
+     HIDDEN = 387
+   };
+#endif
+/* Tokens.  */
+#define ESINT64VAL 258
+#define EUINT64VAL 259
+#define SINTVAL 260
+#define UINTVAL 261
+#define FPVAL 262
+#define VOID 263
+#define INTTYPE 264
+#define FLOAT 265
+#define DOUBLE 266
+#define LABEL 267
+#define TYPE 268
+#define VAR_ID 269
+#define LABELSTR 270
+#define STRINGCONSTANT 271
+#define IMPLEMENTATION 272
+#define ZEROINITIALIZER 273
+#define TRUETOK 274
+#define FALSETOK 275
+#define BEGINTOK 276
+#define ENDTOK 277
+#define DECLARE 278
+#define DEFINE 279
+#define GLOBAL 280
+#define CONSTANT 281
+#define SECTION 282
+#define VOLATILE 283
+#define TO 284
+#define DOTDOTDOT 285
+#define NULL_TOK 286
+#define UNDEF 287
+#define INTERNAL 288
+#define LINKONCE 289
+#define WEAK 290
+#define APPENDING 291
+#define DLLIMPORT 292
+#define DLLEXPORT 293
+#define EXTERN_WEAK 294
+#define OPAQUE 295
+#define EXTERNAL 296
+#define TARGET 297
+#define TRIPLE 298
+#define ENDIAN 299
+#define POINTERSIZE 300
+#define LITTLE 301
+#define BIG 302
+#define ALIGN 303
+#define DEPLIBS 304
+#define CALL 305
+#define TAIL 306
+#define ASM_TOK 307
+#define MODULE 308
+#define SIDEEFFECT 309
+#define CC_TOK 310
+#define CCC_TOK 311
+#define CSRETCC_TOK 312
+#define FASTCC_TOK 313
+#define COLDCC_TOK 314
+#define X86_STDCALLCC_TOK 315
+#define X86_FASTCALLCC_TOK 316
+#define DATALAYOUT 317
+#define RET 318
+#define BR 319
+#define SWITCH 320
+#define INVOKE 321
+#define UNWIND 322
+#define UNREACHABLE 323
+#define ADD 324
+#define SUB 325
+#define MUL 326
+#define UDIV 327
+#define SDIV 328
+#define FDIV 329
+#define UREM 330
+#define SREM 331
+#define FREM 332
+#define AND 333
+#define OR 334
+#define XOR 335
+#define ICMP 336
+#define FCMP 337
+#define EQ 338
+#define NE 339
+#define SLT 340
+#define SGT 341
+#define SLE 342
+#define SGE 343
+#define ULT 344
+#define UGT 345
+#define ULE 346
+#define UGE 347
+#define OEQ 348
+#define ONE 349
+#define OLT 350
+#define OGT 351
+#define OLE 352
+#define OGE 353
+#define ORD 354
+#define UNO 355
+#define UEQ 356
+#define UNE 357
+#define MALLOC 358
+#define ALLOCA 359
+#define FREE 360
+#define LOAD 361
+#define STORE 362
+#define GETELEMENTPTR 363
+#define TRUNC 364
+#define ZEXT 365
+#define SEXT 366
+#define FPTRUNC 367
+#define FPEXT 368
+#define BITCAST 369
+#define UITOFP 370
+#define SITOFP 371
+#define FPTOUI 372
+#define FPTOSI 373
+#define INTTOPTR 374
+#define PTRTOINT 375
+#define PHI_TOK 376
+#define SELECT 377
+#define SHL 378
+#define LSHR 379
+#define ASHR 380
+#define VAARG 381
+#define EXTRACTELEMENT 382
+#define INSERTELEMENT 383
+#define SHUFFLEVECTOR 384
+#define NORETURN 385
+#define DEFAULT 386
+#define HIDDEN 387
+
+
+
+
+/* Copy the first part of user declarations.  */
+#line 14 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
 
 #include "ParserInternals.h"
 #include "llvm/CallingConv.h"
@@ -1011,8 +1201,28 @@
 }
 
 
-#line 883 "/Users/sabre/cvs/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)
+#line 883 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+typedef union YYSTYPE {
   llvm::Module                           *ModuleVal;
   llvm::Function                         *FunctionVal;
   llvm::BasicBlock                       *BasicBlockVal;
@@ -1058,1055 +1268,1506 @@
   llvm::ICmpInst::Predicate         IPredicate;
   llvm::FCmpInst::Predicate         FPredicate;
 } YYSTYPE;
-#include <stdio.h>
-
-#ifndef __cplusplus
-#ifndef __STDC__
-#define const
-#endif
+/* Line 196 of yacc.c.  */
+#line 1273 "llvmAsmParser.tab.c"
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
 #endif
 
 
 
-#define	YYFINAL		569
-#define	YYFLAG		-32768
-#define	YYNTBASE	147
+/* Copy the second part of user declarations.  */
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 386 ? yytranslate[x] : 225)
 
-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,   137,
-   138,   135,     2,   134,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,   142,
-   133,   143,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-   139,   136,   141,     2,     2,     2,     2,     2,   146,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,   140,
-     2,     2,   144,     2,   145,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     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
-};
+/* Line 219 of yacc.c.  */
+#line 1285 "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,   119,
-   120,   122,   124,   126,   128,   130,   132,   134,   136,   137,
-   139,   140,   142,   144,   145,   147,   149,   151,   153,   154,
-   156,   158,   160,   162,   164,   166,   169,   171,   173,   174,
-   177,   179,   181,   182,   185,   186,   189,   190,   194,   197,
-   198,   200,   201,   205,   207,   210,   212,   214,   216,   218,
-   220,   222,   225,   227,   230,   236,   242,   248,   254,   258,
-   261,   267,   272,   275,   277,   279,   281,   285,   287,   291,
-   293,   294,   296,   300,   305,   309,   313,   318,   323,   327,
-   334,   340,   343,   346,   349,   352,   355,   358,   361,   364,
-   367,   370,   377,   383,   392,   399,   406,   414,   422,   429,
-   436,   445,   454,   458,   460,   462,   464,   466,   467,   469,
-   472,   473,   477,   478,   482,   486,   488,   492,   496,   497,
-   504,   505,   513,   514,   522,   525,   529,   531,   533,   535,
-   539,   543,   547,   551,   555,   559,   561,   562,   564,   566,
-   568,   569,   575,   579,   581,   585,   587,   588,   598,   600,
-   602,   607,   609,   611,   614,   618,   619,   621,   623,   625,
-   627,   629,   631,   633,   635,   637,   641,   643,   649,   651,
-   653,   655,   657,   660,   663,   666,   670,   673,   674,   676,
-   679,   682,   686,   696,   706,   715,   730,   732,   734,   741,
-   747,   750,   757,   765,   769,   775,   776,   777,   781,   784,
-   786,   792,   798,   805,   812,   817,   822,   829,   834,   839,
-   846,   853,   856,   865,   867,   869,   870,   874,   881,   885,
-   892,   895,   900,   907
-};
+#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
+# define YYSIZE_T __SIZE_TYPE__
+#endif
+#if ! defined (YYSIZE_T) && defined (size_t)
+# define YYSIZE_T size_t
+#endif
+#if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus))
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+#endif
+#if ! defined (YYSIZE_T)
+# define YYSIZE_T unsigned int
+#endif
 
-static const short yyrhs[] = {     5,
-     0,     6,     0,    69,     0,    70,     0,    71,     0,    72,
-     0,    73,     0,    74,     0,    75,     0,    76,     0,    77,
-     0,    78,     0,    79,     0,    80,     0,   109,     0,   110,
-     0,   111,     0,   112,     0,   113,     0,   114,     0,   115,
-     0,   116,     0,   117,     0,   118,     0,   119,     0,   120,
-     0,   123,     0,   124,     0,   125,     0,    83,     0,    84,
-     0,    85,     0,    86,     0,    87,     0,    88,     0,    89,
-     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,    89,     0,    90,
-     0,    91,     0,    92,     0,    19,     0,    20,     0,     9,
-     0,    10,     0,    11,     0,   197,   133,     0,     0,    33,
-     0,    35,     0,    34,     0,    36,     0,    38,     0,    37,
-     0,    39,     0,    41,     0,     0,   132,     0,     0,    37,
-     0,    39,     0,     0,    33,     0,    34,     0,    35,     0,
-    38,     0,     0,    56,     0,    57,     0,    58,     0,    59,
-     0,    60,     0,    61,     0,    55,     4,     0,   110,     0,
-   111,     0,     0,   164,   163,     0,   130,     0,   163,     0,
-     0,   166,   165,     0,     0,    48,     4,     0,     0,   134,
-    48,     4,     0,    27,    16,     0,     0,   169,     0,     0,
-   134,   172,   171,     0,   169,     0,    48,     4,     0,     9,
-     0,    10,     0,    11,     0,    12,     0,    40,     0,   173,
-     0,   174,   135,     0,   209,     0,   136,     4,     0,   174,
-   137,   178,   138,   166,     0,     8,   137,   178,   138,   166,
-     0,   139,     4,   140,   174,   141,     0,   142,     4,   140,
-   174,   143,     0,   144,   179,   145,     0,   144,   145,     0,
-   142,   144,   179,   145,   143,     0,   142,   144,   145,   143,
-     0,   174,   164,     0,   174,     0,     8,     0,   175,     0,
-   177,   134,   175,     0,   177,     0,   177,   134,    30,     0,
-    30,     0,     0,   174,     0,   179,   134,   174,     0,   174,
-   139,   182,   141,     0,   174,   139,   141,     0,   174,   146,
-    16,     0,   174,   142,   182,   143,     0,   174,   144,   182,
-   145,     0,   174,   144,   145,     0,   174,   142,   144,   182,
-   145,   143,     0,   174,   142,   144,   145,   143,     0,   174,
-    31,     0,   174,    32,     0,   174,   209,     0,   174,   181,
-     0,   174,    18,     0,   154,     3,     0,   154,     4,     0,
-     9,    19,     0,     9,    20,     0,   155,     7,     0,   150,
-   137,   180,    29,   174,   138,     0,   108,   137,   180,   220,
-   138,     0,   122,   137,   180,   134,   180,   134,   180,   138,
-     0,   148,   137,   180,   134,   180,   138,     0,   149,   137,
-   180,   134,   180,   138,     0,    81,   152,   137,   180,   134,
-   180,   138,     0,    82,   153,   137,   180,   134,   180,   138,
-     0,   151,   137,   180,   134,   180,   138,     0,   127,   137,
-   180,   134,   180,   138,     0,   128,   137,   180,   134,   180,
-   134,   180,   138,     0,   129,   137,   180,   134,   180,   134,
-   180,   138,     0,   182,   134,   180,     0,   180,     0,    25,
-     0,    26,     0,   185,     0,     0,   186,     0,   185,   186,
-     0,     0,    24,   187,   205,     0,     0,    23,   188,   206,
-     0,    53,    52,   192,     0,    17,     0,   156,    13,   174,
-     0,   156,    13,     8,     0,     0,   156,   159,   183,   180,
-   189,   171,     0,     0,   156,   157,   159,   183,   180,   190,
-   171,     0,     0,   156,   158,   159,   183,   174,   191,   171,
-     0,    42,   194,     0,    49,   133,   195,     0,    16,     0,
-    47,     0,    46,     0,    44,   133,   193,     0,    45,   133,
-     4,     0,    43,   133,    16,     0,    62,   133,    16,     0,
-   139,   196,   141,     0,   196,   134,    16,     0,    16,     0,
-     0,    14,     0,    16,     0,   197,     0,     0,   199,   134,
-   174,   164,   198,     0,   174,   164,   198,     0,   199,     0,
-   199,   134,    30,     0,    30,     0,     0,   162,   176,   197,
-   137,   200,   138,   166,   170,   167,     0,    21,     0,   144,
-     0,   161,   159,   201,   202,     0,    22,     0,   145,     0,
-   212,   204,     0,   160,   159,   201,     0,     0,    54,     0,
-     3,     0,     4,     0,     7,     0,    19,     0,    20,     0,
-    31,     0,    32,     0,    18,     0,   142,   182,   143,     0,
-   181,     0,    52,   207,    16,   134,    16,     0,   147,     0,
-   197,     0,   209,     0,   208,     0,   174,   210,     0,   212,
-   213,     0,   203,   213,     0,   214,   156,   215,     0,   214,
-   217,     0,     0,    15,     0,    63,   211,     0,    63,     8,
-     0,    64,    12,   210,     0,    64,     9,   210,   134,    12,
-   210,   134,    12,   210,     0,    65,   154,   210,   134,    12,
-   210,   139,   216,   141,     0,    65,   154,   210,   134,    12,
-   210,   139,   141,     0,    66,   162,   176,   210,   137,   219,
-   138,   166,    29,    12,   210,    67,    12,   210,     0,    67,
-     0,    68,     0,   216,   154,   208,   134,    12,   210,     0,
-   154,   208,   134,    12,   210,     0,   156,   222,     0,   174,
-   139,   210,   134,   210,   141,     0,   218,   134,   139,   210,
-   134,   210,   141,     0,   174,   210,   164,     0,   219,   134,
-   174,   210,   164,     0,     0,     0,   220,   134,   211,     0,
-    51,    50,     0,    50,     0,   148,   174,   210,   134,   210,
-     0,   149,   174,   210,   134,   210,     0,    81,   152,   174,
-   210,   134,   210,     0,    82,   153,   174,   210,   134,   210,
-     0,   151,   211,   134,   211,     0,   150,   211,    29,   174,
-     0,   122,   211,   134,   211,   134,   211,     0,   126,   211,
-   134,   174,     0,   127,   211,   134,   211,     0,   128,   211,
-   134,   211,   134,   211,     0,   129,   211,   134,   211,   134,
-   211,     0,   121,   218,     0,   221,   162,   176,   210,   137,
-   219,   138,   166,     0,   224,     0,    28,     0,     0,   103,
-   174,   168,     0,   103,   174,   134,     9,   210,   168,     0,
-   104,   174,   168,     0,   104,   174,   134,     9,   210,   168,
-     0,   105,   211,     0,   223,   106,   174,   210,     0,   223,
-   107,   211,   134,   174,   210,     0,   108,   174,   210,   220,
-     0
-};
+#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
+
+#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
+#   else
+#    define YYSTACK_ALLOC alloca
+#    if defined (__STDC__) || defined (__cplusplus)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     define YYINCLUDED_STDLIB_H
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning. */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */
+#  endif
+# else
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1)
+#  endif
+#  ifdef __cplusplus
+extern "C" {
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \
+	&& (defined (__STDC__) || defined (__cplusplus)))
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \
+	&& (defined (__STDC__) || defined (__cplusplus)))
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifdef __cplusplus
+}
+#  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
+{
+  short int 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 (short int) + 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 (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 (0)
 
 #endif
 
-#if YYDEBUG != 0
-static const short yyrline[] = { 0,
-  1031,  1032,  1042,  1042,  1042,  1042,  1042,  1042,  1042,  1042,
-  1042,  1043,  1043,  1043,  1044,  1044,  1044,  1044,  1044,  1044,
-  1044,  1045,  1045,  1045,  1045,  1045,  1046,  1046,  1046,  1048,
-  1048,  1049,  1049,  1050,  1050,  1051,  1051,  1052,  1052,  1056,
-  1056,  1057,  1057,  1058,  1058,  1059,  1059,  1060,  1060,  1061,
-  1061,  1062,  1062,  1063,  1064,  1069,  1070,  1070,  1073,  1077,
-  1083,  1084,  1085,  1086,  1087,  1091,  1092,  1093,  1097,  1098,
-  1102,  1103,  1104,  1108,  1109,  1110,  1111,  1112,  1115,  1115,
-  1116,  1117,  1118,  1119,  1120,  1121,  1129,  1130,  1133,  1134,
-  1139,  1140,  1143,  1144,  1151,  1151,  1158,  1158,  1167,  1175,
-  1175,  1181,  1181,  1183,  1188,  1201,  1201,  1201,  1201,  1204,
-  1208,  1212,  1219,  1224,  1232,  1250,  1268,  1273,  1285,  1295,
-  1299,  1309,  1316,  1323,  1330,  1335,  1340,  1347,  1348,  1355,
-  1362,  1370,  1375,  1386,  1414,  1430,  1459,  1487,  1512,  1531,
-  1556,  1575,  1587,  1594,  1657,  1667,  1677,  1683,  1689,  1694,
-  1699,  1707,  1721,  1742,  1750,  1756,  1767,  1772,  1777,  1786,
-  1792,  1798,  1807,  1811,  1819,  1819,  1830,  1835,  1843,  1844,
-  1848,  1848,  1852,  1852,  1855,  1858,  1870,  1894,  1905,  1911,
-  1914,  1919,  1922,  1928,  1932,  1935,  1941,  1954,  1955,  1957,
-  1961,  1970,  1974,  1979,  1981,  1986,  1991,  2000,  2000,  2001,
-  2001,  2003,  2013,  2024,  2028,  2037,  2046,  2051,  2157,  2157,
-  2159,  2168,  2168,  2170,  2175,  2187,  2191,  2196,  2200,  2204,
-  2208,  2212,  2216,  2220,  2224,  2228,  2253,  2257,  2271,  2275,
-  2281,  2281,  2287,  2296,  2300,  2309,  2320,  2329,  2341,  2354,
-  2358,  2362,  2367,  2377,  2396,  2405,  2472,  2476,  2483,  2494,
-  2507,  2516,  2527,  2537,  2545,  2553,  2556,  2557,  2564,  2568,
-  2573,  2594,  2611,  2624,  2637,  2646,  2659,  2667,  2674,  2680,
-  2686,  2692,  2707,  2770,  2775,  2779,  2786,  2793,  2801,  2808,
-  2816,  2824,  2838,  2855
-};
-#endif
-
-
-#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
-
-static const char * const yytname[] = {   "$","error","$undefined.","ESINT64VAL",
-"EUINT64VAL","SINTVAL","UINTVAL","FPVAL","VOID","INTTYPE","FLOAT","DOUBLE","LABEL",
-"TYPE","VAR_ID","LABELSTR","STRINGCONSTANT","IMPLEMENTATION","ZEROINITIALIZER",
-"TRUETOK","FALSETOK","BEGINTOK","ENDTOK","DECLARE","DEFINE","GLOBAL","CONSTANT",
-"SECTION","VOLATILE","TO","DOTDOTDOT","NULL_TOK","UNDEF","INTERNAL","LINKONCE",
-"WEAK","APPENDING","DLLIMPORT","DLLEXPORT","EXTERN_WEAK","OPAQUE","EXTERNAL",
-"TARGET","TRIPLE","ENDIAN","POINTERSIZE","LITTLE","BIG","ALIGN","DEPLIBS","CALL",
-"TAIL","ASM_TOK","MODULE","SIDEEFFECT","CC_TOK","CCC_TOK","CSRETCC_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","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","SHL","LSHR","ASHR","VAARG","EXTRACTELEMENT",
-"INSERTELEMENT","SHUFFLEVECTOR","NORETURN","DEFAULT","HIDDEN","'='","','","'*'",
-"'\\\\'","'('","')'","'['","'x'","']'","'<'","'>'","'{'","'}'","'c'","INTVAL",
-"ArithmeticOps","LogicalOps","CastOps","ShiftOps","IPredicates","FPredicates",
-"IntType","FPType","OptAssign","GVInternalLinkage","GVExternalLinkage","GVVisibilityStyle",
-"FunctionDeclareLinkage","FunctionDefineLinkage","OptCallingConv","ParamAttr",
-"OptParamAttrs","FuncAttr","OptFuncAttrs","OptAlign","OptCAlign","SectionString",
-"OptSection","GlobalVarAttributes","GlobalVarAttribute","PrimType","Types","ArgType",
-"ResultTypes","ArgTypeList","ArgTypeListI","TypeListI","ConstVal","ConstExpr",
-"ConstVector","GlobalType","Module","DefinitionList","Definition","@1","@2",
-"@3","@4","@5","AsmBlock","BigOrLittle","TargetDefinition","LibrariesDefinition",
-"LibList","Name","OptName","ArgListH","ArgList","FunctionHeaderH","BEGIN","FunctionHeader",
-"END","Function","FunctionProto","OptSideEffect","ConstValueRef","SymbolicValueRef",
-"ValueRef","ResolvedVal","BasicBlockList","BasicBlock","InstructionList","BBTerminatorInst",
-"JumpTable","Inst","PHIList","ValueRefList","IndexList","OptTailCall","InstVal",
-"OptVolatile","MemoryInst", NULL
-};
-#endif
-
-static const short yyr1[] = {     0,
-   147,   147,   148,   148,   148,   148,   148,   148,   148,   148,
-   148,   149,   149,   149,   150,   150,   150,   150,   150,   150,
-   150,   150,   150,   150,   150,   150,   151,   151,   151,   152,
-   152,   152,   152,   152,   152,   152,   152,   152,   152,   153,
-   153,   153,   153,   153,   153,   153,   153,   153,   153,   153,
-   153,   153,   153,   153,   153,   154,   155,   155,   156,   156,
-   157,   157,   157,   157,   157,   158,   158,   158,   159,   159,
-   160,   160,   160,   161,   161,   161,   161,   161,   162,   162,
-   162,   162,   162,   162,   162,   162,   163,   163,   164,   164,
-   165,   165,   166,   166,   167,   167,   168,   168,   169,   170,
-   170,   171,   171,   172,   172,   173,   173,   173,   173,   174,
-   174,   174,   174,   174,   174,   174,   174,   174,   174,   174,
-   174,   174,   175,   176,   176,   177,   177,   178,   178,   178,
-   178,   179,   179,   180,   180,   180,   180,   180,   180,   180,
-   180,   180,   180,   180,   180,   180,   180,   180,   180,   180,
-   180,   181,   181,   181,   181,   181,   181,   181,   181,   181,
-   181,   181,   182,   182,   183,   183,   184,   184,   185,   185,
-   187,   186,   188,   186,   186,   186,   186,   186,   189,   186,
-   190,   186,   191,   186,   186,   186,   192,   193,   193,   194,
-   194,   194,   194,   195,   196,   196,   196,   197,   197,   198,
-   198,   199,   199,   200,   200,   200,   200,   201,   202,   202,
-   203,   204,   204,   205,   206,   207,   207,   208,   208,   208,
-   208,   208,   208,   208,   208,   208,   208,   208,   209,   209,
-   210,   210,   211,   212,   212,   213,   214,   214,   214,   215,
-   215,   215,   215,   215,   215,   215,   215,   215,   216,   216,
-   217,   218,   218,   219,   219,   219,   220,   220,   221,   221,
-   222,   222,   222,   222,   222,   222,   222,   222,   222,   222,
-   222,   222,   222,   222,   223,   223,   224,   224,   224,   224,
-   224,   224,   224,   224
-};
-
-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,     2,     0,
-     1,     1,     1,     1,     1,     1,     1,     1,     0,     1,
-     0,     1,     1,     0,     1,     1,     1,     1,     0,     1,
-     1,     1,     1,     1,     1,     2,     1,     1,     0,     2,
-     1,     1,     0,     2,     0,     2,     0,     3,     2,     0,
-     1,     0,     3,     1,     2,     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,     6,     5,     8,     6,     6,     7,     7,     6,     6,
-     8,     8,     3,     1,     1,     1,     1,     0,     1,     2,
-     0,     3,     0,     3,     3,     1,     3,     3,     0,     6,
-     0,     7,     0,     7,     2,     3,     1,     1,     1,     3,
-     3,     3,     3,     3,     3,     1,     0,     1,     1,     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,     2,     2,     2,     3,     2,     0,     1,     2,
-     2,     3,     9,     9,     8,    14,     1,     1,     6,     5,
-     2,     6,     7,     3,     5,     0,     0,     3,     2,     1,
-     5,     5,     6,     6,     4,     4,     6,     4,     4,     6,
-     6,     2,     8,     1,     1,     0,     3,     6,     3,     6,
-     2,     4,     6,     4
-};
-
-static const short yydefact[] = {    60,
-   198,   199,   176,   173,   171,     0,     0,     0,    69,    60,
-   169,     0,    71,    74,     0,     0,     0,     0,   185,     0,
-     0,     0,    61,    63,    62,    64,    66,    65,    67,    68,
-    70,    69,    69,     0,   170,    59,    72,    73,    69,   174,
-    75,    76,    77,    78,    69,   238,   172,   238,     0,     0,
-     0,     0,   197,   186,   187,   175,     1,     2,   178,   106,
-   107,   108,   109,   110,     0,     0,     0,     0,   229,   111,
-   177,   230,   113,     0,     0,   165,   166,     0,    79,    79,
-   239,   235,    60,   212,   213,   214,   234,   192,   189,   188,
-   190,   191,   193,   196,     0,   131,   114,     0,     0,     0,
-     0,   120,   132,     0,   112,   131,     0,     0,   106,   107,
-   108,     0,     0,     0,   179,     0,    80,    81,    82,    83,
-    84,    85,     0,   215,     0,   276,   237,     0,   194,   130,
-    89,   126,   128,     0,     0,     0,     0,     0,     0,   119,
-     0,   181,   183,   149,   150,   147,   148,   151,   146,   142,
-   143,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-    12,    13,    14,     0,     0,     0,    15,    16,    17,    18,
-    19,    20,    21,    22,    23,    24,    25,    26,     0,    27,
-    28,    29,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   145,   144,   102,    86,   125,   124,     0,
-   209,   210,   211,   275,   260,     0,     0,     0,     0,    79,
-   247,   248,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   236,    79,
-   251,     0,   274,   195,   123,     0,    93,     0,     0,   122,
-     0,   133,    93,   102,   102,    30,    31,    32,    33,    34,
-    35,    36,    37,    38,    39,     0,    54,    55,    50,    51,
-    52,    53,    40,    41,    42,    43,    44,    45,    46,    47,
-    48,    49,     0,     0,     0,     0,     0,     0,   135,   164,
-     0,     0,     0,   139,     0,   136,     0,     0,     0,     0,
-     0,   180,     0,   259,   241,     0,   240,     0,     0,    56,
-     0,     0,     0,     0,    97,    97,   281,     0,     0,   272,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,    87,    88,    90,   129,   127,   116,   117,   118,
-   121,   115,   182,   184,     0,     0,   257,     0,     0,     0,
-     0,     0,   134,   120,   132,     0,   137,   138,     0,     0,
-     0,     0,     0,     0,   104,   102,   207,   218,   219,   220,
-   225,   221,   222,   223,   224,   216,     0,   227,   232,   231,
-   233,     0,   242,     0,     0,     0,     0,     0,   277,     0,
-   279,   257,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    91,    92,    94,     0,
-     0,     0,     0,     0,     0,     0,   163,   141,     0,     0,
-     0,     0,     0,    99,   105,   103,   206,    89,   204,     0,
-   217,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   284,     0,     0,     0,   268,   269,     0,     0,     0,
-     0,   266,   265,     0,   282,     0,     0,     0,     0,   153,
-     0,     0,     0,     0,   140,     0,     0,     0,     0,   201,
-     0,    93,     0,   226,     0,     0,   256,     0,     0,    97,
-    98,    97,     0,     0,     0,     0,     0,   261,   262,   256,
-     0,     0,     0,   258,     0,   160,     0,     0,   155,   156,
-   152,   159,   200,   203,   205,    89,   100,     0,     0,     0,
-     0,     0,   263,   264,     0,   278,   280,     0,     0,   267,
-   270,   271,     0,   283,   157,   158,     0,     0,     0,   201,
-   101,    95,   228,     0,     0,    89,     0,    93,   252,     0,
-    93,   154,   161,   162,   202,     0,   208,     0,   245,     0,
-     0,   254,     0,     0,   253,   273,    96,   243,     0,   244,
-     0,    89,     0,     0,     0,   255,     0,     0,     0,     0,
-   250,     0,     0,   249,     0,   246,     0,     0,     0
-};
-
-static const short yydefgoto[] = {    69,
-   190,   191,   192,   193,   256,   273,   112,   113,     9,    32,
-    33,    34,    39,    45,   123,   325,   235,   399,   328,   537,
-   379,   355,   522,   292,   356,    70,   114,   132,   200,   133,
-   134,   104,   280,   368,   281,    78,   567,    10,    11,    14,
-    13,   196,   244,   245,    56,    91,    19,    54,    95,    72,
-   494,   419,   420,   124,   203,    46,    86,    47,    40,   422,
-   369,    73,   371,   297,    48,    82,    83,   229,   541,   127,
-   310,   502,   402,   230,   231,   232,   233
-};
-
-static const short yypact[] = {   399,
--32768,-32768,-32768,-32768,-32768,    12,   -43,    -5,    66,   525,
--32768,    47,   142,   122,    58,    63,    82,    88,-32768,   -33,
-   119,   789,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,   -13,   -13,   222,-32768,-32768,-32768,-32768,   -13,-32768,
--32768,-32768,-32768,-32768,   -13,   123,-32768,    -6,   208,   218,
-   223,   224,   243,-32768,-32768,-32768,-32768,-32768,   124,-32768,
--32768,-32768,-32768,-32768,   267,   276,     8,    23,-32768,-32768,
-   121,-32768,-32768,   222,   222,-32768,-32768,  1043,   129,   129,
--32768,-32768,   239,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,   -45,   547,-32768,   143,   147,   118,
-   124,-32768,   121,   -94,-32768,   547,  1043,  1127,    42,   284,
-   285,   263,   286,   600,-32768,   290,-32768,-32768,-32768,-32768,
--32768,-32768,  1140,-32768,    -8,  1278,-32768,   279,-32768,-32768,
-   121,-32768,   162,   159,  1127,  1127,   156,   -70,  1127,-32768,
-   167,-32768,   121,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,   536,   499,   172,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   175,-32768,
--32768,-32768,   176,   178,   179,   691,  1183,   137,   302,   182,
-   183,   186,   190,-32768,-32768,   166,-32768,   124,   121,   239,
--32768,-32768,-32768,-32768,-32768,   251,  1195,    56,   319,   129,
--32768,-32768,   536,   499,  1127,  1127,  1127,  1127,  1127,  1127,
-  1127,  1127,  1127,  1127,  1127,  1127,  1127,  1127,-32768,   129,
--32768,   163,-32768,-32768,   164,   772,-32768,    41,   -27,-32768,
-   187,   121,-32768,   166,   166,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,   192,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,   194,  1043,  1043,  1043,  1043,  1043,-32768,-32768,
-    20,   498,   -91,-32768,   -67,-32768,  1043,  1043,  1043,  1043,
-   -12,-32768,   195,-32768,   124,   744,-32768,   871,   871,-32768,
-   871,  1140,  1127,  1127,   -17,    29,-32768,   744,    60,   200,
-   201,   202,   203,   204,   205,   744,   744,   311,   207,  1140,
-  1127,  1127,-32768,-32768,-32768,-32768,-32768,   -86,-32768,-32768,
--32768,   -86,-32768,-32768,  1043,  1043,-32768,   210,   215,   216,
-   217,  1043,-32768,   199,   600,   -50,-32768,-32768,   220,   225,
-   328,   226,   346,   359,-32768,   166,  1026,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,   310,  1043,-32768,-32768,-32768,
--32768,   231,-32768,   232,   871,   744,   744,     2,-32768,     5,
--32768,-32768,   871,   230,  1127,  1127,  1127,  1127,  1127,   236,
-   242,  1127,  1127,   871,   744,   246,-32768,-32768,-32768,   247,
-   248,     6,  1043,  1043,  1043,  1043,-32768,-32768,   234,  1043,
-  1043,  1127,  1043,-32768,-32768,-32768,-32768,   121,   249,   250,
--32768,   368,   -46,   373,   374,   254,   253,   260,   871,   393,
-   871,   269,   271,   871,   272,   121,-32768,   273,   275,   871,
-   871,   121,-32768,   277,-32768,  1127,  1043,  1043,  1127,-32768,
-   278,   280,   283,   287,-32768,   288,   293,   114,   295,     3,
-  1089,-32768,   291,-32768,   871,   871,  1127,   871,   871,   300,
--32768,   300,   871,   303,  1127,  1127,  1127,-32768,-32768,  1127,
-   744,   301,   304,-32768,  1043,-32768,  1043,  1043,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,   121,    64,   394,   306,   299,
-   744,    35,-32768,-32768,   376,-32768,-32768,   305,   871,-32768,
--32768,-32768,   112,-32768,-32768,-32768,   307,   312,   313,     3,
--32768,   395,-32768,   432,    -4,-32768,  1127,-32768,-32768,   308,
--32768,-32768,-32768,-32768,-32768,   450,-32768,   871,-32768,   998,
-     9,   164,   744,     1,-32768,   -86,-32768,-32768,   321,-32768,
-   998,-32768,   444,   445,   324,   164,   871,   871,   447,   397,
--32768,   871,   455,-32768,   871,-32768,   468,   469,-32768
-};
-
-static const short yypgoto[] = {-32768,
-   345,   347,   348,   349,   259,   262,  -208,-32768,   398,-32768,
--32768,    48,-32768,-32768,  -172,  -305,  -411,-32768,  -217,-32768,
-  -300,   -20,-32768,  -223,-32768,-32768,   -14,   252,  -260,-32768,
-   377,   382,   -58,  -112,  -184,   211,-32768,-32768,   477,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,     0,
-   -30,-32768,-32768,   411,-32768,-32768,-32768,-32768,-32768,-32768,
-  -492,   -73,   103,  -151,-32768,   446,-32768,-32768,-32768,-32768,
--32768,    13,   113,-32768,-32768,-32768,-32768
-};
-
-
-#define	YYLAST		1407
-
-
-static const short yytable[] = {    12,
-   301,   194,   283,   285,   300,   381,   460,    71,    81,    12,
-   429,    99,   201,   431,   353,    84,     1,   300,     2,   115,
-   333,   334,   398,   323,   324,   332,   398,    57,    58,   553,
-   101,    60,    61,    62,    63,   354,     1,   302,     2,   139,
-   195,   375,   342,   397,   -56,   -56,    21,   549,   142,   430,
-   140,   347,   430,   103,    15,    16,    17,   320,   555,   394,
-   144,   145,    64,   139,   298,   307,   342,   299,   311,   312,
-   313,   314,   315,    18,   241,   318,   319,   348,    22,    74,
-    75,   131,    12,   342,   520,   103,    79,   342,   128,    20,
-   353,   131,    80,   143,   409,   129,   464,   346,    23,    24,
-    25,    26,    27,    28,    29,    53,    30,   105,   199,   106,
-   323,   324,   323,   324,   542,   330,   378,   105,    31,   106,
-   238,   239,    57,    58,   242,   101,    60,    61,    62,    63,
-   397,     1,   416,     2,    55,   202,   539,    81,    85,   449,
-   556,    57,    58,   450,   101,   109,   110,   111,    63,   550,
-     1,   100,     2,   342,    41,    42,    43,    64,    65,    44,
-   343,    66,   380,   105,    67,   106,    68,   102,   527,   506,
-   396,   507,   528,   323,   324,   105,    64,   106,    37,    36,
-    38,   329,   423,   116,   117,   118,   119,   120,   121,   122,
-    49,   398,   296,   397,   105,    50,   106,    31,   383,   293,
-   305,   306,   296,   308,   309,   296,   296,   296,   296,   296,
-   316,   317,   296,   296,    51,   337,   338,   339,   340,   341,
-    52,   131,   370,    88,   370,   370,    92,   370,   349,   350,
-   351,   352,   194,   435,   370,   437,   438,   439,   398,    93,
-   398,   443,   370,   370,   497,   527,    76,    77,   105,   531,
-   106,   491,     1,    65,     2,   105,    66,   106,    94,    67,
-    96,    68,   137,    89,    90,   146,   147,   345,   321,   322,
-    97,   195,    65,   323,   324,    66,   400,   401,    67,    98,
-    68,   284,   135,   407,   107,   108,   136,   199,   376,   377,
-   -57,   -58,   148,   197,   234,   236,   237,   484,   240,   291,
-   294,   370,   370,   370,   243,   199,   395,   296,   274,   370,
-   544,   275,   276,   546,   277,   278,   540,   286,   287,   288,
-   370,   370,   289,   510,   511,   512,   290,   300,   335,   331,
-   336,   357,   551,   384,   385,   386,   387,   388,   389,   392,
-   393,   408,   418,   403,   451,   452,   453,   454,   404,   405,
-   406,   456,   457,   410,   459,   370,   412,   370,   411,   413,
-   370,   414,   415,   421,   424,   425,   370,   370,   434,   440,
-   296,   436,   296,   296,   296,   441,   455,   442,   296,   446,
-   447,   448,   461,   463,   465,   466,   468,   462,   482,   483,
-   467,   370,   370,   469,   370,   370,   471,   458,  -168,   370,
-   372,   373,   449,   374,   473,   475,   476,   370,   477,   523,
-   382,   485,     1,   480,     2,     3,   487,   486,   390,   391,
-   488,     4,     5,   430,   498,   489,   517,   370,   518,   519,
-   490,   481,   492,   505,   296,   370,   509,   525,   515,   524,
-     6,   516,   536,   538,   532,   529,   496,     7,   545,   533,
-   534,     8,   501,   547,   554,   557,   558,   559,   562,   493,
-   296,   296,   296,   563,   370,   501,   565,   568,   569,   370,
-   225,   303,   226,   227,   228,   304,   521,   426,   427,   428,
-   126,   138,   141,   370,   370,   433,    35,   327,   370,   535,
-   125,   370,   513,    87,   432,     0,   444,   445,     0,     0,
-     0,     0,    57,    58,     0,   101,   109,   110,   111,    63,
-     0,     1,   543,     2,     0,     0,     0,   257,   258,   493,
-     0,     0,     0,     0,  -167,     0,     0,     0,     0,     0,
-     0,   470,     0,   472,     0,     0,   474,    64,     1,     0,
-     2,     3,   478,   479,     0,     0,     0,     4,     5,     0,
-     0,    57,    58,     0,   101,    60,    61,    62,    63,     0,
-     1,     0,     2,     0,     0,     0,     6,   499,   500,     0,
-   503,   504,     0,     7,     0,   508,   130,     8,     0,     0,
-     0,     0,     0,   514,     0,     0,    64,   259,   260,   261,
-   262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
-   272,     0,     0,   526,    57,    58,     0,     0,     0,     0,
-     0,   530,     0,     1,     0,     2,     0,   149,   246,   247,
-   248,   249,   250,   251,   252,   253,   254,   255,     0,     0,
-   150,   151,     0,    65,     0,     0,    66,     0,     0,    67,
-   548,    68,   344,     0,     0,   552,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   560,
-   561,     0,     0,     0,   564,     0,     0,   566,   152,   153,
-   154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-   164,   165,    65,     0,     0,    66,     0,     0,    67,     0,
-    68,     0,     0,     0,     0,    57,    58,     0,   101,   109,
-   110,   111,    63,     0,     1,     0,     2,   166,   167,   168,
-   169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     0,   179,   180,   181,   182,     0,   183,   184,   185,     0,
-    64,     0,     0,     0,   105,     0,   106,     0,   186,     0,
-     0,   187,     0,   188,     0,   189,   358,   359,    57,    58,
-   360,     0,     0,     0,     0,     0,     0,     1,     0,     2,
-     0,   361,   362,   363,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   364,   365,    57,    58,     0,   101,
-    60,    61,    62,    63,     0,     1,     0,     2,     0,     0,
-     0,     0,     0,    57,    58,   366,    59,    60,    61,    62,
-    63,   326,     1,     0,     2,     0,     0,     0,     0,     0,
-     0,    64,   152,   153,   154,   155,   156,   157,   158,   159,
-   160,   161,   162,   163,   164,   165,    65,     0,    64,    66,
-     0,   279,    67,     0,    68,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-   175,   176,   177,   178,     0,   179,   180,   181,   182,     0,
-   183,   184,   185,   358,   359,    57,    58,   360,   105,     0,
-   106,     0,     0,     0,     1,   367,     2,     0,   361,   362,
-   363,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   364,   365,     0,     0,     0,     0,    65,     0,     0,
-    66,     0,     0,    67,     0,    68,     0,     0,     0,     0,
-     0,     0,   366,     0,    65,     0,     0,    66,     0,     0,
-    67,     0,    68,     0,     0,     0,     0,     0,     0,   152,
-   153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-   163,   164,   165,     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,   166,   167,
-   168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-   178,     0,   179,   180,   181,   182,     0,   183,   184,   185,
-   358,   359,     0,     0,   360,     0,     0,     0,     0,     0,
-     0,     0,   367,     0,     0,   361,   362,   363,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   364,   365,
-    57,    58,     0,   101,    60,    61,    62,    63,     0,     1,
-     0,     2,     0,     0,     0,     0,     0,    57,    58,   366,
-   101,   109,   110,   111,    63,   417,     1,     0,     2,     0,
-     0,     0,     0,     0,     0,    64,   152,   153,   154,   155,
-   156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     0,     0,    64,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    57,    58,     0,   101,    60,    61,    62,
-    63,     0,     1,     0,     2,   166,   167,   168,   169,   170,
-   171,   172,   173,   174,   175,   176,   177,   178,   495,   179,
-   180,   181,   182,     0,   183,   184,   185,     0,    64,     0,
-     0,    57,    58,     0,   101,    60,    61,    62,    63,   367,
-     1,     0,     2,     0,    57,    58,     0,   198,    60,    61,
-    62,    63,     0,     1,     0,     2,     0,     0,     0,     0,
-     0,    65,     0,     0,    66,     0,    64,    67,     0,    68,
-     0,     0,     0,     0,     0,     0,     0,     0,    65,    64,
-     0,    66,     0,     0,    67,     0,    68,    57,    58,     0,
-   101,   109,   110,   111,    63,     0,     1,     0,     2,    57,
-    58,     0,   295,    60,    61,    62,    63,     0,     1,     0,
-     2,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,    64,     0,    65,     0,     0,    66,     0,     0,
-    67,     0,    68,     0,    64,     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,    65,     0,     0,    66,     0,     0,    67,     0,
-    68,     0,     0,     0,     0,    65,     0,     0,    66,     0,
-     0,    67,     0,    68,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   204,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,    65,     0,
-     0,    66,     0,     0,    67,     0,   282,   205,   206,     0,
-    65,     0,     0,    66,     0,     0,    67,     0,    68,     0,
-   207,   208,   209,   210,   211,   212,   152,   153,   154,   155,
-   156,   157,   158,   159,   160,   161,   162,   163,   213,   214,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   215,   216,   217,     0,     0,   218,   167,   168,   169,   170,
-   171,   172,   173,   174,   175,   176,   177,   178,   219,   220,
-   180,   181,   182,   221,   222,   223,   224
-};
-
-static const short yycheck[] = {     0,
-   209,   114,   187,   188,     9,   306,   418,    22,    15,    10,
-     9,     4,    21,     9,    27,    22,    14,     9,    16,    78,
-   244,   245,   328,   110,   111,   243,   332,     5,     6,    29,
-     8,     9,    10,    11,    12,    48,    14,   210,    16,   134,
-   114,   302,   134,   130,     3,     4,    52,   540,   107,    48,
-   145,   143,    48,    68,    43,    44,    45,   230,   551,   320,
-    19,    20,    40,   134,     9,   217,   134,    12,   220,   221,
-   222,   223,   224,    62,   145,   227,   228,   145,    13,    32,
-    33,    96,    83,   134,   496,   100,    39,   134,   134,   133,
-    27,   106,    45,   108,   145,   141,   143,   282,    33,    34,
-    35,    36,    37,    38,    39,   139,    41,   135,   123,   137,
-   110,   111,   110,   111,   526,   143,   134,   135,   132,   137,
-   135,   136,     5,     6,   139,     8,     9,    10,    11,    12,
-   130,    14,   356,    16,    16,   144,   141,    15,   145,   134,
-   552,     5,     6,   138,     8,     9,    10,    11,    12,   141,
-    14,   144,    16,   134,    33,    34,    35,    40,   136,    38,
-   141,   139,   134,   135,   142,   137,   144,   145,   134,   470,
-   322,   472,   138,   110,   111,   135,    40,   137,    37,   133,
-    39,   141,   367,    55,    56,    57,    58,    59,    60,    61,
-   133,   497,   207,   130,   135,   133,   137,   132,   139,   200,
-   215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-   225,   226,   227,   228,   133,   274,   275,   276,   277,   278,
-   133,   236,   296,    16,   298,   299,     4,   301,   287,   288,
-   289,   290,   345,   385,   308,   387,   388,   389,   544,    16,
-   546,   393,   316,   317,   462,   134,    25,    26,   135,   138,
-   137,   138,    14,   136,    16,   135,   139,   137,    16,   142,
-   137,   144,   145,    46,    47,     3,     4,   282,   106,   107,
-     4,   345,   136,   110,   111,   139,   335,   336,   142,     4,
-   144,   145,   140,   342,    74,    75,   140,   302,   303,   304,
-     7,     7,     7,     4,    16,   134,   138,   449,   143,   134,
-    50,   375,   376,   377,   138,   320,   321,   322,   137,   383,
-   528,   137,   137,   531,   137,   137,   525,    16,   137,   137,
-   394,   395,   137,   475,   476,   477,   137,     9,   137,   143,
-   137,   137,   541,   134,   134,   134,   134,   134,   134,    29,
-   134,   143,   357,   134,   403,   404,   405,   406,   134,   134,
-   134,   410,   411,   134,   413,   429,    29,   431,   134,   134,
-   434,    16,     4,    54,   134,   134,   440,   441,   139,   134,
-   385,   386,   387,   388,   389,   134,   143,   392,   393,   134,
-   134,   134,   134,    16,    12,    12,   134,   138,   447,   448,
-   137,   465,   466,   134,   468,   469,     4,   412,     0,   473,
-   298,   299,   134,   301,   134,   134,   134,   481,   134,    16,
-   308,   134,    14,   137,    16,    17,   134,   138,   316,   317,
-   134,    23,    24,    48,   134,   138,   485,   501,   487,   488,
-   138,   446,   138,   134,   449,   509,   134,   139,   138,   134,
-    42,   138,    48,    12,   138,   141,   461,    49,   141,   138,
-   138,    53,   467,     4,   134,    12,    12,   134,    12,   460,
-   475,   476,   477,    67,   538,   480,    12,     0,     0,   543,
-   126,   213,   126,   126,   126,   214,   497,   375,   376,   377,
-    83,   100,   106,   557,   558,   383,    10,   236,   562,   520,
-    80,   565,   480,    48,   382,    -1,   394,   395,    -1,    -1,
-    -1,    -1,     5,     6,    -1,     8,     9,    10,    11,    12,
-    -1,    14,   527,    16,    -1,    -1,    -1,    19,    20,   520,
-    -1,    -1,    -1,    -1,     0,    -1,    -1,    -1,    -1,    -1,
-    -1,   429,    -1,   431,    -1,    -1,   434,    40,    14,    -1,
-    16,    17,   440,   441,    -1,    -1,    -1,    23,    24,    -1,
-    -1,     5,     6,    -1,     8,     9,    10,    11,    12,    -1,
-    14,    -1,    16,    -1,    -1,    -1,    42,   465,   466,    -1,
-   468,   469,    -1,    49,    -1,   473,    30,    53,    -1,    -1,
-    -1,    -1,    -1,   481,    -1,    -1,    40,    89,    90,    91,
-    92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-   102,    -1,    -1,   501,     5,     6,    -1,    -1,    -1,    -1,
-    -1,   509,    -1,    14,    -1,    16,    -1,    18,    83,    84,
-    85,    86,    87,    88,    89,    90,    91,    92,    -1,    -1,
-    31,    32,    -1,   136,    -1,    -1,   139,    -1,    -1,   142,
-   538,   144,   145,    -1,    -1,   543,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   557,
-   558,    -1,    -1,    -1,   562,    -1,    -1,   565,    69,    70,
-    71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-    81,    82,   136,    -1,    -1,   139,    -1,    -1,   142,    -1,
-   144,    -1,    -1,    -1,    -1,     5,     6,    -1,     8,     9,
-    10,    11,    12,    -1,    14,    -1,    16,   108,   109,   110,
-   111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-    -1,   122,   123,   124,   125,    -1,   127,   128,   129,    -1,
-    40,    -1,    -1,    -1,   135,    -1,   137,    -1,   139,    -1,
-    -1,   142,    -1,   144,    -1,   146,     3,     4,     5,     6,
-     7,    -1,    -1,    -1,    -1,    -1,    -1,    14,    -1,    16,
-    -1,    18,    19,    20,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    31,    32,     5,     6,    -1,     8,
-     9,    10,    11,    12,    -1,    14,    -1,    16,    -1,    -1,
-    -1,    -1,    -1,     5,     6,    52,     8,     9,    10,    11,
-    12,    30,    14,    -1,    16,    -1,    -1,    -1,    -1,    -1,
-    -1,    40,    69,    70,    71,    72,    73,    74,    75,    76,
-    77,    78,    79,    80,    81,    82,   136,    -1,    40,   139,
-    -1,   141,   142,    -1,   144,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-   117,   118,   119,   120,    -1,   122,   123,   124,   125,    -1,
-   127,   128,   129,     3,     4,     5,     6,     7,   135,    -1,
-   137,    -1,    -1,    -1,    14,   142,    16,    -1,    18,    19,
-    20,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    31,    32,    -1,    -1,    -1,    -1,   136,    -1,    -1,
-   139,    -1,    -1,   142,    -1,   144,    -1,    -1,    -1,    -1,
-    -1,    -1,    52,    -1,   136,    -1,    -1,   139,    -1,    -1,
-   142,    -1,   144,    -1,    -1,    -1,    -1,    -1,    -1,    69,
-    70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-    80,    81,    82,    -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,   108,   109,
-   110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-   120,    -1,   122,   123,   124,   125,    -1,   127,   128,   129,
-     3,     4,    -1,    -1,     7,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   142,    -1,    -1,    18,    19,    20,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    31,    32,
-     5,     6,    -1,     8,     9,    10,    11,    12,    -1,    14,
-    -1,    16,    -1,    -1,    -1,    -1,    -1,     5,     6,    52,
-     8,     9,    10,    11,    12,    30,    14,    -1,    16,    -1,
-    -1,    -1,    -1,    -1,    -1,    40,    69,    70,    71,    72,
-    73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-    -1,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,     5,     6,    -1,     8,     9,    10,    11,
-    12,    -1,    14,    -1,    16,   108,   109,   110,   111,   112,
-   113,   114,   115,   116,   117,   118,   119,   120,    30,   122,
-   123,   124,   125,    -1,   127,   128,   129,    -1,    40,    -1,
-    -1,     5,     6,    -1,     8,     9,    10,    11,    12,   142,
-    14,    -1,    16,    -1,     5,     6,    -1,     8,     9,    10,
-    11,    12,    -1,    14,    -1,    16,    -1,    -1,    -1,    -1,
-    -1,   136,    -1,    -1,   139,    -1,    40,   142,    -1,   144,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   136,    40,
-    -1,   139,    -1,    -1,   142,    -1,   144,     5,     6,    -1,
-     8,     9,    10,    11,    12,    -1,    14,    -1,    16,     5,
-     6,    -1,     8,     9,    10,    11,    12,    -1,    14,    -1,
-    16,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    40,    -1,   136,    -1,    -1,   139,    -1,    -1,
-   142,    -1,   144,    -1,    40,    -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,   136,    -1,    -1,   139,    -1,    -1,   142,    -1,
-   144,    -1,    -1,    -1,    -1,   136,    -1,    -1,   139,    -1,
-    -1,   142,    -1,   144,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    28,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   136,    -1,
-    -1,   139,    -1,    -1,   142,    -1,   144,    50,    51,    -1,
-   136,    -1,    -1,   139,    -1,    -1,   142,    -1,   144,    -1,
-    63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-    73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   103,   104,   105,    -1,    -1,   108,   109,   110,   111,   112,
-   113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-   123,   124,   125,   126,   127,   128,   129
-};
-/* -*-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
+#if defined (__STDC__) || defined (__cplusplus)
+   typedef signed char yysigned_char;
 #else
-#define YYSTACK_ALLOC malloc
+   typedef short int yysigned_char;
 #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.  */
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL  36
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   1357
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS  147
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS  79
+/* YYNRULES -- Number of rules. */
+#define YYNRULES  285
+/* YYNRULES -- Number of states. */
+#define YYNSTATES  569
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   387
+
+#define YYTRANSLATE(YYX)						\
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const unsigned char 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,
+     137,   138,   135,     2,   134,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     142,   133,   143,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,   139,   136,   141,     2,     2,     2,     2,     2,   146,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     140,     2,     2,   144,     2,   145,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     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
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const unsigned short int 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,   122,   123,   125,   127,   129,   131,   133,   135,   137,
+     139,   140,   142,   143,   145,   147,   148,   150,   152,   154,
+     156,   157,   159,   161,   163,   165,   167,   169,   172,   174,
+     176,   177,   180,   182,   184,   185,   188,   189,   192,   193,
+     197,   200,   201,   203,   204,   208,   210,   213,   215,   217,
+     219,   221,   223,   225,   228,   230,   233,   239,   245,   251,
+     257,   261,   264,   270,   275,   278,   280,   282,   284,   288,
+     290,   294,   296,   297,   299,   303,   308,   312,   316,   321,
+     326,   330,   337,   343,   346,   349,   352,   355,   358,   361,
+     364,   367,   370,   373,   380,   386,   395,   402,   409,   417,
+     425,   432,   439,   448,   457,   461,   463,   465,   467,   469,
+     470,   472,   475,   476,   480,   481,   485,   489,   491,   495,
+     499,   500,   507,   508,   516,   517,   525,   528,   532,   534,
+     536,   538,   542,   546,   550,   554,   558,   562,   564,   565,
+     567,   569,   571,   572,   578,   582,   584,   588,   590,   591,
+     601,   603,   605,   610,   612,   614,   617,   621,   622,   624,
+     626,   628,   630,   632,   634,   636,   638,   640,   644,   646,
+     652,   654,   656,   658,   660,   663,   666,   669,   673,   676,
+     677,   679,   682,   685,   689,   699,   709,   718,   733,   735,
+     737,   744,   750,   753,   760,   768,   772,   778,   779,   780,
+     784,   787,   789,   795,   801,   808,   815,   820,   825,   832,
+     837,   842,   849,   856,   859,   868,   870,   872,   873,   877,
+     884,   888,   895,   898,   903,   910
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const short int yyrhs[] =
+{
+     185,     0,    -1,     5,    -1,     6,    -1,    69,    -1,    70,
+      -1,    71,    -1,    72,    -1,    73,    -1,    74,    -1,    75,
+      -1,    76,    -1,    77,    -1,    78,    -1,    79,    -1,    80,
+      -1,   109,    -1,   110,    -1,   111,    -1,   112,    -1,   113,
+      -1,   114,    -1,   115,    -1,   116,    -1,   117,    -1,   118,
+      -1,   119,    -1,   120,    -1,   123,    -1,   124,    -1,   125,
+      -1,    83,    -1,    84,    -1,    85,    -1,    86,    -1,    87,
+      -1,    88,    -1,    89,    -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,    89,    -1,    90,    -1,    91,    -1,    92,    -1,    19,
+      -1,    20,    -1,     9,    -1,    10,    -1,    11,    -1,   198,
+     133,    -1,    -1,    33,    -1,    35,    -1,    34,    -1,    36,
+      -1,    38,    -1,    37,    -1,    39,    -1,    41,    -1,    -1,
+     132,    -1,    -1,    37,    -1,    39,    -1,    -1,    33,    -1,
+      34,    -1,    35,    -1,    38,    -1,    -1,    56,    -1,    57,
+      -1,    58,    -1,    59,    -1,    60,    -1,    61,    -1,    55,
+       4,    -1,   110,    -1,   111,    -1,    -1,   165,   164,    -1,
+     130,    -1,   164,    -1,    -1,   167,   166,    -1,    -1,    48,
+       4,    -1,    -1,   134,    48,     4,    -1,    27,    16,    -1,
+      -1,   170,    -1,    -1,   134,   173,   172,    -1,   170,    -1,
+      48,     4,    -1,     9,    -1,    10,    -1,    11,    -1,    12,
+      -1,    40,    -1,   174,    -1,   175,   135,    -1,   210,    -1,
+     136,     4,    -1,   175,   137,   179,   138,   167,    -1,     8,
+     137,   179,   138,   167,    -1,   139,     4,   140,   175,   141,
+      -1,   142,     4,   140,   175,   143,    -1,   144,   180,   145,
+      -1,   144,   145,    -1,   142,   144,   180,   145,   143,    -1,
+     142,   144,   145,   143,    -1,   175,   165,    -1,   175,    -1,
+       8,    -1,   176,    -1,   178,   134,   176,    -1,   178,    -1,
+     178,   134,    30,    -1,    30,    -1,    -1,   175,    -1,   180,
+     134,   175,    -1,   175,   139,   183,   141,    -1,   175,   139,
+     141,    -1,   175,   146,    16,    -1,   175,   142,   183,   143,
+      -1,   175,   144,   183,   145,    -1,   175,   144,   145,    -1,
+     175,   142,   144,   183,   145,   143,    -1,   175,   142,   144,
+     145,   143,    -1,   175,    31,    -1,   175,    32,    -1,   175,
+     210,    -1,   175,   182,    -1,   175,    18,    -1,   155,     3,
+      -1,   155,     4,    -1,     9,    19,    -1,     9,    20,    -1,
+     156,     7,    -1,   151,   137,   181,    29,   175,   138,    -1,
+     108,   137,   181,   221,   138,    -1,   122,   137,   181,   134,
+     181,   134,   181,   138,    -1,   149,   137,   181,   134,   181,
+     138,    -1,   150,   137,   181,   134,   181,   138,    -1,    81,
+     153,   137,   181,   134,   181,   138,    -1,    82,   154,   137,
+     181,   134,   181,   138,    -1,   152,   137,   181,   134,   181,
+     138,    -1,   127,   137,   181,   134,   181,   138,    -1,   128,
+     137,   181,   134,   181,   134,   181,   138,    -1,   129,   137,
+     181,   134,   181,   134,   181,   138,    -1,   183,   134,   181,
+      -1,   181,    -1,    25,    -1,    26,    -1,   186,    -1,    -1,
+     187,    -1,   186,   187,    -1,    -1,    24,   188,   206,    -1,
+      -1,    23,   189,   207,    -1,    53,    52,   193,    -1,    17,
+      -1,   157,    13,   175,    -1,   157,    13,     8,    -1,    -1,
+     157,   160,   184,   181,   190,   172,    -1,    -1,   157,   158,
+     160,   184,   181,   191,   172,    -1,    -1,   157,   159,   160,
+     184,   175,   192,   172,    -1,    42,   195,    -1,    49,   133,
+     196,    -1,    16,    -1,    47,    -1,    46,    -1,    44,   133,
+     194,    -1,    45,   133,     4,    -1,    43,   133,    16,    -1,
+      62,   133,    16,    -1,   139,   197,   141,    -1,   197,   134,
+      16,    -1,    16,    -1,    -1,    14,    -1,    16,    -1,   198,
+      -1,    -1,   200,   134,   175,   165,   199,    -1,   175,   165,
+     199,    -1,   200,    -1,   200,   134,    30,    -1,    30,    -1,
+      -1,   163,   177,   198,   137,   201,   138,   167,   171,   168,
+      -1,    21,    -1,   144,    -1,   162,   160,   202,   203,    -1,
+      22,    -1,   145,    -1,   213,   205,    -1,   161,   160,   202,
+      -1,    -1,    54,    -1,     3,    -1,     4,    -1,     7,    -1,
+      19,    -1,    20,    -1,    31,    -1,    32,    -1,    18,    -1,
+     142,   183,   143,    -1,   182,    -1,    52,   208,    16,   134,
+      16,    -1,   148,    -1,   198,    -1,   210,    -1,   209,    -1,
+     175,   211,    -1,   213,   214,    -1,   204,   214,    -1,   215,
+     157,   216,    -1,   215,   218,    -1,    -1,    15,    -1,    63,
+     212,    -1,    63,     8,    -1,    64,    12,   211,    -1,    64,
+       9,   211,   134,    12,   211,   134,    12,   211,    -1,    65,
+     155,   211,   134,    12,   211,   139,   217,   141,    -1,    65,
+     155,   211,   134,    12,   211,   139,   141,    -1,    66,   163,
+     177,   211,   137,   220,   138,   167,    29,    12,   211,    67,
+      12,   211,    -1,    67,    -1,    68,    -1,   217,   155,   209,
+     134,    12,   211,    -1,   155,   209,   134,    12,   211,    -1,
+     157,   223,    -1,   175,   139,   211,   134,   211,   141,    -1,
+     219,   134,   139,   211,   134,   211,   141,    -1,   175,   211,
+     165,    -1,   220,   134,   175,   211,   165,    -1,    -1,    -1,
+     221,   134,   212,    -1,    51,    50,    -1,    50,    -1,   149,
+     175,   211,   134,   211,    -1,   150,   175,   211,   134,   211,
+      -1,    81,   153,   175,   211,   134,   211,    -1,    82,   154,
+     175,   211,   134,   211,    -1,   152,   212,   134,   212,    -1,
+     151,   212,    29,   175,    -1,   122,   212,   134,   212,   134,
+     212,    -1,   126,   212,   134,   175,    -1,   127,   212,   134,
+     212,    -1,   128,   212,   134,   212,   134,   212,    -1,   129,
+     212,   134,   212,   134,   212,    -1,   121,   219,    -1,   222,
+     163,   177,   211,   137,   220,   138,   167,    -1,   225,    -1,
+      28,    -1,    -1,   103,   175,   169,    -1,   103,   175,   134,
+       9,   211,   169,    -1,   104,   175,   169,    -1,   104,   175,
+     134,     9,   211,   169,    -1,   105,   212,    -1,   224,   106,
+     175,   211,    -1,   224,   107,   212,   134,   175,   211,    -1,
+     108,   175,   211,   221,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const unsigned short int yyrline[] =
+{
+       0,  1031,  1031,  1032,  1042,  1042,  1042,  1042,  1042,  1042,
+    1042,  1042,  1042,  1043,  1043,  1043,  1044,  1044,  1044,  1044,
+    1044,  1044,  1045,  1045,  1045,  1045,  1045,  1045,  1046,  1046,
+    1046,  1048,  1048,  1049,  1049,  1050,  1050,  1051,  1051,  1052,
+    1052,  1056,  1056,  1057,  1057,  1058,  1058,  1059,  1059,  1060,
+    1060,  1061,  1061,  1062,  1062,  1063,  1064,  1069,  1070,  1070,
+    1073,  1077,  1083,  1084,  1085,  1086,  1087,  1091,  1092,  1093,
+    1097,  1098,  1102,  1103,  1104,  1108,  1109,  1110,  1111,  1112,
+    1115,  1116,  1117,  1118,  1119,  1120,  1121,  1122,  1129,  1130,
+    1133,  1134,  1139,  1140,  1143,  1144,  1151,  1152,  1158,  1159,
+    1167,  1175,  1176,  1181,  1182,  1183,  1188,  1201,  1201,  1201,
+    1201,  1204,  1208,  1212,  1219,  1224,  1232,  1250,  1268,  1273,
+    1285,  1295,  1299,  1309,  1316,  1323,  1330,  1335,  1340,  1347,
+    1348,  1355,  1362,  1370,  1375,  1386,  1414,  1430,  1459,  1487,
+    1512,  1531,  1556,  1575,  1587,  1594,  1657,  1667,  1677,  1683,
+    1689,  1694,  1699,  1707,  1719,  1740,  1748,  1754,  1765,  1770,
+    1775,  1784,  1790,  1796,  1805,  1809,  1817,  1817,  1828,  1833,
+    1841,  1842,  1846,  1846,  1850,  1850,  1853,  1856,  1868,  1892,
+    1903,  1903,  1912,  1912,  1920,  1920,  1930,  1933,  1939,  1952,
+    1953,  1955,  1959,  1968,  1972,  1977,  1979,  1984,  1989,  1998,
+    1998,  1999,  1999,  2001,  2011,  2022,  2026,  2035,  2044,  2049,
+    2155,  2155,  2157,  2166,  2166,  2168,  2173,  2185,  2189,  2194,
+    2198,  2202,  2206,  2210,  2214,  2218,  2222,  2226,  2251,  2255,
+    2269,  2273,  2279,  2279,  2285,  2294,  2298,  2307,  2318,  2327,
+    2339,  2352,  2356,  2360,  2365,  2375,  2394,  2403,  2470,  2474,
+    2481,  2492,  2505,  2514,  2525,  2535,  2543,  2551,  2554,  2555,
+    2562,  2566,  2571,  2592,  2609,  2622,  2635,  2644,  2656,  2664,
+    2671,  2677,  2683,  2689,  2704,  2767,  2772,  2776,  2783,  2790,
+    2798,  2805,  2813,  2821,  2835,  2852
+};
+#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", "SINTVAL",
+  "UINTVAL", "FPVAL", "VOID", "INTTYPE", "FLOAT", "DOUBLE", "LABEL",
+  "TYPE", "VAR_ID", "LABELSTR", "STRINGCONSTANT", "IMPLEMENTATION",
+  "ZEROINITIALIZER", "TRUETOK", "FALSETOK", "BEGINTOK", "ENDTOK",
+  "DECLARE", "DEFINE", "GLOBAL", "CONSTANT", "SECTION", "VOLATILE", "TO",
+  "DOTDOTDOT", "NULL_TOK", "UNDEF", "INTERNAL", "LINKONCE", "WEAK",
+  "APPENDING", "DLLIMPORT", "DLLEXPORT", "EXTERN_WEAK", "OPAQUE",
+  "EXTERNAL", "TARGET", "TRIPLE", "ENDIAN", "POINTERSIZE", "LITTLE", "BIG",
+  "ALIGN", "DEPLIBS", "CALL", "TAIL", "ASM_TOK", "MODULE", "SIDEEFFECT",
+  "CC_TOK", "CCC_TOK", "CSRETCC_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", "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", "SHL", "LSHR", "ASHR", "VAARG", "EXTRACTELEMENT",
+  "INSERTELEMENT", "SHUFFLEVECTOR", "NORETURN", "DEFAULT", "HIDDEN", "'='",
+  "','", "'*'", "'\\\\'", "'('", "')'", "'['", "'x'", "']'", "'<'", "'>'",
+  "'{'", "'}'", "'c'", "$accept", "INTVAL", "ArithmeticOps", "LogicalOps",
+  "CastOps", "ShiftOps", "IPredicates", "FPredicates", "IntType", "FPType",
+  "OptAssign", "GVInternalLinkage", "GVExternalLinkage",
+  "GVVisibilityStyle", "FunctionDeclareLinkage", "FunctionDefineLinkage",
+  "OptCallingConv", "ParamAttr", "OptParamAttrs", "FuncAttr",
+  "OptFuncAttrs", "OptAlign", "OptCAlign", "SectionString", "OptSection",
+  "GlobalVarAttributes", "GlobalVarAttribute", "PrimType", "Types",
+  "ArgType", "ResultTypes", "ArgTypeList", "ArgTypeListI", "TypeListI",
+  "ConstVal", "ConstExpr", "ConstVector", "GlobalType", "Module",
+  "DefinitionList", "Definition", "@1", "@2", "@3", "@4", "@5", "AsmBlock",
+  "BigOrLittle", "TargetDefinition", "LibrariesDefinition", "LibList",
+  "Name", "OptName", "ArgListH", "ArgList", "FunctionHeaderH", "BEGIN",
+  "FunctionHeader", "END", "Function", "FunctionProto", "OptSideEffect",
+  "ConstValueRef", "SymbolicValueRef", "ValueRef", "ResolvedVal",
+  "BasicBlockList", "BasicBlock", "InstructionList", "BBTerminatorInst",
+  "JumpTable", "Inst", "PHIList", "ValueRefList", "IndexList",
+  "OptTailCall", "InstVal", "OptVolatile", "MemoryInst", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const unsigned short int 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,    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 unsigned char yyr1[] =
+{
+       0,   147,   148,   148,   149,   149,   149,   149,   149,   149,
+     149,   149,   149,   150,   150,   150,   151,   151,   151,   151,
+     151,   151,   151,   151,   151,   151,   151,   151,   152,   152,
+     152,   153,   153,   153,   153,   153,   153,   153,   153,   153,
+     153,   154,   154,   154,   154,   154,   154,   154,   154,   154,
+     154,   154,   154,   154,   154,   154,   154,   155,   156,   156,
+     157,   157,   158,   158,   158,   158,   158,   159,   159,   159,
+     160,   160,   161,   161,   161,   162,   162,   162,   162,   162,
+     163,   163,   163,   163,   163,   163,   163,   163,   164,   164,
+     165,   165,   166,   166,   167,   167,   168,   168,   169,   169,
+     170,   171,   171,   172,   172,   173,   173,   174,   174,   174,
+     174,   175,   175,   175,   175,   175,   175,   175,   175,   175,
+     175,   175,   175,   175,   176,   177,   177,   178,   178,   179,
+     179,   179,   179,   180,   180,   181,   181,   181,   181,   181,
+     181,   181,   181,   181,   181,   181,   181,   181,   181,   181,
+     181,   181,   181,   182,   182,   182,   182,   182,   182,   182,
+     182,   182,   182,   182,   183,   183,   184,   184,   185,   185,
+     186,   186,   188,   187,   189,   187,   187,   187,   187,   187,
+     190,   187,   191,   187,   192,   187,   187,   187,   193,   194,
+     194,   195,   195,   195,   195,   196,   197,   197,   197,   198,
+     198,   199,   199,   200,   200,   201,   201,   201,   201,   202,
+     203,   203,   204,   205,   205,   206,   207,   208,   208,   209,
+     209,   209,   209,   209,   209,   209,   209,   209,   209,   209,
+     210,   210,   211,   211,   212,   213,   213,   214,   215,   215,
+     215,   216,   216,   216,   216,   216,   216,   216,   216,   216,
+     217,   217,   218,   219,   219,   220,   220,   220,   221,   221,
+     222,   222,   223,   223,   223,   223,   223,   223,   223,   223,
+     223,   223,   223,   223,   223,   223,   224,   224,   225,   225,
+     225,   225,   225,   225,   225,   225
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const unsigned char 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,
+       2,     0,     1,     1,     1,     1,     1,     1,     1,     1,
+       0,     1,     0,     1,     1,     0,     1,     1,     1,     1,
+       0,     1,     1,     1,     1,     1,     1,     2,     1,     1,
+       0,     2,     1,     1,     0,     2,     0,     2,     0,     3,
+       2,     0,     1,     0,     3,     1,     2,     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,     6,     5,     8,     6,     6,     7,     7,
+       6,     6,     8,     8,     3,     1,     1,     1,     1,     0,
+       1,     2,     0,     3,     0,     3,     3,     1,     3,     3,
+       0,     6,     0,     7,     0,     7,     2,     3,     1,     1,
+       1,     3,     3,     3,     3,     3,     3,     1,     0,     1,
+       1,     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,     2,     2,     2,     3,     2,     0,
+       1,     2,     2,     3,     9,     9,     8,    14,     1,     1,
+       6,     5,     2,     6,     7,     3,     5,     0,     0,     3,
+       2,     1,     5,     5,     6,     6,     4,     4,     6,     4,
+       4,     6,     6,     2,     8,     1,     1,     0,     3,     6,
+       3,     6,     2,     4,     6,     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 unsigned short int yydefact[] =
+{
+      61,   199,   200,   177,   174,   172,     0,     0,     0,    70,
+       0,    61,   170,     0,    72,    75,     0,     0,     0,     0,
+     186,     0,     0,     0,    62,    64,    63,    65,    67,    66,
+      68,    69,    71,    70,    70,     0,     1,   171,    60,    73,
+      74,    70,   175,    76,    77,    78,    79,    70,   239,   173,
+     239,     0,     0,     0,     0,   198,   187,   188,   176,     2,
+       3,   179,   107,   108,   109,   110,   111,     0,     0,     0,
+       0,   230,   112,   178,   231,   114,     0,     0,   166,   167,
+       0,    80,    80,   240,   236,    61,   213,   214,   215,   235,
+     193,   190,   189,   191,   192,   194,   197,     0,   132,   115,
+       0,     0,     0,     0,   121,   133,     0,   113,   132,     0,
+       0,   107,   108,   109,     0,     0,     0,   180,     0,    81,
+      82,    83,    84,    85,    86,     0,   216,     0,   277,   238,
+       0,   195,   131,    90,   127,   129,     0,     0,     0,     0,
+       0,     0,   120,     0,   182,   184,   150,   151,   148,   149,
+     152,   147,   143,   144,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,     0,     0,     0,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,     0,    28,    29,    30,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   146,   145,   103,    87,
+     126,   125,     0,   210,   211,   212,   276,   261,     0,     0,
+       0,     0,    80,   248,   249,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   237,    80,   252,     0,   275,   196,   124,     0,    94,
+       0,     0,   123,     0,   134,    94,   103,   103,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,     0,    55,
+      56,    51,    52,    53,    54,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,     0,     0,     0,     0,     0,
+       0,   136,   165,     0,     0,     0,   140,     0,   137,     0,
+       0,     0,     0,     0,   181,     0,   260,   242,     0,   241,
+       0,     0,    57,     0,     0,     0,     0,    98,    98,   282,
+       0,     0,   273,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    88,    89,    91,   130,   128,
+     117,   118,   119,   122,   116,   183,   185,     0,     0,   258,
+       0,     0,     0,     0,     0,   135,   121,   133,     0,   138,
+     139,     0,     0,     0,     0,     0,     0,   105,   103,   208,
+     219,   220,   221,   226,   222,   223,   224,   225,   217,     0,
+     228,   233,   232,   234,     0,   243,     0,     0,     0,     0,
+       0,   278,     0,   280,   258,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    92,
+      93,    95,     0,     0,     0,     0,     0,     0,     0,   164,
+     142,     0,     0,     0,     0,     0,   100,   106,   104,   207,
+      90,   205,     0,   218,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   285,     0,     0,     0,   269,   270,
+       0,     0,     0,     0,   267,   266,     0,   283,     0,     0,
+       0,     0,   154,     0,     0,     0,     0,   141,     0,     0,
+       0,     0,   202,     0,    94,     0,   227,     0,     0,   257,
+       0,     0,    98,    99,    98,     0,     0,     0,     0,     0,
+     262,   263,   257,     0,     0,     0,   259,     0,   161,     0,
+       0,   156,   157,   153,   160,   201,   204,   206,    90,   101,
+       0,     0,     0,     0,     0,   264,   265,     0,   279,   281,
+       0,     0,   268,   271,   272,     0,   284,   158,   159,     0,
+       0,     0,   202,   102,    96,   229,     0,     0,    90,     0,
+      94,   253,     0,    94,   155,   162,   163,   203,     0,   209,
+       0,   246,     0,     0,   255,     0,     0,   254,   274,    97,
+     244,     0,   245,     0,    90,     0,     0,     0,   256,     0,
+       0,     0,     0,   251,     0,     0,   250,     0,   247
+};
+
+/* YYDEFGOTO[NTERM-NUM]. */
+static const short int yydefgoto[] =
+{
+      -1,    71,   192,   193,   194,   195,   258,   275,   114,   115,
+       9,    33,    34,    35,    41,    47,   125,   327,   237,   401,
+     330,   539,   381,   357,   524,   294,   358,    72,   116,   134,
+     202,   135,   136,   106,   282,   370,   283,    80,    10,    11,
+      12,    15,    14,   198,   246,   247,    58,    93,    20,    56,
+      97,    74,   496,   421,   422,   126,   205,    48,    88,    49,
+      42,   424,   371,    75,   373,   299,    50,    84,    85,   231,
+     543,   129,   312,   504,   404,   232,   233,   234,   235
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -413
+static const short int yypact[] =
+{
+     401,  -413,  -413,  -413,  -413,  -413,   110,  -107,    30,    67,
+      77,   527,  -413,   -43,     2,   238,   -16,     8,    47,    84,
+    -413,    -4,   132,   791,  -413,  -413,  -413,  -413,  -413,  -413,
+    -413,  -413,  -413,    91,    91,   149,  -413,  -413,  -413,  -413,
+    -413,    91,  -413,  -413,  -413,  -413,  -413,    91,   147,  -413,
+      20,   210,   208,   280,   226,   273,  -413,  -413,  -413,  -413,
+    -413,   160,  -413,  -413,  -413,  -413,  -413,   295,   299,     3,
+       7,  -413,  -413,   140,  -413,  -413,   149,   149,  -413,  -413,
+     954,   192,   192,  -413,  -413,   184,  -413,  -413,  -413,  -413,
+    -413,  -413,  -413,  -413,  -413,  -413,  -413,   -65,   549,  -413,
+     167,   171,    22,   160,  -413,   140,   -81,  -413,   549,   954,
+    1045,    95,   311,   312,   284,   313,   602,  -413,   317,  -413,
+    -413,  -413,  -413,  -413,  -413,  1125,  -413,    -7,  1228,  -413,
+     306,  -413,  -413,   140,  -413,   191,   193,  1045,  1045,   186,
+     -64,  1045,  -413,   194,  -413,   140,  -413,  -413,  -413,  -413,
+    -413,  -413,  -413,  -413,  -413,  -413,  -413,  -413,  -413,  -413,
+    -413,  -413,  -413,  -413,  -413,  -413,   251,   501,   207,  -413,
+    -413,  -413,  -413,  -413,  -413,  -413,  -413,  -413,  -413,  -413,
+    -413,   209,  -413,  -413,  -413,   214,   215,   216,    49,  1138,
+     120,   314,   219,   222,   224,   225,  -413,  -413,   230,  -413,
+     160,   140,   184,  -413,  -413,  -413,  -413,  -413,   315,  1185,
+     175,   357,   192,  -413,  -413,   251,   501,  1045,  1045,  1045,
+    1045,  1045,  1045,  1045,  1045,  1045,  1045,  1045,  1045,  1045,
+    1045,  -413,   192,  -413,   195,  -413,  -413,   203,   693,  -413,
+     126,    46,  -413,   228,   140,  -413,   230,   230,  -413,  -413,
+    -413,  -413,  -413,  -413,  -413,  -413,  -413,  -413,   231,  -413,
+    -413,  -413,  -413,  -413,  -413,  -413,  -413,  -413,  -413,  -413,
+    -413,  -413,  -413,  -413,  -413,   235,   954,   954,   954,   954,
+     954,  -413,  -413,    29,   500,   -24,  -413,   -27,  -413,   954,
+     954,   954,   954,    39,  -413,   241,  -413,   160,   746,  -413,
+     873,   873,  -413,   873,  1125,  1045,  1045,   123,   159,  -413,
+     746,   146,   233,   245,   248,   249,   250,   252,   746,   746,
+     356,   253,  1125,  1045,  1045,  -413,  -413,  -413,  -413,  -413,
+     -18,  -413,  -413,  -413,   -18,  -413,  -413,   954,   954,  -413,
+     254,   255,   256,   259,   954,  -413,   262,   602,   -12,  -413,
+    -413,   265,   274,   367,   275,   391,   407,  -413,   230,   774,
+    -413,  -413,  -413,  -413,  -413,  -413,  -413,  -413,   358,   954,
+    -413,  -413,  -413,  -413,   282,  -413,   285,   873,   746,   746,
+      35,  -413,    43,  -413,  -413,   873,   281,  1045,  1045,  1045,
+    1045,  1045,   289,   292,  1045,  1045,   873,   746,   293,  -413,
+    -413,  -413,   294,   301,   -25,   954,   954,   954,   954,  -413,
+    -413,   271,   954,   954,  1045,   954,  -413,  -413,  -413,  -413,
+     140,   302,   303,  -413,   417,    25,   427,   428,   305,   310,
+     318,   873,   441,   873,   319,   322,   873,   323,   140,  -413,
+     324,   325,   873,   873,   140,  -413,   309,  -413,  1045,   954,
+     954,  1045,  -413,   326,   328,   327,   335,  -413,   332,   333,
+     131,   336,    34,  1028,  -413,   339,  -413,   873,   873,  1045,
+     873,   873,   341,  -413,   341,   873,   342,  1045,  1045,  1045,
+    -413,  -413,  1045,   746,   340,   345,  -413,   954,  -413,   954,
+     954,  -413,  -413,  -413,  -413,  -413,  -413,  -413,   140,    10,
+     431,   343,   346,   746,    63,  -413,  -413,   400,  -413,  -413,
+     338,   873,  -413,  -413,  -413,   144,  -413,  -413,  -413,   351,
+     352,   354,    34,  -413,   403,  -413,   472,    -3,  -413,  1045,
+    -413,  -413,   355,  -413,  -413,  -413,  -413,  -413,   489,  -413,
+     873,  -413,  1000,    15,   203,   746,    66,  -413,   -18,  -413,
+    -413,   361,  -413,  1000,  -413,   485,   486,   368,   203,   873,
+     873,   491,   434,  -413,   873,   492,  -413,   873,  -413
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const short int yypgoto[] =
+{
+    -413,  -413,   379,   385,   389,   390,   304,   307,  -210,  -413,
+     439,  -413,  -413,   145,  -413,  -413,  -192,  -305,  -412,  -413,
+    -235,  -413,  -303,    26,  -413,  -201,  -413,  -413,   -14,   288,
+    -255,  -413,   420,   429,   -58,  -112,  -187,   239,  -413,  -413,
+     518,  -413,  -413,  -413,  -413,  -413,  -413,  -413,  -413,  -413,
+    -413,     0,    11,  -413,  -413,   448,  -413,  -413,  -413,  -413,
+    -413,  -413,  -403,   -73,   103,  -151,  -413,   482,  -413,  -413,
+    -413,  -413,  -413,    53,   153,  -413,  -413,  -413,  -413
+};
+
+/* 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 -170
+static const short int yytable[] =
+{
+      13,   303,   285,   287,   196,   383,   302,   101,   462,    73,
+     334,    13,    59,    60,   203,   103,    62,    63,    64,    65,
+     304,     1,   117,     2,   302,   400,    21,    59,    60,   400,
+     103,    62,    63,    64,    65,    83,     1,   355,     2,    39,
+     322,    40,    86,   197,   431,   335,   336,    66,     1,   377,
+       2,   144,   433,   141,    59,    60,   105,   103,   111,   112,
+     113,    65,    66,     1,   142,     2,   355,   396,   309,   130,
+     141,   313,   314,   315,   316,   317,   131,    36,   320,   321,
+      23,   243,    22,   432,   133,    13,   522,   356,   105,    66,
+      38,   432,   325,   326,   133,   555,   145,   348,   -57,   -57,
+      24,    25,    26,    27,    28,    29,    30,   344,    31,   451,
+     344,   201,   399,   452,   146,   147,   544,    51,   350,   349,
+     325,   326,   344,   240,   241,    59,    60,   244,   103,   111,
+     112,   113,    65,   411,     1,    55,     2,   204,   541,   551,
+     399,    52,   558,    67,   325,   326,    68,   102,    57,    69,
+     557,    70,   104,    16,    17,    18,   552,   418,    67,   344,
+      66,    68,    83,   344,    69,    87,    70,   139,   466,   508,
+     345,   509,    19,   398,    78,    79,   325,   326,    76,    77,
+      53,   107,   425,   108,   300,    67,    81,   301,    68,   332,
+     281,    69,    82,    70,   400,   298,   399,   529,     1,    32,
+       2,   530,   295,   307,   308,   298,   310,   311,   298,   298,
+     298,   298,   298,   318,   319,   298,   298,    54,   339,   340,
+     341,   342,   343,    32,   133,   372,    90,   372,   372,   499,
+     372,   351,   352,   353,   354,   196,   437,   372,   439,   440,
+     441,   400,    95,   400,   445,   372,   372,   118,   119,   120,
+     121,   122,   123,   124,    91,    92,    67,   380,   107,    68,
+     108,   107,    69,   108,    70,   286,   107,   331,   108,   493,
+     347,    43,    44,    45,   197,   107,    46,   108,   529,   402,
+     403,   107,   533,   108,    94,   385,   409,   148,   149,    96,
+     201,   378,   379,   382,   107,   546,   108,    98,   548,    99,
+     486,   323,   324,   100,   372,   372,   372,   137,   201,   397,
+     298,   138,   372,   325,   326,   109,   110,   542,   -58,   -59,
+     150,   199,   236,   372,   372,   238,   512,   513,   514,   242,
+     288,   239,   245,   553,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   276,   420,   277,   453,   454,   455,
+     456,   278,   279,   280,   458,   459,   289,   461,   372,   290,
+     372,   291,   292,   372,   293,   296,   302,   386,   337,   372,
+     372,   333,   338,   298,   438,   298,   298,   298,   359,   387,
+     444,   298,   388,   389,   390,   394,   391,   395,   405,   406,
+     407,   484,   485,   408,   372,   372,   414,   372,   372,   412,
+     460,  -169,   372,   374,   375,   410,   376,   416,   413,   415,
+     372,   417,   423,   384,   457,     1,   426,     2,     3,   427,
+     436,   392,   393,   442,     4,     5,   443,   448,   449,   519,
+     372,   520,   521,   465,   483,   450,   463,   298,   372,   467,
+     468,   464,   469,     6,   470,   473,   482,   525,   432,   498,
+       7,   538,   471,   451,     8,   503,   475,   477,   478,   479,
+     487,   489,   495,   298,   298,   298,   488,   372,   503,   490,
+     491,   492,   372,   500,   494,   507,   511,   526,   517,   531,
+     428,   429,   430,   518,   540,   527,   372,   372,   435,   534,
+     535,   372,   536,   549,   372,   556,   547,   559,   560,   446,
+     447,   565,   561,   564,   567,    59,    60,   227,   103,   111,
+     112,   113,    65,   228,     1,   545,     2,   229,   230,   305,
+     259,   260,   495,   306,   128,   523,   329,  -168,   143,    37,
+     127,   140,    89,   537,   472,   515,   474,   434,     0,   476,
+      66,     1,     0,     2,     3,   480,   481,     0,     0,     0,
+       4,     5,     0,     0,    59,    60,     0,   103,    62,    63,
+      64,    65,     0,     1,     0,     2,     0,     0,     0,     6,
+     501,   502,     0,   505,   506,     0,     7,     0,   510,   132,
+       8,     0,     0,     0,     0,     0,   516,     0,     0,    66,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,     0,     0,   528,    59,    60,     0,
+       0,     0,     0,     0,   532,     0,     1,     0,     2,     0,
+     151,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   152,   153,     0,    67,     0,     0,    68,
+       0,     0,    69,   550,    70,   346,     0,     0,   554,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   562,   563,     0,     0,     0,   566,     0,     0,
+     568,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,    67,     0,     0,    68,     0,
+       0,    69,     0,    70,     0,     0,     0,     0,    59,    60,
+       0,   103,    62,    63,    64,    65,     0,     1,     0,     2,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   328,   181,   182,   183,   184,     0,   185,
+     186,   187,     0,    66,     0,     0,     0,   107,     0,   108,
+       0,   188,     0,     0,   189,     0,   190,     0,   191,   360,
+     361,    59,    60,   362,     0,     0,     0,     0,     0,     0,
+       1,     0,     2,     0,   363,   364,   365,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   366,   367,    59,
+      60,     0,   103,    62,    63,    64,    65,     0,     1,     0,
+       2,     0,     0,     0,     0,     0,    59,    60,   368,    61,
+      62,    63,    64,    65,   419,     1,     0,     2,     0,     0,
+       0,     0,     0,     0,    66,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,    67,
+       0,    66,    68,     0,     0,    69,     0,    70,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,     0,   181,   182,
+     183,   184,     0,   185,   186,   187,   360,   361,    59,    60,
+     362,   107,     0,   108,     0,     0,     0,     1,   369,     2,
+       0,   363,   364,   365,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   366,   367,     0,     0,     0,     0,
+      67,     0,     0,    68,     0,     0,    69,     0,    70,     0,
+       0,     0,     0,     0,     0,   368,     0,    67,     0,     0,
+      68,     0,     0,    69,     0,    70,     0,     0,     0,     0,
+       0,     0,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,     0,     0,     0,    59,
+      60,     0,   103,   111,   112,   113,    65,     0,     1,     0,
+       2,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   168,   169,   170,   171,   172,   173,   174,   175,   176,
+     177,   178,   179,   180,    66,   181,   182,   183,   184,     0,
+     185,   186,   187,   360,   361,     0,     0,   362,     0,     0,
+       0,     0,     0,     0,     0,   369,     0,     0,   363,   364,
+     365,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   366,   367,    59,    60,     0,   103,    62,    63,    64,
+      65,     0,     1,     0,     2,     0,     0,     0,     0,     0,
+      59,    60,   368,   103,    62,    63,    64,    65,   497,     1,
+       0,     2,     0,     0,     0,     0,     0,     0,    66,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,     0,     0,    66,     0,     0,     0,     0,
+      67,     0,     0,    68,     0,     0,    69,     0,    70,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,     0,   181,   182,   183,   184,     0,   185,   186,   187,
+      59,    60,     0,   200,    62,    63,    64,    65,     0,     1,
+       0,     2,   369,    59,    60,     0,   103,   111,   112,   113,
+      65,     0,     1,     0,     2,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    67,    66,     0,    68,     0,     0,
+      69,     0,    70,     0,     0,     0,     0,     0,    66,     0,
+       0,    67,     0,     0,    68,     0,     0,    69,     0,    70,
+      59,    60,     0,   297,    62,    63,    64,    65,     0,     1,
+       0,     2,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    66,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   206,     0,     0,     0,
+       0,    67,     0,     0,    68,     0,     0,    69,     0,    70,
+       0,     0,     0,     0,    67,     0,     0,    68,   207,   208,
+      69,     0,   284,     0,     0,     0,     0,     0,     0,     0,
+       0,   209,   210,   211,   212,   213,   214,   154,   155,   156,
+     157,   158,   159,   160,   161,   162,   163,   164,   165,   215,
+     216,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    67,     0,     0,    68,     0,     0,    69,     0,    70,
+       0,   217,   218,   219,     0,     0,   220,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   221,
+     222,   182,   183,   184,   223,   224,   225,   226
+};
+
+static const short int yycheck[] =
+{
+       0,   211,   189,   190,   116,   308,     9,     4,   420,    23,
+     245,    11,     5,     6,    21,     8,     9,    10,    11,    12,
+     212,    14,    80,    16,     9,   330,   133,     5,     6,   334,
+       8,     9,    10,    11,    12,    15,    14,    27,    16,    37,
+     232,    39,    22,   116,     9,   246,   247,    40,    14,   304,
+      16,   109,     9,   134,     5,     6,    70,     8,     9,    10,
+      11,    12,    40,    14,   145,    16,    27,   322,   219,   134,
+     134,   222,   223,   224,   225,   226,   141,     0,   229,   230,
+      13,   145,    52,    48,    98,    85,   498,    48,   102,    40,
+     133,    48,   110,   111,   108,    29,   110,   284,     3,     4,
+      33,    34,    35,    36,    37,    38,    39,   134,    41,   134,
+     134,   125,   130,   138,    19,    20,   528,   133,   145,   143,
+     110,   111,   134,   137,   138,     5,     6,   141,     8,     9,
+      10,    11,    12,   145,    14,   139,    16,   144,   141,   542,
+     130,   133,   554,   136,   110,   111,   139,   144,    16,   142,
+     553,   144,   145,    43,    44,    45,   141,   358,   136,   134,
+      40,   139,    15,   134,   142,   145,   144,   145,   143,   472,
+     141,   474,    62,   324,    25,    26,   110,   111,    33,    34,
+     133,   135,   369,   137,     9,   136,    41,    12,   139,   143,
+     141,   142,    47,   144,   499,   209,   130,   134,    14,   132,
+      16,   138,   202,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   133,   276,   277,
+     278,   279,   280,   132,   238,   298,    16,   300,   301,   464,
+     303,   289,   290,   291,   292,   347,   387,   310,   389,   390,
+     391,   546,    16,   548,   395,   318,   319,    55,    56,    57,
+      58,    59,    60,    61,    46,    47,   136,   134,   135,   139,
+     137,   135,   142,   137,   144,   145,   135,   141,   137,   138,
+     284,    33,    34,    35,   347,   135,    38,   137,   134,   337,
+     338,   135,   138,   137,     4,   139,   344,     3,     4,    16,
+     304,   305,   306,   134,   135,   530,   137,   137,   533,     4,
+     451,   106,   107,     4,   377,   378,   379,   140,   322,   323,
+     324,   140,   385,   110,   111,    76,    77,   527,     7,     7,
+       7,     4,    16,   396,   397,   134,   477,   478,   479,   143,
+      16,   138,   138,   543,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,   137,   359,   137,   405,   406,   407,
+     408,   137,   137,   137,   412,   413,   137,   415,   431,   137,
+     433,   137,   137,   436,   134,    50,     9,   134,   137,   442,
+     443,   143,   137,   387,   388,   389,   390,   391,   137,   134,
+     394,   395,   134,   134,   134,    29,   134,   134,   134,   134,
+     134,   449,   450,   134,   467,   468,    29,   470,   471,   134,
+     414,     0,   475,   300,   301,   143,   303,    16,   134,   134,
+     483,     4,    54,   310,   143,    14,   134,    16,    17,   134,
+     139,   318,   319,   134,    23,    24,   134,   134,   134,   487,
+     503,   489,   490,    16,   448,   134,   134,   451,   511,    12,
+      12,   138,   137,    42,   134,     4,   137,    16,    48,   463,
+      49,    48,   134,   134,    53,   469,   134,   134,   134,   134,
+     134,   134,   462,   477,   478,   479,   138,   540,   482,   134,
+     138,   138,   545,   134,   138,   134,   134,   134,   138,   141,
+     377,   378,   379,   138,    12,   139,   559,   560,   385,   138,
+     138,   564,   138,     4,   567,   134,   141,    12,    12,   396,
+     397,    67,   134,    12,    12,     5,     6,   128,     8,     9,
+      10,    11,    12,   128,    14,   529,    16,   128,   128,   215,
+      19,    20,   522,   216,    85,   499,   238,     0,   108,    11,
+      82,   102,    50,   522,   431,   482,   433,   384,    -1,   436,
+      40,    14,    -1,    16,    17,   442,   443,    -1,    -1,    -1,
+      23,    24,    -1,    -1,     5,     6,    -1,     8,     9,    10,
+      11,    12,    -1,    14,    -1,    16,    -1,    -1,    -1,    42,
+     467,   468,    -1,   470,   471,    -1,    49,    -1,   475,    30,
+      53,    -1,    -1,    -1,    -1,    -1,   483,    -1,    -1,    40,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,    -1,    -1,   503,     5,     6,    -1,
+      -1,    -1,    -1,    -1,   511,    -1,    14,    -1,    16,    -1,
+      18,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    31,    32,    -1,   136,    -1,    -1,   139,
+      -1,    -1,   142,   540,   144,   145,    -1,    -1,   545,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   559,   560,    -1,    -1,    -1,   564,    -1,    -1,
+     567,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,   136,    -1,    -1,   139,    -1,
+      -1,   142,    -1,   144,    -1,    -1,    -1,    -1,     5,     6,
+      -1,     8,     9,    10,    11,    12,    -1,    14,    -1,    16,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,    30,   122,   123,   124,   125,    -1,   127,
+     128,   129,    -1,    40,    -1,    -1,    -1,   135,    -1,   137,
+      -1,   139,    -1,    -1,   142,    -1,   144,    -1,   146,     3,
+       4,     5,     6,     7,    -1,    -1,    -1,    -1,    -1,    -1,
+      14,    -1,    16,    -1,    18,    19,    20,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    31,    32,     5,
+       6,    -1,     8,     9,    10,    11,    12,    -1,    14,    -1,
+      16,    -1,    -1,    -1,    -1,    -1,     5,     6,    52,     8,
+       9,    10,    11,    12,    30,    14,    -1,    16,    -1,    -1,
+      -1,    -1,    -1,    -1,    40,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,   136,
+      -1,    40,   139,    -1,    -1,   142,    -1,   144,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,    -1,   122,   123,
+     124,   125,    -1,   127,   128,   129,     3,     4,     5,     6,
+       7,   135,    -1,   137,    -1,    -1,    -1,    14,   142,    16,
+      -1,    18,    19,    20,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    31,    32,    -1,    -1,    -1,    -1,
+     136,    -1,    -1,   139,    -1,    -1,   142,    -1,   144,    -1,
+      -1,    -1,    -1,    -1,    -1,    52,    -1,   136,    -1,    -1,
+     139,    -1,    -1,   142,    -1,   144,    -1,    -1,    -1,    -1,
+      -1,    -1,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    -1,     5,
+       6,    -1,     8,     9,    10,    11,    12,    -1,    14,    -1,
+      16,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+     117,   118,   119,   120,    40,   122,   123,   124,   125,    -1,
+     127,   128,   129,     3,     4,    -1,    -1,     7,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   142,    -1,    -1,    18,    19,
+      20,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    31,    32,     5,     6,    -1,     8,     9,    10,    11,
+      12,    -1,    14,    -1,    16,    -1,    -1,    -1,    -1,    -1,
+       5,     6,    52,     8,     9,    10,    11,    12,    30,    14,
+      -1,    16,    -1,    -1,    -1,    -1,    -1,    -1,    40,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,    40,    -1,    -1,    -1,    -1,
+     136,    -1,    -1,   139,    -1,    -1,   142,    -1,   144,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,    -1,   122,   123,   124,   125,    -1,   127,   128,   129,
+       5,     6,    -1,     8,     9,    10,    11,    12,    -1,    14,
+      -1,    16,   142,     5,     6,    -1,     8,     9,    10,    11,
+      12,    -1,    14,    -1,    16,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   136,    40,    -1,   139,    -1,    -1,
+     142,    -1,   144,    -1,    -1,    -1,    -1,    -1,    40,    -1,
+      -1,   136,    -1,    -1,   139,    -1,    -1,   142,    -1,   144,
+       5,     6,    -1,     8,     9,    10,    11,    12,    -1,    14,
+      -1,    16,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    40,    -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,    28,    -1,    -1,    -1,
+      -1,   136,    -1,    -1,   139,    -1,    -1,   142,    -1,   144,
+      -1,    -1,    -1,    -1,   136,    -1,    -1,   139,    50,    51,
+     142,    -1,   144,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   136,    -1,    -1,   139,    -1,    -1,   142,    -1,   144,
+      -1,   103,   104,   105,    -1,    -1,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const unsigned char yystos[] =
+{
+       0,    14,    16,    17,    23,    24,    42,    49,    53,   157,
+     185,   186,   187,   198,   189,   188,    43,    44,    45,    62,
+     195,   133,    52,    13,    33,    34,    35,    36,    37,    38,
+      39,    41,   132,   158,   159,   160,     0,   187,   133,    37,
+      39,   161,   207,    33,    34,    35,    38,   162,   204,   206,
+     213,   133,   133,   133,   133,   139,   196,    16,   193,     5,
+       6,     8,     9,    10,    11,    12,    40,   136,   139,   142,
+     144,   148,   174,   175,   198,   210,   160,   160,    25,    26,
+     184,   160,   160,    15,   214,   215,    22,   145,   205,   214,
+      16,    46,    47,   194,     4,    16,    16,   197,   137,     4,
+       4,     4,   144,     8,   145,   175,   180,   135,   137,   184,
+     184,     9,    10,    11,   155,   156,   175,   181,    55,    56,
+      57,    58,    59,    60,    61,   163,   202,   202,   157,   218,
+     134,   141,    30,   175,   176,   178,   179,   140,   140,   145,
+     180,   134,   145,   179,   181,   175,    19,    20,     3,     4,
+       7,    18,    31,    32,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   122,   123,   124,   125,   127,   128,   129,   139,   142,
+     144,   146,   149,   150,   151,   152,   182,   210,   190,     4,
+       8,   175,   177,    21,   144,   203,    28,    50,    51,    63,
+      64,    65,    66,    67,    68,    81,    82,   103,   104,   105,
+     108,   121,   122,   126,   127,   128,   129,   149,   150,   151,
+     152,   216,   222,   223,   224,   225,    16,   165,   134,   138,
+     175,   175,   143,   145,   175,   138,   191,   192,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,   153,    19,
+      20,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   154,   137,   137,   137,   137,
+     137,   141,   181,   183,   144,   183,   145,   183,    16,   137,
+     137,   137,   137,   134,   172,   198,    50,     8,   175,   212,
+       9,    12,     9,   155,   163,   153,   154,   175,   175,   212,
+     175,   175,   219,   212,   212,   212,   212,   212,   175,   175,
+     212,   212,   163,   106,   107,   110,   111,   164,    30,   176,
+     167,   141,   143,   143,   167,   172,   172,   137,   137,   181,
+     181,   181,   181,   181,   134,   141,   145,   175,   183,   143,
+     145,   181,   181,   181,   181,    27,    48,   170,   173,   137,
+       3,     4,     7,    18,    19,    20,    31,    32,    52,   142,
+     182,   209,   210,   211,   211,   211,   211,   177,   175,   175,
+     134,   169,   134,   169,   211,   139,   134,   134,   134,   134,
+     134,   134,   211,   211,    29,   134,   177,   175,   212,   130,
+     164,   166,   181,   181,   221,   134,   134,   134,   134,   181,
+     143,   145,   134,   134,    29,   134,    16,     4,   172,    30,
+     175,   200,   201,    54,   208,   183,   134,   134,   211,   211,
+     211,     9,    48,     9,   221,   211,   139,   212,   175,   212,
+     212,   212,   134,   134,   175,   212,   211,   211,   134,   134,
+     134,   134,   138,   181,   181,   181,   181,   143,   181,   181,
+     175,   181,   165,   134,   138,    16,   143,    12,    12,   137,
+     134,   134,   211,     4,   211,   134,   211,   134,   134,   134,
+     211,   211,   137,   175,   181,   181,   212,   134,   138,   134,
+     134,   138,   138,   138,   138,   198,   199,    30,   175,   167,
+     134,   211,   211,   175,   220,   211,   211,   134,   169,   169,
+     211,   134,   212,   212,   212,   220,   211,   138,   138,   181,
+     181,   181,   165,   170,   171,    16,   134,   139,   211,   134,
+     138,   141,   211,   138,   138,   138,   138,   199,    48,   168,
+      12,   141,   155,   217,   165,   175,   167,   141,   167,     4,
+     211,   209,   141,   155,   211,    29,   134,   209,   165,    12,
+      12,   134,   211,   211,    12,    67,   211,    12,   211
+};
 
 #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);				\
+    {								\
+      yychar = (Token);						\
+      yylval = (Value);						\
+      yytoken = YYTRANSLATE (yychar);				\
       YYPOPSTACK;						\
       goto yybackup;						\
     }								\
   else								\
-    { yyerror ("syntax error: cannot back up"); YYERROR; }	\
+    {								\
+      yyerror (YY_("syntax error: cannot back up")); \
+      YYERROR;							\
+    }								\
 while (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 (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 (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 (0)
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)		\
+do {								\
+  if (yydebug)							\
+    {								\
+      YYFPRINTF (stderr, "%s ", Title);				\
+      yysymprint (stderr,					\
+                  Type, Value);	\
+      YYFPRINTF (stderr, "\n");					\
+    }								\
+} while (0)
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included).                                                   |
+`------------------------------------------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+yy_stack_print (short int *bottom, short int *top)
 #else
-#define YYLEX		yylex(&yylval)
+static void
+yy_stack_print (bottom, top)
+    short int *bottom;
+    short int *top;
 #endif
-#endif /* not YYLSP_NEEDED */
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (/* Nothing. */; bottom <= top; ++bottom)
+    YYFPRINTF (stderr, " %d", *bottom);
+  YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top)				\
+do {								\
+  if (yydebug)							\
+    yy_stack_print ((Bottom), (Top));				\
+} while (0)
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+yy_reduce_print (int yyrule)
+#else
+static void
+yy_reduce_print (yyrule)
+    int yyrule;
 #endif
+{
+  int yyi;
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ",
+             yyrule - 1, yylno);
+  /* Print the symbols being reduced, and their result.  */
+  for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
+    YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
+  YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]);
+}
 
-/* If nonreentrant, generate the variables here */
+# define YY_REDUCE_PRINT(Rule)		\
+do {					\
+  if (yydebug)				\
+    yy_reduce_print (Rule);		\
+} while (0)
 
-#ifndef YYPURE
+/* 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 */
 
-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				*/
-#endif
-
-int yynerrs;			/*  number of parse errors so far       */
-#endif  /* not YYPURE */
-
-#if YYDEBUG != 0
-int yydebug;			/*  nonzero means print parse trace	*/
-/* Since this is uninitialized, it does not stop multiple parsers
-   from coexisting.  */
-#endif
-
-/*  YYINITDEPTH indicates the initial size of the parser's stacks	*/
-
+/* 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;
+# ifndef yystrlen
+#  if defined (__GLIBC__) && defined (_STRING_H)
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+static YYSIZE_T
+#   if defined (__STDC__) || defined (__cplusplus)
+yystrlen (const char *yystr)
+#   else
+yystrlen (yystr)
+     const char *yystr;
+#   endif
 {
-  register char *f = from;
-  register char *t = to;
-  register int i = count;
+  const char *yys = yystr;
 
-  while (i-- > 0)
-    *t++ = *f++;
+  while (*yys++ != '\0')
+    continue;
+
+  return yys - yystr - 1;
 }
+#  endif
+# endif
 
-#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)
+# ifndef yystpcpy
+#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+static char *
+#   if defined (__STDC__) || defined (__cplusplus)
+yystpcpy (char *yydest, const char *yysrc)
+#   else
+yystpcpy (yydest, yysrc)
+     char *yydest;
+     const char *yysrc;
+#   endif
 {
-  register char *t = to;
-  register char *f = from;
-  register int i = count;
+  char *yyd = yydest;
+  const char *yys = yysrc;
 
-  while (i-- > 0)
-    *t++ = *f++;
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
 }
+#  endif
+# endif
 
-#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 == '"')
+    {
+      size_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
+
+#endif /* YYERROR_VERBOSE */
+
 
-#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.  */
+#if YYDEBUG
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
 
-#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 *);
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
 #else
+static void
+yysymprint (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE *yyvaluep;
+#endif
+{
+  /* Pacify ``unused variable'' warnings.  */
+  (void) yyvaluep;
+
+  if (yytype < YYNTOKENS)
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# endif
+  switch (yytype)
+    {
+      default:
+        break;
+    }
+  YYFPRINTF (yyoutput, ")");
+}
+
+#endif /* ! YYDEBUG */
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+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
+{
+  /* Pacify ``unused variable'' warnings.  */
+  (void) 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
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+
+/* 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 (__cplusplus)
+int yyparse (void *YYPARSE_PARAM)
+# else
+int yyparse (YYPARSE_PARAM)
+  void *YYPARSE_PARAM;
+# endif
+#else /* ! YYPARSE_PARAM */
+#if defined (__STDC__) || defined (__cplusplus)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+  
+  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;
+
+  /* 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.  */
+  short int yyssa[YYINITDEPTH];
+  short int *yyss = yyssa;
+  short int *yyssp;
+
+  /* The semantic value stack.  */
+  YYSTYPE yyvsa[YYINITDEPTH];
+  YYSTYPE *yyvs = yyvsa;
+  YYSTYPE *yyvsp;
+
+
+
 #define YYPOPSTACK   (yyvsp--, yyssp--)
-#endif
 
-  int yystacksize = YYINITDEPTH;
-  int yyfree_stacks = 0;
+  YYSIZE_T yystacksize = YYINITDEPTH;
 
-#ifdef YYPURE
-  int yychar;
-  YYSTYPE yylval;
-  int yynerrs;
-#ifdef YYLSP_NEEDED
-  YYLTYPE yylloc;
-#endif
-#endif
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
 
-  YYSTYPE yyval;		/*  the variable used to return		*/
-				/*  semantic values from the action	*/
-				/*  routines				*/
 
+  /* When reducing, the number of symbols on the RHS of the reduced
+     rule.  */
   int yylen;
 
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Starting parse\n");
-#endif
+  YYDPRINTF ((stderr, "Starting parse\n"));
 
   yystate = 0;
   yyerrstatus = 0;
@@ -2118,631 +2779,659 @@
      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;
+	short int *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
+
+      {
+	short int *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:
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
 
 /* Do appropriate processing given the current state.  */
-/* Read a lookahead token if we need one and don't already have one.  */
+/* Read a look-ahead token if we need one and don't already have one.  */
 /* yyresume: */
 
-  /* First try to decide what to do without reference to lookahead token.  */
+  /* 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.  */
-
-#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.  */
   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--;
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
 
   yystate = yyn;
   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;
-
-      fprintf (stderr, "Reducing via rule %d (line %d), ",
-	       yyn, yyrline[yyn]);
-
-      /* 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
-
-
-  switch (yyn) {
-
-case 2:
-#line 1032 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  if (yyvsp[0].UIntVal > (uint32_t)INT32_MAX)     // Outside of my range!
+        case 3:
+#line 1032 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+  if ((yyvsp[0].UIntVal) > (uint32_t)INT32_MAX)     // Outside of my range!
     GEN_ERROR("Value too large for type!");
-  yyval.SIntVal = (int32_t)yyvsp[0].UIntVal;
+  (yyval.SIntVal) = (int32_t)(yyvsp[0].UIntVal);
   CHECK_FOR_ERROR
-;
-    break;}
-case 30:
-#line 1048 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_EQ; ;
-    break;}
-case 31:
-#line 1048 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_NE; ;
-    break;}
-case 32:
-#line 1049 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_SLT; ;
-    break;}
-case 33:
-#line 1049 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_SGT; ;
-    break;}
-case 34:
-#line 1050 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_SLE; ;
-    break;}
-case 35:
-#line 1050 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_SGE; ;
-    break;}
-case 36:
-#line 1051 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_ULT; ;
-    break;}
-case 37:
-#line 1051 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_UGT; ;
-    break;}
-case 38:
-#line 1052 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_ULE; ;
-    break;}
-case 39:
-#line 1052 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_UGE; ;
-    break;}
-case 40:
-#line 1056 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_OEQ; ;
-    break;}
-case 41:
-#line 1056 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_ONE; ;
-    break;}
-case 42:
-#line 1057 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_OLT; ;
-    break;}
-case 43:
-#line 1057 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_OGT; ;
-    break;}
-case 44:
-#line 1058 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_OLE; ;
-    break;}
-case 45:
-#line 1058 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_OGE; ;
-    break;}
-case 46:
-#line 1059 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_ORD; ;
-    break;}
-case 47:
-#line 1059 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_UNO; ;
-    break;}
-case 48:
-#line 1060 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_UEQ; ;
-    break;}
-case 49:
-#line 1060 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_UNE; ;
-    break;}
-case 50:
-#line 1061 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_ULT; ;
-    break;}
-case 51:
-#line 1061 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_UGT; ;
-    break;}
-case 52:
-#line 1062 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_ULE; ;
-    break;}
-case 53:
-#line 1062 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_UGE; ;
-    break;}
-case 54:
-#line 1063 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_TRUE; ;
-    break;}
-case 55:
-#line 1064 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_FALSE; ;
-    break;}
-case 59:
-#line 1073 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.StrVal = yyvsp[-1].StrVal;
+;}
+    break;
+
+  case 31:
+#line 1048 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;}
+    break;
+
+  case 32:
+#line 1048 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;}
+    break;
+
+  case 33:
+#line 1049 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_SLT; ;}
+    break;
+
+  case 34:
+#line 1049 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;}
+    break;
+
+  case 35:
+#line 1050 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;}
+    break;
+
+  case 36:
+#line 1050 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;}
+    break;
+
+  case 37:
+#line 1051 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;}
+    break;
+
+  case 38:
+#line 1051 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;}
+    break;
+
+  case 39:
+#line 1052 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;}
+    break;
+
+  case 40:
+#line 1052 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;}
+    break;
+
+  case 41:
+#line 1056 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;}
+    break;
+
+  case 42:
+#line 1056 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;}
+    break;
+
+  case 43:
+#line 1057 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;}
+    break;
+
+  case 44:
+#line 1057 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;}
+    break;
+
+  case 45:
+#line 1058 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;}
+    break;
+
+  case 46:
+#line 1058 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;}
+    break;
+
+  case 47:
+#line 1059 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;}
+    break;
+
+  case 48:
+#line 1059 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;}
+    break;
+
+  case 49:
+#line 1060 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;}
+    break;
+
+  case 50:
+#line 1060 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;}
+    break;
+
+  case 51:
+#line 1061 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;}
+    break;
+
+  case 52:
+#line 1061 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;}
+    break;
+
+  case 53:
+#line 1062 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;}
+    break;
+
+  case 54:
+#line 1062 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;}
+    break;
+
+  case 55:
+#line 1063 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;}
+    break;
+
+  case 56:
+#line 1064 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;}
+    break;
+
+  case 60:
+#line 1073 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.StrVal) = (yyvsp[-1].StrVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 60:
-#line 1077 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.StrVal = 0;
+  ;}
+    break;
+
+  case 61:
+#line 1077 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.StrVal) = 0;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 61:
-#line 1083 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::InternalLinkage; ;
-    break;}
-case 62:
-#line 1084 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::WeakLinkage; ;
-    break;}
-case 63:
-#line 1085 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
-    break;}
-case 64:
-#line 1086 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::AppendingLinkage; ;
-    break;}
-case 65:
-#line 1087 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::DLLExportLinkage; ;
-    break;}
-case 66:
-#line 1091 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::DLLImportLinkage; ;
-    break;}
-case 67:
-#line 1092 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;
-    break;}
-case 68:
-#line 1093 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
-    break;}
-case 69:
-#line 1097 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Visibility = GlobalValue::DefaultVisibility; ;
-    break;}
-case 70:
-#line 1098 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Visibility = GlobalValue::HiddenVisibility;  ;
-    break;}
-case 71:
-#line 1102 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
-    break;}
-case 72:
-#line 1103 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::DLLImportLinkage; ;
-    break;}
-case 73:
-#line 1104 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;
-    break;}
-case 74:
-#line 1108 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
-    break;}
-case 75:
-#line 1109 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::InternalLinkage; ;
-    break;}
-case 76:
-#line 1110 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
-    break;}
-case 77:
-#line 1111 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::WeakLinkage; ;
-    break;}
-case 78:
-#line 1112 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::DLLExportLinkage; ;
-    break;}
-case 79:
-#line 1115 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = CallingConv::C; ;
-    break;}
-case 80:
-#line 1116 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = CallingConv::C; ;
-    break;}
-case 81:
-#line 1117 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = CallingConv::CSRet; ;
-    break;}
-case 82:
-#line 1118 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = CallingConv::Fast; ;
-    break;}
-case 83:
-#line 1119 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = CallingConv::Cold; ;
-    break;}
-case 84:
-#line 1120 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = CallingConv::X86_StdCall; ;
-    break;}
-case 85:
-#line 1121 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = CallingConv::X86_FastCall; ;
-    break;}
-case 86:
-#line 1122 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-                   if ((unsigned)yyvsp[0].UInt64Val != yyvsp[0].UInt64Val)
+  ;}
+    break;
+
+  case 62:
+#line 1083 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
+    break;
+
+  case 63:
+#line 1084 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
+    break;
+
+  case 64:
+#line 1085 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
+    break;
+
+  case 65:
+#line 1086 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
+    break;
+
+  case 66:
+#line 1087 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
+    break;
+
+  case 67:
+#line 1091 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
+    break;
+
+  case 68:
+#line 1092 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
+    break;
+
+  case 69:
+#line 1093 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
+    break;
+
+  case 70:
+#line 1097 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Visibility) = GlobalValue::DefaultVisibility; ;}
+    break;
+
+  case 71:
+#line 1098 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Visibility) = GlobalValue::HiddenVisibility;  ;}
+    break;
+
+  case 72:
+#line 1102 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
+    break;
+
+  case 73:
+#line 1103 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
+    break;
+
+  case 74:
+#line 1104 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
+    break;
+
+  case 75:
+#line 1108 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
+    break;
+
+  case 76:
+#line 1109 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
+    break;
+
+  case 77:
+#line 1110 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
+    break;
+
+  case 78:
+#line 1111 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
+    break;
+
+  case 79:
+#line 1112 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
+    break;
+
+  case 80:
+#line 1115 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = CallingConv::C; ;}
+    break;
+
+  case 81:
+#line 1116 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = CallingConv::C; ;}
+    break;
+
+  case 82:
+#line 1117 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = CallingConv::CSRet; ;}
+    break;
+
+  case 83:
+#line 1118 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = CallingConv::Fast; ;}
+    break;
+
+  case 84:
+#line 1119 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = CallingConv::Cold; ;}
+    break;
+
+  case 85:
+#line 1120 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = CallingConv::X86_StdCall; ;}
+    break;
+
+  case 86:
+#line 1121 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = CallingConv::X86_FastCall; ;}
+    break;
+
+  case 87:
+#line 1122 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+                   if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val))
                      GEN_ERROR("Calling conv too large!");
-                   yyval.UIntVal = yyvsp[0].UInt64Val;
+                   (yyval.UIntVal) = (yyvsp[0].UInt64Val);
                   CHECK_FOR_ERROR
-                 ;
-    break;}
-case 87:
-#line 1129 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = FunctionType::ZExtAttribute; ;
-    break;}
-case 88:
-#line 1130 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = FunctionType::SExtAttribute; ;
-    break;}
-case 89:
-#line 1133 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = FunctionType::NoAttributeSet; ;
-    break;}
-case 90:
-#line 1134 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-                yyval.ParamAttrs = FunctionType::ParameterAttributes(yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs);
-              ;
-    break;}
-case 91:
-#line 1139 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = FunctionType::NoReturnAttribute; ;
-    break;}
-case 93:
-#line 1143 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = FunctionType::NoAttributeSet; ;
-    break;}
-case 94:
-#line 1144 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-                yyval.ParamAttrs = FunctionType::ParameterAttributes(yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs);
-              ;
-    break;}
-case 95:
-#line 1151 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = 0; ;
-    break;}
-case 96:
-#line 1152 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  yyval.UIntVal = yyvsp[0].UInt64Val;
-  if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal))
+                 ;}
+    break;
+
+  case 88:
+#line 1129 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = FunctionType::ZExtAttribute; ;}
+    break;
+
+  case 89:
+#line 1130 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = FunctionType::SExtAttribute; ;}
+    break;
+
+  case 90:
+#line 1133 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = FunctionType::NoAttributeSet; ;}
+    break;
+
+  case 91:
+#line 1134 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+                (yyval.ParamAttrs) = FunctionType::ParameterAttributes((yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs));
+              ;}
+    break;
+
+  case 92:
+#line 1139 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = FunctionType::NoReturnAttribute; ;}
+    break;
+
+  case 94:
+#line 1143 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = FunctionType::NoAttributeSet; ;}
+    break;
+
+  case 95:
+#line 1144 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+                (yyval.ParamAttrs) = FunctionType::ParameterAttributes((yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs));
+              ;}
+    break;
+
+  case 96:
+#line 1151 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = 0; ;}
+    break;
+
+  case 97:
+#line 1152 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+  (yyval.UIntVal) = (yyvsp[0].UInt64Val);
+  if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
     GEN_ERROR("Alignment must be a power of two!");
   CHECK_FOR_ERROR
-;
-    break;}
-case 97:
-#line 1158 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = 0; ;
-    break;}
-case 98:
-#line 1159 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  yyval.UIntVal = yyvsp[0].UInt64Val;
-  if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal))
+;}
+    break;
+
+  case 98:
+#line 1158 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = 0; ;}
+    break;
+
+  case 99:
+#line 1159 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+  (yyval.UIntVal) = (yyvsp[0].UInt64Val);
+  if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
     GEN_ERROR("Alignment must be a power of two!");
   CHECK_FOR_ERROR
-;
-    break;}
-case 99:
-#line 1167 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  for (unsigned i = 0, e = strlen(yyvsp[0].StrVal); i != e; ++i)
-    if (yyvsp[0].StrVal[i] == '"' || yyvsp[0].StrVal[i] == '\\')
+;}
+    break;
+
+  case 100:
+#line 1167 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+  for (unsigned i = 0, e = strlen((yyvsp[0].StrVal)); i != e; ++i)
+    if ((yyvsp[0].StrVal)[i] == '"' || (yyvsp[0].StrVal)[i] == '\\')
       GEN_ERROR("Invalid character in section name!");
-  yyval.StrVal = yyvsp[0].StrVal;
+  (yyval.StrVal) = (yyvsp[0].StrVal);
   CHECK_FOR_ERROR
-;
-    break;}
-case 100:
-#line 1175 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.StrVal = 0; ;
-    break;}
-case 101:
-#line 1176 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.StrVal = yyvsp[0].StrVal; ;
-    break;}
-case 102:
-#line 1181 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{;
-    break;}
-case 103:
-#line 1182 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{;
-    break;}
-case 104:
-#line 1183 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    CurGV->setSection(yyvsp[0].StrVal);
-    free(yyvsp[0].StrVal);
+;}
+    break;
+
+  case 101:
+#line 1175 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.StrVal) = 0; ;}
+    break;
+
+  case 102:
+#line 1176 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.StrVal) = (yyvsp[0].StrVal); ;}
+    break;
+
+  case 103:
+#line 1181 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {;}
+    break;
+
+  case 104:
+#line 1182 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {;}
+    break;
+
+  case 105:
+#line 1183 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    CurGV->setSection((yyvsp[0].StrVal));
+    free((yyvsp[0].StrVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 105:
-#line 1188 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[0].UInt64Val != 0 && !isPowerOf2_32(yyvsp[0].UInt64Val))
+  ;}
+    break;
+
+  case 106:
+#line 1188 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val)))
       GEN_ERROR("Alignment must be a power of two!");
-    CurGV->setAlignment(yyvsp[0].UInt64Val);
+    CurGV->setAlignment((yyvsp[0].UInt64Val));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 110:
-#line 1204 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeVal = new PATypeHolder(OpaqueType::get());
+  ;}
+    break;
+
+  case 111:
+#line 1204 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 111:
-#line 1208 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeVal = new PATypeHolder(yyvsp[0].PrimType);
+  ;}
+    break;
+
+  case 112:
+#line 1208 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 112:
-#line 1212 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                             // Pointer type?
-    if (*yyvsp[-1].TypeVal == Type::LabelTy)
+  ;}
+    break;
+
+  case 113:
+#line 1212 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {                             // Pointer type?
+    if (*(yyvsp[-1].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].TypeVal))));
+    delete (yyvsp[-1].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 113:
-#line 1219 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{            // Named types are also simple types...
-    const Type* tmp = getTypeVal(yyvsp[0].ValIDVal);
+  ;}
+    break;
+
+  case 114:
+#line 1219 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {            // Named types are also simple types...
+    const Type* tmp = getTypeVal((yyvsp[0].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.TypeVal = new PATypeHolder(tmp);
-  ;
-    break;}
-case 114:
-#line 1224 "/Users/sabre/cvs/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 115:
+#line 1224 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {                   // Type UpReference
+    if ((yyvsp[0].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[0].UInt64Val), OT));  // Add to vector...
+    (yyval.TypeVal) = new PATypeHolder(OT);
     UR_OUT("New Upreference!\n");
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 115:
-#line 1232 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 116:
+#line 1232 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
     std::vector<const Type*> Params;
     std::vector<FunctionType::ParameterAttributes> Attrs;
-    Attrs.push_back(yyvsp[0].ParamAttrs);
-    for (TypeWithAttrsList::iterator I=yyvsp[-2].TypeWithAttrsList->begin(), E=yyvsp[-2].TypeWithAttrsList->end(); I != E; ++I) {
+    Attrs.push_back((yyvsp[0].ParamAttrs));
+    for (TypeWithAttrsList::iterator I=(yyvsp[-2].TypeWithAttrsList)->begin(), E=(yyvsp[-2].TypeWithAttrsList)->end(); I != E; ++I) {
       Params.push_back(I->Ty->get());
       if (I->Ty->get() != Type::VoidTy)
         Attrs.push_back(I->Attrs);
@@ -2750,20 +3439,21 @@
     bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
     if (isVarArg) Params.pop_back();
 
-    FunctionType *FT = FunctionType::get(*yyvsp[-4].TypeVal, Params, isVarArg, Attrs);
-    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[-4].TypeVal), Params, isVarArg, Attrs);
+    delete (yyvsp[-2].TypeWithAttrsList);   // Delete the argument list
+    delete (yyvsp[-4].TypeVal);   // Delete the return type handle
+    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT)); 
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 116:
-#line 1250 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 117:
+#line 1250 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
     std::vector<const Type*> Params;
     std::vector<FunctionType::ParameterAttributes> Attrs;
-    Attrs.push_back(yyvsp[0].ParamAttrs);
-    for (TypeWithAttrsList::iterator I=yyvsp[-2].TypeWithAttrsList->begin(), E=yyvsp[-2].TypeWithAttrsList->end(); I != E; ++I) {
+    Attrs.push_back((yyvsp[0].ParamAttrs));
+    for (TypeWithAttrsList::iterator I=(yyvsp[-2].TypeWithAttrsList)->begin(), E=(yyvsp[-2].TypeWithAttrsList)->end(); I != E; ++I) {
       Params.push_back(I->Ty->get());
       if (I->Ty->get() != Type::VoidTy)
         Attrs.push_back(I->Attrs);
@@ -2771,282 +3461,303 @@
     bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
     if (isVarArg) Params.pop_back();
 
-    FunctionType *FT = FunctionType::get(yyvsp[-4].PrimType, Params, isVarArg, Attrs);
-    delete yyvsp[-2].TypeWithAttrsList;      // Delete the argument list
-    yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT)); 
+    FunctionType *FT = FunctionType::get((yyvsp[-4].PrimType), Params, isVarArg, Attrs);
+    delete (yyvsp[-2].TypeWithAttrsList);      // Delete the argument list
+    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT)); 
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 117:
-#line 1268 "/Users/sabre/cvs/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 118:
+#line 1268 "/proj/llvm/llvm-4/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);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 118:
-#line 1273 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{          // Packed array type?
-     const llvm::Type* ElemTy = yyvsp[-1].TypeVal->get();
-     if ((unsigned)yyvsp[-3].UInt64Val != yyvsp[-3].UInt64Val)
+  ;}
+    break;
+
+  case 119:
+#line 1273 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {          // Packed array type?
+     const llvm::Type* ElemTy = (yyvsp[-1].TypeVal)->get();
+     if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val))
         GEN_ERROR("Unsigned result not equal to signed result");
      if (!ElemTy->isFloatingPoint() && !ElemTy->isInteger())
         GEN_ERROR("Element type of a PackedType must be primitive");
-     if (!isPowerOf2_32(yyvsp[-3].UInt64Val))
+     if (!isPowerOf2_32((yyvsp[-3].UInt64Val)))
        GEN_ERROR("Vector length should be a power of 2!");
-     yyval.TypeVal = new PATypeHolder(HandleUpRefs(PackedType::get(*yyvsp[-1].TypeVal, (unsigned)yyvsp[-3].UInt64Val)));
-     delete yyvsp[-1].TypeVal;
+     (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PackedType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
+     delete (yyvsp[-1].TypeVal);
      CHECK_FOR_ERROR
-  ;
-    break;}
-case 119:
-#line 1285 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                        // Structure type?
+  ;}
+    break;
+
+  case 120:
+#line 1285 "/proj/llvm/llvm-4/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[-1].TypeList)->begin(),
+           E = (yyvsp[-1].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[-1].TypeList);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 120:
-#line 1295 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                                  // Empty structure type?
-    yyval.TypeVal = new PATypeHolder(StructType::get(std::vector<const Type*>()));
+  ;}
+    break;
+
+  case 121:
+#line 1295 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {                                  // Empty structure type?
+    (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>()));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 121:
-#line 1299 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 122:
+#line 1299 "/proj/llvm/llvm-4/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[-2].TypeList)->begin(),
+           E = (yyvsp[-2].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[-2].TypeList);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 122:
-#line 1309 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                         // Empty structure type?
-    yyval.TypeVal = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
+  ;}
+    break;
+
+  case 123:
+#line 1309 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {                         // Empty structure type?
+    (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 123:
-#line 1316 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ 
-    yyval.TypeWithAttrs.Ty = yyvsp[-1].TypeVal; 
-    yyval.TypeWithAttrs.Attrs = yyvsp[0].ParamAttrs; 
-  ;
-    break;}
-case 124:
-#line 1323 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 124:
+#line 1316 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { 
+    (yyval.TypeWithAttrs).Ty = (yyvsp[-1].TypeVal); 
+    (yyval.TypeWithAttrs).Attrs = (yyvsp[0].ParamAttrs); 
+  ;}
+    break;
+
+  case 125:
+#line 1323 "/proj/llvm/llvm-4/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[0].TypeVal))->getDescription());
+    if (!(*(yyvsp[0].TypeVal))->isFirstClassType())
       GEN_ERROR("LLVM functions cannot return aggregate types!");
-    yyval.TypeVal = yyvsp[0].TypeVal;
-  ;
-    break;}
-case 125:
-#line 1330 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeVal = new PATypeHolder(Type::VoidTy);
-  ;
-    break;}
-case 126:
-#line 1335 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeWithAttrsList = new TypeWithAttrsList();
-    yyval.TypeWithAttrsList->push_back(yyvsp[0].TypeWithAttrs);
+    (yyval.TypeVal) = (yyvsp[0].TypeVal);
+  ;}
+    break;
+
+  case 126:
+#line 1330 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeVal) = new PATypeHolder(Type::VoidTy);
+  ;}
+    break;
+
+  case 127:
+#line 1335 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
+    (yyval.TypeWithAttrsList)->push_back((yyvsp[0].TypeWithAttrs));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 127:
-#line 1340 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    (yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList)->push_back(yyvsp[0].TypeWithAttrs);
+  ;}
+    break;
+
+  case 128:
+#line 1340 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    ((yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList))->push_back((yyvsp[0].TypeWithAttrs));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 129:
-#line 1348 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList;
+  ;}
+    break;
+
+  case 130:
+#line 1348 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList);
     TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet;
     TWA.Ty = new PATypeHolder(Type::VoidTy);
-    yyval.TypeWithAttrsList->push_back(TWA);
+    (yyval.TypeWithAttrsList)->push_back(TWA);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 130:
-#line 1355 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeWithAttrsList = new TypeWithAttrsList;
+  ;}
+    break;
+
+  case 131:
+#line 1355 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeWithAttrsList) = new TypeWithAttrsList;
     TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet;
     TWA.Ty = new PATypeHolder(Type::VoidTy);
-    yyval.TypeWithAttrsList->push_back(TWA);
+    (yyval.TypeWithAttrsList)->push_back(TWA);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 131:
-#line 1362 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeWithAttrsList = new TypeWithAttrsList();
+  ;}
+    break;
+
+  case 132:
+#line 1362 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 132:
-#line 1370 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeList = new std::list<PATypeHolder>();
-    yyval.TypeList->push_back(*yyvsp[0].TypeVal); delete yyvsp[0].TypeVal;
+  ;}
+    break;
+
+  case 133:
+#line 1370 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeList) = new std::list<PATypeHolder>();
+    (yyval.TypeList)->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 133:
-#line 1375 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    (yyval.TypeList=yyvsp[-2].TypeList)->push_back(*yyvsp[0].TypeVal); delete yyvsp[0].TypeVal;
+  ;}
+    break;
+
+  case 134:
+#line 1375 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 134:
-#line 1386 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ // Nonempty unsized arr
+  ;}
+    break;
+
+  case 135:
+#line 1386 "/proj/llvm/llvm-4/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[-3].TypeVal))->getDescription());
+    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-3].TypeVal)->get());
     if (ATy == 0)
       GEN_ERROR("Cannot make array constant with type: '" + 
-                     (*yyvsp[-3].TypeVal)->getDescription() + "'!");
+                     (*(yyvsp[-3].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[-1].ConstVector)->size())
       GEN_ERROR("Type mismatch: constant sized array initialized with " +
-                     utostr(yyvsp[-1].ConstVector->size()) +  " arguments, but has size of " + 
+                     utostr((yyvsp[-1].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[-1].ConstVector)->size(); i++) {
+      if (ETy != (*(yyvsp[-1].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[-1].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[-1].ConstVector));
+    delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 135:
-#line 1414 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 136:
+#line 1414 "/proj/llvm/llvm-4/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[-2].TypeVal))->getDescription());
+    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
     if (ATy == 0)
       GEN_ERROR("Cannot make array constant with type: '" + 
-                     (*yyvsp[-2].TypeVal)->getDescription() + "'!");
+                     (*(yyvsp[-2].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[-2].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 136:
-#line 1430 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 137:
+#line 1430 "/proj/llvm/llvm-4/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[-2].TypeVal))->getDescription());
+    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
     if (ATy == 0)
       GEN_ERROR("Cannot make array constant with type: '" + 
-                     (*yyvsp[-2].TypeVal)->getDescription() + "'!");
+                     (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
 
     int NumElements = ATy->getNumElements();
     const Type *ETy = ATy->getElementType();
-    char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true);
-    if (NumElements != -1 && NumElements != (EndStr-yyvsp[0].StrVal))
+    char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
+    if (NumElements != -1 && NumElements != (EndStr-(yyvsp[0].StrVal)))
       GEN_ERROR("Can't build string constant of size " + 
-                     itostr((int)(EndStr-yyvsp[0].StrVal)) +
+                     itostr((int)(EndStr-(yyvsp[0].StrVal))) +
                      " when array has size " + itostr(NumElements) + "!");
     std::vector<Constant*> Vals;
     if (ETy == Type::Int8Ty) {
-      for (unsigned char *C = (unsigned char *)yyvsp[0].StrVal; 
+      for (unsigned char *C = (unsigned char *)(yyvsp[0].StrVal); 
         C != (unsigned char*)EndStr; ++C)
       Vals.push_back(ConstantInt::get(ETy, *C));
     } else {
-      free(yyvsp[0].StrVal);
+      free((yyvsp[0].StrVal));
       GEN_ERROR("Cannot build string arrays of non byte sized elements!");
     }
-    free(yyvsp[0].StrVal);
-    yyval.ConstVal = ConstantArray::get(ATy, Vals);
-    delete yyvsp[-2].TypeVal;
+    free((yyvsp[0].StrVal));
+    (yyval.ConstVal) = ConstantArray::get(ATy, Vals);
+    delete (yyvsp[-2].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 137:
-#line 1459 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ // Nonempty unsized arr
+  ;}
+    break;
+
+  case 138:
+#line 1459 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { // Nonempty unsized arr
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
-    const PackedType *PTy = dyn_cast<PackedType>(yyvsp[-3].TypeVal->get());
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
+    const PackedType *PTy = dyn_cast<PackedType>((yyvsp[-3].TypeVal)->get());
     if (PTy == 0)
       GEN_ERROR("Cannot make packed constant with type: '" + 
-                     (*yyvsp[-3].TypeVal)->getDescription() + "'!");
+                     (*(yyvsp[-3].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[-1].ConstVector)->size())
       GEN_ERROR("Type mismatch: constant sized packed initialized with " +
-                     utostr(yyvsp[-1].ConstVector->size()) +  " arguments, but has size of " + 
+                     utostr((yyvsp[-1].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[-1].ConstVector)->size(); i++) {
+      if (ETy != (*(yyvsp[-1].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[-1].ConstVector))[i]->getType()->getDescription() + "'.");
     }
 
-    yyval.ConstVal = ConstantPacked::get(PTy, *yyvsp[-1].ConstVector);
-    delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
+    (yyval.ConstVal) = ConstantPacked::get(PTy, *(yyvsp[-1].ConstVector));
+    delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 138:
-#line 1487 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    const StructType *STy = dyn_cast<StructType>(yyvsp[-3].TypeVal->get());
+  ;}
+    break;
+
+  case 139:
+#line 1487 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal)->get());
     if (STy == 0)
       GEN_ERROR("Cannot make struct constant with type: '" + 
-                     (*yyvsp[-3].TypeVal)->getDescription() + "'!");
+                     (*(yyvsp[-3].TypeVal))->getDescription() + "'!");
 
-    if (yyvsp[-1].ConstVector->size() != STy->getNumContainedTypes())
+    if ((yyvsp[-1].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[-1].ConstVector)->size(); i != e; ++i)
+      if ((*(yyvsp[-1].ConstVector))[i]->getType() != STy->getElementType(i))
         GEN_ERROR("Expected type '" +
                        STy->getElementType(i)->getDescription() +
                        "' for element #" + utostr(i) +
@@ -3056,20 +3767,21 @@
     if (STy->isPacked())
       GEN_ERROR("Unpacked Initializer to packed 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[-1].ConstVector));
+    delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 139:
-#line 1512 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 140:
+#line 1512 "/proj/llvm/llvm-4/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[-2].TypeVal))->getDescription());
+    const StructType *STy = dyn_cast<StructType>((yyvsp[-2].TypeVal)->get());
     if (STy == 0)
       GEN_ERROR("Cannot make struct constant with type: '" + 
-                     (*yyvsp[-2].TypeVal)->getDescription() + "'!");
+                     (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
 
     if (STy->getNumContainedTypes() != 0)
       GEN_ERROR("Illegal number of initializers for structure type!");
@@ -3078,25 +3790,26 @@
     if (STy->isPacked())
       GEN_ERROR("Unpacked Initializer to packed 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[-2].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 140:
-#line 1531 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    const StructType *STy = dyn_cast<StructType>(yyvsp[-5].TypeVal->get());
+  ;}
+    break;
+
+  case 141:
+#line 1531 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    const StructType *STy = dyn_cast<StructType>((yyvsp[-5].TypeVal)->get());
     if (STy == 0)
       GEN_ERROR("Cannot make struct constant with type: '" + 
-                     (*yyvsp[-5].TypeVal)->getDescription() + "'!");
+                     (*(yyvsp[-5].TypeVal))->getDescription() + "'!");
 
-    if (yyvsp[-2].ConstVector->size() != STy->getNumContainedTypes())
+    if ((yyvsp[-2].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[-2].ConstVector)->size(); i != e; ++i)
+      if ((*(yyvsp[-2].ConstVector))[i]->getType() != STy->getElementType(i))
         GEN_ERROR("Expected type '" +
                        STy->getElementType(i)->getDescription() +
                        "' for element #" + utostr(i) +
@@ -3106,20 +3819,21 @@
     if (!STy->isPacked())
       GEN_ERROR("Packed Initializer to unpacked 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[-2].ConstVector));
+    delete (yyvsp[-5].TypeVal); delete (yyvsp[-2].ConstVector);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 141:
-#line 1556 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 142:
+#line 1556 "/proj/llvm/llvm-4/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[-4].TypeVal))->getDescription());
+    const StructType *STy = dyn_cast<StructType>((yyvsp[-4].TypeVal)->get());
     if (STy == 0)
       GEN_ERROR("Cannot make struct constant with type: '" + 
-                     (*yyvsp[-4].TypeVal)->getDescription() + "'!");
+                     (*(yyvsp[-4].TypeVal))->getDescription() + "'!");
 
     if (STy->getNumContainedTypes() != 0)
       GEN_ERROR("Illegal number of initializers for structure type!");
@@ -3128,42 +3842,45 @@
     if (!STy->isPacked())
       GEN_ERROR("Packed Initializer to unpacked 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[-4].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 142:
-#line 1575 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 143:
+#line 1575 "/proj/llvm/llvm-4/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].TypeVal))->getDescription());
+    const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
     if (PTy == 0)
       GEN_ERROR("Cannot make null pointer constant with type: '" + 
-                     (*yyvsp[-1].TypeVal)->getDescription() + "'!");
+                     (*(yyvsp[-1].TypeVal))->getDescription() + "'!");
 
-    yyval.ConstVal = ConstantPointerNull::get(PTy);
-    delete yyvsp[-1].TypeVal;
+    (yyval.ConstVal) = ConstantPointerNull::get(PTy);
+    delete (yyvsp[-1].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 143:
-#line 1587 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 144:
+#line 1587 "/proj/llvm/llvm-4/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].TypeVal))->getDescription());
+    (yyval.ConstVal) = UndefValue::get((yyvsp[-1].TypeVal)->get());
+    delete (yyvsp[-1].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 144:
-#line 1594 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 145:
+#line 1594 "/proj/llvm/llvm-4/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].TypeVal))->getDescription());
+    const PointerType *Ty = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
     if (Ty == 0)
       GEN_ERROR("Global const reference must be a pointer type!");
 
@@ -3177,7 +3894,7 @@
     Function *SavedCurFn = CurFun.CurrentFunction;
     CurFun.CurrentFunction = 0;
 
-    Value *V = getValNonImprovising(Ty, yyvsp[0].ValIDVal);
+    Value *V = getValNonImprovising(Ty, (yyvsp[0].ValIDVal));
     CHECK_FOR_ERROR
 
     CurFun.CurrentFunction = SavedCurFn;
@@ -3192,14 +3909,14 @@
 
       // 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[0].ValIDVal)));
     
       if (I != CurModule.GlobalRefs.end()) {
         V = I->second;             // Placeholder already exists, use it...
-        yyvsp[0].ValIDVal.destroy();
+        (yyvsp[0].ValIDVal).destroy();
       } else {
         std::string Name;
-        if (yyvsp[0].ValIDVal.Type == ValID::NameVal) Name = yyvsp[0].ValIDVal.Name;
+        if ((yyvsp[0].ValIDVal).Type == ValID::NameVal) Name = (yyvsp[0].ValIDVal).Name;
 
         // Create the forward referenced global.
         GlobalValue *GV;
@@ -3214,284 +3931,312 @@
         }
 
         // 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[0].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].TypeVal);            // Free the type handle
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 145:
-#line 1657 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 146:
+#line 1657 "/proj/llvm/llvm-4/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].TypeVal))->getDescription());
+    if ((yyvsp[-1].TypeVal)->get() != (yyvsp[0].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].TypeVal))->getDescription() + " and " + (yyvsp[0].ConstVal)->getType()->getDescription());
+    (yyval.ConstVal) = (yyvsp[0].ConstVal);
+    delete (yyvsp[-1].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 146:
-#line 1667 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 147:
+#line 1667 "/proj/llvm/llvm-4/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].TypeVal))->getDescription());
+    const Type *Ty = (yyvsp[-1].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].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 147:
-#line 1677 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{      // integral constants
-    if (!ConstantInt::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].SInt64Val))
+  ;}
+    break;
+
+  case 148:
+#line 1677 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {      // integral constants
+    if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val)))
       GEN_ERROR("Constant value doesn't fit in type!");
-    yyval.ConstVal = ConstantInt::get(yyvsp[-1].PrimType, yyvsp[0].SInt64Val);
+    (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 148:
-#line 1683 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{      // integral constants
-    if (!ConstantInt::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].UInt64Val))
+  ;}
+    break;
+
+  case 149:
+#line 1683 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {      // integral constants
+    if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val)))
       GEN_ERROR("Constant value doesn't fit in type!");
-    yyval.ConstVal = ConstantInt::get(yyvsp[-1].PrimType, yyvsp[0].UInt64Val);
+    (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 149:
-#line 1689 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                      // Boolean constants
-    assert(cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth() == 1 && "Not Bool?");
-    yyval.ConstVal = ConstantInt::getTrue();
+  ;}
+    break;
+
+  case 150:
+#line 1689 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {                      // Boolean constants
+    assert(cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth() == 1 && "Not Bool?");
+    (yyval.ConstVal) = ConstantInt::getTrue();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 150:
-#line 1694 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                     // Boolean constants
-    assert(cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth() == 1 && "Not Bool?");
-    yyval.ConstVal = ConstantInt::getFalse();
+  ;}
+    break;
+
+  case 151:
+#line 1694 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {                     // Boolean constants
+    assert(cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth() == 1 && "Not Bool?");
+    (yyval.ConstVal) = ConstantInt::getFalse();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 151:
-#line 1699 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                   // Float & Double constants
-    if (!ConstantFP::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].FPVal))
+  ;}
+    break;
+
+  case 152:
+#line 1699 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {                   // Float & Double constants
+    if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].FPVal)))
       GEN_ERROR("Floating point constant invalid for type!!");
-    yyval.ConstVal = ConstantFP::get(yyvsp[-1].PrimType, yyvsp[0].FPVal);
+    (yyval.ConstVal) = ConstantFP::get((yyvsp[-1].PrimType), (yyvsp[0].FPVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 152:
-#line 1707 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 153:
+#line 1707 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
-    Constant *Val = yyvsp[-3].ConstVal;
-    const Type *Ty = yyvsp[-1].TypeVal->get();
-    if (!Val->getType()->isFirstClassType())
-      GEN_ERROR("cast constant expression from a non-primitive type: '" +
-                     Val->getType()->getDescription() + "'!");
-    if (!Ty->isFirstClassType())
-      GEN_ERROR("cast constant expression to a non-primitive type: '" +
-                Ty->getDescription() + "'!");
-    yyval.ConstVal = ConstantExpr::getCast(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, yyvsp[-1].TypeVal->get());
-    delete yyvsp[-1].TypeVal;
-  ;
-    break;}
-case 153:
-#line 1721 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!isa<PointerType>(yyvsp[-2].ConstVal->getType()))
+      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 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 154:
+#line 1719 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!isa<PointerType>((yyvsp[-2].ConstVal)->getType()))
       GEN_ERROR("GetElementPtr requires a pointer operand!");
 
     const Type *IdxTy =
-      GetElementPtrInst::getIndexedType(yyvsp[-2].ConstVal->getType(), *yyvsp[-1].ValueList, true);
+      GetElementPtrInst::getIndexedType((yyvsp[-2].ConstVal)->getType(), *(yyvsp[-1].ValueList), true);
     if (!IdxTy)
       GEN_ERROR("Index list invalid for constant getelementptr!");
 
     std::vector<Constant*> 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[-1].ValueList)->size(); i != e; ++i)
+      if (Constant *C = dyn_cast<Constant>((*(yyvsp[-1].ValueList))[i]))
         IdxVec.push_back(C);
       else
         GEN_ERROR("Indices to constant getelementptr must be constants!");
 
-    delete yyvsp[-1].ValueList;
+    delete (yyvsp[-1].ValueList);
 
-    yyval.ConstVal = ConstantExpr::getGetElementPtr(yyvsp[-2].ConstVal, IdxVec);
+    (yyval.ConstVal) = ConstantExpr::getGetElementPtr((yyvsp[-2].ConstVal), IdxVec);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 154:
-#line 1742 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[-5].ConstVal->getType() != Type::Int1Ty)
+  ;}
+    break;
+
+  case 155:
+#line 1740 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[-5].ConstVal)->getType() != Type::Int1Ty)
       GEN_ERROR("Select condition must be of boolean type!");
-    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
+    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].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[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 155:
-#line 1750 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
+  ;}
+    break;
+
+  case 156:
+#line 1748 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].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 156:
-#line 1756 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
+    (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+  ;}
+    break;
+
+  case 157:
+#line 1754 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
       GEN_ERROR("Logical operator types must match!");
-    if (!yyvsp[-3].ConstVal->getType()->isInteger()) {
-      if (!isa<PackedType>(yyvsp[-3].ConstVal->getType()) || 
-          !cast<PackedType>(yyvsp[-3].ConstVal->getType())->getElementType()->isInteger())
+    if (!(yyvsp[-3].ConstVal)->getType()->isInteger()) {
+      if (!isa<PackedType>((yyvsp[-3].ConstVal)->getType()) || 
+          !cast<PackedType>((yyvsp[-3].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[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 157:
-#line 1767 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
+  ;}
+    break;
+
+  case 158:
+#line 1765 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
       GEN_ERROR("icmp operand types must match!");
-    yyval.ConstVal = ConstantExpr::getICmp(yyvsp[-5].IPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
-  ;
-    break;}
-case 158:
-#line 1772 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
+    (yyval.ConstVal) = ConstantExpr::getICmp((yyvsp[-5].IPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+  ;}
+    break;
+
+  case 159:
+#line 1770 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
       GEN_ERROR("fcmp operand types must match!");
-    yyval.ConstVal = ConstantExpr::getFCmp(yyvsp[-5].FPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
-  ;
-    break;}
-case 159:
-#line 1777 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[-1].ConstVal->getType() != Type::Int8Ty)
+    (yyval.ConstVal) = ConstantExpr::getFCmp((yyvsp[-5].FPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+  ;}
+    break;
+
+  case 160:
+#line 1775 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[-1].ConstVal)->getType() != Type::Int8Ty)
       GEN_ERROR("Shift count for shift constant must be i8 type!");
-    if (!yyvsp[-3].ConstVal->getType()->isInteger())
+    if (!(yyvsp[-3].ConstVal)->getType()->isInteger())
       GEN_ERROR("Shift constant expression requires integer operand!");
     CHECK_FOR_ERROR;
-    yyval.ConstVal = ConstantExpr::get(yyvsp[-5].OtherOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
+    (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].OtherOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 160:
-#line 1786 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!ExtractElementInst::isValidOperands(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
+  ;}
+    break;
+
+  case 161:
+#line 1784 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
       GEN_ERROR("Invalid extractelement operands!");
-    yyval.ConstVal = ConstantExpr::getExtractElement(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
+    (yyval.ConstVal) = ConstantExpr::getExtractElement((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 161:
-#line 1792 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!InsertElementInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
+  ;}
+    break;
+
+  case 162:
+#line 1790 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
       GEN_ERROR("Invalid insertelement operands!");
-    yyval.ConstVal = ConstantExpr::getInsertElement(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
+    (yyval.ConstVal) = ConstantExpr::getInsertElement((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 162:
-#line 1798 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!ShuffleVectorInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
+  ;}
+    break;
+
+  case 163:
+#line 1796 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
       GEN_ERROR("Invalid shufflevector operands!");
-    yyval.ConstVal = ConstantExpr::getShuffleVector(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
+    (yyval.ConstVal) = ConstantExpr::getShuffleVector((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 163:
-#line 1807 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    (yyval.ConstVector = yyvsp[-2].ConstVector)->push_back(yyvsp[0].ConstVal);
+  ;}
+    break;
+
+  case 164:
+#line 1805 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 164:
-#line 1811 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ConstVector = new std::vector<Constant*>();
-    yyval.ConstVector->push_back(yyvsp[0].ConstVal);
+  ;}
+    break;
+
+  case 165:
+#line 1809 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ConstVector) = new std::vector<Constant*>();
+    (yyval.ConstVector)->push_back((yyvsp[0].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 165:
-#line 1819 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.BoolVal = false; ;
-    break;}
-case 166:
-#line 1819 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.BoolVal = true; ;
-    break;}
-case 167:
-#line 1830 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ModuleVal = ParserResult = CurModule.CurrentModule;
+  ;}
+    break;
+
+  case 166:
+#line 1817 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.BoolVal) = false; ;}
+    break;
+
+  case 167:
+#line 1817 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.BoolVal) = true; ;}
+    break;
+
+  case 168:
+#line 1828 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
     CurModule.ModuleDone();
     CHECK_FOR_ERROR;
-  ;
-    break;}
-case 168:
-#line 1835 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ModuleVal = ParserResult = CurModule.CurrentModule;
+  ;}
+    break;
+
+  case 169:
+#line 1833 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
     CurModule.ModuleDone();
     CHECK_FOR_ERROR;
-  ;
-    break;}
-case 171:
-#line 1848 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ CurFun.isDeclare = false ;
-    break;}
-case 172:
-#line 1848 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 172:
+#line 1846 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { CurFun.isDeclare = false ;}
+    break;
+
+  case 173:
+#line 1846 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
     CurFun.FunctionDone();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 173:
-#line 1852 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ CurFun.isDeclare = true; ;
-    break;}
-case 174:
-#line 1852 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 174:
+#line 1850 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { CurFun.isDeclare = true; ;}
+    break;
+
+  case 175:
+#line 1850 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 175:
-#line 1855 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 176:
+#line 1853 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 176:
-#line 1858 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 177:
+#line 1856 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
     // Emit an error if there are any unresolved types left.
     if (!CurModule.LateResolveTypes.empty()) {
       const ValID &DID = CurModule.LateResolveTypes.begin()->first;
@@ -3502,13 +4247,14 @@
       }
     }
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 177:
-#line 1870 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 178:
+#line 1868 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].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:
     //
@@ -3518,256 +4264,283 @@
     // 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[-2].StrVal), *(yyvsp[0].TypeVal));
 
-    if (!setTypeName(*yyvsp[0].TypeVal, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) {
+    if (!setTypeName(*(yyvsp[0].TypeVal), (yyvsp[-2].StrVal)) && !(yyvsp[-2].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[0].TypeVal));
     }
 
-    delete yyvsp[0].TypeVal;
+    delete (yyvsp[0].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 178:
-#line 1894 "/Users/sabre/cvs/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 179:
+#line 1892 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    ResolveTypeTo((yyvsp[-2].StrVal), (yyvsp[0].PrimType));
+
+    if (!setTypeName((yyvsp[0].PrimType), (yyvsp[-2].StrVal)) && !(yyvsp[-2].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[0].PrimType));
     }
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 179:
-#line 1905 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ /* "Externally Visible" Linkage */
-    if (yyvsp[0].ConstVal == 0) 
+  ;}
+    break;
+
+  case 180:
+#line 1903 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { /* "Externally Visible" Linkage */
+    if ((yyvsp[0].ConstVal) == 0) 
       GEN_ERROR("Global value initializer is not a constant!");
-    CurGV = ParseGlobalVariable(yyvsp[-3].StrVal, GlobalValue::ExternalLinkage,
-                                yyvsp[-2].Visibility, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal);
+    CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalLinkage,
+                                (yyvsp[-2].Visibility), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 180:
-#line 1911 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 181:
+#line 1909 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
     CurGV = 0;
-  ;
-    break;}
-case 181:
-#line 1914 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[0].ConstVal == 0) 
+  ;}
+    break;
+
+  case 182:
+#line 1912 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[0].ConstVal) == 0) 
       GEN_ERROR("Global value initializer is not a constant!");
-    CurGV = ParseGlobalVariable(yyvsp[-4].StrVal, yyvsp[-3].Linkage, yyvsp[-2].Visibility, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal);
+    CurGV = ParseGlobalVariable((yyvsp[-4].StrVal), (yyvsp[-3].Linkage), (yyvsp[-2].Visibility), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 182:
-#line 1919 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 183:
+#line 1917 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
     CurGV = 0;
-  ;
-    break;}
-case 183:
-#line 1922 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 184:
+#line 1920 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
-    CurGV = ParseGlobalVariable(yyvsp[-4].StrVal, yyvsp[-3].Linkage, yyvsp[-2].Visibility, yyvsp[-1].BoolVal, *yyvsp[0].TypeVal, 0);
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
+    CurGV = ParseGlobalVariable((yyvsp[-4].StrVal), (yyvsp[-3].Linkage), (yyvsp[-2].Visibility), (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
     CHECK_FOR_ERROR
-    delete yyvsp[0].TypeVal;
-  ;
-    break;}
-case 184:
-#line 1928 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    delete (yyvsp[0].TypeVal);
+  ;}
+    break;
+
+  case 185:
+#line 1926 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
     CurGV = 0;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 185:
-#line 1932 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ 
+  ;}
+    break;
+
+  case 186:
+#line 1930 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { 
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 186:
-#line 1935 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 187:
+#line 1933 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 187:
-#line 1941 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 188:
+#line 1939 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
   const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
-  char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true);
-  std::string NewAsm(yyvsp[0].StrVal, EndStr);
-  free(yyvsp[0].StrVal);
+  char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
+  std::string NewAsm((yyvsp[0].StrVal), EndStr);
+  free((yyvsp[0].StrVal));
 
   if (AsmSoFar.empty())
     CurModule.CurrentModule->setModuleInlineAsm(NewAsm);
   else
     CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm);
   CHECK_FOR_ERROR
-;
-    break;}
-case 188:
-#line 1954 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Endianness = Module::BigEndian; ;
-    break;}
-case 189:
-#line 1955 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Endianness = Module::LittleEndian; ;
-    break;}
-case 190:
-#line 1957 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    CurModule.CurrentModule->setEndianness(yyvsp[0].Endianness);
+;}
+    break;
+
+  case 189:
+#line 1952 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Endianness) = Module::BigEndian; ;}
+    break;
+
+  case 190:
+#line 1953 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Endianness) = Module::LittleEndian; ;}
+    break;
+
+  case 191:
+#line 1955 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    CurModule.CurrentModule->setEndianness((yyvsp[0].Endianness));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 191:
-#line 1961 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[0].UInt64Val == 32)
+  ;}
+    break;
+
+  case 192:
+#line 1959 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[0].UInt64Val) == 32)
       CurModule.CurrentModule->setPointerSize(Module::Pointer32);
-    else if (yyvsp[0].UInt64Val == 64)
+    else if ((yyvsp[0].UInt64Val) == 64)
       CurModule.CurrentModule->setPointerSize(Module::Pointer64);
     else
-      GEN_ERROR("Invalid pointer size: '" + utostr(yyvsp[0].UInt64Val) + "'!");
+      GEN_ERROR("Invalid pointer size: '" + utostr((yyvsp[0].UInt64Val)) + "'!");
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 192:
-#line 1970 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    CurModule.CurrentModule->setTargetTriple(yyvsp[0].StrVal);
-    free(yyvsp[0].StrVal);
-  ;
-    break;}
-case 193:
-#line 1974 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    CurModule.CurrentModule->setDataLayout(yyvsp[0].StrVal);
-    free(yyvsp[0].StrVal);
-  ;
-    break;}
-case 195:
-#line 1981 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-          CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
-          free(yyvsp[0].StrVal);
+  ;}
+    break;
+
+  case 193:
+#line 1968 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal));
+    free((yyvsp[0].StrVal));
+  ;}
+    break;
+
+  case 194:
+#line 1972 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    CurModule.CurrentModule->setDataLayout((yyvsp[0].StrVal));
+    free((yyvsp[0].StrVal));
+  ;}
+    break;
+
+  case 196:
+#line 1979 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+          CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
+          free((yyvsp[0].StrVal));
           CHECK_FOR_ERROR
-        ;
-    break;}
-case 196:
-#line 1986 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-          CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
-          free(yyvsp[0].StrVal);
+        ;}
+    break;
+
+  case 197:
+#line 1984 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+          CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
+          free((yyvsp[0].StrVal));
           CHECK_FOR_ERROR
-        ;
-    break;}
-case 197:
-#line 1991 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+        ;}
+    break;
+
+  case 198:
+#line 1989 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
           CHECK_FOR_ERROR
-        ;
-    break;}
-case 201:
-#line 2001 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.StrVal = 0; ;
-    break;}
-case 202:
-#line 2003 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+        ;}
+    break;
+
+  case 202:
+#line 1999 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.StrVal) = 0; ;}
+    break;
+
+  case 203:
+#line 2001 "/proj/llvm/llvm-4/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[-2].TypeVal))->getDescription());
+    if (*(yyvsp[-2].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[-1].ParamAttrs); E.Ty = (yyvsp[-2].TypeVal); E.Name = (yyvsp[0].StrVal);
+    (yyval.ArgList) = (yyvsp[-4].ArgList);
+    (yyvsp[-4].ArgList)->push_back(E);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 203:
-#line 2013 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 204:
+#line 2011 "/proj/llvm/llvm-4/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[-2].TypeVal))->getDescription());
+    if (*(yyvsp[-2].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[-1].ParamAttrs); E.Ty = (yyvsp[-2].TypeVal); E.Name = (yyvsp[0].StrVal);
+    (yyval.ArgList) = new ArgListType;
+    (yyval.ArgList)->push_back(E);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 204:
-#line 2024 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ArgList = yyvsp[0].ArgList;
+  ;}
+    break;
+
+  case 205:
+#line 2022 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ArgList) = (yyvsp[0].ArgList);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 205:
-#line 2028 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ArgList = yyvsp[-2].ArgList;
+  ;}
+    break;
+
+  case 206:
+#line 2026 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ArgList) = (yyvsp[-2].ArgList);
     struct ArgListEntry E;
     E.Ty = new PATypeHolder(Type::VoidTy);
     E.Name = 0;
     E.Attrs = FunctionType::NoAttributeSet;
-    yyval.ArgList->push_back(E);
+    (yyval.ArgList)->push_back(E);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 206:
-#line 2037 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ArgList = new ArgListType;
+  ;}
+    break;
+
+  case 207:
+#line 2035 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ArgList) = new ArgListType;
     struct ArgListEntry E;
     E.Ty = new PATypeHolder(Type::VoidTy);
     E.Name = 0;
     E.Attrs = FunctionType::NoAttributeSet;
-    yyval.ArgList->push_back(E);
+    (yyval.ArgList)->push_back(E);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 207:
-#line 2046 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ArgList = 0;
+  ;}
+    break;
+
+  case 208:
+#line 2044 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ArgList) = 0;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 208:
-#line 2052 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  UnEscapeLexed(yyvsp[-6].StrVal);
-  std::string FunctionName(yyvsp[-6].StrVal);
-  free(yyvsp[-6].StrVal);  // Free strdup'd memory!
+  ;}
+    break;
+
+  case 209:
+#line 2050 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+  UnEscapeLexed((yyvsp[-6].StrVal));
+  std::string FunctionName((yyvsp[-6].StrVal));
+  free((yyvsp[-6].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[-7].TypeVal)))
+    GEN_ERROR("Reference to abstract result: "+ (yyvsp[-7].TypeVal)->get()->getDescription());
 
   std::vector<const Type*> ParamTypeList;
   std::vector<FunctionType::ParameterAttributes> ParamAttrs;
-  ParamAttrs.push_back(yyvsp[-2].ParamAttrs);
-  if (yyvsp[-4].ArgList) {   // If there are arguments...
-    for (ArgListType::iterator I = yyvsp[-4].ArgList->begin(); I != yyvsp[-4].ArgList->end(); ++I) {
+  ParamAttrs.push_back((yyvsp[-2].ParamAttrs));
+  if ((yyvsp[-4].ArgList)) {   // If there are arguments...
+    for (ArgListType::iterator I = (yyvsp[-4].ArgList)->begin(); I != (yyvsp[-4].ArgList)->end(); ++I) {
       const Type* Ty = I->Ty->get();
       if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(I->Ty))
         GEN_ERROR("Reference to abstract argument: " + Ty->getDescription());
@@ -3780,10 +4553,10 @@
   bool isVarArg = ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy;
   if (isVarArg) ParamTypeList.pop_back();
 
-  FunctionType *FT = FunctionType::get(*yyvsp[-7].TypeVal, ParamTypeList, isVarArg,
+  FunctionType *FT = FunctionType::get(*(yyvsp[-7].TypeVal), ParamTypeList, isVarArg,
                                        ParamAttrs);
   const PointerType *PFT = PointerType::get(FT);
-  delete yyvsp[-7].TypeVal;
+  delete (yyvsp[-7].TypeVal);
 
   ValID ID;
   if (!FunctionName.empty()) {
@@ -3828,24 +4601,24 @@
     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);
-    free(yyvsp[-1].StrVal);
+  Fn->setCallingConv((yyvsp[-8].UIntVal));
+  Fn->setAlignment((yyvsp[0].UIntVal));
+  if ((yyvsp[-1].StrVal)) {
+    Fn->setSection((yyvsp[-1].StrVal));
+    free((yyvsp[-1].StrVal));
   }
 
   // Add all of the arguments we parsed to the function...
-  if (yyvsp[-4].ArgList) {                     // Is null if empty...
+  if ((yyvsp[-4].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[-4].ArgList)->back().Ty->get() == Type::VoidTy && (yyvsp[-4].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[-4].ArgList)->back().Ty;
+      (yyvsp[-4].ArgList)->pop_back();  // Delete the last entry
     }
     Function::arg_iterator ArgIt = Fn->arg_begin();
     unsigned Idx = 1;
-    for (ArgListType::iterator I = yyvsp[-4].ArgList->begin(); I != yyvsp[-4].ArgList->end(); ++I, ++ArgIt) {
+    for (ArgListType::iterator I = (yyvsp[-4].ArgList)->begin(); I != (yyvsp[-4].ArgList)->end(); ++I, ++ArgIt) {
       delete I->Ty;                          // Delete the typeholder...
       setValueName(ArgIt, I->Name);           // Insert arg into symtab...
       CHECK_FOR_ERROR
@@ -3853,114 +4626,128 @@
       Idx++;
     }
 
-    delete yyvsp[-4].ArgList;                     // We're now done with the argument list
+    delete (yyvsp[-4].ArgList);                     // We're now done with the argument list
   }
   CHECK_FOR_ERROR
-;
-    break;}
-case 211:
-#line 2159 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  yyval.FunctionVal = CurFun.CurrentFunction;
+;}
+    break;
+
+  case 212:
+#line 2157 "/proj/llvm/llvm-4/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 214:
-#line 2170 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  yyval.FunctionVal = yyvsp[-1].FunctionVal;
+  (yyval.FunctionVal)->setLinkage((yyvsp[-3].Linkage));
+  (yyval.FunctionVal)->setVisibility((yyvsp[-2].Visibility));
+;}
+    break;
+
+  case 215:
+#line 2168 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+  (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
   CHECK_FOR_ERROR
-;
-    break;}
-case 215:
-#line 2175 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    CurFun.CurrentFunction->setLinkage(yyvsp[-2].Linkage);
-    CurFun.CurrentFunction->setVisibility(yyvsp[-1].Visibility);
-    yyval.FunctionVal = CurFun.CurrentFunction;
+;}
+    break;
+
+  case 216:
+#line 2173 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    CurFun.CurrentFunction->setLinkage((yyvsp[-2].Linkage));
+    CurFun.CurrentFunction->setVisibility((yyvsp[-1].Visibility));
+    (yyval.FunctionVal) = CurFun.CurrentFunction;
     CurFun.FunctionDone();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 216:
-#line 2187 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BoolVal = false;
+  ;}
+    break;
+
+  case 217:
+#line 2185 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.BoolVal) = false;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 217:
-#line 2191 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BoolVal = true;
+  ;}
+    break;
+
+  case 218:
+#line 2189 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.BoolVal) = true;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 218:
-#line 2196 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{    // A reference to a direct constant
-    yyval.ValIDVal = ValID::create(yyvsp[0].SInt64Val);
+  ;}
+    break;
+
+  case 219:
+#line 2194 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {    // A reference to a direct constant
+    (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 219:
-#line 2200 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::create(yyvsp[0].UInt64Val);
+  ;}
+    break;
+
+  case 220:
+#line 2198 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 220:
-#line 2204 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                     // Perhaps it's an FP constant?
-    yyval.ValIDVal = ValID::create(yyvsp[0].FPVal);
+  ;}
+    break;
+
+  case 221:
+#line 2202 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {                     // Perhaps it's an FP constant?
+    (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 221:
-#line 2208 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::create(ConstantInt::getTrue());
+  ;}
+    break;
+
+  case 222:
+#line 2206 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::create(ConstantInt::getTrue());
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 222:
-#line 2212 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::create(ConstantInt::getFalse());
+  ;}
+    break;
+
+  case 223:
+#line 2210 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::create(ConstantInt::getFalse());
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 223:
-#line 2216 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::createNull();
+  ;}
+    break;
+
+  case 224:
+#line 2214 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::createNull();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 224:
-#line 2220 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::createUndef();
+  ;}
+    break;
+
+  case 225:
+#line 2218 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::createUndef();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 225:
-#line 2224 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{     // A vector zero constant.
-    yyval.ValIDVal = ValID::createZeroInit();
+  ;}
+    break;
+
+  case 226:
+#line 2222 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {     // A vector zero constant.
+    (yyval.ValIDVal) = ValID::createZeroInit();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 226:
-#line 2228 "/Users/sabre/cvs/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 227:
+#line 2226 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { // Nonempty unsized packed vector
+    const Type *ETy = (*(yyvsp[-1].ConstVector))[0]->getType();
+    int NumElements = (yyvsp[-1].ConstVector)->size(); 
     
     PackedType* pt = PackedType::get(ETy, NumElements);
     PATypeHolder* PTy = new PATypeHolder(
@@ -3972,105 +4759,115 @@
                                          );
     
     // 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[-1].ConstVector)->size(); i++) {
+      if (ETy != (*(yyvsp[-1].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[-1].ConstVector))[i]->getType()->getDescription() + "'.");
     }
 
-    yyval.ValIDVal = ValID::create(ConstantPacked::get(pt, *yyvsp[-1].ConstVector));
-    delete PTy; delete yyvsp[-1].ConstVector;
+    (yyval.ValIDVal) = ValID::create(ConstantPacked::get(pt, *(yyvsp[-1].ConstVector)));
+    delete PTy; delete (yyvsp[-1].ConstVector);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 227:
-#line 2253 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::create(yyvsp[0].ConstVal);
-    CHECK_FOR_ERROR
-  ;
-    break;}
-case 228:
-#line 2257 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    char *End = UnEscapeLexed(yyvsp[-2].StrVal, true);
-    std::string AsmStr = std::string(yyvsp[-2].StrVal, End);
-    End = UnEscapeLexed(yyvsp[0].StrVal, true);
-    std::string Constraints = std::string(yyvsp[0].StrVal, End);
-    yyval.ValIDVal = ValID::createInlineAsm(AsmStr, Constraints, yyvsp[-3].BoolVal);
-    free(yyvsp[-2].StrVal);
-    free(yyvsp[0].StrVal);
-    CHECK_FOR_ERROR
-  ;
-    break;}
-case 229:
-#line 2271 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{  // Is it an integer reference...?
-    yyval.ValIDVal = ValID::create(yyvsp[0].SIntVal);
-    CHECK_FOR_ERROR
-  ;
-    break;}
-case 230:
-#line 2275 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                   // Is it a named reference...?
-    yyval.ValIDVal = ValID::create(yyvsp[0].StrVal);
-    CHECK_FOR_ERROR
-  ;
-    break;}
-case 233:
-#line 2287 "/Users/sabre/cvs/llvm/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;
-    CHECK_FOR_ERROR
-  ;
-    break;}
-case 234:
-#line 2296 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.FunctionVal = yyvsp[-1].FunctionVal;
-    CHECK_FOR_ERROR
-  ;
-    break;}
-case 235:
-#line 2300 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ // Do not allow functions with 0 basic blocks   
-    yyval.FunctionVal = yyvsp[-1].FunctionVal;
-    CHECK_FOR_ERROR
-  ;
-    break;}
-case 236:
-#line 2309 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    setValueName(yyvsp[0].TermInstVal, yyvsp[-1].StrVal);
-    CHECK_FOR_ERROR
-    InsertValue(yyvsp[0].TermInstVal);
+  ;}
+    break;
 
-    yyvsp[-2].BasicBlockVal->getInstList().push_back(yyvsp[0].TermInstVal);
-    InsertValue(yyvsp[-2].BasicBlockVal);
-    yyval.BasicBlockVal = yyvsp[-2].BasicBlockVal;
+  case 228:
+#line 2251 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 237:
-#line 2320 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (CastInst *CI1 = dyn_cast<CastInst>(yyvsp[0].InstVal))
+  ;}
+    break;
+
+  case 229:
+#line 2255 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    char *End = UnEscapeLexed((yyvsp[-2].StrVal), true);
+    std::string AsmStr = std::string((yyvsp[-2].StrVal), End);
+    End = UnEscapeLexed((yyvsp[0].StrVal), true);
+    std::string Constraints = std::string((yyvsp[0].StrVal), End);
+    (yyval.ValIDVal) = ValID::createInlineAsm(AsmStr, Constraints, (yyvsp[-3].BoolVal));
+    free((yyvsp[-2].StrVal));
+    free((yyvsp[0].StrVal));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 230:
+#line 2269 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {  // Is it an integer reference...?
+    (yyval.ValIDVal) = ValID::create((yyvsp[0].SIntVal));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 231:
+#line 2273 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {                   // Is it a named reference...?
+    (yyval.ValIDVal) = ValID::create((yyvsp[0].StrVal));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 234:
+#line 2285 "/proj/llvm/llvm-4/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);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 235:
+#line 2294 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 236:
+#line 2298 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { // Do not allow functions with 0 basic blocks   
+    (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 237:
+#line 2307 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    setValueName((yyvsp[0].TermInstVal), (yyvsp[-1].StrVal));
+    CHECK_FOR_ERROR
+    InsertValue((yyvsp[0].TermInstVal));
+
+    (yyvsp[-2].BasicBlockVal)->getInstList().push_back((yyvsp[0].TermInstVal));
+    InsertValue((yyvsp[-2].BasicBlockVal));
+    (yyval.BasicBlockVal) = (yyvsp[-2].BasicBlockVal);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 238:
+#line 2318 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (CastInst *CI1 = dyn_cast<CastInst>((yyvsp[0].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].BasicBlockVal)->getInstList().push_back(CI2);
+    (yyvsp[-1].BasicBlockVal)->getInstList().push_back((yyvsp[0].InstVal));
+    (yyval.BasicBlockVal) = (yyvsp[-1].BasicBlockVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 238:
-#line 2329 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BasicBlockVal = getBBVal(ValID::create((int)CurFun.NextBBNum++), true);
+  ;}
+    break;
+
+  case 239:
+#line 2327 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.BasicBlockVal) = getBBVal(ValID::create((int)CurFun.NextBBNum++), true);
     CHECK_FOR_ERROR
 
     // Make sure to move the basic block to the correct location in the
@@ -4078,14 +4875,15 @@
     // referenced.
     Function::BasicBlockListType &BBL = 
       CurFun.CurrentFunction->getBasicBlockList();
-    BBL.splice(BBL.end(), BBL, yyval.BasicBlockVal);
+    BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 239:
-#line 2341 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BasicBlockVal = getBBVal(ValID::create(yyvsp[0].StrVal), true);
+  ;}
+    break;
+
+  case 240:
+#line 2339 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.BasicBlockVal) = getBBVal(ValID::create((yyvsp[0].StrVal)), true);
     CHECK_FOR_ERROR
 
     // Make sure to move the basic block to the correct location in the
@@ -4093,93 +4891,100 @@
     // referenced.
     Function::BasicBlockListType &BBL = 
       CurFun.CurrentFunction->getBasicBlockList();
-    BBL.splice(BBL.end(), BBL, yyval.BasicBlockVal);
+    BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 240:
-#line 2354 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{              // Return with a result...
-    yyval.TermInstVal = new ReturnInst(yyvsp[0].ValueVal);
-    CHECK_FOR_ERROR
-  ;
-    break;}
-case 241:
-#line 2358 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                                       // Return with no result...
-    yyval.TermInstVal = new ReturnInst();
-    CHECK_FOR_ERROR
-  ;
-    break;}
-case 242:
-#line 2362 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                         // Unconditional Branch...
-    BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
-    CHECK_FOR_ERROR
-    yyval.TermInstVal = new BranchInst(tmpBB);
-  ;
-    break;}
-case 243:
-#line 2367 "/Users/sabre/cvs/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 244:
-#line 2377 "/Users/sabre/cvs/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 241:
+#line 2352 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {              // Return with a result...
+    (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 242:
+#line 2356 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {                                       // Return with no result...
+    (yyval.TermInstVal) = new ReturnInst();
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 243:
+#line 2360 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {                         // Unconditional Branch...
+    BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
+    CHECK_FOR_ERROR
+    (yyval.TermInstVal) = new BranchInst(tmpBB);
+  ;}
+    break;
+
+  case 244:
+#line 2365 "/proj/llvm/llvm-4/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 245:
+#line 2375 "/proj/llvm/llvm-4/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;
+
+    std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = (yyvsp[-1].JumpTable)->begin(),
+      E = (yyvsp[-1].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[-1].JumpTable);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 245:
-#line 2396 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    Value* tmpVal = getVal(yyvsp[-6].PrimType, yyvsp[-5].ValIDVal);
+  ;}
+    break;
+
+  case 246:
+#line 2394 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    Value* tmpVal = getVal((yyvsp[-6].PrimType), (yyvsp[-5].ValIDVal));
     CHECK_FOR_ERROR
-    BasicBlock* tmpBB = getBBVal(yyvsp[-2].ValIDVal);
+    BasicBlock* tmpBB = getBBVal((yyvsp[-2].ValIDVal));
     CHECK_FOR_ERROR
     SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
-    yyval.TermInstVal = S;
+    (yyval.TermInstVal) = S;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 246:
-#line 2406 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 247:
+#line 2404 "/proj/llvm/llvm-4/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[-11].TypeVal)->get())) ||
         !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
       // Pull out the types of all of the arguments...
       std::vector<const Type*> ParamTypes;
       FunctionType::ParamAttrsList ParamAttrs;
-      ParamAttrs.push_back(yyvsp[-6].ParamAttrs);
-      for (ValueRefList::iterator I = yyvsp[-8].ValueRefList->begin(), E = yyvsp[-8].ValueRefList->end(); I != E; ++I) {
+      ParamAttrs.push_back((yyvsp[-6].ParamAttrs));
+      for (ValueRefList::iterator I = (yyvsp[-8].ValueRefList)->begin(), E = (yyvsp[-8].ValueRefList)->end(); I != E; ++I) {
         const Type *Ty = I->Val->getType();
         if (Ty == Type::VoidTy)
           GEN_ERROR("Short call syntax cannot be used with varargs");
@@ -4187,20 +4992,20 @@
         ParamAttrs.push_back(I->Attrs);
       }
 
-      Ty = FunctionType::get(yyvsp[-11].TypeVal->get(), ParamTypes, false, ParamAttrs);
+      Ty = FunctionType::get((yyvsp[-11].TypeVal)->get(), ParamTypes, false, ParamAttrs);
       PFTy = PointerType::get(Ty);
     }
 
-    Value *V = getVal(PFTy, yyvsp[-10].ValIDVal);   // Get the function we're calling...
+    Value *V = getVal(PFTy, (yyvsp[-10].ValIDVal));   // Get the function we're calling...
     CHECK_FOR_ERROR
-    BasicBlock *Normal = getBBVal(yyvsp[-3].ValIDVal);
+    BasicBlock *Normal = getBBVal((yyvsp[-3].ValIDVal));
     CHECK_FOR_ERROR
-    BasicBlock *Except = getBBVal(yyvsp[0].ValIDVal);
+    BasicBlock *Except = getBBVal((yyvsp[0].ValIDVal));
     CHECK_FOR_ERROR
 
     // Check the arguments
     ValueList Args;
-    if (yyvsp[-8].ValueRefList->empty()) {                                   // Has no arguments?
+    if ((yyvsp[-8].ValueRefList)->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 "
@@ -4210,7 +5015,7 @@
       // correctly!
       FunctionType::param_iterator I = Ty->param_begin();
       FunctionType::param_iterator E = Ty->param_end();
-      ValueRefList::iterator ArgI = yyvsp[-8].ValueRefList->begin(), ArgE = yyvsp[-8].ValueRefList->end();
+      ValueRefList::iterator ArgI = (yyvsp[-8].ValueRefList)->begin(), ArgE = (yyvsp[-8].ValueRefList)->end();
 
       for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
         if (ArgI->Val->getType() != *I)
@@ -4229,327 +5034,353 @@
 
     // Create the InvokeInst
     InvokeInst *II = new InvokeInst(V, Normal, Except, Args);
-    II->setCallingConv(yyvsp[-12].UIntVal);
-    yyval.TermInstVal = II;
-    delete yyvsp[-8].ValueRefList;
+    II->setCallingConv((yyvsp[-12].UIntVal));
+    (yyval.TermInstVal) = II;
+    delete (yyvsp[-8].ValueRefList);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 247:
-#line 2472 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TermInstVal = new UnwindInst();
+  ;}
+    break;
+
+  case 248:
+#line 2470 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TermInstVal) = new UnwindInst();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 248:
-#line 2476 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TermInstVal = new UnreachableInst();
+  ;}
+    break;
+
+  case 249:
+#line 2474 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TermInstVal) = new UnreachableInst();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 249:
-#line 2483 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.JumpTable = yyvsp[-5].JumpTable;
-    Constant *V = cast<Constant>(getValNonImprovising(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal));
+  ;}
+    break;
+
+  case 250:
+#line 2481 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.JumpTable) = (yyvsp[-5].JumpTable);
+    Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].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[0].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.JumpTable->push_back(std::make_pair(V, tmpBB));
-  ;
-    break;}
-case 250:
-#line 2494 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.JumpTable = new std::vector<std::pair<Constant*, BasicBlock*> >();
-    Constant *V = cast<Constant>(getValNonImprovising(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal));
+    (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
+  ;}
+    break;
+
+  case 251:
+#line 2492 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
+    Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].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[0].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.JumpTable->push_back(std::make_pair(V, tmpBB)); 
-  ;
-    break;}
-case 251:
-#line 2507 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB)); 
+  ;}
+    break;
+
+  case 252:
+#line 2505 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
   // Is this definition named?? if so, assign the name...
-  setValueName(yyvsp[0].InstVal, yyvsp[-1].StrVal);
+  setValueName((yyvsp[0].InstVal), (yyvsp[-1].StrVal));
   CHECK_FOR_ERROR
-  InsertValue(yyvsp[0].InstVal);
-  yyval.InstVal = yyvsp[0].InstVal;
+  InsertValue((yyvsp[0].InstVal));
+  (yyval.InstVal) = (yyvsp[0].InstVal);
   CHECK_FOR_ERROR
-;
-    break;}
-case 252:
-#line 2516 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{    // Used for PHI nodes
+;}
+    break;
+
+  case 253:
+#line 2514 "/proj/llvm/llvm-4/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[-5].TypeVal))->getDescription());
+    (yyval.PHIList) = new std::list<std::pair<Value*, BasicBlock*> >();
+    Value* tmpVal = getVal(*(yyvsp[-5].TypeVal), (yyvsp[-3].ValIDVal));
     CHECK_FOR_ERROR
-    BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal);
+    BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.PHIList->push_back(std::make_pair(tmpVal, tmpBB));
-    delete yyvsp[-5].TypeVal;
-  ;
-    break;}
-case 253:
-#line 2527 "/Users/sabre/cvs/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[-5].TypeVal);
+  ;}
+    break;
+
+  case 254:
+#line 2525 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.PHIList) = (yyvsp[-6].PHIList);
+    Value* tmpVal = getVal((yyvsp[-6].PHIList)->front().first->getType(), (yyvsp[-3].ValIDVal));
     CHECK_FOR_ERROR
-    BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal);
+    BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
     CHECK_FOR_ERROR
-    yyvsp[-6].PHIList->push_back(std::make_pair(tmpVal, tmpBB));
-  ;
-    break;}
-case 254:
-#line 2537 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{    
+    (yyvsp[-6].PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
+  ;}
+    break;
+
+  case 255:
+#line 2535 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {    
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
     // Used for call and invoke instructions
-    yyval.ValueRefList = new ValueRefList();
-    ValueRefListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-2].TypeVal->get(), yyvsp[-1].ValIDVal);
-    yyval.ValueRefList->push_back(E);
-  ;
-    break;}
-case 255:
-#line 2545 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    (yyval.ValueRefList) = new ValueRefList();
+    ValueRefListEntry E; E.Attrs = (yyvsp[0].ParamAttrs); E.Val = getVal((yyvsp[-2].TypeVal)->get(), (yyvsp[-1].ValIDVal));
+    (yyval.ValueRefList)->push_back(E);
+  ;}
+    break;
+
+  case 256:
+#line 2543 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
-    yyval.ValueRefList = yyvsp[-4].ValueRefList;
-    ValueRefListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-2].TypeVal->get(), yyvsp[-1].ValIDVal);
-    yyval.ValueRefList->push_back(E);
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
+    (yyval.ValueRefList) = (yyvsp[-4].ValueRefList);
+    ValueRefListEntry E; E.Attrs = (yyvsp[0].ParamAttrs); E.Val = getVal((yyvsp[-2].TypeVal)->get(), (yyvsp[-1].ValIDVal));
+    (yyval.ValueRefList)->push_back(E);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 256:
-#line 2553 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ValueRefList = new ValueRefList(); ;
-    break;}
-case 257:
-#line 2556 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ValueList = new std::vector<Value*>(); ;
-    break;}
-case 258:
-#line 2557 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValueList = yyvsp[-2].ValueList;
-    yyval.ValueList->push_back(yyvsp[0].ValueVal);
+  ;}
+    break;
+
+  case 257:
+#line 2551 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ValueRefList) = new ValueRefList(); ;}
+    break;
+
+  case 258:
+#line 2554 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ValueList) = new std::vector<Value*>(); ;}
+    break;
+
+  case 259:
+#line 2555 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValueList) = (yyvsp[-2].ValueList);
+    (yyval.ValueList)->push_back((yyvsp[0].ValueVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 259:
-#line 2564 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BoolVal = true;
+  ;}
+    break;
+
+  case 260:
+#line 2562 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.BoolVal) = true;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 260:
-#line 2568 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BoolVal = false;
+  ;}
+    break;
+
+  case 261:
+#line 2566 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.BoolVal) = false;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 261:
-#line 2573 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 262:
+#line 2571 "/proj/llvm/llvm-4/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<PackedType>((*yyvsp[-3].TypeVal).get()))
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
+    if (!(*(yyvsp[-3].TypeVal))->isInteger() && !(*(yyvsp[-3].TypeVal))->isFloatingPoint() && 
+        !isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
       GEN_ERROR(
         "Arithmetic operator requires integer, FP, or packed operands!");
-    if (isa<PackedType>((*yyvsp[-3].TypeVal).get()) && 
-        (yyvsp[-4].BinaryOpVal == Instruction::URem || 
-         yyvsp[-4].BinaryOpVal == Instruction::SRem ||
-         yyvsp[-4].BinaryOpVal == Instruction::FRem))
+    if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()) && 
+        ((yyvsp[-4].BinaryOpVal) == Instruction::URem || 
+         (yyvsp[-4].BinaryOpVal) == Instruction::SRem ||
+         (yyvsp[-4].BinaryOpVal) == Instruction::FRem))
       GEN_ERROR("U/S/FRem not supported on packed types!");
-    Value* val1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal); 
+    Value* val1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal)); 
     CHECK_FOR_ERROR
-    Value* val2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
+    Value* val2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.InstVal = BinaryOperator::create(yyvsp[-4].BinaryOpVal, val1, val2);
-    if (yyval.InstVal == 0)
+    (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), val1, val2);
+    if ((yyval.InstVal) == 0)
       GEN_ERROR("binary operator returned null!");
-    delete yyvsp[-3].TypeVal;
-  ;
-    break;}
-case 262:
-#line 2594 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    delete (yyvsp[-3].TypeVal);
+  ;}
+    break;
+
+  case 263:
+#line 2592 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
-    if (!(*yyvsp[-3].TypeVal)->isInteger()) {
-      if (!isa<PackedType>(yyvsp[-3].TypeVal->get()) ||
-          !cast<PackedType>(yyvsp[-3].TypeVal->get())->getElementType()->isInteger())
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
+    if (!(*(yyvsp[-3].TypeVal))->isInteger()) {
+      if (!isa<PackedType>((yyvsp[-3].TypeVal)->get()) ||
+          !cast<PackedType>((yyvsp[-3].TypeVal)->get())->getElementType()->isInteger())
         GEN_ERROR("Logical operator requires integral operands!");
     }
-    Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
+    Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
     CHECK_FOR_ERROR
-    Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
+    Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.InstVal = BinaryOperator::create(yyvsp[-4].BinaryOpVal, tmpVal1, tmpVal2);
-    if (yyval.InstVal == 0)
+    (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), tmpVal1, tmpVal2);
+    if ((yyval.InstVal) == 0)
       GEN_ERROR("binary operator returned null!");
-    delete yyvsp[-3].TypeVal;
-  ;
-    break;}
-case 263:
-#line 2611 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    delete (yyvsp[-3].TypeVal);
+  ;}
+    break;
+
+  case 264:
+#line 2609 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
-    if (isa<PackedType>((*yyvsp[-3].TypeVal).get()))
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
+    if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
       GEN_ERROR("Packed types not supported by icmp instruction");
-    Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
+    Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
     CHECK_FOR_ERROR
-    Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
+    Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].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[-5].OtherOpVal), (yyvsp[-4].IPredicate), tmpVal1, tmpVal2);
+    if ((yyval.InstVal) == 0)
       GEN_ERROR("icmp operator returned null!");
-  ;
-    break;}
-case 264:
-#line 2624 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 265:
+#line 2622 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
-    if (isa<PackedType>((*yyvsp[-3].TypeVal).get()))
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
+    if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
       GEN_ERROR("Packed types not supported by fcmp instruction");
-    Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
+    Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
     CHECK_FOR_ERROR
-    Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
+    Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].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[-5].OtherOpVal), (yyvsp[-4].FPredicate), tmpVal1, tmpVal2);
+    if ((yyval.InstVal) == 0)
       GEN_ERROR("fcmp operator returned null!");
-  ;
-    break;}
-case 265:
-#line 2637 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[0].ValueVal->getType() != Type::Int8Ty)
+  ;}
+    break;
+
+  case 266:
+#line 2635 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[0].ValueVal)->getType() != Type::Int8Ty)
       GEN_ERROR("Shift amount must be i8 type!");
-    if (!yyvsp[-2].ValueVal->getType()->isInteger())
+    if (!(yyvsp[-2].ValueVal)->getType()->isInteger())
       GEN_ERROR("Shift constant expression requires integer operand!");
     CHECK_FOR_ERROR;
-    yyval.InstVal = new ShiftInst(yyvsp[-3].OtherOpVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
+    (yyval.InstVal) = new ShiftInst((yyvsp[-3].OtherOpVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 266:
-#line 2646 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 267:
+#line 2644 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
-    Value* Val = yyvsp[-2].ValueVal;
-    const Type* Ty = yyvsp[0].TypeVal->get();
-    if (!Val->getType()->isFirstClassType())
-      GEN_ERROR("cast from a non-primitive type: '" +
-                Val->getType()->getDescription() + "'!");
-    if (!Ty->isFirstClassType())
-      GEN_ERROR("cast to a non-primitive type: '" + Ty->getDescription() +"'!");
-    yyval.InstVal = CastInst::create(yyvsp[-3].CastOpVal, Val, yyvsp[0].TypeVal->get());
-    delete yyvsp[0].TypeVal;
-  ;
-    break;}
-case 267:
-#line 2659 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[-4].ValueVal->getType() != Type::Int1Ty)
+      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 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 268:
+#line 2656 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[-4].ValueVal)->getType() != Type::Int1Ty)
       GEN_ERROR("select condition must be boolean!");
-    if (yyvsp[-2].ValueVal->getType() != yyvsp[0].ValueVal->getType())
+    if ((yyvsp[-2].ValueVal)->getType() != (yyvsp[0].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[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 268:
-#line 2667 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 269:
+#line 2664 "/proj/llvm/llvm-4/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[0].TypeVal))->getDescription());
+    (yyval.InstVal) = new VAArgInst((yyvsp[-2].ValueVal), *(yyvsp[0].TypeVal));
+    delete (yyvsp[0].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 269:
-#line 2674 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!ExtractElementInst::isValidOperands(yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
+  ;}
+    break;
+
+  case 270:
+#line 2671 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
       GEN_ERROR("Invalid extractelement operands!");
-    yyval.InstVal = new ExtractElementInst(yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
+    (yyval.InstVal) = new ExtractElementInst((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 270:
-#line 2680 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!InsertElementInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
+  ;}
+    break;
+
+  case 271:
+#line 2677 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
       GEN_ERROR("Invalid insertelement operands!");
-    yyval.InstVal = new InsertElementInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
+    (yyval.InstVal) = new InsertElementInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 271:
-#line 2686 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!ShuffleVectorInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
+  ;}
+    break;
+
+  case 272:
+#line 2683 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
       GEN_ERROR("Invalid shufflevector operands!");
-    yyval.InstVal = new ShuffleVectorInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
+    (yyval.InstVal) = new ShuffleVectorInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 272:
-#line 2692 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    const Type *Ty = yyvsp[0].PHIList->front().first->getType();
+  ;}
+    break;
+
+  case 273:
+#line 2689 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    const Type *Ty = (yyvsp[0].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[0].PHIList)->size());
+    while ((yyvsp[0].PHIList)->begin() != (yyvsp[0].PHIList)->end()) {
+      if ((yyvsp[0].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[0].PHIList)->front().first, (yyvsp[0].PHIList)->front().second);
+      (yyvsp[0].PHIList)->pop_front();
     }
-    delete yyvsp[0].PHIList;  // Free the list...
+    delete (yyvsp[0].PHIList);  // Free the list...
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 273:
-#line 2708 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 274:
+#line 2705 "/proj/llvm/llvm-4/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[-5].TypeVal)->get())) ||
         !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
       // Pull out the types of all of the arguments...
       std::vector<const Type*> ParamTypes;
       FunctionType::ParamAttrsList ParamAttrs;
-      ParamAttrs.push_back(yyvsp[0].ParamAttrs);
-      for (ValueRefList::iterator I = yyvsp[-2].ValueRefList->begin(), E = yyvsp[-2].ValueRefList->end(); I != E; ++I) {
+      ParamAttrs.push_back((yyvsp[0].ParamAttrs));
+      for (ValueRefList::iterator I = (yyvsp[-2].ValueRefList)->begin(), E = (yyvsp[-2].ValueRefList)->end(); I != E; ++I) {
         const Type *Ty = I->Val->getType();
         if (Ty == Type::VoidTy)
           GEN_ERROR("Short call syntax cannot be used with varargs");
@@ -4557,16 +5388,16 @@
         ParamAttrs.push_back(I->Attrs);
       }
 
-      Ty = FunctionType::get(yyvsp[-5].TypeVal->get(), ParamTypes, false, ParamAttrs);
+      Ty = FunctionType::get((yyvsp[-5].TypeVal)->get(), ParamTypes, false, ParamAttrs);
       PFTy = PointerType::get(Ty);
     }
 
-    Value *V = getVal(PFTy, yyvsp[-4].ValIDVal);   // Get the function we're calling...
+    Value *V = getVal(PFTy, (yyvsp[-4].ValIDVal));   // Get the function we're calling...
     CHECK_FOR_ERROR
 
     // Check the arguments 
     ValueList Args;
-    if (yyvsp[-2].ValueRefList->empty()) {                                   // Has no arguments?
+    if ((yyvsp[-2].ValueRefList)->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 "
@@ -4577,7 +5408,7 @@
       //
       FunctionType::param_iterator I = Ty->param_begin();
       FunctionType::param_iterator E = Ty->param_end();
-      ValueRefList::iterator ArgI = yyvsp[-2].ValueRefList->begin(), ArgE = yyvsp[-2].ValueRefList->end();
+      ValueRefList::iterator ArgI = (yyvsp[-2].ValueRefList)->begin(), ArgE = (yyvsp[-2].ValueRefList)->end();
 
       for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
         if (ArgI->Val->getType() != *I)
@@ -4594,364 +5425,427 @@
     }
     // Create the call node
     CallInst *CI = new CallInst(V, Args);
-    CI->setTailCall(yyvsp[-7].BoolVal);
-    CI->setCallingConv(yyvsp[-6].UIntVal);
-    yyval.InstVal = CI;
-    delete yyvsp[-2].ValueRefList;
+    CI->setTailCall((yyvsp[-7].BoolVal));
+    CI->setCallingConv((yyvsp[-6].UIntVal));
+    (yyval.InstVal) = CI;
+    delete (yyvsp[-2].ValueRefList);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 274:
-#line 2770 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.InstVal = yyvsp[0].InstVal;
+  ;}
+    break;
+
+  case 275:
+#line 2767 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.InstVal) = (yyvsp[0].InstVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 275:
-#line 2775 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BoolVal = true;
+  ;}
+    break;
+
+  case 276:
+#line 2772 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.BoolVal) = true;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 276:
-#line 2779 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BoolVal = false;
+  ;}
+    break;
+
+  case 277:
+#line 2776 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.BoolVal) = false;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 277:
-#line 2786 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 278:
+#line 2783 "/proj/llvm/llvm-4/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[-1].TypeVal))->getDescription());
+    (yyval.InstVal) = new MallocInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
+    delete (yyvsp[-1].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 278:
-#line 2793 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 279:
+#line 2790 "/proj/llvm/llvm-4/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[-4].TypeVal))->getDescription());
+    Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.InstVal = new MallocInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
-    delete yyvsp[-4].TypeVal;
-  ;
-    break;}
-case 279:
-#line 2801 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    (yyval.InstVal) = new MallocInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
+    delete (yyvsp[-4].TypeVal);
+  ;}
+    break;
+
+  case 280:
+#line 2798 "/proj/llvm/llvm-4/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[-1].TypeVal))->getDescription());
+    (yyval.InstVal) = new AllocaInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
+    delete (yyvsp[-1].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 280:
-#line 2808 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 281:
+#line 2805 "/proj/llvm/llvm-4/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[-4].TypeVal))->getDescription());
+    Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.InstVal = new AllocaInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
-    delete yyvsp[-4].TypeVal;
-  ;
-    break;}
-case 281:
-#line 2816 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!isa<PointerType>(yyvsp[0].ValueVal->getType()))
+    (yyval.InstVal) = new AllocaInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
+    delete (yyvsp[-4].TypeVal);
+  ;}
+    break;
+
+  case 282:
+#line 2813 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!isa<PointerType>((yyvsp[0].ValueVal)->getType()))
       GEN_ERROR("Trying to free nonpointer type " + 
-                     yyvsp[0].ValueVal->getType()->getDescription() + "!");
-    yyval.InstVal = new FreeInst(yyvsp[0].ValueVal);
+                     (yyvsp[0].ValueVal)->getType()->getDescription() + "!");
+    (yyval.InstVal) = new FreeInst((yyvsp[0].ValueVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 282:
-#line 2824 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 283:
+#line 2821 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
-    if (!isa<PointerType>(yyvsp[-1].TypeVal->get()))
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
+    if (!isa<PointerType>((yyvsp[-1].TypeVal)->get()))
       GEN_ERROR("Can't load from nonpointer type: " +
-                     (*yyvsp[-1].TypeVal)->getDescription());
-    if (!cast<PointerType>(yyvsp[-1].TypeVal->get())->getElementType()->isFirstClassType())
+                     (*(yyvsp[-1].TypeVal))->getDescription());
+    if (!cast<PointerType>((yyvsp[-1].TypeVal)->get())->getElementType()->isFirstClassType())
       GEN_ERROR("Can't load from pointer of non-first-class type: " +
-                     (*yyvsp[-1].TypeVal)->getDescription());
-    Value* tmpVal = getVal(*yyvsp[-1].TypeVal, yyvsp[0].ValIDVal);
+                     (*(yyvsp[-1].TypeVal))->getDescription());
+    Value* tmpVal = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.InstVal = new LoadInst(tmpVal, "", yyvsp[-3].BoolVal);
-    delete yyvsp[-1].TypeVal;
-  ;
-    break;}
-case 283:
-#line 2838 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    (yyval.InstVal) = new LoadInst(tmpVal, "", (yyvsp[-3].BoolVal));
+    delete (yyvsp[-1].TypeVal);
+  ;}
+    break;
+
+  case 284:
+#line 2835 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
-    const PointerType *PT = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
+    const PointerType *PT = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
     if (!PT)
       GEN_ERROR("Can't store to a nonpointer type: " +
-                     (*yyvsp[-1].TypeVal)->getDescription());
+                     (*(yyvsp[-1].TypeVal))->getDescription());
     const Type *ElTy = PT->getElementType();
-    if (ElTy != yyvsp[-3].ValueVal->getType())
-      GEN_ERROR("Can't store '" + yyvsp[-3].ValueVal->getType()->getDescription() +
+    if (ElTy != (yyvsp[-3].ValueVal)->getType())
+      GEN_ERROR("Can't store '" + (yyvsp[-3].ValueVal)->getType()->getDescription() +
                      "' into space of type '" + ElTy->getDescription() + "'!");
 
-    Value* tmpVal = getVal(*yyvsp[-1].TypeVal, yyvsp[0].ValIDVal);
+    Value* tmpVal = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.InstVal = new StoreInst(yyvsp[-3].ValueVal, tmpVal, yyvsp[-5].BoolVal);
-    delete yyvsp[-1].TypeVal;
-  ;
-    break;}
-case 284:
-#line 2855 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    (yyval.InstVal) = new StoreInst((yyvsp[-3].ValueVal), tmpVal, (yyvsp[-5].BoolVal));
+    delete (yyvsp[-1].TypeVal);
+  ;}
+    break;
+
+  case 285:
+#line 2852 "/proj/llvm/llvm-4/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].TypeVal))->getDescription());
+    if (!isa<PointerType>((yyvsp[-2].TypeVal)->get()))
       GEN_ERROR("getelementptr insn requires pointer operand!");
 
-    if (!GetElementPtrInst::getIndexedType(*yyvsp[-2].TypeVal, *yyvsp[0].ValueList, true))
+    if (!GetElementPtrInst::getIndexedType(*(yyvsp[-2].TypeVal), *(yyvsp[0].ValueList), true))
       GEN_ERROR("Invalid getelementptr indices for type '" +
-                     (*yyvsp[-2].TypeVal)->getDescription()+ "'!");
-    Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal);
+                     (*(yyvsp[-2].TypeVal))->getDescription()+ "'!");
+    Value* tmpVal = getVal(*(yyvsp[-2].TypeVal), (yyvsp[-1].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.InstVal = new GetElementPtrInst(tmpVal, *yyvsp[0].ValueList);
-    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"
+    (yyval.InstVal) = new GetElementPtrInst(tmpVal, *(yyvsp[0].ValueList));
+    delete (yyvsp[-2].TypeVal); 
+    delete (yyvsp[0].ValueList);
+  ;}
+    break;
+
+
+      default: break;
+    }
+
+/* Line 1126 of yacc.c.  */
+#line 5581 "llvmAsmParser.tab.c"
 
   yyvsp -= yylen;
   yyssp -= yylen;
-#ifdef YYLSP_NEEDED
-  yylsp -= yylen;
-#endif
 
-#if YYDEBUG != 0
-  if (yydebug)
-    {
-      short *ssp1 = yyss - 1;
-      fprintf (stderr, "state stack now");
-      while (ssp1 != yyssp)
-	fprintf (stderr, " %d", *++ssp1);
-      fprintf (stderr, "\n");
-    }
-#endif
+
+  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;
-
-#ifdef YYERROR_VERBOSE
+#if YYERROR_VERBOSE
       yyn = yypact[yystate];
 
-      if (yyn > YYFLAG && yyn < YYLAST)
+      if (YYPACT_NINF < yyn && yyn < YYLAST)
 	{
-	  int size = 0;
-	  char *msg;
-	  int x, count;
+	  int yytype = YYTRANSLATE (yychar);
+	  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+	  YYSIZE_T yysize = yysize0;
+	  YYSIZE_T yysize1;
+	  int yysize_overflow = 0;
+	  char *yymsg = 0;
+#	  define YYERROR_VERBOSE_ARGS_MAXIMUM 5
+	  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+	  int yyx;
 
-	  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)
+#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;
+	  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 && yysize <= YYSTACK_ALLOC_MAXIMUM)
+	    yymsg = (char *) YYSTACK_ALLOC (yysize);
+	  if (yymsg)
 	    {
-	      strcpy(msg, "parse error");
-
-	      if (count < 5)
+	      /* Avoid sprintf, as that infringes on the user's name space.
+		 Don't have undefined behavior even if the translation
+		 produced a string with the wrong number of "%s"s.  */
+	      char *yyp = yymsg;
+	      int yyi = 0;
+	      while ((*yyp = *yyf))
 		{
-		  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++;
-		      }
+		  if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+		    {
+		      yyp += yytnamerr (yyp, yyarg[yyi++]);
+		      yyf += 2;
+		    }
+		  else
+		    {
+		      yyp++;
+		      yyf++;
+		    }
 		}
-	      yyerror(msg);
-	      free(msg);
+	      yyerror (yymsg);
+	      YYSTACK_FREE (yymsg);
 	    }
 	  else
-	    yyerror ("parse error; also virtual memory exceeded");
+	    {
+	      yyerror (YY_("syntax error"));
+	      goto yyexhaustedlab;
+	    }
 	}
       else
 #endif /* YYERROR_VERBOSE */
-	yyerror("parse error");
+	yyerror (YY_("syntax error"));
     }
 
-  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 (0)
+     goto yyerrorlab;
+
+yyvsp -= yylen;
+  yyssp -= yylen;
+  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;
+      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);
+  while (yyssp != yyss)
+    {
+      yydestruct ("Cleanup: popping",
+		  yystos[*yyssp], yyvsp);
+      YYPOPSTACK;
     }
-  return 1;
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+  return yyresult;
 }
-#line 2872 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+
+
+#line 2869 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
 
 
 // common code from the two 'RunVMAsmParser' functions
@@ -5001,3 +5895,4 @@
   GenerateError(errMsg);
   return 0;
 }
+
diff --git a/lib/AsmParser/llvmAsmParser.h.cvs b/lib/AsmParser/llvmAsmParser.h.cvs
index bf92ae0..e2aee7e 100644
--- a/lib/AsmParser/llvmAsmParser.h.cvs
+++ b/lib/AsmParser/llvmAsmParser.h.cvs
@@ -1,4 +1,304 @@
-typedef union {
+/* A Bison parser, made by GNU Bison 2.1.  */
+
+/* Skeleton parser for Yacc-like parsing with Bison,
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 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, 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.  */
+
+/* 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,
+     SINTVAL = 260,
+     UINTVAL = 261,
+     FPVAL = 262,
+     VOID = 263,
+     INTTYPE = 264,
+     FLOAT = 265,
+     DOUBLE = 266,
+     LABEL = 267,
+     TYPE = 268,
+     VAR_ID = 269,
+     LABELSTR = 270,
+     STRINGCONSTANT = 271,
+     IMPLEMENTATION = 272,
+     ZEROINITIALIZER = 273,
+     TRUETOK = 274,
+     FALSETOK = 275,
+     BEGINTOK = 276,
+     ENDTOK = 277,
+     DECLARE = 278,
+     DEFINE = 279,
+     GLOBAL = 280,
+     CONSTANT = 281,
+     SECTION = 282,
+     VOLATILE = 283,
+     TO = 284,
+     DOTDOTDOT = 285,
+     NULL_TOK = 286,
+     UNDEF = 287,
+     INTERNAL = 288,
+     LINKONCE = 289,
+     WEAK = 290,
+     APPENDING = 291,
+     DLLIMPORT = 292,
+     DLLEXPORT = 293,
+     EXTERN_WEAK = 294,
+     OPAQUE = 295,
+     EXTERNAL = 296,
+     TARGET = 297,
+     TRIPLE = 298,
+     ENDIAN = 299,
+     POINTERSIZE = 300,
+     LITTLE = 301,
+     BIG = 302,
+     ALIGN = 303,
+     DEPLIBS = 304,
+     CALL = 305,
+     TAIL = 306,
+     ASM_TOK = 307,
+     MODULE = 308,
+     SIDEEFFECT = 309,
+     CC_TOK = 310,
+     CCC_TOK = 311,
+     CSRETCC_TOK = 312,
+     FASTCC_TOK = 313,
+     COLDCC_TOK = 314,
+     X86_STDCALLCC_TOK = 315,
+     X86_FASTCALLCC_TOK = 316,
+     DATALAYOUT = 317,
+     RET = 318,
+     BR = 319,
+     SWITCH = 320,
+     INVOKE = 321,
+     UNWIND = 322,
+     UNREACHABLE = 323,
+     ADD = 324,
+     SUB = 325,
+     MUL = 326,
+     UDIV = 327,
+     SDIV = 328,
+     FDIV = 329,
+     UREM = 330,
+     SREM = 331,
+     FREM = 332,
+     AND = 333,
+     OR = 334,
+     XOR = 335,
+     ICMP = 336,
+     FCMP = 337,
+     EQ = 338,
+     NE = 339,
+     SLT = 340,
+     SGT = 341,
+     SLE = 342,
+     SGE = 343,
+     ULT = 344,
+     UGT = 345,
+     ULE = 346,
+     UGE = 347,
+     OEQ = 348,
+     ONE = 349,
+     OLT = 350,
+     OGT = 351,
+     OLE = 352,
+     OGE = 353,
+     ORD = 354,
+     UNO = 355,
+     UEQ = 356,
+     UNE = 357,
+     MALLOC = 358,
+     ALLOCA = 359,
+     FREE = 360,
+     LOAD = 361,
+     STORE = 362,
+     GETELEMENTPTR = 363,
+     TRUNC = 364,
+     ZEXT = 365,
+     SEXT = 366,
+     FPTRUNC = 367,
+     FPEXT = 368,
+     BITCAST = 369,
+     UITOFP = 370,
+     SITOFP = 371,
+     FPTOUI = 372,
+     FPTOSI = 373,
+     INTTOPTR = 374,
+     PTRTOINT = 375,
+     PHI_TOK = 376,
+     SELECT = 377,
+     SHL = 378,
+     LSHR = 379,
+     ASHR = 380,
+     VAARG = 381,
+     EXTRACTELEMENT = 382,
+     INSERTELEMENT = 383,
+     SHUFFLEVECTOR = 384,
+     NORETURN = 385,
+     DEFAULT = 386,
+     HIDDEN = 387
+   };
+#endif
+/* Tokens.  */
+#define ESINT64VAL 258
+#define EUINT64VAL 259
+#define SINTVAL 260
+#define UINTVAL 261
+#define FPVAL 262
+#define VOID 263
+#define INTTYPE 264
+#define FLOAT 265
+#define DOUBLE 266
+#define LABEL 267
+#define TYPE 268
+#define VAR_ID 269
+#define LABELSTR 270
+#define STRINGCONSTANT 271
+#define IMPLEMENTATION 272
+#define ZEROINITIALIZER 273
+#define TRUETOK 274
+#define FALSETOK 275
+#define BEGINTOK 276
+#define ENDTOK 277
+#define DECLARE 278
+#define DEFINE 279
+#define GLOBAL 280
+#define CONSTANT 281
+#define SECTION 282
+#define VOLATILE 283
+#define TO 284
+#define DOTDOTDOT 285
+#define NULL_TOK 286
+#define UNDEF 287
+#define INTERNAL 288
+#define LINKONCE 289
+#define WEAK 290
+#define APPENDING 291
+#define DLLIMPORT 292
+#define DLLEXPORT 293
+#define EXTERN_WEAK 294
+#define OPAQUE 295
+#define EXTERNAL 296
+#define TARGET 297
+#define TRIPLE 298
+#define ENDIAN 299
+#define POINTERSIZE 300
+#define LITTLE 301
+#define BIG 302
+#define ALIGN 303
+#define DEPLIBS 304
+#define CALL 305
+#define TAIL 306
+#define ASM_TOK 307
+#define MODULE 308
+#define SIDEEFFECT 309
+#define CC_TOK 310
+#define CCC_TOK 311
+#define CSRETCC_TOK 312
+#define FASTCC_TOK 313
+#define COLDCC_TOK 314
+#define X86_STDCALLCC_TOK 315
+#define X86_FASTCALLCC_TOK 316
+#define DATALAYOUT 317
+#define RET 318
+#define BR 319
+#define SWITCH 320
+#define INVOKE 321
+#define UNWIND 322
+#define UNREACHABLE 323
+#define ADD 324
+#define SUB 325
+#define MUL 326
+#define UDIV 327
+#define SDIV 328
+#define FDIV 329
+#define UREM 330
+#define SREM 331
+#define FREM 332
+#define AND 333
+#define OR 334
+#define XOR 335
+#define ICMP 336
+#define FCMP 337
+#define EQ 338
+#define NE 339
+#define SLT 340
+#define SGT 341
+#define SLE 342
+#define SGE 343
+#define ULT 344
+#define UGT 345
+#define ULE 346
+#define UGE 347
+#define OEQ 348
+#define ONE 349
+#define OLT 350
+#define OGT 351
+#define OLE 352
+#define OGE 353
+#define ORD 354
+#define UNO 355
+#define UEQ 356
+#define UNE 357
+#define MALLOC 358
+#define ALLOCA 359
+#define FREE 360
+#define LOAD 361
+#define STORE 362
+#define GETELEMENTPTR 363
+#define TRUNC 364
+#define ZEXT 365
+#define SEXT 366
+#define FPTRUNC 367
+#define FPEXT 368
+#define BITCAST 369
+#define UITOFP 370
+#define SITOFP 371
+#define FPTOUI 372
+#define FPTOSI 373
+#define INTTOPTR 374
+#define PTRTOINT 375
+#define PHI_TOK 376
+#define SELECT 377
+#define SHL 378
+#define LSHR 379
+#define ASHR 380
+#define VAARG 381
+#define EXTRACTELEMENT 382
+#define INSERTELEMENT 383
+#define SHUFFLEVECTOR 384
+#define NORETURN 385
+#define DEFAULT 386
+#define HIDDEN 387
+
+
+
+
+#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
+#line 883 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+typedef union YYSTYPE {
   llvm::Module                           *ModuleVal;
   llvm::Function                         *FunctionVal;
   llvm::BasicBlock                       *BasicBlockVal;
@@ -44,136 +344,14 @@
   llvm::ICmpInst::Predicate         IPredicate;
   llvm::FCmpInst::Predicate         FPredicate;
 } YYSTYPE;
-#define	ESINT64VAL	257
-#define	EUINT64VAL	258
-#define	SINTVAL	259
-#define	UINTVAL	260
-#define	FPVAL	261
-#define	VOID	262
-#define	INTTYPE	263
-#define	FLOAT	264
-#define	DOUBLE	265
-#define	LABEL	266
-#define	TYPE	267
-#define	VAR_ID	268
-#define	LABELSTR	269
-#define	STRINGCONSTANT	270
-#define	IMPLEMENTATION	271
-#define	ZEROINITIALIZER	272
-#define	TRUETOK	273
-#define	FALSETOK	274
-#define	BEGINTOK	275
-#define	ENDTOK	276
-#define	DECLARE	277
-#define	DEFINE	278
-#define	GLOBAL	279
-#define	CONSTANT	280
-#define	SECTION	281
-#define	VOLATILE	282
-#define	TO	283
-#define	DOTDOTDOT	284
-#define	NULL_TOK	285
-#define	UNDEF	286
-#define	INTERNAL	287
-#define	LINKONCE	288
-#define	WEAK	289
-#define	APPENDING	290
-#define	DLLIMPORT	291
-#define	DLLEXPORT	292
-#define	EXTERN_WEAK	293
-#define	OPAQUE	294
-#define	EXTERNAL	295
-#define	TARGET	296
-#define	TRIPLE	297
-#define	ENDIAN	298
-#define	POINTERSIZE	299
-#define	LITTLE	300
-#define	BIG	301
-#define	ALIGN	302
-#define	DEPLIBS	303
-#define	CALL	304
-#define	TAIL	305
-#define	ASM_TOK	306
-#define	MODULE	307
-#define	SIDEEFFECT	308
-#define	CC_TOK	309
-#define	CCC_TOK	310
-#define	CSRETCC_TOK	311
-#define	FASTCC_TOK	312
-#define	COLDCC_TOK	313
-#define	X86_STDCALLCC_TOK	314
-#define	X86_FASTCALLCC_TOK	315
-#define	DATALAYOUT	316
-#define	RET	317
-#define	BR	318
-#define	SWITCH	319
-#define	INVOKE	320
-#define	UNWIND	321
-#define	UNREACHABLE	322
-#define	ADD	323
-#define	SUB	324
-#define	MUL	325
-#define	UDIV	326
-#define	SDIV	327
-#define	FDIV	328
-#define	UREM	329
-#define	SREM	330
-#define	FREM	331
-#define	AND	332
-#define	OR	333
-#define	XOR	334
-#define	ICMP	335
-#define	FCMP	336
-#define	EQ	337
-#define	NE	338
-#define	SLT	339
-#define	SGT	340
-#define	SLE	341
-#define	SGE	342
-#define	ULT	343
-#define	UGT	344
-#define	ULE	345
-#define	UGE	346
-#define	OEQ	347
-#define	ONE	348
-#define	OLT	349
-#define	OGT	350
-#define	OLE	351
-#define	OGE	352
-#define	ORD	353
-#define	UNO	354
-#define	UEQ	355
-#define	UNE	356
-#define	MALLOC	357
-#define	ALLOCA	358
-#define	FREE	359
-#define	LOAD	360
-#define	STORE	361
-#define	GETELEMENTPTR	362
-#define	TRUNC	363
-#define	ZEXT	364
-#define	SEXT	365
-#define	FPTRUNC	366
-#define	FPEXT	367
-#define	BITCAST	368
-#define	UITOFP	369
-#define	SITOFP	370
-#define	FPTOUI	371
-#define	FPTOSI	372
-#define	INTTOPTR	373
-#define	PTRTOINT	374
-#define	PHI_TOK	375
-#define	SELECT	376
-#define	SHL	377
-#define	LSHR	378
-#define	ASHR	379
-#define	VAARG	380
-#define	EXTRACTELEMENT	381
-#define	INSERTELEMENT	382
-#define	SHUFFLEVECTOR	383
-#define	NORETURN	384
-#define	DEFAULT	385
-#define	HIDDEN	386
-
+/* Line 1447 of yacc.c.  */
+#line 349 "llvmAsmParser.tab.h"
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
 
 extern YYSTYPE llvmAsmlval;
+
+
+
diff --git a/lib/AsmParser/llvmAsmParser.y.cvs b/lib/AsmParser/llvmAsmParser.y.cvs
index 59aaf25..af1a4ab 100644
--- a/lib/AsmParser/llvmAsmParser.y.cvs
+++ b/lib/AsmParser/llvmAsmParser.y.cvs
@@ -1708,14 +1708,12 @@
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*$5)->getDescription());
     Constant *Val = $3;
-    const Type *Ty = $5->get();
-    if (!Val->getType()->isFirstClassType())
-      GEN_ERROR("cast constant expression from a non-primitive type: '" +
-                     Val->getType()->getDescription() + "'!");
-    if (!Ty->isFirstClassType())
-      GEN_ERROR("cast constant expression to a non-primitive type: '" +
-                Ty->getDescription() + "'!");
-    $$ = ConstantExpr::getCast($1, $3, $5->get());
+    const Type *DestTy = $5->get();
+    if (!CastInst::castIsValid($1, $3, DestTy))
+      GEN_ERROR("invalid cast opcode for cast from '" +
+                Val->getType()->getDescription() + "' to '" +
+                DestTy->getDescription() + "'!"); 
+    $$ = ConstantExpr::getCast($1, $3, DestTy);
     delete $5;
   }
   | GETELEMENTPTR '(' ConstVal IndexList ')' {
@@ -2647,13 +2645,12 @@
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*$4)->getDescription());
     Value* Val = $2;
-    const Type* Ty = $4->get();
-    if (!Val->getType()->isFirstClassType())
-      GEN_ERROR("cast from a non-primitive type: '" +
-                Val->getType()->getDescription() + "'!");
-    if (!Ty->isFirstClassType())
-      GEN_ERROR("cast to a non-primitive type: '" + Ty->getDescription() +"'!");
-    $$ = CastInst::create($1, Val, $4->get());
+    const Type* DestTy = $4->get();
+    if (!CastInst::castIsValid($1, Val, DestTy))
+      GEN_ERROR("invalid cast opcode for cast from '" +
+                Val->getType()->getDescription() + "' to '" +
+                DestTy->getDescription() + "'!"); 
+    $$ = CastInst::create($1, Val, DestTy);
     delete $4;
   }
   | SELECT ResolvedVal ',' ResolvedVal ',' ResolvedVal {
