|  | /* A Bison parser, made by GNU Bison 2.1.  */ | 
|  |  | 
|  | /* Skeleton parser for Yacc-like parsing with Bison, | 
|  | Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. | 
|  |  | 
|  | This program is free software; you can redistribute it and/or modify | 
|  | it under the terms of the GNU General Public License as published by | 
|  | the Free Software Foundation; either version 2, or (at your option) | 
|  | any later version. | 
|  |  | 
|  | This program is distributed in the hope that it will be useful, | 
|  | but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|  | GNU General Public License for more details. | 
|  |  | 
|  | You should have received a copy of the GNU General Public License | 
|  | along with this program; if not, write to the Free Software | 
|  | Foundation, Inc., 51 Franklin Street, Fifth Floor, | 
|  | Boston, MA 02110-1301, USA.  */ | 
|  |  | 
|  | /* As a special exception, when this file is copied by Bison into a | 
|  | Bison output file, you may use that output file without restriction. | 
|  | This special exception was added by the Free Software Foundation | 
|  | in version 1.24 of Bison.  */ | 
|  |  | 
|  | /* Written by Richard Stallman by simplifying the original so called | 
|  | ``semantic'' parser.  */ | 
|  |  | 
|  | /* All symbols defined below should begin with yy or YY, to avoid | 
|  | infringing on user name space.  This should be done even for local | 
|  | variables, as they might otherwise be expanded by user macros. | 
|  | There are some unavoidable exceptions within include files to | 
|  | define necessary library symbols; they are noted "INFRINGES ON | 
|  | USER NAME SPACE" below.  */ | 
|  |  | 
|  | /* Identify Bison output.  */ | 
|  | #define YYBISON 1 | 
|  |  | 
|  | /* Bison version.  */ | 
|  | #define YYBISON_VERSION "2.1" | 
|  |  | 
|  | /* Skeleton name.  */ | 
|  | #define YYSKELETON_NAME "yacc.c" | 
|  |  | 
|  | /* Pure parsers.  */ | 
|  | #define YYPURE 0 | 
|  |  | 
|  | /* Using locations.  */ | 
|  | #define YYLSP_NEEDED 0 | 
|  |  | 
|  | /* Substitute the variable and function names.  */ | 
|  | #define yyparse llvmAsmparse | 
|  | #define yylex   llvmAsmlex | 
|  | #define yyerror llvmAsmerror | 
|  | #define yylval  llvmAsmlval | 
|  | #define yychar  llvmAsmchar | 
|  | #define yydebug llvmAsmdebug | 
|  | #define yynerrs llvmAsmnerrs | 
|  |  | 
|  |  | 
|  | /* Tokens.  */ | 
|  | #ifndef YYTOKENTYPE | 
|  | # define YYTOKENTYPE | 
|  | /* Put the tokens into the symbol table, so that GDB and other debuggers | 
|  | know about them.  */ | 
|  | enum yytokentype { | 
|  | ESINT64VAL = 258, | 
|  | EUINT64VAL = 259, | 
|  | ESAPINTVAL = 260, | 
|  | EUAPINTVAL = 261, | 
|  | LOCALVAL_ID = 262, | 
|  | GLOBALVAL_ID = 263, | 
|  | FPVAL = 264, | 
|  | VOID = 265, | 
|  | INTTYPE = 266, | 
|  | FLOAT = 267, | 
|  | DOUBLE = 268, | 
|  | LABEL = 269, | 
|  | TYPE = 270, | 
|  | LOCALVAR = 271, | 
|  | GLOBALVAR = 272, | 
|  | LABELSTR = 273, | 
|  | STRINGCONSTANT = 274, | 
|  | ATSTRINGCONSTANT = 275, | 
|  | IMPLEMENTATION = 276, | 
|  | ZEROINITIALIZER = 277, | 
|  | TRUETOK = 278, | 
|  | FALSETOK = 279, | 
|  | BEGINTOK = 280, | 
|  | ENDTOK = 281, | 
|  | DECLARE = 282, | 
|  | DEFINE = 283, | 
|  | GLOBAL = 284, | 
|  | CONSTANT = 285, | 
|  | SECTION = 286, | 
|  | VOLATILE = 287, | 
|  | TO = 288, | 
|  | DOTDOTDOT = 289, | 
|  | NULL_TOK = 290, | 
|  | UNDEF = 291, | 
|  | INTERNAL = 292, | 
|  | LINKONCE = 293, | 
|  | WEAK = 294, | 
|  | APPENDING = 295, | 
|  | DLLIMPORT = 296, | 
|  | DLLEXPORT = 297, | 
|  | EXTERN_WEAK = 298, | 
|  | OPAQUE = 299, | 
|  | EXTERNAL = 300, | 
|  | TARGET = 301, | 
|  | TRIPLE = 302, | 
|  | ALIGN = 303, | 
|  | DEPLIBS = 304, | 
|  | CALL = 305, | 
|  | TAIL = 306, | 
|  | ASM_TOK = 307, | 
|  | MODULE = 308, | 
|  | SIDEEFFECT = 309, | 
|  | CC_TOK = 310, | 
|  | CCC_TOK = 311, | 
|  | FASTCC_TOK = 312, | 
|  | COLDCC_TOK = 313, | 
|  | X86_STDCALLCC_TOK = 314, | 
|  | X86_FASTCALLCC_TOK = 315, | 
|  | DATALAYOUT = 316, | 
|  | RET = 317, | 
|  | BR = 318, | 
|  | SWITCH = 319, | 
|  | INVOKE = 320, | 
|  | UNWIND = 321, | 
|  | UNREACHABLE = 322, | 
|  | ADD = 323, | 
|  | SUB = 324, | 
|  | MUL = 325, | 
|  | UDIV = 326, | 
|  | SDIV = 327, | 
|  | FDIV = 328, | 
|  | UREM = 329, | 
|  | SREM = 330, | 
|  | FREM = 331, | 
|  | AND = 332, | 
|  | OR = 333, | 
|  | XOR = 334, | 
|  | SHL = 335, | 
|  | LSHR = 336, | 
|  | ASHR = 337, | 
|  | ICMP = 338, | 
|  | FCMP = 339, | 
|  | EQ = 340, | 
|  | NE = 341, | 
|  | SLT = 342, | 
|  | SGT = 343, | 
|  | SLE = 344, | 
|  | SGE = 345, | 
|  | ULT = 346, | 
|  | UGT = 347, | 
|  | ULE = 348, | 
|  | UGE = 349, | 
|  | OEQ = 350, | 
|  | ONE = 351, | 
|  | OLT = 352, | 
|  | OGT = 353, | 
|  | OLE = 354, | 
|  | OGE = 355, | 
|  | ORD = 356, | 
|  | UNO = 357, | 
|  | UEQ = 358, | 
|  | UNE = 359, | 
|  | MALLOC = 360, | 
|  | ALLOCA = 361, | 
|  | FREE = 362, | 
|  | LOAD = 363, | 
|  | STORE = 364, | 
|  | GETELEMENTPTR = 365, | 
|  | TRUNC = 366, | 
|  | ZEXT = 367, | 
|  | SEXT = 368, | 
|  | FPTRUNC = 369, | 
|  | FPEXT = 370, | 
|  | BITCAST = 371, | 
|  | UITOFP = 372, | 
|  | SITOFP = 373, | 
|  | FPTOUI = 374, | 
|  | FPTOSI = 375, | 
|  | INTTOPTR = 376, | 
|  | PTRTOINT = 377, | 
|  | PHI_TOK = 378, | 
|  | SELECT = 379, | 
|  | VAARG = 380, | 
|  | EXTRACTELEMENT = 381, | 
|  | INSERTELEMENT = 382, | 
|  | SHUFFLEVECTOR = 383, | 
|  | NORETURN = 384, | 
|  | INREG = 385, | 
|  | SRET = 386, | 
|  | DEFAULT = 387, | 
|  | HIDDEN = 388 | 
|  | }; | 
|  | #endif | 
|  | /* Tokens.  */ | 
|  | #define ESINT64VAL 258 | 
|  | #define EUINT64VAL 259 | 
|  | #define ESAPINTVAL 260 | 
|  | #define EUAPINTVAL 261 | 
|  | #define LOCALVAL_ID 262 | 
|  | #define GLOBALVAL_ID 263 | 
|  | #define FPVAL 264 | 
|  | #define VOID 265 | 
|  | #define INTTYPE 266 | 
|  | #define FLOAT 267 | 
|  | #define DOUBLE 268 | 
|  | #define LABEL 269 | 
|  | #define TYPE 270 | 
|  | #define LOCALVAR 271 | 
|  | #define GLOBALVAR 272 | 
|  | #define LABELSTR 273 | 
|  | #define STRINGCONSTANT 274 | 
|  | #define ATSTRINGCONSTANT 275 | 
|  | #define IMPLEMENTATION 276 | 
|  | #define ZEROINITIALIZER 277 | 
|  | #define TRUETOK 278 | 
|  | #define FALSETOK 279 | 
|  | #define BEGINTOK 280 | 
|  | #define ENDTOK 281 | 
|  | #define DECLARE 282 | 
|  | #define DEFINE 283 | 
|  | #define GLOBAL 284 | 
|  | #define CONSTANT 285 | 
|  | #define SECTION 286 | 
|  | #define VOLATILE 287 | 
|  | #define TO 288 | 
|  | #define DOTDOTDOT 289 | 
|  | #define NULL_TOK 290 | 
|  | #define UNDEF 291 | 
|  | #define INTERNAL 292 | 
|  | #define LINKONCE 293 | 
|  | #define WEAK 294 | 
|  | #define APPENDING 295 | 
|  | #define DLLIMPORT 296 | 
|  | #define DLLEXPORT 297 | 
|  | #define EXTERN_WEAK 298 | 
|  | #define OPAQUE 299 | 
|  | #define EXTERNAL 300 | 
|  | #define TARGET 301 | 
|  | #define TRIPLE 302 | 
|  | #define ALIGN 303 | 
|  | #define DEPLIBS 304 | 
|  | #define CALL 305 | 
|  | #define TAIL 306 | 
|  | #define ASM_TOK 307 | 
|  | #define MODULE 308 | 
|  | #define SIDEEFFECT 309 | 
|  | #define CC_TOK 310 | 
|  | #define CCC_TOK 311 | 
|  | #define FASTCC_TOK 312 | 
|  | #define COLDCC_TOK 313 | 
|  | #define X86_STDCALLCC_TOK 314 | 
|  | #define X86_FASTCALLCC_TOK 315 | 
|  | #define DATALAYOUT 316 | 
|  | #define RET 317 | 
|  | #define BR 318 | 
|  | #define SWITCH 319 | 
|  | #define INVOKE 320 | 
|  | #define UNWIND 321 | 
|  | #define UNREACHABLE 322 | 
|  | #define ADD 323 | 
|  | #define SUB 324 | 
|  | #define MUL 325 | 
|  | #define UDIV 326 | 
|  | #define SDIV 327 | 
|  | #define FDIV 328 | 
|  | #define UREM 329 | 
|  | #define SREM 330 | 
|  | #define FREM 331 | 
|  | #define AND 332 | 
|  | #define OR 333 | 
|  | #define XOR 334 | 
|  | #define SHL 335 | 
|  | #define LSHR 336 | 
|  | #define ASHR 337 | 
|  | #define ICMP 338 | 
|  | #define FCMP 339 | 
|  | #define EQ 340 | 
|  | #define NE 341 | 
|  | #define SLT 342 | 
|  | #define SGT 343 | 
|  | #define SLE 344 | 
|  | #define SGE 345 | 
|  | #define ULT 346 | 
|  | #define UGT 347 | 
|  | #define ULE 348 | 
|  | #define UGE 349 | 
|  | #define OEQ 350 | 
|  | #define ONE 351 | 
|  | #define OLT 352 | 
|  | #define OGT 353 | 
|  | #define OLE 354 | 
|  | #define OGE 355 | 
|  | #define ORD 356 | 
|  | #define UNO 357 | 
|  | #define UEQ 358 | 
|  | #define UNE 359 | 
|  | #define MALLOC 360 | 
|  | #define ALLOCA 361 | 
|  | #define FREE 362 | 
|  | #define LOAD 363 | 
|  | #define STORE 364 | 
|  | #define GETELEMENTPTR 365 | 
|  | #define TRUNC 366 | 
|  | #define ZEXT 367 | 
|  | #define SEXT 368 | 
|  | #define FPTRUNC 369 | 
|  | #define FPEXT 370 | 
|  | #define BITCAST 371 | 
|  | #define UITOFP 372 | 
|  | #define SITOFP 373 | 
|  | #define FPTOUI 374 | 
|  | #define FPTOSI 375 | 
|  | #define INTTOPTR 376 | 
|  | #define PTRTOINT 377 | 
|  | #define PHI_TOK 378 | 
|  | #define SELECT 379 | 
|  | #define VAARG 380 | 
|  | #define EXTRACTELEMENT 381 | 
|  | #define INSERTELEMENT 382 | 
|  | #define SHUFFLEVECTOR 383 | 
|  | #define NORETURN 384 | 
|  | #define INREG 385 | 
|  | #define SRET 386 | 
|  | #define DEFAULT 387 | 
|  | #define HIDDEN 388 | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | /* Copy the first part of user declarations.  */ | 
|  | #line 14 "/proj/llvm/llvm-1/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/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; | 
|  | } | 
|  |  | 
|  | 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.Name)) { | 
|  | 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.Name); | 
|  | 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.Name); | 
|  | 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; | 
|  | } | 
|  | 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... | 
|  | // | 
|  | 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); | 
|  |  | 
|  | // Erase the forward ref from the map as its no longer "forward" | 
|  | CurFun.BBForwardRefs.erase(ID); | 
|  |  | 
|  | // 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.Name : ""); | 
|  | 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.Name; | 
|  | 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.Name; | 
|  | 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(char *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, char *NameStr) { | 
|  | if (!NameStr) return; | 
|  | std::string Name(NameStr);      // Copy string | 
|  | free(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(char *NameStr, | 
|  | GlobalValue::LinkageTypes Linkage, | 
|  | GlobalValue::VisibilityTypes Visibility, | 
|  | bool isConstantGlobal, const Type *Ty, | 
|  | Constant *Initializer) { | 
|  | 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 | 
|  | free(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((char*)Name.c_str()); | 
|  | } 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); | 
|  | 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); | 
|  | 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, char *NameStr) { | 
|  | assert(!inFunctionScope() && "Can't give types function-local names!"); | 
|  | if (NameStr == 0) return false; | 
|  |  | 
|  | std::string Name(NameStr);      // Copy string | 
|  | free(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); | 
|  | } | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | /* Enabling traces.  */ | 
|  | #ifndef YYDEBUG | 
|  | # define YYDEBUG 0 | 
|  | #endif | 
|  |  | 
|  | /* Enabling verbose error messages.  */ | 
|  | #ifdef YYERROR_VERBOSE | 
|  | # undef YYERROR_VERBOSE | 
|  | # define YYERROR_VERBOSE 1 | 
|  | #else | 
|  | # define YYERROR_VERBOSE 0 | 
|  | #endif | 
|  |  | 
|  | /* Enabling the token table.  */ | 
|  | #ifndef YYTOKEN_TABLE | 
|  | # define YYTOKEN_TABLE 0 | 
|  | #endif | 
|  |  | 
|  | #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) | 
|  | #line 932 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | typedef union YYSTYPE { | 
|  | 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; | 
|  | llvm::FunctionType::ParameterAttributes ParamAttrs; | 
|  | llvm::APInt                       *APIntVal; | 
|  | int64_t                           SInt64Val; | 
|  | uint64_t                          UInt64Val; | 
|  | int                               SIntVal; | 
|  | unsigned                          UIntVal; | 
|  | double                            FPVal; | 
|  | bool                              BoolVal; | 
|  |  | 
|  | char                             *StrVal;   // This memory is strdup'd! | 
|  | llvm::ValID                       ValIDVal; // strdup'd memory maybe! | 
|  |  | 
|  | 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; | 
|  | /* Line 196 of yacc.c.  */ | 
|  | #line 1324 "llvmAsmParser.tab.c" | 
|  | # define yystype YYSTYPE /* obsolescent; will be withdrawn */ | 
|  | # define YYSTYPE_IS_DECLARED 1 | 
|  | # define YYSTYPE_IS_TRIVIAL 1 | 
|  | #endif | 
|  |  | 
|  |  | 
|  |  | 
|  | /* Copy the second part of user declarations.  */ | 
|  |  | 
|  |  | 
|  | /* Line 219 of yacc.c.  */ | 
|  | #line 1336 "llvmAsmParser.tab.c" | 
|  |  | 
|  | #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) | 
|  | # define YYSIZE_T __SIZE_TYPE__ | 
|  | #endif | 
|  | #if ! defined (YYSIZE_T) && defined (size_t) | 
|  | # define YYSIZE_T size_t | 
|  | #endif | 
|  | #if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus)) | 
|  | # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ | 
|  | # define YYSIZE_T size_t | 
|  | #endif | 
|  | #if ! defined (YYSIZE_T) | 
|  | # define YYSIZE_T unsigned int | 
|  | #endif | 
|  |  | 
|  | #ifndef YY_ | 
|  | # if YYENABLE_NLS | 
|  | #  if ENABLE_NLS | 
|  | #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */ | 
|  | #   define YY_(msgid) dgettext ("bison-runtime", msgid) | 
|  | #  endif | 
|  | # endif | 
|  | # ifndef YY_ | 
|  | #  define YY_(msgid) msgid | 
|  | # endif | 
|  | #endif | 
|  |  | 
|  | #if ! defined (yyoverflow) || YYERROR_VERBOSE | 
|  |  | 
|  | /* The parser invokes alloca or malloc; define the necessary symbols.  */ | 
|  |  | 
|  | # ifdef YYSTACK_USE_ALLOCA | 
|  | #  if YYSTACK_USE_ALLOCA | 
|  | #   ifdef __GNUC__ | 
|  | #    define YYSTACK_ALLOC __builtin_alloca | 
|  | #   else | 
|  | #    define YYSTACK_ALLOC alloca | 
|  | #    if defined (__STDC__) || defined (__cplusplus) | 
|  | #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ | 
|  | #     define YYINCLUDED_STDLIB_H | 
|  | #    endif | 
|  | #   endif | 
|  | #  endif | 
|  | # endif | 
|  |  | 
|  | # ifdef YYSTACK_ALLOC | 
|  | /* Pacify GCC's `empty if-body' warning. */ | 
|  | #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) | 
|  | #  ifndef YYSTACK_ALLOC_MAXIMUM | 
|  | /* The OS might guarantee only one guard page at the bottom of the stack, | 
|  | and a page size can be as small as 4096 bytes.  So we cannot safely | 
|  | invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number | 
|  | to allow for a few compiler-allocated temporary stack slots.  */ | 
|  | #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */ | 
|  | #  endif | 
|  | # else | 
|  | #  define YYSTACK_ALLOC YYMALLOC | 
|  | #  define YYSTACK_FREE YYFREE | 
|  | #  ifndef YYSTACK_ALLOC_MAXIMUM | 
|  | #   define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1) | 
|  | #  endif | 
|  | #  ifdef __cplusplus | 
|  | extern "C" { | 
|  | #  endif | 
|  | #  ifndef YYMALLOC | 
|  | #   define YYMALLOC malloc | 
|  | #   if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \ | 
|  | && (defined (__STDC__) || defined (__cplusplus))) | 
|  | void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ | 
|  | #   endif | 
|  | #  endif | 
|  | #  ifndef YYFREE | 
|  | #   define YYFREE free | 
|  | #   if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \ | 
|  | && (defined (__STDC__) || defined (__cplusplus))) | 
|  | void free (void *); /* INFRINGES ON USER NAME SPACE */ | 
|  | #   endif | 
|  | #  endif | 
|  | #  ifdef __cplusplus | 
|  | } | 
|  | #  endif | 
|  | # endif | 
|  | #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ | 
|  |  | 
|  |  | 
|  | #if (! defined (yyoverflow) \ | 
|  | && (! defined (__cplusplus) \ | 
|  | || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL))) | 
|  |  | 
|  | /* A type that is properly aligned for any stack member.  */ | 
|  | union yyalloc | 
|  | { | 
|  | short int yyss; | 
|  | YYSTYPE yyvs; | 
|  | }; | 
|  |  | 
|  | /* The size of the maximum gap between one aligned stack and the next.  */ | 
|  | # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) | 
|  |  | 
|  | /* The size of an array large to enough to hold all stacks, each with | 
|  | N elements.  */ | 
|  | # define YYSTACK_BYTES(N) \ | 
|  | ((N) * (sizeof (short int) + sizeof (YYSTYPE))			\ | 
|  | + YYSTACK_GAP_MAXIMUM) | 
|  |  | 
|  | /* Copy COUNT objects from FROM to TO.  The source and destination do | 
|  | not overlap.  */ | 
|  | # ifndef YYCOPY | 
|  | #  if defined (__GNUC__) && 1 < __GNUC__ | 
|  | #   define YYCOPY(To, From, Count) \ | 
|  | __builtin_memcpy (To, From, (Count) * sizeof (*(From))) | 
|  | #  else | 
|  | #   define YYCOPY(To, From, Count)		\ | 
|  | do					\ | 
|  | {					\ | 
|  | YYSIZE_T yyi;				\ | 
|  | for (yyi = 0; yyi < (Count); yyi++)	\ | 
|  | (To)[yyi] = (From)[yyi];		\ | 
|  | }					\ | 
|  | while (0) | 
|  | #  endif | 
|  | # endif | 
|  |  | 
|  | /* Relocate STACK from its old location to the new one.  The | 
|  | local variables YYSIZE and YYSTACKSIZE give the old and new number of | 
|  | elements in the stack, and YYPTR gives the new location of the | 
|  | stack.  Advance YYPTR to a properly aligned location for the next | 
|  | stack.  */ | 
|  | # define YYSTACK_RELOCATE(Stack)					\ | 
|  | do									\ | 
|  | {									\ | 
|  | YYSIZE_T yynewbytes;						\ | 
|  | YYCOPY (&yyptr->Stack, Stack, yysize);				\ | 
|  | Stack = &yyptr->Stack;						\ | 
|  | yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ | 
|  | yyptr += yynewbytes / sizeof (*yyptr);				\ | 
|  | }									\ | 
|  | while (0) | 
|  |  | 
|  | #endif | 
|  |  | 
|  | #if defined (__STDC__) || defined (__cplusplus) | 
|  | typedef signed char yysigned_char; | 
|  | #else | 
|  | typedef short int yysigned_char; | 
|  | #endif | 
|  |  | 
|  | /* YYFINAL -- State number of the termination state. */ | 
|  | #define YYFINAL  40 | 
|  | /* YYLAST -- Last index in YYTABLE.  */ | 
|  | #define YYLAST   1429 | 
|  |  | 
|  | /* YYNTOKENS -- Number of terminals. */ | 
|  | #define YYNTOKENS  148 | 
|  | /* YYNNTS -- Number of nonterminals. */ | 
|  | #define YYNNTS  78 | 
|  | /* YYNRULES -- Number of rules. */ | 
|  | #define YYNRULES  286 | 
|  | /* YYNRULES -- Number of states. */ | 
|  | #define YYNSTATES  559 | 
|  |  | 
|  | /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */ | 
|  | #define YYUNDEFTOK  2 | 
|  | #define YYMAXUTOK   388 | 
|  |  | 
|  | #define YYTRANSLATE(YYX)						\ | 
|  | ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) | 
|  |  | 
|  | /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */ | 
|  | static const unsigned char yytranslate[] = | 
|  | { | 
|  | 0,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
|  | 2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
|  | 2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
|  | 2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
|  | 138,   139,   136,     2,   135,     2,     2,     2,     2,     2, | 
|  | 2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
|  | 143,   134,   144,     2,     2,     2,     2,     2,     2,     2, | 
|  | 2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
|  | 2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
|  | 2,   140,   137,   142,     2,     2,     2,     2,     2,   147, | 
|  | 2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
|  | 2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
|  | 141,     2,     2,   145,     2,   146,     2,     2,     2,     2, | 
|  | 2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
|  | 2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
|  | 2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
|  | 2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
|  | 2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
|  | 2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
|  | 2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
|  | 2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
|  | 2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
|  | 2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
|  | 2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
|  | 2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
|  | 2,     2,     2,     2,     2,     2,     1,     2,     3,     4, | 
|  | 5,     6,     7,     8,     9,    10,    11,    12,    13,    14, | 
|  | 15,    16,    17,    18,    19,    20,    21,    22,    23,    24, | 
|  | 25,    26,    27,    28,    29,    30,    31,    32,    33,    34, | 
|  | 35,    36,    37,    38,    39,    40,    41,    42,    43,    44, | 
|  | 45,    46,    47,    48,    49,    50,    51,    52,    53,    54, | 
|  | 55,    56,    57,    58,    59,    60,    61,    62,    63,    64, | 
|  | 65,    66,    67,    68,    69,    70,    71,    72,    73,    74, | 
|  | 75,    76,    77,    78,    79,    80,    81,    82,    83,    84, | 
|  | 85,    86,    87,    88,    89,    90,    91,    92,    93,    94, | 
|  | 95,    96,    97,    98,    99,   100,   101,   102,   103,   104, | 
|  | 105,   106,   107,   108,   109,   110,   111,   112,   113,   114, | 
|  | 115,   116,   117,   118,   119,   120,   121,   122,   123,   124, | 
|  | 125,   126,   127,   128,   129,   130,   131,   132,   133 | 
|  | }; | 
|  |  | 
|  | #if YYDEBUG | 
|  | /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in | 
|  | YYRHS.  */ | 
|  | static const unsigned short int yyprhs[] = | 
|  | { | 
|  | 0,     0,     3,     5,     7,     9,    11,    13,    15,    17, | 
|  | 19,    21,    23,    25,    27,    29,    31,    33,    35,    37, | 
|  | 39,    41,    43,    45,    47,    49,    51,    53,    55,    57, | 
|  | 59,    61,    63,    65,    67,    69,    71,    73,    75,    77, | 
|  | 79,    81,    83,    85,    87,    89,    91,    93,    95,    97, | 
|  | 99,   101,   103,   105,   107,   109,   111,   113,   115,   117, | 
|  | 119,   121,   122,   125,   126,   128,   130,   133,   134,   136, | 
|  | 138,   140,   142,   144,   146,   148,   150,   151,   153,   154, | 
|  | 156,   158,   159,   161,   163,   165,   167,   168,   170,   172, | 
|  | 174,   176,   178,   181,   183,   185,   187,   189,   190,   193, | 
|  | 195,   197,   198,   201,   202,   205,   206,   210,   213,   214, | 
|  | 216,   217,   221,   223,   226,   228,   230,   232,   234,   236, | 
|  | 238,   241,   243,   246,   252,   258,   264,   270,   274,   277, | 
|  | 283,   288,   291,   293,   295,   297,   301,   303,   307,   309, | 
|  | 310,   312,   316,   321,   325,   329,   334,   339,   343,   350, | 
|  | 356,   359,   362,   365,   368,   371,   374,   377,   380,   383, | 
|  | 386,   389,   392,   399,   405,   414,   421,   428,   436,   444, | 
|  | 451,   460,   469,   473,   475,   477,   479,   481,   482,   484, | 
|  | 487,   488,   492,   493,   497,   501,   503,   507,   511,   512, | 
|  | 519,   520,   528,   529,   537,   540,   544,   546,   550,   554, | 
|  | 558,   562,   564,   565,   571,   575,   577,   581,   583,   584, | 
|  | 594,   596,   598,   603,   605,   607,   610,   614,   615,   617, | 
|  | 619,   621,   623,   625,   627,   629,   631,   633,   637,   639, | 
|  | 645,   647,   649,   651,   653,   655,   657,   660,   663,   666, | 
|  | 670,   673,   674,   676,   679,   682,   686,   696,   706,   715, | 
|  | 730,   732,   734,   741,   747,   750,   757,   765,   769,   775, | 
|  | 776,   777,   781,   784,   786,   792,   798,   805,   812,   817, | 
|  | 824,   829,   834,   841,   848,   851,   860,   862,   864,   865, | 
|  | 869,   876,   880,   887,   890,   895,   902 | 
|  | }; | 
|  |  | 
|  | /* YYRHS -- A `-1'-separated list of the rules' RHS. */ | 
|  | static const short int yyrhs[] = | 
|  | { | 
|  | 188,     0,    -1,    68,    -1,    69,    -1,    70,    -1,    71, | 
|  | -1,    72,    -1,    73,    -1,    74,    -1,    75,    -1,    76, | 
|  | -1,    80,    -1,    81,    -1,    82,    -1,    77,    -1,    78, | 
|  | -1,    79,    -1,   111,    -1,   112,    -1,   113,    -1,   114, | 
|  | -1,   115,    -1,   116,    -1,   117,    -1,   118,    -1,   119, | 
|  | -1,   120,    -1,   121,    -1,   122,    -1,    85,    -1,    86, | 
|  | -1,    87,    -1,    88,    -1,    89,    -1,    90,    -1,    91, | 
|  | -1,    92,    -1,    93,    -1,    94,    -1,    95,    -1,    96, | 
|  | -1,    97,    -1,    98,    -1,    99,    -1,   100,    -1,   101, | 
|  | -1,   102,    -1,   103,    -1,   104,    -1,    91,    -1,    92, | 
|  | -1,    93,    -1,    94,    -1,    23,    -1,    24,    -1,    11, | 
|  | -1,    12,    -1,    13,    -1,    16,    -1,    19,    -1,   156, | 
|  | -1,    -1,   156,   134,    -1,    -1,    17,    -1,    20,    -1, | 
|  | 159,   134,    -1,    -1,    37,    -1,    39,    -1,    38,    -1, | 
|  | 40,    -1,    42,    -1,    41,    -1,    43,    -1,    45,    -1, | 
|  | -1,   133,    -1,    -1,    41,    -1,    43,    -1,    -1,    37, | 
|  | -1,    38,    -1,    39,    -1,    42,    -1,    -1,    56,    -1, | 
|  | 57,    -1,    58,    -1,    59,    -1,    60,    -1,    55,     4, | 
|  | -1,   112,    -1,   113,    -1,   130,    -1,   131,    -1,    -1, | 
|  | 168,   167,    -1,   129,    -1,   167,    -1,    -1,   170,   169, | 
|  | -1,    -1,    48,     4,    -1,    -1,   135,    48,     4,    -1, | 
|  | 31,    19,    -1,    -1,   173,    -1,    -1,   135,   176,   175, | 
|  | -1,   173,    -1,    48,     4,    -1,    11,    -1,    12,    -1, | 
|  | 13,    -1,    14,    -1,    44,    -1,   177,    -1,   178,   136, | 
|  | -1,   210,    -1,   137,     4,    -1,   178,   138,   182,   139, | 
|  | 170,    -1,    10,   138,   182,   139,   170,    -1,   140,     4, | 
|  | 141,   178,   142,    -1,   143,     4,   141,   178,   144,    -1, | 
|  | 145,   183,   146,    -1,   145,   146,    -1,   143,   145,   183, | 
|  | 146,   144,    -1,   143,   145,   146,   144,    -1,   178,   168, | 
|  | -1,   178,    -1,    10,    -1,   179,    -1,   181,   135,   179, | 
|  | -1,   181,    -1,   181,   135,    34,    -1,    34,    -1,    -1, | 
|  | 178,    -1,   183,   135,   178,    -1,   178,   140,   186,   142, | 
|  | -1,   178,   140,   142,    -1,   178,   147,    19,    -1,   178, | 
|  | 143,   186,   144,    -1,   178,   145,   186,   146,    -1,   178, | 
|  | 145,   146,    -1,   178,   143,   145,   186,   146,   144,    -1, | 
|  | 178,   143,   145,   146,   144,    -1,   178,    35,    -1,   178, | 
|  | 36,    -1,   178,   210,    -1,   178,   185,    -1,   178,    22, | 
|  | -1,   154,     3,    -1,   154,     5,    -1,   154,     4,    -1, | 
|  | 154,     6,    -1,    11,    23,    -1,    11,    24,    -1,   155, | 
|  | 9,    -1,   151,   138,   184,    33,   178,   139,    -1,   110, | 
|  | 138,   184,   221,   139,    -1,   124,   138,   184,   135,   184, | 
|  | 135,   184,   139,    -1,   149,   138,   184,   135,   184,   139, | 
|  | -1,   150,   138,   184,   135,   184,   139,    -1,    83,   152, | 
|  | 138,   184,   135,   184,   139,    -1,    84,   153,   138,   184, | 
|  | 135,   184,   139,    -1,   126,   138,   184,   135,   184,   139, | 
|  | -1,   127,   138,   184,   135,   184,   135,   184,   139,    -1, | 
|  | 128,   138,   184,   135,   184,   135,   184,   139,    -1,   186, | 
|  | 135,   184,    -1,   184,    -1,    29,    -1,    30,    -1,   189, | 
|  | -1,    -1,   190,    -1,   189,   190,    -1,    -1,    28,   191, | 
|  | 206,    -1,    -1,    27,   192,   207,    -1,    53,    52,   196, | 
|  | -1,    21,    -1,   158,    15,   178,    -1,   158,    15,    10, | 
|  | -1,    -1,   160,   163,   187,   184,   193,   175,    -1,    -1, | 
|  | 160,   161,   163,   187,   184,   194,   175,    -1,    -1,   160, | 
|  | 162,   163,   187,   178,   195,   175,    -1,    46,   197,    -1, | 
|  | 49,   134,   198,    -1,    19,    -1,    47,   134,    19,    -1, | 
|  | 61,   134,    19,    -1,   140,   199,   142,    -1,   199,   135, | 
|  | 19,    -1,    19,    -1,    -1,   200,   135,   178,   168,   157, | 
|  | -1,   178,   168,   157,    -1,   200,    -1,   200,   135,    34, | 
|  | -1,    34,    -1,    -1,   166,   180,   159,   138,   201,   139, | 
|  | 170,   174,   171,    -1,    25,    -1,   145,    -1,   165,   163, | 
|  | 202,   203,    -1,    26,    -1,   146,    -1,   213,   205,    -1, | 
|  | 164,   163,   202,    -1,    -1,    54,    -1,     3,    -1,     4, | 
|  | -1,     9,    -1,    23,    -1,    24,    -1,    35,    -1,    36, | 
|  | -1,    22,    -1,   143,   186,   144,    -1,   185,    -1,    52, | 
|  | 208,    19,   135,    19,    -1,     7,    -1,     8,    -1,   156, | 
|  | -1,   159,    -1,   210,    -1,   209,    -1,   178,   211,    -1, | 
|  | 213,   214,    -1,   204,   214,    -1,   215,   158,   216,    -1, | 
|  | 215,   218,    -1,    -1,    18,    -1,    62,   212,    -1,    62, | 
|  | 10,    -1,    63,    14,   211,    -1,    63,    11,   211,   135, | 
|  | 14,   211,   135,    14,   211,    -1,    64,   154,   211,   135, | 
|  | 14,   211,   140,   217,   142,    -1,    64,   154,   211,   135, | 
|  | 14,   211,   140,   142,    -1,    65,   166,   180,   211,   138, | 
|  | 220,   139,   170,    33,    14,   211,    66,    14,   211,    -1, | 
|  | 66,    -1,    67,    -1,   217,   154,   209,   135,    14,   211, | 
|  | -1,   154,   209,   135,    14,   211,    -1,   158,   223,    -1, | 
|  | 178,   140,   211,   135,   211,   142,    -1,   219,   135,   140, | 
|  | 211,   135,   211,   142,    -1,   178,   211,   168,    -1,   220, | 
|  | 135,   178,   211,   168,    -1,    -1,    -1,   221,   135,   212, | 
|  | -1,    51,    50,    -1,    50,    -1,   149,   178,   211,   135, | 
|  | 211,    -1,   150,   178,   211,   135,   211,    -1,    83,   152, | 
|  | 178,   211,   135,   211,    -1,    84,   153,   178,   211,   135, | 
|  | 211,    -1,   151,   212,    33,   178,    -1,   124,   212,   135, | 
|  | 212,   135,   212,    -1,   125,   212,   135,   178,    -1,   126, | 
|  | 212,   135,   212,    -1,   127,   212,   135,   212,   135,   212, | 
|  | -1,   128,   212,   135,   212,   135,   212,    -1,   123,   219, | 
|  | -1,   222,   166,   180,   211,   138,   220,   139,   170,    -1, | 
|  | 225,    -1,    32,    -1,    -1,   105,   178,   172,    -1,   105, | 
|  | 178,   135,    11,   211,   172,    -1,   106,   178,   172,    -1, | 
|  | 106,   178,   135,    11,   211,   172,    -1,   107,   212,    -1, | 
|  | 224,   108,   178,   211,    -1,   224,   109,   212,   135,   178, | 
|  | 211,    -1,   110,   178,   211,   221,    -1 | 
|  | }; | 
|  |  | 
|  | /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */ | 
|  | static const unsigned short int yyrline[] = | 
|  | { | 
|  | 0,  1086,  1086,  1086,  1086,  1086,  1086,  1086,  1086,  1086, | 
|  | 1086,  1087,  1087,  1087,  1087,  1087,  1087,  1088,  1088,  1088, | 
|  | 1088,  1088,  1088,  1089,  1089,  1089,  1089,  1089,  1089,  1092, | 
|  | 1092,  1093,  1093,  1094,  1094,  1095,  1095,  1096,  1096,  1100, | 
|  | 1100,  1101,  1101,  1102,  1102,  1103,  1103,  1104,  1104,  1105, | 
|  | 1105,  1106,  1106,  1107,  1108,  1113,  1114,  1114,  1116,  1116, | 
|  | 1117,  1117,  1121,  1125,  1130,  1130,  1132,  1136,  1142,  1143, | 
|  | 1144,  1145,  1146,  1150,  1151,  1152,  1156,  1157,  1161,  1162, | 
|  | 1163,  1167,  1168,  1169,  1170,  1171,  1174,  1175,  1176,  1177, | 
|  | 1178,  1179,  1180,  1187,  1188,  1189,  1190,  1193,  1194,  1199, | 
|  | 1200,  1203,  1204,  1211,  1212,  1218,  1219,  1227,  1235,  1236, | 
|  | 1241,  1242,  1243,  1248,  1261,  1261,  1261,  1261,  1264,  1268, | 
|  | 1272,  1279,  1284,  1292,  1310,  1328,  1333,  1345,  1355,  1359, | 
|  | 1369,  1376,  1383,  1390,  1395,  1400,  1407,  1408,  1415,  1422, | 
|  | 1430,  1435,  1446,  1474,  1490,  1519,  1547,  1572,  1591,  1617, | 
|  | 1637,  1649,  1656,  1722,  1732,  1742,  1748,  1758,  1764,  1774, | 
|  | 1779,  1784,  1792,  1804,  1826,  1834,  1840,  1851,  1856,  1861, | 
|  | 1867,  1873,  1882,  1886,  1894,  1894,  1905,  1910,  1918,  1919, | 
|  | 1923,  1923,  1927,  1927,  1930,  1933,  1945,  1969,  1980,  1980, | 
|  | 1990,  1990,  1998,  1998,  2008,  2011,  2017,  2030,  2034,  2039, | 
|  | 2041,  2046,  2051,  2060,  2070,  2081,  2085,  2094,  2103,  2108, | 
|  | 2220,  2220,  2222,  2231,  2231,  2233,  2238,  2250,  2254,  2259, | 
|  | 2263,  2267,  2271,  2275,  2279,  2283,  2287,  2291,  2316,  2320, | 
|  | 2334,  2338,  2342,  2346,  2352,  2352,  2358,  2367,  2371,  2380, | 
|  | 2389,  2398,  2402,  2407,  2411,  2415,  2420,  2430,  2449,  2458, | 
|  | 2525,  2529,  2536,  2547,  2560,  2570,  2581,  2591,  2599,  2607, | 
|  | 2610,  2611,  2618,  2622,  2627,  2648,  2665,  2678,  2691,  2703, | 
|  | 2711,  2718,  2724,  2730,  2736,  2751,  2815,  2820,  2824,  2831, | 
|  | 2838,  2846,  2853,  2861,  2869,  2883,  2900 | 
|  | }; | 
|  | #endif | 
|  |  | 
|  | #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE | 
|  | /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. | 
|  | First, the terminals, then, starting at YYNTOKENS, nonterminals. */ | 
|  | static const char *const yytname[] = | 
|  | { | 
|  | "$end", "error", "$undefined", "ESINT64VAL", "EUINT64VAL", "ESAPINTVAL", | 
|  | "EUAPINTVAL", "LOCALVAL_ID", "GLOBALVAL_ID", "FPVAL", "VOID", "INTTYPE", | 
|  | "FLOAT", "DOUBLE", "LABEL", "TYPE", "LOCALVAR", "GLOBALVAR", "LABELSTR", | 
|  | "STRINGCONSTANT", "ATSTRINGCONSTANT", "IMPLEMENTATION", | 
|  | "ZEROINITIALIZER", "TRUETOK", "FALSETOK", "BEGINTOK", "ENDTOK", | 
|  | "DECLARE", "DEFINE", "GLOBAL", "CONSTANT", "SECTION", "VOLATILE", "TO", | 
|  | "DOTDOTDOT", "NULL_TOK", "UNDEF", "INTERNAL", "LINKONCE", "WEAK", | 
|  | "APPENDING", "DLLIMPORT", "DLLEXPORT", "EXTERN_WEAK", "OPAQUE", | 
|  | "EXTERNAL", "TARGET", "TRIPLE", "ALIGN", "DEPLIBS", "CALL", "TAIL", | 
|  | "ASM_TOK", "MODULE", "SIDEEFFECT", "CC_TOK", "CCC_TOK", "FASTCC_TOK", | 
|  | "COLDCC_TOK", "X86_STDCALLCC_TOK", "X86_FASTCALLCC_TOK", "DATALAYOUT", | 
|  | "RET", "BR", "SWITCH", "INVOKE", "UNWIND", "UNREACHABLE", "ADD", "SUB", | 
|  | "MUL", "UDIV", "SDIV", "FDIV", "UREM", "SREM", "FREM", "AND", "OR", | 
|  | "XOR", "SHL", "LSHR", "ASHR", "ICMP", "FCMP", "EQ", "NE", "SLT", "SGT", | 
|  | "SLE", "SGE", "ULT", "UGT", "ULE", "UGE", "OEQ", "ONE", "OLT", "OGT", | 
|  | "OLE", "OGE", "ORD", "UNO", "UEQ", "UNE", "MALLOC", "ALLOCA", "FREE", | 
|  | "LOAD", "STORE", "GETELEMENTPTR", "TRUNC", "ZEXT", "SEXT", "FPTRUNC", | 
|  | "FPEXT", "BITCAST", "UITOFP", "SITOFP", "FPTOUI", "FPTOSI", "INTTOPTR", | 
|  | "PTRTOINT", "PHI_TOK", "SELECT", "VAARG", "EXTRACTELEMENT", | 
|  | "INSERTELEMENT", "SHUFFLEVECTOR", "NORETURN", "INREG", "SRET", "DEFAULT", | 
|  | "HIDDEN", "'='", "','", "'*'", "'\\\\'", "'('", "')'", "'['", "'x'", | 
|  | "']'", "'<'", "'>'", "'{'", "'}'", "'c'", "$accept", "ArithmeticOps", | 
|  | "LogicalOps", "CastOps", "IPredicates", "FPredicates", "IntType", | 
|  | "FPType", "LocalName", "OptLocalName", "OptLocalAssign", "GlobalName", | 
|  | "OptGlobalAssign", "GVInternalLinkage", "GVExternalLinkage", | 
|  | "GVVisibilityStyle", "FunctionDeclareLinkage", "FunctionDefineLinkage", | 
|  | "OptCallingConv", "ParamAttr", "OptParamAttrs", "FuncAttr", | 
|  | "OptFuncAttrs", "OptAlign", "OptCAlign", "SectionString", "OptSection", | 
|  | "GlobalVarAttributes", "GlobalVarAttribute", "PrimType", "Types", | 
|  | "ArgType", "ResultTypes", "ArgTypeList", "ArgTypeListI", "TypeListI", | 
|  | "ConstVal", "ConstExpr", "ConstVector", "GlobalType", "Module", | 
|  | "DefinitionList", "Definition", "@1", "@2", "@3", "@4", "@5", "AsmBlock", | 
|  | "TargetDefinition", "LibrariesDefinition", "LibList", "ArgListH", | 
|  | "ArgList", "FunctionHeaderH", "BEGIN", "FunctionHeader", "END", | 
|  | "Function", "FunctionProto", "OptSideEffect", "ConstValueRef", | 
|  | "SymbolicValueRef", "ValueRef", "ResolvedVal", "BasicBlockList", | 
|  | "BasicBlock", "InstructionList", "BBTerminatorInst", "JumpTable", "Inst", | 
|  | "PHIList", "ValueRefList", "IndexList", "OptTailCall", "InstVal", | 
|  | "OptVolatile", "MemoryInst", 0 | 
|  | }; | 
|  | #endif | 
|  |  | 
|  | # ifdef YYPRINT | 
|  | /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to | 
|  | token YYLEX-NUM.  */ | 
|  | static const unsigned short int yytoknum[] = | 
|  | { | 
|  | 0,   256,   257,   258,   259,   260,   261,   262,   263,   264, | 
|  | 265,   266,   267,   268,   269,   270,   271,   272,   273,   274, | 
|  | 275,   276,   277,   278,   279,   280,   281,   282,   283,   284, | 
|  | 285,   286,   287,   288,   289,   290,   291,   292,   293,   294, | 
|  | 295,   296,   297,   298,   299,   300,   301,   302,   303,   304, | 
|  | 305,   306,   307,   308,   309,   310,   311,   312,   313,   314, | 
|  | 315,   316,   317,   318,   319,   320,   321,   322,   323,   324, | 
|  | 325,   326,   327,   328,   329,   330,   331,   332,   333,   334, | 
|  | 335,   336,   337,   338,   339,   340,   341,   342,   343,   344, | 
|  | 345,   346,   347,   348,   349,   350,   351,   352,   353,   354, | 
|  | 355,   356,   357,   358,   359,   360,   361,   362,   363,   364, | 
|  | 365,   366,   367,   368,   369,   370,   371,   372,   373,   374, | 
|  | 375,   376,   377,   378,   379,   380,   381,   382,   383,   384, | 
|  | 385,   386,   387,   388,    61,    44,    42,    92,    40,    41, | 
|  | 91,   120,    93,    60,    62,   123,   125,    99 | 
|  | }; | 
|  | # endif | 
|  |  | 
|  | /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */ | 
|  | static const unsigned char yyr1[] = | 
|  | { | 
|  | 0,   148,   149,   149,   149,   149,   149,   149,   149,   149, | 
|  | 149,   150,   150,   150,   150,   150,   150,   151,   151,   151, | 
|  | 151,   151,   151,   151,   151,   151,   151,   151,   151,   152, | 
|  | 152,   152,   152,   152,   152,   152,   152,   152,   152,   153, | 
|  | 153,   153,   153,   153,   153,   153,   153,   153,   153,   153, | 
|  | 153,   153,   153,   153,   153,   154,   155,   155,   156,   156, | 
|  | 157,   157,   158,   158,   159,   159,   160,   160,   161,   161, | 
|  | 161,   161,   161,   162,   162,   162,   163,   163,   164,   164, | 
|  | 164,   165,   165,   165,   165,   165,   166,   166,   166,   166, | 
|  | 166,   166,   166,   167,   167,   167,   167,   168,   168,   169, | 
|  | 169,   170,   170,   171,   171,   172,   172,   173,   174,   174, | 
|  | 175,   175,   176,   176,   177,   177,   177,   177,   178,   178, | 
|  | 178,   178,   178,   178,   178,   178,   178,   178,   178,   178, | 
|  | 178,   179,   180,   180,   181,   181,   182,   182,   182,   182, | 
|  | 183,   183,   184,   184,   184,   184,   184,   184,   184,   184, | 
|  | 184,   184,   184,   184,   184,   184,   184,   184,   184,   184, | 
|  | 184,   184,   185,   185,   185,   185,   185,   185,   185,   185, | 
|  | 185,   185,   186,   186,   187,   187,   188,   188,   189,   189, | 
|  | 191,   190,   192,   190,   190,   190,   190,   190,   193,   190, | 
|  | 194,   190,   195,   190,   190,   190,   196,   197,   197,   198, | 
|  | 199,   199,   199,   200,   200,   201,   201,   201,   201,   202, | 
|  | 203,   203,   204,   205,   205,   206,   207,   208,   208,   209, | 
|  | 209,   209,   209,   209,   209,   209,   209,   209,   209,   209, | 
|  | 210,   210,   210,   210,   211,   211,   212,   213,   213,   214, | 
|  | 215,   215,   215,   216,   216,   216,   216,   216,   216,   216, | 
|  | 216,   216,   217,   217,   218,   219,   219,   220,   220,   220, | 
|  | 221,   221,   222,   222,   223,   223,   223,   223,   223,   223, | 
|  | 223,   223,   223,   223,   223,   223,   223,   224,   224,   225, | 
|  | 225,   225,   225,   225,   225,   225,   225 | 
|  | }; | 
|  |  | 
|  | /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */ | 
|  | static const unsigned char yyr2[] = | 
|  | { | 
|  | 0,     2,     1,     1,     1,     1,     1,     1,     1,     1, | 
|  | 1,     1,     1,     1,     1,     1,     1,     1,     1,     1, | 
|  | 1,     1,     1,     1,     1,     1,     1,     1,     1,     1, | 
|  | 1,     1,     1,     1,     1,     1,     1,     1,     1,     1, | 
|  | 1,     1,     1,     1,     1,     1,     1,     1,     1,     1, | 
|  | 1,     1,     1,     1,     1,     1,     1,     1,     1,     1, | 
|  | 1,     0,     2,     0,     1,     1,     2,     0,     1,     1, | 
|  | 1,     1,     1,     1,     1,     1,     0,     1,     0,     1, | 
|  | 1,     0,     1,     1,     1,     1,     0,     1,     1,     1, | 
|  | 1,     1,     2,     1,     1,     1,     1,     0,     2,     1, | 
|  | 1,     0,     2,     0,     2,     0,     3,     2,     0,     1, | 
|  | 0,     3,     1,     2,     1,     1,     1,     1,     1,     1, | 
|  | 2,     1,     2,     5,     5,     5,     5,     3,     2,     5, | 
|  | 4,     2,     1,     1,     1,     3,     1,     3,     1,     0, | 
|  | 1,     3,     4,     3,     3,     4,     4,     3,     6,     5, | 
|  | 2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
|  | 2,     2,     6,     5,     8,     6,     6,     7,     7,     6, | 
|  | 8,     8,     3,     1,     1,     1,     1,     0,     1,     2, | 
|  | 0,     3,     0,     3,     3,     1,     3,     3,     0,     6, | 
|  | 0,     7,     0,     7,     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,     4,     6,     4 | 
|  | }; | 
|  |  | 
|  | /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state | 
|  | STATE-NUM when YYTABLE doesn't specify something else to do.  Zero | 
|  | means the default is an error.  */ | 
|  | static const unsigned short int yydefact[] = | 
|  | { | 
|  | 67,    58,    64,    59,    65,   185,   182,   180,     0,     0, | 
|  | 0,     0,     0,     0,    76,     0,    67,   178,    78,    81, | 
|  | 0,     0,   194,     0,     0,    62,     0,    66,    68,    70, | 
|  | 69,    71,    73,    72,    74,    75,    77,    76,    76,     0, | 
|  | 1,   179,    79,    80,    76,   183,    82,    83,    84,    85, | 
|  | 76,   241,   181,   241,     0,     0,   202,   195,   196,   184, | 
|  | 230,   231,   187,   114,   115,   116,   117,   118,     0,     0, | 
|  | 0,     0,   232,   233,   119,   186,   121,     0,     0,   174, | 
|  | 175,     0,    86,    86,   242,   238,    63,   213,   214,   215, | 
|  | 237,   197,   198,   201,     0,   139,   122,     0,     0,     0, | 
|  | 0,   128,   140,     0,   120,   139,     0,     0,   114,   115, | 
|  | 116,     0,     0,     0,   188,     0,    87,    88,    89,    90, | 
|  | 91,     0,   216,     0,   278,   240,     0,   199,   138,    97, | 
|  | 134,   136,     0,     0,     0,     0,     0,     0,   127,     0, | 
|  | 190,   192,   159,   160,   155,   157,   156,   158,   161,   154, | 
|  | 150,   151,     2,     3,     4,     5,     6,     7,     8,     9, | 
|  | 10,    14,    15,    16,    11,    12,    13,     0,     0,     0, | 
|  | 17,    18,    19,    20,    21,    22,    23,    24,    25,    26, | 
|  | 27,    28,     0,     0,     0,     0,     0,     0,     0,     0, | 
|  | 0,     0,     0,   153,   152,   110,    92,   133,   132,     0, | 
|  | 210,   211,   212,   277,   263,     0,     0,     0,     0,    86, | 
|  | 250,   251,     0,     0,     0,     0,     0,     0,     0,     0, | 
|  | 0,     0,     0,     0,     0,     0,     0,   239,    86,   254, | 
|  | 0,   276,   200,   131,     0,   101,     0,     0,   130,     0, | 
|  | 141,   101,   110,   110,    29,    30,    31,    32,    33,    34, | 
|  | 35,    36,    37,    38,     0,    53,    54,    49,    50,    51, | 
|  | 52,    39,    40,    41,    42,    43,    44,    45,    46,    47, | 
|  | 48,     0,     0,     0,     0,     0,     0,   143,   173,     0, | 
|  | 0,     0,   147,     0,   144,     0,     0,     0,     0,   189, | 
|  | 0,   262,   244,     0,   243,     0,     0,    55,     0,     0, | 
|  | 0,     0,   105,   105,   283,     0,     0,   274,     0,     0, | 
|  | 0,     0,     0,     0,     0,     0,     0,     0,     0,    93, | 
|  | 94,    95,    96,    98,   137,   135,   124,   125,   126,   129, | 
|  | 123,   191,   193,     0,     0,   260,     0,     0,     0,     0, | 
|  | 0,   142,   128,   140,     0,   145,   146,     0,     0,     0, | 
|  | 0,     0,   112,   110,   208,   219,   220,   221,   226,   222, | 
|  | 223,   224,   225,   217,     0,   228,   235,   234,   236,     0, | 
|  | 245,     0,     0,     0,     0,     0,   279,     0,   281,   260, | 
|  | 0,     0,     0,     0,     0,     0,     0,     0,     0,     0, | 
|  | 0,     0,     0,    99,   100,   102,     0,     0,     0,     0, | 
|  | 0,     0,     0,   172,   149,     0,     0,     0,     0,   107, | 
|  | 113,   111,   207,    97,   205,     0,   218,     0,     0,     0, | 
|  | 0,     0,     0,     0,     0,     0,     0,   286,     0,     0, | 
|  | 0,   270,   271,     0,     0,     0,     0,   268,     0,   284, | 
|  | 0,     0,     0,     0,   163,     0,     0,     0,     0,   148, | 
|  | 0,     0,     0,    61,     0,   101,     0,   227,     0,     0, | 
|  | 259,     0,     0,   105,   106,   105,     0,     0,     0,     0, | 
|  | 0,   264,   265,   259,     0,     0,     0,   261,     0,   169, | 
|  | 0,     0,   165,   166,   162,    60,   204,   206,    97,   108, | 
|  | 0,     0,     0,     0,     0,   266,   267,     0,   280,   282, | 
|  | 0,     0,   269,   272,   273,     0,   285,   167,   168,     0, | 
|  | 0,     0,    61,   109,   103,   229,     0,     0,    97,     0, | 
|  | 101,   255,     0,   101,   164,   170,   171,   203,     0,   209, | 
|  | 0,   248,     0,     0,   257,     0,     0,   256,   275,   104, | 
|  | 246,     0,   247,     0,    97,     0,     0,     0,   258,     0, | 
|  | 0,     0,     0,   253,     0,     0,   252,     0,   249 | 
|  | }; | 
|  |  | 
|  | /* YYDEFGOTO[NTERM-NUM]. */ | 
|  | static const short int yydefgoto[] = | 
|  | { | 
|  | -1,   190,   191,   192,   254,   271,   111,   112,    72,   486, | 
|  | 12,    73,    14,    37,    38,    39,    44,    50,   121,   323, | 
|  | 233,   395,   326,   529,   376,   352,   514,   289,   353,    74, | 
|  | 113,   130,   199,   131,   132,   103,   278,   365,   279,    81, | 
|  | 15,    16,    17,    19,    18,   195,   242,   243,    59,    22, | 
|  | 57,    94,   414,   415,   122,   202,    51,    89,    52,    45, | 
|  | 417,   366,    76,   368,   294,    53,    85,    86,   227,   533, | 
|  | 125,   307,   494,   398,   228,   229,   230,   231 | 
|  | }; | 
|  |  | 
|  | /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing | 
|  | STATE-NUM.  */ | 
|  | #define YYPACT_NINF -440 | 
|  | static const short int yypact[] = | 
|  | { | 
|  | 406,  -440,  -440,  -440,  -440,  -440,  -440,  -440,    -2,  -101, | 
|  | 21,   -55,    80,   -20,    15,   132,   556,  -440,   253,   197, | 
|  | -7,    87,  -440,    20,   207,  -440,   893,  -440,  -440,  -440, | 
|  | -440,  -440,  -440,  -440,  -440,  -440,  -440,    97,    97,   125, | 
|  | -440,  -440,  -440,  -440,    97,  -440,  -440,  -440,  -440,  -440, | 
|  | 97,   235,  -440,     6,   240,   248,   258,  -440,  -440,  -440, | 
|  | -440,  -440,   134,  -440,  -440,  -440,  -440,  -440,   269,   277, | 
|  | 11,   123,  -440,  -440,  -440,    33,  -440,   125,   125,  -440, | 
|  | -440,  1055,   128,   128,  -440,  -440,    47,  -440,  -440,  -440, | 
|  | -440,  -440,  -440,  -440,   -57,   939,  -440,   154,   156,   488, | 
|  | 134,  -440,    33,  -112,  -440,   939,  1055,  1149,    38,   281, | 
|  | 289,   239,   293,   850,  -440,   299,  -440,  -440,  -440,  -440, | 
|  | -440,  1168,  -440,     2,  1301,  -440,   285,  -440,  -440,    33, | 
|  | -440,   170,   167,  1149,  1149,   164,   -97,  1149,  -440,   171, | 
|  | -440,    33,  -440,  -440,  -440,  -440,  -440,  -440,  -440,  -440, | 
|  | -440,  -440,  -440,  -440,  -440,  -440,  -440,  -440,  -440,  -440, | 
|  | -440,  -440,  -440,  -440,  -440,  -440,  -440,   254,   446,   174, | 
|  | -440,  -440,  -440,  -440,  -440,  -440,  -440,  -440,  -440,  -440, | 
|  | -440,  -440,   175,   176,   177,   178,   109,  1203,   676,   290, | 
|  | 181,   182,   183,  -440,  -440,   187,  -440,   134,    33,    93, | 
|  | -440,  -440,  -440,  -440,  -440,   273,  1217,   127,   313,   128, | 
|  | -440,  -440,   254,   446,  1149,  1149,  1149,  1149,  1149,  1149, | 
|  | 1149,  1149,  1149,  1149,  1149,  1149,  1149,  -440,   128,  -440, | 
|  | 70,  -440,  -440,   -29,  1098,  -440,    72,   -39,  -440,   184, | 
|  | 33,  -440,   187,   187,  -440,  -440,  -440,  -440,  -440,  -440, | 
|  | -440,  -440,  -440,  -440,   188,  -440,  -440,  -440,  -440,  -440, | 
|  | -440,  -440,  -440,  -440,  -440,  -440,  -440,  -440,  -440,  -440, | 
|  | -440,   196,  1055,  1055,  1055,  1055,  1055,  -440,  -440,    22, | 
|  | 771,   -44,  -440,   -59,  -440,  1055,  1055,  1055,    -9,  -440, | 
|  | 198,  -440,   134,   591,  -440,   728,   728,  -440,   728,  1168, | 
|  | 1149,  1149,   112,   147,  -440,   591,    75,   190,   200,   214, | 
|  | 215,   217,   219,   591,   591,   322,  1168,  1149,  1149,  -440, | 
|  | -440,  -440,  -440,  -440,  -440,  -440,   -41,  -440,  -440,  -440, | 
|  | -41,  -440,  -440,  1055,  1055,  -440,   230,   231,   232,   233, | 
|  | 1055,  -440,   225,   850,   -43,  -440,  -440,   236,   241,   337, | 
|  | 355,   371,  -440,   187,  1114,  -440,  -440,  -440,  -440,  -440, | 
|  | -440,  -440,  -440,   323,  1055,  -440,  -440,  -440,  -440,   243, | 
|  | -440,   244,   728,   591,   591,    17,  -440,    19,  -440,  -440, | 
|  | 728,   242,  1149,  1149,  1149,  1149,  1149,   245,   246,  1149, | 
|  | 728,   591,   249,  -440,  -440,  -440,   252,   255,   -24,  1055, | 
|  | 1055,  1055,  1055,  -440,  -440,   247,  1055,  1055,  1149,  -440, | 
|  | -440,  -440,  -440,    33,   257,   260,  -440,   375,   -37,   383, | 
|  | 386,   264,   268,   272,   728,   400,   728,   275,   282,   728, | 
|  | 284,    33,  -440,   295,   296,   728,   728,    33,   270,  -440, | 
|  | 1149,  1055,  1055,  1149,  -440,   297,   298,   301,   303,  -440, | 
|  | 300,   302,   150,    32,  1133,  -440,   305,  -440,   728,   728, | 
|  | 1149,   728,   728,   307,  -440,   307,   728,   311,  1149,  1149, | 
|  | 1149,  -440,  -440,  1149,   591,   308,   310,  -440,  1055,  -440, | 
|  | 1055,  1055,  -440,  -440,  -440,  -440,  -440,  -440,    33,    46, | 
|  | 397,   315,   314,   591,    26,  -440,  -440,   376,  -440,  -440, | 
|  | 309,   728,  -440,  -440,  -440,    89,  -440,  -440,  -440,   317, | 
|  | 319,   321,    32,  -440,   413,  -440,   449,     7,  -440,  1149, | 
|  | -440,  -440,   324,  -440,  -440,  -440,  -440,  -440,   460,  -440, | 
|  | 728,  -440,   976,     9,   -29,   591,   149,  -440,   -41,  -440, | 
|  | -440,   330,  -440,   976,  -440,   453,   454,   336,   -29,   728, | 
|  | 728,   461,   412,  -440,   728,   465,  -440,   728,  -440 | 
|  | }; | 
|  |  | 
|  | /* YYPGOTO[NTERM-NUM].  */ | 
|  | static const short int yypgoto[] = | 
|  | { | 
|  | -440,   358,   359,   361,   274,   276,  -206,  -440,     0,   -19, | 
|  | 401,    13,  -440,  -440,  -440,    31,  -440,  -440,  -178,  -309, | 
|  | -394,  -440,  -236,  -440,  -297,    -1,  -440,  -207,  -440,  -440, | 
|  | -25,   263,  -252,  -440,   387,   404,   -69,  -110,  -162,   160, | 
|  | -440,  -440,   490,  -440,  -440,  -440,  -440,  -440,  -440,  -440, | 
|  | -440,  -440,  -440,  -440,   426,  -440,  -440,  -440,  -440,  -440, | 
|  | -440,  -439,   -73,   100,  -212,  -440,   457,  -440,  -440,  -440, | 
|  | -440,  -440,    40,   135,  -440,  -440,  -440,  -440 | 
|  | }; | 
|  |  | 
|  | /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If | 
|  | positive, shift that token.  If negative, reduce the rule which | 
|  | number is the opposite.  If zero, do what YYDEFACT says. | 
|  | If YYTABLE_NINF, syntax error.  */ | 
|  | #define YYTABLE_NINF -178 | 
|  | static const short int yytable[] = | 
|  | { | 
|  | 11,    75,   298,   193,   304,   330,   378,   308,   309,   310, | 
|  | 311,   312,   114,    13,   315,    98,    11,   394,   297,   453, | 
|  | 297,   394,   350,   137,    84,   281,   283,   200,   424,    13, | 
|  | 426,   299,    87,    23,   138,   331,   332,   140,   137,   351, | 
|  | 194,   -55,   -55,   -55,   -55,    20,   102,   372,     1,   239, | 
|  | 316,     3,    28,    29,    30,    31,    32,    33,    34,    21, | 
|  | 35,   142,   143,     1,   390,   425,     3,   425,    77,    78, | 
|  | 129,   319,   320,    24,   102,    82,   340,   350,   126,    25, | 
|  | 129,    83,   141,   319,   320,   127,    11,   346,   393,   321, | 
|  | 322,   340,   340,   541,   512,    26,   198,   104,   340,   105, | 
|  | 345,   321,   322,   405,   547,   328,   392,   457,   236,   237, | 
|  | 2,   443,   240,     4,    27,   444,    60,    61,   344,   100, | 
|  | 108,   109,   110,    66,   534,     1,     2,    54,     3,     4, | 
|  | 60,    61,    40,   100,    63,    64,    65,    66,   295,     1, | 
|  | 2,   296,     3,     4,   319,   320,   411,   201,    36,   531, | 
|  | 548,   542,    88,    67,    79,    80,    99,   340,   319,   320, | 
|  | 56,   519,   321,   322,   341,   520,   498,    67,   499,   104, | 
|  | 430,   105,   432,   433,   434,   393,   321,   322,   317,   318, | 
|  | 394,   293,   545,   115,   116,   117,   118,   119,   120,   302, | 
|  | 303,   293,   305,   306,   293,   293,   293,   293,   293,   313, | 
|  | 314,   293,   418,   335,   336,   337,   338,   339,   104,   129, | 
|  | 105,   104,   290,   105,   327,   380,   347,   348,   349,   489, | 
|  | 367,    55,   367,   367,   519,   367,    58,   394,   523,   394, | 
|  | 36,   477,   367,   193,    46,    47,    48,   106,   107,    49, | 
|  | 367,   367,   144,   145,   146,   147,    68,   375,   104,    69, | 
|  | 105,   277,    70,    84,    71,   343,   502,   503,   504,    91, | 
|  | 68,   319,   320,    69,   396,   397,    70,    92,    71,   101, | 
|  | 194,   403,    95,    96,   198,   373,   374,    93,   393,   321, | 
|  | 322,    97,   377,   104,   536,   105,   104,   538,   105,   484, | 
|  | -56,   198,   391,   293,    42,   133,    43,   134,   -57,   367, | 
|  | 367,   367,   148,   196,   232,   234,   235,   367,   238,   284, | 
|  | 241,   532,   272,   273,   274,   275,   276,   367,   367,   285, | 
|  | 286,   287,   288,   291,   297,   381,   333,   543,   329,   413, | 
|  | 445,   446,   447,   448,   334,   382,   354,   450,   451,   244, | 
|  | 245,   246,   247,   248,   249,   250,   251,   252,   253,   383, | 
|  | 384,   367,   385,   367,   386,   389,   367,   293,   431,   293, | 
|  | 293,   293,   367,   367,   437,   399,   400,   401,   402,   404, | 
|  | 408,   406,   475,   476,   409,   410,   407,   416,   419,   420, | 
|  | 435,   436,   429,   452,   440,   367,   367,   441,   367,   367, | 
|  | 442,   449,   454,   367,   456,   369,   370,   458,   371,   455, | 
|  | 459,   367,   460,   461,   464,   379,  -177,   462,   473,   509, | 
|  | 443,   510,   511,   387,   388,   474,   515,   466,   293,   468, | 
|  | 367,   -63,     1,     2,   425,     3,     4,     5,   367,   488, | 
|  | 469,   470,   478,     6,     7,   493,   480,   479,   481,   482, | 
|  | 490,   483,   497,   293,   293,   293,   501,   507,   493,   508, | 
|  | 516,   521,     8,   485,   517,     9,   524,   367,   525,    10, | 
|  | 526,   528,   367,   530,   539,   546,   537,   549,   550,   255, | 
|  | 256,   551,   421,   422,   423,   554,   367,   367,   555,   557, | 
|  | 428,   367,   224,   225,   367,   226,   300,   124,   513,   301, | 
|  | 438,   439,   139,   527,   535,    60,    61,   325,   100,    63, | 
|  | 64,    65,    66,   136,     1,     2,    41,     3,     4,   123, | 
|  | 90,     0,   485,   505,   427,     0,     0,     0,     0,     0, | 
|  | 0,     0,     0,     0,   463,     0,   465,     0,     0,   467, | 
|  | 0,     0,    67,     0,     0,   471,   472,   257,   258,   259, | 
|  | 260,   261,   262,   263,   264,   265,   266,   267,   268,   269, | 
|  | 270,     0,     0,     0,     0,     0,  -176,     0,   491,   492, | 
|  | 0,   495,   496,     0,     0,     0,   500,     0,     0,     0, | 
|  | 0,   -63,     1,     2,   506,     3,     4,     5,     0,     0, | 
|  | 0,     0,     0,     6,     7,     0,     0,     0,     0,     0, | 
|  | 0,     0,     0,   518,   355,   356,     0,     0,    60,    61, | 
|  | 357,   522,     8,     0,     0,     9,     0,     1,     2,    10, | 
|  | 3,     4,     0,   358,   359,   360,     0,     0,     0,     0, | 
|  | 0,     0,     0,     0,     0,    68,   361,   362,    69,     0, | 
|  | 540,    70,     0,    71,   135,   544,     0,     0,     0,     0, | 
|  | 0,     0,     0,   363,     0,     0,     0,     0,     0,   552, | 
|  | 553,     0,     0,     0,   556,     0,     0,   558,     0,   152, | 
|  | 153,   154,   155,   156,   157,   158,   159,   160,   161,   162, | 
|  | 163,   164,   165,   166,   167,   168,     0,     0,     0,     0, | 
|  | 0,     0,     0,    60,    61,     0,   100,   108,   109,   110, | 
|  | 66,     0,     1,     2,     0,     3,     4,     0,     0,     0, | 
|  | 0,   169,   170,   171,   172,   173,   174,   175,   176,   177, | 
|  | 178,   179,   180,   181,     0,   182,     0,   183,   184,   185, | 
|  | 67,     0,     0,     0,     0,     0,     0,   104,     0,   105, | 
|  | 0,   355,   356,     0,   364,    60,    61,   357,     0,     0, | 
|  | 0,     0,     0,     0,     1,     2,     0,     3,     4,     0, | 
|  | 358,   359,   360,     0,     0,     0,     0,     0,     0,     0, | 
|  | 0,     0,     0,   361,   362,     0,     0,     0,     0,     0, | 
|  | 0,     0,     0,     0,     0,     0,     0,     0,    60,    61, | 
|  | 363,   100,   108,   109,   110,    66,     0,     1,     2,     0, | 
|  | 3,     4,     0,     0,     0,     0,   152,   153,   154,   155, | 
|  | 156,   157,   158,   159,   160,   161,   162,   163,   164,   165, | 
|  | 166,   167,   168,    68,     0,    67,    69,     0,     0,    70, | 
|  | 0,    71,   282,     0,     0,     0,     0,     0,     0,     0, | 
|  | 0,     0,     0,     0,     0,     0,     0,     0,   169,   170, | 
|  | 171,   172,   173,   174,   175,   176,   177,   178,   179,   180, | 
|  | 181,     0,   182,     0,   183,   184,   185,    60,    61,     0, | 
|  | 0,     0,     0,     0,     0,     0,     1,     2,     0,     3, | 
|  | 4,   364,   149,     0,     0,     0,     0,     0,     0,     0, | 
|  | 0,     0,     0,     0,     0,   150,   151,     0,     0,     0, | 
|  | 0,     0,     0,     0,     0,     0,     0,     0,     0,     0, | 
|  | 60,    61,     0,    62,    63,    64,    65,    66,    68,     1, | 
|  | 2,    69,     3,     4,    70,     0,    71,   342,   152,   153, | 
|  | 154,   155,   156,   157,   158,   159,   160,   161,   162,   163, | 
|  | 164,   165,   166,   167,   168,     0,     0,    67,     0,     0, | 
|  | 0,     0,     0,     0,     0,     0,    60,    61,     0,   100, | 
|  | 63,    64,    65,    66,     0,     1,     2,     0,     3,     4, | 
|  | 169,   170,   171,   172,   173,   174,   175,   176,   177,   178, | 
|  | 179,   180,   181,   128,   182,     0,   183,   184,   185,   355, | 
|  | 356,     0,     0,    67,     0,   357,   104,     0,   105,     0, | 
|  | 186,     0,     0,   187,     0,   188,     0,   189,   358,   359, | 
|  | 360,     0,     0,     0,     0,     0,     0,     0,     0,     0, | 
|  | 0,   361,   362,     0,     0,     0,     0,     0,     0,     0, | 
|  | 0,     0,     0,     0,     0,     0,     0,     0,   363,     0, | 
|  | 68,     0,     0,    69,     0,     0,    70,     0,    71,     0, | 
|  | 0,     0,     0,     0,   152,   153,   154,   155,   156,   157, | 
|  | 158,   159,   160,   161,   162,   163,   164,   165,   166,   167, | 
|  | 168,     0,    60,    61,     0,   100,   108,   109,   110,    66, | 
|  | 0,     1,     2,     0,     3,     4,    68,     0,     0,    69, | 
|  | 0,     0,    70,     0,    71,     0,   169,   170,   171,   172, | 
|  | 173,   174,   175,   176,   177,   178,   179,   180,   181,    67, | 
|  | 182,     0,   183,   184,   185,    60,    61,     0,   100,    63, | 
|  | 64,    65,    66,     0,     1,     2,     0,     3,     4,   364, | 
|  | 0,    60,    61,     0,   100,    63,    64,    65,    66,     0, | 
|  | 1,     2,   324,     3,     4,     0,     0,     0,     0,     0, | 
|  | 60,    61,    67,   100,    63,    64,    65,    66,   412,     1, | 
|  | 2,     0,     3,     4,     0,     0,    60,    61,    67,   100, | 
|  | 63,    64,    65,    66,     0,     1,     2,   487,     3,     4, | 
|  | 0,     0,     0,     0,     0,    60,    61,    67,   197,    63, | 
|  | 64,    65,    66,     0,     1,     2,     0,     3,     4,     0, | 
|  | 0,     0,    68,    67,     0,    69,     0,     0,    70,     0, | 
|  | 71,     0,     0,     0,     0,     0,     0,     0,     0,     0, | 
|  | 60,    61,    67,   100,   108,   109,   110,    66,     0,     1, | 
|  | 2,     0,     3,     4,    60,    61,     0,   292,    63,    64, | 
|  | 65,    66,     0,     1,     2,    68,     3,     4,    69,     0, | 
|  | 0,    70,     0,    71,     0,     0,     0,    67,     0,     0, | 
|  | 0,    68,     0,     0,    69,     0,     0,    70,     0,    71, | 
|  | 0,    67,     0,     0,     0,     0,     0,     0,     0,     0, | 
|  | 68,     0,     0,    69,     0,     0,    70,     0,    71,     0, | 
|  | 0,     0,     0,     0,     0,     0,    68,     0,     0,    69, | 
|  | 0,     0,    70,     0,    71,     0,     0,     0,     0,     0, | 
|  | 0,     0,     0,     0,     0,    68,     0,     0,    69,     0, | 
|  | 0,    70,     0,    71,     0,     0,     0,     0,     0,     0, | 
|  | 0,     0,     0,     0,     0,     0,     0,     0,     0,     0, | 
|  | 0,     0,     0,   203,     0,     0,     0,     0,     0,     0, | 
|  | 68,     0,     0,    69,     0,     0,    70,     0,   280,     0, | 
|  | 0,   204,   205,     0,    68,     0,     0,    69,     0,     0, | 
|  | 70,     0,    71,   206,   207,   208,   209,   210,   211,   152, | 
|  | 153,   154,   155,   156,   157,   158,   159,   160,   161,   162, | 
|  | 163,   164,   165,   166,   212,   213,     0,     0,     0,     0, | 
|  | 0,     0,     0,     0,     0,     0,     0,     0,     0,     0, | 
|  | 0,     0,     0,     0,     0,     0,   214,   215,   216,     0, | 
|  | 0,   217,   170,   171,   172,   173,   174,   175,   176,   177, | 
|  | 178,   179,   180,   181,   218,   219,   220,   221,   222,   223 | 
|  | }; | 
|  |  | 
|  | static const short int yycheck[] = | 
|  | { | 
|  | 0,    26,   208,   113,   216,   241,   303,   219,   220,   221, | 
|  | 222,   223,    81,     0,   226,     4,    16,   326,    11,   413, | 
|  | 11,   330,    31,   135,    18,   187,   188,    25,    11,    16, | 
|  | 11,   209,    26,   134,   146,   242,   243,   106,   135,    48, | 
|  | 113,     3,     4,     5,     6,    47,    71,   299,    16,   146, | 
|  | 228,    19,    37,    38,    39,    40,    41,    42,    43,    61, | 
|  | 45,    23,    24,    16,   316,    48,    19,    48,    37,    38, | 
|  | 95,   112,   113,    52,    99,    44,   135,    31,   135,   134, | 
|  | 105,    50,   107,   112,   113,   142,    86,   146,   129,   130, | 
|  | 131,   135,   135,   532,   488,    15,   121,   136,   135,   138, | 
|  | 144,   130,   131,   146,   543,   144,   318,   144,   133,   134, | 
|  | 17,   135,   137,    20,   134,   139,     7,     8,   280,    10, | 
|  | 11,    12,    13,    14,   518,    16,    17,   134,    19,    20, | 
|  | 7,     8,     0,    10,    11,    12,    13,    14,    11,    16, | 
|  | 17,    14,    19,    20,   112,   113,   353,   145,   133,   142, | 
|  | 544,   142,   146,    44,    29,    30,   145,   135,   112,   113, | 
|  | 140,   135,   130,   131,   142,   139,   463,    44,   465,   136, | 
|  | 382,   138,   384,   385,   386,   129,   130,   131,   108,   109, | 
|  | 489,   206,    33,    55,    56,    57,    58,    59,    60,   214, | 
|  | 215,   216,   217,   218,   219,   220,   221,   222,   223,   224, | 
|  | 225,   226,   364,   272,   273,   274,   275,   276,   136,   234, | 
|  | 138,   136,   199,   138,   142,   140,   285,   286,   287,   455, | 
|  | 293,   134,   295,   296,   135,   298,    19,   536,   139,   538, | 
|  | 133,   443,   305,   343,    37,    38,    39,    77,    78,    42, | 
|  | 313,   314,     3,     4,     5,     6,   137,   135,   136,   140, | 
|  | 138,   142,   143,    18,   145,   280,   468,   469,   470,    19, | 
|  | 137,   112,   113,   140,   333,   334,   143,    19,   145,   146, | 
|  | 343,   340,   138,     4,   299,   300,   301,    19,   129,   130, | 
|  | 131,     4,   135,   136,   520,   138,   136,   523,   138,   139, | 
|  | 9,   316,   317,   318,    41,   141,    43,   141,     9,   372, | 
|  | 373,   374,     9,     4,    19,   135,   139,   380,   144,    19, | 
|  | 139,   517,   138,   138,   138,   138,   138,   390,   391,   138, | 
|  | 138,   138,   135,    50,    11,   135,   138,   533,   144,   354, | 
|  | 399,   400,   401,   402,   138,   135,   138,   406,   407,    85, | 
|  | 86,    87,    88,    89,    90,    91,    92,    93,    94,   135, | 
|  | 135,   424,   135,   426,   135,    33,   429,   382,   383,   384, | 
|  | 385,   386,   435,   436,   389,   135,   135,   135,   135,   144, | 
|  | 33,   135,   441,   442,    19,     4,   135,    54,   135,   135, | 
|  | 135,   135,   140,   408,   135,   458,   459,   135,   461,   462, | 
|  | 135,   144,   135,   466,    19,   295,   296,    14,   298,   139, | 
|  | 14,   474,   138,   135,     4,   305,     0,   135,   138,   478, | 
|  | 135,   480,   481,   313,   314,   440,    19,   135,   443,   135, | 
|  | 493,    15,    16,    17,    48,    19,    20,    21,   501,   454, | 
|  | 135,   135,   135,    27,    28,   460,   135,   139,   135,   139, | 
|  | 135,   139,   135,   468,   469,   470,   135,   139,   473,   139, | 
|  | 135,   142,    46,   453,   140,    49,   139,   530,   139,    53, | 
|  | 139,    48,   535,    14,     4,   135,   142,    14,    14,    23, | 
|  | 24,   135,   372,   373,   374,    14,   549,   550,    66,    14, | 
|  | 380,   554,   124,   124,   557,   124,   212,    86,   489,   213, | 
|  | 390,   391,   105,   512,   519,     7,     8,   234,    10,    11, | 
|  | 12,    13,    14,    99,    16,    17,    16,    19,    20,    83, | 
|  | 53,    -1,   512,   473,   379,    -1,    -1,    -1,    -1,    -1, | 
|  | -1,    -1,    -1,    -1,   424,    -1,   426,    -1,    -1,   429, | 
|  | -1,    -1,    44,    -1,    -1,   435,   436,    91,    92,    93, | 
|  | 94,    95,    96,    97,    98,    99,   100,   101,   102,   103, | 
|  | 104,    -1,    -1,    -1,    -1,    -1,     0,    -1,   458,   459, | 
|  | -1,   461,   462,    -1,    -1,    -1,   466,    -1,    -1,    -1, | 
|  | -1,    15,    16,    17,   474,    19,    20,    21,    -1,    -1, | 
|  | -1,    -1,    -1,    27,    28,    -1,    -1,    -1,    -1,    -1, | 
|  | -1,    -1,    -1,   493,     3,     4,    -1,    -1,     7,     8, | 
|  | 9,   501,    46,    -1,    -1,    49,    -1,    16,    17,    53, | 
|  | 19,    20,    -1,    22,    23,    24,    -1,    -1,    -1,    -1, | 
|  | -1,    -1,    -1,    -1,    -1,   137,    35,    36,   140,    -1, | 
|  | 530,   143,    -1,   145,   146,   535,    -1,    -1,    -1,    -1, | 
|  | -1,    -1,    -1,    52,    -1,    -1,    -1,    -1,    -1,   549, | 
|  | 550,    -1,    -1,    -1,   554,    -1,    -1,   557,    -1,    68, | 
|  | 69,    70,    71,    72,    73,    74,    75,    76,    77,    78, | 
|  | 79,    80,    81,    82,    83,    84,    -1,    -1,    -1,    -1, | 
|  | -1,    -1,    -1,     7,     8,    -1,    10,    11,    12,    13, | 
|  | 14,    -1,    16,    17,    -1,    19,    20,    -1,    -1,    -1, | 
|  | -1,   110,   111,   112,   113,   114,   115,   116,   117,   118, | 
|  | 119,   120,   121,   122,    -1,   124,    -1,   126,   127,   128, | 
|  | 44,    -1,    -1,    -1,    -1,    -1,    -1,   136,    -1,   138, | 
|  | -1,     3,     4,    -1,   143,     7,     8,     9,    -1,    -1, | 
|  | -1,    -1,    -1,    -1,    16,    17,    -1,    19,    20,    -1, | 
|  | 22,    23,    24,    -1,    -1,    -1,    -1,    -1,    -1,    -1, | 
|  | -1,    -1,    -1,    35,    36,    -1,    -1,    -1,    -1,    -1, | 
|  | -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     7,     8, | 
|  | 52,    10,    11,    12,    13,    14,    -1,    16,    17,    -1, | 
|  | 19,    20,    -1,    -1,    -1,    -1,    68,    69,    70,    71, | 
|  | 72,    73,    74,    75,    76,    77,    78,    79,    80,    81, | 
|  | 82,    83,    84,   137,    -1,    44,   140,    -1,    -1,   143, | 
|  | -1,   145,   146,    -1,    -1,    -1,    -1,    -1,    -1,    -1, | 
|  | -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,   111, | 
|  | 112,   113,   114,   115,   116,   117,   118,   119,   120,   121, | 
|  | 122,    -1,   124,    -1,   126,   127,   128,     7,     8,    -1, | 
|  | -1,    -1,    -1,    -1,    -1,    -1,    16,    17,    -1,    19, | 
|  | 20,   143,    22,    -1,    -1,    -1,    -1,    -1,    -1,    -1, | 
|  | -1,    -1,    -1,    -1,    -1,    35,    36,    -1,    -1,    -1, | 
|  | -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1, | 
|  | 7,     8,    -1,    10,    11,    12,    13,    14,   137,    16, | 
|  | 17,   140,    19,    20,   143,    -1,   145,   146,    68,    69, | 
|  | 70,    71,    72,    73,    74,    75,    76,    77,    78,    79, | 
|  | 80,    81,    82,    83,    84,    -1,    -1,    44,    -1,    -1, | 
|  | -1,    -1,    -1,    -1,    -1,    -1,     7,     8,    -1,    10, | 
|  | 11,    12,    13,    14,    -1,    16,    17,    -1,    19,    20, | 
|  | 110,   111,   112,   113,   114,   115,   116,   117,   118,   119, | 
|  | 120,   121,   122,    34,   124,    -1,   126,   127,   128,     3, | 
|  | 4,    -1,    -1,    44,    -1,     9,   136,    -1,   138,    -1, | 
|  | 140,    -1,    -1,   143,    -1,   145,    -1,   147,    22,    23, | 
|  | 24,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1, | 
|  | -1,    35,    36,    -1,    -1,    -1,    -1,    -1,    -1,    -1, | 
|  | -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    52,    -1, | 
|  | 137,    -1,    -1,   140,    -1,    -1,   143,    -1,   145,    -1, | 
|  | -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,    73, | 
|  | 74,    75,    76,    77,    78,    79,    80,    81,    82,    83, | 
|  | 84,    -1,     7,     8,    -1,    10,    11,    12,    13,    14, | 
|  | -1,    16,    17,    -1,    19,    20,   137,    -1,    -1,   140, | 
|  | -1,    -1,   143,    -1,   145,    -1,   110,   111,   112,   113, | 
|  | 114,   115,   116,   117,   118,   119,   120,   121,   122,    44, | 
|  | 124,    -1,   126,   127,   128,     7,     8,    -1,    10,    11, | 
|  | 12,    13,    14,    -1,    16,    17,    -1,    19,    20,   143, | 
|  | -1,     7,     8,    -1,    10,    11,    12,    13,    14,    -1, | 
|  | 16,    17,    34,    19,    20,    -1,    -1,    -1,    -1,    -1, | 
|  | 7,     8,    44,    10,    11,    12,    13,    14,    34,    16, | 
|  | 17,    -1,    19,    20,    -1,    -1,     7,     8,    44,    10, | 
|  | 11,    12,    13,    14,    -1,    16,    17,    34,    19,    20, | 
|  | -1,    -1,    -1,    -1,    -1,     7,     8,    44,    10,    11, | 
|  | 12,    13,    14,    -1,    16,    17,    -1,    19,    20,    -1, | 
|  | -1,    -1,   137,    44,    -1,   140,    -1,    -1,   143,    -1, | 
|  | 145,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1, | 
|  | 7,     8,    44,    10,    11,    12,    13,    14,    -1,    16, | 
|  | 17,    -1,    19,    20,     7,     8,    -1,    10,    11,    12, | 
|  | 13,    14,    -1,    16,    17,   137,    19,    20,   140,    -1, | 
|  | -1,   143,    -1,   145,    -1,    -1,    -1,    44,    -1,    -1, | 
|  | -1,   137,    -1,    -1,   140,    -1,    -1,   143,    -1,   145, | 
|  | -1,    44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1, | 
|  | 137,    -1,    -1,   140,    -1,    -1,   143,    -1,   145,    -1, | 
|  | -1,    -1,    -1,    -1,    -1,    -1,   137,    -1,    -1,   140, | 
|  | -1,    -1,   143,    -1,   145,    -1,    -1,    -1,    -1,    -1, | 
|  | -1,    -1,    -1,    -1,    -1,   137,    -1,    -1,   140,    -1, | 
|  | -1,   143,    -1,   145,    -1,    -1,    -1,    -1,    -1,    -1, | 
|  | -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1, | 
|  | -1,    -1,    -1,    32,    -1,    -1,    -1,    -1,    -1,    -1, | 
|  | 137,    -1,    -1,   140,    -1,    -1,   143,    -1,   145,    -1, | 
|  | -1,    50,    51,    -1,   137,    -1,    -1,   140,    -1,    -1, | 
|  | 143,    -1,   145,    62,    63,    64,    65,    66,    67,    68, | 
|  | 69,    70,    71,    72,    73,    74,    75,    76,    77,    78, | 
|  | 79,    80,    81,    82,    83,    84,    -1,    -1,    -1,    -1, | 
|  | -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1, | 
|  | -1,    -1,    -1,    -1,    -1,    -1,   105,   106,   107,    -1, | 
|  | -1,   110,   111,   112,   113,   114,   115,   116,   117,   118, | 
|  | 119,   120,   121,   122,   123,   124,   125,   126,   127,   128 | 
|  | }; | 
|  |  | 
|  | /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing | 
|  | symbol of state STATE-NUM.  */ | 
|  | static const unsigned char yystos[] = | 
|  | { | 
|  | 0,    16,    17,    19,    20,    21,    27,    28,    46,    49, | 
|  | 53,   156,   158,   159,   160,   188,   189,   190,   192,   191, | 
|  | 47,    61,   197,   134,    52,   134,    15,   134,    37,    38, | 
|  | 39,    40,    41,    42,    43,    45,   133,   161,   162,   163, | 
|  | 0,   190,    41,    43,   164,   207,    37,    38,    39,    42, | 
|  | 165,   204,   206,   213,   134,   134,   140,   198,    19,   196, | 
|  | 7,     8,    10,    11,    12,    13,    14,    44,   137,   140, | 
|  | 143,   145,   156,   159,   177,   178,   210,   163,   163,    29, | 
|  | 30,   187,   163,   163,    18,   214,   215,    26,   146,   205, | 
|  | 214,    19,    19,    19,   199,   138,     4,     4,     4,   145, | 
|  | 10,   146,   178,   183,   136,   138,   187,   187,    11,    12, | 
|  | 13,   154,   155,   178,   184,    55,    56,    57,    58,    59, | 
|  | 60,   166,   202,   202,   158,   218,   135,   142,    34,   178, | 
|  | 179,   181,   182,   141,   141,   146,   183,   135,   146,   182, | 
|  | 184,   178,    23,    24,     3,     4,     5,     6,     9,    22, | 
|  | 35,    36,    68,    69,    70,    71,    72,    73,    74,    75, | 
|  | 76,    77,    78,    79,    80,    81,    82,    83,    84,   110, | 
|  | 111,   112,   113,   114,   115,   116,   117,   118,   119,   120, | 
|  | 121,   122,   124,   126,   127,   128,   140,   143,   145,   147, | 
|  | 149,   150,   151,   185,   210,   193,     4,    10,   178,   180, | 
|  | 25,   145,   203,    32,    50,    51,    62,    63,    64,    65, | 
|  | 66,    67,    83,    84,   105,   106,   107,   110,   123,   124, | 
|  | 125,   126,   127,   128,   149,   150,   151,   216,   222,   223, | 
|  | 224,   225,    19,   168,   135,   139,   178,   178,   144,   146, | 
|  | 178,   139,   194,   195,    85,    86,    87,    88,    89,    90, | 
|  | 91,    92,    93,    94,   152,    23,    24,    91,    92,    93, | 
|  | 94,    95,    96,    97,    98,    99,   100,   101,   102,   103, | 
|  | 104,   153,   138,   138,   138,   138,   138,   142,   184,   186, | 
|  | 145,   186,   146,   186,    19,   138,   138,   138,   135,   175, | 
|  | 159,    50,    10,   178,   212,    11,    14,    11,   154,   166, | 
|  | 152,   153,   178,   178,   212,   178,   178,   219,   212,   212, | 
|  | 212,   212,   212,   178,   178,   212,   166,   108,   109,   112, | 
|  | 113,   130,   131,   167,    34,   179,   170,   142,   144,   144, | 
|  | 170,   175,   175,   138,   138,   184,   184,   184,   184,   184, | 
|  | 135,   142,   146,   178,   186,   144,   146,   184,   184,   184, | 
|  | 31,    48,   173,   176,   138,     3,     4,     9,    22,    23, | 
|  | 24,    35,    36,    52,   143,   185,   209,   210,   211,   211, | 
|  | 211,   211,   180,   178,   178,   135,   172,   135,   172,   211, | 
|  | 140,   135,   135,   135,   135,   135,   135,   211,   211,    33, | 
|  | 180,   178,   212,   129,   167,   169,   184,   184,   221,   135, | 
|  | 135,   135,   135,   184,   144,   146,   135,   135,    33,    19, | 
|  | 4,   175,    34,   178,   200,   201,    54,   208,   186,   135, | 
|  | 135,   211,   211,   211,    11,    48,    11,   221,   211,   140, | 
|  | 212,   178,   212,   212,   212,   135,   135,   178,   211,   211, | 
|  | 135,   135,   135,   135,   139,   184,   184,   184,   184,   144, | 
|  | 184,   184,   178,   168,   135,   139,    19,   144,    14,    14, | 
|  | 138,   135,   135,   211,     4,   211,   135,   211,   135,   135, | 
|  | 135,   211,   211,   138,   178,   184,   184,   212,   135,   139, | 
|  | 135,   135,   139,   139,   139,   156,   157,    34,   178,   170, | 
|  | 135,   211,   211,   178,   220,   211,   211,   135,   172,   172, | 
|  | 211,   135,   212,   212,   212,   220,   211,   139,   139,   184, | 
|  | 184,   184,   168,   173,   174,    19,   135,   140,   211,   135, | 
|  | 139,   142,   211,   139,   139,   139,   139,   157,    48,   171, | 
|  | 14,   142,   154,   217,   168,   178,   170,   142,   170,     4, | 
|  | 211,   209,   142,   154,   211,    33,   135,   209,   168,    14, | 
|  | 14,   135,   211,   211,    14,    66,   211,    14,   211 | 
|  | }; | 
|  |  | 
|  | #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 yyerrorlab | 
|  |  | 
|  |  | 
|  | /* Like YYERROR except do call yyerror.  This remains here temporarily | 
|  | to ease the transition to the new meaning of YYERROR, for GCC. | 
|  | Once GCC version 2 has supplanted version 1, this can go.  */ | 
|  |  | 
|  | #define YYFAIL		goto yyerrlab | 
|  |  | 
|  | #define YYRECOVERING()  (!!yyerrstatus) | 
|  |  | 
|  | #define YYBACKUP(Token, Value)					\ | 
|  | do								\ | 
|  | if (yychar == YYEMPTY && yylen == 1)				\ | 
|  | {								\ | 
|  | yychar = (Token);						\ | 
|  | yylval = (Value);						\ | 
|  | yytoken = YYTRANSLATE (yychar);				\ | 
|  | YYPOPSTACK;						\ | 
|  | goto yybackup;						\ | 
|  | }								\ | 
|  | else								\ | 
|  | {								\ | 
|  | yyerror (YY_("syntax error: cannot back up")); \ | 
|  | YYERROR;							\ | 
|  | }								\ | 
|  | while (0) | 
|  |  | 
|  |  | 
|  | #define YYTERROR	1 | 
|  | #define YYERRCODE	256 | 
|  |  | 
|  |  | 
|  | /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. | 
|  | If N is 0, then set CURRENT to the empty location which ends | 
|  | the previous symbol: RHS[0] (always defined).  */ | 
|  |  | 
|  | #define YYRHSLOC(Rhs, K) ((Rhs)[K]) | 
|  | #ifndef YYLLOC_DEFAULT | 
|  | # define YYLLOC_DEFAULT(Current, Rhs, N)				\ | 
|  | do									\ | 
|  | if (N)								\ | 
|  | {								\ | 
|  | (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\ | 
|  | (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\ | 
|  | (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\ | 
|  | (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\ | 
|  | }								\ | 
|  | else								\ | 
|  | {								\ | 
|  | (Current).first_line   = (Current).last_line   =		\ | 
|  | YYRHSLOC (Rhs, 0).last_line;				\ | 
|  | (Current).first_column = (Current).last_column =		\ | 
|  | YYRHSLOC (Rhs, 0).last_column;				\ | 
|  | }								\ | 
|  | while (0) | 
|  | #endif | 
|  |  | 
|  |  | 
|  | /* YY_LOCATION_PRINT -- Print the location on the stream. | 
|  | This macro was not mandated originally: define only if we know | 
|  | we won't break user code: when these are the locations we know.  */ | 
|  |  | 
|  | #ifndef YY_LOCATION_PRINT | 
|  | # if YYLTYPE_IS_TRIVIAL | 
|  | #  define YY_LOCATION_PRINT(File, Loc)			\ | 
|  | fprintf (File, "%d.%d-%d.%d",			\ | 
|  | (Loc).first_line, (Loc).first_column,	\ | 
|  | (Loc).last_line,  (Loc).last_column) | 
|  | # else | 
|  | #  define YY_LOCATION_PRINT(File, Loc) ((void) 0) | 
|  | # endif | 
|  | #endif | 
|  |  | 
|  |  | 
|  | /* YYLEX -- calling `yylex' with the right arguments.  */ | 
|  |  | 
|  | #ifdef YYLEX_PARAM | 
|  | # define YYLEX yylex (YYLEX_PARAM) | 
|  | #else | 
|  | # define YYLEX yylex () | 
|  | #endif | 
|  |  | 
|  | /* Enable debugging if requested.  */ | 
|  | #if YYDEBUG | 
|  |  | 
|  | # ifndef YYFPRINTF | 
|  | #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */ | 
|  | #  define YYFPRINTF fprintf | 
|  | # endif | 
|  |  | 
|  | # define YYDPRINTF(Args)			\ | 
|  | do {						\ | 
|  | if (yydebug)					\ | 
|  | YYFPRINTF Args;				\ | 
|  | } while (0) | 
|  |  | 
|  | # define YY_SYMBOL_PRINT(Title, Type, Value, Location)		\ | 
|  | do {								\ | 
|  | if (yydebug)							\ | 
|  | {								\ | 
|  | YYFPRINTF (stderr, "%s ", Title);				\ | 
|  | yysymprint (stderr,					\ | 
|  | Type, Value);	\ | 
|  | YYFPRINTF (stderr, "\n");					\ | 
|  | }								\ | 
|  | } while (0) | 
|  |  | 
|  | /*------------------------------------------------------------------. | 
|  | | yy_stack_print -- Print the state stack from its BOTTOM up to its | | 
|  | | TOP (included).                                                   | | 
|  | `------------------------------------------------------------------*/ | 
|  |  | 
|  | #if defined (__STDC__) || defined (__cplusplus) | 
|  | static void | 
|  | yy_stack_print (short int *bottom, short int *top) | 
|  | #else | 
|  | static void | 
|  | yy_stack_print (bottom, top) | 
|  | short int *bottom; | 
|  | short int *top; | 
|  | #endif | 
|  | { | 
|  | YYFPRINTF (stderr, "Stack now"); | 
|  | for (/* Nothing. */; bottom <= top; ++bottom) | 
|  | YYFPRINTF (stderr, " %d", *bottom); | 
|  | YYFPRINTF (stderr, "\n"); | 
|  | } | 
|  |  | 
|  | # define YY_STACK_PRINT(Bottom, Top)				\ | 
|  | do {								\ | 
|  | if (yydebug)							\ | 
|  | yy_stack_print ((Bottom), (Top));				\ | 
|  | } while (0) | 
|  |  | 
|  |  | 
|  | /*------------------------------------------------. | 
|  | | Report that the YYRULE is going to be reduced.  | | 
|  | `------------------------------------------------*/ | 
|  |  | 
|  | #if defined (__STDC__) || defined (__cplusplus) | 
|  | static void | 
|  | yy_reduce_print (int yyrule) | 
|  | #else | 
|  | static void | 
|  | yy_reduce_print (yyrule) | 
|  | int yyrule; | 
|  | #endif | 
|  | { | 
|  | int yyi; | 
|  | unsigned long int yylno = yyrline[yyrule]; | 
|  | YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ", | 
|  | yyrule - 1, yylno); | 
|  | /* Print the symbols being reduced, and their result.  */ | 
|  | for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) | 
|  | YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]); | 
|  | YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]); | 
|  | } | 
|  |  | 
|  | # define YY_REDUCE_PRINT(Rule)		\ | 
|  | do {					\ | 
|  | if (yydebug)				\ | 
|  | yy_reduce_print (Rule);		\ | 
|  | } while (0) | 
|  |  | 
|  | /* Nonzero means print parse trace.  It is left uninitialized so that | 
|  | multiple parsers can coexist.  */ | 
|  | int yydebug; | 
|  | #else /* !YYDEBUG */ | 
|  | # define YYDPRINTF(Args) | 
|  | # define YY_SYMBOL_PRINT(Title, Type, Value, Location) | 
|  | # define YY_STACK_PRINT(Bottom, Top) | 
|  | # define YY_REDUCE_PRINT(Rule) | 
|  | #endif /* !YYDEBUG */ | 
|  |  | 
|  |  | 
|  | /* YYINITDEPTH -- initial size of the parser's stacks.  */ | 
|  | #ifndef	YYINITDEPTH | 
|  | # define YYINITDEPTH 200 | 
|  | #endif | 
|  |  | 
|  | /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only | 
|  | if the built-in stack extension method is used). | 
|  |  | 
|  | Do not make this value too large; the results are undefined if | 
|  | YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) | 
|  | evaluated with infinite-precision integer arithmetic.  */ | 
|  |  | 
|  | #ifndef YYMAXDEPTH | 
|  | # define YYMAXDEPTH 10000 | 
|  | #endif | 
|  |  | 
|  |  | 
|  |  | 
|  | #if YYERROR_VERBOSE | 
|  |  | 
|  | # ifndef yystrlen | 
|  | #  if defined (__GLIBC__) && defined (_STRING_H) | 
|  | #   define yystrlen strlen | 
|  | #  else | 
|  | /* Return the length of YYSTR.  */ | 
|  | static YYSIZE_T | 
|  | #   if defined (__STDC__) || defined (__cplusplus) | 
|  | yystrlen (const char *yystr) | 
|  | #   else | 
|  | yystrlen (yystr) | 
|  | const char *yystr; | 
|  | #   endif | 
|  | { | 
|  | const char *yys = yystr; | 
|  |  | 
|  | while (*yys++ != '\0') | 
|  | continue; | 
|  |  | 
|  | return yys - yystr - 1; | 
|  | } | 
|  | #  endif | 
|  | # endif | 
|  |  | 
|  | # ifndef yystpcpy | 
|  | #  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) | 
|  | #   define yystpcpy stpcpy | 
|  | #  else | 
|  | /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in | 
|  | YYDEST.  */ | 
|  | static char * | 
|  | #   if defined (__STDC__) || defined (__cplusplus) | 
|  | yystpcpy (char *yydest, const char *yysrc) | 
|  | #   else | 
|  | yystpcpy (yydest, yysrc) | 
|  | char *yydest; | 
|  | const char *yysrc; | 
|  | #   endif | 
|  | { | 
|  | char *yyd = yydest; | 
|  | const char *yys = yysrc; | 
|  |  | 
|  | while ((*yyd++ = *yys++) != '\0') | 
|  | continue; | 
|  |  | 
|  | return yyd - 1; | 
|  | } | 
|  | #  endif | 
|  | # endif | 
|  |  | 
|  | # ifndef yytnamerr | 
|  | /* Copy to YYRES the contents of YYSTR after stripping away unnecessary | 
|  | quotes and backslashes, so that it's suitable for yyerror.  The | 
|  | heuristic is that double-quoting is unnecessary unless the string | 
|  | contains an apostrophe, a comma, or backslash (other than | 
|  | backslash-backslash).  YYSTR is taken from yytname.  If YYRES is | 
|  | null, do not copy; instead, return the length of what the result | 
|  | would have been.  */ | 
|  | static YYSIZE_T | 
|  | yytnamerr (char *yyres, const char *yystr) | 
|  | { | 
|  | if (*yystr == '"') | 
|  | { | 
|  | size_t yyn = 0; | 
|  | char const *yyp = yystr; | 
|  |  | 
|  | for (;;) | 
|  | switch (*++yyp) | 
|  | { | 
|  | case '\'': | 
|  | case ',': | 
|  | goto do_not_strip_quotes; | 
|  |  | 
|  | case '\\': | 
|  | if (*++yyp != '\\') | 
|  | goto do_not_strip_quotes; | 
|  | /* Fall through.  */ | 
|  | default: | 
|  | if (yyres) | 
|  | yyres[yyn] = *yyp; | 
|  | yyn++; | 
|  | break; | 
|  |  | 
|  | case '"': | 
|  | if (yyres) | 
|  | yyres[yyn] = '\0'; | 
|  | return yyn; | 
|  | } | 
|  | do_not_strip_quotes: ; | 
|  | } | 
|  |  | 
|  | if (! yyres) | 
|  | return yystrlen (yystr); | 
|  |  | 
|  | return yystpcpy (yyres, yystr) - yyres; | 
|  | } | 
|  | # endif | 
|  |  | 
|  | #endif /* YYERROR_VERBOSE */ | 
|  |  | 
|  |  | 
|  |  | 
|  | #if YYDEBUG | 
|  | /*--------------------------------. | 
|  | | Print this symbol on YYOUTPUT.  | | 
|  | `--------------------------------*/ | 
|  |  | 
|  | #if defined (__STDC__) || defined (__cplusplus) | 
|  | static void | 
|  | yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) | 
|  | #else | 
|  | static void | 
|  | yysymprint (yyoutput, yytype, yyvaluep) | 
|  | FILE *yyoutput; | 
|  | int yytype; | 
|  | YYSTYPE *yyvaluep; | 
|  | #endif | 
|  | { | 
|  | /* Pacify ``unused variable'' warnings.  */ | 
|  | (void) yyvaluep; | 
|  |  | 
|  | if (yytype < YYNTOKENS) | 
|  | YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); | 
|  | else | 
|  | YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); | 
|  |  | 
|  |  | 
|  | # ifdef YYPRINT | 
|  | if (yytype < YYNTOKENS) | 
|  | YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); | 
|  | # endif | 
|  | switch (yytype) | 
|  | { | 
|  | default: | 
|  | break; | 
|  | } | 
|  | YYFPRINTF (yyoutput, ")"); | 
|  | } | 
|  |  | 
|  | #endif /* ! YYDEBUG */ | 
|  | /*-----------------------------------------------. | 
|  | | Release the memory associated to this symbol.  | | 
|  | `-----------------------------------------------*/ | 
|  |  | 
|  | #if defined (__STDC__) || defined (__cplusplus) | 
|  | static void | 
|  | yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) | 
|  | #else | 
|  | static void | 
|  | yydestruct (yymsg, yytype, yyvaluep) | 
|  | const char *yymsg; | 
|  | int yytype; | 
|  | YYSTYPE *yyvaluep; | 
|  | #endif | 
|  | { | 
|  | /* Pacify ``unused variable'' warnings.  */ | 
|  | (void) yyvaluep; | 
|  |  | 
|  | if (!yymsg) | 
|  | yymsg = "Deleting"; | 
|  | YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); | 
|  |  | 
|  | switch (yytype) | 
|  | { | 
|  |  | 
|  | default: | 
|  | break; | 
|  | } | 
|  | } | 
|  |  | 
|  |  | 
|  | /* Prevent warnings from -Wmissing-prototypes.  */ | 
|  |  | 
|  | #ifdef YYPARSE_PARAM | 
|  | # if defined (__STDC__) || defined (__cplusplus) | 
|  | int yyparse (void *YYPARSE_PARAM); | 
|  | # else | 
|  | int yyparse (); | 
|  | # endif | 
|  | #else /* ! YYPARSE_PARAM */ | 
|  | #if defined (__STDC__) || defined (__cplusplus) | 
|  | int yyparse (void); | 
|  | #else | 
|  | int yyparse (); | 
|  | #endif | 
|  | #endif /* ! YYPARSE_PARAM */ | 
|  |  | 
|  |  | 
|  |  | 
|  | /* The look-ahead symbol.  */ | 
|  | int yychar; | 
|  |  | 
|  | /* The semantic value of the look-ahead symbol.  */ | 
|  | YYSTYPE yylval; | 
|  |  | 
|  | /* Number of syntax errors so far.  */ | 
|  | int yynerrs; | 
|  |  | 
|  |  | 
|  |  | 
|  | /*----------. | 
|  | | yyparse.  | | 
|  | `----------*/ | 
|  |  | 
|  | #ifdef YYPARSE_PARAM | 
|  | # if defined (__STDC__) || defined (__cplusplus) | 
|  | int yyparse (void *YYPARSE_PARAM) | 
|  | # else | 
|  | int yyparse (YYPARSE_PARAM) | 
|  | void *YYPARSE_PARAM; | 
|  | # endif | 
|  | #else /* ! YYPARSE_PARAM */ | 
|  | #if defined (__STDC__) || defined (__cplusplus) | 
|  | int | 
|  | yyparse (void) | 
|  | #else | 
|  | int | 
|  | yyparse () | 
|  |  | 
|  | #endif | 
|  | #endif | 
|  | { | 
|  |  | 
|  | int yystate; | 
|  | int yyn; | 
|  | int yyresult; | 
|  | /* Number of tokens to shift before error messages enabled.  */ | 
|  | int yyerrstatus; | 
|  | /* Look-ahead token as an internal (translated) token number.  */ | 
|  | int yytoken = 0; | 
|  |  | 
|  | /* Three stacks and their tools: | 
|  | `yyss': related to states, | 
|  | `yyvs': related to semantic values, | 
|  | `yyls': related to locations. | 
|  |  | 
|  | Refer to the stacks thru separate pointers, to allow yyoverflow | 
|  | to reallocate them elsewhere.  */ | 
|  |  | 
|  | /* The state stack.  */ | 
|  | short int yyssa[YYINITDEPTH]; | 
|  | short int *yyss = yyssa; | 
|  | short int *yyssp; | 
|  |  | 
|  | /* The semantic value stack.  */ | 
|  | YYSTYPE yyvsa[YYINITDEPTH]; | 
|  | YYSTYPE *yyvs = yyvsa; | 
|  | YYSTYPE *yyvsp; | 
|  |  | 
|  |  | 
|  |  | 
|  | #define YYPOPSTACK   (yyvsp--, yyssp--) | 
|  |  | 
|  | YYSIZE_T yystacksize = YYINITDEPTH; | 
|  |  | 
|  | /* The variables used to return semantic value and location from the | 
|  | action routines.  */ | 
|  | YYSTYPE yyval; | 
|  |  | 
|  |  | 
|  | /* When reducing, the number of symbols on the RHS of the reduced | 
|  | rule.  */ | 
|  | int yylen; | 
|  |  | 
|  | YYDPRINTF ((stderr, "Starting parse\n")); | 
|  |  | 
|  | 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; | 
|  | yyvsp = yyvs; | 
|  |  | 
|  | goto yysetstate; | 
|  |  | 
|  | /*------------------------------------------------------------. | 
|  | | yynewstate -- Push a new state, which is found in yystate.  | | 
|  | `------------------------------------------------------------*/ | 
|  | yynewstate: | 
|  | /* In all cases, when you get here, the value and location stacks | 
|  | have just been pushed. so pushing a state here evens the stacks. | 
|  | */ | 
|  | yyssp++; | 
|  |  | 
|  | yysetstate: | 
|  | *yyssp = yystate; | 
|  |  | 
|  | if (yyss + yystacksize - 1 <= yyssp) | 
|  | { | 
|  | /* Get the current used size of the three stacks, in elements.  */ | 
|  | YYSIZE_T yysize = yyssp - yyss + 1; | 
|  |  | 
|  | #ifdef yyoverflow | 
|  | { | 
|  | /* Give user a chance to reallocate the stack. Use copies of | 
|  | these so that the &'s don't force the real ones into | 
|  | memory.  */ | 
|  | YYSTYPE *yyvs1 = yyvs; | 
|  | short int *yyss1 = yyss; | 
|  |  | 
|  |  | 
|  | /* Each stack pointer address is followed by the size of the | 
|  | data in use in that stack, in bytes.  This used to be a | 
|  | conditional around just the two extra args, but that might | 
|  | be undefined if yyoverflow is a macro.  */ | 
|  | yyoverflow (YY_("memory exhausted"), | 
|  | &yyss1, yysize * sizeof (*yyssp), | 
|  | &yyvs1, yysize * sizeof (*yyvsp), | 
|  |  | 
|  | &yystacksize); | 
|  |  | 
|  | yyss = yyss1; | 
|  | yyvs = yyvs1; | 
|  | } | 
|  | #else /* no yyoverflow */ | 
|  | # ifndef YYSTACK_RELOCATE | 
|  | goto yyexhaustedlab; | 
|  | # else | 
|  | /* Extend the stack our own way.  */ | 
|  | if (YYMAXDEPTH <= yystacksize) | 
|  | goto yyexhaustedlab; | 
|  | yystacksize *= 2; | 
|  | if (YYMAXDEPTH < yystacksize) | 
|  | yystacksize = YYMAXDEPTH; | 
|  |  | 
|  | { | 
|  | short int *yyss1 = yyss; | 
|  | union yyalloc *yyptr = | 
|  | (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); | 
|  | if (! yyptr) | 
|  | goto yyexhaustedlab; | 
|  | YYSTACK_RELOCATE (yyss); | 
|  | YYSTACK_RELOCATE (yyvs); | 
|  |  | 
|  | #  undef YYSTACK_RELOCATE | 
|  | if (yyss1 != yyssa) | 
|  | YYSTACK_FREE (yyss1); | 
|  | } | 
|  | # endif | 
|  | #endif /* no yyoverflow */ | 
|  |  | 
|  | yyssp = yyss + yysize - 1; | 
|  | yyvsp = yyvs + yysize - 1; | 
|  |  | 
|  |  | 
|  | YYDPRINTF ((stderr, "Stack size increased to %lu\n", | 
|  | (unsigned long int) yystacksize)); | 
|  |  | 
|  | if (yyss + yystacksize - 1 <= yyssp) | 
|  | YYABORT; | 
|  | } | 
|  |  | 
|  | YYDPRINTF ((stderr, "Entering state %d\n", yystate)); | 
|  |  | 
|  | goto yybackup; | 
|  |  | 
|  | /*-----------. | 
|  | | yybackup.  | | 
|  | `-----------*/ | 
|  | yybackup: | 
|  |  | 
|  | /* Do appropriate processing given the current state.  */ | 
|  | /* Read a look-ahead token if we need one and don't already have one.  */ | 
|  | /* yyresume: */ | 
|  |  | 
|  | /* First try to decide what to do without reference to look-ahead token.  */ | 
|  |  | 
|  | yyn = yypact[yystate]; | 
|  | if (yyn == YYPACT_NINF) | 
|  | goto yydefault; | 
|  |  | 
|  | /* Not known => get a look-ahead token if don't already have one.  */ | 
|  |  | 
|  | /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */ | 
|  | if (yychar == YYEMPTY) | 
|  | { | 
|  | YYDPRINTF ((stderr, "Reading a token: ")); | 
|  | yychar = YYLEX; | 
|  | } | 
|  |  | 
|  | if (yychar <= YYEOF) | 
|  | { | 
|  | yychar = yytoken = YYEOF; | 
|  | YYDPRINTF ((stderr, "Now at end of input.\n")); | 
|  | } | 
|  | else | 
|  | { | 
|  | yytoken = YYTRANSLATE (yychar); | 
|  | YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); | 
|  | } | 
|  |  | 
|  | /* If the proper action on seeing token YYTOKEN is to reduce or to | 
|  | detect an error, take that action.  */ | 
|  | yyn += yytoken; | 
|  | if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) | 
|  | goto yydefault; | 
|  | yyn = yytable[yyn]; | 
|  | if (yyn <= 0) | 
|  | { | 
|  | if (yyn == 0 || yyn == YYTABLE_NINF) | 
|  | goto yyerrlab; | 
|  | yyn = -yyn; | 
|  | goto yyreduce; | 
|  | } | 
|  |  | 
|  | if (yyn == YYFINAL) | 
|  | YYACCEPT; | 
|  |  | 
|  | /* Shift the look-ahead token.  */ | 
|  | YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); | 
|  |  | 
|  | /* Discard the token being shifted unless it is eof.  */ | 
|  | if (yychar != YYEOF) | 
|  | yychar = YYEMPTY; | 
|  |  | 
|  | *++yyvsp = yylval; | 
|  |  | 
|  |  | 
|  | /* Count tokens shifted since error; after three, turn off error | 
|  | status.  */ | 
|  | if (yyerrstatus) | 
|  | yyerrstatus--; | 
|  |  | 
|  | yystate = yyn; | 
|  | goto yynewstate; | 
|  |  | 
|  |  | 
|  | /*-----------------------------------------------------------. | 
|  | | yydefault -- do the default action for the current state.  | | 
|  | `-----------------------------------------------------------*/ | 
|  | yydefault: | 
|  | yyn = yydefact[yystate]; | 
|  | if (yyn == 0) | 
|  | goto yyerrlab; | 
|  | goto yyreduce; | 
|  |  | 
|  |  | 
|  | /*-----------------------------. | 
|  | | yyreduce -- Do a reduction.  | | 
|  | `-----------------------------*/ | 
|  | yyreduce: | 
|  | /* yyn is the number of a rule to reduce with.  */ | 
|  | yylen = yyr2[yyn]; | 
|  |  | 
|  | /* If YYLEN is nonzero, implement the default value of the action: | 
|  | `$$ = $1'. | 
|  |  | 
|  | Otherwise, the following line sets YYVAL to garbage. | 
|  | This behavior is undocumented and Bison | 
|  | users should not rely upon it.  Assigning to YYVAL | 
|  | unconditionally makes the parser a bit smaller, and it avoids a | 
|  | GCC warning that YYVAL may be used uninitialized.  */ | 
|  | yyval = yyvsp[1-yylen]; | 
|  |  | 
|  |  | 
|  | YY_REDUCE_PRINT (yyn); | 
|  | switch (yyn) | 
|  | { | 
|  | case 29: | 
|  | #line 1092 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;} | 
|  | break; | 
|  |  | 
|  | case 30: | 
|  | #line 1092 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;} | 
|  | break; | 
|  |  | 
|  | case 31: | 
|  | #line 1093 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.IPredicate) = ICmpInst::ICMP_SLT; ;} | 
|  | break; | 
|  |  | 
|  | case 32: | 
|  | #line 1093 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;} | 
|  | break; | 
|  |  | 
|  | case 33: | 
|  | #line 1094 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;} | 
|  | break; | 
|  |  | 
|  | case 34: | 
|  | #line 1094 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;} | 
|  | break; | 
|  |  | 
|  | case 35: | 
|  | #line 1095 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;} | 
|  | break; | 
|  |  | 
|  | case 36: | 
|  | #line 1095 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;} | 
|  | break; | 
|  |  | 
|  | case 37: | 
|  | #line 1096 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;} | 
|  | break; | 
|  |  | 
|  | case 38: | 
|  | #line 1096 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;} | 
|  | break; | 
|  |  | 
|  | case 39: | 
|  | #line 1100 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;} | 
|  | break; | 
|  |  | 
|  | case 40: | 
|  | #line 1100 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;} | 
|  | break; | 
|  |  | 
|  | case 41: | 
|  | #line 1101 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;} | 
|  | break; | 
|  |  | 
|  | case 42: | 
|  | #line 1101 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;} | 
|  | break; | 
|  |  | 
|  | case 43: | 
|  | #line 1102 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;} | 
|  | break; | 
|  |  | 
|  | case 44: | 
|  | #line 1102 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;} | 
|  | break; | 
|  |  | 
|  | case 45: | 
|  | #line 1103 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;} | 
|  | break; | 
|  |  | 
|  | case 46: | 
|  | #line 1103 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;} | 
|  | break; | 
|  |  | 
|  | case 47: | 
|  | #line 1104 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;} | 
|  | break; | 
|  |  | 
|  | case 48: | 
|  | #line 1104 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;} | 
|  | break; | 
|  |  | 
|  | case 49: | 
|  | #line 1105 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;} | 
|  | break; | 
|  |  | 
|  | case 50: | 
|  | #line 1105 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;} | 
|  | break; | 
|  |  | 
|  | case 51: | 
|  | #line 1106 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;} | 
|  | break; | 
|  |  | 
|  | case 52: | 
|  | #line 1106 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;} | 
|  | break; | 
|  |  | 
|  | case 53: | 
|  | #line 1107 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;} | 
|  | break; | 
|  |  | 
|  | case 54: | 
|  | #line 1108 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;} | 
|  | break; | 
|  |  | 
|  | case 61: | 
|  | #line 1117 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.StrVal) = 0; ;} | 
|  | break; | 
|  |  | 
|  | case 62: | 
|  | #line 1121 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.StrVal) = (yyvsp[-1].StrVal); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 63: | 
|  | #line 1125 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.StrVal) = 0; | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 66: | 
|  | #line 1132 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.StrVal) = (yyvsp[-1].StrVal); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 67: | 
|  | #line 1136 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.StrVal) = 0; | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 68: | 
|  | #line 1142 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.Linkage) = GlobalValue::InternalLinkage; ;} | 
|  | break; | 
|  |  | 
|  | case 69: | 
|  | #line 1143 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.Linkage) = GlobalValue::WeakLinkage; ;} | 
|  | break; | 
|  |  | 
|  | case 70: | 
|  | #line 1144 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;} | 
|  | break; | 
|  |  | 
|  | case 71: | 
|  | #line 1145 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;} | 
|  | break; | 
|  |  | 
|  | case 72: | 
|  | #line 1146 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;} | 
|  | break; | 
|  |  | 
|  | case 73: | 
|  | #line 1150 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;} | 
|  | break; | 
|  |  | 
|  | case 74: | 
|  | #line 1151 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;} | 
|  | break; | 
|  |  | 
|  | case 75: | 
|  | #line 1152 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;} | 
|  | break; | 
|  |  | 
|  | case 76: | 
|  | #line 1156 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.Visibility) = GlobalValue::DefaultVisibility; ;} | 
|  | break; | 
|  |  | 
|  | case 77: | 
|  | #line 1157 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.Visibility) = GlobalValue::HiddenVisibility;  ;} | 
|  | break; | 
|  |  | 
|  | case 78: | 
|  | #line 1161 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;} | 
|  | break; | 
|  |  | 
|  | case 79: | 
|  | #line 1162 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;} | 
|  | break; | 
|  |  | 
|  | case 80: | 
|  | #line 1163 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;} | 
|  | break; | 
|  |  | 
|  | case 81: | 
|  | #line 1167 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;} | 
|  | break; | 
|  |  | 
|  | case 82: | 
|  | #line 1168 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.Linkage) = GlobalValue::InternalLinkage; ;} | 
|  | break; | 
|  |  | 
|  | case 83: | 
|  | #line 1169 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;} | 
|  | break; | 
|  |  | 
|  | case 84: | 
|  | #line 1170 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.Linkage) = GlobalValue::WeakLinkage; ;} | 
|  | break; | 
|  |  | 
|  | case 85: | 
|  | #line 1171 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;} | 
|  | break; | 
|  |  | 
|  | case 86: | 
|  | #line 1174 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.UIntVal) = CallingConv::C; ;} | 
|  | break; | 
|  |  | 
|  | case 87: | 
|  | #line 1175 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.UIntVal) = CallingConv::C; ;} | 
|  | break; | 
|  |  | 
|  | case 88: | 
|  | #line 1176 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.UIntVal) = CallingConv::Fast; ;} | 
|  | break; | 
|  |  | 
|  | case 89: | 
|  | #line 1177 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.UIntVal) = CallingConv::Cold; ;} | 
|  | break; | 
|  |  | 
|  | case 90: | 
|  | #line 1178 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.UIntVal) = CallingConv::X86_StdCall; ;} | 
|  | break; | 
|  |  | 
|  | case 91: | 
|  | #line 1179 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.UIntVal) = CallingConv::X86_FastCall; ;} | 
|  | break; | 
|  |  | 
|  | case 92: | 
|  | #line 1180 "/proj/llvm/llvm-1/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 93: | 
|  | #line 1187 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.ParamAttrs) = FunctionType::ZExtAttribute;      ;} | 
|  | break; | 
|  |  | 
|  | case 94: | 
|  | #line 1188 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.ParamAttrs) = FunctionType::SExtAttribute;      ;} | 
|  | break; | 
|  |  | 
|  | case 95: | 
|  | #line 1189 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.ParamAttrs) = FunctionType::InRegAttribute;     ;} | 
|  | break; | 
|  |  | 
|  | case 96: | 
|  | #line 1190 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.ParamAttrs) = FunctionType::StructRetAttribute; ;} | 
|  | break; | 
|  |  | 
|  | case 97: | 
|  | #line 1193 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.ParamAttrs) = FunctionType::NoAttributeSet; ;} | 
|  | break; | 
|  |  | 
|  | case 98: | 
|  | #line 1194 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.ParamAttrs) = FunctionType::ParameterAttributes((yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs)); | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 99: | 
|  | #line 1199 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.ParamAttrs) = FunctionType::NoReturnAttribute; ;} | 
|  | break; | 
|  |  | 
|  | case 101: | 
|  | #line 1203 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.ParamAttrs) = FunctionType::NoAttributeSet; ;} | 
|  | break; | 
|  |  | 
|  | case 102: | 
|  | #line 1204 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.ParamAttrs) = FunctionType::ParameterAttributes((yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs)); | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 103: | 
|  | #line 1211 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.UIntVal) = 0; ;} | 
|  | break; | 
|  |  | 
|  | case 104: | 
|  | #line 1212 "/proj/llvm/llvm-1/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 105: | 
|  | #line 1218 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.UIntVal) = 0; ;} | 
|  | break; | 
|  |  | 
|  | case 106: | 
|  | #line 1219 "/proj/llvm/llvm-1/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 107: | 
|  | #line 1227 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | for (unsigned i = 0, e = strlen((yyvsp[0].StrVal)); i != e; ++i) | 
|  | if ((yyvsp[0].StrVal)[i] == '"' || (yyvsp[0].StrVal)[i] == '\\') | 
|  | GEN_ERROR("Invalid character in section name"); | 
|  | (yyval.StrVal) = (yyvsp[0].StrVal); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 108: | 
|  | #line 1235 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.StrVal) = 0; ;} | 
|  | break; | 
|  |  | 
|  | case 109: | 
|  | #line 1236 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.StrVal) = (yyvsp[0].StrVal); ;} | 
|  | break; | 
|  |  | 
|  | case 110: | 
|  | #line 1241 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | {;} | 
|  | break; | 
|  |  | 
|  | case 111: | 
|  | #line 1242 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | {;} | 
|  | break; | 
|  |  | 
|  | case 112: | 
|  | #line 1243 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | CurGV->setSection((yyvsp[0].StrVal)); | 
|  | free((yyvsp[0].StrVal)); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 113: | 
|  | #line 1248 "/proj/llvm/llvm-1/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 118: | 
|  | #line 1264 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.TypeVal) = new PATypeHolder(OpaqueType::get()); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 119: | 
|  | #line 1268 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType)); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 120: | 
|  | #line 1272 "/proj/llvm/llvm-1/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 121: | 
|  | #line 1279 "/proj/llvm/llvm-1/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 122: | 
|  | #line 1284 "/proj/llvm/llvm-1/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 123: | 
|  | #line 1292 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | std::vector<const Type*> Params; | 
|  | std::vector<FunctionType::ParameterAttributes> Attrs; | 
|  | Attrs.push_back((yyvsp[0].ParamAttrs)); | 
|  | for (TypeWithAttrsList::iterator I=(yyvsp[-2].TypeWithAttrsList)->begin(), E=(yyvsp[-2].TypeWithAttrsList)->end(); I != E; ++I) { | 
|  | Params.push_back(I->Ty->get()); | 
|  | if (I->Ty->get() != Type::VoidTy) | 
|  | Attrs.push_back(I->Attrs); | 
|  | } | 
|  | bool isVarArg = Params.size() && Params.back() == Type::VoidTy; | 
|  | if (isVarArg) Params.pop_back(); | 
|  |  | 
|  | FunctionType *FT = FunctionType::get(*(yyvsp[-4].TypeVal), Params, isVarArg, Attrs); | 
|  | 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 124: | 
|  | #line 1310 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | std::vector<const Type*> Params; | 
|  | std::vector<FunctionType::ParameterAttributes> Attrs; | 
|  | Attrs.push_back((yyvsp[0].ParamAttrs)); | 
|  | for (TypeWithAttrsList::iterator I=(yyvsp[-2].TypeWithAttrsList)->begin(), E=(yyvsp[-2].TypeWithAttrsList)->end(); I != E; ++I) { | 
|  | Params.push_back(I->Ty->get()); | 
|  | if (I->Ty->get() != Type::VoidTy) | 
|  | Attrs.push_back(I->Attrs); | 
|  | } | 
|  | bool isVarArg = Params.size() && Params.back() == Type::VoidTy; | 
|  | if (isVarArg) Params.pop_back(); | 
|  |  | 
|  | FunctionType *FT = FunctionType::get((yyvsp[-4].PrimType), Params, isVarArg, Attrs); | 
|  | delete (yyvsp[-2].TypeWithAttrsList);      // Delete the argument list | 
|  | (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT)); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 125: | 
|  | #line 1328 "/proj/llvm/llvm-1/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 126: | 
|  | #line 1333 "/proj/llvm/llvm-1/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 127: | 
|  | #line 1345 "/proj/llvm/llvm-1/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 128: | 
|  | #line 1355 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | {                                  // Empty structure type? | 
|  | (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>())); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 129: | 
|  | #line 1359 "/proj/llvm/llvm-1/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 130: | 
|  | #line 1369 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | {                         // Empty structure type? | 
|  | (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>(), true)); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 131: | 
|  | #line 1376 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.TypeWithAttrs).Ty = (yyvsp[-1].TypeVal); | 
|  | (yyval.TypeWithAttrs).Attrs = (yyvsp[0].ParamAttrs); | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 132: | 
|  | #line 1383 "/proj/llvm/llvm-1/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 133: | 
|  | #line 1390 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.TypeVal) = new PATypeHolder(Type::VoidTy); | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 134: | 
|  | #line 1395 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.TypeWithAttrsList) = new TypeWithAttrsList(); | 
|  | (yyval.TypeWithAttrsList)->push_back((yyvsp[0].TypeWithAttrs)); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 135: | 
|  | #line 1400 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | ((yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList))->push_back((yyvsp[0].TypeWithAttrs)); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 137: | 
|  | #line 1408 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList); | 
|  | TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet; | 
|  | TWA.Ty = new PATypeHolder(Type::VoidTy); | 
|  | (yyval.TypeWithAttrsList)->push_back(TWA); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 138: | 
|  | #line 1415 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.TypeWithAttrsList) = new TypeWithAttrsList; | 
|  | TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet; | 
|  | TWA.Ty = new PATypeHolder(Type::VoidTy); | 
|  | (yyval.TypeWithAttrsList)->push_back(TWA); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 139: | 
|  | #line 1422 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.TypeWithAttrsList) = new TypeWithAttrsList(); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 140: | 
|  | #line 1430 "/proj/llvm/llvm-1/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 141: | 
|  | #line 1435 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 142: | 
|  | #line 1446 "/proj/llvm/llvm-1/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 143: | 
|  | #line 1474 "/proj/llvm/llvm-1/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 144: | 
|  | #line 1490 "/proj/llvm/llvm-1/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(); | 
|  | char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true); | 
|  | if (NumElements != -1 && NumElements != (EndStr-(yyvsp[0].StrVal))) | 
|  | GEN_ERROR("Can't build string constant of size " + | 
|  | itostr((int)(EndStr-(yyvsp[0].StrVal))) + | 
|  | " when array has size " + itostr(NumElements) + ""); | 
|  | std::vector<Constant*> Vals; | 
|  | if (ETy == Type::Int8Ty) { | 
|  | for (unsigned char *C = (unsigned char *)(yyvsp[0].StrVal); | 
|  | C != (unsigned char*)EndStr; ++C) | 
|  | Vals.push_back(ConstantInt::get(ETy, *C)); | 
|  | } else { | 
|  | free((yyvsp[0].StrVal)); | 
|  | GEN_ERROR("Cannot build string arrays of non byte sized elements"); | 
|  | } | 
|  | free((yyvsp[0].StrVal)); | 
|  | (yyval.ConstVal) = ConstantArray::get(ATy, Vals); | 
|  | delete (yyvsp[-2].TypeVal); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 145: | 
|  | #line 1519 "/proj/llvm/llvm-1/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 146: | 
|  | #line 1547 "/proj/llvm/llvm-1/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 147: | 
|  | #line 1572 "/proj/llvm/llvm-1/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 148: | 
|  | #line 1591 "/proj/llvm/llvm-1/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 149: | 
|  | #line 1617 "/proj/llvm/llvm-1/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 150: | 
|  | #line 1637 "/proj/llvm/llvm-1/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 151: | 
|  | #line 1649 "/proj/llvm/llvm-1/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 152: | 
|  | #line 1656 "/proj/llvm/llvm-1/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).Name; | 
|  | 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::ExternalLinkage, Name, | 
|  | CurModule.CurrentModule); | 
|  | } else { | 
|  | GV = new GlobalVariable(PT->getElementType(), false, | 
|  | GlobalValue::ExternalLinkage, 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 153: | 
|  | #line 1722 "/proj/llvm/llvm-1/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 154: | 
|  | #line 1732 "/proj/llvm/llvm-1/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 155: | 
|  | #line 1742 "/proj/llvm/llvm-1/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 156: | 
|  | #line 1748 "/proj/llvm/llvm-1/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 157: | 
|  | #line 1758 "/proj/llvm/llvm-1/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 158: | 
|  | #line 1764 "/proj/llvm/llvm-1/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 159: | 
|  | #line 1774 "/proj/llvm/llvm-1/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 160: | 
|  | #line 1779 "/proj/llvm/llvm-1/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 161: | 
|  | #line 1784 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | {                   // Float & Double constants | 
|  | if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].FPVal))) | 
|  | GEN_ERROR("Floating point constant invalid for type"); | 
|  | (yyval.ConstVal) = ConstantFP::get((yyvsp[-1].PrimType), (yyvsp[0].FPVal)); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 162: | 
|  | #line 1792 "/proj/llvm/llvm-1/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 163: | 
|  | #line 1804 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | if (!isa<PointerType>((yyvsp[-2].ConstVal)->getType())) | 
|  | GEN_ERROR("GetElementPtr requires a pointer operand"); | 
|  |  | 
|  | const Type *IdxTy = | 
|  | GetElementPtrInst::getIndexedType((yyvsp[-2].ConstVal)->getType(), &(*(yyvsp[-1].ValueList))[0], (yyvsp[-1].ValueList)->size(), | 
|  | 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 164: | 
|  | #line 1826 "/proj/llvm/llvm-1/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 165: | 
|  | #line 1834 "/proj/llvm/llvm-1/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 166: | 
|  | #line 1840 "/proj/llvm/llvm-1/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 167: | 
|  | #line 1851 "/proj/llvm/llvm-1/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 168: | 
|  | #line 1856 "/proj/llvm/llvm-1/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 169: | 
|  | #line 1861 "/proj/llvm/llvm-1/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 170: | 
|  | #line 1867 "/proj/llvm/llvm-1/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 171: | 
|  | #line 1873 "/proj/llvm/llvm-1/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 172: | 
|  | #line 1882 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal)); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 173: | 
|  | #line 1886 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.ConstVector) = new std::vector<Constant*>(); | 
|  | (yyval.ConstVector)->push_back((yyvsp[0].ConstVal)); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 174: | 
|  | #line 1894 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.BoolVal) = false; ;} | 
|  | break; | 
|  |  | 
|  | case 175: | 
|  | #line 1894 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.BoolVal) = true; ;} | 
|  | break; | 
|  |  | 
|  | case 176: | 
|  | #line 1905 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule; | 
|  | CurModule.ModuleDone(); | 
|  | CHECK_FOR_ERROR; | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 177: | 
|  | #line 1910 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule; | 
|  | CurModule.ModuleDone(); | 
|  | CHECK_FOR_ERROR; | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 180: | 
|  | #line 1923 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { CurFun.isDeclare = false; ;} | 
|  | break; | 
|  |  | 
|  | case 181: | 
|  | #line 1923 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | CurFun.FunctionDone(); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 182: | 
|  | #line 1927 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { CurFun.isDeclare = true; ;} | 
|  | break; | 
|  |  | 
|  | case 183: | 
|  | #line 1927 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 184: | 
|  | #line 1930 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 185: | 
|  | #line 1933 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | // 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) { | 
|  | GEN_ERROR("Reference to an undefined type: '"+DID.getName() + "'"); | 
|  | } else { | 
|  | GEN_ERROR("Reference to an undefined type: #" + itostr(DID.Num)); | 
|  | } | 
|  | } | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 186: | 
|  | #line 1945 "/proj/llvm/llvm-1/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 187: | 
|  | #line 1969 "/proj/llvm/llvm-1/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 188: | 
|  | #line 1980 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | /* "Externally Visible" Linkage */ | 
|  | if ((yyvsp[0].ConstVal) == 0) | 
|  | GEN_ERROR("Global value initializer is not a constant"); | 
|  | CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalLinkage, | 
|  | (yyvsp[-2].Visibility), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal)); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 189: | 
|  | #line 1987 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | CurGV = 0; | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 190: | 
|  | #line 1990 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | if ((yyvsp[0].ConstVal) == 0) | 
|  | GEN_ERROR("Global value initializer is not a constant"); | 
|  | CurGV = ParseGlobalVariable((yyvsp[-4].StrVal), (yyvsp[-3].Linkage), (yyvsp[-2].Visibility), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal)); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 191: | 
|  | #line 1995 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | CurGV = 0; | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 192: | 
|  | #line 1998 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | if (!UpRefs.empty()) | 
|  | GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription()); | 
|  | CurGV = ParseGlobalVariable((yyvsp[-4].StrVal), (yyvsp[-3].Linkage), (yyvsp[-2].Visibility), (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0); | 
|  | CHECK_FOR_ERROR | 
|  | delete (yyvsp[0].TypeVal); | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 193: | 
|  | #line 2004 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | CurGV = 0; | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 194: | 
|  | #line 2008 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 195: | 
|  | #line 2011 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 196: | 
|  | #line 2017 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm(); | 
|  | char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true); | 
|  | std::string NewAsm((yyvsp[0].StrVal), EndStr); | 
|  | free((yyvsp[0].StrVal)); | 
|  |  | 
|  | if (AsmSoFar.empty()) | 
|  | CurModule.CurrentModule->setModuleInlineAsm(NewAsm); | 
|  | else | 
|  | CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 197: | 
|  | #line 2030 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal)); | 
|  | free((yyvsp[0].StrVal)); | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 198: | 
|  | #line 2034 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | CurModule.CurrentModule->setDataLayout((yyvsp[0].StrVal)); | 
|  | free((yyvsp[0].StrVal)); | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 200: | 
|  | #line 2041 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal)); | 
|  | free((yyvsp[0].StrVal)); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 201: | 
|  | #line 2046 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal)); | 
|  | free((yyvsp[0].StrVal)); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 202: | 
|  | #line 2051 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 203: | 
|  | #line 2060 "/proj/llvm/llvm-1/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 204: | 
|  | #line 2070 "/proj/llvm/llvm-1/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 205: | 
|  | #line 2081 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.ArgList) = (yyvsp[0].ArgList); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 206: | 
|  | #line 2085 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.ArgList) = (yyvsp[-2].ArgList); | 
|  | struct ArgListEntry E; | 
|  | E.Ty = new PATypeHolder(Type::VoidTy); | 
|  | E.Name = 0; | 
|  | E.Attrs = FunctionType::NoAttributeSet; | 
|  | (yyval.ArgList)->push_back(E); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 207: | 
|  | #line 2094 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.ArgList) = new ArgListType; | 
|  | struct ArgListEntry E; | 
|  | E.Ty = new PATypeHolder(Type::VoidTy); | 
|  | E.Name = 0; | 
|  | E.Attrs = FunctionType::NoAttributeSet; | 
|  | (yyval.ArgList)->push_back(E); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 208: | 
|  | #line 2103 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.ArgList) = 0; | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 209: | 
|  | #line 2109 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | UnEscapeLexed((yyvsp[-6].StrVal)); | 
|  | std::string FunctionName((yyvsp[-6].StrVal)); | 
|  | free((yyvsp[-6].StrVal));  // Free strdup'd memory! | 
|  |  | 
|  | // Check the function result for abstractness if this is a define. We should | 
|  | // have no abstract types at this point | 
|  | if (!CurFun.isDeclare && CurModule.TypeIsUnresolved((yyvsp[-7].TypeVal))) | 
|  | GEN_ERROR("Reference to abstract result: "+ (yyvsp[-7].TypeVal)->get()->getDescription()); | 
|  |  | 
|  | std::vector<const Type*> ParamTypeList; | 
|  | std::vector<FunctionType::ParameterAttributes> ParamAttrs; | 
|  | ParamAttrs.push_back((yyvsp[-2].ParamAttrs)); | 
|  | if ((yyvsp[-4].ArgList)) {   // If there are arguments... | 
|  | for (ArgListType::iterator I = (yyvsp[-4].ArgList)->begin(); I != (yyvsp[-4].ArgList)->end(); ++I) { | 
|  | 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) | 
|  | ParamAttrs.push_back(I->Attrs); | 
|  | } | 
|  | } | 
|  |  | 
|  | bool isVarArg = ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy; | 
|  | if (isVarArg) ParamTypeList.pop_back(); | 
|  |  | 
|  | FunctionType *FT = FunctionType::get(*(yyvsp[-7].TypeVal), ParamTypeList, isVarArg, | 
|  | ParamAttrs); | 
|  | 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::ExternalLinkage, 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)); | 
|  | free((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 212: | 
|  | #line 2222 "/proj/llvm/llvm-1/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 215: | 
|  | #line 2233 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.FunctionVal) = (yyvsp[-1].FunctionVal); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 216: | 
|  | #line 2238 "/proj/llvm/llvm-1/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 217: | 
|  | #line 2250 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.BoolVal) = false; | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 218: | 
|  | #line 2254 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.BoolVal) = true; | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 219: | 
|  | #line 2259 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | {    // A reference to a direct constant | 
|  | (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val)); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 220: | 
|  | #line 2263 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val)); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 221: | 
|  | #line 2267 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | {                     // Perhaps it's an FP constant? | 
|  | (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal)); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 222: | 
|  | #line 2271 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.ValIDVal) = ValID::create(ConstantInt::getTrue()); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 223: | 
|  | #line 2275 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.ValIDVal) = ValID::create(ConstantInt::getFalse()); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 224: | 
|  | #line 2279 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.ValIDVal) = ValID::createNull(); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 225: | 
|  | #line 2283 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.ValIDVal) = ValID::createUndef(); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 226: | 
|  | #line 2287 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | {     // A vector zero constant. | 
|  | (yyval.ValIDVal) = ValID::createZeroInit(); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 227: | 
|  | #line 2291 "/proj/llvm/llvm-1/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 228: | 
|  | #line 2316 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal)); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 229: | 
|  | #line 2320 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | char *End = UnEscapeLexed((yyvsp[-2].StrVal), true); | 
|  | std::string AsmStr = std::string((yyvsp[-2].StrVal), End); | 
|  | End = UnEscapeLexed((yyvsp[0].StrVal), true); | 
|  | std::string Constraints = std::string((yyvsp[0].StrVal), End); | 
|  | (yyval.ValIDVal) = ValID::createInlineAsm(AsmStr, Constraints, (yyvsp[-3].BoolVal)); | 
|  | free((yyvsp[-2].StrVal)); | 
|  | free((yyvsp[0].StrVal)); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 230: | 
|  | #line 2334 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | {  // Is it an integer reference...? | 
|  | (yyval.ValIDVal) = ValID::createLocalID((yyvsp[0].UIntVal)); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 231: | 
|  | #line 2338 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.ValIDVal) = ValID::createGlobalID((yyvsp[0].UIntVal)); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 232: | 
|  | #line 2342 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | {                   // Is it a named reference...? | 
|  | (yyval.ValIDVal) = ValID::createLocalName((yyvsp[0].StrVal)); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 233: | 
|  | #line 2346 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | {                   // Is it a named reference...? | 
|  | (yyval.ValIDVal) = ValID::createGlobalName((yyvsp[0].StrVal)); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 236: | 
|  | #line 2358 "/proj/llvm/llvm-1/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 237: | 
|  | #line 2367 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.FunctionVal) = (yyvsp[-1].FunctionVal); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 238: | 
|  | #line 2371 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { // Do not allow functions with 0 basic blocks | 
|  | (yyval.FunctionVal) = (yyvsp[-1].FunctionVal); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 239: | 
|  | #line 2380 "/proj/llvm/llvm-1/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 240: | 
|  | #line 2389 "/proj/llvm/llvm-1/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 241: | 
|  | #line 2398 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | {          // Empty space between instruction lists | 
|  | (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalID(CurFun.NextValNum)); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 242: | 
|  | #line 2402 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | {             // Labelled (named) basic block | 
|  | (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalName((yyvsp[0].StrVal))); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 243: | 
|  | #line 2407 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | {              // Return with a result... | 
|  | (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal)); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 244: | 
|  | #line 2411 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | {                                    // Return with no result... | 
|  | (yyval.TermInstVal) = new ReturnInst(); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 245: | 
|  | #line 2415 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | {                           // Unconditional Branch... | 
|  | BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal)); | 
|  | CHECK_FOR_ERROR | 
|  | (yyval.TermInstVal) = new BranchInst(tmpBB); | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 246: | 
|  | #line 2420 "/proj/llvm/llvm-1/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 247: | 
|  | #line 2430 "/proj/llvm/llvm-1/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 248: | 
|  | #line 2449 "/proj/llvm/llvm-1/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 249: | 
|  | #line 2459 "/proj/llvm/llvm-1/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; | 
|  | FunctionType::ParamAttrsList ParamAttrs; | 
|  | ParamAttrs.push_back((yyvsp[-6].ParamAttrs)); | 
|  | for (ValueRefList::iterator I = (yyvsp[-8].ValueRefList)->begin(), E = (yyvsp[-8].ValueRefList)->end(); I != E; ++I) { | 
|  | const Type *Ty = I->Val->getType(); | 
|  | if (Ty == Type::VoidTy) | 
|  | GEN_ERROR("Short call syntax cannot be used with varargs"); | 
|  | ParamTypes.push_back(Ty); | 
|  | ParamAttrs.push_back(I->Attrs); | 
|  | } | 
|  |  | 
|  | Ty = FunctionType::get((yyvsp[-11].TypeVal)->get(), ParamTypes, false, ParamAttrs); | 
|  | PFTy = PointerType::get(Ty); | 
|  | } | 
|  |  | 
|  | 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[0], Args.size()); | 
|  | II->setCallingConv((yyvsp[-12].UIntVal)); | 
|  | (yyval.TermInstVal) = II; | 
|  | delete (yyvsp[-8].ValueRefList); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 250: | 
|  | #line 2525 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.TermInstVal) = new UnwindInst(); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 251: | 
|  | #line 2529 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.TermInstVal) = new UnreachableInst(); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 252: | 
|  | #line 2536 "/proj/llvm/llvm-1/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 253: | 
|  | #line 2547 "/proj/llvm/llvm-1/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 254: | 
|  | #line 2560 "/proj/llvm/llvm-1/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 255: | 
|  | #line 2570 "/proj/llvm/llvm-1/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 256: | 
|  | #line 2581 "/proj/llvm/llvm-1/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 257: | 
|  | #line 2591 "/proj/llvm/llvm-1/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); | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 258: | 
|  | #line 2599 "/proj/llvm/llvm-1/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); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 259: | 
|  | #line 2607 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.ValueRefList) = new ValueRefList(); ;} | 
|  | break; | 
|  |  | 
|  | case 260: | 
|  | #line 2610 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { (yyval.ValueList) = new std::vector<Value*>(); ;} | 
|  | break; | 
|  |  | 
|  | case 261: | 
|  | #line 2611 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.ValueList) = (yyvsp[-2].ValueList); | 
|  | (yyval.ValueList)->push_back((yyvsp[0].ValueVal)); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 262: | 
|  | #line 2618 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.BoolVal) = true; | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 263: | 
|  | #line 2622 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.BoolVal) = false; | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 264: | 
|  | #line 2627 "/proj/llvm/llvm-1/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 265: | 
|  | #line 2648 "/proj/llvm/llvm-1/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 266: | 
|  | #line 2665 "/proj/llvm/llvm-1/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"); | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 267: | 
|  | #line 2678 "/proj/llvm/llvm-1/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"); | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 268: | 
|  | #line 2691 "/proj/llvm/llvm-1/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 269: | 
|  | #line 2703 "/proj/llvm/llvm-1/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 270: | 
|  | #line 2711 "/proj/llvm/llvm-1/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 271: | 
|  | #line 2718 "/proj/llvm/llvm-1/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 272: | 
|  | #line 2724 "/proj/llvm/llvm-1/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 273: | 
|  | #line 2730 "/proj/llvm/llvm-1/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 274: | 
|  | #line 2736 "/proj/llvm/llvm-1/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 275: | 
|  | #line 2752 "/proj/llvm/llvm-1/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; | 
|  | FunctionType::ParamAttrsList ParamAttrs; | 
|  | ParamAttrs.push_back((yyvsp[0].ParamAttrs)); | 
|  | for (ValueRefList::iterator I = (yyvsp[-2].ValueRefList)->begin(), E = (yyvsp[-2].ValueRefList)->end(); I != E; ++I) { | 
|  | const Type *Ty = I->Val->getType(); | 
|  | if (Ty == Type::VoidTy) | 
|  | GEN_ERROR("Short call syntax cannot be used with varargs"); | 
|  | ParamTypes.push_back(Ty); | 
|  | ParamAttrs.push_back(I->Attrs); | 
|  | } | 
|  |  | 
|  | Ty = FunctionType::get((yyvsp[-5].TypeVal)->get(), ParamTypes, false, ParamAttrs); | 
|  | PFTy = PointerType::get(Ty); | 
|  | } | 
|  |  | 
|  | Value *V = getVal(PFTy, (yyvsp[-4].ValIDVal));   // Get the function we're calling... | 
|  | CHECK_FOR_ERROR | 
|  |  | 
|  | // 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[0], Args.size()); | 
|  | 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 276: | 
|  | #line 2815 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.InstVal) = (yyvsp[0].InstVal); | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 277: | 
|  | #line 2820 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.BoolVal) = true; | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 278: | 
|  | #line 2824 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | (yyval.BoolVal) = false; | 
|  | CHECK_FOR_ERROR | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 279: | 
|  | #line 2831 "/proj/llvm/llvm-1/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 280: | 
|  | #line 2838 "/proj/llvm/llvm-1/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 281: | 
|  | #line 2846 "/proj/llvm/llvm-1/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 282: | 
|  | #line 2853 "/proj/llvm/llvm-1/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 283: | 
|  | #line 2861 "/proj/llvm/llvm-1/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 284: | 
|  | #line 2869 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | if (!UpRefs.empty()) | 
|  | GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription()); | 
|  | if (!isa<PointerType>((yyvsp[-1].TypeVal)->get())) | 
|  | GEN_ERROR("Can't load from nonpointer type: " + | 
|  | (*(yyvsp[-1].TypeVal))->getDescription()); | 
|  | if (!cast<PointerType>((yyvsp[-1].TypeVal)->get())->getElementType()->isFirstClassType()) | 
|  | GEN_ERROR("Can't load from pointer of non-first-class type: " + | 
|  | (*(yyvsp[-1].TypeVal))->getDescription()); | 
|  | Value* tmpVal = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal)); | 
|  | CHECK_FOR_ERROR | 
|  | (yyval.InstVal) = new LoadInst(tmpVal, "", (yyvsp[-3].BoolVal)); | 
|  | delete (yyvsp[-1].TypeVal); | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 285: | 
|  | #line 2883 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" | 
|  | { | 
|  | if (!UpRefs.empty()) | 
|  | GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription()); | 
|  | const PointerType *PT = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get()); | 
|  | if (!PT) | 
|  | GEN_ERROR("Can't store to a nonpointer type: " + | 
|  | (*(yyvsp[-1].TypeVal))->getDescription()); | 
|  | const Type *ElTy = PT->getElementType(); | 
|  | if (ElTy != (yyvsp[-3].ValueVal)->getType()) | 
|  | GEN_ERROR("Can't store '" + (yyvsp[-3].ValueVal)->getType()->getDescription() + | 
|  | "' into space of type '" + ElTy->getDescription() + "'"); | 
|  |  | 
|  | Value* tmpVal = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal)); | 
|  | CHECK_FOR_ERROR | 
|  | (yyval.InstVal) = new StoreInst((yyvsp[-3].ValueVal), tmpVal, (yyvsp[-5].BoolVal)); | 
|  | delete (yyvsp[-1].TypeVal); | 
|  | ;} | 
|  | break; | 
|  |  | 
|  | case 286: | 
|  | #line 2900 "/proj/llvm/llvm-1/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))[0], (yyvsp[0].ValueList)->size(), true)) | 
|  | GEN_ERROR("Invalid getelementptr indices for type '" + | 
|  | (*(yyvsp[-2].TypeVal))->getDescription()+ "'"); | 
|  | Value* tmpVal = getVal(*(yyvsp[-2].TypeVal), (yyvsp[-1].ValIDVal)); | 
|  | CHECK_FOR_ERROR | 
|  | (yyval.InstVal) = new GetElementPtrInst(tmpVal, &(*(yyvsp[0].ValueList))[0], (yyvsp[0].ValueList)->size()); | 
|  | delete (yyvsp[-2].TypeVal); | 
|  | delete (yyvsp[0].ValueList); | 
|  | ;} | 
|  | break; | 
|  |  | 
|  |  | 
|  | default: break; | 
|  | } | 
|  |  | 
|  | /* Line 1126 of yacc.c.  */ | 
|  | #line 5637 "llvmAsmParser.tab.c" | 
|  |  | 
|  | yyvsp -= yylen; | 
|  | yyssp -= yylen; | 
|  |  | 
|  |  | 
|  | YY_STACK_PRINT (yyss, yyssp); | 
|  |  | 
|  | *++yyvsp = yyval; | 
|  |  | 
|  |  | 
|  | /* 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 - YYNTOKENS] + *yyssp; | 
|  | if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) | 
|  | yystate = yytable[yystate]; | 
|  | else | 
|  | yystate = yydefgoto[yyn - YYNTOKENS]; | 
|  |  | 
|  | goto yynewstate; | 
|  |  | 
|  |  | 
|  | /*------------------------------------. | 
|  | | yyerrlab -- here on detecting error | | 
|  | `------------------------------------*/ | 
|  | yyerrlab: | 
|  | /* If not already recovering from an error, report this error.  */ | 
|  | if (!yyerrstatus) | 
|  | { | 
|  | ++yynerrs; | 
|  | #if YYERROR_VERBOSE | 
|  | yyn = yypact[yystate]; | 
|  |  | 
|  | if (YYPACT_NINF < yyn && yyn < YYLAST) | 
|  | { | 
|  | int yytype = YYTRANSLATE (yychar); | 
|  | YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); | 
|  | YYSIZE_T yysize = yysize0; | 
|  | YYSIZE_T yysize1; | 
|  | int yysize_overflow = 0; | 
|  | char *yymsg = 0; | 
|  | #	  define YYERROR_VERBOSE_ARGS_MAXIMUM 5 | 
|  | char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; | 
|  | int yyx; | 
|  |  | 
|  | #if 0 | 
|  | /* This is so xgettext sees the translatable formats that are | 
|  | constructed on the fly.  */ | 
|  | YY_("syntax error, unexpected %s"); | 
|  | YY_("syntax error, unexpected %s, expecting %s"); | 
|  | YY_("syntax error, unexpected %s, expecting %s or %s"); | 
|  | YY_("syntax error, unexpected %s, expecting %s or %s or %s"); | 
|  | YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); | 
|  | #endif | 
|  | char *yyfmt; | 
|  | char const *yyf; | 
|  | static char const yyunexpected[] = "syntax error, unexpected %s"; | 
|  | static char const yyexpecting[] = ", expecting %s"; | 
|  | static char const yyor[] = " or %s"; | 
|  | char yyformat[sizeof yyunexpected | 
|  | + sizeof yyexpecting - 1 | 
|  | + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) | 
|  | * (sizeof yyor - 1))]; | 
|  | char const *yyprefix = yyexpecting; | 
|  |  | 
|  | /* Start YYX at -YYN if negative to avoid negative indexes in | 
|  | YYCHECK.  */ | 
|  | int yyxbegin = yyn < 0 ? -yyn : 0; | 
|  |  | 
|  | /* Stay within bounds of both yycheck and yytname.  */ | 
|  | int yychecklim = YYLAST - yyn; | 
|  | int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; | 
|  | int yycount = 1; | 
|  |  | 
|  | yyarg[0] = yytname[yytype]; | 
|  | yyfmt = yystpcpy (yyformat, yyunexpected); | 
|  |  | 
|  | for (yyx = yyxbegin; yyx < yyxend; ++yyx) | 
|  | if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) | 
|  | { | 
|  | if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) | 
|  | { | 
|  | yycount = 1; | 
|  | yysize = yysize0; | 
|  | yyformat[sizeof yyunexpected - 1] = '\0'; | 
|  | break; | 
|  | } | 
|  | yyarg[yycount++] = yytname[yyx]; | 
|  | yysize1 = yysize + yytnamerr (0, yytname[yyx]); | 
|  | yysize_overflow |= yysize1 < yysize; | 
|  | yysize = yysize1; | 
|  | yyfmt = yystpcpy (yyfmt, yyprefix); | 
|  | yyprefix = yyor; | 
|  | } | 
|  |  | 
|  | yyf = YY_(yyformat); | 
|  | yysize1 = yysize + yystrlen (yyf); | 
|  | yysize_overflow |= yysize1 < yysize; | 
|  | yysize = yysize1; | 
|  |  | 
|  | if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM) | 
|  | yymsg = (char *) YYSTACK_ALLOC (yysize); | 
|  | if (yymsg) | 
|  | { | 
|  | /* Avoid sprintf, as that infringes on the user's name space. | 
|  | Don't have undefined behavior even if the translation | 
|  | produced a string with the wrong number of "%s"s.  */ | 
|  | char *yyp = yymsg; | 
|  | int yyi = 0; | 
|  | while ((*yyp = *yyf)) | 
|  | { | 
|  | if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) | 
|  | { | 
|  | yyp += yytnamerr (yyp, yyarg[yyi++]); | 
|  | yyf += 2; | 
|  | } | 
|  | else | 
|  | { | 
|  | yyp++; | 
|  | yyf++; | 
|  | } | 
|  | } | 
|  | yyerror (yymsg); | 
|  | YYSTACK_FREE (yymsg); | 
|  | } | 
|  | else | 
|  | { | 
|  | yyerror (YY_("syntax error")); | 
|  | goto yyexhaustedlab; | 
|  | } | 
|  | } | 
|  | else | 
|  | #endif /* YYERROR_VERBOSE */ | 
|  | yyerror (YY_("syntax error")); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | if (yyerrstatus == 3) | 
|  | { | 
|  | /* If just tried and failed to reuse look-ahead token after an | 
|  | error, discard it.  */ | 
|  |  | 
|  | if (yychar <= YYEOF) | 
|  | { | 
|  | /* Return failure if at end of input.  */ | 
|  | if (yychar == YYEOF) | 
|  | YYABORT; | 
|  | } | 
|  | else | 
|  | { | 
|  | yydestruct ("Error: discarding", yytoken, &yylval); | 
|  | yychar = YYEMPTY; | 
|  | } | 
|  | } | 
|  |  | 
|  | /* Else will try to reuse look-ahead token after shifting the error | 
|  | token.  */ | 
|  | goto yyerrlab1; | 
|  |  | 
|  |  | 
|  | /*---------------------------------------------------. | 
|  | | yyerrorlab -- error raised explicitly by YYERROR.  | | 
|  | `---------------------------------------------------*/ | 
|  | yyerrorlab: | 
|  |  | 
|  | /* Pacify compilers like GCC when the user code never invokes | 
|  | YYERROR and the label yyerrorlab therefore never appears in user | 
|  | code.  */ | 
|  | if (0) | 
|  | goto yyerrorlab; | 
|  |  | 
|  | yyvsp -= yylen; | 
|  | yyssp -= yylen; | 
|  | yystate = *yyssp; | 
|  | goto yyerrlab1; | 
|  |  | 
|  |  | 
|  | /*-------------------------------------------------------------. | 
|  | | yyerrlab1 -- common code for both syntax error and YYERROR.  | | 
|  | `-------------------------------------------------------------*/ | 
|  | yyerrlab1: | 
|  | yyerrstatus = 3;	/* Each real token shifted decrements this.  */ | 
|  |  | 
|  | for (;;) | 
|  | { | 
|  | yyn = yypact[yystate]; | 
|  | if (yyn != YYPACT_NINF) | 
|  | { | 
|  | yyn += YYTERROR; | 
|  | if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) | 
|  | { | 
|  | yyn = yytable[yyn]; | 
|  | if (0 < yyn) | 
|  | break; | 
|  | } | 
|  | } | 
|  |  | 
|  | /* Pop the current state because it cannot handle the error token.  */ | 
|  | if (yyssp == yyss) | 
|  | YYABORT; | 
|  |  | 
|  |  | 
|  | yydestruct ("Error: popping", yystos[yystate], yyvsp); | 
|  | YYPOPSTACK; | 
|  | yystate = *yyssp; | 
|  | YY_STACK_PRINT (yyss, yyssp); | 
|  | } | 
|  |  | 
|  | if (yyn == YYFINAL) | 
|  | YYACCEPT; | 
|  |  | 
|  | *++yyvsp = yylval; | 
|  |  | 
|  |  | 
|  | /* Shift the error token. */ | 
|  | YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); | 
|  |  | 
|  | yystate = yyn; | 
|  | goto yynewstate; | 
|  |  | 
|  |  | 
|  | /*-------------------------------------. | 
|  | | yyacceptlab -- YYACCEPT comes here.  | | 
|  | `-------------------------------------*/ | 
|  | yyacceptlab: | 
|  | yyresult = 0; | 
|  | goto yyreturn; | 
|  |  | 
|  | /*-----------------------------------. | 
|  | | yyabortlab -- YYABORT comes here.  | | 
|  | `-----------------------------------*/ | 
|  | yyabortlab: | 
|  | yyresult = 1; | 
|  | goto yyreturn; | 
|  |  | 
|  | #ifndef yyoverflow | 
|  | /*-------------------------------------------------. | 
|  | | yyexhaustedlab -- memory exhaustion comes here.  | | 
|  | `-------------------------------------------------*/ | 
|  | yyexhaustedlab: | 
|  | yyerror (YY_("memory exhausted")); | 
|  | yyresult = 2; | 
|  | /* Fall through.  */ | 
|  | #endif | 
|  |  | 
|  | yyreturn: | 
|  | if (yychar != YYEOF && yychar != YYEMPTY) | 
|  | yydestruct ("Cleanup: discarding lookahead", | 
|  | yytoken, &yylval); | 
|  | while (yyssp != yyss) | 
|  | { | 
|  | yydestruct ("Cleanup: popping", | 
|  | yystos[*yyssp], yyvsp); | 
|  | YYPOPSTACK; | 
|  | } | 
|  | #ifndef yyoverflow | 
|  | if (yyss != yyssa) | 
|  | YYSTACK_FREE (yyss); | 
|  | #endif | 
|  | return yyresult; | 
|  | } | 
|  |  | 
|  |  | 
|  | #line 2917 "/proj/llvm/llvm-1/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; | 
|  | } | 
|  |  | 
|  | // 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; | 
|  | } | 
|  |  |