mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41774 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			5378 lines
		
	
	
		
			203 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			5378 lines
		
	
	
		
			203 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
 | ||
| /*  A Bison parser, made from /Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y
 | ||
|     by GNU Bison version 1.28  */
 | ||
| 
 | ||
| #define YYBISON 1  /* Identify Bison output.  */
 | ||
| 
 | ||
| #define yyparse llvmAsmparse
 | ||
| #define yylex llvmAsmlex
 | ||
| #define yyerror llvmAsmerror
 | ||
| #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	X86_FP80	268
 | ||
| #define	FP128	269
 | ||
| #define	PPC_FP128	270
 | ||
| #define	LABEL	271
 | ||
| #define	TYPE	272
 | ||
| #define	LOCALVAR	273
 | ||
| #define	GLOBALVAR	274
 | ||
| #define	LABELSTR	275
 | ||
| #define	STRINGCONSTANT	276
 | ||
| #define	ATSTRINGCONSTANT	277
 | ||
| #define	PCTSTRINGCONSTANT	278
 | ||
| #define	ZEROINITIALIZER	279
 | ||
| #define	TRUETOK	280
 | ||
| #define	FALSETOK	281
 | ||
| #define	BEGINTOK	282
 | ||
| #define	ENDTOK	283
 | ||
| #define	DECLARE	284
 | ||
| #define	DEFINE	285
 | ||
| #define	GLOBAL	286
 | ||
| #define	CONSTANT	287
 | ||
| #define	SECTION	288
 | ||
| #define	ALIAS	289
 | ||
| #define	VOLATILE	290
 | ||
| #define	THREAD_LOCAL	291
 | ||
| #define	TO	292
 | ||
| #define	DOTDOTDOT	293
 | ||
| #define	NULL_TOK	294
 | ||
| #define	UNDEF	295
 | ||
| #define	INTERNAL	296
 | ||
| #define	LINKONCE	297
 | ||
| #define	WEAK	298
 | ||
| #define	APPENDING	299
 | ||
| #define	DLLIMPORT	300
 | ||
| #define	DLLEXPORT	301
 | ||
| #define	EXTERN_WEAK	302
 | ||
| #define	OPAQUE	303
 | ||
| #define	EXTERNAL	304
 | ||
| #define	TARGET	305
 | ||
| #define	TRIPLE	306
 | ||
| #define	ALIGN	307
 | ||
| #define	DEPLIBS	308
 | ||
| #define	CALL	309
 | ||
| #define	TAIL	310
 | ||
| #define	ASM_TOK	311
 | ||
| #define	MODULE	312
 | ||
| #define	SIDEEFFECT	313
 | ||
| #define	CC_TOK	314
 | ||
| #define	CCC_TOK	315
 | ||
| #define	FASTCC_TOK	316
 | ||
| #define	COLDCC_TOK	317
 | ||
| #define	X86_STDCALLCC_TOK	318
 | ||
| #define	X86_FASTCALLCC_TOK	319
 | ||
| #define	DATALAYOUT	320
 | ||
| #define	RET	321
 | ||
| #define	BR	322
 | ||
| #define	SWITCH	323
 | ||
| #define	INVOKE	324
 | ||
| #define	UNWIND	325
 | ||
| #define	UNREACHABLE	326
 | ||
| #define	ADD	327
 | ||
| #define	SUB	328
 | ||
| #define	MUL	329
 | ||
| #define	UDIV	330
 | ||
| #define	SDIV	331
 | ||
| #define	FDIV	332
 | ||
| #define	UREM	333
 | ||
| #define	SREM	334
 | ||
| #define	FREM	335
 | ||
| #define	AND	336
 | ||
| #define	OR	337
 | ||
| #define	XOR	338
 | ||
| #define	SHL	339
 | ||
| #define	LSHR	340
 | ||
| #define	ASHR	341
 | ||
| #define	ICMP	342
 | ||
| #define	FCMP	343
 | ||
| #define	EQ	344
 | ||
| #define	NE	345
 | ||
| #define	SLT	346
 | ||
| #define	SGT	347
 | ||
| #define	SLE	348
 | ||
| #define	SGE	349
 | ||
| #define	ULT	350
 | ||
| #define	UGT	351
 | ||
| #define	ULE	352
 | ||
| #define	UGE	353
 | ||
| #define	OEQ	354
 | ||
| #define	ONE	355
 | ||
| #define	OLT	356
 | ||
| #define	OGT	357
 | ||
| #define	OLE	358
 | ||
| #define	OGE	359
 | ||
| #define	ORD	360
 | ||
| #define	UNO	361
 | ||
| #define	UEQ	362
 | ||
| #define	UNE	363
 | ||
| #define	MALLOC	364
 | ||
| #define	ALLOCA	365
 | ||
| #define	FREE	366
 | ||
| #define	LOAD	367
 | ||
| #define	STORE	368
 | ||
| #define	GETELEMENTPTR	369
 | ||
| #define	TRUNC	370
 | ||
| #define	ZEXT	371
 | ||
| #define	SEXT	372
 | ||
| #define	FPTRUNC	373
 | ||
| #define	FPEXT	374
 | ||
| #define	BITCAST	375
 | ||
| #define	UITOFP	376
 | ||
| #define	SITOFP	377
 | ||
| #define	FPTOUI	378
 | ||
| #define	FPTOSI	379
 | ||
| #define	INTTOPTR	380
 | ||
| #define	PTRTOINT	381
 | ||
| #define	PHI_TOK	382
 | ||
| #define	SELECT	383
 | ||
| #define	VAARG	384
 | ||
| #define	EXTRACTELEMENT	385
 | ||
| #define	INSERTELEMENT	386
 | ||
| #define	SHUFFLEVECTOR	387
 | ||
| #define	SIGNEXT	388
 | ||
| #define	ZEROEXT	389
 | ||
| #define	NORETURN	390
 | ||
| #define	INREG	391
 | ||
| #define	SRET	392
 | ||
| #define	NOUNWIND	393
 | ||
| #define	NOALIAS	394
 | ||
| #define	BYVAL	395
 | ||
| #define	NEST	396
 | ||
| #define	DEFAULT	397
 | ||
| #define	HIDDEN	398
 | ||
| #define	PROTECTED	399
 | ||
| 
 | ||
| #line 14 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| 
 | ||
| #include "ParserInternals.h"
 | ||
| #include "llvm/CallingConv.h"
 | ||
| #include "llvm/InlineAsm.h"
 | ||
| #include "llvm/Instructions.h"
 | ||
| #include "llvm/Module.h"
 | ||
| #include "llvm/ValueSymbolTable.h"
 | ||
| #include "llvm/AutoUpgrade.h"
 | ||
| #include "llvm/Support/GetElementPtrTypeIterator.h"
 | ||
| #include "llvm/Support/CommandLine.h"
 | ||
| #include "llvm/ADT/SmallVector.h"
 | ||
| #include "llvm/ADT/STLExtras.h"
 | ||
| #include "llvm/Support/MathExtras.h"
 | ||
| #include "llvm/Support/Streams.h"
 | ||
| #include <algorithm>
 | ||
| #include <list>
 | ||
| #include <map>
 | ||
| #include <utility>
 | ||
| #ifndef NDEBUG
 | ||
| #define YYDEBUG 1
 | ||
| #endif
 | ||
| 
 | ||
| // The following is a gross hack. In order to rid the libAsmParser library of
 | ||
| // exceptions, we have to have a way of getting the yyparse function to go into
 | ||
| // an error situation. So, whenever we want an error to occur, the GenerateError
 | ||
| // function (see bottom of file) sets TriggerError. Then, at the end of each 
 | ||
| // production in the grammer we use CHECK_FOR_ERROR which will invoke YYERROR 
 | ||
| // (a goto) to put YACC in error state. Furthermore, several calls to 
 | ||
| // GenerateError are made from inside productions and they must simulate the
 | ||
| // previous exception behavior by exiting the production immediately. We have
 | ||
| // replaced these with the GEN_ERROR macro which calls GeneratError and then
 | ||
| // immediately invokes YYERROR. This would be so much cleaner if it was a 
 | ||
| // recursive descent parser.
 | ||
| static bool TriggerError = false;
 | ||
| #define CHECK_FOR_ERROR { if (TriggerError) { TriggerError = false; YYABORT; } }
 | ||
| #define GEN_ERROR(msg) { GenerateError(msg); YYERROR; }
 | ||
| 
 | ||
| int yyerror(const char *ErrorMsg); // Forward declarations to prevent "implicit
 | ||
| int yylex();                       // declaration" of xxx warnings.
 | ||
| int yyparse();
 | ||
| 
 | ||
| namespace llvm {
 | ||
|   std::string CurFilename;
 | ||
| #if YYDEBUG
 | ||
| static cl::opt<bool>
 | ||
| Debug("debug-yacc", cl::desc("Print yacc debug state changes"), 
 | ||
|       cl::Hidden, cl::init(false));
 | ||
| #endif
 | ||
| }
 | ||
| using namespace llvm;
 | ||
| 
 | ||
| static Module *ParserResult;
 | ||
| 
 | ||
| // DEBUG_UPREFS - Define this symbol if you want to enable debugging output
 | ||
| // relating to upreferences in the input stream.
 | ||
| //
 | ||
| //#define DEBUG_UPREFS 1
 | ||
| #ifdef DEBUG_UPREFS
 | ||
| #define UR_OUT(X) cerr << X
 | ||
| #else
 | ||
| #define UR_OUT(X)
 | ||
| #endif
 | ||
| 
 | ||
| #define YYERROR_VERBOSE 1
 | ||
| 
 | ||
| static GlobalVariable *CurGV;
 | ||
| 
 | ||
| 
 | ||
| // This contains info used when building the body of a function.  It is
 | ||
| // destroyed when the function is completed.
 | ||
| //
 | ||
| typedef std::vector<Value *> ValueList;           // Numbered defs
 | ||
| 
 | ||
| static void 
 | ||
| ResolveDefinitions(ValueList &LateResolvers, ValueList *FutureLateResolvers=0);
 | ||
| 
 | ||
| static struct PerModuleInfo {
 | ||
|   Module *CurrentModule;
 | ||
|   ValueList Values; // Module level numbered definitions
 | ||
|   ValueList LateResolveValues;
 | ||
|   std::vector<PATypeHolder>    Types;
 | ||
|   std::map<ValID, PATypeHolder> LateResolveTypes;
 | ||
| 
 | ||
|   /// PlaceHolderInfo - When temporary placeholder objects are created, remember
 | ||
|   /// how they were referenced and on which line of the input they came from so
 | ||
|   /// that we can resolve them later and print error messages as appropriate.
 | ||
|   std::map<Value*, std::pair<ValID, int> > PlaceHolderInfo;
 | ||
| 
 | ||
|   // GlobalRefs - This maintains a mapping between <Type, ValID>'s and forward
 | ||
|   // references to global values.  Global values may be referenced before they
 | ||
|   // are defined, and if so, the temporary object that they represent is held
 | ||
|   // here.  This is used for forward references of GlobalValues.
 | ||
|   //
 | ||
|   typedef std::map<std::pair<const PointerType *,
 | ||
|                              ValID>, GlobalValue*> GlobalRefsType;
 | ||
|   GlobalRefsType GlobalRefs;
 | ||
| 
 | ||
|   void ModuleDone() {
 | ||
|     // If we could not resolve some functions at function compilation time
 | ||
|     // (calls to functions before they are defined), resolve them now...  Types
 | ||
|     // are resolved when the constant pool has been completely parsed.
 | ||
|     //
 | ||
|     ResolveDefinitions(LateResolveValues);
 | ||
|     if (TriggerError)
 | ||
|       return;
 | ||
| 
 | ||
|     // Check to make sure that all global value forward references have been
 | ||
|     // resolved!
 | ||
|     //
 | ||
|     if (!GlobalRefs.empty()) {
 | ||
|       std::string UndefinedReferences = "Unresolved global references exist:\n";
 | ||
| 
 | ||
|       for (GlobalRefsType::iterator I = GlobalRefs.begin(), E =GlobalRefs.end();
 | ||
|            I != E; ++I) {
 | ||
|         UndefinedReferences += "  " + I->first.first->getDescription() + " " +
 | ||
|                                I->first.second.getName() + "\n";
 | ||
|       }
 | ||
|       GenerateError(UndefinedReferences);
 | ||
|       return;
 | ||
|     }
 | ||
| 
 | ||
|     // Look for intrinsic functions and CallInst that need to be upgraded
 | ||
|     for (Module::iterator FI = CurrentModule->begin(),
 | ||
|          FE = CurrentModule->end(); FI != FE; )
 | ||
|       UpgradeCallsToIntrinsic(FI++); // must be post-increment, as we remove
 | ||
| 
 | ||
|     Values.clear();         // Clear out function local definitions
 | ||
|     Types.clear();
 | ||
|     CurrentModule = 0;
 | ||
|   }
 | ||
| 
 | ||
|   // GetForwardRefForGlobal - Check to see if there is a forward reference
 | ||
|   // for this global.  If so, remove it from the GlobalRefs map and return it.
 | ||
|   // If not, just return null.
 | ||
|   GlobalValue *GetForwardRefForGlobal(const PointerType *PTy, ValID ID) {
 | ||
|     // Check to see if there is a forward reference to this global variable...
 | ||
|     // if there is, eliminate it and patch the reference to use the new def'n.
 | ||
|     GlobalRefsType::iterator I = GlobalRefs.find(std::make_pair(PTy, ID));
 | ||
|     GlobalValue *Ret = 0;
 | ||
|     if (I != GlobalRefs.end()) {
 | ||
|       Ret = I->second;
 | ||
|       GlobalRefs.erase(I);
 | ||
|     }
 | ||
|     return Ret;
 | ||
|   }
 | ||
| 
 | ||
|   bool TypeIsUnresolved(PATypeHolder* PATy) {
 | ||
|     // If it isn't abstract, its resolved
 | ||
|     const Type* Ty = PATy->get();
 | ||
|     if (!Ty->isAbstract())
 | ||
|       return false;
 | ||
|     // Traverse the type looking for abstract types. If it isn't abstract then
 | ||
|     // we don't need to traverse that leg of the type. 
 | ||
|     std::vector<const Type*> WorkList, SeenList;
 | ||
|     WorkList.push_back(Ty);
 | ||
|     while (!WorkList.empty()) {
 | ||
|       const Type* Ty = WorkList.back();
 | ||
|       SeenList.push_back(Ty);
 | ||
|       WorkList.pop_back();
 | ||
|       if (const OpaqueType* OpTy = dyn_cast<OpaqueType>(Ty)) {
 | ||
|         // Check to see if this is an unresolved type
 | ||
|         std::map<ValID, PATypeHolder>::iterator I = LateResolveTypes.begin();
 | ||
|         std::map<ValID, PATypeHolder>::iterator E = LateResolveTypes.end();
 | ||
|         for ( ; I != E; ++I) {
 | ||
|           if (I->second.get() == OpTy)
 | ||
|             return true;
 | ||
|         }
 | ||
|       } else if (const SequentialType* SeqTy = dyn_cast<SequentialType>(Ty)) {
 | ||
|         const Type* TheTy = SeqTy->getElementType();
 | ||
|         if (TheTy->isAbstract() && TheTy != Ty) {
 | ||
|           std::vector<const Type*>::iterator I = SeenList.begin(), 
 | ||
|                                              E = SeenList.end();
 | ||
|           for ( ; I != E; ++I)
 | ||
|             if (*I == TheTy)
 | ||
|               break;
 | ||
|           if (I == E)
 | ||
|             WorkList.push_back(TheTy);
 | ||
|         }
 | ||
|       } else if (const StructType* StrTy = dyn_cast<StructType>(Ty)) {
 | ||
|         for (unsigned i = 0; i < StrTy->getNumElements(); ++i) {
 | ||
|           const Type* TheTy = StrTy->getElementType(i);
 | ||
|           if (TheTy->isAbstract() && TheTy != Ty) {
 | ||
|             std::vector<const Type*>::iterator I = SeenList.begin(), 
 | ||
|                                                E = SeenList.end();
 | ||
|             for ( ; I != E; ++I)
 | ||
|               if (*I == TheTy)
 | ||
|                 break;
 | ||
|             if (I == E)
 | ||
|               WorkList.push_back(TheTy);
 | ||
|           }
 | ||
|         }
 | ||
|       }
 | ||
|     }
 | ||
|     return false;
 | ||
|   }
 | ||
| } CurModule;
 | ||
| 
 | ||
| static struct PerFunctionInfo {
 | ||
|   Function *CurrentFunction;     // Pointer to current function being created
 | ||
| 
 | ||
|   ValueList Values; // Keep track of #'d definitions
 | ||
|   unsigned NextValNum;
 | ||
|   ValueList LateResolveValues;
 | ||
|   bool isDeclare;                   // Is this function a forward declararation?
 | ||
|   GlobalValue::LinkageTypes Linkage; // Linkage for forward declaration.
 | ||
|   GlobalValue::VisibilityTypes Visibility;
 | ||
| 
 | ||
|   /// BBForwardRefs - When we see forward references to basic blocks, keep
 | ||
|   /// track of them here.
 | ||
|   std::map<ValID, BasicBlock*> BBForwardRefs;
 | ||
| 
 | ||
|   inline PerFunctionInfo() {
 | ||
|     CurrentFunction = 0;
 | ||
|     isDeclare = false;
 | ||
|     Linkage = GlobalValue::ExternalLinkage;
 | ||
|     Visibility = GlobalValue::DefaultVisibility;
 | ||
|   }
 | ||
| 
 | ||
|   inline void FunctionStart(Function *M) {
 | ||
|     CurrentFunction = M;
 | ||
|     NextValNum = 0;
 | ||
|   }
 | ||
| 
 | ||
|   void FunctionDone() {
 | ||
|     // Any forward referenced blocks left?
 | ||
|     if (!BBForwardRefs.empty()) {
 | ||
|       GenerateError("Undefined reference to label " +
 | ||
|                      BBForwardRefs.begin()->second->getName());
 | ||
|       return;
 | ||
|     }
 | ||
| 
 | ||
|     // Resolve all forward references now.
 | ||
|     ResolveDefinitions(LateResolveValues, &CurModule.LateResolveValues);
 | ||
| 
 | ||
|     Values.clear();         // Clear out function local definitions
 | ||
|     BBForwardRefs.clear();
 | ||
|     CurrentFunction = 0;
 | ||
|     isDeclare = false;
 | ||
|     Linkage = GlobalValue::ExternalLinkage;
 | ||
|     Visibility = GlobalValue::DefaultVisibility;
 | ||
|   }
 | ||
| } CurFun;  // Info for the current function...
 | ||
| 
 | ||
| static bool inFunctionScope() { return CurFun.CurrentFunction != 0; }
 | ||
| 
 | ||
| 
 | ||
| //===----------------------------------------------------------------------===//
 | ||
| //               Code to handle definitions of all the types
 | ||
| //===----------------------------------------------------------------------===//
 | ||
| 
 | ||
| static void InsertValue(Value *V, ValueList &ValueTab = CurFun.Values) {
 | ||
|   // Things that have names or are void typed don't get slot numbers
 | ||
|   if (V->hasName() || (V->getType() == Type::VoidTy))
 | ||
|     return;
 | ||
| 
 | ||
|   // In the case of function values, we have to allow for the forward reference
 | ||
|   // of basic blocks, which are included in the numbering. Consequently, we keep
 | ||
|   // track of the next insertion location with NextValNum. When a BB gets 
 | ||
|   // inserted, it could change the size of the CurFun.Values vector.
 | ||
|   if (&ValueTab == &CurFun.Values) {
 | ||
|     if (ValueTab.size() <= CurFun.NextValNum)
 | ||
|       ValueTab.resize(CurFun.NextValNum+1);
 | ||
|     ValueTab[CurFun.NextValNum++] = V;
 | ||
|     return;
 | ||
|   } 
 | ||
|   // For all other lists, its okay to just tack it on the back of the vector.
 | ||
|   ValueTab.push_back(V);
 | ||
| }
 | ||
| 
 | ||
| static const Type *getTypeVal(const ValID &D, bool DoNotImprovise = false) {
 | ||
|   switch (D.Type) {
 | ||
|   case ValID::LocalID:               // Is it a numbered definition?
 | ||
|     // Module constants occupy the lowest numbered slots...
 | ||
|     if (D.Num < CurModule.Types.size())
 | ||
|       return CurModule.Types[D.Num];
 | ||
|     break;
 | ||
|   case ValID::LocalName:                 // Is it a named definition?
 | ||
|     if (const Type *N = CurModule.CurrentModule->getTypeByName(D.getName())) {
 | ||
|       D.destroy();  // Free old strdup'd memory...
 | ||
|       return N;
 | ||
|     }
 | ||
|     break;
 | ||
|   default:
 | ||
|     GenerateError("Internal parser error: Invalid symbol type reference");
 | ||
|     return 0;
 | ||
|   }
 | ||
| 
 | ||
|   // If we reached here, we referenced either a symbol that we don't know about
 | ||
|   // or an id number that hasn't been read yet.  We may be referencing something
 | ||
|   // forward, so just create an entry to be resolved later and get to it...
 | ||
|   //
 | ||
|   if (DoNotImprovise) return 0;  // Do we just want a null to be returned?
 | ||
| 
 | ||
| 
 | ||
|   if (inFunctionScope()) {
 | ||
|     if (D.Type == ValID::LocalName) {
 | ||
|       GenerateError("Reference to an undefined type: '" + D.getName() + "'");
 | ||
|       return 0;
 | ||
|     } else {
 | ||
|       GenerateError("Reference to an undefined type: #" + utostr(D.Num));
 | ||
|       return 0;
 | ||
|     }
 | ||
|   }
 | ||
| 
 | ||
|   std::map<ValID, PATypeHolder>::iterator I =CurModule.LateResolveTypes.find(D);
 | ||
|   if (I != CurModule.LateResolveTypes.end())
 | ||
|     return I->second;
 | ||
| 
 | ||
|   Type *Typ = OpaqueType::get();
 | ||
|   CurModule.LateResolveTypes.insert(std::make_pair(D, Typ));
 | ||
|   return Typ;
 | ||
|  }
 | ||
| 
 | ||
| // getExistingVal - Look up the value specified by the provided type and
 | ||
| // the provided ValID.  If the value exists and has already been defined, return
 | ||
| // it.  Otherwise return null.
 | ||
| //
 | ||
| static Value *getExistingVal(const Type *Ty, const ValID &D) {
 | ||
|   if (isa<FunctionType>(Ty)) {
 | ||
|     GenerateError("Functions are not values and "
 | ||
|                    "must be referenced as pointers");
 | ||
|     return 0;
 | ||
|   }
 | ||
| 
 | ||
|   switch (D.Type) {
 | ||
|   case ValID::LocalID: {                 // Is it a numbered definition?
 | ||
|     // Check that the number is within bounds.
 | ||
|     if (D.Num >= CurFun.Values.size()) 
 | ||
|       return 0;
 | ||
|     Value *Result = CurFun.Values[D.Num];
 | ||
|     if (Ty != Result->getType()) {
 | ||
|       GenerateError("Numbered value (%" + utostr(D.Num) + ") of type '" +
 | ||
|                     Result->getType()->getDescription() + "' does not match " 
 | ||
|                     "expected type, '" + Ty->getDescription() + "'");
 | ||
|       return 0;
 | ||
|     }
 | ||
|     return Result;
 | ||
|   }
 | ||
|   case ValID::GlobalID: {                 // Is it a numbered definition?
 | ||
|     if (D.Num >= CurModule.Values.size()) 
 | ||
|       return 0;
 | ||
|     Value *Result = CurModule.Values[D.Num];
 | ||
|     if (Ty != Result->getType()) {
 | ||
|       GenerateError("Numbered value (@" + utostr(D.Num) + ") of type '" +
 | ||
|                     Result->getType()->getDescription() + "' does not match " 
 | ||
|                     "expected type, '" + Ty->getDescription() + "'");
 | ||
|       return 0;
 | ||
|     }
 | ||
|     return Result;
 | ||
|   }
 | ||
|     
 | ||
|   case ValID::LocalName: {                // Is it a named definition?
 | ||
|     if (!inFunctionScope()) 
 | ||
|       return 0;
 | ||
|     ValueSymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable();
 | ||
|     Value *N = SymTab.lookup(D.getName());
 | ||
|     if (N == 0) 
 | ||
|       return 0;
 | ||
|     if (N->getType() != Ty)
 | ||
|       return 0;
 | ||
|     
 | ||
|     D.destroy();  // Free old strdup'd memory...
 | ||
|     return N;
 | ||
|   }
 | ||
|   case ValID::GlobalName: {                // Is it a named definition?
 | ||
|     ValueSymbolTable &SymTab = CurModule.CurrentModule->getValueSymbolTable();
 | ||
|     Value *N = SymTab.lookup(D.getName());
 | ||
|     if (N == 0) 
 | ||
|       return 0;
 | ||
|     if (N->getType() != Ty)
 | ||
|       return 0;
 | ||
| 
 | ||
|     D.destroy();  // Free old strdup'd memory...
 | ||
|     return N;
 | ||
|   }
 | ||
| 
 | ||
|   // Check to make sure that "Ty" is an integral type, and that our
 | ||
|   // value will fit into the specified type...
 | ||
|   case ValID::ConstSIntVal:    // Is it a constant pool reference??
 | ||
|     if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
 | ||
|       GenerateError("Signed integral constant '" +
 | ||
|                      itostr(D.ConstPool64) + "' is invalid for type '" +
 | ||
|                      Ty->getDescription() + "'");
 | ||
|       return 0;
 | ||
|     }
 | ||
|     return ConstantInt::get(Ty, D.ConstPool64, true);
 | ||
| 
 | ||
|   case ValID::ConstUIntVal:     // Is it an unsigned const pool reference?
 | ||
|     if (!ConstantInt::isValueValidForType(Ty, D.UConstPool64)) {
 | ||
|       if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
 | ||
|         GenerateError("Integral constant '" + utostr(D.UConstPool64) +
 | ||
|                        "' is invalid or out of range");
 | ||
|         return 0;
 | ||
|       } else {     // This is really a signed reference.  Transmogrify.
 | ||
|         return ConstantInt::get(Ty, D.ConstPool64, true);
 | ||
|       }
 | ||
|     } else {
 | ||
|       return ConstantInt::get(Ty, D.UConstPool64);
 | ||
|     }
 | ||
| 
 | ||
|   case ValID::ConstFPVal:        // Is it a floating point const pool reference?
 | ||
|     if (!ConstantFP::isValueValidForType(Ty, *D.ConstPoolFP)) {
 | ||
|       GenerateError("FP constant invalid for type");
 | ||
|       return 0;
 | ||
|     }
 | ||
|     // Lexer has no type info, so builds all FP constants as double.
 | ||
|     // Fix this here.
 | ||
|     if (Ty==Type::FloatTy)
 | ||
|       D.ConstPoolFP->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven);
 | ||
|     return ConstantFP::get(Ty, *D.ConstPoolFP);
 | ||
| 
 | ||
|   case ValID::ConstNullVal:      // Is it a null value?
 | ||
|     if (!isa<PointerType>(Ty)) {
 | ||
|       GenerateError("Cannot create a a non pointer null");
 | ||
|       return 0;
 | ||
|     }
 | ||
|     return ConstantPointerNull::get(cast<PointerType>(Ty));
 | ||
| 
 | ||
|   case ValID::ConstUndefVal:      // Is it an undef value?
 | ||
|     return UndefValue::get(Ty);
 | ||
| 
 | ||
|   case ValID::ConstZeroVal:      // Is it a zero value?
 | ||
|     return Constant::getNullValue(Ty);
 | ||
|     
 | ||
|   case ValID::ConstantVal:       // Fully resolved constant?
 | ||
|     if (D.ConstantValue->getType() != Ty) {
 | ||
|       GenerateError("Constant expression type different from required type");
 | ||
|       return 0;
 | ||
|     }
 | ||
|     return D.ConstantValue;
 | ||
| 
 | ||
|   case ValID::InlineAsmVal: {    // Inline asm expression
 | ||
|     const PointerType *PTy = dyn_cast<PointerType>(Ty);
 | ||
|     const FunctionType *FTy =
 | ||
|       PTy ? dyn_cast<FunctionType>(PTy->getElementType()) : 0;
 | ||
|     if (!FTy || !InlineAsm::Verify(FTy, D.IAD->Constraints)) {
 | ||
|       GenerateError("Invalid type for asm constraint string");
 | ||
|       return 0;
 | ||
|     }
 | ||
|     InlineAsm *IA = InlineAsm::get(FTy, D.IAD->AsmString, D.IAD->Constraints,
 | ||
|                                    D.IAD->HasSideEffects);
 | ||
|     D.destroy();   // Free InlineAsmDescriptor.
 | ||
|     return IA;
 | ||
|   }
 | ||
|   default:
 | ||
|     assert(0 && "Unhandled case!");
 | ||
|     return 0;
 | ||
|   }   // End of switch
 | ||
| 
 | ||
|   assert(0 && "Unhandled case!");
 | ||
|   return 0;
 | ||
| }
 | ||
| 
 | ||
| // getVal - This function is identical to getExistingVal, except that if a
 | ||
| // value is not already defined, it "improvises" by creating a placeholder var
 | ||
| // that looks and acts just like the requested variable.  When the value is
 | ||
| // defined later, all uses of the placeholder variable are replaced with the
 | ||
| // real thing.
 | ||
| //
 | ||
| static Value *getVal(const Type *Ty, const ValID &ID) {
 | ||
|   if (Ty == Type::LabelTy) {
 | ||
|     GenerateError("Cannot use a basic block here");
 | ||
|     return 0;
 | ||
|   }
 | ||
| 
 | ||
|   // See if the value has already been defined.
 | ||
|   Value *V = getExistingVal(Ty, ID);
 | ||
|   if (V) return V;
 | ||
|   if (TriggerError) return 0;
 | ||
| 
 | ||
|   if (!Ty->isFirstClassType() && !isa<OpaqueType>(Ty)) {
 | ||
|     GenerateError("Invalid use of a composite type");
 | ||
|     return 0;
 | ||
|   }
 | ||
| 
 | ||
|   // If we reached here, we referenced either a symbol that we don't know about
 | ||
|   // or an id number that hasn't been read yet.  We may be referencing something
 | ||
|   // forward, so just create an entry to be resolved later and get to it...
 | ||
|   //
 | ||
|   switch (ID.Type) {
 | ||
|   case ValID::GlobalName:
 | ||
|   case ValID::GlobalID: {
 | ||
|    const PointerType *PTy = dyn_cast<PointerType>(Ty);
 | ||
|    if (!PTy) {
 | ||
|      GenerateError("Invalid type for reference to global" );
 | ||
|      return 0;
 | ||
|    }
 | ||
|    const Type* ElTy = PTy->getElementType();
 | ||
|    if (const FunctionType *FTy = dyn_cast<FunctionType>(ElTy))
 | ||
|      V = new Function(FTy, GlobalValue::ExternalLinkage);
 | ||
|    else
 | ||
|      V = new GlobalVariable(ElTy, false, GlobalValue::ExternalLinkage);
 | ||
|    break;
 | ||
|   }
 | ||
|   default:
 | ||
|    V = new Argument(Ty);
 | ||
|   }
 | ||
|   
 | ||
|   // Remember where this forward reference came from.  FIXME, shouldn't we try
 | ||
|   // to recycle these things??
 | ||
|   CurModule.PlaceHolderInfo.insert(std::make_pair(V, std::make_pair(ID,
 | ||
|                                                                llvmAsmlineno)));
 | ||
| 
 | ||
|   if (inFunctionScope())
 | ||
|     InsertValue(V, CurFun.LateResolveValues);
 | ||
|   else
 | ||
|     InsertValue(V, CurModule.LateResolveValues);
 | ||
|   return V;
 | ||
| }
 | ||
| 
 | ||
| /// defineBBVal - This is a definition of a new basic block with the specified
 | ||
| /// identifier which must be the same as CurFun.NextValNum, if its numeric.
 | ||
| static BasicBlock *defineBBVal(const ValID &ID) {
 | ||
|   assert(inFunctionScope() && "Can't get basic block at global scope!");
 | ||
| 
 | ||
|   BasicBlock *BB = 0;
 | ||
| 
 | ||
|   // First, see if this was forward referenced
 | ||
| 
 | ||
|   std::map<ValID, BasicBlock*>::iterator BBI = CurFun.BBForwardRefs.find(ID);
 | ||
|   if (BBI != CurFun.BBForwardRefs.end()) {
 | ||
|     BB = BBI->second;
 | ||
|     // The forward declaration could have been inserted anywhere in the
 | ||
|     // function: insert it into the correct place now.
 | ||
|     CurFun.CurrentFunction->getBasicBlockList().remove(BB);
 | ||
|     CurFun.CurrentFunction->getBasicBlockList().push_back(BB);
 | ||
| 
 | ||
|     // We're about to erase the entry, save the key so we can clean it up.
 | ||
|     ValID Tmp = BBI->first;
 | ||
| 
 | ||
|     // Erase the forward ref from the map as its no longer "forward"
 | ||
|     CurFun.BBForwardRefs.erase(ID);
 | ||
| 
 | ||
|     // The key has been removed from the map but so we don't want to leave 
 | ||
|     // strdup'd memory around so destroy it too.
 | ||
|     Tmp.destroy();
 | ||
| 
 | ||
|     // If its a numbered definition, bump the number and set the BB value.
 | ||
|     if (ID.Type == ValID::LocalID) {
 | ||
|       assert(ID.Num == CurFun.NextValNum && "Invalid new block number");
 | ||
|       InsertValue(BB);
 | ||
|     }
 | ||
| 
 | ||
|     ID.destroy();
 | ||
|     return BB;
 | ||
|   } 
 | ||
|   
 | ||
|   // We haven't seen this BB before and its first mention is a definition. 
 | ||
|   // Just create it and return it.
 | ||
|   std::string Name (ID.Type == ValID::LocalName ? ID.getName() : "");
 | ||
|   BB = new BasicBlock(Name, CurFun.CurrentFunction);
 | ||
|   if (ID.Type == ValID::LocalID) {
 | ||
|     assert(ID.Num == CurFun.NextValNum && "Invalid new block number");
 | ||
|     InsertValue(BB);
 | ||
|   }
 | ||
| 
 | ||
|   ID.destroy(); // Free strdup'd memory
 | ||
|   return BB;
 | ||
| }
 | ||
| 
 | ||
| /// getBBVal - get an existing BB value or create a forward reference for it.
 | ||
| /// 
 | ||
| static BasicBlock *getBBVal(const ValID &ID) {
 | ||
|   assert(inFunctionScope() && "Can't get basic block at global scope!");
 | ||
| 
 | ||
|   BasicBlock *BB =  0;
 | ||
| 
 | ||
|   std::map<ValID, BasicBlock*>::iterator BBI = CurFun.BBForwardRefs.find(ID);
 | ||
|   if (BBI != CurFun.BBForwardRefs.end()) {
 | ||
|     BB = BBI->second;
 | ||
|   } if (ID.Type == ValID::LocalName) {
 | ||
|     std::string Name = ID.getName();
 | ||
|     Value *N = CurFun.CurrentFunction->getValueSymbolTable().lookup(Name);
 | ||
|     if (N)
 | ||
|       if (N->getType()->getTypeID() == Type::LabelTyID)
 | ||
|         BB = cast<BasicBlock>(N);
 | ||
|       else
 | ||
|         GenerateError("Reference to label '" + Name + "' is actually of type '"+
 | ||
|           N->getType()->getDescription() + "'");
 | ||
|   } else if (ID.Type == ValID::LocalID) {
 | ||
|     if (ID.Num < CurFun.NextValNum && ID.Num < CurFun.Values.size()) {
 | ||
|       if (CurFun.Values[ID.Num]->getType()->getTypeID() == Type::LabelTyID)
 | ||
|         BB = cast<BasicBlock>(CurFun.Values[ID.Num]);
 | ||
|       else
 | ||
|         GenerateError("Reference to label '%" + utostr(ID.Num) + 
 | ||
|           "' is actually of type '"+ 
 | ||
|           CurFun.Values[ID.Num]->getType()->getDescription() + "'");
 | ||
|     }
 | ||
|   } else {
 | ||
|     GenerateError("Illegal label reference " + ID.getName());
 | ||
|     return 0;
 | ||
|   }
 | ||
| 
 | ||
|   // If its already been defined, return it now.
 | ||
|   if (BB) {
 | ||
|     ID.destroy(); // Free strdup'd memory.
 | ||
|     return BB;
 | ||
|   }
 | ||
| 
 | ||
|   // Otherwise, this block has not been seen before, create it.
 | ||
|   std::string Name;
 | ||
|   if (ID.Type == ValID::LocalName)
 | ||
|     Name = ID.getName();
 | ||
|   BB = new BasicBlock(Name, CurFun.CurrentFunction);
 | ||
| 
 | ||
|   // Insert it in the forward refs map.
 | ||
|   CurFun.BBForwardRefs[ID] = BB;
 | ||
| 
 | ||
|   return BB;
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| //===----------------------------------------------------------------------===//
 | ||
| //              Code to handle forward references in instructions
 | ||
| //===----------------------------------------------------------------------===//
 | ||
| //
 | ||
| // This code handles the late binding needed with statements that reference
 | ||
| // values not defined yet... for example, a forward branch, or the PHI node for
 | ||
| // a loop body.
 | ||
| //
 | ||
| // This keeps a table (CurFun.LateResolveValues) of all such forward references
 | ||
| // and back patchs after we are done.
 | ||
| //
 | ||
| 
 | ||
| // ResolveDefinitions - If we could not resolve some defs at parsing
 | ||
| // time (forward branches, phi functions for loops, etc...) resolve the
 | ||
| // defs now...
 | ||
| //
 | ||
| static void 
 | ||
| ResolveDefinitions(ValueList &LateResolvers, ValueList *FutureLateResolvers) {
 | ||
|   // Loop over LateResolveDefs fixing up stuff that couldn't be resolved
 | ||
|   while (!LateResolvers.empty()) {
 | ||
|     Value *V = LateResolvers.back();
 | ||
|     LateResolvers.pop_back();
 | ||
| 
 | ||
|     std::map<Value*, std::pair<ValID, int> >::iterator PHI =
 | ||
|       CurModule.PlaceHolderInfo.find(V);
 | ||
|     assert(PHI != CurModule.PlaceHolderInfo.end() && "Placeholder error!");
 | ||
| 
 | ||
|     ValID &DID = PHI->second.first;
 | ||
| 
 | ||
|     Value *TheRealValue = getExistingVal(V->getType(), DID);
 | ||
|     if (TriggerError)
 | ||
|       return;
 | ||
|     if (TheRealValue) {
 | ||
|       V->replaceAllUsesWith(TheRealValue);
 | ||
|       delete V;
 | ||
|       CurModule.PlaceHolderInfo.erase(PHI);
 | ||
|     } else if (FutureLateResolvers) {
 | ||
|       // Functions have their unresolved items forwarded to the module late
 | ||
|       // resolver table
 | ||
|       InsertValue(V, *FutureLateResolvers);
 | ||
|     } else {
 | ||
|       if (DID.Type == ValID::LocalName || DID.Type == ValID::GlobalName) {
 | ||
|         GenerateError("Reference to an invalid definition: '" +DID.getName()+
 | ||
|                        "' of type '" + V->getType()->getDescription() + "'",
 | ||
|                        PHI->second.second);
 | ||
|         return;
 | ||
|       } else {
 | ||
|         GenerateError("Reference to an invalid definition: #" +
 | ||
|                        itostr(DID.Num) + " of type '" +
 | ||
|                        V->getType()->getDescription() + "'",
 | ||
|                        PHI->second.second);
 | ||
|         return;
 | ||
|       }
 | ||
|     }
 | ||
|   }
 | ||
|   LateResolvers.clear();
 | ||
| }
 | ||
| 
 | ||
| // ResolveTypeTo - A brand new type was just declared.  This means that (if
 | ||
| // name is not null) things referencing Name can be resolved.  Otherwise, things
 | ||
| // refering to the number can be resolved.  Do this now.
 | ||
| //
 | ||
| static void ResolveTypeTo(std::string *Name, const Type *ToTy) {
 | ||
|   ValID D;
 | ||
|   if (Name)
 | ||
|     D = ValID::createLocalName(*Name);
 | ||
|   else      
 | ||
|     D = ValID::createLocalID(CurModule.Types.size());
 | ||
| 
 | ||
|   std::map<ValID, PATypeHolder>::iterator I =
 | ||
|     CurModule.LateResolveTypes.find(D);
 | ||
|   if (I != CurModule.LateResolveTypes.end()) {
 | ||
|     ((DerivedType*)I->second.get())->refineAbstractTypeTo(ToTy);
 | ||
|     CurModule.LateResolveTypes.erase(I);
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| // setValueName - Set the specified value to the name given.  The name may be
 | ||
| // null potentially, in which case this is a noop.  The string passed in is
 | ||
| // assumed to be a malloc'd string buffer, and is free'd by this function.
 | ||
| //
 | ||
| static void setValueName(Value *V, std::string *NameStr) {
 | ||
|   if (!NameStr) return;
 | ||
|   std::string Name(*NameStr);      // Copy string
 | ||
|   delete NameStr;                  // Free old string
 | ||
| 
 | ||
|   if (V->getType() == Type::VoidTy) {
 | ||
|     GenerateError("Can't assign name '" + Name+"' to value with void type");
 | ||
|     return;
 | ||
|   }
 | ||
| 
 | ||
|   assert(inFunctionScope() && "Must be in function scope!");
 | ||
|   ValueSymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable();
 | ||
|   if (ST.lookup(Name)) {
 | ||
|     GenerateError("Redefinition of value '" + Name + "' of type '" +
 | ||
|                    V->getType()->getDescription() + "'");
 | ||
|     return;
 | ||
|   }
 | ||
| 
 | ||
|   // Set the name.
 | ||
|   V->setName(Name);
 | ||
| }
 | ||
| 
 | ||
| /// ParseGlobalVariable - Handle parsing of a global.  If Initializer is null,
 | ||
| /// this is a declaration, otherwise it is a definition.
 | ||
| static GlobalVariable *
 | ||
| ParseGlobalVariable(std::string *NameStr,
 | ||
|                     GlobalValue::LinkageTypes Linkage,
 | ||
|                     GlobalValue::VisibilityTypes Visibility,
 | ||
|                     bool isConstantGlobal, const Type *Ty,
 | ||
|                     Constant *Initializer, bool IsThreadLocal) {
 | ||
|   if (isa<FunctionType>(Ty)) {
 | ||
|     GenerateError("Cannot declare global vars of function type");
 | ||
|     return 0;
 | ||
|   }
 | ||
| 
 | ||
|   const PointerType *PTy = PointerType::get(Ty);
 | ||
| 
 | ||
|   std::string Name;
 | ||
|   if (NameStr) {
 | ||
|     Name = *NameStr;      // Copy string
 | ||
|     delete NameStr;       // Free old string
 | ||
|   }
 | ||
| 
 | ||
|   // See if this global value was forward referenced.  If so, recycle the
 | ||
|   // object.
 | ||
|   ValID ID;
 | ||
|   if (!Name.empty()) {
 | ||
|     ID = ValID::createGlobalName(Name);
 | ||
|   } else {
 | ||
|     ID = ValID::createGlobalID(CurModule.Values.size());
 | ||
|   }
 | ||
| 
 | ||
|   if (GlobalValue *FWGV = CurModule.GetForwardRefForGlobal(PTy, ID)) {
 | ||
|     // Move the global to the end of the list, from whereever it was
 | ||
|     // previously inserted.
 | ||
|     GlobalVariable *GV = cast<GlobalVariable>(FWGV);
 | ||
|     CurModule.CurrentModule->getGlobalList().remove(GV);
 | ||
|     CurModule.CurrentModule->getGlobalList().push_back(GV);
 | ||
|     GV->setInitializer(Initializer);
 | ||
|     GV->setLinkage(Linkage);
 | ||
|     GV->setVisibility(Visibility);
 | ||
|     GV->setConstant(isConstantGlobal);
 | ||
|     GV->setThreadLocal(IsThreadLocal);
 | ||
|     InsertValue(GV, CurModule.Values);
 | ||
|     return GV;
 | ||
|   }
 | ||
| 
 | ||
|   // If this global has a name
 | ||
|   if (!Name.empty()) {
 | ||
|     // if the global we're parsing has an initializer (is a definition) and
 | ||
|     // has external linkage.
 | ||
|     if (Initializer && Linkage != GlobalValue::InternalLinkage)
 | ||
|       // If there is already a global with external linkage with this name
 | ||
|       if (CurModule.CurrentModule->getGlobalVariable(Name, false)) {
 | ||
|         // If we allow this GVar to get created, it will be renamed in the
 | ||
|         // symbol table because it conflicts with an existing GVar. We can't
 | ||
|         // allow redefinition of GVars whose linking indicates that their name
 | ||
|         // must stay the same. Issue the error.
 | ||
|         GenerateError("Redefinition of global variable named '" + Name +
 | ||
|                        "' of type '" + Ty->getDescription() + "'");
 | ||
|         return 0;
 | ||
|       }
 | ||
|   }
 | ||
| 
 | ||
|   // Otherwise there is no existing GV to use, create one now.
 | ||
|   GlobalVariable *GV =
 | ||
|     new GlobalVariable(Ty, isConstantGlobal, Linkage, Initializer, Name,
 | ||
|                        CurModule.CurrentModule, IsThreadLocal);
 | ||
|   GV->setVisibility(Visibility);
 | ||
|   InsertValue(GV, CurModule.Values);
 | ||
|   return GV;
 | ||
| }
 | ||
| 
 | ||
| // setTypeName - Set the specified type to the name given.  The name may be
 | ||
| // null potentially, in which case this is a noop.  The string passed in is
 | ||
| // assumed to be a malloc'd string buffer, and is freed by this function.
 | ||
| //
 | ||
| // This function returns true if the type has already been defined, but is
 | ||
| // allowed to be redefined in the specified context.  If the name is a new name
 | ||
| // for the type plane, it is inserted and false is returned.
 | ||
| static bool setTypeName(const Type *T, std::string *NameStr) {
 | ||
|   assert(!inFunctionScope() && "Can't give types function-local names!");
 | ||
|   if (NameStr == 0) return false;
 | ||
|  
 | ||
|   std::string Name(*NameStr);      // Copy string
 | ||
|   delete NameStr;                  // Free old string
 | ||
| 
 | ||
|   // We don't allow assigning names to void type
 | ||
|   if (T == Type::VoidTy) {
 | ||
|     GenerateError("Can't assign name '" + Name + "' to the void type");
 | ||
|     return false;
 | ||
|   }
 | ||
| 
 | ||
|   // Set the type name, checking for conflicts as we do so.
 | ||
|   bool AlreadyExists = CurModule.CurrentModule->addTypeName(Name, T);
 | ||
| 
 | ||
|   if (AlreadyExists) {   // Inserting a name that is already defined???
 | ||
|     const Type *Existing = CurModule.CurrentModule->getTypeByName(Name);
 | ||
|     assert(Existing && "Conflict but no matching type?!");
 | ||
| 
 | ||
|     // There is only one case where this is allowed: when we are refining an
 | ||
|     // opaque type.  In this case, Existing will be an opaque type.
 | ||
|     if (const OpaqueType *OpTy = dyn_cast<OpaqueType>(Existing)) {
 | ||
|       // We ARE replacing an opaque type!
 | ||
|       const_cast<OpaqueType*>(OpTy)->refineAbstractTypeTo(T);
 | ||
|       return true;
 | ||
|     }
 | ||
| 
 | ||
|     // Otherwise, this is an attempt to redefine a type. That's okay if
 | ||
|     // the redefinition is identical to the original. This will be so if
 | ||
|     // Existing and T point to the same Type object. In this one case we
 | ||
|     // allow the equivalent redefinition.
 | ||
|     if (Existing == T) return true;  // Yes, it's equal.
 | ||
| 
 | ||
|     // Any other kind of (non-equivalent) redefinition is an error.
 | ||
|     GenerateError("Redefinition of type named '" + Name + "' of type '" +
 | ||
|                    T->getDescription() + "'");
 | ||
|   }
 | ||
| 
 | ||
|   return false;
 | ||
| }
 | ||
| 
 | ||
| //===----------------------------------------------------------------------===//
 | ||
| // Code for handling upreferences in type names...
 | ||
| //
 | ||
| 
 | ||
| // TypeContains - Returns true if Ty directly contains E in it.
 | ||
| //
 | ||
| static bool TypeContains(const Type *Ty, const Type *E) {
 | ||
|   return std::find(Ty->subtype_begin(), Ty->subtype_end(),
 | ||
|                    E) != Ty->subtype_end();
 | ||
| }
 | ||
| 
 | ||
| namespace {
 | ||
|   struct UpRefRecord {
 | ||
|     // NestingLevel - The number of nesting levels that need to be popped before
 | ||
|     // this type is resolved.
 | ||
|     unsigned NestingLevel;
 | ||
| 
 | ||
|     // LastContainedTy - This is the type at the current binding level for the
 | ||
|     // type.  Every time we reduce the nesting level, this gets updated.
 | ||
|     const Type *LastContainedTy;
 | ||
| 
 | ||
|     // UpRefTy - This is the actual opaque type that the upreference is
 | ||
|     // represented with.
 | ||
|     OpaqueType *UpRefTy;
 | ||
| 
 | ||
|     UpRefRecord(unsigned NL, OpaqueType *URTy)
 | ||
|       : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) {}
 | ||
|   };
 | ||
| }
 | ||
| 
 | ||
| // UpRefs - A list of the outstanding upreferences that need to be resolved.
 | ||
| static std::vector<UpRefRecord> UpRefs;
 | ||
| 
 | ||
| /// HandleUpRefs - Every time we finish a new layer of types, this function is
 | ||
| /// called.  It loops through the UpRefs vector, which is a list of the
 | ||
| /// currently active types.  For each type, if the up reference is contained in
 | ||
| /// the newly completed type, we decrement the level count.  When the level
 | ||
| /// count reaches zero, the upreferenced type is the type that is passed in:
 | ||
| /// thus we can complete the cycle.
 | ||
| ///
 | ||
| static PATypeHolder HandleUpRefs(const Type *ty) {
 | ||
|   // If Ty isn't abstract, or if there are no up-references in it, then there is
 | ||
|   // nothing to resolve here.
 | ||
|   if (!ty->isAbstract() || UpRefs.empty()) return ty;
 | ||
|   
 | ||
|   PATypeHolder Ty(ty);
 | ||
|   UR_OUT("Type '" << Ty->getDescription() <<
 | ||
|          "' newly formed.  Resolving upreferences.\n" <<
 | ||
|          UpRefs.size() << " upreferences active!\n");
 | ||
| 
 | ||
|   // If we find any resolvable upreferences (i.e., those whose NestingLevel goes
 | ||
|   // to zero), we resolve them all together before we resolve them to Ty.  At
 | ||
|   // the end of the loop, if there is anything to resolve to Ty, it will be in
 | ||
|   // this variable.
 | ||
|   OpaqueType *TypeToResolve = 0;
 | ||
| 
 | ||
|   for (unsigned i = 0; i != UpRefs.size(); ++i) {
 | ||
|     UR_OUT("  UR#" << i << " - TypeContains(" << Ty->getDescription() << ", "
 | ||
|            << UpRefs[i].second->getDescription() << ") = "
 | ||
|            << (TypeContains(Ty, UpRefs[i].second) ? "true" : "false") << "\n");
 | ||
|     if (TypeContains(Ty, UpRefs[i].LastContainedTy)) {
 | ||
|       // Decrement level of upreference
 | ||
|       unsigned Level = --UpRefs[i].NestingLevel;
 | ||
|       UpRefs[i].LastContainedTy = Ty;
 | ||
|       UR_OUT("  Uplevel Ref Level = " << Level << "\n");
 | ||
|       if (Level == 0) {                     // Upreference should be resolved!
 | ||
|         if (!TypeToResolve) {
 | ||
|           TypeToResolve = UpRefs[i].UpRefTy;
 | ||
|         } else {
 | ||
|           UR_OUT("  * Resolving upreference for "
 | ||
|                  << UpRefs[i].second->getDescription() << "\n";
 | ||
|                  std::string OldName = UpRefs[i].UpRefTy->getDescription());
 | ||
|           UpRefs[i].UpRefTy->refineAbstractTypeTo(TypeToResolve);
 | ||
|           UR_OUT("  * Type '" << OldName << "' refined upreference to: "
 | ||
|                  << (const void*)Ty << ", " << Ty->getDescription() << "\n");
 | ||
|         }
 | ||
|         UpRefs.erase(UpRefs.begin()+i);     // Remove from upreference list...
 | ||
|         --i;                                // Do not skip the next element...
 | ||
|       }
 | ||
|     }
 | ||
|   }
 | ||
| 
 | ||
|   if (TypeToResolve) {
 | ||
|     UR_OUT("  * Resolving upreference for "
 | ||
|            << UpRefs[i].second->getDescription() << "\n";
 | ||
|            std::string OldName = TypeToResolve->getDescription());
 | ||
|     TypeToResolve->refineAbstractTypeTo(Ty);
 | ||
|   }
 | ||
| 
 | ||
|   return Ty;
 | ||
| }
 | ||
| 
 | ||
| //===----------------------------------------------------------------------===//
 | ||
| //            RunVMAsmParser - Define an interface to this parser
 | ||
| //===----------------------------------------------------------------------===//
 | ||
| //
 | ||
| static Module* RunParser(Module * M);
 | ||
| 
 | ||
| Module *llvm::RunVMAsmParser(const std::string &Filename, FILE *F) {
 | ||
|   set_scan_file(F);
 | ||
| 
 | ||
|   CurFilename = Filename;
 | ||
|   return RunParser(new Module(CurFilename));
 | ||
| }
 | ||
| 
 | ||
| Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) {
 | ||
|   set_scan_string(AsmString);
 | ||
| 
 | ||
|   CurFilename = "from_memory";
 | ||
|   if (M == NULL) {
 | ||
|     return RunParser(new Module (CurFilename));
 | ||
|   } else {
 | ||
|     return RunParser(M);
 | ||
|   }
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| #line 967 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| typedef union {
 | ||
|   llvm::Module                           *ModuleVal;
 | ||
|   llvm::Function                         *FunctionVal;
 | ||
|   llvm::BasicBlock                       *BasicBlockVal;
 | ||
|   llvm::TerminatorInst                   *TermInstVal;
 | ||
|   llvm::Instruction                      *InstVal;
 | ||
|   llvm::Constant                         *ConstVal;
 | ||
| 
 | ||
|   const llvm::Type                       *PrimType;
 | ||
|   std::list<llvm::PATypeHolder>          *TypeList;
 | ||
|   llvm::PATypeHolder                     *TypeVal;
 | ||
|   llvm::Value                            *ValueVal;
 | ||
|   std::vector<llvm::Value*>              *ValueList;
 | ||
|   llvm::ArgListType                      *ArgList;
 | ||
|   llvm::TypeWithAttrs                     TypeWithAttrs;
 | ||
|   llvm::TypeWithAttrsList                *TypeWithAttrsList;
 | ||
|   llvm::ValueRefList                     *ValueRefList;
 | ||
| 
 | ||
|   // Represent the RHS of PHI node
 | ||
|   std::list<std::pair<llvm::Value*,
 | ||
|                       llvm::BasicBlock*> > *PHIList;
 | ||
|   std::vector<std::pair<llvm::Constant*, llvm::BasicBlock*> > *JumpTable;
 | ||
|   std::vector<llvm::Constant*>           *ConstVector;
 | ||
| 
 | ||
|   llvm::GlobalValue::LinkageTypes         Linkage;
 | ||
|   llvm::GlobalValue::VisibilityTypes      Visibility;
 | ||
|   uint16_t                          ParamAttrs;
 | ||
|   llvm::APInt                       *APIntVal;
 | ||
|   int64_t                           SInt64Val;
 | ||
|   uint64_t                          UInt64Val;
 | ||
|   int                               SIntVal;
 | ||
|   unsigned                          UIntVal;
 | ||
|   llvm::APFloat                    *FPVal;
 | ||
|   bool                              BoolVal;
 | ||
| 
 | ||
|   std::string                      *StrVal;   // This memory must be deleted
 | ||
|   llvm::ValID                       ValIDVal;
 | ||
| 
 | ||
|   llvm::Instruction::BinaryOps      BinaryOpVal;
 | ||
|   llvm::Instruction::TermOps        TermOpVal;
 | ||
|   llvm::Instruction::MemoryOps      MemOpVal;
 | ||
|   llvm::Instruction::CastOps        CastOpVal;
 | ||
|   llvm::Instruction::OtherOps       OtherOpVal;
 | ||
|   llvm::ICmpInst::Predicate         IPredicate;
 | ||
|   llvm::FCmpInst::Predicate         FPredicate;
 | ||
| } YYSTYPE;
 | ||
| #include <stdio.h>
 | ||
| 
 | ||
| #ifndef __cplusplus
 | ||
| #ifndef __STDC__
 | ||
| #define const
 | ||
| #endif
 | ||
| #endif
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| #define	YYFINAL		594
 | ||
| #define	YYFLAG		-32768
 | ||
| #define	YYNTBASE	160
 | ||
| 
 | ||
| #define YYTRANSLATE(x) ((unsigned)(x) <= 399 ? yytranslate[x] : 241)
 | ||
| 
 | ||
| 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,   150,
 | ||
|    151,   148,     2,   147,     2,     2,     2,     2,     2,     2,
 | ||
|      2,     2,     2,     2,     2,     2,     2,     2,     2,   155,
 | ||
|    146,   156,     2,     2,     2,     2,     2,     2,     2,     2,
 | ||
|      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 | ||
|      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 | ||
|    152,   149,   154,     2,     2,     2,     2,     2,   159,     2,
 | ||
|      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 | ||
|      2,     2,     2,     2,     2,     2,     2,     2,     2,   153,
 | ||
|      2,     2,   157,     2,   158,     2,     2,     2,     2,     2,
 | ||
|      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 | ||
|      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 | ||
|      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 | ||
|      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 | ||
|      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 | ||
|      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 | ||
|      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 | ||
|      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 | ||
|      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 | ||
|      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 | ||
|      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 | ||
|      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
 | ||
|      2,     2,     2,     2,     2,     1,     3,     4,     5,     6,
 | ||
|      7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
 | ||
|     17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
 | ||
|     27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
 | ||
|     37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
 | ||
|     47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
 | ||
|     57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
 | ||
|     67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
 | ||
|     77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
 | ||
|     87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
 | ||
|     97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
 | ||
|    107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
 | ||
|    117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
 | ||
|    127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
 | ||
|    137,   138,   139,   140,   141,   142,   143,   144,   145
 | ||
| };
 | ||
| 
 | ||
| #if YYDEBUG != 0
 | ||
| static const short yyprhs[] = {     0,
 | ||
|      0,     2,     4,     6,     8,    10,    12,    14,    16,    18,
 | ||
|     20,    22,    24,    26,    28,    30,    32,    34,    36,    38,
 | ||
|     40,    42,    44,    46,    48,    50,    52,    54,    56,    58,
 | ||
|     60,    62,    64,    66,    68,    70,    72,    74,    76,    78,
 | ||
|     80,    82,    84,    86,    88,    90,    92,    94,    96,    98,
 | ||
|    100,   102,   104,   106,   108,   110,   112,   114,   116,   118,
 | ||
|    120,   122,   124,   126,   127,   130,   131,   133,   135,   137,
 | ||
|    138,   141,   143,   145,   147,   149,   151,   153,   155,   157,
 | ||
|    158,   160,   162,   164,   165,   167,   169,   170,   172,   174,
 | ||
|    176,   178,   179,   181,   183,   184,   186,   188,   190,   192,
 | ||
|    194,   197,   199,   201,   203,   205,   207,   209,   211,   213,
 | ||
|    215,   216,   219,   221,   223,   225,   227,   228,   231,   232,
 | ||
|    235,   236,   240,   243,   244,   246,   247,   251,   253,   256,
 | ||
|    258,   260,   262,   264,   266,   268,   270,   272,   274,   277,
 | ||
|    279,   282,   288,   294,   300,   306,   310,   313,   319,   324,
 | ||
|    327,   329,   331,   333,   337,   339,   343,   345,   346,   348,
 | ||
|    352,   357,   361,   365,   370,   375,   379,   386,   392,   395,
 | ||
|    398,   401,   404,   407,   410,   413,   416,   419,   422,   425,
 | ||
|    428,   435,   441,   450,   457,   464,   472,   480,   487,   496,
 | ||
|    505,   509,   511,   513,   515,   517,   518,   521,   528,   530,
 | ||
|    531,   533,   536,   537,   541,   542,   546,   550,   554,   558,
 | ||
|    559,   567,   568,   577,   578,   587,   593,   596,   600,   602,
 | ||
|    606,   610,   614,   618,   620,   621,   627,   631,   633,   637,
 | ||
|    639,   640,   650,   652,   654,   659,   661,   663,   666,   670,
 | ||
|    671,   673,   675,   677,   679,   681,   683,   685,   687,   689,
 | ||
|    693,   695,   701,   703,   705,   707,   709,   711,   713,   716,
 | ||
|    719,   722,   726,   729,   730,   732,   735,   738,   742,   752,
 | ||
|    762,   771,   786,   788,   790,   797,   803,   806,   813,   821,
 | ||
|    825,   831,   832,   833,   837,   840,   842,   848,   854,   861,
 | ||
|    868,   873,   880,   885,   890,   897,   904,   907,   916,   918,
 | ||
|    920,   921,   925,   932,   936,   943,   946,   952,   960
 | ||
| };
 | ||
| 
 | ||
| static const short yyrhs[] = {    73,
 | ||
|      0,    74,     0,    75,     0,    76,     0,    77,     0,    78,
 | ||
|      0,    79,     0,    80,     0,    81,     0,    85,     0,    86,
 | ||
|      0,    87,     0,    82,     0,    83,     0,    84,     0,   116,
 | ||
|      0,   117,     0,   118,     0,   119,     0,   120,     0,   121,
 | ||
|      0,   122,     0,   123,     0,   124,     0,   125,     0,   126,
 | ||
|      0,   127,     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,   106,     0,   107,     0,   108,
 | ||
|      0,   109,     0,    96,     0,    97,     0,    98,     0,    99,
 | ||
|      0,    26,     0,    27,     0,    11,     0,    12,     0,    13,
 | ||
|      0,    16,     0,    15,     0,    14,     0,    19,     0,    22,
 | ||
|      0,    24,     0,   167,     0,     0,   167,   146,     0,     0,
 | ||
|     20,     0,    23,     0,   172,     0,     0,   170,   146,     0,
 | ||
|     42,     0,    44,     0,    43,     0,    45,     0,    47,     0,
 | ||
|     46,     0,    48,     0,    50,     0,     0,   143,     0,   144,
 | ||
|      0,   145,     0,     0,    46,     0,    48,     0,     0,    42,
 | ||
|      0,    43,     0,    44,     0,    47,     0,     0,    44,     0,
 | ||
|     42,     0,     0,    61,     0,    62,     0,    63,     0,    64,
 | ||
|      0,    65,     0,    60,     4,     0,   135,     0,   117,     0,
 | ||
|    134,     0,   118,     0,   137,     0,   138,     0,   140,     0,
 | ||
|    141,     0,   142,     0,     0,   181,   180,     0,   136,     0,
 | ||
|    139,     0,   135,     0,   134,     0,     0,   183,   182,     0,
 | ||
|      0,    53,     4,     0,     0,   147,    53,     4,     0,    34,
 | ||
|     22,     0,     0,   186,     0,     0,   147,   189,   188,     0,
 | ||
|    186,     0,    53,     4,     0,    11,     0,    12,     0,    13,
 | ||
|      0,    16,     0,    15,     0,    14,     0,    17,     0,    49,
 | ||
|      0,   190,     0,   191,   148,     0,   225,     0,   149,     4,
 | ||
|      0,   191,   150,   195,   151,   183,     0,    10,   150,   195,
 | ||
|    151,   183,     0,   152,     4,   153,   191,   154,     0,   155,
 | ||
|      4,   153,   191,   156,     0,   157,   196,   158,     0,   157,
 | ||
|    158,     0,   155,   157,   196,   158,   156,     0,   155,   157,
 | ||
|    158,   156,     0,   191,   181,     0,   191,     0,    10,     0,
 | ||
|    192,     0,   194,   147,   192,     0,   194,     0,   194,   147,
 | ||
|     39,     0,    39,     0,     0,   191,     0,   196,   147,   191,
 | ||
|      0,   191,   152,   199,   154,     0,   191,   152,   154,     0,
 | ||
|    191,   159,    22,     0,   191,   155,   199,   156,     0,   191,
 | ||
|    157,   199,   158,     0,   191,   157,   158,     0,   191,   155,
 | ||
|    157,   199,   158,   156,     0,   191,   155,   157,   158,   156,
 | ||
|      0,   191,    40,     0,   191,    41,     0,   191,   225,     0,
 | ||
|    191,   198,     0,   191,    25,     0,   165,     3,     0,   165,
 | ||
|      5,     0,   165,     4,     0,   165,     6,     0,    11,    26,
 | ||
|      0,    11,    27,     0,   166,     9,     0,   162,   150,   197,
 | ||
|     38,   191,   151,     0,   115,   150,   197,   236,   151,     0,
 | ||
|    129,   150,   197,   147,   197,   147,   197,   151,     0,   160,
 | ||
|    150,   197,   147,   197,   151,     0,   161,   150,   197,   147,
 | ||
|    197,   151,     0,    88,   163,   150,   197,   147,   197,   151,
 | ||
|      0,    89,   164,   150,   197,   147,   197,   151,     0,   131,
 | ||
|    150,   197,   147,   197,   151,     0,   132,   150,   197,   147,
 | ||
|    197,   147,   197,   151,     0,   133,   150,   197,   147,   197,
 | ||
|    147,   197,   151,     0,   199,   147,   197,     0,   197,     0,
 | ||
|     32,     0,    33,     0,    37,     0,     0,   193,   225,     0,
 | ||
|    121,   150,   202,    38,   191,   151,     0,   204,     0,     0,
 | ||
|    205,     0,   204,   205,     0,     0,    31,   206,   221,     0,
 | ||
|      0,    30,   207,   222,     0,    58,    57,   211,     0,   169,
 | ||
|     18,   191,     0,   169,    18,    10,     0,     0,   171,   175,
 | ||
|    201,   200,   197,   208,   188,     0,     0,   171,   173,   175,
 | ||
|    201,   200,   197,   209,   188,     0,     0,   171,   174,   175,
 | ||
|    201,   200,   191,   210,   188,     0,   171,   175,    35,   178,
 | ||
|    202,     0,    51,   212,     0,    54,   146,   213,     0,    22,
 | ||
|      0,    52,   146,    22,     0,    66,   146,    22,     0,   152,
 | ||
|    214,   154,     0,   214,   147,    22,     0,    22,     0,     0,
 | ||
|    215,   147,   191,   181,   168,     0,   191,   181,   168,     0,
 | ||
|    215,     0,   215,   147,    39,     0,    39,     0,     0,   179,
 | ||
|    193,   170,   150,   216,   151,   183,   187,   184,     0,    28,
 | ||
|      0,   157,     0,   177,   175,   217,   218,     0,    29,     0,
 | ||
|    158,     0,   228,   220,     0,   176,   175,   217,     0,     0,
 | ||
|     59,     0,     3,     0,     4,     0,     9,     0,    26,     0,
 | ||
|     27,     0,    40,     0,    41,     0,    25,     0,   155,   199,
 | ||
|    156,     0,   198,     0,    57,   223,    22,   147,    22,     0,
 | ||
|      7,     0,     8,     0,   167,     0,   170,     0,   225,     0,
 | ||
|    224,     0,   191,   226,     0,   228,   229,     0,   219,   229,
 | ||
|      0,   230,   169,   231,     0,   230,   233,     0,     0,    21,
 | ||
|      0,    67,   227,     0,    67,    10,     0,    68,    17,   226,
 | ||
|      0,    68,    11,   226,   147,    17,   226,   147,    17,   226,
 | ||
|      0,    69,   165,   226,   147,    17,   226,   152,   232,   154,
 | ||
|      0,    69,   165,   226,   147,    17,   226,   152,   154,     0,
 | ||
|     70,   179,   193,   226,   150,   235,   151,   183,    38,    17,
 | ||
|    226,    71,    17,   226,     0,    71,     0,    72,     0,   232,
 | ||
|    165,   224,   147,    17,   226,     0,   165,   224,   147,    17,
 | ||
|    226,     0,   169,   238,     0,   191,   152,   226,   147,   226,
 | ||
|    154,     0,   234,   147,   152,   226,   147,   226,   154,     0,
 | ||
|    191,   226,   181,     0,   235,   147,   191,   226,   181,     0,
 | ||
|      0,     0,   236,   147,   227,     0,    56,    55,     0,    55,
 | ||
|      0,   160,   191,   226,   147,   226,     0,   161,   191,   226,
 | ||
|    147,   226,     0,    88,   163,   191,   226,   147,   226,     0,
 | ||
|     89,   164,   191,   226,   147,   226,     0,   162,   227,    38,
 | ||
|    191,     0,   129,   227,   147,   227,   147,   227,     0,   130,
 | ||
|    227,   147,   191,     0,   131,   227,   147,   227,     0,   132,
 | ||
|    227,   147,   227,   147,   227,     0,   133,   227,   147,   227,
 | ||
|    147,   227,     0,   128,   234,     0,   237,   179,   193,   226,
 | ||
|    150,   235,   151,   183,     0,   240,     0,    36,     0,     0,
 | ||
|    110,   191,   185,     0,   110,   191,   147,    11,   226,   185,
 | ||
|      0,   111,   191,   185,     0,   111,   191,   147,    11,   226,
 | ||
|    185,     0,   112,   227,     0,   239,   113,   191,   226,   185,
 | ||
|      0,   239,   114,   227,   147,   191,   226,   185,     0,   115,
 | ||
|    191,   226,   236,     0
 | ||
| };
 | ||
| 
 | ||
| #endif
 | ||
| 
 | ||
| #if YYDEBUG != 0
 | ||
| static const short yyrline[] = { 0,
 | ||
|   1126,  1126,  1126,  1126,  1126,  1126,  1126,  1126,  1126,  1127,
 | ||
|   1127,  1127,  1127,  1127,  1127,  1128,  1128,  1128,  1128,  1128,
 | ||
|   1128,  1128,  1129,  1129,  1129,  1129,  1129,  1132,  1132,  1133,
 | ||
|   1133,  1134,  1134,  1135,  1135,  1136,  1136,  1140,  1140,  1141,
 | ||
|   1141,  1142,  1142,  1143,  1143,  1144,  1144,  1145,  1145,  1146,
 | ||
|   1146,  1147,  1148,  1153,  1154,  1154,  1154,  1154,  1154,  1156,
 | ||
|   1156,  1156,  1157,  1157,  1161,  1165,  1170,  1170,  1172,  1173,
 | ||
|   1178,  1184,  1185,  1186,  1187,  1188,  1192,  1193,  1194,  1198,
 | ||
|   1199,  1200,  1201,  1205,  1206,  1207,  1211,  1212,  1213,  1214,
 | ||
|   1215,  1219,  1220,  1221,  1224,  1224,  1225,  1226,  1227,  1228,
 | ||
|   1229,  1237,  1238,  1239,  1240,  1241,  1242,  1243,  1244,  1245,
 | ||
|   1248,  1249,  1254,  1255,  1256,  1257,  1260,  1261,  1268,  1268,
 | ||
|   1275,  1275,  1284,  1292,  1292,  1298,  1298,  1300,  1305,  1318,
 | ||
|   1318,  1318,  1318,  1318,  1318,  1318,  1321,  1325,  1329,  1336,
 | ||
|   1341,  1349,  1379,  1410,  1415,  1427,  1437,  1441,  1451,  1458,
 | ||
|   1465,  1472,  1477,  1482,  1489,  1490,  1497,  1504,  1512,  1518,
 | ||
|   1530,  1558,  1574,  1601,  1629,  1655,  1675,  1701,  1721,  1733,
 | ||
|   1740,  1806,  1816,  1826,  1832,  1842,  1848,  1858,  1863,  1868,
 | ||
|   1881,  1893,  1915,  1923,  1929,  1940,  1945,  1950,  1956,  1962,
 | ||
|   1971,  1975,  1983,  1983,  1986,  1986,  1989,  2001,  2022,  2027,
 | ||
|   2035,  2036,  2040,  2040,  2044,  2044,  2047,  2050,  2074,  2085,
 | ||
|   2092,  2095,  2101,  2104,  2111,  2115,  2134,  2137,  2143,  2153,
 | ||
|   2157,  2162,  2164,  2169,  2174,  2183,  2193,  2204,  2208,  2217,
 | ||
|   2226,  2231,  2352,  2352,  2354,  2363,  2363,  2365,  2370,  2382,
 | ||
|   2386,  2391,  2395,  2399,  2403,  2407,  2411,  2415,  2419,  2423,
 | ||
|   2448,  2452,  2462,  2466,  2470,  2475,  2482,  2482,  2488,  2497,
 | ||
|   2501,  2510,  2519,  2528,  2532,  2539,  2543,  2547,  2552,  2562,
 | ||
|   2581,  2590,  2670,  2674,  2681,  2692,  2705,  2715,  2726,  2736,
 | ||
|   2745,  2754,  2757,  2758,  2765,  2769,  2774,  2795,  2812,  2826,
 | ||
|   2840,  2852,  2860,  2867,  2873,  2879,  2885,  2900,  2985,  2990,
 | ||
|   2994,  3001,  3008,  3016,  3023,  3031,  3039,  3053,  3070
 | ||
| };
 | ||
| #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","X86_FP80","FP128","PPC_FP128","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","SIGNEXT","ZEROEXT","NORETURN","INREG","SRET","NOUNWIND","NOALIAS",
 | ||
| "BYVAL","NEST","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,
 | ||
|    160,   160,   160,   160,   160,   160,   160,   160,   160,   161,
 | ||
|    161,   161,   161,   161,   161,   162,   162,   162,   162,   162,
 | ||
|    162,   162,   162,   162,   162,   162,   162,   163,   163,   163,
 | ||
|    163,   163,   163,   163,   163,   163,   163,   164,   164,   164,
 | ||
|    164,   164,   164,   164,   164,   164,   164,   164,   164,   164,
 | ||
|    164,   164,   164,   165,   166,   166,   166,   166,   166,   167,
 | ||
|    167,   167,   168,   168,   169,   169,   170,   170,   171,   171,
 | ||
|    172,   173,   173,   173,   173,   173,   174,   174,   174,   175,
 | ||
|    175,   175,   175,   176,   176,   176,   177,   177,   177,   177,
 | ||
|    177,   178,   178,   178,   179,   179,   179,   179,   179,   179,
 | ||
|    179,   180,   180,   180,   180,   180,   180,   180,   180,   180,
 | ||
|    181,   181,   182,   182,   182,   182,   183,   183,   184,   184,
 | ||
|    185,   185,   186,   187,   187,   188,   188,   189,   189,   190,
 | ||
|    190,   190,   190,   190,   190,   190,   191,   191,   191,   191,
 | ||
|    191,   191,   191,   191,   191,   191,   191,   191,   191,   192,
 | ||
|    193,   193,   194,   194,   195,   195,   195,   195,   196,   196,
 | ||
|    197,   197,   197,   197,   197,   197,   197,   197,   197,   197,
 | ||
|    197,   197,   197,   197,   197,   197,   197,   197,   197,   197,
 | ||
|    198,   198,   198,   198,   198,   198,   198,   198,   198,   198,
 | ||
|    199,   199,   200,   200,   201,   201,   202,   202,   203,   203,
 | ||
|    204,   204,   206,   205,   207,   205,   205,   205,   205,   208,
 | ||
|    205,   209,   205,   210,   205,   205,   205,   205,   211,   212,
 | ||
|    212,   213,   214,   214,   214,   215,   215,   216,   216,   216,
 | ||
|    216,   217,   218,   218,   219,   220,   220,   221,   222,   223,
 | ||
|    223,   224,   224,   224,   224,   224,   224,   224,   224,   224,
 | ||
|    224,   224,   225,   225,   225,   225,   226,   226,   227,   228,
 | ||
|    228,   229,   230,   230,   230,   231,   231,   231,   231,   231,
 | ||
|    231,   231,   231,   231,   232,   232,   233,   234,   234,   235,
 | ||
|    235,   235,   236,   236,   237,   237,   238,   238,   238,   238,
 | ||
|    238,   238,   238,   238,   238,   238,   238,   238,   238,   239,
 | ||
|    239,   240,   240,   240,   240,   240,   240,   240,   240
 | ||
| };
 | ||
| 
 | ||
| static const short yyr2[] = {     0,
 | ||
|      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
 | ||
|      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
 | ||
|      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
 | ||
|      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
 | ||
|      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
 | ||
|      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
 | ||
|      1,     1,     1,     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,     1,     1,     1,     1,     1,
 | ||
|      0,     2,     1,     1,     1,     1,     0,     2,     0,     2,
 | ||
|      0,     3,     2,     0,     1,     0,     3,     1,     2,     1,
 | ||
|      1,     1,     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[] = {    70,
 | ||
|     60,    67,    61,    68,    62,   205,   203,     0,     0,     0,
 | ||
|      0,     0,     0,    80,    69,    70,   201,    84,    87,     0,
 | ||
|      0,   217,     0,     0,    65,     0,    71,    72,    74,    73,
 | ||
|     75,    77,    76,    78,    79,    81,    82,    83,    80,    80,
 | ||
|    196,   202,    85,    86,    80,   206,    88,    89,    90,    91,
 | ||
|     80,   264,   204,   264,     0,     0,   225,   218,   219,   207,
 | ||
|    253,   254,   209,   130,   131,   132,   135,   134,   133,   136,
 | ||
|    137,     0,     0,     0,     0,   255,   256,   138,   208,   140,
 | ||
|    196,   196,    92,   195,     0,    95,    95,   265,   261,    66,
 | ||
|    236,   237,   238,   260,   220,   221,   224,     0,   158,   141,
 | ||
|      0,     0,     0,     0,   147,   159,     0,   139,   158,     0,
 | ||
|      0,    94,    93,     0,   193,   194,     0,     0,    96,    97,
 | ||
|     98,    99,   100,     0,   239,     0,   301,   263,     0,   222,
 | ||
|    157,   111,   153,   155,     0,     0,     0,     0,     0,     0,
 | ||
|    146,     0,     0,     0,   152,     0,   151,     0,   216,   130,
 | ||
|    131,   132,   135,   134,   133,     0,     0,     0,   210,   101,
 | ||
|      0,   233,   234,   235,   300,   286,     0,     0,     0,     0,
 | ||
|     95,   273,   274,     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,   262,    95,   277,     0,   299,
 | ||
|    223,   150,     0,   117,     0,     0,   149,     0,   160,   117,
 | ||
|    212,   214,     0,   197,   178,   179,   174,   176,   175,   177,
 | ||
|    180,   173,   169,   170,     0,     0,     0,     0,     0,     0,
 | ||
|      0,     0,     0,     0,     0,     0,     0,     0,   172,   171,
 | ||
|    126,     0,   285,   267,     0,   266,     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,   121,
 | ||
|    121,   306,     0,     0,   297,     0,     0,     0,     0,     0,
 | ||
|      0,     0,     0,     0,     0,     0,   103,   105,   104,   102,
 | ||
|    106,   107,   108,   109,   110,   112,   156,   154,   143,   144,
 | ||
|    145,   148,   142,   126,   126,     0,     0,     0,     0,     0,
 | ||
|      0,     0,     0,   162,   192,     0,     0,     0,   166,     0,
 | ||
|    163,     0,     0,     0,     0,   211,   231,   242,   243,   244,
 | ||
|    249,   245,   246,   247,   248,   240,     0,   251,   258,   257,
 | ||
|    259,     0,   268,     0,     0,     0,     0,     0,   302,     0,
 | ||
|    304,   283,     0,     0,     0,     0,     0,     0,     0,     0,
 | ||
|      0,     0,     0,     0,     0,   116,   115,   113,   114,   118,
 | ||
|    213,   215,     0,     0,     0,   283,     0,     0,     0,     0,
 | ||
|      0,   161,   147,   159,     0,   164,   165,     0,     0,     0,
 | ||
|      0,     0,   128,   126,   230,   111,   228,     0,   241,     0,
 | ||
|      0,     0,     0,     0,     0,     0,     0,     0,     0,   309,
 | ||
|      0,     0,     0,   293,   294,     0,     0,     0,     0,   291,
 | ||
|      0,   121,     0,     0,     0,     0,     0,     0,     0,     0,
 | ||
|      0,   191,   168,     0,     0,     0,     0,   123,   129,   127,
 | ||
|     64,     0,   117,     0,   250,     0,     0,   282,     0,     0,
 | ||
|    121,   122,   121,     0,     0,     0,     0,     0,     0,   287,
 | ||
|    288,   282,     0,   307,     0,   198,     0,     0,   182,     0,
 | ||
|      0,     0,     0,   167,     0,     0,     0,    63,   227,   229,
 | ||
|    111,   124,     0,     0,     0,     0,     0,   289,   290,   303,
 | ||
|    305,   284,     0,     0,   292,   295,   296,     0,   121,     0,
 | ||
|      0,     0,   188,     0,     0,   184,   185,   181,    64,   125,
 | ||
|    119,   252,     0,     0,   111,     0,   117,   278,     0,   117,
 | ||
|    308,   186,   187,     0,     0,     0,   226,     0,   232,     0,
 | ||
|    271,     0,     0,   280,     0,     0,   279,   298,   183,   189,
 | ||
|    190,   120,   269,     0,   270,     0,   111,     0,     0,     0,
 | ||
|    281,     0,     0,     0,     0,   276,     0,     0,   275,     0,
 | ||
|    272,     0,     0,     0
 | ||
| };
 | ||
| 
 | ||
| static const short yydefgoto[] = {   256,
 | ||
|    257,   258,   282,   299,   156,   157,    76,   509,    12,    77,
 | ||
|     14,    15,    39,    40,    41,    45,    51,   114,   124,   326,
 | ||
|    222,   400,   329,   559,   379,   423,   541,   356,   424,    78,
 | ||
|    158,   133,   148,   134,   135,   107,   345,   368,   346,   117,
 | ||
|     85,   149,   592,    16,    17,    19,    18,   261,   334,   335,
 | ||
|     60,    22,    58,    98,   427,   428,   125,   164,    52,    93,
 | ||
|     53,    46,   430,   369,    80,   371,   266,    54,    89,    90,
 | ||
|    216,   563,   128,   305,   517,   440,   217,   218,   219,   220
 | ||
| };
 | ||
| 
 | ||
| static const short yypact[] = {    42,
 | ||
| -32768,-32768,-32768,-32768,-32768,-32768,-32768,   -21,  -131,    60,
 | ||
|    -93,   105,   -22,   182,-32768,   525,-32768,    46,   168,   -12,
 | ||
|     19,-32768,     1,   152,-32768,  1277,-32768,-32768,-32768,-32768,
 | ||
| -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    90,    90,
 | ||
|    100,-32768,-32768,-32768,    90,-32768,-32768,-32768,-32768,-32768,
 | ||
|     90,   186,-32768,    12,   187,   201,   209,-32768,-32768,-32768,
 | ||
| -32768,-32768,    93,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 | ||
| -32768,   252,   254,     2,   907,-32768,-32768,-32768,    13,-32768,
 | ||
|    225,   225,   150,-32768,    76,   116,   116,-32768,-32768,   108,
 | ||
| -32768,-32768,-32768,-32768,-32768,-32768,-32768,   -79,  1027,-32768,
 | ||
|    111,   114,   947,    93,-32768,    13,  -104,-32768,  1027,    76,
 | ||
|     76,-32768,-32768,  1067,-32768,-32768,  1299,   266,-32768,-32768,
 | ||
| -32768,-32768,-32768,  1330,-32768,   -16,  1572,-32768,   256,-32768,
 | ||
| -32768,    13,-32768,   139,   144,  1370,  1370,   132,   -95,  1370,
 | ||
| -32768,   145,  1299,  1370,    93,   147,    13,   311,-32768,    43,
 | ||
|    290,   293,   298,   299,   302,   247,   303,   724,-32768,-32768,
 | ||
|     35,-32768,-32768,-32768,-32768,-32768,   258,  1450,    70,   305,
 | ||
|    116,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 | ||
| -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   317,   405,
 | ||
|   1370,  1370,  1370,  1370,-32768,-32768,-32768,-32768,-32768,-32768,
 | ||
| -32768,-32768,-32768,-32768,-32768,-32768,  1370,  1370,  1370,  1370,
 | ||
|   1370,  1370,  1370,  1370,  1370,-32768,   116,-32768,    34,-32768,
 | ||
| -32768,   131,  1107,-32768,     6,   -46,-32768,   164,    13,-32768,
 | ||
| -32768,    13,  1067,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 | ||
| -32768,-32768,-32768,-32768,   317,   405,   173,   178,   179,   189,
 | ||
|    192,  1179,  1481,   987,   314,   193,   197,   198,-32768,-32768,
 | ||
|    202,   203,-32768,    93,   565,-32768,   699,   699,-32768,   699,
 | ||
|   1330,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 | ||
| -32768,  1370,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 | ||
| -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1370,   113,
 | ||
|    137,-32768,   565,   -10,   205,   207,   208,   210,   218,   219,
 | ||
|    565,   565,   330,  1330,  1370,  1370,-32768,-32768,-32768,-32768,
 | ||
| -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   106,-32768,
 | ||
| -32768,-32768,   106,   202,   202,   331,   220,   221,  1299,  1299,
 | ||
|   1299,  1299,  1299,-32768,-32768,   -41,  1005,   -61,-32768,   -91,
 | ||
| -32768,  1299,  1299,  1299,   -13,-32768,  1219,-32768,-32768,-32768,
 | ||
| -32768,-32768,-32768,-32768,-32768,   313,  1299,-32768,-32768,-32768,
 | ||
| -32768,   226,-32768,   227,   699,   565,   565,    23,-32768,    24,
 | ||
| -32768,-32768,   699,   223,  1370,  1370,  1370,  1370,  1370,   232,
 | ||
|    233,  1370,   699,   565,   234,-32768,-32768,-32768,-32768,-32768,
 | ||
| -32768,-32768,  1370,  1299,  1299,-32768,   235,   236,   237,   239,
 | ||
|   1299,-32768,   231,   724,   -76,-32768,-32768,   241,   242,   352,
 | ||
|    369,   388,-32768,   202,-32768,    13,   246,   243,-32768,   374,
 | ||
|    -59,   380,   385,   253,   257,   270,   699,   414,   699,   272,
 | ||
|    273,   699,   278,    13,-32768,   280,   282,   699,   699,    13,
 | ||
|    283,   287,  1370,  -112,   288,   289,   -33,  1299,  1299,  1299,
 | ||
|   1299,-32768,-32768,   294,  1299,  1299,  1370,-32768,-32768,-32768,
 | ||
|     79,  1259,-32768,   292,-32768,   699,   699,  1370,   699,   699,
 | ||
|    287,-32768,   287,  1370,   699,   307,  1370,  1370,  1370,-32768,
 | ||
| -32768,  1370,   392,-32768,   565,-32768,  1299,  1299,-32768,   308,
 | ||
|    295,   309,   310,-32768,   301,   315,     7,-32768,-32768,-32768,
 | ||
|     13,    10,   427,   318,   306,   565,    52,-32768,-32768,-32768,
 | ||
| -32768,-32768,   316,   699,-32768,-32768,-32768,    71,   287,   322,
 | ||
|    325,  1299,-32768,  1299,  1299,-32768,-32768,-32768,    79,-32768,
 | ||
|    407,-32768,   444,    -4,-32768,  1370,-32768,-32768,   323,-32768,
 | ||
| -32768,-32768,-32768,   327,   328,   329,-32768,   464,-32768,   699,
 | ||
| -32768,   859,    -3,   131,   565,   -14,-32768,   106,-32768,-32768,
 | ||
| -32768,-32768,-32768,   334,-32768,   859,-32768,   452,   465,   336,
 | ||
|    131,   699,   699,   468,   416,-32768,   699,   471,-32768,   699,
 | ||
| -32768,   490,   491,-32768
 | ||
| };
 | ||
| 
 | ||
| static const short yypgoto[] = {   365,
 | ||
|    366,   367,   255,   251,  -168,-32768,     0,   -40,   408,    14,
 | ||
| -32768,-32768,-32768,-32768,    40,-32768,-32768,-32768,  -158,-32768,
 | ||
|   -406,-32768,  -226,-32768,  -290,     3,-32768,  -317,-32768,-32768,
 | ||
|    -25,   296,  -119,-32768,   409,   413,   -60,  -155,  -231,   166,
 | ||
|    119,   284,-32768,-32768,   504,-32768,-32768,-32768,-32768,-32768,
 | ||
| -32768,-32768,-32768,-32768,-32768,-32768,   435,-32768,-32768,-32768,
 | ||
| -32768,-32768,-32768,  -525,  -139,    47,  -183,-32768,   474,-32768,
 | ||
| -32768,-32768,-32768,-32768,    37,   124,-32768,-32768,-32768,-32768
 | ||
| };
 | ||
| 
 | ||
| 
 | ||
| #define	YYLAST		1705
 | ||
| 
 | ||
| 
 | ||
| static const short yytable[] = {    11,
 | ||
|     79,   270,   259,   333,   161,   102,   269,   269,   234,   302,
 | ||
|    381,   162,   271,    13,    23,    11,   401,   402,   260,   471,
 | ||
|    421,   348,   350,   578,   306,   307,   308,   309,   310,    13,
 | ||
|     20,   313,    88,   437,   439,   108,   574,   109,   496,   422,
 | ||
|     91,  -200,   140,   421,    21,   -54,   -54,   -54,   -54,   106,
 | ||
|    580,   140,    25,   141,     2,   411,   159,     4,   314,   -66,
 | ||
|      1,     2,   228,     3,     4,     5,   417,   129,   235,   236,
 | ||
|    411,     6,     7,   132,   130,   438,   438,   106,    81,    82,
 | ||
|    267,   464,   231,   132,    86,   411,   268,   411,   147,    11,
 | ||
|     87,    43,     8,    44,   416,     9,   475,     1,   147,    10,
 | ||
|      3,   108,     5,   109,   539,   411,   470,   115,   116,   331,
 | ||
|    225,   226,   412,   484,   229,   415,    24,   499,   232,   396,
 | ||
|    397,   398,    26,    27,   399,   370,     1,   370,   370,     3,
 | ||
|    370,     5,   395,    55,    83,   431,    84,   108,   564,   109,
 | ||
|    163,   383,   265,   396,   397,   398,   315,   316,   399,   561,
 | ||
|    575,   375,    57,   108,   108,   109,   109,   538,   103,   330,
 | ||
|    108,   494,   109,   370,    56,   300,   301,   265,   303,    92,
 | ||
|    581,   370,   370,    59,   262,   118,   119,   120,   121,   122,
 | ||
|    123,   304,   265,   265,   265,   265,   265,   311,   312,   265,
 | ||
|    520,   112,   521,   113,   393,   317,   318,   132,   546,   110,
 | ||
|    111,   443,   547,   445,   446,   447,    88,   147,    95,    47,
 | ||
|     48,    49,   319,   320,    50,   321,   322,   546,   323,   324,
 | ||
|    325,   550,    96,    28,    29,    30,    31,    32,    33,    34,
 | ||
|     97,    35,    36,    37,    38,   370,   370,   370,   551,   396,
 | ||
|    397,   398,    99,   370,   399,   147,   512,   317,   318,   237,
 | ||
|    238,   239,   240,   370,   370,   100,   376,   101,   259,   378,
 | ||
|    108,    84,   109,   136,   319,   320,   137,   321,   322,   160,
 | ||
|    323,   324,   325,   377,   260,   143,   144,   221,   406,   407,
 | ||
|    408,   409,   410,   380,   108,   223,   109,   227,   147,   394,
 | ||
|    265,   418,   419,   420,   224,   230,   233,   370,   -55,   370,
 | ||
|    522,   -56,   370,   525,   526,   527,   -59,   -58,   370,   370,
 | ||
|    -57,   241,   263,   372,   373,   269,   374,    61,    62,   332,
 | ||
|    566,   414,   339,   568,    36,    37,    38,   340,   341,     1,
 | ||
|      2,   426,     3,     4,     5,   351,   370,   370,   342,   370,
 | ||
|    370,   343,   352,   455,   456,   370,   353,   354,   355,   382,
 | ||
|    462,   384,   357,   385,   386,   370,   387,   390,   391,   265,
 | ||
|    444,   265,   265,   265,   388,   389,   450,   392,   403,   404,
 | ||
|    405,   429,   432,   433,   442,   562,   370,   454,   448,   449,
 | ||
|    453,   458,   459,   460,   370,   461,   463,   465,   466,   467,
 | ||
|    468,   469,   472,   473,   576,   474,   476,   500,   501,   502,
 | ||
|    503,   477,   478,   479,   505,   506,   272,   273,   274,   275,
 | ||
|    276,   277,   278,   279,   280,   281,   480,   482,   484,   485,
 | ||
|    370,   434,   435,   436,   487,   370,   488,   495,   489,   441,
 | ||
|    283,   284,   492,   493,   497,   498,   530,   531,   513,   451,
 | ||
|    452,   507,   370,   370,   438,   533,   511,   370,   542,   504,
 | ||
|    370,   536,   516,   524,   532,   534,   535,   544,   265,   558,
 | ||
|    560,   265,   265,   265,   543,   537,   516,   572,   582,   548,
 | ||
|    508,   554,   552,   555,   556,   553,   567,   569,   570,   571,
 | ||
|    579,   583,   584,   481,   587,   483,   588,   590,   486,   593,
 | ||
|    594,   213,   214,   215,   490,   491,   338,   127,   557,   337,
 | ||
|    285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
 | ||
|    295,   296,   297,   298,   540,   139,   336,   142,   328,    42,
 | ||
|    565,   126,   514,   515,  -199,   518,   519,    94,   528,   457,
 | ||
|      0,   523,     0,     0,     0,     0,     0,     0,   508,     0,
 | ||
|      0,   529,   -66,     1,     2,     0,     3,     4,     5,     0,
 | ||
|      0,     0,     0,     0,     6,     7,     0,     0,     0,     0,
 | ||
|      0,     0,   545,     0,     0,     0,     0,   358,   359,     0,
 | ||
|    549,    61,    62,   360,     0,     8,     0,     0,     9,     0,
 | ||
|      0,     0,    10,     1,     2,     0,     3,     4,     5,   361,
 | ||
|    362,   363,     0,     0,     0,     0,     0,     0,     0,     0,
 | ||
|      0,     0,     0,     0,   364,   365,   573,     0,     0,     0,
 | ||
|      0,   577,     0,     0,     0,     0,     0,     0,     0,     0,
 | ||
|      0,   366,     0,     0,     0,     0,     0,     0,   585,   586,
 | ||
|      0,     0,     0,   589,     0,     0,   591,   174,   175,   176,
 | ||
|    177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
 | ||
|    187,   188,   245,   246,     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,   247,
 | ||
|    195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
 | ||
|    205,   206,     0,   248,     0,   249,   250,   251,     0,     0,
 | ||
|      0,   358,   359,     0,     0,    61,    62,   360,     0,     0,
 | ||
|      0,     0,   108,     0,   109,     0,     0,     1,     2,   367,
 | ||
|      3,     4,     5,   361,   362,   363,     0,     0,     0,     0,
 | ||
|     61,    62,     0,     0,     0,     0,     0,     0,   364,   365,
 | ||
|      0,     0,     1,     2,     0,     3,     4,     5,   242,     0,
 | ||
|      0,     0,     0,     0,     0,   366,     0,     0,     0,     0,
 | ||
|      0,     0,     0,   243,   244,     0,     0,     0,     0,     0,
 | ||
|      0,   174,   175,   176,   177,   178,   179,   180,   181,   182,
 | ||
|    183,   184,   185,   186,   187,   188,   245,   246,     0,     0,
 | ||
|      0,     0,     0,     0,     0,     0,   174,   175,   176,   177,
 | ||
|    178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
 | ||
|    188,   245,   246,   247,   195,   196,   197,   198,   199,   200,
 | ||
|    201,   202,   203,   204,   205,   206,     0,   248,     0,   249,
 | ||
|    250,   251,     0,     0,     0,     0,     0,     0,   247,   195,
 | ||
|    196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
 | ||
|    206,     0,   248,   367,   249,   250,   251,     0,     0,     0,
 | ||
|      0,   358,   359,     0,     0,     0,     0,   360,     0,     0,
 | ||
|      0,   108,     0,   109,     0,   252,     0,     0,   253,     0,
 | ||
|    254,     0,   255,   361,   362,   363,     0,     0,     0,     0,
 | ||
|      0,     0,     0,     0,     0,     0,     0,     0,   364,   365,
 | ||
|      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 | ||
|      0,     0,     0,    61,    62,   366,   104,    64,    65,    66,
 | ||
|     67,    68,    69,    70,     0,     1,     2,     0,     3,     4,
 | ||
|      5,   174,   175,   176,   177,   178,   179,   180,   181,   182,
 | ||
|    183,   184,   185,   186,   187,   188,   245,   246,     0,     0,
 | ||
|      0,     0,     0,    61,    62,    71,   104,    64,    65,    66,
 | ||
|     67,    68,    69,    70,     0,     1,     2,     0,     3,     4,
 | ||
|      5,     0,     0,   247,   195,   196,   197,   198,   199,   200,
 | ||
|    201,   202,   203,   204,   205,   206,     0,   248,     0,   249,
 | ||
|    250,   251,     0,    61,    62,    71,   104,   150,   151,   152,
 | ||
|    153,   154,   155,    70,     0,     1,     2,     0,     3,     4,
 | ||
|      5,    61,    62,   367,   104,   150,   151,   152,   153,   154,
 | ||
|    155,    70,     0,     1,     2,     0,     3,     4,     5,     0,
 | ||
|      0,     0,     0,    61,    62,    71,   104,    64,    65,    66,
 | ||
|     67,    68,    69,    70,     0,     1,     2,     0,     3,     4,
 | ||
|      5,     0,     0,    71,     0,    72,     0,     0,    73,     0,
 | ||
|      0,    74,     0,    75,   105,   131,     0,     0,     0,     0,
 | ||
|      0,     0,     0,    61,    62,    71,   145,    64,    65,    66,
 | ||
|     67,    68,    69,    70,     0,     1,     2,     0,     3,     4,
 | ||
|      5,     0,     0,     0,     0,    72,     0,     0,    73,     0,
 | ||
|      0,    74,     0,    75,   138,     0,     0,     0,     0,     0,
 | ||
|      0,     0,     0,    61,    62,    71,   104,    64,    65,    66,
 | ||
|     67,    68,    69,    70,     0,     1,     2,     0,     3,     4,
 | ||
|      5,     0,     0,     0,     0,    72,     0,     0,    73,     0,
 | ||
|      0,    74,     0,    75,   349,   327,     0,     0,     0,     0,
 | ||
|      0,     0,     0,    72,     0,    71,    73,     0,     0,    74,
 | ||
|      0,    75,   413,     0,     0,     0,     0,     0,     0,     0,
 | ||
|      0,     0,     0,     0,     0,    72,     0,     0,    73,     0,
 | ||
|      0,    74,     0,    75,     0,    61,    62,   146,   104,   150,
 | ||
|    151,   152,   153,   154,   155,    70,     0,     1,     2,     0,
 | ||
|      3,     4,     5,     0,     0,     0,     0,     0,     0,     0,
 | ||
|      0,     0,     0,     0,     0,    72,     0,     0,    73,     0,
 | ||
|      0,    74,     0,    75,     0,    61,    62,    71,   104,    64,
 | ||
|     65,    66,    67,    68,    69,    70,     0,     1,     2,     0,
 | ||
|      3,     4,     5,     0,     0,     0,     0,     0,     0,     0,
 | ||
|      0,     0,     0,     0,     0,    72,     0,   425,    73,     0,
 | ||
|      0,    74,     0,    75,     0,    61,    62,    71,   104,    64,
 | ||
|     65,    66,    67,    68,    69,    70,     0,     1,     2,     0,
 | ||
|      3,     4,     5,    61,    62,     0,    63,    64,    65,    66,
 | ||
|     67,    68,    69,    70,     0,     1,     2,   510,     3,     4,
 | ||
|      5,     0,     0,     0,     0,    61,    62,    71,   104,   150,
 | ||
|    151,   152,   153,   154,   155,    70,     0,     1,     2,     0,
 | ||
|      3,     4,     5,     0,     0,    71,     0,    72,     0,     0,
 | ||
|     73,     0,   344,    74,     0,    75,    61,    62,     0,   145,
 | ||
|     64,    65,    66,    67,    68,    69,    70,    71,     1,     2,
 | ||
|      0,     3,     4,     5,     0,     0,     0,     0,     0,     0,
 | ||
|      0,     0,     0,     0,     0,     0,     0,    72,     0,     0,
 | ||
|     73,     0,     0,    74,     0,    75,    61,    62,    71,   104,
 | ||
|     64,    65,    66,    67,    68,    69,    70,     0,     1,     2,
 | ||
|      0,     3,     4,     5,     0,     0,     0,     0,     0,     0,
 | ||
|      0,     0,     0,     0,     0,     0,     0,    72,     0,     0,
 | ||
|     73,     0,     0,    74,     0,    75,     0,     0,    71,     0,
 | ||
|      0,     0,     0,     0,     0,    72,     0,     0,    73,     0,
 | ||
|      0,    74,     0,    75,     0,     0,     0,     0,     0,     0,
 | ||
|      0,     0,     0,     0,     0,     0,     0,    72,     0,     0,
 | ||
|     73,     0,     0,    74,     0,    75,    61,    62,     0,   264,
 | ||
|     64,    65,    66,    67,    68,    69,    70,     0,     1,     2,
 | ||
|      0,     3,     4,     5,     0,     0,     0,     0,    72,     0,
 | ||
|      0,    73,     0,     0,    74,     0,    75,    61,    62,     0,
 | ||
|    104,   150,   151,   152,   153,   154,   155,    70,    71,     1,
 | ||
|      2,     0,     3,     4,     5,     0,     0,     0,     0,     0,
 | ||
|      0,     0,     0,     0,     0,     0,     0,     0,    72,     0,
 | ||
|      0,    73,     0,     0,    74,     0,    75,     0,     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,     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,    72,     0,
 | ||
|      0,    73,     0,     0,    74,     0,    75,   165,     0,     0,
 | ||
|      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 | ||
|      0,     0,     0,     0,     0,     0,   166,   167,     0,    72,
 | ||
|      0,     0,    73,     0,     0,    74,     0,   347,   168,   169,
 | ||
|    170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
 | ||
|    180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
 | ||
|    190,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 | ||
|      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
 | ||
|      0,   191,   192,   193,     0,     0,   194,   195,   196,   197,
 | ||
|    198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
 | ||
|    208,   209,   210,   211,   212
 | ||
| };
 | ||
| 
 | ||
| static const short yycheck[] = {     0,
 | ||
|     26,   170,   158,   230,   124,     4,    11,    11,   148,   193,
 | ||
|    301,    28,   171,     0,   146,    16,   334,   335,   158,   426,
 | ||
|     34,   253,   254,    38,   208,   209,   210,   211,   212,    16,
 | ||
|     52,   215,    21,    11,    11,   148,   562,   150,   151,    53,
 | ||
|     29,     0,   147,    34,    66,     3,     4,     5,     6,    75,
 | ||
|    576,   147,   146,   158,    20,   147,   117,    23,   217,    18,
 | ||
|     19,    20,   158,    22,    23,    24,   158,   147,    26,    27,
 | ||
|    147,    30,    31,    99,   154,    53,    53,   103,    39,    40,
 | ||
|     11,   158,   143,   109,    45,   147,    17,   147,   114,    90,
 | ||
|     51,    46,    51,    48,   156,    54,   156,    19,   124,    58,
 | ||
|     22,   148,    24,   150,   511,   147,   424,    32,    33,   156,
 | ||
|    136,   137,   154,   147,   140,   347,    57,   151,   144,   134,
 | ||
|    135,   136,    18,   146,   139,   265,    19,   267,   268,    22,
 | ||
|    270,    24,   316,   146,    35,   367,    37,   148,   545,   150,
 | ||
|    157,   152,   168,   134,   135,   136,   113,   114,   139,   154,
 | ||
|    154,   271,   152,   148,   148,   150,   150,   151,   157,   154,
 | ||
|    148,   452,   150,   303,   146,   191,   192,   193,   194,   158,
 | ||
|    577,   311,   312,    22,   161,    60,    61,    62,    63,    64,
 | ||
|     65,   207,   208,   209,   210,   211,   212,   213,   214,   215,
 | ||
|    481,    42,   483,    44,   314,   117,   118,   223,   147,    81,
 | ||
|     82,   385,   151,   387,   388,   389,    21,   233,    22,    42,
 | ||
|     43,    44,   134,   135,    47,   137,   138,   147,   140,   141,
 | ||
|    142,   151,    22,    42,    43,    44,    45,    46,    47,    48,
 | ||
|     22,    50,   143,   144,   145,   375,   376,   377,   529,   134,
 | ||
|    135,   136,   150,   383,   139,   271,   473,   117,   118,     3,
 | ||
|      4,     5,     6,   393,   394,     4,   282,     4,   414,   147,
 | ||
|    148,    37,   150,   153,   134,   135,   153,   137,   138,     4,
 | ||
|    140,   141,   142,   299,   414,   110,   111,    22,   339,   340,
 | ||
|    341,   342,   343,   147,   148,   147,   150,   156,   314,   315,
 | ||
|    316,   352,   353,   354,   151,   151,   150,   437,     9,   439,
 | ||
|    484,     9,   442,   487,   488,   489,     9,     9,   448,   449,
 | ||
|      9,     9,    55,   267,   268,    11,   270,     7,     8,   156,
 | ||
|    547,   347,   150,   550,   143,   144,   145,   150,   150,    19,
 | ||
|     20,   357,    22,    23,    24,    22,   476,   477,   150,   479,
 | ||
|    480,   150,   150,   404,   405,   485,   150,   150,   147,   303,
 | ||
|    411,   147,   150,   147,   147,   495,   147,   311,   312,   385,
 | ||
|    386,   387,   388,   389,   147,   147,   392,    38,    38,   150,
 | ||
|    150,    59,   147,   147,   152,   544,   516,   403,   147,   147,
 | ||
|    147,   147,   147,   147,   524,   147,   156,   147,   147,    38,
 | ||
|     22,     4,   147,   151,   563,    22,    17,   458,   459,   460,
 | ||
|    461,    17,   150,   147,   465,   466,    90,    91,    92,    93,
 | ||
|     94,    95,    96,    97,    98,    99,   147,     4,   147,   147,
 | ||
|    560,   375,   376,   377,   147,   565,   147,   453,   147,   383,
 | ||
|     26,    27,   150,   147,   147,   147,   497,   498,   147,   393,
 | ||
|    394,   467,   582,   583,    53,   151,   472,   587,    22,   156,
 | ||
|    590,   151,   478,   147,   147,   147,   147,   152,   484,    53,
 | ||
|     17,   487,   488,   489,   147,   151,   492,     4,    17,   154,
 | ||
|    471,   532,   151,   534,   535,   151,   154,   151,   151,   151,
 | ||
|    147,    17,   147,   437,    17,   439,    71,    17,   442,     0,
 | ||
|      0,   127,   127,   127,   448,   449,   246,    90,   539,   245,
 | ||
|     96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
 | ||
|    106,   107,   108,   109,   512,   103,   233,   109,   223,    16,
 | ||
|    546,    87,   476,   477,     0,   479,   480,    54,   492,   406,
 | ||
|     -1,   485,    -1,    -1,    -1,    -1,    -1,    -1,   539,    -1,
 | ||
|     -1,   495,    18,    19,    20,    -1,    22,    23,    24,    -1,
 | ||
|     -1,    -1,    -1,    -1,    30,    31,    -1,    -1,    -1,    -1,
 | ||
|     -1,    -1,   516,    -1,    -1,    -1,    -1,     3,     4,    -1,
 | ||
|    524,     7,     8,     9,    -1,    51,    -1,    -1,    54,    -1,
 | ||
|     -1,    -1,    58,    19,    20,    -1,    22,    23,    24,    25,
 | ||
|     26,    27,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 | ||
|     -1,    -1,    -1,    -1,    40,    41,   560,    -1,    -1,    -1,
 | ||
|     -1,   565,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 | ||
|     -1,    57,    -1,    -1,    -1,    -1,    -1,    -1,   582,   583,
 | ||
|     -1,    -1,    -1,   587,    -1,    -1,   590,    73,    74,    75,
 | ||
|     76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
 | ||
|     86,    87,    88,    89,    -1,    -1,    -1,    -1,    -1,    -1,
 | ||
|     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 | ||
|     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   115,
 | ||
|    116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
 | ||
|    126,   127,    -1,   129,    -1,   131,   132,   133,    -1,    -1,
 | ||
|     -1,     3,     4,    -1,    -1,     7,     8,     9,    -1,    -1,
 | ||
|     -1,    -1,   148,    -1,   150,    -1,    -1,    19,    20,   155,
 | ||
|     22,    23,    24,    25,    26,    27,    -1,    -1,    -1,    -1,
 | ||
|      7,     8,    -1,    -1,    -1,    -1,    -1,    -1,    40,    41,
 | ||
|     -1,    -1,    19,    20,    -1,    22,    23,    24,    25,    -1,
 | ||
|     -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    -1,    -1,
 | ||
|     -1,    -1,    -1,    40,    41,    -1,    -1,    -1,    -1,    -1,
 | ||
|     -1,    73,    74,    75,    76,    77,    78,    79,    80,    81,
 | ||
|     82,    83,    84,    85,    86,    87,    88,    89,    -1,    -1,
 | ||
|     -1,    -1,    -1,    -1,    -1,    -1,    73,    74,    75,    76,
 | ||
|     77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
 | ||
|     87,    88,    89,   115,   116,   117,   118,   119,   120,   121,
 | ||
|    122,   123,   124,   125,   126,   127,    -1,   129,    -1,   131,
 | ||
|    132,   133,    -1,    -1,    -1,    -1,    -1,    -1,   115,   116,
 | ||
|    117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
 | ||
|    127,    -1,   129,   155,   131,   132,   133,    -1,    -1,    -1,
 | ||
|     -1,     3,     4,    -1,    -1,    -1,    -1,     9,    -1,    -1,
 | ||
|     -1,   148,    -1,   150,    -1,   152,    -1,    -1,   155,    -1,
 | ||
|    157,    -1,   159,    25,    26,    27,    -1,    -1,    -1,    -1,
 | ||
|     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    40,    41,
 | ||
|     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 | ||
|     -1,    -1,    -1,     7,     8,    57,    10,    11,    12,    13,
 | ||
|     14,    15,    16,    17,    -1,    19,    20,    -1,    22,    23,
 | ||
|     24,    73,    74,    75,    76,    77,    78,    79,    80,    81,
 | ||
|     82,    83,    84,    85,    86,    87,    88,    89,    -1,    -1,
 | ||
|     -1,    -1,    -1,     7,     8,    49,    10,    11,    12,    13,
 | ||
|     14,    15,    16,    17,    -1,    19,    20,    -1,    22,    23,
 | ||
|     24,    -1,    -1,   115,   116,   117,   118,   119,   120,   121,
 | ||
|    122,   123,   124,   125,   126,   127,    -1,   129,    -1,   131,
 | ||
|    132,   133,    -1,     7,     8,    49,    10,    11,    12,    13,
 | ||
|     14,    15,    16,    17,    -1,    19,    20,    -1,    22,    23,
 | ||
|     24,     7,     8,   155,    10,    11,    12,    13,    14,    15,
 | ||
|     16,    17,    -1,    19,    20,    -1,    22,    23,    24,    -1,
 | ||
|     -1,    -1,    -1,     7,     8,    49,    10,    11,    12,    13,
 | ||
|     14,    15,    16,    17,    -1,    19,    20,    -1,    22,    23,
 | ||
|     24,    -1,    -1,    49,    -1,   149,    -1,    -1,   152,    -1,
 | ||
|     -1,   155,    -1,   157,   158,    39,    -1,    -1,    -1,    -1,
 | ||
|     -1,    -1,    -1,     7,     8,    49,    10,    11,    12,    13,
 | ||
|     14,    15,    16,    17,    -1,    19,    20,    -1,    22,    23,
 | ||
|     24,    -1,    -1,    -1,    -1,   149,    -1,    -1,   152,    -1,
 | ||
|     -1,   155,    -1,   157,   158,    -1,    -1,    -1,    -1,    -1,
 | ||
|     -1,    -1,    -1,     7,     8,    49,    10,    11,    12,    13,
 | ||
|     14,    15,    16,    17,    -1,    19,    20,    -1,    22,    23,
 | ||
|     24,    -1,    -1,    -1,    -1,   149,    -1,    -1,   152,    -1,
 | ||
|     -1,   155,    -1,   157,   158,    39,    -1,    -1,    -1,    -1,
 | ||
|     -1,    -1,    -1,   149,    -1,    49,   152,    -1,    -1,   155,
 | ||
|     -1,   157,   158,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 | ||
|     -1,    -1,    -1,    -1,    -1,   149,    -1,    -1,   152,    -1,
 | ||
|     -1,   155,    -1,   157,    -1,     7,     8,   121,    10,    11,
 | ||
|     12,    13,    14,    15,    16,    17,    -1,    19,    20,    -1,
 | ||
|     22,    23,    24,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 | ||
|     -1,    -1,    -1,    -1,    -1,   149,    -1,    -1,   152,    -1,
 | ||
|     -1,   155,    -1,   157,    -1,     7,     8,    49,    10,    11,
 | ||
|     12,    13,    14,    15,    16,    17,    -1,    19,    20,    -1,
 | ||
|     22,    23,    24,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 | ||
|     -1,    -1,    -1,    -1,    -1,   149,    -1,    39,   152,    -1,
 | ||
|     -1,   155,    -1,   157,    -1,     7,     8,    49,    10,    11,
 | ||
|     12,    13,    14,    15,    16,    17,    -1,    19,    20,    -1,
 | ||
|     22,    23,    24,     7,     8,    -1,    10,    11,    12,    13,
 | ||
|     14,    15,    16,    17,    -1,    19,    20,    39,    22,    23,
 | ||
|     24,    -1,    -1,    -1,    -1,     7,     8,    49,    10,    11,
 | ||
|     12,    13,    14,    15,    16,    17,    -1,    19,    20,    -1,
 | ||
|     22,    23,    24,    -1,    -1,    49,    -1,   149,    -1,    -1,
 | ||
|    152,    -1,   154,   155,    -1,   157,     7,     8,    -1,    10,
 | ||
|     11,    12,    13,    14,    15,    16,    17,    49,    19,    20,
 | ||
|     -1,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    -1,
 | ||
|     -1,    -1,    -1,    -1,    -1,    -1,    -1,   149,    -1,    -1,
 | ||
|    152,    -1,    -1,   155,    -1,   157,     7,     8,    49,    10,
 | ||
|     11,    12,    13,    14,    15,    16,    17,    -1,    19,    20,
 | ||
|     -1,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    -1,
 | ||
|     -1,    -1,    -1,    -1,    -1,    -1,    -1,   149,    -1,    -1,
 | ||
|    152,    -1,    -1,   155,    -1,   157,    -1,    -1,    49,    -1,
 | ||
|     -1,    -1,    -1,    -1,    -1,   149,    -1,    -1,   152,    -1,
 | ||
|     -1,   155,    -1,   157,    -1,    -1,    -1,    -1,    -1,    -1,
 | ||
|     -1,    -1,    -1,    -1,    -1,    -1,    -1,   149,    -1,    -1,
 | ||
|    152,    -1,    -1,   155,    -1,   157,     7,     8,    -1,    10,
 | ||
|     11,    12,    13,    14,    15,    16,    17,    -1,    19,    20,
 | ||
|     -1,    22,    23,    24,    -1,    -1,    -1,    -1,   149,    -1,
 | ||
|     -1,   152,    -1,    -1,   155,    -1,   157,     7,     8,    -1,
 | ||
|     10,    11,    12,    13,    14,    15,    16,    17,    49,    19,
 | ||
|     20,    -1,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,
 | ||
|     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   149,    -1,
 | ||
|     -1,   152,    -1,    -1,   155,    -1,   157,    -1,    -1,    49,
 | ||
|     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 | ||
|     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 | ||
|     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 | ||
|     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 | ||
|     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 | ||
|     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 | ||
|     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   149,    -1,
 | ||
|     -1,   152,    -1,    -1,   155,    -1,   157,    36,    -1,    -1,
 | ||
|     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 | ||
|     -1,    -1,    -1,    -1,    -1,    -1,    55,    56,    -1,   149,
 | ||
|     -1,    -1,   152,    -1,    -1,   155,    -1,   157,    67,    68,
 | ||
|     69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
 | ||
|     79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
 | ||
|     89,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 | ||
|     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
 | ||
|     -1,   110,   111,   112,    -1,    -1,   115,   116,   117,   118,
 | ||
|    119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
 | ||
|    129,   130,   131,   132,   133
 | ||
| };
 | ||
| /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
 | ||
| #line 3 "/usr/share/bison.simple"
 | ||
| /* This file comes from bison-1.28.  */
 | ||
| 
 | ||
| /* Skeleton output parser for bison,
 | ||
|    Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
 | ||
| 
 | ||
|    This program is free software; you can redistribute it and/or modify
 | ||
|    it under the terms of the GNU General Public License as published by
 | ||
|    the Free Software Foundation; either version 2, or (at your option)
 | ||
|    any later version.
 | ||
| 
 | ||
|    This program is distributed in the hope that it will be useful,
 | ||
|    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||
|    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||
|    GNU General Public License for more details.
 | ||
| 
 | ||
|    You should have received a copy of the GNU General Public License
 | ||
|    along with this program; if not, write to the Free Software
 | ||
|    Foundation, Inc., 59 Temple Place - Suite 330,
 | ||
|    Boston, MA 02111-1307, USA.  */
 | ||
| 
 | ||
| /* As a special exception, when this file is copied by Bison into a
 | ||
|    Bison output file, you may use that output file without restriction.
 | ||
|    This special exception was added by the Free Software Foundation
 | ||
|    in version 1.24 of Bison.  */
 | ||
| 
 | ||
| /* This is the parser code that is written into each bison parser
 | ||
|   when the %semantic_parser declaration is not specified in the grammar.
 | ||
|   It was written by Richard Stallman by simplifying the hairy parser
 | ||
|   used when %semantic_parser is specified.  */
 | ||
| 
 | ||
| #ifndef YYSTACK_USE_ALLOCA
 | ||
| #ifdef alloca
 | ||
| #define YYSTACK_USE_ALLOCA
 | ||
| #else /* alloca not defined */
 | ||
| #ifdef __GNUC__
 | ||
| #define YYSTACK_USE_ALLOCA
 | ||
| #define alloca __builtin_alloca
 | ||
| #else /* not GNU C.  */
 | ||
| #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
 | ||
| #define YYSTACK_USE_ALLOCA
 | ||
| #include <alloca.h>
 | ||
| #else /* not sparc */
 | ||
| /* We think this test detects Watcom and Microsoft C.  */
 | ||
| /* This used to test MSDOS, but that is a bad idea
 | ||
|    since that symbol is in the user namespace.  */
 | ||
| #if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
 | ||
| #if 0 /* No need for malloc.h, which pollutes the namespace;
 | ||
| 	 instead, just don't use alloca.  */
 | ||
| #include <malloc.h>
 | ||
| #endif
 | ||
| #else /* not MSDOS, or __TURBOC__ */
 | ||
| #if defined(_AIX)
 | ||
| /* I don't know what this was needed for, but it pollutes the namespace.
 | ||
|    So I turned it off.   rms, 2 May 1997.  */
 | ||
| /* #include <malloc.h>  */
 | ||
|  #pragma alloca
 | ||
| #define YYSTACK_USE_ALLOCA
 | ||
| #else /* not MSDOS, or __TURBOC__, or _AIX */
 | ||
| #if 0
 | ||
| #ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
 | ||
| 		 and on HPUX 10.  Eventually we can turn this on.  */
 | ||
| #define YYSTACK_USE_ALLOCA
 | ||
| #define alloca __builtin_alloca
 | ||
| #endif /* __hpux */
 | ||
| #endif
 | ||
| #endif /* not _AIX */
 | ||
| #endif /* not MSDOS, or __TURBOC__ */
 | ||
| #endif /* not sparc */
 | ||
| #endif /* not GNU C */
 | ||
| #endif /* alloca not defined */
 | ||
| #endif /* YYSTACK_USE_ALLOCA not defined */
 | ||
| 
 | ||
| #ifdef YYSTACK_USE_ALLOCA
 | ||
| #define YYSTACK_ALLOC alloca
 | ||
| #else
 | ||
| #define YYSTACK_ALLOC malloc
 | ||
| #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.  */
 | ||
| 
 | ||
| #define yyerrok		(yyerrstatus = 0)
 | ||
| #define yyclearin	(yychar = YYEMPTY)
 | ||
| #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.
 | ||
|    Once GCC version 2 has supplanted version 1, this can go.  */
 | ||
| #define YYFAIL		goto yyerrlab
 | ||
| #define YYRECOVERING()  (!!yyerrstatus)
 | ||
| #define YYBACKUP(token, value) \
 | ||
| do								\
 | ||
|   if (yychar == YYEMPTY && yylen == 1)				\
 | ||
|     { yychar = (token), yylval = (value);			\
 | ||
|       yychar1 = YYTRANSLATE (yychar);				\
 | ||
|       YYPOPSTACK;						\
 | ||
|       goto yybackup;						\
 | ||
|     }								\
 | ||
|   else								\
 | ||
|     { yyerror ("syntax error: cannot back up"); YYERROR; }	\
 | ||
| while (0)
 | ||
| 
 | ||
| #define YYTERROR	1
 | ||
| #define YYERRCODE	256
 | ||
| 
 | ||
| #ifndef YYPURE
 | ||
| #define YYLEX		yylex()
 | ||
| #endif
 | ||
| 
 | ||
| #ifdef YYPURE
 | ||
| #ifdef YYLSP_NEEDED
 | ||
| #ifdef YYLEX_PARAM
 | ||
| #define YYLEX		yylex(&yylval, &yylloc, YYLEX_PARAM)
 | ||
| #else
 | ||
| #define YYLEX		yylex(&yylval, &yylloc)
 | ||
| #endif
 | ||
| #else /* not YYLSP_NEEDED */
 | ||
| #ifdef YYLEX_PARAM
 | ||
| #define YYLEX		yylex(&yylval, YYLEX_PARAM)
 | ||
| #else
 | ||
| #define YYLEX		yylex(&yylval)
 | ||
| #endif
 | ||
| #endif /* not YYLSP_NEEDED */
 | ||
| #endif
 | ||
| 
 | ||
| /* If nonreentrant, generate the variables here */
 | ||
| 
 | ||
| #ifndef YYPURE
 | ||
| 
 | ||
| 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	*/
 | ||
| 
 | ||
| #ifndef	YYINITDEPTH
 | ||
| #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).  */
 | ||
| 
 | ||
| #if YYMAXDEPTH == 0
 | ||
| #undef YYMAXDEPTH
 | ||
| #endif
 | ||
| 
 | ||
| #ifndef YYMAXDEPTH
 | ||
| #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
 | ||
| 
 | ||
| /* 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;
 | ||
| {
 | ||
|   register char *f = from;
 | ||
|   register char *t = to;
 | ||
|   register int i = count;
 | ||
| 
 | ||
|   while (i-- > 0)
 | ||
|     *t++ = *f++;
 | ||
| }
 | ||
| 
 | ||
| #else /* __cplusplus */
 | ||
| 
 | ||
| /* This is the most reliable way to avoid incompatibilities
 | ||
|    in available built-in functions on various systems.  */
 | ||
| static void
 | ||
| __yy_memcpy (char *to, char *from, unsigned int count)
 | ||
| {
 | ||
|   register char *t = to;
 | ||
|   register char *f = from;
 | ||
|   register int i = count;
 | ||
| 
 | ||
|   while (i-- > 0)
 | ||
|     *t++ = *f++;
 | ||
| }
 | ||
| 
 | ||
| #endif
 | ||
| #endif
 | ||
| 
 | ||
| #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.  */
 | ||
| 
 | ||
| #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 *);
 | ||
| #else
 | ||
| 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
 | ||
| #define YYPOPSTACK   (yyvsp--, yyssp--)
 | ||
| #endif
 | ||
| 
 | ||
|   int yystacksize = YYINITDEPTH;
 | ||
|   int yyfree_stacks = 0;
 | ||
| 
 | ||
| #ifdef YYPURE
 | ||
|   int yychar;
 | ||
|   YYSTYPE yylval;
 | ||
|   int yynerrs;
 | ||
| #ifdef YYLSP_NEEDED
 | ||
|   YYLTYPE yylloc;
 | ||
| #endif
 | ||
| #endif
 | ||
| 
 | ||
|   YYSTYPE yyval;		/*  the variable used to return		*/
 | ||
| 				/*  semantic values from the action	*/
 | ||
| 				/*  routines				*/
 | ||
| 
 | ||
|   int yylen;
 | ||
| 
 | ||
| #if YYDEBUG != 0
 | ||
|   if (yydebug)
 | ||
|     fprintf(stderr, "Starting parse\n");
 | ||
| #endif
 | ||
| 
 | ||
|   yystate = 0;
 | ||
|   yyerrstatus = 0;
 | ||
|   yynerrs = 0;
 | ||
|   yychar = YYEMPTY;		/* Cause a token to be read.  */
 | ||
| 
 | ||
|   /* Initialize stack pointers.
 | ||
|      Waste one element of value and location stack
 | ||
|      so that they stay on the same level as the state stack.
 | ||
|      The wasted elements are never initialized.  */
 | ||
| 
 | ||
|   yyssp = yyss - 1;
 | ||
|   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:
 | ||
| 
 | ||
|   *++yyssp = yystate;
 | ||
| 
 | ||
|   if (yyssp >= yyss + yystacksize - 1)
 | ||
|     {
 | ||
|       /* Give user a chance to reallocate the stack */
 | ||
|       /* Use copies of these so that the &'s don't force the real ones into memory. */
 | ||
|       YYSTYPE *yyvs1 = yyvs;
 | ||
|       short *yyss1 = yyss;
 | ||
| #ifdef YYLSP_NEEDED
 | ||
|       YYLTYPE *yyls1 = yyls;
 | ||
| #endif
 | ||
| 
 | ||
|       /* Get the current used size of the three stacks, in elements.  */
 | ||
|       int size = 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
 | ||
| 
 | ||
|       yyss = yyss1; yyvs = yyvs1;
 | ||
| #ifdef YYLSP_NEEDED
 | ||
|       yyls = yyls1;
 | ||
| #endif
 | ||
| #else /* no yyoverflow */
 | ||
|       /* 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;
 | ||
| 	}
 | ||
|       yystacksize *= 2;
 | ||
|       if (yystacksize > YYMAXDEPTH)
 | ||
| 	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
 | ||
| #endif /* no yyoverflow */
 | ||
| 
 | ||
|       yyssp = yyss + size - 1;
 | ||
|       yyvsp = yyvs + size - 1;
 | ||
| #ifdef YYLSP_NEEDED
 | ||
|       yylsp = yyls + size - 1;
 | ||
| #endif
 | ||
| 
 | ||
| #if YYDEBUG != 0
 | ||
|       if (yydebug)
 | ||
| 	fprintf(stderr, "Stack size increased to %d\n", yystacksize);
 | ||
| #endif
 | ||
| 
 | ||
|       if (yyssp >= yyss + yystacksize - 1)
 | ||
| 	YYABORT;
 | ||
|     }
 | ||
| 
 | ||
| #if YYDEBUG != 0
 | ||
|   if (yydebug)
 | ||
|     fprintf(stderr, "Entering state %d\n", yystate);
 | ||
| #endif
 | ||
| 
 | ||
|   goto yybackup;
 | ||
|  yybackup:
 | ||
| 
 | ||
| /* Do appropriate processing given the current state.  */
 | ||
| /* Read a lookahead token if we need one and don't already have one.  */
 | ||
| /* yyresume: */
 | ||
| 
 | ||
|   /* First try to decide what to do without reference to lookahead token.  */
 | ||
| 
 | ||
|   yyn = yypact[yystate];
 | ||
|   if (yyn == YYFLAG)
 | ||
|     goto yydefault;
 | ||
| 
 | ||
|   /* Not known => get a lookahead token if don't already have one.  */
 | ||
| 
 | ||
|   /* yychar is either YYEMPTY or YYEOF
 | ||
|      or a valid token in external form.  */
 | ||
| 
 | ||
|   if (yychar == YYEMPTY)
 | ||
|     {
 | ||
| #if YYDEBUG != 0
 | ||
|       if (yydebug)
 | ||
| 	fprintf(stderr, "Reading a token: ");
 | ||
| #endif
 | ||
|       yychar = YYLEX;
 | ||
|     }
 | ||
| 
 | ||
|   /* Convert token to internal form (in yychar1) for indexing tables with */
 | ||
| 
 | ||
|   if (yychar <= 0)		/* This means end of input. */
 | ||
|     {
 | ||
|       yychar1 = 0;
 | ||
|       yychar = YYEOF;		/* Don't call YYLEX any more */
 | ||
| 
 | ||
| #if YYDEBUG != 0
 | ||
|       if (yydebug)
 | ||
| 	fprintf(stderr, "Now at end of input.\n");
 | ||
| #endif
 | ||
|     }
 | ||
|   else
 | ||
|     {
 | ||
|       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
 | ||
|     }
 | ||
| 
 | ||
|   yyn += yychar1;
 | ||
|   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
 | ||
|     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 == YYFLAG)
 | ||
| 	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
 | ||
| 
 | ||
|   /* 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--;
 | ||
| 
 | ||
|   yystate = yyn;
 | ||
|   goto yynewstate;
 | ||
| 
 | ||
| /* Do the default action for the current state.  */
 | ||
| yydefault:
 | ||
| 
 | ||
|   yyn = yydefact[yystate];
 | ||
|   if (yyn == 0)
 | ||
|     goto yyerrlab;
 | ||
| 
 | ||
| /* Do a reduction.  yyn is the number of a rule to reduce with.  */
 | ||
| yyreduce:
 | ||
|   yylen = yyr2[yyn];
 | ||
|   if (yylen > 0)
 | ||
|     yyval = yyvsp[1-yylen]; /* implement default value of the action */
 | ||
| 
 | ||
| #if YYDEBUG != 0
 | ||
|   if (yydebug)
 | ||
|     {
 | ||
|       int i;
 | ||
| 
 | ||
|       fprintf (stderr, "Reducing via rule %d (line %d), ",
 | ||
| 	       yyn, yyrline[yyn]);
 | ||
| 
 | ||
|       /* Print the symbols being reduced, and their result.  */
 | ||
|       for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
 | ||
| 	fprintf (stderr, "%s ", yytname[yyrhs[i]]);
 | ||
|       fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
 | ||
|     }
 | ||
| #endif
 | ||
| 
 | ||
| 
 | ||
|   switch (yyn) {
 | ||
| 
 | ||
| case 28:
 | ||
| #line 1132 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.IPredicate = ICmpInst::ICMP_EQ; ;
 | ||
|     break;}
 | ||
| case 29:
 | ||
| #line 1132 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.IPredicate = ICmpInst::ICMP_NE; ;
 | ||
|     break;}
 | ||
| case 30:
 | ||
| #line 1133 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.IPredicate = ICmpInst::ICMP_SLT; ;
 | ||
|     break;}
 | ||
| case 31:
 | ||
| #line 1133 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.IPredicate = ICmpInst::ICMP_SGT; ;
 | ||
|     break;}
 | ||
| case 32:
 | ||
| #line 1134 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.IPredicate = ICmpInst::ICMP_SLE; ;
 | ||
|     break;}
 | ||
| case 33:
 | ||
| #line 1134 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.IPredicate = ICmpInst::ICMP_SGE; ;
 | ||
|     break;}
 | ||
| case 34:
 | ||
| #line 1135 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.IPredicate = ICmpInst::ICMP_ULT; ;
 | ||
|     break;}
 | ||
| case 35:
 | ||
| #line 1135 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.IPredicate = ICmpInst::ICMP_UGT; ;
 | ||
|     break;}
 | ||
| case 36:
 | ||
| #line 1136 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.IPredicate = ICmpInst::ICMP_ULE; ;
 | ||
|     break;}
 | ||
| case 37:
 | ||
| #line 1136 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.IPredicate = ICmpInst::ICMP_UGE; ;
 | ||
|     break;}
 | ||
| case 38:
 | ||
| #line 1140 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.FPredicate = FCmpInst::FCMP_OEQ; ;
 | ||
|     break;}
 | ||
| case 39:
 | ||
| #line 1140 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.FPredicate = FCmpInst::FCMP_ONE; ;
 | ||
|     break;}
 | ||
| case 40:
 | ||
| #line 1141 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.FPredicate = FCmpInst::FCMP_OLT; ;
 | ||
|     break;}
 | ||
| case 41:
 | ||
| #line 1141 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.FPredicate = FCmpInst::FCMP_OGT; ;
 | ||
|     break;}
 | ||
| case 42:
 | ||
| #line 1142 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.FPredicate = FCmpInst::FCMP_OLE; ;
 | ||
|     break;}
 | ||
| case 43:
 | ||
| #line 1142 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.FPredicate = FCmpInst::FCMP_OGE; ;
 | ||
|     break;}
 | ||
| case 44:
 | ||
| #line 1143 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.FPredicate = FCmpInst::FCMP_ORD; ;
 | ||
|     break;}
 | ||
| case 45:
 | ||
| #line 1143 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.FPredicate = FCmpInst::FCMP_UNO; ;
 | ||
|     break;}
 | ||
| case 46:
 | ||
| #line 1144 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.FPredicate = FCmpInst::FCMP_UEQ; ;
 | ||
|     break;}
 | ||
| case 47:
 | ||
| #line 1144 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.FPredicate = FCmpInst::FCMP_UNE; ;
 | ||
|     break;}
 | ||
| case 48:
 | ||
| #line 1145 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.FPredicate = FCmpInst::FCMP_ULT; ;
 | ||
|     break;}
 | ||
| case 49:
 | ||
| #line 1145 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.FPredicate = FCmpInst::FCMP_UGT; ;
 | ||
|     break;}
 | ||
| case 50:
 | ||
| #line 1146 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.FPredicate = FCmpInst::FCMP_ULE; ;
 | ||
|     break;}
 | ||
| case 51:
 | ||
| #line 1146 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.FPredicate = FCmpInst::FCMP_UGE; ;
 | ||
|     break;}
 | ||
| case 52:
 | ||
| #line 1147 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.FPredicate = FCmpInst::FCMP_TRUE; ;
 | ||
|     break;}
 | ||
| case 53:
 | ||
| #line 1148 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.FPredicate = FCmpInst::FCMP_FALSE; ;
 | ||
|     break;}
 | ||
| case 64:
 | ||
| #line 1157 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.StrVal = 0; ;
 | ||
|     break;}
 | ||
| case 65:
 | ||
| #line 1161 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.StrVal = yyvsp[-1].StrVal;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 66:
 | ||
| #line 1165 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.StrVal = 0;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 70:
 | ||
| #line 1173 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.StrVal = 0;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 71:
 | ||
| #line 1178 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.StrVal = yyvsp[-1].StrVal;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 72:
 | ||
| #line 1184 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.Linkage = GlobalValue::InternalLinkage; ;
 | ||
|     break;}
 | ||
| case 73:
 | ||
| #line 1185 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.Linkage = GlobalValue::WeakLinkage; ;
 | ||
|     break;}
 | ||
| case 74:
 | ||
| #line 1186 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
 | ||
|     break;}
 | ||
| case 75:
 | ||
| #line 1187 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.Linkage = GlobalValue::AppendingLinkage; ;
 | ||
|     break;}
 | ||
| case 76:
 | ||
| #line 1188 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.Linkage = GlobalValue::DLLExportLinkage; ;
 | ||
|     break;}
 | ||
| case 77:
 | ||
| #line 1192 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.Linkage = GlobalValue::DLLImportLinkage; ;
 | ||
|     break;}
 | ||
| case 78:
 | ||
| #line 1193 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;
 | ||
|     break;}
 | ||
| case 79:
 | ||
| #line 1194 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.Linkage = GlobalValue::ExternalLinkage; ;
 | ||
|     break;}
 | ||
| case 80:
 | ||
| #line 1198 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.Visibility = GlobalValue::DefaultVisibility;   ;
 | ||
|     break;}
 | ||
| case 81:
 | ||
| #line 1199 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.Visibility = GlobalValue::DefaultVisibility;   ;
 | ||
|     break;}
 | ||
| case 82:
 | ||
| #line 1200 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.Visibility = GlobalValue::HiddenVisibility;    ;
 | ||
|     break;}
 | ||
| case 83:
 | ||
| #line 1201 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.Visibility = GlobalValue::ProtectedVisibility; ;
 | ||
|     break;}
 | ||
| case 84:
 | ||
| #line 1205 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.Linkage = GlobalValue::ExternalLinkage; ;
 | ||
|     break;}
 | ||
| case 85:
 | ||
| #line 1206 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.Linkage = GlobalValue::DLLImportLinkage; ;
 | ||
|     break;}
 | ||
| case 86:
 | ||
| #line 1207 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;
 | ||
|     break;}
 | ||
| case 87:
 | ||
| #line 1211 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.Linkage = GlobalValue::ExternalLinkage; ;
 | ||
|     break;}
 | ||
| case 88:
 | ||
| #line 1212 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.Linkage = GlobalValue::InternalLinkage; ;
 | ||
|     break;}
 | ||
| case 89:
 | ||
| #line 1213 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
 | ||
|     break;}
 | ||
| case 90:
 | ||
| #line 1214 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.Linkage = GlobalValue::WeakLinkage; ;
 | ||
|     break;}
 | ||
| case 91:
 | ||
| #line 1215 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.Linkage = GlobalValue::DLLExportLinkage; ;
 | ||
|     break;}
 | ||
| case 92:
 | ||
| #line 1219 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.Linkage = GlobalValue::ExternalLinkage; ;
 | ||
|     break;}
 | ||
| case 93:
 | ||
| #line 1220 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.Linkage = GlobalValue::WeakLinkage; ;
 | ||
|     break;}
 | ||
| case 94:
 | ||
| #line 1221 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.Linkage = GlobalValue::InternalLinkage; ;
 | ||
|     break;}
 | ||
| case 95:
 | ||
| #line 1224 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.UIntVal = CallingConv::C; ;
 | ||
|     break;}
 | ||
| case 96:
 | ||
| #line 1225 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.UIntVal = CallingConv::C; ;
 | ||
|     break;}
 | ||
| case 97:
 | ||
| #line 1226 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.UIntVal = CallingConv::Fast; ;
 | ||
|     break;}
 | ||
| case 98:
 | ||
| #line 1227 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.UIntVal = CallingConv::Cold; ;
 | ||
|     break;}
 | ||
| case 99:
 | ||
| #line 1228 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.UIntVal = CallingConv::X86_StdCall; ;
 | ||
|     break;}
 | ||
| case 100:
 | ||
| #line 1229 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.UIntVal = CallingConv::X86_FastCall; ;
 | ||
|     break;}
 | ||
| case 101:
 | ||
| #line 1230 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|                    if ((unsigned)yyvsp[0].UInt64Val != yyvsp[0].UInt64Val)
 | ||
|                      GEN_ERROR("Calling conv too large");
 | ||
|                    yyval.UIntVal = yyvsp[0].UInt64Val;
 | ||
|                   CHECK_FOR_ERROR
 | ||
|                  ;
 | ||
|     break;}
 | ||
| case 102:
 | ||
| #line 1237 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.ParamAttrs = ParamAttr::ZExt;      ;
 | ||
|     break;}
 | ||
| case 103:
 | ||
| #line 1238 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.ParamAttrs = ParamAttr::ZExt;      ;
 | ||
|     break;}
 | ||
| case 104:
 | ||
| #line 1239 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.ParamAttrs = ParamAttr::SExt;      ;
 | ||
|     break;}
 | ||
| case 105:
 | ||
| #line 1240 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.ParamAttrs = ParamAttr::SExt;      ;
 | ||
|     break;}
 | ||
| case 106:
 | ||
| #line 1241 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.ParamAttrs = ParamAttr::InReg;     ;
 | ||
|     break;}
 | ||
| case 107:
 | ||
| #line 1242 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.ParamAttrs = ParamAttr::StructRet; ;
 | ||
|     break;}
 | ||
| case 108:
 | ||
| #line 1243 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.ParamAttrs = ParamAttr::NoAlias;   ;
 | ||
|     break;}
 | ||
| case 109:
 | ||
| #line 1244 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.ParamAttrs = ParamAttr::ByVal;     ;
 | ||
|     break;}
 | ||
| case 110:
 | ||
| #line 1245 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.ParamAttrs = ParamAttr::Nest;      ;
 | ||
|     break;}
 | ||
| case 111:
 | ||
| #line 1248 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.ParamAttrs = ParamAttr::None; ;
 | ||
|     break;}
 | ||
| case 112:
 | ||
| #line 1249 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|                 yyval.ParamAttrs = yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs;
 | ||
|               ;
 | ||
|     break;}
 | ||
| case 113:
 | ||
| #line 1254 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.ParamAttrs = ParamAttr::NoReturn; ;
 | ||
|     break;}
 | ||
| case 114:
 | ||
| #line 1255 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.ParamAttrs = ParamAttr::NoUnwind; ;
 | ||
|     break;}
 | ||
| case 115:
 | ||
| #line 1256 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.ParamAttrs = ParamAttr::ZExt;     ;
 | ||
|     break;}
 | ||
| case 116:
 | ||
| #line 1257 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.ParamAttrs = ParamAttr::SExt;     ;
 | ||
|     break;}
 | ||
| case 117:
 | ||
| #line 1260 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.ParamAttrs = ParamAttr::None; ;
 | ||
|     break;}
 | ||
| case 118:
 | ||
| #line 1261 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|                 yyval.ParamAttrs = yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs;
 | ||
|               ;
 | ||
|     break;}
 | ||
| case 119:
 | ||
| #line 1268 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.UIntVal = 0; ;
 | ||
|     break;}
 | ||
| case 120:
 | ||
| #line 1269 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|   yyval.UIntVal = yyvsp[0].UInt64Val;
 | ||
|   if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal))
 | ||
|     GEN_ERROR("Alignment must be a power of two");
 | ||
|   CHECK_FOR_ERROR
 | ||
| ;
 | ||
|     break;}
 | ||
| case 121:
 | ||
| #line 1275 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.UIntVal = 0; ;
 | ||
|     break;}
 | ||
| case 122:
 | ||
| #line 1276 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|   yyval.UIntVal = yyvsp[0].UInt64Val;
 | ||
|   if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal))
 | ||
|     GEN_ERROR("Alignment must be a power of two");
 | ||
|   CHECK_FOR_ERROR
 | ||
| ;
 | ||
|     break;}
 | ||
| case 123:
 | ||
| #line 1284 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|   for (unsigned i = 0, e = yyvsp[0].StrVal->length(); i != e; ++i)
 | ||
|     if ((*yyvsp[0].StrVal)[i] == '"' || (*yyvsp[0].StrVal)[i] == '\\')
 | ||
|       GEN_ERROR("Invalid character in section name");
 | ||
|   yyval.StrVal = yyvsp[0].StrVal;
 | ||
|   CHECK_FOR_ERROR
 | ||
| ;
 | ||
|     break;}
 | ||
| case 124:
 | ||
| #line 1292 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.StrVal = 0; ;
 | ||
|     break;}
 | ||
| case 125:
 | ||
| #line 1293 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.StrVal = yyvsp[0].StrVal; ;
 | ||
|     break;}
 | ||
| case 126:
 | ||
| #line 1298 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {;
 | ||
|     break;}
 | ||
| case 127:
 | ||
| #line 1299 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {;
 | ||
|     break;}
 | ||
| case 128:
 | ||
| #line 1300 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     CurGV->setSection(*yyvsp[0].StrVal);
 | ||
|     delete yyvsp[0].StrVal;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 129:
 | ||
| #line 1305 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     if (yyvsp[0].UInt64Val != 0 && !isPowerOf2_32(yyvsp[0].UInt64Val))
 | ||
|       GEN_ERROR("Alignment must be a power of two");
 | ||
|     CurGV->setAlignment(yyvsp[0].UInt64Val);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 137:
 | ||
| #line 1321 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.TypeVal = new PATypeHolder(OpaqueType::get());
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 138:
 | ||
| #line 1325 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.TypeVal = new PATypeHolder(yyvsp[0].PrimType);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 139:
 | ||
| #line 1329 "/Volumes/MacOS9/gcc/llvm/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;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 140:
 | ||
| #line 1336 "/Volumes/MacOS9/gcc/llvm/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 141:
 | ||
| #line 1341 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {                   // Type UpReference
 | ||
|     if (yyvsp[0].UInt64Val > (uint64_t)~0U) GEN_ERROR("Value out of range");
 | ||
|     OpaqueType *OT = OpaqueType::get();        // Use temporary placeholder
 | ||
|     UpRefs.push_back(UpRefRecord((unsigned)yyvsp[0].UInt64Val, OT));  // Add to vector...
 | ||
|     yyval.TypeVal = new PATypeHolder(OT);
 | ||
|     UR_OUT("New Upreference!\n");
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 142:
 | ||
| #line 1349 "/Volumes/MacOS9/gcc/llvm/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;
 | ||
|       Attrs.push_back(X);
 | ||
|     }
 | ||
|     unsigned index = 1;
 | ||
|     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);
 | ||
|       if (Ty != Type::VoidTy)
 | ||
|         if (I->Attrs != ParamAttr::None) {
 | ||
|           ParamAttrsWithIndex X; X.index = index; X.attrs = I->Attrs;
 | ||
|           Attrs.push_back(X);
 | ||
|         }
 | ||
|     }
 | ||
|     bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
 | ||
|     if (isVarArg) Params.pop_back();
 | ||
| 
 | ||
|     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)); 
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 143:
 | ||
| #line 1379 "/Volumes/MacOS9/gcc/llvm/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;
 | ||
|       Attrs.push_back(X);
 | ||
|     }
 | ||
|     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();
 | ||
|       Params.push_back(Ty);
 | ||
|       if (Ty != Type::VoidTy)
 | ||
|         if (I->Attrs != ParamAttr::None) {
 | ||
|           ParamAttrsWithIndex X; X.index = index; X.attrs = I->Attrs;
 | ||
|           Attrs.push_back(X);
 | ||
|         }
 | ||
|     }
 | ||
|     bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
 | ||
|     if (isVarArg) Params.pop_back();
 | ||
| 
 | ||
|     ParamAttrsList *ActualAttrs = 0;
 | ||
|     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)); 
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 144:
 | ||
| #line 1410 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {          // Sized array type?
 | ||
|     yyval.TypeVal = new PATypeHolder(HandleUpRefs(ArrayType::get(*yyvsp[-1].TypeVal, (unsigned)yyvsp[-3].UInt64Val)));
 | ||
|     delete yyvsp[-1].TypeVal;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 145:
 | ||
| #line 1415 "/Volumes/MacOS9/gcc/llvm/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))
 | ||
|        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;
 | ||
|      CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 146:
 | ||
| #line 1427 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {                        // Structure type?
 | ||
|     std::vector<const Type*> Elements;
 | ||
|     for (std::list<llvm::PATypeHolder>::iterator I = yyvsp[-1].TypeList->begin(),
 | ||
|            E = yyvsp[-1].TypeList->end(); I != E; ++I)
 | ||
|       Elements.push_back(*I);
 | ||
| 
 | ||
|     yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
 | ||
|     delete yyvsp[-1].TypeList;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 147:
 | ||
| #line 1437 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {                                  // Empty structure type?
 | ||
|     yyval.TypeVal = new PATypeHolder(StructType::get(std::vector<const Type*>()));
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 148:
 | ||
| #line 1441 "/Volumes/MacOS9/gcc/llvm/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)
 | ||
|       Elements.push_back(*I);
 | ||
| 
 | ||
|     yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true)));
 | ||
|     delete yyvsp[-2].TypeList;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 149:
 | ||
| #line 1451 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {                         // Empty structure type?
 | ||
|     yyval.TypeVal = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 150:
 | ||
| #line 1458 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { 
 | ||
|     yyval.TypeWithAttrs.Ty = yyvsp[-1].TypeVal; 
 | ||
|     yyval.TypeWithAttrs.Attrs = yyvsp[0].ParamAttrs; 
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 151:
 | ||
| #line 1465 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     if (!UpRefs.empty())
 | ||
|       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 152:
 | ||
| #line 1472 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.TypeVal = new PATypeHolder(Type::VoidTy);
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 153:
 | ||
| #line 1477 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.TypeWithAttrsList = new TypeWithAttrsList();
 | ||
|     yyval.TypeWithAttrsList->push_back(yyvsp[0].TypeWithAttrs);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 154:
 | ||
| #line 1482 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     (yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList)->push_back(yyvsp[0].TypeWithAttrs);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 156:
 | ||
| #line 1490 "/Volumes/MacOS9/gcc/llvm/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);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 157:
 | ||
| #line 1497 "/Volumes/MacOS9/gcc/llvm/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);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 158:
 | ||
| #line 1504 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.TypeWithAttrsList = new TypeWithAttrsList();
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 159:
 | ||
| #line 1512 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.TypeList = new std::list<PATypeHolder>();
 | ||
|     yyval.TypeList->push_back(*yyvsp[0].TypeVal); 
 | ||
|     delete yyvsp[0].TypeVal;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 160:
 | ||
| #line 1518 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     (yyval.TypeList=yyvsp[-2].TypeList)->push_back(*yyvsp[0].TypeVal); 
 | ||
|     delete yyvsp[0].TypeVal;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 161:
 | ||
| #line 1530 "/Volumes/MacOS9/gcc/llvm/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());
 | ||
|     if (ATy == 0)
 | ||
|       GEN_ERROR("Cannot make array constant with type: '" + 
 | ||
|                      (*yyvsp[-3].TypeVal)->getDescription() + "'");
 | ||
|     const Type *ETy = ATy->getElementType();
 | ||
|     int NumElements = ATy->getNumElements();
 | ||
| 
 | ||
|     // Verify that we have the correct size...
 | ||
|     if (NumElements != -1 && NumElements != (int)yyvsp[-1].ConstVector->size())
 | ||
|       GEN_ERROR("Type mismatch: constant sized array initialized with " +
 | ||
|                      utostr(yyvsp[-1].ConstVector->size()) +  " arguments, but has size of " + 
 | ||
|                      itostr(NumElements) + "");
 | ||
| 
 | ||
|     // Verify all elements are correct type!
 | ||
|     for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
 | ||
|       if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
 | ||
|         GEN_ERROR("Element #" + utostr(i) + " is not of type '" + 
 | ||
|                        ETy->getDescription() +"' as required!\nIt is of type '"+
 | ||
|                        (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
 | ||
|     }
 | ||
| 
 | ||
|     yyval.ConstVal = ConstantArray::get(ATy, *yyvsp[-1].ConstVector);
 | ||
|     delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 162:
 | ||
| #line 1558 "/Volumes/MacOS9/gcc/llvm/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());
 | ||
|     if (ATy == 0)
 | ||
|       GEN_ERROR("Cannot make array constant with type: '" + 
 | ||
|                      (*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;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 163:
 | ||
| #line 1574 "/Volumes/MacOS9/gcc/llvm/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());
 | ||
|     if (ATy == 0)
 | ||
|       GEN_ERROR("Cannot make array constant with type: '" + 
 | ||
|                      (*yyvsp[-2].TypeVal)->getDescription() + "'");
 | ||
| 
 | ||
|     int NumElements = ATy->getNumElements();
 | ||
|     const Type *ETy = ATy->getElementType();
 | ||
|     if (NumElements != -1 && NumElements != int(yyvsp[0].StrVal->length()))
 | ||
|       GEN_ERROR("Can't build string constant of size " + 
 | ||
|                      itostr((int)(yyvsp[0].StrVal->length())) +
 | ||
|                      " when array has size " + itostr(NumElements) + "");
 | ||
|     std::vector<Constant*> Vals;
 | ||
|     if (ETy == Type::Int8Ty) {
 | ||
|       for (unsigned i = 0; i < yyvsp[0].StrVal->length(); ++i)
 | ||
|         Vals.push_back(ConstantInt::get(ETy, (*yyvsp[0].StrVal)[i]));
 | ||
|     } else {
 | ||
|       delete yyvsp[0].StrVal;
 | ||
|       GEN_ERROR("Cannot build string arrays of non byte sized elements");
 | ||
|     }
 | ||
|     delete yyvsp[0].StrVal;
 | ||
|     yyval.ConstVal = ConstantArray::get(ATy, Vals);
 | ||
|     delete yyvsp[-2].TypeVal;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 164:
 | ||
| #line 1601 "/Volumes/MacOS9/gcc/llvm/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());
 | ||
|     if (PTy == 0)
 | ||
|       GEN_ERROR("Cannot make packed constant with type: '" + 
 | ||
|                      (*yyvsp[-3].TypeVal)->getDescription() + "'");
 | ||
|     const Type *ETy = PTy->getElementType();
 | ||
|     int NumElements = PTy->getNumElements();
 | ||
| 
 | ||
|     // Verify that we have the correct size...
 | ||
|     if (NumElements != -1 && NumElements != (int)yyvsp[-1].ConstVector->size())
 | ||
|       GEN_ERROR("Type mismatch: constant sized packed initialized with " +
 | ||
|                      utostr(yyvsp[-1].ConstVector->size()) +  " arguments, but has size of " + 
 | ||
|                      itostr(NumElements) + "");
 | ||
| 
 | ||
|     // Verify all elements are correct type!
 | ||
|     for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
 | ||
|       if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
 | ||
|         GEN_ERROR("Element #" + utostr(i) + " is not of type '" + 
 | ||
|            ETy->getDescription() +"' as required!\nIt is of type '"+
 | ||
|            (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
 | ||
|     }
 | ||
| 
 | ||
|     yyval.ConstVal = ConstantVector::get(PTy, *yyvsp[-1].ConstVector);
 | ||
|     delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 165:
 | ||
| #line 1629 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     const StructType *STy = dyn_cast<StructType>(yyvsp[-3].TypeVal->get());
 | ||
|     if (STy == 0)
 | ||
|       GEN_ERROR("Cannot make struct constant with type: '" + 
 | ||
|                      (*yyvsp[-3].TypeVal)->getDescription() + "'");
 | ||
| 
 | ||
|     if (yyvsp[-1].ConstVector->size() != STy->getNumContainedTypes())
 | ||
|       GEN_ERROR("Illegal number of initializers for structure type");
 | ||
| 
 | ||
|     // Check to ensure that constants are compatible with the type initializer!
 | ||
|     for (unsigned i = 0, e = yyvsp[-1].ConstVector->size(); i != e; ++i)
 | ||
|       if ((*yyvsp[-1].ConstVector)[i]->getType() != STy->getElementType(i))
 | ||
|         GEN_ERROR("Expected type '" +
 | ||
|                        STy->getElementType(i)->getDescription() +
 | ||
|                        "' for element #" + utostr(i) +
 | ||
|                        " of structure initializer");
 | ||
| 
 | ||
|     // Check to ensure that Type is not packed
 | ||
|     if (STy->isPacked())
 | ||
|       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;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 166:
 | ||
| #line 1655 "/Volumes/MacOS9/gcc/llvm/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());
 | ||
|     if (STy == 0)
 | ||
|       GEN_ERROR("Cannot make struct constant with type: '" + 
 | ||
|                      (*yyvsp[-2].TypeVal)->getDescription() + "'");
 | ||
| 
 | ||
|     if (STy->getNumContainedTypes() != 0)
 | ||
|       GEN_ERROR("Illegal number of initializers for structure type");
 | ||
| 
 | ||
|     // Check to ensure that Type is not packed
 | ||
|     if (STy->isPacked())
 | ||
|       GEN_ERROR("Unpacked Initializer to vector type '" +
 | ||
|                 STy->getDescription() + "'");
 | ||
| 
 | ||
|     yyval.ConstVal = ConstantStruct::get(STy, std::vector<Constant*>());
 | ||
|     delete yyvsp[-2].TypeVal;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 167:
 | ||
| #line 1675 "/Volumes/MacOS9/gcc/llvm/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() + "'");
 | ||
| 
 | ||
|     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))
 | ||
|         GEN_ERROR("Expected type '" +
 | ||
|                        STy->getElementType(i)->getDescription() +
 | ||
|                        "' for element #" + utostr(i) +
 | ||
|                        " of structure initializer");
 | ||
| 
 | ||
|     // Check to ensure that Type is packed
 | ||
|     if (!STy->isPacked())
 | ||
|       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;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 168:
 | ||
| #line 1701 "/Volumes/MacOS9/gcc/llvm/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());
 | ||
|     if (STy == 0)
 | ||
|       GEN_ERROR("Cannot make struct constant with type: '" + 
 | ||
|                      (*yyvsp[-4].TypeVal)->getDescription() + "'");
 | ||
| 
 | ||
|     if (STy->getNumContainedTypes() != 0)
 | ||
|       GEN_ERROR("Illegal number of initializers for structure type");
 | ||
| 
 | ||
|     // Check to ensure that Type is packed
 | ||
|     if (!STy->isPacked())
 | ||
|       GEN_ERROR("Vector initializer to non-vector type '" + 
 | ||
|                 STy->getDescription() + "'");
 | ||
| 
 | ||
|     yyval.ConstVal = ConstantStruct::get(STy, std::vector<Constant*>());
 | ||
|     delete yyvsp[-4].TypeVal;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 169:
 | ||
| #line 1721 "/Volumes/MacOS9/gcc/llvm/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());
 | ||
|     if (PTy == 0)
 | ||
|       GEN_ERROR("Cannot make null pointer constant with type: '" + 
 | ||
|                      (*yyvsp[-1].TypeVal)->getDescription() + "'");
 | ||
| 
 | ||
|     yyval.ConstVal = ConstantPointerNull::get(PTy);
 | ||
|     delete yyvsp[-1].TypeVal;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 170:
 | ||
| #line 1733 "/Volumes/MacOS9/gcc/llvm/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;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 171:
 | ||
| #line 1740 "/Volumes/MacOS9/gcc/llvm/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());
 | ||
|     if (Ty == 0)
 | ||
|       GEN_ERROR("Global const reference must be a pointer type");
 | ||
| 
 | ||
|     // ConstExprs can exist in the body of a function, thus creating
 | ||
|     // GlobalValues whenever they refer to a variable.  Because we are in
 | ||
|     // the context of a function, getExistingVal will search the functions
 | ||
|     // symbol table instead of the module symbol table for the global symbol,
 | ||
|     // which throws things all off.  To get around this, we just tell
 | ||
|     // getExistingVal that we are at global scope here.
 | ||
|     //
 | ||
|     Function *SavedCurFn = CurFun.CurrentFunction;
 | ||
|     CurFun.CurrentFunction = 0;
 | ||
| 
 | ||
|     Value *V = getExistingVal(Ty, yyvsp[0].ValIDVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
| 
 | ||
|     CurFun.CurrentFunction = SavedCurFn;
 | ||
| 
 | ||
|     // If this is an initializer for a constant pointer, which is referencing a
 | ||
|     // (currently) undefined variable, create a stub now that shall be replaced
 | ||
|     // in the future with the right type of variable.
 | ||
|     //
 | ||
|     if (V == 0) {
 | ||
|       assert(isa<PointerType>(Ty) && "Globals may only be used as pointers!");
 | ||
|       const PointerType *PT = cast<PointerType>(Ty);
 | ||
| 
 | ||
|       // 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));
 | ||
|     
 | ||
|       if (I != CurModule.GlobalRefs.end()) {
 | ||
|         V = I->second;             // Placeholder already exists, use it...
 | ||
|         yyvsp[0].ValIDVal.destroy();
 | ||
|       } else {
 | ||
|         std::string Name;
 | ||
|         if (yyvsp[0].ValIDVal.Type == ValID::GlobalName)
 | ||
|           Name = yyvsp[0].ValIDVal.getName();
 | ||
|         else if (yyvsp[0].ValIDVal.Type != ValID::GlobalID)
 | ||
|           GEN_ERROR("Invalid reference to global");
 | ||
| 
 | ||
|         // Create the forward referenced global.
 | ||
|         GlobalValue *GV;
 | ||
|         if (const FunctionType *FTy = 
 | ||
|                  dyn_cast<FunctionType>(PT->getElementType())) {
 | ||
|           GV = new Function(FTy, GlobalValue::ExternalWeakLinkage, Name,
 | ||
|                             CurModule.CurrentModule);
 | ||
|         } else {
 | ||
|           GV = new GlobalVariable(PT->getElementType(), false,
 | ||
|                                   GlobalValue::ExternalWeakLinkage, 0,
 | ||
|                                   Name, CurModule.CurrentModule);
 | ||
|         }
 | ||
| 
 | ||
|         // 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));
 | ||
|         V = GV;
 | ||
|       }
 | ||
|     }
 | ||
| 
 | ||
|     yyval.ConstVal = cast<GlobalValue>(V);
 | ||
|     delete yyvsp[-1].TypeVal;            // Free the type handle
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 172:
 | ||
| #line 1806 "/Volumes/MacOS9/gcc/llvm/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("Mismatched types for constant expression: " + 
 | ||
|         (*yyvsp[-1].TypeVal)->getDescription() + " and " + yyvsp[0].ConstVal->getType()->getDescription());
 | ||
|     yyval.ConstVal = yyvsp[0].ConstVal;
 | ||
|     delete yyvsp[-1].TypeVal;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 173:
 | ||
| #line 1816 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     if (!UpRefs.empty())
 | ||
|       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;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 174:
 | ||
| #line 1826 "/Volumes/MacOS9/gcc/llvm/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);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 175:
 | ||
| #line 1832 "/Volumes/MacOS9/gcc/llvm/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;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 176:
 | ||
| #line 1842 "/Volumes/MacOS9/gcc/llvm/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);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 177:
 | ||
| #line 1848 "/Volumes/MacOS9/gcc/llvm/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;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 178:
 | ||
| #line 1858 "/Volumes/MacOS9/gcc/llvm/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 179:
 | ||
| #line 1863 "/Volumes/MacOS9/gcc/llvm/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 180:
 | ||
| #line 1868 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {                   // Float & Double constants
 | ||
|     if (!ConstantFP::isValueValidForType(yyvsp[-1].PrimType, *yyvsp[0].FPVal))
 | ||
|       GEN_ERROR("Floating point constant invalid for type");
 | ||
|     // Lexer has no type info, so builds all FP constants as double.
 | ||
|     // Fix this here.
 | ||
|     if (yyvsp[-1].PrimType==Type::FloatTy)
 | ||
|       yyvsp[0].FPVal->convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven);
 | ||
|     yyval.ConstVal = ConstantFP::get(yyvsp[-1].PrimType, *yyvsp[0].FPVal);
 | ||
|     delete yyvsp[0].FPVal;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 181:
 | ||
| #line 1881 "/Volumes/MacOS9/gcc/llvm/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 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 182:
 | ||
| #line 1893 "/Volumes/MacOS9/gcc/llvm/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->begin(), yyvsp[-1].ValueList->end(),
 | ||
|                                         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]))
 | ||
|         IdxVec.push_back(C);
 | ||
|       else
 | ||
|         GEN_ERROR("Indices to constant getelementptr must be constants");
 | ||
| 
 | ||
|     delete yyvsp[-1].ValueList;
 | ||
| 
 | ||
|     yyval.ConstVal = ConstantExpr::getGetElementPtr(yyvsp[-2].ConstVal, &IdxVec[0], IdxVec.size());
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 183:
 | ||
| #line 1915 "/Volumes/MacOS9/gcc/llvm/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())
 | ||
|       GEN_ERROR("Select operand types must match");
 | ||
|     yyval.ConstVal = ConstantExpr::getSelect(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 184:
 | ||
| #line 1923 "/Volumes/MacOS9/gcc/llvm/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 185:
 | ||
| #line 1929 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
 | ||
|       GEN_ERROR("Logical operator types must match");
 | ||
|     if (!yyvsp[-3].ConstVal->getType()->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);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 186:
 | ||
| #line 1940 "/Volumes/MacOS9/gcc/llvm/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 187:
 | ||
| #line 1945 "/Volumes/MacOS9/gcc/llvm/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 188:
 | ||
| #line 1950 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     if (!ExtractElementInst::isValidOperands(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
 | ||
|       GEN_ERROR("Invalid extractelement operands");
 | ||
|     yyval.ConstVal = ConstantExpr::getExtractElement(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 189:
 | ||
| #line 1956 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     if (!InsertElementInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
 | ||
|       GEN_ERROR("Invalid insertelement operands");
 | ||
|     yyval.ConstVal = ConstantExpr::getInsertElement(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 190:
 | ||
| #line 1962 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     if (!ShuffleVectorInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
 | ||
|       GEN_ERROR("Invalid shufflevector operands");
 | ||
|     yyval.ConstVal = ConstantExpr::getShuffleVector(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 191:
 | ||
| #line 1971 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     (yyval.ConstVector = yyvsp[-2].ConstVector)->push_back(yyvsp[0].ConstVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 192:
 | ||
| #line 1975 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.ConstVector = new std::vector<Constant*>();
 | ||
|     yyval.ConstVector->push_back(yyvsp[0].ConstVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 193:
 | ||
| #line 1983 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.BoolVal = false; ;
 | ||
|     break;}
 | ||
| case 194:
 | ||
| #line 1983 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.BoolVal = true; ;
 | ||
|     break;}
 | ||
| case 195:
 | ||
| #line 1986 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.BoolVal = true; ;
 | ||
|     break;}
 | ||
| case 196:
 | ||
| #line 1986 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.BoolVal = false; ;
 | ||
|     break;}
 | ||
| case 197:
 | ||
| #line 1989 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     const Type* VTy = yyvsp[-1].TypeVal->get();
 | ||
|     Value *V = getVal(VTy, yyvsp[0].ValIDVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|     GlobalValue* Aliasee = dyn_cast<GlobalValue>(V);
 | ||
|     if (!Aliasee)
 | ||
|       GEN_ERROR("Aliases can be created only to global values");
 | ||
| 
 | ||
|     yyval.ConstVal = Aliasee;
 | ||
|     CHECK_FOR_ERROR
 | ||
|     delete yyvsp[-1].TypeVal;
 | ||
|    ;
 | ||
|     break;}
 | ||
| case 198:
 | ||
| #line 2001 "/Volumes/MacOS9/gcc/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))
 | ||
|       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);
 | ||
|     CHECK_FOR_ERROR
 | ||
|     delete yyvsp[-1].TypeVal;
 | ||
|    ;
 | ||
|     break;}
 | ||
| case 199:
 | ||
| #line 2022 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.ModuleVal = ParserResult = CurModule.CurrentModule;
 | ||
|     CurModule.ModuleDone();
 | ||
|     CHECK_FOR_ERROR;
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 200:
 | ||
| #line 2027 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.ModuleVal = ParserResult = CurModule.CurrentModule;
 | ||
|     CurModule.ModuleDone();
 | ||
|     CHECK_FOR_ERROR;
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 203:
 | ||
| #line 2040 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { CurFun.isDeclare = false; ;
 | ||
|     break;}
 | ||
| case 204:
 | ||
| #line 2040 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     CurFun.FunctionDone();
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 205:
 | ||
| #line 2044 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { CurFun.isDeclare = true; ;
 | ||
|     break;}
 | ||
| case 206:
 | ||
| #line 2044 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 207:
 | ||
| #line 2047 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 208:
 | ||
| #line 2050 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     if (!UpRefs.empty())
 | ||
|       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:
 | ||
|     //
 | ||
|     // %list = type { %list * }
 | ||
|     // %list = type { %list * }    ; repeated type decl
 | ||
|     //
 | ||
|     // 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);
 | ||
| 
 | ||
|     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);
 | ||
|     }
 | ||
| 
 | ||
|     delete yyvsp[0].TypeVal;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 209:
 | ||
| #line 2074 "/Volumes/MacOS9/gcc/llvm/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);
 | ||
|     }
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 210:
 | ||
| #line 2085 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { 
 | ||
|     /* "Externally Visible" Linkage */
 | ||
|     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);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 211:
 | ||
| #line 2092 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     CurGV = 0;
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 212:
 | ||
| #line 2096 "/Volumes/MacOS9/gcc/llvm/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);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 213:
 | ||
| #line 2101 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     CurGV = 0;
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 214:
 | ||
| #line 2105 "/Volumes/MacOS9/gcc/llvm/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);
 | ||
|     CHECK_FOR_ERROR
 | ||
|     delete yyvsp[0].TypeVal;
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 215:
 | ||
| #line 2111 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     CurGV = 0;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 216:
 | ||
| #line 2115 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     std::string Name;
 | ||
|     if (yyvsp[-4].StrVal) {
 | ||
|       Name = *yyvsp[-4].StrVal;
 | ||
|       delete yyvsp[-4].StrVal;
 | ||
|     }
 | ||
|     if (Name.empty())
 | ||
|       GEN_ERROR("Alias name cannot be empty");
 | ||
|     
 | ||
|     Constant* Aliasee = yyvsp[0].ConstVal;
 | ||
|     if (Aliasee == 0)
 | ||
|       GEN_ERROR(std::string("Invalid aliasee for alias: ") + Name);
 | ||
| 
 | ||
|     GlobalAlias* GA = new GlobalAlias(Aliasee->getType(), yyvsp[-1].Linkage, Name, Aliasee,
 | ||
|                                       CurModule.CurrentModule);
 | ||
|     GA->setVisibility(yyvsp[-3].Visibility);
 | ||
|     InsertValue(GA, CurModule.Values);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 217:
 | ||
| #line 2134 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { 
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 218:
 | ||
| #line 2137 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 219:
 | ||
| #line 2143 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|   const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
 | ||
|   if (AsmSoFar.empty())
 | ||
|     CurModule.CurrentModule->setModuleInlineAsm(*yyvsp[0].StrVal);
 | ||
|   else
 | ||
|     CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+*yyvsp[0].StrVal);
 | ||
|   delete yyvsp[0].StrVal;
 | ||
|   CHECK_FOR_ERROR
 | ||
| ;
 | ||
|     break;}
 | ||
| case 220:
 | ||
| #line 2153 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     CurModule.CurrentModule->setTargetTriple(*yyvsp[0].StrVal);
 | ||
|     delete yyvsp[0].StrVal;
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 221:
 | ||
| #line 2157 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     CurModule.CurrentModule->setDataLayout(*yyvsp[0].StrVal);
 | ||
|     delete yyvsp[0].StrVal;
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 223:
 | ||
| #line 2164 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|           CurModule.CurrentModule->addLibrary(*yyvsp[0].StrVal);
 | ||
|           delete yyvsp[0].StrVal;
 | ||
|           CHECK_FOR_ERROR
 | ||
|         ;
 | ||
|     break;}
 | ||
| case 224:
 | ||
| #line 2169 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|           CurModule.CurrentModule->addLibrary(*yyvsp[0].StrVal);
 | ||
|           delete yyvsp[0].StrVal;
 | ||
|           CHECK_FOR_ERROR
 | ||
|         ;
 | ||
|     break;}
 | ||
| case 225:
 | ||
| #line 2174 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|           CHECK_FOR_ERROR
 | ||
|         ;
 | ||
|     break;}
 | ||
| case 226:
 | ||
| #line 2183 "/Volumes/MacOS9/gcc/llvm/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("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);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 227:
 | ||
| #line 2193 "/Volumes/MacOS9/gcc/llvm/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("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);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 228:
 | ||
| #line 2204 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.ArgList = yyvsp[0].ArgList;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 229:
 | ||
| #line 2208 "/Volumes/MacOS9/gcc/llvm/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);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 230:
 | ||
| #line 2217 "/Volumes/MacOS9/gcc/llvm/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);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 231:
 | ||
| #line 2226 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.ArgList = 0;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 232:
 | ||
| #line 2232 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|   std::string FunctionName(*yyvsp[-6].StrVal);
 | ||
|   delete 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());
 | ||
| 
 | ||
|   std::vector<const Type*> ParamTypeList;
 | ||
|   ParamAttrsVector Attrs;
 | ||
|   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...
 | ||
|     unsigned index = 1;
 | ||
|     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());
 | ||
|       ParamTypeList.push_back(Ty);
 | ||
|       if (Ty != Type::VoidTy)
 | ||
|         if (I->Attrs != ParamAttr::None) {
 | ||
|           ParamAttrsWithIndex PAWI; PAWI.index = index; PAWI.attrs = I->Attrs;
 | ||
|           Attrs.push_back(PAWI);
 | ||
|         }
 | ||
|     }
 | ||
|   }
 | ||
| 
 | ||
|   bool isVarArg = ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy;
 | ||
|   if (isVarArg) ParamTypeList.pop_back();
 | ||
| 
 | ||
|   ParamAttrsList *PAL = 0;
 | ||
|   if (!Attrs.empty())
 | ||
|     PAL = ParamAttrsList::get(Attrs);
 | ||
| 
 | ||
|   FunctionType *FT = FunctionType::get(*yyvsp[-7].TypeVal, ParamTypeList, isVarArg, PAL);
 | ||
|   const PointerType *PFT = PointerType::get(FT);
 | ||
|   delete yyvsp[-7].TypeVal;
 | ||
| 
 | ||
|   ValID ID;
 | ||
|   if (!FunctionName.empty()) {
 | ||
|     ID = ValID::createGlobalName((char*)FunctionName.c_str());
 | ||
|   } else {
 | ||
|     ID = ValID::createGlobalID(CurModule.Values.size());
 | ||
|   }
 | ||
| 
 | ||
|   Function *Fn = 0;
 | ||
|   // See if this function was forward referenced.  If so, recycle the object.
 | ||
|   if (GlobalValue *FWRef = CurModule.GetForwardRefForGlobal(PFT, ID)) {
 | ||
|     // Move the function to the end of the list, from whereever it was 
 | ||
|     // previously inserted.
 | ||
|     Fn = cast<Function>(FWRef);
 | ||
|     CurModule.CurrentModule->getFunctionList().remove(Fn);
 | ||
|     CurModule.CurrentModule->getFunctionList().push_back(Fn);
 | ||
|   } else if (!FunctionName.empty() &&     // Merge with an earlier prototype?
 | ||
|              (Fn = CurModule.CurrentModule->getFunction(FunctionName))) {
 | ||
|     if (Fn->getFunctionType() != FT) {
 | ||
|       // The existing function doesn't have the same type. This is an overload
 | ||
|       // error.
 | ||
|       GEN_ERROR("Overload of function '" + FunctionName + "' not permitted.");
 | ||
|     } else if (!CurFun.isDeclare && !Fn->isDeclaration()) {
 | ||
|       // Neither the existing or the current function is a declaration and they
 | ||
|       // have the same name and same type. Clearly this is a redefinition.
 | ||
|       GEN_ERROR("Redefinition of function '" + FunctionName + "'");
 | ||
|     } if (Fn->isDeclaration()) {
 | ||
|       // Make sure to strip off any argument names so we can't get conflicts.
 | ||
|       for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end();
 | ||
|            AI != AE; ++AI)
 | ||
|         AI->setName("");
 | ||
|     }
 | ||
|   } else  {  // Not already defined?
 | ||
|     Fn = new Function(FT, GlobalValue::ExternalWeakLinkage, FunctionName,
 | ||
|                       CurModule.CurrentModule);
 | ||
| 
 | ||
|     InsertValue(Fn, CurModule.Values);
 | ||
|   }
 | ||
| 
 | ||
|   CurFun.FunctionStart(Fn);
 | ||
| 
 | ||
|   if (CurFun.isDeclare) {
 | ||
|     // If we have declaration, always overwrite linkage.  This will allow us to
 | ||
|     // correctly handle cases, when pointer to function is passed as argument to
 | ||
|     // another function.
 | ||
|     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);
 | ||
|     delete yyvsp[-1].StrVal;
 | ||
|   }
 | ||
| 
 | ||
|   // Add all of the arguments we parsed to the function...
 | ||
|   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 &&
 | ||
|              "Not a varargs marker!");
 | ||
|       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) {
 | ||
|       delete I->Ty;                          // Delete the typeholder...
 | ||
|       setValueName(ArgIt, I->Name);       // Insert arg into symtab...
 | ||
|       CHECK_FOR_ERROR
 | ||
|       InsertValue(ArgIt);
 | ||
|       Idx++;
 | ||
|     }
 | ||
| 
 | ||
|     delete yyvsp[-4].ArgList;                     // We're now done with the argument list
 | ||
|   }
 | ||
|   CHECK_FOR_ERROR
 | ||
| ;
 | ||
|     break;}
 | ||
| case 235:
 | ||
| #line 2354 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|   yyval.FunctionVal = CurFun.CurrentFunction;
 | ||
| 
 | ||
|   // Make sure that we keep track of the linkage type even if there was a
 | ||
|   // previous "declare".
 | ||
|   yyval.FunctionVal->setLinkage(yyvsp[-3].Linkage);
 | ||
|   yyval.FunctionVal->setVisibility(yyvsp[-2].Visibility);
 | ||
| ;
 | ||
|     break;}
 | ||
| case 238:
 | ||
| #line 2365 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|   yyval.FunctionVal = yyvsp[-1].FunctionVal;
 | ||
|   CHECK_FOR_ERROR
 | ||
| ;
 | ||
|     break;}
 | ||
| case 239:
 | ||
| #line 2370 "/Volumes/MacOS9/gcc/llvm/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 240:
 | ||
| #line 2382 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.BoolVal = false;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 241:
 | ||
| #line 2386 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.BoolVal = true;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 242:
 | ||
| #line 2391 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {    // A reference to a direct constant
 | ||
|     yyval.ValIDVal = ValID::create(yyvsp[0].SInt64Val);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 243:
 | ||
| #line 2395 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.ValIDVal = ValID::create(yyvsp[0].UInt64Val);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 244:
 | ||
| #line 2399 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {                     // Perhaps it's an FP constant?
 | ||
|     yyval.ValIDVal = ValID::create(yyvsp[0].FPVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 245:
 | ||
| #line 2403 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.ValIDVal = ValID::create(ConstantInt::getTrue());
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 246:
 | ||
| #line 2407 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.ValIDVal = ValID::create(ConstantInt::getFalse());
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 247:
 | ||
| #line 2411 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.ValIDVal = ValID::createNull();
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 248:
 | ||
| #line 2415 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.ValIDVal = ValID::createUndef();
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 249:
 | ||
| #line 2419 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {     // A vector zero constant.
 | ||
|     yyval.ValIDVal = ValID::createZeroInit();
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 250:
 | ||
| #line 2423 "/Volumes/MacOS9/gcc/llvm/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(
 | ||
|                                          HandleUpRefs(
 | ||
|                                             VectorType::get(
 | ||
|                                                 ETy, 
 | ||
|                                                 NumElements)
 | ||
|                                             )
 | ||
|                                          );
 | ||
|     
 | ||
|     // Verify all elements are correct type!
 | ||
|     for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
 | ||
|       if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
 | ||
|         GEN_ERROR("Element #" + utostr(i) + " is not of type '" + 
 | ||
|                      ETy->getDescription() +"' as required!\nIt is of type '" +
 | ||
|                      (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
 | ||
|     }
 | ||
| 
 | ||
|     yyval.ValIDVal = ValID::create(ConstantVector::get(pt, *yyvsp[-1].ConstVector));
 | ||
|     delete PTy; delete yyvsp[-1].ConstVector;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 251:
 | ||
| #line 2448 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.ValIDVal = ValID::create(yyvsp[0].ConstVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 252:
 | ||
| #line 2452 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.ValIDVal = ValID::createInlineAsm(*yyvsp[-2].StrVal, *yyvsp[0].StrVal, yyvsp[-3].BoolVal);
 | ||
|     delete yyvsp[-2].StrVal;
 | ||
|     delete yyvsp[0].StrVal;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 253:
 | ||
| #line 2462 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {  // Is it an integer reference...?
 | ||
|     yyval.ValIDVal = ValID::createLocalID(yyvsp[0].UIntVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 254:
 | ||
| #line 2466 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.ValIDVal = ValID::createGlobalID(yyvsp[0].UIntVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 255:
 | ||
| #line 2470 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {                   // Is it a named reference...?
 | ||
|     yyval.ValIDVal = ValID::createLocalName(*yyvsp[0].StrVal);
 | ||
|     delete yyvsp[0].StrVal;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 256:
 | ||
| #line 2475 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {                   // Is it a named reference...?
 | ||
|     yyval.ValIDVal = ValID::createGlobalName(*yyvsp[0].StrVal);
 | ||
|     delete yyvsp[0].StrVal;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 259:
 | ||
| #line 2488 "/Volumes/MacOS9/gcc/llvm/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;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 260:
 | ||
| #line 2497 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.FunctionVal = yyvsp[-1].FunctionVal;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 261:
 | ||
| #line 2501 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { // Do not allow functions with 0 basic blocks   
 | ||
|     yyval.FunctionVal = yyvsp[-1].FunctionVal;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 262:
 | ||
| #line 2510 "/Volumes/MacOS9/gcc/llvm/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;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 263:
 | ||
| #line 2519 "/Volumes/MacOS9/gcc/llvm/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;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 264:
 | ||
| #line 2528 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {          // Empty space between instruction lists
 | ||
|     yyval.BasicBlockVal = defineBBVal(ValID::createLocalID(CurFun.NextValNum));
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 265:
 | ||
| #line 2532 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {             // Labelled (named) basic block
 | ||
|     yyval.BasicBlockVal = defineBBVal(ValID::createLocalName(*yyvsp[0].StrVal));
 | ||
|     delete yyvsp[0].StrVal;
 | ||
|     CHECK_FOR_ERROR
 | ||
| 
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 266:
 | ||
| #line 2539 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {              // Return with a result...
 | ||
|     yyval.TermInstVal = new ReturnInst(yyvsp[0].ValueVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 267:
 | ||
| #line 2543 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {                                    // Return with no result...
 | ||
|     yyval.TermInstVal = new ReturnInst();
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 268:
 | ||
| #line 2547 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {                           // Unconditional Branch...
 | ||
|     BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|     yyval.TermInstVal = new BranchInst(tmpBB);
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 269:
 | ||
| #line 2552 "/Volumes/MacOS9/gcc/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 270:
 | ||
| #line 2562 "/Volumes/MacOS9/gcc/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;
 | ||
| 
 | ||
|     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;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 271:
 | ||
| #line 2581 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     Value* tmpVal = getVal(yyvsp[-6].PrimType, yyvsp[-5].ValIDVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|     BasicBlock* tmpBB = getBBVal(yyvsp[-2].ValIDVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|     SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
 | ||
|     yyval.TermInstVal = S;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 272:
 | ||
| #line 2591 "/Volumes/MacOS9/gcc/llvm/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())) ||
 | ||
|         !(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;
 | ||
|         Attrs.push_back(PAWI);
 | ||
|       }
 | ||
|       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();
 | ||
|         if (Ty == Type::VoidTy)
 | ||
|           GEN_ERROR("Short call syntax cannot be used with varargs");
 | ||
|         ParamTypes.push_back(Ty);
 | ||
|         if (I->Attrs != ParamAttr::None) {
 | ||
|           ParamAttrsWithIndex PAWI; PAWI.index = index; PAWI.attrs = I->Attrs;
 | ||
|           Attrs.push_back(PAWI);
 | ||
|         }
 | ||
|       }
 | ||
| 
 | ||
|       ParamAttrsList *PAL = 0;
 | ||
|       if (!Attrs.empty())
 | ||
|         PAL = ParamAttrsList::get(Attrs);
 | ||
|       Ty = FunctionType::get(yyvsp[-11].TypeVal->get(), ParamTypes, false, PAL);
 | ||
|       PFTy = PointerType::get(Ty);
 | ||
|     }
 | ||
| 
 | ||
|     delete yyvsp[-11].TypeVal;
 | ||
| 
 | ||
|     Value *V = getVal(PFTy, yyvsp[-10].ValIDVal);   // Get the function we're calling...
 | ||
|     CHECK_FOR_ERROR
 | ||
|     BasicBlock *Normal = getBBVal(yyvsp[-3].ValIDVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|     BasicBlock *Except = getBBVal(yyvsp[0].ValIDVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
| 
 | ||
|     // Check the arguments
 | ||
|     ValueList Args;
 | ||
|     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 "
 | ||
|                        "expects arguments");
 | ||
|     } else {                                     // Has arguments?
 | ||
|       // Loop through FunctionType's arguments and ensure they are specified
 | ||
|       // correctly!
 | ||
|       FunctionType::param_iterator I = Ty->param_begin();
 | ||
|       FunctionType::param_iterator E = Ty->param_end();
 | ||
|       ValueRefList::iterator ArgI = yyvsp[-8].ValueRefList->begin(), ArgE = yyvsp[-8].ValueRefList->end();
 | ||
| 
 | ||
|       for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
 | ||
|         if (ArgI->Val->getType() != *I)
 | ||
|           GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
 | ||
|                          (*I)->getDescription() + "'");
 | ||
|         Args.push_back(ArgI->Val);
 | ||
|       }
 | ||
| 
 | ||
|       if (Ty->isVarArg()) {
 | ||
|         if (I == E)
 | ||
|           for (; ArgI != ArgE; ++ArgI)
 | ||
|             Args.push_back(ArgI->Val); // push the remaining varargs
 | ||
|       } else if (I != E || ArgI != ArgE)
 | ||
|         GEN_ERROR("Invalid number of parameters detected");
 | ||
|     }
 | ||
| 
 | ||
|     // Create the InvokeInst
 | ||
|     InvokeInst *II = new InvokeInst(V, Normal, Except, Args.begin(), Args.end());
 | ||
|     II->setCallingConv(yyvsp[-12].UIntVal);
 | ||
|     yyval.TermInstVal = II;
 | ||
|     delete yyvsp[-8].ValueRefList;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 273:
 | ||
| #line 2670 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.TermInstVal = new UnwindInst();
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 274:
 | ||
| #line 2674 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.TermInstVal = new UnreachableInst();
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 275:
 | ||
| #line 2681 "/Volumes/MacOS9/gcc/llvm/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);
 | ||
|     CHECK_FOR_ERROR
 | ||
|     yyval.JumpTable->push_back(std::make_pair(V, tmpBB));
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 276:
 | ||
| #line 2692 "/Volumes/MacOS9/gcc/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));
 | ||
|     CHECK_FOR_ERROR
 | ||
| 
 | ||
|     if (V == 0)
 | ||
|       GEN_ERROR("May only switch on a constant pool value");
 | ||
| 
 | ||
|     BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|     yyval.JumpTable->push_back(std::make_pair(V, tmpBB)); 
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 277:
 | ||
| #line 2705 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     // Is this definition named?? if so, assign the name...
 | ||
|     setValueName(yyvsp[0].InstVal, yyvsp[-1].StrVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|     InsertValue(yyvsp[0].InstVal);
 | ||
|     yyval.InstVal = yyvsp[0].InstVal;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 278:
 | ||
| #line 2715 "/Volumes/MacOS9/gcc/llvm/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);
 | ||
|     CHECK_FOR_ERROR
 | ||
|     BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|     yyval.PHIList->push_back(std::make_pair(tmpVal, tmpBB));
 | ||
|     delete yyvsp[-5].TypeVal;
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 279:
 | ||
| #line 2726 "/Volumes/MacOS9/gcc/llvm/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);
 | ||
|     CHECK_FOR_ERROR
 | ||
|     yyvsp[-6].PHIList->push_back(std::make_pair(tmpVal, tmpBB));
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 280:
 | ||
| #line 2736 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {    
 | ||
|     if (!UpRefs.empty())
 | ||
|       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 281:
 | ||
| #line 2745 "/Volumes/MacOS9/gcc/llvm/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;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 282:
 | ||
| #line 2754 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.ValueRefList = new ValueRefList(); ;
 | ||
|     break;}
 | ||
| case 283:
 | ||
| #line 2757 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| { yyval.ValueList = new std::vector<Value*>(); ;
 | ||
|     break;}
 | ||
| case 284:
 | ||
| #line 2758 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.ValueList = yyvsp[-2].ValueList;
 | ||
|     yyval.ValueList->push_back(yyvsp[0].ValueVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 285:
 | ||
| #line 2765 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.BoolVal = true;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 286:
 | ||
| #line 2769 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.BoolVal = false;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 287:
 | ||
| #line 2774 "/Volumes/MacOS9/gcc/llvm/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(
 | ||
|         "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))
 | ||
|       GEN_ERROR("Remainder not supported on vector types");
 | ||
|     Value* val1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal); 
 | ||
|     CHECK_FOR_ERROR
 | ||
|     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)
 | ||
|       GEN_ERROR("binary operator returned null");
 | ||
|     delete yyvsp[-3].TypeVal;
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 288:
 | ||
| #line 2795 "/Volumes/MacOS9/gcc/llvm/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("Logical operator requires integral operands");
 | ||
|     }
 | ||
|     Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|     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)
 | ||
|       GEN_ERROR("binary operator returned null");
 | ||
|     delete yyvsp[-3].TypeVal;
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 289:
 | ||
| #line 2812 "/Volumes/MacOS9/gcc/llvm/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("Vector types not supported by icmp instruction");
 | ||
|     Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|     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)
 | ||
|       GEN_ERROR("icmp operator returned null");
 | ||
|     delete yyvsp[-3].TypeVal;
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 290:
 | ||
| #line 2826 "/Volumes/MacOS9/gcc/llvm/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("Vector types not supported by fcmp instruction");
 | ||
|     Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|     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)
 | ||
|       GEN_ERROR("fcmp operator returned null");
 | ||
|     delete yyvsp[-3].TypeVal;
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 291:
 | ||
| #line 2840 "/Volumes/MacOS9/gcc/llvm/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 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 292:
 | ||
| #line 2852 "/Volumes/MacOS9/gcc/llvm/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())
 | ||
|       GEN_ERROR("select value types should match");
 | ||
|     yyval.InstVal = new SelectInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 293:
 | ||
| #line 2860 "/Volumes/MacOS9/gcc/llvm/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;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 294:
 | ||
| #line 2867 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     if (!ExtractElementInst::isValidOperands(yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
 | ||
|       GEN_ERROR("Invalid extractelement operands");
 | ||
|     yyval.InstVal = new ExtractElementInst(yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 295:
 | ||
| #line 2873 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     if (!InsertElementInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
 | ||
|       GEN_ERROR("Invalid insertelement operands");
 | ||
|     yyval.InstVal = new InsertElementInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 296:
 | ||
| #line 2879 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     if (!ShuffleVectorInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
 | ||
|       GEN_ERROR("Invalid shufflevector operands");
 | ||
|     yyval.InstVal = new ShuffleVectorInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 297:
 | ||
| #line 2885 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     const Type *Ty = yyvsp[0].PHIList->front().first->getType();
 | ||
|     if (!Ty->isFirstClassType())
 | ||
|       GEN_ERROR("PHI node operands must be of first class type");
 | ||
|     yyval.InstVal = new PHINode(Ty);
 | ||
|     ((PHINode*)yyval.InstVal)->reserveOperandSpace(yyvsp[0].PHIList->size());
 | ||
|     while (yyvsp[0].PHIList->begin() != yyvsp[0].PHIList->end()) {
 | ||
|       if (yyvsp[0].PHIList->front().first->getType() != Ty) 
 | ||
|         GEN_ERROR("All elements of a PHI node must be of the same type");
 | ||
|       cast<PHINode>(yyval.InstVal)->addIncoming(yyvsp[0].PHIList->front().first, yyvsp[0].PHIList->front().second);
 | ||
|       yyvsp[0].PHIList->pop_front();
 | ||
|     }
 | ||
|     delete yyvsp[0].PHIList;  // Free the list...
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 298:
 | ||
| #line 2901 "/Volumes/MacOS9/gcc/llvm/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())) ||
 | ||
|         !(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;
 | ||
|         Attrs.push_back(PAWI);
 | ||
|       }
 | ||
|       unsigned index = 1;
 | ||
|       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)
 | ||
|           GEN_ERROR("Short call syntax cannot be used with varargs");
 | ||
|         ParamTypes.push_back(Ty);
 | ||
|         if (I->Attrs != ParamAttr::None) {
 | ||
|           ParamAttrsWithIndex PAWI; PAWI.index = index; PAWI.attrs = I->Attrs;
 | ||
|           Attrs.push_back(PAWI);
 | ||
|         }
 | ||
|       }
 | ||
| 
 | ||
|       ParamAttrsList *PAL = 0;
 | ||
|       if (!Attrs.empty())
 | ||
|         PAL = ParamAttrsList::get(Attrs);
 | ||
| 
 | ||
|       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...
 | ||
|     CHECK_FOR_ERROR
 | ||
| 
 | ||
|     // Check for call to invalid intrinsic to avoid crashing later.
 | ||
|     if (Function *theF = dyn_cast<Function>(V)) {
 | ||
|       if (theF->hasName() && (theF->getValueName()->getKeyLength() >= 5) &&
 | ||
|           (0 == strncmp(theF->getValueName()->getKeyData(), "llvm.", 5)) &&
 | ||
|           !theF->getIntrinsicID(true))
 | ||
|         GEN_ERROR("Call to invalid LLVM intrinsic function '" +
 | ||
|                   theF->getName() + "'");
 | ||
|     }
 | ||
| 
 | ||
|     // Check the arguments 
 | ||
|     ValueList Args;
 | ||
|     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 "
 | ||
|                        "expects arguments");
 | ||
|     } else {                                     // Has arguments?
 | ||
|       // Loop through FunctionType's arguments and ensure they are specified
 | ||
|       // correctly!
 | ||
|       //
 | ||
|       FunctionType::param_iterator I = Ty->param_begin();
 | ||
|       FunctionType::param_iterator E = Ty->param_end();
 | ||
|       ValueRefList::iterator ArgI = yyvsp[-2].ValueRefList->begin(), ArgE = yyvsp[-2].ValueRefList->end();
 | ||
| 
 | ||
|       for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
 | ||
|         if (ArgI->Val->getType() != *I)
 | ||
|           GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
 | ||
|                          (*I)->getDescription() + "'");
 | ||
|         Args.push_back(ArgI->Val);
 | ||
|       }
 | ||
|       if (Ty->isVarArg()) {
 | ||
|         if (I == E)
 | ||
|           for (; ArgI != ArgE; ++ArgI)
 | ||
|             Args.push_back(ArgI->Val); // push the remaining varargs
 | ||
|       } else if (I != E || ArgI != ArgE)
 | ||
|         GEN_ERROR("Invalid number of parameters detected");
 | ||
|     }
 | ||
|     // Create the call node
 | ||
|     CallInst *CI = new CallInst(V, Args.begin(), Args.end());
 | ||
|     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 299:
 | ||
| #line 2985 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.InstVal = yyvsp[0].InstVal;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 300:
 | ||
| #line 2990 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.BoolVal = true;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 301:
 | ||
| #line 2994 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     yyval.BoolVal = false;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 302:
 | ||
| #line 3001 "/Volumes/MacOS9/gcc/llvm/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;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 303:
 | ||
| #line 3008 "/Volumes/MacOS9/gcc/llvm/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);
 | ||
|     CHECK_FOR_ERROR
 | ||
|     yyval.InstVal = new MallocInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
 | ||
|     delete yyvsp[-4].TypeVal;
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 304:
 | ||
| #line 3016 "/Volumes/MacOS9/gcc/llvm/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;
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 305:
 | ||
| #line 3023 "/Volumes/MacOS9/gcc/llvm/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);
 | ||
|     CHECK_FOR_ERROR
 | ||
|     yyval.InstVal = new AllocaInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
 | ||
|     delete yyvsp[-4].TypeVal;
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 306:
 | ||
| #line 3031 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| {
 | ||
|     if (!isa<PointerType>(yyvsp[0].ValueVal->getType()))
 | ||
|       GEN_ERROR("Trying to free nonpointer type " + 
 | ||
|                      yyvsp[0].ValueVal->getType()->getDescription() + "");
 | ||
|     yyval.InstVal = new FreeInst(yyvsp[0].ValueVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 307:
 | ||
| #line 3039 "/Volumes/MacOS9/gcc/llvm/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("Can't load from nonpointer type: " +
 | ||
|                      (*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);
 | ||
|     CHECK_FOR_ERROR
 | ||
|     yyval.InstVal = new LoadInst(tmpVal, "", yyvsp[-4].BoolVal, yyvsp[0].UIntVal);
 | ||
|     delete yyvsp[-2].TypeVal;
 | ||
|   ;
 | ||
|     break;}
 | ||
| case 308:
 | ||
| #line 3053 "/Volumes/MacOS9/gcc/llvm/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());
 | ||
|     if (!PT)
 | ||
|       GEN_ERROR("Can't store to a nonpointer type: " +
 | ||
|                      (*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() +
 | ||
|                      "' into space of type '" + ElTy->getDescription() + "'");
 | ||
| 
 | ||
|     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 309:
 | ||
| #line 3070 "/Volumes/MacOS9/gcc/llvm/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("getelementptr insn requires pointer operand");
 | ||
| 
 | ||
|     if (!GetElementPtrInst::getIndexedType(*yyvsp[-2].TypeVal, yyvsp[0].ValueList->begin(), yyvsp[0].ValueList->end(), true))
 | ||
|       GEN_ERROR("Invalid getelementptr indices for type '" +
 | ||
|                      (*yyvsp[-2].TypeVal)->getDescription()+ "'");
 | ||
|     Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal);
 | ||
|     CHECK_FOR_ERROR
 | ||
|     yyval.InstVal = new GetElementPtrInst(tmpVal, yyvsp[0].ValueList->begin(), yyvsp[0].ValueList->end());
 | ||
|     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"
 | ||
| 
 | ||
|   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
 | ||
| 
 | ||
|   *++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.  */
 | ||
| 
 | ||
|   yyn = yyr1[yyn];
 | ||
| 
 | ||
|   yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
 | ||
|   if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
 | ||
|     yystate = yytable[yystate];
 | ||
|   else
 | ||
|     yystate = yydefgoto[yyn - YYNTBASE];
 | ||
| 
 | ||
|   goto yynewstate;
 | ||
| 
 | ||
| yyerrlab:   /* here on detecting error */
 | ||
| 
 | ||
|   if (! yyerrstatus)
 | ||
|     /* If not already recovering from an error, report this error.  */
 | ||
|     {
 | ||
|       ++yynerrs;
 | ||
| 
 | ||
| #ifdef YYERROR_VERBOSE
 | ||
|       yyn = yypact[yystate];
 | ||
| 
 | ||
|       if (yyn > YYFLAG && yyn < YYLAST)
 | ||
| 	{
 | ||
| 	  int size = 0;
 | ||
| 	  char *msg;
 | ||
| 	  int x, count;
 | ||
| 
 | ||
| 	  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)
 | ||
| 	    {
 | ||
| 	      strcpy(msg, "parse error");
 | ||
| 
 | ||
| 	      if (count < 5)
 | ||
| 		{
 | ||
| 		  count = 0;
 | ||
| 		  for (x = (yyn < 0 ? -yyn : 0);
 | ||
| 		       x < (sizeof(yytname) / sizeof(char *)); x++)
 | ||
| 		    if (yycheck[x + yyn] == x)
 | ||
| 		      {
 | ||
| 			strcat(msg, count == 0 ? ", expecting `" : " or `");
 | ||
| 			strcat(msg, yytname[x]);
 | ||
| 			strcat(msg, "'");
 | ||
| 			count++;
 | ||
| 		      }
 | ||
| 		}
 | ||
| 	      yyerror(msg);
 | ||
| 	      free(msg);
 | ||
| 	    }
 | ||
| 	  else
 | ||
| 	    yyerror ("parse error; also virtual memory exceeded");
 | ||
| 	}
 | ||
|       else
 | ||
| #endif /* YYERROR_VERBOSE */
 | ||
| 	yyerror("parse 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.  */
 | ||
| 
 | ||
|       /* return failure if at end of input */
 | ||
|       if (yychar == YYEOF)
 | ||
| 	YYABORT;
 | ||
| 
 | ||
| #if YYDEBUG != 0
 | ||
|       if (yydebug)
 | ||
| 	fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
 | ||
| #endif
 | ||
| 
 | ||
|       yychar = YYEMPTY;
 | ||
|     }
 | ||
| 
 | ||
|   /* Else will try to reuse lookahead token
 | ||
|      after shifting the error token.  */
 | ||
| 
 | ||
|   yyerrstatus = 3;		/* Each real token shifted decrements this */
 | ||
| 
 | ||
|   goto yyerrhandle;
 | ||
| 
 | ||
| yyerrdefault:  /* current state does not do anything special for the error token. */
 | ||
| 
 | ||
| #if 0
 | ||
|   /* This is wrong; only states that explicitly want error tokens
 | ||
|      should shift them.  */
 | ||
|   yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
 | ||
|   if (yyn) goto yydefault;
 | ||
| #endif
 | ||
| 
 | ||
| yyerrpop:   /* pop the current state because it cannot handle the error token */
 | ||
| 
 | ||
|   if (yyssp == yyss) YYABORT;
 | ||
|   yyvsp--;
 | ||
|   yystate = *--yyssp;
 | ||
| #ifdef YYLSP_NEEDED
 | ||
|   yylsp--;
 | ||
| #endif
 | ||
| 
 | ||
| #if YYDEBUG != 0
 | ||
|   if (yydebug)
 | ||
|     {
 | ||
|       short *ssp1 = yyss - 1;
 | ||
|       fprintf (stderr, "Error: state stack now");
 | ||
|       while (ssp1 != yyssp)
 | ||
| 	fprintf (stderr, " %d", *++ssp1);
 | ||
|       fprintf (stderr, "\n");
 | ||
|     }
 | ||
| #endif
 | ||
| 
 | ||
| yyerrhandle:
 | ||
| 
 | ||
|   yyn = yypact[yystate];
 | ||
|   if (yyn == YYFLAG)
 | ||
|     goto yyerrdefault;
 | ||
| 
 | ||
|   yyn += YYTERROR;
 | ||
|   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
 | ||
|     goto yyerrdefault;
 | ||
| 
 | ||
|   yyn = yytable[yyn];
 | ||
|   if (yyn < 0)
 | ||
|     {
 | ||
|       if (yyn == YYFLAG)
 | ||
| 	goto yyerrpop;
 | ||
|       yyn = -yyn;
 | ||
|       goto yyreduce;
 | ||
|     }
 | ||
|   else if (yyn == 0)
 | ||
|     goto yyerrpop;
 | ||
| 
 | ||
|   if (yyn == YYFINAL)
 | ||
|     YYACCEPT;
 | ||
| 
 | ||
| #if YYDEBUG != 0
 | ||
|   if (yydebug)
 | ||
|     fprintf(stderr, "Shifting error token, ");
 | ||
| #endif
 | ||
| 
 | ||
|   *++yyvsp = yylval;
 | ||
| #ifdef YYLSP_NEEDED
 | ||
|   *++yylsp = yylloc;
 | ||
| #endif
 | ||
| 
 | ||
|   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);
 | ||
| #endif
 | ||
|     }
 | ||
|   return 1;
 | ||
| }
 | ||
| #line 3087 "/Volumes/MacOS9/gcc/llvm/lib/AsmParser/llvmAsmParser.y"
 | ||
| 
 | ||
| 
 | ||
| // common code from the two 'RunVMAsmParser' functions
 | ||
| static Module* RunParser(Module * M) {
 | ||
| 
 | ||
|   llvmAsmlineno = 1;      // Reset the current line number...
 | ||
|   CurModule.CurrentModule = M;
 | ||
| #if YYDEBUG
 | ||
|   yydebug = Debug;
 | ||
| #endif
 | ||
| 
 | ||
|   // Check to make sure the parser succeeded
 | ||
|   if (yyparse()) {
 | ||
|     if (ParserResult)
 | ||
|       delete ParserResult;
 | ||
|     return 0;
 | ||
|   }
 | ||
| 
 | ||
|   // Emit an error if there are any unresolved types left.
 | ||
|   if (!CurModule.LateResolveTypes.empty()) {
 | ||
|     const ValID &DID = CurModule.LateResolveTypes.begin()->first;
 | ||
|     if (DID.Type == ValID::LocalName) {
 | ||
|       GenerateError("Undefined type remains at eof: '"+DID.getName() + "'");
 | ||
|     } else {
 | ||
|       GenerateError("Undefined type remains at eof: #" + itostr(DID.Num));
 | ||
|     }
 | ||
|     if (ParserResult)
 | ||
|       delete ParserResult;
 | ||
|     return 0;
 | ||
|   }
 | ||
| 
 | ||
|   // Emit an error if there are any unresolved values left.
 | ||
|   if (!CurModule.LateResolveValues.empty()) {
 | ||
|     Value *V = CurModule.LateResolveValues.back();
 | ||
|     std::map<Value*, std::pair<ValID, int> >::iterator I =
 | ||
|       CurModule.PlaceHolderInfo.find(V);
 | ||
| 
 | ||
|     if (I != CurModule.PlaceHolderInfo.end()) {
 | ||
|       ValID &DID = I->second.first;
 | ||
|       if (DID.Type == ValID::LocalName) {
 | ||
|         GenerateError("Undefined value remains at eof: "+DID.getName() + "'");
 | ||
|       } else {
 | ||
|         GenerateError("Undefined value remains at eof: #" + itostr(DID.Num));
 | ||
|       }
 | ||
|       if (ParserResult)
 | ||
|         delete ParserResult;
 | ||
|       return 0;
 | ||
|     }
 | ||
|   }
 | ||
| 
 | ||
|   // Check to make sure that parsing produced a result
 | ||
|   if (!ParserResult)
 | ||
|     return 0;
 | ||
| 
 | ||
|   // Reset ParserResult variable while saving its value for the result.
 | ||
|   Module *Result = ParserResult;
 | ||
|   ParserResult = 0;
 | ||
| 
 | ||
|   return Result;
 | ||
| }
 | ||
| 
 | ||
| void llvm::GenerateError(const std::string &message, int LineNo) {
 | ||
|   if (LineNo == -1) LineNo = llvmAsmlineno;
 | ||
|   // TODO: column number in exception
 | ||
|   if (TheParseError)
 | ||
|     TheParseError->setError(CurFilename, message, LineNo);
 | ||
|   TriggerError = 1;
 | ||
| }
 | ||
| 
 | ||
| int yyerror(const char *ErrorMsg) {
 | ||
|   std::string where 
 | ||
|     = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename)
 | ||
|                   + ":" + utostr((unsigned) llvmAsmlineno) + ": ";
 | ||
|   std::string errMsg = where + "error: " + std::string(ErrorMsg);
 | ||
|   if (yychar != YYEMPTY && yychar != 0)
 | ||
|     errMsg += " while reading token: '" + std::string(llvmAsmtext, llvmAsmleng)+
 | ||
|               "'";
 | ||
|   GenerateError(errMsg);
 | ||
|   return 0;
 | ||
| }
 |