diff --git a/llvm/lib/AsmParser/ParserInternals.h b/llvm/lib/AsmParser/ParserInternals.h
index 633ffc1..79e367f 100644
--- a/llvm/lib/AsmParser/ParserInternals.h
+++ b/llvm/lib/AsmParser/ParserInternals.h
@@ -172,8 +172,8 @@
     case ConstUIntVal  :
     case ConstSIntVal  : return std::string("%") + itostr(ConstPool64);
     case ConstantVal:
-      if (ConstantValue == ConstantBool::True) return "true";
-      if (ConstantValue == ConstantBool::False) return "false";
+      if (ConstantValue == ConstantBool::getTrue()) return "true";
+      if (ConstantValue == ConstantBool::getFalse()) return "false";
       return "<constant expression>";
     default:
       assert(0 && "Unknown value!");
diff --git a/llvm/lib/AsmParser/llvmAsmParser.cpp.cvs b/llvm/lib/AsmParser/llvmAsmParser.cpp.cvs
index 0cac3c8..9057dad 100644
--- a/llvm/lib/AsmParser/llvmAsmParser.cpp.cvs
+++ b/llvm/lib/AsmParser/llvmAsmParser.cpp.cvs
@@ -1,288 +1,123 @@
-/* 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	SINTVAL	259
+#define	UINTVAL	260
+#define	FPVAL	261
+#define	VOID	262
+#define	BOOL	263
+#define	SBYTE	264
+#define	UBYTE	265
+#define	SHORT	266
+#define	USHORT	267
+#define	INT	268
+#define	UINT	269
+#define	LONG	270
+#define	ULONG	271
+#define	FLOAT	272
+#define	DOUBLE	273
+#define	TYPE	274
+#define	LABEL	275
+#define	VAR_ID	276
+#define	LABELSTR	277
+#define	STRINGCONSTANT	278
+#define	IMPLEMENTATION	279
+#define	ZEROINITIALIZER	280
+#define	TRUETOK	281
+#define	FALSETOK	282
+#define	BEGINTOK	283
+#define	ENDTOK	284
+#define	DECLARE	285
+#define	GLOBAL	286
+#define	CONSTANT	287
+#define	SECTION	288
+#define	VOLATILE	289
+#define	TO	290
+#define	DOTDOTDOT	291
+#define	NULL_TOK	292
+#define	UNDEF	293
+#define	CONST	294
+#define	INTERNAL	295
+#define	LINKONCE	296
+#define	WEAK	297
+#define	APPENDING	298
+#define	DLLIMPORT	299
+#define	DLLEXPORT	300
+#define	EXTERN_WEAK	301
+#define	OPAQUE	302
+#define	NOT	303
+#define	EXTERNAL	304
+#define	TARGET	305
+#define	TRIPLE	306
+#define	ENDIAN	307
+#define	POINTERSIZE	308
+#define	LITTLE	309
+#define	BIG	310
+#define	ALIGN	311
+#define	DEPLIBS	312
+#define	CALL	313
+#define	TAIL	314
+#define	ASM_TOK	315
+#define	MODULE	316
+#define	SIDEEFFECT	317
+#define	CC_TOK	318
+#define	CCC_TOK	319
+#define	CSRETCC_TOK	320
+#define	FASTCC_TOK	321
+#define	COLDCC_TOK	322
+#define	X86_STDCALLCC_TOK	323
+#define	X86_FASTCALLCC_TOK	324
+#define	RET	325
+#define	BR	326
+#define	SWITCH	327
+#define	INVOKE	328
+#define	UNWIND	329
+#define	UNREACHABLE	330
+#define	ADD	331
+#define	SUB	332
+#define	MUL	333
+#define	DIV	334
+#define	REM	335
+#define	AND	336
+#define	OR	337
+#define	XOR	338
+#define	SETLE	339
+#define	SETGE	340
+#define	SETLT	341
+#define	SETGT	342
+#define	SETEQ	343
+#define	SETNE	344
+#define	MALLOC	345
+#define	ALLOCA	346
+#define	FREE	347
+#define	LOAD	348
+#define	STORE	349
+#define	GETELEMENTPTR	350
+#define	PHI_TOK	351
+#define	CAST	352
+#define	SELECT	353
+#define	SHL	354
+#define	SHR	355
+#define	VAARG	356
+#define	EXTRACTELEMENT	357
+#define	INSERTELEMENT	358
+#define	SHUFFLEVECTOR	359
+#define	VAARG_old	360
+#define	VANEXT_old	361
 
-
-/* Tokens.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     ESINT64VAL = 258,
-     EUINT64VAL = 259,
-     SINTVAL = 260,
-     UINTVAL = 261,
-     FPVAL = 262,
-     VOID = 263,
-     BOOL = 264,
-     SBYTE = 265,
-     UBYTE = 266,
-     SHORT = 267,
-     USHORT = 268,
-     INT = 269,
-     UINT = 270,
-     LONG = 271,
-     ULONG = 272,
-     FLOAT = 273,
-     DOUBLE = 274,
-     TYPE = 275,
-     LABEL = 276,
-     VAR_ID = 277,
-     LABELSTR = 278,
-     STRINGCONSTANT = 279,
-     IMPLEMENTATION = 280,
-     ZEROINITIALIZER = 281,
-     TRUETOK = 282,
-     FALSETOK = 283,
-     BEGINTOK = 284,
-     ENDTOK = 285,
-     DECLARE = 286,
-     GLOBAL = 287,
-     CONSTANT = 288,
-     SECTION = 289,
-     VOLATILE = 290,
-     TO = 291,
-     DOTDOTDOT = 292,
-     NULL_TOK = 293,
-     UNDEF = 294,
-     CONST = 295,
-     INTERNAL = 296,
-     LINKONCE = 297,
-     WEAK = 298,
-     APPENDING = 299,
-     DLLIMPORT = 300,
-     DLLEXPORT = 301,
-     EXTERN_WEAK = 302,
-     OPAQUE = 303,
-     NOT = 304,
-     EXTERNAL = 305,
-     TARGET = 306,
-     TRIPLE = 307,
-     ENDIAN = 308,
-     POINTERSIZE = 309,
-     LITTLE = 310,
-     BIG = 311,
-     ALIGN = 312,
-     DEPLIBS = 313,
-     CALL = 314,
-     TAIL = 315,
-     ASM_TOK = 316,
-     MODULE = 317,
-     SIDEEFFECT = 318,
-     CC_TOK = 319,
-     CCC_TOK = 320,
-     CSRETCC_TOK = 321,
-     FASTCC_TOK = 322,
-     COLDCC_TOK = 323,
-     X86_STDCALLCC_TOK = 324,
-     X86_FASTCALLCC_TOK = 325,
-     RET = 326,
-     BR = 327,
-     SWITCH = 328,
-     INVOKE = 329,
-     UNWIND = 330,
-     UNREACHABLE = 331,
-     ADD = 332,
-     SUB = 333,
-     MUL = 334,
-     DIV = 335,
-     REM = 336,
-     AND = 337,
-     OR = 338,
-     XOR = 339,
-     SETLE = 340,
-     SETGE = 341,
-     SETLT = 342,
-     SETGT = 343,
-     SETEQ = 344,
-     SETNE = 345,
-     MALLOC = 346,
-     ALLOCA = 347,
-     FREE = 348,
-     LOAD = 349,
-     STORE = 350,
-     GETELEMENTPTR = 351,
-     PHI_TOK = 352,
-     CAST = 353,
-     SELECT = 354,
-     SHL = 355,
-     SHR = 356,
-     VAARG = 357,
-     EXTRACTELEMENT = 358,
-     INSERTELEMENT = 359,
-     SHUFFLEVECTOR = 360,
-     VAARG_old = 361,
-     VANEXT_old = 362
-   };
-#endif
-/* Tokens.  */
-#define ESINT64VAL 258
-#define EUINT64VAL 259
-#define SINTVAL 260
-#define UINTVAL 261
-#define FPVAL 262
-#define VOID 263
-#define BOOL 264
-#define SBYTE 265
-#define UBYTE 266
-#define SHORT 267
-#define USHORT 268
-#define INT 269
-#define UINT 270
-#define LONG 271
-#define ULONG 272
-#define FLOAT 273
-#define DOUBLE 274
-#define TYPE 275
-#define LABEL 276
-#define VAR_ID 277
-#define LABELSTR 278
-#define STRINGCONSTANT 279
-#define IMPLEMENTATION 280
-#define ZEROINITIALIZER 281
-#define TRUETOK 282
-#define FALSETOK 283
-#define BEGINTOK 284
-#define ENDTOK 285
-#define DECLARE 286
-#define GLOBAL 287
-#define CONSTANT 288
-#define SECTION 289
-#define VOLATILE 290
-#define TO 291
-#define DOTDOTDOT 292
-#define NULL_TOK 293
-#define UNDEF 294
-#define CONST 295
-#define INTERNAL 296
-#define LINKONCE 297
-#define WEAK 298
-#define APPENDING 299
-#define DLLIMPORT 300
-#define DLLEXPORT 301
-#define EXTERN_WEAK 302
-#define OPAQUE 303
-#define NOT 304
-#define EXTERNAL 305
-#define TARGET 306
-#define TRIPLE 307
-#define ENDIAN 308
-#define POINTERSIZE 309
-#define LITTLE 310
-#define BIG 311
-#define ALIGN 312
-#define DEPLIBS 313
-#define CALL 314
-#define TAIL 315
-#define ASM_TOK 316
-#define MODULE 317
-#define SIDEEFFECT 318
-#define CC_TOK 319
-#define CCC_TOK 320
-#define CSRETCC_TOK 321
-#define FASTCC_TOK 322
-#define COLDCC_TOK 323
-#define X86_STDCALLCC_TOK 324
-#define X86_FASTCALLCC_TOK 325
-#define RET 326
-#define BR 327
-#define SWITCH 328
-#define INVOKE 329
-#define UNWIND 330
-#define UNREACHABLE 331
-#define ADD 332
-#define SUB 333
-#define MUL 334
-#define DIV 335
-#define REM 336
-#define AND 337
-#define OR 338
-#define XOR 339
-#define SETLE 340
-#define SETGE 341
-#define SETLT 342
-#define SETGT 343
-#define SETEQ 344
-#define SETNE 345
-#define MALLOC 346
-#define ALLOCA 347
-#define FREE 348
-#define LOAD 349
-#define STORE 350
-#define GETELEMENTPTR 351
-#define PHI_TOK 352
-#define CAST 353
-#define SELECT 354
-#define SHL 355
-#define SHR 356
-#define VAARG 357
-#define EXTRACTELEMENT 358
-#define INSERTELEMENT 359
-#define SHUFFLEVECTOR 360
-#define VAARG_old 361
-#define VANEXT_old 362
-
-
-
-
-/* Copy the first part of user declarations.  */
-#line 14 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 14 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 
 #include "ParserInternals.h"
 #include "llvm/CallingConv.h"
@@ -1234,28 +1069,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 966 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-typedef union YYSTYPE {
+#line 966 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+typedef union {
   llvm::Module                           *ModuleVal;
   llvm::Function                         *FunctionVal;
   std::pair<llvm::PATypeHolder*, char*>  *ArgVal;
@@ -1294,1457 +1109,997 @@
   llvm::Instruction::OtherOps             OtherOpVal;
   llvm::Module::Endianness                Endianness;
 } YYSTYPE;
-/* Line 196 of yacc.c.  */
-#line 1299 "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		514
+#define	YYFLAG		-32768
+#define	YYNTBASE	122
 
+#define YYTRANSLATE(x) ((unsigned)(x) <= 361 ? yytranslate[x] : 196)
 
-/* Line 219 of yacc.c.  */
-#line 1311 "llvmAsmParser.tab.c"
+static const 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,   111,
+   112,   120,     2,   109,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,   116,
+   108,   117,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+   113,   110,   115,     2,     2,     2,     2,     2,   121,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,   114,
+     2,     2,   118,     2,   119,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     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
+};
 
-#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,    67,    68,    70,    72,    74,    76,    78,
+    80,    82,    83,    84,    86,    88,    90,    92,    94,    96,
+    99,   100,   103,   104,   108,   111,   112,   114,   115,   119,
+   121,   124,   126,   128,   130,   132,   134,   136,   138,   140,
+   142,   144,   146,   148,   150,   152,   154,   156,   158,   160,
+   162,   164,   166,   169,   174,   180,   186,   190,   193,   196,
+   198,   202,   204,   208,   210,   211,   216,   220,   224,   229,
+   234,   238,   241,   244,   247,   250,   253,   256,   259,   262,
+   265,   268,   275,   281,   290,   297,   304,   311,   318,   325,
+   334,   343,   347,   349,   351,   353,   355,   358,   361,   366,
+   369,   371,   376,   379,   384,   385,   393,   394,   402,   403,
+   411,   412,   420,   424,   429,   430,   432,   434,   436,   440,
+   444,   448,   452,   456,   458,   459,   461,   463,   465,   466,
+   469,   473,   475,   477,   481,   483,   484,   493,   495,   497,
+   501,   503,   505,   508,   509,   511,   513,   514,   519,   520,
+   522,   524,   526,   528,   530,   532,   534,   536,   538,   542,
+   544,   550,   552,   554,   556,   558,   561,   564,   567,   571,
+   574,   575,   577,   580,   583,   587,   597,   607,   616,   630,
+   632,   634,   641,   647,   650,   657,   665,   667,   671,   673,
+   674,   677,   679,   685,   691,   697,   700,   705,   710,   717,
+   722,   727,   732,   737,   744,   751,   754,   762,   764,   767,
+   768,   770,   771,   775,   782,   786,   793,   796,   801,   808
+};
 
-#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[] = {     5,
+     0,     6,     0,     3,     0,     4,     0,    77,     0,    78,
+     0,    79,     0,    80,     0,    81,     0,    82,     0,    83,
+     0,    84,     0,    85,     0,    86,     0,    87,     0,    88,
+     0,    89,     0,    90,     0,   100,     0,   101,     0,    16,
+     0,    14,     0,    12,     0,    10,     0,    17,     0,    15,
+     0,    13,     0,    11,     0,   128,     0,   129,     0,    18,
+     0,    19,     0,   164,   108,     0,     0,    41,     0,    42,
+     0,    43,     0,    44,     0,    45,     0,    46,     0,    47,
+     0,     0,     0,    65,     0,    66,     0,    67,     0,    68,
+     0,    69,     0,    70,     0,    64,     4,     0,     0,    57,
+     4,     0,     0,   109,    57,     4,     0,    34,    24,     0,
+     0,   137,     0,     0,   109,   140,   139,     0,   137,     0,
+    57,     4,     0,   143,     0,     8,     0,   145,     0,     8,
+     0,   145,     0,     9,     0,    10,     0,    11,     0,    12,
+     0,    13,     0,    14,     0,    15,     0,    16,     0,    17,
+     0,    18,     0,    19,     0,    20,     0,    21,     0,    48,
+     0,   144,     0,   179,     0,   110,     4,     0,   142,   111,
+   147,   112,     0,   113,     4,   114,   145,   115,     0,   116,
+     4,   114,   145,   117,     0,   118,   146,   119,     0,   118,
+   119,     0,   145,   120,     0,   145,     0,   146,   109,   145,
+     0,   146,     0,   146,   109,    37,     0,    37,     0,     0,
+   143,   113,   150,   115,     0,   143,   113,   115,     0,   143,
+   121,    24,     0,   143,   116,   150,   117,     0,   143,   118,
+   150,   119,     0,   143,   118,   119,     0,   143,    38,     0,
+   143,    39,     0,   143,   179,     0,   143,   149,     0,   143,
+    26,     0,   128,   123,     0,   129,     4,     0,     9,    27,
+     0,     9,    28,     0,   131,     7,     0,    98,   111,   148,
+    36,   143,   112,     0,    96,   111,   148,   193,   112,     0,
+    99,   111,   148,   109,   148,   109,   148,   112,     0,   124,
+   111,   148,   109,   148,   112,     0,   125,   111,   148,   109,
+   148,   112,     0,   126,   111,   148,   109,   148,   112,     0,
+   127,   111,   148,   109,   148,   112,     0,   103,   111,   148,
+   109,   148,   112,     0,   104,   111,   148,   109,   148,   109,
+   148,   112,     0,   105,   111,   148,   109,   148,   109,   148,
+   112,     0,   150,   109,   148,     0,   148,     0,    32,     0,
+    33,     0,   153,     0,   153,   173,     0,   153,   175,     0,
+   153,    62,    61,   159,     0,   153,    25,     0,   154,     0,
+   154,   132,    20,   141,     0,   154,   175,     0,   154,    62,
+    61,   159,     0,     0,   154,   132,   133,   151,   148,   155,
+   139,     0,     0,   154,   132,    50,   151,   143,   156,   139,
+     0,     0,   154,   132,    45,   151,   143,   157,   139,     0,
+     0,   154,   132,    47,   151,   143,   158,   139,     0,   154,
+    51,   161,     0,   154,    58,   108,   162,     0,     0,    24,
+     0,    56,     0,    55,     0,    53,   108,   160,     0,    54,
+   108,     4,     0,    52,   108,    24,     0,   113,   163,   115,
+     0,   163,   109,    24,     0,    24,     0,     0,    22,     0,
+    24,     0,   164,     0,     0,   143,   165,     0,   167,   109,
+   166,     0,   166,     0,   167,     0,   167,   109,    37,     0,
+    37,     0,     0,   134,   141,   164,   111,   168,   112,   138,
+   135,     0,    29,     0,   118,     0,   133,   169,   170,     0,
+    30,     0,   119,     0,   182,   172,     0,     0,    45,     0,
+    47,     0,     0,    31,   176,   174,   169,     0,     0,    63,
+     0,     3,     0,     4,     0,     7,     0,    27,     0,    28,
+     0,    38,     0,    39,     0,    26,     0,   116,   150,   117,
+     0,   149,     0,    61,   177,    24,   109,    24,     0,   122,
+     0,   164,     0,   179,     0,   178,     0,   143,   180,     0,
+   182,   183,     0,   171,   183,     0,   184,   132,   185,     0,
+   184,   187,     0,     0,    23,     0,    71,   181,     0,    71,
+     8,     0,    72,    21,   180,     0,    72,     9,   180,   109,
+    21,   180,   109,    21,   180,     0,    73,   130,   180,   109,
+    21,   180,   113,   186,   115,     0,    73,   130,   180,   109,
+    21,   180,   113,   115,     0,    74,   134,   141,   180,   111,
+   190,   112,    36,    21,   180,    75,    21,   180,     0,    75,
+     0,    76,     0,   186,   130,   178,   109,    21,   180,     0,
+   130,   178,   109,    21,   180,     0,   132,   192,     0,   143,
+   113,   180,   109,   180,   115,     0,   188,   109,   113,   180,
+   109,   180,   115,     0,   181,     0,   189,   109,   181,     0,
+   189,     0,     0,    60,    59,     0,    59,     0,   124,   143,
+   180,   109,   180,     0,   125,   143,   180,   109,   180,     0,
+   126,   143,   180,   109,   180,     0,    49,   181,     0,   127,
+   181,   109,   181,     0,    98,   181,    36,   143,     0,    99,
+   181,   109,   181,   109,   181,     0,   102,   181,   109,   143,
+     0,   106,   181,   109,   143,     0,   107,   181,   109,   143,
+     0,   103,   181,   109,   181,     0,   104,   181,   109,   181,
+   109,   181,     0,   105,   181,   109,   181,   109,   181,     0,
+    97,   188,     0,   191,   134,   141,   180,   111,   190,   112,
+     0,   195,     0,   109,   189,     0,     0,    35,     0,     0,
+    91,   143,   136,     0,    91,   143,   109,    15,   180,   136,
+     0,    92,   143,   136,     0,    92,   143,   109,    15,   180,
+   136,     0,    93,   181,     0,   194,    94,   143,   180,     0,
+   194,    95,   181,   109,   143,   180,     0,    96,   143,   180,
+   193,     0
+};
 
 #endif
 
-#if defined (__STDC__) || defined (__cplusplus)
-   typedef signed char yysigned_char;
+#if YYDEBUG != 0
+static const short yyrline[] = { 0,
+  1088,  1089,  1097,  1098,  1108,  1108,  1108,  1108,  1108,  1109,
+  1109,  1109,  1110,  1110,  1110,  1110,  1110,  1110,  1112,  1112,
+  1116,  1116,  1116,  1116,  1117,  1117,  1117,  1117,  1118,  1118,
+  1119,  1119,  1122,  1126,  1131,  1131,  1132,  1133,  1134,  1135,
+  1136,  1137,  1140,  1140,  1141,  1142,  1143,  1144,  1145,  1146,
+  1156,  1156,  1163,  1163,  1172,  1180,  1180,  1186,  1186,  1188,
+  1193,  1207,  1207,  1208,  1208,  1210,  1220,  1220,  1220,  1220,
+  1220,  1220,  1220,  1221,  1221,  1221,  1221,  1221,  1221,  1222,
+  1226,  1230,  1238,  1246,  1259,  1264,  1276,  1286,  1290,  1299,
+  1304,  1310,  1311,  1315,  1319,  1330,  1356,  1370,  1400,  1426,
+  1447,  1460,  1470,  1475,  1536,  1543,  1552,  1558,  1564,  1568,
+  1572,  1580,  1591,  1623,  1631,  1653,  1664,  1670,  1678,  1684,
+  1690,  1699,  1703,  1711,  1711,  1721,  1729,  1734,  1738,  1742,
+  1746,  1761,  1783,  1786,  1789,  1794,  1797,  1801,  1805,  1809,
+  1813,  1818,  1822,  1825,  1828,  1832,  1845,  1846,  1848,  1852,
+  1861,  1867,  1869,  1874,  1879,  1888,  1888,  1889,  1889,  1891,
+  1898,  1904,  1911,  1915,  1921,  1926,  1931,  2026,  2026,  2028,
+  2036,  2036,  2038,  2043,  2043,  2044,  2047,  2047,  2057,  2061,
+  2066,  2070,  2074,  2078,  2082,  2086,  2090,  2094,  2098,  2123,
+  2127,  2141,  2145,  2151,  2151,  2157,  2162,  2166,  2175,  2186,
+  2191,  2203,  2216,  2220,  2224,  2229,  2238,  2257,  2266,  2322,
+  2326,  2333,  2344,  2357,  2366,  2375,  2385,  2389,  2396,  2396,
+  2398,  2402,  2407,  2423,  2438,  2452,  2465,  2473,  2481,  2489,
+  2495,  2515,  2538,  2544,  2550,  2556,  2571,  2630,  2637,  2640,
+  2645,  2649,  2656,  2661,  2667,  2672,  2678,  2686,  2698,  2713
+};
+#endif
+
+
+#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
+
+static const char * const yytname[] = {   "$","error","$undefined.","ESINT64VAL",
+"EUINT64VAL","SINTVAL","UINTVAL","FPVAL","VOID","BOOL","SBYTE","UBYTE","SHORT",
+"USHORT","INT","UINT","LONG","ULONG","FLOAT","DOUBLE","TYPE","LABEL","VAR_ID",
+"LABELSTR","STRINGCONSTANT","IMPLEMENTATION","ZEROINITIALIZER","TRUETOK","FALSETOK",
+"BEGINTOK","ENDTOK","DECLARE","GLOBAL","CONSTANT","SECTION","VOLATILE","TO",
+"DOTDOTDOT","NULL_TOK","UNDEF","CONST","INTERNAL","LINKONCE","WEAK","APPENDING",
+"DLLIMPORT","DLLEXPORT","EXTERN_WEAK","OPAQUE","NOT","EXTERNAL","TARGET","TRIPLE",
+"ENDIAN","POINTERSIZE","LITTLE","BIG","ALIGN","DEPLIBS","CALL","TAIL","ASM_TOK",
+"MODULE","SIDEEFFECT","CC_TOK","CCC_TOK","CSRETCC_TOK","FASTCC_TOK","COLDCC_TOK",
+"X86_STDCALLCC_TOK","X86_FASTCALLCC_TOK","RET","BR","SWITCH","INVOKE","UNWIND",
+"UNREACHABLE","ADD","SUB","MUL","DIV","REM","AND","OR","XOR","SETLE","SETGE",
+"SETLT","SETGT","SETEQ","SETNE","MALLOC","ALLOCA","FREE","LOAD","STORE","GETELEMENTPTR",
+"PHI_TOK","CAST","SELECT","SHL","SHR","VAARG","EXTRACTELEMENT","INSERTELEMENT",
+"SHUFFLEVECTOR","VAARG_old","VANEXT_old","'='","','","'\\\\'","'('","')'","'['",
+"'x'","']'","'<'","'>'","'{'","'}'","'*'","'c'","INTVAL","EINT64VAL","ArithmeticOps",
+"LogicalOps","SetCondOps","ShiftOps","SIntType","UIntType","IntType","FPType",
+"OptAssign","OptLinkage","OptCallingConv","OptAlign","OptCAlign","SectionString",
+"OptSection","GlobalVarAttributes","GlobalVarAttribute","TypesV","UpRTypesV",
+"Types","PrimType","UpRTypes","TypeListI","ArgTypeListI","ConstVal","ConstExpr",
+"ConstVector","GlobalType","Module","FunctionList","ConstPool","@1","@2","@3",
+"@4","AsmBlock","BigOrLittle","TargetDefinition","LibrariesDefinition","LibList",
+"Name","OptName","ArgVal","ArgListH","ArgList","FunctionHeaderH","BEGIN","FunctionHeader",
+"END","Function","FnDeclareLinkage","FunctionProto","@5","OptSideEffect","ConstValueRef",
+"SymbolicValueRef","ValueRef","ResolvedVal","BasicBlockList","BasicBlock","InstructionList",
+"BBTerminatorInst","JumpTable","Inst","PHIList","ValueRefList","ValueRefListE",
+"OptTailCall","InstVal","IndexList","OptVolatile","MemoryInst", NULL
+};
+#endif
+
+static const short yyr1[] = {     0,
+   122,   122,   123,   123,   124,   124,   124,   124,   124,   125,
+   125,   125,   126,   126,   126,   126,   126,   126,   127,   127,
+   128,   128,   128,   128,   129,   129,   129,   129,   130,   130,
+   131,   131,   132,   132,   133,   133,   133,   133,   133,   133,
+   133,   133,   134,   134,   134,   134,   134,   134,   134,   134,
+   135,   135,   136,   136,   137,   138,   138,   139,   139,   140,
+   140,   141,   141,   142,   142,   143,   144,   144,   144,   144,
+   144,   144,   144,   144,   144,   144,   144,   144,   144,   145,
+   145,   145,   145,   145,   145,   145,   145,   145,   145,   146,
+   146,   147,   147,   147,   147,   148,   148,   148,   148,   148,
+   148,   148,   148,   148,   148,   148,   148,   148,   148,   148,
+   148,   149,   149,   149,   149,   149,   149,   149,   149,   149,
+   149,   150,   150,   151,   151,   152,   153,   153,   153,   153,
+   153,   154,   154,   154,   155,   154,   156,   154,   157,   154,
+   158,   154,   154,   154,   154,   159,   160,   160,   161,   161,
+   161,   162,   163,   163,   163,   164,   164,   165,   165,   166,
+   167,   167,   168,   168,   168,   168,   169,   170,   170,   171,
+   172,   172,   173,   174,   174,   174,   176,   175,   177,   177,
+   178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
+   178,   179,   179,   180,   180,   181,   182,   182,   183,   184,
+   184,   184,   185,   185,   185,   185,   185,   185,   185,   185,
+   185,   186,   186,   187,   188,   188,   189,   189,   190,   190,
+   191,   191,   192,   192,   192,   192,   192,   192,   192,   192,
+   192,   192,   192,   192,   192,   192,   192,   192,   193,   193,
+   194,   194,   195,   195,   195,   195,   195,   195,   195,   195
+};
+
+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,     2,     0,     1,     1,     1,     1,     1,     1,
+     1,     0,     0,     1,     1,     1,     1,     1,     1,     2,
+     0,     2,     0,     3,     2,     0,     1,     0,     3,     1,
+     2,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+     1,     1,     2,     4,     5,     5,     3,     2,     2,     1,
+     3,     1,     3,     1,     0,     4,     3,     3,     4,     4,
+     3,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     6,     5,     8,     6,     6,     6,     6,     6,     8,
+     8,     3,     1,     1,     1,     1,     2,     2,     4,     2,
+     1,     4,     2,     4,     0,     7,     0,     7,     0,     7,
+     0,     7,     3,     4,     0,     1,     1,     1,     3,     3,
+     3,     3,     3,     1,     0,     1,     1,     1,     0,     2,
+     3,     1,     1,     3,     1,     0,     8,     1,     1,     3,
+     1,     1,     2,     0,     1,     1,     0,     4,     0,     1,
+     1,     1,     1,     1,     1,     1,     1,     1,     3,     1,
+     5,     1,     1,     1,     1,     2,     2,     2,     3,     2,
+     0,     1,     2,     2,     3,     9,     9,     8,    13,     1,
+     1,     6,     5,     2,     6,     7,     1,     3,     1,     0,
+     2,     1,     5,     5,     5,     2,     4,     4,     6,     4,
+     4,     4,     4,     6,     6,     2,     7,     1,     2,     0,
+     1,     0,     3,     6,     3,     6,     2,     4,     6,     4
+};
+
+static const short yydefact[] = {   145,
+    42,   131,   130,   177,    35,    36,    37,    38,    39,    40,
+    41,     0,    43,   201,   127,   128,   201,   156,   157,     0,
+     0,     0,    42,     0,   133,   174,     0,     0,    44,    45,
+    46,    47,    48,    49,     0,     0,   202,   198,    34,   171,
+   172,   173,   197,     0,     0,     0,   143,     0,     0,     0,
+     0,     0,     0,     0,    33,   175,   176,    43,   146,   129,
+    50,     1,     2,    63,    67,    68,    69,    70,    71,    72,
+    73,    74,    75,    76,    77,    78,    79,    80,     0,     0,
+     0,     0,   192,     0,     0,    62,    81,    66,   193,    82,
+   168,   169,   170,   242,   200,     0,     0,     0,   155,   144,
+   134,   132,   124,   125,     0,     0,     0,     0,   178,    83,
+     0,     0,    65,    88,    90,     0,     0,    95,    89,   241,
+     0,   222,     0,     0,     0,     0,    43,   210,   211,     5,
+     6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+    16,    17,    18,     0,     0,     0,     0,     0,     0,     0,
+    19,    20,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   199,    43,   214,     0,   238,   151,   148,   147,
+   149,   150,   154,     0,   139,   141,   137,    67,    68,    69,
+    70,    71,    72,    73,    74,    75,    76,    77,     0,     0,
+     0,     0,   135,     0,     0,     0,    87,   166,    94,    92,
+     0,     0,   226,   221,   204,   203,     0,     0,    24,    28,
+    23,    27,    22,    26,    21,    25,    29,    30,     0,     0,
+    53,    53,   247,     0,     0,   236,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   152,    58,    58,    58,   109,   110,     3,     4,
+   107,   108,   111,   106,   102,   103,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   105,   104,    58,    64,    64,    91,   165,   159,   162,   163,
+     0,     0,    84,   181,   182,   183,   188,   184,   185,   186,
+   187,   179,     0,   190,   195,   194,   196,     0,   205,     0,
+     0,     0,   243,     0,   245,   240,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   153,     0,   140,   142,   138,     0,     0,
+     0,     0,     0,     0,    97,   123,     0,     0,   101,     0,
+    98,     0,     0,     0,     0,   136,    85,    86,   158,   160,
+     0,    56,    93,   180,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   250,     0,     0,   228,     0,   230,   233,
+     0,     0,   231,   232,     0,     0,     0,   227,     0,   248,
+     0,     0,     0,    60,    58,   240,     0,     0,     0,     0,
+     0,     0,    96,    99,   100,     0,     0,     0,     0,   164,
+   161,    57,    51,     0,   189,     0,     0,   220,    53,    54,
+    53,   217,   239,     0,     0,     0,     0,     0,   223,   224,
+   225,   220,     0,    55,    61,    59,     0,     0,     0,     0,
+     0,     0,   122,     0,     0,     0,     0,     0,   167,     0,
+     0,     0,   219,     0,     0,   244,   246,     0,     0,     0,
+   229,   234,   235,     0,   249,   113,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,    52,   191,     0,     0,     0,
+   218,   215,     0,   237,   112,     0,   119,     0,     0,   115,
+   116,   117,   118,     0,   208,     0,     0,     0,   216,     0,
+     0,     0,   206,     0,   207,     0,     0,   114,   120,   121,
+     0,     0,     0,     0,     0,     0,   213,     0,     0,   212,
+   209,     0,     0,     0
+};
+
+static const short yydefgoto[] = {    83,
+   251,   267,   268,   269,   270,   189,   190,   219,   191,    23,
+    13,    35,   439,   303,   384,   403,   326,   385,    84,    85,
+   192,    87,    88,   116,   201,   336,   294,   337,   105,   512,
+     1,     2,   273,   246,   244,   245,    60,   171,    47,   100,
+   174,    89,   350,   279,   280,   281,    36,    93,    14,    42,
+    15,    58,    16,    26,   355,   295,    90,   297,   412,    17,
+    38,    39,   163,   487,    95,   226,   443,   444,   164,   165,
+   364,   166,   167
+};
+
+static const short yypact[] = {-32768,
+   194,   602,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,   -20,    38,    59,-32768,-32768,   -18,-32768,-32768,    13,
+    -8,    75,   115,    58,-32768,    40,   124,   163,-32768,-32768,
+-32768,-32768,-32768,-32768,  1052,   -22,-32768,-32768,    -3,-32768,
+-32768,-32768,-32768,    60,    65,    67,-32768,    57,   124,  1052,
+    62,    62,    62,    62,-32768,-32768,-32768,    38,-32768,-32768,
+-32768,-32768,-32768,    61,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   167,   172,
+   173,   569,-32768,    -3,    68,-32768,-32768,   -30,-32768,-32768,
+-32768,-32768,-32768,  1223,-32768,   159,    42,   180,   162,-32768,
+-32768,-32768,-32768,-32768,  1093,  1093,  1093,  1134,-32768,-32768,
+    73,    74,-32768,-32768,   -30,   -75,    78,   847,-32768,-32768,
+  1093,-32768,   132,  1175,    14,   185,    38,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,  1093,  1093,  1093,  1093,  1093,  1093,  1093,
+-32768,-32768,  1093,  1093,  1093,  1093,  1093,  1093,  1093,  1093,
+  1093,  1093,-32768,    38,-32768,    22,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,   -47,-32768,-32768,-32768,   111,   137,   199,
+   140,   203,   142,   204,   147,   205,   210,   211,   151,   206,
+   213,   412,-32768,  1093,  1093,  1093,-32768,   888,-32768,   103,
+   110,   635,-32768,-32768,    61,-32768,   635,   635,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   635,  1052,
+   114,   117,-32768,   635,   134,   118,   188,   119,   139,   141,
+   144,   145,   146,   148,   635,   635,   635,   149,  1052,  1093,
+  1093,   225,-32768,   150,   150,   150,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,   152,   153,   154,   157,
+   158,   175,   929,  1134,   589,   227,   176,   178,   179,   182,
+-32768,-32768,   150,   -51,   -72,   -30,-32768,    -3,-32768,   161,
+   183,   970,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,   197,  1134,-32768,-32768,-32768,-32768,   164,-32768,   187,
+   635,    -4,-32768,     3,-32768,   189,   635,   171,  1093,  1093,
+  1093,  1093,  1093,  1093,  1093,  1093,   193,   195,   200,  1093,
+   635,   635,   201,-32768,   -17,-32768,-32768,-32768,  1134,  1134,
+  1134,  1134,  1134,  1134,-32768,-32768,   -16,   -26,-32768,   -73,
+-32768,  1134,  1134,  1134,  1134,-32768,-32768,-32768,-32768,-32768,
+  1011,   228,-32768,-32768,   237,   -25,   270,   273,   186,   635,
+   299,   635,  1093,-32768,   214,   635,-32768,   215,-32768,-32768,
+   216,   217,-32768,-32768,   635,   635,   635,-32768,   202,-32768,
+  1093,   282,   304,-32768,   150,   189,   276,   218,   224,   229,
+   230,  1134,-32768,-32768,-32768,   231,   232,   233,   234,-32768,
+-32768,-32768,   257,   238,-32768,   635,   635,  1093,   239,-32768,
+   239,-32768,   241,   635,   244,  1093,  1093,  1093,-32768,-32768,
+-32768,  1093,   635,-32768,-32768,-32768,   242,  1093,  1134,  1134,
+  1134,  1134,-32768,  1134,  1134,  1134,  1134,   311,-32768,   331,
+   247,   245,   241,   248,   300,-32768,-32768,  1093,   246,   635,
+-32768,-32768,-32768,   252,-32768,-32768,   254,   258,   260,   261,
+   265,   263,   268,   272,   277,-32768,-32768,   348,    16,   341,
+-32768,-32768,   275,-32768,-32768,  1134,-32768,  1134,  1134,-32768,
+-32768,-32768,-32768,   635,-32768,   738,    63,   367,-32768,   279,
+   280,   284,-32768,   285,-32768,   738,   635,-32768,-32768,-32768,
+   376,   289,   324,   635,   379,   380,-32768,   635,   635,-32768,
+-32768,   402,   403,-32768
+};
+
+static const short yypgoto[] = {-32768,
+-32768,   310,   312,   313,   314,  -125,  -124,  -449,-32768,   366,
+   386,  -103,-32768,  -219,    69,-32768,  -236,-32768,   -46,-32768,
+   -35,-32768,   -66,   292,-32768,  -100,   219,  -251,    80,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,   363,-32768,-32768,-32768,
+-32768,     4,-32768,    71,-32768,-32768,   356,-32768,-32768,-32768,
+-32768,-32768,   413,-32768,-32768,  -447,   -55,    64,   -99,-32768,
+   399,-32768,-32768,-32768,-32768,-32768,    56,    -2,-32768,-32768,
+    37,-32768,-32768
+};
+
+
+#define	YYLAST		1330
+
+
+static const short yytable[] = {    86,
+   217,   218,   305,   102,    37,    24,    91,   193,   327,   328,
+   360,    40,   338,   340,    86,   115,   382,   362,    18,   486,
+    19,   203,   207,   220,   206,   209,   210,   211,   212,   213,
+   214,   215,   216,   196,   208,   392,   346,   496,   494,   383,
+    27,   356,    24,   197,   348,   395,   223,   119,   502,   227,
+   228,   115,   361,   229,   230,   231,   232,   233,   234,   361,
+   239,   242,   238,   347,    44,    45,    46,   243,   119,   175,
+   176,   177,   209,   210,   211,   212,   213,   214,   215,   216,
+   -64,    37,   392,   392,    56,   202,    57,   117,   202,   119,
+   394,   405,   392,   103,   104,    92,   169,   170,   393,    48,
+    41,    28,    29,    30,    31,    32,    33,    34,   221,   222,
+   202,   224,   225,   202,   202,   240,   241,   202,   202,   202,
+   202,   202,   202,   235,   236,   237,   202,   274,   275,   276,
+   485,   106,   107,   108,    50,    49,   272,   247,   248,   -24,
+   -24,   323,   -23,   -23,   -22,   -22,   296,    59,   426,   -21,
+   -21,   296,   296,   249,   250,     5,     6,     7,     8,    51,
+    10,    52,   278,   296,    53,    55,    61,    96,   296,    99,
+   110,   -65,    97,   301,    98,   111,   112,   495,   118,   296,
+   296,   296,   168,   172,    86,   173,   194,   195,   198,   446,
+   204,   447,   321,  -126,   209,   210,   211,   212,   213,   214,
+   215,   216,   -28,    86,   322,   202,   -27,   -26,   -25,   252,
+   368,   282,   370,   371,   372,   276,   -31,   -32,     3,   253,
+   378,   283,   302,   309,     4,   304,   308,   310,   386,   387,
+   388,   389,   390,   391,     5,     6,     7,     8,     9,    10,
+    11,   396,   397,   398,   399,   296,   307,   311,   324,   312,
+   341,   296,   313,   314,   315,    12,   316,   320,   325,   354,
+   404,   382,   329,   330,   331,   296,   296,   332,   333,   351,
+   298,   299,   357,   367,   202,   369,   202,   202,   202,   373,
+   374,   349,   300,   366,   202,   334,   342,   306,   343,   344,
+   406,   433,   345,   407,   352,   358,   408,   363,   317,   318,
+   319,   375,   410,   376,   296,   424,   296,   425,   377,   381,
+   296,   428,   422,   438,   466,   278,   451,   452,   453,   296,
+   296,   296,   414,   416,   417,   418,   429,   202,   458,   459,
+   460,   461,   430,   462,   463,   464,   465,   431,   432,   434,
+   435,   436,   437,   217,   218,   423,   440,   445,   471,   448,
+   296,   296,   450,   456,   467,   468,   361,   469,   296,   470,
+   472,   217,   218,   474,   359,   475,   476,   296,   484,   478,
+   365,   477,   202,   479,   480,   490,   488,   491,   492,   481,
+   202,   202,   202,   482,   379,   380,   202,   497,   483,   489,
+   498,   499,   457,   501,   296,   500,   504,   505,   506,   508,
+   509,   513,   514,   159,    94,   160,   161,   162,    54,   200,
+   271,   101,   202,   109,    25,    43,    62,    63,   413,   454,
+   402,   401,   427,   409,     0,   411,     0,     0,   296,   415,
+     0,     0,     0,    18,     0,    19,     0,   254,   419,   420,
+   421,   296,     0,     0,     0,     0,     0,     0,   296,   255,
+   256,     0,   296,   296,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   441,
+   442,     0,     0,     0,     0,     0,     0,   449,     0,     0,
+     0,     0,     0,     0,     0,     0,   455,     0,   130,   131,
+   132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+   142,   143,     0,     0,     0,     0,     0,   257,     0,   258,
+   259,   151,   152,   473,   260,   261,   262,     0,     0,     0,
+     0,     0,     0,     0,   263,     0,     0,   264,     0,   265,
+     0,     0,   266,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   493,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   503,     0,     0,     0,     0,     0,     0,   507,     0,     0,
+     0,   510,   511,    62,    63,     0,   113,    65,    66,    67,
+    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+    18,     0,    19,    62,    63,     0,   113,   178,   179,   180,
+   181,   182,   183,   184,   185,   186,   187,   188,    76,    77,
+    18,     0,    19,     0,     0,     0,    78,     0,     0,     0,
+     0,   -34,     0,    18,     0,    19,     0,     0,     0,     0,
+     0,     0,     4,   -34,   -34,     0,    78,   284,   285,    62,
+    63,   286,   -34,   -34,   -34,   -34,   -34,   -34,   -34,     0,
+     0,   -34,    20,     0,     0,     0,    18,     0,    19,    21,
+   287,   288,   289,    22,     0,     0,     0,     0,     0,     0,
+     0,     0,   290,   291,     0,     0,     0,     0,    79,     0,
+     0,    80,     0,     0,    81,     0,    82,   114,     0,     0,
+     0,     0,     0,     0,     0,   292,     0,     0,    79,     0,
+     0,    80,     0,     0,    81,     0,    82,   339,     0,     0,
+     0,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+   139,   140,   141,   142,   143,     0,     0,     0,     0,     0,
+   257,     0,   258,   259,   151,   152,     0,   260,   261,   262,
+   284,   285,     0,     0,   286,     0,     0,     0,     0,     0,
+   293,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   287,   288,   289,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   290,   291,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   292,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   130,   131,   132,   133,   134,   135,
+   136,   137,   138,   139,   140,   141,   142,   143,     0,     0,
+     0,     0,     0,   257,     0,   258,   259,   151,   152,     0,
+   260,   261,   262,     0,     0,     0,     0,     0,     0,     0,
+     0,    62,    63,   293,   113,    65,    66,    67,    68,    69,
+    70,    71,    72,    73,    74,    75,    76,    77,    18,     0,
+    19,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   199,     0,     0,     0,     0,     0,     0,
+     0,     0,    62,    63,    78,   113,    65,    66,    67,    68,
+    69,    70,    71,    72,    73,    74,    75,    76,    77,    18,
+     0,    19,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   277,     0,     0,     0,     0,     0,
+     0,     0,     0,    62,    63,    78,   113,   178,   179,   180,
+   181,   182,   183,   184,   185,   186,   187,   188,    76,    77,
+    18,     0,    19,     0,     0,     0,    79,     0,     0,    80,
+     0,     0,    81,     0,    82,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,    62,    63,    78,   113,    65,    66,
+    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+    77,    18,     0,    19,     0,     0,     0,    79,     0,     0,
+    80,     0,     0,    81,     0,    82,   353,     0,     0,     0,
+     0,     0,     0,     0,     0,    62,    63,    78,   113,    65,
+    66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+    76,    77,    18,     0,    19,     0,     0,     0,    79,     0,
+     0,    80,     0,   335,    81,     0,    82,   400,     0,     0,
+     0,     0,     0,     0,     0,     0,    62,    63,    78,    64,
+    65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+    75,    76,    77,    18,     0,    19,     0,     0,     0,    79,
+     0,     0,    80,     0,     0,    81,     0,    82,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,    62,    63,    78,
+   113,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+    74,    75,    76,    77,    18,     0,    19,     0,     0,     0,
+    79,     0,     0,    80,     0,     0,    81,     0,    82,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    62,    63,
+    78,   113,   178,   179,   180,   181,   182,   183,   184,   185,
+   186,   187,   188,    76,    77,    18,     0,    19,     0,     0,
+     0,    79,     0,     0,    80,     0,     0,    81,     0,    82,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    62,
+    63,    78,   205,    65,    66,    67,    68,    69,    70,    71,
+    72,    73,    74,    75,    76,    77,    18,     0,    19,     0,
+     0,     0,    79,     0,     0,    80,     0,     0,    81,     0,
+    82,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,    78,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    79,     0,     0,    80,     0,     0,    81,
+     0,    82,     0,     0,     0,     0,     0,   120,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   121,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   122,   123,     0,    79,     0,     0,    80,     0,     0,
+    81,     0,    82,   124,   125,   126,   127,   128,   129,   130,
+   131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+   141,   142,   143,   144,   145,   146,     0,     0,   147,   148,
+   149,   150,   151,   152,   153,   154,   155,   156,   157,   158
+};
+
+static const short yycheck[] = {    35,
+   126,   126,   222,    50,    23,     2,    29,   108,   245,   246,
+    15,    30,   264,   265,    50,    82,    34,    15,    22,   469,
+    24,   121,     9,   127,   124,    10,    11,    12,    13,    14,
+    15,    16,    17,   109,    21,   109,   273,   487,   486,    57,
+    61,   293,    39,   119,   117,   119,   146,   120,   496,   149,
+   150,   118,    57,   153,   154,   155,   156,   157,   158,    57,
+   164,   109,   162,   115,    52,    53,    54,   115,   120,   105,
+   106,   107,    10,    11,    12,    13,    14,    15,    16,    17,
+   111,    23,   109,   109,    45,   121,    47,    84,   124,   120,
+   117,   117,   109,    32,    33,   118,    55,    56,   115,   108,
+   119,    64,    65,    66,    67,    68,    69,    70,   144,   145,
+   146,   147,   148,   149,   150,    94,    95,   153,   154,   155,
+   156,   157,   158,   159,   160,   161,   162,   194,   195,   196,
+   115,    52,    53,    54,    20,    61,   192,    27,    28,     3,
+     4,   241,     3,     4,     3,     4,   202,    24,   385,     3,
+     4,   207,   208,     3,     4,    41,    42,    43,    44,    45,
+    46,    47,   198,   219,    50,   108,     4,   108,   224,   113,
+     4,   111,   108,   220,   108,     4,     4,   115,   111,   235,
+   236,   237,    24,     4,   220,    24,   114,   114,   111,   409,
+    59,   411,   239,     0,    10,    11,    12,    13,    14,    15,
+    16,    17,     4,   239,   240,   241,     4,     4,     4,     4,
+   310,   109,   312,   313,   314,   282,     7,     7,    25,     7,
+   320,   112,   109,    36,    31,   109,   109,   109,   329,   330,
+   331,   332,   333,   334,    41,    42,    43,    44,    45,    46,
+    47,   342,   343,   344,   345,   301,   113,   109,    24,   109,
+    24,   307,   109,   109,   109,    62,   109,   109,   109,    63,
+    24,    34,   111,   111,   111,   321,   322,   111,   111,   109,
+   207,   208,   109,   309,   310,   311,   312,   313,   314,   315,
+   316,   278,   219,   113,   320,   111,   111,   224,   111,   111,
+    21,   392,   111,    21,   112,   109,   111,   109,   235,   236,
+   237,   109,     4,   109,   360,    24,   362,     4,   109,   109,
+   366,    36,   111,    57,     4,   351,   416,   417,   418,   375,
+   376,   377,   109,   109,   109,   109,   109,   363,   429,   430,
+   431,   432,   109,   434,   435,   436,   437,   109,   109,   109,
+   109,   109,   109,   469,   469,   381,   109,   109,   448,   109,
+   406,   407,   109,   112,    24,   109,    57,   113,   414,   112,
+   115,   487,   487,   112,   301,   112,   109,   423,    21,   109,
+   307,   112,   408,   109,   112,   476,    36,   478,   479,   112,
+   416,   417,   418,   112,   321,   322,   422,    21,   112,   115,
+   112,   112,   428,   109,   450,   112,    21,   109,    75,    21,
+    21,     0,     0,    94,    39,    94,    94,    94,    23,   118,
+   192,    49,   448,    58,     2,    17,     5,     6,   363,   422,
+   352,   351,   386,   360,    -1,   362,    -1,    -1,   484,   366,
+    -1,    -1,    -1,    22,    -1,    24,    -1,    26,   375,   376,
+   377,   497,    -1,    -1,    -1,    -1,    -1,    -1,   504,    38,
+    39,    -1,   508,   509,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   406,
+   407,    -1,    -1,    -1,    -1,    -1,    -1,   414,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   423,    -1,    77,    78,
+    79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+    89,    90,    -1,    -1,    -1,    -1,    -1,    96,    -1,    98,
+    99,   100,   101,   450,   103,   104,   105,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   113,    -1,    -1,   116,    -1,   118,
+    -1,    -1,   121,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   484,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   497,    -1,    -1,    -1,    -1,    -1,    -1,   504,    -1,    -1,
+    -1,   508,   509,     5,     6,    -1,     8,     9,    10,    11,
+    12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+    22,    -1,    24,     5,     6,    -1,     8,     9,    10,    11,
+    12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+    22,    -1,    24,    -1,    -1,    -1,    48,    -1,    -1,    -1,
+    -1,    20,    -1,    22,    -1,    24,    -1,    -1,    -1,    -1,
+    -1,    -1,    31,    32,    33,    -1,    48,     3,     4,     5,
+     6,     7,    41,    42,    43,    44,    45,    46,    47,    -1,
+    -1,    50,    51,    -1,    -1,    -1,    22,    -1,    24,    58,
+    26,    27,    28,    62,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    38,    39,    -1,    -1,    -1,    -1,   110,    -1,
+    -1,   113,    -1,    -1,   116,    -1,   118,   119,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    61,    -1,    -1,   110,    -1,
+    -1,   113,    -1,    -1,   116,    -1,   118,   119,    -1,    -1,
+    -1,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+    86,    87,    88,    89,    90,    -1,    -1,    -1,    -1,    -1,
+    96,    -1,    98,    99,   100,   101,    -1,   103,   104,   105,
+     3,     4,    -1,    -1,     7,    -1,    -1,    -1,    -1,    -1,
+   116,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    26,    27,    28,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    38,    39,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    61,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    77,    78,    79,    80,    81,    82,
+    83,    84,    85,    86,    87,    88,    89,    90,    -1,    -1,
+    -1,    -1,    -1,    96,    -1,    98,    99,   100,   101,    -1,
+   103,   104,   105,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,     5,     6,   116,     8,     9,    10,    11,    12,    13,
+    14,    15,    16,    17,    18,    19,    20,    21,    22,    -1,
+    24,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    37,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,     5,     6,    48,     8,     9,    10,    11,    12,
+    13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+    -1,    24,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    37,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,     5,     6,    48,     8,     9,    10,    11,
+    12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+    22,    -1,    24,    -1,    -1,    -1,   110,    -1,    -1,   113,
+    -1,    -1,   116,    -1,   118,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,     5,     6,    48,     8,     9,    10,
+    11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+    21,    22,    -1,    24,    -1,    -1,    -1,   110,    -1,    -1,
+   113,    -1,    -1,   116,    -1,   118,    37,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,     5,     6,    48,     8,     9,
+    10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+    20,    21,    22,    -1,    24,    -1,    -1,    -1,   110,    -1,
+    -1,   113,    -1,   115,   116,    -1,   118,    37,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,     5,     6,    48,     8,
+     9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+    19,    20,    21,    22,    -1,    24,    -1,    -1,    -1,   110,
+    -1,    -1,   113,    -1,    -1,   116,    -1,   118,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,     6,    48,
+     8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+    18,    19,    20,    21,    22,    -1,    24,    -1,    -1,    -1,
+   110,    -1,    -1,   113,    -1,    -1,   116,    -1,   118,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,     6,
+    48,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+    17,    18,    19,    20,    21,    22,    -1,    24,    -1,    -1,
+    -1,   110,    -1,    -1,   113,    -1,    -1,   116,    -1,   118,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,
+     6,    48,     8,     9,    10,    11,    12,    13,    14,    15,
+    16,    17,    18,    19,    20,    21,    22,    -1,    24,    -1,
+    -1,    -1,   110,    -1,    -1,   113,    -1,    -1,   116,    -1,
+   118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   110,    -1,    -1,   113,    -1,    -1,   116,
+    -1,   118,    -1,    -1,    -1,    -1,    -1,    35,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    59,    60,    -1,   110,    -1,    -1,   113,    -1,    -1,
+   116,    -1,   118,    71,    72,    73,    74,    75,    76,    77,
+    78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+    88,    89,    90,    91,    92,    93,    -1,    -1,    96,    97,
+    98,    99,   100,   101,   102,   103,   104,   105,   106,   107
+};
+/* -*-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  4
-/* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1330
-
-/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS  122
-/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS  75
-/* YYNRULES -- Number of rules. */
-#define YYNRULES  251
-/* YYNRULES -- Number of states. */
-#define YYNSTATES  514
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
-#define YYUNDEFTOK  2
-#define YYMAXUTOK   362
-
-#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,
-     111,   112,   120,     2,   109,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     116,   108,   117,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   113,   110,   115,     2,     2,     2,     2,     2,   121,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     114,     2,     2,   118,     2,   119,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     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
-};
-
-#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,    70,    71,    73,    75,    77,
-      79,    81,    83,    85,    86,    87,    89,    91,    93,    95,
-      97,    99,   102,   103,   106,   107,   111,   114,   115,   117,
-     118,   122,   124,   127,   129,   131,   133,   135,   137,   139,
-     141,   143,   145,   147,   149,   151,   153,   155,   157,   159,
-     161,   163,   165,   167,   169,   172,   177,   183,   189,   193,
-     196,   199,   201,   205,   207,   211,   213,   214,   219,   223,
-     227,   232,   237,   241,   244,   247,   250,   253,   256,   259,
-     262,   265,   268,   271,   278,   284,   293,   300,   307,   314,
-     321,   328,   337,   346,   350,   352,   354,   356,   358,   361,
-     364,   369,   372,   374,   379,   382,   387,   388,   396,   397,
-     405,   406,   414,   415,   423,   427,   432,   433,   435,   437,
-     439,   443,   447,   451,   455,   459,   461,   462,   464,   466,
-     468,   469,   472,   476,   478,   480,   484,   486,   487,   496,
-     498,   500,   504,   506,   508,   511,   512,   514,   516,   517,
-     522,   523,   525,   527,   529,   531,   533,   535,   537,   539,
-     541,   545,   547,   553,   555,   557,   559,   561,   564,   567,
-     570,   574,   577,   578,   580,   583,   586,   590,   600,   610,
-     619,   633,   635,   637,   644,   650,   653,   660,   668,   670,
-     674,   676,   677,   680,   682,   688,   694,   700,   703,   708,
-     713,   720,   725,   730,   735,   740,   747,   754,   757,   765,
-     767,   770,   771,   773,   774,   778,   785,   789,   796,   799,
-     804,   811
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const short int yyrhs[] =
-{
-     153,     0,    -1,     5,    -1,     6,    -1,     3,    -1,     4,
-      -1,    77,    -1,    78,    -1,    79,    -1,    80,    -1,    81,
-      -1,    82,    -1,    83,    -1,    84,    -1,    85,    -1,    86,
-      -1,    87,    -1,    88,    -1,    89,    -1,    90,    -1,   100,
-      -1,   101,    -1,    16,    -1,    14,    -1,    12,    -1,    10,
-      -1,    17,    -1,    15,    -1,    13,    -1,    11,    -1,   129,
-      -1,   130,    -1,    18,    -1,    19,    -1,   165,   108,    -1,
-      -1,    41,    -1,    42,    -1,    43,    -1,    44,    -1,    45,
-      -1,    46,    -1,    47,    -1,    -1,    -1,    65,    -1,    66,
-      -1,    67,    -1,    68,    -1,    69,    -1,    70,    -1,    64,
-       4,    -1,    -1,    57,     4,    -1,    -1,   109,    57,     4,
-      -1,    34,    24,    -1,    -1,   138,    -1,    -1,   109,   141,
-     140,    -1,   138,    -1,    57,     4,    -1,   144,    -1,     8,
-      -1,   146,    -1,     8,    -1,   146,    -1,     9,    -1,    10,
-      -1,    11,    -1,    12,    -1,    13,    -1,    14,    -1,    15,
-      -1,    16,    -1,    17,    -1,    18,    -1,    19,    -1,    20,
-      -1,    21,    -1,    48,    -1,   145,    -1,   180,    -1,   110,
-       4,    -1,   143,   111,   148,   112,    -1,   113,     4,   114,
-     146,   115,    -1,   116,     4,   114,   146,   117,    -1,   118,
-     147,   119,    -1,   118,   119,    -1,   146,   120,    -1,   146,
-      -1,   147,   109,   146,    -1,   147,    -1,   147,   109,    37,
-      -1,    37,    -1,    -1,   144,   113,   151,   115,    -1,   144,
-     113,   115,    -1,   144,   121,    24,    -1,   144,   116,   151,
-     117,    -1,   144,   118,   151,   119,    -1,   144,   118,   119,
-      -1,   144,    38,    -1,   144,    39,    -1,   144,   180,    -1,
-     144,   150,    -1,   144,    26,    -1,   129,   124,    -1,   130,
-       4,    -1,     9,    27,    -1,     9,    28,    -1,   132,     7,
-      -1,    98,   111,   149,    36,   144,   112,    -1,    96,   111,
-     149,   194,   112,    -1,    99,   111,   149,   109,   149,   109,
-     149,   112,    -1,   125,   111,   149,   109,   149,   112,    -1,
-     126,   111,   149,   109,   149,   112,    -1,   127,   111,   149,
-     109,   149,   112,    -1,   128,   111,   149,   109,   149,   112,
-      -1,   103,   111,   149,   109,   149,   112,    -1,   104,   111,
-     149,   109,   149,   109,   149,   112,    -1,   105,   111,   149,
-     109,   149,   109,   149,   112,    -1,   151,   109,   149,    -1,
-     149,    -1,    32,    -1,    33,    -1,   154,    -1,   154,   174,
-      -1,   154,   176,    -1,   154,    62,    61,   160,    -1,   154,
-      25,    -1,   155,    -1,   155,   133,    20,   142,    -1,   155,
-     176,    -1,   155,    62,    61,   160,    -1,    -1,   155,   133,
-     134,   152,   149,   156,   140,    -1,    -1,   155,   133,    50,
-     152,   144,   157,   140,    -1,    -1,   155,   133,    45,   152,
-     144,   158,   140,    -1,    -1,   155,   133,    47,   152,   144,
-     159,   140,    -1,   155,    51,   162,    -1,   155,    58,   108,
-     163,    -1,    -1,    24,    -1,    56,    -1,    55,    -1,    53,
-     108,   161,    -1,    54,   108,     4,    -1,    52,   108,    24,
-      -1,   113,   164,   115,    -1,   164,   109,    24,    -1,    24,
-      -1,    -1,    22,    -1,    24,    -1,   165,    -1,    -1,   144,
-     166,    -1,   168,   109,   167,    -1,   167,    -1,   168,    -1,
-     168,   109,    37,    -1,    37,    -1,    -1,   135,   142,   165,
-     111,   169,   112,   139,   136,    -1,    29,    -1,   118,    -1,
-     134,   170,   171,    -1,    30,    -1,   119,    -1,   183,   173,
-      -1,    -1,    45,    -1,    47,    -1,    -1,    31,   177,   175,
-     170,    -1,    -1,    63,    -1,     3,    -1,     4,    -1,     7,
-      -1,    27,    -1,    28,    -1,    38,    -1,    39,    -1,    26,
-      -1,   116,   151,   117,    -1,   150,    -1,    61,   178,    24,
-     109,    24,    -1,   123,    -1,   165,    -1,   180,    -1,   179,
-      -1,   144,   181,    -1,   183,   184,    -1,   172,   184,    -1,
-     185,   133,   186,    -1,   185,   188,    -1,    -1,    23,    -1,
-      71,   182,    -1,    71,     8,    -1,    72,    21,   181,    -1,
-      72,     9,   181,   109,    21,   181,   109,    21,   181,    -1,
-      73,   131,   181,   109,    21,   181,   113,   187,   115,    -1,
-      73,   131,   181,   109,    21,   181,   113,   115,    -1,    74,
-     135,   142,   181,   111,   191,   112,    36,    21,   181,    75,
-      21,   181,    -1,    75,    -1,    76,    -1,   187,   131,   179,
-     109,    21,   181,    -1,   131,   179,   109,    21,   181,    -1,
-     133,   193,    -1,   144,   113,   181,   109,   181,   115,    -1,
-     189,   109,   113,   181,   109,   181,   115,    -1,   182,    -1,
-     190,   109,   182,    -1,   190,    -1,    -1,    60,    59,    -1,
-      59,    -1,   125,   144,   181,   109,   181,    -1,   126,   144,
-     181,   109,   181,    -1,   127,   144,   181,   109,   181,    -1,
-      49,   182,    -1,   128,   182,   109,   182,    -1,    98,   182,
-      36,   144,    -1,    99,   182,   109,   182,   109,   182,    -1,
-     102,   182,   109,   144,    -1,   106,   182,   109,   144,    -1,
-     107,   182,   109,   144,    -1,   103,   182,   109,   182,    -1,
-     104,   182,   109,   182,   109,   182,    -1,   105,   182,   109,
-     182,   109,   182,    -1,    97,   189,    -1,   192,   135,   142,
-     181,   111,   191,   112,    -1,   196,    -1,   109,   190,    -1,
-      -1,    35,    -1,    -1,    91,   144,   137,    -1,    91,   144,
-     109,    15,   181,   137,    -1,    92,   144,   137,    -1,    92,
-     144,   109,    15,   181,   137,    -1,    93,   182,    -1,   195,
-      94,   144,   181,    -1,   195,    95,   182,   109,   144,   181,
-      -1,    96,   144,   181,   194,    -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
-static const unsigned short int yyrline[] =
-{
-       0,  1088,  1088,  1089,  1097,  1098,  1108,  1108,  1108,  1108,
-    1108,  1109,  1109,  1109,  1110,  1110,  1110,  1110,  1110,  1110,
-    1112,  1112,  1116,  1116,  1116,  1116,  1117,  1117,  1117,  1117,
-    1118,  1118,  1119,  1119,  1122,  1126,  1131,  1132,  1133,  1134,
-    1135,  1136,  1137,  1138,  1140,  1141,  1142,  1143,  1144,  1145,
-    1146,  1147,  1156,  1157,  1163,  1164,  1172,  1180,  1181,  1186,
-    1187,  1188,  1193,  1207,  1207,  1208,  1208,  1210,  1220,  1220,
-    1220,  1220,  1220,  1220,  1220,  1221,  1221,  1221,  1221,  1221,
-    1221,  1222,  1226,  1230,  1238,  1246,  1259,  1264,  1276,  1286,
-    1290,  1299,  1304,  1310,  1311,  1315,  1319,  1330,  1356,  1370,
-    1400,  1426,  1447,  1460,  1470,  1475,  1536,  1543,  1552,  1558,
-    1564,  1568,  1572,  1580,  1591,  1623,  1631,  1653,  1664,  1670,
-    1678,  1684,  1690,  1699,  1703,  1711,  1711,  1721,  1729,  1734,
-    1738,  1742,  1746,  1761,  1783,  1786,  1789,  1789,  1797,  1797,
-    1805,  1805,  1813,  1813,  1822,  1825,  1828,  1832,  1845,  1846,
-    1848,  1852,  1861,  1867,  1869,  1874,  1879,  1888,  1888,  1889,
-    1889,  1891,  1898,  1904,  1911,  1915,  1921,  1926,  1931,  2026,
-    2026,  2028,  2036,  2036,  2038,  2043,  2044,  2045,  2047,  2047,
-    2057,  2061,  2066,  2070,  2074,  2078,  2082,  2086,  2090,  2094,
-    2098,  2123,  2127,  2141,  2145,  2151,  2151,  2157,  2162,  2166,
-    2175,  2186,  2191,  2203,  2216,  2220,  2224,  2229,  2238,  2257,
-    2266,  2322,  2326,  2333,  2344,  2357,  2366,  2375,  2385,  2389,
-    2396,  2396,  2398,  2402,  2407,  2423,  2438,  2452,  2465,  2473,
-    2481,  2489,  2495,  2515,  2538,  2544,  2550,  2556,  2571,  2630,
-    2637,  2640,  2645,  2649,  2656,  2661,  2667,  2672,  2678,  2686,
-    2698,  2713
-};
-#endif
-
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
-/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
-   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
-static const char *const yytname[] =
-{
-  "$end", "error", "$undefined", "ESINT64VAL", "EUINT64VAL", "SINTVAL",
-  "UINTVAL", "FPVAL", "VOID", "BOOL", "SBYTE", "UBYTE", "SHORT", "USHORT",
-  "INT", "UINT", "LONG", "ULONG", "FLOAT", "DOUBLE", "TYPE", "LABEL",
-  "VAR_ID", "LABELSTR", "STRINGCONSTANT", "IMPLEMENTATION",
-  "ZEROINITIALIZER", "TRUETOK", "FALSETOK", "BEGINTOK", "ENDTOK",
-  "DECLARE", "GLOBAL", "CONSTANT", "SECTION", "VOLATILE", "TO",
-  "DOTDOTDOT", "NULL_TOK", "UNDEF", "CONST", "INTERNAL", "LINKONCE",
-  "WEAK", "APPENDING", "DLLIMPORT", "DLLEXPORT", "EXTERN_WEAK", "OPAQUE",
-  "NOT", "EXTERNAL", "TARGET", "TRIPLE", "ENDIAN", "POINTERSIZE", "LITTLE",
-  "BIG", "ALIGN", "DEPLIBS", "CALL", "TAIL", "ASM_TOK", "MODULE",
-  "SIDEEFFECT", "CC_TOK", "CCC_TOK", "CSRETCC_TOK", "FASTCC_TOK",
-  "COLDCC_TOK", "X86_STDCALLCC_TOK", "X86_FASTCALLCC_TOK", "RET", "BR",
-  "SWITCH", "INVOKE", "UNWIND", "UNREACHABLE", "ADD", "SUB", "MUL", "DIV",
-  "REM", "AND", "OR", "XOR", "SETLE", "SETGE", "SETLT", "SETGT", "SETEQ",
-  "SETNE", "MALLOC", "ALLOCA", "FREE", "LOAD", "STORE", "GETELEMENTPTR",
-  "PHI_TOK", "CAST", "SELECT", "SHL", "SHR", "VAARG", "EXTRACTELEMENT",
-  "INSERTELEMENT", "SHUFFLEVECTOR", "VAARG_old", "VANEXT_old", "'='",
-  "','", "'\\\\'", "'('", "')'", "'['", "'x'", "']'", "'<'", "'>'", "'{'",
-  "'}'", "'*'", "'c'", "$accept", "INTVAL", "EINT64VAL", "ArithmeticOps",
-  "LogicalOps", "SetCondOps", "ShiftOps", "SIntType", "UIntType",
-  "IntType", "FPType", "OptAssign", "OptLinkage", "OptCallingConv",
-  "OptAlign", "OptCAlign", "SectionString", "OptSection",
-  "GlobalVarAttributes", "GlobalVarAttribute", "TypesV", "UpRTypesV",
-  "Types", "PrimType", "UpRTypes", "TypeListI", "ArgTypeListI", "ConstVal",
-  "ConstExpr", "ConstVector", "GlobalType", "Module", "FunctionList",
-  "ConstPool", "@1", "@2", "@3", "@4", "AsmBlock", "BigOrLittle",
-  "TargetDefinition", "LibrariesDefinition", "LibList", "Name", "OptName",
-  "ArgVal", "ArgListH", "ArgList", "FunctionHeaderH", "BEGIN",
-  "FunctionHeader", "END", "Function", "FnDeclareLinkage", "FunctionProto",
-  "@5", "OptSideEffect", "ConstValueRef", "SymbolicValueRef", "ValueRef",
-  "ResolvedVal", "BasicBlockList", "BasicBlock", "InstructionList",
-  "BBTerminatorInst", "JumpTable", "Inst", "PHIList", "ValueRefList",
-  "ValueRefListE", "OptTailCall", "InstVal", "IndexList", "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,    61,    44,
-      92,    40,    41,    91,   120,    93,    60,    62,   123,   125,
-      42,    99
-};
-# endif
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const unsigned char yyr1[] =
-{
-       0,   122,   123,   123,   124,   124,   125,   125,   125,   125,
-     125,   126,   126,   126,   127,   127,   127,   127,   127,   127,
-     128,   128,   129,   129,   129,   129,   130,   130,   130,   130,
-     131,   131,   132,   132,   133,   133,   134,   134,   134,   134,
-     134,   134,   134,   134,   135,   135,   135,   135,   135,   135,
-     135,   135,   136,   136,   137,   137,   138,   139,   139,   140,
-     140,   141,   141,   142,   142,   143,   143,   144,   145,   145,
-     145,   145,   145,   145,   145,   145,   145,   145,   145,   145,
-     145,   146,   146,   146,   146,   146,   146,   146,   146,   146,
-     146,   147,   147,   148,   148,   148,   148,   149,   149,   149,
-     149,   149,   149,   149,   149,   149,   149,   149,   149,   149,
-     149,   149,   149,   150,   150,   150,   150,   150,   150,   150,
-     150,   150,   150,   151,   151,   152,   152,   153,   154,   154,
-     154,   154,   154,   155,   155,   155,   156,   155,   157,   155,
-     158,   155,   159,   155,   155,   155,   155,   160,   161,   161,
-     162,   162,   162,   163,   164,   164,   164,   165,   165,   166,
-     166,   167,   168,   168,   169,   169,   169,   169,   170,   171,
-     171,   172,   173,   173,   174,   175,   175,   175,   177,   176,
-     178,   178,   179,   179,   179,   179,   179,   179,   179,   179,
-     179,   179,   179,   180,   180,   181,   181,   182,   183,   183,
-     184,   185,   185,   185,   186,   186,   186,   186,   186,   186,
-     186,   186,   186,   187,   187,   188,   189,   189,   190,   190,
-     191,   191,   192,   192,   193,   193,   193,   193,   193,   193,
-     193,   193,   193,   193,   193,   193,   193,   193,   193,   193,
-     194,   194,   195,   195,   196,   196,   196,   196,   196,   196,
-     196,   196
-};
-
-/* 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,     2,     0,     1,     1,     1,     1,
-       1,     1,     1,     0,     0,     1,     1,     1,     1,     1,
-       1,     2,     0,     2,     0,     3,     2,     0,     1,     0,
-       3,     1,     2,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     2,     4,     5,     5,     3,     2,
-       2,     1,     3,     1,     3,     1,     0,     4,     3,     3,
-       4,     4,     3,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     6,     5,     8,     6,     6,     6,     6,
-       6,     8,     8,     3,     1,     1,     1,     1,     2,     2,
-       4,     2,     1,     4,     2,     4,     0,     7,     0,     7,
-       0,     7,     0,     7,     3,     4,     0,     1,     1,     1,
-       3,     3,     3,     3,     3,     1,     0,     1,     1,     1,
-       0,     2,     3,     1,     1,     3,     1,     0,     8,     1,
-       1,     3,     1,     1,     2,     0,     1,     1,     0,     4,
-       0,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       3,     1,     5,     1,     1,     1,     1,     2,     2,     2,
-       3,     2,     0,     1,     2,     2,     3,     9,     9,     8,
-      13,     1,     1,     6,     5,     2,     6,     7,     1,     3,
-       1,     0,     2,     1,     5,     5,     5,     2,     4,     4,
-       6,     4,     4,     4,     4,     6,     6,     2,     7,     1,
-       2,     0,     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 char yydefact[] =
-{
-     146,     0,    43,   132,     1,   131,   178,    36,    37,    38,
-      39,    40,    41,    42,     0,    44,   202,   128,   129,   202,
-     157,   158,     0,     0,     0,    43,     0,   134,   175,     0,
-       0,    45,    46,    47,    48,    49,    50,     0,     0,   203,
-     199,    35,   172,   173,   174,   198,     0,     0,     0,   144,
-       0,     0,     0,     0,     0,     0,     0,    34,   176,   177,
-      44,   147,   130,    51,     2,     3,    64,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,     0,     0,     0,     0,   193,     0,     0,    63,    82,
-      67,   194,    83,   169,   170,   171,   243,   201,     0,     0,
-       0,   156,   145,   135,   133,   125,   126,     0,     0,     0,
-       0,   179,    84,     0,     0,    66,    89,    91,     0,     0,
-      96,    90,   242,     0,   223,     0,     0,     0,     0,    44,
-     211,   212,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,     0,     0,     0,     0,
-       0,     0,     0,    20,    21,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   200,    44,   215,     0,   239,
-     152,   149,   148,   150,   151,   155,     0,   140,   142,   138,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,     0,     0,     0,     0,   136,     0,     0,     0,    88,
-     167,    95,    93,     0,     0,   227,   222,   205,   204,     0,
-       0,    25,    29,    24,    28,    23,    27,    22,    26,    30,
-      31,     0,     0,    54,    54,   248,     0,     0,   237,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   153,    59,    59,    59,   110,
-     111,     4,     5,   108,   109,   112,   107,   103,   104,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   106,   105,    59,    65,    65,    92,   166,
-     160,   163,   164,     0,     0,    85,   182,   183,   184,   189,
-     185,   186,   187,   188,   180,     0,   191,   196,   195,   197,
-       0,   206,     0,     0,     0,   244,     0,   246,   241,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   154,     0,   141,   143,
-     139,     0,     0,     0,     0,     0,     0,    98,   124,     0,
-       0,   102,     0,    99,     0,     0,     0,     0,   137,    86,
-      87,   159,   161,     0,    57,    94,   181,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   251,     0,     0,   229,
-       0,   231,   234,     0,     0,   232,   233,     0,     0,     0,
-     228,     0,   249,     0,     0,     0,    61,    59,   241,     0,
-       0,     0,     0,     0,     0,    97,   100,   101,     0,     0,
-       0,     0,   165,   162,    58,    52,     0,   190,     0,     0,
-     221,    54,    55,    54,   218,   240,     0,     0,     0,     0,
-       0,   224,   225,   226,   221,     0,    56,    62,    60,     0,
-       0,     0,     0,     0,     0,   123,     0,     0,     0,     0,
-       0,   168,     0,     0,     0,   220,     0,     0,   245,   247,
-       0,     0,     0,   230,   235,   236,     0,   250,   114,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    53,   192,
-       0,     0,     0,   219,   216,     0,   238,   113,     0,   120,
-       0,     0,   116,   117,   118,   119,     0,   209,     0,     0,
-       0,   217,     0,     0,     0,   207,     0,   208,     0,     0,
-     115,   121,   122,     0,     0,     0,     0,     0,     0,   214,
-       0,     0,   213,   210
-};
-
-/* YYDEFGOTO[NTERM-NUM]. */
-static const short int yydefgoto[] =
-{
-      -1,    85,   253,   269,   270,   271,   272,   191,   192,   221,
-     193,    25,    15,    37,   441,   305,   386,   405,   328,   387,
-      86,    87,   194,    89,    90,   118,   203,   338,   296,   339,
-     107,     1,     2,     3,   275,   248,   246,   247,    62,   173,
-      49,   102,   176,    91,   352,   281,   282,   283,    38,    95,
-      16,    44,    17,    60,    18,    28,   357,   297,    92,   299,
-     414,    19,    40,    41,   165,   489,    97,   228,   445,   446,
-     166,   167,   366,   168,   169
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-#define YYPACT_NINF -428
-static const short int yypact[] =
-{
-    -428,    45,   194,   602,  -428,  -428,  -428,  -428,  -428,  -428,
-    -428,  -428,  -428,  -428,    26,    14,    85,  -428,  -428,   -13,
-    -428,  -428,    91,    28,    90,    49,    33,  -428,    21,   155,
-     158,  -428,  -428,  -428,  -428,  -428,  -428,  1052,   -20,  -428,
-    -428,    80,  -428,  -428,  -428,  -428,    75,    76,    79,  -428,
-      73,   155,  1052,    84,    84,    84,    84,  -428,  -428,  -428,
-      14,  -428,  -428,  -428,  -428,  -428,    77,  -428,  -428,  -428,
-    -428,  -428,  -428,  -428,  -428,  -428,  -428,  -428,  -428,  -428,
-    -428,   185,   187,   191,   569,  -428,    80,    86,  -428,  -428,
-     -44,  -428,  -428,  -428,  -428,  -428,  1223,  -428,   175,    78,
-     192,   176,  -428,  -428,  -428,  -428,  -428,  1093,  1093,  1093,
-    1134,  -428,  -428,    87,    88,  -428,  -428,   -44,   -95,    92,
-     847,  -428,  -428,  1093,  -428,   139,  1175,    52,   144,    14,
-    -428,  -428,  -428,  -428,  -428,  -428,  -428,  -428,  -428,  -428,
-    -428,  -428,  -428,  -428,  -428,  -428,  1093,  1093,  1093,  1093,
-    1093,  1093,  1093,  -428,  -428,  1093,  1093,  1093,  1093,  1093,
-    1093,  1093,  1093,  1093,  1093,  -428,    14,  -428,    44,  -428,
-    -428,  -428,  -428,  -428,  -428,  -428,   -12,  -428,  -428,  -428,
-     138,   164,   203,   167,   204,   169,   205,   172,   206,   210,
-     211,   174,   208,   213,   412,  -428,  1093,  1093,  1093,  -428,
-     888,  -428,   113,   111,   635,  -428,  -428,    77,  -428,   635,
-     635,  -428,  -428,  -428,  -428,  -428,  -428,  -428,  -428,  -428,
-    -428,   635,  1052,   115,   117,  -428,   635,   114,   119,   212,
-     140,   141,   142,   145,   146,   148,   149,   635,   635,   635,
-     150,  1052,  1093,  1093,   223,  -428,   151,   151,   151,  -428,
-    -428,  -428,  -428,  -428,  -428,  -428,  -428,  -428,  -428,   152,
-     153,   154,   157,   159,   162,   929,  1134,   589,   229,   173,
-     178,   179,   180,  -428,  -428,   151,   -15,    15,   -44,  -428,
-      80,  -428,   160,   181,   970,  -428,  -428,  -428,  -428,  -428,
-    -428,  -428,  -428,  -428,   198,  1134,  -428,  -428,  -428,  -428,
-     177,  -428,   186,   635,    -4,  -428,     3,  -428,   188,   635,
-     183,  1093,  1093,  1093,  1093,  1093,  1093,  1093,  1093,   189,
-     193,   195,  1093,   635,   635,   197,  -428,   -11,  -428,  -428,
-    -428,  1134,  1134,  1134,  1134,  1134,  1134,  -428,  -428,    -8,
-     -96,  -428,   -45,  -428,  1134,  1134,  1134,  1134,  -428,  -428,
-    -428,  -428,  -428,  1011,   228,  -428,  -428,   263,   -32,   273,
-     282,   199,   635,   304,   635,  1093,  -428,   200,   635,  -428,
-     214,  -428,  -428,   215,   216,  -428,  -428,   635,   635,   635,
-    -428,   201,  -428,  1093,   289,   310,  -428,   151,   188,   279,
-     217,   218,   224,   230,  1134,  -428,  -428,  -428,   231,   232,
-     233,   234,  -428,  -428,  -428,   281,   238,  -428,   635,   635,
-    1093,   239,  -428,   239,  -428,   241,   635,   244,  1093,  1093,
-    1093,  -428,  -428,  -428,  1093,   635,  -428,  -428,  -428,   242,
-    1093,  1134,  1134,  1134,  1134,  -428,  1134,  1134,  1134,  1134,
-     351,  -428,   332,   248,   245,   241,   249,   303,  -428,  -428,
-    1093,   251,   635,  -428,  -428,  -428,   252,  -428,  -428,   255,
-     260,   258,   265,   266,   268,   272,   276,   277,  -428,  -428,
-     356,    16,   336,  -428,  -428,   275,  -428,  -428,  1134,  -428,
-    1134,  1134,  -428,  -428,  -428,  -428,   635,  -428,   738,    25,
-     370,  -428,   280,   284,   285,  -428,   290,  -428,   738,   635,
-    -428,  -428,  -428,   373,   291,   323,   635,   380,   381,  -428,
-     635,   635,  -428,  -428
-};
-
-/* YYPGOTO[NTERM-NUM].  */
-static const short int yypgoto[] =
-{
-    -428,  -428,  -428,   307,   308,   309,   311,  -127,  -126,  -427,
-    -428,   365,   383,  -117,  -428,  -221,    55,  -428,  -241,  -428,
-     -48,  -428,   -37,  -428,   -68,   292,  -428,  -102,   220,  -247,
-      94,  -428,  -428,  -428,  -428,  -428,  -428,  -428,   359,  -428,
-    -428,  -428,  -428,     2,  -428,    58,  -428,  -428,   355,  -428,
-    -428,  -428,  -428,  -428,   413,  -428,  -428,  -423,   -57,    62,
-    -101,  -428,   400,  -428,  -428,  -428,  -428,  -428,    56,    -2,
-    -428,  -428,    32,  -428,  -428
-};
-
-/* 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 -128
-static const short int yytable[] =
-{
-      88,   219,   220,   307,   104,    26,   329,   330,   195,    93,
-      39,   362,   222,   394,   198,    88,   117,    42,   364,   340,
-     342,   396,   205,   384,   199,   208,   211,   212,   213,   214,
-     215,   216,   217,   218,   348,   211,   212,   213,   214,   215,
-     216,   217,   218,    26,   488,     4,   385,   225,   358,   241,
-     229,   230,   117,   363,   231,   232,   233,   234,   235,   236,
-     363,   209,   498,   240,   394,   496,    58,   -65,    59,    52,
-     177,   178,   179,   210,   397,   504,   121,   394,    30,    31,
-      32,    33,    34,    35,    36,   407,   204,    29,   119,   204,
-       7,     8,     9,    10,    53,    12,    54,   244,    94,    55,
-     349,   394,    20,   245,    21,   121,    43,   395,    39,   223,
-     224,   204,   226,   227,   204,   204,   105,   106,   204,   204,
-     204,   204,   204,   204,   237,   238,   239,   204,   276,   277,
-     278,   487,   350,   171,   172,   121,    50,   274,   242,   243,
-     497,    57,   325,    46,    47,    48,   428,   298,   108,   109,
-     110,    51,   298,   298,   211,   212,   213,   214,   215,   216,
-     217,   218,    63,   280,   298,   249,   250,   -25,   -25,   298,
-     -24,   -24,   -23,   -23,   303,   -22,   -22,   251,   252,    61,
-     298,   298,   298,    98,    99,    88,   101,   100,   -66,   112,
-     448,   113,   449,   323,  -127,   114,   174,   120,   206,   170,
-     175,   196,   197,   200,    88,   324,   204,   -29,   -28,   -27,
-     -26,   370,   254,   372,   373,   374,   278,   -32,   -33,     5,
-     255,   380,   284,   285,   304,     6,   306,   309,   310,   388,
-     389,   390,   391,   392,   393,     7,     8,     9,    10,    11,
-      12,    13,   398,   399,   400,   401,   298,   326,   311,   312,
-     313,   314,   298,   343,   315,   316,    14,   317,   318,   322,
-     327,   356,   384,   331,   332,   333,   298,   298,   334,   353,
-     335,   300,   301,   336,   369,   204,   371,   204,   204,   204,
-     375,   376,   351,   302,   344,   204,   359,   406,   308,   345,
-     346,   347,   435,   354,   408,   360,   368,   365,   377,   319,
-     320,   321,   378,   409,   379,   298,   383,   298,   412,   416,
-     410,   298,   424,   426,   427,   430,   280,   453,   454,   455,
-     298,   298,   298,   418,   419,   420,   431,   432,   204,   460,
-     461,   462,   463,   433,   464,   465,   466,   467,   440,   434,
-     436,   437,   438,   439,   219,   220,   425,   442,   447,   473,
-     450,   298,   298,   452,   458,   468,   469,   470,   471,   298,
-     363,   472,   219,   220,   476,   361,   474,   477,   298,   478,
-     479,   367,   490,   204,   480,   481,   492,   486,   493,   494,
-     482,   204,   204,   204,   483,   381,   382,   204,   484,   485,
-     491,   499,   500,   459,   506,   298,   501,   502,   508,   503,
-     507,   510,   511,   161,   162,   163,    96,   164,    56,   404,
-     103,   403,   202,   204,   273,   111,    27,    64,    65,    45,
-     429,   415,   456,     0,   411,     0,   413,     0,     0,   298,
-     417,     0,     0,     0,    20,     0,    21,     0,   256,   421,
-     422,   423,   298,     0,     0,     0,     0,     0,     0,   298,
-     257,   258,     0,   298,   298,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     443,   444,     0,     0,     0,     0,     0,     0,   451,     0,
-       0,     0,     0,     0,     0,     0,     0,   457,     0,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,     0,     0,     0,     0,     0,   259,     0,
-     260,   261,   153,   154,   475,   262,   263,   264,     0,     0,
-       0,     0,     0,     0,     0,   265,     0,     0,   266,     0,
-     267,     0,     0,   268,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   495,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   505,     0,     0,     0,     0,     0,     0,   509,     0,
-       0,     0,   512,   513,    64,    65,     0,   115,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    20,     0,    21,    64,    65,     0,   115,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,    78,
-      79,    20,     0,    21,     0,     0,     0,    80,     0,     0,
-       0,     0,   -35,     0,    20,     0,    21,     0,     0,     0,
-       0,     0,     0,     6,   -35,   -35,     0,    80,   286,   287,
-      64,    65,   288,   -35,   -35,   -35,   -35,   -35,   -35,   -35,
-       0,     0,   -35,    22,     0,     0,     0,    20,     0,    21,
-      23,   289,   290,   291,    24,     0,     0,     0,     0,     0,
-       0,     0,     0,   292,   293,     0,     0,     0,     0,    81,
-       0,     0,    82,     0,     0,    83,     0,    84,   116,     0,
-       0,     0,     0,     0,     0,     0,   294,     0,     0,    81,
-       0,     0,    82,     0,     0,    83,     0,    84,   341,     0,
-       0,     0,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,     0,     0,     0,     0,
-       0,   259,     0,   260,   261,   153,   154,     0,   262,   263,
-     264,   286,   287,     0,     0,   288,     0,     0,     0,     0,
-       0,   295,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   289,   290,   291,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   292,   293,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   294,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,     0,
-       0,     0,     0,     0,   259,     0,   260,   261,   153,   154,
-       0,   262,   263,   264,     0,     0,     0,     0,     0,     0,
-       0,     0,    64,    65,   295,   115,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    20,
-       0,    21,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   201,     0,     0,     0,     0,     0,
-       0,     0,     0,    64,    65,    80,   115,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      20,     0,    21,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   279,     0,     0,     0,     0,
-       0,     0,     0,     0,    64,    65,    80,   115,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,    78,
-      79,    20,     0,    21,     0,     0,     0,    81,     0,     0,
-      82,     0,     0,    83,     0,    84,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    64,    65,    80,   115,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    20,     0,    21,     0,     0,     0,    81,     0,
-       0,    82,     0,     0,    83,     0,    84,   355,     0,     0,
-       0,     0,     0,     0,     0,     0,    64,    65,    80,   115,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    20,     0,    21,     0,     0,     0,    81,
-       0,     0,    82,     0,   337,    83,     0,    84,   402,     0,
-       0,     0,     0,     0,     0,     0,     0,    64,    65,    80,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    20,     0,    21,     0,     0,     0,
-      81,     0,     0,    82,     0,     0,    83,     0,    84,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    64,    65,
-      80,   115,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    20,     0,    21,     0,     0,
-       0,    81,     0,     0,    82,     0,     0,    83,     0,    84,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    64,
-      65,    80,   115,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,    78,    79,    20,     0,    21,     0,
-       0,     0,    81,     0,     0,    82,     0,     0,    83,     0,
-      84,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      64,    65,    80,   207,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    20,     0,    21,
-       0,     0,     0,    81,     0,     0,    82,     0,     0,    83,
-       0,    84,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    80,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    81,     0,     0,    82,     0,     0,
-      83,     0,    84,     0,     0,     0,     0,     0,   122,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   123,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   124,   125,     0,    81,     0,     0,    82,     0,
-       0,    83,     0,    84,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,     0,     0,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160
-};
-
-static const short int yycheck[] =
-{
-      37,   128,   128,   224,    52,     3,   247,   248,   110,    29,
-      23,    15,   129,   109,   109,    52,    84,    30,    15,   266,
-     267,   117,   123,    34,   119,   126,    10,    11,    12,    13,
-      14,    15,    16,    17,   275,    10,    11,    12,    13,    14,
-      15,    16,    17,    41,   471,     0,    57,   148,   295,   166,
-     151,   152,   120,    57,   155,   156,   157,   158,   159,   160,
-      57,     9,   489,   164,   109,   488,    45,   111,    47,    20,
-     107,   108,   109,    21,   119,   498,   120,   109,    64,    65,
-      66,    67,    68,    69,    70,   117,   123,    61,    86,   126,
-      41,    42,    43,    44,    45,    46,    47,   109,   118,    50,
-     115,   109,    22,   115,    24,   120,   119,   115,    23,   146,
-     147,   148,   149,   150,   151,   152,    32,    33,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   196,   197,
-     198,   115,   117,    55,    56,   120,   108,   194,    94,    95,
-     115,   108,   243,    52,    53,    54,   387,   204,    54,    55,
-      56,    61,   209,   210,    10,    11,    12,    13,    14,    15,
-      16,    17,     4,   200,   221,    27,    28,     3,     4,   226,
-       3,     4,     3,     4,   222,     3,     4,     3,     4,    24,
-     237,   238,   239,   108,   108,   222,   113,   108,   111,     4,
-     411,     4,   413,   241,     0,     4,     4,   111,    59,    24,
-      24,   114,   114,   111,   241,   242,   243,     4,     4,     4,
-       4,   312,     4,   314,   315,   316,   284,     7,     7,    25,
-       7,   322,   109,   112,   109,    31,   109,   113,   109,   331,
-     332,   333,   334,   335,   336,    41,    42,    43,    44,    45,
-      46,    47,   344,   345,   346,   347,   303,    24,    36,   109,
-     109,   109,   309,    24,   109,   109,    62,   109,   109,   109,
-     109,    63,    34,   111,   111,   111,   323,   324,   111,   109,
-     111,   209,   210,   111,   311,   312,   313,   314,   315,   316,
-     317,   318,   280,   221,   111,   322,   109,    24,   226,   111,
-     111,   111,   394,   112,    21,   109,   113,   109,   109,   237,
-     238,   239,   109,    21,   109,   362,   109,   364,     4,   109,
-     111,   368,   111,    24,     4,    36,   353,   418,   419,   420,
-     377,   378,   379,   109,   109,   109,   109,   109,   365,   431,
-     432,   433,   434,   109,   436,   437,   438,   439,    57,   109,
-     109,   109,   109,   109,   471,   471,   383,   109,   109,   450,
-     109,   408,   409,   109,   112,     4,    24,   109,   113,   416,
-      57,   112,   489,   489,   112,   303,   115,   112,   425,   109,
-     112,   309,    36,   410,   109,   109,   478,    21,   480,   481,
-     112,   418,   419,   420,   112,   323,   324,   424,   112,   112,
-     115,    21,   112,   430,    21,   452,   112,   112,    75,   109,
-     109,    21,    21,    96,    96,    96,    41,    96,    25,   354,
-      51,   353,   120,   450,   194,    60,     3,     5,     6,    19,
-     388,   365,   424,    -1,   362,    -1,   364,    -1,    -1,   486,
-     368,    -1,    -1,    -1,    22,    -1,    24,    -1,    26,   377,
-     378,   379,   499,    -1,    -1,    -1,    -1,    -1,    -1,   506,
-      38,    39,    -1,   510,   511,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     408,   409,    -1,    -1,    -1,    -1,    -1,    -1,   416,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   425,    -1,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    -1,    -1,    -1,    -1,    -1,    96,    -1,
-      98,    99,   100,   101,   452,   103,   104,   105,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   113,    -1,    -1,   116,    -1,
-     118,    -1,    -1,   121,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   486,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   499,    -1,    -1,    -1,    -1,    -1,    -1,   506,    -1,
-      -1,    -1,   510,   511,     5,     6,    -1,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    -1,    24,     5,     6,    -1,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    -1,    24,    -1,    -1,    -1,    48,    -1,    -1,
-      -1,    -1,    20,    -1,    22,    -1,    24,    -1,    -1,    -1,
-      -1,    -1,    -1,    31,    32,    33,    -1,    48,     3,     4,
-       5,     6,     7,    41,    42,    43,    44,    45,    46,    47,
-      -1,    -1,    50,    51,    -1,    -1,    -1,    22,    -1,    24,
-      58,    26,    27,    28,    62,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    38,    39,    -1,    -1,    -1,    -1,   110,
-      -1,    -1,   113,    -1,    -1,   116,    -1,   118,   119,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    61,    -1,    -1,   110,
-      -1,    -1,   113,    -1,    -1,   116,    -1,   118,   119,    -1,
-      -1,    -1,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    -1,    -1,    -1,    -1,
-      -1,    96,    -1,    98,    99,   100,   101,    -1,   103,   104,
-     105,     3,     4,    -1,    -1,     7,    -1,    -1,    -1,    -1,
-      -1,   116,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    26,    27,    28,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    38,    39,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    61,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    -1,
-      -1,    -1,    -1,    -1,    96,    -1,    98,    99,   100,   101,
-      -1,   103,   104,   105,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,     5,     6,   116,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      -1,    24,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    37,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,     5,     6,    48,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    -1,    24,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    37,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,     5,     6,    48,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    -1,    24,    -1,    -1,    -1,   110,    -1,    -1,
-     113,    -1,    -1,   116,    -1,   118,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,     5,     6,    48,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    -1,    24,    -1,    -1,    -1,   110,    -1,
-      -1,   113,    -1,    -1,   116,    -1,   118,    37,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     5,     6,    48,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    -1,    24,    -1,    -1,    -1,   110,
-      -1,    -1,   113,    -1,   115,   116,    -1,   118,    37,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,     6,    48,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    -1,    24,    -1,    -1,    -1,
-     110,    -1,    -1,   113,    -1,    -1,   116,    -1,   118,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,     6,
-      48,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    -1,    24,    -1,    -1,
-      -1,   110,    -1,    -1,   113,    -1,    -1,   116,    -1,   118,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,
-       6,    48,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    -1,    24,    -1,
-      -1,    -1,   110,    -1,    -1,   113,    -1,    -1,   116,    -1,
-     118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       5,     6,    48,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    -1,    24,
-      -1,    -1,    -1,   110,    -1,    -1,   113,    -1,    -1,   116,
-      -1,   118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   110,    -1,    -1,   113,    -1,    -1,
-     116,    -1,   118,    -1,    -1,    -1,    -1,    -1,    35,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    59,    60,    -1,   110,    -1,    -1,   113,    -1,
-      -1,   116,    -1,   118,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    -1,    -1,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
-static const unsigned char yystos[] =
-{
-       0,   153,   154,   155,     0,    25,    31,    41,    42,    43,
-      44,    45,    46,    47,    62,   134,   172,   174,   176,   183,
-      22,    24,    51,    58,    62,   133,   165,   176,   177,    61,
-      64,    65,    66,    67,    68,    69,    70,   135,   170,    23,
-     184,   185,    30,   119,   173,   184,    52,    53,    54,   162,
-     108,    61,    20,    45,    47,    50,   134,   108,    45,    47,
-     175,    24,   160,     4,     5,     6,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      48,   110,   113,   116,   118,   123,   142,   143,   144,   145,
-     146,   165,   180,    29,   118,   171,   133,   188,   108,   108,
-     108,   113,   163,   160,   142,    32,    33,   152,   152,   152,
-     152,   170,     4,     4,     4,     8,   119,   146,   147,   165,
-     111,   120,    35,    49,    59,    60,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   125,   126,   127,   128,   186,   192,   193,   195,   196,
-      24,    55,    56,   161,     4,    24,   164,   144,   144,   144,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,   129,   130,   132,   144,   149,   114,   114,   109,   119,
-     111,    37,   147,   148,   144,   182,    59,     8,   182,     9,
-      21,    10,    11,    12,    13,    14,    15,    16,    17,   129,
-     130,   131,   135,   144,   144,   182,   144,   144,   189,   182,
-     182,   182,   182,   182,   182,   182,   182,   144,   144,   144,
-     182,   135,    94,    95,   109,   115,   158,   159,   157,    27,
-      28,     3,     4,   124,     4,     7,    26,    38,    39,    96,
-      98,    99,   103,   104,   105,   113,   116,   118,   121,   125,
-     126,   127,   128,   150,   180,   156,   146,   146,   146,    37,
-     144,   167,   168,   169,   109,   112,     3,     4,     7,    26,
-      27,    28,    38,    39,    61,   116,   150,   179,   180,   181,
-     181,   181,   181,   142,   109,   137,   109,   137,   181,   113,
-     109,    36,   109,   109,   109,   109,   109,   109,   109,   181,
-     181,   181,   109,   142,   144,   182,    24,   109,   140,   140,
-     140,   111,   111,   111,   111,   111,   111,   115,   149,   151,
-     151,   119,   151,    24,   111,   111,   111,   111,   140,   115,
-     117,   165,   166,   109,   112,    37,    63,   178,   151,   109,
-     109,   181,    15,    57,    15,   109,   194,   181,   113,   144,
-     182,   144,   182,   182,   182,   144,   144,   109,   109,   109,
-     182,   181,   181,   109,    34,    57,   138,   141,   149,   149,
-     149,   149,   149,   149,   109,   115,   117,   119,   149,   149,
-     149,   149,    37,   167,   138,   139,    24,   117,    21,    21,
-     111,   181,     4,   181,   182,   190,   109,   181,   109,   109,
-     109,   181,   181,   181,   111,   144,    24,     4,   140,   194,
-      36,   109,   109,   109,   109,   149,   109,   109,   109,   109,
-      57,   136,   109,   181,   181,   190,   191,   109,   137,   137,
-     109,   181,   109,   182,   182,   182,   191,   181,   112,   144,
-     149,   149,   149,   149,   149,   149,   149,   149,     4,    24,
-     109,   113,   112,   182,   115,   181,   112,   112,   109,   112,
-     109,   109,   112,   112,   112,   112,    21,   115,   131,   187,
-      36,   115,   149,   149,   149,   181,   179,   115,   131,    21,
-     112,   112,   112,   109,   179,   181,    21,   109,    75,   181,
-      21,    21,   181,   181
-};
+/* 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;
@@ -2756,747 +2111,740 @@
      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 3:
-#line 1089 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-  if ((yyvsp[0].UIntVal) > (uint32_t)INT32_MAX)     // Outside of my range!
+      int i;
+
+      fprintf (stderr, "Reducing via rule %d (line %d), ",
+	       yyn, yyrline[yyn]);
+
+      /* Print the symbols being reduced, and their result.  */
+      for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
+	fprintf (stderr, "%s ", yytname[yyrhs[i]]);
+      fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
+    }
+#endif
+
+
+  switch (yyn) {
+
+case 2:
+#line 1089 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+  if (yyvsp[0].UIntVal > (uint32_t)INT32_MAX)     // Outside of my range!
     GEN_ERROR("Value too large for type!");
-  (yyval.SIntVal) = (int32_t)(yyvsp[0].UIntVal);
+  yyval.SIntVal = (int32_t)yyvsp[0].UIntVal;
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 5:
-#line 1098 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-  if ((yyvsp[0].UInt64Val) > (uint64_t)INT64_MAX)     // Outside of my range!
+;
+    break;}
+case 4:
+#line 1098 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+  if (yyvsp[0].UInt64Val > (uint64_t)INT64_MAX)     // Outside of my range!
     GEN_ERROR("Value too large for type!");
-  (yyval.SInt64Val) = (int64_t)(yyvsp[0].UInt64Val);
+  yyval.SInt64Val = (int64_t)yyvsp[0].UInt64Val;
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 34:
-#line 1122 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.StrVal) = (yyvsp[-1].StrVal);
+;
+    break;}
+case 33:
+#line 1122 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.StrVal = yyvsp[-1].StrVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 35:
-#line 1126 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.StrVal) = 0;
+  ;
+    break;}
+case 34:
+#line 1126 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.StrVal = 0;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 36:
-#line 1131 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
-    break;
-
-  case 37:
-#line 1132 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
-    break;
-
-  case 38:
-#line 1133 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
-    break;
-
-  case 39:
-#line 1134 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
-    break;
-
-  case 40:
-#line 1135 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
-    break;
-
-  case 41:
-#line 1136 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
-    break;
-
-  case 42:
-#line 1137 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
-    break;
-
-  case 43:
-#line 1138 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
-    break;
-
-  case 44:
-#line 1140 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::C; ;}
-    break;
-
-  case 45:
-#line 1141 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::C; ;}
-    break;
-
-  case 46:
-#line 1142 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::CSRet; ;}
-    break;
-
-  case 47:
-#line 1143 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::Fast; ;}
-    break;
-
-  case 48:
-#line 1144 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::Cold; ;}
-    break;
-
-  case 49:
-#line 1145 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::X86_StdCall; ;}
-    break;
-
-  case 50:
-#line 1146 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::X86_FastCall; ;}
-    break;
-
-  case 51:
-#line 1147 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-                   if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val))
+  ;
+    break;}
+case 35:
+#line 1131 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::InternalLinkage; ;
+    break;}
+case 36:
+#line 1132 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
+    break;}
+case 37:
+#line 1133 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::WeakLinkage; ;
+    break;}
+case 38:
+#line 1134 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::AppendingLinkage; ;
+    break;}
+case 39:
+#line 1135 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::DLLImportLinkage; ;
+    break;}
+case 40:
+#line 1136 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::DLLExportLinkage; ;
+    break;}
+case 41:
+#line 1137 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;
+    break;}
+case 42:
+#line 1138 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
+    break;}
+case 43:
+#line 1140 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::C; ;
+    break;}
+case 44:
+#line 1141 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::C; ;
+    break;}
+case 45:
+#line 1142 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::CSRet; ;
+    break;}
+case 46:
+#line 1143 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::Fast; ;
+    break;}
+case 47:
+#line 1144 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::Cold; ;
+    break;}
+case 48:
+#line 1145 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::X86_StdCall; ;
+    break;}
+case 49:
+#line 1146 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::X86_FastCall; ;
+    break;}
+case 50:
+#line 1147 "/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 52:
-#line 1156 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = 0; ;}
-    break;
-
-  case 53:
-#line 1157 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.UIntVal) = (yyvsp[0].UInt64Val);
-  if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
+                 ;
+    break;}
+case 51:
+#line 1156 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = 0; ;
+    break;}
+case 52:
+#line 1157 "/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 54:
-#line 1163 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = 0; ;}
-    break;
-
-  case 55:
-#line 1164 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.UIntVal) = (yyvsp[0].UInt64Val);
-  if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
+;
+    break;}
+case 53:
+#line 1163 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = 0; ;
+    break;}
+case 54:
+#line 1164 "/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 56:
-#line 1172 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-  for (unsigned i = 0, e = strlen((yyvsp[0].StrVal)); i != e; ++i)
-    if ((yyvsp[0].StrVal)[i] == '"' || (yyvsp[0].StrVal)[i] == '\\')
+;
+    break;}
+case 55:
+#line 1172 "/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 57:
-#line 1180 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.StrVal) = 0; ;}
-    break;
-
-  case 58:
-#line 1181 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.StrVal) = (yyvsp[0].StrVal); ;}
-    break;
-
-  case 59:
-#line 1186 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {;}
-    break;
-
-  case 60:
-#line 1187 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {;}
-    break;
-
-  case 61:
-#line 1188 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    CurGV->setSection((yyvsp[0].StrVal));
-    free((yyvsp[0].StrVal));
+;
+    break;}
+case 56:
+#line 1180 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.StrVal = 0; ;
+    break;}
+case 57:
+#line 1181 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.StrVal = yyvsp[0].StrVal; ;
+    break;}
+case 58:
+#line 1186 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{;
+    break;}
+case 59:
+#line 1187 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{;
+    break;}
+case 60:
+#line 1188 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    CurGV->setSection(yyvsp[0].StrVal);
+    free(yyvsp[0].StrVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 62:
-#line 1193 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val)))
+  ;
+    break;}
+case 61:
+#line 1193 "/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 64:
-#line 1207 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType)); ;}
-    break;
-
-  case 66:
-#line 1208 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType)); ;}
-    break;
-
-  case 67:
-#line 1210 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 63:
+#line 1207 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.TypeVal = new PATypeHolder(yyvsp[0].PrimType); ;
+    break;}
+case 65:
+#line 1208 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.TypeVal = new PATypeHolder(yyvsp[0].PrimType); ;
+    break;}
+case 66:
+#line 1210 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
-    (yyval.TypeVal) = (yyvsp[0].TypeVal);
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
+    yyval.TypeVal = yyvsp[0].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 81:
-#line 1222 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
+  ;
+    break;}
+case 80:
+#line 1222 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeVal = new PATypeHolder(OpaqueType::get());
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 82:
-#line 1226 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType));
+  ;
+    break;}
+case 81:
+#line 1226 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeVal = new PATypeHolder(yyvsp[0].PrimType);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 83:
-#line 1230 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {            // Named types are also simple types...
-  const Type* tmp = getTypeVal((yyvsp[0].ValIDVal));
+  ;
+    break;}
+case 82:
+#line 1230 "/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 84:
-#line 1238 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {                   // Type UpReference
-    if ((yyvsp[0].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range!");
+  yyval.TypeVal = new PATypeHolder(tmp);
+;
+    break;}
+case 83:
+#line 1238 "/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 85:
-#line 1246 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {           // Function derived type?
+  ;
+    break;}
+case 84:
+#line 1246 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{           // Function derived type?
     std::vector<const Type*> Params;
-    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)
       Params.push_back(*I);
     bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
     if (isVarArg) Params.pop_back();
 
-    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FunctionType::get(*(yyvsp[-3].TypeVal),Params,isVarArg)));
-    delete (yyvsp[-1].TypeList);      // Delete the argument list
-    delete (yyvsp[-3].TypeVal);      // Delete the return type handle
+    yyval.TypeVal = new PATypeHolder(HandleUpRefs(FunctionType::get(*yyvsp[-3].TypeVal,Params,isVarArg)));
+    delete yyvsp[-1].TypeList;      // Delete the argument list
+    delete yyvsp[-3].TypeVal;      // Delete the return type handle
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 86:
-#line 1259 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {          // Sized array type?
-    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
-    delete (yyvsp[-1].TypeVal);
+  ;
+    break;}
+case 85:
+#line 1259 "/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 87:
-#line 1264 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {          // Packed array type?
-     const llvm::Type* ElemTy = (yyvsp[-1].TypeVal)->get();
-     if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val))
+  ;
+    break;}
+case 86:
+#line 1264 "/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->isPrimitiveType())
         GEN_ERROR("Elemental 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 88:
-#line 1276 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {                        // Structure type?
+  ;
+    break;}
+case 87:
+#line 1276 "/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 89:
-#line 1286 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {                                  // Empty structure type?
-    (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>()));
+  ;
+    break;}
+case 88:
+#line 1286 "/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 90:
-#line 1290 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {                             // Pointer type?
-    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PointerType::get(*(yyvsp[-1].TypeVal))));
-    delete (yyvsp[-1].TypeVal);
+  ;
+    break;}
+case 89:
+#line 1290 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                             // Pointer type?
+    yyval.TypeVal = new PATypeHolder(HandleUpRefs(PointerType::get(*yyvsp[-1].TypeVal)));
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 91:
-#line 1299 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeList) = new std::list<PATypeHolder>();
-    (yyval.TypeList)->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
+  ;
+    break;}
+case 90:
+#line 1299 "/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 92:
-#line 1304 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
+  ;
+    break;}
+case 91:
+#line 1304 "/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 94:
-#line 1311 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(Type::VoidTy);
+  ;
+    break;}
+case 93:
+#line 1311 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    (yyval.TypeList=yyvsp[-2].TypeList)->push_back(Type::VoidTy);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 95:
-#line 1315 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    ((yyval.TypeList) = new std::list<PATypeHolder>())->push_back(Type::VoidTy);
+  ;
+    break;}
+case 94:
+#line 1315 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    (yyval.TypeList = new std::list<PATypeHolder>())->push_back(Type::VoidTy);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 96:
-#line 1319 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeList) = new std::list<PATypeHolder>();
+  ;
+    break;}
+case 95:
+#line 1319 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeList = new std::list<PATypeHolder>();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 97:
-#line 1330 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { // Nonempty unsized arr
-    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-3].TypeVal)->get());
+  ;
+    break;}
+case 96:
+#line 1330 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ // Nonempty unsized arr
+    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 98:
-#line 1356 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
+  ;
+    break;}
+case 97:
+#line 1356 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    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 99:
-#line 1370 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
+  ;
+    break;}
+case 98:
+#line 1370 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    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::SByteTy) {
-      for (signed char *C = (signed char *)(yyvsp[0].StrVal); C != (signed char *)EndStr; ++C)
+      for (signed char *C = (signed char *)yyvsp[0].StrVal; C != (signed char *)EndStr; ++C)
         Vals.push_back(ConstantSInt::get(ETy, *C));
     } else if (ETy == Type::UByteTy) {
-      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(ConstantUInt::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 100:
-#line 1400 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { // Nonempty unsized arr
-    const PackedType *PTy = dyn_cast<PackedType>((yyvsp[-3].TypeVal)->get());
+  ;
+    break;}
+case 99:
+#line 1400 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ // Nonempty unsized arr
+    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 101:
-#line 1426 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal)->get());
+  ;
+    break;}
+case 100:
+#line 1426 "/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) +
                        " of structure initializer!");
 
-    (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 102:
-#line 1447 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    const StructType *STy = dyn_cast<StructType>((yyvsp[-2].TypeVal)->get());
+  ;
+    break;}
+case 101:
+#line 1447 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    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!");
 
-    (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 103:
-#line 1460 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
+  ;
+    break;}
+case 102:
+#line 1460 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    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 104:
-#line 1470 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ConstVal) = UndefValue::get((yyvsp[-1].TypeVal)->get());
-    delete (yyvsp[-1].TypeVal);
+  ;
+    break;}
+case 103:
+#line 1470 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ConstVal = UndefValue::get(yyvsp[-1].TypeVal->get());
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 105:
-#line 1475 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    const PointerType *Ty = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
+  ;
+    break;}
+case 104:
+#line 1475 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    const PointerType *Ty = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
     if (Ty == 0)
       GEN_ERROR("Global const reference must be a pointer type!");
 
@@ -3510,7 +2858,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;
@@ -3525,14 +2873,14 @@
 
       // First check to see if the forward references value is already created!
       PerModuleInfo::GlobalRefsType::iterator I =
-        CurModule.GlobalRefs.find(std::make_pair(PT, (yyvsp[0].ValIDVal)));
+        CurModule.GlobalRefs.find(std::make_pair(PT, yyvsp[0].ValIDVal));
     
       if (I != CurModule.GlobalRefs.end()) {
         V = I->second;             // Placeholder already exists, use it...
-        (yyvsp[0].ValIDVal).destroy();
+        yyvsp[0].ValIDVal.destroy();
       } else {
         std::string Name;
-        if ((yyvsp[0].ValIDVal).Type == ValID::NameVal) Name = (yyvsp[0].ValIDVal).Name;
+        if (yyvsp[0].ValIDVal.Type == ValID::NameVal) Name = yyvsp[0].ValIDVal.Name;
 
         // Create the forward referenced global.
         GlobalValue *GV;
@@ -3547,160 +2895,149 @@
         }
 
         // 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 106:
-#line 1536 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-1].TypeVal)->get() != (yyvsp[0].ConstVal)->getType())
+  ;
+    break;}
+case 105:
+#line 1536 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (yyvsp[-1].TypeVal->get() != yyvsp[0].ConstVal->getType())
       GEN_ERROR("Mismatched types for constant expression!");
-    (yyval.ConstVal) = (yyvsp[0].ConstVal);
-    delete (yyvsp[-1].TypeVal);
+    yyval.ConstVal = yyvsp[0].ConstVal;
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 107:
-#line 1543 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    const Type *Ty = (yyvsp[-1].TypeVal)->get();
+  ;
+    break;}
+case 106:
+#line 1543 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    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 108:
-#line 1552 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {      // integral constants
-    if (!ConstantSInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val)))
+  ;
+    break;}
+case 107:
+#line 1552 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{      // integral constants
+    if (!ConstantSInt::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].SInt64Val))
       GEN_ERROR("Constant value doesn't fit in type!");
-    (yyval.ConstVal) = ConstantSInt::get((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val));
+    yyval.ConstVal = ConstantSInt::get(yyvsp[-1].PrimType, yyvsp[0].SInt64Val);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 109:
-#line 1558 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {            // integral constants
-    if (!ConstantUInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val)))
+  ;
+    break;}
+case 108:
+#line 1558 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{            // integral constants
+    if (!ConstantUInt::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].UInt64Val))
       GEN_ERROR("Constant value doesn't fit in type!");
-    (yyval.ConstVal) = ConstantUInt::get((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val));
+    yyval.ConstVal = ConstantUInt::get(yyvsp[-1].PrimType, yyvsp[0].UInt64Val);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 110:
-#line 1564 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {                      // Boolean constants
-    (yyval.ConstVal) = ConstantBool::True;
+  ;
+    break;}
+case 109:
+#line 1564 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                      // Boolean constants
+    yyval.ConstVal = ConstantBool::getTrue();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 111:
-#line 1568 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {                     // Boolean constants
-    (yyval.ConstVal) = ConstantBool::False;
+  ;
+    break;}
+case 110:
+#line 1568 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                     // Boolean constants
+    yyval.ConstVal = ConstantBool::getFalse();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 112:
-#line 1572 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {                   // Float & Double constants
-    if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].FPVal)))
+  ;
+    break;}
+case 111:
+#line 1572 "/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 113:
-#line 1580 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!(yyvsp[-3].ConstVal)->getType()->isFirstClassType())
+  ;
+    break;}
+case 112:
+#line 1580 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (!yyvsp[-3].ConstVal->getType()->isFirstClassType())
       GEN_ERROR("cast constant expression from a non-primitive type: '" +
-                     (yyvsp[-3].ConstVal)->getType()->getDescription() + "'!");
-    if (!(yyvsp[-1].TypeVal)->get()->isFirstClassType())
+                     yyvsp[-3].ConstVal->getType()->getDescription() + "'!");
+    if (!yyvsp[-1].TypeVal->get()->isFirstClassType())
       GEN_ERROR("cast constant expression to a non-primitive type: '" +
-                     (yyvsp[-1].TypeVal)->get()->getDescription() + "'!");
-    (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[-3].ConstVal), (yyvsp[-1].TypeVal)->get());
-    delete (yyvsp[-1].TypeVal);
+                     yyvsp[-1].TypeVal->get()->getDescription() + "'!");
+    yyval.ConstVal = ConstantExpr::getCast(yyvsp[-3].ConstVal, yyvsp[-1].TypeVal->get());
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 114:
-#line 1591 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!isa<PointerType>((yyvsp[-2].ConstVal)->getType()))
+  ;
+    break;}
+case 113:
+#line 1591 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (!isa<PointerType>(yyvsp[-2].ConstVal->getType()))
       GEN_ERROR("GetElementPtr requires a pointer operand!");
 
     // LLVM 1.2 and earlier used ubyte struct indices.  Convert any ubyte struct
     // indices to uint struct indices for compatibility.
     generic_gep_type_iterator<std::vector<Value*>::iterator>
-      GTI = gep_type_begin((yyvsp[-2].ConstVal)->getType(), (yyvsp[-1].ValueList)->begin(), (yyvsp[-1].ValueList)->end()),
-      GTE = gep_type_end((yyvsp[-2].ConstVal)->getType(), (yyvsp[-1].ValueList)->begin(), (yyvsp[-1].ValueList)->end());
-    for (unsigned i = 0, e = (yyvsp[-1].ValueList)->size(); i != e && GTI != GTE; ++i, ++GTI)
+      GTI = gep_type_begin(yyvsp[-2].ConstVal->getType(), yyvsp[-1].ValueList->begin(), yyvsp[-1].ValueList->end()),
+      GTE = gep_type_end(yyvsp[-2].ConstVal->getType(), yyvsp[-1].ValueList->begin(), yyvsp[-1].ValueList->end());
+    for (unsigned i = 0, e = yyvsp[-1].ValueList->size(); i != e && GTI != GTE; ++i, ++GTI)
       if (isa<StructType>(*GTI))        // Only change struct indices
-        if (ConstantUInt *CUI = dyn_cast<ConstantUInt>((*(yyvsp[-1].ValueList))[i]))
+        if (ConstantUInt *CUI = dyn_cast<ConstantUInt>((*yyvsp[-1].ValueList)[i]))
           if (CUI->getType() == Type::UByteTy)
-            (*(yyvsp[-1].ValueList))[i] = ConstantExpr::getCast(CUI, Type::UIntTy);
+            (*yyvsp[-1].ValueList)[i] = ConstantExpr::getCast(CUI, Type::UIntTy);
 
     const Type *IdxTy =
-      GetElementPtrInst::getIndexedType((yyvsp[-2].ConstVal)->getType(), *(yyvsp[-1].ValueList), true);
+      GetElementPtrInst::getIndexedType(yyvsp[-2].ConstVal->getType(), *yyvsp[-1].ValueList, true);
     if (!IdxTy)
       GEN_ERROR("Index list invalid for constant getelementptr!");
 
     std::vector<Constant*> IdxVec;
-    for (unsigned i = 0, e = (yyvsp[-1].ValueList)->size(); i != e; ++i)
-      if (Constant *C = dyn_cast<Constant>((*(yyvsp[-1].ValueList))[i]))
+    for (unsigned i = 0, e = yyvsp[-1].ValueList->size(); i != e; ++i)
+      if (Constant *C = dyn_cast<Constant>((*yyvsp[-1].ValueList)[i]))
         IdxVec.push_back(C);
       else
         GEN_ERROR("Indices to constant getelementptr must be constants!");
 
-    delete (yyvsp[-1].ValueList);
+    delete yyvsp[-1].ValueList;
 
-    (yyval.ConstVal) = ConstantExpr::getGetElementPtr((yyvsp[-2].ConstVal), IdxVec);
+    yyval.ConstVal = ConstantExpr::getGetElementPtr(yyvsp[-2].ConstVal, IdxVec);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 115:
-#line 1623 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-5].ConstVal)->getType() != Type::BoolTy)
+  ;
+    break;}
+case 114:
+#line 1623 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (yyvsp[-5].ConstVal->getType() != Type::BoolTy)
       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 116:
-#line 1631 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
+  ;
+    break;}
+case 115:
+#line 1631 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
       GEN_ERROR("Binary operator types must match!");
     // HACK: llvm 1.3 and earlier used to emit invalid pointer constant exprs.
     // To retain backward compatibility with these early compilers, we emit a
     // cast to the appropriate integer type automatically if we are in the
     // broken case.  See PR424 for more information.
-    if (!isa<PointerType>((yyvsp[-3].ConstVal)->getType())) {
-      (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+    if (!isa<PointerType>(yyvsp[-3].ConstVal->getType())) {
+      yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
     } else {
       const Type *IntPtrTy = 0;
       switch (CurModule.CurrentModule->getPointerSize()) {
@@ -3708,154 +3045,138 @@
       case Module::Pointer64: IntPtrTy = Type::LongTy; break;
       default: GEN_ERROR("invalid pointer binary constant expr!");
       }
-      (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), ConstantExpr::getCast((yyvsp[-3].ConstVal), IntPtrTy),
-                             ConstantExpr::getCast((yyvsp[-1].ConstVal), IntPtrTy));
-      (yyval.ConstVal) = ConstantExpr::getCast((yyval.ConstVal), (yyvsp[-3].ConstVal)->getType());
+      yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, ConstantExpr::getCast(yyvsp[-3].ConstVal, IntPtrTy),
+                             ConstantExpr::getCast(yyvsp[-1].ConstVal, IntPtrTy));
+      yyval.ConstVal = ConstantExpr::getCast(yyval.ConstVal, yyvsp[-3].ConstVal->getType());
     }
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 117:
-#line 1653 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
+  ;
+    break;}
+case 116:
+#line 1653 "/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()->isIntegral()) {
-      if (!isa<PackedType>((yyvsp[-3].ConstVal)->getType()) || 
-          !cast<PackedType>((yyvsp[-3].ConstVal)->getType())->getElementType()->isIntegral())
+    if (!yyvsp[-3].ConstVal->getType()->isIntegral()) {
+      if (!isa<PackedType>(yyvsp[-3].ConstVal->getType()) || 
+          !cast<PackedType>(yyvsp[-3].ConstVal->getType())->getElementType()->isIntegral())
         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 118:
-#line 1664 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
+  ;
+    break;}
+case 117:
+#line 1664 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
       GEN_ERROR("setcc operand types must match!");
-    (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 119:
-#line 1670 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-1].ConstVal)->getType() != Type::UByteTy)
+  ;
+    break;}
+case 118:
+#line 1670 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (yyvsp[-1].ConstVal->getType() != Type::UByteTy)
       GEN_ERROR("Shift count for shift constant must be unsigned byte!");
-    if (!(yyvsp[-3].ConstVal)->getType()->isInteger())
+    if (!yyvsp[-3].ConstVal->getType()->isInteger())
       GEN_ERROR("Shift constant expression requires integer operand!");
-    (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 120:
-#line 1678 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
+  ;
+    break;}
+case 119:
+#line 1678 "/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 121:
-#line 1684 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
+  ;
+    break;}
+case 120:
+#line 1684 "/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 122:
-#line 1690 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
+  ;
+    break;}
+case 121:
+#line 1690 "/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 123:
-#line 1699 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal));
+  ;
+    break;}
+case 122:
+#line 1699 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    (yyval.ConstVector = yyvsp[-2].ConstVector)->push_back(yyvsp[0].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 124:
-#line 1703 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ConstVector) = new std::vector<Constant*>();
-    (yyval.ConstVector)->push_back((yyvsp[0].ConstVal));
+  ;
+    break;}
+case 123:
+#line 1703 "/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 125:
-#line 1711 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.BoolVal) = false; ;}
-    break;
-
-  case 126:
-#line 1711 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.BoolVal) = true; ;}
-    break;
-
-  case 127:
-#line 1721 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.ModuleVal) = ParserResult = (yyvsp[0].ModuleVal);
+  ;
+    break;}
+case 124:
+#line 1711 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.BoolVal = false; ;
+    break;}
+case 125:
+#line 1711 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.BoolVal = true; ;
+    break;}
+case 126:
+#line 1721 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+  yyval.ModuleVal = ParserResult = yyvsp[0].ModuleVal;
   CurModule.ModuleDone();
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 128:
-#line 1729 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
+;
+    break;}
+case 127:
+#line 1729 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ModuleVal = yyvsp[-1].ModuleVal;
     CurFun.FunctionDone();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 129:
-#line 1734 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
+  ;
+    break;}
+case 128:
+#line 1734 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ModuleVal = yyvsp[-1].ModuleVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 130:
-#line 1738 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ModuleVal) = (yyvsp[-3].ModuleVal);
+  ;
+    break;}
+case 129:
+#line 1738 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ModuleVal = yyvsp[-3].ModuleVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 131:
-#line 1742 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
+  ;
+    break;}
+case 130:
+#line 1742 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ModuleVal = yyvsp[-1].ModuleVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 132:
-#line 1746 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ModuleVal) = CurModule.CurrentModule;
+  ;
+    break;}
+case 131:
+#line 1746 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ModuleVal = CurModule.CurrentModule;
     // Emit an error if there are any unresolved types left.
     if (!CurModule.LateResolveTypes.empty()) {
       const ValID &DID = CurModule.LateResolveTypes.begin()->first;
@@ -3866,12 +3187,11 @@
       }
     }
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 133:
-#line 1761 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 132:
+#line 1761 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     // Eagerly resolve types.  This is not an optimization, this is a
     // requirement that is due to the fact that we could have this:
     //
@@ -3881,297 +3201,266 @@
     // If types are not resolved eagerly, then the two types will not be
     // determined to be the same type!
     //
-    ResolveTypeTo((yyvsp[-2].StrVal), *(yyvsp[0].TypeVal));
+    ResolveTypeTo(yyvsp[-2].StrVal, *yyvsp[0].TypeVal);
 
-    if (!setTypeName(*(yyvsp[0].TypeVal), (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) {
+    if (!setTypeName(*yyvsp[0].TypeVal, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) {
       CHECK_FOR_ERROR
       // If this is a named type that is not a redefinition, add it to the slot
       // table.
-      CurModule.Types.push_back(*(yyvsp[0].TypeVal));
+      CurModule.Types.push_back(*yyvsp[0].TypeVal);
     }
 
-    delete (yyvsp[0].TypeVal);
+    delete yyvsp[0].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 134:
-#line 1783 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {       // Function prototypes can be in const pool
+  ;
+    break;}
+case 133:
+#line 1783 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{       // Function prototypes can be in const pool
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 135:
-#line 1786 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {  // Asm blocks can be in the const pool
+  ;
+    break;}
+case 134:
+#line 1786 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{  // Asm blocks can be in the const pool
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 136:
-#line 1789 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[0].ConstVal) == 0) 
+  ;
+    break;}
+case 135:
+#line 1789 "/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[-3].StrVal), (yyvsp[-2].Linkage), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal));
+    CurGV = ParseGlobalVariable(yyvsp[-3].StrVal, yyvsp[-2].Linkage, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 137:
-#line 1794 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 136:
+#line 1794 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CurGV = 0;
-  ;}
-    break;
-
-  case 138:
-#line 1797 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalLinkage, (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
+  ;
+    break;}
+case 137:
+#line 1797 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    CurGV = ParseGlobalVariable(yyvsp[-3].StrVal, GlobalValue::ExternalLinkage, yyvsp[-1].BoolVal, *yyvsp[0].TypeVal, 0);
     CHECK_FOR_ERROR
-    delete (yyvsp[0].TypeVal);
-  ;}
-    break;
-
-  case 139:
-#line 1801 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+    delete yyvsp[0].TypeVal;
+  ;
+    break;}
+case 138:
+#line 1801 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CurGV = 0;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 140:
-#line 1805 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::DLLImportLinkage, (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
+  ;
+    break;}
+case 139:
+#line 1805 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    CurGV = ParseGlobalVariable(yyvsp[-3].StrVal, GlobalValue::DLLImportLinkage, yyvsp[-1].BoolVal, *yyvsp[0].TypeVal, 0);
     CHECK_FOR_ERROR
-    delete (yyvsp[0].TypeVal);
-  ;}
-    break;
-
-  case 141:
-#line 1809 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+    delete yyvsp[0].TypeVal;
+  ;
+    break;}
+case 140:
+#line 1809 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CurGV = 0;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 142:
-#line 1813 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 141:
+#line 1813 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CurGV = 
-      ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalWeakLinkage, (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
+      ParseGlobalVariable(yyvsp[-3].StrVal, GlobalValue::ExternalWeakLinkage, yyvsp[-1].BoolVal, *yyvsp[0].TypeVal, 0);
     CHECK_FOR_ERROR
-    delete (yyvsp[0].TypeVal);
-  ;}
-    break;
-
-  case 143:
-#line 1818 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+    delete yyvsp[0].TypeVal;
+  ;
+    break;}
+case 142:
+#line 1818 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CurGV = 0;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 144:
-#line 1822 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { 
+  ;
+    break;}
+case 143:
+#line 1822 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ 
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 145:
-#line 1825 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 144:
+#line 1825 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 146:
-#line 1828 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { 
-  ;}
-    break;
-
-  case 147:
-#line 1832 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 145:
+#line 1828 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ 
+  ;
+    break;}
+case 146:
+#line 1832 "/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 148:
-#line 1845 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Endianness) = Module::BigEndian; ;}
-    break;
-
-  case 149:
-#line 1846 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Endianness) = Module::LittleEndian; ;}
-    break;
-
-  case 150:
-#line 1848 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    CurModule.CurrentModule->setEndianness((yyvsp[0].Endianness));
+;
+    break;}
+case 147:
+#line 1845 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Endianness = Module::BigEndian; ;
+    break;}
+case 148:
+#line 1846 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Endianness = Module::LittleEndian; ;
+    break;}
+case 149:
+#line 1848 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    CurModule.CurrentModule->setEndianness(yyvsp[0].Endianness);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 151:
-#line 1852 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[0].UInt64Val) == 32)
+  ;
+    break;}
+case 150:
+#line 1852 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (yyvsp[0].UInt64Val == 32)
       CurModule.CurrentModule->setPointerSize(Module::Pointer32);
-    else if ((yyvsp[0].UInt64Val) == 64)
+    else if (yyvsp[0].UInt64Val == 64)
       CurModule.CurrentModule->setPointerSize(Module::Pointer64);
     else
-      GEN_ERROR("Invalid pointer size: '" + utostr((yyvsp[0].UInt64Val)) + "'!");
+      GEN_ERROR("Invalid pointer size: '" + utostr(yyvsp[0].UInt64Val) + "'!");
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 152:
-#line 1861 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal));
-    free((yyvsp[0].StrVal));
+  ;
+    break;}
+case 151:
+#line 1861 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    CurModule.CurrentModule->setTargetTriple(yyvsp[0].StrVal);
+    free(yyvsp[0].StrVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 154:
-#line 1869 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-          CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
-          free((yyvsp[0].StrVal));
+  ;
+    break;}
+case 153:
+#line 1869 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+          CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
+          free(yyvsp[0].StrVal);
           CHECK_FOR_ERROR
-        ;}
-    break;
-
-  case 155:
-#line 1874 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-          CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
-          free((yyvsp[0].StrVal));
+        ;
+    break;}
+case 154:
+#line 1874 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+          CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
+          free(yyvsp[0].StrVal);
           CHECK_FOR_ERROR
-        ;}
-    break;
-
-  case 156:
-#line 1879 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+        ;
+    break;}
+case 155:
+#line 1879 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
           CHECK_FOR_ERROR
-        ;}
-    break;
-
-  case 160:
-#line 1889 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.StrVal) = 0; ;}
-    break;
-
-  case 161:
-#line 1891 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-  if (*(yyvsp[-1].TypeVal) == Type::VoidTy)
+        ;
+    break;}
+case 159:
+#line 1889 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.StrVal = 0; ;
+    break;}
+case 160:
+#line 1891 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+  if (*yyvsp[-1].TypeVal == Type::VoidTy)
     GEN_ERROR("void typed arguments are invalid!");
-  (yyval.ArgVal) = new std::pair<PATypeHolder*, char*>((yyvsp[-1].TypeVal), (yyvsp[0].StrVal));
+  yyval.ArgVal = new std::pair<PATypeHolder*, char*>(yyvsp[-1].TypeVal, yyvsp[0].StrVal);
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 162:
-#line 1898 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ArgList) = (yyvsp[-2].ArgList);
-    (yyvsp[-2].ArgList)->push_back(*(yyvsp[0].ArgVal));
-    delete (yyvsp[0].ArgVal);
+;
+    break;}
+case 161:
+#line 1898 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ArgList = yyvsp[-2].ArgList;
+    yyvsp[-2].ArgList->push_back(*yyvsp[0].ArgVal);
+    delete yyvsp[0].ArgVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 163:
-#line 1904 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ArgList) = new std::vector<std::pair<PATypeHolder*,char*> >();
-    (yyval.ArgList)->push_back(*(yyvsp[0].ArgVal));
-    delete (yyvsp[0].ArgVal);
+  ;
+    break;}
+case 162:
+#line 1904 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ArgList = new std::vector<std::pair<PATypeHolder*,char*> >();
+    yyval.ArgList->push_back(*yyvsp[0].ArgVal);
+    delete yyvsp[0].ArgVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 164:
-#line 1911 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ArgList) = (yyvsp[0].ArgList);
+  ;
+    break;}
+case 163:
+#line 1911 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ArgList = yyvsp[0].ArgList;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 165:
-#line 1915 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ArgList) = (yyvsp[-2].ArgList);
-    (yyval.ArgList)->push_back(std::pair<PATypeHolder*,
+  ;
+    break;}
+case 164:
+#line 1915 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ArgList = yyvsp[-2].ArgList;
+    yyval.ArgList->push_back(std::pair<PATypeHolder*,
                             char*>(new PATypeHolder(Type::VoidTy), 0));
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 166:
-#line 1921 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ArgList) = new std::vector<std::pair<PATypeHolder*,char*> >();
-    (yyval.ArgList)->push_back(std::make_pair(new PATypeHolder(Type::VoidTy), (char*)0));
+  ;
+    break;}
+case 165:
+#line 1921 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ArgList = new std::vector<std::pair<PATypeHolder*,char*> >();
+    yyval.ArgList->push_back(std::make_pair(new PATypeHolder(Type::VoidTy), (char*)0));
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 167:
-#line 1926 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ArgList) = 0;
+  ;
+    break;}
+case 166:
+#line 1926 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ArgList = 0;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 168:
-#line 1932 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-  UnEscapeLexed((yyvsp[-5].StrVal));
-  std::string FunctionName((yyvsp[-5].StrVal));
-  free((yyvsp[-5].StrVal));  // Free strdup'd memory!
+  ;
+    break;}
+case 167:
+#line 1932 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+  UnEscapeLexed(yyvsp[-5].StrVal);
+  std::string FunctionName(yyvsp[-5].StrVal);
+  free(yyvsp[-5].StrVal);  // Free strdup'd memory!
   
-  if (!(*(yyvsp[-6].TypeVal))->isFirstClassType() && *(yyvsp[-6].TypeVal) != Type::VoidTy)
+  if (!(*yyvsp[-6].TypeVal)->isFirstClassType() && *yyvsp[-6].TypeVal != Type::VoidTy)
     GEN_ERROR("LLVM functions cannot return aggregate types!");
 
   std::vector<const Type*> ParamTypeList;
-  if ((yyvsp[-3].ArgList)) {   // If there are arguments...
-    for (std::vector<std::pair<PATypeHolder*,char*> >::iterator I = (yyvsp[-3].ArgList)->begin();
-         I != (yyvsp[-3].ArgList)->end(); ++I)
+  if (yyvsp[-3].ArgList) {   // If there are arguments...
+    for (std::vector<std::pair<PATypeHolder*,char*> >::iterator I = yyvsp[-3].ArgList->begin();
+         I != yyvsp[-3].ArgList->end(); ++I)
       ParamTypeList.push_back(I->first->get());
   }
 
   bool isVarArg = ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy;
   if (isVarArg) ParamTypeList.pop_back();
 
-  const FunctionType *FT = FunctionType::get(*(yyvsp[-6].TypeVal), ParamTypeList, isVarArg);
+  const FunctionType *FT = FunctionType::get(*yyvsp[-6].TypeVal, ParamTypeList, isVarArg);
   const PointerType *PFT = PointerType::get(FT);
-  delete (yyvsp[-6].TypeVal);
+  delete yyvsp[-6].TypeVal;
 
   ValID ID;
   if (!FunctionName.empty()) {
@@ -4215,24 +3504,24 @@
     // another function.
     Fn->setLinkage(CurFun.Linkage);
   }
-  Fn->setCallingConv((yyvsp[-7].UIntVal));
-  Fn->setAlignment((yyvsp[0].UIntVal));
-  if ((yyvsp[-1].StrVal)) {
-    Fn->setSection((yyvsp[-1].StrVal));
-    free((yyvsp[-1].StrVal));
+  Fn->setCallingConv(yyvsp[-7].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[-3].ArgList)) {                     // Is null if empty...
+  if (yyvsp[-3].ArgList) {                     // Is null if empty...
     if (isVarArg) {  // Nuke the last entry
-      assert((yyvsp[-3].ArgList)->back().first->get() == Type::VoidTy && (yyvsp[-3].ArgList)->back().second == 0&&
+      assert(yyvsp[-3].ArgList->back().first->get() == Type::VoidTy && yyvsp[-3].ArgList->back().second == 0&&
              "Not a varargs marker!");
-      delete (yyvsp[-3].ArgList)->back().first;
-      (yyvsp[-3].ArgList)->pop_back();  // Delete the last entry
+      delete yyvsp[-3].ArgList->back().first;
+      yyvsp[-3].ArgList->pop_back();  // Delete the last entry
     }
     Function::arg_iterator ArgIt = Fn->arg_begin();
-    for (std::vector<std::pair<PATypeHolder*,char*> >::iterator I = (yyvsp[-3].ArgList)->begin();
-         I != (yyvsp[-3].ArgList)->end(); ++I, ++ArgIt) {
+    for (std::vector<std::pair<PATypeHolder*,char*> >::iterator I = yyvsp[-3].ArgList->begin();
+         I != yyvsp[-3].ArgList->end(); ++I, ++ArgIt) {
       delete I->first;                          // Delete the typeholder...
 
       setValueName(ArgIt, I->second);           // Insert arg into symtab...
@@ -4240,140 +3529,123 @@
       InsertValue(ArgIt);
     }
 
-    delete (yyvsp[-3].ArgList);                     // We're now done with the argument list
+    delete yyvsp[-3].ArgList;                     // We're now done with the argument list
   }
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 171:
-#line 2028 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.FunctionVal) = CurFun.CurrentFunction;
+;
+    break;}
+case 170:
+#line 2028 "/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[-2].Linkage));
-;}
-    break;
-
-  case 174:
-#line 2038 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
+  yyval.FunctionVal->setLinkage(yyvsp[-2].Linkage);
+;
+    break;}
+case 173:
+#line 2038 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+  yyval.FunctionVal = yyvsp[-1].FunctionVal;
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 176:
-#line 2044 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { CurFun.Linkage = GlobalValue::DLLImportLinkage ;}
-    break;
-
-  case 177:
-#line 2045 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { CurFun.Linkage = GlobalValue::DLLImportLinkage ;}
-    break;
-
-  case 178:
-#line 2047 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { CurFun.isDeclare = true; ;}
-    break;
-
-  case 179:
-#line 2047 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.FunctionVal) = CurFun.CurrentFunction;
+;
+    break;}
+case 175:
+#line 2044 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ CurFun.Linkage = GlobalValue::DLLImportLinkage ;
+    break;}
+case 176:
+#line 2045 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ CurFun.Linkage = GlobalValue::DLLImportLinkage ;
+    break;}
+case 177:
+#line 2047 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ CurFun.isDeclare = true; ;
+    break;}
+case 178:
+#line 2047 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.FunctionVal = CurFun.CurrentFunction;
     CurFun.FunctionDone();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 180:
-#line 2057 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = false;
+  ;
+    break;}
+case 179:
+#line 2057 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = false;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 181:
-#line 2061 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = true;
+  ;
+    break;}
+case 180:
+#line 2061 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = true;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 182:
-#line 2066 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {    // A reference to a direct constant
-    (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val));
+  ;
+    break;}
+case 181:
+#line 2066 "/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 183:
-#line 2070 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val));
+  ;
+    break;}
+case 182:
+#line 2070 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::create(yyvsp[0].UInt64Val);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 184:
-#line 2074 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {                     // Perhaps it's an FP constant?
-    (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal));
+  ;
+    break;}
+case 183:
+#line 2074 "/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 185:
-#line 2078 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::create(ConstantBool::True);
+  ;
+    break;}
+case 184:
+#line 2078 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::create(ConstantBool::getTrue());
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 186:
-#line 2082 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::create(ConstantBool::False);
+  ;
+    break;}
+case 185:
+#line 2082 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::create(ConstantBool::getFalse());
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 187:
-#line 2086 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::createNull();
+  ;
+    break;}
+case 186:
+#line 2086 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::createNull();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 188:
-#line 2090 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::createUndef();
+  ;
+    break;}
+case 187:
+#line 2090 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::createUndef();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 189:
-#line 2094 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {     // A vector zero constant.
-    (yyval.ValIDVal) = ValID::createZeroInit();
+  ;
+    break;}
+case 188:
+#line 2094 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{     // A vector zero constant.
+    yyval.ValIDVal = ValID::createZeroInit();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 190:
-#line 2098 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { // Nonempty unsized packed vector
-    const Type *ETy = (*(yyvsp[-1].ConstVector))[0]->getType();
-    int NumElements = (yyvsp[-1].ConstVector)->size(); 
+  ;
+    break;}
+case 189:
+#line 2098 "/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(
@@ -4385,108 +3657,98 @@
                                          );
     
     // 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 191:
-#line 2123 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal));
+  ;
+    break;}
+case 190:
+#line 2123 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::create(yyvsp[0].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 192:
-#line 2127 "/proj/llvm/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));
+  ;
+    break;}
+case 191:
+#line 2127 "/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 193:
-#line 2141 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {  // Is it an integer reference...?
-    (yyval.ValIDVal) = ValID::create((yyvsp[0].SIntVal));
+  ;
+    break;}
+case 192:
+#line 2141 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{  // Is it an integer reference...?
+    yyval.ValIDVal = ValID::create(yyvsp[0].SIntVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 194:
-#line 2145 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {                   // Is it a named reference...?
-    (yyval.ValIDVal) = ValID::create((yyvsp[0].StrVal));
+  ;
+    break;}
+case 193:
+#line 2145 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                   // Is it a named reference...?
+    yyval.ValIDVal = ValID::create(yyvsp[0].StrVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 197:
-#line 2157 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValueVal) = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal)); delete (yyvsp[-1].TypeVal);
+  ;
+    break;}
+case 196:
+#line 2157 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValueVal = getVal(*yyvsp[-1].TypeVal, yyvsp[0].ValIDVal); delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 198:
-#line 2162 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
+  ;
+    break;}
+case 197:
+#line 2162 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.FunctionVal = yyvsp[-1].FunctionVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 199:
-#line 2166 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { // Do not allow functions with 0 basic blocks   
-    (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
+  ;
+    break;}
+case 198:
+#line 2166 "/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 200:
-#line 2175 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    setValueName((yyvsp[0].TermInstVal), (yyvsp[-1].StrVal));
+  ;
+    break;}
+case 199:
+#line 2175 "/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 201:
-#line 2186 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyvsp[-1].BasicBlockVal)->getInstList().push_back((yyvsp[0].InstVal));
-    (yyval.BasicBlockVal) = (yyvsp[-1].BasicBlockVal);
+  ;
+    break;}
+case 200:
+#line 2186 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyvsp[-1].BasicBlockVal->getInstList().push_back(yyvsp[0].InstVal);
+    yyval.BasicBlockVal = yyvsp[-1].BasicBlockVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 202:
-#line 2191 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((int)CurFun.NextBBNum++), true);
+  ;
+    break;}
+case 201:
+#line 2191 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BasicBlockVal = CurBB = getBBVal(ValID::create((int)CurFun.NextBBNum++), true);
     CHECK_FOR_ERROR
 
     // Make sure to move the basic block to the correct location in the
@@ -4494,15 +3756,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 203:
-#line 2203 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((yyvsp[0].StrVal)), true);
+  ;
+    break;}
+case 202:
+#line 2203 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BasicBlockVal = CurBB = getBBVal(ValID::create(yyvsp[0].StrVal), true);
     CHECK_FOR_ERROR
 
     // Make sure to move the basic block to the correct location in the
@@ -4510,97 +3771,90 @@
     // 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 203:
+#line 2216 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{              // Return with a result...
+    yyval.TermInstVal = new ReturnInst(yyvsp[0].ValueVal);
+    CHECK_FOR_ERROR
+  ;
+    break;}
+case 204:
+#line 2220 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                                       // Return with no result...
+    yyval.TermInstVal = new ReturnInst();
+    CHECK_FOR_ERROR
+  ;
+    break;}
+case 205:
+#line 2224 "/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 206:
+#line 2229 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{  
+    BasicBlock* tmpBBA = getBBVal(yyvsp[-3].ValIDVal);
+    CHECK_FOR_ERROR
+    BasicBlock* tmpBBB = getBBVal(yyvsp[0].ValIDVal);
+    CHECK_FOR_ERROR
+    Value* tmpVal = getVal(Type::BoolTy, yyvsp[-6].ValIDVal);
+    CHECK_FOR_ERROR
+    yyval.TermInstVal = new BranchInst(tmpBBA, tmpBBB, tmpVal);
+  ;
+    break;}
+case 207:
+#line 2238 "/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 204:
-#line 2216 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {              // Return with a result...
-    (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal));
-    CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 205:
-#line 2220 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {                                       // Return with no result...
-    (yyval.TermInstVal) = new ReturnInst();
-    CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 206:
-#line 2224 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {                         // Unconditional Branch...
-    BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
-    CHECK_FOR_ERROR
-    (yyval.TermInstVal) = new BranchInst(tmpBB);
-  ;}
-    break;
-
-  case 207:
-#line 2229 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {  
-    BasicBlock* tmpBBA = getBBVal((yyvsp[-3].ValIDVal));
-    CHECK_FOR_ERROR
-    BasicBlock* tmpBBB = getBBVal((yyvsp[0].ValIDVal));
-    CHECK_FOR_ERROR
-    Value* tmpVal = getVal(Type::BoolTy, (yyvsp[-6].ValIDVal));
-    CHECK_FOR_ERROR
-    (yyval.TermInstVal) = new BranchInst(tmpBBA, tmpBBB, tmpVal);
-  ;}
-    break;
-
-  case 208:
-#line 2238 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    Value* tmpVal = getVal((yyvsp[-7].PrimType), (yyvsp[-6].ValIDVal));
-    CHECK_FOR_ERROR
-    BasicBlock* tmpBB = getBBVal((yyvsp[-3].ValIDVal));
-    CHECK_FOR_ERROR
-    SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[-1].JumpTable)->size());
-    (yyval.TermInstVal) = S;
-
-    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 209:
-#line 2257 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    Value* tmpVal = getVal((yyvsp[-6].PrimType), (yyvsp[-5].ValIDVal));
+  ;
+    break;}
+case 208:
+#line 2257 "/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 210:
-#line 2267 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 209:
+#line 2267 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     const PointerType *PFTy;
     const FunctionType *Ty;
 
-    if (!(PFTy = dyn_cast<PointerType>((yyvsp[-10].TypeVal)->get())) ||
+    if (!(PFTy = dyn_cast<PointerType>(yyvsp[-10].TypeVal->get())) ||
         !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
       // Pull out the types of all of the arguments...
       std::vector<const Type*> ParamTypes;
-      if ((yyvsp[-7].ValueList)) {
-        for (std::vector<Value*>::iterator I = (yyvsp[-7].ValueList)->begin(), E = (yyvsp[-7].ValueList)->end();
+      if (yyvsp[-7].ValueList) {
+        for (std::vector<Value*>::iterator I = yyvsp[-7].ValueList->begin(), E = yyvsp[-7].ValueList->end();
              I != E; ++I)
           ParamTypes.push_back((*I)->getType());
       }
@@ -4608,27 +3862,27 @@
       bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy;
       if (isVarArg) ParamTypes.pop_back();
 
-      Ty = FunctionType::get((yyvsp[-10].TypeVal)->get(), ParamTypes, isVarArg);
+      Ty = FunctionType::get(yyvsp[-10].TypeVal->get(), ParamTypes, isVarArg);
       PFTy = PointerType::get(Ty);
     }
 
-    Value *V = getVal(PFTy, (yyvsp[-9].ValIDVal));   // Get the function we're calling...
+    Value *V = getVal(PFTy, yyvsp[-9].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
 
     // Create the call node...
-    if (!(yyvsp[-7].ValueList)) {                                   // Has no arguments?
-      (yyval.TermInstVal) = new InvokeInst(V, Normal, Except, std::vector<Value*>());
+    if (!yyvsp[-7].ValueList) {                                   // Has no arguments?
+      yyval.TermInstVal = new InvokeInst(V, Normal, Except, std::vector<Value*>());
     } else {                                     // Has arguments?
       // Loop through FunctionType's arguments and ensure they are specified
       // correctly!
       //
       FunctionType::param_iterator I = Ty->param_begin();
       FunctionType::param_iterator E = Ty->param_end();
-      std::vector<Value*>::iterator ArgI = (yyvsp[-7].ValueList)->begin(), ArgE = (yyvsp[-7].ValueList)->end();
+      std::vector<Value*>::iterator ArgI = yyvsp[-7].ValueList->begin(), ArgE = yyvsp[-7].ValueList->end();
 
       for (; ArgI != ArgE && I != E; ++ArgI, ++I)
         if ((*ArgI)->getType() != *I)
@@ -4638,263 +3892,242 @@
       if (I != E || (ArgI != ArgE && !Ty->isVarArg()))
         GEN_ERROR("Invalid number of parameters detected!");
 
-      (yyval.TermInstVal) = new InvokeInst(V, Normal, Except, *(yyvsp[-7].ValueList));
+      yyval.TermInstVal = new InvokeInst(V, Normal, Except, *yyvsp[-7].ValueList);
     }
-    cast<InvokeInst>((yyval.TermInstVal))->setCallingConv((yyvsp[-11].UIntVal));
+    cast<InvokeInst>(yyval.TermInstVal)->setCallingConv(yyvsp[-11].UIntVal);
   
-    delete (yyvsp[-10].TypeVal);
-    delete (yyvsp[-7].ValueList);
+    delete yyvsp[-10].TypeVal;
+    delete yyvsp[-7].ValueList;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 211:
-#line 2322 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TermInstVal) = new UnwindInst();
+  ;
+    break;}
+case 210:
+#line 2322 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TermInstVal = new UnwindInst();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 212:
-#line 2326 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TermInstVal) = new UnreachableInst();
+  ;
+    break;}
+case 211:
+#line 2326 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TermInstVal = new UnreachableInst();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 213:
-#line 2333 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.JumpTable) = (yyvsp[-5].JumpTable);
-    Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
+  ;
+    break;}
+case 212:
+#line 2333 "/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 214:
-#line 2344 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
-    Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
+    yyval.JumpTable->push_back(std::make_pair(V, tmpBB));
+  ;
+    break;}
+case 213:
+#line 2344 "/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 215:
-#line 2357 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+    yyval.JumpTable->push_back(std::make_pair(V, tmpBB)); 
+  ;
+    break;}
+case 214:
+#line 2357 "/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 216:
-#line 2366 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {    // Used for PHI nodes
-    (yyval.PHIList) = new std::list<std::pair<Value*, BasicBlock*> >();
-    Value* tmpVal = getVal(*(yyvsp[-5].TypeVal), (yyvsp[-3].ValIDVal));
+;
+    break;}
+case 215:
+#line 2366 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{    // Used for PHI nodes
+    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 217:
-#line 2375 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.PHIList) = (yyvsp[-6].PHIList);
-    Value* tmpVal = getVal((yyvsp[-6].PHIList)->front().first->getType(), (yyvsp[-3].ValIDVal));
+    yyval.PHIList->push_back(std::make_pair(tmpVal, tmpBB));
+    delete yyvsp[-5].TypeVal;
+  ;
+    break;}
+case 216:
+#line 2375 "/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 218:
-#line 2385 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {    // Used for call statements, and memory insts...
-    (yyval.ValueList) = new std::vector<Value*>();
-    (yyval.ValueList)->push_back((yyvsp[0].ValueVal));
-  ;}
-    break;
-
-  case 219:
-#line 2389 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValueList) = (yyvsp[-2].ValueList);
-    (yyvsp[-2].ValueList)->push_back((yyvsp[0].ValueVal));
+    yyvsp[-6].PHIList->push_back(std::make_pair(tmpVal, tmpBB));
+  ;
+    break;}
+case 217:
+#line 2385 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{    // Used for call statements, and memory insts...
+    yyval.ValueList = new std::vector<Value*>();
+    yyval.ValueList->push_back(yyvsp[0].ValueVal);
+  ;
+    break;}
+case 218:
+#line 2389 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValueList = yyvsp[-2].ValueList;
+    yyvsp[-2].ValueList->push_back(yyvsp[0].ValueVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 221:
-#line 2396 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ValueList) = 0; ;}
-    break;
-
-  case 222:
-#line 2398 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = true;
+  ;
+    break;}
+case 220:
+#line 2396 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ValueList = 0; ;
+    break;}
+case 221:
+#line 2398 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = true;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 223:
-#line 2402 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = false;
+  ;
+    break;}
+case 222:
+#line 2402 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = false;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 224:
-#line 2407 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!(*(yyvsp[-3].TypeVal))->isInteger() && !(*(yyvsp[-3].TypeVal))->isFloatingPoint() && 
-        !isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
+  ;
+    break;}
+case 223:
+#line 2407 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    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::Rem)
+    if (isa<PackedType>((*yyvsp[-3].TypeVal).get()) && yyvsp[-4].BinaryOpVal == Instruction::Rem)
       GEN_ERROR("Rem 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 225:
-#line 2423 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!(*(yyvsp[-3].TypeVal))->isIntegral()) {
-      if (!isa<PackedType>((yyvsp[-3].TypeVal)->get()) ||
-          !cast<PackedType>((yyvsp[-3].TypeVal)->get())->getElementType()->isIntegral())
+    delete yyvsp[-3].TypeVal;
+  ;
+    break;}
+case 224:
+#line 2423 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (!(*yyvsp[-3].TypeVal)->isIntegral()) {
+      if (!isa<PackedType>(yyvsp[-3].TypeVal->get()) ||
+          !cast<PackedType>(yyvsp[-3].TypeVal->get())->getElementType()->isIntegral())
         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 226:
-#line 2438 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if(isa<PackedType>((*(yyvsp[-3].TypeVal)).get())) {
+    delete yyvsp[-3].TypeVal;
+  ;
+    break;}
+case 225:
+#line 2438 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if(isa<PackedType>((*yyvsp[-3].TypeVal).get())) {
       GEN_ERROR(
         "PackedTypes currently not supported in setcc instructions!");
     }
-    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) = new SetCondInst((yyvsp[-4].BinaryOpVal), tmpVal1, tmpVal2);
-    if ((yyval.InstVal) == 0)
+    yyval.InstVal = new SetCondInst(yyvsp[-4].BinaryOpVal, tmpVal1, tmpVal2);
+    if (yyval.InstVal == 0)
       GEN_ERROR("binary operator returned null!");
-    delete (yyvsp[-3].TypeVal);
-  ;}
-    break;
-
-  case 227:
-#line 2452 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+    delete yyvsp[-3].TypeVal;
+  ;
+    break;}
+case 226:
+#line 2452 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     std::cerr << "WARNING: Use of eliminated 'not' instruction:"
               << " Replacing with 'xor'.\n";
 
-    Value *Ones = ConstantIntegral::getAllOnesValue((yyvsp[0].ValueVal)->getType());
+    Value *Ones = ConstantIntegral::getAllOnesValue(yyvsp[0].ValueVal->getType());
     if (Ones == 0)
       GEN_ERROR("Expected integral type for not instruction!");
 
-    (yyval.InstVal) = BinaryOperator::create(Instruction::Xor, (yyvsp[0].ValueVal), Ones);
-    if ((yyval.InstVal) == 0)
+    yyval.InstVal = BinaryOperator::create(Instruction::Xor, yyvsp[0].ValueVal, Ones);
+    if (yyval.InstVal == 0)
       GEN_ERROR("Could not create a xor instruction!");
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 228:
-#line 2465 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[0].ValueVal)->getType() != Type::UByteTy)
+  ;
+    break;}
+case 227:
+#line 2465 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (yyvsp[0].ValueVal->getType() != Type::UByteTy)
       GEN_ERROR("Shift amount must be ubyte!");
-    if (!(yyvsp[-2].ValueVal)->getType()->isInteger())
+    if (!yyvsp[-2].ValueVal->getType()->isInteger())
       GEN_ERROR("Shift constant expression requires integer operand!");
-    (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 229:
-#line 2473 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!(yyvsp[0].TypeVal)->get()->isFirstClassType())
+  ;
+    break;}
+case 228:
+#line 2473 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (!yyvsp[0].TypeVal->get()->isFirstClassType())
       GEN_ERROR("cast instruction to a non-primitive type: '" +
-                     (yyvsp[0].TypeVal)->get()->getDescription() + "'!");
-    (yyval.InstVal) = new CastInst((yyvsp[-2].ValueVal), *(yyvsp[0].TypeVal));
-    delete (yyvsp[0].TypeVal);
+                     yyvsp[0].TypeVal->get()->getDescription() + "'!");
+    yyval.InstVal = new CastInst(yyvsp[-2].ValueVal, *yyvsp[0].TypeVal);
+    delete yyvsp[0].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 230:
-#line 2481 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-4].ValueVal)->getType() != Type::BoolTy)
+  ;
+    break;}
+case 229:
+#line 2481 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (yyvsp[-4].ValueVal->getType() != Type::BoolTy)
       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 231:
-#line 2489 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 230:
+#line 2489 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     NewVarArgs = true;
-    (yyval.InstVal) = new VAArgInst((yyvsp[-2].ValueVal), *(yyvsp[0].TypeVal));
-    delete (yyvsp[0].TypeVal);
+    yyval.InstVal = new VAArgInst(yyvsp[-2].ValueVal, *yyvsp[0].TypeVal);
+    delete yyvsp[0].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 232:
-#line 2495 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 231:
+#line 2495 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     ObsoleteVarArgs = true;
-    const Type* ArgTy = (yyvsp[-2].ValueVal)->getType();
+    const Type* ArgTy = yyvsp[-2].ValueVal->getType();
     Function* NF = CurModule.CurrentModule->
       getOrInsertFunction("llvm.va_copy", ArgTy, ArgTy, (Type *)0);
 
@@ -4905,20 +4138,19 @@
     //b = vaarg foo, t
     AllocaInst* foo = new AllocaInst(ArgTy, 0, "vaarg.fix");
     CurBB->getInstList().push_back(foo);
-    CallInst* bar = new CallInst(NF, (yyvsp[-2].ValueVal));
+    CallInst* bar = new CallInst(NF, yyvsp[-2].ValueVal);
     CurBB->getInstList().push_back(bar);
     CurBB->getInstList().push_back(new StoreInst(bar, foo));
-    (yyval.InstVal) = new VAArgInst(foo, *(yyvsp[0].TypeVal));
-    delete (yyvsp[0].TypeVal);
+    yyval.InstVal = new VAArgInst(foo, *yyvsp[0].TypeVal);
+    delete yyvsp[0].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 233:
-#line 2515 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 232:
+#line 2515 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     ObsoleteVarArgs = true;
-    const Type* ArgTy = (yyvsp[-2].ValueVal)->getType();
+    const Type* ArgTy = yyvsp[-2].ValueVal->getType();
     Function* NF = CurModule.CurrentModule->
       getOrInsertFunction("llvm.va_copy", ArgTy, ArgTy, (Type *)0);
 
@@ -4930,78 +4162,73 @@
     //b = load foo
     AllocaInst* foo = new AllocaInst(ArgTy, 0, "vanext.fix");
     CurBB->getInstList().push_back(foo);
-    CallInst* bar = new CallInst(NF, (yyvsp[-2].ValueVal));
+    CallInst* bar = new CallInst(NF, yyvsp[-2].ValueVal);
     CurBB->getInstList().push_back(bar);
     CurBB->getInstList().push_back(new StoreInst(bar, foo));
-    Instruction* tmp = new VAArgInst(foo, *(yyvsp[0].TypeVal));
+    Instruction* tmp = new VAArgInst(foo, *yyvsp[0].TypeVal);
     CurBB->getInstList().push_back(tmp);
-    (yyval.InstVal) = new LoadInst(foo);
-    delete (yyvsp[0].TypeVal);
+    yyval.InstVal = new LoadInst(foo);
+    delete yyvsp[0].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 234:
-#line 2538 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
+  ;
+    break;}
+case 233:
+#line 2538 "/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 235:
-#line 2544 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
+  ;
+    break;}
+case 234:
+#line 2544 "/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 236:
-#line 2550 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
+  ;
+    break;}
+case 235:
+#line 2550 "/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 237:
-#line 2556 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    const Type *Ty = (yyvsp[0].PHIList)->front().first->getType();
+  ;
+    break;}
+case 236:
+#line 2556 "/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 238:
-#line 2571 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 237:
+#line 2571 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     const PointerType *PFTy;
     const FunctionType *Ty;
 
-    if (!(PFTy = dyn_cast<PointerType>((yyvsp[-4].TypeVal)->get())) ||
+    if (!(PFTy = dyn_cast<PointerType>(yyvsp[-4].TypeVal->get())) ||
         !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
       // Pull out the types of all of the arguments...
       std::vector<const Type*> ParamTypes;
-      if ((yyvsp[-1].ValueList)) {
-        for (std::vector<Value*>::iterator I = (yyvsp[-1].ValueList)->begin(), E = (yyvsp[-1].ValueList)->end();
+      if (yyvsp[-1].ValueList) {
+        for (std::vector<Value*>::iterator I = yyvsp[-1].ValueList->begin(), E = yyvsp[-1].ValueList->end();
              I != E; ++I)
           ParamTypes.push_back((*I)->getType());
       }
@@ -5009,31 +4236,31 @@
       bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy;
       if (isVarArg) ParamTypes.pop_back();
 
-      if (!(*(yyvsp[-4].TypeVal))->isFirstClassType() && *(yyvsp[-4].TypeVal) != Type::VoidTy)
+      if (!(*yyvsp[-4].TypeVal)->isFirstClassType() && *yyvsp[-4].TypeVal != Type::VoidTy)
         GEN_ERROR("LLVM functions cannot return aggregate types!");
 
-      Ty = FunctionType::get((yyvsp[-4].TypeVal)->get(), ParamTypes, isVarArg);
+      Ty = FunctionType::get(yyvsp[-4].TypeVal->get(), ParamTypes, isVarArg);
       PFTy = PointerType::get(Ty);
     }
 
-    Value *V = getVal(PFTy, (yyvsp[-3].ValIDVal));   // Get the function we're calling...
+    Value *V = getVal(PFTy, yyvsp[-3].ValIDVal);   // Get the function we're calling...
     CHECK_FOR_ERROR
 
     // Create the call node...
-    if (!(yyvsp[-1].ValueList)) {                                   // Has no arguments?
+    if (!yyvsp[-1].ValueList) {                                   // Has no arguments?
       // Make sure no arguments is a good thing!
       if (Ty->getNumParams() != 0)
         GEN_ERROR("No arguments passed to a function that "
                        "expects arguments!");
 
-      (yyval.InstVal) = new CallInst(V, std::vector<Value*>());
+      yyval.InstVal = new CallInst(V, std::vector<Value*>());
     } else {                                     // Has arguments?
       // Loop through FunctionType's arguments and ensure they are specified
       // correctly!
       //
       FunctionType::param_iterator I = Ty->param_begin();
       FunctionType::param_iterator E = Ty->param_end();
-      std::vector<Value*>::iterator ArgI = (yyvsp[-1].ValueList)->begin(), ArgE = (yyvsp[-1].ValueList)->end();
+      std::vector<Value*>::iterator ArgI = yyvsp[-1].ValueList->begin(), ArgE = yyvsp[-1].ValueList->end();
 
       for (; ArgI != ArgE && I != E; ++ArgI, ++I)
         if ((*ArgI)->getType() != *I)
@@ -5043,442 +4270,377 @@
       if (I != E || (ArgI != ArgE && !Ty->isVarArg()))
         GEN_ERROR("Invalid number of parameters detected!");
 
-      (yyval.InstVal) = new CallInst(V, *(yyvsp[-1].ValueList));
+      yyval.InstVal = new CallInst(V, *yyvsp[-1].ValueList);
     }
-    cast<CallInst>((yyval.InstVal))->setTailCall((yyvsp[-6].BoolVal));
-    cast<CallInst>((yyval.InstVal))->setCallingConv((yyvsp[-5].UIntVal));
-    delete (yyvsp[-4].TypeVal);
-    delete (yyvsp[-1].ValueList);
+    cast<CallInst>(yyval.InstVal)->setTailCall(yyvsp[-6].BoolVal);
+    cast<CallInst>(yyval.InstVal)->setCallingConv(yyvsp[-5].UIntVal);
+    delete yyvsp[-4].TypeVal;
+    delete yyvsp[-1].ValueList;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 239:
-#line 2630 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.InstVal) = (yyvsp[0].InstVal);
+  ;
+    break;}
+case 238:
+#line 2630 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.InstVal = yyvsp[0].InstVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 240:
-#line 2637 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { 
-    (yyval.ValueList) = (yyvsp[0].ValueList); 
+  ;
+    break;}
+case 239:
+#line 2637 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ 
+    yyval.ValueList = yyvsp[0].ValueList; 
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 241:
-#line 2640 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { 
-    (yyval.ValueList) = new std::vector<Value*>(); 
+  ;
+    break;}
+case 240:
+#line 2640 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ 
+    yyval.ValueList = new std::vector<Value*>(); 
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 242:
-#line 2645 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = true;
+  ;
+    break;}
+case 241:
+#line 2645 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = true;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 243:
-#line 2649 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = false;
+  ;
+    break;}
+case 242:
+#line 2649 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = false;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 244:
-#line 2656 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.InstVal) = new MallocInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
-    delete (yyvsp[-1].TypeVal);
+  ;
+    break;}
+case 243:
+#line 2656 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.InstVal = new MallocInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal);
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 245:
-#line 2661 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
+  ;
+    break;}
+case 244:
+#line 2661 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    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 246:
-#line 2667 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.InstVal) = new AllocaInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
-    delete (yyvsp[-1].TypeVal);
+    yyval.InstVal = new MallocInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
+    delete yyvsp[-4].TypeVal;
+  ;
+    break;}
+case 245:
+#line 2667 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.InstVal = new AllocaInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal);
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 247:
-#line 2672 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
+  ;
+    break;}
+case 246:
+#line 2672 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    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 248:
-#line 2678 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!isa<PointerType>((yyvsp[0].ValueVal)->getType()))
+    yyval.InstVal = new AllocaInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
+    delete yyvsp[-4].TypeVal;
+  ;
+    break;}
+case 247:
+#line 2678 "/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 249:
-#line 2686 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!isa<PointerType>((yyvsp[-1].TypeVal)->get()))
+  ;
+    break;}
+case 248:
+#line 2686 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    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 250:
-#line 2698 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    const PointerType *PT = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
+    yyval.InstVal = new LoadInst(tmpVal, "", yyvsp[-3].BoolVal);
+    delete yyvsp[-1].TypeVal;
+  ;
+    break;}
+case 249:
+#line 2698 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    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 251:
-#line 2713 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!isa<PointerType>((yyvsp[-2].TypeVal)->get()))
+    yyval.InstVal = new StoreInst(yyvsp[-3].ValueVal, tmpVal, yyvsp[-5].BoolVal);
+    delete yyvsp[-1].TypeVal;
+  ;
+    break;}
+case 250:
+#line 2713 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (!isa<PointerType>(yyvsp[-2].TypeVal->get()))
       GEN_ERROR("getelementptr insn requires pointer operand!");
 
     // LLVM 1.2 and earlier used ubyte struct indices.  Convert any ubyte struct
     // indices to uint struct indices for compatibility.
     generic_gep_type_iterator<std::vector<Value*>::iterator>
-      GTI = gep_type_begin((yyvsp[-2].TypeVal)->get(), (yyvsp[0].ValueList)->begin(), (yyvsp[0].ValueList)->end()),
-      GTE = gep_type_end((yyvsp[-2].TypeVal)->get(), (yyvsp[0].ValueList)->begin(), (yyvsp[0].ValueList)->end());
-    for (unsigned i = 0, e = (yyvsp[0].ValueList)->size(); i != e && GTI != GTE; ++i, ++GTI)
+      GTI = gep_type_begin(yyvsp[-2].TypeVal->get(), yyvsp[0].ValueList->begin(), yyvsp[0].ValueList->end()),
+      GTE = gep_type_end(yyvsp[-2].TypeVal->get(), yyvsp[0].ValueList->begin(), yyvsp[0].ValueList->end());
+    for (unsigned i = 0, e = yyvsp[0].ValueList->size(); i != e && GTI != GTE; ++i, ++GTI)
       if (isa<StructType>(*GTI))        // Only change struct indices
-        if (ConstantUInt *CUI = dyn_cast<ConstantUInt>((*(yyvsp[0].ValueList))[i]))
+        if (ConstantUInt *CUI = dyn_cast<ConstantUInt>((*yyvsp[0].ValueList)[i]))
           if (CUI->getType() == Type::UByteTy)
-            (*(yyvsp[0].ValueList))[i] = ConstantExpr::getCast(CUI, Type::UIntTy);
+            (*yyvsp[0].ValueList)[i] = ConstantExpr::getCast(CUI, Type::UIntTy);
 
-    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 5214 "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 2739 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2739 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 
 
 void llvm::GenerateError(const std::string &message, int LineNo) {
@@ -5501,4 +4663,3 @@
   GenerateError(errMsg);
   return 0;
 }
-
diff --git a/llvm/lib/AsmParser/llvmAsmParser.h.cvs b/llvm/lib/AsmParser/llvmAsmParser.h.cvs
index 3d7cef3..69d7b94 100644
--- a/llvm/lib/AsmParser/llvmAsmParser.h.cvs
+++ b/llvm/lib/AsmParser/llvmAsmParser.h.cvs
@@ -1,254 +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,
-     SINTVAL = 260,
-     UINTVAL = 261,
-     FPVAL = 262,
-     VOID = 263,
-     BOOL = 264,
-     SBYTE = 265,
-     UBYTE = 266,
-     SHORT = 267,
-     USHORT = 268,
-     INT = 269,
-     UINT = 270,
-     LONG = 271,
-     ULONG = 272,
-     FLOAT = 273,
-     DOUBLE = 274,
-     TYPE = 275,
-     LABEL = 276,
-     VAR_ID = 277,
-     LABELSTR = 278,
-     STRINGCONSTANT = 279,
-     IMPLEMENTATION = 280,
-     ZEROINITIALIZER = 281,
-     TRUETOK = 282,
-     FALSETOK = 283,
-     BEGINTOK = 284,
-     ENDTOK = 285,
-     DECLARE = 286,
-     GLOBAL = 287,
-     CONSTANT = 288,
-     SECTION = 289,
-     VOLATILE = 290,
-     TO = 291,
-     DOTDOTDOT = 292,
-     NULL_TOK = 293,
-     UNDEF = 294,
-     CONST = 295,
-     INTERNAL = 296,
-     LINKONCE = 297,
-     WEAK = 298,
-     APPENDING = 299,
-     DLLIMPORT = 300,
-     DLLEXPORT = 301,
-     EXTERN_WEAK = 302,
-     OPAQUE = 303,
-     NOT = 304,
-     EXTERNAL = 305,
-     TARGET = 306,
-     TRIPLE = 307,
-     ENDIAN = 308,
-     POINTERSIZE = 309,
-     LITTLE = 310,
-     BIG = 311,
-     ALIGN = 312,
-     DEPLIBS = 313,
-     CALL = 314,
-     TAIL = 315,
-     ASM_TOK = 316,
-     MODULE = 317,
-     SIDEEFFECT = 318,
-     CC_TOK = 319,
-     CCC_TOK = 320,
-     CSRETCC_TOK = 321,
-     FASTCC_TOK = 322,
-     COLDCC_TOK = 323,
-     X86_STDCALLCC_TOK = 324,
-     X86_FASTCALLCC_TOK = 325,
-     RET = 326,
-     BR = 327,
-     SWITCH = 328,
-     INVOKE = 329,
-     UNWIND = 330,
-     UNREACHABLE = 331,
-     ADD = 332,
-     SUB = 333,
-     MUL = 334,
-     DIV = 335,
-     REM = 336,
-     AND = 337,
-     OR = 338,
-     XOR = 339,
-     SETLE = 340,
-     SETGE = 341,
-     SETLT = 342,
-     SETGT = 343,
-     SETEQ = 344,
-     SETNE = 345,
-     MALLOC = 346,
-     ALLOCA = 347,
-     FREE = 348,
-     LOAD = 349,
-     STORE = 350,
-     GETELEMENTPTR = 351,
-     PHI_TOK = 352,
-     CAST = 353,
-     SELECT = 354,
-     SHL = 355,
-     SHR = 356,
-     VAARG = 357,
-     EXTRACTELEMENT = 358,
-     INSERTELEMENT = 359,
-     SHUFFLEVECTOR = 360,
-     VAARG_old = 361,
-     VANEXT_old = 362
-   };
-#endif
-/* Tokens.  */
-#define ESINT64VAL 258
-#define EUINT64VAL 259
-#define SINTVAL 260
-#define UINTVAL 261
-#define FPVAL 262
-#define VOID 263
-#define BOOL 264
-#define SBYTE 265
-#define UBYTE 266
-#define SHORT 267
-#define USHORT 268
-#define INT 269
-#define UINT 270
-#define LONG 271
-#define ULONG 272
-#define FLOAT 273
-#define DOUBLE 274
-#define TYPE 275
-#define LABEL 276
-#define VAR_ID 277
-#define LABELSTR 278
-#define STRINGCONSTANT 279
-#define IMPLEMENTATION 280
-#define ZEROINITIALIZER 281
-#define TRUETOK 282
-#define FALSETOK 283
-#define BEGINTOK 284
-#define ENDTOK 285
-#define DECLARE 286
-#define GLOBAL 287
-#define CONSTANT 288
-#define SECTION 289
-#define VOLATILE 290
-#define TO 291
-#define DOTDOTDOT 292
-#define NULL_TOK 293
-#define UNDEF 294
-#define CONST 295
-#define INTERNAL 296
-#define LINKONCE 297
-#define WEAK 298
-#define APPENDING 299
-#define DLLIMPORT 300
-#define DLLEXPORT 301
-#define EXTERN_WEAK 302
-#define OPAQUE 303
-#define NOT 304
-#define EXTERNAL 305
-#define TARGET 306
-#define TRIPLE 307
-#define ENDIAN 308
-#define POINTERSIZE 309
-#define LITTLE 310
-#define BIG 311
-#define ALIGN 312
-#define DEPLIBS 313
-#define CALL 314
-#define TAIL 315
-#define ASM_TOK 316
-#define MODULE 317
-#define SIDEEFFECT 318
-#define CC_TOK 319
-#define CCC_TOK 320
-#define CSRETCC_TOK 321
-#define FASTCC_TOK 322
-#define COLDCC_TOK 323
-#define X86_STDCALLCC_TOK 324
-#define X86_FASTCALLCC_TOK 325
-#define RET 326
-#define BR 327
-#define SWITCH 328
-#define INVOKE 329
-#define UNWIND 330
-#define UNREACHABLE 331
-#define ADD 332
-#define SUB 333
-#define MUL 334
-#define DIV 335
-#define REM 336
-#define AND 337
-#define OR 338
-#define XOR 339
-#define SETLE 340
-#define SETGE 341
-#define SETLT 342
-#define SETGT 343
-#define SETEQ 344
-#define SETNE 345
-#define MALLOC 346
-#define ALLOCA 347
-#define FREE 348
-#define LOAD 349
-#define STORE 350
-#define GETELEMENTPTR 351
-#define PHI_TOK 352
-#define CAST 353
-#define SELECT 354
-#define SHL 355
-#define SHR 356
-#define VAARG 357
-#define EXTRACTELEMENT 358
-#define INSERTELEMENT 359
-#define SHUFFLEVECTOR 360
-#define VAARG_old 361
-#define VANEXT_old 362
-
-
-
-
-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 966 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-typedef union YYSTYPE {
+typedef union {
   llvm::Module                           *ModuleVal;
   llvm::Function                         *FunctionVal;
   std::pair<llvm::PATypeHolder*, char*>  *ArgVal;
@@ -287,14 +37,111 @@
   llvm::Instruction::OtherOps             OtherOpVal;
   llvm::Module::Endianness                Endianness;
 } YYSTYPE;
-/* Line 1447 of yacc.c.  */
-#line 292 "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	SINTVAL	259
+#define	UINTVAL	260
+#define	FPVAL	261
+#define	VOID	262
+#define	BOOL	263
+#define	SBYTE	264
+#define	UBYTE	265
+#define	SHORT	266
+#define	USHORT	267
+#define	INT	268
+#define	UINT	269
+#define	LONG	270
+#define	ULONG	271
+#define	FLOAT	272
+#define	DOUBLE	273
+#define	TYPE	274
+#define	LABEL	275
+#define	VAR_ID	276
+#define	LABELSTR	277
+#define	STRINGCONSTANT	278
+#define	IMPLEMENTATION	279
+#define	ZEROINITIALIZER	280
+#define	TRUETOK	281
+#define	FALSETOK	282
+#define	BEGINTOK	283
+#define	ENDTOK	284
+#define	DECLARE	285
+#define	GLOBAL	286
+#define	CONSTANT	287
+#define	SECTION	288
+#define	VOLATILE	289
+#define	TO	290
+#define	DOTDOTDOT	291
+#define	NULL_TOK	292
+#define	UNDEF	293
+#define	CONST	294
+#define	INTERNAL	295
+#define	LINKONCE	296
+#define	WEAK	297
+#define	APPENDING	298
+#define	DLLIMPORT	299
+#define	DLLEXPORT	300
+#define	EXTERN_WEAK	301
+#define	OPAQUE	302
+#define	NOT	303
+#define	EXTERNAL	304
+#define	TARGET	305
+#define	TRIPLE	306
+#define	ENDIAN	307
+#define	POINTERSIZE	308
+#define	LITTLE	309
+#define	BIG	310
+#define	ALIGN	311
+#define	DEPLIBS	312
+#define	CALL	313
+#define	TAIL	314
+#define	ASM_TOK	315
+#define	MODULE	316
+#define	SIDEEFFECT	317
+#define	CC_TOK	318
+#define	CCC_TOK	319
+#define	CSRETCC_TOK	320
+#define	FASTCC_TOK	321
+#define	COLDCC_TOK	322
+#define	X86_STDCALLCC_TOK	323
+#define	X86_FASTCALLCC_TOK	324
+#define	RET	325
+#define	BR	326
+#define	SWITCH	327
+#define	INVOKE	328
+#define	UNWIND	329
+#define	UNREACHABLE	330
+#define	ADD	331
+#define	SUB	332
+#define	MUL	333
+#define	DIV	334
+#define	REM	335
+#define	AND	336
+#define	OR	337
+#define	XOR	338
+#define	SETLE	339
+#define	SETGE	340
+#define	SETLT	341
+#define	SETGT	342
+#define	SETEQ	343
+#define	SETNE	344
+#define	MALLOC	345
+#define	ALLOCA	346
+#define	FREE	347
+#define	LOAD	348
+#define	STORE	349
+#define	GETELEMENTPTR	350
+#define	PHI_TOK	351
+#define	CAST	352
+#define	SELECT	353
+#define	SHL	354
+#define	SHR	355
+#define	VAARG	356
+#define	EXTRACTELEMENT	357
+#define	INSERTELEMENT	358
+#define	SHUFFLEVECTOR	359
+#define	VAARG_old	360
+#define	VANEXT_old	361
+
 
 extern YYSTYPE llvmAsmlval;
-
-
-
diff --git a/llvm/lib/AsmParser/llvmAsmParser.y b/llvm/lib/AsmParser/llvmAsmParser.y
index eb14e0c..6ba1a5e 100644
--- a/llvm/lib/AsmParser/llvmAsmParser.y
+++ b/llvm/lib/AsmParser/llvmAsmParser.y
@@ -1562,11 +1562,11 @@
     CHECK_FOR_ERROR
   }
   | BOOL TRUETOK {                      // Boolean constants
-    $$ = ConstantBool::True;
+    $$ = ConstantBool::getTrue();
     CHECK_FOR_ERROR
   }
   | BOOL FALSETOK {                     // Boolean constants
-    $$ = ConstantBool::False;
+    $$ = ConstantBool::getFalse();
     CHECK_FOR_ERROR
   }
   | FPType FPVAL {                   // Float & Double constants
@@ -2076,11 +2076,11 @@
     CHECK_FOR_ERROR
   }
   | TRUETOK {
-    $$ = ValID::create(ConstantBool::True);
+    $$ = ValID::create(ConstantBool::getTrue());
     CHECK_FOR_ERROR
   } 
   | FALSETOK {
-    $$ = ValID::create(ConstantBool::False);
+    $$ = ValID::create(ConstantBool::getFalse());
     CHECK_FOR_ERROR
   }
   | NULL_TOK {
diff --git a/llvm/lib/AsmParser/llvmAsmParser.y.cvs b/llvm/lib/AsmParser/llvmAsmParser.y.cvs
index eb14e0c..6ba1a5e 100644
--- a/llvm/lib/AsmParser/llvmAsmParser.y.cvs
+++ b/llvm/lib/AsmParser/llvmAsmParser.y.cvs
@@ -1562,11 +1562,11 @@
     CHECK_FOR_ERROR
   }
   | BOOL TRUETOK {                      // Boolean constants
-    $$ = ConstantBool::True;
+    $$ = ConstantBool::getTrue();
     CHECK_FOR_ERROR
   }
   | BOOL FALSETOK {                     // Boolean constants
-    $$ = ConstantBool::False;
+    $$ = ConstantBool::getFalse();
     CHECK_FOR_ERROR
   }
   | FPType FPVAL {                   // Float & Double constants
@@ -2076,11 +2076,11 @@
     CHECK_FOR_ERROR
   }
   | TRUETOK {
-    $$ = ValID::create(ConstantBool::True);
+    $$ = ValID::create(ConstantBool::getTrue());
     CHECK_FOR_ERROR
   } 
   | FALSETOK {
-    $$ = ValID::create(ConstantBool::False);
+    $$ = ValID::create(ConstantBool::getFalse());
     CHECK_FOR_ERROR
   }
   | NULL_TOK {
