diff --git a/tools/llvm-upgrade/UpgradeParser.cpp b/tools/llvm-upgrade/UpgradeParser.cpp
index 0e4e5c8..939c85f 100644
--- a/tools/llvm-upgrade/UpgradeParser.cpp
+++ b/tools/llvm-upgrade/UpgradeParser.cpp
@@ -1,168 +1,376 @@
+/* A Bison parser, made by GNU Bison 2.1.  */
 
-/*  A Bison parser, made from /Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.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 Upgradeparse
-#define yylex Upgradelex
+#define yylex   Upgradelex
 #define yyerror Upgradeerror
-#define yylval Upgradelval
-#define yychar Upgradechar
+#define yylval  Upgradelval
+#define yychar  Upgradechar
 #define yydebug Upgradedebug
 #define yynerrs Upgradenerrs
-#define	VOID	257
-#define	BOOL	258
-#define	SBYTE	259
-#define	UBYTE	260
-#define	SHORT	261
-#define	USHORT	262
-#define	INT	263
-#define	UINT	264
-#define	LONG	265
-#define	ULONG	266
-#define	FLOAT	267
-#define	DOUBLE	268
-#define	LABEL	269
-#define	OPAQUE	270
-#define	ESINT64VAL	271
-#define	EUINT64VAL	272
-#define	SINTVAL	273
-#define	UINTVAL	274
-#define	FPVAL	275
-#define	NULL_TOK	276
-#define	UNDEF	277
-#define	ZEROINITIALIZER	278
-#define	TRUETOK	279
-#define	FALSETOK	280
-#define	TYPE	281
-#define	VAR_ID	282
-#define	LABELSTR	283
-#define	STRINGCONSTANT	284
-#define	IMPLEMENTATION	285
-#define	BEGINTOK	286
-#define	ENDTOK	287
-#define	DECLARE	288
-#define	GLOBAL	289
-#define	CONSTANT	290
-#define	SECTION	291
-#define	VOLATILE	292
-#define	TO	293
-#define	DOTDOTDOT	294
-#define	CONST	295
-#define	INTERNAL	296
-#define	LINKONCE	297
-#define	WEAK	298
-#define	DLLIMPORT	299
-#define	DLLEXPORT	300
-#define	EXTERN_WEAK	301
-#define	APPENDING	302
-#define	NOT	303
-#define	EXTERNAL	304
-#define	TARGET	305
-#define	TRIPLE	306
-#define	ENDIAN	307
-#define	POINTERSIZE	308
-#define	LITTLE	309
-#define	BIG	310
-#define	ALIGN	311
-#define	UNINITIALIZED	312
-#define	DEPLIBS	313
-#define	CALL	314
-#define	TAIL	315
-#define	ASM_TOK	316
-#define	MODULE	317
-#define	SIDEEFFECT	318
-#define	CC_TOK	319
-#define	CCC_TOK	320
-#define	CSRETCC_TOK	321
-#define	FASTCC_TOK	322
-#define	COLDCC_TOK	323
-#define	X86_STDCALLCC_TOK	324
-#define	X86_FASTCALLCC_TOK	325
-#define	DATALAYOUT	326
-#define	RET	327
-#define	BR	328
-#define	SWITCH	329
-#define	INVOKE	330
-#define	EXCEPT	331
-#define	UNWIND	332
-#define	UNREACHABLE	333
-#define	ADD	334
-#define	SUB	335
-#define	MUL	336
-#define	DIV	337
-#define	UDIV	338
-#define	SDIV	339
-#define	FDIV	340
-#define	REM	341
-#define	UREM	342
-#define	SREM	343
-#define	FREM	344
-#define	AND	345
-#define	OR	346
-#define	XOR	347
-#define	SETLE	348
-#define	SETGE	349
-#define	SETLT	350
-#define	SETGT	351
-#define	SETEQ	352
-#define	SETNE	353
-#define	ICMP	354
-#define	FCMP	355
-#define	EQ	356
-#define	NE	357
-#define	SLT	358
-#define	SGT	359
-#define	SLE	360
-#define	SGE	361
-#define	OEQ	362
-#define	ONE	363
-#define	OLT	364
-#define	OGT	365
-#define	OLE	366
-#define	OGE	367
-#define	ORD	368
-#define	UNO	369
-#define	UEQ	370
-#define	UNE	371
-#define	ULT	372
-#define	UGT	373
-#define	ULE	374
-#define	UGE	375
-#define	MALLOC	376
-#define	ALLOCA	377
-#define	FREE	378
-#define	LOAD	379
-#define	STORE	380
-#define	GETELEMENTPTR	381
-#define	PHI_TOK	382
-#define	SELECT	383
-#define	SHL	384
-#define	SHR	385
-#define	ASHR	386
-#define	LSHR	387
-#define	VAARG	388
-#define	EXTRACTELEMENT	389
-#define	INSERTELEMENT	390
-#define	SHUFFLEVECTOR	391
-#define	CAST	392
-#define	TRUNC	393
-#define	ZEXT	394
-#define	SEXT	395
-#define	FPTRUNC	396
-#define	FPEXT	397
-#define	FPTOUI	398
-#define	FPTOSI	399
-#define	UITOFP	400
-#define	SITOFP	401
-#define	PTRTOINT	402
-#define	INTTOPTR	403
-#define	BITCAST	404
 
-#line 14 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
 
-#include "ParserInternals.h"
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     VOID = 258,
+     BOOL = 259,
+     SBYTE = 260,
+     UBYTE = 261,
+     SHORT = 262,
+     USHORT = 263,
+     INT = 264,
+     UINT = 265,
+     LONG = 266,
+     ULONG = 267,
+     FLOAT = 268,
+     DOUBLE = 269,
+     LABEL = 270,
+     OPAQUE = 271,
+     ESINT64VAL = 272,
+     EUINT64VAL = 273,
+     SINTVAL = 274,
+     UINTVAL = 275,
+     FPVAL = 276,
+     NULL_TOK = 277,
+     UNDEF = 278,
+     ZEROINITIALIZER = 279,
+     TRUETOK = 280,
+     FALSETOK = 281,
+     TYPE = 282,
+     VAR_ID = 283,
+     LABELSTR = 284,
+     STRINGCONSTANT = 285,
+     IMPLEMENTATION = 286,
+     BEGINTOK = 287,
+     ENDTOK = 288,
+     DECLARE = 289,
+     GLOBAL = 290,
+     CONSTANT = 291,
+     SECTION = 292,
+     VOLATILE = 293,
+     TO = 294,
+     DOTDOTDOT = 295,
+     CONST = 296,
+     INTERNAL = 297,
+     LINKONCE = 298,
+     WEAK = 299,
+     DLLIMPORT = 300,
+     DLLEXPORT = 301,
+     EXTERN_WEAK = 302,
+     APPENDING = 303,
+     NOT = 304,
+     EXTERNAL = 305,
+     TARGET = 306,
+     TRIPLE = 307,
+     ENDIAN = 308,
+     POINTERSIZE = 309,
+     LITTLE = 310,
+     BIG = 311,
+     ALIGN = 312,
+     UNINITIALIZED = 313,
+     DEPLIBS = 314,
+     CALL = 315,
+     TAIL = 316,
+     ASM_TOK = 317,
+     MODULE = 318,
+     SIDEEFFECT = 319,
+     CC_TOK = 320,
+     CCC_TOK = 321,
+     CSRETCC_TOK = 322,
+     FASTCC_TOK = 323,
+     COLDCC_TOK = 324,
+     X86_STDCALLCC_TOK = 325,
+     X86_FASTCALLCC_TOK = 326,
+     DATALAYOUT = 327,
+     RET = 328,
+     BR = 329,
+     SWITCH = 330,
+     INVOKE = 331,
+     EXCEPT = 332,
+     UNWIND = 333,
+     UNREACHABLE = 334,
+     ADD = 335,
+     SUB = 336,
+     MUL = 337,
+     DIV = 338,
+     UDIV = 339,
+     SDIV = 340,
+     FDIV = 341,
+     REM = 342,
+     UREM = 343,
+     SREM = 344,
+     FREM = 345,
+     AND = 346,
+     OR = 347,
+     XOR = 348,
+     SETLE = 349,
+     SETGE = 350,
+     SETLT = 351,
+     SETGT = 352,
+     SETEQ = 353,
+     SETNE = 354,
+     ICMP = 355,
+     FCMP = 356,
+     EQ = 357,
+     NE = 358,
+     SLT = 359,
+     SGT = 360,
+     SLE = 361,
+     SGE = 362,
+     OEQ = 363,
+     ONE = 364,
+     OLT = 365,
+     OGT = 366,
+     OLE = 367,
+     OGE = 368,
+     ORD = 369,
+     UNO = 370,
+     UEQ = 371,
+     UNE = 372,
+     ULT = 373,
+     UGT = 374,
+     ULE = 375,
+     UGE = 376,
+     MALLOC = 377,
+     ALLOCA = 378,
+     FREE = 379,
+     LOAD = 380,
+     STORE = 381,
+     GETELEMENTPTR = 382,
+     PHI_TOK = 383,
+     SELECT = 384,
+     SHL = 385,
+     SHR = 386,
+     ASHR = 387,
+     LSHR = 388,
+     VAARG = 389,
+     EXTRACTELEMENT = 390,
+     INSERTELEMENT = 391,
+     SHUFFLEVECTOR = 392,
+     CAST = 393,
+     TRUNC = 394,
+     ZEXT = 395,
+     SEXT = 396,
+     FPTRUNC = 397,
+     FPEXT = 398,
+     FPTOUI = 399,
+     FPTOSI = 400,
+     UITOFP = 401,
+     SITOFP = 402,
+     PTRTOINT = 403,
+     INTTOPTR = 404,
+     BITCAST = 405
+   };
+#endif
+/* Tokens.  */
+#define VOID 258
+#define BOOL 259
+#define SBYTE 260
+#define UBYTE 261
+#define SHORT 262
+#define USHORT 263
+#define INT 264
+#define UINT 265
+#define LONG 266
+#define ULONG 267
+#define FLOAT 268
+#define DOUBLE 269
+#define LABEL 270
+#define OPAQUE 271
+#define ESINT64VAL 272
+#define EUINT64VAL 273
+#define SINTVAL 274
+#define UINTVAL 275
+#define FPVAL 276
+#define NULL_TOK 277
+#define UNDEF 278
+#define ZEROINITIALIZER 279
+#define TRUETOK 280
+#define FALSETOK 281
+#define TYPE 282
+#define VAR_ID 283
+#define LABELSTR 284
+#define STRINGCONSTANT 285
+#define IMPLEMENTATION 286
+#define BEGINTOK 287
+#define ENDTOK 288
+#define DECLARE 289
+#define GLOBAL 290
+#define CONSTANT 291
+#define SECTION 292
+#define VOLATILE 293
+#define TO 294
+#define DOTDOTDOT 295
+#define CONST 296
+#define INTERNAL 297
+#define LINKONCE 298
+#define WEAK 299
+#define DLLIMPORT 300
+#define DLLEXPORT 301
+#define EXTERN_WEAK 302
+#define APPENDING 303
+#define NOT 304
+#define EXTERNAL 305
+#define TARGET 306
+#define TRIPLE 307
+#define ENDIAN 308
+#define POINTERSIZE 309
+#define LITTLE 310
+#define BIG 311
+#define ALIGN 312
+#define UNINITIALIZED 313
+#define DEPLIBS 314
+#define CALL 315
+#define TAIL 316
+#define ASM_TOK 317
+#define MODULE 318
+#define SIDEEFFECT 319
+#define CC_TOK 320
+#define CCC_TOK 321
+#define CSRETCC_TOK 322
+#define FASTCC_TOK 323
+#define COLDCC_TOK 324
+#define X86_STDCALLCC_TOK 325
+#define X86_FASTCALLCC_TOK 326
+#define DATALAYOUT 327
+#define RET 328
+#define BR 329
+#define SWITCH 330
+#define INVOKE 331
+#define EXCEPT 332
+#define UNWIND 333
+#define UNREACHABLE 334
+#define ADD 335
+#define SUB 336
+#define MUL 337
+#define DIV 338
+#define UDIV 339
+#define SDIV 340
+#define FDIV 341
+#define REM 342
+#define UREM 343
+#define SREM 344
+#define FREM 345
+#define AND 346
+#define OR 347
+#define XOR 348
+#define SETLE 349
+#define SETGE 350
+#define SETLT 351
+#define SETGT 352
+#define SETEQ 353
+#define SETNE 354
+#define ICMP 355
+#define FCMP 356
+#define EQ 357
+#define NE 358
+#define SLT 359
+#define SGT 360
+#define SLE 361
+#define SGE 362
+#define OEQ 363
+#define ONE 364
+#define OLT 365
+#define OGT 366
+#define OLE 367
+#define OGE 368
+#define ORD 369
+#define UNO 370
+#define UEQ 371
+#define UNE 372
+#define ULT 373
+#define UGT 374
+#define ULE 375
+#define UGE 376
+#define MALLOC 377
+#define ALLOCA 378
+#define FREE 379
+#define LOAD 380
+#define STORE 381
+#define GETELEMENTPTR 382
+#define PHI_TOK 383
+#define SELECT 384
+#define SHL 385
+#define SHR 386
+#define ASHR 387
+#define LSHR 388
+#define VAARG 389
+#define EXTRACTELEMENT 390
+#define INSERTELEMENT 391
+#define SHUFFLEVECTOR 392
+#define CAST 393
+#define TRUNC 394
+#define ZEXT 395
+#define SEXT 396
+#define FPTRUNC 397
+#define FPEXT 398
+#define FPTOUI 399
+#define FPTOSI 400
+#define UITOFP 401
+#define SITOFP 402
+#define PTRTOINT 403
+#define INTTOPTR 404
+#define BITCAST 405
+
+
+
+
+/* Copy the first part of user declarations.  */
+#line 14 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+
+#include "UpgradeInternals.h"
 #include <algorithm>
 #include <map>
 #include <utility>
@@ -195,11 +403,15 @@
 static bool deleteUselessCastFlag = false;
 static std::string* deleteUselessCastName = 0;
 
-typedef std::vector<TypeInfo> TypeVector;
+typedef std::vector<const TypeInfo*> TypeVector;
 static TypeVector EnumeratedTypes;
-typedef std::map<std::string,TypeInfo> TypeMap;
+typedef std::map<std::string,const TypeInfo*> TypeMap;
 static TypeMap NamedTypes;
-static TypeMap Globals;
+typedef std::map<const TypeInfo*,std::string> TypePlaneMap;
+typedef std::map<std::string,TypePlaneMap> GlobalsTypeMap;
+static GlobalsTypeMap Globals;
+
+static void warning(const std::string& msg);
 
 void destroy(ValueList* VL) {
   while (!VL->empty()) {
@@ -227,32 +439,261 @@
   }
 }
 
-TypeInfo* ResolveType(TypeInfo*& Ty) {
-  if (Ty->isUnresolved()) {
-    if (Ty->getNewTy()[0] == '%' && isdigit(Ty->getNewTy()[1])) {
-      unsigned ref = atoi(&((Ty->getNewTy().c_str())[1])); // skip the %
+TypeInfo::TypeRegMap TypeInfo::registry;
+
+const TypeInfo* TypeInfo::get(const std::string &newType, Types oldType) {
+  TypeInfo* Ty = new TypeInfo();
+  Ty->newTy = newType;
+  Ty->oldTy = oldType;
+  return add_new_type(Ty);
+}
+
+const TypeInfo* TypeInfo::get(const std::string& newType, Types oldType, 
+                              const TypeInfo* eTy, const TypeInfo* rTy) {
+  TypeInfo* Ty= new TypeInfo();
+  Ty->newTy = newType;
+  Ty->oldTy = oldType;
+  Ty->elemTy = const_cast<TypeInfo*>(eTy);
+  Ty->resultTy = const_cast<TypeInfo*>(rTy);
+  return add_new_type(Ty);
+}
+
+const TypeInfo* TypeInfo::get(const std::string& newType, Types oldType, 
+                              const TypeInfo *eTy, uint64_t elems) {
+  TypeInfo* Ty = new TypeInfo();
+  Ty->newTy = newType;
+  Ty->oldTy = oldType;
+  Ty->elemTy = const_cast<TypeInfo*>(eTy);
+  Ty->nelems = elems;
+  return  add_new_type(Ty);
+}
+
+const TypeInfo* TypeInfo::get(const std::string& newType, Types oldType, 
+                              TypeList* TL) {
+  TypeInfo* Ty = new TypeInfo();
+  Ty->newTy = newType;
+  Ty->oldTy = oldType;
+  Ty->elements = TL;
+  return add_new_type(Ty);
+}
+
+const TypeInfo* TypeInfo::get(const std::string& newType, const TypeInfo* resTy,
+                              TypeList* TL) {
+  TypeInfo* Ty = new TypeInfo();
+  Ty->newTy = newType;
+  Ty->oldTy = FunctionTy;
+  Ty->resultTy = const_cast<TypeInfo*>(resTy);
+  Ty->elements = TL;
+  return add_new_type(Ty);
+}
+
+const TypeInfo* TypeInfo::resolve() const {
+  if (isUnresolved()) {
+    if (getNewTy()[0] == '%' && isdigit(getNewTy()[1])) {
+      unsigned ref = atoi(&((getNewTy().c_str())[1])); // skip the %
       if (ref < EnumeratedTypes.size()) {
-        Ty = &EnumeratedTypes[ref];
-        return Ty;
+        return EnumeratedTypes[ref];
       } else {
         std::string msg("Can't resolve numbered type: ");
-        msg += Ty->getNewTy();
+        msg += getNewTy();
         yyerror(msg.c_str());
       }
     } else {
-      TypeMap::iterator I = NamedTypes.find(Ty->getNewTy());
+      TypeMap::iterator I = NamedTypes.find(getNewTy());
       if (I != NamedTypes.end()) {
-        Ty = &I->second;
-        return Ty;
+        return I->second;
       } else {
         std::string msg("Cannot resolve type: ");
-        msg += Ty->getNewTy();
+        msg += getNewTy();
         yyerror(msg.c_str());
       }
     }
   }
   // otherwise its already resolved.
-  return Ty;
+  return this;
+}
+
+bool TypeInfo::operator<(const TypeInfo& that) const {
+  if (this == &that)
+    return false;
+  if (oldTy != that.oldTy)
+    return oldTy < that.oldTy;
+  switch (oldTy) {
+    case UpRefTy: {
+      unsigned thisUp = this->getUpRefNum();
+      unsigned thatUp = that.getUpRefNum();
+      return thisUp < thatUp;
+    }
+    case PackedTy:
+    case ArrayTy:
+      if (this->nelems != that.nelems)
+        return nelems < that.nelems;
+    case PointerTy: {
+      const TypeInfo* thisTy = this->elemTy;
+      const TypeInfo* thatTy = that.elemTy;
+      return *thisTy < *thatTy;
+    }
+    case FunctionTy: {
+      const TypeInfo* thisTy = this->resultTy;
+      const TypeInfo* thatTy = that.resultTy;
+      if (!thisTy->sameOldTyAs(thatTy))
+        return *thisTy < *thatTy;
+      /* FALL THROUGH */
+    }
+    case StructTy:
+    case PackedStructTy: {
+      if (elements->size() != that.elements->size())
+        return elements->size() < that.elements->size();
+      for (unsigned i = 0; i < elements->size(); i++) {
+        const TypeInfo* thisTy = (*this->elements)[i];
+        const TypeInfo* thatTy = (*that.elements)[i];
+        if (!thisTy->sameOldTyAs(thatTy))
+          return *thisTy < *thatTy;
+      }
+      break;
+    }
+    case UnresolvedTy:
+      return this->newTy < that.newTy;
+    default:
+      break;
+  }
+  return false; 
+}
+
+bool TypeInfo::sameOldTyAs(const TypeInfo* that) const {
+  if (that == 0)
+    return false;
+  if ( this == that ) 
+    return true;
+  if (oldTy != that->oldTy)
+    return false;
+  switch (oldTy) {
+    case PackedTy:
+    case ArrayTy:
+      if (nelems != that->nelems)
+        return false;
+      /* FALL THROUGH */
+    case PointerTy: {
+      const TypeInfo* thisTy = this->elemTy;
+      const TypeInfo* thatTy = that->elemTy;
+      return thisTy->sameOldTyAs(thatTy);
+    }
+    case FunctionTy: {
+      const TypeInfo* thisTy = this->resultTy;
+      const TypeInfo* thatTy = that->resultTy;
+      if (!thisTy->sameOldTyAs(thatTy))
+        return false;
+      /* FALL THROUGH */
+    }
+    case StructTy:
+    case PackedStructTy: {
+      if (elements->size() != that->elements->size())
+        return false;
+      for (unsigned i = 0; i < elements->size(); i++) {
+        const TypeInfo* thisTy = (*this->elements)[i];
+        const TypeInfo* thatTy = (*that->elements)[i];
+        if (!thisTy->sameOldTyAs(thatTy))
+          return false;
+      }
+      return true;
+    }
+    case UnresolvedTy:
+      return this->newTy == that->newTy;
+    default:
+      return true; // for all others oldTy == that->oldTy is sufficient
+  }
+  return true;
+}
+
+bool TypeInfo::isUnresolvedDeep() const {
+  switch (oldTy) {
+    case UnresolvedTy: 
+      return true;
+    case PackedTy:
+    case ArrayTy:
+    case PointerTy:
+      return elemTy->isUnresolvedDeep();
+    case PackedStructTy:
+    case StructTy:
+      for (unsigned i = 0; i < elements->size(); i++)
+        if ((*elements)[i]->isUnresolvedDeep())
+          return true;
+      return false;
+    default:
+      return false;
+  }
+}
+
+unsigned TypeInfo::getBitWidth() const {
+  switch (oldTy) {
+    default:
+    case LabelTy:
+    case VoidTy : return 0;
+    case BoolTy : return 1;
+    case SByteTy: case UByteTy : return 8;
+    case ShortTy: case UShortTy : return 16;
+    case IntTy: case UIntTy: case FloatTy: return 32;
+    case LongTy: case ULongTy: case DoubleTy : return 64;
+    case PointerTy: return SizeOfPointer; // global var
+    case PackedTy: 
+    case ArrayTy: 
+      return nelems * elemTy->getBitWidth();
+    case StructTy:
+    case PackedStructTy: {
+      uint64_t size = 0;
+      for (unsigned i = 0; i < elements->size(); i++) {
+        size += (*elements)[i]->getBitWidth();
+      }
+      return size;
+    }
+  }
+}
+
+const TypeInfo* TypeInfo::getIndexedType(const ValueInfo&  VI) const {
+  if (isStruct()) {
+    if (VI.isConstant() && VI.type->isInteger()) {
+      size_t pos = VI.val->find(' ') + 1;
+      if (pos < VI.val->size()) {
+        uint64_t idx = atoi(VI.val->substr(pos).c_str());
+        return (*elements)[idx];
+      } else {
+        yyerror("Invalid value for constant integer");
+        return 0;
+      }
+    } else {
+      yyerror("Structure requires constant index");
+      return 0;
+    }
+  }
+  if (isArray() || isPacked() || isPointer())
+    return elemTy;
+  yyerror("Invalid type for getIndexedType");
+  return 0;
+}
+
+TypeInfo& TypeInfo::operator=(const TypeInfo& that) {
+  oldTy = that.oldTy;
+  nelems = that.nelems;
+  newTy = that.newTy;
+  elemTy = that.elemTy;
+  resultTy = that.resultTy;
+  if (that.elements) {
+    elements = new TypeList(that.elements->size());
+    *elements = *that.elements;
+  } else {
+    elements = 0;
+  }
+  return *this;
+}
+
+const TypeInfo* TypeInfo::add_new_type(TypeInfo* newTy) {
+  TypeRegMap::iterator I = registry.find(newTy);
+  if (I != registry.end()) {
+    delete newTy;
+    return *I;
+  }
+  registry.insert(newTy);
+  return newTy;
 }
 
 static const char* getCastOpcode(
@@ -333,8 +774,8 @@
   return opcode;
 }
 
-static std::string getCastUpgrade(const std::string& Src, TypeInfo* SrcTy,
-                                  TypeInfo* DstTy, bool isConst)
+static std::string getCastUpgrade(const std::string& Src, const TypeInfo* SrcTy,
+                                  const TypeInfo* DstTy, bool isConst)
 {
   std::string Result;
   std::string Source = Src;
@@ -349,8 +790,7 @@
       Source = "i64 %cast_upgrade" + llvm::utostr(unique);
     }
     // Update the SrcTy for the getCastOpcode call below
-    delete SrcTy;
-    SrcTy = new TypeInfo("i64", ULongTy);
+    SrcTy = TypeInfo::get("i64", ULongTy);
   } else if (DstTy->isBool()) {
     // cast type %x to bool was previously defined as setne type %x, null
     // The cast semantic is now to truncate, not compare so we must retain
@@ -366,8 +806,8 @@
       Result = compareOp + Source + comparator;
     return Result; // skip cast processing below
   }
-  ResolveType(SrcTy);
-  ResolveType(DstTy);
+  SrcTy = SrcTy->resolve();
+  DstTy = DstTy->resolve();
   std::string Opcode(getCastOpcode(Source, SrcTy, DstTy));
   if (isConst)
     Result += Opcode + "( " + Source + " to " + DstTy->getNewTy() + ")";
@@ -376,9 +816,9 @@
   return Result;
 }
 
-const char* getDivRemOpcode(const std::string& opcode, TypeInfo* TI) {
+const char* getDivRemOpcode(const std::string& opcode, const TypeInfo* TI) {
   const char* op = opcode.c_str();
-  const TypeInfo* Ty = ResolveType(TI);
+  const TypeInfo* Ty = TI->resolve();
   if (Ty->isPacked())
     Ty = Ty->getElementType();
   if (opcode == "div")
@@ -433,35 +873,36 @@
   return result;
 }
 
-static TypeInfo* getFunctionReturnType(TypeInfo* PFTy) {
-  ResolveType(PFTy);
+static const TypeInfo* getFunctionReturnType(const TypeInfo* PFTy) {
+  PFTy = PFTy->resolve();
   if (PFTy->isPointer()) {
-    TypeInfo* ElemTy = PFTy->getElementType();
-    ResolveType(ElemTy);
+    const TypeInfo* ElemTy = PFTy->getElementType();
+    ElemTy = ElemTy->resolve();
     if (ElemTy->isFunction())
-      return ElemTy->getResultType()->clone();
+      return ElemTy->getResultType();
   } else if (PFTy->isFunction()) {
-    return PFTy->getResultType()->clone();
+    return PFTy->getResultType();
   }
-  return PFTy->clone();
+  return PFTy;
 }
 
-typedef std::vector<TypeInfo*> UpRefStack;
-static TypeInfo* ResolveUpReference(TypeInfo* Ty, UpRefStack* stack) {
+typedef std::vector<const TypeInfo*> UpRefStack;
+static const TypeInfo* ResolveUpReference(const TypeInfo* Ty, 
+                                          UpRefStack* stack) {
   assert(Ty->isUpReference() && "Can't resolve a non-upreference");
-  unsigned upref = atoi(&((Ty->getNewTy().c_str())[1])); // skip the slash
+  unsigned upref = Ty->getUpRefNum();
   assert(upref < stack->size() && "Invalid up reference");
   return (*stack)[upref - stack->size() - 1];
 }
 
-static TypeInfo* getGEPIndexedType(TypeInfo* PTy, ValueList* idxs) {
-  TypeInfo* Result = ResolveType(PTy);
+static const TypeInfo* getGEPIndexedType(const TypeInfo* PTy, ValueList* idxs) {
+  const TypeInfo* Result = PTy = PTy->resolve();
   assert(PTy->isPointer() && "GEP Operand is not a pointer?");
   UpRefStack stack;
   for (unsigned i = 0; i < idxs->size(); ++i) {
     if (Result->isComposite()) {
       Result = Result->getIndexedType((*idxs)[i]);
-      ResolveType(Result);
+      Result = Result->resolve();
       stack.push_back(Result);
     } else
       yyerror("Invalid type for index");
@@ -494,25 +935,47 @@
 // were previously unsigned or signed, respectively. This avoids name
 // collisions since the unsigned and signed type planes have collapsed
 // into a single signless type plane.
-static std::string getUniqueName(const std::string *Name, TypeInfo* Ty) {
+static std::string getUniqueName(const std::string *Name, const TypeInfo* Ty,
+                                 bool isGlobal = false) {
+
   // If its not a symbolic name, don't modify it, probably a constant val.
   if ((*Name)[0] != '%' && (*Name)[0] != '"')
     return *Name;
+
   // If its a numeric reference, just leave it alone.
   if (isdigit((*Name)[1]))
     return *Name;
 
   // Resolve the type
-  ResolveType(Ty);
+  Ty = Ty->resolve(); 
+
+  // If its a global name, get its uniquified name, if any
+  GlobalsTypeMap::iterator GI = Globals.find(*Name);
+  if (GI != Globals.end()) {
+    TypePlaneMap::iterator TPI = GI->second.begin();
+    TypePlaneMap::iterator TPE = GI->second.end();
+    for ( ; TPI != TPE ; ++TPI) {
+      if (TPI->first->sameNewTyAs(Ty)) 
+        return TPI->second;
+    }
+  }
+
+  if (isGlobal) {
+    // We didn't find a global name, but if its supposed to be global then all 
+    // we can do is return the name. This is probably a forward reference of a 
+    // global value that hasn't been defined yet. Since we have no definition
+    // we don't know its linkage class. Just assume its an external and the name
+    // shouldn't change.
+    return *Name;
+  }
 
   // Remove as many levels of pointer nesting that we have.
   if (Ty->isPointer()) {
     // Avoid infinite loops in recursive types
-    TypeInfo* Last = 0;
-    while (Ty->isPointer() && Last != Ty) {
+    const TypeInfo* Last = 0;
+    while (Ty->isPointer() && !Ty->sameOldTyAs(Last)) {
       Last = Ty;
-      Ty = Ty->getElementType();
-      ResolveType(Ty);
+      Ty = Ty->getElementType()->resolve();
     }
   }
 
@@ -531,7 +994,7 @@
     // Scan the fields and count the signed and unsigned fields
     int isSigned = 0;
     for (unsigned i = 0; i < Ty->getNumStructElements(); ++i) {
-      TypeInfo* Tmp = Ty->getElement(i);
+      const TypeInfo* Tmp = Ty->getElement(i);
       if (Tmp->isInteger())
         if (Tmp->isSigned())
           isSigned++;
@@ -544,1096 +1007,1670 @@
   return Result;
 }
 
+static unsigned UniqueNameCounter = 0;
 
-#line 401 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-typedef union {
+std::string getGlobalName(const std::string* Name, const std::string Linkage,
+                          const TypeInfo* Ty, bool isConstant) {
+  // Default to given name
+  std::string Result = *Name; 
+  // Look up the name in the Globals Map
+  GlobalsTypeMap::iterator GI = Globals.find(*Name);
+  // Did we see this global name before?
+  if (GI != Globals.end()) {
+    if (Ty->isUnresolvedDeep()) {
+      // The Gval's type is unresolved. Consequently, we can't disambiguate it
+      // by type. We'll just change its name and emit a warning.
+      warning("Cannot disambiguate global value '" + *Name + 
+              "' because type '" + Ty->getNewTy() + "'is unresolved.\n");
+      Result = *Name + ".unique";
+      UniqueNameCounter++;
+      Result += llvm::utostr(UniqueNameCounter);
+      return Result;
+    } else {
+      TypePlaneMap::iterator TPI = GI->second.find(Ty);
+      if (TPI != GI->second.end()) {
+        // We found an existing name of the same old type. This isn't allowed 
+        // in LLVM 2.0. Consequently, we must alter the name of the global so it
+        // can at least compile. References to the global will yield the first
+        // definition, which is okay. We also must warn about this.
+        Result = *Name + ".unique";
+        UniqueNameCounter++;
+        Result += llvm::utostr(UniqueNameCounter);
+        warning(std::string("Global variable '") + *Name + "' was renamed to '"+
+                Result + "'");
+      } else { 
+        // There isn't an existing definition for this name according to the
+        // old types. Now search the TypePlanMap for types with the same new
+        // name. 
+        TypePlaneMap::iterator TPI = GI->second.begin();
+        TypePlaneMap::iterator TPE = GI->second.end();
+        for ( ; TPI != TPE; ++TPI) {
+          if (TPI->first->sameNewTyAs(Ty)) {
+            // The new types are the same but the old types are different so 
+            // this is a global name collision resulting from type planes 
+            // collapsing. 
+            if (Linkage == "external" || Linkage == "dllimport" || 
+                Linkage == "extern_weak" || Linkage == "") {
+              // The linkage of this gval is external so we can't reliably 
+              // rename it because it could potentially create a linking 
+              // problem.  However, we can't leave the name conflict in the 
+              // output either or it won't assemble with LLVM 2.0.  So, all we 
+              // can do is rename this one to something unique and emit a 
+              // warning about the problem.
+              Result = *Name + ".unique";
+              UniqueNameCounter++;
+              Result += llvm::utostr(UniqueNameCounter);
+              warning("Renaming global value '" + *Name + "' to '" + Result + 
+                      "' may cause linkage errors.");
+              return Result;
+            } else {
+              // Its linkage is internal and its type is known so we can 
+              // disambiguate the name collision successfully based on the type.
+              Result = getUniqueName(Name, Ty);
+              TPI->second = Result;
+              return Result;
+            }
+          }
+        }
+        // We didn't find an entry in the type plane with the same new type and
+        // the old types differ so this is a new type plane for this global 
+        // variable. We just fall through to the logic below which inserts
+        // the global.
+      }
+    }
+  }
+
+  // Its a new global name, if it is external we can't change it
+  if (isConstant || Linkage == "external" || Linkage == "dllimport" || 
+      Linkage == "extern_weak" || Linkage == "") {
+    Globals[Result][Ty] = Result;
+    return Result;
+  }
+
+  // Its a new global name, and it is internal, change the name to make it
+  // unique for its type.
+  // Result = getUniqueName(Name, Ty);
+  Globals[*Name][Ty] = Result;
+  return Result;
+}
+
+
+/* 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 742 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+typedef union YYSTYPE {
   std::string*    String;
-  TypeInfo*       Type;
+  const TypeInfo* Type;
   ValueInfo       Value;
   ConstInfo       Const;
   ValueList*      ValList;
   TypeList*       TypeVec;
 } YYSTYPE;
-#include <stdio.h>
-
-#ifndef __cplusplus
-#ifndef __STDC__
-#define const
-#endif
+/* Line 196 of yacc.c.  */
+#line 1128 "UpgradeParser.tab.c"
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
 #endif
 
 
 
-#define	YYFINAL		586
-#define	YYFLAG		-32768
-#define	YYNTBASE	165
+/* Copy the second part of user declarations.  */
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 404 ? yytranslate[x] : 239)
 
-static const short yytranslate[] = {     0,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,   154,
-   155,   163,     2,   152,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,   159,
-   151,   160,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-   156,   153,   158,     2,     2,     2,     2,     2,   164,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,   157,
-     2,     2,   161,     2,   162,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     1,     3,     4,     5,     6,
-     7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-    27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-    37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-    47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-    57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-    77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-    87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-    97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-   107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-   117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-   127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-   137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-   147,   148,   149,   150
-};
+/* Line 219 of yacc.c.  */
+#line 1140 "UpgradeParser.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,    66,    68,    70,    72,    74,    76,    78,
-    80,    82,    84,    86,    88,    90,    92,    94,    96,    98,
-   100,   102,   104,   106,   108,   110,   112,   114,   116,   118,
-   120,   122,   124,   126,   128,   130,   132,   134,   136,   138,
-   140,   142,   144,   146,   148,   150,   152,   154,   156,   158,
-   161,   162,   164,   166,   168,   170,   172,   174,   176,   177,
-   179,   181,   183,   185,   187,   189,   192,   193,   194,   197,
-   198,   202,   205,   206,   208,   209,   213,   215,   218,   220,
-   222,   224,   226,   228,   230,   232,   234,   236,   238,   240,
-   242,   244,   246,   248,   250,   252,   254,   256,   258,   261,
-   266,   272,   278,   282,   285,   291,   296,   299,   301,   305,
-   307,   311,   313,   314,   319,   323,   327,   332,   337,   341,
-   344,   347,   350,   353,   356,   359,   362,   365,   368,   371,
-   378,   384,   393,   400,   407,   414,   422,   430,   437,   444,
-   453,   462,   466,   468,   470,   472,   474,   477,   480,   485,
-   488,   490,   492,   494,   499,   502,   507,   514,   521,   528,
-   535,   539,   544,   545,   547,   549,   551,   555,   559,   563,
-   567,   571,   575,   577,   578,   580,   582,   584,   585,   588,
-   592,   594,   596,   600,   602,   603,   612,   614,   616,   620,
-   622,   624,   628,   629,   631,   633,   637,   638,   640,   642,
-   644,   646,   648,   650,   652,   654,   656,   660,   662,   668,
-   670,   672,   674,   676,   679,   682,   684,   687,   690,   691,
-   693,   695,   697,   700,   703,   707,   717,   727,   736,   751,
-   753,   755,   762,   768,   771,   778,   786,   788,   792,   794,
-   795,   798,   800,   806,   812,   818,   825,   832,   835,   840,
-   845,   852,   857,   862,   869,   876,   879,   887,   889,   892,
-   893,   895,   896,   900,   907,   911,   918,   921,   926,   933
-};
+#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[] = {    19,
-     0,    20,     0,    17,     0,    18,     0,    80,     0,    81,
-     0,    82,     0,    83,     0,    84,     0,    85,     0,    86,
-     0,    87,     0,    88,     0,    89,     0,    90,     0,    91,
-     0,    92,     0,    93,     0,    94,     0,    95,     0,    96,
-     0,    97,     0,    98,     0,    99,     0,   102,     0,   103,
-     0,   104,     0,   105,     0,   106,     0,   107,     0,   118,
-     0,   119,     0,   120,     0,   121,     0,   108,     0,   109,
-     0,   110,     0,   111,     0,   112,     0,   113,     0,   114,
-     0,   115,     0,   116,     0,   117,     0,   118,     0,   119,
-     0,   120,     0,   121,     0,    25,     0,    26,     0,   130,
-     0,   131,     0,   132,     0,   133,     0,   139,     0,   140,
-     0,   141,     0,   142,     0,   143,     0,   144,     0,   145,
-     0,   146,     0,   147,     0,   148,     0,   149,     0,   150,
-     0,   138,     0,    11,     0,     9,     0,     7,     0,     5,
-     0,    12,     0,    10,     0,     8,     0,     6,     0,   174,
-     0,   175,     0,    13,     0,    14,     0,   207,   151,     0,
-     0,    42,     0,    43,     0,    44,     0,    48,     0,    45,
-     0,    46,     0,    47,     0,     0,    66,     0,    67,     0,
-    68,     0,    69,     0,    70,     0,    71,     0,    65,    18,
-     0,     0,     0,    57,    18,     0,     0,   152,    57,    18,
-     0,    37,    30,     0,     0,   183,     0,     0,   152,   186,
-   185,     0,   183,     0,    57,    18,     0,   189,     0,     3,
-     0,   191,     0,     3,     0,   191,     0,     4,     0,     5,
-     0,     6,     0,     7,     0,     8,     0,     9,     0,    10,
-     0,    11,     0,    12,     0,    13,     0,    14,     0,    15,
-     0,    16,     0,   221,     0,   190,     0,   153,    18,     0,
-   188,   154,   193,   155,     0,   156,    18,   157,   191,   158,
-     0,   159,    18,   157,   191,   160,     0,   161,   192,   162,
-     0,   161,   162,     0,   159,   161,   192,   162,   160,     0,
-   159,   161,   162,   160,     0,   191,   163,     0,   191,     0,
-   192,   152,   191,     0,   192,     0,   192,   152,    40,     0,
-    40,     0,     0,   189,   156,   196,   158,     0,   189,   156,
-   158,     0,   189,   164,    30,     0,   189,   159,   196,   160,
-     0,   189,   161,   196,   162,     0,   189,   161,   162,     0,
-   189,    22,     0,   189,    23,     0,   189,   221,     0,   189,
-   195,     0,   189,    24,     0,   174,   166,     0,   175,   166,
-     0,     4,    25,     0,     4,    26,     0,   177,    21,     0,
-   173,   154,   194,    39,   189,   155,     0,   127,   154,   194,
-   236,   155,     0,   129,   154,   194,   152,   194,   152,   194,
-   155,     0,   167,   154,   194,   152,   194,   155,     0,   168,
-   154,   194,   152,   194,   155,     0,   169,   154,   194,   152,
-   194,   155,     0,   100,   170,   154,   194,   152,   194,   155,
-     0,   101,   171,   154,   194,   152,   194,   155,     0,   172,
-   154,   194,   152,   194,   155,     0,   135,   154,   194,   152,
-   194,   155,     0,   136,   154,   194,   152,   194,   152,   194,
-   155,     0,   137,   154,   194,   152,   194,   152,   194,   155,
-     0,   196,   152,   194,     0,   194,     0,    35,     0,    36,
-     0,   199,     0,   199,   216,     0,   199,   218,     0,   199,
-    63,    62,   202,     0,   199,    31,     0,   201,     0,    50,
-     0,    58,     0,   201,   178,    27,   187,     0,   201,   218,
-     0,   201,    63,    62,   202,     0,   201,   178,   179,   197,
-   194,   185,     0,   201,   178,   200,   197,   189,   185,     0,
-   201,   178,    45,   197,   189,   185,     0,   201,   178,    47,
-   197,   189,   185,     0,   201,    51,   204,     0,   201,    59,
-   151,   205,     0,     0,    30,     0,    56,     0,    55,     0,
-    53,   151,   203,     0,    54,   151,    18,     0,    52,   151,
-    30,     0,    72,   151,    30,     0,   156,   206,   158,     0,
-   206,   152,    30,     0,    30,     0,     0,    28,     0,    30,
-     0,   207,     0,     0,   189,   208,     0,   210,   152,   209,
-     0,   209,     0,   210,     0,   210,   152,    40,     0,    40,
-     0,     0,   180,   187,   207,   154,   211,   155,   184,   181,
-     0,    32,     0,   161,     0,   179,   212,   213,     0,    33,
-     0,   162,     0,   214,   224,   215,     0,     0,    45,     0,
-    47,     0,    34,   217,   212,     0,     0,    64,     0,    17,
-     0,    18,     0,    21,     0,    25,     0,    26,     0,    22,
-     0,    23,     0,    24,     0,   159,   196,   160,     0,   195,
-     0,    62,   219,    30,   152,    30,     0,   165,     0,   207,
-     0,   221,     0,   220,     0,   189,   222,     0,   224,   225,
-     0,   225,     0,   226,   228,     0,   226,   230,     0,     0,
-    29,     0,    78,     0,    77,     0,    73,   223,     0,    73,
-     3,     0,    74,    15,   222,     0,    74,     4,   222,   152,
-    15,   222,   152,    15,   222,     0,    75,   176,   222,   152,
-    15,   222,   156,   229,   158,     0,    75,   176,   222,   152,
-    15,   222,   156,   158,     0,   178,    76,   180,   187,   222,
-   154,   233,   155,    39,    15,   222,   227,    15,   222,     0,
-   227,     0,    79,     0,   229,   176,   220,   152,    15,   222,
-     0,   176,   220,   152,    15,   222,     0,   178,   235,     0,
-   189,   156,   222,   152,   222,   158,     0,   231,   152,   156,
-   222,   152,   222,   158,     0,   223,     0,   232,   152,   223,
-     0,   232,     0,     0,    61,    60,     0,    60,     0,   167,
-   189,   222,   152,   222,     0,   168,   189,   222,   152,   222,
-     0,   169,   189,   222,   152,   222,     0,   100,   170,   189,
-   222,   152,   222,     0,   101,   171,   189,   222,   152,   222,
-     0,    49,   223,     0,   172,   223,   152,   223,     0,   173,
-   223,    39,   189,     0,   129,   223,   152,   223,   152,   223,
-     0,   134,   223,   152,   189,     0,   135,   223,   152,   223,
-     0,   136,   223,   152,   223,   152,   223,     0,   137,   223,
-   152,   223,   152,   223,     0,   128,   231,     0,   234,   180,
-   187,   222,   154,   233,   155,     0,   238,     0,   152,   232,
-     0,     0,    38,     0,     0,   122,   189,   182,     0,   122,
-   189,   152,    10,   222,   182,     0,   123,   189,   182,     0,
-   123,   189,   152,    10,   222,   182,     0,   124,   223,     0,
-   237,   125,   189,   222,     0,   237,   126,   223,   152,   189,
-   222,     0,   127,   189,   222,   236,     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,
-   466,   466,   467,   467,   471,   471,   471,   471,   471,   471,
-   471,   472,   472,   472,   472,   473,   473,   473,   474,   474,
-   474,   474,   474,   474,   475,   475,   475,   475,   475,   475,
-   475,   475,   475,   475,   476,   476,   476,   476,   476,   476,
-   476,   476,   476,   476,   477,   477,   477,   477,   477,   477,
-   478,   478,   478,   478,   479,   479,   479,   479,   479,   479,
-   479,   479,   480,   480,   480,   480,   480,   485,   485,   485,
-   485,   486,   486,   486,   486,   487,   487,   488,   488,   491,
-   494,   499,   499,   499,   499,   499,   499,   500,   501,   504,
-   504,   504,   504,   504,   505,   506,   511,   516,   517,   520,
-   521,   529,   535,   536,   539,   540,   549,   550,   563,   563,
-   564,   564,   565,   569,   569,   569,   569,   569,   569,   569,
-   570,   570,   570,   570,   570,   572,   575,   578,   581,   585,
-   598,   604,   610,   620,   623,   633,   636,   644,   648,   655,
-   656,   661,   666,   676,   682,   687,   693,   699,   705,   710,
-   716,   722,   729,   735,   741,   747,   753,   759,   765,   773,
-   786,   798,   803,   809,   814,   820,   825,   830,   838,   843,
-   848,   858,   863,   868,   868,   878,   883,   886,   891,   895,
-   899,   901,   901,   904,   914,   919,   924,   934,   944,   954,
-   964,   969,   974,   979,   981,   981,   984,   989,   996,  1001,
-  1008,  1015,  1020,  1021,  1029,  1029,  1030,  1030,  1032,  1041,
-  1045,  1049,  1052,  1057,  1060,  1063,  1081,  1082,  1085,  1096,
-  1097,  1099,  1108,  1109,  1110,  1114,  1127,  1128,  1131,  1131,
-  1131,  1131,  1131,  1131,  1131,  1132,  1133,  1138,  1139,  1148,
-  1148,  1152,  1157,  1167,  1177,  1180,  1188,  1192,  1197,  1200,
-  1206,  1206,  1208,  1213,  1218,  1223,  1232,  1240,  1247,  1270,
-  1275,  1281,  1287,  1295,  1313,  1321,  1330,  1334,  1341,  1342,
-  1346,  1351,  1354,  1363,  1371,  1380,  1388,  1396,  1401,  1410,
-  1438,  1444,  1450,  1457,  1463,  1469,  1475,  1493,  1498,  1499,
-  1503,  1504,  1507,  1515,  1524,  1532,  1541,  1547,  1556,  1565
-};
-#endif
-
-
-#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
-
-static const char * const yytname[] = {   "$","error","$undefined.","VOID","BOOL",
-"SBYTE","UBYTE","SHORT","USHORT","INT","UINT","LONG","ULONG","FLOAT","DOUBLE",
-"LABEL","OPAQUE","ESINT64VAL","EUINT64VAL","SINTVAL","UINTVAL","FPVAL","NULL_TOK",
-"UNDEF","ZEROINITIALIZER","TRUETOK","FALSETOK","TYPE","VAR_ID","LABELSTR","STRINGCONSTANT",
-"IMPLEMENTATION","BEGINTOK","ENDTOK","DECLARE","GLOBAL","CONSTANT","SECTION",
-"VOLATILE","TO","DOTDOTDOT","CONST","INTERNAL","LINKONCE","WEAK","DLLIMPORT",
-"DLLEXPORT","EXTERN_WEAK","APPENDING","NOT","EXTERNAL","TARGET","TRIPLE","ENDIAN",
-"POINTERSIZE","LITTLE","BIG","ALIGN","UNINITIALIZED","DEPLIBS","CALL","TAIL",
-"ASM_TOK","MODULE","SIDEEFFECT","CC_TOK","CCC_TOK","CSRETCC_TOK","FASTCC_TOK",
-"COLDCC_TOK","X86_STDCALLCC_TOK","X86_FASTCALLCC_TOK","DATALAYOUT","RET","BR",
-"SWITCH","INVOKE","EXCEPT","UNWIND","UNREACHABLE","ADD","SUB","MUL","DIV","UDIV",
-"SDIV","FDIV","REM","UREM","SREM","FREM","AND","OR","XOR","SETLE","SETGE","SETLT",
-"SETGT","SETEQ","SETNE","ICMP","FCMP","EQ","NE","SLT","SGT","SLE","SGE","OEQ",
-"ONE","OLT","OGT","OLE","OGE","ORD","UNO","UEQ","UNE","ULT","UGT","ULE","UGE",
-"MALLOC","ALLOCA","FREE","LOAD","STORE","GETELEMENTPTR","PHI_TOK","SELECT","SHL",
-"SHR","ASHR","LSHR","VAARG","EXTRACTELEMENT","INSERTELEMENT","SHUFFLEVECTOR",
-"CAST","TRUNC","ZEXT","SEXT","FPTRUNC","FPEXT","FPTOUI","FPTOSI","UITOFP","SITOFP",
-"PTRTOINT","INTTOPTR","BITCAST","'='","','","'\\\\'","'('","')'","'['","'x'",
-"']'","'<'","'>'","'{'","'}'","'*'","'c'","IntVal","EInt64Val","ArithmeticOps",
-"LogicalOps","SetCondOps","IPredicates","FPredicates","ShiftOps","CastOps","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","DefinitionList",
-"External","ConstPool","AsmBlock","BigOrLittle","TargetDefinition","LibrariesDefinition",
-"LibList","Name","OptName","ArgVal","ArgListH","ArgList","FunctionHeaderH","BEGIN",
-"FunctionHeader","END","Function","FnDeclareLinkage","FunctionProto","OptSideEffect",
-"ConstValueRef","SymbolicValueRef","ValueRef","ResolvedVal","BasicBlockList",
-"BasicBlock","InstructionList","Unwind","BBTerminatorInst","JumpTable","Inst",
-"PHIList","ValueRefList","ValueRefListE","OptTailCall","InstVal","IndexList",
-"OptVolatile","MemoryInst", NULL
-};
-#endif
-
-static const short yyr1[] = {     0,
-   165,   165,   166,   166,   167,   167,   167,   167,   167,   167,
-   167,   167,   167,   167,   167,   168,   168,   168,   169,   169,
-   169,   169,   169,   169,   170,   170,   170,   170,   170,   170,
-   170,   170,   170,   170,   171,   171,   171,   171,   171,   171,
-   171,   171,   171,   171,   171,   171,   171,   171,   171,   171,
-   172,   172,   172,   172,   173,   173,   173,   173,   173,   173,
-   173,   173,   173,   173,   173,   173,   173,   174,   174,   174,
-   174,   175,   175,   175,   175,   176,   176,   177,   177,   178,
-   178,   179,   179,   179,   179,   179,   179,   179,   179,   180,
-   180,   180,   180,   180,   180,   180,   180,   181,   181,   182,
-   182,   183,   184,   184,   185,   185,   186,   186,   187,   187,
-   188,   188,   189,   190,   190,   190,   190,   190,   190,   190,
-   190,   190,   190,   190,   190,   191,   191,   191,   191,   191,
-   191,   191,   191,   191,   191,   191,   191,   192,   192,   193,
-   193,   193,   193,   194,   194,   194,   194,   194,   194,   194,
-   194,   194,   194,   194,   194,   194,   194,   194,   194,   195,
-   195,   195,   195,   195,   195,   195,   195,   195,   195,   195,
-   195,   196,   196,   197,   197,   198,   199,   199,   199,   199,
-   199,   200,   200,   201,   201,   201,   201,   201,   201,   201,
-   201,   201,   201,   202,   203,   203,   204,   204,   204,   204,
-   205,   206,   206,   206,   207,   207,   208,   208,   209,   210,
-   210,   211,   211,   211,   211,   212,   213,   213,   214,   215,
-   215,   216,   217,   217,   217,   218,   219,   219,   220,   220,
-   220,   220,   220,   220,   220,   220,   220,   220,   220,   221,
-   221,   222,   222,   223,   224,   224,   225,   226,   226,   226,
-   227,   227,   228,   228,   228,   228,   228,   228,   228,   228,
-   228,   229,   229,   230,   231,   231,   232,   232,   233,   233,
-   234,   234,   235,   235,   235,   235,   235,   235,   235,   235,
-   235,   235,   235,   235,   235,   235,   235,   235,   236,   236,
-   237,   237,   238,   238,   238,   238,   238,   238,   238,   238
-};
-
-static const short yyr2[] = {     0,
-     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-     1,     1,     1,     1,     1,     1,     1,     1,     1,     2,
-     0,     1,     1,     1,     1,     1,     1,     1,     0,     1,
-     1,     1,     1,     1,     1,     2,     0,     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,     2,     4,
-     5,     5,     3,     2,     5,     4,     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,     7,     7,     6,     6,     8,
-     8,     3,     1,     1,     1,     1,     2,     2,     4,     2,
-     1,     1,     1,     4,     2,     4,     6,     6,     6,     6,
-     3,     4,     0,     1,     1,     1,     3,     3,     3,     3,
-     3,     3,     1,     0,     1,     1,     1,     0,     2,     3,
-     1,     1,     3,     1,     0,     8,     1,     1,     3,     1,
-     1,     3,     0,     1,     1,     3,     0,     1,     1,     1,
-     1,     1,     1,     1,     1,     1,     3,     1,     5,     1,
-     1,     1,     1,     2,     2,     1,     2,     2,     0,     1,
-     1,     1,     2,     2,     3,     9,     9,     8,    14,     1,
-     1,     6,     5,     2,     6,     7,     1,     3,     1,     0,
-     2,     1,     5,     5,     5,     6,     6,     2,     4,     4,
-     6,     4,     4,     6,     6,     2,     7,     1,     2,     0,
-     1,     0,     3,     6,     3,     6,     2,     4,     6,     4
-};
-
-static const short yydefact[] = {   193,
-    89,   181,   180,   223,    82,    83,    84,    86,    87,    88,
-    85,     0,    97,   249,   177,   178,   205,   206,     0,     0,
-     0,    89,     0,   185,   224,   225,    97,     0,     0,    90,
-    91,    92,    93,    94,    95,     0,     0,   250,   249,   246,
-    81,     0,     0,     0,     0,   191,     0,     0,     0,     0,
-     0,   182,   183,     0,     0,    80,   226,   194,   179,    96,
-   110,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-   123,   124,   125,   126,     1,     2,     0,     0,     0,     0,
-   240,     0,     0,   109,   128,   113,   241,   127,   217,   218,
-   219,   220,   221,   222,   245,     0,     0,     0,   252,   251,
-   261,   292,   260,   247,   248,     0,     0,     0,     0,   204,
-   192,   186,   184,   174,   175,     0,     0,     0,     0,   129,
-     0,     0,     0,   112,   134,   138,     0,     0,   143,   137,
-   254,     0,   253,     0,     0,    71,    75,    70,    74,    69,
-    73,    68,    72,    76,    77,     0,   291,     0,   272,     0,
-    97,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-    14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-    24,     0,     0,     0,     0,     0,     0,     0,     0,    51,
-    52,    53,    54,     0,     0,     0,     0,    67,    55,    56,
-    57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-     0,     0,     0,     0,     0,    97,   264,     0,   288,   199,
-   196,   195,   197,   198,   200,   203,     0,   105,   105,   114,
-   115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     0,     0,     0,     0,   105,   105,     0,     0,     0,     0,
-     0,   133,   215,   142,   140,     0,   229,   230,   231,   234,
-   235,   236,   232,   233,   227,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   238,   243,
-   242,   244,     0,   255,     0,   278,   271,     0,    25,    26,
-    27,    28,    29,    30,    31,    32,    33,    34,     0,    49,
-    50,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-    44,    45,    46,    47,    48,     0,   100,   100,   297,     0,
-     0,   286,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   201,     0,   189,   190,
-   157,   158,     3,     4,   155,   156,   159,   150,   151,   154,
-     0,     0,     0,     0,   153,   152,   187,   188,   111,   111,
-   136,     0,   139,   214,   208,   211,   212,     0,     0,   130,
-   228,     0,     0,     0,     0,     0,     0,     0,     0,   173,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   293,     0,   295,   290,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   202,     0,     0,   107,   105,   145,     0,     0,   149,
-     0,   146,   131,   132,   135,   207,   209,     0,   103,   141,
-     0,     0,     0,   290,     0,     0,     0,     0,     0,   237,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   300,     0,     0,     0,   282,   283,
-     0,     0,     0,     0,     0,   279,   280,     0,   298,     0,
-   102,   108,   106,   144,   147,   148,   213,   210,   104,    98,
-     0,     0,     0,     0,     0,     0,     0,     0,   172,     0,
-     0,     0,     0,     0,     0,     0,   270,     0,     0,   100,
-   101,   100,   267,   289,     0,     0,     0,     0,     0,   273,
-   274,   275,   270,     0,     0,   216,   239,     0,     0,   161,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   269,     0,   276,   277,     0,   294,   296,     0,     0,
-     0,   281,   284,   285,     0,   299,    99,     0,     0,     0,
-   169,     0,     0,   163,   164,   165,   168,   160,     0,   258,
-     0,     0,     0,   268,   265,     0,   287,   166,   167,     0,
-     0,     0,   256,     0,   257,     0,     0,   266,   162,   170,
-   171,     0,     0,     0,     0,     0,     0,   263,     0,     0,
-   262,     0,   259,     0,     0,     0
-};
-
-static const short yydefgoto[] = {    81,
-   335,   264,   265,   266,   289,   306,   267,   268,   231,   232,
-   146,   233,    22,    13,    36,   506,   383,   405,   470,   329,
-   406,    82,    83,   234,    85,    86,   127,   246,   370,   269,
-   371,   116,   584,     1,    55,     2,    59,   213,    46,   111,
-   217,    87,   417,   356,   357,   358,    37,    91,    14,    94,
-    15,    27,    16,   362,   270,    88,   272,   493,    39,    40,
-    41,   103,   104,   552,   105,   312,   522,   523,   206,   207,
-   445,   208,   209
-};
-
-static const short yypact[] = {-32768,
-   217,   541,-32768,   116,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,    16,   111,    17,-32768,-32768,-32768,-32768,    34,   -90,
-    61,    26,    19,-32768,-32768,-32768,   111,   144,   172,-32768,
--32768,-32768,-32768,-32768,-32768,   871,   -26,-32768,   -18,-32768,
-    47,    81,    87,    93,    98,-32768,    96,   144,   871,    69,
-    69,-32768,-32768,    69,    69,-32768,-32768,-32768,-32768,-32768,
-   100,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,   237,   238,    -9,   215,
--32768,   134,   103,-32768,-32768,  -111,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,   909,    36,   148,-32768,-32768,
--32768,  1343,-32768,-32768,-32768,   228,    40,   248,   239,   241,
--32768,-32768,-32768,-32768,-32768,   937,   937,   965,   937,-32768,
-   110,   115,   506,-32768,-32768,  -111,   -98,   114,   673,-32768,
-   100,  1141,-32768,  1141,  1141,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,  1141,-32768,   937,-32768,   213,
-   111,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,   195,    84,   937,   937,   937,   937,   937,   937,-32768,
--32768,-32768,-32768,   937,   937,   937,   937,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-   937,   937,   937,   937,   937,   111,-32768,     6,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,   -93,   122,   122,    91,
-   119,   129,   166,   169,   191,   193,   219,   223,   258,   260,
-   229,   229,   261,  1052,   122,   122,   937,   937,   124,   -73,
-   937,-32768,   711,-32768,   133,   131,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,   226,   195,    84,   137,   138,   140,
-   150,   154,   965,   156,   158,   167,   168,   170,-32768,-32768,
--32768,-32768,   171,-32768,   173,-32768,-32768,   871,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   937,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,   937,   174,   175,-32768,  1141,
-   164,   176,   177,   178,   179,   182,   183,  1141,  1141,  1141,
-   184,   299,   871,   937,   937,   310,-32768,    -8,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-   749,   965,   614,   311,-32768,-32768,-32768,-32768,   -55,  -115,
--32768,   185,  -111,-32768,   134,-32768,   190,   189,   777,-32768,
--32768,   316,   194,   198,   965,   965,   965,   965,   965,-32768,
-  -102,   965,   965,   965,   965,   965,   332,   344,  1141,  1141,
-  1141,    -2,-32768,     9,-32768,   208,  1141,   207,   937,   937,
-   937,   937,   937,   212,   214,   218,   937,   937,  1141,  1141,
-   220,-32768,   335,   349,-32768,   122,-32768,   -61,   -58,-32768,
-   -70,-32768,-32768,-32768,-32768,-32768,-32768,   833,   336,-32768,
-   231,   965,   965,   208,   235,   236,   240,   242,   965,-32768,
-   243,   244,   245,   249,   330,  1141,  1141,   221,   250,   251,
-  1141,   363,  1141,   937,-32768,   252,  1141,   253,-32768,-32768,
-   254,   255,  1141,  1141,  1141,-32768,-32768,   256,-32768,   937,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   333,
-   359,   257,   262,   263,   965,   965,   965,   965,-32768,   965,
-   965,   965,   965,   937,   264,   259,   937,  1141,  1141,   265,
--32768,   265,-32768,   267,  1141,   268,   937,   937,   937,-32768,
--32768,-32768,   937,  1141,   375,-32768,-32768,   965,   965,-32768,
-   269,   273,   270,   271,   274,   275,   276,   277,   278,   419,
-    15,   267,   282,-32768,-32768,   381,-32768,-32768,   937,   281,
-  1141,-32768,-32768,-32768,   286,-32768,-32768,   289,   292,   965,
--32768,   965,   965,-32768,-32768,-32768,-32768,-32768,  1141,-32768,
-  1230,    27,   410,-32768,-32768,   297,-32768,-32768,-32768,   295,
-   303,   304,-32768,   308,-32768,  1230,   449,-32768,-32768,-32768,
--32768,   450,   314,  1141,  1141,   453,   135,-32768,  1141,   454,
--32768,  1141,-32768,   472,   473,-32768
-};
-
-static const short yypgoto[] = {-32768,
-   247,   372,   374,   378,   225,   227,   380,   383,   -96,   -95,
-  -505,-32768,   436,   461,  -139,-32768,  -301,    67,-32768,  -218,
--32768,   -45,-32768,   -36,-32768,   -66,   -16,-32768,   132,   290,
-  -214,    60,-32768,-32768,-32768,-32768,   441,-32768,-32768,-32768,
--32768,     3,-32768,    72,-32768,-32768,   464,-32768,-32768,-32768,
--32768,-32768,   490,-32768,  -510,  -104,    -1,   -86,-32768,   456,
--32768,   -81,-32768,-32768,-32768,-32768,    58,    20,-32768,-32768,
-   104,-32768,-32768
-};
-
-
-#define	YYLAST		1493
-
-
-static const short yytable[] = {    84,
-   330,   144,   145,   113,    23,    89,   385,   441,   122,   133,
-    38,   278,    84,   126,    92,   551,   347,   348,   443,   136,
-   137,   138,   139,   140,   141,   142,   143,   271,   403,   271,
-   271,   136,   137,   138,   139,   140,   141,   142,   143,   134,
-   564,   271,  -111,    23,   414,    38,   566,   130,   404,   429,
-   135,   130,    49,   241,   442,   573,   126,   430,   326,   132,
-    47,   276,   126,   242,   327,   442,   323,     5,     6,     7,
-    50,     9,    51,    11,    17,    52,    18,    28,   241,   218,
-   219,   429,   236,    53,   128,    42,    43,    44,   352,   309,
-   429,   466,   313,   429,   211,   212,   464,   314,   315,   316,
-   317,   465,   413,   114,   115,    45,   240,   130,   290,   291,
-   117,   132,   245,   118,   119,   331,   332,   321,   322,    96,
-    97,    98,    48,    99,   100,   101,   408,   409,   411,   346,
-   324,   325,   273,   274,    90,   -71,   -71,   307,   308,   132,
-   310,   311,   132,    93,   275,   -75,   -75,   132,   132,   132,
-   132,   123,   136,   137,   138,   139,   140,   141,   142,   143,
-    25,    17,    26,    18,   318,   319,   320,   132,   132,    56,
-   349,   350,   550,    58,   353,    29,    30,    31,    32,    33,
-    34,    35,   -70,   -70,   565,   -74,   -74,   463,   527,    60,
-   528,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-   301,   302,   303,   304,   305,   271,   355,   -69,   -69,   -73,
-   -73,    99,   100,   271,   271,   271,  -176,   124,    62,    63,
-    64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-    74,   106,   379,    75,    76,   -68,   -68,   107,   401,   -72,
-   -72,    84,    17,   108,    18,   333,   334,     3,   109,   235,
-     4,   110,   380,  -112,   120,   121,   129,   210,     5,     6,
-     7,     8,     9,    10,    11,   214,   237,   243,   215,   381,
-   216,   238,   277,   328,   271,   271,   271,   399,   -78,    12,
-   -79,   337,   271,   351,   359,   360,    84,   400,   132,   361,
-   365,   366,   353,   367,   271,   271,   279,   280,   281,   282,
-   283,   284,   448,   368,   450,   451,   452,   369,   386,   372,
-   456,   373,   285,   286,   287,   288,   394,   395,   396,   387,
-   374,   375,   377,   376,   378,   382,   384,   388,   389,   390,
-   391,   271,   271,   392,   393,   397,   271,   398,   271,   402,
-   412,   418,   271,   419,   415,   421,   436,   422,   271,   271,
-   271,   423,   132,   449,   132,   132,   132,   416,   437,   444,
-   132,   457,   447,   453,   461,   454,   462,    77,   484,   455,
-    78,   460,   403,    79,   487,    80,   125,   438,   439,   440,
-   491,   355,   471,   271,   271,   446,   475,   476,   507,   505,
-   271,   477,   537,   478,   480,   481,   482,   458,   459,   271,
-   483,   488,   489,   495,   497,   498,   499,   132,   508,   503,
-   532,   533,   534,   509,   521,   520,   526,   510,   529,   531,
-   540,   542,   543,   504,   144,   145,   271,   541,   544,   545,
-   546,   547,   548,   549,   485,   486,   553,   442,   555,   490,
-   557,   492,   554,   558,   271,   496,   559,   519,   567,   569,
-   132,   500,   501,   502,   568,   144,   145,   570,   571,   572,
-   132,   132,   132,   574,   575,   576,   132,   579,   582,   271,
-   271,   585,   586,   201,   271,   202,   102,   271,   336,   203,
-   363,   204,    54,   364,   205,   469,   524,   525,   112,   468,
-    57,    24,   132,   530,    95,   580,   424,   425,   426,   427,
-   428,   494,   536,   431,   432,   433,   434,   435,   124,    62,
-    63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-    73,    74,   535,   345,    75,    76,     0,   474,     0,   556,
-     0,     0,     0,    17,     0,    18,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   563,     0,     0,
-     0,     0,     0,   472,   473,     0,     0,     0,     0,     0,
-   479,     0,     0,     0,     0,     0,     0,   -81,    17,     0,
-    18,     0,   577,   578,     4,   -81,   -81,   581,     0,     0,
-   583,     0,   -81,   -81,   -81,   -81,   -81,   -81,   -81,     0,
-   -81,    19,     0,     0,     0,     0,     0,     0,   -81,    20,
-     0,     0,     0,    21,     0,     0,   511,   512,   513,   514,
-     0,   515,   516,   517,   518,     0,   124,   220,   221,   222,
-   223,   224,   225,   226,   227,   228,   229,   230,    73,    74,
-     0,     0,    75,    76,     0,     0,     0,     0,     0,   538,
-   539,    17,     0,    18,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,    77,     0,
-     0,    78,     0,     0,    79,     0,    80,   239,     0,     0,
-     0,   560,     0,   561,   562,   124,    62,    63,    64,    65,
-    66,    67,    68,    69,    70,    71,    72,    73,    74,     0,
-     0,    75,    76,     0,     0,     0,     0,     0,     0,     0,
-    17,     0,    18,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   244,   124,    62,    63,    64,    65,    66,    67,
-    68,    69,    70,    71,    72,    73,    74,     0,     0,    75,
-    76,     0,     0,     0,     0,     0,     0,     0,    17,     0,
-    18,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   354,   124,   220,   221,   222,   223,   224,   225,   226,   227,
-   228,   229,   230,    73,    74,     0,    77,    75,    76,    78,
-     0,     0,    79,     0,    80,   410,    17,     0,    18,   124,
-    62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-    72,    73,    74,     0,     0,    75,    76,     0,     0,     0,
-     0,     0,     0,     0,    17,     0,    18,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   420,     0,     0,     0,
-     0,     0,     0,     0,     0,    77,     0,     0,    78,     0,
-     0,    79,     0,    80,     0,   124,    62,    63,    64,    65,
-    66,    67,    68,    69,    70,    71,    72,    73,    74,     0,
-     0,    75,    76,     0,     0,     0,     0,     0,     0,     0,
-    17,     0,    18,    77,     0,     0,    78,     0,     0,    79,
-     0,    80,   467,    61,    62,    63,    64,    65,    66,    67,
-    68,    69,    70,    71,    72,    73,    74,     0,     0,    75,
-    76,     0,     0,     0,     0,     0,     0,     0,    17,     0,
-    18,    77,     0,     0,    78,     0,   407,    79,     0,    80,
-     0,   131,    62,    63,    64,    65,    66,    67,    68,    69,
-    70,    71,    72,    73,    74,     0,     0,    75,    76,    77,
-     0,     0,    78,     0,     0,    79,    17,    80,    18,   124,
-    62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-    72,    73,    74,     0,     0,    75,    76,     0,     0,     0,
-     0,     0,     0,     0,    17,     0,    18,   124,   220,   221,
-   222,   223,   224,   225,   226,   227,   228,   229,   230,    73,
-    74,     0,     0,    75,    76,    77,     0,     0,    78,     0,
-     0,    79,    17,    80,    18,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    77,     0,     0,    78,     0,     0,    79,
-     0,    80,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    77,     0,     0,    78,     0,     0,    79,     0,    80,
-    75,    76,     0,   338,   339,   340,     0,     0,     0,    17,
-     0,    18,     0,     0,     0,     0,     0,     0,     0,    77,
-     0,     0,    78,     0,     0,    79,     0,    80,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    77,     0,     0,
-    78,     0,     0,    79,     0,    80,     0,     0,     0,     0,
-     0,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-   161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-   171,   256,   257,     0,     0,     0,     0,   247,   248,    75,
-    76,   249,   250,   251,   252,   253,   254,     0,    17,     0,
-    18,     0,     0,     0,     0,     0,     0,     0,   258,     0,
-   259,   180,   181,   182,   183,     0,   260,   261,   262,   188,
-   189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-   199,   200,   255,     0,     0,     0,     0,   341,     0,     0,
-   342,     0,   343,     0,     0,   344,     0,     0,     0,     0,
-   152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-   256,   257,     0,     0,     0,     0,   247,   248,     0,     0,
-   249,   250,   251,   252,   253,   254,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   258,     0,   259,
-   180,   181,   182,   183,     0,   260,   261,   262,   188,   189,
-   190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-   200,   255,     0,     0,     0,     0,     0,     0,     0,   263,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   152,
-   153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-   163,   164,   165,   166,   167,   168,   169,   170,   171,   256,
-   257,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   258,     0,   259,   180,
-   181,   182,   183,     0,   260,   261,   262,   188,   189,   190,
-   191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-   147,     0,     0,     0,     0,     0,     0,     0,   263,     0,
-     0,   148,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   149,   150,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   151,     0,
-     0,     0,   152,   153,   154,   155,   156,   157,   158,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-   170,   171,   172,   173,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   174,   175,   176,     0,     0,   177,
-   178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-   188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-   198,   199,   200
-};
-
-static const short yycheck[] = {    36,
-   219,    98,    98,    49,     2,    32,   308,    10,    18,    96,
-    29,   151,    49,    80,    33,   521,   235,   236,    10,     5,
-     6,     7,     8,     9,    10,    11,    12,   132,    37,   134,
-   135,     5,     6,     7,     8,     9,    10,    11,    12,     4,
-   551,   146,   154,    41,   160,    29,   552,   163,    57,   152,
-    15,   163,    27,   152,    57,   566,   123,   160,   152,    96,
-   151,   148,   129,   162,   158,    57,   206,    42,    43,    44,
-    45,    46,    47,    48,    28,    50,    30,    62,   152,   116,
-   117,   152,   119,    58,    82,    52,    53,    54,   162,   176,
-   152,   162,   179,   152,    55,    56,   158,   184,   185,   186,
-   187,   160,   158,    35,    36,    72,   123,   163,    25,    26,
-    51,   148,   129,    54,    55,    25,    26,   204,   205,    73,
-    74,    75,    62,    77,    78,    79,   341,   342,   343,   234,
-   125,   126,   134,   135,   161,    17,    18,   174,   175,   176,
-   177,   178,   179,   162,   146,    17,    18,   184,   185,   186,
-   187,   161,     5,     6,     7,     8,     9,    10,    11,    12,
-    45,    28,    47,    30,   201,   202,   203,   204,   205,   151,
-   237,   238,   158,    30,   241,    65,    66,    67,    68,    69,
-    70,    71,    17,    18,   158,    17,    18,   406,   490,    18,
-   492,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-   117,   118,   119,   120,   121,   310,   243,    17,    18,    17,
-    18,    77,    78,   318,   319,   320,     0,     3,     4,     5,
-     6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-    16,   151,   278,    19,    20,    17,    18,   151,   325,    17,
-    18,   278,    28,   151,    30,    17,    18,    31,   151,   118,
-    34,   156,   289,   154,    18,    18,   154,    30,    42,    43,
-    44,    45,    46,    47,    48,    18,   157,   154,    30,   306,
-    30,   157,    60,   152,   379,   380,   381,   323,    21,    63,
-    21,    21,   387,   160,   152,   155,   323,   324,   325,    64,
-   154,   154,   359,   154,   399,   400,   102,   103,   104,   105,
-   106,   107,   389,   154,   391,   392,   393,   154,   310,   154,
-   397,   154,   118,   119,   120,   121,   318,   319,   320,   156,
-   154,   154,   152,   154,   152,   152,   152,   152,   152,   152,
-   152,   436,   437,   152,   152,   152,   441,    39,   443,    30,
-    30,   152,   447,   155,   160,    30,    15,   154,   453,   454,
-   455,   154,   389,   390,   391,   392,   393,   355,    15,   152,
-   397,   398,   156,   152,    30,   152,    18,   153,    39,   152,
-   156,   152,    37,   159,   154,   161,   162,   379,   380,   381,
-    18,   418,   152,   488,   489,   387,   152,   152,    30,    57,
-   495,   152,    18,   152,   152,   152,   152,   399,   400,   504,
-   152,   152,   152,   152,   152,   152,   152,   444,   152,   154,
-   497,   498,   499,   152,   156,   152,   152,   155,   152,   152,
-   152,   152,   152,   460,   521,   521,   531,   155,   155,   155,
-   155,   155,   155,    15,   436,   437,   155,    57,   158,   441,
-   155,   443,   529,   155,   549,   447,   155,   484,    39,   155,
-   487,   453,   454,   455,   158,   552,   552,   155,   155,   152,
-   497,   498,   499,    15,    15,   152,   503,    15,    15,   574,
-   575,     0,     0,   102,   579,   102,    41,   582,   232,   102,
-   256,   102,    22,   257,   102,   419,   488,   489,    48,   418,
-    27,     2,   529,   495,    39,   577,   365,   366,   367,   368,
-   369,   444,   504,   372,   373,   374,   375,   376,     3,     4,
-     5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-    15,    16,   503,   234,    19,    20,    -1,   424,    -1,   531,
-    -1,    -1,    -1,    28,    -1,    30,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   549,    -1,    -1,
-    -1,    -1,    -1,   422,   423,    -1,    -1,    -1,    -1,    -1,
-   429,    -1,    -1,    -1,    -1,    -1,    -1,    27,    28,    -1,
-    30,    -1,   574,   575,    34,    35,    36,   579,    -1,    -1,
-   582,    -1,    42,    43,    44,    45,    46,    47,    48,    -1,
-    50,    51,    -1,    -1,    -1,    -1,    -1,    -1,    58,    59,
-    -1,    -1,    -1,    63,    -1,    -1,   475,   476,   477,   478,
-    -1,   480,   481,   482,   483,    -1,     3,     4,     5,     6,
-     7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-    -1,    -1,    19,    20,    -1,    -1,    -1,    -1,    -1,   508,
-   509,    28,    -1,    30,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   153,    -1,
-    -1,   156,    -1,    -1,   159,    -1,   161,   162,    -1,    -1,
-    -1,   540,    -1,   542,   543,     3,     4,     5,     6,     7,
-     8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
-    -1,    19,    20,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    28,    -1,    30,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    40,     3,     4,     5,     6,     7,     8,     9,
-    10,    11,    12,    13,    14,    15,    16,    -1,    -1,    19,
-    20,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    -1,
-    30,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    40,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-    12,    13,    14,    15,    16,    -1,   153,    19,    20,   156,
-    -1,    -1,   159,    -1,   161,   162,    28,    -1,    30,     3,
-     4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-    14,    15,    16,    -1,    -1,    19,    20,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    28,    -1,    30,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    40,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   153,    -1,    -1,   156,    -1,
-    -1,   159,    -1,   161,    -1,     3,     4,     5,     6,     7,
-     8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
-    -1,    19,    20,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    28,    -1,    30,   153,    -1,    -1,   156,    -1,    -1,   159,
-    -1,   161,    40,     3,     4,     5,     6,     7,     8,     9,
-    10,    11,    12,    13,    14,    15,    16,    -1,    -1,    19,
-    20,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    -1,
-    30,   153,    -1,    -1,   156,    -1,   158,   159,    -1,   161,
-    -1,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-    12,    13,    14,    15,    16,    -1,    -1,    19,    20,   153,
-    -1,    -1,   156,    -1,    -1,   159,    28,   161,    30,     3,
-     4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-    14,    15,    16,    -1,    -1,    19,    20,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    28,    -1,    30,     3,     4,     5,
-     6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-    16,    -1,    -1,    19,    20,   153,    -1,    -1,   156,    -1,
-    -1,   159,    28,   161,    30,    -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,   153,    -1,    -1,   156,    -1,    -1,   159,
-    -1,   161,    -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,   153,    -1,    -1,   156,    -1,    -1,   159,    -1,   161,
-    19,    20,    -1,    22,    23,    24,    -1,    -1,    -1,    28,
-    -1,    30,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   153,
-    -1,    -1,   156,    -1,    -1,   159,    -1,   161,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   153,    -1,    -1,
-   156,    -1,    -1,   159,    -1,   161,    -1,    -1,    -1,    -1,
-    -1,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-    89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-    99,   100,   101,    -1,    -1,    -1,    -1,    17,    18,    19,
-    20,    21,    22,    23,    24,    25,    26,    -1,    28,    -1,
-    30,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   127,    -1,
-   129,   130,   131,   132,   133,    -1,   135,   136,   137,   138,
-   139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-   149,   150,    62,    -1,    -1,    -1,    -1,   156,    -1,    -1,
-   159,    -1,   161,    -1,    -1,   164,    -1,    -1,    -1,    -1,
-    80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-    90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-   100,   101,    -1,    -1,    -1,    -1,    17,    18,    -1,    -1,
-    21,    22,    23,    24,    25,    26,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   127,    -1,   129,
-   130,   131,   132,   133,    -1,   135,   136,   137,   138,   139,
-   140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-   150,    62,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   159,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,
-    81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-    91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-   101,    -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,   127,    -1,   129,   130,
-   131,   132,   133,    -1,   135,   136,   137,   138,   139,   140,
-   141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-    38,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   159,    -1,
-    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    60,    61,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    76,    -1,
-    -1,    -1,    80,    81,    82,    83,    84,    85,    86,    87,
-    88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-    98,    99,   100,   101,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,   127,
-   128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-   138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-   148,   149,   150
-};
-/* -*-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   1486
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS  165
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS  75
+/* YYNRULES -- Number of rules. */
+#define YYNRULES  301
+/* YYNRULES -- Number of states. */
+#define YYNSTATES  586
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   405
+
+#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,
+     154,   155,   163,     2,   152,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     159,   151,   160,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,   156,   153,   158,     2,     2,     2,     2,     2,   164,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     157,     2,     2,   161,     2,   162,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const unsigned short int yyprhs[] =
+{
+       0,     0,     3,     5,     7,     9,    11,    13,    15,    17,
+      19,    21,    23,    25,    27,    29,    31,    33,    35,    37,
+      39,    41,    43,    45,    47,    49,    51,    53,    55,    57,
+      59,    61,    63,    65,    67,    69,    71,    73,    75,    77,
+      79,    81,    83,    85,    87,    89,    91,    93,    95,    97,
+      99,   101,   103,   105,   107,   109,   111,   113,   115,   117,
+     119,   121,   123,   125,   127,   129,   131,   133,   135,   137,
+     139,   141,   143,   145,   147,   149,   151,   153,   155,   157,
+     159,   161,   164,   165,   167,   169,   171,   173,   175,   177,
+     179,   180,   182,   184,   186,   188,   190,   192,   195,   196,
+     197,   200,   201,   205,   208,   209,   211,   212,   216,   218,
+     221,   223,   225,   227,   229,   231,   233,   235,   237,   239,
+     241,   243,   245,   247,   249,   251,   253,   255,   257,   259,
+     261,   264,   269,   275,   281,   285,   288,   294,   299,   302,
+     304,   308,   310,   314,   316,   317,   322,   326,   330,   335,
+     340,   344,   347,   350,   353,   356,   359,   362,   365,   368,
+     371,   374,   381,   387,   396,   403,   410,   417,   425,   433,
+     440,   447,   456,   465,   469,   471,   473,   475,   477,   480,
+     483,   488,   491,   493,   495,   497,   502,   505,   510,   517,
+     524,   531,   538,   542,   547,   548,   550,   552,   554,   558,
+     562,   566,   570,   574,   578,   580,   581,   583,   585,   587,
+     588,   591,   595,   597,   599,   603,   605,   606,   615,   617,
+     619,   623,   625,   627,   631,   632,   634,   636,   640,   641,
+     643,   645,   647,   649,   651,   653,   655,   657,   659,   663,
+     665,   671,   673,   675,   677,   679,   682,   685,   687,   690,
+     693,   694,   696,   698,   700,   703,   706,   710,   720,   730,
+     739,   754,   756,   758,   765,   771,   774,   781,   789,   791,
+     795,   797,   798,   801,   803,   809,   815,   821,   828,   835,
+     838,   843,   848,   855,   860,   865,   872,   879,   882,   890,
+     892,   895,   896,   898,   899,   903,   910,   914,   921,   924,
+     929,   936
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const short int yyrhs[] =
+{
+     199,     0,    -1,    19,    -1,    20,    -1,    17,    -1,    18,
+      -1,    80,    -1,    81,    -1,    82,    -1,    83,    -1,    84,
+      -1,    85,    -1,    86,    -1,    87,    -1,    88,    -1,    89,
+      -1,    90,    -1,    91,    -1,    92,    -1,    93,    -1,    94,
+      -1,    95,    -1,    96,    -1,    97,    -1,    98,    -1,    99,
+      -1,   102,    -1,   103,    -1,   104,    -1,   105,    -1,   106,
+      -1,   107,    -1,   118,    -1,   119,    -1,   120,    -1,   121,
+      -1,   108,    -1,   109,    -1,   110,    -1,   111,    -1,   112,
+      -1,   113,    -1,   114,    -1,   115,    -1,   116,    -1,   117,
+      -1,   118,    -1,   119,    -1,   120,    -1,   121,    -1,    25,
+      -1,    26,    -1,   130,    -1,   131,    -1,   132,    -1,   133,
+      -1,   139,    -1,   140,    -1,   141,    -1,   142,    -1,   143,
+      -1,   144,    -1,   145,    -1,   146,    -1,   147,    -1,   148,
+      -1,   149,    -1,   150,    -1,   138,    -1,    11,    -1,     9,
+      -1,     7,    -1,     5,    -1,    12,    -1,    10,    -1,     8,
+      -1,     6,    -1,   175,    -1,   176,    -1,    13,    -1,    14,
+      -1,   208,   151,    -1,    -1,    42,    -1,    43,    -1,    44,
+      -1,    48,    -1,    45,    -1,    46,    -1,    47,    -1,    -1,
+      66,    -1,    67,    -1,    68,    -1,    69,    -1,    70,    -1,
+      71,    -1,    65,    18,    -1,    -1,    -1,    57,    18,    -1,
+      -1,   152,    57,    18,    -1,    37,    30,    -1,    -1,   184,
+      -1,    -1,   152,   187,   186,    -1,   184,    -1,    57,    18,
+      -1,   190,    -1,     3,    -1,   192,    -1,     3,    -1,   192,
+      -1,     4,    -1,     5,    -1,     6,    -1,     7,    -1,     8,
+      -1,     9,    -1,    10,    -1,    11,    -1,    12,    -1,    13,
+      -1,    14,    -1,    15,    -1,    16,    -1,   222,    -1,   191,
+      -1,   153,    18,    -1,   189,   154,   194,   155,    -1,   156,
+      18,   157,   192,   158,    -1,   159,    18,   157,   192,   160,
+      -1,   161,   193,   162,    -1,   161,   162,    -1,   159,   161,
+     193,   162,   160,    -1,   159,   161,   162,   160,    -1,   192,
+     163,    -1,   192,    -1,   193,   152,   192,    -1,   193,    -1,
+     193,   152,    40,    -1,    40,    -1,    -1,   190,   156,   197,
+     158,    -1,   190,   156,   158,    -1,   190,   164,    30,    -1,
+     190,   159,   197,   160,    -1,   190,   161,   197,   162,    -1,
+     190,   161,   162,    -1,   190,    22,    -1,   190,    23,    -1,
+     190,   222,    -1,   190,   196,    -1,   190,    24,    -1,   175,
+     167,    -1,   176,   167,    -1,     4,    25,    -1,     4,    26,
+      -1,   178,    21,    -1,   174,   154,   195,    39,   190,   155,
+      -1,   127,   154,   195,   237,   155,    -1,   129,   154,   195,
+     152,   195,   152,   195,   155,    -1,   168,   154,   195,   152,
+     195,   155,    -1,   169,   154,   195,   152,   195,   155,    -1,
+     170,   154,   195,   152,   195,   155,    -1,   100,   171,   154,
+     195,   152,   195,   155,    -1,   101,   172,   154,   195,   152,
+     195,   155,    -1,   173,   154,   195,   152,   195,   155,    -1,
+     135,   154,   195,   152,   195,   155,    -1,   136,   154,   195,
+     152,   195,   152,   195,   155,    -1,   137,   154,   195,   152,
+     195,   152,   195,   155,    -1,   197,   152,   195,    -1,   195,
+      -1,    35,    -1,    36,    -1,   200,    -1,   200,   217,    -1,
+     200,   219,    -1,   200,    63,    62,   203,    -1,   200,    31,
+      -1,   202,    -1,    50,    -1,    58,    -1,   202,   179,    27,
+     188,    -1,   202,   219,    -1,   202,    63,    62,   203,    -1,
+     202,   179,   180,   198,   195,   186,    -1,   202,   179,   201,
+     198,   190,   186,    -1,   202,   179,    45,   198,   190,   186,
+      -1,   202,   179,    47,   198,   190,   186,    -1,   202,    51,
+     205,    -1,   202,    59,   151,   206,    -1,    -1,    30,    -1,
+      56,    -1,    55,    -1,    53,   151,   204,    -1,    54,   151,
+      18,    -1,    52,   151,    30,    -1,    72,   151,    30,    -1,
+     156,   207,   158,    -1,   207,   152,    30,    -1,    30,    -1,
+      -1,    28,    -1,    30,    -1,   208,    -1,    -1,   190,   209,
+      -1,   211,   152,   210,    -1,   210,    -1,   211,    -1,   211,
+     152,    40,    -1,    40,    -1,    -1,   181,   188,   208,   154,
+     212,   155,   185,   182,    -1,    32,    -1,   161,    -1,   180,
+     213,   214,    -1,    33,    -1,   162,    -1,   215,   225,   216,
+      -1,    -1,    45,    -1,    47,    -1,    34,   218,   213,    -1,
+      -1,    64,    -1,    17,    -1,    18,    -1,    21,    -1,    25,
+      -1,    26,    -1,    22,    -1,    23,    -1,    24,    -1,   159,
+     197,   160,    -1,   196,    -1,    62,   220,    30,   152,    30,
+      -1,   166,    -1,   208,    -1,   222,    -1,   221,    -1,   190,
+     223,    -1,   225,   226,    -1,   226,    -1,   227,   229,    -1,
+     227,   231,    -1,    -1,    29,    -1,    78,    -1,    77,    -1,
+      73,   224,    -1,    73,     3,    -1,    74,    15,   223,    -1,
+      74,     4,   223,   152,    15,   223,   152,    15,   223,    -1,
+      75,   177,   223,   152,    15,   223,   156,   230,   158,    -1,
+      75,   177,   223,   152,    15,   223,   156,   158,    -1,   179,
+      76,   181,   188,   223,   154,   234,   155,    39,    15,   223,
+     228,    15,   223,    -1,   228,    -1,    79,    -1,   230,   177,
+     221,   152,    15,   223,    -1,   177,   221,   152,    15,   223,
+      -1,   179,   236,    -1,   190,   156,   223,   152,   223,   158,
+      -1,   232,   152,   156,   223,   152,   223,   158,    -1,   224,
+      -1,   233,   152,   224,    -1,   233,    -1,    -1,    61,    60,
+      -1,    60,    -1,   168,   190,   223,   152,   223,    -1,   169,
+     190,   223,   152,   223,    -1,   170,   190,   223,   152,   223,
+      -1,   100,   171,   190,   223,   152,   223,    -1,   101,   172,
+     190,   223,   152,   223,    -1,    49,   224,    -1,   173,   224,
+     152,   224,    -1,   174,   224,    39,   190,    -1,   129,   224,
+     152,   224,   152,   224,    -1,   134,   224,   152,   190,    -1,
+     135,   224,   152,   224,    -1,   136,   224,   152,   224,   152,
+     224,    -1,   137,   224,   152,   224,   152,   224,    -1,   128,
+     232,    -1,   235,   181,   188,   223,   154,   234,   155,    -1,
+     239,    -1,   152,   233,    -1,    -1,    38,    -1,    -1,   122,
+     190,   183,    -1,   122,   190,   152,    10,   223,   183,    -1,
+     123,   190,   183,    -1,   123,   190,   152,    10,   223,   183,
+      -1,   124,   224,    -1,   238,   125,   190,   223,    -1,   238,
+     126,   224,   152,   190,   223,    -1,   127,   190,   223,   237,
+      -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const unsigned short int yyrline[] =
+{
+       0,   807,   807,   807,   808,   808,   812,   812,   812,   812,
+     812,   812,   812,   813,   813,   813,   813,   814,   814,   814,
+     815,   815,   815,   815,   815,   815,   816,   816,   816,   816,
+     816,   816,   816,   816,   816,   816,   817,   817,   817,   817,
+     817,   817,   817,   817,   817,   817,   818,   818,   818,   818,
+     818,   818,   819,   819,   819,   819,   820,   820,   820,   820,
+     820,   820,   820,   821,   821,   821,   821,   821,   821,   826,
+     826,   826,   826,   827,   827,   827,   827,   828,   828,   829,
+     829,   832,   835,   840,   840,   840,   840,   840,   840,   841,
+     842,   845,   845,   845,   845,   845,   846,   847,   852,   857,
+     858,   861,   862,   870,   876,   877,   880,   881,   890,   891,
+     904,   904,   905,   905,   906,   910,   910,   910,   910,   910,
+     910,   910,   911,   911,   911,   911,   911,   913,   916,   919,
+     922,   926,   939,   945,   951,   961,   964,   974,   977,   985,
+     989,   996,   997,  1002,  1007,  1017,  1023,  1028,  1034,  1040,
+    1046,  1051,  1057,  1063,  1070,  1076,  1082,  1088,  1094,  1100,
+    1106,  1114,  1128,  1140,  1145,  1151,  1156,  1162,  1167,  1172,
+    1180,  1185,  1190,  1200,  1205,  1210,  1210,  1220,  1225,  1228,
+    1233,  1237,  1241,  1243,  1243,  1246,  1256,  1261,  1266,  1276,
+    1286,  1296,  1306,  1311,  1316,  1321,  1323,  1323,  1326,  1331,
+    1338,  1343,  1350,  1357,  1362,  1363,  1371,  1371,  1372,  1372,
+    1374,  1383,  1387,  1391,  1394,  1399,  1402,  1405,  1423,  1424,
+    1427,  1438,  1439,  1441,  1450,  1451,  1452,  1456,  1469,  1470,
+    1473,  1473,  1473,  1473,  1473,  1473,  1473,  1474,  1475,  1480,
+    1481,  1490,  1490,  1494,  1499,  1509,  1518,  1521,  1529,  1533,
+    1538,  1541,  1547,  1547,  1549,  1554,  1559,  1564,  1572,  1580,
+    1587,  1609,  1614,  1620,  1626,  1634,  1652,  1660,  1669,  1673,
+    1680,  1681,  1685,  1690,  1693,  1702,  1710,  1719,  1727,  1735,
+    1740,  1749,  1777,  1783,  1789,  1796,  1802,  1808,  1814,  1832,
+    1837,  1838,  1842,  1843,  1846,  1854,  1863,  1871,  1880,  1886,
+    1895,  1904
+};
+#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", "VOID", "BOOL", "SBYTE", "UBYTE",
+  "SHORT", "USHORT", "INT", "UINT", "LONG", "ULONG", "FLOAT", "DOUBLE",
+  "LABEL", "OPAQUE", "ESINT64VAL", "EUINT64VAL", "SINTVAL", "UINTVAL",
+  "FPVAL", "NULL_TOK", "UNDEF", "ZEROINITIALIZER", "TRUETOK", "FALSETOK",
+  "TYPE", "VAR_ID", "LABELSTR", "STRINGCONSTANT", "IMPLEMENTATION",
+  "BEGINTOK", "ENDTOK", "DECLARE", "GLOBAL", "CONSTANT", "SECTION",
+  "VOLATILE", "TO", "DOTDOTDOT", "CONST", "INTERNAL", "LINKONCE", "WEAK",
+  "DLLIMPORT", "DLLEXPORT", "EXTERN_WEAK", "APPENDING", "NOT", "EXTERNAL",
+  "TARGET", "TRIPLE", "ENDIAN", "POINTERSIZE", "LITTLE", "BIG", "ALIGN",
+  "UNINITIALIZED", "DEPLIBS", "CALL", "TAIL", "ASM_TOK", "MODULE",
+  "SIDEEFFECT", "CC_TOK", "CCC_TOK", "CSRETCC_TOK", "FASTCC_TOK",
+  "COLDCC_TOK", "X86_STDCALLCC_TOK", "X86_FASTCALLCC_TOK", "DATALAYOUT",
+  "RET", "BR", "SWITCH", "INVOKE", "EXCEPT", "UNWIND", "UNREACHABLE",
+  "ADD", "SUB", "MUL", "DIV", "UDIV", "SDIV", "FDIV", "REM", "UREM",
+  "SREM", "FREM", "AND", "OR", "XOR", "SETLE", "SETGE", "SETLT", "SETGT",
+  "SETEQ", "SETNE", "ICMP", "FCMP", "EQ", "NE", "SLT", "SGT", "SLE", "SGE",
+  "OEQ", "ONE", "OLT", "OGT", "OLE", "OGE", "ORD", "UNO", "UEQ", "UNE",
+  "ULT", "UGT", "ULE", "UGE", "MALLOC", "ALLOCA", "FREE", "LOAD", "STORE",
+  "GETELEMENTPTR", "PHI_TOK", "SELECT", "SHL", "SHR", "ASHR", "LSHR",
+  "VAARG", "EXTRACTELEMENT", "INSERTELEMENT", "SHUFFLEVECTOR", "CAST",
+  "TRUNC", "ZEXT", "SEXT", "FPTRUNC", "FPEXT", "FPTOUI", "FPTOSI",
+  "UITOFP", "SITOFP", "PTRTOINT", "INTTOPTR", "BITCAST", "'='", "','",
+  "'\\\\'", "'('", "')'", "'['", "'x'", "']'", "'<'", "'>'", "'{'", "'}'",
+  "'*'", "'c'", "$accept", "IntVal", "EInt64Val", "ArithmeticOps",
+  "LogicalOps", "SetCondOps", "IPredicates", "FPredicates", "ShiftOps",
+  "CastOps", "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", "DefinitionList", "External", "ConstPool", "AsmBlock",
+  "BigOrLittle", "TargetDefinition", "LibrariesDefinition", "LibList",
+  "Name", "OptName", "ArgVal", "ArgListH", "ArgList", "FunctionHeaderH",
+  "BEGIN", "FunctionHeader", "END", "Function", "FnDeclareLinkage",
+  "FunctionProto", "OptSideEffect", "ConstValueRef", "SymbolicValueRef",
+  "ValueRef", "ResolvedVal", "BasicBlockList", "BasicBlock",
+  "InstructionList", "Unwind", "BBTerminatorInst", "JumpTable", "Inst",
+  "PHIList", "ValueRefList", "ValueRefListE", "OptTailCall", "InstVal",
+  "IndexList", "OptVolatile", "MemoryInst", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const unsigned short int yytoknum[] =
+{
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
+     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
+     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
+     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
+     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
+     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
+     385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+     395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
+     405,    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,   165,   166,   166,   167,   167,   168,   168,   168,   168,
+     168,   168,   168,   168,   168,   168,   168,   169,   169,   169,
+     170,   170,   170,   170,   170,   170,   171,   171,   171,   171,
+     171,   171,   171,   171,   171,   171,   172,   172,   172,   172,
+     172,   172,   172,   172,   172,   172,   172,   172,   172,   172,
+     172,   172,   173,   173,   173,   173,   174,   174,   174,   174,
+     174,   174,   174,   174,   174,   174,   174,   174,   174,   175,
+     175,   175,   175,   176,   176,   176,   176,   177,   177,   178,
+     178,   179,   179,   180,   180,   180,   180,   180,   180,   180,
+     180,   181,   181,   181,   181,   181,   181,   181,   181,   182,
+     182,   183,   183,   184,   185,   185,   186,   186,   187,   187,
+     188,   188,   189,   189,   190,   191,   191,   191,   191,   191,
+     191,   191,   191,   191,   191,   191,   191,   192,   192,   192,
+     192,   192,   192,   192,   192,   192,   192,   192,   192,   193,
+     193,   194,   194,   194,   194,   195,   195,   195,   195,   195,
+     195,   195,   195,   195,   195,   195,   195,   195,   195,   195,
+     195,   196,   196,   196,   196,   196,   196,   196,   196,   196,
+     196,   196,   196,   197,   197,   198,   198,   199,   200,   200,
+     200,   200,   200,   201,   201,   202,   202,   202,   202,   202,
+     202,   202,   202,   202,   202,   203,   204,   204,   205,   205,
+     205,   205,   206,   207,   207,   207,   208,   208,   209,   209,
+     210,   211,   211,   212,   212,   212,   212,   213,   214,   214,
+     215,   216,   216,   217,   218,   218,   218,   219,   220,   220,
+     221,   221,   221,   221,   221,   221,   221,   221,   221,   221,
+     221,   222,   222,   223,   223,   224,   225,   225,   226,   227,
+     227,   227,   228,   228,   229,   229,   229,   229,   229,   229,
+     229,   229,   229,   230,   230,   231,   232,   232,   233,   233,
+     234,   234,   235,   235,   236,   236,   236,   236,   236,   236,
+     236,   236,   236,   236,   236,   236,   236,   236,   236,   236,
+     237,   237,   238,   238,   239,   239,   239,   239,   239,   239,
+     239,   239
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const unsigned char yyr2[] =
+{
+       0,     2,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     2,     0,     1,     1,     1,     1,     1,     1,     1,
+       0,     1,     1,     1,     1,     1,     1,     2,     0,     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,
+       2,     4,     5,     5,     3,     2,     5,     4,     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,     7,     7,     6,
+       6,     8,     8,     3,     1,     1,     1,     1,     2,     2,
+       4,     2,     1,     1,     1,     4,     2,     4,     6,     6,
+       6,     6,     3,     4,     0,     1,     1,     1,     3,     3,
+       3,     3,     3,     3,     1,     0,     1,     1,     1,     0,
+       2,     3,     1,     1,     3,     1,     0,     8,     1,     1,
+       3,     1,     1,     3,     0,     1,     1,     3,     0,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     3,     1,
+       5,     1,     1,     1,     1,     2,     2,     1,     2,     2,
+       0,     1,     1,     1,     2,     2,     3,     9,     9,     8,
+      14,     1,     1,     6,     5,     2,     6,     7,     1,     3,
+       1,     0,     2,     1,     5,     5,     5,     6,     6,     2,
+       4,     4,     6,     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 short int yydefact[] =
+{
+     194,     0,    90,   182,     1,   181,   224,    83,    84,    85,
+      87,    88,    89,    86,     0,    98,   250,   178,   179,   206,
+     207,     0,     0,     0,    90,     0,   186,   225,   226,    98,
+       0,     0,    91,    92,    93,    94,    95,    96,     0,     0,
+     251,   250,   247,    82,     0,     0,     0,     0,   192,     0,
+       0,     0,     0,     0,   183,   184,     0,     0,    81,   227,
+     195,   180,    97,   111,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,     2,     3,     0,
+       0,     0,     0,   241,     0,     0,   110,   129,   114,   242,
+     128,   218,   219,   220,   221,   222,   223,   246,     0,     0,
+       0,   253,   252,   262,   293,   261,   248,   249,     0,     0,
+       0,     0,   205,   193,   187,   185,   175,   176,     0,     0,
+       0,     0,   130,     0,     0,     0,   113,   135,   139,     0,
+       0,   144,   138,   255,     0,   254,     0,     0,    72,    76,
+      71,    75,    70,    74,    69,    73,    77,    78,     0,   292,
+       0,   273,     0,    98,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,     0,     0,     0,     0,     0,     0,
+       0,     0,    52,    53,    54,    55,     0,     0,     0,     0,
+      68,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,     0,     0,     0,     0,     0,    98,   265,
+       0,   289,   200,   197,   196,   198,   199,   201,   204,     0,
+     106,   106,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,     0,     0,     0,     0,   106,   106,     0,
+       0,     0,     0,     0,   134,   216,   143,   141,     0,   230,
+     231,   232,   235,   236,   237,   233,   234,   228,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   239,   244,   243,   245,     0,   256,     0,   279,   272,
+       0,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,     0,    50,    51,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,     0,   101,
+     101,   298,     0,     0,   287,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   202,
+       0,   190,   191,   158,   159,     4,     5,   156,   157,   160,
+     151,   152,   155,     0,     0,     0,     0,   154,   153,   188,
+     189,   112,   112,   137,     0,   140,   215,   209,   212,   213,
+       0,     0,   131,   229,     0,     0,     0,     0,     0,     0,
+       0,     0,   174,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   294,     0,   296,   291,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   203,     0,     0,   108,   106,   146,
+       0,     0,   150,     0,   147,   132,   133,   136,   208,   210,
+       0,   104,   142,     0,     0,     0,   291,     0,     0,     0,
+       0,     0,   238,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   301,     0,     0,
+       0,   283,   284,     0,     0,     0,     0,     0,   280,   281,
+       0,   299,     0,   103,   109,   107,   145,   148,   149,   214,
+     211,   105,    99,     0,     0,     0,     0,     0,     0,     0,
+       0,   173,     0,     0,     0,     0,     0,     0,     0,   271,
+       0,     0,   101,   102,   101,   268,   290,     0,     0,     0,
+       0,     0,   274,   275,   276,   271,     0,     0,   217,   240,
+       0,     0,   162,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   270,     0,   277,   278,     0,   295,
+     297,     0,     0,     0,   282,   285,   286,     0,   300,   100,
+       0,     0,     0,   170,     0,     0,   164,   165,   166,   169,
+     161,     0,   259,     0,     0,     0,   269,   266,     0,   288,
+     167,   168,     0,     0,     0,   257,     0,   258,     0,     0,
+     267,   163,   171,   172,     0,     0,     0,     0,     0,     0,
+     264,     0,     0,   263,     0,   260
+};
+
+/* YYDEFGOTO[NTERM-NUM]. */
+static const short int yydefgoto[] =
+{
+      -1,    83,   337,   266,   267,   268,   291,   308,   269,   270,
+     233,   234,   148,   235,    24,    15,    38,   508,   385,   407,
+     472,   331,   408,    84,    85,   236,    87,    88,   129,   248,
+     372,   271,   373,   118,     1,     2,    57,     3,    61,   215,
+      48,   113,   219,    89,   419,   358,   359,   360,    39,    93,
+      16,    96,    17,    29,    18,   364,   272,    90,   274,   495,
+      41,    42,    43,   105,   106,   554,   107,   314,   524,   525,
+     208,   209,   447,   210,   211
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -513
+static const short int yypact[] =
+{
+    -513,    46,   217,   541,  -513,  -513,    82,  -513,  -513,  -513,
+    -513,  -513,  -513,  -513,    16,   111,    25,  -513,  -513,  -513,
+    -513,    34,   -55,    61,    26,   -23,  -513,  -513,  -513,   111,
+     132,   146,  -513,  -513,  -513,  -513,  -513,  -513,   873,   -26,
+    -513,   -18,  -513,    47,    19,    23,    39,    67,  -513,    77,
+     132,   873,    81,    81,  -513,  -513,    81,    81,  -513,  -513,
+    -513,  -513,  -513,    89,  -513,  -513,  -513,  -513,  -513,  -513,
+    -513,  -513,  -513,  -513,  -513,  -513,  -513,  -513,  -513,   227,
+     229,    -9,   506,  -513,   133,    95,  -513,  -513,  -111,  -513,
+    -513,  -513,  -513,  -513,  -513,  -513,  -513,  -513,   901,    36,
+     148,  -513,  -513,  -513,  1336,  -513,  -513,  -513,   222,    76,
+     250,   239,   241,  -513,  -513,  -513,  -513,  -513,   933,   933,
+     963,   933,  -513,   115,   116,   614,  -513,  -513,  -111,  -104,
+     120,   216,  -513,    89,  1134,  -513,  1134,  1134,  -513,  -513,
+    -513,  -513,  -513,  -513,  -513,  -513,  -513,  -513,  1134,  -513,
+     933,  -513,   218,   111,  -513,  -513,  -513,  -513,  -513,  -513,
+    -513,  -513,  -513,  -513,  -513,  -513,  -513,  -513,  -513,  -513,
+    -513,  -513,  -513,  -513,   195,    84,   933,   933,   933,   933,
+     933,   933,  -513,  -513,  -513,  -513,   933,   933,   933,   933,
+    -513,  -513,  -513,  -513,  -513,  -513,  -513,  -513,  -513,  -513,
+    -513,  -513,  -513,   933,   933,   933,   933,   933,   111,  -513,
+      11,  -513,  -513,  -513,  -513,  -513,  -513,  -513,  -513,   -93,
+     129,   129,   121,   166,   169,   191,   193,   220,   223,   237,
+     240,   261,   263,   249,   249,   264,  1045,   129,   129,   933,
+     933,   126,   -73,   933,  -513,   701,  -513,   138,   136,  -513,
+    -513,  -513,  -513,  -513,  -513,  -513,  -513,   228,   195,    84,
+     140,   150,   154,   156,   158,   963,   167,   168,   170,   171,
+     172,  -513,  -513,  -513,  -513,   175,  -513,   176,  -513,  -513,
+     873,  -513,  -513,  -513,  -513,  -513,  -513,  -513,  -513,  -513,
+    -513,   933,  -513,  -513,  -513,  -513,  -513,  -513,  -513,  -513,
+    -513,  -513,  -513,  -513,  -513,  -513,  -513,  -513,   933,   177,
+     178,  -513,  1134,   164,   179,   182,   183,   184,   186,   188,
+    1134,  1134,  1134,   189,   284,   873,   933,   933,   312,  -513,
+      -8,  -513,  -513,  -513,  -513,  -513,  -513,  -513,  -513,  -513,
+    -513,  -513,  -513,   741,   963,   673,   314,  -513,  -513,  -513,
+    -513,  -113,   -99,  -513,   185,  -111,  -513,   133,  -513,   194,
+     192,   774,  -513,  -513,   318,   198,   205,   963,   963,   963,
+     963,   963,  -513,   -58,   963,   963,   963,   963,   963,   345,
+     348,  1134,  1134,  1134,    -2,  -513,     9,  -513,   212,  1134,
+     209,   933,   933,   933,   933,   933,   214,   215,   219,   933,
+     933,  1134,  1134,   221,  -513,   338,   352,  -513,   129,  -513,
+     -61,   -57,  -513,   -70,  -513,  -513,  -513,  -513,  -513,  -513,
+     833,   337,  -513,   224,   963,   963,   212,   231,   235,   236,
+     238,   963,  -513,   242,   243,   244,   245,   342,  1134,  1134,
+     247,   251,   252,  1134,   371,  1134,   933,  -513,   253,  1134,
+     254,  -513,  -513,   255,   257,  1134,  1134,  1134,  -513,  -513,
+     248,  -513,   933,  -513,  -513,  -513,  -513,  -513,  -513,  -513,
+    -513,  -513,   335,   363,   258,   262,   260,   963,   963,   963,
+     963,  -513,   963,   963,   963,   963,   933,   265,   266,   933,
+    1134,  1134,   267,  -513,   267,  -513,   268,  1134,   269,   933,
+     933,   933,  -513,  -513,  -513,   933,  1134,   398,  -513,  -513,
+     963,   963,  -513,   271,   273,   277,   278,   276,   279,   282,
+     283,   286,   403,    15,   268,   289,  -513,  -513,   375,  -513,
+    -513,   933,   275,  1134,  -513,  -513,  -513,   292,  -513,  -513,
+     294,   295,   963,  -513,   963,   963,  -513,  -513,  -513,  -513,
+    -513,  1134,  -513,  1223,    27,   400,  -513,  -513,   297,  -513,
+    -513,  -513,   303,   304,   305,  -513,   313,  -513,  1223,   449,
+    -513,  -513,  -513,  -513,   451,   316,  1134,  1134,   454,   135,
+    -513,  1134,   457,  -513,  1134,  -513
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const short int yypgoto[] =
+{
+    -513,  -513,   246,   369,   370,   372,   225,   226,   373,   377,
+     -98,   -97,  -507,  -513,   436,   458,  -141,  -513,  -303,    63,
+    -513,  -220,  -513,   -46,  -513,   -38,  -513,   -68,   -20,  -513,
+     130,   256,  -230,    51,  -513,  -513,  -513,  -513,   439,  -513,
+    -513,  -513,  -513,     1,  -513,    66,  -513,  -513,   461,  -513,
+    -513,  -513,  -513,  -513,   488,  -513,  -512,  -106,    -3,   -88,
+    -513,   455,  -513,   -84,  -513,  -513,  -513,  -513,    56,    18,
+    -513,  -513,    98,  -513,  -513
+};
+
+/* 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 -178
+static const short int yytable[] =
+{
+      86,   332,   146,   147,    25,   115,    91,   387,   443,   124,
+     135,    40,   280,    86,   128,    94,   553,   349,   350,   445,
+     138,   139,   140,   141,   142,   143,   144,   145,   273,   405,
+     273,   273,   138,   139,   140,   141,   142,   143,   144,   145,
+     136,   566,   273,  -112,    25,   415,     4,   568,   243,   406,
+     132,   137,   132,    51,    40,   444,   575,   128,   244,   328,
+     134,   416,   278,   128,   132,   329,   444,   325,     7,     8,
+       9,    52,    11,    53,    13,    19,    54,    20,    30,   243,
+     220,   221,   431,   238,    55,   130,    44,    45,    46,   354,
+     311,   431,   468,   315,   431,   431,    49,   466,   316,   317,
+     318,   319,   432,   467,   119,   242,    47,   120,   121,   292,
+     293,   247,   134,   410,   411,   413,   116,   117,   323,   324,
+      98,    99,   100,    50,   101,   102,   103,    27,    58,    28,
+     348,   213,   214,   275,   276,    92,   326,   327,   309,   310,
+     134,   312,   313,   134,    95,   277,   333,   334,   134,   134,
+     134,   134,   125,   138,   139,   140,   141,   142,   143,   144,
+     145,    19,    60,    20,    62,   320,   321,   322,   134,   134,
+     108,   351,   352,   552,   109,   355,    31,    32,    33,    34,
+      35,    36,    37,   -72,   -72,   567,   -76,   -76,   465,   529,
+     110,   530,   294,   295,   296,   297,   298,   299,   300,   301,
+     302,   303,   304,   305,   306,   307,   273,   357,   -71,   -71,
+     -75,   -75,   101,   102,   273,   273,   273,  -177,   111,   126,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,   112,   381,    77,    78,   -70,   -70,   403,
+     -74,   -74,    86,  -113,    19,   122,    20,   123,     5,   131,
+     237,     6,   212,   382,   -69,   -69,   246,   -73,   -73,     7,
+       8,     9,    10,    11,    12,    13,   335,   336,   216,   217,
+     383,   218,   239,   240,   245,   273,   273,   273,   279,   401,
+      14,   330,   -79,   273,   -80,   339,   353,    86,   402,   134,
+     361,   362,   363,   355,   367,   273,   273,   281,   282,   283,
+     284,   285,   286,   450,   368,   452,   453,   454,   369,   388,
+     370,   458,   371,   287,   288,   289,   290,   396,   397,   398,
+     389,   374,   375,   400,   376,   377,   378,   379,   380,   384,
+     386,   390,   273,   273,   391,   392,   393,   273,   394,   273,
+     395,   399,   404,   273,   414,   417,   420,   421,   423,   273,
+     273,   273,   424,   134,   451,   134,   134,   134,   418,   425,
+     438,   134,   459,   439,   446,   449,   455,   456,   463,    79,
+     464,   457,    80,   462,   405,    81,   473,    82,   440,   441,
+     442,   486,   357,   477,   273,   273,   448,   478,   479,   493,
+     480,   273,   507,   509,   482,   483,   484,   485,   460,   461,
+     273,   489,   505,   490,   491,   497,   499,   500,   134,   501,
+     510,   534,   535,   536,   511,   512,   539,   522,   551,   528,
+     531,   533,   523,   542,   506,   146,   147,   273,   543,   544,
+     545,   546,   444,   557,   547,   487,   488,   548,   549,   569,
+     492,   550,   494,   556,   555,   273,   498,   559,   521,   560,
+     561,   134,   502,   503,   504,   570,   146,   147,   571,   572,
+     573,   134,   134,   134,   576,   574,   577,   134,   578,   581,
+     273,   273,   584,   203,   204,   273,   205,   206,   273,   104,
+     338,   207,    56,   365,   471,   366,   470,   526,   527,   114,
+      59,    26,   347,   134,   532,   582,    97,   426,   427,   428,
+     429,   430,   496,   538,   433,   434,   435,   436,   437,   126,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,   537,   476,    77,    78,     0,     0,     0,
+     558,     0,     0,     0,    19,     0,    20,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   565,     0,
+       0,     0,     0,     0,   474,   475,     0,     0,     0,     0,
+       0,   481,     0,     0,     0,     0,     0,     0,   -82,    19,
+       0,    20,     0,   579,   580,     6,   -82,   -82,   583,     0,
+       0,   585,     0,   -82,   -82,   -82,   -82,   -82,   -82,   -82,
+       0,   -82,    21,     0,     0,     0,     0,     0,     0,   -82,
+      22,     0,     0,     0,    23,     0,     0,   513,   514,   515,
+     516,     0,   517,   518,   519,   520,     0,   126,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,     0,     0,    77,    78,     0,     0,     0,     0,     0,
+     540,   541,    19,     0,    20,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    79,
+       0,     0,    80,     0,     0,    81,     0,    82,   127,     0,
+       0,     0,   562,     0,   563,   564,   126,   222,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,    75,    76,
+       0,     0,    77,    78,     0,     0,     0,     0,     0,     0,
+       0,    19,     0,    20,   126,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,     0,     0,
+      77,    78,     0,     0,     0,     0,     0,     0,     0,    19,
+       0,    20,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   356,     0,     0,   126,   222,   223,   224,   225,   226,
+     227,   228,   229,   230,   231,   232,    75,    76,     0,     0,
+      77,    78,     0,     0,     0,     0,     0,    79,     0,    19,
+      80,    20,     0,    81,     0,    82,   241,   126,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,     0,     0,    77,    78,     0,     0,     0,     0,     0,
+       0,     0,    19,     0,    20,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   422,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    79,     0,     0,    80,
+       0,     0,    81,     0,    82,   412,   126,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+       0,     0,    77,    78,    79,     0,     0,    80,     0,     0,
+      81,    19,    82,    20,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   469,     0,     0,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+       0,     0,    77,    78,    79,     0,     0,    80,     0,   409,
+      81,    19,    82,    20,   133,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,     0,     0,
+      77,    78,     0,     0,     0,     0,     0,    79,     0,    19,
+      80,    20,     0,    81,     0,    82,   126,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+       0,     0,    77,    78,     0,     0,     0,     0,     0,     0,
+       0,    19,     0,    20,     0,     0,   126,   222,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,    75,    76,
+       0,     0,    77,    78,     0,     0,    79,     0,     0,    80,
+       0,    19,    81,    20,    82,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    79,     0,     0,    80,
+       0,     0,    81,     0,    82,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    79,     0,     0,    80,     0,     0,
+      81,     0,    82,     0,    77,    78,     0,   340,   341,   342,
+       0,     0,     0,    19,     0,    20,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    79,     0,     0,    80,
+       0,     0,    81,     0,    82,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    79,     0,     0,    80,
+       0,     0,    81,     0,    82,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   258,   259,     0,     0,     0,
+       0,   249,   250,    77,    78,   251,   252,   253,   254,   255,
+     256,     0,    19,     0,    20,     0,     0,     0,     0,     0,
+       0,     0,   260,     0,   261,   182,   183,   184,   185,     0,
+     262,   263,   264,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,   199,   200,   201,   202,   257,     0,     0,     0,
+       0,   343,     0,     0,   344,     0,   345,     0,     0,   346,
+       0,     0,     0,     0,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   258,   259,     0,     0,     0,     0,
+     249,   250,     0,     0,   251,   252,   253,   254,   255,   256,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   260,     0,   261,   182,   183,   184,   185,     0,   262,
+     263,   264,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   257,     0,     0,     0,     0,
+       0,     0,     0,   265,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   258,   259,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     260,     0,   261,   182,   183,   184,   185,     0,   262,   263,
+     264,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   149,     0,     0,     0,     0,     0,
+       0,     0,   265,     0,     0,   150,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   151,   152,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   153,     0,     0,     0,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   176,   177,
+     178,     0,     0,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202
+};
+
+static const short int yycheck[] =
+{
+      38,   221,   100,   100,     3,    51,    32,   310,    10,    18,
+      98,    29,   153,    51,    82,    33,   523,   237,   238,    10,
+       5,     6,     7,     8,     9,    10,    11,    12,   134,    37,
+     136,   137,     5,     6,     7,     8,     9,    10,    11,    12,
+       4,   553,   148,   154,    43,   158,     0,   554,   152,    57,
+     163,    15,   163,    27,    29,    57,   568,   125,   162,   152,
+      98,   160,   150,   131,   163,   158,    57,   208,    42,    43,
+      44,    45,    46,    47,    48,    28,    50,    30,    62,   152,
+     118,   119,   152,   121,    58,    84,    52,    53,    54,   162,
+     178,   152,   162,   181,   152,   152,   151,   158,   186,   187,
+     188,   189,   160,   160,    53,   125,    72,    56,    57,    25,
+      26,   131,   150,   343,   344,   345,    35,    36,   206,   207,
+      73,    74,    75,    62,    77,    78,    79,    45,   151,    47,
+     236,    55,    56,   136,   137,   161,   125,   126,   176,   177,
+     178,   179,   180,   181,   162,   148,    25,    26,   186,   187,
+     188,   189,   161,     5,     6,     7,     8,     9,    10,    11,
+      12,    28,    30,    30,    18,   203,   204,   205,   206,   207,
+     151,   239,   240,   158,   151,   243,    65,    66,    67,    68,
+      69,    70,    71,    17,    18,   158,    17,    18,   408,   492,
+     151,   494,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   312,   245,    17,    18,
+      17,    18,    77,    78,   320,   321,   322,     0,   151,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,   156,   280,    19,    20,    17,    18,   327,
+      17,    18,   280,   154,    28,    18,    30,    18,    31,   154,
+     120,    34,    30,   291,    17,    18,    40,    17,    18,    42,
+      43,    44,    45,    46,    47,    48,    17,    18,    18,    30,
+     308,    30,   157,   157,   154,   381,   382,   383,    60,   325,
+      63,   152,    21,   389,    21,    21,   160,   325,   326,   327,
+     152,   155,    64,   361,   154,   401,   402,   102,   103,   104,
+     105,   106,   107,   391,   154,   393,   394,   395,   154,   312,
+     154,   399,   154,   118,   119,   120,   121,   320,   321,   322,
+     156,   154,   154,    39,   154,   154,   154,   152,   152,   152,
+     152,   152,   438,   439,   152,   152,   152,   443,   152,   445,
+     152,   152,    30,   449,    30,   160,   152,   155,    30,   455,
+     456,   457,   154,   391,   392,   393,   394,   395,   357,   154,
+      15,   399,   400,    15,   152,   156,   152,   152,    30,   153,
+      18,   152,   156,   152,    37,   159,   152,   161,   381,   382,
+     383,    39,   420,   152,   490,   491,   389,   152,   152,    18,
+     152,   497,    57,    30,   152,   152,   152,   152,   401,   402,
+     506,   154,   154,   152,   152,   152,   152,   152,   446,   152,
+     152,   499,   500,   501,   152,   155,    18,   152,    15,   152,
+     152,   152,   156,   152,   462,   523,   523,   533,   155,   152,
+     152,   155,    57,   158,   155,   438,   439,   155,   155,    39,
+     443,   155,   445,   531,   155,   551,   449,   155,   486,   155,
+     155,   489,   455,   456,   457,   158,   554,   554,   155,   155,
+     155,   499,   500,   501,    15,   152,    15,   505,   152,    15,
+     576,   577,    15,   104,   104,   581,   104,   104,   584,    43,
+     234,   104,    24,   258,   421,   259,   420,   490,   491,    50,
+      29,     3,   236,   531,   497,   579,    41,   367,   368,   369,
+     370,   371,   446,   506,   374,   375,   376,   377,   378,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,   505,   426,    19,    20,    -1,    -1,    -1,
+     533,    -1,    -1,    -1,    28,    -1,    30,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   551,    -1,
+      -1,    -1,    -1,    -1,   424,   425,    -1,    -1,    -1,    -1,
+      -1,   431,    -1,    -1,    -1,    -1,    -1,    -1,    27,    28,
+      -1,    30,    -1,   576,   577,    34,    35,    36,   581,    -1,
+      -1,   584,    -1,    42,    43,    44,    45,    46,    47,    48,
+      -1,    50,    51,    -1,    -1,    -1,    -1,    -1,    -1,    58,
+      59,    -1,    -1,    -1,    63,    -1,    -1,   477,   478,   479,
+     480,    -1,   482,   483,   484,   485,    -1,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    -1,    -1,    19,    20,    -1,    -1,    -1,    -1,    -1,
+     510,   511,    28,    -1,    30,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   153,
+      -1,    -1,   156,    -1,    -1,   159,    -1,   161,   162,    -1,
+      -1,    -1,   542,    -1,   544,   545,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      -1,    -1,    19,    20,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    28,    -1,    30,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    -1,    -1,
+      19,    20,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,
+      -1,    30,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    40,    -1,    -1,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    -1,    -1,
+      19,    20,    -1,    -1,    -1,    -1,    -1,   153,    -1,    28,
+     156,    30,    -1,   159,    -1,   161,   162,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    -1,    -1,    19,    20,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    28,    -1,    30,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    40,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   153,    -1,    -1,   156,
+      -1,    -1,   159,    -1,   161,   162,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      -1,    -1,    19,    20,   153,    -1,    -1,   156,    -1,    -1,
+     159,    28,   161,    30,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    40,    -1,    -1,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      -1,    -1,    19,    20,   153,    -1,    -1,   156,    -1,   158,
+     159,    28,   161,    30,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    -1,    -1,
+      19,    20,    -1,    -1,    -1,    -1,    -1,   153,    -1,    28,
+     156,    30,    -1,   159,    -1,   161,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      -1,    -1,    19,    20,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    28,    -1,    30,    -1,    -1,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      -1,    -1,    19,    20,    -1,    -1,   153,    -1,    -1,   156,
+      -1,    28,   159,    30,   161,    -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,   153,    -1,    -1,   156,
+      -1,    -1,   159,    -1,   161,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   153,    -1,    -1,   156,    -1,    -1,
+     159,    -1,   161,    -1,    19,    20,    -1,    22,    23,    24,
+      -1,    -1,    -1,    28,    -1,    30,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   153,    -1,    -1,   156,
+      -1,    -1,   159,    -1,   161,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   153,    -1,    -1,   156,
+      -1,    -1,   159,    -1,   161,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,    -1,    -1,    -1,
+      -1,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    -1,    28,    -1,    30,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   127,    -1,   129,   130,   131,   132,   133,    -1,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,    62,    -1,    -1,    -1,
+      -1,   156,    -1,    -1,   159,    -1,   161,    -1,    -1,   164,
+      -1,    -1,    -1,    -1,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,    -1,    -1,    -1,    -1,
+      17,    18,    -1,    -1,    21,    22,    23,    24,    25,    26,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   127,    -1,   129,   130,   131,   132,   133,    -1,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,    62,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   159,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    80,    81,    82,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    98,    99,   100,   101,    -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,
+     127,    -1,   129,   130,   131,   132,   133,    -1,   135,   136,
+     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
+     147,   148,   149,   150,    38,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   159,    -1,    -1,    49,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    60,    61,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    76,    -1,    -1,    -1,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,
+     124,    -1,    -1,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const unsigned char yystos[] =
+{
+       0,   199,   200,   202,     0,    31,    34,    42,    43,    44,
+      45,    46,    47,    48,    63,   180,   215,   217,   219,    28,
+      30,    51,    59,    63,   179,   208,   219,    45,    47,   218,
+      62,    65,    66,    67,    68,    69,    70,    71,   181,   213,
+      29,   225,   226,   227,    52,    53,    54,    72,   205,   151,
+      62,    27,    45,    47,    50,    58,   180,   201,   151,   213,
+      30,   203,    18,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    19,    20,   153,
+     156,   159,   161,   166,   188,   189,   190,   191,   192,   208,
+     222,    32,   161,   214,    33,   162,   216,   226,    73,    74,
+      75,    77,    78,    79,   179,   228,   229,   231,   151,   151,
+     151,   151,   156,   206,   203,   188,    35,    36,   198,   198,
+     198,   198,    18,    18,    18,   161,     3,   162,   192,   193,
+     208,   154,   163,     3,   190,   224,     4,    15,     5,     6,
+       7,     8,     9,    10,    11,    12,   175,   176,   177,    38,
+      49,    60,    61,    76,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   122,   123,   124,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   168,   169,   170,   173,   174,   235,   236,
+     238,   239,    30,    55,    56,   204,    18,    30,    30,   207,
+     190,   190,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,   175,   176,   178,   190,   195,   190,   157,
+     157,   162,   193,   152,   162,   154,    40,   193,   194,    17,
+      18,    21,    22,    23,    24,    25,    26,    62,   100,   101,
+     127,   129,   135,   136,   137,   159,   168,   169,   170,   173,
+     174,   196,   221,   222,   223,   223,   223,   223,   224,    60,
+     181,   102,   103,   104,   105,   106,   107,   118,   119,   120,
+     121,   171,    25,    26,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   172,   190,
+     190,   224,   190,   190,   232,   224,   224,   224,   224,   224,
+     190,   190,   190,   224,   224,   181,   125,   126,   152,   158,
+     152,   186,   186,    25,    26,    17,    18,   167,   167,    21,
+      22,    23,    24,   156,   159,   161,   164,   196,   222,   186,
+     186,   192,   192,   160,   162,   192,    40,   190,   210,   211,
+     212,   152,   155,    64,   220,   171,   172,   154,   154,   154,
+     154,   154,   195,   197,   154,   154,   154,   154,   154,   152,
+     152,   188,   190,   190,   152,   183,   152,   183,   223,   156,
+     152,   152,   152,   152,   152,   152,   223,   223,   223,   152,
+      39,   188,   190,   224,    30,    37,    57,   184,   187,   158,
+     197,   197,   162,   197,    30,   158,   160,   160,   208,   209,
+     152,   155,    40,    30,   154,   154,   195,   195,   195,   195,
+     195,   152,   160,   195,   195,   195,   195,   195,    15,    15,
+     223,   223,   223,    10,    57,    10,   152,   237,   223,   156,
+     224,   190,   224,   224,   224,   152,   152,   152,   224,   190,
+     223,   223,   152,    30,    18,   186,   158,   160,   162,    40,
+     210,   184,   185,   152,   195,   195,   237,   152,   152,   152,
+     152,   195,   152,   152,   152,   152,    39,   223,   223,   154,
+     152,   152,   223,    18,   223,   224,   233,   152,   223,   152,
+     152,   152,   223,   223,   223,   154,   190,    57,   182,    30,
+     152,   152,   155,   195,   195,   195,   195,   195,   195,   195,
+     195,   190,   152,   156,   233,   234,   223,   223,   152,   183,
+     183,   152,   223,   152,   224,   224,   224,   234,   223,    18,
+     195,   195,   152,   155,   152,   152,   155,   155,   155,   155,
+     155,    15,   158,   177,   230,   155,   224,   158,   223,   155,
+     155,   155,   195,   195,   195,   223,   221,   158,   177,    39,
+     158,   155,   155,   155,   152,   221,    15,    15,   152,   223,
+     223,    15,   228,   223,    15,   223
+};
 
 #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;
@@ -1645,1873 +2682,2033 @@
      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 81:
+#line 832 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.String) = (yyvsp[-1].String);
+  ;}
+    break;
 
-      fprintf (stderr, "Reducing via rule %d (line %d), ",
-	       yyn, yyrline[yyn]);
+  case 82:
+#line 835 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.String) = new std::string(""); 
+  ;}
+    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 90:
+#line 842 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { (yyval.String) = new std::string(""); ;}
+    break;
 
+  case 97:
+#line 847 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { 
+    *(yyvsp[-1].String) += *(yyvsp[0].String); 
+    delete (yyvsp[0].String);
+    (yyval.String) = (yyvsp[-1].String); 
+    ;}
+    break;
 
-  switch (yyn) {
+  case 98:
+#line 852 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { (yyval.String) = new std::string(""); ;}
+    break;
 
-case 80:
-#line 491 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.String = yyvsp[-1].String;
-  ;
-    break;}
-case 81:
-#line 494 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.String = new std::string(""); 
-  ;
-    break;}
-case 89:
-#line 501 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ yyval.String = new std::string(""); ;
-    break;}
-case 96:
-#line 506 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ 
-    *yyvsp[-1].String += *yyvsp[0].String; 
-    delete yyvsp[0].String;
-    yyval.String = yyvsp[-1].String; 
-    ;
-    break;}
-case 97:
-#line 511 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ yyval.String = new std::string(""); ;
-    break;}
-case 98:
-#line 516 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ yyval.String = new std::string(); ;
-    break;}
-case 99:
-#line 517 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ *yyvsp[-1].String += " " + *yyvsp[0].String; delete yyvsp[0].String; yyval.String = yyvsp[-1].String; ;
-    break;}
-case 100:
-#line 520 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ yyval.String = new std::string(); ;
-    break;}
-case 101:
-#line 521 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ 
-    yyvsp[-1].String->insert(0, ", "); 
-    *yyvsp[-1].String += " " + *yyvsp[0].String;
-    delete yyvsp[0].String;
-    yyval.String = yyvsp[-1].String;
-  ;
-    break;}
-case 102:
-#line 529 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ 
-    *yyvsp[-1].String += " " + *yyvsp[0].String;
-    delete yyvsp[0].String;
-    yyval.String = yyvsp[-1].String;
-  ;
-    break;}
-case 103:
-#line 535 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ yyval.String = new std::string(); ;
-    break;}
-case 105:
-#line 539 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ yyval.String = new std::string(); ;
-    break;}
-case 106:
-#line 540 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-      yyvsp[-1].String->insert(0, ", ");
-      if (!yyvsp[0].String->empty())
-        *yyvsp[-1].String += " " + *yyvsp[0].String;
-      delete yyvsp[0].String;
-      yyval.String = yyvsp[-1].String;
-    ;
-    break;}
-case 108:
-#line 550 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-      *yyvsp[-1].String += " " + *yyvsp[0].String;
-      delete yyvsp[0].String;
-      yyval.String = yyvsp[-1].String;
-    ;
-    break;}
-case 126:
-#line 572 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ 
-    yyval.Type = new TypeInfo(yyvsp[0].String, OpaqueTy);
-  ;
-    break;}
-case 127:
-#line 575 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ 
-    yyval.Type = new TypeInfo(yyvsp[0].String, UnresolvedTy);
-  ;
-    break;}
-case 128:
-#line 578 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ 
-    yyval.Type = yyvsp[0].Type; 
-  ;
-    break;}
-case 129:
-#line 581 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{                   // Type UpReference
-    yyvsp[0].String->insert(0, "\\");
-    yyval.Type = new TypeInfo(yyvsp[0].String, UpRefTy);
-  ;
-    break;}
-case 130:
-#line 585 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{           // Function derived type?
-    std::string newTy( yyvsp[-3].Type->getNewTy() + "(");
-    for (unsigned i = 0; i < yyvsp[-1].TypeVec->size(); ++i) {
+  case 99:
+#line 857 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { (yyval.String) = new std::string(); ;}
+    break;
+
+  case 100:
+#line 858 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { *(yyvsp[-1].String) += " " + *(yyvsp[0].String); delete (yyvsp[0].String); (yyval.String) = (yyvsp[-1].String); ;}
+    break;
+
+  case 101:
+#line 861 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { (yyval.String) = new std::string(); ;}
+    break;
+
+  case 102:
+#line 862 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { 
+    (yyvsp[-1].String)->insert(0, ", "); 
+    *(yyvsp[-1].String) += " " + *(yyvsp[0].String);
+    delete (yyvsp[0].String);
+    (yyval.String) = (yyvsp[-1].String);
+  ;}
+    break;
+
+  case 103:
+#line 870 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { 
+    *(yyvsp[-1].String) += " " + *(yyvsp[0].String);
+    delete (yyvsp[0].String);
+    (yyval.String) = (yyvsp[-1].String);
+  ;}
+    break;
+
+  case 104:
+#line 876 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { (yyval.String) = new std::string(); ;}
+    break;
+
+  case 106:
+#line 880 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { (yyval.String) = new std::string(); ;}
+    break;
+
+  case 107:
+#line 881 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+      (yyvsp[-1].String)->insert(0, ", ");
+      if (!(yyvsp[0].String)->empty())
+        *(yyvsp[-1].String) += " " + *(yyvsp[0].String);
+      delete (yyvsp[0].String);
+      (yyval.String) = (yyvsp[-1].String);
+    ;}
+    break;
+
+  case 109:
+#line 891 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+      *(yyvsp[-1].String) += " " + *(yyvsp[0].String);
+      delete (yyvsp[0].String);
+      (yyval.String) = (yyvsp[-1].String);
+    ;}
+    break;
+
+  case 127:
+#line 913 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { 
+    (yyval.Type) = TypeInfo::get(*(yyvsp[0].String), OpaqueTy);
+  ;}
+    break;
+
+  case 128:
+#line 916 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { 
+    (yyval.Type) = TypeInfo::get(*(yyvsp[0].String), UnresolvedTy);
+  ;}
+    break;
+
+  case 129:
+#line 919 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { 
+    (yyval.Type) = (yyvsp[0].Type); 
+  ;}
+    break;
+
+  case 130:
+#line 922 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {                   // Type UpReference
+    (yyvsp[0].String)->insert(0, "\\");
+    (yyval.Type) = TypeInfo::get(*(yyvsp[0].String), UpRefTy);
+  ;}
+    break;
+
+  case 131:
+#line 926 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {           // Function derived type?
+    std::string newTy( (yyvsp[-3].Type)->getNewTy() + "(");
+    for (unsigned i = 0; i < (yyvsp[-1].TypeVec)->size(); ++i) {
       if (i != 0)
         newTy +=  ", ";
-      if ((*yyvsp[-1].TypeVec)[i]->isVoid())
+      if ((*(yyvsp[-1].TypeVec))[i]->isVoid())
         newTy += "...";
       else
-        newTy += (*yyvsp[-1].TypeVec)[i]->getNewTy();
+        newTy += (*(yyvsp[-1].TypeVec))[i]->getNewTy();
     }
     newTy += ")";
-    yyval.Type = new TypeInfo(new std::string(newTy), yyvsp[-3].Type, yyvsp[-1].TypeVec);
-  ;
-    break;}
-case 131:
-#line 598 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{          // Sized array type?
-    yyvsp[-3].String->insert(0,"[ ");
-    *yyvsp[-3].String += " x " + yyvsp[-1].Type->getNewTy() + " ]";
-    uint64_t elems = atoi(yyvsp[-3].String->c_str());
-    yyval.Type = new TypeInfo(yyvsp[-3].String, ArrayTy, yyvsp[-1].Type, elems);
-  ;
-    break;}
-case 132:
-#line 604 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{          // Packed array type?
-    yyvsp[-3].String->insert(0,"< ");
-    *yyvsp[-3].String += " x " + yyvsp[-1].Type->getNewTy() + " >";
-    uint64_t elems = atoi(yyvsp[-3].String->c_str());
-    yyval.Type = new TypeInfo(yyvsp[-3].String, PackedTy, yyvsp[-1].Type, elems);
-  ;
-    break;}
-case 133:
-#line 610 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{                        // Structure type?
+    (yyval.Type) = TypeInfo::get(newTy, (yyvsp[-3].Type), (yyvsp[-1].TypeVec));
+  ;}
+    break;
+
+  case 132:
+#line 939 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {          // Sized array type?
+    uint64_t elems = atoi((yyvsp[-3].String)->c_str());
+    (yyvsp[-3].String)->insert(0,"[ ");
+    *(yyvsp[-3].String) += " x " + (yyvsp[-1].Type)->getNewTy() + " ]";
+    (yyval.Type) = TypeInfo::get(*(yyvsp[-3].String), ArrayTy, (yyvsp[-1].Type), elems);
+  ;}
+    break;
+
+  case 133:
+#line 945 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {          // Packed array type?
+    uint64_t elems = atoi((yyvsp[-3].String)->c_str());
+    (yyvsp[-3].String)->insert(0,"< ");
+    *(yyvsp[-3].String) += " x " + (yyvsp[-1].Type)->getNewTy() + " >";
+    (yyval.Type) = TypeInfo::get(*(yyvsp[-3].String), PackedTy, (yyvsp[-1].Type), elems);
+  ;}
+    break;
+
+  case 134:
+#line 951 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {                        // Structure type?
     std::string newTy("{");
-    for (unsigned i = 0; i < yyvsp[-1].TypeVec->size(); ++i) {
+    for (unsigned i = 0; i < (yyvsp[-1].TypeVec)->size(); ++i) {
       if (i != 0)
         newTy +=  ", ";
-      newTy += (*yyvsp[-1].TypeVec)[i]->getNewTy();
+      newTy += (*(yyvsp[-1].TypeVec))[i]->getNewTy();
     }
     newTy += "}";
-    yyval.Type = new TypeInfo(new std::string(newTy), StructTy, yyvsp[-1].TypeVec);
-  ;
-    break;}
-case 134:
-#line 620 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{                                  // Empty structure type?
-    yyval.Type = new TypeInfo(new std::string("{}"), StructTy, new TypeList());
-  ;
-    break;}
-case 135:
-#line 623 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{                // Packed Structure type?
+    (yyval.Type) = TypeInfo::get(newTy, StructTy, (yyvsp[-1].TypeVec));
+  ;}
+    break;
+
+  case 135:
+#line 961 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {                                  // Empty structure type?
+    (yyval.Type) = TypeInfo::get("{}", StructTy, new TypeList());
+  ;}
+    break;
+
+  case 136:
+#line 964 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {                // Packed Structure type?
     std::string newTy("<{");
-    for (unsigned i = 0; i < yyvsp[-2].TypeVec->size(); ++i) {
+    for (unsigned i = 0; i < (yyvsp[-2].TypeVec)->size(); ++i) {
       if (i != 0)
         newTy +=  ", ";
-      newTy += (*yyvsp[-2].TypeVec)[i]->getNewTy();
+      newTy += (*(yyvsp[-2].TypeVec))[i]->getNewTy();
     }
     newTy += "}>";
-    yyval.Type = new TypeInfo(new std::string(newTy), PackedStructTy, yyvsp[-2].TypeVec);
-  ;
-    break;}
-case 136:
-#line 633 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{                          // Empty packed structure type?
-    yyval.Type = new TypeInfo(new std::string("<{}>"), PackedStructTy, new TypeList());
-  ;
-    break;}
-case 137:
-#line 636 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{                             // Pointer type?
-    yyval.Type = yyvsp[-1].Type->getPointerType();
-  ;
-    break;}
-case 138:
-#line 644 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.TypeVec = new TypeList();
-    yyval.TypeVec->push_back(yyvsp[0].Type);
-  ;
-    break;}
-case 139:
-#line 648 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.TypeVec = yyvsp[-2].TypeVec;
-    yyval.TypeVec->push_back(yyvsp[0].Type);
-  ;
-    break;}
-case 141:
-#line 656 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.TypeVec = yyvsp[-2].TypeVec;
-    yyval.TypeVec->push_back(new TypeInfo("void",VoidTy));
-    delete yyvsp[0].String;
-  ;
-    break;}
-case 142:
-#line 661 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.TypeVec = new TypeList();
-    yyval.TypeVec->push_back(new TypeInfo("void",VoidTy));
-    delete yyvsp[0].String;
-  ;
-    break;}
-case 143:
-#line 666 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.TypeVec = new TypeList();
-  ;
-    break;}
-case 144:
-#line 676 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ // Nonempty unsized arr
-    yyval.Const.type = yyvsp[-3].Type;
-    yyval.Const.cnst = new std::string(yyvsp[-3].Type->getNewTy());
-    *yyval.Const.cnst += " [ " + *yyvsp[-1].String + " ]";
-    delete yyvsp[-1].String;
-  ;
-    break;}
-case 145:
-#line 682 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.Const.type = yyvsp[-2].Type;
-    yyval.Const.cnst = new std::string(yyvsp[-2].Type->getNewTy());
-    *yyval.Const.cnst += "[ ]";
-  ;
-    break;}
-case 146:
-#line 687 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.Const.type = yyvsp[-2].Type;
-    yyval.Const.cnst = new std::string(yyvsp[-2].Type->getNewTy());
-    *yyval.Const.cnst += " c" + *yyvsp[0].String;
-    delete yyvsp[0].String;
-  ;
-    break;}
-case 147:
-#line 693 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ // Nonempty unsized arr
-    yyval.Const.type = yyvsp[-3].Type;
-    yyval.Const.cnst = new std::string(yyvsp[-3].Type->getNewTy());
-    *yyval.Const.cnst += " < " + *yyvsp[-1].String + " >";
-    delete yyvsp[-1].String;
-  ;
-    break;}
-case 148:
-#line 699 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.Const.type = yyvsp[-3].Type;
-    yyval.Const.cnst = new std::string(yyvsp[-3].Type->getNewTy());
-    *yyval.Const.cnst += " { " + *yyvsp[-1].String + " }";
-    delete yyvsp[-1].String;
-  ;
-    break;}
-case 149:
-#line 705 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.Const.type = yyvsp[-2].Type;
-    yyval.Const.cnst = new std::string(yyvsp[-2].Type->getNewTy());
-    *yyval.Const.cnst += " {}";
-  ;
-    break;}
-case 150:
-#line 710 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.Const.type = yyvsp[-1].Type;
-    yyval.Const.cnst = new std::string(yyvsp[-1].Type->getNewTy());
-    *yyval.Const.cnst +=  " " + *yyvsp[0].String;
-    delete yyvsp[0].String;
-  ;
-    break;}
-case 151:
-#line 716 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.Const.type = yyvsp[-1].Type;
-    yyval.Const.cnst = new std::string(yyvsp[-1].Type->getNewTy());
-    *yyval.Const.cnst += " " + *yyvsp[0].String;
-    delete yyvsp[0].String;
-  ;
-    break;}
-case 152:
-#line 722 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    std::string Name = getUniqueName(yyvsp[0].String,yyvsp[-1].Type);
-    yyval.Const.type = yyvsp[-1].Type;
-    yyval.Const.cnst = new std::string(yyvsp[-1].Type->getNewTy());
-    *yyval.Const.cnst += " " + Name;
-    delete yyvsp[0].String;
-  ;
-    break;}
-case 153:
-#line 729 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.Const.type = yyvsp[-1].Type;
-    yyval.Const.cnst = new std::string(yyvsp[-1].Type->getNewTy());
-    *yyval.Const.cnst += " " + *yyvsp[0].String;
-    delete yyvsp[0].String;
-  ;
-    break;}
-case 154:
-#line 735 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.Const.type = yyvsp[-1].Type;
-    yyval.Const.cnst = new std::string(yyvsp[-1].Type->getNewTy());
-    *yyval.Const.cnst += " " + *yyvsp[0].String;
-    delete yyvsp[0].String;
-  ;
-    break;}
-case 155:
-#line 741 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{      // integral constants
-    yyval.Const.type = yyvsp[-1].Type;
-    yyval.Const.cnst = new std::string(yyvsp[-1].Type->getNewTy());
-    *yyval.Const.cnst += " " + *yyvsp[0].String;
-    delete yyvsp[0].String;
-  ;
-    break;}
-case 156:
-#line 747 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{            // integral constants
-    yyval.Const.type = yyvsp[-1].Type;
-    yyval.Const.cnst = new std::string(yyvsp[-1].Type->getNewTy());
-    *yyval.Const.cnst += " " + *yyvsp[0].String;
-    delete yyvsp[0].String;
-  ;
-    break;}
-case 157:
-#line 753 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{                      // Boolean constants
-    yyval.Const.type = yyvsp[-1].Type;
-    yyval.Const.cnst = new std::string(yyvsp[-1].Type->getNewTy());
-    *yyval.Const.cnst += " " + *yyvsp[0].String;
-    delete yyvsp[0].String;
-  ;
-    break;}
-case 158:
-#line 759 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{                     // Boolean constants
-    yyval.Const.type = yyvsp[-1].Type;
-    yyval.Const.cnst = new std::string(yyvsp[-1].Type->getNewTy());
-    *yyval.Const.cnst += " " + *yyvsp[0].String;
-    delete yyvsp[0].String;
-  ;
-    break;}
-case 159:
-#line 765 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{                   // Float & Double constants
-    yyval.Const.type = yyvsp[-1].Type;
-    yyval.Const.cnst = new std::string(yyvsp[-1].Type->getNewTy());
-    *yyval.Const.cnst += " " + *yyvsp[0].String;
-    delete yyvsp[0].String;
-  ;
-    break;}
-case 160:
-#line 773 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    std::string source = *yyvsp[-3].Const.cnst;
-    TypeInfo* DstTy = ResolveType(yyvsp[-1].Type);
-    if (*yyvsp[-5].String == "cast") {
+    (yyval.Type) = TypeInfo::get(newTy, PackedStructTy, (yyvsp[-2].TypeVec));
+  ;}
+    break;
+
+  case 137:
+#line 974 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {                          // Empty packed structure type?
+    (yyval.Type) = TypeInfo::get("<{}>", PackedStructTy, new TypeList());
+  ;}
+    break;
+
+  case 138:
+#line 977 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {                             // Pointer type?
+    (yyval.Type) = (yyvsp[-1].Type)->getPointerType();
+  ;}
+    break;
+
+  case 139:
+#line 985 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.TypeVec) = new TypeList();
+    (yyval.TypeVec)->push_back((yyvsp[0].Type));
+  ;}
+    break;
+
+  case 140:
+#line 989 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.TypeVec) = (yyvsp[-2].TypeVec);
+    (yyval.TypeVec)->push_back((yyvsp[0].Type));
+  ;}
+    break;
+
+  case 142:
+#line 997 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.TypeVec) = (yyvsp[-2].TypeVec);
+    (yyval.TypeVec)->push_back(TypeInfo::get("void",VoidTy));
+    delete (yyvsp[0].String);
+  ;}
+    break;
+
+  case 143:
+#line 1002 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.TypeVec) = new TypeList();
+    (yyval.TypeVec)->push_back(TypeInfo::get("void",VoidTy));
+    delete (yyvsp[0].String);
+  ;}
+    break;
+
+  case 144:
+#line 1007 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.TypeVec) = new TypeList();
+  ;}
+    break;
+
+  case 145:
+#line 1017 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { // Nonempty unsized arr
+    (yyval.Const).type = (yyvsp[-3].Type);
+    (yyval.Const).cnst = new std::string((yyvsp[-3].Type)->getNewTy());
+    *(yyval.Const).cnst += " [ " + *(yyvsp[-1].String) + " ]";
+    delete (yyvsp[-1].String);
+  ;}
+    break;
+
+  case 146:
+#line 1023 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.Const).type = (yyvsp[-2].Type);
+    (yyval.Const).cnst = new std::string((yyvsp[-2].Type)->getNewTy());
+    *(yyval.Const).cnst += "[ ]";
+  ;}
+    break;
+
+  case 147:
+#line 1028 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.Const).type = (yyvsp[-2].Type);
+    (yyval.Const).cnst = new std::string((yyvsp[-2].Type)->getNewTy());
+    *(yyval.Const).cnst += " c" + *(yyvsp[0].String);
+    delete (yyvsp[0].String);
+  ;}
+    break;
+
+  case 148:
+#line 1034 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { // Nonempty unsized arr
+    (yyval.Const).type = (yyvsp[-3].Type);
+    (yyval.Const).cnst = new std::string((yyvsp[-3].Type)->getNewTy());
+    *(yyval.Const).cnst += " < " + *(yyvsp[-1].String) + " >";
+    delete (yyvsp[-1].String);
+  ;}
+    break;
+
+  case 149:
+#line 1040 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.Const).type = (yyvsp[-3].Type);
+    (yyval.Const).cnst = new std::string((yyvsp[-3].Type)->getNewTy());
+    *(yyval.Const).cnst += " { " + *(yyvsp[-1].String) + " }";
+    delete (yyvsp[-1].String);
+  ;}
+    break;
+
+  case 150:
+#line 1046 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.Const).type = (yyvsp[-2].Type);
+    (yyval.Const).cnst = new std::string((yyvsp[-2].Type)->getNewTy());
+    *(yyval.Const).cnst += " {}";
+  ;}
+    break;
+
+  case 151:
+#line 1051 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.Const).type = (yyvsp[-1].Type);
+    (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
+    *(yyval.Const).cnst +=  " " + *(yyvsp[0].String);
+    delete (yyvsp[0].String);
+  ;}
+    break;
+
+  case 152:
+#line 1057 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.Const).type = (yyvsp[-1].Type);
+    (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
+    *(yyval.Const).cnst += " " + *(yyvsp[0].String);
+    delete (yyvsp[0].String);
+  ;}
+    break;
+
+  case 153:
+#line 1063 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    std::string Name = getUniqueName((yyvsp[0].String), (yyvsp[-1].Type)->resolve(), true);
+    (yyval.Const).type = (yyvsp[-1].Type);
+    (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
+    *(yyval.Const).cnst += " " + Name;
+    delete (yyvsp[0].String);
+  ;}
+    break;
+
+  case 154:
+#line 1070 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.Const).type = (yyvsp[-1].Type);
+    (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
+    *(yyval.Const).cnst += " " + *(yyvsp[0].String);
+    delete (yyvsp[0].String);
+  ;}
+    break;
+
+  case 155:
+#line 1076 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.Const).type = (yyvsp[-1].Type);
+    (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
+    *(yyval.Const).cnst += " " + *(yyvsp[0].String);
+    delete (yyvsp[0].String);
+  ;}
+    break;
+
+  case 156:
+#line 1082 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {      // integral constants
+    (yyval.Const).type = (yyvsp[-1].Type);
+    (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
+    *(yyval.Const).cnst += " " + *(yyvsp[0].String);
+    delete (yyvsp[0].String);
+  ;}
+    break;
+
+  case 157:
+#line 1088 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {            // integral constants
+    (yyval.Const).type = (yyvsp[-1].Type);
+    (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
+    *(yyval.Const).cnst += " " + *(yyvsp[0].String);
+    delete (yyvsp[0].String);
+  ;}
+    break;
+
+  case 158:
+#line 1094 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {                      // Boolean constants
+    (yyval.Const).type = (yyvsp[-1].Type);
+    (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
+    *(yyval.Const).cnst += " " + *(yyvsp[0].String);
+    delete (yyvsp[0].String);
+  ;}
+    break;
+
+  case 159:
+#line 1100 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {                     // Boolean constants
+    (yyval.Const).type = (yyvsp[-1].Type);
+    (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
+    *(yyval.Const).cnst += " " + *(yyvsp[0].String);
+    delete (yyvsp[0].String);
+  ;}
+    break;
+
+  case 160:
+#line 1106 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {                   // Float & Double constants
+    (yyval.Const).type = (yyvsp[-1].Type);
+    (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
+    *(yyval.Const).cnst += " " + *(yyvsp[0].String);
+    delete (yyvsp[0].String);
+  ;}
+    break;
+
+  case 161:
+#line 1114 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    std::string source = *(yyvsp[-3].Const).cnst;
+    const TypeInfo* SrcTy = (yyvsp[-3].Const).type->resolve();
+    const TypeInfo* DstTy = (yyvsp[-1].Type)->resolve(); 
+    if (*(yyvsp[-5].String) == "cast") {
       // Call getCastUpgrade to upgrade the old cast
-      yyval.String = new std::string(getCastUpgrade(source, yyvsp[-3].Const.type, DstTy, true));
+      (yyval.String) = new std::string(getCastUpgrade(source, SrcTy, DstTy, true));
     } else {
       // Nothing to upgrade, just create the cast constant expr
-      yyval.String = new std::string(*yyvsp[-5].String);
-      *yyval.String += "( " + source + " to " + yyvsp[-1].Type->getNewTy() + ")";
+      (yyval.String) = new std::string(*(yyvsp[-5].String));
+      *(yyval.String) += "( " + source + " to " + (yyvsp[-1].Type)->getNewTy() + ")";
     }
-    delete yyvsp[-5].String; yyvsp[-3].Const.destroy(); delete yyvsp[-2].String;
-  ;
-    break;}
-case 161:
-#line 786 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-4].String += "(" + *yyvsp[-2].Const.cnst;
-    for (unsigned i = 0; i < yyvsp[-1].ValList->size(); ++i) {
-      ValueInfo& VI = (*yyvsp[-1].ValList)[i];
-      *yyvsp[-4].String += ", " + *VI.val;
+    delete (yyvsp[-5].String); (yyvsp[-3].Const).destroy(); delete (yyvsp[-2].String);
+  ;}
+    break;
+
+  case 162:
+#line 1128 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-4].String) += "(" + *(yyvsp[-2].Const).cnst;
+    for (unsigned i = 0; i < (yyvsp[-1].ValList)->size(); ++i) {
+      ValueInfo& VI = (*(yyvsp[-1].ValList))[i];
+      *(yyvsp[-4].String) += ", " + *VI.val;
       VI.destroy();
     }
-    *yyvsp[-4].String += ")";
-    yyval.String = yyvsp[-4].String;
-    yyvsp[-2].Const.destroy();
-    delete yyvsp[-1].ValList;
-  ;
-    break;}
-case 162:
-#line 798 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-7].String += "(" + *yyvsp[-5].Const.cnst + "," + *yyvsp[-3].Const.cnst + "," + *yyvsp[-1].Const.cnst + ")";
-    yyvsp[-5].Const.destroy(); yyvsp[-3].Const.destroy(); yyvsp[-1].Const.destroy();
-    yyval.String = yyvsp[-7].String;
-  ;
-    break;}
-case 163:
-#line 803 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    const char* op = getDivRemOpcode(*yyvsp[-5].String, yyvsp[-3].Const.type); 
-    yyval.String = new std::string(op);
-    *yyval.String += "(" + *yyvsp[-3].Const.cnst + "," + *yyvsp[-1].Const.cnst + ")";
-    delete yyvsp[-5].String; yyvsp[-3].Const.destroy(); yyvsp[-1].Const.destroy();
-  ;
-    break;}
-case 164:
-#line 809 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-5].String += "(" + *yyvsp[-3].Const.cnst + "," + *yyvsp[-1].Const.cnst + ")";
-    yyvsp[-3].Const.destroy(); yyvsp[-1].Const.destroy();
-    yyval.String = yyvsp[-5].String;
-  ;
-    break;}
-case 165:
-#line 814 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-5].String = getCompareOp(*yyvsp[-5].String, yyvsp[-3].Const.type);
-    *yyvsp[-5].String += "(" + *yyvsp[-3].Const.cnst + "," + *yyvsp[-1].Const.cnst + ")";
-    yyvsp[-3].Const.destroy(); yyvsp[-1].Const.destroy();
-    yyval.String = yyvsp[-5].String;
-  ;
-    break;}
-case 166:
-#line 820 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-6].String += "(" + *yyvsp[-5].String + "," + *yyvsp[-3].Const.cnst + "," + *yyvsp[-1].Const.cnst + ")";
-    delete yyvsp[-5].String; yyvsp[-3].Const.destroy(); yyvsp[-1].Const.destroy();
-    yyval.String = yyvsp[-6].String;
-  ;
-    break;}
-case 167:
-#line 825 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-6].String += "(" + *yyvsp[-5].String + "," + *yyvsp[-3].Const.cnst + "," + *yyvsp[-1].Const.cnst + ")";
-    delete yyvsp[-5].String; yyvsp[-3].Const.destroy(); yyvsp[-1].Const.destroy();
-    yyval.String = yyvsp[-6].String;
-  ;
-    break;}
-case 168:
-#line 830 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    const char* shiftop = yyvsp[-5].String->c_str();
-    if (*yyvsp[-5].String == "shr")
-      shiftop = (yyvsp[-3].Const.type->isUnsigned()) ? "lshr" : "ashr";
-    yyval.String = new std::string(shiftop);
-    *yyval.String += "(" + *yyvsp[-3].Const.cnst + "," + *yyvsp[-1].Const.cnst + ")";
-    delete yyvsp[-5].String; yyvsp[-3].Const.destroy(); yyvsp[-1].Const.destroy();
-  ;
-    break;}
-case 169:
-#line 838 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-5].String += "(" + *yyvsp[-3].Const.cnst + "," + *yyvsp[-1].Const.cnst + ")";
-    yyvsp[-3].Const.destroy(); yyvsp[-1].Const.destroy();
-    yyval.String = yyvsp[-5].String;
-  ;
-    break;}
-case 170:
-#line 843 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-7].String += "(" + *yyvsp[-5].Const.cnst + "," + *yyvsp[-3].Const.cnst + "," + *yyvsp[-1].Const.cnst + ")";
-    yyvsp[-5].Const.destroy(); yyvsp[-3].Const.destroy(); yyvsp[-1].Const.destroy();
-    yyval.String = yyvsp[-7].String;
-  ;
-    break;}
-case 171:
-#line 848 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-7].String += "(" + *yyvsp[-5].Const.cnst + "," + *yyvsp[-3].Const.cnst + "," + *yyvsp[-1].Const.cnst + ")";
-    yyvsp[-5].Const.destroy(); yyvsp[-3].Const.destroy(); yyvsp[-1].Const.destroy();
-    yyval.String = yyvsp[-7].String;
-  ;
-    break;}
-case 172:
-#line 858 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-2].String += ", " + *yyvsp[0].Const.cnst;
-    yyvsp[0].Const.destroy();
-    yyval.String = yyvsp[-2].String;
-  ;
-    break;}
-case 173:
-#line 863 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ yyval.String = new std::string(*yyvsp[0].Const.cnst); yyvsp[0].Const.destroy(); ;
-    break;}
-case 176:
-#line 878 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-;
-    break;}
-case 177:
-#line 883 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.String = 0;
-  ;
-    break;}
-case 178:
-#line 886 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *O << *yyvsp[0].String << '\n';
-    delete yyvsp[0].String;
-    yyval.String = 0;
-  ;
-    break;}
-case 179:
-#line 891 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *O << "module asm " << ' ' << *yyvsp[0].String << '\n';
-    yyval.String = 0;
-  ;
-    break;}
-case 180:
-#line 895 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
+    *(yyvsp[-4].String) += ")";
+    (yyval.String) = (yyvsp[-4].String);
+    (yyvsp[-2].Const).destroy();
+    delete (yyvsp[-1].ValList);
+  ;}
+    break;
+
+  case 163:
+#line 1140 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-7].String) += "(" + *(yyvsp[-5].Const).cnst + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
+    (yyvsp[-5].Const).destroy(); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
+    (yyval.String) = (yyvsp[-7].String);
+  ;}
+    break;
+
+  case 164:
+#line 1145 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    const char* op = getDivRemOpcode(*(yyvsp[-5].String), (yyvsp[-3].Const).type); 
+    (yyval.String) = new std::string(op);
+    *(yyval.String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
+    delete (yyvsp[-5].String); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
+  ;}
+    break;
+
+  case 165:
+#line 1151 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
+    (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
+    (yyval.String) = (yyvsp[-5].String);
+  ;}
+    break;
+
+  case 166:
+#line 1156 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-5].String) = getCompareOp(*(yyvsp[-5].String), (yyvsp[-3].Const).type);
+    *(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
+    (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
+    (yyval.String) = (yyvsp[-5].String);
+  ;}
+    break;
+
+  case 167:
+#line 1162 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-6].String) += "(" + *(yyvsp[-5].String) + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
+    delete (yyvsp[-5].String); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
+    (yyval.String) = (yyvsp[-6].String);
+  ;}
+    break;
+
+  case 168:
+#line 1167 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-6].String) += "(" + *(yyvsp[-5].String) + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
+    delete (yyvsp[-5].String); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
+    (yyval.String) = (yyvsp[-6].String);
+  ;}
+    break;
+
+  case 169:
+#line 1172 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    const char* shiftop = (yyvsp[-5].String)->c_str();
+    if (*(yyvsp[-5].String) == "shr")
+      shiftop = ((yyvsp[-3].Const).type->isUnsigned()) ? "lshr" : "ashr";
+    (yyval.String) = new std::string(shiftop);
+    *(yyval.String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
+    delete (yyvsp[-5].String); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
+  ;}
+    break;
+
+  case 170:
+#line 1180 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
+    (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
+    (yyval.String) = (yyvsp[-5].String);
+  ;}
+    break;
+
+  case 171:
+#line 1185 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-7].String) += "(" + *(yyvsp[-5].Const).cnst + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
+    (yyvsp[-5].Const).destroy(); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
+    (yyval.String) = (yyvsp[-7].String);
+  ;}
+    break;
+
+  case 172:
+#line 1190 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-7].String) += "(" + *(yyvsp[-5].Const).cnst + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
+    (yyvsp[-5].Const).destroy(); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
+    (yyval.String) = (yyvsp[-7].String);
+  ;}
+    break;
+
+  case 173:
+#line 1200 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-2].String) += ", " + *(yyvsp[0].Const).cnst;
+    (yyvsp[0].Const).destroy();
+    (yyval.String) = (yyvsp[-2].String);
+  ;}
+    break;
+
+  case 174:
+#line 1205 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { (yyval.String) = new std::string(*(yyvsp[0].Const).cnst); (yyvsp[0].Const).destroy(); ;}
+    break;
+
+  case 177:
+#line 1220 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+;}
+    break;
+
+  case 178:
+#line 1225 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 179:
+#line 1228 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *O << *(yyvsp[0].String) << '\n';
+    delete (yyvsp[0].String);
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 180:
+#line 1233 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *O << "module asm " << ' ' << *(yyvsp[0].String) << '\n';
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 181:
+#line 1237 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
     *O << "implementation\n";
-    yyval.String = 0;
-  ;
-    break;}
-case 181:
-#line 899 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ yyval.String = 0; ;
-    break;}
-case 183:
-#line 901 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ yyval.String = yyvsp[0].String; *yyval.String = "external"; ;
-    break;}
-case 184:
-#line 904 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    EnumeratedTypes.push_back(*yyvsp[0].Type);
-    if (!yyvsp[-2].String->empty()) {
-      NamedTypes[*yyvsp[-2].String] = *yyvsp[0].Type;
-      *O << *yyvsp[-2].String << " = ";
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 182:
+#line 1241 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { (yyval.String) = 0; ;}
+    break;
+
+  case 184:
+#line 1243 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { (yyval.String) = (yyvsp[0].String); *(yyval.String) = "external"; ;}
+    break;
+
+  case 185:
+#line 1246 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    EnumeratedTypes.push_back((yyvsp[0].Type));
+    if (!(yyvsp[-2].String)->empty()) {
+      NamedTypes[*(yyvsp[-2].String)] = (yyvsp[0].Type);
+      *O << *(yyvsp[-2].String) << " = ";
     }
-    *O << "type " << yyvsp[0].Type->getNewTy() << '\n';
-    delete yyvsp[-2].String; delete yyvsp[-1].String;
-    yyval.String = 0;
-  ;
-    break;}
-case 185:
-#line 914 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{       // Function prototypes can be in const pool
-    *O << *yyvsp[0].String << '\n';
-    delete yyvsp[0].String;
-    yyval.String = 0;
-  ;
-    break;}
-case 186:
-#line 919 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{  // Asm blocks can be in the const pool
-    *O << *yyvsp[-2].String << ' ' << *yyvsp[-1].String << ' ' << *yyvsp[0].String << '\n';
-    delete yyvsp[-2].String; delete yyvsp[-1].String; delete yyvsp[0].String; 
-    yyval.String = 0;
-  ;
-    break;}
-case 187:
-#line 924 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    if (!yyvsp[-4].String->empty()) {
-      std::string Name = getUniqueName(yyvsp[-4].String,yyvsp[-1].Const.type);
+    *O << "type " << (yyvsp[0].Type)->getNewTy() << '\n';
+    delete (yyvsp[-2].String); delete (yyvsp[-1].String);
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 186:
+#line 1256 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {       // Function prototypes can be in const pool
+    *O << *(yyvsp[0].String) << '\n';
+    delete (yyvsp[0].String);
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 187:
+#line 1261 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {  // Asm blocks can be in the const pool
+    *O << *(yyvsp[-2].String) << ' ' << *(yyvsp[-1].String) << ' ' << *(yyvsp[0].String) << '\n';
+    delete (yyvsp[-2].String); delete (yyvsp[-1].String); delete (yyvsp[0].String); 
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 188:
+#line 1266 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    if (!(yyvsp[-4].String)->empty()) {
+      std::string Name = getGlobalName((yyvsp[-4].String),*(yyvsp[-3].String), (yyvsp[-1].Const).type->getPointerType(),
+                                       *(yyvsp[-2].String) == "constant");
       *O << Name << " = ";
-      Globals[Name] = *yyvsp[-1].Const.type;
     }
-    *O << *yyvsp[-3].String << ' ' << *yyvsp[-2].String << ' ' << *yyvsp[-1].Const.cnst << ' ' << *yyvsp[0].String << '\n';
-    delete yyvsp[-4].String; delete yyvsp[-3].String; delete yyvsp[-2].String; delete yyvsp[0].String; 
-    yyval.String = 0;
-  ;
-    break;}
-case 188:
-#line 934 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    if (!yyvsp[-4].String->empty()) {
-      std::string Name = getUniqueName(yyvsp[-4].String,yyvsp[-1].Type);
+    *O << *(yyvsp[-3].String) << ' ' << *(yyvsp[-2].String) << ' ' << *(yyvsp[-1].Const).cnst << ' ' << *(yyvsp[0].String) << '\n';
+    delete (yyvsp[-4].String); delete (yyvsp[-3].String); delete (yyvsp[-2].String); delete (yyvsp[0].String); 
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 189:
+#line 1276 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    if (!(yyvsp[-4].String)->empty()) {
+      std::string Name = getGlobalName((yyvsp[-4].String),*(yyvsp[-3].String),(yyvsp[-1].Type)->getPointerType(),
+                                       *(yyvsp[-2].String) == "constant");
       *O << Name << " = ";
-      Globals[Name] = *yyvsp[-1].Type;
     }
-    *O <<  *yyvsp[-3].String << ' ' << *yyvsp[-2].String << ' ' << yyvsp[-1].Type->getNewTy() << ' ' << *yyvsp[0].String << '\n';
-    delete yyvsp[-4].String; delete yyvsp[-3].String; delete yyvsp[-2].String; delete yyvsp[0].String;
-    yyval.String = 0;
-  ;
-    break;}
-case 189:
-#line 944 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    if (!yyvsp[-4].String->empty()) {
-      std::string Name = getUniqueName(yyvsp[-4].String,yyvsp[-1].Type);
+    *O <<  *(yyvsp[-3].String) << ' ' << *(yyvsp[-2].String) << ' ' << (yyvsp[-1].Type)->getNewTy() << ' ' << *(yyvsp[0].String) << '\n';
+    delete (yyvsp[-4].String); delete (yyvsp[-3].String); delete (yyvsp[-2].String); delete (yyvsp[0].String);
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 190:
+#line 1286 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    if (!(yyvsp[-4].String)->empty()) {
+      std::string Name = getGlobalName((yyvsp[-4].String),*(yyvsp[-3].String),(yyvsp[-1].Type)->getPointerType(),
+                                       *(yyvsp[-2].String) == "constant");
       *O << Name << " = ";
-      Globals[Name] = *yyvsp[-1].Type;
     }
-    *O << *yyvsp[-3].String << ' ' << *yyvsp[-2].String << ' ' << yyvsp[-1].Type->getNewTy() << ' ' << *yyvsp[0].String << '\n';
-    delete yyvsp[-4].String; delete yyvsp[-3].String; delete yyvsp[-2].String; delete yyvsp[0].String;
-    yyval.String = 0;
-  ;
-    break;}
-case 190:
-#line 954 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    if (!yyvsp[-4].String->empty()) {
-      std::string Name = getUniqueName(yyvsp[-4].String,yyvsp[-1].Type);
+    *O << *(yyvsp[-3].String) << ' ' << *(yyvsp[-2].String) << ' ' << (yyvsp[-1].Type)->getNewTy() << ' ' << *(yyvsp[0].String) << '\n';
+    delete (yyvsp[-4].String); delete (yyvsp[-3].String); delete (yyvsp[-2].String); delete (yyvsp[0].String);
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 191:
+#line 1296 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    if (!(yyvsp[-4].String)->empty()) {
+      std::string Name = getGlobalName((yyvsp[-4].String),*(yyvsp[-3].String),(yyvsp[-1].Type)->getPointerType(),
+                                       *(yyvsp[-2].String) == "constant");
       *O << Name << " = ";
-      Globals[Name] = *yyvsp[-1].Type;
     }
-    *O << *yyvsp[-3].String << ' ' << *yyvsp[-2].String << ' ' << yyvsp[-1].Type->getNewTy() << ' ' << *yyvsp[0].String << '\n';
-    delete yyvsp[-4].String; delete yyvsp[-3].String; delete yyvsp[-2].String; delete yyvsp[0].String;
-    yyval.String = 0;
-  ;
-    break;}
-case 191:
-#line 964 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ 
-    *O << *yyvsp[-1].String << ' ' << *yyvsp[0].String << '\n';
-    delete yyvsp[-1].String; delete yyvsp[0].String;
-    yyval.String = 0;
-  ;
-    break;}
-case 192:
-#line 969 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *O << *yyvsp[-2].String << " = " << *yyvsp[0].String << '\n';
-    delete yyvsp[-2].String; delete yyvsp[0].String;
-    yyval.String = 0;
-  ;
-    break;}
-case 193:
-#line 974 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ 
-    yyval.String = 0;
-  ;
-    break;}
-case 197:
-#line 984 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-2].String += " = " + *yyvsp[0].String;
-    delete yyvsp[0].String;
-    yyval.String = yyvsp[-2].String;
-  ;
-    break;}
-case 198:
-#line 989 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-2].String += " = " + *yyvsp[0].String;
-    if (*yyvsp[0].String == "64")
+    *O << *(yyvsp[-3].String) << ' ' << *(yyvsp[-2].String) << ' ' << (yyvsp[-1].Type)->getNewTy() << ' ' << *(yyvsp[0].String) << '\n';
+    delete (yyvsp[-4].String); delete (yyvsp[-3].String); delete (yyvsp[-2].String); delete (yyvsp[0].String);
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 192:
+#line 1306 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { 
+    *O << *(yyvsp[-1].String) << ' ' << *(yyvsp[0].String) << '\n';
+    delete (yyvsp[-1].String); delete (yyvsp[0].String);
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 193:
+#line 1311 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *O << *(yyvsp[-2].String) << " = " << *(yyvsp[0].String) << '\n';
+    delete (yyvsp[-2].String); delete (yyvsp[0].String);
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 194:
+#line 1316 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { 
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 198:
+#line 1326 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
+    delete (yyvsp[0].String);
+    (yyval.String) = (yyvsp[-2].String);
+  ;}
+    break;
+
+  case 199:
+#line 1331 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
+    if (*(yyvsp[0].String) == "64")
       SizeOfPointer = 64;
-    delete yyvsp[0].String;
-    yyval.String = yyvsp[-2].String;
-  ;
-    break;}
-case 199:
-#line 996 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-2].String += " = " + *yyvsp[0].String;
-    delete yyvsp[0].String;
-    yyval.String = yyvsp[-2].String;
-  ;
-    break;}
-case 200:
-#line 1001 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-2].String += " = " + *yyvsp[0].String;
-    delete yyvsp[0].String;
-    yyval.String = yyvsp[-2].String;
-  ;
-    break;}
-case 201:
-#line 1008 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyvsp[-1].String->insert(0, "[ ");
-    *yyvsp[-1].String += " ]";
-    yyval.String = yyvsp[-1].String;
-  ;
-    break;}
-case 202:
-#line 1015 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-2].String += ", " + *yyvsp[0].String;
-    delete yyvsp[0].String;
-    yyval.String = yyvsp[-2].String;
-  ;
-    break;}
-case 204:
-#line 1021 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.String = new std::string();
-  ;
-    break;}
-case 208:
-#line 1030 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ yyval.String = new std::string(); ;
-    break;}
-case 209:
-#line 1032 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-  yyval.String = new std::string(yyvsp[-1].Type->getNewTy());
-  if (!yyvsp[0].String->empty()) {
-    std::string Name = getUniqueName(yyvsp[0].String, yyvsp[-1].Type);
-    *yyval.String += " " + Name;
+    delete (yyvsp[0].String);
+    (yyval.String) = (yyvsp[-2].String);
+  ;}
+    break;
+
+  case 200:
+#line 1338 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
+    delete (yyvsp[0].String);
+    (yyval.String) = (yyvsp[-2].String);
+  ;}
+    break;
+
+  case 201:
+#line 1343 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
+    delete (yyvsp[0].String);
+    (yyval.String) = (yyvsp[-2].String);
+  ;}
+    break;
+
+  case 202:
+#line 1350 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyvsp[-1].String)->insert(0, "[ ");
+    *(yyvsp[-1].String) += " ]";
+    (yyval.String) = (yyvsp[-1].String);
+  ;}
+    break;
+
+  case 203:
+#line 1357 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-2].String) += ", " + *(yyvsp[0].String);
+    delete (yyvsp[0].String);
+    (yyval.String) = (yyvsp[-2].String);
+  ;}
+    break;
+
+  case 205:
+#line 1363 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.String) = new std::string();
+  ;}
+    break;
+
+  case 209:
+#line 1372 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { (yyval.String) = new std::string(); ;}
+    break;
+
+  case 210:
+#line 1374 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+  (yyval.String) = new std::string((yyvsp[-1].Type)->getNewTy());
+  if (!(yyvsp[0].String)->empty()) {
+    std::string Name = getUniqueName((yyvsp[0].String), (yyvsp[-1].Type)->resolve());
+    *(yyval.String) += " " + Name;
   }
-  delete yyvsp[0].String;
-;
-    break;}
-case 210:
-#line 1041 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-2].String += ", " + *yyvsp[0].String;
-    delete yyvsp[0].String;
-  ;
-    break;}
-case 211:
-#line 1045 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.String = yyvsp[0].String;
-  ;
-    break;}
-case 212:
-#line 1049 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.String = yyvsp[0].String;
-  ;
-    break;}
-case 213:
-#line 1052 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-2].String += ", ...";
-    yyval.String = yyvsp[-2].String;
-    delete yyvsp[0].String;
-  ;
-    break;}
-case 214:
-#line 1057 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.String = yyvsp[0].String;
-  ;
-    break;}
-case 215:
-#line 1060 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ yyval.String = new std::string(); ;
-    break;}
-case 216:
-#line 1063 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    if (!yyvsp[-7].String->empty()) {
-      *yyvsp[-7].String += " ";
+  delete (yyvsp[0].String);
+;}
+    break;
+
+  case 211:
+#line 1383 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-2].String) += ", " + *(yyvsp[0].String);
+    delete (yyvsp[0].String);
+  ;}
+    break;
+
+  case 212:
+#line 1387 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.String) = (yyvsp[0].String);
+  ;}
+    break;
+
+  case 213:
+#line 1391 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.String) = (yyvsp[0].String);
+  ;}
+    break;
+
+  case 214:
+#line 1394 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-2].String) += ", ...";
+    (yyval.String) = (yyvsp[-2].String);
+    delete (yyvsp[0].String);
+  ;}
+    break;
+
+  case 215:
+#line 1399 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.String) = (yyvsp[0].String);
+  ;}
+    break;
+
+  case 216:
+#line 1402 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { (yyval.String) = new std::string(); ;}
+    break;
+
+  case 217:
+#line 1405 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    if (!(yyvsp[-7].String)->empty()) {
+      *(yyvsp[-7].String) += " ";
     }
-    *yyvsp[-7].String += yyvsp[-6].Type->getNewTy() + " " + *yyvsp[-5].String + "(" + *yyvsp[-3].String + ")";
-    if (!yyvsp[-1].String->empty()) {
-      *yyvsp[-7].String += " " + *yyvsp[-1].String;
+    *(yyvsp[-7].String) += (yyvsp[-6].Type)->getNewTy() + " " + *(yyvsp[-5].String) + "(" + *(yyvsp[-3].String) + ")";
+    if (!(yyvsp[-1].String)->empty()) {
+      *(yyvsp[-7].String) += " " + *(yyvsp[-1].String);
     }
-    if (!yyvsp[0].String->empty()) {
-      *yyvsp[-7].String += " " + *yyvsp[0].String;
+    if (!(yyvsp[0].String)->empty()) {
+      *(yyvsp[-7].String) += " " + *(yyvsp[0].String);
     }
-    delete yyvsp[-5].String;
-    delete yyvsp[-3].String;
-    delete yyvsp[-1].String;
-    delete yyvsp[0].String;
-    yyval.String = yyvsp[-7].String;
-  ;
-    break;}
-case 217:
-#line 1081 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ yyval.String = new std::string("{"); delete yyvsp[0].String; ;
-    break;}
-case 218:
-#line 1082 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ yyval.String = new std::string ("{"); ;
-    break;}
-case 219:
-#line 1085 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
+    delete (yyvsp[-5].String);
+    delete (yyvsp[-3].String);
+    delete (yyvsp[-1].String);
+    delete (yyvsp[0].String);
+    (yyval.String) = (yyvsp[-7].String);
+  ;}
+    break;
+
+  case 218:
+#line 1423 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { (yyval.String) = new std::string("{"); delete (yyvsp[0].String); ;}
+    break;
+
+  case 219:
+#line 1424 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { (yyval.String) = new std::string ("{"); ;}
+    break;
+
+  case 220:
+#line 1427 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
     *O << "define ";
-    if (!yyvsp[-2].String->empty()) {
-      *O << *yyvsp[-2].String << ' ';
+    if (!(yyvsp[-2].String)->empty()) {
+      *O << *(yyvsp[-2].String) << ' ';
     }
-    *O << *yyvsp[-1].String << ' ' << *yyvsp[0].String << '\n';
-    delete yyvsp[-2].String; delete yyvsp[-1].String; delete yyvsp[0].String;
-    yyval.String = 0;
-  ;
-    break;}
-case 220:
-#line 1096 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ yyval.String = new std::string("}"); delete yyvsp[0].String; ;
-    break;}
-case 221:
-#line 1097 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ yyval.String = new std::string("}"); ;
-    break;}
-case 222:
-#line 1099 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-  if (yyvsp[-1].String)
-    *O << *yyvsp[-1].String;
-  *O << *yyvsp[0].String << "\n\n";
-  delete yyvsp[-2].String; delete yyvsp[-1].String; delete yyvsp[0].String;
-  yyval.String = 0;
-;
-    break;}
-case 223:
-#line 1108 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ yyval.String = new std::string(); ;
-    break;}
-case 226:
-#line 1114 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ 
-    if (!yyvsp[-1].String->empty())
-      *yyvsp[-2].String += " " + *yyvsp[-1].String;
-    *yyvsp[-2].String += " " + *yyvsp[0].String;
-    delete yyvsp[-1].String;
-    delete yyvsp[0].String;
-    yyval.String = yyvsp[-2].String;
-  ;
-    break;}
-case 227:
-#line 1127 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ yyval.String = new std::string(); ;
-    break;}
-case 237:
-#line 1133 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ 
-    yyvsp[-1].String->insert(0, "<");
-    *yyvsp[-1].String += ">";
-    yyval.String = yyvsp[-1].String;
-  ;
-    break;}
-case 239:
-#line 1139 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    if (!yyvsp[-3].String->empty()) {
-      *yyvsp[-4].String += " " + *yyvsp[-3].String;
+    *O << *(yyvsp[-1].String) << ' ' << *(yyvsp[0].String) << '\n';
+    delete (yyvsp[-2].String); delete (yyvsp[-1].String); delete (yyvsp[0].String);
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 221:
+#line 1438 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { (yyval.String) = new std::string("}"); delete (yyvsp[0].String); ;}
+    break;
+
+  case 222:
+#line 1439 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { (yyval.String) = new std::string("}"); ;}
+    break;
+
+  case 223:
+#line 1441 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+  if ((yyvsp[-1].String))
+    *O << *(yyvsp[-1].String);
+  *O << *(yyvsp[0].String) << "\n\n";
+  delete (yyvsp[-2].String); delete (yyvsp[-1].String); delete (yyvsp[0].String);
+  (yyval.String) = 0;
+;}
+    break;
+
+  case 224:
+#line 1450 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { (yyval.String) = new std::string(); ;}
+    break;
+
+  case 227:
+#line 1456 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { 
+    if (!(yyvsp[-1].String)->empty())
+      *(yyvsp[-2].String) += " " + *(yyvsp[-1].String);
+    *(yyvsp[-2].String) += " " + *(yyvsp[0].String);
+    delete (yyvsp[-1].String);
+    delete (yyvsp[0].String);
+    (yyval.String) = (yyvsp[-2].String);
+  ;}
+    break;
+
+  case 228:
+#line 1469 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { (yyval.String) = new std::string(); ;}
+    break;
+
+  case 238:
+#line 1475 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { 
+    (yyvsp[-1].String)->insert(0, "<");
+    *(yyvsp[-1].String) += ">";
+    (yyval.String) = (yyvsp[-1].String);
+  ;}
+    break;
+
+  case 240:
+#line 1481 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    if (!(yyvsp[-3].String)->empty()) {
+      *(yyvsp[-4].String) += " " + *(yyvsp[-3].String);
     }
-    *yyvsp[-4].String += " " + *yyvsp[-2].String + ", " + *yyvsp[0].String;
-    delete yyvsp[-3].String; delete yyvsp[-2].String; delete yyvsp[0].String;
-    yyval.String = yyvsp[-4].String;
-  ;
-    break;}
-case 242:
-#line 1152 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.Value.val = yyvsp[0].String;
-    yyval.Value.constant = false;
-    yyval.Value.type = new TypeInfo();
-  ;
-    break;}
-case 243:
-#line 1157 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.Value.val = yyvsp[0].String;
-    yyval.Value.constant = true;
-    yyval.Value.type = new TypeInfo();
-  ;
-    break;}
-case 244:
-#line 1167 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    ResolveType(yyvsp[-1].Type);
-    std::string Name = getUniqueName(yyvsp[0].Value.val, yyvsp[-1].Type);
-    yyval.Value = yyvsp[0].Value;
-    delete yyval.Value.val;
-    delete yyval.Value.type;
-    yyval.Value.val = new std::string(yyvsp[-1].Type->getNewTy() + " " + Name);
-    yyval.Value.type = yyvsp[-1].Type;
-  ;
-    break;}
-case 245:
-#line 1177 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.String = 0;
-  ;
-    break;}
-case 246:
-#line 1180 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ // Do not allow functions with 0 basic blocks   
-    yyval.String = 0;
-  ;
-    break;}
-case 247:
-#line 1188 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.String = 0;
-  ;
-    break;}
-case 248:
-#line 1192 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *O << "    " << *yyvsp[0].String << '\n';
-    delete yyvsp[0].String;
-    yyval.String = 0;
-  ;
-    break;}
-case 249:
-#line 1197 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.String = 0;
-  ;
-    break;}
-case 250:
-#line 1200 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *O << *yyvsp[0].String << '\n';
-    delete yyvsp[0].String;
-    yyval.String = 0;
-  ;
-    break;}
-case 252:
-#line 1206 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ yyval.String = yyvsp[0].String; *yyval.String = "unwind"; ;
-    break;}
-case 253:
-#line 1208 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{              // Return with a result...
-    *O << "    " << *yyvsp[-1].String << ' ' << *yyvsp[0].Value.val << '\n';
-    delete yyvsp[-1].String; yyvsp[0].Value.destroy();
-    yyval.String = 0;
-  ;
-    break;}
-case 254:
-#line 1213 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{                                       // Return with no result...
-    *O << "    " << *yyvsp[-1].String << ' ' << yyvsp[0].Type->getNewTy() << '\n';
-    delete yyvsp[-1].String; delete yyvsp[0].Type;
-    yyval.String = 0;
-  ;
-    break;}
-case 255:
-#line 1218 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{                         // Unconditional Branch...
-    *O << "    " << *yyvsp[-2].String << ' ' << yyvsp[-1].Type->getNewTy() << ' ' << *yyvsp[0].Value.val << '\n';
-    delete yyvsp[-2].String; delete yyvsp[-1].Type; yyvsp[0].Value.destroy();
-    yyval.String = 0;
-  ;
-    break;}
-case 256:
-#line 1223 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{  
-    std::string Name = getUniqueName(yyvsp[-6].Value.val, yyvsp[-7].Type);
-    *O << "    " << *yyvsp[-8].String << ' ' << yyvsp[-7].Type->getNewTy() << ' ' << Name << ", " 
-       << yyvsp[-4].Type->getNewTy() << ' ' << *yyvsp[-3].Value.val << ", " << yyvsp[-1].Type->getNewTy() << ' ' 
-       << *yyvsp[0].Value.val << '\n';
-    delete yyvsp[-8].String; delete yyvsp[-7].Type; yyvsp[-6].Value.destroy(); delete yyvsp[-4].Type; yyvsp[-3].Value.destroy(); 
-    delete yyvsp[-1].Type; yyvsp[0].Value.destroy();
-    yyval.String = 0;
-  ;
-    break;}
-case 257:
-#line 1232 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    std::string Name = getUniqueName(yyvsp[-6].Value.val, yyvsp[-7].Type);
-    *O << "    " << *yyvsp[-8].String << ' ' << yyvsp[-7].Type->getNewTy() << ' ' << Name << ", " 
-       << yyvsp[-4].Type->getNewTy() << ' ' << *yyvsp[-3].Value.val << " [" << *yyvsp[-1].String << " ]\n";
-    delete yyvsp[-8].String; delete yyvsp[-7].Type; yyvsp[-6].Value.destroy(); delete yyvsp[-4].Type; yyvsp[-3].Value.destroy(); 
-    delete yyvsp[-1].String;
-    yyval.String = 0;
-  ;
-    break;}
-case 258:
-#line 1240 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    std::string Name = getUniqueName(yyvsp[-5].Value.val, yyvsp[-6].Type);
-    *O << "    " << *yyvsp[-7].String << ' ' << yyvsp[-6].Type->getNewTy() << ' ' << Name << ", " 
-       << yyvsp[-3].Type->getNewTy() << ' ' << *yyvsp[-2].Value.val << "[]\n";
-    delete yyvsp[-7].String; delete yyvsp[-6].Type; yyvsp[-5].Value.destroy(); delete yyvsp[-3].Type; yyvsp[-2].Value.destroy();
-    yyval.String = 0;
-  ;
-    break;}
-case 259:
-#line 1248 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    TypeInfo* ResTy = getFunctionReturnType(yyvsp[-10].Type);
+    *(yyvsp[-4].String) += " " + *(yyvsp[-2].String) + ", " + *(yyvsp[0].String);
+    delete (yyvsp[-3].String); delete (yyvsp[-2].String); delete (yyvsp[0].String);
+    (yyval.String) = (yyvsp[-4].String);
+  ;}
+    break;
+
+  case 243:
+#line 1494 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.Value).val = (yyvsp[0].String);
+    (yyval.Value).constant = false;
+    (yyval.Value).type = 0;
+  ;}
+    break;
+
+  case 244:
+#line 1499 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.Value).val = (yyvsp[0].String);
+    (yyval.Value).constant = true;
+    (yyval.Value).type = 0;
+  ;}
+    break;
+
+  case 245:
+#line 1509 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyvsp[-1].Type) = (yyvsp[-1].Type)->resolve();
+    std::string Name = getUniqueName((yyvsp[0].Value).val, (yyvsp[-1].Type));
+    (yyval.Value) = (yyvsp[0].Value);
+    delete (yyval.Value).val;
+    (yyval.Value).val = new std::string((yyvsp[-1].Type)->getNewTy() + " " + Name);
+    (yyval.Value).type = (yyvsp[-1].Type);
+  ;}
+    break;
+
+  case 246:
+#line 1518 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 247:
+#line 1521 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { // Do not allow functions with 0 basic blocks   
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 248:
+#line 1529 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 249:
+#line 1533 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *O << "    " << *(yyvsp[0].String) << '\n';
+    delete (yyvsp[0].String);
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 250:
+#line 1538 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 251:
+#line 1541 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *O << *(yyvsp[0].String) << '\n';
+    delete (yyvsp[0].String);
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 253:
+#line 1547 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { (yyval.String) = (yyvsp[0].String); *(yyval.String) = "unwind"; ;}
+    break;
+
+  case 254:
+#line 1549 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {              // Return with a result...
+    *O << "    " << *(yyvsp[-1].String) << ' ' << *(yyvsp[0].Value).val << '\n';
+    delete (yyvsp[-1].String); (yyvsp[0].Value).destroy();
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 255:
+#line 1554 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {                                       // Return with no result...
+    *O << "    " << *(yyvsp[-1].String) << ' ' << (yyvsp[0].Type)->getNewTy() << '\n';
+    delete (yyvsp[-1].String);
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 256:
+#line 1559 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {                         // Unconditional Branch...
+    *O << "    " << *(yyvsp[-2].String) << ' ' << (yyvsp[-1].Type)->getNewTy() << ' ' << *(yyvsp[0].Value).val << '\n';
+    delete (yyvsp[-2].String); (yyvsp[0].Value).destroy();
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 257:
+#line 1564 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {  
+    std::string Name = getUniqueName((yyvsp[-6].Value).val, (yyvsp[-7].Type));
+    *O << "    " << *(yyvsp[-8].String) << ' ' << (yyvsp[-7].Type)->getNewTy() << ' ' << Name << ", " 
+       << (yyvsp[-4].Type)->getNewTy() << ' ' << *(yyvsp[-3].Value).val << ", " << (yyvsp[-1].Type)->getNewTy() << ' ' 
+       << *(yyvsp[0].Value).val << '\n';
+    delete (yyvsp[-8].String); (yyvsp[-6].Value).destroy(); (yyvsp[-3].Value).destroy(); (yyvsp[0].Value).destroy();
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 258:
+#line 1572 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    std::string Name = getUniqueName((yyvsp[-6].Value).val, (yyvsp[-7].Type));
+    *O << "    " << *(yyvsp[-8].String) << ' ' << (yyvsp[-7].Type)->getNewTy() << ' ' << Name << ", " 
+       << (yyvsp[-4].Type)->getNewTy() << ' ' << *(yyvsp[-3].Value).val << " [" << *(yyvsp[-1].String) << " ]\n";
+    delete (yyvsp[-8].String); (yyvsp[-6].Value).destroy(); (yyvsp[-3].Value).destroy(); 
+    delete (yyvsp[-1].String);
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 259:
+#line 1580 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    std::string Name = getUniqueName((yyvsp[-5].Value).val, (yyvsp[-6].Type));
+    *O << "    " << *(yyvsp[-7].String) << ' ' << (yyvsp[-6].Type)->getNewTy() << ' ' << Name << ", " 
+       << (yyvsp[-3].Type)->getNewTy() << ' ' << *(yyvsp[-2].Value).val << "[]\n";
+    delete (yyvsp[-7].String); (yyvsp[-5].Value).destroy(); (yyvsp[-2].Value).destroy();
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 260:
+#line 1588 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    const TypeInfo* ResTy = getFunctionReturnType((yyvsp[-10].Type));
     *O << "    ";
-    if (!yyvsp[-13].String->empty()) {
-      std::string Name = getUniqueName(yyvsp[-13].String, ResTy);
+    if (!(yyvsp[-13].String)->empty()) {
+      std::string Name = getUniqueName((yyvsp[-13].String), ResTy);
       *O << Name << " = ";
     }
-    *O << *yyvsp[-12].String << ' ' << *yyvsp[-11].String << ' ' << yyvsp[-10].Type->getNewTy() << ' ' << *yyvsp[-9].Value.val << " (";
-    for (unsigned i = 0; i < yyvsp[-7].ValList->size(); ++i) {
-      ValueInfo& VI = (*yyvsp[-7].ValList)[i];
+    *O << *(yyvsp[-12].String) << ' ' << *(yyvsp[-11].String) << ' ' << (yyvsp[-10].Type)->getNewTy() << ' ' << *(yyvsp[-9].Value).val << " (";
+    for (unsigned i = 0; i < (yyvsp[-7].ValList)->size(); ++i) {
+      ValueInfo& VI = (*(yyvsp[-7].ValList))[i];
       *O << *VI.val;
-      if (i+1 < yyvsp[-7].ValList->size())
+      if (i+1 < (yyvsp[-7].ValList)->size())
         *O << ", ";
       VI.destroy();
     }
-    *O << ") " << *yyvsp[-5].String << ' ' << yyvsp[-4].Type->getNewTy() << ' ' << *yyvsp[-3].Value.val << ' ' 
-       << *yyvsp[-2].String << ' ' << yyvsp[-1].Type->getNewTy() << ' ' << *yyvsp[0].Value.val << '\n';
-    delete yyvsp[-13].String; delete yyvsp[-12].String; delete yyvsp[-11].String; delete yyvsp[-10].Type; yyvsp[-9].Value.destroy(); delete yyvsp[-7].ValList; 
-    delete yyvsp[-5].String; delete yyvsp[-4].Type; yyvsp[-3].Value.destroy(); delete yyvsp[-2].String; delete yyvsp[-1].Type; 
-    yyvsp[0].Value.destroy(); 
-    yyval.String = 0;
-  ;
-    break;}
-case 260:
-#line 1270 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *O << "    " << *yyvsp[0].String << '\n';
-    delete yyvsp[0].String;
-    yyval.String = 0;
-  ;
-    break;}
-case 261:
-#line 1275 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *O << "    " << *yyvsp[0].String << '\n';
-    delete yyvsp[0].String;
-    yyval.String = 0;
-  ;
-    break;}
-case 262:
-#line 1281 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-5].String += " " + yyvsp[-4].Type->getNewTy() + " " + *yyvsp[-3].String + ", " + yyvsp[-1].Type->getNewTy() + " " + 
-           *yyvsp[0].Value.val;
-    delete yyvsp[-4].Type; delete yyvsp[-3].String; delete yyvsp[-1].Type; yyvsp[0].Value.destroy();
-    yyval.String = yyvsp[-5].String;
-  ;
-    break;}
-case 263:
-#line 1287 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyvsp[-3].String->insert(0, yyvsp[-4].Type->getNewTy() + " " );
-    *yyvsp[-3].String += ", " + yyvsp[-1].Type->getNewTy() + " " + *yyvsp[0].Value.val;
-    delete yyvsp[-4].Type; delete yyvsp[-1].Type; yyvsp[0].Value.destroy();
-    yyval.String = yyvsp[-3].String;
-  ;
-    break;}
-case 264:
-#line 1295 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    if (!yyvsp[-1].String->empty()) {
-      if (deleteUselessCastFlag && *deleteUselessCastName == *yyvsp[-1].String) {
-        *yyvsp[-1].String += " = ";
-        yyvsp[-1].String->insert(0, "; "); // don't actually delete it, just comment it out
+    *O << ") " << *(yyvsp[-5].String) << ' ' << (yyvsp[-4].Type)->getNewTy() << ' ' << *(yyvsp[-3].Value).val << ' ' 
+       << *(yyvsp[-2].String) << ' ' << (yyvsp[-1].Type)->getNewTy() << ' ' << *(yyvsp[0].Value).val << '\n';
+    delete (yyvsp[-13].String); delete (yyvsp[-12].String); delete (yyvsp[-11].String); (yyvsp[-9].Value).destroy(); delete (yyvsp[-7].ValList); 
+    delete (yyvsp[-5].String); (yyvsp[-3].Value).destroy(); delete (yyvsp[-2].String); (yyvsp[0].Value).destroy(); 
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 261:
+#line 1609 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *O << "    " << *(yyvsp[0].String) << '\n';
+    delete (yyvsp[0].String);
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 262:
+#line 1614 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *O << "    " << *(yyvsp[0].String) << '\n';
+    delete (yyvsp[0].String);
+    (yyval.String) = 0;
+  ;}
+    break;
+
+  case 263:
+#line 1620 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-5].String) += " " + (yyvsp[-4].Type)->getNewTy() + " " + *(yyvsp[-3].String) + ", " + (yyvsp[-1].Type)->getNewTy() + " " + 
+           *(yyvsp[0].Value).val;
+    delete (yyvsp[-3].String); (yyvsp[0].Value).destroy();
+    (yyval.String) = (yyvsp[-5].String);
+  ;}
+    break;
+
+  case 264:
+#line 1626 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyvsp[-3].String)->insert(0, (yyvsp[-4].Type)->getNewTy() + " " );
+    *(yyvsp[-3].String) += ", " + (yyvsp[-1].Type)->getNewTy() + " " + *(yyvsp[0].Value).val;
+    (yyvsp[0].Value).destroy();
+    (yyval.String) = (yyvsp[-3].String);
+  ;}
+    break;
+
+  case 265:
+#line 1634 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    if (!(yyvsp[-1].String)->empty()) {
+      // Get a unique name for this value, based on its type.
+      std::string Name = getUniqueName((yyvsp[-1].String), (yyvsp[0].Value).type);
+      *(yyvsp[-1].String) = Name + " = ";
+      if (deleteUselessCastFlag && *deleteUselessCastName == Name) {
+        // don't actually delete it, just comment it out
+        (yyvsp[-1].String)->insert(0, "; USELSS BITCAST: "); 
         delete deleteUselessCastName;
-      } else {
-        // Get a unique name for the name of this value, based on its type.
-        *yyvsp[-1].String = getUniqueName(yyvsp[-1].String, yyvsp[0].Value.type) + " = ";
       }
     }
-    *yyvsp[-1].String += *yyvsp[0].Value.val;
-    yyvsp[0].Value.destroy();
+    *(yyvsp[-1].String) += *(yyvsp[0].Value).val;
+    (yyvsp[0].Value).destroy();
     deleteUselessCastFlag = false;
-    yyval.String = yyvsp[-1].String; 
-  ;
-    break;}
-case 265:
-#line 1313 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{    // Used for PHI nodes
-    std::string Name = getUniqueName(yyvsp[-3].Value.val, yyvsp[-5].Type);
-    Name.insert(0, yyvsp[-5].Type->getNewTy() + "[");
-    Name += "," + *yyvsp[-1].Value.val + "]";
-    yyval.Value.val = new std::string(Name);
-    yyval.Value.type = yyvsp[-5].Type;
-    yyvsp[-3].Value.destroy(); yyvsp[-1].Value.destroy();
-  ;
-    break;}
-case 266:
-#line 1321 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    std::string Name = getUniqueName(yyvsp[-3].Value.val, yyvsp[-6].Value.type);
-    *yyvsp[-6].Value.val += ", [" + Name + "," + *yyvsp[-1].Value.val + "]";
-    yyvsp[-3].Value.destroy(); yyvsp[-1].Value.destroy();
-    yyval.Value = yyvsp[-6].Value;
-  ;
-    break;}
-case 267:
-#line 1330 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.ValList = new ValueList();
-    yyval.ValList->push_back(yyvsp[0].Value);
-  ;
-    break;}
-case 268:
-#line 1334 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.ValList = yyvsp[-2].ValList;
-    yyval.ValList->push_back(yyvsp[0].Value);
-  ;
-    break;}
-case 269:
-#line 1341 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ yyval.ValList = yyvsp[0].ValList; ;
-    break;}
-case 270:
-#line 1342 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ yyval.ValList = new ValueList(); ;
-    break;}
-case 271:
-#line 1346 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-1].String += " " + *yyvsp[0].String;
-    delete yyvsp[0].String;
-    yyval.String = yyvsp[-1].String;
-  ;
-    break;}
-case 273:
-#line 1354 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    const char* op = getDivRemOpcode(*yyvsp[-4].String, yyvsp[-3].Type); 
-    std::string Name1 = getUniqueName(yyvsp[-2].Value.val, yyvsp[-3].Type);
-    std::string Name2 = getUniqueName(yyvsp[0].Value.val, yyvsp[-3].Type);
-    yyval.Value.val = new std::string(op);
-    *yyval.Value.val += " " + yyvsp[-3].Type->getNewTy() + " " + Name1 + ", " + Name2;
-    yyval.Value.type = yyvsp[-3].Type;
-    delete yyvsp[-4].String; yyvsp[-2].Value.destroy(); yyvsp[0].Value.destroy();
-  ;
-    break;}
-case 274:
-#line 1363 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    std::string Name1 = getUniqueName(yyvsp[-2].Value.val, yyvsp[-3].Type);
-    std::string Name2 = getUniqueName(yyvsp[0].Value.val, yyvsp[-3].Type);
-    *yyvsp[-4].String += " " + yyvsp[-3].Type->getNewTy() + " " + Name1 + ", " + Name2;
-    yyval.Value.val = yyvsp[-4].String;
-    yyval.Value.type = yyvsp[-3].Type;
-    yyvsp[-2].Value.destroy(); yyvsp[0].Value.destroy();
-  ;
-    break;}
-case 275:
-#line 1371 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    std::string Name1 = getUniqueName(yyvsp[-2].Value.val, yyvsp[-3].Type);
-    std::string Name2 = getUniqueName(yyvsp[0].Value.val, yyvsp[-3].Type);
-    *yyvsp[-4].String = getCompareOp(*yyvsp[-4].String, yyvsp[-3].Type);
-    *yyvsp[-4].String += " " + yyvsp[-3].Type->getNewTy() + " " + Name1 + ", " + Name2;
-    yyval.Value.val = yyvsp[-4].String;
-    yyval.Value.type = new TypeInfo("bool",BoolTy);
-    yyvsp[-2].Value.destroy(); yyvsp[0].Value.destroy();
-  ;
-    break;}
-case 276:
-#line 1380 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    std::string Name1 = getUniqueName(yyvsp[-2].Value.val, yyvsp[-3].Type);
-    std::string Name2 = getUniqueName(yyvsp[0].Value.val, yyvsp[-3].Type);
-    *yyvsp[-5].String += " " + *yyvsp[-4].String + " " + yyvsp[-3].Type->getNewTy() + " " + Name1 + "," + Name2;
-    yyval.Value.val = yyvsp[-5].String;
-    yyval.Value.type = new TypeInfo("bool",BoolTy);
-    delete yyvsp[-4].String; yyvsp[-2].Value.destroy(); yyvsp[0].Value.destroy();
-  ;
-    break;}
-case 277:
-#line 1388 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    std::string Name1 = getUniqueName(yyvsp[-2].Value.val, yyvsp[-3].Type);
-    std::string Name2 = getUniqueName(yyvsp[0].Value.val, yyvsp[-3].Type);
-    *yyvsp[-5].String += " " + *yyvsp[-4].String + " " + yyvsp[-3].Type->getNewTy() + " " + Name1 + "," + Name2;
-    yyval.Value.val = yyvsp[-5].String;
-    yyval.Value.type = new TypeInfo("bool",BoolTy);
-    delete yyvsp[-4].String; yyvsp[-2].Value.destroy(); yyvsp[0].Value.destroy();
-  ;
-    break;}
-case 278:
-#line 1396 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    yyval.Value = yyvsp[0].Value;
-    yyval.Value.val->insert(0, *yyvsp[-1].String + " ");
-    delete yyvsp[-1].String;
-  ;
-    break;}
-case 279:
-#line 1401 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    const char* shiftop = yyvsp[-3].String->c_str();
-    if (*yyvsp[-3].String == "shr")
-      shiftop = (yyvsp[-2].Value.type->isUnsigned()) ? "lshr" : "ashr";
-    yyval.Value.val = new std::string(shiftop);
-    *yyval.Value.val += " " + *yyvsp[-2].Value.val + ", " + *yyvsp[0].Value.val;
-    yyval.Value.type = yyvsp[-2].Value.type;
-    delete yyvsp[-3].String; delete yyvsp[-2].Value.val; yyvsp[0].Value.destroy();
-  ;
-    break;}
-case 280:
-#line 1410 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    std::string source = *yyvsp[-2].Value.val;
-    TypeInfo* SrcTy = yyvsp[-2].Value.type;
-    TypeInfo* DstTy = ResolveType(yyvsp[0].Type);
-    yyval.Value.val = new std::string();
-    if (*yyvsp[-3].String == "cast") {
-      *yyval.Value.val +=  getCastUpgrade(source, SrcTy, DstTy, false);
+    (yyval.String) = (yyvsp[-1].String); 
+  ;}
+    break;
+
+  case 266:
+#line 1652 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {    // Used for PHI nodes
+    std::string Name = getUniqueName((yyvsp[-3].Value).val, (yyvsp[-5].Type));
+    Name.insert(0, (yyvsp[-5].Type)->getNewTy() + "[");
+    Name += "," + *(yyvsp[-1].Value).val + "]";
+    (yyval.Value).val = new std::string(Name);
+    (yyval.Value).type = (yyvsp[-5].Type);
+    (yyvsp[-3].Value).destroy(); (yyvsp[-1].Value).destroy();
+  ;}
+    break;
+
+  case 267:
+#line 1660 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    std::string Name = getUniqueName((yyvsp[-3].Value).val, (yyvsp[-6].Value).type);
+    *(yyvsp[-6].Value).val += ", [" + Name + "," + *(yyvsp[-1].Value).val + "]";
+    (yyvsp[-3].Value).destroy(); (yyvsp[-1].Value).destroy();
+    (yyval.Value) = (yyvsp[-6].Value);
+  ;}
+    break;
+
+  case 268:
+#line 1669 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.ValList) = new ValueList();
+    (yyval.ValList)->push_back((yyvsp[0].Value));
+  ;}
+    break;
+
+  case 269:
+#line 1673 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.ValList) = (yyvsp[-2].ValList);
+    (yyval.ValList)->push_back((yyvsp[0].Value));
+  ;}
+    break;
+
+  case 270:
+#line 1680 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { (yyval.ValList) = (yyvsp[0].ValList); ;}
+    break;
+
+  case 271:
+#line 1681 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { (yyval.ValList) = new ValueList(); ;}
+    break;
+
+  case 272:
+#line 1685 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-1].String) += " " + *(yyvsp[0].String);
+    delete (yyvsp[0].String);
+    (yyval.String) = (yyvsp[-1].String);
+  ;}
+    break;
+
+  case 274:
+#line 1693 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    const char* op = getDivRemOpcode(*(yyvsp[-4].String), (yyvsp[-3].Type)); 
+    std::string Name1 = getUniqueName((yyvsp[-2].Value).val, (yyvsp[-3].Type));
+    std::string Name2 = getUniqueName((yyvsp[0].Value).val, (yyvsp[-3].Type));
+    (yyval.Value).val = new std::string(op);
+    *(yyval.Value).val += " " + (yyvsp[-3].Type)->getNewTy() + " " + Name1 + ", " + Name2;
+    (yyval.Value).type = (yyvsp[-3].Type);
+    delete (yyvsp[-4].String); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
+  ;}
+    break;
+
+  case 275:
+#line 1702 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    std::string Name1 = getUniqueName((yyvsp[-2].Value).val, (yyvsp[-3].Type));
+    std::string Name2 = getUniqueName((yyvsp[0].Value).val, (yyvsp[-3].Type));
+    *(yyvsp[-4].String) += " " + (yyvsp[-3].Type)->getNewTy() + " " + Name1 + ", " + Name2;
+    (yyval.Value).val = (yyvsp[-4].String);
+    (yyval.Value).type = (yyvsp[-3].Type);
+    (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
+  ;}
+    break;
+
+  case 276:
+#line 1710 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    std::string Name1 = getUniqueName((yyvsp[-2].Value).val, (yyvsp[-3].Type));
+    std::string Name2 = getUniqueName((yyvsp[0].Value).val, (yyvsp[-3].Type));
+    *(yyvsp[-4].String) = getCompareOp(*(yyvsp[-4].String), (yyvsp[-3].Type));
+    *(yyvsp[-4].String) += " " + (yyvsp[-3].Type)->getNewTy() + " " + Name1 + ", " + Name2;
+    (yyval.Value).val = (yyvsp[-4].String);
+    (yyval.Value).type = TypeInfo::get("bool",BoolTy);
+    (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
+  ;}
+    break;
+
+  case 277:
+#line 1719 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    std::string Name1 = getUniqueName((yyvsp[-2].Value).val, (yyvsp[-3].Type));
+    std::string Name2 = getUniqueName((yyvsp[0].Value).val, (yyvsp[-3].Type));
+    *(yyvsp[-5].String) += " " + *(yyvsp[-4].String) + " " + (yyvsp[-3].Type)->getNewTy() + " " + Name1 + "," + Name2;
+    (yyval.Value).val = (yyvsp[-5].String);
+    (yyval.Value).type = TypeInfo::get("bool",BoolTy);
+    delete (yyvsp[-4].String); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
+  ;}
+    break;
+
+  case 278:
+#line 1727 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    std::string Name1 = getUniqueName((yyvsp[-2].Value).val, (yyvsp[-3].Type));
+    std::string Name2 = getUniqueName((yyvsp[0].Value).val, (yyvsp[-3].Type));
+    *(yyvsp[-5].String) += " " + *(yyvsp[-4].String) + " " + (yyvsp[-3].Type)->getNewTy() + " " + Name1 + "," + Name2;
+    (yyval.Value).val = (yyvsp[-5].String);
+    (yyval.Value).type = TypeInfo::get("bool",BoolTy);
+    delete (yyvsp[-4].String); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
+  ;}
+    break;
+
+  case 279:
+#line 1735 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.Value) = (yyvsp[0].Value);
+    (yyval.Value).val->insert(0, *(yyvsp[-1].String) + " ");
+    delete (yyvsp[-1].String);
+  ;}
+    break;
+
+  case 280:
+#line 1740 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    const char* shiftop = (yyvsp[-3].String)->c_str();
+    if (*(yyvsp[-3].String) == "shr")
+      shiftop = ((yyvsp[-2].Value).type->isUnsigned()) ? "lshr" : "ashr";
+    (yyval.Value).val = new std::string(shiftop);
+    *(yyval.Value).val += " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
+    (yyval.Value).type = (yyvsp[-2].Value).type;
+    delete (yyvsp[-3].String); delete (yyvsp[-2].Value).val; (yyvsp[0].Value).destroy();
+  ;}
+    break;
+
+  case 281:
+#line 1749 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    std::string source = *(yyvsp[-2].Value).val;
+    const TypeInfo* SrcTy = (yyvsp[-2].Value).type->resolve();
+    const TypeInfo* DstTy = (yyvsp[0].Type)->resolve();
+    (yyval.Value).val = new std::string();
+    (yyval.Value).type = DstTy;
+    if (*(yyvsp[-3].String) == "cast") {
+      *(yyval.Value).val += getCastUpgrade(source, SrcTy, DstTy, false);
     } else {
-      *yyval.Value.val += *yyvsp[-3].String + " " + source + " to " + DstTy->getNewTy();
+      *(yyval.Value).val += *(yyvsp[-3].String) + " " + source + " to " + DstTy->getNewTy();
     }
-    yyval.Value.type = yyvsp[0].Type;
     // Check to see if this is a useless cast of a value to the same name
     // and the same type. Such casts will probably cause redefinition errors
     // when assembled and perform no code gen action so just remove them.
-    if (*yyvsp[-3].String == "cast" || *yyvsp[-3].String == "bitcast")
-      if (yyvsp[-2].Value.type->isInteger() && DstTy->isInteger() &&
-          yyvsp[-2].Value.type->getBitWidth() == DstTy->getBitWidth()) {
+    if (*(yyvsp[-3].String) == "cast" || *(yyvsp[-3].String) == "bitcast")
+      if (SrcTy->isInteger() && DstTy->isInteger() &&
+          SrcTy->getBitWidth() == DstTy->getBitWidth()) {
         deleteUselessCastFlag = true; // Flag the "Inst" rule
-        deleteUselessCastName = new std::string(*yyvsp[-2].Value.val); // save the name
+        deleteUselessCastName = new std::string(*(yyvsp[-2].Value).val); // save the name
         size_t pos = deleteUselessCastName->find_first_of("%\"",0);
         if (pos != std::string::npos) {
           // remove the type portion before val
           deleteUselessCastName->erase(0, pos);
         }
       }
-    delete yyvsp[-3].String; yyvsp[-2].Value.destroy();
-    delete yyvsp[-1].String;
-  ;
-    break;}
-case 281:
-#line 1438 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-5].String += " " + *yyvsp[-4].Value.val + ", " + *yyvsp[-2].Value.val + ", " + *yyvsp[0].Value.val;
-    yyval.Value.val = yyvsp[-5].String;
-    yyval.Value.type = yyvsp[-2].Value.type;
-    yyvsp[-4].Value.destroy(); delete yyvsp[-2].Value.val; yyvsp[0].Value.destroy();
-  ;
-    break;}
-case 282:
-#line 1444 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-3].String += " " + *yyvsp[-2].Value.val + ", " + yyvsp[0].Type->getNewTy();
-    yyval.Value.val = yyvsp[-3].String;
-    yyval.Value.type = yyvsp[0].Type;
-    yyvsp[-2].Value.destroy();
-  ;
-    break;}
-case 283:
-#line 1450 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-3].String += " " + *yyvsp[-2].Value.val + ", " + *yyvsp[0].Value.val;
-    yyval.Value.val = yyvsp[-3].String;
-    ResolveType(yyvsp[-2].Value.type);
-    yyval.Value.type = yyvsp[-2].Value.type->getElementType();
-    delete yyvsp[-2].Value.val; yyvsp[0].Value.destroy();
-  ;
-    break;}
-case 284:
-#line 1457 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-5].String += " " + *yyvsp[-4].Value.val + ", " + *yyvsp[-2].Value.val + ", " + *yyvsp[0].Value.val;
-    yyval.Value.val = yyvsp[-5].String;
-    yyval.Value.type = yyvsp[-4].Value.type;
-    delete yyvsp[-4].Value.val; yyvsp[-2].Value.destroy(); yyvsp[0].Value.destroy();
-  ;
-    break;}
-case 285:
-#line 1463 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-5].String += " " + *yyvsp[-4].Value.val + ", " + *yyvsp[-2].Value.val + ", " + *yyvsp[0].Value.val;
-    yyval.Value.val = yyvsp[-5].String;
-    yyval.Value.type = yyvsp[-4].Value.type;
-    delete yyvsp[-4].Value.val; yyvsp[-2].Value.destroy(); yyvsp[0].Value.destroy();
-  ;
-    break;}
-case 286:
-#line 1469 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-1].String += " " + *yyvsp[0].Value.val;
-    yyval.Value.val = yyvsp[-1].String;
-    yyval.Value.type = yyvsp[0].Value.type;
-    delete yyvsp[0].Value.val;
-  ;
-    break;}
-case 287:
-#line 1475 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    if (!yyvsp[-5].String->empty())
-      *yyvsp[-6].String += " " + *yyvsp[-5].String;
-    if (!yyvsp[-6].String->empty())
-      *yyvsp[-6].String += " ";
-    *yyvsp[-6].String += yyvsp[-4].Type->getNewTy() + " " + *yyvsp[-3].Value.val + "(";
-    for (unsigned i = 0; i < yyvsp[-1].ValList->size(); ++i) {
-      ValueInfo& VI = (*yyvsp[-1].ValList)[i];
-      *yyvsp[-6].String += *VI.val;
-      if (i+1 < yyvsp[-1].ValList->size())
-        *yyvsp[-6].String += ", ";
+    delete (yyvsp[-3].String); (yyvsp[-2].Value).destroy();
+    delete (yyvsp[-1].String);
+  ;}
+    break;
+
+  case 282:
+#line 1777 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-5].String) += " " + *(yyvsp[-4].Value).val + ", " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
+    (yyval.Value).val = (yyvsp[-5].String);
+    (yyval.Value).type = (yyvsp[-2].Value).type;
+    (yyvsp[-4].Value).destroy(); delete (yyvsp[-2].Value).val; (yyvsp[0].Value).destroy();
+  ;}
+    break;
+
+  case 283:
+#line 1783 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-3].String) += " " + *(yyvsp[-2].Value).val + ", " + (yyvsp[0].Type)->getNewTy();
+    (yyval.Value).val = (yyvsp[-3].String);
+    (yyval.Value).type = (yyvsp[0].Type);
+    (yyvsp[-2].Value).destroy();
+  ;}
+    break;
+
+  case 284:
+#line 1789 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-3].String) += " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
+    (yyval.Value).val = (yyvsp[-3].String);
+    (yyvsp[-2].Value).type = (yyvsp[-2].Value).type->resolve();;
+    (yyval.Value).type = (yyvsp[-2].Value).type->getElementType();
+    delete (yyvsp[-2].Value).val; (yyvsp[0].Value).destroy();
+  ;}
+    break;
+
+  case 285:
+#line 1796 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-5].String) += " " + *(yyvsp[-4].Value).val + ", " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
+    (yyval.Value).val = (yyvsp[-5].String);
+    (yyval.Value).type = (yyvsp[-4].Value).type;
+    delete (yyvsp[-4].Value).val; (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
+  ;}
+    break;
+
+  case 286:
+#line 1802 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-5].String) += " " + *(yyvsp[-4].Value).val + ", " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
+    (yyval.Value).val = (yyvsp[-5].String);
+    (yyval.Value).type = (yyvsp[-4].Value).type;
+    delete (yyvsp[-4].Value).val; (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
+  ;}
+    break;
+
+  case 287:
+#line 1808 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-1].String) += " " + *(yyvsp[0].Value).val;
+    (yyval.Value).val = (yyvsp[-1].String);
+    (yyval.Value).type = (yyvsp[0].Value).type;
+    delete (yyvsp[0].Value).val;
+  ;}
+    break;
+
+  case 288:
+#line 1814 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    if (!(yyvsp[-5].String)->empty())
+      *(yyvsp[-6].String) += " " + *(yyvsp[-5].String);
+    if (!(yyvsp[-6].String)->empty())
+      *(yyvsp[-6].String) += " ";
+    *(yyvsp[-6].String) += (yyvsp[-4].Type)->getNewTy() + " " + *(yyvsp[-3].Value).val + "(";
+    for (unsigned i = 0; i < (yyvsp[-1].ValList)->size(); ++i) {
+      ValueInfo& VI = (*(yyvsp[-1].ValList))[i];
+      *(yyvsp[-6].String) += *VI.val;
+      if (i+1 < (yyvsp[-1].ValList)->size())
+        *(yyvsp[-6].String) += ", ";
       VI.destroy();
     }
-    *yyvsp[-6].String += ")";
-    yyval.Value.val = yyvsp[-6].String;
-    yyval.Value.type = getFunctionReturnType(yyvsp[-4].Type);
-    delete yyvsp[-5].String; delete yyvsp[-4].Type; yyvsp[-3].Value.destroy(); delete yyvsp[-1].ValList;
-  ;
-    break;}
-case 289:
-#line 1498 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ yyval.ValList = yyvsp[0].ValList; ;
-    break;}
-case 290:
-#line 1499 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{  yyval.ValList = new ValueList(); ;
-    break;}
-case 292:
-#line 1504 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{ yyval.String = new std::string(); ;
-    break;}
-case 293:
-#line 1507 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-2].String += " " + yyvsp[-1].Type->getNewTy();
-    if (!yyvsp[0].String->empty())
-      *yyvsp[-2].String += " " + *yyvsp[0].String;
-    yyval.Value.val = yyvsp[-2].String;
-    yyval.Value.type = yyvsp[-1].Type->getPointerType();
-    delete yyvsp[-1].Type; delete yyvsp[0].String;
-  ;
-    break;}
-case 294:
-#line 1515 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    std::string Name = getUniqueName(yyvsp[-1].Value.val, yyvsp[-2].Type);
-    *yyvsp[-5].String += " " + yyvsp[-4].Type->getNewTy() + ", " + yyvsp[-2].Type->getNewTy() + " " + Name;
-    if (!yyvsp[0].String->empty())
-      *yyvsp[-5].String += " " + *yyvsp[0].String;
-    yyval.Value.val = yyvsp[-5].String;
-    yyval.Value.type = yyvsp[-4].Type->getPointerType();
-    delete yyvsp[-4].Type; delete yyvsp[-2].Type; yyvsp[-1].Value.destroy(); delete yyvsp[0].String;
-  ;
-    break;}
-case 295:
-#line 1524 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-2].String += " " + yyvsp[-1].Type->getNewTy();
-    if (!yyvsp[0].String->empty())
-      *yyvsp[-2].String += " " + *yyvsp[0].String;
-    yyval.Value.val = yyvsp[-2].String;
-    yyval.Value.type = yyvsp[-1].Type->getPointerType();
-    delete yyvsp[-1].Type; delete yyvsp[0].String;
-  ;
-    break;}
-case 296:
-#line 1532 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    std::string Name = getUniqueName(yyvsp[-1].Value.val, yyvsp[-2].Type);
-    *yyvsp[-5].String += " " + yyvsp[-4].Type->getNewTy() + ", " + yyvsp[-2].Type->getNewTy() + " " + Name;
-    if (!yyvsp[0].String->empty())
-      *yyvsp[-5].String += " " + *yyvsp[0].String;
-    yyval.Value.val = yyvsp[-5].String;
-    yyval.Value.type = yyvsp[-4].Type->getPointerType();
-    delete yyvsp[-4].Type; delete yyvsp[-2].Type; yyvsp[-1].Value.destroy(); delete yyvsp[0].String;
-  ;
-    break;}
-case 297:
-#line 1541 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    *yyvsp[-1].String += " " + *yyvsp[0].Value.val;
-    yyval.Value.val = yyvsp[-1].String;
-    yyval.Value.type = new TypeInfo("void", VoidTy); 
-    yyvsp[0].Value.destroy();
-  ;
-    break;}
-case 298:
-#line 1547 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    std::string Name = getUniqueName(yyvsp[0].Value.val, yyvsp[-1].Type);
-    if (!yyvsp[-3].String->empty())
-      *yyvsp[-3].String += " ";
-    *yyvsp[-3].String += *yyvsp[-2].String + " " + yyvsp[-1].Type->getNewTy() + " " + Name;
-    yyval.Value.val = yyvsp[-3].String;
-    yyval.Value.type = yyvsp[-1].Type->getElementType()->clone();
-    delete yyvsp[-2].String; delete yyvsp[-1].Type; yyvsp[0].Value.destroy();
-  ;
-    break;}
-case 299:
-#line 1556 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    std::string Name = getUniqueName(yyvsp[0].Value.val, yyvsp[-1].Type);
-    if (!yyvsp[-5].String->empty())
-      *yyvsp[-5].String += " ";
-    *yyvsp[-5].String += *yyvsp[-4].String + " " + *yyvsp[-3].Value.val + ", " + yyvsp[-1].Type->getNewTy() + " " + Name;
-    yyval.Value.val = yyvsp[-5].String;
-    yyval.Value.type = new TypeInfo("void", VoidTy);
-    delete yyvsp[-4].String; yyvsp[-3].Value.destroy(); delete yyvsp[-1].Type; yyvsp[0].Value.destroy();
-  ;
-    break;}
-case 300:
-#line 1565 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
-{
-    std::string Name = getUniqueName(yyvsp[-1].Value.val, yyvsp[-2].Type);
+    *(yyvsp[-6].String) += ")";
+    (yyval.Value).val = (yyvsp[-6].String);
+    (yyval.Value).type = getFunctionReturnType((yyvsp[-4].Type));
+    delete (yyvsp[-5].String); (yyvsp[-3].Value).destroy(); delete (yyvsp[-1].ValList);
+  ;}
+    break;
+
+  case 290:
+#line 1837 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { (yyval.ValList) = (yyvsp[0].ValList); ;}
+    break;
+
+  case 291:
+#line 1838 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {  (yyval.ValList) = new ValueList(); ;}
+    break;
+
+  case 293:
+#line 1843 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    { (yyval.String) = new std::string(); ;}
+    break;
+
+  case 294:
+#line 1846 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-2].String) += " " + (yyvsp[-1].Type)->getNewTy();
+    if (!(yyvsp[0].String)->empty())
+      *(yyvsp[-2].String) += " " + *(yyvsp[0].String);
+    (yyval.Value).val = (yyvsp[-2].String);
+    (yyval.Value).type = (yyvsp[-1].Type)->getPointerType();
+    delete (yyvsp[0].String);
+  ;}
+    break;
+
+  case 295:
+#line 1854 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    std::string Name = getUniqueName((yyvsp[-1].Value).val, (yyvsp[-2].Type));
+    *(yyvsp[-5].String) += " " + (yyvsp[-4].Type)->getNewTy() + ", " + (yyvsp[-2].Type)->getNewTy() + " " + Name;
+    if (!(yyvsp[0].String)->empty())
+      *(yyvsp[-5].String) += " " + *(yyvsp[0].String);
+    (yyval.Value).val = (yyvsp[-5].String);
+    (yyval.Value).type = (yyvsp[-4].Type)->getPointerType();
+    (yyvsp[-1].Value).destroy(); delete (yyvsp[0].String);
+  ;}
+    break;
+
+  case 296:
+#line 1863 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-2].String) += " " + (yyvsp[-1].Type)->getNewTy();
+    if (!(yyvsp[0].String)->empty())
+      *(yyvsp[-2].String) += " " + *(yyvsp[0].String);
+    (yyval.Value).val = (yyvsp[-2].String);
+    (yyval.Value).type = (yyvsp[-1].Type)->getPointerType();
+    delete (yyvsp[0].String);
+  ;}
+    break;
+
+  case 297:
+#line 1871 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    std::string Name = getUniqueName((yyvsp[-1].Value).val, (yyvsp[-2].Type));
+    *(yyvsp[-5].String) += " " + (yyvsp[-4].Type)->getNewTy() + ", " + (yyvsp[-2].Type)->getNewTy() + " " + Name;
+    if (!(yyvsp[0].String)->empty())
+      *(yyvsp[-5].String) += " " + *(yyvsp[0].String);
+    (yyval.Value).val = (yyvsp[-5].String);
+    (yyval.Value).type = (yyvsp[-4].Type)->getPointerType();
+    (yyvsp[-1].Value).destroy(); delete (yyvsp[0].String);
+  ;}
+    break;
+
+  case 298:
+#line 1880 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    *(yyvsp[-1].String) += " " + *(yyvsp[0].Value).val;
+    (yyval.Value).val = (yyvsp[-1].String);
+    (yyval.Value).type = TypeInfo::get("void", VoidTy); 
+    (yyvsp[0].Value).destroy();
+  ;}
+    break;
+
+  case 299:
+#line 1886 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    std::string Name = getUniqueName((yyvsp[0].Value).val, (yyvsp[-1].Type));
+    if (!(yyvsp[-3].String)->empty())
+      *(yyvsp[-3].String) += " ";
+    *(yyvsp[-3].String) += *(yyvsp[-2].String) + " " + (yyvsp[-1].Type)->getNewTy() + " " + Name;
+    (yyval.Value).val = (yyvsp[-3].String);
+    (yyval.Value).type = (yyvsp[-1].Type)->getElementType();
+    delete (yyvsp[-2].String); (yyvsp[0].Value).destroy();
+  ;}
+    break;
+
+  case 300:
+#line 1895 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    std::string Name = getUniqueName((yyvsp[0].Value).val, (yyvsp[-1].Type));
+    if (!(yyvsp[-5].String)->empty())
+      *(yyvsp[-5].String) += " ";
+    *(yyvsp[-5].String) += *(yyvsp[-4].String) + " " + *(yyvsp[-3].Value).val + ", " + (yyvsp[-1].Type)->getNewTy() + " " + Name;
+    (yyval.Value).val = (yyvsp[-5].String);
+    (yyval.Value).type = TypeInfo::get("void", VoidTy);
+    delete (yyvsp[-4].String); (yyvsp[-3].Value).destroy(); (yyvsp[0].Value).destroy();
+  ;}
+    break;
+
+  case 301:
+#line 1904 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    std::string Name = getUniqueName((yyvsp[-1].Value).val, (yyvsp[-2].Type));
     // Upgrade the indices
-    for (unsigned i = 0; i < yyvsp[0].ValList->size(); ++i) {
-      ValueInfo& VI = (*yyvsp[0].ValList)[i];
+    for (unsigned i = 0; i < (yyvsp[0].ValList)->size(); ++i) {
+      ValueInfo& VI = (*(yyvsp[0].ValList))[i];
       if (VI.type->isUnsigned() && !VI.isConstant() && 
           VI.type->getBitWidth() < 64) {
         std::string* old = VI.val;
         *O << "    %gep_upgrade" << unique << " = zext " << *old 
            << " to i64\n";
         VI.val = new std::string("i64 %gep_upgrade" + llvm::utostr(unique++));
-        VI.type->setOldTy(ULongTy);
+        VI.type = TypeInfo::get("i64",ULongTy);
       }
     }
-    *yyvsp[-3].String += " " + yyvsp[-2].Type->getNewTy() + " " + Name;
-    for (unsigned i = 0; i < yyvsp[0].ValList->size(); ++i) {
-      ValueInfo& VI = (*yyvsp[0].ValList)[i];
-      *yyvsp[-3].String += ", " + *VI.val;
+    *(yyvsp[-3].String) += " " + (yyvsp[-2].Type)->getNewTy() + " " + Name;
+    for (unsigned i = 0; i < (yyvsp[0].ValList)->size(); ++i) {
+      ValueInfo& VI = (*(yyvsp[0].ValList))[i];
+      *(yyvsp[-3].String) += ", " + *VI.val;
     }
-    yyval.Value.val = yyvsp[-3].String;
-    yyval.Value.type = getGEPIndexedType(yyvsp[-2].Type,yyvsp[0].ValList); 
-    yyvsp[-1].Value.destroy(); delete yyvsp[0].ValList;
-  ;
-    break;}
-}
-   /* the action file gets copied in in place of this dollarsign */
-#line 543 "/usr/share/bison.simple"
+    (yyval.Value).val = (yyvsp[-3].String);
+    (yyval.Value).type = getGEPIndexedType((yyvsp[-2].Type),(yyvsp[0].ValList)); 
+    (yyvsp[-1].Value).destroy(); delete (yyvsp[0].ValList);
+  ;}
+    break;
+
+
+      default: break;
+    }
+
+/* Line 1126 of yacc.c.  */
+#line 4436 "UpgradeParser.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 1589 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
+
+
+#line 1928 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
 
 
 int yyerror(const char *ErrorMsg) {
   std::string where 
     = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename)
                   + ":" + llvm::utostr((unsigned) Upgradelineno) + ": ";
-  std::string errMsg = std::string(ErrorMsg) + "\n" + where + " while reading ";
+  std::string errMsg = where + "error: " + std::string(ErrorMsg) + 
+                       " while reading ";
   if (yychar == YYEMPTY || yychar == 0)
     errMsg += "end-of-file.";
   else
@@ -3520,3 +4717,17 @@
   *O << "llvm-upgrade parse failed.\n";
   exit(1);
 }
+
+static void warning(const std::string& ErrorMsg) {
+  std::string where 
+    = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename)
+                  + ":" + llvm::utostr((unsigned) Upgradelineno) + ": ";
+  std::string errMsg = where + "warning: " + std::string(ErrorMsg) + 
+                       " while reading ";
+  if (yychar == YYEMPTY || yychar == 0)
+    errMsg += "end-of-file.";
+  else
+    errMsg += "token: '" + std::string(Upgradetext, Upgradeleng) + "'";
+  std::cerr << "llvm-upgrade: " << errMsg << '\n';
+}
+
