1 /* A Bison parser, made by GNU Bison 2.1. */
3 /* Skeleton parser for Yacc-like parsing with Bison,
4 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 Boston, MA 02110-1301, USA. */
21 /* As a special exception, when this file is copied by Bison into a
22 Bison output file, you may use that output file without restriction.
23 This special exception was added by the Free Software Foundation
24 in version 1.24 of Bison. */
26 /* Written by Richard Stallman by simplifying the original so called
27 ``semantic'' parser. */
29 /* All symbols defined below should begin with yy or YY, to avoid
30 infringing on user name space. This should be done even for local
31 variables, as they might otherwise be expanded by user macros.
32 There are some unavoidable exceptions within include files to
33 define necessary library symbols; they are noted "INFRINGES ON
34 USER NAME SPACE" below. */
36 /* Identify Bison output. */
40 #define YYBISON_VERSION "2.1"
43 #define YYSKELETON_NAME "yacc.c"
48 /* Using locations. */
49 #define YYLSP_NEEDED 0
51 /* Substitute the variable and function names. */
52 #define yyparse llvmAsmparse
53 #define yylex llvmAsmlex
54 #define yyerror llvmAsmerror
55 #define yylval llvmAsmlval
56 #define yychar llvmAsmchar
57 #define yydebug llvmAsmdebug
58 #define yynerrs llvmAsmnerrs
64 /* Put the tokens into the symbol table, so that GDB and other debuggers
84 ATSTRINGCONSTANT = 275,
86 ZEROINITIALIZER = 277,
123 X86_STDCALLCC_TOK = 314,
124 X86_FASTCALLCC_TOK = 315,
190 EXTRACTELEMENT = 381,
201 #define ESINT64VAL 258
202 #define EUINT64VAL 259
203 #define ESAPINTVAL 260
204 #define EUAPINTVAL 261
205 #define LOCALVAL_ID 262
206 #define GLOBALVAL_ID 263
215 #define GLOBALVAR 272
217 #define STRINGCONSTANT 274
218 #define ATSTRINGCONSTANT 275
219 #define IMPLEMENTATION 276
220 #define ZEROINITIALIZER 277
232 #define DOTDOTDOT 289
238 #define APPENDING 295
239 #define DLLIMPORT 296
240 #define DLLEXPORT 297
241 #define EXTERN_WEAK 298
252 #define SIDEEFFECT 309
255 #define FASTCC_TOK 312
256 #define COLDCC_TOK 313
257 #define X86_STDCALLCC_TOK 314
258 #define X86_FASTCALLCC_TOK 315
259 #define DATALAYOUT 316
265 #define UNREACHABLE 322
308 #define GETELEMENTPTR 365
324 #define EXTRACTELEMENT 381
325 #define INSERTELEMENT 382
326 #define SHUFFLEVECTOR 383
336 /* Copy the first part of user declarations. */
337 #line 14 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
339 #include "ParserInternals.h"
340 #include "llvm/CallingConv.h"
341 #include "llvm/InlineAsm.h"
342 #include "llvm/Instructions.h"
343 #include "llvm/Module.h"
344 #include "llvm/ValueSymbolTable.h"
345 #include "llvm/Support/GetElementPtrTypeIterator.h"
346 #include "llvm/Support/CommandLine.h"
347 #include "llvm/ADT/SmallVector.h"
348 #include "llvm/ADT/STLExtras.h"
349 #include "llvm/Support/MathExtras.h"
350 #include "llvm/Support/Streams.h"
359 // The following is a gross hack. In order to rid the libAsmParser library of
360 // exceptions, we have to have a way of getting the yyparse function to go into
361 // an error situation. So, whenever we want an error to occur, the GenerateError
362 // function (see bottom of file) sets TriggerError. Then, at the end of each
363 // production in the grammer we use CHECK_FOR_ERROR which will invoke YYERROR
364 // (a goto) to put YACC in error state. Furthermore, several calls to
365 // GenerateError are made from inside productions and they must simulate the
366 // previous exception behavior by exiting the production immediately. We have
367 // replaced these with the GEN_ERROR macro which calls GeneratError and then
368 // immediately invokes YYERROR. This would be so much cleaner if it was a
369 // recursive descent parser.
370 static bool TriggerError = false;
371 #define CHECK_FOR_ERROR { if (TriggerError) { TriggerError = false; YYABORT; } }
372 #define GEN_ERROR(msg) { GenerateError(msg); YYERROR; }
374 int yyerror(const char *ErrorMsg); // Forward declarations to prevent "implicit
375 int yylex(); // declaration" of xxx warnings.
379 std::string CurFilename;
382 Debug("debug-yacc", cl::desc("Print yacc debug state changes"),
383 cl::Hidden, cl::init(false));
386 using namespace llvm;
388 static Module *ParserResult;
390 // DEBUG_UPREFS - Define this symbol if you want to enable debugging output
391 // relating to upreferences in the input stream.
393 //#define DEBUG_UPREFS 1
395 #define UR_OUT(X) cerr << X
400 #define YYERROR_VERBOSE 1
402 static GlobalVariable *CurGV;
405 // This contains info used when building the body of a function. It is
406 // destroyed when the function is completed.
408 typedef std::vector<Value *> ValueList; // Numbered defs
411 ResolveDefinitions(ValueList &LateResolvers, ValueList *FutureLateResolvers=0);
413 static struct PerModuleInfo {
414 Module *CurrentModule;
415 ValueList Values; // Module level numbered definitions
416 ValueList LateResolveValues;
417 std::vector<PATypeHolder> Types;
418 std::map<ValID, PATypeHolder> LateResolveTypes;
420 /// PlaceHolderInfo - When temporary placeholder objects are created, remember
421 /// how they were referenced and on which line of the input they came from so
422 /// that we can resolve them later and print error messages as appropriate.
423 std::map<Value*, std::pair<ValID, int> > PlaceHolderInfo;
425 // GlobalRefs - This maintains a mapping between <Type, ValID>'s and forward
426 // references to global values. Global values may be referenced before they
427 // are defined, and if so, the temporary object that they represent is held
428 // here. This is used for forward references of GlobalValues.
430 typedef std::map<std::pair<const PointerType *,
431 ValID>, GlobalValue*> GlobalRefsType;
432 GlobalRefsType GlobalRefs;
435 // If we could not resolve some functions at function compilation time
436 // (calls to functions before they are defined), resolve them now... Types
437 // are resolved when the constant pool has been completely parsed.
439 ResolveDefinitions(LateResolveValues);
443 // Check to make sure that all global value forward references have been
446 if (!GlobalRefs.empty()) {
447 std::string UndefinedReferences = "Unresolved global references exist:\n";
449 for (GlobalRefsType::iterator I = GlobalRefs.begin(), E =GlobalRefs.end();
451 UndefinedReferences += " " + I->first.first->getDescription() + " " +
452 I->first.second.getName() + "\n";
454 GenerateError(UndefinedReferences);
458 Values.clear(); // Clear out function local definitions
463 // GetForwardRefForGlobal - Check to see if there is a forward reference
464 // for this global. If so, remove it from the GlobalRefs map and return it.
465 // If not, just return null.
466 GlobalValue *GetForwardRefForGlobal(const PointerType *PTy, ValID ID) {
467 // Check to see if there is a forward reference to this global variable...
468 // if there is, eliminate it and patch the reference to use the new def'n.
469 GlobalRefsType::iterator I = GlobalRefs.find(std::make_pair(PTy, ID));
470 GlobalValue *Ret = 0;
471 if (I != GlobalRefs.end()) {
478 bool TypeIsUnresolved(PATypeHolder* PATy) {
479 // If it isn't abstract, its resolved
480 const Type* Ty = PATy->get();
481 if (!Ty->isAbstract())
483 // Traverse the type looking for abstract types. If it isn't abstract then
484 // we don't need to traverse that leg of the type.
485 std::vector<const Type*> WorkList, SeenList;
486 WorkList.push_back(Ty);
487 while (!WorkList.empty()) {
488 const Type* Ty = WorkList.back();
489 SeenList.push_back(Ty);
491 if (const OpaqueType* OpTy = dyn_cast<OpaqueType>(Ty)) {
492 // Check to see if this is an unresolved type
493 std::map<ValID, PATypeHolder>::iterator I = LateResolveTypes.begin();
494 std::map<ValID, PATypeHolder>::iterator E = LateResolveTypes.end();
495 for ( ; I != E; ++I) {
496 if (I->second.get() == OpTy)
499 } else if (const SequentialType* SeqTy = dyn_cast<SequentialType>(Ty)) {
500 const Type* TheTy = SeqTy->getElementType();
501 if (TheTy->isAbstract() && TheTy != Ty) {
502 std::vector<const Type*>::iterator I = SeenList.begin(),
508 WorkList.push_back(TheTy);
510 } else if (const StructType* StrTy = dyn_cast<StructType>(Ty)) {
511 for (unsigned i = 0; i < StrTy->getNumElements(); ++i) {
512 const Type* TheTy = StrTy->getElementType(i);
513 if (TheTy->isAbstract() && TheTy != Ty) {
514 std::vector<const Type*>::iterator I = SeenList.begin(),
520 WorkList.push_back(TheTy);
531 static struct PerFunctionInfo {
532 Function *CurrentFunction; // Pointer to current function being created
534 ValueList Values; // Keep track of #'d definitions
536 ValueList LateResolveValues;
537 bool isDeclare; // Is this function a forward declararation?
538 GlobalValue::LinkageTypes Linkage; // Linkage for forward declaration.
539 GlobalValue::VisibilityTypes Visibility;
541 /// BBForwardRefs - When we see forward references to basic blocks, keep
542 /// track of them here.
543 std::map<ValID, BasicBlock*> BBForwardRefs;
545 inline PerFunctionInfo() {
548 Linkage = GlobalValue::ExternalLinkage;
549 Visibility = GlobalValue::DefaultVisibility;
552 inline void FunctionStart(Function *M) {
557 void FunctionDone() {
558 // Any forward referenced blocks left?
559 if (!BBForwardRefs.empty()) {
560 GenerateError("Undefined reference to label " +
561 BBForwardRefs.begin()->second->getName());
565 // Resolve all forward references now.
566 ResolveDefinitions(LateResolveValues, &CurModule.LateResolveValues);
568 Values.clear(); // Clear out function local definitions
569 BBForwardRefs.clear();
572 Linkage = GlobalValue::ExternalLinkage;
573 Visibility = GlobalValue::DefaultVisibility;
575 } CurFun; // Info for the current function...
577 static bool inFunctionScope() { return CurFun.CurrentFunction != 0; }
580 //===----------------------------------------------------------------------===//
581 // Code to handle definitions of all the types
582 //===----------------------------------------------------------------------===//
584 static void InsertValue(Value *V, ValueList &ValueTab = CurFun.Values) {
585 // Things that have names or are void typed don't get slot numbers
586 if (V->hasName() || (V->getType() == Type::VoidTy))
589 // In the case of function values, we have to allow for the forward reference
590 // of basic blocks, which are included in the numbering. Consequently, we keep
591 // track of the next insertion location with NextValNum. When a BB gets
592 // inserted, it could change the size of the CurFun.Values vector.
593 if (&ValueTab == &CurFun.Values) {
594 if (ValueTab.size() <= CurFun.NextValNum)
595 ValueTab.resize(CurFun.NextValNum+1);
596 ValueTab[CurFun.NextValNum++] = V;
599 // For all other lists, its okay to just tack it on the back of the vector.
600 ValueTab.push_back(V);
603 static const Type *getTypeVal(const ValID &D, bool DoNotImprovise = false) {
605 case ValID::LocalID: // Is it a numbered definition?
606 // Module constants occupy the lowest numbered slots...
607 if (D.Num < CurModule.Types.size())
608 return CurModule.Types[D.Num];
610 case ValID::LocalName: // Is it a named definition?
611 if (const Type *N = CurModule.CurrentModule->getTypeByName(D.Name)) {
612 D.destroy(); // Free old strdup'd memory...
617 GenerateError("Internal parser error: Invalid symbol type reference");
621 // If we reached here, we referenced either a symbol that we don't know about
622 // or an id number that hasn't been read yet. We may be referencing something
623 // forward, so just create an entry to be resolved later and get to it...
625 if (DoNotImprovise) return 0; // Do we just want a null to be returned?
628 if (inFunctionScope()) {
629 if (D.Type == ValID::LocalName) {
630 GenerateError("Reference to an undefined type: '" + D.getName() + "'");
633 GenerateError("Reference to an undefined type: #" + utostr(D.Num));
638 std::map<ValID, PATypeHolder>::iterator I =CurModule.LateResolveTypes.find(D);
639 if (I != CurModule.LateResolveTypes.end())
642 Type *Typ = OpaqueType::get();
643 CurModule.LateResolveTypes.insert(std::make_pair(D, Typ));
647 // getExistingVal - Look up the value specified by the provided type and
648 // the provided ValID. If the value exists and has already been defined, return
649 // it. Otherwise return null.
651 static Value *getExistingVal(const Type *Ty, const ValID &D) {
652 if (isa<FunctionType>(Ty)) {
653 GenerateError("Functions are not values and "
654 "must be referenced as pointers");
659 case ValID::LocalID: { // Is it a numbered definition?
660 // Check that the number is within bounds.
661 if (D.Num >= CurFun.Values.size())
663 Value *Result = CurFun.Values[D.Num];
664 if (Ty != Result->getType()) {
665 GenerateError("Numbered value (%" + utostr(D.Num) + ") of type '" +
666 Result->getType()->getDescription() + "' does not match "
667 "expected type, '" + Ty->getDescription() + "'");
672 case ValID::GlobalID: { // Is it a numbered definition?
673 if (D.Num >= CurModule.Values.size())
675 Value *Result = CurModule.Values[D.Num];
676 if (Ty != Result->getType()) {
677 GenerateError("Numbered value (@" + utostr(D.Num) + ") of type '" +
678 Result->getType()->getDescription() + "' does not match "
679 "expected type, '" + Ty->getDescription() + "'");
685 case ValID::LocalName: { // Is it a named definition?
686 if (!inFunctionScope())
688 ValueSymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable();
689 Value *N = SymTab.lookup(D.Name);
692 if (N->getType() != Ty)
695 D.destroy(); // Free old strdup'd memory...
698 case ValID::GlobalName: { // Is it a named definition?
699 ValueSymbolTable &SymTab = CurModule.CurrentModule->getValueSymbolTable();
700 Value *N = SymTab.lookup(D.Name);
703 if (N->getType() != Ty)
706 D.destroy(); // Free old strdup'd memory...
710 // Check to make sure that "Ty" is an integral type, and that our
711 // value will fit into the specified type...
712 case ValID::ConstSIntVal: // Is it a constant pool reference??
713 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
714 GenerateError("Signed integral constant '" +
715 itostr(D.ConstPool64) + "' is invalid for type '" +
716 Ty->getDescription() + "'");
719 return ConstantInt::get(Ty, D.ConstPool64, true);
721 case ValID::ConstUIntVal: // Is it an unsigned const pool reference?
722 if (!ConstantInt::isValueValidForType(Ty, D.UConstPool64)) {
723 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
724 GenerateError("Integral constant '" + utostr(D.UConstPool64) +
725 "' is invalid or out of range");
727 } else { // This is really a signed reference. Transmogrify.
728 return ConstantInt::get(Ty, D.ConstPool64, true);
731 return ConstantInt::get(Ty, D.UConstPool64);
734 case ValID::ConstFPVal: // Is it a floating point const pool reference?
735 if (!ConstantFP::isValueValidForType(Ty, D.ConstPoolFP)) {
736 GenerateError("FP constant invalid for type");
739 return ConstantFP::get(Ty, D.ConstPoolFP);
741 case ValID::ConstNullVal: // Is it a null value?
742 if (!isa<PointerType>(Ty)) {
743 GenerateError("Cannot create a a non pointer null");
746 return ConstantPointerNull::get(cast<PointerType>(Ty));
748 case ValID::ConstUndefVal: // Is it an undef value?
749 return UndefValue::get(Ty);
751 case ValID::ConstZeroVal: // Is it a zero value?
752 return Constant::getNullValue(Ty);
754 case ValID::ConstantVal: // Fully resolved constant?
755 if (D.ConstantValue->getType() != Ty) {
756 GenerateError("Constant expression type different from required type");
759 return D.ConstantValue;
761 case ValID::InlineAsmVal: { // Inline asm expression
762 const PointerType *PTy = dyn_cast<PointerType>(Ty);
763 const FunctionType *FTy =
764 PTy ? dyn_cast<FunctionType>(PTy->getElementType()) : 0;
765 if (!FTy || !InlineAsm::Verify(FTy, D.IAD->Constraints)) {
766 GenerateError("Invalid type for asm constraint string");
769 InlineAsm *IA = InlineAsm::get(FTy, D.IAD->AsmString, D.IAD->Constraints,
770 D.IAD->HasSideEffects);
771 D.destroy(); // Free InlineAsmDescriptor.
775 assert(0 && "Unhandled case!");
779 assert(0 && "Unhandled case!");
783 // getVal - This function is identical to getExistingVal, except that if a
784 // value is not already defined, it "improvises" by creating a placeholder var
785 // that looks and acts just like the requested variable. When the value is
786 // defined later, all uses of the placeholder variable are replaced with the
789 static Value *getVal(const Type *Ty, const ValID &ID) {
790 if (Ty == Type::LabelTy) {
791 GenerateError("Cannot use a basic block here");
795 // See if the value has already been defined.
796 Value *V = getExistingVal(Ty, ID);
798 if (TriggerError) return 0;
800 if (!Ty->isFirstClassType() && !isa<OpaqueType>(Ty)) {
801 GenerateError("Invalid use of a composite type");
805 // If we reached here, we referenced either a symbol that we don't know about
806 // or an id number that hasn't been read yet. We may be referencing something
807 // forward, so just create an entry to be resolved later and get to it...
809 V = new Argument(Ty);
811 // Remember where this forward reference came from. FIXME, shouldn't we try
812 // to recycle these things??
813 CurModule.PlaceHolderInfo.insert(std::make_pair(V, std::make_pair(ID,
816 if (inFunctionScope())
817 InsertValue(V, CurFun.LateResolveValues);
819 InsertValue(V, CurModule.LateResolveValues);
823 /// defineBBVal - This is a definition of a new basic block with the specified
824 /// identifier which must be the same as CurFun.NextValNum, if its numeric.
825 static BasicBlock *defineBBVal(const ValID &ID) {
826 assert(inFunctionScope() && "Can't get basic block at global scope!");
830 // First, see if this was forward referenced
832 std::map<ValID, BasicBlock*>::iterator BBI = CurFun.BBForwardRefs.find(ID);
833 if (BBI != CurFun.BBForwardRefs.end()) {
835 // The forward declaration could have been inserted anywhere in the
836 // function: insert it into the correct place now.
837 CurFun.CurrentFunction->getBasicBlockList().remove(BB);
838 CurFun.CurrentFunction->getBasicBlockList().push_back(BB);
840 // We're about to erase the entry, save the key so we can clean it up.
841 ValID Tmp = BBI->first;
843 // Erase the forward ref from the map as its no longer "forward"
844 CurFun.BBForwardRefs.erase(ID);
846 // The key has been removed from the map but so we don't want to leave
847 // strdup'd memory around so destroy it too.
850 // If its a numbered definition, bump the number and set the BB value.
851 if (ID.Type == ValID::LocalID) {
852 assert(ID.Num == CurFun.NextValNum && "Invalid new block number");
860 // We haven't seen this BB before and its first mention is a definition.
861 // Just create it and return it.
862 std::string Name (ID.Type == ValID::LocalName ? ID.Name : "");
863 BB = new BasicBlock(Name, CurFun.CurrentFunction);
864 if (ID.Type == ValID::LocalID) {
865 assert(ID.Num == CurFun.NextValNum && "Invalid new block number");
869 ID.destroy(); // Free strdup'd memory
873 /// getBBVal - get an existing BB value or create a forward reference for it.
875 static BasicBlock *getBBVal(const ValID &ID) {
876 assert(inFunctionScope() && "Can't get basic block at global scope!");
880 std::map<ValID, BasicBlock*>::iterator BBI = CurFun.BBForwardRefs.find(ID);
881 if (BBI != CurFun.BBForwardRefs.end()) {
883 } if (ID.Type == ValID::LocalName) {
884 std::string Name = ID.Name;
885 Value *N = CurFun.CurrentFunction->getValueSymbolTable().lookup(Name);
887 if (N->getType()->getTypeID() == Type::LabelTyID)
888 BB = cast<BasicBlock>(N);
890 GenerateError("Reference to label '" + Name + "' is actually of type '"+
891 N->getType()->getDescription() + "'");
892 } else if (ID.Type == ValID::LocalID) {
893 if (ID.Num < CurFun.NextValNum && ID.Num < CurFun.Values.size()) {
894 if (CurFun.Values[ID.Num]->getType()->getTypeID() == Type::LabelTyID)
895 BB = cast<BasicBlock>(CurFun.Values[ID.Num]);
897 GenerateError("Reference to label '%" + utostr(ID.Num) +
898 "' is actually of type '"+
899 CurFun.Values[ID.Num]->getType()->getDescription() + "'");
902 GenerateError("Illegal label reference " + ID.getName());
906 // If its already been defined, return it now.
908 ID.destroy(); // Free strdup'd memory.
912 // Otherwise, this block has not been seen before, create it.
914 if (ID.Type == ValID::LocalName)
916 BB = new BasicBlock(Name, CurFun.CurrentFunction);
918 // Insert it in the forward refs map.
919 CurFun.BBForwardRefs[ID] = BB;
925 //===----------------------------------------------------------------------===//
926 // Code to handle forward references in instructions
927 //===----------------------------------------------------------------------===//
929 // This code handles the late binding needed with statements that reference
930 // values not defined yet... for example, a forward branch, or the PHI node for
933 // This keeps a table (CurFun.LateResolveValues) of all such forward references
934 // and back patchs after we are done.
937 // ResolveDefinitions - If we could not resolve some defs at parsing
938 // time (forward branches, phi functions for loops, etc...) resolve the
942 ResolveDefinitions(ValueList &LateResolvers, ValueList *FutureLateResolvers) {
943 // Loop over LateResolveDefs fixing up stuff that couldn't be resolved
944 while (!LateResolvers.empty()) {
945 Value *V = LateResolvers.back();
946 LateResolvers.pop_back();
948 std::map<Value*, std::pair<ValID, int> >::iterator PHI =
949 CurModule.PlaceHolderInfo.find(V);
950 assert(PHI != CurModule.PlaceHolderInfo.end() && "Placeholder error!");
952 ValID &DID = PHI->second.first;
954 Value *TheRealValue = getExistingVal(V->getType(), DID);
958 V->replaceAllUsesWith(TheRealValue);
960 CurModule.PlaceHolderInfo.erase(PHI);
961 } else if (FutureLateResolvers) {
962 // Functions have their unresolved items forwarded to the module late
964 InsertValue(V, *FutureLateResolvers);
966 if (DID.Type == ValID::LocalName || DID.Type == ValID::GlobalName) {
967 GenerateError("Reference to an invalid definition: '" +DID.getName()+
968 "' of type '" + V->getType()->getDescription() + "'",
972 GenerateError("Reference to an invalid definition: #" +
973 itostr(DID.Num) + " of type '" +
974 V->getType()->getDescription() + "'",
980 LateResolvers.clear();
983 // ResolveTypeTo - A brand new type was just declared. This means that (if
984 // name is not null) things referencing Name can be resolved. Otherwise, things
985 // refering to the number can be resolved. Do this now.
987 static void ResolveTypeTo(char *Name, const Type *ToTy) {
989 if (Name) D = ValID::createLocalName(Name);
990 else D = ValID::createLocalID(CurModule.Types.size());
992 std::map<ValID, PATypeHolder>::iterator I =
993 CurModule.LateResolveTypes.find(D);
994 if (I != CurModule.LateResolveTypes.end()) {
995 ((DerivedType*)I->second.get())->refineAbstractTypeTo(ToTy);
996 CurModule.LateResolveTypes.erase(I);
1000 // setValueName - Set the specified value to the name given. The name may be
1001 // null potentially, in which case this is a noop. The string passed in is
1002 // assumed to be a malloc'd string buffer, and is free'd by this function.
1004 static void setValueName(Value *V, char *NameStr) {
1005 if (!NameStr) return;
1006 std::string Name(NameStr); // Copy string
1007 free(NameStr); // Free old string
1009 if (V->getType() == Type::VoidTy) {
1010 GenerateError("Can't assign name '" + Name+"' to value with void type");
1014 assert(inFunctionScope() && "Must be in function scope!");
1015 ValueSymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable();
1016 if (ST.lookup(Name)) {
1017 GenerateError("Redefinition of value '" + Name + "' of type '" +
1018 V->getType()->getDescription() + "'");
1026 /// ParseGlobalVariable - Handle parsing of a global. If Initializer is null,
1027 /// this is a declaration, otherwise it is a definition.
1028 static GlobalVariable *
1029 ParseGlobalVariable(char *NameStr,
1030 GlobalValue::LinkageTypes Linkage,
1031 GlobalValue::VisibilityTypes Visibility,
1032 bool isConstantGlobal, const Type *Ty,
1033 Constant *Initializer) {
1034 if (isa<FunctionType>(Ty)) {
1035 GenerateError("Cannot declare global vars of function type");
1039 const PointerType *PTy = PointerType::get(Ty);
1043 Name = NameStr; // Copy string
1044 free(NameStr); // Free old string
1047 // See if this global value was forward referenced. If so, recycle the
1050 if (!Name.empty()) {
1051 ID = ValID::createGlobalName((char*)Name.c_str());
1053 ID = ValID::createGlobalID(CurModule.Values.size());
1056 if (GlobalValue *FWGV = CurModule.GetForwardRefForGlobal(PTy, ID)) {
1057 // Move the global to the end of the list, from whereever it was
1058 // previously inserted.
1059 GlobalVariable *GV = cast<GlobalVariable>(FWGV);
1060 CurModule.CurrentModule->getGlobalList().remove(GV);
1061 CurModule.CurrentModule->getGlobalList().push_back(GV);
1062 GV->setInitializer(Initializer);
1063 GV->setLinkage(Linkage);
1064 GV->setVisibility(Visibility);
1065 GV->setConstant(isConstantGlobal);
1066 InsertValue(GV, CurModule.Values);
1070 // If this global has a name
1071 if (!Name.empty()) {
1072 // if the global we're parsing has an initializer (is a definition) and
1073 // has external linkage.
1074 if (Initializer && Linkage != GlobalValue::InternalLinkage)
1075 // If there is already a global with external linkage with this name
1076 if (CurModule.CurrentModule->getGlobalVariable(Name, false)) {
1077 // If we allow this GVar to get created, it will be renamed in the
1078 // symbol table because it conflicts with an existing GVar. We can't
1079 // allow redefinition of GVars whose linking indicates that their name
1080 // must stay the same. Issue the error.
1081 GenerateError("Redefinition of global variable named '" + Name +
1082 "' of type '" + Ty->getDescription() + "'");
1087 // Otherwise there is no existing GV to use, create one now.
1088 GlobalVariable *GV =
1089 new GlobalVariable(Ty, isConstantGlobal, Linkage, Initializer, Name,
1090 CurModule.CurrentModule);
1091 GV->setVisibility(Visibility);
1092 InsertValue(GV, CurModule.Values);
1096 // setTypeName - Set the specified type to the name given. The name may be
1097 // null potentially, in which case this is a noop. The string passed in is
1098 // assumed to be a malloc'd string buffer, and is freed by this function.
1100 // This function returns true if the type has already been defined, but is
1101 // allowed to be redefined in the specified context. If the name is a new name
1102 // for the type plane, it is inserted and false is returned.
1103 static bool setTypeName(const Type *T, char *NameStr) {
1104 assert(!inFunctionScope() && "Can't give types function-local names!");
1105 if (NameStr == 0) return false;
1107 std::string Name(NameStr); // Copy string
1108 free(NameStr); // Free old string
1110 // We don't allow assigning names to void type
1111 if (T == Type::VoidTy) {
1112 GenerateError("Can't assign name '" + Name + "' to the void type");
1116 // Set the type name, checking for conflicts as we do so.
1117 bool AlreadyExists = CurModule.CurrentModule->addTypeName(Name, T);
1119 if (AlreadyExists) { // Inserting a name that is already defined???
1120 const Type *Existing = CurModule.CurrentModule->getTypeByName(Name);
1121 assert(Existing && "Conflict but no matching type?!");
1123 // There is only one case where this is allowed: when we are refining an
1124 // opaque type. In this case, Existing will be an opaque type.
1125 if (const OpaqueType *OpTy = dyn_cast<OpaqueType>(Existing)) {
1126 // We ARE replacing an opaque type!
1127 const_cast<OpaqueType*>(OpTy)->refineAbstractTypeTo(T);
1131 // Otherwise, this is an attempt to redefine a type. That's okay if
1132 // the redefinition is identical to the original. This will be so if
1133 // Existing and T point to the same Type object. In this one case we
1134 // allow the equivalent redefinition.
1135 if (Existing == T) return true; // Yes, it's equal.
1137 // Any other kind of (non-equivalent) redefinition is an error.
1138 GenerateError("Redefinition of type named '" + Name + "' of type '" +
1139 T->getDescription() + "'");
1145 //===----------------------------------------------------------------------===//
1146 // Code for handling upreferences in type names...
1149 // TypeContains - Returns true if Ty directly contains E in it.
1151 static bool TypeContains(const Type *Ty, const Type *E) {
1152 return std::find(Ty->subtype_begin(), Ty->subtype_end(),
1153 E) != Ty->subtype_end();
1157 struct UpRefRecord {
1158 // NestingLevel - The number of nesting levels that need to be popped before
1159 // this type is resolved.
1160 unsigned NestingLevel;
1162 // LastContainedTy - This is the type at the current binding level for the
1163 // type. Every time we reduce the nesting level, this gets updated.
1164 const Type *LastContainedTy;
1166 // UpRefTy - This is the actual opaque type that the upreference is
1167 // represented with.
1168 OpaqueType *UpRefTy;
1170 UpRefRecord(unsigned NL, OpaqueType *URTy)
1171 : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) {}
1175 // UpRefs - A list of the outstanding upreferences that need to be resolved.
1176 static std::vector<UpRefRecord> UpRefs;
1178 /// HandleUpRefs - Every time we finish a new layer of types, this function is
1179 /// called. It loops through the UpRefs vector, which is a list of the
1180 /// currently active types. For each type, if the up reference is contained in
1181 /// the newly completed type, we decrement the level count. When the level
1182 /// count reaches zero, the upreferenced type is the type that is passed in:
1183 /// thus we can complete the cycle.
1185 static PATypeHolder HandleUpRefs(const Type *ty) {
1186 // If Ty isn't abstract, or if there are no up-references in it, then there is
1187 // nothing to resolve here.
1188 if (!ty->isAbstract() || UpRefs.empty()) return ty;
1190 PATypeHolder Ty(ty);
1191 UR_OUT("Type '" << Ty->getDescription() <<
1192 "' newly formed. Resolving upreferences.\n" <<
1193 UpRefs.size() << " upreferences active!\n");
1195 // If we find any resolvable upreferences (i.e., those whose NestingLevel goes
1196 // to zero), we resolve them all together before we resolve them to Ty. At
1197 // the end of the loop, if there is anything to resolve to Ty, it will be in
1199 OpaqueType *TypeToResolve = 0;
1201 for (unsigned i = 0; i != UpRefs.size(); ++i) {
1202 UR_OUT(" UR#" << i << " - TypeContains(" << Ty->getDescription() << ", "
1203 << UpRefs[i].second->getDescription() << ") = "
1204 << (TypeContains(Ty, UpRefs[i].second) ? "true" : "false") << "\n");
1205 if (TypeContains(Ty, UpRefs[i].LastContainedTy)) {
1206 // Decrement level of upreference
1207 unsigned Level = --UpRefs[i].NestingLevel;
1208 UpRefs[i].LastContainedTy = Ty;
1209 UR_OUT(" Uplevel Ref Level = " << Level << "\n");
1210 if (Level == 0) { // Upreference should be resolved!
1211 if (!TypeToResolve) {
1212 TypeToResolve = UpRefs[i].UpRefTy;
1214 UR_OUT(" * Resolving upreference for "
1215 << UpRefs[i].second->getDescription() << "\n";
1216 std::string OldName = UpRefs[i].UpRefTy->getDescription());
1217 UpRefs[i].UpRefTy->refineAbstractTypeTo(TypeToResolve);
1218 UR_OUT(" * Type '" << OldName << "' refined upreference to: "
1219 << (const void*)Ty << ", " << Ty->getDescription() << "\n");
1221 UpRefs.erase(UpRefs.begin()+i); // Remove from upreference list...
1222 --i; // Do not skip the next element...
1227 if (TypeToResolve) {
1228 UR_OUT(" * Resolving upreference for "
1229 << UpRefs[i].second->getDescription() << "\n";
1230 std::string OldName = TypeToResolve->getDescription());
1231 TypeToResolve->refineAbstractTypeTo(Ty);
1237 //===----------------------------------------------------------------------===//
1238 // RunVMAsmParser - Define an interface to this parser
1239 //===----------------------------------------------------------------------===//
1241 static Module* RunParser(Module * M);
1243 Module *llvm::RunVMAsmParser(const std::string &Filename, FILE *F) {
1246 CurFilename = Filename;
1247 return RunParser(new Module(CurFilename));
1250 Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) {
1251 set_scan_string(AsmString);
1253 CurFilename = "from_memory";
1255 return RunParser(new Module (CurFilename));
1257 return RunParser(M);
1263 /* Enabling traces. */
1268 /* Enabling verbose error messages. */
1269 #ifdef YYERROR_VERBOSE
1270 # undef YYERROR_VERBOSE
1271 # define YYERROR_VERBOSE 1
1273 # define YYERROR_VERBOSE 0
1276 /* Enabling the token table. */
1277 #ifndef YYTOKEN_TABLE
1278 # define YYTOKEN_TABLE 0
1281 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
1282 #line 939 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
1283 typedef union YYSTYPE {
1284 llvm::Module *ModuleVal;
1285 llvm::Function *FunctionVal;
1286 llvm::BasicBlock *BasicBlockVal;
1287 llvm::TerminatorInst *TermInstVal;
1288 llvm::Instruction *InstVal;
1289 llvm::Constant *ConstVal;
1291 const llvm::Type *PrimType;
1292 std::list<llvm::PATypeHolder> *TypeList;
1293 llvm::PATypeHolder *TypeVal;
1294 llvm::Value *ValueVal;
1295 std::vector<llvm::Value*> *ValueList;
1296 llvm::ArgListType *ArgList;
1297 llvm::TypeWithAttrs TypeWithAttrs;
1298 llvm::TypeWithAttrsList *TypeWithAttrsList;
1299 llvm::ValueRefList *ValueRefList;
1301 // Represent the RHS of PHI node
1302 std::list<std::pair<llvm::Value*,
1303 llvm::BasicBlock*> > *PHIList;
1304 std::vector<std::pair<llvm::Constant*, llvm::BasicBlock*> > *JumpTable;
1305 std::vector<llvm::Constant*> *ConstVector;
1307 llvm::GlobalValue::LinkageTypes Linkage;
1308 llvm::GlobalValue::VisibilityTypes Visibility;
1309 llvm::FunctionType::ParameterAttributes ParamAttrs;
1310 llvm::APInt *APIntVal;
1318 char *StrVal; // This memory is strdup'd!
1319 llvm::ValID ValIDVal; // strdup'd memory maybe!
1321 llvm::Instruction::BinaryOps BinaryOpVal;
1322 llvm::Instruction::TermOps TermOpVal;
1323 llvm::Instruction::MemoryOps MemOpVal;
1324 llvm::Instruction::CastOps CastOpVal;
1325 llvm::Instruction::OtherOps OtherOpVal;
1326 llvm::ICmpInst::Predicate IPredicate;
1327 llvm::FCmpInst::Predicate FPredicate;
1329 /* Line 196 of yacc.c. */
1330 #line 1331 "llvmAsmParser.tab.c"
1331 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
1332 # define YYSTYPE_IS_DECLARED 1
1333 # define YYSTYPE_IS_TRIVIAL 1
1338 /* Copy the second part of user declarations. */
1341 /* Line 219 of yacc.c. */
1342 #line 1343 "llvmAsmParser.tab.c"
1344 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
1345 # define YYSIZE_T __SIZE_TYPE__
1347 #if ! defined (YYSIZE_T) && defined (size_t)
1348 # define YYSIZE_T size_t
1350 #if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus))
1351 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1352 # define YYSIZE_T size_t
1354 #if ! defined (YYSIZE_T)
1355 # define YYSIZE_T unsigned int
1361 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
1362 # define YY_(msgid) dgettext ("bison-runtime", msgid)
1366 # define YY_(msgid) msgid
1370 #if ! defined (yyoverflow) || YYERROR_VERBOSE
1372 /* The parser invokes alloca or malloc; define the necessary symbols. */
1374 # ifdef YYSTACK_USE_ALLOCA
1375 # if YYSTACK_USE_ALLOCA
1377 # define YYSTACK_ALLOC __builtin_alloca
1379 # define YYSTACK_ALLOC alloca
1380 # if defined (__STDC__) || defined (__cplusplus)
1381 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1382 # define YYINCLUDED_STDLIB_H
1388 # ifdef YYSTACK_ALLOC
1389 /* Pacify GCC's `empty if-body' warning. */
1390 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
1391 # ifndef YYSTACK_ALLOC_MAXIMUM
1392 /* The OS might guarantee only one guard page at the bottom of the stack,
1393 and a page size can be as small as 4096 bytes. So we cannot safely
1394 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
1395 to allow for a few compiler-allocated temporary stack slots. */
1396 # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */
1399 # define YYSTACK_ALLOC YYMALLOC
1400 # define YYSTACK_FREE YYFREE
1401 # ifndef YYSTACK_ALLOC_MAXIMUM
1402 # define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1)
1408 # define YYMALLOC malloc
1409 # if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \
1410 && (defined (__STDC__) || defined (__cplusplus)))
1411 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1415 # define YYFREE free
1416 # if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \
1417 && (defined (__STDC__) || defined (__cplusplus)))
1418 void free (void *); /* INFRINGES ON USER NAME SPACE */
1425 #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
1428 #if (! defined (yyoverflow) \
1429 && (! defined (__cplusplus) \
1430 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
1432 /* A type that is properly aligned for any stack member. */
1439 /* The size of the maximum gap between one aligned stack and the next. */
1440 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
1442 /* The size of an array large to enough to hold all stacks, each with
1444 # define YYSTACK_BYTES(N) \
1445 ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \
1446 + YYSTACK_GAP_MAXIMUM)
1448 /* Copy COUNT objects from FROM to TO. The source and destination do
1451 # if defined (__GNUC__) && 1 < __GNUC__
1452 # define YYCOPY(To, From, Count) \
1453 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
1455 # define YYCOPY(To, From, Count) \
1459 for (yyi = 0; yyi < (Count); yyi++) \
1460 (To)[yyi] = (From)[yyi]; \
1466 /* Relocate STACK from its old location to the new one. The
1467 local variables YYSIZE and YYSTACKSIZE give the old and new number of
1468 elements in the stack, and YYPTR gives the new location of the
1469 stack. Advance YYPTR to a properly aligned location for the next
1471 # define YYSTACK_RELOCATE(Stack) \
1474 YYSIZE_T yynewbytes; \
1475 YYCOPY (&yyptr->Stack, Stack, yysize); \
1476 Stack = &yyptr->Stack; \
1477 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
1478 yyptr += yynewbytes / sizeof (*yyptr); \
1484 #if defined (__STDC__) || defined (__cplusplus)
1485 typedef signed char yysigned_char;
1487 typedef short int yysigned_char;
1490 /* YYFINAL -- State number of the termination state. */
1492 /* YYLAST -- Last index in YYTABLE. */
1495 /* YYNTOKENS -- Number of terminals. */
1496 #define YYNTOKENS 148
1497 /* YYNNTS -- Number of nonterminals. */
1499 /* YYNRULES -- Number of rules. */
1500 #define YYNRULES 286
1501 /* YYNRULES -- Number of states. */
1502 #define YYNSTATES 559
1504 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
1505 #define YYUNDEFTOK 2
1506 #define YYMAXUTOK 388
1508 #define YYTRANSLATE(YYX) \
1509 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
1511 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
1512 static const unsigned char yytranslate[] =
1514 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1515 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1516 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1517 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1518 138, 139, 136, 2, 135, 2, 2, 2, 2, 2,
1519 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1520 143, 134, 144, 2, 2, 2, 2, 2, 2, 2,
1521 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1522 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1523 2, 140, 137, 142, 2, 2, 2, 2, 2, 147,
1524 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1525 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1526 141, 2, 2, 145, 2, 146, 2, 2, 2, 2,
1527 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1528 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1529 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1530 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1531 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1532 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1533 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1534 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1535 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1536 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1537 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1538 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1539 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
1540 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1541 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1542 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1543 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1544 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
1545 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1546 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
1547 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
1548 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
1549 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
1550 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
1551 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
1552 125, 126, 127, 128, 129, 130, 131, 132, 133
1556 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
1558 static const unsigned short int yyprhs[] =
1560 0, 0, 3, 5, 7, 9, 11, 13, 15, 17,
1561 19, 21, 23, 25, 27, 29, 31, 33, 35, 37,
1562 39, 41, 43, 45, 47, 49, 51, 53, 55, 57,
1563 59, 61, 63, 65, 67, 69, 71, 73, 75, 77,
1564 79, 81, 83, 85, 87, 89, 91, 93, 95, 97,
1565 99, 101, 103, 105, 107, 109, 111, 113, 115, 117,
1566 119, 121, 122, 125, 126, 128, 130, 133, 134, 136,
1567 138, 140, 142, 144, 146, 148, 150, 151, 153, 154,
1568 156, 158, 159, 161, 163, 165, 167, 168, 170, 172,
1569 174, 176, 178, 181, 183, 185, 187, 189, 190, 193,
1570 195, 197, 198, 201, 202, 205, 206, 210, 213, 214,
1571 216, 217, 221, 223, 226, 228, 230, 232, 234, 236,
1572 238, 241, 243, 246, 252, 258, 264, 270, 274, 277,
1573 283, 288, 291, 293, 295, 297, 301, 303, 307, 309,
1574 310, 312, 316, 321, 325, 329, 334, 339, 343, 350,
1575 356, 359, 362, 365, 368, 371, 374, 377, 380, 383,
1576 386, 389, 392, 399, 405, 414, 421, 428, 436, 444,
1577 451, 460, 469, 473, 475, 477, 479, 481, 482, 484,
1578 487, 488, 492, 493, 497, 501, 503, 507, 511, 512,
1579 519, 520, 528, 529, 537, 540, 544, 546, 550, 554,
1580 558, 562, 564, 565, 571, 575, 577, 581, 583, 584,
1581 594, 596, 598, 603, 605, 607, 610, 614, 615, 617,
1582 619, 621, 623, 625, 627, 629, 631, 633, 637, 639,
1583 645, 647, 649, 651, 653, 655, 657, 660, 663, 666,
1584 670, 673, 674, 676, 679, 682, 686, 696, 706, 715,
1585 730, 732, 734, 741, 747, 750, 757, 765, 769, 775,
1586 776, 777, 781, 784, 786, 792, 798, 805, 812, 817,
1587 824, 829, 834, 841, 848, 851, 860, 862, 864, 865,
1588 869, 876, 880, 887, 890, 895, 902
1591 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
1592 static const short int yyrhs[] =
1594 188, 0, -1, 68, -1, 69, -1, 70, -1, 71,
1595 -1, 72, -1, 73, -1, 74, -1, 75, -1, 76,
1596 -1, 80, -1, 81, -1, 82, -1, 77, -1, 78,
1597 -1, 79, -1, 111, -1, 112, -1, 113, -1, 114,
1598 -1, 115, -1, 116, -1, 117, -1, 118, -1, 119,
1599 -1, 120, -1, 121, -1, 122, -1, 85, -1, 86,
1600 -1, 87, -1, 88, -1, 89, -1, 90, -1, 91,
1601 -1, 92, -1, 93, -1, 94, -1, 95, -1, 96,
1602 -1, 97, -1, 98, -1, 99, -1, 100, -1, 101,
1603 -1, 102, -1, 103, -1, 104, -1, 91, -1, 92,
1604 -1, 93, -1, 94, -1, 23, -1, 24, -1, 11,
1605 -1, 12, -1, 13, -1, 16, -1, 19, -1, 156,
1606 -1, -1, 156, 134, -1, -1, 17, -1, 20, -1,
1607 159, 134, -1, -1, 37, -1, 39, -1, 38, -1,
1608 40, -1, 42, -1, 41, -1, 43, -1, 45, -1,
1609 -1, 133, -1, -1, 41, -1, 43, -1, -1, 37,
1610 -1, 38, -1, 39, -1, 42, -1, -1, 56, -1,
1611 57, -1, 58, -1, 59, -1, 60, -1, 55, 4,
1612 -1, 112, -1, 113, -1, 130, -1, 131, -1, -1,
1613 168, 167, -1, 129, -1, 167, -1, -1, 170, 169,
1614 -1, -1, 48, 4, -1, -1, 135, 48, 4, -1,
1615 31, 19, -1, -1, 173, -1, -1, 135, 176, 175,
1616 -1, 173, -1, 48, 4, -1, 11, -1, 12, -1,
1617 13, -1, 14, -1, 44, -1, 177, -1, 178, 136,
1618 -1, 210, -1, 137, 4, -1, 178, 138, 182, 139,
1619 170, -1, 10, 138, 182, 139, 170, -1, 140, 4,
1620 141, 178, 142, -1, 143, 4, 141, 178, 144, -1,
1621 145, 183, 146, -1, 145, 146, -1, 143, 145, 183,
1622 146, 144, -1, 143, 145, 146, 144, -1, 178, 168,
1623 -1, 178, -1, 10, -1, 179, -1, 181, 135, 179,
1624 -1, 181, -1, 181, 135, 34, -1, 34, -1, -1,
1625 178, -1, 183, 135, 178, -1, 178, 140, 186, 142,
1626 -1, 178, 140, 142, -1, 178, 147, 19, -1, 178,
1627 143, 186, 144, -1, 178, 145, 186, 146, -1, 178,
1628 145, 146, -1, 178, 143, 145, 186, 146, 144, -1,
1629 178, 143, 145, 146, 144, -1, 178, 35, -1, 178,
1630 36, -1, 178, 210, -1, 178, 185, -1, 178, 22,
1631 -1, 154, 3, -1, 154, 5, -1, 154, 4, -1,
1632 154, 6, -1, 11, 23, -1, 11, 24, -1, 155,
1633 9, -1, 151, 138, 184, 33, 178, 139, -1, 110,
1634 138, 184, 221, 139, -1, 124, 138, 184, 135, 184,
1635 135, 184, 139, -1, 149, 138, 184, 135, 184, 139,
1636 -1, 150, 138, 184, 135, 184, 139, -1, 83, 152,
1637 138, 184, 135, 184, 139, -1, 84, 153, 138, 184,
1638 135, 184, 139, -1, 126, 138, 184, 135, 184, 139,
1639 -1, 127, 138, 184, 135, 184, 135, 184, 139, -1,
1640 128, 138, 184, 135, 184, 135, 184, 139, -1, 186,
1641 135, 184, -1, 184, -1, 29, -1, 30, -1, 189,
1642 -1, -1, 190, -1, 189, 190, -1, -1, 28, 191,
1643 206, -1, -1, 27, 192, 207, -1, 53, 52, 196,
1644 -1, 21, -1, 158, 15, 178, -1, 158, 15, 10,
1645 -1, -1, 160, 163, 187, 184, 193, 175, -1, -1,
1646 160, 161, 163, 187, 184, 194, 175, -1, -1, 160,
1647 162, 163, 187, 178, 195, 175, -1, 46, 197, -1,
1648 49, 134, 198, -1, 19, -1, 47, 134, 19, -1,
1649 61, 134, 19, -1, 140, 199, 142, -1, 199, 135,
1650 19, -1, 19, -1, -1, 200, 135, 178, 168, 157,
1651 -1, 178, 168, 157, -1, 200, -1, 200, 135, 34,
1652 -1, 34, -1, -1, 166, 180, 159, 138, 201, 139,
1653 170, 174, 171, -1, 25, -1, 145, -1, 165, 163,
1654 202, 203, -1, 26, -1, 146, -1, 213, 205, -1,
1655 164, 163, 202, -1, -1, 54, -1, 3, -1, 4,
1656 -1, 9, -1, 23, -1, 24, -1, 35, -1, 36,
1657 -1, 22, -1, 143, 186, 144, -1, 185, -1, 52,
1658 208, 19, 135, 19, -1, 7, -1, 8, -1, 156,
1659 -1, 159, -1, 210, -1, 209, -1, 178, 211, -1,
1660 213, 214, -1, 204, 214, -1, 215, 158, 216, -1,
1661 215, 218, -1, -1, 18, -1, 62, 212, -1, 62,
1662 10, -1, 63, 14, 211, -1, 63, 11, 211, 135,
1663 14, 211, 135, 14, 211, -1, 64, 154, 211, 135,
1664 14, 211, 140, 217, 142, -1, 64, 154, 211, 135,
1665 14, 211, 140, 142, -1, 65, 166, 180, 211, 138,
1666 220, 139, 170, 33, 14, 211, 66, 14, 211, -1,
1667 66, -1, 67, -1, 217, 154, 209, 135, 14, 211,
1668 -1, 154, 209, 135, 14, 211, -1, 158, 223, -1,
1669 178, 140, 211, 135, 211, 142, -1, 219, 135, 140,
1670 211, 135, 211, 142, -1, 178, 211, 168, -1, 220,
1671 135, 178, 211, 168, -1, -1, -1, 221, 135, 212,
1672 -1, 51, 50, -1, 50, -1, 149, 178, 211, 135,
1673 211, -1, 150, 178, 211, 135, 211, -1, 83, 152,
1674 178, 211, 135, 211, -1, 84, 153, 178, 211, 135,
1675 211, -1, 151, 212, 33, 178, -1, 124, 212, 135,
1676 212, 135, 212, -1, 125, 212, 135, 178, -1, 126,
1677 212, 135, 212, -1, 127, 212, 135, 212, 135, 212,
1678 -1, 128, 212, 135, 212, 135, 212, -1, 123, 219,
1679 -1, 222, 166, 180, 211, 138, 220, 139, 170, -1,
1680 225, -1, 32, -1, -1, 105, 178, 172, -1, 105,
1681 178, 135, 11, 211, 172, -1, 106, 178, 172, -1,
1682 106, 178, 135, 11, 211, 172, -1, 107, 212, -1,
1683 224, 108, 178, 211, -1, 224, 109, 212, 135, 178,
1684 211, -1, 110, 178, 211, 221, -1
1687 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
1688 static const unsigned short int yyrline[] =
1690 0, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
1691 1093, 1094, 1094, 1094, 1094, 1094, 1094, 1095, 1095, 1095,
1692 1095, 1095, 1095, 1096, 1096, 1096, 1096, 1096, 1096, 1099,
1693 1099, 1100, 1100, 1101, 1101, 1102, 1102, 1103, 1103, 1107,
1694 1107, 1108, 1108, 1109, 1109, 1110, 1110, 1111, 1111, 1112,
1695 1112, 1113, 1113, 1114, 1115, 1120, 1121, 1121, 1123, 1123,
1696 1124, 1124, 1128, 1132, 1137, 1137, 1139, 1143, 1149, 1150,
1697 1151, 1152, 1153, 1157, 1158, 1159, 1163, 1164, 1168, 1169,
1698 1170, 1174, 1175, 1176, 1177, 1178, 1181, 1182, 1183, 1184,
1699 1185, 1186, 1187, 1194, 1195, 1196, 1197, 1200, 1201, 1206,
1700 1207, 1210, 1211, 1218, 1219, 1225, 1226, 1234, 1242, 1243,
1701 1248, 1249, 1250, 1255, 1268, 1268, 1268, 1268, 1271, 1275,
1702 1279, 1286, 1291, 1299, 1318, 1337, 1342, 1354, 1364, 1368,
1703 1378, 1385, 1392, 1399, 1404, 1409, 1416, 1417, 1424, 1431,
1704 1439, 1445, 1457, 1485, 1501, 1530, 1558, 1583, 1602, 1628,
1705 1648, 1660, 1667, 1733, 1743, 1753, 1759, 1769, 1775, 1785,
1706 1790, 1795, 1803, 1815, 1837, 1845, 1851, 1862, 1867, 1872,
1707 1878, 1884, 1893, 1897, 1905, 1905, 1916, 1921, 1929, 1930,
1708 1934, 1934, 1938, 1938, 1941, 1944, 1956, 1980, 1991, 1991,
1709 2001, 2001, 2009, 2009, 2019, 2022, 2028, 2041, 2045, 2050,
1710 2052, 2057, 2062, 2071, 2081, 2092, 2096, 2105, 2114, 2119,
1711 2231, 2231, 2233, 2242, 2242, 2244, 2249, 2261, 2265, 2270,
1712 2274, 2278, 2282, 2286, 2290, 2294, 2298, 2302, 2327, 2331,
1713 2345, 2349, 2353, 2357, 2363, 2363, 2369, 2378, 2382, 2391,
1714 2400, 2409, 2413, 2418, 2422, 2426, 2431, 2441, 2460, 2469,
1715 2538, 2542, 2549, 2560, 2573, 2583, 2594, 2604, 2613, 2622,
1716 2625, 2626, 2633, 2637, 2642, 2663, 2680, 2694, 2708, 2720,
1717 2728, 2735, 2741, 2747, 2753, 2768, 2832, 2837, 2841, 2848,
1718 2855, 2863, 2870, 2878, 2886, 2900, 2917
1722 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
1723 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1724 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
1725 static const char *const yytname[] =
1727 "$end", "error", "$undefined", "ESINT64VAL", "EUINT64VAL", "ESAPINTVAL",
1728 "EUAPINTVAL", "LOCALVAL_ID", "GLOBALVAL_ID", "FPVAL", "VOID", "INTTYPE",
1729 "FLOAT", "DOUBLE", "LABEL", "TYPE", "LOCALVAR", "GLOBALVAR", "LABELSTR",
1730 "STRINGCONSTANT", "ATSTRINGCONSTANT", "IMPLEMENTATION",
1731 "ZEROINITIALIZER", "TRUETOK", "FALSETOK", "BEGINTOK", "ENDTOK",
1732 "DECLARE", "DEFINE", "GLOBAL", "CONSTANT", "SECTION", "VOLATILE", "TO",
1733 "DOTDOTDOT", "NULL_TOK", "UNDEF", "INTERNAL", "LINKONCE", "WEAK",
1734 "APPENDING", "DLLIMPORT", "DLLEXPORT", "EXTERN_WEAK", "OPAQUE",
1735 "EXTERNAL", "TARGET", "TRIPLE", "ALIGN", "DEPLIBS", "CALL", "TAIL",
1736 "ASM_TOK", "MODULE", "SIDEEFFECT", "CC_TOK", "CCC_TOK", "FASTCC_TOK",
1737 "COLDCC_TOK", "X86_STDCALLCC_TOK", "X86_FASTCALLCC_TOK", "DATALAYOUT",
1738 "RET", "BR", "SWITCH", "INVOKE", "UNWIND", "UNREACHABLE", "ADD", "SUB",
1739 "MUL", "UDIV", "SDIV", "FDIV", "UREM", "SREM", "FREM", "AND", "OR",
1740 "XOR", "SHL", "LSHR", "ASHR", "ICMP", "FCMP", "EQ", "NE", "SLT", "SGT",
1741 "SLE", "SGE", "ULT", "UGT", "ULE", "UGE", "OEQ", "ONE", "OLT", "OGT",
1742 "OLE", "OGE", "ORD", "UNO", "UEQ", "UNE", "MALLOC", "ALLOCA", "FREE",
1743 "LOAD", "STORE", "GETELEMENTPTR", "TRUNC", "ZEXT", "SEXT", "FPTRUNC",
1744 "FPEXT", "BITCAST", "UITOFP", "SITOFP", "FPTOUI", "FPTOSI", "INTTOPTR",
1745 "PTRTOINT", "PHI_TOK", "SELECT", "VAARG", "EXTRACTELEMENT",
1746 "INSERTELEMENT", "SHUFFLEVECTOR", "NORETURN", "INREG", "SRET", "DEFAULT",
1747 "HIDDEN", "'='", "','", "'*'", "'\\\\'", "'('", "')'", "'['", "'x'",
1748 "']'", "'<'", "'>'", "'{'", "'}'", "'c'", "$accept", "ArithmeticOps",
1749 "LogicalOps", "CastOps", "IPredicates", "FPredicates", "IntType",
1750 "FPType", "LocalName", "OptLocalName", "OptLocalAssign", "GlobalName",
1751 "OptGlobalAssign", "GVInternalLinkage", "GVExternalLinkage",
1752 "GVVisibilityStyle", "FunctionDeclareLinkage", "FunctionDefineLinkage",
1753 "OptCallingConv", "ParamAttr", "OptParamAttrs", "FuncAttr",
1754 "OptFuncAttrs", "OptAlign", "OptCAlign", "SectionString", "OptSection",
1755 "GlobalVarAttributes", "GlobalVarAttribute", "PrimType", "Types",
1756 "ArgType", "ResultTypes", "ArgTypeList", "ArgTypeListI", "TypeListI",
1757 "ConstVal", "ConstExpr", "ConstVector", "GlobalType", "Module",
1758 "DefinitionList", "Definition", "@1", "@2", "@3", "@4", "@5", "AsmBlock",
1759 "TargetDefinition", "LibrariesDefinition", "LibList", "ArgListH",
1760 "ArgList", "FunctionHeaderH", "BEGIN", "FunctionHeader", "END",
1761 "Function", "FunctionProto", "OptSideEffect", "ConstValueRef",
1762 "SymbolicValueRef", "ValueRef", "ResolvedVal", "BasicBlockList",
1763 "BasicBlock", "InstructionList", "BBTerminatorInst", "JumpTable", "Inst",
1764 "PHIList", "ValueRefList", "IndexList", "OptTailCall", "InstVal",
1765 "OptVolatile", "MemoryInst", 0
1770 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
1772 static const unsigned short int yytoknum[] =
1774 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
1775 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
1776 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
1777 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
1778 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
1779 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
1780 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
1781 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
1782 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
1783 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
1784 355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
1785 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
1786 375, 376, 377, 378, 379, 380, 381, 382, 383, 384,
1787 385, 386, 387, 388, 61, 44, 42, 92, 40, 41,
1788 91, 120, 93, 60, 62, 123, 125, 99
1792 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
1793 static const unsigned char yyr1[] =
1795 0, 148, 149, 149, 149, 149, 149, 149, 149, 149,
1796 149, 150, 150, 150, 150, 150, 150, 151, 151, 151,
1797 151, 151, 151, 151, 151, 151, 151, 151, 151, 152,
1798 152, 152, 152, 152, 152, 152, 152, 152, 152, 153,
1799 153, 153, 153, 153, 153, 153, 153, 153, 153, 153,
1800 153, 153, 153, 153, 153, 154, 155, 155, 156, 156,
1801 157, 157, 158, 158, 159, 159, 160, 160, 161, 161,
1802 161, 161, 161, 162, 162, 162, 163, 163, 164, 164,
1803 164, 165, 165, 165, 165, 165, 166, 166, 166, 166,
1804 166, 166, 166, 167, 167, 167, 167, 168, 168, 169,
1805 169, 170, 170, 171, 171, 172, 172, 173, 174, 174,
1806 175, 175, 176, 176, 177, 177, 177, 177, 178, 178,
1807 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
1808 178, 179, 180, 180, 181, 181, 182, 182, 182, 182,
1809 183, 183, 184, 184, 184, 184, 184, 184, 184, 184,
1810 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
1811 184, 184, 185, 185, 185, 185, 185, 185, 185, 185,
1812 185, 185, 186, 186, 187, 187, 188, 188, 189, 189,
1813 191, 190, 192, 190, 190, 190, 190, 190, 193, 190,
1814 194, 190, 195, 190, 190, 190, 196, 197, 197, 198,
1815 199, 199, 199, 200, 200, 201, 201, 201, 201, 202,
1816 203, 203, 204, 205, 205, 206, 207, 208, 208, 209,
1817 209, 209, 209, 209, 209, 209, 209, 209, 209, 209,
1818 210, 210, 210, 210, 211, 211, 212, 213, 213, 214,
1819 215, 215, 215, 216, 216, 216, 216, 216, 216, 216,
1820 216, 216, 217, 217, 218, 219, 219, 220, 220, 220,
1821 221, 221, 222, 222, 223, 223, 223, 223, 223, 223,
1822 223, 223, 223, 223, 223, 223, 223, 224, 224, 225,
1823 225, 225, 225, 225, 225, 225, 225
1826 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
1827 static const unsigned char yyr2[] =
1829 0, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1830 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1831 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1832 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1833 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1834 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1835 1, 0, 2, 0, 1, 1, 2, 0, 1, 1,
1836 1, 1, 1, 1, 1, 1, 0, 1, 0, 1,
1837 1, 0, 1, 1, 1, 1, 0, 1, 1, 1,
1838 1, 1, 2, 1, 1, 1, 1, 0, 2, 1,
1839 1, 0, 2, 0, 2, 0, 3, 2, 0, 1,
1840 0, 3, 1, 2, 1, 1, 1, 1, 1, 1,
1841 2, 1, 2, 5, 5, 5, 5, 3, 2, 5,
1842 4, 2, 1, 1, 1, 3, 1, 3, 1, 0,
1843 1, 3, 4, 3, 3, 4, 4, 3, 6, 5,
1844 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1845 2, 2, 6, 5, 8, 6, 6, 7, 7, 6,
1846 8, 8, 3, 1, 1, 1, 1, 0, 1, 2,
1847 0, 3, 0, 3, 3, 1, 3, 3, 0, 6,
1848 0, 7, 0, 7, 2, 3, 1, 3, 3, 3,
1849 3, 1, 0, 5, 3, 1, 3, 1, 0, 9,
1850 1, 1, 4, 1, 1, 2, 3, 0, 1, 1,
1851 1, 1, 1, 1, 1, 1, 1, 3, 1, 5,
1852 1, 1, 1, 1, 1, 1, 2, 2, 2, 3,
1853 2, 0, 1, 2, 2, 3, 9, 9, 8, 14,
1854 1, 1, 6, 5, 2, 6, 7, 3, 5, 0,
1855 0, 3, 2, 1, 5, 5, 6, 6, 4, 6,
1856 4, 4, 6, 6, 2, 8, 1, 1, 0, 3,
1860 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
1861 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
1862 means the default is an error. */
1863 static const unsigned short int yydefact[] =
1865 67, 58, 64, 59, 65, 185, 182, 180, 0, 0,
1866 0, 0, 0, 0, 76, 0, 67, 178, 78, 81,
1867 0, 0, 194, 0, 0, 62, 0, 66, 68, 70,
1868 69, 71, 73, 72, 74, 75, 77, 76, 76, 0,
1869 1, 179, 79, 80, 76, 183, 82, 83, 84, 85,
1870 76, 241, 181, 241, 0, 0, 202, 195, 196, 184,
1871 230, 231, 187, 114, 115, 116, 117, 118, 0, 0,
1872 0, 0, 232, 233, 119, 186, 121, 0, 0, 174,
1873 175, 0, 86, 86, 242, 238, 63, 213, 214, 215,
1874 237, 197, 198, 201, 0, 139, 122, 0, 0, 0,
1875 0, 128, 140, 0, 120, 139, 0, 0, 114, 115,
1876 116, 0, 0, 0, 188, 0, 87, 88, 89, 90,
1877 91, 0, 216, 0, 278, 240, 0, 199, 138, 97,
1878 134, 136, 0, 0, 0, 0, 0, 0, 127, 0,
1879 190, 192, 159, 160, 155, 157, 156, 158, 161, 154,
1880 150, 151, 2, 3, 4, 5, 6, 7, 8, 9,
1881 10, 14, 15, 16, 11, 12, 13, 0, 0, 0,
1882 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
1883 27, 28, 0, 0, 0, 0, 0, 0, 0, 0,
1884 0, 0, 0, 153, 152, 110, 92, 133, 132, 0,
1885 210, 211, 212, 277, 263, 0, 0, 0, 0, 86,
1886 250, 251, 0, 0, 0, 0, 0, 0, 0, 0,
1887 0, 0, 0, 0, 0, 0, 0, 239, 86, 254,
1888 0, 276, 200, 131, 0, 101, 0, 0, 130, 0,
1889 141, 101, 110, 110, 29, 30, 31, 32, 33, 34,
1890 35, 36, 37, 38, 0, 53, 54, 49, 50, 51,
1891 52, 39, 40, 41, 42, 43, 44, 45, 46, 47,
1892 48, 0, 0, 0, 0, 0, 0, 143, 173, 0,
1893 0, 0, 147, 0, 144, 0, 0, 0, 0, 189,
1894 0, 262, 244, 0, 243, 0, 0, 55, 0, 0,
1895 0, 0, 105, 105, 283, 0, 0, 274, 0, 0,
1896 0, 0, 0, 0, 0, 0, 0, 0, 0, 93,
1897 94, 95, 96, 98, 137, 135, 124, 125, 126, 129,
1898 123, 191, 193, 0, 0, 260, 0, 0, 0, 0,
1899 0, 142, 128, 140, 0, 145, 146, 0, 0, 0,
1900 0, 0, 112, 110, 208, 219, 220, 221, 226, 222,
1901 223, 224, 225, 217, 0, 228, 235, 234, 236, 0,
1902 245, 0, 0, 0, 0, 0, 279, 0, 281, 260,
1903 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1904 0, 0, 0, 99, 100, 102, 0, 0, 0, 0,
1905 0, 0, 0, 172, 149, 0, 0, 0, 0, 107,
1906 113, 111, 207, 97, 205, 0, 218, 0, 0, 0,
1907 0, 0, 0, 0, 0, 0, 0, 286, 0, 0,
1908 0, 270, 271, 0, 0, 0, 0, 268, 0, 284,
1909 0, 0, 0, 0, 163, 0, 0, 0, 0, 148,
1910 0, 0, 0, 61, 0, 101, 0, 227, 0, 0,
1911 259, 0, 0, 105, 106, 105, 0, 0, 0, 0,
1912 0, 264, 265, 259, 0, 0, 0, 261, 0, 169,
1913 0, 0, 165, 166, 162, 60, 204, 206, 97, 108,
1914 0, 0, 0, 0, 0, 266, 267, 0, 280, 282,
1915 0, 0, 269, 272, 273, 0, 285, 167, 168, 0,
1916 0, 0, 61, 109, 103, 229, 0, 0, 97, 0,
1917 101, 255, 0, 101, 164, 170, 171, 203, 0, 209,
1918 0, 248, 0, 0, 257, 0, 0, 256, 275, 104,
1919 246, 0, 247, 0, 97, 0, 0, 0, 258, 0,
1920 0, 0, 0, 253, 0, 0, 252, 0, 249
1923 /* YYDEFGOTO[NTERM-NUM]. */
1924 static const short int yydefgoto[] =
1926 -1, 190, 191, 192, 254, 271, 111, 112, 72, 486,
1927 12, 73, 14, 37, 38, 39, 44, 50, 121, 323,
1928 233, 395, 326, 529, 376, 352, 514, 289, 353, 74,
1929 113, 130, 199, 131, 132, 103, 278, 365, 279, 81,
1930 15, 16, 17, 19, 18, 195, 242, 243, 59, 22,
1931 57, 94, 414, 415, 122, 202, 51, 89, 52, 45,
1932 417, 366, 76, 368, 294, 53, 85, 86, 227, 533,
1933 125, 307, 494, 398, 228, 229, 230, 231
1936 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1938 #define YYPACT_NINF -440
1939 static const short int yypact[] =
1941 406, -440, -440, -440, -440, -440, -440, -440, -2, -101,
1942 21, -55, 80, -20, 15, 132, 556, -440, 253, 197,
1943 -7, 87, -440, 20, 207, -440, 893, -440, -440, -440,
1944 -440, -440, -440, -440, -440, -440, -440, 97, 97, 125,
1945 -440, -440, -440, -440, 97, -440, -440, -440, -440, -440,
1946 97, 235, -440, 6, 240, 248, 258, -440, -440, -440,
1947 -440, -440, 134, -440, -440, -440, -440, -440, 269, 277,
1948 11, 123, -440, -440, -440, 33, -440, 125, 125, -440,
1949 -440, 1055, 128, 128, -440, -440, 47, -440, -440, -440,
1950 -440, -440, -440, -440, -57, 939, -440, 154, 156, 488,
1951 134, -440, 33, -112, -440, 939, 1055, 1149, 38, 281,
1952 289, 239, 293, 850, -440, 299, -440, -440, -440, -440,
1953 -440, 1168, -440, 2, 1301, -440, 285, -440, -440, 33,
1954 -440, 170, 167, 1149, 1149, 164, -97, 1149, -440, 171,
1955 -440, 33, -440, -440, -440, -440, -440, -440, -440, -440,
1956 -440, -440, -440, -440, -440, -440, -440, -440, -440, -440,
1957 -440, -440, -440, -440, -440, -440, -440, 254, 446, 174,
1958 -440, -440, -440, -440, -440, -440, -440, -440, -440, -440,
1959 -440, -440, 175, 176, 177, 178, 109, 1203, 676, 290,
1960 181, 182, 183, -440, -440, 187, -440, 134, 33, 93,
1961 -440, -440, -440, -440, -440, 273, 1217, 127, 313, 128,
1962 -440, -440, 254, 446, 1149, 1149, 1149, 1149, 1149, 1149,
1963 1149, 1149, 1149, 1149, 1149, 1149, 1149, -440, 128, -440,
1964 70, -440, -440, -29, 1098, -440, 72, -39, -440, 184,
1965 33, -440, 187, 187, -440, -440, -440, -440, -440, -440,
1966 -440, -440, -440, -440, 188, -440, -440, -440, -440, -440,
1967 -440, -440, -440, -440, -440, -440, -440, -440, -440, -440,
1968 -440, 196, 1055, 1055, 1055, 1055, 1055, -440, -440, 22,
1969 771, -44, -440, -59, -440, 1055, 1055, 1055, -9, -440,
1970 198, -440, 134, 591, -440, 728, 728, -440, 728, 1168,
1971 1149, 1149, 112, 147, -440, 591, 75, 190, 200, 214,
1972 215, 217, 219, 591, 591, 322, 1168, 1149, 1149, -440,
1973 -440, -440, -440, -440, -440, -440, -41, -440, -440, -440,
1974 -41, -440, -440, 1055, 1055, -440, 230, 231, 232, 233,
1975 1055, -440, 225, 850, -43, -440, -440, 236, 241, 337,
1976 355, 371, -440, 187, 1114, -440, -440, -440, -440, -440,
1977 -440, -440, -440, 323, 1055, -440, -440, -440, -440, 243,
1978 -440, 244, 728, 591, 591, 17, -440, 19, -440, -440,
1979 728, 242, 1149, 1149, 1149, 1149, 1149, 245, 246, 1149,
1980 728, 591, 249, -440, -440, -440, 252, 255, -24, 1055,
1981 1055, 1055, 1055, -440, -440, 247, 1055, 1055, 1149, -440,
1982 -440, -440, -440, 33, 257, 260, -440, 375, -37, 383,
1983 386, 264, 268, 272, 728, 400, 728, 275, 282, 728,
1984 284, 33, -440, 295, 296, 728, 728, 33, 270, -440,
1985 1149, 1055, 1055, 1149, -440, 297, 298, 301, 303, -440,
1986 300, 302, 150, 32, 1133, -440, 305, -440, 728, 728,
1987 1149, 728, 728, 307, -440, 307, 728, 311, 1149, 1149,
1988 1149, -440, -440, 1149, 591, 308, 310, -440, 1055, -440,
1989 1055, 1055, -440, -440, -440, -440, -440, -440, 33, 46,
1990 397, 315, 314, 591, 26, -440, -440, 376, -440, -440,
1991 309, 728, -440, -440, -440, 89, -440, -440, -440, 317,
1992 319, 321, 32, -440, 413, -440, 449, 7, -440, 1149,
1993 -440, -440, 324, -440, -440, -440, -440, -440, 460, -440,
1994 728, -440, 976, 9, -29, 591, 149, -440, -41, -440,
1995 -440, 330, -440, 976, -440, 453, 454, 336, -29, 728,
1996 728, 461, 412, -440, 728, 465, -440, 728, -440
1999 /* YYPGOTO[NTERM-NUM]. */
2000 static const short int yypgoto[] =
2002 -440, 358, 359, 361, 274, 276, -206, -440, 0, -19,
2003 401, 13, -440, -440, -440, 31, -440, -440, -178, -309,
2004 -394, -440, -236, -440, -297, -1, -440, -207, -440, -440,
2005 -25, 263, -252, -440, 387, 404, -69, -110, -162, 160,
2006 -440, -440, 490, -440, -440, -440, -440, -440, -440, -440,
2007 -440, -440, -440, -440, 426, -440, -440, -440, -440, -440,
2008 -440, -439, -73, 100, -212, -440, 457, -440, -440, -440,
2009 -440, -440, 40, 135, -440, -440, -440, -440
2012 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
2013 positive, shift that token. If negative, reduce the rule which
2014 number is the opposite. If zero, do what YYDEFACT says.
2015 If YYTABLE_NINF, syntax error. */
2016 #define YYTABLE_NINF -178
2017 static const short int yytable[] =
2019 11, 75, 298, 193, 304, 330, 378, 308, 309, 310,
2020 311, 312, 114, 13, 315, 98, 11, 394, 297, 453,
2021 297, 394, 350, 137, 84, 281, 283, 200, 424, 13,
2022 426, 299, 87, 23, 138, 331, 332, 140, 137, 351,
2023 194, -55, -55, -55, -55, 20, 102, 372, 1, 239,
2024 316, 3, 28, 29, 30, 31, 32, 33, 34, 21,
2025 35, 142, 143, 1, 390, 425, 3, 425, 77, 78,
2026 129, 319, 320, 24, 102, 82, 340, 350, 126, 25,
2027 129, 83, 141, 319, 320, 127, 11, 346, 393, 321,
2028 322, 340, 340, 541, 512, 26, 198, 104, 340, 105,
2029 345, 321, 322, 405, 547, 328, 392, 457, 236, 237,
2030 2, 443, 240, 4, 27, 444, 60, 61, 344, 100,
2031 108, 109, 110, 66, 534, 1, 2, 54, 3, 4,
2032 60, 61, 40, 100, 63, 64, 65, 66, 295, 1,
2033 2, 296, 3, 4, 319, 320, 411, 201, 36, 531,
2034 548, 542, 88, 67, 79, 80, 99, 340, 319, 320,
2035 56, 519, 321, 322, 341, 520, 498, 67, 499, 104,
2036 430, 105, 432, 433, 434, 393, 321, 322, 317, 318,
2037 394, 293, 545, 115, 116, 117, 118, 119, 120, 302,
2038 303, 293, 305, 306, 293, 293, 293, 293, 293, 313,
2039 314, 293, 418, 335, 336, 337, 338, 339, 104, 129,
2040 105, 104, 290, 105, 327, 380, 347, 348, 349, 489,
2041 367, 55, 367, 367, 519, 367, 58, 394, 523, 394,
2042 36, 477, 367, 193, 46, 47, 48, 106, 107, 49,
2043 367, 367, 144, 145, 146, 147, 68, 375, 104, 69,
2044 105, 277, 70, 84, 71, 343, 502, 503, 504, 91,
2045 68, 319, 320, 69, 396, 397, 70, 92, 71, 101,
2046 194, 403, 95, 96, 198, 373, 374, 93, 393, 321,
2047 322, 97, 377, 104, 536, 105, 104, 538, 105, 484,
2048 -56, 198, 391, 293, 42, 133, 43, 134, -57, 367,
2049 367, 367, 148, 196, 232, 234, 235, 367, 238, 284,
2050 241, 532, 272, 273, 274, 275, 276, 367, 367, 285,
2051 286, 287, 288, 291, 297, 381, 333, 543, 329, 413,
2052 445, 446, 447, 448, 334, 382, 354, 450, 451, 244,
2053 245, 246, 247, 248, 249, 250, 251, 252, 253, 383,
2054 384, 367, 385, 367, 386, 389, 367, 293, 431, 293,
2055 293, 293, 367, 367, 437, 399, 400, 401, 402, 404,
2056 408, 406, 475, 476, 409, 410, 407, 416, 419, 420,
2057 435, 436, 429, 452, 440, 367, 367, 441, 367, 367,
2058 442, 449, 454, 367, 456, 369, 370, 458, 371, 455,
2059 459, 367, 460, 461, 464, 379, -177, 462, 473, 509,
2060 443, 510, 511, 387, 388, 474, 515, 466, 293, 468,
2061 367, -63, 1, 2, 425, 3, 4, 5, 367, 488,
2062 469, 470, 478, 6, 7, 493, 480, 479, 481, 482,
2063 490, 483, 497, 293, 293, 293, 501, 507, 493, 508,
2064 516, 521, 8, 485, 517, 9, 524, 367, 525, 10,
2065 526, 528, 367, 530, 539, 546, 537, 549, 550, 255,
2066 256, 551, 421, 422, 423, 554, 367, 367, 555, 557,
2067 428, 367, 224, 225, 367, 226, 300, 124, 513, 301,
2068 438, 439, 139, 527, 535, 60, 61, 325, 100, 63,
2069 64, 65, 66, 136, 1, 2, 41, 3, 4, 123,
2070 90, 0, 485, 505, 427, 0, 0, 0, 0, 0,
2071 0, 0, 0, 0, 463, 0, 465, 0, 0, 467,
2072 0, 0, 67, 0, 0, 471, 472, 257, 258, 259,
2073 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
2074 270, 0, 0, 0, 0, 0, -176, 0, 491, 492,
2075 0, 495, 496, 0, 0, 0, 500, 0, 0, 0,
2076 0, -63, 1, 2, 506, 3, 4, 5, 0, 0,
2077 0, 0, 0, 6, 7, 0, 0, 0, 0, 0,
2078 0, 0, 0, 518, 355, 356, 0, 0, 60, 61,
2079 357, 522, 8, 0, 0, 9, 0, 1, 2, 10,
2080 3, 4, 0, 358, 359, 360, 0, 0, 0, 0,
2081 0, 0, 0, 0, 0, 68, 361, 362, 69, 0,
2082 540, 70, 0, 71, 135, 544, 0, 0, 0, 0,
2083 0, 0, 0, 363, 0, 0, 0, 0, 0, 552,
2084 553, 0, 0, 0, 556, 0, 0, 558, 0, 152,
2085 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
2086 163, 164, 165, 166, 167, 168, 0, 0, 0, 0,
2087 0, 0, 0, 60, 61, 0, 100, 108, 109, 110,
2088 66, 0, 1, 2, 0, 3, 4, 0, 0, 0,
2089 0, 169, 170, 171, 172, 173, 174, 175, 176, 177,
2090 178, 179, 180, 181, 0, 182, 0, 183, 184, 185,
2091 67, 0, 0, 0, 0, 0, 0, 104, 0, 105,
2092 0, 355, 356, 0, 364, 60, 61, 357, 0, 0,
2093 0, 0, 0, 0, 1, 2, 0, 3, 4, 0,
2094 358, 359, 360, 0, 0, 0, 0, 0, 0, 0,
2095 0, 0, 0, 361, 362, 0, 0, 0, 0, 0,
2096 0, 0, 0, 0, 0, 0, 0, 0, 60, 61,
2097 363, 100, 108, 109, 110, 66, 0, 1, 2, 0,
2098 3, 4, 0, 0, 0, 0, 152, 153, 154, 155,
2099 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
2100 166, 167, 168, 68, 0, 67, 69, 0, 0, 70,
2101 0, 71, 282, 0, 0, 0, 0, 0, 0, 0,
2102 0, 0, 0, 0, 0, 0, 0, 0, 169, 170,
2103 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
2104 181, 0, 182, 0, 183, 184, 185, 60, 61, 0,
2105 0, 0, 0, 0, 0, 0, 1, 2, 0, 3,
2106 4, 364, 149, 0, 0, 0, 0, 0, 0, 0,
2107 0, 0, 0, 0, 0, 150, 151, 0, 0, 0,
2108 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2109 60, 61, 0, 62, 63, 64, 65, 66, 68, 1,
2110 2, 69, 3, 4, 70, 0, 71, 342, 152, 153,
2111 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
2112 164, 165, 166, 167, 168, 0, 0, 67, 0, 0,
2113 0, 0, 0, 0, 0, 0, 60, 61, 0, 100,
2114 63, 64, 65, 66, 0, 1, 2, 0, 3, 4,
2115 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
2116 179, 180, 181, 128, 182, 0, 183, 184, 185, 355,
2117 356, 0, 0, 67, 0, 357, 104, 0, 105, 0,
2118 186, 0, 0, 187, 0, 188, 0, 189, 358, 359,
2119 360, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2120 0, 361, 362, 0, 0, 0, 0, 0, 0, 0,
2121 0, 0, 0, 0, 0, 0, 0, 0, 363, 0,
2122 68, 0, 0, 69, 0, 0, 70, 0, 71, 0,
2123 0, 0, 0, 0, 152, 153, 154, 155, 156, 157,
2124 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
2125 168, 0, 60, 61, 0, 100, 108, 109, 110, 66,
2126 0, 1, 2, 0, 3, 4, 68, 0, 0, 69,
2127 0, 0, 70, 0, 71, 0, 169, 170, 171, 172,
2128 173, 174, 175, 176, 177, 178, 179, 180, 181, 67,
2129 182, 0, 183, 184, 185, 60, 61, 0, 100, 63,
2130 64, 65, 66, 0, 1, 2, 0, 3, 4, 364,
2131 0, 60, 61, 0, 100, 63, 64, 65, 66, 0,
2132 1, 2, 324, 3, 4, 0, 0, 0, 0, 0,
2133 60, 61, 67, 100, 63, 64, 65, 66, 412, 1,
2134 2, 0, 3, 4, 0, 0, 60, 61, 67, 100,
2135 63, 64, 65, 66, 0, 1, 2, 487, 3, 4,
2136 0, 0, 0, 0, 0, 60, 61, 67, 197, 63,
2137 64, 65, 66, 0, 1, 2, 0, 3, 4, 0,
2138 0, 0, 68, 67, 0, 69, 0, 0, 70, 0,
2139 71, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2140 60, 61, 67, 100, 108, 109, 110, 66, 0, 1,
2141 2, 0, 3, 4, 60, 61, 0, 292, 63, 64,
2142 65, 66, 0, 1, 2, 68, 3, 4, 69, 0,
2143 0, 70, 0, 71, 0, 0, 0, 67, 0, 0,
2144 0, 68, 0, 0, 69, 0, 0, 70, 0, 71,
2145 0, 67, 0, 0, 0, 0, 0, 0, 0, 0,
2146 68, 0, 0, 69, 0, 0, 70, 0, 71, 0,
2147 0, 0, 0, 0, 0, 0, 68, 0, 0, 69,
2148 0, 0, 70, 0, 71, 0, 0, 0, 0, 0,
2149 0, 0, 0, 0, 0, 68, 0, 0, 69, 0,
2150 0, 70, 0, 71, 0, 0, 0, 0, 0, 0,
2151 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2152 0, 0, 0, 203, 0, 0, 0, 0, 0, 0,
2153 68, 0, 0, 69, 0, 0, 70, 0, 280, 0,
2154 0, 204, 205, 0, 68, 0, 0, 69, 0, 0,
2155 70, 0, 71, 206, 207, 208, 209, 210, 211, 152,
2156 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
2157 163, 164, 165, 166, 212, 213, 0, 0, 0, 0,
2158 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2159 0, 0, 0, 0, 0, 0, 214, 215, 216, 0,
2160 0, 217, 170, 171, 172, 173, 174, 175, 176, 177,
2161 178, 179, 180, 181, 218, 219, 220, 221, 222, 223
2164 static const short int yycheck[] =
2166 0, 26, 208, 113, 216, 241, 303, 219, 220, 221,
2167 222, 223, 81, 0, 226, 4, 16, 326, 11, 413,
2168 11, 330, 31, 135, 18, 187, 188, 25, 11, 16,
2169 11, 209, 26, 134, 146, 242, 243, 106, 135, 48,
2170 113, 3, 4, 5, 6, 47, 71, 299, 16, 146,
2171 228, 19, 37, 38, 39, 40, 41, 42, 43, 61,
2172 45, 23, 24, 16, 316, 48, 19, 48, 37, 38,
2173 95, 112, 113, 52, 99, 44, 135, 31, 135, 134,
2174 105, 50, 107, 112, 113, 142, 86, 146, 129, 130,
2175 131, 135, 135, 532, 488, 15, 121, 136, 135, 138,
2176 144, 130, 131, 146, 543, 144, 318, 144, 133, 134,
2177 17, 135, 137, 20, 134, 139, 7, 8, 280, 10,
2178 11, 12, 13, 14, 518, 16, 17, 134, 19, 20,
2179 7, 8, 0, 10, 11, 12, 13, 14, 11, 16,
2180 17, 14, 19, 20, 112, 113, 353, 145, 133, 142,
2181 544, 142, 146, 44, 29, 30, 145, 135, 112, 113,
2182 140, 135, 130, 131, 142, 139, 463, 44, 465, 136,
2183 382, 138, 384, 385, 386, 129, 130, 131, 108, 109,
2184 489, 206, 33, 55, 56, 57, 58, 59, 60, 214,
2185 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
2186 225, 226, 364, 272, 273, 274, 275, 276, 136, 234,
2187 138, 136, 199, 138, 142, 140, 285, 286, 287, 455,
2188 293, 134, 295, 296, 135, 298, 19, 536, 139, 538,
2189 133, 443, 305, 343, 37, 38, 39, 77, 78, 42,
2190 313, 314, 3, 4, 5, 6, 137, 135, 136, 140,
2191 138, 142, 143, 18, 145, 280, 468, 469, 470, 19,
2192 137, 112, 113, 140, 333, 334, 143, 19, 145, 146,
2193 343, 340, 138, 4, 299, 300, 301, 19, 129, 130,
2194 131, 4, 135, 136, 520, 138, 136, 523, 138, 139,
2195 9, 316, 317, 318, 41, 141, 43, 141, 9, 372,
2196 373, 374, 9, 4, 19, 135, 139, 380, 144, 19,
2197 139, 517, 138, 138, 138, 138, 138, 390, 391, 138,
2198 138, 138, 135, 50, 11, 135, 138, 533, 144, 354,
2199 399, 400, 401, 402, 138, 135, 138, 406, 407, 85,
2200 86, 87, 88, 89, 90, 91, 92, 93, 94, 135,
2201 135, 424, 135, 426, 135, 33, 429, 382, 383, 384,
2202 385, 386, 435, 436, 389, 135, 135, 135, 135, 144,
2203 33, 135, 441, 442, 19, 4, 135, 54, 135, 135,
2204 135, 135, 140, 408, 135, 458, 459, 135, 461, 462,
2205 135, 144, 135, 466, 19, 295, 296, 14, 298, 139,
2206 14, 474, 138, 135, 4, 305, 0, 135, 138, 478,
2207 135, 480, 481, 313, 314, 440, 19, 135, 443, 135,
2208 493, 15, 16, 17, 48, 19, 20, 21, 501, 454,
2209 135, 135, 135, 27, 28, 460, 135, 139, 135, 139,
2210 135, 139, 135, 468, 469, 470, 135, 139, 473, 139,
2211 135, 142, 46, 453, 140, 49, 139, 530, 139, 53,
2212 139, 48, 535, 14, 4, 135, 142, 14, 14, 23,
2213 24, 135, 372, 373, 374, 14, 549, 550, 66, 14,
2214 380, 554, 124, 124, 557, 124, 212, 86, 489, 213,
2215 390, 391, 105, 512, 519, 7, 8, 234, 10, 11,
2216 12, 13, 14, 99, 16, 17, 16, 19, 20, 83,
2217 53, -1, 512, 473, 379, -1, -1, -1, -1, -1,
2218 -1, -1, -1, -1, 424, -1, 426, -1, -1, 429,
2219 -1, -1, 44, -1, -1, 435, 436, 91, 92, 93,
2220 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
2221 104, -1, -1, -1, -1, -1, 0, -1, 458, 459,
2222 -1, 461, 462, -1, -1, -1, 466, -1, -1, -1,
2223 -1, 15, 16, 17, 474, 19, 20, 21, -1, -1,
2224 -1, -1, -1, 27, 28, -1, -1, -1, -1, -1,
2225 -1, -1, -1, 493, 3, 4, -1, -1, 7, 8,
2226 9, 501, 46, -1, -1, 49, -1, 16, 17, 53,
2227 19, 20, -1, 22, 23, 24, -1, -1, -1, -1,
2228 -1, -1, -1, -1, -1, 137, 35, 36, 140, -1,
2229 530, 143, -1, 145, 146, 535, -1, -1, -1, -1,
2230 -1, -1, -1, 52, -1, -1, -1, -1, -1, 549,
2231 550, -1, -1, -1, 554, -1, -1, 557, -1, 68,
2232 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
2233 79, 80, 81, 82, 83, 84, -1, -1, -1, -1,
2234 -1, -1, -1, 7, 8, -1, 10, 11, 12, 13,
2235 14, -1, 16, 17, -1, 19, 20, -1, -1, -1,
2236 -1, 110, 111, 112, 113, 114, 115, 116, 117, 118,
2237 119, 120, 121, 122, -1, 124, -1, 126, 127, 128,
2238 44, -1, -1, -1, -1, -1, -1, 136, -1, 138,
2239 -1, 3, 4, -1, 143, 7, 8, 9, -1, -1,
2240 -1, -1, -1, -1, 16, 17, -1, 19, 20, -1,
2241 22, 23, 24, -1, -1, -1, -1, -1, -1, -1,
2242 -1, -1, -1, 35, 36, -1, -1, -1, -1, -1,
2243 -1, -1, -1, -1, -1, -1, -1, -1, 7, 8,
2244 52, 10, 11, 12, 13, 14, -1, 16, 17, -1,
2245 19, 20, -1, -1, -1, -1, 68, 69, 70, 71,
2246 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
2247 82, 83, 84, 137, -1, 44, 140, -1, -1, 143,
2248 -1, 145, 146, -1, -1, -1, -1, -1, -1, -1,
2249 -1, -1, -1, -1, -1, -1, -1, -1, 110, 111,
2250 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
2251 122, -1, 124, -1, 126, 127, 128, 7, 8, -1,
2252 -1, -1, -1, -1, -1, -1, 16, 17, -1, 19,
2253 20, 143, 22, -1, -1, -1, -1, -1, -1, -1,
2254 -1, -1, -1, -1, -1, 35, 36, -1, -1, -1,
2255 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2256 7, 8, -1, 10, 11, 12, 13, 14, 137, 16,
2257 17, 140, 19, 20, 143, -1, 145, 146, 68, 69,
2258 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
2259 80, 81, 82, 83, 84, -1, -1, 44, -1, -1,
2260 -1, -1, -1, -1, -1, -1, 7, 8, -1, 10,
2261 11, 12, 13, 14, -1, 16, 17, -1, 19, 20,
2262 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
2263 120, 121, 122, 34, 124, -1, 126, 127, 128, 3,
2264 4, -1, -1, 44, -1, 9, 136, -1, 138, -1,
2265 140, -1, -1, 143, -1, 145, -1, 147, 22, 23,
2266 24, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2267 -1, 35, 36, -1, -1, -1, -1, -1, -1, -1,
2268 -1, -1, -1, -1, -1, -1, -1, -1, 52, -1,
2269 137, -1, -1, 140, -1, -1, 143, -1, 145, -1,
2270 -1, -1, -1, -1, 68, 69, 70, 71, 72, 73,
2271 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
2272 84, -1, 7, 8, -1, 10, 11, 12, 13, 14,
2273 -1, 16, 17, -1, 19, 20, 137, -1, -1, 140,
2274 -1, -1, 143, -1, 145, -1, 110, 111, 112, 113,
2275 114, 115, 116, 117, 118, 119, 120, 121, 122, 44,
2276 124, -1, 126, 127, 128, 7, 8, -1, 10, 11,
2277 12, 13, 14, -1, 16, 17, -1, 19, 20, 143,
2278 -1, 7, 8, -1, 10, 11, 12, 13, 14, -1,
2279 16, 17, 34, 19, 20, -1, -1, -1, -1, -1,
2280 7, 8, 44, 10, 11, 12, 13, 14, 34, 16,
2281 17, -1, 19, 20, -1, -1, 7, 8, 44, 10,
2282 11, 12, 13, 14, -1, 16, 17, 34, 19, 20,
2283 -1, -1, -1, -1, -1, 7, 8, 44, 10, 11,
2284 12, 13, 14, -1, 16, 17, -1, 19, 20, -1,
2285 -1, -1, 137, 44, -1, 140, -1, -1, 143, -1,
2286 145, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2287 7, 8, 44, 10, 11, 12, 13, 14, -1, 16,
2288 17, -1, 19, 20, 7, 8, -1, 10, 11, 12,
2289 13, 14, -1, 16, 17, 137, 19, 20, 140, -1,
2290 -1, 143, -1, 145, -1, -1, -1, 44, -1, -1,
2291 -1, 137, -1, -1, 140, -1, -1, 143, -1, 145,
2292 -1, 44, -1, -1, -1, -1, -1, -1, -1, -1,
2293 137, -1, -1, 140, -1, -1, 143, -1, 145, -1,
2294 -1, -1, -1, -1, -1, -1, 137, -1, -1, 140,
2295 -1, -1, 143, -1, 145, -1, -1, -1, -1, -1,
2296 -1, -1, -1, -1, -1, 137, -1, -1, 140, -1,
2297 -1, 143, -1, 145, -1, -1, -1, -1, -1, -1,
2298 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2299 -1, -1, -1, 32, -1, -1, -1, -1, -1, -1,
2300 137, -1, -1, 140, -1, -1, 143, -1, 145, -1,
2301 -1, 50, 51, -1, 137, -1, -1, 140, -1, -1,
2302 143, -1, 145, 62, 63, 64, 65, 66, 67, 68,
2303 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
2304 79, 80, 81, 82, 83, 84, -1, -1, -1, -1,
2305 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2306 -1, -1, -1, -1, -1, -1, 105, 106, 107, -1,
2307 -1, 110, 111, 112, 113, 114, 115, 116, 117, 118,
2308 119, 120, 121, 122, 123, 124, 125, 126, 127, 128
2311 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
2312 symbol of state STATE-NUM. */
2313 static const unsigned char yystos[] =
2315 0, 16, 17, 19, 20, 21, 27, 28, 46, 49,
2316 53, 156, 158, 159, 160, 188, 189, 190, 192, 191,
2317 47, 61, 197, 134, 52, 134, 15, 134, 37, 38,
2318 39, 40, 41, 42, 43, 45, 133, 161, 162, 163,
2319 0, 190, 41, 43, 164, 207, 37, 38, 39, 42,
2320 165, 204, 206, 213, 134, 134, 140, 198, 19, 196,
2321 7, 8, 10, 11, 12, 13, 14, 44, 137, 140,
2322 143, 145, 156, 159, 177, 178, 210, 163, 163, 29,
2323 30, 187, 163, 163, 18, 214, 215, 26, 146, 205,
2324 214, 19, 19, 19, 199, 138, 4, 4, 4, 145,
2325 10, 146, 178, 183, 136, 138, 187, 187, 11, 12,
2326 13, 154, 155, 178, 184, 55, 56, 57, 58, 59,
2327 60, 166, 202, 202, 158, 218, 135, 142, 34, 178,
2328 179, 181, 182, 141, 141, 146, 183, 135, 146, 182,
2329 184, 178, 23, 24, 3, 4, 5, 6, 9, 22,
2330 35, 36, 68, 69, 70, 71, 72, 73, 74, 75,
2331 76, 77, 78, 79, 80, 81, 82, 83, 84, 110,
2332 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
2333 121, 122, 124, 126, 127, 128, 140, 143, 145, 147,
2334 149, 150, 151, 185, 210, 193, 4, 10, 178, 180,
2335 25, 145, 203, 32, 50, 51, 62, 63, 64, 65,
2336 66, 67, 83, 84, 105, 106, 107, 110, 123, 124,
2337 125, 126, 127, 128, 149, 150, 151, 216, 222, 223,
2338 224, 225, 19, 168, 135, 139, 178, 178, 144, 146,
2339 178, 139, 194, 195, 85, 86, 87, 88, 89, 90,
2340 91, 92, 93, 94, 152, 23, 24, 91, 92, 93,
2341 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
2342 104, 153, 138, 138, 138, 138, 138, 142, 184, 186,
2343 145, 186, 146, 186, 19, 138, 138, 138, 135, 175,
2344 159, 50, 10, 178, 212, 11, 14, 11, 154, 166,
2345 152, 153, 178, 178, 212, 178, 178, 219, 212, 212,
2346 212, 212, 212, 178, 178, 212, 166, 108, 109, 112,
2347 113, 130, 131, 167, 34, 179, 170, 142, 144, 144,
2348 170, 175, 175, 138, 138, 184, 184, 184, 184, 184,
2349 135, 142, 146, 178, 186, 144, 146, 184, 184, 184,
2350 31, 48, 173, 176, 138, 3, 4, 9, 22, 23,
2351 24, 35, 36, 52, 143, 185, 209, 210, 211, 211,
2352 211, 211, 180, 178, 178, 135, 172, 135, 172, 211,
2353 140, 135, 135, 135, 135, 135, 135, 211, 211, 33,
2354 180, 178, 212, 129, 167, 169, 184, 184, 221, 135,
2355 135, 135, 135, 184, 144, 146, 135, 135, 33, 19,
2356 4, 175, 34, 178, 200, 201, 54, 208, 186, 135,
2357 135, 211, 211, 211, 11, 48, 11, 221, 211, 140,
2358 212, 178, 212, 212, 212, 135, 135, 178, 211, 211,
2359 135, 135, 135, 135, 139, 184, 184, 184, 184, 144,
2360 184, 184, 178, 168, 135, 139, 19, 144, 14, 14,
2361 138, 135, 135, 211, 4, 211, 135, 211, 135, 135,
2362 135, 211, 211, 138, 178, 184, 184, 212, 135, 139,
2363 135, 135, 139, 139, 139, 156, 157, 34, 178, 170,
2364 135, 211, 211, 178, 220, 211, 211, 135, 172, 172,
2365 211, 135, 212, 212, 212, 220, 211, 139, 139, 184,
2366 184, 184, 168, 173, 174, 19, 135, 140, 211, 135,
2367 139, 142, 211, 139, 139, 139, 139, 157, 48, 171,
2368 14, 142, 154, 217, 168, 178, 170, 142, 170, 4,
2369 211, 209, 142, 154, 211, 33, 135, 209, 168, 14,
2370 14, 135, 211, 211, 14, 66, 211, 14, 211
2373 #define yyerrok (yyerrstatus = 0)
2374 #define yyclearin (yychar = YYEMPTY)
2375 #define YYEMPTY (-2)
2378 #define YYACCEPT goto yyacceptlab
2379 #define YYABORT goto yyabortlab
2380 #define YYERROR goto yyerrorlab
2383 /* Like YYERROR except do call yyerror. This remains here temporarily
2384 to ease the transition to the new meaning of YYERROR, for GCC.
2385 Once GCC version 2 has supplanted version 1, this can go. */
2387 #define YYFAIL goto yyerrlab
2389 #define YYRECOVERING() (!!yyerrstatus)
2391 #define YYBACKUP(Token, Value) \
2393 if (yychar == YYEMPTY && yylen == 1) \
2397 yytoken = YYTRANSLATE (yychar); \
2403 yyerror (YY_("syntax error: cannot back up")); \
2410 #define YYERRCODE 256
2413 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
2414 If N is 0, then set CURRENT to the empty location which ends
2415 the previous symbol: RHS[0] (always defined). */
2417 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
2418 #ifndef YYLLOC_DEFAULT
2419 # define YYLLOC_DEFAULT(Current, Rhs, N) \
2423 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
2424 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
2425 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
2426 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
2430 (Current).first_line = (Current).last_line = \
2431 YYRHSLOC (Rhs, 0).last_line; \
2432 (Current).first_column = (Current).last_column = \
2433 YYRHSLOC (Rhs, 0).last_column; \
2439 /* YY_LOCATION_PRINT -- Print the location on the stream.
2440 This macro was not mandated originally: define only if we know
2441 we won't break user code: when these are the locations we know. */
2443 #ifndef YY_LOCATION_PRINT
2444 # if YYLTYPE_IS_TRIVIAL
2445 # define YY_LOCATION_PRINT(File, Loc) \
2446 fprintf (File, "%d.%d-%d.%d", \
2447 (Loc).first_line, (Loc).first_column, \
2448 (Loc).last_line, (Loc).last_column)
2450 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
2455 /* YYLEX -- calling `yylex' with the right arguments. */
2458 # define YYLEX yylex (YYLEX_PARAM)
2460 # define YYLEX yylex ()
2463 /* Enable debugging if requested. */
2467 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
2468 # define YYFPRINTF fprintf
2471 # define YYDPRINTF(Args) \
2477 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
2481 YYFPRINTF (stderr, "%s ", Title); \
2482 yysymprint (stderr, \
2484 YYFPRINTF (stderr, "\n"); \
2488 /*------------------------------------------------------------------.
2489 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
2491 `------------------------------------------------------------------*/
2493 #if defined (__STDC__) || defined (__cplusplus)
2495 yy_stack_print (short int *bottom, short int *top)
2498 yy_stack_print (bottom, top)
2503 YYFPRINTF (stderr, "Stack now");
2504 for (/* Nothing. */; bottom <= top; ++bottom)
2505 YYFPRINTF (stderr, " %d", *bottom);
2506 YYFPRINTF (stderr, "\n");
2509 # define YY_STACK_PRINT(Bottom, Top) \
2512 yy_stack_print ((Bottom), (Top)); \
2516 /*------------------------------------------------.
2517 | Report that the YYRULE is going to be reduced. |
2518 `------------------------------------------------*/
2520 #if defined (__STDC__) || defined (__cplusplus)
2522 yy_reduce_print (int yyrule)
2525 yy_reduce_print (yyrule)
2530 unsigned long int yylno = yyrline[yyrule];
2531 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ",
2533 /* Print the symbols being reduced, and their result. */
2534 for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
2535 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
2536 YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]);
2539 # define YY_REDUCE_PRINT(Rule) \
2542 yy_reduce_print (Rule); \
2545 /* Nonzero means print parse trace. It is left uninitialized so that
2546 multiple parsers can coexist. */
2548 #else /* !YYDEBUG */
2549 # define YYDPRINTF(Args)
2550 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
2551 # define YY_STACK_PRINT(Bottom, Top)
2552 # define YY_REDUCE_PRINT(Rule)
2553 #endif /* !YYDEBUG */
2556 /* YYINITDEPTH -- initial size of the parser's stacks. */
2558 # define YYINITDEPTH 200
2561 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
2562 if the built-in stack extension method is used).
2564 Do not make this value too large; the results are undefined if
2565 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
2566 evaluated with infinite-precision integer arithmetic. */
2569 # define YYMAXDEPTH 10000
2577 # if defined (__GLIBC__) && defined (_STRING_H)
2578 # define yystrlen strlen
2580 /* Return the length of YYSTR. */
2582 # if defined (__STDC__) || defined (__cplusplus)
2583 yystrlen (const char *yystr)
2589 const char *yys = yystr;
2591 while (*yys++ != '\0')
2594 return yys - yystr - 1;
2600 # if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
2601 # define yystpcpy stpcpy
2603 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
2606 # if defined (__STDC__) || defined (__cplusplus)
2607 yystpcpy (char *yydest, const char *yysrc)
2609 yystpcpy (yydest, yysrc)
2615 const char *yys = yysrc;
2617 while ((*yyd++ = *yys++) != '\0')
2626 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
2627 quotes and backslashes, so that it's suitable for yyerror. The
2628 heuristic is that double-quoting is unnecessary unless the string
2629 contains an apostrophe, a comma, or backslash (other than
2630 backslash-backslash). YYSTR is taken from yytname. If YYRES is
2631 null, do not copy; instead, return the length of what the result
2634 yytnamerr (char *yyres, const char *yystr)
2639 char const *yyp = yystr;
2646 goto do_not_strip_quotes;
2650 goto do_not_strip_quotes;
2663 do_not_strip_quotes: ;
2667 return yystrlen (yystr);
2669 return yystpcpy (yyres, yystr) - yyres;
2673 #endif /* YYERROR_VERBOSE */
2678 /*--------------------------------.
2679 | Print this symbol on YYOUTPUT. |
2680 `--------------------------------*/
2682 #if defined (__STDC__) || defined (__cplusplus)
2684 yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
2687 yysymprint (yyoutput, yytype, yyvaluep)
2693 /* Pacify ``unused variable'' warnings. */
2696 if (yytype < YYNTOKENS)
2697 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
2699 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
2703 if (yytype < YYNTOKENS)
2704 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
2711 YYFPRINTF (yyoutput, ")");
2714 #endif /* ! YYDEBUG */
2715 /*-----------------------------------------------.
2716 | Release the memory associated to this symbol. |
2717 `-----------------------------------------------*/
2719 #if defined (__STDC__) || defined (__cplusplus)
2721 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
2724 yydestruct (yymsg, yytype, yyvaluep)
2730 /* Pacify ``unused variable'' warnings. */
2735 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
2746 /* Prevent warnings from -Wmissing-prototypes. */
2748 #ifdef YYPARSE_PARAM
2749 # if defined (__STDC__) || defined (__cplusplus)
2750 int yyparse (void *YYPARSE_PARAM);
2754 #else /* ! YYPARSE_PARAM */
2755 #if defined (__STDC__) || defined (__cplusplus)
2760 #endif /* ! YYPARSE_PARAM */
2764 /* The look-ahead symbol. */
2767 /* The semantic value of the look-ahead symbol. */
2770 /* Number of syntax errors so far. */
2779 #ifdef YYPARSE_PARAM
2780 # if defined (__STDC__) || defined (__cplusplus)
2781 int yyparse (void *YYPARSE_PARAM)
2783 int yyparse (YYPARSE_PARAM)
2784 void *YYPARSE_PARAM;
2786 #else /* ! YYPARSE_PARAM */
2787 #if defined (__STDC__) || defined (__cplusplus)
2801 /* Number of tokens to shift before error messages enabled. */
2803 /* Look-ahead token as an internal (translated) token number. */
2806 /* Three stacks and their tools:
2807 `yyss': related to states,
2808 `yyvs': related to semantic values,
2809 `yyls': related to locations.
2811 Refer to the stacks thru separate pointers, to allow yyoverflow
2812 to reallocate them elsewhere. */
2814 /* The state stack. */
2815 short int yyssa[YYINITDEPTH];
2816 short int *yyss = yyssa;
2819 /* The semantic value stack. */
2820 YYSTYPE yyvsa[YYINITDEPTH];
2821 YYSTYPE *yyvs = yyvsa;
2826 #define YYPOPSTACK (yyvsp--, yyssp--)
2828 YYSIZE_T yystacksize = YYINITDEPTH;
2830 /* The variables used to return semantic value and location from the
2835 /* When reducing, the number of symbols on the RHS of the reduced
2839 YYDPRINTF ((stderr, "Starting parse\n"));
2844 yychar = YYEMPTY; /* Cause a token to be read. */
2846 /* Initialize stack pointers.
2847 Waste one element of value and location stack
2848 so that they stay on the same level as the state stack.
2849 The wasted elements are never initialized. */
2856 /*------------------------------------------------------------.
2857 | yynewstate -- Push a new state, which is found in yystate. |
2858 `------------------------------------------------------------*/
2860 /* In all cases, when you get here, the value and location stacks
2861 have just been pushed. so pushing a state here evens the stacks.
2868 if (yyss + yystacksize - 1 <= yyssp)
2870 /* Get the current used size of the three stacks, in elements. */
2871 YYSIZE_T yysize = yyssp - yyss + 1;
2875 /* Give user a chance to reallocate the stack. Use copies of
2876 these so that the &'s don't force the real ones into
2878 YYSTYPE *yyvs1 = yyvs;
2879 short int *yyss1 = yyss;
2882 /* Each stack pointer address is followed by the size of the
2883 data in use in that stack, in bytes. This used to be a
2884 conditional around just the two extra args, but that might
2885 be undefined if yyoverflow is a macro. */
2886 yyoverflow (YY_("memory exhausted"),
2887 &yyss1, yysize * sizeof (*yyssp),
2888 &yyvs1, yysize * sizeof (*yyvsp),
2895 #else /* no yyoverflow */
2896 # ifndef YYSTACK_RELOCATE
2897 goto yyexhaustedlab;
2899 /* Extend the stack our own way. */
2900 if (YYMAXDEPTH <= yystacksize)
2901 goto yyexhaustedlab;
2903 if (YYMAXDEPTH < yystacksize)
2904 yystacksize = YYMAXDEPTH;
2907 short int *yyss1 = yyss;
2908 union yyalloc *yyptr =
2909 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
2911 goto yyexhaustedlab;
2912 YYSTACK_RELOCATE (yyss);
2913 YYSTACK_RELOCATE (yyvs);
2915 # undef YYSTACK_RELOCATE
2917 YYSTACK_FREE (yyss1);
2920 #endif /* no yyoverflow */
2922 yyssp = yyss + yysize - 1;
2923 yyvsp = yyvs + yysize - 1;
2926 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
2927 (unsigned long int) yystacksize));
2929 if (yyss + yystacksize - 1 <= yyssp)
2933 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
2942 /* Do appropriate processing given the current state. */
2943 /* Read a look-ahead token if we need one and don't already have one. */
2946 /* First try to decide what to do without reference to look-ahead token. */
2948 yyn = yypact[yystate];
2949 if (yyn == YYPACT_NINF)
2952 /* Not known => get a look-ahead token if don't already have one. */
2954 /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
2955 if (yychar == YYEMPTY)
2957 YYDPRINTF ((stderr, "Reading a token: "));
2961 if (yychar <= YYEOF)
2963 yychar = yytoken = YYEOF;
2964 YYDPRINTF ((stderr, "Now at end of input.\n"));
2968 yytoken = YYTRANSLATE (yychar);
2969 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
2972 /* If the proper action on seeing token YYTOKEN is to reduce or to
2973 detect an error, take that action. */
2975 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
2980 if (yyn == 0 || yyn == YYTABLE_NINF)
2989 /* Shift the look-ahead token. */
2990 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
2992 /* Discard the token being shifted unless it is eof. */
2993 if (yychar != YYEOF)
2999 /* Count tokens shifted since error; after three, turn off error
3008 /*-----------------------------------------------------------.
3009 | yydefault -- do the default action for the current state. |
3010 `-----------------------------------------------------------*/
3012 yyn = yydefact[yystate];
3018 /*-----------------------------.
3019 | yyreduce -- Do a reduction. |
3020 `-----------------------------*/
3022 /* yyn is the number of a rule to reduce with. */
3025 /* If YYLEN is nonzero, implement the default value of the action:
3028 Otherwise, the following line sets YYVAL to garbage.
3029 This behavior is undocumented and Bison
3030 users should not rely upon it. Assigning to YYVAL
3031 unconditionally makes the parser a bit smaller, and it avoids a
3032 GCC warning that YYVAL may be used uninitialized. */
3033 yyval = yyvsp[1-yylen];
3036 YY_REDUCE_PRINT (yyn);
3040 #line 1099 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3041 { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;}
3045 #line 1099 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3046 { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;}
3050 #line 1100 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3051 { (yyval.IPredicate) = ICmpInst::ICMP_SLT; ;}
3055 #line 1100 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3056 { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;}
3060 #line 1101 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3061 { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;}
3065 #line 1101 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3066 { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;}
3070 #line 1102 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3071 { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;}
3075 #line 1102 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3076 { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;}
3080 #line 1103 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3081 { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;}
3085 #line 1103 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3086 { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;}
3090 #line 1107 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3091 { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;}
3095 #line 1107 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3096 { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;}
3100 #line 1108 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3101 { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;}
3105 #line 1108 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3106 { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;}
3110 #line 1109 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3111 { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;}
3115 #line 1109 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3116 { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;}
3120 #line 1110 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3121 { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;}
3125 #line 1110 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3126 { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;}
3130 #line 1111 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3131 { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;}
3135 #line 1111 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3136 { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;}
3140 #line 1112 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3141 { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;}
3145 #line 1112 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3146 { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;}
3150 #line 1113 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3151 { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;}
3155 #line 1113 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3156 { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;}
3160 #line 1114 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3161 { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;}
3165 #line 1115 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3166 { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;}
3170 #line 1124 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3171 { (yyval.StrVal) = 0; ;}
3175 #line 1128 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3177 (yyval.StrVal) = (yyvsp[-1].StrVal);
3183 #line 1132 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3191 #line 1139 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3193 (yyval.StrVal) = (yyvsp[-1].StrVal);
3199 #line 1143 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3207 #line 1149 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3208 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
3212 #line 1150 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3213 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
3217 #line 1151 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3218 { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
3222 #line 1152 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3223 { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
3227 #line 1153 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3228 { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
3232 #line 1157 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3233 { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
3237 #line 1158 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3238 { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
3242 #line 1159 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3243 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3247 #line 1163 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3248 { (yyval.Visibility) = GlobalValue::DefaultVisibility; ;}
3252 #line 1164 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3253 { (yyval.Visibility) = GlobalValue::HiddenVisibility; ;}
3257 #line 1168 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3258 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3262 #line 1169 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3263 { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
3267 #line 1170 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3268 { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
3272 #line 1174 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3273 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3277 #line 1175 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3278 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
3282 #line 1176 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3283 { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
3287 #line 1177 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3288 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
3292 #line 1178 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3293 { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
3297 #line 1181 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3298 { (yyval.UIntVal) = CallingConv::C; ;}
3302 #line 1182 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3303 { (yyval.UIntVal) = CallingConv::C; ;}
3307 #line 1183 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3308 { (yyval.UIntVal) = CallingConv::Fast; ;}
3312 #line 1184 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3313 { (yyval.UIntVal) = CallingConv::Cold; ;}
3317 #line 1185 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3318 { (yyval.UIntVal) = CallingConv::X86_StdCall; ;}
3322 #line 1186 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3323 { (yyval.UIntVal) = CallingConv::X86_FastCall; ;}
3327 #line 1187 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3329 if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val))
3330 GEN_ERROR("Calling conv too large");
3331 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
3337 #line 1194 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3338 { (yyval.ParamAttrs) = FunctionType::ZExtAttribute; ;}
3342 #line 1195 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3343 { (yyval.ParamAttrs) = FunctionType::SExtAttribute; ;}
3347 #line 1196 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3348 { (yyval.ParamAttrs) = FunctionType::InRegAttribute; ;}
3352 #line 1197 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3353 { (yyval.ParamAttrs) = FunctionType::StructRetAttribute; ;}
3357 #line 1200 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3358 { (yyval.ParamAttrs) = FunctionType::NoAttributeSet; ;}
3362 #line 1201 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3364 (yyval.ParamAttrs) = FunctionType::ParameterAttributes((yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs));
3369 #line 1206 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3370 { (yyval.ParamAttrs) = FunctionType::NoReturnAttribute; ;}
3374 #line 1210 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3375 { (yyval.ParamAttrs) = FunctionType::NoAttributeSet; ;}
3379 #line 1211 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3381 (yyval.ParamAttrs) = FunctionType::ParameterAttributes((yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs));
3386 #line 1218 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3387 { (yyval.UIntVal) = 0; ;}
3391 #line 1219 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3393 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
3394 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
3395 GEN_ERROR("Alignment must be a power of two");
3401 #line 1225 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3402 { (yyval.UIntVal) = 0; ;}
3406 #line 1226 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3408 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
3409 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
3410 GEN_ERROR("Alignment must be a power of two");
3416 #line 1234 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3418 for (unsigned i = 0, e = strlen((yyvsp[0].StrVal)); i != e; ++i)
3419 if ((yyvsp[0].StrVal)[i] == '"' || (yyvsp[0].StrVal)[i] == '\\')
3420 GEN_ERROR("Invalid character in section name");
3421 (yyval.StrVal) = (yyvsp[0].StrVal);
3427 #line 1242 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3428 { (yyval.StrVal) = 0; ;}
3432 #line 1243 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3433 { (yyval.StrVal) = (yyvsp[0].StrVal); ;}
3437 #line 1248 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3442 #line 1249 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3447 #line 1250 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3449 CurGV->setSection((yyvsp[0].StrVal));
3450 free((yyvsp[0].StrVal));
3456 #line 1255 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3458 if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val)))
3459 GEN_ERROR("Alignment must be a power of two");
3460 CurGV->setAlignment((yyvsp[0].UInt64Val));
3466 #line 1271 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3468 (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
3474 #line 1275 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3476 (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType));
3482 #line 1279 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3484 if (*(yyvsp[-1].TypeVal) == Type::LabelTy)
3485 GEN_ERROR("Cannot form a pointer to a basic block");
3486 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PointerType::get(*(yyvsp[-1].TypeVal))));
3487 delete (yyvsp[-1].TypeVal);
3493 #line 1286 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3494 { // Named types are also simple types...
3495 const Type* tmp = getTypeVal((yyvsp[0].ValIDVal));
3497 (yyval.TypeVal) = new PATypeHolder(tmp);
3502 #line 1291 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3503 { // Type UpReference
3504 if ((yyvsp[0].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range");
3505 OpaqueType *OT = OpaqueType::get(); // Use temporary placeholder
3506 UpRefs.push_back(UpRefRecord((unsigned)(yyvsp[0].UInt64Val), OT)); // Add to vector...
3507 (yyval.TypeVal) = new PATypeHolder(OT);
3508 UR_OUT("New Upreference!\n");
3514 #line 1299 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3516 std::vector<const Type*> Params;
3517 std::vector<FunctionType::ParameterAttributes> Attrs;
3518 Attrs.push_back((yyvsp[0].ParamAttrs));
3519 for (TypeWithAttrsList::iterator I=(yyvsp[-2].TypeWithAttrsList)->begin(), E=(yyvsp[-2].TypeWithAttrsList)->end(); I != E; ++I) {
3520 const Type *Ty = I->Ty->get();
3521 Params.push_back(Ty);
3522 if (Ty != Type::VoidTy)
3523 Attrs.push_back(I->Attrs);
3525 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
3526 if (isVarArg) Params.pop_back();
3528 FunctionType *FT = FunctionType::get(*(yyvsp[-4].TypeVal), Params, isVarArg, Attrs);
3529 delete (yyvsp[-2].TypeWithAttrsList); // Delete the argument list
3530 delete (yyvsp[-4].TypeVal); // Delete the return type handle
3531 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT));
3537 #line 1318 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3539 std::vector<const Type*> Params;
3540 std::vector<FunctionType::ParameterAttributes> Attrs;
3541 Attrs.push_back((yyvsp[0].ParamAttrs));
3542 for (TypeWithAttrsList::iterator I=(yyvsp[-2].TypeWithAttrsList)->begin(), E=(yyvsp[-2].TypeWithAttrsList)->end(); I != E; ++I) {
3543 const Type* Ty = I->Ty->get();
3544 Params.push_back(Ty);
3545 if (Ty != Type::VoidTy)
3546 Attrs.push_back(I->Attrs);
3548 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
3549 if (isVarArg) Params.pop_back();
3551 FunctionType *FT = FunctionType::get((yyvsp[-4].PrimType), Params, isVarArg, Attrs);
3552 delete (yyvsp[-2].TypeWithAttrsList); // Delete the argument list
3553 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT));
3559 #line 1337 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3560 { // Sized array type?
3561 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
3562 delete (yyvsp[-1].TypeVal);
3568 #line 1342 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3570 const llvm::Type* ElemTy = (yyvsp[-1].TypeVal)->get();
3571 if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val))
3572 GEN_ERROR("Unsigned result not equal to signed result");
3573 if (!ElemTy->isFloatingPoint() && !ElemTy->isInteger())
3574 GEN_ERROR("Element type of a VectorType must be primitive");
3575 if (!isPowerOf2_32((yyvsp[-3].UInt64Val)))
3576 GEN_ERROR("Vector length should be a power of 2");
3577 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(VectorType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
3578 delete (yyvsp[-1].TypeVal);
3584 #line 1354 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3585 { // Structure type?
3586 std::vector<const Type*> Elements;
3587 for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-1].TypeList)->begin(),
3588 E = (yyvsp[-1].TypeList)->end(); I != E; ++I)
3589 Elements.push_back(*I);
3591 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
3592 delete (yyvsp[-1].TypeList);
3598 #line 1364 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3599 { // Empty structure type?
3600 (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>()));
3606 #line 1368 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3608 std::vector<const Type*> Elements;
3609 for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-2].TypeList)->begin(),
3610 E = (yyvsp[-2].TypeList)->end(); I != E; ++I)
3611 Elements.push_back(*I);
3613 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true)));
3614 delete (yyvsp[-2].TypeList);
3620 #line 1378 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3621 { // Empty structure type?
3622 (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
3628 #line 1385 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3630 (yyval.TypeWithAttrs).Ty = (yyvsp[-1].TypeVal);
3631 (yyval.TypeWithAttrs).Attrs = (yyvsp[0].ParamAttrs);
3636 #line 1392 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3638 if (!UpRefs.empty())
3639 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
3640 if (!(*(yyvsp[0].TypeVal))->isFirstClassType())
3641 GEN_ERROR("LLVM functions cannot return aggregate types");
3642 (yyval.TypeVal) = (yyvsp[0].TypeVal);
3647 #line 1399 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3649 (yyval.TypeVal) = new PATypeHolder(Type::VoidTy);
3654 #line 1404 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3656 (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
3657 (yyval.TypeWithAttrsList)->push_back((yyvsp[0].TypeWithAttrs));
3663 #line 1409 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3665 ((yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList))->push_back((yyvsp[0].TypeWithAttrs));
3671 #line 1417 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3673 (yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList);
3674 TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet;
3675 TWA.Ty = new PATypeHolder(Type::VoidTy);
3676 (yyval.TypeWithAttrsList)->push_back(TWA);
3682 #line 1424 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3684 (yyval.TypeWithAttrsList) = new TypeWithAttrsList;
3685 TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet;
3686 TWA.Ty = new PATypeHolder(Type::VoidTy);
3687 (yyval.TypeWithAttrsList)->push_back(TWA);
3693 #line 1431 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3695 (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
3701 #line 1439 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3703 (yyval.TypeList) = new std::list<PATypeHolder>();
3704 (yyval.TypeList)->push_back(*(yyvsp[0].TypeVal));
3705 delete (yyvsp[0].TypeVal);
3711 #line 1445 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3713 ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(*(yyvsp[0].TypeVal));
3714 delete (yyvsp[0].TypeVal);
3720 #line 1457 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3721 { // Nonempty unsized arr
3722 if (!UpRefs.empty())
3723 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
3724 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-3].TypeVal)->get());
3726 GEN_ERROR("Cannot make array constant with type: '" +
3727 (*(yyvsp[-3].TypeVal))->getDescription() + "'");
3728 const Type *ETy = ATy->getElementType();
3729 int NumElements = ATy->getNumElements();
3731 // Verify that we have the correct size...
3732 if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
3733 GEN_ERROR("Type mismatch: constant sized array initialized with " +
3734 utostr((yyvsp[-1].ConstVector)->size()) + " arguments, but has size of " +
3735 itostr(NumElements) + "");
3737 // Verify all elements are correct type!
3738 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
3739 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
3740 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
3741 ETy->getDescription() +"' as required!\nIt is of type '"+
3742 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
3745 (yyval.ConstVal) = ConstantArray::get(ATy, *(yyvsp[-1].ConstVector));
3746 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
3752 #line 1485 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3754 if (!UpRefs.empty())
3755 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
3756 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
3758 GEN_ERROR("Cannot make array constant with type: '" +
3759 (*(yyvsp[-2].TypeVal))->getDescription() + "'");
3761 int NumElements = ATy->getNumElements();
3762 if (NumElements != -1 && NumElements != 0)
3763 GEN_ERROR("Type mismatch: constant sized array initialized with 0"
3764 " arguments, but has size of " + itostr(NumElements) +"");
3765 (yyval.ConstVal) = ConstantArray::get(ATy, std::vector<Constant*>());
3766 delete (yyvsp[-2].TypeVal);
3772 #line 1501 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3774 if (!UpRefs.empty())
3775 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
3776 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
3778 GEN_ERROR("Cannot make array constant with type: '" +
3779 (*(yyvsp[-2].TypeVal))->getDescription() + "'");
3781 int NumElements = ATy->getNumElements();
3782 const Type *ETy = ATy->getElementType();
3783 char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
3784 if (NumElements != -1 && NumElements != (EndStr-(yyvsp[0].StrVal)))
3785 GEN_ERROR("Can't build string constant of size " +
3786 itostr((int)(EndStr-(yyvsp[0].StrVal))) +
3787 " when array has size " + itostr(NumElements) + "");
3788 std::vector<Constant*> Vals;
3789 if (ETy == Type::Int8Ty) {
3790 for (unsigned char *C = (unsigned char *)(yyvsp[0].StrVal);
3791 C != (unsigned char*)EndStr; ++C)
3792 Vals.push_back(ConstantInt::get(ETy, *C));
3794 free((yyvsp[0].StrVal));
3795 GEN_ERROR("Cannot build string arrays of non byte sized elements");
3797 free((yyvsp[0].StrVal));
3798 (yyval.ConstVal) = ConstantArray::get(ATy, Vals);
3799 delete (yyvsp[-2].TypeVal);
3805 #line 1530 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3806 { // Nonempty unsized arr
3807 if (!UpRefs.empty())
3808 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
3809 const VectorType *PTy = dyn_cast<VectorType>((yyvsp[-3].TypeVal)->get());
3811 GEN_ERROR("Cannot make packed constant with type: '" +
3812 (*(yyvsp[-3].TypeVal))->getDescription() + "'");
3813 const Type *ETy = PTy->getElementType();
3814 int NumElements = PTy->getNumElements();
3816 // Verify that we have the correct size...
3817 if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
3818 GEN_ERROR("Type mismatch: constant sized packed initialized with " +
3819 utostr((yyvsp[-1].ConstVector)->size()) + " arguments, but has size of " +
3820 itostr(NumElements) + "");
3822 // Verify all elements are correct type!
3823 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
3824 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
3825 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
3826 ETy->getDescription() +"' as required!\nIt is of type '"+
3827 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
3830 (yyval.ConstVal) = ConstantVector::get(PTy, *(yyvsp[-1].ConstVector));
3831 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
3837 #line 1558 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3839 const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal)->get());
3841 GEN_ERROR("Cannot make struct constant with type: '" +
3842 (*(yyvsp[-3].TypeVal))->getDescription() + "'");
3844 if ((yyvsp[-1].ConstVector)->size() != STy->getNumContainedTypes())
3845 GEN_ERROR("Illegal number of initializers for structure type");
3847 // Check to ensure that constants are compatible with the type initializer!
3848 for (unsigned i = 0, e = (yyvsp[-1].ConstVector)->size(); i != e; ++i)
3849 if ((*(yyvsp[-1].ConstVector))[i]->getType() != STy->getElementType(i))
3850 GEN_ERROR("Expected type '" +
3851 STy->getElementType(i)->getDescription() +
3852 "' for element #" + utostr(i) +
3853 " of structure initializer");
3855 // Check to ensure that Type is not packed
3856 if (STy->isPacked())
3857 GEN_ERROR("Unpacked Initializer to vector type '" + STy->getDescription() + "'");
3859 (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[-1].ConstVector));
3860 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
3866 #line 1583 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3868 if (!UpRefs.empty())
3869 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
3870 const StructType *STy = dyn_cast<StructType>((yyvsp[-2].TypeVal)->get());
3872 GEN_ERROR("Cannot make struct constant with type: '" +
3873 (*(yyvsp[-2].TypeVal))->getDescription() + "'");
3875 if (STy->getNumContainedTypes() != 0)
3876 GEN_ERROR("Illegal number of initializers for structure type");
3878 // Check to ensure that Type is not packed
3879 if (STy->isPacked())
3880 GEN_ERROR("Unpacked Initializer to vector type '" + STy->getDescription() + "'");
3882 (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
3883 delete (yyvsp[-2].TypeVal);
3889 #line 1602 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3891 const StructType *STy = dyn_cast<StructType>((yyvsp[-5].TypeVal)->get());
3893 GEN_ERROR("Cannot make struct constant with type: '" +
3894 (*(yyvsp[-5].TypeVal))->getDescription() + "'");
3896 if ((yyvsp[-2].ConstVector)->size() != STy->getNumContainedTypes())
3897 GEN_ERROR("Illegal number of initializers for structure type");
3899 // Check to ensure that constants are compatible with the type initializer!
3900 for (unsigned i = 0, e = (yyvsp[-2].ConstVector)->size(); i != e; ++i)
3901 if ((*(yyvsp[-2].ConstVector))[i]->getType() != STy->getElementType(i))
3902 GEN_ERROR("Expected type '" +
3903 STy->getElementType(i)->getDescription() +
3904 "' for element #" + utostr(i) +
3905 " of structure initializer");
3907 // Check to ensure that Type is packed
3908 if (!STy->isPacked())
3909 GEN_ERROR("Vector initializer to non-vector type '" +
3910 STy->getDescription() + "'");
3912 (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[-2].ConstVector));
3913 delete (yyvsp[-5].TypeVal); delete (yyvsp[-2].ConstVector);
3919 #line 1628 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3921 if (!UpRefs.empty())
3922 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
3923 const StructType *STy = dyn_cast<StructType>((yyvsp[-4].TypeVal)->get());
3925 GEN_ERROR("Cannot make struct constant with type: '" +
3926 (*(yyvsp[-4].TypeVal))->getDescription() + "'");
3928 if (STy->getNumContainedTypes() != 0)
3929 GEN_ERROR("Illegal number of initializers for structure type");
3931 // Check to ensure that Type is packed
3932 if (!STy->isPacked())
3933 GEN_ERROR("Vector initializer to non-vector type '" +
3934 STy->getDescription() + "'");
3936 (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
3937 delete (yyvsp[-4].TypeVal);
3943 #line 1648 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3945 if (!UpRefs.empty())
3946 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
3947 const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
3949 GEN_ERROR("Cannot make null pointer constant with type: '" +
3950 (*(yyvsp[-1].TypeVal))->getDescription() + "'");
3952 (yyval.ConstVal) = ConstantPointerNull::get(PTy);
3953 delete (yyvsp[-1].TypeVal);
3959 #line 1660 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3961 if (!UpRefs.empty())
3962 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
3963 (yyval.ConstVal) = UndefValue::get((yyvsp[-1].TypeVal)->get());
3964 delete (yyvsp[-1].TypeVal);
3970 #line 1667 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3972 if (!UpRefs.empty())
3973 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
3974 const PointerType *Ty = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
3976 GEN_ERROR("Global const reference must be a pointer type");
3978 // ConstExprs can exist in the body of a function, thus creating
3979 // GlobalValues whenever they refer to a variable. Because we are in
3980 // the context of a function, getExistingVal will search the functions
3981 // symbol table instead of the module symbol table for the global symbol,
3982 // which throws things all off. To get around this, we just tell
3983 // getExistingVal that we are at global scope here.
3985 Function *SavedCurFn = CurFun.CurrentFunction;
3986 CurFun.CurrentFunction = 0;
3988 Value *V = getExistingVal(Ty, (yyvsp[0].ValIDVal));
3991 CurFun.CurrentFunction = SavedCurFn;
3993 // If this is an initializer for a constant pointer, which is referencing a
3994 // (currently) undefined variable, create a stub now that shall be replaced
3995 // in the future with the right type of variable.
3998 assert(isa<PointerType>(Ty) && "Globals may only be used as pointers!");
3999 const PointerType *PT = cast<PointerType>(Ty);
4001 // First check to see if the forward references value is already created!
4002 PerModuleInfo::GlobalRefsType::iterator I =
4003 CurModule.GlobalRefs.find(std::make_pair(PT, (yyvsp[0].ValIDVal)));
4005 if (I != CurModule.GlobalRefs.end()) {
4006 V = I->second; // Placeholder already exists, use it...
4007 (yyvsp[0].ValIDVal).destroy();
4010 if ((yyvsp[0].ValIDVal).Type == ValID::GlobalName)
4011 Name = (yyvsp[0].ValIDVal).Name;
4012 else if ((yyvsp[0].ValIDVal).Type != ValID::GlobalID)
4013 GEN_ERROR("Invalid reference to global");
4015 // Create the forward referenced global.
4017 if (const FunctionType *FTy =
4018 dyn_cast<FunctionType>(PT->getElementType())) {
4019 GV = new Function(FTy, GlobalValue::ExternalLinkage, Name,
4020 CurModule.CurrentModule);
4022 GV = new GlobalVariable(PT->getElementType(), false,
4023 GlobalValue::ExternalLinkage, 0,
4024 Name, CurModule.CurrentModule);
4027 // Keep track of the fact that we have a forward ref to recycle it
4028 CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, (yyvsp[0].ValIDVal)), GV));
4033 (yyval.ConstVal) = cast<GlobalValue>(V);
4034 delete (yyvsp[-1].TypeVal); // Free the type handle
4040 #line 1733 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4042 if (!UpRefs.empty())
4043 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
4044 if ((yyvsp[-1].TypeVal)->get() != (yyvsp[0].ConstVal)->getType())
4045 GEN_ERROR("Mismatched types for constant expression: " +
4046 (*(yyvsp[-1].TypeVal))->getDescription() + " and " + (yyvsp[0].ConstVal)->getType()->getDescription());
4047 (yyval.ConstVal) = (yyvsp[0].ConstVal);
4048 delete (yyvsp[-1].TypeVal);
4054 #line 1743 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4056 if (!UpRefs.empty())
4057 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
4058 const Type *Ty = (yyvsp[-1].TypeVal)->get();
4059 if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
4060 GEN_ERROR("Cannot create a null initialized value of this type");
4061 (yyval.ConstVal) = Constant::getNullValue(Ty);
4062 delete (yyvsp[-1].TypeVal);
4068 #line 1753 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4069 { // integral constants
4070 if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val)))
4071 GEN_ERROR("Constant value doesn't fit in type");
4072 (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val), true);
4078 #line 1759 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4079 { // arbitrary precision integer constants
4080 uint32_t BitWidth = cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth();
4081 if ((yyvsp[0].APIntVal)->getBitWidth() > BitWidth) {
4082 GEN_ERROR("Constant value does not fit in type");
4084 (yyvsp[0].APIntVal)->sextOrTrunc(BitWidth);
4085 (yyval.ConstVal) = ConstantInt::get(*(yyvsp[0].APIntVal));
4086 delete (yyvsp[0].APIntVal);
4092 #line 1769 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4093 { // integral constants
4094 if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val)))
4095 GEN_ERROR("Constant value doesn't fit in type");
4096 (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val), false);
4102 #line 1775 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4103 { // arbitrary precision integer constants
4104 uint32_t BitWidth = cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth();
4105 if ((yyvsp[0].APIntVal)->getBitWidth() > BitWidth) {
4106 GEN_ERROR("Constant value does not fit in type");
4108 (yyvsp[0].APIntVal)->zextOrTrunc(BitWidth);
4109 (yyval.ConstVal) = ConstantInt::get(*(yyvsp[0].APIntVal));
4110 delete (yyvsp[0].APIntVal);
4116 #line 1785 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4117 { // Boolean constants
4118 assert(cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth() == 1 && "Not Bool?");
4119 (yyval.ConstVal) = ConstantInt::getTrue();
4125 #line 1790 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4126 { // Boolean constants
4127 assert(cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth() == 1 && "Not Bool?");
4128 (yyval.ConstVal) = ConstantInt::getFalse();
4134 #line 1795 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4135 { // Float & Double constants
4136 if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].FPVal)))
4137 GEN_ERROR("Floating point constant invalid for type");
4138 (yyval.ConstVal) = ConstantFP::get((yyvsp[-1].PrimType), (yyvsp[0].FPVal));
4144 #line 1803 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4146 if (!UpRefs.empty())
4147 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
4148 Constant *Val = (yyvsp[-3].ConstVal);
4149 const Type *DestTy = (yyvsp[-1].TypeVal)->get();
4150 if (!CastInst::castIsValid((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal), DestTy))
4151 GEN_ERROR("invalid cast opcode for cast from '" +
4152 Val->getType()->getDescription() + "' to '" +
4153 DestTy->getDescription() + "'");
4154 (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal), DestTy);
4155 delete (yyvsp[-1].TypeVal);
4160 #line 1815 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4162 if (!isa<PointerType>((yyvsp[-2].ConstVal)->getType()))
4163 GEN_ERROR("GetElementPtr requires a pointer operand");
4166 GetElementPtrInst::getIndexedType((yyvsp[-2].ConstVal)->getType(), &(*(yyvsp[-1].ValueList))[0], (yyvsp[-1].ValueList)->size(),
4169 GEN_ERROR("Index list invalid for constant getelementptr");
4171 SmallVector<Constant*, 8> IdxVec;
4172 for (unsigned i = 0, e = (yyvsp[-1].ValueList)->size(); i != e; ++i)
4173 if (Constant *C = dyn_cast<Constant>((*(yyvsp[-1].ValueList))[i]))
4174 IdxVec.push_back(C);
4176 GEN_ERROR("Indices to constant getelementptr must be constants");
4178 delete (yyvsp[-1].ValueList);
4180 (yyval.ConstVal) = ConstantExpr::getGetElementPtr((yyvsp[-2].ConstVal), &IdxVec[0], IdxVec.size());
4186 #line 1837 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4188 if ((yyvsp[-5].ConstVal)->getType() != Type::Int1Ty)
4189 GEN_ERROR("Select condition must be of boolean type");
4190 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
4191 GEN_ERROR("Select operand types must match");
4192 (yyval.ConstVal) = ConstantExpr::getSelect((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4198 #line 1845 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4200 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
4201 GEN_ERROR("Binary operator types must match");
4203 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4208 #line 1851 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4210 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
4211 GEN_ERROR("Logical operator types must match");
4212 if (!(yyvsp[-3].ConstVal)->getType()->isInteger()) {
4213 if (Instruction::isShift((yyvsp[-5].BinaryOpVal)) || !isa<VectorType>((yyvsp[-3].ConstVal)->getType()) ||
4214 !cast<VectorType>((yyvsp[-3].ConstVal)->getType())->getElementType()->isInteger())
4215 GEN_ERROR("Logical operator requires integral operands");
4217 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4223 #line 1862 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4225 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
4226 GEN_ERROR("icmp operand types must match");
4227 (yyval.ConstVal) = ConstantExpr::getICmp((yyvsp[-5].IPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4232 #line 1867 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4234 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
4235 GEN_ERROR("fcmp operand types must match");
4236 (yyval.ConstVal) = ConstantExpr::getFCmp((yyvsp[-5].FPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4241 #line 1872 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4243 if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
4244 GEN_ERROR("Invalid extractelement operands");
4245 (yyval.ConstVal) = ConstantExpr::getExtractElement((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4251 #line 1878 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4253 if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
4254 GEN_ERROR("Invalid insertelement operands");
4255 (yyval.ConstVal) = ConstantExpr::getInsertElement((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4261 #line 1884 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4263 if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
4264 GEN_ERROR("Invalid shufflevector operands");
4265 (yyval.ConstVal) = ConstantExpr::getShuffleVector((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4271 #line 1893 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4273 ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal));
4279 #line 1897 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4281 (yyval.ConstVector) = new std::vector<Constant*>();
4282 (yyval.ConstVector)->push_back((yyvsp[0].ConstVal));
4288 #line 1905 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4289 { (yyval.BoolVal) = false; ;}
4293 #line 1905 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4294 { (yyval.BoolVal) = true; ;}
4298 #line 1916 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4300 (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
4301 CurModule.ModuleDone();
4307 #line 1921 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4309 (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
4310 CurModule.ModuleDone();
4316 #line 1934 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4317 { CurFun.isDeclare = false; ;}
4321 #line 1934 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4323 CurFun.FunctionDone();
4329 #line 1938 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4330 { CurFun.isDeclare = true; ;}
4334 #line 1938 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4341 #line 1941 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4348 #line 1944 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4350 // Emit an error if there are any unresolved types left.
4351 if (!CurModule.LateResolveTypes.empty()) {
4352 const ValID &DID = CurModule.LateResolveTypes.begin()->first;
4353 if (DID.Type == ValID::LocalName) {
4354 GEN_ERROR("Reference to an undefined type: '"+DID.getName() + "'");
4356 GEN_ERROR("Reference to an undefined type: #" + itostr(DID.Num));
4364 #line 1956 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4366 if (!UpRefs.empty())
4367 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
4368 // Eagerly resolve types. This is not an optimization, this is a
4369 // requirement that is due to the fact that we could have this:
4371 // %list = type { %list * }
4372 // %list = type { %list * } ; repeated type decl
4374 // If types are not resolved eagerly, then the two types will not be
4375 // determined to be the same type!
4377 ResolveTypeTo((yyvsp[-2].StrVal), *(yyvsp[0].TypeVal));
4379 if (!setTypeName(*(yyvsp[0].TypeVal), (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) {
4381 // If this is a named type that is not a redefinition, add it to the slot
4383 CurModule.Types.push_back(*(yyvsp[0].TypeVal));
4386 delete (yyvsp[0].TypeVal);
4392 #line 1980 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4394 ResolveTypeTo((yyvsp[-2].StrVal), (yyvsp[0].PrimType));
4396 if (!setTypeName((yyvsp[0].PrimType), (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) {
4398 // If this is a named type that is not a redefinition, add it to the slot
4400 CurModule.Types.push_back((yyvsp[0].PrimType));
4407 #line 1991 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4409 /* "Externally Visible" Linkage */
4410 if ((yyvsp[0].ConstVal) == 0)
4411 GEN_ERROR("Global value initializer is not a constant");
4412 CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalLinkage,
4413 (yyvsp[-2].Visibility), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal));
4419 #line 1998 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4426 #line 2001 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4428 if ((yyvsp[0].ConstVal) == 0)
4429 GEN_ERROR("Global value initializer is not a constant");
4430 CurGV = ParseGlobalVariable((yyvsp[-4].StrVal), (yyvsp[-3].Linkage), (yyvsp[-2].Visibility), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal));
4436 #line 2006 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4443 #line 2009 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4445 if (!UpRefs.empty())
4446 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
4447 CurGV = ParseGlobalVariable((yyvsp[-4].StrVal), (yyvsp[-3].Linkage), (yyvsp[-2].Visibility), (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
4449 delete (yyvsp[0].TypeVal);
4454 #line 2015 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4462 #line 2019 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4469 #line 2022 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4476 #line 2028 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4478 const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
4479 char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
4480 std::string NewAsm((yyvsp[0].StrVal), EndStr);
4481 free((yyvsp[0].StrVal));
4483 if (AsmSoFar.empty())
4484 CurModule.CurrentModule->setModuleInlineAsm(NewAsm);
4486 CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm);
4492 #line 2041 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4494 CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal));
4495 free((yyvsp[0].StrVal));
4500 #line 2045 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4502 CurModule.CurrentModule->setDataLayout((yyvsp[0].StrVal));
4503 free((yyvsp[0].StrVal));
4508 #line 2052 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4510 CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
4511 free((yyvsp[0].StrVal));
4517 #line 2057 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4519 CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
4520 free((yyvsp[0].StrVal));
4526 #line 2062 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4533 #line 2071 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4535 if (!UpRefs.empty())
4536 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
4537 if (*(yyvsp[-2].TypeVal) == Type::VoidTy)
4538 GEN_ERROR("void typed arguments are invalid");
4539 ArgListEntry E; E.Attrs = (yyvsp[-1].ParamAttrs); E.Ty = (yyvsp[-2].TypeVal); E.Name = (yyvsp[0].StrVal);
4540 (yyval.ArgList) = (yyvsp[-4].ArgList);
4541 (yyvsp[-4].ArgList)->push_back(E);
4547 #line 2081 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4549 if (!UpRefs.empty())
4550 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
4551 if (*(yyvsp[-2].TypeVal) == Type::VoidTy)
4552 GEN_ERROR("void typed arguments are invalid");
4553 ArgListEntry E; E.Attrs = (yyvsp[-1].ParamAttrs); E.Ty = (yyvsp[-2].TypeVal); E.Name = (yyvsp[0].StrVal);
4554 (yyval.ArgList) = new ArgListType;
4555 (yyval.ArgList)->push_back(E);
4561 #line 2092 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4563 (yyval.ArgList) = (yyvsp[0].ArgList);
4569 #line 2096 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4571 (yyval.ArgList) = (yyvsp[-2].ArgList);
4572 struct ArgListEntry E;
4573 E.Ty = new PATypeHolder(Type::VoidTy);
4575 E.Attrs = FunctionType::NoAttributeSet;
4576 (yyval.ArgList)->push_back(E);
4582 #line 2105 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4584 (yyval.ArgList) = new ArgListType;
4585 struct ArgListEntry E;
4586 E.Ty = new PATypeHolder(Type::VoidTy);
4588 E.Attrs = FunctionType::NoAttributeSet;
4589 (yyval.ArgList)->push_back(E);
4595 #line 2114 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4597 (yyval.ArgList) = 0;
4603 #line 2120 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4605 UnEscapeLexed((yyvsp[-6].StrVal));
4606 std::string FunctionName((yyvsp[-6].StrVal));
4607 free((yyvsp[-6].StrVal)); // Free strdup'd memory!
4609 // Check the function result for abstractness if this is a define. We should
4610 // have no abstract types at this point
4611 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved((yyvsp[-7].TypeVal)))
4612 GEN_ERROR("Reference to abstract result: "+ (yyvsp[-7].TypeVal)->get()->getDescription());
4614 std::vector<const Type*> ParamTypeList;
4615 std::vector<FunctionType::ParameterAttributes> ParamAttrs;
4616 ParamAttrs.push_back((yyvsp[-2].ParamAttrs));
4617 if ((yyvsp[-4].ArgList)) { // If there are arguments...
4618 for (ArgListType::iterator I = (yyvsp[-4].ArgList)->begin(); I != (yyvsp[-4].ArgList)->end(); ++I) {
4619 const Type* Ty = I->Ty->get();
4620 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(I->Ty))
4621 GEN_ERROR("Reference to abstract argument: " + Ty->getDescription());
4622 ParamTypeList.push_back(Ty);
4623 if (Ty != Type::VoidTy)
4624 ParamAttrs.push_back(I->Attrs);
4628 bool isVarArg = ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy;
4629 if (isVarArg) ParamTypeList.pop_back();
4631 FunctionType *FT = FunctionType::get(*(yyvsp[-7].TypeVal), ParamTypeList, isVarArg,
4633 const PointerType *PFT = PointerType::get(FT);
4634 delete (yyvsp[-7].TypeVal);
4637 if (!FunctionName.empty()) {
4638 ID = ValID::createGlobalName((char*)FunctionName.c_str());
4640 ID = ValID::createGlobalID(CurModule.Values.size());
4644 // See if this function was forward referenced. If so, recycle the object.
4645 if (GlobalValue *FWRef = CurModule.GetForwardRefForGlobal(PFT, ID)) {
4646 // Move the function to the end of the list, from whereever it was
4647 // previously inserted.
4648 Fn = cast<Function>(FWRef);
4649 CurModule.CurrentModule->getFunctionList().remove(Fn);
4650 CurModule.CurrentModule->getFunctionList().push_back(Fn);
4651 } else if (!FunctionName.empty() && // Merge with an earlier prototype?
4652 (Fn = CurModule.CurrentModule->getFunction(FunctionName))) {
4653 if (Fn->getFunctionType() != FT ) {
4654 // The existing function doesn't have the same type. This is an overload
4656 GEN_ERROR("Overload of function '" + FunctionName + "' not permitted.");
4657 } else if (!CurFun.isDeclare && !Fn->isDeclaration()) {
4658 // Neither the existing or the current function is a declaration and they
4659 // have the same name and same type. Clearly this is a redefinition.
4660 GEN_ERROR("Redefinition of function '" + FunctionName + "'");
4661 } if (Fn->isDeclaration()) {
4662 // Make sure to strip off any argument names so we can't get conflicts.
4663 for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end();
4667 } else { // Not already defined?
4668 Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName,
4669 CurModule.CurrentModule);
4671 InsertValue(Fn, CurModule.Values);
4674 CurFun.FunctionStart(Fn);
4676 if (CurFun.isDeclare) {
4677 // If we have declaration, always overwrite linkage. This will allow us to
4678 // correctly handle cases, when pointer to function is passed as argument to
4679 // another function.
4680 Fn->setLinkage(CurFun.Linkage);
4681 Fn->setVisibility(CurFun.Visibility);
4683 Fn->setCallingConv((yyvsp[-8].UIntVal));
4684 Fn->setAlignment((yyvsp[0].UIntVal));
4685 if ((yyvsp[-1].StrVal)) {
4686 Fn->setSection((yyvsp[-1].StrVal));
4687 free((yyvsp[-1].StrVal));
4690 // Add all of the arguments we parsed to the function...
4691 if ((yyvsp[-4].ArgList)) { // Is null if empty...
4692 if (isVarArg) { // Nuke the last entry
4693 assert((yyvsp[-4].ArgList)->back().Ty->get() == Type::VoidTy && (yyvsp[-4].ArgList)->back().Name == 0 &&
4694 "Not a varargs marker!");
4695 delete (yyvsp[-4].ArgList)->back().Ty;
4696 (yyvsp[-4].ArgList)->pop_back(); // Delete the last entry
4698 Function::arg_iterator ArgIt = Fn->arg_begin();
4699 Function::arg_iterator ArgEnd = Fn->arg_end();
4701 for (ArgListType::iterator I = (yyvsp[-4].ArgList)->begin();
4702 I != (yyvsp[-4].ArgList)->end() && ArgIt != ArgEnd; ++I, ++ArgIt) {
4703 delete I->Ty; // Delete the typeholder...
4704 setValueName(ArgIt, I->Name); // Insert arg into symtab...
4710 delete (yyvsp[-4].ArgList); // We're now done with the argument list
4717 #line 2233 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4719 (yyval.FunctionVal) = CurFun.CurrentFunction;
4721 // Make sure that we keep track of the linkage type even if there was a
4722 // previous "declare".
4723 (yyval.FunctionVal)->setLinkage((yyvsp[-3].Linkage));
4724 (yyval.FunctionVal)->setVisibility((yyvsp[-2].Visibility));
4729 #line 2244 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4731 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
4737 #line 2249 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4739 CurFun.CurrentFunction->setLinkage((yyvsp[-2].Linkage));
4740 CurFun.CurrentFunction->setVisibility((yyvsp[-1].Visibility));
4741 (yyval.FunctionVal) = CurFun.CurrentFunction;
4742 CurFun.FunctionDone();
4748 #line 2261 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4750 (yyval.BoolVal) = false;
4756 #line 2265 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4758 (yyval.BoolVal) = true;
4764 #line 2270 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4765 { // A reference to a direct constant
4766 (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val));
4772 #line 2274 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4774 (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val));
4780 #line 2278 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4781 { // Perhaps it's an FP constant?
4782 (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal));
4788 #line 2282 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4790 (yyval.ValIDVal) = ValID::create(ConstantInt::getTrue());
4796 #line 2286 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4798 (yyval.ValIDVal) = ValID::create(ConstantInt::getFalse());
4804 #line 2290 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4806 (yyval.ValIDVal) = ValID::createNull();
4812 #line 2294 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4814 (yyval.ValIDVal) = ValID::createUndef();
4820 #line 2298 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4821 { // A vector zero constant.
4822 (yyval.ValIDVal) = ValID::createZeroInit();
4828 #line 2302 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4829 { // Nonempty unsized packed vector
4830 const Type *ETy = (*(yyvsp[-1].ConstVector))[0]->getType();
4831 int NumElements = (yyvsp[-1].ConstVector)->size();
4833 VectorType* pt = VectorType::get(ETy, NumElements);
4834 PATypeHolder* PTy = new PATypeHolder(
4842 // Verify all elements are correct type!
4843 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
4844 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
4845 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
4846 ETy->getDescription() +"' as required!\nIt is of type '" +
4847 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
4850 (yyval.ValIDVal) = ValID::create(ConstantVector::get(pt, *(yyvsp[-1].ConstVector)));
4851 delete PTy; delete (yyvsp[-1].ConstVector);
4857 #line 2327 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4859 (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal));
4865 #line 2331 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4867 char *End = UnEscapeLexed((yyvsp[-2].StrVal), true);
4868 std::string AsmStr = std::string((yyvsp[-2].StrVal), End);
4869 End = UnEscapeLexed((yyvsp[0].StrVal), true);
4870 std::string Constraints = std::string((yyvsp[0].StrVal), End);
4871 (yyval.ValIDVal) = ValID::createInlineAsm(AsmStr, Constraints, (yyvsp[-3].BoolVal));
4872 free((yyvsp[-2].StrVal));
4873 free((yyvsp[0].StrVal));
4879 #line 2345 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4880 { // Is it an integer reference...?
4881 (yyval.ValIDVal) = ValID::createLocalID((yyvsp[0].UIntVal));
4887 #line 2349 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4889 (yyval.ValIDVal) = ValID::createGlobalID((yyvsp[0].UIntVal));
4895 #line 2353 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4896 { // Is it a named reference...?
4897 (yyval.ValIDVal) = ValID::createLocalName((yyvsp[0].StrVal));
4903 #line 2357 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4904 { // Is it a named reference...?
4905 (yyval.ValIDVal) = ValID::createGlobalName((yyvsp[0].StrVal));
4911 #line 2369 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4913 if (!UpRefs.empty())
4914 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
4915 (yyval.ValueVal) = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
4916 delete (yyvsp[-1].TypeVal);
4922 #line 2378 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4924 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
4930 #line 2382 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4931 { // Do not allow functions with 0 basic blocks
4932 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
4938 #line 2391 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4940 setValueName((yyvsp[0].TermInstVal), (yyvsp[-1].StrVal));
4942 InsertValue((yyvsp[0].TermInstVal));
4943 (yyvsp[-2].BasicBlockVal)->getInstList().push_back((yyvsp[0].TermInstVal));
4944 (yyval.BasicBlockVal) = (yyvsp[-2].BasicBlockVal);
4950 #line 2400 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4952 if (CastInst *CI1 = dyn_cast<CastInst>((yyvsp[0].InstVal)))
4953 if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0)))
4954 if (CI2->getParent() == 0)
4955 (yyvsp[-1].BasicBlockVal)->getInstList().push_back(CI2);
4956 (yyvsp[-1].BasicBlockVal)->getInstList().push_back((yyvsp[0].InstVal));
4957 (yyval.BasicBlockVal) = (yyvsp[-1].BasicBlockVal);
4963 #line 2409 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4964 { // Empty space between instruction lists
4965 (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalID(CurFun.NextValNum));
4971 #line 2413 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4972 { // Labelled (named) basic block
4973 (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalName((yyvsp[0].StrVal)));
4979 #line 2418 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4980 { // Return with a result...
4981 (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal));
4987 #line 2422 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4988 { // Return with no result...
4989 (yyval.TermInstVal) = new ReturnInst();
4995 #line 2426 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4996 { // Unconditional Branch...
4997 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
4999 (yyval.TermInstVal) = new BranchInst(tmpBB);
5004 #line 2431 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5006 assert(cast<IntegerType>((yyvsp[-7].PrimType))->getBitWidth() == 1 && "Not Bool?");
5007 BasicBlock* tmpBBA = getBBVal((yyvsp[-3].ValIDVal));
5009 BasicBlock* tmpBBB = getBBVal((yyvsp[0].ValIDVal));
5011 Value* tmpVal = getVal(Type::Int1Ty, (yyvsp[-6].ValIDVal));
5013 (yyval.TermInstVal) = new BranchInst(tmpBBA, tmpBBB, tmpVal);
5018 #line 2441 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5020 Value* tmpVal = getVal((yyvsp[-7].PrimType), (yyvsp[-6].ValIDVal));
5022 BasicBlock* tmpBB = getBBVal((yyvsp[-3].ValIDVal));
5024 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[-1].JumpTable)->size());
5025 (yyval.TermInstVal) = S;
5027 std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = (yyvsp[-1].JumpTable)->begin(),
5028 E = (yyvsp[-1].JumpTable)->end();
5029 for (; I != E; ++I) {
5030 if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
5031 S->addCase(CI, I->second);
5033 GEN_ERROR("Switch case is constant, but not a simple integer");
5035 delete (yyvsp[-1].JumpTable);
5041 #line 2460 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5043 Value* tmpVal = getVal((yyvsp[-6].PrimType), (yyvsp[-5].ValIDVal));
5045 BasicBlock* tmpBB = getBBVal((yyvsp[-2].ValIDVal));
5047 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
5048 (yyval.TermInstVal) = S;
5054 #line 2470 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5057 // Handle the short syntax
5058 const PointerType *PFTy = 0;
5059 const FunctionType *Ty = 0;
5060 if (!(PFTy = dyn_cast<PointerType>((yyvsp[-11].TypeVal)->get())) ||
5061 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
5062 // Pull out the types of all of the arguments...
5063 std::vector<const Type*> ParamTypes;
5064 FunctionType::ParamAttrsList ParamAttrs;
5065 ParamAttrs.push_back((yyvsp[-6].ParamAttrs));
5066 for (ValueRefList::iterator I = (yyvsp[-8].ValueRefList)->begin(), E = (yyvsp[-8].ValueRefList)->end(); I != E; ++I) {
5067 const Type *Ty = I->Val->getType();
5068 if (Ty == Type::VoidTy)
5069 GEN_ERROR("Short call syntax cannot be used with varargs");
5070 ParamTypes.push_back(Ty);
5071 ParamAttrs.push_back(I->Attrs);
5074 Ty = FunctionType::get((yyvsp[-11].TypeVal)->get(), ParamTypes, false, ParamAttrs);
5075 PFTy = PointerType::get(Ty);
5078 delete (yyvsp[-11].TypeVal);
5080 Value *V = getVal(PFTy, (yyvsp[-10].ValIDVal)); // Get the function we're calling...
5082 BasicBlock *Normal = getBBVal((yyvsp[-3].ValIDVal));
5084 BasicBlock *Except = getBBVal((yyvsp[0].ValIDVal));
5087 // Check the arguments
5089 if ((yyvsp[-8].ValueRefList)->empty()) { // Has no arguments?
5090 // Make sure no arguments is a good thing!
5091 if (Ty->getNumParams() != 0)
5092 GEN_ERROR("No arguments passed to a function that "
5093 "expects arguments");
5094 } else { // Has arguments?
5095 // Loop through FunctionType's arguments and ensure they are specified
5097 FunctionType::param_iterator I = Ty->param_begin();
5098 FunctionType::param_iterator E = Ty->param_end();
5099 ValueRefList::iterator ArgI = (yyvsp[-8].ValueRefList)->begin(), ArgE = (yyvsp[-8].ValueRefList)->end();
5101 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
5102 if (ArgI->Val->getType() != *I)
5103 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
5104 (*I)->getDescription() + "'");
5105 Args.push_back(ArgI->Val);
5108 if (Ty->isVarArg()) {
5110 for (; ArgI != ArgE; ++ArgI)
5111 Args.push_back(ArgI->Val); // push the remaining varargs
5112 } else if (I != E || ArgI != ArgE)
5113 GEN_ERROR("Invalid number of parameters detected");
5116 // Create the InvokeInst
5117 InvokeInst *II = new InvokeInst(V, Normal, Except, &Args[0], Args.size());
5118 II->setCallingConv((yyvsp[-12].UIntVal));
5119 (yyval.TermInstVal) = II;
5120 delete (yyvsp[-8].ValueRefList);
5126 #line 2538 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5128 (yyval.TermInstVal) = new UnwindInst();
5134 #line 2542 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5136 (yyval.TermInstVal) = new UnreachableInst();
5142 #line 2549 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5144 (yyval.JumpTable) = (yyvsp[-5].JumpTable);
5145 Constant *V = cast<Constant>(getExistingVal((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
5148 GEN_ERROR("May only switch on a constant pool value");
5150 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
5152 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
5157 #line 2560 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5159 (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
5160 Constant *V = cast<Constant>(getExistingVal((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
5164 GEN_ERROR("May only switch on a constant pool value");
5166 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
5168 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
5173 #line 2573 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5175 // Is this definition named?? if so, assign the name...
5176 setValueName((yyvsp[0].InstVal), (yyvsp[-1].StrVal));
5178 InsertValue((yyvsp[0].InstVal));
5179 (yyval.InstVal) = (yyvsp[0].InstVal);
5185 #line 2583 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5186 { // Used for PHI nodes
5187 if (!UpRefs.empty())
5188 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-5].TypeVal))->getDescription());
5189 (yyval.PHIList) = new std::list<std::pair<Value*, BasicBlock*> >();
5190 Value* tmpVal = getVal(*(yyvsp[-5].TypeVal), (yyvsp[-3].ValIDVal));
5192 BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
5194 (yyval.PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
5195 delete (yyvsp[-5].TypeVal);
5200 #line 2594 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5202 (yyval.PHIList) = (yyvsp[-6].PHIList);
5203 Value* tmpVal = getVal((yyvsp[-6].PHIList)->front().first->getType(), (yyvsp[-3].ValIDVal));
5205 BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
5207 (yyvsp[-6].PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
5212 #line 2604 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5214 if (!UpRefs.empty())
5215 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
5216 // Used for call and invoke instructions
5217 (yyval.ValueRefList) = new ValueRefList();
5218 ValueRefListEntry E; E.Attrs = (yyvsp[0].ParamAttrs); E.Val = getVal((yyvsp[-2].TypeVal)->get(), (yyvsp[-1].ValIDVal));
5219 (yyval.ValueRefList)->push_back(E);
5220 delete (yyvsp[-2].TypeVal);
5225 #line 2613 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5227 if (!UpRefs.empty())
5228 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
5229 (yyval.ValueRefList) = (yyvsp[-4].ValueRefList);
5230 ValueRefListEntry E; E.Attrs = (yyvsp[0].ParamAttrs); E.Val = getVal((yyvsp[-2].TypeVal)->get(), (yyvsp[-1].ValIDVal));
5231 (yyval.ValueRefList)->push_back(E);
5232 delete (yyvsp[-2].TypeVal);
5238 #line 2622 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5239 { (yyval.ValueRefList) = new ValueRefList(); ;}
5243 #line 2625 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5244 { (yyval.ValueList) = new std::vector<Value*>(); ;}
5248 #line 2626 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5250 (yyval.ValueList) = (yyvsp[-2].ValueList);
5251 (yyval.ValueList)->push_back((yyvsp[0].ValueVal));
5257 #line 2633 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5259 (yyval.BoolVal) = true;
5265 #line 2637 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5267 (yyval.BoolVal) = false;
5273 #line 2642 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5275 if (!UpRefs.empty())
5276 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
5277 if (!(*(yyvsp[-3].TypeVal))->isInteger() && !(*(yyvsp[-3].TypeVal))->isFloatingPoint() &&
5278 !isa<VectorType>((*(yyvsp[-3].TypeVal)).get()))
5280 "Arithmetic operator requires integer, FP, or packed operands");
5281 if (isa<VectorType>((*(yyvsp[-3].TypeVal)).get()) &&
5282 ((yyvsp[-4].BinaryOpVal) == Instruction::URem ||
5283 (yyvsp[-4].BinaryOpVal) == Instruction::SRem ||
5284 (yyvsp[-4].BinaryOpVal) == Instruction::FRem))
5285 GEN_ERROR("Remainder not supported on vector types");
5286 Value* val1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
5288 Value* val2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
5290 (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), val1, val2);
5291 if ((yyval.InstVal) == 0)
5292 GEN_ERROR("binary operator returned null");
5293 delete (yyvsp[-3].TypeVal);
5298 #line 2663 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5300 if (!UpRefs.empty())
5301 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
5302 if (!(*(yyvsp[-3].TypeVal))->isInteger()) {
5303 if (Instruction::isShift((yyvsp[-4].BinaryOpVal)) || !isa<VectorType>((yyvsp[-3].TypeVal)->get()) ||
5304 !cast<VectorType>((yyvsp[-3].TypeVal)->get())->getElementType()->isInteger())
5305 GEN_ERROR("Logical operator requires integral operands");
5307 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
5309 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
5311 (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), tmpVal1, tmpVal2);
5312 if ((yyval.InstVal) == 0)
5313 GEN_ERROR("binary operator returned null");
5314 delete (yyvsp[-3].TypeVal);
5319 #line 2680 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5321 if (!UpRefs.empty())
5322 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
5323 if (isa<VectorType>((*(yyvsp[-3].TypeVal)).get()))
5324 GEN_ERROR("Vector types not supported by icmp instruction");
5325 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
5327 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
5329 (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].IPredicate), tmpVal1, tmpVal2);
5330 if ((yyval.InstVal) == 0)
5331 GEN_ERROR("icmp operator returned null");
5332 delete (yyvsp[-3].TypeVal);
5337 #line 2694 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5339 if (!UpRefs.empty())
5340 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
5341 if (isa<VectorType>((*(yyvsp[-3].TypeVal)).get()))
5342 GEN_ERROR("Vector types not supported by fcmp instruction");
5343 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
5345 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
5347 (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].FPredicate), tmpVal1, tmpVal2);
5348 if ((yyval.InstVal) == 0)
5349 GEN_ERROR("fcmp operator returned null");
5350 delete (yyvsp[-3].TypeVal);
5355 #line 2708 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5357 if (!UpRefs.empty())
5358 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
5359 Value* Val = (yyvsp[-2].ValueVal);
5360 const Type* DestTy = (yyvsp[0].TypeVal)->get();
5361 if (!CastInst::castIsValid((yyvsp[-3].CastOpVal), Val, DestTy))
5362 GEN_ERROR("invalid cast opcode for cast from '" +
5363 Val->getType()->getDescription() + "' to '" +
5364 DestTy->getDescription() + "'");
5365 (yyval.InstVal) = CastInst::create((yyvsp[-3].CastOpVal), Val, DestTy);
5366 delete (yyvsp[0].TypeVal);
5371 #line 2720 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5373 if ((yyvsp[-4].ValueVal)->getType() != Type::Int1Ty)
5374 GEN_ERROR("select condition must be boolean");
5375 if ((yyvsp[-2].ValueVal)->getType() != (yyvsp[0].ValueVal)->getType())
5376 GEN_ERROR("select value types should match");
5377 (yyval.InstVal) = new SelectInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
5383 #line 2728 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5385 if (!UpRefs.empty())
5386 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
5387 (yyval.InstVal) = new VAArgInst((yyvsp[-2].ValueVal), *(yyvsp[0].TypeVal));
5388 delete (yyvsp[0].TypeVal);
5394 #line 2735 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5396 if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
5397 GEN_ERROR("Invalid extractelement operands");
5398 (yyval.InstVal) = new ExtractElementInst((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
5404 #line 2741 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5406 if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
5407 GEN_ERROR("Invalid insertelement operands");
5408 (yyval.InstVal) = new InsertElementInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
5414 #line 2747 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5416 if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
5417 GEN_ERROR("Invalid shufflevector operands");
5418 (yyval.InstVal) = new ShuffleVectorInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
5424 #line 2753 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5426 const Type *Ty = (yyvsp[0].PHIList)->front().first->getType();
5427 if (!Ty->isFirstClassType())
5428 GEN_ERROR("PHI node operands must be of first class type");
5429 (yyval.InstVal) = new PHINode(Ty);
5430 ((PHINode*)(yyval.InstVal))->reserveOperandSpace((yyvsp[0].PHIList)->size());
5431 while ((yyvsp[0].PHIList)->begin() != (yyvsp[0].PHIList)->end()) {
5432 if ((yyvsp[0].PHIList)->front().first->getType() != Ty)
5433 GEN_ERROR("All elements of a PHI node must be of the same type");
5434 cast<PHINode>((yyval.InstVal))->addIncoming((yyvsp[0].PHIList)->front().first, (yyvsp[0].PHIList)->front().second);
5435 (yyvsp[0].PHIList)->pop_front();
5437 delete (yyvsp[0].PHIList); // Free the list...
5443 #line 2769 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5446 // Handle the short syntax
5447 const PointerType *PFTy = 0;
5448 const FunctionType *Ty = 0;
5449 if (!(PFTy = dyn_cast<PointerType>((yyvsp[-5].TypeVal)->get())) ||
5450 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
5451 // Pull out the types of all of the arguments...
5452 std::vector<const Type*> ParamTypes;
5453 FunctionType::ParamAttrsList ParamAttrs;
5454 ParamAttrs.push_back((yyvsp[0].ParamAttrs));
5455 for (ValueRefList::iterator I = (yyvsp[-2].ValueRefList)->begin(), E = (yyvsp[-2].ValueRefList)->end(); I != E; ++I) {
5456 const Type *Ty = I->Val->getType();
5457 if (Ty == Type::VoidTy)
5458 GEN_ERROR("Short call syntax cannot be used with varargs");
5459 ParamTypes.push_back(Ty);
5460 ParamAttrs.push_back(I->Attrs);
5463 Ty = FunctionType::get((yyvsp[-5].TypeVal)->get(), ParamTypes, false, ParamAttrs);
5464 PFTy = PointerType::get(Ty);
5467 Value *V = getVal(PFTy, (yyvsp[-4].ValIDVal)); // Get the function we're calling...
5470 // Check the arguments
5472 if ((yyvsp[-2].ValueRefList)->empty()) { // Has no arguments?
5473 // Make sure no arguments is a good thing!
5474 if (Ty->getNumParams() != 0)
5475 GEN_ERROR("No arguments passed to a function that "
5476 "expects arguments");
5477 } else { // Has arguments?
5478 // Loop through FunctionType's arguments and ensure they are specified
5481 FunctionType::param_iterator I = Ty->param_begin();
5482 FunctionType::param_iterator E = Ty->param_end();
5483 ValueRefList::iterator ArgI = (yyvsp[-2].ValueRefList)->begin(), ArgE = (yyvsp[-2].ValueRefList)->end();
5485 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
5486 if (ArgI->Val->getType() != *I)
5487 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
5488 (*I)->getDescription() + "'");
5489 Args.push_back(ArgI->Val);
5491 if (Ty->isVarArg()) {
5493 for (; ArgI != ArgE; ++ArgI)
5494 Args.push_back(ArgI->Val); // push the remaining varargs
5495 } else if (I != E || ArgI != ArgE)
5496 GEN_ERROR("Invalid number of parameters detected");
5498 // Create the call node
5499 CallInst *CI = new CallInst(V, &Args[0], Args.size());
5500 CI->setTailCall((yyvsp[-7].BoolVal));
5501 CI->setCallingConv((yyvsp[-6].UIntVal));
5502 (yyval.InstVal) = CI;
5503 delete (yyvsp[-2].ValueRefList);
5504 delete (yyvsp[-5].TypeVal);
5510 #line 2832 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5512 (yyval.InstVal) = (yyvsp[0].InstVal);
5518 #line 2837 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5520 (yyval.BoolVal) = true;
5526 #line 2841 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5528 (yyval.BoolVal) = false;
5534 #line 2848 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5536 if (!UpRefs.empty())
5537 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
5538 (yyval.InstVal) = new MallocInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
5539 delete (yyvsp[-1].TypeVal);
5545 #line 2855 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5547 if (!UpRefs.empty())
5548 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
5549 Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
5551 (yyval.InstVal) = new MallocInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
5552 delete (yyvsp[-4].TypeVal);
5557 #line 2863 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5559 if (!UpRefs.empty())
5560 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
5561 (yyval.InstVal) = new AllocaInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
5562 delete (yyvsp[-1].TypeVal);
5568 #line 2870 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5570 if (!UpRefs.empty())
5571 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
5572 Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
5574 (yyval.InstVal) = new AllocaInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
5575 delete (yyvsp[-4].TypeVal);
5580 #line 2878 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5582 if (!isa<PointerType>((yyvsp[0].ValueVal)->getType()))
5583 GEN_ERROR("Trying to free nonpointer type " +
5584 (yyvsp[0].ValueVal)->getType()->getDescription() + "");
5585 (yyval.InstVal) = new FreeInst((yyvsp[0].ValueVal));
5591 #line 2886 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5593 if (!UpRefs.empty())
5594 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
5595 if (!isa<PointerType>((yyvsp[-1].TypeVal)->get()))
5596 GEN_ERROR("Can't load from nonpointer type: " +
5597 (*(yyvsp[-1].TypeVal))->getDescription());
5598 if (!cast<PointerType>((yyvsp[-1].TypeVal)->get())->getElementType()->isFirstClassType())
5599 GEN_ERROR("Can't load from pointer of non-first-class type: " +
5600 (*(yyvsp[-1].TypeVal))->getDescription());
5601 Value* tmpVal = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
5603 (yyval.InstVal) = new LoadInst(tmpVal, "", (yyvsp[-3].BoolVal));
5604 delete (yyvsp[-1].TypeVal);
5609 #line 2900 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5611 if (!UpRefs.empty())
5612 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
5613 const PointerType *PT = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
5615 GEN_ERROR("Can't store to a nonpointer type: " +
5616 (*(yyvsp[-1].TypeVal))->getDescription());
5617 const Type *ElTy = PT->getElementType();
5618 if (ElTy != (yyvsp[-3].ValueVal)->getType())
5619 GEN_ERROR("Can't store '" + (yyvsp[-3].ValueVal)->getType()->getDescription() +
5620 "' into space of type '" + ElTy->getDescription() + "'");
5622 Value* tmpVal = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
5624 (yyval.InstVal) = new StoreInst((yyvsp[-3].ValueVal), tmpVal, (yyvsp[-5].BoolVal));
5625 delete (yyvsp[-1].TypeVal);
5630 #line 2917 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5632 if (!UpRefs.empty())
5633 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
5634 if (!isa<PointerType>((yyvsp[-2].TypeVal)->get()))
5635 GEN_ERROR("getelementptr insn requires pointer operand");
5637 if (!GetElementPtrInst::getIndexedType(*(yyvsp[-2].TypeVal), &(*(yyvsp[0].ValueList))[0], (yyvsp[0].ValueList)->size(), true))
5638 GEN_ERROR("Invalid getelementptr indices for type '" +
5639 (*(yyvsp[-2].TypeVal))->getDescription()+ "'");
5640 Value* tmpVal = getVal(*(yyvsp[-2].TypeVal), (yyvsp[-1].ValIDVal));
5642 (yyval.InstVal) = new GetElementPtrInst(tmpVal, &(*(yyvsp[0].ValueList))[0], (yyvsp[0].ValueList)->size());
5643 delete (yyvsp[-2].TypeVal);
5644 delete (yyvsp[0].ValueList);
5652 /* Line 1126 of yacc.c. */
5653 #line 5654 "llvmAsmParser.tab.c"
5659 YY_STACK_PRINT (yyss, yyssp);
5664 /* Now `shift' the result of the reduction. Determine what state
5665 that goes to, based on the state we popped back to and the rule
5666 number reduced by. */
5670 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
5671 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
5672 yystate = yytable[yystate];
5674 yystate = yydefgoto[yyn - YYNTOKENS];
5679 /*------------------------------------.
5680 | yyerrlab -- here on detecting error |
5681 `------------------------------------*/
5683 /* If not already recovering from an error, report this error. */
5688 yyn = yypact[yystate];
5690 if (YYPACT_NINF < yyn && yyn < YYLAST)
5692 int yytype = YYTRANSLATE (yychar);
5693 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
5694 YYSIZE_T yysize = yysize0;
5696 int yysize_overflow = 0;
5698 # define YYERROR_VERBOSE_ARGS_MAXIMUM 5
5699 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
5703 /* This is so xgettext sees the translatable formats that are
5704 constructed on the fly. */
5705 YY_("syntax error, unexpected %s");
5706 YY_("syntax error, unexpected %s, expecting %s");
5707 YY_("syntax error, unexpected %s, expecting %s or %s");
5708 YY_("syntax error, unexpected %s, expecting %s or %s or %s");
5709 YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
5713 static char const yyunexpected[] = "syntax error, unexpected %s";
5714 static char const yyexpecting[] = ", expecting %s";
5715 static char const yyor[] = " or %s";
5716 char yyformat[sizeof yyunexpected
5717 + sizeof yyexpecting - 1
5718 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
5719 * (sizeof yyor - 1))];
5720 char const *yyprefix = yyexpecting;
5722 /* Start YYX at -YYN if negative to avoid negative indexes in
5724 int yyxbegin = yyn < 0 ? -yyn : 0;
5726 /* Stay within bounds of both yycheck and yytname. */
5727 int yychecklim = YYLAST - yyn;
5728 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
5731 yyarg[0] = yytname[yytype];
5732 yyfmt = yystpcpy (yyformat, yyunexpected);
5734 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
5735 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
5737 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
5741 yyformat[sizeof yyunexpected - 1] = '\0';
5744 yyarg[yycount++] = yytname[yyx];
5745 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
5746 yysize_overflow |= yysize1 < yysize;
5748 yyfmt = yystpcpy (yyfmt, yyprefix);
5752 yyf = YY_(yyformat);
5753 yysize1 = yysize + yystrlen (yyf);
5754 yysize_overflow |= yysize1 < yysize;
5757 if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM)
5758 yymsg = (char *) YYSTACK_ALLOC (yysize);
5761 /* Avoid sprintf, as that infringes on the user's name space.
5762 Don't have undefined behavior even if the translation
5763 produced a string with the wrong number of "%s"s. */
5766 while ((*yyp = *yyf))
5768 if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
5770 yyp += yytnamerr (yyp, yyarg[yyi++]);
5780 YYSTACK_FREE (yymsg);
5784 yyerror (YY_("syntax error"));
5785 goto yyexhaustedlab;
5789 #endif /* YYERROR_VERBOSE */
5790 yyerror (YY_("syntax error"));
5795 if (yyerrstatus == 3)
5797 /* If just tried and failed to reuse look-ahead token after an
5798 error, discard it. */
5800 if (yychar <= YYEOF)
5802 /* Return failure if at end of input. */
5803 if (yychar == YYEOF)
5808 yydestruct ("Error: discarding", yytoken, &yylval);
5813 /* Else will try to reuse look-ahead token after shifting the error
5818 /*---------------------------------------------------.
5819 | yyerrorlab -- error raised explicitly by YYERROR. |
5820 `---------------------------------------------------*/
5823 /* Pacify compilers like GCC when the user code never invokes
5824 YYERROR and the label yyerrorlab therefore never appears in user
5835 /*-------------------------------------------------------------.
5836 | yyerrlab1 -- common code for both syntax error and YYERROR. |
5837 `-------------------------------------------------------------*/
5839 yyerrstatus = 3; /* Each real token shifted decrements this. */
5843 yyn = yypact[yystate];
5844 if (yyn != YYPACT_NINF)
5847 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
5855 /* Pop the current state because it cannot handle the error token. */
5860 yydestruct ("Error: popping", yystos[yystate], yyvsp);
5863 YY_STACK_PRINT (yyss, yyssp);
5872 /* Shift the error token. */
5873 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
5879 /*-------------------------------------.
5880 | yyacceptlab -- YYACCEPT comes here. |
5881 `-------------------------------------*/
5886 /*-----------------------------------.
5887 | yyabortlab -- YYABORT comes here. |
5888 `-----------------------------------*/
5894 /*-------------------------------------------------.
5895 | yyexhaustedlab -- memory exhaustion comes here. |
5896 `-------------------------------------------------*/
5898 yyerror (YY_("memory exhausted"));
5904 if (yychar != YYEOF && yychar != YYEMPTY)
5905 yydestruct ("Cleanup: discarding lookahead",
5907 while (yyssp != yyss)
5909 yydestruct ("Cleanup: popping",
5910 yystos[*yyssp], yyvsp);
5915 YYSTACK_FREE (yyss);
5921 #line 2934 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
5924 // common code from the two 'RunVMAsmParser' functions
5925 static Module* RunParser(Module * M) {
5927 llvmAsmlineno = 1; // Reset the current line number...
5928 CurModule.CurrentModule = M;
5933 // Check to make sure the parser succeeded
5936 delete ParserResult;
5940 // Check to make sure that parsing produced a result
5944 // Reset ParserResult variable while saving its value for the result.
5945 Module *Result = ParserResult;
5951 void llvm::GenerateError(const std::string &message, int LineNo) {
5952 if (LineNo == -1) LineNo = llvmAsmlineno;
5953 // TODO: column number in exception
5955 TheParseError->setError(CurFilename, message, LineNo);
5959 int yyerror(const char *ErrorMsg) {
5961 = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename)
5962 + ":" + utostr((unsigned) llvmAsmlineno) + ": ";
5963 std::string errMsg = where + "error: " + std::string(ErrorMsg);
5964 if (yychar != YYEMPTY && yychar != 0)
5965 errMsg += " while reading token: '" + std::string(llvmAsmtext, llvmAsmleng)+
5967 GenerateError(errMsg);