diff --git a/lib/AsmParser/Lexer.cpp.cvs b/lib/AsmParser/Lexer.cpp.cvs
index 7a29acc..333c5dd 100644
--- a/lib/AsmParser/Lexer.cpp.cvs
+++ b/lib/AsmParser/Lexer.cpp.cvs
@@ -1,94 +1,51 @@
-#line 2 "Lexer.cpp"
+#define yy_create_buffer llvmAsm_create_buffer
+#define yy_delete_buffer llvmAsm_delete_buffer
+#define yy_scan_buffer llvmAsm_scan_buffer
+#define yy_scan_string llvmAsm_scan_string
+#define yy_scan_bytes llvmAsm_scan_bytes
+#define yy_flex_debug llvmAsm_flex_debug
+#define yy_init_buffer llvmAsm_init_buffer
+#define yy_flush_buffer llvmAsm_flush_buffer
+#define yy_load_buffer_state llvmAsm_load_buffer_state
+#define yy_switch_to_buffer llvmAsm_switch_to_buffer
+#define yyin llvmAsmin
+#define yyleng llvmAsmleng
+#define yylex llvmAsmlex
+#define yyout llvmAsmout
+#define yyrestart llvmAsmrestart
+#define yytext llvmAsmtext
+#define yylineno llvmAsmlineno
 
-#line 4 "Lexer.cpp"
+#line 20 "Lexer.cpp"
+/* A lexical scanner generated by flex*/
 
-#define  YY_INT_ALIGNED short int
-
-/* A lexical scanner generated by flex */
+/* Scanner skeleton version:
+ * $Header$
+ */
 
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 33
-#if YY_FLEX_SUBMINOR_VERSION > 0
-#define FLEX_BETA
-#endif
 
-/* First, we deal with  platform-specific or compiler-specific issues. */
-
-/* begin standard C headers. */
 #include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <stdlib.h>
+#include <unistd.h>
 
-/* end standard C headers. */
 
-/* flex integer type definitions */
-
-#ifndef FLEXINT_H
-#define FLEXINT_H
-
-/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
-
-#if __STDC_VERSION__ >= 199901L
-
-/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
- * if you want the limit (max/min) macros for int types. 
- */
-#ifndef __STDC_LIMIT_MACROS
-#define __STDC_LIMIT_MACROS 1
+/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
+#ifdef c_plusplus
+#ifndef __cplusplus
+#define __cplusplus
+#endif
 #endif
 
-#include <inttypes.h>
-typedef int8_t flex_int8_t;
-typedef uint8_t flex_uint8_t;
-typedef int16_t flex_int16_t;
-typedef uint16_t flex_uint16_t;
-typedef int32_t flex_int32_t;
-typedef uint32_t flex_uint32_t;
-#else
-typedef signed char flex_int8_t;
-typedef short int flex_int16_t;
-typedef int flex_int32_t;
-typedef unsigned char flex_uint8_t; 
-typedef unsigned short int flex_uint16_t;
-typedef unsigned int flex_uint32_t;
-#endif /* ! C99 */
-
-/* Limits of integral types. */
-#ifndef INT8_MIN
-#define INT8_MIN               (-128)
-#endif
-#ifndef INT16_MIN
-#define INT16_MIN              (-32767-1)
-#endif
-#ifndef INT32_MIN
-#define INT32_MIN              (-2147483647-1)
-#endif
-#ifndef INT8_MAX
-#define INT8_MAX               (127)
-#endif
-#ifndef INT16_MAX
-#define INT16_MAX              (32767)
-#endif
-#ifndef INT32_MAX
-#define INT32_MAX              (2147483647)
-#endif
-#ifndef UINT8_MAX
-#define UINT8_MAX              (255U)
-#endif
-#ifndef UINT16_MAX
-#define UINT16_MAX             (65535U)
-#endif
-#ifndef UINT32_MAX
-#define UINT32_MAX             (4294967295U)
-#endif
-
-#endif /* ! FLEXINT_H */
 
 #ifdef __cplusplus
 
+#include <stdlib.h>
+
+/* Use prototypes in function declarations. */
+#define YY_USE_PROTOS
+
 /* The "const" storage-class-modifier is valid. */
 #define YY_USE_CONST
 
@@ -96,17 +53,34 @@
 
 #if __STDC__
 
+#define YY_USE_PROTOS
 #define YY_USE_CONST
 
 #endif	/* __STDC__ */
 #endif	/* ! __cplusplus */
 
+#ifdef __TURBOC__
+ #pragma warn -rch
+ #pragma warn -use
+#include <io.h>
+#include <stdlib.h>
+#define YY_USE_CONST
+#define YY_USE_PROTOS
+#endif
+
 #ifdef YY_USE_CONST
 #define yyconst const
 #else
 #define yyconst
 #endif
 
+
+#ifdef YY_USE_PROTOS
+#define YY_PROTO(proto) proto
+#else
+#define YY_PROTO(proto) ()
+#endif
+
 /* Returned upon end-of-file. */
 #define YY_NULL 0
 
@@ -121,88 +95,80 @@
  * but we do it the disgusting crufty way forced on us by the ()-less
  * definition of BEGIN.
  */
-#define BEGIN (yy_start) = 1 + 2 *
+#define BEGIN yy_start = 1 + 2 *
 
 /* Translate the current start state into a value that can be later handed
  * to BEGIN to return to the state.  The YYSTATE alias is for lex
  * compatibility.
  */
-#define YY_START (((yy_start) - 1) / 2)
+#define YY_START ((yy_start - 1) / 2)
 #define YYSTATE YY_START
 
 /* Action number for EOF rule of a given start state. */
 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
 
 /* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE llvmAsmrestart(llvmAsmin  )
+#define YY_NEW_FILE yyrestart( yyin )
 
 #define YY_END_OF_BUFFER_CHAR 0
 
 /* Size of default input buffer. */
-#ifndef YY_BUF_SIZE
 #define YY_BUF_SIZE (16384*64)
-#endif
 
-/* The state buf must be large enough to hold one state per character in the main buffer.
- */
-#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
-
-#ifndef YY_TYPEDEF_YY_BUFFER_STATE
-#define YY_TYPEDEF_YY_BUFFER_STATE
 typedef struct yy_buffer_state *YY_BUFFER_STATE;
-#endif
 
-extern int llvmAsmleng;
-
-extern FILE *llvmAsmin, *llvmAsmout;
+extern int yyleng;
+extern FILE *yyin, *yyout;
 
 #define EOB_ACT_CONTINUE_SCAN 0
 #define EOB_ACT_END_OF_FILE 1
 #define EOB_ACT_LAST_MATCH 2
 
-    /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
-     *       access to the local variable yy_act. Since yyless() is a macro, it would break
-     *       existing scanners that call yyless() from OUTSIDE llvmAsmlex. 
-     *       One obvious solution it to make yy_act a global. I tried that, and saw
-     *       a 5% performance hit in a non-llvmAsmlineno scanner, because yy_act is
-     *       normally declared as a register variable-- so it is not worth it.
-     */
-    #define  YY_LESS_LINENO(n) \
-            do { \
-                int yyl;\
-                for ( yyl = n; yyl < llvmAsmleng; ++yyl )\
-                    if ( llvmAsmtext[yyl] == '\n' )\
-                        --llvmAsmlineno;\
-            }while(0)
-    
-/* Return all but the first "n" matched characters back to the input stream. */
+/* The funky do-while in the following #define is used to turn the definition
+ * int a single C statement (which needs a semi-colon terminator).  This
+ * avoids problems with code like:
+ *
+ * 	if ( condition_holds )
+ *		yyless( 5 );
+ *	else
+ *		do_something_else();
+ *
+ * Prior to using the do-while the compiler would get upset at the
+ * "else" because it interpreted the "if" statement as being all
+ * done when it reached the ';' after the yyless() call.
+ */
+
+/* Return all but the first 'n' matched characters back to the input stream. */
+
 #define yyless(n) \
 	do \
 		{ \
-		/* Undo effects of setting up llvmAsmtext. */ \
-        int yyless_macro_arg = (n); \
-        YY_LESS_LINENO(yyless_macro_arg);\
-		*yy_cp = (yy_hold_char); \
+		/* Undo effects of setting up yytext. */ \
+		*yy_cp = yy_hold_char; \
 		YY_RESTORE_YY_MORE_OFFSET \
-		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
-		YY_DO_BEFORE_ACTION; /* set up llvmAsmtext again */ \
+		yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
+		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
 		} \
 	while ( 0 )
 
-#define unput(c) yyunput( c, (yytext_ptr)  )
+#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).
  */
-
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
 typedef unsigned int yy_size_t;
-#endif
 
-#ifndef YY_STRUCT_YY_BUFFER_STATE
-#define YY_STRUCT_YY_BUFFER_STATE
+
 struct yy_buffer_state
 	{
 	FILE *yy_input_file;
@@ -239,16 +205,12 @@
 	 */
 	int yy_at_bol;
 
-    int yy_bs_lineno; /**< The line count. */
-    int yy_bs_column; /**< The column count. */
-    
 	/* Whether to try to fill the input buffer when we reach the
 	 * end of it.
 	 */
 	int yy_fill_buffer;
 
 	int yy_buffer_status;
-
 #define YY_BUFFER_NEW 0
 #define YY_BUFFER_NORMAL 1
 	/* When an EOF's been seen but there's still some text to process
@@ -258,203 +220,200 @@
 	 * possible backing-up.
 	 *
 	 * When we actually see the EOF, we change the status to "new"
-	 * (via llvmAsmrestart()), so that the user can continue scanning by
-	 * just pointing llvmAsmin at a new input file.
+	 * (via yyrestart()), so that the user can continue scanning by
+	 * just pointing yyin at a new input file.
 	 */
 #define YY_BUFFER_EOF_PENDING 2
-
 	};
-#endif /* !YY_STRUCT_YY_BUFFER_STATE */
 
-/* Stack of input buffers. */
-static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
-static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
-static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+static YY_BUFFER_STATE yy_current_buffer = 0;
 
 /* We provide macros for accessing buffer states in case in the
  * future we want to put the buffer states in a more general
  * "scanner state".
- *
- * Returns the top of the stack, or NULL.
  */
-#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
-                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
-                          : NULL)
+#define YY_CURRENT_BUFFER yy_current_buffer
 
-/* Same as previous macro, but useful when we know that the buffer stack is not
- * NULL or when we need an lvalue. For internal use only.
- */
-#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
 
-/* yy_hold_char holds the character lost when llvmAsmtext is formed. */
+/* yy_hold_char holds the character lost when yytext is formed. */
 static char yy_hold_char;
+
 static int yy_n_chars;		/* number of characters read into yy_ch_buf */
-int llvmAsmleng;
+
+
+int yyleng;
 
 /* Points to current character in buffer. */
 static char *yy_c_buf_p = (char *) 0;
-static int yy_init = 0;		/* whether we need to initialize */
+static int yy_init = 1;		/* whether we need to initialize */
 static int yy_start = 0;	/* start state number */
 
-/* Flag which is used to allow llvmAsmwrap()'s to do buffer switches
- * instead of setting up a fresh llvmAsmin.  A bit of a hack ...
+/* Flag which is used to allow yywrap()'s to do buffer switches
+ * instead of setting up a fresh yyin.  A bit of a hack ...
  */
 static int yy_did_buffer_switch_on_eof;
 
-void llvmAsmrestart (FILE *input_file  );
-void llvmAsm_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
-YY_BUFFER_STATE llvmAsm_create_buffer (FILE *file,int size  );
-void llvmAsm_delete_buffer (YY_BUFFER_STATE b  );
-void llvmAsm_flush_buffer (YY_BUFFER_STATE b  );
-void llvmAsmpush_buffer_state (YY_BUFFER_STATE new_buffer  );
-void llvmAsmpop_buffer_state (void );
+void yyrestart YY_PROTO(( FILE *input_file ));
 
-static void llvmAsmensure_buffer_stack (void );
-static void llvmAsm_load_buffer_state (void );
-static void llvmAsm_init_buffer (YY_BUFFER_STATE b,FILE *file  );
+void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
+void yy_load_buffer_state YY_PROTO(( void ));
+YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
+void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
+void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
 
-#define YY_FLUSH_BUFFER llvmAsm_flush_buffer(YY_CURRENT_BUFFER )
+YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
+YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
+YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
 
-YY_BUFFER_STATE llvmAsm_scan_buffer (char *base,yy_size_t size  );
-YY_BUFFER_STATE llvmAsm_scan_string (yyconst char *yy_str  );
-YY_BUFFER_STATE llvmAsm_scan_bytes (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 )) YY_MAY_BE_UNUSED;
+static void yy_flex_free YY_PROTO(( void * ));
 
-void *llvmAsmalloc (yy_size_t  );
-void *llvmAsmrealloc (void *,yy_size_t  );
-void llvmAsmfree (void *  );
-
-#define yy_new_buffer llvmAsm_create_buffer
+#define yy_new_buffer yy_create_buffer
 
 #define yy_set_interactive(is_interactive) \
 	{ \
-	if ( ! YY_CURRENT_BUFFER ){ \
-        llvmAsmensure_buffer_stack (); \
-		YY_CURRENT_BUFFER_LVALUE =    \
-            llvmAsm_create_buffer(llvmAsmin,YY_BUF_SIZE ); \
-	} \
-	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+	if ( ! yy_current_buffer ) \
+		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+	yy_current_buffer->yy_is_interactive = is_interactive; \
 	}
 
 #define yy_set_bol(at_bol) \
 	{ \
-	if ( ! YY_CURRENT_BUFFER ){\
-        llvmAsmensure_buffer_stack (); \
-		YY_CURRENT_BUFFER_LVALUE =    \
-            llvmAsm_create_buffer(llvmAsmin,YY_BUF_SIZE ); \
-	} \
-	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+	if ( ! yy_current_buffer ) \
+		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+	yy_current_buffer->yy_at_bol = at_bol; \
 	}
 
-#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
 
-/* Begin user sect3 */
 
-#define llvmAsmwrap(n) 1
+#define YY_USES_REJECT
+
+#define yywrap() 1
 #define YY_SKIP_YYWRAP
-
 typedef unsigned char YY_CHAR;
-
-FILE *llvmAsmin = (FILE *) 0, *llvmAsmout = (FILE *) 0;
-
+FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
 typedef int yy_state_type;
+extern int yylineno;
+int yylineno = 1;
+extern char *yytext;
+#define yytext_ptr yytext
 
-extern int llvmAsmlineno;
-
-int llvmAsmlineno = 1;
-
-extern char *llvmAsmtext;
-#define yytext_ptr llvmAsmtext
-
-static yy_state_type yy_get_previous_state (void );
-static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
-static int yy_get_next_buffer (void );
-static void yy_fatal_error (yyconst char msg[]  );
+static yy_state_type yy_get_previous_state YY_PROTO(( void ));
+static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
+static int yy_get_next_buffer YY_PROTO(( void ));
+static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
 
 /* Done after the current pattern has been matched and before the
- * corresponding action - sets up llvmAsmtext.
+ * corresponding action - sets up yytext.
  */
 #define YY_DO_BEFORE_ACTION \
-	(yytext_ptr) = yy_bp; \
-	llvmAsmleng = (size_t) (yy_cp - yy_bp); \
-	(yy_hold_char) = *yy_cp; \
+	yytext_ptr = yy_bp; \
+	yyleng = (int) (yy_cp - yy_bp); \
+	yy_hold_char = *yy_cp; \
 	*yy_cp = '\0'; \
-	(yy_c_buf_p) = yy_cp;
+	yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 138
-#define YY_END_OF_BUFFER 139
-/* This struct is not used in this scanner,
-   but its presence is necessary. */
-struct yy_trans_info
-	{
-	flex_int32_t yy_verify;
-	flex_int32_t yy_nxt;
-	};
-static yyconst flex_int16_t yy_accept[560] =
+#define YY_NUM_RULES 139
+#define YY_END_OF_BUFFER 140
+static yyconst short int yy_acclist[220] =
     {   0,
-        0,    0,  139,  137,  136,  136,  137,  137,  137,  137,
-      137,  137,  129,  129,    1,  137,  137,  137,  137,  137,
-      137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
-      137,  137,  137,  137,  137,  137,  137,  137,    0,  127,
-        0,  125,  123,  132,    0,  130,    0,  134,  129,    0,
-        1,    0,  124,  133,    0,    0,    0,    0,    0,    0,
-        0,  109,    0,   38,    0,    0,    0,    0,    0,    0,
-       72,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   54,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   73,    0,    0,    0,    0,    0,    0,    0,   68,
+      140,  138,  139,  137,  138,  139,  137,  139,  138,  139,
+      138,  139,  138,  139,  138,  139,  138,  139,  138,  139,
+      130,  138,  139,  130,  138,  139,    1,  138,  139,  138,
+      139,  138,  139,  138,  139,  138,  139,  138,  139,  138,
+      139,  138,  139,  138,  139,  138,  139,  138,  139,  138,
+      139,  138,  139,  138,  139,  138,  139,  138,  139,  138,
+      139,  138,  139,  138,  139,  138,  139,  138,  139,  138,
+      139,  138,  139,  138,  139,  127,  125,  123,  133,  131,
+      135,  130,    1,  124,  134,  109,   38,   72,   54,   73,
+       68,   25,  127,  129,  123,  135,   22,  135,  136,  128,
 
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   25,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  127,  123,  134,   22,  134,    0,  135,
-        0,  128,  124,   55,    0,    0,   67,    0,    0,   36,
-        0,    0,    0,   39,    0,    0,    0,    0,    0,    0,
-        0,    0,    3,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   57,    0,    0,    0,
-       82,   87,   85,   86,   84,   83,    0,   88,   92,    0,
+      124,   55,   67,   36,   39,    3,   57,   82,   87,   85,
+       86,   84,   83,   88,   92,  108,   77,   75,   64,   76,
+       74,   56,   90,   81,   79,   80,   78,   91,   89,   69,
+      126,  135,  135,   66,   93,   71,   60,  116,   63,   70,
+      117,   65,   24,  132,   59,   96,   62,   45,   26,    4,
+       52,   58,   61,   48,   12,   95,  135,   34,   32,    2,
+        5,   49,   98,   44,   51,  118,   94,   23,  115,   41,
+        7,   50,   40,  102,  101,    8,   16,  111,  114,   35,
+       53,  106,  100,  110,   27,   28,   99,  112,  107,  105,
+        6,   29,   97,   33,    9,   19,   10,  103,   11,   47,
 
-        0,  108,    0,    0,    0,    0,    0,   77,   75,   64,
-        0,    0,    0,   76,   74,    0,    0,   56,    0,    0,
-        0,    0,    0,    0,    0,    0,   90,   81,   79,    0,
-       80,   78,    0,   91,   89,    0,    0,    0,    0,    0,
-        0,    0,    0,   69,    0,    0,  126,  134,    0,    0,
-        0,  134,    0,    0,    0,    0,   66,    0,    0,   93,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   71,   60,    0,    0,    0,    0,  116,
-       63,    0,    0,    0,   70,    0,    0,    0,    0,    0,
-        0,    0,  117,   65,    0,    0,    0,    0,   24,    0,
-
-        0,    0,  131,   59,    0,    0,   96,    0,    0,    0,
-       62,   45,    0,    0,   26,    0,    0,    0,    4,    0,
-       52,   58,    0,    0,    0,    0,   61,    0,   48,    0,
-       12,    0,    0,   95,  134,   34,   32,    0,    0,    2,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    5,    0,   49,   98,    0,    0,    0,    0,
-        0,    0,   44,    0,    0,    0,    0,   51,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  118,    0,    0,    0,    0,   94,    0,   23,    0,
-        0,    0,    0,    0,    0,    0,  115,    0,    0,   41,
-
-        0,    0,    0,    7,    0,    0,    0,   50,    0,    0,
-       40,  102,  101,    0,    0,    8,   16,    0,    0,    0,
-      111,    0,  114,   35,    0,    0,   53,    0,    0,    0,
-      106,    0,    0,  100,  110,   27,    0,   28,   99,    0,
-      112,  107,    0,    0,    0,    0,    0,  105,    0,    0,
-        6,   29,    0,    0,    0,    0,    0,   97,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   33,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    9,    0,    0,
-        0,    0,   19,    0,    0,    0,   10,  103,   11,   47,
-       46,    0,  104,    0,    0,    0,    0,   31,    0,    0,
-
-        0,   13,    0,   15,   14,    0,    0,    0,    0,   17,
-        0,    0,    0,    0,    0,    0,    0,   30,    0,    0,
-        0,    0,    0,   37,    0,    0,    0,    0,    0,   18,
-        0,    0,    0,    0,    0,  113,    0,    0,    0,    0,
-        0,    0,    0,   20,    0,    0,    0,    0,  119,  121,
-      122,    0,   42,    0,  120,   43,    0,   21,    0
+       46,  104,   31,   13,   15,   14,   17,   30,   37,   18,
+      113,   20,  119,  121,  122,   42,  120,   43,   21
     } ;
 
-static yyconst flex_int32_t yy_ec[256] =
+static yyconst short int yy_accept[564] =
+    {   0,
+        1,    1,    1,    2,    4,    7,    9,   11,   13,   15,
+       17,   19,   21,   24,   27,   30,   32,   34,   36,   38,
+       40,   42,   44,   46,   48,   50,   52,   54,   56,   58,
+       60,   62,   64,   66,   68,   70,   72,   74,   76,   76,
+       77,   77,   78,   78,   79,   80,   80,   81,   81,   82,
+       83,   83,   84,   84,   85,   86,   86,   86,   86,   86,
+       86,   86,   86,   87,   87,   88,   88,   88,   88,   88,
+       88,   88,   89,   89,   89,   89,   89,   89,   89,   89,
+       89,   89,   89,   90,   90,   90,   90,   90,   90,   90,
+       90,   90,   90,   91,   91,   91,   91,   91,   91,   91,
+
+       91,   92,   92,   92,   92,   92,   92,   92,   92,   92,
+       92,   92,   92,   92,   92,   92,   92,   92,   92,   93,
+       93,   93,   93,   93,   93,   93,   93,   93,   93,   93,
+       93,   93,   93,   93,   93,   94,   94,   95,   96,   97,
+       98,   99,   99,  100,  100,  101,  102,  103,  103,  103,
+      104,  104,  104,  105,  105,  105,  105,  106,  106,  106,
+      106,  106,  106,  106,  106,  106,  107,  107,  107,  107,
+      107,  107,  107,  107,  107,  107,  107,  107,  107,  107,
+      107,  107,  107,  107,  107,  107,  107,  107,  107,  107,
+      108,  108,  108,  108,  109,  110,  111,  112,  113,  114,
+
+      114,  115,  116,  116,  116,  117,  117,  117,  117,  117,
+      117,  118,  119,  120,  120,  120,  120,  121,  122,  122,
+      122,  123,  123,  123,  123,  123,  123,  123,  123,  123,
+      124,  125,  126,  126,  127,  128,  128,  129,  130,  130,
+      130,  130,  130,  130,  130,  130,  130,  131,  131,  131,
+      132,  133,  133,  133,  133,  134,  134,  134,  134,  134,
+      135,  135,  135,  136,  136,  136,  136,  136,  136,  136,
+      136,  136,  136,  136,  136,  136,  136,  137,  138,  138,
+      138,  138,  138,  139,  140,  140,  140,  140,  141,  141,
+      141,  141,  141,  141,  141,  141,  142,  143,  143,  143,
+
+      143,  143,  144,  144,  144,  144,  145,  146,  146,  146,
+      147,  147,  147,  147,  148,  149,  149,  149,  150,  150,
+      150,  150,  151,  151,  152,  153,  153,  153,  153,  153,
+      154,  154,  155,  155,  156,  156,  156,  157,  158,  159,
+      160,  160,  160,  161,  161,  161,  161,  161,  161,  161,
+      161,  161,  161,  161,  161,  161,  162,  162,  163,  164,
+      164,  164,  164,  164,  164,  164,  165,  165,  165,  165,
+      165,  166,  166,  166,  166,  166,  166,  166,  166,  166,
+      166,  166,  166,  166,  166,  167,  167,  167,  167,  167,
+      168,  168,  169,  169,  169,  169,  169,  169,  169,  169,
+
+      170,  170,  170,  171,  171,  171,  171,  172,  172,  172,
+      172,  173,  173,  173,  174,  175,  176,  176,  176,  177,
+      178,  178,  178,  178,  179,  179,  180,  181,  181,  181,
+      182,  182,  182,  182,  183,  183,  183,  184,  185,  186,
+      186,  187,  188,  188,  189,  190,  190,  190,  190,  190,
+      190,  191,  191,  191,  192,  193,  193,  193,  193,  193,
+      193,  194,  194,  194,  194,  194,  194,  194,  194,  194,
+      194,  195,  195,  195,  195,  195,  195,  195,  195,  195,
+      195,  196,  196,  196,  196,  196,  197,  197,  197,  197,
+      198,  199,  200,  201,  202,  202,  203,  203,  203,  203,
+
+      203,  204,  204,  204,  204,  205,  205,  206,  207,  207,
+      207,  207,  207,  208,  208,  208,  208,  208,  208,  208,
+      208,  209,  209,  209,  209,  209,  209,  210,  210,  210,
+      210,  210,  210,  211,  211,  211,  211,  211,  211,  212,
+      212,  212,  212,  212,  212,  212,  212,  213,  213,  213,
+      213,  213,  214,  215,  216,  216,  217,  217,  218,  219,
+      219,  220,  220
+    } ;
+
+static yyconst int yy_ec[256] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
         1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
@@ -486,7 +445,7 @@
         1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int32_t yy_meta[45] =
+static yyconst int yy_meta[45] =
     {   0,
         1,    1,    2,    3,    4,    1,    1,    4,    4,    4,
         4,    4,    4,    5,    1,    1,    4,    4,    4,    4,
@@ -495,263 +454,266 @@
         4,    4,    4,    4
     } ;
 
-static yyconst flex_int16_t yy_base[568] =
+static yyconst short int yy_base[572] =
     {   0,
-        0,    0, 1217, 1218, 1218, 1218, 1212, 1201,   35,   39,
-       43,   49,   55,   61,    0,   72,   64,   67,   66,   86,
-       76,  106,   91,   65,  133,  121,  117,   99,  152,  125,
-       78,  179,  137,  211,  139,   90,  154,   93, 1210, 1218,
-     1199, 1218,    0,   49,  185,  217,  113,  238,  254,  259,
-        0, 1208,    0,  200,  110,  155,  111,   75,  148,  134,
-      163, 1197,  160,  177,  208,  178,  264,  194,  205,  200,
-     1196,  219,  260,  222,  218,  167,  261,  231,  273,  228,
-      277,  282,  274,  287,  288,   98,  240,  289,  290,  292,
-      296, 1195,  293,  298,  299,  307,  316,  294,  319,  321,
+        0,    0, 1226, 1227, 1227, 1227, 1221, 1210,   41,   36,
+       45,   51,   57,   63,    0,   74,   66,   69,   68,   88,
+       78,  108,   93,   36,  135,  123,  119,  101,  154,  127,
+       67,  181,  139,  213,  141,   80,  156,   92, 1219, 1227,
+     1208, 1227, 1217,    0,  186,  203,  219,  100,  240,  256,
+      261,    0, 1216,    0,  190,  112,  157,  113,  159,  150,
+      136,   81, 1205,   49,  110,  162,  196,  266,  210,  207,
+      212, 1204,  204,  262,  224,  233,  192,  263,  279,  275,
+      230,  234,  284,  276,  288,  290,   97,  242,  291,  292,
+      294,  300, 1203,  295,  302,  298,  305,  313,  296,  301,
 
-      308,  305,  323,  303,  300,  329,  333,  332,  334,  338,
-      336,  344,  339,  348,  337,  352,  335, 1194,  353,  363,
-      365,  364,  370,  368,  371,  377,  372,  384,  391,  369,
-      390,  376,  393, 1193,    0,  404, 1192,  426,  444,    0,
-     1201, 1218,    0, 1190,  406,  397, 1189,  409,  410, 1188,
-      413,  420,  417, 1187,  439,  411,  429,  431,  445,  446,
-      450,  449, 1186,  451,  452,  453,  454,  455,  457,  458,
-      465,  466,  468,  472,  471,  469,  482,  485,  488,  490,
-      491,  493,  494,  496,  497,  499, 1185,  500,  502,  505,
-     1184, 1183, 1182, 1181, 1180, 1179,  504, 1178, 1177,  506,
+      321,  322,  309,  324,  325,  326,  327,  331,  332,  335,
+      334,  338,  340,  333,  357,  353,  355,  344, 1202,  361,
+      345,  368,  363,  370,  371,  373,  379,  381,  385,  393,
+      372,  376,  392,  396, 1201, 1210, 1227,    0,  406, 1199,
+      429,  447,    0, 1208, 1227,    0, 1197,  411,  400, 1196,
+      412,  399, 1195,  420,  430,  415, 1194,  442,  413,  448,
+      437,  435,  450,  455,  452, 1193,  457,  458,  408,  456,
+      460,  462,  461,  463,  470,  464,  471,  475,  472,  473,
+      488,  490,  477,  491,  493,  494,  495,  497,  499, 1192,
+      502,  504,  505, 1191, 1190, 1189, 1188, 1187, 1186,  506,
 
-      507, 1176,  536,  511,  514,  516,  517, 1175, 1174, 1173,
-      548,  519,  536, 1172, 1171,  549,  528, 1170,  527,  552,
-      553,  554,  556,  557,  560,  558, 1169, 1168, 1167,  561,
-     1166, 1165,  562, 1164, 1163,  569,  563,  571,  581,  574,
-      585,  578,  589, 1162,  582,  586, 1218,  599,  618,  608,
-      622,  627,  590,  628,  515,  629, 1161,  630,  602, 1160,
-      592,  631,  633,  632,  634,  636,  635,  637,  640,  639,
-      645,  643,  657, 1159, 1158,  642,  644,  658,  659, 1157,
-     1156,  660,  664,  662, 1155,  667,  669,  671,  673,  674,
-      678,  677, 1154, 1153,  680,  682,  685,  675, 1152,  686,
+     1185, 1184,  507,  509, 1183,  538,  525,  515,  510,  516,
+     1182, 1181, 1180,  518,  528,  511, 1179, 1178,  526,  532,
+     1177,  552,  553,  555,  556,  557,  560,  558,  559, 1176,
+     1175, 1174,  561, 1173, 1172,  562, 1171, 1170,  563,  565,
+      564,  582,  574,  584,  571,  587, 1169,  575,  589, 1227,
+      599,  608,  618,  622,  627,  608,  593,  591,  610, 1168,
+      612,  629, 1167,  632,  633,  634,  636,  637,  638,  639,
+      641,  643,  644,  645,  646,  653, 1166, 1165,  647,  648,
+      654,  649, 1164, 1163,  660,  662,  663, 1162,  669,  664,
+      665,  670,  675,  678,  680, 1161, 1160,  682,  684,  683,
 
-      687,  688,    0, 1151,  690,  695, 1150,  701,  700,  705,
-     1149, 1148,  708,  706, 1147,  713,  715,  717, 1146,  719,
-     1145, 1144,  720,  724,  722,  725, 1143,  726, 1142,  729,
-     1141,  734,  730, 1140,  740, 1139, 1138,  740,  732, 1137,
-      742,  747,  750,  752,  749,  751,  759,  754,  760,  762,
-      763,  767, 1136,  768, 1135, 1134,  764,  769,  770,  777,
-      773,  779, 1133,  782,  784,  785,  786, 1132,  790,  791,
-      793,  792,  795,  794,  807,  798,  800,  801,  810,  811,
-      813, 1131,  814,  816,  820,  818, 1130,  821, 1129,  823,
-      830,  824,  832,  837,  834,  835, 1128,  838,  842, 1127,
+      685, 1159,  688,  692,  691,    0, 1158,  695,  696, 1157,
+      697,  693,  705, 1156, 1155,  711,  698, 1154,  714,  717,
+      715, 1153,  718, 1152, 1151,  719,  722,  728,  720, 1150,
+      725, 1149,  727, 1148,  729,  732, 1147,  745, 1146, 1145,
+      739,  748, 1144,  735,  753,  749,  750,  737,  754,  760,
+      762,  763,  765,  766,  768, 1143,  769, 1142, 1141,  771,
+      772,  770,  779,  774,  773, 1140,  778,  780,  781,  787,
+     1139,  792,  795,  794,  793,  799,  796,  800,  805,  807,
+      809,  811,  812,  814, 1138,  815,  816,  820,  821, 1137,
+      817, 1136,  822,  832,  824,  825,  838,  835,  842, 1135,
 
-      844,  845,  847, 1126,  848,  849,  850, 1125,  854,  851,
-     1124, 1123, 1122,  855,  856, 1121, 1120,  867,  864,  861,
-     1119,  872, 1118, 1117,  865,  876, 1116,  878,  879,  881,
-     1115,  882,  884, 1114, 1113, 1112,  883, 1111, 1110,  890,
-     1109, 1108,  889,  886,  891,  893,  896, 1107,  898,  901,
-     1106, 1105,  904,  906,  908,  911,  913, 1104,  915,  916,
-      917,  912,  919,  918,  921,  931,  924, 1103,  937,  939,
-      938,  940,  942,  943,  945,  944,  947, 1102,  950,  955,
-      956,  951, 1101,  957,  958,  960, 1090, 1079, 1078, 1077,
-     1076,  962, 1074,  964,  969,  965,  978, 1073,  981,  966,
+      843,  845, 1134,  846,  847,  848, 1133,  849,  851,  852,
+     1132,  850,  853, 1131, 1130, 1129,  854,  861, 1128, 1127,
+      863,  868,  865, 1126,  867, 1125, 1124,  866,  879, 1123,
+      880,  881,  882, 1122,  883,  884, 1121, 1120, 1119,  885,
+     1118, 1117,  892, 1116, 1115,  886,  887,  894,  898,  891,
+     1114,  896,  906, 1113, 1112,  901,  907,  908,  911,  914,
+     1111,  916,  915,  917,  918,  922,  919,  921,  928,  934,
+     1110,  913,  936,  941,  942,  943,  944,  947,  945,  949,
+     1094,  950,  952,  954,  956, 1082,  951,  959,  960, 1081,
+     1079, 1078, 1077, 1075,  962, 1074,  963,  964,  965,  974,
 
-      982, 1072,  983, 1071, 1070,  986,  987,  988,  991, 1069,
-      990,  993,  994,  995,  999, 1000, 1003, 1064, 1004, 1001,
-     1006, 1010, 1013, 1062, 1015, 1014, 1022, 1023, 1025, 1061,
-     1030, 1027, 1028, 1029, 1031,  910, 1033, 1034, 1036, 1035,
-     1032, 1043, 1044,  641, 1052, 1055, 1045, 1056,  599,  522,
-      470, 1057,  467, 1058,  373,  245, 1059,  244, 1218, 1095,
-     1097,  200, 1102, 1105,  167, 1109,   73
+     1073,  979,  980,  982, 1072,  983, 1071, 1070,  985,  988,
+      989,  992, 1069,  993,  990,  994,  995,  997,  999, 1000,
+     1068, 1004, 1005, 1008, 1010, 1012, 1064, 1017, 1016, 1018,
+     1021, 1024, 1063, 1025, 1027, 1029, 1030, 1032,  736, 1038,
+     1031, 1041, 1042, 1043, 1033, 1044,  600, 1045, 1050, 1046,
+     1056,  523,  519,  387, 1059,  246, 1052,  245,  169, 1061,
+      165, 1227, 1097, 1099, 1102, 1106, 1109, 1113,   58, 1118,
+       57
     } ;
 
-static yyconst flex_int16_t yy_def[568] =
+static yyconst short int yy_def[572] =
     {   0,
-      559,    1,  559,  559,  559,  559,  560,  561,  562,  559,
-      561,  561,  561,  561,  563,  564,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  560,  559,
-      561,  559,  565,  559,  559,  561,  561,  561,  561,  561,
-      563,  566,  567,  559,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
+      562,    1,  562,  562,  562,  562,  563,  564,  565,  562,
+      564,  564,  564,  564,  566,  567,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  563,  562,
+      564,  562,  568,  569,  562,  562,  564,  564,  564,  564,
+      564,  566,  570,  571,  562,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
 
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  559,  565,  559,  561,  561,  561,   50,
-      566,  559,  567,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  562,  568,  562,  569,  562,  564,
+      564,  564,   51,  570,  562,  571,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
 
-      561,  561,   50,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  559,  559,  559,  559,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
+      564,  564,  564,  564,  564,   51,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  562,
+      562,  562,  562,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
 
-      561,  561,  203,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  559,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
+      564,  564,  564,  564,  564,  206,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  562,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
 
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
 
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  561,    0,  559,
-      559,  559,  559,  559,  559,  559,  559
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,    0,  562,  562,  562,  562,  562,  562,  562,  562,
+      562
     } ;
 
-static yyconst flex_int16_t yy_nxt[1263] =
+static yyconst short int yy_nxt[1272] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,   12,   13,
        14,   14,   14,    4,   15,   16,    8,    8,    8,   17,
        18,   19,   20,   21,   22,   23,   24,   25,    8,   26,
        27,   28,   29,   30,    8,   31,   32,   33,   34,   35,
-       36,   37,    8,   38,   44,   44,   44,   44,   45,   45,
-       45,   45,   46,   46,   46,   46,   42,   47,   44,   44,
-       44,   44,   42,   48,   49,   49,   49,   49,   42,   48,
-       49,   49,   49,   49,   42,   52,  143,   42,   42,   42,
-       42,   54,   54,   54,   54,   63,   55,   64,   42,   42,
-       60,   42,   81,   56,   61,   57,   50,   58,   65,   42,
+       36,   37,    8,   38,   43,   46,   46,   46,   46,   42,
+       45,   45,   45,   45,   47,   47,   47,   47,   42,   48,
+      146,  138,   42,   82,   42,   49,   50,   50,   50,   50,
+       42,   49,   50,   50,   50,   50,   42,   53,  156,   42,
+       42,   42,   42,   55,   55,   55,   55,   64,   56,   65,
+      105,   42,   61,   42,   42,   57,   62,   58,   51,   59,
 
-       59,  104,   62,   42,   42,   66,   42,   70,  148,   67,
-       71,   42,   42,  130,   79,   68,  133,   72,   69,   42,
-       80,  137,   92,   42,   42,   73,   42,   74,   75,  182,
-       42,   93,  144,  147,   42,   76,   89,   94,   42,   77,
-       85,   78,   82,   82,   82,   82,   42,   42,   86,   90,
-       42,  101,   42,   87,   83,   91,  116,   88,  128,  151,
-      102,   42,  103,  117,   84,   42,  131,   42,   42,  118,
-      135,  129,  119,   42,  149,   95,   42,   96,  150,  120,
-       42,   97,  145,   98,  146,   99,  132,  100,  105,  153,
-       42,   42,   42,  136,   45,   45,   45,   45,  154,  169,
+       66,   42,   60,  131,   63,   42,   42,   67,  140,   71,
+       42,   68,   72,   42,   42,  134,   80,   69,  155,   73,
+       70,   42,   81,   42,   93,   42,   42,   74,  185,   75,
+       76,  157,   42,   94,  147,  150,   42,   77,   90,   95,
+       42,   78,   86,   79,   83,   83,   83,   83,   42,   42,
+       87,   91,   42,  102,   42,   88,   84,   92,  117,   89,
+      129,  154,  103,   42,  104,  118,   85,   42,  132,   42,
+       42,  119,   42,  130,  120,   42,  152,   96,   42,   97,
+      153,  121,   42,   98,  148,   99,  149,  100,  133,  101,
+      106,  158,  151,  159,   42,   45,   45,   45,   45,   55,
 
-      152,  106,  107,   43,  108,  109,  110,   42,  111,   54,
-       54,   54,   54,   42,  112,  157,  113,  114,   42,  115,
-      105,   42,  163,  161,   42,   48,   46,   46,   46,   46,
-       42,   42,   42,  121,  122,   42,  123,  155,  124,  156,
-      125,   42,  126,  162,   42,  168,  127,  138,  138,  138,
-      138,   42,  167,   42,  172,  139,  164,   42,   42,  183,
-      174,  139,   48,   49,   49,   49,   49,   42,  140,  140,
-      140,  140,   42,   42,   42,  140,  140,   42,  140,  140,
-      140,  140,  140,  140,  170,  158,   42,   42,  159,  165,
-       42,   82,   82,   82,   82,   42,  166,  160,  171,  175,
+       55,   55,   55,  107,  108,   42,  109,  110,  111,   42,
+      112,  139,   46,   46,   46,   46,  113,   42,  114,  115,
+       42,  116,  106,   42,  172,   42,   42,   49,   47,   47,
+       47,   47,   42,  160,  166,  122,  123,   42,  124,  164,
+      125,  167,  126,   42,  127,  165,   42,   42,  128,  141,
+      141,  141,  141,   42,  170,   42,  178,  142,   42,   42,
+      171,  186,  177,  142,   49,   50,   50,   50,   50,   42,
+      143,  143,  143,  143,   42,   42,   42,  143,  143,   42,
+      143,  143,  143,  143,  143,  143,  173,  161,   42,   42,
+      162,  168,   42,   83,   83,   83,   83,   42,  169,  163,
 
-       42,   42,   42,   42,  176,   42,   42,   42,  181,   42,
-      173,   42,   42,   42,  186,  184,   42,  196,   42,  185,
-       42,   42,  177,  178,  179,  187,  180,  190,  188,   42,
-      192,  189,   42,  191,   42,  199,   42,  200,  197,  194,
-      202,  203,   42,  198,  193,   42,   42,   42,   42,   42,
-       42,   42,   42,  195,  205,  208,  204,   42,  201,  214,
-      212,   42,  206,  210,  219,   42,   42,  216,  218,  209,
-      222,  217,  211,  215,  207,  213,   42,   42,   42,  220,
-      223,   42,   42,   42,   42,   42,   42,  221,  242,   42,
-       42,  224,  226,  228,  231,  238,  225,   42,  227,  233,
+      174,   42,  175,   42,   42,   42,  179,   42,   42,   42,
+      184,   42,  176,   42,   42,   42,  189,  187,   42,  199,
+      200,  188,   42,  180,  181,  182,   42,  183,  195,  190,
+      191,  193,  194,  192,   42,   42,  197,   42,   42,   42,
+       42,  203,  196,  201,   42,   42,   42,   42,   42,  202,
+      198,   42,  208,   42,  207,  211,  215,   42,   42,  204,
+      209,  217,  205,  219,  213,  220,   42,  206,   42,  212,
+       42,  216,  210,  214,   42,  218,   42,  221,  228,  225,
+      222,   42,  223,   42,   42,   42,   42,  246,  226,   42,
+      224,  245,   42,  231,   42,  229,  234,  230,   42,  227,
 
-      234,  243,  239,   42,   42,  230,   42,  229,  232,  235,
-       42,  244,  236,  248,  248,  248,  248,  237,  240,   42,
-      241,  249,   42,   42,   42,  253,   42,  249,  245,  255,
-       42,  254,  256,   42,  246,  138,  138,  138,  138,   42,
-      258,  259,   42,  139,   42,  257,  260,  262,  263,  139,
-      250,  251,   42,  252,  252,  252,  252,   42,   42,   42,
-      264,  261,   42,   42,   42,   42,   42,   42,   42,  269,
-       42,   42,  265,  267,  270,  266,  276,  268,   42,   42,
-       42,   42,   42,   42,   42,   42,  271,  274,  272,  280,
-      273,  282,  283,  284,  275,   42,  281,  278,   42,  277,
+       42,  236,  237,  242,  241,   42,   42,  232,  233,   42,
+      235,  238,   42,   42,  239,  251,  251,  251,  251,  240,
+      243,   42,  244,  252,   42,   42,   42,  247,   42,  252,
+      256,  248,  258,   42,  260,  259,  257,  249,  141,  141,
+      141,  141,   42,   42,  263,  276,  142,  261,   42,  265,
+       42,  262,  142,  253,  254,   42,  255,  255,  255,  255,
+       42,   42,  268,   42,  264,   42,  267,  266,   42,   42,
+       42,   42,  272,   42,   42,   42,   42,   42,  270,  269,
+      273,  279,  271,   42,   42,   42,   42,  285,   42,  277,
+       42,  286,  274,  283,  275,  281,  289,  287,  282,  278,
 
-      279,   42,  285,   42,   42,  286,   42,   42,  287,   42,
-       42,  288,   42,   42,  291,   42,  293,   42,   42,   42,
-       42,  292,  290,  297,   42,  289,  295,   42,   42,   42,
-       42,  294,   42,  298,  299,   42,  338,  296,  300,  306,
-       42,   42,  309,  301,  302,  303,  303,  303,  303,   42,
-      304,  305,  303,  303,  307,  303,  303,  303,  303,  303,
-      303,   42,   42,  313,  314,   42,   42,   42,  310,   42,
-       42,   42,  308,   42,   42,   42,   42,  317,  316,  311,
-      319,  315,   42,  321,   42,  324,  312,   42,  320,  318,
-      326,   42,  325,  323,   42,   42,  329,  322,   42,   42,
+      284,   42,  280,   42,   42,  288,   42,   42,   42,  293,
+       42,  290,   42,  291,  294,   42,  296,   42,   42,   42,
+       42,  295,   42,   42,   42,  300,  298,  292,   42,   42,
+      297,   42,   42,  309,  302,  301,   42,  299,   42,   42,
+      303,   42,  311,  313,  304,   42,  305,  306,  306,  306,
+      306,  312,  308,  310,  306,  306,  314,  306,  306,  306,
+      306,  306,  306,  315,  307,   42,   42,  316,   42,   42,
+       42,   42,   42,   42,   42,   42,   42,   42,   42,  320,
+      319,  324,  318,  322,   42,  327,  328,   42,   42,  317,
+      321,  323,  329,  326,  330,   42,  332,   42,  325,  334,
 
-      328,  327,   42,   42,  330,   42,  331,  332,  248,  248,
-      248,  248,   42,  342,  333,   42,  249,  335,  335,  335,
-      335,  341,  249,  334,  250,  250,  336,  335,  335,  335,
-      335,  252,  252,  252,  252,   42,  252,  252,  252,  252,
-       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-       42,  345,   42,   42,   42,   42,   42,   42,   42,  337,
-      339,  340,  344,  347,  352,  346,  353,  349,  343,  350,
-       42,   42,   42,   42,  351,   42,  348,   42,  354,  355,
-       42,  356,   42,  361,   42,  362,   42,   42,   42,  360,
-       42,   42,  363,   42,  357,   42,  358,  359,   42,   42,
+       42,  331,   42,  333,   42,  335,   42,  336,  251,  251,
+      251,  251,  341,   42,  253,  253,  252,  338,  338,  338,
+      338,   42,  252,   42,  340,   42,  337,  338,  338,  338,
+      338,  255,  255,  255,  255,   42,  255,  255,  255,  255,
+       42,  342,   42,  343,  339,   42,   42,   42,  344,   42,
+       42,   42,   42,  345,   42,  348,   42,   42,   42,   42,
+       42,   42,   42,  347,  355,  350,   42,   42,  349,  356,
+      346,  352,  353,   42,  357,   42,   42,   42,   42,  354,
+      351,  364,   42,   42,  358,  359,  365,  362,   42,  363,
+      360,   42,  361,   42,  366,   42,   42,   42,   42,  367,
 
-       42,   42,  367,   42,  364,  366,  365,  368,   42,  369,
-      375,  371,  370,   42,   42,  373,  378,  377,   42,   42,
-      376,   42,  372,  380,  374,  379,   42,  383,   42,  381,
-       42,  382,   42,   42,  385,   42,  384,   42,   42,   42,
-      387,  390,   42,   42,  388,   42,  386,   42,  389,  335,
-      335,  335,  335,   42,  398,   42,  391,  396,  394,  397,
-       42,  392,   42,   42,   42,   42,  393,   42,  400,  401,
-      395,  402,   42,   42,  404,   42,   42,   42,  399,  405,
-       42,   42,   42,   42,  403,  408,   42,  406,  410,  411,
-       42,  412,   42,  407,  409,   42,  413,   42,   42,   42,
+      368,   42,  369,  370,   42,   42,   42,  371,   42,   42,
+       42,   42,  372,  374,  373,  378,  383,  381,   42,  386,
+      375,  382,  380,  379,   42,  376,  377,   42,   42,  384,
+       42,   42,   42,   42,  385,   42,  388,  387,   42,  390,
+       42,   42,   42,  391,  389,   42,  392,  393,   42,   42,
+       42,  394,   42,  397,  338,  338,  338,  338,  400,  399,
+      395,   42,   42,   42,  396,  398,   42,   42,  404,  405,
+      401,  402,  406,   42,  403,   42,   42,  407,   42,   42,
+      408,   42,   42,   42,   42,   42,   42,   42,  411,  413,
+      414,   42,   42,   42,   42,  409,  410,  412,  415,  416,
 
-      415,  414,  416,   42,   42,   42,   42,   42,   42,  421,
-      417,   42,  423,   42,   42,  419,  424,  427,  420,  418,
-       42,  422,  426,   42,   42,  429,   42,   42,  428,   42,
-      425,   42,  430,   42,   42,  433,   42,   42,  431,  432,
-      435,  438,  437,   42,  440,   42,  434,   42,   42,  442,
-       42,   42,  441,  436,  439,   42,  444,   42,   42,  443,
-       42,   42,   42,   42,   42,  447,  446,   42,   42,   42,
-      451,  445,  455,  456,   42,  449,  458,   42,   42,  448,
-       42,  453,  454,  461,  452,   42,  459,  450,  457,   42,
-      460,   42,   42,  463,   42,   42,   42,   42,  462,   42,
+       42,  417,  418,  419,  420,   42,   42,   42,   42,   42,
+      424,  422,   42,   42,  423,  421,  426,  427,   42,  430,
+       42,  431,   42,  425,   42,   42,  429,   42,   42,   42,
+       42,  428,  432,   42,   42,   42,  436,   42,   42,  433,
+      435,  438,  440,  443,  441,   42,  434,  437,   42,  445,
+      442,   42,  446,  439,  444,   42,   42,  447,   42,   42,
+       42,   42,   42,   42,   42,   42,   42,   42,  458,  459,
+      450,  454,  448,  449,   42,  461,   42,  452,   42,   42,
+       42,   42,  451,  456,  457,  455,  463,  464,  466,  453,
+      460,  462,   42,   42,   42,   42,   42,   42,   42,   42,
 
-      464,  471,   42,   42,   42,  469,   42,  465,  470,   42,
-      467,   42,  468,  475,   42,  466,  472,   42,  473,   42,
-      476,   42,  474,   42,   42,   42,   42,  477,   42,   42,
-       42,   42,   42,  479,   42,  478,  484,   42,  485,  480,
-      483,  481,  489,  491,   42,  486,  487,  488,  482,  490,
-       42,   42,   42,   42,  492,   42,   42,   42,   42,  497,
-       42,  493,  495,   42,   42,  498,  500,  496,   42,   42,
-       42,   42,  502,   42,  506,   42,  494,   42,   42,   42,
-      499,  501,   42,  509,  510,  516,  507,  511,  503,  508,
-      512,   42,  504,  505,   42,   42,   42,  513,  514,   42,
+       42,  467,  465,  474,   42,   42,  472,   42,  473,   42,
+      468,   42,  470,  471,   42,  476,  478,  469,  475,   42,
+       42,   42,  480,  477,   42,  479,   42,   42,   42,   42,
+       42,   42,   42,  481,   42,   42,  483,  487,  482,  488,
+      486,   42,  484,  494,  489,  492,  490,   42,  485,   42,
+      493,  495,  497,  491,   42,   42,   42,   42,   42,  498,
+       42,  500,   42,   42,   42,   42,  501,   42,  503,   42,
+      499,  496,   42,   42,  505,   42,   42,   42,   42,  509,
+      510,  502,  504,  512,  513,  515,  514,   42,  506,  507,
+      511,  508,   42,   42,  517,   42,   42,  516,   42,  519,
 
-       42,   42,  515,   42,   42,  519,   42,   42,   42,  517,
-      520,  523,   42,   42,   42,  525,   42,   42,  527,   42,
-      518,  522,  529,   42,  526,  521,   42,   42,   42,  528,
-      524,  531,  530,  533,  535,   42,   42,  536,   42,  532,
-       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-      534,  537,  538,  540,  539,  546,   42,   42,   42,  542,
-      544,  543,  545,  547,  541,   42,  548,  549,   42,   42,
-       42,   42,   42,  552,   42,   42,  553,   42,  556,  551,
-      550,  557,   42,   42,   42,   42,   42,   42,  554,   42,
-       42,   42,   42,  555,  558,   39,   39,   39,   39,   39,
+      518,   42,   42,   42,  522,   42,   42,   42,   42,  520,
+       42,  523,   42,   42,  526,  528,  530,   42,   42,  532,
+      521,   42,  525,   42,  529,   42,  524,  527,  531,   42,
+       42,   42,  533,  536,   42,  534,  538,   42,   42,  539,
+       42,  535,   42,   42,   42,   42,   42,  540,  543,  537,
+      541,   42,  549,  542,   42,   42,   42,   42,   42,   42,
+      545,  547,  546,   42,  544,   42,  555,  548,  550,   42,
+      553,  556,   42,  551,   42,  560,   42,   42,  552,  554,
+      559,   42,   42,   42,   42,   42,   42,   42,   42,  557,
+       42,   42,   42,  558,   42,   42,  561,   39,   39,   39,
 
-       41,   41,   51,   42,   51,   51,   51,   53,   53,  141,
-      141,  141,  141,  141,   42,   42,   42,   42,   42,   42,
+       39,   39,   41,   41,   44,   44,   52,   42,   52,   52,
+       52,   54,   54,  136,  136,  136,  136,  136,  144,  144,
+      144,  144,  144,   42,   42,   42,   42,   42,   42,   42,
        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
@@ -759,186 +721,177 @@
        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
 
-       42,   42,   42,   42,  142,   42,  247,   42,   42,   42,
-       42,  142,   42,  134,   42,   40,  559,    3,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559
+       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+       42,  145,   42,  137,  250,   42,   42,   42,   42,  145,
+      137,   42,  135,   42,   40,  562,    3,  562,  562,  562,
+      562,  562,  562,  562,  562,  562,  562,  562,  562,  562,
+      562,  562,  562,  562,  562,  562,  562,  562,  562,  562,
+      562,  562,  562,  562,  562,  562,  562,  562,  562,  562,
+      562,  562,  562,  562,  562,  562,  562,  562,  562,  562,
+      562
     } ;
 
-static yyconst flex_int16_t yy_chk[1263] =
+static yyconst short int yy_chk[1272] =
     {   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,    9,    9,    9,    9,   10,   10,
-       10,   10,   11,   11,   11,   11,   11,   12,   44,   44,
-       44,   44,   12,   13,   13,   13,   13,   13,   13,   14,
-       14,   14,   14,   14,   14,   16,  567,   17,   24,   19,
-       18,   16,   16,   16,   16,   19,   17,   19,   58,   21,
-       18,   31,   24,   17,   18,   17,   13,   17,   19,   20,
+        1,    1,    1,    1,    9,   10,   10,   10,   10,   24,
+        9,    9,    9,    9,   11,   11,   11,   11,   11,   12,
+      571,  569,   64,   24,   12,   13,   13,   13,   13,   13,
+       13,   14,   14,   14,   14,   14,   14,   16,   64,   17,
+       31,   19,   18,   16,   16,   16,   16,   19,   17,   19,
+       31,   21,   18,   36,   62,   17,   18,   17,   13,   17,
 
-       17,   31,   18,   36,   23,   20,   38,   21,   58,   20,
-       21,   86,   28,   36,   23,   20,   38,   21,   20,   22,
-       23,   47,   28,   55,   57,   22,   47,   22,   22,   86,
-       27,   28,   55,   57,   26,   22,   27,   28,   30,   22,
-       26,   22,   25,   25,   25,   25,   25,   60,   26,   27,
-       33,   30,   35,   26,   25,   27,   33,   26,   35,   60,
-       30,   59,   30,   33,   25,   29,   37,   37,   56,   33,
-      565,   35,   33,   63,   59,   29,   61,   29,   59,   33,
-       76,   29,   56,   29,   56,   29,   37,   29,   32,   63,
-       64,   66,   32,   45,   45,   45,   45,   45,   64,   76,
+       19,   20,   17,   36,   18,   38,   23,   20,   48,   21,
+       87,   20,   21,   48,   28,   38,   23,   20,   62,   21,
+       20,   22,   23,   65,   28,   56,   58,   22,   87,   22,
+       22,   65,   27,   28,   56,   58,   26,   22,   27,   28,
+       30,   22,   26,   22,   25,   25,   25,   25,   25,   61,
+       26,   27,   33,   30,   35,   26,   25,   27,   33,   26,
+       35,   61,   30,   60,   30,   33,   25,   29,   37,   37,
+       57,   33,   59,   35,   33,   66,   60,   29,  561,   29,
+       60,   33,  559,   29,   57,   29,   57,   29,   37,   29,
+       32,   66,   59,   66,   32,   45,   45,   45,   45,   55,
 
-       61,   32,   32,  562,   32,   32,   32,   68,   32,   54,
-       54,   54,   54,   70,   32,   66,   32,   32,   69,   32,
-       34,   65,   70,   68,   34,   46,   46,   46,   46,   46,
-       46,   75,   72,   34,   34,   74,   34,   65,   34,   65,
-       34,   80,   34,   69,   78,   75,   34,   48,   48,   48,
-       48,   48,   74,   87,   78,   48,   72,  558,  556,   87,
-       80,   48,   49,   49,   49,   49,   49,   49,   50,   50,
-       50,   50,   50,   73,   77,   50,   50,   67,   50,   50,
-       50,   50,   50,   50,   77,   67,   79,   83,   67,   73,
-       81,   82,   82,   82,   82,   82,   73,   67,   77,   81,
+       55,   55,   55,   32,   32,   77,   32,   32,   32,   67,
+       32,   46,   46,   46,   46,   46,   32,   73,   32,   32,
+       70,   32,   34,   69,   77,   71,   34,   47,   47,   47,
+       47,   47,   47,   67,   71,   34,   34,   75,   34,   69,
+       34,   73,   34,   81,   34,   70,   76,   82,   34,   49,
+       49,   49,   49,   49,   75,   88,   82,   49,  558,  556,
+       76,   88,   81,   49,   50,   50,   50,   50,   50,   50,
+       51,   51,   51,   51,   51,   74,   78,   51,   51,   68,
+       51,   51,   51,   51,   51,   51,   78,   68,   80,   84,
+       68,   74,   79,   83,   83,   83,   83,   83,   74,   68,
 
-       84,   85,   88,   89,   83,   90,   93,   98,   85,   91,
-       79,   94,   95,  105,   90,   88,  104,   98,  102,   89,
-       96,  101,   84,   84,   84,   91,   84,   94,   93,   97,
-       96,   93,   99,   95,  100,  101,  103,  102,   99,   97,
-      104,  105,  106,  100,   96,  108,  107,  109,  117,  111,
-      115,  110,  113,   97,  107,  108,  106,  112,  103,  111,
-      110,  114,  107,  109,  115,  116,  119,  112,  114,  108,
-      117,  113,  109,  111,  107,  110,  120,  122,  121,  116,
-      119,  124,  130,  123,  125,  127,  555,  116,  130,  132,
-      126,  119,  121,  123,  125,  127,  120,  128,  122,  126,
+       78,   85,   79,   86,   89,   90,   84,   91,   94,   99,
+       86,   96,   80,   92,  100,   95,   91,   89,   97,   99,
+      100,   90,  103,   85,   85,   85,   98,   85,   97,   92,
+       94,   95,   96,   94,  101,  102,   98,  104,  105,  106,
+      107,  103,   97,  101,  108,  109,  114,  111,  110,  102,
+       98,  112,  108,  113,  107,  109,  111,  118,  121,  104,
+      108,  112,  105,  113,  110,  114,  116,  106,  117,  109,
+      115,  111,  108,  110,  120,  112,  123,  115,  121,  118,
+      116,  122,  117,  124,  125,  131,  126,  132,  120,  132,
+      117,  131,  127,  124,  128,  122,  126,  123,  129,  120,
 
-      126,  131,  128,  131,  129,  124,  133,  123,  125,  126,
-      146,  132,  126,  136,  136,  136,  136,  126,  129,  145,
-      129,  136,  148,  149,  156,  145,  151,  136,  133,  146,
-      153,  145,  148,  152,  133,  138,  138,  138,  138,  138,
-      151,  152,  157,  138,  158,  149,  153,  156,  157,  138,
-      139,  139,  155,  139,  139,  139,  139,  139,  159,  160,
-      158,  155,  162,  161,  164,  165,  166,  167,  168,  162,
-      169,  170,  159,  161,  164,  160,  169,  161,  171,  172,
-      553,  173,  176,  551,  175,  174,  164,  167,  165,  172,
-      166,  173,  174,  175,  168,  177,  172,  171,  178,  170,
+      554,  127,  127,  129,  128,  133,  130,  124,  125,  134,
+      126,  127,  152,  149,  127,  139,  139,  139,  139,  127,
+      130,  169,  130,  139,  148,  151,  159,  133,  156,  139,
+      148,  134,  149,  154,  152,  151,  148,  134,  141,  141,
+      141,  141,  141,  155,  156,  169,  141,  154,  162,  159,
+      161,  155,  141,  142,  142,  158,  142,  142,  142,  142,
+      142,  160,  162,  163,  158,  165,  161,  160,  164,  170,
+      167,  168,  165,  171,  173,  172,  174,  176,  164,  163,
+      167,  172,  164,  175,  177,  179,  180,  176,  178,  170,
+      183,  177,  167,  175,  168,  174,  180,  178,  174,  171,
 
-      171,  179,  176,  180,  181,  177,  182,  183,  178,  184,
-      185,  179,  186,  188,  181,  189,  183,  197,  190,  200,
-      201,  182,  180,  188,  204,  179,  185,  205,  255,  206,
-      207,  184,  212,  189,  190,  550,  255,  186,  197,  206,
-      219,  217,  212,  200,  201,  203,  203,  203,  203,  213,
-      204,  205,  203,  203,  207,  203,  203,  203,  203,  203,
-      203,  211,  216,  217,  219,  220,  221,  222,  213,  223,
-      224,  226,  211,  225,  230,  233,  237,  222,  221,  216,
-      224,  220,  236,  225,  238,  233,  216,  240,  224,  223,
-      237,  242,  236,  230,  239,  245,  240,  226,  241,  246,
+      175,  181,  173,  182,  184,  179,  185,  186,  187,  183,
+      188,  181,  189,  182,  184,  191,  186,  192,  193,  200,
+      203,  185,  204,  209,  216,  191,  188,  182,  208,  210,
+      187,  214,  553,  209,  193,  192,  552,  189,  207,  219,
+      200,  215,  214,  216,  203,  220,  204,  206,  206,  206,
+      206,  215,  208,  210,  206,  206,  219,  206,  206,  206,
+      206,  206,  206,  219,  207,  222,  223,  220,  224,  225,
+      226,  228,  229,  227,  233,  236,  239,  241,  240,  225,
+      224,  228,  223,  227,  245,  236,  239,  243,  248,  222,
+      226,  227,  240,  233,  241,  242,  243,  244,  229,  245,
 
-      239,  238,  243,  253,  241,  261,  242,  243,  248,  248,
-      248,  248,  549,  261,  245,  259,  248,  250,  250,  250,
-      250,  259,  248,  246,  249,  249,  253,  249,  249,  249,
-      249,  251,  251,  251,  251,  251,  252,  252,  252,  252,
-      252,  254,  256,  258,  262,  264,  263,  265,  267,  266,
-      268,  264,  270,  269,  544,  276,  272,  277,  271,  254,
-      256,  258,  263,  266,  271,  265,  272,  268,  262,  269,
-      273,  278,  279,  282,  270,  284,  267,  283,  273,  276,
-      286,  277,  287,  283,  288,  284,  289,  290,  298,  282,
-      292,  291,  286,  295,  278,  296,  278,  279,  297,  300,
+      246,  242,  249,  244,  258,  246,  257,  248,  251,  251,
+      251,  251,  258,  547,  252,  252,  251,  252,  252,  252,
+      252,  256,  251,  259,  257,  261,  249,  253,  253,  253,
+      253,  254,  254,  254,  254,  254,  255,  255,  255,  255,
+      255,  259,  262,  261,  256,  264,  265,  266,  262,  267,
+      268,  269,  270,  264,  271,  267,  272,  273,  274,  275,
+      279,  280,  282,  266,  274,  269,  276,  281,  268,  275,
+      265,  271,  272,  285,  276,  286,  287,  290,  291,  273,
+      270,  286,  289,  292,  279,  280,  287,  282,  293,  285,
+      281,  294,  281,  295,  289,  298,  300,  299,  301,  290,
 
-      301,  302,  290,  305,  287,  289,  288,  291,  306,  292,
-      301,  296,  295,  309,  308,  298,  306,  305,  310,  314,
-      302,  313,  297,  309,  300,  308,  316,  314,  317,  310,
-      318,  313,  320,  323,  317,  325,  316,  324,  326,  328,
-      320,  325,  330,  333,  323,  339,  318,  332,  324,  335,
-      335,  335,  335,  338,  339,  341,  326,  333,  332,  338,
-      342,  328,  345,  343,  346,  344,  330,  348,  342,  343,
-      332,  344,  347,  349,  346,  350,  351,  357,  341,  347,
-      352,  354,  358,  359,  345,  350,  361,  348,  352,  354,
-      360,  357,  362,  349,  351,  364,  358,  365,  366,  367,
+      291,  303,  292,  293,  305,  304,  312,  294,  308,  309,
+      311,  317,  295,  299,  298,  304,  312,  309,  313,  317,
+      300,  311,  308,  305,  316,  301,  303,  319,  321,  313,
+      320,  323,  326,  329,  316,  327,  320,  319,  331,  323,
+      333,  328,  335,  326,  321,  336,  327,  328,  344,  539,
+      348,  329,  341,  335,  338,  338,  338,  338,  341,  336,
+      331,  342,  346,  347,  333,  335,  345,  349,  346,  347,
+      342,  344,  348,  350,  345,  351,  352,  349,  353,  354,
+      350,  355,  357,  362,  360,  361,  365,  364,  353,  355,
+      357,  367,  363,  368,  369,  351,  352,  354,  360,  361,
 
-      360,  359,  361,  369,  370,  372,  371,  374,  373,  367,
-      362,  376,  370,  377,  378,  365,  371,  374,  366,  364,
-      375,  369,  373,  379,  380,  376,  381,  383,  375,  384,
-      372,  386,  377,  385,  388,  380,  390,  392,  378,  379,
-      383,  386,  385,  391,  390,  393,  381,  395,  396,  392,
-      394,  398,  391,  384,  388,  399,  394,  401,  402,  393,
-      403,  405,  406,  407,  410,  398,  396,  409,  414,  415,
-      403,  395,  409,  409,  420,  401,  414,  419,  425,  399,
-      418,  406,  407,  419,  405,  422,  415,  402,  410,  426,
-      418,  428,  429,  422,  430,  432,  437,  433,  420,  444,
+      370,  362,  363,  364,  365,  372,  375,  374,  373,  377,
+      370,  368,  376,  378,  369,  367,  373,  374,  379,  377,
+      380,  378,  381,  372,  382,  383,  376,  384,  386,  387,
+      391,  375,  379,  388,  389,  393,  383,  395,  396,  380,
+      382,  386,  388,  393,  389,  394,  381,  384,  398,  395,
+      391,  397,  396,  387,  394,  399,  401,  397,  402,  404,
+      405,  406,  408,  412,  409,  410,  413,  417,  412,  412,
+      401,  406,  398,  399,  418,  417,  421,  404,  423,  428,
+      425,  422,  402,  409,  410,  408,  421,  422,  425,  405,
+      413,  418,  429,  431,  432,  433,  435,  436,  440,  446,
 
-      425,  437,  443,  440,  445,  432,  446,  426,  433,  447,
-      429,  449,  430,  445,  450,  428,  440,  453,  443,  454,
-      446,  455,  444,  536,  456,  462,  457,  447,  459,  460,
-      461,  464,  463,  450,  465,  449,  457,  467,  459,  453,
-      456,  454,  463,  465,  466,  460,  461,  462,  455,  464,
-      469,  471,  470,  472,  466,  473,  474,  476,  475,  472,
-      477,  467,  470,  479,  482,  473,  475,  471,  480,  481,
-      484,  485,  477,  486,  482,  492,  469,  494,  496,  500,
-      474,  476,  495,  486,  492,  500,  484,  494,  479,  485,
-      495,  497,  480,  481,  499,  501,  503,  496,  497,  506,
+      447,  428,  423,  440,  450,  443,  435,  448,  436,  452,
+      429,  449,  432,  433,  456,  446,  448,  431,  443,  453,
+      457,  458,  450,  447,  459,  449,  472,  460,  463,  462,
+      464,  465,  467,  452,  468,  466,  456,  460,  453,  462,
+      459,  469,  457,  468,  463,  466,  464,  470,  458,  473,
+      467,  469,  472,  465,  474,  475,  476,  477,  479,  473,
+      478,  475,  480,  482,  487,  483,  476,  484,  478,  485,
+      474,  470,  488,  489,  480,  495,  497,  498,  499,  485,
+      487,  477,  479,  489,  495,  498,  497,  500,  482,  483,
+      488,  484,  502,  503,  500,  504,  506,  499,  509,  503,
 
-      507,  508,  499,  511,  509,  506,  512,  513,  514,  501,
-      507,  511,  515,  516,  520,  513,  517,  519,  515,  521,
-      503,  509,  517,  522,  514,  508,  523,  526,  525,  516,
-      512,  520,  519,  522,  525,  527,  528,  526,  529,  521,
-      532,  533,  534,  531,  535,  541,  537,  538,  540,  539,
-      523,  527,  528,  531,  529,  538,  542,  543,  547,  533,
-      535,  534,  537,  539,  532,  545,  540,  541,  546,  548,
-      552,  554,  557,  545,  530,  524,  546,  518,  552,  543,
-      542,  554,  510,  505,  504,  502,  498,  493,  547,  491,
-      490,  489,  488,  548,  557,  560,  560,  560,  560,  560,
+      502,  510,  511,  515,  509,  512,  514,  516,  517,  504,
+      518,  510,  519,  520,  514,  516,  518,  522,  523,  520,
+      506,  524,  512,  525,  517,  526,  511,  515,  519,  529,
+      528,  530,  522,  525,  531,  523,  528,  532,  534,  529,
+      535,  524,  536,  537,  541,  538,  545,  530,  534,  526,
+      531,  540,  541,  532,  542,  543,  544,  546,  548,  550,
+      536,  538,  537,  549,  535,  557,  548,  540,  542,  551,
+      545,  549,  555,  543,  560,  557,  533,  527,  544,  546,
+      555,  521,  513,  508,  507,  505,  501,  496,  494,  550,
+      493,  492,  491,  551,  490,  486,  560,  563,  563,  563,
 
-      561,  561,  563,  487,  563,  563,  563,  564,  564,  566,
-      566,  566,  566,  566,  483,  478,  468,  458,  452,  451,
-      448,  442,  441,  439,  438,  436,  435,  434,  431,  427,
-      424,  423,  421,  417,  416,  413,  412,  411,  408,  404,
-      400,  397,  389,  387,  382,  368,  363,  356,  355,  353,
-      340,  337,  336,  334,  331,  329,  327,  322,  321,  319,
-      315,  312,  311,  307,  304,  299,  294,  293,  285,  281,
-      280,  275,  274,  260,  257,  244,  235,  234,  232,  231,
-      229,  228,  227,  218,  215,  214,  210,  209,  208,  202,
-      199,  198,  196,  195,  194,  193,  192,  191,  187,  163,
+      563,  563,  564,  564,  565,  565,  566,  481,  566,  566,
+      566,  567,  567,  568,  568,  568,  568,  568,  570,  570,
+      570,  570,  570,  471,  461,  455,  454,  451,  445,  444,
+      442,  441,  439,  438,  437,  434,  430,  427,  426,  424,
+      420,  419,  416,  415,  414,  411,  407,  403,  400,  392,
+      390,  385,  371,  366,  359,  358,  356,  343,  340,  339,
+      337,  334,  332,  330,  325,  324,  322,  318,  315,  314,
+      310,  307,  302,  297,  296,  288,  284,  283,  278,  277,
+      263,  260,  247,  238,  237,  235,  234,  232,  231,  230,
+      221,  218,  217,  213,  212,  211,  205,  202,  201,  199,
 
-      154,  150,  147,  144,  141,  137,  134,  118,   92,   71,
-       62,   52,   41,   39,    8,    7,    3,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559
+      198,  197,  196,  195,  194,  190,  166,  157,  153,  150,
+      147,  144,  140,  136,  135,  119,   93,   72,   63,   53,
+       43,   41,   39,    8,    7,    3,  562,  562,  562,  562,
+      562,  562,  562,  562,  562,  562,  562,  562,  562,  562,
+      562,  562,  562,  562,  562,  562,  562,  562,  562,  562,
+      562,  562,  562,  562,  562,  562,  562,  562,  562,  562,
+      562,  562,  562,  562,  562,  562,  562,  562,  562,  562,
+      562
     } ;
 
-/* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[139] =
-    {   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, 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, 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, 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, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,     };
-
-static yy_state_type yy_last_accepting_state;
-static char *yy_last_accepting_cpos;
-
-extern int llvmAsm_flex_debug;
-int llvmAsm_flex_debug = 0;
-
-/* The intent behind this definition is that it'll catch
- * any uses of REJECT which flex missed.
- */
-#define REJECT reject_used_but_not_detected
+static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
+static char *yy_full_match;
+static int yy_lp;
+#define REJECT \
+{ \
+*yy_cp = yy_hold_char; /* undo effects of setting up yytext */ \
+yy_cp = yy_full_match; /* restore poss. backed-over text */ \
+++yy_lp; \
+goto find_rule; \
+}
 #define yymore() yymore_used_but_not_detected
 #define YY_MORE_ADJ 0
 #define YY_RESTORE_YY_MORE_OFFSET
-char *llvmAsmtext;
-#line 1 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+char *yytext;
+#line 1 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
+#define INITIAL 0
 /*===-- Lexer.l - Scanner for llvm assembly files --------------*- C++ -*--===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -951,7 +904,8 @@
 //  This file implements the flex scanner for LLVM assembly languages files.
 //
 //===----------------------------------------------------------------------===*/
-#line 28 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#define YY_NEVER_INTERACTIVE 1
+#line 28 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 #include "ParserInternals.h"
 #include "llvm/Module.h"
 #include <list>
@@ -960,10 +914,10 @@
 #include <cstdlib>
 
 void set_scan_file(FILE * F){
-  llvmAsm_switch_to_buffer(llvmAsm_create_buffer(F,YY_BUF_SIZE ) );
+  yy_switch_to_buffer(yy_create_buffer( F, YY_BUF_SIZE ) );
 }
 void set_scan_string (const char * str) {
-  llvmAsm_scan_string (str);
+  yy_scan_string (str);
 }
 
 // Construct a token value for a non-obsolete token
@@ -1084,23 +1038,7 @@
 /* HexIntConstant - Hexadecimal constant generated by the CFE to avoid forcing
  * it to deal with 64 bit numbers.
  */
-#line 1088 "Lexer.cpp"
-
-#define INITIAL 0
-
-#ifndef YY_NO_UNISTD_H
-/* Special case for "unistd.h", since it is non-ANSI. We include it way
- * down here because we want the user's section 1 to have been scanned first.
- * The user has a chance to override it with an option.
- */
-#include <unistd.h>
-#endif
-
-#ifndef YY_EXTRA_TYPE
-#define YY_EXTRA_TYPE void *
-#endif
-
-static int yy_init_globals (void );
+#line 1042 "Lexer.cpp"
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -1108,30 +1046,65 @@
 
 #ifndef YY_SKIP_YYWRAP
 #ifdef __cplusplus
-extern "C" int llvmAsmwrap (void );
+extern "C" int yywrap YY_PROTO(( void ));
 #else
-extern int llvmAsmwrap (void );
+extern int yywrap YY_PROTO(( void ));
 #endif
 #endif
 
-    static inline void yyunput (int c,char *buf_ptr  );
-    
+#ifndef YY_NO_UNPUT
+static inline void yyunput YY_PROTO(( int c, char *buf_ptr ));
+#endif
+
 #ifndef yytext_ptr
-static void yy_flex_strncpy (char *,yyconst char *,int );
+static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
 #endif
 
 #ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * );
+static int yy_flex_strlen YY_PROTO(( yyconst char * ));
 #endif
 
 #ifndef YY_NO_INPUT
-
 #ifdef __cplusplus
-static int yyinput (void );
+static int yyinput YY_PROTO(( void ));
 #else
-static int input (void );
+static int input YY_PROTO(( void ));
+#endif
 #endif
 
+#if YY_STACK_USED
+static int yy_start_stack_ptr = 0;
+static int yy_start_stack_depth = 0;
+static int *yy_start_stack = 0;
+#ifndef YY_NO_PUSH_STATE
+static void yy_push_state YY_PROTO(( int new_state ));
+#endif
+#ifndef YY_NO_POP_STATE
+static void yy_pop_state YY_PROTO(( void ));
+#endif
+#ifndef YY_NO_TOP_STATE
+static int yy_top_state YY_PROTO(( void ));
+#endif
+
+#else
+#define YY_NO_PUSH_STATE 1
+#define YY_NO_POP_STATE 1
+#define YY_NO_TOP_STATE 1
+#endif
+
+#ifdef YY_MALLOC_DECL
+YY_MALLOC_DECL
+#else
+#if __STDC__
+#ifndef __cplusplus
+#include <stdlib.h>
+#endif
+#else
+/* Just try to get by without declaring the routines.  This will fail
+ * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
+ * or sizeof(void*) != sizeof(int).
+ */
+#endif
 #endif
 
 /* Amount of stuff to slurp up with each read. */
@@ -1140,11 +1113,12 @@
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
+
 #ifndef ECHO
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO (void) fwrite( llvmAsmtext, llvmAsmleng, 1, llvmAsmout )
+#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
 #endif
 
 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
@@ -1152,35 +1126,21 @@
  */
 #ifndef YY_INPUT
 #define YY_INPUT(buf,result,max_size) \
-	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+	if ( yy_current_buffer->yy_is_interactive ) \
 		{ \
-		int c = '*'; \
-		size_t n; \
+		int c = '*', n; \
 		for ( n = 0; n < max_size && \
-			     (c = getc( llvmAsmin )) != EOF && c != '\n'; ++n ) \
+			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
 			buf[n] = (char) c; \
 		if ( c == '\n' ) \
 			buf[n++] = (char) c; \
-		if ( c == EOF && ferror( llvmAsmin ) ) \
+		if ( c == EOF && ferror( yyin ) ) \
 			YY_FATAL_ERROR( "input in flex scanner failed" ); \
 		result = n; \
 		} \
-	else \
-		{ \
-		errno=0; \
-		while ( (result = fread(buf, 1, max_size, llvmAsmin))==0 && ferror(llvmAsmin)) \
-			{ \
-			if( errno != EINTR) \
-				{ \
-				YY_FATAL_ERROR( "input in flex scanner failed" ); \
-				break; \
-				} \
-			errno=0; \
-			clearerr(llvmAsmin); \
-			} \
-		}\
-\
-
+	else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
+		  && ferror( yyin ) ) \
+		YY_FATAL_ERROR( "input in flex scanner failed" );
 #endif
 
 /* No semi-colon after return; correct usage is to write "yyterminate();" -
@@ -1201,20 +1161,14 @@
 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
 #endif
 
-/* end tables serialization structures and prototypes */
-
 /* Default declaration of generated scanner - a define so the user can
  * easily add parameters.
  */
 #ifndef YY_DECL
-#define YY_DECL_IS_OURS 1
+#define YY_DECL int yylex YY_PROTO(( void ))
+#endif
 
-extern int llvmAsmlex (void);
-
-#define YY_DECL int llvmAsmlex (void)
-#endif /* !YY_DECL */
-
-/* Code executed at the beginning of each rule, after llvmAsmtext and llvmAsmleng
+/* Code executed at the beginning of each rule, after yytext and yyleng
  * have been set up.
  */
 #ifndef YY_USER_ACTION
@@ -1229,375 +1183,375 @@
 #define YY_RULE_SETUP \
 	YY_USER_ACTION
 
-/** The main scanner function which does all the work.
- */
 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 190 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+
+#line 191 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 
 
-#line 1244 "Lexer.cpp"
+#line 1196 "Lexer.cpp"
 
-	if ( !(yy_init) )
+	if ( yy_init )
 		{
-		(yy_init) = 1;
+		yy_init = 0;
 
 #ifdef YY_USER_INIT
 		YY_USER_INIT;
 #endif
 
-		if ( ! (yy_start) )
-			(yy_start) = 1;	/* first start state */
+		if ( ! yy_start )
+			yy_start = 1;	/* first start state */
 
-		if ( ! llvmAsmin )
-			llvmAsmin = stdin;
+		if ( ! yyin )
+			yyin = stdin;
 
-		if ( ! llvmAsmout )
-			llvmAsmout = stdout;
+		if ( ! yyout )
+			yyout = stdout;
 
-		if ( ! YY_CURRENT_BUFFER ) {
-			llvmAsmensure_buffer_stack ();
-			YY_CURRENT_BUFFER_LVALUE =
-				llvmAsm_create_buffer(llvmAsmin,YY_BUF_SIZE );
-		}
+		if ( ! yy_current_buffer )
+			yy_current_buffer =
+				yy_create_buffer( yyin, YY_BUF_SIZE );
 
-		llvmAsm_load_buffer_state( );
+		yy_load_buffer_state();
 		}
 
 	while ( 1 )		/* loops until end-of-file is reached */
 		{
-		yy_cp = (yy_c_buf_p);
+		yy_cp = yy_c_buf_p;
 
-		/* Support of llvmAsmtext. */
-		*yy_cp = (yy_hold_char);
+		/* Support of yytext. */
+		*yy_cp = yy_hold_char;
 
 		/* yy_bp points to the position in yy_ch_buf of the start of
 		 * the current run.
 		 */
 		yy_bp = yy_cp;
 
-		yy_current_state = (yy_start);
+		yy_current_state = yy_start;
+		yy_state_ptr = yy_state_buf;
+		*yy_state_ptr++ = yy_current_state;
 yy_match:
 		do
 			{
 			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
-			if ( yy_accept[yy_current_state] )
-				{
-				(yy_last_accepting_state) = yy_current_state;
-				(yy_last_accepting_cpos) = yy_cp;
-				}
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 560 )
+				if ( yy_current_state >= 563 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			*yy_state_ptr++ = yy_current_state;
 			++yy_cp;
 			}
-		while ( yy_current_state != 559 );
-		yy_cp = (yy_last_accepting_cpos);
-		yy_current_state = (yy_last_accepting_state);
+		while ( yy_current_state != 562 );
 
 yy_find_action:
-		yy_act = yy_accept[yy_current_state];
+		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] )
+				{
+				yy_act = yy_acclist[yy_lp];
+					{
+					yy_full_match = yy_cp;
+					break;
+					}
+				}
+			--yy_cp;
+			yy_current_state = *--yy_state_ptr;
+			yy_lp = yy_accept[yy_current_state];
+			}
 
 		YY_DO_BEFORE_ACTION;
 
-		if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
+		if ( yy_act != YY_END_OF_BUFFER )
 			{
 			int yyl;
-			for ( yyl = 0; yyl < llvmAsmleng; ++yyl )
-				if ( llvmAsmtext[yyl] == '\n' )
-					   
-    llvmAsmlineno++;
-;
+			for ( yyl = 0; yyl < yyleng; ++yyl )
+				if ( yytext[yyl] == '\n' )
+					++yylineno;
 			}
 
 do_action:	/* This label is used only to access EOF actions. */
 
+
 		switch ( yy_act )
 	{ /* beginning of action switch */
-			case 0: /* must back up */
-			/* undo the effects of YY_DO_BEFORE_ACTION */
-			*yy_cp = (yy_hold_char);
-			yy_cp = (yy_last_accepting_cpos);
-			yy_current_state = (yy_last_accepting_state);
-			goto yy_find_action;
-
 case 1:
 YY_RULE_SETUP
-#line 192 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 193 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { /* Ignore comments for now */ }
 	YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 194 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 195 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return BEGINTOK; }
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 195 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 196 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return ENDTOK; }
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 196 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 197 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return TRUETOK;  }
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 197 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 198 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return FALSETOK; }
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 198 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 199 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return DECLARE; }
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 199 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 200 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return DEFINE; }
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 200 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 201 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return GLOBAL; }
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 201 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 202 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return CONSTANT; }
 	YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 202 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 203 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return INTERNAL; }
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 203 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 204 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return LINKONCE; }
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 204 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 205 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return WEAK; }
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 205 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 206 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return APPENDING; }
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 206 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 207 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return DLLIMPORT; }
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 207 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 208 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return DLLEXPORT; }
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 208 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 209 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return HIDDEN; }
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 209 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 210 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return PROTECTED; }
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 210 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 211 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return EXTERN_WEAK; }
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 211 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 212 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return EXTERNAL; }
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 212 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 213 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return THREAD_LOCAL; }
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 213 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 214 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return ZEROINITIALIZER; }
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 214 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 215 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return DOTDOTDOT; }
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 215 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 216 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return UNDEF; }
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 216 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 217 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return NULL_TOK; }
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 217 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 218 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return TO; }
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 218 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 219 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return TAIL; }
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 219 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 220 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return TARGET; }
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 220 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 221 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return TRIPLE; }
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 221 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 222 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return DEPLIBS; }
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 222 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 223 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return DATALAYOUT; }
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 223 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 224 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return VOLATILE; }
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 224 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 225 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return ALIGN;  }
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 225 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 226 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return SECTION; }
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 226 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 227 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return ALIAS; }
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 227 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 228 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return MODULE; }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 228 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 229 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return ASM_TOK; }
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 229 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 230 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return SIDEEFFECT; }
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 231 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 232 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return CC_TOK; }
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 232 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 233 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return CCC_TOK; }
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 233 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 234 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return FASTCC_TOK; }
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 234 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 235 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return COLDCC_TOK; }
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 235 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 236 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return X86_STDCALLCC_TOK; }
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 236 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 237 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return X86_FASTCALLCC_TOK; }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 238 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 239 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return INREG; }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 239 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 240 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return SRET;  }
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 240 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 241 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return NOUNWIND; }
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 241 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 242 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return NORETURN; }
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 243 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 244 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TY(Type::VoidTy,  VOID);  }
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 244 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 245 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TY(Type::FloatTy, FLOAT); }
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 245 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 246 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TY(Type::DoubleTy,DOUBLE);}
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 246 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 247 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TY(Type::LabelTy, LABEL); }
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 247 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 248 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return TYPE;   }
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 248 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 249 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return OPAQUE; }
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 249 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
-{ uint64_t NumBits = atoull(llvmAsmtext+1);
+#line 250 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
+{ uint64_t NumBits = atoull(yytext+1);
                   if (NumBits < IntegerType::MIN_INT_BITS || 
                       NumBits > IntegerType::MAX_INT_BITS)
                     GenerateError("Bitwidth for integer type out of range!");
@@ -1607,413 +1561,419 @@
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 257 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 258 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, Add, ADD); }
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 258 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 259 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, Sub, SUB); }
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 259 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 260 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, Mul, MUL); }
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 260 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 261 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, UDiv, UDIV); }
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 261 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 262 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, SDiv, SDIV); }
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 262 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 263 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, FDiv, FDIV); }
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 263 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 264 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, URem, UREM); }
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 264 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 265 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, SRem, SREM); }
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 265 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 266 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, FRem, FREM); }
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 266 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 267 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, Shl, SHL); }
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 267 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 268 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, LShr, LSHR); }
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 268 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 269 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, AShr, ASHR); }
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 269 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 270 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, And, AND); }
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 270 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 271 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, Or , OR ); }
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 271 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 272 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, Xor, XOR); }
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 272 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 273 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(OtherOpVal,  ICmp,  ICMP); }
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 273 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 274 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(OtherOpVal,  FCmp,  FCMP); }
 	YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 275 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 276 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return EQ;  }
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 276 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 277 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return NE;  }
 	YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 277 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 278 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return SLT; }
 	YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 278 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 279 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return SGT; }
 	YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 279 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 280 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return SLE; }
 	YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 280 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 281 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return SGE; }
 	YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 281 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 282 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return ULT; }
 	YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 282 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 283 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return UGT; }
 	YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 283 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 284 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return ULE; }
 	YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 284 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 285 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return UGE; }
 	YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 285 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 286 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return OEQ; }
 	YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 286 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 287 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return ONE; }
 	YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 287 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 288 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return OLT; }
 	YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 288 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 289 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return OGT; }
 	YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 289 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 290 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return OLE; }
 	YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 290 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 291 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return OGE; }
 	YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 291 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 292 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return ORD; }
 	YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 292 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 293 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return UNO; }
 	YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 293 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 294 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return UEQ; }
 	YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 294 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 295 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { return UNE; }
 	YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 296 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 297 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(OtherOpVal, PHI, PHI_TOK); }
 	YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 297 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 298 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(OtherOpVal, Call, CALL); }
 	YY_BREAK
 case 94:
 YY_RULE_SETUP
-#line 298 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 299 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(CastOpVal, Trunc, TRUNC); }
 	YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 299 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 300 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(CastOpVal, ZExt, ZEXT); }
 	YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 300 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 301 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(CastOpVal, SExt, SEXT); }
 	YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 301 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 302 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(CastOpVal, FPTrunc, FPTRUNC); }
 	YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 302 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 303 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(CastOpVal, FPExt, FPEXT); }
 	YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 303 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 304 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(CastOpVal, UIToFP, UITOFP); }
 	YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 304 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 305 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(CastOpVal, SIToFP, SITOFP); }
 	YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 305 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 306 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(CastOpVal, FPToUI, FPTOUI); }
 	YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 306 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 307 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(CastOpVal, FPToSI, FPTOSI); }
 	YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 307 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 308 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(CastOpVal, IntToPtr, INTTOPTR); }
 	YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 308 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 309 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(CastOpVal, PtrToInt, PTRTOINT); }
 	YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 309 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 310 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(CastOpVal, BitCast, BITCAST); }
 	YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 310 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 311 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(OtherOpVal, Select, SELECT); }
 	YY_BREAK
 case 107:
 YY_RULE_SETUP
-#line 311 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 312 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(OtherOpVal, VAArg , VAARG); }
 	YY_BREAK
 case 108:
 YY_RULE_SETUP
-#line 312 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 313 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(TermOpVal, Ret, RET); }
 	YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 313 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 314 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(TermOpVal, Br, BR); }
 	YY_BREAK
 case 110:
 YY_RULE_SETUP
-#line 314 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 315 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(TermOpVal, Switch, SWITCH); }
 	YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 315 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 316 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(TermOpVal, Invoke, INVOKE); }
 	YY_BREAK
 case 112:
 YY_RULE_SETUP
-#line 316 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 317 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(TermOpVal, Unwind, UNWIND); }
 	YY_BREAK
 case 113:
 YY_RULE_SETUP
-#line 317 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 318 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(TermOpVal, Unreachable, UNREACHABLE); }
 	YY_BREAK
 case 114:
 YY_RULE_SETUP
-#line 319 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 320 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(MemOpVal, Malloc, MALLOC); }
 	YY_BREAK
 case 115:
 YY_RULE_SETUP
-#line 320 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 321 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(MemOpVal, Alloca, ALLOCA); }
 	YY_BREAK
 case 116:
 YY_RULE_SETUP
-#line 321 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 322 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(MemOpVal, Free, FREE); }
 	YY_BREAK
 case 117:
 YY_RULE_SETUP
-#line 322 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 323 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(MemOpVal, Load, LOAD); }
 	YY_BREAK
 case 118:
 YY_RULE_SETUP
-#line 323 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 324 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(MemOpVal, Store, STORE); }
 	YY_BREAK
 case 119:
 YY_RULE_SETUP
-#line 324 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 325 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(MemOpVal, GetElementPtr, GETELEMENTPTR); }
 	YY_BREAK
 case 120:
 YY_RULE_SETUP
-#line 326 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 327 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(OtherOpVal, ExtractElement, EXTRACTELEMENT); }
 	YY_BREAK
 case 121:
 YY_RULE_SETUP
-#line 327 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 328 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(OtherOpVal, InsertElement, INSERTELEMENT); }
 	YY_BREAK
 case 122:
 YY_RULE_SETUP
-#line 328 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 329 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { RET_TOK(OtherOpVal, ShuffleVector, SHUFFLEVECTOR); }
 	YY_BREAK
 case 123:
 YY_RULE_SETUP
-#line 331 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 332 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 {
-                  UnEscapeLexed(llvmAsmtext+1);
-                  llvmAsmlval.StrVal = strdup(llvmAsmtext+1);             // Skip %
+                  UnEscapeLexed(yytext+1);
+                  llvmAsmlval.StrVal = strdup(yytext+1);             // Skip %
                   return LOCALVAR;
                 }
 	YY_BREAK
 case 124:
 YY_RULE_SETUP
-#line 336 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 337 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 {
-                  UnEscapeLexed(llvmAsmtext+1);
-                  llvmAsmlval.StrVal = strdup(llvmAsmtext+1);             // Skip @
+                  UnEscapeLexed(yytext+1);
+                  llvmAsmlval.StrVal = strdup(yytext+1);             // Skip @
                   return GLOBALVAR;
                 }
 	YY_BREAK
 case 125:
 YY_RULE_SETUP
-#line 341 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 342 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 {
-                  llvmAsmtext[strlen(llvmAsmtext)-1] = 0;  // nuke colon
-                  UnEscapeLexed(llvmAsmtext);
-                  llvmAsmlval.StrVal = strdup(llvmAsmtext);
+                  yytext[strlen(yytext)-1] = 0;  // nuke colon
+                  UnEscapeLexed(yytext);
+                  llvmAsmlval.StrVal = strdup(yytext);
                   return LABELSTR;
                 }
 	YY_BREAK
 case 126:
-/* rule 126 can match eol */
 YY_RULE_SETUP
-#line 347 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 348 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 {
-                  llvmAsmtext[strlen(llvmAsmtext)-2] = 0;  // nuke colon, end quote
-                  UnEscapeLexed(llvmAsmtext+1);
-                  llvmAsmlval.StrVal = strdup(llvmAsmtext+1);
+                  yytext[strlen(yytext)-2] = 0;  // nuke colon, end quote
+                  UnEscapeLexed(yytext+1);
+                  llvmAsmlval.StrVal = strdup(yytext+1);
                   return LABELSTR;
                 }
 	YY_BREAK
 case 127:
-/* rule 127 can match eol */
 YY_RULE_SETUP
-#line 354 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 355 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 { // Note that we cannot unescape a string constant here!  The
                    // string constant might contain a \00 which would not be
                    // understood by the string stuff.  It is valid to make a
                    // [sbyte] c"Hello World\00" constant, for example.
                    //
-                   llvmAsmtext[strlen(llvmAsmtext)-1] = 0;           // nuke end quote
-                   llvmAsmlval.StrVal = strdup(llvmAsmtext+1);  // Nuke start quote
+                   yytext[strlen(yytext)-1] = 0;           // nuke end quote
+                   llvmAsmlval.StrVal = strdup(yytext+1);  // Nuke start quote
                    return STRINGCONSTANT;
                  }
 	YY_BREAK
 case 128:
-/* rule 128 can match eol */
 YY_RULE_SETUP
-#line 363 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 364 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 {
-                     llvmAsmtext[strlen(llvmAsmtext)-1] = 0;           // nuke end quote
-                     llvmAsmlval.StrVal = strdup(llvmAsmtext+2);  // Nuke @, quote
+                     yytext[strlen(yytext)-1] = 0;           // nuke end quote
+                     llvmAsmlval.StrVal = strdup(yytext+2);  // Nuke @, quote
                      return ATSTRINGCONSTANT;
                    }
 	YY_BREAK
 case 129:
 YY_RULE_SETUP
-#line 369 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
-{ int len = strlen(llvmAsmtext); 
+#line 370 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
+{
+                     yytext[strlen(yytext)-1] = 0;           // nuke end quote
+                     llvmAsmlval.StrVal = strdup(yytext+2);  // Nuke @, quote
+                     return PCTSTRINGCONSTANT;
+                   }
+	YY_BREAK
+case 130:
+YY_RULE_SETUP
+#line 375 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
+{ int len = strlen(yytext); 
                   uint32_t numBits = ((len * 64) / 19) + 1;
-                  APInt Tmp(numBits, llvmAsmtext, len, 10);
+                  APInt Tmp(numBits, yytext, len, 10);
                   uint32_t activeBits = Tmp.getActiveBits();
                   if (activeBits > 0 && activeBits < numBits)
                     Tmp.trunc(activeBits);
@@ -2026,12 +1986,12 @@
                   }
                 }
 	YY_BREAK
-case 130:
+case 131:
 YY_RULE_SETUP
-#line 383 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
-{ int len = strlen(llvmAsmtext); 
+#line 389 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
+{ int len = strlen(yytext); 
                   uint32_t numBits = (((len-1) * 64) / 19) + 2;
-                  APInt Tmp(numBits, llvmAsmtext, len, 10);
+                  APInt Tmp(numBits, yytext, len, 10);
                   uint32_t minBits = Tmp.getMinSignedBits();
                   if (minBits > 0 && minBits < numBits)
                     Tmp.trunc(minBits);
@@ -2044,19 +2004,19 @@
                   }
                 }
 	YY_BREAK
-case 131:
+case 132:
 YY_RULE_SETUP
-#line 398 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
-{ int len = strlen(llvmAsmtext+3) - 3;
+#line 404 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
+{ int len = strlen(yytext+3) - 3;
                    uint32_t bits = len * 4;
-                   APInt Tmp(bits, llvmAsmtext+3, len, 16);
+                   APInt Tmp(bits, yytext+3, len, 16);
                    uint32_t activeBits = Tmp.getActiveBits();
                    if (activeBits > 0 && activeBits < bits)
                      Tmp.trunc(activeBits);
                    if (Tmp.getBitWidth() > 64) {
                      llvmAsmlval.APIntVal = new APInt(Tmp);
-                     return llvmAsmtext[0] == 's' ? ESAPINTVAL : EUAPINTVAL;
-                   } else if (llvmAsmtext[0] == 's') {
+                     return yytext[0] == 's' ? ESAPINTVAL : EUAPINTVAL;
+                   } else if (yytext[0] == 's') {
                      llvmAsmlval.SInt64Val = Tmp.getSExtValue();
                      return ESINT64VAL;
                    } else {
@@ -2065,89 +2025,88 @@
                    }
                  }
 	YY_BREAK
-case 132:
+case 133:
 YY_RULE_SETUP
-#line 416 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 422 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 {
-                  uint64_t Val = atoull(llvmAsmtext+1);
+                  uint64_t Val = atoull(yytext+1);
                   if ((unsigned)Val != Val)
                     GenerateError("Invalid value number (too large)!");
                   llvmAsmlval.UIntVal = unsigned(Val);
                   return LOCALVAL_ID;
                 }
 	YY_BREAK
-case 133:
+case 134:
 YY_RULE_SETUP
-#line 423 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 429 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 {
-                  uint64_t Val = atoull(llvmAsmtext+1);
+                  uint64_t Val = atoull(yytext+1);
                   if ((unsigned)Val != Val)
                     GenerateError("Invalid value number (too large)!");
                   llvmAsmlval.UIntVal = unsigned(Val);
                   return GLOBALVAL_ID;
                 }
 	YY_BREAK
-case 134:
-YY_RULE_SETUP
-#line 431 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
-{ llvmAsmlval.FPVal = atof(llvmAsmtext); return FPVAL; }
-	YY_BREAK
 case 135:
 YY_RULE_SETUP
-#line 432 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
-{ llvmAsmlval.FPVal = HexToFP(llvmAsmtext); return FPVAL; }
+#line 437 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
+{ llvmAsmlval.FPVal = atof(yytext); return FPVAL; }
+	YY_BREAK
+case 136:
+YY_RULE_SETUP
+#line 438 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
+{ llvmAsmlval.FPVal = HexToFP(yytext); return FPVAL; }
 	YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 434 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 440 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 {
                   /* Make sure to free the internal buffers for flex when we are
                    * done reading our input!
                    */
-                  llvmAsm_delete_buffer(YY_CURRENT_BUFFER);
+                  yy_delete_buffer(YY_CURRENT_BUFFER);
                   return EOF;
                 }
 	YY_BREAK
-case 136:
-/* rule 136 can match eol */
-YY_RULE_SETUP
-#line 442 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
-{ /* Ignore whitespace */ }
-	YY_BREAK
 case 137:
 YY_RULE_SETUP
-#line 443 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
-{ return llvmAsmtext[0]; }
+#line 448 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
+{ /* Ignore whitespace */ }
 	YY_BREAK
 case 138:
 YY_RULE_SETUP
-#line 445 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
+#line 449 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
+{ return yytext[0]; }
+	YY_BREAK
+case 139:
+YY_RULE_SETUP
+#line 451 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 YY_FATAL_ERROR( "flex scanner jammed" );
 	YY_BREAK
-#line 2127 "Lexer.cpp"
+#line 2086 "Lexer.cpp"
 
 	case YY_END_OF_BUFFER:
 		{
 		/* Amount of text matched not including the EOB char. */
-		int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+		int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
 
 		/* Undo the effects of YY_DO_BEFORE_ACTION. */
-		*yy_cp = (yy_hold_char);
+		*yy_cp = yy_hold_char;
 		YY_RESTORE_YY_MORE_OFFSET
 
-		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+		if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
 			{
 			/* We're scanning a new file or input source.  It's
 			 * possible that this happened because the user
-			 * just pointed llvmAsmin at a new source and called
-			 * llvmAsmlex().  If so, then we have to assure
-			 * consistency between YY_CURRENT_BUFFER and our
+			 * just pointed yyin at a new source and called
+			 * yylex().  If so, then we have to assure
+			 * consistency between yy_current_buffer and our
 			 * globals.  Here is the right place to do so, because
 			 * this is the first action (other than possibly a
 			 * back-up) that will match for the new input source.
 			 */
-			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-			YY_CURRENT_BUFFER_LVALUE->yy_input_file = llvmAsmin;
-			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+			yy_n_chars = yy_current_buffer->yy_n_chars;
+			yy_current_buffer->yy_input_file = yyin;
+			yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
 			}
 
 		/* Note that here we test for yy_c_buf_p "<=" to the position
@@ -2157,13 +2116,13 @@
 		 * end-of-buffer state).  Contrast this with the test
 		 * in input().
 		 */
-		if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+		if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
 			{ /* This was really a NUL. */
 			yy_state_type yy_next_state;
 
-			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+			yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
 
-			yy_current_state = yy_get_previous_state(  );
+			yy_current_state = yy_get_previous_state();
 
 			/* Okay, we're now positioned to make the NUL
 			 * transition.  We couldn't have
@@ -2176,42 +2135,41 @@
 
 			yy_next_state = yy_try_NUL_trans( yy_current_state );
 
-			yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+			yy_bp = yytext_ptr + YY_MORE_ADJ;
 
 			if ( yy_next_state )
 				{
 				/* Consume the NUL. */
-				yy_cp = ++(yy_c_buf_p);
+				yy_cp = ++yy_c_buf_p;
 				yy_current_state = yy_next_state;
 				goto yy_match;
 				}
 
 			else
 				{
-				yy_cp = (yy_last_accepting_cpos);
-				yy_current_state = (yy_last_accepting_state);
+				yy_cp = yy_c_buf_p;
 				goto yy_find_action;
 				}
 			}
 
-		else switch ( yy_get_next_buffer(  ) )
+		else switch ( yy_get_next_buffer() )
 			{
 			case EOB_ACT_END_OF_FILE:
 				{
-				(yy_did_buffer_switch_on_eof) = 0;
+				yy_did_buffer_switch_on_eof = 0;
 
-				if ( llvmAsmwrap( ) )
+				if ( yywrap() )
 					{
 					/* Note: because we've taken care in
 					 * yy_get_next_buffer() to have set up
-					 * llvmAsmtext, we can now set up
+					 * yytext, we can now set up
 					 * yy_c_buf_p so that if some total
 					 * hoser (like flex itself) wants to
 					 * call the scanner after we return the
 					 * YY_NULL, it'll still work - another
 					 * YY_NULL will get returned.
 					 */
-					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+					yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
 
 					yy_act = YY_STATE_EOF(YY_START);
 					goto do_action;
@@ -2219,30 +2177,30 @@
 
 				else
 					{
-					if ( ! (yy_did_buffer_switch_on_eof) )
+					if ( ! yy_did_buffer_switch_on_eof )
 						YY_NEW_FILE;
 					}
 				break;
 				}
 
 			case EOB_ACT_CONTINUE_SCAN:
-				(yy_c_buf_p) =
-					(yytext_ptr) + yy_amount_of_matched_text;
+				yy_c_buf_p =
+					yytext_ptr + yy_amount_of_matched_text;
 
-				yy_current_state = yy_get_previous_state(  );
+				yy_current_state = yy_get_previous_state();
 
-				yy_cp = (yy_c_buf_p);
-				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+				yy_cp = yy_c_buf_p;
+				yy_bp = yytext_ptr + YY_MORE_ADJ;
 				goto yy_match;
 
 			case EOB_ACT_LAST_MATCH:
-				(yy_c_buf_p) =
-				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+				yy_c_buf_p =
+				&yy_current_buffer->yy_ch_buf[yy_n_chars];
 
-				yy_current_state = yy_get_previous_state(  );
+				yy_current_state = yy_get_previous_state();
 
-				yy_cp = (yy_c_buf_p);
-				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+				yy_cp = yy_c_buf_p;
+				yy_bp = yytext_ptr + YY_MORE_ADJ;
 				goto yy_find_action;
 			}
 		break;
@@ -2253,7 +2211,8 @@
 			"fatal flex scanner internal error--no action found" );
 	} /* end of action switch */
 		} /* end of scanning one token */
-} /* end of llvmAsmlex */
+	} /* end of yylex */
+
 
 /* yy_get_next_buffer - try to read in a new buffer
  *
@@ -2262,20 +2221,21 @@
  *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
  *	EOB_ACT_END_OF_FILE - end of file
  */
-static int yy_get_next_buffer (void)
-{
-    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
-	register char *source = (yytext_ptr);
+
+static int yy_get_next_buffer()
+	{
+	register char *dest = yy_current_buffer->yy_ch_buf;
+	register char *source = yytext_ptr;
 	register int number_to_move, i;
 	int ret_val;
 
-	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+	if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
 		YY_FATAL_ERROR(
 		"fatal flex scanner internal error--end of buffer missed" );
 
-	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+	if ( yy_current_buffer->yy_fill_buffer == 0 )
 		{ /* Don't try to fill the buffer, so this is an EOF. */
-		if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+		if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
 			{
 			/* We matched a single character, the EOB, so
 			 * treat this as a final EOF.
@@ -2295,30 +2255,34 @@
 	/* Try to read more data. */
 
 	/* First move last chars to start of buffer. */
-	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+	number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
 
 	for ( i = 0; i < number_to_move; ++i )
 		*(dest++) = *(source++);
 
-	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+	if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
 		/* don't do the read, it's not guaranteed to return an EOF,
 		 * just force an EOF
 		 */
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+		yy_current_buffer->yy_n_chars = yy_n_chars = 0;
 
 	else
 		{
-			int num_to_read =
-			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+		int num_to_read =
+			yy_current_buffer->yy_buf_size - number_to_move - 1;
 
 		while ( num_to_read <= 0 )
 			{ /* Not enough room in the buffer - grow it. */
+#ifdef YY_USES_REJECT
+			YY_FATAL_ERROR(
+"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
+#else
 
 			/* just a shorter name for the current buffer */
-			YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
+			YY_BUFFER_STATE b = yy_current_buffer;
 
 			int yy_c_buf_p_offset =
-				(int) ((yy_c_buf_p) - b->yy_ch_buf);
+				(int) (yy_c_buf_p - b->yy_ch_buf);
 
 			if ( b->yy_is_our_buffer )
 				{
@@ -2331,7 +2295,8 @@
 
 				b->yy_ch_buf = (char *)
 					/* Include room in for 2 EOB chars. */
-					llvmAsmrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
+					yy_flex_realloc( (void *) b->yy_ch_buf,
+							 b->yy_buf_size + 2 );
 				}
 			else
 				/* Can't grow it, we don't own it. */
@@ -2341,35 +2306,35 @@
 				YY_FATAL_ERROR(
 				"fatal error - scanner input buffer overflow" );
 
-			(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
+			yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
 
-			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+			num_to_read = yy_current_buffer->yy_buf_size -
 						number_to_move - 1;
-
+#endif
 			}
 
 		if ( num_to_read > YY_READ_BUF_SIZE )
 			num_to_read = YY_READ_BUF_SIZE;
 
 		/* Read in more data. */
-		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
-			(yy_n_chars), num_to_read );
+		YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
+			yy_n_chars, num_to_read );
 
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		yy_current_buffer->yy_n_chars = yy_n_chars;
 		}
 
-	if ( (yy_n_chars) == 0 )
+	if ( yy_n_chars == 0 )
 		{
 		if ( number_to_move == YY_MORE_ADJ )
 			{
 			ret_val = EOB_ACT_END_OF_FILE;
-			llvmAsmrestart(llvmAsmin  );
+			yyrestart( yyin );
 			}
 
 		else
 			{
 			ret_val = EOB_ACT_LAST_MATCH;
-			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+			yy_current_buffer->yy_buffer_status =
 				YY_BUFFER_EOF_PENDING;
 			}
 		}
@@ -2377,141 +2342,149 @@
 	else
 		ret_val = EOB_ACT_CONTINUE_SCAN;
 
-	(yy_n_chars) += number_to_move;
-	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
-	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+	yy_n_chars += number_to_move;
+	yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
+	yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
 
-	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+	yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
 
 	return ret_val;
-}
+	}
+
 
 /* yy_get_previous_state - get the state just before the EOB char was reached */
 
-    static yy_state_type yy_get_previous_state (void)
-{
+static yy_state_type yy_get_previous_state()
+	{
 	register yy_state_type yy_current_state;
 	register char *yy_cp;
-    
-	yy_current_state = (yy_start);
 
-	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+	yy_current_state = yy_start;
+	yy_state_ptr = yy_state_buf;
+	*yy_state_ptr++ = yy_current_state;
+
+	for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
 		{
 		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
-		if ( yy_accept[yy_current_state] )
-			{
-			(yy_last_accepting_state) = yy_current_state;
-			(yy_last_accepting_cpos) = yy_cp;
-			}
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 560 )
+			if ( yy_current_state >= 563 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		*yy_state_ptr++ = yy_current_state;
 		}
 
 	return yy_current_state;
-}
+	}
+
 
 /* yy_try_NUL_trans - try to make a transition on the NUL character
  *
  * synopsis
  *	next_state = yy_try_NUL_trans( current_state );
  */
-    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
-{
+
+#ifdef YY_USE_PROTOS
+static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
+#else
+static yy_state_type yy_try_NUL_trans( yy_current_state )
+yy_state_type yy_current_state;
+#endif
+	{
 	register int yy_is_jam;
-    	register char *yy_cp = (yy_c_buf_p);
 
 	register YY_CHAR yy_c = 1;
-	if ( yy_accept[yy_current_state] )
-		{
-		(yy_last_accepting_state) = yy_current_state;
-		(yy_last_accepting_cpos) = yy_cp;
-		}
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 560 )
+		if ( yy_current_state >= 563 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 559);
+	yy_is_jam = (yy_current_state == 562);
+	if ( ! yy_is_jam )
+		*yy_state_ptr++ = yy_current_state;
 
 	return yy_is_jam ? 0 : yy_current_state;
-}
+	}
 
-    static inline void yyunput (int c, register char * yy_bp )
-{
-	register char *yy_cp;
-    
-    yy_cp = (yy_c_buf_p);
 
-	/* undo effects of setting up llvmAsmtext */
-	*yy_cp = (yy_hold_char);
+#ifndef YY_NO_UNPUT
+#ifdef YY_USE_PROTOS
+static inline void yyunput( int c, register char *yy_bp )
+#else
+static inline void yyunput( c, yy_bp )
+int c;
+register char *yy_bp;
+#endif
+	{
+	register char *yy_cp = yy_c_buf_p;
 
-	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+	/* undo effects of setting up yytext */
+	*yy_cp = yy_hold_char;
+
+	if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
 		{ /* need to shift things up to make room */
 		/* +2 for EOB chars. */
-		register int number_to_move = (yy_n_chars) + 2;
-		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
-					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+		register int number_to_move = yy_n_chars + 2;
+		register char *dest = &yy_current_buffer->yy_ch_buf[
+					yy_current_buffer->yy_buf_size + 2];
 		register char *source =
-				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+				&yy_current_buffer->yy_ch_buf[number_to_move];
 
-		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+		while ( source > yy_current_buffer->yy_ch_buf )
 			*--dest = *--source;
 
 		yy_cp += (int) (dest - source);
 		yy_bp += (int) (dest - source);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
-			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+		yy_current_buffer->yy_n_chars =
+			yy_n_chars = yy_current_buffer->yy_buf_size;
 
-		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+		if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
 			YY_FATAL_ERROR( "flex scanner push-back overflow" );
 		}
 
 	*--yy_cp = (char) c;
 
-    if ( c == '\n' ){
-        --llvmAsmlineno;
-    }
+	if ( c == '\n' )
+		--yylineno;
 
-	(yytext_ptr) = yy_bp;
-	(yy_hold_char) = *yy_cp;
-	(yy_c_buf_p) = yy_cp;
-}
+	yytext_ptr = yy_bp;
+	yy_hold_char = *yy_cp;
+	yy_c_buf_p = yy_cp;
+	}
+#endif	/* ifndef YY_NO_UNPUT */
+
 
 #ifndef YY_NO_INPUT
 #ifdef __cplusplus
-    static int yyinput (void)
+static int yyinput()
 #else
-    static int input  (void)
+static int input()
 #endif
-
-{
+	{
 	int c;
-    
-	*(yy_c_buf_p) = (yy_hold_char);
 
-	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+	*yy_c_buf_p = yy_hold_char;
+
+	if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
 		{
 		/* yy_c_buf_p now points to the character we want to return.
 		 * If this occurs *before* the EOB characters, then it's a
 		 * valid NUL; if not, then we've hit the end of the buffer.
 		 */
-		if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+		if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
 			/* This was really a NUL. */
-			*(yy_c_buf_p) = '\0';
+			*yy_c_buf_p = '\0';
 
 		else
 			{ /* need more input */
-			int offset = (yy_c_buf_p) - (yytext_ptr);
-			++(yy_c_buf_p);
+			int offset = yy_c_buf_p - yytext_ptr;
+			++yy_c_buf_p;
 
-			switch ( yy_get_next_buffer(  ) )
+			switch ( yy_get_next_buffer() )
 				{
 				case EOB_ACT_LAST_MATCH:
 					/* This happens because yy_g_n_b()
@@ -2525,16 +2498,16 @@
 					 */
 
 					/* Reset buffer status. */
-					llvmAsmrestart(llvmAsmin );
+					yyrestart( yyin );
 
-					/*FALLTHROUGH*/
+					/* fall through */
 
 				case EOB_ACT_END_OF_FILE:
 					{
-					if ( llvmAsmwrap( ) )
+					if ( yywrap() )
 						return EOF;
 
-					if ( ! (yy_did_buffer_switch_on_eof) )
+					if ( ! yy_did_buffer_switch_on_eof )
 						YY_NEW_FILE;
 #ifdef __cplusplus
 					return yyinput();
@@ -2544,170 +2517,169 @@
 					}
 
 				case EOB_ACT_CONTINUE_SCAN:
-					(yy_c_buf_p) = (yytext_ptr) + offset;
+					yy_c_buf_p = yytext_ptr + offset;
 					break;
 				}
 			}
 		}
 
-	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
-	*(yy_c_buf_p) = '\0';	/* preserve llvmAsmtext */
-	(yy_hold_char) = *++(yy_c_buf_p);
+	c = *(unsigned char *) yy_c_buf_p;	/* cast for 8-bit char's */
+	*yy_c_buf_p = '\0';	/* preserve yytext */
+	yy_hold_char = *++yy_c_buf_p;
 
 	if ( c == '\n' )
-		   
-    llvmAsmlineno++;
-;
+		++yylineno;
 
 	return c;
-}
-#endif	/* ifndef YY_NO_INPUT */
+	}
+#endif /* YY_NO_INPUT */
 
-/** Immediately switch to a different input stream.
- * @param input_file A readable stream.
- * 
- * @note This function does not reset the start condition to @c INITIAL .
- */
-    void llvmAsmrestart  (FILE * input_file )
-{
-    
-	if ( ! YY_CURRENT_BUFFER ){
-        llvmAsmensure_buffer_stack ();
-		YY_CURRENT_BUFFER_LVALUE =
-            llvmAsm_create_buffer(llvmAsmin,YY_BUF_SIZE );
+#ifdef YY_USE_PROTOS
+void yyrestart( FILE *input_file )
+#else
+void yyrestart( input_file )
+FILE *input_file;
+#endif
+	{
+	if ( ! yy_current_buffer )
+		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
+
+	yy_init_buffer( yy_current_buffer, input_file );
+	yy_load_buffer_state();
 	}
 
-	llvmAsm_init_buffer(YY_CURRENT_BUFFER,input_file );
-	llvmAsm_load_buffer_state( );
-}
 
-/** Switch to a different input buffer.
- * @param new_buffer The new input buffer.
- * 
- */
-    void llvmAsm_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
-{
-    
-	/* TODO. We should be able to replace this entire function body
-	 * with
-	 *		llvmAsmpop_buffer_state();
-	 *		llvmAsmpush_buffer_state(new_buffer);
-     */
-	llvmAsmensure_buffer_stack ();
-	if ( YY_CURRENT_BUFFER == new_buffer )
+#ifdef YY_USE_PROTOS
+void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
+#else
+void yy_switch_to_buffer( new_buffer )
+YY_BUFFER_STATE new_buffer;
+#endif
+	{
+	if ( yy_current_buffer == new_buffer )
 		return;
 
-	if ( YY_CURRENT_BUFFER )
+	if ( yy_current_buffer )
 		{
 		/* Flush out information for old buffer. */
-		*(yy_c_buf_p) = (yy_hold_char);
-		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		*yy_c_buf_p = yy_hold_char;
+		yy_current_buffer->yy_buf_pos = yy_c_buf_p;
+		yy_current_buffer->yy_n_chars = yy_n_chars;
 		}
 
-	YY_CURRENT_BUFFER_LVALUE = new_buffer;
-	llvmAsm_load_buffer_state( );
+	yy_current_buffer = new_buffer;
+	yy_load_buffer_state();
 
 	/* We don't actually know whether we did this switch during
-	 * EOF (llvmAsmwrap()) processing, but the only time this flag
-	 * is looked at is after llvmAsmwrap() is called, so it's safe
+	 * EOF (yywrap()) processing, but the only time this flag
+	 * is looked at is after yywrap() is called, so it's safe
 	 * to go ahead and always set it.
 	 */
-	(yy_did_buffer_switch_on_eof) = 1;
-}
+	yy_did_buffer_switch_on_eof = 1;
+	}
 
-static void llvmAsm_load_buffer_state  (void)
-{
-    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
-	llvmAsmin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
-	(yy_hold_char) = *(yy_c_buf_p);
-}
 
-/** Allocate and initialize an input buffer state.
- * @param file A readable stream.
- * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
- * 
- * @return the allocated buffer state.
- */
-    YY_BUFFER_STATE llvmAsm_create_buffer  (FILE * file, int  size )
-{
+#ifdef YY_USE_PROTOS
+void yy_load_buffer_state( void )
+#else
+void yy_load_buffer_state()
+#endif
+	{
+	yy_n_chars = yy_current_buffer->yy_n_chars;
+	yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
+	yyin = yy_current_buffer->yy_input_file;
+	yy_hold_char = *yy_c_buf_p;
+	}
+
+
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
+#else
+YY_BUFFER_STATE yy_create_buffer( file, size )
+FILE *file;
+int size;
+#endif
+	{
 	YY_BUFFER_STATE b;
-    
-	b = (YY_BUFFER_STATE) llvmAsmalloc(sizeof( struct yy_buffer_state )  );
+
+	b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
 	if ( ! b )
-		YY_FATAL_ERROR( "out of dynamic memory in llvmAsm_create_buffer()" );
+		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
 
 	b->yy_buf_size = size;
 
 	/* yy_ch_buf has to be 2 characters longer than the size given because
 	 * we need to put in 2 end-of-buffer characters.
 	 */
-	b->yy_ch_buf = (char *) llvmAsmalloc(b->yy_buf_size + 2  );
+	b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
 	if ( ! b->yy_ch_buf )
-		YY_FATAL_ERROR( "out of dynamic memory in llvmAsm_create_buffer()" );
+		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
 
 	b->yy_is_our_buffer = 1;
 
-	llvmAsm_init_buffer(b,file );
+	yy_init_buffer( b, file );
 
 	return b;
-}
+	}
 
-/** Destroy the buffer.
- * @param b a buffer created with llvmAsm_create_buffer()
- * 
- */
-    void llvmAsm_delete_buffer (YY_BUFFER_STATE  b )
-{
-    
+
+#ifdef YY_USE_PROTOS
+void yy_delete_buffer( YY_BUFFER_STATE b )
+#else
+void yy_delete_buffer( b )
+YY_BUFFER_STATE b;
+#endif
+	{
 	if ( ! b )
 		return;
 
-	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
-		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+	if ( b == yy_current_buffer )
+		yy_current_buffer = (YY_BUFFER_STATE) 0;
 
 	if ( b->yy_is_our_buffer )
-		llvmAsmfree((void *) b->yy_ch_buf  );
+		yy_flex_free( (void *) b->yy_ch_buf );
 
-	llvmAsmfree((void *) b  );
-}
+	yy_flex_free( (void *) b );
+	}
 
-/* Initializes or reinitializes a buffer.
- * This function is sometimes called more than once on the same buffer,
- * such as during a llvmAsmrestart() or at EOF.
- */
-    static void llvmAsm_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
 
-{
-	int oerrno = errno;
-    
-	llvmAsm_flush_buffer(b );
+
+#ifdef YY_USE_PROTOS
+void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
+#else
+void yy_init_buffer( b, file )
+YY_BUFFER_STATE b;
+FILE *file;
+#endif
+
+
+	{
+	yy_flush_buffer( b );
 
 	b->yy_input_file = file;
 	b->yy_fill_buffer = 1;
 
-    /* If b is the current buffer, then llvmAsm_init_buffer was _probably_
-     * called from llvmAsmrestart() or through yy_get_next_buffer.
-     * In that case, we don't want to reset the lineno or column.
-     */
-    if (b != YY_CURRENT_BUFFER){
-        b->yy_bs_lineno = 1;
-        b->yy_bs_column = 0;
-    }
+#if YY_ALWAYS_INTERACTIVE
+	b->yy_is_interactive = 1;
+#else
+#if YY_NEVER_INTERACTIVE
+	b->yy_is_interactive = 0;
+#else
+	b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+#endif
+#endif
+	}
 
-        b->yy_is_interactive = 0;
-    
-	errno = oerrno;
-}
 
-/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
- * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
- * 
- */
-    void llvmAsm_flush_buffer (YY_BUFFER_STATE  b )
-{
-    	if ( ! b )
+#ifdef YY_USE_PROTOS
+void yy_flush_buffer( YY_BUFFER_STATE b )
+#else
+void yy_flush_buffer( b )
+YY_BUFFER_STATE b;
+#endif
+
+	{
+	if ( ! b )
 		return;
 
 	b->yy_n_chars = 0;
@@ -2724,123 +2696,31 @@
 	b->yy_at_bol = 1;
 	b->yy_buffer_status = YY_BUFFER_NEW;
 
-	if ( b == YY_CURRENT_BUFFER )
-		llvmAsm_load_buffer_state( );
-}
-
-/** Pushes the new state onto the stack. The new state becomes
- *  the current state. This function will allocate the stack
- *  if necessary.
- *  @param new_buffer The new state.
- *  
- */
-void llvmAsmpush_buffer_state (YY_BUFFER_STATE new_buffer )
-{
-    	if (new_buffer == NULL)
-		return;
-
-	llvmAsmensure_buffer_stack();
-
-	/* This block is copied from llvmAsm_switch_to_buffer. */
-	if ( YY_CURRENT_BUFFER )
-		{
-		/* Flush out information for old buffer. */
-		*(yy_c_buf_p) = (yy_hold_char);
-		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-		}
-
-	/* Only push if top exists. Otherwise, replace top. */
-	if (YY_CURRENT_BUFFER)
-		(yy_buffer_stack_top)++;
-	YY_CURRENT_BUFFER_LVALUE = new_buffer;
-
-	/* copied from llvmAsm_switch_to_buffer. */
-	llvmAsm_load_buffer_state( );
-	(yy_did_buffer_switch_on_eof) = 1;
-}
-
-/** Removes and deletes the top of the stack, if present.
- *  The next element becomes the new top.
- *  
- */
-void llvmAsmpop_buffer_state (void)
-{
-    	if (!YY_CURRENT_BUFFER)
-		return;
-
-	llvmAsm_delete_buffer(YY_CURRENT_BUFFER );
-	YY_CURRENT_BUFFER_LVALUE = NULL;
-	if ((yy_buffer_stack_top) > 0)
-		--(yy_buffer_stack_top);
-
-	if (YY_CURRENT_BUFFER) {
-		llvmAsm_load_buffer_state( );
-		(yy_did_buffer_switch_on_eof) = 1;
-	}
-}
-
-/* Allocates the stack if it does not exist.
- *  Guarantees space for at least one push.
- */
-static void llvmAsmensure_buffer_stack (void)
-{
-	int num_to_alloc;
-    
-	if (!(yy_buffer_stack)) {
-
-		/* First allocation is just for 2 elements, since we don't know if this
-		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
-		 * immediate realloc on the next call.
-         */
-		num_to_alloc = 1;
-		(yy_buffer_stack) = (struct yy_buffer_state**)llvmAsmalloc
-								(num_to_alloc * sizeof(struct yy_buffer_state*)
-								);
-		
-		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
-				
-		(yy_buffer_stack_max) = num_to_alloc;
-		(yy_buffer_stack_top) = 0;
-		return;
+	if ( b == yy_current_buffer )
+		yy_load_buffer_state();
 	}
 
-	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
 
-		/* Increase the buffer to prepare for a possible push. */
-		int grow_size = 8 /* arbitrary grow size */;
-
-		num_to_alloc = (yy_buffer_stack_max) + grow_size;
-		(yy_buffer_stack) = (struct yy_buffer_state**)llvmAsmrealloc
-								((yy_buffer_stack),
-								num_to_alloc * sizeof(struct yy_buffer_state*)
-								);
-
-		/* zero only the new slots.*/
-		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
-		(yy_buffer_stack_max) = num_to_alloc;
-	}
-}
-
-/** Setup the input buffer state to scan directly from a user-specified character buffer.
- * @param base the character buffer
- * @param size the size in bytes of the character buffer
- * 
- * @return the newly allocated buffer state object. 
- */
-YY_BUFFER_STATE llvmAsm_scan_buffer  (char * base, yy_size_t  size )
-{
+#ifndef YY_NO_SCAN_BUFFER
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
+#else
+YY_BUFFER_STATE yy_scan_buffer( base, size )
+char *base;
+yy_size_t size;
+#endif
+	{
 	YY_BUFFER_STATE b;
-    
+
 	if ( size < 2 ||
 	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
 	     base[size-1] != YY_END_OF_BUFFER_CHAR )
 		/* They forgot to leave room for the EOB's. */
 		return 0;
 
-	b = (YY_BUFFER_STATE) llvmAsmalloc(sizeof( struct yy_buffer_state )  );
+	b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
 	if ( ! b )
-		YY_FATAL_ERROR( "out of dynamic memory in llvmAsm_scan_buffer()" );
+		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
 
 	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
 	b->yy_buf_pos = b->yy_ch_buf = base;
@@ -2852,53 +2732,58 @@
 	b->yy_fill_buffer = 0;
 	b->yy_buffer_status = YY_BUFFER_NEW;
 
-	llvmAsm_switch_to_buffer(b  );
+	yy_switch_to_buffer( b );
 
 	return b;
-}
+	}
+#endif
 
-/** Setup the input buffer state to scan a string. The next call to llvmAsmlex() will
- * scan from a @e copy of @a str.
- * @param str a NUL-terminated string to scan
- * 
- * @return the newly allocated buffer state object.
- * @note If you want to scan bytes that may contain NUL values, then use
- *       llvmAsm_scan_bytes() instead.
- */
-YY_BUFFER_STATE llvmAsm_scan_string (yyconst char * yystr )
-{
-    
-	return llvmAsm_scan_bytes(yystr,strlen(yystr) );
-}
 
-/** Setup the input buffer state to scan the given bytes. The next call to llvmAsmlex() will
- * scan from a @e copy of @a bytes.
- * @param bytes the byte buffer to scan
- * @param len the number of bytes in the buffer pointed to by @a bytes.
- * 
- * @return the newly allocated buffer state object.
- */
-YY_BUFFER_STATE llvmAsm_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
-{
+#ifndef YY_NO_SCAN_STRING
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
+#else
+YY_BUFFER_STATE yy_scan_string( yy_str )
+yyconst char *yy_str;
+#endif
+	{
+	int len;
+	for ( len = 0; yy_str[len]; ++len )
+		;
+
+	return yy_scan_bytes( yy_str, len );
+	}
+#endif
+
+
+#ifndef YY_NO_SCAN_BYTES
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
+#else
+YY_BUFFER_STATE yy_scan_bytes( bytes, len )
+yyconst char *bytes;
+int len;
+#endif
+	{
 	YY_BUFFER_STATE b;
 	char *buf;
 	yy_size_t n;
 	int i;
-    
+
 	/* Get memory for full buffer, including space for trailing EOB's. */
-	n = _yybytes_len + 2;
-	buf = (char *) llvmAsmalloc(n  );
+	n = len + 2;
+	buf = (char *) yy_flex_alloc( n );
 	if ( ! buf )
-		YY_FATAL_ERROR( "out of dynamic memory in llvmAsm_scan_bytes()" );
+		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
 
-	for ( i = 0; i < _yybytes_len; ++i )
-		buf[i] = yybytes[i];
+	for ( i = 0; i < len; ++i )
+		buf[i] = bytes[i];
 
-	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+	buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
 
-	b = llvmAsm_scan_buffer(buf,n );
+	b = yy_scan_buffer( buf, n );
 	if ( ! b )
-		YY_FATAL_ERROR( "bad buffer in llvmAsm_scan_bytes()" );
+		YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
 
 	/* It's okay to grow etc. this buffer, and we should throw it
 	 * away when we're done.
@@ -2906,17 +2791,78 @@
 	b->yy_is_our_buffer = 1;
 
 	return b;
-}
+	}
+#endif
+
+
+#ifndef YY_NO_PUSH_STATE
+#ifdef YY_USE_PROTOS
+static void yy_push_state( int new_state )
+#else
+static void yy_push_state( new_state )
+int new_state;
+#endif
+	{
+	if ( yy_start_stack_ptr >= yy_start_stack_depth )
+		{
+		yy_size_t new_size;
+
+		yy_start_stack_depth += YY_START_STACK_INCR;
+		new_size = yy_start_stack_depth * sizeof( int );
+
+		if ( ! yy_start_stack )
+			yy_start_stack = (int *) yy_flex_alloc( new_size );
+
+		else
+			yy_start_stack = (int *) yy_flex_realloc(
+					(void *) yy_start_stack, new_size );
+
+		if ( ! yy_start_stack )
+			YY_FATAL_ERROR(
+			"out of memory expanding start-condition stack" );
+		}
+
+	yy_start_stack[yy_start_stack_ptr++] = YY_START;
+
+	BEGIN(new_state);
+	}
+#endif
+
+
+#ifndef YY_NO_POP_STATE
+static void yy_pop_state()
+	{
+	if ( --yy_start_stack_ptr < 0 )
+		YY_FATAL_ERROR( "start-condition stack underflow" );
+
+	BEGIN(yy_start_stack[yy_start_stack_ptr]);
+	}
+#endif
+
+
+#ifndef YY_NO_TOP_STATE
+static int yy_top_state()
+	{
+	return yy_start_stack[yy_start_stack_ptr - 1];
+	}
+#endif
 
 #ifndef YY_EXIT_FAILURE
 #define YY_EXIT_FAILURE 2
 #endif
 
-static void yy_fatal_error (yyconst char* msg )
-{
-    	(void) fprintf( stderr, "%s\n", msg );
+#ifdef YY_USE_PROTOS
+static void yy_fatal_error( yyconst char msg[] )
+#else
+static void yy_fatal_error( msg )
+char msg[];
+#endif
+	{
+	(void) fprintf( stderr, "%s\n", msg );
 	exit( YY_EXIT_FAILURE );
-}
+	}
+
+
 
 /* Redefine yyless() so it works in section 3 code. */
 
@@ -2924,181 +2870,69 @@
 #define yyless(n) \
 	do \
 		{ \
-		/* Undo effects of setting up llvmAsmtext. */ \
-        int yyless_macro_arg = (n); \
-        YY_LESS_LINENO(yyless_macro_arg);\
-		llvmAsmtext[llvmAsmleng] = (yy_hold_char); \
-		(yy_c_buf_p) = llvmAsmtext + yyless_macro_arg; \
-		(yy_hold_char) = *(yy_c_buf_p); \
-		*(yy_c_buf_p) = '\0'; \
-		llvmAsmleng = yyless_macro_arg; \
+		/* Undo effects of setting up yytext. */ \
+		yytext[yyleng] = yy_hold_char; \
+		yy_c_buf_p = yytext + n; \
+		yy_hold_char = *yy_c_buf_p; \
+		*yy_c_buf_p = '\0'; \
+		yyleng = n; \
 		} \
 	while ( 0 )
 
-/* Accessor  methods (get/set functions) to struct members. */
 
-/** Get the current line number.
- * 
- */
-int llvmAsmget_lineno  (void)
-{
-        
-    return llvmAsmlineno;
-}
-
-/** Get the input stream.
- * 
- */
-FILE *llvmAsmget_in  (void)
-{
-        return llvmAsmin;
-}
-
-/** Get the output stream.
- * 
- */
-FILE *llvmAsmget_out  (void)
-{
-        return llvmAsmout;
-}
-
-/** Get the length of the current token.
- * 
- */
-int llvmAsmget_leng  (void)
-{
-        return llvmAsmleng;
-}
-
-/** Get the current token.
- * 
- */
-
-char *llvmAsmget_text  (void)
-{
-        return llvmAsmtext;
-}
-
-/** Set the current line number.
- * @param line_number
- * 
- */
-void llvmAsmset_lineno (int  line_number )
-{
-    
-    llvmAsmlineno = line_number;
-}
-
-/** Set the input stream. This does not discard the current
- * input buffer.
- * @param in_str A readable stream.
- * 
- * @see llvmAsm_switch_to_buffer
- */
-void llvmAsmset_in (FILE *  in_str )
-{
-        llvmAsmin = in_str ;
-}
-
-void llvmAsmset_out (FILE *  out_str )
-{
-        llvmAsmout = out_str ;
-}
-
-int llvmAsmget_debug  (void)
-{
-        return llvmAsm_flex_debug;
-}
-
-void llvmAsmset_debug (int  bdebug )
-{
-        llvmAsm_flex_debug = bdebug ;
-}
-
-static int yy_init_globals (void)
-{
-        /* Initialization is the same as for the non-reentrant scanner.
-     * This function is called from llvmAsmlex_destroy(), so don't allocate here.
-     */
-
-    /* We do not touch llvmAsmlineno unless the option is enabled. */
-    llvmAsmlineno =  1;
-    
-    (yy_buffer_stack) = 0;
-    (yy_buffer_stack_top) = 0;
-    (yy_buffer_stack_max) = 0;
-    (yy_c_buf_p) = (char *) 0;
-    (yy_init) = 0;
-    (yy_start) = 0;
-
-/* Defined in main.c */
-#ifdef YY_STDINIT
-    llvmAsmin = stdin;
-    llvmAsmout = stdout;
-#else
-    llvmAsmin = (FILE *) 0;
-    llvmAsmout = (FILE *) 0;
-#endif
-
-    /* For future reference: Set errno on error, since we are called by
-     * llvmAsmlex_init()
-     */
-    return 0;
-}
-
-/* llvmAsmlex_destroy is for both reentrant and non-reentrant scanners. */
-int llvmAsmlex_destroy  (void)
-{
-    
-    /* Pop the buffer stack, destroying each element. */
-	while(YY_CURRENT_BUFFER){
-		llvmAsm_delete_buffer(YY_CURRENT_BUFFER  );
-		YY_CURRENT_BUFFER_LVALUE = NULL;
-		llvmAsmpop_buffer_state();
-	}
-
-	/* Destroy the stack itself. */
-	llvmAsmfree((yy_buffer_stack) );
-	(yy_buffer_stack) = NULL;
-
-    /* Reset the globals. This is important in a non-reentrant scanner so the next time
-     * llvmAsmlex() is called, initialization will occur. */
-    yy_init_globals( );
-
-    return 0;
-}
-
-/*
- * Internal utility routines.
- */
+/* Internal utility routines. */
 
 #ifndef yytext_ptr
-static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
-{
+#ifdef YY_USE_PROTOS
+static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
+#else
+static void yy_flex_strncpy( s1, s2, n )
+char *s1;
+yyconst char *s2;
+int n;
+#endif
+	{
 	register int i;
 	for ( i = 0; i < n; ++i )
 		s1[i] = s2[i];
-}
+	}
 #endif
 
 #ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * s )
-{
+#ifdef YY_USE_PROTOS
+static int yy_flex_strlen( yyconst char *s )
+#else
+static int yy_flex_strlen( s )
+yyconst char *s;
+#endif
+	{
 	register int n;
 	for ( n = 0; s[n]; ++n )
 		;
 
 	return n;
-}
+	}
 #endif
 
-void *llvmAsmalloc (yy_size_t  size )
-{
-	return (void *) malloc( size );
-}
 
-void *llvmAsmrealloc  (void * ptr, yy_size_t  size )
-{
+#ifdef YY_USE_PROTOS
+static void *yy_flex_alloc( yy_size_t size )
+#else
+static void *yy_flex_alloc( size )
+yy_size_t size;
+#endif
+	{
+	return (void *) malloc( size );
+	}
+
+#ifdef YY_USE_PROTOS
+static inline void *yy_flex_realloc( void *ptr, yy_size_t size )
+#else
+static inline void *yy_flex_realloc( ptr, size )
+void *ptr;
+yy_size_t size;
+#endif
+	{
 	/* The cast to (char *) in the following accommodates both
 	 * implementations that use char* generic pointers, and those
 	 * that use void* generic pointers.  It works with the latter
@@ -3107,16 +2941,24 @@
 	 * as though doing an assignment.
 	 */
 	return (void *) realloc( (char *) ptr, size );
-}
+	}
 
-void llvmAsmfree (void * ptr )
-{
-	free( (char *) ptr );	/* see llvmAsmrealloc() for (char *) cast */
-}
+#ifdef YY_USE_PROTOS
+static void yy_flex_free( void *ptr )
+#else
+static void yy_flex_free( ptr )
+void *ptr;
+#endif
+	{
+	free( ptr );
+	}
 
-#define YYTABLES_NAME "yytables"
-
-#line 445 "/home/asl/proj/llvm/src/lib/AsmParser/Lexer.l"
-
-
+#if YY_MAIN
+int main()
+	{
+	yylex();
+	return 0;
+	}
+#endif
+#line 451 "/proj/llvm/llvm-2/lib/AsmParser/Lexer.l"
 
diff --git a/lib/AsmParser/Lexer.l.cvs b/lib/AsmParser/Lexer.l.cvs
index b67f6ff..2218aa5 100644
--- a/lib/AsmParser/Lexer.l.cvs
+++ b/lib/AsmParser/Lexer.l.cvs
@@ -161,6 +161,7 @@
 /* Quoted names can contain any character except " and \ */
 StringConstant \"[^\"]*\"
 AtStringConstant @\"[^\"]*\"
+PctStringConstant %\"[^\"]*\"
   
 /* LocalVarID/GlobalVarID: match an unnamed local variable slot ID. */
 LocalVarID     %[0-9]+
@@ -366,6 +367,11 @@
                      return ATSTRINGCONSTANT;
                    }
 
+{PctStringConstant} {
+                     yytext[strlen(yytext)-1] = 0;           // nuke end quote
+                     llvmAsmlval.StrVal = strdup(yytext+2);  // Nuke @, quote
+                     return PCTSTRINGCONSTANT;
+                   }
 {PInteger}      { int len = strlen(yytext); 
                   uint32_t numBits = ((len * 64) / 19) + 1;
                   APInt Tmp(numBits, yytext, len, 10);
diff --git a/lib/AsmParser/llvmAsmParser.cpp.cvs b/lib/AsmParser/llvmAsmParser.cpp.cvs
index e1290c1..fe737f6 100644
--- a/lib/AsmParser/llvmAsmParser.cpp.cvs
+++ b/lib/AsmParser/llvmAsmParser.cpp.cvs
@@ -1,152 +1,348 @@
+/* A Bison parser, made by GNU Bison 2.1.  */
 
-/*  A Bison parser, made from /Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y
-    by GNU Bison version 1.28  */
+/* Skeleton parser for Yacc-like parsing with Bison,
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 
-#define YYBISON 1  /* Identify Bison output.  */
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
 
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, when this file is copied by Bison into a
+   Bison output file, you may use that output file without restriction.
+   This special exception was added by the Free Software Foundation
+   in version 1.24 of Bison.  */
+
+/* Written by Richard Stallman by simplifying the original so called
+   ``semantic'' parser.  */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON 1
+
+/* Bison version.  */
+#define YYBISON_VERSION "2.1"
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 0
+
+/* Using locations.  */
+#define YYLSP_NEEDED 0
+
+/* Substitute the variable and function names.  */
 #define yyparse llvmAsmparse
-#define yylex llvmAsmlex
+#define yylex   llvmAsmlex
 #define yyerror llvmAsmerror
-#define yylval llvmAsmlval
-#define yychar llvmAsmchar
+#define yylval  llvmAsmlval
+#define yychar  llvmAsmchar
 #define yydebug llvmAsmdebug
 #define yynerrs llvmAsmnerrs
-#define	ESINT64VAL	257
-#define	EUINT64VAL	258
-#define	ESAPINTVAL	259
-#define	EUAPINTVAL	260
-#define	LOCALVAL_ID	261
-#define	GLOBALVAL_ID	262
-#define	FPVAL	263
-#define	VOID	264
-#define	INTTYPE	265
-#define	FLOAT	266
-#define	DOUBLE	267
-#define	LABEL	268
-#define	TYPE	269
-#define	LOCALVAR	270
-#define	GLOBALVAR	271
-#define	LABELSTR	272
-#define	STRINGCONSTANT	273
-#define	ATSTRINGCONSTANT	274
-#define	ZEROINITIALIZER	275
-#define	TRUETOK	276
-#define	FALSETOK	277
-#define	BEGINTOK	278
-#define	ENDTOK	279
-#define	DECLARE	280
-#define	DEFINE	281
-#define	GLOBAL	282
-#define	CONSTANT	283
-#define	SECTION	284
-#define	ALIAS	285
-#define	VOLATILE	286
-#define	THREAD_LOCAL	287
-#define	TO	288
-#define	DOTDOTDOT	289
-#define	NULL_TOK	290
-#define	UNDEF	291
-#define	INTERNAL	292
-#define	LINKONCE	293
-#define	WEAK	294
-#define	APPENDING	295
-#define	DLLIMPORT	296
-#define	DLLEXPORT	297
-#define	EXTERN_WEAK	298
-#define	OPAQUE	299
-#define	EXTERNAL	300
-#define	TARGET	301
-#define	TRIPLE	302
-#define	ALIGN	303
-#define	DEPLIBS	304
-#define	CALL	305
-#define	TAIL	306
-#define	ASM_TOK	307
-#define	MODULE	308
-#define	SIDEEFFECT	309
-#define	CC_TOK	310
-#define	CCC_TOK	311
-#define	FASTCC_TOK	312
-#define	COLDCC_TOK	313
-#define	X86_STDCALLCC_TOK	314
-#define	X86_FASTCALLCC_TOK	315
-#define	DATALAYOUT	316
-#define	RET	317
-#define	BR	318
-#define	SWITCH	319
-#define	INVOKE	320
-#define	UNWIND	321
-#define	UNREACHABLE	322
-#define	ADD	323
-#define	SUB	324
-#define	MUL	325
-#define	UDIV	326
-#define	SDIV	327
-#define	FDIV	328
-#define	UREM	329
-#define	SREM	330
-#define	FREM	331
-#define	AND	332
-#define	OR	333
-#define	XOR	334
-#define	SHL	335
-#define	LSHR	336
-#define	ASHR	337
-#define	ICMP	338
-#define	FCMP	339
-#define	EQ	340
-#define	NE	341
-#define	SLT	342
-#define	SGT	343
-#define	SLE	344
-#define	SGE	345
-#define	ULT	346
-#define	UGT	347
-#define	ULE	348
-#define	UGE	349
-#define	OEQ	350
-#define	ONE	351
-#define	OLT	352
-#define	OGT	353
-#define	OLE	354
-#define	OGE	355
-#define	ORD	356
-#define	UNO	357
-#define	UEQ	358
-#define	UNE	359
-#define	MALLOC	360
-#define	ALLOCA	361
-#define	FREE	362
-#define	LOAD	363
-#define	STORE	364
-#define	GETELEMENTPTR	365
-#define	TRUNC	366
-#define	ZEXT	367
-#define	SEXT	368
-#define	FPTRUNC	369
-#define	FPEXT	370
-#define	BITCAST	371
-#define	UITOFP	372
-#define	SITOFP	373
-#define	FPTOUI	374
-#define	FPTOSI	375
-#define	INTTOPTR	376
-#define	PTRTOINT	377
-#define	PHI_TOK	378
-#define	SELECT	379
-#define	VAARG	380
-#define	EXTRACTELEMENT	381
-#define	INSERTELEMENT	382
-#define	SHUFFLEVECTOR	383
-#define	NORETURN	384
-#define	INREG	385
-#define	SRET	386
-#define	NOUNWIND	387
-#define	DEFAULT	388
-#define	HIDDEN	389
-#define	PROTECTED	390
 
-#line 14 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     ESINT64VAL = 258,
+     EUINT64VAL = 259,
+     ESAPINTVAL = 260,
+     EUAPINTVAL = 261,
+     LOCALVAL_ID = 262,
+     GLOBALVAL_ID = 263,
+     FPVAL = 264,
+     VOID = 265,
+     INTTYPE = 266,
+     FLOAT = 267,
+     DOUBLE = 268,
+     LABEL = 269,
+     TYPE = 270,
+     LOCALVAR = 271,
+     GLOBALVAR = 272,
+     LABELSTR = 273,
+     STRINGCONSTANT = 274,
+     ATSTRINGCONSTANT = 275,
+     PCTSTRINGCONSTANT = 276,
+     ZEROINITIALIZER = 277,
+     TRUETOK = 278,
+     FALSETOK = 279,
+     BEGINTOK = 280,
+     ENDTOK = 281,
+     DECLARE = 282,
+     DEFINE = 283,
+     GLOBAL = 284,
+     CONSTANT = 285,
+     SECTION = 286,
+     ALIAS = 287,
+     VOLATILE = 288,
+     THREAD_LOCAL = 289,
+     TO = 290,
+     DOTDOTDOT = 291,
+     NULL_TOK = 292,
+     UNDEF = 293,
+     INTERNAL = 294,
+     LINKONCE = 295,
+     WEAK = 296,
+     APPENDING = 297,
+     DLLIMPORT = 298,
+     DLLEXPORT = 299,
+     EXTERN_WEAK = 300,
+     OPAQUE = 301,
+     EXTERNAL = 302,
+     TARGET = 303,
+     TRIPLE = 304,
+     ALIGN = 305,
+     DEPLIBS = 306,
+     CALL = 307,
+     TAIL = 308,
+     ASM_TOK = 309,
+     MODULE = 310,
+     SIDEEFFECT = 311,
+     CC_TOK = 312,
+     CCC_TOK = 313,
+     FASTCC_TOK = 314,
+     COLDCC_TOK = 315,
+     X86_STDCALLCC_TOK = 316,
+     X86_FASTCALLCC_TOK = 317,
+     DATALAYOUT = 318,
+     RET = 319,
+     BR = 320,
+     SWITCH = 321,
+     INVOKE = 322,
+     UNWIND = 323,
+     UNREACHABLE = 324,
+     ADD = 325,
+     SUB = 326,
+     MUL = 327,
+     UDIV = 328,
+     SDIV = 329,
+     FDIV = 330,
+     UREM = 331,
+     SREM = 332,
+     FREM = 333,
+     AND = 334,
+     OR = 335,
+     XOR = 336,
+     SHL = 337,
+     LSHR = 338,
+     ASHR = 339,
+     ICMP = 340,
+     FCMP = 341,
+     EQ = 342,
+     NE = 343,
+     SLT = 344,
+     SGT = 345,
+     SLE = 346,
+     SGE = 347,
+     ULT = 348,
+     UGT = 349,
+     ULE = 350,
+     UGE = 351,
+     OEQ = 352,
+     ONE = 353,
+     OLT = 354,
+     OGT = 355,
+     OLE = 356,
+     OGE = 357,
+     ORD = 358,
+     UNO = 359,
+     UEQ = 360,
+     UNE = 361,
+     MALLOC = 362,
+     ALLOCA = 363,
+     FREE = 364,
+     LOAD = 365,
+     STORE = 366,
+     GETELEMENTPTR = 367,
+     TRUNC = 368,
+     ZEXT = 369,
+     SEXT = 370,
+     FPTRUNC = 371,
+     FPEXT = 372,
+     BITCAST = 373,
+     UITOFP = 374,
+     SITOFP = 375,
+     FPTOUI = 376,
+     FPTOSI = 377,
+     INTTOPTR = 378,
+     PTRTOINT = 379,
+     PHI_TOK = 380,
+     SELECT = 381,
+     VAARG = 382,
+     EXTRACTELEMENT = 383,
+     INSERTELEMENT = 384,
+     SHUFFLEVECTOR = 385,
+     NORETURN = 386,
+     INREG = 387,
+     SRET = 388,
+     NOUNWIND = 389,
+     DEFAULT = 390,
+     HIDDEN = 391,
+     PROTECTED = 392
+   };
+#endif
+/* Tokens.  */
+#define ESINT64VAL 258
+#define EUINT64VAL 259
+#define ESAPINTVAL 260
+#define EUAPINTVAL 261
+#define LOCALVAL_ID 262
+#define GLOBALVAL_ID 263
+#define FPVAL 264
+#define VOID 265
+#define INTTYPE 266
+#define FLOAT 267
+#define DOUBLE 268
+#define LABEL 269
+#define TYPE 270
+#define LOCALVAR 271
+#define GLOBALVAR 272
+#define LABELSTR 273
+#define STRINGCONSTANT 274
+#define ATSTRINGCONSTANT 275
+#define PCTSTRINGCONSTANT 276
+#define ZEROINITIALIZER 277
+#define TRUETOK 278
+#define FALSETOK 279
+#define BEGINTOK 280
+#define ENDTOK 281
+#define DECLARE 282
+#define DEFINE 283
+#define GLOBAL 284
+#define CONSTANT 285
+#define SECTION 286
+#define ALIAS 287
+#define VOLATILE 288
+#define THREAD_LOCAL 289
+#define TO 290
+#define DOTDOTDOT 291
+#define NULL_TOK 292
+#define UNDEF 293
+#define INTERNAL 294
+#define LINKONCE 295
+#define WEAK 296
+#define APPENDING 297
+#define DLLIMPORT 298
+#define DLLEXPORT 299
+#define EXTERN_WEAK 300
+#define OPAQUE 301
+#define EXTERNAL 302
+#define TARGET 303
+#define TRIPLE 304
+#define ALIGN 305
+#define DEPLIBS 306
+#define CALL 307
+#define TAIL 308
+#define ASM_TOK 309
+#define MODULE 310
+#define SIDEEFFECT 311
+#define CC_TOK 312
+#define CCC_TOK 313
+#define FASTCC_TOK 314
+#define COLDCC_TOK 315
+#define X86_STDCALLCC_TOK 316
+#define X86_FASTCALLCC_TOK 317
+#define DATALAYOUT 318
+#define RET 319
+#define BR 320
+#define SWITCH 321
+#define INVOKE 322
+#define UNWIND 323
+#define UNREACHABLE 324
+#define ADD 325
+#define SUB 326
+#define MUL 327
+#define UDIV 328
+#define SDIV 329
+#define FDIV 330
+#define UREM 331
+#define SREM 332
+#define FREM 333
+#define AND 334
+#define OR 335
+#define XOR 336
+#define SHL 337
+#define LSHR 338
+#define ASHR 339
+#define ICMP 340
+#define FCMP 341
+#define EQ 342
+#define NE 343
+#define SLT 344
+#define SGT 345
+#define SLE 346
+#define SGE 347
+#define ULT 348
+#define UGT 349
+#define ULE 350
+#define UGE 351
+#define OEQ 352
+#define ONE 353
+#define OLT 354
+#define OGT 355
+#define OLE 356
+#define OGE 357
+#define ORD 358
+#define UNO 359
+#define UEQ 360
+#define UNE 361
+#define MALLOC 362
+#define ALLOCA 363
+#define FREE 364
+#define LOAD 365
+#define STORE 366
+#define GETELEMENTPTR 367
+#define TRUNC 368
+#define ZEXT 369
+#define SEXT 370
+#define FPTRUNC 371
+#define FPEXT 372
+#define BITCAST 373
+#define UITOFP 374
+#define SITOFP 375
+#define FPTOUI 376
+#define FPTOSI 377
+#define INTTOPTR 378
+#define PTRTOINT 379
+#define PHI_TOK 380
+#define SELECT 381
+#define VAARG 382
+#define EXTRACTELEMENT 383
+#define INSERTELEMENT 384
+#define SHUFFLEVECTOR 385
+#define NORETURN 386
+#define INREG 387
+#define SRET 388
+#define NOUNWIND 389
+#define DEFAULT 390
+#define HIDDEN 391
+#define PROTECTED 392
+
+
+
+
+/* Copy the first part of user declarations.  */
+#line 14 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
 
 #include "ParserInternals.h"
 #include "llvm/CallingConv.h"
@@ -1087,8 +1283,28 @@
 }
 
 
-#line 955 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-typedef union {
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
+#line 955 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+typedef union YYSTYPE {
   llvm::Module                           *ModuleVal;
   llvm::Function                         *FunctionVal;
   llvm::BasicBlock                       *BasicBlockVal;
@@ -1134,1083 +1350,1578 @@
   llvm::ICmpInst::Predicate         IPredicate;
   llvm::FCmpInst::Predicate         FPredicate;
 } YYSTYPE;
-#include <stdio.h>
-
-#ifndef __cplusplus
-#ifndef __STDC__
-#define const
-#endif
+/* Line 196 of yacc.c.  */
+#line 1355 "llvmAsmParser.tab.c"
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
 #endif
 
 
 
-#define	YYFINAL		581
-#define	YYFLAG		-32768
-#define	YYNTBASE	151
+/* Copy the second part of user declarations.  */
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 390 ? yytranslate[x] : 232)
 
-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,   141,
-   142,   139,     2,   138,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,   146,
-   137,   147,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-   143,   140,   145,     2,     2,     2,     2,     2,   150,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,   144,
-     2,     2,   148,     2,   149,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     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
-};
+/* Line 219 of yacc.c.  */
+#line 1367 "llvmAsmParser.tab.c"
 
-#if YYDEBUG != 0
-static const short yyprhs[] = {     0,
-     0,     2,     4,     6,     8,    10,    12,    14,    16,    18,
-    20,    22,    24,    26,    28,    30,    32,    34,    36,    38,
-    40,    42,    44,    46,    48,    50,    52,    54,    56,    58,
-    60,    62,    64,    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,
-   119,   122,   123,   125,   127,   129,   130,   133,   135,   137,
-   139,   141,   143,   145,   147,   149,   150,   152,   154,   156,
-   157,   159,   161,   162,   164,   166,   168,   170,   171,   173,
-   175,   176,   178,   180,   182,   184,   186,   189,   191,   193,
-   195,   197,   198,   201,   203,   205,   207,   208,   211,   212,
-   215,   216,   220,   223,   224,   226,   227,   231,   233,   236,
-   238,   240,   242,   244,   246,   248,   251,   253,   256,   262,
-   268,   274,   280,   284,   287,   293,   298,   301,   303,   305,
-   307,   311,   313,   317,   319,   320,   322,   326,   331,   335,
-   339,   344,   349,   353,   360,   366,   369,   372,   375,   378,
-   381,   384,   387,   390,   393,   396,   399,   402,   409,   415,
-   424,   431,   438,   446,   454,   461,   470,   479,   483,   485,
-   487,   489,   491,   492,   495,   502,   504,   505,   507,   510,
-   511,   515,   516,   520,   524,   528,   532,   533,   541,   542,
-   551,   552,   561,   567,   570,   574,   576,   580,   584,   588,
-   592,   594,   595,   601,   605,   607,   611,   613,   614,   624,
-   626,   628,   633,   635,   637,   640,   644,   645,   647,   649,
-   651,   653,   655,   657,   659,   661,   663,   667,   669,   675,
-   677,   679,   681,   683,   685,   687,   690,   693,   696,   700,
-   703,   704,   706,   709,   712,   716,   726,   736,   745,   760,
-   762,   764,   771,   777,   780,   787,   795,   799,   805,   806,
-   807,   811,   814,   816,   822,   828,   835,   842,   847,   854,
-   859,   864,   871,   878,   881,   890,   892,   894,   895,   899,
-   906,   910,   917,   920,   926,   934
-};
+#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[] = {    69,
-     0,    70,     0,    71,     0,    72,     0,    73,     0,    74,
-     0,    75,     0,    76,     0,    77,     0,    81,     0,    82,
-     0,    83,     0,    78,     0,    79,     0,    80,     0,   112,
-     0,   113,     0,   114,     0,   115,     0,   116,     0,   117,
-     0,   118,     0,   119,     0,   120,     0,   121,     0,   122,
-     0,   123,     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,   100,     0,   101,     0,   102,     0,   103,     0,   104,
-     0,   105,     0,    92,     0,    93,     0,    94,     0,    95,
-     0,    22,     0,    23,     0,    11,     0,    12,     0,    13,
-     0,    16,     0,    19,     0,   158,     0,     0,   158,   137,
-     0,     0,    17,     0,    20,     0,   163,     0,     0,   161,
-   137,     0,    38,     0,    40,     0,    39,     0,    41,     0,
-    43,     0,    42,     0,    44,     0,    46,     0,     0,   134,
-     0,   135,     0,   136,     0,     0,    42,     0,    44,     0,
-     0,    38,     0,    39,     0,    40,     0,    43,     0,     0,
-    40,     0,    38,     0,     0,    57,     0,    58,     0,    59,
-     0,    60,     0,    61,     0,    56,     4,     0,   113,     0,
-   114,     0,   131,     0,   132,     0,     0,   172,   171,     0,
-   130,     0,   133,     0,   171,     0,     0,   174,   173,     0,
-     0,    49,     4,     0,     0,   138,    49,     4,     0,    30,
-    19,     0,     0,   177,     0,     0,   138,   180,   179,     0,
-   177,     0,    49,     4,     0,    11,     0,    12,     0,    13,
-     0,    14,     0,    45,     0,   181,     0,   182,   139,     0,
-   216,     0,   140,     4,     0,   182,   141,   186,   142,   174,
-     0,    10,   141,   186,   142,   174,     0,   143,     4,   144,
-   182,   145,     0,   146,     4,   144,   182,   147,     0,   148,
-   187,   149,     0,   148,   149,     0,   146,   148,   187,   149,
-   147,     0,   146,   148,   149,   147,     0,   182,   172,     0,
-   182,     0,    10,     0,   183,     0,   185,   138,   183,     0,
-   185,     0,   185,   138,    35,     0,    35,     0,     0,   182,
-     0,   187,   138,   182,     0,   182,   143,   190,   145,     0,
-   182,   143,   145,     0,   182,   150,    19,     0,   182,   146,
-   190,   147,     0,   182,   148,   190,   149,     0,   182,   148,
-   149,     0,   182,   146,   148,   190,   149,   147,     0,   182,
-   146,   148,   149,   147,     0,   182,    36,     0,   182,    37,
-     0,   182,   216,     0,   182,   189,     0,   182,    21,     0,
-   156,     3,     0,   156,     5,     0,   156,     4,     0,   156,
-     6,     0,    11,    22,     0,    11,    23,     0,   157,     9,
-     0,   153,   141,   188,    34,   182,   142,     0,   111,   141,
-   188,   227,   142,     0,   125,   141,   188,   138,   188,   138,
-   188,   142,     0,   151,   141,   188,   138,   188,   142,     0,
-   152,   141,   188,   138,   188,   142,     0,    84,   154,   141,
-   188,   138,   188,   142,     0,    85,   155,   141,   188,   138,
-   188,   142,     0,   127,   141,   188,   138,   188,   142,     0,
-   128,   141,   188,   138,   188,   138,   188,   142,     0,   129,
-   141,   188,   138,   188,   138,   188,   142,     0,   190,   138,
-   188,     0,   188,     0,    28,     0,    29,     0,    33,     0,
-     0,   184,   216,     0,   117,   141,   193,    34,   182,   142,
-     0,   195,     0,     0,   196,     0,   195,   196,     0,     0,
-    27,   197,   212,     0,     0,    26,   198,   213,     0,    54,
-    53,   202,     0,   160,    15,   182,     0,   160,    15,    10,
-     0,     0,   162,   166,   192,   191,   188,   199,   179,     0,
-     0,   162,   164,   166,   192,   191,   188,   200,   179,     0,
-     0,   162,   165,   166,   192,   191,   182,   201,   179,     0,
-   162,   166,    31,   169,   193,     0,    47,   203,     0,    50,
-   137,   204,     0,    19,     0,    48,   137,    19,     0,    62,
-   137,    19,     0,   143,   205,   145,     0,   205,   138,    19,
-     0,    19,     0,     0,   206,   138,   182,   172,   159,     0,
-   182,   172,   159,     0,   206,     0,   206,   138,    35,     0,
-    35,     0,     0,   170,   184,   161,   141,   207,   142,   174,
-   178,   175,     0,    24,     0,   148,     0,   168,   166,   208,
-   209,     0,    25,     0,   149,     0,   219,   211,     0,   167,
-   166,   208,     0,     0,    55,     0,     3,     0,     4,     0,
-     9,     0,    22,     0,    23,     0,    36,     0,    37,     0,
-    21,     0,   146,   190,   147,     0,   189,     0,    53,   214,
-    19,   138,    19,     0,     7,     0,     8,     0,   158,     0,
-   161,     0,   216,     0,   215,     0,   182,   217,     0,   219,
-   220,     0,   210,   220,     0,   221,   160,   222,     0,   221,
-   224,     0,     0,    18,     0,    63,   218,     0,    63,    10,
-     0,    64,    14,   217,     0,    64,    11,   217,   138,    14,
-   217,   138,    14,   217,     0,    65,   156,   217,   138,    14,
-   217,   143,   223,   145,     0,    65,   156,   217,   138,    14,
-   217,   143,   145,     0,    66,   170,   184,   217,   141,   226,
-   142,   174,    34,    14,   217,    67,    14,   217,     0,    67,
-     0,    68,     0,   223,   156,   215,   138,    14,   217,     0,
-   156,   215,   138,    14,   217,     0,   160,   229,     0,   182,
-   143,   217,   138,   217,   145,     0,   225,   138,   143,   217,
-   138,   217,   145,     0,   182,   217,   172,     0,   226,   138,
-   182,   217,   172,     0,     0,     0,   227,   138,   218,     0,
-    52,    51,     0,    51,     0,   151,   182,   217,   138,   217,
-     0,   152,   182,   217,   138,   217,     0,    84,   154,   182,
-   217,   138,   217,     0,    85,   155,   182,   217,   138,   217,
-     0,   153,   218,    34,   182,     0,   125,   218,   138,   218,
-   138,   218,     0,   126,   218,   138,   182,     0,   127,   218,
-   138,   218,     0,   128,   218,   138,   218,   138,   218,     0,
-   129,   218,   138,   218,   138,   218,     0,   124,   225,     0,
-   228,   170,   184,   217,   141,   226,   142,   174,     0,   231,
-     0,    32,     0,     0,   106,   182,   176,     0,   106,   182,
-   138,    11,   217,   176,     0,   107,   182,   176,     0,   107,
-   182,   138,    11,   217,   176,     0,   108,   218,     0,   230,
-   109,   182,   217,   176,     0,   230,   110,   218,   138,   182,
-   217,   176,     0,   111,   182,   217,   227,     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,
-  1111,  1111,  1111,  1111,  1111,  1111,  1111,  1111,  1111,  1112,
-  1112,  1112,  1112,  1112,  1112,  1113,  1113,  1113,  1113,  1113,
-  1113,  1113,  1114,  1114,  1114,  1114,  1114,  1117,  1117,  1118,
-  1118,  1119,  1119,  1120,  1120,  1121,  1121,  1125,  1125,  1126,
-  1126,  1127,  1127,  1128,  1128,  1129,  1129,  1130,  1130,  1131,
-  1131,  1132,  1133,  1138,  1139,  1139,  1141,  1141,  1142,  1142,
-  1146,  1150,  1155,  1155,  1157,  1158,  1163,  1169,  1170,  1171,
-  1172,  1173,  1177,  1178,  1179,  1183,  1184,  1185,  1186,  1190,
-  1191,  1192,  1196,  1197,  1198,  1199,  1200,  1204,  1205,  1206,
-  1209,  1209,  1210,  1211,  1212,  1213,  1214,  1222,  1223,  1224,
-  1225,  1228,  1229,  1234,  1235,  1236,  1239,  1240,  1247,  1247,
-  1254,  1254,  1263,  1271,  1271,  1277,  1277,  1279,  1284,  1297,
-  1297,  1297,  1297,  1300,  1304,  1308,  1315,  1320,  1328,  1358,
-  1389,  1394,  1406,  1416,  1420,  1430,  1437,  1444,  1451,  1456,
-  1461,  1468,  1469,  1476,  1483,  1491,  1497,  1509,  1537,  1553,
-  1582,  1610,  1636,  1656,  1682,  1702,  1714,  1721,  1787,  1797,
-  1807,  1813,  1823,  1829,  1839,  1844,  1849,  1857,  1869,  1891,
-  1899,  1905,  1916,  1921,  1926,  1932,  1938,  1947,  1951,  1959,
-  1959,  1962,  1962,  1965,  1976,  1997,  2002,  2010,  2011,  2015,
-  2015,  2019,  2019,  2022,  2025,  2049,  2060,  2067,  2070,  2076,
-  2079,  2086,  2090,  2105,  2108,  2114,  2127,  2131,  2136,  2138,
-  2143,  2148,  2157,  2167,  2178,  2182,  2191,  2200,  2205,  2327,
-  2327,  2329,  2338,  2338,  2340,  2345,  2357,  2361,  2366,  2370,
-  2374,  2378,  2382,  2386,  2390,  2394,  2398,  2423,  2427,  2441,
-  2445,  2449,  2453,  2459,  2459,  2465,  2474,  2478,  2487,  2496,
-  2505,  2509,  2514,  2518,  2522,  2527,  2537,  2556,  2565,  2645,
-  2649,  2656,  2667,  2680,  2690,  2701,  2711,  2720,  2729,  2732,
-  2733,  2740,  2744,  2749,  2770,  2787,  2801,  2815,  2827,  2835,
-  2842,  2848,  2854,  2860,  2875,  2960,  2965,  2969,  2976,  2983,
-  2991,  2998,  3006,  3014,  3028,  3045
-};
-#endif
-
-
-#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
-
-static const char * const yytname[] = {   "$","error","$undefined.","ESINT64VAL",
-"EUINT64VAL","ESAPINTVAL","EUAPINTVAL","LOCALVAL_ID","GLOBALVAL_ID","FPVAL",
-"VOID","INTTYPE","FLOAT","DOUBLE","LABEL","TYPE","LOCALVAR","GLOBALVAR","LABELSTR",
-"STRINGCONSTANT","ATSTRINGCONSTANT","ZEROINITIALIZER","TRUETOK","FALSETOK","BEGINTOK",
-"ENDTOK","DECLARE","DEFINE","GLOBAL","CONSTANT","SECTION","ALIAS","VOLATILE",
-"THREAD_LOCAL","TO","DOTDOTDOT","NULL_TOK","UNDEF","INTERNAL","LINKONCE","WEAK",
-"APPENDING","DLLIMPORT","DLLEXPORT","EXTERN_WEAK","OPAQUE","EXTERNAL","TARGET",
-"TRIPLE","ALIGN","DEPLIBS","CALL","TAIL","ASM_TOK","MODULE","SIDEEFFECT","CC_TOK",
-"CCC_TOK","FASTCC_TOK","COLDCC_TOK","X86_STDCALLCC_TOK","X86_FASTCALLCC_TOK",
-"DATALAYOUT","RET","BR","SWITCH","INVOKE","UNWIND","UNREACHABLE","ADD","SUB",
-"MUL","UDIV","SDIV","FDIV","UREM","SREM","FREM","AND","OR","XOR","SHL","LSHR",
-"ASHR","ICMP","FCMP","EQ","NE","SLT","SGT","SLE","SGE","ULT","UGT","ULE","UGE",
-"OEQ","ONE","OLT","OGT","OLE","OGE","ORD","UNO","UEQ","UNE","MALLOC","ALLOCA",
-"FREE","LOAD","STORE","GETELEMENTPTR","TRUNC","ZEXT","SEXT","FPTRUNC","FPEXT",
-"BITCAST","UITOFP","SITOFP","FPTOUI","FPTOSI","INTTOPTR","PTRTOINT","PHI_TOK",
-"SELECT","VAARG","EXTRACTELEMENT","INSERTELEMENT","SHUFFLEVECTOR","NORETURN",
-"INREG","SRET","NOUNWIND","DEFAULT","HIDDEN","PROTECTED","'='","','","'*'","'\\\\'",
-"'('","')'","'['","'x'","']'","'<'","'>'","'{'","'}'","'c'","ArithmeticOps",
-"LogicalOps","CastOps","IPredicates","FPredicates","IntType","FPType","LocalName",
-"OptLocalName","OptLocalAssign","GlobalName","OptGlobalAssign","GlobalAssign",
-"GVInternalLinkage","GVExternalLinkage","GVVisibilityStyle","FunctionDeclareLinkage",
-"FunctionDefineLinkage","AliasLinkage","OptCallingConv","ParamAttr","OptParamAttrs",
-"FuncAttr","OptFuncAttrs","OptAlign","OptCAlign","SectionString","OptSection",
-"GlobalVarAttributes","GlobalVarAttribute","PrimType","Types","ArgType","ResultTypes",
-"ArgTypeList","ArgTypeListI","TypeListI","ConstVal","ConstExpr","ConstVector",
-"GlobalType","ThreadLocal","AliaseeRef","Module","DefinitionList","Definition",
-"@1","@2","@3","@4","@5","AsmBlock","TargetDefinition","LibrariesDefinition",
-"LibList","ArgListH","ArgList","FunctionHeaderH","BEGIN","FunctionHeader","END",
-"Function","FunctionProto","OptSideEffect","ConstValueRef","SymbolicValueRef",
-"ValueRef","ResolvedVal","BasicBlockList","BasicBlock","InstructionList","BBTerminatorInst",
-"JumpTable","Inst","PHIList","ValueRefList","IndexList","OptTailCall","InstVal",
-"OptVolatile","MemoryInst", NULL
-};
-#endif
-
-static const short yyr1[] = {     0,
-   151,   151,   151,   151,   151,   151,   151,   151,   151,   152,
-   152,   152,   152,   152,   152,   153,   153,   153,   153,   153,
-   153,   153,   153,   153,   153,   153,   153,   154,   154,   154,
-   154,   154,   154,   154,   154,   154,   154,   155,   155,   155,
-   155,   155,   155,   155,   155,   155,   155,   155,   155,   155,
-   155,   155,   155,   156,   157,   157,   158,   158,   159,   159,
-   160,   160,   161,   161,   162,   162,   163,   164,   164,   164,
-   164,   164,   165,   165,   165,   166,   166,   166,   166,   167,
-   167,   167,   168,   168,   168,   168,   168,   169,   169,   169,
-   170,   170,   170,   170,   170,   170,   170,   171,   171,   171,
-   171,   172,   172,   173,   173,   173,   174,   174,   175,   175,
-   176,   176,   177,   178,   178,   179,   179,   180,   180,   181,
-   181,   181,   181,   182,   182,   182,   182,   182,   182,   182,
-   182,   182,   182,   182,   182,   182,   183,   184,   184,   185,
-   185,   186,   186,   186,   186,   187,   187,   188,   188,   188,
-   188,   188,   188,   188,   188,   188,   188,   188,   188,   188,
-   188,   188,   188,   188,   188,   188,   188,   189,   189,   189,
-   189,   189,   189,   189,   189,   189,   189,   190,   190,   191,
-   191,   192,   192,   193,   193,   194,   194,   195,   195,   197,
-   196,   198,   196,   196,   196,   196,   199,   196,   200,   196,
-   201,   196,   196,   196,   196,   202,   203,   203,   204,   205,
-   205,   205,   206,   206,   207,   207,   207,   207,   208,   209,
-   209,   210,   211,   211,   212,   213,   214,   214,   215,   215,
-   215,   215,   215,   215,   215,   215,   215,   215,   215,   216,
-   216,   216,   216,   217,   217,   218,   219,   219,   220,   221,
-   221,   221,   222,   222,   222,   222,   222,   222,   222,   222,
-   222,   223,   223,   224,   225,   225,   226,   226,   226,   227,
-   227,   228,   228,   229,   229,   229,   229,   229,   229,   229,
-   229,   229,   229,   229,   229,   229,   230,   230,   231,   231,
-   231,   231,   231,   231,   231,   231
-};
-
-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,     0,
-     2,     0,     1,     1,     1,     0,     2,     1,     1,     1,
-     1,     1,     1,     1,     1,     0,     1,     1,     1,     0,
-     1,     1,     0,     1,     1,     1,     1,     0,     1,     1,
-     0,     1,     1,     1,     1,     1,     2,     1,     1,     1,
-     1,     0,     2,     1,     1,     1,     0,     2,     0,     2,
-     0,     3,     2,     0,     1,     0,     3,     1,     2,     1,
-     1,     1,     1,     1,     1,     2,     1,     2,     5,     5,
-     5,     5,     3,     2,     5,     4,     2,     1,     1,     1,
-     3,     1,     3,     1,     0,     1,     3,     4,     3,     3,
-     4,     4,     3,     6,     5,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     6,     5,     8,
-     6,     6,     7,     7,     6,     8,     8,     3,     1,     1,
-     1,     1,     0,     2,     6,     1,     0,     1,     2,     0,
-     3,     0,     3,     3,     3,     3,     0,     7,     0,     8,
-     0,     8,     5,     2,     3,     1,     3,     3,     3,     3,
-     1,     0,     5,     3,     1,     3,     1,     0,     9,     1,
-     1,     4,     1,     1,     2,     3,     0,     1,     1,     1,
-     1,     1,     1,     1,     1,     1,     3,     1,     5,     1,
-     1,     1,     1,     1,     1,     2,     2,     2,     3,     2,
-     0,     1,     2,     2,     3,     9,     9,     8,    14,     1,
-     1,     6,     5,     2,     6,     7,     3,     5,     0,     0,
-     3,     2,     1,     5,     5,     6,     6,     4,     6,     4,
-     4,     6,     6,     2,     8,     1,     1,     0,     3,     6,
-     3,     6,     2,     5,     7,     4
-};
-
-static const short yydefact[] = {    66,
-    57,    63,    58,    64,   192,   190,     0,     0,     0,     0,
-     0,     0,    76,    65,    66,   188,    80,    83,     0,     0,
-   204,     0,     0,    61,     0,    67,    68,    70,    69,    71,
-    73,    72,    74,    75,    77,    78,    79,    76,    76,   183,
-   189,    81,    82,    76,   193,    84,    85,    86,    87,    76,
-   251,   191,   251,     0,     0,   212,   205,   206,   194,   240,
-   241,   196,   120,   121,   122,   123,   124,     0,     0,     0,
-     0,   242,   243,   125,   195,   127,   183,   183,    88,   182,
-     0,    91,    91,   252,   248,    62,   223,   224,   225,   247,
-   207,   208,   211,     0,   145,   128,     0,     0,     0,     0,
-   134,   146,     0,   126,   145,     0,     0,    90,    89,     0,
-   180,   181,     0,     0,    92,    93,    94,    95,    96,     0,
-   226,     0,   288,   250,     0,   209,   144,   102,   140,   142,
-     0,     0,     0,     0,     0,     0,   133,     0,     0,     0,
-   139,     0,   138,     0,   203,   120,   121,   122,     0,     0,
-     0,   197,    97,     0,   220,   221,   222,   287,   273,     0,
-     0,     0,     0,    91,   260,   261,     1,     2,     3,     4,
-     5,     6,     7,     8,     9,    13,    14,    15,    10,    11,
-    12,     0,     0,     0,     0,     0,     0,    16,    17,    18,
-    19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   249,    91,
-   264,     0,   286,   210,   137,     0,   107,     0,     0,   136,
-     0,   147,   107,   199,   201,     0,   184,   165,   166,   161,
-   163,   162,   164,   167,   160,   156,   157,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   159,   158,   116,     0,   272,   254,     0,   253,     0,
-     0,    54,     0,     0,    28,    29,    30,    31,    32,    33,
-    34,    35,    36,    37,     0,    52,    53,    48,    49,    50,
-    51,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-    47,     0,   111,   111,   293,     0,     0,   284,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,    98,
-    99,   100,   101,   103,   143,   141,   130,   131,   132,   135,
-   129,   116,   116,     0,     0,     0,     0,     0,     0,     0,
-     0,   149,   179,     0,     0,     0,   153,     0,   150,     0,
-     0,     0,     0,   198,   218,   229,   230,   231,   236,   232,
-   233,   234,   235,   227,     0,   238,   245,   244,   246,     0,
-   255,     0,     0,     0,     0,     0,   289,     0,   291,   270,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   104,   105,   106,   108,   200,   202,     0,
-     0,     0,   270,     0,     0,     0,     0,     0,   148,   134,
-   146,     0,   151,   152,     0,     0,     0,     0,     0,   118,
-   116,   217,   102,   215,     0,   228,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   296,     0,     0,     0,
-   280,   281,     0,     0,     0,     0,   278,     0,   111,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   178,   155,
-     0,     0,     0,     0,   113,   119,   117,    60,     0,   107,
-     0,   237,     0,     0,   269,     0,     0,   111,   112,   111,
-     0,     0,     0,     0,     0,     0,   274,   275,   269,     0,
-   294,     0,   185,     0,     0,   169,     0,     0,     0,     0,
-   154,     0,     0,     0,    59,   214,   216,   102,   114,     0,
-     0,     0,     0,     0,   276,   277,   290,   292,   271,     0,
-     0,   279,   282,   283,     0,   111,     0,     0,     0,   175,
-     0,     0,   171,   172,   168,    60,   115,   109,   239,     0,
-     0,   102,     0,   107,   265,     0,   107,   295,   173,   174,
-     0,     0,     0,   213,     0,   219,     0,   258,     0,     0,
-   267,     0,     0,   266,   285,   170,   176,   177,   110,   256,
-     0,   257,     0,   102,     0,     0,     0,   268,     0,     0,
-     0,     0,   263,     0,     0,   262,     0,   259,     0,     0,
-     0
-};
-
-static const short yydefgoto[] = {   249,
-   250,   251,   275,   292,   149,   150,    72,   496,    11,    73,
-    13,    14,    38,    39,    40,    44,    50,   110,   120,   314,
-   215,   387,   317,   546,   367,   410,   528,   344,   411,    74,
-   151,   129,   144,   130,   131,   103,   333,   356,   334,   113,
-    81,   145,   579,    15,    16,    18,    17,   254,   322,   323,
-    59,    21,    57,    94,   414,   415,   121,   157,    51,    89,
-    52,    45,   417,   357,    76,   359,   259,    53,    85,    86,
-   209,   550,   124,   298,   504,   427,   210,   211,   212,   213
-};
-
-static const short yypact[] = {    58,
--32768,-32768,-32768,-32768,-32768,-32768,   -31,   -88,   100,   -74,
-   156,    -6,   492,-32768,   595,-32768,    78,   161,    76,    79,
--32768,    99,   202,-32768,  1112,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,   147,   147,   191,
--32768,-32768,-32768,   147,-32768,-32768,-32768,-32768,-32768,   147,
-   235,-32768,    37,   243,   256,   259,-32768,-32768,-32768,-32768,
--32768,   150,-32768,-32768,-32768,-32768,-32768,   284,   300,     4,
-    26,-32768,-32768,-32768,   169,-32768,   287,   287,   293,-32768,
-   237,   199,   199,-32768,-32768,    95,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,   -81,   453,-32768,   181,   184,   198,   150,
--32768,   169,   -97,-32768,   453,   237,   237,-32768,-32768,   956,
--32768,-32768,  1148,   328,-32768,-32768,-32768,-32768,-32768,  1194,
--32768,    -8,  1356,-32768,   315,-32768,-32768,   169,-32768,   204,
-   201,  1208,  1208,   208,   -82,  1208,-32768,   206,  1148,  1208,
-   150,   215,   169,   299,-32768,    96,   340,   354,   297,   355,
-   781,-32768,-32768,   125,-32768,-32768,-32768,-32768,-32768,   314,
-  1254,   162,   357,   199,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,   487,   467,  1208,  1208,  1208,  1208,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1208,
-  1208,  1208,  1208,  1208,  1208,  1208,  1208,  1208,-32768,   199,
--32768,   187,-32768,-32768,   119,  1001,-32768,    10,    84,-32768,
-   223,   169,-32768,-32768,   169,   956,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,   487,   467,   234,
-   236,   238,   239,   240,  1037,  1270,   260,   359,   253,   261,
-   263,-32768,-32768,   246,   264,-32768,   150,   631,-32768,   759,
-   759,-32768,   759,  1194,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,  1208,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,  1208,   -45,   -35,-32768,   631,   170,   269,   273,   274,
-   275,   276,   278,   631,   631,   342,  1194,  1208,  1208,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,     2,-32768,-32768,-32768,
-     2,   246,   246,   363,   279,   280,  1148,  1148,  1148,  1148,
-  1148,-32768,-32768,   -50,   379,   -55,-32768,   -69,-32768,  1148,
-  1148,  1148,    30,-32768,  1052,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,   346,  1148,-32768,-32768,-32768,-32768,   281,
--32768,   290,   759,   631,   631,    17,-32768,    19,-32768,-32768,
-   759,   282,  1208,  1208,  1208,  1208,  1208,   292,   296,  1208,
-   759,   631,   301,-32768,-32768,-32768,-32768,-32768,-32768,  1208,
-  1148,  1148,-32768,   303,   305,   306,   307,  1148,-32768,   288,
-   781,   -68,-32768,-32768,   308,   309,   404,   430,   446,-32768,
-   246,-32768,   169,   316,   313,-32768,   438,   -49,   445,   448,
-   327,   333,   336,   759,   471,   759,   343,   344,   759,   353,
-   169,-32768,   356,   358,   759,   759,   169,   339,   361,  1208,
-    49,   362,   364,    -1,  1148,  1148,  1148,  1148,-32768,-32768,
-   345,  1148,  1148,  1208,-32768,-32768,-32768,    16,  1098,-32768,
-   367,-32768,   759,   759,  1208,   759,   759,   361,-32768,   361,
-  1208,   759,   368,  1208,  1208,  1208,-32768,-32768,  1208,   452,
--32768,   631,-32768,  1148,  1148,-32768,   369,   366,   371,   373,
--32768,   370,   372,   182,-32768,-32768,-32768,   169,   106,   476,
-   375,   374,   631,    18,-32768,-32768,-32768,-32768,-32768,   352,
-   759,-32768,-32768,-32768,    60,   361,   376,   378,  1148,-32768,
-  1148,  1148,-32768,-32768,-32768,    16,-32768,   472,-32768,   509,
-    -2,-32768,  1208,-32768,-32768,   384,-32768,-32768,-32768,-32768,
-   382,   395,   397,-32768,   536,-32768,   759,-32768,   912,     1,
-   119,   631,   116,-32768,     2,-32768,-32768,-32768,-32768,-32768,
-   403,-32768,   912,-32768,   528,   529,   406,   119,   759,   759,
-   531,   480,-32768,   759,   535,-32768,   759,-32768,   554,   555,
--32768
-};
-
-static const short yypgoto[] = {   433,
-   460,   461,   349,   351,  -162,-32768,     0,    65,   506,    11,
--32768,-32768,-32768,-32768,    15,-32768,-32768,-32768,  -120,  -292,
-  -407,-32768,  -220,-32768,  -281,    98,-32768,  -272,-32768,-32768,
-   -23,   386,  -110,-32768,   493,   501,    31,  -147,  -228,   230,
-   262,   377,-32768,-32768,   590,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,   523,-32768,-32768,-32768,
--32768,-32768,-32768,  -502,  -137,   122,  -181,-32768,   556,-32768,
--32768,-32768,-32768,-32768,   128,   220,-32768,-32768,-32768,-32768
-};
-
-
-#define	YYLAST		1485
-
-
-static const short yytable[] = {    10,
-   263,    75,   321,   252,   295,   458,   227,    98,   262,   154,
-    12,   262,   369,   253,    10,   155,    19,   336,   338,   299,
-   300,   301,   302,   303,   386,    12,   306,   424,   386,   426,
-    20,     1,    60,    61,     3,   100,    63,    64,    65,    66,
-   136,     1,     2,   264,     3,     4,   561,   102,    22,   388,
-   389,   137,    77,    78,    84,   136,   125,  -187,    82,   408,
-   567,    87,    24,   126,    83,   425,   221,   425,   398,   398,
-    67,   128,   -62,     1,     2,   102,     3,     4,   409,   404,
-   451,   128,   398,     5,     6,    10,   143,   398,   398,   307,
-   526,   403,   366,   104,   399,   105,   143,   462,   -54,   -54,
-   -54,   -54,   368,   104,     7,   105,   402,     8,   218,   219,
-     1,     9,   222,     3,   310,   311,   225,   228,   229,    42,
-   358,    43,   358,   358,   551,   358,   418,   383,   310,   311,
-    26,   384,   312,   313,   385,   408,   471,   258,   457,   156,
-   486,     2,   548,   152,     4,   562,   312,   313,   104,   565,
-   105,    99,    23,   363,   318,   533,   568,   481,   358,   534,
-   293,   294,   258,   296,   255,    68,   358,   358,    69,   224,
-    25,    70,   260,    71,   101,   261,   297,   258,   258,   258,
-   258,   258,   304,   305,   258,    88,   507,   104,   508,   105,
-   483,   430,   128,   432,   433,   434,   381,   533,    46,    47,
-    48,   537,   143,    49,    60,    61,   386,   100,    63,    64,
-    65,    66,    54,     1,     2,    55,     3,     4,   310,   311,
-    58,    79,   104,    80,   105,   358,   358,   358,   310,   311,
-   319,   310,   311,   358,   538,   384,   312,   313,   385,   499,
-   143,    56,    67,   358,   358,   384,   312,   313,   385,   312,
-   313,   364,    84,   252,   114,   115,   116,   117,   118,   119,
-   386,    91,   386,   253,   111,   112,    60,    61,   365,   100,
-   146,   147,   148,    66,    92,     1,     2,    93,     3,     4,
-    35,    36,    37,   143,   382,   258,   358,    96,   358,   509,
-    95,   358,   512,   513,   514,   308,   309,   358,   358,   230,
-   231,   232,   233,    97,    67,    60,    61,   104,   104,   105,
-   105,   401,   371,   553,     1,     2,   555,     3,     4,    80,
-   104,   413,   105,   525,   132,   358,   358,   133,   358,   358,
-   108,   153,   109,   214,   358,   139,   140,    68,   106,   107,
-    69,   216,   217,    70,   358,    71,   134,   223,   -55,   258,
-   431,   258,   258,   258,   220,   226,   437,   393,   394,   395,
-   396,   397,   -56,   234,   256,   358,   441,   262,   549,   320,
-   405,   406,   407,   358,   327,   380,   328,   339,   329,   330,
-   331,   360,   361,   343,   362,    60,    61,   563,   100,   146,
-   147,   148,    66,   340,     1,     2,   390,     3,     4,    68,
-   416,   341,    69,   342,   345,    70,   372,    71,   337,   358,
-   373,   374,   375,   376,   358,   377,   482,   370,   419,   391,
-   392,   442,   443,    67,   429,   378,   379,   420,   449,   435,
-   494,   358,   358,   436,   450,   498,   358,   454,   440,   358,
-   445,   503,   446,   447,   448,   452,   453,   258,   455,   456,
-   258,   258,   258,   459,   460,   503,   461,   495,   463,    60,
-    61,   464,   100,    63,    64,    65,    66,   465,     1,     2,
-   466,     3,     4,   467,   469,   487,   488,   489,   490,   479,
-   471,   472,   492,   493,   421,   422,   423,   127,   276,   277,
-   474,   491,   428,   475,   529,   476,   535,    67,   480,   484,
-   425,   485,   438,   439,   500,   511,   519,   520,   521,   552,
-   522,   523,   530,   524,   517,   518,   531,   539,    68,   540,
-   545,    69,   547,   556,    70,   495,    71,   400,   554,    27,
-    28,    29,    30,    31,    32,    33,   557,    34,   558,   559,
-   566,   569,   570,   571,   574,   468,   575,   470,   577,   541,
-   473,   542,   543,   580,   581,   206,   477,   478,   278,   279,
-   280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
-   290,   291,   265,   266,   267,   268,   269,   270,   271,   272,
-   273,   274,   207,   208,   501,   502,   325,   505,   506,   326,
-   544,   123,    68,   510,  -186,    69,   527,   138,    70,   135,
-    71,   316,   324,   516,    41,   122,   515,     0,    90,   -62,
-     1,     2,   444,     3,     4,     0,     0,     0,     0,     0,
-     5,     6,     0,     0,   532,    35,    36,    37,     0,     0,
-     0,     0,   536,   346,   347,     0,     0,    60,    61,   348,
-     0,     7,     0,     0,     8,     0,     1,     2,     9,     3,
-     4,   349,   350,   351,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   352,   353,   560,     0,
-     0,     0,     0,   564,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   354,     0,     0,     0,     0,     0,     0,
-   572,   573,     0,     0,     0,   576,     0,     0,   578,   167,
-   168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-   178,   179,   180,   181,   238,   239,     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,   240,   188,   189,   190,   191,   192,   193,   194,   195,
-   196,   197,   198,   199,     0,   241,     0,   242,   243,   244,
-     0,   346,   347,     0,     0,    60,    61,   348,     0,   104,
-     0,   105,     0,     0,     1,     2,   355,     3,     4,   349,
-   350,   351,     0,     0,     0,     0,     0,    60,    61,     0,
-     0,     0,     0,     0,   352,   353,     1,     2,     0,     3,
-     4,   235,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   354,     0,     0,     0,     0,   236,   237,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   167,   168,   169,
-   170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-   180,   181,   238,   239,     0,     0,     0,     0,     0,   167,
-   168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-   178,   179,   180,   181,   238,   239,     0,     0,     0,   240,
-   188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-   198,   199,     0,   241,     0,   242,   243,   244,     0,     0,
-     0,   240,   188,   189,   190,   191,   192,   193,   194,   195,
-   196,   197,   198,   199,   355,   241,     0,   242,   243,   244,
-     0,     0,     0,     0,   346,   347,     0,     0,     0,   104,
-   348,   105,     0,   245,     0,     0,   246,     0,   247,     0,
-   248,     0,   349,   350,   351,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   352,   353,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,    60,    61,   354,   141,    63,    64,    65,    66,
-     0,     1,     2,     0,     3,     4,     0,     0,     0,     0,
-   167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-   177,   178,   179,   180,   181,   238,   239,     0,     0,     0,
-    67,     0,     0,     0,     0,     0,     0,    60,    61,     0,
-   100,    63,    64,    65,    66,     0,     1,     2,     0,     3,
-     4,     0,   240,   188,   189,   190,   191,   192,   193,   194,
-   195,   196,   197,   198,   199,   315,   241,     0,   242,   243,
-   244,     0,     0,    60,    61,    67,   100,   146,   147,   148,
-    66,     0,     1,     2,     0,     3,     4,   355,    60,    61,
-     0,   100,    63,    64,    65,    66,     0,     1,     2,     0,
-     3,     4,   142,     0,     0,     0,     0,     0,     0,     0,
-     0,    67,     0,     0,     0,     0,   412,     0,     0,     0,
-     0,     0,     0,     0,     0,    68,    67,     0,    69,     0,
-     0,    70,     0,    71,    60,    61,     0,   100,    63,    64,
-    65,    66,     0,     1,     2,     0,     3,     4,    60,    61,
-     0,    62,    63,    64,    65,    66,     0,     1,     2,     0,
-     3,     4,   497,     0,     0,     0,     0,     0,     0,     0,
-    68,     0,    67,    69,     0,     0,    70,     0,    71,     0,
-     0,     0,     0,     0,    60,    61,    67,   100,   146,   147,
-   148,    66,     0,     1,     2,     0,     3,     4,     0,     0,
-     0,     0,     0,     0,     0,     0,    68,     0,     0,    69,
-     0,   332,    70,     0,    71,     0,     0,     0,     0,     0,
-     0,    68,    67,     0,    69,     0,     0,    70,     0,    71,
-    60,    61,     0,   141,    63,    64,    65,    66,     0,     1,
-     2,     0,     3,     4,    60,    61,     0,   100,    63,    64,
-    65,    66,     0,     1,     2,     0,     3,     4,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    68,    67,     0,
-    69,     0,     0,    70,     0,    71,     0,     0,     0,     0,
-     0,    68,    67,     0,    69,     0,     0,    70,     0,    71,
-    60,    61,     0,   257,    63,    64,    65,    66,     0,     1,
-     2,     0,     3,     4,     0,     0,    60,    61,     0,   100,
-   146,   147,   148,    66,     0,     1,     2,    68,     3,     4,
-    69,     0,     0,    70,     0,    71,     0,     0,    67,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,    67,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    68,     0,     0,    69,     0,     0,    70,
-     0,    71,     0,     0,     0,     0,     0,    68,     0,     0,
-    69,     0,     0,    70,     0,    71,     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,   158,     0,     0,
-     0,     0,     0,    68,     0,     0,    69,     0,     0,    70,
-     0,    71,     0,     0,     0,     0,   159,   160,     0,    68,
-     0,     0,    69,     0,     0,    70,     0,   335,   161,   162,
-   163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-   173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-   183,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   184,   185,   186,     0,     0,   187,   188,   189,   190,
-   191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-   201,   202,   203,   204,   205
-};
-
-static const short yycheck[] = {     0,
-   163,    25,   223,   151,   186,   413,   144,     4,    11,   120,
-     0,    11,   294,   151,    15,    24,    48,   246,   247,   201,
-   202,   203,   204,   205,   317,    15,   208,    11,   321,    11,
-    62,    16,     7,     8,    19,    10,    11,    12,    13,    14,
-   138,    16,    17,   164,    19,    20,   549,    71,   137,   322,
-   323,   149,    38,    39,    18,   138,   138,     0,    44,    30,
-   563,    25,   137,   145,    50,    49,   149,    49,   138,   138,
-    45,    95,    15,    16,    17,    99,    19,    20,    49,   149,
-   149,   105,   138,    26,    27,    86,   110,   138,   138,   210,
-   498,   147,   138,   139,   145,   141,   120,   147,     3,     4,
-     5,     6,   138,   139,    47,   141,   335,    50,   132,   133,
-    16,    54,   136,    19,   113,   114,   140,    22,    23,    42,
-   258,    44,   260,   261,   532,   263,   355,   309,   113,   114,
-   137,   130,   131,   132,   133,    30,   138,   161,   411,   148,
-   142,    17,   145,   113,    20,   145,   131,   132,   139,    34,
-   141,   148,    53,   264,   145,   138,   564,   439,   296,   142,
-   184,   185,   186,   187,   154,   140,   304,   305,   143,   139,
-    15,   146,    11,   148,   149,    14,   200,   201,   202,   203,
-   204,   205,   206,   207,   208,   149,   468,   139,   470,   141,
-   142,   373,   216,   375,   376,   377,   307,   138,    38,    39,
-    40,   142,   226,    43,     7,     8,   499,    10,    11,    12,
-    13,    14,   137,    16,    17,   137,    19,    20,   113,   114,
-    19,    31,   139,    33,   141,   363,   364,   365,   113,   114,
-   147,   113,   114,   371,   516,   130,   131,   132,   133,   460,
-   264,   143,    45,   381,   382,   130,   131,   132,   133,   131,
-   132,   275,    18,   401,    56,    57,    58,    59,    60,    61,
-   553,    19,   555,   401,    28,    29,     7,     8,   292,    10,
-    11,    12,    13,    14,    19,    16,    17,    19,    19,    20,
-   134,   135,   136,   307,   308,   309,   424,     4,   426,   471,
-   141,   429,   474,   475,   476,   109,   110,   435,   436,     3,
-     4,     5,     6,     4,    45,     7,     8,   139,   139,   141,
-   141,   335,   143,   534,    16,    17,   537,    19,    20,    33,
-   139,   345,   141,   142,   144,   463,   464,   144,   466,   467,
-    38,     4,    40,    19,   472,   106,   107,   140,    77,    78,
-   143,   138,   142,   146,   482,   148,   149,   142,     9,   373,
-   374,   375,   376,   377,   147,   141,   380,   327,   328,   329,
-   330,   331,     9,     9,    51,   503,   390,    11,   531,   147,
-   340,   341,   342,   511,   141,    34,   141,    19,   141,   141,
-   141,   260,   261,   138,   263,     7,     8,   550,    10,    11,
-    12,    13,    14,   141,    16,    17,    34,    19,    20,   140,
-    55,   141,   143,   141,   141,   146,   138,   148,   149,   547,
-   138,   138,   138,   138,   552,   138,   440,   296,   138,   141,
-   141,   391,   392,    45,   143,   304,   305,   138,   398,   138,
-   454,   569,   570,   138,   147,   459,   574,    34,   138,   577,
-   138,   465,   138,   138,   138,   138,   138,   471,    19,     4,
-   474,   475,   476,   138,   142,   479,    19,   458,    14,     7,
-     8,    14,    10,    11,    12,    13,    14,   141,    16,    17,
-   138,    19,    20,   138,     4,   445,   446,   447,   448,   141,
-   138,   138,   452,   453,   363,   364,   365,    35,    22,    23,
-   138,   147,   371,   138,    19,   138,   145,    45,   138,   138,
-    49,   138,   381,   382,   138,   138,   138,   142,   138,   533,
-   138,   142,   138,   142,   484,   485,   143,   142,   140,   142,
-    49,   143,    14,   142,   146,   526,   148,   149,   145,    38,
-    39,    40,    41,    42,    43,    44,   142,    46,   142,     4,
-   138,    14,    14,   138,    14,   424,    67,   426,    14,   519,
-   429,   521,   522,     0,     0,   123,   435,   436,    92,    93,
-    94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-   104,   105,    86,    87,    88,    89,    90,    91,    92,    93,
-    94,    95,   123,   123,   463,   464,   238,   466,   467,   239,
-   526,    86,   140,   472,     0,   143,   499,   105,   146,    99,
-   148,   216,   226,   482,    15,    83,   479,    -1,    53,    15,
-    16,    17,   393,    19,    20,    -1,    -1,    -1,    -1,    -1,
-    26,    27,    -1,    -1,   503,   134,   135,   136,    -1,    -1,
-    -1,    -1,   511,     3,     4,    -1,    -1,     7,     8,     9,
-    -1,    47,    -1,    -1,    50,    -1,    16,    17,    54,    19,
-    20,    21,    22,    23,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    36,    37,   547,    -1,
-    -1,    -1,    -1,   552,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    53,    -1,    -1,    -1,    -1,    -1,    -1,
-   569,   570,    -1,    -1,    -1,   574,    -1,    -1,   577,    69,
-    70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-    80,    81,    82,    83,    84,    85,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-   120,   121,   122,   123,    -1,   125,    -1,   127,   128,   129,
-    -1,     3,     4,    -1,    -1,     7,     8,     9,    -1,   139,
-    -1,   141,    -1,    -1,    16,    17,   146,    19,    20,    21,
-    22,    23,    -1,    -1,    -1,    -1,    -1,     7,     8,    -1,
-    -1,    -1,    -1,    -1,    36,    37,    16,    17,    -1,    19,
-    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    53,    -1,    -1,    -1,    -1,    36,    37,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,    70,    71,
-    72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-    82,    83,    84,    85,    -1,    -1,    -1,    -1,    -1,    69,
-    70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-    80,    81,    82,    83,    84,    85,    -1,    -1,    -1,   111,
-   112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-   122,   123,    -1,   125,    -1,   127,   128,   129,    -1,    -1,
-    -1,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-   120,   121,   122,   123,   146,   125,    -1,   127,   128,   129,
-    -1,    -1,    -1,    -1,     3,     4,    -1,    -1,    -1,   139,
-     9,   141,    -1,   143,    -1,    -1,   146,    -1,   148,    -1,
-   150,    -1,    21,    22,    23,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    36,    37,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,     7,     8,    53,    10,    11,    12,    13,    14,
-    -1,    16,    17,    -1,    19,    20,    -1,    -1,    -1,    -1,
-    69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-    79,    80,    81,    82,    83,    84,    85,    -1,    -1,    -1,
-    45,    -1,    -1,    -1,    -1,    -1,    -1,     7,     8,    -1,
-    10,    11,    12,    13,    14,    -1,    16,    17,    -1,    19,
-    20,    -1,   111,   112,   113,   114,   115,   116,   117,   118,
-   119,   120,   121,   122,   123,    35,   125,    -1,   127,   128,
-   129,    -1,    -1,     7,     8,    45,    10,    11,    12,    13,
-    14,    -1,    16,    17,    -1,    19,    20,   146,     7,     8,
-    -1,    10,    11,    12,    13,    14,    -1,    16,    17,    -1,
-    19,    20,   117,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    45,    -1,    -1,    -1,    -1,    35,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   140,    45,    -1,   143,    -1,
-    -1,   146,    -1,   148,     7,     8,    -1,    10,    11,    12,
-    13,    14,    -1,    16,    17,    -1,    19,    20,     7,     8,
-    -1,    10,    11,    12,    13,    14,    -1,    16,    17,    -1,
-    19,    20,    35,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   140,    -1,    45,   143,    -1,    -1,   146,    -1,   148,    -1,
-    -1,    -1,    -1,    -1,     7,     8,    45,    10,    11,    12,
-    13,    14,    -1,    16,    17,    -1,    19,    20,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   140,    -1,    -1,   143,
-    -1,   145,   146,    -1,   148,    -1,    -1,    -1,    -1,    -1,
-    -1,   140,    45,    -1,   143,    -1,    -1,   146,    -1,   148,
-     7,     8,    -1,    10,    11,    12,    13,    14,    -1,    16,
-    17,    -1,    19,    20,     7,     8,    -1,    10,    11,    12,
-    13,    14,    -1,    16,    17,    -1,    19,    20,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   140,    45,    -1,
-   143,    -1,    -1,   146,    -1,   148,    -1,    -1,    -1,    -1,
-    -1,   140,    45,    -1,   143,    -1,    -1,   146,    -1,   148,
-     7,     8,    -1,    10,    11,    12,    13,    14,    -1,    16,
-    17,    -1,    19,    20,    -1,    -1,     7,     8,    -1,    10,
-    11,    12,    13,    14,    -1,    16,    17,   140,    19,    20,
-   143,    -1,    -1,   146,    -1,   148,    -1,    -1,    45,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   140,    -1,    -1,   143,    -1,    -1,   146,
-    -1,   148,    -1,    -1,    -1,    -1,    -1,   140,    -1,    -1,
-   143,    -1,    -1,   146,    -1,   148,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    32,    -1,    -1,
-    -1,    -1,    -1,   140,    -1,    -1,   143,    -1,    -1,   146,
-    -1,   148,    -1,    -1,    -1,    -1,    51,    52,    -1,   140,
-    -1,    -1,   143,    -1,    -1,   146,    -1,   148,    63,    64,
-    65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-    85,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   106,   107,   108,    -1,    -1,   111,   112,   113,   114,
-   115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-   125,   126,   127,   128,   129
-};
-/* -*-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  43
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   1610
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS  152
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS  82
+/* YYNRULES -- Number of rules. */
+#define YYNRULES  298
+/* YYNRULES -- Number of states. */
+#define YYNSTATES  582
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   392
+
+#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,
+     142,   143,   140,     2,   139,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     147,   138,   148,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,   144,   141,   146,     2,     2,     2,     2,     2,   151,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     145,     2,     2,   149,     2,   150,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     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
+};
+
+#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,   124,   127,   128,   130,   132,   134,   135,
+     138,   140,   142,   144,   146,   148,   150,   152,   154,   155,
+     157,   159,   161,   162,   164,   166,   167,   169,   171,   173,
+     175,   176,   178,   180,   181,   183,   185,   187,   189,   191,
+     194,   196,   198,   200,   202,   203,   206,   208,   210,   212,
+     213,   216,   217,   220,   221,   225,   228,   229,   231,   232,
+     236,   238,   241,   243,   245,   247,   249,   251,   253,   256,
+     258,   261,   267,   273,   279,   285,   289,   292,   298,   303,
+     306,   308,   310,   312,   316,   318,   322,   324,   325,   327,
+     331,   336,   340,   344,   349,   354,   358,   365,   371,   374,
+     377,   380,   383,   386,   389,   392,   395,   398,   401,   404,
+     407,   414,   420,   429,   436,   443,   451,   459,   466,   475,
+     484,   488,   490,   492,   494,   496,   497,   500,   507,   509,
+     510,   512,   515,   516,   520,   521,   525,   529,   533,   537,
+     538,   546,   547,   556,   557,   566,   572,   575,   579,   581,
+     585,   589,   593,   597,   599,   600,   606,   610,   612,   616,
+     618,   619,   629,   631,   633,   638,   640,   642,   645,   649,
+     650,   652,   654,   656,   658,   660,   662,   664,   666,   668,
+     672,   674,   680,   682,   684,   686,   688,   690,   692,   695,
+     698,   701,   705,   708,   709,   711,   714,   717,   721,   731,
+     741,   750,   765,   767,   769,   776,   782,   785,   792,   800,
+     804,   810,   811,   812,   816,   819,   821,   827,   833,   840,
+     847,   852,   859,   864,   869,   876,   883,   886,   895,   897,
+     899,   900,   904,   911,   915,   922,   925,   931,   939
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const short int yyrhs[] =
+{
+     196,     0,    -1,    70,    -1,    71,    -1,    72,    -1,    73,
+      -1,    74,    -1,    75,    -1,    76,    -1,    77,    -1,    78,
+      -1,    82,    -1,    83,    -1,    84,    -1,    79,    -1,    80,
+      -1,    81,    -1,   113,    -1,   114,    -1,   115,    -1,   116,
+      -1,   117,    -1,   118,    -1,   119,    -1,   120,    -1,   121,
+      -1,   122,    -1,   123,    -1,   124,    -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,   100,    -1,   101,    -1,   102,    -1,   103,
+      -1,   104,    -1,   105,    -1,   106,    -1,    93,    -1,    94,
+      -1,    95,    -1,    96,    -1,    23,    -1,    24,    -1,    11,
+      -1,    12,    -1,    13,    -1,    16,    -1,    19,    -1,    21,
+      -1,   160,    -1,    -1,   160,   138,    -1,    -1,    17,    -1,
+      20,    -1,   165,    -1,    -1,   163,   138,    -1,    39,    -1,
+      41,    -1,    40,    -1,    42,    -1,    44,    -1,    43,    -1,
+      45,    -1,    47,    -1,    -1,   135,    -1,   136,    -1,   137,
+      -1,    -1,    43,    -1,    45,    -1,    -1,    39,    -1,    40,
+      -1,    41,    -1,    44,    -1,    -1,    41,    -1,    39,    -1,
+      -1,    58,    -1,    59,    -1,    60,    -1,    61,    -1,    62,
+      -1,    57,     4,    -1,   114,    -1,   115,    -1,   132,    -1,
+     133,    -1,    -1,   174,   173,    -1,   131,    -1,   134,    -1,
+     173,    -1,    -1,   176,   175,    -1,    -1,    50,     4,    -1,
+      -1,   139,    50,     4,    -1,    31,    19,    -1,    -1,   179,
+      -1,    -1,   139,   182,   181,    -1,   179,    -1,    50,     4,
+      -1,    11,    -1,    12,    -1,    13,    -1,    14,    -1,    46,
+      -1,   183,    -1,   184,   140,    -1,   218,    -1,   141,     4,
+      -1,   184,   142,   188,   143,   176,    -1,    10,   142,   188,
+     143,   176,    -1,   144,     4,   145,   184,   146,    -1,   147,
+       4,   145,   184,   148,    -1,   149,   189,   150,    -1,   149,
+     150,    -1,   147,   149,   189,   150,   148,    -1,   147,   149,
+     150,   148,    -1,   184,   174,    -1,   184,    -1,    10,    -1,
+     185,    -1,   187,   139,   185,    -1,   187,    -1,   187,   139,
+      36,    -1,    36,    -1,    -1,   184,    -1,   189,   139,   184,
+      -1,   184,   144,   192,   146,    -1,   184,   144,   146,    -1,
+     184,   151,    19,    -1,   184,   147,   192,   148,    -1,   184,
+     149,   192,   150,    -1,   184,   149,   150,    -1,   184,   147,
+     149,   192,   150,   148,    -1,   184,   147,   149,   150,   148,
+      -1,   184,    37,    -1,   184,    38,    -1,   184,   218,    -1,
+     184,   191,    -1,   184,    22,    -1,   158,     3,    -1,   158,
+       5,    -1,   158,     4,    -1,   158,     6,    -1,    11,    23,
+      -1,    11,    24,    -1,   159,     9,    -1,   155,   142,   190,
+      35,   184,   143,    -1,   112,   142,   190,   229,   143,    -1,
+     126,   142,   190,   139,   190,   139,   190,   143,    -1,   153,
+     142,   190,   139,   190,   143,    -1,   154,   142,   190,   139,
+     190,   143,    -1,    85,   156,   142,   190,   139,   190,   143,
+      -1,    86,   157,   142,   190,   139,   190,   143,    -1,   128,
+     142,   190,   139,   190,   143,    -1,   129,   142,   190,   139,
+     190,   139,   190,   143,    -1,   130,   142,   190,   139,   190,
+     139,   190,   143,    -1,   192,   139,   190,    -1,   190,    -1,
+      29,    -1,    30,    -1,    34,    -1,    -1,   186,   218,    -1,
+     118,   142,   195,    35,   184,   143,    -1,   197,    -1,    -1,
+     198,    -1,   197,   198,    -1,    -1,    28,   199,   214,    -1,
+      -1,    27,   200,   215,    -1,    55,    54,   204,    -1,   162,
+      15,   184,    -1,   162,    15,    10,    -1,    -1,   164,   168,
+     194,   193,   190,   201,   181,    -1,    -1,   164,   166,   168,
+     194,   193,   190,   202,   181,    -1,    -1,   164,   167,   168,
+     194,   193,   184,   203,   181,    -1,   164,   168,    32,   171,
+     195,    -1,    48,   205,    -1,    51,   138,   206,    -1,    19,
+      -1,    49,   138,    19,    -1,    63,   138,    19,    -1,   144,
+     207,   146,    -1,   207,   139,    19,    -1,    19,    -1,    -1,
+     208,   139,   184,   174,   161,    -1,   184,   174,   161,    -1,
+     208,    -1,   208,   139,    36,    -1,    36,    -1,    -1,   172,
+     186,   163,   142,   209,   143,   176,   180,   177,    -1,    25,
+      -1,   149,    -1,   170,   168,   210,   211,    -1,    26,    -1,
+     150,    -1,   221,   213,    -1,   169,   168,   210,    -1,    -1,
+      56,    -1,     3,    -1,     4,    -1,     9,    -1,    23,    -1,
+      24,    -1,    37,    -1,    38,    -1,    22,    -1,   147,   192,
+     148,    -1,   191,    -1,    54,   216,    19,   139,    19,    -1,
+       7,    -1,     8,    -1,   160,    -1,   163,    -1,   218,    -1,
+     217,    -1,   184,   219,    -1,   221,   222,    -1,   212,   222,
+      -1,   223,   162,   224,    -1,   223,   226,    -1,    -1,    18,
+      -1,    64,   220,    -1,    64,    10,    -1,    65,    14,   219,
+      -1,    65,    11,   219,   139,    14,   219,   139,    14,   219,
+      -1,    66,   158,   219,   139,    14,   219,   144,   225,   146,
+      -1,    66,   158,   219,   139,    14,   219,   144,   146,    -1,
+      67,   172,   186,   219,   142,   228,   143,   176,    35,    14,
+     219,    68,    14,   219,    -1,    68,    -1,    69,    -1,   225,
+     158,   217,   139,    14,   219,    -1,   158,   217,   139,    14,
+     219,    -1,   162,   231,    -1,   184,   144,   219,   139,   219,
+     146,    -1,   227,   139,   144,   219,   139,   219,   146,    -1,
+     184,   219,   174,    -1,   228,   139,   184,   219,   174,    -1,
+      -1,    -1,   229,   139,   220,    -1,    53,    52,    -1,    52,
+      -1,   153,   184,   219,   139,   219,    -1,   154,   184,   219,
+     139,   219,    -1,    85,   156,   184,   219,   139,   219,    -1,
+      86,   157,   184,   219,   139,   219,    -1,   155,   220,    35,
+     184,    -1,   126,   220,   139,   220,   139,   220,    -1,   127,
+     220,   139,   184,    -1,   128,   220,   139,   220,    -1,   129,
+     220,   139,   220,   139,   220,    -1,   130,   220,   139,   220,
+     139,   220,    -1,   125,   227,    -1,   230,   172,   186,   219,
+     142,   228,   143,   176,    -1,   233,    -1,    33,    -1,    -1,
+     107,   184,   178,    -1,   107,   184,   139,    11,   219,   178,
+      -1,   108,   184,   178,    -1,   108,   184,   139,    11,   219,
+     178,    -1,   109,   220,    -1,   232,   110,   184,   219,   178,
+      -1,   232,   111,   220,   139,   184,   219,   178,    -1,   112,
+     184,   219,   229,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const unsigned short int yyrline[] =
+{
+       0,  1112,  1112,  1112,  1112,  1112,  1112,  1112,  1112,  1112,
+    1112,  1113,  1113,  1113,  1113,  1113,  1113,  1114,  1114,  1114,
+    1114,  1114,  1114,  1115,  1115,  1115,  1115,  1115,  1115,  1118,
+    1118,  1119,  1119,  1120,  1120,  1121,  1121,  1122,  1122,  1126,
+    1126,  1127,  1127,  1128,  1128,  1129,  1129,  1130,  1130,  1131,
+    1131,  1132,  1132,  1133,  1134,  1139,  1140,  1140,  1142,  1142,
+    1142,  1143,  1143,  1147,  1151,  1156,  1156,  1158,  1159,  1164,
+    1170,  1171,  1172,  1173,  1174,  1178,  1179,  1180,  1184,  1185,
+    1186,  1187,  1191,  1192,  1193,  1197,  1198,  1199,  1200,  1201,
+    1205,  1206,  1207,  1210,  1211,  1212,  1213,  1214,  1215,  1216,
+    1223,  1224,  1225,  1226,  1229,  1230,  1235,  1236,  1237,  1240,
+    1241,  1248,  1249,  1255,  1256,  1264,  1272,  1273,  1278,  1279,
+    1280,  1285,  1298,  1298,  1298,  1298,  1301,  1305,  1309,  1316,
+    1321,  1329,  1359,  1390,  1395,  1407,  1417,  1421,  1431,  1438,
+    1445,  1452,  1457,  1462,  1469,  1470,  1477,  1484,  1492,  1498,
+    1510,  1538,  1554,  1583,  1611,  1637,  1657,  1683,  1703,  1715,
+    1722,  1788,  1798,  1808,  1814,  1824,  1830,  1840,  1845,  1850,
+    1858,  1870,  1892,  1900,  1906,  1917,  1922,  1927,  1933,  1939,
+    1948,  1952,  1960,  1960,  1963,  1963,  1966,  1977,  1998,  2003,
+    2011,  2012,  2016,  2016,  2020,  2020,  2023,  2026,  2050,  2061,
+    2061,  2072,  2071,  2081,  2080,  2091,  2106,  2109,  2115,  2128,
+    2132,  2137,  2139,  2144,  2149,  2158,  2168,  2179,  2183,  2192,
+    2201,  2206,  2328,  2328,  2330,  2339,  2339,  2341,  2346,  2358,
+    2362,  2367,  2371,  2375,  2379,  2383,  2387,  2391,  2395,  2399,
+    2424,  2428,  2442,  2446,  2450,  2454,  2460,  2460,  2466,  2475,
+    2479,  2488,  2497,  2506,  2510,  2515,  2519,  2523,  2528,  2538,
+    2557,  2566,  2646,  2650,  2657,  2668,  2681,  2691,  2702,  2712,
+    2721,  2730,  2733,  2734,  2741,  2745,  2750,  2771,  2788,  2802,
+    2816,  2828,  2836,  2843,  2849,  2855,  2861,  2876,  2961,  2966,
+    2970,  2977,  2984,  2992,  2999,  3007,  3015,  3029,  3046
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+static const char *const yytname[] =
+{
+  "$end", "error", "$undefined", "ESINT64VAL", "EUINT64VAL", "ESAPINTVAL",
+  "EUAPINTVAL", "LOCALVAL_ID", "GLOBALVAL_ID", "FPVAL", "VOID", "INTTYPE",
+  "FLOAT", "DOUBLE", "LABEL", "TYPE", "LOCALVAR", "GLOBALVAR", "LABELSTR",
+  "STRINGCONSTANT", "ATSTRINGCONSTANT", "PCTSTRINGCONSTANT",
+  "ZEROINITIALIZER", "TRUETOK", "FALSETOK", "BEGINTOK", "ENDTOK",
+  "DECLARE", "DEFINE", "GLOBAL", "CONSTANT", "SECTION", "ALIAS",
+  "VOLATILE", "THREAD_LOCAL", "TO", "DOTDOTDOT", "NULL_TOK", "UNDEF",
+  "INTERNAL", "LINKONCE", "WEAK", "APPENDING", "DLLIMPORT", "DLLEXPORT",
+  "EXTERN_WEAK", "OPAQUE", "EXTERNAL", "TARGET", "TRIPLE", "ALIGN",
+  "DEPLIBS", "CALL", "TAIL", "ASM_TOK", "MODULE", "SIDEEFFECT", "CC_TOK",
+  "CCC_TOK", "FASTCC_TOK", "COLDCC_TOK", "X86_STDCALLCC_TOK",
+  "X86_FASTCALLCC_TOK", "DATALAYOUT", "RET", "BR", "SWITCH", "INVOKE",
+  "UNWIND", "UNREACHABLE", "ADD", "SUB", "MUL", "UDIV", "SDIV", "FDIV",
+  "UREM", "SREM", "FREM", "AND", "OR", "XOR", "SHL", "LSHR", "ASHR",
+  "ICMP", "FCMP", "EQ", "NE", "SLT", "SGT", "SLE", "SGE", "ULT", "UGT",
+  "ULE", "UGE", "OEQ", "ONE", "OLT", "OGT", "OLE", "OGE", "ORD", "UNO",
+  "UEQ", "UNE", "MALLOC", "ALLOCA", "FREE", "LOAD", "STORE",
+  "GETELEMENTPTR", "TRUNC", "ZEXT", "SEXT", "FPTRUNC", "FPEXT", "BITCAST",
+  "UITOFP", "SITOFP", "FPTOUI", "FPTOSI", "INTTOPTR", "PTRTOINT",
+  "PHI_TOK", "SELECT", "VAARG", "EXTRACTELEMENT", "INSERTELEMENT",
+  "SHUFFLEVECTOR", "NORETURN", "INREG", "SRET", "NOUNWIND", "DEFAULT",
+  "HIDDEN", "PROTECTED", "'='", "','", "'*'", "'\\\\'", "'('", "')'",
+  "'['", "'x'", "']'", "'<'", "'>'", "'{'", "'}'", "'c'", "$accept",
+  "ArithmeticOps", "LogicalOps", "CastOps", "IPredicates", "FPredicates",
+  "IntType", "FPType", "LocalName", "OptLocalName", "OptLocalAssign",
+  "GlobalName", "OptGlobalAssign", "GlobalAssign", "GVInternalLinkage",
+  "GVExternalLinkage", "GVVisibilityStyle", "FunctionDeclareLinkage",
+  "FunctionDefineLinkage", "AliasLinkage", "OptCallingConv", "ParamAttr",
+  "OptParamAttrs", "FuncAttr", "OptFuncAttrs", "OptAlign", "OptCAlign",
+  "SectionString", "OptSection", "GlobalVarAttributes",
+  "GlobalVarAttribute", "PrimType", "Types", "ArgType", "ResultTypes",
+  "ArgTypeList", "ArgTypeListI", "TypeListI", "ConstVal", "ConstExpr",
+  "ConstVector", "GlobalType", "ThreadLocal", "AliaseeRef", "Module",
+  "DefinitionList", "Definition", "@1", "@2", "@3", "@4", "@5", "AsmBlock",
+  "TargetDefinition", "LibrariesDefinition", "LibList", "ArgListH",
+  "ArgList", "FunctionHeaderH", "BEGIN", "FunctionHeader", "END",
+  "Function", "FunctionProto", "OptSideEffect", "ConstValueRef",
+  "SymbolicValueRef", "ValueRef", "ResolvedVal", "BasicBlockList",
+  "BasicBlock", "InstructionList", "BBTerminatorInst", "JumpTable", "Inst",
+  "PHIList", "ValueRefList", "IndexList", "OptTailCall", "InstVal",
+  "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,    61,    44,
+      42,    92,    40,    41,    91,   120,    93,    60,    62,   123,
+     125,    99
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const unsigned char yyr1[] =
+{
+       0,   152,   153,   153,   153,   153,   153,   153,   153,   153,
+     153,   154,   154,   154,   154,   154,   154,   155,   155,   155,
+     155,   155,   155,   155,   155,   155,   155,   155,   155,   156,
+     156,   156,   156,   156,   156,   156,   156,   156,   156,   157,
+     157,   157,   157,   157,   157,   157,   157,   157,   157,   157,
+     157,   157,   157,   157,   157,   158,   159,   159,   160,   160,
+     160,   161,   161,   162,   162,   163,   163,   164,   164,   165,
+     166,   166,   166,   166,   166,   167,   167,   167,   168,   168,
+     168,   168,   169,   169,   169,   170,   170,   170,   170,   170,
+     171,   171,   171,   172,   172,   172,   172,   172,   172,   172,
+     173,   173,   173,   173,   174,   174,   175,   175,   175,   176,
+     176,   177,   177,   178,   178,   179,   180,   180,   181,   181,
+     182,   182,   183,   183,   183,   183,   184,   184,   184,   184,
+     184,   184,   184,   184,   184,   184,   184,   184,   184,   185,
+     186,   186,   187,   187,   188,   188,   188,   188,   189,   189,
+     190,   190,   190,   190,   190,   190,   190,   190,   190,   190,
+     190,   190,   190,   190,   190,   190,   190,   190,   190,   190,
+     191,   191,   191,   191,   191,   191,   191,   191,   191,   191,
+     192,   192,   193,   193,   194,   194,   195,   195,   196,   196,
+     197,   197,   199,   198,   200,   198,   198,   198,   198,   201,
+     198,   202,   198,   203,   198,   198,   198,   198,   204,   205,
+     205,   206,   207,   207,   207,   208,   208,   209,   209,   209,
+     209,   210,   211,   211,   212,   213,   213,   214,   215,   216,
+     216,   217,   217,   217,   217,   217,   217,   217,   217,   217,
+     217,   217,   218,   218,   218,   218,   219,   219,   220,   221,
+     221,   222,   223,   223,   223,   224,   224,   224,   224,   224,
+     224,   224,   224,   224,   225,   225,   226,   227,   227,   228,
+     228,   228,   229,   229,   230,   230,   231,   231,   231,   231,
+     231,   231,   231,   231,   231,   231,   231,   231,   231,   232,
+     232,   233,   233,   233,   233,   233,   233,   233,   233
+};
+
+/* 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,     0,     2,     0,     1,     1,     1,     0,     2,
+       1,     1,     1,     1,     1,     1,     1,     1,     0,     1,
+       1,     1,     0,     1,     1,     0,     1,     1,     1,     1,
+       0,     1,     1,     0,     1,     1,     1,     1,     1,     2,
+       1,     1,     1,     1,     0,     2,     1,     1,     1,     0,
+       2,     0,     2,     0,     3,     2,     0,     1,     0,     3,
+       1,     2,     1,     1,     1,     1,     1,     1,     2,     1,
+       2,     5,     5,     5,     5,     3,     2,     5,     4,     2,
+       1,     1,     1,     3,     1,     3,     1,     0,     1,     3,
+       4,     3,     3,     4,     4,     3,     6,     5,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       6,     5,     8,     6,     6,     7,     7,     6,     8,     8,
+       3,     1,     1,     1,     1,     0,     2,     6,     1,     0,
+       1,     2,     0,     3,     0,     3,     3,     3,     3,     0,
+       7,     0,     8,     0,     8,     5,     2,     3,     1,     3,
+       3,     3,     3,     1,     0,     5,     3,     1,     3,     1,
+       0,     9,     1,     1,     4,     1,     1,     2,     3,     0,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
+       1,     5,     1,     1,     1,     1,     1,     1,     2,     2,
+       2,     3,     2,     0,     1,     2,     2,     3,     9,     9,
+       8,    14,     1,     1,     6,     5,     2,     6,     7,     3,
+       5,     0,     0,     3,     2,     1,     5,     5,     6,     6,
+       4,     6,     4,     4,     6,     6,     2,     8,     1,     1,
+       0,     3,     6,     3,     6,     2,     5,     7,     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[] =
+{
+      68,    58,    65,    59,    66,    60,   194,   192,     0,     0,
+       0,     0,     0,     0,    78,    67,     0,    68,   190,    82,
+      85,     0,     0,   206,     0,     0,    63,     0,    69,    70,
+      72,    71,    73,    75,    74,    76,    77,    79,    80,    81,
+      78,    78,   185,     1,   191,    83,    84,    78,   195,    86,
+      87,    88,    89,    78,   253,   193,   253,     0,     0,   214,
+     207,   208,   196,   242,   243,   198,   122,   123,   124,   125,
+     126,     0,     0,     0,     0,   244,   245,   127,   197,   129,
+     185,   185,    90,   184,     0,    93,    93,   254,   250,    64,
+     225,   226,   227,   249,   209,   210,   213,     0,   147,   130,
+       0,     0,     0,     0,   136,   148,     0,   128,   147,     0,
+       0,    92,    91,     0,   182,   183,     0,     0,    94,    95,
+      96,    97,    98,     0,   228,     0,   290,   252,     0,   211,
+     146,   104,   142,   144,     0,     0,     0,     0,     0,     0,
+     135,     0,     0,     0,   141,     0,   140,     0,   205,   122,
+     123,   124,     0,     0,     0,   199,    99,     0,   222,   223,
+     224,   289,   275,     0,     0,     0,     0,    93,   262,   263,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    14,
+      15,    16,    11,    12,    13,     0,     0,     0,     0,     0,
+       0,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   251,    93,   266,     0,   288,   212,   139,     0,
+     109,     0,     0,   138,     0,   149,   109,   201,   203,     0,
+     186,   167,   168,   163,   165,   164,   166,   169,   162,   158,
+     159,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   161,   160,   118,     0,   274,
+     256,     0,   255,     0,     0,    55,     0,     0,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,     0,    53,
+      54,    49,    50,    51,    52,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,     0,   113,   113,   295,     0,
+       0,   286,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   100,   101,   102,   103,   105,   145,   143,
+     132,   133,   134,   137,   131,   118,   118,     0,     0,     0,
+       0,     0,     0,     0,     0,   151,   181,     0,     0,     0,
+     155,     0,   152,     0,     0,     0,     0,   200,   220,   231,
+     232,   233,   238,   234,   235,   236,   237,   229,     0,   240,
+     247,   246,   248,     0,   257,     0,     0,     0,     0,     0,
+     291,     0,   293,   272,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   106,   107,   108,
+     110,   202,   204,     0,     0,     0,   272,     0,     0,     0,
+       0,     0,   150,   136,   148,     0,   153,   154,     0,     0,
+       0,     0,     0,   120,   118,   219,   104,   217,     0,   230,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     298,     0,     0,     0,   282,   283,     0,     0,     0,     0,
+     280,     0,   113,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   180,   157,     0,     0,     0,     0,   115,   121,
+     119,    62,     0,   109,     0,   239,     0,     0,   271,     0,
+       0,   113,   114,   113,     0,     0,     0,     0,     0,     0,
+     276,   277,   271,     0,   296,     0,   187,     0,     0,   171,
+       0,     0,     0,     0,   156,     0,     0,     0,    61,   216,
+     218,   104,   116,     0,     0,     0,     0,     0,   278,   279,
+     292,   294,   273,     0,     0,   281,   284,   285,     0,   113,
+       0,     0,     0,   177,     0,     0,   173,   174,   170,    62,
+     117,   111,   241,     0,     0,   104,     0,   109,   267,     0,
+     109,   297,   175,   176,     0,     0,     0,   215,     0,   221,
+       0,   260,     0,     0,   269,     0,     0,   268,   287,   172,
+     178,   179,   112,   258,     0,   259,     0,   104,     0,     0,
+       0,   270,     0,     0,     0,     0,   265,     0,     0,   264,
+       0,   261
+};
+
+/* YYDEFGOTO[NTERM-NUM]. */
+static const short int yydefgoto[] =
+{
+      -1,   252,   253,   254,   278,   295,   152,   153,    75,   499,
+      12,    76,    14,    15,    40,    41,    42,    47,    53,   113,
+     123,   317,   218,   390,   320,   549,   370,   413,   531,   347,
+     414,    77,   154,   132,   147,   133,   134,   106,   336,   359,
+     337,   116,    84,   148,    16,    17,    18,    20,    19,   257,
+     325,   326,    62,    23,    60,    97,   417,   418,   124,   160,
+      54,    92,    55,    48,   420,   360,    79,   362,   262,    56,
+      88,    89,   212,   553,   127,   301,   507,   430,   213,   214,
+     215,   216
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -509
+static const short int yypact[] =
+{
+      47,  -509,  -509,  -509,  -509,  -509,  -509,  -509,    -8,  -120,
+     -11,  -110,    58,   -77,   432,  -509,    79,   240,  -509,   204,
+      64,   -50,   -32,  -509,   -17,   114,  -509,  1280,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+     102,   102,   286,  -509,  -509,  -509,  -509,   102,  -509,  -509,
+    -509,  -509,  -509,   102,   122,  -509,     1,   130,   141,   157,
+    -509,  -509,  -509,  -509,  -509,    62,  -509,  -509,  -509,  -509,
+    -509,   191,   239,     5,   365,  -509,  -509,  -509,   181,  -509,
+     196,   196,   292,  -509,   170,   220,   220,  -509,  -509,   118,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,   -93,  1082,  -509,
+     101,   106,   566,    62,  -509,   181,   -94,  -509,  1082,   170,
+     170,  -509,  -509,  1122,  -509,  -509,  1327,   250,  -509,  -509,
+    -509,  -509,  -509,  1342,  -509,   -14,  1480,  -509,   251,  -509,
+    -509,   181,  -509,   119,   140,  1379,  1379,   125,   -58,  1379,
+    -509,   147,  1327,  1379,    62,   151,   181,   255,  -509,    28,
+     302,   308,   219,   315,   863,  -509,  -509,   149,  -509,  -509,
+    -509,  -509,  -509,   273,  1394,   222,   317,   220,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,   395,   443,  1379,  1379,  1379,
+    1379,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  1379,  1379,  1379,  1379,  1379,  1379,  1379,
+    1379,  1379,  -509,   220,  -509,   155,  -509,  -509,    14,  1137,
+    -509,   -10,   -41,  -509,   184,   181,  -509,  -509,   181,  1122,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,   395,   443,   192,   194,   195,   197,   198,  1168,  1431,
+     820,   319,   199,   200,   201,  -509,  -509,   205,   206,  -509,
+      62,   610,  -509,   739,   739,  -509,   739,  1342,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  1379,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,  1379,     2,    66,  -509,   610,
+      46,   207,   208,   210,   216,   217,   224,   610,   610,   323,
+    1342,  1379,  1379,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+      41,  -509,  -509,  -509,    41,   205,   205,   326,   227,   238,
+    1327,  1327,  1327,  1327,  1327,  -509,  -509,   -46,   904,   -99,
+    -509,   -56,  -509,  1327,  1327,  1327,    19,  -509,  1184,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,   312,  1327,  -509,
+    -509,  -509,  -509,   244,  -509,   248,   739,   610,   610,    10,
+    -509,    15,  -509,  -509,   739,   246,  1379,  1379,  1379,  1379,
+    1379,   249,   252,  1379,   739,   610,   253,  -509,  -509,  -509,
+    -509,  -509,  -509,  1379,  1327,  1327,  -509,   254,   257,   258,
+     259,  1327,  -509,   260,   863,   -54,  -509,  -509,   261,   262,
+     359,   380,   398,  -509,   205,  -509,   181,   266,   263,  -509,
+     388,   -68,   399,   400,   267,   277,   283,   739,   408,   739,
+     284,   285,   739,   288,   181,  -509,   289,   290,   739,   739,
+     181,   293,   291,  1379,    89,   295,   299,   -24,  1327,  1327,
+    1327,  1327,  -509,  -509,   296,  1327,  1327,  1379,  -509,  -509,
+    -509,    38,  1231,  -509,   300,  -509,   739,   739,  1379,   739,
+     739,   291,  -509,   291,  1379,   739,   304,  1379,  1379,  1379,
+    -509,  -509,  1379,   391,  -509,   610,  -509,  1327,  1327,  -509,
+     306,   303,   310,   311,  -509,   316,   322,   154,  -509,  -509,
+    -509,   181,    83,   428,   321,   324,   610,   -23,  -509,  -509,
+    -509,  -509,  -509,   309,   739,  -509,  -509,  -509,    53,   291,
+     335,   350,  1327,  -509,  1327,  1327,  -509,  -509,  -509,    38,
+    -509,   404,  -509,   455,    -1,  -509,  1379,  -509,  -509,   351,
+    -509,  -509,  -509,  -509,   353,   355,   356,  -509,   496,  -509,
+     739,  -509,   993,     4,    14,   610,    87,  -509,    41,  -509,
+    -509,  -509,  -509,  -509,   362,  -509,   993,  -509,   488,   489,
+     366,    14,   739,   739,   490,   439,  -509,   739,   494,  -509,
+     739,  -509
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const short int yypgoto[] =
+{
+    -509,   385,   387,   390,   276,   278,  -164,  -509,     0,    -7,
+     429,     8,  -509,  -509,  -509,  -509,    37,  -509,  -509,  -509,
+    -143,  -308,  -410,  -509,  -221,  -509,  -284,    17,  -509,  -296,
+    -509,  -509,   -26,   305,  -119,  -509,   413,   424,   -30,  -151,
+    -227,   103,   226,   298,  -509,  -509,   513,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,   445,  -509,
+    -509,  -509,  -509,  -509,  -509,  -508,  -140,    96,  -169,  -509,
+     476,  -509,  -509,  -509,  -509,  -509,    51,   156,  -509,  -509,
+    -509,  -509
+};
+
+/* 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 -190
+static const short int yytable[] =
+{
+      11,    78,   266,   255,   157,   324,   461,   230,    13,   101,
+     265,   158,   389,   372,   256,   265,   389,    11,    24,    87,
+     298,   427,   339,   341,   267,    13,   429,    90,    26,   391,
+     392,   -55,   -55,   -55,   -55,   302,   303,   304,   305,   306,
+     401,    21,   309,    25,   564,   139,   128,  -189,   105,   406,
+     411,   231,   232,   129,     1,    22,   140,     3,   570,     5,
+     428,    28,   -64,     1,     2,   428,     3,     4,     5,   412,
+     310,   401,   131,    27,     6,     7,   105,    80,    81,    43,
+     465,   139,   131,   401,    85,   401,   155,   146,    57,    11,
+      86,   529,   224,   401,   407,     8,   454,   146,     9,   107,
+     402,   108,    10,    49,    50,    51,    58,   322,    52,   221,
+     222,   405,   227,   225,   411,   474,   536,   228,   460,   489,
+     537,   361,   568,   361,   361,   554,   361,    59,   313,   314,
+     107,   421,   108,    61,     1,   159,   321,     3,   261,     5,
+      87,   369,   107,   386,   108,   551,   315,   316,   366,    94,
+     565,    91,   313,   314,   102,   313,   314,   571,   484,   361,
+      95,   296,   297,   261,   299,   258,     2,   361,   361,     4,
+     315,   316,   387,   315,   316,   388,    96,   300,   261,   261,
+     261,   261,   261,   307,   308,   261,   107,   510,   108,   511,
+     374,   384,   536,   131,   389,    99,   540,   313,   314,   114,
+     115,   313,   314,   146,    98,   371,   107,   433,   108,   435,
+     436,   437,   142,   143,   387,   315,   316,   388,   387,   315,
+     316,   388,   233,   234,   235,   236,   361,   361,   361,   107,
+      83,   108,   486,   263,   361,   541,   264,    37,    38,    39,
+    -188,   146,   502,   100,   361,   361,   135,    45,   389,    46,
+     389,   136,   367,   255,   156,   -64,     1,     2,   219,     3,
+       4,     5,    63,    64,   256,   311,   312,     6,     7,   368,
+     217,     1,     2,   223,     3,     4,     5,   117,   118,   119,
+     120,   121,   122,   220,   146,   385,   261,   361,     8,   361,
+     226,     9,   361,   229,   107,    10,   108,   528,   361,   361,
+     396,   397,   398,   399,   400,   512,   109,   110,   515,   516,
+     517,   -56,   404,   408,   409,   410,   556,   -57,    82,   558,
+      83,   107,   416,   108,   237,   259,   361,   361,   265,   361,
+     361,   111,   323,   112,   330,   361,   331,   332,   342,   333,
+     334,   343,   344,   345,   346,   361,   375,   376,   348,   377,
+     261,   434,   261,   261,   261,   378,   379,   440,   383,   363,
+     364,   393,   365,   380,   445,   446,   361,   444,   419,   394,
+     552,   452,    63,    64,   361,   103,    66,    67,    68,    69,
+     395,     1,     2,   422,     3,     4,     5,   423,   438,   566,
+     432,   439,   443,   448,   457,   373,   449,   450,   451,   458,
+     455,   456,   459,   381,   382,   462,   463,   464,   453,   468,
+     361,    70,   472,   466,   467,   361,   469,   485,   490,   491,
+     492,   493,   470,   474,   475,   495,   496,   477,   478,   479,
+     483,   497,   361,   361,   487,   482,   501,   361,   488,   503,
+     361,   428,   506,   514,   494,   522,   523,   532,   261,   524,
+     525,   261,   261,   261,   548,   538,   506,   520,   521,   526,
+     533,   498,   424,   425,   426,   527,   279,   280,   534,   550,
+     431,    29,    30,    31,    32,    33,    34,    35,   542,    36,
+     441,   442,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   544,   543,   545,   546,   559,   557,   560,   561,
+     562,   569,   572,   573,   577,   574,    71,   578,   580,    72,
+     555,   209,    73,   210,    74,   104,   211,   328,   126,   530,
+     329,   141,   547,   471,   319,   473,   138,   327,   476,   498,
+      44,   125,    93,   518,   480,   481,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+       0,     0,   447,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   504,   505,     0,   508,   509,    37,    38,    39,
+       0,   513,     0,    63,    64,     0,   103,    66,    67,    68,
+      69,   519,     1,     2,     0,     3,     4,     5,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   535,     0,     0,     0,     0,     0,     0,     0,
+     539,     0,    70,   349,   350,     0,     0,    63,    64,   351,
+       0,     0,     0,     0,     0,     0,     1,     2,     0,     3,
+       4,     5,   352,   353,   354,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   563,   355,   356,     0,
+       0,   567,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   357,     0,     0,     0,   575,   576,
+       0,     0,     0,   579,     0,     0,   581,     0,     0,     0,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   241,   242,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    71,     0,     0,
+      72,     0,     0,    73,     0,    74,   137,     0,     0,     0,
+       0,     0,   243,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,     0,   244,     0,   245,   246,
+     247,     0,   349,   350,     0,     0,    63,    64,   351,     0,
+     107,     0,   108,     0,     0,     1,     2,   358,     3,     4,
+       5,   352,   353,   354,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   355,   356,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   357,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   241,   242,     0,    63,    64,     0,
+     103,   149,   150,   151,    69,     0,     1,     2,     0,     3,
+       4,     5,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   243,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,     0,   244,    70,   245,   246,   247,
+      63,    64,     0,     0,     0,     0,     0,     0,     0,     1,
+       2,     0,     3,     4,     5,   238,   358,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     239,   240,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    63,    64,     0,   103,   149,   150,   151,    69,     0,
+       1,     2,     0,     3,     4,     5,     0,     0,     0,     0,
+       0,     0,     0,   170,   171,   172,   173,   174,   175,   176,
+     177,   178,   179,   180,   181,   182,   183,   184,   241,   242,
+      70,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    71,     0,     0,    72,     0,     0,    73,     0,    74,
+     340,     0,     0,     0,     0,   243,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,   202,     0,   244,
+       0,   245,   246,   247,     0,     0,   349,   350,     0,     0,
+       0,     0,   351,   107,     0,   108,     0,   248,     0,     0,
+     249,     0,   250,     0,   251,   352,   353,   354,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     355,   356,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    71,     0,   357,    72,     0,
+       0,    73,     0,    74,   403,     0,     0,     0,     0,     0,
+       0,     0,     0,   170,   171,   172,   173,   174,   175,   176,
+     177,   178,   179,   180,   181,   182,   183,   184,   241,   242,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    63,
+      64,     0,   103,    66,    67,    68,    69,     0,     1,     2,
+       0,     3,     4,     5,     0,   243,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,   202,   130,   244,
+       0,   245,   246,   247,     0,     0,     0,     0,    70,    63,
+      64,     0,   144,    66,    67,    68,    69,     0,     1,     2,
+     358,     3,     4,     5,    63,    64,     0,   103,    66,    67,
+      68,    69,     0,     1,     2,     0,     3,     4,     5,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    70,     0,
+       0,     0,     0,   318,     0,    63,    64,     0,   103,   149,
+     150,   151,    69,    70,     1,     2,     0,     3,     4,     5,
+       0,    63,    64,     0,   103,    66,    67,    68,    69,     0,
+       1,     2,     0,     3,     4,     5,     0,     0,     0,     0,
+       0,     0,     0,     0,    70,     0,     0,     0,     0,     0,
+     415,     0,     0,    71,     0,     0,    72,     0,     0,    73,
+      70,    74,     0,     0,     0,     0,     0,     0,    63,    64,
+     145,   103,    66,    67,    68,    69,     0,     1,     2,     0,
+       3,     4,     5,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    71,     0,     0,    72,   500,     0,    73,
+       0,    74,     0,     0,     0,     0,     0,    70,    71,     0,
+       0,    72,     0,     0,    73,     0,    74,    63,    64,     0,
+      65,    66,    67,    68,    69,     0,     1,     2,     0,     3,
+       4,     5,     0,     0,     0,     0,     0,     0,     0,    71,
+       0,     0,    72,     0,   335,    73,     0,    74,     0,     0,
+       0,     0,     0,     0,     0,    71,    70,     0,    72,     0,
+       0,    73,     0,    74,    63,    64,     0,   103,   149,   150,
+     151,    69,     0,     1,     2,     0,     3,     4,     5,    63,
+      64,     0,   144,    66,    67,    68,    69,     0,     1,     2,
+       0,     3,     4,     5,     0,     0,     0,     0,     0,     0,
+       0,     0,    71,    70,     0,    72,     0,     0,    73,     0,
+      74,     0,     0,     0,     0,     0,    63,    64,    70,   103,
+      66,    67,    68,    69,     0,     1,     2,     0,     3,     4,
+       5,    63,    64,     0,   260,    66,    67,    68,    69,     0,
+       1,     2,     0,     3,     4,     5,     0,     0,     0,     0,
+       0,    71,     0,     0,    72,    70,     0,    73,     0,    74,
+       0,     0,     0,     0,     0,     0,     0,     0,    63,    64,
+      70,   103,   149,   150,   151,    69,     0,     1,     2,     0,
+       3,     4,     5,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    71,     0,
+       0,    72,     0,     0,    73,     0,    74,    70,     0,     0,
+       0,     0,     0,    71,     0,     0,    72,     0,     0,    73,
+       0,    74,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   161,     0,     0,     0,     0,     0,     0,
+      71,     0,     0,    72,     0,     0,    73,     0,    74,     0,
+       0,     0,   162,   163,     0,    71,     0,     0,    72,     0,
+       0,    73,     0,    74,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,     0,     0,     0,
+       0,     0,    71,     0,     0,    72,     0,     0,    73,     0,
+     338,     0,     0,     0,     0,     0,     0,   187,   188,   189,
+       0,     0,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208
+};
+
+static const short int yycheck[] =
+{
+       0,    27,   166,   154,   123,   226,   416,   147,     0,     4,
+      11,    25,   320,   297,   154,    11,   324,    17,   138,    18,
+     189,    11,   249,   250,   167,    17,    11,    26,   138,   325,
+     326,     3,     4,     5,     6,   204,   205,   206,   207,   208,
+     139,    49,   211,    54,   552,   139,   139,     0,    74,   148,
+      31,    23,    24,   146,    16,    63,   150,    19,   566,    21,
+      50,   138,    15,    16,    17,    50,    19,    20,    21,    50,
+     213,   139,    98,    15,    27,    28,   102,    40,    41,     0,
+     148,   139,   108,   139,    47,   139,   116,   113,   138,    89,
+      53,   501,   150,   139,   150,    48,   150,   123,    51,   140,
+     146,   142,    55,    39,    40,    41,   138,   148,    44,   135,
+     136,   338,   142,   139,    31,   139,   139,   143,   414,   143,
+     143,   261,    35,   263,   264,   535,   266,   144,   114,   115,
+     140,   358,   142,    19,    16,   149,   146,    19,   164,    21,
+      18,   139,   140,   312,   142,   146,   132,   133,   267,    19,
+     146,   150,   114,   115,   149,   114,   115,   567,   442,   299,
+      19,   187,   188,   189,   190,   157,    17,   307,   308,    20,
+     132,   133,   131,   132,   133,   134,    19,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   140,   471,   142,   473,
+     144,   310,   139,   219,   502,     4,   143,   114,   115,    29,
+      30,   114,   115,   229,   142,   139,   140,   376,   142,   378,
+     379,   380,   109,   110,   131,   132,   133,   134,   131,   132,
+     133,   134,     3,     4,     5,     6,   366,   367,   368,   140,
+      34,   142,   143,    11,   374,   519,    14,   135,   136,   137,
+       0,   267,   463,     4,   384,   385,   145,    43,   556,    45,
+     558,   145,   278,   404,     4,    15,    16,    17,   139,    19,
+      20,    21,     7,     8,   404,   110,   111,    27,    28,   295,
+      19,    16,    17,   148,    19,    20,    21,    57,    58,    59,
+      60,    61,    62,   143,   310,   311,   312,   427,    48,   429,
+     143,    51,   432,   142,   140,    55,   142,   143,   438,   439,
+     330,   331,   332,   333,   334,   474,    80,    81,   477,   478,
+     479,     9,   338,   343,   344,   345,   537,     9,    32,   540,
+      34,   140,   348,   142,     9,    52,   466,   467,    11,   469,
+     470,    39,   148,    41,   142,   475,   142,   142,    19,   142,
+     142,   142,   142,   142,   139,   485,   139,   139,   142,   139,
+     376,   377,   378,   379,   380,   139,   139,   383,    35,   263,
+     264,    35,   266,   139,   394,   395,   506,   393,    56,   142,
+     534,   401,     7,     8,   514,    10,    11,    12,    13,    14,
+     142,    16,    17,   139,    19,    20,    21,   139,   139,   553,
+     144,   139,   139,   139,    35,   299,   139,   139,   139,    19,
+     139,   139,     4,   307,   308,   139,   143,    19,   148,   142,
+     550,    46,     4,    14,    14,   555,   139,   443,   448,   449,
+     450,   451,   139,   139,   139,   455,   456,   139,   139,   139,
+     139,   457,   572,   573,   139,   142,   462,   577,   139,   139,
+     580,    50,   468,   139,   148,   139,   143,    19,   474,   139,
+     139,   477,   478,   479,    50,   146,   482,   487,   488,   143,
+     139,   461,   366,   367,   368,   143,    23,    24,   144,    14,
+     374,    39,    40,    41,    42,    43,    44,    45,   143,    47,
+     384,   385,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,   522,   143,   524,   525,   143,   146,   143,   143,
+       4,   139,    14,    14,    14,   139,   141,    68,    14,   144,
+     536,   126,   147,   126,   149,   150,   126,   241,    89,   502,
+     242,   108,   529,   427,   219,   429,   102,   229,   432,   529,
+      17,    86,    56,   482,   438,   439,    93,    94,    95,    96,
+      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+      -1,    -1,   396,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   466,   467,    -1,   469,   470,   135,   136,   137,
+      -1,   475,    -1,     7,     8,    -1,    10,    11,    12,    13,
+      14,   485,    16,    17,    -1,    19,    20,    21,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   506,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     514,    -1,    46,     3,     4,    -1,    -1,     7,     8,     9,
+      -1,    -1,    -1,    -1,    -1,    -1,    16,    17,    -1,    19,
+      20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   550,    37,    38,    -1,
+      -1,   555,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    54,    -1,    -1,    -1,   572,   573,
+      -1,    -1,    -1,   577,    -1,    -1,   580,    -1,    -1,    -1,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,    -1,    -1,
+     144,    -1,    -1,   147,    -1,   149,   150,    -1,    -1,    -1,
+      -1,    -1,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,    -1,   126,    -1,   128,   129,
+     130,    -1,     3,     4,    -1,    -1,     7,     8,     9,    -1,
+     140,    -1,   142,    -1,    -1,    16,    17,   147,    19,    20,
+      21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    37,    38,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    54,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    -1,     7,     8,    -1,
+      10,    11,    12,    13,    14,    -1,    16,    17,    -1,    19,
+      20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,    -1,   126,    46,   128,   129,   130,
+       7,     8,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    16,
+      17,    -1,    19,    20,    21,    22,   147,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      37,    38,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,     7,     8,    -1,    10,    11,    12,    13,    14,    -1,
+      16,    17,    -1,    19,    20,    21,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+      46,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   141,    -1,    -1,   144,    -1,    -1,   147,    -1,   149,
+     150,    -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,    -1,   126,
+      -1,   128,   129,   130,    -1,    -1,     3,     4,    -1,    -1,
+      -1,    -1,     9,   140,    -1,   142,    -1,   144,    -1,    -1,
+     147,    -1,   149,    -1,   151,    22,    23,    24,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      37,    38,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   141,    -1,    54,   144,    -1,
+      -1,   147,    -1,   149,   150,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     7,
+       8,    -1,    10,    11,    12,    13,    14,    -1,    16,    17,
+      -1,    19,    20,    21,    -1,   112,   113,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,    36,   126,
+      -1,   128,   129,   130,    -1,    -1,    -1,    -1,    46,     7,
+       8,    -1,    10,    11,    12,    13,    14,    -1,    16,    17,
+     147,    19,    20,    21,     7,     8,    -1,    10,    11,    12,
+      13,    14,    -1,    16,    17,    -1,    19,    20,    21,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,
+      -1,    -1,    -1,    36,    -1,     7,     8,    -1,    10,    11,
+      12,    13,    14,    46,    16,    17,    -1,    19,    20,    21,
+      -1,     7,     8,    -1,    10,    11,    12,    13,    14,    -1,
+      16,    17,    -1,    19,    20,    21,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    46,    -1,    -1,    -1,    -1,    -1,
+      36,    -1,    -1,   141,    -1,    -1,   144,    -1,    -1,   147,
+      46,   149,    -1,    -1,    -1,    -1,    -1,    -1,     7,     8,
+     118,    10,    11,    12,    13,    14,    -1,    16,    17,    -1,
+      19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   141,    -1,    -1,   144,    36,    -1,   147,
+      -1,   149,    -1,    -1,    -1,    -1,    -1,    46,   141,    -1,
+      -1,   144,    -1,    -1,   147,    -1,   149,     7,     8,    -1,
+      10,    11,    12,    13,    14,    -1,    16,    17,    -1,    19,
+      20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,
+      -1,    -1,   144,    -1,   146,   147,    -1,   149,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   141,    46,    -1,   144,    -1,
+      -1,   147,    -1,   149,     7,     8,    -1,    10,    11,    12,
+      13,    14,    -1,    16,    17,    -1,    19,    20,    21,     7,
+       8,    -1,    10,    11,    12,    13,    14,    -1,    16,    17,
+      -1,    19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   141,    46,    -1,   144,    -1,    -1,   147,    -1,
+     149,    -1,    -1,    -1,    -1,    -1,     7,     8,    46,    10,
+      11,    12,    13,    14,    -1,    16,    17,    -1,    19,    20,
+      21,     7,     8,    -1,    10,    11,    12,    13,    14,    -1,
+      16,    17,    -1,    19,    20,    21,    -1,    -1,    -1,    -1,
+      -1,   141,    -1,    -1,   144,    46,    -1,   147,    -1,   149,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     7,     8,
+      46,    10,    11,    12,    13,    14,    -1,    16,    17,    -1,
+      19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,    -1,
+      -1,   144,    -1,    -1,   147,    -1,   149,    46,    -1,    -1,
+      -1,    -1,    -1,   141,    -1,    -1,   144,    -1,    -1,   147,
+      -1,   149,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    33,    -1,    -1,    -1,    -1,    -1,    -1,
+     141,    -1,    -1,   144,    -1,    -1,   147,    -1,   149,    -1,
+      -1,    -1,    52,    53,    -1,   141,    -1,    -1,   144,    -1,
+      -1,   147,    -1,   149,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    -1,    -1,    -1,
+      -1,    -1,   141,    -1,    -1,   144,    -1,    -1,   147,    -1,
+     149,    -1,    -1,    -1,    -1,    -1,    -1,   107,   108,   109,
+      -1,    -1,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const unsigned char yystos[] =
+{
+       0,    16,    17,    19,    20,    21,    27,    28,    48,    51,
+      55,   160,   162,   163,   164,   165,   196,   197,   198,   200,
+     199,    49,    63,   205,   138,    54,   138,    15,   138,    39,
+      40,    41,    42,    43,    44,    45,    47,   135,   136,   137,
+     166,   167,   168,     0,   198,    43,    45,   169,   215,    39,
+      40,    41,    44,   170,   212,   214,   221,   138,   138,   144,
+     206,    19,   204,     7,     8,    10,    11,    12,    13,    14,
+      46,   141,   144,   147,   149,   160,   163,   183,   184,   218,
+     168,   168,    32,    34,   194,   168,   168,    18,   222,   223,
+      26,   150,   213,   222,    19,    19,    19,   207,   142,     4,
+       4,     4,   149,    10,   150,   184,   189,   140,   142,   194,
+     194,    39,    41,   171,    29,    30,   193,    57,    58,    59,
+      60,    61,    62,   172,   210,   210,   162,   226,   139,   146,
+      36,   184,   185,   187,   188,   145,   145,   150,   189,   139,
+     150,   188,   193,   193,    10,   118,   184,   186,   195,    11,
+      12,    13,   158,   159,   184,   190,     4,   186,    25,   149,
+     211,    33,    52,    53,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,   107,   108,   109,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   153,
+     154,   155,   224,   230,   231,   232,   233,    19,   174,   139,
+     143,   184,   184,   148,   150,   184,   143,   190,   184,   142,
+     218,    23,    24,     3,     4,     5,     6,     9,    22,    37,
+      38,    85,    86,   112,   126,   128,   129,   130,   144,   147,
+     149,   151,   153,   154,   155,   191,   218,   201,   163,    52,
+      10,   184,   220,    11,    14,    11,   158,   172,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,   156,    23,
+      24,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   157,   184,   184,   220,   184,
+     184,   227,   220,   220,   220,   220,   220,   184,   184,   220,
+     172,   110,   111,   114,   115,   132,   133,   173,    36,   185,
+     176,   146,   148,   148,   176,   202,   203,   195,   156,   157,
+     142,   142,   142,   142,   142,   146,   190,   192,   149,   192,
+     150,   192,    19,   142,   142,   142,   139,   181,   142,     3,
+       4,     9,    22,    23,    24,    37,    38,    54,   147,   191,
+     217,   218,   219,   219,   219,   219,   186,   184,   184,   139,
+     178,   139,   178,   219,   144,   139,   139,   139,   139,   139,
+     139,   219,   219,    35,   186,   184,   220,   131,   134,   173,
+     175,   181,   181,    35,   142,   142,   190,   190,   190,   190,
+     190,   139,   146,   150,   184,   192,   148,   150,   190,   190,
+     190,    31,    50,   179,   182,    36,   184,   208,   209,    56,
+     216,   192,   139,   139,   219,   219,   219,    11,    50,    11,
+     229,   219,   144,   220,   184,   220,   220,   220,   139,   139,
+     184,   219,   219,   139,   184,   190,   190,   229,   139,   139,
+     139,   139,   190,   148,   150,   139,   139,    35,    19,     4,
+     181,   174,   139,   143,    19,   148,    14,    14,   142,   139,
+     139,   219,     4,   219,   139,   139,   219,   139,   139,   139,
+     219,   219,   142,   139,   178,   184,   143,   139,   139,   143,
+     190,   190,   190,   190,   148,   190,   190,   184,   160,   161,
+      36,   184,   176,   139,   219,   219,   184,   228,   219,   219,
+     178,   178,   220,   219,   139,   220,   220,   220,   228,   219,
+     190,   190,   139,   143,   139,   139,   143,   143,   143,   174,
+     179,   180,    19,   139,   144,   219,   139,   143,   146,   219,
+     143,   178,   143,   143,   190,   190,   190,   161,    50,   177,
+      14,   146,   158,   225,   174,   184,   176,   146,   176,   143,
+     143,   143,     4,   219,   217,   146,   158,   219,    35,   139,
+     217,   174,    14,    14,   139,   219,   219,    14,    68,   219,
+      14,   219
+};
 
 #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;
@@ -2222,672 +2933,709 @@
      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 29:
+#line 1118 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;}
+    break;
 
-      fprintf (stderr, "Reducing via rule %d (line %d), ",
-	       yyn, yyrline[yyn]);
+  case 30:
+#line 1118 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;}
+    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 31:
+#line 1119 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_SLT; ;}
+    break;
 
+  case 32:
+#line 1119 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;}
+    break;
 
-  switch (yyn) {
+  case 33:
+#line 1120 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;}
+    break;
 
-case 28:
-#line 1117 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_EQ; ;
-    break;}
-case 29:
-#line 1117 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_NE; ;
-    break;}
-case 30:
-#line 1118 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_SLT; ;
-    break;}
-case 31:
-#line 1118 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_SGT; ;
-    break;}
-case 32:
-#line 1119 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_SLE; ;
-    break;}
-case 33:
-#line 1119 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_SGE; ;
-    break;}
-case 34:
-#line 1120 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_ULT; ;
-    break;}
-case 35:
-#line 1120 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_UGT; ;
-    break;}
-case 36:
-#line 1121 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_ULE; ;
-    break;}
-case 37:
-#line 1121 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.IPredicate = ICmpInst::ICMP_UGE; ;
-    break;}
-case 38:
-#line 1125 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_OEQ; ;
-    break;}
-case 39:
-#line 1125 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_ONE; ;
-    break;}
-case 40:
-#line 1126 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_OLT; ;
-    break;}
-case 41:
-#line 1126 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_OGT; ;
-    break;}
-case 42:
-#line 1127 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_OLE; ;
-    break;}
-case 43:
-#line 1127 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_OGE; ;
-    break;}
-case 44:
-#line 1128 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_ORD; ;
-    break;}
-case 45:
-#line 1128 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_UNO; ;
-    break;}
-case 46:
-#line 1129 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_UEQ; ;
-    break;}
-case 47:
-#line 1129 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_UNE; ;
-    break;}
-case 48:
-#line 1130 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_ULT; ;
-    break;}
-case 49:
-#line 1130 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_UGT; ;
-    break;}
-case 50:
-#line 1131 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_ULE; ;
-    break;}
-case 51:
-#line 1131 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_UGE; ;
-    break;}
-case 52:
-#line 1132 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_TRUE; ;
-    break;}
-case 53:
-#line 1133 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.FPredicate = FCmpInst::FCMP_FALSE; ;
-    break;}
-case 60:
-#line 1142 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.StrVal = 0; ;
-    break;}
-case 61:
-#line 1146 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.StrVal = yyvsp[-1].StrVal;
+  case 34:
+#line 1120 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;}
+    break;
+
+  case 35:
+#line 1121 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;}
+    break;
+
+  case 36:
+#line 1121 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;}
+    break;
+
+  case 37:
+#line 1122 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;}
+    break;
+
+  case 38:
+#line 1122 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;}
+    break;
+
+  case 39:
+#line 1126 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;}
+    break;
+
+  case 40:
+#line 1126 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;}
+    break;
+
+  case 41:
+#line 1127 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;}
+    break;
+
+  case 42:
+#line 1127 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;}
+    break;
+
+  case 43:
+#line 1128 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;}
+    break;
+
+  case 44:
+#line 1128 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;}
+    break;
+
+  case 45:
+#line 1129 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;}
+    break;
+
+  case 46:
+#line 1129 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;}
+    break;
+
+  case 47:
+#line 1130 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;}
+    break;
+
+  case 48:
+#line 1130 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;}
+    break;
+
+  case 49:
+#line 1131 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;}
+    break;
+
+  case 50:
+#line 1131 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;}
+    break;
+
+  case 51:
+#line 1132 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;}
+    break;
+
+  case 52:
+#line 1132 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;}
+    break;
+
+  case 53:
+#line 1133 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;}
+    break;
+
+  case 54:
+#line 1134 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;}
+    break;
+
+  case 62:
+#line 1143 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.StrVal) = 0; ;}
+    break;
+
+  case 63:
+#line 1147 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.StrVal) = (yyvsp[-1].StrVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 62:
-#line 1150 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.StrVal = 0;
+  ;}
+    break;
+
+  case 64:
+#line 1151 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.StrVal) = 0;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 66:
-#line 1158 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.StrVal = 0;
+  ;}
+    break;
+
+  case 68:
+#line 1159 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.StrVal) = 0;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 67:
-#line 1163 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.StrVal = yyvsp[-1].StrVal;
+  ;}
+    break;
+
+  case 69:
+#line 1164 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.StrVal) = (yyvsp[-1].StrVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 68:
-#line 1169 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::InternalLinkage; ;
-    break;}
-case 69:
-#line 1170 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::WeakLinkage; ;
-    break;}
-case 70:
-#line 1171 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
-    break;}
-case 71:
-#line 1172 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::AppendingLinkage; ;
-    break;}
-case 72:
-#line 1173 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::DLLExportLinkage; ;
-    break;}
-case 73:
-#line 1177 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::DLLImportLinkage; ;
-    break;}
-case 74:
-#line 1178 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;
-    break;}
-case 75:
-#line 1179 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
-    break;}
-case 76:
-#line 1183 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Visibility = GlobalValue::DefaultVisibility;   ;
-    break;}
-case 77:
-#line 1184 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Visibility = GlobalValue::DefaultVisibility;   ;
-    break;}
-case 78:
-#line 1185 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Visibility = GlobalValue::HiddenVisibility;    ;
-    break;}
-case 79:
-#line 1186 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Visibility = GlobalValue::ProtectedVisibility; ;
-    break;}
-case 80:
-#line 1190 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
-    break;}
-case 81:
-#line 1191 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::DLLImportLinkage; ;
-    break;}
-case 82:
-#line 1192 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;
-    break;}
-case 83:
-#line 1196 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
-    break;}
-case 84:
-#line 1197 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::InternalLinkage; ;
-    break;}
-case 85:
-#line 1198 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
-    break;}
-case 86:
-#line 1199 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::WeakLinkage; ;
-    break;}
-case 87:
-#line 1200 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::DLLExportLinkage; ;
-    break;}
-case 88:
-#line 1204 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
-    break;}
-case 89:
-#line 1205 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::WeakLinkage; ;
-    break;}
-case 90:
-#line 1206 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.Linkage = GlobalValue::InternalLinkage; ;
-    break;}
-case 91:
-#line 1209 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = CallingConv::C; ;
-    break;}
-case 92:
-#line 1210 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = CallingConv::C; ;
-    break;}
-case 93:
-#line 1211 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = CallingConv::Fast; ;
-    break;}
-case 94:
-#line 1212 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = CallingConv::Cold; ;
-    break;}
-case 95:
-#line 1213 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = CallingConv::X86_StdCall; ;
-    break;}
-case 96:
-#line 1214 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = CallingConv::X86_FastCall; ;
-    break;}
-case 97:
-#line 1215 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-                   if ((unsigned)yyvsp[0].UInt64Val != yyvsp[0].UInt64Val)
+  ;}
+    break;
+
+  case 70:
+#line 1170 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
+    break;
+
+  case 71:
+#line 1171 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
+    break;
+
+  case 72:
+#line 1172 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
+    break;
+
+  case 73:
+#line 1173 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
+    break;
+
+  case 74:
+#line 1174 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
+    break;
+
+  case 75:
+#line 1178 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
+    break;
+
+  case 76:
+#line 1179 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
+    break;
+
+  case 77:
+#line 1180 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
+    break;
+
+  case 78:
+#line 1184 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Visibility) = GlobalValue::DefaultVisibility;   ;}
+    break;
+
+  case 79:
+#line 1185 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Visibility) = GlobalValue::DefaultVisibility;   ;}
+    break;
+
+  case 80:
+#line 1186 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Visibility) = GlobalValue::HiddenVisibility;    ;}
+    break;
+
+  case 81:
+#line 1187 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Visibility) = GlobalValue::ProtectedVisibility; ;}
+    break;
+
+  case 82:
+#line 1191 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
+    break;
+
+  case 83:
+#line 1192 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
+    break;
+
+  case 84:
+#line 1193 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
+    break;
+
+  case 85:
+#line 1197 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
+    break;
+
+  case 86:
+#line 1198 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
+    break;
+
+  case 87:
+#line 1199 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
+    break;
+
+  case 88:
+#line 1200 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
+    break;
+
+  case 89:
+#line 1201 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
+    break;
+
+  case 90:
+#line 1205 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
+    break;
+
+  case 91:
+#line 1206 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
+    break;
+
+  case 92:
+#line 1207 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
+    break;
+
+  case 93:
+#line 1210 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = CallingConv::C; ;}
+    break;
+
+  case 94:
+#line 1211 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = CallingConv::C; ;}
+    break;
+
+  case 95:
+#line 1212 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = CallingConv::Fast; ;}
+    break;
+
+  case 96:
+#line 1213 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = CallingConv::Cold; ;}
+    break;
+
+  case 97:
+#line 1214 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = CallingConv::X86_StdCall; ;}
+    break;
+
+  case 98:
+#line 1215 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = CallingConv::X86_FastCall; ;}
+    break;
+
+  case 99:
+#line 1216 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+                   if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val))
                      GEN_ERROR("Calling conv too large");
-                   yyval.UIntVal = yyvsp[0].UInt64Val;
+                   (yyval.UIntVal) = (yyvsp[0].UInt64Val);
                   CHECK_FOR_ERROR
-                 ;
-    break;}
-case 98:
-#line 1222 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = ParamAttr::ZExt;      ;
-    break;}
-case 99:
-#line 1223 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = ParamAttr::SExt;      ;
-    break;}
-case 100:
-#line 1224 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = ParamAttr::InReg;     ;
-    break;}
-case 101:
-#line 1225 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = ParamAttr::StructRet; ;
-    break;}
-case 102:
-#line 1228 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = ParamAttr::None; ;
-    break;}
-case 103:
-#line 1229 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-                yyval.ParamAttrs = yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs;
-              ;
-    break;}
-case 104:
-#line 1234 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = ParamAttr::NoReturn; ;
-    break;}
-case 105:
-#line 1235 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = ParamAttr::NoUnwind; ;
-    break;}
-case 107:
-#line 1239 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ParamAttrs = ParamAttr::None; ;
-    break;}
-case 108:
-#line 1240 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-                yyval.ParamAttrs = yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs;
-              ;
-    break;}
-case 109:
-#line 1247 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = 0; ;
-    break;}
-case 110:
-#line 1248 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  yyval.UIntVal = yyvsp[0].UInt64Val;
-  if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal))
+                 ;}
+    break;
+
+  case 100:
+#line 1223 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = ParamAttr::ZExt;      ;}
+    break;
+
+  case 101:
+#line 1224 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = ParamAttr::SExt;      ;}
+    break;
+
+  case 102:
+#line 1225 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = ParamAttr::InReg;     ;}
+    break;
+
+  case 103:
+#line 1226 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = ParamAttr::StructRet; ;}
+    break;
+
+  case 104:
+#line 1229 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = ParamAttr::None; ;}
+    break;
+
+  case 105:
+#line 1230 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+                (yyval.ParamAttrs) = (yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs);
+              ;}
+    break;
+
+  case 106:
+#line 1235 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = ParamAttr::NoReturn; ;}
+    break;
+
+  case 107:
+#line 1236 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = ParamAttr::NoUnwind; ;}
+    break;
+
+  case 109:
+#line 1240 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ParamAttrs) = ParamAttr::None; ;}
+    break;
+
+  case 110:
+#line 1241 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+                (yyval.ParamAttrs) = (yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs);
+              ;}
+    break;
+
+  case 111:
+#line 1248 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = 0; ;}
+    break;
+
+  case 112:
+#line 1249 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+  (yyval.UIntVal) = (yyvsp[0].UInt64Val);
+  if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
     GEN_ERROR("Alignment must be a power of two");
   CHECK_FOR_ERROR
-;
-    break;}
-case 111:
-#line 1254 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.UIntVal = 0; ;
-    break;}
-case 112:
-#line 1255 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  yyval.UIntVal = yyvsp[0].UInt64Val;
-  if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal))
+;}
+    break;
+
+  case 113:
+#line 1255 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = 0; ;}
+    break;
+
+  case 114:
+#line 1256 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+  (yyval.UIntVal) = (yyvsp[0].UInt64Val);
+  if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
     GEN_ERROR("Alignment must be a power of two");
   CHECK_FOR_ERROR
-;
-    break;}
-case 113:
-#line 1263 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  for (unsigned i = 0, e = strlen(yyvsp[0].StrVal); i != e; ++i)
-    if (yyvsp[0].StrVal[i] == '"' || yyvsp[0].StrVal[i] == '\\')
+;}
+    break;
+
+  case 115:
+#line 1264 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+  for (unsigned i = 0, e = strlen((yyvsp[0].StrVal)); i != e; ++i)
+    if ((yyvsp[0].StrVal)[i] == '"' || (yyvsp[0].StrVal)[i] == '\\')
       GEN_ERROR("Invalid character in section name");
-  yyval.StrVal = yyvsp[0].StrVal;
+  (yyval.StrVal) = (yyvsp[0].StrVal);
   CHECK_FOR_ERROR
-;
-    break;}
-case 114:
-#line 1271 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.StrVal = 0; ;
-    break;}
-case 115:
-#line 1272 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.StrVal = yyvsp[0].StrVal; ;
-    break;}
-case 116:
-#line 1277 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{;
-    break;}
-case 117:
-#line 1278 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{;
-    break;}
-case 118:
-#line 1279 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    CurGV->setSection(yyvsp[0].StrVal);
-    free(yyvsp[0].StrVal);
+;}
+    break;
+
+  case 116:
+#line 1272 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.StrVal) = 0; ;}
+    break;
+
+  case 117:
+#line 1273 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.StrVal) = (yyvsp[0].StrVal); ;}
+    break;
+
+  case 118:
+#line 1278 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {;}
+    break;
+
+  case 119:
+#line 1279 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {;}
+    break;
+
+  case 120:
+#line 1280 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    CurGV->setSection((yyvsp[0].StrVal));
+    free((yyvsp[0].StrVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 119:
-#line 1284 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[0].UInt64Val != 0 && !isPowerOf2_32(yyvsp[0].UInt64Val))
+  ;}
+    break;
+
+  case 121:
+#line 1285 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val)))
       GEN_ERROR("Alignment must be a power of two");
-    CurGV->setAlignment(yyvsp[0].UInt64Val);
+    CurGV->setAlignment((yyvsp[0].UInt64Val));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 124:
-#line 1300 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeVal = new PATypeHolder(OpaqueType::get());
+  ;}
+    break;
+
+  case 126:
+#line 1301 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 125:
-#line 1304 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeVal = new PATypeHolder(yyvsp[0].PrimType);
+  ;}
+    break;
+
+  case 127:
+#line 1305 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 126:
-#line 1308 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                             // Pointer type?
-    if (*yyvsp[-1].TypeVal == Type::LabelTy)
+  ;}
+    break;
+
+  case 128:
+#line 1309 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {                             // Pointer type?
+    if (*(yyvsp[-1].TypeVal) == Type::LabelTy)
       GEN_ERROR("Cannot form a pointer to a basic block");
-    yyval.TypeVal = new PATypeHolder(HandleUpRefs(PointerType::get(*yyvsp[-1].TypeVal)));
-    delete yyvsp[-1].TypeVal;
+    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PointerType::get(*(yyvsp[-1].TypeVal))));
+    delete (yyvsp[-1].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 127:
-#line 1315 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{            // Named types are also simple types...
-    const Type* tmp = getTypeVal(yyvsp[0].ValIDVal);
+  ;}
+    break;
+
+  case 129:
+#line 1316 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {            // Named types are also simple types...
+    const Type* tmp = getTypeVal((yyvsp[0].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.TypeVal = new PATypeHolder(tmp);
-  ;
-    break;}
-case 128:
-#line 1320 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                   // Type UpReference
-    if (yyvsp[0].UInt64Val > (uint64_t)~0U) GEN_ERROR("Value out of range");
+    (yyval.TypeVal) = new PATypeHolder(tmp);
+  ;}
+    break;
+
+  case 130:
+#line 1321 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {                   // Type UpReference
+    if ((yyvsp[0].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range");
     OpaqueType *OT = OpaqueType::get();        // Use temporary placeholder
-    UpRefs.push_back(UpRefRecord((unsigned)yyvsp[0].UInt64Val, OT));  // Add to vector...
-    yyval.TypeVal = new PATypeHolder(OT);
+    UpRefs.push_back(UpRefRecord((unsigned)(yyvsp[0].UInt64Val), OT));  // Add to vector...
+    (yyval.TypeVal) = new PATypeHolder(OT);
     UR_OUT("New Upreference!\n");
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 129:
-#line 1328 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 131:
+#line 1329 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     std::vector<const Type*> Params;
     ParamAttrsVector Attrs;
-    if (yyvsp[0].ParamAttrs != ParamAttr::None) {
-      ParamAttrsWithIndex X; X.index = 0; X.attrs = yyvsp[0].ParamAttrs;
+    if ((yyvsp[0].ParamAttrs) != ParamAttr::None) {
+      ParamAttrsWithIndex X; X.index = 0; X.attrs = (yyvsp[0].ParamAttrs);
       Attrs.push_back(X);
     }
     unsigned index = 1;
-    TypeWithAttrsList::iterator I = yyvsp[-2].TypeWithAttrsList->begin(), E = yyvsp[-2].TypeWithAttrsList->end();
+    TypeWithAttrsList::iterator I = (yyvsp[-2].TypeWithAttrsList)->begin(), E = (yyvsp[-2].TypeWithAttrsList)->end();
     for (; I != E; ++I, ++index) {
       const Type *Ty = I->Ty->get();
       Params.push_back(Ty);
@@ -2903,23 +3651,24 @@
     ParamAttrsList *ActualAttrs = 0;
     if (!Attrs.empty())
       ActualAttrs = ParamAttrsList::get(Attrs);
-    FunctionType *FT = FunctionType::get(*yyvsp[-4].TypeVal, Params, isVarArg, ActualAttrs);
-    delete yyvsp[-2].TypeWithAttrsList;   // Delete the argument list
-    delete yyvsp[-4].TypeVal;   // Delete the return type handle
-    yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT)); 
+    FunctionType *FT = FunctionType::get(*(yyvsp[-4].TypeVal), Params, isVarArg, ActualAttrs);
+    delete (yyvsp[-2].TypeWithAttrsList);   // Delete the argument list
+    delete (yyvsp[-4].TypeVal);   // Delete the return type handle
+    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT)); 
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 130:
-#line 1358 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 132:
+#line 1359 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     std::vector<const Type*> Params;
     ParamAttrsVector Attrs;
-    if (yyvsp[0].ParamAttrs != ParamAttr::None) {
-      ParamAttrsWithIndex X; X.index = 0; X.attrs = yyvsp[0].ParamAttrs;
+    if ((yyvsp[0].ParamAttrs) != ParamAttr::None) {
+      ParamAttrsWithIndex X; X.index = 0; X.attrs = (yyvsp[0].ParamAttrs);
       Attrs.push_back(X);
     }
-    TypeWithAttrsList::iterator I = yyvsp[-2].TypeWithAttrsList->begin(), E = yyvsp[-2].TypeWithAttrsList->end();
+    TypeWithAttrsList::iterator I = (yyvsp[-2].TypeWithAttrsList)->begin(), E = (yyvsp[-2].TypeWithAttrsList)->end();
     unsigned index = 1;
     for ( ; I != E; ++I, ++index) {
       const Type* Ty = I->Ty->get();
@@ -2937,284 +3686,305 @@
     if (!Attrs.empty())
       ActualAttrs = ParamAttrsList::get(Attrs);
 
-    FunctionType *FT = FunctionType::get(yyvsp[-4].PrimType, Params, isVarArg, ActualAttrs);
-    delete yyvsp[-2].TypeWithAttrsList;      // Delete the argument list
-    yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT)); 
+    FunctionType *FT = FunctionType::get((yyvsp[-4].PrimType), Params, isVarArg, ActualAttrs);
+    delete (yyvsp[-2].TypeWithAttrsList);      // Delete the argument list
+    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT)); 
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 131:
-#line 1389 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{          // Sized array type?
-    yyval.TypeVal = new PATypeHolder(HandleUpRefs(ArrayType::get(*yyvsp[-1].TypeVal, (unsigned)yyvsp[-3].UInt64Val)));
-    delete yyvsp[-1].TypeVal;
+  ;}
+    break;
+
+  case 133:
+#line 1390 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {          // Sized array type?
+    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
+    delete (yyvsp[-1].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 132:
-#line 1394 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{          // Vector type?
-     const llvm::Type* ElemTy = yyvsp[-1].TypeVal->get();
-     if ((unsigned)yyvsp[-3].UInt64Val != yyvsp[-3].UInt64Val)
+  ;}
+    break;
+
+  case 134:
+#line 1395 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {          // Vector type?
+     const llvm::Type* ElemTy = (yyvsp[-1].TypeVal)->get();
+     if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val))
         GEN_ERROR("Unsigned result not equal to signed result");
      if (!ElemTy->isFloatingPoint() && !ElemTy->isInteger())
         GEN_ERROR("Element type of a VectorType must be primitive");
-     if (!isPowerOf2_32(yyvsp[-3].UInt64Val))
+     if (!isPowerOf2_32((yyvsp[-3].UInt64Val)))
        GEN_ERROR("Vector length should be a power of 2");
-     yyval.TypeVal = new PATypeHolder(HandleUpRefs(VectorType::get(*yyvsp[-1].TypeVal, (unsigned)yyvsp[-3].UInt64Val)));
-     delete yyvsp[-1].TypeVal;
+     (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(VectorType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
+     delete (yyvsp[-1].TypeVal);
      CHECK_FOR_ERROR
-  ;
-    break;}
-case 133:
-#line 1406 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                        // Structure type?
+  ;}
+    break;
+
+  case 135:
+#line 1407 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {                        // Structure type?
     std::vector<const Type*> Elements;
-    for (std::list<llvm::PATypeHolder>::iterator I = yyvsp[-1].TypeList->begin(),
-           E = yyvsp[-1].TypeList->end(); I != E; ++I)
+    for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-1].TypeList)->begin(),
+           E = (yyvsp[-1].TypeList)->end(); I != E; ++I)
       Elements.push_back(*I);
 
-    yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
-    delete yyvsp[-1].TypeList;
+    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
+    delete (yyvsp[-1].TypeList);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 134:
-#line 1416 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                                  // Empty structure type?
-    yyval.TypeVal = new PATypeHolder(StructType::get(std::vector<const Type*>()));
+  ;}
+    break;
+
+  case 136:
+#line 1417 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {                                  // Empty structure type?
+    (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>()));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 135:
-#line 1420 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 137:
+#line 1421 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     std::vector<const Type*> Elements;
-    for (std::list<llvm::PATypeHolder>::iterator I = yyvsp[-2].TypeList->begin(),
-           E = yyvsp[-2].TypeList->end(); I != E; ++I)
+    for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-2].TypeList)->begin(),
+           E = (yyvsp[-2].TypeList)->end(); I != E; ++I)
       Elements.push_back(*I);
 
-    yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true)));
-    delete yyvsp[-2].TypeList;
+    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true)));
+    delete (yyvsp[-2].TypeList);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 136:
-#line 1430 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                         // Empty structure type?
-    yyval.TypeVal = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
+  ;}
+    break;
+
+  case 138:
+#line 1431 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {                         // Empty structure type?
+    (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 137:
-#line 1437 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ 
-    yyval.TypeWithAttrs.Ty = yyvsp[-1].TypeVal; 
-    yyval.TypeWithAttrs.Attrs = yyvsp[0].ParamAttrs; 
-  ;
-    break;}
-case 138:
-#line 1444 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 139:
+#line 1438 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { 
+    (yyval.TypeWithAttrs).Ty = (yyvsp[-1].TypeVal); 
+    (yyval.TypeWithAttrs).Attrs = (yyvsp[0].ParamAttrs); 
+  ;}
+    break;
+
+  case 140:
+#line 1445 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
-    if (!(*yyvsp[0].TypeVal)->isFirstClassType())
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
+    if (!(*(yyvsp[0].TypeVal))->isFirstClassType())
       GEN_ERROR("LLVM functions cannot return aggregate types");
-    yyval.TypeVal = yyvsp[0].TypeVal;
-  ;
-    break;}
-case 139:
-#line 1451 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeVal = new PATypeHolder(Type::VoidTy);
-  ;
-    break;}
-case 140:
-#line 1456 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeWithAttrsList = new TypeWithAttrsList();
-    yyval.TypeWithAttrsList->push_back(yyvsp[0].TypeWithAttrs);
+    (yyval.TypeVal) = (yyvsp[0].TypeVal);
+  ;}
+    break;
+
+  case 141:
+#line 1452 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeVal) = new PATypeHolder(Type::VoidTy);
+  ;}
+    break;
+
+  case 142:
+#line 1457 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
+    (yyval.TypeWithAttrsList)->push_back((yyvsp[0].TypeWithAttrs));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 141:
-#line 1461 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    (yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList)->push_back(yyvsp[0].TypeWithAttrs);
+  ;}
+    break;
+
+  case 143:
+#line 1462 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    ((yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList))->push_back((yyvsp[0].TypeWithAttrs));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 143:
-#line 1469 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList;
+  ;}
+    break;
+
+  case 145:
+#line 1470 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList);
     TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None;
     TWA.Ty = new PATypeHolder(Type::VoidTy);
-    yyval.TypeWithAttrsList->push_back(TWA);
+    (yyval.TypeWithAttrsList)->push_back(TWA);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 144:
-#line 1476 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeWithAttrsList = new TypeWithAttrsList;
+  ;}
+    break;
+
+  case 146:
+#line 1477 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeWithAttrsList) = new TypeWithAttrsList;
     TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None;
     TWA.Ty = new PATypeHolder(Type::VoidTy);
-    yyval.TypeWithAttrsList->push_back(TWA);
+    (yyval.TypeWithAttrsList)->push_back(TWA);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 145:
-#line 1483 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeWithAttrsList = new TypeWithAttrsList();
+  ;}
+    break;
+
+  case 147:
+#line 1484 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 146:
-#line 1491 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TypeList = new std::list<PATypeHolder>();
-    yyval.TypeList->push_back(*yyvsp[0].TypeVal); 
-    delete yyvsp[0].TypeVal;
+  ;}
+    break;
+
+  case 148:
+#line 1492 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TypeList) = new std::list<PATypeHolder>();
+    (yyval.TypeList)->push_back(*(yyvsp[0].TypeVal)); 
+    delete (yyvsp[0].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 147:
-#line 1497 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    (yyval.TypeList=yyvsp[-2].TypeList)->push_back(*yyvsp[0].TypeVal); 
-    delete yyvsp[0].TypeVal;
+  ;}
+    break;
+
+  case 149:
+#line 1498 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(*(yyvsp[0].TypeVal)); 
+    delete (yyvsp[0].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 148:
-#line 1509 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ // Nonempty unsized arr
+  ;}
+    break;
+
+  case 150:
+#line 1510 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { // Nonempty unsized arr
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
-    const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-3].TypeVal->get());
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
+    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-3].TypeVal)->get());
     if (ATy == 0)
       GEN_ERROR("Cannot make array constant with type: '" + 
-                     (*yyvsp[-3].TypeVal)->getDescription() + "'");
+                     (*(yyvsp[-3].TypeVal))->getDescription() + "'");
     const Type *ETy = ATy->getElementType();
     int NumElements = ATy->getNumElements();
 
     // Verify that we have the correct size...
-    if (NumElements != -1 && NumElements != (int)yyvsp[-1].ConstVector->size())
+    if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
       GEN_ERROR("Type mismatch: constant sized array initialized with " +
-                     utostr(yyvsp[-1].ConstVector->size()) +  " arguments, but has size of " + 
+                     utostr((yyvsp[-1].ConstVector)->size()) +  " arguments, but has size of " + 
                      itostr(NumElements) + "");
 
     // Verify all elements are correct type!
-    for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
-      if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
+    for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
+      if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
         GEN_ERROR("Element #" + utostr(i) + " is not of type '" + 
                        ETy->getDescription() +"' as required!\nIt is of type '"+
-                       (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
+                       (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
     }
 
-    yyval.ConstVal = ConstantArray::get(ATy, *yyvsp[-1].ConstVector);
-    delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
+    (yyval.ConstVal) = ConstantArray::get(ATy, *(yyvsp[-1].ConstVector));
+    delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 149:
-#line 1537 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 151:
+#line 1538 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
-    const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-2].TypeVal->get());
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
+    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
     if (ATy == 0)
       GEN_ERROR("Cannot make array constant with type: '" + 
-                     (*yyvsp[-2].TypeVal)->getDescription() + "'");
+                     (*(yyvsp[-2].TypeVal))->getDescription() + "'");
 
     int NumElements = ATy->getNumElements();
     if (NumElements != -1 && NumElements != 0) 
       GEN_ERROR("Type mismatch: constant sized array initialized with 0"
                      " arguments, but has size of " + itostr(NumElements) +"");
-    yyval.ConstVal = ConstantArray::get(ATy, std::vector<Constant*>());
-    delete yyvsp[-2].TypeVal;
+    (yyval.ConstVal) = ConstantArray::get(ATy, std::vector<Constant*>());
+    delete (yyvsp[-2].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 150:
-#line 1553 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 152:
+#line 1554 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
-    const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-2].TypeVal->get());
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
+    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
     if (ATy == 0)
       GEN_ERROR("Cannot make array constant with type: '" + 
-                     (*yyvsp[-2].TypeVal)->getDescription() + "'");
+                     (*(yyvsp[-2].TypeVal))->getDescription() + "'");
 
     int NumElements = ATy->getNumElements();
     const Type *ETy = ATy->getElementType();
-    char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true);
-    if (NumElements != -1 && NumElements != (EndStr-yyvsp[0].StrVal))
+    char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
+    if (NumElements != -1 && NumElements != (EndStr-(yyvsp[0].StrVal)))
       GEN_ERROR("Can't build string constant of size " + 
-                     itostr((int)(EndStr-yyvsp[0].StrVal)) +
+                     itostr((int)(EndStr-(yyvsp[0].StrVal))) +
                      " when array has size " + itostr(NumElements) + "");
     std::vector<Constant*> Vals;
     if (ETy == Type::Int8Ty) {
-      for (unsigned char *C = (unsigned char *)yyvsp[0].StrVal; 
+      for (unsigned char *C = (unsigned char *)(yyvsp[0].StrVal); 
         C != (unsigned char*)EndStr; ++C)
       Vals.push_back(ConstantInt::get(ETy, *C));
     } else {
-      free(yyvsp[0].StrVal);
+      free((yyvsp[0].StrVal));
       GEN_ERROR("Cannot build string arrays of non byte sized elements");
     }
-    free(yyvsp[0].StrVal);
-    yyval.ConstVal = ConstantArray::get(ATy, Vals);
-    delete yyvsp[-2].TypeVal;
+    free((yyvsp[0].StrVal));
+    (yyval.ConstVal) = ConstantArray::get(ATy, Vals);
+    delete (yyvsp[-2].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 151:
-#line 1582 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ // Nonempty unsized arr
+  ;}
+    break;
+
+  case 153:
+#line 1583 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { // Nonempty unsized arr
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
-    const VectorType *PTy = dyn_cast<VectorType>(yyvsp[-3].TypeVal->get());
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
+    const VectorType *PTy = dyn_cast<VectorType>((yyvsp[-3].TypeVal)->get());
     if (PTy == 0)
       GEN_ERROR("Cannot make packed constant with type: '" + 
-                     (*yyvsp[-3].TypeVal)->getDescription() + "'");
+                     (*(yyvsp[-3].TypeVal))->getDescription() + "'");
     const Type *ETy = PTy->getElementType();
     int NumElements = PTy->getNumElements();
 
     // Verify that we have the correct size...
-    if (NumElements != -1 && NumElements != (int)yyvsp[-1].ConstVector->size())
+    if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
       GEN_ERROR("Type mismatch: constant sized packed initialized with " +
-                     utostr(yyvsp[-1].ConstVector->size()) +  " arguments, but has size of " + 
+                     utostr((yyvsp[-1].ConstVector)->size()) +  " arguments, but has size of " + 
                      itostr(NumElements) + "");
 
     // Verify all elements are correct type!
-    for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
-      if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
+    for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
+      if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
         GEN_ERROR("Element #" + utostr(i) + " is not of type '" + 
            ETy->getDescription() +"' as required!\nIt is of type '"+
-           (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
+           (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
     }
 
-    yyval.ConstVal = ConstantVector::get(PTy, *yyvsp[-1].ConstVector);
-    delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
+    (yyval.ConstVal) = ConstantVector::get(PTy, *(yyvsp[-1].ConstVector));
+    delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 152:
-#line 1610 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    const StructType *STy = dyn_cast<StructType>(yyvsp[-3].TypeVal->get());
+  ;}
+    break;
+
+  case 154:
+#line 1611 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal)->get());
     if (STy == 0)
       GEN_ERROR("Cannot make struct constant with type: '" + 
-                     (*yyvsp[-3].TypeVal)->getDescription() + "'");
+                     (*(yyvsp[-3].TypeVal))->getDescription() + "'");
 
-    if (yyvsp[-1].ConstVector->size() != STy->getNumContainedTypes())
+    if ((yyvsp[-1].ConstVector)->size() != STy->getNumContainedTypes())
       GEN_ERROR("Illegal number of initializers for structure type");
 
     // Check to ensure that constants are compatible with the type initializer!
-    for (unsigned i = 0, e = yyvsp[-1].ConstVector->size(); i != e; ++i)
-      if ((*yyvsp[-1].ConstVector)[i]->getType() != STy->getElementType(i))
+    for (unsigned i = 0, e = (yyvsp[-1].ConstVector)->size(); i != e; ++i)
+      if ((*(yyvsp[-1].ConstVector))[i]->getType() != STy->getElementType(i))
         GEN_ERROR("Expected type '" +
                        STy->getElementType(i)->getDescription() +
                        "' for element #" + utostr(i) +
@@ -3225,20 +3995,21 @@
       GEN_ERROR("Unpacked Initializer to vector type '" +
                 STy->getDescription() + "'");
 
-    yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-1].ConstVector);
-    delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
+    (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[-1].ConstVector));
+    delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 153:
-#line 1636 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 155:
+#line 1637 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
-    const StructType *STy = dyn_cast<StructType>(yyvsp[-2].TypeVal->get());
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
+    const StructType *STy = dyn_cast<StructType>((yyvsp[-2].TypeVal)->get());
     if (STy == 0)
       GEN_ERROR("Cannot make struct constant with type: '" + 
-                     (*yyvsp[-2].TypeVal)->getDescription() + "'");
+                     (*(yyvsp[-2].TypeVal))->getDescription() + "'");
 
     if (STy->getNumContainedTypes() != 0)
       GEN_ERROR("Illegal number of initializers for structure type");
@@ -3248,25 +4019,26 @@
       GEN_ERROR("Unpacked Initializer to vector type '" +
                 STy->getDescription() + "'");
 
-    yyval.ConstVal = ConstantStruct::get(STy, std::vector<Constant*>());
-    delete yyvsp[-2].TypeVal;
+    (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
+    delete (yyvsp[-2].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 154:
-#line 1656 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    const StructType *STy = dyn_cast<StructType>(yyvsp[-5].TypeVal->get());
+  ;}
+    break;
+
+  case 156:
+#line 1657 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    const StructType *STy = dyn_cast<StructType>((yyvsp[-5].TypeVal)->get());
     if (STy == 0)
       GEN_ERROR("Cannot make struct constant with type: '" + 
-                     (*yyvsp[-5].TypeVal)->getDescription() + "'");
+                     (*(yyvsp[-5].TypeVal))->getDescription() + "'");
 
-    if (yyvsp[-2].ConstVector->size() != STy->getNumContainedTypes())
+    if ((yyvsp[-2].ConstVector)->size() != STy->getNumContainedTypes())
       GEN_ERROR("Illegal number of initializers for structure type");
 
     // Check to ensure that constants are compatible with the type initializer!
-    for (unsigned i = 0, e = yyvsp[-2].ConstVector->size(); i != e; ++i)
-      if ((*yyvsp[-2].ConstVector)[i]->getType() != STy->getElementType(i))
+    for (unsigned i = 0, e = (yyvsp[-2].ConstVector)->size(); i != e; ++i)
+      if ((*(yyvsp[-2].ConstVector))[i]->getType() != STy->getElementType(i))
         GEN_ERROR("Expected type '" +
                        STy->getElementType(i)->getDescription() +
                        "' for element #" + utostr(i) +
@@ -3277,20 +4049,21 @@
       GEN_ERROR("Vector initializer to non-vector type '" + 
                 STy->getDescription() + "'");
 
-    yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-2].ConstVector);
-    delete yyvsp[-5].TypeVal; delete yyvsp[-2].ConstVector;
+    (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[-2].ConstVector));
+    delete (yyvsp[-5].TypeVal); delete (yyvsp[-2].ConstVector);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 155:
-#line 1682 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 157:
+#line 1683 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
-    const StructType *STy = dyn_cast<StructType>(yyvsp[-4].TypeVal->get());
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
+    const StructType *STy = dyn_cast<StructType>((yyvsp[-4].TypeVal)->get());
     if (STy == 0)
       GEN_ERROR("Cannot make struct constant with type: '" + 
-                     (*yyvsp[-4].TypeVal)->getDescription() + "'");
+                     (*(yyvsp[-4].TypeVal))->getDescription() + "'");
 
     if (STy->getNumContainedTypes() != 0)
       GEN_ERROR("Illegal number of initializers for structure type");
@@ -3300,42 +4073,45 @@
       GEN_ERROR("Vector initializer to non-vector type '" + 
                 STy->getDescription() + "'");
 
-    yyval.ConstVal = ConstantStruct::get(STy, std::vector<Constant*>());
-    delete yyvsp[-4].TypeVal;
+    (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
+    delete (yyvsp[-4].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 156:
-#line 1702 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 158:
+#line 1703 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
-    const PointerType *PTy = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
+    const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
     if (PTy == 0)
       GEN_ERROR("Cannot make null pointer constant with type: '" + 
-                     (*yyvsp[-1].TypeVal)->getDescription() + "'");
+                     (*(yyvsp[-1].TypeVal))->getDescription() + "'");
 
-    yyval.ConstVal = ConstantPointerNull::get(PTy);
-    delete yyvsp[-1].TypeVal;
+    (yyval.ConstVal) = ConstantPointerNull::get(PTy);
+    delete (yyvsp[-1].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 157:
-#line 1714 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 159:
+#line 1715 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
-    yyval.ConstVal = UndefValue::get(yyvsp[-1].TypeVal->get());
-    delete yyvsp[-1].TypeVal;
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
+    (yyval.ConstVal) = UndefValue::get((yyvsp[-1].TypeVal)->get());
+    delete (yyvsp[-1].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 158:
-#line 1721 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 160:
+#line 1722 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
-    const PointerType *Ty = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
+    const PointerType *Ty = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
     if (Ty == 0)
       GEN_ERROR("Global const reference must be a pointer type");
 
@@ -3349,7 +4125,7 @@
     Function *SavedCurFn = CurFun.CurrentFunction;
     CurFun.CurrentFunction = 0;
 
-    Value *V = getExistingVal(Ty, yyvsp[0].ValIDVal);
+    Value *V = getExistingVal(Ty, (yyvsp[0].ValIDVal));
     CHECK_FOR_ERROR
 
     CurFun.CurrentFunction = SavedCurFn;
@@ -3364,16 +4140,16 @@
 
       // First check to see if the forward references value is already created!
       PerModuleInfo::GlobalRefsType::iterator I =
-        CurModule.GlobalRefs.find(std::make_pair(PT, yyvsp[0].ValIDVal));
+        CurModule.GlobalRefs.find(std::make_pair(PT, (yyvsp[0].ValIDVal)));
     
       if (I != CurModule.GlobalRefs.end()) {
         V = I->second;             // Placeholder already exists, use it...
-        yyvsp[0].ValIDVal.destroy();
+        (yyvsp[0].ValIDVal).destroy();
       } else {
         std::string Name;
-        if (yyvsp[0].ValIDVal.Type == ValID::GlobalName)
-          Name = yyvsp[0].ValIDVal.Name;
-        else if (yyvsp[0].ValIDVal.Type != ValID::GlobalID)
+        if ((yyvsp[0].ValIDVal).Type == ValID::GlobalName)
+          Name = (yyvsp[0].ValIDVal).Name;
+        else if ((yyvsp[0].ValIDVal).Type != ValID::GlobalID)
           GEN_ERROR("Invalid reference to global");
 
         // Create the forward referenced global.
@@ -3389,336 +4165,371 @@
         }
 
         // Keep track of the fact that we have a forward ref to recycle it
-        CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, yyvsp[0].ValIDVal), GV));
+        CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, (yyvsp[0].ValIDVal)), GV));
         V = GV;
       }
     }
 
-    yyval.ConstVal = cast<GlobalValue>(V);
-    delete yyvsp[-1].TypeVal;            // Free the type handle
+    (yyval.ConstVal) = cast<GlobalValue>(V);
+    delete (yyvsp[-1].TypeVal);            // Free the type handle
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 159:
-#line 1787 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 161:
+#line 1788 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
-    if (yyvsp[-1].TypeVal->get() != yyvsp[0].ConstVal->getType())
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
+    if ((yyvsp[-1].TypeVal)->get() != (yyvsp[0].ConstVal)->getType())
       GEN_ERROR("Mismatched types for constant expression: " + 
-        (*yyvsp[-1].TypeVal)->getDescription() + " and " + yyvsp[0].ConstVal->getType()->getDescription());
-    yyval.ConstVal = yyvsp[0].ConstVal;
-    delete yyvsp[-1].TypeVal;
+        (*(yyvsp[-1].TypeVal))->getDescription() + " and " + (yyvsp[0].ConstVal)->getType()->getDescription());
+    (yyval.ConstVal) = (yyvsp[0].ConstVal);
+    delete (yyvsp[-1].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 160:
-#line 1797 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 162:
+#line 1798 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
-    const Type *Ty = yyvsp[-1].TypeVal->get();
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
+    const Type *Ty = (yyvsp[-1].TypeVal)->get();
     if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
       GEN_ERROR("Cannot create a null initialized value of this type");
-    yyval.ConstVal = Constant::getNullValue(Ty);
-    delete yyvsp[-1].TypeVal;
+    (yyval.ConstVal) = Constant::getNullValue(Ty);
+    delete (yyvsp[-1].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 161:
-#line 1807 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{      // integral constants
-    if (!ConstantInt::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].SInt64Val))
+  ;}
+    break;
+
+  case 163:
+#line 1808 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {      // integral constants
+    if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val)))
       GEN_ERROR("Constant value doesn't fit in type");
-    yyval.ConstVal = ConstantInt::get(yyvsp[-1].PrimType, yyvsp[0].SInt64Val, true);
+    (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val), true);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 162:
-#line 1813 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{      // arbitrary precision integer constants
-    uint32_t BitWidth = cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth();
-    if (yyvsp[0].APIntVal->getBitWidth() > BitWidth) {
+  ;}
+    break;
+
+  case 164:
+#line 1814 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {      // arbitrary precision integer constants
+    uint32_t BitWidth = cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth();
+    if ((yyvsp[0].APIntVal)->getBitWidth() > BitWidth) {
       GEN_ERROR("Constant value does not fit in type");
     }
-    yyvsp[0].APIntVal->sextOrTrunc(BitWidth);
-    yyval.ConstVal = ConstantInt::get(*yyvsp[0].APIntVal);
-    delete yyvsp[0].APIntVal;
+    (yyvsp[0].APIntVal)->sextOrTrunc(BitWidth);
+    (yyval.ConstVal) = ConstantInt::get(*(yyvsp[0].APIntVal));
+    delete (yyvsp[0].APIntVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 163:
-#line 1823 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{      // integral constants
-    if (!ConstantInt::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].UInt64Val))
+  ;}
+    break;
+
+  case 165:
+#line 1824 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {      // integral constants
+    if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val)))
       GEN_ERROR("Constant value doesn't fit in type");
-    yyval.ConstVal = ConstantInt::get(yyvsp[-1].PrimType, yyvsp[0].UInt64Val, false);
+    (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val), false);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 164:
-#line 1829 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{      // arbitrary precision integer constants
-    uint32_t BitWidth = cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth();
-    if (yyvsp[0].APIntVal->getBitWidth() > BitWidth) {
+  ;}
+    break;
+
+  case 166:
+#line 1830 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {      // arbitrary precision integer constants
+    uint32_t BitWidth = cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth();
+    if ((yyvsp[0].APIntVal)->getBitWidth() > BitWidth) {
       GEN_ERROR("Constant value does not fit in type");
     } 
-    yyvsp[0].APIntVal->zextOrTrunc(BitWidth);
-    yyval.ConstVal = ConstantInt::get(*yyvsp[0].APIntVal);
-    delete yyvsp[0].APIntVal;
+    (yyvsp[0].APIntVal)->zextOrTrunc(BitWidth);
+    (yyval.ConstVal) = ConstantInt::get(*(yyvsp[0].APIntVal));
+    delete (yyvsp[0].APIntVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 165:
-#line 1839 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                      // Boolean constants
-    assert(cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth() == 1 && "Not Bool?");
-    yyval.ConstVal = ConstantInt::getTrue();
+  ;}
+    break;
+
+  case 167:
+#line 1840 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {                      // Boolean constants
+    assert(cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth() == 1 && "Not Bool?");
+    (yyval.ConstVal) = ConstantInt::getTrue();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 166:
-#line 1844 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                     // Boolean constants
-    assert(cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth() == 1 && "Not Bool?");
-    yyval.ConstVal = ConstantInt::getFalse();
+  ;}
+    break;
+
+  case 168:
+#line 1845 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {                     // Boolean constants
+    assert(cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth() == 1 && "Not Bool?");
+    (yyval.ConstVal) = ConstantInt::getFalse();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 167:
-#line 1849 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                   // Float & Double constants
-    if (!ConstantFP::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].FPVal))
+  ;}
+    break;
+
+  case 169:
+#line 1850 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {                   // Float & Double constants
+    if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].FPVal)))
       GEN_ERROR("Floating point constant invalid for type");
-    yyval.ConstVal = ConstantFP::get(yyvsp[-1].PrimType, yyvsp[0].FPVal);
+    (yyval.ConstVal) = ConstantFP::get((yyvsp[-1].PrimType), (yyvsp[0].FPVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 168:
-#line 1857 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 170:
+#line 1858 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
-    Constant *Val = yyvsp[-3].ConstVal;
-    const Type *DestTy = yyvsp[-1].TypeVal->get();
-    if (!CastInst::castIsValid(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy))
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
+    Constant *Val = (yyvsp[-3].ConstVal);
+    const Type *DestTy = (yyvsp[-1].TypeVal)->get();
+    if (!CastInst::castIsValid((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal), DestTy))
       GEN_ERROR("invalid cast opcode for cast from '" +
                 Val->getType()->getDescription() + "' to '" +
                 DestTy->getDescription() + "'"); 
-    yyval.ConstVal = ConstantExpr::getCast(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy);
-    delete yyvsp[-1].TypeVal;
-  ;
-    break;}
-case 169:
-#line 1869 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!isa<PointerType>(yyvsp[-2].ConstVal->getType()))
+    (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal), DestTy);
+    delete (yyvsp[-1].TypeVal);
+  ;}
+    break;
+
+  case 171:
+#line 1870 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!isa<PointerType>((yyvsp[-2].ConstVal)->getType()))
       GEN_ERROR("GetElementPtr requires a pointer operand");
 
     const Type *IdxTy =
-      GetElementPtrInst::getIndexedType(yyvsp[-2].ConstVal->getType(), &(*yyvsp[-1].ValueList)[0], yyvsp[-1].ValueList->size(),
+      GetElementPtrInst::getIndexedType((yyvsp[-2].ConstVal)->getType(), &(*(yyvsp[-1].ValueList))[0], (yyvsp[-1].ValueList)->size(),
                                         true);
     if (!IdxTy)
       GEN_ERROR("Index list invalid for constant getelementptr");
 
     SmallVector<Constant*, 8> IdxVec;
-    for (unsigned i = 0, e = yyvsp[-1].ValueList->size(); i != e; ++i)
-      if (Constant *C = dyn_cast<Constant>((*yyvsp[-1].ValueList)[i]))
+    for (unsigned i = 0, e = (yyvsp[-1].ValueList)->size(); i != e; ++i)
+      if (Constant *C = dyn_cast<Constant>((*(yyvsp[-1].ValueList))[i]))
         IdxVec.push_back(C);
       else
         GEN_ERROR("Indices to constant getelementptr must be constants");
 
-    delete yyvsp[-1].ValueList;
+    delete (yyvsp[-1].ValueList);
 
-    yyval.ConstVal = ConstantExpr::getGetElementPtr(yyvsp[-2].ConstVal, &IdxVec[0], IdxVec.size());
+    (yyval.ConstVal) = ConstantExpr::getGetElementPtr((yyvsp[-2].ConstVal), &IdxVec[0], IdxVec.size());
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 170:
-#line 1891 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[-5].ConstVal->getType() != Type::Int1Ty)
+  ;}
+    break;
+
+  case 172:
+#line 1892 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[-5].ConstVal)->getType() != Type::Int1Ty)
       GEN_ERROR("Select condition must be of boolean type");
-    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
+    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
       GEN_ERROR("Select operand types must match");
-    yyval.ConstVal = ConstantExpr::getSelect(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
+    (yyval.ConstVal) = ConstantExpr::getSelect((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 171:
-#line 1899 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
+  ;}
+    break;
+
+  case 173:
+#line 1900 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
       GEN_ERROR("Binary operator types must match");
     CHECK_FOR_ERROR;
-    yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
-  ;
-    break;}
-case 172:
-#line 1905 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
+    (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+  ;}
+    break;
+
+  case 174:
+#line 1906 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
       GEN_ERROR("Logical operator types must match");
-    if (!yyvsp[-3].ConstVal->getType()->isInteger()) {
-      if (Instruction::isShift(yyvsp[-5].BinaryOpVal) || !isa<VectorType>(yyvsp[-3].ConstVal->getType()) || 
-          !cast<VectorType>(yyvsp[-3].ConstVal->getType())->getElementType()->isInteger())
+    if (!(yyvsp[-3].ConstVal)->getType()->isInteger()) {
+      if (Instruction::isShift((yyvsp[-5].BinaryOpVal)) || !isa<VectorType>((yyvsp[-3].ConstVal)->getType()) || 
+          !cast<VectorType>((yyvsp[-3].ConstVal)->getType())->getElementType()->isInteger())
         GEN_ERROR("Logical operator requires integral operands");
     }
-    yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
+    (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 173:
-#line 1916 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
+  ;}
+    break;
+
+  case 175:
+#line 1917 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
       GEN_ERROR("icmp operand types must match");
-    yyval.ConstVal = ConstantExpr::getICmp(yyvsp[-5].IPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
-  ;
-    break;}
-case 174:
-#line 1921 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
+    (yyval.ConstVal) = ConstantExpr::getICmp((yyvsp[-5].IPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+  ;}
+    break;
+
+  case 176:
+#line 1922 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
       GEN_ERROR("fcmp operand types must match");
-    yyval.ConstVal = ConstantExpr::getFCmp(yyvsp[-5].FPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
-  ;
-    break;}
-case 175:
-#line 1926 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!ExtractElementInst::isValidOperands(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
+    (yyval.ConstVal) = ConstantExpr::getFCmp((yyvsp[-5].FPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+  ;}
+    break;
+
+  case 177:
+#line 1927 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
       GEN_ERROR("Invalid extractelement operands");
-    yyval.ConstVal = ConstantExpr::getExtractElement(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
+    (yyval.ConstVal) = ConstantExpr::getExtractElement((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 176:
-#line 1932 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!InsertElementInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
+  ;}
+    break;
+
+  case 178:
+#line 1933 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
       GEN_ERROR("Invalid insertelement operands");
-    yyval.ConstVal = ConstantExpr::getInsertElement(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
+    (yyval.ConstVal) = ConstantExpr::getInsertElement((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 177:
-#line 1938 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!ShuffleVectorInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
+  ;}
+    break;
+
+  case 179:
+#line 1939 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
       GEN_ERROR("Invalid shufflevector operands");
-    yyval.ConstVal = ConstantExpr::getShuffleVector(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
+    (yyval.ConstVal) = ConstantExpr::getShuffleVector((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 178:
-#line 1947 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    (yyval.ConstVector = yyvsp[-2].ConstVector)->push_back(yyvsp[0].ConstVal);
+  ;}
+    break;
+
+  case 180:
+#line 1948 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 179:
-#line 1951 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ConstVector = new std::vector<Constant*>();
-    yyval.ConstVector->push_back(yyvsp[0].ConstVal);
+  ;}
+    break;
+
+  case 181:
+#line 1952 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ConstVector) = new std::vector<Constant*>();
+    (yyval.ConstVector)->push_back((yyvsp[0].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 180:
-#line 1959 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.BoolVal = false; ;
-    break;}
-case 181:
-#line 1959 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.BoolVal = true; ;
-    break;}
-case 182:
-#line 1962 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.BoolVal = true; ;
-    break;}
-case 183:
-#line 1962 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.BoolVal = false; ;
-    break;}
-case 184:
-#line 1965 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    const Type* VTy = yyvsp[-1].TypeVal->get();
-    Value *V = getVal(VTy, yyvsp[0].ValIDVal);
+  ;}
+    break;
+
+  case 182:
+#line 1960 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.BoolVal) = false; ;}
+    break;
+
+  case 183:
+#line 1960 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.BoolVal) = true; ;}
+    break;
+
+  case 184:
+#line 1963 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.BoolVal) = true; ;}
+    break;
+
+  case 185:
+#line 1963 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.BoolVal) = false; ;}
+    break;
+
+  case 186:
+#line 1966 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    const Type* VTy = (yyvsp[-1].TypeVal)->get();
+    Value *V = getVal(VTy, (yyvsp[0].ValIDVal));
     GlobalValue* Aliasee = dyn_cast<GlobalValue>(V);
     if (!Aliasee)
       GEN_ERROR("Aliases can be created only to global values");
 
-    yyval.ConstVal = Aliasee;
+    (yyval.ConstVal) = Aliasee;
     CHECK_FOR_ERROR
-    delete yyvsp[-1].TypeVal;
-   ;
-    break;}
-case 185:
-#line 1976 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    Constant *Val = yyvsp[-3].ConstVal;
-    const Type *DestTy = yyvsp[-1].TypeVal->get();
-    if (!CastInst::castIsValid(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy))
+    delete (yyvsp[-1].TypeVal);
+   ;}
+    break;
+
+  case 187:
+#line 1977 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    Constant *Val = (yyvsp[-3].ConstVal);
+    const Type *DestTy = (yyvsp[-1].TypeVal)->get();
+    if (!CastInst::castIsValid((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal), DestTy))
       GEN_ERROR("invalid cast opcode for cast from '" +
                 Val->getType()->getDescription() + "' to '" +
                 DestTy->getDescription() + "'");
     
-    yyval.ConstVal = ConstantExpr::getCast(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy);
+    (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal), DestTy);
     CHECK_FOR_ERROR
-    delete yyvsp[-1].TypeVal;
-   ;
-    break;}
-case 186:
-#line 1997 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ModuleVal = ParserResult = CurModule.CurrentModule;
+    delete (yyvsp[-1].TypeVal);
+   ;}
+    break;
+
+  case 188:
+#line 1998 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
     CurModule.ModuleDone();
     CHECK_FOR_ERROR;
-  ;
-    break;}
-case 187:
-#line 2002 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ModuleVal = ParserResult = CurModule.CurrentModule;
+  ;}
+    break;
+
+  case 189:
+#line 2003 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
     CurModule.ModuleDone();
     CHECK_FOR_ERROR;
-  ;
-    break;}
-case 190:
-#line 2015 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ CurFun.isDeclare = false; ;
-    break;}
-case 191:
-#line 2015 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 192:
+#line 2016 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { CurFun.isDeclare = false; ;}
+    break;
+
+  case 193:
+#line 2016 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     CurFun.FunctionDone();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 192:
-#line 2019 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ CurFun.isDeclare = true; ;
-    break;}
-case 193:
-#line 2019 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 194:
+#line 2020 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { CurFun.isDeclare = true; ;}
+    break;
+
+  case 195:
+#line 2020 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 194:
-#line 2022 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 196:
+#line 2023 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 195:
-#line 2025 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 197:
+#line 2026 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
     // Eagerly resolve types.  This is not an optimization, this is a
     // requirement that is due to the fact that we could have this:
     //
@@ -3728,248 +4539,271 @@
     // If types are not resolved eagerly, then the two types will not be
     // determined to be the same type!
     //
-    ResolveTypeTo(yyvsp[-2].StrVal, *yyvsp[0].TypeVal);
+    ResolveTypeTo((yyvsp[-2].StrVal), *(yyvsp[0].TypeVal));
 
-    if (!setTypeName(*yyvsp[0].TypeVal, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) {
+    if (!setTypeName(*(yyvsp[0].TypeVal), (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) {
       CHECK_FOR_ERROR
       // If this is a named type that is not a redefinition, add it to the slot
       // table.
-      CurModule.Types.push_back(*yyvsp[0].TypeVal);
+      CurModule.Types.push_back(*(yyvsp[0].TypeVal));
     }
 
-    delete yyvsp[0].TypeVal;
+    delete (yyvsp[0].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 196:
-#line 2049 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    ResolveTypeTo(yyvsp[-2].StrVal, yyvsp[0].PrimType);
+  ;}
+    break;
 
-    if (!setTypeName(yyvsp[0].PrimType, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) {
+  case 198:
+#line 2050 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    ResolveTypeTo((yyvsp[-2].StrVal), (yyvsp[0].PrimType));
+
+    if (!setTypeName((yyvsp[0].PrimType), (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) {
       CHECK_FOR_ERROR
       // If this is a named type that is not a redefinition, add it to the slot
       // table.
-      CurModule.Types.push_back(yyvsp[0].PrimType);
+      CurModule.Types.push_back((yyvsp[0].PrimType));
     }
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 197:
-#line 2060 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ 
+  ;}
+    break;
+
+  case 199:
+#line 2061 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { 
     /* "Externally Visible" Linkage */
-    if (yyvsp[0].ConstVal == 0) 
+    if ((yyvsp[0].ConstVal) == 0) 
       GEN_ERROR("Global value initializer is not a constant");
-    CurGV = ParseGlobalVariable(yyvsp[-4].StrVal, GlobalValue::ExternalLinkage,
-                                yyvsp[-3].Visibility, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal, yyvsp[-2].BoolVal);
+    CurGV = ParseGlobalVariable((yyvsp[-4].StrVal), GlobalValue::ExternalLinkage,
+                                (yyvsp[-3].Visibility), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal), (yyvsp[-2].BoolVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 198:
-#line 2067 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 200:
+#line 2068 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     CurGV = 0;
-  ;
-    break;}
-case 199:
-#line 2071 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[0].ConstVal == 0) 
+  ;}
+    break;
+
+  case 201:
+#line 2072 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[0].ConstVal) == 0) 
       GEN_ERROR("Global value initializer is not a constant");
-    CurGV = ParseGlobalVariable(yyvsp[-5].StrVal, yyvsp[-4].Linkage, yyvsp[-3].Visibility, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal, yyvsp[-2].BoolVal);
+    CurGV = ParseGlobalVariable((yyvsp[-5].StrVal), (yyvsp[-4].Linkage), (yyvsp[-3].Visibility), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal), (yyvsp[-2].BoolVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 200:
-#line 2076 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 202:
+#line 2077 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     CurGV = 0;
-  ;
-    break;}
-case 201:
-#line 2080 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 203:
+#line 2081 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
-    CurGV = ParseGlobalVariable(yyvsp[-5].StrVal, yyvsp[-4].Linkage, yyvsp[-3].Visibility, yyvsp[-1].BoolVal, *yyvsp[0].TypeVal, 0, yyvsp[-2].BoolVal);
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
+    CurGV = ParseGlobalVariable((yyvsp[-5].StrVal), (yyvsp[-4].Linkage), (yyvsp[-3].Visibility), (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0, (yyvsp[-2].BoolVal));
     CHECK_FOR_ERROR
-    delete yyvsp[0].TypeVal;
-  ;
-    break;}
-case 202:
-#line 2086 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    delete (yyvsp[0].TypeVal);
+  ;}
+    break;
+
+  case 204:
+#line 2087 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     CurGV = 0;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 203:
-#line 2090 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    std::string Name(yyvsp[-4].StrVal);
+  ;}
+    break;
+
+  case 205:
+#line 2091 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    std::string Name((yyvsp[-4].StrVal));
     if (Name.empty())
       GEN_ERROR("Alias name cannot be empty");
     
-    Constant* Aliasee = yyvsp[0].ConstVal;
+    Constant* Aliasee = (yyvsp[0].ConstVal);
     if (Aliasee == 0)
-      GEN_ERROR(std::string("Invalid aliasee for alias: ") + yyvsp[-4].StrVal);
+      GEN_ERROR(std::string("Invalid aliasee for alias: ") + (yyvsp[-4].StrVal));
 
-    GlobalAlias* GA = new GlobalAlias(Aliasee->getType(), yyvsp[-1].Linkage, Name, Aliasee,
+    GlobalAlias* GA = new GlobalAlias(Aliasee->getType(), (yyvsp[-1].Linkage), Name, Aliasee,
                                       CurModule.CurrentModule);
-    GA->setVisibility(yyvsp[-3].Visibility);
+    GA->setVisibility((yyvsp[-3].Visibility));
     InsertValue(GA, CurModule.Values);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 204:
-#line 2105 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ 
+  ;}
+    break;
+
+  case 206:
+#line 2106 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { 
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 205:
-#line 2108 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 207:
+#line 2109 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 206:
-#line 2114 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 208:
+#line 2115 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
   const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
-  char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true);
-  std::string NewAsm(yyvsp[0].StrVal, EndStr);
-  free(yyvsp[0].StrVal);
+  char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
+  std::string NewAsm((yyvsp[0].StrVal), EndStr);
+  free((yyvsp[0].StrVal));
 
   if (AsmSoFar.empty())
     CurModule.CurrentModule->setModuleInlineAsm(NewAsm);
   else
     CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm);
   CHECK_FOR_ERROR
-;
-    break;}
-case 207:
-#line 2127 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    CurModule.CurrentModule->setTargetTriple(yyvsp[0].StrVal);
-    free(yyvsp[0].StrVal);
-  ;
-    break;}
-case 208:
-#line 2131 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    CurModule.CurrentModule->setDataLayout(yyvsp[0].StrVal);
-    free(yyvsp[0].StrVal);
-  ;
-    break;}
-case 210:
-#line 2138 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-          CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
-          free(yyvsp[0].StrVal);
+;}
+    break;
+
+  case 209:
+#line 2128 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal));
+    free((yyvsp[0].StrVal));
+  ;}
+    break;
+
+  case 210:
+#line 2132 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    CurModule.CurrentModule->setDataLayout((yyvsp[0].StrVal));
+    free((yyvsp[0].StrVal));
+  ;}
+    break;
+
+  case 212:
+#line 2139 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+          CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
+          free((yyvsp[0].StrVal));
           CHECK_FOR_ERROR
-        ;
-    break;}
-case 211:
-#line 2143 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-          CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
-          free(yyvsp[0].StrVal);
+        ;}
+    break;
+
+  case 213:
+#line 2144 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+          CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
+          free((yyvsp[0].StrVal));
           CHECK_FOR_ERROR
-        ;
-    break;}
-case 212:
-#line 2148 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+        ;}
+    break;
+
+  case 214:
+#line 2149 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
           CHECK_FOR_ERROR
-        ;
-    break;}
-case 213:
-#line 2157 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+        ;}
+    break;
+
+  case 215:
+#line 2158 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
-    if (*yyvsp[-2].TypeVal == Type::VoidTy)
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
+    if (*(yyvsp[-2].TypeVal) == Type::VoidTy)
       GEN_ERROR("void typed arguments are invalid");
-    ArgListEntry E; E.Attrs = yyvsp[-1].ParamAttrs; E.Ty = yyvsp[-2].TypeVal; E.Name = yyvsp[0].StrVal;
-    yyval.ArgList = yyvsp[-4].ArgList;
-    yyvsp[-4].ArgList->push_back(E);
+    ArgListEntry E; E.Attrs = (yyvsp[-1].ParamAttrs); E.Ty = (yyvsp[-2].TypeVal); E.Name = (yyvsp[0].StrVal);
+    (yyval.ArgList) = (yyvsp[-4].ArgList);
+    (yyvsp[-4].ArgList)->push_back(E);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 214:
-#line 2167 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 216:
+#line 2168 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
-    if (*yyvsp[-2].TypeVal == Type::VoidTy)
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
+    if (*(yyvsp[-2].TypeVal) == Type::VoidTy)
       GEN_ERROR("void typed arguments are invalid");
-    ArgListEntry E; E.Attrs = yyvsp[-1].ParamAttrs; E.Ty = yyvsp[-2].TypeVal; E.Name = yyvsp[0].StrVal;
-    yyval.ArgList = new ArgListType;
-    yyval.ArgList->push_back(E);
+    ArgListEntry E; E.Attrs = (yyvsp[-1].ParamAttrs); E.Ty = (yyvsp[-2].TypeVal); E.Name = (yyvsp[0].StrVal);
+    (yyval.ArgList) = new ArgListType;
+    (yyval.ArgList)->push_back(E);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 215:
-#line 2178 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ArgList = yyvsp[0].ArgList;
+  ;}
+    break;
+
+  case 217:
+#line 2179 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ArgList) = (yyvsp[0].ArgList);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 216:
-#line 2182 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ArgList = yyvsp[-2].ArgList;
+  ;}
+    break;
+
+  case 218:
+#line 2183 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ArgList) = (yyvsp[-2].ArgList);
     struct ArgListEntry E;
     E.Ty = new PATypeHolder(Type::VoidTy);
     E.Name = 0;
     E.Attrs = ParamAttr::None;
-    yyval.ArgList->push_back(E);
+    (yyval.ArgList)->push_back(E);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 217:
-#line 2191 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ArgList = new ArgListType;
+  ;}
+    break;
+
+  case 219:
+#line 2192 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ArgList) = new ArgListType;
     struct ArgListEntry E;
     E.Ty = new PATypeHolder(Type::VoidTy);
     E.Name = 0;
     E.Attrs = ParamAttr::None;
-    yyval.ArgList->push_back(E);
+    (yyval.ArgList)->push_back(E);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 218:
-#line 2200 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ArgList = 0;
+  ;}
+    break;
+
+  case 220:
+#line 2201 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ArgList) = 0;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 219:
-#line 2206 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  UnEscapeLexed(yyvsp[-6].StrVal);
-  std::string FunctionName(yyvsp[-6].StrVal);
-  free(yyvsp[-6].StrVal);  // Free strdup'd memory!
+  ;}
+    break;
+
+  case 221:
+#line 2207 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+  UnEscapeLexed((yyvsp[-6].StrVal));
+  std::string FunctionName((yyvsp[-6].StrVal));
+  free((yyvsp[-6].StrVal));  // Free strdup'd memory!
   
   // Check the function result for abstractness if this is a define. We should
   // have no abstract types at this point
-  if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(yyvsp[-7].TypeVal))
-    GEN_ERROR("Reference to abstract result: "+ yyvsp[-7].TypeVal->get()->getDescription());
+  if (!CurFun.isDeclare && CurModule.TypeIsUnresolved((yyvsp[-7].TypeVal)))
+    GEN_ERROR("Reference to abstract result: "+ (yyvsp[-7].TypeVal)->get()->getDescription());
 
   std::vector<const Type*> ParamTypeList;
   ParamAttrsVector Attrs;
-  if (yyvsp[-2].ParamAttrs != ParamAttr::None) {
-    ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = yyvsp[-2].ParamAttrs;
+  if ((yyvsp[-2].ParamAttrs) != ParamAttr::None) {
+    ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = (yyvsp[-2].ParamAttrs);
     Attrs.push_back(PAWI);
   }
-  if (yyvsp[-4].ArgList) {   // If there are arguments...
+  if ((yyvsp[-4].ArgList)) {   // If there are arguments...
     unsigned index = 1;
-    for (ArgListType::iterator I = yyvsp[-4].ArgList->begin(); I != yyvsp[-4].ArgList->end(); ++I, ++index) {
+    for (ArgListType::iterator I = (yyvsp[-4].ArgList)->begin(); I != (yyvsp[-4].ArgList)->end(); ++I, ++index) {
       const Type* Ty = I->Ty->get();
       if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(I->Ty))
         GEN_ERROR("Reference to abstract argument: " + Ty->getDescription());
@@ -3989,9 +4823,9 @@
   if (!Attrs.empty())
     PAL = ParamAttrsList::get(Attrs);
 
-  FunctionType *FT = FunctionType::get(*yyvsp[-7].TypeVal, ParamTypeList, isVarArg, PAL);
+  FunctionType *FT = FunctionType::get(*(yyvsp[-7].TypeVal), ParamTypeList, isVarArg, PAL);
   const PointerType *PFT = PointerType::get(FT);
-  delete yyvsp[-7].TypeVal;
+  delete (yyvsp[-7].TypeVal);
 
   ValID ID;
   if (!FunctionName.empty()) {
@@ -4040,26 +4874,26 @@
     Fn->setLinkage(CurFun.Linkage);
     Fn->setVisibility(CurFun.Visibility);
   }
-  Fn->setCallingConv(yyvsp[-8].UIntVal);
-  Fn->setAlignment(yyvsp[0].UIntVal);
-  if (yyvsp[-1].StrVal) {
-    Fn->setSection(yyvsp[-1].StrVal);
-    free(yyvsp[-1].StrVal);
+  Fn->setCallingConv((yyvsp[-8].UIntVal));
+  Fn->setAlignment((yyvsp[0].UIntVal));
+  if ((yyvsp[-1].StrVal)) {
+    Fn->setSection((yyvsp[-1].StrVal));
+    free((yyvsp[-1].StrVal));
   }
 
   // Add all of the arguments we parsed to the function...
-  if (yyvsp[-4].ArgList) {                     // Is null if empty...
+  if ((yyvsp[-4].ArgList)) {                     // Is null if empty...
     if (isVarArg) {  // Nuke the last entry
-      assert(yyvsp[-4].ArgList->back().Ty->get() == Type::VoidTy && yyvsp[-4].ArgList->back().Name == 0 &&
+      assert((yyvsp[-4].ArgList)->back().Ty->get() == Type::VoidTy && (yyvsp[-4].ArgList)->back().Name == 0 &&
              "Not a varargs marker!");
-      delete yyvsp[-4].ArgList->back().Ty;
-      yyvsp[-4].ArgList->pop_back();  // Delete the last entry
+      delete (yyvsp[-4].ArgList)->back().Ty;
+      (yyvsp[-4].ArgList)->pop_back();  // Delete the last entry
     }
     Function::arg_iterator ArgIt = Fn->arg_begin();
     Function::arg_iterator ArgEnd = Fn->arg_end();
     unsigned Idx = 1;
-    for (ArgListType::iterator I = yyvsp[-4].ArgList->begin(); 
-         I != yyvsp[-4].ArgList->end() && ArgIt != ArgEnd; ++I, ++ArgIt) {
+    for (ArgListType::iterator I = (yyvsp[-4].ArgList)->begin(); 
+         I != (yyvsp[-4].ArgList)->end() && ArgIt != ArgEnd; ++I, ++ArgIt) {
       delete I->Ty;                          // Delete the typeholder...
       setValueName(ArgIt, I->Name);          // Insert arg into symtab...
       CHECK_FOR_ERROR
@@ -4067,114 +4901,128 @@
       Idx++;
     }
 
-    delete yyvsp[-4].ArgList;                     // We're now done with the argument list
+    delete (yyvsp[-4].ArgList);                     // We're now done with the argument list
   }
   CHECK_FOR_ERROR
-;
-    break;}
-case 222:
-#line 2329 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  yyval.FunctionVal = CurFun.CurrentFunction;
+;}
+    break;
+
+  case 224:
+#line 2330 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+  (yyval.FunctionVal) = CurFun.CurrentFunction;
 
   // Make sure that we keep track of the linkage type even if there was a
   // previous "declare".
-  yyval.FunctionVal->setLinkage(yyvsp[-3].Linkage);
-  yyval.FunctionVal->setVisibility(yyvsp[-2].Visibility);
-;
-    break;}
-case 225:
-#line 2340 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-  yyval.FunctionVal = yyvsp[-1].FunctionVal;
+  (yyval.FunctionVal)->setLinkage((yyvsp[-3].Linkage));
+  (yyval.FunctionVal)->setVisibility((yyvsp[-2].Visibility));
+;}
+    break;
+
+  case 227:
+#line 2341 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+  (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
   CHECK_FOR_ERROR
-;
-    break;}
-case 226:
-#line 2345 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    CurFun.CurrentFunction->setLinkage(yyvsp[-2].Linkage);
-    CurFun.CurrentFunction->setVisibility(yyvsp[-1].Visibility);
-    yyval.FunctionVal = CurFun.CurrentFunction;
+;}
+    break;
+
+  case 228:
+#line 2346 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    CurFun.CurrentFunction->setLinkage((yyvsp[-2].Linkage));
+    CurFun.CurrentFunction->setVisibility((yyvsp[-1].Visibility));
+    (yyval.FunctionVal) = CurFun.CurrentFunction;
     CurFun.FunctionDone();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 227:
-#line 2357 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BoolVal = false;
+  ;}
+    break;
+
+  case 229:
+#line 2358 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.BoolVal) = false;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 228:
-#line 2361 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BoolVal = true;
+  ;}
+    break;
+
+  case 230:
+#line 2362 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.BoolVal) = true;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 229:
-#line 2366 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{    // A reference to a direct constant
-    yyval.ValIDVal = ValID::create(yyvsp[0].SInt64Val);
+  ;}
+    break;
+
+  case 231:
+#line 2367 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {    // A reference to a direct constant
+    (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 230:
-#line 2370 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::create(yyvsp[0].UInt64Val);
+  ;}
+    break;
+
+  case 232:
+#line 2371 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 231:
-#line 2374 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                     // Perhaps it's an FP constant?
-    yyval.ValIDVal = ValID::create(yyvsp[0].FPVal);
+  ;}
+    break;
+
+  case 233:
+#line 2375 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {                     // Perhaps it's an FP constant?
+    (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 232:
-#line 2378 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::create(ConstantInt::getTrue());
+  ;}
+    break;
+
+  case 234:
+#line 2379 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::create(ConstantInt::getTrue());
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 233:
-#line 2382 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::create(ConstantInt::getFalse());
+  ;}
+    break;
+
+  case 235:
+#line 2383 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::create(ConstantInt::getFalse());
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 234:
-#line 2386 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::createNull();
+  ;}
+    break;
+
+  case 236:
+#line 2387 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::createNull();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 235:
-#line 2390 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::createUndef();
+  ;}
+    break;
+
+  case 237:
+#line 2391 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::createUndef();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 236:
-#line 2394 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{     // A vector zero constant.
-    yyval.ValIDVal = ValID::createZeroInit();
+  ;}
+    break;
+
+  case 238:
+#line 2395 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {     // A vector zero constant.
+    (yyval.ValIDVal) = ValID::createZeroInit();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 237:
-#line 2398 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ // Nonempty unsized packed vector
-    const Type *ETy = (*yyvsp[-1].ConstVector)[0]->getType();
-    int NumElements = yyvsp[-1].ConstVector->size(); 
+  ;}
+    break;
+
+  case 239:
+#line 2399 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { // Nonempty unsized packed vector
+    const Type *ETy = (*(yyvsp[-1].ConstVector))[0]->getType();
+    int NumElements = (yyvsp[-1].ConstVector)->size(); 
     
     VectorType* pt = VectorType::get(ETy, NumElements);
     PATypeHolder* PTy = new PATypeHolder(
@@ -4186,213 +5034,233 @@
                                          );
     
     // Verify all elements are correct type!
-    for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
-      if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
+    for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
+      if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
         GEN_ERROR("Element #" + utostr(i) + " is not of type '" + 
                      ETy->getDescription() +"' as required!\nIt is of type '" +
-                     (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
+                     (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
     }
 
-    yyval.ValIDVal = ValID::create(ConstantVector::get(pt, *yyvsp[-1].ConstVector));
-    delete PTy; delete yyvsp[-1].ConstVector;
+    (yyval.ValIDVal) = ValID::create(ConstantVector::get(pt, *(yyvsp[-1].ConstVector)));
+    delete PTy; delete (yyvsp[-1].ConstVector);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 238:
-#line 2423 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::create(yyvsp[0].ConstVal);
+  ;}
+    break;
+
+  case 240:
+#line 2424 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 239:
-#line 2427 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    char *End = UnEscapeLexed(yyvsp[-2].StrVal, true);
-    std::string AsmStr = std::string(yyvsp[-2].StrVal, End);
-    End = UnEscapeLexed(yyvsp[0].StrVal, true);
-    std::string Constraints = std::string(yyvsp[0].StrVal, End);
-    yyval.ValIDVal = ValID::createInlineAsm(AsmStr, Constraints, yyvsp[-3].BoolVal);
-    free(yyvsp[-2].StrVal);
-    free(yyvsp[0].StrVal);
+  ;}
+    break;
+
+  case 241:
+#line 2428 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    char *End = UnEscapeLexed((yyvsp[-2].StrVal), true);
+    std::string AsmStr = std::string((yyvsp[-2].StrVal), End);
+    End = UnEscapeLexed((yyvsp[0].StrVal), true);
+    std::string Constraints = std::string((yyvsp[0].StrVal), End);
+    (yyval.ValIDVal) = ValID::createInlineAsm(AsmStr, Constraints, (yyvsp[-3].BoolVal));
+    free((yyvsp[-2].StrVal));
+    free((yyvsp[0].StrVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 240:
-#line 2441 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{  // Is it an integer reference...?
-    yyval.ValIDVal = ValID::createLocalID(yyvsp[0].UIntVal);
+  ;}
+    break;
+
+  case 242:
+#line 2442 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {  // Is it an integer reference...?
+    (yyval.ValIDVal) = ValID::createLocalID((yyvsp[0].UIntVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 241:
-#line 2445 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValIDVal = ValID::createGlobalID(yyvsp[0].UIntVal);
+  ;}
+    break;
+
+  case 243:
+#line 2446 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValIDVal) = ValID::createGlobalID((yyvsp[0].UIntVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 242:
-#line 2449 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                   // Is it a named reference...?
-    yyval.ValIDVal = ValID::createLocalName(yyvsp[0].StrVal);
+  ;}
+    break;
+
+  case 244:
+#line 2450 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {                   // Is it a named reference...?
+    (yyval.ValIDVal) = ValID::createLocalName((yyvsp[0].StrVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 243:
-#line 2453 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                   // Is it a named reference...?
-    yyval.ValIDVal = ValID::createGlobalName(yyvsp[0].StrVal);
+  ;}
+    break;
+
+  case 245:
+#line 2454 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {                   // Is it a named reference...?
+    (yyval.ValIDVal) = ValID::createGlobalName((yyvsp[0].StrVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 246:
-#line 2465 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 248:
+#line 2466 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
-    yyval.ValueVal = getVal(*yyvsp[-1].TypeVal, yyvsp[0].ValIDVal); 
-    delete yyvsp[-1].TypeVal;
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
+    (yyval.ValueVal) = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal)); 
+    delete (yyvsp[-1].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 247:
-#line 2474 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.FunctionVal = yyvsp[-1].FunctionVal;
+  ;}
+    break;
+
+  case 249:
+#line 2475 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 248:
-#line 2478 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ // Do not allow functions with 0 basic blocks   
-    yyval.FunctionVal = yyvsp[-1].FunctionVal;
+  ;}
+    break;
+
+  case 250:
+#line 2479 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { // Do not allow functions with 0 basic blocks   
+    (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 249:
-#line 2487 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    setValueName(yyvsp[0].TermInstVal, yyvsp[-1].StrVal);
+  ;}
+    break;
+
+  case 251:
+#line 2488 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    setValueName((yyvsp[0].TermInstVal), (yyvsp[-1].StrVal));
     CHECK_FOR_ERROR
-    InsertValue(yyvsp[0].TermInstVal);
-    yyvsp[-2].BasicBlockVal->getInstList().push_back(yyvsp[0].TermInstVal);
-    yyval.BasicBlockVal = yyvsp[-2].BasicBlockVal;
+    InsertValue((yyvsp[0].TermInstVal));
+    (yyvsp[-2].BasicBlockVal)->getInstList().push_back((yyvsp[0].TermInstVal));
+    (yyval.BasicBlockVal) = (yyvsp[-2].BasicBlockVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 250:
-#line 2496 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (CastInst *CI1 = dyn_cast<CastInst>(yyvsp[0].InstVal))
+  ;}
+    break;
+
+  case 252:
+#line 2497 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (CastInst *CI1 = dyn_cast<CastInst>((yyvsp[0].InstVal)))
       if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0)))
         if (CI2->getParent() == 0)
-          yyvsp[-1].BasicBlockVal->getInstList().push_back(CI2);
-    yyvsp[-1].BasicBlockVal->getInstList().push_back(yyvsp[0].InstVal);
-    yyval.BasicBlockVal = yyvsp[-1].BasicBlockVal;
+          (yyvsp[-1].BasicBlockVal)->getInstList().push_back(CI2);
+    (yyvsp[-1].BasicBlockVal)->getInstList().push_back((yyvsp[0].InstVal));
+    (yyval.BasicBlockVal) = (yyvsp[-1].BasicBlockVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 251:
-#line 2505 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{          // Empty space between instruction lists
-    yyval.BasicBlockVal = defineBBVal(ValID::createLocalID(CurFun.NextValNum));
-    CHECK_FOR_ERROR
-  ;
-    break;}
-case 252:
-#line 2509 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{             // Labelled (named) basic block
-    yyval.BasicBlockVal = defineBBVal(ValID::createLocalName(yyvsp[0].StrVal));
-    CHECK_FOR_ERROR
-  ;
-    break;}
-case 253:
-#line 2514 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{              // Return with a result...
-    yyval.TermInstVal = new ReturnInst(yyvsp[0].ValueVal);
-    CHECK_FOR_ERROR
-  ;
-    break;}
-case 254:
-#line 2518 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                                    // Return with no result...
-    yyval.TermInstVal = new ReturnInst();
-    CHECK_FOR_ERROR
-  ;
-    break;}
-case 255:
-#line 2522 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{                           // Unconditional Branch...
-    BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
-    CHECK_FOR_ERROR
-    yyval.TermInstVal = new BranchInst(tmpBB);
-  ;
-    break;}
-case 256:
-#line 2527 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{  
-    assert(cast<IntegerType>(yyvsp[-7].PrimType)->getBitWidth() == 1 && "Not Bool?");
-    BasicBlock* tmpBBA = getBBVal(yyvsp[-3].ValIDVal);
-    CHECK_FOR_ERROR
-    BasicBlock* tmpBBB = getBBVal(yyvsp[0].ValIDVal);
-    CHECK_FOR_ERROR
-    Value* tmpVal = getVal(Type::Int1Ty, yyvsp[-6].ValIDVal);
-    CHECK_FOR_ERROR
-    yyval.TermInstVal = new BranchInst(tmpBBA, tmpBBB, tmpVal);
-  ;
-    break;}
-case 257:
-#line 2537 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    Value* tmpVal = getVal(yyvsp[-7].PrimType, yyvsp[-6].ValIDVal);
-    CHECK_FOR_ERROR
-    BasicBlock* tmpBB = getBBVal(yyvsp[-3].ValIDVal);
-    CHECK_FOR_ERROR
-    SwitchInst *S = new SwitchInst(tmpVal, tmpBB, yyvsp[-1].JumpTable->size());
-    yyval.TermInstVal = S;
+  ;}
+    break;
 
-    std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = yyvsp[-1].JumpTable->begin(),
-      E = yyvsp[-1].JumpTable->end();
+  case 253:
+#line 2506 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {          // Empty space between instruction lists
+    (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalID(CurFun.NextValNum));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 254:
+#line 2510 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {             // Labelled (named) basic block
+    (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalName((yyvsp[0].StrVal)));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 255:
+#line 2515 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {              // Return with a result...
+    (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal));
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 256:
+#line 2519 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {                                    // Return with no result...
+    (yyval.TermInstVal) = new ReturnInst();
+    CHECK_FOR_ERROR
+  ;}
+    break;
+
+  case 257:
+#line 2523 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {                           // Unconditional Branch...
+    BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
+    CHECK_FOR_ERROR
+    (yyval.TermInstVal) = new BranchInst(tmpBB);
+  ;}
+    break;
+
+  case 258:
+#line 2528 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {  
+    assert(cast<IntegerType>((yyvsp[-7].PrimType))->getBitWidth() == 1 && "Not Bool?");
+    BasicBlock* tmpBBA = getBBVal((yyvsp[-3].ValIDVal));
+    CHECK_FOR_ERROR
+    BasicBlock* tmpBBB = getBBVal((yyvsp[0].ValIDVal));
+    CHECK_FOR_ERROR
+    Value* tmpVal = getVal(Type::Int1Ty, (yyvsp[-6].ValIDVal));
+    CHECK_FOR_ERROR
+    (yyval.TermInstVal) = new BranchInst(tmpBBA, tmpBBB, tmpVal);
+  ;}
+    break;
+
+  case 259:
+#line 2538 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    Value* tmpVal = getVal((yyvsp[-7].PrimType), (yyvsp[-6].ValIDVal));
+    CHECK_FOR_ERROR
+    BasicBlock* tmpBB = getBBVal((yyvsp[-3].ValIDVal));
+    CHECK_FOR_ERROR
+    SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[-1].JumpTable)->size());
+    (yyval.TermInstVal) = S;
+
+    std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = (yyvsp[-1].JumpTable)->begin(),
+      E = (yyvsp[-1].JumpTable)->end();
     for (; I != E; ++I) {
       if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
           S->addCase(CI, I->second);
       else
         GEN_ERROR("Switch case is constant, but not a simple integer");
     }
-    delete yyvsp[-1].JumpTable;
+    delete (yyvsp[-1].JumpTable);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 258:
-#line 2556 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    Value* tmpVal = getVal(yyvsp[-6].PrimType, yyvsp[-5].ValIDVal);
+  ;}
+    break;
+
+  case 260:
+#line 2557 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    Value* tmpVal = getVal((yyvsp[-6].PrimType), (yyvsp[-5].ValIDVal));
     CHECK_FOR_ERROR
-    BasicBlock* tmpBB = getBBVal(yyvsp[-2].ValIDVal);
+    BasicBlock* tmpBB = getBBVal((yyvsp[-2].ValIDVal));
     CHECK_FOR_ERROR
     SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
-    yyval.TermInstVal = S;
+    (yyval.TermInstVal) = S;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 259:
-#line 2566 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 261:
+#line 2567 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
 
     // Handle the short syntax
     const PointerType *PFTy = 0;
     const FunctionType *Ty = 0;
-    if (!(PFTy = dyn_cast<PointerType>(yyvsp[-11].TypeVal->get())) ||
+    if (!(PFTy = dyn_cast<PointerType>((yyvsp[-11].TypeVal)->get())) ||
         !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
       // Pull out the types of all of the arguments...
       std::vector<const Type*> ParamTypes;
       ParamAttrsVector Attrs;
-      if (yyvsp[-6].ParamAttrs != ParamAttr::None) {
-        ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = yyvsp[-6].ParamAttrs;
+      if ((yyvsp[-6].ParamAttrs) != ParamAttr::None) {
+        ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = (yyvsp[-6].ParamAttrs);
         Attrs.push_back(PAWI);
       }
-      ValueRefList::iterator I = yyvsp[-8].ValueRefList->begin(), E = yyvsp[-8].ValueRefList->end();
+      ValueRefList::iterator I = (yyvsp[-8].ValueRefList)->begin(), E = (yyvsp[-8].ValueRefList)->end();
       unsigned index = 1;
       for (; I != E; ++I, ++index) {
         const Type *Ty = I->Val->getType();
@@ -4408,22 +5276,22 @@
       ParamAttrsList *PAL = 0;
       if (!Attrs.empty())
         PAL = ParamAttrsList::get(Attrs);
-      Ty = FunctionType::get(yyvsp[-11].TypeVal->get(), ParamTypes, false, PAL);
+      Ty = FunctionType::get((yyvsp[-11].TypeVal)->get(), ParamTypes, false, PAL);
       PFTy = PointerType::get(Ty);
     }
 
-    delete yyvsp[-11].TypeVal;
+    delete (yyvsp[-11].TypeVal);
 
-    Value *V = getVal(PFTy, yyvsp[-10].ValIDVal);   // Get the function we're calling...
+    Value *V = getVal(PFTy, (yyvsp[-10].ValIDVal));   // Get the function we're calling...
     CHECK_FOR_ERROR
-    BasicBlock *Normal = getBBVal(yyvsp[-3].ValIDVal);
+    BasicBlock *Normal = getBBVal((yyvsp[-3].ValIDVal));
     CHECK_FOR_ERROR
-    BasicBlock *Except = getBBVal(yyvsp[0].ValIDVal);
+    BasicBlock *Except = getBBVal((yyvsp[0].ValIDVal));
     CHECK_FOR_ERROR
 
     // Check the arguments
     ValueList Args;
-    if (yyvsp[-8].ValueRefList->empty()) {                                   // Has no arguments?
+    if ((yyvsp[-8].ValueRefList)->empty()) {                                   // Has no arguments?
       // Make sure no arguments is a good thing!
       if (Ty->getNumParams() != 0)
         GEN_ERROR("No arguments passed to a function that "
@@ -4433,7 +5301,7 @@
       // correctly!
       FunctionType::param_iterator I = Ty->param_begin();
       FunctionType::param_iterator E = Ty->param_end();
-      ValueRefList::iterator ArgI = yyvsp[-8].ValueRefList->begin(), ArgE = yyvsp[-8].ValueRefList->end();
+      ValueRefList::iterator ArgI = (yyvsp[-8].ValueRefList)->begin(), ArgE = (yyvsp[-8].ValueRefList)->end();
 
       for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
         if (ArgI->Val->getType() != *I)
@@ -4452,322 +5320,348 @@
 
     // Create the InvokeInst
     InvokeInst *II = new InvokeInst(V, Normal, Except, &Args[0], Args.size());
-    II->setCallingConv(yyvsp[-12].UIntVal);
-    yyval.TermInstVal = II;
-    delete yyvsp[-8].ValueRefList;
+    II->setCallingConv((yyvsp[-12].UIntVal));
+    (yyval.TermInstVal) = II;
+    delete (yyvsp[-8].ValueRefList);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 260:
-#line 2645 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TermInstVal = new UnwindInst();
+  ;}
+    break;
+
+  case 262:
+#line 2646 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TermInstVal) = new UnwindInst();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 261:
-#line 2649 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.TermInstVal = new UnreachableInst();
+  ;}
+    break;
+
+  case 263:
+#line 2650 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.TermInstVal) = new UnreachableInst();
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 262:
-#line 2656 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.JumpTable = yyvsp[-5].JumpTable;
-    Constant *V = cast<Constant>(getExistingVal(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal));
+  ;}
+    break;
+
+  case 264:
+#line 2657 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.JumpTable) = (yyvsp[-5].JumpTable);
+    Constant *V = cast<Constant>(getExistingVal((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
     CHECK_FOR_ERROR
     if (V == 0)
       GEN_ERROR("May only switch on a constant pool value");
 
-    BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
+    BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.JumpTable->push_back(std::make_pair(V, tmpBB));
-  ;
-    break;}
-case 263:
-#line 2667 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.JumpTable = new std::vector<std::pair<Constant*, BasicBlock*> >();
-    Constant *V = cast<Constant>(getExistingVal(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal));
+    (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
+  ;}
+    break;
+
+  case 265:
+#line 2668 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
+    Constant *V = cast<Constant>(getExistingVal((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
     CHECK_FOR_ERROR
 
     if (V == 0)
       GEN_ERROR("May only switch on a constant pool value");
 
-    BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
+    BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.JumpTable->push_back(std::make_pair(V, tmpBB)); 
-  ;
-    break;}
-case 264:
-#line 2680 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB)); 
+  ;}
+    break;
+
+  case 266:
+#line 2681 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     // Is this definition named?? if so, assign the name...
-    setValueName(yyvsp[0].InstVal, yyvsp[-1].StrVal);
+    setValueName((yyvsp[0].InstVal), (yyvsp[-1].StrVal));
     CHECK_FOR_ERROR
-    InsertValue(yyvsp[0].InstVal);
-    yyval.InstVal = yyvsp[0].InstVal;
+    InsertValue((yyvsp[0].InstVal));
+    (yyval.InstVal) = (yyvsp[0].InstVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 265:
-#line 2690 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{    // Used for PHI nodes
+  ;}
+    break;
+
+  case 267:
+#line 2691 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {    // Used for PHI nodes
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-5].TypeVal)->getDescription());
-    yyval.PHIList = new std::list<std::pair<Value*, BasicBlock*> >();
-    Value* tmpVal = getVal(*yyvsp[-5].TypeVal, yyvsp[-3].ValIDVal);
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-5].TypeVal))->getDescription());
+    (yyval.PHIList) = new std::list<std::pair<Value*, BasicBlock*> >();
+    Value* tmpVal = getVal(*(yyvsp[-5].TypeVal), (yyvsp[-3].ValIDVal));
     CHECK_FOR_ERROR
-    BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal);
+    BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.PHIList->push_back(std::make_pair(tmpVal, tmpBB));
-    delete yyvsp[-5].TypeVal;
-  ;
-    break;}
-case 266:
-#line 2701 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.PHIList = yyvsp[-6].PHIList;
-    Value* tmpVal = getVal(yyvsp[-6].PHIList->front().first->getType(), yyvsp[-3].ValIDVal);
+    (yyval.PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
+    delete (yyvsp[-5].TypeVal);
+  ;}
+    break;
+
+  case 268:
+#line 2702 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.PHIList) = (yyvsp[-6].PHIList);
+    Value* tmpVal = getVal((yyvsp[-6].PHIList)->front().first->getType(), (yyvsp[-3].ValIDVal));
     CHECK_FOR_ERROR
-    BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal);
+    BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
     CHECK_FOR_ERROR
-    yyvsp[-6].PHIList->push_back(std::make_pair(tmpVal, tmpBB));
-  ;
-    break;}
-case 267:
-#line 2711 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{    
+    (yyvsp[-6].PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
+  ;}
+    break;
+
+  case 269:
+#line 2712 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {    
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
     // Used for call and invoke instructions
-    yyval.ValueRefList = new ValueRefList();
-    ValueRefListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-2].TypeVal->get(), yyvsp[-1].ValIDVal);
-    yyval.ValueRefList->push_back(E);
-    delete yyvsp[-2].TypeVal;
-  ;
-    break;}
-case 268:
-#line 2720 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    (yyval.ValueRefList) = new ValueRefList();
+    ValueRefListEntry E; E.Attrs = (yyvsp[0].ParamAttrs); E.Val = getVal((yyvsp[-2].TypeVal)->get(), (yyvsp[-1].ValIDVal));
+    (yyval.ValueRefList)->push_back(E);
+    delete (yyvsp[-2].TypeVal);
+  ;}
+    break;
+
+  case 270:
+#line 2721 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
-    yyval.ValueRefList = yyvsp[-4].ValueRefList;
-    ValueRefListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-2].TypeVal->get(), yyvsp[-1].ValIDVal);
-    yyval.ValueRefList->push_back(E);
-    delete yyvsp[-2].TypeVal;
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
+    (yyval.ValueRefList) = (yyvsp[-4].ValueRefList);
+    ValueRefListEntry E; E.Attrs = (yyvsp[0].ParamAttrs); E.Val = getVal((yyvsp[-2].TypeVal)->get(), (yyvsp[-1].ValIDVal));
+    (yyval.ValueRefList)->push_back(E);
+    delete (yyvsp[-2].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 269:
-#line 2729 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ValueRefList = new ValueRefList(); ;
-    break;}
-case 270:
-#line 2732 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{ yyval.ValueList = new std::vector<Value*>(); ;
-    break;}
-case 271:
-#line 2733 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.ValueList = yyvsp[-2].ValueList;
-    yyval.ValueList->push_back(yyvsp[0].ValueVal);
+  ;}
+    break;
+
+  case 271:
+#line 2730 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ValueRefList) = new ValueRefList(); ;}
+    break;
+
+  case 272:
+#line 2733 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.ValueList) = new std::vector<Value*>(); ;}
+    break;
+
+  case 273:
+#line 2734 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValueList) = (yyvsp[-2].ValueList);
+    (yyval.ValueList)->push_back((yyvsp[0].ValueVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 272:
-#line 2740 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BoolVal = true;
+  ;}
+    break;
+
+  case 274:
+#line 2741 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.BoolVal) = true;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 273:
-#line 2744 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BoolVal = false;
+  ;}
+    break;
+
+  case 275:
+#line 2745 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.BoolVal) = false;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 274:
-#line 2749 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 276:
+#line 2750 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
-    if (!(*yyvsp[-3].TypeVal)->isInteger() && !(*yyvsp[-3].TypeVal)->isFloatingPoint() && 
-        !isa<VectorType>((*yyvsp[-3].TypeVal).get()))
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
+    if (!(*(yyvsp[-3].TypeVal))->isInteger() && !(*(yyvsp[-3].TypeVal))->isFloatingPoint() && 
+        !isa<VectorType>((*(yyvsp[-3].TypeVal)).get()))
       GEN_ERROR(
         "Arithmetic operator requires integer, FP, or packed operands");
-    if (isa<VectorType>((*yyvsp[-3].TypeVal).get()) && 
-        (yyvsp[-4].BinaryOpVal == Instruction::URem || 
-         yyvsp[-4].BinaryOpVal == Instruction::SRem ||
-         yyvsp[-4].BinaryOpVal == Instruction::FRem))
+    if (isa<VectorType>((*(yyvsp[-3].TypeVal)).get()) && 
+        ((yyvsp[-4].BinaryOpVal) == Instruction::URem || 
+         (yyvsp[-4].BinaryOpVal) == Instruction::SRem ||
+         (yyvsp[-4].BinaryOpVal) == Instruction::FRem))
       GEN_ERROR("Remainder not supported on vector types");
-    Value* val1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal); 
+    Value* val1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal)); 
     CHECK_FOR_ERROR
-    Value* val2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
+    Value* val2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.InstVal = BinaryOperator::create(yyvsp[-4].BinaryOpVal, val1, val2);
-    if (yyval.InstVal == 0)
+    (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), val1, val2);
+    if ((yyval.InstVal) == 0)
       GEN_ERROR("binary operator returned null");
-    delete yyvsp[-3].TypeVal;
-  ;
-    break;}
-case 275:
-#line 2770 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    delete (yyvsp[-3].TypeVal);
+  ;}
+    break;
+
+  case 277:
+#line 2771 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
-    if (!(*yyvsp[-3].TypeVal)->isInteger()) {
-      if (Instruction::isShift(yyvsp[-4].BinaryOpVal) || !isa<VectorType>(yyvsp[-3].TypeVal->get()) ||
-          !cast<VectorType>(yyvsp[-3].TypeVal->get())->getElementType()->isInteger())
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
+    if (!(*(yyvsp[-3].TypeVal))->isInteger()) {
+      if (Instruction::isShift((yyvsp[-4].BinaryOpVal)) || !isa<VectorType>((yyvsp[-3].TypeVal)->get()) ||
+          !cast<VectorType>((yyvsp[-3].TypeVal)->get())->getElementType()->isInteger())
         GEN_ERROR("Logical operator requires integral operands");
     }
-    Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
+    Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
     CHECK_FOR_ERROR
-    Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
+    Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.InstVal = BinaryOperator::create(yyvsp[-4].BinaryOpVal, tmpVal1, tmpVal2);
-    if (yyval.InstVal == 0)
+    (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), tmpVal1, tmpVal2);
+    if ((yyval.InstVal) == 0)
       GEN_ERROR("binary operator returned null");
-    delete yyvsp[-3].TypeVal;
-  ;
-    break;}
-case 276:
-#line 2787 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    delete (yyvsp[-3].TypeVal);
+  ;}
+    break;
+
+  case 278:
+#line 2788 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
-    if (isa<VectorType>((*yyvsp[-3].TypeVal).get()))
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
+    if (isa<VectorType>((*(yyvsp[-3].TypeVal)).get()))
       GEN_ERROR("Vector types not supported by icmp instruction");
-    Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
+    Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
     CHECK_FOR_ERROR
-    Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
+    Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.InstVal = CmpInst::create(yyvsp[-5].OtherOpVal, yyvsp[-4].IPredicate, tmpVal1, tmpVal2);
-    if (yyval.InstVal == 0)
+    (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].IPredicate), tmpVal1, tmpVal2);
+    if ((yyval.InstVal) == 0)
       GEN_ERROR("icmp operator returned null");
-    delete yyvsp[-3].TypeVal;
-  ;
-    break;}
-case 277:
-#line 2801 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    delete (yyvsp[-3].TypeVal);
+  ;}
+    break;
+
+  case 279:
+#line 2802 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
-    if (isa<VectorType>((*yyvsp[-3].TypeVal).get()))
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
+    if (isa<VectorType>((*(yyvsp[-3].TypeVal)).get()))
       GEN_ERROR("Vector types not supported by fcmp instruction");
-    Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
+    Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
     CHECK_FOR_ERROR
-    Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
+    Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.InstVal = CmpInst::create(yyvsp[-5].OtherOpVal, yyvsp[-4].FPredicate, tmpVal1, tmpVal2);
-    if (yyval.InstVal == 0)
+    (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].FPredicate), tmpVal1, tmpVal2);
+    if ((yyval.InstVal) == 0)
       GEN_ERROR("fcmp operator returned null");
-    delete yyvsp[-3].TypeVal;
-  ;
-    break;}
-case 278:
-#line 2815 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    delete (yyvsp[-3].TypeVal);
+  ;}
+    break;
+
+  case 280:
+#line 2816 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
-    Value* Val = yyvsp[-2].ValueVal;
-    const Type* DestTy = yyvsp[0].TypeVal->get();
-    if (!CastInst::castIsValid(yyvsp[-3].CastOpVal, Val, DestTy))
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
+    Value* Val = (yyvsp[-2].ValueVal);
+    const Type* DestTy = (yyvsp[0].TypeVal)->get();
+    if (!CastInst::castIsValid((yyvsp[-3].CastOpVal), Val, DestTy))
       GEN_ERROR("invalid cast opcode for cast from '" +
                 Val->getType()->getDescription() + "' to '" +
                 DestTy->getDescription() + "'"); 
-    yyval.InstVal = CastInst::create(yyvsp[-3].CastOpVal, Val, DestTy);
-    delete yyvsp[0].TypeVal;
-  ;
-    break;}
-case 279:
-#line 2827 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (yyvsp[-4].ValueVal->getType() != Type::Int1Ty)
+    (yyval.InstVal) = CastInst::create((yyvsp[-3].CastOpVal), Val, DestTy);
+    delete (yyvsp[0].TypeVal);
+  ;}
+    break;
+
+  case 281:
+#line 2828 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    if ((yyvsp[-4].ValueVal)->getType() != Type::Int1Ty)
       GEN_ERROR("select condition must be boolean");
-    if (yyvsp[-2].ValueVal->getType() != yyvsp[0].ValueVal->getType())
+    if ((yyvsp[-2].ValueVal)->getType() != (yyvsp[0].ValueVal)->getType())
       GEN_ERROR("select value types should match");
-    yyval.InstVal = new SelectInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
+    (yyval.InstVal) = new SelectInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 280:
-#line 2835 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 282:
+#line 2836 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
-    yyval.InstVal = new VAArgInst(yyvsp[-2].ValueVal, *yyvsp[0].TypeVal);
-    delete yyvsp[0].TypeVal;
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
+    (yyval.InstVal) = new VAArgInst((yyvsp[-2].ValueVal), *(yyvsp[0].TypeVal));
+    delete (yyvsp[0].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 281:
-#line 2842 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!ExtractElementInst::isValidOperands(yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
+  ;}
+    break;
+
+  case 283:
+#line 2843 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
       GEN_ERROR("Invalid extractelement operands");
-    yyval.InstVal = new ExtractElementInst(yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
+    (yyval.InstVal) = new ExtractElementInst((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 282:
-#line 2848 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!InsertElementInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
+  ;}
+    break;
+
+  case 284:
+#line 2849 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
       GEN_ERROR("Invalid insertelement operands");
-    yyval.InstVal = new InsertElementInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
+    (yyval.InstVal) = new InsertElementInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 283:
-#line 2854 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!ShuffleVectorInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
+  ;}
+    break;
+
+  case 285:
+#line 2855 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
       GEN_ERROR("Invalid shufflevector operands");
-    yyval.InstVal = new ShuffleVectorInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
+    (yyval.InstVal) = new ShuffleVectorInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 284:
-#line 2860 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    const Type *Ty = yyvsp[0].PHIList->front().first->getType();
+  ;}
+    break;
+
+  case 286:
+#line 2861 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    const Type *Ty = (yyvsp[0].PHIList)->front().first->getType();
     if (!Ty->isFirstClassType())
       GEN_ERROR("PHI node operands must be of first class type");
-    yyval.InstVal = new PHINode(Ty);
-    ((PHINode*)yyval.InstVal)->reserveOperandSpace(yyvsp[0].PHIList->size());
-    while (yyvsp[0].PHIList->begin() != yyvsp[0].PHIList->end()) {
-      if (yyvsp[0].PHIList->front().first->getType() != Ty) 
+    (yyval.InstVal) = new PHINode(Ty);
+    ((PHINode*)(yyval.InstVal))->reserveOperandSpace((yyvsp[0].PHIList)->size());
+    while ((yyvsp[0].PHIList)->begin() != (yyvsp[0].PHIList)->end()) {
+      if ((yyvsp[0].PHIList)->front().first->getType() != Ty) 
         GEN_ERROR("All elements of a PHI node must be of the same type");
-      cast<PHINode>(yyval.InstVal)->addIncoming(yyvsp[0].PHIList->front().first, yyvsp[0].PHIList->front().second);
-      yyvsp[0].PHIList->pop_front();
+      cast<PHINode>((yyval.InstVal))->addIncoming((yyvsp[0].PHIList)->front().first, (yyvsp[0].PHIList)->front().second);
+      (yyvsp[0].PHIList)->pop_front();
     }
-    delete yyvsp[0].PHIList;  // Free the list...
+    delete (yyvsp[0].PHIList);  // Free the list...
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 285:
-#line 2876 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 287:
+#line 2877 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
 
     // Handle the short syntax
     const PointerType *PFTy = 0;
     const FunctionType *Ty = 0;
-    if (!(PFTy = dyn_cast<PointerType>(yyvsp[-5].TypeVal->get())) ||
+    if (!(PFTy = dyn_cast<PointerType>((yyvsp[-5].TypeVal)->get())) ||
         !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
       // Pull out the types of all of the arguments...
       std::vector<const Type*> ParamTypes;
       ParamAttrsVector Attrs;
-      if (yyvsp[0].ParamAttrs != ParamAttr::None) {
-        ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = yyvsp[0].ParamAttrs;
+      if ((yyvsp[0].ParamAttrs) != ParamAttr::None) {
+        ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = (yyvsp[0].ParamAttrs);
         Attrs.push_back(PAWI);
       }
       unsigned index = 1;
-      ValueRefList::iterator I = yyvsp[-2].ValueRefList->begin(), E = yyvsp[-2].ValueRefList->end();
+      ValueRefList::iterator I = (yyvsp[-2].ValueRefList)->begin(), E = (yyvsp[-2].ValueRefList)->end();
       for (; I != E; ++I, ++index) {
         const Type *Ty = I->Val->getType();
         if (Ty == Type::VoidTy)
@@ -4783,11 +5677,11 @@
       if (!Attrs.empty())
         PAL = ParamAttrsList::get(Attrs);
 
-      Ty = FunctionType::get(yyvsp[-5].TypeVal->get(), ParamTypes, false, PAL);
+      Ty = FunctionType::get((yyvsp[-5].TypeVal)->get(), ParamTypes, false, PAL);
       PFTy = PointerType::get(Ty);
     }
 
-    Value *V = getVal(PFTy, yyvsp[-4].ValIDVal);   // Get the function we're calling...
+    Value *V = getVal(PFTy, (yyvsp[-4].ValIDVal));   // Get the function we're calling...
     CHECK_FOR_ERROR
 
     // Check for call to invalid intrinsic to avoid crashing later.
@@ -4801,7 +5695,7 @@
 
     // Check the arguments 
     ValueList Args;
-    if (yyvsp[-2].ValueRefList->empty()) {                                   // Has no arguments?
+    if ((yyvsp[-2].ValueRefList)->empty()) {                                   // Has no arguments?
       // Make sure no arguments is a good thing!
       if (Ty->getNumParams() != 0)
         GEN_ERROR("No arguments passed to a function that "
@@ -4812,7 +5706,7 @@
       //
       FunctionType::param_iterator I = Ty->param_begin();
       FunctionType::param_iterator E = Ty->param_end();
-      ValueRefList::iterator ArgI = yyvsp[-2].ValueRefList->begin(), ArgE = yyvsp[-2].ValueRefList->end();
+      ValueRefList::iterator ArgI = (yyvsp[-2].ValueRefList)->begin(), ArgE = (yyvsp[-2].ValueRefList)->end();
 
       for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
         if (ArgI->Val->getType() != *I)
@@ -4829,365 +5723,428 @@
     }
     // Create the call node
     CallInst *CI = new CallInst(V, &Args[0], Args.size());
-    CI->setTailCall(yyvsp[-7].BoolVal);
-    CI->setCallingConv(yyvsp[-6].UIntVal);
-    yyval.InstVal = CI;
-    delete yyvsp[-2].ValueRefList;
-    delete yyvsp[-5].TypeVal;
+    CI->setTailCall((yyvsp[-7].BoolVal));
+    CI->setCallingConv((yyvsp[-6].UIntVal));
+    (yyval.InstVal) = CI;
+    delete (yyvsp[-2].ValueRefList);
+    delete (yyvsp[-5].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 286:
-#line 2960 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.InstVal = yyvsp[0].InstVal;
+  ;}
+    break;
+
+  case 288:
+#line 2961 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.InstVal) = (yyvsp[0].InstVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 287:
-#line 2965 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BoolVal = true;
+  ;}
+    break;
+
+  case 289:
+#line 2966 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.BoolVal) = true;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 288:
-#line 2969 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    yyval.BoolVal = false;
+  ;}
+    break;
+
+  case 290:
+#line 2970 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.BoolVal) = false;
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 289:
-#line 2976 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 291:
+#line 2977 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
-    yyval.InstVal = new MallocInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal);
-    delete yyvsp[-1].TypeVal;
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
+    (yyval.InstVal) = new MallocInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
+    delete (yyvsp[-1].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 290:
-#line 2983 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 292:
+#line 2984 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
-    Value* tmpVal = getVal(yyvsp[-2].PrimType, yyvsp[-1].ValIDVal);
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
+    Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.InstVal = new MallocInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
-    delete yyvsp[-4].TypeVal;
-  ;
-    break;}
-case 291:
-#line 2991 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    (yyval.InstVal) = new MallocInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
+    delete (yyvsp[-4].TypeVal);
+  ;}
+    break;
+
+  case 293:
+#line 2992 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
-    yyval.InstVal = new AllocaInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal);
-    delete yyvsp[-1].TypeVal;
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
+    (yyval.InstVal) = new AllocaInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
+    delete (yyvsp[-1].TypeVal);
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 292:
-#line 2998 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 294:
+#line 2999 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
-    Value* tmpVal = getVal(yyvsp[-2].PrimType, yyvsp[-1].ValIDVal);
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
+    Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.InstVal = new AllocaInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
-    delete yyvsp[-4].TypeVal;
-  ;
-    break;}
-case 293:
-#line 3006 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
-    if (!isa<PointerType>(yyvsp[0].ValueVal->getType()))
+    (yyval.InstVal) = new AllocaInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
+    delete (yyvsp[-4].TypeVal);
+  ;}
+    break;
+
+  case 295:
+#line 3007 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
+    if (!isa<PointerType>((yyvsp[0].ValueVal)->getType()))
       GEN_ERROR("Trying to free nonpointer type " + 
-                     yyvsp[0].ValueVal->getType()->getDescription() + "");
-    yyval.InstVal = new FreeInst(yyvsp[0].ValueVal);
+                     (yyvsp[0].ValueVal)->getType()->getDescription() + "");
+    (yyval.InstVal) = new FreeInst((yyvsp[0].ValueVal));
     CHECK_FOR_ERROR
-  ;
-    break;}
-case 294:
-#line 3014 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+  ;}
+    break;
+
+  case 296:
+#line 3015 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
-    if (!isa<PointerType>(yyvsp[-2].TypeVal->get()))
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
+    if (!isa<PointerType>((yyvsp[-2].TypeVal)->get()))
       GEN_ERROR("Can't load from nonpointer type: " +
-                     (*yyvsp[-2].TypeVal)->getDescription());
-    if (!cast<PointerType>(yyvsp[-2].TypeVal->get())->getElementType()->isFirstClassType())
+                     (*(yyvsp[-2].TypeVal))->getDescription());
+    if (!cast<PointerType>((yyvsp[-2].TypeVal)->get())->getElementType()->isFirstClassType())
       GEN_ERROR("Can't load from pointer of non-first-class type: " +
-                     (*yyvsp[-2].TypeVal)->getDescription());
-    Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal);
+                     (*(yyvsp[-2].TypeVal))->getDescription());
+    Value* tmpVal = getVal(*(yyvsp[-2].TypeVal), (yyvsp[-1].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.InstVal = new LoadInst(tmpVal, "", yyvsp[-4].BoolVal, yyvsp[0].UIntVal);
-    delete yyvsp[-2].TypeVal;
-  ;
-    break;}
-case 295:
-#line 3028 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    (yyval.InstVal) = new LoadInst(tmpVal, "", (yyvsp[-4].BoolVal), (yyvsp[0].UIntVal));
+    delete (yyvsp[-2].TypeVal);
+  ;}
+    break;
+
+  case 297:
+#line 3029 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
-    const PointerType *PT = dyn_cast<PointerType>(yyvsp[-2].TypeVal->get());
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
+    const PointerType *PT = dyn_cast<PointerType>((yyvsp[-2].TypeVal)->get());
     if (!PT)
       GEN_ERROR("Can't store to a nonpointer type: " +
-                     (*yyvsp[-2].TypeVal)->getDescription());
+                     (*(yyvsp[-2].TypeVal))->getDescription());
     const Type *ElTy = PT->getElementType();
-    if (ElTy != yyvsp[-4].ValueVal->getType())
-      GEN_ERROR("Can't store '" + yyvsp[-4].ValueVal->getType()->getDescription() +
+    if (ElTy != (yyvsp[-4].ValueVal)->getType())
+      GEN_ERROR("Can't store '" + (yyvsp[-4].ValueVal)->getType()->getDescription() +
                      "' into space of type '" + ElTy->getDescription() + "'");
 
-    Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal);
+    Value* tmpVal = getVal(*(yyvsp[-2].TypeVal), (yyvsp[-1].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.InstVal = new StoreInst(yyvsp[-4].ValueVal, tmpVal, yyvsp[-6].BoolVal, yyvsp[0].UIntVal);
-    delete yyvsp[-2].TypeVal;
-  ;
-    break;}
-case 296:
-#line 3045 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
-{
+    (yyval.InstVal) = new StoreInst((yyvsp[-4].ValueVal), tmpVal, (yyvsp[-6].BoolVal), (yyvsp[0].UIntVal));
+    delete (yyvsp[-2].TypeVal);
+  ;}
+    break;
+
+  case 298:
+#line 3046 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+    {
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
-    if (!isa<PointerType>(yyvsp[-2].TypeVal->get()))
+      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
+    if (!isa<PointerType>((yyvsp[-2].TypeVal)->get()))
       GEN_ERROR("getelementptr insn requires pointer operand");
 
-    if (!GetElementPtrInst::getIndexedType(*yyvsp[-2].TypeVal, &(*yyvsp[0].ValueList)[0], yyvsp[0].ValueList->size(), true))
+    if (!GetElementPtrInst::getIndexedType(*(yyvsp[-2].TypeVal), &(*(yyvsp[0].ValueList))[0], (yyvsp[0].ValueList)->size(), true))
       GEN_ERROR("Invalid getelementptr indices for type '" +
-                     (*yyvsp[-2].TypeVal)->getDescription()+ "'");
-    Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal);
+                     (*(yyvsp[-2].TypeVal))->getDescription()+ "'");
+    Value* tmpVal = getVal(*(yyvsp[-2].TypeVal), (yyvsp[-1].ValIDVal));
     CHECK_FOR_ERROR
-    yyval.InstVal = new GetElementPtrInst(tmpVal, &(*yyvsp[0].ValueList)[0], yyvsp[0].ValueList->size());
-    delete yyvsp[-2].TypeVal; 
-    delete yyvsp[0].ValueList;
-  ;
-    break;}
-}
-   /* the action file gets copied in in place of this dollarsign */
-#line 543 "/usr/share/bison.simple"
+    (yyval.InstVal) = new GetElementPtrInst(tmpVal, &(*(yyvsp[0].ValueList))[0], (yyvsp[0].ValueList)->size());
+    delete (yyvsp[-2].TypeVal); 
+    delete (yyvsp[0].ValueList);
+  ;}
+    break;
+
+
+      default: break;
+    }
+
+/* Line 1126 of yacc.c.  */
+#line 5880 "llvmAsmParser.tab.c"
 
   yyvsp -= yylen;
   yyssp -= yylen;
-#ifdef YYLSP_NEEDED
-  yylsp -= yylen;
-#endif
 
-#if YYDEBUG != 0
-  if (yydebug)
-    {
-      short *ssp1 = yyss - 1;
-      fprintf (stderr, "state stack now");
-      while (ssp1 != yyssp)
-	fprintf (stderr, " %d", *++ssp1);
-      fprintf (stderr, "\n");
-    }
-#endif
+
+  YY_STACK_PRINT (yyss, yyssp);
 
   *++yyvsp = yyval;
 
-#ifdef YYLSP_NEEDED
-  yylsp++;
-  if (yylen == 0)
-    {
-      yylsp->first_line = yylloc.first_line;
-      yylsp->first_column = yylloc.first_column;
-      yylsp->last_line = (yylsp-1)->last_line;
-      yylsp->last_column = (yylsp-1)->last_column;
-      yylsp->text = 0;
-    }
-  else
-    {
-      yylsp->last_line = (yylsp+yylen-1)->last_line;
-      yylsp->last_column = (yylsp+yylen-1)->last_column;
-    }
-#endif
 
-  /* Now "shift" the result of the reduction.
-     Determine what state that goes to,
-     based on the state we popped back to
-     and the rule number reduced by.  */
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
 
   yyn = yyr1[yyn];
 
-  yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
-  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
     yystate = yytable[yystate];
   else
-    yystate = yydefgoto[yyn - YYNTBASE];
+    yystate = yydefgoto[yyn - YYNTOKENS];
 
   goto yynewstate;
 
-yyerrlab:   /* here on detecting error */
 
-  if (! yyerrstatus)
-    /* If not already recovering from an error, report this error.  */
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
     {
       ++yynerrs;
-
-#ifdef YYERROR_VERBOSE
+#if YYERROR_VERBOSE
       yyn = yypact[yystate];
 
-      if (yyn > YYFLAG && yyn < YYLAST)
+      if (YYPACT_NINF < yyn && yyn < YYLAST)
 	{
-	  int size = 0;
-	  char *msg;
-	  int x, count;
+	  int yytype = YYTRANSLATE (yychar);
+	  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+	  YYSIZE_T yysize = yysize0;
+	  YYSIZE_T yysize1;
+	  int yysize_overflow = 0;
+	  char *yymsg = 0;
+#	  define YYERROR_VERBOSE_ARGS_MAXIMUM 5
+	  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+	  int yyx;
 
-	  count = 0;
-	  /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
-	  for (x = (yyn < 0 ? -yyn : 0);
-	       x < (sizeof(yytname) / sizeof(char *)); x++)
-	    if (yycheck[x + yyn] == x)
-	      size += strlen(yytname[x]) + 15, count++;
-	  msg = (char *) malloc(size + 15);
-	  if (msg != 0)
+#if 0
+	  /* This is so xgettext sees the translatable formats that are
+	     constructed on the fly.  */
+	  YY_("syntax error, unexpected %s");
+	  YY_("syntax error, unexpected %s, expecting %s");
+	  YY_("syntax error, unexpected %s, expecting %s or %s");
+	  YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+	  YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+#endif
+	  char *yyfmt;
+	  char const *yyf;
+	  static char const yyunexpected[] = "syntax error, unexpected %s";
+	  static char const yyexpecting[] = ", expecting %s";
+	  static char const yyor[] = " or %s";
+	  char yyformat[sizeof yyunexpected
+			+ sizeof yyexpecting - 1
+			+ ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+			   * (sizeof yyor - 1))];
+	  char const *yyprefix = yyexpecting;
+
+	  /* Start YYX at -YYN if negative to avoid negative indexes in
+	     YYCHECK.  */
+	  int yyxbegin = yyn < 0 ? -yyn : 0;
+
+	  /* Stay within bounds of both yycheck and yytname.  */
+	  int yychecklim = YYLAST - yyn;
+	  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+	  int yycount = 1;
+
+	  yyarg[0] = yytname[yytype];
+	  yyfmt = yystpcpy (yyformat, yyunexpected);
+
+	  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+	    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+	      {
+		if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+		  {
+		    yycount = 1;
+		    yysize = yysize0;
+		    yyformat[sizeof yyunexpected - 1] = '\0';
+		    break;
+		  }
+		yyarg[yycount++] = yytname[yyx];
+		yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+		yysize_overflow |= yysize1 < yysize;
+		yysize = yysize1;
+		yyfmt = yystpcpy (yyfmt, yyprefix);
+		yyprefix = yyor;
+	      }
+
+	  yyf = YY_(yyformat);
+	  yysize1 = yysize + yystrlen (yyf);
+	  yysize_overflow |= yysize1 < yysize;
+	  yysize = yysize1;
+
+	  if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM)
+	    yymsg = (char *) YYSTACK_ALLOC (yysize);
+	  if (yymsg)
 	    {
-	      strcpy(msg, "parse error");
-
-	      if (count < 5)
+	      /* Avoid sprintf, as that infringes on the user's name space.
+		 Don't have undefined behavior even if the translation
+		 produced a string with the wrong number of "%s"s.  */
+	      char *yyp = yymsg;
+	      int yyi = 0;
+	      while ((*yyp = *yyf))
 		{
-		  count = 0;
-		  for (x = (yyn < 0 ? -yyn : 0);
-		       x < (sizeof(yytname) / sizeof(char *)); x++)
-		    if (yycheck[x + yyn] == x)
-		      {
-			strcat(msg, count == 0 ? ", expecting `" : " or `");
-			strcat(msg, yytname[x]);
-			strcat(msg, "'");
-			count++;
-		      }
+		  if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+		    {
+		      yyp += yytnamerr (yyp, yyarg[yyi++]);
+		      yyf += 2;
+		    }
+		  else
+		    {
+		      yyp++;
+		      yyf++;
+		    }
 		}
-	      yyerror(msg);
-	      free(msg);
+	      yyerror (yymsg);
+	      YYSTACK_FREE (yymsg);
 	    }
 	  else
-	    yyerror ("parse error; also virtual memory exceeded");
+	    {
+	      yyerror (YY_("syntax error"));
+	      goto yyexhaustedlab;
+	    }
 	}
       else
 #endif /* YYERROR_VERBOSE */
-	yyerror("parse error");
+	yyerror (YY_("syntax error"));
     }
 
-  goto yyerrlab1;
-yyerrlab1:   /* here on error raised explicitly by an action */
+
 
   if (yyerrstatus == 3)
     {
-      /* if just tried and failed to reuse lookahead token after an error, discard it.  */
+      /* If just tried and failed to reuse look-ahead token after an
+	 error, discard it.  */
 
-      /* return failure if at end of input */
-      if (yychar == YYEOF)
+      if (yychar <= YYEOF)
+        {
+	  /* Return failure if at end of input.  */
+	  if (yychar == YYEOF)
+	    YYABORT;
+        }
+      else
+	{
+	  yydestruct ("Error: discarding", yytoken, &yylval);
+	  yychar = YYEMPTY;
+	}
+    }
+
+  /* Else will try to reuse look-ahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (0)
+     goto yyerrorlab;
+
+yyvsp -= yylen;
+  yyssp -= yylen;
+  yystate = *yyssp;
+  goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (yyn != YYPACT_NINF)
+	{
+	  yyn += YYTERROR;
+	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+	    {
+	      yyn = yytable[yyn];
+	      if (0 < yyn)
+		break;
+	    }
+	}
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
 	YYABORT;
 
-#if YYDEBUG != 0
-      if (yydebug)
-	fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
-#endif
 
-      yychar = YYEMPTY;
+      yydestruct ("Error: popping", yystos[yystate], yyvsp);
+      YYPOPSTACK;
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
     }
 
-  /* Else will try to reuse lookahead token
-     after shifting the error token.  */
-
-  yyerrstatus = 3;		/* Each real token shifted decrements this */
-
-  goto yyerrhandle;
-
-yyerrdefault:  /* current state does not do anything special for the error token. */
-
-#if 0
-  /* This is wrong; only states that explicitly want error tokens
-     should shift them.  */
-  yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
-  if (yyn) goto yydefault;
-#endif
-
-yyerrpop:   /* pop the current state because it cannot handle the error token */
-
-  if (yyssp == yyss) YYABORT;
-  yyvsp--;
-  yystate = *--yyssp;
-#ifdef YYLSP_NEEDED
-  yylsp--;
-#endif
-
-#if YYDEBUG != 0
-  if (yydebug)
-    {
-      short *ssp1 = yyss - 1;
-      fprintf (stderr, "Error: state stack now");
-      while (ssp1 != yyssp)
-	fprintf (stderr, " %d", *++ssp1);
-      fprintf (stderr, "\n");
-    }
-#endif
-
-yyerrhandle:
-
-  yyn = yypact[yystate];
-  if (yyn == YYFLAG)
-    goto yyerrdefault;
-
-  yyn += YYTERROR;
-  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
-    goto yyerrdefault;
-
-  yyn = yytable[yyn];
-  if (yyn < 0)
-    {
-      if (yyn == YYFLAG)
-	goto yyerrpop;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-  else if (yyn == 0)
-    goto yyerrpop;
-
   if (yyn == YYFINAL)
     YYACCEPT;
 
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Shifting error token, ");
-#endif
-
   *++yyvsp = yylval;
-#ifdef YYLSP_NEEDED
-  *++yylsp = yylloc;
-#endif
+
+
+  /* Shift the error token. */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
 
   yystate = yyn;
   goto yynewstate;
 
- yyacceptlab:
-  /* YYACCEPT comes here.  */
-  if (yyfree_stacks)
-    {
-      free (yyss);
-      free (yyvs);
-#ifdef YYLSP_NEEDED
-      free (yyls);
-#endif
-    }
-  return 0;
 
- yyabortlab:
-  /* YYABORT comes here.  */
-  if (yyfree_stacks)
-    {
-      free (yyss);
-      free (yyvs);
-#ifdef YYLSP_NEEDED
-      free (yyls);
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#ifndef yyoverflow
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (YY_("memory exhausted"));
+  yyresult = 2;
+  /* Fall through.  */
 #endif
+
+yyreturn:
+  if (yychar != YYEOF && yychar != YYEMPTY)
+     yydestruct ("Cleanup: discarding lookahead",
+		 yytoken, &yylval);
+  while (yyssp != yyss)
+    {
+      yydestruct ("Cleanup: popping",
+		  yystos[*yyssp], yyvsp);
+      YYPOPSTACK;
     }
-  return 1;
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+  return yyresult;
 }
-#line 3062 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+
+
+#line 3063 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
 
 
 // common code from the two 'RunVMAsmParser' functions
@@ -5268,3 +6225,4 @@
   GenerateError(errMsg);
   return 0;
 }
+
diff --git a/lib/AsmParser/llvmAsmParser.h.cvs b/lib/AsmParser/llvmAsmParser.h.cvs
index b320828..0c22eac 100644
--- a/lib/AsmParser/llvmAsmParser.h.cvs
+++ b/lib/AsmParser/llvmAsmParser.h.cvs
@@ -1,4 +1,314 @@
-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 {
+     ESINT64VAL = 258,
+     EUINT64VAL = 259,
+     ESAPINTVAL = 260,
+     EUAPINTVAL = 261,
+     LOCALVAL_ID = 262,
+     GLOBALVAL_ID = 263,
+     FPVAL = 264,
+     VOID = 265,
+     INTTYPE = 266,
+     FLOAT = 267,
+     DOUBLE = 268,
+     LABEL = 269,
+     TYPE = 270,
+     LOCALVAR = 271,
+     GLOBALVAR = 272,
+     LABELSTR = 273,
+     STRINGCONSTANT = 274,
+     ATSTRINGCONSTANT = 275,
+     PCTSTRINGCONSTANT = 276,
+     ZEROINITIALIZER = 277,
+     TRUETOK = 278,
+     FALSETOK = 279,
+     BEGINTOK = 280,
+     ENDTOK = 281,
+     DECLARE = 282,
+     DEFINE = 283,
+     GLOBAL = 284,
+     CONSTANT = 285,
+     SECTION = 286,
+     ALIAS = 287,
+     VOLATILE = 288,
+     THREAD_LOCAL = 289,
+     TO = 290,
+     DOTDOTDOT = 291,
+     NULL_TOK = 292,
+     UNDEF = 293,
+     INTERNAL = 294,
+     LINKONCE = 295,
+     WEAK = 296,
+     APPENDING = 297,
+     DLLIMPORT = 298,
+     DLLEXPORT = 299,
+     EXTERN_WEAK = 300,
+     OPAQUE = 301,
+     EXTERNAL = 302,
+     TARGET = 303,
+     TRIPLE = 304,
+     ALIGN = 305,
+     DEPLIBS = 306,
+     CALL = 307,
+     TAIL = 308,
+     ASM_TOK = 309,
+     MODULE = 310,
+     SIDEEFFECT = 311,
+     CC_TOK = 312,
+     CCC_TOK = 313,
+     FASTCC_TOK = 314,
+     COLDCC_TOK = 315,
+     X86_STDCALLCC_TOK = 316,
+     X86_FASTCALLCC_TOK = 317,
+     DATALAYOUT = 318,
+     RET = 319,
+     BR = 320,
+     SWITCH = 321,
+     INVOKE = 322,
+     UNWIND = 323,
+     UNREACHABLE = 324,
+     ADD = 325,
+     SUB = 326,
+     MUL = 327,
+     UDIV = 328,
+     SDIV = 329,
+     FDIV = 330,
+     UREM = 331,
+     SREM = 332,
+     FREM = 333,
+     AND = 334,
+     OR = 335,
+     XOR = 336,
+     SHL = 337,
+     LSHR = 338,
+     ASHR = 339,
+     ICMP = 340,
+     FCMP = 341,
+     EQ = 342,
+     NE = 343,
+     SLT = 344,
+     SGT = 345,
+     SLE = 346,
+     SGE = 347,
+     ULT = 348,
+     UGT = 349,
+     ULE = 350,
+     UGE = 351,
+     OEQ = 352,
+     ONE = 353,
+     OLT = 354,
+     OGT = 355,
+     OLE = 356,
+     OGE = 357,
+     ORD = 358,
+     UNO = 359,
+     UEQ = 360,
+     UNE = 361,
+     MALLOC = 362,
+     ALLOCA = 363,
+     FREE = 364,
+     LOAD = 365,
+     STORE = 366,
+     GETELEMENTPTR = 367,
+     TRUNC = 368,
+     ZEXT = 369,
+     SEXT = 370,
+     FPTRUNC = 371,
+     FPEXT = 372,
+     BITCAST = 373,
+     UITOFP = 374,
+     SITOFP = 375,
+     FPTOUI = 376,
+     FPTOSI = 377,
+     INTTOPTR = 378,
+     PTRTOINT = 379,
+     PHI_TOK = 380,
+     SELECT = 381,
+     VAARG = 382,
+     EXTRACTELEMENT = 383,
+     INSERTELEMENT = 384,
+     SHUFFLEVECTOR = 385,
+     NORETURN = 386,
+     INREG = 387,
+     SRET = 388,
+     NOUNWIND = 389,
+     DEFAULT = 390,
+     HIDDEN = 391,
+     PROTECTED = 392
+   };
+#endif
+/* Tokens.  */
+#define ESINT64VAL 258
+#define EUINT64VAL 259
+#define ESAPINTVAL 260
+#define EUAPINTVAL 261
+#define LOCALVAL_ID 262
+#define GLOBALVAL_ID 263
+#define FPVAL 264
+#define VOID 265
+#define INTTYPE 266
+#define FLOAT 267
+#define DOUBLE 268
+#define LABEL 269
+#define TYPE 270
+#define LOCALVAR 271
+#define GLOBALVAR 272
+#define LABELSTR 273
+#define STRINGCONSTANT 274
+#define ATSTRINGCONSTANT 275
+#define PCTSTRINGCONSTANT 276
+#define ZEROINITIALIZER 277
+#define TRUETOK 278
+#define FALSETOK 279
+#define BEGINTOK 280
+#define ENDTOK 281
+#define DECLARE 282
+#define DEFINE 283
+#define GLOBAL 284
+#define CONSTANT 285
+#define SECTION 286
+#define ALIAS 287
+#define VOLATILE 288
+#define THREAD_LOCAL 289
+#define TO 290
+#define DOTDOTDOT 291
+#define NULL_TOK 292
+#define UNDEF 293
+#define INTERNAL 294
+#define LINKONCE 295
+#define WEAK 296
+#define APPENDING 297
+#define DLLIMPORT 298
+#define DLLEXPORT 299
+#define EXTERN_WEAK 300
+#define OPAQUE 301
+#define EXTERNAL 302
+#define TARGET 303
+#define TRIPLE 304
+#define ALIGN 305
+#define DEPLIBS 306
+#define CALL 307
+#define TAIL 308
+#define ASM_TOK 309
+#define MODULE 310
+#define SIDEEFFECT 311
+#define CC_TOK 312
+#define CCC_TOK 313
+#define FASTCC_TOK 314
+#define COLDCC_TOK 315
+#define X86_STDCALLCC_TOK 316
+#define X86_FASTCALLCC_TOK 317
+#define DATALAYOUT 318
+#define RET 319
+#define BR 320
+#define SWITCH 321
+#define INVOKE 322
+#define UNWIND 323
+#define UNREACHABLE 324
+#define ADD 325
+#define SUB 326
+#define MUL 327
+#define UDIV 328
+#define SDIV 329
+#define FDIV 330
+#define UREM 331
+#define SREM 332
+#define FREM 333
+#define AND 334
+#define OR 335
+#define XOR 336
+#define SHL 337
+#define LSHR 338
+#define ASHR 339
+#define ICMP 340
+#define FCMP 341
+#define EQ 342
+#define NE 343
+#define SLT 344
+#define SGT 345
+#define SLE 346
+#define SGE 347
+#define ULT 348
+#define UGT 349
+#define ULE 350
+#define UGE 351
+#define OEQ 352
+#define ONE 353
+#define OLT 354
+#define OGT 355
+#define OLE 356
+#define OGE 357
+#define ORD 358
+#define UNO 359
+#define UEQ 360
+#define UNE 361
+#define MALLOC 362
+#define ALLOCA 363
+#define FREE 364
+#define LOAD 365
+#define STORE 366
+#define GETELEMENTPTR 367
+#define TRUNC 368
+#define ZEXT 369
+#define SEXT 370
+#define FPTRUNC 371
+#define FPEXT 372
+#define BITCAST 373
+#define UITOFP 374
+#define SITOFP 375
+#define FPTOUI 376
+#define FPTOSI 377
+#define INTTOPTR 378
+#define PTRTOINT 379
+#define PHI_TOK 380
+#define SELECT 381
+#define VAARG 382
+#define EXTRACTELEMENT 383
+#define INSERTELEMENT 384
+#define SHUFFLEVECTOR 385
+#define NORETURN 386
+#define INREG 387
+#define SRET 388
+#define NOUNWIND 389
+#define DEFAULT 390
+#define HIDDEN 391
+#define PROTECTED 392
+
+
+
+
+#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
+#line 955 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+typedef union YYSTYPE {
   llvm::Module                           *ModuleVal;
   llvm::Function                         *FunctionVal;
   llvm::BasicBlock                       *BasicBlockVal;
@@ -44,140 +354,14 @@
   llvm::ICmpInst::Predicate         IPredicate;
   llvm::FCmpInst::Predicate         FPredicate;
 } YYSTYPE;
-#define	ESINT64VAL	257
-#define	EUINT64VAL	258
-#define	ESAPINTVAL	259
-#define	EUAPINTVAL	260
-#define	LOCALVAL_ID	261
-#define	GLOBALVAL_ID	262
-#define	FPVAL	263
-#define	VOID	264
-#define	INTTYPE	265
-#define	FLOAT	266
-#define	DOUBLE	267
-#define	LABEL	268
-#define	TYPE	269
-#define	LOCALVAR	270
-#define	GLOBALVAR	271
-#define	LABELSTR	272
-#define	STRINGCONSTANT	273
-#define	ATSTRINGCONSTANT	274
-#define	ZEROINITIALIZER	275
-#define	TRUETOK	276
-#define	FALSETOK	277
-#define	BEGINTOK	278
-#define	ENDTOK	279
-#define	DECLARE	280
-#define	DEFINE	281
-#define	GLOBAL	282
-#define	CONSTANT	283
-#define	SECTION	284
-#define	ALIAS	285
-#define	VOLATILE	286
-#define	THREAD_LOCAL	287
-#define	TO	288
-#define	DOTDOTDOT	289
-#define	NULL_TOK	290
-#define	UNDEF	291
-#define	INTERNAL	292
-#define	LINKONCE	293
-#define	WEAK	294
-#define	APPENDING	295
-#define	DLLIMPORT	296
-#define	DLLEXPORT	297
-#define	EXTERN_WEAK	298
-#define	OPAQUE	299
-#define	EXTERNAL	300
-#define	TARGET	301
-#define	TRIPLE	302
-#define	ALIGN	303
-#define	DEPLIBS	304
-#define	CALL	305
-#define	TAIL	306
-#define	ASM_TOK	307
-#define	MODULE	308
-#define	SIDEEFFECT	309
-#define	CC_TOK	310
-#define	CCC_TOK	311
-#define	FASTCC_TOK	312
-#define	COLDCC_TOK	313
-#define	X86_STDCALLCC_TOK	314
-#define	X86_FASTCALLCC_TOK	315
-#define	DATALAYOUT	316
-#define	RET	317
-#define	BR	318
-#define	SWITCH	319
-#define	INVOKE	320
-#define	UNWIND	321
-#define	UNREACHABLE	322
-#define	ADD	323
-#define	SUB	324
-#define	MUL	325
-#define	UDIV	326
-#define	SDIV	327
-#define	FDIV	328
-#define	UREM	329
-#define	SREM	330
-#define	FREM	331
-#define	AND	332
-#define	OR	333
-#define	XOR	334
-#define	SHL	335
-#define	LSHR	336
-#define	ASHR	337
-#define	ICMP	338
-#define	FCMP	339
-#define	EQ	340
-#define	NE	341
-#define	SLT	342
-#define	SGT	343
-#define	SLE	344
-#define	SGE	345
-#define	ULT	346
-#define	UGT	347
-#define	ULE	348
-#define	UGE	349
-#define	OEQ	350
-#define	ONE	351
-#define	OLT	352
-#define	OGT	353
-#define	OLE	354
-#define	OGE	355
-#define	ORD	356
-#define	UNO	357
-#define	UEQ	358
-#define	UNE	359
-#define	MALLOC	360
-#define	ALLOCA	361
-#define	FREE	362
-#define	LOAD	363
-#define	STORE	364
-#define	GETELEMENTPTR	365
-#define	TRUNC	366
-#define	ZEXT	367
-#define	SEXT	368
-#define	FPTRUNC	369
-#define	FPEXT	370
-#define	BITCAST	371
-#define	UITOFP	372
-#define	SITOFP	373
-#define	FPTOUI	374
-#define	FPTOSI	375
-#define	INTTOPTR	376
-#define	PTRTOINT	377
-#define	PHI_TOK	378
-#define	SELECT	379
-#define	VAARG	380
-#define	EXTRACTELEMENT	381
-#define	INSERTELEMENT	382
-#define	SHUFFLEVECTOR	383
-#define	NORETURN	384
-#define	INREG	385
-#define	SRET	386
-#define	NOUNWIND	387
-#define	DEFAULT	388
-#define	HIDDEN	389
-#define	PROTECTED	390
-
+/* Line 1447 of yacc.c.  */
+#line 359 "llvmAsmParser.tab.h"
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
 
 extern YYSTYPE llvmAsmlval;
+
+
+
diff --git a/lib/AsmParser/llvmAsmParser.y.cvs b/lib/AsmParser/llvmAsmParser.y.cvs
index d8e151c..30a1fe6 100644
--- a/lib/AsmParser/llvmAsmParser.y.cvs
+++ b/lib/AsmParser/llvmAsmParser.y.cvs
@@ -1051,7 +1051,8 @@
 %token <PrimType> FLOAT DOUBLE LABEL
 %token TYPE
 
-%token<StrVal> LOCALVAR GLOBALVAR LABELSTR STRINGCONSTANT ATSTRINGCONSTANT
+%token<StrVal> LOCALVAR GLOBALVAR LABELSTR 
+%token<StrVal> STRINGCONSTANT ATSTRINGCONSTANT PCTSTRINGCONSTANT
 %type <StrVal> LocalName OptLocalName OptLocalAssign
 %type <StrVal> GlobalName OptGlobalAssign GlobalAssign
 %type <UIntVal> OptAlign OptCAlign
@@ -1138,7 +1139,7 @@
 IntType :  INTTYPE;
 FPType   : FLOAT | DOUBLE;
 
-LocalName : LOCALVAR | STRINGCONSTANT;
+LocalName : LOCALVAR | STRINGCONSTANT | PCTSTRINGCONSTANT
 OptLocalName : LocalName | /*empty*/ { $$ = 0; };
 
 /// OptLocalAssign - Value producing statements have an optional assignment
