2 /* A Bison parser, made from /Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y
3 by GNU Bison version 1.28 */
5 #define YYBISON 1 /* Identify Bison output. */
7 #define yyparse llvmAsmparse
8 #define yylex llvmAsmlex
9 #define yyerror llvmAsmerror
10 #define yylval llvmAsmlval
11 #define yychar llvmAsmchar
12 #define yydebug llvmAsmdebug
13 #define yynerrs llvmAsmnerrs
14 #define ESINT64VAL 257
15 #define EUINT64VAL 258
16 #define ESAPINTVAL 259
17 #define EUAPINTVAL 260
18 #define LOCALVAL_ID 261
19 #define GLOBALVAL_ID 262
30 #define STRINGCONSTANT 273
31 #define ATSTRINGCONSTANT 274
32 #define ZEROINITIALIZER 275
43 #define THREAD_LOCAL 286
54 #define EXTERN_WEAK 297
65 #define SIDEEFFECT 308
68 #define FASTCC_TOK 311
69 #define COLDCC_TOK 312
70 #define X86_STDCALLCC_TOK 313
71 #define X86_FASTCALLCC_TOK 314
72 #define DATALAYOUT 315
78 #define UNREACHABLE 321
121 #define GETELEMENTPTR 364
137 #define EXTRACTELEMENT 380
138 #define INSERTELEMENT 381
139 #define SHUFFLEVECTOR 382
147 #line 14 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
149 #include "ParserInternals.h"
150 #include "llvm/CallingConv.h"
151 #include "llvm/InlineAsm.h"
152 #include "llvm/Instructions.h"
153 #include "llvm/Module.h"
154 #include "llvm/ValueSymbolTable.h"
155 #include "llvm/Support/GetElementPtrTypeIterator.h"
156 #include "llvm/Support/CommandLine.h"
157 #include "llvm/ADT/SmallVector.h"
158 #include "llvm/ADT/STLExtras.h"
159 #include "llvm/Support/MathExtras.h"
160 #include "llvm/Support/Streams.h"
169 // The following is a gross hack. In order to rid the libAsmParser library of
170 // exceptions, we have to have a way of getting the yyparse function to go into
171 // an error situation. So, whenever we want an error to occur, the GenerateError
172 // function (see bottom of file) sets TriggerError. Then, at the end of each
173 // production in the grammer we use CHECK_FOR_ERROR which will invoke YYERROR
174 // (a goto) to put YACC in error state. Furthermore, several calls to
175 // GenerateError are made from inside productions and they must simulate the
176 // previous exception behavior by exiting the production immediately. We have
177 // replaced these with the GEN_ERROR macro which calls GeneratError and then
178 // immediately invokes YYERROR. This would be so much cleaner if it was a
179 // recursive descent parser.
180 static bool TriggerError = false;
181 #define CHECK_FOR_ERROR { if (TriggerError) { TriggerError = false; YYABORT; } }
182 #define GEN_ERROR(msg) { GenerateError(msg); YYERROR; }
184 int yyerror(const char *ErrorMsg); // Forward declarations to prevent "implicit
185 int yylex(); // declaration" of xxx warnings.
189 std::string CurFilename;
192 Debug("debug-yacc", cl::desc("Print yacc debug state changes"),
193 cl::Hidden, cl::init(false));
196 using namespace llvm;
198 static Module *ParserResult;
200 // DEBUG_UPREFS - Define this symbol if you want to enable debugging output
201 // relating to upreferences in the input stream.
203 //#define DEBUG_UPREFS 1
205 #define UR_OUT(X) cerr << X
210 #define YYERROR_VERBOSE 1
212 static GlobalVariable *CurGV;
215 // This contains info used when building the body of a function. It is
216 // destroyed when the function is completed.
218 typedef std::vector<Value *> ValueList; // Numbered defs
221 ResolveDefinitions(ValueList &LateResolvers, ValueList *FutureLateResolvers=0);
223 static struct PerModuleInfo {
224 Module *CurrentModule;
225 ValueList Values; // Module level numbered definitions
226 ValueList LateResolveValues;
227 std::vector<PATypeHolder> Types;
228 std::map<ValID, PATypeHolder> LateResolveTypes;
230 /// PlaceHolderInfo - When temporary placeholder objects are created, remember
231 /// how they were referenced and on which line of the input they came from so
232 /// that we can resolve them later and print error messages as appropriate.
233 std::map<Value*, std::pair<ValID, int> > PlaceHolderInfo;
235 // GlobalRefs - This maintains a mapping between <Type, ValID>'s and forward
236 // references to global values. Global values may be referenced before they
237 // are defined, and if so, the temporary object that they represent is held
238 // here. This is used for forward references of GlobalValues.
240 typedef std::map<std::pair<const PointerType *,
241 ValID>, GlobalValue*> GlobalRefsType;
242 GlobalRefsType GlobalRefs;
245 // If we could not resolve some functions at function compilation time
246 // (calls to functions before they are defined), resolve them now... Types
247 // are resolved when the constant pool has been completely parsed.
249 ResolveDefinitions(LateResolveValues);
253 // Check to make sure that all global value forward references have been
256 if (!GlobalRefs.empty()) {
257 std::string UndefinedReferences = "Unresolved global references exist:\n";
259 for (GlobalRefsType::iterator I = GlobalRefs.begin(), E =GlobalRefs.end();
261 UndefinedReferences += " " + I->first.first->getDescription() + " " +
262 I->first.second.getName() + "\n";
264 GenerateError(UndefinedReferences);
268 Values.clear(); // Clear out function local definitions
273 // GetForwardRefForGlobal - Check to see if there is a forward reference
274 // for this global. If so, remove it from the GlobalRefs map and return it.
275 // If not, just return null.
276 GlobalValue *GetForwardRefForGlobal(const PointerType *PTy, ValID ID) {
277 // Check to see if there is a forward reference to this global variable...
278 // if there is, eliminate it and patch the reference to use the new def'n.
279 GlobalRefsType::iterator I = GlobalRefs.find(std::make_pair(PTy, ID));
280 GlobalValue *Ret = 0;
281 if (I != GlobalRefs.end()) {
288 bool TypeIsUnresolved(PATypeHolder* PATy) {
289 // If it isn't abstract, its resolved
290 const Type* Ty = PATy->get();
291 if (!Ty->isAbstract())
293 // Traverse the type looking for abstract types. If it isn't abstract then
294 // we don't need to traverse that leg of the type.
295 std::vector<const Type*> WorkList, SeenList;
296 WorkList.push_back(Ty);
297 while (!WorkList.empty()) {
298 const Type* Ty = WorkList.back();
299 SeenList.push_back(Ty);
301 if (const OpaqueType* OpTy = dyn_cast<OpaqueType>(Ty)) {
302 // Check to see if this is an unresolved type
303 std::map<ValID, PATypeHolder>::iterator I = LateResolveTypes.begin();
304 std::map<ValID, PATypeHolder>::iterator E = LateResolveTypes.end();
305 for ( ; I != E; ++I) {
306 if (I->second.get() == OpTy)
309 } else if (const SequentialType* SeqTy = dyn_cast<SequentialType>(Ty)) {
310 const Type* TheTy = SeqTy->getElementType();
311 if (TheTy->isAbstract() && TheTy != Ty) {
312 std::vector<const Type*>::iterator I = SeenList.begin(),
318 WorkList.push_back(TheTy);
320 } else if (const StructType* StrTy = dyn_cast<StructType>(Ty)) {
321 for (unsigned i = 0; i < StrTy->getNumElements(); ++i) {
322 const Type* TheTy = StrTy->getElementType(i);
323 if (TheTy->isAbstract() && TheTy != Ty) {
324 std::vector<const Type*>::iterator I = SeenList.begin(),
330 WorkList.push_back(TheTy);
339 static struct PerFunctionInfo {
340 Function *CurrentFunction; // Pointer to current function being created
342 ValueList Values; // Keep track of #'d definitions
344 ValueList LateResolveValues;
345 bool isDeclare; // Is this function a forward declararation?
346 GlobalValue::LinkageTypes Linkage; // Linkage for forward declaration.
347 GlobalValue::VisibilityTypes Visibility;
349 /// BBForwardRefs - When we see forward references to basic blocks, keep
350 /// track of them here.
351 std::map<ValID, BasicBlock*> BBForwardRefs;
353 inline PerFunctionInfo() {
356 Linkage = GlobalValue::ExternalLinkage;
357 Visibility = GlobalValue::DefaultVisibility;
360 inline void FunctionStart(Function *M) {
365 void FunctionDone() {
366 // Any forward referenced blocks left?
367 if (!BBForwardRefs.empty()) {
368 GenerateError("Undefined reference to label " +
369 BBForwardRefs.begin()->second->getName());
373 // Resolve all forward references now.
374 ResolveDefinitions(LateResolveValues, &CurModule.LateResolveValues);
376 Values.clear(); // Clear out function local definitions
377 BBForwardRefs.clear();
380 Linkage = GlobalValue::ExternalLinkage;
381 Visibility = GlobalValue::DefaultVisibility;
383 } CurFun; // Info for the current function...
385 static bool inFunctionScope() { return CurFun.CurrentFunction != 0; }
388 //===----------------------------------------------------------------------===//
389 // Code to handle definitions of all the types
390 //===----------------------------------------------------------------------===//
392 static void InsertValue(Value *V, ValueList &ValueTab = CurFun.Values) {
393 // Things that have names or are void typed don't get slot numbers
394 if (V->hasName() || (V->getType() == Type::VoidTy))
397 // In the case of function values, we have to allow for the forward reference
398 // of basic blocks, which are included in the numbering. Consequently, we keep
399 // track of the next insertion location with NextValNum. When a BB gets
400 // inserted, it could change the size of the CurFun.Values vector.
401 if (&ValueTab == &CurFun.Values) {
402 if (ValueTab.size() <= CurFun.NextValNum)
403 ValueTab.resize(CurFun.NextValNum+1);
404 ValueTab[CurFun.NextValNum++] = V;
407 // For all other lists, its okay to just tack it on the back of the vector.
408 ValueTab.push_back(V);
411 static const Type *getTypeVal(const ValID &D, bool DoNotImprovise = false) {
413 case ValID::LocalID: // Is it a numbered definition?
414 // Module constants occupy the lowest numbered slots...
415 if (D.Num < CurModule.Types.size())
416 return CurModule.Types[D.Num];
418 case ValID::LocalName: // Is it a named definition?
419 if (const Type *N = CurModule.CurrentModule->getTypeByName(D.Name)) {
420 D.destroy(); // Free old strdup'd memory...
425 GenerateError("Internal parser error: Invalid symbol type reference");
429 // If we reached here, we referenced either a symbol that we don't know about
430 // or an id number that hasn't been read yet. We may be referencing something
431 // forward, so just create an entry to be resolved later and get to it...
433 if (DoNotImprovise) return 0; // Do we just want a null to be returned?
436 if (inFunctionScope()) {
437 if (D.Type == ValID::LocalName) {
438 GenerateError("Reference to an undefined type: '" + D.getName() + "'");
441 GenerateError("Reference to an undefined type: #" + utostr(D.Num));
446 std::map<ValID, PATypeHolder>::iterator I =CurModule.LateResolveTypes.find(D);
447 if (I != CurModule.LateResolveTypes.end())
450 Type *Typ = OpaqueType::get();
451 CurModule.LateResolveTypes.insert(std::make_pair(D, Typ));
455 // getExistingVal - Look up the value specified by the provided type and
456 // the provided ValID. If the value exists and has already been defined, return
457 // it. Otherwise return null.
459 static Value *getExistingVal(const Type *Ty, const ValID &D) {
460 if (isa<FunctionType>(Ty)) {
461 GenerateError("Functions are not values and "
462 "must be referenced as pointers");
467 case ValID::LocalID: { // Is it a numbered definition?
468 // Check that the number is within bounds.
469 if (D.Num >= CurFun.Values.size())
471 Value *Result = CurFun.Values[D.Num];
472 if (Ty != Result->getType()) {
473 GenerateError("Numbered value (%" + utostr(D.Num) + ") of type '" +
474 Result->getType()->getDescription() + "' does not match "
475 "expected type, '" + Ty->getDescription() + "'");
480 case ValID::GlobalID: { // Is it a numbered definition?
481 if (D.Num >= CurModule.Values.size())
483 Value *Result = CurModule.Values[D.Num];
484 if (Ty != Result->getType()) {
485 GenerateError("Numbered value (@" + utostr(D.Num) + ") of type '" +
486 Result->getType()->getDescription() + "' does not match "
487 "expected type, '" + Ty->getDescription() + "'");
493 case ValID::LocalName: { // Is it a named definition?
494 if (!inFunctionScope())
496 ValueSymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable();
497 Value *N = SymTab.lookup(D.Name);
500 if (N->getType() != Ty)
503 D.destroy(); // Free old strdup'd memory...
506 case ValID::GlobalName: { // Is it a named definition?
507 ValueSymbolTable &SymTab = CurModule.CurrentModule->getValueSymbolTable();
508 Value *N = SymTab.lookup(D.Name);
511 if (N->getType() != Ty)
514 D.destroy(); // Free old strdup'd memory...
518 // Check to make sure that "Ty" is an integral type, and that our
519 // value will fit into the specified type...
520 case ValID::ConstSIntVal: // Is it a constant pool reference??
521 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
522 GenerateError("Signed integral constant '" +
523 itostr(D.ConstPool64) + "' is invalid for type '" +
524 Ty->getDescription() + "'");
527 return ConstantInt::get(Ty, D.ConstPool64, true);
529 case ValID::ConstUIntVal: // Is it an unsigned const pool reference?
530 if (!ConstantInt::isValueValidForType(Ty, D.UConstPool64)) {
531 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
532 GenerateError("Integral constant '" + utostr(D.UConstPool64) +
533 "' is invalid or out of range");
535 } else { // This is really a signed reference. Transmogrify.
536 return ConstantInt::get(Ty, D.ConstPool64, true);
539 return ConstantInt::get(Ty, D.UConstPool64);
542 case ValID::ConstFPVal: // Is it a floating point const pool reference?
543 if (!ConstantFP::isValueValidForType(Ty, D.ConstPoolFP)) {
544 GenerateError("FP constant invalid for type");
547 return ConstantFP::get(Ty, D.ConstPoolFP);
549 case ValID::ConstNullVal: // Is it a null value?
550 if (!isa<PointerType>(Ty)) {
551 GenerateError("Cannot create a a non pointer null");
554 return ConstantPointerNull::get(cast<PointerType>(Ty));
556 case ValID::ConstUndefVal: // Is it an undef value?
557 return UndefValue::get(Ty);
559 case ValID::ConstZeroVal: // Is it a zero value?
560 return Constant::getNullValue(Ty);
562 case ValID::ConstantVal: // Fully resolved constant?
563 if (D.ConstantValue->getType() != Ty) {
564 GenerateError("Constant expression type different from required type");
567 return D.ConstantValue;
569 case ValID::InlineAsmVal: { // Inline asm expression
570 const PointerType *PTy = dyn_cast<PointerType>(Ty);
571 const FunctionType *FTy =
572 PTy ? dyn_cast<FunctionType>(PTy->getElementType()) : 0;
573 if (!FTy || !InlineAsm::Verify(FTy, D.IAD->Constraints)) {
574 GenerateError("Invalid type for asm constraint string");
577 InlineAsm *IA = InlineAsm::get(FTy, D.IAD->AsmString, D.IAD->Constraints,
578 D.IAD->HasSideEffects);
579 D.destroy(); // Free InlineAsmDescriptor.
583 assert(0 && "Unhandled case!");
587 assert(0 && "Unhandled case!");
591 // getVal - This function is identical to getExistingVal, except that if a
592 // value is not already defined, it "improvises" by creating a placeholder var
593 // that looks and acts just like the requested variable. When the value is
594 // defined later, all uses of the placeholder variable are replaced with the
597 static Value *getVal(const Type *Ty, const ValID &ID) {
598 if (Ty == Type::LabelTy) {
599 GenerateError("Cannot use a basic block here");
603 // See if the value has already been defined.
604 Value *V = getExistingVal(Ty, ID);
606 if (TriggerError) return 0;
608 if (!Ty->isFirstClassType() && !isa<OpaqueType>(Ty)) {
609 GenerateError("Invalid use of a composite type");
613 // If we reached here, we referenced either a symbol that we don't know about
614 // or an id number that hasn't been read yet. We may be referencing something
615 // forward, so just create an entry to be resolved later and get to it...
617 V = new Argument(Ty);
619 // Remember where this forward reference came from. FIXME, shouldn't we try
620 // to recycle these things??
621 CurModule.PlaceHolderInfo.insert(std::make_pair(V, std::make_pair(ID,
624 if (inFunctionScope())
625 InsertValue(V, CurFun.LateResolveValues);
627 InsertValue(V, CurModule.LateResolveValues);
631 /// defineBBVal - This is a definition of a new basic block with the specified
632 /// identifier which must be the same as CurFun.NextValNum, if its numeric.
633 static BasicBlock *defineBBVal(const ValID &ID) {
634 assert(inFunctionScope() && "Can't get basic block at global scope!");
638 // First, see if this was forward referenced
640 std::map<ValID, BasicBlock*>::iterator BBI = CurFun.BBForwardRefs.find(ID);
641 if (BBI != CurFun.BBForwardRefs.end()) {
643 // The forward declaration could have been inserted anywhere in the
644 // function: insert it into the correct place now.
645 CurFun.CurrentFunction->getBasicBlockList().remove(BB);
646 CurFun.CurrentFunction->getBasicBlockList().push_back(BB);
648 // We're about to erase the entry, save the key so we can clean it up.
649 ValID Tmp = BBI->first;
651 // Erase the forward ref from the map as its no longer "forward"
652 CurFun.BBForwardRefs.erase(ID);
654 // The key has been removed from the map but so we don't want to leave
655 // strdup'd memory around so destroy it too.
658 // If its a numbered definition, bump the number and set the BB value.
659 if (ID.Type == ValID::LocalID) {
660 assert(ID.Num == CurFun.NextValNum && "Invalid new block number");
668 // We haven't seen this BB before and its first mention is a definition.
669 // Just create it and return it.
670 std::string Name (ID.Type == ValID::LocalName ? ID.Name : "");
671 BB = new BasicBlock(Name, CurFun.CurrentFunction);
672 if (ID.Type == ValID::LocalID) {
673 assert(ID.Num == CurFun.NextValNum && "Invalid new block number");
677 ID.destroy(); // Free strdup'd memory
681 /// getBBVal - get an existing BB value or create a forward reference for it.
683 static BasicBlock *getBBVal(const ValID &ID) {
684 assert(inFunctionScope() && "Can't get basic block at global scope!");
688 std::map<ValID, BasicBlock*>::iterator BBI = CurFun.BBForwardRefs.find(ID);
689 if (BBI != CurFun.BBForwardRefs.end()) {
691 } if (ID.Type == ValID::LocalName) {
692 std::string Name = ID.Name;
693 Value *N = CurFun.CurrentFunction->getValueSymbolTable().lookup(Name);
695 if (N->getType()->getTypeID() == Type::LabelTyID)
696 BB = cast<BasicBlock>(N);
698 GenerateError("Reference to label '" + Name + "' is actually of type '"+
699 N->getType()->getDescription() + "'");
700 } else if (ID.Type == ValID::LocalID) {
701 if (ID.Num < CurFun.NextValNum && ID.Num < CurFun.Values.size()) {
702 if (CurFun.Values[ID.Num]->getType()->getTypeID() == Type::LabelTyID)
703 BB = cast<BasicBlock>(CurFun.Values[ID.Num]);
705 GenerateError("Reference to label '%" + utostr(ID.Num) +
706 "' is actually of type '"+
707 CurFun.Values[ID.Num]->getType()->getDescription() + "'");
710 GenerateError("Illegal label reference " + ID.getName());
714 // If its already been defined, return it now.
716 ID.destroy(); // Free strdup'd memory.
720 // Otherwise, this block has not been seen before, create it.
722 if (ID.Type == ValID::LocalName)
724 BB = new BasicBlock(Name, CurFun.CurrentFunction);
726 // Insert it in the forward refs map.
727 CurFun.BBForwardRefs[ID] = BB;
733 //===----------------------------------------------------------------------===//
734 // Code to handle forward references in instructions
735 //===----------------------------------------------------------------------===//
737 // This code handles the late binding needed with statements that reference
738 // values not defined yet... for example, a forward branch, or the PHI node for
741 // This keeps a table (CurFun.LateResolveValues) of all such forward references
742 // and back patchs after we are done.
745 // ResolveDefinitions - If we could not resolve some defs at parsing
746 // time (forward branches, phi functions for loops, etc...) resolve the
750 ResolveDefinitions(ValueList &LateResolvers, ValueList *FutureLateResolvers) {
751 // Loop over LateResolveDefs fixing up stuff that couldn't be resolved
752 while (!LateResolvers.empty()) {
753 Value *V = LateResolvers.back();
754 LateResolvers.pop_back();
756 std::map<Value*, std::pair<ValID, int> >::iterator PHI =
757 CurModule.PlaceHolderInfo.find(V);
758 assert(PHI != CurModule.PlaceHolderInfo.end() && "Placeholder error!");
760 ValID &DID = PHI->second.first;
762 Value *TheRealValue = getExistingVal(V->getType(), DID);
766 V->replaceAllUsesWith(TheRealValue);
768 CurModule.PlaceHolderInfo.erase(PHI);
769 } else if (FutureLateResolvers) {
770 // Functions have their unresolved items forwarded to the module late
772 InsertValue(V, *FutureLateResolvers);
774 if (DID.Type == ValID::LocalName || DID.Type == ValID::GlobalName) {
775 GenerateError("Reference to an invalid definition: '" +DID.getName()+
776 "' of type '" + V->getType()->getDescription() + "'",
780 GenerateError("Reference to an invalid definition: #" +
781 itostr(DID.Num) + " of type '" +
782 V->getType()->getDescription() + "'",
788 LateResolvers.clear();
791 // ResolveTypeTo - A brand new type was just declared. This means that (if
792 // name is not null) things referencing Name can be resolved. Otherwise, things
793 // refering to the number can be resolved. Do this now.
795 static void ResolveTypeTo(char *Name, const Type *ToTy) {
797 if (Name) D = ValID::createLocalName(Name);
798 else D = ValID::createLocalID(CurModule.Types.size());
800 std::map<ValID, PATypeHolder>::iterator I =
801 CurModule.LateResolveTypes.find(D);
802 if (I != CurModule.LateResolveTypes.end()) {
803 ((DerivedType*)I->second.get())->refineAbstractTypeTo(ToTy);
804 CurModule.LateResolveTypes.erase(I);
808 // setValueName - Set the specified value to the name given. The name may be
809 // null potentially, in which case this is a noop. The string passed in is
810 // assumed to be a malloc'd string buffer, and is free'd by this function.
812 static void setValueName(Value *V, char *NameStr) {
813 if (!NameStr) return;
814 std::string Name(NameStr); // Copy string
815 free(NameStr); // Free old string
817 if (V->getType() == Type::VoidTy) {
818 GenerateError("Can't assign name '" + Name+"' to value with void type");
822 assert(inFunctionScope() && "Must be in function scope!");
823 ValueSymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable();
824 if (ST.lookup(Name)) {
825 GenerateError("Redefinition of value '" + Name + "' of type '" +
826 V->getType()->getDescription() + "'");
834 /// ParseGlobalVariable - Handle parsing of a global. If Initializer is null,
835 /// this is a declaration, otherwise it is a definition.
836 static GlobalVariable *
837 ParseGlobalVariable(char *NameStr,
838 GlobalValue::LinkageTypes Linkage,
839 GlobalValue::VisibilityTypes Visibility,
840 bool isConstantGlobal, const Type *Ty,
841 Constant *Initializer, bool IsThreadLocal) {
842 if (isa<FunctionType>(Ty)) {
843 GenerateError("Cannot declare global vars of function type");
847 const PointerType *PTy = PointerType::get(Ty);
851 Name = NameStr; // Copy string
852 free(NameStr); // Free old string
855 // See if this global value was forward referenced. If so, recycle the
859 ID = ValID::createGlobalName((char*)Name.c_str());
861 ID = ValID::createGlobalID(CurModule.Values.size());
864 if (GlobalValue *FWGV = CurModule.GetForwardRefForGlobal(PTy, ID)) {
865 // Move the global to the end of the list, from whereever it was
866 // previously inserted.
867 GlobalVariable *GV = cast<GlobalVariable>(FWGV);
868 CurModule.CurrentModule->getGlobalList().remove(GV);
869 CurModule.CurrentModule->getGlobalList().push_back(GV);
870 GV->setInitializer(Initializer);
871 GV->setLinkage(Linkage);
872 GV->setVisibility(Visibility);
873 GV->setConstant(isConstantGlobal);
874 GV->setThreadLocal(IsThreadLocal);
875 InsertValue(GV, CurModule.Values);
879 // If this global has a name
881 // if the global we're parsing has an initializer (is a definition) and
882 // has external linkage.
883 if (Initializer && Linkage != GlobalValue::InternalLinkage)
884 // If there is already a global with external linkage with this name
885 if (CurModule.CurrentModule->getGlobalVariable(Name, false)) {
886 // If we allow this GVar to get created, it will be renamed in the
887 // symbol table because it conflicts with an existing GVar. We can't
888 // allow redefinition of GVars whose linking indicates that their name
889 // must stay the same. Issue the error.
890 GenerateError("Redefinition of global variable named '" + Name +
891 "' of type '" + Ty->getDescription() + "'");
896 // Otherwise there is no existing GV to use, create one now.
898 new GlobalVariable(Ty, isConstantGlobal, Linkage, Initializer, Name,
899 CurModule.CurrentModule, IsThreadLocal);
900 GV->setVisibility(Visibility);
901 InsertValue(GV, CurModule.Values);
905 // setTypeName - Set the specified type to the name given. The name may be
906 // null potentially, in which case this is a noop. The string passed in is
907 // assumed to be a malloc'd string buffer, and is freed by this function.
909 // This function returns true if the type has already been defined, but is
910 // allowed to be redefined in the specified context. If the name is a new name
911 // for the type plane, it is inserted and false is returned.
912 static bool setTypeName(const Type *T, char *NameStr) {
913 assert(!inFunctionScope() && "Can't give types function-local names!");
914 if (NameStr == 0) return false;
916 std::string Name(NameStr); // Copy string
917 free(NameStr); // Free old string
919 // We don't allow assigning names to void type
920 if (T == Type::VoidTy) {
921 GenerateError("Can't assign name '" + Name + "' to the void type");
925 // Set the type name, checking for conflicts as we do so.
926 bool AlreadyExists = CurModule.CurrentModule->addTypeName(Name, T);
928 if (AlreadyExists) { // Inserting a name that is already defined???
929 const Type *Existing = CurModule.CurrentModule->getTypeByName(Name);
930 assert(Existing && "Conflict but no matching type?!");
932 // There is only one case where this is allowed: when we are refining an
933 // opaque type. In this case, Existing will be an opaque type.
934 if (const OpaqueType *OpTy = dyn_cast<OpaqueType>(Existing)) {
935 // We ARE replacing an opaque type!
936 const_cast<OpaqueType*>(OpTy)->refineAbstractTypeTo(T);
940 // Otherwise, this is an attempt to redefine a type. That's okay if
941 // the redefinition is identical to the original. This will be so if
942 // Existing and T point to the same Type object. In this one case we
943 // allow the equivalent redefinition.
944 if (Existing == T) return true; // Yes, it's equal.
946 // Any other kind of (non-equivalent) redefinition is an error.
947 GenerateError("Redefinition of type named '" + Name + "' of type '" +
948 T->getDescription() + "'");
954 //===----------------------------------------------------------------------===//
955 // Code for handling upreferences in type names...
958 // TypeContains - Returns true if Ty directly contains E in it.
960 static bool TypeContains(const Type *Ty, const Type *E) {
961 return std::find(Ty->subtype_begin(), Ty->subtype_end(),
962 E) != Ty->subtype_end();
967 // NestingLevel - The number of nesting levels that need to be popped before
968 // this type is resolved.
969 unsigned NestingLevel;
971 // LastContainedTy - This is the type at the current binding level for the
972 // type. Every time we reduce the nesting level, this gets updated.
973 const Type *LastContainedTy;
975 // UpRefTy - This is the actual opaque type that the upreference is
979 UpRefRecord(unsigned NL, OpaqueType *URTy)
980 : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) {}
984 // UpRefs - A list of the outstanding upreferences that need to be resolved.
985 static std::vector<UpRefRecord> UpRefs;
987 /// HandleUpRefs - Every time we finish a new layer of types, this function is
988 /// called. It loops through the UpRefs vector, which is a list of the
989 /// currently active types. For each type, if the up reference is contained in
990 /// the newly completed type, we decrement the level count. When the level
991 /// count reaches zero, the upreferenced type is the type that is passed in:
992 /// thus we can complete the cycle.
994 static PATypeHolder HandleUpRefs(const Type *ty) {
995 // If Ty isn't abstract, or if there are no up-references in it, then there is
996 // nothing to resolve here.
997 if (!ty->isAbstract() || UpRefs.empty()) return ty;
1000 UR_OUT("Type '" << Ty->getDescription() <<
1001 "' newly formed. Resolving upreferences.\n" <<
1002 UpRefs.size() << " upreferences active!\n");
1004 // If we find any resolvable upreferences (i.e., those whose NestingLevel goes
1005 // to zero), we resolve them all together before we resolve them to Ty. At
1006 // the end of the loop, if there is anything to resolve to Ty, it will be in
1008 OpaqueType *TypeToResolve = 0;
1010 for (unsigned i = 0; i != UpRefs.size(); ++i) {
1011 UR_OUT(" UR#" << i << " - TypeContains(" << Ty->getDescription() << ", "
1012 << UpRefs[i].second->getDescription() << ") = "
1013 << (TypeContains(Ty, UpRefs[i].second) ? "true" : "false") << "\n");
1014 if (TypeContains(Ty, UpRefs[i].LastContainedTy)) {
1015 // Decrement level of upreference
1016 unsigned Level = --UpRefs[i].NestingLevel;
1017 UpRefs[i].LastContainedTy = Ty;
1018 UR_OUT(" Uplevel Ref Level = " << Level << "\n");
1019 if (Level == 0) { // Upreference should be resolved!
1020 if (!TypeToResolve) {
1021 TypeToResolve = UpRefs[i].UpRefTy;
1023 UR_OUT(" * Resolving upreference for "
1024 << UpRefs[i].second->getDescription() << "\n";
1025 std::string OldName = UpRefs[i].UpRefTy->getDescription());
1026 UpRefs[i].UpRefTy->refineAbstractTypeTo(TypeToResolve);
1027 UR_OUT(" * Type '" << OldName << "' refined upreference to: "
1028 << (const void*)Ty << ", " << Ty->getDescription() << "\n");
1030 UpRefs.erase(UpRefs.begin()+i); // Remove from upreference list...
1031 --i; // Do not skip the next element...
1036 if (TypeToResolve) {
1037 UR_OUT(" * Resolving upreference for "
1038 << UpRefs[i].second->getDescription() << "\n";
1039 std::string OldName = TypeToResolve->getDescription());
1040 TypeToResolve->refineAbstractTypeTo(Ty);
1046 //===----------------------------------------------------------------------===//
1047 // RunVMAsmParser - Define an interface to this parser
1048 //===----------------------------------------------------------------------===//
1050 static Module* RunParser(Module * M);
1052 Module *llvm::RunVMAsmParser(const std::string &Filename, FILE *F) {
1055 CurFilename = Filename;
1056 return RunParser(new Module(CurFilename));
1059 Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) {
1060 set_scan_string(AsmString);
1062 CurFilename = "from_memory";
1064 return RunParser(new Module (CurFilename));
1066 return RunParser(M);
1071 #line 938 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
1073 llvm::Module *ModuleVal;
1074 llvm::Function *FunctionVal;
1075 llvm::BasicBlock *BasicBlockVal;
1076 llvm::TerminatorInst *TermInstVal;
1077 llvm::Instruction *InstVal;
1078 llvm::Constant *ConstVal;
1080 const llvm::Type *PrimType;
1081 std::list<llvm::PATypeHolder> *TypeList;
1082 llvm::PATypeHolder *TypeVal;
1083 llvm::Value *ValueVal;
1084 std::vector<llvm::Value*> *ValueList;
1085 llvm::ArgListType *ArgList;
1086 llvm::TypeWithAttrs TypeWithAttrs;
1087 llvm::TypeWithAttrsList *TypeWithAttrsList;
1088 llvm::ValueRefList *ValueRefList;
1090 // Represent the RHS of PHI node
1091 std::list<std::pair<llvm::Value*,
1092 llvm::BasicBlock*> > *PHIList;
1093 std::vector<std::pair<llvm::Constant*, llvm::BasicBlock*> > *JumpTable;
1094 std::vector<llvm::Constant*> *ConstVector;
1096 llvm::GlobalValue::LinkageTypes Linkage;
1097 llvm::GlobalValue::VisibilityTypes Visibility;
1098 uint16_t ParamAttrs;
1099 llvm::APInt *APIntVal;
1107 char *StrVal; // This memory is strdup'd!
1108 llvm::ValID ValIDVal; // strdup'd memory maybe!
1110 llvm::Instruction::BinaryOps BinaryOpVal;
1111 llvm::Instruction::TermOps TermOpVal;
1112 llvm::Instruction::MemoryOps MemOpVal;
1113 llvm::Instruction::CastOps CastOpVal;
1114 llvm::Instruction::OtherOps OtherOpVal;
1115 llvm::ICmpInst::Predicate IPredicate;
1116 llvm::FCmpInst::Predicate FPredicate;
1129 #define YYFLAG -32768
1130 #define YYNTBASE 149
1132 #define YYTRANSLATE(x) ((unsigned)(x) <= 388 ? yytranslate[x] : 227)
1134 static const short yytranslate[] = { 0,
1135 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1136 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1137 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1138 2, 2, 2, 2, 2, 2, 2, 2, 2, 139,
1139 140, 137, 2, 136, 2, 2, 2, 2, 2, 2,
1140 2, 2, 2, 2, 2, 2, 2, 2, 2, 144,
1141 135, 145, 2, 2, 2, 2, 2, 2, 2, 2,
1142 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1143 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1144 141, 138, 143, 2, 2, 2, 2, 2, 148, 2,
1145 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1146 2, 2, 2, 2, 2, 2, 2, 2, 2, 142,
1147 2, 2, 146, 2, 147, 2, 2, 2, 2, 2,
1148 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1149 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1150 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1151 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1152 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1153 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1154 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1155 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1156 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1157 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1158 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1159 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1160 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
1161 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
1162 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
1163 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
1164 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
1165 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
1166 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
1167 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
1168 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
1169 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
1170 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
1171 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
1172 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
1173 127, 128, 129, 130, 131, 132, 133, 134
1177 static const short yyprhs[] = { 0,
1178 0, 2, 4, 6, 8, 10, 12, 14, 16, 18,
1179 20, 22, 24, 26, 28, 30, 32, 34, 36, 38,
1180 40, 42, 44, 46, 48, 50, 52, 54, 56, 58,
1181 60, 62, 64, 66, 68, 70, 72, 74, 76, 78,
1182 80, 82, 84, 86, 88, 90, 92, 94, 96, 98,
1183 100, 102, 104, 106, 108, 110, 112, 114, 116, 118,
1184 119, 122, 123, 125, 127, 130, 131, 133, 135, 137,
1185 139, 141, 143, 145, 147, 148, 150, 151, 153, 155,
1186 156, 158, 160, 162, 164, 165, 167, 169, 171, 173,
1187 175, 178, 180, 182, 184, 186, 187, 190, 192, 194,
1188 196, 197, 200, 201, 204, 205, 209, 212, 213, 215,
1189 216, 220, 222, 225, 227, 229, 231, 233, 235, 237,
1190 240, 242, 245, 251, 257, 263, 269, 273, 276, 282,
1191 287, 290, 292, 294, 296, 300, 302, 306, 308, 309,
1192 311, 315, 320, 324, 328, 333, 338, 342, 349, 355,
1193 358, 361, 364, 367, 370, 373, 376, 379, 382, 385,
1194 388, 391, 398, 404, 413, 420, 427, 435, 443, 450,
1195 459, 468, 472, 474, 476, 478, 480, 481, 483, 484,
1196 486, 489, 490, 494, 495, 499, 503, 507, 511, 512,
1197 520, 521, 530, 531, 540, 543, 547, 549, 553, 557,
1198 561, 565, 567, 568, 574, 578, 580, 584, 586, 587,
1199 597, 599, 601, 606, 608, 610, 613, 617, 618, 620,
1200 622, 624, 626, 628, 630, 632, 634, 636, 640, 642,
1201 648, 650, 652, 654, 656, 658, 660, 663, 666, 669,
1202 673, 676, 677, 679, 682, 685, 689, 699, 709, 718,
1203 733, 735, 737, 744, 750, 753, 760, 768, 772, 778,
1204 779, 780, 784, 787, 789, 795, 801, 808, 815, 820,
1205 827, 832, 837, 844, 851, 854, 863, 865, 867, 868,
1206 872, 879, 883, 890, 893, 899, 907
1209 static const short yyrhs[] = { 68,
1210 0, 69, 0, 70, 0, 71, 0, 72, 0, 73,
1211 0, 74, 0, 75, 0, 76, 0, 80, 0, 81,
1212 0, 82, 0, 77, 0, 78, 0, 79, 0, 111,
1213 0, 112, 0, 113, 0, 114, 0, 115, 0, 116,
1214 0, 117, 0, 118, 0, 119, 0, 120, 0, 121,
1215 0, 122, 0, 85, 0, 86, 0, 87, 0, 88,
1216 0, 89, 0, 90, 0, 91, 0, 92, 0, 93,
1217 0, 94, 0, 95, 0, 96, 0, 97, 0, 98,
1218 0, 99, 0, 100, 0, 101, 0, 102, 0, 103,
1219 0, 104, 0, 91, 0, 92, 0, 93, 0, 94,
1220 0, 22, 0, 23, 0, 11, 0, 12, 0, 13,
1221 0, 16, 0, 19, 0, 156, 0, 0, 156, 135,
1222 0, 0, 17, 0, 20, 0, 159, 135, 0, 0,
1223 37, 0, 39, 0, 38, 0, 40, 0, 42, 0,
1224 41, 0, 43, 0, 45, 0, 0, 134, 0, 0,
1225 41, 0, 43, 0, 0, 37, 0, 38, 0, 39,
1226 0, 42, 0, 0, 56, 0, 57, 0, 58, 0,
1227 59, 0, 60, 0, 55, 4, 0, 112, 0, 113,
1228 0, 130, 0, 131, 0, 0, 168, 167, 0, 129,
1229 0, 132, 0, 167, 0, 0, 170, 169, 0, 0,
1230 48, 4, 0, 0, 136, 48, 4, 0, 30, 19,
1231 0, 0, 173, 0, 0, 136, 176, 175, 0, 173,
1232 0, 48, 4, 0, 11, 0, 12, 0, 13, 0,
1233 14, 0, 44, 0, 177, 0, 178, 137, 0, 211,
1234 0, 138, 4, 0, 178, 139, 182, 140, 170, 0,
1235 10, 139, 182, 140, 170, 0, 141, 4, 142, 178,
1236 143, 0, 144, 4, 142, 178, 145, 0, 146, 183,
1237 147, 0, 146, 147, 0, 144, 146, 183, 147, 145,
1238 0, 144, 146, 147, 145, 0, 178, 168, 0, 178,
1239 0, 10, 0, 179, 0, 181, 136, 179, 0, 181,
1240 0, 181, 136, 34, 0, 34, 0, 0, 178, 0,
1241 183, 136, 178, 0, 178, 141, 186, 143, 0, 178,
1242 141, 143, 0, 178, 148, 19, 0, 178, 144, 186,
1243 145, 0, 178, 146, 186, 147, 0, 178, 146, 147,
1244 0, 178, 144, 146, 186, 147, 145, 0, 178, 144,
1245 146, 147, 145, 0, 178, 35, 0, 178, 36, 0,
1246 178, 211, 0, 178, 185, 0, 178, 21, 0, 154,
1247 3, 0, 154, 5, 0, 154, 4, 0, 154, 6,
1248 0, 11, 22, 0, 11, 23, 0, 155, 9, 0,
1249 151, 139, 184, 33, 178, 140, 0, 110, 139, 184,
1250 222, 140, 0, 124, 139, 184, 136, 184, 136, 184,
1251 140, 0, 149, 139, 184, 136, 184, 140, 0, 150,
1252 139, 184, 136, 184, 140, 0, 83, 152, 139, 184,
1253 136, 184, 140, 0, 84, 153, 139, 184, 136, 184,
1254 140, 0, 126, 139, 184, 136, 184, 140, 0, 127,
1255 139, 184, 136, 184, 136, 184, 140, 0, 128, 139,
1256 184, 136, 184, 136, 184, 140, 0, 186, 136, 184,
1257 0, 184, 0, 28, 0, 29, 0, 32, 0, 0,
1258 190, 0, 0, 191, 0, 190, 191, 0, 0, 27,
1259 192, 207, 0, 0, 26, 193, 208, 0, 53, 52,
1260 197, 0, 158, 15, 178, 0, 158, 15, 10, 0,
1261 0, 160, 163, 188, 187, 184, 194, 175, 0, 0,
1262 160, 161, 163, 188, 187, 184, 195, 175, 0, 0,
1263 160, 162, 163, 188, 187, 178, 196, 175, 0, 46,
1264 198, 0, 49, 135, 199, 0, 19, 0, 47, 135,
1265 19, 0, 61, 135, 19, 0, 141, 200, 143, 0,
1266 200, 136, 19, 0, 19, 0, 0, 201, 136, 178,
1267 168, 157, 0, 178, 168, 157, 0, 201, 0, 201,
1268 136, 34, 0, 34, 0, 0, 166, 180, 159, 139,
1269 202, 140, 170, 174, 171, 0, 24, 0, 146, 0,
1270 165, 163, 203, 204, 0, 25, 0, 147, 0, 214,
1271 206, 0, 164, 163, 203, 0, 0, 54, 0, 3,
1272 0, 4, 0, 9, 0, 22, 0, 23, 0, 35,
1273 0, 36, 0, 21, 0, 144, 186, 145, 0, 185,
1274 0, 52, 209, 19, 136, 19, 0, 7, 0, 8,
1275 0, 156, 0, 159, 0, 211, 0, 210, 0, 178,
1276 212, 0, 214, 215, 0, 205, 215, 0, 216, 158,
1277 217, 0, 216, 219, 0, 0, 18, 0, 62, 213,
1278 0, 62, 10, 0, 63, 14, 212, 0, 63, 11,
1279 212, 136, 14, 212, 136, 14, 212, 0, 64, 154,
1280 212, 136, 14, 212, 141, 218, 143, 0, 64, 154,
1281 212, 136, 14, 212, 141, 143, 0, 65, 166, 180,
1282 212, 139, 221, 140, 170, 33, 14, 212, 66, 14,
1283 212, 0, 66, 0, 67, 0, 218, 154, 210, 136,
1284 14, 212, 0, 154, 210, 136, 14, 212, 0, 158,
1285 224, 0, 178, 141, 212, 136, 212, 143, 0, 220,
1286 136, 141, 212, 136, 212, 143, 0, 178, 212, 168,
1287 0, 221, 136, 178, 212, 168, 0, 0, 0, 222,
1288 136, 213, 0, 51, 50, 0, 50, 0, 149, 178,
1289 212, 136, 212, 0, 150, 178, 212, 136, 212, 0,
1290 83, 152, 178, 212, 136, 212, 0, 84, 153, 178,
1291 212, 136, 212, 0, 151, 213, 33, 178, 0, 124,
1292 213, 136, 213, 136, 213, 0, 125, 213, 136, 178,
1293 0, 126, 213, 136, 213, 0, 127, 213, 136, 213,
1294 136, 213, 0, 128, 213, 136, 213, 136, 213, 0,
1295 123, 220, 0, 223, 166, 180, 212, 139, 221, 140,
1296 170, 0, 226, 0, 31, 0, 0, 105, 178, 172,
1297 0, 105, 178, 136, 11, 212, 172, 0, 106, 178,
1298 172, 0, 106, 178, 136, 11, 212, 172, 0, 107,
1299 213, 0, 225, 108, 178, 212, 172, 0, 225, 109,
1300 213, 136, 178, 212, 172, 0, 110, 178, 212, 222,
1307 static const short yyrline[] = { 0,
1308 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1094,
1309 1094, 1094, 1094, 1094, 1094, 1095, 1095, 1095, 1095, 1095,
1310 1095, 1095, 1096, 1096, 1096, 1096, 1096, 1099, 1099, 1100,
1311 1100, 1101, 1101, 1102, 1102, 1103, 1103, 1107, 1107, 1108,
1312 1108, 1109, 1109, 1110, 1110, 1111, 1111, 1112, 1112, 1113,
1313 1113, 1114, 1115, 1120, 1121, 1121, 1123, 1123, 1124, 1124,
1314 1128, 1132, 1137, 1137, 1139, 1143, 1149, 1150, 1151, 1152,
1315 1153, 1157, 1158, 1159, 1163, 1164, 1168, 1169, 1170, 1174,
1316 1175, 1176, 1177, 1178, 1181, 1181, 1182, 1183, 1184, 1185,
1317 1186, 1194, 1195, 1196, 1197, 1200, 1201, 1206, 1207, 1208,
1318 1211, 1212, 1219, 1219, 1226, 1226, 1235, 1243, 1243, 1249,
1319 1249, 1251, 1256, 1269, 1269, 1269, 1269, 1272, 1276, 1280,
1320 1287, 1292, 1300, 1330, 1361, 1366, 1378, 1388, 1392, 1402,
1321 1409, 1416, 1423, 1428, 1433, 1440, 1441, 1448, 1455, 1463,
1322 1469, 1481, 1509, 1525, 1554, 1582, 1607, 1626, 1652, 1672,
1323 1684, 1691, 1757, 1767, 1777, 1783, 1793, 1799, 1809, 1814,
1324 1819, 1827, 1839, 1861, 1869, 1875, 1886, 1891, 1896, 1902,
1325 1908, 1917, 1921, 1929, 1929, 1932, 1932, 1943, 1948, 1956,
1326 1957, 1961, 1961, 1965, 1965, 1968, 1971, 1995, 2006, 2013,
1327 2016, 2021, 2024, 2030, 2034, 2037, 2043, 2056, 2060, 2065,
1328 2067, 2072, 2077, 2086, 2096, 2107, 2111, 2120, 2129, 2134,
1329 2256, 2256, 2258, 2267, 2267, 2269, 2274, 2286, 2290, 2295,
1330 2299, 2303, 2307, 2311, 2315, 2319, 2323, 2327, 2352, 2356,
1331 2370, 2374, 2378, 2382, 2388, 2388, 2394, 2403, 2407, 2416,
1332 2425, 2434, 2438, 2443, 2447, 2451, 2456, 2466, 2485, 2494,
1333 2574, 2578, 2585, 2596, 2609, 2619, 2630, 2640, 2649, 2658,
1334 2661, 2662, 2669, 2673, 2678, 2699, 2716, 2730, 2744, 2756,
1335 2764, 2771, 2777, 2783, 2789, 2804, 2889, 2894, 2898, 2905,
1336 2912, 2920, 2927, 2935, 2943, 2957, 2974
1341 #if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
1343 static const char * const yytname[] = { "$","error","$undefined.","ESINT64VAL",
1344 "EUINT64VAL","ESAPINTVAL","EUAPINTVAL","LOCALVAL_ID","GLOBALVAL_ID","FPVAL",
1345 "VOID","INTTYPE","FLOAT","DOUBLE","LABEL","TYPE","LOCALVAR","GLOBALVAR","LABELSTR",
1346 "STRINGCONSTANT","ATSTRINGCONSTANT","ZEROINITIALIZER","TRUETOK","FALSETOK","BEGINTOK",
1347 "ENDTOK","DECLARE","DEFINE","GLOBAL","CONSTANT","SECTION","VOLATILE","THREAD_LOCAL",
1348 "TO","DOTDOTDOT","NULL_TOK","UNDEF","INTERNAL","LINKONCE","WEAK","APPENDING",
1349 "DLLIMPORT","DLLEXPORT","EXTERN_WEAK","OPAQUE","EXTERNAL","TARGET","TRIPLE",
1350 "ALIGN","DEPLIBS","CALL","TAIL","ASM_TOK","MODULE","SIDEEFFECT","CC_TOK","CCC_TOK",
1351 "FASTCC_TOK","COLDCC_TOK","X86_STDCALLCC_TOK","X86_FASTCALLCC_TOK","DATALAYOUT",
1352 "RET","BR","SWITCH","INVOKE","UNWIND","UNREACHABLE","ADD","SUB","MUL","UDIV",
1353 "SDIV","FDIV","UREM","SREM","FREM","AND","OR","XOR","SHL","LSHR","ASHR","ICMP",
1354 "FCMP","EQ","NE","SLT","SGT","SLE","SGE","ULT","UGT","ULE","UGE","OEQ","ONE",
1355 "OLT","OGT","OLE","OGE","ORD","UNO","UEQ","UNE","MALLOC","ALLOCA","FREE","LOAD",
1356 "STORE","GETELEMENTPTR","TRUNC","ZEXT","SEXT","FPTRUNC","FPEXT","BITCAST","UITOFP",
1357 "SITOFP","FPTOUI","FPTOSI","INTTOPTR","PTRTOINT","PHI_TOK","SELECT","VAARG",
1358 "EXTRACTELEMENT","INSERTELEMENT","SHUFFLEVECTOR","NORETURN","INREG","SRET","NOUNWIND",
1359 "DEFAULT","HIDDEN","'='","','","'*'","'\\\\'","'('","')'","'['","'x'","']'",
1360 "'<'","'>'","'{'","'}'","'c'","ArithmeticOps","LogicalOps","CastOps","IPredicates",
1361 "FPredicates","IntType","FPType","LocalName","OptLocalName","OptLocalAssign",
1362 "GlobalName","OptGlobalAssign","GVInternalLinkage","GVExternalLinkage","GVVisibilityStyle",
1363 "FunctionDeclareLinkage","FunctionDefineLinkage","OptCallingConv","ParamAttr",
1364 "OptParamAttrs","FuncAttr","OptFuncAttrs","OptAlign","OptCAlign","SectionString",
1365 "OptSection","GlobalVarAttributes","GlobalVarAttribute","PrimType","Types","ArgType",
1366 "ResultTypes","ArgTypeList","ArgTypeListI","TypeListI","ConstVal","ConstExpr",
1367 "ConstVector","GlobalType","ThreadLocal","Module","DefinitionList","Definition",
1368 "@1","@2","@3","@4","@5","AsmBlock","TargetDefinition","LibrariesDefinition",
1369 "LibList","ArgListH","ArgList","FunctionHeaderH","BEGIN","FunctionHeader","END",
1370 "Function","FunctionProto","OptSideEffect","ConstValueRef","SymbolicValueRef",
1371 "ValueRef","ResolvedVal","BasicBlockList","BasicBlock","InstructionList","BBTerminatorInst",
1372 "JumpTable","Inst","PHIList","ValueRefList","IndexList","OptTailCall","InstVal",
1373 "OptVolatile","MemoryInst", NULL
1377 static const short yyr1[] = { 0,
1378 149, 149, 149, 149, 149, 149, 149, 149, 149, 150,
1379 150, 150, 150, 150, 150, 151, 151, 151, 151, 151,
1380 151, 151, 151, 151, 151, 151, 151, 152, 152, 152,
1381 152, 152, 152, 152, 152, 152, 152, 153, 153, 153,
1382 153, 153, 153, 153, 153, 153, 153, 153, 153, 153,
1383 153, 153, 153, 154, 155, 155, 156, 156, 157, 157,
1384 158, 158, 159, 159, 160, 160, 161, 161, 161, 161,
1385 161, 162, 162, 162, 163, 163, 164, 164, 164, 165,
1386 165, 165, 165, 165, 166, 166, 166, 166, 166, 166,
1387 166, 167, 167, 167, 167, 168, 168, 169, 169, 169,
1388 170, 170, 171, 171, 172, 172, 173, 174, 174, 175,
1389 175, 176, 176, 177, 177, 177, 177, 178, 178, 178,
1390 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
1391 179, 180, 180, 181, 181, 182, 182, 182, 182, 183,
1392 183, 184, 184, 184, 184, 184, 184, 184, 184, 184,
1393 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
1394 184, 185, 185, 185, 185, 185, 185, 185, 185, 185,
1395 185, 186, 186, 187, 187, 188, 188, 189, 189, 190,
1396 190, 192, 191, 193, 191, 191, 191, 191, 194, 191,
1397 195, 191, 196, 191, 191, 191, 197, 198, 198, 199,
1398 200, 200, 200, 201, 201, 202, 202, 202, 202, 203,
1399 204, 204, 205, 206, 206, 207, 208, 209, 209, 210,
1400 210, 210, 210, 210, 210, 210, 210, 210, 210, 210,
1401 211, 211, 211, 211, 212, 212, 213, 214, 214, 215,
1402 216, 216, 216, 217, 217, 217, 217, 217, 217, 217,
1403 217, 217, 218, 218, 219, 220, 220, 221, 221, 221,
1404 222, 222, 223, 223, 224, 224, 224, 224, 224, 224,
1405 224, 224, 224, 224, 224, 224, 224, 225, 225, 226,
1406 226, 226, 226, 226, 226, 226, 226
1409 static const short yyr2[] = { 0,
1410 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1411 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1412 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1413 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1414 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1415 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
1416 2, 0, 1, 1, 2, 0, 1, 1, 1, 1,
1417 1, 1, 1, 1, 0, 1, 0, 1, 1, 0,
1418 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,
1419 2, 1, 1, 1, 1, 0, 2, 1, 1, 1,
1420 0, 2, 0, 2, 0, 3, 2, 0, 1, 0,
1421 3, 1, 2, 1, 1, 1, 1, 1, 1, 2,
1422 1, 2, 5, 5, 5, 5, 3, 2, 5, 4,
1423 2, 1, 1, 1, 3, 1, 3, 1, 0, 1,
1424 3, 4, 3, 3, 4, 4, 3, 6, 5, 2,
1425 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1426 2, 6, 5, 8, 6, 6, 7, 7, 6, 8,
1427 8, 3, 1, 1, 1, 1, 0, 1, 0, 1,
1428 2, 0, 3, 0, 3, 3, 3, 3, 0, 7,
1429 0, 8, 0, 8, 2, 3, 1, 3, 3, 3,
1430 3, 1, 0, 5, 3, 1, 3, 1, 0, 9,
1431 1, 1, 4, 1, 1, 2, 3, 0, 1, 1,
1432 1, 1, 1, 1, 1, 1, 1, 3, 1, 5,
1433 1, 1, 1, 1, 1, 1, 2, 2, 2, 3,
1434 2, 0, 1, 2, 2, 3, 9, 9, 8, 14,
1435 1, 1, 6, 5, 2, 6, 7, 3, 5, 0,
1436 0, 3, 2, 1, 5, 5, 6, 6, 4, 6,
1437 4, 4, 6, 6, 2, 8, 1, 1, 0, 3,
1441 static const short yydefact[] = { 66,
1442 57, 63, 58, 64, 184, 182, 0, 0, 0, 0,
1443 0, 0, 75, 66, 180, 77, 80, 0, 0, 195,
1444 0, 0, 61, 0, 65, 67, 69, 68, 70, 72,
1445 71, 73, 74, 76, 75, 75, 177, 181, 78, 79,
1446 75, 185, 81, 82, 83, 84, 75, 242, 183, 242,
1447 0, 0, 203, 196, 197, 186, 231, 232, 188, 114,
1448 115, 116, 117, 118, 0, 0, 0, 0, 233, 234,
1449 119, 187, 121, 177, 177, 176, 0, 85, 85, 243,
1450 239, 62, 214, 215, 216, 238, 198, 199, 202, 0,
1451 139, 122, 0, 0, 0, 0, 128, 140, 0, 120,
1452 139, 0, 0, 174, 175, 0, 0, 86, 87, 88,
1453 89, 90, 0, 217, 0, 279, 241, 0, 200, 138,
1454 96, 134, 136, 0, 0, 0, 0, 0, 0, 127,
1455 0, 0, 0, 114, 115, 116, 0, 0, 0, 189,
1456 91, 133, 132, 0, 211, 212, 213, 278, 264, 0,
1457 0, 0, 0, 85, 251, 252, 1, 2, 3, 4,
1458 5, 6, 7, 8, 9, 13, 14, 15, 10, 11,
1459 12, 0, 0, 0, 0, 0, 0, 16, 17, 18,
1460 19, 20, 21, 22, 23, 24, 25, 26, 27, 0,
1461 0, 0, 0, 0, 0, 0, 0, 0, 240, 85,
1462 255, 0, 277, 201, 131, 0, 101, 0, 0, 130,
1463 0, 141, 101, 191, 193, 159, 160, 155, 157, 156,
1464 158, 161, 154, 150, 151, 0, 0, 0, 0, 0,
1465 0, 0, 0, 0, 0, 0, 0, 0, 0, 153,
1466 152, 110, 0, 263, 245, 0, 244, 0, 0, 54,
1467 0, 0, 28, 29, 30, 31, 32, 33, 34, 35,
1468 36, 37, 0, 52, 53, 48, 49, 50, 51, 38,
1469 39, 40, 41, 42, 43, 44, 45, 46, 47, 0,
1470 105, 105, 284, 0, 0, 275, 0, 0, 0, 0,
1471 0, 0, 0, 0, 0, 0, 0, 92, 93, 94,
1472 95, 97, 137, 135, 124, 125, 126, 129, 123, 110,
1473 110, 0, 0, 0, 0, 0, 0, 0, 143, 173,
1474 0, 0, 0, 147, 0, 144, 0, 0, 0, 0,
1475 190, 209, 220, 221, 222, 227, 223, 224, 225, 226,
1476 218, 0, 229, 236, 235, 237, 0, 246, 0, 0,
1477 0, 0, 0, 280, 0, 282, 261, 0, 0, 0,
1478 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1479 98, 99, 100, 102, 192, 194, 0, 0, 261, 0,
1480 0, 0, 0, 0, 142, 128, 140, 0, 145, 146,
1481 0, 0, 0, 0, 0, 112, 110, 208, 96, 206,
1482 0, 219, 0, 0, 0, 0, 0, 0, 0, 0,
1483 0, 0, 287, 0, 0, 0, 271, 272, 0, 0,
1484 0, 0, 269, 0, 105, 0, 0, 0, 0, 0,
1485 0, 0, 0, 172, 149, 0, 0, 0, 0, 107,
1486 113, 111, 60, 0, 101, 0, 228, 0, 0, 260,
1487 0, 0, 105, 106, 105, 0, 0, 0, 0, 0,
1488 0, 265, 266, 260, 0, 285, 0, 0, 0, 163,
1489 0, 0, 0, 0, 148, 0, 0, 0, 59, 205,
1490 207, 96, 108, 0, 0, 0, 0, 0, 267, 268,
1491 281, 283, 262, 0, 0, 270, 273, 274, 0, 105,
1492 0, 0, 0, 169, 0, 0, 165, 166, 162, 60,
1493 109, 103, 230, 0, 0, 96, 0, 101, 256, 0,
1494 101, 286, 167, 168, 0, 0, 0, 204, 0, 210,
1495 0, 249, 0, 0, 258, 0, 0, 257, 276, 164,
1496 170, 171, 104, 247, 0, 248, 0, 96, 0, 0,
1497 0, 259, 0, 0, 0, 0, 254, 0, 0, 253,
1501 static const short yydefgoto[] = { 237,
1502 238, 239, 263, 280, 137, 138, 69, 480, 11, 70,
1503 13, 35, 36, 37, 41, 47, 113, 302, 205, 374,
1504 305, 530, 354, 396, 512, 331, 397, 71, 139, 122,
1505 144, 123, 124, 99, 320, 343, 321, 106, 77, 563,
1506 14, 15, 17, 16, 242, 310, 311, 56, 20, 54,
1507 90, 400, 401, 114, 147, 48, 85, 49, 42, 403,
1508 344, 73, 346, 247, 50, 81, 82, 199, 534, 117,
1509 286, 488, 413, 200, 201, 202, 203
1512 static const short yypact[] = { 593,
1513 -32768,-32768,-32768,-32768,-32768,-32768, -1, -87, 11, -41,
1514 89, -13, 46, 1408,-32768, 185, 82, 13, 55,-32768,
1515 81, 211,-32768, 1122,-32768,-32768,-32768,-32768,-32768,-32768,
1516 -32768,-32768,-32768,-32768, 98, 98, 206,-32768,-32768,-32768,
1517 98,-32768,-32768,-32768,-32768,-32768, 98, 235,-32768, 8,
1518 242, 251, 252,-32768,-32768,-32768,-32768,-32768, 128,-32768,
1519 -32768,-32768,-32768,-32768, 272, 274, 4, 122,-32768,-32768,
1520 -32768, 61,-32768, 206, 206,-32768, 183, 290, 290,-32768,
1521 -32768, 121,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -92,
1522 979,-32768, 137, 139, 284, 128,-32768, 61, -70,-32768,
1523 979, 183, 183,-32768,-32768, 1136, 278,-32768,-32768,-32768,
1524 -32768,-32768, 1178,-32768, -15, 1277,-32768, 264,-32768,-32768,
1525 61,-32768, 148, 153, 1192, 1192, 160, -66, 1192,-32768,
1526 162, 1136, 1192, 32, 297, 298, 215, 301, 761,-32768,
1527 -32768, 128, 61, 145,-32768,-32768,-32768,-32768,-32768, 262,
1528 1234, 248, 304, 290,-32768,-32768,-32768,-32768,-32768,-32768,
1529 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
1530 -32768, 157, 422, 1192, 1192, 1192, 1192,-32768,-32768,-32768,
1531 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 1192,
1532 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192,-32768, 290,
1533 -32768, -34,-32768,-32768, -33, 1019,-32768, 71, -22,-32768,
1534 173, 61,-32768,-32768, 61,-32768,-32768,-32768,-32768,-32768,
1535 -32768,-32768,-32768,-32768,-32768, 157, 422, 180, 181, 182,
1536 184, 186, 1038, 1276, 448, 305, 187, 188, 191,-32768,
1537 -32768, 193, 192,-32768, 128, 614,-32768, 740, 740,-32768,
1538 740, 1178,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
1539 -32768,-32768, 1192,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
1540 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 1192,
1541 88, 119,-32768, 614, 62, 197, 198, 199, 200, 207,
1542 217, 614, 614, 309, 1178, 1192, 1192,-32768,-32768,-32768,
1543 -32768,-32768,-32768,-32768, -73,-32768,-32768,-32768, -73, 193,
1544 193, 212, 216, 1136, 1136, 1136, 1136, 1136,-32768,-32768,
1545 -44, 933, -69,-32768, -40,-32768, 1136, 1136, 1136, -5,
1546 -32768, 1077,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
1547 300, 1136,-32768,-32768,-32768,-32768, 220,-32768, 221, 740,
1548 614, 614, 17,-32768, 23,-32768,-32768, 740, 218, 1192,
1549 1192, 1192, 1192, 1192, 222, 225, 1192, 740, 614, 226,
1550 -32768,-32768,-32768,-32768,-32768,-32768, 1136, 1136,-32768, 227,
1551 229, 230, 231, 1136,-32768, 228, 761, -35,-32768,-32768,
1552 234, 236, 341, 356, 372,-32768, 193,-32768, 61, 241,
1553 238,-32768, 360, -36, 366, 367, 243, 253, 254, 740,
1554 387, 740, 256, 257, 740, 258, 61,-32768, 259, 266,
1555 740, 740, 61, 261, 269, 1192, 270, 271, -67, 1136,
1556 1136, 1136, 1136,-32768,-32768, 263, 1136, 1136, 1192,-32768,
1557 -32768,-32768, 33, 1093,-32768, 273,-32768, 740, 740, 1192,
1558 740, 740, 269,-32768, 269, 1192, 740, 275, 1192, 1192,
1559 1192,-32768,-32768, 1192, 362,-32768, 614, 1136, 1136,-32768,
1560 279, 277, 288, 293,-32768, 280, 292, 42,-32768,-32768,
1561 -32768, 61, 65, 395, 299, 308, 614, 7,-32768,-32768,
1562 -32768,-32768,-32768, 291, 740,-32768,-32768,-32768, 73, 269,
1563 302, 306, 1136,-32768, 1136, 1136,-32768,-32768,-32768, 33,
1564 -32768, 391,-32768, 426, 1,-32768, 1192,-32768,-32768, 307,
1565 -32768,-32768,-32768,-32768, 311, 312, 313,-32768, 453,-32768,
1566 740,-32768, 890, 18, -33, 614, 75,-32768, -73,-32768,
1567 -32768,-32768,-32768,-32768, 327,-32768, 890,-32768, 452, 455,
1568 337, -33, 740, 740, 460, 409,-32768, 740, 462,-32768,
1569 740,-32768, 477, 479,-32768
1572 static const short yypgoto[] = { 364,
1573 365, 368, 260, 255, -151,-32768, 0, -27, 403, 16,
1574 -32768,-32768,-32768, 6,-32768,-32768, -139, -298, -389,-32768,
1575 -210,-32768, -269, 10,-32768, -279,-32768,-32768, -23, 281,
1576 -233,-32768, 389, 396, 70, -133, -217, 134, 190,-32768,
1577 -32768, 481,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
1578 -32768,-32768,-32768, 417,-32768,-32768,-32768,-32768,-32768,-32768,
1579 -483, -135, 120, -171,-32768, 447,-32768,-32768,-32768,-32768,
1580 -32768, 34, 125,-32768,-32768,-32768,-32768
1587 static const short yytable[] = { 10,
1588 72, 251, 309, 241, 283, 240, 373, 94, 145, 443,
1589 373, 250, 356, 10, 252, 12, 323, 325, 350, 287,
1590 288, 289, 290, 291, 394, 80, 294, 410, 250, 12,
1591 375, 376, 83, 412, -54, -54, -54, -54, 298, 299,
1592 74, 75, 395, 118, 98, 18, 78, 21, 1, 545,
1593 119, 3, 79, 216, 217, 371, 300, 301, 372, 19,
1594 295, 368, 22, 551, 411, 129, 384, 121, 456, 129,
1595 411, 98, 470, 296, 297, 389, 130, 121, 298, 299,
1596 211, 10, 26, 27, 28, 29, 30, 31, 32, 143,
1597 33, 384, 510, 23, 394, 384, 300, 301, 385, 384,
1598 384, 208, 209, 24, 388, 212, 390, 549, 447, 215,
1599 345, 436, 345, 345, 100, 345, 101, 442, 43, 44,
1600 45, 25, 307, 46, 404, 370, 535, 246, 57, 58,
1601 146, 96, 60, 61, 62, 63, 1, 1, 2, 3,
1602 3, 4, 517, 532, 298, 299, 518, 51, 345, 95,
1603 281, 282, 246, 284, 84, 466, 345, 345, 552, 243,
1604 546, 2, 300, 301, 4, 64, 285, 246, 246, 246,
1605 246, 246, 292, 293, 246, 140, 298, 299, 100, 34,
1606 101, 509, 121, 491, 373, 492, 298, 299, 416, 52,
1607 418, 419, 420, 371, 300, 301, 372, 100, 100, 101,
1608 101, 214, 358, 371, 300, 301, 372, 100, 517, 101,
1609 104, 105, 521, 306, 345, 345, 345, 218, 219, 220,
1610 221, 53, 345, 353, 100, 39, 101, 40, 143, 55,
1611 522, 34, 345, 345, 483, 132, 133, 76, 373, 351,
1612 373, 253, 254, 255, 256, 257, 258, 259, 260, 261,
1613 262, 241, 80, 240, 355, 100, 352, 101, 248, 65,
1614 87, 249, 66, 102, 103, 67, 91, 68, 97, 88,
1615 89, 143, 369, 246, 345, 92, 345, 93, 125, 345,
1616 126, 141, 204, 206, 493, 345, 345, 496, 497, 498,
1617 57, 58, 207, 96, 60, 61, 62, 63, 387, 1,
1618 2, 213, 3, 4, 210, -55, -56, 537, 399, 222,
1619 539, 244, 345, 345, 250, 345, 345, 308, 314, 315,
1620 316, 345, 317, 326, 318, 327, 328, 64, 330, 329,
1621 332, 345, 359, 360, 361, 362, 246, 417, 246, 246,
1622 246, 367, 363, 423, 107, 108, 109, 110, 111, 112,
1623 377, 345, 364, 402, 378, 405, 406, 421, 415, 345,
1624 422, 426, 430, 533, 431, 432, 433, 347, 348, 437,
1625 349, 438, 435, 439, 440, 441, 444, 445, 446, 448,
1626 449, 450, 547, 379, 380, 381, 382, 383, 451, 452,
1627 454, 456, 457, 459, 460, 345, 391, 392, 393, 464,
1628 345, 461, 467, 357, 465, 468, 469, 475, 484, 411,
1629 495, 365, 366, 513, 503, 478, 504, 345, 345, 507,
1630 482, 65, 345, 505, 66, 345, 487, 67, 506, 68,
1631 127, 508, 246, 519, 514, 246, 246, 246, 529, 531,
1632 487, 523, 479, 264, 265, 524, 427, 428, 515, 538,
1633 540, 541, 542, 434, 57, 58, 543, 96, 134, 135,
1634 136, 63, 550, 1, 2, 553, 3, 4, 554, 407,
1635 408, 409, 555, 558, 559, 561, 564, 414, 565, 196,
1636 197, 313, 528, 198, 116, 312, 304, 424, 425, 131,
1637 128, 64, 511, 536, 38, 115, 86, 499, 0, 471,
1638 472, 473, 474, 429, 0, 0, 476, 477, 0, 479,
1639 0, 0, 266, 267, 268, 269, 270, 271, 272, 273,
1640 274, 275, 276, 277, 278, 279, 0, 0, 0, 453,
1641 0, 455, 0, 0, 458, 0, 0, 501, 502, 0,
1642 462, 463, 0, 0, 0, 0, 0, 0, 0, 0,
1643 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1644 0, 0, 0, 0, 0, 0, 0, 485, 486, 0,
1645 489, 490, 525, 0, 526, 527, 494, 0, 0, 0,
1646 0, 0, 0, 0, 0, 65, 500, 0, 66, 0,
1647 0, 67, -179, 68, 324, 0, 0, 0, 0, 0,
1648 0, 0, 0, 0, 0, 0, 516, -62, 1, 2,
1649 0, 3, 4, 0, 520, 0, 333, 334, 5, 6,
1650 57, 58, 335, 0, 0, 0, 0, 0, 0, 1,
1651 2, 0, 3, 4, 336, 337, 338, 0, 7, 0,
1652 0, 8, 0, 0, 0, 9, 0, 0, 339, 340,
1653 544, 0, 0, 0, 0, 548, 0, 0, 0, 0,
1654 0, 0, 0, 0, 0, 341, 0, 0, 0, 0,
1655 0, 0, 556, 557, 0, 0, 0, 560, 0, 0,
1656 562, 157, 158, 159, 160, 161, 162, 163, 164, 165,
1657 166, 167, 168, 169, 170, 171, 226, 227, 0, 0,
1658 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1659 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1660 0, 0, 0, 228, 178, 179, 180, 181, 182, 183,
1661 184, 185, 186, 187, 188, 189, 0, 229, 0, 230,
1662 231, 232, 333, 334, 0, 0, 57, 58, 335, 0,
1663 100, 0, 101, 0, 0, 1, 2, 342, 3, 4,
1664 336, 337, 338, 0, 0, 0, 0, 57, 58, 0,
1665 0, 0, 0, 0, 339, 340, 1, 2, 0, 3,
1666 4, 223, 0, 0, 0, 0, 0, 0, 0, 0,
1667 0, 341, 0, 0, 0, 224, 225, 0, 0, 0,
1668 0, 0, 0, 0, 0, 0, 0, 157, 158, 159,
1669 160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
1670 170, 171, 226, 227, 0, 0, 0, 0, 157, 158,
1671 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
1672 169, 170, 171, 226, 227, 0, 0, 0, 0, 228,
1673 178, 179, 180, 181, 182, 183, 184, 185, 186, 187,
1674 188, 189, 0, 229, 0, 230, 231, 232, 0, 0,
1675 228, 178, 179, 180, 181, 182, 183, 184, 185, 186,
1676 187, 188, 189, 342, 229, 0, 230, 231, 232, 0,
1677 0, 0, 333, 334, 0, 0, 0, 100, 335, 101,
1678 0, 233, 0, 0, 234, 0, 235, 0, 236, 0,
1679 336, 337, 338, 0, 0, 0, 0, 0, 0, 0,
1680 0, 0, 0, 0, 339, 340, 0, 0, 0, 0,
1681 0, 0, 0, 0, 0, 0, 0, 0, 0, 57,
1682 58, 341, 96, 134, 135, 136, 63, 0, 1, 2,
1683 0, 3, 4, 0, 0, 0, 0, 157, 158, 159,
1684 160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
1685 170, 171, 226, 227, 0, 0, 64, 0, 0, 0,
1686 0, 0, 0, 0, 0, 57, 58, 0, 96, 60,
1687 61, 62, 63, 0, 1, 2, 0, 3, 4, 228,
1688 178, 179, 180, 181, 182, 183, 184, 185, 186, 187,
1689 188, 189, 120, 229, 0, 230, 231, 232, 0, 0,
1690 0, 0, 64, 0, 0, 57, 58, 0, 96, 60,
1691 61, 62, 63, 342, 1, 2, 0, 3, 4, 0,
1692 0, 0, 0, 0, 57, 58, 0, 96, 134, 135,
1693 136, 63, 303, 1, 2, 0, 3, 4, 0, 0,
1694 0, 0, 64, 0, 0, 0, 0, 0, 0, 0,
1695 65, 0, 0, 66, 0, 0, 67, 0, 68, 386,
1696 0, 64, 0, 57, 58, 0, 96, 60, 61, 62,
1697 63, 0, 1, 2, 0, 3, 4, 0, 0, 57,
1698 58, 0, 96, 60, 61, 62, 63, 0, 1, 2,
1699 398, 3, 4, 0, 0, 0, 65, 0, 0, 66,
1700 64, 0, 67, 0, 68, 0, 481, 0, 57, 58,
1701 0, 59, 60, 61, 62, 63, 64, 1, 2, 0,
1702 3, 4, 57, 58, 0, 96, 134, 135, 136, 63,
1703 0, 1, 2, 0, 3, 4, 65, 0, 0, 66,
1704 0, 0, 67, 0, 68, 64, 0, 0, 0, 0,
1705 0, 0, 0, 0, 0, 65, 0, 0, 66, 64,
1706 319, 67, 0, 68, 57, 58, 0, 142, 60, 61,
1707 62, 63, 0, 1, 2, 0, 3, 4, 57, 58,
1708 0, 96, 60, 61, 62, 63, 0, 1, 2, 0,
1709 3, 4, 0, 0, 65, 0, 0, 66, 0, 0,
1710 67, 64, 68, 0, 0, 0, 0, 0, 0, 0,
1711 65, 0, 0, 66, 0, 64, 67, 0, 68, 0,
1712 57, 58, 0, 245, 60, 61, 62, 63, 0, 1,
1713 2, 0, 3, 4, 0, 0, 0, 0, 0, 65,
1714 0, 0, 66, 0, 0, 67, 0, 68, 0, 0,
1715 0, 0, 0, 65, 0, 0, 66, 64, 0, 67,
1716 0, 68, 57, 58, 0, 96, 134, 135, 136, 63,
1717 0, 1, 2, 0, 3, 4, 0, 0, 0, 0,
1718 0, 0, 0, 0, 0, 0, 0, 148, 0, 0,
1719 0, 0, 0, 0, 0, 65, 0, 0, 66, 64,
1720 0, 67, 0, 68, 0, 0, 149, 150, 0, 65,
1721 0, 0, 66, 0, 0, 67, 0, 68, 151, 152,
1722 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
1723 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
1724 173, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1725 0, 65, 0, 0, 66, 0, 0, 67, 0, 68,
1726 0, 174, 175, 176, 0, 0, 177, 178, 179, 180,
1727 181, 182, 183, 184, 185, 186, 187, 188, 189, 190,
1728 191, 192, 193, 194, 195, 0, 0, -178, 0, 0,
1729 0, 0, 0, 65, 0, 0, 66, 0, 0, 67,
1730 0, 322, -62, 1, 2, 0, 3, 4, 0, 0,
1731 0, 0, 0, 5, 6, 0, 0, 0, 0, 0,
1732 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1733 0, 0, 0, 7, 0, 0, 8, 0, 0, 0,
1737 static const short yycheck[] = { 0,
1738 24, 153, 213, 139, 176, 139, 305, 4, 24, 399,
1739 309, 11, 282, 14, 154, 0, 234, 235, 252, 191,
1740 192, 193, 194, 195, 30, 18, 198, 11, 11, 14,
1741 310, 311, 25, 11, 3, 4, 5, 6, 112, 113,
1742 35, 36, 48, 136, 68, 47, 41, 135, 16, 533,
1743 143, 19, 47, 22, 23, 129, 130, 131, 132, 61,
1744 200, 295, 52, 547, 48, 136, 136, 91, 136, 136,
1745 48, 95, 140, 108, 109, 145, 147, 101, 112, 113,
1746 147, 82, 37, 38, 39, 40, 41, 42, 43, 113,
1747 45, 136, 482, 135, 30, 136, 130, 131, 143, 136,
1748 136, 125, 126, 15, 322, 129, 147, 33, 145, 133,
1749 246, 147, 248, 249, 137, 251, 139, 397, 37, 38,
1750 39, 135, 145, 42, 342, 297, 516, 151, 7, 8,
1751 146, 10, 11, 12, 13, 14, 16, 16, 17, 19,
1752 19, 20, 136, 143, 112, 113, 140, 135, 284, 146,
1753 174, 175, 176, 177, 147, 425, 292, 293, 548, 144,
1754 143, 17, 130, 131, 20, 44, 190, 191, 192, 193,
1755 194, 195, 196, 197, 198, 106, 112, 113, 137, 134,
1756 139, 140, 206, 453, 483, 455, 112, 113, 360, 135,
1757 362, 363, 364, 129, 130, 131, 132, 137, 137, 139,
1758 139, 132, 141, 129, 130, 131, 132, 137, 136, 139,
1759 28, 29, 140, 143, 350, 351, 352, 3, 4, 5,
1760 6, 141, 358, 136, 137, 41, 139, 43, 252, 19,
1761 500, 134, 368, 369, 445, 102, 103, 32, 537, 263,
1762 539, 85, 86, 87, 88, 89, 90, 91, 92, 93,
1763 94, 387, 18, 387, 136, 137, 280, 139, 11, 138,
1764 19, 14, 141, 74, 75, 144, 139, 146, 147, 19,
1765 19, 295, 296, 297, 410, 4, 412, 4, 142, 415,
1766 142, 4, 19, 136, 456, 421, 422, 459, 460, 461,
1767 7, 8, 140, 10, 11, 12, 13, 14, 322, 16,
1768 17, 140, 19, 20, 145, 9, 9, 518, 332, 9,
1769 521, 50, 448, 449, 11, 451, 452, 145, 139, 139,
1770 139, 457, 139, 19, 139, 139, 139, 44, 136, 139,
1771 139, 467, 136, 136, 136, 136, 360, 361, 362, 363,
1772 364, 33, 136, 367, 55, 56, 57, 58, 59, 60,
1773 139, 487, 136, 54, 139, 136, 136, 136, 141, 495,
1774 136, 136, 136, 515, 136, 136, 136, 248, 249, 136,
1775 251, 136, 145, 33, 19, 4, 136, 140, 19, 14,
1776 14, 139, 534, 314, 315, 316, 317, 318, 136, 136,
1777 4, 136, 136, 136, 136, 531, 327, 328, 329, 139,
1778 536, 136, 426, 284, 136, 136, 136, 145, 136, 48,
1779 136, 292, 293, 19, 136, 439, 140, 553, 554, 140,
1780 444, 138, 558, 136, 141, 561, 450, 144, 136, 146,
1781 147, 140, 456, 143, 136, 459, 460, 461, 48, 14,
1782 464, 140, 443, 22, 23, 140, 377, 378, 141, 143,
1783 140, 140, 140, 384, 7, 8, 4, 10, 11, 12,
1784 13, 14, 136, 16, 17, 14, 19, 20, 14, 350,
1785 351, 352, 136, 14, 66, 14, 0, 358, 0, 116,
1786 116, 227, 510, 116, 82, 226, 206, 368, 369, 101,
1787 95, 44, 483, 517, 14, 79, 50, 464, -1, 430,
1788 431, 432, 433, 379, -1, -1, 437, 438, -1, 510,
1789 -1, -1, 91, 92, 93, 94, 95, 96, 97, 98,
1790 99, 100, 101, 102, 103, 104, -1, -1, -1, 410,
1791 -1, 412, -1, -1, 415, -1, -1, 468, 469, -1,
1792 421, 422, -1, -1, -1, -1, -1, -1, -1, -1,
1793 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1794 -1, -1, -1, -1, -1, -1, -1, 448, 449, -1,
1795 451, 452, 503, -1, 505, 506, 457, -1, -1, -1,
1796 -1, -1, -1, -1, -1, 138, 467, -1, 141, -1,
1797 -1, 144, 0, 146, 147, -1, -1, -1, -1, -1,
1798 -1, -1, -1, -1, -1, -1, 487, 15, 16, 17,
1799 -1, 19, 20, -1, 495, -1, 3, 4, 26, 27,
1800 7, 8, 9, -1, -1, -1, -1, -1, -1, 16,
1801 17, -1, 19, 20, 21, 22, 23, -1, 46, -1,
1802 -1, 49, -1, -1, -1, 53, -1, -1, 35, 36,
1803 531, -1, -1, -1, -1, 536, -1, -1, -1, -1,
1804 -1, -1, -1, -1, -1, 52, -1, -1, -1, -1,
1805 -1, -1, 553, 554, -1, -1, -1, 558, -1, -1,
1806 561, 68, 69, 70, 71, 72, 73, 74, 75, 76,
1807 77, 78, 79, 80, 81, 82, 83, 84, -1, -1,
1808 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1809 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1810 -1, -1, -1, 110, 111, 112, 113, 114, 115, 116,
1811 117, 118, 119, 120, 121, 122, -1, 124, -1, 126,
1812 127, 128, 3, 4, -1, -1, 7, 8, 9, -1,
1813 137, -1, 139, -1, -1, 16, 17, 144, 19, 20,
1814 21, 22, 23, -1, -1, -1, -1, 7, 8, -1,
1815 -1, -1, -1, -1, 35, 36, 16, 17, -1, 19,
1816 20, 21, -1, -1, -1, -1, -1, -1, -1, -1,
1817 -1, 52, -1, -1, -1, 35, 36, -1, -1, -1,
1818 -1, -1, -1, -1, -1, -1, -1, 68, 69, 70,
1819 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
1820 81, 82, 83, 84, -1, -1, -1, -1, 68, 69,
1821 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
1822 80, 81, 82, 83, 84, -1, -1, -1, -1, 110,
1823 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
1824 121, 122, -1, 124, -1, 126, 127, 128, -1, -1,
1825 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
1826 120, 121, 122, 144, 124, -1, 126, 127, 128, -1,
1827 -1, -1, 3, 4, -1, -1, -1, 137, 9, 139,
1828 -1, 141, -1, -1, 144, -1, 146, -1, 148, -1,
1829 21, 22, 23, -1, -1, -1, -1, -1, -1, -1,
1830 -1, -1, -1, -1, 35, 36, -1, -1, -1, -1,
1831 -1, -1, -1, -1, -1, -1, -1, -1, -1, 7,
1832 8, 52, 10, 11, 12, 13, 14, -1, 16, 17,
1833 -1, 19, 20, -1, -1, -1, -1, 68, 69, 70,
1834 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
1835 81, 82, 83, 84, -1, -1, 44, -1, -1, -1,
1836 -1, -1, -1, -1, -1, 7, 8, -1, 10, 11,
1837 12, 13, 14, -1, 16, 17, -1, 19, 20, 110,
1838 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
1839 121, 122, 34, 124, -1, 126, 127, 128, -1, -1,
1840 -1, -1, 44, -1, -1, 7, 8, -1, 10, 11,
1841 12, 13, 14, 144, 16, 17, -1, 19, 20, -1,
1842 -1, -1, -1, -1, 7, 8, -1, 10, 11, 12,
1843 13, 14, 34, 16, 17, -1, 19, 20, -1, -1,
1844 -1, -1, 44, -1, -1, -1, -1, -1, -1, -1,
1845 138, -1, -1, 141, -1, -1, 144, -1, 146, 147,
1846 -1, 44, -1, 7, 8, -1, 10, 11, 12, 13,
1847 14, -1, 16, 17, -1, 19, 20, -1, -1, 7,
1848 8, -1, 10, 11, 12, 13, 14, -1, 16, 17,
1849 34, 19, 20, -1, -1, -1, 138, -1, -1, 141,
1850 44, -1, 144, -1, 146, -1, 34, -1, 7, 8,
1851 -1, 10, 11, 12, 13, 14, 44, 16, 17, -1,
1852 19, 20, 7, 8, -1, 10, 11, 12, 13, 14,
1853 -1, 16, 17, -1, 19, 20, 138, -1, -1, 141,
1854 -1, -1, 144, -1, 146, 44, -1, -1, -1, -1,
1855 -1, -1, -1, -1, -1, 138, -1, -1, 141, 44,
1856 143, 144, -1, 146, 7, 8, -1, 10, 11, 12,
1857 13, 14, -1, 16, 17, -1, 19, 20, 7, 8,
1858 -1, 10, 11, 12, 13, 14, -1, 16, 17, -1,
1859 19, 20, -1, -1, 138, -1, -1, 141, -1, -1,
1860 144, 44, 146, -1, -1, -1, -1, -1, -1, -1,
1861 138, -1, -1, 141, -1, 44, 144, -1, 146, -1,
1862 7, 8, -1, 10, 11, 12, 13, 14, -1, 16,
1863 17, -1, 19, 20, -1, -1, -1, -1, -1, 138,
1864 -1, -1, 141, -1, -1, 144, -1, 146, -1, -1,
1865 -1, -1, -1, 138, -1, -1, 141, 44, -1, 144,
1866 -1, 146, 7, 8, -1, 10, 11, 12, 13, 14,
1867 -1, 16, 17, -1, 19, 20, -1, -1, -1, -1,
1868 -1, -1, -1, -1, -1, -1, -1, 31, -1, -1,
1869 -1, -1, -1, -1, -1, 138, -1, -1, 141, 44,
1870 -1, 144, -1, 146, -1, -1, 50, 51, -1, 138,
1871 -1, -1, 141, -1, -1, 144, -1, 146, 62, 63,
1872 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
1873 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
1874 84, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1875 -1, 138, -1, -1, 141, -1, -1, 144, -1, 146,
1876 -1, 105, 106, 107, -1, -1, 110, 111, 112, 113,
1877 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
1878 124, 125, 126, 127, 128, -1, -1, 0, -1, -1,
1879 -1, -1, -1, 138, -1, -1, 141, -1, -1, 144,
1880 -1, 146, 15, 16, 17, -1, 19, 20, -1, -1,
1881 -1, -1, -1, 26, 27, -1, -1, -1, -1, -1,
1882 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1883 -1, -1, -1, 46, -1, -1, 49, -1, -1, -1,
1886 /* -*-C-*- Note some compilers choke on comments on `#line' lines. */
1887 #line 3 "/usr/share/bison.simple"
1888 /* This file comes from bison-1.28. */
1890 /* Skeleton output parser for bison,
1891 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
1893 This program is free software; you can redistribute it and/or modify
1894 it under the terms of the GNU General Public License as published by
1895 the Free Software Foundation; either version 2, or (at your option)
1898 This program is distributed in the hope that it will be useful,
1899 but WITHOUT ANY WARRANTY; without even the implied warranty of
1900 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1901 GNU General Public License for more details.
1903 You should have received a copy of the GNU General Public License
1904 along with this program; if not, write to the Free Software
1905 Foundation, Inc., 59 Temple Place - Suite 330,
1906 Boston, MA 02111-1307, USA. */
1908 /* As a special exception, when this file is copied by Bison into a
1909 Bison output file, you may use that output file without restriction.
1910 This special exception was added by the Free Software Foundation
1911 in version 1.24 of Bison. */
1913 /* This is the parser code that is written into each bison parser
1914 when the %semantic_parser declaration is not specified in the grammar.
1915 It was written by Richard Stallman by simplifying the hairy parser
1916 used when %semantic_parser is specified. */
1918 #ifndef YYSTACK_USE_ALLOCA
1920 #define YYSTACK_USE_ALLOCA
1921 #else /* alloca not defined */
1923 #define YYSTACK_USE_ALLOCA
1924 #define alloca __builtin_alloca
1925 #else /* not GNU C. */
1926 #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
1927 #define YYSTACK_USE_ALLOCA
1929 #else /* not sparc */
1930 /* We think this test detects Watcom and Microsoft C. */
1931 /* This used to test MSDOS, but that is a bad idea
1932 since that symbol is in the user namespace. */
1933 #if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
1934 #if 0 /* No need for malloc.h, which pollutes the namespace;
1935 instead, just don't use alloca. */
1938 #else /* not MSDOS, or __TURBOC__ */
1940 /* I don't know what this was needed for, but it pollutes the namespace.
1941 So I turned it off. rms, 2 May 1997. */
1942 /* #include <malloc.h> */
1944 #define YYSTACK_USE_ALLOCA
1945 #else /* not MSDOS, or __TURBOC__, or _AIX */
1947 #ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
1948 and on HPUX 10. Eventually we can turn this on. */
1949 #define YYSTACK_USE_ALLOCA
1950 #define alloca __builtin_alloca
1953 #endif /* not _AIX */
1954 #endif /* not MSDOS, or __TURBOC__ */
1955 #endif /* not sparc */
1956 #endif /* not GNU C */
1957 #endif /* alloca not defined */
1958 #endif /* YYSTACK_USE_ALLOCA not defined */
1960 #ifdef YYSTACK_USE_ALLOCA
1961 #define YYSTACK_ALLOC alloca
1963 #define YYSTACK_ALLOC malloc
1966 /* Note: there must be only one dollar sign in this file.
1967 It is replaced by the list of actions, each action
1968 as one case of the switch. */
1970 #define yyerrok (yyerrstatus = 0)
1971 #define yyclearin (yychar = YYEMPTY)
1974 #define YYACCEPT goto yyacceptlab
1975 #define YYABORT goto yyabortlab
1976 #define YYERROR goto yyerrlab1
1977 /* Like YYERROR except do call yyerror.
1978 This remains here temporarily to ease the
1979 transition to the new meaning of YYERROR, for GCC.
1980 Once GCC version 2 has supplanted version 1, this can go. */
1981 #define YYFAIL goto yyerrlab
1982 #define YYRECOVERING() (!!yyerrstatus)
1983 #define YYBACKUP(token, value) \
1985 if (yychar == YYEMPTY && yylen == 1) \
1986 { yychar = (token), yylval = (value); \
1987 yychar1 = YYTRANSLATE (yychar); \
1992 { yyerror ("syntax error: cannot back up"); YYERROR; } \
1996 #define YYERRCODE 256
1999 #define YYLEX yylex()
2005 #define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
2007 #define YYLEX yylex(&yylval, &yylloc)
2009 #else /* not YYLSP_NEEDED */
2011 #define YYLEX yylex(&yylval, YYLEX_PARAM)
2013 #define YYLEX yylex(&yylval)
2015 #endif /* not YYLSP_NEEDED */
2018 /* If nonreentrant, generate the variables here */
2022 int yychar; /* the lookahead symbol */
2023 YYSTYPE yylval; /* the semantic value of the */
2024 /* lookahead symbol */
2027 YYLTYPE yylloc; /* location data for the lookahead */
2031 int yynerrs; /* number of parse errors so far */
2032 #endif /* not YYPURE */
2035 int yydebug; /* nonzero means print parse trace */
2036 /* Since this is uninitialized, it does not stop multiple parsers
2040 /* YYINITDEPTH indicates the initial size of the parser's stacks */
2043 #define YYINITDEPTH 200
2046 /* YYMAXDEPTH is the maximum size the stacks can grow to
2047 (effective only if the built-in stack extension method is used). */
2054 #define YYMAXDEPTH 10000
2057 /* Define __yy_memcpy. Note that the size argument
2058 should be passed with type unsigned int, because that is what the non-GCC
2059 definitions require. With GCC, __builtin_memcpy takes an arg
2060 of type size_t, but it can handle unsigned int. */
2062 #if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
2063 #define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
2064 #else /* not GNU C or C++ */
2067 /* This is the most reliable way to avoid incompatibilities
2068 in available built-in functions on various systems. */
2070 __yy_memcpy (to, from, count)
2075 register char *f = from;
2076 register char *t = to;
2077 register int i = count;
2083 #else /* __cplusplus */
2085 /* This is the most reliable way to avoid incompatibilities
2086 in available built-in functions on various systems. */
2088 __yy_memcpy (char *to, char *from, unsigned int count)
2090 register char *t = to;
2091 register char *f = from;
2092 register int i = count;
2101 #line 217 "/usr/share/bison.simple"
2103 /* The user can define YYPARSE_PARAM as the name of an argument to be passed
2104 into yyparse. The argument should have type void *.
2105 It should actually point to an object.
2106 Grammar actions can access the variable by casting it
2107 to the proper pointer type. */
2109 #ifdef YYPARSE_PARAM
2111 #define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
2112 #define YYPARSE_PARAM_DECL
2113 #else /* not __cplusplus */
2114 #define YYPARSE_PARAM_ARG YYPARSE_PARAM
2115 #define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
2116 #endif /* not __cplusplus */
2117 #else /* not YYPARSE_PARAM */
2118 #define YYPARSE_PARAM_ARG
2119 #define YYPARSE_PARAM_DECL
2120 #endif /* not YYPARSE_PARAM */
2122 /* Prevent warning if -Wstrict-prototypes. */
2124 #ifdef YYPARSE_PARAM
2125 int yyparse (void *);
2132 yyparse(YYPARSE_PARAM_ARG)
2135 register int yystate;
2137 register short *yyssp;
2138 register YYSTYPE *yyvsp;
2139 int yyerrstatus; /* number of tokens to shift before error messages enabled */
2140 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
2142 short yyssa[YYINITDEPTH]; /* the state stack */
2143 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
2145 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
2146 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
2149 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
2150 YYLTYPE *yyls = yylsa;
2153 #define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
2155 #define YYPOPSTACK (yyvsp--, yyssp--)
2158 int yystacksize = YYINITDEPTH;
2159 int yyfree_stacks = 0;
2170 YYSTYPE yyval; /* the variable used to return */
2171 /* semantic values from the action */
2178 fprintf(stderr, "Starting parse\n");
2184 yychar = YYEMPTY; /* Cause a token to be read. */
2186 /* Initialize stack pointers.
2187 Waste one element of value and location stack
2188 so that they stay on the same level as the state stack.
2189 The wasted elements are never initialized. */
2197 /* Push a new state, which is found in yystate . */
2198 /* In all cases, when you get here, the value and location stacks
2199 have just been pushed. so pushing a state here evens the stacks. */
2204 if (yyssp >= yyss + yystacksize - 1)
2206 /* Give user a chance to reallocate the stack */
2207 /* Use copies of these so that the &'s don't force the real ones into memory. */
2208 YYSTYPE *yyvs1 = yyvs;
2209 short *yyss1 = yyss;
2211 YYLTYPE *yyls1 = yyls;
2214 /* Get the current used size of the three stacks, in elements. */
2215 int size = yyssp - yyss + 1;
2218 /* Each stack pointer address is followed by the size of
2219 the data in use in that stack, in bytes. */
2221 /* This used to be a conditional around just the two extra args,
2222 but that might be undefined if yyoverflow is a macro. */
2223 yyoverflow("parser stack overflow",
2224 &yyss1, size * sizeof (*yyssp),
2225 &yyvs1, size * sizeof (*yyvsp),
2226 &yyls1, size * sizeof (*yylsp),
2229 yyoverflow("parser stack overflow",
2230 &yyss1, size * sizeof (*yyssp),
2231 &yyvs1, size * sizeof (*yyvsp),
2235 yyss = yyss1; yyvs = yyvs1;
2239 #else /* no yyoverflow */
2240 /* Extend the stack our own way. */
2241 if (yystacksize >= YYMAXDEPTH)
2243 yyerror("parser stack overflow");
2255 if (yystacksize > YYMAXDEPTH)
2256 yystacksize = YYMAXDEPTH;
2257 #ifndef YYSTACK_USE_ALLOCA
2260 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
2261 __yy_memcpy ((char *)yyss, (char *)yyss1,
2262 size * (unsigned int) sizeof (*yyssp));
2263 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
2264 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
2265 size * (unsigned int) sizeof (*yyvsp));
2267 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
2268 __yy_memcpy ((char *)yyls, (char *)yyls1,
2269 size * (unsigned int) sizeof (*yylsp));
2271 #endif /* no yyoverflow */
2273 yyssp = yyss + size - 1;
2274 yyvsp = yyvs + size - 1;
2276 yylsp = yyls + size - 1;
2281 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
2284 if (yyssp >= yyss + yystacksize - 1)
2290 fprintf(stderr, "Entering state %d\n", yystate);
2296 /* Do appropriate processing given the current state. */
2297 /* Read a lookahead token if we need one and don't already have one. */
2300 /* First try to decide what to do without reference to lookahead token. */
2302 yyn = yypact[yystate];
2306 /* Not known => get a lookahead token if don't already have one. */
2308 /* yychar is either YYEMPTY or YYEOF
2309 or a valid token in external form. */
2311 if (yychar == YYEMPTY)
2315 fprintf(stderr, "Reading a token: ");
2320 /* Convert token to internal form (in yychar1) for indexing tables with */
2322 if (yychar <= 0) /* This means end of input. */
2325 yychar = YYEOF; /* Don't call YYLEX any more */
2329 fprintf(stderr, "Now at end of input.\n");
2334 yychar1 = YYTRANSLATE(yychar);
2339 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
2340 /* Give the individual parser a way to print the precise meaning
2341 of a token, for further debugging info. */
2343 YYPRINT (stderr, yychar, yylval);
2345 fprintf (stderr, ")\n");
2351 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
2356 /* yyn is what to do for this token type in this state.
2357 Negative => reduce, -yyn is rule number.
2358 Positive => shift, yyn is new state.
2359 New state is final state => don't bother to shift,
2360 just return success.
2361 0, or most negative number => error. */
2376 /* Shift the lookahead token. */
2380 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
2383 /* Discard the token being shifted unless it is eof. */
2384 if (yychar != YYEOF)
2392 /* count tokens shifted since error; after three, turn off error status. */
2393 if (yyerrstatus) yyerrstatus--;
2398 /* Do the default action for the current state. */
2401 yyn = yydefact[yystate];
2405 /* Do a reduction. yyn is the number of a rule to reduce with. */
2409 yyval = yyvsp[1-yylen]; /* implement default value of the action */
2416 fprintf (stderr, "Reducing via rule %d (line %d), ",
2419 /* Print the symbols being reduced, and their result. */
2420 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
2421 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
2422 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
2430 #line 1099 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2431 { yyval.IPredicate = ICmpInst::ICMP_EQ; ;
2434 #line 1099 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2435 { yyval.IPredicate = ICmpInst::ICMP_NE; ;
2438 #line 1100 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2439 { yyval.IPredicate = ICmpInst::ICMP_SLT; ;
2442 #line 1100 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2443 { yyval.IPredicate = ICmpInst::ICMP_SGT; ;
2446 #line 1101 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2447 { yyval.IPredicate = ICmpInst::ICMP_SLE; ;
2450 #line 1101 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2451 { yyval.IPredicate = ICmpInst::ICMP_SGE; ;
2454 #line 1102 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2455 { yyval.IPredicate = ICmpInst::ICMP_ULT; ;
2458 #line 1102 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2459 { yyval.IPredicate = ICmpInst::ICMP_UGT; ;
2462 #line 1103 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2463 { yyval.IPredicate = ICmpInst::ICMP_ULE; ;
2466 #line 1103 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2467 { yyval.IPredicate = ICmpInst::ICMP_UGE; ;
2470 #line 1107 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2471 { yyval.FPredicate = FCmpInst::FCMP_OEQ; ;
2474 #line 1107 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2475 { yyval.FPredicate = FCmpInst::FCMP_ONE; ;
2478 #line 1108 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2479 { yyval.FPredicate = FCmpInst::FCMP_OLT; ;
2482 #line 1108 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2483 { yyval.FPredicate = FCmpInst::FCMP_OGT; ;
2486 #line 1109 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2487 { yyval.FPredicate = FCmpInst::FCMP_OLE; ;
2490 #line 1109 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2491 { yyval.FPredicate = FCmpInst::FCMP_OGE; ;
2494 #line 1110 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2495 { yyval.FPredicate = FCmpInst::FCMP_ORD; ;
2498 #line 1110 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2499 { yyval.FPredicate = FCmpInst::FCMP_UNO; ;
2502 #line 1111 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2503 { yyval.FPredicate = FCmpInst::FCMP_UEQ; ;
2506 #line 1111 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2507 { yyval.FPredicate = FCmpInst::FCMP_UNE; ;
2510 #line 1112 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2511 { yyval.FPredicate = FCmpInst::FCMP_ULT; ;
2514 #line 1112 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2515 { yyval.FPredicate = FCmpInst::FCMP_UGT; ;
2518 #line 1113 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2519 { yyval.FPredicate = FCmpInst::FCMP_ULE; ;
2522 #line 1113 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2523 { yyval.FPredicate = FCmpInst::FCMP_UGE; ;
2526 #line 1114 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2527 { yyval.FPredicate = FCmpInst::FCMP_TRUE; ;
2530 #line 1115 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2531 { yyval.FPredicate = FCmpInst::FCMP_FALSE; ;
2534 #line 1124 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2535 { yyval.StrVal = 0; ;
2538 #line 1128 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2540 yyval.StrVal = yyvsp[-1].StrVal;
2545 #line 1132 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2552 #line 1139 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2554 yyval.StrVal = yyvsp[-1].StrVal;
2559 #line 1143 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2566 #line 1149 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2567 { yyval.Linkage = GlobalValue::InternalLinkage; ;
2570 #line 1150 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2571 { yyval.Linkage = GlobalValue::WeakLinkage; ;
2574 #line 1151 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2575 { yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
2578 #line 1152 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2579 { yyval.Linkage = GlobalValue::AppendingLinkage; ;
2582 #line 1153 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2583 { yyval.Linkage = GlobalValue::DLLExportLinkage; ;
2586 #line 1157 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2587 { yyval.Linkage = GlobalValue::DLLImportLinkage; ;
2590 #line 1158 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2591 { yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;
2594 #line 1159 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2595 { yyval.Linkage = GlobalValue::ExternalLinkage; ;
2598 #line 1163 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2599 { yyval.Visibility = GlobalValue::DefaultVisibility; ;
2602 #line 1164 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2603 { yyval.Visibility = GlobalValue::HiddenVisibility; ;
2606 #line 1168 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2607 { yyval.Linkage = GlobalValue::ExternalLinkage; ;
2610 #line 1169 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2611 { yyval.Linkage = GlobalValue::DLLImportLinkage; ;
2614 #line 1170 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2615 { yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;
2618 #line 1174 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2619 { yyval.Linkage = GlobalValue::ExternalLinkage; ;
2622 #line 1175 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2623 { yyval.Linkage = GlobalValue::InternalLinkage; ;
2626 #line 1176 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2627 { yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
2630 #line 1177 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2631 { yyval.Linkage = GlobalValue::WeakLinkage; ;
2634 #line 1178 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2635 { yyval.Linkage = GlobalValue::DLLExportLinkage; ;
2638 #line 1181 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2639 { yyval.UIntVal = CallingConv::C; ;
2642 #line 1182 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2643 { yyval.UIntVal = CallingConv::C; ;
2646 #line 1183 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2647 { yyval.UIntVal = CallingConv::Fast; ;
2650 #line 1184 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2651 { yyval.UIntVal = CallingConv::Cold; ;
2654 #line 1185 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2655 { yyval.UIntVal = CallingConv::X86_StdCall; ;
2658 #line 1186 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2659 { yyval.UIntVal = CallingConv::X86_FastCall; ;
2662 #line 1187 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2664 if ((unsigned)yyvsp[0].UInt64Val != yyvsp[0].UInt64Val)
2665 GEN_ERROR("Calling conv too large");
2666 yyval.UIntVal = yyvsp[0].UInt64Val;
2671 #line 1194 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2672 { yyval.ParamAttrs = ParamAttr::ZExt; ;
2675 #line 1195 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2676 { yyval.ParamAttrs = ParamAttr::SExt; ;
2679 #line 1196 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2680 { yyval.ParamAttrs = ParamAttr::InReg; ;
2683 #line 1197 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2684 { yyval.ParamAttrs = ParamAttr::StructRet; ;
2687 #line 1200 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2688 { yyval.ParamAttrs = ParamAttr::None; ;
2691 #line 1201 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2693 yyval.ParamAttrs = yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs;
2697 #line 1206 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2698 { yyval.ParamAttrs = ParamAttr::NoReturn; ;
2701 #line 1207 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2702 { yyval.ParamAttrs = ParamAttr::NoUnwind; ;
2705 #line 1211 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2706 { yyval.ParamAttrs = ParamAttr::None; ;
2709 #line 1212 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2711 yyval.ParamAttrs = yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs;
2715 #line 1219 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2716 { yyval.UIntVal = 0; ;
2719 #line 1220 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2721 yyval.UIntVal = yyvsp[0].UInt64Val;
2722 if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal))
2723 GEN_ERROR("Alignment must be a power of two");
2728 #line 1226 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2729 { yyval.UIntVal = 0; ;
2732 #line 1227 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2734 yyval.UIntVal = yyvsp[0].UInt64Val;
2735 if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal))
2736 GEN_ERROR("Alignment must be a power of two");
2741 #line 1235 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2743 for (unsigned i = 0, e = strlen(yyvsp[0].StrVal); i != e; ++i)
2744 if (yyvsp[0].StrVal[i] == '"' || yyvsp[0].StrVal[i] == '\\')
2745 GEN_ERROR("Invalid character in section name");
2746 yyval.StrVal = yyvsp[0].StrVal;
2751 #line 1243 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2752 { yyval.StrVal = 0; ;
2755 #line 1244 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2756 { yyval.StrVal = yyvsp[0].StrVal; ;
2759 #line 1249 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2763 #line 1250 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2767 #line 1251 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2769 CurGV->setSection(yyvsp[0].StrVal);
2770 free(yyvsp[0].StrVal);
2775 #line 1256 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2777 if (yyvsp[0].UInt64Val != 0 && !isPowerOf2_32(yyvsp[0].UInt64Val))
2778 GEN_ERROR("Alignment must be a power of two");
2779 CurGV->setAlignment(yyvsp[0].UInt64Val);
2784 #line 1272 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2786 yyval.TypeVal = new PATypeHolder(OpaqueType::get());
2791 #line 1276 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2793 yyval.TypeVal = new PATypeHolder(yyvsp[0].PrimType);
2798 #line 1280 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2800 if (*yyvsp[-1].TypeVal == Type::LabelTy)
2801 GEN_ERROR("Cannot form a pointer to a basic block");
2802 yyval.TypeVal = new PATypeHolder(HandleUpRefs(PointerType::get(*yyvsp[-1].TypeVal)));
2803 delete yyvsp[-1].TypeVal;
2808 #line 1287 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2809 { // Named types are also simple types...
2810 const Type* tmp = getTypeVal(yyvsp[0].ValIDVal);
2812 yyval.TypeVal = new PATypeHolder(tmp);
2816 #line 1292 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2817 { // Type UpReference
2818 if (yyvsp[0].UInt64Val > (uint64_t)~0U) GEN_ERROR("Value out of range");
2819 OpaqueType *OT = OpaqueType::get(); // Use temporary placeholder
2820 UpRefs.push_back(UpRefRecord((unsigned)yyvsp[0].UInt64Val, OT)); // Add to vector...
2821 yyval.TypeVal = new PATypeHolder(OT);
2822 UR_OUT("New Upreference!\n");
2827 #line 1300 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2829 std::vector<const Type*> Params;
2830 ParamAttrsVector Attrs;
2831 if (yyvsp[0].ParamAttrs != ParamAttr::None) {
2832 ParamAttrsWithIndex X; X.index = 0; X.attrs = yyvsp[0].ParamAttrs;
2836 TypeWithAttrsList::iterator I = yyvsp[-2].TypeWithAttrsList->begin(), E = yyvsp[-2].TypeWithAttrsList->end();
2837 for (; I != E; ++I, ++index) {
2838 const Type *Ty = I->Ty->get();
2839 Params.push_back(Ty);
2840 if (Ty != Type::VoidTy)
2841 if (I->Attrs != ParamAttr::None) {
2842 ParamAttrsWithIndex X; X.index = index; X.attrs = I->Attrs;
2846 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
2847 if (isVarArg) Params.pop_back();
2849 ParamAttrsList *ActualAttrs = 0;
2851 ActualAttrs = ParamAttrsList::get(Attrs);
2852 FunctionType *FT = FunctionType::get(*yyvsp[-4].TypeVal, Params, isVarArg, ActualAttrs);
2853 delete yyvsp[-2].TypeWithAttrsList; // Delete the argument list
2854 delete yyvsp[-4].TypeVal; // Delete the return type handle
2855 yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT));
2860 #line 1330 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2862 std::vector<const Type*> Params;
2863 ParamAttrsVector Attrs;
2864 if (yyvsp[0].ParamAttrs != ParamAttr::None) {
2865 ParamAttrsWithIndex X; X.index = 0; X.attrs = yyvsp[0].ParamAttrs;
2868 TypeWithAttrsList::iterator I = yyvsp[-2].TypeWithAttrsList->begin(), E = yyvsp[-2].TypeWithAttrsList->end();
2870 for ( ; I != E; ++I, ++index) {
2871 const Type* Ty = I->Ty->get();
2872 Params.push_back(Ty);
2873 if (Ty != Type::VoidTy)
2874 if (I->Attrs != ParamAttr::None) {
2875 ParamAttrsWithIndex X; X.index = index; X.attrs = I->Attrs;
2879 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
2880 if (isVarArg) Params.pop_back();
2882 ParamAttrsList *ActualAttrs = 0;
2884 ActualAttrs = ParamAttrsList::get(Attrs);
2886 FunctionType *FT = FunctionType::get(yyvsp[-4].PrimType, Params, isVarArg, ActualAttrs);
2887 delete yyvsp[-2].TypeWithAttrsList; // Delete the argument list
2888 yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT));
2893 #line 1361 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2894 { // Sized array type?
2895 yyval.TypeVal = new PATypeHolder(HandleUpRefs(ArrayType::get(*yyvsp[-1].TypeVal, (unsigned)yyvsp[-3].UInt64Val)));
2896 delete yyvsp[-1].TypeVal;
2901 #line 1366 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2903 const llvm::Type* ElemTy = yyvsp[-1].TypeVal->get();
2904 if ((unsigned)yyvsp[-3].UInt64Val != yyvsp[-3].UInt64Val)
2905 GEN_ERROR("Unsigned result not equal to signed result");
2906 if (!ElemTy->isFloatingPoint() && !ElemTy->isInteger())
2907 GEN_ERROR("Element type of a VectorType must be primitive");
2908 if (!isPowerOf2_32(yyvsp[-3].UInt64Val))
2909 GEN_ERROR("Vector length should be a power of 2");
2910 yyval.TypeVal = new PATypeHolder(HandleUpRefs(VectorType::get(*yyvsp[-1].TypeVal, (unsigned)yyvsp[-3].UInt64Val)));
2911 delete yyvsp[-1].TypeVal;
2916 #line 1378 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2917 { // Structure type?
2918 std::vector<const Type*> Elements;
2919 for (std::list<llvm::PATypeHolder>::iterator I = yyvsp[-1].TypeList->begin(),
2920 E = yyvsp[-1].TypeList->end(); I != E; ++I)
2921 Elements.push_back(*I);
2923 yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
2924 delete yyvsp[-1].TypeList;
2929 #line 1388 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2930 { // Empty structure type?
2931 yyval.TypeVal = new PATypeHolder(StructType::get(std::vector<const Type*>()));
2936 #line 1392 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2938 std::vector<const Type*> Elements;
2939 for (std::list<llvm::PATypeHolder>::iterator I = yyvsp[-2].TypeList->begin(),
2940 E = yyvsp[-2].TypeList->end(); I != E; ++I)
2941 Elements.push_back(*I);
2943 yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true)));
2944 delete yyvsp[-2].TypeList;
2949 #line 1402 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2950 { // Empty structure type?
2951 yyval.TypeVal = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
2956 #line 1409 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2958 yyval.TypeWithAttrs.Ty = yyvsp[-1].TypeVal;
2959 yyval.TypeWithAttrs.Attrs = yyvsp[0].ParamAttrs;
2963 #line 1416 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2965 if (!UpRefs.empty())
2966 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
2967 if (!(*yyvsp[0].TypeVal)->isFirstClassType())
2968 GEN_ERROR("LLVM functions cannot return aggregate types");
2969 yyval.TypeVal = yyvsp[0].TypeVal;
2973 #line 1423 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2975 yyval.TypeVal = new PATypeHolder(Type::VoidTy);
2979 #line 1428 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2981 yyval.TypeWithAttrsList = new TypeWithAttrsList();
2982 yyval.TypeWithAttrsList->push_back(yyvsp[0].TypeWithAttrs);
2987 #line 1433 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2989 (yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList)->push_back(yyvsp[0].TypeWithAttrs);
2994 #line 1441 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2996 yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList;
2997 TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None;
2998 TWA.Ty = new PATypeHolder(Type::VoidTy);
2999 yyval.TypeWithAttrsList->push_back(TWA);
3004 #line 1448 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3006 yyval.TypeWithAttrsList = new TypeWithAttrsList;
3007 TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None;
3008 TWA.Ty = new PATypeHolder(Type::VoidTy);
3009 yyval.TypeWithAttrsList->push_back(TWA);
3014 #line 1455 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3016 yyval.TypeWithAttrsList = new TypeWithAttrsList();
3021 #line 1463 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3023 yyval.TypeList = new std::list<PATypeHolder>();
3024 yyval.TypeList->push_back(*yyvsp[0].TypeVal);
3025 delete yyvsp[0].TypeVal;
3030 #line 1469 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3032 (yyval.TypeList=yyvsp[-2].TypeList)->push_back(*yyvsp[0].TypeVal);
3033 delete yyvsp[0].TypeVal;
3038 #line 1481 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3039 { // Nonempty unsized arr
3040 if (!UpRefs.empty())
3041 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
3042 const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-3].TypeVal->get());
3044 GEN_ERROR("Cannot make array constant with type: '" +
3045 (*yyvsp[-3].TypeVal)->getDescription() + "'");
3046 const Type *ETy = ATy->getElementType();
3047 int NumElements = ATy->getNumElements();
3049 // Verify that we have the correct size...
3050 if (NumElements != -1 && NumElements != (int)yyvsp[-1].ConstVector->size())
3051 GEN_ERROR("Type mismatch: constant sized array initialized with " +
3052 utostr(yyvsp[-1].ConstVector->size()) + " arguments, but has size of " +
3053 itostr(NumElements) + "");
3055 // Verify all elements are correct type!
3056 for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
3057 if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
3058 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
3059 ETy->getDescription() +"' as required!\nIt is of type '"+
3060 (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
3063 yyval.ConstVal = ConstantArray::get(ATy, *yyvsp[-1].ConstVector);
3064 delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
3069 #line 1509 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3071 if (!UpRefs.empty())
3072 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
3073 const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-2].TypeVal->get());
3075 GEN_ERROR("Cannot make array constant with type: '" +
3076 (*yyvsp[-2].TypeVal)->getDescription() + "'");
3078 int NumElements = ATy->getNumElements();
3079 if (NumElements != -1 && NumElements != 0)
3080 GEN_ERROR("Type mismatch: constant sized array initialized with 0"
3081 " arguments, but has size of " + itostr(NumElements) +"");
3082 yyval.ConstVal = ConstantArray::get(ATy, std::vector<Constant*>());
3083 delete yyvsp[-2].TypeVal;
3088 #line 1525 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3090 if (!UpRefs.empty())
3091 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
3092 const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-2].TypeVal->get());
3094 GEN_ERROR("Cannot make array constant with type: '" +
3095 (*yyvsp[-2].TypeVal)->getDescription() + "'");
3097 int NumElements = ATy->getNumElements();
3098 const Type *ETy = ATy->getElementType();
3099 char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true);
3100 if (NumElements != -1 && NumElements != (EndStr-yyvsp[0].StrVal))
3101 GEN_ERROR("Can't build string constant of size " +
3102 itostr((int)(EndStr-yyvsp[0].StrVal)) +
3103 " when array has size " + itostr(NumElements) + "");
3104 std::vector<Constant*> Vals;
3105 if (ETy == Type::Int8Ty) {
3106 for (unsigned char *C = (unsigned char *)yyvsp[0].StrVal;
3107 C != (unsigned char*)EndStr; ++C)
3108 Vals.push_back(ConstantInt::get(ETy, *C));
3110 free(yyvsp[0].StrVal);
3111 GEN_ERROR("Cannot build string arrays of non byte sized elements");
3113 free(yyvsp[0].StrVal);
3114 yyval.ConstVal = ConstantArray::get(ATy, Vals);
3115 delete yyvsp[-2].TypeVal;
3120 #line 1554 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3121 { // Nonempty unsized arr
3122 if (!UpRefs.empty())
3123 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
3124 const VectorType *PTy = dyn_cast<VectorType>(yyvsp[-3].TypeVal->get());
3126 GEN_ERROR("Cannot make packed constant with type: '" +
3127 (*yyvsp[-3].TypeVal)->getDescription() + "'");
3128 const Type *ETy = PTy->getElementType();
3129 int NumElements = PTy->getNumElements();
3131 // Verify that we have the correct size...
3132 if (NumElements != -1 && NumElements != (int)yyvsp[-1].ConstVector->size())
3133 GEN_ERROR("Type mismatch: constant sized packed initialized with " +
3134 utostr(yyvsp[-1].ConstVector->size()) + " arguments, but has size of " +
3135 itostr(NumElements) + "");
3137 // Verify all elements are correct type!
3138 for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
3139 if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
3140 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
3141 ETy->getDescription() +"' as required!\nIt is of type '"+
3142 (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
3145 yyval.ConstVal = ConstantVector::get(PTy, *yyvsp[-1].ConstVector);
3146 delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
3151 #line 1582 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3153 const StructType *STy = dyn_cast<StructType>(yyvsp[-3].TypeVal->get());
3155 GEN_ERROR("Cannot make struct constant with type: '" +
3156 (*yyvsp[-3].TypeVal)->getDescription() + "'");
3158 if (yyvsp[-1].ConstVector->size() != STy->getNumContainedTypes())
3159 GEN_ERROR("Illegal number of initializers for structure type");
3161 // Check to ensure that constants are compatible with the type initializer!
3162 for (unsigned i = 0, e = yyvsp[-1].ConstVector->size(); i != e; ++i)
3163 if ((*yyvsp[-1].ConstVector)[i]->getType() != STy->getElementType(i))
3164 GEN_ERROR("Expected type '" +
3165 STy->getElementType(i)->getDescription() +
3166 "' for element #" + utostr(i) +
3167 " of structure initializer");
3169 // Check to ensure that Type is not packed
3170 if (STy->isPacked())
3171 GEN_ERROR("Unpacked Initializer to vector type '" + STy->getDescription() + "'");
3173 yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-1].ConstVector);
3174 delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
3179 #line 1607 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3181 if (!UpRefs.empty())
3182 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
3183 const StructType *STy = dyn_cast<StructType>(yyvsp[-2].TypeVal->get());
3185 GEN_ERROR("Cannot make struct constant with type: '" +
3186 (*yyvsp[-2].TypeVal)->getDescription() + "'");
3188 if (STy->getNumContainedTypes() != 0)
3189 GEN_ERROR("Illegal number of initializers for structure type");
3191 // Check to ensure that Type is not packed
3192 if (STy->isPacked())
3193 GEN_ERROR("Unpacked Initializer to vector type '" + STy->getDescription() + "'");
3195 yyval.ConstVal = ConstantStruct::get(STy, std::vector<Constant*>());
3196 delete yyvsp[-2].TypeVal;
3201 #line 1626 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3203 const StructType *STy = dyn_cast<StructType>(yyvsp[-5].TypeVal->get());
3205 GEN_ERROR("Cannot make struct constant with type: '" +
3206 (*yyvsp[-5].TypeVal)->getDescription() + "'");
3208 if (yyvsp[-2].ConstVector->size() != STy->getNumContainedTypes())
3209 GEN_ERROR("Illegal number of initializers for structure type");
3211 // Check to ensure that constants are compatible with the type initializer!
3212 for (unsigned i = 0, e = yyvsp[-2].ConstVector->size(); i != e; ++i)
3213 if ((*yyvsp[-2].ConstVector)[i]->getType() != STy->getElementType(i))
3214 GEN_ERROR("Expected type '" +
3215 STy->getElementType(i)->getDescription() +
3216 "' for element #" + utostr(i) +
3217 " of structure initializer");
3219 // Check to ensure that Type is packed
3220 if (!STy->isPacked())
3221 GEN_ERROR("Vector initializer to non-vector type '" +
3222 STy->getDescription() + "'");
3224 yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-2].ConstVector);
3225 delete yyvsp[-5].TypeVal; delete yyvsp[-2].ConstVector;
3230 #line 1652 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3232 if (!UpRefs.empty())
3233 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
3234 const StructType *STy = dyn_cast<StructType>(yyvsp[-4].TypeVal->get());
3236 GEN_ERROR("Cannot make struct constant with type: '" +
3237 (*yyvsp[-4].TypeVal)->getDescription() + "'");
3239 if (STy->getNumContainedTypes() != 0)
3240 GEN_ERROR("Illegal number of initializers for structure type");
3242 // Check to ensure that Type is packed
3243 if (!STy->isPacked())
3244 GEN_ERROR("Vector initializer to non-vector type '" +
3245 STy->getDescription() + "'");
3247 yyval.ConstVal = ConstantStruct::get(STy, std::vector<Constant*>());
3248 delete yyvsp[-4].TypeVal;
3253 #line 1672 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3255 if (!UpRefs.empty())
3256 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3257 const PointerType *PTy = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
3259 GEN_ERROR("Cannot make null pointer constant with type: '" +
3260 (*yyvsp[-1].TypeVal)->getDescription() + "'");
3262 yyval.ConstVal = ConstantPointerNull::get(PTy);
3263 delete yyvsp[-1].TypeVal;
3268 #line 1684 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3270 if (!UpRefs.empty())
3271 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3272 yyval.ConstVal = UndefValue::get(yyvsp[-1].TypeVal->get());
3273 delete yyvsp[-1].TypeVal;
3278 #line 1691 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3280 if (!UpRefs.empty())
3281 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3282 const PointerType *Ty = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
3284 GEN_ERROR("Global const reference must be a pointer type");
3286 // ConstExprs can exist in the body of a function, thus creating
3287 // GlobalValues whenever they refer to a variable. Because we are in
3288 // the context of a function, getExistingVal will search the functions
3289 // symbol table instead of the module symbol table for the global symbol,
3290 // which throws things all off. To get around this, we just tell
3291 // getExistingVal that we are at global scope here.
3293 Function *SavedCurFn = CurFun.CurrentFunction;
3294 CurFun.CurrentFunction = 0;
3296 Value *V = getExistingVal(Ty, yyvsp[0].ValIDVal);
3299 CurFun.CurrentFunction = SavedCurFn;
3301 // If this is an initializer for a constant pointer, which is referencing a
3302 // (currently) undefined variable, create a stub now that shall be replaced
3303 // in the future with the right type of variable.
3306 assert(isa<PointerType>(Ty) && "Globals may only be used as pointers!");
3307 const PointerType *PT = cast<PointerType>(Ty);
3309 // First check to see if the forward references value is already created!
3310 PerModuleInfo::GlobalRefsType::iterator I =
3311 CurModule.GlobalRefs.find(std::make_pair(PT, yyvsp[0].ValIDVal));
3313 if (I != CurModule.GlobalRefs.end()) {
3314 V = I->second; // Placeholder already exists, use it...
3315 yyvsp[0].ValIDVal.destroy();
3318 if (yyvsp[0].ValIDVal.Type == ValID::GlobalName)
3319 Name = yyvsp[0].ValIDVal.Name;
3320 else if (yyvsp[0].ValIDVal.Type != ValID::GlobalID)
3321 GEN_ERROR("Invalid reference to global");
3323 // Create the forward referenced global.
3325 if (const FunctionType *FTy =
3326 dyn_cast<FunctionType>(PT->getElementType())) {
3327 GV = new Function(FTy, GlobalValue::ExternalLinkage, Name,
3328 CurModule.CurrentModule);
3330 GV = new GlobalVariable(PT->getElementType(), false,
3331 GlobalValue::ExternalLinkage, 0,
3332 Name, CurModule.CurrentModule);
3335 // Keep track of the fact that we have a forward ref to recycle it
3336 CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, yyvsp[0].ValIDVal), GV));
3341 yyval.ConstVal = cast<GlobalValue>(V);
3342 delete yyvsp[-1].TypeVal; // Free the type handle
3347 #line 1757 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3349 if (!UpRefs.empty())
3350 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3351 if (yyvsp[-1].TypeVal->get() != yyvsp[0].ConstVal->getType())
3352 GEN_ERROR("Mismatched types for constant expression: " +
3353 (*yyvsp[-1].TypeVal)->getDescription() + " and " + yyvsp[0].ConstVal->getType()->getDescription());
3354 yyval.ConstVal = yyvsp[0].ConstVal;
3355 delete yyvsp[-1].TypeVal;
3360 #line 1767 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3362 if (!UpRefs.empty())
3363 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3364 const Type *Ty = yyvsp[-1].TypeVal->get();
3365 if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
3366 GEN_ERROR("Cannot create a null initialized value of this type");
3367 yyval.ConstVal = Constant::getNullValue(Ty);
3368 delete yyvsp[-1].TypeVal;
3373 #line 1777 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3374 { // integral constants
3375 if (!ConstantInt::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].SInt64Val))
3376 GEN_ERROR("Constant value doesn't fit in type");
3377 yyval.ConstVal = ConstantInt::get(yyvsp[-1].PrimType, yyvsp[0].SInt64Val, true);
3382 #line 1783 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3383 { // arbitrary precision integer constants
3384 uint32_t BitWidth = cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth();
3385 if (yyvsp[0].APIntVal->getBitWidth() > BitWidth) {
3386 GEN_ERROR("Constant value does not fit in type");
3388 yyvsp[0].APIntVal->sextOrTrunc(BitWidth);
3389 yyval.ConstVal = ConstantInt::get(*yyvsp[0].APIntVal);
3390 delete yyvsp[0].APIntVal;
3395 #line 1793 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3396 { // integral constants
3397 if (!ConstantInt::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].UInt64Val))
3398 GEN_ERROR("Constant value doesn't fit in type");
3399 yyval.ConstVal = ConstantInt::get(yyvsp[-1].PrimType, yyvsp[0].UInt64Val, false);
3404 #line 1799 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3405 { // arbitrary precision integer constants
3406 uint32_t BitWidth = cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth();
3407 if (yyvsp[0].APIntVal->getBitWidth() > BitWidth) {
3408 GEN_ERROR("Constant value does not fit in type");
3410 yyvsp[0].APIntVal->zextOrTrunc(BitWidth);
3411 yyval.ConstVal = ConstantInt::get(*yyvsp[0].APIntVal);
3412 delete yyvsp[0].APIntVal;
3417 #line 1809 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3418 { // Boolean constants
3419 assert(cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth() == 1 && "Not Bool?");
3420 yyval.ConstVal = ConstantInt::getTrue();
3425 #line 1814 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3426 { // Boolean constants
3427 assert(cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth() == 1 && "Not Bool?");
3428 yyval.ConstVal = ConstantInt::getFalse();
3433 #line 1819 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3434 { // Float & Double constants
3435 if (!ConstantFP::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].FPVal))
3436 GEN_ERROR("Floating point constant invalid for type");
3437 yyval.ConstVal = ConstantFP::get(yyvsp[-1].PrimType, yyvsp[0].FPVal);
3442 #line 1827 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3444 if (!UpRefs.empty())
3445 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3446 Constant *Val = yyvsp[-3].ConstVal;
3447 const Type *DestTy = yyvsp[-1].TypeVal->get();
3448 if (!CastInst::castIsValid(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy))
3449 GEN_ERROR("invalid cast opcode for cast from '" +
3450 Val->getType()->getDescription() + "' to '" +
3451 DestTy->getDescription() + "'");
3452 yyval.ConstVal = ConstantExpr::getCast(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy);
3453 delete yyvsp[-1].TypeVal;
3457 #line 1839 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3459 if (!isa<PointerType>(yyvsp[-2].ConstVal->getType()))
3460 GEN_ERROR("GetElementPtr requires a pointer operand");
3463 GetElementPtrInst::getIndexedType(yyvsp[-2].ConstVal->getType(), &(*yyvsp[-1].ValueList)[0], yyvsp[-1].ValueList->size(),
3466 GEN_ERROR("Index list invalid for constant getelementptr");
3468 SmallVector<Constant*, 8> IdxVec;
3469 for (unsigned i = 0, e = yyvsp[-1].ValueList->size(); i != e; ++i)
3470 if (Constant *C = dyn_cast<Constant>((*yyvsp[-1].ValueList)[i]))
3471 IdxVec.push_back(C);
3473 GEN_ERROR("Indices to constant getelementptr must be constants");
3475 delete yyvsp[-1].ValueList;
3477 yyval.ConstVal = ConstantExpr::getGetElementPtr(yyvsp[-2].ConstVal, &IdxVec[0], IdxVec.size());
3482 #line 1861 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3484 if (yyvsp[-5].ConstVal->getType() != Type::Int1Ty)
3485 GEN_ERROR("Select condition must be of boolean type");
3486 if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
3487 GEN_ERROR("Select operand types must match");
3488 yyval.ConstVal = ConstantExpr::getSelect(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
3493 #line 1869 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3495 if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
3496 GEN_ERROR("Binary operator types must match");
3498 yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
3502 #line 1875 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3504 if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
3505 GEN_ERROR("Logical operator types must match");
3506 if (!yyvsp[-3].ConstVal->getType()->isInteger()) {
3507 if (Instruction::isShift(yyvsp[-5].BinaryOpVal) || !isa<VectorType>(yyvsp[-3].ConstVal->getType()) ||
3508 !cast<VectorType>(yyvsp[-3].ConstVal->getType())->getElementType()->isInteger())
3509 GEN_ERROR("Logical operator requires integral operands");
3511 yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
3516 #line 1886 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3518 if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
3519 GEN_ERROR("icmp operand types must match");
3520 yyval.ConstVal = ConstantExpr::getICmp(yyvsp[-5].IPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
3524 #line 1891 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3526 if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
3527 GEN_ERROR("fcmp operand types must match");
3528 yyval.ConstVal = ConstantExpr::getFCmp(yyvsp[-5].FPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
3532 #line 1896 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3534 if (!ExtractElementInst::isValidOperands(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
3535 GEN_ERROR("Invalid extractelement operands");
3536 yyval.ConstVal = ConstantExpr::getExtractElement(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
3541 #line 1902 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3543 if (!InsertElementInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
3544 GEN_ERROR("Invalid insertelement operands");
3545 yyval.ConstVal = ConstantExpr::getInsertElement(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
3550 #line 1908 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3552 if (!ShuffleVectorInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
3553 GEN_ERROR("Invalid shufflevector operands");
3554 yyval.ConstVal = ConstantExpr::getShuffleVector(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
3559 #line 1917 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3561 (yyval.ConstVector = yyvsp[-2].ConstVector)->push_back(yyvsp[0].ConstVal);
3566 #line 1921 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3568 yyval.ConstVector = new std::vector<Constant*>();
3569 yyval.ConstVector->push_back(yyvsp[0].ConstVal);
3574 #line 1929 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3575 { yyval.BoolVal = false; ;
3578 #line 1929 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3579 { yyval.BoolVal = true; ;
3582 #line 1932 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3583 { yyval.BoolVal = true; ;
3586 #line 1932 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3587 { yyval.BoolVal = false; ;
3590 #line 1943 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3592 yyval.ModuleVal = ParserResult = CurModule.CurrentModule;
3593 CurModule.ModuleDone();
3598 #line 1948 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3600 yyval.ModuleVal = ParserResult = CurModule.CurrentModule;
3601 CurModule.ModuleDone();
3606 #line 1961 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3607 { CurFun.isDeclare = false; ;
3610 #line 1961 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3612 CurFun.FunctionDone();
3617 #line 1965 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3618 { CurFun.isDeclare = true; ;
3621 #line 1965 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3627 #line 1968 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3633 #line 1971 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3635 if (!UpRefs.empty())
3636 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
3637 // Eagerly resolve types. This is not an optimization, this is a
3638 // requirement that is due to the fact that we could have this:
3640 // %list = type { %list * }
3641 // %list = type { %list * } ; repeated type decl
3643 // If types are not resolved eagerly, then the two types will not be
3644 // determined to be the same type!
3646 ResolveTypeTo(yyvsp[-2].StrVal, *yyvsp[0].TypeVal);
3648 if (!setTypeName(*yyvsp[0].TypeVal, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) {
3650 // If this is a named type that is not a redefinition, add it to the slot
3652 CurModule.Types.push_back(*yyvsp[0].TypeVal);
3655 delete yyvsp[0].TypeVal;
3660 #line 1995 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3662 ResolveTypeTo(yyvsp[-2].StrVal, yyvsp[0].PrimType);
3664 if (!setTypeName(yyvsp[0].PrimType, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) {
3666 // If this is a named type that is not a redefinition, add it to the slot
3668 CurModule.Types.push_back(yyvsp[0].PrimType);
3674 #line 2006 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3676 /* "Externally Visible" Linkage */
3677 if (yyvsp[0].ConstVal == 0)
3678 GEN_ERROR("Global value initializer is not a constant");
3679 CurGV = ParseGlobalVariable(yyvsp[-4].StrVal, GlobalValue::ExternalLinkage,
3680 yyvsp[-3].Visibility, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal, yyvsp[-2].BoolVal);
3685 #line 2013 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3691 #line 2016 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3693 if (yyvsp[0].ConstVal == 0)
3694 GEN_ERROR("Global value initializer is not a constant");
3695 CurGV = ParseGlobalVariable(yyvsp[-5].StrVal, yyvsp[-4].Linkage, yyvsp[-3].Visibility, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal, yyvsp[-2].BoolVal);
3700 #line 2021 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3706 #line 2024 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3708 if (!UpRefs.empty())
3709 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
3710 CurGV = ParseGlobalVariable(yyvsp[-5].StrVal, yyvsp[-4].Linkage, yyvsp[-3].Visibility, yyvsp[-1].BoolVal, *yyvsp[0].TypeVal, 0, yyvsp[-2].BoolVal);
3712 delete yyvsp[0].TypeVal;
3716 #line 2030 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3723 #line 2034 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3729 #line 2037 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3735 #line 2043 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3737 const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
3738 char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true);
3739 std::string NewAsm(yyvsp[0].StrVal, EndStr);
3740 free(yyvsp[0].StrVal);
3742 if (AsmSoFar.empty())
3743 CurModule.CurrentModule->setModuleInlineAsm(NewAsm);
3745 CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm);
3750 #line 2056 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3752 CurModule.CurrentModule->setTargetTriple(yyvsp[0].StrVal);
3753 free(yyvsp[0].StrVal);
3757 #line 2060 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3759 CurModule.CurrentModule->setDataLayout(yyvsp[0].StrVal);
3760 free(yyvsp[0].StrVal);
3764 #line 2067 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3766 CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
3767 free(yyvsp[0].StrVal);
3772 #line 2072 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3774 CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
3775 free(yyvsp[0].StrVal);
3780 #line 2077 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3786 #line 2086 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3788 if (!UpRefs.empty())
3789 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
3790 if (*yyvsp[-2].TypeVal == Type::VoidTy)
3791 GEN_ERROR("void typed arguments are invalid");
3792 ArgListEntry E; E.Attrs = yyvsp[-1].ParamAttrs; E.Ty = yyvsp[-2].TypeVal; E.Name = yyvsp[0].StrVal;
3793 yyval.ArgList = yyvsp[-4].ArgList;
3794 yyvsp[-4].ArgList->push_back(E);
3799 #line 2096 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3801 if (!UpRefs.empty())
3802 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
3803 if (*yyvsp[-2].TypeVal == Type::VoidTy)
3804 GEN_ERROR("void typed arguments are invalid");
3805 ArgListEntry E; E.Attrs = yyvsp[-1].ParamAttrs; E.Ty = yyvsp[-2].TypeVal; E.Name = yyvsp[0].StrVal;
3806 yyval.ArgList = new ArgListType;
3807 yyval.ArgList->push_back(E);
3812 #line 2107 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3814 yyval.ArgList = yyvsp[0].ArgList;
3819 #line 2111 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3821 yyval.ArgList = yyvsp[-2].ArgList;
3822 struct ArgListEntry E;
3823 E.Ty = new PATypeHolder(Type::VoidTy);
3825 E.Attrs = ParamAttr::None;
3826 yyval.ArgList->push_back(E);
3831 #line 2120 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3833 yyval.ArgList = new ArgListType;
3834 struct ArgListEntry E;
3835 E.Ty = new PATypeHolder(Type::VoidTy);
3837 E.Attrs = ParamAttr::None;
3838 yyval.ArgList->push_back(E);
3843 #line 2129 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3850 #line 2135 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3852 UnEscapeLexed(yyvsp[-6].StrVal);
3853 std::string FunctionName(yyvsp[-6].StrVal);
3854 free(yyvsp[-6].StrVal); // Free strdup'd memory!
3856 // Check the function result for abstractness if this is a define. We should
3857 // have no abstract types at this point
3858 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(yyvsp[-7].TypeVal))
3859 GEN_ERROR("Reference to abstract result: "+ yyvsp[-7].TypeVal->get()->getDescription());
3861 std::vector<const Type*> ParamTypeList;
3862 ParamAttrsVector Attrs;
3863 if (yyvsp[-2].ParamAttrs != ParamAttr::None) {
3864 ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = yyvsp[-2].ParamAttrs;
3865 Attrs.push_back(PAWI);
3867 if (yyvsp[-4].ArgList) { // If there are arguments...
3869 for (ArgListType::iterator I = yyvsp[-4].ArgList->begin(); I != yyvsp[-4].ArgList->end(); ++I, ++index) {
3870 const Type* Ty = I->Ty->get();
3871 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(I->Ty))
3872 GEN_ERROR("Reference to abstract argument: " + Ty->getDescription());
3873 ParamTypeList.push_back(Ty);
3874 if (Ty != Type::VoidTy)
3875 if (I->Attrs != ParamAttr::None) {
3876 ParamAttrsWithIndex PAWI; PAWI.index = index; PAWI.attrs = I->Attrs;
3877 Attrs.push_back(PAWI);
3882 bool isVarArg = ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy;
3883 if (isVarArg) ParamTypeList.pop_back();
3885 ParamAttrsList *PAL = 0;
3887 PAL = ParamAttrsList::get(Attrs);
3889 FunctionType *FT = FunctionType::get(*yyvsp[-7].TypeVal, ParamTypeList, isVarArg, PAL);
3890 const PointerType *PFT = PointerType::get(FT);
3891 delete yyvsp[-7].TypeVal;
3894 if (!FunctionName.empty()) {
3895 ID = ValID::createGlobalName((char*)FunctionName.c_str());
3897 ID = ValID::createGlobalID(CurModule.Values.size());
3901 // See if this function was forward referenced. If so, recycle the object.
3902 if (GlobalValue *FWRef = CurModule.GetForwardRefForGlobal(PFT, ID)) {
3903 // Move the function to the end of the list, from whereever it was
3904 // previously inserted.
3905 Fn = cast<Function>(FWRef);
3906 CurModule.CurrentModule->getFunctionList().remove(Fn);
3907 CurModule.CurrentModule->getFunctionList().push_back(Fn);
3908 } else if (!FunctionName.empty() && // Merge with an earlier prototype?
3909 (Fn = CurModule.CurrentModule->getFunction(FunctionName))) {
3910 if (Fn->getFunctionType() != FT ) {
3911 // The existing function doesn't have the same type. This is an overload
3913 GEN_ERROR("Overload of function '" + FunctionName + "' not permitted.");
3914 } else if (!CurFun.isDeclare && !Fn->isDeclaration()) {
3915 // Neither the existing or the current function is a declaration and they
3916 // have the same name and same type. Clearly this is a redefinition.
3917 GEN_ERROR("Redefinition of function '" + FunctionName + "'");
3918 } if (Fn->isDeclaration()) {
3919 // Make sure to strip off any argument names so we can't get conflicts.
3920 for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end();
3924 } else { // Not already defined?
3925 Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName,
3926 CurModule.CurrentModule);
3928 InsertValue(Fn, CurModule.Values);
3931 CurFun.FunctionStart(Fn);
3933 if (CurFun.isDeclare) {
3934 // If we have declaration, always overwrite linkage. This will allow us to
3935 // correctly handle cases, when pointer to function is passed as argument to
3936 // another function.
3937 Fn->setLinkage(CurFun.Linkage);
3938 Fn->setVisibility(CurFun.Visibility);
3940 Fn->setCallingConv(yyvsp[-8].UIntVal);
3941 Fn->setAlignment(yyvsp[0].UIntVal);
3942 if (yyvsp[-1].StrVal) {
3943 Fn->setSection(yyvsp[-1].StrVal);
3944 free(yyvsp[-1].StrVal);
3947 // Add all of the arguments we parsed to the function...
3948 if (yyvsp[-4].ArgList) { // Is null if empty...
3949 if (isVarArg) { // Nuke the last entry
3950 assert(yyvsp[-4].ArgList->back().Ty->get() == Type::VoidTy && yyvsp[-4].ArgList->back().Name == 0 &&
3951 "Not a varargs marker!");
3952 delete yyvsp[-4].ArgList->back().Ty;
3953 yyvsp[-4].ArgList->pop_back(); // Delete the last entry
3955 Function::arg_iterator ArgIt = Fn->arg_begin();
3956 Function::arg_iterator ArgEnd = Fn->arg_end();
3958 for (ArgListType::iterator I = yyvsp[-4].ArgList->begin();
3959 I != yyvsp[-4].ArgList->end() && ArgIt != ArgEnd; ++I, ++ArgIt) {
3960 delete I->Ty; // Delete the typeholder...
3961 setValueName(ArgIt, I->Name); // Insert arg into symtab...
3967 delete yyvsp[-4].ArgList; // We're now done with the argument list
3973 #line 2258 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3975 yyval.FunctionVal = CurFun.CurrentFunction;
3977 // Make sure that we keep track of the linkage type even if there was a
3978 // previous "declare".
3979 yyval.FunctionVal->setLinkage(yyvsp[-3].Linkage);
3980 yyval.FunctionVal->setVisibility(yyvsp[-2].Visibility);
3984 #line 2269 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3986 yyval.FunctionVal = yyvsp[-1].FunctionVal;
3991 #line 2274 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3993 CurFun.CurrentFunction->setLinkage(yyvsp[-2].Linkage);
3994 CurFun.CurrentFunction->setVisibility(yyvsp[-1].Visibility);
3995 yyval.FunctionVal = CurFun.CurrentFunction;
3996 CurFun.FunctionDone();
4001 #line 2286 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4003 yyval.BoolVal = false;
4008 #line 2290 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4010 yyval.BoolVal = true;
4015 #line 2295 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4016 { // A reference to a direct constant
4017 yyval.ValIDVal = ValID::create(yyvsp[0].SInt64Val);
4022 #line 2299 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4024 yyval.ValIDVal = ValID::create(yyvsp[0].UInt64Val);
4029 #line 2303 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4030 { // Perhaps it's an FP constant?
4031 yyval.ValIDVal = ValID::create(yyvsp[0].FPVal);
4036 #line 2307 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4038 yyval.ValIDVal = ValID::create(ConstantInt::getTrue());
4043 #line 2311 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4045 yyval.ValIDVal = ValID::create(ConstantInt::getFalse());
4050 #line 2315 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4052 yyval.ValIDVal = ValID::createNull();
4057 #line 2319 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4059 yyval.ValIDVal = ValID::createUndef();
4064 #line 2323 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4065 { // A vector zero constant.
4066 yyval.ValIDVal = ValID::createZeroInit();
4071 #line 2327 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4072 { // Nonempty unsized packed vector
4073 const Type *ETy = (*yyvsp[-1].ConstVector)[0]->getType();
4074 int NumElements = yyvsp[-1].ConstVector->size();
4076 VectorType* pt = VectorType::get(ETy, NumElements);
4077 PATypeHolder* PTy = new PATypeHolder(
4085 // Verify all elements are correct type!
4086 for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
4087 if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
4088 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
4089 ETy->getDescription() +"' as required!\nIt is of type '" +
4090 (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
4093 yyval.ValIDVal = ValID::create(ConstantVector::get(pt, *yyvsp[-1].ConstVector));
4094 delete PTy; delete yyvsp[-1].ConstVector;
4099 #line 2352 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4101 yyval.ValIDVal = ValID::create(yyvsp[0].ConstVal);
4106 #line 2356 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4108 char *End = UnEscapeLexed(yyvsp[-2].StrVal, true);
4109 std::string AsmStr = std::string(yyvsp[-2].StrVal, End);
4110 End = UnEscapeLexed(yyvsp[0].StrVal, true);
4111 std::string Constraints = std::string(yyvsp[0].StrVal, End);
4112 yyval.ValIDVal = ValID::createInlineAsm(AsmStr, Constraints, yyvsp[-3].BoolVal);
4113 free(yyvsp[-2].StrVal);
4114 free(yyvsp[0].StrVal);
4119 #line 2370 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4120 { // Is it an integer reference...?
4121 yyval.ValIDVal = ValID::createLocalID(yyvsp[0].UIntVal);
4126 #line 2374 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4128 yyval.ValIDVal = ValID::createGlobalID(yyvsp[0].UIntVal);
4133 #line 2378 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4134 { // Is it a named reference...?
4135 yyval.ValIDVal = ValID::createLocalName(yyvsp[0].StrVal);
4140 #line 2382 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4141 { // Is it a named reference...?
4142 yyval.ValIDVal = ValID::createGlobalName(yyvsp[0].StrVal);
4147 #line 2394 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4149 if (!UpRefs.empty())
4150 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
4151 yyval.ValueVal = getVal(*yyvsp[-1].TypeVal, yyvsp[0].ValIDVal);
4152 delete yyvsp[-1].TypeVal;
4157 #line 2403 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4159 yyval.FunctionVal = yyvsp[-1].FunctionVal;
4164 #line 2407 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4165 { // Do not allow functions with 0 basic blocks
4166 yyval.FunctionVal = yyvsp[-1].FunctionVal;
4171 #line 2416 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4173 setValueName(yyvsp[0].TermInstVal, yyvsp[-1].StrVal);
4175 InsertValue(yyvsp[0].TermInstVal);
4176 yyvsp[-2].BasicBlockVal->getInstList().push_back(yyvsp[0].TermInstVal);
4177 yyval.BasicBlockVal = yyvsp[-2].BasicBlockVal;
4182 #line 2425 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4184 if (CastInst *CI1 = dyn_cast<CastInst>(yyvsp[0].InstVal))
4185 if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0)))
4186 if (CI2->getParent() == 0)
4187 yyvsp[-1].BasicBlockVal->getInstList().push_back(CI2);
4188 yyvsp[-1].BasicBlockVal->getInstList().push_back(yyvsp[0].InstVal);
4189 yyval.BasicBlockVal = yyvsp[-1].BasicBlockVal;
4194 #line 2434 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4195 { // Empty space between instruction lists
4196 yyval.BasicBlockVal = defineBBVal(ValID::createLocalID(CurFun.NextValNum));
4201 #line 2438 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4202 { // Labelled (named) basic block
4203 yyval.BasicBlockVal = defineBBVal(ValID::createLocalName(yyvsp[0].StrVal));
4208 #line 2443 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4209 { // Return with a result...
4210 yyval.TermInstVal = new ReturnInst(yyvsp[0].ValueVal);
4215 #line 2447 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4216 { // Return with no result...
4217 yyval.TermInstVal = new ReturnInst();
4222 #line 2451 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4223 { // Unconditional Branch...
4224 BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
4226 yyval.TermInstVal = new BranchInst(tmpBB);
4230 #line 2456 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4232 assert(cast<IntegerType>(yyvsp[-7].PrimType)->getBitWidth() == 1 && "Not Bool?");
4233 BasicBlock* tmpBBA = getBBVal(yyvsp[-3].ValIDVal);
4235 BasicBlock* tmpBBB = getBBVal(yyvsp[0].ValIDVal);
4237 Value* tmpVal = getVal(Type::Int1Ty, yyvsp[-6].ValIDVal);
4239 yyval.TermInstVal = new BranchInst(tmpBBA, tmpBBB, tmpVal);
4243 #line 2466 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4245 Value* tmpVal = getVal(yyvsp[-7].PrimType, yyvsp[-6].ValIDVal);
4247 BasicBlock* tmpBB = getBBVal(yyvsp[-3].ValIDVal);
4249 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, yyvsp[-1].JumpTable->size());
4250 yyval.TermInstVal = S;
4252 std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = yyvsp[-1].JumpTable->begin(),
4253 E = yyvsp[-1].JumpTable->end();
4254 for (; I != E; ++I) {
4255 if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
4256 S->addCase(CI, I->second);
4258 GEN_ERROR("Switch case is constant, but not a simple integer");
4260 delete yyvsp[-1].JumpTable;
4265 #line 2485 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4267 Value* tmpVal = getVal(yyvsp[-6].PrimType, yyvsp[-5].ValIDVal);
4269 BasicBlock* tmpBB = getBBVal(yyvsp[-2].ValIDVal);
4271 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
4272 yyval.TermInstVal = S;
4277 #line 2495 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4280 // Handle the short syntax
4281 const PointerType *PFTy = 0;
4282 const FunctionType *Ty = 0;
4283 if (!(PFTy = dyn_cast<PointerType>(yyvsp[-11].TypeVal->get())) ||
4284 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
4285 // Pull out the types of all of the arguments...
4286 std::vector<const Type*> ParamTypes;
4287 ParamAttrsVector Attrs;
4288 if (yyvsp[-6].ParamAttrs != ParamAttr::None) {
4289 ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = 8;
4290 Attrs.push_back(PAWI);
4292 ValueRefList::iterator I = yyvsp[-8].ValueRefList->begin(), E = yyvsp[-8].ValueRefList->end();
4294 for (; I != E; ++I, ++index) {
4295 const Type *Ty = I->Val->getType();
4296 if (Ty == Type::VoidTy)
4297 GEN_ERROR("Short call syntax cannot be used with varargs");
4298 ParamTypes.push_back(Ty);
4299 if (I->Attrs != ParamAttr::None) {
4300 ParamAttrsWithIndex PAWI; PAWI.index = index; PAWI.attrs = I->Attrs;
4301 Attrs.push_back(PAWI);
4305 ParamAttrsList *PAL = 0;
4307 PAL = ParamAttrsList::get(Attrs);
4308 Ty = FunctionType::get(yyvsp[-11].TypeVal->get(), ParamTypes, false, PAL);
4309 PFTy = PointerType::get(Ty);
4312 delete yyvsp[-11].TypeVal;
4314 Value *V = getVal(PFTy, yyvsp[-10].ValIDVal); // Get the function we're calling...
4316 BasicBlock *Normal = getBBVal(yyvsp[-3].ValIDVal);
4318 BasicBlock *Except = getBBVal(yyvsp[0].ValIDVal);
4321 // Check the arguments
4323 if (yyvsp[-8].ValueRefList->empty()) { // Has no arguments?
4324 // Make sure no arguments is a good thing!
4325 if (Ty->getNumParams() != 0)
4326 GEN_ERROR("No arguments passed to a function that "
4327 "expects arguments");
4328 } else { // Has arguments?
4329 // Loop through FunctionType's arguments and ensure they are specified
4331 FunctionType::param_iterator I = Ty->param_begin();
4332 FunctionType::param_iterator E = Ty->param_end();
4333 ValueRefList::iterator ArgI = yyvsp[-8].ValueRefList->begin(), ArgE = yyvsp[-8].ValueRefList->end();
4335 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
4336 if (ArgI->Val->getType() != *I)
4337 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
4338 (*I)->getDescription() + "'");
4339 Args.push_back(ArgI->Val);
4342 if (Ty->isVarArg()) {
4344 for (; ArgI != ArgE; ++ArgI)
4345 Args.push_back(ArgI->Val); // push the remaining varargs
4346 } else if (I != E || ArgI != ArgE)
4347 GEN_ERROR("Invalid number of parameters detected");
4350 // Create the InvokeInst
4351 InvokeInst *II = new InvokeInst(V, Normal, Except, &Args[0], Args.size());
4352 II->setCallingConv(yyvsp[-12].UIntVal);
4353 yyval.TermInstVal = II;
4354 delete yyvsp[-8].ValueRefList;
4359 #line 2574 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4361 yyval.TermInstVal = new UnwindInst();
4366 #line 2578 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4368 yyval.TermInstVal = new UnreachableInst();
4373 #line 2585 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4375 yyval.JumpTable = yyvsp[-5].JumpTable;
4376 Constant *V = cast<Constant>(getExistingVal(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal));
4379 GEN_ERROR("May only switch on a constant pool value");
4381 BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
4383 yyval.JumpTable->push_back(std::make_pair(V, tmpBB));
4387 #line 2596 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4389 yyval.JumpTable = new std::vector<std::pair<Constant*, BasicBlock*> >();
4390 Constant *V = cast<Constant>(getExistingVal(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal));
4394 GEN_ERROR("May only switch on a constant pool value");
4396 BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
4398 yyval.JumpTable->push_back(std::make_pair(V, tmpBB));
4402 #line 2609 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4404 // Is this definition named?? if so, assign the name...
4405 setValueName(yyvsp[0].InstVal, yyvsp[-1].StrVal);
4407 InsertValue(yyvsp[0].InstVal);
4408 yyval.InstVal = yyvsp[0].InstVal;
4413 #line 2619 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4414 { // Used for PHI nodes
4415 if (!UpRefs.empty())
4416 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-5].TypeVal)->getDescription());
4417 yyval.PHIList = new std::list<std::pair<Value*, BasicBlock*> >();
4418 Value* tmpVal = getVal(*yyvsp[-5].TypeVal, yyvsp[-3].ValIDVal);
4420 BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal);
4422 yyval.PHIList->push_back(std::make_pair(tmpVal, tmpBB));
4423 delete yyvsp[-5].TypeVal;
4427 #line 2630 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4429 yyval.PHIList = yyvsp[-6].PHIList;
4430 Value* tmpVal = getVal(yyvsp[-6].PHIList->front().first->getType(), yyvsp[-3].ValIDVal);
4432 BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal);
4434 yyvsp[-6].PHIList->push_back(std::make_pair(tmpVal, tmpBB));
4438 #line 2640 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4440 if (!UpRefs.empty())
4441 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
4442 // Used for call and invoke instructions
4443 yyval.ValueRefList = new ValueRefList();
4444 ValueRefListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-2].TypeVal->get(), yyvsp[-1].ValIDVal);
4445 yyval.ValueRefList->push_back(E);
4446 delete yyvsp[-2].TypeVal;
4450 #line 2649 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4452 if (!UpRefs.empty())
4453 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
4454 yyval.ValueRefList = yyvsp[-4].ValueRefList;
4455 ValueRefListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-2].TypeVal->get(), yyvsp[-1].ValIDVal);
4456 yyval.ValueRefList->push_back(E);
4457 delete yyvsp[-2].TypeVal;
4462 #line 2658 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4463 { yyval.ValueRefList = new ValueRefList(); ;
4466 #line 2661 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4467 { yyval.ValueList = new std::vector<Value*>(); ;
4470 #line 2662 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4472 yyval.ValueList = yyvsp[-2].ValueList;
4473 yyval.ValueList->push_back(yyvsp[0].ValueVal);
4478 #line 2669 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4480 yyval.BoolVal = true;
4485 #line 2673 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4487 yyval.BoolVal = false;
4492 #line 2678 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4494 if (!UpRefs.empty())
4495 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
4496 if (!(*yyvsp[-3].TypeVal)->isInteger() && !(*yyvsp[-3].TypeVal)->isFloatingPoint() &&
4497 !isa<VectorType>((*yyvsp[-3].TypeVal).get()))
4499 "Arithmetic operator requires integer, FP, or packed operands");
4500 if (isa<VectorType>((*yyvsp[-3].TypeVal).get()) &&
4501 (yyvsp[-4].BinaryOpVal == Instruction::URem ||
4502 yyvsp[-4].BinaryOpVal == Instruction::SRem ||
4503 yyvsp[-4].BinaryOpVal == Instruction::FRem))
4504 GEN_ERROR("Remainder not supported on vector types");
4505 Value* val1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
4507 Value* val2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
4509 yyval.InstVal = BinaryOperator::create(yyvsp[-4].BinaryOpVal, val1, val2);
4510 if (yyval.InstVal == 0)
4511 GEN_ERROR("binary operator returned null");
4512 delete yyvsp[-3].TypeVal;
4516 #line 2699 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4518 if (!UpRefs.empty())
4519 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
4520 if (!(*yyvsp[-3].TypeVal)->isInteger()) {
4521 if (Instruction::isShift(yyvsp[-4].BinaryOpVal) || !isa<VectorType>(yyvsp[-3].TypeVal->get()) ||
4522 !cast<VectorType>(yyvsp[-3].TypeVal->get())->getElementType()->isInteger())
4523 GEN_ERROR("Logical operator requires integral operands");
4525 Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
4527 Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
4529 yyval.InstVal = BinaryOperator::create(yyvsp[-4].BinaryOpVal, tmpVal1, tmpVal2);
4530 if (yyval.InstVal == 0)
4531 GEN_ERROR("binary operator returned null");
4532 delete yyvsp[-3].TypeVal;
4536 #line 2716 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4538 if (!UpRefs.empty())
4539 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
4540 if (isa<VectorType>((*yyvsp[-3].TypeVal).get()))
4541 GEN_ERROR("Vector types not supported by icmp instruction");
4542 Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
4544 Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
4546 yyval.InstVal = CmpInst::create(yyvsp[-5].OtherOpVal, yyvsp[-4].IPredicate, tmpVal1, tmpVal2);
4547 if (yyval.InstVal == 0)
4548 GEN_ERROR("icmp operator returned null");
4549 delete yyvsp[-3].TypeVal;
4553 #line 2730 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4555 if (!UpRefs.empty())
4556 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
4557 if (isa<VectorType>((*yyvsp[-3].TypeVal).get()))
4558 GEN_ERROR("Vector types not supported by fcmp instruction");
4559 Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
4561 Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
4563 yyval.InstVal = CmpInst::create(yyvsp[-5].OtherOpVal, yyvsp[-4].FPredicate, tmpVal1, tmpVal2);
4564 if (yyval.InstVal == 0)
4565 GEN_ERROR("fcmp operator returned null");
4566 delete yyvsp[-3].TypeVal;
4570 #line 2744 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4572 if (!UpRefs.empty())
4573 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
4574 Value* Val = yyvsp[-2].ValueVal;
4575 const Type* DestTy = yyvsp[0].TypeVal->get();
4576 if (!CastInst::castIsValid(yyvsp[-3].CastOpVal, Val, DestTy))
4577 GEN_ERROR("invalid cast opcode for cast from '" +
4578 Val->getType()->getDescription() + "' to '" +
4579 DestTy->getDescription() + "'");
4580 yyval.InstVal = CastInst::create(yyvsp[-3].CastOpVal, Val, DestTy);
4581 delete yyvsp[0].TypeVal;
4585 #line 2756 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4587 if (yyvsp[-4].ValueVal->getType() != Type::Int1Ty)
4588 GEN_ERROR("select condition must be boolean");
4589 if (yyvsp[-2].ValueVal->getType() != yyvsp[0].ValueVal->getType())
4590 GEN_ERROR("select value types should match");
4591 yyval.InstVal = new SelectInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
4596 #line 2764 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4598 if (!UpRefs.empty())
4599 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
4600 yyval.InstVal = new VAArgInst(yyvsp[-2].ValueVal, *yyvsp[0].TypeVal);
4601 delete yyvsp[0].TypeVal;
4606 #line 2771 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4608 if (!ExtractElementInst::isValidOperands(yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
4609 GEN_ERROR("Invalid extractelement operands");
4610 yyval.InstVal = new ExtractElementInst(yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
4615 #line 2777 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4617 if (!InsertElementInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
4618 GEN_ERROR("Invalid insertelement operands");
4619 yyval.InstVal = new InsertElementInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
4624 #line 2783 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4626 if (!ShuffleVectorInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
4627 GEN_ERROR("Invalid shufflevector operands");
4628 yyval.InstVal = new ShuffleVectorInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
4633 #line 2789 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4635 const Type *Ty = yyvsp[0].PHIList->front().first->getType();
4636 if (!Ty->isFirstClassType())
4637 GEN_ERROR("PHI node operands must be of first class type");
4638 yyval.InstVal = new PHINode(Ty);
4639 ((PHINode*)yyval.InstVal)->reserveOperandSpace(yyvsp[0].PHIList->size());
4640 while (yyvsp[0].PHIList->begin() != yyvsp[0].PHIList->end()) {
4641 if (yyvsp[0].PHIList->front().first->getType() != Ty)
4642 GEN_ERROR("All elements of a PHI node must be of the same type");
4643 cast<PHINode>(yyval.InstVal)->addIncoming(yyvsp[0].PHIList->front().first, yyvsp[0].PHIList->front().second);
4644 yyvsp[0].PHIList->pop_front();
4646 delete yyvsp[0].PHIList; // Free the list...
4651 #line 2805 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4654 // Handle the short syntax
4655 const PointerType *PFTy = 0;
4656 const FunctionType *Ty = 0;
4657 if (!(PFTy = dyn_cast<PointerType>(yyvsp[-5].TypeVal->get())) ||
4658 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
4659 // Pull out the types of all of the arguments...
4660 std::vector<const Type*> ParamTypes;
4661 ParamAttrsVector Attrs;
4662 if (yyvsp[0].ParamAttrs != ParamAttr::None) {
4663 ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = yyvsp[0].ParamAttrs;
4664 Attrs.push_back(PAWI);
4667 ValueRefList::iterator I = yyvsp[-2].ValueRefList->begin(), E = yyvsp[-2].ValueRefList->end();
4668 for (; I != E; ++I, ++index) {
4669 const Type *Ty = I->Val->getType();
4670 if (Ty == Type::VoidTy)
4671 GEN_ERROR("Short call syntax cannot be used with varargs");
4672 ParamTypes.push_back(Ty);
4673 if (I->Attrs != ParamAttr::None) {
4674 ParamAttrsWithIndex PAWI; PAWI.index = index; PAWI.attrs = I->Attrs;
4675 Attrs.push_back(PAWI);
4679 ParamAttrsList *PAL = 0;
4681 PAL = ParamAttrsList::get(Attrs);
4683 Ty = FunctionType::get(yyvsp[-5].TypeVal->get(), ParamTypes, false, PAL);
4684 PFTy = PointerType::get(Ty);
4687 Value *V = getVal(PFTy, yyvsp[-4].ValIDVal); // Get the function we're calling...
4690 // Check for call to invalid intrinsic to avoid crashing later.
4691 if (Function *theF = dyn_cast<Function>(V)) {
4692 if (theF->hasName() && (theF->getValueName()->getKeyLength() >= 5) &&
4693 (0 == strncmp(theF->getValueName()->getKeyData(), "llvm.", 5)) &&
4694 !theF->getIntrinsicID(true))
4695 GEN_ERROR("Call to invalid LLVM intrinsic function '" +
4696 theF->getName() + "'");
4699 // Check the arguments
4701 if (yyvsp[-2].ValueRefList->empty()) { // Has no arguments?
4702 // Make sure no arguments is a good thing!
4703 if (Ty->getNumParams() != 0)
4704 GEN_ERROR("No arguments passed to a function that "
4705 "expects arguments");
4706 } else { // Has arguments?
4707 // Loop through FunctionType's arguments and ensure they are specified
4710 FunctionType::param_iterator I = Ty->param_begin();
4711 FunctionType::param_iterator E = Ty->param_end();
4712 ValueRefList::iterator ArgI = yyvsp[-2].ValueRefList->begin(), ArgE = yyvsp[-2].ValueRefList->end();
4714 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
4715 if (ArgI->Val->getType() != *I)
4716 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
4717 (*I)->getDescription() + "'");
4718 Args.push_back(ArgI->Val);
4720 if (Ty->isVarArg()) {
4722 for (; ArgI != ArgE; ++ArgI)
4723 Args.push_back(ArgI->Val); // push the remaining varargs
4724 } else if (I != E || ArgI != ArgE)
4725 GEN_ERROR("Invalid number of parameters detected");
4727 // Create the call node
4728 CallInst *CI = new CallInst(V, &Args[0], Args.size());
4729 CI->setTailCall(yyvsp[-7].BoolVal);
4730 CI->setCallingConv(yyvsp[-6].UIntVal);
4732 delete yyvsp[-2].ValueRefList;
4733 delete yyvsp[-5].TypeVal;
4738 #line 2889 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4740 yyval.InstVal = yyvsp[0].InstVal;
4745 #line 2894 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4747 yyval.BoolVal = true;
4752 #line 2898 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4754 yyval.BoolVal = false;
4759 #line 2905 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4761 if (!UpRefs.empty())
4762 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
4763 yyval.InstVal = new MallocInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal);
4764 delete yyvsp[-1].TypeVal;
4769 #line 2912 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4771 if (!UpRefs.empty())
4772 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
4773 Value* tmpVal = getVal(yyvsp[-2].PrimType, yyvsp[-1].ValIDVal);
4775 yyval.InstVal = new MallocInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
4776 delete yyvsp[-4].TypeVal;
4780 #line 2920 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4782 if (!UpRefs.empty())
4783 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
4784 yyval.InstVal = new AllocaInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal);
4785 delete yyvsp[-1].TypeVal;
4790 #line 2927 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4792 if (!UpRefs.empty())
4793 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
4794 Value* tmpVal = getVal(yyvsp[-2].PrimType, yyvsp[-1].ValIDVal);
4796 yyval.InstVal = new AllocaInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
4797 delete yyvsp[-4].TypeVal;
4801 #line 2935 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4803 if (!isa<PointerType>(yyvsp[0].ValueVal->getType()))
4804 GEN_ERROR("Trying to free nonpointer type " +
4805 yyvsp[0].ValueVal->getType()->getDescription() + "");
4806 yyval.InstVal = new FreeInst(yyvsp[0].ValueVal);
4811 #line 2943 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4813 if (!UpRefs.empty())
4814 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
4815 if (!isa<PointerType>(yyvsp[-2].TypeVal->get()))
4816 GEN_ERROR("Can't load from nonpointer type: " +
4817 (*yyvsp[-2].TypeVal)->getDescription());
4818 if (!cast<PointerType>(yyvsp[-2].TypeVal->get())->getElementType()->isFirstClassType())
4819 GEN_ERROR("Can't load from pointer of non-first-class type: " +
4820 (*yyvsp[-2].TypeVal)->getDescription());
4821 Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal);
4823 yyval.InstVal = new LoadInst(tmpVal, "", yyvsp[-4].BoolVal, yyvsp[0].UIntVal);
4824 delete yyvsp[-2].TypeVal;
4828 #line 2957 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4830 if (!UpRefs.empty())
4831 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
4832 const PointerType *PT = dyn_cast<PointerType>(yyvsp[-2].TypeVal->get());
4834 GEN_ERROR("Can't store to a nonpointer type: " +
4835 (*yyvsp[-2].TypeVal)->getDescription());
4836 const Type *ElTy = PT->getElementType();
4837 if (ElTy != yyvsp[-4].ValueVal->getType())
4838 GEN_ERROR("Can't store '" + yyvsp[-4].ValueVal->getType()->getDescription() +
4839 "' into space of type '" + ElTy->getDescription() + "'");
4841 Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal);
4843 yyval.InstVal = new StoreInst(yyvsp[-4].ValueVal, tmpVal, yyvsp[-6].BoolVal, yyvsp[0].UIntVal);
4844 delete yyvsp[-2].TypeVal;
4848 #line 2974 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4850 if (!UpRefs.empty())
4851 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
4852 if (!isa<PointerType>(yyvsp[-2].TypeVal->get()))
4853 GEN_ERROR("getelementptr insn requires pointer operand");
4855 if (!GetElementPtrInst::getIndexedType(*yyvsp[-2].TypeVal, &(*yyvsp[0].ValueList)[0], yyvsp[0].ValueList->size(), true))
4856 GEN_ERROR("Invalid getelementptr indices for type '" +
4857 (*yyvsp[-2].TypeVal)->getDescription()+ "'");
4858 Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal);
4860 yyval.InstVal = new GetElementPtrInst(tmpVal, &(*yyvsp[0].ValueList)[0], yyvsp[0].ValueList->size());
4861 delete yyvsp[-2].TypeVal;
4862 delete yyvsp[0].ValueList;
4866 /* the action file gets copied in in place of this dollarsign */
4867 #line 543 "/usr/share/bison.simple"
4878 short *ssp1 = yyss - 1;
4879 fprintf (stderr, "state stack now");
4880 while (ssp1 != yyssp)
4881 fprintf (stderr, " %d", *++ssp1);
4882 fprintf (stderr, "\n");
4892 yylsp->first_line = yylloc.first_line;
4893 yylsp->first_column = yylloc.first_column;
4894 yylsp->last_line = (yylsp-1)->last_line;
4895 yylsp->last_column = (yylsp-1)->last_column;
4900 yylsp->last_line = (yylsp+yylen-1)->last_line;
4901 yylsp->last_column = (yylsp+yylen-1)->last_column;
4905 /* Now "shift" the result of the reduction.
4906 Determine what state that goes to,
4907 based on the state we popped back to
4908 and the rule number reduced by. */
4912 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
4913 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
4914 yystate = yytable[yystate];
4916 yystate = yydefgoto[yyn - YYNTBASE];
4920 yyerrlab: /* here on detecting error */
4923 /* If not already recovering from an error, report this error. */
4927 #ifdef YYERROR_VERBOSE
4928 yyn = yypact[yystate];
4930 if (yyn > YYFLAG && yyn < YYLAST)
4937 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
4938 for (x = (yyn < 0 ? -yyn : 0);
4939 x < (sizeof(yytname) / sizeof(char *)); x++)
4940 if (yycheck[x + yyn] == x)
4941 size += strlen(yytname[x]) + 15, count++;
4942 msg = (char *) malloc(size + 15);
4945 strcpy(msg, "parse error");
4950 for (x = (yyn < 0 ? -yyn : 0);
4951 x < (sizeof(yytname) / sizeof(char *)); x++)
4952 if (yycheck[x + yyn] == x)
4954 strcat(msg, count == 0 ? ", expecting `" : " or `");
4955 strcat(msg, yytname[x]);
4964 yyerror ("parse error; also virtual memory exceeded");
4967 #endif /* YYERROR_VERBOSE */
4968 yyerror("parse error");
4972 yyerrlab1: /* here on error raised explicitly by an action */
4974 if (yyerrstatus == 3)
4976 /* if just tried and failed to reuse lookahead token after an error, discard it. */
4978 /* return failure if at end of input */
4979 if (yychar == YYEOF)
4984 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
4990 /* Else will try to reuse lookahead token
4991 after shifting the error token. */
4993 yyerrstatus = 3; /* Each real token shifted decrements this */
4997 yyerrdefault: /* current state does not do anything special for the error token. */
5000 /* This is wrong; only states that explicitly want error tokens
5001 should shift them. */
5002 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
5003 if (yyn) goto yydefault;
5006 yyerrpop: /* pop the current state because it cannot handle the error token */
5008 if (yyssp == yyss) YYABORT;
5018 short *ssp1 = yyss - 1;
5019 fprintf (stderr, "Error: state stack now");
5020 while (ssp1 != yyssp)
5021 fprintf (stderr, " %d", *++ssp1);
5022 fprintf (stderr, "\n");
5028 yyn = yypact[yystate];
5033 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
5052 fprintf(stderr, "Shifting error token, ");
5064 /* YYACCEPT comes here. */
5076 /* YYABORT comes here. */
5087 #line 2991 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
5090 // common code from the two 'RunVMAsmParser' functions
5091 static Module* RunParser(Module * M) {
5093 llvmAsmlineno = 1; // Reset the current line number...
5094 CurModule.CurrentModule = M;
5099 // Check to make sure the parser succeeded
5102 delete ParserResult;
5106 // Emit an error if there are any unresolved types left.
5107 if (!CurModule.LateResolveTypes.empty()) {
5108 const ValID &DID = CurModule.LateResolveTypes.begin()->first;
5109 if (DID.Type == ValID::LocalName) {
5110 GenerateError("Undefined type remains at eof: '"+DID.getName() + "'");
5112 GenerateError("Undefined type remains at eof: #" + itostr(DID.Num));
5115 delete ParserResult;
5119 // Emit an error if there are any unresolved values left.
5120 if (!CurModule.LateResolveValues.empty()) {
5121 Value *V = CurModule.LateResolveValues.back();
5122 std::map<Value*, std::pair<ValID, int> >::iterator I =
5123 CurModule.PlaceHolderInfo.find(V);
5125 if (I != CurModule.PlaceHolderInfo.end()) {
5126 ValID &DID = I->second.first;
5127 if (DID.Type == ValID::LocalName) {
5128 GenerateError("Undefined value remains at eof: "+DID.getName() + "'");
5130 GenerateError("Undefined value remains at eof: #" + itostr(DID.Num));
5133 delete ParserResult;
5138 // Check to make sure that parsing produced a result
5142 // Reset ParserResult variable while saving its value for the result.
5143 Module *Result = ParserResult;
5149 void llvm::GenerateError(const std::string &message, int LineNo) {
5150 if (LineNo == -1) LineNo = llvmAsmlineno;
5151 // TODO: column number in exception
5153 TheParseError->setError(CurFilename, message, LineNo);
5157 int yyerror(const char *ErrorMsg) {
5159 = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename)
5160 + ":" + utostr((unsigned) llvmAsmlineno) + ": ";
5161 std::string errMsg = where + "error: " + std::string(ErrorMsg);
5162 if (yychar != YYEMPTY && yychar != 0)
5163 errMsg += " while reading token: '" + std::string(llvmAsmtext, llvmAsmleng)+
5165 GenerateError(errMsg);