diff --git a/llvm/lib/AsmParser/llvmAsmParser.cpp.cvs b/llvm/lib/AsmParser/llvmAsmParser.cpp.cvs
index d54f66a..929940f 100644
--- a/llvm/lib/AsmParser/llvmAsmParser.cpp.cvs
+++ b/llvm/lib/AsmParser/llvmAsmParser.cpp.cvs
@@ -1,278 +1,118 @@
-/* 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	OPAQUE	299
+#define	NOT	300
+#define	EXTERNAL	301
+#define	TARGET	302
+#define	TRIPLE	303
+#define	ENDIAN	304
+#define	POINTERSIZE	305
+#define	LITTLE	306
+#define	BIG	307
+#define	ALIGN	308
+#define	DEPLIBS	309
+#define	CALL	310
+#define	TAIL	311
+#define	ASM_TOK	312
+#define	MODULE	313
+#define	SIDEEFFECT	314
+#define	CC_TOK	315
+#define	CCC_TOK	316
+#define	CSRETCC_TOK	317
+#define	FASTCC_TOK	318
+#define	COLDCC_TOK	319
+#define	RET	320
+#define	BR	321
+#define	SWITCH	322
+#define	INVOKE	323
+#define	UNWIND	324
+#define	UNREACHABLE	325
+#define	ADD	326
+#define	SUB	327
+#define	MUL	328
+#define	DIV	329
+#define	REM	330
+#define	AND	331
+#define	OR	332
+#define	XOR	333
+#define	SETLE	334
+#define	SETGE	335
+#define	SETLT	336
+#define	SETGT	337
+#define	SETEQ	338
+#define	SETNE	339
+#define	MALLOC	340
+#define	ALLOCA	341
+#define	FREE	342
+#define	LOAD	343
+#define	STORE	344
+#define	GETELEMENTPTR	345
+#define	PHI_TOK	346
+#define	CAST	347
+#define	SELECT	348
+#define	SHL	349
+#define	SHR	350
+#define	VAARG	351
+#define	EXTRACTELEMENT	352
+#define	INSERTELEMENT	353
+#define	SHUFFLEVECTOR	354
+#define	VAARG_old	355
+#define	VANEXT_old	356
 
-
-/* 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,
-     OPAQUE = 300,
-     NOT = 301,
-     EXTERNAL = 302,
-     TARGET = 303,
-     TRIPLE = 304,
-     ENDIAN = 305,
-     POINTERSIZE = 306,
-     LITTLE = 307,
-     BIG = 308,
-     ALIGN = 309,
-     DEPLIBS = 310,
-     CALL = 311,
-     TAIL = 312,
-     ASM_TOK = 313,
-     MODULE = 314,
-     SIDEEFFECT = 315,
-     CC_TOK = 316,
-     CCC_TOK = 317,
-     CSRETCC_TOK = 318,
-     FASTCC_TOK = 319,
-     COLDCC_TOK = 320,
-     RET = 321,
-     BR = 322,
-     SWITCH = 323,
-     INVOKE = 324,
-     UNWIND = 325,
-     UNREACHABLE = 326,
-     ADD = 327,
-     SUB = 328,
-     MUL = 329,
-     DIV = 330,
-     REM = 331,
-     AND = 332,
-     OR = 333,
-     XOR = 334,
-     SETLE = 335,
-     SETGE = 336,
-     SETLT = 337,
-     SETGT = 338,
-     SETEQ = 339,
-     SETNE = 340,
-     MALLOC = 341,
-     ALLOCA = 342,
-     FREE = 343,
-     LOAD = 344,
-     STORE = 345,
-     GETELEMENTPTR = 346,
-     PHI_TOK = 347,
-     CAST = 348,
-     SELECT = 349,
-     SHL = 350,
-     SHR = 351,
-     VAARG = 352,
-     EXTRACTELEMENT = 353,
-     INSERTELEMENT = 354,
-     SHUFFLEVECTOR = 355,
-     VAARG_old = 356,
-     VANEXT_old = 357
-   };
-#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 OPAQUE 300
-#define NOT 301
-#define EXTERNAL 302
-#define TARGET 303
-#define TRIPLE 304
-#define ENDIAN 305
-#define POINTERSIZE 306
-#define LITTLE 307
-#define BIG 308
-#define ALIGN 309
-#define DEPLIBS 310
-#define CALL 311
-#define TAIL 312
-#define ASM_TOK 313
-#define MODULE 314
-#define SIDEEFFECT 315
-#define CC_TOK 316
-#define CCC_TOK 317
-#define CSRETCC_TOK 318
-#define FASTCC_TOK 319
-#define COLDCC_TOK 320
-#define RET 321
-#define BR 322
-#define SWITCH 323
-#define INVOKE 324
-#define UNWIND 325
-#define UNREACHABLE 326
-#define ADD 327
-#define SUB 328
-#define MUL 329
-#define DIV 330
-#define REM 331
-#define AND 332
-#define OR 333
-#define XOR 334
-#define SETLE 335
-#define SETGE 336
-#define SETLT 337
-#define SETGT 338
-#define SETEQ 339
-#define SETNE 340
-#define MALLOC 341
-#define ALLOCA 342
-#define FREE 343
-#define LOAD 344
-#define STORE 345
-#define GETELEMENTPTR 346
-#define PHI_TOK 347
-#define CAST 348
-#define SELECT 349
-#define SHL 350
-#define SHR 351
-#define VAARG 352
-#define EXTRACTELEMENT 353
-#define INSERTELEMENT 354
-#define SHUFFLEVECTOR 355
-#define VAARG_old 356
-#define VANEXT_old 357
-
-
-
-
-/* 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"
@@ -976,7 +816,10 @@
 /// thus we can complete the cycle.
 ///
 static PATypeHolder HandleUpRefs(const Type *ty) {
-  if (!ty->isAbstract()) return ty;
+  // If Ty isn't abstract, or if there are no up-references in it, then there is
+  // nothing to resolve here.
+  if (!ty->isAbstract() || UpRefs.empty()) return ty;
+  
   PATypeHolder Ty(ty);
   UR_OUT("Type '" << Ty->getDescription() <<
          "' newly formed.  Resolving upreferences.\n" <<
@@ -1165,28 +1008,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 907 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-typedef union YYSTYPE {
+#line 910 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+typedef union {
   llvm::Module                           *ModuleVal;
   llvm::Function                         *FunctionVal;
   std::pair<llvm::PATypeHolder*, char*>  *ArgVal;
@@ -1225,1424 +1048,971 @@
   llvm::Instruction::OtherOps             OtherOpVal;
   llvm::Module::Endianness                Endianness;
 } YYSTYPE;
-/* Line 196 of yacc.c.  */
-#line 1230 "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		496
+#define	YYFLAG		-32768
+#define	YYNTBASE	117
 
+#define YYTRANSLATE(x) ((unsigned)(x) <= 356 ? yytranslate[x] : 188)
 
-/* Line 219 of yacc.c.  */
-#line 1242 "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,   106,
+   107,   115,     2,   104,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,   111,
+   103,   112,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+   108,   105,   110,     2,     2,     2,     2,     2,   116,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,   109,
+     2,     2,   113,     2,   114,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     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
+};
 
-#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,    77,
+    78,    80,    82,    84,    86,    89,    90,    93,    94,    98,
+   101,   102,   104,   105,   109,   111,   114,   116,   118,   120,
+   122,   124,   126,   128,   130,   132,   134,   136,   138,   140,
+   142,   144,   146,   148,   150,   152,   154,   156,   159,   164,
+   170,   176,   180,   183,   186,   188,   192,   194,   198,   200,
+   201,   206,   210,   214,   219,   224,   228,   231,   234,   237,
+   240,   243,   246,   249,   252,   255,   258,   265,   271,   280,
+   287,   294,   301,   308,   315,   324,   333,   337,   339,   341,
+   343,   345,   348,   351,   356,   359,   361,   366,   369,   374,
+   375,   383,   384,   392,   396,   401,   402,   404,   406,   408,
+   412,   416,   420,   424,   428,   430,   431,   433,   435,   437,
+   438,   441,   445,   447,   449,   453,   455,   456,   465,   467,
+   469,   473,   475,   477,   480,   481,   485,   486,   488,   490,
+   492,   494,   496,   498,   500,   502,   504,   508,   510,   516,
+   518,   520,   522,   524,   527,   530,   533,   537,   540,   541,
+   543,   546,   549,   553,   563,   573,   582,   596,   598,   600,
+   607,   613,   616,   623,   631,   633,   637,   639,   640,   643,
+   645,   651,   657,   663,   666,   671,   676,   683,   688,   693,
+   698,   703,   710,   717,   720,   728,   730,   733,   734,   736,
+   737,   741,   748,   752,   759,   762,   767,   774
+};
 
-#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,    72,     0,    73,
+     0,    74,     0,    75,     0,    76,     0,    77,     0,    78,
+     0,    79,     0,    80,     0,    81,     0,    82,     0,    83,
+     0,    84,     0,    85,     0,    95,     0,    96,     0,    16,
+     0,    14,     0,    12,     0,    10,     0,    17,     0,    15,
+     0,    13,     0,    11,     0,   123,     0,   124,     0,    18,
+     0,    19,     0,   157,   103,     0,     0,    41,     0,    42,
+     0,    43,     0,    44,     0,     0,     0,    62,     0,    63,
+     0,    64,     0,    65,     0,    61,     4,     0,     0,    54,
+     4,     0,     0,   104,    54,     4,     0,    34,    24,     0,
+     0,   132,     0,     0,   104,   135,   134,     0,   132,     0,
+    54,     4,     0,   138,     0,     8,     0,   140,     0,     8,
+     0,   140,     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,    45,
+     0,   139,     0,   171,     0,   105,     4,     0,   137,   106,
+   142,   107,     0,   108,     4,   109,   140,   110,     0,   111,
+     4,   109,   140,   112,     0,   113,   141,   114,     0,   113,
+   114,     0,   140,   115,     0,   140,     0,   141,   104,   140,
+     0,   141,     0,   141,   104,    37,     0,    37,     0,     0,
+   138,   108,   145,   110,     0,   138,   108,   110,     0,   138,
+   116,    24,     0,   138,   111,   145,   112,     0,   138,   113,
+   145,   114,     0,   138,   113,   114,     0,   138,    38,     0,
+   138,    39,     0,   138,   171,     0,   138,   144,     0,   138,
+    26,     0,   123,   118,     0,   124,     4,     0,     9,    27,
+     0,     9,    28,     0,   126,     7,     0,    93,   106,   143,
+    36,   138,   107,     0,    91,   106,   143,   185,   107,     0,
+    94,   106,   143,   104,   143,   104,   143,   107,     0,   119,
+   106,   143,   104,   143,   107,     0,   120,   106,   143,   104,
+   143,   107,     0,   121,   106,   143,   104,   143,   107,     0,
+   122,   106,   143,   104,   143,   107,     0,    98,   106,   143,
+   104,   143,   107,     0,    99,   106,   143,   104,   143,   104,
+   143,   107,     0,   100,   106,   143,   104,   143,   104,   143,
+   107,     0,   145,   104,   143,     0,   143,     0,    32,     0,
+    33,     0,   148,     0,   148,   166,     0,   148,   167,     0,
+   148,    59,    58,   152,     0,   148,    25,     0,   149,     0,
+   149,   127,    20,   136,     0,   149,   167,     0,   149,    59,
+    58,   152,     0,     0,   149,   127,   128,   146,   143,   150,
+   134,     0,     0,   149,   127,    47,   146,   138,   151,   134,
+     0,   149,    48,   154,     0,   149,    55,   103,   155,     0,
+     0,    24,     0,    53,     0,    52,     0,    50,   103,   153,
+     0,    51,   103,     4,     0,    49,   103,    24,     0,   108,
+   156,   110,     0,   156,   104,    24,     0,    24,     0,     0,
+    22,     0,    24,     0,   157,     0,     0,   138,   158,     0,
+   160,   104,   159,     0,   159,     0,   160,     0,   160,   104,
+    37,     0,    37,     0,     0,   129,   136,   157,   106,   161,
+   107,   133,   130,     0,    29,     0,   113,     0,   128,   162,
+   163,     0,    30,     0,   114,     0,   174,   165,     0,     0,
+    31,   168,   162,     0,     0,    60,     0,     3,     0,     4,
+     0,     7,     0,    27,     0,    28,     0,    38,     0,    39,
+     0,    26,     0,   111,   145,   112,     0,   144,     0,    58,
+   169,    24,   104,    24,     0,   117,     0,   157,     0,   171,
+     0,   170,     0,   138,   172,     0,   174,   175,     0,   164,
+   175,     0,   176,   127,   177,     0,   176,   179,     0,     0,
+    23,     0,    66,   173,     0,    66,     8,     0,    67,    21,
+   172,     0,    67,     9,   172,   104,    21,   172,   104,    21,
+   172,     0,    68,   125,   172,   104,    21,   172,   108,   178,
+   110,     0,    68,   125,   172,   104,    21,   172,   108,   110,
+     0,    69,   129,   136,   172,   106,   182,   107,    36,    21,
+   172,    70,    21,   172,     0,    70,     0,    71,     0,   178,
+   125,   170,   104,    21,   172,     0,   125,   170,   104,    21,
+   172,     0,   127,   184,     0,   138,   108,   172,   104,   172,
+   110,     0,   180,   104,   108,   172,   104,   172,   110,     0,
+   173,     0,   181,   104,   173,     0,   181,     0,     0,    57,
+    56,     0,    56,     0,   119,   138,   172,   104,   172,     0,
+   120,   138,   172,   104,   172,     0,   121,   138,   172,   104,
+   172,     0,    46,   173,     0,   122,   173,   104,   173,     0,
+    93,   173,    36,   138,     0,    94,   173,   104,   173,   104,
+   173,     0,    97,   173,   104,   138,     0,   101,   173,   104,
+   138,     0,   102,   173,   104,   138,     0,    98,   173,   104,
+   173,     0,    99,   173,   104,   173,   104,   173,     0,   100,
+   173,   104,   173,   104,   173,     0,    92,   180,     0,   183,
+   129,   136,   172,   106,   182,   107,     0,   187,     0,   104,
+   181,     0,     0,    35,     0,     0,    86,   138,   131,     0,
+    86,   138,   104,    15,   172,   131,     0,    87,   138,   131,
+     0,    87,   138,   104,    15,   172,   131,     0,    88,   173,
+     0,   186,    89,   138,   172,     0,   186,    90,   173,   104,
+   138,   172,     0,    91,   138,   172,   185,     0
+};
 
 #endif
 
-#if defined (__STDC__) || defined (__cplusplus)
-   typedef signed char yysigned_char;
+#if YYDEBUG != 0
+static const short yyrline[] = { 0,
+  1030,  1031,  1039,  1040,  1050,  1050,  1050,  1050,  1050,  1051,
+  1051,  1051,  1052,  1052,  1052,  1052,  1052,  1052,  1054,  1054,
+  1058,  1058,  1058,  1058,  1059,  1059,  1059,  1059,  1060,  1060,
+  1061,  1061,  1064,  1068,  1073,  1073,  1074,  1075,  1076,  1079,
+  1079,  1080,  1081,  1082,  1083,  1093,  1093,  1100,  1100,  1109,
+  1117,  1117,  1123,  1123,  1125,  1130,  1144,  1144,  1145,  1145,
+  1147,  1157,  1157,  1157,  1157,  1157,  1157,  1157,  1158,  1158,
+  1158,  1158,  1158,  1158,  1159,  1163,  1167,  1174,  1182,  1195,
+  1200,  1212,  1222,  1226,  1235,  1240,  1246,  1247,  1251,  1255,
+  1266,  1292,  1306,  1336,  1362,  1383,  1396,  1406,  1411,  1471,
+  1478,  1487,  1493,  1499,  1503,  1507,  1515,  1526,  1558,  1566,
+  1588,  1599,  1605,  1613,  1619,  1625,  1634,  1638,  1646,  1646,
+  1656,  1664,  1669,  1673,  1677,  1681,  1696,  1717,  1720,  1723,
+  1726,  1730,  1734,  1738,  1741,  1744,  1748,  1761,  1762,  1764,
+  1768,  1777,  1783,  1785,  1790,  1795,  1804,  1804,  1805,  1805,
+  1807,  1814,  1820,  1827,  1831,  1837,  1842,  1847,  1934,  1934,
+  1936,  1944,  1944,  1946,  1951,  1951,  1961,  1965,  1970,  1974,
+  1978,  1982,  1986,  1990,  1994,  1998,  2002,  2027,  2031,  2045,
+  2049,  2055,  2055,  2061,  2066,  2070,  2079,  2089,  2094,  2105,
+  2117,  2121,  2125,  2129,  2133,  2148,  2153,  2207,  2211,  2218,
+  2227,  2238,  2246,  2252,  2260,  2265,  2272,  2272,  2274,  2278,
+  2285,  2298,  2310,  2321,  2334,  2342,  2350,  2358,  2364,  2384,
+  2407,  2413,  2419,  2425,  2440,  2498,  2505,  2508,  2513,  2517,
+  2524,  2529,  2534,  2539,  2544,  2552,  2563,  2577
+};
+#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",
+"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","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","AsmBlock",
+"BigOrLittle","TargetDefinition","LibrariesDefinition","LibList","Name","OptName",
+"ArgVal","ArgListH","ArgList","FunctionHeaderH","BEGIN","FunctionHeader","END",
+"Function","FunctionProto","@3","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,
+   117,   117,   118,   118,   119,   119,   119,   119,   119,   120,
+   120,   120,   121,   121,   121,   121,   121,   121,   122,   122,
+   123,   123,   123,   123,   124,   124,   124,   124,   125,   125,
+   126,   126,   127,   127,   128,   128,   128,   128,   128,   129,
+   129,   129,   129,   129,   129,   130,   130,   131,   131,   132,
+   133,   133,   134,   134,   135,   135,   136,   136,   137,   137,
+   138,   139,   139,   139,   139,   139,   139,   139,   139,   139,
+   139,   139,   139,   139,   140,   140,   140,   140,   140,   140,
+   140,   140,   140,   140,   141,   141,   142,   142,   142,   142,
+   143,   143,   143,   143,   143,   143,   143,   143,   143,   143,
+   143,   143,   143,   143,   143,   143,   144,   144,   144,   144,
+   144,   144,   144,   144,   144,   144,   145,   145,   146,   146,
+   147,   148,   148,   148,   148,   148,   149,   149,   149,   150,
+   149,   151,   149,   149,   149,   149,   152,   153,   153,   154,
+   154,   154,   155,   156,   156,   156,   157,   157,   158,   158,
+   159,   160,   160,   161,   161,   161,   161,   162,   163,   163,
+   164,   165,   165,   166,   168,   167,   169,   169,   170,   170,
+   170,   170,   170,   170,   170,   170,   170,   170,   170,   171,
+   171,   172,   172,   173,   174,   174,   175,   176,   176,   176,
+   177,   177,   177,   177,   177,   177,   177,   177,   177,   178,
+   178,   179,   180,   180,   181,   181,   182,   182,   183,   183,
+   184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
+   184,   184,   184,   184,   184,   184,   185,   185,   186,   186,
+   187,   187,   187,   187,   187,   187,   187,   187
+};
+
+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,     0,     0,
+     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,     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,     3,     0,     1,     1,     1,
+     1,     1,     1,     1,     1,     1,     3,     1,     5,     1,
+     1,     1,     1,     2,     2,     2,     3,     2,     0,     1,
+     2,     2,     3,     9,     9,     8,    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[] = {   136,
+    39,   126,   125,   165,    35,    36,    37,    38,     0,    40,
+   189,   122,   123,   189,   147,   148,     0,     0,     0,    39,
+     0,   128,    40,     0,     0,    41,    42,    43,    44,     0,
+     0,   190,   186,    34,   162,   163,   164,   185,     0,     0,
+     0,   134,     0,     0,     0,     0,     0,    33,   166,   137,
+   124,    45,     1,     2,    58,    62,    63,    64,    65,    66,
+    67,    68,    69,    70,    71,    72,    73,    74,    75,     0,
+     0,     0,     0,   180,     0,     0,    57,    76,    61,   181,
+    77,   159,   160,   161,   230,   188,     0,     0,     0,   146,
+   135,   129,   127,   119,   120,     0,     0,    78,     0,     0,
+    60,    83,    85,     0,     0,    90,    84,   229,     0,   210,
+     0,     0,     0,     0,    40,   198,   199,     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,
+   187,    40,   202,     0,   226,   142,   139,   138,   140,   141,
+   145,     0,   132,    62,    63,    64,    65,    66,    67,    68,
+    69,    70,    71,    72,     0,     0,     0,     0,   130,     0,
+     0,     0,    82,   157,    89,    87,     0,     0,   214,   209,
+   192,   191,     0,     0,    24,    28,    23,    27,    22,    26,
+    21,    25,    29,    30,     0,     0,    48,    48,   235,     0,
+     0,   224,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   143,    53,
+   104,   105,     3,     4,   102,   103,   106,   101,    97,    98,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   100,    99,    53,    59,    59,    86,
+   156,   150,   153,   154,     0,     0,    79,   169,   170,   171,
+   176,   172,   173,   174,   175,   167,     0,   178,   183,   182,
+   184,     0,   193,     0,     0,     0,   231,     0,   233,   228,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   144,     0,   133,
+     0,     0,     0,     0,     0,     0,    92,   118,     0,     0,
+    96,     0,    93,     0,     0,     0,     0,   131,    80,    81,
+   149,   151,     0,    51,    88,   168,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   238,     0,     0,   216,     0,
+   218,   221,     0,     0,   219,   220,     0,     0,     0,   215,
+     0,   236,     0,     0,     0,    55,    53,   228,     0,     0,
+     0,     0,     0,     0,    91,    94,    95,     0,     0,     0,
+     0,   155,   152,    52,    46,     0,   177,     0,     0,   208,
+    48,    49,    48,   205,   227,     0,     0,     0,     0,     0,
+   211,   212,   213,   208,     0,    50,    56,    54,     0,     0,
+     0,     0,     0,     0,   117,     0,     0,     0,     0,     0,
+   158,     0,     0,     0,   207,     0,     0,   232,   234,     0,
+     0,     0,   217,   222,   223,     0,   237,   108,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,    47,   179,     0,
+     0,     0,   206,   203,     0,   225,   107,     0,   114,     0,
+     0,   110,   111,   112,   113,     0,   196,     0,     0,     0,
+   204,     0,     0,     0,   194,     0,   195,     0,     0,   109,
+   115,   116,     0,     0,     0,     0,     0,     0,   201,     0,
+     0,   200,   197,     0,     0,     0
+};
+
+static const short yydefgoto[] = {    74,
+   235,   251,   252,   253,   254,   175,   176,   205,   177,    20,
+    10,    30,   421,   287,   366,   385,   310,   367,    75,    76,
+   178,    78,    79,   104,   187,   318,   278,   319,    96,   494,
+     1,     2,   257,   230,    51,   159,    42,    91,   162,    80,
+   332,   263,   264,   265,    31,    84,    11,    37,    12,    13,
+    23,   337,   279,    81,   281,   394,    14,    33,    34,   151,
+   469,    86,   212,   425,   426,   152,   153,   346,   154,   155
+};
+
+static const short yypact[] = {-32768,
+   181,   372,-32768,-32768,-32768,-32768,-32768,-32768,   -32,    94,
+    38,-32768,-32768,   -14,-32768,-32768,    45,   -40,    18,    44,
+   -25,-32768,    94,    57,    79,-32768,-32768,-32768,-32768,  1012,
+   -21,-32768,-32768,    22,-32768,-32768,-32768,-32768,    -6,    -4,
+    27,-32768,    26,    57,  1012,    77,    77,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,    46,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   167,
+   170,   171,   524,-32768,    22,    71,-32768,-32768,   -17,-32768,
+-32768,-32768,-32768,-32768,  1176,-32768,   154,    76,   175,   156,
+-32768,-32768,-32768,-32768,-32768,  1050,  1088,-32768,    73,    74,
+-32768,-32768,   -17,   -83,    78,   819,-32768,-32768,  1050,-32768,
+   129,  1126,    56,   128,    94,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,  1050,  1050,  1050,  1050,  1050,  1050,  1050,-32768,-32768,
+  1050,  1050,  1050,  1050,  1050,  1050,  1050,  1050,  1050,  1050,
+-32768,    94,-32768,    43,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,   -82,-32768,   119,   146,   183,   157,   190,   159,   194,
+   166,   196,   195,   197,   169,   199,   198,   406,-32768,  1050,
+  1050,  1050,-32768,   857,-32768,    97,   100,   617,-32768,-32768,
+    46,-32768,   617,   617,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,   617,  1012,   104,   105,-32768,   617,
+   103,   109,   178,   111,   122,   123,   131,   132,   133,   134,
+   617,   617,   617,   135,  1012,  1050,  1050,   209,-32768,   137,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+   136,   138,   139,   140,   141,   144,   895,  1088,   566,   219,
+   145,   147,   148,   149,-32768,-32768,   137,   -48,   -88,   -17,
+-32768,    22,-32768,   152,   150,   936,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,   192,  1088,-32768,-32768,-32768,
+-32768,   155,-32768,   158,   617,    -5,-32768,     5,-32768,   172,
+   617,   153,  1050,  1050,  1050,  1050,  1050,  1050,  1050,  1050,
+   173,   174,   176,  1050,   617,   617,   177,-32768,   -20,-32768,
+  1088,  1088,  1088,  1088,  1088,  1088,-32768,-32768,   -62,   -11,
+-32768,   -79,-32768,  1088,  1088,  1088,  1088,-32768,-32768,-32768,
+-32768,-32768,   974,   224,-32768,-32768,   236,    23,   251,   252,
+   180,   617,   271,   617,  1050,-32768,   179,   617,-32768,   184,
+-32768,-32768,   185,   186,-32768,-32768,   617,   617,   617,-32768,
+   191,-32768,  1050,   258,   280,-32768,   137,   172,   256,   200,
+   201,   202,   203,  1088,-32768,-32768,-32768,   204,   205,   206,
+   207,-32768,-32768,-32768,   242,   208,-32768,   617,   617,  1050,
+   210,-32768,   210,-32768,   216,   617,   222,  1050,  1050,  1050,
+-32768,-32768,-32768,  1050,   617,-32768,-32768,-32768,   220,  1050,
+  1088,  1088,  1088,  1088,-32768,  1088,  1088,  1088,  1088,   294,
+-32768,   275,   225,   226,   216,   221,   259,-32768,-32768,  1050,
+   227,   617,-32768,-32768,-32768,   223,-32768,-32768,   228,   232,
+   234,   238,   239,   237,   240,   243,   244,-32768,-32768,   324,
+    41,   310,-32768,-32768,   245,-32768,-32768,  1088,-32768,  1088,
+  1088,-32768,-32768,-32768,-32768,   617,-32768,   715,    58,   328,
+-32768,   246,   247,   250,-32768,   248,-32768,   715,   617,-32768,
+-32768,-32768,   338,   260,   297,   617,   350,   351,-32768,   617,
+   617,-32768,-32768,   376,   377,-32768
+};
+
+static const short yypgoto[] = {-32768,
+-32768,   296,   298,   299,   300,  -113,  -111,  -439,-32768,   345,
+   362,   -92,-32768,  -203,    52,-32768,  -244,-32768,   -39,-32768,
+   -30,-32768,   -56,   281,-32768,   -95,   215,  -230,   341,-32768,
+-32768,-32768,-32768,-32768,   353,-32768,-32768,-32768,-32768,     9,
+-32768,    62,-32768,-32768,   375,-32768,-32768,-32768,-32768,   397,
+-32768,-32768,  -388,   -57,   168,  -105,-32768,   387,-32768,-32768,
+-32768,-32768,-32768,    61,    -2,-32768,-32768,    39,-32768,-32768
+};
+
+
+#define	YYLAST		1278
+
+
+static const short yytable[] = {    77,
+   203,   179,   204,   189,   289,    93,   192,    82,    32,   342,
+    21,   468,   328,   364,    77,    35,   103,   320,   322,   344,
+   182,   228,   206,   330,   374,    24,   107,   229,   209,   478,
+   183,   213,   214,   365,   377,   215,   216,   217,   218,   219,
+   220,   374,    21,    15,   224,    16,   338,   375,   343,   103,
+   195,   196,   197,   198,   199,   200,   201,   202,   343,   225,
+    32,   329,    43,    45,   193,   163,   107,   195,   196,   197,
+   198,   199,   200,   201,   202,    44,   194,    48,   188,   476,
+    50,   188,    52,   105,     5,     6,     7,     8,   -59,   484,
+    46,    83,   374,    39,    40,    41,    87,   107,    88,    36,
+   376,   207,   208,   188,   210,   211,   188,   188,    94,    95,
+   188,   188,   188,   188,   188,   188,   221,   222,   223,   188,
+   256,   307,   408,   258,   259,   260,   374,   157,   158,    89,
+   280,   226,   227,    90,   387,   280,   280,   195,   196,   197,
+   198,   199,   200,   201,   202,   231,   232,   280,   -24,   -24,
+   467,   -60,   280,   262,    25,    26,    27,    28,    29,   -23,
+   -23,   -22,   -22,   280,   280,   280,   285,   477,   -21,   -21,
+    98,   233,   234,    99,   100,    77,   106,   156,   160,   161,
+  -121,   180,   181,   184,   190,   305,   -28,   428,   350,   429,
+   352,   353,   354,   -27,    77,   306,   188,   -26,   360,   -25,
+   266,   -31,   236,   -32,   237,     3,   267,   286,   288,   260,
+   291,     4,   292,   293,   294,   368,   369,   370,   371,   372,
+   373,     5,     6,     7,     8,   295,   296,   280,   378,   379,
+   380,   381,   308,   280,   297,   298,   299,   300,   304,     9,
+   309,   311,   323,   312,   313,   314,   315,   280,   280,   316,
+   324,   336,   325,   326,   327,   333,   334,   364,   339,   386,
+   348,   340,   349,   188,   351,   188,   188,   188,   355,   356,
+   331,   388,   389,   188,   392,   345,   357,   358,   415,   359,
+   363,   406,   396,   407,   280,   390,   280,   398,   399,   400,
+   280,   410,   433,   434,   435,   420,   404,   448,   449,   280,
+   280,   280,   262,   411,   412,   413,   414,   416,   417,   418,
+   419,   422,   343,   427,   188,   440,   441,   442,   443,   430,
+   444,   445,   446,   447,   453,   432,   438,   452,   450,   456,
+   280,   280,   405,   451,   457,   458,   454,   203,   280,   204,
+   459,   460,   461,   462,   466,   470,   463,   280,   479,   464,
+   465,   483,   480,   481,   471,   203,   482,   204,   486,   188,
+   282,   283,   472,   487,   473,   474,   488,   188,   188,   188,
+   490,   491,   284,   188,   280,   495,   496,   290,    85,   439,
+   147,    47,   148,   149,   150,   384,   186,    97,   301,   302,
+   303,   -34,   255,    15,   383,    16,    92,    49,    22,   188,
+    38,   436,     4,   -34,   -34,   395,   409,     0,   280,     0,
+    53,    54,   -34,   -34,   -34,   -34,     0,     0,   -34,    17,
+     0,   280,     0,     0,     0,     0,    18,    15,   280,    16,
+    19,   238,   280,   280,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   239,   240,     0,     0,     0,     0,     0,
+     0,     0,   341,     0,     0,     0,     0,     0,   347,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   361,   362,     0,     0,     0,   118,   119,   120,
+   121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+   131,     0,     0,     0,     0,     0,   241,     0,   242,   243,
+   139,   140,     0,   244,   245,   246,     0,     0,     0,   391,
+     0,   393,     0,   247,     0,   397,   248,     0,   249,     0,
+     0,   250,     0,     0,   401,   402,   403,     0,    53,    54,
+     0,   101,    56,    57,    58,    59,    60,    61,    62,    63,
+    64,    65,    66,    67,    68,    15,     0,    16,     0,     0,
+     0,     0,     0,     0,     0,   423,   424,     0,     0,     0,
+     0,     0,     0,   431,     0,     0,     0,     0,    69,     0,
+    53,    54,   437,   101,   164,   165,   166,   167,   168,   169,
+   170,   171,   172,   173,   174,    67,    68,    15,     0,    16,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   455,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    69,     0,     0,     0,     0,     0,     0,     0,     0,   268,
+   269,    53,    54,   270,     0,     0,     0,     0,    70,     0,
+     0,    71,     0,   475,    72,     0,    73,   102,    15,     0,
+    16,     0,   271,   272,   273,     0,   485,     0,     0,     0,
+     0,     0,     0,   489,   274,   275,     0,   492,   493,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    70,     0,     0,    71,   276,     0,    72,     0,    73,   321,
+     0,     0,     0,     0,     0,     0,     0,     0,   118,   119,
+   120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+   130,   131,     0,     0,     0,     0,     0,   241,     0,   242,
+   243,   139,   140,     0,   244,   245,   246,   268,   269,     0,
+     0,   270,     0,     0,     0,     0,     0,   277,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   271,   272,   273,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   274,   275,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   276,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   118,   119,   120,   121,
+   122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     0,     0,     0,     0,     0,   241,     0,   242,   243,   139,
+   140,     0,   244,   245,   246,     0,     0,     0,     0,     0,
+     0,     0,     0,    53,    54,   277,   101,    56,    57,    58,
+    59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+    15,     0,    16,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   185,     0,     0,     0,     0,
+     0,    53,    54,    69,   101,    56,    57,    58,    59,    60,
+    61,    62,    63,    64,    65,    66,    67,    68,    15,     0,
+    16,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   261,     0,     0,     0,     0,     0,    53,
+    54,    69,   101,   164,   165,   166,   167,   168,   169,   170,
+   171,   172,   173,   174,    67,    68,    15,     0,    16,     0,
+     0,     0,     0,    70,     0,     0,    71,     0,     0,    72,
+     0,    73,     0,     0,     0,     0,     0,     0,     0,    69,
+    53,    54,     0,   101,    56,    57,    58,    59,    60,    61,
+    62,    63,    64,    65,    66,    67,    68,    15,     0,    16,
+     0,    70,     0,     0,    71,     0,     0,    72,     0,    73,
+     0,     0,   335,     0,     0,     0,     0,     0,    53,    54,
+    69,   101,    56,    57,    58,    59,    60,    61,    62,    63,
+    64,    65,    66,    67,    68,    15,     0,    16,     0,    70,
+     0,     0,    71,     0,   317,    72,     0,    73,     0,     0,
+   382,     0,     0,     0,     0,     0,    53,    54,    69,    55,
+    56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+    66,    67,    68,    15,     0,    16,     0,     0,     0,     0,
+    70,     0,     0,    71,     0,     0,    72,     0,    73,     0,
+     0,     0,     0,     0,    53,    54,    69,   101,    56,    57,
+    58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+    68,    15,     0,    16,     0,     0,     0,     0,    70,     0,
+     0,    71,     0,     0,    72,     0,    73,     0,     0,     0,
+     0,     0,    53,    54,    69,   101,   164,   165,   166,   167,
+   168,   169,   170,   171,   172,   173,   174,    67,    68,    15,
+     0,    16,     0,     0,     0,     0,    70,     0,     0,    71,
+     0,     0,    72,     0,    73,     0,     0,     0,     0,     0,
+    53,    54,    69,   191,    56,    57,    58,    59,    60,    61,
+    62,    63,    64,    65,    66,    67,    68,    15,     0,    16,
+     0,     0,     0,     0,    70,     0,     0,    71,     0,     0,
+    72,     0,    73,     0,     0,     0,     0,     0,     0,     0,
+    69,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,    70,     0,     0,    71,     0,     0,    72,     0,
+    73,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   108,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   109,     0,     0,     0,     0,     0,     0,     0,     0,
+    70,   110,   111,    71,     0,     0,    72,     0,    73,     0,
+     0,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+   121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+   131,   132,   133,   134,     0,     0,   135,   136,   137,   138,
+   139,   140,   141,   142,   143,   144,   145,   146
+};
+
+static const short yycheck[] = {    30,
+   114,    97,   114,   109,   208,    45,   112,    29,    23,    15,
+     2,   451,   257,    34,    45,    30,    73,   248,   249,    15,
+   104,   104,   115,   112,   104,    58,   115,   110,   134,   469,
+   114,   137,   138,    54,   114,   141,   142,   143,   144,   145,
+   146,   104,    34,    22,   150,    24,   277,   110,    54,   106,
+    10,    11,    12,    13,    14,    15,    16,    17,    54,   152,
+    23,   110,   103,    20,     9,    96,   115,    10,    11,    12,
+    13,    14,    15,    16,    17,    58,    21,   103,   109,   468,
+    24,   112,     4,    75,    41,    42,    43,    44,   106,   478,
+    47,   113,   104,    49,    50,    51,   103,   115,   103,   114,
+   112,   132,   133,   134,   135,   136,   137,   138,    32,    33,
+   141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+   178,   227,   367,   180,   181,   182,   104,    52,    53,   103,
+   188,    89,    90,   108,   112,   193,   194,    10,    11,    12,
+    13,    14,    15,    16,    17,    27,    28,   205,     3,     4,
+   110,   106,   210,   184,    61,    62,    63,    64,    65,     3,
+     4,     3,     4,   221,   222,   223,   206,   110,     3,     4,
+     4,     3,     4,     4,     4,   206,   106,    24,     4,    24,
+     0,   109,   109,   106,    56,   225,     4,   391,   294,   393,
+   296,   297,   298,     4,   225,   226,   227,     4,   304,     4,
+   104,     7,     4,     7,     7,    25,   107,   104,   104,   266,
+   108,    31,   104,    36,   104,   311,   312,   313,   314,   315,
+   316,    41,    42,    43,    44,   104,   104,   285,   324,   325,
+   326,   327,    24,   291,   104,   104,   104,   104,   104,    59,
+   104,   106,    24,   106,   106,   106,   106,   305,   306,   106,
+   106,    60,   106,   106,   106,   104,   107,    34,   104,    24,
+   108,   104,   293,   294,   295,   296,   297,   298,   299,   300,
+   262,    21,    21,   304,     4,   104,   104,   104,   374,   104,
+   104,    24,   104,     4,   342,   106,   344,   104,   104,   104,
+   348,    36,   398,   399,   400,    54,   106,     4,    24,   357,
+   358,   359,   333,   104,   104,   104,   104,   104,   104,   104,
+   104,   104,    54,   104,   345,   411,   412,   413,   414,   104,
+   416,   417,   418,   419,   430,   104,   107,   107,   104,   107,
+   388,   389,   363,   108,   107,   104,   110,   451,   396,   451,
+   107,   104,   104,   107,    21,    36,   107,   405,    21,   107,
+   107,   104,   107,   107,   110,   469,   107,   469,    21,   390,
+   193,   194,   458,   104,   460,   461,    70,   398,   399,   400,
+    21,    21,   205,   404,   432,     0,     0,   210,    34,   410,
+    85,    20,    85,    85,    85,   334,   106,    47,   221,   222,
+   223,    20,   178,    22,   333,    24,    44,    23,     2,   430,
+    14,   404,    31,    32,    33,   345,   368,    -1,   466,    -1,
+     5,     6,    41,    42,    43,    44,    -1,    -1,    47,    48,
+    -1,   479,    -1,    -1,    -1,    -1,    55,    22,   486,    24,
+    59,    26,   490,   491,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    38,    39,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   285,    -1,    -1,    -1,    -1,    -1,   291,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   305,   306,    -1,    -1,    -1,    72,    73,    74,
+    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+    85,    -1,    -1,    -1,    -1,    -1,    91,    -1,    93,    94,
+    95,    96,    -1,    98,    99,   100,    -1,    -1,    -1,   342,
+    -1,   344,    -1,   108,    -1,   348,   111,    -1,   113,    -1,
+    -1,   116,    -1,    -1,   357,   358,   359,    -1,     5,     6,
+    -1,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+    17,    18,    19,    20,    21,    22,    -1,    24,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   388,   389,    -1,    -1,    -1,
+    -1,    -1,    -1,   396,    -1,    -1,    -1,    -1,    45,    -1,
+     5,     6,   405,     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,   432,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
+     4,     5,     6,     7,    -1,    -1,    -1,    -1,   105,    -1,
+    -1,   108,    -1,   466,   111,    -1,   113,   114,    22,    -1,
+    24,    -1,    26,    27,    28,    -1,   479,    -1,    -1,    -1,
+    -1,    -1,    -1,   486,    38,    39,    -1,   490,   491,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   105,    -1,    -1,   108,    58,    -1,   111,    -1,   113,   114,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    72,    73,
+    74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+    84,    85,    -1,    -1,    -1,    -1,    -1,    91,    -1,    93,
+    94,    95,    96,    -1,    98,    99,   100,     3,     4,    -1,
+    -1,     7,    -1,    -1,    -1,    -1,    -1,   111,    -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,    58,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    72,    73,    74,    75,
+    76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+    -1,    -1,    -1,    -1,    -1,    91,    -1,    93,    94,    95,
+    96,    -1,    98,    99,   100,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,     5,     6,   111,     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,     5,     6,    45,     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,     5,
+     6,    45,     8,     9,    10,    11,    12,    13,    14,    15,
+    16,    17,    18,    19,    20,    21,    22,    -1,    24,    -1,
+    -1,    -1,    -1,   105,    -1,    -1,   108,    -1,    -1,   111,
+    -1,   113,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,
+     5,     6,    -1,     8,     9,    10,    11,    12,    13,    14,
+    15,    16,    17,    18,    19,    20,    21,    22,    -1,    24,
+    -1,   105,    -1,    -1,   108,    -1,    -1,   111,    -1,   113,
+    -1,    -1,    37,    -1,    -1,    -1,    -1,    -1,     5,     6,
+    45,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+    17,    18,    19,    20,    21,    22,    -1,    24,    -1,   105,
+    -1,    -1,   108,    -1,   110,   111,    -1,   113,    -1,    -1,
+    37,    -1,    -1,    -1,    -1,    -1,     5,     6,    45,     8,
+     9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+    19,    20,    21,    22,    -1,    24,    -1,    -1,    -1,    -1,
+   105,    -1,    -1,   108,    -1,    -1,   111,    -1,   113,    -1,
+    -1,    -1,    -1,    -1,     5,     6,    45,     8,     9,    10,
+    11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+    21,    22,    -1,    24,    -1,    -1,    -1,    -1,   105,    -1,
+    -1,   108,    -1,    -1,   111,    -1,   113,    -1,    -1,    -1,
+    -1,    -1,     5,     6,    45,     8,     9,    10,    11,    12,
+    13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+    -1,    24,    -1,    -1,    -1,    -1,   105,    -1,    -1,   108,
+    -1,    -1,   111,    -1,   113,    -1,    -1,    -1,    -1,    -1,
+     5,     6,    45,     8,     9,    10,    11,    12,    13,    14,
+    15,    16,    17,    18,    19,    20,    21,    22,    -1,    24,
+    -1,    -1,    -1,    -1,   105,    -1,    -1,   108,    -1,    -1,
+   111,    -1,   113,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   105,    -1,    -1,   108,    -1,    -1,   111,    -1,
+   113,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    35,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    46,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   105,    56,    57,   108,    -1,    -1,   111,    -1,   113,    -1,
+    -1,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+    85,    86,    87,    88,    -1,    -1,    91,    92,    93,    94,
+    95,    96,    97,    98,    99,   100,   101,   102
+};
+/* -*-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   1278
-
-/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS  117
-/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS  72
-/* YYNRULES -- Number of rules. */
-#define YYNRULES  239
-/* YYNRULES -- Number of states. */
-#define YYNSTATES  496
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
-#define YYUNDEFTOK  2
-#define YYMAXUTOK   357
-
-#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,
-     106,   107,   115,     2,   104,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     111,   103,   112,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   108,   105,   110,     2,     2,     2,     2,     2,   116,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     109,     2,     2,   113,     2,   114,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     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
-};
-
-#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,    80,    81,    83,    85,    87,    89,    92,    93,    96,
-      97,   101,   104,   105,   107,   108,   112,   114,   117,   119,
-     121,   123,   125,   127,   129,   131,   133,   135,   137,   139,
-     141,   143,   145,   147,   149,   151,   153,   155,   157,   159,
-     162,   167,   173,   179,   183,   186,   189,   191,   195,   197,
-     201,   203,   204,   209,   213,   217,   222,   227,   231,   234,
-     237,   240,   243,   246,   249,   252,   255,   258,   261,   268,
-     274,   283,   290,   297,   304,   311,   318,   327,   336,   340,
-     342,   344,   346,   348,   351,   354,   359,   362,   364,   369,
-     372,   377,   378,   386,   387,   395,   399,   404,   405,   407,
-     409,   411,   415,   419,   423,   427,   431,   433,   434,   436,
-     438,   440,   441,   444,   448,   450,   452,   456,   458,   459,
-     468,   470,   472,   476,   478,   480,   483,   484,   488,   489,
-     491,   493,   495,   497,   499,   501,   503,   505,   507,   511,
-     513,   519,   521,   523,   525,   527,   530,   533,   536,   540,
-     543,   544,   546,   549,   552,   556,   566,   576,   585,   599,
-     601,   603,   610,   616,   619,   626,   634,   636,   640,   642,
-     643,   646,   648,   654,   660,   666,   669,   674,   679,   686,
-     691,   696,   701,   706,   713,   720,   723,   731,   733,   736,
-     737,   739,   740,   744,   751,   755,   762,   765,   770,   777
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const short int yyrhs[] =
-{
-     148,     0,    -1,     5,    -1,     6,    -1,     3,    -1,     4,
-      -1,    72,    -1,    73,    -1,    74,    -1,    75,    -1,    76,
-      -1,    77,    -1,    78,    -1,    79,    -1,    80,    -1,    81,
-      -1,    82,    -1,    83,    -1,    84,    -1,    85,    -1,    95,
-      -1,    96,    -1,    16,    -1,    14,    -1,    12,    -1,    10,
-      -1,    17,    -1,    15,    -1,    13,    -1,    11,    -1,   124,
-      -1,   125,    -1,    18,    -1,    19,    -1,   158,   103,    -1,
-      -1,    41,    -1,    42,    -1,    43,    -1,    44,    -1,    -1,
-      -1,    62,    -1,    63,    -1,    64,    -1,    65,    -1,    61,
-       4,    -1,    -1,    54,     4,    -1,    -1,   104,    54,     4,
-      -1,    34,    24,    -1,    -1,   133,    -1,    -1,   104,   136,
-     135,    -1,   133,    -1,    54,     4,    -1,   139,    -1,     8,
-      -1,   141,    -1,     8,    -1,   141,    -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,    45,    -1,   140,    -1,   172,    -1,   105,
-       4,    -1,   138,   106,   143,   107,    -1,   108,     4,   109,
-     141,   110,    -1,   111,     4,   109,   141,   112,    -1,   113,
-     142,   114,    -1,   113,   114,    -1,   141,   115,    -1,   141,
-      -1,   142,   104,   141,    -1,   142,    -1,   142,   104,    37,
-      -1,    37,    -1,    -1,   139,   108,   146,   110,    -1,   139,
-     108,   110,    -1,   139,   116,    24,    -1,   139,   111,   146,
-     112,    -1,   139,   113,   146,   114,    -1,   139,   113,   114,
-      -1,   139,    38,    -1,   139,    39,    -1,   139,   172,    -1,
-     139,   145,    -1,   139,    26,    -1,   124,   119,    -1,   125,
-       4,    -1,     9,    27,    -1,     9,    28,    -1,   127,     7,
-      -1,    93,   106,   144,    36,   139,   107,    -1,    91,   106,
-     144,   186,   107,    -1,    94,   106,   144,   104,   144,   104,
-     144,   107,    -1,   120,   106,   144,   104,   144,   107,    -1,
-     121,   106,   144,   104,   144,   107,    -1,   122,   106,   144,
-     104,   144,   107,    -1,   123,   106,   144,   104,   144,   107,
-      -1,    98,   106,   144,   104,   144,   107,    -1,    99,   106,
-     144,   104,   144,   104,   144,   107,    -1,   100,   106,   144,
-     104,   144,   104,   144,   107,    -1,   146,   104,   144,    -1,
-     144,    -1,    32,    -1,    33,    -1,   149,    -1,   149,   167,
-      -1,   149,   168,    -1,   149,    59,    58,   153,    -1,   149,
-      25,    -1,   150,    -1,   150,   128,    20,   137,    -1,   150,
-     168,    -1,   150,    59,    58,   153,    -1,    -1,   150,   128,
-     129,   147,   144,   151,   135,    -1,    -1,   150,   128,    47,
-     147,   139,   152,   135,    -1,   150,    48,   155,    -1,   150,
-      55,   103,   156,    -1,    -1,    24,    -1,    53,    -1,    52,
-      -1,    50,   103,   154,    -1,    51,   103,     4,    -1,    49,
-     103,    24,    -1,   108,   157,   110,    -1,   157,   104,    24,
-      -1,    24,    -1,    -1,    22,    -1,    24,    -1,   158,    -1,
-      -1,   139,   159,    -1,   161,   104,   160,    -1,   160,    -1,
-     161,    -1,   161,   104,    37,    -1,    37,    -1,    -1,   130,
-     137,   158,   106,   162,   107,   134,   131,    -1,    29,    -1,
-     113,    -1,   129,   163,   164,    -1,    30,    -1,   114,    -1,
-     175,   166,    -1,    -1,    31,   169,   163,    -1,    -1,    60,
-      -1,     3,    -1,     4,    -1,     7,    -1,    27,    -1,    28,
-      -1,    38,    -1,    39,    -1,    26,    -1,   111,   146,   112,
-      -1,   145,    -1,    58,   170,    24,   104,    24,    -1,   118,
-      -1,   158,    -1,   172,    -1,   171,    -1,   139,   173,    -1,
-     175,   176,    -1,   165,   176,    -1,   177,   128,   178,    -1,
-     177,   180,    -1,    -1,    23,    -1,    66,   174,    -1,    66,
-       8,    -1,    67,    21,   173,    -1,    67,     9,   173,   104,
-      21,   173,   104,    21,   173,    -1,    68,   126,   173,   104,
-      21,   173,   108,   179,   110,    -1,    68,   126,   173,   104,
-      21,   173,   108,   110,    -1,    69,   130,   137,   173,   106,
-     183,   107,    36,    21,   173,    70,    21,   173,    -1,    70,
-      -1,    71,    -1,   179,   126,   171,   104,    21,   173,    -1,
-     126,   171,   104,    21,   173,    -1,   128,   185,    -1,   139,
-     108,   173,   104,   173,   110,    -1,   181,   104,   108,   173,
-     104,   173,   110,    -1,   174,    -1,   182,   104,   174,    -1,
-     182,    -1,    -1,    57,    56,    -1,    56,    -1,   120,   139,
-     173,   104,   173,    -1,   121,   139,   173,   104,   173,    -1,
-     122,   139,   173,   104,   173,    -1,    46,   174,    -1,   123,
-     174,   104,   174,    -1,    93,   174,    36,   139,    -1,    94,
-     174,   104,   174,   104,   174,    -1,    97,   174,   104,   139,
-      -1,   101,   174,   104,   139,    -1,   102,   174,   104,   139,
-      -1,    98,   174,   104,   174,    -1,    99,   174,   104,   174,
-     104,   174,    -1,   100,   174,   104,   174,   104,   174,    -1,
-      92,   181,    -1,   184,   130,   137,   173,   106,   183,   107,
-      -1,   188,    -1,   104,   182,    -1,    -1,    35,    -1,    -1,
-      86,   139,   132,    -1,    86,   139,   104,    15,   173,   132,
-      -1,    87,   139,   132,    -1,    87,   139,   104,    15,   173,
-     132,    -1,    88,   174,    -1,   187,    89,   139,   173,    -1,
-     187,    90,   174,   104,   139,   173,    -1,    91,   139,   173,
-     186,    -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
-static const unsigned short int yyrline[] =
-{
-       0,  1027,  1027,  1028,  1036,  1037,  1047,  1047,  1047,  1047,
-    1047,  1048,  1048,  1048,  1049,  1049,  1049,  1049,  1049,  1049,
-    1051,  1051,  1055,  1055,  1055,  1055,  1056,  1056,  1056,  1056,
-    1057,  1057,  1058,  1058,  1061,  1065,  1070,  1071,  1072,  1073,
-    1074,  1076,  1077,  1078,  1079,  1080,  1081,  1090,  1091,  1097,
-    1098,  1106,  1114,  1115,  1120,  1121,  1122,  1127,  1141,  1141,
-    1142,  1142,  1144,  1154,  1154,  1154,  1154,  1154,  1154,  1154,
-    1155,  1155,  1155,  1155,  1155,  1155,  1156,  1160,  1164,  1171,
-    1179,  1192,  1197,  1209,  1219,  1223,  1232,  1237,  1243,  1244,
-    1248,  1252,  1263,  1289,  1303,  1333,  1359,  1380,  1393,  1403,
-    1408,  1468,  1475,  1484,  1490,  1496,  1500,  1504,  1512,  1523,
-    1555,  1563,  1585,  1596,  1602,  1610,  1616,  1622,  1631,  1635,
-    1643,  1643,  1653,  1661,  1666,  1670,  1674,  1678,  1693,  1714,
-    1717,  1720,  1720,  1727,  1727,  1735,  1738,  1741,  1745,  1758,
-    1759,  1761,  1765,  1774,  1780,  1782,  1787,  1792,  1801,  1801,
-    1802,  1802,  1804,  1811,  1817,  1824,  1828,  1834,  1839,  1844,
-    1931,  1931,  1933,  1941,  1941,  1943,  1948,  1948,  1958,  1962,
-    1967,  1971,  1975,  1979,  1983,  1987,  1991,  1995,  1999,  2024,
-    2028,  2042,  2046,  2052,  2052,  2058,  2063,  2067,  2076,  2086,
-    2091,  2102,  2114,  2118,  2122,  2126,  2130,  2145,  2150,  2204,
-    2208,  2215,  2224,  2235,  2243,  2249,  2257,  2262,  2269,  2269,
-    2271,  2275,  2282,  2295,  2307,  2318,  2331,  2339,  2347,  2355,
-    2361,  2381,  2404,  2410,  2416,  2422,  2437,  2495,  2502,  2505,
-    2510,  2514,  2521,  2526,  2531,  2536,  2541,  2549,  2560,  2574
-};
-#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", "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", "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", "AsmBlock", "BigOrLittle", "TargetDefinition",
-  "LibrariesDefinition", "LibList", "Name", "OptName", "ArgVal",
-  "ArgListH", "ArgList", "FunctionHeaderH", "BEGIN", "FunctionHeader",
-  "END", "Function", "FunctionProto", "@3", "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,    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,   117,   118,   118,   119,   119,   120,   120,   120,   120,
-     120,   121,   121,   121,   122,   122,   122,   122,   122,   122,
-     123,   123,   124,   124,   124,   124,   125,   125,   125,   125,
-     126,   126,   127,   127,   128,   128,   129,   129,   129,   129,
-     129,   130,   130,   130,   130,   130,   130,   131,   131,   132,
-     132,   133,   134,   134,   135,   135,   136,   136,   137,   137,
-     138,   138,   139,   140,   140,   140,   140,   140,   140,   140,
-     140,   140,   140,   140,   140,   140,   141,   141,   141,   141,
-     141,   141,   141,   141,   141,   141,   142,   142,   143,   143,
-     143,   143,   144,   144,   144,   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,   148,   149,   149,   149,   149,   149,   150,   150,
-     150,   151,   150,   152,   150,   150,   150,   150,   153,   154,
-     154,   155,   155,   155,   156,   157,   157,   157,   158,   158,
-     159,   159,   160,   161,   161,   162,   162,   162,   162,   163,
-     164,   164,   165,   166,   166,   167,   169,   168,   170,   170,
-     171,   171,   171,   171,   171,   171,   171,   171,   171,   171,
-     171,   172,   172,   173,   173,   174,   175,   175,   176,   177,
-     177,   177,   178,   178,   178,   178,   178,   178,   178,   178,
-     178,   179,   179,   180,   181,   181,   182,   182,   183,   183,
-     184,   184,   185,   185,   185,   185,   185,   185,   185,   185,
-     185,   185,   185,   185,   185,   185,   185,   185,   186,   186,
-     187,   187,   188,   188,   188,   188,   188,   188,   188,   188
-};
-
-/* 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,
-       0,     0,     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,     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,     3,     0,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     3,     1,
-       5,     1,     1,     1,     1,     2,     2,     2,     3,     2,
-       0,     1,     2,     2,     3,     9,     9,     8,    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[] =
-{
-     137,     0,    40,   127,     1,   126,   166,    36,    37,    38,
-      39,     0,    41,   190,   123,   124,   190,   148,   149,     0,
-       0,     0,    40,     0,   129,    41,     0,     0,    42,    43,
-      44,    45,     0,     0,   191,   187,    35,   163,   164,   165,
-     186,     0,     0,     0,   135,     0,     0,     0,     0,     0,
-      34,   167,   138,   125,    46,     2,     3,    59,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,     0,     0,     0,     0,   181,     0,     0,    58,
-      77,    62,   182,    78,   160,   161,   162,   231,   189,     0,
-       0,     0,   147,   136,   130,   128,   120,   121,     0,     0,
-      79,     0,     0,    61,    84,    86,     0,     0,    91,    85,
-     230,     0,   211,     0,     0,     0,     0,    41,   199,   200,
-       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,   188,    41,   203,     0,   227,   143,   140,
-     139,   141,   142,   146,     0,   133,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,     0,     0,     0,
-       0,   131,     0,     0,     0,    83,   158,    90,    88,     0,
-       0,   215,   210,   193,   192,     0,     0,    25,    29,    24,
-      28,    23,    27,    22,    26,    30,    31,     0,     0,    49,
-      49,   236,     0,     0,   225,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   144,    54,   105,   106,     4,     5,   103,   104,   107,
-     102,    98,    99,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   101,   100,    54,
-      60,    60,    87,   157,   151,   154,   155,     0,     0,    80,
-     170,   171,   172,   177,   173,   174,   175,   176,   168,     0,
-     179,   184,   183,   185,     0,   194,     0,     0,     0,   232,
-       0,   234,   229,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     145,     0,   134,     0,     0,     0,     0,     0,     0,    93,
-     119,     0,     0,    97,     0,    94,     0,     0,     0,     0,
-     132,    81,    82,   150,   152,     0,    52,    89,   169,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   239,     0,
-       0,   217,     0,   219,   222,     0,     0,   220,   221,     0,
-       0,     0,   216,     0,   237,     0,     0,     0,    56,    54,
-     229,     0,     0,     0,     0,     0,     0,    92,    95,    96,
-       0,     0,     0,     0,   156,   153,    53,    47,     0,   178,
-       0,     0,   209,    49,    50,    49,   206,   228,     0,     0,
-       0,     0,     0,   212,   213,   214,   209,     0,    51,    57,
-      55,     0,     0,     0,     0,     0,     0,   118,     0,     0,
-       0,     0,     0,   159,     0,     0,     0,   208,     0,     0,
-     233,   235,     0,     0,     0,   218,   223,   224,     0,   238,
-     109,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      48,   180,     0,     0,     0,   207,   204,     0,   226,   108,
-       0,   115,     0,     0,   111,   112,   113,   114,     0,   197,
-       0,     0,     0,   205,     0,     0,     0,   195,     0,   196,
-       0,     0,   110,   116,   117,     0,     0,     0,     0,     0,
-       0,   202,     0,     0,   201,   198
-};
-
-/* YYDEFGOTO[NTERM-NUM]. */
-static const short int yydefgoto[] =
-{
-      -1,    76,   237,   253,   254,   255,   256,   177,   178,   207,
-     179,    22,    12,    32,   423,   289,   368,   387,   312,   369,
-      77,    78,   180,    80,    81,   106,   189,   320,   280,   321,
-      98,     1,     2,     3,   259,   232,    53,   161,    44,    93,
-     164,    82,   334,   265,   266,   267,    33,    86,    13,    39,
-      14,    15,    25,   339,   281,    83,   283,   396,    16,    35,
-      36,   153,   471,    88,   214,   427,   428,   154,   155,   348,
-     156,   157
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-#define YYPACT_NINF -442
-static const short int yypact[] =
-{
-    -442,    25,   181,   372,  -442,  -442,  -442,  -442,  -442,  -442,
-    -442,   -16,    33,    42,  -442,  -442,   -14,  -442,  -442,    12,
-     -57,    18,    44,   -25,  -442,    33,    75,   106,  -442,  -442,
-    -442,  -442,  1012,   -21,  -442,  -442,     4,  -442,  -442,  -442,
-    -442,    29,    32,    49,  -442,    47,    75,  1012,    97,    97,
-    -442,  -442,  -442,  -442,  -442,  -442,  -442,    63,  -442,  -442,
-    -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,
-    -442,  -442,   170,   171,   173,   524,  -442,     4,    72,  -442,
-    -442,   -84,  -442,  -442,  -442,  -442,  -442,  1176,  -442,   156,
-      94,   175,   158,  -442,  -442,  -442,  -442,  -442,  1050,  1088,
-    -442,    74,    76,  -442,  -442,   -84,   -37,    78,   819,  -442,
-    -442,  1050,  -442,   131,  1126,    14,   128,    33,  -442,  -442,
-    -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,
-    -442,  -442,  -442,  -442,  1050,  1050,  1050,  1050,  1050,  1050,
-    1050,  -442,  -442,  1050,  1050,  1050,  1050,  1050,  1050,  1050,
-    1050,  1050,  1050,  -442,    33,  -442,    60,  -442,  -442,  -442,
-    -442,  -442,  -442,  -442,    23,  -442,   129,   155,   190,   157,
-     194,   159,   196,   167,   197,   195,   198,   169,   199,   200,
-     406,  -442,  1050,  1050,  1050,  -442,   857,  -442,   100,   101,
-     617,  -442,  -442,    63,  -442,   617,   617,  -442,  -442,  -442,
-    -442,  -442,  -442,  -442,  -442,  -442,  -442,   617,  1012,   105,
-     107,  -442,   617,   118,   109,   178,   111,   123,   132,   133,
-     134,   135,   137,   617,   617,   617,   138,  1012,  1050,  1050,
-     209,  -442,   139,  -442,  -442,  -442,  -442,  -442,  -442,  -442,
-    -442,  -442,  -442,   140,   141,   144,   145,   146,   147,   895,
-    1088,   566,   211,   148,   149,   150,   151,  -442,  -442,   139,
-     -66,   -88,   -84,  -442,     4,  -442,   154,   152,   936,  -442,
-    -442,  -442,  -442,  -442,  -442,  -442,  -442,  -442,   184,  1088,
-    -442,  -442,  -442,  -442,   168,  -442,   172,   617,     5,  -442,
-       6,  -442,   174,   617,   153,  1050,  1050,  1050,  1050,  1050,
-    1050,  1050,  1050,   176,   177,   179,  1050,   617,   617,   180,
-    -442,   -20,  -442,  1088,  1088,  1088,  1088,  1088,  1088,  -442,
-    -442,    24,   -23,  -442,   -24,  -442,  1088,  1088,  1088,  1088,
-    -442,  -442,  -442,  -442,  -442,   974,   226,  -442,  -442,   221,
-      -3,   241,   252,   182,   617,   271,   617,  1050,  -442,   185,
-     617,  -442,   186,  -442,  -442,   188,   192,  -442,  -442,   617,
-     617,   617,  -442,   191,  -442,  1050,   253,   278,  -442,   139,
-     174,   250,   201,   202,   203,   204,  1088,  -442,  -442,  -442,
-     205,   206,   207,   208,  -442,  -442,  -442,   244,   210,  -442,
-     617,   617,  1050,   216,  -442,   216,  -442,   222,   617,   223,
-    1050,  1050,  1050,  -442,  -442,  -442,  1050,   617,  -442,  -442,
-    -442,   227,  1050,  1088,  1088,  1088,  1088,  -442,  1088,  1088,
-    1088,  1088,   295,  -442,   280,   224,   228,   222,   230,   259,
-    -442,  -442,  1050,   219,   617,  -442,  -442,  -442,   234,  -442,
-    -442,   235,   231,   236,   240,   242,   238,   243,   245,   246,
-    -442,  -442,   309,    41,   311,  -442,  -442,   239,  -442,  -442,
-    1088,  -442,  1088,  1088,  -442,  -442,  -442,  -442,   617,  -442,
-     715,    58,   330,  -442,   247,   248,   257,  -442,   255,  -442,
-     715,   617,  -442,  -442,  -442,   336,   263,   301,   617,   351,
-     355,  -442,   617,   617,  -442,  -442
-};
-
-/* YYPGOTO[NTERM-NUM].  */
-static const short int yypgoto[] =
-{
-    -442,  -442,  -442,   290,   292,   294,   296,  -115,  -113,  -441,
-    -442,   346,   362,  -106,  -442,  -205,    50,  -442,  -246,  -442,
-     -41,  -442,   -32,  -442,   -58,   277,  -442,   -97,   213,  -232,
-     338,  -442,  -442,  -442,  -442,  -442,   342,  -442,  -442,  -442,
-    -442,     7,  -442,    62,  -442,  -442,   370,  -442,  -442,  -442,
-    -442,   395,  -442,  -442,  -387,   -59,   166,  -107,  -442,   383,
-    -442,  -442,  -442,  -442,  -442,    54,    -4,  -442,  -442,    36,
-    -442,  -442
-};
-
-/* 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 -123
-static const short int yytable[] =
-{
-      79,   205,   181,   206,   191,   291,    95,   194,    84,    34,
-      23,   208,   470,   330,   366,    79,    37,   105,   322,   324,
-     344,   346,   -60,   195,   332,     4,    17,   109,    18,   211,
-     480,   109,   215,   216,   367,   196,   217,   218,   219,   220,
-     221,   222,    26,    23,   331,   226,    45,   340,   227,   109,
-     105,   197,   198,   199,   200,   201,   202,   203,   204,   345,
-     345,    41,    42,    43,    47,    34,   165,   184,   197,   198,
-     199,   200,   201,   202,   203,   204,    46,   185,    50,   190,
-     376,   376,   190,   478,   107,     7,     8,     9,    10,   378,
-     379,    48,    85,   486,    27,    28,    29,    30,    31,    52,
-      38,   376,   209,   210,   190,   212,   213,   190,   190,   389,
-      54,   190,   190,   190,   190,   190,   190,   223,   224,   225,
-     190,   258,   309,   410,   260,   261,   262,   230,   376,    96,
-      97,   282,    89,   231,   377,    90,   282,   282,   197,   198,
-     199,   200,   201,   202,   203,   204,   159,   160,   282,   228,
-     229,   469,    91,   282,   264,    92,   233,   234,   -25,   -25,
-     -24,   -24,   -23,   -23,   282,   282,   282,   287,   479,   -61,
-     -22,   -22,   235,   236,   100,   101,    79,   102,   108,   162,
-     158,  -122,   163,   182,   186,   183,   307,   192,   430,   352,
-     431,   354,   355,   356,   -29,    79,   308,   190,   -28,   362,
-     -27,   -26,   -32,   238,   268,   -33,     5,   239,   269,   288,
-     262,   290,     6,   294,   295,   296,   370,   371,   372,   373,
-     374,   375,     7,     8,     9,    10,   293,   297,   282,   380,
-     381,   382,   383,   310,   282,   325,   298,   299,   300,   301,
-      11,   302,   306,   311,   338,   388,   313,   314,   282,   282,
-     315,   316,   317,   318,   326,   327,   328,   329,   335,   336,
-     366,   350,   390,   351,   190,   353,   190,   190,   190,   357,
-     358,   333,   341,   391,   190,   394,   342,   408,   347,   417,
-     359,   360,   409,   361,   365,   282,   412,   282,   392,   398,
-     400,   282,   401,   435,   436,   437,   402,   406,   422,   450,
-     282,   282,   282,   264,   451,   413,   414,   415,   416,   418,
-     419,   420,   421,   345,   424,   190,   442,   443,   444,   445,
-     429,   446,   447,   448,   449,   455,   432,   434,   452,   456,
-     468,   282,   282,   407,   440,   460,   453,   454,   205,   282,
-     206,   458,   459,   461,   462,   464,   463,   472,   282,   473,
-     465,   481,   466,   467,   482,   483,   205,   488,   206,   485,
-     190,   284,   285,   474,   484,   475,   476,   489,   190,   190,
-     190,   490,   492,   286,   190,   282,   493,   149,   292,   150,
-     441,   151,    87,   152,    49,   188,   386,    99,    94,   303,
-     304,   305,   -35,   257,    17,    51,    18,   385,    24,    40,
-     190,   397,   438,     6,   -35,   -35,   411,     0,     0,   282,
-       0,    55,    56,   -35,   -35,   -35,   -35,     0,     0,   -35,
-      19,     0,   282,     0,     0,     0,     0,    20,    17,   282,
-      18,    21,   240,   282,   282,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   241,   242,     0,     0,     0,     0,
-       0,     0,     0,   343,     0,     0,     0,     0,     0,   349,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   363,   364,     0,     0,     0,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,     0,     0,     0,     0,     0,   243,     0,   244,
-     245,   141,   142,     0,   246,   247,   248,     0,     0,     0,
-     393,     0,   395,     0,   249,     0,   399,   250,     0,   251,
-       0,     0,   252,     0,     0,   403,   404,   405,     0,    55,
-      56,     0,   103,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    17,     0,    18,     0,
-       0,     0,     0,     0,     0,     0,   425,   426,     0,     0,
-       0,     0,     0,     0,   433,     0,     0,     0,     0,    71,
-       0,    55,    56,   439,   103,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,    69,    70,    17,     0,
-      18,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     457,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    71,     0,     0,     0,     0,     0,     0,     0,     0,
-     270,   271,    55,    56,   272,     0,     0,     0,     0,    72,
-       0,     0,    73,     0,   477,    74,     0,    75,   104,    17,
-       0,    18,     0,   273,   274,   275,     0,   487,     0,     0,
-       0,     0,     0,     0,   491,   276,   277,     0,   494,   495,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    72,     0,     0,    73,   278,     0,    74,     0,    75,
-     323,     0,     0,     0,     0,     0,     0,     0,     0,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,     0,     0,     0,     0,     0,   243,     0,
-     244,   245,   141,   142,     0,   246,   247,   248,   270,   271,
-       0,     0,   272,     0,     0,     0,     0,     0,   279,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   273,   274,   275,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   276,   277,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   278,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,     0,     0,     0,     0,     0,   243,     0,   244,   245,
-     141,   142,     0,   246,   247,   248,     0,     0,     0,     0,
-       0,     0,     0,     0,    55,    56,   279,   103,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    17,     0,    18,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   187,     0,     0,     0,
-       0,     0,    55,    56,    71,   103,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    17,
-       0,    18,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   263,     0,     0,     0,     0,     0,
-      55,    56,    71,   103,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,    69,    70,    17,     0,    18,
-       0,     0,     0,     0,    72,     0,     0,    73,     0,     0,
-      74,     0,    75,     0,     0,     0,     0,     0,     0,     0,
-      71,    55,    56,     0,   103,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    17,     0,
-      18,     0,    72,     0,     0,    73,     0,     0,    74,     0,
-      75,     0,     0,   337,     0,     0,     0,     0,     0,    55,
-      56,    71,   103,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    17,     0,    18,     0,
-      72,     0,     0,    73,     0,   319,    74,     0,    75,     0,
-       0,   384,     0,     0,     0,     0,     0,    55,    56,    71,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    17,     0,    18,     0,     0,     0,
-       0,    72,     0,     0,    73,     0,     0,    74,     0,    75,
-       0,     0,     0,     0,     0,    55,    56,    71,   103,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    17,     0,    18,     0,     0,     0,     0,    72,
-       0,     0,    73,     0,     0,    74,     0,    75,     0,     0,
-       0,     0,     0,    55,    56,    71,   103,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,    69,    70,
-      17,     0,    18,     0,     0,     0,     0,    72,     0,     0,
-      73,     0,     0,    74,     0,    75,     0,     0,     0,     0,
-       0,    55,    56,    71,   193,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    17,     0,
-      18,     0,     0,     0,     0,    72,     0,     0,    73,     0,
-       0,    74,     0,    75,     0,     0,     0,     0,     0,     0,
-       0,    71,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    72,     0,     0,    73,     0,     0,    74,
-       0,    75,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   110,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   111,     0,     0,     0,     0,     0,     0,     0,
-       0,    72,   112,   113,    73,     0,     0,    74,     0,    75,
-       0,     0,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,     0,     0,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148
-};
-
-static const short int yycheck[] =
-{
-      32,   116,    99,   116,   111,   210,    47,   114,    29,    23,
-       3,   117,   453,   259,    34,    47,    30,    75,   250,   251,
-      15,    15,   106,     9,   112,     0,    22,   115,    24,   136,
-     471,   115,   139,   140,    54,    21,   143,   144,   145,   146,
-     147,   148,    58,    36,   110,   152,   103,   279,   154,   115,
-     108,    10,    11,    12,    13,    14,    15,    16,    17,    54,
-      54,    49,    50,    51,    20,    23,    98,   104,    10,    11,
-      12,    13,    14,    15,    16,    17,    58,   114,   103,   111,
-     104,   104,   114,   470,    77,    41,    42,    43,    44,   112,
-     114,    47,   113,   480,    61,    62,    63,    64,    65,    24,
-     114,   104,   134,   135,   136,   137,   138,   139,   140,   112,
-       4,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   180,   229,   369,   182,   183,   184,   104,   104,    32,
-      33,   190,   103,   110,   110,   103,   195,   196,    10,    11,
-      12,    13,    14,    15,    16,    17,    52,    53,   207,    89,
-      90,   110,   103,   212,   186,   108,    27,    28,     3,     4,
-       3,     4,     3,     4,   223,   224,   225,   208,   110,   106,
-       3,     4,     3,     4,     4,     4,   208,     4,   106,     4,
-      24,     0,    24,   109,   106,   109,   227,    56,   393,   296,
-     395,   298,   299,   300,     4,   227,   228,   229,     4,   306,
-       4,     4,     7,     4,   104,     7,    25,     7,   107,   104,
-     268,   104,    31,   104,    36,   104,   313,   314,   315,   316,
-     317,   318,    41,    42,    43,    44,   108,   104,   287,   326,
-     327,   328,   329,    24,   293,    24,   104,   104,   104,   104,
-      59,   104,   104,   104,    60,    24,   106,   106,   307,   308,
-     106,   106,   106,   106,   106,   106,   106,   106,   104,   107,
-      34,   108,    21,   295,   296,   297,   298,   299,   300,   301,
-     302,   264,   104,    21,   306,     4,   104,    24,   104,   376,
-     104,   104,     4,   104,   104,   344,    36,   346,   106,   104,
-     104,   350,   104,   400,   401,   402,   104,   106,    54,     4,
-     359,   360,   361,   335,    24,   104,   104,   104,   104,   104,
-     104,   104,   104,    54,   104,   347,   413,   414,   415,   416,
-     104,   418,   419,   420,   421,   432,   104,   104,   104,   110,
-      21,   390,   391,   365,   107,   104,   108,   107,   453,   398,
-     453,   107,   107,   107,   104,   107,   104,    36,   407,   110,
-     107,    21,   107,   107,   107,   107,   471,    21,   471,   104,
-     392,   195,   196,   460,   107,   462,   463,   104,   400,   401,
-     402,    70,    21,   207,   406,   434,    21,    87,   212,    87,
-     412,    87,    36,    87,    22,   108,   336,    49,    46,   223,
-     224,   225,    20,   180,    22,    25,    24,   335,     3,    16,
-     432,   347,   406,    31,    32,    33,   370,    -1,    -1,   468,
-      -1,     5,     6,    41,    42,    43,    44,    -1,    -1,    47,
-      48,    -1,   481,    -1,    -1,    -1,    -1,    55,    22,   488,
-      24,    59,    26,   492,   493,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    38,    39,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   287,    -1,    -1,    -1,    -1,    -1,   293,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   307,   308,    -1,    -1,    -1,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    -1,    -1,    -1,    -1,    -1,    91,    -1,    93,
-      94,    95,    96,    -1,    98,    99,   100,    -1,    -1,    -1,
-     344,    -1,   346,    -1,   108,    -1,   350,   111,    -1,   113,
-      -1,    -1,   116,    -1,    -1,   359,   360,   361,    -1,     5,
-       6,    -1,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    -1,    24,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   390,   391,    -1,    -1,
-      -1,    -1,    -1,    -1,   398,    -1,    -1,    -1,    -1,    45,
-      -1,     5,     6,   407,     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,
-     434,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       3,     4,     5,     6,     7,    -1,    -1,    -1,    -1,   105,
-      -1,    -1,   108,    -1,   468,   111,    -1,   113,   114,    22,
-      -1,    24,    -1,    26,    27,    28,    -1,   481,    -1,    -1,
-      -1,    -1,    -1,    -1,   488,    38,    39,    -1,   492,   493,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   105,    -1,    -1,   108,    58,    -1,   111,    -1,   113,
-     114,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    -1,    -1,    -1,    -1,    -1,    91,    -1,
-      93,    94,    95,    96,    -1,    98,    99,   100,     3,     4,
-      -1,    -1,     7,    -1,    -1,    -1,    -1,    -1,   111,    -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,    58,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    -1,    -1,    -1,    -1,    -1,    91,    -1,    93,    94,
-      95,    96,    -1,    98,    99,   100,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,     5,     6,   111,     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,     5,     6,    45,     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,
-       5,     6,    45,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    -1,    24,
-      -1,    -1,    -1,    -1,   105,    -1,    -1,   108,    -1,    -1,
-     111,    -1,   113,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      45,     5,     6,    -1,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    -1,
-      24,    -1,   105,    -1,    -1,   108,    -1,    -1,   111,    -1,
-     113,    -1,    -1,    37,    -1,    -1,    -1,    -1,    -1,     5,
-       6,    45,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    -1,    24,    -1,
-     105,    -1,    -1,   108,    -1,   110,   111,    -1,   113,    -1,
-      -1,    37,    -1,    -1,    -1,    -1,    -1,     5,     6,    45,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    -1,    24,    -1,    -1,    -1,
-      -1,   105,    -1,    -1,   108,    -1,    -1,   111,    -1,   113,
-      -1,    -1,    -1,    -1,    -1,     5,     6,    45,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    -1,    24,    -1,    -1,    -1,    -1,   105,
-      -1,    -1,   108,    -1,    -1,   111,    -1,   113,    -1,    -1,
-      -1,    -1,    -1,     5,     6,    45,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    -1,    24,    -1,    -1,    -1,    -1,   105,    -1,    -1,
-     108,    -1,    -1,   111,    -1,   113,    -1,    -1,    -1,    -1,
-      -1,     5,     6,    45,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    -1,
-      24,    -1,    -1,    -1,    -1,   105,    -1,    -1,   108,    -1,
-      -1,   111,    -1,   113,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   105,    -1,    -1,   108,    -1,    -1,   111,
-      -1,   113,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    35,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    46,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   105,    56,    57,   108,    -1,    -1,   111,    -1,   113,
-      -1,    -1,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    -1,    -1,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
-static const unsigned char yystos[] =
-{
-       0,   148,   149,   150,     0,    25,    31,    41,    42,    43,
-      44,    59,   129,   165,   167,   168,   175,    22,    24,    48,
-      55,    59,   128,   158,   168,   169,    58,    61,    62,    63,
-      64,    65,   130,   163,    23,   176,   177,    30,   114,   166,
-     176,    49,    50,    51,   155,   103,    58,    20,    47,   129,
-     103,   163,    24,   153,     4,     5,     6,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    45,   105,   108,   111,   113,   118,   137,   138,   139,
-     140,   141,   158,   172,    29,   113,   164,   128,   180,   103,
-     103,   103,   108,   156,   153,   137,    32,    33,   147,   147,
-       4,     4,     4,     8,   114,   141,   142,   158,   106,   115,
-      35,    46,    56,    57,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   120,
-     121,   122,   123,   178,   184,   185,   187,   188,    24,    52,
-      53,   154,     4,    24,   157,   139,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,   124,   125,   127,
-     139,   144,   109,   109,   104,   114,   106,    37,   142,   143,
-     139,   174,    56,     8,   174,     9,    21,    10,    11,    12,
-      13,    14,    15,    16,    17,   124,   125,   126,   130,   139,
-     139,   174,   139,   139,   181,   174,   174,   174,   174,   174,
-     174,   174,   174,   139,   139,   139,   174,   130,    89,    90,
-     104,   110,   152,    27,    28,     3,     4,   119,     4,     7,
-      26,    38,    39,    91,    93,    94,    98,    99,   100,   108,
-     111,   113,   116,   120,   121,   122,   123,   145,   172,   151,
-     141,   141,   141,    37,   139,   160,   161,   162,   104,   107,
-       3,     4,     7,    26,    27,    28,    38,    39,    58,   111,
-     145,   171,   172,   173,   173,   173,   173,   137,   104,   132,
-     104,   132,   173,   108,   104,    36,   104,   104,   104,   104,
-     104,   104,   104,   173,   173,   173,   104,   137,   139,   174,
-      24,   104,   135,   106,   106,   106,   106,   106,   106,   110,
-     144,   146,   146,   114,   146,    24,   106,   106,   106,   106,
-     135,   110,   112,   158,   159,   104,   107,    37,    60,   170,
-     146,   104,   104,   173,    15,    54,    15,   104,   186,   173,
-     108,   139,   174,   139,   174,   174,   174,   139,   139,   104,
-     104,   104,   174,   173,   173,   104,    34,    54,   133,   136,
-     144,   144,   144,   144,   144,   144,   104,   110,   112,   114,
-     144,   144,   144,   144,    37,   160,   133,   134,    24,   112,
-      21,    21,   106,   173,     4,   173,   174,   182,   104,   173,
-     104,   104,   104,   173,   173,   173,   106,   139,    24,     4,
-     135,   186,    36,   104,   104,   104,   104,   144,   104,   104,
-     104,   104,    54,   131,   104,   173,   173,   182,   183,   104,
-     132,   132,   104,   173,   104,   174,   174,   174,   183,   173,
-     107,   139,   144,   144,   144,   144,   144,   144,   144,   144,
-       4,    24,   104,   108,   107,   174,   110,   173,   107,   107,
-     104,   107,   104,   104,   107,   107,   107,   107,    21,   110,
-     126,   179,    36,   110,   144,   144,   144,   173,   171,   110,
-     126,    21,   107,   107,   107,   104,   171,   173,    21,   104,
-      70,   173,    21,    21,   173,   173
-};
+/* 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;
@@ -2654,721 +2024,719 @@
      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 1028 "/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 1031 "/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 1037 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-  if ((yyvsp[0].UInt64Val) > (uint64_t)INT64_MAX)     // Outside of my range!
+;
+    break;}
+case 4:
+#line 1040 "/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 1061 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.StrVal) = (yyvsp[-1].StrVal);
+;
+    break;}
+case 33:
+#line 1064 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.StrVal = yyvsp[-1].StrVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 35:
-#line 1065 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.StrVal) = 0;
+  ;
+    break;}
+case 34:
+#line 1068 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.StrVal = 0;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 36:
-#line 1070 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
-    break;
-
-  case 37:
-#line 1071 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
-    break;
-
-  case 38:
-#line 1072 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
-    break;
-
-  case 39:
-#line 1073 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
-    break;
-
-  case 40:
-#line 1074 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
-    break;
-
-  case 41:
-#line 1076 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::C; ;}
-    break;
-
-  case 42:
-#line 1077 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::C; ;}
-    break;
-
-  case 43:
-#line 1078 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::CSRet; ;}
-    break;
-
-  case 44:
-#line 1079 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::Fast; ;}
-    break;
-
-  case 45:
-#line 1080 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::Cold; ;}
-    break;
-
-  case 46:
-#line 1081 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-                   if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val))
+  ;
+    break;}
+case 35:
+#line 1073 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::InternalLinkage; ;
+    break;}
+case 36:
+#line 1074 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
+    break;}
+case 37:
+#line 1075 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::WeakLinkage; ;
+    break;}
+case 38:
+#line 1076 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::AppendingLinkage; ;
+    break;}
+case 39:
+#line 1077 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
+    break;}
+case 40:
+#line 1079 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::C; ;
+    break;}
+case 41:
+#line 1080 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::C; ;
+    break;}
+case 42:
+#line 1081 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::CSRet; ;
+    break;}
+case 43:
+#line 1082 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::Fast; ;
+    break;}
+case 44:
+#line 1083 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::Cold; ;
+    break;}
+case 45:
+#line 1084 "/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 47:
-#line 1090 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = 0; ;}
-    break;
-
-  case 48:
-#line 1091 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.UIntVal) = (yyvsp[0].UInt64Val);
-  if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
+                 ;
+    break;}
+case 46:
+#line 1093 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = 0; ;
+    break;}
+case 47:
+#line 1094 "/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 49:
-#line 1097 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = 0; ;}
-    break;
-
-  case 50:
-#line 1098 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.UIntVal) = (yyvsp[0].UInt64Val);
-  if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
+;
+    break;}
+case 48:
+#line 1100 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = 0; ;
+    break;}
+case 49:
+#line 1101 "/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 51:
-#line 1106 "/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 50:
+#line 1109 "/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 52:
-#line 1114 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.StrVal) = 0; ;}
-    break;
-
-  case 53:
-#line 1115 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.StrVal) = (yyvsp[0].StrVal); ;}
-    break;
-
-  case 54:
-#line 1120 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {;}
-    break;
-
-  case 55:
-#line 1121 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {;}
-    break;
-
-  case 56:
-#line 1122 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    CurGV->setSection((yyvsp[0].StrVal));
-    free((yyvsp[0].StrVal));
+;
+    break;}
+case 51:
+#line 1117 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.StrVal = 0; ;
+    break;}
+case 52:
+#line 1118 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.StrVal = yyvsp[0].StrVal; ;
+    break;}
+case 53:
+#line 1123 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{;
+    break;}
+case 54:
+#line 1124 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{;
+    break;}
+case 55:
+#line 1125 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    CurGV->setSection(yyvsp[0].StrVal);
+    free(yyvsp[0].StrVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 57:
-#line 1127 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val)))
+  ;
+    break;}
+case 56:
+#line 1130 "/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 59:
-#line 1141 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType)); ;}
-    break;
-
-  case 61:
-#line 1142 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType)); ;}
-    break;
-
-  case 62:
-#line 1144 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 58:
+#line 1144 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.TypeVal = new PATypeHolder(yyvsp[0].PrimType); ;
+    break;}
+case 60:
+#line 1145 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.TypeVal = new PATypeHolder(yyvsp[0].PrimType); ;
+    break;}
+case 61:
+#line 1147 "/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 76:
-#line 1156 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
+  ;
+    break;}
+case 75:
+#line 1159 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeVal = new PATypeHolder(OpaqueType::get());
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 77:
-#line 1160 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType));
+  ;
+    break;}
+case 76:
+#line 1163 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeVal = new PATypeHolder(yyvsp[0].PrimType);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 78:
-#line 1164 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {            // Named types are also simple types...
-  (yyval.TypeVal) = new PATypeHolder(getTypeVal((yyvsp[0].ValIDVal)));
+  ;
+    break;}
+case 77:
+#line 1167 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{            // Named types are also simple types...
+  yyval.TypeVal = new PATypeHolder(getTypeVal(yyvsp[0].ValIDVal));
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 79:
-#line 1171 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {                   // Type UpReference
-    if ((yyvsp[0].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range!");
+;
+    break;}
+case 78:
+#line 1174 "/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 80:
-#line 1179 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {           // Function derived type?
+  ;
+    break;}
+case 79:
+#line 1182 "/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 81:
-#line 1192 "/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 80:
+#line 1195 "/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 82:
-#line 1197 "/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 81:
+#line 1200 "/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 83:
-#line 1209 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {                        // Structure type?
+  ;
+    break;}
+case 82:
+#line 1212 "/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 84:
-#line 1219 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {                                  // Empty structure type?
-    (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>()));
+  ;
+    break;}
+case 83:
+#line 1222 "/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 85:
-#line 1223 "/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 84:
+#line 1226 "/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 86:
-#line 1232 "/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 85:
+#line 1235 "/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 87:
-#line 1237 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
+  ;
+    break;}
+case 86:
+#line 1240 "/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 89:
-#line 1244 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(Type::VoidTy);
+  ;
+    break;}
+case 88:
+#line 1247 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    (yyval.TypeList=yyvsp[-2].TypeList)->push_back(Type::VoidTy);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 90:
-#line 1248 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    ((yyval.TypeList) = new std::list<PATypeHolder>())->push_back(Type::VoidTy);
+  ;
+    break;}
+case 89:
+#line 1251 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    (yyval.TypeList = new std::list<PATypeHolder>())->push_back(Type::VoidTy);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 91:
-#line 1252 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeList) = new std::list<PATypeHolder>();
+  ;
+    break;}
+case 90:
+#line 1255 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeList = new std::list<PATypeHolder>();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 92:
-#line 1263 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { // Nonempty unsized arr
-    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-3].TypeVal)->get());
+  ;
+    break;}
+case 91:
+#line 1266 "/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 93:
-#line 1289 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
+  ;
+    break;}
+case 92:
+#line 1292 "/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 94:
-#line 1303 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
+  ;
+    break;}
+case 93:
+#line 1306 "/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 95:
-#line 1333 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { // Nonempty unsized arr
-    const PackedType *PTy = dyn_cast<PackedType>((yyvsp[-3].TypeVal)->get());
+  ;
+    break;}
+case 94:
+#line 1336 "/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 96:
-#line 1359 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal)->get());
+  ;
+    break;}
+case 95:
+#line 1362 "/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 97:
-#line 1380 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    const StructType *STy = dyn_cast<StructType>((yyvsp[-2].TypeVal)->get());
+  ;
+    break;}
+case 96:
+#line 1383 "/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 98:
-#line 1393 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
+  ;
+    break;}
+case 97:
+#line 1396 "/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 99:
-#line 1403 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ConstVal) = UndefValue::get((yyvsp[-1].TypeVal)->get());
-    delete (yyvsp[-1].TypeVal);
+  ;
+    break;}
+case 98:
+#line 1406 "/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 100:
-#line 1408 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    const PointerType *Ty = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
+  ;
+    break;}
+case 99:
+#line 1411 "/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!");
 
@@ -3382,7 +2750,7 @@
     Function *SavedCurFn = CurFun.CurrentFunction;
     CurFun.CurrentFunction = 0;
 
-    Value *V = getValNonImprovising(Ty, (yyvsp[0].ValIDVal));
+    Value *V = getValNonImprovising(Ty, yyvsp[0].ValIDVal);
 
     CurFun.CurrentFunction = SavedCurFn;
 
@@ -3396,14 +2764,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;
@@ -3418,160 +2786,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 101:
-#line 1468 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-1].TypeVal)->get() != (yyvsp[0].ConstVal)->getType())
+  ;
+    break;}
+case 100:
+#line 1471 "/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 102:
-#line 1475 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    const Type *Ty = (yyvsp[-1].TypeVal)->get();
+  ;
+    break;}
+case 101:
+#line 1478 "/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 103:
-#line 1484 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {      // integral constants
-    if (!ConstantSInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val)))
+  ;
+    break;}
+case 102:
+#line 1487 "/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 104:
-#line 1490 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {            // integral constants
-    if (!ConstantUInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val)))
+  ;
+    break;}
+case 103:
+#line 1493 "/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 105:
-#line 1496 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {                      // Boolean constants
-    (yyval.ConstVal) = ConstantBool::True;
+  ;
+    break;}
+case 104:
+#line 1499 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                      // Boolean constants
+    yyval.ConstVal = ConstantBool::True;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 106:
-#line 1500 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {                     // Boolean constants
-    (yyval.ConstVal) = ConstantBool::False;
+  ;
+    break;}
+case 105:
+#line 1503 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                     // Boolean constants
+    yyval.ConstVal = ConstantBool::False;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 107:
-#line 1504 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {                   // Float & Double constants
-    if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].FPVal)))
+  ;
+    break;}
+case 106:
+#line 1507 "/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 108:
-#line 1512 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!(yyvsp[-3].ConstVal)->getType()->isFirstClassType())
+  ;
+    break;}
+case 107:
+#line 1515 "/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 109:
-#line 1523 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!isa<PointerType>((yyvsp[-2].ConstVal)->getType()))
+  ;
+    break;}
+case 108:
+#line 1526 "/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 110:
-#line 1555 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-5].ConstVal)->getType() != Type::BoolTy)
+  ;
+    break;}
+case 109:
+#line 1558 "/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 111:
-#line 1563 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
+  ;
+    break;}
+case 110:
+#line 1566 "/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()) {
@@ -3579,154 +2936,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 112:
-#line 1585 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
+  ;
+    break;}
+case 111:
+#line 1588 "/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 113:
-#line 1596 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
+  ;
+    break;}
+case 112:
+#line 1599 "/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 114:
-#line 1602 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-1].ConstVal)->getType() != Type::UByteTy)
+  ;
+    break;}
+case 113:
+#line 1605 "/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 115:
-#line 1610 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
+  ;
+    break;}
+case 114:
+#line 1613 "/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 116:
-#line 1616 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
+  ;
+    break;}
+case 115:
+#line 1619 "/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 117:
-#line 1622 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
+  ;
+    break;}
+case 116:
+#line 1625 "/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 118:
-#line 1631 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal));
+  ;
+    break;}
+case 117:
+#line 1634 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    (yyval.ConstVector = yyvsp[-2].ConstVector)->push_back(yyvsp[0].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 119:
-#line 1635 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ConstVector) = new std::vector<Constant*>();
-    (yyval.ConstVector)->push_back((yyvsp[0].ConstVal));
+  ;
+    break;}
+case 118:
+#line 1638 "/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 120:
-#line 1643 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.BoolVal) = false; ;}
-    break;
-
-  case 121:
-#line 1643 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.BoolVal) = true; ;}
-    break;
-
-  case 122:
-#line 1653 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.ModuleVal) = ParserResult = (yyvsp[0].ModuleVal);
+  ;
+    break;}
+case 119:
+#line 1646 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.BoolVal = false; ;
+    break;}
+case 120:
+#line 1646 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.BoolVal = true; ;
+    break;}
+case 121:
+#line 1656 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+  yyval.ModuleVal = ParserResult = yyvsp[0].ModuleVal;
   CurModule.ModuleDone();
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 123:
-#line 1661 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
+;
+    break;}
+case 122:
+#line 1664 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ModuleVal = yyvsp[-1].ModuleVal;
     CurFun.FunctionDone();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 124:
-#line 1666 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
+  ;
+    break;}
+case 123:
+#line 1669 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ModuleVal = yyvsp[-1].ModuleVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 125:
-#line 1670 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ModuleVal) = (yyvsp[-3].ModuleVal);
+  ;
+    break;}
+case 124:
+#line 1673 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ModuleVal = yyvsp[-3].ModuleVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 126:
-#line 1674 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
+  ;
+    break;}
+case 125:
+#line 1677 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ModuleVal = yyvsp[-1].ModuleVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 127:
-#line 1678 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ModuleVal) = CurModule.CurrentModule;
+  ;
+    break;}
+case 126:
+#line 1681 "/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;
@@ -3737,12 +3078,11 @@
       }
     }
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 128:
-#line 1693 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 127:
+#line 1696 "/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:
     //
@@ -3752,260 +3092,233 @@
     // 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) {
       // 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 129:
-#line 1714 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {       // Function prototypes can be in const pool
+  ;
+    break;}
+case 128:
+#line 1717 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{       // Function prototypes can be in const pool
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 130:
-#line 1717 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {  // Asm blocks can be in the const pool
+  ;
+    break;}
+case 129:
+#line 1720 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{  // Asm blocks can be in the const pool
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 131:
-#line 1720 "/proj/llvm/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));
-                                                       ;}
-    break;
-
-  case 132:
-#line 1723 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 130:
+#line 1723 "/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);
+                                                       ;
+    break;}
+case 131:
+#line 1726 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CurGV = 0;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 133:
-#line 1727 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalLinkage,
-                                             (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
-    delete (yyvsp[0].TypeVal);
-                                                   ;}
-    break;
-
-  case 134:
-#line 1731 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 132:
+#line 1730 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    CurGV = ParseGlobalVariable(yyvsp[-3].StrVal, GlobalValue::ExternalLinkage,
+                                             yyvsp[-1].BoolVal, *yyvsp[0].TypeVal, 0);
+    delete yyvsp[0].TypeVal;
+                                                   ;
+    break;}
+case 133:
+#line 1734 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CurGV = 0;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 135:
-#line 1735 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { 
+  ;
+    break;}
+case 134:
+#line 1738 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ 
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 136:
-#line 1738 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 135:
+#line 1741 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 137:
-#line 1741 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { 
-  ;}
-    break;
-
-  case 138:
-#line 1745 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 136:
+#line 1744 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ 
+  ;
+    break;}
+case 137:
+#line 1748 "/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 139:
-#line 1758 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Endianness) = Module::BigEndian; ;}
-    break;
-
-  case 140:
-#line 1759 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Endianness) = Module::LittleEndian; ;}
-    break;
-
-  case 141:
-#line 1761 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    CurModule.CurrentModule->setEndianness((yyvsp[0].Endianness));
+;
+    break;}
+case 138:
+#line 1761 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Endianness = Module::BigEndian; ;
+    break;}
+case 139:
+#line 1762 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Endianness = Module::LittleEndian; ;
+    break;}
+case 140:
+#line 1764 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    CurModule.CurrentModule->setEndianness(yyvsp[0].Endianness);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 142:
-#line 1765 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[0].UInt64Val) == 32)
+  ;
+    break;}
+case 141:
+#line 1768 "/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 143:
-#line 1774 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal));
-    free((yyvsp[0].StrVal));
+  ;
+    break;}
+case 142:
+#line 1777 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    CurModule.CurrentModule->setTargetTriple(yyvsp[0].StrVal);
+    free(yyvsp[0].StrVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 145:
-#line 1782 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-          CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
-          free((yyvsp[0].StrVal));
+  ;
+    break;}
+case 144:
+#line 1785 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+          CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
+          free(yyvsp[0].StrVal);
           CHECK_FOR_ERROR
-        ;}
-    break;
-
-  case 146:
-#line 1787 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-          CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
-          free((yyvsp[0].StrVal));
+        ;
+    break;}
+case 145:
+#line 1790 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+          CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
+          free(yyvsp[0].StrVal);
           CHECK_FOR_ERROR
-        ;}
-    break;
-
-  case 147:
-#line 1792 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+        ;
+    break;}
+case 146:
+#line 1795 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
           CHECK_FOR_ERROR
-        ;}
-    break;
-
-  case 151:
-#line 1802 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.StrVal) = 0; ;}
-    break;
-
-  case 152:
-#line 1804 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-  if (*(yyvsp[-1].TypeVal) == Type::VoidTy)
+        ;
+    break;}
+case 150:
+#line 1805 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.StrVal = 0; ;
+    break;}
+case 151:
+#line 1807 "/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 153:
-#line 1811 "/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 152:
+#line 1814 "/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 154:
-#line 1817 "/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 153:
+#line 1820 "/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 155:
-#line 1824 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ArgList) = (yyvsp[0].ArgList);
+  ;
+    break;}
+case 154:
+#line 1827 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ArgList = yyvsp[0].ArgList;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 156:
-#line 1828 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ArgList) = (yyvsp[-2].ArgList);
-    (yyval.ArgList)->push_back(std::pair<PATypeHolder*,
+  ;
+    break;}
+case 155:
+#line 1831 "/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 157:
-#line 1834 "/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 156:
+#line 1837 "/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 158:
-#line 1839 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ArgList) = 0;
+  ;
+    break;}
+case 157:
+#line 1842 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ArgList = 0;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 159:
-#line 1845 "/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 158:
+#line 1848 "/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()) {
@@ -4042,154 +3355,139 @@
   }
 
   CurFun.FunctionStart(Fn);
-  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...
       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 162:
-#line 1933 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.FunctionVal) = CurFun.CurrentFunction;
+;
+    break;}
+case 161:
+#line 1936 "/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 165:
-#line 1943 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
+  yyval.FunctionVal->setLinkage(yyvsp[-2].Linkage);
+;
+    break;}
+case 164:
+#line 1946 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+  yyval.FunctionVal = yyvsp[-1].FunctionVal;
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 166:
-#line 1948 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { CurFun.isDeclare = true; ;}
-    break;
-
-  case 167:
-#line 1948 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.FunctionVal) = CurFun.CurrentFunction;
+;
+    break;}
+case 165:
+#line 1951 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ CurFun.isDeclare = true; ;
+    break;}
+case 166:
+#line 1951 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+  yyval.FunctionVal = CurFun.CurrentFunction;
   CurFun.FunctionDone();
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 168:
-#line 1958 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = false;
+;
+    break;}
+case 167:
+#line 1961 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = false;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 169:
-#line 1962 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = true;
+  ;
+    break;}
+case 168:
+#line 1965 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = true;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 170:
-#line 1967 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {    // A reference to a direct constant
-    (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val));
+  ;
+    break;}
+case 169:
+#line 1970 "/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 171:
-#line 1971 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val));
+  ;
+    break;}
+case 170:
+#line 1974 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::create(yyvsp[0].UInt64Val);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 172:
-#line 1975 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {                     // Perhaps it's an FP constant?
-    (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal));
+  ;
+    break;}
+case 171:
+#line 1978 "/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 173:
-#line 1979 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::create(ConstantBool::True);
+  ;
+    break;}
+case 172:
+#line 1982 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::create(ConstantBool::True);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 174:
-#line 1983 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::create(ConstantBool::False);
+  ;
+    break;}
+case 173:
+#line 1986 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::create(ConstantBool::False);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 175:
-#line 1987 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::createNull();
+  ;
+    break;}
+case 174:
+#line 1990 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::createNull();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 176:
-#line 1991 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::createUndef();
+  ;
+    break;}
+case 175:
+#line 1994 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::createUndef();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 177:
-#line 1995 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {     // A vector zero constant.
-    (yyval.ValIDVal) = ValID::createZeroInit();
+  ;
+    break;}
+case 176:
+#line 1998 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{     // A vector zero constant.
+    yyval.ValIDVal = ValID::createZeroInit();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 178:
-#line 1999 "/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 177:
+#line 2002 "/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(
@@ -4201,205 +3499,187 @@
                                          );
     
     // 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 179:
-#line 2024 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal));
+  ;
+    break;}
+case 178:
+#line 2027 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::create(yyvsp[0].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 180:
-#line 2028 "/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 179:
+#line 2031 "/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 181:
-#line 2042 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {  // Is it an integer reference...?
-    (yyval.ValIDVal) = ValID::create((yyvsp[0].SIntVal));
+  ;
+    break;}
+case 180:
+#line 2045 "/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 182:
-#line 2046 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {                   // Is it a named reference...?
-    (yyval.ValIDVal) = ValID::create((yyvsp[0].StrVal));
+  ;
+    break;}
+case 181:
+#line 2049 "/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 185:
-#line 2058 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValueVal) = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal)); delete (yyvsp[-1].TypeVal);
+  ;
+    break;}
+case 184:
+#line 2061 "/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 186:
-#line 2063 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
+  ;
+    break;}
+case 185:
+#line 2066 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.FunctionVal = yyvsp[-1].FunctionVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 187:
-#line 2067 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { // Do not allow functions with 0 basic blocks   
-    (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
+  ;
+    break;}
+case 186:
+#line 2070 "/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;
+  ;
+    break;}
+case 187:
+#line 2079 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    setValueName(yyvsp[0].TermInstVal, yyvsp[-1].StrVal);
+    InsertValue(yyvsp[0].TermInstVal);
 
-  case 188:
-#line 2076 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    setValueName((yyvsp[0].TermInstVal), (yyvsp[-1].StrVal));
-    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 189:
-#line 2086 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyvsp[-1].BasicBlockVal)->getInstList().push_back((yyvsp[0].InstVal));
-    (yyval.BasicBlockVal) = (yyvsp[-1].BasicBlockVal);
+  ;
+    break;}
+case 188:
+#line 2089 "/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 190:
-#line 2091 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((int)CurFun.NextBBNum++), true);
+  ;
+    break;}
+case 189:
+#line 2094 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BasicBlockVal = CurBB = getBBVal(ValID::create((int)CurFun.NextBBNum++), true);
 
     // Make sure to move the basic block to the correct location in the
     // function, instead of leaving it inserted wherever it was first
     // 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 191:
-#line 2102 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((yyvsp[0].StrVal)), true);
+  ;
+    break;}
+case 190:
+#line 2105 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BasicBlockVal = CurBB = getBBVal(ValID::create(yyvsp[0].StrVal), true);
 
     // Make sure to move the basic block to the correct location in the
     // function, instead of leaving it inserted wherever it was first
     // 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 192:
-#line 2114 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {              // Return with a result...
-    (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal));
+  ;
+    break;}
+case 191:
+#line 2117 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{              // Return with a result...
+    yyval.TermInstVal = new ReturnInst(yyvsp[0].ValueVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 193:
-#line 2118 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {                                       // Return with no result...
-    (yyval.TermInstVal) = new ReturnInst();
+  ;
+    break;}
+case 192:
+#line 2121 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                                       // Return with no result...
+    yyval.TermInstVal = new ReturnInst();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 194:
-#line 2122 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {                         // Unconditional Branch...
-    (yyval.TermInstVal) = new BranchInst(getBBVal((yyvsp[0].ValIDVal)));
+  ;
+    break;}
+case 193:
+#line 2125 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                         // Unconditional Branch...
+    yyval.TermInstVal = new BranchInst(getBBVal(yyvsp[0].ValIDVal));
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 195:
-#line 2126 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {  
-    (yyval.TermInstVal) = new BranchInst(getBBVal((yyvsp[-3].ValIDVal)), getBBVal((yyvsp[0].ValIDVal)), getVal(Type::BoolTy, (yyvsp[-6].ValIDVal)));
+  ;
+    break;}
+case 194:
+#line 2129 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{  
+    yyval.TermInstVal = new BranchInst(getBBVal(yyvsp[-3].ValIDVal), getBBVal(yyvsp[0].ValIDVal), getVal(Type::BoolTy, yyvsp[-6].ValIDVal));
     CHECK_FOR_ERROR
-  ;}
-    break;
+  ;
+    break;}
+case 195:
+#line 2133 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    SwitchInst *S = new SwitchInst(getVal(yyvsp[-7].PrimType, yyvsp[-6].ValIDVal), getBBVal(yyvsp[-3].ValIDVal), yyvsp[-1].JumpTable->size());
+    yyval.TermInstVal = S;
 
-  case 196:
-#line 2130 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    SwitchInst *S = new SwitchInst(getVal((yyvsp[-7].PrimType), (yyvsp[-6].ValIDVal)), getBBVal((yyvsp[-3].ValIDVal)), (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 197:
-#line 2145 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    SwitchInst *S = new SwitchInst(getVal((yyvsp[-6].PrimType), (yyvsp[-5].ValIDVal)), getBBVal((yyvsp[-2].ValIDVal)), 0);
-    (yyval.TermInstVal) = S;
+  ;
+    break;}
+case 196:
+#line 2148 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    SwitchInst *S = new SwitchInst(getVal(yyvsp[-6].PrimType, yyvsp[-5].ValIDVal), getBBVal(yyvsp[-2].ValIDVal), 0);
+    yyval.TermInstVal = S;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 198:
-#line 2151 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 197:
+#line 2154 "/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());
       }
@@ -4407,25 +3687,25 @@
       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...
 
-    BasicBlock *Normal = getBBVal((yyvsp[-3].ValIDVal));
-    BasicBlock *Except = getBBVal((yyvsp[0].ValIDVal));
+    BasicBlock *Normal = getBBVal(yyvsp[-3].ValIDVal);
+    BasicBlock *Except = getBBVal(yyvsp[0].ValIDVal);
 
     // 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)
@@ -4435,245 +3715,224 @@
       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 199:
-#line 2204 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TermInstVal) = new UnwindInst();
+  ;
+    break;}
+case 198:
+#line 2207 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TermInstVal = new UnwindInst();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 200:
-#line 2208 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TermInstVal) = new UnreachableInst();
+  ;
+    break;}
+case 199:
+#line 2211 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TermInstVal = new UnreachableInst();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 201:
-#line 2215 "/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 200:
+#line 2218 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.JumpTable = yyvsp[-5].JumpTable;
+    Constant *V = cast<Constant>(getValNonImprovising(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal));
     if (V == 0)
       GEN_ERROR("May only switch on a constant pool value!");
 
-    (yyval.JumpTable)->push_back(std::make_pair(V, getBBVal((yyvsp[0].ValIDVal))));
+    yyval.JumpTable->push_back(std::make_pair(V, getBBVal(yyvsp[0].ValIDVal)));
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 202:
-#line 2224 "/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)));
+  ;
+    break;}
+case 201:
+#line 2227 "/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));
 
     if (V == 0)
       GEN_ERROR("May only switch on a constant pool value!");
 
-    (yyval.JumpTable)->push_back(std::make_pair(V, getBBVal((yyvsp[0].ValIDVal))));
+    yyval.JumpTable->push_back(std::make_pair(V, getBBVal(yyvsp[0].ValIDVal)));
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 203:
-#line 2235 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 202:
+#line 2238 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
   // Is this definition named?? if so, assign the name...
-  setValueName((yyvsp[0].InstVal), (yyvsp[-1].StrVal));
-  InsertValue((yyvsp[0].InstVal));
-  (yyval.InstVal) = (yyvsp[0].InstVal);
+  setValueName(yyvsp[0].InstVal, yyvsp[-1].StrVal);
+  InsertValue(yyvsp[0].InstVal);
+  yyval.InstVal = yyvsp[0].InstVal;
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 204:
-#line 2243 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {    // Used for PHI nodes
-    (yyval.PHIList) = new std::list<std::pair<Value*, BasicBlock*> >();
-    (yyval.PHIList)->push_back(std::make_pair(getVal(*(yyvsp[-5].TypeVal), (yyvsp[-3].ValIDVal)), getBBVal((yyvsp[-1].ValIDVal))));
-    delete (yyvsp[-5].TypeVal);
+;
+    break;}
+case 203:
+#line 2246 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{    // Used for PHI nodes
+    yyval.PHIList = new std::list<std::pair<Value*, BasicBlock*> >();
+    yyval.PHIList->push_back(std::make_pair(getVal(*yyvsp[-5].TypeVal, yyvsp[-3].ValIDVal), getBBVal(yyvsp[-1].ValIDVal)));
+    delete yyvsp[-5].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 205:
-#line 2249 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.PHIList) = (yyvsp[-6].PHIList);
-    (yyvsp[-6].PHIList)->push_back(std::make_pair(getVal((yyvsp[-6].PHIList)->front().first->getType(), (yyvsp[-3].ValIDVal)),
-                                 getBBVal((yyvsp[-1].ValIDVal))));
+  ;
+    break;}
+case 204:
+#line 2252 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.PHIList = yyvsp[-6].PHIList;
+    yyvsp[-6].PHIList->push_back(std::make_pair(getVal(yyvsp[-6].PHIList->front().first->getType(), yyvsp[-3].ValIDVal),
+                                 getBBVal(yyvsp[-1].ValIDVal)));
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 206:
-#line 2257 "/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 205:
+#line 2260 "/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);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 207:
-#line 2262 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValueList) = (yyvsp[-2].ValueList);
-    (yyvsp[-2].ValueList)->push_back((yyvsp[0].ValueVal));
+  ;
+    break;}
+case 206:
+#line 2265 "/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 209:
-#line 2269 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ValueList) = 0; ;}
-    break;
-
-  case 210:
-#line 2271 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = true;
+  ;
+    break;}
+case 208:
+#line 2272 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ValueList = 0; ;
+    break;}
+case 209:
+#line 2274 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = true;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 211:
-#line 2275 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = false;
+  ;
+    break;}
+case 210:
+#line 2278 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = false;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 212:
-#line 2282 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!(*(yyvsp[-3].TypeVal))->isInteger() && !(*(yyvsp[-3].TypeVal))->isFloatingPoint() && 
-        !isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
+  ;
+    break;}
+case 211:
+#line 2285 "/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!");
-    (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal)), getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal)));
-    if ((yyval.InstVal) == 0)
+    yyval.InstVal = BinaryOperator::create(yyvsp[-4].BinaryOpVal, getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal), getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal));
+    if (yyval.InstVal == 0)
       GEN_ERROR("binary operator returned null!");
-    delete (yyvsp[-3].TypeVal);
+    delete yyvsp[-3].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 213:
-#line 2295 "/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())
+  ;
+    break;}
+case 212:
+#line 2298 "/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!");
     }
-    (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal)), getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal)));
-    if ((yyval.InstVal) == 0)
+    yyval.InstVal = BinaryOperator::create(yyvsp[-4].BinaryOpVal, getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal), getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal));
+    if (yyval.InstVal == 0)
       GEN_ERROR("binary operator returned null!");
-    delete (yyvsp[-3].TypeVal);
+    delete yyvsp[-3].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 214:
-#line 2307 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if(isa<PackedType>((*(yyvsp[-3].TypeVal)).get())) {
+  ;
+    break;}
+case 213:
+#line 2310 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if(isa<PackedType>((*yyvsp[-3].TypeVal).get())) {
       GEN_ERROR(
         "PackedTypes currently not supported in setcc instructions!");
     }
-    (yyval.InstVal) = new SetCondInst((yyvsp[-4].BinaryOpVal), getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal)), getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal)));
-    if ((yyval.InstVal) == 0)
+    yyval.InstVal = new SetCondInst(yyvsp[-4].BinaryOpVal, getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal), getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal));
+    if (yyval.InstVal == 0)
       GEN_ERROR("binary operator returned null!");
-    delete (yyvsp[-3].TypeVal);
+    delete yyvsp[-3].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 215:
-#line 2318 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 214:
+#line 2321 "/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 216:
-#line 2331 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[0].ValueVal)->getType() != Type::UByteTy)
+  ;
+    break;}
+case 215:
+#line 2334 "/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 217:
-#line 2339 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!(yyvsp[0].TypeVal)->get()->isFirstClassType())
+  ;
+    break;}
+case 216:
+#line 2342 "/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 218:
-#line 2347 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-4].ValueVal)->getType() != Type::BoolTy)
+  ;
+    break;}
+case 217:
+#line 2350 "/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 219:
-#line 2355 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 218:
+#line 2358 "/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 220:
-#line 2361 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 219:
+#line 2364 "/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);
 
@@ -4684,20 +3943,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 221:
-#line 2381 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 220:
+#line 2384 "/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);
 
@@ -4709,78 +3967,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 222:
-#line 2404 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
+  ;
+    break;}
+case 221:
+#line 2407 "/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 223:
-#line 2410 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
+  ;
+    break;}
+case 222:
+#line 2413 "/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 224:
-#line 2416 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
+  ;
+    break;}
+case 223:
+#line 2419 "/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 225:
-#line 2422 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    const Type *Ty = (yyvsp[0].PHIList)->front().first->getType();
+  ;
+    break;}
+case 224:
+#line 2425 "/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 226:
-#line 2437 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 225:
+#line 2440 "/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());
       }
@@ -4788,30 +4041,30 @@
       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...
 
     // 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)
@@ -4821,436 +4074,371 @@
       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 227:
-#line 2495 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.InstVal) = (yyvsp[0].InstVal);
+  ;
+    break;}
+case 226:
+#line 2498 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.InstVal = yyvsp[0].InstVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 228:
-#line 2502 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { 
-    (yyval.ValueList) = (yyvsp[0].ValueList); 
+  ;
+    break;}
+case 227:
+#line 2505 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ 
+    yyval.ValueList = yyvsp[0].ValueList; 
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 229:
-#line 2505 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    { 
-    (yyval.ValueList) = new std::vector<Value*>(); 
+  ;
+    break;}
+case 228:
+#line 2508 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ 
+    yyval.ValueList = new std::vector<Value*>(); 
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 230:
-#line 2510 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = true;
+  ;
+    break;}
+case 229:
+#line 2513 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = true;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 231:
-#line 2514 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = false;
+  ;
+    break;}
+case 230:
+#line 2517 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = false;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 232:
-#line 2521 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.InstVal) = new MallocInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
-    delete (yyvsp[-1].TypeVal);
+  ;
+    break;}
+case 231:
+#line 2524 "/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 233:
-#line 2526 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.InstVal) = new MallocInst(*(yyvsp[-4].TypeVal), getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal)), (yyvsp[0].UIntVal));
-    delete (yyvsp[-4].TypeVal);
+  ;
+    break;}
+case 232:
+#line 2529 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.InstVal = new MallocInst(*yyvsp[-4].TypeVal, getVal(yyvsp[-2].PrimType, yyvsp[-1].ValIDVal), yyvsp[0].UIntVal);
+    delete yyvsp[-4].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 234:
-#line 2531 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.InstVal) = new AllocaInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
-    delete (yyvsp[-1].TypeVal);
+  ;
+    break;}
+case 233:
+#line 2534 "/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 235:
-#line 2536 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.InstVal) = new AllocaInst(*(yyvsp[-4].TypeVal), getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal)), (yyvsp[0].UIntVal));
-    delete (yyvsp[-4].TypeVal);
+  ;
+    break;}
+case 234:
+#line 2539 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.InstVal = new AllocaInst(*yyvsp[-4].TypeVal, getVal(yyvsp[-2].PrimType, yyvsp[-1].ValIDVal), yyvsp[0].UIntVal);
+    delete yyvsp[-4].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 236:
-#line 2541 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!isa<PointerType>((yyvsp[0].ValueVal)->getType()))
+  ;
+    break;}
+case 235:
+#line 2544 "/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 237:
-#line 2549 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!isa<PointerType>((yyvsp[-1].TypeVal)->get()))
+  ;
+    break;}
+case 236:
+#line 2552 "/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());
-    (yyval.InstVal) = new LoadInst(getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal)), "", (yyvsp[-3].BoolVal));
-    delete (yyvsp[-1].TypeVal);
+                     (*yyvsp[-1].TypeVal)->getDescription());
+    yyval.InstVal = new LoadInst(getVal(*yyvsp[-1].TypeVal, yyvsp[0].ValIDVal), "", yyvsp[-3].BoolVal);
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 238:
-#line 2560 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    const PointerType *PT = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
+  ;
+    break;}
+case 237:
+#line 2563 "/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() + "'!");
 
-    (yyval.InstVal) = new StoreInst((yyvsp[-3].ValueVal), getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal)), (yyvsp[-5].BoolVal));
-    delete (yyvsp[-1].TypeVal);
+    yyval.InstVal = new StoreInst(yyvsp[-3].ValueVal, getVal(*yyvsp[-1].TypeVal, yyvsp[0].ValIDVal), yyvsp[-5].BoolVal);
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 239:
-#line 2574 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!isa<PointerType>((yyvsp[-2].TypeVal)->get()))
+  ;
+    break;}
+case 238:
+#line 2577 "/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()+ "'!");
-    (yyval.InstVal) = new GetElementPtrInst(getVal(*(yyvsp[-2].TypeVal), (yyvsp[-1].ValIDVal)), *(yyvsp[0].ValueList));
-    delete (yyvsp[-2].TypeVal); delete (yyvsp[0].ValueList);
+                     (*yyvsp[-2].TypeVal)->getDescription()+ "'!");
+    yyval.InstVal = new GetElementPtrInst(getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal), *yyvsp[0].ValueList);
+    delete yyvsp[-2].TypeVal; delete yyvsp[0].ValueList;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-
-      default: break;
-    }
-
-/* Line 1126 of yacc.c.  */
-#line 4986 "llvmAsmParser.tab.c"
+  ;
+    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 2598 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2601 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 
 
 void llvm::GenerateError(const std::string &message, int LineNo) {
@@ -5273,4 +4461,3 @@
   GenerateError(errMsg);
   return 0;
 }
-
