blob: 2e540c350cc130a969021a3c5ba518dfb9c76083 [file] [log] [blame]
Reid Spencere4d87aa2006-12-23 06:05:41 +00001/* A Bison parser, made by GNU Bison 2.1. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002
Andrew Lenharth6353e052006-12-08 18:07:09 +00003/* Skeleton parser for Yacc-like parsing with Bison,
Reid Spencere4d87aa2006-12-23 06:05:41 +00004 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
Reid Spencer68a24bd2005-08-27 18:50:39 +00005
Reid Spencer3822ff52006-11-08 06:47:33 +00006 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +000010
Reid Spencer3822ff52006-11-08 06:47:33 +000011 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
Reid Spencere4d87aa2006-12-23 06:05:41 +000018 Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 Boston, MA 02110-1301, USA. */
Reid Spencer3822ff52006-11-08 06:47:33 +000020
Andrew Lenharth6353e052006-12-08 18:07:09 +000021/* As a special exception, when this file is copied by Bison into a
22 Bison output file, you may use that output file without restriction.
23 This special exception was added by the Free Software Foundation
24 in version 1.24 of Bison. */
Reid Spencer3822ff52006-11-08 06:47:33 +000025
Andrew Lenharth6353e052006-12-08 18:07:09 +000026/* Written by Richard Stallman by simplifying the original so called
27 ``semantic'' parser. */
Reid Spencer3822ff52006-11-08 06:47:33 +000028
29/* All symbols defined below should begin with yy or YY, to avoid
30 infringing on user name space. This should be done even for local
31 variables, as they might otherwise be expanded by user macros.
32 There are some unavoidable exceptions within include files to
33 define necessary library symbols; they are noted "INFRINGES ON
34 USER NAME SPACE" below. */
35
36/* Identify Bison output. */
37#define YYBISON 1
38
Reid Spencere4d87aa2006-12-23 06:05:41 +000039/* Bison version. */
40#define YYBISON_VERSION "2.1"
41
Reid Spencer3822ff52006-11-08 06:47:33 +000042/* Skeleton name. */
43#define YYSKELETON_NAME "yacc.c"
44
45/* Pure parsers. */
46#define YYPURE 0
47
48/* Using locations. */
49#define YYLSP_NEEDED 0
50
Reid Spencere4d87aa2006-12-23 06:05:41 +000051/* Substitute the variable and function names. */
Reid Spencer68a24bd2005-08-27 18:50:39 +000052#define yyparse llvmAsmparse
Reid Spencer3822ff52006-11-08 06:47:33 +000053#define yylex llvmAsmlex
Reid Spencer68a24bd2005-08-27 18:50:39 +000054#define yyerror llvmAsmerror
Reid Spencer3822ff52006-11-08 06:47:33 +000055#define yylval llvmAsmlval
56#define yychar llvmAsmchar
Reid Spencer68a24bd2005-08-27 18:50:39 +000057#define yydebug llvmAsmdebug
58#define yynerrs llvmAsmnerrs
59
Reid Spencer3822ff52006-11-08 06:47:33 +000060
61/* Tokens. */
62#ifndef YYTOKENTYPE
63# define YYTOKENTYPE
64 /* Put the tokens into the symbol table, so that GDB and other debuggers
65 know about them. */
66 enum yytokentype {
67 ESINT64VAL = 258,
68 EUINT64VAL = 259,
69 SINTVAL = 260,
70 UINTVAL = 261,
71 FPVAL = 262,
72 VOID = 263,
73 BOOL = 264,
Reid Spencera54b7cb2007-01-12 07:05:14 +000074 INTTYPE = 265,
75 FLOAT = 266,
76 DOUBLE = 267,
77 LABEL = 268,
78 TYPE = 269,
79 VAR_ID = 270,
80 LABELSTR = 271,
81 STRINGCONSTANT = 272,
82 IMPLEMENTATION = 273,
83 ZEROINITIALIZER = 274,
84 TRUETOK = 275,
85 FALSETOK = 276,
86 BEGINTOK = 277,
87 ENDTOK = 278,
88 DECLARE = 279,
89 DEFINE = 280,
90 GLOBAL = 281,
91 CONSTANT = 282,
92 SECTION = 283,
93 VOLATILE = 284,
94 TO = 285,
95 DOTDOTDOT = 286,
96 NULL_TOK = 287,
97 UNDEF = 288,
98 INTERNAL = 289,
99 LINKONCE = 290,
100 WEAK = 291,
101 APPENDING = 292,
102 DLLIMPORT = 293,
103 DLLEXPORT = 294,
104 EXTERN_WEAK = 295,
105 OPAQUE = 296,
106 NOT = 297,
107 EXTERNAL = 298,
108 TARGET = 299,
109 TRIPLE = 300,
110 ENDIAN = 301,
111 POINTERSIZE = 302,
112 LITTLE = 303,
113 BIG = 304,
114 ALIGN = 305,
115 DEPLIBS = 306,
116 CALL = 307,
117 TAIL = 308,
118 ASM_TOK = 309,
119 MODULE = 310,
120 SIDEEFFECT = 311,
121 CC_TOK = 312,
122 CCC_TOK = 313,
123 CSRETCC_TOK = 314,
124 FASTCC_TOK = 315,
125 COLDCC_TOK = 316,
126 X86_STDCALLCC_TOK = 317,
127 X86_FASTCALLCC_TOK = 318,
128 DATALAYOUT = 319,
129 RET = 320,
130 BR = 321,
131 SWITCH = 322,
132 INVOKE = 323,
133 UNWIND = 324,
134 UNREACHABLE = 325,
135 ADD = 326,
136 SUB = 327,
137 MUL = 328,
138 UDIV = 329,
139 SDIV = 330,
140 FDIV = 331,
141 UREM = 332,
142 SREM = 333,
143 FREM = 334,
144 AND = 335,
145 OR = 336,
146 XOR = 337,
147 ICMP = 338,
148 FCMP = 339,
149 EQ = 340,
150 NE = 341,
151 SLT = 342,
152 SGT = 343,
153 SLE = 344,
154 SGE = 345,
155 ULT = 346,
156 UGT = 347,
157 ULE = 348,
158 UGE = 349,
159 OEQ = 350,
160 ONE = 351,
161 OLT = 352,
162 OGT = 353,
163 OLE = 354,
164 OGE = 355,
165 ORD = 356,
166 UNO = 357,
167 UEQ = 358,
168 UNE = 359,
169 MALLOC = 360,
170 ALLOCA = 361,
171 FREE = 362,
172 LOAD = 363,
173 STORE = 364,
174 GETELEMENTPTR = 365,
175 TRUNC = 366,
176 ZEXT = 367,
177 SEXT = 368,
178 FPTRUNC = 369,
179 FPEXT = 370,
180 BITCAST = 371,
181 UITOFP = 372,
182 SITOFP = 373,
183 FPTOUI = 374,
184 FPTOSI = 375,
185 INTTOPTR = 376,
186 PTRTOINT = 377,
187 PHI_TOK = 378,
188 SELECT = 379,
189 SHL = 380,
190 LSHR = 381,
191 ASHR = 382,
192 VAARG = 383,
193 EXTRACTELEMENT = 384,
194 INSERTELEMENT = 385,
195 SHUFFLEVECTOR = 386,
196 NORETURN = 387
Reid Spencer3822ff52006-11-08 06:47:33 +0000197 };
198#endif
Reid Spencere4d87aa2006-12-23 06:05:41 +0000199/* Tokens. */
Reid Spencer3822ff52006-11-08 06:47:33 +0000200#define ESINT64VAL 258
201#define EUINT64VAL 259
202#define SINTVAL 260
203#define UINTVAL 261
204#define FPVAL 262
205#define VOID 263
206#define BOOL 264
Reid Spencera54b7cb2007-01-12 07:05:14 +0000207#define INTTYPE 265
208#define FLOAT 266
209#define DOUBLE 267
210#define LABEL 268
211#define TYPE 269
212#define VAR_ID 270
213#define LABELSTR 271
214#define STRINGCONSTANT 272
215#define IMPLEMENTATION 273
216#define ZEROINITIALIZER 274
217#define TRUETOK 275
218#define FALSETOK 276
219#define BEGINTOK 277
220#define ENDTOK 278
221#define DECLARE 279
222#define DEFINE 280
223#define GLOBAL 281
224#define CONSTANT 282
225#define SECTION 283
226#define VOLATILE 284
227#define TO 285
228#define DOTDOTDOT 286
229#define NULL_TOK 287
230#define UNDEF 288
231#define INTERNAL 289
232#define LINKONCE 290
233#define WEAK 291
234#define APPENDING 292
235#define DLLIMPORT 293
236#define DLLEXPORT 294
237#define EXTERN_WEAK 295
238#define OPAQUE 296
239#define NOT 297
240#define EXTERNAL 298
241#define TARGET 299
242#define TRIPLE 300
243#define ENDIAN 301
244#define POINTERSIZE 302
245#define LITTLE 303
246#define BIG 304
247#define ALIGN 305
248#define DEPLIBS 306
249#define CALL 307
250#define TAIL 308
251#define ASM_TOK 309
252#define MODULE 310
253#define SIDEEFFECT 311
254#define CC_TOK 312
255#define CCC_TOK 313
256#define CSRETCC_TOK 314
257#define FASTCC_TOK 315
258#define COLDCC_TOK 316
259#define X86_STDCALLCC_TOK 317
260#define X86_FASTCALLCC_TOK 318
261#define DATALAYOUT 319
262#define RET 320
263#define BR 321
264#define SWITCH 322
265#define INVOKE 323
266#define UNWIND 324
267#define UNREACHABLE 325
268#define ADD 326
269#define SUB 327
270#define MUL 328
271#define UDIV 329
272#define SDIV 330
273#define FDIV 331
274#define UREM 332
275#define SREM 333
276#define FREM 334
277#define AND 335
278#define OR 336
279#define XOR 337
280#define ICMP 338
281#define FCMP 339
282#define EQ 340
283#define NE 341
284#define SLT 342
285#define SGT 343
286#define SLE 344
287#define SGE 345
288#define ULT 346
289#define UGT 347
290#define ULE 348
291#define UGE 349
292#define OEQ 350
293#define ONE 351
294#define OLT 352
295#define OGT 353
296#define OLE 354
297#define OGE 355
298#define ORD 356
299#define UNO 357
300#define UEQ 358
301#define UNE 359
302#define MALLOC 360
303#define ALLOCA 361
304#define FREE 362
305#define LOAD 363
306#define STORE 364
307#define GETELEMENTPTR 365
308#define TRUNC 366
309#define ZEXT 367
310#define SEXT 368
311#define FPTRUNC 369
312#define FPEXT 370
313#define BITCAST 371
314#define UITOFP 372
315#define SITOFP 373
316#define FPTOUI 374
317#define FPTOSI 375
318#define INTTOPTR 376
319#define PTRTOINT 377
320#define PHI_TOK 378
321#define SELECT 379
322#define SHL 380
323#define LSHR 381
324#define ASHR 382
325#define VAARG 383
326#define EXTRACTELEMENT 384
327#define INSERTELEMENT 385
328#define SHUFFLEVECTOR 386
329#define NORETURN 387
Reid Spencer3822ff52006-11-08 06:47:33 +0000330
331
332
333
334/* Copy the first part of user declarations. */
Reid Spencera54b7cb2007-01-12 07:05:14 +0000335#line 14 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000336
337#include "ParserInternals.h"
338#include "llvm/CallingConv.h"
Chris Lattner0e9c3762006-01-25 22:27:16 +0000339#include "llvm/InlineAsm.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000340#include "llvm/Instructions.h"
341#include "llvm/Module.h"
342#include "llvm/SymbolTable.h"
343#include "llvm/Support/GetElementPtrTypeIterator.h"
Reid Spencer14310612006-12-31 05:40:51 +0000344#include "llvm/Support/CommandLine.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000345#include "llvm/ADT/STLExtras.h"
Chris Lattner0019bbe2005-11-06 06:46:53 +0000346#include "llvm/Support/MathExtras.h"
Reid Spencer481169e2006-12-01 00:33:46 +0000347#include "llvm/Support/Streams.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000348#include <algorithm>
Reid Spencer68a24bd2005-08-27 18:50:39 +0000349#include <list>
350#include <utility>
Reid Spencer14310612006-12-31 05:40:51 +0000351#ifndef NDEBUG
352#define YYDEBUG 1
353#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +0000354
Reid Spencere4f47592006-08-18 17:32:55 +0000355// The following is a gross hack. In order to rid the libAsmParser library of
356// exceptions, we have to have a way of getting the yyparse function to go into
357// an error situation. So, whenever we want an error to occur, the GenerateError
358// function (see bottom of file) sets TriggerError. Then, at the end of each
359// production in the grammer we use CHECK_FOR_ERROR which will invoke YYERROR
360// (a goto) to put YACC in error state. Furthermore, several calls to
361// GenerateError are made from inside productions and they must simulate the
362// previous exception behavior by exiting the production immediately. We have
363// replaced these with the GEN_ERROR macro which calls GeneratError and then
364// immediately invokes YYERROR. This would be so much cleaner if it was a
365// recursive descent parser.
Reid Spencer61c83e02006-08-18 08:43:06 +0000366static bool TriggerError = false;
Reid Spencerf63697d2006-10-09 17:36:59 +0000367#define CHECK_FOR_ERROR { if (TriggerError) { TriggerError = false; YYABORT; } }
Reid Spencer61c83e02006-08-18 08:43:06 +0000368#define GEN_ERROR(msg) { GenerateError(msg); YYERROR; }
369
Reid Spencer68a24bd2005-08-27 18:50:39 +0000370int yyerror(const char *ErrorMsg); // Forward declarations to prevent "implicit
371int yylex(); // declaration" of xxx warnings.
372int yyparse();
373
374namespace llvm {
375 std::string CurFilename;
Reid Spencer14310612006-12-31 05:40:51 +0000376#if YYDEBUG
377static cl::opt<bool>
378Debug("debug-yacc", cl::desc("Print yacc debug state changes"),
379 cl::Hidden, cl::init(false));
380#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +0000381}
382using namespace llvm;
383
384static Module *ParserResult;
385
386// DEBUG_UPREFS - Define this symbol if you want to enable debugging output
387// relating to upreferences in the input stream.
388//
389//#define DEBUG_UPREFS 1
390#ifdef DEBUG_UPREFS
Bill Wendlinge8156192006-12-07 01:30:32 +0000391#define UR_OUT(X) cerr << X
Reid Spencer68a24bd2005-08-27 18:50:39 +0000392#else
393#define UR_OUT(X)
394#endif
395
396#define YYERROR_VERBOSE 1
397
Chris Lattnerb475c422005-11-12 18:22:38 +0000398static GlobalVariable *CurGV;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000399
400
401// This contains info used when building the body of a function. It is
402// destroyed when the function is completed.
403//
404typedef std::vector<Value *> ValueList; // Numbered defs
Reid Spencer14310612006-12-31 05:40:51 +0000405
Reid Spencer68a24bd2005-08-27 18:50:39 +0000406static void
407ResolveDefinitions(std::map<const Type *,ValueList> &LateResolvers,
408 std::map<const Type *,ValueList> *FutureLateResolvers = 0);
409
410static struct PerModuleInfo {
411 Module *CurrentModule;
412 std::map<const Type *, ValueList> Values; // Module level numbered definitions
413 std::map<const Type *,ValueList> LateResolveValues;
Reid Spencer861d9d62006-11-28 07:29:44 +0000414 std::vector<PATypeHolder> Types;
415 std::map<ValID, PATypeHolder> LateResolveTypes;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000416
417 /// PlaceHolderInfo - When temporary placeholder objects are created, remember
Chris Lattner0ad19702006-06-21 16:53:00 +0000418 /// how they were referenced and on which line of the input they came from so
Reid Spencer68a24bd2005-08-27 18:50:39 +0000419 /// that we can resolve them later and print error messages as appropriate.
420 std::map<Value*, std::pair<ValID, int> > PlaceHolderInfo;
421
422 // GlobalRefs - This maintains a mapping between <Type, ValID>'s and forward
423 // references to global values. Global values may be referenced before they
424 // are defined, and if so, the temporary object that they represent is held
425 // here. This is used for forward references of GlobalValues.
426 //
427 typedef std::map<std::pair<const PointerType *,
428 ValID>, GlobalValue*> GlobalRefsType;
429 GlobalRefsType GlobalRefs;
430
431 void ModuleDone() {
432 // If we could not resolve some functions at function compilation time
433 // (calls to functions before they are defined), resolve them now... Types
434 // are resolved when the constant pool has been completely parsed.
435 //
436 ResolveDefinitions(LateResolveValues);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000437 if (TriggerError)
438 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000439
440 // Check to make sure that all global value forward references have been
441 // resolved!
442 //
443 if (!GlobalRefs.empty()) {
444 std::string UndefinedReferences = "Unresolved global references exist:\n";
445
446 for (GlobalRefsType::iterator I = GlobalRefs.begin(), E =GlobalRefs.end();
447 I != E; ++I) {
448 UndefinedReferences += " " + I->first.first->getDescription() + " " +
449 I->first.second.getName() + "\n";
450 }
Reid Spencer61c83e02006-08-18 08:43:06 +0000451 GenerateError(UndefinedReferences);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000452 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000453 }
454
455 Values.clear(); // Clear out function local definitions
456 Types.clear();
457 CurrentModule = 0;
458 }
459
Reid Spencer68a24bd2005-08-27 18:50:39 +0000460 // GetForwardRefForGlobal - Check to see if there is a forward reference
461 // for this global. If so, remove it from the GlobalRefs map and return it.
462 // If not, just return null.
463 GlobalValue *GetForwardRefForGlobal(const PointerType *PTy, ValID ID) {
464 // Check to see if there is a forward reference to this global variable...
465 // if there is, eliminate it and patch the reference to use the new def'n.
466 GlobalRefsType::iterator I = GlobalRefs.find(std::make_pair(PTy, ID));
467 GlobalValue *Ret = 0;
468 if (I != GlobalRefs.end()) {
469 Ret = I->second;
470 GlobalRefs.erase(I);
471 }
472 return Ret;
473 }
Reid Spencer8c8a2dc2007-01-02 21:54:12 +0000474
475 bool TypeIsUnresolved(PATypeHolder* PATy) {
476 // If it isn't abstract, its resolved
477 const Type* Ty = PATy->get();
478 if (!Ty->isAbstract())
479 return false;
480 // Traverse the type looking for abstract types. If it isn't abstract then
481 // we don't need to traverse that leg of the type.
482 std::vector<const Type*> WorkList, SeenList;
483 WorkList.push_back(Ty);
484 while (!WorkList.empty()) {
485 const Type* Ty = WorkList.back();
486 SeenList.push_back(Ty);
487 WorkList.pop_back();
488 if (const OpaqueType* OpTy = dyn_cast<OpaqueType>(Ty)) {
489 // Check to see if this is an unresolved type
490 std::map<ValID, PATypeHolder>::iterator I = LateResolveTypes.begin();
491 std::map<ValID, PATypeHolder>::iterator E = LateResolveTypes.end();
492 for ( ; I != E; ++I) {
493 if (I->second.get() == OpTy)
494 return true;
495 }
496 } else if (const SequentialType* SeqTy = dyn_cast<SequentialType>(Ty)) {
497 const Type* TheTy = SeqTy->getElementType();
498 if (TheTy->isAbstract() && TheTy != Ty) {
499 std::vector<const Type*>::iterator I = SeenList.begin(),
500 E = SeenList.end();
501 for ( ; I != E; ++I)
502 if (*I == TheTy)
503 break;
504 if (I == E)
505 WorkList.push_back(TheTy);
506 }
507 } else if (const StructType* StrTy = dyn_cast<StructType>(Ty)) {
508 for (unsigned i = 0; i < StrTy->getNumElements(); ++i) {
509 const Type* TheTy = StrTy->getElementType(i);
510 if (TheTy->isAbstract() && TheTy != Ty) {
511 std::vector<const Type*>::iterator I = SeenList.begin(),
512 E = SeenList.end();
513 for ( ; I != E; ++I)
514 if (*I == TheTy)
515 break;
516 if (I == E)
517 WorkList.push_back(TheTy);
518 }
519 }
520 }
521 }
522 return false;
523 }
524
525
Reid Spencer68a24bd2005-08-27 18:50:39 +0000526} CurModule;
527
528static struct PerFunctionInfo {
529 Function *CurrentFunction; // Pointer to current function being created
530
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000531 std::map<const Type*, ValueList> Values; // Keep track of #'d definitions
Reid Spencer68a24bd2005-08-27 18:50:39 +0000532 std::map<const Type*, ValueList> LateResolveValues;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000533 bool isDeclare; // Is this function a forward declararation?
534 GlobalValue::LinkageTypes Linkage; // Linkage for forward declaration.
Reid Spencer68a24bd2005-08-27 18:50:39 +0000535
536 /// BBForwardRefs - When we see forward references to basic blocks, keep
537 /// track of them here.
538 std::map<BasicBlock*, std::pair<ValID, int> > BBForwardRefs;
539 std::vector<BasicBlock*> NumberedBlocks;
540 unsigned NextBBNum;
541
542 inline PerFunctionInfo() {
543 CurrentFunction = 0;
544 isDeclare = false;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000545 Linkage = GlobalValue::ExternalLinkage;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000546 }
547
548 inline void FunctionStart(Function *M) {
549 CurrentFunction = M;
550 NextBBNum = 0;
551 }
552
553 void FunctionDone() {
554 NumberedBlocks.clear();
555
556 // Any forward referenced blocks left?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000557 if (!BBForwardRefs.empty()) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000558 GenerateError("Undefined reference to label " +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000559 BBForwardRefs.begin()->first->getName());
Reid Spencer5b7e7532006-09-28 19:28:24 +0000560 return;
561 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000562
563 // Resolve all forward references now.
564 ResolveDefinitions(LateResolveValues, &CurModule.LateResolveValues);
565
566 Values.clear(); // Clear out function local definitions
567 CurrentFunction = 0;
568 isDeclare = false;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000569 Linkage = GlobalValue::ExternalLinkage;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000570 }
571} CurFun; // Info for the current function...
572
573static bool inFunctionScope() { return CurFun.CurrentFunction != 0; }
574
575
576//===----------------------------------------------------------------------===//
577// Code to handle definitions of all the types
578//===----------------------------------------------------------------------===//
579
580static int InsertValue(Value *V,
581 std::map<const Type*,ValueList> &ValueTab = CurFun.Values) {
582 if (V->hasName()) return -1; // Is this a numbered definition?
583
584 // Yes, insert the value into the value table...
585 ValueList &List = ValueTab[V->getType()];
586 List.push_back(V);
587 return List.size()-1;
588}
589
590static const Type *getTypeVal(const ValID &D, bool DoNotImprovise = false) {
591 switch (D.Type) {
592 case ValID::NumberVal: // Is it a numbered definition?
593 // Module constants occupy the lowest numbered slots...
594 if ((unsigned)D.Num < CurModule.Types.size())
Reid Spencer861d9d62006-11-28 07:29:44 +0000595 return CurModule.Types[(unsigned)D.Num];
Reid Spencer68a24bd2005-08-27 18:50:39 +0000596 break;
597 case ValID::NameVal: // Is it a named definition?
598 if (const Type *N = CurModule.CurrentModule->getTypeByName(D.Name)) {
599 D.destroy(); // Free old strdup'd memory...
600 return N;
601 }
602 break;
603 default:
Reid Spencer61c83e02006-08-18 08:43:06 +0000604 GenerateError("Internal parser error: Invalid symbol type reference!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000605 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000606 }
607
608 // If we reached here, we referenced either a symbol that we don't know about
609 // or an id number that hasn't been read yet. We may be referencing something
610 // forward, so just create an entry to be resolved later and get to it...
611 //
612 if (DoNotImprovise) return 0; // Do we just want a null to be returned?
613
614
615 if (inFunctionScope()) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000616 if (D.Type == ValID::NameVal) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000617 GenerateError("Reference to an undefined type: '" + D.getName() + "'");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000618 return 0;
619 } else {
Reid Spencer61c83e02006-08-18 08:43:06 +0000620 GenerateError("Reference to an undefined type: #" + itostr(D.Num));
Reid Spencer5b7e7532006-09-28 19:28:24 +0000621 return 0;
622 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000623 }
624
Reid Spencer861d9d62006-11-28 07:29:44 +0000625 std::map<ValID, PATypeHolder>::iterator I =CurModule.LateResolveTypes.find(D);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000626 if (I != CurModule.LateResolveTypes.end())
Reid Spencer861d9d62006-11-28 07:29:44 +0000627 return I->second;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000628
Reid Spencer861d9d62006-11-28 07:29:44 +0000629 Type *Typ = OpaqueType::get();
630 CurModule.LateResolveTypes.insert(std::make_pair(D, Typ));
631 return Typ;
Reid Spencera132e042006-12-03 05:46:11 +0000632 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000633
634static Value *lookupInSymbolTable(const Type *Ty, const std::string &Name) {
635 SymbolTable &SymTab =
Reid Spencer78d033e2007-01-06 07:24:44 +0000636 inFunctionScope() ? CurFun.CurrentFunction->getValueSymbolTable() :
637 CurModule.CurrentModule->getValueSymbolTable();
Reid Spencer68a24bd2005-08-27 18:50:39 +0000638 return SymTab.lookup(Ty, Name);
639}
640
641// getValNonImprovising - Look up the value specified by the provided type and
642// the provided ValID. If the value exists and has already been defined, return
643// it. Otherwise return null.
644//
645static Value *getValNonImprovising(const Type *Ty, const ValID &D) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000646 if (isa<FunctionType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000647 GenerateError("Functions are not values and "
Reid Spencer68a24bd2005-08-27 18:50:39 +0000648 "must be referenced as pointers");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000649 return 0;
650 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000651
652 switch (D.Type) {
653 case ValID::NumberVal: { // Is it a numbered definition?
654 unsigned Num = (unsigned)D.Num;
655
656 // Module constants occupy the lowest numbered slots...
657 std::map<const Type*,ValueList>::iterator VI = CurModule.Values.find(Ty);
658 if (VI != CurModule.Values.end()) {
659 if (Num < VI->second.size())
660 return VI->second[Num];
661 Num -= VI->second.size();
662 }
663
664 // Make sure that our type is within bounds
665 VI = CurFun.Values.find(Ty);
666 if (VI == CurFun.Values.end()) return 0;
667
668 // Check that the number is within bounds...
669 if (VI->second.size() <= Num) return 0;
670
671 return VI->second[Num];
672 }
673
674 case ValID::NameVal: { // Is it a named definition?
675 Value *N = lookupInSymbolTable(Ty, std::string(D.Name));
676 if (N == 0) return 0;
677
678 D.destroy(); // Free old strdup'd memory...
679 return N;
680 }
681
682 // Check to make sure that "Ty" is an integral type, and that our
683 // value will fit into the specified type...
684 case ValID::ConstSIntVal: // Is it a constant pool reference??
Reid Spencerb83eb642006-10-20 07:07:24 +0000685 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000686 GenerateError("Signed integral constant '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000687 itostr(D.ConstPool64) + "' is invalid for type '" +
688 Ty->getDescription() + "'!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000689 return 0;
690 }
Reid Spencerb83eb642006-10-20 07:07:24 +0000691 return ConstantInt::get(Ty, D.ConstPool64);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000692
693 case ValID::ConstUIntVal: // Is it an unsigned const pool reference?
Reid Spencerb83eb642006-10-20 07:07:24 +0000694 if (!ConstantInt::isValueValidForType(Ty, D.UConstPool64)) {
695 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000696 GenerateError("Integral constant '" + utostr(D.UConstPool64) +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000697 "' is invalid or out of range!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000698 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000699 } else { // This is really a signed reference. Transmogrify.
Reid Spencerb83eb642006-10-20 07:07:24 +0000700 return ConstantInt::get(Ty, D.ConstPool64);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000701 }
702 } else {
Reid Spencerb83eb642006-10-20 07:07:24 +0000703 return ConstantInt::get(Ty, D.UConstPool64);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000704 }
705
706 case ValID::ConstFPVal: // Is it a floating point const pool reference?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000707 if (!ConstantFP::isValueValidForType(Ty, D.ConstPoolFP)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000708 GenerateError("FP constant invalid for type!!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000709 return 0;
710 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000711 return ConstantFP::get(Ty, D.ConstPoolFP);
712
713 case ValID::ConstNullVal: // Is it a null value?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000714 if (!isa<PointerType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000715 GenerateError("Cannot create a a non pointer null!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000716 return 0;
717 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000718 return ConstantPointerNull::get(cast<PointerType>(Ty));
719
720 case ValID::ConstUndefVal: // Is it an undef value?
721 return UndefValue::get(Ty);
722
Chris Lattner7aa61892005-12-21 17:53:23 +0000723 case ValID::ConstZeroVal: // Is it a zero value?
724 return Constant::getNullValue(Ty);
725
Reid Spencer68a24bd2005-08-27 18:50:39 +0000726 case ValID::ConstantVal: // Fully resolved constant?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000727 if (D.ConstantValue->getType() != Ty) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000728 GenerateError("Constant expression type different from required type!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000729 return 0;
730 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000731 return D.ConstantValue;
732
Chris Lattner0e9c3762006-01-25 22:27:16 +0000733 case ValID::InlineAsmVal: { // Inline asm expression
734 const PointerType *PTy = dyn_cast<PointerType>(Ty);
735 const FunctionType *FTy =
736 PTy ? dyn_cast<FunctionType>(PTy->getElementType()) : 0;
Reid Spencer5b7e7532006-09-28 19:28:24 +0000737 if (!FTy || !InlineAsm::Verify(FTy, D.IAD->Constraints)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000738 GenerateError("Invalid type for asm constraint string!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000739 return 0;
740 }
Chris Lattner0e9c3762006-01-25 22:27:16 +0000741 InlineAsm *IA = InlineAsm::get(FTy, D.IAD->AsmString, D.IAD->Constraints,
742 D.IAD->HasSideEffects);
743 D.destroy(); // Free InlineAsmDescriptor.
744 return IA;
745 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000746 default:
747 assert(0 && "Unhandled case!");
748 return 0;
749 } // End of switch
750
751 assert(0 && "Unhandled case!");
752 return 0;
753}
754
755// getVal - This function is identical to getValNonImprovising, except that if a
756// value is not already defined, it "improvises" by creating a placeholder var
757// that looks and acts just like the requested variable. When the value is
758// defined later, all uses of the placeholder variable are replaced with the
759// real thing.
760//
761static Value *getVal(const Type *Ty, const ValID &ID) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000762 if (Ty == Type::LabelTy) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000763 GenerateError("Cannot use a basic block here");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000764 return 0;
765 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000766
767 // See if the value has already been defined.
768 Value *V = getValNonImprovising(Ty, ID);
769 if (V) return V;
Reid Spencer5b7e7532006-09-28 19:28:24 +0000770 if (TriggerError) return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000771
Reid Spencer5b7e7532006-09-28 19:28:24 +0000772 if (!Ty->isFirstClassType() && !isa<OpaqueType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000773 GenerateError("Invalid use of a composite type!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000774 return 0;
775 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000776
777 // If we reached here, we referenced either a symbol that we don't know about
778 // or an id number that hasn't been read yet. We may be referencing something
779 // forward, so just create an entry to be resolved later and get to it...
780 //
781 V = new Argument(Ty);
782
783 // Remember where this forward reference came from. FIXME, shouldn't we try
784 // to recycle these things??
785 CurModule.PlaceHolderInfo.insert(std::make_pair(V, std::make_pair(ID,
786 llvmAsmlineno)));
787
788 if (inFunctionScope())
789 InsertValue(V, CurFun.LateResolveValues);
790 else
791 InsertValue(V, CurModule.LateResolveValues);
792 return V;
793}
794
795/// getBBVal - This is used for two purposes:
796/// * If isDefinition is true, a new basic block with the specified ID is being
797/// defined.
798/// * If isDefinition is true, this is a reference to a basic block, which may
799/// or may not be a forward reference.
800///
801static BasicBlock *getBBVal(const ValID &ID, bool isDefinition = false) {
802 assert(inFunctionScope() && "Can't get basic block at global scope!");
803
804 std::string Name;
805 BasicBlock *BB = 0;
806 switch (ID.Type) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000807 default:
808 GenerateError("Illegal label reference " + ID.getName());
809 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000810 case ValID::NumberVal: // Is it a numbered definition?
811 if (unsigned(ID.Num) >= CurFun.NumberedBlocks.size())
812 CurFun.NumberedBlocks.resize(ID.Num+1);
813 BB = CurFun.NumberedBlocks[ID.Num];
814 break;
815 case ValID::NameVal: // Is it a named definition?
816 Name = ID.Name;
817 if (Value *N = CurFun.CurrentFunction->
Reid Spencer78d033e2007-01-06 07:24:44 +0000818 getValueSymbolTable().lookup(Type::LabelTy, Name))
Reid Spencer68a24bd2005-08-27 18:50:39 +0000819 BB = cast<BasicBlock>(N);
820 break;
821 }
822
823 // See if the block has already been defined.
824 if (BB) {
825 // If this is the definition of the block, make sure the existing value was
826 // just a forward reference. If it was a forward reference, there will be
827 // an entry for it in the PlaceHolderInfo map.
Reid Spencer5b7e7532006-09-28 19:28:24 +0000828 if (isDefinition && !CurFun.BBForwardRefs.erase(BB)) {
Reid Spencer68a24bd2005-08-27 18:50:39 +0000829 // The existing value was a definition, not a forward reference.
Reid Spencer61c83e02006-08-18 08:43:06 +0000830 GenerateError("Redefinition of label " + ID.getName());
Reid Spencer5b7e7532006-09-28 19:28:24 +0000831 return 0;
832 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000833
834 ID.destroy(); // Free strdup'd memory.
835 return BB;
836 }
837
838 // Otherwise this block has not been seen before.
839 BB = new BasicBlock("", CurFun.CurrentFunction);
840 if (ID.Type == ValID::NameVal) {
841 BB->setName(ID.Name);
842 } else {
843 CurFun.NumberedBlocks[ID.Num] = BB;
844 }
845
846 // If this is not a definition, keep track of it so we can use it as a forward
847 // reference.
848 if (!isDefinition) {
849 // Remember where this forward reference came from.
850 CurFun.BBForwardRefs[BB] = std::make_pair(ID, llvmAsmlineno);
851 } else {
852 // The forward declaration could have been inserted anywhere in the
853 // function: insert it into the correct place now.
854 CurFun.CurrentFunction->getBasicBlockList().remove(BB);
855 CurFun.CurrentFunction->getBasicBlockList().push_back(BB);
856 }
857 ID.destroy();
858 return BB;
859}
860
861
862//===----------------------------------------------------------------------===//
863// Code to handle forward references in instructions
864//===----------------------------------------------------------------------===//
865//
866// This code handles the late binding needed with statements that reference
867// values not defined yet... for example, a forward branch, or the PHI node for
868// a loop body.
869//
870// This keeps a table (CurFun.LateResolveValues) of all such forward references
871// and back patchs after we are done.
872//
873
874// ResolveDefinitions - If we could not resolve some defs at parsing
875// time (forward branches, phi functions for loops, etc...) resolve the
876// defs now...
877//
878static void
879ResolveDefinitions(std::map<const Type*,ValueList> &LateResolvers,
880 std::map<const Type*,ValueList> *FutureLateResolvers) {
881 // Loop over LateResolveDefs fixing up stuff that couldn't be resolved
882 for (std::map<const Type*,ValueList>::iterator LRI = LateResolvers.begin(),
883 E = LateResolvers.end(); LRI != E; ++LRI) {
884 ValueList &List = LRI->second;
885 while (!List.empty()) {
886 Value *V = List.back();
887 List.pop_back();
888
889 std::map<Value*, std::pair<ValID, int> >::iterator PHI =
890 CurModule.PlaceHolderInfo.find(V);
891 assert(PHI != CurModule.PlaceHolderInfo.end() && "Placeholder error!");
892
893 ValID &DID = PHI->second.first;
894
895 Value *TheRealValue = getValNonImprovising(LRI->first, DID);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000896 if (TriggerError)
897 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000898 if (TheRealValue) {
899 V->replaceAllUsesWith(TheRealValue);
900 delete V;
901 CurModule.PlaceHolderInfo.erase(PHI);
902 } else if (FutureLateResolvers) {
903 // Functions have their unresolved items forwarded to the module late
904 // resolver table
905 InsertValue(V, *FutureLateResolvers);
906 } else {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000907 if (DID.Type == ValID::NameVal) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000908 GenerateError("Reference to an invalid definition: '" +DID.getName()+
Reid Spencer68a24bd2005-08-27 18:50:39 +0000909 "' of type '" + V->getType()->getDescription() + "'",
910 PHI->second.second);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000911 return;
912 } else {
Reid Spencer61c83e02006-08-18 08:43:06 +0000913 GenerateError("Reference to an invalid definition: #" +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000914 itostr(DID.Num) + " of type '" +
915 V->getType()->getDescription() + "'",
916 PHI->second.second);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000917 return;
918 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000919 }
920 }
921 }
922
923 LateResolvers.clear();
924}
925
926// ResolveTypeTo - A brand new type was just declared. This means that (if
927// name is not null) things referencing Name can be resolved. Otherwise, things
928// refering to the number can be resolved. Do this now.
929//
930static void ResolveTypeTo(char *Name, const Type *ToTy) {
931 ValID D;
932 if (Name) D = ValID::create(Name);
933 else D = ValID::create((int)CurModule.Types.size());
934
Reid Spencer861d9d62006-11-28 07:29:44 +0000935 std::map<ValID, PATypeHolder>::iterator I =
Reid Spencer68a24bd2005-08-27 18:50:39 +0000936 CurModule.LateResolveTypes.find(D);
937 if (I != CurModule.LateResolveTypes.end()) {
Reid Spencer861d9d62006-11-28 07:29:44 +0000938 ((DerivedType*)I->second.get())->refineAbstractTypeTo(ToTy);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000939 CurModule.LateResolveTypes.erase(I);
940 }
941}
942
943// setValueName - Set the specified value to the name given. The name may be
944// null potentially, in which case this is a noop. The string passed in is
945// assumed to be a malloc'd string buffer, and is free'd by this function.
946//
947static void setValueName(Value *V, char *NameStr) {
948 if (NameStr) {
949 std::string Name(NameStr); // Copy string
950 free(NameStr); // Free old string
951
Reid Spencer5b7e7532006-09-28 19:28:24 +0000952 if (V->getType() == Type::VoidTy) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000953 GenerateError("Can't assign name '" + Name+"' to value with void type!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000954 return;
955 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000956
957 assert(inFunctionScope() && "Must be in function scope!");
Reid Spencer78d033e2007-01-06 07:24:44 +0000958 SymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable();
Reid Spencer5b7e7532006-09-28 19:28:24 +0000959 if (ST.lookup(V->getType(), Name)) {
Reid Spencer63c34452007-01-05 21:51:07 +0000960 GenerateError("Redefinition of value '" + Name + "' of type '" +
961 V->getType()->getDescription() + "'!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000962 return;
963 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000964
965 // Set the name.
966 V->setName(Name);
967 }
968}
969
970/// ParseGlobalVariable - Handle parsing of a global. If Initializer is null,
971/// this is a declaration, otherwise it is a definition.
Chris Lattnerb475c422005-11-12 18:22:38 +0000972static GlobalVariable *
973ParseGlobalVariable(char *NameStr,GlobalValue::LinkageTypes Linkage,
974 bool isConstantGlobal, const Type *Ty,
975 Constant *Initializer) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000976 if (isa<FunctionType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000977 GenerateError("Cannot declare global vars of function type!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000978 return 0;
979 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000980
981 const PointerType *PTy = PointerType::get(Ty);
982
983 std::string Name;
984 if (NameStr) {
985 Name = NameStr; // Copy string
986 free(NameStr); // Free old string
987 }
988
989 // See if this global value was forward referenced. If so, recycle the
990 // object.
991 ValID ID;
992 if (!Name.empty()) {
993 ID = ValID::create((char*)Name.c_str());
994 } else {
995 ID = ValID::create((int)CurModule.Values[PTy].size());
996 }
997
998 if (GlobalValue *FWGV = CurModule.GetForwardRefForGlobal(PTy, ID)) {
999 // Move the global to the end of the list, from whereever it was
1000 // previously inserted.
1001 GlobalVariable *GV = cast<GlobalVariable>(FWGV);
1002 CurModule.CurrentModule->getGlobalList().remove(GV);
1003 CurModule.CurrentModule->getGlobalList().push_back(GV);
1004 GV->setInitializer(Initializer);
1005 GV->setLinkage(Linkage);
1006 GV->setConstant(isConstantGlobal);
1007 InsertValue(GV, CurModule.Values);
Chris Lattnerb475c422005-11-12 18:22:38 +00001008 return GV;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001009 }
1010
1011 // If this global has a name, check to see if there is already a definition
Reid Spencer63c34452007-01-05 21:51:07 +00001012 // of this global in the module. If so, it is an error.
Reid Spencer68a24bd2005-08-27 18:50:39 +00001013 if (!Name.empty()) {
1014 // We are a simple redefinition of a value, check to see if it is defined
1015 // the same as the old one.
Reid Spencer63c34452007-01-05 21:51:07 +00001016 if (CurModule.CurrentModule->getGlobalVariable(Name, Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +00001017 GenerateError("Redefinition of global variable named '" + Name +
Reid Spencer63c34452007-01-05 21:51:07 +00001018 "' of type '" + Ty->getDescription() + "'!");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001019 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001020 }
1021 }
1022
1023 // Otherwise there is no existing GV to use, create one now.
1024 GlobalVariable *GV =
1025 new GlobalVariable(Ty, isConstantGlobal, Linkage, Initializer, Name,
1026 CurModule.CurrentModule);
1027 InsertValue(GV, CurModule.Values);
Chris Lattnerb475c422005-11-12 18:22:38 +00001028 return GV;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001029}
1030
1031// setTypeName - Set the specified type to the name given. The name may be
1032// null potentially, in which case this is a noop. The string passed in is
1033// assumed to be a malloc'd string buffer, and is freed by this function.
1034//
1035// This function returns true if the type has already been defined, but is
1036// allowed to be redefined in the specified context. If the name is a new name
1037// for the type plane, it is inserted and false is returned.
1038static bool setTypeName(const Type *T, char *NameStr) {
1039 assert(!inFunctionScope() && "Can't give types function-local names!");
1040 if (NameStr == 0) return false;
1041
1042 std::string Name(NameStr); // Copy string
1043 free(NameStr); // Free old string
1044
1045 // We don't allow assigning names to void type
Reid Spencer5b7e7532006-09-28 19:28:24 +00001046 if (T == Type::VoidTy) {
Reid Spencer61c83e02006-08-18 08:43:06 +00001047 GenerateError("Can't assign name '" + Name + "' to the void type!");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001048 return false;
1049 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001050
1051 // Set the type name, checking for conflicts as we do so.
1052 bool AlreadyExists = CurModule.CurrentModule->addTypeName(Name, T);
1053
1054 if (AlreadyExists) { // Inserting a name that is already defined???
1055 const Type *Existing = CurModule.CurrentModule->getTypeByName(Name);
1056 assert(Existing && "Conflict but no matching type?");
1057
1058 // There is only one case where this is allowed: when we are refining an
1059 // opaque type. In this case, Existing will be an opaque type.
1060 if (const OpaqueType *OpTy = dyn_cast<OpaqueType>(Existing)) {
1061 // We ARE replacing an opaque type!
1062 const_cast<OpaqueType*>(OpTy)->refineAbstractTypeTo(T);
1063 return true;
1064 }
1065
1066 // Otherwise, this is an attempt to redefine a type. That's okay if
1067 // the redefinition is identical to the original. This will be so if
1068 // Existing and T point to the same Type object. In this one case we
1069 // allow the equivalent redefinition.
1070 if (Existing == T) return true; // Yes, it's equal.
1071
1072 // Any other kind of (non-equivalent) redefinition is an error.
Reid Spencer63c34452007-01-05 21:51:07 +00001073 GenerateError("Redefinition of type named '" + Name + "' of type '" +
1074 T->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00001075 }
1076
1077 return false;
1078}
1079
1080//===----------------------------------------------------------------------===//
1081// Code for handling upreferences in type names...
1082//
1083
1084// TypeContains - Returns true if Ty directly contains E in it.
1085//
1086static bool TypeContains(const Type *Ty, const Type *E) {
1087 return std::find(Ty->subtype_begin(), Ty->subtype_end(),
1088 E) != Ty->subtype_end();
1089}
1090
1091namespace {
1092 struct UpRefRecord {
1093 // NestingLevel - The number of nesting levels that need to be popped before
1094 // this type is resolved.
1095 unsigned NestingLevel;
1096
1097 // LastContainedTy - This is the type at the current binding level for the
1098 // type. Every time we reduce the nesting level, this gets updated.
1099 const Type *LastContainedTy;
1100
1101 // UpRefTy - This is the actual opaque type that the upreference is
1102 // represented with.
1103 OpaqueType *UpRefTy;
1104
1105 UpRefRecord(unsigned NL, OpaqueType *URTy)
1106 : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) {}
1107 };
1108}
1109
1110// UpRefs - A list of the outstanding upreferences that need to be resolved.
1111static std::vector<UpRefRecord> UpRefs;
1112
1113/// HandleUpRefs - Every time we finish a new layer of types, this function is
1114/// called. It loops through the UpRefs vector, which is a list of the
1115/// currently active types. For each type, if the up reference is contained in
1116/// the newly completed type, we decrement the level count. When the level
1117/// count reaches zero, the upreferenced type is the type that is passed in:
1118/// thus we can complete the cycle.
1119///
1120static PATypeHolder HandleUpRefs(const Type *ty) {
Chris Lattner224f84f2006-08-18 17:34:45 +00001121 // If Ty isn't abstract, or if there are no up-references in it, then there is
1122 // nothing to resolve here.
1123 if (!ty->isAbstract() || UpRefs.empty()) return ty;
1124
Reid Spencer68a24bd2005-08-27 18:50:39 +00001125 PATypeHolder Ty(ty);
1126 UR_OUT("Type '" << Ty->getDescription() <<
1127 "' newly formed. Resolving upreferences.\n" <<
1128 UpRefs.size() << " upreferences active!\n");
1129
1130 // If we find any resolvable upreferences (i.e., those whose NestingLevel goes
1131 // to zero), we resolve them all together before we resolve them to Ty. At
1132 // the end of the loop, if there is anything to resolve to Ty, it will be in
1133 // this variable.
1134 OpaqueType *TypeToResolve = 0;
1135
1136 for (unsigned i = 0; i != UpRefs.size(); ++i) {
1137 UR_OUT(" UR#" << i << " - TypeContains(" << Ty->getDescription() << ", "
1138 << UpRefs[i].second->getDescription() << ") = "
1139 << (TypeContains(Ty, UpRefs[i].second) ? "true" : "false") << "\n");
1140 if (TypeContains(Ty, UpRefs[i].LastContainedTy)) {
1141 // Decrement level of upreference
1142 unsigned Level = --UpRefs[i].NestingLevel;
1143 UpRefs[i].LastContainedTy = Ty;
1144 UR_OUT(" Uplevel Ref Level = " << Level << "\n");
1145 if (Level == 0) { // Upreference should be resolved!
1146 if (!TypeToResolve) {
1147 TypeToResolve = UpRefs[i].UpRefTy;
1148 } else {
1149 UR_OUT(" * Resolving upreference for "
1150 << UpRefs[i].second->getDescription() << "\n";
1151 std::string OldName = UpRefs[i].UpRefTy->getDescription());
1152 UpRefs[i].UpRefTy->refineAbstractTypeTo(TypeToResolve);
1153 UR_OUT(" * Type '" << OldName << "' refined upreference to: "
1154 << (const void*)Ty << ", " << Ty->getDescription() << "\n");
1155 }
1156 UpRefs.erase(UpRefs.begin()+i); // Remove from upreference list...
1157 --i; // Do not skip the next element...
1158 }
1159 }
1160 }
1161
1162 if (TypeToResolve) {
1163 UR_OUT(" * Resolving upreference for "
1164 << UpRefs[i].second->getDescription() << "\n";
1165 std::string OldName = TypeToResolve->getDescription());
1166 TypeToResolve->refineAbstractTypeTo(Ty);
1167 }
1168
1169 return Ty;
1170}
1171
Reid Spencer68a24bd2005-08-27 18:50:39 +00001172//===----------------------------------------------------------------------===//
1173// RunVMAsmParser - Define an interface to this parser
1174//===----------------------------------------------------------------------===//
1175//
Reid Spencer14310612006-12-31 05:40:51 +00001176static Module* RunParser(Module * M);
1177
Reid Spencer68a24bd2005-08-27 18:50:39 +00001178Module *llvm::RunVMAsmParser(const std::string &Filename, FILE *F) {
1179 set_scan_file(F);
1180
1181 CurFilename = Filename;
1182 return RunParser(new Module(CurFilename));
1183}
1184
1185Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) {
1186 set_scan_string(AsmString);
1187
1188 CurFilename = "from_memory";
1189 if (M == NULL) {
1190 return RunParser(new Module (CurFilename));
1191 } else {
1192 return RunParser(M);
1193 }
1194}
1195
1196
Reid Spencer3822ff52006-11-08 06:47:33 +00001197
1198/* Enabling traces. */
1199#ifndef YYDEBUG
1200# define YYDEBUG 0
1201#endif
1202
1203/* Enabling verbose error messages. */
1204#ifdef YYERROR_VERBOSE
1205# undef YYERROR_VERBOSE
1206# define YYERROR_VERBOSE 1
1207#else
1208# define YYERROR_VERBOSE 0
1209#endif
1210
Reid Spencere4d87aa2006-12-23 06:05:41 +00001211/* Enabling the token table. */
1212#ifndef YYTOKEN_TABLE
1213# define YYTOKEN_TABLE 0
1214#endif
1215
Andrew Lenharth6353e052006-12-08 18:07:09 +00001216#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
Reid Spencera54b7cb2007-01-12 07:05:14 +00001217#line 876 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00001218typedef union YYSTYPE {
Reid Spencer68a24bd2005-08-27 18:50:39 +00001219 llvm::Module *ModuleVal;
1220 llvm::Function *FunctionVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001221 llvm::BasicBlock *BasicBlockVal;
1222 llvm::TerminatorInst *TermInstVal;
1223 llvm::Instruction *InstVal;
Reid Spencera132e042006-12-03 05:46:11 +00001224 llvm::Constant *ConstVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001225
Reid Spencera132e042006-12-03 05:46:11 +00001226 const llvm::Type *PrimType;
Reid Spencer14310612006-12-31 05:40:51 +00001227 std::list<llvm::PATypeHolder> *TypeList;
Reid Spencera132e042006-12-03 05:46:11 +00001228 llvm::PATypeHolder *TypeVal;
1229 llvm::Value *ValueVal;
Reid Spencera132e042006-12-03 05:46:11 +00001230 std::vector<llvm::Value*> *ValueList;
Reid Spencer14310612006-12-31 05:40:51 +00001231 llvm::ArgListType *ArgList;
1232 llvm::TypeWithAttrs TypeWithAttrs;
1233 llvm::TypeWithAttrsList *TypeWithAttrsList;
1234 llvm::ValueRefList *ValueRefList;
1235
Reid Spencer68a24bd2005-08-27 18:50:39 +00001236 // Represent the RHS of PHI node
Reid Spencera132e042006-12-03 05:46:11 +00001237 std::list<std::pair<llvm::Value*,
1238 llvm::BasicBlock*> > *PHIList;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001239 std::vector<std::pair<llvm::Constant*, llvm::BasicBlock*> > *JumpTable;
Reid Spencera132e042006-12-03 05:46:11 +00001240 std::vector<llvm::Constant*> *ConstVector;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001241
1242 llvm::GlobalValue::LinkageTypes Linkage;
Reid Spencer14310612006-12-31 05:40:51 +00001243 llvm::FunctionType::ParameterAttributes ParamAttrs;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001244 int64_t SInt64Val;
1245 uint64_t UInt64Val;
1246 int SIntVal;
1247 unsigned UIntVal;
1248 double FPVal;
1249 bool BoolVal;
1250
1251 char *StrVal; // This memory is strdup'd!
Reid Spencer1628cec2006-10-26 06:15:43 +00001252 llvm::ValID ValIDVal; // strdup'd memory maybe!
Reid Spencer68a24bd2005-08-27 18:50:39 +00001253
Reid Spencera132e042006-12-03 05:46:11 +00001254 llvm::Instruction::BinaryOps BinaryOpVal;
1255 llvm::Instruction::TermOps TermOpVal;
1256 llvm::Instruction::MemoryOps MemOpVal;
1257 llvm::Instruction::CastOps CastOpVal;
1258 llvm::Instruction::OtherOps OtherOpVal;
Reid Spencer1628cec2006-10-26 06:15:43 +00001259 llvm::Module::Endianness Endianness;
Reid Spencera132e042006-12-03 05:46:11 +00001260 llvm::ICmpInst::Predicate IPredicate;
1261 llvm::FCmpInst::Predicate FPredicate;
Andrew Lenharth6353e052006-12-08 18:07:09 +00001262} YYSTYPE;
Reid Spencere4d87aa2006-12-23 06:05:41 +00001263/* Line 196 of yacc.c. */
Reid Spencera54b7cb2007-01-12 07:05:14 +00001264#line 1265 "llvmAsmParser.tab.c"
Reid Spencer3822ff52006-11-08 06:47:33 +00001265# define yystype YYSTYPE /* obsolescent; will be withdrawn */
1266# define YYSTYPE_IS_DECLARED 1
1267# define YYSTYPE_IS_TRIVIAL 1
Reid Spencer68a24bd2005-08-27 18:50:39 +00001268#endif
1269
1270
1271
Reid Spencer3822ff52006-11-08 06:47:33 +00001272/* Copy the second part of user declarations. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00001273
1274
Reid Spencere4d87aa2006-12-23 06:05:41 +00001275/* Line 219 of yacc.c. */
Reid Spencera54b7cb2007-01-12 07:05:14 +00001276#line 1277 "llvmAsmParser.tab.c"
Reid Spencere4d87aa2006-12-23 06:05:41 +00001277
1278#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
1279# define YYSIZE_T __SIZE_TYPE__
1280#endif
1281#if ! defined (YYSIZE_T) && defined (size_t)
1282# define YYSIZE_T size_t
1283#endif
1284#if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus))
1285# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1286# define YYSIZE_T size_t
1287#endif
1288#if ! defined (YYSIZE_T)
1289# define YYSIZE_T unsigned int
1290#endif
1291
1292#ifndef YY_
1293# if YYENABLE_NLS
1294# if ENABLE_NLS
1295# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
1296# define YY_(msgid) dgettext ("bison-runtime", msgid)
1297# endif
1298# endif
1299# ifndef YY_
1300# define YY_(msgid) msgid
1301# endif
1302#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00001303
Andrew Lenharth6353e052006-12-08 18:07:09 +00001304#if ! defined (yyoverflow) || YYERROR_VERBOSE
Bill Wendlinge8156192006-12-07 01:30:32 +00001305
Reid Spencer3822ff52006-11-08 06:47:33 +00001306/* The parser invokes alloca or malloc; define the necessary symbols. */
1307
1308# ifdef YYSTACK_USE_ALLOCA
1309# if YYSTACK_USE_ALLOCA
1310# ifdef __GNUC__
1311# define YYSTACK_ALLOC __builtin_alloca
Reid Spencere4d87aa2006-12-23 06:05:41 +00001312# else
1313# define YYSTACK_ALLOC alloca
1314# if defined (__STDC__) || defined (__cplusplus)
1315# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1316# define YYINCLUDED_STDLIB_H
1317# endif
Reid Spencer3822ff52006-11-08 06:47:33 +00001318# endif
1319# endif
1320# endif
1321
1322# ifdef YYSTACK_ALLOC
Andrew Lenharth6353e052006-12-08 18:07:09 +00001323 /* Pacify GCC's `empty if-body' warning. */
1324# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
Reid Spencere4d87aa2006-12-23 06:05:41 +00001325# ifndef YYSTACK_ALLOC_MAXIMUM
1326 /* The OS might guarantee only one guard page at the bottom of the stack,
1327 and a page size can be as small as 4096 bytes. So we cannot safely
1328 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
1329 to allow for a few compiler-allocated temporary stack slots. */
1330# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */
Andrew Lenharth6353e052006-12-08 18:07:09 +00001331# endif
Reid Spencere4d87aa2006-12-23 06:05:41 +00001332# else
Reid Spencer3822ff52006-11-08 06:47:33 +00001333# define YYSTACK_ALLOC YYMALLOC
1334# define YYSTACK_FREE YYFREE
Reid Spencere4d87aa2006-12-23 06:05:41 +00001335# ifndef YYSTACK_ALLOC_MAXIMUM
1336# define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1)
1337# endif
1338# ifdef __cplusplus
1339extern "C" {
1340# endif
1341# ifndef YYMALLOC
1342# define YYMALLOC malloc
1343# if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \
1344 && (defined (__STDC__) || defined (__cplusplus)))
1345void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1346# endif
1347# endif
1348# ifndef YYFREE
1349# define YYFREE free
1350# if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \
1351 && (defined (__STDC__) || defined (__cplusplus)))
1352void free (void *); /* INFRINGES ON USER NAME SPACE */
1353# endif
1354# endif
1355# ifdef __cplusplus
1356}
1357# endif
Reid Spencer3822ff52006-11-08 06:47:33 +00001358# endif
Andrew Lenharth6353e052006-12-08 18:07:09 +00001359#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
Reid Spencer3822ff52006-11-08 06:47:33 +00001360
1361
Andrew Lenharth6353e052006-12-08 18:07:09 +00001362#if (! defined (yyoverflow) \
1363 && (! defined (__cplusplus) \
1364 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
Reid Spencer3822ff52006-11-08 06:47:33 +00001365
1366/* A type that is properly aligned for any stack member. */
1367union yyalloc
1368{
Reid Spencere4d87aa2006-12-23 06:05:41 +00001369 short int yyss;
Reid Spencer3822ff52006-11-08 06:47:33 +00001370 YYSTYPE yyvs;
1371 };
1372
1373/* The size of the maximum gap between one aligned stack and the next. */
1374# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
1375
1376/* The size of an array large to enough to hold all stacks, each with
1377 N elements. */
1378# define YYSTACK_BYTES(N) \
Reid Spencere4d87aa2006-12-23 06:05:41 +00001379 ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \
Reid Spencer3822ff52006-11-08 06:47:33 +00001380 + YYSTACK_GAP_MAXIMUM)
1381
1382/* Copy COUNT objects from FROM to TO. The source and destination do
1383 not overlap. */
1384# ifndef YYCOPY
Andrew Lenharth6353e052006-12-08 18:07:09 +00001385# if defined (__GNUC__) && 1 < __GNUC__
Reid Spencer3822ff52006-11-08 06:47:33 +00001386# define YYCOPY(To, From, Count) \
1387 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
1388# else
1389# define YYCOPY(To, From, Count) \
1390 do \
1391 { \
Reid Spencere4d87aa2006-12-23 06:05:41 +00001392 YYSIZE_T yyi; \
Reid Spencer3822ff52006-11-08 06:47:33 +00001393 for (yyi = 0; yyi < (Count); yyi++) \
1394 (To)[yyi] = (From)[yyi]; \
1395 } \
Andrew Lenharth6353e052006-12-08 18:07:09 +00001396 while (0)
Reid Spencer3822ff52006-11-08 06:47:33 +00001397# endif
1398# endif
1399
1400/* Relocate STACK from its old location to the new one. The
1401 local variables YYSIZE and YYSTACKSIZE give the old and new number of
1402 elements in the stack, and YYPTR gives the new location of the
1403 stack. Advance YYPTR to a properly aligned location for the next
1404 stack. */
1405# define YYSTACK_RELOCATE(Stack) \
1406 do \
1407 { \
1408 YYSIZE_T yynewbytes; \
1409 YYCOPY (&yyptr->Stack, Stack, yysize); \
1410 Stack = &yyptr->Stack; \
1411 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
1412 yyptr += yynewbytes / sizeof (*yyptr); \
1413 } \
Andrew Lenharth6353e052006-12-08 18:07:09 +00001414 while (0)
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00001415
1416#endif
1417
Andrew Lenharth6353e052006-12-08 18:07:09 +00001418#if defined (__STDC__) || defined (__cplusplus)
1419 typedef signed char yysigned_char;
1420#else
Reid Spencere4d87aa2006-12-23 06:05:41 +00001421 typedef short int yysigned_char;
Andrew Lenharth6353e052006-12-08 18:07:09 +00001422#endif
1423
1424/* YYFINAL -- State number of the termination state. */
Reid Spencer6fd36ab2006-12-29 20:35:03 +00001425#define YYFINAL 37
Reid Spencer3822ff52006-11-08 06:47:33 +00001426/* YYLAST -- Last index in YYTABLE. */
Reid Spencera54b7cb2007-01-12 07:05:14 +00001427#define YYLAST 1512
Reid Spencer3822ff52006-11-08 06:47:33 +00001428
Andrew Lenharth6353e052006-12-08 18:07:09 +00001429/* YYNTOKENS -- Number of terminals. */
Reid Spencera54b7cb2007-01-12 07:05:14 +00001430#define YYNTOKENS 147
Andrew Lenharth6353e052006-12-08 18:07:09 +00001431/* YYNNTS -- Number of nonterminals. */
Reid Spencer218ded22007-01-05 17:07:23 +00001432#define YYNNTS 78
Andrew Lenharth6353e052006-12-08 18:07:09 +00001433/* YYNRULES -- Number of rules. */
Reid Spencera54b7cb2007-01-12 07:05:14 +00001434#define YYNRULES 285
Andrew Lenharth6353e052006-12-08 18:07:09 +00001435/* YYNRULES -- Number of states. */
Reid Spencera54b7cb2007-01-12 07:05:14 +00001436#define YYNSTATES 567
Reid Spencer3822ff52006-11-08 06:47:33 +00001437
1438/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
1439#define YYUNDEFTOK 2
Reid Spencera54b7cb2007-01-12 07:05:14 +00001440#define YYMAXUTOK 387
Reid Spencer3822ff52006-11-08 06:47:33 +00001441
Reid Spencere4d87aa2006-12-23 06:05:41 +00001442#define YYTRANSLATE(YYX) \
Reid Spencer3822ff52006-11-08 06:47:33 +00001443 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
1444
1445/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
Andrew Lenharth6353e052006-12-08 18:07:09 +00001446static const unsigned char yytranslate[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001447{
1448 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1449 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1450 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1451 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Reid Spencera54b7cb2007-01-12 07:05:14 +00001452 137, 138, 135, 2, 134, 2, 2, 2, 2, 2,
Reid Spencer3822ff52006-11-08 06:47:33 +00001453 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Reid Spencera54b7cb2007-01-12 07:05:14 +00001454 142, 133, 143, 2, 2, 2, 2, 2, 2, 2,
Reid Spencer3822ff52006-11-08 06:47:33 +00001455 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1456 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Reid Spencera54b7cb2007-01-12 07:05:14 +00001457 2, 139, 136, 141, 2, 2, 2, 2, 2, 146,
Reid Spencer3822ff52006-11-08 06:47:33 +00001458 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1459 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Reid Spencera54b7cb2007-01-12 07:05:14 +00001460 140, 2, 2, 144, 2, 145, 2, 2, 2, 2,
Reid Spencer3822ff52006-11-08 06:47:33 +00001461 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1462 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1463 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1464 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1465 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1466 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1467 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1468 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1469 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1470 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1471 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1472 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1473 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
1474 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1475 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1476 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1477 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1478 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
1479 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1480 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
1481 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
1482 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
1483 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
Reid Spencer3da59db2006-11-27 01:05:10 +00001484 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
Reid Spencera132e042006-12-03 05:46:11 +00001485 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
Reid Spencera54b7cb2007-01-12 07:05:14 +00001486 125, 126, 127, 128, 129, 130, 131, 132
Reid Spencer3822ff52006-11-08 06:47:33 +00001487};
1488
1489#if YYDEBUG
1490/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
1491 YYRHS. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00001492static const unsigned short int yyprhs[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001493{
1494 0, 0, 3, 5, 7, 9, 11, 13, 15, 17,
1495 19, 21, 23, 25, 27, 29, 31, 33, 35, 37,
1496 39, 41, 43, 45, 47, 49, 51, 53, 55, 57,
1497 59, 61, 63, 65, 67, 69, 71, 73, 75, 77,
Reid Spencer3da59db2006-11-27 01:05:10 +00001498 79, 81, 83, 85, 87, 89, 91, 93, 95, 97,
Reid Spencera132e042006-12-03 05:46:11 +00001499 99, 101, 103, 105, 107, 109, 111, 113, 115, 117,
Reid Spencera54b7cb2007-01-12 07:05:14 +00001500 119, 122, 123, 125, 127, 129, 131, 133, 135, 137,
1501 139, 140, 142, 144, 145, 147, 149, 151, 153, 154,
1502 156, 158, 160, 162, 164, 166, 169, 171, 173, 174,
1503 177, 179, 181, 182, 185, 186, 189, 190, 194, 197,
1504 198, 200, 201, 205, 207, 210, 212, 214, 216, 218,
1505 220, 222, 224, 227, 229, 232, 238, 244, 250, 256,
1506 260, 263, 269, 274, 277, 279, 281, 283, 287, 289,
1507 293, 295, 296, 298, 302, 307, 311, 315, 320, 325,
1508 329, 336, 342, 345, 348, 351, 354, 357, 360, 363,
1509 366, 369, 372, 379, 385, 394, 401, 408, 416, 424,
1510 431, 438, 447, 456, 460, 462, 464, 466, 468, 469,
1511 471, 474, 475, 479, 480, 484, 488, 490, 494, 498,
1512 499, 505, 506, 513, 514, 521, 524, 528, 530, 532,
1513 534, 538, 542, 546, 550, 554, 558, 560, 561, 563,
1514 565, 567, 568, 574, 578, 580, 584, 586, 587, 597,
1515 599, 601, 605, 607, 609, 612, 615, 616, 618, 620,
1516 622, 624, 626, 628, 630, 632, 634, 638, 640, 646,
1517 648, 650, 652, 654, 657, 660, 663, 667, 670, 671,
1518 673, 676, 679, 683, 693, 703, 712, 727, 729, 731,
1519 738, 744, 747, 754, 762, 766, 772, 773, 774, 778,
1520 781, 783, 789, 795, 802, 809, 812, 817, 822, 829,
1521 834, 839, 846, 853, 856, 865, 867, 869, 870, 874,
1522 881, 885, 892, 895, 900, 907
Reid Spencer3822ff52006-11-08 06:47:33 +00001523};
1524
Andrew Lenharth6353e052006-12-08 18:07:09 +00001525/* YYRHS -- A `-1'-separated list of the rules' RHS. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00001526static const short int yyrhs[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001527{
Reid Spencera54b7cb2007-01-12 07:05:14 +00001528 184, 0, -1, 5, -1, 6, -1, 71, -1, 72,
1529 -1, 73, -1, 74, -1, 75, -1, 76, -1, 77,
1530 -1, 78, -1, 79, -1, 80, -1, 81, -1, 82,
1531 -1, 111, -1, 112, -1, 113, -1, 114, -1, 115,
1532 -1, 116, -1, 117, -1, 118, -1, 119, -1, 120,
1533 -1, 121, -1, 122, -1, 125, -1, 126, -1, 127,
1534 -1, 85, -1, 86, -1, 87, -1, 88, -1, 89,
1535 -1, 90, -1, 91, -1, 92, -1, 93, -1, 94,
1536 -1, 95, -1, 96, -1, 97, -1, 98, -1, 99,
1537 -1, 100, -1, 101, -1, 102, -1, 103, -1, 104,
1538 -1, 91, -1, 92, -1, 93, -1, 94, -1, 20,
1539 -1, 21, -1, 10, -1, 11, -1, 12, -1, 197,
1540 133, -1, -1, 34, -1, 36, -1, 35, -1, 37,
1541 -1, 39, -1, 38, -1, 40, -1, 43, -1, -1,
1542 38, -1, 40, -1, -1, 34, -1, 35, -1, 36,
1543 -1, 39, -1, -1, 58, -1, 59, -1, 60, -1,
1544 61, -1, 62, -1, 63, -1, 57, 4, -1, 112,
1545 -1, 113, -1, -1, 164, 163, -1, 132, -1, 163,
1546 -1, -1, 166, 165, -1, -1, 50, 4, -1, -1,
1547 134, 50, 4, -1, 28, 17, -1, -1, 169, -1,
1548 -1, 134, 172, 171, -1, 169, -1, 50, 4, -1,
1549 9, -1, 10, -1, 11, -1, 12, -1, 13, -1,
1550 41, -1, 173, -1, 174, 135, -1, 209, -1, 136,
1551 4, -1, 174, 137, 178, 138, 166, -1, 8, 137,
1552 178, 138, 166, -1, 139, 4, 140, 174, 141, -1,
1553 142, 4, 140, 174, 143, -1, 144, 179, 145, -1,
1554 144, 145, -1, 142, 144, 179, 145, 143, -1, 142,
1555 144, 145, 143, -1, 174, 164, -1, 174, -1, 8,
1556 -1, 175, -1, 177, 134, 175, -1, 177, -1, 177,
1557 134, 31, -1, 31, -1, -1, 174, -1, 179, 134,
1558 174, -1, 174, 139, 182, 141, -1, 174, 139, 141,
1559 -1, 174, 146, 17, -1, 174, 142, 182, 143, -1,
1560 174, 144, 182, 145, -1, 174, 144, 145, -1, 174,
1561 142, 144, 182, 145, 143, -1, 174, 142, 144, 145,
1562 143, -1, 174, 32, -1, 174, 33, -1, 174, 209,
1563 -1, 174, 181, -1, 174, 19, -1, 155, 3, -1,
1564 155, 4, -1, 9, 20, -1, 9, 21, -1, 156,
1565 7, -1, 151, 137, 180, 30, 174, 138, -1, 110,
1566 137, 180, 220, 138, -1, 124, 137, 180, 134, 180,
1567 134, 180, 138, -1, 149, 137, 180, 134, 180, 138,
1568 -1, 150, 137, 180, 134, 180, 138, -1, 83, 153,
1569 137, 180, 134, 180, 138, -1, 84, 154, 137, 180,
1570 134, 180, 138, -1, 152, 137, 180, 134, 180, 138,
1571 -1, 129, 137, 180, 134, 180, 138, -1, 130, 137,
1572 180, 134, 180, 134, 180, 138, -1, 131, 137, 180,
1573 134, 180, 134, 180, 138, -1, 182, 134, 180, -1,
1574 180, -1, 26, -1, 27, -1, 185, -1, -1, 186,
1575 -1, 185, 186, -1, -1, 25, 187, 205, -1, -1,
1576 24, 188, 206, -1, 55, 54, 192, -1, 18, -1,
1577 157, 14, 174, -1, 157, 14, 8, -1, -1, 157,
1578 183, 180, 189, 171, -1, -1, 157, 158, 183, 180,
1579 190, 171, -1, -1, 157, 159, 183, 174, 191, 171,
1580 -1, 44, 194, -1, 51, 133, 195, -1, 17, -1,
1581 49, -1, 48, -1, 46, 133, 193, -1, 47, 133,
1582 4, -1, 45, 133, 17, -1, 64, 133, 17, -1,
1583 139, 196, 141, -1, 196, 134, 17, -1, 17, -1,
1584 -1, 15, -1, 17, -1, 197, -1, -1, 199, 134,
1585 174, 164, 198, -1, 174, 164, 198, -1, 199, -1,
1586 199, 134, 31, -1, 31, -1, -1, 162, 176, 197,
1587 137, 200, 138, 166, 170, 167, -1, 22, -1, 144,
1588 -1, 161, 201, 202, -1, 23, -1, 145, -1, 212,
1589 204, -1, 160, 201, -1, -1, 56, -1, 3, -1,
1590 4, -1, 7, -1, 20, -1, 21, -1, 32, -1,
1591 33, -1, 19, -1, 142, 182, 143, -1, 181, -1,
1592 54, 207, 17, 134, 17, -1, 148, -1, 197, -1,
1593 209, -1, 208, -1, 174, 210, -1, 212, 213, -1,
1594 203, 213, -1, 214, 157, 215, -1, 214, 217, -1,
1595 -1, 16, -1, 65, 211, -1, 65, 8, -1, 66,
1596 13, 210, -1, 66, 9, 210, 134, 13, 210, 134,
1597 13, 210, -1, 67, 155, 210, 134, 13, 210, 139,
1598 216, 141, -1, 67, 155, 210, 134, 13, 210, 139,
1599 141, -1, 68, 162, 176, 210, 137, 219, 138, 166,
1600 30, 13, 210, 69, 13, 210, -1, 69, -1, 70,
1601 -1, 216, 155, 208, 134, 13, 210, -1, 155, 208,
1602 134, 13, 210, -1, 157, 222, -1, 174, 139, 210,
1603 134, 210, 141, -1, 218, 134, 139, 210, 134, 210,
1604 141, -1, 174, 210, 164, -1, 219, 134, 174, 210,
1605 164, -1, -1, -1, 220, 134, 211, -1, 53, 52,
1606 -1, 52, -1, 149, 174, 210, 134, 210, -1, 150,
1607 174, 210, 134, 210, -1, 83, 153, 174, 210, 134,
1608 210, -1, 84, 154, 174, 210, 134, 210, -1, 42,
1609 211, -1, 152, 211, 134, 211, -1, 151, 211, 30,
1610 174, -1, 124, 211, 134, 211, 134, 211, -1, 128,
1611 211, 134, 174, -1, 129, 211, 134, 211, -1, 130,
1612 211, 134, 211, 134, 211, -1, 131, 211, 134, 211,
1613 134, 211, -1, 123, 218, -1, 221, 162, 176, 210,
1614 137, 219, 138, 166, -1, 224, -1, 29, -1, -1,
1615 105, 174, 168, -1, 105, 174, 134, 10, 210, 168,
1616 -1, 106, 174, 168, -1, 106, 174, 134, 10, 210,
1617 168, -1, 107, 211, -1, 223, 108, 174, 210, -1,
1618 223, 109, 211, 134, 174, 210, -1, 110, 174, 210,
1619 220, -1
Reid Spencer3822ff52006-11-08 06:47:33 +00001620};
1621
1622/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00001623static const unsigned short int yyrline[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001624{
Reid Spencer63c34452007-01-05 21:51:07 +00001625 0, 1019, 1019, 1020, 1030, 1030, 1030, 1030, 1030, 1030,
1626 1030, 1030, 1030, 1031, 1031, 1031, 1032, 1032, 1032, 1032,
1627 1032, 1032, 1033, 1033, 1033, 1033, 1033, 1033, 1034, 1034,
1628 1034, 1036, 1036, 1037, 1037, 1038, 1038, 1039, 1039, 1040,
1629 1040, 1044, 1044, 1045, 1045, 1046, 1046, 1047, 1047, 1048,
Reid Spencera54b7cb2007-01-12 07:05:14 +00001630 1048, 1049, 1049, 1050, 1050, 1051, 1052, 1057, 1058, 1058,
1631 1061, 1065, 1071, 1072, 1073, 1074, 1075, 1079, 1080, 1081,
1632 1085, 1086, 1087, 1091, 1092, 1093, 1094, 1095, 1098, 1099,
1633 1100, 1101, 1102, 1103, 1104, 1105, 1112, 1113, 1116, 1117,
1634 1122, 1123, 1126, 1127, 1134, 1135, 1141, 1142, 1150, 1158,
1635 1159, 1164, 1165, 1166, 1171, 1184, 1184, 1184, 1184, 1184,
1636 1187, 1191, 1195, 1202, 1207, 1215, 1233, 1251, 1256, 1268,
1637 1278, 1282, 1292, 1299, 1306, 1313, 1318, 1323, 1330, 1331,
1638 1338, 1345, 1353, 1358, 1369, 1397, 1413, 1442, 1470, 1495,
1639 1514, 1539, 1558, 1570, 1577, 1640, 1650, 1660, 1666, 1672,
1640 1676, 1680, 1688, 1702, 1723, 1731, 1737, 1748, 1753, 1758,
1641 1767, 1773, 1779, 1788, 1792, 1800, 1800, 1811, 1816, 1824,
1642 1825, 1829, 1829, 1833, 1833, 1836, 1839, 1851, 1875, 1886,
1643 1886, 1895, 1895, 1903, 1903, 1913, 1916, 1922, 1935, 1936,
1644 1938, 1942, 1951, 1955, 1960, 1962, 1967, 1972, 1981, 1981,
1645 1982, 1982, 1984, 1994, 2005, 2009, 2018, 2027, 2032, 2137,
1646 2137, 2139, 2147, 2147, 2149, 2154, 2165, 2169, 2174, 2178,
1647 2182, 2186, 2190, 2194, 2198, 2202, 2206, 2231, 2235, 2249,
1648 2253, 2259, 2259, 2265, 2274, 2278, 2287, 2298, 2307, 2319,
1649 2332, 2336, 2340, 2345, 2354, 2373, 2382, 2449, 2453, 2460,
1650 2471, 2484, 2493, 2504, 2514, 2522, 2530, 2533, 2534, 2541,
1651 2545, 2550, 2571, 2588, 2601, 2614, 2627, 2636, 2649, 2657,
1652 2664, 2670, 2676, 2682, 2697, 2760, 2765, 2769, 2776, 2783,
1653 2791, 2798, 2806, 2814, 2828, 2845
Reid Spencer3822ff52006-11-08 06:47:33 +00001654};
1655#endif
1656
Reid Spencere4d87aa2006-12-23 06:05:41 +00001657#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
1658/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
Andrew Lenharth6353e052006-12-08 18:07:09 +00001659 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
Reid Spencer3822ff52006-11-08 06:47:33 +00001660static const char *const yytname[] =
1661{
1662 "$end", "error", "$undefined", "ESINT64VAL", "EUINT64VAL", "SINTVAL",
Reid Spencera54b7cb2007-01-12 07:05:14 +00001663 "UINTVAL", "FPVAL", "VOID", "BOOL", "INTTYPE", "FLOAT", "DOUBLE",
1664 "LABEL", "TYPE", "VAR_ID", "LABELSTR", "STRINGCONSTANT",
1665 "IMPLEMENTATION", "ZEROINITIALIZER", "TRUETOK", "FALSETOK", "BEGINTOK",
1666 "ENDTOK", "DECLARE", "DEFINE", "GLOBAL", "CONSTANT", "SECTION",
1667 "VOLATILE", "TO", "DOTDOTDOT", "NULL_TOK", "UNDEF", "INTERNAL",
1668 "LINKONCE", "WEAK", "APPENDING", "DLLIMPORT", "DLLEXPORT", "EXTERN_WEAK",
1669 "OPAQUE", "NOT", "EXTERNAL", "TARGET", "TRIPLE", "ENDIAN", "POINTERSIZE",
1670 "LITTLE", "BIG", "ALIGN", "DEPLIBS", "CALL", "TAIL", "ASM_TOK", "MODULE",
1671 "SIDEEFFECT", "CC_TOK", "CCC_TOK", "CSRETCC_TOK", "FASTCC_TOK",
1672 "COLDCC_TOK", "X86_STDCALLCC_TOK", "X86_FASTCALLCC_TOK", "DATALAYOUT",
1673 "RET", "BR", "SWITCH", "INVOKE", "UNWIND", "UNREACHABLE", "ADD", "SUB",
1674 "MUL", "UDIV", "SDIV", "FDIV", "UREM", "SREM", "FREM", "AND", "OR",
1675 "XOR", "ICMP", "FCMP", "EQ", "NE", "SLT", "SGT", "SLE", "SGE", "ULT",
1676 "UGT", "ULE", "UGE", "OEQ", "ONE", "OLT", "OGT", "OLE", "OGE", "ORD",
1677 "UNO", "UEQ", "UNE", "MALLOC", "ALLOCA", "FREE", "LOAD", "STORE",
1678 "GETELEMENTPTR", "TRUNC", "ZEXT", "SEXT", "FPTRUNC", "FPEXT", "BITCAST",
1679 "UITOFP", "SITOFP", "FPTOUI", "FPTOSI", "INTTOPTR", "PTRTOINT",
1680 "PHI_TOK", "SELECT", "SHL", "LSHR", "ASHR", "VAARG", "EXTRACTELEMENT",
1681 "INSERTELEMENT", "SHUFFLEVECTOR", "NORETURN", "'='", "','", "'*'",
1682 "'\\\\'", "'('", "')'", "'['", "'x'", "']'", "'<'", "'>'", "'{'", "'}'",
1683 "'c'", "$accept", "INTVAL", "ArithmeticOps", "LogicalOps", "CastOps",
1684 "ShiftOps", "IPredicates", "FPredicates", "IntType", "FPType",
1685 "OptAssign", "GVInternalLinkage", "GVExternalLinkage",
1686 "FunctionDeclareLinkage", "FunctionDefineLinkage", "OptCallingConv",
1687 "ParamAttr", "OptParamAttrs", "FuncAttr", "OptFuncAttrs", "OptAlign",
1688 "OptCAlign", "SectionString", "OptSection", "GlobalVarAttributes",
1689 "GlobalVarAttribute", "PrimType", "Types", "ArgType", "ResultTypes",
1690 "ArgTypeList", "ArgTypeListI", "TypeListI", "ConstVal", "ConstExpr",
1691 "ConstVector", "GlobalType", "Module", "DefinitionList", "Definition",
1692 "@1", "@2", "@3", "@4", "@5", "AsmBlock", "BigOrLittle",
1693 "TargetDefinition", "LibrariesDefinition", "LibList", "Name", "OptName",
1694 "ArgListH", "ArgList", "FunctionHeaderH", "BEGIN", "FunctionHeader",
1695 "END", "Function", "FunctionProto", "OptSideEffect", "ConstValueRef",
1696 "SymbolicValueRef", "ValueRef", "ResolvedVal", "BasicBlockList",
1697 "BasicBlock", "InstructionList", "BBTerminatorInst", "JumpTable", "Inst",
1698 "PHIList", "ValueRefList", "IndexList", "OptTailCall", "InstVal",
1699 "OptVolatile", "MemoryInst", 0
Reid Spencer3822ff52006-11-08 06:47:33 +00001700};
1701#endif
1702
1703# ifdef YYPRINT
1704/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
1705 token YYLEX-NUM. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00001706static const unsigned short int yytoknum[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001707{
1708 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
1709 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
1710 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
1711 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
1712 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
1713 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
1714 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
1715 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
1716 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
1717 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
1718 355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
Reid Spencer3da59db2006-11-27 01:05:10 +00001719 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
Reid Spencera132e042006-12-03 05:46:11 +00001720 375, 376, 377, 378, 379, 380, 381, 382, 383, 384,
Reid Spencera54b7cb2007-01-12 07:05:14 +00001721 385, 386, 387, 61, 44, 42, 92, 40, 41, 91,
1722 120, 93, 60, 62, 123, 125, 99
Reid Spencer3822ff52006-11-08 06:47:33 +00001723};
1724# endif
1725
1726/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
Andrew Lenharth6353e052006-12-08 18:07:09 +00001727static const unsigned char yyr1[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001728{
Reid Spencera54b7cb2007-01-12 07:05:14 +00001729 0, 147, 148, 148, 149, 149, 149, 149, 149, 149,
1730 149, 149, 149, 150, 150, 150, 151, 151, 151, 151,
1731 151, 151, 151, 151, 151, 151, 151, 151, 152, 152,
1732 152, 153, 153, 153, 153, 153, 153, 153, 153, 153,
1733 153, 154, 154, 154, 154, 154, 154, 154, 154, 154,
1734 154, 154, 154, 154, 154, 154, 154, 155, 156, 156,
1735 157, 157, 158, 158, 158, 158, 158, 159, 159, 159,
1736 160, 160, 160, 161, 161, 161, 161, 161, 162, 162,
1737 162, 162, 162, 162, 162, 162, 163, 163, 164, 164,
1738 165, 165, 166, 166, 167, 167, 168, 168, 169, 170,
1739 170, 171, 171, 172, 172, 173, 173, 173, 173, 173,
1740 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
1741 174, 174, 174, 175, 176, 176, 177, 177, 178, 178,
1742 178, 178, 179, 179, 180, 180, 180, 180, 180, 180,
1743 180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
1744 180, 180, 181, 181, 181, 181, 181, 181, 181, 181,
1745 181, 181, 181, 182, 182, 183, 183, 184, 184, 185,
1746 185, 187, 186, 188, 186, 186, 186, 186, 186, 189,
1747 186, 190, 186, 191, 186, 186, 186, 192, 193, 193,
1748 194, 194, 194, 194, 195, 196, 196, 196, 197, 197,
1749 198, 198, 199, 199, 200, 200, 200, 200, 201, 202,
1750 202, 203, 204, 204, 205, 206, 207, 207, 208, 208,
1751 208, 208, 208, 208, 208, 208, 208, 208, 208, 209,
1752 209, 210, 210, 211, 212, 212, 213, 214, 214, 214,
1753 215, 215, 215, 215, 215, 215, 215, 215, 215, 216,
1754 216, 217, 218, 218, 219, 219, 219, 220, 220, 221,
1755 221, 222, 222, 222, 222, 222, 222, 222, 222, 222,
1756 222, 222, 222, 222, 222, 222, 223, 223, 224, 224,
1757 224, 224, 224, 224, 224, 224
Reid Spencer3822ff52006-11-08 06:47:33 +00001758};
1759
1760/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
Andrew Lenharth6353e052006-12-08 18:07:09 +00001761static const unsigned char yyr2[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001762{
1763 0, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1764 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1765 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencer3822ff52006-11-08 06:47:33 +00001766 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencer3da59db2006-11-27 01:05:10 +00001767 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencer3da59db2006-11-27 01:05:10 +00001768 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencera54b7cb2007-01-12 07:05:14 +00001769 2, 0, 1, 1, 1, 1, 1, 1, 1, 1,
1770 0, 1, 1, 0, 1, 1, 1, 1, 0, 1,
1771 1, 1, 1, 1, 1, 2, 1, 1, 0, 2,
1772 1, 1, 0, 2, 0, 2, 0, 3, 2, 0,
1773 1, 0, 3, 1, 2, 1, 1, 1, 1, 1,
1774 1, 1, 2, 1, 2, 5, 5, 5, 5, 3,
1775 2, 5, 4, 2, 1, 1, 1, 3, 1, 3,
1776 1, 0, 1, 3, 4, 3, 3, 4, 4, 3,
1777 6, 5, 2, 2, 2, 2, 2, 2, 2, 2,
1778 2, 2, 6, 5, 8, 6, 6, 7, 7, 6,
1779 6, 8, 8, 3, 1, 1, 1, 1, 0, 1,
1780 2, 0, 3, 0, 3, 3, 1, 3, 3, 0,
1781 5, 0, 6, 0, 6, 2, 3, 1, 1, 1,
1782 3, 3, 3, 3, 3, 3, 1, 0, 1, 1,
1783 1, 0, 5, 3, 1, 3, 1, 0, 9, 1,
1784 1, 3, 1, 1, 2, 2, 0, 1, 1, 1,
1785 1, 1, 1, 1, 1, 1, 3, 1, 5, 1,
1786 1, 1, 1, 2, 2, 2, 3, 2, 0, 1,
1787 2, 2, 3, 9, 9, 8, 14, 1, 1, 6,
1788 5, 2, 6, 7, 3, 5, 0, 0, 3, 2,
1789 1, 5, 5, 6, 6, 2, 4, 4, 6, 4,
1790 4, 6, 6, 2, 8, 1, 1, 0, 3, 6,
1791 3, 6, 2, 4, 6, 4
Reid Spencer3822ff52006-11-08 06:47:33 +00001792};
1793
1794/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
1795 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
1796 means the default is an error. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00001797static const unsigned short int yydefact[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001798{
Reid Spencera54b7cb2007-01-12 07:05:14 +00001799 61, 198, 199, 176, 173, 171, 0, 0, 0, 0,
1800 0, 61, 169, 0, 70, 73, 0, 0, 0, 0,
1801 185, 0, 0, 0, 165, 166, 62, 64, 63, 65,
1802 67, 66, 68, 69, 0, 0, 0, 1, 170, 60,
1803 71, 72, 78, 174, 74, 75, 76, 77, 78, 238,
1804 172, 238, 0, 0, 0, 0, 197, 186, 187, 175,
1805 2, 3, 178, 105, 106, 107, 108, 109, 110, 0,
1806 0, 0, 0, 229, 111, 177, 230, 113, 0, 0,
1807 0, 105, 106, 107, 108, 0, 0, 0, 179, 0,
1808 79, 80, 81, 82, 83, 84, 0, 215, 0, 239,
1809 235, 61, 212, 213, 214, 234, 192, 189, 188, 190,
1810 191, 193, 196, 0, 131, 114, 0, 0, 0, 120,
1811 132, 0, 112, 131, 181, 183, 149, 150, 147, 148,
1812 151, 146, 142, 143, 4, 5, 6, 7, 8, 9,
1813 10, 11, 12, 13, 14, 15, 0, 0, 0, 16,
1814 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
1815 27, 0, 28, 29, 30, 0, 0, 0, 0, 0,
1816 0, 0, 0, 0, 0, 0, 145, 144, 101, 85,
1817 125, 124, 0, 209, 210, 211, 277, 237, 0, 194,
1818 130, 88, 126, 128, 0, 0, 0, 0, 0, 0,
1819 119, 0, 101, 101, 31, 32, 33, 34, 35, 36,
1820 37, 38, 39, 40, 0, 55, 56, 51, 52, 53,
1821 54, 41, 42, 43, 44, 45, 46, 47, 48, 49,
1822 50, 0, 0, 0, 0, 0, 0, 135, 164, 0,
1823 0, 0, 139, 0, 136, 0, 0, 0, 0, 0,
1824 180, 0, 276, 0, 260, 0, 0, 0, 0, 78,
1825 247, 248, 0, 0, 0, 0, 0, 0, 0, 0,
1826 0, 0, 0, 0, 0, 0, 0, 0, 236, 78,
1827 251, 0, 275, 195, 123, 0, 92, 0, 0, 122,
1828 0, 133, 92, 182, 184, 0, 0, 257, 0, 0,
1829 0, 0, 0, 134, 120, 132, 0, 137, 138, 0,
1830 0, 0, 0, 0, 0, 103, 101, 207, 0, 265,
1831 259, 241, 240, 0, 0, 57, 0, 0, 0, 0,
1832 96, 96, 282, 0, 0, 273, 0, 0, 0, 0,
1833 0, 0, 0, 0, 0, 0, 0, 0, 86, 87,
1834 89, 129, 127, 116, 117, 118, 121, 115, 0, 0,
1835 0, 0, 0, 0, 0, 163, 141, 0, 0, 0,
1836 0, 0, 98, 104, 102, 206, 88, 204, 0, 218,
1837 219, 220, 225, 221, 222, 223, 224, 216, 0, 227,
1838 232, 231, 233, 0, 242, 0, 0, 0, 0, 0,
1839 278, 0, 280, 257, 0, 0, 0, 0, 0, 0,
1840 0, 0, 0, 0, 0, 0, 0, 0, 90, 91,
1841 93, 0, 0, 0, 153, 0, 0, 0, 0, 140,
1842 0, 0, 0, 0, 201, 0, 92, 217, 0, 0,
1843 0, 0, 0, 0, 0, 0, 0, 0, 285, 0,
1844 0, 0, 269, 270, 0, 0, 0, 0, 267, 266,
1845 0, 283, 0, 0, 0, 258, 0, 160, 0, 0,
1846 155, 156, 152, 159, 200, 203, 205, 88, 99, 0,
1847 226, 0, 0, 256, 0, 0, 96, 97, 96, 0,
1848 0, 0, 0, 0, 261, 262, 256, 0, 157, 158,
1849 0, 0, 0, 201, 100, 94, 0, 0, 0, 0,
1850 0, 263, 264, 0, 279, 281, 0, 0, 268, 271,
1851 272, 0, 284, 154, 161, 162, 202, 0, 208, 228,
1852 0, 0, 88, 0, 92, 252, 0, 92, 95, 0,
1853 245, 0, 0, 254, 0, 0, 253, 274, 243, 0,
1854 244, 0, 88, 0, 0, 0, 255, 0, 0, 0,
1855 0, 250, 0, 0, 249, 0, 246
Reid Spencer3822ff52006-11-08 06:47:33 +00001856};
1857
Andrew Lenharth6353e052006-12-08 18:07:09 +00001858/* YYDEFGOTO[NTERM-NUM]. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00001859static const short int yydefgoto[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001860{
Reid Spencera54b7cb2007-01-12 07:05:14 +00001861 -1, 73, 172, 173, 174, 175, 214, 231, 85, 86,
1862 9, 34, 35, 42, 48, 96, 350, 284, 420, 353,
1863 528, 400, 315, 505, 250, 316, 74, 87, 192, 182,
1864 193, 194, 121, 238, 389, 239, 36, 10, 11, 12,
1865 15, 14, 178, 202, 203, 59, 109, 20, 57, 113,
1866 76, 475, 377, 378, 97, 185, 49, 104, 50, 43,
1867 438, 390, 77, 392, 319, 51, 100, 101, 278, 542,
1868 187, 335, 510, 360, 279, 280, 281, 282
Reid Spencer3822ff52006-11-08 06:47:33 +00001869};
1870
1871/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1872 STATE-NUM. */
Reid Spencera54b7cb2007-01-12 07:05:14 +00001873#define YYPACT_NINF -509
Reid Spencere4d87aa2006-12-23 06:05:41 +00001874static const short int yypact[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001875{
Reid Spencera54b7cb2007-01-12 07:05:14 +00001876 54, -509, -509, -509, -509, -509, -7, -83, 53, 273,
1877 87, 68, -509, -5, 44, 103, 18, 31, 37, 49,
1878 -509, 22, 124, 353, -509, -509, -509, -509, -509, -509,
1879 -509, -509, -509, -509, 174, 174, 1146, -509, -509, -509,
1880 -509, -509, 177, -509, -509, -509, -509, -509, 177, 151,
1881 -509, 8, 239, 157, 253, 242, 243, -509, -509, -509,
1882 -509, -509, 126, -509, -509, -509, -509, -509, -509, 257,
1883 260, 0, 10, -509, -509, 59, -509, -509, 1146, 1251,
1884 126, 193, 212, 258, 259, 215, 261, 599, -509, 263,
1885 -509, -509, -509, -509, -509, -509, 1288, -509, 6, -509,
1886 -509, 130, -509, -509, -509, -509, -509, -509, -509, -509,
1887 -509, -509, -509, -60, 781, -509, 129, 132, 681, -509,
1888 59, -46, -509, 781, -509, 59, -509, -509, -509, -509,
1889 -509, -509, -509, -509, -509, -509, -509, -509, -509, -509,
1890 -509, -509, -509, -509, -509, -509, 99, 383, 136, -509,
1891 -509, -509, -509, -509, -509, -509, -509, -509, -509, -509,
1892 -509, 137, -509, -509, -509, 139, 141, 142, 921, 1301,
1893 741, 266, 147, 148, 152, 153, -509, -509, 154, -509,
1894 126, 59, 130, -509, -509, -509, 1381, -509, 274, -509,
1895 -509, 59, -509, 158, 155, 1251, 1251, 159, -44, 1251,
1896 -509, 160, 154, 154, -509, -509, -509, -509, -509, -509,
1897 -509, -509, -509, -509, 164, -509, -509, -509, -509, -509,
1898 -509, -509, -509, -509, -509, -509, -509, -509, -509, -509,
1899 -509, 166, 1146, 1146, 1146, 1146, 1146, -509, -509, -21,
1900 754, -54, -509, -37, -509, 1146, 1146, 1146, 1146, 13,
1901 -509, 178, -509, 1251, -509, 244, 1338, 33, 285, 177,
1902 -509, -509, 99, 383, 1251, 1251, 1251, 1251, 1251, 1251,
1903 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, -509, 177,
1904 -509, 118, -509, -509, 116, 999, -509, -8, -19, -509,
1905 175, 59, -509, -509, -509, 1146, 1146, -509, 163, 183,
1906 185, 186, 1146, -509, 182, 599, -28, -509, -509, 187,
1907 192, 298, 195, 313, 327, -509, 154, 1191, 830, -509,
1908 -509, 126, -509, 970, 970, -509, 970, 1288, 1251, 1251,
1909 34, 40, -509, 830, 21, 200, 206, 207, 211, 214,
1910 218, 830, 830, 319, 219, 1288, 1251, 1251, -509, -509,
1911 -509, -509, -509, -65, -509, -509, -509, -65, 220, 221,
1912 -13, 1146, 1146, 1146, 1146, -509, -509, 213, 1146, 1146,
1913 1251, 1146, -509, -509, -509, -509, 59, 223, 222, -509,
1914 -509, -509, -509, -509, -509, -509, -509, 311, 1146, -509,
1915 -509, -509, -509, 235, -509, 237, 970, 830, 830, 25,
1916 -509, 27, -509, -509, 970, 233, 1251, 1251, 1251, 1251,
1917 1251, 240, 241, 1251, 1251, 970, 830, 245, -509, -509,
1918 -509, 1146, 1146, 1251, -509, 246, 238, 247, 248, -509,
1919 250, 251, 43, 254, 19, 1234, -509, -509, 356, -40,
1920 364, 365, 256, 264, 265, 970, 391, 970, 267, 268,
1921 970, 275, 59, -509, 276, 277, 970, 970, 59, -509,
1922 271, -509, 1251, 278, 279, -509, 1146, -509, 1146, 1146,
1923 -509, -509, -509, -509, -509, -509, -509, 59, -2, 280,
1924 -509, 970, 970, 1251, 970, 970, 281, -509, 281, 970,
1925 284, 1251, 1251, 1251, -509, -509, 1251, 830, -509, -509,
1926 282, 283, 288, 19, -509, 369, 405, 289, 290, 830,
1927 -12, -509, -509, 381, -509, -509, 291, 970, -509, -509,
1928 -509, 28, -509, -509, -509, -509, -509, 429, -509, -509,
1929 421, -1, -509, 1251, -509, -509, 295, -509, -509, 970,
1930 -509, 1099, 7, 116, 830, 2, -509, -65, -509, 304,
1931 -509, 1099, -509, 427, 434, 308, 116, 970, 970, 435,
1932 380, -509, 970, 437, -509, 970, -509
Reid Spencer3822ff52006-11-08 06:47:33 +00001933};
1934
1935/* YYPGOTO[NTERM-NUM]. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00001936static const short int yypgoto[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001937{
Reid Spencera54b7cb2007-01-12 07:05:14 +00001938 -509, -509, 269, 272, 286, 302, 189, 190, -256, -509,
1939 351, -509, -509, -509, -509, -215, -343, -373, -509, -279,
1940 -509, -323, -17, -509, -173, -509, -509, -23, 172, -275,
1941 -509, 339, 345, -25, -80, -164, 197, -509, -509, 453,
1942 -509, -509, -509, -509, -509, -509, -509, -509, -509, -509,
1943 1, -36, -509, -509, 423, -509, -509, -509, -509, -509,
1944 -509, -508, 9, 104, -211, -509, 445, -509, -509, -509,
1945 -509, -509, 3, 100, -509, -509, -509, -509
Reid Spencer3822ff52006-11-08 06:47:33 +00001946};
1947
1948/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
1949 positive, shift that token. If negative, reduce the rule which
1950 number is the opposite. If zero, do what YYDEFACT says.
1951 If YYTABLE_NINF, syntax error. */
Reid Spencera54b7cb2007-01-12 07:05:14 +00001952#define YYTABLE_NINF -169
Reid Spencere4d87aa2006-12-23 06:05:41 +00001953static const short int yytable[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001954{
Reid Spencera54b7cb2007-01-12 07:05:14 +00001955 75, 13, 326, 434, 117, 241, 243, 176, 402, 325,
1956 419, 88, 13, 357, 419, 60, 61, 325, 80, 63,
1957 64, 65, 66, 67, 99, 1, 313, 2, 183, 293,
1958 294, 102, 553, 549, 1, 445, 2, 447, 16, 17,
1959 18, 313, 323, 555, 327, 322, 324, 348, 349, 120,
1960 21, 68, 396, 124, -168, 332, 125, 19, 336, 337,
1961 338, 339, 340, 314, 345, 343, 344, 418, -167, 1,
1962 415, 2, 3, 181, 188, 446, 306, 446, 4, 5,
1963 302, 189, 40, 1, 41, 2, 3, 37, 199, 307,
1964 199, 191, 4, 5, 302, 120, 177, 302, 6, 200,
1965 191, 290, 13, 480, 503, 7, 302, 22, 308, 8,
1966 348, 349, 6, 302, 348, 349, 122, 367, 123, 7,
1967 303, 423, 533, 8, 355, 424, 534, 122, 39, 123,
1968 418, 348, 349, 354, 418, 419, 417, 44, 45, 46,
1969 540, 58, 47, 374, 118, 1, 69, 2, 550, 70,
1970 184, 52, 71, 103, 72, 119, 122, 478, 123, 543,
1971 404, 56, 533, 514, 53, 515, 537, 99, 399, 122,
1972 54, 123, 287, 288, 401, 122, 291, 123, 122, 556,
1973 123, 472, 55, 251, 204, 205, 206, 207, 208, 209,
1974 210, 211, 212, 213, 122, 451, 123, 453, 454, 455,
1975 24, 25, 419, 459, 419, 107, 108, 297, 298, 299,
1976 300, 301, 465, 126, 127, -57, -57, 305, 128, 129,
1977 309, 310, 311, 312, 439, 176, 346, 347, 348, 349,
1978 318, 78, 79, 318, 89, 90, 91, 92, 93, 94,
1979 95, 330, 331, 318, 333, 334, 318, 318, 318, 318,
1980 318, 341, 342, 318, 318, 545, 106, 110, 547, 111,
1981 112, 115, 191, 114, 116, -58, -59, 179, 130, 195,
1982 358, 359, 196, 232, 233, 541, 234, 365, 235, 236,
1983 518, 519, 520, 244, 245, 246, 551, 23, 249, 247,
1984 248, 283, 285, 286, 376, 325, 320, 361, 292, 24,
1985 25, 295, 289, 296, 181, 397, 398, 26, 27, 28,
1986 29, 30, 31, 32, 177, 317, 33, 362, 356, 363,
1987 364, 368, 181, 416, 318, 366, 369, 391, 370, 371,
1988 372, 373, 391, 391, 405, 391, 425, 426, 427, 428,
1989 406, 407, 391, 430, 431, 408, 433, 432, 409, 413,
1990 391, 391, 410, 414, 421, 422, 429, 435, 60, 61,
1991 436, 62, 63, 64, 65, 66, 67, 437, 1, 440,
1992 2, 441, 450, 479, 456, 457, 467, 481, 482, 462,
1993 466, 468, 469, 318, 452, 318, 318, 318, 470, 471,
1994 458, 318, 473, 483, 68, 487, 463, 464, 484, 485,
1995 318, 423, 489, 215, 216, 391, 391, 391, 496, 491,
1996 492, 493, 477, 391, 506, 513, 498, 499, 517, 527,
1997 523, 524, 529, 530, 391, 391, 525, 393, 394, 531,
1998 395, 446, 535, 538, 539, 474, 546, 403, 554, 497,
1999 557, 500, 559, 501, 502, 411, 412, 558, 562, 563,
2000 565, 328, 186, 329, 391, 274, 391, 352, 275, 391,
2001 509, 504, 201, 198, 38, 391, 391, 526, 318, 318,
2002 318, 98, 276, 509, 217, 218, 219, 220, 221, 222,
2003 223, 224, 225, 226, 227, 228, 229, 230, 277, 69,
2004 391, 391, 70, 391, 391, 71, 105, 72, 391, 521,
2005 442, 443, 444, 448, 474, 0, 391, 0, 449, 0,
2006 544, 0, 0, 0, 0, 0, 0, 0, 391, 460,
2007 461, 0, 0, 0, 0, 0, 391, 0, 0, 0,
Reid Spencer218ded22007-01-05 17:07:23 +00002008 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencera54b7cb2007-01-12 07:05:14 +00002009 0, 0, 0, 0, 0, 0, 0, 0, 391, 486,
2010 0, 488, 0, 391, 490, 0, 0, 0, 0, 0,
2011 494, 495, 0, 0, 0, 0, 391, 391, 0, 0,
2012 0, 391, 0, 0, 391, 0, 0, 0, 0, 0,
2013 0, 0, 0, 0, 0, 507, 508, 0, 511, 512,
2014 0, 0, 0, 516, 0, 0, 0, 0, 0, 0,
2015 0, 522, 0, 0, 60, 61, 0, 0, 0, 0,
2016 0, 0, 0, 532, 1, 0, 2, 0, 131, 0,
2017 0, 536, 0, 0, 0, 0, 0, 0, 0, 0,
2018 0, 132, 133, 0, 0, 0, 0, 0, 0, 0,
2019 0, 0, 0, 548, 0, 0, 0, 0, 552, 0,
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00002020 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencera54b7cb2007-01-12 07:05:14 +00002021 0, 560, 561, 0, 0, 0, 564, 0, 0, 566,
2022 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
2023 144, 145, 146, 147, 0, 0, 60, 61, 0, 80,
2024 63, 64, 65, 66, 67, 0, 1, 0, 2, 0,
2025 0, 0, 0, 0, 0, 0, 0, 0, 0, 148,
2026 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
2027 159, 160, 68, 161, 162, 163, 164, 0, 165, 166,
2028 167, 0, 0, 0, 122, 0, 123, 0, 168, 0,
2029 0, 169, 0, 170, 0, 171, 60, 61, 0, 80,
2030 81, 82, 83, 84, 67, 0, 1, 0, 2, 60,
2031 61, 0, 80, 81, 82, 83, 84, 67, 0, 1,
2032 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
2033 0, 0, 68, 0, 0, 0, 60, 61, 0, 80,
2034 63, 64, 65, 66, 67, 68, 1, 0, 2, 0,
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00002035 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencera54b7cb2007-01-12 07:05:14 +00002036 0, 0, 190, 0, 0, 0, 0, 69, 0, 0,
2037 70, 0, 68, 71, 0, 72, 197, 0, 0, 0,
2038 0, 0, 0, 379, 380, 60, 61, 381, 0, 0,
2039 0, 0, 0, 0, 0, 1, 0, 2, 0, 382,
2040 383, 384, 0, 0, 0, 0, 0, 0, 0, 0,
2041 0, 0, 385, 386, 0, 0, 0, 0, 0, 0,
2042 0, 0, 0, 0, 0, 0, 0, 69, 0, 0,
2043 70, 0, 0, 71, 387, 72, 242, 0, 0, 0,
2044 69, 0, 0, 70, 0, 0, 71, 0, 72, 304,
2045 0, 134, 135, 136, 137, 138, 139, 140, 141, 142,
2046 143, 144, 145, 146, 147, 0, 0, 69, 0, 0,
2047 70, 0, 0, 71, 0, 72, 60, 61, 0, 80,
2048 81, 82, 83, 84, 67, 0, 1, 0, 2, 0,
2049 148, 149, 150, 151, 152, 153, 154, 155, 156, 157,
2050 158, 159, 160, 0, 161, 162, 163, 164, 0, 165,
2051 166, 167, 68, 0, 0, 122, 0, 123, 0, 0,
2052 0, 0, 388, 379, 380, 60, 61, 381, 0, 0,
2053 0, 0, 0, 0, 0, 1, 0, 2, 0, 382,
2054 383, 384, 0, 0, 0, 0, 0, 0, 0, 0,
2055 0, 0, 385, 386, 60, 61, 0, 80, 63, 64,
2056 65, 66, 67, 0, 1, 0, 2, 0, 0, 0,
2057 0, 0, 0, 0, 387, 0, 0, 0, 0, 0,
2058 351, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2059 68, 134, 135, 136, 137, 138, 139, 140, 141, 142,
2060 143, 144, 145, 146, 147, 0, 0, 69, 0, 0,
2061 70, 0, 237, 71, 0, 72, 0, 0, 0, 0,
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00002062 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencera54b7cb2007-01-12 07:05:14 +00002063 148, 149, 150, 151, 152, 153, 154, 155, 156, 157,
2064 158, 159, 160, 0, 161, 162, 163, 164, 0, 165,
2065 166, 167, 379, 380, 0, 0, 381, 0, 0, 0,
2066 0, 0, 388, 0, 0, 0, 0, 0, 382, 383,
2067 384, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2068 0, 385, 386, 0, 0, 69, 0, 0, 70, 0,
2069 0, 71, 0, 72, 0, 0, 0, 0, 0, 0,
2070 0, 60, 61, 387, 80, 81, 82, 83, 84, 67,
2071 0, 1, 0, 2, 0, 0, 0, 0, 0, 0,
2072 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
2073 144, 145, 146, 147, 0, 0, 0, 68, 0, 0,
2074 0, 0, 0, 0, 0, 0, 60, 61, 0, 80,
2075 63, 64, 65, 66, 67, 0, 1, 0, 2, 148,
2076 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
2077 159, 160, 375, 161, 162, 163, 164, 0, 165, 166,
2078 167, 0, 68, 0, 0, 0, 0, 0, 0, 60,
2079 61, 388, 80, 63, 64, 65, 66, 67, 0, 1,
2080 0, 2, 0, 0, 0, 0, 60, 61, 0, 80,
2081 63, 64, 65, 66, 67, 476, 1, 0, 2, 0,
2082 0, 0, 0, 0, 0, 68, 0, 0, 0, 0,
2083 0, 0, 69, 0, 0, 70, 0, 0, 71, 0,
2084 72, 0, 68, 60, 61, 0, 180, 63, 64, 65,
2085 66, 67, 0, 1, 0, 2, 60, 61, 0, 80,
2086 81, 82, 83, 84, 67, 0, 1, 0, 2, 0,
2087 0, 0, 0, 0, 0, 0, 0, 69, 0, 68,
2088 70, 0, 0, 71, 0, 72, 0, 0, 0, 0,
2089 0, 0, 68, 60, 61, 0, 321, 63, 64, 65,
2090 66, 67, 0, 1, 0, 2, 0, 0, 0, 0,
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00002091 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencera54b7cb2007-01-12 07:05:14 +00002092 69, 0, 0, 70, 0, 0, 71, 0, 72, 68,
2093 0, 0, 0, 0, 0, 0, 0, 69, 0, 0,
2094 70, 0, 0, 71, 0, 72, 0, 0, 0, 0,
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00002095 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencera54b7cb2007-01-12 07:05:14 +00002096 252, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2097 0, 0, 0, 253, 69, 0, 0, 70, 0, 0,
2098 71, 0, 72, 254, 255, 0, 0, 69, 0, 0,
2099 70, 0, 0, 71, 0, 240, 256, 257, 258, 259,
2100 260, 261, 134, 135, 136, 137, 138, 139, 140, 141,
2101 142, 143, 144, 145, 262, 263, 0, 0, 0, 0,
2102 0, 0, 0, 0, 69, 0, 0, 70, 0, 0,
2103 71, 0, 72, 0, 0, 0, 264, 265, 266, 0,
2104 0, 267, 149, 150, 151, 152, 153, 154, 155, 156,
2105 157, 158, 159, 160, 268, 269, 162, 163, 164, 270,
2106 271, 272, 273
Reid Spencer3822ff52006-11-08 06:47:33 +00002107};
2108
Reid Spencere4d87aa2006-12-23 06:05:41 +00002109static const short int yycheck[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00002110{
Reid Spencera54b7cb2007-01-12 07:05:14 +00002111 23, 0, 258, 376, 4, 169, 170, 87, 331, 10,
2112 353, 36, 11, 292, 357, 5, 6, 10, 8, 9,
2113 10, 11, 12, 13, 16, 15, 28, 17, 22, 202,
2114 203, 23, 30, 541, 15, 10, 17, 10, 45, 46,
2115 47, 28, 9, 551, 259, 256, 13, 112, 113, 72,
2116 133, 41, 327, 78, 0, 266, 79, 64, 269, 270,
2117 271, 272, 273, 50, 279, 276, 277, 132, 0, 15,
2118 345, 17, 18, 96, 134, 50, 240, 50, 24, 25,
2119 134, 141, 38, 15, 40, 17, 18, 0, 134, 143,
2120 134, 114, 24, 25, 134, 118, 87, 134, 44, 145,
2121 123, 145, 101, 143, 477, 51, 134, 54, 145, 55,
2122 112, 113, 44, 134, 112, 113, 135, 145, 137, 51,
2123 141, 134, 134, 55, 143, 138, 138, 135, 133, 137,
2124 132, 112, 113, 141, 132, 478, 347, 34, 35, 36,
2125 141, 17, 39, 316, 144, 15, 136, 17, 141, 139,
2126 144, 133, 142, 145, 144, 145, 135, 436, 137, 532,
2127 139, 139, 134, 486, 133, 488, 138, 16, 134, 135,
2128 133, 137, 195, 196, 134, 135, 199, 137, 135, 552,
2129 137, 138, 133, 182, 85, 86, 87, 88, 89, 90,
2130 91, 92, 93, 94, 135, 406, 137, 408, 409, 410,
2131 26, 27, 545, 414, 547, 48, 49, 232, 233, 234,
2132 235, 236, 423, 20, 21, 3, 4, 240, 3, 4,
2133 245, 246, 247, 248, 388, 305, 108, 109, 112, 113,
2134 253, 34, 35, 256, 57, 58, 59, 60, 61, 62,
2135 63, 264, 265, 266, 267, 268, 269, 270, 271, 272,
2136 273, 274, 275, 276, 277, 534, 17, 4, 537, 17,
2137 17, 4, 285, 137, 4, 7, 7, 4, 7, 140,
2138 295, 296, 140, 137, 137, 531, 137, 302, 137, 137,
2139 491, 492, 493, 17, 137, 137, 542, 14, 134, 137,
2140 137, 17, 134, 138, 317, 10, 52, 134, 138, 26,
2141 27, 137, 143, 137, 327, 328, 329, 34, 35, 36,
2142 37, 38, 39, 40, 305, 137, 43, 134, 143, 134,
2143 134, 134, 345, 346, 347, 143, 134, 318, 30, 134,
2144 17, 4, 323, 324, 134, 326, 361, 362, 363, 364,
2145 134, 134, 333, 368, 369, 134, 371, 370, 134, 30,
2146 341, 342, 134, 134, 134, 134, 143, 134, 5, 6,
2147 138, 8, 9, 10, 11, 12, 13, 56, 15, 134,
2148 17, 134, 139, 17, 134, 134, 138, 13, 13, 134,
2149 134, 134, 134, 406, 407, 408, 409, 410, 138, 138,
2150 413, 414, 138, 137, 41, 4, 421, 422, 134, 134,
2151 423, 134, 134, 20, 21, 396, 397, 398, 137, 134,
2152 134, 134, 435, 404, 134, 134, 138, 138, 134, 50,
2153 138, 138, 17, 134, 415, 416, 138, 323, 324, 139,
2154 326, 50, 141, 4, 13, 434, 141, 333, 134, 462,
2155 13, 466, 134, 468, 469, 341, 342, 13, 13, 69,
2156 13, 262, 101, 263, 445, 186, 447, 285, 186, 450,
2157 483, 478, 123, 118, 11, 456, 457, 503, 491, 492,
2158 493, 48, 186, 496, 91, 92, 93, 94, 95, 96,
2159 97, 98, 99, 100, 101, 102, 103, 104, 186, 136,
2160 481, 482, 139, 484, 485, 142, 51, 144, 489, 496,
2161 396, 397, 398, 403, 503, -1, 497, -1, 404, -1,
2162 533, -1, -1, -1, -1, -1, -1, -1, 509, 415,
2163 416, -1, -1, -1, -1, -1, 517, -1, -1, -1,
Reid Spencer14310612006-12-31 05:40:51 +00002164 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencera54b7cb2007-01-12 07:05:14 +00002165 -1, -1, -1, -1, -1, -1, -1, -1, 539, 445,
2166 -1, 447, -1, 544, 450, -1, -1, -1, -1, -1,
2167 456, 457, -1, -1, -1, -1, 557, 558, -1, -1,
2168 -1, 562, -1, -1, 565, -1, -1, -1, -1, -1,
2169 -1, -1, -1, -1, -1, 481, 482, -1, 484, 485,
2170 -1, -1, -1, 489, -1, -1, -1, -1, -1, -1,
2171 -1, 497, -1, -1, 5, 6, -1, -1, -1, -1,
2172 -1, -1, -1, 509, 15, -1, 17, -1, 19, -1,
2173 -1, 517, -1, -1, -1, -1, -1, -1, -1, -1,
2174 -1, 32, 33, -1, -1, -1, -1, -1, -1, -1,
2175 -1, -1, -1, 539, -1, -1, -1, -1, 544, -1,
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00002176 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencera54b7cb2007-01-12 07:05:14 +00002177 -1, 557, 558, -1, -1, -1, 562, -1, -1, 565,
2178 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
2179 81, 82, 83, 84, -1, -1, 5, 6, -1, 8,
2180 9, 10, 11, 12, 13, -1, 15, -1, 17, -1,
2181 -1, -1, -1, -1, -1, -1, -1, -1, -1, 110,
2182 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
2183 121, 122, 41, 124, 125, 126, 127, -1, 129, 130,
2184 131, -1, -1, -1, 135, -1, 137, -1, 139, -1,
2185 -1, 142, -1, 144, -1, 146, 5, 6, -1, 8,
2186 9, 10, 11, 12, 13, -1, 15, -1, 17, 5,
2187 6, -1, 8, 9, 10, 11, 12, 13, -1, 15,
2188 -1, 17, -1, -1, -1, -1, -1, -1, -1, -1,
2189 -1, -1, 41, -1, -1, -1, 5, 6, -1, 8,
2190 9, 10, 11, 12, 13, 41, 15, -1, 17, -1,
2191 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2192 -1, -1, 31, -1, -1, -1, -1, 136, -1, -1,
2193 139, -1, 41, 142, -1, 144, 145, -1, -1, -1,
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00002194 -1, -1, -1, 3, 4, 5, 6, 7, -1, -1,
Reid Spencera54b7cb2007-01-12 07:05:14 +00002195 -1, -1, -1, -1, -1, 15, -1, 17, -1, 19,
2196 20, 21, -1, -1, -1, -1, -1, -1, -1, -1,
2197 -1, -1, 32, 33, -1, -1, -1, -1, -1, -1,
2198 -1, -1, -1, -1, -1, -1, -1, 136, -1, -1,
2199 139, -1, -1, 142, 54, 144, 145, -1, -1, -1,
2200 136, -1, -1, 139, -1, -1, 142, -1, 144, 145,
2201 -1, 71, 72, 73, 74, 75, 76, 77, 78, 79,
2202 80, 81, 82, 83, 84, -1, -1, 136, -1, -1,
2203 139, -1, -1, 142, -1, 144, 5, 6, -1, 8,
2204 9, 10, 11, 12, 13, -1, 15, -1, 17, -1,
2205 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
2206 120, 121, 122, -1, 124, 125, 126, 127, -1, 129,
2207 130, 131, 41, -1, -1, 135, -1, 137, -1, -1,
2208 -1, -1, 142, 3, 4, 5, 6, 7, -1, -1,
2209 -1, -1, -1, -1, -1, 15, -1, 17, -1, 19,
2210 20, 21, -1, -1, -1, -1, -1, -1, -1, -1,
2211 -1, -1, 32, 33, 5, 6, -1, 8, 9, 10,
2212 11, 12, 13, -1, 15, -1, 17, -1, -1, -1,
2213 -1, -1, -1, -1, 54, -1, -1, -1, -1, -1,
2214 31, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2215 41, 71, 72, 73, 74, 75, 76, 77, 78, 79,
2216 80, 81, 82, 83, 84, -1, -1, 136, -1, -1,
2217 139, -1, 141, 142, -1, 144, -1, -1, -1, -1,
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00002218 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencera54b7cb2007-01-12 07:05:14 +00002219 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
2220 120, 121, 122, -1, 124, 125, 126, 127, -1, 129,
2221 130, 131, 3, 4, -1, -1, 7, -1, -1, -1,
2222 -1, -1, 142, -1, -1, -1, -1, -1, 19, 20,
2223 21, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2224 -1, 32, 33, -1, -1, 136, -1, -1, 139, -1,
2225 -1, 142, -1, 144, -1, -1, -1, -1, -1, -1,
2226 -1, 5, 6, 54, 8, 9, 10, 11, 12, 13,
2227 -1, 15, -1, 17, -1, -1, -1, -1, -1, -1,
2228 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
2229 81, 82, 83, 84, -1, -1, -1, 41, -1, -1,
2230 -1, -1, -1, -1, -1, -1, 5, 6, -1, 8,
2231 9, 10, 11, 12, 13, -1, 15, -1, 17, 110,
2232 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
2233 121, 122, 31, 124, 125, 126, 127, -1, 129, 130,
2234 131, -1, 41, -1, -1, -1, -1, -1, -1, 5,
2235 6, 142, 8, 9, 10, 11, 12, 13, -1, 15,
2236 -1, 17, -1, -1, -1, -1, 5, 6, -1, 8,
2237 9, 10, 11, 12, 13, 31, 15, -1, 17, -1,
2238 -1, -1, -1, -1, -1, 41, -1, -1, -1, -1,
2239 -1, -1, 136, -1, -1, 139, -1, -1, 142, -1,
2240 144, -1, 41, 5, 6, -1, 8, 9, 10, 11,
2241 12, 13, -1, 15, -1, 17, 5, 6, -1, 8,
2242 9, 10, 11, 12, 13, -1, 15, -1, 17, -1,
2243 -1, -1, -1, -1, -1, -1, -1, 136, -1, 41,
2244 139, -1, -1, 142, -1, 144, -1, -1, -1, -1,
2245 -1, -1, 41, 5, 6, -1, 8, 9, 10, 11,
2246 12, 13, -1, 15, -1, 17, -1, -1, -1, -1,
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00002247 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencera54b7cb2007-01-12 07:05:14 +00002248 136, -1, -1, 139, -1, -1, 142, -1, 144, 41,
2249 -1, -1, -1, -1, -1, -1, -1, 136, -1, -1,
2250 139, -1, -1, 142, -1, 144, -1, -1, -1, -1,
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00002251 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencera54b7cb2007-01-12 07:05:14 +00002252 29, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2253 -1, -1, -1, 42, 136, -1, -1, 139, -1, -1,
2254 142, -1, 144, 52, 53, -1, -1, 136, -1, -1,
2255 139, -1, -1, 142, -1, 144, 65, 66, 67, 68,
2256 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
2257 79, 80, 81, 82, 83, 84, -1, -1, -1, -1,
2258 -1, -1, -1, -1, 136, -1, -1, 139, -1, -1,
2259 142, -1, 144, -1, -1, -1, 105, 106, 107, -1,
2260 -1, 110, 111, 112, 113, 114, 115, 116, 117, 118,
2261 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
2262 129, 130, 131
Reid Spencer3822ff52006-11-08 06:47:33 +00002263};
2264
2265/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
2266 symbol of state STATE-NUM. */
Andrew Lenharth6353e052006-12-08 18:07:09 +00002267static const unsigned char yystos[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00002268{
Reid Spencera54b7cb2007-01-12 07:05:14 +00002269 0, 15, 17, 18, 24, 25, 44, 51, 55, 157,
2270 184, 185, 186, 197, 188, 187, 45, 46, 47, 64,
2271 194, 133, 54, 14, 26, 27, 34, 35, 36, 37,
2272 38, 39, 40, 43, 158, 159, 183, 0, 186, 133,
2273 38, 40, 160, 206, 34, 35, 36, 39, 161, 203,
2274 205, 212, 133, 133, 133, 133, 139, 195, 17, 192,
2275 5, 6, 8, 9, 10, 11, 12, 13, 41, 136,
2276 139, 142, 144, 148, 173, 174, 197, 209, 183, 183,
2277 8, 9, 10, 11, 12, 155, 156, 174, 180, 57,
2278 58, 59, 60, 61, 62, 63, 162, 201, 201, 16,
2279 213, 214, 23, 145, 204, 213, 17, 48, 49, 193,
2280 4, 17, 17, 196, 137, 4, 4, 4, 144, 145,
2281 174, 179, 135, 137, 180, 174, 20, 21, 3, 4,
2282 7, 19, 32, 33, 71, 72, 73, 74, 75, 76,
2283 77, 78, 79, 80, 81, 82, 83, 84, 110, 111,
2284 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
2285 122, 124, 125, 126, 127, 129, 130, 131, 139, 142,
2286 144, 146, 149, 150, 151, 152, 181, 209, 189, 4,
2287 8, 174, 176, 22, 144, 202, 157, 217, 134, 141,
2288 31, 174, 175, 177, 178, 140, 140, 145, 179, 134,
2289 145, 178, 190, 191, 85, 86, 87, 88, 89, 90,
2290 91, 92, 93, 94, 153, 20, 21, 91, 92, 93,
2291 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
2292 104, 154, 137, 137, 137, 137, 137, 141, 180, 182,
2293 144, 182, 145, 182, 17, 137, 137, 137, 137, 134,
2294 171, 197, 29, 42, 52, 53, 65, 66, 67, 68,
2295 69, 70, 83, 84, 105, 106, 107, 110, 123, 124,
2296 128, 129, 130, 131, 149, 150, 151, 152, 215, 221,
2297 222, 223, 224, 17, 164, 134, 138, 174, 174, 143,
2298 145, 174, 138, 171, 171, 137, 137, 180, 180, 180,
2299 180, 180, 134, 141, 145, 174, 182, 143, 145, 180,
2300 180, 180, 180, 28, 50, 169, 172, 137, 174, 211,
2301 52, 8, 211, 9, 13, 10, 155, 162, 153, 154,
2302 174, 174, 211, 174, 174, 218, 211, 211, 211, 211,
2303 211, 174, 174, 211, 211, 162, 108, 109, 112, 113,
2304 163, 31, 175, 166, 141, 143, 143, 166, 180, 180,
2305 220, 134, 134, 134, 134, 180, 143, 145, 134, 134,
2306 30, 134, 17, 4, 171, 31, 174, 199, 200, 3,
2307 4, 7, 19, 20, 21, 32, 33, 54, 142, 181,
2308 208, 209, 210, 210, 210, 210, 176, 174, 174, 134,
2309 168, 134, 168, 210, 139, 134, 134, 134, 134, 134,
2310 134, 210, 210, 30, 134, 176, 174, 211, 132, 163,
2311 165, 134, 134, 134, 138, 180, 180, 180, 180, 143,
2312 180, 180, 174, 180, 164, 134, 138, 56, 207, 182,
2313 134, 134, 210, 210, 210, 10, 50, 10, 220, 210,
2314 139, 211, 174, 211, 211, 211, 134, 134, 174, 211,
2315 210, 210, 134, 180, 180, 211, 134, 138, 134, 134,
2316 138, 138, 138, 138, 197, 198, 31, 174, 166, 17,
2317 143, 13, 13, 137, 134, 134, 210, 4, 210, 134,
2318 210, 134, 134, 134, 210, 210, 137, 174, 138, 138,
2319 180, 180, 180, 164, 169, 170, 134, 210, 210, 174,
2320 219, 210, 210, 134, 168, 168, 210, 134, 211, 211,
2321 211, 219, 210, 138, 138, 138, 198, 50, 167, 17,
2322 134, 139, 210, 134, 138, 141, 210, 138, 4, 13,
2323 141, 155, 216, 164, 174, 166, 141, 166, 210, 208,
2324 141, 155, 210, 30, 134, 208, 164, 13, 13, 134,
2325 210, 210, 13, 69, 210, 13, 210
Reid Spencer3822ff52006-11-08 06:47:33 +00002326};
Reid Spencer68a24bd2005-08-27 18:50:39 +00002327
2328#define yyerrok (yyerrstatus = 0)
2329#define yyclearin (yychar = YYEMPTY)
Reid Spencer3822ff52006-11-08 06:47:33 +00002330#define YYEMPTY (-2)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002331#define YYEOF 0
Reid Spencer3822ff52006-11-08 06:47:33 +00002332
Reid Spencer68a24bd2005-08-27 18:50:39 +00002333#define YYACCEPT goto yyacceptlab
Reid Spencer3822ff52006-11-08 06:47:33 +00002334#define YYABORT goto yyabortlab
2335#define YYERROR goto yyerrorlab
2336
2337
2338/* Like YYERROR except do call yyerror. This remains here temporarily
2339 to ease the transition to the new meaning of YYERROR, for GCC.
Reid Spencer68a24bd2005-08-27 18:50:39 +00002340 Once GCC version 2 has supplanted version 1, this can go. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002341
Reid Spencer68a24bd2005-08-27 18:50:39 +00002342#define YYFAIL goto yyerrlab
Reid Spencer3822ff52006-11-08 06:47:33 +00002343
Reid Spencer68a24bd2005-08-27 18:50:39 +00002344#define YYRECOVERING() (!!yyerrstatus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002345
2346#define YYBACKUP(Token, Value) \
Reid Spencer68a24bd2005-08-27 18:50:39 +00002347do \
2348 if (yychar == YYEMPTY && yylen == 1) \
Reid Spencer3822ff52006-11-08 06:47:33 +00002349 { \
2350 yychar = (Token); \
2351 yylval = (Value); \
2352 yytoken = YYTRANSLATE (yychar); \
Andrew Lenharth6353e052006-12-08 18:07:09 +00002353 YYPOPSTACK; \
Reid Spencer68a24bd2005-08-27 18:50:39 +00002354 goto yybackup; \
2355 } \
2356 else \
Reid Spencere4d87aa2006-12-23 06:05:41 +00002357 { \
2358 yyerror (YY_("syntax error: cannot back up")); \
Reid Spencer3822ff52006-11-08 06:47:33 +00002359 YYERROR; \
2360 } \
Andrew Lenharth6353e052006-12-08 18:07:09 +00002361while (0)
Reid Spencer3822ff52006-11-08 06:47:33 +00002362
Reid Spencere4d87aa2006-12-23 06:05:41 +00002363
Reid Spencer68a24bd2005-08-27 18:50:39 +00002364#define YYTERROR 1
2365#define YYERRCODE 256
2366
Reid Spencer3822ff52006-11-08 06:47:33 +00002367
Reid Spencere4d87aa2006-12-23 06:05:41 +00002368/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
2369 If N is 0, then set CURRENT to the empty location which ends
2370 the previous symbol: RHS[0] (always defined). */
2371
2372#define YYRHSLOC(Rhs, K) ((Rhs)[K])
Reid Spencer3822ff52006-11-08 06:47:33 +00002373#ifndef YYLLOC_DEFAULT
Reid Spencere4d87aa2006-12-23 06:05:41 +00002374# define YYLLOC_DEFAULT(Current, Rhs, N) \
2375 do \
2376 if (N) \
2377 { \
2378 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
2379 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
2380 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
2381 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
2382 } \
2383 else \
2384 { \
2385 (Current).first_line = (Current).last_line = \
2386 YYRHSLOC (Rhs, 0).last_line; \
2387 (Current).first_column = (Current).last_column = \
2388 YYRHSLOC (Rhs, 0).last_column; \
2389 } \
2390 while (0)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002391#endif
2392
Reid Spencere4d87aa2006-12-23 06:05:41 +00002393
2394/* YY_LOCATION_PRINT -- Print the location on the stream.
2395 This macro was not mandated originally: define only if we know
2396 we won't break user code: when these are the locations we know. */
2397
2398#ifndef YY_LOCATION_PRINT
2399# if YYLTYPE_IS_TRIVIAL
2400# define YY_LOCATION_PRINT(File, Loc) \
2401 fprintf (File, "%d.%d-%d.%d", \
2402 (Loc).first_line, (Loc).first_column, \
2403 (Loc).last_line, (Loc).last_column)
2404# else
2405# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
2406# endif
2407#endif
2408
2409
Reid Spencer3822ff52006-11-08 06:47:33 +00002410/* YYLEX -- calling `yylex' with the right arguments. */
2411
Reid Spencer68a24bd2005-08-27 18:50:39 +00002412#ifdef YYLEX_PARAM
Reid Spencer3822ff52006-11-08 06:47:33 +00002413# define YYLEX yylex (YYLEX_PARAM)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002414#else
Reid Spencer3822ff52006-11-08 06:47:33 +00002415# define YYLEX yylex ()
Chris Lattnerf49c1762006-11-08 05:58:47 +00002416#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002417
2418/* Enable debugging if requested. */
2419#if YYDEBUG
2420
2421# ifndef YYFPRINTF
2422# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
2423# define YYFPRINTF fprintf
2424# endif
2425
2426# define YYDPRINTF(Args) \
2427do { \
2428 if (yydebug) \
2429 YYFPRINTF Args; \
Andrew Lenharth6353e052006-12-08 18:07:09 +00002430} while (0)
Reid Spencer3822ff52006-11-08 06:47:33 +00002431
Reid Spencere4d87aa2006-12-23 06:05:41 +00002432# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
Andrew Lenharth6353e052006-12-08 18:07:09 +00002433do { \
2434 if (yydebug) \
2435 { \
2436 YYFPRINTF (stderr, "%s ", Title); \
Reid Spencere4d87aa2006-12-23 06:05:41 +00002437 yysymprint (stderr, \
2438 Type, Value); \
Andrew Lenharth6353e052006-12-08 18:07:09 +00002439 YYFPRINTF (stderr, "\n"); \
2440 } \
2441} while (0)
Reid Spencer3822ff52006-11-08 06:47:33 +00002442
2443/*------------------------------------------------------------------.
2444| yy_stack_print -- Print the state stack from its BOTTOM up to its |
2445| TOP (included). |
2446`------------------------------------------------------------------*/
2447
Andrew Lenharth6353e052006-12-08 18:07:09 +00002448#if defined (__STDC__) || defined (__cplusplus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002449static void
Reid Spencere4d87aa2006-12-23 06:05:41 +00002450yy_stack_print (short int *bottom, short int *top)
Chris Lattnerf49c1762006-11-08 05:58:47 +00002451#else
Reid Spencer3822ff52006-11-08 06:47:33 +00002452static void
2453yy_stack_print (bottom, top)
Reid Spencere4d87aa2006-12-23 06:05:41 +00002454 short int *bottom;
2455 short int *top;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002456#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002457{
2458 YYFPRINTF (stderr, "Stack now");
Andrew Lenharth6353e052006-12-08 18:07:09 +00002459 for (/* Nothing. */; bottom <= top; ++bottom)
Reid Spencer3822ff52006-11-08 06:47:33 +00002460 YYFPRINTF (stderr, " %d", *bottom);
2461 YYFPRINTF (stderr, "\n");
2462}
2463
2464# define YY_STACK_PRINT(Bottom, Top) \
2465do { \
2466 if (yydebug) \
2467 yy_stack_print ((Bottom), (Top)); \
Andrew Lenharth6353e052006-12-08 18:07:09 +00002468} while (0)
Reid Spencer3822ff52006-11-08 06:47:33 +00002469
2470
2471/*------------------------------------------------.
2472| Report that the YYRULE is going to be reduced. |
2473`------------------------------------------------*/
2474
Andrew Lenharth6353e052006-12-08 18:07:09 +00002475#if defined (__STDC__) || defined (__cplusplus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002476static void
Andrew Lenharth6353e052006-12-08 18:07:09 +00002477yy_reduce_print (int yyrule)
Reid Spencer3822ff52006-11-08 06:47:33 +00002478#else
2479static void
Andrew Lenharth6353e052006-12-08 18:07:09 +00002480yy_reduce_print (yyrule)
Reid Spencer3822ff52006-11-08 06:47:33 +00002481 int yyrule;
Chris Lattner1ae022f2006-10-22 06:08:13 +00002482#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002483{
2484 int yyi;
Reid Spencere4d87aa2006-12-23 06:05:41 +00002485 unsigned long int yylno = yyrline[yyrule];
2486 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ",
Andrew Lenharth6353e052006-12-08 18:07:09 +00002487 yyrule - 1, yylno);
2488 /* Print the symbols being reduced, and their result. */
2489 for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
Reid Spencere4d87aa2006-12-23 06:05:41 +00002490 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
2491 YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]);
Reid Spencer3822ff52006-11-08 06:47:33 +00002492}
Reid Spencer21be8652006-10-22 07:03:43 +00002493
Reid Spencer3822ff52006-11-08 06:47:33 +00002494# define YY_REDUCE_PRINT(Rule) \
2495do { \
2496 if (yydebug) \
Andrew Lenharth6353e052006-12-08 18:07:09 +00002497 yy_reduce_print (Rule); \
2498} while (0)
Reid Spencer21be8652006-10-22 07:03:43 +00002499
Reid Spencer3822ff52006-11-08 06:47:33 +00002500/* Nonzero means print parse trace. It is left uninitialized so that
2501 multiple parsers can coexist. */
2502int yydebug;
2503#else /* !YYDEBUG */
2504# define YYDPRINTF(Args)
Reid Spencere4d87aa2006-12-23 06:05:41 +00002505# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
Reid Spencer3822ff52006-11-08 06:47:33 +00002506# define YY_STACK_PRINT(Bottom, Top)
2507# define YY_REDUCE_PRINT(Rule)
2508#endif /* !YYDEBUG */
Reid Spencer21be8652006-10-22 07:03:43 +00002509
Reid Spencer21be8652006-10-22 07:03:43 +00002510
Reid Spencer3822ff52006-11-08 06:47:33 +00002511/* YYINITDEPTH -- initial size of the parser's stacks. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002512#ifndef YYINITDEPTH
Reid Spencer3822ff52006-11-08 06:47:33 +00002513# define YYINITDEPTH 200
Reid Spencer68a24bd2005-08-27 18:50:39 +00002514#endif
2515
Reid Spencer3822ff52006-11-08 06:47:33 +00002516/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
2517 if the built-in stack extension method is used).
Reid Spencer68a24bd2005-08-27 18:50:39 +00002518
Reid Spencer3822ff52006-11-08 06:47:33 +00002519 Do not make this value too large; the results are undefined if
Reid Spencere4d87aa2006-12-23 06:05:41 +00002520 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
Reid Spencer3822ff52006-11-08 06:47:33 +00002521 evaluated with infinite-precision integer arithmetic. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002522
2523#ifndef YYMAXDEPTH
Reid Spencer3822ff52006-11-08 06:47:33 +00002524# define YYMAXDEPTH 10000
Reid Spencer68a24bd2005-08-27 18:50:39 +00002525#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002526
Reid Spencer68a24bd2005-08-27 18:50:39 +00002527
2528
Reid Spencer3822ff52006-11-08 06:47:33 +00002529#if YYERROR_VERBOSE
Reid Spencer68a24bd2005-08-27 18:50:39 +00002530
Reid Spencer3822ff52006-11-08 06:47:33 +00002531# ifndef yystrlen
Andrew Lenharth6353e052006-12-08 18:07:09 +00002532# if defined (__GLIBC__) && defined (_STRING_H)
Reid Spencer3822ff52006-11-08 06:47:33 +00002533# define yystrlen strlen
2534# else
2535/* Return the length of YYSTR. */
2536static YYSIZE_T
Andrew Lenharth6353e052006-12-08 18:07:09 +00002537# if defined (__STDC__) || defined (__cplusplus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002538yystrlen (const char *yystr)
Andrew Lenharth6353e052006-12-08 18:07:09 +00002539# else
Reid Spencer3822ff52006-11-08 06:47:33 +00002540yystrlen (yystr)
Andrew Lenharth6353e052006-12-08 18:07:09 +00002541 const char *yystr;
2542# endif
Chris Lattnerf49c1762006-11-08 05:58:47 +00002543{
Reid Spencere4d87aa2006-12-23 06:05:41 +00002544 const char *yys = yystr;
Andrew Lenharth6353e052006-12-08 18:07:09 +00002545
2546 while (*yys++ != '\0')
Reid Spencer3822ff52006-11-08 06:47:33 +00002547 continue;
Andrew Lenharth6353e052006-12-08 18:07:09 +00002548
2549 return yys - yystr - 1;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002550}
Reid Spencer3822ff52006-11-08 06:47:33 +00002551# endif
2552# endif
Chris Lattnerf49c1762006-11-08 05:58:47 +00002553
Reid Spencer3822ff52006-11-08 06:47:33 +00002554# ifndef yystpcpy
Andrew Lenharth6353e052006-12-08 18:07:09 +00002555# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
Reid Spencer3822ff52006-11-08 06:47:33 +00002556# define yystpcpy stpcpy
2557# else
2558/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
2559 YYDEST. */
2560static char *
Andrew Lenharth6353e052006-12-08 18:07:09 +00002561# if defined (__STDC__) || defined (__cplusplus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002562yystpcpy (char *yydest, const char *yysrc)
Andrew Lenharth6353e052006-12-08 18:07:09 +00002563# else
Reid Spencer3822ff52006-11-08 06:47:33 +00002564yystpcpy (yydest, yysrc)
Andrew Lenharth6353e052006-12-08 18:07:09 +00002565 char *yydest;
2566 const char *yysrc;
2567# endif
Chris Lattnerf49c1762006-11-08 05:58:47 +00002568{
Reid Spencere4d87aa2006-12-23 06:05:41 +00002569 char *yyd = yydest;
2570 const char *yys = yysrc;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002571
Reid Spencer3822ff52006-11-08 06:47:33 +00002572 while ((*yyd++ = *yys++) != '\0')
2573 continue;
2574
2575 return yyd - 1;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002576}
Reid Spencer3822ff52006-11-08 06:47:33 +00002577# endif
2578# endif
Chris Lattnerf49c1762006-11-08 05:58:47 +00002579
Reid Spencere4d87aa2006-12-23 06:05:41 +00002580# ifndef yytnamerr
2581/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
2582 quotes and backslashes, so that it's suitable for yyerror. The
2583 heuristic is that double-quoting is unnecessary unless the string
2584 contains an apostrophe, a comma, or backslash (other than
2585 backslash-backslash). YYSTR is taken from yytname. If YYRES is
2586 null, do not copy; instead, return the length of what the result
2587 would have been. */
2588static YYSIZE_T
2589yytnamerr (char *yyres, const char *yystr)
2590{
2591 if (*yystr == '"')
2592 {
2593 size_t yyn = 0;
2594 char const *yyp = yystr;
2595
2596 for (;;)
2597 switch (*++yyp)
2598 {
2599 case '\'':
2600 case ',':
2601 goto do_not_strip_quotes;
2602
2603 case '\\':
2604 if (*++yyp != '\\')
2605 goto do_not_strip_quotes;
2606 /* Fall through. */
2607 default:
2608 if (yyres)
2609 yyres[yyn] = *yyp;
2610 yyn++;
2611 break;
2612
2613 case '"':
2614 if (yyres)
2615 yyres[yyn] = '\0';
2616 return yyn;
2617 }
2618 do_not_strip_quotes: ;
2619 }
2620
2621 if (! yyres)
2622 return yystrlen (yystr);
2623
2624 return yystpcpy (yyres, yystr) - yyres;
2625}
2626# endif
2627
2628#endif /* YYERROR_VERBOSE */
Reid Spencer3822ff52006-11-08 06:47:33 +00002629
Reid Spencer21be8652006-10-22 07:03:43 +00002630
2631
Andrew Lenharth6353e052006-12-08 18:07:09 +00002632#if YYDEBUG
2633/*--------------------------------.
2634| Print this symbol on YYOUTPUT. |
2635`--------------------------------*/
Reid Spencer3822ff52006-11-08 06:47:33 +00002636
Andrew Lenharth6353e052006-12-08 18:07:09 +00002637#if defined (__STDC__) || defined (__cplusplus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002638static void
Andrew Lenharth6353e052006-12-08 18:07:09 +00002639yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
Reid Spencer3822ff52006-11-08 06:47:33 +00002640#else
2641static void
Andrew Lenharth6353e052006-12-08 18:07:09 +00002642yysymprint (yyoutput, yytype, yyvaluep)
2643 FILE *yyoutput;
Reid Spencer3822ff52006-11-08 06:47:33 +00002644 int yytype;
2645 YYSTYPE *yyvaluep;
2646#endif
2647{
Andrew Lenharth6353e052006-12-08 18:07:09 +00002648 /* Pacify ``unused variable'' warnings. */
2649 (void) yyvaluep;
Reid Spencer3822ff52006-11-08 06:47:33 +00002650
Andrew Lenharth6353e052006-12-08 18:07:09 +00002651 if (yytype < YYNTOKENS)
Reid Spencere4d87aa2006-12-23 06:05:41 +00002652 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
Andrew Lenharth6353e052006-12-08 18:07:09 +00002653 else
2654 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
2655
Reid Spencere4d87aa2006-12-23 06:05:41 +00002656
2657# ifdef YYPRINT
2658 if (yytype < YYNTOKENS)
2659 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
2660# endif
Andrew Lenharth6353e052006-12-08 18:07:09 +00002661 switch (yytype)
2662 {
2663 default:
2664 break;
2665 }
2666 YYFPRINTF (yyoutput, ")");
2667}
2668
2669#endif /* ! YYDEBUG */
2670/*-----------------------------------------------.
2671| Release the memory associated to this symbol. |
2672`-----------------------------------------------*/
2673
2674#if defined (__STDC__) || defined (__cplusplus)
2675static void
Reid Spencere4d87aa2006-12-23 06:05:41 +00002676yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
Andrew Lenharth6353e052006-12-08 18:07:09 +00002677#else
2678static void
Reid Spencere4d87aa2006-12-23 06:05:41 +00002679yydestruct (yymsg, yytype, yyvaluep)
2680 const char *yymsg;
Andrew Lenharth6353e052006-12-08 18:07:09 +00002681 int yytype;
2682 YYSTYPE *yyvaluep;
2683#endif
2684{
2685 /* Pacify ``unused variable'' warnings. */
2686 (void) yyvaluep;
Reid Spencer3822ff52006-11-08 06:47:33 +00002687
Reid Spencere4d87aa2006-12-23 06:05:41 +00002688 if (!yymsg)
2689 yymsg = "Deleting";
2690 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
2691
Reid Spencer3822ff52006-11-08 06:47:33 +00002692 switch (yytype)
2693 {
2694
2695 default:
Andrew Lenharth6353e052006-12-08 18:07:09 +00002696 break;
Reid Spencer3822ff52006-11-08 06:47:33 +00002697 }
2698}
2699
2700
2701/* Prevent warnings from -Wmissing-prototypes. */
2702
2703#ifdef YYPARSE_PARAM
Andrew Lenharth6353e052006-12-08 18:07:09 +00002704# if defined (__STDC__) || defined (__cplusplus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002705int yyparse (void *YYPARSE_PARAM);
Andrew Lenharth6353e052006-12-08 18:07:09 +00002706# else
Reid Spencer3822ff52006-11-08 06:47:33 +00002707int yyparse ();
Andrew Lenharth6353e052006-12-08 18:07:09 +00002708# endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002709#else /* ! YYPARSE_PARAM */
Andrew Lenharth6353e052006-12-08 18:07:09 +00002710#if defined (__STDC__) || defined (__cplusplus)
Reid Spencere812fb22006-01-19 01:21:04 +00002711int yyparse (void);
Chris Lattnerf49c1762006-11-08 05:58:47 +00002712#else
Reid Spencer3822ff52006-11-08 06:47:33 +00002713int yyparse ();
2714#endif
2715#endif /* ! YYPARSE_PARAM */
2716
2717
2718
Reid Spencere4d87aa2006-12-23 06:05:41 +00002719/* The look-ahead symbol. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002720int yychar;
2721
Reid Spencere4d87aa2006-12-23 06:05:41 +00002722/* The semantic value of the look-ahead symbol. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002723YYSTYPE yylval;
2724
2725/* Number of syntax errors so far. */
2726int yynerrs;
2727
2728
2729
2730/*----------.
2731| yyparse. |
2732`----------*/
2733
2734#ifdef YYPARSE_PARAM
Andrew Lenharth6353e052006-12-08 18:07:09 +00002735# if defined (__STDC__) || defined (__cplusplus)
2736int yyparse (void *YYPARSE_PARAM)
2737# else
2738int yyparse (YYPARSE_PARAM)
2739 void *YYPARSE_PARAM;
2740# endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002741#else /* ! YYPARSE_PARAM */
Andrew Lenharth6353e052006-12-08 18:07:09 +00002742#if defined (__STDC__) || defined (__cplusplus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002743int
2744yyparse (void)
2745#else
2746int
2747yyparse ()
Reid Spencer4fe16d62007-01-11 18:21:29 +00002748
Reid Spencer3822ff52006-11-08 06:47:33 +00002749#endif
2750#endif
2751{
2752
Reid Spencere4d87aa2006-12-23 06:05:41 +00002753 int yystate;
2754 int yyn;
Reid Spencer3822ff52006-11-08 06:47:33 +00002755 int yyresult;
2756 /* Number of tokens to shift before error messages enabled. */
2757 int yyerrstatus;
Reid Spencere4d87aa2006-12-23 06:05:41 +00002758 /* Look-ahead token as an internal (translated) token number. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002759 int yytoken = 0;
2760
2761 /* Three stacks and their tools:
2762 `yyss': related to states,
2763 `yyvs': related to semantic values,
2764 `yyls': related to locations.
2765
2766 Refer to the stacks thru separate pointers, to allow yyoverflow
2767 to reallocate them elsewhere. */
2768
2769 /* The state stack. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00002770 short int yyssa[YYINITDEPTH];
2771 short int *yyss = yyssa;
2772 short int *yyssp;
Reid Spencer3822ff52006-11-08 06:47:33 +00002773
2774 /* The semantic value stack. */
2775 YYSTYPE yyvsa[YYINITDEPTH];
2776 YYSTYPE *yyvs = yyvsa;
Reid Spencere4d87aa2006-12-23 06:05:41 +00002777 YYSTYPE *yyvsp;
Reid Spencer3822ff52006-11-08 06:47:33 +00002778
2779
2780
Andrew Lenharth6353e052006-12-08 18:07:09 +00002781#define YYPOPSTACK (yyvsp--, yyssp--)
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002782
Reid Spencer3822ff52006-11-08 06:47:33 +00002783 YYSIZE_T yystacksize = YYINITDEPTH;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002784
Reid Spencer3822ff52006-11-08 06:47:33 +00002785 /* The variables used to return semantic value and location from the
2786 action routines. */
2787 YYSTYPE yyval;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002788
2789
Andrew Lenharth6353e052006-12-08 18:07:09 +00002790 /* When reducing, the number of symbols on the RHS of the reduced
2791 rule. */
2792 int yylen;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002793
Reid Spencer3822ff52006-11-08 06:47:33 +00002794 YYDPRINTF ((stderr, "Starting parse\n"));
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002795
Reid Spencer68a24bd2005-08-27 18:50:39 +00002796 yystate = 0;
2797 yyerrstatus = 0;
2798 yynerrs = 0;
2799 yychar = YYEMPTY; /* Cause a token to be read. */
2800
2801 /* Initialize stack pointers.
2802 Waste one element of value and location stack
2803 so that they stay on the same level as the state stack.
2804 The wasted elements are never initialized. */
2805
Reid Spencer3822ff52006-11-08 06:47:33 +00002806 yyssp = yyss;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002807 yyvsp = yyvs;
2808
Reid Spencer3822ff52006-11-08 06:47:33 +00002809 goto yysetstate;
Jeff Cohen66c5fd62005-10-23 04:37:20 +00002810
Reid Spencer3822ff52006-11-08 06:47:33 +00002811/*------------------------------------------------------------.
2812| yynewstate -- Push a new state, which is found in yystate. |
2813`------------------------------------------------------------*/
2814 yynewstate:
2815 /* In all cases, when you get here, the value and location stacks
Andrew Lenharth6353e052006-12-08 18:07:09 +00002816 have just been pushed. so pushing a state here evens the stacks.
2817 */
Reid Spencer3822ff52006-11-08 06:47:33 +00002818 yyssp++;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002819
Reid Spencer3822ff52006-11-08 06:47:33 +00002820 yysetstate:
2821 *yyssp = yystate;
2822
2823 if (yyss + yystacksize - 1 <= yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002824 {
2825 /* Get the current used size of the three stacks, in elements. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002826 YYSIZE_T yysize = yyssp - yyss + 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002827
2828#ifdef yyoverflow
Reid Spencer3822ff52006-11-08 06:47:33 +00002829 {
Andrew Lenharth6353e052006-12-08 18:07:09 +00002830 /* Give user a chance to reallocate the stack. Use copies of
Reid Spencer3822ff52006-11-08 06:47:33 +00002831 these so that the &'s don't force the real ones into
2832 memory. */
2833 YYSTYPE *yyvs1 = yyvs;
Reid Spencere4d87aa2006-12-23 06:05:41 +00002834 short int *yyss1 = yyss;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002835
Reid Spencer3822ff52006-11-08 06:47:33 +00002836
2837 /* Each stack pointer address is followed by the size of the
2838 data in use in that stack, in bytes. This used to be a
2839 conditional around just the two extra args, but that might
2840 be undefined if yyoverflow is a macro. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00002841 yyoverflow (YY_("memory exhausted"),
Reid Spencer3822ff52006-11-08 06:47:33 +00002842 &yyss1, yysize * sizeof (*yyssp),
2843 &yyvs1, yysize * sizeof (*yyvsp),
2844
2845 &yystacksize);
2846
2847 yyss = yyss1;
2848 yyvs = yyvs1;
2849 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00002850#else /* no yyoverflow */
Reid Spencer3822ff52006-11-08 06:47:33 +00002851# ifndef YYSTACK_RELOCATE
Reid Spencere4d87aa2006-12-23 06:05:41 +00002852 goto yyexhaustedlab;
Reid Spencer3822ff52006-11-08 06:47:33 +00002853# else
Reid Spencer68a24bd2005-08-27 18:50:39 +00002854 /* Extend the stack our own way. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002855 if (YYMAXDEPTH <= yystacksize)
Reid Spencere4d87aa2006-12-23 06:05:41 +00002856 goto yyexhaustedlab;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002857 yystacksize *= 2;
Reid Spencer3822ff52006-11-08 06:47:33 +00002858 if (YYMAXDEPTH < yystacksize)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002859 yystacksize = YYMAXDEPTH;
Reid Spencer3822ff52006-11-08 06:47:33 +00002860
2861 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00002862 short int *yyss1 = yyss;
Reid Spencer3822ff52006-11-08 06:47:33 +00002863 union yyalloc *yyptr =
2864 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
2865 if (! yyptr)
Reid Spencere4d87aa2006-12-23 06:05:41 +00002866 goto yyexhaustedlab;
Reid Spencer3822ff52006-11-08 06:47:33 +00002867 YYSTACK_RELOCATE (yyss);
2868 YYSTACK_RELOCATE (yyvs);
2869
2870# undef YYSTACK_RELOCATE
2871 if (yyss1 != yyssa)
2872 YYSTACK_FREE (yyss1);
2873 }
2874# endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00002875#endif /* no yyoverflow */
2876
Reid Spencer3822ff52006-11-08 06:47:33 +00002877 yyssp = yyss + yysize - 1;
2878 yyvsp = yyvs + yysize - 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002879
2880
Reid Spencer3822ff52006-11-08 06:47:33 +00002881 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
2882 (unsigned long int) yystacksize));
2883
2884 if (yyss + yystacksize - 1 <= yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002885 YYABORT;
2886 }
2887
Reid Spencer3822ff52006-11-08 06:47:33 +00002888 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
Reid Spencer68a24bd2005-08-27 18:50:39 +00002889
2890 goto yybackup;
Reid Spencer3822ff52006-11-08 06:47:33 +00002891
2892/*-----------.
2893| yybackup. |
2894`-----------*/
2895yybackup:
Reid Spencer68a24bd2005-08-27 18:50:39 +00002896
Andrew Lenharth6353e052006-12-08 18:07:09 +00002897/* Do appropriate processing given the current state. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00002898/* Read a look-ahead token if we need one and don't already have one. */
Andrew Lenharth6353e052006-12-08 18:07:09 +00002899/* yyresume: */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002900
Reid Spencere4d87aa2006-12-23 06:05:41 +00002901 /* First try to decide what to do without reference to look-ahead token. */
Andrew Lenharth6353e052006-12-08 18:07:09 +00002902
Reid Spencer68a24bd2005-08-27 18:50:39 +00002903 yyn = yypact[yystate];
Reid Spencer3822ff52006-11-08 06:47:33 +00002904 if (yyn == YYPACT_NINF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002905 goto yydefault;
2906
Reid Spencere4d87aa2006-12-23 06:05:41 +00002907 /* Not known => get a look-ahead token if don't already have one. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002908
Reid Spencere4d87aa2006-12-23 06:05:41 +00002909 /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002910 if (yychar == YYEMPTY)
2911 {
Reid Spencer3822ff52006-11-08 06:47:33 +00002912 YYDPRINTF ((stderr, "Reading a token: "));
Reid Spencer68a24bd2005-08-27 18:50:39 +00002913 yychar = YYLEX;
2914 }
2915
Reid Spencer3822ff52006-11-08 06:47:33 +00002916 if (yychar <= YYEOF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002917 {
Reid Spencer3822ff52006-11-08 06:47:33 +00002918 yychar = yytoken = YYEOF;
2919 YYDPRINTF ((stderr, "Now at end of input.\n"));
Reid Spencer68a24bd2005-08-27 18:50:39 +00002920 }
2921 else
2922 {
Reid Spencer3822ff52006-11-08 06:47:33 +00002923 yytoken = YYTRANSLATE (yychar);
Reid Spencere4d87aa2006-12-23 06:05:41 +00002924 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
Reid Spencer68a24bd2005-08-27 18:50:39 +00002925 }
2926
Reid Spencer3822ff52006-11-08 06:47:33 +00002927 /* If the proper action on seeing token YYTOKEN is to reduce or to
2928 detect an error, take that action. */
2929 yyn += yytoken;
2930 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002931 goto yydefault;
2932 yyn = yytable[yyn];
Reid Spencer3822ff52006-11-08 06:47:33 +00002933 if (yyn <= 0)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002934 {
Reid Spencer3822ff52006-11-08 06:47:33 +00002935 if (yyn == 0 || yyn == YYTABLE_NINF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002936 goto yyerrlab;
2937 yyn = -yyn;
2938 goto yyreduce;
2939 }
2940
2941 if (yyn == YYFINAL)
2942 YYACCEPT;
2943
Reid Spencere4d87aa2006-12-23 06:05:41 +00002944 /* Shift the look-ahead token. */
2945 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
Andrew Lenharth6353e052006-12-08 18:07:09 +00002946
2947 /* Discard the token being shifted unless it is eof. */
2948 if (yychar != YYEOF)
2949 yychar = YYEMPTY;
2950
2951 *++yyvsp = yylval;
2952
2953
Reid Spencer3822ff52006-11-08 06:47:33 +00002954 /* Count tokens shifted since error; after three, turn off error
2955 status. */
2956 if (yyerrstatus)
2957 yyerrstatus--;
Chris Lattner224f84f2006-08-18 17:34:45 +00002958
Reid Spencer68a24bd2005-08-27 18:50:39 +00002959 yystate = yyn;
2960 goto yynewstate;
2961
Chris Lattnerf49c1762006-11-08 05:58:47 +00002962
Reid Spencer3822ff52006-11-08 06:47:33 +00002963/*-----------------------------------------------------------.
2964| yydefault -- do the default action for the current state. |
2965`-----------------------------------------------------------*/
2966yydefault:
Reid Spencer68a24bd2005-08-27 18:50:39 +00002967 yyn = yydefact[yystate];
2968 if (yyn == 0)
2969 goto yyerrlab;
Reid Spencer3822ff52006-11-08 06:47:33 +00002970 goto yyreduce;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002971
Reid Spencer3822ff52006-11-08 06:47:33 +00002972
2973/*-----------------------------.
2974| yyreduce -- Do a reduction. |
2975`-----------------------------*/
Reid Spencer68a24bd2005-08-27 18:50:39 +00002976yyreduce:
Reid Spencer3822ff52006-11-08 06:47:33 +00002977 /* yyn is the number of a rule to reduce with. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002978 yylen = yyr2[yyn];
2979
Reid Spencer3822ff52006-11-08 06:47:33 +00002980 /* If YYLEN is nonzero, implement the default value of the action:
2981 `$$ = $1'.
2982
2983 Otherwise, the following line sets YYVAL to garbage.
2984 This behavior is undocumented and Bison
2985 users should not rely upon it. Assigning to YYVAL
2986 unconditionally makes the parser a bit smaller, and it avoids a
2987 GCC warning that YYVAL may be used uninitialized. */
2988 yyval = yyvsp[1-yylen];
2989
2990
2991 YY_REDUCE_PRINT (yyn);
2992 switch (yyn)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002993 {
Reid Spencer3822ff52006-11-08 06:47:33 +00002994 case 3:
Reid Spencera54b7cb2007-01-12 07:05:14 +00002995#line 1020 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00002996 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00002997 if ((yyvsp[0].UIntVal) > (uint32_t)INT32_MAX) // Outside of my range!
Reid Spencer61c83e02006-08-18 08:43:06 +00002998 GEN_ERROR("Value too large for type!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00002999 (yyval.SIntVal) = (int32_t)(yyvsp[0].UIntVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003000 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003001;}
3002 break;
3003
Reid Spencere4d87aa2006-12-23 06:05:41 +00003004 case 31:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003005#line 1036 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003006 { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;}
3007 break;
3008
3009 case 32:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003010#line 1036 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003011 { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;}
3012 break;
3013
3014 case 33:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003015#line 1037 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003016 { (yyval.IPredicate) = ICmpInst::ICMP_SLT; ;}
3017 break;
3018
3019 case 34:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003020#line 1037 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003021 { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;}
3022 break;
3023
3024 case 35:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003025#line 1038 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003026 { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;}
3027 break;
3028
3029 case 36:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003030#line 1038 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003031 { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;}
3032 break;
3033
3034 case 37:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003035#line 1039 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003036 { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;}
3037 break;
3038
3039 case 38:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003040#line 1039 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003041 { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003042 break;
3043
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003044 case 39:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003045#line 1040 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003046 { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003047 break;
3048
3049 case 40:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003050#line 1040 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003051 { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003052 break;
3053
3054 case 41:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003055#line 1044 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003056 { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003057 break;
3058
3059 case 42:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003060#line 1044 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003061 { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003062 break;
3063
3064 case 43:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003065#line 1045 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003066 { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003067 break;
3068
3069 case 44:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003070#line 1045 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003071 { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003072 break;
3073
3074 case 45:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003075#line 1046 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003076 { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003077 break;
3078
3079 case 46:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003080#line 1046 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003081 { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003082 break;
3083
3084 case 47:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003085#line 1047 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003086 { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003087 break;
3088
3089 case 48:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003090#line 1047 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003091 { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003092 break;
3093
3094 case 49:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003095#line 1048 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003096 { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003097 break;
3098
3099 case 50:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003100#line 1048 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003101 { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003102 break;
3103
3104 case 51:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003105#line 1049 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003106 { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003107 break;
3108
3109 case 52:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003110#line 1049 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003111 { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003112 break;
3113
3114 case 53:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003115#line 1050 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003116 { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003117 break;
3118
3119 case 54:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003120#line 1050 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003121 { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003122 break;
3123
3124 case 55:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003125#line 1051 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003126 { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003127 break;
3128
3129 case 56:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003130#line 1052 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003131 { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003132 break;
3133
Reid Spencera54b7cb2007-01-12 07:05:14 +00003134 case 60:
3135#line 1061 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003136 {
3137 (yyval.StrVal) = (yyvsp[-1].StrVal);
3138 CHECK_FOR_ERROR
3139 ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003140 break;
3141
Reid Spencera54b7cb2007-01-12 07:05:14 +00003142 case 61:
3143#line 1065 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003144 {
3145 (yyval.StrVal) = 0;
3146 CHECK_FOR_ERROR
3147 ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003148 break;
3149
Reid Spencera54b7cb2007-01-12 07:05:14 +00003150 case 62:
3151#line 1071 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003152 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003153 break;
3154
Reid Spencera54b7cb2007-01-12 07:05:14 +00003155 case 63:
3156#line 1072 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003157 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003158 break;
3159
Reid Spencera54b7cb2007-01-12 07:05:14 +00003160 case 64:
3161#line 1073 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003162 { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
3163 break;
3164
Reid Spencera54b7cb2007-01-12 07:05:14 +00003165 case 65:
3166#line 1074 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003167 { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003168 break;
3169
Reid Spencera54b7cb2007-01-12 07:05:14 +00003170 case 66:
3171#line 1075 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003172 { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003173 break;
3174
Reid Spencera54b7cb2007-01-12 07:05:14 +00003175 case 67:
3176#line 1079 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003177 { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
3178 break;
3179
Reid Spencera54b7cb2007-01-12 07:05:14 +00003180 case 68:
3181#line 1080 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003182 { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003183 break;
3184
Reid Spencera54b7cb2007-01-12 07:05:14 +00003185 case 69:
3186#line 1081 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003187 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003188 break;
3189
Reid Spencera54b7cb2007-01-12 07:05:14 +00003190 case 70:
3191#line 1085 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3192 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3193 break;
3194
3195 case 71:
3196#line 1086 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3197 { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
3198 break;
3199
3200 case 72:
3201#line 1087 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3202 { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
3203 break;
3204
Reid Spencer14310612006-12-31 05:40:51 +00003205 case 73:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003206#line 1091 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003207 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003208 break;
3209
Reid Spencer14310612006-12-31 05:40:51 +00003210 case 74:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003211#line 1092 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003212 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003213 break;
3214
Reid Spencera54b7cb2007-01-12 07:05:14 +00003215 case 75:
3216#line 1093 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003217 { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003218 break;
3219
Reid Spencera54b7cb2007-01-12 07:05:14 +00003220 case 76:
3221#line 1094 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003222 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003223 break;
3224
Reid Spencera54b7cb2007-01-12 07:05:14 +00003225 case 77:
3226#line 1095 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003227 { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003228 break;
3229
Reid Spencera54b7cb2007-01-12 07:05:14 +00003230 case 78:
3231#line 1098 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003232 { (yyval.UIntVal) = CallingConv::C; ;}
3233 break;
3234
Reid Spencera54b7cb2007-01-12 07:05:14 +00003235 case 79:
3236#line 1099 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003237 { (yyval.UIntVal) = CallingConv::C; ;}
3238 break;
3239
Reid Spencera54b7cb2007-01-12 07:05:14 +00003240 case 80:
3241#line 1100 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003242 { (yyval.UIntVal) = CallingConv::CSRet; ;}
3243 break;
3244
Reid Spencera54b7cb2007-01-12 07:05:14 +00003245 case 81:
3246#line 1101 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003247 { (yyval.UIntVal) = CallingConv::Fast; ;}
3248 break;
3249
Reid Spencera54b7cb2007-01-12 07:05:14 +00003250 case 82:
3251#line 1102 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003252 { (yyval.UIntVal) = CallingConv::Cold; ;}
3253 break;
3254
Reid Spencera54b7cb2007-01-12 07:05:14 +00003255 case 83:
3256#line 1103 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003257 { (yyval.UIntVal) = CallingConv::X86_StdCall; ;}
3258 break;
3259
Reid Spencera54b7cb2007-01-12 07:05:14 +00003260 case 84:
3261#line 1104 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003262 { (yyval.UIntVal) = CallingConv::X86_FastCall; ;}
3263 break;
3264
Reid Spencera54b7cb2007-01-12 07:05:14 +00003265 case 85:
3266#line 1105 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003267 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003268 if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val))
Reid Spencer61c83e02006-08-18 08:43:06 +00003269 GEN_ERROR("Calling conv too large!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00003270 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
Reid Spencer61c83e02006-08-18 08:43:06 +00003271 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003272 ;}
3273 break;
3274
Reid Spencera54b7cb2007-01-12 07:05:14 +00003275 case 86:
3276#line 1112 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003277 { (yyval.ParamAttrs) = FunctionType::ZExtAttribute; ;}
3278 break;
3279
Reid Spencera54b7cb2007-01-12 07:05:14 +00003280 case 87:
3281#line 1113 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003282 { (yyval.ParamAttrs) = FunctionType::SExtAttribute; ;}
3283 break;
3284
Reid Spencera54b7cb2007-01-12 07:05:14 +00003285 case 88:
3286#line 1116 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer218ded22007-01-05 17:07:23 +00003287 { (yyval.ParamAttrs) = FunctionType::NoAttributeSet; ;}
Reid Spencer14310612006-12-31 05:40:51 +00003288 break;
3289
Reid Spencera54b7cb2007-01-12 07:05:14 +00003290 case 89:
3291#line 1117 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003292 {
Reid Spencer218ded22007-01-05 17:07:23 +00003293 (yyval.ParamAttrs) = FunctionType::ParameterAttributes((yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs));
Reid Spencer14310612006-12-31 05:40:51 +00003294 ;}
3295 break;
3296
Reid Spencera54b7cb2007-01-12 07:05:14 +00003297 case 90:
3298#line 1122 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer218ded22007-01-05 17:07:23 +00003299 { (yyval.ParamAttrs) = FunctionType::NoReturnAttribute; ;}
Reid Spencer14310612006-12-31 05:40:51 +00003300 break;
3301
Reid Spencera54b7cb2007-01-12 07:05:14 +00003302 case 92:
3303#line 1126 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer218ded22007-01-05 17:07:23 +00003304 { (yyval.ParamAttrs) = FunctionType::NoAttributeSet; ;}
Reid Spencere4d87aa2006-12-23 06:05:41 +00003305 break;
3306
Reid Spencera54b7cb2007-01-12 07:05:14 +00003307 case 93:
3308#line 1127 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer218ded22007-01-05 17:07:23 +00003309 {
3310 (yyval.ParamAttrs) = FunctionType::ParameterAttributes((yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs));
3311 ;}
Reid Spencere4d87aa2006-12-23 06:05:41 +00003312 break;
3313
Reid Spencera54b7cb2007-01-12 07:05:14 +00003314 case 94:
3315#line 1134 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003316 { (yyval.UIntVal) = 0; ;}
3317 break;
3318
Reid Spencera54b7cb2007-01-12 07:05:14 +00003319 case 95:
3320#line 1135 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3321 {
3322 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
3323 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
3324 GEN_ERROR("Alignment must be a power of two!");
3325 CHECK_FOR_ERROR
3326;}
3327 break;
3328
3329 case 96:
3330#line 1141 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3331 { (yyval.UIntVal) = 0; ;}
3332 break;
3333
3334 case 97:
3335#line 1142 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3336 {
3337 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
3338 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
3339 GEN_ERROR("Alignment must be a power of two!");
3340 CHECK_FOR_ERROR
3341;}
3342 break;
3343
Reid Spencer218ded22007-01-05 17:07:23 +00003344 case 98:
Reid Spencera54b7cb2007-01-12 07:05:14 +00003345#line 1150 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer218ded22007-01-05 17:07:23 +00003346 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003347 for (unsigned i = 0, e = strlen((yyvsp[0].StrVal)); i != e; ++i)
3348 if ((yyvsp[0].StrVal)[i] == '"' || (yyvsp[0].StrVal)[i] == '\\')
3349 GEN_ERROR("Invalid character in section name!");
3350 (yyval.StrVal) = (yyvsp[0].StrVal);
3351 CHECK_FOR_ERROR
3352;}
3353 break;
3354
Reid Spencera54b7cb2007-01-12 07:05:14 +00003355 case 99:
3356#line 1158 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003357 { (yyval.StrVal) = 0; ;}
3358 break;
3359
Reid Spencera54b7cb2007-01-12 07:05:14 +00003360 case 100:
3361#line 1159 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003362 { (yyval.StrVal) = (yyvsp[0].StrVal); ;}
3363 break;
3364
Reid Spencera54b7cb2007-01-12 07:05:14 +00003365 case 101:
3366#line 1164 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003367 {;}
3368 break;
3369
Reid Spencera54b7cb2007-01-12 07:05:14 +00003370 case 102:
3371#line 1165 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer218ded22007-01-05 17:07:23 +00003372 {;}
3373 break;
3374
Reid Spencera54b7cb2007-01-12 07:05:14 +00003375 case 103:
3376#line 1166 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003377 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003378 CurGV->setSection((yyvsp[0].StrVal));
3379 free((yyvsp[0].StrVal));
3380 CHECK_FOR_ERROR
3381 ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003382 break;
3383
Reid Spencera54b7cb2007-01-12 07:05:14 +00003384 case 104:
3385#line 1171 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003386 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003387 if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val)))
3388 GEN_ERROR("Alignment must be a power of two!");
3389 CurGV->setAlignment((yyvsp[0].UInt64Val));
3390 CHECK_FOR_ERROR
3391 ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003392 break;
3393
Reid Spencera54b7cb2007-01-12 07:05:14 +00003394 case 110:
3395#line 1187 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00003396 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003397 (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
Reid Spencera132e042006-12-03 05:46:11 +00003398 CHECK_FOR_ERROR
3399 ;}
3400 break;
3401
Reid Spencera54b7cb2007-01-12 07:05:14 +00003402 case 111:
3403#line 1191 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00003404 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003405 (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType));
Reid Spencera132e042006-12-03 05:46:11 +00003406 CHECK_FOR_ERROR
3407 ;}
3408 break;
3409
Reid Spencera54b7cb2007-01-12 07:05:14 +00003410 case 112:
3411#line 1195 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003412 { // Pointer type?
3413 if (*(yyvsp[-1].TypeVal) == Type::LabelTy)
3414 GEN_ERROR("Cannot form a pointer to a basic block");
3415 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PointerType::get(*(yyvsp[-1].TypeVal))));
3416 delete (yyvsp[-1].TypeVal);
3417 CHECK_FOR_ERROR
3418 ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003419 break;
3420
Reid Spencera54b7cb2007-01-12 07:05:14 +00003421 case 113:
3422#line 1202 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003423 { // Named types are also simple types...
3424 const Type* tmp = getTypeVal((yyvsp[0].ValIDVal));
3425 CHECK_FOR_ERROR
3426 (yyval.TypeVal) = new PATypeHolder(tmp);
3427 ;}
3428 break;
3429
Reid Spencera54b7cb2007-01-12 07:05:14 +00003430 case 114:
3431#line 1207 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003432 { // Type UpReference
Reid Spencere4d87aa2006-12-23 06:05:41 +00003433 if ((yyvsp[0].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range!");
Reid Spencer3da59db2006-11-27 01:05:10 +00003434 OpaqueType *OT = OpaqueType::get(); // Use temporary placeholder
Reid Spencere4d87aa2006-12-23 06:05:41 +00003435 UpRefs.push_back(UpRefRecord((unsigned)(yyvsp[0].UInt64Val), OT)); // Add to vector...
3436 (yyval.TypeVal) = new PATypeHolder(OT);
Reid Spencer3da59db2006-11-27 01:05:10 +00003437 UR_OUT("New Upreference!\n");
Reid Spencer61c83e02006-08-18 08:43:06 +00003438 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003439 ;}
3440 break;
3441
Reid Spencera54b7cb2007-01-12 07:05:14 +00003442 case 115:
3443#line 1215 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003444 {
Reid Spencer3da59db2006-11-27 01:05:10 +00003445 std::vector<const Type*> Params;
Reid Spencer14310612006-12-31 05:40:51 +00003446 std::vector<FunctionType::ParameterAttributes> Attrs;
Reid Spencer218ded22007-01-05 17:07:23 +00003447 Attrs.push_back((yyvsp[0].ParamAttrs));
3448 for (TypeWithAttrsList::iterator I=(yyvsp[-2].TypeWithAttrsList)->begin(), E=(yyvsp[-2].TypeWithAttrsList)->end(); I != E; ++I) {
Reid Spencer14310612006-12-31 05:40:51 +00003449 Params.push_back(I->Ty->get());
3450 if (I->Ty->get() != Type::VoidTy)
3451 Attrs.push_back(I->Attrs);
3452 }
Reid Spencer3da59db2006-11-27 01:05:10 +00003453 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
3454 if (isVarArg) Params.pop_back();
3455
Reid Spencer14310612006-12-31 05:40:51 +00003456 FunctionType *FT = FunctionType::get(*(yyvsp[-4].TypeVal), Params, isVarArg, Attrs);
Reid Spencer218ded22007-01-05 17:07:23 +00003457 delete (yyvsp[-2].TypeWithAttrsList); // Delete the argument list
Reid Spencer14310612006-12-31 05:40:51 +00003458 delete (yyvsp[-4].TypeVal); // Delete the return type handle
3459 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT));
Reid Spencere4d87aa2006-12-23 06:05:41 +00003460 CHECK_FOR_ERROR
3461 ;}
3462 break;
3463
Reid Spencera54b7cb2007-01-12 07:05:14 +00003464 case 116:
3465#line 1233 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003466 {
3467 std::vector<const Type*> Params;
3468 std::vector<FunctionType::ParameterAttributes> Attrs;
Reid Spencer218ded22007-01-05 17:07:23 +00003469 Attrs.push_back((yyvsp[0].ParamAttrs));
3470 for (TypeWithAttrsList::iterator I=(yyvsp[-2].TypeWithAttrsList)->begin(), E=(yyvsp[-2].TypeWithAttrsList)->end(); I != E; ++I) {
Reid Spencer14310612006-12-31 05:40:51 +00003471 Params.push_back(I->Ty->get());
3472 if (I->Ty->get() != Type::VoidTy)
3473 Attrs.push_back(I->Attrs);
3474 }
3475 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
3476 if (isVarArg) Params.pop_back();
3477
3478 FunctionType *FT = FunctionType::get((yyvsp[-4].PrimType), Params, isVarArg, Attrs);
Reid Spencer218ded22007-01-05 17:07:23 +00003479 delete (yyvsp[-2].TypeWithAttrsList); // Delete the argument list
Reid Spencer14310612006-12-31 05:40:51 +00003480 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT));
3481 CHECK_FOR_ERROR
3482 ;}
3483 break;
3484
Reid Spencera54b7cb2007-01-12 07:05:14 +00003485 case 117:
3486#line 1251 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003487 { // Sized array type?
3488 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
3489 delete (yyvsp[-1].TypeVal);
3490 CHECK_FOR_ERROR
3491 ;}
3492 break;
3493
Reid Spencera54b7cb2007-01-12 07:05:14 +00003494 case 118:
3495#line 1256 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003496 { // Packed array type?
3497 const llvm::Type* ElemTy = (yyvsp[-1].TypeVal)->get();
3498 if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val))
3499 GEN_ERROR("Unsigned result not equal to signed result");
Reid Spencera54b7cb2007-01-12 07:05:14 +00003500 if (!ElemTy->isFloatingPoint() && !ElemTy->isInteger())
3501 GEN_ERROR("Element type of a PackedType must be primitive");
Reid Spencere4d87aa2006-12-23 06:05:41 +00003502 if (!isPowerOf2_32((yyvsp[-3].UInt64Val)))
3503 GEN_ERROR("Vector length should be a power of 2!");
3504 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PackedType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
3505 delete (yyvsp[-1].TypeVal);
3506 CHECK_FOR_ERROR
3507 ;}
3508 break;
3509
Reid Spencera54b7cb2007-01-12 07:05:14 +00003510 case 119:
3511#line 1268 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003512 { // Structure type?
3513 std::vector<const Type*> Elements;
3514 for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-1].TypeList)->begin(),
3515 E = (yyvsp[-1].TypeList)->end(); I != E; ++I)
3516 Elements.push_back(*I);
3517
3518 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
3519 delete (yyvsp[-1].TypeList);
3520 CHECK_FOR_ERROR
3521 ;}
3522 break;
3523
Reid Spencera54b7cb2007-01-12 07:05:14 +00003524 case 120:
3525#line 1278 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003526 { // Empty structure type?
3527 (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>()));
3528 CHECK_FOR_ERROR
3529 ;}
3530 break;
3531
Reid Spencera54b7cb2007-01-12 07:05:14 +00003532 case 121:
3533#line 1282 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003534 {
3535 std::vector<const Type*> Elements;
3536 for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-2].TypeList)->begin(),
3537 E = (yyvsp[-2].TypeList)->end(); I != E; ++I)
3538 Elements.push_back(*I);
3539
3540 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true)));
3541 delete (yyvsp[-2].TypeList);
3542 CHECK_FOR_ERROR
3543 ;}
3544 break;
3545
Reid Spencera54b7cb2007-01-12 07:05:14 +00003546 case 122:
3547#line 1292 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003548 { // Empty structure type?
3549 (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
3550 CHECK_FOR_ERROR
3551 ;}
3552 break;
3553
Reid Spencera54b7cb2007-01-12 07:05:14 +00003554 case 123:
3555#line 1299 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003556 {
3557 (yyval.TypeWithAttrs).Ty = (yyvsp[-1].TypeVal);
3558 (yyval.TypeWithAttrs).Attrs = (yyvsp[0].ParamAttrs);
3559 ;}
3560 break;
3561
Reid Spencera54b7cb2007-01-12 07:05:14 +00003562 case 124:
3563#line 1306 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003564 {
Reid Spencer218ded22007-01-05 17:07:23 +00003565 if (!UpRefs.empty())
3566 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
3567 if (!(*(yyvsp[0].TypeVal))->isFirstClassType())
3568 GEN_ERROR("LLVM functions cannot return aggregate types!");
3569 (yyval.TypeVal) = (yyvsp[0].TypeVal);
Reid Spencer14310612006-12-31 05:40:51 +00003570 ;}
3571 break;
3572
Reid Spencera54b7cb2007-01-12 07:05:14 +00003573 case 125:
3574#line 1313 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer218ded22007-01-05 17:07:23 +00003575 {
3576 (yyval.TypeVal) = new PATypeHolder(Type::VoidTy);
3577 ;}
3578 break;
3579
Reid Spencera54b7cb2007-01-12 07:05:14 +00003580 case 126:
3581#line 1318 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003582 {
3583 (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
3584 (yyval.TypeWithAttrsList)->push_back((yyvsp[0].TypeWithAttrs));
3585 CHECK_FOR_ERROR
3586 ;}
3587 break;
3588
Reid Spencera54b7cb2007-01-12 07:05:14 +00003589 case 127:
3590#line 1323 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003591 {
3592 ((yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList))->push_back((yyvsp[0].TypeWithAttrs));
3593 CHECK_FOR_ERROR
3594 ;}
3595 break;
3596
Reid Spencera54b7cb2007-01-12 07:05:14 +00003597 case 129:
3598#line 1331 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003599 {
3600 (yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList);
3601 TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet;
3602 TWA.Ty = new PATypeHolder(Type::VoidTy);
3603 (yyval.TypeWithAttrsList)->push_back(TWA);
Reid Spencere4d87aa2006-12-23 06:05:41 +00003604 CHECK_FOR_ERROR
3605 ;}
3606 break;
3607
Reid Spencera54b7cb2007-01-12 07:05:14 +00003608 case 130:
3609#line 1338 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003610 {
3611 (yyval.TypeWithAttrsList) = new TypeWithAttrsList;
3612 TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet;
3613 TWA.Ty = new PATypeHolder(Type::VoidTy);
3614 (yyval.TypeWithAttrsList)->push_back(TWA);
3615 CHECK_FOR_ERROR
3616 ;}
3617 break;
3618
Reid Spencera54b7cb2007-01-12 07:05:14 +00003619 case 131:
3620#line 1345 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003621 {
3622 (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
3623 CHECK_FOR_ERROR
3624 ;}
3625 break;
3626
Reid Spencera54b7cb2007-01-12 07:05:14 +00003627 case 132:
3628#line 1353 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003629 {
3630 (yyval.TypeList) = new std::list<PATypeHolder>();
3631 (yyval.TypeList)->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
Reid Spencer3da59db2006-11-27 01:05:10 +00003632 CHECK_FOR_ERROR
3633 ;}
3634 break;
3635
Reid Spencera54b7cb2007-01-12 07:05:14 +00003636 case 133:
3637#line 1358 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003638 {
3639 ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
Reid Spencer3da59db2006-11-27 01:05:10 +00003640 CHECK_FOR_ERROR
3641 ;}
3642 break;
3643
Reid Spencera54b7cb2007-01-12 07:05:14 +00003644 case 134:
3645#line 1369 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003646 { // Nonempty unsized arr
Reid Spencer14310612006-12-31 05:40:51 +00003647 if (!UpRefs.empty())
3648 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003649 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-3].TypeVal)->get());
3650 if (ATy == 0)
3651 GEN_ERROR("Cannot make array constant with type: '" +
3652 (*(yyvsp[-3].TypeVal))->getDescription() + "'!");
3653 const Type *ETy = ATy->getElementType();
3654 int NumElements = ATy->getNumElements();
3655
3656 // Verify that we have the correct size...
3657 if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
3658 GEN_ERROR("Type mismatch: constant sized array initialized with " +
3659 utostr((yyvsp[-1].ConstVector)->size()) + " arguments, but has size of " +
3660 itostr(NumElements) + "!");
3661
3662 // Verify all elements are correct type!
3663 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
3664 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
3665 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
3666 ETy->getDescription() +"' as required!\nIt is of type '"+
3667 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
3668 }
3669
3670 (yyval.ConstVal) = ConstantArray::get(ATy, *(yyvsp[-1].ConstVector));
3671 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
Reid Spencer3da59db2006-11-27 01:05:10 +00003672 CHECK_FOR_ERROR
3673 ;}
3674 break;
3675
Reid Spencera54b7cb2007-01-12 07:05:14 +00003676 case 135:
3677#line 1397 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003678 {
Reid Spencer14310612006-12-31 05:40:51 +00003679 if (!UpRefs.empty())
3680 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003681 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003682 if (ATy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003683 GEN_ERROR("Cannot make array constant with type: '" +
Reid Spencere4d87aa2006-12-23 06:05:41 +00003684 (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003685
Andrew Lenharth6353e052006-12-08 18:07:09 +00003686 int NumElements = ATy->getNumElements();
3687 if (NumElements != -1 && NumElements != 0)
3688 GEN_ERROR("Type mismatch: constant sized array initialized with 0"
3689 " arguments, but has size of " + itostr(NumElements) +"!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00003690 (yyval.ConstVal) = ConstantArray::get(ATy, std::vector<Constant*>());
3691 delete (yyvsp[-2].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003692 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003693 ;}
3694 break;
3695
Reid Spencera54b7cb2007-01-12 07:05:14 +00003696 case 136:
3697#line 1413 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003698 {
Reid Spencer14310612006-12-31 05:40:51 +00003699 if (!UpRefs.empty())
3700 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003701 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
Andrew Lenharth6353e052006-12-08 18:07:09 +00003702 if (ATy == 0)
3703 GEN_ERROR("Cannot make array constant with type: '" +
Reid Spencere4d87aa2006-12-23 06:05:41 +00003704 (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
Reid Spencer61c83e02006-08-18 08:43:06 +00003705
Andrew Lenharth6353e052006-12-08 18:07:09 +00003706 int NumElements = ATy->getNumElements();
3707 const Type *ETy = ATy->getElementType();
Reid Spencere4d87aa2006-12-23 06:05:41 +00003708 char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
3709 if (NumElements != -1 && NumElements != (EndStr-(yyvsp[0].StrVal)))
Andrew Lenharth6353e052006-12-08 18:07:09 +00003710 GEN_ERROR("Can't build string constant of size " +
Reid Spencere4d87aa2006-12-23 06:05:41 +00003711 itostr((int)(EndStr-(yyvsp[0].StrVal))) +
Andrew Lenharth6353e052006-12-08 18:07:09 +00003712 " when array has size " + itostr(NumElements) + "!");
3713 std::vector<Constant*> Vals;
Reid Spencer14310612006-12-31 05:40:51 +00003714 if (ETy == Type::Int8Ty) {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003715 for (unsigned char *C = (unsigned char *)(yyvsp[0].StrVal);
Reid Spencer14310612006-12-31 05:40:51 +00003716 C != (unsigned char*)EndStr; ++C)
3717 Vals.push_back(ConstantInt::get(ETy, *C));
Andrew Lenharth6353e052006-12-08 18:07:09 +00003718 } else {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003719 free((yyvsp[0].StrVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00003720 GEN_ERROR("Cannot build string arrays of non byte sized elements!");
3721 }
Reid Spencere4d87aa2006-12-23 06:05:41 +00003722 free((yyvsp[0].StrVal));
3723 (yyval.ConstVal) = ConstantArray::get(ATy, Vals);
3724 delete (yyvsp[-2].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003725 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003726 ;}
3727 break;
3728
Reid Spencera54b7cb2007-01-12 07:05:14 +00003729 case 137:
3730#line 1442 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00003731 { // Nonempty unsized arr
Reid Spencer14310612006-12-31 05:40:51 +00003732 if (!UpRefs.empty())
3733 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003734 const PackedType *PTy = dyn_cast<PackedType>((yyvsp[-3].TypeVal)->get());
Andrew Lenharth6353e052006-12-08 18:07:09 +00003735 if (PTy == 0)
3736 GEN_ERROR("Cannot make packed constant with type: '" +
Reid Spencere4d87aa2006-12-23 06:05:41 +00003737 (*(yyvsp[-3].TypeVal))->getDescription() + "'!");
Andrew Lenharth6353e052006-12-08 18:07:09 +00003738 const Type *ETy = PTy->getElementType();
3739 int NumElements = PTy->getNumElements();
Reid Spencer68a24bd2005-08-27 18:50:39 +00003740
Andrew Lenharth6353e052006-12-08 18:07:09 +00003741 // Verify that we have the correct size...
Reid Spencere4d87aa2006-12-23 06:05:41 +00003742 if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
Andrew Lenharth6353e052006-12-08 18:07:09 +00003743 GEN_ERROR("Type mismatch: constant sized packed initialized with " +
Reid Spencere4d87aa2006-12-23 06:05:41 +00003744 utostr((yyvsp[-1].ConstVector)->size()) + " arguments, but has size of " +
Andrew Lenharth6353e052006-12-08 18:07:09 +00003745 itostr(NumElements) + "!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003746
Andrew Lenharth6353e052006-12-08 18:07:09 +00003747 // Verify all elements are correct type!
Reid Spencere4d87aa2006-12-23 06:05:41 +00003748 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
3749 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
Andrew Lenharth6353e052006-12-08 18:07:09 +00003750 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
3751 ETy->getDescription() +"' as required!\nIt is of type '"+
Reid Spencere4d87aa2006-12-23 06:05:41 +00003752 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
Andrew Lenharth6353e052006-12-08 18:07:09 +00003753 }
3754
Reid Spencere4d87aa2006-12-23 06:05:41 +00003755 (yyval.ConstVal) = ConstantPacked::get(PTy, *(yyvsp[-1].ConstVector));
3756 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
Reid Spencer61c83e02006-08-18 08:43:06 +00003757 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003758 ;}
3759 break;
3760
Reid Spencera54b7cb2007-01-12 07:05:14 +00003761 case 138:
3762#line 1470 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003763 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003764 const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal)->get());
Andrew Lenharth6353e052006-12-08 18:07:09 +00003765 if (STy == 0)
3766 GEN_ERROR("Cannot make struct constant with type: '" +
Reid Spencere4d87aa2006-12-23 06:05:41 +00003767 (*(yyvsp[-3].TypeVal))->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003768
Reid Spencere4d87aa2006-12-23 06:05:41 +00003769 if ((yyvsp[-1].ConstVector)->size() != STy->getNumContainedTypes())
Andrew Lenharth6353e052006-12-08 18:07:09 +00003770 GEN_ERROR("Illegal number of initializers for structure type!");
3771
3772 // Check to ensure that constants are compatible with the type initializer!
Reid Spencere4d87aa2006-12-23 06:05:41 +00003773 for (unsigned i = 0, e = (yyvsp[-1].ConstVector)->size(); i != e; ++i)
3774 if ((*(yyvsp[-1].ConstVector))[i]->getType() != STy->getElementType(i))
Andrew Lenharth6353e052006-12-08 18:07:09 +00003775 GEN_ERROR("Expected type '" +
3776 STy->getElementType(i)->getDescription() +
3777 "' for element #" + utostr(i) +
3778 " of structure initializer!");
3779
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00003780 // Check to ensure that Type is not packed
3781 if (STy->isPacked())
3782 GEN_ERROR("Unpacked Initializer to packed type '" + STy->getDescription() + "'");
3783
Reid Spencere4d87aa2006-12-23 06:05:41 +00003784 (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[-1].ConstVector));
3785 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
Reid Spencer61c83e02006-08-18 08:43:06 +00003786 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003787 ;}
3788 break;
3789
Reid Spencera54b7cb2007-01-12 07:05:14 +00003790 case 139:
3791#line 1495 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003792 {
Reid Spencer14310612006-12-31 05:40:51 +00003793 if (!UpRefs.empty())
3794 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003795 const StructType *STy = dyn_cast<StructType>((yyvsp[-2].TypeVal)->get());
Andrew Lenharth6353e052006-12-08 18:07:09 +00003796 if (STy == 0)
3797 GEN_ERROR("Cannot make struct constant with type: '" +
Reid Spencere4d87aa2006-12-23 06:05:41 +00003798 (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
Andrew Lenharth6353e052006-12-08 18:07:09 +00003799
3800 if (STy->getNumContainedTypes() != 0)
3801 GEN_ERROR("Illegal number of initializers for structure type!");
3802
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00003803 // Check to ensure that Type is not packed
3804 if (STy->isPacked())
3805 GEN_ERROR("Unpacked Initializer to packed type '" + STy->getDescription() + "'");
3806
Reid Spencere4d87aa2006-12-23 06:05:41 +00003807 (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
3808 delete (yyvsp[-2].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003809 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003810 ;}
3811 break;
3812
Reid Spencera54b7cb2007-01-12 07:05:14 +00003813 case 140:
3814#line 1514 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00003815 {
3816 const StructType *STy = dyn_cast<StructType>((yyvsp[-5].TypeVal)->get());
3817 if (STy == 0)
3818 GEN_ERROR("Cannot make struct constant with type: '" +
3819 (*(yyvsp[-5].TypeVal))->getDescription() + "'!");
3820
3821 if ((yyvsp[-2].ConstVector)->size() != STy->getNumContainedTypes())
3822 GEN_ERROR("Illegal number of initializers for structure type!");
3823
3824 // Check to ensure that constants are compatible with the type initializer!
3825 for (unsigned i = 0, e = (yyvsp[-2].ConstVector)->size(); i != e; ++i)
3826 if ((*(yyvsp[-2].ConstVector))[i]->getType() != STy->getElementType(i))
3827 GEN_ERROR("Expected type '" +
3828 STy->getElementType(i)->getDescription() +
3829 "' for element #" + utostr(i) +
3830 " of structure initializer!");
3831
3832 // Check to ensure that Type is packed
3833 if (!STy->isPacked())
3834 GEN_ERROR("Packed Initializer to unpacked type '" + STy->getDescription() + "'");
3835
3836 (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[-2].ConstVector));
3837 delete (yyvsp[-5].TypeVal); delete (yyvsp[-2].ConstVector);
3838 CHECK_FOR_ERROR
3839 ;}
3840 break;
3841
Reid Spencera54b7cb2007-01-12 07:05:14 +00003842 case 141:
3843#line 1539 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00003844 {
3845 if (!UpRefs.empty())
3846 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
3847 const StructType *STy = dyn_cast<StructType>((yyvsp[-4].TypeVal)->get());
3848 if (STy == 0)
3849 GEN_ERROR("Cannot make struct constant with type: '" +
3850 (*(yyvsp[-4].TypeVal))->getDescription() + "'!");
3851
3852 if (STy->getNumContainedTypes() != 0)
3853 GEN_ERROR("Illegal number of initializers for structure type!");
3854
3855 // Check to ensure that Type is packed
3856 if (!STy->isPacked())
3857 GEN_ERROR("Packed Initializer to unpacked type '" + STy->getDescription() + "'");
3858
3859 (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
3860 delete (yyvsp[-4].TypeVal);
3861 CHECK_FOR_ERROR
3862 ;}
3863 break;
3864
Reid Spencera54b7cb2007-01-12 07:05:14 +00003865 case 142:
3866#line 1558 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003867 {
Reid Spencer14310612006-12-31 05:40:51 +00003868 if (!UpRefs.empty())
3869 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003870 const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
Andrew Lenharth6353e052006-12-08 18:07:09 +00003871 if (PTy == 0)
3872 GEN_ERROR("Cannot make null pointer constant with type: '" +
Reid Spencere4d87aa2006-12-23 06:05:41 +00003873 (*(yyvsp[-1].TypeVal))->getDescription() + "'!");
Andrew Lenharth6353e052006-12-08 18:07:09 +00003874
Reid Spencere4d87aa2006-12-23 06:05:41 +00003875 (yyval.ConstVal) = ConstantPointerNull::get(PTy);
3876 delete (yyvsp[-1].TypeVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00003877 CHECK_FOR_ERROR
3878 ;}
3879 break;
3880
Reid Spencera54b7cb2007-01-12 07:05:14 +00003881 case 143:
3882#line 1570 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00003883 {
Reid Spencer14310612006-12-31 05:40:51 +00003884 if (!UpRefs.empty())
3885 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003886 (yyval.ConstVal) = UndefValue::get((yyvsp[-1].TypeVal)->get());
3887 delete (yyvsp[-1].TypeVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00003888 CHECK_FOR_ERROR
3889 ;}
3890 break;
3891
Reid Spencera54b7cb2007-01-12 07:05:14 +00003892 case 144:
3893#line 1577 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00003894 {
Reid Spencer14310612006-12-31 05:40:51 +00003895 if (!UpRefs.empty())
3896 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003897 const PointerType *Ty = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003898 if (Ty == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003899 GEN_ERROR("Global const reference must be a pointer type!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003900
3901 // ConstExprs can exist in the body of a function, thus creating
3902 // GlobalValues whenever they refer to a variable. Because we are in
3903 // the context of a function, getValNonImprovising will search the functions
3904 // symbol table instead of the module symbol table for the global symbol,
3905 // which throws things all off. To get around this, we just tell
3906 // getValNonImprovising that we are at global scope here.
3907 //
3908 Function *SavedCurFn = CurFun.CurrentFunction;
3909 CurFun.CurrentFunction = 0;
3910
Reid Spencere4d87aa2006-12-23 06:05:41 +00003911 Value *V = getValNonImprovising(Ty, (yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00003912 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00003913
3914 CurFun.CurrentFunction = SavedCurFn;
3915
3916 // If this is an initializer for a constant pointer, which is referencing a
3917 // (currently) undefined variable, create a stub now that shall be replaced
3918 // in the future with the right type of variable.
3919 //
3920 if (V == 0) {
3921 assert(isa<PointerType>(Ty) && "Globals may only be used as pointers!");
3922 const PointerType *PT = cast<PointerType>(Ty);
3923
3924 // First check to see if the forward references value is already created!
3925 PerModuleInfo::GlobalRefsType::iterator I =
Reid Spencere4d87aa2006-12-23 06:05:41 +00003926 CurModule.GlobalRefs.find(std::make_pair(PT, (yyvsp[0].ValIDVal)));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003927
3928 if (I != CurModule.GlobalRefs.end()) {
3929 V = I->second; // Placeholder already exists, use it...
Reid Spencere4d87aa2006-12-23 06:05:41 +00003930 (yyvsp[0].ValIDVal).destroy();
Reid Spencer68a24bd2005-08-27 18:50:39 +00003931 } else {
3932 std::string Name;
Reid Spencere4d87aa2006-12-23 06:05:41 +00003933 if ((yyvsp[0].ValIDVal).Type == ValID::NameVal) Name = (yyvsp[0].ValIDVal).Name;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003934
3935 // Create the forward referenced global.
3936 GlobalValue *GV;
3937 if (const FunctionType *FTy =
3938 dyn_cast<FunctionType>(PT->getElementType())) {
3939 GV = new Function(FTy, GlobalValue::ExternalLinkage, Name,
3940 CurModule.CurrentModule);
3941 } else {
3942 GV = new GlobalVariable(PT->getElementType(), false,
3943 GlobalValue::ExternalLinkage, 0,
3944 Name, CurModule.CurrentModule);
3945 }
3946
3947 // Keep track of the fact that we have a forward ref to recycle it
Reid Spencere4d87aa2006-12-23 06:05:41 +00003948 CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, (yyvsp[0].ValIDVal)), GV));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003949 V = GV;
3950 }
3951 }
3952
Reid Spencere4d87aa2006-12-23 06:05:41 +00003953 (yyval.ConstVal) = cast<GlobalValue>(V);
3954 delete (yyvsp[-1].TypeVal); // Free the type handle
3955 CHECK_FOR_ERROR
3956 ;}
3957 break;
3958
Reid Spencera54b7cb2007-01-12 07:05:14 +00003959 case 145:
3960#line 1640 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003961 {
Reid Spencer14310612006-12-31 05:40:51 +00003962 if (!UpRefs.empty())
3963 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003964 if ((yyvsp[-1].TypeVal)->get() != (yyvsp[0].ConstVal)->getType())
Reid Spencere68853b2007-01-04 00:06:14 +00003965 GEN_ERROR("Mismatched types for constant expression: " +
3966 (*(yyvsp[-1].TypeVal))->getDescription() + " and " + (yyvsp[0].ConstVal)->getType()->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003967 (yyval.ConstVal) = (yyvsp[0].ConstVal);
3968 delete (yyvsp[-1].TypeVal);
3969 CHECK_FOR_ERROR
3970 ;}
3971 break;
3972
Reid Spencera54b7cb2007-01-12 07:05:14 +00003973 case 146:
3974#line 1650 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003975 {
Reid Spencer14310612006-12-31 05:40:51 +00003976 if (!UpRefs.empty())
3977 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003978 const Type *Ty = (yyvsp[-1].TypeVal)->get();
3979 if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
3980 GEN_ERROR("Cannot create a null initialized value of this type!");
3981 (yyval.ConstVal) = Constant::getNullValue(Ty);
3982 delete (yyvsp[-1].TypeVal);
3983 CHECK_FOR_ERROR
3984 ;}
3985 break;
3986
Reid Spencera54b7cb2007-01-12 07:05:14 +00003987 case 147:
3988#line 1660 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003989 { // integral constants
3990 if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val)))
3991 GEN_ERROR("Constant value doesn't fit in type!");
3992 (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val));
3993 CHECK_FOR_ERROR
3994 ;}
3995 break;
3996
Reid Spencera54b7cb2007-01-12 07:05:14 +00003997 case 148:
3998#line 1666 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003999 { // integral constants
4000 if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val)))
4001 GEN_ERROR("Constant value doesn't fit in type!");
4002 (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val));
4003 CHECK_FOR_ERROR
4004 ;}
4005 break;
4006
Reid Spencera54b7cb2007-01-12 07:05:14 +00004007 case 149:
4008#line 1672 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00004009 { // Boolean constants
4010 (yyval.ConstVal) = ConstantInt::getTrue();
4011 CHECK_FOR_ERROR
4012 ;}
4013 break;
4014
Reid Spencera54b7cb2007-01-12 07:05:14 +00004015 case 150:
4016#line 1676 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00004017 { // Boolean constants
4018 (yyval.ConstVal) = ConstantInt::getFalse();
4019 CHECK_FOR_ERROR
4020 ;}
4021 break;
4022
Reid Spencera54b7cb2007-01-12 07:05:14 +00004023 case 151:
4024#line 1680 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004025 { // Float & Double constants
4026 if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].FPVal)))
4027 GEN_ERROR("Floating point constant invalid for type!!");
4028 (yyval.ConstVal) = ConstantFP::get((yyvsp[-1].PrimType), (yyvsp[0].FPVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004029 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004030 ;}
4031 break;
4032
Reid Spencera54b7cb2007-01-12 07:05:14 +00004033 case 152:
4034#line 1688 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00004035 {
Reid Spencer14310612006-12-31 05:40:51 +00004036 if (!UpRefs.empty())
4037 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00004038 Constant *Val = (yyvsp[-3].ConstVal);
4039 const Type *Ty = (yyvsp[-1].TypeVal)->get();
Reid Spencer3da59db2006-11-27 01:05:10 +00004040 if (!Val->getType()->isFirstClassType())
Reid Spencer61c83e02006-08-18 08:43:06 +00004041 GEN_ERROR("cast constant expression from a non-primitive type: '" +
Reid Spencer3da59db2006-11-27 01:05:10 +00004042 Val->getType()->getDescription() + "'!");
4043 if (!Ty->isFirstClassType())
Reid Spencer61c83e02006-08-18 08:43:06 +00004044 GEN_ERROR("cast constant expression to a non-primitive type: '" +
Reid Spencer3da59db2006-11-27 01:05:10 +00004045 Ty->getDescription() + "'!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00004046 (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].TypeVal)->get());
4047 delete (yyvsp[-1].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004048 ;}
4049 break;
4050
Reid Spencera54b7cb2007-01-12 07:05:14 +00004051 case 153:
4052#line 1702 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004053 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004054 if (!isa<PointerType>((yyvsp[-2].ConstVal)->getType()))
Andrew Lenharth6353e052006-12-08 18:07:09 +00004055 GEN_ERROR("GetElementPtr requires a pointer operand!");
4056
4057 const Type *IdxTy =
Reid Spencere4d87aa2006-12-23 06:05:41 +00004058 GetElementPtrInst::getIndexedType((yyvsp[-2].ConstVal)->getType(), *(yyvsp[-1].ValueList), true);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004059 if (!IdxTy)
4060 GEN_ERROR("Index list invalid for constant getelementptr!");
4061
4062 std::vector<Constant*> IdxVec;
Reid Spencere4d87aa2006-12-23 06:05:41 +00004063 for (unsigned i = 0, e = (yyvsp[-1].ValueList)->size(); i != e; ++i)
4064 if (Constant *C = dyn_cast<Constant>((*(yyvsp[-1].ValueList))[i]))
Andrew Lenharth6353e052006-12-08 18:07:09 +00004065 IdxVec.push_back(C);
4066 else
4067 GEN_ERROR("Indices to constant getelementptr must be constants!");
4068
Reid Spencere4d87aa2006-12-23 06:05:41 +00004069 delete (yyvsp[-1].ValueList);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004070
Reid Spencere4d87aa2006-12-23 06:05:41 +00004071 (yyval.ConstVal) = ConstantExpr::getGetElementPtr((yyvsp[-2].ConstVal), IdxVec);
4072 CHECK_FOR_ERROR
4073 ;}
4074 break;
4075
Reid Spencera54b7cb2007-01-12 07:05:14 +00004076 case 154:
4077#line 1723 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004078 {
Reid Spencer4fe16d62007-01-11 18:21:29 +00004079 if ((yyvsp[-5].ConstVal)->getType() != Type::Int1Ty)
Reid Spencere4d87aa2006-12-23 06:05:41 +00004080 GEN_ERROR("Select condition must be of boolean type!");
4081 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
4082 GEN_ERROR("Select operand types must match!");
4083 (yyval.ConstVal) = ConstantExpr::getSelect((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4084 CHECK_FOR_ERROR
4085 ;}
4086 break;
4087
Reid Spencera54b7cb2007-01-12 07:05:14 +00004088 case 155:
4089#line 1731 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004090 {
4091 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
4092 GEN_ERROR("Binary operator types must match!");
4093 CHECK_FOR_ERROR;
4094 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4095 ;}
4096 break;
4097
Reid Spencera54b7cb2007-01-12 07:05:14 +00004098 case 156:
4099#line 1737 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004100 {
4101 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
4102 GEN_ERROR("Logical operator types must match!");
4103 if (!(yyvsp[-3].ConstVal)->getType()->isIntegral()) {
4104 if (!isa<PackedType>((yyvsp[-3].ConstVal)->getType()) ||
4105 !cast<PackedType>((yyvsp[-3].ConstVal)->getType())->getElementType()->isIntegral())
4106 GEN_ERROR("Logical operator requires integral operands!");
4107 }
4108 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4109 CHECK_FOR_ERROR
4110 ;}
4111 break;
4112
Reid Spencera54b7cb2007-01-12 07:05:14 +00004113 case 157:
4114#line 1748 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004115 {
4116 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
4117 GEN_ERROR("icmp operand types must match!");
4118 (yyval.ConstVal) = ConstantExpr::getICmp((yyvsp[-5].IPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4119 ;}
4120 break;
4121
Reid Spencera54b7cb2007-01-12 07:05:14 +00004122 case 158:
4123#line 1753 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004124 {
4125 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
4126 GEN_ERROR("fcmp operand types must match!");
4127 (yyval.ConstVal) = ConstantExpr::getFCmp((yyvsp[-5].FPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4128 ;}
4129 break;
4130
Reid Spencera54b7cb2007-01-12 07:05:14 +00004131 case 159:
4132#line 1758 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004133 {
Reid Spencer14310612006-12-31 05:40:51 +00004134 if ((yyvsp[-1].ConstVal)->getType() != Type::Int8Ty)
4135 GEN_ERROR("Shift count for shift constant must be i8 type!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00004136 if (!(yyvsp[-3].ConstVal)->getType()->isInteger())
4137 GEN_ERROR("Shift constant expression requires integer operand!");
4138 CHECK_FOR_ERROR;
4139 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].OtherOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00004140 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004141 ;}
4142 break;
4143
Reid Spencera54b7cb2007-01-12 07:05:14 +00004144 case 160:
4145#line 1767 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004146 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004147 if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
4148 GEN_ERROR("Invalid extractelement operands!");
4149 (yyval.ConstVal) = ConstantExpr::getExtractElement((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004150 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004151 ;}
4152 break;
4153
Reid Spencera54b7cb2007-01-12 07:05:14 +00004154 case 161:
4155#line 1773 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004156 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004157 if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
4158 GEN_ERROR("Invalid insertelement operands!");
4159 (yyval.ConstVal) = ConstantExpr::getInsertElement((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4160 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004161 ;}
4162 break;
4163
Reid Spencera54b7cb2007-01-12 07:05:14 +00004164 case 162:
4165#line 1779 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004166 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004167 if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
4168 GEN_ERROR("Invalid shufflevector operands!");
4169 (yyval.ConstVal) = ConstantExpr::getShuffleVector((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00004170 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00004171 ;}
4172 break;
4173
Reid Spencera54b7cb2007-01-12 07:05:14 +00004174 case 163:
4175#line 1788 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00004176 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004177 ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00004178 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00004179 ;}
4180 break;
4181
Reid Spencera54b7cb2007-01-12 07:05:14 +00004182 case 164:
4183#line 1792 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00004184 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004185 (yyval.ConstVector) = new std::vector<Constant*>();
4186 (yyval.ConstVector)->push_back((yyvsp[0].ConstVal));
4187 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004188 ;}
4189 break;
4190
Reid Spencera54b7cb2007-01-12 07:05:14 +00004191 case 165:
4192#line 1800 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004193 { (yyval.BoolVal) = false; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00004194 break;
4195
Reid Spencera54b7cb2007-01-12 07:05:14 +00004196 case 166:
4197#line 1800 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004198 { (yyval.BoolVal) = true; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00004199 break;
4200
Reid Spencera54b7cb2007-01-12 07:05:14 +00004201 case 167:
4202#line 1811 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00004203 {
4204 (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
4205 CurModule.ModuleDone();
4206 CHECK_FOR_ERROR;
4207 ;}
4208 break;
4209
Reid Spencera54b7cb2007-01-12 07:05:14 +00004210 case 168:
4211#line 1816 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer218ded22007-01-05 17:07:23 +00004212 {
4213 (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
4214 CurModule.ModuleDone();
4215 CHECK_FOR_ERROR;
4216 ;}
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004217 break;
4218
Reid Spencera54b7cb2007-01-12 07:05:14 +00004219 case 171:
4220#line 1829 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer218ded22007-01-05 17:07:23 +00004221 { CurFun.isDeclare = false ;}
4222 break;
4223
Reid Spencera54b7cb2007-01-12 07:05:14 +00004224 case 172:
4225#line 1829 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004226 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00004227 CurFun.FunctionDone();
Reid Spencer61c83e02006-08-18 08:43:06 +00004228 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004229 ;}
4230 break;
4231
Reid Spencera54b7cb2007-01-12 07:05:14 +00004232 case 173:
4233#line 1833 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004234 { CurFun.isDeclare = true; ;}
4235 break;
4236
Reid Spencera54b7cb2007-01-12 07:05:14 +00004237 case 174:
4238#line 1833 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00004239 {
4240 CHECK_FOR_ERROR
4241 ;}
4242 break;
4243
Reid Spencera54b7cb2007-01-12 07:05:14 +00004244 case 175:
4245#line 1836 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00004246 {
4247 CHECK_FOR_ERROR
4248 ;}
4249 break;
4250
Reid Spencera54b7cb2007-01-12 07:05:14 +00004251 case 176:
4252#line 1839 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00004253 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00004254 // Emit an error if there are any unresolved types left.
4255 if (!CurModule.LateResolveTypes.empty()) {
4256 const ValID &DID = CurModule.LateResolveTypes.begin()->first;
Reid Spencer61c83e02006-08-18 08:43:06 +00004257 if (DID.Type == ValID::NameVal) {
4258 GEN_ERROR("Reference to an undefined type: '"+DID.getName() + "'");
4259 } else {
4260 GEN_ERROR("Reference to an undefined type: #" + itostr(DID.Num));
4261 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004262 }
Reid Spencer61c83e02006-08-18 08:43:06 +00004263 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004264 ;}
4265 break;
4266
Reid Spencera54b7cb2007-01-12 07:05:14 +00004267 case 177:
4268#line 1851 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004269 {
Reid Spencer14310612006-12-31 05:40:51 +00004270 if (!UpRefs.empty())
4271 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004272 // Eagerly resolve types. This is not an optimization, this is a
4273 // requirement that is due to the fact that we could have this:
4274 //
4275 // %list = type { %list * }
4276 // %list = type { %list * } ; repeated type decl
4277 //
4278 // If types are not resolved eagerly, then the two types will not be
4279 // determined to be the same type!
4280 //
Reid Spencere4d87aa2006-12-23 06:05:41 +00004281 ResolveTypeTo((yyvsp[-2].StrVal), *(yyvsp[0].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004282
Reid Spencere4d87aa2006-12-23 06:05:41 +00004283 if (!setTypeName(*(yyvsp[0].TypeVal), (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) {
Reid Spencer5b7e7532006-09-28 19:28:24 +00004284 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004285 // If this is a named type that is not a redefinition, add it to the slot
4286 // table.
Reid Spencere4d87aa2006-12-23 06:05:41 +00004287 CurModule.Types.push_back(*(yyvsp[0].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004288 }
Reid Spencera132e042006-12-03 05:46:11 +00004289
Reid Spencere4d87aa2006-12-23 06:05:41 +00004290 delete (yyvsp[0].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004291 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004292 ;}
4293 break;
4294
Reid Spencera54b7cb2007-01-12 07:05:14 +00004295 case 178:
4296#line 1875 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00004297 {
4298 ResolveTypeTo((yyvsp[-2].StrVal), (yyvsp[0].PrimType));
4299
4300 if (!setTypeName((yyvsp[0].PrimType), (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) {
4301 CHECK_FOR_ERROR
4302 // If this is a named type that is not a redefinition, add it to the slot
4303 // table.
4304 CurModule.Types.push_back((yyvsp[0].PrimType));
4305 }
4306 CHECK_FOR_ERROR
4307 ;}
4308 break;
4309
Reid Spencera54b7cb2007-01-12 07:05:14 +00004310 case 179:
4311#line 1886 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004312 { /* "Externally Visible" Linkage */
4313 if ((yyvsp[0].ConstVal) == 0)
4314 GEN_ERROR("Global value initializer is not a constant!");
4315 CurGV = ParseGlobalVariable((yyvsp[-2].StrVal), GlobalValue::ExternalLinkage, (yyvsp[-1].BoolVal),
4316 (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004317 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004318 ;}
4319 break;
4320
Reid Spencera54b7cb2007-01-12 07:05:14 +00004321 case 180:
4322#line 1892 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004323 {
4324 CurGV = 0;
Reid Spencer3822ff52006-11-08 06:47:33 +00004325 ;}
4326 break;
4327
Reid Spencera54b7cb2007-01-12 07:05:14 +00004328 case 181:
4329#line 1895 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004330 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004331 if ((yyvsp[0].ConstVal) == 0)
Andrew Lenharth6353e052006-12-08 18:07:09 +00004332 GEN_ERROR("Global value initializer is not a constant!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00004333 CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), (yyvsp[-2].Linkage), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal));
4334 CHECK_FOR_ERROR
4335 ;}
4336 break;
4337
Reid Spencera54b7cb2007-01-12 07:05:14 +00004338 case 182:
4339#line 1900 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004340 {
4341 CurGV = 0;
4342 ;}
4343 break;
4344
Reid Spencera54b7cb2007-01-12 07:05:14 +00004345 case 183:
4346#line 1903 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004347 {
Reid Spencer14310612006-12-31 05:40:51 +00004348 if (!UpRefs.empty())
4349 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004350 CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), (yyvsp[-2].Linkage), (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
Reid Spencere4d87aa2006-12-23 06:05:41 +00004351 CHECK_FOR_ERROR
4352 delete (yyvsp[0].TypeVal);
4353 ;}
4354 break;
4355
Reid Spencera54b7cb2007-01-12 07:05:14 +00004356 case 184:
4357#line 1909 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004358 {
4359 CurGV = 0;
4360 CHECK_FOR_ERROR
4361 ;}
4362 break;
4363
Reid Spencera54b7cb2007-01-12 07:05:14 +00004364 case 185:
4365#line 1913 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer218ded22007-01-05 17:07:23 +00004366 {
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004367 CHECK_FOR_ERROR
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004368 ;}
4369 break;
4370
Reid Spencera54b7cb2007-01-12 07:05:14 +00004371 case 186:
4372#line 1916 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004373 {
Reid Spencer218ded22007-01-05 17:07:23 +00004374 CHECK_FOR_ERROR
4375 ;}
4376 break;
4377
Reid Spencera54b7cb2007-01-12 07:05:14 +00004378 case 187:
4379#line 1922 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer218ded22007-01-05 17:07:23 +00004380 {
Chris Lattner66316012006-01-24 04:14:29 +00004381 const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
Reid Spencere4d87aa2006-12-23 06:05:41 +00004382 char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
4383 std::string NewAsm((yyvsp[0].StrVal), EndStr);
4384 free((yyvsp[0].StrVal));
Chris Lattner66316012006-01-24 04:14:29 +00004385
4386 if (AsmSoFar.empty())
4387 CurModule.CurrentModule->setModuleInlineAsm(NewAsm);
4388 else
4389 CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm);
Reid Spencer61c83e02006-08-18 08:43:06 +00004390 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004391;}
4392 break;
4393
Reid Spencera54b7cb2007-01-12 07:05:14 +00004394 case 188:
4395#line 1935 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004396 { (yyval.Endianness) = Module::BigEndian; ;}
4397 break;
4398
Reid Spencera54b7cb2007-01-12 07:05:14 +00004399 case 189:
4400#line 1936 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004401 { (yyval.Endianness) = Module::LittleEndian; ;}
4402 break;
4403
Reid Spencera54b7cb2007-01-12 07:05:14 +00004404 case 190:
4405#line 1938 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004406 {
4407 CurModule.CurrentModule->setEndianness((yyvsp[0].Endianness));
4408 CHECK_FOR_ERROR
4409 ;}
4410 break;
4411
Reid Spencera54b7cb2007-01-12 07:05:14 +00004412 case 191:
4413#line 1942 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004414 {
4415 if ((yyvsp[0].UInt64Val) == 32)
4416 CurModule.CurrentModule->setPointerSize(Module::Pointer32);
4417 else if ((yyvsp[0].UInt64Val) == 64)
4418 CurModule.CurrentModule->setPointerSize(Module::Pointer64);
4419 else
4420 GEN_ERROR("Invalid pointer size: '" + utostr((yyvsp[0].UInt64Val)) + "'!");
4421 CHECK_FOR_ERROR
4422 ;}
4423 break;
4424
Reid Spencera54b7cb2007-01-12 07:05:14 +00004425 case 192:
4426#line 1951 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004427 {
4428 CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal));
4429 free((yyvsp[0].StrVal));
4430 ;}
4431 break;
4432
Reid Spencera54b7cb2007-01-12 07:05:14 +00004433 case 193:
4434#line 1955 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004435 {
4436 CurModule.CurrentModule->setDataLayout((yyvsp[0].StrVal));
4437 free((yyvsp[0].StrVal));
4438 ;}
4439 break;
4440
Reid Spencera54b7cb2007-01-12 07:05:14 +00004441 case 195:
4442#line 1962 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4443 {
4444 CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
4445 free((yyvsp[0].StrVal));
4446 CHECK_FOR_ERROR
4447 ;}
4448 break;
4449
4450 case 196:
4451#line 1967 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4452 {
4453 CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
4454 free((yyvsp[0].StrVal));
4455 CHECK_FOR_ERROR
4456 ;}
4457 break;
4458
4459 case 197:
4460#line 1972 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
4461 {
4462 CHECK_FOR_ERROR
4463 ;}
4464 break;
4465
Reid Spencer218ded22007-01-05 17:07:23 +00004466 case 201:
Reid Spencera54b7cb2007-01-12 07:05:14 +00004467#line 1982 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004468 { (yyval.StrVal) = 0; ;}
4469 break;
4470
Reid Spencera54b7cb2007-01-12 07:05:14 +00004471 case 202:
4472#line 1984 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00004473 {
Reid Spencer14310612006-12-31 05:40:51 +00004474 if (!UpRefs.empty())
4475 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
4476 if (*(yyvsp[-2].TypeVal) == Type::VoidTy)
4477 GEN_ERROR("void typed arguments are invalid!");
4478 ArgListEntry E; E.Attrs = (yyvsp[-1].ParamAttrs); E.Ty = (yyvsp[-2].TypeVal); E.Name = (yyvsp[0].StrVal);
4479 (yyval.ArgList) = (yyvsp[-4].ArgList);
4480 (yyvsp[-4].ArgList)->push_back(E);
Reid Spencer61c83e02006-08-18 08:43:06 +00004481 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004482 ;}
4483 break;
4484
Reid Spencera54b7cb2007-01-12 07:05:14 +00004485 case 203:
4486#line 1994 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004487 {
Reid Spencer14310612006-12-31 05:40:51 +00004488 if (!UpRefs.empty())
4489 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
4490 if (*(yyvsp[-2].TypeVal) == Type::VoidTy)
4491 GEN_ERROR("void typed arguments are invalid!");
4492 ArgListEntry E; E.Attrs = (yyvsp[-1].ParamAttrs); E.Ty = (yyvsp[-2].TypeVal); E.Name = (yyvsp[0].StrVal);
4493 (yyval.ArgList) = new ArgListType;
4494 (yyval.ArgList)->push_back(E);
Reid Spencer61c83e02006-08-18 08:43:06 +00004495 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004496 ;}
4497 break;
4498
Reid Spencera54b7cb2007-01-12 07:05:14 +00004499 case 204:
4500#line 2005 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004501 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004502 (yyval.ArgList) = (yyvsp[0].ArgList);
Reid Spencer61c83e02006-08-18 08:43:06 +00004503 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004504 ;}
4505 break;
4506
Reid Spencera54b7cb2007-01-12 07:05:14 +00004507 case 205:
4508#line 2009 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004509 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004510 (yyval.ArgList) = (yyvsp[-2].ArgList);
Reid Spencer14310612006-12-31 05:40:51 +00004511 struct ArgListEntry E;
4512 E.Ty = new PATypeHolder(Type::VoidTy);
4513 E.Name = 0;
4514 E.Attrs = FunctionType::NoAttributeSet;
4515 (yyval.ArgList)->push_back(E);
Reid Spencer61c83e02006-08-18 08:43:06 +00004516 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004517 ;}
4518 break;
4519
Reid Spencera54b7cb2007-01-12 07:05:14 +00004520 case 206:
4521#line 2018 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004522 {
Reid Spencer14310612006-12-31 05:40:51 +00004523 (yyval.ArgList) = new ArgListType;
4524 struct ArgListEntry E;
4525 E.Ty = new PATypeHolder(Type::VoidTy);
4526 E.Name = 0;
4527 E.Attrs = FunctionType::NoAttributeSet;
4528 (yyval.ArgList)->push_back(E);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004529 CHECK_FOR_ERROR
4530 ;}
4531 break;
4532
Reid Spencera54b7cb2007-01-12 07:05:14 +00004533 case 207:
4534#line 2027 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00004535 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004536 (yyval.ArgList) = 0;
Andrew Lenharth6353e052006-12-08 18:07:09 +00004537 CHECK_FOR_ERROR
4538 ;}
4539 break;
4540
Reid Spencera54b7cb2007-01-12 07:05:14 +00004541 case 208:
4542#line 2033 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00004543 {
Reid Spencer218ded22007-01-05 17:07:23 +00004544 UnEscapeLexed((yyvsp[-6].StrVal));
4545 std::string FunctionName((yyvsp[-6].StrVal));
4546 free((yyvsp[-6].StrVal)); // Free strdup'd memory!
Reid Spencer68a24bd2005-08-27 18:50:39 +00004547
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004548 // Check the function result for abstractness if this is a define. We should
4549 // have no abstract types at this point
Reid Spencer218ded22007-01-05 17:07:23 +00004550 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved((yyvsp[-7].TypeVal)))
4551 GEN_ERROR("Reference to abstract result: "+ (yyvsp[-7].TypeVal)->get()->getDescription());
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004552
Reid Spencer68a24bd2005-08-27 18:50:39 +00004553 std::vector<const Type*> ParamTypeList;
Reid Spencer14310612006-12-31 05:40:51 +00004554 std::vector<FunctionType::ParameterAttributes> ParamAttrs;
Reid Spencer218ded22007-01-05 17:07:23 +00004555 ParamAttrs.push_back((yyvsp[-2].ParamAttrs));
4556 if ((yyvsp[-4].ArgList)) { // If there are arguments...
4557 for (ArgListType::iterator I = (yyvsp[-4].ArgList)->begin(); I != (yyvsp[-4].ArgList)->end(); ++I) {
Reid Spencer14310612006-12-31 05:40:51 +00004558 const Type* Ty = I->Ty->get();
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004559 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(I->Ty))
4560 GEN_ERROR("Reference to abstract argument: " + Ty->getDescription());
Reid Spencer14310612006-12-31 05:40:51 +00004561 ParamTypeList.push_back(Ty);
4562 if (Ty != Type::VoidTy)
4563 ParamAttrs.push_back(I->Attrs);
4564 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004565 }
4566
4567 bool isVarArg = ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy;
4568 if (isVarArg) ParamTypeList.pop_back();
4569
Reid Spencer218ded22007-01-05 17:07:23 +00004570 FunctionType *FT = FunctionType::get(*(yyvsp[-7].TypeVal), ParamTypeList, isVarArg,
Reid Spencer14310612006-12-31 05:40:51 +00004571 ParamAttrs);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004572 const PointerType *PFT = PointerType::get(FT);
Reid Spencer218ded22007-01-05 17:07:23 +00004573 delete (yyvsp[-7].TypeVal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004574
4575 ValID ID;
4576 if (!FunctionName.empty()) {
4577 ID = ValID::create((char*)FunctionName.c_str());
4578 } else {
4579 ID = ValID::create((int)CurModule.Values[PFT].size());
4580 }
4581
4582 Function *Fn = 0;
4583 // See if this function was forward referenced. If so, recycle the object.
4584 if (GlobalValue *FWRef = CurModule.GetForwardRefForGlobal(PFT, ID)) {
4585 // Move the function to the end of the list, from whereever it was
4586 // previously inserted.
4587 Fn = cast<Function>(FWRef);
4588 CurModule.CurrentModule->getFunctionList().remove(Fn);
4589 CurModule.CurrentModule->getFunctionList().push_back(Fn);
4590 } else if (!FunctionName.empty() && // Merge with an earlier prototype?
4591 (Fn = CurModule.CurrentModule->getFunction(FunctionName, FT))) {
4592 // If this is the case, either we need to be a forward decl, or it needs
4593 // to be.
4594 if (!CurFun.isDeclare && !Fn->isExternal())
Reid Spencer61c83e02006-08-18 08:43:06 +00004595 GEN_ERROR("Redefinition of function '" + FunctionName + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004596
4597 // Make sure to strip off any argument names so we can't get conflicts.
4598 if (Fn->isExternal())
4599 for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end();
4600 AI != AE; ++AI)
4601 AI->setName("");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004602 } else { // Not already defined?
4603 Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName,
4604 CurModule.CurrentModule);
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004605
Reid Spencer68a24bd2005-08-27 18:50:39 +00004606 InsertValue(Fn, CurModule.Values);
4607 }
4608
4609 CurFun.FunctionStart(Fn);
Anton Korobeynikov93c2b372006-09-17 13:06:18 +00004610
4611 if (CurFun.isDeclare) {
4612 // If we have declaration, always overwrite linkage. This will allow us to
4613 // correctly handle cases, when pointer to function is passed as argument to
4614 // another function.
4615 Fn->setLinkage(CurFun.Linkage);
4616 }
Reid Spencer218ded22007-01-05 17:07:23 +00004617 Fn->setCallingConv((yyvsp[-8].UIntVal));
Reid Spencere4d87aa2006-12-23 06:05:41 +00004618 Fn->setAlignment((yyvsp[0].UIntVal));
4619 if ((yyvsp[-1].StrVal)) {
4620 Fn->setSection((yyvsp[-1].StrVal));
4621 free((yyvsp[-1].StrVal));
Chris Lattnere869eef2005-11-12 00:11:49 +00004622 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004623
4624 // Add all of the arguments we parsed to the function...
Reid Spencer218ded22007-01-05 17:07:23 +00004625 if ((yyvsp[-4].ArgList)) { // Is null if empty...
Reid Spencer68a24bd2005-08-27 18:50:39 +00004626 if (isVarArg) { // Nuke the last entry
Reid Spencer218ded22007-01-05 17:07:23 +00004627 assert((yyvsp[-4].ArgList)->back().Ty->get() == Type::VoidTy && (yyvsp[-4].ArgList)->back().Name == 0&&
Reid Spencera132e042006-12-03 05:46:11 +00004628 "Not a varargs marker!");
Reid Spencer218ded22007-01-05 17:07:23 +00004629 delete (yyvsp[-4].ArgList)->back().Ty;
4630 (yyvsp[-4].ArgList)->pop_back(); // Delete the last entry
Reid Spencer68a24bd2005-08-27 18:50:39 +00004631 }
4632 Function::arg_iterator ArgIt = Fn->arg_begin();
Reid Spencer14310612006-12-31 05:40:51 +00004633 unsigned Idx = 1;
Reid Spencer218ded22007-01-05 17:07:23 +00004634 for (ArgListType::iterator I = (yyvsp[-4].ArgList)->begin(); I != (yyvsp[-4].ArgList)->end(); ++I, ++ArgIt) {
Reid Spencer14310612006-12-31 05:40:51 +00004635 delete I->Ty; // Delete the typeholder...
4636 setValueName(ArgIt, I->Name); // Insert arg into symtab...
Reid Spencer5b7e7532006-09-28 19:28:24 +00004637 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004638 InsertValue(ArgIt);
Reid Spencer14310612006-12-31 05:40:51 +00004639 Idx++;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004640 }
Reid Spencera132e042006-12-03 05:46:11 +00004641
Reid Spencer218ded22007-01-05 17:07:23 +00004642 delete (yyvsp[-4].ArgList); // We're now done with the argument list
Reid Spencer68a24bd2005-08-27 18:50:39 +00004643 }
Reid Spencer61c83e02006-08-18 08:43:06 +00004644 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004645;}
4646 break;
4647
Reid Spencera54b7cb2007-01-12 07:05:14 +00004648 case 211:
4649#line 2139 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004650 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004651 (yyval.FunctionVal) = CurFun.CurrentFunction;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004652
4653 // Make sure that we keep track of the linkage type even if there was a
4654 // previous "declare".
Reid Spencere4d87aa2006-12-23 06:05:41 +00004655 (yyval.FunctionVal)->setLinkage((yyvsp[-2].Linkage));
Reid Spencer3822ff52006-11-08 06:47:33 +00004656;}
4657 break;
4658
Reid Spencera54b7cb2007-01-12 07:05:14 +00004659 case 214:
4660#line 2149 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00004661 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004662 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004663 CHECK_FOR_ERROR
4664;}
Reid Spencer3822ff52006-11-08 06:47:33 +00004665 break;
4666
Reid Spencera54b7cb2007-01-12 07:05:14 +00004667 case 215:
4668#line 2154 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004669 {
Reid Spencer14310612006-12-31 05:40:51 +00004670 CurFun.CurrentFunction->setLinkage((yyvsp[-1].Linkage));
Reid Spencere4d87aa2006-12-23 06:05:41 +00004671 (yyval.FunctionVal) = CurFun.CurrentFunction;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004672 CurFun.FunctionDone();
Reid Spencer61c83e02006-08-18 08:43:06 +00004673 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004674 ;}
4675 break;
4676
Reid Spencera54b7cb2007-01-12 07:05:14 +00004677 case 216:
4678#line 2165 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00004679 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004680 (yyval.BoolVal) = false;
4681 CHECK_FOR_ERROR
4682 ;}
4683 break;
4684
Reid Spencera54b7cb2007-01-12 07:05:14 +00004685 case 217:
4686#line 2169 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004687 {
4688 (yyval.BoolVal) = true;
4689 CHECK_FOR_ERROR
4690 ;}
4691 break;
4692
Reid Spencera54b7cb2007-01-12 07:05:14 +00004693 case 218:
4694#line 2174 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004695 { // A reference to a direct constant
4696 (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val));
4697 CHECK_FOR_ERROR
4698 ;}
4699 break;
4700
Reid Spencera54b7cb2007-01-12 07:05:14 +00004701 case 219:
4702#line 2178 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004703 {
4704 (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val));
4705 CHECK_FOR_ERROR
4706 ;}
4707 break;
4708
Reid Spencera54b7cb2007-01-12 07:05:14 +00004709 case 220:
4710#line 2182 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004711 { // Perhaps it's an FP constant?
4712 (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal));
4713 CHECK_FOR_ERROR
4714 ;}
4715 break;
4716
Reid Spencera54b7cb2007-01-12 07:05:14 +00004717 case 221:
4718#line 2186 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00004719 {
4720 (yyval.ValIDVal) = ValID::create(ConstantInt::getTrue());
4721 CHECK_FOR_ERROR
4722 ;}
4723 break;
4724
Reid Spencera54b7cb2007-01-12 07:05:14 +00004725 case 222:
4726#line 2190 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00004727 {
4728 (yyval.ValIDVal) = ValID::create(ConstantInt::getFalse());
4729 CHECK_FOR_ERROR
4730 ;}
4731 break;
4732
Reid Spencera54b7cb2007-01-12 07:05:14 +00004733 case 223:
4734#line 2194 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004735 {
4736 (yyval.ValIDVal) = ValID::createNull();
Reid Spencer61c83e02006-08-18 08:43:06 +00004737 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004738 ;}
4739 break;
4740
Reid Spencera54b7cb2007-01-12 07:05:14 +00004741 case 224:
4742#line 2198 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004743 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004744 (yyval.ValIDVal) = ValID::createUndef();
Reid Spencer61c83e02006-08-18 08:43:06 +00004745 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004746 ;}
4747 break;
4748
Reid Spencera54b7cb2007-01-12 07:05:14 +00004749 case 225:
4750#line 2202 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004751 { // A vector zero constant.
4752 (yyval.ValIDVal) = ValID::createZeroInit();
Reid Spencer61c83e02006-08-18 08:43:06 +00004753 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004754 ;}
4755 break;
4756
Reid Spencera54b7cb2007-01-12 07:05:14 +00004757 case 226:
4758#line 2206 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004759 { // Nonempty unsized packed vector
Reid Spencere4d87aa2006-12-23 06:05:41 +00004760 const Type *ETy = (*(yyvsp[-1].ConstVector))[0]->getType();
4761 int NumElements = (yyvsp[-1].ConstVector)->size();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004762
4763 PackedType* pt = PackedType::get(ETy, NumElements);
4764 PATypeHolder* PTy = new PATypeHolder(
Reid Spencera132e042006-12-03 05:46:11 +00004765 HandleUpRefs(
4766 PackedType::get(
4767 ETy,
4768 NumElements)
4769 )
4770 );
Reid Spencer68a24bd2005-08-27 18:50:39 +00004771
4772 // Verify all elements are correct type!
Reid Spencere4d87aa2006-12-23 06:05:41 +00004773 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
4774 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00004775 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00004776 ETy->getDescription() +"' as required!\nIt is of type '" +
Reid Spencere4d87aa2006-12-23 06:05:41 +00004777 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004778 }
4779
Reid Spencere4d87aa2006-12-23 06:05:41 +00004780 (yyval.ValIDVal) = ValID::create(ConstantPacked::get(pt, *(yyvsp[-1].ConstVector)));
4781 delete PTy; delete (yyvsp[-1].ConstVector);
4782 CHECK_FOR_ERROR
4783 ;}
4784 break;
4785
Reid Spencera54b7cb2007-01-12 07:05:14 +00004786 case 227:
4787#line 2231 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004788 {
4789 (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal));
4790 CHECK_FOR_ERROR
4791 ;}
4792 break;
4793
Reid Spencera54b7cb2007-01-12 07:05:14 +00004794 case 228:
4795#line 2235 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004796 {
4797 char *End = UnEscapeLexed((yyvsp[-2].StrVal), true);
4798 std::string AsmStr = std::string((yyvsp[-2].StrVal), End);
4799 End = UnEscapeLexed((yyvsp[0].StrVal), true);
4800 std::string Constraints = std::string((yyvsp[0].StrVal), End);
4801 (yyval.ValIDVal) = ValID::createInlineAsm(AsmStr, Constraints, (yyvsp[-3].BoolVal));
4802 free((yyvsp[-2].StrVal));
4803 free((yyvsp[0].StrVal));
4804 CHECK_FOR_ERROR
4805 ;}
4806 break;
4807
Reid Spencera54b7cb2007-01-12 07:05:14 +00004808 case 229:
4809#line 2249 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004810 { // Is it an integer reference...?
4811 (yyval.ValIDVal) = ValID::create((yyvsp[0].SIntVal));
4812 CHECK_FOR_ERROR
4813 ;}
4814 break;
4815
Reid Spencera54b7cb2007-01-12 07:05:14 +00004816 case 230:
4817#line 2253 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004818 { // Is it a named reference...?
4819 (yyval.ValIDVal) = ValID::create((yyvsp[0].StrVal));
4820 CHECK_FOR_ERROR
4821 ;}
4822 break;
4823
Reid Spencera54b7cb2007-01-12 07:05:14 +00004824 case 233:
4825#line 2265 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004826 {
Reid Spencer14310612006-12-31 05:40:51 +00004827 if (!UpRefs.empty())
4828 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
4829 (yyval.ValueVal) = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
4830 delete (yyvsp[-1].TypeVal);
Reid Spencer21be8652006-10-22 07:03:43 +00004831 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004832 ;}
4833 break;
4834
Reid Spencera54b7cb2007-01-12 07:05:14 +00004835 case 234:
4836#line 2274 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00004837 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004838 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004839 CHECK_FOR_ERROR
4840 ;}
4841 break;
4842
Reid Spencera54b7cb2007-01-12 07:05:14 +00004843 case 235:
4844#line 2278 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004845 { // Do not allow functions with 0 basic blocks
4846 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004847 CHECK_FOR_ERROR
4848 ;}
4849 break;
4850
Reid Spencera54b7cb2007-01-12 07:05:14 +00004851 case 236:
4852#line 2287 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004853 {
4854 setValueName((yyvsp[0].TermInstVal), (yyvsp[-1].StrVal));
4855 CHECK_FOR_ERROR
4856 InsertValue((yyvsp[0].TermInstVal));
4857
4858 (yyvsp[-2].BasicBlockVal)->getInstList().push_back((yyvsp[0].TermInstVal));
4859 InsertValue((yyvsp[-2].BasicBlockVal));
4860 (yyval.BasicBlockVal) = (yyvsp[-2].BasicBlockVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004861 CHECK_FOR_ERROR
4862 ;}
4863 break;
4864
Reid Spencera54b7cb2007-01-12 07:05:14 +00004865 case 237:
4866#line 2298 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004867 {
4868 if (CastInst *CI1 = dyn_cast<CastInst>((yyvsp[0].InstVal)))
4869 if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0)))
4870 if (CI2->getParent() == 0)
4871 (yyvsp[-1].BasicBlockVal)->getInstList().push_back(CI2);
4872 (yyvsp[-1].BasicBlockVal)->getInstList().push_back((yyvsp[0].InstVal));
4873 (yyval.BasicBlockVal) = (yyvsp[-1].BasicBlockVal);
4874 CHECK_FOR_ERROR
4875 ;}
4876 break;
4877
Reid Spencera54b7cb2007-01-12 07:05:14 +00004878 case 238:
4879#line 2307 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004880 {
4881 (yyval.BasicBlockVal) = getBBVal(ValID::create((int)CurFun.NextBBNum++), true);
4882 CHECK_FOR_ERROR
4883
4884 // Make sure to move the basic block to the correct location in the
4885 // function, instead of leaving it inserted wherever it was first
4886 // referenced.
4887 Function::BasicBlockListType &BBL =
4888 CurFun.CurrentFunction->getBasicBlockList();
4889 BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
4890 CHECK_FOR_ERROR
4891 ;}
4892 break;
4893
Reid Spencera54b7cb2007-01-12 07:05:14 +00004894 case 239:
4895#line 2319 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004896 {
4897 (yyval.BasicBlockVal) = getBBVal(ValID::create((yyvsp[0].StrVal)), true);
4898 CHECK_FOR_ERROR
4899
4900 // Make sure to move the basic block to the correct location in the
4901 // function, instead of leaving it inserted wherever it was first
4902 // referenced.
4903 Function::BasicBlockListType &BBL =
4904 CurFun.CurrentFunction->getBasicBlockList();
4905 BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
Reid Spencer3822ff52006-11-08 06:47:33 +00004906 CHECK_FOR_ERROR
4907 ;}
4908 break;
4909
Reid Spencera54b7cb2007-01-12 07:05:14 +00004910 case 240:
4911#line 2332 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004912 { // Return with a result...
4913 (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal));
Reid Spencer3822ff52006-11-08 06:47:33 +00004914 CHECK_FOR_ERROR
4915 ;}
4916 break;
4917
Reid Spencera54b7cb2007-01-12 07:05:14 +00004918 case 241:
4919#line 2336 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004920 { // Return with no result...
4921 (yyval.TermInstVal) = new ReturnInst();
Reid Spencer3822ff52006-11-08 06:47:33 +00004922 CHECK_FOR_ERROR
4923 ;}
4924 break;
4925
Reid Spencera54b7cb2007-01-12 07:05:14 +00004926 case 242:
4927#line 2340 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004928 { // Unconditional Branch...
4929 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
Reid Spencer3822ff52006-11-08 06:47:33 +00004930 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00004931 (yyval.TermInstVal) = new BranchInst(tmpBB);
Reid Spencer3822ff52006-11-08 06:47:33 +00004932 ;}
4933 break;
4934
Reid Spencera54b7cb2007-01-12 07:05:14 +00004935 case 243:
4936#line 2345 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004937 {
4938 BasicBlock* tmpBBA = getBBVal((yyvsp[-3].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004939 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00004940 BasicBlock* tmpBBB = getBBVal((yyvsp[0].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004941 CHECK_FOR_ERROR
Reid Spencer4fe16d62007-01-11 18:21:29 +00004942 Value* tmpVal = getVal(Type::Int1Ty, (yyvsp[-6].ValIDVal));
Reid Spencere4d87aa2006-12-23 06:05:41 +00004943 CHECK_FOR_ERROR
4944 (yyval.TermInstVal) = new BranchInst(tmpBBA, tmpBBB, tmpVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004945 ;}
4946 break;
4947
Reid Spencera54b7cb2007-01-12 07:05:14 +00004948 case 244:
4949#line 2354 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004950 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004951 Value* tmpVal = getVal((yyvsp[-7].PrimType), (yyvsp[-6].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00004952 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00004953 BasicBlock* tmpBB = getBBVal((yyvsp[-3].ValIDVal));
4954 CHECK_FOR_ERROR
4955 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[-1].JumpTable)->size());
4956 (yyval.TermInstVal) = S;
Andrew Lenharth6353e052006-12-08 18:07:09 +00004957
Reid Spencere4d87aa2006-12-23 06:05:41 +00004958 std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = (yyvsp[-1].JumpTable)->begin(),
4959 E = (yyvsp[-1].JumpTable)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004960 for (; I != E; ++I) {
4961 if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
4962 S->addCase(CI, I->second);
4963 else
Reid Spencer61c83e02006-08-18 08:43:06 +00004964 GEN_ERROR("Switch case is constant, but not a simple integer!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004965 }
Reid Spencere4d87aa2006-12-23 06:05:41 +00004966 delete (yyvsp[-1].JumpTable);
Reid Spencer61c83e02006-08-18 08:43:06 +00004967 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004968 ;}
4969 break;
4970
Reid Spencera54b7cb2007-01-12 07:05:14 +00004971 case 245:
4972#line 2373 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004973 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004974 Value* tmpVal = getVal((yyvsp[-6].PrimType), (yyvsp[-5].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00004975 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00004976 BasicBlock* tmpBB = getBBVal((yyvsp[-2].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00004977 CHECK_FOR_ERROR
4978 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
Reid Spencere4d87aa2006-12-23 06:05:41 +00004979 (yyval.TermInstVal) = S;
Reid Spencer61c83e02006-08-18 08:43:06 +00004980 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004981 ;}
4982 break;
4983
Reid Spencera54b7cb2007-01-12 07:05:14 +00004984 case 246:
4985#line 2383 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004986 {
Reid Spencer3822ff52006-11-08 06:47:33 +00004987
Reid Spencer14310612006-12-31 05:40:51 +00004988 // Handle the short syntax
4989 const PointerType *PFTy = 0;
4990 const FunctionType *Ty = 0;
Reid Spencer218ded22007-01-05 17:07:23 +00004991 if (!(PFTy = dyn_cast<PointerType>((yyvsp[-11].TypeVal)->get())) ||
Reid Spencer68a24bd2005-08-27 18:50:39 +00004992 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
4993 // Pull out the types of all of the arguments...
4994 std::vector<const Type*> ParamTypes;
Reid Spencer14310612006-12-31 05:40:51 +00004995 FunctionType::ParamAttrsList ParamAttrs;
Reid Spencer218ded22007-01-05 17:07:23 +00004996 ParamAttrs.push_back((yyvsp[-6].ParamAttrs));
4997 for (ValueRefList::iterator I = (yyvsp[-8].ValueRefList)->begin(), E = (yyvsp[-8].ValueRefList)->end(); I != E; ++I) {
Reid Spencer14310612006-12-31 05:40:51 +00004998 const Type *Ty = I->Val->getType();
4999 if (Ty == Type::VoidTy)
5000 GEN_ERROR("Short call syntax cannot be used with varargs");
5001 ParamTypes.push_back(Ty);
5002 ParamAttrs.push_back(I->Attrs);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005003 }
5004
Reid Spencer218ded22007-01-05 17:07:23 +00005005 Ty = FunctionType::get((yyvsp[-11].TypeVal)->get(), ParamTypes, false, ParamAttrs);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005006 PFTy = PointerType::get(Ty);
5007 }
5008
Reid Spencer218ded22007-01-05 17:07:23 +00005009 Value *V = getVal(PFTy, (yyvsp[-10].ValIDVal)); // Get the function we're calling...
Andrew Lenharth6353e052006-12-08 18:07:09 +00005010 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005011 BasicBlock *Normal = getBBVal((yyvsp[-3].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005012 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005013 BasicBlock *Except = getBBVal((yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005014 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00005015
Reid Spencer14310612006-12-31 05:40:51 +00005016 // Check the arguments
5017 ValueList Args;
Reid Spencer218ded22007-01-05 17:07:23 +00005018 if ((yyvsp[-8].ValueRefList)->empty()) { // Has no arguments?
Reid Spencer14310612006-12-31 05:40:51 +00005019 // Make sure no arguments is a good thing!
5020 if (Ty->getNumParams() != 0)
5021 GEN_ERROR("No arguments passed to a function that "
5022 "expects arguments!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005023 } else { // Has arguments?
5024 // Loop through FunctionType's arguments and ensure they are specified
5025 // correctly!
Reid Spencer68a24bd2005-08-27 18:50:39 +00005026 FunctionType::param_iterator I = Ty->param_begin();
5027 FunctionType::param_iterator E = Ty->param_end();
Reid Spencer218ded22007-01-05 17:07:23 +00005028 ValueRefList::iterator ArgI = (yyvsp[-8].ValueRefList)->begin(), ArgE = (yyvsp[-8].ValueRefList)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005029
Reid Spencer14310612006-12-31 05:40:51 +00005030 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
5031 if (ArgI->Val->getType() != *I)
5032 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
Reid Spencera132e042006-12-03 05:46:11 +00005033 (*I)->getDescription() + "'!");
Reid Spencer14310612006-12-31 05:40:51 +00005034 Args.push_back(ArgI->Val);
5035 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00005036
Reid Spencer14310612006-12-31 05:40:51 +00005037 if (Ty->isVarArg()) {
5038 if (I == E)
5039 for (; ArgI != ArgE; ++ArgI)
5040 Args.push_back(ArgI->Val); // push the remaining varargs
5041 } else if (I != E || ArgI != ArgE)
Reid Spencer61c83e02006-08-18 08:43:06 +00005042 GEN_ERROR("Invalid number of parameters detected!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005043 }
Reid Spencer14310612006-12-31 05:40:51 +00005044
5045 // Create the InvokeInst
5046 InvokeInst *II = new InvokeInst(V, Normal, Except, Args);
Reid Spencer218ded22007-01-05 17:07:23 +00005047 II->setCallingConv((yyvsp[-12].UIntVal));
Reid Spencer14310612006-12-31 05:40:51 +00005048 (yyval.TermInstVal) = II;
Reid Spencer218ded22007-01-05 17:07:23 +00005049 delete (yyvsp[-8].ValueRefList);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005050 CHECK_FOR_ERROR
5051 ;}
5052 break;
5053
Reid Spencera54b7cb2007-01-12 07:05:14 +00005054 case 247:
5055#line 2449 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005056 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005057 (yyval.TermInstVal) = new UnwindInst();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005058 CHECK_FOR_ERROR
5059 ;}
5060 break;
5061
Reid Spencera54b7cb2007-01-12 07:05:14 +00005062 case 248:
5063#line 2453 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005064 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005065 (yyval.TermInstVal) = new UnreachableInst();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005066 CHECK_FOR_ERROR
5067 ;}
5068 break;
5069
Reid Spencera54b7cb2007-01-12 07:05:14 +00005070 case 249:
5071#line 2460 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005072 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005073 (yyval.JumpTable) = (yyvsp[-5].JumpTable);
5074 Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005075 CHECK_FOR_ERROR
5076 if (V == 0)
5077 GEN_ERROR("May only switch on a constant pool value!");
5078
Reid Spencere4d87aa2006-12-23 06:05:41 +00005079 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005080 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005081 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005082 ;}
5083 break;
5084
Reid Spencera54b7cb2007-01-12 07:05:14 +00005085 case 250:
5086#line 2471 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005087 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005088 (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
5089 Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005090 CHECK_FOR_ERROR
5091
5092 if (V == 0)
5093 GEN_ERROR("May only switch on a constant pool value!");
5094
Reid Spencere4d87aa2006-12-23 06:05:41 +00005095 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005096 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005097 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005098 ;}
5099 break;
5100
Reid Spencera54b7cb2007-01-12 07:05:14 +00005101 case 251:
5102#line 2484 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005103 {
5104 // Is this definition named?? if so, assign the name...
Reid Spencere4d87aa2006-12-23 06:05:41 +00005105 setValueName((yyvsp[0].InstVal), (yyvsp[-1].StrVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005106 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005107 InsertValue((yyvsp[0].InstVal));
5108 (yyval.InstVal) = (yyvsp[0].InstVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005109 CHECK_FOR_ERROR
5110;}
5111 break;
5112
Reid Spencera54b7cb2007-01-12 07:05:14 +00005113 case 252:
5114#line 2493 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005115 { // Used for PHI nodes
Reid Spencer14310612006-12-31 05:40:51 +00005116 if (!UpRefs.empty())
5117 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-5].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005118 (yyval.PHIList) = new std::list<std::pair<Value*, BasicBlock*> >();
5119 Value* tmpVal = getVal(*(yyvsp[-5].TypeVal), (yyvsp[-3].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005120 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005121 BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005122 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005123 (yyval.PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
5124 delete (yyvsp[-5].TypeVal);
5125 ;}
5126 break;
5127
Reid Spencera54b7cb2007-01-12 07:05:14 +00005128 case 253:
5129#line 2504 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005130 {
5131 (yyval.PHIList) = (yyvsp[-6].PHIList);
5132 Value* tmpVal = getVal((yyvsp[-6].PHIList)->front().first->getType(), (yyvsp[-3].ValIDVal));
5133 CHECK_FOR_ERROR
5134 BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
5135 CHECK_FOR_ERROR
5136 (yyvsp[-6].PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
5137 ;}
5138 break;
5139
Reid Spencera54b7cb2007-01-12 07:05:14 +00005140 case 254:
5141#line 2514 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00005142 {
5143 if (!UpRefs.empty())
5144 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
5145 // Used for call and invoke instructions
5146 (yyval.ValueRefList) = new ValueRefList();
5147 ValueRefListEntry E; E.Attrs = (yyvsp[0].ParamAttrs); E.Val = getVal((yyvsp[-2].TypeVal)->get(), (yyvsp[-1].ValIDVal));
5148 (yyval.ValueRefList)->push_back(E);
Reid Spencere4d87aa2006-12-23 06:05:41 +00005149 ;}
5150 break;
5151
Reid Spencera54b7cb2007-01-12 07:05:14 +00005152 case 255:
5153#line 2522 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005154 {
Reid Spencer14310612006-12-31 05:40:51 +00005155 if (!UpRefs.empty())
5156 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
5157 (yyval.ValueRefList) = (yyvsp[-4].ValueRefList);
5158 ValueRefListEntry E; E.Attrs = (yyvsp[0].ParamAttrs); E.Val = getVal((yyvsp[-2].TypeVal)->get(), (yyvsp[-1].ValIDVal));
5159 (yyval.ValueRefList)->push_back(E);
Reid Spencere4d87aa2006-12-23 06:05:41 +00005160 CHECK_FOR_ERROR
5161 ;}
5162 break;
5163
Reid Spencera54b7cb2007-01-12 07:05:14 +00005164 case 256:
5165#line 2530 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00005166 { (yyval.ValueRefList) = new ValueRefList(); ;}
Reid Spencere4d87aa2006-12-23 06:05:41 +00005167 break;
5168
Reid Spencera54b7cb2007-01-12 07:05:14 +00005169 case 257:
5170#line 2533 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00005171 { (yyval.ValueList) = new std::vector<Value*>(); ;}
5172 break;
5173
Reid Spencera54b7cb2007-01-12 07:05:14 +00005174 case 258:
5175#line 2534 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00005176 {
5177 (yyval.ValueList) = (yyvsp[-2].ValueList);
5178 (yyval.ValueList)->push_back((yyvsp[0].ValueVal));
5179 CHECK_FOR_ERROR
5180 ;}
5181 break;
5182
Reid Spencera54b7cb2007-01-12 07:05:14 +00005183 case 259:
5184#line 2541 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005185 {
5186 (yyval.BoolVal) = true;
5187 CHECK_FOR_ERROR
5188 ;}
5189 break;
5190
Reid Spencera54b7cb2007-01-12 07:05:14 +00005191 case 260:
5192#line 2545 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005193 {
5194 (yyval.BoolVal) = false;
5195 CHECK_FOR_ERROR
Andrew Lenharth6353e052006-12-08 18:07:09 +00005196 ;}
5197 break;
5198
Reid Spencera54b7cb2007-01-12 07:05:14 +00005199 case 261:
5200#line 2550 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005201 {
Reid Spencer14310612006-12-31 05:40:51 +00005202 if (!UpRefs.empty())
5203 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005204 if (!(*(yyvsp[-3].TypeVal))->isInteger() && !(*(yyvsp[-3].TypeVal))->isFloatingPoint() &&
5205 !isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
5206 GEN_ERROR(
5207 "Arithmetic operator requires integer, FP, or packed operands!");
5208 if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()) &&
5209 ((yyvsp[-4].BinaryOpVal) == Instruction::URem ||
5210 (yyvsp[-4].BinaryOpVal) == Instruction::SRem ||
5211 (yyvsp[-4].BinaryOpVal) == Instruction::FRem))
5212 GEN_ERROR("U/S/FRem not supported on packed types!");
5213 Value* val1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005214 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005215 Value* val2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005216 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005217 (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), val1, val2);
5218 if ((yyval.InstVal) == 0)
5219 GEN_ERROR("binary operator returned null!");
5220 delete (yyvsp[-3].TypeVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005221 ;}
5222 break;
5223
Reid Spencera54b7cb2007-01-12 07:05:14 +00005224 case 262:
5225#line 2571 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005226 {
Reid Spencer14310612006-12-31 05:40:51 +00005227 if (!UpRefs.empty())
5228 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005229 if (!(*(yyvsp[-3].TypeVal))->isIntegral()) {
5230 if (!isa<PackedType>((yyvsp[-3].TypeVal)->get()) ||
5231 !cast<PackedType>((yyvsp[-3].TypeVal)->get())->getElementType()->isIntegral())
5232 GEN_ERROR("Logical operator requires integral operands!");
5233 }
5234 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
5235 CHECK_FOR_ERROR
5236 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
5237 CHECK_FOR_ERROR
5238 (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), tmpVal1, tmpVal2);
5239 if ((yyval.InstVal) == 0)
5240 GEN_ERROR("binary operator returned null!");
5241 delete (yyvsp[-3].TypeVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005242 ;}
5243 break;
5244
Reid Spencera54b7cb2007-01-12 07:05:14 +00005245 case 263:
5246#line 2588 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005247 {
Reid Spencer14310612006-12-31 05:40:51 +00005248 if (!UpRefs.empty())
5249 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
Reid Spencerac4a1dd2007-01-04 02:57:52 +00005250 if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
5251 GEN_ERROR("Packed types not supported by icmp instruction");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005252 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005253 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005254 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005255 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005256 (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].IPredicate), tmpVal1, tmpVal2);
5257 if ((yyval.InstVal) == 0)
Andrew Lenharth6353e052006-12-08 18:07:09 +00005258 GEN_ERROR("icmp operator returned null!");
5259 ;}
5260 break;
5261
Reid Spencera54b7cb2007-01-12 07:05:14 +00005262 case 264:
5263#line 2601 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005264 {
Reid Spencer14310612006-12-31 05:40:51 +00005265 if (!UpRefs.empty())
5266 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
Reid Spencerac4a1dd2007-01-04 02:57:52 +00005267 if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
5268 GEN_ERROR("Packed types not supported by fcmp instruction");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005269 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005270 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005271 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005272 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005273 (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].FPredicate), tmpVal1, tmpVal2);
5274 if ((yyval.InstVal) == 0)
Andrew Lenharth6353e052006-12-08 18:07:09 +00005275 GEN_ERROR("fcmp operator returned null!");
5276 ;}
5277 break;
5278
Reid Spencera54b7cb2007-01-12 07:05:14 +00005279 case 265:
5280#line 2614 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005281 {
5282 cerr << "WARNING: Use of eliminated 'not' instruction:"
5283 << " Replacing with 'xor'.\n";
5284
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00005285 Value *Ones = ConstantInt::getAllOnesValue((yyvsp[0].ValueVal)->getType());
Andrew Lenharth6353e052006-12-08 18:07:09 +00005286 if (Ones == 0)
5287 GEN_ERROR("Expected integral type for not instruction!");
5288
Reid Spencere4d87aa2006-12-23 06:05:41 +00005289 (yyval.InstVal) = BinaryOperator::create(Instruction::Xor, (yyvsp[0].ValueVal), Ones);
5290 if ((yyval.InstVal) == 0)
Andrew Lenharth6353e052006-12-08 18:07:09 +00005291 GEN_ERROR("Could not create a xor instruction!");
5292 CHECK_FOR_ERROR
5293 ;}
5294 break;
5295
Reid Spencera54b7cb2007-01-12 07:05:14 +00005296 case 266:
5297#line 2627 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005298 {
Reid Spencer14310612006-12-31 05:40:51 +00005299 if ((yyvsp[0].ValueVal)->getType() != Type::Int8Ty)
5300 GEN_ERROR("Shift amount must be i8 type!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005301 if (!(yyvsp[-2].ValueVal)->getType()->isInteger())
Andrew Lenharth6353e052006-12-08 18:07:09 +00005302 GEN_ERROR("Shift constant expression requires integer operand!");
5303 CHECK_FOR_ERROR;
Reid Spencere4d87aa2006-12-23 06:05:41 +00005304 (yyval.InstVal) = new ShiftInst((yyvsp[-3].OtherOpVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005305 CHECK_FOR_ERROR
5306 ;}
5307 break;
5308
Reid Spencera54b7cb2007-01-12 07:05:14 +00005309 case 267:
5310#line 2636 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005311 {
Reid Spencer14310612006-12-31 05:40:51 +00005312 if (!UpRefs.empty())
5313 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005314 Value* Val = (yyvsp[-2].ValueVal);
5315 const Type* Ty = (yyvsp[0].TypeVal)->get();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005316 if (!Val->getType()->isFirstClassType())
5317 GEN_ERROR("cast from a non-primitive type: '" +
5318 Val->getType()->getDescription() + "'!");
5319 if (!Ty->isFirstClassType())
5320 GEN_ERROR("cast to a non-primitive type: '" + Ty->getDescription() +"'!");
Reid Spencer14310612006-12-31 05:40:51 +00005321 (yyval.InstVal) = CastInst::create((yyvsp[-3].CastOpVal), Val, (yyvsp[0].TypeVal)->get());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005322 delete (yyvsp[0].TypeVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005323 ;}
5324 break;
5325
Reid Spencera54b7cb2007-01-12 07:05:14 +00005326 case 268:
5327#line 2649 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005328 {
Reid Spencer4fe16d62007-01-11 18:21:29 +00005329 if ((yyvsp[-4].ValueVal)->getType() != Type::Int1Ty)
Andrew Lenharth6353e052006-12-08 18:07:09 +00005330 GEN_ERROR("select condition must be boolean!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005331 if ((yyvsp[-2].ValueVal)->getType() != (yyvsp[0].ValueVal)->getType())
Andrew Lenharth6353e052006-12-08 18:07:09 +00005332 GEN_ERROR("select value types should match!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005333 (yyval.InstVal) = new SelectInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005334 CHECK_FOR_ERROR
5335 ;}
5336 break;
5337
Reid Spencera54b7cb2007-01-12 07:05:14 +00005338 case 269:
5339#line 2657 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005340 {
Reid Spencer14310612006-12-31 05:40:51 +00005341 if (!UpRefs.empty())
5342 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005343 (yyval.InstVal) = new VAArgInst((yyvsp[-2].ValueVal), *(yyvsp[0].TypeVal));
5344 delete (yyvsp[0].TypeVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005345 CHECK_FOR_ERROR
5346 ;}
5347 break;
5348
Reid Spencera54b7cb2007-01-12 07:05:14 +00005349 case 270:
5350#line 2664 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005351 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005352 if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Andrew Lenharth6353e052006-12-08 18:07:09 +00005353 GEN_ERROR("Invalid extractelement operands!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005354 (yyval.InstVal) = new ExtractElementInst((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005355 CHECK_FOR_ERROR
5356 ;}
5357 break;
5358
Reid Spencera54b7cb2007-01-12 07:05:14 +00005359 case 271:
5360#line 2670 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005361 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005362 if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Andrew Lenharth6353e052006-12-08 18:07:09 +00005363 GEN_ERROR("Invalid insertelement operands!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005364 (yyval.InstVal) = new InsertElementInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005365 CHECK_FOR_ERROR
5366 ;}
5367 break;
5368
Reid Spencera54b7cb2007-01-12 07:05:14 +00005369 case 272:
5370#line 2676 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005371 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005372 if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Andrew Lenharth6353e052006-12-08 18:07:09 +00005373 GEN_ERROR("Invalid shufflevector operands!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005374 (yyval.InstVal) = new ShuffleVectorInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005375 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005376 ;}
5377 break;
5378
Reid Spencera54b7cb2007-01-12 07:05:14 +00005379 case 273:
5380#line 2682 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005381 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005382 const Type *Ty = (yyvsp[0].PHIList)->front().first->getType();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005383 if (!Ty->isFirstClassType())
5384 GEN_ERROR("PHI node operands must be of first class type!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005385 (yyval.InstVal) = new PHINode(Ty);
5386 ((PHINode*)(yyval.InstVal))->reserveOperandSpace((yyvsp[0].PHIList)->size());
5387 while ((yyvsp[0].PHIList)->begin() != (yyvsp[0].PHIList)->end()) {
5388 if ((yyvsp[0].PHIList)->front().first->getType() != Ty)
Andrew Lenharth6353e052006-12-08 18:07:09 +00005389 GEN_ERROR("All elements of a PHI node must be of the same type!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005390 cast<PHINode>((yyval.InstVal))->addIncoming((yyvsp[0].PHIList)->front().first, (yyvsp[0].PHIList)->front().second);
5391 (yyvsp[0].PHIList)->pop_front();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005392 }
Reid Spencere4d87aa2006-12-23 06:05:41 +00005393 delete (yyvsp[0].PHIList); // Free the list...
Reid Spencer61c83e02006-08-18 08:43:06 +00005394 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005395 ;}
5396 break;
5397
Reid Spencera54b7cb2007-01-12 07:05:14 +00005398 case 274:
5399#line 2698 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005400 {
Reid Spencer14310612006-12-31 05:40:51 +00005401
5402 // Handle the short syntax
Andrew Lenharth6353e052006-12-08 18:07:09 +00005403 const PointerType *PFTy = 0;
5404 const FunctionType *Ty = 0;
Reid Spencer218ded22007-01-05 17:07:23 +00005405 if (!(PFTy = dyn_cast<PointerType>((yyvsp[-5].TypeVal)->get())) ||
Andrew Lenharth6353e052006-12-08 18:07:09 +00005406 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
5407 // Pull out the types of all of the arguments...
5408 std::vector<const Type*> ParamTypes;
Reid Spencer14310612006-12-31 05:40:51 +00005409 FunctionType::ParamAttrsList ParamAttrs;
Reid Spencer218ded22007-01-05 17:07:23 +00005410 ParamAttrs.push_back((yyvsp[0].ParamAttrs));
5411 for (ValueRefList::iterator I = (yyvsp[-2].ValueRefList)->begin(), E = (yyvsp[-2].ValueRefList)->end(); I != E; ++I) {
Reid Spencer14310612006-12-31 05:40:51 +00005412 const Type *Ty = I->Val->getType();
5413 if (Ty == Type::VoidTy)
5414 GEN_ERROR("Short call syntax cannot be used with varargs");
5415 ParamTypes.push_back(Ty);
5416 ParamAttrs.push_back(I->Attrs);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005417 }
5418
Reid Spencer218ded22007-01-05 17:07:23 +00005419 Ty = FunctionType::get((yyvsp[-5].TypeVal)->get(), ParamTypes, false, ParamAttrs);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005420 PFTy = PointerType::get(Ty);
5421 }
5422
Reid Spencer218ded22007-01-05 17:07:23 +00005423 Value *V = getVal(PFTy, (yyvsp[-4].ValIDVal)); // Get the function we're calling...
Andrew Lenharth6353e052006-12-08 18:07:09 +00005424 CHECK_FOR_ERROR
5425
Reid Spencer14310612006-12-31 05:40:51 +00005426 // Check the arguments
5427 ValueList Args;
Reid Spencer218ded22007-01-05 17:07:23 +00005428 if ((yyvsp[-2].ValueRefList)->empty()) { // Has no arguments?
Andrew Lenharth6353e052006-12-08 18:07:09 +00005429 // Make sure no arguments is a good thing!
5430 if (Ty->getNumParams() != 0)
5431 GEN_ERROR("No arguments passed to a function that "
5432 "expects arguments!");
Andrew Lenharth6353e052006-12-08 18:07:09 +00005433 } else { // Has arguments?
5434 // Loop through FunctionType's arguments and ensure they are specified
5435 // correctly!
5436 //
5437 FunctionType::param_iterator I = Ty->param_begin();
5438 FunctionType::param_iterator E = Ty->param_end();
Reid Spencer218ded22007-01-05 17:07:23 +00005439 ValueRefList::iterator ArgI = (yyvsp[-2].ValueRefList)->begin(), ArgE = (yyvsp[-2].ValueRefList)->end();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005440
Reid Spencer14310612006-12-31 05:40:51 +00005441 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
5442 if (ArgI->Val->getType() != *I)
5443 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
Andrew Lenharth6353e052006-12-08 18:07:09 +00005444 (*I)->getDescription() + "'!");
Reid Spencer14310612006-12-31 05:40:51 +00005445 Args.push_back(ArgI->Val);
5446 }
5447 if (Ty->isVarArg()) {
5448 if (I == E)
5449 for (; ArgI != ArgE; ++ArgI)
5450 Args.push_back(ArgI->Val); // push the remaining varargs
5451 } else if (I != E || ArgI != ArgE)
Andrew Lenharth6353e052006-12-08 18:07:09 +00005452 GEN_ERROR("Invalid number of parameters detected!");
Andrew Lenharth6353e052006-12-08 18:07:09 +00005453 }
Reid Spencer14310612006-12-31 05:40:51 +00005454 // Create the call node
5455 CallInst *CI = new CallInst(V, Args);
Reid Spencer218ded22007-01-05 17:07:23 +00005456 CI->setTailCall((yyvsp[-7].BoolVal));
5457 CI->setCallingConv((yyvsp[-6].UIntVal));
Reid Spencer14310612006-12-31 05:40:51 +00005458 (yyval.InstVal) = CI;
Reid Spencer218ded22007-01-05 17:07:23 +00005459 delete (yyvsp[-2].ValueRefList);
Reid Spencere4d87aa2006-12-23 06:05:41 +00005460 CHECK_FOR_ERROR
5461 ;}
5462 break;
5463
Reid Spencera54b7cb2007-01-12 07:05:14 +00005464 case 275:
5465#line 2760 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005466 {
5467 (yyval.InstVal) = (yyvsp[0].InstVal);
5468 CHECK_FOR_ERROR
5469 ;}
5470 break;
5471
Reid Spencera54b7cb2007-01-12 07:05:14 +00005472 case 276:
5473#line 2765 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005474 {
5475 (yyval.BoolVal) = true;
5476 CHECK_FOR_ERROR
5477 ;}
5478 break;
5479
Reid Spencera54b7cb2007-01-12 07:05:14 +00005480 case 277:
5481#line 2769 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005482 {
5483 (yyval.BoolVal) = false;
5484 CHECK_FOR_ERROR
5485 ;}
5486 break;
5487
Reid Spencera54b7cb2007-01-12 07:05:14 +00005488 case 278:
5489#line 2776 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005490 {
Reid Spencer14310612006-12-31 05:40:51 +00005491 if (!UpRefs.empty())
5492 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005493 (yyval.InstVal) = new MallocInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
5494 delete (yyvsp[-1].TypeVal);
5495 CHECK_FOR_ERROR
5496 ;}
5497 break;
5498
Reid Spencera54b7cb2007-01-12 07:05:14 +00005499 case 279:
5500#line 2783 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005501 {
Reid Spencer14310612006-12-31 05:40:51 +00005502 if (!UpRefs.empty())
5503 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005504 Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
5505 CHECK_FOR_ERROR
5506 (yyval.InstVal) = new MallocInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
5507 delete (yyvsp[-4].TypeVal);
5508 ;}
5509 break;
5510
Reid Spencera54b7cb2007-01-12 07:05:14 +00005511 case 280:
5512#line 2791 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005513 {
Reid Spencer14310612006-12-31 05:40:51 +00005514 if (!UpRefs.empty())
5515 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005516 (yyval.InstVal) = new AllocaInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
5517 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005518 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005519 ;}
5520 break;
5521
Reid Spencera54b7cb2007-01-12 07:05:14 +00005522 case 281:
5523#line 2798 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005524 {
Reid Spencer14310612006-12-31 05:40:51 +00005525 if (!UpRefs.empty())
5526 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005527 Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005528 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005529 (yyval.InstVal) = new AllocaInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
5530 delete (yyvsp[-4].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005531 ;}
5532 break;
5533
Reid Spencera54b7cb2007-01-12 07:05:14 +00005534 case 282:
5535#line 2806 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005536 {
5537 if (!isa<PointerType>((yyvsp[0].ValueVal)->getType()))
5538 GEN_ERROR("Trying to free nonpointer type " +
5539 (yyvsp[0].ValueVal)->getType()->getDescription() + "!");
5540 (yyval.InstVal) = new FreeInst((yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005541 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005542 ;}
5543 break;
5544
Reid Spencera54b7cb2007-01-12 07:05:14 +00005545 case 283:
5546#line 2814 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005547 {
Reid Spencer14310612006-12-31 05:40:51 +00005548 if (!UpRefs.empty())
5549 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005550 if (!isa<PointerType>((yyvsp[-1].TypeVal)->get()))
5551 GEN_ERROR("Can't load from nonpointer type: " +
5552 (*(yyvsp[-1].TypeVal))->getDescription());
5553 if (!cast<PointerType>((yyvsp[-1].TypeVal)->get())->getElementType()->isFirstClassType())
5554 GEN_ERROR("Can't load from pointer of non-first-class type: " +
5555 (*(yyvsp[-1].TypeVal))->getDescription());
5556 Value* tmpVal = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005557 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005558 (yyval.InstVal) = new LoadInst(tmpVal, "", (yyvsp[-3].BoolVal));
5559 delete (yyvsp[-1].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005560 ;}
5561 break;
5562
Reid Spencera54b7cb2007-01-12 07:05:14 +00005563 case 284:
5564#line 2828 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005565 {
Reid Spencer14310612006-12-31 05:40:51 +00005566 if (!UpRefs.empty())
5567 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005568 const PointerType *PT = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
5569 if (!PT)
5570 GEN_ERROR("Can't store to a nonpointer type: " +
5571 (*(yyvsp[-1].TypeVal))->getDescription());
5572 const Type *ElTy = PT->getElementType();
5573 if (ElTy != (yyvsp[-3].ValueVal)->getType())
5574 GEN_ERROR("Can't store '" + (yyvsp[-3].ValueVal)->getType()->getDescription() +
5575 "' into space of type '" + ElTy->getDescription() + "'!");
5576
5577 Value* tmpVal = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005578 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005579 (yyval.InstVal) = new StoreInst((yyvsp[-3].ValueVal), tmpVal, (yyvsp[-5].BoolVal));
5580 delete (yyvsp[-1].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005581 ;}
5582 break;
5583
Reid Spencera54b7cb2007-01-12 07:05:14 +00005584 case 285:
5585#line 2845 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005586 {
Reid Spencer14310612006-12-31 05:40:51 +00005587 if (!UpRefs.empty())
5588 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005589 if (!isa<PointerType>((yyvsp[-2].TypeVal)->get()))
Reid Spencer61c83e02006-08-18 08:43:06 +00005590 GEN_ERROR("getelementptr insn requires pointer operand!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005591
Reid Spencere4d87aa2006-12-23 06:05:41 +00005592 if (!GetElementPtrInst::getIndexedType(*(yyvsp[-2].TypeVal), *(yyvsp[0].ValueList), true))
Reid Spencer61c83e02006-08-18 08:43:06 +00005593 GEN_ERROR("Invalid getelementptr indices for type '" +
Reid Spencere4d87aa2006-12-23 06:05:41 +00005594 (*(yyvsp[-2].TypeVal))->getDescription()+ "'!");
5595 Value* tmpVal = getVal(*(yyvsp[-2].TypeVal), (yyvsp[-1].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005596 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005597 (yyval.InstVal) = new GetElementPtrInst(tmpVal, *(yyvsp[0].ValueList));
5598 delete (yyvsp[-2].TypeVal);
5599 delete (yyvsp[0].ValueList);
Reid Spencer3822ff52006-11-08 06:47:33 +00005600 ;}
5601 break;
5602
5603
Reid Spencere4d87aa2006-12-23 06:05:41 +00005604 default: break;
Reid Spencer3822ff52006-11-08 06:47:33 +00005605 }
5606
Reid Spencere4d87aa2006-12-23 06:05:41 +00005607/* Line 1126 of yacc.c. */
Reid Spencera54b7cb2007-01-12 07:05:14 +00005608#line 5609 "llvmAsmParser.tab.c"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005609
5610 yyvsp -= yylen;
5611 yyssp -= yylen;
5612
5613
Reid Spencer3822ff52006-11-08 06:47:33 +00005614 YY_STACK_PRINT (yyss, yyssp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005615
5616 *++yyvsp = yyval;
5617
5618
Reid Spencer3822ff52006-11-08 06:47:33 +00005619 /* Now `shift' the result of the reduction. Determine what state
5620 that goes to, based on the state we popped back to and the rule
5621 number reduced by. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00005622
5623 yyn = yyr1[yyn];
5624
Reid Spencer3822ff52006-11-08 06:47:33 +00005625 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
5626 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005627 yystate = yytable[yystate];
5628 else
Reid Spencer3822ff52006-11-08 06:47:33 +00005629 yystate = yydefgoto[yyn - YYNTOKENS];
Reid Spencer68a24bd2005-08-27 18:50:39 +00005630
5631 goto yynewstate;
5632
5633
Reid Spencer3822ff52006-11-08 06:47:33 +00005634/*------------------------------------.
5635| yyerrlab -- here on detecting error |
5636`------------------------------------*/
5637yyerrlab:
5638 /* If not already recovering from an error, report this error. */
5639 if (!yyerrstatus)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005640 {
5641 ++yynerrs;
Andrew Lenharth6353e052006-12-08 18:07:09 +00005642#if YYERROR_VERBOSE
5643 yyn = yypact[yystate];
Bill Wendlinge8156192006-12-07 01:30:32 +00005644
Andrew Lenharth6353e052006-12-08 18:07:09 +00005645 if (YYPACT_NINF < yyn && yyn < YYLAST)
5646 {
Andrew Lenharth6353e052006-12-08 18:07:09 +00005647 int yytype = YYTRANSLATE (yychar);
Reid Spencere4d87aa2006-12-23 06:05:41 +00005648 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
5649 YYSIZE_T yysize = yysize0;
5650 YYSIZE_T yysize1;
5651 int yysize_overflow = 0;
5652 char *yymsg = 0;
5653# define YYERROR_VERBOSE_ARGS_MAXIMUM 5
5654 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
Andrew Lenharth6353e052006-12-08 18:07:09 +00005655 int yyx;
5656
Reid Spencere4d87aa2006-12-23 06:05:41 +00005657#if 0
5658 /* This is so xgettext sees the translatable formats that are
5659 constructed on the fly. */
5660 YY_("syntax error, unexpected %s");
5661 YY_("syntax error, unexpected %s, expecting %s");
5662 YY_("syntax error, unexpected %s, expecting %s or %s");
5663 YY_("syntax error, unexpected %s, expecting %s or %s or %s");
5664 YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
5665#endif
5666 char *yyfmt;
5667 char const *yyf;
5668 static char const yyunexpected[] = "syntax error, unexpected %s";
5669 static char const yyexpecting[] = ", expecting %s";
5670 static char const yyor[] = " or %s";
5671 char yyformat[sizeof yyunexpected
5672 + sizeof yyexpecting - 1
5673 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
5674 * (sizeof yyor - 1))];
5675 char const *yyprefix = yyexpecting;
5676
Andrew Lenharth6353e052006-12-08 18:07:09 +00005677 /* Start YYX at -YYN if negative to avoid negative indexes in
5678 YYCHECK. */
5679 int yyxbegin = yyn < 0 ? -yyn : 0;
5680
5681 /* Stay within bounds of both yycheck and yytname. */
5682 int yychecklim = YYLAST - yyn;
5683 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
Reid Spencere4d87aa2006-12-23 06:05:41 +00005684 int yycount = 1;
Andrew Lenharth6353e052006-12-08 18:07:09 +00005685
Reid Spencere4d87aa2006-12-23 06:05:41 +00005686 yyarg[0] = yytname[yytype];
5687 yyfmt = yystpcpy (yyformat, yyunexpected);
5688
Andrew Lenharth6353e052006-12-08 18:07:09 +00005689 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
5690 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
5691 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005692 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
Andrew Lenharth6353e052006-12-08 18:07:09 +00005693 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005694 yycount = 1;
5695 yysize = yysize0;
5696 yyformat[sizeof yyunexpected - 1] = '\0';
Andrew Lenharth6353e052006-12-08 18:07:09 +00005697 break;
5698 }
Reid Spencere4d87aa2006-12-23 06:05:41 +00005699 yyarg[yycount++] = yytname[yyx];
5700 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
5701 yysize_overflow |= yysize1 < yysize;
5702 yysize = yysize1;
5703 yyfmt = yystpcpy (yyfmt, yyprefix);
5704 yyprefix = yyor;
Andrew Lenharth6353e052006-12-08 18:07:09 +00005705 }
Andrew Lenharth6353e052006-12-08 18:07:09 +00005706
Reid Spencere4d87aa2006-12-23 06:05:41 +00005707 yyf = YY_(yyformat);
5708 yysize1 = yysize + yystrlen (yyf);
5709 yysize_overflow |= yysize1 < yysize;
5710 yysize = yysize1;
5711
5712 if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM)
5713 yymsg = (char *) YYSTACK_ALLOC (yysize);
5714 if (yymsg)
5715 {
5716 /* Avoid sprintf, as that infringes on the user's name space.
5717 Don't have undefined behavior even if the translation
5718 produced a string with the wrong number of "%s"s. */
5719 char *yyp = yymsg;
5720 int yyi = 0;
5721 while ((*yyp = *yyf))
Andrew Lenharth6353e052006-12-08 18:07:09 +00005722 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005723 if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
5724 {
5725 yyp += yytnamerr (yyp, yyarg[yyi++]);
5726 yyf += 2;
5727 }
5728 else
5729 {
5730 yyp++;
5731 yyf++;
5732 }
Andrew Lenharth6353e052006-12-08 18:07:09 +00005733 }
5734 yyerror (yymsg);
5735 YYSTACK_FREE (yymsg);
5736 }
5737 else
Reid Spencere4d87aa2006-12-23 06:05:41 +00005738 {
5739 yyerror (YY_("syntax error"));
5740 goto yyexhaustedlab;
5741 }
Andrew Lenharth6353e052006-12-08 18:07:09 +00005742 }
5743 else
5744#endif /* YYERROR_VERBOSE */
Reid Spencere4d87aa2006-12-23 06:05:41 +00005745 yyerror (YY_("syntax error"));
Reid Spencer68a24bd2005-08-27 18:50:39 +00005746 }
5747
Reid Spencer3822ff52006-11-08 06:47:33 +00005748
Reid Spencer68a24bd2005-08-27 18:50:39 +00005749
5750 if (yyerrstatus == 3)
5751 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005752 /* If just tried and failed to reuse look-ahead token after an
Reid Spencer3822ff52006-11-08 06:47:33 +00005753 error, discard it. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00005754
Reid Spencer3822ff52006-11-08 06:47:33 +00005755 if (yychar <= YYEOF)
Andrew Lenharth6353e052006-12-08 18:07:09 +00005756 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005757 /* Return failure if at end of input. */
Reid Spencer3822ff52006-11-08 06:47:33 +00005758 if (yychar == YYEOF)
Reid Spencere4d87aa2006-12-23 06:05:41 +00005759 YYABORT;
Andrew Lenharth6353e052006-12-08 18:07:09 +00005760 }
Reid Spencer3822ff52006-11-08 06:47:33 +00005761 else
5762 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005763 yydestruct ("Error: discarding", yytoken, &yylval);
Reid Spencer3822ff52006-11-08 06:47:33 +00005764 yychar = YYEMPTY;
5765 }
5766 }
5767
Reid Spencere4d87aa2006-12-23 06:05:41 +00005768 /* Else will try to reuse look-ahead token after shifting the error
Reid Spencer3822ff52006-11-08 06:47:33 +00005769 token. */
5770 goto yyerrlab1;
5771
5772
5773/*---------------------------------------------------.
5774| yyerrorlab -- error raised explicitly by YYERROR. |
5775`---------------------------------------------------*/
5776yyerrorlab:
5777
Reid Spencere4d87aa2006-12-23 06:05:41 +00005778 /* Pacify compilers like GCC when the user code never invokes
5779 YYERROR and the label yyerrorlab therefore never appears in user
5780 code. */
Andrew Lenharth6353e052006-12-08 18:07:09 +00005781 if (0)
Reid Spencer3822ff52006-11-08 06:47:33 +00005782 goto yyerrorlab;
5783
Reid Spencere4d87aa2006-12-23 06:05:41 +00005784yyvsp -= yylen;
Andrew Lenharth6353e052006-12-08 18:07:09 +00005785 yyssp -= yylen;
Reid Spencer3822ff52006-11-08 06:47:33 +00005786 yystate = *yyssp;
5787 goto yyerrlab1;
5788
5789
5790/*-------------------------------------------------------------.
5791| yyerrlab1 -- common code for both syntax error and YYERROR. |
5792`-------------------------------------------------------------*/
5793yyerrlab1:
5794 yyerrstatus = 3; /* Each real token shifted decrements this. */
5795
5796 for (;;)
5797 {
5798 yyn = yypact[yystate];
5799 if (yyn != YYPACT_NINF)
5800 {
5801 yyn += YYTERROR;
5802 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
5803 {
5804 yyn = yytable[yyn];
5805 if (0 < yyn)
5806 break;
5807 }
5808 }
5809
5810 /* Pop the current state because it cannot handle the error token. */
5811 if (yyssp == yyss)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005812 YYABORT;
5813
Reid Spencere4d87aa2006-12-23 06:05:41 +00005814
5815 yydestruct ("Error: popping", yystos[yystate], yyvsp);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005816 YYPOPSTACK;
Reid Spencer3822ff52006-11-08 06:47:33 +00005817 yystate = *yyssp;
5818 YY_STACK_PRINT (yyss, yyssp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005819 }
5820
5821 if (yyn == YYFINAL)
5822 YYACCEPT;
5823
Reid Spencer68a24bd2005-08-27 18:50:39 +00005824 *++yyvsp = yylval;
Reid Spencer3822ff52006-11-08 06:47:33 +00005825
5826
Reid Spencere4d87aa2006-12-23 06:05:41 +00005827 /* Shift the error token. */
5828 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
5829
Reid Spencer68a24bd2005-08-27 18:50:39 +00005830 yystate = yyn;
5831 goto yynewstate;
5832
Chris Lattnerf49c1762006-11-08 05:58:47 +00005833
Reid Spencer3822ff52006-11-08 06:47:33 +00005834/*-------------------------------------.
5835| yyacceptlab -- YYACCEPT comes here. |
5836`-------------------------------------*/
5837yyacceptlab:
5838 yyresult = 0;
5839 goto yyreturn;
5840
5841/*-----------------------------------.
5842| yyabortlab -- YYABORT comes here. |
5843`-----------------------------------*/
5844yyabortlab:
5845 yyresult = 1;
5846 goto yyreturn;
5847
5848#ifndef yyoverflow
Reid Spencere4d87aa2006-12-23 06:05:41 +00005849/*-------------------------------------------------.
5850| yyexhaustedlab -- memory exhaustion comes here. |
5851`-------------------------------------------------*/
5852yyexhaustedlab:
5853 yyerror (YY_("memory exhausted"));
Reid Spencer3822ff52006-11-08 06:47:33 +00005854 yyresult = 2;
5855 /* Fall through. */
Chris Lattnerf49c1762006-11-08 05:58:47 +00005856#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00005857
5858yyreturn:
Reid Spencere4d87aa2006-12-23 06:05:41 +00005859 if (yychar != YYEOF && yychar != YYEMPTY)
5860 yydestruct ("Cleanup: discarding lookahead",
5861 yytoken, &yylval);
5862 while (yyssp != yyss)
5863 {
5864 yydestruct ("Cleanup: popping",
5865 yystos[*yyssp], yyvsp);
5866 YYPOPSTACK;
5867 }
Reid Spencer3822ff52006-11-08 06:47:33 +00005868#ifndef yyoverflow
5869 if (yyss != yyssa)
5870 YYSTACK_FREE (yyss);
5871#endif
Andrew Lenharth6353e052006-12-08 18:07:09 +00005872 return yyresult;
Reid Spencer68a24bd2005-08-27 18:50:39 +00005873}
Reid Spencer3822ff52006-11-08 06:47:33 +00005874
5875
Reid Spencera54b7cb2007-01-12 07:05:14 +00005876#line 2862 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer61c83e02006-08-18 08:43:06 +00005877
5878
Reid Spencer14310612006-12-31 05:40:51 +00005879// common code from the two 'RunVMAsmParser' functions
5880static Module* RunParser(Module * M) {
5881
5882 llvmAsmlineno = 1; // Reset the current line number...
5883 CurModule.CurrentModule = M;
5884#if YYDEBUG
5885 yydebug = Debug;
5886#endif
5887
5888 // Check to make sure the parser succeeded
5889 if (yyparse()) {
5890 if (ParserResult)
5891 delete ParserResult;
5892 return 0;
5893 }
5894
5895 // Check to make sure that parsing produced a result
5896 if (!ParserResult)
5897 return 0;
5898
5899 // Reset ParserResult variable while saving its value for the result.
5900 Module *Result = ParserResult;
5901 ParserResult = 0;
5902
5903 return Result;
5904}
5905
Reid Spencer61c83e02006-08-18 08:43:06 +00005906void llvm::GenerateError(const std::string &message, int LineNo) {
5907 if (LineNo == -1) LineNo = llvmAsmlineno;
5908 // TODO: column number in exception
5909 if (TheParseError)
5910 TheParseError->setError(CurFilename, message, LineNo);
5911 TriggerError = 1;
5912}
Reid Spencer68a24bd2005-08-27 18:50:39 +00005913
5914int yyerror(const char *ErrorMsg) {
5915 std::string where
5916 = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename)
5917 + ":" + utostr((unsigned) llvmAsmlineno) + ": ";
5918 std::string errMsg = std::string(ErrorMsg) + "\n" + where + " while reading ";
5919 if (yychar == YYEMPTY || yychar == 0)
5920 errMsg += "end-of-file.";
5921 else
5922 errMsg += "token: '" + std::string(llvmAsmtext, llvmAsmleng) + "'";
Reid Spencer61c83e02006-08-18 08:43:06 +00005923 GenerateError(errMsg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005924 return 0;
5925}
Reid Spencer3822ff52006-11-08 06:47:33 +00005926