diff --git a/lib/AsmParser/llvmAsmParser.cpp.cvs b/lib/AsmParser/llvmAsmParser.cpp.cvs
index 41bf3b2..e1290c1 100644
--- a/lib/AsmParser/llvmAsmParser.cpp.cvs
+++ b/lib/AsmParser/llvmAsmParser.cpp.cvs
@@ -1,356 +1,152 @@
-/* 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/sabre/cvs/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	LABEL	268
+#define	TYPE	269
+#define	LOCALVAR	270
+#define	GLOBALVAR	271
+#define	LABELSTR	272
+#define	STRINGCONSTANT	273
+#define	ATSTRINGCONSTANT	274
+#define	ZEROINITIALIZER	275
+#define	TRUETOK	276
+#define	FALSETOK	277
+#define	BEGINTOK	278
+#define	ENDTOK	279
+#define	DECLARE	280
+#define	DEFINE	281
+#define	GLOBAL	282
+#define	CONSTANT	283
+#define	SECTION	284
+#define	ALIAS	285
+#define	VOLATILE	286
+#define	THREAD_LOCAL	287
+#define	TO	288
+#define	DOTDOTDOT	289
+#define	NULL_TOK	290
+#define	UNDEF	291
+#define	INTERNAL	292
+#define	LINKONCE	293
+#define	WEAK	294
+#define	APPENDING	295
+#define	DLLIMPORT	296
+#define	DLLEXPORT	297
+#define	EXTERN_WEAK	298
+#define	OPAQUE	299
+#define	EXTERNAL	300
+#define	TARGET	301
+#define	TRIPLE	302
+#define	ALIGN	303
+#define	DEPLIBS	304
+#define	CALL	305
+#define	TAIL	306
+#define	ASM_TOK	307
+#define	MODULE	308
+#define	SIDEEFFECT	309
+#define	CC_TOK	310
+#define	CCC_TOK	311
+#define	FASTCC_TOK	312
+#define	COLDCC_TOK	313
+#define	X86_STDCALLCC_TOK	314
+#define	X86_FASTCALLCC_TOK	315
+#define	DATALAYOUT	316
+#define	RET	317
+#define	BR	318
+#define	SWITCH	319
+#define	INVOKE	320
+#define	UNWIND	321
+#define	UNREACHABLE	322
+#define	ADD	323
+#define	SUB	324
+#define	MUL	325
+#define	UDIV	326
+#define	SDIV	327
+#define	FDIV	328
+#define	UREM	329
+#define	SREM	330
+#define	FREM	331
+#define	AND	332
+#define	OR	333
+#define	XOR	334
+#define	SHL	335
+#define	LSHR	336
+#define	ASHR	337
+#define	ICMP	338
+#define	FCMP	339
+#define	EQ	340
+#define	NE	341
+#define	SLT	342
+#define	SGT	343
+#define	SLE	344
+#define	SGE	345
+#define	ULT	346
+#define	UGT	347
+#define	ULE	348
+#define	UGE	349
+#define	OEQ	350
+#define	ONE	351
+#define	OLT	352
+#define	OGT	353
+#define	OLE	354
+#define	OGE	355
+#define	ORD	356
+#define	UNO	357
+#define	UEQ	358
+#define	UNE	359
+#define	MALLOC	360
+#define	ALLOCA	361
+#define	FREE	362
+#define	LOAD	363
+#define	STORE	364
+#define	GETELEMENTPTR	365
+#define	TRUNC	366
+#define	ZEXT	367
+#define	SEXT	368
+#define	FPTRUNC	369
+#define	FPEXT	370
+#define	BITCAST	371
+#define	UITOFP	372
+#define	SITOFP	373
+#define	FPTOUI	374
+#define	FPTOSI	375
+#define	INTTOPTR	376
+#define	PTRTOINT	377
+#define	PHI_TOK	378
+#define	SELECT	379
+#define	VAARG	380
+#define	EXTRACTELEMENT	381
+#define	INSERTELEMENT	382
+#define	SHUFFLEVECTOR	383
+#define	NORETURN	384
+#define	INREG	385
+#define	SRET	386
+#define	NOUNWIND	387
+#define	DEFAULT	388
+#define	HIDDEN	389
+#define	PROTECTED	390
 
-
-/* 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,
-     LABEL = 269,
-     TYPE = 270,
-     LOCALVAR = 271,
-     GLOBALVAR = 272,
-     LABELSTR = 273,
-     STRINGCONSTANT = 274,
-     ATSTRINGCONSTANT = 275,
-     ZEROINITIALIZER = 276,
-     TRUETOK = 277,
-     FALSETOK = 278,
-     BEGINTOK = 279,
-     ENDTOK = 280,
-     DECLARE = 281,
-     DEFINE = 282,
-     GLOBAL = 283,
-     CONSTANT = 284,
-     SECTION = 285,
-     ALIAS = 286,
-     VOLATILE = 287,
-     THREAD_LOCAL = 288,
-     TO = 289,
-     DOTDOTDOT = 290,
-     NULL_TOK = 291,
-     UNDEF = 292,
-     INTERNAL = 293,
-     LINKONCE = 294,
-     WEAK = 295,
-     APPENDING = 296,
-     DLLIMPORT = 297,
-     DLLEXPORT = 298,
-     EXTERN_WEAK = 299,
-     OPAQUE = 300,
-     EXTERNAL = 301,
-     TARGET = 302,
-     TRIPLE = 303,
-     ALIGN = 304,
-     DEPLIBS = 305,
-     CALL = 306,
-     TAIL = 307,
-     ASM_TOK = 308,
-     MODULE = 309,
-     SIDEEFFECT = 310,
-     CC_TOK = 311,
-     CCC_TOK = 312,
-     FASTCC_TOK = 313,
-     COLDCC_TOK = 314,
-     X86_STDCALLCC_TOK = 315,
-     X86_FASTCALLCC_TOK = 316,
-     DATALAYOUT = 317,
-     RET = 318,
-     BR = 319,
-     SWITCH = 320,
-     INVOKE = 321,
-     UNWIND = 322,
-     UNREACHABLE = 323,
-     ADD = 324,
-     SUB = 325,
-     MUL = 326,
-     UDIV = 327,
-     SDIV = 328,
-     FDIV = 329,
-     UREM = 330,
-     SREM = 331,
-     FREM = 332,
-     AND = 333,
-     OR = 334,
-     XOR = 335,
-     SHL = 336,
-     LSHR = 337,
-     ASHR = 338,
-     ICMP = 339,
-     FCMP = 340,
-     EQ = 341,
-     NE = 342,
-     SLT = 343,
-     SGT = 344,
-     SLE = 345,
-     SGE = 346,
-     ULT = 347,
-     UGT = 348,
-     ULE = 349,
-     UGE = 350,
-     OEQ = 351,
-     ONE = 352,
-     OLT = 353,
-     OGT = 354,
-     OLE = 355,
-     OGE = 356,
-     ORD = 357,
-     UNO = 358,
-     UEQ = 359,
-     UNE = 360,
-     MALLOC = 361,
-     ALLOCA = 362,
-     FREE = 363,
-     LOAD = 364,
-     STORE = 365,
-     GETELEMENTPTR = 366,
-     TRUNC = 367,
-     ZEXT = 368,
-     SEXT = 369,
-     FPTRUNC = 370,
-     FPEXT = 371,
-     BITCAST = 372,
-     UITOFP = 373,
-     SITOFP = 374,
-     FPTOUI = 375,
-     FPTOSI = 376,
-     INTTOPTR = 377,
-     PTRTOINT = 378,
-     PHI_TOK = 379,
-     SELECT = 380,
-     VAARG = 381,
-     EXTRACTELEMENT = 382,
-     INSERTELEMENT = 383,
-     SHUFFLEVECTOR = 384,
-     NORETURN = 385,
-     INREG = 386,
-     SRET = 387,
-     NOUNWIND = 388,
-     DEFAULT = 389,
-     HIDDEN = 390,
-     PROTECTED = 391
-   };
-#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 LABEL 269
-#define TYPE 270
-#define LOCALVAR 271
-#define GLOBALVAR 272
-#define LABELSTR 273
-#define STRINGCONSTANT 274
-#define ATSTRINGCONSTANT 275
-#define ZEROINITIALIZER 276
-#define TRUETOK 277
-#define FALSETOK 278
-#define BEGINTOK 279
-#define ENDTOK 280
-#define DECLARE 281
-#define DEFINE 282
-#define GLOBAL 283
-#define CONSTANT 284
-#define SECTION 285
-#define ALIAS 286
-#define VOLATILE 287
-#define THREAD_LOCAL 288
-#define TO 289
-#define DOTDOTDOT 290
-#define NULL_TOK 291
-#define UNDEF 292
-#define INTERNAL 293
-#define LINKONCE 294
-#define WEAK 295
-#define APPENDING 296
-#define DLLIMPORT 297
-#define DLLEXPORT 298
-#define EXTERN_WEAK 299
-#define OPAQUE 300
-#define EXTERNAL 301
-#define TARGET 302
-#define TRIPLE 303
-#define ALIGN 304
-#define DEPLIBS 305
-#define CALL 306
-#define TAIL 307
-#define ASM_TOK 308
-#define MODULE 309
-#define SIDEEFFECT 310
-#define CC_TOK 311
-#define CCC_TOK 312
-#define FASTCC_TOK 313
-#define COLDCC_TOK 314
-#define X86_STDCALLCC_TOK 315
-#define X86_FASTCALLCC_TOK 316
-#define DATALAYOUT 317
-#define RET 318
-#define BR 319
-#define SWITCH 320
-#define INVOKE 321
-#define UNWIND 322
-#define UNREACHABLE 323
-#define ADD 324
-#define SUB 325
-#define MUL 326
-#define UDIV 327
-#define SDIV 328
-#define FDIV 329
-#define UREM 330
-#define SREM 331
-#define FREM 332
-#define AND 333
-#define OR 334
-#define XOR 335
-#define SHL 336
-#define LSHR 337
-#define ASHR 338
-#define ICMP 339
-#define FCMP 340
-#define EQ 341
-#define NE 342
-#define SLT 343
-#define SGT 344
-#define SLE 345
-#define SGE 346
-#define ULT 347
-#define UGT 348
-#define ULE 349
-#define UGE 350
-#define OEQ 351
-#define ONE 352
-#define OLT 353
-#define OGT 354
-#define OLE 355
-#define OGE 356
-#define ORD 357
-#define UNO 358
-#define UEQ 359
-#define UNE 360
-#define MALLOC 361
-#define ALLOCA 362
-#define FREE 363
-#define LOAD 364
-#define STORE 365
-#define GETELEMENTPTR 366
-#define TRUNC 367
-#define ZEXT 368
-#define SEXT 369
-#define FPTRUNC 370
-#define FPEXT 371
-#define BITCAST 372
-#define UITOFP 373
-#define SITOFP 374
-#define FPTOUI 375
-#define FPTOSI 376
-#define INTTOPTR 377
-#define PTRTOINT 378
-#define PHI_TOK 379
-#define SELECT 380
-#define VAARG 381
-#define EXTRACTELEMENT 382
-#define INSERTELEMENT 383
-#define SHUFFLEVECTOR 384
-#define NORETURN 385
-#define INREG 386
-#define SRET 387
-#define NOUNWIND 388
-#define DEFAULT 389
-#define HIDDEN 390
-#define PROTECTED 391
-
-
-
-
-/* Copy the first part of user declarations.  */
-#line 14 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 14 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 
 #include "ParserInternals.h"
 #include "llvm/CallingConv.h"
@@ -1291,29 +1087,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 955 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-{
+#line 955 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+typedef union {
   llvm::Module                           *ModuleVal;
   llvm::Function                         *FunctionVal;
   llvm::BasicBlock                       *BasicBlockVal;
@@ -1358,1769 +1133,1084 @@
   llvm::Instruction::OtherOps       OtherOpVal;
   llvm::ICmpInst::Predicate         IPredicate;
   llvm::FCmpInst::Predicate         FPredicate;
-}
-/* Line 187 of yacc.c.  */
-#line 1364 "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		581
+#define	YYFLAG		-32768
+#define	YYNTBASE	151
 
+#define YYTRANSLATE(x) ((unsigned)(x) <= 390 ? yytranslate[x] : 232)
 
-/* Line 216 of yacc.c.  */
-#line 1377 "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,   141,
+   142,   139,     2,   138,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,   146,
+   137,   147,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+   143,   140,   145,     2,     2,     2,     2,     2,   150,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,   144,
+     2,     2,   148,     2,   149,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     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
+};
 
-#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,
+   119,   122,   123,   125,   127,   129,   130,   133,   135,   137,
+   139,   141,   143,   145,   147,   149,   150,   152,   154,   156,
+   157,   159,   161,   162,   164,   166,   168,   170,   171,   173,
+   175,   176,   178,   180,   182,   184,   186,   189,   191,   193,
+   195,   197,   198,   201,   203,   205,   207,   208,   211,   212,
+   215,   216,   220,   223,   224,   226,   227,   231,   233,   236,
+   238,   240,   242,   244,   246,   248,   251,   253,   256,   262,
+   268,   274,   280,   284,   287,   293,   298,   301,   303,   305,
+   307,   311,   313,   317,   319,   320,   322,   326,   331,   335,
+   339,   344,   349,   353,   360,   366,   369,   372,   375,   378,
+   381,   384,   387,   390,   393,   396,   399,   402,   409,   415,
+   424,   431,   438,   446,   454,   461,   470,   479,   483,   485,
+   487,   489,   491,   492,   495,   502,   504,   505,   507,   510,
+   511,   515,   516,   520,   524,   528,   532,   533,   541,   542,
+   551,   552,   561,   567,   570,   574,   576,   580,   584,   588,
+   592,   594,   595,   601,   605,   607,   611,   613,   614,   624,
+   626,   628,   633,   635,   637,   640,   644,   645,   647,   649,
+   651,   653,   655,   657,   659,   661,   663,   667,   669,   675,
+   677,   679,   681,   683,   685,   687,   690,   693,   696,   700,
+   703,   704,   706,   709,   712,   716,   726,   736,   745,   760,
+   762,   764,   771,   777,   780,   787,   795,   799,   805,   806,
+   807,   811,   814,   816,   822,   828,   835,   842,   847,   854,
+   859,   864,   871,   878,   881,   890,   892,   894,   895,   899,
+   906,   910,   917,   920,   926,   934
+};
+
+static const short yyrhs[] = {    69,
+     0,    70,     0,    71,     0,    72,     0,    73,     0,    74,
+     0,    75,     0,    76,     0,    77,     0,    81,     0,    82,
+     0,    83,     0,    78,     0,    79,     0,    80,     0,   112,
+     0,   113,     0,   114,     0,   115,     0,   116,     0,   117,
+     0,   118,     0,   119,     0,   120,     0,   121,     0,   122,
+     0,   123,     0,    86,     0,    87,     0,    88,     0,    89,
+     0,    90,     0,    91,     0,    92,     0,    93,     0,    94,
+     0,    95,     0,    96,     0,    97,     0,    98,     0,    99,
+     0,   100,     0,   101,     0,   102,     0,   103,     0,   104,
+     0,   105,     0,    92,     0,    93,     0,    94,     0,    95,
+     0,    22,     0,    23,     0,    11,     0,    12,     0,    13,
+     0,    16,     0,    19,     0,   158,     0,     0,   158,   137,
+     0,     0,    17,     0,    20,     0,   163,     0,     0,   161,
+   137,     0,    38,     0,    40,     0,    39,     0,    41,     0,
+    43,     0,    42,     0,    44,     0,    46,     0,     0,   134,
+     0,   135,     0,   136,     0,     0,    42,     0,    44,     0,
+     0,    38,     0,    39,     0,    40,     0,    43,     0,     0,
+    40,     0,    38,     0,     0,    57,     0,    58,     0,    59,
+     0,    60,     0,    61,     0,    56,     4,     0,   113,     0,
+   114,     0,   131,     0,   132,     0,     0,   172,   171,     0,
+   130,     0,   133,     0,   171,     0,     0,   174,   173,     0,
+     0,    49,     4,     0,     0,   138,    49,     4,     0,    30,
+    19,     0,     0,   177,     0,     0,   138,   180,   179,     0,
+   177,     0,    49,     4,     0,    11,     0,    12,     0,    13,
+     0,    14,     0,    45,     0,   181,     0,   182,   139,     0,
+   216,     0,   140,     4,     0,   182,   141,   186,   142,   174,
+     0,    10,   141,   186,   142,   174,     0,   143,     4,   144,
+   182,   145,     0,   146,     4,   144,   182,   147,     0,   148,
+   187,   149,     0,   148,   149,     0,   146,   148,   187,   149,
+   147,     0,   146,   148,   149,   147,     0,   182,   172,     0,
+   182,     0,    10,     0,   183,     0,   185,   138,   183,     0,
+   185,     0,   185,   138,    35,     0,    35,     0,     0,   182,
+     0,   187,   138,   182,     0,   182,   143,   190,   145,     0,
+   182,   143,   145,     0,   182,   150,    19,     0,   182,   146,
+   190,   147,     0,   182,   148,   190,   149,     0,   182,   148,
+   149,     0,   182,   146,   148,   190,   149,   147,     0,   182,
+   146,   148,   149,   147,     0,   182,    36,     0,   182,    37,
+     0,   182,   216,     0,   182,   189,     0,   182,    21,     0,
+   156,     3,     0,   156,     5,     0,   156,     4,     0,   156,
+     6,     0,    11,    22,     0,    11,    23,     0,   157,     9,
+     0,   153,   141,   188,    34,   182,   142,     0,   111,   141,
+   188,   227,   142,     0,   125,   141,   188,   138,   188,   138,
+   188,   142,     0,   151,   141,   188,   138,   188,   142,     0,
+   152,   141,   188,   138,   188,   142,     0,    84,   154,   141,
+   188,   138,   188,   142,     0,    85,   155,   141,   188,   138,
+   188,   142,     0,   127,   141,   188,   138,   188,   142,     0,
+   128,   141,   188,   138,   188,   138,   188,   142,     0,   129,
+   141,   188,   138,   188,   138,   188,   142,     0,   190,   138,
+   188,     0,   188,     0,    28,     0,    29,     0,    33,     0,
+     0,   184,   216,     0,   117,   141,   193,    34,   182,   142,
+     0,   195,     0,     0,   196,     0,   195,   196,     0,     0,
+    27,   197,   212,     0,     0,    26,   198,   213,     0,    54,
+    53,   202,     0,   160,    15,   182,     0,   160,    15,    10,
+     0,     0,   162,   166,   192,   191,   188,   199,   179,     0,
+     0,   162,   164,   166,   192,   191,   188,   200,   179,     0,
+     0,   162,   165,   166,   192,   191,   182,   201,   179,     0,
+   162,   166,    31,   169,   193,     0,    47,   203,     0,    50,
+   137,   204,     0,    19,     0,    48,   137,    19,     0,    62,
+   137,    19,     0,   143,   205,   145,     0,   205,   138,    19,
+     0,    19,     0,     0,   206,   138,   182,   172,   159,     0,
+   182,   172,   159,     0,   206,     0,   206,   138,    35,     0,
+    35,     0,     0,   170,   184,   161,   141,   207,   142,   174,
+   178,   175,     0,    24,     0,   148,     0,   168,   166,   208,
+   209,     0,    25,     0,   149,     0,   219,   211,     0,   167,
+   166,   208,     0,     0,    55,     0,     3,     0,     4,     0,
+     9,     0,    22,     0,    23,     0,    36,     0,    37,     0,
+    21,     0,   146,   190,   147,     0,   189,     0,    53,   214,
+    19,   138,    19,     0,     7,     0,     8,     0,   158,     0,
+   161,     0,   216,     0,   215,     0,   182,   217,     0,   219,
+   220,     0,   210,   220,     0,   221,   160,   222,     0,   221,
+   224,     0,     0,    18,     0,    63,   218,     0,    63,    10,
+     0,    64,    14,   217,     0,    64,    11,   217,   138,    14,
+   217,   138,    14,   217,     0,    65,   156,   217,   138,    14,
+   217,   143,   223,   145,     0,    65,   156,   217,   138,    14,
+   217,   143,   145,     0,    66,   170,   184,   217,   141,   226,
+   142,   174,    34,    14,   217,    67,    14,   217,     0,    67,
+     0,    68,     0,   223,   156,   215,   138,    14,   217,     0,
+   156,   215,   138,    14,   217,     0,   160,   229,     0,   182,
+   143,   217,   138,   217,   145,     0,   225,   138,   143,   217,
+   138,   217,   145,     0,   182,   217,   172,     0,   226,   138,
+   182,   217,   172,     0,     0,     0,   227,   138,   218,     0,
+    52,    51,     0,    51,     0,   151,   182,   217,   138,   217,
+     0,   152,   182,   217,   138,   217,     0,    84,   154,   182,
+   217,   138,   217,     0,    85,   155,   182,   217,   138,   217,
+     0,   153,   218,    34,   182,     0,   125,   218,   138,   218,
+   138,   218,     0,   126,   218,   138,   182,     0,   127,   218,
+   138,   218,     0,   128,   218,   138,   218,   138,   218,     0,
+   129,   218,   138,   218,   138,   218,     0,   124,   225,     0,
+   228,   170,   184,   217,   141,   226,   142,   174,     0,   231,
+     0,    32,     0,     0,   106,   182,   176,     0,   106,   182,
+   138,    11,   217,   176,     0,   107,   182,   176,     0,   107,
+   182,   138,    11,   217,   176,     0,   108,   218,     0,   230,
+   109,   182,   217,   176,     0,   230,   110,   218,   138,   182,
+   217,   176,     0,   111,   182,   217,   227,     0
+};
+
 #endif
 
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
+#if YYDEBUG != 0
+static const short yyrline[] = { 0,
+  1111,  1111,  1111,  1111,  1111,  1111,  1111,  1111,  1111,  1112,
+  1112,  1112,  1112,  1112,  1112,  1113,  1113,  1113,  1113,  1113,
+  1113,  1113,  1114,  1114,  1114,  1114,  1114,  1117,  1117,  1118,
+  1118,  1119,  1119,  1120,  1120,  1121,  1121,  1125,  1125,  1126,
+  1126,  1127,  1127,  1128,  1128,  1129,  1129,  1130,  1130,  1131,
+  1131,  1132,  1133,  1138,  1139,  1139,  1141,  1141,  1142,  1142,
+  1146,  1150,  1155,  1155,  1157,  1158,  1163,  1169,  1170,  1171,
+  1172,  1173,  1177,  1178,  1179,  1183,  1184,  1185,  1186,  1190,
+  1191,  1192,  1196,  1197,  1198,  1199,  1200,  1204,  1205,  1206,
+  1209,  1209,  1210,  1211,  1212,  1213,  1214,  1222,  1223,  1224,
+  1225,  1228,  1229,  1234,  1235,  1236,  1239,  1240,  1247,  1247,
+  1254,  1254,  1263,  1271,  1271,  1277,  1277,  1279,  1284,  1297,
+  1297,  1297,  1297,  1300,  1304,  1308,  1315,  1320,  1328,  1358,
+  1389,  1394,  1406,  1416,  1420,  1430,  1437,  1444,  1451,  1456,
+  1461,  1468,  1469,  1476,  1483,  1491,  1497,  1509,  1537,  1553,
+  1582,  1610,  1636,  1656,  1682,  1702,  1714,  1721,  1787,  1797,
+  1807,  1813,  1823,  1829,  1839,  1844,  1849,  1857,  1869,  1891,
+  1899,  1905,  1916,  1921,  1926,  1932,  1938,  1947,  1951,  1959,
+  1959,  1962,  1962,  1965,  1976,  1997,  2002,  2010,  2011,  2015,
+  2015,  2019,  2019,  2022,  2025,  2049,  2060,  2067,  2070,  2076,
+  2079,  2086,  2090,  2105,  2108,  2114,  2127,  2131,  2136,  2138,
+  2143,  2148,  2157,  2167,  2178,  2182,  2191,  2200,  2205,  2327,
+  2327,  2329,  2338,  2338,  2340,  2345,  2357,  2361,  2366,  2370,
+  2374,  2378,  2382,  2386,  2390,  2394,  2398,  2423,  2427,  2441,
+  2445,  2449,  2453,  2459,  2459,  2465,  2474,  2478,  2487,  2496,
+  2505,  2509,  2514,  2518,  2522,  2527,  2537,  2556,  2565,  2645,
+  2649,  2656,  2667,  2680,  2690,  2701,  2711,  2720,  2729,  2732,
+  2733,  2740,  2744,  2749,  2770,  2787,  2801,  2815,  2827,  2835,
+  2842,  2848,  2854,  2860,  2875,  2960,  2965,  2969,  2976,  2983,
+  2991,  2998,  3006,  3014,  3028,  3045
+};
+#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","LABEL","TYPE","LOCALVAR","GLOBALVAR","LABELSTR",
+"STRINGCONSTANT","ATSTRINGCONSTANT","ZEROINITIALIZER","TRUETOK","FALSETOK","BEGINTOK",
+"ENDTOK","DECLARE","DEFINE","GLOBAL","CONSTANT","SECTION","ALIAS","VOLATILE",
+"THREAD_LOCAL","TO","DOTDOTDOT","NULL_TOK","UNDEF","INTERNAL","LINKONCE","WEAK",
+"APPENDING","DLLIMPORT","DLLEXPORT","EXTERN_WEAK","OPAQUE","EXTERNAL","TARGET",
+"TRIPLE","ALIGN","DEPLIBS","CALL","TAIL","ASM_TOK","MODULE","SIDEEFFECT","CC_TOK",
+"CCC_TOK","FASTCC_TOK","COLDCC_TOK","X86_STDCALLCC_TOK","X86_FASTCALLCC_TOK",
+"DATALAYOUT","RET","BR","SWITCH","INVOKE","UNWIND","UNREACHABLE","ADD","SUB",
+"MUL","UDIV","SDIV","FDIV","UREM","SREM","FREM","AND","OR","XOR","SHL","LSHR",
+"ASHR","ICMP","FCMP","EQ","NE","SLT","SGT","SLE","SGE","ULT","UGT","ULE","UGE",
+"OEQ","ONE","OLT","OGT","OLE","OGE","ORD","UNO","UEQ","UNE","MALLOC","ALLOCA",
+"FREE","LOAD","STORE","GETELEMENTPTR","TRUNC","ZEXT","SEXT","FPTRUNC","FPEXT",
+"BITCAST","UITOFP","SITOFP","FPTOUI","FPTOSI","INTTOPTR","PTRTOINT","PHI_TOK",
+"SELECT","VAARG","EXTRACTELEMENT","INSERTELEMENT","SHUFFLEVECTOR","NORETURN",
+"INREG","SRET","NOUNWIND","DEFAULT","HIDDEN","PROTECTED","'='","','","'*'","'\\\\'",
+"'('","')'","'['","'x'","']'","'<'","'>'","'{'","'}'","'c'","ArithmeticOps",
+"LogicalOps","CastOps","IPredicates","FPredicates","IntType","FPType","LocalName",
+"OptLocalName","OptLocalAssign","GlobalName","OptGlobalAssign","GlobalAssign",
+"GVInternalLinkage","GVExternalLinkage","GVVisibilityStyle","FunctionDeclareLinkage",
+"FunctionDefineLinkage","AliasLinkage","OptCallingConv","ParamAttr","OptParamAttrs",
+"FuncAttr","OptFuncAttrs","OptAlign","OptCAlign","SectionString","OptSection",
+"GlobalVarAttributes","GlobalVarAttribute","PrimType","Types","ArgType","ResultTypes",
+"ArgTypeList","ArgTypeListI","TypeListI","ConstVal","ConstExpr","ConstVector",
+"GlobalType","ThreadLocal","AliaseeRef","Module","DefinitionList","Definition",
+"@1","@2","@3","@4","@5","AsmBlock","TargetDefinition","LibrariesDefinition",
+"LibList","ArgListH","ArgList","FunctionHeaderH","BEGIN","FunctionHeader","END",
+"Function","FunctionProto","OptSideEffect","ConstValueRef","SymbolicValueRef",
+"ValueRef","ResolvedVal","BasicBlockList","BasicBlock","InstructionList","BBTerminatorInst",
+"JumpTable","Inst","PHIList","ValueRefList","IndexList","OptTailCall","InstVal",
+"OptVolatile","MemoryInst", NULL
+};
+#endif
+
+static const short yyr1[] = {     0,
+   151,   151,   151,   151,   151,   151,   151,   151,   151,   152,
+   152,   152,   152,   152,   152,   153,   153,   153,   153,   153,
+   153,   153,   153,   153,   153,   153,   153,   154,   154,   154,
+   154,   154,   154,   154,   154,   154,   154,   155,   155,   155,
+   155,   155,   155,   155,   155,   155,   155,   155,   155,   155,
+   155,   155,   155,   156,   157,   157,   158,   158,   159,   159,
+   160,   160,   161,   161,   162,   162,   163,   164,   164,   164,
+   164,   164,   165,   165,   165,   166,   166,   166,   166,   167,
+   167,   167,   168,   168,   168,   168,   168,   169,   169,   169,
+   170,   170,   170,   170,   170,   170,   170,   171,   171,   171,
+   171,   172,   172,   173,   173,   173,   174,   174,   175,   175,
+   176,   176,   177,   178,   178,   179,   179,   180,   180,   181,
+   181,   181,   181,   182,   182,   182,   182,   182,   182,   182,
+   182,   182,   182,   182,   182,   182,   183,   184,   184,   185,
+   185,   186,   186,   186,   186,   187,   187,   188,   188,   188,
+   188,   188,   188,   188,   188,   188,   188,   188,   188,   188,
+   188,   188,   188,   188,   188,   188,   188,   189,   189,   189,
+   189,   189,   189,   189,   189,   189,   189,   190,   190,   191,
+   191,   192,   192,   193,   193,   194,   194,   195,   195,   197,
+   196,   198,   196,   196,   196,   196,   199,   196,   200,   196,
+   201,   196,   196,   196,   196,   202,   203,   203,   204,   205,
+   205,   205,   206,   206,   207,   207,   207,   207,   208,   209,
+   209,   210,   211,   211,   212,   213,   214,   214,   215,   215,
+   215,   215,   215,   215,   215,   215,   215,   215,   215,   216,
+   216,   216,   216,   217,   217,   218,   219,   219,   220,   221,
+   221,   221,   222,   222,   222,   222,   222,   222,   222,   222,
+   222,   223,   223,   224,   225,   225,   226,   226,   226,   227,
+   227,   228,   228,   229,   229,   229,   229,   229,   229,   229,
+   229,   229,   229,   229,   229,   229,   230,   230,   231,   231,
+   231,   231,   231,   231,   231,   231
+};
+
+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,     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,     0,     2,     1,     1,     1,     0,     2,     0,     2,
+     0,     3,     2,     0,     1,     0,     3,     1,     2,     1,
+     1,     1,     1,     1,     1,     2,     1,     2,     5,     5,
+     5,     5,     3,     2,     5,     4,     2,     1,     1,     1,
+     3,     1,     3,     1,     0,     1,     3,     4,     3,     3,
+     4,     4,     3,     6,     5,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     6,     5,     8,
+     6,     6,     7,     7,     6,     8,     8,     3,     1,     1,
+     1,     1,     0,     2,     6,     1,     0,     1,     2,     0,
+     3,     0,     3,     3,     3,     3,     0,     7,     0,     8,
+     0,     8,     5,     2,     3,     1,     3,     3,     3,     3,
+     1,     0,     5,     3,     1,     3,     1,     0,     9,     1,
+     1,     4,     1,     1,     2,     3,     0,     1,     1,     1,
+     1,     1,     1,     1,     1,     1,     3,     1,     5,     1,
+     1,     1,     1,     1,     1,     2,     2,     2,     3,     2,
+     0,     1,     2,     2,     3,     9,     9,     8,    14,     1,
+     1,     6,     5,     2,     6,     7,     3,     5,     0,     0,
+     3,     2,     1,     5,     5,     6,     6,     4,     6,     4,
+     4,     6,     6,     2,     8,     1,     1,     0,     3,     6,
+     3,     6,     2,     5,     7,     4
+};
+
+static const short yydefact[] = {    66,
+    57,    63,    58,    64,   192,   190,     0,     0,     0,     0,
+     0,     0,    76,    65,    66,   188,    80,    83,     0,     0,
+   204,     0,     0,    61,     0,    67,    68,    70,    69,    71,
+    73,    72,    74,    75,    77,    78,    79,    76,    76,   183,
+   189,    81,    82,    76,   193,    84,    85,    86,    87,    76,
+   251,   191,   251,     0,     0,   212,   205,   206,   194,   240,
+   241,   196,   120,   121,   122,   123,   124,     0,     0,     0,
+     0,   242,   243,   125,   195,   127,   183,   183,    88,   182,
+     0,    91,    91,   252,   248,    62,   223,   224,   225,   247,
+   207,   208,   211,     0,   145,   128,     0,     0,     0,     0,
+   134,   146,     0,   126,   145,     0,     0,    90,    89,     0,
+   180,   181,     0,     0,    92,    93,    94,    95,    96,     0,
+   226,     0,   288,   250,     0,   209,   144,   102,   140,   142,
+     0,     0,     0,     0,     0,     0,   133,     0,     0,     0,
+   139,     0,   138,     0,   203,   120,   121,   122,     0,     0,
+     0,   197,    97,     0,   220,   221,   222,   287,   273,     0,
+     0,     0,     0,    91,   260,   261,     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,   249,    91,
+   264,     0,   286,   210,   137,     0,   107,     0,     0,   136,
+     0,   147,   107,   199,   201,     0,   184,   165,   166,   161,
+   163,   162,   164,   167,   160,   156,   157,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   159,   158,   116,     0,   272,   254,     0,   253,     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,   111,   111,   293,     0,     0,   284,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    98,
+    99,   100,   101,   103,   143,   141,   130,   131,   132,   135,
+   129,   116,   116,     0,     0,     0,     0,     0,     0,     0,
+     0,   149,   179,     0,     0,     0,   153,     0,   150,     0,
+     0,     0,     0,   198,   218,   229,   230,   231,   236,   232,
+   233,   234,   235,   227,     0,   238,   245,   244,   246,     0,
+   255,     0,     0,     0,     0,     0,   289,     0,   291,   270,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   104,   105,   106,   108,   200,   202,     0,
+     0,     0,   270,     0,     0,     0,     0,     0,   148,   134,
+   146,     0,   151,   152,     0,     0,     0,     0,     0,   118,
+   116,   217,   102,   215,     0,   228,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   296,     0,     0,     0,
+   280,   281,     0,     0,     0,     0,   278,     0,   111,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   178,   155,
+     0,     0,     0,     0,   113,   119,   117,    60,     0,   107,
+     0,   237,     0,     0,   269,     0,     0,   111,   112,   111,
+     0,     0,     0,     0,     0,     0,   274,   275,   269,     0,
+   294,     0,   185,     0,     0,   169,     0,     0,     0,     0,
+   154,     0,     0,     0,    59,   214,   216,   102,   114,     0,
+     0,     0,     0,     0,   276,   277,   290,   292,   271,     0,
+     0,   279,   282,   283,     0,   111,     0,     0,     0,   175,
+     0,     0,   171,   172,   168,    60,   115,   109,   239,     0,
+     0,   102,     0,   107,   265,     0,   107,   295,   173,   174,
+     0,     0,     0,   213,     0,   219,     0,   258,     0,     0,
+   267,     0,     0,   266,   285,   170,   176,   177,   110,   256,
+     0,   257,     0,   102,     0,     0,     0,   268,     0,     0,
+     0,     0,   263,     0,     0,   262,     0,   259,     0,     0,
+     0
+};
+
+static const short yydefgoto[] = {   249,
+   250,   251,   275,   292,   149,   150,    72,   496,    11,    73,
+    13,    14,    38,    39,    40,    44,    50,   110,   120,   314,
+   215,   387,   317,   546,   367,   410,   528,   344,   411,    74,
+   151,   129,   144,   130,   131,   103,   333,   356,   334,   113,
+    81,   145,   579,    15,    16,    18,    17,   254,   322,   323,
+    59,    21,    57,    94,   414,   415,   121,   157,    51,    89,
+    52,    45,   417,   357,    76,   359,   259,    53,    85,    86,
+   209,   550,   124,   298,   504,   427,   210,   211,   212,   213
+};
+
+static const short yypact[] = {    58,
+-32768,-32768,-32768,-32768,-32768,-32768,   -31,   -88,   100,   -74,
+   156,    -6,   492,-32768,   595,-32768,    78,   161,    76,    79,
+-32768,    99,   202,-32768,  1112,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,   147,   147,   191,
+-32768,-32768,-32768,   147,-32768,-32768,-32768,-32768,-32768,   147,
+   235,-32768,    37,   243,   256,   259,-32768,-32768,-32768,-32768,
+-32768,   150,-32768,-32768,-32768,-32768,-32768,   284,   300,     4,
+    26,-32768,-32768,-32768,   169,-32768,   287,   287,   293,-32768,
+   237,   199,   199,-32768,-32768,    95,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,   -81,   453,-32768,   181,   184,   198,   150,
+-32768,   169,   -97,-32768,   453,   237,   237,-32768,-32768,   956,
+-32768,-32768,  1148,   328,-32768,-32768,-32768,-32768,-32768,  1194,
+-32768,    -8,  1356,-32768,   315,-32768,-32768,   169,-32768,   204,
+   201,  1208,  1208,   208,   -82,  1208,-32768,   206,  1148,  1208,
+   150,   215,   169,   299,-32768,    96,   340,   354,   297,   355,
+   781,-32768,-32768,   125,-32768,-32768,-32768,-32768,-32768,   314,
+  1254,   162,   357,   199,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,   487,   467,  1208,  1208,  1208,  1208,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1208,
+  1208,  1208,  1208,  1208,  1208,  1208,  1208,  1208,-32768,   199,
+-32768,   187,-32768,-32768,   119,  1001,-32768,    10,    84,-32768,
+   223,   169,-32768,-32768,   169,   956,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,   487,   467,   234,
+   236,   238,   239,   240,  1037,  1270,   260,   359,   253,   261,
+   263,-32768,-32768,   246,   264,-32768,   150,   631,-32768,   759,
+   759,-32768,   759,  1194,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,  1208,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,  1208,   -45,   -35,-32768,   631,   170,   269,   273,   274,
+   275,   276,   278,   631,   631,   342,  1194,  1208,  1208,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,     2,-32768,-32768,-32768,
+     2,   246,   246,   363,   279,   280,  1148,  1148,  1148,  1148,
+  1148,-32768,-32768,   -50,   379,   -55,-32768,   -69,-32768,  1148,
+  1148,  1148,    30,-32768,  1052,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,   346,  1148,-32768,-32768,-32768,-32768,   281,
+-32768,   290,   759,   631,   631,    17,-32768,    19,-32768,-32768,
+   759,   282,  1208,  1208,  1208,  1208,  1208,   292,   296,  1208,
+   759,   631,   301,-32768,-32768,-32768,-32768,-32768,-32768,  1208,
+  1148,  1148,-32768,   303,   305,   306,   307,  1148,-32768,   288,
+   781,   -68,-32768,-32768,   308,   309,   404,   430,   446,-32768,
+   246,-32768,   169,   316,   313,-32768,   438,   -49,   445,   448,
+   327,   333,   336,   759,   471,   759,   343,   344,   759,   353,
+   169,-32768,   356,   358,   759,   759,   169,   339,   361,  1208,
+    49,   362,   364,    -1,  1148,  1148,  1148,  1148,-32768,-32768,
+   345,  1148,  1148,  1208,-32768,-32768,-32768,    16,  1098,-32768,
+   367,-32768,   759,   759,  1208,   759,   759,   361,-32768,   361,
+  1208,   759,   368,  1208,  1208,  1208,-32768,-32768,  1208,   452,
+-32768,   631,-32768,  1148,  1148,-32768,   369,   366,   371,   373,
+-32768,   370,   372,   182,-32768,-32768,-32768,   169,   106,   476,
+   375,   374,   631,    18,-32768,-32768,-32768,-32768,-32768,   352,
+   759,-32768,-32768,-32768,    60,   361,   376,   378,  1148,-32768,
+  1148,  1148,-32768,-32768,-32768,    16,-32768,   472,-32768,   509,
+    -2,-32768,  1208,-32768,-32768,   384,-32768,-32768,-32768,-32768,
+   382,   395,   397,-32768,   536,-32768,   759,-32768,   912,     1,
+   119,   631,   116,-32768,     2,-32768,-32768,-32768,-32768,-32768,
+   403,-32768,   912,-32768,   528,   529,   406,   119,   759,   759,
+   531,   480,-32768,   759,   535,-32768,   759,-32768,   554,   555,
+-32768
+};
+
+static const short yypgoto[] = {   433,
+   460,   461,   349,   351,  -162,-32768,     0,    65,   506,    11,
+-32768,-32768,-32768,-32768,    15,-32768,-32768,-32768,  -120,  -292,
+  -407,-32768,  -220,-32768,  -281,    98,-32768,  -272,-32768,-32768,
+   -23,   386,  -110,-32768,   493,   501,    31,  -147,  -228,   230,
+   262,   377,-32768,-32768,   590,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,   523,-32768,-32768,-32768,
+-32768,-32768,-32768,  -502,  -137,   122,  -181,-32768,   556,-32768,
+-32768,-32768,-32768,-32768,   128,   220,-32768,-32768,-32768,-32768
+};
+
+
+#define	YYLAST		1485
+
+
+static const short yytable[] = {    10,
+   263,    75,   321,   252,   295,   458,   227,    98,   262,   154,
+    12,   262,   369,   253,    10,   155,    19,   336,   338,   299,
+   300,   301,   302,   303,   386,    12,   306,   424,   386,   426,
+    20,     1,    60,    61,     3,   100,    63,    64,    65,    66,
+   136,     1,     2,   264,     3,     4,   561,   102,    22,   388,
+   389,   137,    77,    78,    84,   136,   125,  -187,    82,   408,
+   567,    87,    24,   126,    83,   425,   221,   425,   398,   398,
+    67,   128,   -62,     1,     2,   102,     3,     4,   409,   404,
+   451,   128,   398,     5,     6,    10,   143,   398,   398,   307,
+   526,   403,   366,   104,   399,   105,   143,   462,   -54,   -54,
+   -54,   -54,   368,   104,     7,   105,   402,     8,   218,   219,
+     1,     9,   222,     3,   310,   311,   225,   228,   229,    42,
+   358,    43,   358,   358,   551,   358,   418,   383,   310,   311,
+    26,   384,   312,   313,   385,   408,   471,   258,   457,   156,
+   486,     2,   548,   152,     4,   562,   312,   313,   104,   565,
+   105,    99,    23,   363,   318,   533,   568,   481,   358,   534,
+   293,   294,   258,   296,   255,    68,   358,   358,    69,   224,
+    25,    70,   260,    71,   101,   261,   297,   258,   258,   258,
+   258,   258,   304,   305,   258,    88,   507,   104,   508,   105,
+   483,   430,   128,   432,   433,   434,   381,   533,    46,    47,
+    48,   537,   143,    49,    60,    61,   386,   100,    63,    64,
+    65,    66,    54,     1,     2,    55,     3,     4,   310,   311,
+    58,    79,   104,    80,   105,   358,   358,   358,   310,   311,
+   319,   310,   311,   358,   538,   384,   312,   313,   385,   499,
+   143,    56,    67,   358,   358,   384,   312,   313,   385,   312,
+   313,   364,    84,   252,   114,   115,   116,   117,   118,   119,
+   386,    91,   386,   253,   111,   112,    60,    61,   365,   100,
+   146,   147,   148,    66,    92,     1,     2,    93,     3,     4,
+    35,    36,    37,   143,   382,   258,   358,    96,   358,   509,
+    95,   358,   512,   513,   514,   308,   309,   358,   358,   230,
+   231,   232,   233,    97,    67,    60,    61,   104,   104,   105,
+   105,   401,   371,   553,     1,     2,   555,     3,     4,    80,
+   104,   413,   105,   525,   132,   358,   358,   133,   358,   358,
+   108,   153,   109,   214,   358,   139,   140,    68,   106,   107,
+    69,   216,   217,    70,   358,    71,   134,   223,   -55,   258,
+   431,   258,   258,   258,   220,   226,   437,   393,   394,   395,
+   396,   397,   -56,   234,   256,   358,   441,   262,   549,   320,
+   405,   406,   407,   358,   327,   380,   328,   339,   329,   330,
+   331,   360,   361,   343,   362,    60,    61,   563,   100,   146,
+   147,   148,    66,   340,     1,     2,   390,     3,     4,    68,
+   416,   341,    69,   342,   345,    70,   372,    71,   337,   358,
+   373,   374,   375,   376,   358,   377,   482,   370,   419,   391,
+   392,   442,   443,    67,   429,   378,   379,   420,   449,   435,
+   494,   358,   358,   436,   450,   498,   358,   454,   440,   358,
+   445,   503,   446,   447,   448,   452,   453,   258,   455,   456,
+   258,   258,   258,   459,   460,   503,   461,   495,   463,    60,
+    61,   464,   100,    63,    64,    65,    66,   465,     1,     2,
+   466,     3,     4,   467,   469,   487,   488,   489,   490,   479,
+   471,   472,   492,   493,   421,   422,   423,   127,   276,   277,
+   474,   491,   428,   475,   529,   476,   535,    67,   480,   484,
+   425,   485,   438,   439,   500,   511,   519,   520,   521,   552,
+   522,   523,   530,   524,   517,   518,   531,   539,    68,   540,
+   545,    69,   547,   556,    70,   495,    71,   400,   554,    27,
+    28,    29,    30,    31,    32,    33,   557,    34,   558,   559,
+   566,   569,   570,   571,   574,   468,   575,   470,   577,   541,
+   473,   542,   543,   580,   581,   206,   477,   478,   278,   279,
+   280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+   290,   291,   265,   266,   267,   268,   269,   270,   271,   272,
+   273,   274,   207,   208,   501,   502,   325,   505,   506,   326,
+   544,   123,    68,   510,  -186,    69,   527,   138,    70,   135,
+    71,   316,   324,   516,    41,   122,   515,     0,    90,   -62,
+     1,     2,   444,     3,     4,     0,     0,     0,     0,     0,
+     5,     6,     0,     0,   532,    35,    36,    37,     0,     0,
+     0,     0,   536,   346,   347,     0,     0,    60,    61,   348,
+     0,     7,     0,     0,     8,     0,     1,     2,     9,     3,
+     4,   349,   350,   351,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   352,   353,   560,     0,
+     0,     0,     0,   564,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   354,     0,     0,     0,     0,     0,     0,
+   572,   573,     0,     0,     0,   576,     0,     0,   578,   167,
+   168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+   178,   179,   180,   181,   238,   239,     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,   240,   188,   189,   190,   191,   192,   193,   194,   195,
+   196,   197,   198,   199,     0,   241,     0,   242,   243,   244,
+     0,   346,   347,     0,     0,    60,    61,   348,     0,   104,
+     0,   105,     0,     0,     1,     2,   355,     3,     4,   349,
+   350,   351,     0,     0,     0,     0,     0,    60,    61,     0,
+     0,     0,     0,     0,   352,   353,     1,     2,     0,     3,
+     4,   235,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   354,     0,     0,     0,     0,   236,   237,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   167,   168,   169,
+   170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+   180,   181,   238,   239,     0,     0,     0,     0,     0,   167,
+   168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+   178,   179,   180,   181,   238,   239,     0,     0,     0,   240,
+   188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+   198,   199,     0,   241,     0,   242,   243,   244,     0,     0,
+     0,   240,   188,   189,   190,   191,   192,   193,   194,   195,
+   196,   197,   198,   199,   355,   241,     0,   242,   243,   244,
+     0,     0,     0,     0,   346,   347,     0,     0,     0,   104,
+   348,   105,     0,   245,     0,     0,   246,     0,   247,     0,
+   248,     0,   349,   350,   351,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   352,   353,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,    60,    61,   354,   141,    63,    64,    65,    66,
+     0,     1,     2,     0,     3,     4,     0,     0,     0,     0,
+   167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
+   177,   178,   179,   180,   181,   238,   239,     0,     0,     0,
+    67,     0,     0,     0,     0,     0,     0,    60,    61,     0,
+   100,    63,    64,    65,    66,     0,     1,     2,     0,     3,
+     4,     0,   240,   188,   189,   190,   191,   192,   193,   194,
+   195,   196,   197,   198,   199,   315,   241,     0,   242,   243,
+   244,     0,     0,    60,    61,    67,   100,   146,   147,   148,
+    66,     0,     1,     2,     0,     3,     4,   355,    60,    61,
+     0,   100,    63,    64,    65,    66,     0,     1,     2,     0,
+     3,     4,   142,     0,     0,     0,     0,     0,     0,     0,
+     0,    67,     0,     0,     0,     0,   412,     0,     0,     0,
+     0,     0,     0,     0,     0,    68,    67,     0,    69,     0,
+     0,    70,     0,    71,    60,    61,     0,   100,    63,    64,
+    65,    66,     0,     1,     2,     0,     3,     4,    60,    61,
+     0,    62,    63,    64,    65,    66,     0,     1,     2,     0,
+     3,     4,   497,     0,     0,     0,     0,     0,     0,     0,
+    68,     0,    67,    69,     0,     0,    70,     0,    71,     0,
+     0,     0,     0,     0,    60,    61,    67,   100,   146,   147,
+   148,    66,     0,     1,     2,     0,     3,     4,     0,     0,
+     0,     0,     0,     0,     0,     0,    68,     0,     0,    69,
+     0,   332,    70,     0,    71,     0,     0,     0,     0,     0,
+     0,    68,    67,     0,    69,     0,     0,    70,     0,    71,
+    60,    61,     0,   141,    63,    64,    65,    66,     0,     1,
+     2,     0,     3,     4,    60,    61,     0,   100,    63,    64,
+    65,    66,     0,     1,     2,     0,     3,     4,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,    68,    67,     0,
+    69,     0,     0,    70,     0,    71,     0,     0,     0,     0,
+     0,    68,    67,     0,    69,     0,     0,    70,     0,    71,
+    60,    61,     0,   257,    63,    64,    65,    66,     0,     1,
+     2,     0,     3,     4,     0,     0,    60,    61,     0,   100,
+   146,   147,   148,    66,     0,     1,     2,    68,     3,     4,
+    69,     0,     0,    70,     0,    71,     0,     0,    67,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,    67,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    68,     0,     0,    69,     0,     0,    70,
+     0,    71,     0,     0,     0,     0,     0,    68,     0,     0,
+    69,     0,     0,    70,     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,     0,   158,     0,     0,
+     0,     0,     0,    68,     0,     0,    69,     0,     0,    70,
+     0,    71,     0,     0,     0,     0,   159,   160,     0,    68,
+     0,     0,    69,     0,     0,    70,     0,   335,   161,   162,
+   163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+   173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+   183,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   184,   185,   186,     0,     0,   187,   188,   189,   190,
+   191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+   201,   202,   203,   204,   205
+};
+
+static const short yycheck[] = {     0,
+   163,    25,   223,   151,   186,   413,   144,     4,    11,   120,
+     0,    11,   294,   151,    15,    24,    48,   246,   247,   201,
+   202,   203,   204,   205,   317,    15,   208,    11,   321,    11,
+    62,    16,     7,     8,    19,    10,    11,    12,    13,    14,
+   138,    16,    17,   164,    19,    20,   549,    71,   137,   322,
+   323,   149,    38,    39,    18,   138,   138,     0,    44,    30,
+   563,    25,   137,   145,    50,    49,   149,    49,   138,   138,
+    45,    95,    15,    16,    17,    99,    19,    20,    49,   149,
+   149,   105,   138,    26,    27,    86,   110,   138,   138,   210,
+   498,   147,   138,   139,   145,   141,   120,   147,     3,     4,
+     5,     6,   138,   139,    47,   141,   335,    50,   132,   133,
+    16,    54,   136,    19,   113,   114,   140,    22,    23,    42,
+   258,    44,   260,   261,   532,   263,   355,   309,   113,   114,
+   137,   130,   131,   132,   133,    30,   138,   161,   411,   148,
+   142,    17,   145,   113,    20,   145,   131,   132,   139,    34,
+   141,   148,    53,   264,   145,   138,   564,   439,   296,   142,
+   184,   185,   186,   187,   154,   140,   304,   305,   143,   139,
+    15,   146,    11,   148,   149,    14,   200,   201,   202,   203,
+   204,   205,   206,   207,   208,   149,   468,   139,   470,   141,
+   142,   373,   216,   375,   376,   377,   307,   138,    38,    39,
+    40,   142,   226,    43,     7,     8,   499,    10,    11,    12,
+    13,    14,   137,    16,    17,   137,    19,    20,   113,   114,
+    19,    31,   139,    33,   141,   363,   364,   365,   113,   114,
+   147,   113,   114,   371,   516,   130,   131,   132,   133,   460,
+   264,   143,    45,   381,   382,   130,   131,   132,   133,   131,
+   132,   275,    18,   401,    56,    57,    58,    59,    60,    61,
+   553,    19,   555,   401,    28,    29,     7,     8,   292,    10,
+    11,    12,    13,    14,    19,    16,    17,    19,    19,    20,
+   134,   135,   136,   307,   308,   309,   424,     4,   426,   471,
+   141,   429,   474,   475,   476,   109,   110,   435,   436,     3,
+     4,     5,     6,     4,    45,     7,     8,   139,   139,   141,
+   141,   335,   143,   534,    16,    17,   537,    19,    20,    33,
+   139,   345,   141,   142,   144,   463,   464,   144,   466,   467,
+    38,     4,    40,    19,   472,   106,   107,   140,    77,    78,
+   143,   138,   142,   146,   482,   148,   149,   142,     9,   373,
+   374,   375,   376,   377,   147,   141,   380,   327,   328,   329,
+   330,   331,     9,     9,    51,   503,   390,    11,   531,   147,
+   340,   341,   342,   511,   141,    34,   141,    19,   141,   141,
+   141,   260,   261,   138,   263,     7,     8,   550,    10,    11,
+    12,    13,    14,   141,    16,    17,    34,    19,    20,   140,
+    55,   141,   143,   141,   141,   146,   138,   148,   149,   547,
+   138,   138,   138,   138,   552,   138,   440,   296,   138,   141,
+   141,   391,   392,    45,   143,   304,   305,   138,   398,   138,
+   454,   569,   570,   138,   147,   459,   574,    34,   138,   577,
+   138,   465,   138,   138,   138,   138,   138,   471,    19,     4,
+   474,   475,   476,   138,   142,   479,    19,   458,    14,     7,
+     8,    14,    10,    11,    12,    13,    14,   141,    16,    17,
+   138,    19,    20,   138,     4,   445,   446,   447,   448,   141,
+   138,   138,   452,   453,   363,   364,   365,    35,    22,    23,
+   138,   147,   371,   138,    19,   138,   145,    45,   138,   138,
+    49,   138,   381,   382,   138,   138,   138,   142,   138,   533,
+   138,   142,   138,   142,   484,   485,   143,   142,   140,   142,
+    49,   143,    14,   142,   146,   526,   148,   149,   145,    38,
+    39,    40,    41,    42,    43,    44,   142,    46,   142,     4,
+   138,    14,    14,   138,    14,   424,    67,   426,    14,   519,
+   429,   521,   522,     0,     0,   123,   435,   436,    92,    93,
+    94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+   104,   105,    86,    87,    88,    89,    90,    91,    92,    93,
+    94,    95,   123,   123,   463,   464,   238,   466,   467,   239,
+   526,    86,   140,   472,     0,   143,   499,   105,   146,    99,
+   148,   216,   226,   482,    15,    83,   479,    -1,    53,    15,
+    16,    17,   393,    19,    20,    -1,    -1,    -1,    -1,    -1,
+    26,    27,    -1,    -1,   503,   134,   135,   136,    -1,    -1,
+    -1,    -1,   511,     3,     4,    -1,    -1,     7,     8,     9,
+    -1,    47,    -1,    -1,    50,    -1,    16,    17,    54,    19,
+    20,    21,    22,    23,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    36,    37,   547,    -1,
+    -1,    -1,    -1,   552,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    53,    -1,    -1,    -1,    -1,    -1,    -1,
+   569,   570,    -1,    -1,    -1,   574,    -1,    -1,   577,    69,
+    70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+    80,    81,    82,    83,    84,    85,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+   120,   121,   122,   123,    -1,   125,    -1,   127,   128,   129,
+    -1,     3,     4,    -1,    -1,     7,     8,     9,    -1,   139,
+    -1,   141,    -1,    -1,    16,    17,   146,    19,    20,    21,
+    22,    23,    -1,    -1,    -1,    -1,    -1,     7,     8,    -1,
+    -1,    -1,    -1,    -1,    36,    37,    16,    17,    -1,    19,
+    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    53,    -1,    -1,    -1,    -1,    36,    37,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,    70,    71,
+    72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+    82,    83,    84,    85,    -1,    -1,    -1,    -1,    -1,    69,
+    70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+    80,    81,    82,    83,    84,    85,    -1,    -1,    -1,   111,
+   112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+   122,   123,    -1,   125,    -1,   127,   128,   129,    -1,    -1,
+    -1,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+   120,   121,   122,   123,   146,   125,    -1,   127,   128,   129,
+    -1,    -1,    -1,    -1,     3,     4,    -1,    -1,    -1,   139,
+     9,   141,    -1,   143,    -1,    -1,   146,    -1,   148,    -1,
+   150,    -1,    21,    22,    23,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    36,    37,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,     7,     8,    53,    10,    11,    12,    13,    14,
+    -1,    16,    17,    -1,    19,    20,    -1,    -1,    -1,    -1,
+    69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+    79,    80,    81,    82,    83,    84,    85,    -1,    -1,    -1,
+    45,    -1,    -1,    -1,    -1,    -1,    -1,     7,     8,    -1,
+    10,    11,    12,    13,    14,    -1,    16,    17,    -1,    19,
+    20,    -1,   111,   112,   113,   114,   115,   116,   117,   118,
+   119,   120,   121,   122,   123,    35,   125,    -1,   127,   128,
+   129,    -1,    -1,     7,     8,    45,    10,    11,    12,    13,
+    14,    -1,    16,    17,    -1,    19,    20,   146,     7,     8,
+    -1,    10,    11,    12,    13,    14,    -1,    16,    17,    -1,
+    19,    20,   117,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    45,    -1,    -1,    -1,    -1,    35,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   140,    45,    -1,   143,    -1,
+    -1,   146,    -1,   148,     7,     8,    -1,    10,    11,    12,
+    13,    14,    -1,    16,    17,    -1,    19,    20,     7,     8,
+    -1,    10,    11,    12,    13,    14,    -1,    16,    17,    -1,
+    19,    20,    35,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   140,    -1,    45,   143,    -1,    -1,   146,    -1,   148,    -1,
+    -1,    -1,    -1,    -1,     7,     8,    45,    10,    11,    12,
+    13,    14,    -1,    16,    17,    -1,    19,    20,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   140,    -1,    -1,   143,
+    -1,   145,   146,    -1,   148,    -1,    -1,    -1,    -1,    -1,
+    -1,   140,    45,    -1,   143,    -1,    -1,   146,    -1,   148,
+     7,     8,    -1,    10,    11,    12,    13,    14,    -1,    16,
+    17,    -1,    19,    20,     7,     8,    -1,    10,    11,    12,
+    13,    14,    -1,    16,    17,    -1,    19,    20,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   140,    45,    -1,
+   143,    -1,    -1,   146,    -1,   148,    -1,    -1,    -1,    -1,
+    -1,   140,    45,    -1,   143,    -1,    -1,   146,    -1,   148,
+     7,     8,    -1,    10,    11,    12,    13,    14,    -1,    16,
+    17,    -1,    19,    20,    -1,    -1,     7,     8,    -1,    10,
+    11,    12,    13,    14,    -1,    16,    17,   140,    19,    20,
+   143,    -1,    -1,   146,    -1,   148,    -1,    -1,    45,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   140,    -1,    -1,   143,    -1,    -1,   146,
+    -1,   148,    -1,    -1,    -1,    -1,    -1,   140,    -1,    -1,
+   143,    -1,    -1,   146,    -1,   148,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    32,    -1,    -1,
+    -1,    -1,    -1,   140,    -1,    -1,   143,    -1,    -1,   146,
+    -1,   148,    -1,    -1,    -1,    -1,    51,    52,    -1,   140,
+    -1,    -1,   143,    -1,    -1,   146,    -1,   148,    63,    64,
+    65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+    85,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   106,   107,   108,    -1,    -1,   111,   112,   113,   114,
+   115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+   125,   126,   127,   128,   129
+};
+/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
+#line 3 "/usr/share/bison.simple"
+/* This file comes from bison-1.28.  */
+
+/* Skeleton output parser for bison,
+   Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* As a special exception, when this file is copied by Bison into a
+   Bison output file, you may use that output file without restriction.
+   This special exception was added by the Free Software Foundation
+   in version 1.24 of Bison.  */
+
+/* This is the parser code that is written into each bison parser
+  when the %semantic_parser declaration is not specified in the grammar.
+  It was written by Richard Stallman by simplifying the hairy parser
+  used when %semantic_parser is specified.  */
+
+#ifndef YYSTACK_USE_ALLOCA
+#ifdef alloca
+#define YYSTACK_USE_ALLOCA
+#else /* alloca not defined */
+#ifdef __GNUC__
+#define YYSTACK_USE_ALLOCA
+#define alloca __builtin_alloca
+#else /* not GNU C.  */
+#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
+#define YYSTACK_USE_ALLOCA
+#include <alloca.h>
+#else /* not sparc */
+/* We think this test detects Watcom and Microsoft C.  */
+/* This used to test MSDOS, but that is a bad idea
+   since that symbol is in the user namespace.  */
+#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
+#if 0 /* No need for malloc.h, which pollutes the namespace;
+	 instead, just don't use alloca.  */
+#include <malloc.h>
+#endif
+#else /* not MSDOS, or __TURBOC__ */
+#if defined(_AIX)
+/* I don't know what this was needed for, but it pollutes the namespace.
+   So I turned it off.   rms, 2 May 1997.  */
+/* #include <malloc.h>  */
+ #pragma alloca
+#define YYSTACK_USE_ALLOCA
+#else /* not MSDOS, or __TURBOC__, or _AIX */
+#if 0
+#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
+		 and on HPUX 10.  Eventually we can turn this on.  */
+#define YYSTACK_USE_ALLOCA
+#define alloca __builtin_alloca
+#endif /* __hpux */
+#endif
+#endif /* not _AIX */
+#endif /* not MSDOS, or __TURBOC__ */
+#endif /* not sparc */
+#endif /* not GNU C */
+#endif /* alloca not defined */
+#endif /* YYSTACK_USE_ALLOCA not defined */
+
+#ifdef YYSTACK_USE_ALLOCA
+#define YYSTACK_ALLOC alloca
 #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  42
-/* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1491
-
-/* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  151
-/* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  82
-/* YYNRULES -- Number of rules.  */
-#define YYNRULES  297
-/* YYNRULES -- Number of states.  */
-#define YYNSTATES  581
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
-#define YYUNDEFTOK  2
-#define YYMAXUTOK   391
-
-#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,
-     141,   142,   139,     2,   138,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     146,   137,   147,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   143,   140,   145,     2,     2,     2,     2,     2,   150,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     144,     2,     2,   148,     2,   149,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     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
-};
-
-#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,   122,   125,   126,   128,   130,   132,   133,   136,
-     138,   140,   142,   144,   146,   148,   150,   152,   153,   155,
-     157,   159,   160,   162,   164,   165,   167,   169,   171,   173,
-     174,   176,   178,   179,   181,   183,   185,   187,   189,   192,
-     194,   196,   198,   200,   201,   204,   206,   208,   210,   211,
-     214,   215,   218,   219,   223,   226,   227,   229,   230,   234,
-     236,   239,   241,   243,   245,   247,   249,   251,   254,   256,
-     259,   265,   271,   277,   283,   287,   290,   296,   301,   304,
-     306,   308,   310,   314,   316,   320,   322,   323,   325,   329,
-     334,   338,   342,   347,   352,   356,   363,   369,   372,   375,
-     378,   381,   384,   387,   390,   393,   396,   399,   402,   405,
-     412,   418,   427,   434,   441,   449,   457,   464,   473,   482,
-     486,   488,   490,   492,   494,   495,   498,   505,   507,   508,
-     510,   513,   514,   518,   519,   523,   527,   531,   535,   536,
-     544,   545,   554,   555,   564,   570,   573,   577,   579,   583,
-     587,   591,   595,   597,   598,   604,   608,   610,   614,   616,
-     617,   627,   629,   631,   636,   638,   640,   643,   647,   648,
-     650,   652,   654,   656,   658,   660,   662,   664,   666,   670,
-     672,   678,   680,   682,   684,   686,   688,   690,   693,   696,
-     699,   703,   706,   707,   709,   712,   715,   719,   729,   739,
-     748,   763,   765,   767,   774,   780,   783,   790,   798,   802,
-     808,   809,   810,   814,   817,   819,   825,   831,   838,   845,
-     850,   857,   862,   867,   874,   881,   884,   893,   895,   897,
-     898,   902,   909,   913,   920,   923,   929,   937
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
-static const yytype_int16 yyrhs[] =
-{
-     195,     0,    -1,    69,    -1,    70,    -1,    71,    -1,    72,
-      -1,    73,    -1,    74,    -1,    75,    -1,    76,    -1,    77,
-      -1,    81,    -1,    82,    -1,    83,    -1,    78,    -1,    79,
-      -1,    80,    -1,   112,    -1,   113,    -1,   114,    -1,   115,
-      -1,   116,    -1,   117,    -1,   118,    -1,   119,    -1,   120,
-      -1,   121,    -1,   122,    -1,   123,    -1,    86,    -1,    87,
-      -1,    88,    -1,    89,    -1,    90,    -1,    91,    -1,    92,
-      -1,    93,    -1,    94,    -1,    95,    -1,    96,    -1,    97,
-      -1,    98,    -1,    99,    -1,   100,    -1,   101,    -1,   102,
-      -1,   103,    -1,   104,    -1,   105,    -1,    92,    -1,    93,
-      -1,    94,    -1,    95,    -1,    22,    -1,    23,    -1,    11,
-      -1,    12,    -1,    13,    -1,    16,    -1,    19,    -1,   159,
-      -1,    -1,   159,   137,    -1,    -1,    17,    -1,    20,    -1,
-     164,    -1,    -1,   162,   137,    -1,    38,    -1,    40,    -1,
-      39,    -1,    41,    -1,    43,    -1,    42,    -1,    44,    -1,
-      46,    -1,    -1,   134,    -1,   135,    -1,   136,    -1,    -1,
-      42,    -1,    44,    -1,    -1,    38,    -1,    39,    -1,    40,
-      -1,    43,    -1,    -1,    40,    -1,    38,    -1,    -1,    57,
-      -1,    58,    -1,    59,    -1,    60,    -1,    61,    -1,    56,
-       4,    -1,   113,    -1,   114,    -1,   131,    -1,   132,    -1,
-      -1,   173,   172,    -1,   130,    -1,   133,    -1,   172,    -1,
-      -1,   175,   174,    -1,    -1,    49,     4,    -1,    -1,   138,
-      49,     4,    -1,    30,    19,    -1,    -1,   178,    -1,    -1,
-     138,   181,   180,    -1,   178,    -1,    49,     4,    -1,    11,
-      -1,    12,    -1,    13,    -1,    14,    -1,    45,    -1,   182,
-      -1,   183,   139,    -1,   217,    -1,   140,     4,    -1,   183,
-     141,   187,   142,   175,    -1,    10,   141,   187,   142,   175,
-      -1,   143,     4,   144,   183,   145,    -1,   146,     4,   144,
-     183,   147,    -1,   148,   188,   149,    -1,   148,   149,    -1,
-     146,   148,   188,   149,   147,    -1,   146,   148,   149,   147,
-      -1,   183,   173,    -1,   183,    -1,    10,    -1,   184,    -1,
-     186,   138,   184,    -1,   186,    -1,   186,   138,    35,    -1,
-      35,    -1,    -1,   183,    -1,   188,   138,   183,    -1,   183,
-     143,   191,   145,    -1,   183,   143,   145,    -1,   183,   150,
-      19,    -1,   183,   146,   191,   147,    -1,   183,   148,   191,
-     149,    -1,   183,   148,   149,    -1,   183,   146,   148,   191,
-     149,   147,    -1,   183,   146,   148,   149,   147,    -1,   183,
-      36,    -1,   183,    37,    -1,   183,   217,    -1,   183,   190,
-      -1,   183,    21,    -1,   157,     3,    -1,   157,     5,    -1,
-     157,     4,    -1,   157,     6,    -1,    11,    22,    -1,    11,
-      23,    -1,   158,     9,    -1,   154,   141,   189,    34,   183,
-     142,    -1,   111,   141,   189,   228,   142,    -1,   125,   141,
-     189,   138,   189,   138,   189,   142,    -1,   152,   141,   189,
-     138,   189,   142,    -1,   153,   141,   189,   138,   189,   142,
-      -1,    84,   155,   141,   189,   138,   189,   142,    -1,    85,
-     156,   141,   189,   138,   189,   142,    -1,   127,   141,   189,
-     138,   189,   142,    -1,   128,   141,   189,   138,   189,   138,
-     189,   142,    -1,   129,   141,   189,   138,   189,   138,   189,
-     142,    -1,   191,   138,   189,    -1,   189,    -1,    28,    -1,
-      29,    -1,    33,    -1,    -1,   185,   217,    -1,   117,   141,
-     194,    34,   183,   142,    -1,   196,    -1,    -1,   197,    -1,
-     196,   197,    -1,    -1,    27,   198,   213,    -1,    -1,    26,
-     199,   214,    -1,    54,    53,   203,    -1,   161,    15,   183,
-      -1,   161,    15,    10,    -1,    -1,   163,   167,   193,   192,
-     189,   200,   180,    -1,    -1,   163,   165,   167,   193,   192,
-     189,   201,   180,    -1,    -1,   163,   166,   167,   193,   192,
-     183,   202,   180,    -1,   163,   167,    31,   170,   194,    -1,
-      47,   204,    -1,    50,   137,   205,    -1,    19,    -1,    48,
-     137,    19,    -1,    62,   137,    19,    -1,   143,   206,   145,
-      -1,   206,   138,    19,    -1,    19,    -1,    -1,   207,   138,
-     183,   173,   160,    -1,   183,   173,   160,    -1,   207,    -1,
-     207,   138,    35,    -1,    35,    -1,    -1,   171,   185,   162,
-     141,   208,   142,   175,   179,   176,    -1,    24,    -1,   148,
-      -1,   169,   167,   209,   210,    -1,    25,    -1,   149,    -1,
-     220,   212,    -1,   168,   167,   209,    -1,    -1,    55,    -1,
-       3,    -1,     4,    -1,     9,    -1,    22,    -1,    23,    -1,
-      36,    -1,    37,    -1,    21,    -1,   146,   191,   147,    -1,
-     190,    -1,    53,   215,    19,   138,    19,    -1,     7,    -1,
-       8,    -1,   159,    -1,   162,    -1,   217,    -1,   216,    -1,
-     183,   218,    -1,   220,   221,    -1,   211,   221,    -1,   222,
-     161,   223,    -1,   222,   225,    -1,    -1,    18,    -1,    63,
-     219,    -1,    63,    10,    -1,    64,    14,   218,    -1,    64,
-      11,   218,   138,    14,   218,   138,    14,   218,    -1,    65,
-     157,   218,   138,    14,   218,   143,   224,   145,    -1,    65,
-     157,   218,   138,    14,   218,   143,   145,    -1,    66,   171,
-     185,   218,   141,   227,   142,   175,    34,    14,   218,    67,
-      14,   218,    -1,    67,    -1,    68,    -1,   224,   157,   216,
-     138,    14,   218,    -1,   157,   216,   138,    14,   218,    -1,
-     161,   230,    -1,   183,   143,   218,   138,   218,   145,    -1,
-     226,   138,   143,   218,   138,   218,   145,    -1,   183,   218,
-     173,    -1,   227,   138,   183,   218,   173,    -1,    -1,    -1,
-     228,   138,   219,    -1,    52,    51,    -1,    51,    -1,   152,
-     183,   218,   138,   218,    -1,   153,   183,   218,   138,   218,
-      -1,    84,   155,   183,   218,   138,   218,    -1,    85,   156,
-     183,   218,   138,   218,    -1,   154,   219,    34,   183,    -1,
-     125,   219,   138,   219,   138,   219,    -1,   126,   219,   138,
-     183,    -1,   127,   219,   138,   219,    -1,   128,   219,   138,
-     219,   138,   219,    -1,   129,   219,   138,   219,   138,   219,
-      -1,   124,   226,    -1,   229,   171,   185,   218,   141,   227,
-     142,   175,    -1,   232,    -1,    32,    -1,    -1,   106,   183,
-     177,    -1,   106,   183,   138,    11,   218,   177,    -1,   107,
-     183,   177,    -1,   107,   183,   138,    11,   218,   177,    -1,
-     108,   219,    -1,   231,   109,   183,   218,   177,    -1,   231,
-     110,   219,   138,   183,   218,   177,    -1,   111,   183,   218,
-     228,    -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
-static const yytype_uint16 yyrline[] =
-{
-       0,  1111,  1111,  1111,  1111,  1111,  1111,  1111,  1111,  1111,
-    1111,  1112,  1112,  1112,  1112,  1112,  1112,  1113,  1113,  1113,
-    1113,  1113,  1113,  1114,  1114,  1114,  1114,  1114,  1114,  1117,
-    1117,  1118,  1118,  1119,  1119,  1120,  1120,  1121,  1121,  1125,
-    1125,  1126,  1126,  1127,  1127,  1128,  1128,  1129,  1129,  1130,
-    1130,  1131,  1131,  1132,  1133,  1138,  1139,  1139,  1141,  1141,
-    1142,  1142,  1146,  1150,  1155,  1155,  1157,  1158,  1163,  1169,
-    1170,  1171,  1172,  1173,  1177,  1178,  1179,  1183,  1184,  1185,
-    1186,  1190,  1191,  1192,  1196,  1197,  1198,  1199,  1200,  1204,
-    1205,  1206,  1209,  1210,  1211,  1212,  1213,  1214,  1215,  1222,
-    1223,  1224,  1225,  1228,  1229,  1234,  1235,  1236,  1239,  1240,
-    1247,  1248,  1254,  1255,  1263,  1271,  1272,  1277,  1278,  1279,
-    1284,  1297,  1297,  1297,  1297,  1300,  1304,  1308,  1315,  1320,
-    1328,  1358,  1389,  1394,  1406,  1416,  1420,  1430,  1437,  1444,
-    1451,  1456,  1461,  1468,  1469,  1476,  1483,  1491,  1497,  1509,
-    1537,  1553,  1582,  1610,  1636,  1656,  1682,  1702,  1714,  1721,
-    1787,  1797,  1807,  1813,  1823,  1829,  1839,  1844,  1849,  1857,
-    1869,  1891,  1899,  1905,  1916,  1921,  1926,  1932,  1938,  1947,
-    1951,  1959,  1959,  1962,  1962,  1965,  1976,  1997,  2002,  2010,
-    2011,  2015,  2015,  2019,  2019,  2022,  2025,  2049,  2060,  2060,
-    2071,  2070,  2080,  2079,  2090,  2105,  2108,  2114,  2127,  2131,
-    2136,  2138,  2143,  2148,  2157,  2167,  2178,  2182,  2191,  2200,
-    2205,  2327,  2327,  2329,  2338,  2338,  2340,  2345,  2357,  2361,
-    2366,  2370,  2374,  2378,  2382,  2386,  2390,  2394,  2398,  2423,
-    2427,  2441,  2445,  2449,  2453,  2459,  2459,  2465,  2474,  2478,
-    2487,  2496,  2505,  2509,  2514,  2518,  2522,  2527,  2537,  2556,
-    2565,  2645,  2649,  2656,  2667,  2680,  2690,  2701,  2711,  2720,
-    2729,  2732,  2733,  2740,  2744,  2749,  2770,  2787,  2801,  2815,
-    2827,  2835,  2842,  2848,  2854,  2860,  2875,  2960,  2965,  2969,
-    2976,  2983,  2991,  2998,  3006,  3014,  3028,  3045
-};
-#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", "LABEL", "TYPE", "LOCALVAR", "GLOBALVAR", "LABELSTR",
-  "STRINGCONSTANT", "ATSTRINGCONSTANT", "ZEROINITIALIZER", "TRUETOK",
-  "FALSETOK", "BEGINTOK", "ENDTOK", "DECLARE", "DEFINE", "GLOBAL",
-  "CONSTANT", "SECTION", "ALIAS", "VOLATILE", "THREAD_LOCAL", "TO",
-  "DOTDOTDOT", "NULL_TOK", "UNDEF", "INTERNAL", "LINKONCE", "WEAK",
-  "APPENDING", "DLLIMPORT", "DLLEXPORT", "EXTERN_WEAK", "OPAQUE",
-  "EXTERNAL", "TARGET", "TRIPLE", "ALIGN", "DEPLIBS", "CALL", "TAIL",
-  "ASM_TOK", "MODULE", "SIDEEFFECT", "CC_TOK", "CCC_TOK", "FASTCC_TOK",
-  "COLDCC_TOK", "X86_STDCALLCC_TOK", "X86_FASTCALLCC_TOK", "DATALAYOUT",
-  "RET", "BR", "SWITCH", "INVOKE", "UNWIND", "UNREACHABLE", "ADD", "SUB",
-  "MUL", "UDIV", "SDIV", "FDIV", "UREM", "SREM", "FREM", "AND", "OR",
-  "XOR", "SHL", "LSHR", "ASHR", "ICMP", "FCMP", "EQ", "NE", "SLT", "SGT",
-  "SLE", "SGE", "ULT", "UGT", "ULE", "UGE", "OEQ", "ONE", "OLT", "OGT",
-  "OLE", "OGE", "ORD", "UNO", "UEQ", "UNE", "MALLOC", "ALLOCA", "FREE",
-  "LOAD", "STORE", "GETELEMENTPTR", "TRUNC", "ZEXT", "SEXT", "FPTRUNC",
-  "FPEXT", "BITCAST", "UITOFP", "SITOFP", "FPTOUI", "FPTOSI", "INTTOPTR",
-  "PTRTOINT", "PHI_TOK", "SELECT", "VAARG", "EXTRACTELEMENT",
-  "INSERTELEMENT", "SHUFFLEVECTOR", "NORETURN", "INREG", "SRET",
-  "NOUNWIND", "DEFAULT", "HIDDEN", "PROTECTED", "'='", "','", "'*'",
-  "'\\\\'", "'('", "')'", "'['", "'x'", "']'", "'<'", "'>'", "'{'", "'}'",
-  "'c'", "$accept", "ArithmeticOps", "LogicalOps", "CastOps",
-  "IPredicates", "FPredicates", "IntType", "FPType", "LocalName",
-  "OptLocalName", "OptLocalAssign", "GlobalName", "OptGlobalAssign",
-  "GlobalAssign", "GVInternalLinkage", "GVExternalLinkage",
-  "GVVisibilityStyle", "FunctionDeclareLinkage", "FunctionDefineLinkage",
-  "AliasLinkage", "OptCallingConv", "ParamAttr", "OptParamAttrs",
-  "FuncAttr", "OptFuncAttrs", "OptAlign", "OptCAlign", "SectionString",
-  "OptSection", "GlobalVarAttributes", "GlobalVarAttribute", "PrimType",
-  "Types", "ArgType", "ResultTypes", "ArgTypeList", "ArgTypeListI",
-  "TypeListI", "ConstVal", "ConstExpr", "ConstVector", "GlobalType",
-  "ThreadLocal", "AliaseeRef", "Module", "DefinitionList", "Definition",
-  "@1", "@2", "@3", "@4", "@5", "AsmBlock", "TargetDefinition",
-  "LibrariesDefinition", "LibList", "ArgListH", "ArgList",
-  "FunctionHeaderH", "BEGIN", "FunctionHeader", "END", "Function",
-  "FunctionProto", "OptSideEffect", "ConstValueRef", "SymbolicValueRef",
-  "ValueRef", "ResolvedVal", "BasicBlockList", "BasicBlock",
-  "InstructionList", "BBTerminatorInst", "JumpTable", "Inst", "PHIList",
-  "ValueRefList", "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,    61,    44,    42,
-      92,    40,    41,    91,   120,    93,    60,    62,   123,   125,
-      99
-};
-# endif
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint8 yyr1[] =
-{
-       0,   151,   152,   152,   152,   152,   152,   152,   152,   152,
-     152,   153,   153,   153,   153,   153,   153,   154,   154,   154,
-     154,   154,   154,   154,   154,   154,   154,   154,   154,   155,
-     155,   155,   155,   155,   155,   155,   155,   155,   155,   156,
-     156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
-     156,   156,   156,   156,   156,   157,   158,   158,   159,   159,
-     160,   160,   161,   161,   162,   162,   163,   163,   164,   165,
-     165,   165,   165,   165,   166,   166,   166,   167,   167,   167,
-     167,   168,   168,   168,   169,   169,   169,   169,   169,   170,
-     170,   170,   171,   171,   171,   171,   171,   171,   171,   172,
-     172,   172,   172,   173,   173,   174,   174,   174,   175,   175,
-     176,   176,   177,   177,   178,   179,   179,   180,   180,   181,
-     181,   182,   182,   182,   182,   183,   183,   183,   183,   183,
-     183,   183,   183,   183,   183,   183,   183,   183,   184,   185,
-     185,   186,   186,   187,   187,   187,   187,   188,   188,   189,
-     189,   189,   189,   189,   189,   189,   189,   189,   189,   189,
-     189,   189,   189,   189,   189,   189,   189,   189,   189,   190,
-     190,   190,   190,   190,   190,   190,   190,   190,   190,   191,
-     191,   192,   192,   193,   193,   194,   194,   195,   195,   196,
-     196,   198,   197,   199,   197,   197,   197,   197,   200,   197,
-     201,   197,   202,   197,   197,   197,   197,   203,   204,   204,
-     205,   206,   206,   206,   207,   207,   208,   208,   208,   208,
-     209,   210,   210,   211,   212,   212,   213,   214,   215,   215,
-     216,   216,   216,   216,   216,   216,   216,   216,   216,   216,
-     216,   217,   217,   217,   217,   218,   218,   219,   220,   220,
-     221,   222,   222,   222,   223,   223,   223,   223,   223,   223,
-     223,   223,   223,   224,   224,   225,   226,   226,   227,   227,
-     227,   228,   228,   229,   229,   230,   230,   230,   230,   230,
-     230,   230,   230,   230,   230,   230,   230,   230,   231,   231,
-     232,   232,   232,   232,   232,   232,   232,   232
-};
-
-/* 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,     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,     0,     2,     1,     1,     1,     0,     2,
-       0,     2,     0,     3,     2,     0,     1,     0,     3,     1,
-       2,     1,     1,     1,     1,     1,     1,     2,     1,     2,
-       5,     5,     5,     5,     3,     2,     5,     4,     2,     1,
-       1,     1,     3,     1,     3,     1,     0,     1,     3,     4,
-       3,     3,     4,     4,     3,     6,     5,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     6,
-       5,     8,     6,     6,     7,     7,     6,     8,     8,     3,
-       1,     1,     1,     1,     0,     2,     6,     1,     0,     1,
-       2,     0,     3,     0,     3,     3,     3,     3,     0,     7,
-       0,     8,     0,     8,     5,     2,     3,     1,     3,     3,
-       3,     3,     1,     0,     5,     3,     1,     3,     1,     0,
-       9,     1,     1,     4,     1,     1,     2,     3,     0,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     3,     1,
-       5,     1,     1,     1,     1,     1,     1,     2,     2,     2,
-       3,     2,     0,     1,     2,     2,     3,     9,     9,     8,
-      14,     1,     1,     6,     5,     2,     6,     7,     3,     5,
-       0,     0,     3,     2,     1,     5,     5,     6,     6,     4,
-       6,     4,     4,     6,     6,     2,     8,     1,     1,     0,
-       3,     6,     3,     6,     2,     5,     7,     4
-};
-
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
-   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
-   means the default is an error.  */
-static const yytype_uint16 yydefact[] =
-{
-      67,    58,    64,    59,    65,   193,   191,     0,     0,     0,
-       0,     0,     0,    77,    66,     0,    67,   189,    81,    84,
-       0,     0,   205,     0,     0,    62,     0,    68,    69,    71,
-      70,    72,    74,    73,    75,    76,    78,    79,    80,    77,
-      77,   184,     1,   190,    82,    83,    77,   194,    85,    86,
-      87,    88,    77,   252,   192,   252,     0,     0,   213,   206,
-     207,   195,   241,   242,   197,   121,   122,   123,   124,   125,
-       0,     0,     0,     0,   243,   244,   126,   196,   128,   184,
-     184,    89,   183,     0,    92,    92,   253,   249,    63,   224,
-     225,   226,   248,   208,   209,   212,     0,   146,   129,     0,
-       0,     0,     0,   135,   147,     0,   127,   146,     0,     0,
-      91,    90,     0,   181,   182,     0,     0,    93,    94,    95,
-      96,    97,     0,   227,     0,   289,   251,     0,   210,   145,
-     103,   141,   143,     0,     0,     0,     0,     0,     0,   134,
-       0,     0,     0,   140,     0,   139,     0,   204,   121,   122,
-     123,     0,     0,     0,   198,    98,     0,   221,   222,   223,
-     288,   274,     0,     0,     0,     0,    92,   261,   262,     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,   250,    92,   265,     0,   287,   211,   138,     0,   108,
-       0,     0,   137,     0,   148,   108,   200,   202,     0,   185,
-     166,   167,   162,   164,   163,   165,   168,   161,   157,   158,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   160,   159,   117,     0,   273,   255,
-       0,   254,     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,   112,   112,   294,     0,     0,
-     285,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    99,   100,   101,   102,   104,   144,   142,   131,
-     132,   133,   136,   130,   117,   117,     0,     0,     0,     0,
-       0,     0,     0,     0,   150,   180,     0,     0,     0,   154,
-       0,   151,     0,     0,     0,     0,   199,   219,   230,   231,
-     232,   237,   233,   234,   235,   236,   228,     0,   239,   246,
-     245,   247,     0,   256,     0,     0,     0,     0,     0,   290,
-       0,   292,   271,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   105,   106,   107,   109,
-     201,   203,     0,     0,     0,   271,     0,     0,     0,     0,
-       0,   149,   135,   147,     0,   152,   153,     0,     0,     0,
-       0,     0,   119,   117,   218,   103,   216,     0,   229,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   297,
-       0,     0,     0,   281,   282,     0,     0,     0,     0,   279,
-       0,   112,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   179,   156,     0,     0,     0,     0,   114,   120,   118,
-      61,     0,   108,     0,   238,     0,     0,   270,     0,     0,
-     112,   113,   112,     0,     0,     0,     0,     0,     0,   275,
-     276,   270,     0,   295,     0,   186,     0,     0,   170,     0,
-       0,     0,     0,   155,     0,     0,     0,    60,   215,   217,
-     103,   115,     0,     0,     0,     0,     0,   277,   278,   291,
-     293,   272,     0,     0,   280,   283,   284,     0,   112,     0,
-       0,     0,   176,     0,     0,   172,   173,   169,    61,   116,
-     110,   240,     0,     0,   103,     0,   108,   266,     0,   108,
-     296,   174,   175,     0,     0,     0,   214,     0,   220,     0,
-     259,     0,     0,   268,     0,     0,   267,   286,   171,   177,
-     178,   111,   257,     0,   258,     0,   103,     0,     0,     0,
-     269,     0,     0,     0,     0,   264,     0,     0,   263,     0,
-     260
-};
-
-/* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int16 yydefgoto[] =
-{
-      -1,   251,   252,   253,   277,   294,   151,   152,    74,   498,
-      11,    75,    13,    14,    39,    40,    41,    46,    52,   112,
-     122,   316,   217,   389,   319,   548,   369,   412,   530,   346,
-     413,    76,   153,   131,   146,   132,   133,   105,   335,   358,
-     336,   115,    83,   147,    15,    16,    17,    19,    18,   256,
-     324,   325,    61,    22,    59,    96,   416,   417,   123,   159,
-      53,    91,    54,    47,   419,   359,    78,   361,   261,    55,
-      87,    88,   211,   552,   126,   300,   506,   429,   212,   213,
-     214,   215
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-#define YYPACT_NINF -460
-static const yytype_int16 yypact[] =
-{
-      30,  -460,  -460,  -460,  -460,  -460,  -460,    -4,  -118,    45,
-    -108,    70,    36,   432,  -460,   151,   558,  -460,   148,   200,
-      49,    71,  -460,    82,   150,  -460,  1184,  -460,  -460,  -460,
-    -460,  -460,  -460,  -460,  -460,  -460,  -460,  -460,  -460,   189,
-     189,   250,  -460,  -460,  -460,  -460,   189,  -460,  -460,  -460,
-    -460,  -460,   189,   196,  -460,   -14,   239,   248,   277,  -460,
-    -460,  -460,  -460,  -460,   129,  -460,  -460,  -460,  -460,  -460,
-     307,   313,     4,   368,  -460,  -460,  -460,   192,  -460,   295,
-     295,   294,  -460,    26,   163,   163,  -460,  -460,   155,  -460,
-    -460,  -460,  -460,  -460,  -460,  -460,  -114,    54,  -460,   194,
-     195,   932,   129,  -460,   192,  -117,  -460,    54,    26,    26,
-    -460,  -460,  1028,  -460,  -460,  1198,   336,  -460,  -460,  -460,
-    -460,  -460,  1225,  -460,    -6,  1362,  -460,   322,  -460,  -460,
-     192,  -460,   204,   201,  1240,  1240,   197,   -55,  1240,  -460,
-     205,  1198,  1240,   129,   207,   192,    88,  -460,    97,   337,
-     340,   274,   346,   757,  -460,  -460,   184,  -460,  -460,  -460,
-    -460,  -460,   305,  1261,   251,   349,   163,  -460,  -460,  -460,
-    -460,  -460,  -460,  -460,  -460,  -460,  -460,  -460,  -460,  -460,
-    -460,  -460,  -460,  -460,   395,   443,  1240,  1240,  1240,  1240,
-    -460,  -460,  -460,  -460,  -460,  -460,  -460,  -460,  -460,  -460,
-    -460,  -460,  1240,  1240,  1240,  1240,  1240,  1240,  1240,  1240,
-    1240,  -460,   163,  -460,   137,  -460,  -460,   -80,   120,  -460,
-      31,   109,  -460,   215,   192,  -460,  -460,   192,  1028,  -460,
-    -460,  -460,  -460,  -460,  -460,  -460,  -460,  -460,  -460,  -460,
-     395,   443,   222,   227,   228,   231,   232,  1042,  1276,   973,
-     358,   242,   245,   249,  -460,  -460,   253,   252,  -460,   129,
-     607,  -460,   735,   735,  -460,   735,  1225,  -460,  -460,  -460,
-    -460,  -460,  -460,  -460,  -460,  -460,  -460,  1240,  -460,  -460,
-    -460,  -460,  -460,  -460,  -460,  -460,  -460,  -460,  -460,  -460,
-    -460,  -460,  -460,  -460,  1240,   152,   156,  -460,   607,   118,
-     254,   258,   259,   260,   261,   262,   607,   607,   361,  1225,
-    1240,  1240,  -460,  -460,  -460,  -460,  -460,  -460,  -460,    99,
-    -460,  -460,  -460,    99,   253,   253,   367,   263,   264,  1198,
-    1198,  1198,  1198,  1198,  -460,  -460,   -85,  1012,     3,  -460,
-     -27,  -460,  1198,  1198,  1198,    29,  -460,  1082,  -460,  -460,
-    -460,  -460,  -460,  -460,  -460,  -460,   351,  1198,  -460,  -460,
-    -460,  -460,   269,  -460,   270,   735,   607,   607,    14,  -460,
-      32,  -460,  -460,   735,   266,  1240,  1240,  1240,  1240,  1240,
-     273,   276,  1240,   735,   607,   278,  -460,  -460,  -460,  -460,
-    -460,  -460,  1240,  1198,  1198,  -460,   284,   285,   286,   289,
-    1198,  -460,   265,   757,     9,  -460,  -460,   290,   291,   396,
-     415,   431,  -460,   253,  -460,   192,   300,   297,  -460,   422,
-       7,   429,   430,   304,   308,   309,   735,   445,   735,   312,
-     316,   735,   317,   192,  -460,   321,   326,   735,   735,   192,
-     327,   329,  1240,    94,   339,   353,   -63,  1198,  1198,  1198,
-    1198,  -460,  -460,   350,  1198,  1198,  1240,  -460,  -460,  -460,
-      74,  1118,  -460,   355,  -460,   735,   735,  1240,   735,   735,
-     329,  -460,   329,  1240,   735,   360,  1240,  1240,  1240,  -460,
-    -460,  1240,   447,  -460,   607,  -460,  1198,  1198,  -460,   362,
-     357,   363,   364,  -460,   365,   370,   179,  -460,  -460,  -460,
-     192,    85,   484,   366,   372,   607,   -24,  -460,  -460,  -460,
-    -460,  -460,   373,   735,  -460,  -460,  -460,     6,   329,   371,
-     377,  1198,  -460,  1198,  1198,  -460,  -460,  -460,    74,  -460,
-     456,  -460,   492,     1,  -460,  1240,  -460,  -460,   375,  -460,
-    -460,  -460,  -460,   379,   381,   383,  -460,   505,  -460,   735,
-    -460,   888,    11,   -80,   607,   141,  -460,    99,  -460,  -460,
-    -460,  -460,  -460,   388,  -460,   888,  -460,   515,   516,   393,
-     -80,   735,   735,   518,   482,  -460,   735,   536,  -460,   735,
-    -460
-};
-
-/* YYPGOTO[NTERM-NUM].  */
-static const yytype_int16 yypgoto[] =
-{
-    -460,   426,   427,   428,   314,   315,  -163,  -460,     0,    27,
-     469,    10,  -460,  -460,  -460,  -460,   236,  -460,  -460,  -460,
-    -143,  -306,  -409,  -460,  -220,  -460,  -281,    58,  -460,  -297,
-    -460,  -460,   -25,   342,  -113,  -460,   462,   470,   -29,  -150,
-    -208,   198,   257,   335,  -460,  -460,   556,  -460,  -460,  -460,
-    -460,  -460,  -460,  -460,  -460,  -460,  -460,  -460,   491,  -460,
-    -460,  -460,  -460,  -460,  -460,  -459,  -139,    96,  -168,  -460,
-     524,  -460,  -460,  -460,  -460,  -460,   100,   187,  -460,  -460,
-    -460,  -460
-};
-
-/* 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 -189
-static const yytype_int16 yytable[] =
-{
-      10,    77,   265,   254,    86,   323,   460,   229,   100,   156,
-      12,    89,   264,   388,   255,   371,    10,   388,   157,    23,
-     297,   138,   264,   266,   127,   426,    12,   390,   391,    25,
-    -188,   128,   139,   312,   313,   301,   302,   303,   304,   305,
-     338,   340,   308,   428,    20,   -63,     1,     2,   104,     3,
-       4,   314,   315,   400,   113,   114,     5,     6,    21,   410,
-     401,    62,    63,   427,   102,    65,    66,    67,    68,   309,
-       1,     2,   130,     3,     4,   473,   104,     7,   411,   488,
-       8,   427,   130,   138,     9,    26,   154,   145,    10,   129,
-       1,   528,   563,     3,   223,    62,    63,   145,    24,    69,
-     -55,   -55,   -55,   -55,     1,     2,   569,     3,     4,   220,
-     221,   400,   226,   224,   535,   410,   459,   227,   536,   230,
-     231,   360,   406,   360,   360,   553,   360,    62,    63,   404,
-     102,    65,    66,    67,    68,    90,     1,     2,   260,     3,
-       4,   400,   158,   385,   535,   400,   550,   400,   539,   420,
-     405,    42,   101,   365,   464,   317,   564,   570,   453,   360,
-     483,   295,   296,   260,   298,    69,   257,   360,   360,    60,
-     106,     1,   107,    27,     3,   567,   320,   299,   260,   260,
-     260,   260,   260,   306,   307,   260,    56,   312,   313,   509,
-      44,   510,    45,   130,    70,   388,   383,    71,   312,   313,
-      72,     2,    73,   145,     4,   314,   315,   432,    57,   434,
-     435,   436,   312,   313,    86,   386,   314,   315,   387,   116,
-     117,   118,   119,   120,   121,    58,   360,   360,   360,   386,
-     314,   315,   387,   106,   360,   107,   485,   540,    48,    49,
-      50,   145,   501,    51,   360,   360,   310,   311,   106,   388,
-     107,   388,   366,   254,   312,   313,   321,   106,    93,   107,
-      70,   373,   262,    71,   255,   263,    72,    94,    73,   367,
-      97,   386,   314,   315,   387,    79,    80,   232,   233,   234,
-     235,    81,    84,    82,   145,   384,   260,   360,    85,   360,
-     368,   106,   360,   107,   370,   106,    95,   107,   360,   360,
-     395,   396,   397,   398,   399,   511,   141,   142,   514,   515,
-     516,    98,   403,   407,   408,   409,   555,    99,   106,   557,
-     107,   527,   415,    36,    37,    38,   360,   360,    82,   360,
-     360,   106,   110,   107,   111,   360,   108,   109,   134,   135,
-     155,   216,   218,   219,   222,   360,   -56,   225,   228,   -57,
-     260,   433,   260,   260,   260,   236,   258,   439,   362,   363,
-     264,   364,   322,   329,   444,   445,   360,   443,   330,   331,
-     551,   451,   332,   333,   360,    62,    63,   341,   102,    65,
-      66,    67,    68,   342,     1,     2,   343,     3,     4,   565,
-     344,   345,   374,   347,   372,   382,   375,   376,   377,   378,
-     379,   392,   380,   381,   393,   394,   418,   421,   422,   431,
-     360,   437,   452,    69,   438,   360,   442,   484,   489,   490,
-     491,   492,   447,   448,   449,   494,   495,   450,   454,   455,
-     456,   496,   360,   360,   457,   458,   500,   360,   461,   462,
-     360,   463,   505,   465,   466,   467,   468,   469,   260,   471,
-     473,   260,   260,   260,   474,   476,   505,   519,   520,   477,
-     497,   423,   424,   425,   478,   278,   279,   482,   481,   430,
-      28,    29,    30,    31,    32,    33,    34,   486,    35,   440,
-     441,   267,   268,   269,   270,   271,   272,   273,   274,   275,
-     276,   487,   543,   502,   544,   545,   427,   493,   513,   522,
-     521,   523,   524,   531,   532,   547,   549,   525,    70,   561,
-     554,    71,   526,   541,    72,   533,    73,   103,   537,   542,
-     556,   558,   470,   559,   472,   560,   568,   475,   497,   571,
-     572,   573,   576,   479,   480,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   577,
-     579,   208,   209,   210,   327,   546,   328,   125,  -187,   529,
-     318,   503,   504,   326,   507,   508,    36,    37,    38,   140,
-     512,   137,    43,   -63,     1,     2,   124,     3,     4,    92,
-     518,   517,   446,     0,     5,     6,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   534,     0,     0,     0,     7,     0,     0,     8,   538,
-     348,   349,     9,     0,    62,    63,   350,     0,     0,     0,
-       0,     0,     0,     1,     2,     0,     3,     4,   351,   352,
-     353,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   354,   355,   562,     0,     0,     0,     0,
-     566,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     356,     0,     0,     0,     0,     0,     0,   574,   575,     0,
-       0,     0,   578,     0,     0,   580,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   240,   241,     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,   242,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,     0,   243,     0,   244,   245,   246,     0,   348,   349,
-       0,     0,    62,    63,   350,     0,   106,     0,   107,     0,
-       0,     1,     2,   357,     3,     4,   351,   352,   353,     0,
-       0,     0,     0,     0,    62,    63,     0,     0,     0,     0,
-       0,   354,   355,     1,     2,     0,     3,     4,   237,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   356,     0,
-       0,     0,     0,   238,   239,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   240,
-     241,     0,     0,     0,     0,     0,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   240,   241,     0,     0,     0,   242,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,     0,
-     243,     0,   244,   245,   246,     0,     0,     0,   242,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   357,   243,     0,   244,   245,   246,     0,     0,     0,
-       0,   348,   349,     0,     0,     0,   106,   350,   107,     0,
-     247,     0,     0,   248,     0,   249,     0,   250,     0,   351,
-     352,   353,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   354,   355,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    62,
-      63,   356,   102,    65,    66,    67,    68,     0,     1,     2,
-       0,     3,     4,     0,     0,     0,     0,   169,   170,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   240,   241,     0,     0,     0,    69,     0,     0,
-      62,    63,     0,   102,   148,   149,   150,    68,     0,     1,
-       2,     0,     3,     4,     0,     0,     0,     0,     0,   242,
-     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,     0,   243,     0,   244,   245,   246,    69,    62,
-      63,     0,   102,   148,   149,   150,    68,     0,     1,     2,
-       0,     3,     4,     0,   357,    62,    63,     0,   143,    65,
-      66,    67,    68,     0,     1,     2,     0,     3,     4,    62,
-      63,     0,   102,   148,   149,   150,    68,    69,     1,     2,
-       0,     3,     4,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    70,    69,     0,    71,     0,     0,    72,     0,
-      73,   136,     0,     0,     0,     0,     0,    69,     0,    62,
-      63,     0,   102,    65,    66,    67,    68,     0,     1,     2,
-       0,     3,     4,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    70,     0,     0,    71,   414,     0,    72,
-       0,    73,   339,     0,     0,    62,    63,    69,   102,    65,
-      66,    67,    68,     0,     1,     2,     0,     3,     4,     0,
-       0,     0,     0,     0,     0,   144,     0,     0,     0,     0,
-       0,     0,    70,   499,     0,    71,     0,     0,    72,     0,
-      73,   402,     0,    69,     0,     0,     0,     0,    70,     0,
-       0,    71,     0,     0,    72,     0,    73,     0,     0,     0,
-       0,     0,    70,     0,     0,    71,     0,   334,    72,     0,
-      73,    62,    63,     0,    64,    65,    66,    67,    68,     0,
-       1,     2,     0,     3,     4,    62,    63,     0,   102,   148,
-     149,   150,    68,     0,     1,     2,     0,     3,     4,     0,
-       0,     0,    70,     0,     0,    71,     0,     0,    72,    69,
-      73,     0,    62,    63,     0,   143,    65,    66,    67,    68,
-       0,     1,     2,    69,     3,     4,     0,    62,    63,     0,
-     102,    65,    66,    67,    68,     0,     1,     2,    70,     3,
-       4,    71,     0,     0,    72,     0,    73,     0,    62,    63,
-      69,   259,    65,    66,    67,    68,     0,     1,     2,     0,
-       3,     4,     0,    62,    63,    69,   102,   148,   149,   150,
-      68,     0,     1,     2,     0,     3,     4,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    69,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    69,     0,     0,    70,     0,     0,    71,     0,     0,
-      72,     0,    73,     0,     0,     0,     0,     0,    70,     0,
-       0,    71,     0,     0,    72,     0,    73,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    70,     0,     0,    71,     0,
-       0,    72,     0,    73,     0,     0,     0,     0,     0,     0,
-      70,     0,     0,    71,     0,     0,    72,     0,    73,     0,
-       0,     0,     0,     0,   160,     0,     0,     0,     0,     0,
-       0,    70,     0,     0,    71,     0,     0,    72,     0,    73,
-       0,     0,     0,   161,   162,     0,    70,     0,     0,    71,
-       0,     0,    72,     0,   337,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   186,   187,
-     188,     0,     0,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207
-};
-
-static const yytype_int16 yycheck[] =
-{
-       0,    26,   165,   153,    18,   225,   415,   146,     4,   122,
-       0,    25,    11,   319,   153,   296,    16,   323,    24,   137,
-     188,   138,    11,   166,   138,    11,    16,   324,   325,   137,
-       0,   145,   149,   113,   114,   203,   204,   205,   206,   207,
-     248,   249,   210,    11,    48,    15,    16,    17,    73,    19,
-      20,   131,   132,   138,    28,    29,    26,    27,    62,    30,
-     145,     7,     8,    49,    10,    11,    12,    13,    14,   212,
-      16,    17,    97,    19,    20,   138,   101,    47,    49,   142,
-      50,    49,   107,   138,    54,    15,   115,   112,    88,    35,
-      16,   500,   551,    19,   149,     7,     8,   122,    53,    45,
-       3,     4,     5,     6,    16,    17,   565,    19,    20,   134,
-     135,   138,   141,   138,   138,    30,   413,   142,   142,    22,
-      23,   260,   149,   262,   263,   534,   265,     7,     8,   337,
-      10,    11,    12,    13,    14,   149,    16,    17,   163,    19,
-      20,   138,   148,   311,   138,   138,   145,   138,   142,   357,
-     147,     0,   148,   266,   147,    35,   145,   566,   149,   298,
-     441,   186,   187,   188,   189,    45,   156,   306,   307,    19,
-     139,    16,   141,   137,    19,    34,   145,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   137,   113,   114,   470,
-      42,   472,    44,   218,   140,   501,   309,   143,   113,   114,
-     146,    17,   148,   228,    20,   131,   132,   375,   137,   377,
-     378,   379,   113,   114,    18,   130,   131,   132,   133,    56,
-      57,    58,    59,    60,    61,   143,   365,   366,   367,   130,
-     131,   132,   133,   139,   373,   141,   142,   518,    38,    39,
-      40,   266,   462,    43,   383,   384,   109,   110,   139,   555,
-     141,   557,   277,   403,   113,   114,   147,   139,    19,   141,
-     140,   143,    11,   143,   403,    14,   146,    19,   148,   294,
-     141,   130,   131,   132,   133,    39,    40,     3,     4,     5,
-       6,    31,    46,    33,   309,   310,   311,   426,    52,   428,
-     138,   139,   431,   141,   138,   139,    19,   141,   437,   438,
-     329,   330,   331,   332,   333,   473,   108,   109,   476,   477,
-     478,     4,   337,   342,   343,   344,   536,     4,   139,   539,
-     141,   142,   347,   134,   135,   136,   465,   466,    33,   468,
-     469,   139,    38,   141,    40,   474,    79,    80,   144,   144,
-       4,    19,   138,   142,   147,   484,     9,   142,   141,     9,
-     375,   376,   377,   378,   379,     9,    51,   382,   262,   263,
-      11,   265,   147,   141,   393,   394,   505,   392,   141,   141,
-     533,   400,   141,   141,   513,     7,     8,    19,    10,    11,
-      12,    13,    14,   141,    16,    17,   141,    19,    20,   552,
-     141,   138,   138,   141,   298,    34,   138,   138,   138,   138,
-     138,    34,   306,   307,   141,   141,    55,   138,   138,   143,
-     549,   138,   147,    45,   138,   554,   138,   442,   447,   448,
-     449,   450,   138,   138,   138,   454,   455,   138,   138,   138,
-      34,   456,   571,   572,    19,     4,   461,   576,   138,   142,
-     579,    19,   467,    14,    14,   141,   138,   138,   473,     4,
-     138,   476,   477,   478,   138,   138,   481,   486,   487,   138,
-     460,   365,   366,   367,   138,    22,    23,   138,   141,   373,
-      38,    39,    40,    41,    42,    43,    44,   138,    46,   383,
-     384,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,   138,   521,   138,   523,   524,    49,   147,   138,   142,
-     138,   138,   138,    19,   138,    49,    14,   142,   140,     4,
-     535,   143,   142,   142,   146,   143,   148,   149,   145,   142,
-     145,   142,   426,   142,   428,   142,   138,   431,   528,    14,
-      14,   138,    14,   437,   438,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,    67,
-      14,   125,   125,   125,   240,   528,   241,    88,     0,   501,
-     218,   465,   466,   228,   468,   469,   134,   135,   136,   107,
-     474,   101,    16,    15,    16,    17,    85,    19,    20,    55,
-     484,   481,   395,    -1,    26,    27,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   505,    -1,    -1,    -1,    47,    -1,    -1,    50,   513,
-       3,     4,    54,    -1,     7,     8,     9,    -1,    -1,    -1,
-      -1,    -1,    -1,    16,    17,    -1,    19,    20,    21,    22,
-      23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    36,    37,   549,    -1,    -1,    -1,    -1,
-     554,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      53,    -1,    -1,    -1,    -1,    -1,    -1,   571,   572,    -1,
-      -1,    -1,   576,    -1,    -1,   579,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,    -1,   125,    -1,   127,   128,   129,    -1,     3,     4,
-      -1,    -1,     7,     8,     9,    -1,   139,    -1,   141,    -1,
-      -1,    16,    17,   146,    19,    20,    21,    22,    23,    -1,
-      -1,    -1,    -1,    -1,     7,     8,    -1,    -1,    -1,    -1,
-      -1,    36,    37,    16,    17,    -1,    19,    20,    21,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    53,    -1,
-      -1,    -1,    -1,    36,    37,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    -1,    -1,    -1,    -1,    -1,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    -1,    -1,    -1,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,    -1,
-     125,    -1,   127,   128,   129,    -1,    -1,    -1,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   146,   125,    -1,   127,   128,   129,    -1,    -1,    -1,
-      -1,     3,     4,    -1,    -1,    -1,   139,     9,   141,    -1,
-     143,    -1,    -1,   146,    -1,   148,    -1,   150,    -1,    21,
-      22,    23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    36,    37,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     7,
-       8,    53,    10,    11,    12,    13,    14,    -1,    16,    17,
-      -1,    19,    20,    -1,    -1,    -1,    -1,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    -1,    -1,    -1,    45,    -1,    -1,
-       7,     8,    -1,    10,    11,    12,    13,    14,    -1,    16,
-      17,    -1,    19,    20,    -1,    -1,    -1,    -1,    -1,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,    -1,   125,    -1,   127,   128,   129,    45,     7,
-       8,    -1,    10,    11,    12,    13,    14,    -1,    16,    17,
-      -1,    19,    20,    -1,   146,     7,     8,    -1,    10,    11,
-      12,    13,    14,    -1,    16,    17,    -1,    19,    20,     7,
-       8,    -1,    10,    11,    12,    13,    14,    45,    16,    17,
-      -1,    19,    20,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   140,    45,    -1,   143,    -1,    -1,   146,    -1,
-     148,   149,    -1,    -1,    -1,    -1,    -1,    45,    -1,     7,
-       8,    -1,    10,    11,    12,    13,    14,    -1,    16,    17,
-      -1,    19,    20,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   140,    -1,    -1,   143,    35,    -1,   146,
-      -1,   148,   149,    -1,    -1,     7,     8,    45,    10,    11,
-      12,    13,    14,    -1,    16,    17,    -1,    19,    20,    -1,
-      -1,    -1,    -1,    -1,    -1,   117,    -1,    -1,    -1,    -1,
-      -1,    -1,   140,    35,    -1,   143,    -1,    -1,   146,    -1,
-     148,   149,    -1,    45,    -1,    -1,    -1,    -1,   140,    -1,
-      -1,   143,    -1,    -1,   146,    -1,   148,    -1,    -1,    -1,
-      -1,    -1,   140,    -1,    -1,   143,    -1,   145,   146,    -1,
-     148,     7,     8,    -1,    10,    11,    12,    13,    14,    -1,
-      16,    17,    -1,    19,    20,     7,     8,    -1,    10,    11,
-      12,    13,    14,    -1,    16,    17,    -1,    19,    20,    -1,
-      -1,    -1,   140,    -1,    -1,   143,    -1,    -1,   146,    45,
-     148,    -1,     7,     8,    -1,    10,    11,    12,    13,    14,
-      -1,    16,    17,    45,    19,    20,    -1,     7,     8,    -1,
-      10,    11,    12,    13,    14,    -1,    16,    17,   140,    19,
-      20,   143,    -1,    -1,   146,    -1,   148,    -1,     7,     8,
-      45,    10,    11,    12,    13,    14,    -1,    16,    17,    -1,
-      19,    20,    -1,     7,     8,    45,    10,    11,    12,    13,
-      14,    -1,    16,    17,    -1,    19,    20,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    45,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    45,    -1,    -1,   140,    -1,    -1,   143,    -1,    -1,
-     146,    -1,   148,    -1,    -1,    -1,    -1,    -1,   140,    -1,
-      -1,   143,    -1,    -1,   146,    -1,   148,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   140,    -1,    -1,   143,    -1,
-      -1,   146,    -1,   148,    -1,    -1,    -1,    -1,    -1,    -1,
-     140,    -1,    -1,   143,    -1,    -1,   146,    -1,   148,    -1,
-      -1,    -1,    -1,    -1,    32,    -1,    -1,    -1,    -1,    -1,
-      -1,   140,    -1,    -1,   143,    -1,    -1,   146,    -1,   148,
-      -1,    -1,    -1,    51,    52,    -1,   140,    -1,    -1,   143,
-      -1,    -1,   146,    -1,   148,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   106,   107,
-     108,    -1,    -1,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
-static const yytype_uint8 yystos[] =
-{
-       0,    16,    17,    19,    20,    26,    27,    47,    50,    54,
-     159,   161,   162,   163,   164,   195,   196,   197,   199,   198,
-      48,    62,   204,   137,    53,   137,    15,   137,    38,    39,
-      40,    41,    42,    43,    44,    46,   134,   135,   136,   165,
-     166,   167,     0,   197,    42,    44,   168,   214,    38,    39,
-      40,    43,   169,   211,   213,   220,   137,   137,   143,   205,
-      19,   203,     7,     8,    10,    11,    12,    13,    14,    45,
-     140,   143,   146,   148,   159,   162,   182,   183,   217,   167,
-     167,    31,    33,   193,   167,   167,    18,   221,   222,    25,
-     149,   212,   221,    19,    19,    19,   206,   141,     4,     4,
-       4,   148,    10,   149,   183,   188,   139,   141,   193,   193,
-      38,    40,   170,    28,    29,   192,    56,    57,    58,    59,
-      60,    61,   171,   209,   209,   161,   225,   138,   145,    35,
-     183,   184,   186,   187,   144,   144,   149,   188,   138,   149,
-     187,   192,   192,    10,   117,   183,   185,   194,    11,    12,
-      13,   157,   158,   183,   189,     4,   185,    24,   148,   210,
-      32,    51,    52,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,   106,   107,   108,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   152,   153,
-     154,   223,   229,   230,   231,   232,    19,   173,   138,   142,
-     183,   183,   147,   149,   183,   142,   189,   183,   141,   217,
-      22,    23,     3,     4,     5,     6,     9,    21,    36,    37,
-      84,    85,   111,   125,   127,   128,   129,   143,   146,   148,
-     150,   152,   153,   154,   190,   217,   200,   162,    51,    10,
-     183,   219,    11,    14,    11,   157,   171,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,   155,    22,    23,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   156,   183,   183,   219,   183,   183,
-     226,   219,   219,   219,   219,   219,   183,   183,   219,   171,
-     109,   110,   113,   114,   131,   132,   172,    35,   184,   175,
-     145,   147,   147,   175,   201,   202,   194,   155,   156,   141,
-     141,   141,   141,   141,   145,   189,   191,   148,   191,   149,
-     191,    19,   141,   141,   141,   138,   180,   141,     3,     4,
-       9,    21,    22,    23,    36,    37,    53,   146,   190,   216,
-     217,   218,   218,   218,   218,   185,   183,   183,   138,   177,
-     138,   177,   218,   143,   138,   138,   138,   138,   138,   138,
-     218,   218,    34,   185,   183,   219,   130,   133,   172,   174,
-     180,   180,    34,   141,   141,   189,   189,   189,   189,   189,
-     138,   145,   149,   183,   191,   147,   149,   189,   189,   189,
-      30,    49,   178,   181,    35,   183,   207,   208,    55,   215,
-     191,   138,   138,   218,   218,   218,    11,    49,    11,   228,
-     218,   143,   219,   183,   219,   219,   219,   138,   138,   183,
-     218,   218,   138,   183,   189,   189,   228,   138,   138,   138,
-     138,   189,   147,   149,   138,   138,    34,    19,     4,   180,
-     173,   138,   142,    19,   147,    14,    14,   141,   138,   138,
-     218,     4,   218,   138,   138,   218,   138,   138,   138,   218,
-     218,   141,   138,   177,   183,   142,   138,   138,   142,   189,
-     189,   189,   189,   147,   189,   189,   183,   159,   160,    35,
-     183,   175,   138,   218,   218,   183,   227,   218,   218,   177,
-     177,   219,   218,   138,   219,   219,   219,   227,   218,   189,
-     189,   138,   142,   138,   138,   142,   142,   142,   173,   178,
-     179,    19,   138,   143,   218,   138,   142,   145,   218,   142,
-     177,   142,   142,   189,   189,   189,   160,    49,   176,    14,
-     145,   157,   224,   173,   183,   175,   145,   175,   142,   142,
-     142,     4,   218,   216,   145,   157,   218,    34,   138,   216,
-     173,    14,    14,   138,   218,   218,    14,    67,   218,    14,
-     218
-};
+/* 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;
@@ -3132,705 +2222,672 @@
      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 1117 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;}
-    break;
+      int i;
 
-  case 30:
-#line 1117 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;}
-    break;
+      fprintf (stderr, "Reducing via rule %d (line %d), ",
+	       yyn, yyrline[yyn]);
 
-  case 31:
-#line 1118 "/home/asl/proj/llvm/src/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 1118 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;}
-    break;
 
-  case 33:
-#line 1119 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;}
-    break;
+  switch (yyn) {
 
-  case 34:
-#line 1119 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;}
-    break;
-
-  case 35:
-#line 1120 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;}
-    break;
-
-  case 36:
-#line 1120 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;}
-    break;
-
-  case 37:
-#line 1121 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;}
-    break;
-
-  case 38:
-#line 1121 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;}
-    break;
-
-  case 39:
-#line 1125 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;}
-    break;
-
-  case 40:
-#line 1125 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;}
-    break;
-
-  case 41:
-#line 1126 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;}
-    break;
-
-  case 42:
-#line 1126 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;}
-    break;
-
-  case 43:
-#line 1127 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;}
-    break;
-
-  case 44:
-#line 1127 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;}
-    break;
-
-  case 45:
-#line 1128 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;}
-    break;
-
-  case 46:
-#line 1128 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;}
-    break;
-
-  case 47:
-#line 1129 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;}
-    break;
-
-  case 48:
-#line 1129 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;}
-    break;
-
-  case 49:
-#line 1130 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;}
-    break;
-
-  case 50:
-#line 1130 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;}
-    break;
-
-  case 51:
-#line 1131 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;}
-    break;
-
-  case 52:
-#line 1131 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;}
-    break;
-
-  case 53:
-#line 1132 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;}
-    break;
-
-  case 54:
-#line 1133 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;}
-    break;
-
-  case 61:
-#line 1142 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.StrVal) = 0; ;}
-    break;
-
-  case 62:
-#line 1146 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.StrVal) = (yyvsp[(1) - (2)].StrVal);
+case 28:
+#line 1117 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_EQ; ;
+    break;}
+case 29:
+#line 1117 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_NE; ;
+    break;}
+case 30:
+#line 1118 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_SLT; ;
+    break;}
+case 31:
+#line 1118 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_SGT; ;
+    break;}
+case 32:
+#line 1119 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_SLE; ;
+    break;}
+case 33:
+#line 1119 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_SGE; ;
+    break;}
+case 34:
+#line 1120 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_ULT; ;
+    break;}
+case 35:
+#line 1120 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_UGT; ;
+    break;}
+case 36:
+#line 1121 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_ULE; ;
+    break;}
+case 37:
+#line 1121 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_UGE; ;
+    break;}
+case 38:
+#line 1125 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_OEQ; ;
+    break;}
+case 39:
+#line 1125 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_ONE; ;
+    break;}
+case 40:
+#line 1126 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_OLT; ;
+    break;}
+case 41:
+#line 1126 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_OGT; ;
+    break;}
+case 42:
+#line 1127 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_OLE; ;
+    break;}
+case 43:
+#line 1127 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_OGE; ;
+    break;}
+case 44:
+#line 1128 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_ORD; ;
+    break;}
+case 45:
+#line 1128 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_UNO; ;
+    break;}
+case 46:
+#line 1129 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_UEQ; ;
+    break;}
+case 47:
+#line 1129 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_UNE; ;
+    break;}
+case 48:
+#line 1130 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_ULT; ;
+    break;}
+case 49:
+#line 1130 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_UGT; ;
+    break;}
+case 50:
+#line 1131 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_ULE; ;
+    break;}
+case 51:
+#line 1131 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_UGE; ;
+    break;}
+case 52:
+#line 1132 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_TRUE; ;
+    break;}
+case 53:
+#line 1133 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_FALSE; ;
+    break;}
+case 60:
+#line 1142 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.StrVal = 0; ;
+    break;}
+case 61:
+#line 1146 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.StrVal = yyvsp[-1].StrVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 63:
-#line 1150 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.StrVal) = 0;
+  ;
+    break;}
+case 62:
+#line 1150 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.StrVal = 0;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 67:
-#line 1158 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.StrVal) = 0;
+  ;
+    break;}
+case 66:
+#line 1158 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.StrVal = 0;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 68:
-#line 1163 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.StrVal) = (yyvsp[(1) - (2)].StrVal);
+  ;
+    break;}
+case 67:
+#line 1163 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.StrVal = yyvsp[-1].StrVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 69:
-#line 1169 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
-    break;
-
-  case 70:
-#line 1170 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
-    break;
-
-  case 71:
-#line 1171 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
-    break;
-
-  case 72:
-#line 1172 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
-    break;
-
-  case 73:
-#line 1173 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
-    break;
-
-  case 74:
-#line 1177 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
-    break;
-
-  case 75:
-#line 1178 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
-    break;
-
-  case 76:
-#line 1179 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
-    break;
-
-  case 77:
-#line 1183 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Visibility) = GlobalValue::DefaultVisibility;   ;}
-    break;
-
-  case 78:
-#line 1184 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Visibility) = GlobalValue::DefaultVisibility;   ;}
-    break;
-
-  case 79:
-#line 1185 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Visibility) = GlobalValue::HiddenVisibility;    ;}
-    break;
-
-  case 80:
-#line 1186 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Visibility) = GlobalValue::ProtectedVisibility; ;}
-    break;
-
-  case 81:
-#line 1190 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
-    break;
-
-  case 82:
-#line 1191 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
-    break;
-
-  case 83:
-#line 1192 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
-    break;
-
-  case 84:
-#line 1196 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
-    break;
-
-  case 85:
-#line 1197 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
-    break;
-
-  case 86:
-#line 1198 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
-    break;
-
-  case 87:
-#line 1199 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
-    break;
-
-  case 88:
-#line 1200 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
-    break;
-
-  case 89:
-#line 1204 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
-    break;
-
-  case 90:
-#line 1205 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
-    break;
-
-  case 91:
-#line 1206 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
-    break;
-
-  case 92:
-#line 1209 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::C; ;}
-    break;
-
-  case 93:
-#line 1210 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::C; ;}
-    break;
-
-  case 94:
-#line 1211 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::Fast; ;}
-    break;
-
-  case 95:
-#line 1212 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::Cold; ;}
-    break;
-
-  case 96:
-#line 1213 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::X86_StdCall; ;}
-    break;
-
-  case 97:
-#line 1214 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::X86_FastCall; ;}
-    break;
-
-  case 98:
-#line 1215 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-                   if ((unsigned)(yyvsp[(2) - (2)].UInt64Val) != (yyvsp[(2) - (2)].UInt64Val))
+  ;
+    break;}
+case 68:
+#line 1169 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::InternalLinkage; ;
+    break;}
+case 69:
+#line 1170 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::WeakLinkage; ;
+    break;}
+case 70:
+#line 1171 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
+    break;}
+case 71:
+#line 1172 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::AppendingLinkage; ;
+    break;}
+case 72:
+#line 1173 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::DLLExportLinkage; ;
+    break;}
+case 73:
+#line 1177 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::DLLImportLinkage; ;
+    break;}
+case 74:
+#line 1178 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;
+    break;}
+case 75:
+#line 1179 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
+    break;}
+case 76:
+#line 1183 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Visibility = GlobalValue::DefaultVisibility;   ;
+    break;}
+case 77:
+#line 1184 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Visibility = GlobalValue::DefaultVisibility;   ;
+    break;}
+case 78:
+#line 1185 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Visibility = GlobalValue::HiddenVisibility;    ;
+    break;}
+case 79:
+#line 1186 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Visibility = GlobalValue::ProtectedVisibility; ;
+    break;}
+case 80:
+#line 1190 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
+    break;}
+case 81:
+#line 1191 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::DLLImportLinkage; ;
+    break;}
+case 82:
+#line 1192 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;
+    break;}
+case 83:
+#line 1196 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
+    break;}
+case 84:
+#line 1197 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::InternalLinkage; ;
+    break;}
+case 85:
+#line 1198 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
+    break;}
+case 86:
+#line 1199 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::WeakLinkage; ;
+    break;}
+case 87:
+#line 1200 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::DLLExportLinkage; ;
+    break;}
+case 88:
+#line 1204 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
+    break;}
+case 89:
+#line 1205 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::WeakLinkage; ;
+    break;}
+case 90:
+#line 1206 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::InternalLinkage; ;
+    break;}
+case 91:
+#line 1209 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::C; ;
+    break;}
+case 92:
+#line 1210 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::C; ;
+    break;}
+case 93:
+#line 1211 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::Fast; ;
+    break;}
+case 94:
+#line 1212 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::Cold; ;
+    break;}
+case 95:
+#line 1213 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::X86_StdCall; ;
+    break;}
+case 96:
+#line 1214 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::X86_FastCall; ;
+    break;}
+case 97:
+#line 1215 "/Users/sabre/cvs/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 99:
-#line 1222 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::ZExt;      ;}
-    break;
-
-  case 100:
-#line 1223 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::SExt;      ;}
-    break;
-
-  case 101:
-#line 1224 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::InReg;     ;}
-    break;
-
-  case 102:
-#line 1225 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::StructRet; ;}
-    break;
-
-  case 103:
-#line 1228 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::None; ;}
-    break;
-
-  case 104:
-#line 1229 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-                (yyval.ParamAttrs) = (yyvsp[(1) - (2)].ParamAttrs) | (yyvsp[(2) - (2)].ParamAttrs);
-              ;}
-    break;
-
-  case 105:
-#line 1234 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::NoReturn; ;}
-    break;
-
-  case 106:
-#line 1235 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::NoUnwind; ;}
-    break;
-
-  case 108:
-#line 1239 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::None; ;}
-    break;
-
-  case 109:
-#line 1240 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-                (yyval.ParamAttrs) = (yyvsp[(1) - (2)].ParamAttrs) | (yyvsp[(2) - (2)].ParamAttrs);
-              ;}
-    break;
-
-  case 110:
-#line 1247 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = 0; ;}
-    break;
-
-  case 111:
-#line 1248 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.UIntVal) = (yyvsp[(2) - (2)].UInt64Val);
-  if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
+                 ;
+    break;}
+case 98:
+#line 1222 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::ZExt;      ;
+    break;}
+case 99:
+#line 1223 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::SExt;      ;
+    break;}
+case 100:
+#line 1224 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::InReg;     ;
+    break;}
+case 101:
+#line 1225 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::StructRet; ;
+    break;}
+case 102:
+#line 1228 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::None; ;
+    break;}
+case 103:
+#line 1229 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+                yyval.ParamAttrs = yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs;
+              ;
+    break;}
+case 104:
+#line 1234 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::NoReturn; ;
+    break;}
+case 105:
+#line 1235 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::NoUnwind; ;
+    break;}
+case 107:
+#line 1239 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::None; ;
+    break;}
+case 108:
+#line 1240 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+                yyval.ParamAttrs = yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs;
+              ;
+    break;}
+case 109:
+#line 1247 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = 0; ;
+    break;}
+case 110:
+#line 1248 "/Users/sabre/cvs/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 112:
-#line 1254 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = 0; ;}
-    break;
-
-  case 113:
-#line 1255 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.UIntVal) = (yyvsp[(3) - (3)].UInt64Val);
-  if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
+;
+    break;}
+case 111:
+#line 1254 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = 0; ;
+    break;}
+case 112:
+#line 1255 "/Users/sabre/cvs/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 114:
-#line 1263 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-  for (unsigned i = 0, e = strlen((yyvsp[(2) - (2)].StrVal)); i != e; ++i)
-    if ((yyvsp[(2) - (2)].StrVal)[i] == '"' || (yyvsp[(2) - (2)].StrVal)[i] == '\\')
+;
+    break;}
+case 113:
+#line 1263 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+  for (unsigned i = 0, e = strlen(yyvsp[0].StrVal); i != e; ++i)
+    if (yyvsp[0].StrVal[i] == '"' || yyvsp[0].StrVal[i] == '\\')
       GEN_ERROR("Invalid character in section name");
-  (yyval.StrVal) = (yyvsp[(2) - (2)].StrVal);
+  yyval.StrVal = yyvsp[0].StrVal;
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 115:
-#line 1271 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.StrVal) = 0; ;}
-    break;
-
-  case 116:
-#line 1272 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.StrVal) = (yyvsp[(1) - (1)].StrVal); ;}
-    break;
-
-  case 117:
-#line 1277 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {;}
-    break;
-
-  case 118:
-#line 1278 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {;}
-    break;
-
-  case 119:
-#line 1279 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    CurGV->setSection((yyvsp[(1) - (1)].StrVal));
-    free((yyvsp[(1) - (1)].StrVal));
+;
+    break;}
+case 114:
+#line 1271 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.StrVal = 0; ;
+    break;}
+case 115:
+#line 1272 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.StrVal = yyvsp[0].StrVal; ;
+    break;}
+case 116:
+#line 1277 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{;
+    break;}
+case 117:
+#line 1278 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{;
+    break;}
+case 118:
+#line 1279 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    CurGV->setSection(yyvsp[0].StrVal);
+    free(yyvsp[0].StrVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 120:
-#line 1284 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[(2) - (2)].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[(2) - (2)].UInt64Val)))
+  ;
+    break;}
+case 119:
+#line 1284 "/Users/sabre/cvs/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 125:
-#line 1300 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
+  ;
+    break;}
+case 124:
+#line 1300 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeVal = new PATypeHolder(OpaqueType::get());
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 126:
-#line 1304 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeVal) = new PATypeHolder((yyvsp[(1) - (1)].PrimType));
+  ;
+    break;}
+case 125:
+#line 1304 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeVal = new PATypeHolder(yyvsp[0].PrimType);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 127:
-#line 1308 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {                             // Pointer type?
-    if (*(yyvsp[(1) - (2)].TypeVal) == Type::LabelTy)
+  ;
+    break;}
+case 126:
+#line 1308 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                             // Pointer type?
+    if (*yyvsp[-1].TypeVal == Type::LabelTy)
       GEN_ERROR("Cannot form a pointer to a basic block");
-    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PointerType::get(*(yyvsp[(1) - (2)].TypeVal))));
-    delete (yyvsp[(1) - (2)].TypeVal);
+    yyval.TypeVal = new PATypeHolder(HandleUpRefs(PointerType::get(*yyvsp[-1].TypeVal)));
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 128:
-#line 1315 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {            // Named types are also simple types...
-    const Type* tmp = getTypeVal((yyvsp[(1) - (1)].ValIDVal));
+  ;
+    break;}
+case 127:
+#line 1315 "/Users/sabre/cvs/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 129:
-#line 1320 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {                   // Type UpReference
-    if ((yyvsp[(2) - (2)].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range");
+    yyval.TypeVal = new PATypeHolder(tmp);
+  ;
+    break;}
+case 128:
+#line 1320 "/Users/sabre/cvs/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 130:
-#line 1328 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 129:
+#line 1328 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     std::vector<const Type*> Params;
     ParamAttrsVector Attrs;
-    if ((yyvsp[(5) - (5)].ParamAttrs) != ParamAttr::None) {
-      ParamAttrsWithIndex X; X.index = 0; X.attrs = (yyvsp[(5) - (5)].ParamAttrs);
+    if (yyvsp[0].ParamAttrs != ParamAttr::None) {
+      ParamAttrsWithIndex X; X.index = 0; X.attrs = yyvsp[0].ParamAttrs;
       Attrs.push_back(X);
     }
     unsigned index = 1;
-    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, ++index) {
       const Type *Ty = I->Ty->get();
       Params.push_back(Ty);
@@ -3846,24 +2903,23 @@
     ParamAttrsList *ActualAttrs = 0;
     if (!Attrs.empty())
       ActualAttrs = ParamAttrsList::get(Attrs);
-    FunctionType *FT = FunctionType::get(*(yyvsp[(1) - (5)].TypeVal), Params, isVarArg, ActualAttrs);
-    delete (yyvsp[(3) - (5)].TypeWithAttrsList);   // Delete the argument list
-    delete (yyvsp[(1) - (5)].TypeVal);   // Delete the return type handle
-    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT)); 
+    FunctionType *FT = FunctionType::get(*yyvsp[-4].TypeVal, Params, isVarArg, ActualAttrs);
+    delete yyvsp[-2].TypeWithAttrsList;   // Delete the argument list
+    delete yyvsp[-4].TypeVal;   // Delete the return type handle
+    yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT)); 
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 131:
-#line 1358 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 130:
+#line 1358 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     std::vector<const Type*> Params;
     ParamAttrsVector Attrs;
-    if ((yyvsp[(5) - (5)].ParamAttrs) != ParamAttr::None) {
-      ParamAttrsWithIndex X; X.index = 0; X.attrs = (yyvsp[(5) - (5)].ParamAttrs);
+    if (yyvsp[0].ParamAttrs != ParamAttr::None) {
+      ParamAttrsWithIndex X; X.index = 0; X.attrs = yyvsp[0].ParamAttrs;
       Attrs.push_back(X);
     }
-    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();
     unsigned index = 1;
     for ( ; I != E; ++I, ++index) {
       const Type* Ty = I->Ty->get();
@@ -3881,305 +2937,284 @@
     if (!Attrs.empty())
       ActualAttrs = ParamAttrsList::get(Attrs);
 
-    FunctionType *FT = FunctionType::get((yyvsp[(1) - (5)].PrimType), Params, isVarArg, ActualAttrs);
-    delete (yyvsp[(3) - (5)].TypeWithAttrsList);      // Delete the argument list
-    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT)); 
+    FunctionType *FT = FunctionType::get(yyvsp[-4].PrimType, Params, isVarArg, ActualAttrs);
+    delete yyvsp[-2].TypeWithAttrsList;      // Delete the argument list
+    yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT)); 
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 132:
-#line 1389 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {          // Sized array type?
-    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[(4) - (5)].TypeVal), (unsigned)(yyvsp[(2) - (5)].UInt64Val))));
-    delete (yyvsp[(4) - (5)].TypeVal);
+  ;
+    break;}
+case 131:
+#line 1389 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{          // Sized array type?
+    yyval.TypeVal = new PATypeHolder(HandleUpRefs(ArrayType::get(*yyvsp[-1].TypeVal, (unsigned)yyvsp[-3].UInt64Val)));
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 133:
-#line 1394 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {          // Vector type?
-     const llvm::Type* ElemTy = (yyvsp[(4) - (5)].TypeVal)->get();
-     if ((unsigned)(yyvsp[(2) - (5)].UInt64Val) != (yyvsp[(2) - (5)].UInt64Val))
+  ;
+    break;}
+case 132:
+#line 1394 "/Users/sabre/cvs/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");
-     if (!isPowerOf2_32((yyvsp[(2) - (5)].UInt64Val)))
+     if (!isPowerOf2_32(yyvsp[-3].UInt64Val))
        GEN_ERROR("Vector length should be a power of 2");
-     (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 134:
-#line 1406 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {                        // Structure type?
+  ;
+    break;}
+case 133:
+#line 1406 "/Users/sabre/cvs/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 135:
-#line 1416 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {                                  // Empty structure type?
-    (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>()));
+  ;
+    break;}
+case 134:
+#line 1416 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                                  // Empty structure type?
+    yyval.TypeVal = new PATypeHolder(StructType::get(std::vector<const Type*>()));
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 136:
-#line 1420 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 135:
+#line 1420 "/Users/sabre/cvs/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 137:
-#line 1430 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {                         // Empty structure type?
-    (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
+  ;
+    break;}
+case 136:
+#line 1430 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                         // Empty structure type?
+    yyval.TypeVal = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 138:
-#line 1437 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { 
-    (yyval.TypeWithAttrs).Ty = (yyvsp[(1) - (2)].TypeVal); 
-    (yyval.TypeWithAttrs).Attrs = (yyvsp[(2) - (2)].ParamAttrs); 
-  ;}
-    break;
-
-  case 139:
-#line 1444 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 137:
+#line 1437 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ 
+    yyval.TypeWithAttrs.Ty = yyvsp[-1].TypeVal; 
+    yyval.TypeWithAttrs.Attrs = yyvsp[0].ParamAttrs; 
+  ;
+    break;}
+case 138:
+#line 1444 "/Users/sabre/cvs/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 140:
-#line 1451 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeVal) = new PATypeHolder(Type::VoidTy);
-  ;}
-    break;
-
-  case 141:
-#line 1456 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
-    (yyval.TypeWithAttrsList)->push_back((yyvsp[(1) - (1)].TypeWithAttrs));
+    yyval.TypeVal = yyvsp[0].TypeVal;
+  ;
+    break;}
+case 139:
+#line 1451 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeVal = new PATypeHolder(Type::VoidTy);
+  ;
+    break;}
+case 140:
+#line 1456 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeWithAttrsList = new TypeWithAttrsList();
+    yyval.TypeWithAttrsList->push_back(yyvsp[0].TypeWithAttrs);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 142:
-#line 1461 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    ((yyval.TypeWithAttrsList)=(yyvsp[(1) - (3)].TypeWithAttrsList))->push_back((yyvsp[(3) - (3)].TypeWithAttrs));
+  ;
+    break;}
+case 141:
+#line 1461 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    (yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList)->push_back(yyvsp[0].TypeWithAttrs);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 144:
-#line 1469 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeWithAttrsList)=(yyvsp[(1) - (3)].TypeWithAttrsList);
+  ;
+    break;}
+case 143:
+#line 1469 "/Users/sabre/cvs/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 145:
-#line 1476 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeWithAttrsList) = new TypeWithAttrsList;
+  ;
+    break;}
+case 144:
+#line 1476 "/Users/sabre/cvs/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 146:
-#line 1483 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
+  ;
+    break;}
+case 145:
+#line 1483 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeWithAttrsList = new TypeWithAttrsList();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 147:
-#line 1491 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeList) = new std::list<PATypeHolder>();
-    (yyval.TypeList)->push_back(*(yyvsp[(1) - (1)].TypeVal)); 
-    delete (yyvsp[(1) - (1)].TypeVal);
+  ;
+    break;}
+case 146:
+#line 1491 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeList = new std::list<PATypeHolder>();
+    yyval.TypeList->push_back(*yyvsp[0].TypeVal); 
+    delete yyvsp[0].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 148:
-#line 1497 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    ((yyval.TypeList)=(yyvsp[(1) - (3)].TypeList))->push_back(*(yyvsp[(3) - (3)].TypeVal)); 
-    delete (yyvsp[(3) - (3)].TypeVal);
+  ;
+    break;}
+case 147:
+#line 1497 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    (yyval.TypeList=yyvsp[-2].TypeList)->push_back(*yyvsp[0].TypeVal); 
+    delete yyvsp[0].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 149:
-#line 1509 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { // Nonempty unsized arr
+  ;
+    break;}
+case 148:
+#line 1509 "/Users/sabre/cvs/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 150:
-#line 1537 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 149:
+#line 1537 "/Users/sabre/cvs/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 151:
-#line 1553 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 150:
+#line 1553 "/Users/sabre/cvs/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();
-    char *EndStr = UnEscapeLexed((yyvsp[(3) - (3)].StrVal), true);
-    if (NumElements != -1 && NumElements != (EndStr-(yyvsp[(3) - (3)].StrVal)))
+    char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true);
+    if (NumElements != -1 && NumElements != (EndStr-yyvsp[0].StrVal))
       GEN_ERROR("Can't build string constant of size " + 
-                     itostr((int)(EndStr-(yyvsp[(3) - (3)].StrVal))) +
+                     itostr((int)(EndStr-yyvsp[0].StrVal)) +
                      " when array has size " + itostr(NumElements) + "");
     std::vector<Constant*> Vals;
     if (ETy == Type::Int8Ty) {
-      for (unsigned char *C = (unsigned char *)(yyvsp[(3) - (3)].StrVal); 
+      for (unsigned char *C = (unsigned char *)yyvsp[0].StrVal; 
         C != (unsigned char*)EndStr; ++C)
       Vals.push_back(ConstantInt::get(ETy, *C));
     } else {
-      free((yyvsp[(3) - (3)].StrVal));
+      free(yyvsp[0].StrVal);
       GEN_ERROR("Cannot build string arrays of non byte sized elements");
     }
-    free((yyvsp[(3) - (3)].StrVal));
-    (yyval.ConstVal) = ConstantArray::get(ATy, Vals);
-    delete (yyvsp[(1) - (3)].TypeVal);
+    free(yyvsp[0].StrVal);
+    yyval.ConstVal = ConstantArray::get(ATy, Vals);
+    delete yyvsp[-2].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 152:
-#line 1582 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { // Nonempty unsized arr
+  ;
+    break;}
+case 151:
+#line 1582 "/Users/sabre/cvs/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 153:
-#line 1610 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    const StructType *STy = dyn_cast<StructType>((yyvsp[(1) - (4)].TypeVal)->get());
+  ;
+    break;}
+case 152:
+#line 1610 "/Users/sabre/cvs/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) +
@@ -4190,21 +3225,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 154:
-#line 1636 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 153:
+#line 1636 "/Users/sabre/cvs/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");
@@ -4214,26 +3248,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 155:
-#line 1656 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    const StructType *STy = dyn_cast<StructType>((yyvsp[(1) - (6)].TypeVal)->get());
+  ;
+    break;}
+case 154:
+#line 1656 "/Users/sabre/cvs/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) +
@@ -4244,21 +3277,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 156:
-#line 1682 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 155:
+#line 1682 "/Users/sabre/cvs/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");
@@ -4268,45 +3300,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 157:
-#line 1702 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 156:
+#line 1702 "/Users/sabre/cvs/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 158:
-#line 1714 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 157:
+#line 1714 "/Users/sabre/cvs/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 159:
-#line 1721 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 158:
+#line 1721 "/Users/sabre/cvs/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");
 
@@ -4320,7 +3349,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;
@@ -4335,16 +3364,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).Name;
-        else if ((yyvsp[(2) - (2)].ValIDVal).Type != ValID::GlobalID)
+        if (yyvsp[0].ValIDVal.Type == ValID::GlobalName)
+          Name = yyvsp[0].ValIDVal.Name;
+        else if (yyvsp[0].ValIDVal.Type != ValID::GlobalID)
           GEN_ERROR("Invalid reference to global");
 
         // Create the forward referenced global.
@@ -4360,371 +3389,336 @@
         }
 
         // 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 160:
-#line 1787 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 159:
+#line 1787 "/Users/sabre/cvs/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 161:
-#line 1797 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 160:
+#line 1797 "/Users/sabre/cvs/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 162:
-#line 1807 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {      // integral constants
-    if (!ConstantInt::isValueValidForType((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].SInt64Val)))
+  ;
+    break;}
+case 161:
+#line 1807 "/Users/sabre/cvs/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 163:
-#line 1813 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {      // arbitrary precision integer constants
-    uint32_t BitWidth = cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth();
-    if ((yyvsp[(2) - (2)].APIntVal)->getBitWidth() > BitWidth) {
+  ;
+    break;}
+case 162:
+#line 1813 "/Users/sabre/cvs/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 164:
-#line 1823 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {      // integral constants
-    if (!ConstantInt::isValueValidForType((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].UInt64Val)))
+  ;
+    break;}
+case 163:
+#line 1823 "/Users/sabre/cvs/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 165:
-#line 1829 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {      // arbitrary precision integer constants
-    uint32_t BitWidth = cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth();
-    if ((yyvsp[(2) - (2)].APIntVal)->getBitWidth() > BitWidth) {
+  ;
+    break;}
+case 164:
+#line 1829 "/Users/sabre/cvs/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 166:
-#line 1839 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {                      // Boolean constants
-    assert(cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth() == 1 && "Not Bool?");
-    (yyval.ConstVal) = ConstantInt::getTrue();
+  ;
+    break;}
+case 165:
+#line 1839 "/Users/sabre/cvs/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 167:
-#line 1844 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {                     // Boolean constants
-    assert(cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth() == 1 && "Not Bool?");
-    (yyval.ConstVal) = ConstantInt::getFalse();
+  ;
+    break;}
+case 166:
+#line 1844 "/Users/sabre/cvs/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 168:
-#line 1849 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {                   // Float & Double constants
-    if (!ConstantFP::isValueValidForType((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].FPVal)))
+  ;
+    break;}
+case 167:
+#line 1849 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                   // Float & Double constants
+    if (!ConstantFP::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].FPVal))
       GEN_ERROR("Floating point constant invalid for type");
-    (yyval.ConstVal) = ConstantFP::get((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].FPVal));
+    yyval.ConstVal = ConstantFP::get(yyvsp[-1].PrimType, yyvsp[0].FPVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 169:
-#line 1857 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 168:
+#line 1857 "/Users/sabre/cvs/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 170:
-#line 1869 "/home/asl/proj/llvm/src/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 169:
+#line 1869 "/Users/sabre/cvs/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))[0], (yyvsp[(4) - (5)].ValueList)->size(),
+      GetElementPtrInst::getIndexedType(yyvsp[-2].ConstVal->getType(), &(*yyvsp[-1].ValueList)[0], yyvsp[-1].ValueList->size(),
                                         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 171:
-#line 1891 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[(3) - (8)].ConstVal)->getType() != Type::Int1Ty)
+  ;
+    break;}
+case 170:
+#line 1891 "/Users/sabre/cvs/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 172:
-#line 1899 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[(3) - (6)].ConstVal)->getType() != (yyvsp[(5) - (6)].ConstVal)->getType())
+  ;
+    break;}
+case 171:
+#line 1899 "/Users/sabre/cvs/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 173:
-#line 1905 "/home/asl/proj/llvm/src/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 172:
+#line 1905 "/Users/sabre/cvs/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 174:
-#line 1916 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[(4) - (7)].ConstVal)->getType() != (yyvsp[(6) - (7)].ConstVal)->getType())
+  ;
+    break;}
+case 173:
+#line 1916 "/Users/sabre/cvs/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 175:
-#line 1921 "/home/asl/proj/llvm/src/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 174:
+#line 1921 "/Users/sabre/cvs/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 176:
-#line 1926 "/home/asl/proj/llvm/src/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 175:
+#line 1926 "/Users/sabre/cvs/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 177:
-#line 1932 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!InsertElementInst::isValidOperands((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal)))
+  ;
+    break;}
+case 176:
+#line 1932 "/Users/sabre/cvs/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 178:
-#line 1938 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!ShuffleVectorInst::isValidOperands((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal)))
+  ;
+    break;}
+case 177:
+#line 1938 "/Users/sabre/cvs/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 179:
-#line 1947 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    ((yyval.ConstVector) = (yyvsp[(1) - (3)].ConstVector))->push_back((yyvsp[(3) - (3)].ConstVal));
+  ;
+    break;}
+case 178:
+#line 1947 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    (yyval.ConstVector = yyvsp[-2].ConstVector)->push_back(yyvsp[0].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 180:
-#line 1951 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ConstVector) = new std::vector<Constant*>();
-    (yyval.ConstVector)->push_back((yyvsp[(1) - (1)].ConstVal));
+  ;
+    break;}
+case 179:
+#line 1951 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ConstVector = new std::vector<Constant*>();
+    yyval.ConstVector->push_back(yyvsp[0].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 181:
-#line 1959 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.BoolVal) = false; ;}
-    break;
-
-  case 182:
-#line 1959 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.BoolVal) = true; ;}
-    break;
-
-  case 183:
-#line 1962 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.BoolVal) = true; ;}
-    break;
-
-  case 184:
-#line 1962 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.BoolVal) = false; ;}
-    break;
-
-  case 185:
-#line 1965 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    const Type* VTy = (yyvsp[(1) - (2)].TypeVal)->get();
-    Value *V = getVal(VTy, (yyvsp[(2) - (2)].ValIDVal));
+  ;
+    break;}
+case 180:
+#line 1959 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.BoolVal = false; ;
+    break;}
+case 181:
+#line 1959 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.BoolVal = true; ;
+    break;}
+case 182:
+#line 1962 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.BoolVal = true; ;
+    break;}
+case 183:
+#line 1962 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.BoolVal = false; ;
+    break;}
+case 184:
+#line 1965 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    const Type* VTy = yyvsp[-1].TypeVal->get();
+    Value *V = getVal(VTy, yyvsp[0].ValIDVal);
     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 186:
-#line 1976 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    Constant *Val = (yyvsp[(3) - (6)].ConstVal);
-    const Type *DestTy = (yyvsp[(5) - (6)].TypeVal)->get();
-    if (!CastInst::castIsValid((yyvsp[(1) - (6)].CastOpVal), (yyvsp[(3) - (6)].ConstVal), DestTy))
+    delete yyvsp[-1].TypeVal;
+   ;
+    break;}
+case 185:
+#line 1976 "/Users/sabre/cvs/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 187:
-#line 1997 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
+    delete yyvsp[-1].TypeVal;
+   ;
+    break;}
+case 186:
+#line 1997 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ModuleVal = ParserResult = CurModule.CurrentModule;
     CurModule.ModuleDone();
     CHECK_FOR_ERROR;
-  ;}
-    break;
-
-  case 188:
-#line 2002 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
+  ;
+    break;}
+case 187:
+#line 2002 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ModuleVal = ParserResult = CurModule.CurrentModule;
     CurModule.ModuleDone();
     CHECK_FOR_ERROR;
-  ;}
-    break;
-
-  case 191:
-#line 2015 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { CurFun.isDeclare = false; ;}
-    break;
-
-  case 192:
-#line 2015 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 190:
+#line 2015 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ CurFun.isDeclare = false; ;
+    break;}
+case 191:
+#line 2015 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CurFun.FunctionDone();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 193:
-#line 2019 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { CurFun.isDeclare = true; ;}
-    break;
-
-  case 194:
-#line 2019 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 192:
+#line 2019 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ CurFun.isDeclare = true; ;
+    break;}
+case 193:
+#line 2019 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 195:
-#line 2022 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 194:
+#line 2022 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 196:
-#line 2025 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 195:
+#line 2025 "/Users/sabre/cvs/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:
     //
@@ -4734,271 +3728,248 @@
     // 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 196:
+#line 2049 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    ResolveTypeTo(yyvsp[-2].StrVal, yyvsp[0].PrimType);
 
-  case 197:
-#line 2049 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    ResolveTypeTo((yyvsp[(1) - (3)].StrVal), (yyvsp[(3) - (3)].PrimType));
-
-    if (!setTypeName((yyvsp[(3) - (3)].PrimType), (yyvsp[(1) - (3)].StrVal)) && !(yyvsp[(1) - (3)].StrVal)) {
+    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 198:
-#line 2060 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { 
+  ;
+    break;}
+case 197:
+#line 2060 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ 
     /* "Externally Visible" Linkage */
-    if ((yyvsp[(5) - (5)].ConstVal) == 0) 
+    if (yyvsp[0].ConstVal == 0) 
       GEN_ERROR("Global value initializer is not a constant");
-    CurGV = ParseGlobalVariable((yyvsp[(1) - (5)].StrVal), GlobalValue::ExternalLinkage,
-                                (yyvsp[(2) - (5)].Visibility), (yyvsp[(4) - (5)].BoolVal), (yyvsp[(5) - (5)].ConstVal)->getType(), (yyvsp[(5) - (5)].ConstVal), (yyvsp[(3) - (5)].BoolVal));
+    CurGV = ParseGlobalVariable(yyvsp[-4].StrVal, GlobalValue::ExternalLinkage,
+                                yyvsp[-3].Visibility, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal, yyvsp[-2].BoolVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 199:
-#line 2067 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 198:
+#line 2067 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CurGV = 0;
-  ;}
-    break;
-
-  case 200:
-#line 2071 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[(6) - (6)].ConstVal) == 0) 
+  ;
+    break;}
+case 199:
+#line 2071 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (yyvsp[0].ConstVal == 0) 
       GEN_ERROR("Global value initializer is not a constant");
-    CurGV = ParseGlobalVariable((yyvsp[(1) - (6)].StrVal), (yyvsp[(2) - (6)].Linkage), (yyvsp[(3) - (6)].Visibility), (yyvsp[(5) - (6)].BoolVal), (yyvsp[(6) - (6)].ConstVal)->getType(), (yyvsp[(6) - (6)].ConstVal), (yyvsp[(4) - (6)].BoolVal));
+    CurGV = ParseGlobalVariable(yyvsp[-5].StrVal, yyvsp[-4].Linkage, yyvsp[-3].Visibility, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal, yyvsp[-2].BoolVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 201:
-#line 2076 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 200:
+#line 2076 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CurGV = 0;
-  ;}
-    break;
-
-  case 202:
-#line 2080 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 201:
+#line 2080 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(6) - (6)].TypeVal))->getDescription());
-    CurGV = ParseGlobalVariable((yyvsp[(1) - (6)].StrVal), (yyvsp[(2) - (6)].Linkage), (yyvsp[(3) - (6)].Visibility), (yyvsp[(5) - (6)].BoolVal), *(yyvsp[(6) - (6)].TypeVal), 0, (yyvsp[(4) - (6)].BoolVal));
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
+    CurGV = ParseGlobalVariable(yyvsp[-5].StrVal, yyvsp[-4].Linkage, yyvsp[-3].Visibility, yyvsp[-1].BoolVal, *yyvsp[0].TypeVal, 0, yyvsp[-2].BoolVal);
     CHECK_FOR_ERROR
-    delete (yyvsp[(6) - (6)].TypeVal);
-  ;}
-    break;
-
-  case 203:
-#line 2086 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+    delete yyvsp[0].TypeVal;
+  ;
+    break;}
+case 202:
+#line 2086 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CurGV = 0;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 204:
-#line 2090 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    std::string Name((yyvsp[(1) - (5)].StrVal));
+  ;
+    break;}
+case 203:
+#line 2090 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    std::string Name(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: ") + (yyvsp[(1) - (5)].StrVal));
+      GEN_ERROR(std::string("Invalid aliasee for alias: ") + yyvsp[-4].StrVal);
 
-    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);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 205:
-#line 2105 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { 
+  ;
+    break;}
+case 204:
+#line 2105 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ 
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 206:
-#line 2108 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 205:
+#line 2108 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 207:
-#line 2114 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 206:
+#line 2114 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
   const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
-  char *EndStr = UnEscapeLexed((yyvsp[(1) - (1)].StrVal), true);
-  std::string NewAsm((yyvsp[(1) - (1)].StrVal), EndStr);
-  free((yyvsp[(1) - (1)].StrVal));
+  char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true);
+  std::string NewAsm(yyvsp[0].StrVal, EndStr);
+  free(yyvsp[0].StrVal);
 
   if (AsmSoFar.empty())
     CurModule.CurrentModule->setModuleInlineAsm(NewAsm);
   else
     CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm);
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 208:
-#line 2127 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    CurModule.CurrentModule->setTargetTriple((yyvsp[(3) - (3)].StrVal));
-    free((yyvsp[(3) - (3)].StrVal));
-  ;}
-    break;
-
-  case 209:
-#line 2131 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    CurModule.CurrentModule->setDataLayout((yyvsp[(3) - (3)].StrVal));
-    free((yyvsp[(3) - (3)].StrVal));
-  ;}
-    break;
-
-  case 211:
-#line 2138 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-          CurModule.CurrentModule->addLibrary((yyvsp[(3) - (3)].StrVal));
-          free((yyvsp[(3) - (3)].StrVal));
+;
+    break;}
+case 207:
+#line 2127 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    CurModule.CurrentModule->setTargetTriple(yyvsp[0].StrVal);
+    free(yyvsp[0].StrVal);
+  ;
+    break;}
+case 208:
+#line 2131 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    CurModule.CurrentModule->setDataLayout(yyvsp[0].StrVal);
+    free(yyvsp[0].StrVal);
+  ;
+    break;}
+case 210:
+#line 2138 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+          CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
+          free(yyvsp[0].StrVal);
           CHECK_FOR_ERROR
-        ;}
-    break;
-
-  case 212:
-#line 2143 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-          CurModule.CurrentModule->addLibrary((yyvsp[(1) - (1)].StrVal));
-          free((yyvsp[(1) - (1)].StrVal));
+        ;
+    break;}
+case 211:
+#line 2143 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+          CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
+          free(yyvsp[0].StrVal);
           CHECK_FOR_ERROR
-        ;}
-    break;
-
-  case 213:
-#line 2148 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+        ;
+    break;}
+case 212:
+#line 2148 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
           CHECK_FOR_ERROR
-        ;}
-    break;
-
-  case 214:
-#line 2157 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+        ;
+    break;}
+case 213:
+#line 2157 "/Users/sabre/cvs/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 215:
-#line 2167 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 214:
+#line 2167 "/Users/sabre/cvs/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 216:
-#line 2178 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ArgList) = (yyvsp[(1) - (1)].ArgList);
+  ;
+    break;}
+case 215:
+#line 2178 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ArgList = yyvsp[0].ArgList;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 217:
-#line 2182 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ArgList) = (yyvsp[(1) - (3)].ArgList);
+  ;
+    break;}
+case 216:
+#line 2182 "/Users/sabre/cvs/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 218:
-#line 2191 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ArgList) = new ArgListType;
+  ;
+    break;}
+case 217:
+#line 2191 "/Users/sabre/cvs/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 219:
-#line 2200 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ArgList) = 0;
+  ;
+    break;}
+case 218:
+#line 2200 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ArgList = 0;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 220:
-#line 2206 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-  UnEscapeLexed((yyvsp[(3) - (9)].StrVal));
-  std::string FunctionName((yyvsp[(3) - (9)].StrVal));
-  free((yyvsp[(3) - (9)].StrVal));  // Free strdup'd memory!
+  ;
+    break;}
+case 219:
+#line 2206 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+  UnEscapeLexed(yyvsp[-6].StrVal);
+  std::string FunctionName(yyvsp[-6].StrVal);
+  free(yyvsp[-6].StrVal);  // Free strdup'd memory!
   
   // 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) - (9)].TypeVal)))
-    GEN_ERROR("Reference to abstract result: "+ (yyvsp[(2) - (9)].TypeVal)->get()->getDescription());
+  if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(yyvsp[-7].TypeVal))
+    GEN_ERROR("Reference to abstract result: "+ yyvsp[-7].TypeVal->get()->getDescription());
 
   std::vector<const Type*> ParamTypeList;
   ParamAttrsVector Attrs;
-  if ((yyvsp[(7) - (9)].ParamAttrs) != ParamAttr::None) {
-    ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = (yyvsp[(7) - (9)].ParamAttrs);
+  if (yyvsp[-2].ParamAttrs != ParamAttr::None) {
+    ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = yyvsp[-2].ParamAttrs;
     Attrs.push_back(PAWI);
   }
-  if ((yyvsp[(5) - (9)].ArgList)) {   // If there are arguments...
+  if (yyvsp[-4].ArgList) {   // If there are arguments...
     unsigned index = 1;
-    for (ArgListType::iterator I = (yyvsp[(5) - (9)].ArgList)->begin(); I != (yyvsp[(5) - (9)].ArgList)->end(); ++I, ++index) {
+    for (ArgListType::iterator I = yyvsp[-4].ArgList->begin(); I != yyvsp[-4].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());
@@ -5018,9 +3989,9 @@
   if (!Attrs.empty())
     PAL = ParamAttrsList::get(Attrs);
 
-  FunctionType *FT = FunctionType::get(*(yyvsp[(2) - (9)].TypeVal), ParamTypeList, isVarArg, PAL);
+  FunctionType *FT = FunctionType::get(*yyvsp[-7].TypeVal, ParamTypeList, isVarArg, PAL);
   const PointerType *PFT = PointerType::get(FT);
-  delete (yyvsp[(2) - (9)].TypeVal);
+  delete yyvsp[-7].TypeVal;
 
   ValID ID;
   if (!FunctionName.empty()) {
@@ -5069,26 +4040,26 @@
     Fn->setLinkage(CurFun.Linkage);
     Fn->setVisibility(CurFun.Visibility);
   }
-  Fn->setCallingConv((yyvsp[(1) - (9)].UIntVal));
-  Fn->setAlignment((yyvsp[(9) - (9)].UIntVal));
-  if ((yyvsp[(8) - (9)].StrVal)) {
-    Fn->setSection((yyvsp[(8) - (9)].StrVal));
-    free((yyvsp[(8) - (9)].StrVal));
+  Fn->setCallingConv(yyvsp[-8].UIntVal);
+  Fn->setAlignment(yyvsp[0].UIntVal);
+  if (yyvsp[-1].StrVal) {
+    Fn->setSection(yyvsp[-1].StrVal);
+    free(yyvsp[-1].StrVal);
   }
 
   // Add all of the arguments we parsed to the function...
-  if ((yyvsp[(5) - (9)].ArgList)) {                     // Is null if empty...
+  if (yyvsp[-4].ArgList) {                     // Is null if empty...
     if (isVarArg) {  // Nuke the last entry
-      assert((yyvsp[(5) - (9)].ArgList)->back().Ty->get() == Type::VoidTy && (yyvsp[(5) - (9)].ArgList)->back().Name == 0 &&
+      assert(yyvsp[-4].ArgList->back().Ty->get() == Type::VoidTy && yyvsp[-4].ArgList->back().Name == 0 &&
              "Not a varargs marker!");
-      delete (yyvsp[(5) - (9)].ArgList)->back().Ty;
-      (yyvsp[(5) - (9)].ArgList)->pop_back();  // Delete the last entry
+      delete yyvsp[-4].ArgList->back().Ty;
+      yyvsp[-4].ArgList->pop_back();  // Delete the last entry
     }
     Function::arg_iterator ArgIt = Fn->arg_begin();
     Function::arg_iterator ArgEnd = Fn->arg_end();
     unsigned Idx = 1;
-    for (ArgListType::iterator I = (yyvsp[(5) - (9)].ArgList)->begin(); 
-         I != (yyvsp[(5) - (9)].ArgList)->end() && ArgIt != ArgEnd; ++I, ++ArgIt) {
+    for (ArgListType::iterator I = yyvsp[-4].ArgList->begin(); 
+         I != yyvsp[-4].ArgList->end() && ArgIt != ArgEnd; ++I, ++ArgIt) {
       delete I->Ty;                          // Delete the typeholder...
       setValueName(ArgIt, I->Name);          // Insert arg into symtab...
       CHECK_FOR_ERROR
@@ -5096,128 +4067,114 @@
       Idx++;
     }
 
-    delete (yyvsp[(5) - (9)].ArgList);                     // We're now done with the argument list
+    delete yyvsp[-4].ArgList;                     // We're now done with the argument list
   }
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 223:
-#line 2329 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.FunctionVal) = CurFun.CurrentFunction;
+;
+    break;}
+case 222:
+#line 2329 "/Users/sabre/cvs/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 226:
-#line 2340 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal);
+  yyval.FunctionVal->setLinkage(yyvsp[-3].Linkage);
+  yyval.FunctionVal->setVisibility(yyvsp[-2].Visibility);
+;
+    break;}
+case 225:
+#line 2340 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+  yyval.FunctionVal = yyvsp[-1].FunctionVal;
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 227:
-#line 2345 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    CurFun.CurrentFunction->setLinkage((yyvsp[(1) - (3)].Linkage));
-    CurFun.CurrentFunction->setVisibility((yyvsp[(2) - (3)].Visibility));
-    (yyval.FunctionVal) = CurFun.CurrentFunction;
+;
+    break;}
+case 226:
+#line 2345 "/Users/sabre/cvs/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 228:
-#line 2357 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = false;
+  ;
+    break;}
+case 227:
+#line 2357 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = false;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 229:
-#line 2361 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = true;
+  ;
+    break;}
+case 228:
+#line 2361 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = true;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 230:
-#line 2366 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {    // A reference to a direct constant
-    (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].SInt64Val));
+  ;
+    break;}
+case 229:
+#line 2366 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{    // A reference to a direct constant
+    yyval.ValIDVal = ValID::create(yyvsp[0].SInt64Val);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 231:
-#line 2370 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].UInt64Val));
+  ;
+    break;}
+case 230:
+#line 2370 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::create(yyvsp[0].UInt64Val);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 232:
-#line 2374 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {                     // Perhaps it's an FP constant?
-    (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].FPVal));
+  ;
+    break;}
+case 231:
+#line 2374 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                     // Perhaps it's an FP constant?
+    yyval.ValIDVal = ValID::create(yyvsp[0].FPVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 233:
-#line 2378 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::create(ConstantInt::getTrue());
+  ;
+    break;}
+case 232:
+#line 2378 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::create(ConstantInt::getTrue());
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 234:
-#line 2382 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::create(ConstantInt::getFalse());
+  ;
+    break;}
+case 233:
+#line 2382 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::create(ConstantInt::getFalse());
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 235:
-#line 2386 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::createNull();
+  ;
+    break;}
+case 234:
+#line 2386 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::createNull();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 236:
-#line 2390 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::createUndef();
+  ;
+    break;}
+case 235:
+#line 2390 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::createUndef();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 237:
-#line 2394 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {     // A vector zero constant.
-    (yyval.ValIDVal) = ValID::createZeroInit();
+  ;
+    break;}
+case 236:
+#line 2394 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{     // A vector zero constant.
+    yyval.ValIDVal = ValID::createZeroInit();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 238:
-#line 2398 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { // Nonempty unsized packed vector
-    const Type *ETy = (*(yyvsp[(2) - (3)].ConstVector))[0]->getType();
-    int NumElements = (yyvsp[(2) - (3)].ConstVector)->size(); 
+  ;
+    break;}
+case 237:
+#line 2398 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ // Nonempty unsized packed vector
+    const Type *ETy = (*yyvsp[-1].ConstVector)[0]->getType();
+    int NumElements = yyvsp[-1].ConstVector->size(); 
     
     VectorType* pt = VectorType::get(ETy, NumElements);
     PATypeHolder* PTy = new PATypeHolder(
@@ -5229,233 +4186,213 @@
                                          );
     
     // 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 239:
-#line 2423 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].ConstVal));
+  ;
+    break;}
+case 238:
+#line 2423 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::create(yyvsp[0].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 240:
-#line 2427 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    char *End = UnEscapeLexed((yyvsp[(3) - (5)].StrVal), true);
-    std::string AsmStr = std::string((yyvsp[(3) - (5)].StrVal), End);
-    End = UnEscapeLexed((yyvsp[(5) - (5)].StrVal), true);
-    std::string Constraints = std::string((yyvsp[(5) - (5)].StrVal), End);
-    (yyval.ValIDVal) = ValID::createInlineAsm(AsmStr, Constraints, (yyvsp[(2) - (5)].BoolVal));
-    free((yyvsp[(3) - (5)].StrVal));
-    free((yyvsp[(5) - (5)].StrVal));
+  ;
+    break;}
+case 239:
+#line 2427 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    char *End = UnEscapeLexed(yyvsp[-2].StrVal, true);
+    std::string AsmStr = std::string(yyvsp[-2].StrVal, End);
+    End = UnEscapeLexed(yyvsp[0].StrVal, true);
+    std::string Constraints = std::string(yyvsp[0].StrVal, End);
+    yyval.ValIDVal = ValID::createInlineAsm(AsmStr, Constraints, yyvsp[-3].BoolVal);
+    free(yyvsp[-2].StrVal);
+    free(yyvsp[0].StrVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 241:
-#line 2441 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {  // Is it an integer reference...?
-    (yyval.ValIDVal) = ValID::createLocalID((yyvsp[(1) - (1)].UIntVal));
+  ;
+    break;}
+case 240:
+#line 2441 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{  // Is it an integer reference...?
+    yyval.ValIDVal = ValID::createLocalID(yyvsp[0].UIntVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 242:
-#line 2445 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::createGlobalID((yyvsp[(1) - (1)].UIntVal));
+  ;
+    break;}
+case 241:
+#line 2445 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::createGlobalID(yyvsp[0].UIntVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 243:
-#line 2449 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {                   // Is it a named reference...?
-    (yyval.ValIDVal) = ValID::createLocalName((yyvsp[(1) - (1)].StrVal));
+  ;
+    break;}
+case 242:
+#line 2449 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                   // Is it a named reference...?
+    yyval.ValIDVal = ValID::createLocalName(yyvsp[0].StrVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 244:
-#line 2453 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {                   // Is it a named reference...?
-    (yyval.ValIDVal) = ValID::createGlobalName((yyvsp[(1) - (1)].StrVal));
+  ;
+    break;}
+case 243:
+#line 2453 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                   // Is it a named reference...?
+    yyval.ValIDVal = ValID::createGlobalName(yyvsp[0].StrVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 247:
-#line 2465 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 246:
+#line 2465 "/Users/sabre/cvs/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 248:
-#line 2474 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal);
+  ;
+    break;}
+case 247:
+#line 2474 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.FunctionVal = yyvsp[-1].FunctionVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 249:
-#line 2478 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { // Do not allow functions with 0 basic blocks   
-    (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal);
+  ;
+    break;}
+case 248:
+#line 2478 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ // Do not allow functions with 0 basic blocks   
+    yyval.FunctionVal = yyvsp[-1].FunctionVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 250:
-#line 2487 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    setValueName((yyvsp[(3) - (3)].TermInstVal), (yyvsp[(2) - (3)].StrVal));
+  ;
+    break;}
+case 249:
+#line 2487 "/Users/sabre/cvs/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 251:
-#line 2496 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (CastInst *CI1 = dyn_cast<CastInst>((yyvsp[(2) - (2)].InstVal)))
+  ;
+    break;}
+case 250:
+#line 2496 "/Users/sabre/cvs/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;
+  ;
+    break;}
+case 251:
+#line 2505 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{          // Empty space between instruction lists
+    yyval.BasicBlockVal = defineBBVal(ValID::createLocalID(CurFun.NextValNum));
+    CHECK_FOR_ERROR
+  ;
+    break;}
+case 252:
+#line 2509 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{             // Labelled (named) basic block
+    yyval.BasicBlockVal = defineBBVal(ValID::createLocalName(yyvsp[0].StrVal));
+    CHECK_FOR_ERROR
+  ;
+    break;}
+case 253:
+#line 2514 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{              // Return with a result...
+    yyval.TermInstVal = new ReturnInst(yyvsp[0].ValueVal);
+    CHECK_FOR_ERROR
+  ;
+    break;}
+case 254:
+#line 2518 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                                    // Return with no result...
+    yyval.TermInstVal = new ReturnInst();
+    CHECK_FOR_ERROR
+  ;
+    break;}
+case 255:
+#line 2522 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                           // Unconditional Branch...
+    BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
+    CHECK_FOR_ERROR
+    yyval.TermInstVal = new BranchInst(tmpBB);
+  ;
+    break;}
+case 256:
+#line 2527 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{  
+    assert(cast<IntegerType>(yyvsp[-7].PrimType)->getBitWidth() == 1 && "Not Bool?");
+    BasicBlock* tmpBBA = getBBVal(yyvsp[-3].ValIDVal);
+    CHECK_FOR_ERROR
+    BasicBlock* tmpBBB = getBBVal(yyvsp[0].ValIDVal);
+    CHECK_FOR_ERROR
+    Value* tmpVal = getVal(Type::Int1Ty, yyvsp[-6].ValIDVal);
+    CHECK_FOR_ERROR
+    yyval.TermInstVal = new BranchInst(tmpBBA, tmpBBB, tmpVal);
+  ;
+    break;}
+case 257:
+#line 2537 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    Value* tmpVal = getVal(yyvsp[-7].PrimType, yyvsp[-6].ValIDVal);
+    CHECK_FOR_ERROR
+    BasicBlock* tmpBB = getBBVal(yyvsp[-3].ValIDVal);
+    CHECK_FOR_ERROR
+    SwitchInst *S = new SwitchInst(tmpVal, tmpBB, yyvsp[-1].JumpTable->size());
+    yyval.TermInstVal = S;
 
-  case 252:
-#line 2505 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {          // Empty space between instruction lists
-    (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalID(CurFun.NextValNum));
-    CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 253:
-#line 2509 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {             // Labelled (named) basic block
-    (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalName((yyvsp[(1) - (1)].StrVal)));
-    CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 254:
-#line 2514 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {              // Return with a result...
-    (yyval.TermInstVal) = new ReturnInst((yyvsp[(2) - (2)].ValueVal));
-    CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 255:
-#line 2518 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {                                    // Return with no result...
-    (yyval.TermInstVal) = new ReturnInst();
-    CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 256:
-#line 2522 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {                           // Unconditional Branch...
-    BasicBlock* tmpBB = getBBVal((yyvsp[(3) - (3)].ValIDVal));
-    CHECK_FOR_ERROR
-    (yyval.TermInstVal) = new BranchInst(tmpBB);
-  ;}
-    break;
-
-  case 257:
-#line 2527 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {  
-    assert(cast<IntegerType>((yyvsp[(2) - (9)].PrimType))->getBitWidth() == 1 && "Not Bool?");
-    BasicBlock* tmpBBA = getBBVal((yyvsp[(6) - (9)].ValIDVal));
-    CHECK_FOR_ERROR
-    BasicBlock* tmpBBB = getBBVal((yyvsp[(9) - (9)].ValIDVal));
-    CHECK_FOR_ERROR
-    Value* tmpVal = getVal(Type::Int1Ty, (yyvsp[(3) - (9)].ValIDVal));
-    CHECK_FOR_ERROR
-    (yyval.TermInstVal) = new BranchInst(tmpBBA, tmpBBB, tmpVal);
-  ;}
-    break;
-
-  case 258:
-#line 2537 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    Value* tmpVal = getVal((yyvsp[(2) - (9)].PrimType), (yyvsp[(3) - (9)].ValIDVal));
-    CHECK_FOR_ERROR
-    BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (9)].ValIDVal));
-    CHECK_FOR_ERROR
-    SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[(8) - (9)].JumpTable)->size());
-    (yyval.TermInstVal) = S;
-
-    std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = (yyvsp[(8) - (9)].JumpTable)->begin(),
-      E = (yyvsp[(8) - (9)].JumpTable)->end();
+    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 259:
-#line 2556 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    Value* tmpVal = getVal((yyvsp[(2) - (8)].PrimType), (yyvsp[(3) - (8)].ValIDVal));
+  ;
+    break;}
+case 258:
+#line 2556 "/Users/sabre/cvs/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 260:
-#line 2566 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 259:
+#line 2566 "/Users/sabre/cvs/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;
       ParamAttrsVector Attrs;
-      if ((yyvsp[(8) - (14)].ParamAttrs) != ParamAttr::None) {
-        ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = 8;
+      if (yyvsp[-6].ParamAttrs != ParamAttr::None) {
+        ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = yyvsp[-6].ParamAttrs;
         Attrs.push_back(PAWI);
       }
-      ValueRefList::iterator I = (yyvsp[(6) - (14)].ValueRefList)->begin(), E = (yyvsp[(6) - (14)].ValueRefList)->end();
+      ValueRefList::iterator I = yyvsp[-8].ValueRefList->begin(), E = yyvsp[-8].ValueRefList->end();
       unsigned index = 1;
       for (; I != E; ++I, ++index) {
         const Type *Ty = I->Val->getType();
@@ -5471,22 +4408,22 @@
       ParamAttrsList *PAL = 0;
       if (!Attrs.empty())
         PAL = ParamAttrsList::get(Attrs);
-      Ty = FunctionType::get((yyvsp[(3) - (14)].TypeVal)->get(), ParamTypes, false, PAL);
+      Ty = FunctionType::get(yyvsp[-11].TypeVal->get(), ParamTypes, false, PAL);
       PFTy = PointerType::get(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
 
     // Check the arguments
     ValueList Args;
-    if ((yyvsp[(6) - (14)].ValueRefList)->empty()) {                                   // Has no arguments?
+    if (yyvsp[-8].ValueRefList->empty()) {                                   // Has no arguments?
       // Make sure no arguments is a good thing!
       if (Ty->getNumParams() != 0)
         GEN_ERROR("No arguments passed to a function that "
@@ -5496,7 +4433,7 @@
       // correctly!
       FunctionType::param_iterator I = Ty->param_begin();
       FunctionType::param_iterator E = Ty->param_end();
-      ValueRefList::iterator ArgI = (yyvsp[(6) - (14)].ValueRefList)->begin(), ArgE = (yyvsp[(6) - (14)].ValueRefList)->end();
+      ValueRefList::iterator ArgI = yyvsp[-8].ValueRefList->begin(), ArgE = yyvsp[-8].ValueRefList->end();
 
       for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
         if (ArgI->Val->getType() != *I)
@@ -5515,348 +4452,322 @@
 
     // Create the InvokeInst
     InvokeInst *II = new InvokeInst(V, Normal, Except, &Args[0], Args.size());
-    II->setCallingConv((yyvsp[(2) - (14)].UIntVal));
-    (yyval.TermInstVal) = II;
-    delete (yyvsp[(6) - (14)].ValueRefList);
+    II->setCallingConv(yyvsp[-12].UIntVal);
+    yyval.TermInstVal = II;
+    delete yyvsp[-8].ValueRefList;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 261:
-#line 2645 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TermInstVal) = new UnwindInst();
+  ;
+    break;}
+case 260:
+#line 2645 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TermInstVal = new UnwindInst();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 262:
-#line 2649 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TermInstVal) = new UnreachableInst();
+  ;
+    break;}
+case 261:
+#line 2649 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TermInstVal = new UnreachableInst();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 263:
-#line 2656 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.JumpTable) = (yyvsp[(1) - (6)].JumpTable);
-    Constant *V = cast<Constant>(getExistingVal((yyvsp[(2) - (6)].PrimType), (yyvsp[(3) - (6)].ValIDVal)));
+  ;
+    break;}
+case 262:
+#line 2656 "/Users/sabre/cvs/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 264:
-#line 2667 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
-    Constant *V = cast<Constant>(getExistingVal((yyvsp[(1) - (5)].PrimType), (yyvsp[(2) - (5)].ValIDVal)));
+    yyval.JumpTable->push_back(std::make_pair(V, tmpBB));
+  ;
+    break;}
+case 263:
+#line 2667 "/Users/sabre/cvs/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 265:
-#line 2680 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+    yyval.JumpTable->push_back(std::make_pair(V, tmpBB)); 
+  ;
+    break;}
+case 264:
+#line 2680 "/Users/sabre/cvs/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 266:
-#line 2690 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {    // Used for PHI nodes
+  ;
+    break;}
+case 265:
+#line 2690 "/Users/sabre/cvs/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 267:
-#line 2701 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.PHIList) = (yyvsp[(1) - (7)].PHIList);
-    Value* tmpVal = getVal((yyvsp[(1) - (7)].PHIList)->front().first->getType(), (yyvsp[(4) - (7)].ValIDVal));
+    yyval.PHIList->push_back(std::make_pair(tmpVal, tmpBB));
+    delete yyvsp[-5].TypeVal;
+  ;
+    break;}
+case 266:
+#line 2701 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.PHIList = yyvsp[-6].PHIList;
+    Value* tmpVal = getVal(yyvsp[-6].PHIList->front().first->getType(), yyvsp[-3].ValIDVal);
     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 268:
-#line 2711 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {    
+    yyvsp[-6].PHIList->push_back(std::make_pair(tmpVal, tmpBB));
+  ;
+    break;}
+case 267:
+#line 2711 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{    
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
     // Used for call and invoke instructions
-    (yyval.ValueRefList) = new ValueRefList();
-    ValueRefListEntry E; E.Attrs = (yyvsp[(3) - (3)].ParamAttrs); E.Val = getVal((yyvsp[(1) - (3)].TypeVal)->get(), (yyvsp[(2) - (3)].ValIDVal));
-    (yyval.ValueRefList)->push_back(E);
-    delete (yyvsp[(1) - (3)].TypeVal);
-  ;}
-    break;
-
-  case 269:
-#line 2720 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+    yyval.ValueRefList = new ValueRefList();
+    ValueRefListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-2].TypeVal->get(), yyvsp[-1].ValIDVal);
+    yyval.ValueRefList->push_back(E);
+    delete yyvsp[-2].TypeVal;
+  ;
+    break;}
+case 268:
+#line 2720 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (5)].TypeVal))->getDescription());
-    (yyval.ValueRefList) = (yyvsp[(1) - (5)].ValueRefList);
-    ValueRefListEntry E; E.Attrs = (yyvsp[(5) - (5)].ParamAttrs); E.Val = getVal((yyvsp[(3) - (5)].TypeVal)->get(), (yyvsp[(4) - (5)].ValIDVal));
-    (yyval.ValueRefList)->push_back(E);
-    delete (yyvsp[(3) - (5)].TypeVal);
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
+    yyval.ValueRefList = yyvsp[-4].ValueRefList;
+    ValueRefListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-2].TypeVal->get(), yyvsp[-1].ValIDVal);
+    yyval.ValueRefList->push_back(E);
+    delete yyvsp[-2].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 270:
-#line 2729 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ValueRefList) = new ValueRefList(); ;}
-    break;
-
-  case 271:
-#line 2732 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ValueList) = new std::vector<Value*>(); ;}
-    break;
-
-  case 272:
-#line 2733 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValueList) = (yyvsp[(1) - (3)].ValueList);
-    (yyval.ValueList)->push_back((yyvsp[(3) - (3)].ValueVal));
+  ;
+    break;}
+case 269:
+#line 2729 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ValueRefList = new ValueRefList(); ;
+    break;}
+case 270:
+#line 2732 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ValueList = new std::vector<Value*>(); ;
+    break;}
+case 271:
+#line 2733 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValueList = yyvsp[-2].ValueList;
+    yyval.ValueList->push_back(yyvsp[0].ValueVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 273:
-#line 2740 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = true;
+  ;
+    break;}
+case 272:
+#line 2740 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = true;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 274:
-#line 2744 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = false;
+  ;
+    break;}
+case 273:
+#line 2744 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = false;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 275:
-#line 2749 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 274:
+#line 2749 "/Users/sabre/cvs/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");
-    if (isa<VectorType>((*(yyvsp[(2) - (5)].TypeVal)).get()) && 
-        ((yyvsp[(1) - (5)].BinaryOpVal) == Instruction::URem || 
-         (yyvsp[(1) - (5)].BinaryOpVal) == Instruction::SRem ||
-         (yyvsp[(1) - (5)].BinaryOpVal) == Instruction::FRem))
+    if (isa<VectorType>((*yyvsp[-3].TypeVal).get()) && 
+        (yyvsp[-4].BinaryOpVal == Instruction::URem || 
+         yyvsp[-4].BinaryOpVal == Instruction::SRem ||
+         yyvsp[-4].BinaryOpVal == Instruction::FRem))
       GEN_ERROR("Remainder not supported on vector types");
-    Value* val1 = getVal(*(yyvsp[(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 276:
-#line 2770 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+    delete yyvsp[-3].TypeVal;
+  ;
+    break;}
+case 275:
+#line 2770 "/Users/sabre/cvs/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 277:
-#line 2787 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+    delete yyvsp[-3].TypeVal;
+  ;
+    break;}
+case 276:
+#line 2787 "/Users/sabre/cvs/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 278:
-#line 2801 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+    delete yyvsp[-3].TypeVal;
+  ;
+    break;}
+case 277:
+#line 2801 "/Users/sabre/cvs/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 279:
-#line 2815 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+    delete yyvsp[-3].TypeVal;
+  ;
+    break;}
+case 278:
+#line 2815 "/Users/sabre/cvs/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 280:
-#line 2827 "/home/asl/proj/llvm/src/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 279:
+#line 2827 "/Users/sabre/cvs/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 281:
-#line 2835 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 280:
+#line 2835 "/Users/sabre/cvs/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 282:
-#line 2842 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!ExtractElementInst::isValidOperands((yyvsp[(2) - (4)].ValueVal), (yyvsp[(4) - (4)].ValueVal)))
+  ;
+    break;}
+case 281:
+#line 2842 "/Users/sabre/cvs/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 283:
-#line 2848 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!InsertElementInst::isValidOperands((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal)))
+  ;
+    break;}
+case 282:
+#line 2848 "/Users/sabre/cvs/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 284:
-#line 2854 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!ShuffleVectorInst::isValidOperands((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal)))
+  ;
+    break;}
+case 283:
+#line 2854 "/Users/sabre/cvs/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 285:
-#line 2860 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    const Type *Ty = (yyvsp[(2) - (2)].PHIList)->front().first->getType();
+  ;
+    break;}
+case 284:
+#line 2860 "/Users/sabre/cvs/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 286:
-#line 2876 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 285:
+#line 2876 "/Users/sabre/cvs/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;
       ParamAttrsVector Attrs;
-      if ((yyvsp[(8) - (8)].ParamAttrs) != ParamAttr::None) {
-        ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = (yyvsp[(8) - (8)].ParamAttrs);
+      if (yyvsp[0].ParamAttrs != ParamAttr::None) {
+        ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = yyvsp[0].ParamAttrs;
         Attrs.push_back(PAWI);
       }
       unsigned index = 1;
-      ValueRefList::iterator I = (yyvsp[(6) - (8)].ValueRefList)->begin(), E = (yyvsp[(6) - (8)].ValueRefList)->end();
+      ValueRefList::iterator I = yyvsp[-2].ValueRefList->begin(), E = yyvsp[-2].ValueRefList->end();
       for (; I != E; ++I, ++index) {
         const Type *Ty = I->Val->getType();
         if (Ty == Type::VoidTy)
@@ -5872,11 +4783,11 @@
       if (!Attrs.empty())
         PAL = ParamAttrsList::get(Attrs);
 
-      Ty = FunctionType::get((yyvsp[(3) - (8)].TypeVal)->get(), ParamTypes, false, PAL);
+      Ty = FunctionType::get(yyvsp[-5].TypeVal->get(), ParamTypes, false, PAL);
       PFTy = PointerType::get(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.
@@ -5890,7 +4801,7 @@
 
     // Check the arguments 
     ValueList Args;
-    if ((yyvsp[(6) - (8)].ValueRefList)->empty()) {                                   // Has no arguments?
+    if (yyvsp[-2].ValueRefList->empty()) {                                   // Has no arguments?
       // Make sure no arguments is a good thing!
       if (Ty->getNumParams() != 0)
         GEN_ERROR("No arguments passed to a function that "
@@ -5901,7 +4812,7 @@
       //
       FunctionType::param_iterator I = Ty->param_begin();
       FunctionType::param_iterator E = Ty->param_end();
-      ValueRefList::iterator ArgI = (yyvsp[(6) - (8)].ValueRefList)->begin(), ArgE = (yyvsp[(6) - (8)].ValueRefList)->end();
+      ValueRefList::iterator ArgI = yyvsp[-2].ValueRefList->begin(), ArgE = yyvsp[-2].ValueRefList->end();
 
       for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
         if (ArgI->Val->getType() != *I)
@@ -5918,371 +4829,365 @@
     }
     // Create the call node
     CallInst *CI = new CallInst(V, &Args[0], Args.size());
-    CI->setTailCall((yyvsp[(1) - (8)].BoolVal));
-    CI->setCallingConv((yyvsp[(2) - (8)].UIntVal));
-    (yyval.InstVal) = CI;
-    delete (yyvsp[(6) - (8)].ValueRefList);
-    delete (yyvsp[(3) - (8)].TypeVal);
+    CI->setTailCall(yyvsp[-7].BoolVal);
+    CI->setCallingConv(yyvsp[-6].UIntVal);
+    yyval.InstVal = CI;
+    delete yyvsp[-2].ValueRefList;
+    delete yyvsp[-5].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 287:
-#line 2960 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.InstVal) = (yyvsp[(1) - (1)].InstVal);
+  ;
+    break;}
+case 286:
+#line 2960 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.InstVal = yyvsp[0].InstVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 288:
-#line 2965 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = true;
+  ;
+    break;}
+case 287:
+#line 2965 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = true;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 289:
-#line 2969 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = false;
+  ;
+    break;}
+case 288:
+#line 2969 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = false;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 290:
-#line 2976 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 289:
+#line 2976 "/Users/sabre/cvs/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 291:
-#line 2983 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 290:
+#line 2983 "/Users/sabre/cvs/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 292:
-#line 2991 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+    yyval.InstVal = new MallocInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
+    delete yyvsp[-4].TypeVal;
+  ;
+    break;}
+case 291:
+#line 2991 "/Users/sabre/cvs/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 293:
-#line 2998 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 292:
+#line 2998 "/Users/sabre/cvs/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 294:
-#line 3006 "/home/asl/proj/llvm/src/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 293:
+#line 3006 "/Users/sabre/cvs/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 295:
-#line 3014 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 294:
+#line 3014 "/Users/sabre/cvs/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 296:
-#line 3028 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+    yyval.InstVal = new LoadInst(tmpVal, "", yyvsp[-4].BoolVal, yyvsp[0].UIntVal);
+    delete yyvsp[-2].TypeVal;
+  ;
+    break;}
+case 295:
+#line 3028 "/Users/sabre/cvs/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 297:
-#line 3045 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    {
+    yyval.InstVal = new StoreInst(yyvsp[-4].ValueVal, tmpVal, yyvsp[-6].BoolVal, yyvsp[0].UIntVal);
+    delete yyvsp[-2].TypeVal;
+  ;
+    break;}
+case 296:
+#line 3045 "/Users/sabre/cvs/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))[0], (yyvsp[(4) - (4)].ValueList)->size(), true))
+    if (!GetElementPtrInst::getIndexedType(*yyvsp[-2].TypeVal, &(*yyvsp[0].ValueList)[0], yyvsp[0].ValueList->size(), 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))[0], (yyvsp[(4) - (4)].ValueList)->size());
-    delete (yyvsp[(2) - (4)].TypeVal); 
-    delete (yyvsp[(4) - (4)].ValueList);
-  ;}
-    break;
+    yyval.InstVal = new GetElementPtrInst(tmpVal, &(*yyvsp[0].ValueList)[0], yyvsp[0].ValueList->size());
+    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 6072 "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 3062 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 3062 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 
 
 // common code from the two 'RunVMAsmParser' functions
@@ -6363,4 +5268,3 @@
   GenerateError(errMsg);
   return 0;
 }
-
diff --git a/lib/AsmParser/llvmAsmParser.h.cvs b/lib/AsmParser/llvmAsmParser.h.cvs
index f695d7c..b320828 100644
--- a/lib/AsmParser/llvmAsmParser.h.cvs
+++ b/lib/AsmParser/llvmAsmParser.h.cvs
@@ -1,323 +1,4 @@
-/* A Bison parser, made by GNU Bison 2.3.  */
-
-/* Skeleton interface for Bison's Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
-
-/* As a special exception, you may create a larger work that contains
-   part or all of the Bison parser skeleton and distribute that work
-   under terms of your choice, so long as that work isn't itself a
-   parser generator using the skeleton or a modified version thereof
-   as a parser skeleton.  Alternatively, if you modify or redistribute
-   the parser skeleton itself, you may (at your option) remove this
-   special exception, which will cause the skeleton and the resulting
-   Bison output files to be licensed under the GNU General Public
-   License without this special exception.
-
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.  */
-
-/* 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,
-     LABEL = 269,
-     TYPE = 270,
-     LOCALVAR = 271,
-     GLOBALVAR = 272,
-     LABELSTR = 273,
-     STRINGCONSTANT = 274,
-     ATSTRINGCONSTANT = 275,
-     ZEROINITIALIZER = 276,
-     TRUETOK = 277,
-     FALSETOK = 278,
-     BEGINTOK = 279,
-     ENDTOK = 280,
-     DECLARE = 281,
-     DEFINE = 282,
-     GLOBAL = 283,
-     CONSTANT = 284,
-     SECTION = 285,
-     ALIAS = 286,
-     VOLATILE = 287,
-     THREAD_LOCAL = 288,
-     TO = 289,
-     DOTDOTDOT = 290,
-     NULL_TOK = 291,
-     UNDEF = 292,
-     INTERNAL = 293,
-     LINKONCE = 294,
-     WEAK = 295,
-     APPENDING = 296,
-     DLLIMPORT = 297,
-     DLLEXPORT = 298,
-     EXTERN_WEAK = 299,
-     OPAQUE = 300,
-     EXTERNAL = 301,
-     TARGET = 302,
-     TRIPLE = 303,
-     ALIGN = 304,
-     DEPLIBS = 305,
-     CALL = 306,
-     TAIL = 307,
-     ASM_TOK = 308,
-     MODULE = 309,
-     SIDEEFFECT = 310,
-     CC_TOK = 311,
-     CCC_TOK = 312,
-     FASTCC_TOK = 313,
-     COLDCC_TOK = 314,
-     X86_STDCALLCC_TOK = 315,
-     X86_FASTCALLCC_TOK = 316,
-     DATALAYOUT = 317,
-     RET = 318,
-     BR = 319,
-     SWITCH = 320,
-     INVOKE = 321,
-     UNWIND = 322,
-     UNREACHABLE = 323,
-     ADD = 324,
-     SUB = 325,
-     MUL = 326,
-     UDIV = 327,
-     SDIV = 328,
-     FDIV = 329,
-     UREM = 330,
-     SREM = 331,
-     FREM = 332,
-     AND = 333,
-     OR = 334,
-     XOR = 335,
-     SHL = 336,
-     LSHR = 337,
-     ASHR = 338,
-     ICMP = 339,
-     FCMP = 340,
-     EQ = 341,
-     NE = 342,
-     SLT = 343,
-     SGT = 344,
-     SLE = 345,
-     SGE = 346,
-     ULT = 347,
-     UGT = 348,
-     ULE = 349,
-     UGE = 350,
-     OEQ = 351,
-     ONE = 352,
-     OLT = 353,
-     OGT = 354,
-     OLE = 355,
-     OGE = 356,
-     ORD = 357,
-     UNO = 358,
-     UEQ = 359,
-     UNE = 360,
-     MALLOC = 361,
-     ALLOCA = 362,
-     FREE = 363,
-     LOAD = 364,
-     STORE = 365,
-     GETELEMENTPTR = 366,
-     TRUNC = 367,
-     ZEXT = 368,
-     SEXT = 369,
-     FPTRUNC = 370,
-     FPEXT = 371,
-     BITCAST = 372,
-     UITOFP = 373,
-     SITOFP = 374,
-     FPTOUI = 375,
-     FPTOSI = 376,
-     INTTOPTR = 377,
-     PTRTOINT = 378,
-     PHI_TOK = 379,
-     SELECT = 380,
-     VAARG = 381,
-     EXTRACTELEMENT = 382,
-     INSERTELEMENT = 383,
-     SHUFFLEVECTOR = 384,
-     NORETURN = 385,
-     INREG = 386,
-     SRET = 387,
-     NOUNWIND = 388,
-     DEFAULT = 389,
-     HIDDEN = 390,
-     PROTECTED = 391
-   };
-#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 LABEL 269
-#define TYPE 270
-#define LOCALVAR 271
-#define GLOBALVAR 272
-#define LABELSTR 273
-#define STRINGCONSTANT 274
-#define ATSTRINGCONSTANT 275
-#define ZEROINITIALIZER 276
-#define TRUETOK 277
-#define FALSETOK 278
-#define BEGINTOK 279
-#define ENDTOK 280
-#define DECLARE 281
-#define DEFINE 282
-#define GLOBAL 283
-#define CONSTANT 284
-#define SECTION 285
-#define ALIAS 286
-#define VOLATILE 287
-#define THREAD_LOCAL 288
-#define TO 289
-#define DOTDOTDOT 290
-#define NULL_TOK 291
-#define UNDEF 292
-#define INTERNAL 293
-#define LINKONCE 294
-#define WEAK 295
-#define APPENDING 296
-#define DLLIMPORT 297
-#define DLLEXPORT 298
-#define EXTERN_WEAK 299
-#define OPAQUE 300
-#define EXTERNAL 301
-#define TARGET 302
-#define TRIPLE 303
-#define ALIGN 304
-#define DEPLIBS 305
-#define CALL 306
-#define TAIL 307
-#define ASM_TOK 308
-#define MODULE 309
-#define SIDEEFFECT 310
-#define CC_TOK 311
-#define CCC_TOK 312
-#define FASTCC_TOK 313
-#define COLDCC_TOK 314
-#define X86_STDCALLCC_TOK 315
-#define X86_FASTCALLCC_TOK 316
-#define DATALAYOUT 317
-#define RET 318
-#define BR 319
-#define SWITCH 320
-#define INVOKE 321
-#define UNWIND 322
-#define UNREACHABLE 323
-#define ADD 324
-#define SUB 325
-#define MUL 326
-#define UDIV 327
-#define SDIV 328
-#define FDIV 329
-#define UREM 330
-#define SREM 331
-#define FREM 332
-#define AND 333
-#define OR 334
-#define XOR 335
-#define SHL 336
-#define LSHR 337
-#define ASHR 338
-#define ICMP 339
-#define FCMP 340
-#define EQ 341
-#define NE 342
-#define SLT 343
-#define SGT 344
-#define SLE 345
-#define SGE 346
-#define ULT 347
-#define UGT 348
-#define ULE 349
-#define UGE 350
-#define OEQ 351
-#define ONE 352
-#define OLT 353
-#define OGT 354
-#define OLE 355
-#define OGE 356
-#define ORD 357
-#define UNO 358
-#define UEQ 359
-#define UNE 360
-#define MALLOC 361
-#define ALLOCA 362
-#define FREE 363
-#define LOAD 364
-#define STORE 365
-#define GETELEMENTPTR 366
-#define TRUNC 367
-#define ZEXT 368
-#define SEXT 369
-#define FPTRUNC 370
-#define FPEXT 371
-#define BITCAST 372
-#define UITOFP 373
-#define SITOFP 374
-#define FPTOUI 375
-#define FPTOSI 376
-#define INTTOPTR 377
-#define PTRTOINT 378
-#define PHI_TOK 379
-#define SELECT 380
-#define VAARG 381
-#define EXTRACTELEMENT 382
-#define INSERTELEMENT 383
-#define SHUFFLEVECTOR 384
-#define NORETURN 385
-#define INREG 386
-#define SRET 387
-#define NOUNWIND 388
-#define DEFAULT 389
-#define HIDDEN 390
-#define PROTECTED 391
-
-
-
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
-#line 955 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-{
+typedef union {
   llvm::Module                           *ModuleVal;
   llvm::Function                         *FunctionVal;
   llvm::BasicBlock                       *BasicBlockVal;
@@ -362,14 +43,141 @@
   llvm::Instruction::OtherOps       OtherOpVal;
   llvm::ICmpInst::Predicate         IPredicate;
   llvm::FCmpInst::Predicate         FPredicate;
-}
-/* Line 1489 of yacc.c.  */
-#line 368 "llvmAsmParser.tab.h"
-	YYSTYPE;
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
+} YYSTYPE;
+#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	LABEL	268
+#define	TYPE	269
+#define	LOCALVAR	270
+#define	GLOBALVAR	271
+#define	LABELSTR	272
+#define	STRINGCONSTANT	273
+#define	ATSTRINGCONSTANT	274
+#define	ZEROINITIALIZER	275
+#define	TRUETOK	276
+#define	FALSETOK	277
+#define	BEGINTOK	278
+#define	ENDTOK	279
+#define	DECLARE	280
+#define	DEFINE	281
+#define	GLOBAL	282
+#define	CONSTANT	283
+#define	SECTION	284
+#define	ALIAS	285
+#define	VOLATILE	286
+#define	THREAD_LOCAL	287
+#define	TO	288
+#define	DOTDOTDOT	289
+#define	NULL_TOK	290
+#define	UNDEF	291
+#define	INTERNAL	292
+#define	LINKONCE	293
+#define	WEAK	294
+#define	APPENDING	295
+#define	DLLIMPORT	296
+#define	DLLEXPORT	297
+#define	EXTERN_WEAK	298
+#define	OPAQUE	299
+#define	EXTERNAL	300
+#define	TARGET	301
+#define	TRIPLE	302
+#define	ALIGN	303
+#define	DEPLIBS	304
+#define	CALL	305
+#define	TAIL	306
+#define	ASM_TOK	307
+#define	MODULE	308
+#define	SIDEEFFECT	309
+#define	CC_TOK	310
+#define	CCC_TOK	311
+#define	FASTCC_TOK	312
+#define	COLDCC_TOK	313
+#define	X86_STDCALLCC_TOK	314
+#define	X86_FASTCALLCC_TOK	315
+#define	DATALAYOUT	316
+#define	RET	317
+#define	BR	318
+#define	SWITCH	319
+#define	INVOKE	320
+#define	UNWIND	321
+#define	UNREACHABLE	322
+#define	ADD	323
+#define	SUB	324
+#define	MUL	325
+#define	UDIV	326
+#define	SDIV	327
+#define	FDIV	328
+#define	UREM	329
+#define	SREM	330
+#define	FREM	331
+#define	AND	332
+#define	OR	333
+#define	XOR	334
+#define	SHL	335
+#define	LSHR	336
+#define	ASHR	337
+#define	ICMP	338
+#define	FCMP	339
+#define	EQ	340
+#define	NE	341
+#define	SLT	342
+#define	SGT	343
+#define	SLE	344
+#define	SGE	345
+#define	ULT	346
+#define	UGT	347
+#define	ULE	348
+#define	UGE	349
+#define	OEQ	350
+#define	ONE	351
+#define	OLT	352
+#define	OGT	353
+#define	OLE	354
+#define	OGE	355
+#define	ORD	356
+#define	UNO	357
+#define	UEQ	358
+#define	UNE	359
+#define	MALLOC	360
+#define	ALLOCA	361
+#define	FREE	362
+#define	LOAD	363
+#define	STORE	364
+#define	GETELEMENTPTR	365
+#define	TRUNC	366
+#define	ZEXT	367
+#define	SEXT	368
+#define	FPTRUNC	369
+#define	FPEXT	370
+#define	BITCAST	371
+#define	UITOFP	372
+#define	SITOFP	373
+#define	FPTOUI	374
+#define	FPTOSI	375
+#define	INTTOPTR	376
+#define	PTRTOINT	377
+#define	PHI_TOK	378
+#define	SELECT	379
+#define	VAARG	380
+#define	EXTRACTELEMENT	381
+#define	INSERTELEMENT	382
+#define	SHUFFLEVECTOR	383
+#define	NORETURN	384
+#define	INREG	385
+#define	SRET	386
+#define	NOUNWIND	387
+#define	DEFAULT	388
+#define	HIDDEN	389
+#define	PROTECTED	390
+
 
 extern YYSTYPE llvmAsmlval;
-
diff --git a/lib/AsmParser/llvmAsmParser.y.cvs b/lib/AsmParser/llvmAsmParser.y.cvs
index 63f2261..d8e151c 100644
--- a/lib/AsmParser/llvmAsmParser.y.cvs
+++ b/lib/AsmParser/llvmAsmParser.y.cvs
@@ -2574,7 +2574,7 @@
       std::vector<const Type*> ParamTypes;
       ParamAttrsVector Attrs;
       if ($8 != ParamAttr::None) {
-        ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = 8;
+        ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = $8;
         Attrs.push_back(PAWI);
       }
       ValueRefList::iterator I = $6->begin(), E = $6->end();
