diff --git a/tools/llvm-upgrade/UpgradeLexer.cpp b/tools/llvm-upgrade/UpgradeLexer.cpp
index 09feb74..96d1b8b 100644
--- a/tools/llvm-upgrade/UpgradeLexer.cpp
+++ b/tools/llvm-upgrade/UpgradeLexer.cpp
@@ -17,7 +17,7 @@
 #define yylineno Upgradelineno
 
 #line 20 "UpgradeLexer.cpp"
-/* A lexical scanner generated by flex */
+/* A lexical scanner generated by flex*/
 
 /* Scanner skeleton version:
  * $Header$
@@ -28,6 +28,7 @@
 #define YY_FLEX_MINOR_VERSION 5
 
 #include <stdio.h>
+#include <unistd.h>
 
 
 /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
@@ -41,7 +42,6 @@
 #ifdef __cplusplus
 
 #include <stdlib.h>
-#include <unistd.h>
 
 /* Use prototypes in function declarations. */
 #define YY_USE_PROTOS
@@ -153,6 +153,15 @@
 
 #define unput(c) yyunput( c, yytext_ptr )
 
+/* Some routines like yy_flex_realloc() are emitted as static but are
+   not called by all lexers. This generates warnings in some compilers,
+   notably GCC. Arrange to suppress these. */
+#ifdef __GNUC__
+#define YY_MAY_BE_UNUSED __attribute__((unused))
+#else
+#define YY_MAY_BE_UNUSED
+#endif
+
 /* The following is because we cannot portably get our hands on size_t
  * (without autoconf's help, which isn't available because we want
  * flex-generated scanners to compile on their own).
@@ -259,7 +268,7 @@
 YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
 
 static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
-static inline void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
+static inline void *yy_flex_realloc YY_PROTO(( void *, yy_size_t )) YY_MAY_BE_UNUSED;
 static void yy_flex_free YY_PROTO(( void * ));
 
 #define yy_new_buffer yy_create_buffer
@@ -914,7 +923,7 @@
 #define YY_MORE_ADJ 0
 #define YY_RESTORE_YY_MORE_OFFSET
 char *yytext;
-#line 1 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 1 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 #define INITIAL 0
 /*===-- UpgradeLexer.l - Scanner for 1.9 assembly files --------*- C++ -*--===//
 //
@@ -929,9 +938,9 @@
 //
 //===----------------------------------------------------------------------===*/
 #define YY_NEVER_INTERACTIVE 1
-#line 28 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 28 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 
-#include "ParserInternals.h"
+#include "UpgradeInternals.h"
 #include "UpgradeParser.h"
 #include <cctype>
 #include <cstdlib>
@@ -953,7 +962,7 @@
   return sym
 
 #define RET_TY(sym,OldTY,NewTY,sign) \
-  Upgradelval.Type = new TypeInfo(NewTY, OldTY); \
+  Upgradelval.Type = TypeInfo::get(NewTY, OldTY); \
   return sym
 
 #define YY_NEVER_INTERACTIVE 1
@@ -973,7 +982,7 @@
 /* HexIntConstant - Hexadecimal constant generated by the CFE to avoid forcing
  * it to deal with 64 bit numbers.
  */
-#line 977 "UpgradeLexer.cpp"
+#line 986 "UpgradeLexer.cpp"
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -1121,13 +1130,13 @@
 YY_DECL
 	{
 	register yy_state_type yy_current_state;
-	register char *yy_cp, *yy_bp;
+	register char *yy_cp = NULL, *yy_bp = NULL;
 	register int yy_act;
 
-#line 97 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 97 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 
 
-#line 1131 "UpgradeLexer.cpp"
+#line 1140 "UpgradeLexer.cpp"
 
 	if ( yy_init )
 		{
@@ -1187,7 +1196,7 @@
 yy_find_action:
 		yy_current_state = *--yy_state_ptr;
 		yy_lp = yy_accept[yy_current_state];
-find_rule: /* we branch to this label when backing up */
+
 		for ( ; ; ) /* until we find what rule we matched */
 			{
 			if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] )
@@ -1220,776 +1229,776 @@
 	{ /* beginning of action switch */
 case 1:
 YY_RULE_SETUP
-#line 99 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 99 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { /* Ignore comments for now */ }
 	YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 101 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 101 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( BEGINTOK); }
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 102 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 102 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( ENDTOK); }
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 103 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 103 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( TRUETOK);  }
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 104 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 104 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( FALSETOK); }
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 105 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 105 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( DECLARE); }
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 106 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 106 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( GLOBAL); }
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 107 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 107 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( CONSTANT); }
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 108 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 108 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( INTERNAL); }
 	YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 109 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 109 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( LINKONCE); }
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 110 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 110 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( WEAK); }
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 111 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 111 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( APPENDING); }
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 112 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 112 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( DLLIMPORT); }
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 113 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 113 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( DLLEXPORT); }
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 114 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 114 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( EXTERN_WEAK); }
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 115 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 115 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( EXTERNAL); }
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 116 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 116 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( UNINITIALIZED); }  // alias for external
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 117 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 117 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( IMPLEMENTATION); }
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 118 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 118 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( ZEROINITIALIZER); }
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 119 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 119 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( DOTDOTDOT); }
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 120 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 120 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( UNDEF); }
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 121 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 121 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( NULL_TOK); }
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 122 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 122 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( TO); }
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 123 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 123 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( TAIL); }
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 124 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 124 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( TARGET); }
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 125 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 125 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( TRIPLE); }
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 126 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 126 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( DEPLIBS); }
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 127 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 127 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( ENDIAN); }
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 128 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 128 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( POINTERSIZE); }
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 129 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 129 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( DATALAYOUT); }
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 130 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 130 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( LITTLE); }
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 131 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 131 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( BIG); }
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 132 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 132 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( VOLATILE); }
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 133 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 133 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( ALIGN);  }
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 134 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 134 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( SECTION); }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 135 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 135 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( MODULE); }
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 136 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 136 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( ASM_TOK); }
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 137 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 137 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( SIDEEFFECT); }
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 139 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 139 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( CC_TOK); }
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 140 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 140 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( CCC_TOK); }
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 141 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 141 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( CSRETCC_TOK); }
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 142 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 142 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( FASTCC_TOK); }
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 143 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 143 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( COLDCC_TOK); }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 144 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 144 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( X86_STDCALLCC_TOK); }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 145 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 145 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( X86_FASTCALLCC_TOK); }
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 147 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 147 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TY(VOID,VoidTy,"void",false); }
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 148 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 148 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TY(BOOL,BoolTy,"bool",false); }
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 149 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 149 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TY(SBYTE,SByteTy,"i8",true); }
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 150 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 150 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TY(UBYTE,UByteTy,"i8",false); }
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 151 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 151 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TY(SHORT,ShortTy,"i16",true); }
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 152 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 152 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TY(USHORT,UShortTy,"i16",false); }
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 153 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 153 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TY(INT,IntTy,"i32",true);   }
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 154 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 154 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TY(UINT,UIntTy,"i32",false);  }
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 155 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 155 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TY(LONG,LongTy,"i64",true);  }
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 156 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 156 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TY(ULONG,ULongTy,"i64",false); }
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 157 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 157 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TY(UBYTE,UByteTy,"i8",false); }
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 158 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 158 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TY(USHORT,UShortTy,"i16",false); }
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 159 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 159 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TY(UINT,UIntTy,"i32",false); }
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 160 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 160 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TY(ULONG,ULongTy,"i64",false); }
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 161 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 161 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TY(FLOAT,FloatTy,"float",false); }
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 162 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 162 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TY(DOUBLE,DoubleTy,"double",false); }
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 163 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 163 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TY(LABEL,LabelTy,"label",false); }
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 164 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 164 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK(OPAQUE); }
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 165 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 165 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK(TYPE);   }
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 167 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 167 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( ADD); }
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 168 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 168 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( SUB); }
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 169 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 169 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( MUL); }
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 170 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 170 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( DIV); }
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 171 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 171 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( UDIV); }
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 172 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 172 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( SDIV); }
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 173 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 173 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( FDIV); }
 	YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 174 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 174 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( REM);  }
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 175 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 175 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( UREM); }
 	YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 176 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 176 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( SREM); }
 	YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 177 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 177 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( FREM); }
 	YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 178 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 178 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( AND); }
 	YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 179 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 179 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( OR); }
 	YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 180 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 180 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( XOR); }
 	YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 181 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 181 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( SETNE); }
 	YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 182 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 182 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( SETEQ); }
 	YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 183 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 183 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( SETLT); }
 	YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 184 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 184 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( SETGT); }
 	YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 185 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 185 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( SETLE); }
 	YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 186 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 186 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( SETGE); }
 	YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 187 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 187 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK(ICMP); }
 	YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 188 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 188 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK(FCMP); }
 	YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 189 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 189 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK(EQ); }
 	YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 190 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 190 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK(NE); }
 	YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 191 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 191 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK(SLT); }
 	YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 192 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 192 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK(SGT); }
 	YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 193 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 193 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK(SLE); }
 	YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 194 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 194 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK(SGE); }
 	YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 195 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 195 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK(OEQ); }
 	YY_BREAK
 case 94:
 YY_RULE_SETUP
-#line 196 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 196 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK(ONE); }
 	YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 197 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 197 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK(OLT); }
 	YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 198 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 198 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK(OGT); }
 	YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 199 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 199 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK(OLE); }
 	YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 200 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 200 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK(OGE); }
 	YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 201 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 201 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK(ORD); }
 	YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 202 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 202 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK(UNO); }
 	YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 203 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 203 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK(UEQ); }
 	YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 204 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 204 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK(UNE); }
 	YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 205 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 205 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK(ULT); }
 	YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 206 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 206 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK(UGT); }
 	YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 207 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 207 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK(ULE); }
 	YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 208 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 208 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK(UGE); }
 	YY_BREAK
 case 107:
 YY_RULE_SETUP
-#line 210 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 210 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( PHI_TOK); }
 	YY_BREAK
 case 108:
 YY_RULE_SETUP
-#line 211 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 211 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( CALL); }
 	YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 212 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 212 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( CAST); }
 	YY_BREAK
 case 110:
 YY_RULE_SETUP
-#line 213 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 213 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( TRUNC); }
 	YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 214 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 214 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( ZEXT); }
 	YY_BREAK
 case 112:
 YY_RULE_SETUP
-#line 215 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 215 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( SEXT); }
 	YY_BREAK
 case 113:
 YY_RULE_SETUP
-#line 216 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 216 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( FPTRUNC); }
 	YY_BREAK
 case 114:
 YY_RULE_SETUP
-#line 217 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 217 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( FPEXT); }
 	YY_BREAK
 case 115:
 YY_RULE_SETUP
-#line 218 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 218 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( FPTOUI); }
 	YY_BREAK
 case 116:
 YY_RULE_SETUP
-#line 219 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 219 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( FPTOSI); }
 	YY_BREAK
 case 117:
 YY_RULE_SETUP
-#line 220 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 220 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( UITOFP); }
 	YY_BREAK
 case 118:
 YY_RULE_SETUP
-#line 221 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 221 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( SITOFP); }
 	YY_BREAK
 case 119:
 YY_RULE_SETUP
-#line 222 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 222 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( PTRTOINT); }
 	YY_BREAK
 case 120:
 YY_RULE_SETUP
-#line 223 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 223 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( INTTOPTR); }
 	YY_BREAK
 case 121:
 YY_RULE_SETUP
-#line 224 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 224 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( BITCAST); }
 	YY_BREAK
 case 122:
 YY_RULE_SETUP
-#line 225 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 225 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( SELECT); }
 	YY_BREAK
 case 123:
 YY_RULE_SETUP
-#line 226 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 226 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( SHL); }
 	YY_BREAK
 case 124:
 YY_RULE_SETUP
-#line 227 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 227 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( SHR); }
 	YY_BREAK
 case 125:
 YY_RULE_SETUP
-#line 228 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 228 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( ASHR); }
 	YY_BREAK
 case 126:
 YY_RULE_SETUP
-#line 229 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 229 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( LSHR); }
 	YY_BREAK
 case 127:
 YY_RULE_SETUP
-#line 230 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 230 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( VAARG); }
 	YY_BREAK
 case 128:
 YY_RULE_SETUP
-#line 231 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 231 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( RET); }
 	YY_BREAK
 case 129:
 YY_RULE_SETUP
-#line 232 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 232 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( BR); }
 	YY_BREAK
 case 130:
 YY_RULE_SETUP
-#line 233 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 233 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( SWITCH); }
 	YY_BREAK
 case 131:
 YY_RULE_SETUP
-#line 234 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 234 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( INVOKE); }
 	YY_BREAK
 case 132:
 YY_RULE_SETUP
-#line 235 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 235 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( UNWIND); }
 	YY_BREAK
 case 133:
 YY_RULE_SETUP
-#line 236 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 236 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( EXCEPT); } // alias for unwind
 	YY_BREAK
 case 134:
 YY_RULE_SETUP
-#line 237 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 237 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( UNREACHABLE); }
 	YY_BREAK
 case 135:
 YY_RULE_SETUP
-#line 239 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 239 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( MALLOC); }
 	YY_BREAK
 case 136:
 YY_RULE_SETUP
-#line 240 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 240 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( ALLOCA); }
 	YY_BREAK
 case 137:
 YY_RULE_SETUP
-#line 241 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 241 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( FREE); }
 	YY_BREAK
 case 138:
 YY_RULE_SETUP
-#line 242 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 242 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( LOAD); }
 	YY_BREAK
 case 139:
 YY_RULE_SETUP
-#line 243 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 243 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( STORE); }
 	YY_BREAK
 case 140:
 YY_RULE_SETUP
-#line 244 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 244 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( GETELEMENTPTR); }
 	YY_BREAK
 case 141:
 YY_RULE_SETUP
-#line 246 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 246 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( EXTRACTELEMENT); }
 	YY_BREAK
 case 142:
 YY_RULE_SETUP
-#line 247 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 247 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( INSERTELEMENT); }
 	YY_BREAK
 case 143:
 YY_RULE_SETUP
-#line 248 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 248 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( SHUFFLEVECTOR); }
 	YY_BREAK
 case 144:
 YY_RULE_SETUP
-#line 251 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 251 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( VAR_ID); }
 	YY_BREAK
 case 145:
 YY_RULE_SETUP
-#line 252 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 252 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( LABELSTR); }
 	YY_BREAK
 case 146:
 YY_RULE_SETUP
-#line 253 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 253 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( LABELSTR); }
 	YY_BREAK
 case 147:
 YY_RULE_SETUP
-#line 254 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 254 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( STRINGCONSTANT ); }
 	YY_BREAK
 case 148:
 YY_RULE_SETUP
-#line 255 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 255 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( EUINT64VAL ); }
 	YY_BREAK
 case 149:
 YY_RULE_SETUP
-#line 256 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 256 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( ESINT64VAL ); }
 	YY_BREAK
 case 150:
 YY_RULE_SETUP
-#line 257 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 257 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( yytext[0] == 's' ? ESINT64VAL : EUINT64VAL ); }
 	YY_BREAK
 case 151:
 YY_RULE_SETUP
-#line 258 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 258 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( UINTVAL); }
 	YY_BREAK
 case 152:
 YY_RULE_SETUP
-#line 259 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 259 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( SINTVAL); }
 	YY_BREAK
 case 153:
 YY_RULE_SETUP
-#line 260 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 260 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( FPVAL); }
 	YY_BREAK
 case 154:
 YY_RULE_SETUP
-#line 261 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 261 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { RET_TOK( FPVAL); }
 	YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 262 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 262 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 {
                   /* Make sure to free the internal buffers for flex when we are
                    * done reading our input!
@@ -2000,20 +2009,20 @@
 	YY_BREAK
 case 155:
 YY_RULE_SETUP
-#line 270 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 270 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { /* Ignore whitespace */ }
 	YY_BREAK
 case 156:
 YY_RULE_SETUP
-#line 271 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 271 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 { return yytext[0]; }
 	YY_BREAK
 case 157:
 YY_RULE_SETUP
-#line 273 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 273 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 YY_FATAL_ERROR( "flex scanner jammed" );
 	YY_BREAK
-#line 2017 "UpgradeLexer.cpp"
+#line 2026 "UpgradeLexer.cpp"
 
 	case YY_END_OF_BUFFER:
 		{
@@ -2389,6 +2398,7 @@
 #endif	/* ifndef YY_NO_UNPUT */
 
 
+#ifndef YY_NO_INPUT
 #ifdef __cplusplus
 static int yyinput()
 #else
@@ -2462,7 +2472,7 @@
 
 	return c;
 	}
-
+#endif /* YY_NO_INPUT */
 
 #ifdef YY_USE_PROTOS
 void yyrestart( FILE *input_file )
@@ -2573,11 +2583,6 @@
 	}
 
 
-#ifndef YY_ALWAYS_INTERACTIVE
-#ifndef YY_NEVER_INTERACTIVE
-extern int isatty YY_PROTO(( int ));
-#endif
-#endif
 
 #ifdef YY_USE_PROTOS
 void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
@@ -2895,5 +2900,5 @@
 	return 0;
 	}
 #endif
-#line 273 "/Volumes/ProjectsDisk/cvs/llvm/tools/llvm-upgrade/UpgradeLexer.l"
+#line 273 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 
diff --git a/tools/llvm-upgrade/UpgradeLexer.cpp.cvs b/tools/llvm-upgrade/UpgradeLexer.cpp.cvs
index dffe100..96d1b8b 100644
--- a/tools/llvm-upgrade/UpgradeLexer.cpp.cvs
+++ b/tools/llvm-upgrade/UpgradeLexer.cpp.cvs
@@ -940,7 +940,7 @@
 #define YY_NEVER_INTERACTIVE 1
 #line 28 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l"
 
-#include "ParserInternals.h"
+#include "UpgradeInternals.h"
 #include "UpgradeParser.h"
 #include <cctype>
 #include <cstdlib>
@@ -962,7 +962,7 @@
   return sym
 
 #define RET_TY(sym,OldTY,NewTY,sign) \
-  Upgradelval.Type = new TypeInfo(NewTY, OldTY); \
+  Upgradelval.Type = TypeInfo::get(NewTY, OldTY); \
   return sym
 
 #define YY_NEVER_INTERACTIVE 1
@@ -1196,7 +1196,7 @@
 yy_find_action:
 		yy_current_state = *--yy_state_ptr;
 		yy_lp = yy_accept[yy_current_state];
-find_rule: /* we branch to this label when backing up */
+
 		for ( ; ; ) /* until we find what rule we matched */
 			{
 			if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] )
diff --git a/tools/llvm-upgrade/UpgradeLexer.l.cvs b/tools/llvm-upgrade/UpgradeLexer.l.cvs
index d9e5d0e..5b57560 100644
--- a/tools/llvm-upgrade/UpgradeLexer.l.cvs
+++ b/tools/llvm-upgrade/UpgradeLexer.l.cvs
@@ -26,7 +26,7 @@
 
 %{
 
-#include "ParserInternals.h"
+#include "UpgradeInternals.h"
 #include "UpgradeParser.h"
 #include <cctype>
 #include <cstdlib>
@@ -48,7 +48,7 @@
   return sym
 
 #define RET_TY(sym,OldTY,NewTY,sign) \
-  Upgradelval.Type = new TypeInfo(NewTY, OldTY); \
+  Upgradelval.Type = TypeInfo::get(NewTY, OldTY); \
   return sym
 
 #define YY_NEVER_INTERACTIVE 1
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';
+}
+
diff --git a/tools/llvm-upgrade/UpgradeParser.cpp.cvs b/tools/llvm-upgrade/UpgradeParser.cpp.cvs
index 0e4e5c8..939c85f 100644
--- a/tools/llvm-upgrade/UpgradeParser.cpp.cvs
+++ b/tools/llvm-upgrade/UpgradeParser.cpp.cvs
@@ -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';
+}
+
diff --git a/tools/llvm-upgrade/UpgradeParser.h b/tools/llvm-upgrade/UpgradeParser.h
index ee196e3..56c462c 100644
--- a/tools/llvm-upgrade/UpgradeParser.h
+++ b/tools/llvm-upgrade/UpgradeParser.h
@@ -1,159 +1,355 @@
-typedef union {
+/* A Bison parser, made by GNU Bison 2.1.  */
+
+/* Skeleton parser for Yacc-like parsing with Bison,
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, when this file is copied by Bison into a
+   Bison output file, you may use that output file without restriction.
+   This special exception was added by the Free Software Foundation
+   in version 1.24 of Bison.  */
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     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
+
+
+
+
+#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;
-#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 1447 of yacc.c.  */
+#line 347 "UpgradeParser.tab.h"
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
 
 extern YYSTYPE Upgradelval;
+
+
+
diff --git a/tools/llvm-upgrade/UpgradeParser.h.cvs b/tools/llvm-upgrade/UpgradeParser.h.cvs
index ee196e3..56c462c 100644
--- a/tools/llvm-upgrade/UpgradeParser.h.cvs
+++ b/tools/llvm-upgrade/UpgradeParser.h.cvs
@@ -1,159 +1,355 @@
-typedef union {
+/* A Bison parser, made by GNU Bison 2.1.  */
+
+/* Skeleton parser for Yacc-like parsing with Bison,
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, when this file is copied by Bison into a
+   Bison output file, you may use that output file without restriction.
+   This special exception was added by the Free Software Foundation
+   in version 1.24 of Bison.  */
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     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
+
+
+
+
+#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;
-#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 1447 of yacc.c.  */
+#line 347 "UpgradeParser.tab.h"
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
 
 extern YYSTYPE Upgradelval;
+
+
+
diff --git a/tools/llvm-upgrade/UpgradeParser.y.cvs b/tools/llvm-upgrade/UpgradeParser.y.cvs
index 2b3315d..ca8ee4f 100644
--- a/tools/llvm-upgrade/UpgradeParser.y.cvs
+++ b/tools/llvm-upgrade/UpgradeParser.y.cvs
@@ -12,7 +12,7 @@
 //===----------------------------------------------------------------------===//
 
 %{
-#include "ParserInternals.h"
+#include "UpgradeInternals.h"
 #include <algorithm>
 #include <map>
 #include <utility>
@@ -45,11 +45,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()) {
@@ -77,32 +81,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(
@@ -183,8 +416,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;
@@ -199,8 +432,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
@@ -216,8 +448,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() + ")";
@@ -226,9 +458,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")
@@ -283,35 +515,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");
@@ -344,25 +577,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();
     }
   }
 
@@ -381,7 +636,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++;
@@ -394,13 +649,99 @@
   return Result;
 }
 
+static unsigned UniqueNameCounter = 0;
+
+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;
+}
 %}
 
 // %file-prefix="UpgradeParser"
 
 %union {
   std::string*    String;
-  TypeInfo*       Type;
+  const TypeInfo* Type;
   ValueInfo       Value;
   ConstInfo       Const;
   ValueList*      ValList;
@@ -570,17 +911,17 @@
 PrimType : LONG | ULONG | FLOAT | DOUBLE | LABEL;
 UpRTypes 
   : OPAQUE { 
-    $$ = new TypeInfo($1, OpaqueTy);
+    $$ = TypeInfo::get(*$1, OpaqueTy);
   } 
   | SymbolicValueRef { 
-    $$ = new TypeInfo($1, UnresolvedTy);
+    $$ = TypeInfo::get(*$1, UnresolvedTy);
   }
   | PrimType { 
     $$ = $1; 
   }
   | '\\' EUINT64VAL {                   // Type UpReference
     $2->insert(0, "\\");
-    $$ = new TypeInfo($2, UpRefTy);
+    $$ = TypeInfo::get(*$2, UpRefTy);
   }
   | UpRTypesV '(' ArgTypeListI ')' {           // Function derived type?
     std::string newTy( $1->getNewTy() + "(");
@@ -593,19 +934,19 @@
         newTy += (*$3)[i]->getNewTy();
     }
     newTy += ")";
-    $$ = new TypeInfo(new std::string(newTy), $1, $3);
+    $$ = TypeInfo::get(newTy, $1, $3);
   }
   | '[' EUINT64VAL 'x' UpRTypes ']' {          // Sized array type?
+    uint64_t elems = atoi($2->c_str());
     $2->insert(0,"[ ");
     *$2 += " x " + $4->getNewTy() + " ]";
-    uint64_t elems = atoi($2->c_str());
-    $$ = new TypeInfo($2, ArrayTy, $4, elems);
+    $$ = TypeInfo::get(*$2, ArrayTy, $4, elems);
   }
   | '<' EUINT64VAL 'x' UpRTypes '>' {          // Packed array type?
+    uint64_t elems = atoi($2->c_str());
     $2->insert(0,"< ");
     *$2 += " x " + $4->getNewTy() + " >";
-    uint64_t elems = atoi($2->c_str());
-    $$ = new TypeInfo($2, PackedTy, $4, elems);
+    $$ = TypeInfo::get(*$2, PackedTy, $4, elems);
   }
   | '{' TypeListI '}' {                        // Structure type?
     std::string newTy("{");
@@ -615,10 +956,10 @@
       newTy += (*$2)[i]->getNewTy();
     }
     newTy += "}";
-    $$ = new TypeInfo(new std::string(newTy), StructTy, $2);
+    $$ = TypeInfo::get(newTy, StructTy, $2);
   }
   | '{' '}' {                                  // Empty structure type?
-    $$ = new TypeInfo(new std::string("{}"), StructTy, new TypeList());
+    $$ = TypeInfo::get("{}", StructTy, new TypeList());
   }
   | '<' '{' TypeListI '}' '>' {                // Packed Structure type?
     std::string newTy("<{");
@@ -628,10 +969,10 @@
       newTy += (*$3)[i]->getNewTy();
     }
     newTy += "}>";
-    $$ = new TypeInfo(new std::string(newTy), PackedStructTy, $3);
+    $$ = TypeInfo::get(newTy, PackedStructTy, $3);
   }
   | '<' '{' '}' '>' {                          // Empty packed structure type?
-    $$ = new TypeInfo(new std::string("<{}>"), PackedStructTy, new TypeList());
+    $$ = TypeInfo::get("<{}>", PackedStructTy, new TypeList());
   }
   | UpRTypes '*' {                             // Pointer type?
     $$ = $1->getPointerType();
@@ -655,12 +996,12 @@
   : TypeListI 
   | TypeListI ',' DOTDOTDOT {
     $$ = $1;
-    $$->push_back(new TypeInfo("void",VoidTy));
+    $$->push_back(TypeInfo::get("void",VoidTy));
     delete $3;
   }
   | DOTDOTDOT {
     $$ = new TypeList();
-    $$->push_back(new TypeInfo("void",VoidTy));
+    $$->push_back(TypeInfo::get("void",VoidTy));
     delete $1;
   }
   | /*empty*/ {
@@ -720,7 +1061,7 @@
     delete $2;
   }
   | Types SymbolicValueRef {
-    std::string Name = getUniqueName($2,$1);
+    std::string Name = getUniqueName($2, $1->resolve(), true);
     $$.type = $1;
     $$.cnst = new std::string($1->getNewTy());
     *$$.cnst += " " + Name;
@@ -772,10 +1113,11 @@
 
 ConstExpr: CastOps '(' ConstVal TO Types ')' {
     std::string source = *$3.cnst;
-    TypeInfo* DstTy = ResolveType($5);
+    const TypeInfo* SrcTy = $3.type->resolve();
+    const TypeInfo* DstTy = $5->resolve(); 
     if (*$1 == "cast") {
       // Call getCastUpgrade to upgrade the old cast
-      $$ = new std::string(getCastUpgrade(source, $3.type, DstTy, true));
+      $$ = new std::string(getCastUpgrade(source, SrcTy, DstTy, true));
     } else {
       // Nothing to upgrade, just create the cast constant expr
       $$ = new std::string(*$1);
@@ -902,9 +1244,9 @@
 
 // ConstPool - Constants with optional names assigned to them.
 ConstPool : ConstPool OptAssign TYPE TypesV {
-    EnumeratedTypes.push_back(*$4);
+    EnumeratedTypes.push_back($4);
     if (!$2->empty()) {
-      NamedTypes[*$2] = *$4;
+      NamedTypes[*$2] = $4;
       *O << *$2 << " = ";
     }
     *O << "type " << $4->getNewTy() << '\n';
@@ -923,9 +1265,9 @@
   }
   | ConstPool OptAssign OptLinkage GlobalType ConstVal  GlobalVarAttributes {
     if (!$2->empty()) {
-      std::string Name = getUniqueName($2,$5.type);
+      std::string Name = getGlobalName($2,*$3, $5.type->getPointerType(),
+                                       *$4 == "constant");
       *O << Name << " = ";
-      Globals[Name] = *$5.type;
     }
     *O << *$3 << ' ' << *$4 << ' ' << *$5.cnst << ' ' << *$6 << '\n';
     delete $2; delete $3; delete $4; delete $6; 
@@ -933,19 +1275,19 @@
   }
   | ConstPool OptAssign External GlobalType Types  GlobalVarAttributes {
     if (!$2->empty()) {
-      std::string Name = getUniqueName($2,$5);
+      std::string Name = getGlobalName($2,*$3,$5->getPointerType(),
+                                       *$4 == "constant");
       *O << Name << " = ";
-      Globals[Name] = *$5;
     }
     *O <<  *$3 << ' ' << *$4 << ' ' << $5->getNewTy() << ' ' << *$6 << '\n';
     delete $2; delete $3; delete $4; delete $6;
     $$ = 0;
   }
-  | ConstPool OptAssign DLLIMPORT GlobalType Types  GlobalVarAttributes {
+  | ConstPool OptAssign DLLIMPORT GlobalType Types GlobalVarAttributes {
     if (!$2->empty()) {
-      std::string Name = getUniqueName($2,$5);
+      std::string Name = getGlobalName($2,*$3,$5->getPointerType(),
+                                       *$4 == "constant");
       *O << Name << " = ";
-      Globals[Name] = *$5;
     }
     *O << *$3 << ' ' << *$4 << ' ' << $5->getNewTy() << ' ' << *$6 << '\n';
     delete $2; delete $3; delete $4; delete $6;
@@ -953,9 +1295,9 @@
   }
   | ConstPool OptAssign EXTERN_WEAK GlobalType Types  GlobalVarAttributes {
     if (!$2->empty()) {
-      std::string Name = getUniqueName($2,$5);
+      std::string Name = getGlobalName($2,*$3,$5->getPointerType(),
+                                       *$4 == "constant");
       *O << Name << " = ";
-      Globals[Name] = *$5;
     }
     *O << *$3 << ' ' << *$4 << ' ' << $5->getNewTy() << ' ' << *$6 << '\n';
     delete $2; delete $3; delete $4; delete $6;
@@ -1032,7 +1374,7 @@
 ArgVal : Types OptName {
   $$ = new std::string($1->getNewTy());
   if (!$2->empty()) {
-    std::string Name = getUniqueName($2, $1);
+    std::string Name = getUniqueName($2, $1->resolve());
     *$$ += " " + Name;
   }
   delete $2;
@@ -1152,12 +1494,12 @@
   : SymbolicValueRef {
     $$.val = $1;
     $$.constant = false;
-    $$.type = new TypeInfo();
+    $$.type = 0;
   }
   | ConstValueRef {
     $$.val = $1;
     $$.constant = true;
-    $$.type = new TypeInfo();
+    $$.type = 0;
   }
   ;
 
@@ -1165,11 +1507,10 @@
 // type immediately preceeds the value reference, and allows complex constant
 // pool references (for things like: 'ret [2 x int] [ int 12, int 42]')
 ResolvedVal : Types ValueRef {
-    ResolveType($1);
+    $1 = $1->resolve();
     std::string Name = getUniqueName($2.val, $1);
     $$ = $2;
     delete $$.val;
-    delete $$.type;
     $$.val = new std::string($1->getNewTy() + " " + Name);
     $$.type = $1;
   };
@@ -1212,12 +1553,12 @@
   }
   | RET VOID {                                       // Return with no result...
     *O << "    " << *$1 << ' ' << $2->getNewTy() << '\n';
-    delete $1; delete $2;
+    delete $1;
     $$ = 0;
   }
   | BR LABEL ValueRef {                         // Unconditional Branch...
     *O << "    " << *$1 << ' ' << $2->getNewTy() << ' ' << *$3.val << '\n';
-    delete $1; delete $2; $3.destroy();
+    delete $1; $3.destroy();
     $$ = 0;
   }                                                  // Conditional Branch...
   | BR BOOL ValueRef ',' LABEL ValueRef ',' LABEL ValueRef {  
@@ -1225,15 +1566,14 @@
     *O << "    " << *$1 << ' ' << $2->getNewTy() << ' ' << Name << ", " 
        << $5->getNewTy() << ' ' << *$6.val << ", " << $8->getNewTy() << ' ' 
        << *$9.val << '\n';
-    delete $1; delete $2; $3.destroy(); delete $5; $6.destroy(); 
-    delete $8; $9.destroy();
+    delete $1; $3.destroy(); $6.destroy(); $9.destroy();
     $$ = 0;
   }
   | SWITCH IntType ValueRef ',' LABEL ValueRef '[' JumpTable ']' {
     std::string Name = getUniqueName($3.val, $2);
     *O << "    " << *$1 << ' ' << $2->getNewTy() << ' ' << Name << ", " 
        << $5->getNewTy() << ' ' << *$6.val << " [" << *$8 << " ]\n";
-    delete $1; delete $2; $3.destroy(); delete $5; $6.destroy(); 
+    delete $1; $3.destroy(); $6.destroy(); 
     delete $8;
     $$ = 0;
   }
@@ -1241,12 +1581,12 @@
     std::string Name = getUniqueName($3.val, $2);
     *O << "    " << *$1 << ' ' << $2->getNewTy() << ' ' << Name << ", " 
        << $5->getNewTy() << ' ' << *$6.val << "[]\n";
-    delete $1; delete $2; $3.destroy(); delete $5; $6.destroy();
+    delete $1; $3.destroy(); $6.destroy();
     $$ = 0;
   }
   | OptAssign INVOKE OptCallingConv TypesV ValueRef '(' ValueRefListE ')'
     TO LABEL ValueRef Unwind LABEL ValueRef {
-    TypeInfo* ResTy = getFunctionReturnType($4);
+    const TypeInfo* ResTy = getFunctionReturnType($4);
     *O << "    ";
     if (!$1->empty()) {
       std::string Name = getUniqueName($1, ResTy);
@@ -1262,9 +1602,8 @@
     }
     *O << ") " << *$9 << ' ' << $10->getNewTy() << ' ' << *$11.val << ' ' 
        << *$12 << ' ' << $13->getNewTy() << ' ' << *$14.val << '\n';
-    delete $1; delete $2; delete $3; delete $4; $5.destroy(); delete $7; 
-    delete $9; delete $10; $11.destroy(); delete $12; delete $13; 
-    $14.destroy(); 
+    delete $1; delete $2; delete $3; $5.destroy(); delete $7; 
+    delete $9; $11.destroy(); delete $12; $14.destroy(); 
     $$ = 0;
   }
   | Unwind {
@@ -1281,26 +1620,26 @@
 JumpTable : JumpTable IntType ConstValueRef ',' LABEL ValueRef {
     *$1 += " " + $2->getNewTy() + " " + *$3 + ", " + $5->getNewTy() + " " + 
            *$6.val;
-    delete $2; delete $3; delete $5; $6.destroy();
+    delete $3; $6.destroy();
     $$ = $1;
   }
   | IntType ConstValueRef ',' LABEL ValueRef {
     $2->insert(0, $1->getNewTy() + " " );
     *$2 += ", " + $4->getNewTy() + " " + *$5.val;
-    delete $1; delete $4; $5.destroy();
+    $5.destroy();
     $$ = $2;
   };
 
 Inst 
   : OptAssign InstVal {
     if (!$1->empty()) {
-      if (deleteUselessCastFlag && *deleteUselessCastName == *$1) {
-        *$1 += " = ";
-        $1->insert(0, "; "); // don't actually delete it, just comment it out
+      // Get a unique name for this value, based on its type.
+      std::string Name = getUniqueName($1, $2.type);
+      *$1 = Name + " = ";
+      if (deleteUselessCastFlag && *deleteUselessCastName == Name) {
+        // don't actually delete it, just comment it out
+        $1->insert(0, "; USELSS BITCAST: "); 
         delete deleteUselessCastName;
-      } else {
-        // Get a unique name for the name of this value, based on its type.
-        *$1 = getUniqueName($1, $2.type) + " = ";
       }
     }
     *$1 += *$2.val;
@@ -1374,7 +1713,7 @@
     *$1 = getCompareOp(*$1, $2);
     *$1 += " " + $2->getNewTy() + " " + Name1 + ", " + Name2;
     $$.val = $1;
-    $$.type = new TypeInfo("bool",BoolTy);
+    $$.type = TypeInfo::get("bool",BoolTy);
     $3.destroy(); $5.destroy();
   }
   | ICMP IPredicates Types ValueRef ',' ValueRef {
@@ -1382,7 +1721,7 @@
     std::string Name2 = getUniqueName($6.val, $3);
     *$1 += " " + *$2 + " " + $3->getNewTy() + " " + Name1 + "," + Name2;
     $$.val = $1;
-    $$.type = new TypeInfo("bool",BoolTy);
+    $$.type = TypeInfo::get("bool",BoolTy);
     delete $2; $4.destroy(); $6.destroy();
   }
   | FCMP FPredicates Types ValueRef ',' ValueRef {
@@ -1390,7 +1729,7 @@
     std::string Name2 = getUniqueName($6.val, $3);
     *$1 += " " + *$2 + " " + $3->getNewTy() + " " + Name1 + "," + Name2;
     $$.val = $1;
-    $$.type = new TypeInfo("bool",BoolTy);
+    $$.type = TypeInfo::get("bool",BoolTy);
     delete $2; $4.destroy(); $6.destroy();
   }
   | NOT ResolvedVal {
@@ -1409,21 +1748,21 @@
   }
   | CastOps ResolvedVal TO Types {
     std::string source = *$2.val;
-    TypeInfo* SrcTy = $2.type;
-    TypeInfo* DstTy = ResolveType($4);
+    const TypeInfo* SrcTy = $2.type->resolve();
+    const TypeInfo* DstTy = $4->resolve();
     $$.val = new std::string();
+    $$.type = DstTy;
     if (*$1 == "cast") {
-      *$$.val +=  getCastUpgrade(source, SrcTy, DstTy, false);
+      *$$.val += getCastUpgrade(source, SrcTy, DstTy, false);
     } else {
       *$$.val += *$1 + " " + source + " to " + DstTy->getNewTy();
     }
-    $$.type = $4;
     // 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 (*$1 == "cast" || *$1 == "bitcast")
-      if ($2.type->isInteger() && DstTy->isInteger() &&
-          $2.type->getBitWidth() == DstTy->getBitWidth()) {
+      if (SrcTy->isInteger() && DstTy->isInteger() &&
+          SrcTy->getBitWidth() == DstTy->getBitWidth()) {
         deleteUselessCastFlag = true; // Flag the "Inst" rule
         deleteUselessCastName = new std::string(*$2.val); // save the name
         size_t pos = deleteUselessCastName->find_first_of("%\"",0);
@@ -1450,7 +1789,7 @@
   | EXTRACTELEMENT ResolvedVal ',' ResolvedVal {
     *$1 += " " + *$2.val + ", " + *$4.val;
     $$.val = $1;
-    ResolveType($2.type);
+    $2.type = $2.type->resolve();;
     $$.type = $2.type->getElementType();
     delete $2.val; $4.destroy();
   }
@@ -1488,7 +1827,7 @@
     *$1 += ")";
     $$.val = $1;
     $$.type = getFunctionReturnType($3);
-    delete $2; delete $3; $4.destroy(); delete $6;
+    delete $2; $4.destroy(); delete $6;
   }
   | MemoryInst ;
 
@@ -1510,7 +1849,7 @@
       *$1 += " " + *$3;
     $$.val = $1;
     $$.type = $2->getPointerType();
-    delete $2; delete $3;
+    delete $3;
   }
   | MALLOC Types ',' UINT ValueRef OptCAlign {
     std::string Name = getUniqueName($5.val, $4);
@@ -1519,7 +1858,7 @@
       *$1 += " " + *$6;
     $$.val = $1;
     $$.type = $2->getPointerType();
-    delete $2; delete $4; $5.destroy(); delete $6;
+    $5.destroy(); delete $6;
   }
   | ALLOCA Types OptCAlign {
     *$1 += " " + $2->getNewTy();
@@ -1527,7 +1866,7 @@
       *$1 += " " + *$3;
     $$.val = $1;
     $$.type = $2->getPointerType();
-    delete $2; delete $3;
+    delete $3;
   }
   | ALLOCA Types ',' UINT ValueRef OptCAlign {
     std::string Name = getUniqueName($5.val, $4);
@@ -1536,12 +1875,12 @@
       *$1 += " " + *$6;
     $$.val = $1;
     $$.type = $2->getPointerType();
-    delete $2; delete $4; $5.destroy(); delete $6;
+    $5.destroy(); delete $6;
   }
   | FREE ResolvedVal {
     *$1 += " " + *$2.val;
     $$.val = $1;
-    $$.type = new TypeInfo("void", VoidTy); 
+    $$.type = TypeInfo::get("void", VoidTy); 
     $2.destroy();
   }
   | OptVolatile LOAD Types ValueRef {
@@ -1550,8 +1889,8 @@
       *$1 += " ";
     *$1 += *$2 + " " + $3->getNewTy() + " " + Name;
     $$.val = $1;
-    $$.type = $3->getElementType()->clone();
-    delete $2; delete $3; $4.destroy();
+    $$.type = $3->getElementType();
+    delete $2; $4.destroy();
   }
   | OptVolatile STORE ResolvedVal ',' Types ValueRef {
     std::string Name = getUniqueName($6.val, $5);
@@ -1559,8 +1898,8 @@
       *$1 += " ";
     *$1 += *$2 + " " + *$3.val + ", " + $5->getNewTy() + " " + Name;
     $$.val = $1;
-    $$.type = new TypeInfo("void", VoidTy);
-    delete $2; $3.destroy(); delete $5; $6.destroy();
+    $$.type = TypeInfo::get("void", VoidTy);
+    delete $2; $3.destroy(); $6.destroy();
   }
   | GETELEMENTPTR Types ValueRef IndexList {
     std::string Name = getUniqueName($3.val, $2);
@@ -1573,7 +1912,7 @@
         *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);
       }
     }
     *$1 += " " + $2->getNewTy() + " " + Name;
@@ -1592,7 +1931,8 @@
   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
@@ -1601,3 +1941,16 @@
   *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';
+}
