diff --git a/lib/AsmParser/llvmAsmParser.cpp.cvs b/lib/AsmParser/llvmAsmParser.cpp.cvs
index dbfc7e9..a6192c1 100644
--- a/lib/AsmParser/llvmAsmParser.cpp.cvs
+++ b/lib/AsmParser/llvmAsmParser.cpp.cvs
@@ -1,382 +1,165 @@
-/* A Bison parser, made by GNU Bison 2.3.  */
 
-/* Skeleton implementation for Bison's Yacc-like parsers in C
+/*  A Bison parser, made from /Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y
+    by GNU Bison version 1.28  */
 
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   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, you may create a larger work that contains
-   part or all of the Bison parser skeleton and distribute that work
-   under terms of your choice, so long as that work isn't itself a
-   parser generator using the skeleton or a modified version thereof
-   as a parser skeleton.  Alternatively, if you modify or redistribute
-   the parser skeleton itself, you may (at your option) remove this
-   special exception, which will cause the skeleton and the resulting
-   Bison output files to be licensed under the GNU General Public
-   License without this special exception.
-
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.  */
-
-/* C LALR(1) parser skeleton written by Richard Stallman, by
-   simplifying the original so-called "semantic" parser.  */
-
-/* All symbols defined below should begin with yy or YY, to avoid
-   infringing on user name space.  This should be done even for local
-   variables, as they might otherwise be expanded by user macros.
-   There are some unavoidable exceptions within include files to
-   define necessary library symbols; they are noted "INFRINGES ON
-   USER NAME SPACE" below.  */
-
-/* Identify Bison output.  */
-#define YYBISON 1
-
-/* Bison version.  */
-#define YYBISON_VERSION "2.3"
-
-/* Skeleton name.  */
-#define YYSKELETON_NAME "yacc.c"
-
-/* Pure parsers.  */
-#define YYPURE 0
-
-/* Using locations.  */
-#define YYLSP_NEEDED 0
-
-/* Substitute the variable and function names.  */
 #define yyparse llvmAsmparse
-#define yylex   llvmAsmlex
+#define yylex llvmAsmlex
 #define yyerror llvmAsmerror
-#define yylval  llvmAsmlval
-#define yychar  llvmAsmchar
+#define yylval llvmAsmlval
+#define yychar llvmAsmchar
 #define yydebug llvmAsmdebug
 #define yynerrs llvmAsmnerrs
+#define	ESINT64VAL	257
+#define	EUINT64VAL	258
+#define	ESAPINTVAL	259
+#define	EUAPINTVAL	260
+#define	LOCALVAL_ID	261
+#define	GLOBALVAL_ID	262
+#define	FPVAL	263
+#define	VOID	264
+#define	INTTYPE	265
+#define	FLOAT	266
+#define	DOUBLE	267
+#define	X86_FP80	268
+#define	FP128	269
+#define	PPC_FP128	270
+#define	LABEL	271
+#define	TYPE	272
+#define	LOCALVAR	273
+#define	GLOBALVAR	274
+#define	LABELSTR	275
+#define	STRINGCONSTANT	276
+#define	ATSTRINGCONSTANT	277
+#define	PCTSTRINGCONSTANT	278
+#define	ZEROINITIALIZER	279
+#define	TRUETOK	280
+#define	FALSETOK	281
+#define	BEGINTOK	282
+#define	ENDTOK	283
+#define	DECLARE	284
+#define	DEFINE	285
+#define	GLOBAL	286
+#define	CONSTANT	287
+#define	SECTION	288
+#define	ALIAS	289
+#define	VOLATILE	290
+#define	THREAD_LOCAL	291
+#define	TO	292
+#define	DOTDOTDOT	293
+#define	NULL_TOK	294
+#define	UNDEF	295
+#define	INTERNAL	296
+#define	LINKONCE	297
+#define	WEAK	298
+#define	APPENDING	299
+#define	DLLIMPORT	300
+#define	DLLEXPORT	301
+#define	EXTERN_WEAK	302
+#define	OPAQUE	303
+#define	EXTERNAL	304
+#define	TARGET	305
+#define	TRIPLE	306
+#define	ALIGN	307
+#define	ADDRSPACE	308
+#define	DEPLIBS	309
+#define	CALL	310
+#define	TAIL	311
+#define	ASM_TOK	312
+#define	MODULE	313
+#define	SIDEEFFECT	314
+#define	CC_TOK	315
+#define	CCC_TOK	316
+#define	FASTCC_TOK	317
+#define	COLDCC_TOK	318
+#define	X86_STDCALLCC_TOK	319
+#define	X86_FASTCALLCC_TOK	320
+#define	DATALAYOUT	321
+#define	RET	322
+#define	BR	323
+#define	SWITCH	324
+#define	INVOKE	325
+#define	UNWIND	326
+#define	UNREACHABLE	327
+#define	ADD	328
+#define	SUB	329
+#define	MUL	330
+#define	UDIV	331
+#define	SDIV	332
+#define	FDIV	333
+#define	UREM	334
+#define	SREM	335
+#define	FREM	336
+#define	AND	337
+#define	OR	338
+#define	XOR	339
+#define	SHL	340
+#define	LSHR	341
+#define	ASHR	342
+#define	ICMP	343
+#define	FCMP	344
+#define	EQ	345
+#define	NE	346
+#define	SLT	347
+#define	SGT	348
+#define	SLE	349
+#define	SGE	350
+#define	ULT	351
+#define	UGT	352
+#define	ULE	353
+#define	UGE	354
+#define	OEQ	355
+#define	ONE	356
+#define	OLT	357
+#define	OGT	358
+#define	OLE	359
+#define	OGE	360
+#define	ORD	361
+#define	UNO	362
+#define	UEQ	363
+#define	UNE	364
+#define	MALLOC	365
+#define	ALLOCA	366
+#define	FREE	367
+#define	LOAD	368
+#define	STORE	369
+#define	GETELEMENTPTR	370
+#define	TRUNC	371
+#define	ZEXT	372
+#define	SEXT	373
+#define	FPTRUNC	374
+#define	FPEXT	375
+#define	BITCAST	376
+#define	UITOFP	377
+#define	SITOFP	378
+#define	FPTOUI	379
+#define	FPTOSI	380
+#define	INTTOPTR	381
+#define	PTRTOINT	382
+#define	PHI_TOK	383
+#define	SELECT	384
+#define	VAARG	385
+#define	EXTRACTELEMENT	386
+#define	INSERTELEMENT	387
+#define	SHUFFLEVECTOR	388
+#define	SIGNEXT	389
+#define	ZEROEXT	390
+#define	NORETURN	391
+#define	INREG	392
+#define	SRET	393
+#define	NOUNWIND	394
+#define	NOALIAS	395
+#define	BYVAL	396
+#define	NEST	397
+#define	READNONE	398
+#define	READONLY	399
+#define	GC	400
+#define	DEFAULT	401
+#define	HIDDEN	402
+#define	PROTECTED	403
 
-
-/* Tokens.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     ESINT64VAL = 258,
-     EUINT64VAL = 259,
-     ESAPINTVAL = 260,
-     EUAPINTVAL = 261,
-     LOCALVAL_ID = 262,
-     GLOBALVAL_ID = 263,
-     FPVAL = 264,
-     VOID = 265,
-     INTTYPE = 266,
-     FLOAT = 267,
-     DOUBLE = 268,
-     X86_FP80 = 269,
-     FP128 = 270,
-     PPC_FP128 = 271,
-     LABEL = 272,
-     TYPE = 273,
-     LOCALVAR = 274,
-     GLOBALVAR = 275,
-     LABELSTR = 276,
-     STRINGCONSTANT = 277,
-     ATSTRINGCONSTANT = 278,
-     PCTSTRINGCONSTANT = 279,
-     ZEROINITIALIZER = 280,
-     TRUETOK = 281,
-     FALSETOK = 282,
-     BEGINTOK = 283,
-     ENDTOK = 284,
-     DECLARE = 285,
-     DEFINE = 286,
-     GLOBAL = 287,
-     CONSTANT = 288,
-     SECTION = 289,
-     ALIAS = 290,
-     VOLATILE = 291,
-     THREAD_LOCAL = 292,
-     TO = 293,
-     DOTDOTDOT = 294,
-     NULL_TOK = 295,
-     UNDEF = 296,
-     INTERNAL = 297,
-     LINKONCE = 298,
-     WEAK = 299,
-     APPENDING = 300,
-     DLLIMPORT = 301,
-     DLLEXPORT = 302,
-     EXTERN_WEAK = 303,
-     OPAQUE = 304,
-     EXTERNAL = 305,
-     TARGET = 306,
-     TRIPLE = 307,
-     ALIGN = 308,
-     ADDRSPACE = 309,
-     DEPLIBS = 310,
-     CALL = 311,
-     TAIL = 312,
-     ASM_TOK = 313,
-     MODULE = 314,
-     SIDEEFFECT = 315,
-     CC_TOK = 316,
-     CCC_TOK = 317,
-     FASTCC_TOK = 318,
-     COLDCC_TOK = 319,
-     X86_STDCALLCC_TOK = 320,
-     X86_FASTCALLCC_TOK = 321,
-     DATALAYOUT = 322,
-     RET = 323,
-     BR = 324,
-     SWITCH = 325,
-     INVOKE = 326,
-     UNWIND = 327,
-     UNREACHABLE = 328,
-     ADD = 329,
-     SUB = 330,
-     MUL = 331,
-     UDIV = 332,
-     SDIV = 333,
-     FDIV = 334,
-     UREM = 335,
-     SREM = 336,
-     FREM = 337,
-     AND = 338,
-     OR = 339,
-     XOR = 340,
-     SHL = 341,
-     LSHR = 342,
-     ASHR = 343,
-     ICMP = 344,
-     FCMP = 345,
-     EQ = 346,
-     NE = 347,
-     SLT = 348,
-     SGT = 349,
-     SLE = 350,
-     SGE = 351,
-     ULT = 352,
-     UGT = 353,
-     ULE = 354,
-     UGE = 355,
-     OEQ = 356,
-     ONE = 357,
-     OLT = 358,
-     OGT = 359,
-     OLE = 360,
-     OGE = 361,
-     ORD = 362,
-     UNO = 363,
-     UEQ = 364,
-     UNE = 365,
-     MALLOC = 366,
-     ALLOCA = 367,
-     FREE = 368,
-     LOAD = 369,
-     STORE = 370,
-     GETELEMENTPTR = 371,
-     TRUNC = 372,
-     ZEXT = 373,
-     SEXT = 374,
-     FPTRUNC = 375,
-     FPEXT = 376,
-     BITCAST = 377,
-     UITOFP = 378,
-     SITOFP = 379,
-     FPTOUI = 380,
-     FPTOSI = 381,
-     INTTOPTR = 382,
-     PTRTOINT = 383,
-     PHI_TOK = 384,
-     SELECT = 385,
-     VAARG = 386,
-     EXTRACTELEMENT = 387,
-     INSERTELEMENT = 388,
-     SHUFFLEVECTOR = 389,
-     SIGNEXT = 390,
-     ZEROEXT = 391,
-     NORETURN = 392,
-     INREG = 393,
-     SRET = 394,
-     NOUNWIND = 395,
-     NOALIAS = 396,
-     BYVAL = 397,
-     NEST = 398,
-     READNONE = 399,
-     READONLY = 400,
-     GC = 401,
-     DEFAULT = 402,
-     HIDDEN = 403,
-     PROTECTED = 404
-   };
-#endif
-/* Tokens.  */
-#define ESINT64VAL 258
-#define EUINT64VAL 259
-#define ESAPINTVAL 260
-#define EUAPINTVAL 261
-#define LOCALVAL_ID 262
-#define GLOBALVAL_ID 263
-#define FPVAL 264
-#define VOID 265
-#define INTTYPE 266
-#define FLOAT 267
-#define DOUBLE 268
-#define X86_FP80 269
-#define FP128 270
-#define PPC_FP128 271
-#define LABEL 272
-#define TYPE 273
-#define LOCALVAR 274
-#define GLOBALVAR 275
-#define LABELSTR 276
-#define STRINGCONSTANT 277
-#define ATSTRINGCONSTANT 278
-#define PCTSTRINGCONSTANT 279
-#define ZEROINITIALIZER 280
-#define TRUETOK 281
-#define FALSETOK 282
-#define BEGINTOK 283
-#define ENDTOK 284
-#define DECLARE 285
-#define DEFINE 286
-#define GLOBAL 287
-#define CONSTANT 288
-#define SECTION 289
-#define ALIAS 290
-#define VOLATILE 291
-#define THREAD_LOCAL 292
-#define TO 293
-#define DOTDOTDOT 294
-#define NULL_TOK 295
-#define UNDEF 296
-#define INTERNAL 297
-#define LINKONCE 298
-#define WEAK 299
-#define APPENDING 300
-#define DLLIMPORT 301
-#define DLLEXPORT 302
-#define EXTERN_WEAK 303
-#define OPAQUE 304
-#define EXTERNAL 305
-#define TARGET 306
-#define TRIPLE 307
-#define ALIGN 308
-#define ADDRSPACE 309
-#define DEPLIBS 310
-#define CALL 311
-#define TAIL 312
-#define ASM_TOK 313
-#define MODULE 314
-#define SIDEEFFECT 315
-#define CC_TOK 316
-#define CCC_TOK 317
-#define FASTCC_TOK 318
-#define COLDCC_TOK 319
-#define X86_STDCALLCC_TOK 320
-#define X86_FASTCALLCC_TOK 321
-#define DATALAYOUT 322
-#define RET 323
-#define BR 324
-#define SWITCH 325
-#define INVOKE 326
-#define UNWIND 327
-#define UNREACHABLE 328
-#define ADD 329
-#define SUB 330
-#define MUL 331
-#define UDIV 332
-#define SDIV 333
-#define FDIV 334
-#define UREM 335
-#define SREM 336
-#define FREM 337
-#define AND 338
-#define OR 339
-#define XOR 340
-#define SHL 341
-#define LSHR 342
-#define ASHR 343
-#define ICMP 344
-#define FCMP 345
-#define EQ 346
-#define NE 347
-#define SLT 348
-#define SGT 349
-#define SLE 350
-#define SGE 351
-#define ULT 352
-#define UGT 353
-#define ULE 354
-#define UGE 355
-#define OEQ 356
-#define ONE 357
-#define OLT 358
-#define OGT 359
-#define OLE 360
-#define OGE 361
-#define ORD 362
-#define UNO 363
-#define UEQ 364
-#define UNE 365
-#define MALLOC 366
-#define ALLOCA 367
-#define FREE 368
-#define LOAD 369
-#define STORE 370
-#define GETELEMENTPTR 371
-#define TRUNC 372
-#define ZEXT 373
-#define SEXT 374
-#define FPTRUNC 375
-#define FPEXT 376
-#define BITCAST 377
-#define UITOFP 378
-#define SITOFP 379
-#define FPTOUI 380
-#define FPTOSI 381
-#define INTTOPTR 382
-#define PTRTOINT 383
-#define PHI_TOK 384
-#define SELECT 385
-#define VAARG 386
-#define EXTRACTELEMENT 387
-#define INSERTELEMENT 388
-#define SHUFFLEVECTOR 389
-#define SIGNEXT 390
-#define ZEROEXT 391
-#define NORETURN 392
-#define INREG 393
-#define SRET 394
-#define NOUNWIND 395
-#define NOALIAS 396
-#define BYVAL 397
-#define NEST 398
-#define READNONE 399
-#define READONLY 400
-#define GC 401
-#define DEFAULT 402
-#define HIDDEN 403
-#define PROTECTED 404
-
-
-
-
-/* Copy the first part of user declarations.  */
-#line 14 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
+#line 14 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
 
 #include "ParserInternals.h"
 #include "llvm/CallingConv.h"
@@ -1309,29 +1092,8 @@
 }
 
 
-
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
-#endif
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
-#line 947 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-{
+#line 947 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+typedef union {
   llvm::Module                           *ModuleVal;
   llvm::Function                         *FunctionVal;
   llvm::BasicBlock                       *BasicBlockVal;
@@ -1376,1894 +1138,1209 @@
   llvm::Instruction::OtherOps       OtherOpVal;
   llvm::ICmpInst::Predicate         IPredicate;
   llvm::FCmpInst::Predicate         FPredicate;
-}
-/* Line 187 of yacc.c.  */
-#line 1382 "llvmAsmParser.tab.c"
-	YYSTYPE;
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
+} YYSTYPE;
+#include <stdio.h>
+
+#ifndef __cplusplus
+#ifndef __STDC__
+#define const
+#endif
 #endif
 
 
 
-/* Copy the second part of user declarations.  */
+#define	YYFINAL		619
+#define	YYFLAG		-32768
+#define	YYNTBASE	164
 
+#define YYTRANSLATE(x) ((unsigned)(x) <= 403 ? yytranslate[x] : 247)
 
-/* Line 216 of yacc.c.  */
-#line 1395 "llvmAsmParser.tab.c"
+static const short yytranslate[] = {     0,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,   150,
+   151,   154,     2,   153,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,   159,
+   152,   160,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+   156,   155,   158,     2,     2,     2,     2,     2,   163,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,   157,
+     2,     2,   161,     2,   162,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     1,     3,     4,     5,     6,
+     7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+    27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+    37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+    47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+    57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+    77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+    87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+    97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+   107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+   117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+   127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+   137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
+   147,   148,   149
+};
 
-#ifdef short
-# undef short
+#if YYDEBUG != 0
+static const short yyprhs[] = {     0,
+     0,     2,     4,     6,     8,    10,    12,    14,    16,    18,
+    20,    22,    24,    26,    28,    30,    32,    34,    36,    38,
+    40,    42,    44,    46,    48,    50,    52,    54,    56,    58,
+    60,    62,    64,    66,    68,    70,    72,    74,    76,    78,
+    80,    82,    84,    86,    88,    90,    92,    94,    96,    98,
+   100,   102,   104,   106,   108,   110,   112,   114,   116,   118,
+   120,   122,   124,   126,   127,   132,   133,   136,   137,   139,
+   141,   143,   144,   147,   149,   151,   153,   155,   157,   159,
+   161,   163,   164,   166,   168,   170,   171,   173,   175,   176,
+   178,   180,   182,   184,   185,   187,   189,   190,   192,   194,
+   196,   198,   200,   203,   205,   207,   209,   211,   213,   215,
+   217,   219,   221,   222,   225,   227,   229,   231,   233,   235,
+   237,   238,   241,   242,   245,   246,   249,   250,   254,   257,
+   258,   260,   261,   265,   267,   270,   272,   274,   276,   278,
+   280,   282,   284,   286,   288,   292,   294,   297,   303,   309,
+   315,   321,   325,   328,   334,   339,   342,   344,   346,   348,
+   352,   354,   358,   360,   361,   363,   367,   372,   376,   380,
+   385,   390,   394,   401,   407,   410,   413,   416,   419,   422,
+   425,   428,   431,   434,   437,   440,   443,   450,   456,   465,
+   472,   479,   487,   495,   502,   511,   520,   524,   526,   528,
+   530,   532,   533,   536,   543,   545,   546,   548,   551,   552,
+   556,   557,   561,   565,   569,   573,   574,   583,   584,   594,
+   595,   605,   611,   614,   618,   620,   624,   628,   632,   636,
+   638,   639,   645,   649,   651,   655,   657,   658,   669,   671,
+   673,   678,   680,   682,   685,   689,   690,   692,   694,   696,
+   698,   700,   702,   704,   706,   708,   712,   714,   720,   722,
+   724,   726,   728,   730,   732,   735,   738,   741,   745,   748,
+   749,   751,   754,   757,   761,   771,   781,   790,   805,   807,
+   809,   816,   822,   825,   832,   840,   845,   850,   857,   864,
+   865,   866,   870,   873,   875,   881,   887,   894,   901,   906,
+   913,   918,   923,   930,   937,   940,   949,   951,   953,   954,
+   958,   965,   969,   976,   979,   985,   993
+};
+
+static const short yyrhs[] = {    74,
+     0,    75,     0,    76,     0,    77,     0,    78,     0,    79,
+     0,    80,     0,    81,     0,    82,     0,    86,     0,    87,
+     0,    88,     0,    83,     0,    84,     0,    85,     0,   117,
+     0,   118,     0,   119,     0,   120,     0,   121,     0,   122,
+     0,   123,     0,   124,     0,   125,     0,   126,     0,   127,
+     0,   128,     0,    91,     0,    92,     0,    93,     0,    94,
+     0,    95,     0,    96,     0,    97,     0,    98,     0,    99,
+     0,   100,     0,   101,     0,   102,     0,   103,     0,   104,
+     0,   105,     0,   106,     0,   107,     0,   108,     0,   109,
+     0,   110,     0,    97,     0,    98,     0,    99,     0,   100,
+     0,    26,     0,    27,     0,    11,     0,    12,     0,    13,
+     0,    16,     0,    15,     0,    14,     0,    19,     0,    22,
+     0,    24,     0,   171,     0,     0,    54,   150,     4,   151,
+     0,     0,   171,   152,     0,     0,    20,     0,    23,     0,
+   177,     0,     0,   175,   152,     0,    42,     0,    44,     0,
+    43,     0,    45,     0,    47,     0,    46,     0,    48,     0,
+    50,     0,     0,   147,     0,   148,     0,   149,     0,     0,
+    46,     0,    48,     0,     0,    42,     0,    43,     0,    44,
+     0,    47,     0,     0,    44,     0,    42,     0,     0,    62,
+     0,    63,     0,    64,     0,    65,     0,    66,     0,    61,
+     4,     0,   136,     0,   118,     0,   135,     0,   119,     0,
+   138,     0,   139,     0,   141,     0,   142,     0,   143,     0,
+     0,   186,   185,     0,   137,     0,   140,     0,   136,     0,
+   135,     0,   144,     0,   145,     0,     0,   188,   187,     0,
+     0,   146,    22,     0,     0,    53,     4,     0,     0,   153,
+    53,     4,     0,    34,    22,     0,     0,   192,     0,     0,
+   153,   195,   194,     0,   192,     0,    53,     4,     0,    11,
+     0,    12,     0,    13,     0,    16,     0,    15,     0,    14,
+     0,    17,     0,    49,     0,   196,     0,   197,   173,   154,
+     0,   231,     0,   155,     4,     0,   197,   150,   201,   151,
+   188,     0,    10,   150,   201,   151,   188,     0,   156,     4,
+   157,   197,   158,     0,   159,     4,   157,   197,   160,     0,
+   161,   202,   162,     0,   161,   162,     0,   159,   161,   202,
+   162,   160,     0,   159,   161,   162,   160,     0,   197,   186,
+     0,   197,     0,    10,     0,   198,     0,   200,   153,   198,
+     0,   200,     0,   200,   153,    39,     0,    39,     0,     0,
+   197,     0,   202,   153,   197,     0,   197,   156,   205,   158,
+     0,   197,   156,   158,     0,   197,   163,    22,     0,   197,
+   159,   205,   160,     0,   197,   161,   205,   162,     0,   197,
+   161,   162,     0,   197,   159,   161,   205,   162,   160,     0,
+   197,   159,   161,   162,   160,     0,   197,    40,     0,   197,
+    41,     0,   197,   231,     0,   197,   204,     0,   197,    25,
+     0,   169,     3,     0,   169,     5,     0,   169,     4,     0,
+   169,     6,     0,    11,    26,     0,    11,    27,     0,   170,
+     9,     0,   166,   150,   203,    38,   197,   151,     0,   116,
+   150,   203,   242,   151,     0,   130,   150,   203,   153,   203,
+   153,   203,   151,     0,   164,   150,   203,   153,   203,   151,
+     0,   165,   150,   203,   153,   203,   151,     0,    89,   167,
+   150,   203,   153,   203,   151,     0,    90,   168,   150,   203,
+   153,   203,   151,     0,   132,   150,   203,   153,   203,   151,
+     0,   133,   150,   203,   153,   203,   153,   203,   151,     0,
+   134,   150,   203,   153,   203,   153,   203,   151,     0,   205,
+   153,   203,     0,   203,     0,    32,     0,    33,     0,    37,
+     0,     0,   199,   231,     0,   122,   150,   208,    38,   197,
+   151,     0,   210,     0,     0,   211,     0,   210,   211,     0,
+     0,    31,   212,   227,     0,     0,    30,   213,   228,     0,
+    59,    58,   217,     0,   174,    18,   197,     0,   174,    18,
+    10,     0,     0,   176,   180,   207,   206,   203,   173,   214,
+   194,     0,     0,   176,   178,   180,   207,   206,   203,   173,
+   215,   194,     0,     0,   176,   179,   180,   207,   206,   197,
+   173,   216,   194,     0,   176,   180,    35,   183,   208,     0,
+    51,   218,     0,    55,   152,   219,     0,    22,     0,    52,
+   152,    22,     0,    67,   152,    22,     0,   156,   220,   158,
+     0,   220,   153,    22,     0,    22,     0,     0,   221,   153,
+   197,   186,   172,     0,   197,   186,   172,     0,   221,     0,
+   221,   153,    39,     0,    39,     0,     0,   184,   199,   175,
+   150,   222,   151,   188,   193,   190,   189,     0,    28,     0,
+   161,     0,   182,   180,   223,   224,     0,    29,     0,   162,
+     0,   234,   226,     0,   181,   180,   223,     0,     0,    60,
+     0,     3,     0,     4,     0,     9,     0,    26,     0,    27,
+     0,    40,     0,    41,     0,    25,     0,   159,   205,   160,
+     0,   204,     0,    58,   229,    22,   153,    22,     0,     7,
+     0,     8,     0,   171,     0,   175,     0,   231,     0,   230,
+     0,   197,   232,     0,   234,   235,     0,   225,   235,     0,
+   236,   174,   237,     0,   236,   239,     0,     0,    21,     0,
+    68,   233,     0,    68,    10,     0,    69,    17,   232,     0,
+    69,    11,   232,   153,    17,   232,   153,    17,   232,     0,
+    70,   169,   232,   153,    17,   232,   156,   238,   158,     0,
+    70,   169,   232,   153,    17,   232,   156,   158,     0,    71,
+   184,   199,   232,   150,   241,   151,   188,    38,    17,   232,
+    72,    17,   232,     0,    72,     0,    73,     0,   238,   169,
+   230,   153,    17,   232,     0,   169,   230,   153,    17,   232,
+     0,   174,   244,     0,   197,   156,   232,   153,   232,   158,
+     0,   240,   153,   156,   232,   153,   232,   158,     0,   197,
+   186,   232,   186,     0,    17,   186,   232,   186,     0,   241,
+   153,   197,   186,   232,   186,     0,   241,   153,    17,   186,
+   232,   186,     0,     0,     0,   242,   153,   233,     0,    57,
+    56,     0,    56,     0,   164,   197,   232,   153,   232,     0,
+   165,   197,   232,   153,   232,     0,    89,   167,   197,   232,
+   153,   232,     0,    90,   168,   197,   232,   153,   232,     0,
+   166,   233,    38,   197,     0,   130,   233,   153,   233,   153,
+   233,     0,   131,   233,   153,   197,     0,   132,   233,   153,
+   233,     0,   133,   233,   153,   233,   153,   233,     0,   134,
+   233,   153,   233,   153,   233,     0,   129,   240,     0,   243,
+   184,   199,   232,   150,   241,   151,   188,     0,   246,     0,
+    36,     0,     0,   111,   197,   191,     0,   111,   197,   153,
+    11,   232,   191,     0,   112,   197,   191,     0,   112,   197,
+   153,    11,   232,   191,     0,   113,   233,     0,   245,   114,
+   197,   232,   191,     0,   245,   115,   233,   153,   197,   232,
+   191,     0,   116,   197,   232,   242,     0
+};
+
 #endif
 
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
+#if YYDEBUG != 0
+static const short yyrline[] = { 0,
+  1107,  1107,  1107,  1107,  1107,  1107,  1107,  1107,  1107,  1108,
+  1108,  1108,  1108,  1108,  1108,  1109,  1109,  1109,  1109,  1109,
+  1109,  1109,  1110,  1110,  1110,  1110,  1110,  1113,  1113,  1114,
+  1114,  1115,  1115,  1116,  1116,  1117,  1117,  1121,  1121,  1122,
+  1122,  1123,  1123,  1124,  1124,  1125,  1125,  1126,  1126,  1127,
+  1127,  1128,  1129,  1134,  1135,  1135,  1135,  1135,  1135,  1137,
+  1137,  1137,  1138,  1138,  1140,  1141,  1145,  1149,  1154,  1154,
+  1156,  1157,  1162,  1168,  1169,  1170,  1171,  1172,  1176,  1177,
+  1178,  1182,  1183,  1184,  1185,  1189,  1190,  1191,  1195,  1196,
+  1197,  1198,  1199,  1203,  1204,  1205,  1208,  1208,  1209,  1210,
+  1211,  1212,  1213,  1221,  1222,  1223,  1224,  1225,  1226,  1227,
+  1228,  1229,  1232,  1233,  1238,  1239,  1240,  1241,  1242,  1243,
+  1246,  1247,  1252,  1253,  1260,  1260,  1267,  1267,  1277,  1285,
+  1285,  1291,  1291,  1293,  1298,  1311,  1311,  1311,  1311,  1311,
+  1311,  1311,  1314,  1318,  1322,  1329,  1334,  1342,  1372,  1397,
+  1402,  1412,  1422,  1426,  1436,  1443,  1452,  1459,  1464,  1469,
+  1476,  1477,  1484,  1491,  1499,  1505,  1517,  1545,  1561,  1588,
+  1616,  1642,  1662,  1688,  1708,  1720,  1727,  1793,  1803,  1813,
+  1819,  1829,  1835,  1845,  1850,  1855,  1868,  1880,  1902,  1910,
+  1916,  1927,  1932,  1937,  1943,  1949,  1958,  1962,  1970,  1970,
+  1973,  1973,  1976,  1988,  2009,  2014,  2022,  2023,  2027,  2027,
+  2031,  2031,  2034,  2037,  2061,  2072,  2080,  2083,  2089,  2092,
+  2099,  2103,  2143,  2146,  2152,  2162,  2166,  2171,  2173,  2178,
+  2183,  2192,  2202,  2213,  2217,  2226,  2235,  2240,  2374,  2374,
+  2376,  2385,  2385,  2387,  2392,  2404,  2408,  2413,  2417,  2421,
+  2425,  2429,  2433,  2437,  2441,  2445,  2470,  2474,  2484,  2488,
+  2492,  2497,  2504,  2504,  2510,  2519,  2523,  2532,  2541,  2550,
+  2554,  2561,  2565,  2569,  2574,  2584,  2603,  2612,  2696,  2700,
+  2707,  2718,  2731,  2741,  2752,  2762,  2773,  2781,  2791,  2798,
+  2801,  2802,  2809,  2813,  2818,  2834,  2851,  2865,  2879,  2891,
+  2899,  2906,  2912,  2918,  2924,  2939,  3030,  3035,  3039,  3046,
+  3053,  3061,  3068,  3076,  3084,  3098,  3115
+};
+#endif
+
+
+#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
+
+static const char * const yytname[] = {   "$","error","$undefined.","ESINT64VAL",
+"EUINT64VAL","ESAPINTVAL","EUAPINTVAL","LOCALVAL_ID","GLOBALVAL_ID","FPVAL",
+"VOID","INTTYPE","FLOAT","DOUBLE","X86_FP80","FP128","PPC_FP128","LABEL","TYPE",
+"LOCALVAR","GLOBALVAR","LABELSTR","STRINGCONSTANT","ATSTRINGCONSTANT","PCTSTRINGCONSTANT",
+"ZEROINITIALIZER","TRUETOK","FALSETOK","BEGINTOK","ENDTOK","DECLARE","DEFINE",
+"GLOBAL","CONSTANT","SECTION","ALIAS","VOLATILE","THREAD_LOCAL","TO","DOTDOTDOT",
+"NULL_TOK","UNDEF","INTERNAL","LINKONCE","WEAK","APPENDING","DLLIMPORT","DLLEXPORT",
+"EXTERN_WEAK","OPAQUE","EXTERNAL","TARGET","TRIPLE","ALIGN","ADDRSPACE","DEPLIBS",
+"CALL","TAIL","ASM_TOK","MODULE","SIDEEFFECT","CC_TOK","CCC_TOK","FASTCC_TOK",
+"COLDCC_TOK","X86_STDCALLCC_TOK","X86_FASTCALLCC_TOK","DATALAYOUT","RET","BR",
+"SWITCH","INVOKE","UNWIND","UNREACHABLE","ADD","SUB","MUL","UDIV","SDIV","FDIV",
+"UREM","SREM","FREM","AND","OR","XOR","SHL","LSHR","ASHR","ICMP","FCMP","EQ",
+"NE","SLT","SGT","SLE","SGE","ULT","UGT","ULE","UGE","OEQ","ONE","OLT","OGT",
+"OLE","OGE","ORD","UNO","UEQ","UNE","MALLOC","ALLOCA","FREE","LOAD","STORE",
+"GETELEMENTPTR","TRUNC","ZEXT","SEXT","FPTRUNC","FPEXT","BITCAST","UITOFP","SITOFP",
+"FPTOUI","FPTOSI","INTTOPTR","PTRTOINT","PHI_TOK","SELECT","VAARG","EXTRACTELEMENT",
+"INSERTELEMENT","SHUFFLEVECTOR","SIGNEXT","ZEROEXT","NORETURN","INREG","SRET",
+"NOUNWIND","NOALIAS","BYVAL","NEST","READNONE","READONLY","GC","DEFAULT","HIDDEN",
+"PROTECTED","'('","')'","'='","','","'*'","'\\\\'","'['","'x'","']'","'<'","'>'",
+"'{'","'}'","'c'","ArithmeticOps","LogicalOps","CastOps","IPredicates","FPredicates",
+"IntType","FPType","LocalName","OptLocalName","OptAddrSpace","OptLocalAssign",
+"GlobalName","OptGlobalAssign","GlobalAssign","GVInternalLinkage","GVExternalLinkage",
+"GVVisibilityStyle","FunctionDeclareLinkage","FunctionDefineLinkage","AliasLinkage",
+"OptCallingConv","ParamAttr","OptParamAttrs","FuncAttr","OptFuncAttrs","OptGC",
+"OptAlign","OptCAlign","SectionString","OptSection","GlobalVarAttributes","GlobalVarAttribute",
+"PrimType","Types","ArgType","ResultTypes","ArgTypeList","ArgTypeListI","TypeListI",
+"ConstVal","ConstExpr","ConstVector","GlobalType","ThreadLocal","AliaseeRef",
+"Module","DefinitionList","Definition","@1","@2","@3","@4","@5","AsmBlock","TargetDefinition",
+"LibrariesDefinition","LibList","ArgListH","ArgList","FunctionHeaderH","BEGIN",
+"FunctionHeader","END","Function","FunctionProto","OptSideEffect","ConstValueRef",
+"SymbolicValueRef","ValueRef","ResolvedVal","BasicBlockList","BasicBlock","InstructionList",
+"BBTerminatorInst","JumpTable","Inst","PHIList","ParamList","IndexList","OptTailCall",
+"InstVal","OptVolatile","MemoryInst", NULL
+};
+#endif
+
+static const short yyr1[] = {     0,
+   164,   164,   164,   164,   164,   164,   164,   164,   164,   165,
+   165,   165,   165,   165,   165,   166,   166,   166,   166,   166,
+   166,   166,   166,   166,   166,   166,   166,   167,   167,   167,
+   167,   167,   167,   167,   167,   167,   167,   168,   168,   168,
+   168,   168,   168,   168,   168,   168,   168,   168,   168,   168,
+   168,   168,   168,   169,   170,   170,   170,   170,   170,   171,
+   171,   171,   172,   172,   173,   173,   174,   174,   175,   175,
+   176,   176,   177,   178,   178,   178,   178,   178,   179,   179,
+   179,   180,   180,   180,   180,   181,   181,   181,   182,   182,
+   182,   182,   182,   183,   183,   183,   184,   184,   184,   184,
+   184,   184,   184,   185,   185,   185,   185,   185,   185,   185,
+   185,   185,   186,   186,   187,   187,   187,   187,   187,   187,
+   188,   188,   189,   189,   190,   190,   191,   191,   192,   193,
+   193,   194,   194,   195,   195,   196,   196,   196,   196,   196,
+   196,   196,   197,   197,   197,   197,   197,   197,   197,   197,
+   197,   197,   197,   197,   197,   198,   199,   199,   200,   200,
+   201,   201,   201,   201,   202,   202,   203,   203,   203,   203,
+   203,   203,   203,   203,   203,   203,   203,   203,   203,   203,
+   203,   203,   203,   203,   203,   203,   204,   204,   204,   204,
+   204,   204,   204,   204,   204,   204,   205,   205,   206,   206,
+   207,   207,   208,   208,   209,   209,   210,   210,   212,   211,
+   213,   211,   211,   211,   211,   214,   211,   215,   211,   216,
+   211,   211,   211,   211,   217,   218,   218,   219,   220,   220,
+   220,   221,   221,   222,   222,   222,   222,   223,   224,   224,
+   225,   226,   226,   227,   228,   229,   229,   230,   230,   230,
+   230,   230,   230,   230,   230,   230,   230,   230,   231,   231,
+   231,   231,   232,   232,   233,   234,   234,   235,   236,   236,
+   236,   237,   237,   237,   237,   237,   237,   237,   237,   237,
+   238,   238,   239,   240,   240,   241,   241,   241,   241,   241,
+   242,   242,   243,   243,   244,   244,   244,   244,   244,   244,
+   244,   244,   244,   244,   244,   244,   244,   245,   245,   246,
+   246,   246,   246,   246,   246,   246,   246
+};
+
+static const short yyr2[] = {     0,
+     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+     1,     1,     1,     0,     4,     0,     2,     0,     1,     1,
+     1,     0,     2,     1,     1,     1,     1,     1,     1,     1,
+     1,     0,     1,     1,     1,     0,     1,     1,     0,     1,
+     1,     1,     1,     0,     1,     1,     0,     1,     1,     1,
+     1,     1,     2,     1,     1,     1,     1,     1,     1,     1,
+     1,     1,     0,     2,     1,     1,     1,     1,     1,     1,
+     0,     2,     0,     2,     0,     2,     0,     3,     2,     0,
+     1,     0,     3,     1,     2,     1,     1,     1,     1,     1,
+     1,     1,     1,     1,     3,     1,     2,     5,     5,     5,
+     5,     3,     2,     5,     4,     2,     1,     1,     1,     3,
+     1,     3,     1,     0,     1,     3,     4,     3,     3,     4,
+     4,     3,     6,     5,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     6,     5,     8,     6,
+     6,     7,     7,     6,     8,     8,     3,     1,     1,     1,
+     1,     0,     2,     6,     1,     0,     1,     2,     0,     3,
+     0,     3,     3,     3,     3,     0,     8,     0,     9,     0,
+     9,     5,     2,     3,     1,     3,     3,     3,     3,     1,
+     0,     5,     3,     1,     3,     1,     0,    10,     1,     1,
+     4,     1,     1,     2,     3,     0,     1,     1,     1,     1,
+     1,     1,     1,     1,     1,     3,     1,     5,     1,     1,
+     1,     1,     1,     1,     2,     2,     2,     3,     2,     0,
+     1,     2,     2,     3,     9,     9,     8,    14,     1,     1,
+     6,     5,     2,     6,     7,     4,     4,     6,     6,     0,
+     0,     3,     2,     1,     5,     5,     6,     6,     4,     6,
+     4,     4,     6,     6,     2,     8,     1,     1,     0,     3,
+     6,     3,     6,     2,     5,     7,     4
+};
+
+static const short yydefact[] = {    72,
+    60,    69,    61,    70,    62,   211,   209,     0,     0,     0,
+     0,     0,     0,    82,    71,    72,   207,    86,    89,     0,
+     0,   223,     0,     0,    67,     0,    73,    74,    76,    75,
+    77,    79,    78,    80,    81,    83,    84,    85,    82,    82,
+   202,   208,    87,    88,    82,   212,    90,    91,    92,    93,
+    82,   270,   210,   270,     0,     0,   231,   224,   225,   213,
+   259,   260,   215,   136,   137,   138,   141,   140,   139,   142,
+   143,     0,     0,     0,     0,   261,   262,   144,   214,   146,
+   202,   202,    94,   201,     0,    97,    97,   271,   267,    68,
+   242,   243,   244,   266,   226,   227,   230,     0,   164,   147,
+     0,     0,     0,     0,   153,   165,     0,     0,   164,     0,
+     0,     0,    96,    95,     0,   199,   200,     0,     0,    98,
+    99,   100,   101,   102,     0,   245,     0,   309,   269,     0,
+   228,   163,   113,   159,   161,     0,     0,     0,     0,     0,
+     0,   152,     0,     0,   145,     0,     0,   158,     0,   157,
+     0,   222,   136,   137,   138,   141,   140,   139,     0,     0,
+    66,    66,   103,     0,   239,   240,   241,   308,   294,     0,
+     0,     0,     0,    97,   279,   280,     1,     2,     3,     4,
+     5,     6,     7,     8,     9,    13,    14,    15,    10,    11,
+    12,     0,     0,     0,     0,     0,     0,    16,    17,    18,
+    19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   268,    97,
+   283,     0,   307,   229,   156,     0,   121,    66,    66,   155,
+     0,   166,     0,   121,    66,    66,     0,   203,   184,   185,
+   180,   182,   181,   183,   186,   179,   175,   176,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   178,   177,   216,     0,   293,   273,    66,   272,
+     0,     0,    54,     0,     0,    28,    29,    30,    31,    32,
+    33,    34,    35,    36,    37,     0,    52,    53,    48,    49,
+    50,    51,    38,    39,    40,    41,    42,    43,    44,    45,
+    46,    47,     0,   127,   127,   314,    66,    66,   305,     0,
+     0,     0,     0,     0,    66,    66,     0,     0,     0,     0,
+   105,   107,   106,   104,   108,   109,   110,   111,   112,   114,
+   162,   160,   149,   150,   151,   154,    65,   148,   218,   220,
+     0,     0,     0,     0,     0,     0,     0,     0,   168,   198,
+     0,     0,     0,   172,     0,   169,     0,     0,     0,   132,
+   237,   248,   249,   250,   255,   251,   252,   253,   254,   246,
+     0,   257,   264,   263,   265,     0,   274,     0,     0,    66,
+    66,     0,   310,     0,   312,   291,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,    66,     0,   118,
+   117,   115,   116,   119,   120,   122,   132,   132,     0,     0,
+     0,   291,     0,     0,     0,     0,     0,   167,   153,   165,
+     0,   170,   171,     0,     0,     0,     0,   217,   236,   113,
+   234,     0,   247,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   317,     0,     0,     0,   301,   302,     0,
+     0,     0,     0,   299,     0,   127,     0,   219,   221,    66,
+     0,     0,     0,     0,     0,     0,     0,   197,   174,     0,
+     0,     0,     0,     0,     0,   134,   132,    64,     0,   121,
+     0,   256,     0,     0,   290,     0,     0,   127,   128,   127,
+     0,     0,     0,     0,     0,     0,   295,   296,   290,     0,
+   315,    66,   204,     0,     0,   188,     0,     0,     0,     0,
+   173,     0,     0,    66,   129,   135,   133,    63,   233,   235,
+   113,   130,     0,     0,     0,   113,   113,     0,   297,   298,
+   311,   313,   292,     0,     0,   300,   303,   304,     0,   127,
+     0,     0,     0,   194,     0,     0,   190,   191,   187,    64,
+   131,   125,   258,     0,     0,     0,     0,   121,     0,   284,
+     0,   121,   316,   192,   193,     0,     0,     0,   232,     0,
+   123,     0,   277,     0,     0,   105,   107,   113,   113,     0,
+   113,   113,   285,   306,   189,   195,   196,   126,     0,   238,
+   275,     0,   276,     0,   287,   286,     0,     0,     0,   124,
+     0,     0,     0,   113,   113,     0,     0,     0,   289,   288,
+   282,     0,     0,   281,     0,   278,     0,     0,     0
+};
+
+static const short yydefgoto[] = {   260,
+   261,   262,   286,   303,   159,   160,    76,   519,   110,    12,
+    77,    14,    15,    39,    40,    41,    45,    51,   115,   125,
+   330,   225,   406,   333,   590,   571,   383,   476,   552,   428,
+   477,    78,   161,   134,   151,   135,   136,   107,   350,   372,
+   351,   118,    85,   152,   617,    16,    17,    19,    18,   360,
+   407,   408,    60,    22,    58,    98,   431,   432,   126,   167,
+    52,    93,    53,    46,   434,   373,    80,   375,   270,    54,
+    89,    90,   219,   575,   129,   309,   528,   444,   220,   221,
+   222,   223
+};
+
+static const short yypact[] = {   253,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,    -4,  -114,   -16,
+  -103,    46,   -78,    12,-32768,   392,-32768,   149,   177,   -44,
+   -31,-32768,    -1,   154,-32768,  1529,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   -37,   -37,
+   203,-32768,-32768,-32768,   -37,-32768,-32768,-32768,-32768,-32768,
+   -37,   190,-32768,     2,   195,   217,   245,-32768,-32768,-32768,
+-32768,-32768,   124,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,   274,   278,     1,   505,-32768,-32768,-32768,    62,-32768,
+   256,   256,   200,-32768,   119,   224,   224,-32768,-32768,   100,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,    57,  1052,-32768,
+   140,   148,   604,   124,-32768,    62,   -69,   157,  1052,   155,
+   119,   119,-32768,-32768,  1295,-32768,-32768,  1569,   306,-32768,
+-32768,-32768,-32768,-32768,  1627,-32768,   -17,  1851,-32768,   289,
+-32768,-32768,    62,-32768,   163,   166,  1645,  1645,   158,   -58,
+  1645,-32768,   315,   171,-32768,  1569,  1645,   124,   170,    62,
+    58,-32768,    41,   314,   318,   320,   321,   329,   226,   330,
+  1107,   270,-32768,    30,-32768,-32768,-32768,-32768,-32768,   288,
+  1685,   137,   336,   224,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,   388,   781,  1645,  1645,  1645,  1645,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1645,
+  1645,  1645,  1645,  1645,  1645,  1645,  1645,  1645,-32768,   224,
+-32768,    70,-32768,-32768,   207,  1374,-32768,   -15,   -14,-32768,
+   197,    62,   208,-32768,   270,   -13,  1295,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   388,   781,
+   212,   213,   214,   220,   221,  1414,  1725,   782,   351,   228,
+   229,   231,-32768,-32768,-32768,   232,-32768,   124,   696,-32768,
+   834,   834,-32768,   834,  1627,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,  1645,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,  1645,    15,    29,-32768,   696,     7,   205,   223,
+   235,   236,   237,   238,   696,   696,   346,  1627,  1645,  1645,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,   120,-32768,-32768,-32768,-32768,   120,-32768,   155,
+   358,   248,   249,  1569,  1569,  1569,  1569,  1569,-32768,-32768,
+    69,  1007,   -61,-32768,   -56,-32768,  1569,  1569,  1569,   251,
+  1454,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   341,
+  1569,-32768,-32768,-32768,-32768,   252,-32768,   255,   834,   696,
+   696,    19,-32768,    23,-32768,-32768,   834,   246,  1645,  1645,
+  1645,  1645,  1645,   260,   266,  1645,   834,   696,   271,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,   251,   251,  1645,  1569,
+  1569,-32768,   272,   275,   276,   277,  1569,-32768,   267,   962,
+   -55,-32768,-32768,   286,   291,   371,    18,-32768,-32768,    62,
+   292,   280,-32768,   420,   -57,   431,   433,   302,   300,   301,
+   834,   453,   834,   305,   307,   834,   309,    62,-32768,   310,
+   311,   834,   834,    62,   316,   312,  1645,-32768,-32768,   -18,
+   323,   324,    92,  1569,  1569,  1569,  1569,-32768,-32768,   299,
+  1569,  1569,  1645,   446,   469,-32768,   251,   729,  1472,-32768,
+   339,-32768,   834,   834,  1743,   834,   834,   312,-32768,   312,
+  1645,   834,   340,  1645,  1645,  1645,-32768,-32768,  1743,   421,
+-32768,   696,-32768,  1569,  1569,-32768,   342,   343,   344,   345,
+-32768,   348,   349,    16,-32768,-32768,-32768,-32768,-32768,-32768,
+    62,    -6,   474,   350,   352,    64,    62,   101,-32768,-32768,
+-32768,-32768,-32768,   347,   834,-32768,-32768,-32768,   115,   312,
+   353,   356,  1569,-32768,  1569,  1569,-32768,-32768,-32768,   729,
+-32768,   448,-32768,   485,    -5,   555,   555,-32768,  1800,-32768,
+   365,-32768,-32768,-32768,-32768,   363,   379,   380,-32768,   530,
+   390,   834,-32768,  1246,    -2,   359,   389,-32768,-32768,     5,
+    64,    62,-32768,   120,-32768,-32768,-32768,-32768,   516,-32768,
+-32768,   391,-32768,  1246,   207,   207,   524,   555,   555,-32768,
+   525,   394,   834,-32768,-32768,   834,   526,   473,   207,   207,
+-32768,   834,   531,-32768,   834,-32768,   551,   556,-32768
+};
+
+static const short yypgoto[] = {   427,
+   437,   439,   319,   322,  -172,-32768,     0,    11,  -149,   480,
+    10,-32768,-32768,-32768,-32768,    49,-32768,-32768,-32768,  -147,
+-32768,  -401,-32768,  -222,-32768,-32768,  -281,    51,-32768,  -375,
+-32768,-32768,   -24,   357,  -117,-32768,   462,   481,  -111,  -157,
+  -243,   169,   210,   354,-32768,-32768,   560,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   498,-32768,
+-32768,-32768,-32768,-32768,-32768,  -557,   -46,   -66,  -193,-32768,
+   532,-32768,-32768,-32768,-32768,-32768,    88,   176,-32768,-32768,
+-32768,-32768
+};
+
+
+#define	YYLAST		1985
+
+
+static const short yytable[] = {    11,
+   274,    79,   306,   263,   102,   273,   162,   164,   273,    13,
+   165,   338,   265,   353,   355,    11,   592,   310,   311,   312,
+   313,   314,    88,   385,   317,    13,   275,   474,   478,   441,
+    91,   458,   459,   443,   235,   108,   602,    23,   108,   108,
+   108,    24,   597,   -54,   -54,   -54,   -54,    20,    25,     2,
+   106,   474,     4,    28,    29,    30,    31,    32,    33,    34,
+   108,    35,    21,    26,    61,    62,   239,   240,   108,   108,
+   475,   442,   318,    27,   133,   442,     1,     2,   106,     3,
+     4,     5,   108,   141,   133,   339,   340,    81,    82,    11,
+   150,   417,   142,    86,   141,   417,   417,   417,   422,    87,
+   150,   517,   482,   231,   238,   423,   470,    55,   421,    36,
+    37,    38,   228,   229,   264,   108,   232,  -142,     1,   550,
+    56,     3,   236,     5,   556,   557,   399,   435,   400,   401,
+   402,   109,   503,   403,   109,   109,   109,   404,   405,   400,
+   401,   402,   334,   166,   403,   335,   269,   271,   404,   405,
+   116,   117,   573,   272,    57,   593,   109,   379,    36,    37,
+    38,   103,   387,    92,   109,   109,   549,   382,   -66,   304,
+   305,   269,   307,   266,   501,    59,   595,   596,   109,   598,
+   599,   384,   -66,   319,   320,   308,   269,   269,   269,   269,
+   269,   315,   316,   269,    43,   447,    44,   449,   450,   451,
+   397,   133,   609,   610,   376,   377,   531,   378,   532,   130,
+    88,   109,   150,  -142,   131,   -66,    95,  -142,    47,    48,
+    49,   417,   374,    50,   374,   374,   418,   374,   241,   242,
+   243,   244,   412,   413,   414,   415,   416,    83,    96,    84,
+   386,   113,   506,   114,   491,   424,   425,   426,   394,   395,
+   150,   558,  -206,   559,   400,   401,   402,   522,   563,   403,
+   374,   380,   263,   404,   405,   562,    97,   559,   374,   374,
+   -68,     1,     2,    99,     3,     4,     5,   100,   381,   146,
+   147,   101,     6,     7,   119,   120,   121,   122,   123,   124,
+   111,   112,    84,   150,   398,   269,   137,   533,   461,   462,
+   536,   537,   538,     8,   138,   468,   143,     9,   145,   163,
+   224,    10,   438,   439,   440,   226,   227,   230,   233,   237,
+   445,   234,   -55,   108,   321,   322,   -56,   420,   -59,   -58,
+   455,   456,   374,   374,   374,   580,   430,   -57,   245,   584,
+   374,   323,   324,   267,   325,   326,   273,   327,   328,   329,
+   374,   374,   507,   508,   509,   510,   336,   388,   337,   512,
+   513,   344,   345,   346,   269,   448,   269,   269,   269,   347,
+   348,   454,   356,   264,   488,   389,   490,   357,   358,   493,
+   359,   361,   574,   396,   460,   497,   498,   390,   391,   392,
+   393,  -205,   541,   542,   374,   409,   374,   410,   411,   374,
+   433,   446,   594,   427,   436,   374,   374,   437,   473,   -68,
+     1,     2,   452,     3,     4,     5,   524,   525,   453,   529,
+   530,     6,     7,   457,   464,   534,   469,   465,   466,   467,
+   480,   566,   502,   567,   568,   540,   374,   374,   471,   374,
+   374,   481,     8,   472,   479,   374,     9,   483,   514,   484,
+    10,   485,   486,   487,   521,   374,   489,   491,   511,   492,
+   527,   494,   495,   496,   500,   499,   269,   515,   561,   269,
+   269,   269,   516,   442,   527,   504,   505,   518,   276,   277,
+   278,   279,   280,   281,   282,   283,   284,   285,   374,   578,
+   579,   523,   535,   544,   543,   553,   545,   546,   547,   548,
+   570,   572,   554,   564,   560,   591,   565,   555,   -17,   374,
+   374,    61,    62,   585,   104,    64,    65,    66,    67,    68,
+    69,    70,   583,     1,     2,   374,     3,     4,     5,   586,
+   587,   604,   605,   588,   582,   589,   608,   600,   -18,   611,
+   603,   606,   612,   601,   613,   614,   607,   615,   616,   518,
+   618,   374,   374,    71,   216,   619,   374,   362,   363,   374,
+   569,    61,    62,   364,   217,   374,   218,   342,   374,   128,
+   144,   343,   551,     1,     2,    42,     3,     4,     5,   365,
+   366,   367,   332,   140,   127,    94,   539,   463,     0,     0,
+   341,     0,     0,     0,   368,   369,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    61,    62,   370,   104,    64,    65,    66,    67,    68,    69,
+    70,     0,     1,     2,     0,     3,     4,     5,   177,   178,
+   179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+   189,   190,   191,   249,   250,     0,     0,     0,     0,     0,
+     0,     0,    71,     0,     0,     0,     0,     0,     0,    72,
+    73,     0,     0,    74,     0,    75,   105,     0,     0,     0,
+   251,   198,   576,   577,   201,   202,   203,   204,   205,   206,
+   207,   208,   209,     0,   252,     0,   253,   254,   255,   323,
+   324,     0,   325,   326,     0,   327,   328,   329,   362,   363,
+     0,     0,    61,    62,   364,     0,     0,     0,     0,     0,
+     0,     0,     0,   371,     1,     2,     0,     3,     4,     5,
+   365,   366,   367,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   368,   369,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     1,     0,   108,
+     3,     0,     5,   370,     0,     0,     0,     0,    72,    73,
+     0,     0,    74,     0,    75,   139,     0,     0,     0,   177,
+   178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,   191,   249,   250,     0,     0,    61,    62,
+     0,   104,   153,   154,   155,   156,   157,   158,    70,     0,
+     1,     2,     0,     3,     4,     5,   287,   288,     0,     0,
+     0,   251,   198,   199,   200,   201,   202,   203,   204,   205,
+   206,   207,   208,   209,     0,   252,     0,   253,   254,   255,
+    71,     0,     0,     0,     0,     0,   362,   363,     0,     0,
+    61,    62,   364,     0,     0,   109,   321,   322,     0,     0,
+     0,     0,     1,     2,   371,     3,     4,     5,   365,   366,
+   367,     0,     0,   323,   324,     0,   325,   326,     0,   327,
+   328,   329,     0,   368,   369,     0,     0,   289,   290,   291,
+   292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
+   302,   370,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   177,   178,   179,
+   180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+   190,   191,   249,   250,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,    72,    73,     0,     0,
+    74,     0,    75,   354,     0,     0,     0,     0,     0,   251,
+   198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+   208,   209,     0,   252,     0,   253,   254,   255,    61,    62,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     1,     2,     0,     3,     4,     5,   246,     0,     0,     0,
+     0,     0,   371,     0,     0,     0,     0,     0,     0,     0,
+     0,   247,   248,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    61,    62,   108,   104,   153,   154,   155,
+   156,   157,   158,    70,     0,     1,     2,     0,     3,     4,
+     5,     0,     0,     0,     0,   177,   178,   179,   180,   181,
+   182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+   249,   250,     0,     0,     0,    71,     0,     0,    61,    62,
+     0,   104,    64,    65,    66,    67,    68,    69,    70,     0,
+     1,     2,     0,     3,     4,     5,     0,   251,   198,   199,
+   200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+   132,   252,     0,   253,   254,   255,     0,     0,     0,     0,
+    71,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   109,     0,    61,    62,   -66,     0,   256,     0,     0,
+   257,     0,   258,     0,   259,     1,     2,     0,     3,     4,
+     5,   246,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   247,   248,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   108,    72,    73,     0,     0,    74,     0,    75,   419,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
+   187,   188,   189,   190,   191,   249,   250,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,    72,    73,     0,     0,
+    74,     0,    75,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   251,   198,   199,   200,   201,   202,   203,   204,
+   205,   206,   207,   208,   209,     0,   252,     0,   253,   254,
+   255,     0,     0,     0,     0,     0,     0,     0,   362,   363,
+     0,     0,     0,     0,   364,     0,   109,     0,     0,     0,
+     0,     0,   256,     0,     0,   257,     0,   258,     0,   259,
+   365,   366,   367,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   368,   369,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,    61,    62,   370,   148,    64,    65,    66,    67,    68,
+    69,    70,     0,     1,     2,     0,     3,     4,     5,   177,
+   178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+   188,   189,   190,   191,   249,   250,     0,     0,     0,     0,
+     0,     0,     0,    71,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   251,   198,   199,   200,   201,   202,   203,   204,   205,
+   206,   207,   208,   209,     0,   252,     0,   253,   254,   255,
+    61,    62,     0,   104,    64,    65,    66,    67,    68,    69,
+    70,     0,     1,     2,     0,     3,     4,     5,     0,     0,
+     0,     0,     0,     0,   371,     0,     0,     0,     0,     0,
+     0,     0,   331,     0,     0,     0,   149,     0,     0,     0,
+    61,    62,    71,   104,   153,   154,   155,   156,   157,   158,
+    70,     0,     1,     2,     0,     3,     4,     5,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    72,
+    73,     0,     0,    74,     0,    75,     0,     0,     0,     0,
+    61,    62,    71,   104,    64,    65,    66,    67,    68,    69,
+    70,     0,     1,     2,     0,     3,     4,     5,    61,    62,
+     0,   104,    64,    65,    66,    67,    68,    69,    70,     0,
+     1,     2,   429,     3,     4,     5,     0,     0,     0,     0,
+     0,     0,    71,     0,     0,     0,     0,     0,     0,     0,
+   520,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    71,     0,     0,     0,     0,     0,     0,     0,    72,    73,
+     0,     0,    74,     0,    75,    61,    62,     0,    63,    64,
+    65,    66,    67,    68,    69,    70,     0,     1,     2,     0,
+     3,     4,     5,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    72,    73,
+     0,   349,    74,     0,    75,    61,    62,    71,   104,   153,
+   154,   155,   156,   157,   158,    70,     0,     1,     2,     0,
+     3,     4,     5,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    72,    73,
+     0,     0,    74,     0,    75,     0,     0,    71,     0,     0,
+     0,     0,     0,     0,     0,     0,    72,    73,     0,     0,
+    74,     0,    75,    61,    62,     0,   148,    64,    65,    66,
+    67,    68,    69,    70,     0,     1,     2,     0,     3,     4,
+     5,    61,    62,     0,   104,    64,    65,    66,    67,    68,
+    69,    70,     0,     1,     2,     0,     3,     4,     5,     0,
+     0,     0,     0,     0,     0,    71,     0,     0,     0,     0,
+     0,     0,     0,    72,    73,     0,     0,    74,     0,    75,
+     0,    61,    62,    71,   268,    64,    65,    66,    67,    68,
+    69,    70,     0,     1,     2,     0,     3,     4,     5,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    72,    73,     0,     0,    74,     0,    75,
+     0,    61,    62,    71,   104,   153,   154,   155,   156,   157,
+   158,    70,     0,     1,     2,     0,     3,     4,     5,    61,
+    62,     0,   104,    64,    65,    66,    67,    68,    69,   526,
+     0,     1,     2,     0,     3,     4,     5,     0,     0,     0,
+     0,     0,     0,    71,     0,     0,     0,     0,     0,     0,
+     0,    72,    73,     0,     0,    74,     0,    75,     0,     0,
+     0,    71,     0,     0,     0,     0,     0,     0,     0,    72,
+    73,     0,     0,    74,     0,    75,    61,    62,     0,   104,
+    64,    65,    66,    67,    68,    69,   581,     0,     1,     2,
+     0,     3,     4,     5,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    72,
+    73,     0,     0,    74,     0,    75,     0,     0,    71,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    72,
+    73,     0,     0,    74,     0,   352,   168,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,    72,    73,     0,
+     0,    74,     0,    75,     0,     0,   169,   170,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   171,   172,
+   173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+   183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+   193,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,    72,    73,     0,     0,    74,     0,
+    75,   194,   195,   196,     0,     0,   197,   198,   199,   200,
+   201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+   211,   212,   213,   214,   215
+};
+
+static const short yycheck[] = {     0,
+   173,    26,   196,   161,     4,    11,   118,   125,    11,     0,
+    28,   234,   162,   257,   258,    16,   574,   211,   212,   213,
+   214,   215,    21,   305,   218,    16,   174,    34,   430,    11,
+    29,   407,   408,    11,   146,    54,   594,   152,    54,    54,
+    54,    58,    38,     3,     4,     5,     6,    52,   152,    20,
+    75,    34,    23,    42,    43,    44,    45,    46,    47,    48,
+    54,    50,    67,    18,     7,     8,    26,    27,    54,    54,
+    53,    53,   220,   152,    99,    53,    19,    20,   103,    22,
+    23,    24,    54,   153,   109,   235,   236,    39,    40,    90,
+   115,   153,   162,    45,   153,   153,   153,   153,   160,    51,
+   125,   477,   160,   162,   151,   162,   162,   152,   352,   147,
+   148,   149,   137,   138,   161,    54,   141,    54,    19,   521,
+   152,    22,   147,    24,   526,   527,   320,   371,   135,   136,
+   137,   150,   151,   140,   150,   150,   150,   144,   145,   135,
+   136,   137,   158,   161,   140,   160,   171,    11,   144,   145,
+    32,    33,   158,    17,   156,   158,   150,   275,   147,   148,
+   149,   161,   156,   162,   150,   150,   151,   153,   154,   194,
+   195,   196,   197,   164,   456,    22,   578,   579,   150,   581,
+   582,   153,   154,   114,   115,   210,   211,   212,   213,   214,
+   215,   216,   217,   218,    46,   389,    48,   391,   392,   393,
+   318,   226,   604,   605,   271,   272,   488,   274,   490,   153,
+    21,   150,   237,   150,   158,   154,    22,   154,    42,    43,
+    44,   153,   269,    47,   271,   272,   158,   274,     3,     4,
+     5,     6,   344,   345,   346,   347,   348,    35,    22,    37,
+   307,    42,   151,    44,   153,   357,   358,   359,   315,   316,
+   275,   151,     0,   153,   135,   136,   137,   480,   540,   140,
+   307,   286,   420,   144,   145,   151,    22,   153,   315,   316,
+    18,    19,    20,   150,    22,    23,    24,     4,   303,   111,
+   112,     4,    30,    31,    61,    62,    63,    64,    65,    66,
+    81,    82,    37,   318,   319,   320,   157,   491,   410,   411,
+   494,   495,   496,    51,   157,   417,   150,    55,   154,     4,
+    22,    59,   379,   380,   381,   153,   151,   160,     4,   150,
+   387,   151,     9,    54,   118,   119,     9,   352,     9,     9,
+   397,   398,   379,   380,   381,   558,   361,     9,     9,   562,
+   387,   135,   136,    56,   138,   139,    11,   141,   142,   143,
+   397,   398,   464,   465,   466,   467,   160,   153,   151,   471,
+   472,   150,   150,   150,   389,   390,   391,   392,   393,   150,
+   150,   396,    22,   420,   441,   153,   443,   150,   150,   446,
+   150,   150,   555,    38,   409,   452,   453,   153,   153,   153,
+   153,     0,   504,   505,   441,    38,   443,   150,   150,   446,
+    60,   156,   575,   153,   153,   452,   453,   153,    38,    18,
+    19,    20,   153,    22,    23,    24,   483,   484,   153,   486,
+   487,    30,    31,   153,   153,   492,   160,   153,   153,   153,
+   151,   543,   457,   545,   546,   502,   483,   484,   153,   486,
+   487,    22,    51,   153,   153,   492,    55,    17,   473,    17,
+    59,   150,   153,   153,   479,   502,     4,   153,   160,   153,
+   485,   153,   153,   153,   153,   150,   491,    22,   535,   494,
+   495,   496,     4,    53,   499,   153,   153,   478,    91,    92,
+    93,    94,    95,    96,    97,    98,    99,   100,   535,   556,
+   557,   153,   153,   151,   153,    22,   153,   153,   151,   151,
+    53,    17,   153,   151,   158,   572,   151,   156,   150,   556,
+   557,     7,     8,   151,    10,    11,    12,    13,    14,    15,
+    16,    17,   158,    19,    20,   572,    22,    23,    24,   151,
+   151,   598,   599,     4,   559,   146,   603,    22,   150,   606,
+    17,    17,    17,   153,    72,   612,   153,    17,   615,   550,
+     0,   598,   599,    49,   128,     0,   603,     3,     4,   606,
+   550,     7,     8,     9,   128,   612,   128,   249,   615,    90,
+   109,   250,   522,    19,    20,    16,    22,    23,    24,    25,
+    26,    27,   226,   103,    87,    54,   499,   412,    -1,    -1,
+   237,    -1,    -1,    -1,    40,    41,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     7,     8,    58,    10,    11,    12,    13,    14,    15,    16,
+    17,    -1,    19,    20,    -1,    22,    23,    24,    74,    75,
+    76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+    86,    87,    88,    89,    90,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,   155,
+   156,    -1,    -1,   159,    -1,   161,   162,    -1,    -1,    -1,
+   116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+   126,   127,   128,    -1,   130,    -1,   132,   133,   134,   135,
+   136,    -1,   138,   139,    -1,   141,   142,   143,     3,     4,
+    -1,    -1,     7,     8,     9,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   159,    19,    20,    -1,    22,    23,    24,
+    25,    26,    27,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    40,    41,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    19,    -1,    54,
+    22,    -1,    24,    58,    -1,    -1,    -1,    -1,   155,   156,
+    -1,    -1,   159,    -1,   161,   162,    -1,    -1,    -1,    74,
+    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+    85,    86,    87,    88,    89,    90,    -1,    -1,     7,     8,
+    -1,    10,    11,    12,    13,    14,    15,    16,    17,    -1,
+    19,    20,    -1,    22,    23,    24,    26,    27,    -1,    -1,
+    -1,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+   125,   126,   127,   128,    -1,   130,    -1,   132,   133,   134,
+    49,    -1,    -1,    -1,    -1,    -1,     3,     4,    -1,    -1,
+     7,     8,     9,    -1,    -1,   150,   118,   119,    -1,    -1,
+    -1,    -1,    19,    20,   159,    22,    23,    24,    25,    26,
+    27,    -1,    -1,   135,   136,    -1,   138,   139,    -1,   141,
+   142,   143,    -1,    40,    41,    -1,    -1,    97,    98,    99,
+   100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+   110,    58,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    76,
+    77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+    87,    88,    89,    90,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   155,   156,    -1,    -1,
+   159,    -1,   161,   162,    -1,    -1,    -1,    -1,    -1,   116,
+   117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+   127,   128,    -1,   130,    -1,   132,   133,   134,     7,     8,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    19,    20,    -1,    22,    23,    24,    25,    -1,    -1,    -1,
+    -1,    -1,   159,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    40,    41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,     7,     8,    54,    10,    11,    12,    13,
+    14,    15,    16,    17,    -1,    19,    20,    -1,    22,    23,
+    24,    -1,    -1,    -1,    -1,    74,    75,    76,    77,    78,
+    79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+    89,    90,    -1,    -1,    -1,    49,    -1,    -1,     7,     8,
+    -1,    10,    11,    12,    13,    14,    15,    16,    17,    -1,
+    19,    20,    -1,    22,    23,    24,    -1,   116,   117,   118,
+   119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+    39,   130,    -1,   132,   133,   134,    -1,    -1,    -1,    -1,
+    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   150,    -1,     7,     8,   154,    -1,   156,    -1,    -1,
+   159,    -1,   161,    -1,   163,    19,    20,    -1,    22,    23,
+    24,    25,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    40,    41,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    54,   155,   156,    -1,    -1,   159,    -1,   161,   162,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+    84,    85,    86,    87,    88,    89,    90,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   155,   156,    -1,    -1,
+   159,    -1,   161,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   116,   117,   118,   119,   120,   121,   122,   123,
+   124,   125,   126,   127,   128,    -1,   130,    -1,   132,   133,
+   134,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
+    -1,    -1,    -1,    -1,     9,    -1,   150,    -1,    -1,    -1,
+    -1,    -1,   156,    -1,    -1,   159,    -1,   161,    -1,   163,
+    25,    26,    27,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    40,    41,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,     7,     8,    58,    10,    11,    12,    13,    14,    15,
+    16,    17,    -1,    19,    20,    -1,    22,    23,    24,    74,
+    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+    85,    86,    87,    88,    89,    90,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+   125,   126,   127,   128,    -1,   130,    -1,   132,   133,   134,
+     7,     8,    -1,    10,    11,    12,    13,    14,    15,    16,
+    17,    -1,    19,    20,    -1,    22,    23,    24,    -1,    -1,
+    -1,    -1,    -1,    -1,   159,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    39,    -1,    -1,    -1,   122,    -1,    -1,    -1,
+     7,     8,    49,    10,    11,    12,    13,    14,    15,    16,
+    17,    -1,    19,    20,    -1,    22,    23,    24,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   155,
+   156,    -1,    -1,   159,    -1,   161,    -1,    -1,    -1,    -1,
+     7,     8,    49,    10,    11,    12,    13,    14,    15,    16,
+    17,    -1,    19,    20,    -1,    22,    23,    24,     7,     8,
+    -1,    10,    11,    12,    13,    14,    15,    16,    17,    -1,
+    19,    20,    39,    22,    23,    24,    -1,    -1,    -1,    -1,
+    -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   155,   156,
+    -1,    -1,   159,    -1,   161,     7,     8,    -1,    10,    11,
+    12,    13,    14,    15,    16,    17,    -1,    19,    20,    -1,
+    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   155,   156,
+    -1,   158,   159,    -1,   161,     7,     8,    49,    10,    11,
+    12,    13,    14,    15,    16,    17,    -1,    19,    20,    -1,
+    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   155,   156,
+    -1,    -1,   159,    -1,   161,    -1,    -1,    49,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   155,   156,    -1,    -1,
+   159,    -1,   161,     7,     8,    -1,    10,    11,    12,    13,
+    14,    15,    16,    17,    -1,    19,    20,    -1,    22,    23,
+    24,     7,     8,    -1,    10,    11,    12,    13,    14,    15,
+    16,    17,    -1,    19,    20,    -1,    22,    23,    24,    -1,
+    -1,    -1,    -1,    -1,    -1,    49,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   155,   156,    -1,    -1,   159,    -1,   161,
+    -1,     7,     8,    49,    10,    11,    12,    13,    14,    15,
+    16,    17,    -1,    19,    20,    -1,    22,    23,    24,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   155,   156,    -1,    -1,   159,    -1,   161,
+    -1,     7,     8,    49,    10,    11,    12,    13,    14,    15,
+    16,    17,    -1,    19,    20,    -1,    22,    23,    24,     7,
+     8,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
+    -1,    19,    20,    -1,    22,    23,    24,    -1,    -1,    -1,
+    -1,    -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   155,   156,    -1,    -1,   159,    -1,   161,    -1,    -1,
+    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   155,
+   156,    -1,    -1,   159,    -1,   161,     7,     8,    -1,    10,
+    11,    12,    13,    14,    15,    16,    17,    -1,    19,    20,
+    -1,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   155,
+   156,    -1,    -1,   159,    -1,   161,    -1,    -1,    49,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   155,
+   156,    -1,    -1,   159,    -1,   161,    36,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   155,   156,    -1,
+    -1,   159,    -1,   161,    -1,    -1,    56,    57,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    69,
+    70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+    80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+    90,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   155,   156,    -1,    -1,   159,    -1,
+   161,   111,   112,   113,    -1,    -1,   116,   117,   118,   119,
+   120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+   130,   131,   132,   133,   134
+};
+/* -*-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 /* <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">haible at ilog.fr</a> 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
 #else
-typedef unsigned char yytype_uint8;
+#define YYSTACK_ALLOC malloc
 #endif
 
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-typedef signed char yytype_int8;
-#else
-typedef short int yytype_int8;
-#endif
-
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
-#else
-typedef unsigned short int yytype_uint16;
-#endif
-
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
-#else
-typedef short int yytype_int16;
-#endif
-
-#ifndef YYSIZE_T
-# ifdef __SIZE_TYPE__
-#  define YYSIZE_T __SIZE_TYPE__
-# elif defined size_t
-#  define YYSIZE_T size_t
-# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYSIZE_T size_t
-# else
-#  define YYSIZE_T unsigned int
-# endif
-#endif
-
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
-
-#ifndef YY_
-# if YYENABLE_NLS
-#  if ENABLE_NLS
-#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-#   define YY_(msgid) dgettext ("bison-runtime", msgid)
-#  endif
-# endif
-# ifndef YY_
-#  define YY_(msgid) msgid
-# endif
-#endif
-
-/* Suppress unused-variable warnings by "using" E.  */
-#if ! defined lint || defined __GNUC__
-# define YYUSE(e) ((void) (e))
-#else
-# define YYUSE(e) /* empty */
-#endif
-
-/* Identity function, used to suppress warnings about constant conditions.  */
-#ifndef lint
-# define YYID(n) (n)
-#else
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static int
-YYID (int i)
-#else
-static int
-YYID (i)
-    int i;
-#endif
-{
-  return i;
-}
-#endif
-
-#if ! defined yyoverflow || YYERROR_VERBOSE
-
-/* The parser invokes alloca or malloc; define the necessary symbols.  */
-
-# ifdef YYSTACK_USE_ALLOCA
-#  if YYSTACK_USE_ALLOCA
-#   ifdef __GNUC__
-#    define YYSTACK_ALLOC __builtin_alloca
-#   elif defined __BUILTIN_VA_ARG_INCR
-#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
-#   elif defined _AIX
-#    define YYSTACK_ALLOC __alloca
-#   elif defined _MSC_VER
-#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
-#    define alloca _alloca
-#   else
-#    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#     ifndef _STDLIB_H
-#      define _STDLIB_H 1
-#     endif
-#    endif
-#   endif
-#  endif
-# endif
-
-# ifdef YYSTACK_ALLOC
-   /* Pacify GCC's `empty if-body' warning.  */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
-#  ifndef YYSTACK_ALLOC_MAXIMUM
-    /* The OS might guarantee only one guard page at the bottom of the stack,
-       and a page size can be as small as 4096 bytes.  So we cannot safely
-       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
-       to allow for a few compiler-allocated temporary stack slots.  */
-#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
-#  endif
-# else
-#  define YYSTACK_ALLOC YYMALLOC
-#  define YYSTACK_FREE YYFREE
-#  ifndef YYSTACK_ALLOC_MAXIMUM
-#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
-#  endif
-#  if (defined __cplusplus && ! defined _STDLIB_H \
-       && ! ((defined YYMALLOC || defined malloc) \
-	     && (defined YYFREE || defined free)))
-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   ifndef _STDLIB_H
-#    define _STDLIB_H 1
-#   endif
-#  endif
-#  ifndef YYMALLOC
-#   define YYMALLOC malloc
-#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-#  ifndef YYFREE
-#   define YYFREE free
-#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-void free (void *); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-# endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-
-
-#if (! defined yyoverflow \
-     && (! defined __cplusplus \
-	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
-
-/* A type that is properly aligned for any stack member.  */
-union yyalloc
-{
-  yytype_int16 yyss;
-  YYSTYPE yyvs;
-  };
-
-/* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
-
-/* The size of an array large to enough to hold all stacks, each with
-   N elements.  */
-# define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
-      + YYSTACK_GAP_MAXIMUM)
-
-/* Copy COUNT objects from FROM to TO.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if defined __GNUC__ && 1 < __GNUC__
-#   define YYCOPY(To, From, Count) \
-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-#  else
-#   define YYCOPY(To, From, Count)		\
-      do					\
-	{					\
-	  YYSIZE_T yyi;				\
-	  for (yyi = 0; yyi < (Count); yyi++)	\
-	    (To)[yyi] = (From)[yyi];		\
-	}					\
-      while (YYID (0))
-#  endif
-# endif
-
-/* Relocate STACK from its old location to the new one.  The
-   local variables YYSIZE and YYSTACKSIZE give the old and new number of
-   elements in the stack, and YYPTR gives the new location of the
-   stack.  Advance YYPTR to a properly aligned location for the next
-   stack.  */
-# define YYSTACK_RELOCATE(Stack)					\
-    do									\
-      {									\
-	YYSIZE_T yynewbytes;						\
-	YYCOPY (&yyptr->Stack, Stack, yysize);				\
-	Stack = &yyptr->Stack;						\
-	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-	yyptr += yynewbytes / sizeof (*yyptr);				\
-      }									\
-    while (YYID (0))
-
-#endif
-
-/* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  43
-/* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1988
-
-/* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  164
-/* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  84
-/* YYNRULES -- Number of rules.  */
-#define YYNRULES  318
-/* YYNRULES -- Number of states.  */
-#define YYNSTATES  619
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
-#define YYUNDEFTOK  2
-#define YYMAXUTOK   404
-
-#define YYTRANSLATE(YYX)						\
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
-static const yytype_uint8 yytranslate[] =
-{
-       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     150,   151,   154,     2,   153,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     159,   152,   160,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   156,   155,   158,     2,     2,     2,     2,     2,   163,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     157,     2,     2,   161,     2,   162,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149
-};
-
-#if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
-   YYRHS.  */
-static const yytype_uint16 yyprhs[] =
-{
-       0,     0,     3,     5,     7,     9,    11,    13,    15,    17,
-      19,    21,    23,    25,    27,    29,    31,    33,    35,    37,
-      39,    41,    43,    45,    47,    49,    51,    53,    55,    57,
-      59,    61,    63,    65,    67,    69,    71,    73,    75,    77,
-      79,    81,    83,    85,    87,    89,    91,    93,    95,    97,
-      99,   101,   103,   105,   107,   109,   111,   113,   115,   117,
-     119,   121,   123,   125,   127,   129,   130,   135,   136,   139,
-     140,   142,   144,   146,   147,   150,   152,   154,   156,   158,
-     160,   162,   164,   166,   167,   169,   171,   173,   174,   176,
-     178,   179,   181,   183,   185,   187,   188,   190,   192,   193,
-     195,   197,   199,   201,   203,   206,   208,   210,   212,   214,
-     216,   218,   220,   222,   224,   225,   228,   230,   232,   234,
-     236,   238,   240,   241,   244,   245,   248,   249,   252,   253,
-     257,   260,   261,   263,   264,   268,   270,   273,   275,   277,
-     279,   281,   283,   285,   287,   289,   291,   295,   297,   300,
-     306,   312,   318,   324,   328,   331,   337,   342,   345,   347,
-     349,   351,   355,   357,   361,   363,   364,   366,   370,   375,
-     379,   383,   388,   393,   397,   404,   410,   413,   416,   419,
-     422,   425,   428,   431,   434,   437,   440,   443,   446,   453,
-     459,   468,   475,   482,   490,   498,   505,   514,   523,   527,
-     529,   531,   533,   535,   536,   539,   546,   548,   549,   551,
-     554,   555,   559,   560,   564,   568,   572,   576,   577,   586,
-     587,   597,   598,   608,   614,   617,   621,   623,   627,   631,
-     635,   639,   641,   642,   648,   652,   654,   658,   660,   661,
-     672,   674,   676,   681,   683,   685,   688,   692,   693,   695,
-     697,   699,   701,   703,   705,   707,   709,   711,   715,   717,
-     723,   725,   727,   729,   731,   733,   735,   738,   741,   744,
-     748,   751,   752,   754,   757,   760,   764,   774,   784,   793,
-     808,   810,   812,   819,   825,   828,   835,   843,   848,   853,
-     860,   867,   868,   869,   873,   876,   878,   884,   890,   897,
-     904,   909,   916,   921,   926,   933,   940,   943,   952,   954,
-     956,   957,   961,   968,   972,   979,   982,   988,   996
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
-static const yytype_int16 yyrhs[] =
-{
-     210,     0,    -1,    74,    -1,    75,    -1,    76,    -1,    77,
-      -1,    78,    -1,    79,    -1,    80,    -1,    81,    -1,    82,
-      -1,    86,    -1,    87,    -1,    88,    -1,    83,    -1,    84,
-      -1,    85,    -1,   117,    -1,   118,    -1,   119,    -1,   120,
-      -1,   121,    -1,   122,    -1,   123,    -1,   124,    -1,   125,
-      -1,   126,    -1,   127,    -1,   128,    -1,    91,    -1,    92,
-      -1,    93,    -1,    94,    -1,    95,    -1,    96,    -1,    97,
-      -1,    98,    -1,    99,    -1,   100,    -1,   101,    -1,   102,
-      -1,   103,    -1,   104,    -1,   105,    -1,   106,    -1,   107,
-      -1,   108,    -1,   109,    -1,   110,    -1,    97,    -1,    98,
-      -1,    99,    -1,   100,    -1,    26,    -1,    27,    -1,    11,
-      -1,    12,    -1,    13,    -1,    16,    -1,    15,    -1,    14,
-      -1,    19,    -1,    22,    -1,    24,    -1,   172,    -1,    -1,
-      54,   150,     4,   151,    -1,    -1,   172,   152,    -1,    -1,
-      20,    -1,    23,    -1,   178,    -1,    -1,   176,   152,    -1,
-      42,    -1,    44,    -1,    43,    -1,    45,    -1,    47,    -1,
-      46,    -1,    48,    -1,    50,    -1,    -1,   147,    -1,   148,
-      -1,   149,    -1,    -1,    46,    -1,    48,    -1,    -1,    42,
-      -1,    43,    -1,    44,    -1,    47,    -1,    -1,    44,    -1,
-      42,    -1,    -1,    62,    -1,    63,    -1,    64,    -1,    65,
-      -1,    66,    -1,    61,     4,    -1,   136,    -1,   118,    -1,
-     135,    -1,   119,    -1,   138,    -1,   139,    -1,   141,    -1,
-     142,    -1,   143,    -1,    -1,   187,   186,    -1,   137,    -1,
-     140,    -1,   136,    -1,   135,    -1,   144,    -1,   145,    -1,
-      -1,   189,   188,    -1,    -1,   146,    22,    -1,    -1,    53,
-       4,    -1,    -1,   153,    53,     4,    -1,    34,    22,    -1,
-      -1,   193,    -1,    -1,   153,   196,   195,    -1,   193,    -1,
-      53,     4,    -1,    11,    -1,    12,    -1,    13,    -1,    16,
-      -1,    15,    -1,    14,    -1,    17,    -1,    49,    -1,   197,
-      -1,   198,   174,   154,    -1,   232,    -1,   155,     4,    -1,
-     198,   150,   202,   151,   189,    -1,    10,   150,   202,   151,
-     189,    -1,   156,     4,   157,   198,   158,    -1,   159,     4,
-     157,   198,   160,    -1,   161,   203,   162,    -1,   161,   162,
-      -1,   159,   161,   203,   162,   160,    -1,   159,   161,   162,
-     160,    -1,   198,   187,    -1,   198,    -1,    10,    -1,   199,
-      -1,   201,   153,   199,    -1,   201,    -1,   201,   153,    39,
-      -1,    39,    -1,    -1,   198,    -1,   203,   153,   198,    -1,
-     198,   156,   206,   158,    -1,   198,   156,   158,    -1,   198,
-     163,    22,    -1,   198,   159,   206,   160,    -1,   198,   161,
-     206,   162,    -1,   198,   161,   162,    -1,   198,   159,   161,
-     206,   162,   160,    -1,   198,   159,   161,   162,   160,    -1,
-     198,    40,    -1,   198,    41,    -1,   198,   232,    -1,   198,
-     205,    -1,   198,    25,    -1,   170,     3,    -1,   170,     5,
-      -1,   170,     4,    -1,   170,     6,    -1,    11,    26,    -1,
-      11,    27,    -1,   171,     9,    -1,   167,   150,   204,    38,
-     198,   151,    -1,   116,   150,   204,   243,   151,    -1,   130,
-     150,   204,   153,   204,   153,   204,   151,    -1,   165,   150,
-     204,   153,   204,   151,    -1,   166,   150,   204,   153,   204,
-     151,    -1,    89,   168,   150,   204,   153,   204,   151,    -1,
-      90,   169,   150,   204,   153,   204,   151,    -1,   132,   150,
-     204,   153,   204,   151,    -1,   133,   150,   204,   153,   204,
-     153,   204,   151,    -1,   134,   150,   204,   153,   204,   153,
-     204,   151,    -1,   206,   153,   204,    -1,   204,    -1,    32,
-      -1,    33,    -1,    37,    -1,    -1,   200,   232,    -1,   122,
-     150,   209,    38,   198,   151,    -1,   211,    -1,    -1,   212,
-      -1,   211,   212,    -1,    -1,    31,   213,   228,    -1,    -1,
-      30,   214,   229,    -1,    59,    58,   218,    -1,   175,    18,
-     198,    -1,   175,    18,    10,    -1,    -1,   177,   181,   208,
-     207,   204,   174,   215,   195,    -1,    -1,   177,   179,   181,
-     208,   207,   204,   174,   216,   195,    -1,    -1,   177,   180,
-     181,   208,   207,   198,   174,   217,   195,    -1,   177,   181,
-      35,   184,   209,    -1,    51,   219,    -1,    55,   152,   220,
-      -1,    22,    -1,    52,   152,    22,    -1,    67,   152,    22,
-      -1,   156,   221,   158,    -1,   221,   153,    22,    -1,    22,
-      -1,    -1,   222,   153,   198,   187,   173,    -1,   198,   187,
-     173,    -1,   222,    -1,   222,   153,    39,    -1,    39,    -1,
-      -1,   185,   200,   176,   150,   223,   151,   189,   194,   191,
-     190,    -1,    28,    -1,   161,    -1,   183,   181,   224,   225,
-      -1,    29,    -1,   162,    -1,   235,   227,    -1,   182,   181,
-     224,    -1,    -1,    60,    -1,     3,    -1,     4,    -1,     9,
-      -1,    26,    -1,    27,    -1,    40,    -1,    41,    -1,    25,
-      -1,   159,   206,   160,    -1,   205,    -1,    58,   230,    22,
-     153,    22,    -1,     7,    -1,     8,    -1,   172,    -1,   176,
-      -1,   232,    -1,   231,    -1,   198,   233,    -1,   235,   236,
-      -1,   226,   236,    -1,   237,   175,   238,    -1,   237,   240,
-      -1,    -1,    21,    -1,    68,   234,    -1,    68,    10,    -1,
-      69,    17,   233,    -1,    69,    11,   233,   153,    17,   233,
-     153,    17,   233,    -1,    70,   170,   233,   153,    17,   233,
-     156,   239,   158,    -1,    70,   170,   233,   153,    17,   233,
-     156,   158,    -1,    71,   185,   200,   233,   150,   242,   151,
-     189,    38,    17,   233,    72,    17,   233,    -1,    72,    -1,
-      73,    -1,   239,   170,   231,   153,    17,   233,    -1,   170,
-     231,   153,    17,   233,    -1,   175,   245,    -1,   198,   156,
-     233,   153,   233,   158,    -1,   241,   153,   156,   233,   153,
-     233,   158,    -1,   198,   187,   233,   187,    -1,    17,   187,
-     233,   187,    -1,   242,   153,   198,   187,   233,   187,    -1,
-     242,   153,    17,   187,   233,   187,    -1,    -1,    -1,   243,
-     153,   234,    -1,    57,    56,    -1,    56,    -1,   165,   198,
-     233,   153,   233,    -1,   166,   198,   233,   153,   233,    -1,
-      89,   168,   198,   233,   153,   233,    -1,    90,   169,   198,
-     233,   153,   233,    -1,   167,   234,    38,   198,    -1,   130,
-     234,   153,   234,   153,   234,    -1,   131,   234,   153,   198,
-      -1,   132,   234,   153,   234,    -1,   133,   234,   153,   234,
-     153,   234,    -1,   134,   234,   153,   234,   153,   234,    -1,
-     129,   241,    -1,   244,   185,   200,   233,   150,   242,   151,
-     189,    -1,   247,    -1,    36,    -1,    -1,   111,   198,   192,
-      -1,   111,   198,   153,    11,   233,   192,    -1,   112,   198,
-     192,    -1,   112,   198,   153,    11,   233,   192,    -1,   113,
-     234,    -1,   246,   114,   198,   233,   192,    -1,   246,   115,
-     234,   153,   198,   233,   192,    -1,   116,   198,   233,   243,
-      -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
-static const yytype_uint16 yyrline[] =
-{
-       0,  1107,  1107,  1107,  1107,  1107,  1107,  1107,  1107,  1107,
-    1107,  1108,  1108,  1108,  1108,  1108,  1108,  1109,  1109,  1109,
-    1109,  1109,  1109,  1110,  1110,  1110,  1110,  1110,  1110,  1113,
-    1113,  1114,  1114,  1115,  1115,  1116,  1116,  1117,  1117,  1121,
-    1121,  1122,  1122,  1123,  1123,  1124,  1124,  1125,  1125,  1126,
-    1126,  1127,  1127,  1128,  1129,  1134,  1135,  1135,  1135,  1135,
-    1135,  1137,  1137,  1137,  1138,  1138,  1140,  1141,  1145,  1149,
-    1154,  1154,  1156,  1157,  1162,  1168,  1169,  1170,  1171,  1172,
-    1176,  1177,  1178,  1182,  1183,  1184,  1185,  1189,  1190,  1191,
-    1195,  1196,  1197,  1198,  1199,  1203,  1204,  1205,  1208,  1209,
-    1210,  1211,  1212,  1213,  1214,  1221,  1222,  1223,  1224,  1225,
-    1226,  1227,  1228,  1229,  1232,  1233,  1238,  1239,  1240,  1241,
-    1242,  1243,  1246,  1247,  1252,  1253,  1260,  1261,  1267,  1268,
-    1277,  1285,  1286,  1291,  1292,  1293,  1298,  1311,  1311,  1311,
-    1311,  1311,  1311,  1311,  1314,  1318,  1322,  1329,  1334,  1342,
-    1372,  1397,  1402,  1412,  1422,  1426,  1436,  1443,  1452,  1459,
-    1464,  1469,  1476,  1477,  1484,  1491,  1499,  1505,  1517,  1545,
-    1561,  1588,  1616,  1642,  1662,  1688,  1708,  1720,  1727,  1793,
-    1803,  1813,  1819,  1829,  1835,  1845,  1850,  1855,  1868,  1880,
-    1902,  1910,  1916,  1927,  1932,  1937,  1943,  1949,  1958,  1962,
-    1970,  1970,  1973,  1973,  1976,  1988,  2009,  2014,  2022,  2023,
-    2027,  2027,  2031,  2031,  2034,  2037,  2061,  2073,  2072,  2084,
-    2083,  2093,  2092,  2103,  2143,  2146,  2152,  2162,  2166,  2171,
-    2173,  2178,  2183,  2192,  2202,  2213,  2217,  2226,  2235,  2240,
-    2374,  2374,  2376,  2385,  2385,  2387,  2392,  2404,  2408,  2413,
-    2417,  2421,  2425,  2429,  2433,  2437,  2441,  2445,  2470,  2474,
-    2484,  2488,  2492,  2497,  2504,  2504,  2510,  2519,  2523,  2532,
-    2541,  2550,  2554,  2561,  2565,  2569,  2574,  2584,  2603,  2612,
-    2703,  2707,  2714,  2725,  2738,  2748,  2759,  2769,  2780,  2788,
-    2798,  2805,  2808,  2809,  2816,  2820,  2825,  2841,  2858,  2872,
-    2886,  2898,  2906,  2913,  2919,  2925,  2931,  2946,  3044,  3049,
-    3053,  3060,  3067,  3075,  3082,  3090,  3098,  3112,  3129
-};
-#endif
-
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
-/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
-   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
-static const char *const yytname[] =
-{
-  "$end", "error", "$undefined", "ESINT64VAL", "EUINT64VAL", "ESAPINTVAL",
-  "EUAPINTVAL", "LOCALVAL_ID", "GLOBALVAL_ID", "FPVAL", "VOID", "INTTYPE",
-  "FLOAT", "DOUBLE", "X86_FP80", "FP128", "PPC_FP128", "LABEL", "TYPE",
-  "LOCALVAR", "GLOBALVAR", "LABELSTR", "STRINGCONSTANT",
-  "ATSTRINGCONSTANT", "PCTSTRINGCONSTANT", "ZEROINITIALIZER", "TRUETOK",
-  "FALSETOK", "BEGINTOK", "ENDTOK", "DECLARE", "DEFINE", "GLOBAL",
-  "CONSTANT", "SECTION", "ALIAS", "VOLATILE", "THREAD_LOCAL", "TO",
-  "DOTDOTDOT", "NULL_TOK", "UNDEF", "INTERNAL", "LINKONCE", "WEAK",
-  "APPENDING", "DLLIMPORT", "DLLEXPORT", "EXTERN_WEAK", "OPAQUE",
-  "EXTERNAL", "TARGET", "TRIPLE", "ALIGN", "ADDRSPACE", "DEPLIBS", "CALL",
-  "TAIL", "ASM_TOK", "MODULE", "SIDEEFFECT", "CC_TOK", "CCC_TOK",
-  "FASTCC_TOK", "COLDCC_TOK", "X86_STDCALLCC_TOK", "X86_FASTCALLCC_TOK",
-  "DATALAYOUT", "RET", "BR", "SWITCH", "INVOKE", "UNWIND", "UNREACHABLE",
-  "ADD", "SUB", "MUL", "UDIV", "SDIV", "FDIV", "UREM", "SREM", "FREM",
-  "AND", "OR", "XOR", "SHL", "LSHR", "ASHR", "ICMP", "FCMP", "EQ", "NE",
-  "SLT", "SGT", "SLE", "SGE", "ULT", "UGT", "ULE", "UGE", "OEQ", "ONE",
-  "OLT", "OGT", "OLE", "OGE", "ORD", "UNO", "UEQ", "UNE", "MALLOC",
-  "ALLOCA", "FREE", "LOAD", "STORE", "GETELEMENTPTR", "TRUNC", "ZEXT",
-  "SEXT", "FPTRUNC", "FPEXT", "BITCAST", "UITOFP", "SITOFP", "FPTOUI",
-  "FPTOSI", "INTTOPTR", "PTRTOINT", "PHI_TOK", "SELECT", "VAARG",
-  "EXTRACTELEMENT", "INSERTELEMENT", "SHUFFLEVECTOR", "SIGNEXT", "ZEROEXT",
-  "NORETURN", "INREG", "SRET", "NOUNWIND", "NOALIAS", "BYVAL", "NEST",
-  "READNONE", "READONLY", "GC", "DEFAULT", "HIDDEN", "PROTECTED", "'('",
-  "')'", "'='", "','", "'*'", "'\\\\'", "'['", "'x'", "']'", "'<'", "'>'",
-  "'{'", "'}'", "'c'", "$accept", "ArithmeticOps", "LogicalOps", "CastOps",
-  "IPredicates", "FPredicates", "IntType", "FPType", "LocalName",
-  "OptLocalName", "OptAddrSpace", "OptLocalAssign", "GlobalName",
-  "OptGlobalAssign", "GlobalAssign", "GVInternalLinkage",
-  "GVExternalLinkage", "GVVisibilityStyle", "FunctionDeclareLinkage",
-  "FunctionDefineLinkage", "AliasLinkage", "OptCallingConv", "ParamAttr",
-  "OptParamAttrs", "FuncAttr", "OptFuncAttrs", "OptGC", "OptAlign",
-  "OptCAlign", "SectionString", "OptSection", "GlobalVarAttributes",
-  "GlobalVarAttribute", "PrimType", "Types", "ArgType", "ResultTypes",
-  "ArgTypeList", "ArgTypeListI", "TypeListI", "ConstVal", "ConstExpr",
-  "ConstVector", "GlobalType", "ThreadLocal", "AliaseeRef", "Module",
-  "DefinitionList", "Definition", "@1", "@2", "@3", "@4", "@5", "AsmBlock",
-  "TargetDefinition", "LibrariesDefinition", "LibList", "ArgListH",
-  "ArgList", "FunctionHeaderH", "BEGIN", "FunctionHeader", "END",
-  "Function", "FunctionProto", "OptSideEffect", "ConstValueRef",
-  "SymbolicValueRef", "ValueRef", "ResolvedVal", "BasicBlockList",
-  "BasicBlock", "InstructionList", "BBTerminatorInst", "JumpTable", "Inst",
-  "PHIList", "ParamList", "IndexList", "OptTailCall", "InstVal",
-  "OptVolatile", "MemoryInst", 0
-};
-#endif
-
-# ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
-   token YYLEX-NUM.  */
-static const yytype_uint16 yytoknum[] =
-{
-       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
-     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
-     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
-     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
-     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
-     385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
-     395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
-      40,    41,    61,    44,    42,    92,    91,   120,    93,    60,
-      62,   123,   125,    99
-};
-# endif
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint8 yyr1[] =
-{
-       0,   164,   165,   165,   165,   165,   165,   165,   165,   165,
-     165,   166,   166,   166,   166,   166,   166,   167,   167,   167,
-     167,   167,   167,   167,   167,   167,   167,   167,   167,   168,
-     168,   168,   168,   168,   168,   168,   168,   168,   168,   169,
-     169,   169,   169,   169,   169,   169,   169,   169,   169,   169,
-     169,   169,   169,   169,   169,   170,   171,   171,   171,   171,
-     171,   172,   172,   172,   173,   173,   174,   174,   175,   175,
-     176,   176,   177,   177,   178,   179,   179,   179,   179,   179,
-     180,   180,   180,   181,   181,   181,   181,   182,   182,   182,
-     183,   183,   183,   183,   183,   184,   184,   184,   185,   185,
-     185,   185,   185,   185,   185,   186,   186,   186,   186,   186,
-     186,   186,   186,   186,   187,   187,   188,   188,   188,   188,
-     188,   188,   189,   189,   190,   190,   191,   191,   192,   192,
-     193,   194,   194,   195,   195,   196,   196,   197,   197,   197,
-     197,   197,   197,   197,   198,   198,   198,   198,   198,   198,
-     198,   198,   198,   198,   198,   198,   198,   199,   200,   200,
-     201,   201,   202,   202,   202,   202,   203,   203,   204,   204,
-     204,   204,   204,   204,   204,   204,   204,   204,   204,   204,
-     204,   204,   204,   204,   204,   204,   204,   204,   205,   205,
-     205,   205,   205,   205,   205,   205,   205,   205,   206,   206,
-     207,   207,   208,   208,   209,   209,   210,   210,   211,   211,
-     213,   212,   214,   212,   212,   212,   212,   215,   212,   216,
-     212,   217,   212,   212,   212,   212,   218,   219,   219,   220,
-     221,   221,   221,   222,   222,   223,   223,   223,   223,   224,
-     225,   225,   226,   227,   227,   228,   229,   230,   230,   231,
-     231,   231,   231,   231,   231,   231,   231,   231,   231,   231,
-     232,   232,   232,   232,   233,   233,   234,   235,   235,   236,
-     237,   237,   237,   238,   238,   238,   238,   238,   238,   238,
-     238,   238,   239,   239,   240,   241,   241,   242,   242,   242,
-     242,   242,   243,   243,   244,   244,   245,   245,   245,   245,
-     245,   245,   245,   245,   245,   245,   245,   245,   245,   246,
-     246,   247,   247,   247,   247,   247,   247,   247,   247
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
-{
-       0,     2,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     0,     4,     0,     2,     0,
-       1,     1,     1,     0,     2,     1,     1,     1,     1,     1,
-       1,     1,     1,     0,     1,     1,     1,     0,     1,     1,
-       0,     1,     1,     1,     1,     0,     1,     1,     0,     1,
-       1,     1,     1,     1,     2,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     0,     2,     1,     1,     1,     1,
-       1,     1,     0,     2,     0,     2,     0,     2,     0,     3,
-       2,     0,     1,     0,     3,     1,     2,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     3,     1,     2,     5,
-       5,     5,     5,     3,     2,     5,     4,     2,     1,     1,
-       1,     3,     1,     3,     1,     0,     1,     3,     4,     3,
-       3,     4,     4,     3,     6,     5,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     6,     5,
-       8,     6,     6,     7,     7,     6,     8,     8,     3,     1,
-       1,     1,     1,     0,     2,     6,     1,     0,     1,     2,
-       0,     3,     0,     3,     3,     3,     3,     0,     8,     0,
-       9,     0,     9,     5,     2,     3,     1,     3,     3,     3,
-       3,     1,     0,     5,     3,     1,     3,     1,     0,    10,
-       1,     1,     4,     1,     1,     2,     3,     0,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     3,     1,     5,
-       1,     1,     1,     1,     1,     1,     2,     2,     2,     3,
-       2,     0,     1,     2,     2,     3,     9,     9,     8,    14,
-       1,     1,     6,     5,     2,     6,     7,     4,     4,     6,
-       6,     0,     0,     3,     2,     1,     5,     5,     6,     6,
-       4,     6,     4,     4,     6,     6,     2,     8,     1,     1,
-       0,     3,     6,     3,     6,     2,     5,     7,     4
-};
-
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
-   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
-   means the default is an error.  */
-static const yytype_uint16 yydefact[] =
-{
-      73,    61,    70,    62,    71,    63,   212,   210,     0,     0,
-       0,     0,     0,     0,    83,    72,     0,    73,   208,    87,
-      90,     0,     0,   224,     0,     0,    68,     0,    74,    75,
-      77,    76,    78,    80,    79,    81,    82,    84,    85,    86,
-      83,    83,   203,     1,   209,    88,    89,    83,   213,    91,
-      92,    93,    94,    83,   271,   211,   271,     0,     0,   232,
-     225,   226,   214,   260,   261,   216,   137,   138,   139,   142,
-     141,   140,   143,   144,     0,     0,     0,     0,   262,   263,
-     145,   215,   147,   203,   203,    95,   202,     0,    98,    98,
-     272,   268,    69,   243,   244,   245,   267,   227,   228,   231,
-       0,   165,   148,     0,     0,     0,     0,   154,   166,     0,
-       0,   165,     0,     0,     0,    97,    96,     0,   200,   201,
-       0,     0,    99,   100,   101,   102,   103,     0,   246,     0,
-     310,   270,     0,   229,   164,   114,   160,   162,     0,     0,
-       0,     0,     0,     0,   153,     0,     0,   146,     0,     0,
-     159,     0,   158,     0,   223,   137,   138,   139,   142,   141,
-     140,     0,     0,    67,    67,   104,     0,   240,   241,   242,
-     309,   295,     0,     0,     0,     0,    98,   280,   281,     2,
-       3,     4,     5,     6,     7,     8,     9,    10,    14,    15,
-      16,    11,    12,    13,     0,     0,     0,     0,     0,     0,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   269,    98,   284,     0,   308,   230,   157,     0,   122,
-      67,    67,   156,     0,   167,     0,   122,    67,    67,     0,
-     204,   185,   186,   181,   183,   182,   184,   187,   180,   176,
-     177,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   179,   178,   217,     0,   294,
-     274,    67,   273,     0,     0,    55,     0,     0,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,     0,    53,
-      54,    49,    50,    51,    52,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,     0,   128,   128,   315,    67,
-      67,   306,     0,     0,     0,     0,     0,    67,    67,     0,
-       0,     0,     0,   106,   108,   107,   105,   109,   110,   111,
-     112,   113,   115,   163,   161,   150,   151,   152,   155,    66,
-     149,   219,   221,     0,     0,     0,     0,     0,     0,     0,
-       0,   169,   199,     0,     0,     0,   173,     0,   170,     0,
-       0,     0,   133,   238,   249,   250,   251,   256,   252,   253,
-     254,   255,   247,     0,   258,   265,   264,   266,     0,   275,
-       0,     0,    67,    67,     0,   311,     0,   313,   292,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      67,     0,   119,   118,   116,   117,   120,   121,   123,   133,
-     133,     0,     0,     0,   292,     0,     0,     0,     0,     0,
-     168,   154,   166,     0,   171,   172,     0,     0,     0,     0,
-     218,   237,   114,   235,     0,   248,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   318,     0,     0,     0,
-     302,   303,     0,     0,     0,     0,   300,     0,   128,     0,
-     220,   222,    67,     0,     0,     0,     0,     0,     0,     0,
-     198,   175,     0,     0,     0,     0,     0,     0,   135,   133,
-      65,     0,   122,     0,   257,     0,     0,   291,     0,     0,
-     128,   129,   128,     0,     0,     0,     0,     0,     0,   296,
-     297,   291,     0,   316,    67,   205,     0,     0,   189,     0,
-       0,     0,     0,   174,     0,     0,    67,   130,   136,   134,
-      64,   234,   236,   114,   131,     0,     0,     0,   114,   114,
-       0,   298,   299,   312,   314,   293,     0,     0,   301,   304,
-     305,     0,   128,     0,     0,     0,   195,     0,     0,   191,
-     192,   188,    65,   132,   126,   259,     0,     0,     0,     0,
-     122,     0,   285,     0,   122,   317,   193,   194,     0,     0,
-       0,   233,     0,   124,     0,   278,     0,     0,   106,   108,
-     114,   114,     0,   114,   114,   286,   307,   190,   196,   197,
-     127,     0,   239,   276,     0,   277,     0,   288,   287,     0,
-       0,     0,   125,     0,     0,     0,   114,   114,     0,     0,
-       0,   290,   289,   283,     0,     0,   282,     0,   279
-};
-
-/* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int16 yydefgoto[] =
-{
-      -1,   262,   263,   264,   288,   305,   161,   162,    78,   521,
-     112,    12,    79,    14,    15,    40,    41,    42,    47,    53,
-     117,   127,   332,   227,   408,   335,   592,   573,   385,   478,
-     554,   430,   479,    80,   163,   136,   153,   137,   138,   109,
-     352,   374,   353,   120,    87,   154,    16,    17,    18,    20,
-      19,   362,   409,   410,    62,    23,    60,   100,   433,   434,
-     128,   169,    54,    95,    55,    48,   436,   375,    82,   377,
-     272,    56,    91,    92,   221,   577,   131,   311,   530,   446,
-     222,   223,   224,   225
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-#define YYPACT_NINF -544
-static const yytype_int16 yypact[] =
-{
-     291,  -544,  -544,  -544,  -544,  -544,  -544,  -544,    -9,  -121,
-     -14,   -80,    72,   -50,    19,  -544,   110,   423,  -544,   113,
-      13,   -37,   -33,  -544,   -16,   121,  -544,  1532,  -544,  -544,
-    -544,  -544,  -544,  -544,  -544,  -544,  -544,  -544,  -544,  -544,
-     128,   128,   160,  -544,  -544,  -544,  -544,   128,  -544,  -544,
-    -544,  -544,  -544,   128,   133,  -544,     3,   183,   189,   192,
-    -544,  -544,  -544,  -544,  -544,    32,  -544,  -544,  -544,  -544,
-    -544,  -544,  -544,  -544,   215,   218,     1,   509,  -544,  -544,
-    -544,   -18,  -544,   190,   190,   184,  -544,   260,   219,   219,
-    -544,  -544,   199,  -544,  -544,  -544,  -544,  -544,  -544,  -544,
-     -53,  1055,  -544,    86,   102,   748,    32,  -544,   -18,  -108,
-     118,  1055,   109,   260,   260,  -544,  -544,  1298,  -544,  -544,
-    1572,   267,  -544,  -544,  -544,  -544,  -544,  1630,  -544,   -17,
-    1854,  -544,   256,  -544,  -544,   -18,  -544,   136,   135,  1648,
-    1648,   137,   -85,  1648,  -544,   300,   157,  -544,  1572,  1648,
-      32,   162,   -18,    74,  -544,    44,   307,   311,   324,   334,
-     335,   236,   336,  1110,   293,  -544,   101,  -544,  -544,  -544,
-    -544,  -544,   292,  1688,    63,   338,   219,  -544,  -544,  -544,
-    -544,  -544,  -544,  -544,  -544,  -544,  -544,  -544,  -544,  -544,
-    -544,  -544,  -544,  -544,   392,  1194,  1648,  1648,  1648,  1648,
-    -544,  -544,  -544,  -544,  -544,  -544,  -544,  -544,  -544,  -544,
-    -544,  -544,  1648,  1648,  1648,  1648,  1648,  1648,  1648,  1648,
-    1648,  -544,   219,  -544,    49,  -544,  -544,   269,  1377,  -544,
-     -42,   -38,  -544,   197,   -18,   200,  -544,   293,   -13,  1298,
-    -544,  -544,  -544,  -544,  -544,  -544,  -544,  -544,  -544,  -544,
-    -544,   392,  1194,   202,   209,   212,   213,   214,  1417,  1728,
-     788,   348,   221,   223,   224,  -544,  -544,  -544,   226,  -544,
-      32,   699,  -544,   837,   837,  -544,   837,  1630,  -544,  -544,
-    -544,  -544,  -544,  -544,  -544,  -544,  -544,  -544,  1648,  -544,
-    -544,  -544,  -544,  -544,  -544,  -544,  -544,  -544,  -544,  -544,
-    -544,  -544,  -544,  -544,  -544,  1648,    -8,    -2,  -544,   699,
-     -15,   222,   227,   229,   230,   239,   245,   699,   699,   339,
-    1630,  1648,  1648,  -544,  -544,  -544,  -544,  -544,  -544,  -544,
-    -544,  -544,  -544,  -544,  -544,   120,  -544,  -544,  -544,  -544,
-     120,  -544,   109,   340,   249,   250,  1572,  1572,  1572,  1572,
-    1572,  -544,  -544,   -47,  1010,    -4,  -544,   -75,  -544,  1572,
-    1572,  1572,   248,  1457,  -544,  -544,  -544,  -544,  -544,  -544,
-    -544,  -544,   329,  1572,  -544,  -544,  -544,  -544,   262,  -544,
-     263,   837,   699,   699,    23,  -544,    31,  -544,  -544,   837,
-     246,  1648,  1648,  1648,  1648,  1648,   264,   265,  1648,   837,
-     699,   266,  -544,  -544,  -544,  -544,  -544,  -544,  -544,   248,
-     248,  1648,  1572,  1572,  -544,   273,   274,   275,   276,  1572,
-    -544,   271,   965,   -67,  -544,  -544,   283,   284,   371,     6,
-    -544,  -544,   -18,   285,   288,  -544,   398,    16,   427,   431,
-     301,   297,   299,   837,   452,   837,   305,   310,   837,   312,
-     -18,  -544,   313,   323,   837,   837,   -18,   314,   326,  1648,
-    -544,  -544,    34,   328,   343,   154,  1572,  1572,  1572,  1572,
-    -544,  -544,   317,  1572,  1572,  1648,   438,   489,  -544,   248,
-     131,  1475,  -544,   344,  -544,   837,   837,  1746,   837,   837,
-     326,  -544,   326,  1648,   837,   345,  1648,  1648,  1648,  -544,
-    -544,  1746,   448,  -544,   699,  -544,  1572,  1572,  -544,   351,
-     354,   353,   356,  -544,   360,   361,    79,  -544,  -544,  -544,
-    -544,  -544,  -544,   -18,    -6,   485,   362,   357,    29,   -18,
-     173,  -544,  -544,  -544,  -544,  -544,   369,   837,  -544,  -544,
-    -544,   176,   326,   363,   379,  1572,  -544,  1572,  1572,  -544,
-    -544,  -544,   131,  -544,   481,  -544,   521,    -1,   558,   558,
-    -544,  1803,  -544,   381,  -544,  -544,  -544,  -544,   389,   391,
-     394,  -544,   539,   400,   837,  -544,  1249,     2,   397,   399,
-    -544,  -544,    80,    29,   -18,  -544,   120,  -544,  -544,  -544,
-    -544,   526,  -544,  -544,   401,  -544,  1249,   269,   269,   538,
-     558,   558,  -544,   540,   403,   837,  -544,  -544,   837,   542,
-     488,   269,   269,  -544,   837,   546,  -544,   837,  -544
-};
-
-/* YYPGOTO[NTERM-NUM].  */
-static const yytype_int16 yypgoto[] =
-{
-    -544,   434,   439,   440,   320,   316,  -171,  -544,     0,    22,
-    -134,   483,     9,  -544,  -544,  -544,  -544,   191,  -544,  -544,
-    -544,  -149,  -544,  -403,  -544,  -230,  -544,  -544,  -284,    52,
-    -544,  -372,  -544,  -544,   -26,   358,  -119,  -544,   468,   482,
-    -113,  -161,  -245,   225,   257,   350,  -544,  -544,   573,  -544,
-    -544,  -544,  -544,  -544,  -544,  -544,  -544,  -544,  -544,  -544,
-     502,  -544,  -544,  -544,  -544,  -544,  -544,  -543,   -64,    14,
-    -195,  -544,   536,  -544,  -544,  -544,  -544,  -544,    92,   180,
-    -544,  -544,  -544,  -544
-};
-
-/* 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 -208
-static const yytype_int16 yytable[] =
-{
-      11,    81,   265,   308,   276,   104,   340,   164,   166,    13,
-     275,   167,   110,   275,   355,   357,   110,    11,   312,   313,
-     314,   315,   316,   387,    90,   319,    13,   277,   476,   480,
-     267,    24,    93,   594,   443,   237,   110,   460,   461,   110,
-     476,   110,   445,    21,    25,   143,   110,   -55,   -55,   -55,
-     -55,   108,   110,   604,   144,    49,    50,    51,    22,   477,
-      52,    29,    30,    31,    32,    33,    34,    35,   143,    36,
-     241,   242,    26,   320,   273,   135,   444,   233,   419,   108,
-     274,    63,    64,  -143,   444,   135,   419,   425,   110,   240,
-      27,   152,    11,     1,     2,   472,     3,     4,     5,   266,
-     132,   152,    28,   341,   342,   133,   419,   519,   111,   423,
-      43,   420,   111,   230,   231,    57,   336,   234,   599,    58,
-     552,     2,   337,   238,     4,   558,   559,   401,   437,   402,
-     403,   404,   111,   110,   405,   111,   -67,   111,   406,   407,
-      59,   389,   111,    61,   168,   384,   -67,   271,   111,   419,
-       1,   386,   -67,     3,    90,     5,   424,   575,   381,    45,
-     595,    46,   105,   321,   322,    94,    37,    38,    39,   419,
-     306,   307,   271,   309,   503,   268,   484,   597,   598,  -143,
-     600,   601,   101,  -143,   111,   505,   310,   271,   271,   271,
-     271,   271,   317,   318,   271,    85,   449,    86,   451,   452,
-     453,   399,   135,   611,   612,    97,   533,   376,   534,   376,
-     376,    98,   376,   152,    99,   402,   403,   404,     1,   102,
-     405,     3,   103,     5,   406,   407,   115,    86,   116,   111,
-     551,    83,    84,   414,   415,   416,   417,   418,    88,   243,
-     244,   245,   246,   139,    89,   376,   426,   427,   428,   323,
-     324,   152,   524,   376,   376,   402,   403,   404,   565,   140,
-     405,   265,   382,   147,   406,   407,   325,   326,   145,   327,
-     328,   165,   329,   330,   331,    37,    38,    39,   226,   383,
-     121,   122,   123,   124,   125,   126,   229,   378,   379,   228,
-     380,  -207,   118,   119,   152,   400,   271,   232,   535,   463,
-     464,   538,   539,   540,   235,   508,   470,   493,   236,   -69,
-       1,     2,   239,     3,     4,     5,   -56,   376,   376,   376,
-     -57,     6,     7,   388,   560,   376,   561,   564,   422,   561,
-     582,   396,   397,   -60,   586,   376,   376,   432,   148,   149,
-     113,   114,     8,   -59,   -58,   247,     9,   110,   269,   275,
-      10,   339,   346,   509,   510,   511,   512,   338,   266,   347,
-     514,   515,   348,   349,   350,   271,   450,   271,   271,   271,
-     358,   359,   456,   360,   361,   390,   363,   398,   411,   376,
-     391,   376,   392,   393,   376,   462,   576,   323,   324,   435,
-     376,   376,   394,   543,   544,   440,   441,   442,   395,   412,
-     413,   429,   448,   447,   325,   326,   596,   327,   328,   475,
-     329,   330,   331,   457,   458,   438,   439,   454,   455,   459,
-     483,   376,   376,  -206,   376,   376,   466,   467,   468,   469,
-     376,   471,   568,   504,   569,   570,   473,   474,   481,   482,
-     376,   -69,     1,     2,   485,     3,     4,     5,   486,   516,
-     488,   487,   489,     6,     7,   523,   491,   490,   493,   492,
-     517,   529,   495,   494,   501,   496,   497,   271,   499,   500,
-     271,   271,   271,   376,     8,   529,   498,   513,     9,   502,
-     520,   506,    10,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   518,   376,   376,   507,   525,   537,   526,
-     527,   444,   531,   532,   545,   546,   547,   555,   536,   548,
-     376,   549,   550,   557,   566,   556,    63,    64,   542,   106,
-      66,    67,    68,    69,    70,    71,    72,   562,     1,     2,
-     567,     3,     4,     5,   572,   584,   376,   376,   574,   585,
-     587,   376,   588,   590,   376,   589,   591,   -18,   602,   -19,
-     376,   563,   520,   376,   603,   605,   609,   608,    73,   614,
-     615,   364,   365,   617,   218,    63,    64,   366,   345,   219,
-     220,   344,   580,   581,   571,   130,   553,     1,     2,   146,
-       3,     4,     5,   367,   368,   369,   334,   142,   593,   343,
-      44,   129,    96,   541,   465,     0,     0,     0,   370,   371,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   606,   607,   372,     0,     0,   610,
-       0,     0,   613,     0,     0,     0,     0,     0,   616,     0,
-       0,   618,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   251,   252,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    74,    75,     0,     0,    76,     0,
-      77,   107,     0,     0,   253,   200,   578,   579,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,     0,   254,     0,
-     255,   256,   257,   325,   326,     0,   327,   328,     0,   329,
-     330,   331,   364,   365,     0,     0,    63,    64,   366,     0,
-       0,     0,     0,     0,     0,     0,     0,   373,     1,     2,
-       0,     3,     4,     5,   367,   368,   369,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   370,
-     371,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   110,     0,    63,    64,   372,   106,    66,
-      67,    68,    69,    70,    71,    72,     0,     1,     2,     0,
-       3,     4,     5,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   251,   252,
-       0,     0,     0,     0,     0,    63,    64,    73,   106,   155,
-     156,   157,   158,   159,   160,    72,     0,     1,     2,     0,
-       3,     4,     5,     0,     0,   253,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   209,   210,   211,     0,   254,
-       0,   255,   256,   257,     0,     0,     0,    73,     0,     0,
-     364,   365,     0,     0,    63,    64,   366,     0,     0,   111,
-       0,     0,     0,     0,     0,     0,     1,     2,   373,     3,
-       4,     5,   367,   368,   369,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   370,   371,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   372,     0,     0,     0,     0,
-       0,     0,     0,    74,    75,     0,     0,    76,     0,    77,
-     141,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   251,   252,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    74,    75,     0,     0,    76,     0,    77,
-     356,     0,     0,   253,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,     0,   254,     0,   255,
-     256,   257,    63,    64,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     1,     2,     0,     3,     4,     5,
-     248,     0,     0,     0,     0,     0,   373,     0,     0,     0,
-       0,     0,     0,     0,     0,   249,   250,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    63,    64,   110,
-     106,   155,   156,   157,   158,   159,   160,    72,     0,     1,
-       2,     0,     3,     4,     5,     0,     0,     0,     0,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   251,   252,     0,     0,     0,    73,
-       0,     0,    63,    64,     0,   106,    66,    67,    68,    69,
-      70,    71,    72,     0,     1,     2,     0,     3,     4,     5,
-       0,   253,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   134,   254,     0,   255,   256,   257,
-       0,     0,     0,     0,    73,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   111,     0,    63,    64,   -67,
-       0,   258,     0,     0,   259,     0,   260,     0,   261,     1,
-       2,     0,     3,     4,     5,   248,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     249,   250,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   110,    74,    75,     0,     0,    76,
-       0,    77,   421,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   251,
-     252,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      74,    75,     0,     0,    76,     0,    77,     0,     0,     0,
-     289,   290,     0,     0,     0,     0,   253,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,     0,
-     254,     0,   255,   256,   257,     0,     0,     0,     0,     0,
-       0,     0,   364,   365,     0,     0,     0,     0,   366,     0,
-     111,     0,     0,     0,     0,     0,   258,     0,     0,   259,
-       0,   260,     0,   261,   367,   368,   369,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   370,
-     371,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,   303,   304,    63,    64,   372,   150,    66,
-      67,    68,    69,    70,    71,    72,     0,     1,     2,     0,
-       3,     4,     5,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   251,   252,
-       0,     0,     0,     0,     0,     0,     0,    73,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   253,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   209,   210,   211,     0,   254,
-       0,   255,   256,   257,    63,    64,     0,   106,    66,    67,
-      68,    69,    70,    71,    72,     0,     1,     2,     0,     3,
-       4,     5,     0,     0,     0,     0,     0,     0,   373,     0,
-       0,     0,     0,     0,     0,     0,   333,     0,     0,     0,
-     151,     0,     0,     0,    63,    64,    73,   106,   155,   156,
-     157,   158,   159,   160,    72,     0,     1,     2,     0,     3,
-       4,     5,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    74,    75,     0,     0,    76,     0,    77,
-       0,     0,     0,     0,    63,    64,    73,   106,    66,    67,
-      68,    69,    70,    71,    72,     0,     1,     2,     0,     3,
-       4,     5,    63,    64,     0,   106,    66,    67,    68,    69,
-      70,    71,    72,     0,     1,     2,   431,     3,     4,     5,
-       0,     0,     0,     0,     0,     0,    73,     0,     0,     0,
-       0,     0,     0,     0,   522,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    73,     0,     0,     0,     0,     0,
-       0,     0,    74,    75,     0,     0,    76,     0,    77,    63,
-      64,     0,    65,    66,    67,    68,    69,    70,    71,    72,
-       0,     1,     2,     0,     3,     4,     5,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    74,    75,     0,   351,    76,     0,    77,    63,
-      64,    73,   106,   155,   156,   157,   158,   159,   160,    72,
-       0,     1,     2,     0,     3,     4,     5,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    74,    75,     0,     0,    76,     0,    77,     0,
-       0,    73,     0,     0,     0,     0,     0,     0,     0,     0,
-      74,    75,     0,     0,    76,     0,    77,    63,    64,     0,
-     150,    66,    67,    68,    69,    70,    71,    72,     0,     1,
-       2,     0,     3,     4,     5,    63,    64,     0,   106,    66,
-      67,    68,    69,    70,    71,    72,     0,     1,     2,     0,
-       3,     4,     5,     0,     0,     0,     0,     0,     0,    73,
-       0,     0,     0,     0,     0,     0,     0,    74,    75,     0,
-       0,    76,     0,    77,     0,    63,    64,    73,   270,    66,
-      67,    68,    69,    70,    71,    72,     0,     1,     2,     0,
-       3,     4,     5,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    74,    75,     0,
-       0,    76,     0,    77,     0,    63,    64,    73,   106,   155,
-     156,   157,   158,   159,   160,    72,     0,     1,     2,     0,
-       3,     4,     5,    63,    64,     0,   106,    66,    67,    68,
-      69,    70,    71,   528,     0,     1,     2,     0,     3,     4,
-       5,     0,     0,     0,     0,     0,     0,    73,     0,     0,
-       0,     0,     0,     0,     0,    74,    75,     0,     0,    76,
-       0,    77,     0,     0,     0,    73,     0,     0,     0,     0,
-       0,     0,     0,    74,    75,     0,     0,    76,     0,    77,
-      63,    64,     0,   106,    66,    67,    68,    69,    70,    71,
-     583,     0,     1,     2,     0,     3,     4,     5,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    74,    75,     0,     0,    76,     0,    77,
-       0,     0,    73,     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,    74,    75,     0,     0,    76,     0,   354,
-     170,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    74,    75,     0,     0,    76,     0,    77,     0,     0,
-     171,   172,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    74,    75,
-       0,     0,    76,     0,    77,   196,   197,   198,     0,     0,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217
-};
-
-static const yytype_int16 yycheck[] =
-{
-       0,    27,   163,   198,   175,     4,   236,   120,   127,     0,
-      11,    28,    54,    11,   259,   260,    54,    17,   213,   214,
-     215,   216,   217,   307,    21,   220,    17,   176,    34,   432,
-     164,   152,    29,   576,    11,   148,    54,   409,   410,    54,
-      34,    54,    11,    52,    58,   153,    54,     3,     4,     5,
-       6,    77,    54,   596,   162,    42,    43,    44,    67,    53,
-      47,    42,    43,    44,    45,    46,    47,    48,   153,    50,
-      26,    27,   152,   222,    11,   101,    53,   162,   153,   105,
-      17,     7,     8,    54,    53,   111,   153,   162,    54,   153,
-      18,   117,    92,    19,    20,   162,    22,    23,    24,   163,
-     153,   127,   152,   237,   238,   158,   153,   479,   150,   354,
-       0,   158,   150,   139,   140,   152,   158,   143,    38,   152,
-     523,    20,   160,   149,    23,   528,   529,   322,   373,   135,
-     136,   137,   150,    54,   140,   150,   154,   150,   144,   145,
-     156,   156,   150,    22,   161,   153,   154,   173,   150,   153,
-      19,   153,   154,    22,    21,    24,   160,   158,   277,    46,
-     158,    48,   161,   114,   115,   162,   147,   148,   149,   153,
-     196,   197,   198,   199,   458,   166,   160,   580,   581,   150,
-     583,   584,   150,   154,   150,   151,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,    35,   391,    37,   393,   394,
-     395,   320,   228,   606,   607,    22,   490,   271,   492,   273,
-     274,    22,   276,   239,    22,   135,   136,   137,    19,     4,
-     140,    22,     4,    24,   144,   145,    42,    37,    44,   150,
-     151,    40,    41,   346,   347,   348,   349,   350,    47,     3,
-       4,     5,     6,   157,    53,   309,   359,   360,   361,   118,
-     119,   277,   482,   317,   318,   135,   136,   137,   542,   157,
-     140,   422,   288,   154,   144,   145,   135,   136,   150,   138,
-     139,     4,   141,   142,   143,   147,   148,   149,    22,   305,
-      61,    62,    63,    64,    65,    66,   151,   273,   274,   153,
-     276,     0,    32,    33,   320,   321,   322,   160,   493,   412,
-     413,   496,   497,   498,     4,   151,   419,   153,   151,    18,
-      19,    20,   150,    22,    23,    24,     9,   381,   382,   383,
-       9,    30,    31,   309,   151,   389,   153,   151,   354,   153,
-     560,   317,   318,     9,   564,   399,   400,   363,   113,   114,
-      83,    84,    51,     9,     9,     9,    55,    54,    56,    11,
-      59,   151,   150,   466,   467,   468,   469,   160,   422,   150,
-     473,   474,   150,   150,   150,   391,   392,   393,   394,   395,
-      22,   150,   398,   150,   150,   153,   150,    38,    38,   443,
-     153,   445,   153,   153,   448,   411,   557,   118,   119,    60,
-     454,   455,   153,   506,   507,   381,   382,   383,   153,   150,
-     150,   153,   156,   389,   135,   136,   577,   138,   139,    38,
-     141,   142,   143,   399,   400,   153,   153,   153,   153,   153,
-      22,   485,   486,     0,   488,   489,   153,   153,   153,   153,
-     494,   160,   545,   459,   547,   548,   153,   153,   153,   151,
-     504,    18,    19,    20,    17,    22,    23,    24,    17,   475,
-     153,   150,   153,    30,    31,   481,     4,   443,   153,   445,
-      22,   487,   448,   153,   150,   153,   153,   493,   454,   455,
-     496,   497,   498,   537,    51,   501,   153,   160,    55,   153,
-     480,   153,    59,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,     4,   558,   559,   153,   153,   153,   485,
-     486,    53,   488,   489,   153,   151,   153,    22,   494,   153,
-     574,   151,   151,   156,   151,   153,     7,     8,   504,    10,
-      11,    12,    13,    14,    15,    16,    17,   158,    19,    20,
-     151,    22,    23,    24,    53,   561,   600,   601,    17,   158,
-     151,   605,   151,     4,   608,   151,   146,   150,    22,   150,
-     614,   537,   552,   617,   153,    17,   153,    17,    49,    17,
-      72,     3,     4,    17,   130,     7,     8,     9,   252,   130,
-     130,   251,   558,   559,   552,    92,   524,    19,    20,   111,
-      22,    23,    24,    25,    26,    27,   228,   105,   574,   239,
-      17,    89,    56,   501,   414,    -1,    -1,    -1,    40,    41,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   600,   601,    58,    -1,    -1,   605,
-      -1,    -1,   608,    -1,    -1,    -1,    -1,    -1,   614,    -1,
-      -1,   617,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   155,   156,    -1,    -1,   159,    -1,
-     161,   162,    -1,    -1,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,    -1,   130,    -1,
-     132,   133,   134,   135,   136,    -1,   138,   139,    -1,   141,
-     142,   143,     3,     4,    -1,    -1,     7,     8,     9,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   159,    19,    20,
-      -1,    22,    23,    24,    25,    26,    27,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    40,
-      41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    54,    -1,     7,     8,    58,    10,    11,
-      12,    13,    14,    15,    16,    17,    -1,    19,    20,    -1,
-      22,    23,    24,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      -1,    -1,    -1,    -1,    -1,     7,     8,    49,    10,    11,
-      12,    13,    14,    15,    16,    17,    -1,    19,    20,    -1,
-      22,    23,    24,    -1,    -1,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,    -1,   130,
-      -1,   132,   133,   134,    -1,    -1,    -1,    49,    -1,    -1,
-       3,     4,    -1,    -1,     7,     8,     9,    -1,    -1,   150,
-      -1,    -1,    -1,    -1,    -1,    -1,    19,    20,   159,    22,
-      23,    24,    25,    26,    27,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    40,    41,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    58,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   155,   156,    -1,    -1,   159,    -1,   161,
-     162,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   155,   156,    -1,    -1,   159,    -1,   161,
-     162,    -1,    -1,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,    -1,   130,    -1,   132,
-     133,   134,     7,     8,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    19,    20,    -1,    22,    23,    24,
-      25,    -1,    -1,    -1,    -1,    -1,   159,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    40,    41,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,     7,     8,    54,
-      10,    11,    12,    13,    14,    15,    16,    17,    -1,    19,
-      20,    -1,    22,    23,    24,    -1,    -1,    -1,    -1,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    -1,    -1,    -1,    49,
-      -1,    -1,     7,     8,    -1,    10,    11,    12,    13,    14,
-      15,    16,    17,    -1,    19,    20,    -1,    22,    23,    24,
-      -1,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,    39,   130,    -1,   132,   133,   134,
-      -1,    -1,    -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   150,    -1,     7,     8,   154,
-      -1,   156,    -1,    -1,   159,    -1,   161,    -1,   163,    19,
-      20,    -1,    22,    23,    24,    25,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      40,    41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    54,   155,   156,    -1,    -1,   159,
-      -1,   161,   162,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     155,   156,    -1,    -1,   159,    -1,   161,    -1,    -1,    -1,
-      26,    27,    -1,    -1,    -1,    -1,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,    -1,
-     130,    -1,   132,   133,   134,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,     3,     4,    -1,    -1,    -1,    -1,     9,    -1,
-     150,    -1,    -1,    -1,    -1,    -1,   156,    -1,    -1,   159,
-      -1,   161,    -1,   163,    25,    26,    27,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    40,
-      41,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,     7,     8,    58,    10,    11,
-      12,    13,    14,    15,    16,    17,    -1,    19,    20,    -1,
-      22,    23,    24,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    49,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,    -1,   130,
-      -1,   132,   133,   134,     7,     8,    -1,    10,    11,    12,
-      13,    14,    15,    16,    17,    -1,    19,    20,    -1,    22,
-      23,    24,    -1,    -1,    -1,    -1,    -1,    -1,   159,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,
-     122,    -1,    -1,    -1,     7,     8,    49,    10,    11,    12,
-      13,    14,    15,    16,    17,    -1,    19,    20,    -1,    22,
-      23,    24,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   155,   156,    -1,    -1,   159,    -1,   161,
-      -1,    -1,    -1,    -1,     7,     8,    49,    10,    11,    12,
-      13,    14,    15,    16,    17,    -1,    19,    20,    -1,    22,
-      23,    24,     7,     8,    -1,    10,    11,    12,    13,    14,
-      15,    16,    17,    -1,    19,    20,    39,    22,    23,    24,
-      -1,    -1,    -1,    -1,    -1,    -1,    49,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   155,   156,    -1,    -1,   159,    -1,   161,     7,
-       8,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
-      -1,    19,    20,    -1,    22,    23,    24,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   155,   156,    -1,   158,   159,    -1,   161,     7,
-       8,    49,    10,    11,    12,    13,    14,    15,    16,    17,
-      -1,    19,    20,    -1,    22,    23,    24,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   155,   156,    -1,    -1,   159,    -1,   161,    -1,
-      -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     155,   156,    -1,    -1,   159,    -1,   161,     7,     8,    -1,
-      10,    11,    12,    13,    14,    15,    16,    17,    -1,    19,
-      20,    -1,    22,    23,    24,     7,     8,    -1,    10,    11,
-      12,    13,    14,    15,    16,    17,    -1,    19,    20,    -1,
-      22,    23,    24,    -1,    -1,    -1,    -1,    -1,    -1,    49,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   155,   156,    -1,
-      -1,   159,    -1,   161,    -1,     7,     8,    49,    10,    11,
-      12,    13,    14,    15,    16,    17,    -1,    19,    20,    -1,
-      22,    23,    24,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   155,   156,    -1,
-      -1,   159,    -1,   161,    -1,     7,     8,    49,    10,    11,
-      12,    13,    14,    15,    16,    17,    -1,    19,    20,    -1,
-      22,    23,    24,     7,     8,    -1,    10,    11,    12,    13,
-      14,    15,    16,    17,    -1,    19,    20,    -1,    22,    23,
-      24,    -1,    -1,    -1,    -1,    -1,    -1,    49,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   155,   156,    -1,    -1,   159,
-      -1,   161,    -1,    -1,    -1,    49,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   155,   156,    -1,    -1,   159,    -1,   161,
-       7,     8,    -1,    10,    11,    12,    13,    14,    15,    16,
-      17,    -1,    19,    20,    -1,    22,    23,    24,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   155,   156,    -1,    -1,   159,    -1,   161,
-      -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   155,   156,    -1,    -1,   159,    -1,   161,
-      36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   155,   156,    -1,    -1,   159,    -1,   161,    -1,    -1,
-      56,    57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   155,   156,
-      -1,    -1,   159,    -1,   161,   111,   112,   113,    -1,    -1,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
-static const yytype_uint8 yystos[] =
-{
-       0,    19,    20,    22,    23,    24,    30,    31,    51,    55,
-      59,   172,   175,   176,   177,   178,   210,   211,   212,   214,
-     213,    52,    67,   219,   152,    58,   152,    18,   152,    42,
-      43,    44,    45,    46,    47,    48,    50,   147,   148,   149,
-     179,   180,   181,     0,   212,    46,    48,   182,   229,    42,
-      43,    44,    47,   183,   226,   228,   235,   152,   152,   156,
-     220,    22,   218,     7,     8,    10,    11,    12,    13,    14,
-      15,    16,    17,    49,   155,   156,   159,   161,   172,   176,
-     197,   198,   232,   181,   181,    35,    37,   208,   181,   181,
-      21,   236,   237,    29,   162,   227,   236,    22,    22,    22,
-     221,   150,     4,     4,     4,   161,    10,   162,   198,   203,
-      54,   150,   174,   208,   208,    42,    44,   184,    32,    33,
-     207,    61,    62,    63,    64,    65,    66,   185,   224,   224,
-     175,   240,   153,   158,    39,   198,   199,   201,   202,   157,
-     157,   162,   203,   153,   162,   150,   202,   154,   207,   207,
-      10,   122,   198,   200,   209,    11,    12,    13,    14,    15,
-      16,   170,   171,   198,   204,     4,   200,    28,   161,   225,
-      36,    56,    57,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,   111,   112,   113,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   165,   166,
-     167,   238,   244,   245,   246,   247,    22,   187,   153,   151,
-     198,   198,   160,   162,   198,     4,   151,   204,   198,   150,
-     232,    26,    27,     3,     4,     5,     6,     9,    25,    40,
-      41,    89,    90,   116,   130,   132,   133,   134,   156,   159,
-     161,   163,   165,   166,   167,   205,   232,   174,   176,    56,
-      10,   198,   234,    11,    17,    11,   170,   185,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   168,    26,
-      27,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   169,   198,   198,   234,   198,
-     198,   241,   234,   234,   234,   234,   234,   198,   198,   234,
-     185,   114,   115,   118,   119,   135,   136,   138,   139,   141,
-     142,   143,   186,    39,   199,   189,   158,   160,   160,   151,
-     189,   174,   174,   209,   168,   169,   150,   150,   150,   150,
-     150,   158,   204,   206,   161,   206,   162,   206,    22,   150,
-     150,   150,   215,   150,     3,     4,     9,    25,    26,    27,
-      40,    41,    58,   159,   205,   231,   232,   233,   233,   233,
-     233,   200,   198,   198,   153,   192,   153,   192,   233,   156,
-     153,   153,   153,   153,   153,   153,   233,   233,    38,   200,
-     198,   234,   135,   136,   137,   140,   144,   145,   188,   216,
-     217,    38,   150,   150,   204,   204,   204,   204,   204,   153,
-     158,   162,   198,   206,   160,   162,   204,   204,   204,   153,
-     195,    39,   198,   222,   223,    60,   230,   206,   153,   153,
-     233,   233,   233,    11,    53,    11,   243,   233,   156,   234,
-     198,   234,   234,   234,   153,   153,   198,   233,   233,   153,
-     195,   195,   198,   204,   204,   243,   153,   153,   153,   153,
-     204,   160,   162,   153,   153,    38,    34,    53,   193,   196,
-     187,   153,   151,    22,   160,    17,    17,   150,   153,   153,
-     233,     4,   233,   153,   153,   233,   153,   153,   153,   233,
-     233,   150,   153,   192,   198,   151,   153,   153,   151,   204,
-     204,   204,   204,   160,   204,   204,   198,    22,     4,   195,
-     172,   173,    39,   198,   189,   153,   233,   233,    17,   198,
-     242,   233,   233,   192,   192,   234,   233,   153,   234,   234,
-     234,   242,   233,   204,   204,   153,   151,   153,   153,   151,
-     151,   151,   187,   193,   194,    22,   153,   156,   187,   187,
-     151,   153,   158,   233,   151,   192,   151,   151,   204,   204,
-     204,   173,    53,   191,    17,   158,   170,   239,   118,   119,
-     233,   233,   189,    17,   198,   158,   189,   151,   151,   151,
-       4,   146,   190,   233,   231,   158,   170,   187,   187,    38,
-     187,   187,    22,   153,   231,    17,   233,   233,    17,   153,
-     233,   187,   187,   233,    17,    72,   233,    17,   233
-};
+/* 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.  */
 
 #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 yyerrorlab
-
-
-/* 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 yyerrlab1
+/* 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);						\
-      yytoken = YYTRANSLATE (yychar);				\
-      YYPOPSTACK (1);						\
+    { yychar = (token), yylval = (value);			\
+      yychar1 = YYTRANSLATE (yychar);				\
+      YYPOPSTACK;						\
       goto yybackup;						\
     }								\
   else								\
-    {								\
-      yyerror (YY_("syntax error: cannot back up")); \
-      YYERROR;							\
-    }								\
-while (YYID (0))
-
+    { yyerror ("syntax error: cannot back up"); YYERROR; }	\
+while (0)
 
 #define YYTERROR	1
 #define YYERRCODE	256
 
-
-/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
-   If N is 0, then set CURRENT to the empty location which ends
-   the previous symbol: RHS[0] (always defined).  */
-
-#define YYRHSLOC(Rhs, K) ((Rhs)[K])
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)				\
-    do									\
-      if (YYID (N))                                                    \
-	{								\
-	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
-	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
-	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
-	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
-	}								\
-      else								\
-	{								\
-	  (Current).first_line   = (Current).last_line   =		\
-	    YYRHSLOC (Rhs, 0).last_line;				\
-	  (Current).first_column = (Current).last_column =		\
-	    YYRHSLOC (Rhs, 0).last_column;				\
-	}								\
-    while (YYID (0))
+#ifndef YYPURE
+#define YYLEX		yylex()
 #endif
 
-
-/* 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 YYPURE
+#ifdef YYLSP_NEEDED
 #ifdef YYLEX_PARAM
-# define YYLEX yylex (YYLEX_PARAM)
+#define YYLEX		yylex(&yylval, &yylloc, YYLEX_PARAM)
 #else
-# define YYLEX yylex ()
+#define YYLEX		yylex(&yylval, &yylloc)
+#endif
+#else /* not YYLSP_NEEDED */
+#ifdef YYLEX_PARAM
+#define YYLEX		yylex(&yylval, YYLEX_PARAM)
+#else
+#define YYLEX		yylex(&yylval)
+#endif
+#endif /* not YYLSP_NEEDED */
 #endif
 
-/* Enable debugging if requested.  */
-#if YYDEBUG
+/* If nonreentrant, generate the variables here */
 
-# ifndef YYFPRINTF
-#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYFPRINTF fprintf
-# endif
+#ifndef YYPURE
 
-# define YYDPRINTF(Args)			\
-do {						\
-  if (yydebug)					\
-    YYFPRINTF Args;				\
-} while (YYID (0))
+int	yychar;			/*  the lookahead symbol		*/
+YYSTYPE	yylval;			/*  the semantic value of the		*/
+				/*  lookahead symbol			*/
 
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
-do {									  \
-  if (yydebug)								  \
-    {									  \
-      YYFPRINTF (stderr, "%s ", Title);					  \
-      yy_symbol_print (stderr,						  \
-		  Type, Value); \
-      YYFPRINTF (stderr, "\n");						  \
-    }									  \
-} while (YYID (0))
-
-
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
-
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
-static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
+#ifdef YYLSP_NEEDED
+YYLTYPE yylloc;			/*  location data for the lookahead	*/
+				/*  symbol				*/
 #endif
-{
-  if (!yyvaluep)
-    return;
-# ifdef YYPRINT
-  if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
-  YYUSE (yyoutput);
-# endif
-  switch (yytype)
-    {
-      default:
-	break;
-    }
-}
 
+int yynerrs;			/*  number of parse errors so far       */
+#endif  /* not YYPURE */
 
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
-static void
-yy_symbol_print (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
+#if YYDEBUG != 0
+int yydebug;			/*  nonzero means print parse trace	*/
+/* Since this is uninitialized, it does not stop multiple parsers
+   from coexisting.  */
 #endif
-{
-  if (yytype < YYNTOKENS)
-    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-  else
-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
 
-  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
-  YYFPRINTF (yyoutput, ")");
-}
+/*  YYINITDEPTH indicates the initial size of the parser's stacks	*/
 
-/*------------------------------------------------------------------.
-| yy_stack_print -- Print the state stack from its BOTTOM up to its |
-| TOP (included).                                                   |
-`------------------------------------------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
-#else
-static void
-yy_stack_print (bottom, top)
-    yytype_int16 *bottom;
-    yytype_int16 *top;
-#endif
-{
-  YYFPRINTF (stderr, "Stack now");
-  for (; bottom <= top; ++bottom)
-    YYFPRINTF (stderr, " %d", *bottom);
-  YYFPRINTF (stderr, "\n");
-}
-
-# define YY_STACK_PRINT(Bottom, Top)				\
-do {								\
-  if (yydebug)							\
-    yy_stack_print ((Bottom), (Top));				\
-} while (YYID (0))
-
-
-/*------------------------------------------------.
-| Report that the YYRULE is going to be reduced.  |
-`------------------------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
-#else
-static void
-yy_reduce_print (yyvsp, yyrule)
-    YYSTYPE *yyvsp;
-    int yyrule;
-#endif
-{
-  int yynrhs = yyr2[yyrule];
-  int yyi;
-  unsigned long int yylno = yyrline[yyrule];
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
-	     yyrule - 1, yylno);
-  /* The symbols being reduced.  */
-  for (yyi = 0; yyi < yynrhs; yyi++)
-    {
-      fprintf (stderr, "   $%d = ", yyi + 1);
-      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
-		       &(yyvsp[(yyi + 1) - (yynrhs)])
-		       		       );
-      fprintf (stderr, "\n");
-    }
-}
-
-# define YY_REDUCE_PRINT(Rule)		\
-do {					\
-  if (yydebug)				\
-    yy_reduce_print (yyvsp, Rule); \
-} while (YYID (0))
-
-/* Nonzero means print parse trace.  It is left uninitialized so that
-   multiple parsers can coexist.  */
-int yydebug;
-#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
-# define YY_STACK_PRINT(Bottom, Top)
-# define YY_REDUCE_PRINT(Rule)
-#endif /* !YYDEBUG */
-
-
-/* YYINITDEPTH -- initial size of the parser's stacks.  */
 #ifndef	YYINITDEPTH
-# define YYINITDEPTH 200
+#define YYINITDEPTH 200
 #endif
 
-/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
-   if the built-in stack extension method is used).
+/*  YYMAXDEPTH is the maximum size the stacks can grow to
+    (effective only if the built-in stack extension method is used).  */
 
-   Do not make this value too large; the results are undefined if
-   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
-   evaluated with infinite-precision integer arithmetic.  */
+#if YYMAXDEPTH == 0
+#undef YYMAXDEPTH
+#endif
 
 #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 YYERROR_VERBOSE
+#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
 
-# ifndef yystrlen
-#  if defined __GLIBC__ && defined _STRING_H
-#   define yystrlen strlen
-#  else
-/* Return the length of YYSTR.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static YYSIZE_T
-yystrlen (const char *yystr)
-#else
-static YYSIZE_T
-yystrlen (yystr)
-    const char *yystr;
-#endif
-{
-  YYSIZE_T yylen;
-  for (yylen = 0; yystr[yylen]; yylen++)
-    continue;
-  return yylen;
-}
-#  endif
-# endif
-
-# ifndef yystpcpy
-#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
-#   define yystpcpy stpcpy
-#  else
-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
-   YYDEST.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static char *
-yystpcpy (char *yydest, const char *yysrc)
-#else
-static char *
-yystpcpy (yydest, yysrc)
-    char *yydest;
-    const char *yysrc;
-#endif
-{
-  char *yyd = yydest;
-  const char *yys = yysrc;
-
-  while ((*yyd++ = *yys++) != '\0')
-    continue;
-
-  return yyd - 1;
-}
-#  endif
-# endif
-
-# ifndef yytnamerr
-/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
-   quotes and backslashes, so that it's suitable for yyerror.  The
-   heuristic is that double-quoting is unnecessary unless the string
-   contains an apostrophe, a comma, or backslash (other than
-   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
-   null, do not copy; instead, return the length of what the result
-   would have been.  */
-static YYSIZE_T
-yytnamerr (char *yyres, const char *yystr)
-{
-  if (*yystr == '"')
-    {
-      YYSIZE_T yyn = 0;
-      char const *yyp = yystr;
-
-      for (;;)
-	switch (*++yyp)
-	  {
-	  case '\'':
-	  case ',':
-	    goto do_not_strip_quotes;
-
-	  case '\\':
-	    if (*++yyp != '\\')
-	      goto do_not_strip_quotes;
-	    /* Fall through.  */
-	  default:
-	    if (yyres)
-	      yyres[yyn] = *yyp;
-	    yyn++;
-	    break;
-
-	  case '"':
-	    if (yyres)
-	      yyres[yyn] = '\0';
-	    return yyn;
-	  }
-    do_not_strip_quotes: ;
-    }
-
-  if (! yyres)
-    return yystrlen (yystr);
-
-  return yystpcpy (yyres, yystr) - yyres;
-}
-# endif
-
-/* Copy into YYRESULT an error message about the unexpected token
-   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
-   including the terminating null byte.  If YYRESULT is null, do not
-   copy anything; just return the number of bytes that would be
-   copied.  As a special case, return 0 if an ordinary "syntax error"
-   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
-   size calculation.  */
-static YYSIZE_T
-yysyntax_error (char *yyresult, int yystate, int yychar)
-{
-  int yyn = yypact[yystate];
-
-  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
-    return 0;
-  else
-    {
-      int yytype = YYTRANSLATE (yychar);
-      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
-      YYSIZE_T yysize = yysize0;
-      YYSIZE_T yysize1;
-      int yysize_overflow = 0;
-      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-      int yyx;
-
-# if 0
-      /* This is so xgettext sees the translatable formats that are
-	 constructed on the fly.  */
-      YY_("syntax error, unexpected %s");
-      YY_("syntax error, unexpected %s, expecting %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
-# endif
-      char *yyfmt;
-      char const *yyf;
-      static char const yyunexpected[] = "syntax error, unexpected %s";
-      static char const yyexpecting[] = ", expecting %s";
-      static char const yyor[] = " or %s";
-      char yyformat[sizeof yyunexpected
-		    + sizeof yyexpecting - 1
-		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
-		       * (sizeof yyor - 1))];
-      char const *yyprefix = yyexpecting;
-
-      /* Start YYX at -YYN if negative to avoid negative indexes in
-	 YYCHECK.  */
-      int yyxbegin = yyn < 0 ? -yyn : 0;
-
-      /* Stay within bounds of both yycheck and yytname.  */
-      int yychecklim = YYLAST - yyn + 1;
-      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-      int yycount = 1;
-
-      yyarg[0] = yytname[yytype];
-      yyfmt = yystpcpy (yyformat, yyunexpected);
-
-      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-	  {
-	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-	      {
-		yycount = 1;
-		yysize = yysize0;
-		yyformat[sizeof yyunexpected - 1] = '\0';
-		break;
-	      }
-	    yyarg[yycount++] = yytname[yyx];
-	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
-	    yysize_overflow |= (yysize1 < yysize);
-	    yysize = yysize1;
-	    yyfmt = yystpcpy (yyfmt, yyprefix);
-	    yyprefix = yyor;
-	  }
-
-      yyf = YY_(yyformat);
-      yysize1 = yysize + yystrlen (yyf);
-      yysize_overflow |= (yysize1 < yysize);
-      yysize = yysize1;
-
-      if (yysize_overflow)
-	return YYSIZE_MAXIMUM;
-
-      if (yyresult)
-	{
-	  /* Avoid sprintf, as that infringes on the user's name space.
-	     Don't have undefined behavior even if the translation
-	     produced a string with the wrong number of "%s"s.  */
-	  char *yyp = yyresult;
-	  int yyi = 0;
-	  while ((*yyp = *yyf) != '\0')
-	    {
-	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
-		{
-		  yyp += yytnamerr (yyp, yyarg[yyi++]);
-		  yyf += 2;
-		}
-	      else
-		{
-		  yyp++;
-		  yyf++;
-		}
-	    }
-	}
-      return yysize;
-    }
-}
-#endif /* YYERROR_VERBOSE */
-
-
-/*-----------------------------------------------.
-| Release the memory associated to this symbol.  |
-`-----------------------------------------------*/
-
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+/* This is the most reliable way to avoid incompatibilities
+   in available built-in functions on various systems.  */
 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
+__yy_memcpy (to, from, count)
+     char *to;
+     char *from;
+     unsigned int count;
 {
-  YYUSE (yyvaluep);
+  register char *f = from;
+  register char *t = to;
+  register int i = count;
 
-  if (!yymsg)
-    yymsg = "Deleting";
-  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
-  switch (yytype)
-    {
-
-      default:
-	break;
-    }
+  while (i-- > 0)
+    *t++ = *f++;
 }
-
 
-/* Prevent warnings from -Wmissing-prototypes.  */
+#else /* __cplusplus */
+
+/* This is the most reliable way to avoid incompatibilities
+   in available built-in functions on various systems.  */
+static void
+__yy_memcpy (char *to, char *from, unsigned int count)
+{
+  register char *t = to;
+  register char *f = from;
+  register int i = count;
+
+  while (i-- > 0)
+    *t++ = *f++;
+}
+
+#endif
+#endif
+
+#line 217 "/usr/share/bison.simple"
+
+/* The user can define YYPARSE_PARAM as the name of an argument to be passed
+   into yyparse.  The argument should have type void *.
+   It should actually point to an object.
+   Grammar actions can access the variable by casting it
+   to the proper pointer type.  */
 
 #ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *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 *);
 #else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
 int yyparse (void);
-#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 __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void *YYPARSE_PARAM)
-#else
-int
-yyparse (YYPARSE_PARAM)
-    void *YYPARSE_PARAM;
-#endif
-#else /* ! YYPARSE_PARAM */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void)
-#else
-int
-yyparse ()
-
 #endif
 #endif
+
+int
+yyparse(YYPARSE_PARAM_ARG)
+     YYPARSE_PARAM_DECL
 {
-  
-  int yystate;
-  int yyn;
-  int yyresult;
-  /* Number of tokens to shift before error messages enabled.  */
-  int yyerrstatus;
-  /* Look-ahead token as an internal (translated) token number.  */
-  int yytoken = 0;
-#if YYERROR_VERBOSE
-  /* Buffer for error messages, and its allocated size.  */
-  char yymsgbuf[128];
-  char *yymsg = yymsgbuf;
-  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+  register int yystate;
+  register int yyn;
+  register short *yyssp;
+  register YYSTYPE *yyvsp;
+  int yyerrstatus;	/*  number of tokens to shift before error messages enabled */
+  int yychar1 = 0;		/*  lookahead token as an internal (translated) token number */
+
+  short	yyssa[YYINITDEPTH];	/*  the state stack			*/
+  YYSTYPE yyvsa[YYINITDEPTH];	/*  the semantic value stack		*/
+
+  short *yyss = yyssa;		/*  refer to the stacks thru separate pointers */
+  YYSTYPE *yyvs = yyvsa;	/*  to allow yyoverflow to reallocate them elsewhere */
+
+#ifdef YYLSP_NEEDED
+  YYLTYPE yylsa[YYINITDEPTH];	/*  the location stack			*/
+  YYLTYPE *yyls = yylsa;
+  YYLTYPE *yylsp;
+
+#define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
+#else
+#define YYPOPSTACK   (yyvsp--, yyssp--)
 #endif
 
-  /* Three stacks and their tools:
-     `yyss': related to states,
-     `yyvs': related to semantic values,
-     `yyls': related to locations.
+  int yystacksize = YYINITDEPTH;
+  int yyfree_stacks = 0;
 
-     Refer to the stacks thru separate pointers, to allow yyoverflow
-     to reallocate them elsewhere.  */
+#ifdef YYPURE
+  int yychar;
+  YYSTYPE yylval;
+  int yynerrs;
+#ifdef YYLSP_NEEDED
+  YYLTYPE yylloc;
+#endif
+#endif
 
-  /* The state stack.  */
-  yytype_int16 yyssa[YYINITDEPTH];
-  yytype_int16 *yyss = yyssa;
-  yytype_int16 *yyssp;
+  YYSTYPE yyval;		/*  the variable used to return		*/
+				/*  semantic values from the action	*/
+				/*  routines				*/
 
-  /* The semantic value stack.  */
-  YYSTYPE yyvsa[YYINITDEPTH];
-  YYSTYPE *yyvs = yyvsa;
-  YYSTYPE *yyvsp;
+  int yylen;
 
-
-
-#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
-
-  YYSIZE_T yystacksize = YYINITDEPTH;
-
-  /* The variables used to return semantic value and location from the
-     action routines.  */
-  YYSTYPE yyval;
-
-
-  /* The number of symbols on the RHS of the reduced rule.
-     Keep to zero when no symbol should be popped.  */
-  int yylen = 0;
-
-  YYDPRINTF ((stderr, "Starting parse\n"));
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Starting parse\n");
+#endif
 
   yystate = 0;
   yyerrstatus = 0;
@@ -3275,773 +2352,727 @@
      so that they stay on the same level as the state stack.
      The wasted elements are never initialized.  */
 
-  yyssp = yyss;
+  yyssp = yyss - 1;
   yyvsp = yyvs;
+#ifdef YYLSP_NEEDED
+  yylsp = yyls;
+#endif
 
-  goto yysetstate;
+/* 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:
 
-/*------------------------------------------------------------.
-| 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++;
+  *++yyssp = yystate;
 
- yysetstate:
-  *yyssp = yystate;
-
-  if (yyss + yystacksize - 1 <= yyssp)
+  if (yyssp >= yyss + yystacksize - 1)
     {
+      /* 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.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
+      int size = yyssp - yyss + 1;
 
 #ifdef yyoverflow
-      {
-	/* Give user a chance to reallocate the stack.  Use copies of
-	   these so that the &'s don't force the real ones into
-	   memory.  */
-	YYSTYPE *yyvs1 = yyvs;
-	yytype_int16 *yyss1 = yyss;
+      /* Each stack pointer address is followed by the size of
+	 the data in use in that stack, in bytes.  */
+#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
 
-
-	/* 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;
-      }
+      yyss = yyss1; yyvs = yyvs1;
+#ifdef YYLSP_NEEDED
+      yyls = yyls1;
+#endif
 #else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyexhaustedlab;
-# else
       /* Extend the stack our own way.  */
-      if (YYMAXDEPTH <= yystacksize)
-	goto yyexhaustedlab;
+      if (yystacksize >= YYMAXDEPTH)
+	{
+	  yyerror("parser stack overflow");
+	  if (yyfree_stacks)
+	    {
+	      free (yyss);
+	      free (yyvs);
+#ifdef YYLSP_NEEDED
+	      free (yyls);
+#endif
+	    }
+	  return 2;
+	}
       yystacksize *= 2;
-      if (YYMAXDEPTH < yystacksize)
+      if (yystacksize > YYMAXDEPTH)
 	yystacksize = YYMAXDEPTH;
-
-      {
-	yytype_int16 *yyss1 = yyss;
-	union yyalloc *yyptr =
-	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-	if (! yyptr)
-	  goto yyexhaustedlab;
-	YYSTACK_RELOCATE (yyss);
-	YYSTACK_RELOCATE (yyvs);
-
-#  undef YYSTACK_RELOCATE
-	if (yyss1 != yyssa)
-	  YYSTACK_FREE (yyss1);
-      }
-# endif
+#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
 #endif /* no yyoverflow */
 
-      yyssp = yyss + yysize - 1;
-      yyvsp = yyvs + yysize - 1;
+      yyssp = yyss + size - 1;
+      yyvsp = yyvs + size - 1;
+#ifdef YYLSP_NEEDED
+      yylsp = yyls + size - 1;
+#endif
 
+#if YYDEBUG != 0
+      if (yydebug)
+	fprintf(stderr, "Stack size increased to %d\n", yystacksize);
+#endif
 
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-		  (unsigned long int) yystacksize));
-
-      if (yyss + yystacksize - 1 <= yyssp)
+      if (yyssp >= yyss + yystacksize - 1)
 	YYABORT;
     }
 
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Entering state %d\n", yystate);
+#endif
 
   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.  */
+/* yyresume: */
 
-  /* Do appropriate processing given the current state.  Read a
-     look-ahead token if we need one and don't already have one.  */
+  /* First try to decide what to do without reference to lookahead token.  */
 
-  /* First try to decide what to do without reference to look-ahead token.  */
   yyn = yypact[yystate];
-  if (yyn == YYPACT_NINF)
+  if (yyn == YYFLAG)
     goto yydefault;
 
-  /* Not known => get a look-ahead token if don't already have one.  */
+  /* Not known => get a lookahead token if don't already have one.  */
 
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+  /* yychar is either YYEMPTY or YYEOF
+     or a valid token in external form.  */
+
   if (yychar == YYEMPTY)
     {
-      YYDPRINTF ((stderr, "Reading a token: "));
+#if YYDEBUG != 0
+      if (yydebug)
+	fprintf(stderr, "Reading a token: ");
+#endif
       yychar = YYLEX;
     }
 
-  if (yychar <= YYEOF)
+  /* Convert token to internal form (in yychar1) for indexing tables with */
+
+  if (yychar <= 0)		/* This means end of input. */
     {
-      yychar = yytoken = YYEOF;
-      YYDPRINTF ((stderr, "Now at end of input.\n"));
+      yychar1 = 0;
+      yychar = YYEOF;		/* Don't call YYLEX any more */
+
+#if YYDEBUG != 0
+      if (yydebug)
+	fprintf(stderr, "Now at end of input.\n");
+#endif
     }
   else
     {
-      yytoken = YYTRANSLATE (yychar);
-      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+      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
     }
 
-  /* 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)
+  yyn += yychar1;
+  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
     goto yydefault;
+
   yyn = yytable[yyn];
-  if (yyn <= 0)
+
+  /* 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 || yyn == YYTABLE_NINF)
+      if (yyn == YYFLAG)
 	goto yyerrlab;
       yyn = -yyn;
       goto yyreduce;
     }
+  else if (yyn == 0)
+    goto yyerrlab;
 
   if (yyn == YYFINAL)
     YYACCEPT;
 
-  /* Count tokens shifted since error; after three, turn off error
-     status.  */
-  if (yyerrstatus)
-    yyerrstatus--;
+  /* Shift the lookahead token.  */
 
-  /* Shift the look-ahead token.  */
-  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
+#endif
 
-  /* Discard the shifted token unless it is eof.  */
+  /* Discard the token being shifted unless it is eof.  */
   if (yychar != YYEOF)
     yychar = YYEMPTY;
 
-  yystate = yyn;
   *++yyvsp = yylval;
+#ifdef YYLSP_NEEDED
+  *++yylsp = yylloc;
+#endif
 
+  /* count tokens shifted since error; after three, turn off error status.  */
+  if (yyerrstatus) yyerrstatus--;
+
+  yystate = yyn;
   goto yynewstate;
 
-
-/*-----------------------------------------------------------.
-| yydefault -- do the default action for the current state.  |
-`-----------------------------------------------------------*/
+/* Do the default action for the current state.  */
 yydefault:
+
   yyn = yydefact[yystate];
   if (yyn == 0)
     goto yyerrlab;
-  goto yyreduce;
 
-
-/*-----------------------------.
-| yyreduce -- Do a reduction.  |
-`-----------------------------*/
+/* Do a reduction.  yyn is the number of a rule to reduce with.  */
 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 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)
+#if YYDEBUG != 0
+  if (yydebug)
     {
-        case 29:
-#line 1113 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;}
-    break;
+      int i;
 
-  case 30:
-#line 1113 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;}
-    break;
+      fprintf (stderr, "Reducing via rule %d (line %d), ",
+	       yyn, yyrline[yyn]);
 
-  case 31:
-#line 1114 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_SLT; ;}
-    break;
+      /* Print the symbols being reduced, and their result.  */
+      for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
+	fprintf (stderr, "%s ", yytname[yyrhs[i]]);
+      fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
+    }
+#endif
 
-  case 32:
-#line 1114 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;}
-    break;
 
-  case 33:
-#line 1115 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;}
-    break;
+  switch (yyn) {
 
-  case 34:
-#line 1115 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;}
-    break;
-
-  case 35:
-#line 1116 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;}
-    break;
-
-  case 36:
-#line 1116 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;}
-    break;
-
-  case 37:
-#line 1117 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;}
-    break;
-
-  case 38:
-#line 1117 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;}
-    break;
-
-  case 39:
-#line 1121 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;}
-    break;
-
-  case 40:
-#line 1121 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;}
-    break;
-
-  case 41:
-#line 1122 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;}
-    break;
-
-  case 42:
-#line 1122 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;}
-    break;
-
-  case 43:
-#line 1123 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;}
-    break;
-
-  case 44:
-#line 1123 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;}
-    break;
-
-  case 45:
-#line 1124 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;}
-    break;
-
-  case 46:
-#line 1124 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;}
-    break;
-
-  case 47:
-#line 1125 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;}
-    break;
-
-  case 48:
-#line 1125 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;}
-    break;
-
-  case 49:
-#line 1126 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;}
-    break;
-
-  case 50:
-#line 1126 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;}
-    break;
-
-  case 51:
-#line 1127 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;}
-    break;
-
-  case 52:
-#line 1127 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;}
-    break;
-
-  case 53:
-#line 1128 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;}
-    break;
-
-  case 54:
-#line 1129 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;}
-    break;
-
-  case 65:
-#line 1138 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.StrVal) = 0; ;}
-    break;
-
-  case 66:
-#line 1140 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal)=(yyvsp[(3) - (4)].UInt64Val); ;}
-    break;
-
-  case 67:
-#line 1141 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal)=0; ;}
-    break;
-
-  case 68:
-#line 1145 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.StrVal) = (yyvsp[(1) - (2)].StrVal);
+case 28:
+#line 1113 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_EQ; ;
+    break;}
+case 29:
+#line 1113 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_NE; ;
+    break;}
+case 30:
+#line 1114 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_SLT; ;
+    break;}
+case 31:
+#line 1114 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_SGT; ;
+    break;}
+case 32:
+#line 1115 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_SLE; ;
+    break;}
+case 33:
+#line 1115 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_SGE; ;
+    break;}
+case 34:
+#line 1116 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_ULT; ;
+    break;}
+case 35:
+#line 1116 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_UGT; ;
+    break;}
+case 36:
+#line 1117 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_ULE; ;
+    break;}
+case 37:
+#line 1117 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_UGE; ;
+    break;}
+case 38:
+#line 1121 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_OEQ; ;
+    break;}
+case 39:
+#line 1121 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_ONE; ;
+    break;}
+case 40:
+#line 1122 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_OLT; ;
+    break;}
+case 41:
+#line 1122 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_OGT; ;
+    break;}
+case 42:
+#line 1123 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_OLE; ;
+    break;}
+case 43:
+#line 1123 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_OGE; ;
+    break;}
+case 44:
+#line 1124 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_ORD; ;
+    break;}
+case 45:
+#line 1124 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_UNO; ;
+    break;}
+case 46:
+#line 1125 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_UEQ; ;
+    break;}
+case 47:
+#line 1125 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_UNE; ;
+    break;}
+case 48:
+#line 1126 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_ULT; ;
+    break;}
+case 49:
+#line 1126 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_UGT; ;
+    break;}
+case 50:
+#line 1127 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_ULE; ;
+    break;}
+case 51:
+#line 1127 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_UGE; ;
+    break;}
+case 52:
+#line 1128 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_TRUE; ;
+    break;}
+case 53:
+#line 1129 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_FALSE; ;
+    break;}
+case 64:
+#line 1138 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.StrVal = 0; ;
+    break;}
+case 65:
+#line 1140 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal=yyvsp[-1].UInt64Val; ;
+    break;}
+case 66:
+#line 1141 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal=0; ;
+    break;}
+case 67:
+#line 1145 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.StrVal = yyvsp[-1].StrVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 69:
-#line 1149 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.StrVal) = 0;
+  ;
+    break;}
+case 68:
+#line 1149 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.StrVal = 0;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 73:
-#line 1157 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.StrVal) = 0;
+  ;
+    break;}
+case 72:
+#line 1157 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.StrVal = 0;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 74:
-#line 1162 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.StrVal) = (yyvsp[(1) - (2)].StrVal);
+  ;
+    break;}
+case 73:
+#line 1162 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.StrVal = yyvsp[-1].StrVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 75:
-#line 1168 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
-    break;
-
-  case 76:
-#line 1169 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
-    break;
-
-  case 77:
-#line 1170 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
-    break;
-
-  case 78:
-#line 1171 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
-    break;
-
-  case 79:
-#line 1172 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
-    break;
-
-  case 80:
-#line 1176 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
-    break;
-
-  case 81:
-#line 1177 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
-    break;
-
-  case 82:
-#line 1178 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
-    break;
-
-  case 83:
-#line 1182 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Visibility) = GlobalValue::DefaultVisibility;   ;}
-    break;
-
-  case 84:
-#line 1183 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Visibility) = GlobalValue::DefaultVisibility;   ;}
-    break;
-
-  case 85:
-#line 1184 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Visibility) = GlobalValue::HiddenVisibility;    ;}
-    break;
-
-  case 86:
-#line 1185 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Visibility) = GlobalValue::ProtectedVisibility; ;}
-    break;
-
-  case 87:
-#line 1189 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
-    break;
-
-  case 88:
-#line 1190 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
-    break;
-
-  case 89:
-#line 1191 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
-    break;
-
-  case 90:
-#line 1195 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
-    break;
-
-  case 91:
-#line 1196 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
-    break;
-
-  case 92:
-#line 1197 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
-    break;
-
-  case 93:
-#line 1198 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
-    break;
-
-  case 94:
-#line 1199 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
-    break;
-
-  case 95:
-#line 1203 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
-    break;
-
-  case 96:
-#line 1204 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
-    break;
-
-  case 97:
-#line 1205 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
-    break;
-
-  case 98:
-#line 1208 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::C; ;}
-    break;
-
-  case 99:
-#line 1209 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::C; ;}
-    break;
-
-  case 100:
-#line 1210 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::Fast; ;}
-    break;
-
-  case 101:
-#line 1211 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::Cold; ;}
-    break;
-
-  case 102:
-#line 1212 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::X86_StdCall; ;}
-    break;
-
-  case 103:
-#line 1213 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::X86_FastCall; ;}
-    break;
-
-  case 104:
-#line 1214 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-                   if ((unsigned)(yyvsp[(2) - (2)].UInt64Val) != (yyvsp[(2) - (2)].UInt64Val))
+  ;
+    break;}
+case 74:
+#line 1168 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::InternalLinkage; ;
+    break;}
+case 75:
+#line 1169 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::WeakLinkage; ;
+    break;}
+case 76:
+#line 1170 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
+    break;}
+case 77:
+#line 1171 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::AppendingLinkage; ;
+    break;}
+case 78:
+#line 1172 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::DLLExportLinkage; ;
+    break;}
+case 79:
+#line 1176 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::DLLImportLinkage; ;
+    break;}
+case 80:
+#line 1177 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;
+    break;}
+case 81:
+#line 1178 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
+    break;}
+case 82:
+#line 1182 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Visibility = GlobalValue::DefaultVisibility;   ;
+    break;}
+case 83:
+#line 1183 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Visibility = GlobalValue::DefaultVisibility;   ;
+    break;}
+case 84:
+#line 1184 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Visibility = GlobalValue::HiddenVisibility;    ;
+    break;}
+case 85:
+#line 1185 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Visibility = GlobalValue::ProtectedVisibility; ;
+    break;}
+case 86:
+#line 1189 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
+    break;}
+case 87:
+#line 1190 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::DLLImportLinkage; ;
+    break;}
+case 88:
+#line 1191 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;
+    break;}
+case 89:
+#line 1195 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
+    break;}
+case 90:
+#line 1196 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::InternalLinkage; ;
+    break;}
+case 91:
+#line 1197 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
+    break;}
+case 92:
+#line 1198 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::WeakLinkage; ;
+    break;}
+case 93:
+#line 1199 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::DLLExportLinkage; ;
+    break;}
+case 94:
+#line 1203 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
+    break;}
+case 95:
+#line 1204 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::WeakLinkage; ;
+    break;}
+case 96:
+#line 1205 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::InternalLinkage; ;
+    break;}
+case 97:
+#line 1208 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::C; ;
+    break;}
+case 98:
+#line 1209 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::C; ;
+    break;}
+case 99:
+#line 1210 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::Fast; ;
+    break;}
+case 100:
+#line 1211 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::Cold; ;
+    break;}
+case 101:
+#line 1212 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::X86_StdCall; ;
+    break;}
+case 102:
+#line 1213 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::X86_FastCall; ;
+    break;}
+case 103:
+#line 1214 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+                   if ((unsigned)yyvsp[0].UInt64Val != yyvsp[0].UInt64Val)
                      GEN_ERROR("Calling conv too large");
-                   (yyval.UIntVal) = (yyvsp[(2) - (2)].UInt64Val);
+                   yyval.UIntVal = yyvsp[0].UInt64Val;
                   CHECK_FOR_ERROR
-                 ;}
-    break;
-
-  case 105:
-#line 1221 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::ZExt;      ;}
-    break;
-
-  case 106:
-#line 1222 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::ZExt;      ;}
-    break;
-
-  case 107:
-#line 1223 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::SExt;      ;}
-    break;
-
-  case 108:
-#line 1224 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::SExt;      ;}
-    break;
-
-  case 109:
-#line 1225 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::InReg;     ;}
-    break;
-
-  case 110:
-#line 1226 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::StructRet; ;}
-    break;
-
-  case 111:
-#line 1227 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::NoAlias;   ;}
-    break;
-
-  case 112:
-#line 1228 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::ByVal;     ;}
-    break;
-
-  case 113:
-#line 1229 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::Nest;      ;}
-    break;
-
-  case 114:
-#line 1232 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::None; ;}
-    break;
-
-  case 115:
-#line 1233 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-                (yyval.ParamAttrs) = (yyvsp[(1) - (2)].ParamAttrs) | (yyvsp[(2) - (2)].ParamAttrs);
-              ;}
-    break;
-
-  case 116:
-#line 1238 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::NoReturn; ;}
-    break;
-
-  case 117:
-#line 1239 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::NoUnwind; ;}
-    break;
-
-  case 118:
-#line 1240 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::ZExt;     ;}
-    break;
-
-  case 119:
-#line 1241 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::SExt;     ;}
-    break;
-
-  case 120:
-#line 1242 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::ReadNone; ;}
-    break;
-
-  case 121:
-#line 1243 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::ReadOnly; ;}
-    break;
-
-  case 122:
-#line 1246 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::None; ;}
-    break;
-
-  case 123:
-#line 1247 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-                (yyval.ParamAttrs) = (yyvsp[(1) - (2)].ParamAttrs) | (yyvsp[(2) - (2)].ParamAttrs);
-              ;}
-    break;
-
-  case 124:
-#line 1252 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.StrVal) = 0; ;}
-    break;
-
-  case 125:
-#line 1253 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-                (yyval.StrVal) = (yyvsp[(2) - (2)].StrVal);
-              ;}
-    break;
-
-  case 126:
-#line 1260 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = 0; ;}
-    break;
-
-  case 127:
-#line 1261 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.UIntVal) = (yyvsp[(2) - (2)].UInt64Val);
-  if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
+                 ;
+    break;}
+case 104:
+#line 1221 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::ZExt;      ;
+    break;}
+case 105:
+#line 1222 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::ZExt;      ;
+    break;}
+case 106:
+#line 1223 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::SExt;      ;
+    break;}
+case 107:
+#line 1224 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::SExt;      ;
+    break;}
+case 108:
+#line 1225 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::InReg;     ;
+    break;}
+case 109:
+#line 1226 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::StructRet; ;
+    break;}
+case 110:
+#line 1227 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::NoAlias;   ;
+    break;}
+case 111:
+#line 1228 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::ByVal;     ;
+    break;}
+case 112:
+#line 1229 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::Nest;      ;
+    break;}
+case 113:
+#line 1232 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::None; ;
+    break;}
+case 114:
+#line 1233 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+                yyval.ParamAttrs = yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs;
+              ;
+    break;}
+case 115:
+#line 1238 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::NoReturn; ;
+    break;}
+case 116:
+#line 1239 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::NoUnwind; ;
+    break;}
+case 117:
+#line 1240 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::ZExt;     ;
+    break;}
+case 118:
+#line 1241 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::SExt;     ;
+    break;}
+case 119:
+#line 1242 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::ReadNone; ;
+    break;}
+case 120:
+#line 1243 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::ReadOnly; ;
+    break;}
+case 121:
+#line 1246 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::None; ;
+    break;}
+case 122:
+#line 1247 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+                yyval.ParamAttrs = yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs;
+              ;
+    break;}
+case 123:
+#line 1252 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.StrVal = 0; ;
+    break;}
+case 124:
+#line 1253 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+                yyval.StrVal = yyvsp[0].StrVal;
+              ;
+    break;}
+case 125:
+#line 1260 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = 0; ;
+    break;}
+case 126:
+#line 1261 "/Users/clamb/Documents/llvm/llvm/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 128:
-#line 1267 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = 0; ;}
-    break;
-
-  case 129:
-#line 1268 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.UIntVal) = (yyvsp[(3) - (3)].UInt64Val);
-  if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
+;
+    break;}
+case 127:
+#line 1267 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = 0; ;
+    break;}
+case 128:
+#line 1268 "/Users/clamb/Documents/llvm/llvm/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 130:
-#line 1277 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-  for (unsigned i = 0, e = (yyvsp[(2) - (2)].StrVal)->length(); i != e; ++i)
-    if ((*(yyvsp[(2) - (2)].StrVal))[i] == '"' || (*(yyvsp[(2) - (2)].StrVal))[i] == '\\')
+;
+    break;}
+case 129:
+#line 1277 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+  for (unsigned i = 0, e = yyvsp[0].StrVal->length(); i != e; ++i)
+    if ((*yyvsp[0].StrVal)[i] == '"' || (*yyvsp[0].StrVal)[i] == '\\')
       GEN_ERROR("Invalid character in section name");
-  (yyval.StrVal) = (yyvsp[(2) - (2)].StrVal);
+  yyval.StrVal = yyvsp[0].StrVal;
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 131:
-#line 1285 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.StrVal) = 0; ;}
-    break;
-
-  case 132:
-#line 1286 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.StrVal) = (yyvsp[(1) - (1)].StrVal); ;}
-    break;
-
-  case 133:
-#line 1291 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {;}
-    break;
-
-  case 134:
-#line 1292 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {;}
-    break;
-
-  case 135:
-#line 1293 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    CurGV->setSection(*(yyvsp[(1) - (1)].StrVal));
-    delete (yyvsp[(1) - (1)].StrVal);
+;
+    break;}
+case 130:
+#line 1285 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.StrVal = 0; ;
+    break;}
+case 131:
+#line 1286 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.StrVal = yyvsp[0].StrVal; ;
+    break;}
+case 132:
+#line 1291 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{;
+    break;}
+case 133:
+#line 1292 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{;
+    break;}
+case 134:
+#line 1293 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    CurGV->setSection(*yyvsp[0].StrVal);
+    delete yyvsp[0].StrVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 136:
-#line 1298 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[(2) - (2)].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[(2) - (2)].UInt64Val)))
+  ;
+    break;}
+case 135:
+#line 1298 "/Users/clamb/Documents/llvm/llvm/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[(2) - (2)].UInt64Val));
+    CurGV->setAlignment(yyvsp[0].UInt64Val);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 144:
-#line 1314 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
+  ;
+    break;}
+case 143:
+#line 1314 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeVal = new PATypeHolder(OpaqueType::get());
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 145:
-#line 1318 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeVal) = new PATypeHolder((yyvsp[(1) - (1)].PrimType));
+  ;
+    break;}
+case 144:
+#line 1318 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeVal = new PATypeHolder(yyvsp[0].PrimType);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 146:
-#line 1322 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {                             // Pointer type?
-    if (*(yyvsp[(1) - (3)].TypeVal) == Type::LabelTy)
+  ;
+    break;}
+case 145:
+#line 1322 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{                             // Pointer type?
+    if (*yyvsp[-2].TypeVal == Type::LabelTy)
       GEN_ERROR("Cannot form a pointer to a basic block");
-    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PointerType::get(*(yyvsp[(1) - (3)].TypeVal), (yyvsp[(2) - (3)].UIntVal))));
-    delete (yyvsp[(1) - (3)].TypeVal);
+    yyval.TypeVal = new PATypeHolder(HandleUpRefs(PointerType::get(*yyvsp[-2].TypeVal, yyvsp[-1].UIntVal)));
+    delete yyvsp[-2].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 147:
-#line 1329 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {            // Named types are also simple types...
-    const Type* tmp = getTypeVal((yyvsp[(1) - (1)].ValIDVal));
+  ;
+    break;}
+case 146:
+#line 1329 "/Users/clamb/Documents/llvm/llvm/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 148:
-#line 1334 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {                   // Type UpReference
-    if ((yyvsp[(2) - (2)].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range");
+    yyval.TypeVal = new PATypeHolder(tmp);
+  ;
+    break;}
+case 147:
+#line 1334 "/Users/clamb/Documents/llvm/llvm/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[(2) - (2)].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 149:
-#line 1342 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 148:
+#line 1342 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     // Allow but ignore attributes on function types; this permits auto-upgrade.
     // FIXME: remove in LLVM 3.0.
-    const Type* RetTy = *(yyvsp[(1) - (5)].TypeVal);
+    const Type* RetTy = *yyvsp[-4].TypeVal;
     if (!(RetTy->isFirstClassType() || RetTy == Type::VoidTy ||
           isa<OpaqueType>(RetTy)))
       GEN_ERROR("LLVM Functions cannot return aggregates");
 
     std::vector<const Type*> Params;
-    TypeWithAttrsList::iterator I = (yyvsp[(3) - (5)].TypeWithAttrsList)->begin(), E = (yyvsp[(3) - (5)].TypeWithAttrsList)->end();
+    TypeWithAttrsList::iterator I = yyvsp[-2].TypeWithAttrsList->begin(), E = yyvsp[-2].TypeWithAttrsList->end();
     for (; I != E; ++I ) {
       const Type *Ty = I->Ty->get();
       Params.push_back(Ty);
@@ -4057,20 +3088,19 @@
     CHECK_FOR_ERROR
 
     FunctionType *FT = FunctionType::get(RetTy, Params, isVarArg);
-    delete (yyvsp[(3) - (5)].TypeWithAttrsList);   // Delete the argument list
-    delete (yyvsp[(1) - (5)].TypeVal);   // Delete the return type handle
-    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT)); 
+    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 150:
-#line 1372 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 149:
+#line 1372 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     // Allow but ignore attributes on function types; this permits auto-upgrade.
     // FIXME: remove in LLVM 3.0.
     std::vector<const Type*> Params;
-    TypeWithAttrsList::iterator I = (yyvsp[(3) - (5)].TypeWithAttrsList)->begin(), E = (yyvsp[(3) - (5)].TypeWithAttrsList)->end();
+    TypeWithAttrsList::iterator I = yyvsp[-2].TypeWithAttrsList->begin(), E = yyvsp[-2].TypeWithAttrsList->end();
     for ( ; I != E; ++I ) {
       const Type* Ty = I->Ty->get();
       Params.push_back(Ty);
@@ -4085,303 +3115,282 @@
 
     CHECK_FOR_ERROR
 
-    FunctionType *FT = FunctionType::get((yyvsp[(1) - (5)].PrimType), Params, isVarArg);
-    delete (yyvsp[(3) - (5)].TypeWithAttrsList);      // Delete the argument list
-    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT)); 
+    FunctionType *FT = FunctionType::get(yyvsp[-4].PrimType, Params, isVarArg);
+    delete yyvsp[-2].TypeWithAttrsList;      // Delete the argument list
+    yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT)); 
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 151:
-#line 1397 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {          // Sized array type?
-    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[(4) - (5)].TypeVal), (unsigned)(yyvsp[(2) - (5)].UInt64Val))));
-    delete (yyvsp[(4) - (5)].TypeVal);
+  ;
+    break;}
+case 150:
+#line 1397 "/Users/clamb/Documents/llvm/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;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 152:
-#line 1402 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {          // Vector type?
-     const llvm::Type* ElemTy = (yyvsp[(4) - (5)].TypeVal)->get();
-     if ((unsigned)(yyvsp[(2) - (5)].UInt64Val) != (yyvsp[(2) - (5)].UInt64Val))
+  ;
+    break;}
+case 151:
+#line 1402 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{          // Vector 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 VectorType must be primitive");
-     (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(VectorType::get(*(yyvsp[(4) - (5)].TypeVal), (unsigned)(yyvsp[(2) - (5)].UInt64Val))));
-     delete (yyvsp[(4) - (5)].TypeVal);
+     yyval.TypeVal = new PATypeHolder(HandleUpRefs(VectorType::get(*yyvsp[-1].TypeVal, (unsigned)yyvsp[-3].UInt64Val)));
+     delete yyvsp[-1].TypeVal;
      CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 153:
-#line 1412 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {                        // Structure type?
+  ;
+    break;}
+case 152:
+#line 1412 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{                        // Structure type?
     std::vector<const Type*> Elements;
-    for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[(2) - (3)].TypeList)->begin(),
-           E = (yyvsp[(2) - (3)].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[(2) - (3)].TypeList);
+    yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
+    delete yyvsp[-1].TypeList;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 154:
-#line 1422 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {                                  // Empty structure type?
-    (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>()));
+  ;
+    break;}
+case 153:
+#line 1422 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{                                  // Empty structure type?
+    yyval.TypeVal = new PATypeHolder(StructType::get(std::vector<const Type*>()));
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 155:
-#line 1426 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 154:
+#line 1426 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     std::vector<const Type*> Elements;
-    for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[(3) - (5)].TypeList)->begin(),
-           E = (yyvsp[(3) - (5)].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[(3) - (5)].TypeList);
+    yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true)));
+    delete yyvsp[-2].TypeList;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 156:
-#line 1436 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {                         // Empty structure type?
-    (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
+  ;
+    break;}
+case 155:
+#line 1436 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{                         // Empty structure type?
+    yyval.TypeVal = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 157:
-#line 1443 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 156:
+#line 1443 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     // Allow but ignore attributes on function types; this permits auto-upgrade.
     // FIXME: remove in LLVM 3.0.
-    (yyval.TypeWithAttrs).Ty = (yyvsp[(1) - (2)].TypeVal); 
-    (yyval.TypeWithAttrs).Attrs = ParamAttr::None;
-  ;}
-    break;
-
-  case 158:
-#line 1452 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+    yyval.TypeWithAttrs.Ty = yyvsp[-1].TypeVal; 
+    yyval.TypeWithAttrs.Attrs = ParamAttr::None;
+  ;
+    break;}
+case 157:
+#line 1452 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (1)].TypeVal))->getDescription());
-    if (!(*(yyvsp[(1) - (1)].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[(1) - (1)].TypeVal);
-  ;}
-    break;
-
-  case 159:
-#line 1459 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeVal) = new PATypeHolder(Type::VoidTy);
-  ;}
-    break;
-
-  case 160:
-#line 1464 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
-    (yyval.TypeWithAttrsList)->push_back((yyvsp[(1) - (1)].TypeWithAttrs));
+    yyval.TypeVal = yyvsp[0].TypeVal;
+  ;
+    break;}
+case 158:
+#line 1459 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeVal = new PATypeHolder(Type::VoidTy);
+  ;
+    break;}
+case 159:
+#line 1464 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeWithAttrsList = new TypeWithAttrsList();
+    yyval.TypeWithAttrsList->push_back(yyvsp[0].TypeWithAttrs);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 161:
-#line 1469 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    ((yyval.TypeWithAttrsList)=(yyvsp[(1) - (3)].TypeWithAttrsList))->push_back((yyvsp[(3) - (3)].TypeWithAttrs));
+  ;
+    break;}
+case 160:
+#line 1469 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    (yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList)->push_back(yyvsp[0].TypeWithAttrs);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 163:
-#line 1477 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeWithAttrsList)=(yyvsp[(1) - (3)].TypeWithAttrsList);
+  ;
+    break;}
+case 162:
+#line 1477 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList;
     TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None;
     TWA.Ty = new PATypeHolder(Type::VoidTy);
-    (yyval.TypeWithAttrsList)->push_back(TWA);
+    yyval.TypeWithAttrsList->push_back(TWA);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 164:
-#line 1484 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeWithAttrsList) = new TypeWithAttrsList;
+  ;
+    break;}
+case 163:
+#line 1484 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeWithAttrsList = new TypeWithAttrsList;
     TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None;
     TWA.Ty = new PATypeHolder(Type::VoidTy);
-    (yyval.TypeWithAttrsList)->push_back(TWA);
+    yyval.TypeWithAttrsList->push_back(TWA);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 165:
-#line 1491 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
+  ;
+    break;}
+case 164:
+#line 1491 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeWithAttrsList = new TypeWithAttrsList();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 166:
-#line 1499 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeList) = new std::list<PATypeHolder>();
-    (yyval.TypeList)->push_back(*(yyvsp[(1) - (1)].TypeVal)); 
-    delete (yyvsp[(1) - (1)].TypeVal);
+  ;
+    break;}
+case 165:
+#line 1499 "/Users/clamb/Documents/llvm/llvm/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 167:
-#line 1505 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    ((yyval.TypeList)=(yyvsp[(1) - (3)].TypeList))->push_back(*(yyvsp[(3) - (3)].TypeVal)); 
-    delete (yyvsp[(3) - (3)].TypeVal);
+  ;
+    break;}
+case 166:
+#line 1505 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    (yyval.TypeList=yyvsp[-2].TypeList)->push_back(*yyvsp[0].TypeVal); 
+    delete yyvsp[0].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 168:
-#line 1517 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { // Nonempty unsized arr
+  ;
+    break;}
+case 167:
+#line 1517 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ // Nonempty unsized arr
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (4)].TypeVal))->getDescription());
-    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[(1) - (4)].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[(1) - (4)].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[(3) - (4)].ConstVector)->size())
+    if (NumElements != -1 && NumElements != (int)yyvsp[-1].ConstVector->size())
       GEN_ERROR("Type mismatch: constant sized array initialized with " +
-                     utostr((yyvsp[(3) - (4)].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[(3) - (4)].ConstVector)->size(); i++) {
-      if (ETy != (*(yyvsp[(3) - (4)].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[(3) - (4)].ConstVector))[i]->getType()->getDescription() + "'.");
+                       (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
     }
 
-    (yyval.ConstVal) = ConstantArray::get(ATy, *(yyvsp[(3) - (4)].ConstVector));
-    delete (yyvsp[(1) - (4)].TypeVal); delete (yyvsp[(3) - (4)].ConstVector);
+    yyval.ConstVal = ConstantArray::get(ATy, *yyvsp[-1].ConstVector);
+    delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 169:
-#line 1545 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 168:
+#line 1545 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
-    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[(1) - (3)].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[(1) - (3)].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[(1) - (3)].TypeVal);
+    yyval.ConstVal = ConstantArray::get(ATy, std::vector<Constant*>());
+    delete yyvsp[-2].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 170:
-#line 1561 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 169:
+#line 1561 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
-    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[(1) - (3)].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[(1) - (3)].TypeVal))->getDescription() + "'");
+                     (*yyvsp[-2].TypeVal)->getDescription() + "'");
 
     int NumElements = ATy->getNumElements();
     const Type *ETy = ATy->getElementType();
-    if (NumElements != -1 && NumElements != int((yyvsp[(3) - (3)].StrVal)->length()))
+    if (NumElements != -1 && NumElements != int(yyvsp[0].StrVal->length()))
       GEN_ERROR("Can't build string constant of size " + 
-                     itostr((int)((yyvsp[(3) - (3)].StrVal)->length())) +
+                     itostr((int)(yyvsp[0].StrVal->length())) +
                      " when array has size " + itostr(NumElements) + "");
     std::vector<Constant*> Vals;
     if (ETy == Type::Int8Ty) {
-      for (unsigned i = 0; i < (yyvsp[(3) - (3)].StrVal)->length(); ++i)
-        Vals.push_back(ConstantInt::get(ETy, (*(yyvsp[(3) - (3)].StrVal))[i]));
+      for (unsigned i = 0; i < yyvsp[0].StrVal->length(); ++i)
+        Vals.push_back(ConstantInt::get(ETy, (*yyvsp[0].StrVal)[i]));
     } else {
-      delete (yyvsp[(3) - (3)].StrVal);
+      delete yyvsp[0].StrVal;
       GEN_ERROR("Cannot build string arrays of non byte sized elements");
     }
-    delete (yyvsp[(3) - (3)].StrVal);
-    (yyval.ConstVal) = ConstantArray::get(ATy, Vals);
-    delete (yyvsp[(1) - (3)].TypeVal);
+    delete yyvsp[0].StrVal;
+    yyval.ConstVal = ConstantArray::get(ATy, Vals);
+    delete yyvsp[-2].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 171:
-#line 1588 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { // Nonempty unsized arr
+  ;
+    break;}
+case 170:
+#line 1588 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ // Nonempty unsized arr
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (4)].TypeVal))->getDescription());
-    const VectorType *PTy = dyn_cast<VectorType>((yyvsp[(1) - (4)].TypeVal)->get());
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
+    const VectorType *PTy = dyn_cast<VectorType>(yyvsp[-3].TypeVal->get());
     if (PTy == 0)
       GEN_ERROR("Cannot make packed constant with type: '" + 
-                     (*(yyvsp[(1) - (4)].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[(3) - (4)].ConstVector)->size())
+    if (NumElements != -1 && NumElements != (int)yyvsp[-1].ConstVector->size())
       GEN_ERROR("Type mismatch: constant sized packed initialized with " +
-                     utostr((yyvsp[(3) - (4)].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[(3) - (4)].ConstVector)->size(); i++) {
-      if (ETy != (*(yyvsp[(3) - (4)].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[(3) - (4)].ConstVector))[i]->getType()->getDescription() + "'.");
+           (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
     }
 
-    (yyval.ConstVal) = ConstantVector::get(PTy, *(yyvsp[(3) - (4)].ConstVector));
-    delete (yyvsp[(1) - (4)].TypeVal); delete (yyvsp[(3) - (4)].ConstVector);
+    yyval.ConstVal = ConstantVector::get(PTy, *yyvsp[-1].ConstVector);
+    delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 172:
-#line 1616 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    const StructType *STy = dyn_cast<StructType>((yyvsp[(1) - (4)].TypeVal)->get());
+  ;
+    break;}
+case 171:
+#line 1616 "/Users/clamb/Documents/llvm/llvm/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[(1) - (4)].TypeVal))->getDescription() + "'");
+                     (*yyvsp[-3].TypeVal)->getDescription() + "'");
 
-    if ((yyvsp[(3) - (4)].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[(3) - (4)].ConstVector)->size(); i != e; ++i)
-      if ((*(yyvsp[(3) - (4)].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) +
@@ -4392,21 +3401,20 @@
       GEN_ERROR("Unpacked Initializer to vector type '" +
                 STy->getDescription() + "'");
 
-    (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[(3) - (4)].ConstVector));
-    delete (yyvsp[(1) - (4)].TypeVal); delete (yyvsp[(3) - (4)].ConstVector);
+    yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-1].ConstVector);
+    delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 173:
-#line 1642 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 172:
+#line 1642 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
-    const StructType *STy = dyn_cast<StructType>((yyvsp[(1) - (3)].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[(1) - (3)].TypeVal))->getDescription() + "'");
+                     (*yyvsp[-2].TypeVal)->getDescription() + "'");
 
     if (STy->getNumContainedTypes() != 0)
       GEN_ERROR("Illegal number of initializers for structure type");
@@ -4416,26 +3424,25 @@
       GEN_ERROR("Unpacked Initializer to vector type '" +
                 STy->getDescription() + "'");
 
-    (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
-    delete (yyvsp[(1) - (3)].TypeVal);
+    yyval.ConstVal = ConstantStruct::get(STy, std::vector<Constant*>());
+    delete yyvsp[-2].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 174:
-#line 1662 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    const StructType *STy = dyn_cast<StructType>((yyvsp[(1) - (6)].TypeVal)->get());
+  ;
+    break;}
+case 173:
+#line 1662 "/Users/clamb/Documents/llvm/llvm/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[(1) - (6)].TypeVal))->getDescription() + "'");
+                     (*yyvsp[-5].TypeVal)->getDescription() + "'");
 
-    if ((yyvsp[(4) - (6)].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[(4) - (6)].ConstVector)->size(); i != e; ++i)
-      if ((*(yyvsp[(4) - (6)].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) +
@@ -4446,21 +3453,20 @@
       GEN_ERROR("Vector initializer to non-vector type '" + 
                 STy->getDescription() + "'");
 
-    (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[(4) - (6)].ConstVector));
-    delete (yyvsp[(1) - (6)].TypeVal); delete (yyvsp[(4) - (6)].ConstVector);
+    yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-2].ConstVector);
+    delete yyvsp[-5].TypeVal; delete yyvsp[-2].ConstVector;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 175:
-#line 1688 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 174:
+#line 1688 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (5)].TypeVal))->getDescription());
-    const StructType *STy = dyn_cast<StructType>((yyvsp[(1) - (5)].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[(1) - (5)].TypeVal))->getDescription() + "'");
+                     (*yyvsp[-4].TypeVal)->getDescription() + "'");
 
     if (STy->getNumContainedTypes() != 0)
       GEN_ERROR("Illegal number of initializers for structure type");
@@ -4470,45 +3476,42 @@
       GEN_ERROR("Vector initializer to non-vector type '" + 
                 STy->getDescription() + "'");
 
-    (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
-    delete (yyvsp[(1) - (5)].TypeVal);
+    yyval.ConstVal = ConstantStruct::get(STy, std::vector<Constant*>());
+    delete yyvsp[-4].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 176:
-#line 1708 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 175:
+#line 1708 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
-    const PointerType *PTy = dyn_cast<PointerType>((yyvsp[(1) - (2)].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) - (2)].TypeVal))->getDescription() + "'");
+                     (*yyvsp[-1].TypeVal)->getDescription() + "'");
 
-    (yyval.ConstVal) = ConstantPointerNull::get(PTy);
-    delete (yyvsp[(1) - (2)].TypeVal);
+    yyval.ConstVal = ConstantPointerNull::get(PTy);
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 177:
-#line 1720 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 176:
+#line 1720 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
-    (yyval.ConstVal) = UndefValue::get((yyvsp[(1) - (2)].TypeVal)->get());
-    delete (yyvsp[(1) - (2)].TypeVal);
+      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 178:
-#line 1727 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 177:
+#line 1727 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
-    const PointerType *Ty = dyn_cast<PointerType>((yyvsp[(1) - (2)].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");
 
@@ -4522,7 +3525,7 @@
     Function *SavedCurFn = CurFun.CurrentFunction;
     CurFun.CurrentFunction = 0;
 
-    Value *V = getExistingVal(Ty, (yyvsp[(2) - (2)].ValIDVal));
+    Value *V = getExistingVal(Ty, yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
 
     CurFun.CurrentFunction = SavedCurFn;
@@ -4537,16 +3540,16 @@
 
       // First check to see if the forward references value is already created!
       PerModuleInfo::GlobalRefsType::iterator I =
-        CurModule.GlobalRefs.find(std::make_pair(PT, (yyvsp[(2) - (2)].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[(2) - (2)].ValIDVal).destroy();
+        yyvsp[0].ValIDVal.destroy();
       } else {
         std::string Name;
-        if ((yyvsp[(2) - (2)].ValIDVal).Type == ValID::GlobalName)
-          Name = (yyvsp[(2) - (2)].ValIDVal).getName();
-        else if ((yyvsp[(2) - (2)].ValIDVal).Type != ValID::GlobalID)
+        if (yyvsp[0].ValIDVal.Type == ValID::GlobalName)
+          Name = yyvsp[0].ValIDVal.getName();
+        else if (yyvsp[0].ValIDVal.Type != ValID::GlobalID)
           GEN_ERROR("Invalid reference to global");
 
         // Create the forward referenced global.
@@ -4562,377 +3565,342 @@
         }
 
         // 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[(2) - (2)].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) - (2)].TypeVal);            // Free the type handle
+    yyval.ConstVal = cast<GlobalValue>(V);
+    delete yyvsp[-1].TypeVal;            // Free the type handle
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 179:
-#line 1793 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 178:
+#line 1793 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
-    if ((yyvsp[(1) - (2)].TypeVal)->get() != (yyvsp[(2) - (2)].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) - (2)].TypeVal))->getDescription() + " and " + (yyvsp[(2) - (2)].ConstVal)->getType()->getDescription());
-    (yyval.ConstVal) = (yyvsp[(2) - (2)].ConstVal);
-    delete (yyvsp[(1) - (2)].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 180:
-#line 1803 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 179:
+#line 1803 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
-    const Type *Ty = (yyvsp[(1) - (2)].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) - (2)].TypeVal);
+    yyval.ConstVal = Constant::getNullValue(Ty);
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 181:
-#line 1813 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {      // integral constants
-    if (!ConstantInt::isValueValidForType((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].SInt64Val)))
+  ;
+    break;}
+case 180:
+#line 1813 "/Users/clamb/Documents/llvm/llvm/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) - (2)].PrimType), (yyvsp[(2) - (2)].SInt64Val), true);
+    yyval.ConstVal = ConstantInt::get(yyvsp[-1].PrimType, yyvsp[0].SInt64Val, true);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 182:
-#line 1819 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {      // arbitrary precision integer constants
-    uint32_t BitWidth = cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth();
-    if ((yyvsp[(2) - (2)].APIntVal)->getBitWidth() > BitWidth) {
+  ;
+    break;}
+case 181:
+#line 1819 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{      // arbitrary precision integer constants
+    uint32_t BitWidth = cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth();
+    if (yyvsp[0].APIntVal->getBitWidth() > BitWidth) {
       GEN_ERROR("Constant value does not fit in type");
     }
-    (yyvsp[(2) - (2)].APIntVal)->sextOrTrunc(BitWidth);
-    (yyval.ConstVal) = ConstantInt::get(*(yyvsp[(2) - (2)].APIntVal));
-    delete (yyvsp[(2) - (2)].APIntVal);
+    yyvsp[0].APIntVal->sextOrTrunc(BitWidth);
+    yyval.ConstVal = ConstantInt::get(*yyvsp[0].APIntVal);
+    delete yyvsp[0].APIntVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 183:
-#line 1829 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {      // integral constants
-    if (!ConstantInt::isValueValidForType((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].UInt64Val)))
+  ;
+    break;}
+case 182:
+#line 1829 "/Users/clamb/Documents/llvm/llvm/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) - (2)].PrimType), (yyvsp[(2) - (2)].UInt64Val), false);
+    yyval.ConstVal = ConstantInt::get(yyvsp[-1].PrimType, yyvsp[0].UInt64Val, false);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 184:
-#line 1835 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {      // arbitrary precision integer constants
-    uint32_t BitWidth = cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth();
-    if ((yyvsp[(2) - (2)].APIntVal)->getBitWidth() > BitWidth) {
+  ;
+    break;}
+case 183:
+#line 1835 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{      // arbitrary precision integer constants
+    uint32_t BitWidth = cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth();
+    if (yyvsp[0].APIntVal->getBitWidth() > BitWidth) {
       GEN_ERROR("Constant value does not fit in type");
     } 
-    (yyvsp[(2) - (2)].APIntVal)->zextOrTrunc(BitWidth);
-    (yyval.ConstVal) = ConstantInt::get(*(yyvsp[(2) - (2)].APIntVal));
-    delete (yyvsp[(2) - (2)].APIntVal);
+    yyvsp[0].APIntVal->zextOrTrunc(BitWidth);
+    yyval.ConstVal = ConstantInt::get(*yyvsp[0].APIntVal);
+    delete yyvsp[0].APIntVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 185:
-#line 1845 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {                      // Boolean constants
-    assert(cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth() == 1 && "Not Bool?");
-    (yyval.ConstVal) = ConstantInt::getTrue();
+  ;
+    break;}
+case 184:
+#line 1845 "/Users/clamb/Documents/llvm/llvm/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 186:
-#line 1850 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {                     // Boolean constants
-    assert(cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth() == 1 && "Not Bool?");
-    (yyval.ConstVal) = ConstantInt::getFalse();
+  ;
+    break;}
+case 185:
+#line 1850 "/Users/clamb/Documents/llvm/llvm/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 187:
-#line 1855 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {                   // Floating point constants
-    if (!ConstantFP::isValueValidForType((yyvsp[(1) - (2)].PrimType), *(yyvsp[(2) - (2)].FPVal)))
+  ;
+    break;}
+case 186:
+#line 1855 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{                   // Floating point constants
+    if (!ConstantFP::isValueValidForType(yyvsp[-1].PrimType, *yyvsp[0].FPVal))
       GEN_ERROR("Floating point constant invalid for type");
     // Lexer has no type info, so builds all float and double FP constants 
     // as double.  Fix this here.  Long double is done right.
-    if (&(yyvsp[(2) - (2)].FPVal)->getSemantics()==&APFloat::IEEEdouble && (yyvsp[(1) - (2)].PrimType)==Type::FloatTy)
-      (yyvsp[(2) - (2)].FPVal)->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven);
-    (yyval.ConstVal) = ConstantFP::get((yyvsp[(1) - (2)].PrimType), *(yyvsp[(2) - (2)].FPVal));
-    delete (yyvsp[(2) - (2)].FPVal);
+    if (&yyvsp[0].FPVal->getSemantics()==&APFloat::IEEEdouble && yyvsp[-1].PrimType==Type::FloatTy)
+      yyvsp[0].FPVal->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven);
+    yyval.ConstVal = ConstantFP::get(yyvsp[-1].PrimType, *yyvsp[0].FPVal);
+    delete yyvsp[0].FPVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 188:
-#line 1868 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 187:
+#line 1868 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(5) - (6)].TypeVal))->getDescription());
-    Constant *Val = (yyvsp[(3) - (6)].ConstVal);
-    const Type *DestTy = (yyvsp[(5) - (6)].TypeVal)->get();
-    if (!CastInst::castIsValid((yyvsp[(1) - (6)].CastOpVal), (yyvsp[(3) - (6)].ConstVal), DestTy))
+      GEN_ERROR("Invalid 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[(1) - (6)].CastOpVal), (yyvsp[(3) - (6)].ConstVal), DestTy);
-    delete (yyvsp[(5) - (6)].TypeVal);
-  ;}
-    break;
-
-  case 189:
-#line 1880 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!isa<PointerType>((yyvsp[(3) - (5)].ConstVal)->getType()))
+    yyval.ConstVal = ConstantExpr::getCast(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy);
+    delete yyvsp[-1].TypeVal;
+  ;
+    break;}
+case 188:
+#line 1880 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (!isa<PointerType>(yyvsp[-2].ConstVal->getType()))
       GEN_ERROR("GetElementPtr requires a pointer operand");
 
     const Type *IdxTy =
-      GetElementPtrInst::getIndexedType((yyvsp[(3) - (5)].ConstVal)->getType(), (yyvsp[(4) - (5)].ValueList)->begin(), (yyvsp[(4) - (5)].ValueList)->end(),
+      GetElementPtrInst::getIndexedType(yyvsp[-2].ConstVal->getType(), yyvsp[-1].ValueList->begin(), yyvsp[-1].ValueList->end(),
                                         true);
     if (!IdxTy)
       GEN_ERROR("Index list invalid for constant getelementptr");
 
     SmallVector<Constant*, 8> IdxVec;
-    for (unsigned i = 0, e = (yyvsp[(4) - (5)].ValueList)->size(); i != e; ++i)
-      if (Constant *C = dyn_cast<Constant>((*(yyvsp[(4) - (5)].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[(4) - (5)].ValueList);
+    delete yyvsp[-1].ValueList;
 
-    (yyval.ConstVal) = ConstantExpr::getGetElementPtr((yyvsp[(3) - (5)].ConstVal), &IdxVec[0], IdxVec.size());
+    yyval.ConstVal = ConstantExpr::getGetElementPtr(yyvsp[-2].ConstVal, &IdxVec[0], IdxVec.size());
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 190:
-#line 1902 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[(3) - (8)].ConstVal)->getType() != Type::Int1Ty)
+  ;
+    break;}
+case 189:
+#line 1902 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (yyvsp[-5].ConstVal->getType() != Type::Int1Ty)
       GEN_ERROR("Select condition must be of boolean type");
-    if ((yyvsp[(5) - (8)].ConstVal)->getType() != (yyvsp[(7) - (8)].ConstVal)->getType())
+    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
       GEN_ERROR("Select operand types must match");
-    (yyval.ConstVal) = ConstantExpr::getSelect((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal));
+    yyval.ConstVal = ConstantExpr::getSelect(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 191:
-#line 1910 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[(3) - (6)].ConstVal)->getType() != (yyvsp[(5) - (6)].ConstVal)->getType())
+  ;
+    break;}
+case 190:
+#line 1910 "/Users/clamb/Documents/llvm/llvm/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[(1) - (6)].BinaryOpVal), (yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal));
-  ;}
-    break;
-
-  case 192:
-#line 1916 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[(3) - (6)].ConstVal)->getType() != (yyvsp[(5) - (6)].ConstVal)->getType())
+    yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
+  ;
+    break;}
+case 191:
+#line 1916 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
       GEN_ERROR("Logical operator types must match");
-    if (!(yyvsp[(3) - (6)].ConstVal)->getType()->isInteger()) {
-      if (Instruction::isShift((yyvsp[(1) - (6)].BinaryOpVal)) || !isa<VectorType>((yyvsp[(3) - (6)].ConstVal)->getType()) || 
-          !cast<VectorType>((yyvsp[(3) - (6)].ConstVal)->getType())->getElementType()->isInteger())
+    if (!yyvsp[-3].ConstVal->getType()->isInteger()) {
+      if (Instruction::isShift(yyvsp[-5].BinaryOpVal) || !isa<VectorType>(yyvsp[-3].ConstVal->getType()) || 
+          !cast<VectorType>(yyvsp[-3].ConstVal->getType())->getElementType()->isInteger())
         GEN_ERROR("Logical operator requires integral operands");
     }
-    (yyval.ConstVal) = ConstantExpr::get((yyvsp[(1) - (6)].BinaryOpVal), (yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal));
+    yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 193:
-#line 1927 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[(4) - (7)].ConstVal)->getType() != (yyvsp[(6) - (7)].ConstVal)->getType())
+  ;
+    break;}
+case 192:
+#line 1927 "/Users/clamb/Documents/llvm/llvm/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[(2) - (7)].IPredicate), (yyvsp[(4) - (7)].ConstVal), (yyvsp[(6) - (7)].ConstVal));
-  ;}
-    break;
-
-  case 194:
-#line 1932 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[(4) - (7)].ConstVal)->getType() != (yyvsp[(6) - (7)].ConstVal)->getType())
+    yyval.ConstVal = ConstantExpr::getICmp(yyvsp[-5].IPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
+  ;
+    break;}
+case 193:
+#line 1932 "/Users/clamb/Documents/llvm/llvm/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[(2) - (7)].FPredicate), (yyvsp[(4) - (7)].ConstVal), (yyvsp[(6) - (7)].ConstVal));
-  ;}
-    break;
-
-  case 195:
-#line 1937 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!ExtractElementInst::isValidOperands((yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal)))
+    yyval.ConstVal = ConstantExpr::getFCmp(yyvsp[-5].FPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
+  ;
+    break;}
+case 194:
+#line 1937 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (!ExtractElementInst::isValidOperands(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
       GEN_ERROR("Invalid extractelement operands");
-    (yyval.ConstVal) = ConstantExpr::getExtractElement((yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal));
+    yyval.ConstVal = ConstantExpr::getExtractElement(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 196:
-#line 1943 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!InsertElementInst::isValidOperands((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal)))
+  ;
+    break;}
+case 195:
+#line 1943 "/Users/clamb/Documents/llvm/llvm/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[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal));
+    yyval.ConstVal = ConstantExpr::getInsertElement(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 197:
-#line 1949 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!ShuffleVectorInst::isValidOperands((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal)))
+  ;
+    break;}
+case 196:
+#line 1949 "/Users/clamb/Documents/llvm/llvm/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[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal));
+    yyval.ConstVal = ConstantExpr::getShuffleVector(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 198:
-#line 1958 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    ((yyval.ConstVector) = (yyvsp[(1) - (3)].ConstVector))->push_back((yyvsp[(3) - (3)].ConstVal));
+  ;
+    break;}
+case 197:
+#line 1958 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    (yyval.ConstVector = yyvsp[-2].ConstVector)->push_back(yyvsp[0].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 199:
-#line 1962 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ConstVector) = new std::vector<Constant*>();
-    (yyval.ConstVector)->push_back((yyvsp[(1) - (1)].ConstVal));
+  ;
+    break;}
+case 198:
+#line 1962 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ConstVector = new std::vector<Constant*>();
+    yyval.ConstVector->push_back(yyvsp[0].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 200:
-#line 1970 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.BoolVal) = false; ;}
-    break;
-
-  case 201:
-#line 1970 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.BoolVal) = true; ;}
-    break;
-
-  case 202:
-#line 1973 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.BoolVal) = true; ;}
-    break;
-
-  case 203:
-#line 1973 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.BoolVal) = false; ;}
-    break;
-
-  case 204:
-#line 1976 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    const Type* VTy = (yyvsp[(1) - (2)].TypeVal)->get();
-    Value *V = getVal(VTy, (yyvsp[(2) - (2)].ValIDVal));
+  ;
+    break;}
+case 199:
+#line 1970 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.BoolVal = false; ;
+    break;}
+case 200:
+#line 1970 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.BoolVal = true; ;
+    break;}
+case 201:
+#line 1973 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.BoolVal = true; ;
+    break;}
+case 202:
+#line 1973 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.BoolVal = false; ;
+    break;}
+case 203:
+#line 1976 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    const Type* VTy = yyvsp[-1].TypeVal->get();
+    Value *V = getVal(VTy, yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
     GlobalValue* Aliasee = dyn_cast<GlobalValue>(V);
     if (!Aliasee)
       GEN_ERROR("Aliases can be created only to global values");
 
-    (yyval.ConstVal) = Aliasee;
+    yyval.ConstVal = Aliasee;
     CHECK_FOR_ERROR
-    delete (yyvsp[(1) - (2)].TypeVal);
-   ;}
-    break;
-
-  case 205:
-#line 1988 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    Constant *Val = (yyvsp[(3) - (6)].ConstVal);
-    const Type *DestTy = (yyvsp[(5) - (6)].TypeVal)->get();
-    if (!CastInst::castIsValid((yyvsp[(1) - (6)].CastOpVal), (yyvsp[(3) - (6)].ConstVal), DestTy))
+    delete yyvsp[-1].TypeVal;
+   ;
+    break;}
+case 204:
+#line 1988 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    Constant *Val = yyvsp[-3].ConstVal;
+    const Type *DestTy = yyvsp[-1].TypeVal->get();
+    if (!CastInst::castIsValid(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy))
       GEN_ERROR("invalid cast opcode for cast from '" +
                 Val->getType()->getDescription() + "' to '" +
                 DestTy->getDescription() + "'");
     
-    (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[(1) - (6)].CastOpVal), (yyvsp[(3) - (6)].ConstVal), DestTy);
+    yyval.ConstVal = ConstantExpr::getCast(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy);
     CHECK_FOR_ERROR
-    delete (yyvsp[(5) - (6)].TypeVal);
-   ;}
-    break;
-
-  case 206:
-#line 2009 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
+    delete yyvsp[-1].TypeVal;
+   ;
+    break;}
+case 205:
+#line 2009 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ModuleVal = ParserResult = CurModule.CurrentModule;
     CurModule.ModuleDone();
     CHECK_FOR_ERROR;
-  ;}
-    break;
-
-  case 207:
-#line 2014 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
+  ;
+    break;}
+case 206:
+#line 2014 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ModuleVal = ParserResult = CurModule.CurrentModule;
     CurModule.ModuleDone();
     CHECK_FOR_ERROR;
-  ;}
-    break;
-
-  case 210:
-#line 2027 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { CurFun.isDeclare = false; ;}
-    break;
-
-  case 211:
-#line 2027 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 209:
+#line 2027 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ CurFun.isDeclare = false; ;
+    break;}
+case 210:
+#line 2027 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CurFun.FunctionDone();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 212:
-#line 2031 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { CurFun.isDeclare = true; ;}
-    break;
-
-  case 213:
-#line 2031 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 211:
+#line 2031 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ CurFun.isDeclare = true; ;
+    break;}
+case 212:
+#line 2031 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 214:
-#line 2034 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 213:
+#line 2034 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 215:
-#line 2037 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 214:
+#line 2037 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (3)].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:
     //
@@ -4942,108 +3910,100 @@
     // If types are not resolved eagerly, then the two types will not be
     // determined to be the same type!
     //
-    ResolveTypeTo((yyvsp[(1) - (3)].StrVal), *(yyvsp[(3) - (3)].TypeVal));
+    ResolveTypeTo(yyvsp[-2].StrVal, *yyvsp[0].TypeVal);
 
-    if (!setTypeName(*(yyvsp[(3) - (3)].TypeVal), (yyvsp[(1) - (3)].StrVal)) && !(yyvsp[(1) - (3)].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[(3) - (3)].TypeVal));
+      CurModule.Types.push_back(*yyvsp[0].TypeVal);
     }
 
-    delete (yyvsp[(3) - (3)].TypeVal);
+    delete yyvsp[0].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
+  ;
+    break;}
+case 215:
+#line 2061 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    ResolveTypeTo(yyvsp[-2].StrVal, yyvsp[0].PrimType);
 
-  case 216:
-#line 2061 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    ResolveTypeTo((yyvsp[(1) - (3)].StrVal), (yyvsp[(3) - (3)].PrimType));
-
-    if (!setTypeName((yyvsp[(3) - (3)].PrimType), (yyvsp[(1) - (3)].StrVal)) && !(yyvsp[(1) - (3)].StrVal)) {
+    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[(3) - (3)].PrimType));
+      CurModule.Types.push_back(yyvsp[0].PrimType);
     }
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 217:
-#line 2073 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { 
+  ;
+    break;}
+case 216:
+#line 2073 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ 
     /* "Externally Visible" Linkage */
-    if ((yyvsp[(5) - (6)].ConstVal) == 0) 
+    if (yyvsp[-1].ConstVal == 0) 
       GEN_ERROR("Global value initializer is not a constant");
-    CurGV = ParseGlobalVariable((yyvsp[(1) - (6)].StrVal), GlobalValue::ExternalLinkage,
-                                (yyvsp[(2) - (6)].Visibility), (yyvsp[(4) - (6)].BoolVal), (yyvsp[(5) - (6)].ConstVal)->getType(), (yyvsp[(5) - (6)].ConstVal), (yyvsp[(3) - (6)].BoolVal), (yyvsp[(6) - (6)].UIntVal));
+    CurGV = ParseGlobalVariable(yyvsp[-5].StrVal, GlobalValue::ExternalLinkage,
+                                yyvsp[-4].Visibility, yyvsp[-2].BoolVal, yyvsp[-1].ConstVal->getType(), yyvsp[-1].ConstVal, yyvsp[-3].BoolVal, yyvsp[0].UIntVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 218:
-#line 2080 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 217:
+#line 2080 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CurGV = 0;
-  ;}
-    break;
-
-  case 219:
-#line 2084 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[(6) - (7)].ConstVal) == 0) 
+  ;
+    break;}
+case 218:
+#line 2084 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (yyvsp[-1].ConstVal == 0) 
       GEN_ERROR("Global value initializer is not a constant");
-    CurGV = ParseGlobalVariable((yyvsp[(1) - (7)].StrVal), (yyvsp[(2) - (7)].Linkage), (yyvsp[(3) - (7)].Visibility), (yyvsp[(5) - (7)].BoolVal), (yyvsp[(6) - (7)].ConstVal)->getType(), (yyvsp[(6) - (7)].ConstVal), (yyvsp[(4) - (7)].BoolVal), (yyvsp[(7) - (7)].UIntVal));
+    CurGV = ParseGlobalVariable(yyvsp[-6].StrVal, yyvsp[-5].Linkage, yyvsp[-4].Visibility, yyvsp[-2].BoolVal, yyvsp[-1].ConstVal->getType(), yyvsp[-1].ConstVal, yyvsp[-3].BoolVal, yyvsp[0].UIntVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 220:
-#line 2089 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 219:
+#line 2089 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CurGV = 0;
-  ;}
-    break;
-
-  case 221:
-#line 2093 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 220:
+#line 2093 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(6) - (7)].TypeVal))->getDescription());
-    CurGV = ParseGlobalVariable((yyvsp[(1) - (7)].StrVal), (yyvsp[(2) - (7)].Linkage), (yyvsp[(3) - (7)].Visibility), (yyvsp[(5) - (7)].BoolVal), *(yyvsp[(6) - (7)].TypeVal), 0, (yyvsp[(4) - (7)].BoolVal), (yyvsp[(7) - (7)].UIntVal));
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
+    CurGV = ParseGlobalVariable(yyvsp[-6].StrVal, yyvsp[-5].Linkage, yyvsp[-4].Visibility, yyvsp[-2].BoolVal, *yyvsp[-1].TypeVal, 0, yyvsp[-3].BoolVal, yyvsp[0].UIntVal);
     CHECK_FOR_ERROR
-    delete (yyvsp[(6) - (7)].TypeVal);
-  ;}
-    break;
-
-  case 222:
-#line 2099 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+    delete yyvsp[-1].TypeVal;
+  ;
+    break;}
+case 221:
+#line 2099 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CurGV = 0;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 223:
-#line 2103 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 222:
+#line 2103 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     std::string Name;
-    if ((yyvsp[(1) - (5)].StrVal)) {
-      Name = *(yyvsp[(1) - (5)].StrVal);
-      delete (yyvsp[(1) - (5)].StrVal);
+    if (yyvsp[-4].StrVal) {
+      Name = *yyvsp[-4].StrVal;
+      delete yyvsp[-4].StrVal;
     }
     if (Name.empty())
       GEN_ERROR("Alias name cannot be empty");
     
-    Constant* Aliasee = (yyvsp[(5) - (5)].ConstVal);
+    Constant* Aliasee = yyvsp[0].ConstVal;
     if (Aliasee == 0)
       GEN_ERROR(std::string("Invalid aliasee for alias: ") + Name);
 
-    GlobalAlias* GA = new GlobalAlias(Aliasee->getType(), (yyvsp[(4) - (5)].Linkage), Name, Aliasee,
+    GlobalAlias* GA = new GlobalAlias(Aliasee->getType(), yyvsp[-1].Linkage, Name, Aliasee,
                                       CurModule.CurrentModule);
-    GA->setVisibility((yyvsp[(2) - (5)].Visibility));
+    GA->setVisibility(yyvsp[-3].Visibility);
     InsertValue(GA, CurModule.Values);
     
     
@@ -5067,169 +4027,154 @@
     ID.destroy();
     
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 224:
-#line 2143 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { 
+  ;
+    break;}
+case 223:
+#line 2143 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ 
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 225:
-#line 2146 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 224:
+#line 2146 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 226:
-#line 2152 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 225:
+#line 2152 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
   const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
   if (AsmSoFar.empty())
-    CurModule.CurrentModule->setModuleInlineAsm(*(yyvsp[(1) - (1)].StrVal));
+    CurModule.CurrentModule->setModuleInlineAsm(*yyvsp[0].StrVal);
   else
-    CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+*(yyvsp[(1) - (1)].StrVal));
-  delete (yyvsp[(1) - (1)].StrVal);
+    CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+*yyvsp[0].StrVal);
+  delete yyvsp[0].StrVal;
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 227:
-#line 2162 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    CurModule.CurrentModule->setTargetTriple(*(yyvsp[(3) - (3)].StrVal));
-    delete (yyvsp[(3) - (3)].StrVal);
-  ;}
-    break;
-
-  case 228:
-#line 2166 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    CurModule.CurrentModule->setDataLayout(*(yyvsp[(3) - (3)].StrVal));
-    delete (yyvsp[(3) - (3)].StrVal);
-  ;}
-    break;
-
-  case 230:
-#line 2173 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-          CurModule.CurrentModule->addLibrary(*(yyvsp[(3) - (3)].StrVal));
-          delete (yyvsp[(3) - (3)].StrVal);
+;
+    break;}
+case 226:
+#line 2162 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    CurModule.CurrentModule->setTargetTriple(*yyvsp[0].StrVal);
+    delete yyvsp[0].StrVal;
+  ;
+    break;}
+case 227:
+#line 2166 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    CurModule.CurrentModule->setDataLayout(*yyvsp[0].StrVal);
+    delete yyvsp[0].StrVal;
+  ;
+    break;}
+case 229:
+#line 2173 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+          CurModule.CurrentModule->addLibrary(*yyvsp[0].StrVal);
+          delete yyvsp[0].StrVal;
           CHECK_FOR_ERROR
-        ;}
-    break;
-
-  case 231:
-#line 2178 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-          CurModule.CurrentModule->addLibrary(*(yyvsp[(1) - (1)].StrVal));
-          delete (yyvsp[(1) - (1)].StrVal);
+        ;
+    break;}
+case 230:
+#line 2178 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+          CurModule.CurrentModule->addLibrary(*yyvsp[0].StrVal);
+          delete yyvsp[0].StrVal;
           CHECK_FOR_ERROR
-        ;}
-    break;
-
-  case 232:
-#line 2183 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+        ;
+    break;}
+case 231:
+#line 2183 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
           CHECK_FOR_ERROR
-        ;}
-    break;
-
-  case 233:
-#line 2192 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+        ;
+    break;}
+case 232:
+#line 2192 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (5)].TypeVal))->getDescription());
-    if (*(yyvsp[(3) - (5)].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[(4) - (5)].ParamAttrs); E.Ty = (yyvsp[(3) - (5)].TypeVal); E.Name = (yyvsp[(5) - (5)].StrVal);
-    (yyval.ArgList) = (yyvsp[(1) - (5)].ArgList);
-    (yyvsp[(1) - (5)].ArgList)->push_back(E);
+    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 234:
-#line 2202 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 233:
+#line 2202 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
-    if (*(yyvsp[(1) - (3)].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[(2) - (3)].ParamAttrs); E.Ty = (yyvsp[(1) - (3)].TypeVal); E.Name = (yyvsp[(3) - (3)].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 235:
-#line 2213 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ArgList) = (yyvsp[(1) - (1)].ArgList);
+  ;
+    break;}
+case 234:
+#line 2213 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ArgList = yyvsp[0].ArgList;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 236:
-#line 2217 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ArgList) = (yyvsp[(1) - (3)].ArgList);
+  ;
+    break;}
+case 235:
+#line 2217 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ArgList = yyvsp[-2].ArgList;
     struct ArgListEntry E;
     E.Ty = new PATypeHolder(Type::VoidTy);
     E.Name = 0;
     E.Attrs = ParamAttr::None;
-    (yyval.ArgList)->push_back(E);
+    yyval.ArgList->push_back(E);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 237:
-#line 2226 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ArgList) = new ArgListType;
+  ;
+    break;}
+case 236:
+#line 2226 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ArgList = new ArgListType;
     struct ArgListEntry E;
     E.Ty = new PATypeHolder(Type::VoidTy);
     E.Name = 0;
     E.Attrs = ParamAttr::None;
-    (yyval.ArgList)->push_back(E);
+    yyval.ArgList->push_back(E);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 238:
-#line 2235 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ArgList) = 0;
+  ;
+    break;}
+case 237:
+#line 2235 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ArgList = 0;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 239:
-#line 2241 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-  std::string FunctionName(*(yyvsp[(3) - (10)].StrVal));
-  delete (yyvsp[(3) - (10)].StrVal);  // Free strdup'd memory!
+  ;
+    break;}
+case 238:
+#line 2241 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+  std::string FunctionName(*yyvsp[-7].StrVal);
+  delete yyvsp[-7].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[(2) - (10)].TypeVal)))
-    GEN_ERROR("Reference to abstract result: "+ (yyvsp[(2) - (10)].TypeVal)->get()->getDescription());
+  if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(yyvsp[-8].TypeVal))
+    GEN_ERROR("Reference to abstract result: "+ yyvsp[-8].TypeVal->get()->getDescription());
 
   std::vector<const Type*> ParamTypeList;
   ParamAttrsVector Attrs;
-  if ((yyvsp[(7) - (10)].ParamAttrs) != ParamAttr::None) {
+  if (yyvsp[-3].ParamAttrs != ParamAttr::None) {
     ParamAttrsWithIndex PAWI;
     PAWI.index = 0;
-    PAWI.attrs = (yyvsp[(7) - (10)].ParamAttrs);
+    PAWI.attrs = yyvsp[-3].ParamAttrs;
     Attrs.push_back(PAWI);
   }
-  if ((yyvsp[(5) - (10)].ArgList)) {   // If there are arguments...
+  if (yyvsp[-5].ArgList) {   // If there are arguments...
     unsigned index = 1;
-    for (ArgListType::iterator I = (yyvsp[(5) - (10)].ArgList)->begin(); I != (yyvsp[(5) - (10)].ArgList)->end(); ++I, ++index) {
+    for (ArgListType::iterator I = yyvsp[-5].ArgList->begin(); I != yyvsp[-5].ArgList->end(); ++I, ++index) {
       const Type* Ty = I->Ty->get();
       if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(I->Ty))
         GEN_ERROR("Reference to abstract argument: " + Ty->getDescription());
@@ -5251,9 +4196,9 @@
   if (!Attrs.empty())
     PAL = ParamAttrsList::get(Attrs);
 
-  FunctionType *FT = FunctionType::get(*(yyvsp[(2) - (10)].TypeVal), ParamTypeList, isVarArg);
+  FunctionType *FT = FunctionType::get(*yyvsp[-8].TypeVal, ParamTypeList, isVarArg);
   const PointerType *PFT = PointerType::getUnqual(FT);
-  delete (yyvsp[(2) - (10)].TypeVal);
+  delete yyvsp[-8].TypeVal;
 
   ValID ID;
   if (!FunctionName.empty()) {
@@ -5306,31 +4251,31 @@
     Fn->setLinkage(CurFun.Linkage);
     Fn->setVisibility(CurFun.Visibility);
   }
-  Fn->setCallingConv((yyvsp[(1) - (10)].UIntVal));
+  Fn->setCallingConv(yyvsp[-9].UIntVal);
   Fn->setParamAttrs(PAL);
-  Fn->setAlignment((yyvsp[(9) - (10)].UIntVal));
-  if ((yyvsp[(8) - (10)].StrVal)) {
-    Fn->setSection(*(yyvsp[(8) - (10)].StrVal));
-    delete (yyvsp[(8) - (10)].StrVal);
+  Fn->setAlignment(yyvsp[-1].UIntVal);
+  if (yyvsp[-2].StrVal) {
+    Fn->setSection(*yyvsp[-2].StrVal);
+    delete yyvsp[-2].StrVal;
   }
-  if ((yyvsp[(10) - (10)].StrVal)) {
-    Fn->setCollector((yyvsp[(10) - (10)].StrVal)->c_str());
-    delete (yyvsp[(10) - (10)].StrVal);
+  if (yyvsp[0].StrVal) {
+    Fn->setCollector(yyvsp[0].StrVal->c_str());
+    delete yyvsp[0].StrVal;
   }
 
   // Add all of the arguments we parsed to the function...
-  if ((yyvsp[(5) - (10)].ArgList)) {                     // Is null if empty...
+  if (yyvsp[-5].ArgList) {                     // Is null if empty...
     if (isVarArg) {  // Nuke the last entry
-      assert((yyvsp[(5) - (10)].ArgList)->back().Ty->get() == Type::VoidTy && (yyvsp[(5) - (10)].ArgList)->back().Name == 0 &&
+      assert(yyvsp[-5].ArgList->back().Ty->get() == Type::VoidTy && yyvsp[-5].ArgList->back().Name == 0 &&
              "Not a varargs marker!");
-      delete (yyvsp[(5) - (10)].ArgList)->back().Ty;
-      (yyvsp[(5) - (10)].ArgList)->pop_back();  // Delete the last entry
+      delete yyvsp[-5].ArgList->back().Ty;
+      yyvsp[-5].ArgList->pop_back();  // Delete the last entry
     }
     Function::arg_iterator ArgIt = Fn->arg_begin();
     Function::arg_iterator ArgEnd = Fn->arg_end();
     unsigned Idx = 1;
-    for (ArgListType::iterator I = (yyvsp[(5) - (10)].ArgList)->begin(); 
-         I != (yyvsp[(5) - (10)].ArgList)->end() && ArgIt != ArgEnd; ++I, ++ArgIt) {
+    for (ArgListType::iterator I = yyvsp[-5].ArgList->begin(); 
+         I != yyvsp[-5].ArgList->end() && ArgIt != ArgEnd; ++I, ++ArgIt) {
       delete I->Ty;                          // Delete the typeholder...
       setValueName(ArgIt, I->Name);       // Insert arg into symtab...
       CHECK_FOR_ERROR
@@ -5338,128 +4283,114 @@
       Idx++;
     }
 
-    delete (yyvsp[(5) - (10)].ArgList);                     // We're now done with the argument list
+    delete yyvsp[-5].ArgList;                     // We're now done with the argument list
   }
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 242:
-#line 2376 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.FunctionVal) = CurFun.CurrentFunction;
+;
+    break;}
+case 241:
+#line 2376 "/Users/clamb/Documents/llvm/llvm/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[(1) - (4)].Linkage));
-  (yyval.FunctionVal)->setVisibility((yyvsp[(2) - (4)].Visibility));
-;}
-    break;
-
-  case 245:
-#line 2387 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal);
+  yyval.FunctionVal->setLinkage(yyvsp[-3].Linkage);
+  yyval.FunctionVal->setVisibility(yyvsp[-2].Visibility);
+;
+    break;}
+case 244:
+#line 2387 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+  yyval.FunctionVal = yyvsp[-1].FunctionVal;
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 246:
-#line 2392 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    CurFun.CurrentFunction->setLinkage((yyvsp[(1) - (3)].Linkage));
-    CurFun.CurrentFunction->setVisibility((yyvsp[(2) - (3)].Visibility));
-    (yyval.FunctionVal) = CurFun.CurrentFunction;
+;
+    break;}
+case 245:
+#line 2392 "/Users/clamb/Documents/llvm/llvm/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 247:
-#line 2404 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = false;
+  ;
+    break;}
+case 246:
+#line 2404 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = false;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 248:
-#line 2408 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = true;
+  ;
+    break;}
+case 247:
+#line 2408 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = true;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 249:
-#line 2413 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {    // A reference to a direct constant
-    (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].SInt64Val));
+  ;
+    break;}
+case 248:
+#line 2413 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{    // A reference to a direct constant
+    yyval.ValIDVal = ValID::create(yyvsp[0].SInt64Val);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 250:
-#line 2417 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].UInt64Val));
+  ;
+    break;}
+case 249:
+#line 2417 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::create(yyvsp[0].UInt64Val);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 251:
-#line 2421 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {                     // Perhaps it's an FP constant?
-    (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].FPVal));
+  ;
+    break;}
+case 250:
+#line 2421 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{                     // Perhaps it's an FP constant?
+    yyval.ValIDVal = ValID::create(yyvsp[0].FPVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 252:
-#line 2425 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::create(ConstantInt::getTrue());
+  ;
+    break;}
+case 251:
+#line 2425 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::create(ConstantInt::getTrue());
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 253:
-#line 2429 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::create(ConstantInt::getFalse());
+  ;
+    break;}
+case 252:
+#line 2429 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::create(ConstantInt::getFalse());
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 254:
-#line 2433 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::createNull();
+  ;
+    break;}
+case 253:
+#line 2433 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::createNull();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 255:
-#line 2437 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::createUndef();
+  ;
+    break;}
+case 254:
+#line 2437 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::createUndef();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 256:
-#line 2441 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {     // A vector zero constant.
-    (yyval.ValIDVal) = ValID::createZeroInit();
+  ;
+    break;}
+case 255:
+#line 2441 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{     // A vector zero constant.
+    yyval.ValIDVal = ValID::createZeroInit();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 257:
-#line 2445 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { // Nonempty unsized packed vector
-    const Type *ETy = (*(yyvsp[(2) - (3)].ConstVector))[0]->getType();
-    int NumElements = (yyvsp[(2) - (3)].ConstVector)->size(); 
+  ;
+    break;}
+case 256:
+#line 2445 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ // Nonempty unsized packed vector
+    const Type *ETy = (*yyvsp[-1].ConstVector)[0]->getType();
+    int NumElements = yyvsp[-1].ConstVector->size(); 
     
     VectorType* pt = VectorType::get(ETy, NumElements);
     PATypeHolder* PTy = new PATypeHolder(
@@ -5471,256 +4402,236 @@
                                          );
     
     // Verify all elements are correct type!
-    for (unsigned i = 0; i < (yyvsp[(2) - (3)].ConstVector)->size(); i++) {
-      if (ETy != (*(yyvsp[(2) - (3)].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[(2) - (3)].ConstVector))[i]->getType()->getDescription() + "'.");
+                     (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
     }
 
-    (yyval.ValIDVal) = ValID::create(ConstantVector::get(pt, *(yyvsp[(2) - (3)].ConstVector)));
-    delete PTy; delete (yyvsp[(2) - (3)].ConstVector);
+    yyval.ValIDVal = ValID::create(ConstantVector::get(pt, *yyvsp[-1].ConstVector));
+    delete PTy; delete yyvsp[-1].ConstVector;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 258:
-#line 2470 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].ConstVal));
+  ;
+    break;}
+case 257:
+#line 2470 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::create(yyvsp[0].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 259:
-#line 2474 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::createInlineAsm(*(yyvsp[(3) - (5)].StrVal), *(yyvsp[(5) - (5)].StrVal), (yyvsp[(2) - (5)].BoolVal));
-    delete (yyvsp[(3) - (5)].StrVal);
-    delete (yyvsp[(5) - (5)].StrVal);
+  ;
+    break;}
+case 258:
+#line 2474 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::createInlineAsm(*yyvsp[-2].StrVal, *yyvsp[0].StrVal, yyvsp[-3].BoolVal);
+    delete yyvsp[-2].StrVal;
+    delete yyvsp[0].StrVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 260:
-#line 2484 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {  // Is it an integer reference...?
-    (yyval.ValIDVal) = ValID::createLocalID((yyvsp[(1) - (1)].UIntVal));
+  ;
+    break;}
+case 259:
+#line 2484 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{  // Is it an integer reference...?
+    yyval.ValIDVal = ValID::createLocalID(yyvsp[0].UIntVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 261:
-#line 2488 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::createGlobalID((yyvsp[(1) - (1)].UIntVal));
+  ;
+    break;}
+case 260:
+#line 2488 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::createGlobalID(yyvsp[0].UIntVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 262:
-#line 2492 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {                   // Is it a named reference...?
-    (yyval.ValIDVal) = ValID::createLocalName(*(yyvsp[(1) - (1)].StrVal));
-    delete (yyvsp[(1) - (1)].StrVal);
+  ;
+    break;}
+case 261:
+#line 2492 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{                   // Is it a named reference...?
+    yyval.ValIDVal = ValID::createLocalName(*yyvsp[0].StrVal);
+    delete yyvsp[0].StrVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 263:
-#line 2497 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {                   // Is it a named reference...?
-    (yyval.ValIDVal) = ValID::createGlobalName(*(yyvsp[(1) - (1)].StrVal));
-    delete (yyvsp[(1) - (1)].StrVal);
+  ;
+    break;}
+case 262:
+#line 2497 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{                   // Is it a named reference...?
+    yyval.ValIDVal = ValID::createGlobalName(*yyvsp[0].StrVal);
+    delete yyvsp[0].StrVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 266:
-#line 2510 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 265:
+#line 2510 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
-    (yyval.ValueVal) = getVal(*(yyvsp[(1) - (2)].TypeVal), (yyvsp[(2) - (2)].ValIDVal)); 
-    delete (yyvsp[(1) - (2)].TypeVal);
+      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 267:
-#line 2519 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal);
+  ;
+    break;}
+case 266:
+#line 2519 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.FunctionVal = yyvsp[-1].FunctionVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 268:
-#line 2523 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { // Do not allow functions with 0 basic blocks   
-    (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal);
+  ;
+    break;}
+case 267:
+#line 2523 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ // Do not allow functions with 0 basic blocks   
+    yyval.FunctionVal = yyvsp[-1].FunctionVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 269:
-#line 2532 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    setValueName((yyvsp[(3) - (3)].TermInstVal), (yyvsp[(2) - (3)].StrVal));
+  ;
+    break;}
+case 268:
+#line 2532 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    setValueName(yyvsp[0].TermInstVal, yyvsp[-1].StrVal);
     CHECK_FOR_ERROR
-    InsertValue((yyvsp[(3) - (3)].TermInstVal));
-    (yyvsp[(1) - (3)].BasicBlockVal)->getInstList().push_back((yyvsp[(3) - (3)].TermInstVal));
-    (yyval.BasicBlockVal) = (yyvsp[(1) - (3)].BasicBlockVal);
+    InsertValue(yyvsp[0].TermInstVal);
+    yyvsp[-2].BasicBlockVal->getInstList().push_back(yyvsp[0].TermInstVal);
+    yyval.BasicBlockVal = yyvsp[-2].BasicBlockVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 270:
-#line 2541 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (CastInst *CI1 = dyn_cast<CastInst>((yyvsp[(2) - (2)].InstVal)))
+  ;
+    break;}
+case 269:
+#line 2541 "/Users/clamb/Documents/llvm/llvm/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) - (2)].BasicBlockVal)->getInstList().push_back(CI2);
-    (yyvsp[(1) - (2)].BasicBlockVal)->getInstList().push_back((yyvsp[(2) - (2)].InstVal));
-    (yyval.BasicBlockVal) = (yyvsp[(1) - (2)].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 271:
-#line 2550 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {          // Empty space between instruction lists
-    (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalID(CurFun.NextValNum));
+  ;
+    break;}
+case 270:
+#line 2550 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{          // Empty space between instruction lists
+    yyval.BasicBlockVal = defineBBVal(ValID::createLocalID(CurFun.NextValNum));
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 272:
-#line 2554 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {             // Labelled (named) basic block
-    (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalName(*(yyvsp[(1) - (1)].StrVal)));
-    delete (yyvsp[(1) - (1)].StrVal);
+  ;
+    break;}
+case 271:
+#line 2554 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{             // Labelled (named) basic block
+    yyval.BasicBlockVal = defineBBVal(ValID::createLocalName(*yyvsp[0].StrVal));
+    delete yyvsp[0].StrVal;
     CHECK_FOR_ERROR
 
-  ;}
-    break;
+  ;
+    break;}
+case 272:
+#line 2561 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{              // Return with a result...
+    yyval.TermInstVal = new ReturnInst(yyvsp[0].ValueVal);
+    CHECK_FOR_ERROR
+  ;
+    break;}
+case 273:
+#line 2565 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{                                    // Return with no result...
+    yyval.TermInstVal = new ReturnInst();
+    CHECK_FOR_ERROR
+  ;
+    break;}
+case 274:
+#line 2569 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{                           // Unconditional Branch...
+    BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
+    CHECK_FOR_ERROR
+    yyval.TermInstVal = new BranchInst(tmpBB);
+  ;
+    break;}
+case 275:
+#line 2574 "/Users/clamb/Documents/llvm/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 276:
+#line 2584 "/Users/clamb/Documents/llvm/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;
 
-  case 273:
-#line 2561 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {              // Return with a result...
-    (yyval.TermInstVal) = new ReturnInst((yyvsp[(2) - (2)].ValueVal));
-    CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 274:
-#line 2565 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {                                    // Return with no result...
-    (yyval.TermInstVal) = new ReturnInst();
-    CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 275:
-#line 2569 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {                           // Unconditional Branch...
-    BasicBlock* tmpBB = getBBVal((yyvsp[(3) - (3)].ValIDVal));
-    CHECK_FOR_ERROR
-    (yyval.TermInstVal) = new BranchInst(tmpBB);
-  ;}
-    break;
-
-  case 276:
-#line 2574 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {  
-    assert(cast<IntegerType>((yyvsp[(2) - (9)].PrimType))->getBitWidth() == 1 && "Not Bool?");
-    BasicBlock* tmpBBA = getBBVal((yyvsp[(6) - (9)].ValIDVal));
-    CHECK_FOR_ERROR
-    BasicBlock* tmpBBB = getBBVal((yyvsp[(9) - (9)].ValIDVal));
-    CHECK_FOR_ERROR
-    Value* tmpVal = getVal(Type::Int1Ty, (yyvsp[(3) - (9)].ValIDVal));
-    CHECK_FOR_ERROR
-    (yyval.TermInstVal) = new BranchInst(tmpBBA, tmpBBB, tmpVal);
-  ;}
-    break;
-
-  case 277:
-#line 2584 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    Value* tmpVal = getVal((yyvsp[(2) - (9)].PrimType), (yyvsp[(3) - (9)].ValIDVal));
-    CHECK_FOR_ERROR
-    BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (9)].ValIDVal));
-    CHECK_FOR_ERROR
-    SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[(8) - (9)].JumpTable)->size());
-    (yyval.TermInstVal) = S;
-
-    std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = (yyvsp[(8) - (9)].JumpTable)->begin(),
-      E = (yyvsp[(8) - (9)].JumpTable)->end();
+    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[(8) - (9)].JumpTable);
+    delete yyvsp[-1].JumpTable;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 278:
-#line 2603 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    Value* tmpVal = getVal((yyvsp[(2) - (8)].PrimType), (yyvsp[(3) - (8)].ValIDVal));
+  ;
+    break;}
+case 277:
+#line 2603 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    Value* tmpVal = getVal(yyvsp[-6].PrimType, yyvsp[-5].ValIDVal);
     CHECK_FOR_ERROR
-    BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (8)].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 279:
-#line 2613 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 278:
+#line 2613 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
 
     // Handle the short syntax
     const PointerType *PFTy = 0;
     const FunctionType *Ty = 0;
-    if (!(PFTy = dyn_cast<PointerType>((yyvsp[(3) - (14)].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;
-      ParamList::iterator I = (yyvsp[(6) - (14)].ParamList)->begin(), E = (yyvsp[(6) - (14)].ParamList)->end();
+      ParamList::iterator I = yyvsp[-8].ParamList->begin(), E = yyvsp[-8].ParamList->end();
       for (; I != E; ++I) {
         const Type *Ty = I->Val->getType();
         if (Ty == Type::VoidTy)
           GEN_ERROR("Short call syntax cannot be used with varargs");
         ParamTypes.push_back(Ty);
       }
-      Ty = FunctionType::get((yyvsp[(3) - (14)].TypeVal)->get(), ParamTypes, false);
+      Ty = FunctionType::get(yyvsp[-11].TypeVal->get(), ParamTypes, false);
       PFTy = PointerType::getUnqual(Ty);
     }
 
-    delete (yyvsp[(3) - (14)].TypeVal);
+    delete yyvsp[-11].TypeVal;
 
-    Value *V = getVal(PFTy, (yyvsp[(4) - (14)].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[(11) - (14)].ValIDVal));
+    BasicBlock *Normal = getBBVal(yyvsp[-3].ValIDVal);
     CHECK_FOR_ERROR
-    BasicBlock *Except = getBBVal((yyvsp[(14) - (14)].ValIDVal));
+    BasicBlock *Except = getBBVal(yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
 
     ParamAttrsVector Attrs;
-    if ((yyvsp[(8) - (14)].ParamAttrs) != ParamAttr::None) {
-      ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = (yyvsp[(8) - (14)].ParamAttrs);
+    if (yyvsp[-6].ParamAttrs != ParamAttr::None) {
+      ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = yyvsp[-6].ParamAttrs;
       Attrs.push_back(PAWI);
     }
 
     // Check the arguments
     ValueList Args;
-    if ((yyvsp[(6) - (14)].ParamList)->empty()) {                                   // Has no arguments?
+    if (yyvsp[-8].ParamList->empty()) {                                   // Has no arguments?
       // Make sure no arguments is a good thing!
       if (Ty->getNumParams() != 0)
         GEN_ERROR("No arguments passed to a function that "
@@ -5730,7 +4641,7 @@
       // correctly!
       FunctionType::param_iterator I = Ty->param_begin();
       FunctionType::param_iterator E = Ty->param_end();
-      ParamList::iterator ArgI = (yyvsp[(6) - (14)].ParamList)->begin(), ArgE = (yyvsp[(6) - (14)].ParamList)->end();
+      ParamList::iterator ArgI = yyvsp[-8].ParamList->begin(), ArgE = yyvsp[-8].ParamList->end();
       unsigned index = 1;
 
       for (; ArgI != ArgE && I != E; ++ArgI, ++I, ++index) {
@@ -5748,15 +4659,8 @@
 
       if (Ty->isVarArg()) {
         if (I == E)
-          for (; ArgI != ArgE; ++ArgI, ++index) {
+          for (; ArgI != ArgE; ++ArgI)
             Args.push_back(ArgI->Val); // push the remaining varargs
-            if (ArgI->Attrs != ParamAttr::None) {
-              ParamAttrsWithIndex PAWI;
-              PAWI.index = index;
-              PAWI.attrs = ArgI->Attrs;
-              Attrs.push_back(PAWI);
-            }
-          }
       } else if (I != E || ArgI != ArgE)
         GEN_ERROR("Invalid number of parameters detected");
     }
@@ -5767,375 +4671,347 @@
 
     // Create the InvokeInst
     InvokeInst *II = new InvokeInst(V, Normal, Except, Args.begin(), Args.end());
-    II->setCallingConv((yyvsp[(2) - (14)].UIntVal));
+    II->setCallingConv(yyvsp[-12].UIntVal);
     II->setParamAttrs(PAL);
-    (yyval.TermInstVal) = II;
-    delete (yyvsp[(6) - (14)].ParamList);
+    yyval.TermInstVal = II;
+    delete yyvsp[-8].ParamList;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 280:
-#line 2703 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TermInstVal) = new UnwindInst();
+  ;
+    break;}
+case 279:
+#line 2696 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TermInstVal = new UnwindInst();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 281:
-#line 2707 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TermInstVal) = new UnreachableInst();
+  ;
+    break;}
+case 280:
+#line 2700 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TermInstVal = new UnreachableInst();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 282:
-#line 2714 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.JumpTable) = (yyvsp[(1) - (6)].JumpTable);
-    Constant *V = cast<Constant>(getExistingVal((yyvsp[(2) - (6)].PrimType), (yyvsp[(3) - (6)].ValIDVal)));
+  ;
+    break;}
+case 281:
+#line 2707 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.JumpTable = yyvsp[-5].JumpTable;
+    Constant *V = cast<Constant>(getExistingVal(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[(6) - (6)].ValIDVal));
+    BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
-  ;}
-    break;
-
-  case 283:
-#line 2725 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
-    Constant *V = cast<Constant>(getExistingVal((yyvsp[(1) - (5)].PrimType), (yyvsp[(2) - (5)].ValIDVal)));
+    yyval.JumpTable->push_back(std::make_pair(V, tmpBB));
+  ;
+    break;}
+case 282:
+#line 2718 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.JumpTable = new std::vector<std::pair<Constant*, BasicBlock*> >();
+    Constant *V = cast<Constant>(getExistingVal(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal));
     CHECK_FOR_ERROR
 
     if (V == 0)
       GEN_ERROR("May only switch on a constant pool value");
 
-    BasicBlock* tmpBB = getBBVal((yyvsp[(5) - (5)].ValIDVal));
+    BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB)); 
-  ;}
-    break;
-
-  case 284:
-#line 2738 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+    yyval.JumpTable->push_back(std::make_pair(V, tmpBB)); 
+  ;
+    break;}
+case 283:
+#line 2731 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     // Is this definition named?? if so, assign the name...
-    setValueName((yyvsp[(2) - (2)].InstVal), (yyvsp[(1) - (2)].StrVal));
+    setValueName(yyvsp[0].InstVal, yyvsp[-1].StrVal);
     CHECK_FOR_ERROR
-    InsertValue((yyvsp[(2) - (2)].InstVal));
-    (yyval.InstVal) = (yyvsp[(2) - (2)].InstVal);
+    InsertValue(yyvsp[0].InstVal);
+    yyval.InstVal = yyvsp[0].InstVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 285:
-#line 2748 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {    // Used for PHI nodes
+  ;
+    break;}
+case 284:
+#line 2741 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{    // Used for PHI nodes
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (6)].TypeVal))->getDescription());
-    (yyval.PHIList) = new std::list<std::pair<Value*, BasicBlock*> >();
-    Value* tmpVal = getVal(*(yyvsp[(1) - (6)].TypeVal), (yyvsp[(3) - (6)].ValIDVal));
+      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[(5) - (6)].ValIDVal));
+    BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
-    delete (yyvsp[(1) - (6)].TypeVal);
-  ;}
-    break;
-
-  case 286:
-#line 2759 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.PHIList) = (yyvsp[(1) - (7)].PHIList);
-    Value* tmpVal = getVal((yyvsp[(1) - (7)].PHIList)->front().first->getType(), (yyvsp[(4) - (7)].ValIDVal));
+    yyval.PHIList->push_back(std::make_pair(tmpVal, tmpBB));
+    delete yyvsp[-5].TypeVal;
+  ;
+    break;}
+case 285:
+#line 2752 "/Users/clamb/Documents/llvm/llvm/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[(6) - (7)].ValIDVal));
+    BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal);
     CHECK_FOR_ERROR
-    (yyvsp[(1) - (7)].PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
-  ;}
-    break;
-
-  case 287:
-#line 2769 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+    yyvsp[-6].PHIList->push_back(std::make_pair(tmpVal, tmpBB));
+  ;
+    break;}
+case 286:
+#line 2762 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     // FIXME: Remove trailing OptParamAttrs in LLVM 3.0, it was a mistake in 2.0
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (4)].TypeVal))->getDescription());
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
     // Used for call and invoke instructions
-    (yyval.ParamList) = new ParamList();
-    ParamListEntry E; E.Attrs = (yyvsp[(2) - (4)].ParamAttrs) | (yyvsp[(4) - (4)].ParamAttrs); E.Val = getVal((yyvsp[(1) - (4)].TypeVal)->get(), (yyvsp[(3) - (4)].ValIDVal));
-    (yyval.ParamList)->push_back(E);
-    delete (yyvsp[(1) - (4)].TypeVal);
+    yyval.ParamList = new ParamList();
+    ParamListEntry E; E.Attrs = yyvsp[-2].ParamAttrs | yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-3].TypeVal->get(), yyvsp[-1].ValIDVal);
+    yyval.ParamList->push_back(E);
+    delete yyvsp[-3].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 288:
-#line 2780 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 287:
+#line 2773 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     // FIXME: Remove trailing OptParamAttrs in LLVM 3.0, it was a mistake in 2.0
     // Labels are only valid in ASMs
-    (yyval.ParamList) = new ParamList();
-    ParamListEntry E; E.Attrs = (yyvsp[(2) - (4)].ParamAttrs) | (yyvsp[(4) - (4)].ParamAttrs); E.Val = getBBVal((yyvsp[(3) - (4)].ValIDVal));
-    (yyval.ParamList)->push_back(E);
+    yyval.ParamList = new ParamList();
+    ParamListEntry E; E.Attrs = yyvsp[-2].ParamAttrs | yyvsp[0].ParamAttrs; E.Val = getBBVal(yyvsp[-1].ValIDVal);
+    yyval.ParamList->push_back(E);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 289:
-#line 2788 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 288:
+#line 2781 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     // FIXME: Remove trailing OptParamAttrs in LLVM 3.0, it was a mistake in 2.0
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (6)].TypeVal))->getDescription());
-    (yyval.ParamList) = (yyvsp[(1) - (6)].ParamList);
-    ParamListEntry E; E.Attrs = (yyvsp[(4) - (6)].ParamAttrs) | (yyvsp[(6) - (6)].ParamAttrs); E.Val = getVal((yyvsp[(3) - (6)].TypeVal)->get(), (yyvsp[(5) - (6)].ValIDVal));
-    (yyval.ParamList)->push_back(E);
-    delete (yyvsp[(3) - (6)].TypeVal);
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
+    yyval.ParamList = yyvsp[-5].ParamList;
+    ParamListEntry E; E.Attrs = yyvsp[-2].ParamAttrs | yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-3].TypeVal->get(), yyvsp[-1].ValIDVal);
+    yyval.ParamList->push_back(E);
+    delete yyvsp[-3].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 290:
-#line 2798 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 289:
+#line 2791 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     // FIXME: Remove trailing OptParamAttrs in LLVM 3.0, it was a mistake in 2.0
-    (yyval.ParamList) = (yyvsp[(1) - (6)].ParamList);
-    ParamListEntry E; E.Attrs = (yyvsp[(4) - (6)].ParamAttrs) | (yyvsp[(6) - (6)].ParamAttrs); E.Val = getBBVal((yyvsp[(5) - (6)].ValIDVal));
-    (yyval.ParamList)->push_back(E);
+    yyval.ParamList = yyvsp[-5].ParamList;
+    ParamListEntry E; E.Attrs = yyvsp[-2].ParamAttrs | yyvsp[0].ParamAttrs; E.Val = getBBVal(yyvsp[-1].ValIDVal);
+    yyval.ParamList->push_back(E);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 291:
-#line 2805 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamList) = new ParamList(); ;}
-    break;
-
-  case 292:
-#line 2808 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ValueList) = new std::vector<Value*>(); ;}
-    break;
-
-  case 293:
-#line 2809 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValueList) = (yyvsp[(1) - (3)].ValueList);
-    (yyval.ValueList)->push_back((yyvsp[(3) - (3)].ValueVal));
+  ;
+    break;}
+case 290:
+#line 2798 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamList = new ParamList(); ;
+    break;}
+case 291:
+#line 2801 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ValueList = new std::vector<Value*>(); ;
+    break;}
+case 292:
+#line 2802 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValueList = yyvsp[-2].ValueList;
+    yyval.ValueList->push_back(yyvsp[0].ValueVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 294:
-#line 2816 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = true;
+  ;
+    break;}
+case 293:
+#line 2809 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = true;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 295:
-#line 2820 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = false;
+  ;
+    break;}
+case 294:
+#line 2813 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = false;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 296:
-#line 2825 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 295:
+#line 2818 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (5)].TypeVal))->getDescription());
-    if (!(*(yyvsp[(2) - (5)].TypeVal))->isInteger() && !(*(yyvsp[(2) - (5)].TypeVal))->isFloatingPoint() && 
-        !isa<VectorType>((*(yyvsp[(2) - (5)].TypeVal)).get()))
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
+    if (!(*yyvsp[-3].TypeVal)->isInteger() && !(*yyvsp[-3].TypeVal)->isFloatingPoint() && 
+        !isa<VectorType>((*yyvsp[-3].TypeVal).get()))
       GEN_ERROR(
         "Arithmetic operator requires integer, FP, or packed operands");
-    Value* val1 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(3) - (5)].ValIDVal)); 
+    Value* val1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal); 
     CHECK_FOR_ERROR
-    Value* val2 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(5) - (5)].ValIDVal));
+    Value* val2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.InstVal) = BinaryOperator::create((yyvsp[(1) - (5)].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[(2) - (5)].TypeVal);
-  ;}
-    break;
-
-  case 297:
-#line 2841 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+    delete yyvsp[-3].TypeVal;
+  ;
+    break;}
+case 296:
+#line 2834 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (5)].TypeVal))->getDescription());
-    if (!(*(yyvsp[(2) - (5)].TypeVal))->isInteger()) {
-      if (Instruction::isShift((yyvsp[(1) - (5)].BinaryOpVal)) || !isa<VectorType>((yyvsp[(2) - (5)].TypeVal)->get()) ||
-          !cast<VectorType>((yyvsp[(2) - (5)].TypeVal)->get())->getElementType()->isInteger())
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
+    if (!(*yyvsp[-3].TypeVal)->isInteger()) {
+      if (Instruction::isShift(yyvsp[-4].BinaryOpVal) || !isa<VectorType>(yyvsp[-3].TypeVal->get()) ||
+          !cast<VectorType>(yyvsp[-3].TypeVal->get())->getElementType()->isInteger())
         GEN_ERROR("Logical operator requires integral operands");
     }
-    Value* tmpVal1 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(3) - (5)].ValIDVal));
+    Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
     CHECK_FOR_ERROR
-    Value* tmpVal2 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(5) - (5)].ValIDVal));
+    Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.InstVal) = BinaryOperator::create((yyvsp[(1) - (5)].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[(2) - (5)].TypeVal);
-  ;}
-    break;
-
-  case 298:
-#line 2858 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+    delete yyvsp[-3].TypeVal;
+  ;
+    break;}
+case 297:
+#line 2851 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (6)].TypeVal))->getDescription());
-    if (isa<VectorType>((*(yyvsp[(3) - (6)].TypeVal)).get()))
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
+    if (isa<VectorType>((*yyvsp[-3].TypeVal).get()))
       GEN_ERROR("Vector types not supported by icmp instruction");
-    Value* tmpVal1 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(4) - (6)].ValIDVal));
+    Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
     CHECK_FOR_ERROR
-    Value* tmpVal2 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(6) - (6)].ValIDVal));
+    Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.InstVal) = CmpInst::create((yyvsp[(1) - (6)].OtherOpVal), (yyvsp[(2) - (6)].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");
-    delete (yyvsp[(3) - (6)].TypeVal);
-  ;}
-    break;
-
-  case 299:
-#line 2872 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+    delete yyvsp[-3].TypeVal;
+  ;
+    break;}
+case 298:
+#line 2865 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (6)].TypeVal))->getDescription());
-    if (isa<VectorType>((*(yyvsp[(3) - (6)].TypeVal)).get()))
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
+    if (isa<VectorType>((*yyvsp[-3].TypeVal).get()))
       GEN_ERROR("Vector types not supported by fcmp instruction");
-    Value* tmpVal1 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(4) - (6)].ValIDVal));
+    Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
     CHECK_FOR_ERROR
-    Value* tmpVal2 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(6) - (6)].ValIDVal));
+    Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.InstVal) = CmpInst::create((yyvsp[(1) - (6)].OtherOpVal), (yyvsp[(2) - (6)].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");
-    delete (yyvsp[(3) - (6)].TypeVal);
-  ;}
-    break;
-
-  case 300:
-#line 2886 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+    delete yyvsp[-3].TypeVal;
+  ;
+    break;}
+case 299:
+#line 2879 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(4) - (4)].TypeVal))->getDescription());
-    Value* Val = (yyvsp[(2) - (4)].ValueVal);
-    const Type* DestTy = (yyvsp[(4) - (4)].TypeVal)->get();
-    if (!CastInst::castIsValid((yyvsp[(1) - (4)].CastOpVal), Val, DestTy))
+      GEN_ERROR("Invalid 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[(1) - (4)].CastOpVal), Val, DestTy);
-    delete (yyvsp[(4) - (4)].TypeVal);
-  ;}
-    break;
-
-  case 301:
-#line 2898 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[(2) - (6)].ValueVal)->getType() != Type::Int1Ty)
+    yyval.InstVal = CastInst::create(yyvsp[-3].CastOpVal, Val, DestTy);
+    delete yyvsp[0].TypeVal;
+  ;
+    break;}
+case 300:
+#line 2891 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (yyvsp[-4].ValueVal->getType() != Type::Int1Ty)
       GEN_ERROR("select condition must be boolean");
-    if ((yyvsp[(4) - (6)].ValueVal)->getType() != (yyvsp[(6) - (6)].ValueVal)->getType())
+    if (yyvsp[-2].ValueVal->getType() != yyvsp[0].ValueVal->getType())
       GEN_ERROR("select value types should match");
-    (yyval.InstVal) = new SelectInst((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal));
+    yyval.InstVal = new SelectInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 302:
-#line 2906 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 301:
+#line 2899 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(4) - (4)].TypeVal))->getDescription());
-    (yyval.InstVal) = new VAArgInst((yyvsp[(2) - (4)].ValueVal), *(yyvsp[(4) - (4)].TypeVal));
-    delete (yyvsp[(4) - (4)].TypeVal);
+      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 303:
-#line 2913 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!ExtractElementInst::isValidOperands((yyvsp[(2) - (4)].ValueVal), (yyvsp[(4) - (4)].ValueVal)))
+  ;
+    break;}
+case 302:
+#line 2906 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (!ExtractElementInst::isValidOperands(yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
       GEN_ERROR("Invalid extractelement operands");
-    (yyval.InstVal) = new ExtractElementInst((yyvsp[(2) - (4)].ValueVal), (yyvsp[(4) - (4)].ValueVal));
+    yyval.InstVal = new ExtractElementInst(yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 304:
-#line 2919 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!InsertElementInst::isValidOperands((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal)))
+  ;
+    break;}
+case 303:
+#line 2912 "/Users/clamb/Documents/llvm/llvm/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[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal));
+    yyval.InstVal = new InsertElementInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 305:
-#line 2925 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!ShuffleVectorInst::isValidOperands((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal)))
+  ;
+    break;}
+case 304:
+#line 2918 "/Users/clamb/Documents/llvm/llvm/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[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal));
+    yyval.InstVal = new ShuffleVectorInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 306:
-#line 2931 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    const Type *Ty = (yyvsp[(2) - (2)].PHIList)->front().first->getType();
+  ;
+    break;}
+case 305:
+#line 2924 "/Users/clamb/Documents/llvm/llvm/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[(2) - (2)].PHIList)->size());
-    while ((yyvsp[(2) - (2)].PHIList)->begin() != (yyvsp[(2) - (2)].PHIList)->end()) {
-      if ((yyvsp[(2) - (2)].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[(2) - (2)].PHIList)->front().first, (yyvsp[(2) - (2)].PHIList)->front().second);
-      (yyvsp[(2) - (2)].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[(2) - (2)].PHIList);  // Free the list...
+    delete yyvsp[0].PHIList;  // Free the list...
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 307:
-#line 2947 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 306:
+#line 2940 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
 
     // Handle the short syntax
     const PointerType *PFTy = 0;
     const FunctionType *Ty = 0;
-    if (!(PFTy = dyn_cast<PointerType>((yyvsp[(3) - (8)].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;
-      ParamList::iterator I = (yyvsp[(6) - (8)].ParamList)->begin(), E = (yyvsp[(6) - (8)].ParamList)->end();
+      ParamList::iterator I = yyvsp[-2].ParamList->begin(), E = yyvsp[-2].ParamList->end();
       for (; I != E; ++I) {
         const Type *Ty = I->Val->getType();
         if (Ty == Type::VoidTy)
           GEN_ERROR("Short call syntax cannot be used with varargs");
         ParamTypes.push_back(Ty);
       }
-      Ty = FunctionType::get((yyvsp[(3) - (8)].TypeVal)->get(), ParamTypes, false);
+      Ty = FunctionType::get(yyvsp[-5].TypeVal->get(), ParamTypes, false);
       PFTy = PointerType::getUnqual(Ty);
     }
 
-    Value *V = getVal(PFTy, (yyvsp[(4) - (8)].ValIDVal));   // Get the function we're calling...
+    Value *V = getVal(PFTy, yyvsp[-4].ValIDVal);   // Get the function we're calling...
     CHECK_FOR_ERROR
 
     // Check for call to invalid intrinsic to avoid crashing later.
@@ -6149,15 +5025,15 @@
 
     // Set up the ParamAttrs for the function
     ParamAttrsVector Attrs;
-    if ((yyvsp[(8) - (8)].ParamAttrs) != ParamAttr::None) {
+    if (yyvsp[0].ParamAttrs != ParamAttr::None) {
       ParamAttrsWithIndex PAWI;
       PAWI.index = 0;
-      PAWI.attrs = (yyvsp[(8) - (8)].ParamAttrs);
+      PAWI.attrs = yyvsp[0].ParamAttrs;
       Attrs.push_back(PAWI);
     }
     // Check the arguments 
     ValueList Args;
-    if ((yyvsp[(6) - (8)].ParamList)->empty()) {                                   // Has no arguments?
+    if (yyvsp[-2].ParamList->empty()) {                                   // Has no arguments?
       // Make sure no arguments is a good thing!
       if (Ty->getNumParams() != 0)
         GEN_ERROR("No arguments passed to a function that "
@@ -6167,7 +5043,7 @@
       // correctly.  Also, gather any parameter attributes.
       FunctionType::param_iterator I = Ty->param_begin();
       FunctionType::param_iterator E = Ty->param_end();
-      ParamList::iterator ArgI = (yyvsp[(6) - (8)].ParamList)->begin(), ArgE = (yyvsp[(6) - (8)].ParamList)->end();
+      ParamList::iterator ArgI = yyvsp[-2].ParamList->begin(), ArgE = yyvsp[-2].ParamList->end();
       unsigned index = 1;
 
       for (; ArgI != ArgE && I != E; ++ArgI, ++I, ++index) {
@@ -6184,15 +5060,8 @@
       }
       if (Ty->isVarArg()) {
         if (I == E)
-          for (; ArgI != ArgE; ++ArgI, ++index) {
+          for (; ArgI != ArgE; ++ArgI)
             Args.push_back(ArgI->Val); // push the remaining varargs
-            if (ArgI->Attrs != ParamAttr::None) {
-              ParamAttrsWithIndex PAWI;
-              PAWI.index = index;
-              PAWI.attrs = ArgI->Attrs;
-              Attrs.push_back(PAWI);
-            }
-          }
       } else if (I != E || ArgI != ArgE)
         GEN_ERROR("Invalid number of parameters detected");
     }
@@ -6204,372 +5073,366 @@
 
     // Create the call node
     CallInst *CI = new CallInst(V, Args.begin(), Args.end());
-    CI->setTailCall((yyvsp[(1) - (8)].BoolVal));
-    CI->setCallingConv((yyvsp[(2) - (8)].UIntVal));
+    CI->setTailCall(yyvsp[-7].BoolVal);
+    CI->setCallingConv(yyvsp[-6].UIntVal);
     CI->setParamAttrs(PAL);
-    (yyval.InstVal) = CI;
-    delete (yyvsp[(6) - (8)].ParamList);
-    delete (yyvsp[(3) - (8)].TypeVal);
+    yyval.InstVal = CI;
+    delete yyvsp[-2].ParamList;
+    delete yyvsp[-5].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 308:
-#line 3044 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.InstVal) = (yyvsp[(1) - (1)].InstVal);
+  ;
+    break;}
+case 307:
+#line 3030 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.InstVal = yyvsp[0].InstVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 309:
-#line 3049 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = true;
+  ;
+    break;}
+case 308:
+#line 3035 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = true;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 310:
-#line 3053 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = false;
+  ;
+    break;}
+case 309:
+#line 3039 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = false;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 311:
-#line 3060 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 310:
+#line 3046 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (3)].TypeVal))->getDescription());
-    (yyval.InstVal) = new MallocInst(*(yyvsp[(2) - (3)].TypeVal), 0, (yyvsp[(3) - (3)].UIntVal));
-    delete (yyvsp[(2) - (3)].TypeVal);
+      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 312:
-#line 3067 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 311:
+#line 3053 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (6)].TypeVal))->getDescription());
-    Value* tmpVal = getVal((yyvsp[(4) - (6)].PrimType), (yyvsp[(5) - (6)].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[(2) - (6)].TypeVal), tmpVal, (yyvsp[(6) - (6)].UIntVal));
-    delete (yyvsp[(2) - (6)].TypeVal);
-  ;}
-    break;
-
-  case 313:
-#line 3075 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+    yyval.InstVal = new MallocInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
+    delete yyvsp[-4].TypeVal;
+  ;
+    break;}
+case 312:
+#line 3061 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (3)].TypeVal))->getDescription());
-    (yyval.InstVal) = new AllocaInst(*(yyvsp[(2) - (3)].TypeVal), 0, (yyvsp[(3) - (3)].UIntVal));
-    delete (yyvsp[(2) - (3)].TypeVal);
+      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 314:
-#line 3082 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 313:
+#line 3068 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (6)].TypeVal))->getDescription());
-    Value* tmpVal = getVal((yyvsp[(4) - (6)].PrimType), (yyvsp[(5) - (6)].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[(2) - (6)].TypeVal), tmpVal, (yyvsp[(6) - (6)].UIntVal));
-    delete (yyvsp[(2) - (6)].TypeVal);
-  ;}
-    break;
-
-  case 315:
-#line 3090 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!isa<PointerType>((yyvsp[(2) - (2)].ValueVal)->getType()))
+    yyval.InstVal = new AllocaInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
+    delete yyvsp[-4].TypeVal;
+  ;
+    break;}
+case 314:
+#line 3076 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (!isa<PointerType>(yyvsp[0].ValueVal->getType()))
       GEN_ERROR("Trying to free nonpointer type " + 
-                     (yyvsp[(2) - (2)].ValueVal)->getType()->getDescription() + "");
-    (yyval.InstVal) = new FreeInst((yyvsp[(2) - (2)].ValueVal));
+                     yyvsp[0].ValueVal->getType()->getDescription() + "");
+    yyval.InstVal = new FreeInst(yyvsp[0].ValueVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 316:
-#line 3098 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 315:
+#line 3084 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (5)].TypeVal))->getDescription());
-    if (!isa<PointerType>((yyvsp[(3) - (5)].TypeVal)->get()))
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
+    if (!isa<PointerType>(yyvsp[-2].TypeVal->get()))
       GEN_ERROR("Can't load from nonpointer type: " +
-                     (*(yyvsp[(3) - (5)].TypeVal))->getDescription());
-    if (!cast<PointerType>((yyvsp[(3) - (5)].TypeVal)->get())->getElementType()->isFirstClassType())
+                     (*yyvsp[-2].TypeVal)->getDescription());
+    if (!cast<PointerType>(yyvsp[-2].TypeVal->get())->getElementType()->isFirstClassType())
       GEN_ERROR("Can't load from pointer of non-first-class type: " +
-                     (*(yyvsp[(3) - (5)].TypeVal))->getDescription());
-    Value* tmpVal = getVal(*(yyvsp[(3) - (5)].TypeVal), (yyvsp[(4) - (5)].ValIDVal));
+                     (*yyvsp[-2].TypeVal)->getDescription());
+    Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.InstVal) = new LoadInst(tmpVal, "", (yyvsp[(1) - (5)].BoolVal), (yyvsp[(5) - (5)].UIntVal));
-    delete (yyvsp[(3) - (5)].TypeVal);
-  ;}
-    break;
-
-  case 317:
-#line 3112 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+    yyval.InstVal = new LoadInst(tmpVal, "", yyvsp[-4].BoolVal, yyvsp[0].UIntVal);
+    delete yyvsp[-2].TypeVal;
+  ;
+    break;}
+case 316:
+#line 3098 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(5) - (7)].TypeVal))->getDescription());
-    const PointerType *PT = dyn_cast<PointerType>((yyvsp[(5) - (7)].TypeVal)->get());
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
+    const PointerType *PT = dyn_cast<PointerType>(yyvsp[-2].TypeVal->get());
     if (!PT)
       GEN_ERROR("Can't store to a nonpointer type: " +
-                     (*(yyvsp[(5) - (7)].TypeVal))->getDescription());
+                     (*yyvsp[-2].TypeVal)->getDescription());
     const Type *ElTy = PT->getElementType();
-    if (ElTy != (yyvsp[(3) - (7)].ValueVal)->getType())
-      GEN_ERROR("Can't store '" + (yyvsp[(3) - (7)].ValueVal)->getType()->getDescription() +
+    if (ElTy != yyvsp[-4].ValueVal->getType())
+      GEN_ERROR("Can't store '" + yyvsp[-4].ValueVal->getType()->getDescription() +
                      "' into space of type '" + ElTy->getDescription() + "'");
 
-    Value* tmpVal = getVal(*(yyvsp[(5) - (7)].TypeVal), (yyvsp[(6) - (7)].ValIDVal));
+    Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.InstVal) = new StoreInst((yyvsp[(3) - (7)].ValueVal), tmpVal, (yyvsp[(1) - (7)].BoolVal), (yyvsp[(7) - (7)].UIntVal));
-    delete (yyvsp[(5) - (7)].TypeVal);
-  ;}
-    break;
-
-  case 318:
-#line 3129 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
-    {
+    yyval.InstVal = new StoreInst(yyvsp[-4].ValueVal, tmpVal, yyvsp[-6].BoolVal, yyvsp[0].UIntVal);
+    delete yyvsp[-2].TypeVal;
+  ;
+    break;}
+case 317:
+#line 3115 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (4)].TypeVal))->getDescription());
-    if (!isa<PointerType>((yyvsp[(2) - (4)].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) - (4)].TypeVal), (yyvsp[(4) - (4)].ValueList)->begin(), (yyvsp[(4) - (4)].ValueList)->end(), true))
+    if (!GetElementPtrInst::getIndexedType(*yyvsp[-2].TypeVal, yyvsp[0].ValueList->begin(), yyvsp[0].ValueList->end(), true))
       GEN_ERROR("Invalid getelementptr indices for type '" +
-                     (*(yyvsp[(2) - (4)].TypeVal))->getDescription()+ "'");
-    Value* tmpVal = getVal(*(yyvsp[(2) - (4)].TypeVal), (yyvsp[(3) - (4)].ValIDVal));
+                     (*yyvsp[-2].TypeVal)->getDescription()+ "'");
+    Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.InstVal) = new GetElementPtrInst(tmpVal, (yyvsp[(4) - (4)].ValueList)->begin(), (yyvsp[(4) - (4)].ValueList)->end());
-    delete (yyvsp[(2) - (4)].TypeVal); 
-    delete (yyvsp[(4) - (4)].ValueList);
-  ;}
-    break;
+    yyval.InstVal = new GetElementPtrInst(tmpVal, yyvsp[0].ValueList->begin(), yyvsp[0].ValueList->end());
+    delete yyvsp[-2].TypeVal; 
+    delete yyvsp[0].ValueList;
+  ;
+    break;}
+}
+   /* the action file gets copied in in place of this dollarsign */
+#line 543 "/usr/share/bison.simple"
+
+  yyvsp -= yylen;
+  yyssp -= yylen;
+#ifdef YYLSP_NEEDED
+  yylsp -= yylen;
+#endif
 
-
-/* Line 1267 of yacc.c.  */
-#line 6359 "llvmAsmParser.tab.c"
-      default: break;
+#if YYDEBUG != 0
+  if (yydebug)
+    {
+      short *ssp1 = yyss - 1;
+      fprintf (stderr, "state stack now");
+      while (ssp1 != yyssp)
+	fprintf (stderr, " %d", *++ssp1);
+      fprintf (stderr, "\n");
     }
-  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
-
-  YYPOPSTACK (yylen);
-  yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
+#endif
 
   *++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 - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+  yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
+  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
     yystate = yytable[yystate];
   else
-    yystate = yydefgoto[yyn - YYNTOKENS];
+    yystate = yydefgoto[yyn - YYNTBASE];
 
   goto yynewstate;
 
+yyerrlab:   /* here on detecting error */
 
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
-yyerrlab:
-  /* If not already recovering from an error, report this error.  */
-  if (!yyerrstatus)
+  if (! yyerrstatus)
+    /* If not already recovering from an error, report this error.  */
     {
       ++yynerrs;
-#if ! YYERROR_VERBOSE
-      yyerror (YY_("syntax error"));
-#else
-      {
-	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
-	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
-	  {
-	    YYSIZE_T yyalloc = 2 * yysize;
-	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
-	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
-	    if (yymsg != yymsgbuf)
-	      YYSTACK_FREE (yymsg);
-	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
-	    if (yymsg)
-	      yymsg_alloc = yyalloc;
-	    else
-	      {
-		yymsg = yymsgbuf;
-		yymsg_alloc = sizeof yymsgbuf;
-	      }
-	  }
 
-	if (0 < yysize && yysize <= yymsg_alloc)
-	  {
-	    (void) yysyntax_error (yymsg, yystate, yychar);
-	    yyerror (yymsg);
-	  }
-	else
-	  {
-	    yyerror (YY_("syntax error"));
-	    if (yysize != 0)
-	      goto yyexhaustedlab;
-	  }
-      }
-#endif
+#ifdef YYERROR_VERBOSE
+      yyn = yypact[yystate];
+
+      if (yyn > YYFLAG && yyn < YYLAST)
+	{
+	  int size = 0;
+	  char *msg;
+	  int x, count;
+
+	  count = 0;
+	  /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
+	  for (x = (yyn < 0 ? -yyn : 0);
+	       x < (sizeof(yytname) / sizeof(char *)); x++)
+	    if (yycheck[x + yyn] == x)
+	      size += strlen(yytname[x]) + 15, count++;
+	  msg = (char *) malloc(size + 15);
+	  if (msg != 0)
+	    {
+	      strcpy(msg, "parse error");
+
+	      if (count < 5)
+		{
+		  count = 0;
+		  for (x = (yyn < 0 ? -yyn : 0);
+		       x < (sizeof(yytname) / sizeof(char *)); x++)
+		    if (yycheck[x + yyn] == x)
+		      {
+			strcat(msg, count == 0 ? ", expecting `" : " or `");
+			strcat(msg, yytname[x]);
+			strcat(msg, "'");
+			count++;
+		      }
+		}
+	      yyerror(msg);
+	      free(msg);
+	    }
+	  else
+	    yyerror ("parse error; also virtual memory exceeded");
+	}
+      else
+#endif /* YYERROR_VERBOSE */
+	yyerror("parse error");
     }
 
-
+  goto yyerrlab1;
+yyerrlab1:   /* here on error raised explicitly by an action */
 
   if (yyerrstatus == 3)
     {
-      /* If just tried and failed to reuse look-ahead token after an
-	 error, discard it.  */
+      /* if just tried and failed to reuse lookahead token after an error, discard it.  */
 
-      if (yychar <= YYEOF)
-	{
-	  /* Return failure if at end of input.  */
-	  if (yychar == YYEOF)
-	    YYABORT;
-	}
-      else
-	{
-	  yydestruct ("Error: discarding",
-		      yytoken, &yylval);
-	  yychar = YYEMPTY;
-	}
-    }
-
-  /* Else will try to reuse look-ahead token after shifting the error
-     token.  */
-  goto yyerrlab1;
-
-
-/*---------------------------------------------------.
-| yyerrorlab -- error raised explicitly by YYERROR.  |
-`---------------------------------------------------*/
-yyerrorlab:
-
-  /* Pacify compilers like GCC when the user code never invokes
-     YYERROR and the label yyerrorlab therefore never appears in user
-     code.  */
-  if (/*CONSTCOND*/ 0)
-     goto yyerrorlab;
-
-  /* Do not reclaim the symbols of the rule which action triggered
-     this YYERROR.  */
-  YYPOPSTACK (yylen);
-  yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
-  yystate = *yyssp;
-  goto yyerrlab1;
-
-
-/*-------------------------------------------------------------.
-| yyerrlab1 -- common code for both syntax error and YYERROR.  |
-`-------------------------------------------------------------*/
-yyerrlab1:
-  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
-
-  for (;;)
-    {
-      yyn = yypact[yystate];
-      if (yyn != YYPACT_NINF)
-	{
-	  yyn += YYTERROR;
-	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-	    {
-	      yyn = yytable[yyn];
-	      if (0 < yyn)
-		break;
-	    }
-	}
-
-      /* Pop the current state because it cannot handle the error token.  */
-      if (yyssp == yyss)
+      /* return failure if at end of input */
+      if (yychar == YYEOF)
 	YYABORT;
 
+#if YYDEBUG != 0
+      if (yydebug)
+	fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
+#endif
 
-      yydestruct ("Error: popping",
-		  yystos[yystate], yyvsp);
-      YYPOPSTACK (1);
-      yystate = *yyssp;
-      YY_STACK_PRINT (yyss, yyssp);
+      yychar = YYEMPTY;
     }
 
+  /* 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;
-
-
-  /* Shift the error token.  */
-  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+#ifdef YYLSP_NEEDED
+  *++yylsp = yylloc;
+#endif
 
   yystate = yyn;
   goto yynewstate;
 
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here.  |
-`-------------------------------------*/
-yyacceptlab:
-  yyresult = 0;
-  goto yyreturn;
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here.  |
-`-----------------------------------*/
-yyabortlab:
-  yyresult = 1;
-  goto yyreturn;
-
-#ifndef yyoverflow
-/*-------------------------------------------------.
-| yyexhaustedlab -- memory exhaustion comes here.  |
-`-------------------------------------------------*/
-yyexhaustedlab:
-  yyerror (YY_("memory exhausted"));
-  yyresult = 2;
-  /* Fall through.  */
-#endif
-
-yyreturn:
-  if (yychar != YYEOF && yychar != YYEMPTY)
-     yydestruct ("Cleanup: discarding lookahead",
-		 yytoken, &yylval);
-  /* Do not reclaim the symbols of the rule which action triggered
-     this YYABORT or YYACCEPT.  */
-  YYPOPSTACK (yylen);
-  YY_STACK_PRINT (yyss, yyssp);
-  while (yyssp != yyss)
+ yyacceptlab:
+  /* YYACCEPT comes here.  */
+  if (yyfree_stacks)
     {
-      yydestruct ("Cleanup: popping",
-		  yystos[*yyssp], yyvsp);
-      YYPOPSTACK (1);
+      free (yyss);
+      free (yyvs);
+#ifdef YYLSP_NEEDED
+      free (yyls);
+#endif
     }
-#ifndef yyoverflow
-  if (yyss != yyssa)
-    YYSTACK_FREE (yyss);
+  return 0;
+
+ yyabortlab:
+  /* YYABORT comes here.  */
+  if (yyfree_stacks)
+    {
+      free (yyss);
+      free (yyvs);
+#ifdef YYLSP_NEEDED
+      free (yyls);
 #endif
-#if YYERROR_VERBOSE
-  if (yymsg != yymsgbuf)
-    YYSTACK_FREE (yymsg);
-#endif
-  /* Make sure YYID is used.  */
-  return YYID (yyresult);
+    }
+  return 1;
 }
-
-
-#line 3146 "/Users/scottm/play/llvm-trunk/lib/AsmParser/llvmAsmParser.y"
+#line 3132 "/Users/clamb/Documents/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
 
 
 // common code from the two 'RunVMAsmParser' functions
@@ -6644,4 +5507,3 @@
   GenerateError(errMsg);
   return 0;
 }
-
