diff --git a/llvm/lib/AsmParser/llvmAsmParser.cpp.cvs b/llvm/lib/AsmParser/llvmAsmParser.cpp.cvs
index 87f9c5f..1317080 100644
--- a/llvm/lib/AsmParser/llvmAsmParser.cpp.cvs
+++ b/llvm/lib/AsmParser/llvmAsmParser.cpp.cvs
@@ -1,118 +1,278 @@
+/* A Bison parser, made by GNU Bison 2.1.  */
 
-/*  A Bison parser, made from /Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y
-    by GNU Bison version 1.28  */
+/* Skeleton parser for Yacc-like parsing with Bison,
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 
-#define YYBISON 1  /* Identify Bison output.  */
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
 
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, 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
 
-#line 14 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+
+/* 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"
 
 #include "ParserInternals.h"
 #include "llvm/CallingConv.h"
@@ -129,6 +289,11 @@
 #include <list>
 #include <utility>
 
+static bool TriggerError = false;
+#define CHECK_FOR_ERROR { if (TriggerError) { TriggerError = false; YYERROR; } }
+
+#define GEN_ERROR(msg) { GenerateError(msg); YYERROR; }
+
 int yyerror(const char *ErrorMsg); // Forward declarations to prevent "implicit
 int yylex();                       // declaration" of xxx warnings.
 int yyparse();
@@ -205,7 +370,7 @@
         UndefinedReferences += "  " + I->first.first->getDescription() + " " +
                                I->first.second.getName() + "\n";
       }
-      ThrowException(UndefinedReferences);
+      GenerateError(UndefinedReferences);
     }
 
     // Look for intrinsic functions and CallInst that need to be upgraded
@@ -262,7 +427,7 @@
 
     // Any forward referenced blocks left?
     if (!BBForwardRefs.empty())
-      ThrowException("Undefined reference to label " +
+      GenerateError("Undefined reference to label " +
                      BBForwardRefs.begin()->first->getName());
 
     // Resolve all forward references now.
@@ -305,7 +470,7 @@
     }
     break;
   default:
-    ThrowException("Internal parser error: Invalid symbol type reference!");
+    GenerateError("Internal parser error: Invalid symbol type reference!");
   }
 
   // If we reached here, we referenced either a symbol that we don't know about
@@ -317,9 +482,9 @@
 
   if (inFunctionScope()) {
     if (D.Type == ValID::NameVal)
-      ThrowException("Reference to an undefined type: '" + D.getName() + "'");
+      GenerateError("Reference to an undefined type: '" + D.getName() + "'");
     else
-      ThrowException("Reference to an undefined type: #" + itostr(D.Num));
+      GenerateError("Reference to an undefined type: #" + itostr(D.Num));
   }
 
   std::map<ValID, PATypeHolder>::iterator I =CurModule.LateResolveTypes.find(D);
@@ -344,7 +509,7 @@
 //
 static Value *getValNonImprovising(const Type *Ty, const ValID &D) {
   if (isa<FunctionType>(Ty))
-    ThrowException("Functions are not values and "
+    GenerateError("Functions are not values and "
                    "must be referenced as pointers");
 
   switch (D.Type) {
@@ -381,7 +546,7 @@
   // value will fit into the specified type...
   case ValID::ConstSIntVal:    // Is it a constant pool reference??
     if (!ConstantSInt::isValueValidForType(Ty, D.ConstPool64))
-      ThrowException("Signed integral constant '" +
+      GenerateError("Signed integral constant '" +
                      itostr(D.ConstPool64) + "' is invalid for type '" +
                      Ty->getDescription() + "'!");
     return ConstantSInt::get(Ty, D.ConstPool64);
@@ -389,7 +554,7 @@
   case ValID::ConstUIntVal:     // Is it an unsigned const pool reference?
     if (!ConstantUInt::isValueValidForType(Ty, D.UConstPool64)) {
       if (!ConstantSInt::isValueValidForType(Ty, D.ConstPool64)) {
-        ThrowException("Integral constant '" + utostr(D.UConstPool64) +
+        GenerateError("Integral constant '" + utostr(D.UConstPool64) +
                        "' is invalid or out of range!");
       } else {     // This is really a signed reference.  Transmogrify.
         return ConstantSInt::get(Ty, D.ConstPool64);
@@ -400,12 +565,12 @@
 
   case ValID::ConstFPVal:        // Is it a floating point const pool reference?
     if (!ConstantFP::isValueValidForType(Ty, D.ConstPoolFP))
-      ThrowException("FP constant invalid for type!!");
+      GenerateError("FP constant invalid for type!!");
     return ConstantFP::get(Ty, D.ConstPoolFP);
 
   case ValID::ConstNullVal:      // Is it a null value?
     if (!isa<PointerType>(Ty))
-      ThrowException("Cannot create a a non pointer null!");
+      GenerateError("Cannot create a a non pointer null!");
     return ConstantPointerNull::get(cast<PointerType>(Ty));
 
   case ValID::ConstUndefVal:      // Is it an undef value?
@@ -416,7 +581,7 @@
     
   case ValID::ConstantVal:       // Fully resolved constant?
     if (D.ConstantValue->getType() != Ty)
-      ThrowException("Constant expression type different from required type!");
+      GenerateError("Constant expression type different from required type!");
     return D.ConstantValue;
 
   case ValID::InlineAsmVal: {    // Inline asm expression
@@ -424,7 +589,7 @@
     const FunctionType *FTy =
       PTy ? dyn_cast<FunctionType>(PTy->getElementType()) : 0;
     if (!FTy || !InlineAsm::Verify(FTy, D.IAD->Constraints))
-      ThrowException("Invalid type for asm constraint string!");
+      GenerateError("Invalid type for asm constraint string!");
     InlineAsm *IA = InlineAsm::get(FTy, D.IAD->AsmString, D.IAD->Constraints,
                                    D.IAD->HasSideEffects);
     D.destroy();   // Free InlineAsmDescriptor.
@@ -447,14 +612,14 @@
 //
 static Value *getVal(const Type *Ty, const ValID &ID) {
   if (Ty == Type::LabelTy)
-    ThrowException("Cannot use a basic block here");
+    GenerateError("Cannot use a basic block here");
 
   // See if the value has already been defined.
   Value *V = getValNonImprovising(Ty, ID);
   if (V) return V;
 
   if (!Ty->isFirstClassType() && !isa<OpaqueType>(Ty))
-    ThrowException("Invalid use of a composite type!");
+    GenerateError("Invalid use of a composite type!");
 
   // If we reached here, we referenced either a symbol that we don't know about
   // or an id number that hasn't been read yet.  We may be referencing something
@@ -486,7 +651,7 @@
   std::string Name;
   BasicBlock *BB = 0;
   switch (ID.Type) {
-  default: ThrowException("Illegal label reference " + ID.getName());
+  default: GenerateError("Illegal label reference " + ID.getName());
   case ValID::NumberVal:                // Is it a numbered definition?
     if (unsigned(ID.Num) >= CurFun.NumberedBlocks.size())
       CurFun.NumberedBlocks.resize(ID.Num+1);
@@ -507,7 +672,7 @@
     // an entry for it in the PlaceHolderInfo map.
     if (isDefinition && !CurFun.BBForwardRefs.erase(BB))
       // The existing value was a definition, not a forward reference.
-      ThrowException("Redefinition of label " + ID.getName());
+      GenerateError("Redefinition of label " + ID.getName());
 
     ID.destroy();                       // Free strdup'd memory.
     return BB;
@@ -581,11 +746,11 @@
         InsertValue(V, *FutureLateResolvers);
       } else {
         if (DID.Type == ValID::NameVal)
-          ThrowException("Reference to an invalid definition: '" +DID.getName()+
+          GenerateError("Reference to an invalid definition: '" +DID.getName()+
                          "' of type '" + V->getType()->getDescription() + "'",
                          PHI->second.second);
         else
-          ThrowException("Reference to an invalid definition: #" +
+          GenerateError("Reference to an invalid definition: #" +
                          itostr(DID.Num) + " of type '" +
                          V->getType()->getDescription() + "'",
                          PHI->second.second);
@@ -623,12 +788,12 @@
     free(NameStr);                  // Free old string
 
     if (V->getType() == Type::VoidTy)
-      ThrowException("Can't assign name '" + Name+"' to value with void type!");
+      GenerateError("Can't assign name '" + Name+"' to value with void type!");
 
     assert(inFunctionScope() && "Must be in function scope!");
     SymbolTable &ST = CurFun.CurrentFunction->getSymbolTable();
     if (ST.lookup(V->getType(), Name))
-      ThrowException("Redefinition of value named '" + Name + "' in the '" +
+      GenerateError("Redefinition of value named '" + Name + "' in the '" +
                      V->getType()->getDescription() + "' type plane!");
 
     // Set the name.
@@ -643,7 +808,7 @@
                     bool isConstantGlobal, const Type *Ty,
                     Constant *Initializer) {
   if (isa<FunctionType>(Ty))
-    ThrowException("Cannot declare global vars of function type!");
+    GenerateError("Cannot declare global vars of function type!");
 
   const PointerType *PTy = PointerType::get(Ty);
 
@@ -700,7 +865,7 @@
         return EGV;
       }
 
-      ThrowException("Redefinition of global variable named '" + Name +
+      GenerateError("Redefinition of global variable named '" + Name +
                      "' in the '" + Ty->getDescription() + "' type plane!");
     }
   }
@@ -729,7 +894,7 @@
 
   // We don't allow assigning names to void type
   if (T == Type::VoidTy)
-    ThrowException("Can't assign name '" + Name + "' to the void type!");
+    GenerateError("Can't assign name '" + Name + "' to the void type!");
 
   // Set the type name, checking for conflicts as we do so.
   bool AlreadyExists = CurModule.CurrentModule->addTypeName(Name, T);
@@ -753,7 +918,7 @@
     if (Existing == T) return true;  // Yes, it's equal.
 
     // Any other kind of (non-equivalent) redefinition is an error.
-    ThrowException("Redefinition of type named '" + Name + "' in the '" +
+    GenerateError("Redefinition of type named '" + Name + "' in the '" +
                    T->getDescription() + "' type plane!");
   }
 
@@ -859,6 +1024,8 @@
 
   CurModule.CurrentModule = M;
   yyparse();       // Parse the file, potentially throwing exception
+  if (!ParserResult)
+    return 0;
 
   Module *Result = ParserResult;
   ParserResult = 0;
@@ -875,12 +1042,12 @@
   }
 
   if (ObsoleteVarArgs && NewVarArgs)
-    ThrowException("This file is corrupt: it uses both new and old style varargs");
+    GenerateError("This file is corrupt: it uses both new and old style varargs");
 
   if(ObsoleteVarArgs) {
     if(Function* F = Result->getNamedFunction("llvm.va_start")) {
       if (F->arg_size() != 0)
-        ThrowException("Obsolete va_start takes 0 argument!");
+        GenerateError("Obsolete va_start takes 0 argument!");
       
       //foo = va_start()
       // ->
@@ -907,7 +1074,7 @@
     
     if(Function* F = Result->getNamedFunction("llvm.va_end")) {
       if(F->arg_size() != 1)
-        ThrowException("Obsolete va_end takes 1 argument!");
+        GenerateError("Obsolete va_end takes 1 argument!");
 
       //vaend foo
       // ->
@@ -931,7 +1098,7 @@
 
     if(Function* F = Result->getNamedFunction("llvm.va_copy")) {
       if(F->arg_size() != 1)
-        ThrowException("Obsolete va_copy takes 1 argument!");
+        GenerateError("Obsolete va_copy takes 1 argument!");
       //foo = vacopy(bar)
       // ->
       //a = alloca 1 of typeof(foo)
@@ -988,8 +1155,28 @@
 }
 
 
-#line 890 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-typedef union {
+
+/* 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 897 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+typedef union YYSTYPE {
   llvm::Module                           *ModuleVal;
   llvm::Function                         *FunctionVal;
   std::pair<llvm::PATypeHolder*, char*>  *ArgVal;
@@ -1028,971 +1215,1424 @@
   llvm::Instruction::OtherOps             OtherOpVal;
   llvm::Module::Endianness                Endianness;
 } YYSTYPE;
-#include <stdio.h>
-
-#ifndef __cplusplus
-#ifndef __STDC__
-#define const
-#endif
+/* Line 196 of yacc.c.  */
+#line 1220 "llvmAsmParser.tab.c"
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
 #endif
 
 
 
-#define	YYFINAL		496
-#define	YYFLAG		-32768
-#define	YYNTBASE	117
+/* Copy the second part of user declarations.  */
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 356 ? yytranslate[x] : 188)
 
-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
-};
+/* Line 219 of yacc.c.  */
+#line 1232 "llvmAsmParser.tab.c"
 
-#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
-};
+#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
 
-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
-};
+#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)
 
 #endif
 
-#if YYDEBUG != 0
-static const short yyrline[] = { 0,
-  1010,  1011,  1018,  1019,  1028,  1028,  1028,  1028,  1028,  1029,
-  1029,  1029,  1030,  1030,  1030,  1030,  1030,  1030,  1032,  1032,
-  1036,  1036,  1036,  1036,  1037,  1037,  1037,  1037,  1038,  1038,
-  1039,  1039,  1042,  1045,  1049,  1049,  1050,  1051,  1052,  1055,
-  1055,  1056,  1057,  1058,  1059,  1068,  1068,  1074,  1074,  1082,
-  1089,  1089,  1095,  1095,  1097,  1101,  1114,  1114,  1115,  1115,
-  1117,  1126,  1126,  1126,  1126,  1126,  1126,  1126,  1127,  1127,
-  1127,  1127,  1127,  1127,  1128,  1131,  1134,  1140,  1147,  1159,
-  1163,  1174,  1183,  1186,  1194,  1198,  1203,  1204,  1207,  1210,
-  1220,  1245,  1258,  1287,  1312,  1332,  1344,  1353,  1357,  1416,
-  1422,  1430,  1435,  1440,  1443,  1446,  1453,  1463,  1494,  1501,
-  1522,  1532,  1537,  1544,  1549,  1554,  1562,  1565,  1572,  1572,
-  1582,  1589,  1593,  1596,  1599,  1602,  1615,  1635,  1637,  1639,
-  1642,  1645,  1649,  1652,  1654,  1656,  1660,  1672,  1673,  1675,
-  1678,  1686,  1691,  1693,  1697,  1701,  1709,  1709,  1710,  1710,
-  1712,  1718,  1723,  1729,  1732,  1737,  1741,  1745,  1831,  1831,
-  1833,  1841,  1841,  1843,  1847,  1847,  1856,  1859,  1863,  1866,
-  1869,  1872,  1875,  1878,  1881,  1884,  1887,  1911,  1914,  1927,
-  1930,  1935,  1935,  1941,  1945,  1948,  1956,  1965,  1969,  1979,
-  1990,  1993,  1996,  1999,  2002,  2016,  2020,  2073,  2076,  2082,
-  2090,  2100,  2107,  2112,  2119,  2123,  2129,  2129,  2131,  2134,
-  2140,  2152,  2163,  2173,  2185,  2192,  2199,  2206,  2211,  2230,
-  2252,  2257,  2262,  2267,  2281,  2338,  2344,  2346,  2350,  2353,
-  2359,  2363,  2367,  2371,  2375,  2382,  2392,  2405
-};
-#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
+#if defined (__STDC__) || defined (__cplusplus)
+   typedef signed char yysigned_char;
 #else
-#define YYSTACK_ALLOC malloc
+   typedef short int yysigned_char;
 #endif
 
-/* 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.  */
+/* 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,  1017,  1017,  1018,  1026,  1027,  1037,  1037,  1037,  1037,
+    1037,  1038,  1038,  1038,  1039,  1039,  1039,  1039,  1039,  1039,
+    1041,  1041,  1045,  1045,  1045,  1045,  1046,  1046,  1046,  1046,
+    1047,  1047,  1048,  1048,  1051,  1055,  1060,  1061,  1062,  1063,
+    1064,  1066,  1067,  1068,  1069,  1070,  1071,  1080,  1081,  1087,
+    1088,  1096,  1104,  1105,  1110,  1111,  1112,  1117,  1131,  1131,
+    1132,  1132,  1134,  1144,  1144,  1144,  1144,  1144,  1144,  1144,
+    1145,  1145,  1145,  1145,  1145,  1145,  1146,  1150,  1154,  1161,
+    1169,  1182,  1187,  1199,  1209,  1213,  1222,  1227,  1233,  1234,
+    1238,  1242,  1253,  1279,  1293,  1323,  1349,  1370,  1383,  1393,
+    1398,  1458,  1465,  1474,  1480,  1486,  1490,  1494,  1502,  1513,
+    1545,  1553,  1575,  1586,  1592,  1600,  1606,  1612,  1621,  1625,
+    1633,  1633,  1643,  1651,  1656,  1660,  1664,  1668,  1683,  1704,
+    1707,  1710,  1710,  1717,  1717,  1725,  1728,  1731,  1735,  1748,
+    1749,  1751,  1755,  1764,  1770,  1772,  1777,  1782,  1791,  1791,
+    1792,  1792,  1794,  1801,  1807,  1814,  1818,  1824,  1829,  1834,
+    1921,  1921,  1923,  1931,  1931,  1933,  1938,  1938,  1948,  1952,
+    1957,  1961,  1965,  1969,  1973,  1977,  1981,  1985,  1989,  2014,
+    2018,  2032,  2036,  2042,  2042,  2048,  2053,  2057,  2066,  2076,
+    2081,  2092,  2104,  2108,  2112,  2116,  2120,  2135,  2140,  2194,
+    2198,  2205,  2214,  2225,  2233,  2239,  2247,  2252,  2259,  2259,
+    2261,  2265,  2272,  2285,  2297,  2308,  2321,  2329,  2337,  2345,
+    2351,  2371,  2394,  2400,  2406,  2412,  2427,  2485,  2492,  2495,
+    2500,  2504,  2511,  2516,  2521,  2526,  2531,  2539,  2550,  2564
+};
+#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
+};
 
 #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 yyerrlab1
-/* 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 yyerrorlab
+
+
+/* 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);			\
-      yychar1 = YYTRANSLATE (yychar);				\
+    {								\
+      yychar = (Token);						\
+      yylval = (Value);						\
+      yytoken = YYTRANSLATE (yychar);				\
       YYPOPSTACK;						\
       goto yybackup;						\
     }								\
   else								\
-    { yyerror ("syntax error: cannot back up"); YYERROR; }	\
+    {								\
+      yyerror (YY_("syntax error: cannot back up")); \
+      YYERROR;							\
+    }								\
 while (0)
 
+
 #define YYTERROR	1
 #define YYERRCODE	256
 
-#ifndef YYPURE
-#define YYLEX		yylex()
+
+/* 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)
 #endif
 
-#ifdef YYPURE
-#ifdef YYLSP_NEEDED
+
+/* 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 YYLEX_PARAM
-#define YYLEX		yylex(&yylval, &yylloc, YYLEX_PARAM)
+# define YYLEX yylex (YYLEX_PARAM)
 #else
-#define YYLEX		yylex(&yylval, &yylloc)
+# define YYLEX yylex ()
 #endif
-#else /* not YYLSP_NEEDED */
-#ifdef YYLEX_PARAM
-#define YYLEX		yylex(&yylval, YYLEX_PARAM)
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args)			\
+do {						\
+  if (yydebug)					\
+    YYFPRINTF Args;				\
+} while (0)
+
+# 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
-#define YYLEX		yylex(&yylval)
+static void
+yy_stack_print (bottom, top)
+    short int *bottom;
+    short int *top;
 #endif
-#endif /* not YYLSP_NEEDED */
+{
+  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)
+
+
+/*------------------------------------------------.
+| 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;
 #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]]);
+}
 
-/* If nonreentrant, generate the variables here */
+# define YY_REDUCE_PRINT(Rule)		\
+do {					\
+  if (yydebug)				\
+    yy_reduce_print (Rule);		\
+} while (0)
 
-#ifndef YYPURE
+/* 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 */
 
-int	yychar;			/*  the lookahead symbol		*/
-YYSTYPE	yylval;			/*  the semantic value of the		*/
-				/*  lookahead symbol			*/
 
-#ifdef YYLSP_NEEDED
-YYLTYPE yylloc;			/*  location data for the lookahead	*/
-				/*  symbol				*/
-#endif
-
-int yynerrs;			/*  number of parse errors so far       */
-#endif  /* not YYPURE */
-
-#if YYDEBUG != 0
-int yydebug;			/*  nonzero means print parse trace	*/
-/* Since this is uninitialized, it does not stop multiple parsers
-   from coexisting.  */
-#endif
-
-/*  YYINITDEPTH indicates the initial size of the parser's stacks	*/
-
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
 #ifndef	YYINITDEPTH
-#define YYINITDEPTH 200
+# define YYINITDEPTH 200
 #endif
 
-/*  YYMAXDEPTH is the maximum size the stacks can grow to
-    (effective only if the built-in stack extension method is used).  */
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
 
-#if YYMAXDEPTH == 0
-#undef YYMAXDEPTH
-#endif
+   Do not make this value too large; the results are undefined if
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
 
 #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 __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
+#if YYERROR_VERBOSE
 
-/* This is the most reliable way to avoid incompatibilities
-   in available built-in functions on various systems.  */
-static void
-__yy_memcpy (to, from, count)
-     char *to;
-     char *from;
-     unsigned int count;
+# 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
 {
-  register char *f = from;
-  register char *t = to;
-  register int i = count;
+  const char *yys = yystr;
 
-  while (i-- > 0)
-    *t++ = *f++;
+  while (*yys++ != '\0')
+    continue;
+
+  return yys - yystr - 1;
 }
+#  endif
+# endif
 
-#else /* __cplusplus */
-
-/* This is the most reliable way to avoid incompatibilities
-   in available built-in functions on various systems.  */
-static void
-__yy_memcpy (char *to, char *from, unsigned int count)
+# 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
 {
-  register char *t = to;
-  register char *f = from;
-  register int i = count;
+  char *yyd = yydest;
+  const char *yys = yysrc;
 
-  while (i-- > 0)
-    *t++ = *f++;
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
 }
+#  endif
+# endif
 
-#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 */
+
 
-#line 217 "/usr/share/bison.simple"
 
-/* The user can define YYPARSE_PARAM as the name of an argument to be passed
-   into yyparse.  The argument should have type void *.
-   It should actually point to an object.
-   Grammar actions can access the variable by casting it
-   to the proper pointer type.  */
+#if YYDEBUG
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
 
-#ifdef YYPARSE_PARAM
-#ifdef __cplusplus
-#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL
-#else /* not __cplusplus */
-#define YYPARSE_PARAM_ARG YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
-#endif /* not __cplusplus */
-#else /* not YYPARSE_PARAM */
-#define YYPARSE_PARAM_ARG
-#define YYPARSE_PARAM_DECL
-#endif /* not YYPARSE_PARAM */
-
-/* Prevent warning if -Wstrict-prototypes.  */
-#ifdef __GNUC__
-#ifdef YYPARSE_PARAM
-int yyparse (void *);
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
 #else
+static void
+yysymprint (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE *yyvaluep;
+#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;
+    }
+}
+
+
+/* Prevent warnings from -Wmissing-prototypes.  */
+
+#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)
 int yyparse (void);
-#endif
-#endif
-
-int
-yyparse(YYPARSE_PARAM_ARG)
-     YYPARSE_PARAM_DECL
-{
-  register int yystate;
-  register int yyn;
-  register short *yyssp;
-  register YYSTYPE *yyvsp;
-  int yyerrstatus;	/*  number of tokens to shift before error messages enabled */
-  int yychar1 = 0;		/*  lookahead token as an internal (translated) token number */
-
-  short	yyssa[YYINITDEPTH];	/*  the state stack			*/
-  YYSTYPE yyvsa[YYINITDEPTH];	/*  the semantic value stack		*/
-
-  short *yyss = yyssa;		/*  refer to the stacks thru separate pointers */
-  YYSTYPE *yyvs = yyvsa;	/*  to allow yyoverflow to reallocate them elsewhere */
-
-#ifdef YYLSP_NEEDED
-  YYLTYPE yylsa[YYINITDEPTH];	/*  the location stack			*/
-  YYLTYPE *yyls = yylsa;
-  YYLTYPE *yylsp;
-
-#define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
 #else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+
+/* The look-ahead symbol.  */
+int yychar;
+
+/* The semantic value of the look-ahead symbol.  */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far.  */
+int yynerrs;
+
+
+
+/*----------.
+| yyparse.  |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+# if defined (__STDC__) || defined (__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
+{
+  
+  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;
+
+  /* Three stacks and their tools:
+     `yyss': related to states,
+     `yyvs': related to semantic values,
+     `yyls': related to locations.
+
+     Refer to the stacks thru separate pointers, to allow yyoverflow
+     to reallocate them elsewhere.  */
+
+  /* The state stack.  */
+  short int yyssa[YYINITDEPTH];
+  short int *yyss = yyssa;
+  short int *yyssp;
+
+  /* The semantic value stack.  */
+  YYSTYPE yyvsa[YYINITDEPTH];
+  YYSTYPE *yyvs = yyvsa;
+  YYSTYPE *yyvsp;
+
+
+
 #define YYPOPSTACK   (yyvsp--, yyssp--)
-#endif
 
-  int yystacksize = YYINITDEPTH;
-  int yyfree_stacks = 0;
+  YYSIZE_T yystacksize = YYINITDEPTH;
 
-#ifdef YYPURE
-  int yychar;
-  YYSTYPE yylval;
-  int yynerrs;
-#ifdef YYLSP_NEEDED
-  YYLTYPE yylloc;
-#endif
-#endif
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
 
-  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;
 
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Starting parse\n");
-#endif
+  YYDPRINTF ((stderr, "Starting parse\n"));
 
   yystate = 0;
   yyerrstatus = 0;
@@ -2004,687 +2644,723 @@
      so that they stay on the same level as the state stack.
      The wasted elements are never initialized.  */
 
-  yyssp = yyss - 1;
+  yyssp = yyss;
   yyvsp = yyvs;
-#ifdef YYLSP_NEEDED
-  yylsp = yyls;
-#endif
 
-/* 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:
+  goto yysetstate;
 
-  *++yyssp = yystate;
+/*------------------------------------------------------------.
+| 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++;
 
-  if (yyssp >= yyss + yystacksize - 1)
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
     {
-      /* 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.  */
-      int size = yyssp - yyss + 1;
+      YYSIZE_T yysize = yyssp - yyss + 1;
 
 #ifdef yyoverflow
-      /* 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
+      {
+	/* 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;
 
-      yyss = yyss1; yyvs = yyvs1;
-#ifdef YYLSP_NEEDED
-      yyls = yyls1;
-#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;
+      }
 #else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyexhaustedlab;
+# else
       /* Extend the stack our own way.  */
-      if (yystacksize >= YYMAXDEPTH)
-	{
-	  yyerror("parser stack overflow");
-	  if (yyfree_stacks)
-	    {
-	      free (yyss);
-	      free (yyvs);
-#ifdef YYLSP_NEEDED
-	      free (yyls);
-#endif
-	    }
-	  return 2;
-	}
+      if (YYMAXDEPTH <= yystacksize)
+	goto yyexhaustedlab;
       yystacksize *= 2;
-      if (yystacksize > YYMAXDEPTH)
+      if (YYMAXDEPTH < yystacksize)
 	yystacksize = YYMAXDEPTH;
-#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
+
+      {
+	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
 #endif /* no yyoverflow */
 
-      yyssp = yyss + size - 1;
-      yyvsp = yyvs + size - 1;
-#ifdef YYLSP_NEEDED
-      yylsp = yyls + size - 1;
-#endif
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
 
-#if YYDEBUG != 0
-      if (yydebug)
-	fprintf(stderr, "Stack size increased to %d\n", yystacksize);
-#endif
 
-      if (yyssp >= yyss + yystacksize - 1)
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+		  (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
 	YYABORT;
     }
 
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Entering state %d\n", yystate);
-#endif
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
 
   goto yybackup;
- yybackup:
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
 
 /* Do appropriate processing given the current state.  */
-/* Read a lookahead token if we need one and don't already have one.  */
+/* Read a look-ahead token if we need one and don't already have one.  */
 /* yyresume: */
 
-  /* First try to decide what to do without reference to lookahead token.  */
+  /* First try to decide what to do without reference to look-ahead token.  */
 
   yyn = yypact[yystate];
-  if (yyn == YYFLAG)
+  if (yyn == YYPACT_NINF)
     goto yydefault;
 
-  /* Not known => get a lookahead token if don't already have one.  */
+  /* Not known => get a look-ahead token if don't already have one.  */
 
-  /* yychar is either YYEMPTY or YYEOF
-     or a valid token in external form.  */
-
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
   if (yychar == YYEMPTY)
     {
-#if YYDEBUG != 0
-      if (yydebug)
-	fprintf(stderr, "Reading a token: ");
-#endif
+      YYDPRINTF ((stderr, "Reading a token: "));
       yychar = YYLEX;
     }
 
-  /* Convert token to internal form (in yychar1) for indexing tables with */
-
-  if (yychar <= 0)		/* This means end of input. */
+  if (yychar <= YYEOF)
     {
-      yychar1 = 0;
-      yychar = YYEOF;		/* Don't call YYLEX any more */
-
-#if YYDEBUG != 0
-      if (yydebug)
-	fprintf(stderr, "Now at end of input.\n");
-#endif
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
     }
   else
     {
-      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
+      yytoken = YYTRANSLATE (yychar);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
     }
 
-  yyn += yychar1;
-  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
+  /* 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)
     goto yydefault;
-
   yyn = yytable[yyn];
-
-  /* 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)
     {
-      if (yyn == YYFLAG)
+      if (yyn == 0 || yyn == YYTABLE_NINF)
 	goto yyerrlab;
       yyn = -yyn;
       goto yyreduce;
     }
-  else if (yyn == 0)
-    goto yyerrlab;
 
   if (yyn == YYFINAL)
     YYACCEPT;
 
-  /* Shift the lookahead token.  */
-
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
-#endif
+  /* Shift the look-ahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
 
   /* 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;
 
-/* Do the default action for the current state.  */
-yydefault:
 
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
   yyn = yydefact[yystate];
   if (yyn == 0)
     goto yyerrlab;
+  goto yyreduce;
 
-/* Do a reduction.  yyn is the number of a rule to reduce with.  */
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
 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 YYDEBUG != 0
-  if (yydebug)
+  /* 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)
     {
-      int i;
+        case 3:
+#line 1018 "/proj/llvm/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);
+  CHECK_FOR_ERROR
+;}
+    break;
 
-      fprintf (stderr, "Reducing via rule %d (line %d), ",
-	       yyn, yyrline[yyn]);
+  case 5:
+#line 1027 "/proj/llvm/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);
+  CHECK_FOR_ERROR
+;}
+    break;
 
-      /* Print the symbols being reduced, and their result.  */
-      for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
-	fprintf (stderr, "%s ", yytname[yyrhs[i]]);
-      fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
-    }
-#endif
+  case 34:
+#line 1051 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.StrVal) = (yyvsp[-1].StrVal);
+    CHECK_FOR_ERROR
+  ;}
+    break;
 
+  case 35:
+#line 1055 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.StrVal) = 0;
+    CHECK_FOR_ERROR
+  ;}
+    break;
 
-  switch (yyn) {
+  case 36:
+#line 1060 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
+    break;
 
-case 2:
-#line 1011 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  if (yyvsp[0].UIntVal > (uint32_t)INT32_MAX)     // Outside of my range!
-    ThrowException("Value too large for type!");
-  yyval.SIntVal = (int32_t)yyvsp[0].UIntVal;
-;
-    break;}
-case 4:
-#line 1019 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  if (yyvsp[0].UInt64Val > (uint64_t)INT64_MAX)     // Outside of my range!
-    ThrowException("Value too large for type!");
-  yyval.SInt64Val = (int64_t)yyvsp[0].UInt64Val;
-;
-    break;}
-case 33:
-#line 1042 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.StrVal = yyvsp[-1].StrVal;
-  ;
-    break;}
-case 34:
-#line 1045 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.StrVal = 0;
-  ;
-    break;}
-case 35:
-#line 1049 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::InternalLinkage; ;
-    break;}
-case 36:
-#line 1050 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
-    break;}
-case 37:
-#line 1051 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::WeakLinkage; ;
-    break;}
-case 38:
-#line 1052 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::AppendingLinkage; ;
-    break;}
-case 39:
-#line 1053 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
-    break;}
-case 40:
-#line 1055 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = CallingConv::C; ;
-    break;}
-case 41:
-#line 1056 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = CallingConv::C; ;
-    break;}
-case 42:
-#line 1057 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = CallingConv::CSRet; ;
-    break;}
-case 43:
-#line 1058 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = CallingConv::Fast; ;
-    break;}
-case 44:
-#line 1059 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = CallingConv::Cold; ;
-    break;}
-case 45:
-#line 1060 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-                   if ((unsigned)yyvsp[0].UInt64Val != yyvsp[0].UInt64Val)
-                     ThrowException("Calling conv too large!");
-                   yyval.UIntVal = yyvsp[0].UInt64Val;
-                 ;
-    break;}
-case 46:
-#line 1068 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = 0; ;
-    break;}
-case 47:
-#line 1069 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  yyval.UIntVal = yyvsp[0].UInt64Val;
-  if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal))
-    ThrowException("Alignment must be a power of two!");
-;
-    break;}
-case 48:
-#line 1074 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = 0; ;
-    break;}
-case 49:
-#line 1075 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  yyval.UIntVal = yyvsp[0].UInt64Val;
-  if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal))
-    ThrowException("Alignment must be a power of two!");
-;
-    break;}
-case 50:
-#line 1082 "/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] == '\\')
-      ThrowException("Invalid character in section name!");
-  yyval.StrVal = yyvsp[0].StrVal;
-;
-    break;}
-case 51:
-#line 1089 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.StrVal = 0; ;
-    break;}
-case 52:
-#line 1090 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.StrVal = yyvsp[0].StrVal; ;
-    break;}
-case 53:
-#line 1095 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{;
-    break;}
-case 54:
-#line 1096 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{;
-    break;}
-case 55:
-#line 1097 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    CurGV->setSection(yyvsp[0].StrVal);
-    free(yyvsp[0].StrVal);
-  ;
-    break;}
-case 56:
-#line 1101 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[0].UInt64Val != 0 && !isPowerOf2_32(yyvsp[0].UInt64Val))
-      ThrowException("Alignment must be a power of two!");
-    CurGV->setAlignment(yyvsp[0].UInt64Val);
-  ;
-    break;}
-case 58:
-#line 1114 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.TypeVal = new PATypeHolder(yyvsp[0].PrimType); ;
-    break;}
-case 60:
-#line 1115 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.TypeVal = new PATypeHolder(yyvsp[0].PrimType); ;
-    break;}
-case 61:
-#line 1117 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  case 37:
+#line 1061 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
+    break;
+
+  case 38:
+#line 1062 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
+    break;
+
+  case 39:
+#line 1063 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
+    break;
+
+  case 40:
+#line 1064 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
+    break;
+
+  case 41:
+#line 1066 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = CallingConv::C; ;}
+    break;
+
+  case 42:
+#line 1067 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = CallingConv::C; ;}
+    break;
+
+  case 43:
+#line 1068 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = CallingConv::CSRet; ;}
+    break;
+
+  case 44:
+#line 1069 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = CallingConv::Fast; ;}
+    break;
+
+  case 45:
+#line 1070 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = CallingConv::Cold; ;}
+    break;
+
+  case 46:
+#line 1071 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+                   if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val))
+                     GEN_ERROR("Calling conv too large!");
+                   (yyval.UIntVal) = (yyvsp[0].UInt64Val);
+                  CHECK_FOR_ERROR
+                 ;}
+    break;
+
+  case 47:
+#line 1080 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = 0; ;}
+    break;
+
+  case 48:
+#line 1081 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+  (yyval.UIntVal) = (yyvsp[0].UInt64Val);
+  if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
+    GEN_ERROR("Alignment must be a power of two!");
+  CHECK_FOR_ERROR
+;}
+    break;
+
+  case 49:
+#line 1087 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = 0; ;}
+    break;
+
+  case 50:
+#line 1088 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+  (yyval.UIntVal) = (yyvsp[0].UInt64Val);
+  if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
+    GEN_ERROR("Alignment must be a power of two!");
+  CHECK_FOR_ERROR
+;}
+    break;
+
+  case 51:
+#line 1096 "/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] == '\\')
+      GEN_ERROR("Invalid character in section name!");
+  (yyval.StrVal) = (yyvsp[0].StrVal);
+  CHECK_FOR_ERROR
+;}
+    break;
+
+  case 52:
+#line 1104 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.StrVal) = 0; ;}
+    break;
+
+  case 53:
+#line 1105 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.StrVal) = (yyvsp[0].StrVal); ;}
+    break;
+
+  case 54:
+#line 1110 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {;}
+    break;
+
+  case 55:
+#line 1111 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {;}
+    break;
+
+  case 56:
+#line 1112 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    CurGV->setSection((yyvsp[0].StrVal));
+    free((yyvsp[0].StrVal));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 57:
+#line 1117 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val)))
+      GEN_ERROR("Alignment must be a power of two!");
+    CurGV->setAlignment((yyvsp[0].UInt64Val));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 59:
+#line 1131 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType)); ;}
+    break;
+
+  case 61:
+#line 1132 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType)); ;}
+    break;
+
+  case 62:
+#line 1134 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      ThrowException("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
-    yyval.TypeVal = yyvsp[0].TypeVal;
-  ;
-    break;}
-case 75:
-#line 1128 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeVal = new PATypeHolder(OpaqueType::get());
-  ;
-    break;}
-case 76:
-#line 1131 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeVal = new PATypeHolder(yyvsp[0].PrimType);
-  ;
-    break;}
-case 77:
-#line 1134 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{            // Named types are also simple types...
-  yyval.TypeVal = new PATypeHolder(getTypeVal(yyvsp[0].ValIDVal));
-;
-    break;}
-case 78:
-#line 1140 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                   // Type UpReference
-    if (yyvsp[0].UInt64Val > (uint64_t)~0U) ThrowException("Value out of range!");
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
+    (yyval.TypeVal) = (yyvsp[0].TypeVal);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 76:
+#line 1146 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 77:
+#line 1150 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 78:
+#line 1154 "/proj/llvm/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 1161 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {                   // Type UpReference
+    if ((yyvsp[0].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range!");
     OpaqueType *OT = OpaqueType::get();        // Use temporary placeholder
-    UpRefs.push_back(UpRefRecord((unsigned)yyvsp[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");
-  ;
-    break;}
-case 79:
-#line 1147 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{           // Function derived type?
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 80:
+#line 1169 "/proj/llvm/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
-  ;
-    break;}
-case 80:
-#line 1159 "/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;
-  ;
-    break;}
-case 81:
-#line 1163 "/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)
-        ThrowException("Unsigned result not equal to signed result");
+    (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 1182 "/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);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 82:
+#line 1187 "/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))
+        GEN_ERROR("Unsigned result not equal to signed result");
      if (!ElemTy->isPrimitiveType())
-        ThrowException("Elemental type of a PackedType must be primitive");
-     if (!isPowerOf2_32(yyvsp[-3].UInt64Val))
-       ThrowException("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;
-  ;
-    break;}
-case 82:
-#line 1174 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                        // Structure type?
+        GEN_ERROR("Elemental type of a PackedType must be primitive");
+     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);
+     CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 83:
+#line 1199 "/proj/llvm/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;
-  ;
-    break;}
-case 83:
-#line 1183 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                                  // Empty structure type?
-    yyval.TypeVal = new PATypeHolder(StructType::get(std::vector<const Type*>()));
-  ;
-    break;}
-case 84:
-#line 1186 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                             // Pointer type?
-    yyval.TypeVal = new PATypeHolder(HandleUpRefs(PointerType::get(*yyvsp[-1].TypeVal)));
-    delete yyvsp[-1].TypeVal;
-  ;
-    break;}
-case 85:
-#line 1194 "/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;
-  ;
-    break;}
-case 86:
-#line 1198 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    (yyval.TypeList=yyvsp[-2].TypeList)->push_back(*yyvsp[0].TypeVal); delete yyvsp[0].TypeVal;
-  ;
-    break;}
-case 88:
-#line 1204 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    (yyval.TypeList=yyvsp[-2].TypeList)->push_back(Type::VoidTy);
-  ;
-    break;}
-case 89:
-#line 1207 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    (yyval.TypeList = new std::list<PATypeHolder>())->push_back(Type::VoidTy);
-  ;
-    break;}
-case 90:
-#line 1210 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeList = new std::list<PATypeHolder>();
-  ;
-    break;}
-case 91:
-#line 1220 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ // Nonempty unsized arr
-    const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-3].TypeVal->get());
+    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
+    delete (yyvsp[-1].TypeList);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 84:
+#line 1209 "/proj/llvm/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 1213 "/proj/llvm/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 1222 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeList) = new std::list<PATypeHolder>();
+    (yyval.TypeList)->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 87:
+#line 1227 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 89:
+#line 1234 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(Type::VoidTy);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 90:
+#line 1238 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    ((yyval.TypeList) = new std::list<PATypeHolder>())->push_back(Type::VoidTy);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 91:
+#line 1242 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeList) = new std::list<PATypeHolder>();
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 92:
+#line 1253 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { // Nonempty unsized arr
+    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-3].TypeVal)->get());
     if (ATy == 0)
-      ThrowException("Cannot make array constant with type: '" + 
-                     (*yyvsp[-3].TypeVal)->getDescription() + "'!");
+      GEN_ERROR("Cannot make array constant with type: '" + 
+                     (*(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())
-      ThrowException("Type mismatch: constant sized array initialized with " +
-                     utostr(yyvsp[-1].ConstVector->size()) +  " arguments, but has size of " + 
+    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 " + 
                      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())
-        ThrowException("Element #" + utostr(i) + " is not of type '" + 
+    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;
-  ;
-    break;}
-case 92:
-#line 1245 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-2].TypeVal->get());
+    (yyval.ConstVal) = ConstantArray::get(ATy, *(yyvsp[-1].ConstVector));
+    delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 93:
+#line 1279 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
     if (ATy == 0)
-      ThrowException("Cannot make array constant with type: '" + 
-                     (*yyvsp[-2].TypeVal)->getDescription() + "'!");
+      GEN_ERROR("Cannot make array constant with type: '" + 
+                     (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
 
     int NumElements = ATy->getNumElements();
     if (NumElements != -1 && NumElements != 0) 
-      ThrowException("Type mismatch: constant sized array initialized with 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;
-  ;
-    break;}
-case 93:
-#line 1258 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-2].TypeVal->get());
+    (yyval.ConstVal) = ConstantArray::get(ATy, std::vector<Constant*>());
+    delete (yyvsp[-2].TypeVal);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 94:
+#line 1293 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
     if (ATy == 0)
-      ThrowException("Cannot make array constant with type: '" + 
-                     (*yyvsp[-2].TypeVal)->getDescription() + "'!");
+      GEN_ERROR("Cannot make array constant with type: '" + 
+                     (*(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))
-      ThrowException("Can't build string constant of size " + 
-                     itostr((int)(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))) +
                      " 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);
-      ThrowException("Cannot build string arrays of non byte sized elements!");
+      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;
-  ;
-    break;}
-case 94:
-#line 1287 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ // Nonempty unsized arr
-    const PackedType *PTy = dyn_cast<PackedType>(yyvsp[-3].TypeVal->get());
+    free((yyvsp[0].StrVal));
+    (yyval.ConstVal) = ConstantArray::get(ATy, Vals);
+    delete (yyvsp[-2].TypeVal);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 95:
+#line 1323 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { // Nonempty unsized arr
+    const PackedType *PTy = dyn_cast<PackedType>((yyvsp[-3].TypeVal)->get());
     if (PTy == 0)
-      ThrowException("Cannot make packed constant with type: '" + 
-                     (*yyvsp[-3].TypeVal)->getDescription() + "'!");
+      GEN_ERROR("Cannot make packed constant with type: '" + 
+                     (*(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())
-      ThrowException("Type mismatch: constant sized packed initialized with " +
-                     utostr(yyvsp[-1].ConstVector->size()) +  " arguments, but has size of " + 
+    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 " + 
                      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())
-        ThrowException("Element #" + utostr(i) + " is not of type '" + 
+    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;
-  ;
-    break;}
-case 95:
-#line 1312 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    const StructType *STy = dyn_cast<StructType>(yyvsp[-3].TypeVal->get());
-    if (STy == 0)
-      ThrowException("Cannot make struct constant with type: '" + 
-                     (*yyvsp[-3].TypeVal)->getDescription() + "'!");
+    (yyval.ConstVal) = ConstantPacked::get(PTy, *(yyvsp[-1].ConstVector));
+    delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
+    CHECK_FOR_ERROR
+  ;}
+    break;
 
-    if (yyvsp[-1].ConstVector->size() != STy->getNumContainedTypes())
-      ThrowException("Illegal number of initializers for structure type!");
+  case 96:
+#line 1349 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal)->get());
+    if (STy == 0)
+      GEN_ERROR("Cannot make struct constant with type: '" + 
+                     (*(yyvsp[-3].TypeVal))->getDescription() + "'!");
+
+    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))
-        ThrowException("Expected type '" +
+    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;
-  ;
-    break;}
-case 96:
-#line 1332 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    const StructType *STy = dyn_cast<StructType>(yyvsp[-2].TypeVal->get());
+    (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[-1].ConstVector));
+    delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 97:
+#line 1370 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    const StructType *STy = dyn_cast<StructType>((yyvsp[-2].TypeVal)->get());
     if (STy == 0)
-      ThrowException("Cannot make struct constant with type: '" + 
-                     (*yyvsp[-2].TypeVal)->getDescription() + "'!");
+      GEN_ERROR("Cannot make struct constant with type: '" + 
+                     (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
 
     if (STy->getNumContainedTypes() != 0)
-      ThrowException("Illegal number of initializers for structure type!");
+      GEN_ERROR("Illegal number of initializers for structure type!");
 
-    yyval.ConstVal = ConstantStruct::get(STy, std::vector<Constant*>());
-    delete yyvsp[-2].TypeVal;
-  ;
-    break;}
-case 97:
-#line 1344 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    const PointerType *PTy = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
+    (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
+    delete (yyvsp[-2].TypeVal);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 98:
+#line 1383 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
     if (PTy == 0)
-      ThrowException("Cannot make null pointer constant with type: '" + 
-                     (*yyvsp[-1].TypeVal)->getDescription() + "'!");
+      GEN_ERROR("Cannot make null pointer constant with type: '" + 
+                     (*(yyvsp[-1].TypeVal))->getDescription() + "'!");
 
-    yyval.ConstVal = ConstantPointerNull::get(PTy);
-    delete yyvsp[-1].TypeVal;
-  ;
-    break;}
-case 98:
-#line 1353 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ConstVal = UndefValue::get(yyvsp[-1].TypeVal->get());
-    delete yyvsp[-1].TypeVal;
-  ;
-    break;}
-case 99:
-#line 1357 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    const PointerType *Ty = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
+    (yyval.ConstVal) = ConstantPointerNull::get(PTy);
+    delete (yyvsp[-1].TypeVal);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 99:
+#line 1393 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ConstVal) = UndefValue::get((yyvsp[-1].TypeVal)->get());
+    delete (yyvsp[-1].TypeVal);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 100:
+#line 1398 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    const PointerType *Ty = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
     if (Ty == 0)
-      ThrowException("Global const reference must be a pointer type!");
+      GEN_ERROR("Global const reference must be a pointer type!");
 
     // ConstExprs can exist in the body of a function, thus creating
     // GlobalValues whenever they refer to a variable.  Because we are in
@@ -2696,7 +3372,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;
 
@@ -2710,14 +3386,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;
@@ -2732,276 +3408,331 @@
         }
 
         // 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
-  ;
-    break;}
-case 100:
-#line 1416 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[-1].TypeVal->get() != yyvsp[0].ConstVal->getType())
-      ThrowException("Mismatched types for constant expression!");
-    yyval.ConstVal = yyvsp[0].ConstVal;
-    delete yyvsp[-1].TypeVal;
-  ;
-    break;}
-case 101:
-#line 1422 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    const Type *Ty = yyvsp[-1].TypeVal->get();
+    (yyval.ConstVal) = cast<GlobalValue>(V);
+    delete (yyvsp[-1].TypeVal);            // Free the type handle
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 101:
+#line 1458 "/proj/llvm/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);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 102:
+#line 1465 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    const Type *Ty = (yyvsp[-1].TypeVal)->get();
     if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
-      ThrowException("Cannot create a null initialized value of this type!");
-    yyval.ConstVal = Constant::getNullValue(Ty);
-    delete yyvsp[-1].TypeVal;
-  ;
-    break;}
-case 102:
-#line 1430 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{      // integral constants
-    if (!ConstantSInt::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].SInt64Val))
-      ThrowException("Constant value doesn't fit in type!");
-    yyval.ConstVal = ConstantSInt::get(yyvsp[-1].PrimType, yyvsp[0].SInt64Val);
-  ;
-    break;}
-case 103:
-#line 1435 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{            // integral constants
-    if (!ConstantUInt::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].UInt64Val))
-      ThrowException("Constant value doesn't fit in type!");
-    yyval.ConstVal = ConstantUInt::get(yyvsp[-1].PrimType, yyvsp[0].UInt64Val);
-  ;
-    break;}
-case 104:
-#line 1440 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                      // Boolean constants
-    yyval.ConstVal = ConstantBool::True;
-  ;
-    break;}
-case 105:
-#line 1443 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                     // Boolean constants
-    yyval.ConstVal = ConstantBool::False;
-  ;
-    break;}
-case 106:
-#line 1446 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                   // Float & Double constants
-    if (!ConstantFP::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].FPVal))
-      ThrowException("Floating point constant invalid for type!!");
-    yyval.ConstVal = ConstantFP::get(yyvsp[-1].PrimType, yyvsp[0].FPVal);
-  ;
-    break;}
-case 107:
-#line 1453 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!yyvsp[-3].ConstVal->getType()->isFirstClassType())
-      ThrowException("cast constant expression from a non-primitive type: '" +
-                     yyvsp[-3].ConstVal->getType()->getDescription() + "'!");
-    if (!yyvsp[-1].TypeVal->get()->isFirstClassType())
-      ThrowException("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;
-  ;
-    break;}
-case 108:
-#line 1463 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!isa<PointerType>(yyvsp[-2].ConstVal->getType()))
-      ThrowException("GetElementPtr requires a pointer operand!");
+      GEN_ERROR("Cannot create a null initialized value of this type!");
+    (yyval.ConstVal) = Constant::getNullValue(Ty);
+    delete (yyvsp[-1].TypeVal);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 103:
+#line 1474 "/proj/llvm/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));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 104:
+#line 1480 "/proj/llvm/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));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 105:
+#line 1486 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {                      // Boolean constants
+    (yyval.ConstVal) = ConstantBool::True;
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 106:
+#line 1490 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {                     // Boolean constants
+    (yyval.ConstVal) = ConstantBool::False;
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 107:
+#line 1494 "/proj/llvm/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));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 108:
+#line 1502 "/proj/llvm/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())
+      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);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 109:
+#line 1513 "/proj/llvm/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)
-      ThrowException("Index list invalid for constant getelementptr!");
+      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
-        ThrowException("Indices to constant getelementptr must be constants!");
+        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);
-  ;
-    break;}
-case 109:
-#line 1494 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[-5].ConstVal->getType() != Type::BoolTy)
-      ThrowException("Select condition must be of boolean type!");
-    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
-      ThrowException("Select operand types must match!");
-    yyval.ConstVal = ConstantExpr::getSelect(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
-  ;
-    break;}
-case 110:
-#line 1501 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
-      ThrowException("Binary operator types must match!");
+    (yyval.ConstVal) = ConstantExpr::getGetElementPtr((yyvsp[-2].ConstVal), IdxVec);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 110:
+#line 1545 "/proj/llvm/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())
+      GEN_ERROR("Select operand types must match!");
+    (yyval.ConstVal) = ConstantExpr::getSelect((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 111:
+#line 1553 "/proj/llvm/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()) {
       case Module::Pointer32: IntPtrTy = Type::IntTy; break;
       case Module::Pointer64: IntPtrTy = Type::LongTy; break;
-      default: ThrowException("invalid pointer binary constant expr!");
+      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());
     }
-  ;
-    break;}
-case 111:
-#line 1522 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
-      ThrowException("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())
-        ThrowException("Logical operator requires integral operands!");
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 112:
+#line 1575 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
+      GEN_ERROR("Logical operator types must match!");
+    if (!(yyvsp[-3].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);
-  ;
-    break;}
-case 112:
-#line 1532 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
-      ThrowException("setcc operand types must match!");
-    yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
-  ;
-    break;}
-case 113:
-#line 1537 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[-1].ConstVal->getType() != Type::UByteTy)
-      ThrowException("Shift count for shift constant must be unsigned byte!");
-    if (!yyvsp[-3].ConstVal->getType()->isInteger())
-      ThrowException("Shift constant expression requires integer operand!");
-    yyval.ConstVal = ConstantExpr::get(yyvsp[-5].OtherOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
-  ;
-    break;}
-case 114:
-#line 1544 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!ExtractElementInst::isValidOperands(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
-      ThrowException("Invalid extractelement operands!");
-    yyval.ConstVal = ConstantExpr::getExtractElement(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
-  ;
-    break;}
-case 115:
-#line 1549 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!InsertElementInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
-      ThrowException("Invalid insertelement operands!");
-    yyval.ConstVal = ConstantExpr::getInsertElement(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
-  ;
-    break;}
-case 116:
-#line 1554 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!ShuffleVectorInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
-      ThrowException("Invalid shufflevector operands!");
-    yyval.ConstVal = ConstantExpr::getShuffleVector(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
-  ;
-    break;}
-case 117:
-#line 1562 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    (yyval.ConstVector = yyvsp[-2].ConstVector)->push_back(yyvsp[0].ConstVal);
-  ;
-    break;}
-case 118:
-#line 1565 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ConstVector = new std::vector<Constant*>();
-    yyval.ConstVector->push_back(yyvsp[0].ConstVal);
-  ;
-    break;}
-case 119:
-#line 1572 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.BoolVal = false; ;
-    break;}
-case 120:
-#line 1572 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.BoolVal = true; ;
-    break;}
-case 121:
-#line 1582 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  yyval.ModuleVal = ParserResult = yyvsp[0].ModuleVal;
+    (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 113:
+#line 1586 "/proj/llvm/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));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 114:
+#line 1592 "/proj/llvm/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())
+      GEN_ERROR("Shift constant expression requires integer operand!");
+    (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].OtherOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 115:
+#line 1600 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
+      GEN_ERROR("Invalid extractelement operands!");
+    (yyval.ConstVal) = ConstantExpr::getExtractElement((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 116:
+#line 1606 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
+      GEN_ERROR("Invalid insertelement operands!");
+    (yyval.ConstVal) = ConstantExpr::getInsertElement((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 117:
+#line 1612 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
+      GEN_ERROR("Invalid shufflevector operands!");
+    (yyval.ConstVal) = ConstantExpr::getShuffleVector((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 118:
+#line 1621 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 119:
+#line 1625 "/proj/llvm/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 1633 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.BoolVal) = false; ;}
+    break;
+
+  case 121:
+#line 1633 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.BoolVal) = true; ;}
+    break;
+
+  case 122:
+#line 1643 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+  (yyval.ModuleVal) = ParserResult = (yyvsp[0].ModuleVal);
   CurModule.ModuleDone();
-;
-    break;}
-case 122:
-#line 1589 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ModuleVal = yyvsp[-1].ModuleVal;
+  CHECK_FOR_ERROR
+;}
+    break;
+
+  case 123:
+#line 1651 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
     CurFun.FunctionDone();
-  ;
-    break;}
-case 123:
-#line 1593 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ModuleVal = yyvsp[-1].ModuleVal;
-  ;
-    break;}
-case 124:
-#line 1596 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ModuleVal = yyvsp[-3].ModuleVal;
-  ;
-    break;}
-case 125:
-#line 1599 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ModuleVal = yyvsp[-1].ModuleVal;
-  ;
-    break;}
-case 126:
-#line 1602 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ModuleVal = CurModule.CurrentModule;
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 124:
+#line 1656 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 125:
+#line 1660 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ModuleVal) = (yyvsp[-3].ModuleVal);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 126:
+#line 1664 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 127:
+#line 1668 "/proj/llvm/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;
-      if (DID.Type == ValID::NameVal)
-        ThrowException("Reference to an undefined type: '"+DID.getName() + "'");
-      else
-        ThrowException("Reference to an undefined type: #" + itostr(DID.Num));
+      if (DID.Type == ValID::NameVal) {
+        GEN_ERROR("Reference to an undefined type: '"+DID.getName() + "'");
+      } else {
+        GEN_ERROR("Reference to an undefined type: #" + itostr(DID.Num));
+      }
     }
-  ;
-    break;}
-case 127:
-#line 1615 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 128:
+#line 1683 "/proj/llvm/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:
     //
@@ -3011,212 +3742,260 @@
     // 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;
-  ;
-    break;}
-case 128:
-#line 1635 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{       // Function prototypes can be in const pool
-  ;
-    break;}
-case 129:
-#line 1637 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{  // Asm blocks can be in the const pool
-  ;
-    break;}
-case 130:
-#line 1639 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[0].ConstVal == 0) ThrowException("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 1642 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    delete (yyvsp[0].TypeVal);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 129:
+#line 1704 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {       // Function prototypes can be in const pool
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 130:
+#line 1707 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {  // Asm blocks can be in the const pool
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 131:
+#line 1710 "/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 1713 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
     CurGV = 0;
-  ;
-    break;}
-case 132:
-#line 1645 "/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 1649 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 133:
+#line 1717 "/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 1721 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
     CurGV = 0;
-  ;
-    break;}
-case 134:
-#line 1652 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ 
-  ;
-    break;}
-case 135:
-#line 1654 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  ;
-    break;}
-case 136:
-#line 1656 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ 
-  ;
-    break;}
-case 137:
-#line 1660 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 135:
+#line 1725 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { 
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 136:
+#line 1728 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 137:
+#line 1731 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { 
+  ;}
+    break;
+
+  case 138:
+#line 1735 "/proj/llvm/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);
-;
-    break;}
-case 138:
-#line 1672 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Endianness = Module::BigEndian; ;
-    break;}
-case 139:
-#line 1673 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Endianness = Module::LittleEndian; ;
-    break;}
-case 140:
-#line 1675 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    CurModule.CurrentModule->setEndianness(yyvsp[0].Endianness);
-  ;
-    break;}
-case 141:
-#line 1678 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[0].UInt64Val == 32)
+  CHECK_FOR_ERROR
+;}
+    break;
+
+  case 139:
+#line 1748 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Endianness) = Module::BigEndian; ;}
+    break;
+
+  case 140:
+#line 1749 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Endianness) = Module::LittleEndian; ;}
+    break;
+
+  case 141:
+#line 1751 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    CurModule.CurrentModule->setEndianness((yyvsp[0].Endianness));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 142:
+#line 1755 "/proj/llvm/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
-      ThrowException("Invalid pointer size: '" + utostr(yyvsp[0].UInt64Val) + "'!");
-  ;
-    break;}
-case 142:
-#line 1686 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    CurModule.CurrentModule->setTargetTriple(yyvsp[0].StrVal);
-    free(yyvsp[0].StrVal);
-  ;
-    break;}
-case 144:
-#line 1693 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-          CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
-          free(yyvsp[0].StrVal);
-        ;
-    break;}
-case 145:
-#line 1697 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-          CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
-          free(yyvsp[0].StrVal);
-        ;
-    break;}
-case 146:
-#line 1701 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-        ;
-    break;}
-case 150:
-#line 1710 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.StrVal = 0; ;
-    break;}
-case 151:
-#line 1712 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  if (*yyvsp[-1].TypeVal == Type::VoidTy)
-    ThrowException("void typed arguments are invalid!");
-  yyval.ArgVal = new std::pair<PATypeHolder*, char*>(yyvsp[-1].TypeVal, yyvsp[0].StrVal);
-;
-    break;}
-case 152:
-#line 1718 "/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;
-  ;
-    break;}
-case 153:
-#line 1723 "/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;
-  ;
-    break;}
-case 154:
-#line 1729 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ArgList = yyvsp[0].ArgList;
-  ;
-    break;}
-case 155:
-#line 1732 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ArgList = yyvsp[-2].ArgList;
-    yyval.ArgList->push_back(std::pair<PATypeHolder*,
+      GEN_ERROR("Invalid pointer size: '" + utostr((yyvsp[0].UInt64Val)) + "'!");
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 143:
+#line 1764 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal));
+    free((yyvsp[0].StrVal));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 145:
+#line 1772 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+          CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
+          free((yyvsp[0].StrVal));
+          CHECK_FOR_ERROR
+        ;}
+    break;
+
+  case 146:
+#line 1777 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+          CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
+          free((yyvsp[0].StrVal));
+          CHECK_FOR_ERROR
+        ;}
+    break;
+
+  case 147:
+#line 1782 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+          CHECK_FOR_ERROR
+        ;}
+    break;
+
+  case 151:
+#line 1792 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.StrVal) = 0; ;}
+    break;
+
+  case 152:
+#line 1794 "/proj/llvm/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));
+  CHECK_FOR_ERROR
+;}
+    break;
+
+  case 153:
+#line 1801 "/proj/llvm/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 1807 "/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);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 155:
+#line 1814 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ArgList) = (yyvsp[0].ArgList);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 156:
+#line 1818 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ArgList) = (yyvsp[-2].ArgList);
+    (yyval.ArgList)->push_back(std::pair<PATypeHolder*,
                             char*>(new PATypeHolder(Type::VoidTy), 0));
-  ;
-    break;}
-case 156:
-#line 1737 "/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));
-  ;
-    break;}
-case 157:
-#line 1741 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ArgList = 0;
-  ;
-    break;}
-case 158:
-#line 1746 "/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!
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 157:
+#line 1824 "/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));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 158:
+#line 1829 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ArgList) = 0;
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 159:
+#line 1835 "/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!
   
-  if (!(*yyvsp[-6].TypeVal)->isFirstClassType() && *yyvsp[-6].TypeVal != Type::VoidTy)
-    ThrowException("LLVM functions cannot return aggregate types!");
+  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()) {
@@ -3238,7 +4017,7 @@
     // If this is the case, either we need to be a forward decl, or it needs 
     // to be.
     if (!CurFun.isDeclare && !Fn->isExternal())
-      ThrowException("Redefinition of function '" + FunctionName + "'!");
+      GEN_ERROR("Redefinition of function '" + FunctionName + "'!");
     
     // Make sure to strip off any argument names so we can't get conflicts.
     if (Fn->isExternal())
@@ -3253,126 +4032,154 @@
   }
 
   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
   }
-;
-    break;}
-case 161:
-#line 1833 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  yyval.FunctionVal = CurFun.CurrentFunction;
+  CHECK_FOR_ERROR
+;}
+    break;
+
+  case 162:
+#line 1923 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+  (yyval.FunctionVal) = CurFun.CurrentFunction;
 
   // Make sure that we keep track of the linkage type even if there was a
   // previous "declare".
-  yyval.FunctionVal->setLinkage(yyvsp[-2].Linkage);
-;
-    break;}
-case 164:
-#line 1843 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  yyval.FunctionVal = yyvsp[-1].FunctionVal;
-;
-    break;}
-case 165:
-#line 1847 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ CurFun.isDeclare = true; ;
-    break;}
-case 166:
-#line 1847 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  yyval.FunctionVal = CurFun.CurrentFunction;
+  (yyval.FunctionVal)->setLinkage((yyvsp[-2].Linkage));
+;}
+    break;
+
+  case 165:
+#line 1933 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+  (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
+  CHECK_FOR_ERROR
+;}
+    break;
+
+  case 166:
+#line 1938 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { CurFun.isDeclare = true; ;}
+    break;
+
+  case 167:
+#line 1938 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+  (yyval.FunctionVal) = CurFun.CurrentFunction;
   CurFun.FunctionDone();
-;
-    break;}
-case 167:
-#line 1856 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BoolVal = false;
-  ;
-    break;}
-case 168:
-#line 1859 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BoolVal = true;
-  ;
-    break;}
-case 169:
-#line 1863 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{    // A reference to a direct constant
-    yyval.ValIDVal = ValID::create(yyvsp[0].SInt64Val);
-  ;
-    break;}
-case 170:
-#line 1866 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::create(yyvsp[0].UInt64Val);
-  ;
-    break;}
-case 171:
-#line 1869 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                     // Perhaps it's an FP constant?
-    yyval.ValIDVal = ValID::create(yyvsp[0].FPVal);
-  ;
-    break;}
-case 172:
-#line 1872 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::create(ConstantBool::True);
-  ;
-    break;}
-case 173:
-#line 1875 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::create(ConstantBool::False);
-  ;
-    break;}
-case 174:
-#line 1878 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::createNull();
-  ;
-    break;}
-case 175:
-#line 1881 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::createUndef();
-  ;
-    break;}
-case 176:
-#line 1884 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{     // A vector zero constant.
-    yyval.ValIDVal = ValID::createZeroInit();
-  ;
-    break;}
-case 177:
-#line 1887 "/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(); 
+  CHECK_FOR_ERROR
+;}
+    break;
+
+  case 168:
+#line 1948 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.BoolVal) = false;
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 169:
+#line 1952 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.BoolVal) = true;
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 170:
+#line 1957 "/proj/llvm/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 1961 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 172:
+#line 1965 "/proj/llvm/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 1969 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::create(ConstantBool::True);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 174:
+#line 1973 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::create(ConstantBool::False);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 175:
+#line 1977 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::createNull();
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 176:
+#line 1981 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::createUndef();
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 177:
+#line 1985 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {     // A vector zero constant.
+    (yyval.ValIDVal) = ValID::createZeroInit();
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 178:
+#line 1989 "/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(); 
     
     PackedType* pt = PackedType::get(ETy, NumElements);
     PATypeHolder* PTy = new PATypeHolder(
@@ -3384,169 +4191,205 @@
                                          );
     
     // Verify all elements are correct type!
-    for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
-      if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
-        ThrowException("Element #" + utostr(i) + " is not of type '" + 
+    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;
-  ;
-    break;}
-case 178:
-#line 1911 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::create(yyvsp[0].ConstVal);
-  ;
-    break;}
-case 179:
-#line 1914 "/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);
-  ;
-    break;}
-case 180:
-#line 1927 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{  // Is it an integer reference...?
-    yyval.ValIDVal = ValID::create(yyvsp[0].SIntVal);
-  ;
-    break;}
-case 181:
-#line 1930 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                   // Is it a named reference...?
-    yyval.ValIDVal = ValID::create(yyvsp[0].StrVal);
-  ;
-    break;}
-case 184:
-#line 1941 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValueVal = getVal(*yyvsp[-1].TypeVal, yyvsp[0].ValIDVal); delete yyvsp[-1].TypeVal;
-  ;
-    break;}
-case 185:
-#line 1945 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.FunctionVal = yyvsp[-1].FunctionVal;
-  ;
-    break;}
-case 186:
-#line 1948 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ // Do not allow functions with 0 basic blocks   
-    yyval.FunctionVal = yyvsp[-1].FunctionVal;
-  ;
-    break;}
-case 187:
-#line 1956 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    setValueName(yyvsp[0].TermInstVal, yyvsp[-1].StrVal);
-    InsertValue(yyvsp[0].TermInstVal);
+    (yyval.ValIDVal) = ValID::create(ConstantPacked::get(pt, *(yyvsp[-1].ConstVector)));
+    delete PTy; delete (yyvsp[-1].ConstVector);
+    CHECK_FOR_ERROR
+  ;}
+    break;
 
-    yyvsp[-2].BasicBlockVal->getInstList().push_back(yyvsp[0].TermInstVal);
-    InsertValue(yyvsp[-2].BasicBlockVal);
-    yyval.BasicBlockVal = yyvsp[-2].BasicBlockVal;
-  ;
-    break;}
-case 188:
-#line 1965 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyvsp[-1].BasicBlockVal->getInstList().push_back(yyvsp[0].InstVal);
-    yyval.BasicBlockVal = yyvsp[-1].BasicBlockVal;
-  ;
-    break;}
-case 189:
-#line 1969 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BasicBlockVal = CurBB = getBBVal(ValID::create((int)CurFun.NextBBNum++), true);
+  case 179:
+#line 2014 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 180:
+#line 2018 "/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));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 181:
+#line 2032 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {  // Is it an integer reference...?
+    (yyval.ValIDVal) = ValID::create((yyvsp[0].SIntVal));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 182:
+#line 2036 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {                   // Is it a named reference...?
+    (yyval.ValIDVal) = ValID::create((yyvsp[0].StrVal));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 185:
+#line 2048 "/proj/llvm/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 2053 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 187:
+#line 2057 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { // Do not allow functions with 0 basic blocks   
+    (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 188:
+#line 2066 "/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);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 189:
+#line 2076 "/proj/llvm/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 2081 "/proj/llvm/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);
-  ;
-    break;}
-case 190:
-#line 1979 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BasicBlockVal = CurBB = getBBVal(ValID::create(yyvsp[0].StrVal), true);
+    BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 191:
+#line 2092 "/proj/llvm/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);
-  ;
-    break;}
-case 191:
-#line 1990 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{              // Return with a result...
-    yyval.TermInstVal = new ReturnInst(yyvsp[0].ValueVal);
-  ;
-    break;}
-case 192:
-#line 1993 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                                       // Return with no result...
-    yyval.TermInstVal = new ReturnInst();
-  ;
-    break;}
-case 193:
-#line 1996 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                         // Unconditional Branch...
-    yyval.TermInstVal = new BranchInst(getBBVal(yyvsp[0].ValIDVal));
-  ;
-    break;}
-case 194:
-#line 1999 "/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));
-  ;
-    break;}
-case 195:
-#line 2002 "/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;
+    BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
+    CHECK_FOR_ERROR
+  ;}
+    break;
 
-    std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = yyvsp[-1].JumpTable->begin(),
-      E = yyvsp[-1].JumpTable->end();
+  case 192:
+#line 2104 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {              // Return with a result...
+    (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 193:
+#line 2108 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {                                       // Return with no result...
+    (yyval.TermInstVal) = new ReturnInst();
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 194:
+#line 2112 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {                         // Unconditional Branch...
+    (yyval.TermInstVal) = new BranchInst(getBBVal((yyvsp[0].ValIDVal)));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 195:
+#line 2116 "/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)));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 196:
+#line 2120 "/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();
     for (; I != E; ++I) {
       if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
           S->addCase(CI, I->second);
       else
-        ThrowException("Switch case is constant, but not a simple integer!");
+        GEN_ERROR("Switch case is constant, but not a simple integer!");
     }
-    delete yyvsp[-1].JumpTable;
-  ;
-    break;}
-case 196:
-#line 2016 "/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;
-  ;
-    break;}
-case 197:
-#line 2021 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    delete (yyvsp[-1].JumpTable);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 197:
+#line 2135 "/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;
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 198:
+#line 2141 "/proj/llvm/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());
       }
@@ -3554,232 +4397,273 @@
       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)
-          ThrowException("Parameter " +(*ArgI)->getName()+ " is not of type '" +
+          GEN_ERROR("Parameter " +(*ArgI)->getName()+ " is not of type '" +
                          (*I)->getDescription() + "'!");
 
       if (I != E || (ArgI != ArgE && !Ty->isVarArg()))
-        ThrowException("Invalid number of parameters detected!");
+        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;
-  ;
-    break;}
-case 198:
-#line 2073 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TermInstVal = new UnwindInst();
-  ;
-    break;}
-case 199:
-#line 2076 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TermInstVal = new UnreachableInst();
-  ;
-    break;}
-case 200:
-#line 2082 "/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)
-      ThrowException("May only switch on a constant pool value!");
+    delete (yyvsp[-10].TypeVal);
+    delete (yyvsp[-7].ValueList);
+    CHECK_FOR_ERROR
+  ;}
+    break;
 
-    yyval.JumpTable->push_back(std::make_pair(V, getBBVal(yyvsp[0].ValIDVal)));
-  ;
-    break;}
-case 201:
-#line 2090 "/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));
+  case 199:
+#line 2194 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TermInstVal) = new UnwindInst();
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 200:
+#line 2198 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TermInstVal) = new UnreachableInst();
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 201:
+#line 2205 "/proj/llvm/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))));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 202:
+#line 2214 "/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)));
 
     if (V == 0)
-      ThrowException("May only switch on a constant pool value!");
+      GEN_ERROR("May only switch on a constant pool value!");
 
-    yyval.JumpTable->push_back(std::make_pair(V, getBBVal(yyvsp[0].ValIDVal)));
-  ;
-    break;}
-case 202:
-#line 2100 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    (yyval.JumpTable)->push_back(std::make_pair(V, getBBVal((yyvsp[0].ValIDVal))));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 203:
+#line 2225 "/proj/llvm/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;
-;
-    break;}
-case 203:
-#line 2107 "/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;
-  ;
-    break;}
-case 204:
-#line 2112 "/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)));
-  ;
-    break;}
-case 205:
-#line 2119 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{    // Used for call statements, and memory insts...
-    yyval.ValueList = new std::vector<Value*>();
-    yyval.ValueList->push_back(yyvsp[0].ValueVal);
-  ;
-    break;}
-case 206:
-#line 2123 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValueList = yyvsp[-2].ValueList;
-    yyvsp[-2].ValueList->push_back(yyvsp[0].ValueVal);
-  ;
-    break;}
-case 208:
-#line 2129 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ValueList = 0; ;
-    break;}
-case 209:
-#line 2131 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BoolVal = true;
-  ;
-    break;}
-case 210:
-#line 2134 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BoolVal = false;
-  ;
-    break;}
-case 211:
-#line 2140 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!(*yyvsp[-3].TypeVal)->isInteger() && !(*yyvsp[-3].TypeVal)->isFloatingPoint() && 
-        !isa<PackedType>((*yyvsp[-3].TypeVal).get()))
-      ThrowException(
+  setValueName((yyvsp[0].InstVal), (yyvsp[-1].StrVal));
+  InsertValue((yyvsp[0].InstVal));
+  (yyval.InstVal) = (yyvsp[0].InstVal);
+  CHECK_FOR_ERROR
+;}
+    break;
+
+  case 204:
+#line 2233 "/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);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 205:
+#line 2239 "/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))));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 206:
+#line 2247 "/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));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 207:
+#line 2252 "/proj/llvm/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 2259 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ValueList) = 0; ;}
+    break;
+
+  case 210:
+#line 2261 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.BoolVal) = true;
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 211:
+#line 2265 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.BoolVal) = false;
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 212:
+#line 2272 "/proj/llvm/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)
-      ThrowException("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)
-      ThrowException("binary operator returned null!");
-    delete yyvsp[-3].TypeVal;
-  ;
-    break;}
-case 212:
-#line 2152 "/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())
-        ThrowException("Logical operator requires integral operands!");
+    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)
+      GEN_ERROR("binary operator returned null!");
+    delete (yyvsp[-3].TypeVal);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 213:
+#line 2285 "/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())
+        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)
-      ThrowException("binary operator returned null!");
-    delete yyvsp[-3].TypeVal;
-  ;
-    break;}
-case 213:
-#line 2163 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if(isa<PackedType>((*yyvsp[-3].TypeVal).get())) {
-      ThrowException(
+    (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);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 214:
+#line 2297 "/proj/llvm/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)
-      ThrowException("binary operator returned null!");
-    delete yyvsp[-3].TypeVal;
-  ;
-    break;}
-case 214:
-#line 2173 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    (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);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 215:
+#line 2308 "/proj/llvm/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)
-      ThrowException("Expected integral type for not instruction!");
+      GEN_ERROR("Expected integral type for not instruction!");
 
-    yyval.InstVal = BinaryOperator::create(Instruction::Xor, yyvsp[0].ValueVal, Ones);
-    if (yyval.InstVal == 0)
-      ThrowException("Could not create a xor instruction!");
-  ;
-    break;}
-case 215:
-#line 2185 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[0].ValueVal->getType() != Type::UByteTy)
-      ThrowException("Shift amount must be ubyte!");
-    if (!yyvsp[-2].ValueVal->getType()->isInteger())
-      ThrowException("Shift constant expression requires integer operand!");
-    yyval.InstVal = new ShiftInst(yyvsp[-3].OtherOpVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
-  ;
-    break;}
-case 216:
-#line 2192 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!yyvsp[0].TypeVal->get()->isFirstClassType())
-      ThrowException("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;
-  ;
-    break;}
-case 217:
-#line 2199 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[-4].ValueVal->getType() != Type::BoolTy)
-      ThrowException("select condition must be boolean!");
-    if (yyvsp[-2].ValueVal->getType() != yyvsp[0].ValueVal->getType())
-      ThrowException("select value types should match!");
-    yyval.InstVal = new SelectInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
-  ;
-    break;}
-case 218:
-#line 2206 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    (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 2321 "/proj/llvm/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())
+      GEN_ERROR("Shift constant expression requires integer operand!");
+    (yyval.InstVal) = new ShiftInst((yyvsp[-3].OtherOpVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 217:
+#line 2329 "/proj/llvm/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);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 218:
+#line 2337 "/proj/llvm/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())
+      GEN_ERROR("select value types should match!");
+    (yyval.InstVal) = new SelectInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 219:
+#line 2345 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
     NewVarArgs = true;
-    yyval.InstVal = new VAArgInst(yyvsp[-2].ValueVal, *yyvsp[0].TypeVal);
-    delete yyvsp[0].TypeVal;
-  ;
-    break;}
-case 219:
-#line 2211 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    (yyval.InstVal) = new VAArgInst((yyvsp[-2].ValueVal), *(yyvsp[0].TypeVal));
+    delete (yyvsp[0].TypeVal);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 220:
+#line 2351 "/proj/llvm/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);
 
@@ -3790,18 +4674,20 @@
     //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;
-  ;
-    break;}
-case 220:
-#line 2230 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    (yyval.InstVal) = new VAArgInst(foo, *(yyvsp[0].TypeVal));
+    delete (yyvsp[0].TypeVal);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 221:
+#line 2371 "/proj/llvm/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);
 
@@ -3813,68 +4699,78 @@
     //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;
-  ;
-    break;}
-case 221:
-#line 2252 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!ExtractElementInst::isValidOperands(yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
-      ThrowException("Invalid extractelement operands!");
-    yyval.InstVal = new ExtractElementInst(yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
-  ;
-    break;}
-case 222:
-#line 2257 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!InsertElementInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
-      ThrowException("Invalid insertelement operands!");
-    yyval.InstVal = new InsertElementInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
-  ;
-    break;}
-case 223:
-#line 2262 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!ShuffleVectorInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
-      ThrowException("Invalid shufflevector operands!");
-    yyval.InstVal = new ShuffleVectorInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
-  ;
-    break;}
-case 224:
-#line 2267 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    const Type *Ty = yyvsp[0].PHIList->front().first->getType();
+    (yyval.InstVal) = new LoadInst(foo);
+    delete (yyvsp[0].TypeVal);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 222:
+#line 2394 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
+      GEN_ERROR("Invalid extractelement operands!");
+    (yyval.InstVal) = new ExtractElementInst((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 223:
+#line 2400 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
+      GEN_ERROR("Invalid insertelement operands!");
+    (yyval.InstVal) = new InsertElementInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 224:
+#line 2406 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
+      GEN_ERROR("Invalid shufflevector operands!");
+    (yyval.InstVal) = new ShuffleVectorInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 225:
+#line 2412 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    const Type *Ty = (yyvsp[0].PHIList)->front().first->getType();
     if (!Ty->isFirstClassType())
-      ThrowException("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) 
-        ThrowException("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();
+      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) 
+        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();
     }
-    delete yyvsp[0].PHIList;  // Free the list...
-  ;
-    break;}
-case 225:
-#line 2281 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    delete (yyvsp[0].PHIList);  // Free the list...
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 226:
+#line 2427 "/proj/llvm/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());
       }
@@ -3882,390 +4778,478 @@
       bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy;
       if (isVarArg) ParamTypes.pop_back();
 
-      if (!(*yyvsp[-4].TypeVal)->isFirstClassType() && *yyvsp[-4].TypeVal != Type::VoidTy)
-        ThrowException("LLVM functions cannot return aggregate types!");
+      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)
-        ThrowException("No arguments passed to a function that "
+        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)
-          ThrowException("Parameter " +(*ArgI)->getName()+ " is not of type '" +
+          GEN_ERROR("Parameter " +(*ArgI)->getName()+ " is not of type '" +
                          (*I)->getDescription() + "'!");
 
       if (I != E || (ArgI != ArgE && !Ty->isVarArg()))
-        ThrowException("Invalid number of parameters detected!");
+        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;
-  ;
-    break;}
-case 226:
-#line 2338 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.InstVal = yyvsp[0].InstVal;
-  ;
-    break;}
-case 227:
-#line 2344 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ 
-    yyval.ValueList = yyvsp[0].ValueList; 
-  ;
-    break;}
-case 228:
-#line 2346 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ 
-    yyval.ValueList = new std::vector<Value*>(); 
-  ;
-    break;}
-case 229:
-#line 2350 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BoolVal = true;
-  ;
-    break;}
-case 230:
-#line 2353 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BoolVal = false;
-  ;
-    break;}
-case 231:
-#line 2359 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.InstVal = new MallocInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal);
-    delete yyvsp[-1].TypeVal;
-  ;
-    break;}
-case 232:
-#line 2363 "/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;
-  ;
-    break;}
-case 233:
-#line 2367 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.InstVal = new AllocaInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal);
-    delete yyvsp[-1].TypeVal;
-  ;
-    break;}
-case 234:
-#line 2371 "/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;
-  ;
-    break;}
-case 235:
-#line 2375 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!isa<PointerType>(yyvsp[0].ValueVal->getType()))
-      ThrowException("Trying to free nonpointer type " + 
-                     yyvsp[0].ValueVal->getType()->getDescription() + "!");
-    yyval.InstVal = new FreeInst(yyvsp[0].ValueVal);
-  ;
-    break;}
-case 236:
-#line 2382 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!isa<PointerType>(yyvsp[-1].TypeVal->get()))
-      ThrowException("Can't load from nonpointer type: " +
-                     (*yyvsp[-1].TypeVal)->getDescription());
-    if (!cast<PointerType>(yyvsp[-1].TypeVal->get())->getElementType()->isFirstClassType())
-      ThrowException("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;
-  ;
-    break;}
-case 237:
-#line 2392 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    const PointerType *PT = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
+    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 2485 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.InstVal) = (yyvsp[0].InstVal);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 228:
+#line 2492 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { 
+    (yyval.ValueList) = (yyvsp[0].ValueList); 
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 229:
+#line 2495 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    { 
+    (yyval.ValueList) = new std::vector<Value*>(); 
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 230:
+#line 2500 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.BoolVal) = true;
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 231:
+#line 2504 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.BoolVal) = false;
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 232:
+#line 2511 "/proj/llvm/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 2516 "/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);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 234:
+#line 2521 "/proj/llvm/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 2526 "/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);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 236:
+#line 2531 "/proj/llvm/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));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 237:
+#line 2539 "/proj/llvm/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())
+      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);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 238:
+#line 2550 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+    const PointerType *PT = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
     if (!PT)
-      ThrowException("Can't store to a nonpointer type: " +
-                     (*yyvsp[-1].TypeVal)->getDescription());
+      GEN_ERROR("Can't store to a nonpointer type: " +
+                     (*(yyvsp[-1].TypeVal))->getDescription());
     const Type *ElTy = PT->getElementType();
-    if (ElTy != yyvsp[-3].ValueVal->getType())
-      ThrowException("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;
-  ;
-    break;}
-case 238:
-#line 2405 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!isa<PointerType>(yyvsp[-2].TypeVal->get()))
-      ThrowException("getelementptr insn requires pointer operand!");
+    (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 2564 "/proj/llvm/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))
-      ThrowException("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;
-  ;
-    break;}
-}
-   /* the action file gets copied in in place of this dollarsign */
-#line 543 "/usr/share/bison.simple"
+    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);
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+
+      default: break;
+    }
+
+/* Line 1126 of yacc.c.  */
+#line 4976 "llvmAsmParser.tab.c"
 
   yyvsp -= yylen;
   yyssp -= yylen;
-#ifdef YYLSP_NEEDED
-  yylsp -= yylen;
-#endif
 
-#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
+
+  YY_STACK_PRINT (yyss, yyssp);
 
   *++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 - YYNTBASE] + *yyssp;
-  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
     yystate = yytable[yystate];
   else
-    yystate = yydefgoto[yyn - YYNTBASE];
+    yystate = yydefgoto[yyn - YYNTOKENS];
 
   goto yynewstate;
 
-yyerrlab:   /* here on detecting error */
 
-  if (! yyerrstatus)
-    /* If not already recovering from an error, report this error.  */
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
     {
       ++yynerrs;
-
-#ifdef YYERROR_VERBOSE
+#if YYERROR_VERBOSE
       yyn = yypact[yystate];
 
-      if (yyn > YYFLAG && yyn < YYLAST)
+      if (YYPACT_NINF < yyn && yyn < YYLAST)
 	{
-	  int size = 0;
-	  char *msg;
-	  int x, count;
+	  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;
 
-	  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)
+#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)
 	    {
-	      strcpy(msg, "parse error");
-
-	      if (count < 5)
+	      /* 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))
 		{
-		  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++;
-		      }
+		  if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+		    {
+		      yyp += yytnamerr (yyp, yyarg[yyi++]);
+		      yyf += 2;
+		    }
+		  else
+		    {
+		      yyp++;
+		      yyf++;
+		    }
 		}
-	      yyerror(msg);
-	      free(msg);
+	      yyerror (yymsg);
+	      YYSTACK_FREE (yymsg);
 	    }
 	  else
-	    yyerror ("parse error; also virtual memory exceeded");
+	    {
+	      yyerror (YY_("syntax error"));
+	      goto yyexhaustedlab;
+	    }
 	}
       else
 #endif /* YYERROR_VERBOSE */
-	yyerror("parse error");
+	yyerror (YY_("syntax error"));
     }
 
-  goto yyerrlab1;
-yyerrlab1:   /* here on error raised explicitly by an action */
+
 
   if (yyerrstatus == 3)
     {
-      /* if just tried and failed to reuse lookahead token after an error, discard it.  */
+      /* If just tried and failed to reuse look-ahead token after an
+	 error, discard it.  */
 
-      /* return failure if at end of input */
-      if (yychar == YYEOF)
+      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)
 	YYABORT;
 
-#if YYDEBUG != 0
-      if (yydebug)
-	fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
-#endif
 
-      yychar = YYEMPTY;
+      yydestruct ("Error: popping", yystos[yystate], yyvsp);
+      YYPOPSTACK;
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
     }
 
-  /* 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;
-#ifdef YYLSP_NEEDED
-  *++yylsp = yylloc;
-#endif
+
+
+  /* Shift the error token. */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
 
   yystate = yyn;
   goto yynewstate;
 
- yyacceptlab:
-  /* YYACCEPT comes here.  */
-  if (yyfree_stacks)
-    {
-      free (yyss);
-      free (yyvs);
-#ifdef YYLSP_NEEDED
-      free (yyls);
-#endif
-    }
-  return 0;
 
- yyabortlab:
-  /* YYABORT comes here.  */
-  if (yyfree_stacks)
-    {
-      free (yyss);
-      free (yyvs);
-#ifdef YYLSP_NEEDED
-      free (yyls);
+/*-------------------------------------.
+| 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)
+    {
+      yydestruct ("Cleanup: popping",
+		  yystos[*yyssp], yyvsp);
+      YYPOPSTACK;
     }
-  return 1;
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+  return yyresult;
 }
-#line 2428 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+
+
+#line 2588 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
+
+
+void llvm::GenerateError(const std::string &message, int LineNo) {
+  if (LineNo == -1) LineNo = llvmAsmlineno;
+  // TODO: column number in exception
+  if (TheParseError)
+    TheParseError->setError(CurFilename, message, LineNo);
+  TriggerError = 1;
+}
 
 int yyerror(const char *ErrorMsg) {
   std::string where 
@@ -4276,6 +5260,7 @@
     errMsg += "end-of-file.";
   else
     errMsg += "token: '" + std::string(llvmAsmtext, llvmAsmleng) + "'";
-  ThrowException(errMsg);
+  GenerateError(errMsg);
   return 0;
 }
+
