diff --git a/lib/AsmParser/llvmAsmParser.cpp.cvs b/lib/AsmParser/llvmAsmParser.cpp.cvs
index f11f291..d611dc9 100644
--- a/lib/AsmParser/llvmAsmParser.cpp.cvs
+++ b/lib/AsmParser/llvmAsmParser.cpp.cvs
@@ -1,336 +1,147 @@
-/* A Bison parser, made by GNU Bison 2.1.  */
 
-/* Skeleton parser for Yacc-like parsing with Bison,
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+/*  A Bison parser, made from /Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y
+    by GNU Bison version 1.28  */
 
-   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.
+#define YYBISON 1  /* Identify Bison output.  */
 
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
-
-/* As a special exception, when this file is copied by Bison into a
-   Bison output file, you may use that output file without restriction.
-   This special exception was added by the Free Software Foundation
-   in version 1.24 of Bison.  */
-
-/* Written by Richard Stallman by simplifying the original so called
-   ``semantic'' parser.  */
-
-/* All symbols defined below should begin with yy or YY, to avoid
-   infringing on user name space.  This should be done even for local
-   variables, as they might otherwise be expanded by user macros.
-   There are some unavoidable exceptions within include files to
-   define necessary library symbols; they are noted "INFRINGES ON
-   USER NAME SPACE" below.  */
-
-/* Identify Bison output.  */
-#define YYBISON 1
-
-/* Bison version.  */
-#define YYBISON_VERSION "2.1"
-
-/* Skeleton name.  */
-#define YYSKELETON_NAME "yacc.c"
-
-/* Pure parsers.  */
-#define YYPURE 0
-
-/* Using locations.  */
-#define YYLSP_NEEDED 0
-
-/* Substitute the variable and function names.  */
 #define yyparse llvmAsmparse
-#define yylex   llvmAsmlex
+#define yylex llvmAsmlex
 #define yyerror llvmAsmerror
-#define yylval  llvmAsmlval
-#define yychar  llvmAsmchar
+#define yylval llvmAsmlval
+#define yychar llvmAsmchar
 #define yydebug llvmAsmdebug
 #define yynerrs llvmAsmnerrs
+#define	ESINT64VAL	257
+#define	EUINT64VAL	258
+#define	LOCALVAL_ID	259
+#define	GLOBALVAL_ID	260
+#define	FPVAL	261
+#define	VOID	262
+#define	INTTYPE	263
+#define	FLOAT	264
+#define	DOUBLE	265
+#define	LABEL	266
+#define	TYPE	267
+#define	LOCALVAR	268
+#define	GLOBALVAR	269
+#define	LABELSTR	270
+#define	STRINGCONSTANT	271
+#define	ATSTRINGCONSTANT	272
+#define	IMPLEMENTATION	273
+#define	ZEROINITIALIZER	274
+#define	TRUETOK	275
+#define	FALSETOK	276
+#define	BEGINTOK	277
+#define	ENDTOK	278
+#define	DECLARE	279
+#define	DEFINE	280
+#define	GLOBAL	281
+#define	CONSTANT	282
+#define	SECTION	283
+#define	VOLATILE	284
+#define	TO	285
+#define	DOTDOTDOT	286
+#define	NULL_TOK	287
+#define	UNDEF	288
+#define	INTERNAL	289
+#define	LINKONCE	290
+#define	WEAK	291
+#define	APPENDING	292
+#define	DLLIMPORT	293
+#define	DLLEXPORT	294
+#define	EXTERN_WEAK	295
+#define	OPAQUE	296
+#define	EXTERNAL	297
+#define	TARGET	298
+#define	TRIPLE	299
+#define	ALIGN	300
+#define	DEPLIBS	301
+#define	CALL	302
+#define	TAIL	303
+#define	ASM_TOK	304
+#define	MODULE	305
+#define	SIDEEFFECT	306
+#define	CC_TOK	307
+#define	CCC_TOK	308
+#define	FASTCC_TOK	309
+#define	COLDCC_TOK	310
+#define	X86_STDCALLCC_TOK	311
+#define	X86_FASTCALLCC_TOK	312
+#define	DATALAYOUT	313
+#define	RET	314
+#define	BR	315
+#define	SWITCH	316
+#define	INVOKE	317
+#define	UNWIND	318
+#define	UNREACHABLE	319
+#define	ADD	320
+#define	SUB	321
+#define	MUL	322
+#define	UDIV	323
+#define	SDIV	324
+#define	FDIV	325
+#define	UREM	326
+#define	SREM	327
+#define	FREM	328
+#define	AND	329
+#define	OR	330
+#define	XOR	331
+#define	ICMP	332
+#define	FCMP	333
+#define	EQ	334
+#define	NE	335
+#define	SLT	336
+#define	SGT	337
+#define	SLE	338
+#define	SGE	339
+#define	ULT	340
+#define	UGT	341
+#define	ULE	342
+#define	UGE	343
+#define	OEQ	344
+#define	ONE	345
+#define	OLT	346
+#define	OGT	347
+#define	OLE	348
+#define	OGE	349
+#define	ORD	350
+#define	UNO	351
+#define	UEQ	352
+#define	UNE	353
+#define	MALLOC	354
+#define	ALLOCA	355
+#define	FREE	356
+#define	LOAD	357
+#define	STORE	358
+#define	GETELEMENTPTR	359
+#define	TRUNC	360
+#define	ZEXT	361
+#define	SEXT	362
+#define	FPTRUNC	363
+#define	FPEXT	364
+#define	BITCAST	365
+#define	UITOFP	366
+#define	SITOFP	367
+#define	FPTOUI	368
+#define	FPTOSI	369
+#define	INTTOPTR	370
+#define	PTRTOINT	371
+#define	PHI_TOK	372
+#define	SELECT	373
+#define	SHL	374
+#define	LSHR	375
+#define	ASHR	376
+#define	VAARG	377
+#define	EXTRACTELEMENT	378
+#define	INSERTELEMENT	379
+#define	SHUFFLEVECTOR	380
+#define	NORETURN	381
+#define	INREG	382
+#define	SRET	383
+#define	DEFAULT	384
+#define	HIDDEN	385
 
-
-/* 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,
-     LOCALVAL_ID = 260,
-     GLOBALVAL_ID = 261,
-     FPVAL = 262,
-     VOID = 263,
-     INTTYPE = 264,
-     FLOAT = 265,
-     DOUBLE = 266,
-     LABEL = 267,
-     TYPE = 268,
-     LOCALVAR = 269,
-     GLOBALVAR = 270,
-     LABELSTR = 271,
-     STRINGCONSTANT = 272,
-     ATSTRINGCONSTANT = 273,
-     IMPLEMENTATION = 274,
-     ZEROINITIALIZER = 275,
-     TRUETOK = 276,
-     FALSETOK = 277,
-     BEGINTOK = 278,
-     ENDTOK = 279,
-     DECLARE = 280,
-     DEFINE = 281,
-     GLOBAL = 282,
-     CONSTANT = 283,
-     SECTION = 284,
-     VOLATILE = 285,
-     TO = 286,
-     DOTDOTDOT = 287,
-     NULL_TOK = 288,
-     UNDEF = 289,
-     INTERNAL = 290,
-     LINKONCE = 291,
-     WEAK = 292,
-     APPENDING = 293,
-     DLLIMPORT = 294,
-     DLLEXPORT = 295,
-     EXTERN_WEAK = 296,
-     OPAQUE = 297,
-     EXTERNAL = 298,
-     TARGET = 299,
-     TRIPLE = 300,
-     ALIGN = 301,
-     DEPLIBS = 302,
-     CALL = 303,
-     TAIL = 304,
-     ASM_TOK = 305,
-     MODULE = 306,
-     SIDEEFFECT = 307,
-     CC_TOK = 308,
-     CCC_TOK = 309,
-     FASTCC_TOK = 310,
-     COLDCC_TOK = 311,
-     X86_STDCALLCC_TOK = 312,
-     X86_FASTCALLCC_TOK = 313,
-     DATALAYOUT = 314,
-     RET = 315,
-     BR = 316,
-     SWITCH = 317,
-     INVOKE = 318,
-     UNWIND = 319,
-     UNREACHABLE = 320,
-     ADD = 321,
-     SUB = 322,
-     MUL = 323,
-     UDIV = 324,
-     SDIV = 325,
-     FDIV = 326,
-     UREM = 327,
-     SREM = 328,
-     FREM = 329,
-     AND = 330,
-     OR = 331,
-     XOR = 332,
-     ICMP = 333,
-     FCMP = 334,
-     EQ = 335,
-     NE = 336,
-     SLT = 337,
-     SGT = 338,
-     SLE = 339,
-     SGE = 340,
-     ULT = 341,
-     UGT = 342,
-     ULE = 343,
-     UGE = 344,
-     OEQ = 345,
-     ONE = 346,
-     OLT = 347,
-     OGT = 348,
-     OLE = 349,
-     OGE = 350,
-     ORD = 351,
-     UNO = 352,
-     UEQ = 353,
-     UNE = 354,
-     MALLOC = 355,
-     ALLOCA = 356,
-     FREE = 357,
-     LOAD = 358,
-     STORE = 359,
-     GETELEMENTPTR = 360,
-     TRUNC = 361,
-     ZEXT = 362,
-     SEXT = 363,
-     FPTRUNC = 364,
-     FPEXT = 365,
-     BITCAST = 366,
-     UITOFP = 367,
-     SITOFP = 368,
-     FPTOUI = 369,
-     FPTOSI = 370,
-     INTTOPTR = 371,
-     PTRTOINT = 372,
-     PHI_TOK = 373,
-     SELECT = 374,
-     SHL = 375,
-     LSHR = 376,
-     ASHR = 377,
-     VAARG = 378,
-     EXTRACTELEMENT = 379,
-     INSERTELEMENT = 380,
-     SHUFFLEVECTOR = 381,
-     NORETURN = 382,
-     INREG = 383,
-     SRET = 384,
-     DEFAULT = 385,
-     HIDDEN = 386
-   };
-#endif
-/* Tokens.  */
-#define ESINT64VAL 258
-#define EUINT64VAL 259
-#define LOCALVAL_ID 260
-#define GLOBALVAL_ID 261
-#define FPVAL 262
-#define VOID 263
-#define INTTYPE 264
-#define FLOAT 265
-#define DOUBLE 266
-#define LABEL 267
-#define TYPE 268
-#define LOCALVAR 269
-#define GLOBALVAR 270
-#define LABELSTR 271
-#define STRINGCONSTANT 272
-#define ATSTRINGCONSTANT 273
-#define IMPLEMENTATION 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 VOLATILE 285
-#define TO 286
-#define DOTDOTDOT 287
-#define NULL_TOK 288
-#define UNDEF 289
-#define INTERNAL 290
-#define LINKONCE 291
-#define WEAK 292
-#define APPENDING 293
-#define DLLIMPORT 294
-#define DLLEXPORT 295
-#define EXTERN_WEAK 296
-#define OPAQUE 297
-#define EXTERNAL 298
-#define TARGET 299
-#define TRIPLE 300
-#define ALIGN 301
-#define DEPLIBS 302
-#define CALL 303
-#define TAIL 304
-#define ASM_TOK 305
-#define MODULE 306
-#define SIDEEFFECT 307
-#define CC_TOK 308
-#define CCC_TOK 309
-#define FASTCC_TOK 310
-#define COLDCC_TOK 311
-#define X86_STDCALLCC_TOK 312
-#define X86_FASTCALLCC_TOK 313
-#define DATALAYOUT 314
-#define RET 315
-#define BR 316
-#define SWITCH 317
-#define INVOKE 318
-#define UNWIND 319
-#define UNREACHABLE 320
-#define ADD 321
-#define SUB 322
-#define MUL 323
-#define UDIV 324
-#define SDIV 325
-#define FDIV 326
-#define UREM 327
-#define SREM 328
-#define FREM 329
-#define AND 330
-#define OR 331
-#define XOR 332
-#define ICMP 333
-#define FCMP 334
-#define EQ 335
-#define NE 336
-#define SLT 337
-#define SGT 338
-#define SLE 339
-#define SGE 340
-#define ULT 341
-#define UGT 342
-#define ULE 343
-#define UGE 344
-#define OEQ 345
-#define ONE 346
-#define OLT 347
-#define OGT 348
-#define OLE 349
-#define OGE 350
-#define ORD 351
-#define UNO 352
-#define UEQ 353
-#define UNE 354
-#define MALLOC 355
-#define ALLOCA 356
-#define FREE 357
-#define LOAD 358
-#define STORE 359
-#define GETELEMENTPTR 360
-#define TRUNC 361
-#define ZEXT 362
-#define SEXT 363
-#define FPTRUNC 364
-#define FPEXT 365
-#define BITCAST 366
-#define UITOFP 367
-#define SITOFP 368
-#define FPTOUI 369
-#define FPTOSI 370
-#define INTTOPTR 371
-#define PTRTOINT 372
-#define PHI_TOK 373
-#define SELECT 374
-#define SHL 375
-#define LSHR 376
-#define ASHR 377
-#define VAARG 378
-#define EXTRACTELEMENT 379
-#define INSERTELEMENT 380
-#define SHUFFLEVECTOR 381
-#define NORETURN 382
-#define INREG 383
-#define SRET 384
-#define DEFAULT 385
-#define HIDDEN 386
-
-
-
-
-/* Copy the first part of user declarations.  */
-#line 14 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 14 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 
 #include "ParserInternals.h"
 #include "llvm/CallingConv.h"
@@ -340,6 +151,7 @@
 #include "llvm/SymbolTable.h"
 #include "llvm/Support/GetElementPtrTypeIterator.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/Support/MathExtras.h"
 #include "llvm/Support/Streams.h"
@@ -1201,28 +1013,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)
-#line 885 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-typedef union YYSTYPE {
+#line 886 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+typedef union {
   llvm::Module                           *ModuleVal;
   llvm::Function                         *FunctionVal;
   llvm::BasicBlock                       *BasicBlockVal;
@@ -1267,1529 +1059,1062 @@
   llvm::ICmpInst::Predicate         IPredicate;
   llvm::FCmpInst::Predicate         FPredicate;
 } YYSTYPE;
-/* Line 196 of yacc.c.  */
-#line 1272 "llvmAsmParser.tab.c"
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
+#include <stdio.h>
+
+#ifndef __cplusplus
+#ifndef __STDC__
+#define const
+#endif
 #endif
 
 
 
-/* Copy the second part of user declarations.  */
+#define	YYFINAL		567
+#define	YYFLAG		-32768
+#define	YYNTBASE	146
 
+#define YYTRANSLATE(x) ((unsigned)(x) <= 385 ? yytranslate[x] : 224)
 
-/* Line 219 of yacc.c.  */
-#line 1284 "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,   136,
+   137,   134,     2,   133,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,   141,
+   132,   142,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+   138,   135,   140,     2,     2,     2,     2,     2,   145,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,   139,
+     2,     2,   143,     2,   144,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     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
+};
 
-#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
-# define YYSIZE_T __SIZE_TYPE__
-#endif
-#if ! defined (YYSIZE_T) && defined (size_t)
-# define YYSIZE_T size_t
-#endif
-#if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus))
-# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-# define YYSIZE_T size_t
-#endif
-#if ! defined (YYSIZE_T)
-# define YYSIZE_T unsigned int
-#endif
+#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,   130,   131,   133,   135,   137,
+   139,   141,   143,   145,   147,   148,   150,   151,   153,   155,
+   156,   158,   160,   162,   164,   165,   167,   169,   171,   173,
+   175,   178,   180,   182,   184,   186,   187,   190,   192,   194,
+   195,   198,   199,   202,   203,   207,   210,   211,   213,   214,
+   218,   220,   223,   225,   227,   229,   231,   233,   235,   238,
+   240,   243,   249,   255,   261,   267,   271,   274,   280,   285,
+   288,   290,   292,   294,   298,   300,   304,   306,   307,   309,
+   313,   318,   322,   326,   331,   336,   340,   347,   353,   356,
+   359,   362,   365,   368,   371,   374,   377,   380,   383,   390,
+   396,   405,   412,   419,   427,   435,   442,   449,   458,   467,
+   471,   473,   475,   477,   479,   480,   482,   485,   486,   490,
+   491,   495,   499,   501,   505,   509,   510,   517,   518,   526,
+   527,   535,   538,   542,   544,   548,   552,   556,   560,   562,
+   563,   569,   573,   575,   579,   581,   582,   592,   594,   596,
+   601,   603,   605,   608,   612,   613,   615,   617,   619,   621,
+   623,   625,   627,   629,   631,   635,   637,   643,   645,   647,
+   649,   651,   653,   655,   658,   661,   664,   668,   671,   672,
+   674,   677,   680,   684,   694,   704,   713,   728,   730,   732,
+   739,   745,   748,   755,   763,   767,   773,   774,   775,   779,
+   782,   784,   790,   796,   803,   810,   815,   820,   827,   832,
+   837,   844,   851,   854,   863,   865,   867,   868,   872,   879,
+   883,   890,   893,   898,   905
+};
 
-#ifndef YY_
-# if YYENABLE_NLS
-#  if ENABLE_NLS
-#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-#   define YY_(msgid) dgettext ("bison-runtime", msgid)
-#  endif
-# endif
-# ifndef YY_
-#  define YY_(msgid) msgid
-# endif
-#endif
-
-#if ! defined (yyoverflow) || YYERROR_VERBOSE
-
-/* The parser invokes alloca or malloc; define the necessary symbols.  */
-
-# ifdef YYSTACK_USE_ALLOCA
-#  if YYSTACK_USE_ALLOCA
-#   ifdef __GNUC__
-#    define YYSTACK_ALLOC __builtin_alloca
-#   else
-#    define YYSTACK_ALLOC alloca
-#    if defined (__STDC__) || defined (__cplusplus)
-#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#     define YYINCLUDED_STDLIB_H
-#    endif
-#   endif
-#  endif
-# endif
-
-# ifdef YYSTACK_ALLOC
-   /* Pacify GCC's `empty if-body' warning. */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
-#  ifndef YYSTACK_ALLOC_MAXIMUM
-    /* The OS might guarantee only one guard page at the bottom of the stack,
-       and a page size can be as small as 4096 bytes.  So we cannot safely
-       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
-       to allow for a few compiler-allocated temporary stack slots.  */
-#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */
-#  endif
-# else
-#  define YYSTACK_ALLOC YYMALLOC
-#  define YYSTACK_FREE YYFREE
-#  ifndef YYSTACK_ALLOC_MAXIMUM
-#   define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1)
-#  endif
-#  ifdef __cplusplus
-extern "C" {
-#  endif
-#  ifndef YYMALLOC
-#   define YYMALLOC malloc
-#   if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \
-	&& (defined (__STDC__) || defined (__cplusplus)))
-void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-#  ifndef YYFREE
-#   define YYFREE free
-#   if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \
-	&& (defined (__STDC__) || defined (__cplusplus)))
-void free (void *); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-#  ifdef __cplusplus
-}
-#  endif
-# endif
-#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
-
-
-#if (! defined (yyoverflow) \
-     && (! defined (__cplusplus) \
-	 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
-
-/* A type that is properly aligned for any stack member.  */
-union yyalloc
-{
-  short int yyss;
-  YYSTYPE yyvs;
-  };
-
-/* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
-
-/* The size of an array large to enough to hold all stacks, each with
-   N elements.  */
-# define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (short int) + sizeof (YYSTYPE))			\
-      + YYSTACK_GAP_MAXIMUM)
-
-/* Copy COUNT objects from FROM to TO.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if defined (__GNUC__) && 1 < __GNUC__
-#   define YYCOPY(To, From, Count) \
-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-#  else
-#   define YYCOPY(To, From, Count)		\
-      do					\
-	{					\
-	  YYSIZE_T yyi;				\
-	  for (yyi = 0; yyi < (Count); yyi++)	\
-	    (To)[yyi] = (From)[yyi];		\
-	}					\
-      while (0)
-#  endif
-# endif
-
-/* Relocate STACK from its old location to the new one.  The
-   local variables YYSIZE and YYSTACKSIZE give the old and new number of
-   elements in the stack, and YYPTR gives the new location of the
-   stack.  Advance YYPTR to a properly aligned location for the next
-   stack.  */
-# define YYSTACK_RELOCATE(Stack)					\
-    do									\
-      {									\
-	YYSIZE_T yynewbytes;						\
-	YYCOPY (&yyptr->Stack, Stack, yysize);				\
-	Stack = &yyptr->Stack;						\
-	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-	yyptr += yynewbytes / sizeof (*yyptr);				\
-      }									\
-    while (0)
+static const short yyrhs[] = {    66,
+     0,    67,     0,    68,     0,    69,     0,    70,     0,    71,
+     0,    72,     0,    73,     0,    74,     0,    75,     0,    76,
+     0,    77,     0,   106,     0,   107,     0,   108,     0,   109,
+     0,   110,     0,   111,     0,   112,     0,   113,     0,   114,
+     0,   115,     0,   116,     0,   117,     0,   120,     0,   121,
+     0,   122,     0,    80,     0,    81,     0,    82,     0,    83,
+     0,    84,     0,    85,     0,    86,     0,    87,     0,    88,
+     0,    89,     0,    90,     0,    91,     0,    92,     0,    93,
+     0,    94,     0,    95,     0,    96,     0,    97,     0,    98,
+     0,    99,     0,    86,     0,    87,     0,    88,     0,    89,
+     0,    21,     0,    22,     0,     9,     0,    10,     0,    11,
+     0,    14,     0,    17,     0,   154,     0,     0,   154,   132,
+     0,     0,    15,     0,    18,     0,   157,   132,     0,     0,
+    35,     0,    37,     0,    36,     0,    38,     0,    40,     0,
+    39,     0,    41,     0,    43,     0,     0,   131,     0,     0,
+    39,     0,    41,     0,     0,    35,     0,    36,     0,    37,
+     0,    40,     0,     0,    54,     0,    55,     0,    56,     0,
+    57,     0,    58,     0,    53,     4,     0,   107,     0,   108,
+     0,   128,     0,   129,     0,     0,   166,   165,     0,   127,
+     0,   165,     0,     0,   168,   167,     0,     0,    46,     4,
+     0,     0,   133,    46,     4,     0,    29,    17,     0,     0,
+   171,     0,     0,   133,   174,   173,     0,   171,     0,    46,
+     4,     0,     9,     0,    10,     0,    11,     0,    12,     0,
+    42,     0,   175,     0,   176,   134,     0,   208,     0,   135,
+     4,     0,   176,   136,   180,   137,   168,     0,     8,   136,
+   180,   137,   168,     0,   138,     4,   139,   176,   140,     0,
+   141,     4,   139,   176,   142,     0,   143,   181,   144,     0,
+   143,   144,     0,   141,   143,   181,   144,   142,     0,   141,
+   143,   144,   142,     0,   176,   166,     0,   176,     0,     8,
+     0,   177,     0,   179,   133,   177,     0,   179,     0,   179,
+   133,    32,     0,    32,     0,     0,   176,     0,   181,   133,
+   176,     0,   176,   138,   184,   140,     0,   176,   138,   140,
+     0,   176,   145,    17,     0,   176,   141,   184,   142,     0,
+   176,   143,   184,   144,     0,   176,   143,   144,     0,   176,
+   141,   143,   184,   144,   142,     0,   176,   141,   143,   144,
+   142,     0,   176,    33,     0,   176,    34,     0,   176,   208,
+     0,   176,   183,     0,   176,    20,     0,   152,     3,     0,
+   152,     4,     0,     9,    21,     0,     9,    22,     0,   153,
+     7,     0,   148,   136,   182,    31,   176,   137,     0,   105,
+   136,   182,   219,   137,     0,   119,   136,   182,   133,   182,
+   133,   182,   137,     0,   146,   136,   182,   133,   182,   137,
+     0,   147,   136,   182,   133,   182,   137,     0,    78,   150,
+   136,   182,   133,   182,   137,     0,    79,   151,   136,   182,
+   133,   182,   137,     0,   149,   136,   182,   133,   182,   137,
+     0,   124,   136,   182,   133,   182,   137,     0,   125,   136,
+   182,   133,   182,   133,   182,   137,     0,   126,   136,   182,
+   133,   182,   133,   182,   137,     0,   184,   133,   182,     0,
+   182,     0,    27,     0,    28,     0,   187,     0,     0,   188,
+     0,   187,   188,     0,     0,    26,   189,   204,     0,     0,
+    25,   190,   205,     0,    51,    50,   194,     0,    19,     0,
+   156,    13,   176,     0,   156,    13,     8,     0,     0,   158,
+   161,   185,   182,   191,   173,     0,     0,   158,   159,   161,
+   185,   182,   192,   173,     0,     0,   158,   160,   161,   185,
+   176,   193,   173,     0,    44,   195,     0,    47,   132,   196,
+     0,    17,     0,    45,   132,    17,     0,    59,   132,    17,
+     0,   138,   197,   140,     0,   197,   133,    17,     0,    17,
+     0,     0,   198,   133,   176,   166,   155,     0,   176,   166,
+   155,     0,   198,     0,   198,   133,    32,     0,    32,     0,
+     0,   164,   178,   157,   136,   199,   137,   168,   172,   169,
+     0,    23,     0,   143,     0,   163,   161,   200,   201,     0,
+    24,     0,   144,     0,   211,   203,     0,   162,   161,   200,
+     0,     0,    52,     0,     3,     0,     4,     0,     7,     0,
+    21,     0,    22,     0,    33,     0,    34,     0,    20,     0,
+   141,   184,   142,     0,   183,     0,    50,   206,    17,   133,
+    17,     0,     5,     0,     6,     0,   154,     0,   157,     0,
+   208,     0,   207,     0,   176,   209,     0,   211,   212,     0,
+   202,   212,     0,   213,   156,   214,     0,   213,   216,     0,
+     0,    16,     0,    60,   210,     0,    60,     8,     0,    61,
+    12,   209,     0,    61,     9,   209,   133,    12,   209,   133,
+    12,   209,     0,    62,   152,   209,   133,    12,   209,   138,
+   215,   140,     0,    62,   152,   209,   133,    12,   209,   138,
+   140,     0,    63,   164,   178,   209,   136,   218,   137,   168,
+    31,    12,   209,    64,    12,   209,     0,    64,     0,    65,
+     0,   215,   152,   207,   133,    12,   209,     0,   152,   207,
+   133,    12,   209,     0,   156,   221,     0,   176,   138,   209,
+   133,   209,   140,     0,   217,   133,   138,   209,   133,   209,
+   140,     0,   176,   209,   166,     0,   218,   133,   176,   209,
+   166,     0,     0,     0,   219,   133,   210,     0,    49,    48,
+     0,    48,     0,   146,   176,   209,   133,   209,     0,   147,
+   176,   209,   133,   209,     0,    78,   150,   176,   209,   133,
+   209,     0,    79,   151,   176,   209,   133,   209,     0,   149,
+   210,   133,   210,     0,   148,   210,    31,   176,     0,   119,
+   210,   133,   210,   133,   210,     0,   123,   210,   133,   176,
+     0,   124,   210,   133,   210,     0,   125,   210,   133,   210,
+   133,   210,     0,   126,   210,   133,   210,   133,   210,     0,
+   118,   217,     0,   220,   164,   178,   209,   136,   218,   137,
+   168,     0,   223,     0,    30,     0,     0,   100,   176,   170,
+     0,   100,   176,   133,     9,   209,   170,     0,   101,   176,
+   170,     0,   101,   176,   133,     9,   209,   170,     0,   102,
+   210,     0,   222,   103,   176,   209,     0,   222,   104,   210,
+   133,   176,   209,     0,   105,   176,   209,   219,     0
+};
 
 #endif
 
-#if defined (__STDC__) || defined (__cplusplus)
-   typedef signed char yysigned_char;
+#if YYDEBUG != 0
+static const short yyrline[] = { 0,
+  1032,  1032,  1032,  1032,  1032,  1032,  1032,  1032,  1032,  1033,
+  1033,  1033,  1034,  1034,  1034,  1034,  1034,  1034,  1034,  1035,
+  1035,  1035,  1035,  1035,  1036,  1036,  1036,  1038,  1038,  1039,
+  1039,  1040,  1040,  1041,  1041,  1042,  1042,  1046,  1046,  1047,
+  1047,  1048,  1048,  1049,  1049,  1050,  1050,  1051,  1051,  1052,
+  1052,  1053,  1054,  1059,  1060,  1060,  1062,  1062,  1063,  1063,
+  1067,  1071,  1076,  1076,  1078,  1082,  1088,  1089,  1090,  1091,
+  1092,  1096,  1097,  1098,  1102,  1103,  1107,  1108,  1109,  1113,
+  1114,  1115,  1116,  1117,  1120,  1120,  1121,  1122,  1123,  1124,
+  1125,  1133,  1134,  1135,  1136,  1139,  1140,  1145,  1146,  1149,
+  1150,  1157,  1157,  1164,  1164,  1173,  1181,  1181,  1187,  1187,
+  1189,  1194,  1207,  1207,  1207,  1207,  1210,  1214,  1218,  1225,
+  1230,  1238,  1256,  1274,  1279,  1291,  1301,  1305,  1315,  1322,
+  1329,  1336,  1341,  1346,  1353,  1354,  1361,  1368,  1376,  1381,
+  1392,  1420,  1436,  1465,  1493,  1518,  1537,  1562,  1581,  1593,
+  1600,  1666,  1676,  1686,  1692,  1698,  1703,  1708,  1716,  1728,
+  1749,  1757,  1763,  1774,  1779,  1784,  1793,  1799,  1805,  1814,
+  1818,  1826,  1826,  1837,  1842,  1850,  1851,  1855,  1855,  1859,
+  1859,  1862,  1865,  1877,  1901,  1912,  1919,  1922,  1927,  1930,
+  1936,  1940,  1943,  1949,  1962,  1966,  1971,  1973,  1978,  1983,
+  1992,  2002,  2013,  2017,  2026,  2035,  2040,  2146,  2146,  2148,
+  2157,  2157,  2159,  2164,  2176,  2180,  2185,  2189,  2193,  2197,
+  2201,  2205,  2209,  2213,  2217,  2242,  2246,  2260,  2264,  2268,
+  2272,  2278,  2278,  2284,  2293,  2297,  2306,  2317,  2326,  2338,
+  2351,  2355,  2359,  2364,  2374,  2393,  2402,  2469,  2473,  2480,
+  2491,  2504,  2513,  2524,  2534,  2542,  2550,  2553,  2554,  2561,
+  2565,  2570,  2591,  2608,  2621,  2634,  2643,  2655,  2663,  2670,
+  2676,  2682,  2688,  2703,  2767,  2772,  2776,  2783,  2790,  2798,
+  2805,  2813,  2821,  2835,  2852
+};
+#endif
+
+
+#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
+
+static const char * const yytname[] = {   "$","error","$undefined.","ESINT64VAL",
+"EUINT64VAL","LOCALVAL_ID","GLOBALVAL_ID","FPVAL","VOID","INTTYPE","FLOAT","DOUBLE",
+"LABEL","TYPE","LOCALVAR","GLOBALVAR","LABELSTR","STRINGCONSTANT","ATSTRINGCONSTANT",
+"IMPLEMENTATION","ZEROINITIALIZER","TRUETOK","FALSETOK","BEGINTOK","ENDTOK",
+"DECLARE","DEFINE","GLOBAL","CONSTANT","SECTION","VOLATILE","TO","DOTDOTDOT",
+"NULL_TOK","UNDEF","INTERNAL","LINKONCE","WEAK","APPENDING","DLLIMPORT","DLLEXPORT",
+"EXTERN_WEAK","OPAQUE","EXTERNAL","TARGET","TRIPLE","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","ICMP","FCMP","EQ","NE","SLT","SGT","SLE","SGE","ULT",
+"UGT","ULE","UGE","OEQ","ONE","OLT","OGT","OLE","OGE","ORD","UNO","UEQ","UNE",
+"MALLOC","ALLOCA","FREE","LOAD","STORE","GETELEMENTPTR","TRUNC","ZEXT","SEXT",
+"FPTRUNC","FPEXT","BITCAST","UITOFP","SITOFP","FPTOUI","FPTOSI","INTTOPTR","PTRTOINT",
+"PHI_TOK","SELECT","SHL","LSHR","ASHR","VAARG","EXTRACTELEMENT","INSERTELEMENT",
+"SHUFFLEVECTOR","NORETURN","INREG","SRET","DEFAULT","HIDDEN","'='","','","'*'",
+"'\\\\'","'('","')'","'['","'x'","']'","'<'","'>'","'{'","'}'","'c'","ArithmeticOps",
+"LogicalOps","CastOps","ShiftOps","IPredicates","FPredicates","IntType","FPType",
+"LocalName","OptLocalName","OptLocalAssign","GlobalName","OptGlobalAssign","GVInternalLinkage",
+"GVExternalLinkage","GVVisibilityStyle","FunctionDeclareLinkage","FunctionDefineLinkage",
+"OptCallingConv","ParamAttr","OptParamAttrs","FuncAttr","OptFuncAttrs","OptAlign",
+"OptCAlign","SectionString","OptSection","GlobalVarAttributes","GlobalVarAttribute",
+"PrimType","Types","ArgType","ResultTypes","ArgTypeList","ArgTypeListI","TypeListI",
+"ConstVal","ConstExpr","ConstVector","GlobalType","Module","DefinitionList",
+"Definition","@1","@2","@3","@4","@5","AsmBlock","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,
+   146,   146,   146,   146,   146,   146,   146,   146,   146,   147,
+   147,   147,   148,   148,   148,   148,   148,   148,   148,   148,
+   148,   148,   148,   148,   149,   149,   149,   150,   150,   150,
+   150,   150,   150,   150,   150,   150,   150,   151,   151,   151,
+   151,   151,   151,   151,   151,   151,   151,   151,   151,   151,
+   151,   151,   151,   152,   153,   153,   154,   154,   155,   155,
+   156,   156,   157,   157,   158,   158,   159,   159,   159,   159,
+   159,   160,   160,   160,   161,   161,   162,   162,   162,   163,
+   163,   163,   163,   163,   164,   164,   164,   164,   164,   164,
+   164,   165,   165,   165,   165,   166,   166,   167,   167,   168,
+   168,   169,   169,   170,   170,   171,   172,   172,   173,   173,
+   174,   174,   175,   175,   175,   175,   176,   176,   176,   176,
+   176,   176,   176,   176,   176,   176,   176,   176,   176,   177,
+   178,   178,   179,   179,   180,   180,   180,   180,   181,   181,
+   182,   182,   182,   182,   182,   182,   182,   182,   182,   182,
+   182,   182,   182,   182,   182,   182,   182,   182,   183,   183,
+   183,   183,   183,   183,   183,   183,   183,   183,   183,   184,
+   184,   185,   185,   186,   186,   187,   187,   189,   188,   190,
+   188,   188,   188,   188,   188,   191,   188,   192,   188,   193,
+   188,   188,   188,   194,   195,   195,   196,   197,   197,   197,
+   198,   198,   199,   199,   199,   199,   200,   201,   201,   202,
+   203,   203,   204,   205,   206,   206,   207,   207,   207,   207,
+   207,   207,   207,   207,   207,   207,   207,   208,   208,   208,
+   208,   209,   209,   210,   211,   211,   212,   213,   213,   213,
+   214,   214,   214,   214,   214,   214,   214,   214,   214,   215,
+   215,   216,   217,   217,   218,   218,   218,   219,   219,   220,
+   220,   221,   221,   221,   221,   221,   221,   221,   221,   221,
+   221,   221,   221,   221,   221,   222,   222,   223,   223,   223,
+   223,   223,   223,   223,   223
+};
+
+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,     2,     0,     1,     1,     1,     1,
+     1,     1,     1,     1,     0,     1,     0,     1,     1,     0,
+     1,     1,     1,     1,     0,     1,     1,     1,     1,     1,
+     2,     1,     1,     1,     1,     0,     2,     1,     1,     0,
+     2,     0,     2,     0,     3,     2,     0,     1,     0,     3,
+     1,     2,     1,     1,     1,     1,     1,     1,     2,     1,
+     2,     5,     5,     5,     5,     3,     2,     5,     4,     2,
+     1,     1,     1,     3,     1,     3,     1,     0,     1,     3,
+     4,     3,     3,     4,     4,     3,     6,     5,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     6,     5,
+     8,     6,     6,     7,     7,     6,     6,     8,     8,     3,
+     1,     1,     1,     1,     0,     1,     2,     0,     3,     0,
+     3,     3,     1,     3,     3,     0,     6,     0,     7,     0,
+     7,     2,     3,     1,     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,     4,     6,     4,     4,
+     6,     6,     2,     8,     1,     1,     0,     3,     6,     3,
+     6,     2,     4,     6,     4
+};
+
+static const short yydefact[] = {    66,
+    57,    63,    58,    64,   183,   180,   178,     0,     0,     0,
+     0,     0,     0,    75,    66,   176,    77,    80,     0,     0,
+   192,     0,     0,    61,     0,    65,    67,    69,    68,    70,
+    72,    71,    73,    74,    76,    75,    75,     0,   177,    78,
+    79,    75,   181,    81,    82,    83,    84,    75,   239,   179,
+   239,     0,     0,   200,   193,   194,   182,   228,   229,   185,
+   113,   114,   115,   116,   117,     0,     0,     0,     0,   230,
+   231,   118,   184,   120,     0,     0,   172,   173,     0,    85,
+    85,   240,   236,    62,   211,   212,   213,   235,   195,   196,
+   199,     0,   138,   121,     0,     0,     0,     0,   127,   139,
+     0,   119,   138,     0,     0,   113,   114,   115,     0,     0,
+     0,   186,     0,    86,    87,    88,    89,    90,     0,   214,
+     0,   277,   238,     0,   197,   137,    96,   133,   135,     0,
+     0,     0,     0,     0,     0,   126,     0,   188,   190,   156,
+   157,   154,   155,   158,   153,   149,   150,     1,     2,     3,
+     4,     5,     6,     7,     8,     9,    10,    11,    12,     0,
+     0,     0,    13,    14,    15,    16,    17,    18,    19,    20,
+    21,    22,    23,    24,     0,    25,    26,    27,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   152,
+   151,   109,    91,   132,   131,     0,   208,   209,   210,   276,
+   261,     0,     0,     0,     0,    85,   248,   249,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   237,    85,   252,     0,   275,   198,
+   130,     0,   100,     0,     0,   129,     0,   140,   100,   109,
+   109,    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,     0,
+     0,     0,     0,     0,   142,   171,     0,     0,     0,   146,
+     0,   143,     0,     0,     0,     0,     0,   187,     0,   260,
+   242,     0,   241,     0,     0,    54,     0,     0,     0,     0,
+   104,   104,   282,     0,     0,   273,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    92,    93,
+    94,    95,    97,   136,   134,   123,   124,   125,   128,   122,
+   189,   191,     0,     0,   258,     0,     0,     0,     0,     0,
+   141,   127,   139,     0,   144,   145,     0,     0,     0,     0,
+     0,     0,   111,   109,   206,   217,   218,   219,   224,   220,
+   221,   222,   223,   215,     0,   226,   233,   232,   234,     0,
+   243,     0,     0,     0,     0,     0,   278,     0,   280,   258,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,    98,    99,   101,     0,     0,     0,
+     0,     0,     0,     0,   170,   148,     0,     0,     0,     0,
+     0,   106,   112,   110,   205,    96,   203,     0,   216,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   285,
+     0,     0,     0,   269,   270,     0,     0,     0,     0,   267,
+   266,     0,   283,     0,     0,     0,     0,   160,     0,     0,
+     0,     0,   147,     0,     0,     0,     0,    60,     0,   100,
+     0,   225,     0,     0,   257,     0,     0,   104,   105,   104,
+     0,     0,     0,     0,     0,   262,   263,   257,     0,     0,
+     0,   259,     0,   167,     0,     0,   162,   163,   159,   166,
+    59,   202,   204,    96,   107,     0,     0,     0,     0,     0,
+   264,   265,     0,   279,   281,     0,     0,   268,   271,   272,
+     0,   284,   164,   165,     0,     0,     0,    60,   108,   102,
+   227,     0,     0,    96,     0,   100,   253,     0,   100,   161,
+   168,   169,   201,     0,   207,     0,   246,     0,     0,   255,
+     0,     0,   254,   274,   103,   244,     0,   245,     0,    96,
+     0,     0,     0,   256,     0,     0,     0,     0,   251,     0,
+     0,   250,     0,   247,     0,     0,     0
+};
+
+static const short yydefgoto[] = {   186,
+   187,   188,   189,   252,   269,   109,   110,    70,   492,    12,
+    71,    14,    36,    37,    38,    42,    48,   119,   323,   231,
+   397,   326,   535,   377,   353,   520,   288,   354,    72,   111,
+   128,   196,   129,   130,   101,   276,   366,   277,    79,   565,
+    15,    16,    18,    17,   192,   240,   241,    57,    21,    55,
+    92,   417,   418,   120,   199,    49,    87,    50,    43,   420,
+   367,    74,   369,   293,    51,    83,    84,   225,   539,   123,
+   306,   500,   400,   226,   227,   228,   229
+};
+
+static const short yypact[] = {   356,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,     4,  -115,    -2,
+   -52,    93,    -4,    51,   593,-32768,   195,   140,    41,    99,
+-32768,    87,   141,-32768,   125,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,   128,   128,    47,-32768,-32768,
+-32768,   128,-32768,-32768,-32768,-32768,-32768,   128,   251,-32768,
+    17,   262,   264,   269,-32768,-32768,-32768,-32768,-32768,   151,
+-32768,-32768,-32768,-32768,-32768,   287,   292,     3,    13,-32768,
+-32768,-32768,   113,-32768,    47,    47,-32768,-32768,   840,   290,
+   290,-32768,-32768,    88,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,   -90,  1094,-32768,   158,   164,   107,   151,-32768,   113,
+   -91,-32768,  1094,   840,  1054,    79,   295,   297,   208,   298,
+   616,-32768,   302,-32768,-32768,-32768,-32768,-32768,  1197,-32768,
+   -14,  1319,-32768,   291,-32768,-32768,   113,-32768,   179,   176,
+  1054,  1054,   175,   -82,  1054,-32768,   200,-32768,   113,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   241,
+   474,   202,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,   205,-32768,-32768,-32768,   213,   214,
+   215,   802,  1213,   460,   335,   218,   221,   232,   236,-32768,
+-32768,   245,-32768,   151,   113,   163,-32768,-32768,-32768,-32768,
+-32768,   331,  1235,   210,   371,   290,-32768,-32768,   241,   474,
+  1054,  1054,  1054,  1054,  1054,  1054,  1054,  1054,  1054,  1054,
+  1054,  1054,  1054,  1054,-32768,   290,-32768,   181,-32768,-32768,
+   -61,  1133,-32768,    26,   -64,-32768,   242,   113,-32768,   245,
+   245,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,   247,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   249,   840,
+   840,   840,   840,   840,-32768,-32768,   -30,   517,   -10,-32768,
+   -40,-32768,   840,   840,   840,   840,    10,-32768,   252,-32768,
+   151,   759,-32768,   884,   884,-32768,   884,  1197,  1054,  1054,
+    19,   144,-32768,   759,   119,   254,   258,   261,   263,   265,
+   266,   759,   759,   364,   268,  1197,  1054,  1054,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,   -31,-32768,-32768,-32768,   -31,
+-32768,-32768,   840,   840,-32768,   271,   273,   275,   276,   840,
+-32768,   260,   616,    -6,-32768,-32768,   277,   278,   387,   286,
+   404,   420,-32768,   245,  1149,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,   374,   840,-32768,-32768,-32768,-32768,   294,
+-32768,   296,   884,   759,   759,    20,-32768,    25,-32768,-32768,
+   884,   299,  1054,  1054,  1054,  1054,  1054,   301,   303,  1054,
+  1054,   884,   759,   305,-32768,-32768,-32768,   306,   307,    32,
+   840,   840,   840,   840,-32768,-32768,   300,   840,   840,  1054,
+   840,-32768,-32768,-32768,-32768,   113,   310,   308,-32768,   411,
+     8,   432,   434,   311,   315,   319,   884,   428,   884,   320,
+   322,   884,   323,   113,-32768,   324,   326,   884,   884,   113,
+-32768,   325,-32768,  1054,   840,   840,  1054,-32768,   327,   336,
+   330,   343,-32768,   342,   346,   136,   347,   154,  1168,-32768,
+   352,-32768,   884,   884,  1054,   884,   884,   354,-32768,   354,
+   884,   355,  1054,  1054,  1054,-32768,-32768,  1054,   759,   353,
+   357,-32768,   840,-32768,   840,   840,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,   113,    56,   447,   365,   359,   759,    73,
+-32768,-32768,   454,-32768,-32768,   340,   884,-32768,-32768,-32768,
+   100,-32768,-32768,-32768,   366,   367,   368,   154,-32768,   461,
+-32768,   494,     5,-32768,  1054,-32768,-32768,   369,-32768,-32768,
+-32768,-32768,-32768,   504,-32768,   884,-32768,  1008,     7,   -61,
+   759,   182,-32768,   -31,-32768,-32768,   379,-32768,  1008,-32768,
+   501,   502,   382,   -61,   884,   884,   505,   452,-32768,   884,
+   507,-32768,   884,-32768,   520,   521,-32768
+};
+
+static const short yypgoto[] = {   402,
+   408,   414,   415,   329,   332,  -203,-32768,     0,    15,   455,
+    11,-32768,-32768,-32768,   204,-32768,-32768,  -174,  -286,  -380,
+-32768,  -231,-32768,  -296,    45,-32768,  -228,-32768,-32768,   -24,
+   309,  -278,-32768,   440,   449,   -69,  -108,  -179,   168,-32768,
+-32768,   529,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,   467,-32768,-32768,-32768,-32768,-32768,-32768,
+  -429,   -74,   118,  -159,-32768,   498,-32768,-32768,-32768,-32768,
+-32768,    74,   171,-32768,-32768,-32768,-32768
+};
+
+
+#define	YYLAST		1445
+
+
+static const short yytable[] = {    11,
+    73,   297,   190,   279,   281,   379,    96,   330,   197,   112,
+    13,   331,   332,   296,    11,   296,    22,    58,    59,   373,
+    98,    61,    62,    63,    64,    13,     1,     2,   427,     3,
+     4,   298,    82,   429,   138,   458,   191,   392,   351,   396,
+    85,   135,   124,   396,   100,   319,   320,    23,    19,   125,
+   135,   316,   136,   303,    65,   352,   307,   308,   309,   310,
+   311,   237,    20,   314,   315,   428,   321,   322,   127,   102,
+   428,   103,   100,    77,    78,   319,   320,   328,   127,    24,
+   139,   -54,   -54,    11,   351,    27,    28,    29,    30,    31,
+    32,    33,   340,    34,   195,   395,   321,   322,   344,   140,
+   141,     1,   340,   346,     3,    25,   234,   235,   547,   341,
+   238,    58,    59,   518,    98,    61,    62,    63,    64,   553,
+     1,     2,   340,     3,     4,   414,   340,    26,   198,    58,
+    59,   345,    60,    61,    62,    63,    64,   407,     1,     2,
+   340,     3,     4,   540,   537,    97,   548,    66,    65,   462,
+    67,   376,   102,    68,   103,    69,    99,    56,   394,   102,
+    86,   103,   319,   320,   447,   327,    65,     1,   448,   554,
+     3,   504,    52,   505,    44,    45,    46,     2,   292,    47,
+     4,    35,   395,   321,   322,   421,   301,   302,   292,   304,
+   305,   292,   292,   292,   292,   292,   312,   313,   292,   292,
+   335,   336,   337,   338,   339,   525,   289,   127,   396,   526,
+   142,   143,   551,   347,   348,   349,   350,   368,   294,   368,
+   368,   295,   368,   433,    54,   435,   436,   437,   495,   368,
+    53,   441,   525,    40,   190,    41,   529,   368,   368,    75,
+    76,    66,   104,   105,    67,    80,   102,    68,   103,    69,
+   133,    81,   102,   343,   103,   396,   381,   396,    35,    66,
+   319,   320,    67,   398,   399,    68,    82,    69,   191,   102,
+   405,   103,   489,   195,   374,   375,   378,   102,    89,   103,
+    90,   321,   322,   317,   318,    91,    93,   482,   319,   320,
+    94,   195,   393,   292,   542,    95,   131,   544,   368,   368,
+   368,   -55,   132,   -56,   144,   193,   368,   230,   395,   321,
+   322,   232,   233,   508,   509,   510,   236,   368,   368,   538,
+   242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+   416,   449,   450,   451,   452,   549,   239,   270,   454,   455,
+   271,   457,   113,   114,   115,   116,   117,   118,   272,   273,
+   274,   282,   368,   283,   368,  -175,   284,   368,   292,   434,
+   292,   292,   292,   368,   368,   440,   292,   285,   -62,     1,
+     2,   286,     3,     4,     5,   480,   481,   287,   290,   296,
+     6,     7,   333,   329,   334,   456,   382,   355,   368,   368,
+   383,   368,   368,   384,   390,   385,   368,   386,   387,     8,
+   391,   406,     9,   401,   368,   402,    10,   403,   404,   408,
+   409,   370,   371,   515,   372,   516,   517,   410,   411,   479,
+   412,   380,   292,   413,   368,   419,   422,   461,   423,   388,
+   389,   469,   368,   438,   494,   439,   432,   444,   445,   446,
+   499,   453,   459,   463,   460,   464,   465,   466,   292,   292,
+   292,   467,   447,   499,   471,   473,   474,   491,   475,   483,
+   478,   368,   485,   521,    58,    59,   368,    98,   106,   107,
+   108,    64,   484,     1,     2,   486,     3,     4,   487,   527,
+   368,   368,   488,   490,   496,   368,   503,   507,   368,   513,
+   424,   425,   426,   514,   253,   254,   523,   522,   431,   428,
+   541,    65,   530,   531,   532,   536,   534,   545,   543,   442,
+   443,   552,   555,   556,   557,   561,   560,   491,   563,   566,
+   567,    58,    59,   221,    98,   106,   107,   108,    64,   222,
+     1,     2,   533,     3,     4,   223,   224,   299,   122,   519,
+   325,   300,   137,    39,   468,   134,   470,   121,    88,   472,
+   430,   511,     0,     0,     0,   476,   477,     0,    65,   255,
+   256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+   266,   267,   268,     0,     0,     0,     0,     0,     0,     0,
+   497,   498,     0,   501,   502,     0,     0,     0,   506,     0,
+     0,     0,  -174,     0,    66,     0,   512,    67,     0,     0,
+    68,     0,    69,   280,     0,   -62,     1,     2,     0,     3,
+     4,     5,     0,     0,     0,     0,   524,     6,     7,     0,
+    58,    59,     0,     0,   528,     0,     0,     0,     0,     1,
+     2,     0,     3,     4,     0,   145,     8,     0,     0,     9,
+     0,     0,     0,    10,     0,     0,     0,     0,   146,   147,
+     0,    66,     0,   546,    67,     0,     0,    68,   550,    69,
+   342,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   558,   559,     0,     0,     0,   562,     0,     0,
+   564,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+   157,   158,   159,   160,   161,     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,
+   162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+   172,   173,   174,     0,   175,   176,   177,   178,     0,   179,
+   180,   181,     0,     0,     0,     0,     0,     0,     0,   102,
+     0,   103,     0,   182,     0,     0,   183,     0,   184,     0,
+   185,   356,   357,    58,    59,   358,     0,     0,     0,     0,
+     0,     0,     1,     2,     0,     3,     4,     0,   359,   360,
+   361,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   362,   363,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,    58,    59,   364,    98,
+   106,   107,   108,    64,     0,     1,     2,     0,     3,     4,
+     0,     0,     0,     0,   148,   149,   150,   151,   152,   153,
+   154,   155,   156,   157,   158,   159,   160,   161,     0,     0,
+     0,     0,     0,    65,    58,    59,     0,    98,   106,   107,
+   108,    64,     0,     1,     2,     0,     3,     4,     0,     0,
+     0,     0,     0,   162,   163,   164,   165,   166,   167,   168,
+   169,   170,   171,   172,   173,   174,     0,   175,   176,   177,
+   178,    65,   179,   180,   181,     0,   356,   357,    58,    59,
+   358,     0,   102,     0,   103,     0,     0,     1,     2,   365,
+     3,     4,     0,   359,   360,   361,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   362,   363,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   364,     0,     0,    66,     0,     0,    67,
+     0,   275,    68,     0,    69,     0,     0,     0,     0,   148,
+   149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+   159,   160,   161,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,    66,     0,     0,    67,     0,     0,
+    68,     0,    69,     0,     0,     0,     0,     0,   162,   163,
+   164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+   174,     0,   175,   176,   177,   178,     0,   179,   180,   181,
+   356,   357,     0,     0,   358,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   365,     0,     0,   359,   360,   361,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   362,   363,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   364,    58,    59,
+     0,    98,    61,    62,    63,    64,     0,     1,     2,     0,
+     3,     4,     0,   148,   149,   150,   151,   152,   153,   154,
+   155,   156,   157,   158,   159,   160,   161,     0,     0,     0,
+     0,     0,     0,     0,     0,    65,     0,     0,    58,    59,
+     0,    98,    61,    62,    63,    64,     0,     1,     2,     0,
+     3,     4,   162,   163,   164,   165,   166,   167,   168,   169,
+   170,   171,   172,   173,   174,   126,   175,   176,   177,   178,
+     0,   179,   180,   181,     0,    65,     0,    58,    59,     0,
+    98,    61,    62,    63,    64,     0,     1,     2,   365,     3,
+     4,     0,     0,    58,    59,     0,    98,    61,    62,    63,
+    64,     0,     1,     2,   324,     3,     4,     0,     0,     0,
+     0,     0,    58,    59,    65,    98,    61,    62,    63,    64,
+   415,     1,     2,     0,     3,     4,     0,     0,    66,     0,
+    65,    67,     0,     0,    68,     0,    69,     0,     0,   493,
+     0,    58,    59,     0,   194,    61,    62,    63,    64,    65,
+     1,     2,     0,     3,     4,     0,     0,    58,    59,     0,
+    98,   106,   107,   108,    64,     0,     1,     2,    66,     3,
+     4,    67,     0,     0,    68,     0,    69,     0,    65,    58,
+    59,     0,   291,    61,    62,    63,    64,     0,     1,     2,
+     0,     3,     4,     0,    65,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,    66,     0,     0,
+    67,     0,     0,    68,     0,    69,    65,     0,     0,     0,
+     0,     0,     0,    66,     0,     0,    67,     0,     0,    68,
+     0,    69,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,    66,     0,     0,    67,     0,     0,    68,     0,
+    69,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,    66,     0,     0,    67,     0,     0,    68,     0,    69,
+     0,     0,     0,     0,     0,     0,     0,    66,   200,     0,
+    67,     0,     0,    68,     0,   278,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   201,   202,     0,    66,
+     0,     0,    67,     0,     0,    68,     0,    69,   203,   204,
+   205,   206,   207,   208,   148,   149,   150,   151,   152,   153,
+   154,   155,   156,   157,   158,   159,   209,   210,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   211,   212,
+   213,     0,     0,   214,   163,   164,   165,   166,   167,   168,
+   169,   170,   171,   172,   173,   174,   215,   216,   176,   177,
+   178,   217,   218,   219,   220
+};
+
+static const short yycheck[] = {     0,
+    25,   205,   111,   183,   184,   302,     4,   239,    23,    79,
+     0,   240,   241,     9,    15,     9,   132,     5,     6,   298,
+     8,     9,    10,    11,    12,    15,    14,    15,     9,    17,
+    18,   206,    16,     9,   104,   416,   111,   316,    29,   326,
+    24,   133,   133,   330,    69,   107,   108,    50,    45,   140,
+   133,   226,   144,   213,    42,    46,   216,   217,   218,   219,
+   220,   144,    59,   223,   224,    46,   128,   129,    93,   134,
+    46,   136,    97,    27,    28,   107,   108,   142,   103,   132,
+   105,     3,     4,    84,    29,    35,    36,    37,    38,    39,
+    40,    41,   133,    43,   119,   127,   128,   129,   278,    21,
+    22,    14,   133,   144,    17,    13,   131,   132,   538,   140,
+   135,     5,     6,   494,     8,     9,    10,    11,    12,   549,
+    14,    15,   133,    17,    18,   354,   133,   132,   143,     5,
+     6,   142,     8,     9,    10,    11,    12,   144,    14,    15,
+   133,    17,    18,   524,   140,   143,   140,   135,    42,   142,
+   138,   133,   134,   141,   136,   143,   144,    17,   318,   134,
+   144,   136,   107,   108,   133,   140,    42,    14,   137,   550,
+    17,   468,   132,   470,    35,    36,    37,    15,   203,    40,
+    18,   131,   127,   128,   129,   365,   211,   212,   213,   214,
+   215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
+   270,   271,   272,   273,   274,   133,   196,   232,   495,   137,
+     3,     4,    31,   283,   284,   285,   286,   292,     9,   294,
+   295,    12,   297,   383,   138,   385,   386,   387,   460,   304,
+   132,   391,   133,    39,   343,    41,   137,   312,   313,    36,
+    37,   135,    75,    76,   138,    42,   134,   141,   136,   143,
+   144,    48,   134,   278,   136,   542,   138,   544,   131,   135,
+   107,   108,   138,   333,   334,   141,    16,   143,   343,   134,
+   340,   136,   137,   298,   299,   300,   133,   134,    17,   136,
+    17,   128,   129,   103,   104,    17,   136,   447,   107,   108,
+     4,   316,   317,   318,   526,     4,   139,   529,   373,   374,
+   375,     7,   139,     7,     7,     4,   381,    17,   127,   128,
+   129,   133,   137,   473,   474,   475,   142,   392,   393,   523,
+    80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+   355,   401,   402,   403,   404,   539,   137,   136,   408,   409,
+   136,   411,    53,    54,    55,    56,    57,    58,   136,   136,
+   136,    17,   427,   136,   429,     0,   136,   432,   383,   384,
+   385,   386,   387,   438,   439,   390,   391,   136,    13,    14,
+    15,   136,    17,    18,    19,   445,   446,   133,    48,     9,
+    25,    26,   136,   142,   136,   410,   133,   136,   463,   464,
+   133,   466,   467,   133,    31,   133,   471,   133,   133,    44,
+   133,   142,    47,   133,   479,   133,    51,   133,   133,   133,
+   133,   294,   295,   483,   297,   485,   486,    31,   133,   444,
+    17,   304,   447,     4,   499,    52,   133,    17,   133,   312,
+   313,     4,   507,   133,   459,   133,   138,   133,   133,   133,
+   465,   142,   133,    12,   137,    12,   136,   133,   473,   474,
+   475,   133,   133,   478,   133,   133,   133,   458,   133,   133,
+   136,   536,   133,    17,     5,     6,   541,     8,     9,    10,
+    11,    12,   137,    14,    15,   133,    17,    18,   137,   140,
+   555,   556,   137,   137,   133,   560,   133,   133,   563,   137,
+   373,   374,   375,   137,    21,    22,   138,   133,   381,    46,
+   525,    42,   137,   137,   137,    12,    46,     4,   140,   392,
+   393,   133,    12,    12,   133,    64,    12,   518,    12,     0,
+     0,     5,     6,   122,     8,     9,    10,    11,    12,   122,
+    14,    15,   518,    17,    18,   122,   122,   209,    84,   495,
+   232,   210,   103,    15,   427,    97,   429,    81,    51,   432,
+   380,   478,    -1,    -1,    -1,   438,   439,    -1,    42,    86,
+    87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+    97,    98,    99,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   463,   464,    -1,   466,   467,    -1,    -1,    -1,   471,    -1,
+    -1,    -1,     0,    -1,   135,    -1,   479,   138,    -1,    -1,
+   141,    -1,   143,   144,    -1,    13,    14,    15,    -1,    17,
+    18,    19,    -1,    -1,    -1,    -1,   499,    25,    26,    -1,
+     5,     6,    -1,    -1,   507,    -1,    -1,    -1,    -1,    14,
+    15,    -1,    17,    18,    -1,    20,    44,    -1,    -1,    47,
+    -1,    -1,    -1,    51,    -1,    -1,    -1,    -1,    33,    34,
+    -1,   135,    -1,   536,   138,    -1,    -1,   141,   541,   143,
+   144,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   555,   556,    -1,    -1,    -1,   560,    -1,    -1,
+   563,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+    75,    76,    77,    78,    79,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+   115,   116,   117,    -1,   119,   120,   121,   122,    -1,   124,
+   125,   126,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   134,
+    -1,   136,    -1,   138,    -1,    -1,   141,    -1,   143,    -1,
+   145,     3,     4,     5,     6,     7,    -1,    -1,    -1,    -1,
+    -1,    -1,    14,    15,    -1,    17,    18,    -1,    20,    21,
+    22,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,     5,     6,    50,     8,
+     9,    10,    11,    12,    -1,    14,    15,    -1,    17,    18,
+    -1,    -1,    -1,    -1,    66,    67,    68,    69,    70,    71,
+    72,    73,    74,    75,    76,    77,    78,    79,    -1,    -1,
+    -1,    -1,    -1,    42,     5,     6,    -1,     8,     9,    10,
+    11,    12,    -1,    14,    15,    -1,    17,    18,    -1,    -1,
+    -1,    -1,    -1,   105,   106,   107,   108,   109,   110,   111,
+   112,   113,   114,   115,   116,   117,    -1,   119,   120,   121,
+   122,    42,   124,   125,   126,    -1,     3,     4,     5,     6,
+     7,    -1,   134,    -1,   136,    -1,    -1,    14,    15,   141,
+    17,    18,    -1,    20,    21,    22,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    33,    34,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    50,    -1,    -1,   135,    -1,    -1,   138,
+    -1,   140,   141,    -1,   143,    -1,    -1,    -1,    -1,    66,
+    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+    77,    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   135,    -1,    -1,   138,    -1,    -1,
+   141,    -1,   143,    -1,    -1,    -1,    -1,    -1,   105,   106,
+   107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+   117,    -1,   119,   120,   121,   122,    -1,   124,   125,   126,
+     3,     4,    -1,    -1,     7,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   141,    -1,    -1,    20,    21,    22,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    50,     5,     6,
+    -1,     8,     9,    10,    11,    12,    -1,    14,    15,    -1,
+    17,    18,    -1,    66,    67,    68,    69,    70,    71,    72,
+    73,    74,    75,    76,    77,    78,    79,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    42,    -1,    -1,     5,     6,
+    -1,     8,     9,    10,    11,    12,    -1,    14,    15,    -1,
+    17,    18,   105,   106,   107,   108,   109,   110,   111,   112,
+   113,   114,   115,   116,   117,    32,   119,   120,   121,   122,
+    -1,   124,   125,   126,    -1,    42,    -1,     5,     6,    -1,
+     8,     9,    10,    11,    12,    -1,    14,    15,   141,    17,
+    18,    -1,    -1,     5,     6,    -1,     8,     9,    10,    11,
+    12,    -1,    14,    15,    32,    17,    18,    -1,    -1,    -1,
+    -1,    -1,     5,     6,    42,     8,     9,    10,    11,    12,
+    32,    14,    15,    -1,    17,    18,    -1,    -1,   135,    -1,
+    42,   138,    -1,    -1,   141,    -1,   143,    -1,    -1,    32,
+    -1,     5,     6,    -1,     8,     9,    10,    11,    12,    42,
+    14,    15,    -1,    17,    18,    -1,    -1,     5,     6,    -1,
+     8,     9,    10,    11,    12,    -1,    14,    15,   135,    17,
+    18,   138,    -1,    -1,   141,    -1,   143,    -1,    42,     5,
+     6,    -1,     8,     9,    10,    11,    12,    -1,    14,    15,
+    -1,    17,    18,    -1,    42,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   135,    -1,    -1,
+   138,    -1,    -1,   141,    -1,   143,    42,    -1,    -1,    -1,
+    -1,    -1,    -1,   135,    -1,    -1,   138,    -1,    -1,   141,
+    -1,   143,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   135,    -1,    -1,   138,    -1,    -1,   141,    -1,
+   143,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   135,    -1,    -1,   138,    -1,    -1,   141,    -1,   143,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   135,    30,    -1,
+   138,    -1,    -1,   141,    -1,   143,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    48,    49,    -1,   135,
+    -1,    -1,   138,    -1,    -1,   141,    -1,   143,    60,    61,
+    62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+    72,    73,    74,    75,    76,    77,    78,    79,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   100,   101,
+   102,    -1,    -1,   105,   106,   107,   108,   109,   110,   111,
+   112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+   122,   123,   124,   125,   126
+};
+/* -*-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 short int yysigned_char;
+#define YYSTACK_ALLOC malloc
 #endif
 
-/* YYFINAL -- State number of the termination state. */
-#define YYFINAL  40
-/* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1466
-
-/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS  146
-/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS  79
-/* YYNRULES -- Number of rules. */
-#define YYNRULES  286
-/* YYNRULES -- Number of states. */
-#define YYNSTATES  567
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
-#define YYUNDEFTOK  2
-#define YYMAXUTOK   386
-
-#define YYTRANSLATE(YYX)						\
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
-static const unsigned char yytranslate[] =
-{
-       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     136,   137,   134,     2,   133,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     141,   132,   142,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   138,   135,   140,     2,     2,     2,     2,     2,   145,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     139,     2,     2,   143,     2,   144,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     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
-};
-
-#if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
-   YYRHS.  */
-static const unsigned short int yyprhs[] =
-{
-       0,     0,     3,     5,     7,     9,    11,    13,    15,    17,
-      19,    21,    23,    25,    27,    29,    31,    33,    35,    37,
-      39,    41,    43,    45,    47,    49,    51,    53,    55,    57,
-      59,    61,    63,    65,    67,    69,    71,    73,    75,    77,
-      79,    81,    83,    85,    87,    89,    91,    93,    95,    97,
-      99,   101,   103,   105,   107,   109,   111,   113,   115,   117,
-     119,   121,   122,   125,   126,   128,   130,   133,   134,   136,
-     138,   140,   142,   144,   146,   148,   150,   151,   153,   154,
-     156,   158,   159,   161,   163,   165,   167,   168,   170,   172,
-     174,   176,   178,   181,   183,   185,   187,   189,   190,   193,
-     195,   197,   198,   201,   202,   205,   206,   210,   213,   214,
-     216,   217,   221,   223,   226,   228,   230,   232,   234,   236,
-     238,   241,   243,   246,   252,   258,   264,   270,   274,   277,
-     283,   288,   291,   293,   295,   297,   301,   303,   307,   309,
-     310,   312,   316,   321,   325,   329,   334,   339,   343,   350,
-     356,   359,   362,   365,   368,   371,   374,   377,   380,   383,
-     386,   393,   399,   408,   415,   422,   430,   438,   445,   452,
-     461,   470,   474,   476,   478,   480,   482,   483,   485,   488,
-     489,   493,   494,   498,   502,   504,   508,   512,   513,   520,
-     521,   529,   530,   538,   541,   545,   547,   551,   555,   559,
-     563,   565,   566,   572,   576,   578,   582,   584,   585,   595,
-     597,   599,   604,   606,   608,   611,   615,   616,   618,   620,
-     622,   624,   626,   628,   630,   632,   634,   638,   640,   646,
-     648,   650,   652,   654,   656,   658,   661,   664,   667,   671,
-     674,   675,   677,   680,   683,   687,   697,   707,   716,   731,
-     733,   735,   742,   748,   751,   758,   766,   770,   776,   777,
-     778,   782,   785,   787,   793,   799,   806,   813,   818,   823,
-     830,   835,   840,   847,   854,   857,   866,   868,   870,   871,
-     875,   882,   886,   893,   896,   901,   908
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const short int yyrhs[] =
-{
-     187,     0,    -1,    66,    -1,    67,    -1,    68,    -1,    69,
-      -1,    70,    -1,    71,    -1,    72,    -1,    73,    -1,    74,
-      -1,    75,    -1,    76,    -1,    77,    -1,   106,    -1,   107,
-      -1,   108,    -1,   109,    -1,   110,    -1,   111,    -1,   112,
-      -1,   113,    -1,   114,    -1,   115,    -1,   116,    -1,   117,
-      -1,   120,    -1,   121,    -1,   122,    -1,    80,    -1,    81,
-      -1,    82,    -1,    83,    -1,    84,    -1,    85,    -1,    86,
-      -1,    87,    -1,    88,    -1,    89,    -1,    90,    -1,    91,
-      -1,    92,    -1,    93,    -1,    94,    -1,    95,    -1,    96,
-      -1,    97,    -1,    98,    -1,    99,    -1,    86,    -1,    87,
-      -1,    88,    -1,    89,    -1,    21,    -1,    22,    -1,     9,
-      -1,    10,    -1,    11,    -1,    14,    -1,    17,    -1,   155,
-      -1,    -1,   155,   132,    -1,    -1,    15,    -1,    18,    -1,
-     158,   132,    -1,    -1,    35,    -1,    37,    -1,    36,    -1,
-      38,    -1,    40,    -1,    39,    -1,    41,    -1,    43,    -1,
-      -1,   131,    -1,    -1,    39,    -1,    41,    -1,    -1,    35,
-      -1,    36,    -1,    37,    -1,    40,    -1,    -1,    54,    -1,
-      55,    -1,    56,    -1,    57,    -1,    58,    -1,    53,     4,
-      -1,   107,    -1,   108,    -1,   128,    -1,   129,    -1,    -1,
-     167,   166,    -1,   127,    -1,   166,    -1,    -1,   169,   168,
-      -1,    -1,    46,     4,    -1,    -1,   133,    46,     4,    -1,
-      29,    17,    -1,    -1,   172,    -1,    -1,   133,   175,   174,
-      -1,   172,    -1,    46,     4,    -1,     9,    -1,    10,    -1,
-      11,    -1,    12,    -1,    42,    -1,   176,    -1,   177,   134,
-      -1,   209,    -1,   135,     4,    -1,   177,   136,   181,   137,
-     169,    -1,     8,   136,   181,   137,   169,    -1,   138,     4,
-     139,   177,   140,    -1,   141,     4,   139,   177,   142,    -1,
-     143,   182,   144,    -1,   143,   144,    -1,   141,   143,   182,
-     144,   142,    -1,   141,   143,   144,   142,    -1,   177,   167,
-      -1,   177,    -1,     8,    -1,   178,    -1,   180,   133,   178,
-      -1,   180,    -1,   180,   133,    32,    -1,    32,    -1,    -1,
-     177,    -1,   182,   133,   177,    -1,   177,   138,   185,   140,
-      -1,   177,   138,   140,    -1,   177,   145,    17,    -1,   177,
-     141,   185,   142,    -1,   177,   143,   185,   144,    -1,   177,
-     143,   144,    -1,   177,   141,   143,   185,   144,   142,    -1,
-     177,   141,   143,   144,   142,    -1,   177,    33,    -1,   177,
-      34,    -1,   177,   209,    -1,   177,   184,    -1,   177,    20,
-      -1,   153,     3,    -1,   153,     4,    -1,     9,    21,    -1,
-       9,    22,    -1,   154,     7,    -1,   149,   136,   183,    31,
-     177,   137,    -1,   105,   136,   183,   220,   137,    -1,   119,
-     136,   183,   133,   183,   133,   183,   137,    -1,   147,   136,
-     183,   133,   183,   137,    -1,   148,   136,   183,   133,   183,
-     137,    -1,    78,   151,   136,   183,   133,   183,   137,    -1,
-      79,   152,   136,   183,   133,   183,   137,    -1,   150,   136,
-     183,   133,   183,   137,    -1,   124,   136,   183,   133,   183,
-     137,    -1,   125,   136,   183,   133,   183,   133,   183,   137,
-      -1,   126,   136,   183,   133,   183,   133,   183,   137,    -1,
-     185,   133,   183,    -1,   183,    -1,    27,    -1,    28,    -1,
-     188,    -1,    -1,   189,    -1,   188,   189,    -1,    -1,    26,
-     190,   205,    -1,    -1,    25,   191,   206,    -1,    51,    50,
-     195,    -1,    19,    -1,   157,    13,   177,    -1,   157,    13,
-       8,    -1,    -1,   159,   162,   186,   183,   192,   174,    -1,
-      -1,   159,   160,   162,   186,   183,   193,   174,    -1,    -1,
-     159,   161,   162,   186,   177,   194,   174,    -1,    44,   196,
-      -1,    47,   132,   197,    -1,    17,    -1,    45,   132,    17,
-      -1,    59,   132,    17,    -1,   138,   198,   140,    -1,   198,
-     133,    17,    -1,    17,    -1,    -1,   199,   133,   177,   167,
-     156,    -1,   177,   167,   156,    -1,   199,    -1,   199,   133,
-      32,    -1,    32,    -1,    -1,   165,   179,   158,   136,   200,
-     137,   169,   173,   170,    -1,    23,    -1,   143,    -1,   164,
-     162,   201,   202,    -1,    24,    -1,   144,    -1,   212,   204,
-      -1,   163,   162,   201,    -1,    -1,    52,    -1,     3,    -1,
-       4,    -1,     7,    -1,    21,    -1,    22,    -1,    33,    -1,
-      34,    -1,    20,    -1,   141,   185,   142,    -1,   184,    -1,
-      50,   207,    17,   133,    17,    -1,     5,    -1,     6,    -1,
-     155,    -1,   158,    -1,   209,    -1,   208,    -1,   177,   210,
-      -1,   212,   213,    -1,   203,   213,    -1,   214,   157,   215,
-      -1,   214,   217,    -1,    -1,    16,    -1,    60,   211,    -1,
-      60,     8,    -1,    61,    12,   210,    -1,    61,     9,   210,
-     133,    12,   210,   133,    12,   210,    -1,    62,   153,   210,
-     133,    12,   210,   138,   216,   140,    -1,    62,   153,   210,
-     133,    12,   210,   138,   140,    -1,    63,   165,   179,   210,
-     136,   219,   137,   169,    31,    12,   210,    64,    12,   210,
-      -1,    64,    -1,    65,    -1,   216,   153,   208,   133,    12,
-     210,    -1,   153,   208,   133,    12,   210,    -1,   157,   222,
-      -1,   177,   138,   210,   133,   210,   140,    -1,   218,   133,
-     138,   210,   133,   210,   140,    -1,   177,   210,   167,    -1,
-     219,   133,   177,   210,   167,    -1,    -1,    -1,   220,   133,
-     211,    -1,    49,    48,    -1,    48,    -1,   147,   177,   210,
-     133,   210,    -1,   148,   177,   210,   133,   210,    -1,    78,
-     151,   177,   210,   133,   210,    -1,    79,   152,   177,   210,
-     133,   210,    -1,   150,   211,   133,   211,    -1,   149,   211,
-      31,   177,    -1,   119,   211,   133,   211,   133,   211,    -1,
-     123,   211,   133,   177,    -1,   124,   211,   133,   211,    -1,
-     125,   211,   133,   211,   133,   211,    -1,   126,   211,   133,
-     211,   133,   211,    -1,   118,   218,    -1,   221,   165,   179,
-     210,   136,   219,   137,   169,    -1,   224,    -1,    30,    -1,
-      -1,   100,   177,   171,    -1,   100,   177,   133,     9,   210,
-     171,    -1,   101,   177,   171,    -1,   101,   177,   133,     9,
-     210,   171,    -1,   102,   211,    -1,   223,   103,   177,   210,
-      -1,   223,   104,   211,   133,   177,   210,    -1,   105,   177,
-     210,   220,    -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
-static const unsigned short int yyrline[] =
-{
-       0,  1031,  1031,  1031,  1031,  1031,  1031,  1031,  1031,  1031,
-    1031,  1032,  1032,  1032,  1033,  1033,  1033,  1033,  1033,  1033,
-    1034,  1034,  1034,  1034,  1034,  1034,  1035,  1035,  1035,  1037,
-    1037,  1038,  1038,  1039,  1039,  1040,  1040,  1041,  1041,  1045,
-    1045,  1046,  1046,  1047,  1047,  1048,  1048,  1049,  1049,  1050,
-    1050,  1051,  1051,  1052,  1053,  1058,  1059,  1059,  1061,  1061,
-    1062,  1062,  1066,  1070,  1075,  1075,  1077,  1081,  1087,  1088,
-    1089,  1090,  1091,  1095,  1096,  1097,  1101,  1102,  1106,  1107,
-    1108,  1112,  1113,  1114,  1115,  1116,  1119,  1120,  1121,  1122,
-    1123,  1124,  1125,  1132,  1133,  1134,  1135,  1138,  1139,  1144,
-    1145,  1148,  1149,  1156,  1157,  1163,  1164,  1172,  1180,  1181,
-    1186,  1187,  1188,  1193,  1206,  1206,  1206,  1206,  1209,  1213,
-    1217,  1224,  1229,  1237,  1255,  1273,  1278,  1290,  1300,  1304,
-    1314,  1321,  1328,  1335,  1340,  1345,  1352,  1353,  1360,  1367,
-    1375,  1380,  1391,  1419,  1435,  1464,  1492,  1517,  1536,  1561,
-    1580,  1592,  1599,  1665,  1675,  1685,  1691,  1697,  1702,  1707,
-    1715,  1727,  1748,  1756,  1762,  1773,  1778,  1783,  1792,  1798,
-    1804,  1813,  1817,  1825,  1825,  1836,  1841,  1849,  1850,  1854,
-    1854,  1858,  1858,  1861,  1864,  1876,  1900,  1911,  1911,  1921,
-    1921,  1929,  1929,  1939,  1942,  1948,  1961,  1965,  1970,  1972,
-    1977,  1982,  1991,  2001,  2012,  2016,  2025,  2034,  2039,  2145,
-    2145,  2147,  2156,  2156,  2158,  2163,  2175,  2179,  2184,  2188,
-    2192,  2196,  2200,  2204,  2208,  2212,  2216,  2241,  2245,  2259,
-    2263,  2267,  2271,  2277,  2277,  2283,  2292,  2296,  2305,  2316,
-    2325,  2337,  2350,  2354,  2358,  2363,  2373,  2392,  2401,  2468,
-    2472,  2479,  2490,  2503,  2512,  2523,  2533,  2541,  2549,  2552,
-    2553,  2560,  2564,  2569,  2590,  2607,  2620,  2633,  2642,  2654,
-    2662,  2669,  2675,  2681,  2687,  2702,  2766,  2771,  2775,  2782,
-    2789,  2797,  2804,  2812,  2820,  2834,  2851
-};
-#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",
-  "LOCALVAL_ID", "GLOBALVAL_ID", "FPVAL", "VOID", "INTTYPE", "FLOAT",
-  "DOUBLE", "LABEL", "TYPE", "LOCALVAR", "GLOBALVAR", "LABELSTR",
-  "STRINGCONSTANT", "ATSTRINGCONSTANT", "IMPLEMENTATION",
-  "ZEROINITIALIZER", "TRUETOK", "FALSETOK", "BEGINTOK", "ENDTOK",
-  "DECLARE", "DEFINE", "GLOBAL", "CONSTANT", "SECTION", "VOLATILE", "TO",
-  "DOTDOTDOT", "NULL_TOK", "UNDEF", "INTERNAL", "LINKONCE", "WEAK",
-  "APPENDING", "DLLIMPORT", "DLLEXPORT", "EXTERN_WEAK", "OPAQUE",
-  "EXTERNAL", "TARGET", "TRIPLE", "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", "ICMP", "FCMP", "EQ", "NE", "SLT", "SGT", "SLE", "SGE", "ULT",
-  "UGT", "ULE", "UGE", "OEQ", "ONE", "OLT", "OGT", "OLE", "OGE", "ORD",
-  "UNO", "UEQ", "UNE", "MALLOC", "ALLOCA", "FREE", "LOAD", "STORE",
-  "GETELEMENTPTR", "TRUNC", "ZEXT", "SEXT", "FPTRUNC", "FPEXT", "BITCAST",
-  "UITOFP", "SITOFP", "FPTOUI", "FPTOSI", "INTTOPTR", "PTRTOINT",
-  "PHI_TOK", "SELECT", "SHL", "LSHR", "ASHR", "VAARG", "EXTRACTELEMENT",
-  "INSERTELEMENT", "SHUFFLEVECTOR", "NORETURN", "INREG", "SRET", "DEFAULT",
-  "HIDDEN", "'='", "','", "'*'", "'\\\\'", "'('", "')'", "'['", "'x'",
-  "']'", "'<'", "'>'", "'{'", "'}'", "'c'", "$accept", "ArithmeticOps",
-  "LogicalOps", "CastOps", "ShiftOps", "IPredicates", "FPredicates",
-  "IntType", "FPType", "LocalName", "OptLocalName", "OptLocalAssign",
-  "GlobalName", "OptGlobalAssign", "GVInternalLinkage",
-  "GVExternalLinkage", "GVVisibilityStyle", "FunctionDeclareLinkage",
-  "FunctionDefineLinkage", "OptCallingConv", "ParamAttr", "OptParamAttrs",
-  "FuncAttr", "OptFuncAttrs", "OptAlign", "OptCAlign", "SectionString",
-  "OptSection", "GlobalVarAttributes", "GlobalVarAttribute", "PrimType",
-  "Types", "ArgType", "ResultTypes", "ArgTypeList", "ArgTypeListI",
-  "TypeListI", "ConstVal", "ConstExpr", "ConstVector", "GlobalType",
-  "Module", "DefinitionList", "Definition", "@1", "@2", "@3", "@4", "@5",
-  "AsmBlock", "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 unsigned short int yytoknum[] =
-{
-       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
-     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
-     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
-     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
-     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
-     385,   386,    61,    44,    42,    92,    40,    41,    91,   120,
-      93,    60,    62,   123,   125,    99
-};
-# endif
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const unsigned char yyr1[] =
-{
-       0,   146,   147,   147,   147,   147,   147,   147,   147,   147,
-     147,   148,   148,   148,   149,   149,   149,   149,   149,   149,
-     149,   149,   149,   149,   149,   149,   150,   150,   150,   151,
-     151,   151,   151,   151,   151,   151,   151,   151,   151,   152,
-     152,   152,   152,   152,   152,   152,   152,   152,   152,   152,
-     152,   152,   152,   152,   152,   153,   154,   154,   155,   155,
-     156,   156,   157,   157,   158,   158,   159,   159,   160,   160,
-     160,   160,   160,   161,   161,   161,   162,   162,   163,   163,
-     163,   164,   164,   164,   164,   164,   165,   165,   165,   165,
-     165,   165,   165,   166,   166,   166,   166,   167,   167,   168,
-     168,   169,   169,   170,   170,   171,   171,   172,   173,   173,
-     174,   174,   175,   175,   176,   176,   176,   176,   177,   177,
-     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
-     177,   178,   179,   179,   180,   180,   181,   181,   181,   181,
-     182,   182,   183,   183,   183,   183,   183,   183,   183,   183,
-     183,   183,   183,   183,   183,   183,   183,   183,   183,   183,
-     184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
-     184,   185,   185,   186,   186,   187,   187,   188,   188,   190,
-     189,   191,   189,   189,   189,   189,   189,   192,   189,   193,
-     189,   194,   189,   189,   189,   195,   196,   196,   197,   198,
-     198,   198,   199,   199,   200,   200,   200,   200,   201,   202,
-     202,   203,   204,   204,   205,   206,   207,   207,   208,   208,
-     208,   208,   208,   208,   208,   208,   208,   208,   208,   209,
-     209,   209,   209,   210,   210,   211,   212,   212,   213,   214,
-     214,   214,   215,   215,   215,   215,   215,   215,   215,   215,
-     215,   216,   216,   217,   218,   218,   219,   219,   219,   220,
-     220,   221,   221,   222,   222,   222,   222,   222,   222,   222,
-     222,   222,   222,   222,   222,   222,   222,   223,   223,   224,
-     224,   224,   224,   224,   224,   224,   224
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const unsigned char yyr2[] =
-{
-       0,     2,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     0,     2,     0,     1,     1,     2,     0,     1,     1,
-       1,     1,     1,     1,     1,     1,     0,     1,     0,     1,
-       1,     0,     1,     1,     1,     1,     0,     1,     1,     1,
-       1,     1,     2,     1,     1,     1,     1,     0,     2,     1,
-       1,     0,     2,     0,     2,     0,     3,     2,     0,     1,
-       0,     3,     1,     2,     1,     1,     1,     1,     1,     1,
-       2,     1,     2,     5,     5,     5,     5,     3,     2,     5,
-       4,     2,     1,     1,     1,     3,     1,     3,     1,     0,
-       1,     3,     4,     3,     3,     4,     4,     3,     6,     5,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       6,     5,     8,     6,     6,     7,     7,     6,     6,     8,
-       8,     3,     1,     1,     1,     1,     0,     1,     2,     0,
-       3,     0,     3,     3,     1,     3,     3,     0,     6,     0,
-       7,     0,     7,     2,     3,     1,     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,     4,     6,
-       4,     4,     6,     6,     2,     8,     1,     1,     0,     3,
-       6,     3,     6,     2,     4,     6,     4
-};
-
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
-   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
-   means the default is an error.  */
-static const unsigned short int yydefact[] =
-{
-      67,    58,    64,    59,    65,   184,   181,   179,     0,     0,
-       0,     0,     0,     0,    76,     0,    67,   177,    78,    81,
-       0,     0,   193,     0,     0,    62,     0,    66,    68,    70,
-      69,    71,    73,    72,    74,    75,    77,    76,    76,     0,
-       1,   178,    79,    80,    76,   182,    82,    83,    84,    85,
-      76,   240,   180,   240,     0,     0,   201,   194,   195,   183,
-     229,   230,   186,   114,   115,   116,   117,   118,     0,     0,
-       0,     0,   231,   232,   119,   185,   121,     0,     0,   173,
-     174,     0,    86,    86,   241,   237,    63,   212,   213,   214,
-     236,   196,   197,   200,     0,   139,   122,     0,     0,     0,
-       0,   128,   140,     0,   120,   139,     0,     0,   114,   115,
-     116,     0,     0,     0,   187,     0,    87,    88,    89,    90,
-      91,     0,   215,     0,   278,   239,     0,   198,   138,    97,
-     134,   136,     0,     0,     0,     0,     0,     0,   127,     0,
-     189,   191,   157,   158,   155,   156,   159,   154,   150,   151,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,     0,     0,     0,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,     0,    26,    27,
-      28,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   153,   152,   110,    92,   133,   132,     0,   209,
-     210,   211,   277,   262,     0,     0,     0,     0,    86,   249,
-     250,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   238,    86,   253,
-       0,   276,   199,   131,     0,   101,     0,     0,   130,     0,
-     141,   101,   110,   110,    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,     0,     0,     0,     0,     0,   143,   172,     0,
-       0,     0,   147,     0,   144,     0,     0,     0,     0,     0,
-     188,     0,   261,   243,     0,   242,     0,     0,    55,     0,
-       0,     0,     0,   105,   105,   283,     0,     0,   274,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    93,    94,    95,    96,    98,   137,   135,   124,   125,
-     126,   129,   123,   190,   192,     0,     0,   259,     0,     0,
-       0,     0,     0,   142,   128,   140,     0,   145,   146,     0,
-       0,     0,     0,     0,     0,   112,   110,   207,   218,   219,
-     220,   225,   221,   222,   223,   224,   216,     0,   227,   234,
-     233,   235,     0,   244,     0,     0,     0,     0,     0,   279,
-       0,   281,   259,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    99,   100,   102,
-       0,     0,     0,     0,     0,     0,     0,   171,   149,     0,
-       0,     0,     0,     0,   107,   113,   111,   206,    97,   204,
-       0,   217,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   286,     0,     0,     0,   270,   271,     0,     0,
-       0,     0,   268,   267,     0,   284,     0,     0,     0,     0,
-     161,     0,     0,     0,     0,   148,     0,     0,     0,     0,
-      61,     0,   101,     0,   226,     0,     0,   258,     0,     0,
-     105,   106,   105,     0,     0,     0,     0,     0,   263,   264,
-     258,     0,     0,     0,   260,     0,   168,     0,     0,   163,
-     164,   160,   167,    60,   203,   205,    97,   108,     0,     0,
-       0,     0,     0,   265,   266,     0,   280,   282,     0,     0,
-     269,   272,   273,     0,   285,   165,   166,     0,     0,     0,
-      61,   109,   103,   228,     0,     0,    97,     0,   101,   254,
-       0,   101,   162,   169,   170,   202,     0,   208,     0,   247,
-       0,     0,   256,     0,     0,   255,   275,   104,   245,     0,
-     246,     0,    97,     0,     0,     0,   257,     0,     0,     0,
-       0,   252,     0,     0,   251,     0,   248
-};
-
-/* YYDEFGOTO[NTERM-NUM]. */
-static const short int yydefgoto[] =
-{
-      -1,   188,   189,   190,   191,   254,   271,   111,   112,    72,
-     494,    12,    73,    14,    37,    38,    39,    44,    50,   121,
-     325,   233,   399,   328,   537,   379,   355,   522,   290,   356,
-      74,   113,   130,   198,   131,   132,   103,   278,   368,   279,
-      81,    15,    16,    17,    19,    18,   194,   242,   243,    59,
-      22,    57,    94,   419,   420,   122,   201,    51,    89,    52,
-      45,   422,   369,    76,   371,   295,    53,    85,    86,   227,
-     541,   125,   308,   502,   402,   228,   229,   230,   231
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-#define YYPACT_NINF -386
-static const short int yypact[] =
-{
-     357,  -386,  -386,  -386,  -386,  -386,  -386,  -386,    28,  -112,
-      61,   -51,   136,    27,   288,   172,   594,  -386,   209,    93,
-      49,    75,  -386,    48,   230,  -386,   841,  -386,  -386,  -386,
-    -386,  -386,  -386,  -386,  -386,  -386,  -386,   129,   129,   229,
-    -386,  -386,  -386,  -386,   129,  -386,  -386,  -386,  -386,  -386,
-     129,   252,  -386,    18,   257,   274,   279,  -386,  -386,  -386,
-    -386,  -386,   161,  -386,  -386,  -386,  -386,  -386,   294,   295,
-       4,    13,  -386,  -386,  -386,   137,  -386,   229,   229,  -386,
-    -386,  1052,   228,   228,  -386,  -386,   110,  -386,  -386,  -386,
-    -386,  -386,  -386,  -386,   -65,   126,  -386,   164,   165,   108,
-     161,  -386,   137,   -49,  -386,   126,  1052,  1192,    68,   298,
-     299,    44,   300,   617,  -386,   305,  -386,  -386,  -386,  -386,
-    -386,  1206,  -386,     9,  1340,  -386,   293,  -386,  -386,   137,
-    -386,   178,   175,  1192,  1192,   171,   -45,  1192,  -386,   177,
-    -386,   137,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,
-    -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,
-    -386,  -386,   264,   475,   179,  -386,  -386,  -386,  -386,  -386,
-    -386,  -386,  -386,  -386,  -386,  -386,  -386,   186,  -386,  -386,
-    -386,   194,   202,   203,   803,  1241,   461,   325,   219,   222,
-     237,   243,  -386,  -386,   236,  -386,   161,   137,   226,  -386,
-    -386,  -386,  -386,  -386,   332,  1256,   233,   372,   228,  -386,
-    -386,   264,   475,  1192,  1192,  1192,  1192,  1192,  1192,  1192,
-    1192,  1192,  1192,  1192,  1192,  1192,  1192,  -386,   228,  -386,
-     159,  -386,  -386,   -64,  1095,  -386,   -33,    78,  -386,   242,
-     137,  -386,   236,   236,  -386,  -386,  -386,  -386,  -386,  -386,
-    -386,  -386,  -386,  -386,   249,  -386,  -386,  -386,  -386,  -386,
-    -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,  -386,
-    -386,   250,  1052,  1052,  1052,  1052,  1052,  -386,  -386,   -57,
-     518,   -92,  -386,   -39,  -386,  1052,  1052,  1052,  1052,    23,
-    -386,   253,  -386,   161,   760,  -386,   885,   885,  -386,   885,
-    1206,  1192,  1192,    43,    77,  -386,   760,    31,   255,   259,
-     262,   263,   266,   267,   760,   760,   366,   269,  1206,  1192,
-    1192,  -386,  -386,  -386,  -386,  -386,  -386,  -386,   -50,  -386,
-    -386,  -386,   -50,  -386,  -386,  1052,  1052,  -386,   270,   272,
-     276,   277,  1052,  -386,   265,   617,   -23,  -386,  -386,   278,
-     287,   381,   289,   408,   423,  -386,   236,  1134,  -386,  -386,
-    -386,  -386,  -386,  -386,  -386,  -386,   376,  1052,  -386,  -386,
-    -386,  -386,   296,  -386,   297,   885,   760,   760,     3,  -386,
-       5,  -386,  -386,   885,   301,  1192,  1192,  1192,  1192,  1192,
-     302,   304,  1192,  1192,   885,   760,   307,  -386,  -386,  -386,
-     308,   310,   -40,  1052,  1052,  1052,  1052,  -386,  -386,   291,
-    1052,  1052,  1192,  1052,  -386,  -386,  -386,  -386,   137,   311,
-     309,  -386,   421,   -88,   433,   435,   312,   316,   320,   885,
-     450,   885,   323,   324,   885,   326,   137,  -386,   328,   329,
-     885,   885,   137,  -386,   322,  -386,  1192,  1052,  1052,  1192,
-    -386,   331,   337,   344,   347,  -386,   348,   349,   101,   351,
-     125,  1150,  -386,   356,  -386,   885,   885,  1192,   885,   885,
-     358,  -386,   358,   885,   362,  1192,  1192,  1192,  -386,  -386,
-    1192,   760,   361,   364,  -386,  1052,  -386,  1052,  1052,  -386,
-    -386,  -386,  -386,  -386,  -386,  -386,   137,    56,   448,   371,
-     343,   760,   -31,  -386,  -386,   438,  -386,  -386,   359,   885,
-    -386,  -386,  -386,    37,  -386,  -386,  -386,   368,   369,   370,
-     125,  -386,   462,  -386,   497,     6,  -386,  1192,  -386,  -386,
-     373,  -386,  -386,  -386,  -386,  -386,   506,  -386,   885,  -386,
-    1009,    20,   -64,   760,   151,  -386,   -50,  -386,  -386,   382,
-    -386,  1009,  -386,   502,   504,   384,   -64,   885,   885,   507,
-     454,  -386,   885,   509,  -386,   885,  -386
-};
-
-/* YYPGOTO[NTERM-NUM].  */
-static const short int yypgoto[] =
-{
-    -386,   398,   401,   407,   410,   327,   330,  -204,  -386,     0,
-      17,   453,    10,  -386,  -386,  -386,    54,  -386,  -386,  -175,
-    -319,  -381,  -386,  -239,  -386,  -297,    46,  -386,  -203,  -386,
-    -386,   -25,   306,  -283,  -386,   436,   445,   -70,  -109,  -180,
-     210,  -386,  -386,   529,  -386,  -386,  -386,  -386,  -386,  -386,
-    -386,  -386,  -386,  -386,  -386,   464,  -386,  -386,  -386,  -386,
-    -386,  -386,  -385,   -75,   117,  -159,  -386,   496,  -386,  -386,
-    -386,  -386,  -386,    70,   170,  -386,  -386,  -386,  -386
-};
-
-/* 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 -177
-static const short int yytable[] =
-{
-      11,    75,   332,   299,   192,   281,   283,   381,    98,   398,
-      13,   114,   429,   398,   431,   298,    11,   375,    60,    61,
-      23,   100,    63,    64,    65,    66,    13,     1,     2,   298,
-       3,     4,   199,   300,    84,   394,   140,   460,   193,   333,
-     334,   342,    87,   321,   322,   342,   102,   144,   145,   430,
-     347,   430,   353,   318,   464,    67,   305,   321,   322,   309,
-     310,   311,   312,   313,   323,   324,   316,   317,   126,   354,
-     129,   -55,   -55,    20,   102,   127,   342,   397,   323,   324,
-     129,    25,   141,   343,   137,   353,    11,    21,   137,   142,
-     143,    77,    78,   449,   342,   138,   197,   450,    82,   239,
-     346,   104,   527,   105,    83,   348,   528,   329,   236,   237,
-     342,    24,   240,    60,    61,   520,   100,    63,    64,    65,
-      66,   409,     1,     2,     1,     3,     4,     3,    46,    47,
-      48,    60,    61,    49,   100,    63,    64,    65,    66,     1,
-       1,     2,     3,     3,     4,   542,   539,    99,    68,    26,
-      67,    69,   200,   416,    70,   549,    71,   101,   128,    27,
-     550,   396,    88,   321,   322,   104,   555,   105,    67,   383,
-     527,   556,    40,   506,   531,   507,   378,   104,   398,   105,
-     294,    54,   553,   397,   323,   324,    56,   423,   303,   304,
-     294,   306,   307,   294,   294,   294,   294,   294,   314,   315,
-     294,   294,   337,   338,   339,   340,   341,    55,   291,   129,
-     380,   104,   104,   105,   105,   349,   350,   351,   352,   370,
-     330,   370,   370,   497,   370,   398,   435,   398,   437,   438,
-     439,   370,   321,   322,   443,   104,   192,   105,   491,   370,
-     370,     2,   296,    68,     4,   297,    69,    58,    42,    70,
-      43,    71,   135,   323,   324,   345,    79,    80,   321,   322,
-      36,    68,   319,   320,    69,   400,   401,    70,    84,    71,
-     193,   104,   407,   105,    91,   197,   376,   377,   397,   323,
-     324,   115,   116,   117,   118,   119,   120,   106,   107,   544,
-     484,    92,   546,   197,   395,   294,    93,    95,    96,    97,
-     370,   370,   370,   133,   134,   -56,   -57,   146,   370,   195,
-     232,   234,   235,   238,   241,   272,   510,   511,   512,   370,
-     370,   540,   273,    28,    29,    30,    31,    32,    33,    34,
-     274,    35,   418,   451,   452,   453,   454,   551,   275,   276,
-     456,   457,   284,   459,   244,   245,   246,   247,   248,   249,
-     250,   251,   252,   253,   370,   285,   370,  -176,   286,   370,
-     294,   436,   294,   294,   294,   370,   370,   442,   294,   289,
-     -63,     1,     2,   287,     3,     4,     5,   482,   483,   288,
-     292,   298,     6,     7,   331,   335,   336,   458,   384,   357,
-     370,   370,   385,   370,   370,   386,   387,   392,   370,   388,
-     389,     8,   393,   403,     9,   404,   370,   408,    10,   405,
-     406,   410,   412,   372,   373,   517,   374,   518,   519,    36,
-     411,   481,   413,   382,   294,   414,   370,   415,   421,   424,
-     425,   390,   391,   455,   370,   440,   496,   441,   463,   434,
-     446,   447,   501,   448,   461,   465,   462,   466,   467,   468,
-     294,   294,   294,   469,   471,   501,   449,   473,   480,   475,
-     493,   476,   477,   370,   485,   523,    60,    61,   370,   100,
-     108,   109,   110,    66,   486,     1,     2,   487,     3,     4,
-     488,   525,   370,   370,   430,   489,   490,   370,   492,   498,
-     370,   505,   426,   427,   428,   509,   255,   256,   515,   529,
-     433,   516,   543,    67,   524,   532,   533,   534,   536,   538,
-     547,   444,   445,   545,   557,   554,   558,   559,   563,   562,
-     493,   565,   223,    60,    61,   224,   100,   108,   109,   110,
-      66,   225,     1,     2,   226,     3,     4,   535,   301,   124,
-     327,   139,   302,   521,   136,    41,   470,   123,   472,    90,
-     513,   474,   432,     0,     0,     0,     0,   478,   479,     0,
-      67,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,     0,     0,     0,     0,     0,
-       0,     0,   499,   500,     0,   503,   504,     0,     0,     0,
-     508,     0,     0,     0,  -175,     0,    68,     0,   514,    69,
-       0,     0,    70,     0,    71,   282,     0,   -63,     1,     2,
-       0,     3,     4,     5,     0,     0,     0,     0,   526,     6,
-       7,     0,    60,    61,     0,     0,   530,     0,     0,     0,
-       0,     1,     2,     0,     3,     4,     0,   147,     8,     0,
-       0,     9,     0,     0,     0,    10,     0,     0,     0,     0,
-     148,   149,     0,    68,     0,   548,    69,     0,     0,    70,
-     552,    71,   344,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   560,   561,     0,     0,     0,   564,
-       0,     0,   566,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,     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,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,     0,   177,   178,   179,   180,
-       0,   181,   182,   183,     0,     0,     0,     0,     0,     0,
-       0,   104,     0,   105,     0,   184,     0,     0,   185,     0,
-     186,     0,   187,   358,   359,    60,    61,   360,     0,     0,
-       0,     0,     0,     0,     1,     2,     0,     3,     4,     0,
-     361,   362,   363,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   364,   365,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    60,    61,
-     366,   100,   108,   109,   110,    66,     0,     1,     2,     0,
-       3,     4,     0,     0,     0,     0,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-       0,     0,     0,     0,     0,    67,    60,    61,     0,    62,
-      63,    64,    65,    66,     0,     1,     2,     0,     3,     4,
-       0,     0,     0,     0,     0,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,     0,   177,
-     178,   179,   180,    67,   181,   182,   183,     0,   358,   359,
-      60,    61,   360,     0,   104,     0,   105,     0,     0,     1,
-       2,   367,     3,     4,     0,   361,   362,   363,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   364,   365,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   366,     0,     0,    68,     0,
-       0,    69,     0,   277,    70,     0,    71,     0,     0,     0,
-       0,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,     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,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,     0,   177,   178,   179,   180,     0,   181,
-     182,   183,   358,   359,     0,     0,   360,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   367,     0,     0,   361,
-     362,   363,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   364,   365,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    60,    61,   366,
-     100,   108,   109,   110,    66,     0,     1,     2,     0,     3,
-       4,     0,     0,     0,     0,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,     0,
-       0,     0,     0,     0,    67,     0,     0,     0,     0,     0,
-      60,    61,     0,   100,    63,    64,    65,    66,     0,     1,
-       2,     0,     3,     4,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   326,   177,   178,
-     179,   180,     0,   181,   182,   183,     0,    67,     0,    60,
-      61,     0,   100,    63,    64,    65,    66,     0,     1,     2,
-     367,     3,     4,     0,     0,    60,    61,     0,   100,    63,
-      64,    65,    66,     0,     1,     2,   417,     3,     4,     0,
-       0,     0,     0,     0,     0,     0,    67,     0,     0,     0,
-       0,     0,   495,     0,     0,     0,     0,    68,     0,     0,
-      69,     0,    67,    70,     0,    71,     0,    60,    61,     0,
-     100,    63,    64,    65,    66,     0,     1,     2,     0,     3,
-       4,    60,    61,     0,   196,    63,    64,    65,    66,     0,
-       1,     2,     0,     3,     4,     0,     0,     0,     0,     0,
-      68,     0,     0,    69,    67,     0,    70,     0,    71,     0,
-       0,     0,     0,     0,     0,     0,    60,    61,    67,   100,
-     108,   109,   110,    66,     0,     1,     2,     0,     3,     4,
-       0,    60,    61,     0,   293,    63,    64,    65,    66,    68,
-       1,     2,    69,     3,     4,    70,     0,    71,     0,     0,
-       0,     0,     0,    67,     0,    68,     0,     0,    69,     0,
-       0,    70,     0,    71,     0,     0,     0,     0,    67,     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,    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,
-     202,     0,     0,     0,     0,     0,    68,     0,     0,    69,
-       0,     0,    70,     0,   280,     0,     0,     0,   203,   204,
-       0,    68,     0,     0,    69,     0,     0,    70,     0,    71,
-     205,   206,   207,   208,   209,   210,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   211,   212,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     213,   214,   215,     0,     0,   216,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   217,   218,
-     178,   179,   180,   219,   220,   221,   222
-};
-
-static const short int yycheck[] =
-{
-       0,    26,   241,   207,   113,   185,   186,   304,     4,   328,
-       0,    81,     9,   332,     9,     9,    16,   300,     5,     6,
-     132,     8,     9,    10,    11,    12,    16,    14,    15,     9,
-      17,    18,    23,   208,    16,   318,   106,   418,   113,   242,
-     243,   133,    24,   107,   108,   133,    71,     3,     4,    46,
-     142,    46,    29,   228,   142,    42,   215,   107,   108,   218,
-     219,   220,   221,   222,   128,   129,   225,   226,   133,    46,
-      95,     3,     4,    45,    99,   140,   133,   127,   128,   129,
-     105,   132,   107,   140,   133,    29,    86,    59,   133,    21,
-      22,    37,    38,   133,   133,   144,   121,   137,    44,   144,
-     280,   134,   133,   136,    50,   144,   137,   140,   133,   134,
-     133,    50,   137,     5,     6,   496,     8,     9,    10,    11,
-      12,   144,    14,    15,    14,    17,    18,    17,    35,    36,
-      37,     5,     6,    40,     8,     9,    10,    11,    12,    14,
-      14,    15,    17,    17,    18,   526,   140,   143,   135,    13,
-      42,   138,   143,   356,   141,   540,   143,   144,    32,   132,
-     140,   320,   144,   107,   108,   134,   551,   136,    42,   138,
-     133,   552,     0,   470,   137,   472,   133,   134,   497,   136,
-     205,   132,    31,   127,   128,   129,   138,   367,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   272,   273,   274,   275,   276,   132,   198,   234,
-     133,   134,   134,   136,   136,   285,   286,   287,   288,   294,
-     142,   296,   297,   462,   299,   544,   385,   546,   387,   388,
-     389,   306,   107,   108,   393,   134,   345,   136,   137,   314,
-     315,    15,     9,   135,    18,    12,   138,    17,    39,   141,
-      41,   143,   144,   128,   129,   280,    27,    28,   107,   108,
-     131,   135,   103,   104,   138,   335,   336,   141,    16,   143,
-     345,   134,   342,   136,    17,   300,   301,   302,   127,   128,
-     129,    53,    54,    55,    56,    57,    58,    77,    78,   528,
-     449,    17,   531,   318,   319,   320,    17,   136,     4,     4,
-     375,   376,   377,   139,   139,     7,     7,     7,   383,     4,
-      17,   133,   137,   142,   137,   136,   475,   476,   477,   394,
-     395,   525,   136,    35,    36,    37,    38,    39,    40,    41,
-     136,    43,   357,   403,   404,   405,   406,   541,   136,   136,
-     410,   411,    17,   413,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,   429,   136,   431,     0,   136,   434,
-     385,   386,   387,   388,   389,   440,   441,   392,   393,   133,
-      13,    14,    15,   136,    17,    18,    19,   447,   448,   136,
-      48,     9,    25,    26,   142,   136,   136,   412,   133,   136,
-     465,   466,   133,   468,   469,   133,   133,    31,   473,   133,
-     133,    44,   133,   133,    47,   133,   481,   142,    51,   133,
-     133,   133,    31,   296,   297,   485,   299,   487,   488,   131,
-     133,   446,   133,   306,   449,    17,   501,     4,    52,   133,
-     133,   314,   315,   142,   509,   133,   461,   133,    17,   138,
-     133,   133,   467,   133,   133,    12,   137,    12,   136,   133,
-     475,   476,   477,   133,     4,   480,   133,   133,   136,   133,
-     460,   133,   133,   538,   133,    17,     5,     6,   543,     8,
-       9,    10,    11,    12,   137,    14,    15,   133,    17,    18,
-     133,   138,   557,   558,    46,   137,   137,   562,   137,   133,
-     565,   133,   375,   376,   377,   133,    21,    22,   137,   140,
-     383,   137,   527,    42,   133,   137,   137,   137,    46,    12,
-       4,   394,   395,   140,    12,   133,    12,   133,    64,    12,
-     520,    12,   124,     5,     6,   124,     8,     9,    10,    11,
-      12,   124,    14,    15,   124,    17,    18,   520,   211,    86,
-     234,   105,   212,   497,    99,    16,   429,    83,   431,    53,
-     480,   434,   382,    -1,    -1,    -1,    -1,   440,   441,    -1,
-      42,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   465,   466,    -1,   468,   469,    -1,    -1,    -1,
-     473,    -1,    -1,    -1,     0,    -1,   135,    -1,   481,   138,
-      -1,    -1,   141,    -1,   143,   144,    -1,    13,    14,    15,
-      -1,    17,    18,    19,    -1,    -1,    -1,    -1,   501,    25,
-      26,    -1,     5,     6,    -1,    -1,   509,    -1,    -1,    -1,
-      -1,    14,    15,    -1,    17,    18,    -1,    20,    44,    -1,
-      -1,    47,    -1,    -1,    -1,    51,    -1,    -1,    -1,    -1,
-      33,    34,    -1,   135,    -1,   538,   138,    -1,    -1,   141,
-     543,   143,   144,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   557,   558,    -1,    -1,    -1,   562,
-      -1,    -1,   565,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,    -1,   119,   120,   121,   122,
-      -1,   124,   125,   126,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   134,    -1,   136,    -1,   138,    -1,    -1,   141,    -1,
-     143,    -1,   145,     3,     4,     5,     6,     7,    -1,    -1,
-      -1,    -1,    -1,    -1,    14,    15,    -1,    17,    18,    -1,
-      20,    21,    22,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    33,    34,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,     6,
-      50,     8,     9,    10,    11,    12,    -1,    14,    15,    -1,
-      17,    18,    -1,    -1,    -1,    -1,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      -1,    -1,    -1,    -1,    -1,    42,     5,     6,    -1,     8,
-       9,    10,    11,    12,    -1,    14,    15,    -1,    17,    18,
-      -1,    -1,    -1,    -1,    -1,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,    -1,   119,
-     120,   121,   122,    42,   124,   125,   126,    -1,     3,     4,
-       5,     6,     7,    -1,   134,    -1,   136,    -1,    -1,    14,
-      15,   141,    17,    18,    -1,    20,    21,    22,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,    34,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    50,    -1,    -1,   135,    -1,
-      -1,   138,    -1,   140,   141,    -1,   143,    -1,    -1,    -1,
-      -1,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   135,    -1,    -1,   138,
-      -1,    -1,   141,    -1,   143,    -1,    -1,    -1,    -1,    -1,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,    -1,   119,   120,   121,   122,    -1,   124,
-     125,   126,     3,     4,    -1,    -1,     7,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   141,    -1,    -1,    20,
-      21,    22,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,     6,    50,
-       8,     9,    10,    11,    12,    -1,    14,    15,    -1,    17,
-      18,    -1,    -1,    -1,    -1,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    -1,
-      -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,    -1,    -1,
-       5,     6,    -1,     8,     9,    10,    11,    12,    -1,    14,
-      15,    -1,    17,    18,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,    32,   119,   120,
-     121,   122,    -1,   124,   125,   126,    -1,    42,    -1,     5,
-       6,    -1,     8,     9,    10,    11,    12,    -1,    14,    15,
-     141,    17,    18,    -1,    -1,     5,     6,    -1,     8,     9,
-      10,    11,    12,    -1,    14,    15,    32,    17,    18,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,
-      -1,    -1,    32,    -1,    -1,    -1,    -1,   135,    -1,    -1,
-     138,    -1,    42,   141,    -1,   143,    -1,     5,     6,    -1,
-       8,     9,    10,    11,    12,    -1,    14,    15,    -1,    17,
-      18,     5,     6,    -1,     8,     9,    10,    11,    12,    -1,
-      14,    15,    -1,    17,    18,    -1,    -1,    -1,    -1,    -1,
-     135,    -1,    -1,   138,    42,    -1,   141,    -1,   143,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     5,     6,    42,     8,
-       9,    10,    11,    12,    -1,    14,    15,    -1,    17,    18,
-      -1,     5,     6,    -1,     8,     9,    10,    11,    12,   135,
-      14,    15,   138,    17,    18,   141,    -1,   143,    -1,    -1,
-      -1,    -1,    -1,    42,    -1,   135,    -1,    -1,   138,    -1,
-      -1,   141,    -1,   143,    -1,    -1,    -1,    -1,    42,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   135,    -1,    -1,
-     138,    -1,    -1,   141,    -1,   143,    -1,    -1,    -1,    -1,
-      -1,   135,    -1,    -1,   138,    -1,    -1,   141,    -1,   143,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      30,    -1,    -1,    -1,    -1,    -1,   135,    -1,    -1,   138,
-      -1,    -1,   141,    -1,   143,    -1,    -1,    -1,    48,    49,
-      -1,   135,    -1,    -1,   138,    -1,    -1,   141,    -1,   143,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     100,   101,   102,    -1,    -1,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
-static const unsigned char yystos[] =
-{
-       0,    14,    15,    17,    18,    19,    25,    26,    44,    47,
-      51,   155,   157,   158,   159,   187,   188,   189,   191,   190,
-      45,    59,   196,   132,    50,   132,    13,   132,    35,    36,
-      37,    38,    39,    40,    41,    43,   131,   160,   161,   162,
-       0,   189,    39,    41,   163,   206,    35,    36,    37,    40,
-     164,   203,   205,   212,   132,   132,   138,   197,    17,   195,
-       5,     6,     8,     9,    10,    11,    12,    42,   135,   138,
-     141,   143,   155,   158,   176,   177,   209,   162,   162,    27,
-      28,   186,   162,   162,    16,   213,   214,    24,   144,   204,
-     213,    17,    17,    17,   198,   136,     4,     4,     4,   143,
-       8,   144,   177,   182,   134,   136,   186,   186,     9,    10,
-      11,   153,   154,   177,   183,    53,    54,    55,    56,    57,
-      58,   165,   201,   201,   157,   217,   133,   140,    32,   177,
-     178,   180,   181,   139,   139,   144,   182,   133,   144,   181,
-     183,   177,    21,    22,     3,     4,     7,    20,    33,    34,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   119,   120,   121,
-     122,   124,   125,   126,   138,   141,   143,   145,   147,   148,
-     149,   150,   184,   209,   192,     4,     8,   177,   179,    23,
-     143,   202,    30,    48,    49,    60,    61,    62,    63,    64,
-      65,    78,    79,   100,   101,   102,   105,   118,   119,   123,
-     124,   125,   126,   147,   148,   149,   150,   215,   221,   222,
-     223,   224,    17,   167,   133,   137,   177,   177,   142,   144,
-     177,   137,   193,   194,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,   151,    21,    22,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   152,   136,   136,   136,   136,   136,   140,   183,   185,
-     143,   185,   144,   185,    17,   136,   136,   136,   136,   133,
-     174,   158,    48,     8,   177,   211,     9,    12,     9,   153,
-     165,   151,   152,   177,   177,   211,   177,   177,   218,   211,
-     211,   211,   211,   211,   177,   177,   211,   211,   165,   103,
-     104,   107,   108,   128,   129,   166,    32,   178,   169,   140,
-     142,   142,   169,   174,   174,   136,   136,   183,   183,   183,
-     183,   183,   133,   140,   144,   177,   185,   142,   144,   183,
-     183,   183,   183,    29,    46,   172,   175,   136,     3,     4,
-       7,    20,    21,    22,    33,    34,    50,   141,   184,   208,
-     209,   210,   210,   210,   210,   179,   177,   177,   133,   171,
-     133,   171,   210,   138,   133,   133,   133,   133,   133,   133,
-     210,   210,    31,   133,   179,   177,   211,   127,   166,   168,
-     183,   183,   220,   133,   133,   133,   133,   183,   142,   144,
-     133,   133,    31,   133,    17,     4,   174,    32,   177,   199,
-     200,    52,   207,   185,   133,   133,   210,   210,   210,     9,
-      46,     9,   220,   210,   138,   211,   177,   211,   211,   211,
-     133,   133,   177,   211,   210,   210,   133,   133,   133,   133,
-     137,   183,   183,   183,   183,   142,   183,   183,   177,   183,
-     167,   133,   137,    17,   142,    12,    12,   136,   133,   133,
-     210,     4,   210,   133,   210,   133,   133,   133,   210,   210,
-     136,   177,   183,   183,   211,   133,   137,   133,   133,   137,
-     137,   137,   137,   155,   156,    32,   177,   169,   133,   210,
-     210,   177,   219,   210,   210,   133,   171,   171,   210,   133,
-     211,   211,   211,   219,   210,   137,   137,   183,   183,   183,
-     167,   172,   173,    17,   133,   138,   210,   133,   137,   140,
-     210,   137,   137,   137,   137,   156,    46,   170,    12,   140,
-     153,   216,   167,   177,   169,   140,   169,     4,   210,   208,
-     140,   153,   210,    31,   133,   208,   167,    12,    12,   133,
-     210,   210,    12,    64,   210,    12,   210
-};
+/* 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);				\
+    { yychar = (token), yylval = (value);			\
+      yychar1 = YYTRANSLATE (yychar);				\
       YYPOPSTACK;						\
       goto yybackup;						\
     }								\
   else								\
-    {								\
-      yyerror (YY_("syntax error: cannot back up")); \
-      YYERROR;							\
-    }								\
+    { 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 (N)								\
-	{								\
-	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
-	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
-	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
-	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
-	}								\
-      else								\
-	{								\
-	  (Current).first_line   = (Current).last_line   =		\
-	    YYRHSLOC (Rhs, 0).last_line;				\
-	  (Current).first_column = (Current).last_column =		\
-	    YYRHSLOC (Rhs, 0).last_column;				\
-	}								\
-    while (0)
+#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 (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);				\
-      yysymprint (stderr,					\
-                  Type, Value);	\
-      YYFPRINTF (stderr, "\n");					\
-    }								\
-} while (0)
-
-/*------------------------------------------------------------------.
-| yy_stack_print -- Print the state stack from its BOTTOM up to its |
-| TOP (included).                                                   |
-`------------------------------------------------------------------*/
-
-#if defined (__STDC__) || defined (__cplusplus)
-static void
-yy_stack_print (short int *bottom, short int *top)
-#else
-static void
-yy_stack_print (bottom, top)
-    short int *bottom;
-    short int *top;
+#ifdef YYLSP_NEEDED
+YYLTYPE yylloc;			/*  location data for the lookahead	*/
+				/*  symbol				*/
 #endif
-{
-  YYFPRINTF (stderr, "Stack now");
-  for (/* Nothing. */; bottom <= top; ++bottom)
-    YYFPRINTF (stderr, " %d", *bottom);
-  YYFPRINTF (stderr, "\n");
-}
 
-# define YY_STACK_PRINT(Bottom, Top)				\
-do {								\
-  if (yydebug)							\
-    yy_stack_print ((Bottom), (Top));				\
-} while (0)
+int yynerrs;			/*  number of parse errors so far       */
+#endif  /* not YYPURE */
 
-
-/*------------------------------------------------.
-| Report that the YYRULE is going to be reduced.  |
-`------------------------------------------------*/
-
-#if defined (__STDC__) || defined (__cplusplus)
-static void
-yy_reduce_print (int yyrule)
-#else
-static void
-yy_reduce_print (yyrule)
-    int yyrule;
+#if YYDEBUG != 0
+int yydebug;			/*  nonzero means print parse trace	*/
+/* Since this is uninitialized, it does not stop multiple parsers
+   from coexisting.  */
 #endif
-{
-  int yyi;
-  unsigned long int yylno = yyrline[yyrule];
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ",
-             yyrule - 1, yylno);
-  /* Print the symbols being reduced, and their result.  */
-  for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
-    YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
-  YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]);
-}
 
-# define YY_REDUCE_PRINT(Rule)		\
-do {					\
-  if (yydebug)				\
-    yy_reduce_print (Rule);		\
-} while (0)
+/*  YYINITDEPTH indicates the initial size of the parser's stacks	*/
 
-/* 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.  */
-static YYSIZE_T
-#   if defined (__STDC__) || defined (__cplusplus)
-yystrlen (const char *yystr)
-#   else
-yystrlen (yystr)
-     const char *yystr;
-#   endif
-{
-  const char *yys = yystr;
-
-  while (*yys++ != '\0')
-    continue;
-
-  return yys - yystr - 1;
-}
-#  endif
-# endif
-
-# ifndef yystpcpy
-#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
-#   define yystpcpy stpcpy
-#  else
-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
-   YYDEST.  */
-static char *
-#   if defined (__STDC__) || defined (__cplusplus)
-yystpcpy (char *yydest, const char *yysrc)
-#   else
-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 == '"')
-    {
-      size_t yyn = 0;
-      char const *yyp = yystr;
-
-      for (;;)
-	switch (*++yyp)
-	  {
-	  case '\'':
-	  case ',':
-	    goto do_not_strip_quotes;
-
-	  case '\\':
-	    if (*++yyp != '\\')
-	      goto do_not_strip_quotes;
-	    /* Fall through.  */
-	  default:
-	    if (yyres)
-	      yyres[yyn] = *yyp;
-	    yyn++;
-	    break;
-
-	  case '"':
-	    if (yyres)
-	      yyres[yyn] = '\0';
-	    return yyn;
-	  }
-    do_not_strip_quotes: ;
-    }
-
-  if (! yyres)
-    return yystrlen (yystr);
-
-  return yystpcpy (yyres, yystr) - yyres;
-}
-# endif
-
-#endif /* YYERROR_VERBOSE */
-
-
-
-#if YYDEBUG
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
-
-#if defined (__STDC__) || defined (__cplusplus)
+/* This is the most reliable way to avoid incompatibilities
+   in available built-in functions on various systems.  */
 static void
-yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
-#else
+__yy_memcpy (to, from, count)
+     char *to;
+     char *from;
+     unsigned int count;
+{
+  register char *f = from;
+  register char *t = to;
+  register int i = count;
+
+  while (i-- > 0)
+    *t++ = *f++;
+}
+
+#else /* __cplusplus */
+
+/* This is the most reliable way to avoid incompatibilities
+   in available built-in functions on various systems.  */
 static void
-yysymprint (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE *yyvaluep;
+__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
-{
-  /* Pacify ``unused variable'' warnings.  */
-  (void) yyvaluep;
-
-  if (yytype < YYNTOKENS)
-    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-  else
-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
-
-
-# ifdef YYPRINT
-  if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# endif
-  switch (yytype)
-    {
-      default:
-        break;
-    }
-  YYFPRINTF (yyoutput, ")");
-}
-
-#endif /* ! YYDEBUG */
-/*-----------------------------------------------.
-| Release the memory associated to this symbol.  |
-`-----------------------------------------------*/
-
-#if defined (__STDC__) || defined (__cplusplus)
-static void
-yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
-#else
-static void
-yydestruct (yymsg, yytype, yyvaluep)
-    const char *yymsg;
-    int yytype;
-    YYSTYPE *yyvaluep;
 #endif
-{
-  /* Pacify ``unused variable'' warnings.  */
-  (void) yyvaluep;
-
-  if (!yymsg)
-    yymsg = "Deleting";
-  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
-  switch (yytype)
-    {
-
-      default:
-        break;
-    }
-}
 
+#line 217 "/usr/share/bison.simple"
 
-/* Prevent warnings from -Wmissing-prototypes.  */
+/* 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);
-# else
-int yyparse ();
-# endif
-#else /* ! YYPARSE_PARAM */
-#if defined (__STDC__) || defined (__cplusplus)
+#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 (void);
-#else
-int yyparse ();
 #endif
-#endif /* ! YYPARSE_PARAM */
+#endif
 
-
-
-/* The look-ahead symbol.  */
-int yychar;
-
-/* The semantic value of the look-ahead symbol.  */
-YYSTYPE yylval;
-
-/* Number of syntax errors so far.  */
-int yynerrs;
-
-
-
-/*----------.
-| yyparse.  |
-`----------*/
-
-#ifdef YYPARSE_PARAM
-# if defined (__STDC__) || defined (__cplusplus)
-int yyparse (void *YYPARSE_PARAM)
-# else
-int yyparse (YYPARSE_PARAM)
-  void *YYPARSE_PARAM;
-# endif
-#else /* ! YYPARSE_PARAM */
-#if defined (__STDC__) || defined (__cplusplus)
 int
-yyparse (void)
-#else
-int
-yyparse ()
-
-#endif
-#endif
+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;
+  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 */
 
-  /* Three stacks and their tools:
-     `yyss': related to states,
-     `yyvs': related to semantic values,
-     `yyls': related to locations.
+  short	yyssa[YYINITDEPTH];	/*  the state stack			*/
+  YYSTYPE yyvsa[YYINITDEPTH];	/*  the semantic value stack		*/
 
-     Refer to the stacks thru separate pointers, to allow yyoverflow
-     to reallocate them elsewhere.  */
+  short *yyss = yyssa;		/*  refer to the stacks thru separate pointers */
+  YYSTYPE *yyvs = yyvsa;	/*  to allow yyoverflow to reallocate them elsewhere */
 
-  /* The state stack.  */
-  short int yyssa[YYINITDEPTH];
-  short int *yyss = yyssa;
-  short int *yyssp;
+#ifdef YYLSP_NEEDED
+  YYLTYPE yylsa[YYINITDEPTH];	/*  the location stack			*/
+  YYLTYPE *yyls = yylsa;
+  YYLTYPE *yylsp;
 
-  /* The semantic value stack.  */
-  YYSTYPE yyvsa[YYINITDEPTH];
-  YYSTYPE *yyvs = yyvsa;
-  YYSTYPE *yyvsp;
-
-
-
+#define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
+#else
 #define YYPOPSTACK   (yyvsp--, yyssp--)
+#endif
 
-  YYSIZE_T yystacksize = YYINITDEPTH;
+  int yystacksize = YYINITDEPTH;
+  int yyfree_stacks = 0;
 
-  /* The variables used to return semantic value and location from the
-     action routines.  */
-  YYSTYPE yyval;
+#ifdef YYPURE
+  int yychar;
+  YYSTYPE yylval;
+  int yynerrs;
+#ifdef YYLSP_NEEDED
+  YYLTYPE yylloc;
+#endif
+#endif
 
+  YYSTYPE yyval;		/*  the variable used to return		*/
+				/*  semantic values from the action	*/
+				/*  routines				*/
 
-  /* When reducing, the number of symbols on the RHS of the reduced
-     rule.  */
   int yylen;
 
-  YYDPRINTF ((stderr, "Starting parse\n"));
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Starting parse\n");
+#endif
 
   yystate = 0;
   yyerrstatus = 0;
@@ -2801,675 +2126,644 @@
      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;
-	short int *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;
-
-      {
-	short int *yyss1 = yyss;
-	union yyalloc *yyptr =
-	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-	if (! yyptr)
-	  goto yyexhaustedlab;
-	YYSTACK_RELOCATE (yyss);
-	YYSTACK_RELOCATE (yyvs);
-
-#  undef YYSTACK_RELOCATE
-	if (yyss1 != yyssa)
-	  YYSTACK_FREE (yyss1);
-      }
-# endif
+#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 look-ahead token if we need one and don't already have one.  */
+/* Read a lookahead token if we need one and don't already have one.  */
 /* yyresume: */
 
-  /* First try to decide what to do without reference to look-ahead token.  */
+  /* First try to decide what to do without reference to lookahead 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;
 
-  /* Shift the look-ahead token.  */
-  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+  /* Shift the lookahead token.  */
+
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
+#endif
 
   /* Discard the token being shifted unless it is eof.  */
   if (yychar != YYEOF)
     yychar = YYEMPTY;
 
   *++yyvsp = yylval;
+#ifdef YYLSP_NEEDED
+  *++yylsp = yylloc;
+#endif
 
-
-  /* Count tokens shifted since error; after three, turn off error
-     status.  */
-  if (yyerrstatus)
-    yyerrstatus--;
+  /* count tokens shifted since error; after three, turn off error status.  */
+  if (yyerrstatus) yyerrstatus--;
 
   yystate = yyn;
   goto yynewstate;
 
-
-/*-----------------------------------------------------------.
-| 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 1037 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;}
-    break;
+      int i;
 
-  case 30:
-#line 1037 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;}
-    break;
+      fprintf (stderr, "Reducing via rule %d (line %d), ",
+	       yyn, yyrline[yyn]);
 
-  case 31:
-#line 1038 "/proj/llvm/llvm-1/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 1038 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;}
-    break;
 
-  case 33:
-#line 1039 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;}
-    break;
+  switch (yyn) {
 
-  case 34:
-#line 1039 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;}
-    break;
-
-  case 35:
-#line 1040 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;}
-    break;
-
-  case 36:
-#line 1040 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;}
-    break;
-
-  case 37:
-#line 1041 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;}
-    break;
-
-  case 38:
-#line 1041 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;}
-    break;
-
-  case 39:
-#line 1045 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;}
-    break;
-
-  case 40:
-#line 1045 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;}
-    break;
-
-  case 41:
-#line 1046 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;}
-    break;
-
-  case 42:
-#line 1046 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;}
-    break;
-
-  case 43:
-#line 1047 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;}
-    break;
-
-  case 44:
-#line 1047 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;}
-    break;
-
-  case 45:
-#line 1048 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;}
-    break;
-
-  case 46:
-#line 1048 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;}
-    break;
-
-  case 47:
-#line 1049 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;}
-    break;
-
-  case 48:
-#line 1049 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;}
-    break;
-
-  case 49:
-#line 1050 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;}
-    break;
-
-  case 50:
-#line 1050 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;}
-    break;
-
-  case 51:
-#line 1051 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;}
-    break;
-
-  case 52:
-#line 1051 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;}
-    break;
-
-  case 53:
-#line 1052 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;}
-    break;
-
-  case 54:
-#line 1053 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;}
-    break;
-
-  case 61:
-#line 1062 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.StrVal) = 0; ;}
-    break;
-
-  case 62:
-#line 1066 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.StrVal) = (yyvsp[-1].StrVal);
+case 28:
+#line 1038 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_EQ; ;
+    break;}
+case 29:
+#line 1038 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_NE; ;
+    break;}
+case 30:
+#line 1039 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_SLT; ;
+    break;}
+case 31:
+#line 1039 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_SGT; ;
+    break;}
+case 32:
+#line 1040 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_SLE; ;
+    break;}
+case 33:
+#line 1040 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_SGE; ;
+    break;}
+case 34:
+#line 1041 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_ULT; ;
+    break;}
+case 35:
+#line 1041 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_UGT; ;
+    break;}
+case 36:
+#line 1042 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_ULE; ;
+    break;}
+case 37:
+#line 1042 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_UGE; ;
+    break;}
+case 38:
+#line 1046 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_OEQ; ;
+    break;}
+case 39:
+#line 1046 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_ONE; ;
+    break;}
+case 40:
+#line 1047 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_OLT; ;
+    break;}
+case 41:
+#line 1047 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_OGT; ;
+    break;}
+case 42:
+#line 1048 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_OLE; ;
+    break;}
+case 43:
+#line 1048 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_OGE; ;
+    break;}
+case 44:
+#line 1049 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_ORD; ;
+    break;}
+case 45:
+#line 1049 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_UNO; ;
+    break;}
+case 46:
+#line 1050 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_UEQ; ;
+    break;}
+case 47:
+#line 1050 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_UNE; ;
+    break;}
+case 48:
+#line 1051 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_ULT; ;
+    break;}
+case 49:
+#line 1051 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_UGT; ;
+    break;}
+case 50:
+#line 1052 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_ULE; ;
+    break;}
+case 51:
+#line 1052 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_UGE; ;
+    break;}
+case 52:
+#line 1053 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_TRUE; ;
+    break;}
+case 53:
+#line 1054 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_FALSE; ;
+    break;}
+case 60:
+#line 1063 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.StrVal = 0; ;
+    break;}
+case 61:
+#line 1067 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.StrVal = yyvsp[-1].StrVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 63:
-#line 1070 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.StrVal) = 0;
+  ;
+    break;}
+case 62:
+#line 1071 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.StrVal = 0;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 66:
-#line 1077 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.StrVal) = (yyvsp[-1].StrVal);
+  ;
+    break;}
+case 65:
+#line 1078 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.StrVal = yyvsp[-1].StrVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 67:
-#line 1081 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.StrVal) = 0;
+  ;
+    break;}
+case 66:
+#line 1082 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.StrVal = 0;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 68:
-#line 1087 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
-    break;
-
-  case 69:
-#line 1088 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
-    break;
-
-  case 70:
-#line 1089 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
-    break;
-
-  case 71:
-#line 1090 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
-    break;
-
-  case 72:
-#line 1091 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
-    break;
-
-  case 73:
-#line 1095 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
-    break;
-
-  case 74:
-#line 1096 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
-    break;
-
-  case 75:
-#line 1097 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
-    break;
-
-  case 76:
-#line 1101 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Visibility) = GlobalValue::DefaultVisibility; ;}
-    break;
-
-  case 77:
-#line 1102 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Visibility) = GlobalValue::HiddenVisibility;  ;}
-    break;
-
-  case 78:
-#line 1106 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
-    break;
-
-  case 79:
-#line 1107 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
-    break;
-
-  case 80:
-#line 1108 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
-    break;
-
-  case 81:
-#line 1112 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
-    break;
-
-  case 82:
-#line 1113 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
-    break;
-
-  case 83:
-#line 1114 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
-    break;
-
-  case 84:
-#line 1115 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
-    break;
-
-  case 85:
-#line 1116 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
-    break;
-
-  case 86:
-#line 1119 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::C; ;}
-    break;
-
-  case 87:
-#line 1120 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::C; ;}
-    break;
-
-  case 88:
-#line 1121 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::Fast; ;}
-    break;
-
-  case 89:
-#line 1122 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::Cold; ;}
-    break;
-
-  case 90:
-#line 1123 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::X86_StdCall; ;}
-    break;
-
-  case 91:
-#line 1124 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::X86_FastCall; ;}
-    break;
-
-  case 92:
-#line 1125 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-                   if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val))
+  ;
+    break;}
+case 67:
+#line 1088 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::InternalLinkage; ;
+    break;}
+case 68:
+#line 1089 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::WeakLinkage; ;
+    break;}
+case 69:
+#line 1090 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
+    break;}
+case 70:
+#line 1091 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::AppendingLinkage; ;
+    break;}
+case 71:
+#line 1092 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::DLLExportLinkage; ;
+    break;}
+case 72:
+#line 1096 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::DLLImportLinkage; ;
+    break;}
+case 73:
+#line 1097 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;
+    break;}
+case 74:
+#line 1098 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
+    break;}
+case 75:
+#line 1102 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Visibility = GlobalValue::DefaultVisibility; ;
+    break;}
+case 76:
+#line 1103 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Visibility = GlobalValue::HiddenVisibility;  ;
+    break;}
+case 77:
+#line 1107 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
+    break;}
+case 78:
+#line 1108 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::DLLImportLinkage; ;
+    break;}
+case 79:
+#line 1109 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;
+    break;}
+case 80:
+#line 1113 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
+    break;}
+case 81:
+#line 1114 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::InternalLinkage; ;
+    break;}
+case 82:
+#line 1115 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
+    break;}
+case 83:
+#line 1116 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::WeakLinkage; ;
+    break;}
+case 84:
+#line 1117 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::DLLExportLinkage; ;
+    break;}
+case 85:
+#line 1120 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::C; ;
+    break;}
+case 86:
+#line 1121 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::C; ;
+    break;}
+case 87:
+#line 1122 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::Fast; ;
+    break;}
+case 88:
+#line 1123 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::Cold; ;
+    break;}
+case 89:
+#line 1124 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::X86_StdCall; ;
+    break;}
+case 90:
+#line 1125 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::X86_FastCall; ;
+    break;}
+case 91:
+#line 1126 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+                   if ((unsigned)yyvsp[0].UInt64Val != yyvsp[0].UInt64Val)
                      GEN_ERROR("Calling conv too large!");
-                   (yyval.UIntVal) = (yyvsp[0].UInt64Val);
+                   yyval.UIntVal = yyvsp[0].UInt64Val;
                   CHECK_FOR_ERROR
-                 ;}
-    break;
-
-  case 93:
-#line 1132 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = FunctionType::ZExtAttribute;      ;}
-    break;
-
-  case 94:
-#line 1133 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = FunctionType::SExtAttribute;      ;}
-    break;
-
-  case 95:
-#line 1134 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = FunctionType::InRegAttribute;     ;}
-    break;
-
-  case 96:
-#line 1135 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = FunctionType::StructRetAttribute; ;}
-    break;
-
-  case 97:
-#line 1138 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = FunctionType::NoAttributeSet; ;}
-    break;
-
-  case 98:
-#line 1139 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-                (yyval.ParamAttrs) = FunctionType::ParameterAttributes((yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs));
-              ;}
-    break;
-
-  case 99:
-#line 1144 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = FunctionType::NoReturnAttribute; ;}
-    break;
-
-  case 101:
-#line 1148 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = FunctionType::NoAttributeSet; ;}
-    break;
-
-  case 102:
-#line 1149 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-                (yyval.ParamAttrs) = FunctionType::ParameterAttributes((yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs));
-              ;}
-    break;
-
-  case 103:
-#line 1156 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = 0; ;}
-    break;
-
-  case 104:
-#line 1157 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.UIntVal) = (yyvsp[0].UInt64Val);
-  if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
+                 ;
+    break;}
+case 92:
+#line 1133 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = FunctionType::ZExtAttribute;      ;
+    break;}
+case 93:
+#line 1134 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = FunctionType::SExtAttribute;      ;
+    break;}
+case 94:
+#line 1135 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = FunctionType::InRegAttribute;     ;
+    break;}
+case 95:
+#line 1136 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = FunctionType::StructRetAttribute; ;
+    break;}
+case 96:
+#line 1139 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = FunctionType::NoAttributeSet; ;
+    break;}
+case 97:
+#line 1140 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+                yyval.ParamAttrs = FunctionType::ParameterAttributes(yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs);
+              ;
+    break;}
+case 98:
+#line 1145 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = FunctionType::NoReturnAttribute; ;
+    break;}
+case 100:
+#line 1149 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = FunctionType::NoAttributeSet; ;
+    break;}
+case 101:
+#line 1150 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+                yyval.ParamAttrs = FunctionType::ParameterAttributes(yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs);
+              ;
+    break;}
+case 102:
+#line 1157 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = 0; ;
+    break;}
+case 103:
+#line 1158 "/Volumes/ProjectsDisk/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 105:
-#line 1163 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = 0; ;}
-    break;
-
-  case 106:
-#line 1164 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.UIntVal) = (yyvsp[0].UInt64Val);
-  if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
+;
+    break;}
+case 104:
+#line 1164 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = 0; ;
+    break;}
+case 105:
+#line 1165 "/Volumes/ProjectsDisk/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 107:
-#line 1172 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-  for (unsigned i = 0, e = strlen((yyvsp[0].StrVal)); i != e; ++i)
-    if ((yyvsp[0].StrVal)[i] == '"' || (yyvsp[0].StrVal)[i] == '\\')
+;
+    break;}
+case 106:
+#line 1173 "/Volumes/ProjectsDisk/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[0].StrVal);
+  yyval.StrVal = yyvsp[0].StrVal;
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 108:
-#line 1180 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.StrVal) = 0; ;}
-    break;
-
-  case 109:
-#line 1181 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.StrVal) = (yyvsp[0].StrVal); ;}
-    break;
-
-  case 110:
-#line 1186 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {;}
-    break;
-
-  case 111:
-#line 1187 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {;}
-    break;
-
-  case 112:
-#line 1188 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    CurGV->setSection((yyvsp[0].StrVal));
-    free((yyvsp[0].StrVal));
+;
+    break;}
+case 107:
+#line 1181 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.StrVal = 0; ;
+    break;}
+case 108:
+#line 1182 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.StrVal = yyvsp[0].StrVal; ;
+    break;}
+case 109:
+#line 1187 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{;
+    break;}
+case 110:
+#line 1188 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{;
+    break;}
+case 111:
+#line 1189 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    CurGV->setSection(yyvsp[0].StrVal);
+    free(yyvsp[0].StrVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 113:
-#line 1193 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val)))
+  ;
+    break;}
+case 112:
+#line 1194 "/Volumes/ProjectsDisk/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[0].UInt64Val));
+    CurGV->setAlignment(yyvsp[0].UInt64Val);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 118:
-#line 1209 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
+  ;
+    break;}
+case 117:
+#line 1210 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeVal = new PATypeHolder(OpaqueType::get());
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 119:
-#line 1213 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType));
+  ;
+    break;}
+case 118:
+#line 1214 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeVal = new PATypeHolder(yyvsp[0].PrimType);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 120:
-#line 1217 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {                             // Pointer type?
-    if (*(yyvsp[-1].TypeVal) == Type::LabelTy)
+  ;
+    break;}
+case 119:
+#line 1218 "/Volumes/ProjectsDisk/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].TypeVal))));
-    delete (yyvsp[-1].TypeVal);
+    yyval.TypeVal = new PATypeHolder(HandleUpRefs(PointerType::get(*yyvsp[-1].TypeVal)));
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 121:
-#line 1224 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {            // Named types are also simple types...
-    const Type* tmp = getTypeVal((yyvsp[0].ValIDVal));
+  ;
+    break;}
+case 120:
+#line 1225 "/Volumes/ProjectsDisk/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 122:
-#line 1229 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {                   // Type UpReference
-    if ((yyvsp[0].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range!");
+    yyval.TypeVal = new PATypeHolder(tmp);
+  ;
+    break;}
+case 121:
+#line 1230 "/Volumes/ProjectsDisk/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[0].UInt64Val), OT));  // Add to vector...
-    (yyval.TypeVal) = new PATypeHolder(OT);
+    UpRefs.push_back(UpRefRecord((unsigned)yyvsp[0].UInt64Val, OT));  // Add to vector...
+    yyval.TypeVal = new PATypeHolder(OT);
     UR_OUT("New Upreference!\n");
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 123:
-#line 1237 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 122:
+#line 1238 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     std::vector<const Type*> Params;
     std::vector<FunctionType::ParameterAttributes> Attrs;
-    Attrs.push_back((yyvsp[0].ParamAttrs));
-    for (TypeWithAttrsList::iterator I=(yyvsp[-2].TypeWithAttrsList)->begin(), E=(yyvsp[-2].TypeWithAttrsList)->end(); I != E; ++I) {
+    Attrs.push_back(yyvsp[0].ParamAttrs);
+    for (TypeWithAttrsList::iterator I=yyvsp[-2].TypeWithAttrsList->begin(), E=yyvsp[-2].TypeWithAttrsList->end(); I != E; ++I) {
       Params.push_back(I->Ty->get());
       if (I->Ty->get() != Type::VoidTy)
         Attrs.push_back(I->Attrs);
@@ -3477,21 +2771,20 @@
     bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
     if (isVarArg) Params.pop_back();
 
-    FunctionType *FT = FunctionType::get(*(yyvsp[-4].TypeVal), Params, isVarArg, Attrs);
-    delete (yyvsp[-2].TypeWithAttrsList);   // Delete the argument list
-    delete (yyvsp[-4].TypeVal);   // Delete the return type handle
-    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT)); 
+    FunctionType *FT = FunctionType::get(*yyvsp[-4].TypeVal, Params, isVarArg, Attrs);
+    delete yyvsp[-2].TypeWithAttrsList;   // Delete the argument list
+    delete yyvsp[-4].TypeVal;   // Delete the return type handle
+    yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT)); 
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 124:
-#line 1255 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 123:
+#line 1256 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     std::vector<const Type*> Params;
     std::vector<FunctionType::ParameterAttributes> Attrs;
-    Attrs.push_back((yyvsp[0].ParamAttrs));
-    for (TypeWithAttrsList::iterator I=(yyvsp[-2].TypeWithAttrsList)->begin(), E=(yyvsp[-2].TypeWithAttrsList)->end(); I != E; ++I) {
+    Attrs.push_back(yyvsp[0].ParamAttrs);
+    for (TypeWithAttrsList::iterator I=yyvsp[-2].TypeWithAttrsList->begin(), E=yyvsp[-2].TypeWithAttrsList->end(); I != E; ++I) {
       Params.push_back(I->Ty->get());
       if (I->Ty->get() != Type::VoidTy)
         Attrs.push_back(I->Attrs);
@@ -3499,303 +2792,282 @@
     bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
     if (isVarArg) Params.pop_back();
 
-    FunctionType *FT = FunctionType::get((yyvsp[-4].PrimType), Params, isVarArg, Attrs);
-    delete (yyvsp[-2].TypeWithAttrsList);      // Delete the argument list
-    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT)); 
+    FunctionType *FT = FunctionType::get(yyvsp[-4].PrimType, Params, isVarArg, Attrs);
+    delete yyvsp[-2].TypeWithAttrsList;      // Delete the argument list
+    yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT)); 
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 125:
-#line 1273 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {          // Sized array type?
-    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
-    delete (yyvsp[-1].TypeVal);
+  ;
+    break;}
+case 124:
+#line 1274 "/Volumes/ProjectsDisk/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 126:
-#line 1278 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {          // Packed array type?
-     const llvm::Type* ElemTy = (yyvsp[-1].TypeVal)->get();
-     if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val))
+  ;
+    break;}
+case 125:
+#line 1279 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{          // Packed array type?
+     const llvm::Type* ElemTy = yyvsp[-1].TypeVal->get();
+     if ((unsigned)yyvsp[-3].UInt64Val != yyvsp[-3].UInt64Val)
         GEN_ERROR("Unsigned result not equal to signed result");
      if (!ElemTy->isFloatingPoint() && !ElemTy->isInteger())
         GEN_ERROR("Element type of a PackedType must be primitive");
-     if (!isPowerOf2_32((yyvsp[-3].UInt64Val)))
+     if (!isPowerOf2_32(yyvsp[-3].UInt64Val))
        GEN_ERROR("Vector length should be a power of 2!");
-     (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PackedType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
-     delete (yyvsp[-1].TypeVal);
+     yyval.TypeVal = new PATypeHolder(HandleUpRefs(PackedType::get(*yyvsp[-1].TypeVal, (unsigned)yyvsp[-3].UInt64Val)));
+     delete yyvsp[-1].TypeVal;
      CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 127:
-#line 1290 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {                        // Structure type?
+  ;
+    break;}
+case 126:
+#line 1291 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                        // Structure type?
     std::vector<const Type*> Elements;
-    for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-1].TypeList)->begin(),
-           E = (yyvsp[-1].TypeList)->end(); I != E; ++I)
+    for (std::list<llvm::PATypeHolder>::iterator I = yyvsp[-1].TypeList->begin(),
+           E = yyvsp[-1].TypeList->end(); I != E; ++I)
       Elements.push_back(*I);
 
-    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
-    delete (yyvsp[-1].TypeList);
+    yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
+    delete yyvsp[-1].TypeList;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 128:
-#line 1300 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {                                  // Empty structure type?
-    (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>()));
+  ;
+    break;}
+case 127:
+#line 1301 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                                  // Empty structure type?
+    yyval.TypeVal = new PATypeHolder(StructType::get(std::vector<const Type*>()));
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 129:
-#line 1304 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 128:
+#line 1305 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     std::vector<const Type*> Elements;
-    for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-2].TypeList)->begin(),
-           E = (yyvsp[-2].TypeList)->end(); I != E; ++I)
+    for (std::list<llvm::PATypeHolder>::iterator I = yyvsp[-2].TypeList->begin(),
+           E = yyvsp[-2].TypeList->end(); I != E; ++I)
       Elements.push_back(*I);
 
-    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true)));
-    delete (yyvsp[-2].TypeList);
+    yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true)));
+    delete yyvsp[-2].TypeList;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 130:
-#line 1314 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {                         // Empty structure type?
-    (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
+  ;
+    break;}
+case 129:
+#line 1315 "/Volumes/ProjectsDisk/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 131:
-#line 1321 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { 
-    (yyval.TypeWithAttrs).Ty = (yyvsp[-1].TypeVal); 
-    (yyval.TypeWithAttrs).Attrs = (yyvsp[0].ParamAttrs); 
-  ;}
-    break;
-
-  case 132:
-#line 1328 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 130:
+#line 1322 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ 
+    yyval.TypeWithAttrs.Ty = yyvsp[-1].TypeVal; 
+    yyval.TypeWithAttrs.Attrs = yyvsp[0].ParamAttrs; 
+  ;
+    break;}
+case 131:
+#line 1329 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
-    if (!(*(yyvsp[0].TypeVal))->isFirstClassType())
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
+    if (!(*yyvsp[0].TypeVal)->isFirstClassType())
       GEN_ERROR("LLVM functions cannot return aggregate types!");
-    (yyval.TypeVal) = (yyvsp[0].TypeVal);
-  ;}
-    break;
-
-  case 133:
-#line 1335 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeVal) = new PATypeHolder(Type::VoidTy);
-  ;}
-    break;
-
-  case 134:
-#line 1340 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
-    (yyval.TypeWithAttrsList)->push_back((yyvsp[0].TypeWithAttrs));
+    yyval.TypeVal = yyvsp[0].TypeVal;
+  ;
+    break;}
+case 132:
+#line 1336 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeVal = new PATypeHolder(Type::VoidTy);
+  ;
+    break;}
+case 133:
+#line 1341 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeWithAttrsList = new TypeWithAttrsList();
+    yyval.TypeWithAttrsList->push_back(yyvsp[0].TypeWithAttrs);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 135:
-#line 1345 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    ((yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList))->push_back((yyvsp[0].TypeWithAttrs));
+  ;
+    break;}
+case 134:
+#line 1346 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    (yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList)->push_back(yyvsp[0].TypeWithAttrs);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 137:
-#line 1353 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList);
+  ;
+    break;}
+case 136:
+#line 1354 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList;
     TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet;
     TWA.Ty = new PATypeHolder(Type::VoidTy);
-    (yyval.TypeWithAttrsList)->push_back(TWA);
+    yyval.TypeWithAttrsList->push_back(TWA);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 138:
-#line 1360 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeWithAttrsList) = new TypeWithAttrsList;
+  ;
+    break;}
+case 137:
+#line 1361 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeWithAttrsList = new TypeWithAttrsList;
     TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet;
     TWA.Ty = new PATypeHolder(Type::VoidTy);
-    (yyval.TypeWithAttrsList)->push_back(TWA);
+    yyval.TypeWithAttrsList->push_back(TWA);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 139:
-#line 1367 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
+  ;
+    break;}
+case 138:
+#line 1368 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeWithAttrsList = new TypeWithAttrsList();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 140:
-#line 1375 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeList) = new std::list<PATypeHolder>();
-    (yyval.TypeList)->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
+  ;
+    break;}
+case 139:
+#line 1376 "/Volumes/ProjectsDisk/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 141:
-#line 1380 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
+  ;
+    break;}
+case 140:
+#line 1381 "/Volumes/ProjectsDisk/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 142:
-#line 1391 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { // Nonempty unsized arr
+  ;
+    break;}
+case 141:
+#line 1392 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ // Nonempty unsized arr
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
-    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-3].TypeVal)->get());
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
+    const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-3].TypeVal->get());
     if (ATy == 0)
       GEN_ERROR("Cannot make array constant with type: '" + 
-                     (*(yyvsp[-3].TypeVal))->getDescription() + "'!");
+                     (*yyvsp[-3].TypeVal)->getDescription() + "'!");
     const Type *ETy = ATy->getElementType();
     int NumElements = ATy->getNumElements();
 
     // Verify that we have the correct size...
-    if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
+    if (NumElements != -1 && NumElements != (int)yyvsp[-1].ConstVector->size())
       GEN_ERROR("Type mismatch: constant sized array initialized with " +
-                     utostr((yyvsp[-1].ConstVector)->size()) +  " arguments, but has size of " + 
+                     utostr(yyvsp[-1].ConstVector->size()) +  " arguments, but has size of " + 
                      itostr(NumElements) + "!");
 
     // Verify all elements are correct type!
-    for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
-      if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
+    for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
+      if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
         GEN_ERROR("Element #" + utostr(i) + " is not of type '" + 
                        ETy->getDescription() +"' as required!\nIt is of type '"+
-                       (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
+                       (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
     }
 
-    (yyval.ConstVal) = ConstantArray::get(ATy, *(yyvsp[-1].ConstVector));
-    delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
+    yyval.ConstVal = ConstantArray::get(ATy, *yyvsp[-1].ConstVector);
+    delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 143:
-#line 1419 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 142:
+#line 1420 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
-    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
+    const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-2].TypeVal->get());
     if (ATy == 0)
       GEN_ERROR("Cannot make array constant with type: '" + 
-                     (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
+                     (*yyvsp[-2].TypeVal)->getDescription() + "'!");
 
     int NumElements = ATy->getNumElements();
     if (NumElements != -1 && NumElements != 0) 
       GEN_ERROR("Type mismatch: constant sized array initialized with 0"
                      " arguments, but has size of " + itostr(NumElements) +"!");
-    (yyval.ConstVal) = ConstantArray::get(ATy, std::vector<Constant*>());
-    delete (yyvsp[-2].TypeVal);
+    yyval.ConstVal = ConstantArray::get(ATy, std::vector<Constant*>());
+    delete yyvsp[-2].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 144:
-#line 1435 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 143:
+#line 1436 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
-    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
+    const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-2].TypeVal->get());
     if (ATy == 0)
       GEN_ERROR("Cannot make array constant with type: '" + 
-                     (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
+                     (*yyvsp[-2].TypeVal)->getDescription() + "'!");
 
     int NumElements = ATy->getNumElements();
     const Type *ETy = ATy->getElementType();
-    char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
-    if (NumElements != -1 && NumElements != (EndStr-(yyvsp[0].StrVal)))
+    char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true);
+    if (NumElements != -1 && NumElements != (EndStr-yyvsp[0].StrVal))
       GEN_ERROR("Can't build string constant of size " + 
-                     itostr((int)(EndStr-(yyvsp[0].StrVal))) +
+                     itostr((int)(EndStr-yyvsp[0].StrVal)) +
                      " when array has size " + itostr(NumElements) + "!");
     std::vector<Constant*> Vals;
     if (ETy == Type::Int8Ty) {
-      for (unsigned char *C = (unsigned char *)(yyvsp[0].StrVal); 
+      for (unsigned char *C = (unsigned char *)yyvsp[0].StrVal; 
         C != (unsigned char*)EndStr; ++C)
       Vals.push_back(ConstantInt::get(ETy, *C));
     } else {
-      free((yyvsp[0].StrVal));
+      free(yyvsp[0].StrVal);
       GEN_ERROR("Cannot build string arrays of non byte sized elements!");
     }
-    free((yyvsp[0].StrVal));
-    (yyval.ConstVal) = ConstantArray::get(ATy, Vals);
-    delete (yyvsp[-2].TypeVal);
+    free(yyvsp[0].StrVal);
+    yyval.ConstVal = ConstantArray::get(ATy, Vals);
+    delete yyvsp[-2].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 145:
-#line 1464 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { // Nonempty unsized arr
+  ;
+    break;}
+case 144:
+#line 1465 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ // Nonempty unsized arr
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
-    const PackedType *PTy = dyn_cast<PackedType>((yyvsp[-3].TypeVal)->get());
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
+    const PackedType *PTy = dyn_cast<PackedType>(yyvsp[-3].TypeVal->get());
     if (PTy == 0)
       GEN_ERROR("Cannot make packed constant with type: '" + 
-                     (*(yyvsp[-3].TypeVal))->getDescription() + "'!");
+                     (*yyvsp[-3].TypeVal)->getDescription() + "'!");
     const Type *ETy = PTy->getElementType();
     int NumElements = PTy->getNumElements();
 
     // Verify that we have the correct size...
-    if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
+    if (NumElements != -1 && NumElements != (int)yyvsp[-1].ConstVector->size())
       GEN_ERROR("Type mismatch: constant sized packed initialized with " +
-                     utostr((yyvsp[-1].ConstVector)->size()) +  " arguments, but has size of " + 
+                     utostr(yyvsp[-1].ConstVector->size()) +  " arguments, but has size of " + 
                      itostr(NumElements) + "!");
 
     // Verify all elements are correct type!
-    for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
-      if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
+    for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
+      if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
         GEN_ERROR("Element #" + utostr(i) + " is not of type '" + 
            ETy->getDescription() +"' as required!\nIt is of type '"+
-           (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
+           (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
     }
 
-    (yyval.ConstVal) = ConstantPacked::get(PTy, *(yyvsp[-1].ConstVector));
-    delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
+    yyval.ConstVal = ConstantPacked::get(PTy, *yyvsp[-1].ConstVector);
+    delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 146:
-#line 1492 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal)->get());
+  ;
+    break;}
+case 145:
+#line 1493 "/Volumes/ProjectsDisk/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[-3].TypeVal))->getDescription() + "'!");
+                     (*yyvsp[-3].TypeVal)->getDescription() + "'!");
 
-    if ((yyvsp[-1].ConstVector)->size() != STy->getNumContainedTypes())
+    if (yyvsp[-1].ConstVector->size() != STy->getNumContainedTypes())
       GEN_ERROR("Illegal number of initializers for structure type!");
 
     // Check to ensure that constants are compatible with the type initializer!
-    for (unsigned i = 0, e = (yyvsp[-1].ConstVector)->size(); i != e; ++i)
-      if ((*(yyvsp[-1].ConstVector))[i]->getType() != STy->getElementType(i))
+    for (unsigned i = 0, e = yyvsp[-1].ConstVector->size(); i != e; ++i)
+      if ((*yyvsp[-1].ConstVector)[i]->getType() != STy->getElementType(i))
         GEN_ERROR("Expected type '" +
                        STy->getElementType(i)->getDescription() +
                        "' for element #" + utostr(i) +
@@ -3805,21 +3077,20 @@
     if (STy->isPacked())
       GEN_ERROR("Unpacked Initializer to packed type '" + STy->getDescription() + "'");
 
-    (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[-1].ConstVector));
-    delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
+    yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-1].ConstVector);
+    delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 147:
-#line 1517 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 146:
+#line 1518 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
-    const StructType *STy = dyn_cast<StructType>((yyvsp[-2].TypeVal)->get());
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
+    const StructType *STy = dyn_cast<StructType>(yyvsp[-2].TypeVal->get());
     if (STy == 0)
       GEN_ERROR("Cannot make struct constant with type: '" + 
-                     (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
+                     (*yyvsp[-2].TypeVal)->getDescription() + "'!");
 
     if (STy->getNumContainedTypes() != 0)
       GEN_ERROR("Illegal number of initializers for structure type!");
@@ -3828,26 +3099,25 @@
     if (STy->isPacked())
       GEN_ERROR("Unpacked Initializer to packed type '" + STy->getDescription() + "'");
 
-    (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
-    delete (yyvsp[-2].TypeVal);
+    yyval.ConstVal = ConstantStruct::get(STy, std::vector<Constant*>());
+    delete yyvsp[-2].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 148:
-#line 1536 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    const StructType *STy = dyn_cast<StructType>((yyvsp[-5].TypeVal)->get());
+  ;
+    break;}
+case 147:
+#line 1537 "/Volumes/ProjectsDisk/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[-5].TypeVal))->getDescription() + "'!");
+                     (*yyvsp[-5].TypeVal)->getDescription() + "'!");
 
-    if ((yyvsp[-2].ConstVector)->size() != STy->getNumContainedTypes())
+    if (yyvsp[-2].ConstVector->size() != STy->getNumContainedTypes())
       GEN_ERROR("Illegal number of initializers for structure type!");
 
     // Check to ensure that constants are compatible with the type initializer!
-    for (unsigned i = 0, e = (yyvsp[-2].ConstVector)->size(); i != e; ++i)
-      if ((*(yyvsp[-2].ConstVector))[i]->getType() != STy->getElementType(i))
+    for (unsigned i = 0, e = yyvsp[-2].ConstVector->size(); i != e; ++i)
+      if ((*yyvsp[-2].ConstVector)[i]->getType() != STy->getElementType(i))
         GEN_ERROR("Expected type '" +
                        STy->getElementType(i)->getDescription() +
                        "' for element #" + utostr(i) +
@@ -3857,21 +3127,20 @@
     if (!STy->isPacked())
       GEN_ERROR("Packed Initializer to unpacked type '" + STy->getDescription() + "'");
 
-    (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[-2].ConstVector));
-    delete (yyvsp[-5].TypeVal); delete (yyvsp[-2].ConstVector);
+    yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-2].ConstVector);
+    delete yyvsp[-5].TypeVal; delete yyvsp[-2].ConstVector;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 149:
-#line 1561 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 148:
+#line 1562 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
-    const StructType *STy = dyn_cast<StructType>((yyvsp[-4].TypeVal)->get());
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
+    const StructType *STy = dyn_cast<StructType>(yyvsp[-4].TypeVal->get());
     if (STy == 0)
       GEN_ERROR("Cannot make struct constant with type: '" + 
-                     (*(yyvsp[-4].TypeVal))->getDescription() + "'!");
+                     (*yyvsp[-4].TypeVal)->getDescription() + "'!");
 
     if (STy->getNumContainedTypes() != 0)
       GEN_ERROR("Illegal number of initializers for structure type!");
@@ -3880,45 +3149,42 @@
     if (!STy->isPacked())
       GEN_ERROR("Packed Initializer to unpacked type '" + STy->getDescription() + "'");
 
-    (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
-    delete (yyvsp[-4].TypeVal);
+    yyval.ConstVal = ConstantStruct::get(STy, std::vector<Constant*>());
+    delete yyvsp[-4].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 150:
-#line 1580 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 149:
+#line 1581 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
-    const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
+    const PointerType *PTy = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
     if (PTy == 0)
       GEN_ERROR("Cannot make null pointer constant with type: '" + 
-                     (*(yyvsp[-1].TypeVal))->getDescription() + "'!");
+                     (*yyvsp[-1].TypeVal)->getDescription() + "'!");
 
-    (yyval.ConstVal) = ConstantPointerNull::get(PTy);
-    delete (yyvsp[-1].TypeVal);
+    yyval.ConstVal = ConstantPointerNull::get(PTy);
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 151:
-#line 1592 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 150:
+#line 1593 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
-    (yyval.ConstVal) = UndefValue::get((yyvsp[-1].TypeVal)->get());
-    delete (yyvsp[-1].TypeVal);
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
+    yyval.ConstVal = UndefValue::get(yyvsp[-1].TypeVal->get());
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 152:
-#line 1599 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 151:
+#line 1600 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
-    const PointerType *Ty = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
+    const PointerType *Ty = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
     if (Ty == 0)
       GEN_ERROR("Global const reference must be a pointer type!");
 
@@ -3932,7 +3198,7 @@
     Function *SavedCurFn = CurFun.CurrentFunction;
     CurFun.CurrentFunction = 0;
 
-    Value *V = getValNonImprovising(Ty, (yyvsp[0].ValIDVal));
+    Value *V = getValNonImprovising(Ty, yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
 
     CurFun.CurrentFunction = SavedCurFn;
@@ -3947,16 +3213,16 @@
 
       // First check to see if the forward references value is already created!
       PerModuleInfo::GlobalRefsType::iterator I =
-        CurModule.GlobalRefs.find(std::make_pair(PT, (yyvsp[0].ValIDVal)));
+        CurModule.GlobalRefs.find(std::make_pair(PT, yyvsp[0].ValIDVal));
     
       if (I != CurModule.GlobalRefs.end()) {
         V = I->second;             // Placeholder already exists, use it...
-        (yyvsp[0].ValIDVal).destroy();
+        yyvsp[0].ValIDVal.destroy();
       } else {
         std::string Name;
-        if ((yyvsp[0].ValIDVal).Type == ValID::GlobalName)
-          Name = (yyvsp[0].ValIDVal).Name;
-        else if ((yyvsp[0].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.
@@ -3972,312 +3238,282 @@
         }
 
         // Keep track of the fact that we have a forward ref to recycle it
-        CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, (yyvsp[0].ValIDVal)), GV));
+        CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, yyvsp[0].ValIDVal), GV));
         V = GV;
       }
     }
 
-    (yyval.ConstVal) = cast<GlobalValue>(V);
-    delete (yyvsp[-1].TypeVal);            // Free the type handle
+    yyval.ConstVal = cast<GlobalValue>(V);
+    delete yyvsp[-1].TypeVal;            // Free the type handle
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 153:
-#line 1665 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 152:
+#line 1666 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
-    if ((yyvsp[-1].TypeVal)->get() != (yyvsp[0].ConstVal)->getType())
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
+    if (yyvsp[-1].TypeVal->get() != yyvsp[0].ConstVal->getType())
       GEN_ERROR("Mismatched types for constant expression: " + 
-        (*(yyvsp[-1].TypeVal))->getDescription() + " and " + (yyvsp[0].ConstVal)->getType()->getDescription());
-    (yyval.ConstVal) = (yyvsp[0].ConstVal);
-    delete (yyvsp[-1].TypeVal);
+        (*yyvsp[-1].TypeVal)->getDescription() + " and " + yyvsp[0].ConstVal->getType()->getDescription());
+    yyval.ConstVal = yyvsp[0].ConstVal;
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 154:
-#line 1675 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 153:
+#line 1676 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
-    const Type *Ty = (yyvsp[-1].TypeVal)->get();
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
+    const Type *Ty = yyvsp[-1].TypeVal->get();
     if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
       GEN_ERROR("Cannot create a null initialized value of this type!");
-    (yyval.ConstVal) = Constant::getNullValue(Ty);
-    delete (yyvsp[-1].TypeVal);
+    yyval.ConstVal = Constant::getNullValue(Ty);
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 155:
-#line 1685 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {      // integral constants
-    if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val)))
+  ;
+    break;}
+case 154:
+#line 1686 "/Volumes/ProjectsDisk/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].PrimType), (yyvsp[0].SInt64Val));
+    yyval.ConstVal = ConstantInt::get(yyvsp[-1].PrimType, yyvsp[0].SInt64Val);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 156:
-#line 1691 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {      // integral constants
-    if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val)))
+  ;
+    break;}
+case 155:
+#line 1692 "/Volumes/ProjectsDisk/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].PrimType), (yyvsp[0].UInt64Val));
+    yyval.ConstVal = ConstantInt::get(yyvsp[-1].PrimType, yyvsp[0].UInt64Val);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 157:
-#line 1697 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {                      // Boolean constants
-    assert(cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth() == 1 && "Not Bool?");
-    (yyval.ConstVal) = ConstantInt::getTrue();
+  ;
+    break;}
+case 156:
+#line 1698 "/Volumes/ProjectsDisk/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 158:
-#line 1702 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {                     // Boolean constants
-    assert(cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth() == 1 && "Not Bool?");
-    (yyval.ConstVal) = ConstantInt::getFalse();
+  ;
+    break;}
+case 157:
+#line 1703 "/Volumes/ProjectsDisk/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 159:
-#line 1707 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {                   // Float & Double constants
-    if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].FPVal)))
+  ;
+    break;}
+case 158:
+#line 1708 "/Volumes/ProjectsDisk/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].PrimType), (yyvsp[0].FPVal));
+    yyval.ConstVal = ConstantFP::get(yyvsp[-1].PrimType, yyvsp[0].FPVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 160:
-#line 1715 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 159:
+#line 1716 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
-    Constant *Val = (yyvsp[-3].ConstVal);
-    const Type *DestTy = (yyvsp[-1].TypeVal)->get();
-    if (!CastInst::castIsValid((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal), DestTy))
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
+    Constant *Val = yyvsp[-3].ConstVal;
+    const Type *DestTy = yyvsp[-1].TypeVal->get();
+    if (!CastInst::castIsValid(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy))
       GEN_ERROR("invalid cast opcode for cast from '" +
                 Val->getType()->getDescription() + "' to '" +
                 DestTy->getDescription() + "'!"); 
-    (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal), DestTy);
-    delete (yyvsp[-1].TypeVal);
-  ;}
-    break;
-
-  case 161:
-#line 1727 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!isa<PointerType>((yyvsp[-2].ConstVal)->getType()))
+    yyval.ConstVal = ConstantExpr::getCast(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy);
+    delete yyvsp[-1].TypeVal;
+  ;
+    break;}
+case 160:
+#line 1728 "/Volumes/ProjectsDisk/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[-2].ConstVal)->getType(), *(yyvsp[-1].ValueList), true);
+      GetElementPtrInst::getIndexedType(yyvsp[-2].ConstVal->getType(), *yyvsp[-1].ValueList, true);
     if (!IdxTy)
       GEN_ERROR("Index list invalid for constant getelementptr!");
 
-    std::vector<Constant*> IdxVec;
-    for (unsigned i = 0, e = (yyvsp[-1].ValueList)->size(); i != e; ++i)
-      if (Constant *C = dyn_cast<Constant>((*(yyvsp[-1].ValueList))[i]))
+    SmallVector<Constant*, 8> IdxVec;
+    for (unsigned i = 0, e = yyvsp[-1].ValueList->size(); i != e; ++i)
+      if (Constant *C = dyn_cast<Constant>((*yyvsp[-1].ValueList)[i]))
         IdxVec.push_back(C);
       else
         GEN_ERROR("Indices to constant getelementptr must be constants!");
 
-    delete (yyvsp[-1].ValueList);
+    delete yyvsp[-1].ValueList;
 
-    (yyval.ConstVal) = ConstantExpr::getGetElementPtr((yyvsp[-2].ConstVal), IdxVec);
+    yyval.ConstVal = ConstantExpr::getGetElementPtr(yyvsp[-2].ConstVal, &IdxVec[0], IdxVec.size());
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 162:
-#line 1748 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-5].ConstVal)->getType() != Type::Int1Ty)
+  ;
+    break;}
+case 161:
+#line 1749 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (yyvsp[-5].ConstVal->getType() != Type::Int1Ty)
       GEN_ERROR("Select condition must be of boolean type!");
-    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
+    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
       GEN_ERROR("Select operand types must match!");
-    (yyval.ConstVal) = ConstantExpr::getSelect((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+    yyval.ConstVal = ConstantExpr::getSelect(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 163:
-#line 1756 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
+  ;
+    break;}
+case 162:
+#line 1757 "/Volumes/ProjectsDisk/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[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
-  ;}
-    break;
-
-  case 164:
-#line 1762 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
+    yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
+  ;
+    break;}
+case 163:
+#line 1763 "/Volumes/ProjectsDisk/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].ConstVal)->getType()->isInteger()) {
-      if (!isa<PackedType>((yyvsp[-3].ConstVal)->getType()) || 
-          !cast<PackedType>((yyvsp[-3].ConstVal)->getType())->getElementType()->isInteger())
+    if (!yyvsp[-3].ConstVal->getType()->isInteger()) {
+      if (!isa<PackedType>(yyvsp[-3].ConstVal->getType()) || 
+          !cast<PackedType>(yyvsp[-3].ConstVal->getType())->getElementType()->isInteger())
         GEN_ERROR("Logical operator requires integral operands!");
     }
-    (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+    yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 165:
-#line 1773 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
+  ;
+    break;}
+case 164:
+#line 1774 "/Volumes/ProjectsDisk/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[-5].IPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
-  ;}
-    break;
-
-  case 166:
-#line 1778 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
+    yyval.ConstVal = ConstantExpr::getICmp(yyvsp[-5].IPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
+  ;
+    break;}
+case 165:
+#line 1779 "/Volumes/ProjectsDisk/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[-5].FPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
-  ;}
-    break;
-
-  case 167:
-#line 1783 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-1].ConstVal)->getType() != Type::Int8Ty)
+    yyval.ConstVal = ConstantExpr::getFCmp(yyvsp[-5].FPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
+  ;
+    break;}
+case 166:
+#line 1784 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (yyvsp[-1].ConstVal->getType() != Type::Int8Ty)
       GEN_ERROR("Shift count for shift constant must be i8 type!");
-    if (!(yyvsp[-3].ConstVal)->getType()->isInteger())
+    if (!yyvsp[-3].ConstVal->getType()->isInteger())
       GEN_ERROR("Shift constant expression requires integer operand!");
     CHECK_FOR_ERROR;
-    (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].OtherOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+    yyval.ConstVal = ConstantExpr::get(yyvsp[-5].OtherOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 168:
-#line 1792 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
+  ;
+    break;}
+case 167:
+#line 1793 "/Volumes/ProjectsDisk/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].ConstVal), (yyvsp[-1].ConstVal));
+    yyval.ConstVal = ConstantExpr::getExtractElement(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 169:
-#line 1798 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
+  ;
+    break;}
+case 168:
+#line 1799 "/Volumes/ProjectsDisk/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[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+    yyval.ConstVal = ConstantExpr::getInsertElement(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 170:
-#line 1804 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
+  ;
+    break;}
+case 169:
+#line 1805 "/Volumes/ProjectsDisk/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[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+    yyval.ConstVal = ConstantExpr::getShuffleVector(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 171:
-#line 1813 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal));
+  ;
+    break;}
+case 170:
+#line 1814 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    (yyval.ConstVector = yyvsp[-2].ConstVector)->push_back(yyvsp[0].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 172:
-#line 1817 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ConstVector) = new std::vector<Constant*>();
-    (yyval.ConstVector)->push_back((yyvsp[0].ConstVal));
+  ;
+    break;}
+case 171:
+#line 1818 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ConstVector = new std::vector<Constant*>();
+    yyval.ConstVector->push_back(yyvsp[0].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 173:
-#line 1825 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.BoolVal) = false; ;}
-    break;
-
-  case 174:
-#line 1825 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.BoolVal) = true; ;}
-    break;
-
-  case 175:
-#line 1836 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
+  ;
+    break;}
+case 172:
+#line 1826 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.BoolVal = false; ;
+    break;}
+case 173:
+#line 1826 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.BoolVal = true; ;
+    break;}
+case 174:
+#line 1837 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ModuleVal = ParserResult = CurModule.CurrentModule;
     CurModule.ModuleDone();
     CHECK_FOR_ERROR;
-  ;}
-    break;
-
-  case 176:
-#line 1841 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
+  ;
+    break;}
+case 175:
+#line 1842 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ModuleVal = ParserResult = CurModule.CurrentModule;
     CurModule.ModuleDone();
     CHECK_FOR_ERROR;
-  ;}
-    break;
-
-  case 179:
-#line 1854 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { CurFun.isDeclare = false; ;}
-    break;
-
-  case 180:
-#line 1854 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 178:
+#line 1855 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ CurFun.isDeclare = false; ;
+    break;}
+case 179:
+#line 1855 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CurFun.FunctionDone();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 181:
-#line 1858 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { CurFun.isDeclare = true; ;}
-    break;
-
-  case 182:
-#line 1858 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 180:
+#line 1859 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ CurFun.isDeclare = true; ;
+    break;}
+case 181:
+#line 1859 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 183:
-#line 1861 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 182:
+#line 1862 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 184:
-#line 1864 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 183:
+#line 1865 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     // Emit an error if there are any unresolved types left.
     if (!CurModule.LateResolveTypes.empty()) {
       const ValID &DID = CurModule.LateResolveTypes.begin()->first;
@@ -4288,14 +3524,13 @@
       }
     }
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 185:
-#line 1876 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 184:
+#line 1877 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
     // Eagerly resolve types.  This is not an optimization, this is a
     // requirement that is due to the fact that we could have this:
     //
@@ -4305,248 +3540,226 @@
     // If types are not resolved eagerly, then the two types will not be
     // determined to be the same type!
     //
-    ResolveTypeTo((yyvsp[-2].StrVal), *(yyvsp[0].TypeVal));
+    ResolveTypeTo(yyvsp[-2].StrVal, *yyvsp[0].TypeVal);
 
-    if (!setTypeName(*(yyvsp[0].TypeVal), (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) {
+    if (!setTypeName(*yyvsp[0].TypeVal, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) {
       CHECK_FOR_ERROR
       // If this is a named type that is not a redefinition, add it to the slot
       // table.
-      CurModule.Types.push_back(*(yyvsp[0].TypeVal));
+      CurModule.Types.push_back(*yyvsp[0].TypeVal);
     }
 
-    delete (yyvsp[0].TypeVal);
+    delete yyvsp[0].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
+  ;
+    break;}
+case 185:
+#line 1901 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    ResolveTypeTo(yyvsp[-2].StrVal, yyvsp[0].PrimType);
 
-  case 186:
-#line 1900 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    ResolveTypeTo((yyvsp[-2].StrVal), (yyvsp[0].PrimType));
-
-    if (!setTypeName((yyvsp[0].PrimType), (yyvsp[-2].StrVal)) && !(yyvsp[-2].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[0].PrimType));
+      CurModule.Types.push_back(yyvsp[0].PrimType);
     }
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 187:
-#line 1911 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { 
+  ;
+    break;}
+case 186:
+#line 1912 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ 
     /* "Externally Visible" Linkage */
-    if ((yyvsp[0].ConstVal) == 0) 
+    if (yyvsp[0].ConstVal == 0) 
       GEN_ERROR("Global value initializer is not a constant!");
-    CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalLinkage,
-                                (yyvsp[-2].Visibility), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal));
+    CurGV = ParseGlobalVariable(yyvsp[-3].StrVal, GlobalValue::ExternalLinkage,
+                                yyvsp[-2].Visibility, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 188:
-#line 1918 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 187:
+#line 1919 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CurGV = 0;
-  ;}
-    break;
-
-  case 189:
-#line 1921 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[0].ConstVal) == 0) 
+  ;
+    break;}
+case 188:
+#line 1922 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (yyvsp[0].ConstVal == 0) 
       GEN_ERROR("Global value initializer is not a constant!");
-    CurGV = ParseGlobalVariable((yyvsp[-4].StrVal), (yyvsp[-3].Linkage), (yyvsp[-2].Visibility), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal));
+    CurGV = ParseGlobalVariable(yyvsp[-4].StrVal, yyvsp[-3].Linkage, yyvsp[-2].Visibility, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 190:
-#line 1926 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 189:
+#line 1927 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CurGV = 0;
-  ;}
-    break;
-
-  case 191:
-#line 1929 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 190:
+#line 1930 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
-    CurGV = ParseGlobalVariable((yyvsp[-4].StrVal), (yyvsp[-3].Linkage), (yyvsp[-2].Visibility), (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
+    CurGV = ParseGlobalVariable(yyvsp[-4].StrVal, yyvsp[-3].Linkage, yyvsp[-2].Visibility, yyvsp[-1].BoolVal, *yyvsp[0].TypeVal, 0);
     CHECK_FOR_ERROR
-    delete (yyvsp[0].TypeVal);
-  ;}
-    break;
-
-  case 192:
-#line 1935 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+    delete yyvsp[0].TypeVal;
+  ;
+    break;}
+case 191:
+#line 1936 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CurGV = 0;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 193:
-#line 1939 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { 
+  ;
+    break;}
+case 192:
+#line 1940 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ 
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 194:
-#line 1942 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 193:
+#line 1943 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 195:
-#line 1948 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 194:
+#line 1949 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
   const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
-  char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
-  std::string NewAsm((yyvsp[0].StrVal), EndStr);
-  free((yyvsp[0].StrVal));
+  char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true);
+  std::string NewAsm(yyvsp[0].StrVal, EndStr);
+  free(yyvsp[0].StrVal);
 
   if (AsmSoFar.empty())
     CurModule.CurrentModule->setModuleInlineAsm(NewAsm);
   else
     CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm);
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 196:
-#line 1961 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal));
-    free((yyvsp[0].StrVal));
-  ;}
-    break;
-
-  case 197:
-#line 1965 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    CurModule.CurrentModule->setDataLayout((yyvsp[0].StrVal));
-    free((yyvsp[0].StrVal));
-  ;}
-    break;
-
-  case 199:
-#line 1972 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-          CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
-          free((yyvsp[0].StrVal));
+;
+    break;}
+case 195:
+#line 1962 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    CurModule.CurrentModule->setTargetTriple(yyvsp[0].StrVal);
+    free(yyvsp[0].StrVal);
+  ;
+    break;}
+case 196:
+#line 1966 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    CurModule.CurrentModule->setDataLayout(yyvsp[0].StrVal);
+    free(yyvsp[0].StrVal);
+  ;
+    break;}
+case 198:
+#line 1973 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+          CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
+          free(yyvsp[0].StrVal);
           CHECK_FOR_ERROR
-        ;}
-    break;
-
-  case 200:
-#line 1977 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-          CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
-          free((yyvsp[0].StrVal));
+        ;
+    break;}
+case 199:
+#line 1978 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+          CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
+          free(yyvsp[0].StrVal);
           CHECK_FOR_ERROR
-        ;}
-    break;
-
-  case 201:
-#line 1982 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+        ;
+    break;}
+case 200:
+#line 1983 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
           CHECK_FOR_ERROR
-        ;}
-    break;
-
-  case 202:
-#line 1991 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+        ;
+    break;}
+case 201:
+#line 1992 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
-    if (*(yyvsp[-2].TypeVal) == Type::VoidTy)
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
+    if (*yyvsp[-2].TypeVal == Type::VoidTy)
       GEN_ERROR("void typed arguments are invalid!");
-    ArgListEntry E; E.Attrs = (yyvsp[-1].ParamAttrs); E.Ty = (yyvsp[-2].TypeVal); E.Name = (yyvsp[0].StrVal);
-    (yyval.ArgList) = (yyvsp[-4].ArgList);
-    (yyvsp[-4].ArgList)->push_back(E);
+    ArgListEntry E; E.Attrs = yyvsp[-1].ParamAttrs; E.Ty = yyvsp[-2].TypeVal; E.Name = yyvsp[0].StrVal;
+    yyval.ArgList = yyvsp[-4].ArgList;
+    yyvsp[-4].ArgList->push_back(E);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 203:
-#line 2001 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 202:
+#line 2002 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
-    if (*(yyvsp[-2].TypeVal) == Type::VoidTy)
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
+    if (*yyvsp[-2].TypeVal == Type::VoidTy)
       GEN_ERROR("void typed arguments are invalid!");
-    ArgListEntry E; E.Attrs = (yyvsp[-1].ParamAttrs); E.Ty = (yyvsp[-2].TypeVal); E.Name = (yyvsp[0].StrVal);
-    (yyval.ArgList) = new ArgListType;
-    (yyval.ArgList)->push_back(E);
+    ArgListEntry E; E.Attrs = yyvsp[-1].ParamAttrs; E.Ty = yyvsp[-2].TypeVal; E.Name = yyvsp[0].StrVal;
+    yyval.ArgList = new ArgListType;
+    yyval.ArgList->push_back(E);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 204:
-#line 2012 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ArgList) = (yyvsp[0].ArgList);
+  ;
+    break;}
+case 203:
+#line 2013 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ArgList = yyvsp[0].ArgList;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 205:
-#line 2016 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ArgList) = (yyvsp[-2].ArgList);
+  ;
+    break;}
+case 204:
+#line 2017 "/Volumes/ProjectsDisk/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 = FunctionType::NoAttributeSet;
-    (yyval.ArgList)->push_back(E);
+    yyval.ArgList->push_back(E);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 206:
-#line 2025 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ArgList) = new ArgListType;
+  ;
+    break;}
+case 205:
+#line 2026 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ArgList = new ArgListType;
     struct ArgListEntry E;
     E.Ty = new PATypeHolder(Type::VoidTy);
     E.Name = 0;
     E.Attrs = FunctionType::NoAttributeSet;
-    (yyval.ArgList)->push_back(E);
+    yyval.ArgList->push_back(E);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 207:
-#line 2034 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ArgList) = 0;
+  ;
+    break;}
+case 206:
+#line 2035 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ArgList = 0;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 208:
-#line 2040 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-  UnEscapeLexed((yyvsp[-6].StrVal));
-  std::string FunctionName((yyvsp[-6].StrVal));
-  free((yyvsp[-6].StrVal));  // Free strdup'd memory!
+  ;
+    break;}
+case 207:
+#line 2041 "/Volumes/ProjectsDisk/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[-7].TypeVal)))
-    GEN_ERROR("Reference to abstract result: "+ (yyvsp[-7].TypeVal)->get()->getDescription());
+  if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(yyvsp[-7].TypeVal))
+    GEN_ERROR("Reference to abstract result: "+ yyvsp[-7].TypeVal->get()->getDescription());
 
   std::vector<const Type*> ParamTypeList;
   std::vector<FunctionType::ParameterAttributes> ParamAttrs;
-  ParamAttrs.push_back((yyvsp[-2].ParamAttrs));
-  if ((yyvsp[-4].ArgList)) {   // If there are arguments...
-    for (ArgListType::iterator I = (yyvsp[-4].ArgList)->begin(); I != (yyvsp[-4].ArgList)->end(); ++I) {
+  ParamAttrs.push_back(yyvsp[-2].ParamAttrs);
+  if (yyvsp[-4].ArgList) {   // If there are arguments...
+    for (ArgListType::iterator I = yyvsp[-4].ArgList->begin(); I != yyvsp[-4].ArgList->end(); ++I) {
       const Type* Ty = I->Ty->get();
       if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(I->Ty))
         GEN_ERROR("Reference to abstract argument: " + Ty->getDescription());
@@ -4559,10 +3772,10 @@
   bool isVarArg = ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy;
   if (isVarArg) ParamTypeList.pop_back();
 
-  FunctionType *FT = FunctionType::get(*(yyvsp[-7].TypeVal), ParamTypeList, isVarArg,
+  FunctionType *FT = FunctionType::get(*yyvsp[-7].TypeVal, ParamTypeList, isVarArg,
                                        ParamAttrs);
   const PointerType *PFT = PointerType::get(FT);
-  delete (yyvsp[-7].TypeVal);
+  delete yyvsp[-7].TypeVal;
 
   ValID ID;
   if (!FunctionName.empty()) {
@@ -4607,24 +3820,24 @@
     Fn->setLinkage(CurFun.Linkage);
     Fn->setVisibility(CurFun.Visibility);
   }
-  Fn->setCallingConv((yyvsp[-8].UIntVal));
-  Fn->setAlignment((yyvsp[0].UIntVal));
-  if ((yyvsp[-1].StrVal)) {
-    Fn->setSection((yyvsp[-1].StrVal));
-    free((yyvsp[-1].StrVal));
+  Fn->setCallingConv(yyvsp[-8].UIntVal);
+  Fn->setAlignment(yyvsp[0].UIntVal);
+  if (yyvsp[-1].StrVal) {
+    Fn->setSection(yyvsp[-1].StrVal);
+    free(yyvsp[-1].StrVal);
   }
 
   // Add all of the arguments we parsed to the function...
-  if ((yyvsp[-4].ArgList)) {                     // Is null if empty...
+  if (yyvsp[-4].ArgList) {                     // Is null if empty...
     if (isVarArg) {  // Nuke the last entry
-      assert((yyvsp[-4].ArgList)->back().Ty->get() == Type::VoidTy && (yyvsp[-4].ArgList)->back().Name == 0&&
+      assert(yyvsp[-4].ArgList->back().Ty->get() == Type::VoidTy && yyvsp[-4].ArgList->back().Name == 0&&
              "Not a varargs marker!");
-      delete (yyvsp[-4].ArgList)->back().Ty;
-      (yyvsp[-4].ArgList)->pop_back();  // Delete the last entry
+      delete yyvsp[-4].ArgList->back().Ty;
+      yyvsp[-4].ArgList->pop_back();  // Delete the last entry
     }
     Function::arg_iterator ArgIt = Fn->arg_begin();
     unsigned Idx = 1;
-    for (ArgListType::iterator I = (yyvsp[-4].ArgList)->begin(); I != (yyvsp[-4].ArgList)->end(); ++I, ++ArgIt) {
+    for (ArgListType::iterator I = yyvsp[-4].ArgList->begin(); I != yyvsp[-4].ArgList->end(); ++I, ++ArgIt) {
       delete I->Ty;                          // Delete the typeholder...
       setValueName(ArgIt, I->Name);           // Insert arg into symtab...
       CHECK_FOR_ERROR
@@ -4632,128 +3845,114 @@
       Idx++;
     }
 
-    delete (yyvsp[-4].ArgList);                     // We're now done with the argument list
+    delete yyvsp[-4].ArgList;                     // We're now done with the argument list
   }
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 211:
-#line 2147 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.FunctionVal) = CurFun.CurrentFunction;
+;
+    break;}
+case 210:
+#line 2148 "/Volumes/ProjectsDisk/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[-3].Linkage));
-  (yyval.FunctionVal)->setVisibility((yyvsp[-2].Visibility));
-;}
-    break;
-
-  case 214:
-#line 2158 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
+  yyval.FunctionVal->setLinkage(yyvsp[-3].Linkage);
+  yyval.FunctionVal->setVisibility(yyvsp[-2].Visibility);
+;
+    break;}
+case 213:
+#line 2159 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+  yyval.FunctionVal = yyvsp[-1].FunctionVal;
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 215:
-#line 2163 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    CurFun.CurrentFunction->setLinkage((yyvsp[-2].Linkage));
-    CurFun.CurrentFunction->setVisibility((yyvsp[-1].Visibility));
-    (yyval.FunctionVal) = CurFun.CurrentFunction;
+;
+    break;}
+case 214:
+#line 2164 "/Volumes/ProjectsDisk/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 216:
-#line 2175 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = false;
+  ;
+    break;}
+case 215:
+#line 2176 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = false;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 217:
-#line 2179 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = true;
+  ;
+    break;}
+case 216:
+#line 2180 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = true;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 218:
-#line 2184 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {    // A reference to a direct constant
-    (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val));
+  ;
+    break;}
+case 217:
+#line 2185 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{    // A reference to a direct constant
+    yyval.ValIDVal = ValID::create(yyvsp[0].SInt64Val);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 219:
-#line 2188 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val));
+  ;
+    break;}
+case 218:
+#line 2189 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::create(yyvsp[0].UInt64Val);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 220:
-#line 2192 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {                     // Perhaps it's an FP constant?
-    (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal));
+  ;
+    break;}
+case 219:
+#line 2193 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                     // Perhaps it's an FP constant?
+    yyval.ValIDVal = ValID::create(yyvsp[0].FPVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 221:
-#line 2196 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::create(ConstantInt::getTrue());
+  ;
+    break;}
+case 220:
+#line 2197 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::create(ConstantInt::getTrue());
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 222:
-#line 2200 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::create(ConstantInt::getFalse());
+  ;
+    break;}
+case 221:
+#line 2201 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::create(ConstantInt::getFalse());
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 223:
-#line 2204 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::createNull();
+  ;
+    break;}
+case 222:
+#line 2205 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::createNull();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 224:
-#line 2208 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::createUndef();
+  ;
+    break;}
+case 223:
+#line 2209 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::createUndef();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 225:
-#line 2212 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {     // A vector zero constant.
-    (yyval.ValIDVal) = ValID::createZeroInit();
+  ;
+    break;}
+case 224:
+#line 2213 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{     // A vector zero constant.
+    yyval.ValIDVal = ValID::createZeroInit();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 226:
-#line 2216 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { // Nonempty unsized packed vector
-    const Type *ETy = (*(yyvsp[-1].ConstVector))[0]->getType();
-    int NumElements = (yyvsp[-1].ConstVector)->size(); 
+  ;
+    break;}
+case 225:
+#line 2217 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ // Nonempty unsized packed vector
+    const Type *ETy = (*yyvsp[-1].ConstVector)[0]->getType();
+    int NumElements = yyvsp[-1].ConstVector->size(); 
     
     PackedType* pt = PackedType::get(ETy, NumElements);
     PATypeHolder* PTy = new PATypeHolder(
@@ -4765,131 +3964,119 @@
                                          );
     
     // Verify all elements are correct type!
-    for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
-      if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
+    for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
+      if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
         GEN_ERROR("Element #" + utostr(i) + " is not of type '" + 
                      ETy->getDescription() +"' as required!\nIt is of type '" +
-                     (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
+                     (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
     }
 
-    (yyval.ValIDVal) = ValID::create(ConstantPacked::get(pt, *(yyvsp[-1].ConstVector)));
-    delete PTy; delete (yyvsp[-1].ConstVector);
+    yyval.ValIDVal = ValID::create(ConstantPacked::get(pt, *yyvsp[-1].ConstVector));
+    delete PTy; delete yyvsp[-1].ConstVector;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 227:
-#line 2241 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal));
+  ;
+    break;}
+case 226:
+#line 2242 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::create(yyvsp[0].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 228:
-#line 2245 "/proj/llvm/llvm-1/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));
+  ;
+    break;}
+case 227:
+#line 2246 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    char *End = UnEscapeLexed(yyvsp[-2].StrVal, true);
+    std::string AsmStr = std::string(yyvsp[-2].StrVal, End);
+    End = UnEscapeLexed(yyvsp[0].StrVal, true);
+    std::string Constraints = std::string(yyvsp[0].StrVal, End);
+    yyval.ValIDVal = ValID::createInlineAsm(AsmStr, Constraints, yyvsp[-3].BoolVal);
+    free(yyvsp[-2].StrVal);
+    free(yyvsp[0].StrVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 229:
-#line 2259 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {  // Is it an integer reference...?
-    (yyval.ValIDVal) = ValID::createLocalID((yyvsp[0].UIntVal));
+  ;
+    break;}
+case 228:
+#line 2260 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{  // Is it an integer reference...?
+    yyval.ValIDVal = ValID::createLocalID(yyvsp[0].UIntVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 230:
-#line 2263 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::createGlobalID((yyvsp[0].UIntVal));
+  ;
+    break;}
+case 229:
+#line 2264 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::createGlobalID(yyvsp[0].UIntVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 231:
-#line 2267 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {                   // Is it a named reference...?
-    (yyval.ValIDVal) = ValID::createLocalName((yyvsp[0].StrVal));
+  ;
+    break;}
+case 230:
+#line 2268 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                   // Is it a named reference...?
+    yyval.ValIDVal = ValID::createLocalName(yyvsp[0].StrVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 232:
-#line 2271 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {                   // Is it a named reference...?
-    (yyval.ValIDVal) = ValID::createGlobalName((yyvsp[0].StrVal));
+  ;
+    break;}
+case 231:
+#line 2272 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                   // Is it a named reference...?
+    yyval.ValIDVal = ValID::createGlobalName(yyvsp[0].StrVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 235:
-#line 2283 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 234:
+#line 2284 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
-    (yyval.ValueVal) = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal)); 
-    delete (yyvsp[-1].TypeVal);
+      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 236:
-#line 2292 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
+  ;
+    break;}
+case 235:
+#line 2293 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.FunctionVal = yyvsp[-1].FunctionVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 237:
-#line 2296 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { // Do not allow functions with 0 basic blocks   
-    (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
+  ;
+    break;}
+case 236:
+#line 2297 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ // Do not allow functions with 0 basic blocks   
+    yyval.FunctionVal = yyvsp[-1].FunctionVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 238:
-#line 2305 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    setValueName((yyvsp[0].TermInstVal), (yyvsp[-1].StrVal));
+  ;
+    break;}
+case 237:
+#line 2306 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    setValueName(yyvsp[0].TermInstVal, yyvsp[-1].StrVal);
     CHECK_FOR_ERROR
-    InsertValue((yyvsp[0].TermInstVal));
+    InsertValue(yyvsp[0].TermInstVal);
 
-    (yyvsp[-2].BasicBlockVal)->getInstList().push_back((yyvsp[0].TermInstVal));
-    InsertValue((yyvsp[-2].BasicBlockVal));
-    (yyval.BasicBlockVal) = (yyvsp[-2].BasicBlockVal);
+    yyvsp[-2].BasicBlockVal->getInstList().push_back(yyvsp[0].TermInstVal);
+    InsertValue(yyvsp[-2].BasicBlockVal);
+    yyval.BasicBlockVal = yyvsp[-2].BasicBlockVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 239:
-#line 2316 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (CastInst *CI1 = dyn_cast<CastInst>((yyvsp[0].InstVal)))
+  ;
+    break;}
+case 238:
+#line 2317 "/Volumes/ProjectsDisk/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].BasicBlockVal)->getInstList().push_back(CI2);
-    (yyvsp[-1].BasicBlockVal)->getInstList().push_back((yyvsp[0].InstVal));
-    (yyval.BasicBlockVal) = (yyvsp[-1].BasicBlockVal);
+          yyvsp[-1].BasicBlockVal->getInstList().push_back(CI2);
+    yyvsp[-1].BasicBlockVal->getInstList().push_back(yyvsp[0].InstVal);
+    yyval.BasicBlockVal = yyvsp[-1].BasicBlockVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 240:
-#line 2325 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BasicBlockVal) = getBBVal(ValID::createLocalID(CurFun.NextBBNum++), true);
+  ;
+    break;}
+case 239:
+#line 2326 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BasicBlockVal = getBBVal(ValID::createLocalID(CurFun.NextBBNum++), true);
     CHECK_FOR_ERROR
 
     // Make sure to move the basic block to the correct location in the
@@ -4897,15 +4084,14 @@
     // referenced.
     Function::BasicBlockListType &BBL = 
       CurFun.CurrentFunction->getBasicBlockList();
-    BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
+    BBL.splice(BBL.end(), BBL, yyval.BasicBlockVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 241:
-#line 2337 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BasicBlockVal) = getBBVal(ValID::createLocalName((yyvsp[0].StrVal)), true);
+  ;
+    break;}
+case 240:
+#line 2338 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BasicBlockVal = getBBVal(ValID::createLocalName(yyvsp[0].StrVal), true);
     CHECK_FOR_ERROR
 
     // Make sure to move the basic block to the correct location in the
@@ -4913,100 +4099,93 @@
     // referenced.
     Function::BasicBlockListType &BBL = 
       CurFun.CurrentFunction->getBasicBlockList();
-    BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
+    BBL.splice(BBL.end(), BBL, yyval.BasicBlockVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
+  ;
+    break;}
+case 241:
+#line 2351 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{              // Return with a result...
+    yyval.TermInstVal = new ReturnInst(yyvsp[0].ValueVal);
+    CHECK_FOR_ERROR
+  ;
+    break;}
+case 242:
+#line 2355 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                                       // Return with no result...
+    yyval.TermInstVal = new ReturnInst();
+    CHECK_FOR_ERROR
+  ;
+    break;}
+case 243:
+#line 2359 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                         // Unconditional Branch...
+    BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
+    CHECK_FOR_ERROR
+    yyval.TermInstVal = new BranchInst(tmpBB);
+  ;
+    break;}
+case 244:
+#line 2364 "/Volumes/ProjectsDisk/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 245:
+#line 2374 "/Volumes/ProjectsDisk/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 242:
-#line 2350 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {              // Return with a result...
-    (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal));
-    CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 243:
-#line 2354 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {                                       // Return with no result...
-    (yyval.TermInstVal) = new ReturnInst();
-    CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 244:
-#line 2358 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {                         // Unconditional Branch...
-    BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
-    CHECK_FOR_ERROR
-    (yyval.TermInstVal) = new BranchInst(tmpBB);
-  ;}
-    break;
-
-  case 245:
-#line 2363 "/proj/llvm/llvm-1/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 246:
-#line 2373 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    Value* tmpVal = getVal((yyvsp[-7].PrimType), (yyvsp[-6].ValIDVal));
-    CHECK_FOR_ERROR
-    BasicBlock* tmpBB = getBBVal((yyvsp[-3].ValIDVal));
-    CHECK_FOR_ERROR
-    SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[-1].JumpTable)->size());
-    (yyval.TermInstVal) = S;
-
-    std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = (yyvsp[-1].JumpTable)->begin(),
-      E = (yyvsp[-1].JumpTable)->end();
+    std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = yyvsp[-1].JumpTable->begin(),
+      E = yyvsp[-1].JumpTable->end();
     for (; I != E; ++I) {
       if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
           S->addCase(CI, I->second);
       else
         GEN_ERROR("Switch case is constant, but not a simple integer!");
     }
-    delete (yyvsp[-1].JumpTable);
+    delete yyvsp[-1].JumpTable;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 247:
-#line 2392 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    Value* tmpVal = getVal((yyvsp[-6].PrimType), (yyvsp[-5].ValIDVal));
+  ;
+    break;}
+case 246:
+#line 2393 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    Value* tmpVal = getVal(yyvsp[-6].PrimType, yyvsp[-5].ValIDVal);
     CHECK_FOR_ERROR
-    BasicBlock* tmpBB = getBBVal((yyvsp[-2].ValIDVal));
+    BasicBlock* tmpBB = getBBVal(yyvsp[-2].ValIDVal);
     CHECK_FOR_ERROR
     SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
-    (yyval.TermInstVal) = S;
+    yyval.TermInstVal = S;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 248:
-#line 2402 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 247:
+#line 2403 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
 
     // Handle the short syntax
     const PointerType *PFTy = 0;
     const FunctionType *Ty = 0;
-    if (!(PFTy = dyn_cast<PointerType>((yyvsp[-11].TypeVal)->get())) ||
+    if (!(PFTy = dyn_cast<PointerType>(yyvsp[-11].TypeVal->get())) ||
         !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
       // Pull out the types of all of the arguments...
       std::vector<const Type*> ParamTypes;
       FunctionType::ParamAttrsList ParamAttrs;
-      ParamAttrs.push_back((yyvsp[-6].ParamAttrs));
-      for (ValueRefList::iterator I = (yyvsp[-8].ValueRefList)->begin(), E = (yyvsp[-8].ValueRefList)->end(); I != E; ++I) {
+      ParamAttrs.push_back(yyvsp[-6].ParamAttrs);
+      for (ValueRefList::iterator I = yyvsp[-8].ValueRefList->begin(), E = yyvsp[-8].ValueRefList->end(); I != E; ++I) {
         const Type *Ty = I->Val->getType();
         if (Ty == Type::VoidTy)
           GEN_ERROR("Short call syntax cannot be used with varargs");
@@ -5014,20 +4193,20 @@
         ParamAttrs.push_back(I->Attrs);
       }
 
-      Ty = FunctionType::get((yyvsp[-11].TypeVal)->get(), ParamTypes, false, ParamAttrs);
+      Ty = FunctionType::get(yyvsp[-11].TypeVal->get(), ParamTypes, false, ParamAttrs);
       PFTy = PointerType::get(Ty);
     }
 
-    Value *V = getVal(PFTy, (yyvsp[-10].ValIDVal));   // Get the function we're calling...
+    Value *V = getVal(PFTy, yyvsp[-10].ValIDVal);   // Get the function we're calling...
     CHECK_FOR_ERROR
-    BasicBlock *Normal = getBBVal((yyvsp[-3].ValIDVal));
+    BasicBlock *Normal = getBBVal(yyvsp[-3].ValIDVal);
     CHECK_FOR_ERROR
-    BasicBlock *Except = getBBVal((yyvsp[0].ValIDVal));
+    BasicBlock *Except = getBBVal(yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
 
     // Check the arguments
     ValueList Args;
-    if ((yyvsp[-8].ValueRefList)->empty()) {                                   // Has no arguments?
+    if (yyvsp[-8].ValueRefList->empty()) {                                   // Has no arguments?
       // Make sure no arguments is a good thing!
       if (Ty->getNumParams() != 0)
         GEN_ERROR("No arguments passed to a function that "
@@ -5037,7 +4216,7 @@
       // correctly!
       FunctionType::param_iterator I = Ty->param_begin();
       FunctionType::param_iterator E = Ty->param_end();
-      ValueRefList::iterator ArgI = (yyvsp[-8].ValueRefList)->begin(), ArgE = (yyvsp[-8].ValueRefList)->end();
+      ValueRefList::iterator ArgI = yyvsp[-8].ValueRefList->begin(), ArgE = yyvsp[-8].ValueRefList->end();
 
       for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
         if (ArgI->Val->getType() != *I)
@@ -5056,353 +4235,326 @@
 
     // Create the InvokeInst
     InvokeInst *II = new InvokeInst(V, Normal, Except, Args);
-    II->setCallingConv((yyvsp[-12].UIntVal));
-    (yyval.TermInstVal) = II;
-    delete (yyvsp[-8].ValueRefList);
+    II->setCallingConv(yyvsp[-12].UIntVal);
+    yyval.TermInstVal = II;
+    delete yyvsp[-8].ValueRefList;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 249:
-#line 2468 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TermInstVal) = new UnwindInst();
+  ;
+    break;}
+case 248:
+#line 2469 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TermInstVal = new UnwindInst();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 250:
-#line 2472 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TermInstVal) = new UnreachableInst();
+  ;
+    break;}
+case 249:
+#line 2473 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TermInstVal = new UnreachableInst();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 251:
-#line 2479 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.JumpTable) = (yyvsp[-5].JumpTable);
-    Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
+  ;
+    break;}
+case 250:
+#line 2480 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.JumpTable = yyvsp[-5].JumpTable;
+    Constant *V = cast<Constant>(getValNonImprovising(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal));
     CHECK_FOR_ERROR
     if (V == 0)
       GEN_ERROR("May only switch on a constant pool value!");
 
-    BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
+    BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
-  ;}
-    break;
-
-  case 252:
-#line 2490 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
-    Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
+    yyval.JumpTable->push_back(std::make_pair(V, tmpBB));
+  ;
+    break;}
+case 251:
+#line 2491 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.JumpTable = new std::vector<std::pair<Constant*, BasicBlock*> >();
+    Constant *V = cast<Constant>(getValNonImprovising(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal));
     CHECK_FOR_ERROR
 
     if (V == 0)
       GEN_ERROR("May only switch on a constant pool value!");
 
-    BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
+    BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB)); 
-  ;}
-    break;
-
-  case 253:
-#line 2503 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+    yyval.JumpTable->push_back(std::make_pair(V, tmpBB)); 
+  ;
+    break;}
+case 252:
+#line 2504 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
   // Is this definition named?? if so, assign the name...
-  setValueName((yyvsp[0].InstVal), (yyvsp[-1].StrVal));
+  setValueName(yyvsp[0].InstVal, yyvsp[-1].StrVal);
   CHECK_FOR_ERROR
-  InsertValue((yyvsp[0].InstVal));
-  (yyval.InstVal) = (yyvsp[0].InstVal);
+  InsertValue(yyvsp[0].InstVal);
+  yyval.InstVal = yyvsp[0].InstVal;
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 254:
-#line 2512 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {    // Used for PHI nodes
+;
+    break;}
+case 253:
+#line 2513 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{    // Used for PHI nodes
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-5].TypeVal))->getDescription());
-    (yyval.PHIList) = new std::list<std::pair<Value*, BasicBlock*> >();
-    Value* tmpVal = getVal(*(yyvsp[-5].TypeVal), (yyvsp[-3].ValIDVal));
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-5].TypeVal)->getDescription());
+    yyval.PHIList = new std::list<std::pair<Value*, BasicBlock*> >();
+    Value* tmpVal = getVal(*yyvsp[-5].TypeVal, yyvsp[-3].ValIDVal);
     CHECK_FOR_ERROR
-    BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
+    BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
-    delete (yyvsp[-5].TypeVal);
-  ;}
-    break;
-
-  case 255:
-#line 2523 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.PHIList) = (yyvsp[-6].PHIList);
-    Value* tmpVal = getVal((yyvsp[-6].PHIList)->front().first->getType(), (yyvsp[-3].ValIDVal));
+    yyval.PHIList->push_back(std::make_pair(tmpVal, tmpBB));
+    delete yyvsp[-5].TypeVal;
+  ;
+    break;}
+case 254:
+#line 2524 "/Volumes/ProjectsDisk/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[-1].ValIDVal));
+    BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal);
     CHECK_FOR_ERROR
-    (yyvsp[-6].PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
-  ;}
-    break;
-
-  case 256:
-#line 2533 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {    
+    yyvsp[-6].PHIList->push_back(std::make_pair(tmpVal, tmpBB));
+  ;
+    break;}
+case 255:
+#line 2534 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{    
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
     // Used for call and invoke instructions
-    (yyval.ValueRefList) = new ValueRefList();
-    ValueRefListEntry E; E.Attrs = (yyvsp[0].ParamAttrs); E.Val = getVal((yyvsp[-2].TypeVal)->get(), (yyvsp[-1].ValIDVal));
-    (yyval.ValueRefList)->push_back(E);
-  ;}
-    break;
-
-  case 257:
-#line 2541 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+    yyval.ValueRefList = new ValueRefList();
+    ValueRefListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-2].TypeVal->get(), yyvsp[-1].ValIDVal);
+    yyval.ValueRefList->push_back(E);
+  ;
+    break;}
+case 256:
+#line 2542 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
-    (yyval.ValueRefList) = (yyvsp[-4].ValueRefList);
-    ValueRefListEntry E; E.Attrs = (yyvsp[0].ParamAttrs); E.Val = getVal((yyvsp[-2].TypeVal)->get(), (yyvsp[-1].ValIDVal));
-    (yyval.ValueRefList)->push_back(E);
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
+    yyval.ValueRefList = yyvsp[-4].ValueRefList;
+    ValueRefListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-2].TypeVal->get(), yyvsp[-1].ValIDVal);
+    yyval.ValueRefList->push_back(E);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 258:
-#line 2549 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ValueRefList) = new ValueRefList(); ;}
-    break;
-
-  case 259:
-#line 2552 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ValueList) = new std::vector<Value*>(); ;}
-    break;
-
-  case 260:
-#line 2553 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValueList) = (yyvsp[-2].ValueList);
-    (yyval.ValueList)->push_back((yyvsp[0].ValueVal));
+  ;
+    break;}
+case 257:
+#line 2550 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ValueRefList = new ValueRefList(); ;
+    break;}
+case 258:
+#line 2553 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ValueList = new std::vector<Value*>(); ;
+    break;}
+case 259:
+#line 2554 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValueList = yyvsp[-2].ValueList;
+    yyval.ValueList->push_back(yyvsp[0].ValueVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 261:
-#line 2560 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = true;
+  ;
+    break;}
+case 260:
+#line 2561 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = true;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 262:
-#line 2564 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = false;
+  ;
+    break;}
+case 261:
+#line 2565 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = false;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 263:
-#line 2569 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 262:
+#line 2570 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
-    if (!(*(yyvsp[-3].TypeVal))->isInteger() && !(*(yyvsp[-3].TypeVal))->isFloatingPoint() && 
-        !isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
+    if (!(*yyvsp[-3].TypeVal)->isInteger() && !(*yyvsp[-3].TypeVal)->isFloatingPoint() && 
+        !isa<PackedType>((*yyvsp[-3].TypeVal).get()))
       GEN_ERROR(
         "Arithmetic operator requires integer, FP, or packed operands!");
-    if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()) && 
-        ((yyvsp[-4].BinaryOpVal) == Instruction::URem || 
-         (yyvsp[-4].BinaryOpVal) == Instruction::SRem ||
-         (yyvsp[-4].BinaryOpVal) == Instruction::FRem))
+    if (isa<PackedType>((*yyvsp[-3].TypeVal).get()) && 
+        (yyvsp[-4].BinaryOpVal == Instruction::URem || 
+         yyvsp[-4].BinaryOpVal == Instruction::SRem ||
+         yyvsp[-4].BinaryOpVal == Instruction::FRem))
       GEN_ERROR("U/S/FRem not supported on packed types!");
-    Value* val1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal)); 
+    Value* val1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal); 
     CHECK_FOR_ERROR
-    Value* val2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
+    Value* val2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), val1, val2);
-    if ((yyval.InstVal) == 0)
+    yyval.InstVal = BinaryOperator::create(yyvsp[-4].BinaryOpVal, val1, val2);
+    if (yyval.InstVal == 0)
       GEN_ERROR("binary operator returned null!");
-    delete (yyvsp[-3].TypeVal);
-  ;}
-    break;
-
-  case 264:
-#line 2590 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+    delete yyvsp[-3].TypeVal;
+  ;
+    break;}
+case 263:
+#line 2591 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
-    if (!(*(yyvsp[-3].TypeVal))->isInteger()) {
-      if (!isa<PackedType>((yyvsp[-3].TypeVal)->get()) ||
-          !cast<PackedType>((yyvsp[-3].TypeVal)->get())->getElementType()->isInteger())
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
+    if (!(*yyvsp[-3].TypeVal)->isInteger()) {
+      if (!isa<PackedType>(yyvsp[-3].TypeVal->get()) ||
+          !cast<PackedType>(yyvsp[-3].TypeVal->get())->getElementType()->isInteger())
         GEN_ERROR("Logical operator requires integral operands!");
     }
-    Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
+    Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
     CHECK_FOR_ERROR
-    Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
+    Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), tmpVal1, tmpVal2);
-    if ((yyval.InstVal) == 0)
+    yyval.InstVal = BinaryOperator::create(yyvsp[-4].BinaryOpVal, tmpVal1, tmpVal2);
+    if (yyval.InstVal == 0)
       GEN_ERROR("binary operator returned null!");
-    delete (yyvsp[-3].TypeVal);
-  ;}
-    break;
-
-  case 265:
-#line 2607 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+    delete yyvsp[-3].TypeVal;
+  ;
+    break;}
+case 264:
+#line 2608 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
-    if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
+    if (isa<PackedType>((*yyvsp[-3].TypeVal).get()))
       GEN_ERROR("Packed types not supported by icmp instruction");
-    Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
+    Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
     CHECK_FOR_ERROR
-    Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
+    Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].IPredicate), tmpVal1, tmpVal2);
-    if ((yyval.InstVal) == 0)
+    yyval.InstVal = CmpInst::create(yyvsp[-5].OtherOpVal, yyvsp[-4].IPredicate, tmpVal1, tmpVal2);
+    if (yyval.InstVal == 0)
       GEN_ERROR("icmp operator returned null!");
-  ;}
-    break;
-
-  case 266:
-#line 2620 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 265:
+#line 2621 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
-    if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
+    if (isa<PackedType>((*yyvsp[-3].TypeVal).get()))
       GEN_ERROR("Packed types not supported by fcmp instruction");
-    Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
+    Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
     CHECK_FOR_ERROR
-    Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
+    Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].FPredicate), tmpVal1, tmpVal2);
-    if ((yyval.InstVal) == 0)
+    yyval.InstVal = CmpInst::create(yyvsp[-5].OtherOpVal, yyvsp[-4].FPredicate, tmpVal1, tmpVal2);
+    if (yyval.InstVal == 0)
       GEN_ERROR("fcmp operator returned null!");
-  ;}
-    break;
-
-  case 267:
-#line 2633 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[0].ValueVal)->getType() != Type::Int8Ty)
+  ;
+    break;}
+case 266:
+#line 2634 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (yyvsp[0].ValueVal->getType() != Type::Int8Ty)
       GEN_ERROR("Shift amount must be i8 type!");
-    if (!(yyvsp[-2].ValueVal)->getType()->isInteger())
+    if (!yyvsp[-2].ValueVal->getType()->isInteger())
       GEN_ERROR("Shift constant expression requires integer operand!");
     CHECK_FOR_ERROR;
-    (yyval.InstVal) = new ShiftInst((yyvsp[-3].OtherOpVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
+    yyval.InstVal = new ShiftInst(yyvsp[-3].OtherOpVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 268:
-#line 2642 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 267:
+#line 2643 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
-    Value* Val = (yyvsp[-2].ValueVal);
-    const Type* DestTy = (yyvsp[0].TypeVal)->get();
-    if (!CastInst::castIsValid((yyvsp[-3].CastOpVal), Val, DestTy))
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
+    Value* Val = yyvsp[-2].ValueVal;
+    const Type* DestTy = yyvsp[0].TypeVal->get();
+    if (!CastInst::castIsValid(yyvsp[-3].CastOpVal, Val, DestTy))
       GEN_ERROR("invalid cast opcode for cast from '" +
                 Val->getType()->getDescription() + "' to '" +
                 DestTy->getDescription() + "'!"); 
-    (yyval.InstVal) = CastInst::create((yyvsp[-3].CastOpVal), Val, DestTy);
-    delete (yyvsp[0].TypeVal);
-  ;}
-    break;
-
-  case 269:
-#line 2654 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-4].ValueVal)->getType() != Type::Int1Ty)
+    yyval.InstVal = CastInst::create(yyvsp[-3].CastOpVal, Val, DestTy);
+    delete yyvsp[0].TypeVal;
+  ;
+    break;}
+case 268:
+#line 2655 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (yyvsp[-4].ValueVal->getType() != Type::Int1Ty)
       GEN_ERROR("select condition must be boolean!");
-    if ((yyvsp[-2].ValueVal)->getType() != (yyvsp[0].ValueVal)->getType())
+    if (yyvsp[-2].ValueVal->getType() != yyvsp[0].ValueVal->getType())
       GEN_ERROR("select value types should match!");
-    (yyval.InstVal) = new SelectInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
+    yyval.InstVal = new SelectInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 270:
-#line 2662 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 269:
+#line 2663 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
-    (yyval.InstVal) = new VAArgInst((yyvsp[-2].ValueVal), *(yyvsp[0].TypeVal));
-    delete (yyvsp[0].TypeVal);
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
+    yyval.InstVal = new VAArgInst(yyvsp[-2].ValueVal, *yyvsp[0].TypeVal);
+    delete yyvsp[0].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 271:
-#line 2669 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
+  ;
+    break;}
+case 270:
+#line 2670 "/Volumes/ProjectsDisk/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].ValueVal), (yyvsp[0].ValueVal));
+    yyval.InstVal = new ExtractElementInst(yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 272:
-#line 2675 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
+  ;
+    break;}
+case 271:
+#line 2676 "/Volumes/ProjectsDisk/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[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
+    yyval.InstVal = new InsertElementInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 273:
-#line 2681 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
+  ;
+    break;}
+case 272:
+#line 2682 "/Volumes/ProjectsDisk/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[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
+    yyval.InstVal = new ShuffleVectorInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 274:
-#line 2687 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    const Type *Ty = (yyvsp[0].PHIList)->front().first->getType();
+  ;
+    break;}
+case 273:
+#line 2688 "/Volumes/ProjectsDisk/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[0].PHIList)->size());
-    while ((yyvsp[0].PHIList)->begin() != (yyvsp[0].PHIList)->end()) {
-      if ((yyvsp[0].PHIList)->front().first->getType() != Ty) 
+    yyval.InstVal = new PHINode(Ty);
+    ((PHINode*)yyval.InstVal)->reserveOperandSpace(yyvsp[0].PHIList->size());
+    while (yyvsp[0].PHIList->begin() != yyvsp[0].PHIList->end()) {
+      if (yyvsp[0].PHIList->front().first->getType() != Ty) 
         GEN_ERROR("All elements of a PHI node must be of the same type!");
-      cast<PHINode>((yyval.InstVal))->addIncoming((yyvsp[0].PHIList)->front().first, (yyvsp[0].PHIList)->front().second);
-      (yyvsp[0].PHIList)->pop_front();
+      cast<PHINode>(yyval.InstVal)->addIncoming(yyvsp[0].PHIList->front().first, yyvsp[0].PHIList->front().second);
+      yyvsp[0].PHIList->pop_front();
     }
-    delete (yyvsp[0].PHIList);  // Free the list...
+    delete yyvsp[0].PHIList;  // Free the list...
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 275:
-#line 2703 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 274:
+#line 2704 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
 
     // Handle the short syntax
     const PointerType *PFTy = 0;
     const FunctionType *Ty = 0;
-    if (!(PFTy = dyn_cast<PointerType>((yyvsp[-5].TypeVal)->get())) ||
+    if (!(PFTy = dyn_cast<PointerType>(yyvsp[-5].TypeVal->get())) ||
         !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
       // Pull out the types of all of the arguments...
       std::vector<const Type*> ParamTypes;
       FunctionType::ParamAttrsList ParamAttrs;
-      ParamAttrs.push_back((yyvsp[0].ParamAttrs));
-      for (ValueRefList::iterator I = (yyvsp[-2].ValueRefList)->begin(), E = (yyvsp[-2].ValueRefList)->end(); I != E; ++I) {
+      ParamAttrs.push_back(yyvsp[0].ParamAttrs);
+      for (ValueRefList::iterator I = yyvsp[-2].ValueRefList->begin(), E = yyvsp[-2].ValueRefList->end(); I != E; ++I) {
         const Type *Ty = I->Val->getType();
         if (Ty == Type::VoidTy)
           GEN_ERROR("Short call syntax cannot be used with varargs");
@@ -5410,16 +4562,16 @@
         ParamAttrs.push_back(I->Attrs);
       }
 
-      Ty = FunctionType::get((yyvsp[-5].TypeVal)->get(), ParamTypes, false, ParamAttrs);
+      Ty = FunctionType::get(yyvsp[-5].TypeVal->get(), ParamTypes, false, ParamAttrs);
       PFTy = PointerType::get(Ty);
     }
 
-    Value *V = getVal(PFTy, (yyvsp[-4].ValIDVal));   // Get the function we're calling...
+    Value *V = getVal(PFTy, yyvsp[-4].ValIDVal);   // Get the function we're calling...
     CHECK_FOR_ERROR
 
     // Check the arguments 
     ValueList Args;
-    if ((yyvsp[-2].ValueRefList)->empty()) {                                   // Has no arguments?
+    if (yyvsp[-2].ValueRefList->empty()) {                                   // Has no arguments?
       // Make sure no arguments is a good thing!
       if (Ty->getNumParams() != 0)
         GEN_ERROR("No arguments passed to a function that "
@@ -5430,7 +4582,7 @@
       //
       FunctionType::param_iterator I = Ty->param_begin();
       FunctionType::param_iterator E = Ty->param_end();
-      ValueRefList::iterator ArgI = (yyvsp[-2].ValueRefList)->begin(), ArgE = (yyvsp[-2].ValueRefList)->end();
+      ValueRefList::iterator ArgI = yyvsp[-2].ValueRefList->begin(), ArgE = yyvsp[-2].ValueRefList->end();
 
       for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
         if (ArgI->Val->getType() != *I)
@@ -5447,428 +4599,365 @@
     }
     // Create the call node
     CallInst *CI = new CallInst(V, Args);
-    CI->setTailCall((yyvsp[-7].BoolVal));
-    CI->setCallingConv((yyvsp[-6].UIntVal));
-    (yyval.InstVal) = CI;
-    delete (yyvsp[-2].ValueRefList);
-    delete (yyvsp[-5].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 276:
-#line 2766 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.InstVal) = (yyvsp[0].InstVal);
+  ;
+    break;}
+case 275:
+#line 2767 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.InstVal = yyvsp[0].InstVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 277:
-#line 2771 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = true;
+  ;
+    break;}
+case 276:
+#line 2772 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = true;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 278:
-#line 2775 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = false;
+  ;
+    break;}
+case 277:
+#line 2776 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = false;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 279:
-#line 2782 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 278:
+#line 2783 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
-    (yyval.InstVal) = new MallocInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
-    delete (yyvsp[-1].TypeVal);
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
+    yyval.InstVal = new MallocInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal);
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 280:
-#line 2789 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 279:
+#line 2790 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
-    Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
+    Value* tmpVal = getVal(yyvsp[-2].PrimType, yyvsp[-1].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.InstVal) = new MallocInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
-    delete (yyvsp[-4].TypeVal);
-  ;}
-    break;
-
-  case 281:
-#line 2797 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+    yyval.InstVal = new MallocInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
+    delete yyvsp[-4].TypeVal;
+  ;
+    break;}
+case 280:
+#line 2798 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
-    (yyval.InstVal) = new AllocaInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
-    delete (yyvsp[-1].TypeVal);
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
+    yyval.InstVal = new AllocaInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal);
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 282:
-#line 2804 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 281:
+#line 2805 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
-    Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
+    Value* tmpVal = getVal(yyvsp[-2].PrimType, yyvsp[-1].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.InstVal) = new AllocaInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
-    delete (yyvsp[-4].TypeVal);
-  ;}
-    break;
-
-  case 283:
-#line 2812 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!isa<PointerType>((yyvsp[0].ValueVal)->getType()))
+    yyval.InstVal = new AllocaInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
+    delete yyvsp[-4].TypeVal;
+  ;
+    break;}
+case 282:
+#line 2813 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (!isa<PointerType>(yyvsp[0].ValueVal->getType()))
       GEN_ERROR("Trying to free nonpointer type " + 
-                     (yyvsp[0].ValueVal)->getType()->getDescription() + "!");
-    (yyval.InstVal) = new FreeInst((yyvsp[0].ValueVal));
+                     yyvsp[0].ValueVal->getType()->getDescription() + "!");
+    yyval.InstVal = new FreeInst(yyvsp[0].ValueVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 284:
-#line 2820 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 283:
+#line 2821 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
-    if (!isa<PointerType>((yyvsp[-1].TypeVal)->get()))
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
+    if (!isa<PointerType>(yyvsp[-1].TypeVal->get()))
       GEN_ERROR("Can't load from nonpointer type: " +
-                     (*(yyvsp[-1].TypeVal))->getDescription());
-    if (!cast<PointerType>((yyvsp[-1].TypeVal)->get())->getElementType()->isFirstClassType())
+                     (*yyvsp[-1].TypeVal)->getDescription());
+    if (!cast<PointerType>(yyvsp[-1].TypeVal->get())->getElementType()->isFirstClassType())
       GEN_ERROR("Can't load from pointer of non-first-class type: " +
-                     (*(yyvsp[-1].TypeVal))->getDescription());
-    Value* tmpVal = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
+                     (*yyvsp[-1].TypeVal)->getDescription());
+    Value* tmpVal = getVal(*yyvsp[-1].TypeVal, yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.InstVal) = new LoadInst(tmpVal, "", (yyvsp[-3].BoolVal));
-    delete (yyvsp[-1].TypeVal);
-  ;}
-    break;
-
-  case 285:
-#line 2834 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+    yyval.InstVal = new LoadInst(tmpVal, "", yyvsp[-3].BoolVal);
+    delete yyvsp[-1].TypeVal;
+  ;
+    break;}
+case 284:
+#line 2835 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
-    const PointerType *PT = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
+    const PointerType *PT = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
     if (!PT)
       GEN_ERROR("Can't store to a nonpointer type: " +
-                     (*(yyvsp[-1].TypeVal))->getDescription());
+                     (*yyvsp[-1].TypeVal)->getDescription());
     const Type *ElTy = PT->getElementType();
-    if (ElTy != (yyvsp[-3].ValueVal)->getType())
-      GEN_ERROR("Can't store '" + (yyvsp[-3].ValueVal)->getType()->getDescription() +
+    if (ElTy != yyvsp[-3].ValueVal->getType())
+      GEN_ERROR("Can't store '" + yyvsp[-3].ValueVal->getType()->getDescription() +
                      "' into space of type '" + ElTy->getDescription() + "'!");
 
-    Value* tmpVal = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
+    Value* tmpVal = getVal(*yyvsp[-1].TypeVal, yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.InstVal) = new StoreInst((yyvsp[-3].ValueVal), tmpVal, (yyvsp[-5].BoolVal));
-    delete (yyvsp[-1].TypeVal);
-  ;}
-    break;
-
-  case 286:
-#line 2851 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    {
+    yyval.InstVal = new StoreInst(yyvsp[-3].ValueVal, tmpVal, yyvsp[-5].BoolVal);
+    delete yyvsp[-1].TypeVal;
+  ;
+    break;}
+case 285:
+#line 2852 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
-    if (!isa<PointerType>((yyvsp[-2].TypeVal)->get()))
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
+    if (!isa<PointerType>(yyvsp[-2].TypeVal->get()))
       GEN_ERROR("getelementptr insn requires pointer operand!");
 
-    if (!GetElementPtrInst::getIndexedType(*(yyvsp[-2].TypeVal), *(yyvsp[0].ValueList), true))
+    if (!GetElementPtrInst::getIndexedType(*yyvsp[-2].TypeVal, *yyvsp[0].ValueList, true))
       GEN_ERROR("Invalid getelementptr indices for type '" +
-                     (*(yyvsp[-2].TypeVal))->getDescription()+ "'!");
-    Value* tmpVal = getVal(*(yyvsp[-2].TypeVal), (yyvsp[-1].ValIDVal));
+                     (*yyvsp[-2].TypeVal)->getDescription()+ "'!");
+    Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.InstVal) = new GetElementPtrInst(tmpVal, *(yyvsp[0].ValueList));
-    delete (yyvsp[-2].TypeVal); 
-    delete (yyvsp[0].ValueList);
-  ;}
-    break;
-
-
-      default: break;
-    }
-
-/* Line 1126 of yacc.c.  */
-#line 5604 "llvmAsmParser.tab.c"
+    yyval.InstVal = new GetElementPtrInst(tmpVal, *yyvsp[0].ValueList);
+    delete yyvsp[-2].TypeVal; 
+    delete yyvsp[0].ValueList;
+  ;
+    break;}
+}
+   /* the action file gets copied in in place of this dollarsign */
+#line 543 "/usr/share/bison.simple"
 
   yyvsp -= yylen;
   yyssp -= yylen;
+#ifdef YYLSP_NEEDED
+  yylsp -= yylen;
+#endif
 
-
-  YY_STACK_PRINT (yyss, yyssp);
+#if YYDEBUG != 0
+  if (yydebug)
+    {
+      short *ssp1 = yyss - 1;
+      fprintf (stderr, "state stack now");
+      while (ssp1 != yyssp)
+	fprintf (stderr, " %d", *++ssp1);
+      fprintf (stderr, "\n");
+    }
+#endif
 
   *++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
+
+#ifdef YYERROR_VERBOSE
       yyn = yypact[yystate];
 
-      if (YYPACT_NINF < yyn && yyn < YYLAST)
+      if (yyn > YYFLAG && yyn < YYLAST)
 	{
-	  int yytype = YYTRANSLATE (yychar);
-	  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
-	  YYSIZE_T yysize = yysize0;
-	  YYSIZE_T yysize1;
-	  int yysize_overflow = 0;
-	  char *yymsg = 0;
-#	  define YYERROR_VERBOSE_ARGS_MAXIMUM 5
-	  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-	  int yyx;
+	  int size = 0;
+	  char *msg;
+	  int x, count;
 
-#if 0
-	  /* This is so xgettext sees the translatable formats that are
-	     constructed on the fly.  */
-	  YY_("syntax error, unexpected %s");
-	  YY_("syntax error, unexpected %s, expecting %s");
-	  YY_("syntax error, unexpected %s, expecting %s or %s");
-	  YY_("syntax error, unexpected %s, expecting %s or %s or %s");
-	  YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
-#endif
-	  char *yyfmt;
-	  char const *yyf;
-	  static char const yyunexpected[] = "syntax error, unexpected %s";
-	  static char const yyexpecting[] = ", expecting %s";
-	  static char const yyor[] = " or %s";
-	  char yyformat[sizeof yyunexpected
-			+ sizeof yyexpecting - 1
-			+ ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
-			   * (sizeof yyor - 1))];
-	  char const *yyprefix = yyexpecting;
-
-	  /* Start YYX at -YYN if negative to avoid negative indexes in
-	     YYCHECK.  */
-	  int yyxbegin = yyn < 0 ? -yyn : 0;
-
-	  /* Stay within bounds of both yycheck and yytname.  */
-	  int yychecklim = YYLAST - yyn;
-	  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-	  int yycount = 1;
-
-	  yyarg[0] = yytname[yytype];
-	  yyfmt = yystpcpy (yyformat, yyunexpected);
-
-	  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-	    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-	      {
-		if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-		  {
-		    yycount = 1;
-		    yysize = yysize0;
-		    yyformat[sizeof yyunexpected - 1] = '\0';
-		    break;
-		  }
-		yyarg[yycount++] = yytname[yyx];
-		yysize1 = yysize + yytnamerr (0, yytname[yyx]);
-		yysize_overflow |= yysize1 < yysize;
-		yysize = yysize1;
-		yyfmt = yystpcpy (yyfmt, yyprefix);
-		yyprefix = yyor;
-	      }
-
-	  yyf = YY_(yyformat);
-	  yysize1 = yysize + yystrlen (yyf);
-	  yysize_overflow |= yysize1 < yysize;
-	  yysize = yysize1;
-
-	  if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM)
-	    yymsg = (char *) YYSTACK_ALLOC (yysize);
-	  if (yymsg)
+	  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)
 	    {
-	      /* Avoid sprintf, as that infringes on the user's name space.
-		 Don't have undefined behavior even if the translation
-		 produced a string with the wrong number of "%s"s.  */
-	      char *yyp = yymsg;
-	      int yyi = 0;
-	      while ((*yyp = *yyf))
+	      strcpy(msg, "parse error");
+
+	      if (count < 5)
 		{
-		  if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
-		    {
-		      yyp += yytnamerr (yyp, yyarg[yyi++]);
-		      yyf += 2;
-		    }
-		  else
-		    {
-		      yyp++;
-		      yyf++;
-		    }
+		  count = 0;
+		  for (x = (yyn < 0 ? -yyn : 0);
+		       x < (sizeof(yytname) / sizeof(char *)); x++)
+		    if (yycheck[x + yyn] == x)
+		      {
+			strcat(msg, count == 0 ? ", expecting `" : " or `");
+			strcat(msg, yytname[x]);
+			strcat(msg, "'");
+			count++;
+		      }
 		}
-	      yyerror (yymsg);
-	      YYSTACK_FREE (yymsg);
+	      yyerror(msg);
+	      free(msg);
 	    }
 	  else
-	    {
-	      yyerror (YY_("syntax error"));
-	      goto yyexhaustedlab;
-	    }
+	    yyerror ("parse error; also virtual memory exceeded");
 	}
       else
 #endif /* YYERROR_VERBOSE */
-	yyerror (YY_("syntax error"));
+	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 (0)
-     goto yyerrorlab;
-
-yyvsp -= yylen;
-  yyssp -= yylen;
-  yystate = *yyssp;
-  goto yyerrlab1;
-
-
-/*-------------------------------------------------------------.
-| yyerrlab1 -- common code for both syntax error and YYERROR.  |
-`-------------------------------------------------------------*/
-yyerrlab1:
-  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
-
-  for (;;)
-    {
-      yyn = yypact[yystate];
-      if (yyn != YYPACT_NINF)
-	{
-	  yyn += YYTERROR;
-	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-	    {
-	      yyn = yytable[yyn];
-	      if (0 < yyn)
-		break;
-	    }
-	}
-
-      /* Pop the current state because it cannot handle the error token.  */
-      if (yyssp == yyss)
+      /* 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;
-      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);
-  while (yyssp != yyss)
+ yyacceptlab:
+  /* YYACCEPT comes here.  */
+  if (yyfree_stacks)
     {
-      yydestruct ("Cleanup: popping",
-		  yystos[*yyssp], yyvsp);
-      YYPOPSTACK;
-    }
-#ifndef yyoverflow
-  if (yyss != yyssa)
-    YYSTACK_FREE (yyss);
+      free (yyss);
+      free (yyvs);
+#ifdef YYLSP_NEEDED
+      free (yyls);
 #endif
-  return yyresult;
+    }
+  return 0;
+
+ yyabortlab:
+  /* YYABORT comes here.  */
+  if (yyfree_stacks)
+    {
+      free (yyss);
+      free (yyvs);
+#ifdef YYLSP_NEEDED
+      free (yyls);
+#endif
+    }
+  return 1;
 }
-
-
-#line 2868 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2869 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 
 
 // common code from the two 'RunVMAsmParser' functions
@@ -5918,4 +5007,3 @@
   GenerateError(errMsg);
   return 0;
 }
-
diff --git a/lib/AsmParser/llvmAsmParser.h.cvs b/lib/AsmParser/llvmAsmParser.h.cvs
index 1426eaf..2b79ec4 100644
--- a/lib/AsmParser/llvmAsmParser.h.cvs
+++ b/lib/AsmParser/llvmAsmParser.h.cvs
@@ -1,302 +1,4 @@
-/* A Bison parser, made by GNU Bison 2.1.  */
-
-/* Skeleton parser for Yacc-like parsing with Bison,
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
-
-/* As a special exception, when this file is copied by Bison into a
-   Bison output file, you may use that output file without restriction.
-   This special exception was added by the Free Software Foundation
-   in version 1.24 of Bison.  */
-
-/* Tokens.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     ESINT64VAL = 258,
-     EUINT64VAL = 259,
-     LOCALVAL_ID = 260,
-     GLOBALVAL_ID = 261,
-     FPVAL = 262,
-     VOID = 263,
-     INTTYPE = 264,
-     FLOAT = 265,
-     DOUBLE = 266,
-     LABEL = 267,
-     TYPE = 268,
-     LOCALVAR = 269,
-     GLOBALVAR = 270,
-     LABELSTR = 271,
-     STRINGCONSTANT = 272,
-     ATSTRINGCONSTANT = 273,
-     IMPLEMENTATION = 274,
-     ZEROINITIALIZER = 275,
-     TRUETOK = 276,
-     FALSETOK = 277,
-     BEGINTOK = 278,
-     ENDTOK = 279,
-     DECLARE = 280,
-     DEFINE = 281,
-     GLOBAL = 282,
-     CONSTANT = 283,
-     SECTION = 284,
-     VOLATILE = 285,
-     TO = 286,
-     DOTDOTDOT = 287,
-     NULL_TOK = 288,
-     UNDEF = 289,
-     INTERNAL = 290,
-     LINKONCE = 291,
-     WEAK = 292,
-     APPENDING = 293,
-     DLLIMPORT = 294,
-     DLLEXPORT = 295,
-     EXTERN_WEAK = 296,
-     OPAQUE = 297,
-     EXTERNAL = 298,
-     TARGET = 299,
-     TRIPLE = 300,
-     ALIGN = 301,
-     DEPLIBS = 302,
-     CALL = 303,
-     TAIL = 304,
-     ASM_TOK = 305,
-     MODULE = 306,
-     SIDEEFFECT = 307,
-     CC_TOK = 308,
-     CCC_TOK = 309,
-     FASTCC_TOK = 310,
-     COLDCC_TOK = 311,
-     X86_STDCALLCC_TOK = 312,
-     X86_FASTCALLCC_TOK = 313,
-     DATALAYOUT = 314,
-     RET = 315,
-     BR = 316,
-     SWITCH = 317,
-     INVOKE = 318,
-     UNWIND = 319,
-     UNREACHABLE = 320,
-     ADD = 321,
-     SUB = 322,
-     MUL = 323,
-     UDIV = 324,
-     SDIV = 325,
-     FDIV = 326,
-     UREM = 327,
-     SREM = 328,
-     FREM = 329,
-     AND = 330,
-     OR = 331,
-     XOR = 332,
-     ICMP = 333,
-     FCMP = 334,
-     EQ = 335,
-     NE = 336,
-     SLT = 337,
-     SGT = 338,
-     SLE = 339,
-     SGE = 340,
-     ULT = 341,
-     UGT = 342,
-     ULE = 343,
-     UGE = 344,
-     OEQ = 345,
-     ONE = 346,
-     OLT = 347,
-     OGT = 348,
-     OLE = 349,
-     OGE = 350,
-     ORD = 351,
-     UNO = 352,
-     UEQ = 353,
-     UNE = 354,
-     MALLOC = 355,
-     ALLOCA = 356,
-     FREE = 357,
-     LOAD = 358,
-     STORE = 359,
-     GETELEMENTPTR = 360,
-     TRUNC = 361,
-     ZEXT = 362,
-     SEXT = 363,
-     FPTRUNC = 364,
-     FPEXT = 365,
-     BITCAST = 366,
-     UITOFP = 367,
-     SITOFP = 368,
-     FPTOUI = 369,
-     FPTOSI = 370,
-     INTTOPTR = 371,
-     PTRTOINT = 372,
-     PHI_TOK = 373,
-     SELECT = 374,
-     SHL = 375,
-     LSHR = 376,
-     ASHR = 377,
-     VAARG = 378,
-     EXTRACTELEMENT = 379,
-     INSERTELEMENT = 380,
-     SHUFFLEVECTOR = 381,
-     NORETURN = 382,
-     INREG = 383,
-     SRET = 384,
-     DEFAULT = 385,
-     HIDDEN = 386
-   };
-#endif
-/* Tokens.  */
-#define ESINT64VAL 258
-#define EUINT64VAL 259
-#define LOCALVAL_ID 260
-#define GLOBALVAL_ID 261
-#define FPVAL 262
-#define VOID 263
-#define INTTYPE 264
-#define FLOAT 265
-#define DOUBLE 266
-#define LABEL 267
-#define TYPE 268
-#define LOCALVAR 269
-#define GLOBALVAR 270
-#define LABELSTR 271
-#define STRINGCONSTANT 272
-#define ATSTRINGCONSTANT 273
-#define IMPLEMENTATION 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 VOLATILE 285
-#define TO 286
-#define DOTDOTDOT 287
-#define NULL_TOK 288
-#define UNDEF 289
-#define INTERNAL 290
-#define LINKONCE 291
-#define WEAK 292
-#define APPENDING 293
-#define DLLIMPORT 294
-#define DLLEXPORT 295
-#define EXTERN_WEAK 296
-#define OPAQUE 297
-#define EXTERNAL 298
-#define TARGET 299
-#define TRIPLE 300
-#define ALIGN 301
-#define DEPLIBS 302
-#define CALL 303
-#define TAIL 304
-#define ASM_TOK 305
-#define MODULE 306
-#define SIDEEFFECT 307
-#define CC_TOK 308
-#define CCC_TOK 309
-#define FASTCC_TOK 310
-#define COLDCC_TOK 311
-#define X86_STDCALLCC_TOK 312
-#define X86_FASTCALLCC_TOK 313
-#define DATALAYOUT 314
-#define RET 315
-#define BR 316
-#define SWITCH 317
-#define INVOKE 318
-#define UNWIND 319
-#define UNREACHABLE 320
-#define ADD 321
-#define SUB 322
-#define MUL 323
-#define UDIV 324
-#define SDIV 325
-#define FDIV 326
-#define UREM 327
-#define SREM 328
-#define FREM 329
-#define AND 330
-#define OR 331
-#define XOR 332
-#define ICMP 333
-#define FCMP 334
-#define EQ 335
-#define NE 336
-#define SLT 337
-#define SGT 338
-#define SLE 339
-#define SGE 340
-#define ULT 341
-#define UGT 342
-#define ULE 343
-#define UGE 344
-#define OEQ 345
-#define ONE 346
-#define OLT 347
-#define OGT 348
-#define OLE 349
-#define OGE 350
-#define ORD 351
-#define UNO 352
-#define UEQ 353
-#define UNE 354
-#define MALLOC 355
-#define ALLOCA 356
-#define FREE 357
-#define LOAD 358
-#define STORE 359
-#define GETELEMENTPTR 360
-#define TRUNC 361
-#define ZEXT 362
-#define SEXT 363
-#define FPTRUNC 364
-#define FPEXT 365
-#define BITCAST 366
-#define UITOFP 367
-#define SITOFP 368
-#define FPTOUI 369
-#define FPTOSI 370
-#define INTTOPTR 371
-#define PTRTOINT 372
-#define PHI_TOK 373
-#define SELECT 374
-#define SHL 375
-#define LSHR 376
-#define ASHR 377
-#define VAARG 378
-#define EXTRACTELEMENT 379
-#define INSERTELEMENT 380
-#define SHUFFLEVECTOR 381
-#define NORETURN 382
-#define INREG 383
-#define SRET 384
-#define DEFAULT 385
-#define HIDDEN 386
-
-
-
-
-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 885 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-typedef union YYSTYPE {
+typedef union {
   llvm::Module                           *ModuleVal;
   llvm::Function                         *FunctionVal;
   llvm::BasicBlock                       *BasicBlockVal;
@@ -341,14 +43,135 @@
   llvm::ICmpInst::Predicate         IPredicate;
   llvm::FCmpInst::Predicate         FPredicate;
 } YYSTYPE;
-/* Line 1447 of yacc.c.  */
-#line 346 "llvmAsmParser.tab.h"
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
+#define	ESINT64VAL	257
+#define	EUINT64VAL	258
+#define	LOCALVAL_ID	259
+#define	GLOBALVAL_ID	260
+#define	FPVAL	261
+#define	VOID	262
+#define	INTTYPE	263
+#define	FLOAT	264
+#define	DOUBLE	265
+#define	LABEL	266
+#define	TYPE	267
+#define	LOCALVAR	268
+#define	GLOBALVAR	269
+#define	LABELSTR	270
+#define	STRINGCONSTANT	271
+#define	ATSTRINGCONSTANT	272
+#define	IMPLEMENTATION	273
+#define	ZEROINITIALIZER	274
+#define	TRUETOK	275
+#define	FALSETOK	276
+#define	BEGINTOK	277
+#define	ENDTOK	278
+#define	DECLARE	279
+#define	DEFINE	280
+#define	GLOBAL	281
+#define	CONSTANT	282
+#define	SECTION	283
+#define	VOLATILE	284
+#define	TO	285
+#define	DOTDOTDOT	286
+#define	NULL_TOK	287
+#define	UNDEF	288
+#define	INTERNAL	289
+#define	LINKONCE	290
+#define	WEAK	291
+#define	APPENDING	292
+#define	DLLIMPORT	293
+#define	DLLEXPORT	294
+#define	EXTERN_WEAK	295
+#define	OPAQUE	296
+#define	EXTERNAL	297
+#define	TARGET	298
+#define	TRIPLE	299
+#define	ALIGN	300
+#define	DEPLIBS	301
+#define	CALL	302
+#define	TAIL	303
+#define	ASM_TOK	304
+#define	MODULE	305
+#define	SIDEEFFECT	306
+#define	CC_TOK	307
+#define	CCC_TOK	308
+#define	FASTCC_TOK	309
+#define	COLDCC_TOK	310
+#define	X86_STDCALLCC_TOK	311
+#define	X86_FASTCALLCC_TOK	312
+#define	DATALAYOUT	313
+#define	RET	314
+#define	BR	315
+#define	SWITCH	316
+#define	INVOKE	317
+#define	UNWIND	318
+#define	UNREACHABLE	319
+#define	ADD	320
+#define	SUB	321
+#define	MUL	322
+#define	UDIV	323
+#define	SDIV	324
+#define	FDIV	325
+#define	UREM	326
+#define	SREM	327
+#define	FREM	328
+#define	AND	329
+#define	OR	330
+#define	XOR	331
+#define	ICMP	332
+#define	FCMP	333
+#define	EQ	334
+#define	NE	335
+#define	SLT	336
+#define	SGT	337
+#define	SLE	338
+#define	SGE	339
+#define	ULT	340
+#define	UGT	341
+#define	ULE	342
+#define	UGE	343
+#define	OEQ	344
+#define	ONE	345
+#define	OLT	346
+#define	OGT	347
+#define	OLE	348
+#define	OGE	349
+#define	ORD	350
+#define	UNO	351
+#define	UEQ	352
+#define	UNE	353
+#define	MALLOC	354
+#define	ALLOCA	355
+#define	FREE	356
+#define	LOAD	357
+#define	STORE	358
+#define	GETELEMENTPTR	359
+#define	TRUNC	360
+#define	ZEXT	361
+#define	SEXT	362
+#define	FPTRUNC	363
+#define	FPEXT	364
+#define	BITCAST	365
+#define	UITOFP	366
+#define	SITOFP	367
+#define	FPTOUI	368
+#define	FPTOSI	369
+#define	INTTOPTR	370
+#define	PTRTOINT	371
+#define	PHI_TOK	372
+#define	SELECT	373
+#define	SHL	374
+#define	LSHR	375
+#define	ASHR	376
+#define	VAARG	377
+#define	EXTRACTELEMENT	378
+#define	INSERTELEMENT	379
+#define	SHUFFLEVECTOR	380
+#define	NORETURN	381
+#define	INREG	382
+#define	SRET	383
+#define	DEFAULT	384
+#define	HIDDEN	385
+
 
 extern YYSTYPE llvmAsmlval;
-
-
-
diff --git a/lib/AsmParser/llvmAsmParser.y.cvs b/lib/AsmParser/llvmAsmParser.y.cvs
index 229845d..586896c 100644
--- a/lib/AsmParser/llvmAsmParser.y.cvs
+++ b/lib/AsmParser/llvmAsmParser.y.cvs
@@ -20,6 +20,7 @@
 #include "llvm/SymbolTable.h"
 #include "llvm/Support/GetElementPtrTypeIterator.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/Support/MathExtras.h"
 #include "llvm/Support/Streams.h"
@@ -1733,7 +1734,7 @@
     if (!IdxTy)
       GEN_ERROR("Index list invalid for constant getelementptr!");
 
-    std::vector<Constant*> IdxVec;
+    SmallVector<Constant*, 8> IdxVec;
     for (unsigned i = 0, e = $4->size(); i != e; ++i)
       if (Constant *C = dyn_cast<Constant>((*$4)[i]))
         IdxVec.push_back(C);
@@ -1742,7 +1743,7 @@
 
     delete $4;
 
-    $$ = ConstantExpr::getGetElementPtr($3, IdxVec);
+    $$ = ConstantExpr::getGetElementPtr($3, &IdxVec[0], IdxVec.size());
     CHECK_FOR_ERROR
   }
   | SELECT '(' ConstVal ',' ConstVal ',' ConstVal ')' {
