blob: 9f57f0821b0c36dc98d4ccd0e75002802c1af042 [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 Spencer14310612006-12-31 05:40:51 +000074 INT8 = 265,
75 INT16 = 266,
76 INT32 = 267,
77 INT64 = 268,
78 FLOAT = 269,
79 DOUBLE = 270,
80 LABEL = 271,
81 TYPE = 272,
82 VAR_ID = 273,
83 LABELSTR = 274,
84 STRINGCONSTANT = 275,
85 IMPLEMENTATION = 276,
86 ZEROINITIALIZER = 277,
87 TRUETOK = 278,
88 FALSETOK = 279,
89 BEGINTOK = 280,
90 ENDTOK = 281,
91 DECLARE = 282,
92 DEFINE = 283,
93 GLOBAL = 284,
94 CONSTANT = 285,
95 SECTION = 286,
96 VOLATILE = 287,
97 TO = 288,
98 DOTDOTDOT = 289,
99 NULL_TOK = 290,
100 UNDEF = 291,
101 INTERNAL = 292,
102 LINKONCE = 293,
103 WEAK = 294,
104 APPENDING = 295,
105 DLLIMPORT = 296,
106 DLLEXPORT = 297,
107 EXTERN_WEAK = 298,
108 OPAQUE = 299,
109 NOT = 300,
110 EXTERNAL = 301,
111 TARGET = 302,
112 TRIPLE = 303,
113 ENDIAN = 304,
114 POINTERSIZE = 305,
115 LITTLE = 306,
116 BIG = 307,
117 ALIGN = 308,
118 DEPLIBS = 309,
119 CALL = 310,
120 TAIL = 311,
121 ASM_TOK = 312,
122 MODULE = 313,
123 SIDEEFFECT = 314,
124 CC_TOK = 315,
125 CCC_TOK = 316,
126 CSRETCC_TOK = 317,
127 FASTCC_TOK = 318,
128 COLDCC_TOK = 319,
129 X86_STDCALLCC_TOK = 320,
130 X86_FASTCALLCC_TOK = 321,
131 DATALAYOUT = 322,
132 RET = 323,
133 BR = 324,
134 SWITCH = 325,
135 INVOKE = 326,
136 UNWIND = 327,
137 UNREACHABLE = 328,
138 ADD = 329,
139 SUB = 330,
140 MUL = 331,
141 UDIV = 332,
142 SDIV = 333,
143 FDIV = 334,
144 UREM = 335,
145 SREM = 336,
146 FREM = 337,
147 AND = 338,
148 OR = 339,
149 XOR = 340,
150 ICMP = 341,
151 FCMP = 342,
152 EQ = 343,
153 NE = 344,
154 SLT = 345,
155 SGT = 346,
156 SLE = 347,
157 SGE = 348,
158 ULT = 349,
159 UGT = 350,
160 ULE = 351,
161 UGE = 352,
162 OEQ = 353,
163 ONE = 354,
164 OLT = 355,
165 OGT = 356,
166 OLE = 357,
167 OGE = 358,
168 ORD = 359,
169 UNO = 360,
170 UEQ = 361,
171 UNE = 362,
172 MALLOC = 363,
173 ALLOCA = 364,
174 FREE = 365,
175 LOAD = 366,
176 STORE = 367,
177 GETELEMENTPTR = 368,
178 TRUNC = 369,
179 ZEXT = 370,
180 SEXT = 371,
181 FPTRUNC = 372,
182 FPEXT = 373,
183 BITCAST = 374,
184 UITOFP = 375,
185 SITOFP = 376,
186 FPTOUI = 377,
187 FPTOSI = 378,
188 INTTOPTR = 379,
189 PTRTOINT = 380,
190 PHI_TOK = 381,
191 SELECT = 382,
192 SHL = 383,
193 LSHR = 384,
194 ASHR = 385,
195 VAARG = 386,
196 EXTRACTELEMENT = 387,
197 INSERTELEMENT = 388,
198 SHUFFLEVECTOR = 389
Reid Spencer3822ff52006-11-08 06:47:33 +0000199 };
200#endif
Reid Spencere4d87aa2006-12-23 06:05:41 +0000201/* Tokens. */
Reid Spencer3822ff52006-11-08 06:47:33 +0000202#define ESINT64VAL 258
203#define EUINT64VAL 259
204#define SINTVAL 260
205#define UINTVAL 261
206#define FPVAL 262
207#define VOID 263
208#define BOOL 264
Reid Spencer14310612006-12-31 05:40:51 +0000209#define INT8 265
210#define INT16 266
211#define INT32 267
212#define INT64 268
213#define FLOAT 269
214#define DOUBLE 270
215#define LABEL 271
216#define TYPE 272
217#define VAR_ID 273
218#define LABELSTR 274
219#define STRINGCONSTANT 275
220#define IMPLEMENTATION 276
221#define ZEROINITIALIZER 277
222#define TRUETOK 278
223#define FALSETOK 279
224#define BEGINTOK 280
225#define ENDTOK 281
226#define DECLARE 282
227#define DEFINE 283
228#define GLOBAL 284
229#define CONSTANT 285
230#define SECTION 286
231#define VOLATILE 287
232#define TO 288
233#define DOTDOTDOT 289
234#define NULL_TOK 290
235#define UNDEF 291
236#define INTERNAL 292
237#define LINKONCE 293
238#define WEAK 294
239#define APPENDING 295
240#define DLLIMPORT 296
241#define DLLEXPORT 297
242#define EXTERN_WEAK 298
243#define OPAQUE 299
244#define NOT 300
245#define EXTERNAL 301
246#define TARGET 302
247#define TRIPLE 303
248#define ENDIAN 304
249#define POINTERSIZE 305
250#define LITTLE 306
251#define BIG 307
252#define ALIGN 308
253#define DEPLIBS 309
254#define CALL 310
255#define TAIL 311
256#define ASM_TOK 312
257#define MODULE 313
258#define SIDEEFFECT 314
259#define CC_TOK 315
260#define CCC_TOK 316
261#define CSRETCC_TOK 317
262#define FASTCC_TOK 318
263#define COLDCC_TOK 319
264#define X86_STDCALLCC_TOK 320
265#define X86_FASTCALLCC_TOK 321
266#define DATALAYOUT 322
267#define RET 323
268#define BR 324
269#define SWITCH 325
270#define INVOKE 326
271#define UNWIND 327
272#define UNREACHABLE 328
273#define ADD 329
274#define SUB 330
275#define MUL 331
276#define UDIV 332
277#define SDIV 333
278#define FDIV 334
279#define UREM 335
280#define SREM 336
281#define FREM 337
282#define AND 338
283#define OR 339
284#define XOR 340
285#define ICMP 341
286#define FCMP 342
287#define EQ 343
288#define NE 344
289#define SLT 345
290#define SGT 346
291#define SLE 347
292#define SGE 348
293#define ULT 349
294#define UGT 350
295#define ULE 351
296#define UGE 352
297#define OEQ 353
298#define ONE 354
299#define OLT 355
300#define OGT 356
301#define OLE 357
302#define OGE 358
303#define ORD 359
304#define UNO 360
305#define UEQ 361
306#define UNE 362
307#define MALLOC 363
308#define ALLOCA 364
309#define FREE 365
310#define LOAD 366
311#define STORE 367
312#define GETELEMENTPTR 368
313#define TRUNC 369
314#define ZEXT 370
315#define SEXT 371
316#define FPTRUNC 372
317#define FPEXT 373
318#define BITCAST 374
319#define UITOFP 375
320#define SITOFP 376
321#define FPTOUI 377
322#define FPTOSI 378
323#define INTTOPTR 379
324#define PTRTOINT 380
325#define PHI_TOK 381
326#define SELECT 382
327#define SHL 383
328#define LSHR 384
329#define ASHR 385
330#define VAARG 386
331#define EXTRACTELEMENT 387
332#define INSERTELEMENT 388
333#define SHUFFLEVECTOR 389
Reid Spencer3822ff52006-11-08 06:47:33 +0000334
335
336
337
338/* Copy the first part of user declarations. */
Reid Spencer14310612006-12-31 05:40:51 +0000339#line 14 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000340
341#include "ParserInternals.h"
342#include "llvm/CallingConv.h"
Chris Lattner0e9c3762006-01-25 22:27:16 +0000343#include "llvm/InlineAsm.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000344#include "llvm/Instructions.h"
345#include "llvm/Module.h"
346#include "llvm/SymbolTable.h"
347#include "llvm/Support/GetElementPtrTypeIterator.h"
Reid Spencer14310612006-12-31 05:40:51 +0000348#include "llvm/Support/CommandLine.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000349#include "llvm/ADT/STLExtras.h"
Chris Lattner0019bbe2005-11-06 06:46:53 +0000350#include "llvm/Support/MathExtras.h"
Reid Spencer481169e2006-12-01 00:33:46 +0000351#include "llvm/Support/Streams.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000352#include <algorithm>
Reid Spencer68a24bd2005-08-27 18:50:39 +0000353#include <list>
354#include <utility>
Reid Spencer14310612006-12-31 05:40:51 +0000355#ifndef NDEBUG
356#define YYDEBUG 1
357#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +0000358
Reid Spencere4f47592006-08-18 17:32:55 +0000359// The following is a gross hack. In order to rid the libAsmParser library of
360// exceptions, we have to have a way of getting the yyparse function to go into
361// an error situation. So, whenever we want an error to occur, the GenerateError
362// function (see bottom of file) sets TriggerError. Then, at the end of each
363// production in the grammer we use CHECK_FOR_ERROR which will invoke YYERROR
364// (a goto) to put YACC in error state. Furthermore, several calls to
365// GenerateError are made from inside productions and they must simulate the
366// previous exception behavior by exiting the production immediately. We have
367// replaced these with the GEN_ERROR macro which calls GeneratError and then
368// immediately invokes YYERROR. This would be so much cleaner if it was a
369// recursive descent parser.
Reid Spencer61c83e02006-08-18 08:43:06 +0000370static bool TriggerError = false;
Reid Spencerf63697d2006-10-09 17:36:59 +0000371#define CHECK_FOR_ERROR { if (TriggerError) { TriggerError = false; YYABORT; } }
Reid Spencer61c83e02006-08-18 08:43:06 +0000372#define GEN_ERROR(msg) { GenerateError(msg); YYERROR; }
373
Reid Spencer68a24bd2005-08-27 18:50:39 +0000374int yyerror(const char *ErrorMsg); // Forward declarations to prevent "implicit
375int yylex(); // declaration" of xxx warnings.
376int yyparse();
377
378namespace llvm {
379 std::string CurFilename;
Reid Spencer14310612006-12-31 05:40:51 +0000380#if YYDEBUG
381static cl::opt<bool>
382Debug("debug-yacc", cl::desc("Print yacc debug state changes"),
383 cl::Hidden, cl::init(false));
384#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +0000385}
386using namespace llvm;
387
388static Module *ParserResult;
389
390// DEBUG_UPREFS - Define this symbol if you want to enable debugging output
391// relating to upreferences in the input stream.
392//
393//#define DEBUG_UPREFS 1
394#ifdef DEBUG_UPREFS
Bill Wendlinge8156192006-12-07 01:30:32 +0000395#define UR_OUT(X) cerr << X
Reid Spencer68a24bd2005-08-27 18:50:39 +0000396#else
397#define UR_OUT(X)
398#endif
399
400#define YYERROR_VERBOSE 1
401
Chris Lattnerb475c422005-11-12 18:22:38 +0000402static GlobalVariable *CurGV;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000403
404
405// This contains info used when building the body of a function. It is
406// destroyed when the function is completed.
407//
408typedef std::vector<Value *> ValueList; // Numbered defs
Reid Spencer14310612006-12-31 05:40:51 +0000409
Reid Spencer68a24bd2005-08-27 18:50:39 +0000410static void
411ResolveDefinitions(std::map<const Type *,ValueList> &LateResolvers,
412 std::map<const Type *,ValueList> *FutureLateResolvers = 0);
413
414static struct PerModuleInfo {
415 Module *CurrentModule;
416 std::map<const Type *, ValueList> Values; // Module level numbered definitions
417 std::map<const Type *,ValueList> LateResolveValues;
Reid Spencer861d9d62006-11-28 07:29:44 +0000418 std::vector<PATypeHolder> Types;
419 std::map<ValID, PATypeHolder> LateResolveTypes;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000420
421 /// PlaceHolderInfo - When temporary placeholder objects are created, remember
Chris Lattner0ad19702006-06-21 16:53:00 +0000422 /// how they were referenced and on which line of the input they came from so
Reid Spencer68a24bd2005-08-27 18:50:39 +0000423 /// that we can resolve them later and print error messages as appropriate.
424 std::map<Value*, std::pair<ValID, int> > PlaceHolderInfo;
425
426 // GlobalRefs - This maintains a mapping between <Type, ValID>'s and forward
427 // references to global values. Global values may be referenced before they
428 // are defined, and if so, the temporary object that they represent is held
429 // here. This is used for forward references of GlobalValues.
430 //
431 typedef std::map<std::pair<const PointerType *,
432 ValID>, GlobalValue*> GlobalRefsType;
433 GlobalRefsType GlobalRefs;
434
435 void ModuleDone() {
436 // If we could not resolve some functions at function compilation time
437 // (calls to functions before they are defined), resolve them now... Types
438 // are resolved when the constant pool has been completely parsed.
439 //
440 ResolveDefinitions(LateResolveValues);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000441 if (TriggerError)
442 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000443
444 // Check to make sure that all global value forward references have been
445 // resolved!
446 //
447 if (!GlobalRefs.empty()) {
448 std::string UndefinedReferences = "Unresolved global references exist:\n";
449
450 for (GlobalRefsType::iterator I = GlobalRefs.begin(), E =GlobalRefs.end();
451 I != E; ++I) {
452 UndefinedReferences += " " + I->first.first->getDescription() + " " +
453 I->first.second.getName() + "\n";
454 }
Reid Spencer61c83e02006-08-18 08:43:06 +0000455 GenerateError(UndefinedReferences);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000456 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000457 }
458
459 Values.clear(); // Clear out function local definitions
460 Types.clear();
461 CurrentModule = 0;
462 }
463
Reid Spencer68a24bd2005-08-27 18:50:39 +0000464 // GetForwardRefForGlobal - Check to see if there is a forward reference
465 // for this global. If so, remove it from the GlobalRefs map and return it.
466 // If not, just return null.
467 GlobalValue *GetForwardRefForGlobal(const PointerType *PTy, ValID ID) {
468 // Check to see if there is a forward reference to this global variable...
469 // if there is, eliminate it and patch the reference to use the new def'n.
470 GlobalRefsType::iterator I = GlobalRefs.find(std::make_pair(PTy, ID));
471 GlobalValue *Ret = 0;
472 if (I != GlobalRefs.end()) {
473 Ret = I->second;
474 GlobalRefs.erase(I);
475 }
476 return Ret;
477 }
Reid Spencer8c8a2dc2007-01-02 21:54:12 +0000478
479 bool TypeIsUnresolved(PATypeHolder* PATy) {
480 // If it isn't abstract, its resolved
481 const Type* Ty = PATy->get();
482 if (!Ty->isAbstract())
483 return false;
484 // Traverse the type looking for abstract types. If it isn't abstract then
485 // we don't need to traverse that leg of the type.
486 std::vector<const Type*> WorkList, SeenList;
487 WorkList.push_back(Ty);
488 while (!WorkList.empty()) {
489 const Type* Ty = WorkList.back();
490 SeenList.push_back(Ty);
491 WorkList.pop_back();
492 if (const OpaqueType* OpTy = dyn_cast<OpaqueType>(Ty)) {
493 // Check to see if this is an unresolved type
494 std::map<ValID, PATypeHolder>::iterator I = LateResolveTypes.begin();
495 std::map<ValID, PATypeHolder>::iterator E = LateResolveTypes.end();
496 for ( ; I != E; ++I) {
497 if (I->second.get() == OpTy)
498 return true;
499 }
500 } else if (const SequentialType* SeqTy = dyn_cast<SequentialType>(Ty)) {
501 const Type* TheTy = SeqTy->getElementType();
502 if (TheTy->isAbstract() && TheTy != Ty) {
503 std::vector<const Type*>::iterator I = SeenList.begin(),
504 E = SeenList.end();
505 for ( ; I != E; ++I)
506 if (*I == TheTy)
507 break;
508 if (I == E)
509 WorkList.push_back(TheTy);
510 }
511 } else if (const StructType* StrTy = dyn_cast<StructType>(Ty)) {
512 for (unsigned i = 0; i < StrTy->getNumElements(); ++i) {
513 const Type* TheTy = StrTy->getElementType(i);
514 if (TheTy->isAbstract() && TheTy != Ty) {
515 std::vector<const Type*>::iterator I = SeenList.begin(),
516 E = SeenList.end();
517 for ( ; I != E; ++I)
518 if (*I == TheTy)
519 break;
520 if (I == E)
521 WorkList.push_back(TheTy);
522 }
523 }
524 }
525 }
526 return false;
527 }
528
529
Reid Spencer68a24bd2005-08-27 18:50:39 +0000530} CurModule;
531
532static struct PerFunctionInfo {
533 Function *CurrentFunction; // Pointer to current function being created
534
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000535 std::map<const Type*, ValueList> Values; // Keep track of #'d definitions
Reid Spencer68a24bd2005-08-27 18:50:39 +0000536 std::map<const Type*, ValueList> LateResolveValues;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000537 bool isDeclare; // Is this function a forward declararation?
538 GlobalValue::LinkageTypes Linkage; // Linkage for forward declaration.
Reid Spencer68a24bd2005-08-27 18:50:39 +0000539
540 /// BBForwardRefs - When we see forward references to basic blocks, keep
541 /// track of them here.
542 std::map<BasicBlock*, std::pair<ValID, int> > BBForwardRefs;
543 std::vector<BasicBlock*> NumberedBlocks;
544 unsigned NextBBNum;
545
546 inline PerFunctionInfo() {
547 CurrentFunction = 0;
548 isDeclare = false;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000549 Linkage = GlobalValue::ExternalLinkage;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000550 }
551
552 inline void FunctionStart(Function *M) {
553 CurrentFunction = M;
554 NextBBNum = 0;
555 }
556
557 void FunctionDone() {
558 NumberedBlocks.clear();
559
560 // Any forward referenced blocks left?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000561 if (!BBForwardRefs.empty()) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000562 GenerateError("Undefined reference to label " +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000563 BBForwardRefs.begin()->first->getName());
Reid Spencer5b7e7532006-09-28 19:28:24 +0000564 return;
565 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000566
567 // Resolve all forward references now.
568 ResolveDefinitions(LateResolveValues, &CurModule.LateResolveValues);
569
570 Values.clear(); // Clear out function local definitions
571 CurrentFunction = 0;
572 isDeclare = false;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000573 Linkage = GlobalValue::ExternalLinkage;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000574 }
575} CurFun; // Info for the current function...
576
577static bool inFunctionScope() { return CurFun.CurrentFunction != 0; }
578
579
580//===----------------------------------------------------------------------===//
581// Code to handle definitions of all the types
582//===----------------------------------------------------------------------===//
583
584static int InsertValue(Value *V,
585 std::map<const Type*,ValueList> &ValueTab = CurFun.Values) {
586 if (V->hasName()) return -1; // Is this a numbered definition?
587
588 // Yes, insert the value into the value table...
589 ValueList &List = ValueTab[V->getType()];
590 List.push_back(V);
591 return List.size()-1;
592}
593
594static const Type *getTypeVal(const ValID &D, bool DoNotImprovise = false) {
595 switch (D.Type) {
596 case ValID::NumberVal: // Is it a numbered definition?
597 // Module constants occupy the lowest numbered slots...
598 if ((unsigned)D.Num < CurModule.Types.size())
Reid Spencer861d9d62006-11-28 07:29:44 +0000599 return CurModule.Types[(unsigned)D.Num];
Reid Spencer68a24bd2005-08-27 18:50:39 +0000600 break;
601 case ValID::NameVal: // Is it a named definition?
602 if (const Type *N = CurModule.CurrentModule->getTypeByName(D.Name)) {
603 D.destroy(); // Free old strdup'd memory...
604 return N;
605 }
606 break;
607 default:
Reid Spencer61c83e02006-08-18 08:43:06 +0000608 GenerateError("Internal parser error: Invalid symbol type reference!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000609 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000610 }
611
612 // If we reached here, we referenced either a symbol that we don't know about
613 // or an id number that hasn't been read yet. We may be referencing something
614 // forward, so just create an entry to be resolved later and get to it...
615 //
616 if (DoNotImprovise) return 0; // Do we just want a null to be returned?
617
618
619 if (inFunctionScope()) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000620 if (D.Type == ValID::NameVal) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000621 GenerateError("Reference to an undefined type: '" + D.getName() + "'");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000622 return 0;
623 } else {
Reid Spencer61c83e02006-08-18 08:43:06 +0000624 GenerateError("Reference to an undefined type: #" + itostr(D.Num));
Reid Spencer5b7e7532006-09-28 19:28:24 +0000625 return 0;
626 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000627 }
628
Reid Spencer861d9d62006-11-28 07:29:44 +0000629 std::map<ValID, PATypeHolder>::iterator I =CurModule.LateResolveTypes.find(D);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000630 if (I != CurModule.LateResolveTypes.end())
Reid Spencer861d9d62006-11-28 07:29:44 +0000631 return I->second;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000632
Reid Spencer861d9d62006-11-28 07:29:44 +0000633 Type *Typ = OpaqueType::get();
634 CurModule.LateResolveTypes.insert(std::make_pair(D, Typ));
635 return Typ;
Reid Spencera132e042006-12-03 05:46:11 +0000636 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000637
638static Value *lookupInSymbolTable(const Type *Ty, const std::string &Name) {
639 SymbolTable &SymTab =
640 inFunctionScope() ? CurFun.CurrentFunction->getSymbolTable() :
641 CurModule.CurrentModule->getSymbolTable();
642 return SymTab.lookup(Ty, Name);
643}
644
645// getValNonImprovising - Look up the value specified by the provided type and
646// the provided ValID. If the value exists and has already been defined, return
647// it. Otherwise return null.
648//
649static Value *getValNonImprovising(const Type *Ty, const ValID &D) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000650 if (isa<FunctionType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000651 GenerateError("Functions are not values and "
Reid Spencer68a24bd2005-08-27 18:50:39 +0000652 "must be referenced as pointers");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000653 return 0;
654 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000655
656 switch (D.Type) {
657 case ValID::NumberVal: { // Is it a numbered definition?
658 unsigned Num = (unsigned)D.Num;
659
660 // Module constants occupy the lowest numbered slots...
661 std::map<const Type*,ValueList>::iterator VI = CurModule.Values.find(Ty);
662 if (VI != CurModule.Values.end()) {
663 if (Num < VI->second.size())
664 return VI->second[Num];
665 Num -= VI->second.size();
666 }
667
668 // Make sure that our type is within bounds
669 VI = CurFun.Values.find(Ty);
670 if (VI == CurFun.Values.end()) return 0;
671
672 // Check that the number is within bounds...
673 if (VI->second.size() <= Num) return 0;
674
675 return VI->second[Num];
676 }
677
678 case ValID::NameVal: { // Is it a named definition?
679 Value *N = lookupInSymbolTable(Ty, std::string(D.Name));
680 if (N == 0) return 0;
681
682 D.destroy(); // Free old strdup'd memory...
683 return N;
684 }
685
686 // Check to make sure that "Ty" is an integral type, and that our
687 // value will fit into the specified type...
688 case ValID::ConstSIntVal: // Is it a constant pool reference??
Reid Spencerb83eb642006-10-20 07:07:24 +0000689 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000690 GenerateError("Signed integral constant '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000691 itostr(D.ConstPool64) + "' is invalid for type '" +
692 Ty->getDescription() + "'!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000693 return 0;
694 }
Reid Spencerb83eb642006-10-20 07:07:24 +0000695 return ConstantInt::get(Ty, D.ConstPool64);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000696
697 case ValID::ConstUIntVal: // Is it an unsigned const pool reference?
Reid Spencerb83eb642006-10-20 07:07:24 +0000698 if (!ConstantInt::isValueValidForType(Ty, D.UConstPool64)) {
699 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000700 GenerateError("Integral constant '" + utostr(D.UConstPool64) +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000701 "' is invalid or out of range!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000702 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000703 } else { // This is really a signed reference. Transmogrify.
Reid Spencerb83eb642006-10-20 07:07:24 +0000704 return ConstantInt::get(Ty, D.ConstPool64);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000705 }
706 } else {
Reid Spencerb83eb642006-10-20 07:07:24 +0000707 return ConstantInt::get(Ty, D.UConstPool64);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000708 }
709
710 case ValID::ConstFPVal: // Is it a floating point const pool reference?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000711 if (!ConstantFP::isValueValidForType(Ty, D.ConstPoolFP)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000712 GenerateError("FP constant invalid for type!!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000713 return 0;
714 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000715 return ConstantFP::get(Ty, D.ConstPoolFP);
716
717 case ValID::ConstNullVal: // Is it a null value?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000718 if (!isa<PointerType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000719 GenerateError("Cannot create a a non pointer null!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000720 return 0;
721 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000722 return ConstantPointerNull::get(cast<PointerType>(Ty));
723
724 case ValID::ConstUndefVal: // Is it an undef value?
725 return UndefValue::get(Ty);
726
Chris Lattner7aa61892005-12-21 17:53:23 +0000727 case ValID::ConstZeroVal: // Is it a zero value?
728 return Constant::getNullValue(Ty);
729
Reid Spencer68a24bd2005-08-27 18:50:39 +0000730 case ValID::ConstantVal: // Fully resolved constant?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000731 if (D.ConstantValue->getType() != Ty) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000732 GenerateError("Constant expression type different from required type!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000733 return 0;
734 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000735 return D.ConstantValue;
736
Chris Lattner0e9c3762006-01-25 22:27:16 +0000737 case ValID::InlineAsmVal: { // Inline asm expression
738 const PointerType *PTy = dyn_cast<PointerType>(Ty);
739 const FunctionType *FTy =
740 PTy ? dyn_cast<FunctionType>(PTy->getElementType()) : 0;
Reid Spencer5b7e7532006-09-28 19:28:24 +0000741 if (!FTy || !InlineAsm::Verify(FTy, D.IAD->Constraints)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000742 GenerateError("Invalid type for asm constraint string!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000743 return 0;
744 }
Chris Lattner0e9c3762006-01-25 22:27:16 +0000745 InlineAsm *IA = InlineAsm::get(FTy, D.IAD->AsmString, D.IAD->Constraints,
746 D.IAD->HasSideEffects);
747 D.destroy(); // Free InlineAsmDescriptor.
748 return IA;
749 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000750 default:
751 assert(0 && "Unhandled case!");
752 return 0;
753 } // End of switch
754
755 assert(0 && "Unhandled case!");
756 return 0;
757}
758
759// getVal - This function is identical to getValNonImprovising, except that if a
760// value is not already defined, it "improvises" by creating a placeholder var
761// that looks and acts just like the requested variable. When the value is
762// defined later, all uses of the placeholder variable are replaced with the
763// real thing.
764//
765static Value *getVal(const Type *Ty, const ValID &ID) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000766 if (Ty == Type::LabelTy) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000767 GenerateError("Cannot use a basic block here");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000768 return 0;
769 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000770
771 // See if the value has already been defined.
772 Value *V = getValNonImprovising(Ty, ID);
773 if (V) return V;
Reid Spencer5b7e7532006-09-28 19:28:24 +0000774 if (TriggerError) return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000775
Reid Spencer5b7e7532006-09-28 19:28:24 +0000776 if (!Ty->isFirstClassType() && !isa<OpaqueType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000777 GenerateError("Invalid use of a composite type!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000778 return 0;
779 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000780
781 // If we reached here, we referenced either a symbol that we don't know about
782 // or an id number that hasn't been read yet. We may be referencing something
783 // forward, so just create an entry to be resolved later and get to it...
784 //
785 V = new Argument(Ty);
786
787 // Remember where this forward reference came from. FIXME, shouldn't we try
788 // to recycle these things??
789 CurModule.PlaceHolderInfo.insert(std::make_pair(V, std::make_pair(ID,
790 llvmAsmlineno)));
791
792 if (inFunctionScope())
793 InsertValue(V, CurFun.LateResolveValues);
794 else
795 InsertValue(V, CurModule.LateResolveValues);
796 return V;
797}
798
799/// getBBVal - This is used for two purposes:
800/// * If isDefinition is true, a new basic block with the specified ID is being
801/// defined.
802/// * If isDefinition is true, this is a reference to a basic block, which may
803/// or may not be a forward reference.
804///
805static BasicBlock *getBBVal(const ValID &ID, bool isDefinition = false) {
806 assert(inFunctionScope() && "Can't get basic block at global scope!");
807
808 std::string Name;
809 BasicBlock *BB = 0;
810 switch (ID.Type) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000811 default:
812 GenerateError("Illegal label reference " + ID.getName());
813 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000814 case ValID::NumberVal: // Is it a numbered definition?
815 if (unsigned(ID.Num) >= CurFun.NumberedBlocks.size())
816 CurFun.NumberedBlocks.resize(ID.Num+1);
817 BB = CurFun.NumberedBlocks[ID.Num];
818 break;
819 case ValID::NameVal: // Is it a named definition?
820 Name = ID.Name;
821 if (Value *N = CurFun.CurrentFunction->
822 getSymbolTable().lookup(Type::LabelTy, Name))
823 BB = cast<BasicBlock>(N);
824 break;
825 }
826
827 // See if the block has already been defined.
828 if (BB) {
829 // If this is the definition of the block, make sure the existing value was
830 // just a forward reference. If it was a forward reference, there will be
831 // an entry for it in the PlaceHolderInfo map.
Reid Spencer5b7e7532006-09-28 19:28:24 +0000832 if (isDefinition && !CurFun.BBForwardRefs.erase(BB)) {
Reid Spencer68a24bd2005-08-27 18:50:39 +0000833 // The existing value was a definition, not a forward reference.
Reid Spencer61c83e02006-08-18 08:43:06 +0000834 GenerateError("Redefinition of label " + ID.getName());
Reid Spencer5b7e7532006-09-28 19:28:24 +0000835 return 0;
836 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000837
838 ID.destroy(); // Free strdup'd memory.
839 return BB;
840 }
841
842 // Otherwise this block has not been seen before.
843 BB = new BasicBlock("", CurFun.CurrentFunction);
844 if (ID.Type == ValID::NameVal) {
845 BB->setName(ID.Name);
846 } else {
847 CurFun.NumberedBlocks[ID.Num] = BB;
848 }
849
850 // If this is not a definition, keep track of it so we can use it as a forward
851 // reference.
852 if (!isDefinition) {
853 // Remember where this forward reference came from.
854 CurFun.BBForwardRefs[BB] = std::make_pair(ID, llvmAsmlineno);
855 } else {
856 // The forward declaration could have been inserted anywhere in the
857 // function: insert it into the correct place now.
858 CurFun.CurrentFunction->getBasicBlockList().remove(BB);
859 CurFun.CurrentFunction->getBasicBlockList().push_back(BB);
860 }
861 ID.destroy();
862 return BB;
863}
864
865
866//===----------------------------------------------------------------------===//
867// Code to handle forward references in instructions
868//===----------------------------------------------------------------------===//
869//
870// This code handles the late binding needed with statements that reference
871// values not defined yet... for example, a forward branch, or the PHI node for
872// a loop body.
873//
874// This keeps a table (CurFun.LateResolveValues) of all such forward references
875// and back patchs after we are done.
876//
877
878// ResolveDefinitions - If we could not resolve some defs at parsing
879// time (forward branches, phi functions for loops, etc...) resolve the
880// defs now...
881//
882static void
883ResolveDefinitions(std::map<const Type*,ValueList> &LateResolvers,
884 std::map<const Type*,ValueList> *FutureLateResolvers) {
885 // Loop over LateResolveDefs fixing up stuff that couldn't be resolved
886 for (std::map<const Type*,ValueList>::iterator LRI = LateResolvers.begin(),
887 E = LateResolvers.end(); LRI != E; ++LRI) {
888 ValueList &List = LRI->second;
889 while (!List.empty()) {
890 Value *V = List.back();
891 List.pop_back();
892
893 std::map<Value*, std::pair<ValID, int> >::iterator PHI =
894 CurModule.PlaceHolderInfo.find(V);
895 assert(PHI != CurModule.PlaceHolderInfo.end() && "Placeholder error!");
896
897 ValID &DID = PHI->second.first;
898
899 Value *TheRealValue = getValNonImprovising(LRI->first, DID);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000900 if (TriggerError)
901 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000902 if (TheRealValue) {
903 V->replaceAllUsesWith(TheRealValue);
904 delete V;
905 CurModule.PlaceHolderInfo.erase(PHI);
906 } else if (FutureLateResolvers) {
907 // Functions have their unresolved items forwarded to the module late
908 // resolver table
909 InsertValue(V, *FutureLateResolvers);
910 } else {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000911 if (DID.Type == ValID::NameVal) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000912 GenerateError("Reference to an invalid definition: '" +DID.getName()+
Reid Spencer68a24bd2005-08-27 18:50:39 +0000913 "' of type '" + V->getType()->getDescription() + "'",
914 PHI->second.second);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000915 return;
916 } else {
Reid Spencer61c83e02006-08-18 08:43:06 +0000917 GenerateError("Reference to an invalid definition: #" +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000918 itostr(DID.Num) + " of type '" +
919 V->getType()->getDescription() + "'",
920 PHI->second.second);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000921 return;
922 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000923 }
924 }
925 }
926
927 LateResolvers.clear();
928}
929
930// ResolveTypeTo - A brand new type was just declared. This means that (if
931// name is not null) things referencing Name can be resolved. Otherwise, things
932// refering to the number can be resolved. Do this now.
933//
934static void ResolveTypeTo(char *Name, const Type *ToTy) {
935 ValID D;
936 if (Name) D = ValID::create(Name);
937 else D = ValID::create((int)CurModule.Types.size());
938
Reid Spencer861d9d62006-11-28 07:29:44 +0000939 std::map<ValID, PATypeHolder>::iterator I =
Reid Spencer68a24bd2005-08-27 18:50:39 +0000940 CurModule.LateResolveTypes.find(D);
941 if (I != CurModule.LateResolveTypes.end()) {
Reid Spencer861d9d62006-11-28 07:29:44 +0000942 ((DerivedType*)I->second.get())->refineAbstractTypeTo(ToTy);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000943 CurModule.LateResolveTypes.erase(I);
944 }
945}
946
947// setValueName - Set the specified value to the name given. The name may be
948// null potentially, in which case this is a noop. The string passed in is
949// assumed to be a malloc'd string buffer, and is free'd by this function.
950//
951static void setValueName(Value *V, char *NameStr) {
952 if (NameStr) {
953 std::string Name(NameStr); // Copy string
954 free(NameStr); // Free old string
955
Reid Spencer5b7e7532006-09-28 19:28:24 +0000956 if (V->getType() == Type::VoidTy) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000957 GenerateError("Can't assign name '" + Name+"' to value with void type!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000958 return;
959 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000960
961 assert(inFunctionScope() && "Must be in function scope!");
962 SymbolTable &ST = CurFun.CurrentFunction->getSymbolTable();
Reid Spencer5b7e7532006-09-28 19:28:24 +0000963 if (ST.lookup(V->getType(), Name)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000964 GenerateError("Redefinition of value named '" + Name + "' in the '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000965 V->getType()->getDescription() + "' type plane!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000966 return;
967 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000968
969 // Set the name.
970 V->setName(Name);
971 }
972}
973
974/// ParseGlobalVariable - Handle parsing of a global. If Initializer is null,
975/// this is a declaration, otherwise it is a definition.
Chris Lattnerb475c422005-11-12 18:22:38 +0000976static GlobalVariable *
977ParseGlobalVariable(char *NameStr,GlobalValue::LinkageTypes Linkage,
978 bool isConstantGlobal, const Type *Ty,
979 Constant *Initializer) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000980 if (isa<FunctionType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000981 GenerateError("Cannot declare global vars of function type!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000982 return 0;
983 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000984
985 const PointerType *PTy = PointerType::get(Ty);
986
987 std::string Name;
988 if (NameStr) {
989 Name = NameStr; // Copy string
990 free(NameStr); // Free old string
991 }
992
993 // See if this global value was forward referenced. If so, recycle the
994 // object.
995 ValID ID;
996 if (!Name.empty()) {
997 ID = ValID::create((char*)Name.c_str());
998 } else {
999 ID = ValID::create((int)CurModule.Values[PTy].size());
1000 }
1001
1002 if (GlobalValue *FWGV = CurModule.GetForwardRefForGlobal(PTy, ID)) {
1003 // Move the global to the end of the list, from whereever it was
1004 // previously inserted.
1005 GlobalVariable *GV = cast<GlobalVariable>(FWGV);
1006 CurModule.CurrentModule->getGlobalList().remove(GV);
1007 CurModule.CurrentModule->getGlobalList().push_back(GV);
1008 GV->setInitializer(Initializer);
1009 GV->setLinkage(Linkage);
1010 GV->setConstant(isConstantGlobal);
1011 InsertValue(GV, CurModule.Values);
Chris Lattnerb475c422005-11-12 18:22:38 +00001012 return GV;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001013 }
1014
1015 // If this global has a name, check to see if there is already a definition
1016 // of this global in the module. If so, merge as appropriate. Note that
1017 // this is really just a hack around problems in the CFE. :(
1018 if (!Name.empty()) {
1019 // We are a simple redefinition of a value, check to see if it is defined
1020 // the same as the old one.
1021 if (GlobalVariable *EGV =
1022 CurModule.CurrentModule->getGlobalVariable(Name, Ty)) {
1023 // We are allowed to redefine a global variable in two circumstances:
1024 // 1. If at least one of the globals is uninitialized or
1025 // 2. If both initializers have the same value.
1026 //
1027 if (!EGV->hasInitializer() || !Initializer ||
1028 EGV->getInitializer() == Initializer) {
1029
1030 // Make sure the existing global version gets the initializer! Make
1031 // sure that it also gets marked const if the new version is.
1032 if (Initializer && !EGV->hasInitializer())
1033 EGV->setInitializer(Initializer);
1034 if (isConstantGlobal)
1035 EGV->setConstant(true);
1036 EGV->setLinkage(Linkage);
Chris Lattnerb475c422005-11-12 18:22:38 +00001037 return EGV;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001038 }
1039
Reid Spencer61c83e02006-08-18 08:43:06 +00001040 GenerateError("Redefinition of global variable named '" + Name +
Reid Spencer68a24bd2005-08-27 18:50:39 +00001041 "' in the '" + Ty->getDescription() + "' type plane!");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001042 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001043 }
1044 }
1045
1046 // Otherwise there is no existing GV to use, create one now.
1047 GlobalVariable *GV =
1048 new GlobalVariable(Ty, isConstantGlobal, Linkage, Initializer, Name,
1049 CurModule.CurrentModule);
1050 InsertValue(GV, CurModule.Values);
Chris Lattnerb475c422005-11-12 18:22:38 +00001051 return GV;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001052}
1053
1054// setTypeName - Set the specified type to the name given. The name may be
1055// null potentially, in which case this is a noop. The string passed in is
1056// assumed to be a malloc'd string buffer, and is freed by this function.
1057//
1058// This function returns true if the type has already been defined, but is
1059// allowed to be redefined in the specified context. If the name is a new name
1060// for the type plane, it is inserted and false is returned.
1061static bool setTypeName(const Type *T, char *NameStr) {
1062 assert(!inFunctionScope() && "Can't give types function-local names!");
1063 if (NameStr == 0) return false;
1064
1065 std::string Name(NameStr); // Copy string
1066 free(NameStr); // Free old string
1067
1068 // We don't allow assigning names to void type
Reid Spencer5b7e7532006-09-28 19:28:24 +00001069 if (T == Type::VoidTy) {
Reid Spencer61c83e02006-08-18 08:43:06 +00001070 GenerateError("Can't assign name '" + Name + "' to the void type!");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001071 return false;
1072 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001073
1074 // Set the type name, checking for conflicts as we do so.
1075 bool AlreadyExists = CurModule.CurrentModule->addTypeName(Name, T);
1076
1077 if (AlreadyExists) { // Inserting a name that is already defined???
1078 const Type *Existing = CurModule.CurrentModule->getTypeByName(Name);
1079 assert(Existing && "Conflict but no matching type?");
1080
1081 // There is only one case where this is allowed: when we are refining an
1082 // opaque type. In this case, Existing will be an opaque type.
1083 if (const OpaqueType *OpTy = dyn_cast<OpaqueType>(Existing)) {
1084 // We ARE replacing an opaque type!
1085 const_cast<OpaqueType*>(OpTy)->refineAbstractTypeTo(T);
1086 return true;
1087 }
1088
1089 // Otherwise, this is an attempt to redefine a type. That's okay if
1090 // the redefinition is identical to the original. This will be so if
1091 // Existing and T point to the same Type object. In this one case we
1092 // allow the equivalent redefinition.
1093 if (Existing == T) return true; // Yes, it's equal.
1094
1095 // Any other kind of (non-equivalent) redefinition is an error.
Reid Spencer61c83e02006-08-18 08:43:06 +00001096 GenerateError("Redefinition of type named '" + Name + "' in the '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00001097 T->getDescription() + "' type plane!");
1098 }
1099
1100 return false;
1101}
1102
1103//===----------------------------------------------------------------------===//
1104// Code for handling upreferences in type names...
1105//
1106
1107// TypeContains - Returns true if Ty directly contains E in it.
1108//
1109static bool TypeContains(const Type *Ty, const Type *E) {
1110 return std::find(Ty->subtype_begin(), Ty->subtype_end(),
1111 E) != Ty->subtype_end();
1112}
1113
1114namespace {
1115 struct UpRefRecord {
1116 // NestingLevel - The number of nesting levels that need to be popped before
1117 // this type is resolved.
1118 unsigned NestingLevel;
1119
1120 // LastContainedTy - This is the type at the current binding level for the
1121 // type. Every time we reduce the nesting level, this gets updated.
1122 const Type *LastContainedTy;
1123
1124 // UpRefTy - This is the actual opaque type that the upreference is
1125 // represented with.
1126 OpaqueType *UpRefTy;
1127
1128 UpRefRecord(unsigned NL, OpaqueType *URTy)
1129 : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) {}
1130 };
1131}
1132
1133// UpRefs - A list of the outstanding upreferences that need to be resolved.
1134static std::vector<UpRefRecord> UpRefs;
1135
1136/// HandleUpRefs - Every time we finish a new layer of types, this function is
1137/// called. It loops through the UpRefs vector, which is a list of the
1138/// currently active types. For each type, if the up reference is contained in
1139/// the newly completed type, we decrement the level count. When the level
1140/// count reaches zero, the upreferenced type is the type that is passed in:
1141/// thus we can complete the cycle.
1142///
1143static PATypeHolder HandleUpRefs(const Type *ty) {
Chris Lattner224f84f2006-08-18 17:34:45 +00001144 // If Ty isn't abstract, or if there are no up-references in it, then there is
1145 // nothing to resolve here.
1146 if (!ty->isAbstract() || UpRefs.empty()) return ty;
1147
Reid Spencer68a24bd2005-08-27 18:50:39 +00001148 PATypeHolder Ty(ty);
1149 UR_OUT("Type '" << Ty->getDescription() <<
1150 "' newly formed. Resolving upreferences.\n" <<
1151 UpRefs.size() << " upreferences active!\n");
1152
1153 // If we find any resolvable upreferences (i.e., those whose NestingLevel goes
1154 // to zero), we resolve them all together before we resolve them to Ty. At
1155 // the end of the loop, if there is anything to resolve to Ty, it will be in
1156 // this variable.
1157 OpaqueType *TypeToResolve = 0;
1158
1159 for (unsigned i = 0; i != UpRefs.size(); ++i) {
1160 UR_OUT(" UR#" << i << " - TypeContains(" << Ty->getDescription() << ", "
1161 << UpRefs[i].second->getDescription() << ") = "
1162 << (TypeContains(Ty, UpRefs[i].second) ? "true" : "false") << "\n");
1163 if (TypeContains(Ty, UpRefs[i].LastContainedTy)) {
1164 // Decrement level of upreference
1165 unsigned Level = --UpRefs[i].NestingLevel;
1166 UpRefs[i].LastContainedTy = Ty;
1167 UR_OUT(" Uplevel Ref Level = " << Level << "\n");
1168 if (Level == 0) { // Upreference should be resolved!
1169 if (!TypeToResolve) {
1170 TypeToResolve = UpRefs[i].UpRefTy;
1171 } else {
1172 UR_OUT(" * Resolving upreference for "
1173 << UpRefs[i].second->getDescription() << "\n";
1174 std::string OldName = UpRefs[i].UpRefTy->getDescription());
1175 UpRefs[i].UpRefTy->refineAbstractTypeTo(TypeToResolve);
1176 UR_OUT(" * Type '" << OldName << "' refined upreference to: "
1177 << (const void*)Ty << ", " << Ty->getDescription() << "\n");
1178 }
1179 UpRefs.erase(UpRefs.begin()+i); // Remove from upreference list...
1180 --i; // Do not skip the next element...
1181 }
1182 }
1183 }
1184
1185 if (TypeToResolve) {
1186 UR_OUT(" * Resolving upreference for "
1187 << UpRefs[i].second->getDescription() << "\n";
1188 std::string OldName = TypeToResolve->getDescription());
1189 TypeToResolve->refineAbstractTypeTo(Ty);
1190 }
1191
1192 return Ty;
1193}
1194
Reid Spencer68a24bd2005-08-27 18:50:39 +00001195//===----------------------------------------------------------------------===//
1196// RunVMAsmParser - Define an interface to this parser
1197//===----------------------------------------------------------------------===//
1198//
Reid Spencer14310612006-12-31 05:40:51 +00001199static Module* RunParser(Module * M);
1200
Reid Spencer68a24bd2005-08-27 18:50:39 +00001201Module *llvm::RunVMAsmParser(const std::string &Filename, FILE *F) {
1202 set_scan_file(F);
1203
1204 CurFilename = Filename;
1205 return RunParser(new Module(CurFilename));
1206}
1207
1208Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) {
1209 set_scan_string(AsmString);
1210
1211 CurFilename = "from_memory";
1212 if (M == NULL) {
1213 return RunParser(new Module (CurFilename));
1214 } else {
1215 return RunParser(M);
1216 }
1217}
1218
1219
Reid Spencer3822ff52006-11-08 06:47:33 +00001220
1221/* Enabling traces. */
1222#ifndef YYDEBUG
1223# define YYDEBUG 0
1224#endif
1225
1226/* Enabling verbose error messages. */
1227#ifdef YYERROR_VERBOSE
1228# undef YYERROR_VERBOSE
1229# define YYERROR_VERBOSE 1
1230#else
1231# define YYERROR_VERBOSE 0
1232#endif
1233
Reid Spencere4d87aa2006-12-23 06:05:41 +00001234/* Enabling the token table. */
1235#ifndef YYTOKEN_TABLE
1236# define YYTOKEN_TABLE 0
1237#endif
1238
Andrew Lenharth6353e052006-12-08 18:07:09 +00001239#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00001240#line 895 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00001241typedef union YYSTYPE {
Reid Spencer68a24bd2005-08-27 18:50:39 +00001242 llvm::Module *ModuleVal;
1243 llvm::Function *FunctionVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001244 llvm::BasicBlock *BasicBlockVal;
1245 llvm::TerminatorInst *TermInstVal;
1246 llvm::Instruction *InstVal;
Reid Spencera132e042006-12-03 05:46:11 +00001247 llvm::Constant *ConstVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001248
Reid Spencera132e042006-12-03 05:46:11 +00001249 const llvm::Type *PrimType;
Reid Spencer14310612006-12-31 05:40:51 +00001250 std::list<llvm::PATypeHolder> *TypeList;
Reid Spencera132e042006-12-03 05:46:11 +00001251 llvm::PATypeHolder *TypeVal;
1252 llvm::Value *ValueVal;
Reid Spencera132e042006-12-03 05:46:11 +00001253 std::vector<llvm::Value*> *ValueList;
Reid Spencer14310612006-12-31 05:40:51 +00001254 llvm::ArgListType *ArgList;
1255 llvm::TypeWithAttrs TypeWithAttrs;
1256 llvm::TypeWithAttrsList *TypeWithAttrsList;
1257 llvm::ValueRefList *ValueRefList;
1258
Reid Spencer68a24bd2005-08-27 18:50:39 +00001259 // Represent the RHS of PHI node
Reid Spencera132e042006-12-03 05:46:11 +00001260 std::list<std::pair<llvm::Value*,
1261 llvm::BasicBlock*> > *PHIList;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001262 std::vector<std::pair<llvm::Constant*, llvm::BasicBlock*> > *JumpTable;
Reid Spencera132e042006-12-03 05:46:11 +00001263 std::vector<llvm::Constant*> *ConstVector;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001264
1265 llvm::GlobalValue::LinkageTypes Linkage;
Reid Spencer14310612006-12-31 05:40:51 +00001266 llvm::FunctionType::ParameterAttributes ParamAttrs;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001267 int64_t SInt64Val;
1268 uint64_t UInt64Val;
1269 int SIntVal;
1270 unsigned UIntVal;
1271 double FPVal;
1272 bool BoolVal;
1273
1274 char *StrVal; // This memory is strdup'd!
Reid Spencer1628cec2006-10-26 06:15:43 +00001275 llvm::ValID ValIDVal; // strdup'd memory maybe!
Reid Spencer68a24bd2005-08-27 18:50:39 +00001276
Reid Spencera132e042006-12-03 05:46:11 +00001277 llvm::Instruction::BinaryOps BinaryOpVal;
1278 llvm::Instruction::TermOps TermOpVal;
1279 llvm::Instruction::MemoryOps MemOpVal;
1280 llvm::Instruction::CastOps CastOpVal;
1281 llvm::Instruction::OtherOps OtherOpVal;
Reid Spencer1628cec2006-10-26 06:15:43 +00001282 llvm::Module::Endianness Endianness;
Reid Spencera132e042006-12-03 05:46:11 +00001283 llvm::ICmpInst::Predicate IPredicate;
1284 llvm::FCmpInst::Predicate FPredicate;
Andrew Lenharth6353e052006-12-08 18:07:09 +00001285} YYSTYPE;
Reid Spencere4d87aa2006-12-23 06:05:41 +00001286/* Line 196 of yacc.c. */
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00001287#line 1288 "llvmAsmParser.tab.c"
Reid Spencer3822ff52006-11-08 06:47:33 +00001288# define yystype YYSTYPE /* obsolescent; will be withdrawn */
1289# define YYSTYPE_IS_DECLARED 1
1290# define YYSTYPE_IS_TRIVIAL 1
Reid Spencer68a24bd2005-08-27 18:50:39 +00001291#endif
1292
1293
1294
Reid Spencer3822ff52006-11-08 06:47:33 +00001295/* Copy the second part of user declarations. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00001296
1297
Reid Spencere4d87aa2006-12-23 06:05:41 +00001298/* Line 219 of yacc.c. */
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00001299#line 1300 "llvmAsmParser.tab.c"
Reid Spencere4d87aa2006-12-23 06:05:41 +00001300
1301#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
1302# define YYSIZE_T __SIZE_TYPE__
1303#endif
1304#if ! defined (YYSIZE_T) && defined (size_t)
1305# define YYSIZE_T size_t
1306#endif
1307#if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus))
1308# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1309# define YYSIZE_T size_t
1310#endif
1311#if ! defined (YYSIZE_T)
1312# define YYSIZE_T unsigned int
1313#endif
1314
1315#ifndef YY_
1316# if YYENABLE_NLS
1317# if ENABLE_NLS
1318# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
1319# define YY_(msgid) dgettext ("bison-runtime", msgid)
1320# endif
1321# endif
1322# ifndef YY_
1323# define YY_(msgid) msgid
1324# endif
1325#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00001326
Andrew Lenharth6353e052006-12-08 18:07:09 +00001327#if ! defined (yyoverflow) || YYERROR_VERBOSE
Bill Wendlinge8156192006-12-07 01:30:32 +00001328
Reid Spencer3822ff52006-11-08 06:47:33 +00001329/* The parser invokes alloca or malloc; define the necessary symbols. */
1330
1331# ifdef YYSTACK_USE_ALLOCA
1332# if YYSTACK_USE_ALLOCA
1333# ifdef __GNUC__
1334# define YYSTACK_ALLOC __builtin_alloca
Reid Spencere4d87aa2006-12-23 06:05:41 +00001335# else
1336# define YYSTACK_ALLOC alloca
1337# if defined (__STDC__) || defined (__cplusplus)
1338# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1339# define YYINCLUDED_STDLIB_H
1340# endif
Reid Spencer3822ff52006-11-08 06:47:33 +00001341# endif
1342# endif
1343# endif
1344
1345# ifdef YYSTACK_ALLOC
Andrew Lenharth6353e052006-12-08 18:07:09 +00001346 /* Pacify GCC's `empty if-body' warning. */
1347# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
Reid Spencere4d87aa2006-12-23 06:05:41 +00001348# ifndef YYSTACK_ALLOC_MAXIMUM
1349 /* The OS might guarantee only one guard page at the bottom of the stack,
1350 and a page size can be as small as 4096 bytes. So we cannot safely
1351 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
1352 to allow for a few compiler-allocated temporary stack slots. */
1353# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */
Andrew Lenharth6353e052006-12-08 18:07:09 +00001354# endif
Reid Spencere4d87aa2006-12-23 06:05:41 +00001355# else
Reid Spencer3822ff52006-11-08 06:47:33 +00001356# define YYSTACK_ALLOC YYMALLOC
1357# define YYSTACK_FREE YYFREE
Reid Spencere4d87aa2006-12-23 06:05:41 +00001358# ifndef YYSTACK_ALLOC_MAXIMUM
1359# define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1)
1360# endif
1361# ifdef __cplusplus
1362extern "C" {
1363# endif
1364# ifndef YYMALLOC
1365# define YYMALLOC malloc
1366# if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \
1367 && (defined (__STDC__) || defined (__cplusplus)))
1368void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1369# endif
1370# endif
1371# ifndef YYFREE
1372# define YYFREE free
1373# if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \
1374 && (defined (__STDC__) || defined (__cplusplus)))
1375void free (void *); /* INFRINGES ON USER NAME SPACE */
1376# endif
1377# endif
1378# ifdef __cplusplus
1379}
1380# endif
Reid Spencer3822ff52006-11-08 06:47:33 +00001381# endif
Andrew Lenharth6353e052006-12-08 18:07:09 +00001382#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
Reid Spencer3822ff52006-11-08 06:47:33 +00001383
1384
Andrew Lenharth6353e052006-12-08 18:07:09 +00001385#if (! defined (yyoverflow) \
1386 && (! defined (__cplusplus) \
1387 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
Reid Spencer3822ff52006-11-08 06:47:33 +00001388
1389/* A type that is properly aligned for any stack member. */
1390union yyalloc
1391{
Reid Spencere4d87aa2006-12-23 06:05:41 +00001392 short int yyss;
Reid Spencer3822ff52006-11-08 06:47:33 +00001393 YYSTYPE yyvs;
1394 };
1395
1396/* The size of the maximum gap between one aligned stack and the next. */
1397# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
1398
1399/* The size of an array large to enough to hold all stacks, each with
1400 N elements. */
1401# define YYSTACK_BYTES(N) \
Reid Spencere4d87aa2006-12-23 06:05:41 +00001402 ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \
Reid Spencer3822ff52006-11-08 06:47:33 +00001403 + YYSTACK_GAP_MAXIMUM)
1404
1405/* Copy COUNT objects from FROM to TO. The source and destination do
1406 not overlap. */
1407# ifndef YYCOPY
Andrew Lenharth6353e052006-12-08 18:07:09 +00001408# if defined (__GNUC__) && 1 < __GNUC__
Reid Spencer3822ff52006-11-08 06:47:33 +00001409# define YYCOPY(To, From, Count) \
1410 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
1411# else
1412# define YYCOPY(To, From, Count) \
1413 do \
1414 { \
Reid Spencere4d87aa2006-12-23 06:05:41 +00001415 YYSIZE_T yyi; \
Reid Spencer3822ff52006-11-08 06:47:33 +00001416 for (yyi = 0; yyi < (Count); yyi++) \
1417 (To)[yyi] = (From)[yyi]; \
1418 } \
Andrew Lenharth6353e052006-12-08 18:07:09 +00001419 while (0)
Reid Spencer3822ff52006-11-08 06:47:33 +00001420# endif
1421# endif
1422
1423/* Relocate STACK from its old location to the new one. The
1424 local variables YYSIZE and YYSTACKSIZE give the old and new number of
1425 elements in the stack, and YYPTR gives the new location of the
1426 stack. Advance YYPTR to a properly aligned location for the next
1427 stack. */
1428# define YYSTACK_RELOCATE(Stack) \
1429 do \
1430 { \
1431 YYSIZE_T yynewbytes; \
1432 YYCOPY (&yyptr->Stack, Stack, yysize); \
1433 Stack = &yyptr->Stack; \
1434 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
1435 yyptr += yynewbytes / sizeof (*yyptr); \
1436 } \
Andrew Lenharth6353e052006-12-08 18:07:09 +00001437 while (0)
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00001438
1439#endif
1440
Andrew Lenharth6353e052006-12-08 18:07:09 +00001441#if defined (__STDC__) || defined (__cplusplus)
1442 typedef signed char yysigned_char;
1443#else
Reid Spencere4d87aa2006-12-23 06:05:41 +00001444 typedef short int yysigned_char;
Andrew Lenharth6353e052006-12-08 18:07:09 +00001445#endif
1446
1447/* YYFINAL -- State number of the termination state. */
Reid Spencer6fd36ab2006-12-29 20:35:03 +00001448#define YYFINAL 37
Reid Spencer3822ff52006-11-08 06:47:33 +00001449/* YYLAST -- Last index in YYTABLE. */
Reid Spencer14310612006-12-31 05:40:51 +00001450#define YYLAST 1503
Reid Spencer3822ff52006-11-08 06:47:33 +00001451
Andrew Lenharth6353e052006-12-08 18:07:09 +00001452/* YYNTOKENS -- Number of terminals. */
Reid Spencer14310612006-12-31 05:40:51 +00001453#define YYNTOKENS 150
Andrew Lenharth6353e052006-12-08 18:07:09 +00001454/* YYNNTS -- Number of nonterminals. */
Reid Spencer14310612006-12-31 05:40:51 +00001455#define YYNNTS 77
Andrew Lenharth6353e052006-12-08 18:07:09 +00001456/* YYNRULES -- Number of rules. */
Reid Spencer14310612006-12-31 05:40:51 +00001457#define YYNRULES 288
Andrew Lenharth6353e052006-12-08 18:07:09 +00001458/* YYNRULES -- Number of states. */
Reid Spencer14310612006-12-31 05:40:51 +00001459#define YYNSTATES 572
Reid Spencer3822ff52006-11-08 06:47:33 +00001460
1461/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
1462#define YYUNDEFTOK 2
Reid Spencer14310612006-12-31 05:40:51 +00001463#define YYMAXUTOK 389
Reid Spencer3822ff52006-11-08 06:47:33 +00001464
Reid Spencere4d87aa2006-12-23 06:05:41 +00001465#define YYTRANSLATE(YYX) \
Reid Spencer3822ff52006-11-08 06:47:33 +00001466 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
1467
1468/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
Andrew Lenharth6353e052006-12-08 18:07:09 +00001469static const unsigned char yytranslate[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001470{
1471 0, 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, 2, 2, 2, 2,
1474 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Reid Spencer14310612006-12-31 05:40:51 +00001475 138, 139, 140, 2, 136, 2, 2, 2, 2, 2,
Reid Spencer3822ff52006-11-08 06:47:33 +00001476 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Reid Spencer14310612006-12-31 05:40:51 +00001477 145, 135, 146, 2, 137, 2, 2, 2, 2, 2,
Reid Spencer3822ff52006-11-08 06:47:33 +00001478 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1479 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Reid Spencer14310612006-12-31 05:40:51 +00001480 2, 142, 141, 144, 2, 2, 2, 2, 2, 149,
Reid Spencer3822ff52006-11-08 06:47:33 +00001481 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1482 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Reid Spencer14310612006-12-31 05:40:51 +00001483 143, 2, 2, 147, 2, 148, 2, 2, 2, 2,
Reid Spencer3822ff52006-11-08 06:47:33 +00001484 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1485 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1486 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1487 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1488 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1489 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1490 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1491 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1492 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1493 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1494 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1495 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1496 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
1497 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1498 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1499 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1500 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1501 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
1502 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1503 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
1504 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
1505 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
1506 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
Reid Spencer3da59db2006-11-27 01:05:10 +00001507 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
Reid Spencera132e042006-12-03 05:46:11 +00001508 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
Reid Spencer14310612006-12-31 05:40:51 +00001509 125, 126, 127, 128, 129, 130, 131, 132, 133, 134
Reid Spencer3822ff52006-11-08 06:47:33 +00001510};
1511
1512#if YYDEBUG
1513/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
1514 YYRHS. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00001515static const unsigned short int yyprhs[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001516{
1517 0, 0, 3, 5, 7, 9, 11, 13, 15, 17,
1518 19, 21, 23, 25, 27, 29, 31, 33, 35, 37,
1519 39, 41, 43, 45, 47, 49, 51, 53, 55, 57,
1520 59, 61, 63, 65, 67, 69, 71, 73, 75, 77,
Reid Spencer3da59db2006-11-27 01:05:10 +00001521 79, 81, 83, 85, 87, 89, 91, 93, 95, 97,
Reid Spencera132e042006-12-03 05:46:11 +00001522 99, 101, 103, 105, 107, 109, 111, 113, 115, 117,
Reid Spencer14310612006-12-31 05:40:51 +00001523 119, 121, 123, 125, 128, 129, 131, 133, 135, 137,
1524 139, 141, 143, 145, 146, 148, 150, 151, 153, 155,
1525 157, 159, 160, 162, 164, 166, 168, 170, 172, 175,
1526 177, 179, 181, 185, 186, 189, 194, 195, 198, 199,
1527 203, 206, 207, 209, 210, 214, 216, 219, 221, 223,
1528 225, 227, 229, 231, 233, 235, 237, 239, 242, 244,
1529 247, 253, 259, 265, 271, 275, 278, 284, 289, 292,
1530 295, 298, 300, 304, 306, 310, 312, 313, 315, 319,
1531 324, 328, 332, 337, 342, 346, 349, 352, 355, 358,
1532 361, 364, 367, 370, 373, 376, 383, 389, 398, 405,
1533 412, 420, 428, 435, 442, 451, 460, 464, 466, 468,
1534 470, 472, 473, 475, 478, 479, 483, 484, 488, 492,
1535 494, 498, 502, 503, 509, 510, 517, 518, 525, 528,
1536 532, 534, 536, 538, 542, 546, 550, 554, 558, 562,
1537 564, 565, 567, 569, 571, 572, 578, 582, 584, 588,
1538 590, 591, 600, 602, 604, 608, 610, 612, 615, 618,
1539 619, 621, 623, 625, 627, 629, 631, 633, 635, 637,
1540 641, 643, 649, 651, 653, 655, 657, 660, 663, 666,
1541 670, 673, 674, 676, 679, 682, 686, 696, 706, 715,
1542 729, 731, 733, 740, 746, 749, 756, 764, 768, 774,
1543 775, 776, 780, 783, 785, 791, 797, 804, 811, 814,
1544 819, 824, 831, 836, 841, 848, 855, 858, 866, 868,
1545 870, 871, 875, 882, 886, 893, 896, 901, 908
Reid Spencer3822ff52006-11-08 06:47:33 +00001546};
1547
Andrew Lenharth6353e052006-12-08 18:07:09 +00001548/* YYRHS -- A `-1'-separated list of the rules' RHS. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00001549static const short int yyrhs[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001550{
Reid Spencer14310612006-12-31 05:40:51 +00001551 186, 0, -1, 5, -1, 6, -1, 74, -1, 75,
1552 -1, 76, -1, 77, -1, 78, -1, 79, -1, 80,
Reid Spencer6fd36ab2006-12-29 20:35:03 +00001553 -1, 81, -1, 82, -1, 83, -1, 84, -1, 85,
Reid Spencer14310612006-12-31 05:40:51 +00001554 -1, 114, -1, 115, -1, 116, -1, 117, -1, 118,
Reid Spencer6fd36ab2006-12-29 20:35:03 +00001555 -1, 119, -1, 120, -1, 121, -1, 122, -1, 123,
Reid Spencer14310612006-12-31 05:40:51 +00001556 -1, 124, -1, 125, -1, 128, -1, 129, -1, 130,
1557 -1, 88, -1, 89, -1, 90, -1, 91, -1, 92,
Reid Spencer6fd36ab2006-12-29 20:35:03 +00001558 -1, 93, -1, 94, -1, 95, -1, 96, -1, 97,
1559 -1, 98, -1, 99, -1, 100, -1, 101, -1, 102,
1560 -1, 103, -1, 104, -1, 105, -1, 106, -1, 107,
Reid Spencer14310612006-12-31 05:40:51 +00001561 -1, 94, -1, 95, -1, 96, -1, 97, -1, 23,
1562 -1, 24, -1, 13, -1, 12, -1, 11, -1, 10,
1563 -1, 14, -1, 15, -1, 199, 135, -1, -1, 37,
1564 -1, 39, -1, 38, -1, 40, -1, 42, -1, 41,
1565 -1, 43, -1, 46, -1, -1, 41, -1, 43, -1,
1566 -1, 37, -1, 38, -1, 39, -1, 42, -1, -1,
1567 61, -1, 62, -1, 63, -1, 64, -1, 65, -1,
1568 66, -1, 60, 4, -1, 115, -1, 116, -1, 166,
1569 -1, 167, 136, 166, -1, -1, 137, 166, -1, 137,
1570 138, 167, 139, -1, -1, 53, 4, -1, -1, 136,
1571 53, 4, -1, 31, 20, -1, -1, 171, -1, -1,
1572 136, 174, 173, -1, 171, -1, 53, 4, -1, 9,
1573 -1, 10, -1, 11, -1, 12, -1, 13, -1, 14,
1574 -1, 15, -1, 16, -1, 44, -1, 175, -1, 176,
1575 140, -1, 211, -1, 141, 4, -1, 176, 168, 138,
1576 180, 139, -1, 8, 168, 138, 180, 139, -1, 142,
1577 4, 143, 176, 144, -1, 145, 4, 143, 176, 146,
1578 -1, 147, 181, 148, -1, 147, 148, -1, 145, 147,
1579 181, 148, 146, -1, 145, 147, 148, 146, -1, 176,
1580 168, -1, 176, 168, -1, 8, 168, -1, 177, -1,
1581 179, 136, 177, -1, 179, -1, 179, 136, 34, -1,
1582 34, -1, -1, 176, -1, 181, 136, 176, -1, 176,
1583 142, 184, 144, -1, 176, 142, 144, -1, 176, 149,
1584 20, -1, 176, 145, 184, 146, -1, 176, 147, 184,
1585 148, -1, 176, 147, 148, -1, 176, 35, -1, 176,
1586 36, -1, 176, 211, -1, 176, 183, -1, 176, 22,
1587 -1, 158, 3, -1, 158, 4, -1, 9, 23, -1,
1588 9, 24, -1, 159, 7, -1, 154, 138, 182, 33,
1589 176, 139, -1, 113, 138, 182, 222, 139, -1, 127,
1590 138, 182, 136, 182, 136, 182, 139, -1, 152, 138,
1591 182, 136, 182, 139, -1, 153, 138, 182, 136, 182,
1592 139, -1, 86, 156, 138, 182, 136, 182, 139, -1,
1593 87, 157, 138, 182, 136, 182, 139, -1, 155, 138,
1594 182, 136, 182, 139, -1, 132, 138, 182, 136, 182,
1595 139, -1, 133, 138, 182, 136, 182, 136, 182, 139,
1596 -1, 134, 138, 182, 136, 182, 136, 182, 139, -1,
1597 184, 136, 182, -1, 182, -1, 29, -1, 30, -1,
1598 187, -1, -1, 188, -1, 187, 188, -1, -1, 28,
1599 189, 207, -1, -1, 27, 190, 208, -1, 58, 57,
1600 194, -1, 21, -1, 160, 17, 176, -1, 160, 17,
1601 8, -1, -1, 160, 185, 182, 191, 173, -1, -1,
1602 160, 161, 185, 182, 192, 173, -1, -1, 160, 162,
1603 185, 176, 193, 173, -1, 47, 196, -1, 54, 135,
1604 197, -1, 20, -1, 52, -1, 51, -1, 49, 135,
1605 195, -1, 50, 135, 4, -1, 48, 135, 20, -1,
1606 67, 135, 20, -1, 142, 198, 144, -1, 198, 136,
1607 20, -1, 20, -1, -1, 18, -1, 20, -1, 199,
1608 -1, -1, 201, 136, 176, 168, 200, -1, 176, 168,
1609 200, -1, 201, -1, 201, 136, 34, -1, 34, -1,
1610 -1, 165, 178, 199, 138, 202, 139, 172, 169, -1,
1611 25, -1, 147, -1, 164, 203, 204, -1, 26, -1,
1612 148, -1, 214, 206, -1, 163, 203, -1, -1, 59,
1613 -1, 3, -1, 4, -1, 7, -1, 23, -1, 24,
1614 -1, 35, -1, 36, -1, 22, -1, 145, 184, 146,
1615 -1, 183, -1, 57, 209, 20, 136, 20, -1, 151,
1616 -1, 199, -1, 211, -1, 210, -1, 176, 212, -1,
1617 214, 215, -1, 205, 215, -1, 216, 160, 217, -1,
1618 216, 219, -1, -1, 19, -1, 68, 213, -1, 68,
1619 8, -1, 69, 16, 212, -1, 69, 9, 212, 136,
1620 16, 212, 136, 16, 212, -1, 70, 158, 212, 136,
1621 16, 212, 142, 218, 144, -1, 70, 158, 212, 136,
1622 16, 212, 142, 144, -1, 71, 165, 178, 212, 138,
1623 221, 139, 33, 16, 212, 72, 16, 212, -1, 72,
1624 -1, 73, -1, 218, 158, 210, 136, 16, 212, -1,
1625 158, 210, 136, 16, 212, -1, 160, 224, -1, 176,
1626 142, 212, 136, 212, 144, -1, 220, 136, 142, 212,
1627 136, 212, 144, -1, 176, 212, 168, -1, 221, 136,
1628 176, 212, 168, -1, -1, -1, 222, 136, 213, -1,
1629 56, 55, -1, 55, -1, 152, 176, 212, 136, 212,
1630 -1, 153, 176, 212, 136, 212, -1, 86, 156, 176,
1631 212, 136, 212, -1, 87, 157, 176, 212, 136, 212,
1632 -1, 45, 213, -1, 155, 213, 136, 213, -1, 154,
1633 213, 33, 176, -1, 127, 213, 136, 213, 136, 213,
1634 -1, 131, 213, 136, 176, -1, 132, 213, 136, 213,
1635 -1, 133, 213, 136, 213, 136, 213, -1, 134, 213,
1636 136, 213, 136, 213, -1, 126, 220, -1, 223, 165,
1637 178, 212, 138, 221, 139, -1, 226, -1, 32, -1,
1638 -1, 108, 176, 170, -1, 108, 176, 136, 12, 212,
1639 170, -1, 109, 176, 170, -1, 109, 176, 136, 12,
1640 212, 170, -1, 110, 213, -1, 225, 111, 176, 212,
1641 -1, 225, 112, 213, 136, 176, 212, -1, 113, 176,
1642 212, 222, -1
Reid Spencer3822ff52006-11-08 06:47:33 +00001643};
1644
1645/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00001646static const unsigned short int yyrline[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001647{
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00001648 0, 1035, 1035, 1036, 1046, 1046, 1046, 1046, 1046, 1046,
1649 1046, 1046, 1046, 1047, 1047, 1047, 1048, 1048, 1048, 1048,
1650 1048, 1048, 1049, 1049, 1049, 1049, 1049, 1049, 1050, 1050,
1651 1050, 1052, 1052, 1053, 1053, 1054, 1054, 1055, 1055, 1056,
1652 1056, 1060, 1060, 1061, 1061, 1062, 1062, 1063, 1063, 1064,
1653 1064, 1065, 1065, 1066, 1066, 1067, 1068, 1073, 1073, 1073,
1654 1073, 1074, 1074, 1077, 1081, 1087, 1088, 1089, 1090, 1091,
1655 1095, 1096, 1097, 1101, 1102, 1103, 1107, 1108, 1109, 1110,
1656 1111, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1128,
1657 1129, 1132, 1133, 1138, 1139, 1140, 1145, 1146, 1152, 1153,
1658 1161, 1169, 1170, 1175, 1176, 1177, 1182, 1195, 1195, 1195,
1659 1195, 1195, 1195, 1195, 1195, 1198, 1202, 1206, 1213, 1218,
1660 1226, 1244, 1262, 1267, 1279, 1289, 1293, 1303, 1310, 1317,
1661 1325, 1331, 1336, 1343, 1344, 1351, 1358, 1366, 1371, 1382,
1662 1410, 1426, 1455, 1483, 1504, 1519, 1531, 1538, 1601, 1610,
1663 1620, 1626, 1632, 1636, 1640, 1648, 1662, 1683, 1691, 1697,
1664 1708, 1713, 1718, 1727, 1733, 1739, 1748, 1752, 1760, 1760,
1665 1771, 1776, 1784, 1785, 1789, 1789, 1793, 1793, 1796, 1799,
1666 1811, 1835, 1846, 1846, 1855, 1855, 1863, 1863, 1873, 1876,
1667 1882, 1895, 1896, 1898, 1902, 1911, 1915, 1920, 1922, 1927,
1668 1932, 1941, 1941, 1942, 1942, 1944, 1954, 1965, 1969, 1978,
1669 1987, 1992, 2097, 2097, 2099, 2107, 2107, 2109, 2114, 2125,
1670 2129, 2134, 2138, 2142, 2146, 2150, 2154, 2158, 2162, 2166,
1671 2191, 2195, 2209, 2213, 2219, 2219, 2225, 2234, 2238, 2247,
1672 2258, 2267, 2279, 2292, 2296, 2300, 2305, 2314, 2333, 2342,
1673 2409, 2413, 2420, 2431, 2444, 2453, 2464, 2474, 2482, 2490,
1674 2493, 2494, 2501, 2505, 2510, 2531, 2548, 2561, 2574, 2587,
1675 2596, 2609, 2617, 2624, 2630, 2636, 2642, 2657, 2719, 2724,
1676 2728, 2735, 2742, 2750, 2757, 2765, 2773, 2787, 2804
Reid Spencer3822ff52006-11-08 06:47:33 +00001677};
1678#endif
1679
Reid Spencere4d87aa2006-12-23 06:05:41 +00001680#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
1681/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
Andrew Lenharth6353e052006-12-08 18:07:09 +00001682 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
Reid Spencer3822ff52006-11-08 06:47:33 +00001683static const char *const yytname[] =
1684{
1685 "$end", "error", "$undefined", "ESINT64VAL", "EUINT64VAL", "SINTVAL",
Reid Spencer14310612006-12-31 05:40:51 +00001686 "UINTVAL", "FPVAL", "VOID", "BOOL", "INT8", "INT16", "INT32", "INT64",
1687 "FLOAT", "DOUBLE", "LABEL", "TYPE", "VAR_ID", "LABELSTR",
1688 "STRINGCONSTANT", "IMPLEMENTATION", "ZEROINITIALIZER", "TRUETOK",
1689 "FALSETOK", "BEGINTOK", "ENDTOK", "DECLARE", "DEFINE", "GLOBAL",
1690 "CONSTANT", "SECTION", "VOLATILE", "TO", "DOTDOTDOT", "NULL_TOK",
1691 "UNDEF", "INTERNAL", "LINKONCE", "WEAK", "APPENDING", "DLLIMPORT",
1692 "DLLEXPORT", "EXTERN_WEAK", "OPAQUE", "NOT", "EXTERNAL", "TARGET",
1693 "TRIPLE", "ENDIAN", "POINTERSIZE", "LITTLE", "BIG", "ALIGN", "DEPLIBS",
1694 "CALL", "TAIL", "ASM_TOK", "MODULE", "SIDEEFFECT", "CC_TOK", "CCC_TOK",
1695 "CSRETCC_TOK", "FASTCC_TOK", "COLDCC_TOK", "X86_STDCALLCC_TOK",
1696 "X86_FASTCALLCC_TOK", "DATALAYOUT", "RET", "BR", "SWITCH", "INVOKE",
1697 "UNWIND", "UNREACHABLE", "ADD", "SUB", "MUL", "UDIV", "SDIV", "FDIV",
1698 "UREM", "SREM", "FREM", "AND", "OR", "XOR", "ICMP", "FCMP", "EQ", "NE",
1699 "SLT", "SGT", "SLE", "SGE", "ULT", "UGT", "ULE", "UGE", "OEQ", "ONE",
1700 "OLT", "OGT", "OLE", "OGE", "ORD", "UNO", "UEQ", "UNE", "MALLOC",
1701 "ALLOCA", "FREE", "LOAD", "STORE", "GETELEMENTPTR", "TRUNC", "ZEXT",
1702 "SEXT", "FPTRUNC", "FPEXT", "BITCAST", "UITOFP", "SITOFP", "FPTOUI",
1703 "FPTOSI", "INTTOPTR", "PTRTOINT", "PHI_TOK", "SELECT", "SHL", "LSHR",
1704 "ASHR", "VAARG", "EXTRACTELEMENT", "INSERTELEMENT", "SHUFFLEVECTOR",
1705 "'='", "','", "'@'", "'('", "')'", "'*'", "'\\\\'", "'['", "'x'", "']'",
1706 "'<'", "'>'", "'{'", "'}'", "'c'", "$accept", "INTVAL", "ArithmeticOps",
1707 "LogicalOps", "CastOps", "ShiftOps", "IPredicates", "FPredicates",
1708 "IntType", "FPType", "OptAssign", "GVInternalLinkage",
1709 "GVExternalLinkage", "FunctionDeclareLinkage", "FunctionDefineLinkage",
1710 "OptCallingConv", "ParamAttr", "ParamAttrList", "OptParamAttrs",
1711 "OptAlign", "OptCAlign", "SectionString", "OptSection",
1712 "GlobalVarAttributes", "GlobalVarAttribute", "PrimType", "Types",
1713 "ArgType", "ResultType", "ArgTypeList", "ArgTypeListI", "TypeListI",
1714 "ConstVal", "ConstExpr", "ConstVector", "GlobalType", "Module",
1715 "DefinitionList", "Definition", "@1", "@2", "@3", "@4", "@5", "AsmBlock",
1716 "BigOrLittle", "TargetDefinition", "LibrariesDefinition", "LibList",
1717 "Name", "OptName", "ArgListH", "ArgList", "FunctionHeaderH", "BEGIN",
Reid Spencer6fd36ab2006-12-29 20:35:03 +00001718 "FunctionHeader", "END", "Function", "FunctionProto", "OptSideEffect",
1719 "ConstValueRef", "SymbolicValueRef", "ValueRef", "ResolvedVal",
1720 "BasicBlockList", "BasicBlock", "InstructionList", "BBTerminatorInst",
Reid Spencer14310612006-12-31 05:40:51 +00001721 "JumpTable", "Inst", "PHIList", "ValueRefList", "IndexList",
1722 "OptTailCall", "InstVal", "OptVolatile", "MemoryInst", 0
Reid Spencer3822ff52006-11-08 06:47:33 +00001723};
1724#endif
1725
1726# ifdef YYPRINT
1727/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
1728 token YYLEX-NUM. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00001729static const unsigned short int yytoknum[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001730{
1731 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
1732 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
1733 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
1734 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
1735 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
1736 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
1737 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
1738 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
1739 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
1740 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
1741 355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
Reid Spencer3da59db2006-11-27 01:05:10 +00001742 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
Reid Spencera132e042006-12-03 05:46:11 +00001743 375, 376, 377, 378, 379, 380, 381, 382, 383, 384,
Reid Spencer14310612006-12-31 05:40:51 +00001744 385, 386, 387, 388, 389, 61, 44, 64, 40, 41,
1745 42, 92, 91, 120, 93, 60, 62, 123, 125, 99
Reid Spencer3822ff52006-11-08 06:47:33 +00001746};
1747# endif
1748
1749/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
Andrew Lenharth6353e052006-12-08 18:07:09 +00001750static const unsigned char yyr1[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001751{
Reid Spencer14310612006-12-31 05:40:51 +00001752 0, 150, 151, 151, 152, 152, 152, 152, 152, 152,
1753 152, 152, 152, 153, 153, 153, 154, 154, 154, 154,
1754 154, 154, 154, 154, 154, 154, 154, 154, 155, 155,
1755 155, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1756 156, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1757 157, 157, 157, 157, 157, 157, 157, 158, 158, 158,
1758 158, 159, 159, 160, 160, 161, 161, 161, 161, 161,
1759 162, 162, 162, 163, 163, 163, 164, 164, 164, 164,
1760 164, 165, 165, 165, 165, 165, 165, 165, 165, 166,
1761 166, 167, 167, 168, 168, 168, 169, 169, 170, 170,
1762 171, 172, 172, 173, 173, 174, 174, 175, 175, 175,
1763 175, 175, 175, 175, 175, 176, 176, 176, 176, 176,
1764 176, 176, 176, 176, 176, 176, 176, 176, 177, 178,
1765 178, 179, 179, 180, 180, 180, 180, 181, 181, 182,
1766 182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
1767 182, 182, 182, 182, 182, 183, 183, 183, 183, 183,
1768 183, 183, 183, 183, 183, 183, 184, 184, 185, 185,
1769 186, 186, 187, 187, 189, 188, 190, 188, 188, 188,
1770 188, 188, 191, 188, 192, 188, 193, 188, 188, 188,
1771 194, 195, 195, 196, 196, 196, 196, 197, 198, 198,
1772 198, 199, 199, 200, 200, 201, 201, 202, 202, 202,
1773 202, 203, 204, 204, 205, 206, 206, 207, 208, 209,
1774 209, 210, 210, 210, 210, 210, 210, 210, 210, 210,
1775 210, 210, 211, 211, 212, 212, 213, 214, 214, 215,
1776 216, 216, 216, 217, 217, 217, 217, 217, 217, 217,
1777 217, 217, 218, 218, 219, 220, 220, 221, 221, 221,
1778 222, 222, 223, 223, 224, 224, 224, 224, 224, 224,
1779 224, 224, 224, 224, 224, 224, 224, 224, 224, 225,
1780 225, 226, 226, 226, 226, 226, 226, 226, 226
Reid Spencer3822ff52006-11-08 06:47:33 +00001781};
1782
1783/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
Andrew Lenharth6353e052006-12-08 18:07:09 +00001784static const unsigned char yyr2[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001785{
1786 0, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1787 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1788 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencer3822ff52006-11-08 06:47:33 +00001789 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencer3da59db2006-11-27 01:05:10 +00001790 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencer3da59db2006-11-27 01:05:10 +00001791 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencer14310612006-12-31 05:40:51 +00001792 1, 1, 1, 2, 0, 1, 1, 1, 1, 1,
1793 1, 1, 1, 0, 1, 1, 0, 1, 1, 1,
1794 1, 0, 1, 1, 1, 1, 1, 1, 2, 1,
1795 1, 1, 3, 0, 2, 4, 0, 2, 0, 3,
1796 2, 0, 1, 0, 3, 1, 2, 1, 1, 1,
1797 1, 1, 1, 1, 1, 1, 1, 2, 1, 2,
1798 5, 5, 5, 5, 3, 2, 5, 4, 2, 2,
1799 2, 1, 3, 1, 3, 1, 0, 1, 3, 4,
1800 3, 3, 4, 4, 3, 2, 2, 2, 2, 2,
1801 2, 2, 2, 2, 2, 6, 5, 8, 6, 6,
1802 7, 7, 6, 6, 8, 8, 3, 1, 1, 1,
1803 1, 0, 1, 2, 0, 3, 0, 3, 3, 1,
1804 3, 3, 0, 5, 0, 6, 0, 6, 2, 3,
1805 1, 1, 1, 3, 3, 3, 3, 3, 3, 1,
1806 0, 1, 1, 1, 0, 5, 3, 1, 3, 1,
1807 0, 8, 1, 1, 3, 1, 1, 2, 2, 0,
1808 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
1809 1, 5, 1, 1, 1, 1, 2, 2, 2, 3,
1810 2, 0, 1, 2, 2, 3, 9, 9, 8, 13,
1811 1, 1, 6, 5, 2, 6, 7, 3, 5, 0,
1812 0, 3, 2, 1, 5, 5, 6, 6, 2, 4,
1813 4, 6, 4, 4, 6, 6, 2, 7, 1, 1,
1814 0, 3, 6, 3, 6, 2, 4, 6, 4
Reid Spencer3822ff52006-11-08 06:47:33 +00001815};
1816
1817/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
1818 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
1819 means the default is an error. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00001820static const unsigned short int yydefact[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001821{
Reid Spencer14310612006-12-31 05:40:51 +00001822 64, 201, 202, 179, 176, 174, 0, 0, 0, 0,
1823 0, 64, 172, 0, 73, 76, 0, 0, 0, 0,
1824 188, 0, 0, 0, 168, 169, 65, 67, 66, 68,
1825 70, 69, 71, 72, 0, 0, 0, 1, 173, 63,
1826 74, 75, 81, 177, 77, 78, 79, 80, 81, 241,
1827 175, 241, 0, 0, 0, 0, 200, 189, 190, 178,
1828 2, 3, 181, 107, 108, 109, 110, 111, 112, 113,
1829 114, 115, 0, 0, 0, 0, 232, 116, 180, 233,
1830 118, 0, 0, 93, 107, 108, 109, 110, 111, 112,
1831 113, 0, 0, 93, 182, 0, 82, 83, 84, 85,
1832 86, 87, 0, 218, 0, 242, 238, 64, 215, 216,
1833 217, 237, 195, 192, 191, 193, 194, 196, 199, 0,
1834 0, 0, 119, 0, 0, 0, 125, 137, 0, 117,
1835 0, 184, 186, 152, 153, 150, 151, 154, 149, 145,
1836 146, 4, 5, 6, 7, 8, 9, 10, 11, 12,
1837 13, 14, 15, 0, 0, 0, 16, 17, 18, 19,
1838 20, 21, 22, 23, 24, 25, 26, 27, 0, 28,
1839 29, 30, 0, 0, 0, 0, 0, 0, 0, 0,
1840 0, 0, 0, 148, 147, 103, 88, 93, 93, 0,
1841 212, 213, 214, 280, 240, 0, 197, 89, 90, 0,
1842 94, 136, 0, 0, 0, 0, 0, 124, 136, 103,
1843 103, 31, 32, 33, 34, 35, 36, 37, 38, 39,
1844 40, 0, 55, 56, 51, 52, 53, 54, 41, 42,
1845 43, 44, 45, 46, 47, 48, 49, 50, 0, 0,
1846 0, 0, 0, 0, 140, 167, 0, 0, 144, 0,
1847 141, 0, 0, 0, 0, 0, 183, 130, 129, 0,
1848 279, 0, 263, 0, 0, 0, 0, 81, 250, 251,
Reid Spencer3822ff52006-11-08 06:47:33 +00001849 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencer14310612006-12-31 05:40:51 +00001850 0, 0, 0, 0, 0, 0, 239, 81, 254, 0,
1851 278, 198, 91, 0, 135, 93, 131, 133, 0, 93,
1852 93, 127, 0, 138, 0, 185, 187, 0, 0, 260,
1853 0, 0, 0, 0, 0, 139, 142, 143, 0, 0,
1854 0, 0, 0, 0, 105, 103, 210, 93, 268, 262,
1855 244, 243, 0, 0, 60, 59, 58, 57, 0, 0,
1856 0, 0, 98, 98, 285, 93, 93, 276, 0, 0,
1857 0, 0, 0, 93, 93, 0, 0, 0, 0, 0,
1858 0, 95, 128, 0, 121, 122, 123, 126, 120, 0,
1859 0, 0, 0, 0, 0, 0, 166, 0, 0, 0,
1860 0, 100, 106, 104, 209, 93, 207, 0, 221, 222,
1861 223, 228, 224, 225, 226, 227, 219, 0, 230, 235,
1862 234, 236, 0, 245, 0, 0, 93, 93, 0, 281,
1863 0, 283, 260, 0, 0, 0, 0, 0, 0, 0,
1864 0, 0, 0, 0, 0, 93, 0, 92, 134, 132,
1865 0, 0, 0, 156, 0, 0, 0, 0, 0, 0,
1866 93, 0, 204, 0, 101, 220, 0, 0, 0, 0,
1867 0, 0, 0, 0, 0, 0, 288, 0, 0, 0,
1868 272, 273, 0, 0, 0, 0, 270, 269, 0, 286,
1869 0, 0, 0, 261, 0, 163, 0, 0, 158, 159,
1870 155, 162, 203, 206, 208, 93, 102, 96, 0, 229,
1871 0, 0, 259, 0, 0, 98, 99, 98, 0, 0,
1872 0, 0, 0, 264, 265, 259, 93, 160, 161, 0,
1873 0, 0, 204, 0, 211, 0, 0, 0, 93, 0,
1874 266, 267, 0, 282, 284, 0, 0, 271, 274, 275,
1875 0, 287, 157, 164, 165, 205, 97, 231, 0, 0,
1876 93, 0, 0, 255, 0, 277, 0, 248, 0, 0,
1877 257, 93, 0, 256, 246, 0, 247, 0, 93, 0,
1878 0, 0, 258, 0, 0, 0, 0, 253, 0, 0,
1879 252, 249
Reid Spencer3822ff52006-11-08 06:47:33 +00001880};
1881
Andrew Lenharth6353e052006-12-08 18:07:09 +00001882/* YYDEFGOTO[NTERM-NUM]. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00001883static const short int yydefgoto[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001884{
Reid Spencer14310612006-12-31 05:40:51 +00001885 -1, 76, 179, 180, 181, 182, 221, 238, 91, 92,
1886 9, 34, 35, 42, 48, 102, 200, 293, 130, 514,
1887 409, 324, 487, 256, 325, 77, 93, 296, 189, 297,
1888 298, 128, 245, 398, 246, 36, 10, 11, 12, 15,
1889 14, 185, 209, 210, 59, 115, 20, 57, 119, 79,
1890 483, 386, 387, 103, 192, 49, 110, 50, 43, 446,
1891 399, 80, 401, 328, 51, 106, 107, 286, 549, 194,
1892 347, 519, 371, 287, 288, 289, 290
Reid Spencer3822ff52006-11-08 06:47:33 +00001893};
1894
1895/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1896 STATE-NUM. */
Reid Spencer14310612006-12-31 05:40:51 +00001897#define YYPACT_NINF -444
Reid Spencere4d87aa2006-12-23 06:05:41 +00001898static const short int yypact[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001899{
Reid Spencer14310612006-12-31 05:40:51 +00001900 76, -444, -444, -444, -444, -444, -14, -77, 12, 548,
1901 89, 91, -444, -40, 79, 116, -36, -29, -11, -3,
1902 -444, 14, 119, 949, -444, -444, -444, -444, -444, -444,
1903 -444, -444, -444, -444, 15, 15, 1230, -444, -444, -444,
1904 -444, -444, 131, -444, -444, -444, -444, -444, 131, 124,
1905 -444, -2, 130, -12, 173, 179, 188, -444, -444, -444,
1906 -444, -444, 25, -444, -444, -444, -444, -444, -444, -444,
1907 -444, -444, 212, 214, 4, 72, -444, -444, 44, -444,
1908 -444, 1230, 1271, 103, 152, 207, 225, 243, 260, 230,
1909 241, 262, 269, 575, -444, 263, -444, -444, -444, -444,
1910 -444, -444, 1288, -444, -16, -444, -444, 117, -444, -444,
1911 -444, -444, -444, -444, -444, -444, -444, -444, -444, -19,
1912 -84, 140, -444, 136, 139, 539, -444, 44, -99, -444,
1913 150, -444, 44, -444, -444, -444, -444, -444, -444, -444,
1914 -444, -444, -444, -444, -444, -444, -444, -444, -444, -444,
1915 -444, -444, -444, 77, 283, 151, -444, -444, -444, -444,
1916 -444, -444, -444, -444, -444, -444, -444, -444, 154, -444,
1917 -444, -444, 156, 157, 158, 806, 1230, 720, 270, 159,
1918 162, 166, 170, -444, -444, 155, -444, 103, 20, 117,
1919 -444, -444, -444, 1369, -444, 289, -444, -444, -444, 153,
1920 -444, 1123, 1271, 1271, 164, -98, 1271, -444, 1123, 155,
1921 155, -444, -444, -444, -444, -444, -444, -444, -444, -444,
1922 -444, 174, -444, -444, -444, -444, -444, -444, -444, -444,
1923 -444, -444, -444, -444, -444, -444, -444, -444, 175, 1230,
1924 1230, 1230, 1230, 1230, -444, -444, -15, -90, -444, -93,
1925 -444, 1230, 1230, 1230, 1230, -5, -444, 140, 150, 177,
1926 -444, 1271, -444, 256, 1329, 84, 176, 131, -444, -444,
1927 77, 283, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271,
1928 1271, 1271, 1271, 1271, 1271, 1271, -444, 131, -444, 160,
1929 -444, -444, -444, 5, -444, 20, -444, 178, 180, -4,
1930 -39, -444, 181, 44, 182, -444, -444, 1230, 1230, -444,
1931 184, 186, 187, 190, 1230, -444, -444, -444, 192, 193,
1932 291, 194, 311, 328, -444, 155, 1169, 756, -444, -444,
1933 25, -444, 899, 899, -444, -444, -444, -444, 899, 1288,
1934 1271, 1271, 67, 85, -444, 756, -27, 197, 201, 202,
1935 203, 205, 206, 756, 756, 310, 208, 1288, 1271, 1271,
1936 153, -444, 150, 1186, -444, -444, -444, -444, -444, 209,
1937 210, 73, 1230, 1230, 1230, 1230, -444, 1230, 1230, 1271,
1938 1230, -444, -444, -444, -444, 20, 211, 213, -444, -444,
1939 -444, -444, -444, -444, -444, -444, 290, 1230, -444, -444,
1940 -444, -444, 215, -444, 221, 899, 756, 756, 13, -444,
1941 17, -444, -444, 899, 216, 1271, 1271, 1271, 1271, 1271,
1942 223, 224, 1271, 1271, 899, 756, 226, -444, -444, -444,
1943 1230, 1230, 1271, -444, 231, 235, 234, 240, 236, 252,
1944 -66, 258, 10, 1213, 317, -444, 330, -71, 382, 386,
1945 266, 271, 272, 899, 401, 899, 278, 279, 899, 281,
1946 44, -444, 282, 288, 899, 899, 44, -444, 292, -444,
1947 1271, 280, 287, -444, 1230, -444, 1230, 1230, -444, -444,
1948 -444, -444, -444, -444, -444, 20, -444, 374, 293, -444,
1949 899, 899, 1271, 899, 899, 297, -444, 297, 899, 298,
1950 1271, 1271, 1271, -444, -444, 1271, 756, -444, -444, 296,
1951 301, 305, 10, 424, -444, 416, 309, 295, 756, 88,
1952 -444, -444, 395, -444, -444, 306, 899, -444, -444, -444,
1953 100, -444, -444, -444, -444, -444, -444, -444, 433, 3,
1954 103, 1271, 418, -444, 308, -444, 899, -444, 1031, 8,
1955 -444, 756, 437, -444, -444, 319, -444, 1031, 103, 899,
1956 440, 321, -444, 387, 899, 442, 444, -444, 899, 899,
1957 -444, -444
Reid Spencer3822ff52006-11-08 06:47:33 +00001958};
1959
1960/* YYPGOTO[NTERM-NUM]. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00001961static const short int yypgoto[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001962{
Reid Spencer14310612006-12-31 05:40:51 +00001963 -444, -444, 268, 277, 294, 299, 218, 191, -262, -444,
1964 356, -444, -444, -444, -444, -245, -196, -444, -60, -444,
1965 -336, 27, -444, -199, -444, -444, -23, 101, -306, -444,
1966 264, 348, -9, 383, -171, 239, -444, -444, 464, -444,
1967 -444, -444, -444, -444, -444, -444, -444, -444, -444, 1,
1968 -31, -444, -444, 438, -444, -444, -444, -444, -444, -444,
1969 -443, -52, 78, -217, -444, 439, -444, -444, -444, -444,
1970 -444, -10, 81, -444, -444, -444, -444
Reid Spencer3822ff52006-11-08 06:47:33 +00001971};
1972
1973/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
1974 positive, shift that token. If negative, reduce the rule which
1975 number is the opposite. If zero, do what YYDEFACT says.
1976 If YYTABLE_NINF, syntax error. */
Reid Spencer14310612006-12-31 05:40:51 +00001977#define YYTABLE_NINF -172
Reid Spencere4d87aa2006-12-23 06:05:41 +00001978static const short int yytable[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001979{
Reid Spencer14310612006-12-31 05:40:51 +00001980 78, 13, 121, 292, 338, 247, 249, 411, 124, 190,
1981 305, 306, 13, 334, 335, 336, 337, 105, 334, 335,
1982 336, 337, 339, 121, 108, 453, 322, 94, 1, 455,
1983 2, 197, 198, 405, 16, 17, 18, 206, 206, 113,
1984 114, 184, 357, 314, 24, 25, 314, 331, 323, 207,
1985 302, 424, 127, 19, 199, 317, 316, 344, 21, 132,
1986 348, 349, 350, 351, 352, 314, 454, 355, 356, 22,
1987 454, 120, 131, 480, 129, 489, -171, 60, 61, 188,
1988 83, 63, 64, 65, 66, 67, 68, 69, 70, 37,
1989 1, -170, 2, 332, 1, 39, 2, 3, 120, 52,
1990 333, 129, 127, 4, 5, 555, 53, 366, 13, 1,
1991 120, 2, 3, 129, 561, 413, 71, 195, 4, 5,
1992 40, 314, 41, 6, 54, 196, 383, 257, 258, 315,
1993 7, 191, 55, 120, 8, 1, 129, 2, 6, 58,
1994 365, 360, 426, 105, 361, 7, 109, 547, 208, 8,
1995 112, 125, 556, 44, 45, 46, 56, 120, 47, 523,
1996 129, 524, 120, -93, 427, 211, 212, 213, 214, 215,
1997 216, 217, 218, 219, 220, 133, 134, 116, 295, 299,
1998 300, 120, -93, 303, 129, 295, 334, 335, 336, 337,
1999 259, 95, 96, 97, 98, 99, 100, 101, 459, 117,
2000 461, 462, 463, 408, 120, -93, 467, 129, 118, 432,
2001 -60, -60, 433, 72, 73, 473, 122, 74, 123, 75,
2002 126, 410, 120, -93, 541, 129, 447, 542, -59, -59,
2003 309, 310, 311, 312, 313, 362, 541, -61, 327, 545,
2004 120, 327, 318, 319, 320, 321, -58, -58, -62, 342,
2005 343, 327, 345, 346, 327, 327, 327, 327, 327, 353,
2006 354, 327, 327, -57, -57, 135, 136, 186, 197, 198,
2007 121, 358, 359, 81, 82, 400, 137, 548, 201, 202,
2008 400, 400, 203, 527, 528, 529, 400, 557, 208, 239,
2009 250, 255, 240, 400, 241, 242, 243, 251, 369, 370,
2010 252, 400, 400, 385, 253, 376, 222, 223, 254, 291,
2011 301, 329, 307, 308, 363, 326, 188, 406, 407, 364,
2012 372, 368, 373, 374, 379, 442, 375, 367, 377, 378,
2013 380, 381, 382, 414, 188, 425, 327, 415, 416, 417,
2014 295, 418, 419, 422, 423, 430, 431, 443, 322, 445,
2015 488, 448, 444, 400, 400, 400, 440, 449, 458, 464,
2016 465, 400, 470, 434, 435, 436, 437, 474, 438, 439,
2017 476, 441, 400, 400, 475, 478, 477, 224, 225, 226,
2018 227, 228, 229, 230, 231, 232, 233, 234, 235, 236,
2019 237, 479, 327, 460, 327, 327, 327, 481, 490, 466,
2020 327, 400, 491, 400, 492, 496, 400, 493, 494, 327,
2021 402, 403, 400, 400, 432, 498, 404, 500, 501, 507,
2022 485, 471, 472, 412, 502, 512, 508, 513, 536, 515,
2023 505, 420, 421, 522, 526, 532, 537, 539, 400, 400,
2024 533, 400, 400, 482, 534, 538, 400, 506, 454, 546,
2025 543, 552, 553, 559, 400, 560, 564, 565, 568, 566,
2026 569, 282, 341, 193, 429, 509, 400, 510, 511, 518,
2027 283, 486, 304, 205, 400, 38, 183, 327, 327, 327,
2028 550, 535, 518, 450, 451, 452, 104, 284, 340, 0,
2029 111, 457, 285, 456, 400, 530, 0, 0, 562, 400,
2030 0, 0, 468, 469, 0, 0, 0, 400, 0, 0,
2031 0, 0, 400, 482, 0, 0, 400, 400, 551, 0,
2032 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2033 0, 495, 0, 497, 0, 0, 499, 0, 0, 0,
2034 0, 0, 503, 504, 60, 61, 0, 83, 63, 64,
2035 65, 66, 67, 68, 69, 70, 0, 1, 0, 2,
2036 0, 0, 0, 0, 0, 23, 0, 0, 516, 517,
2037 0, 520, 521, 0, 0, 0, 525, 24, 25, 0,
2038 60, 61, 0, 71, 531, 26, 27, 28, 29, 30,
2039 31, 32, 0, 1, 33, 2, 540, 138, 0, 0,
2040 0, 0, 0, 0, 544, 0, 0, 0, 0, 0,
2041 139, 140, 0, 0, 0, 0, 0, 0, 0, 0,
2042 0, 0, 0, 0, 554, 0, 0, 0, 0, 558,
2043 0, 0, 0, 0, 0, 0, 0, 563, 0, 0,
2044 0, 0, 567, 0, 0, 0, 570, 571, 0, 141,
2045 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
2046 152, 153, 154, 0, 0, 0, 0, 0, 0, 0,
2047 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2048 72, 73, 0, 0, 74, 0, 75, 204, 155, 156,
2049 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
2050 167, 0, 168, 169, 170, 171, 0, 172, 173, 174,
2051 0, 0, 120, 0, 0, 129, 0, 175, 0, 0,
2052 176, 0, 177, 0, 178, 60, 61, 0, 83, 84,
2053 85, 86, 87, 88, 89, 90, 70, 0, 1, 0,
2054 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2055 0, 0, 0, 0, 0, 0, 0, 0, 0, 388,
2056 389, 60, 61, 390, 71, 0, 0, 0, 0, 0,
2057 0, 0, 0, 0, 1, 0, 2, 0, 391, 392,
2058 393, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2059 0, 394, 395, 0, 0, 0, 0, 0, 0, 0,
2060 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2061 0, 60, 61, 396, 83, 84, 85, 86, 87, 88,
2062 89, 90, 70, 0, 1, 0, 2, 0, 0, 0,
2063 141, 142, 143, 144, 145, 146, 147, 148, 149, 150,
2064 151, 152, 153, 154, 0, 0, 0, 0, 0, 0,
2065 71, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2066 0, 72, 73, 0, 0, 74, 0, 75, 248, 155,
2067 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
2068 166, 167, 0, 168, 169, 170, 171, 0, 172, 173,
2069 174, 0, 0, 120, 0, 0, 129, 0, 0, 0,
2070 0, 397, 388, 389, 60, 61, 390, 0, 0, 0,
2071 0, 0, 0, 0, 0, 0, 0, 1, 0, 2,
2072 0, 391, 392, 393, 0, 0, 0, 0, 0, 0,
2073 0, 0, 0, 0, 394, 395, 0, 0, 0, 0,
2074 0, 0, 0, 0, 0, 0, 0, 72, 73, 0,
2075 244, 74, 0, 75, 60, 61, 396, 62, 63, 64,
2076 65, 66, 67, 68, 69, 70, 0, 1, 0, 2,
2077 0, 0, 0, 141, 142, 143, 144, 145, 146, 147,
2078 148, 149, 150, 151, 152, 153, 154, 0, 0, 0,
2079 0, 0, 0, 71, 0, 0, 0, 0, 0, 0,
2080 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2081 0, 0, 155, 156, 157, 158, 159, 160, 161, 162,
2082 163, 164, 165, 166, 167, 0, 168, 169, 170, 171,
2083 0, 172, 173, 174, 388, 389, 0, 0, 390, 0,
2084 0, 0, 0, 0, 397, 0, 0, 0, 0, 0,
2085 0, 0, 0, 391, 392, 393, 0, 0, 0, 0,
2086 0, 0, 0, 0, 0, 0, 394, 395, 0, 0,
2087 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2088 0, 0, 0, 0, 0, 0, 0, 0, 396, 0,
2089 72, 73, 0, 0, 74, 0, 75, 0, 0, 0,
2090 0, 0, 0, 0, 0, 141, 142, 143, 144, 145,
2091 146, 147, 148, 149, 150, 151, 152, 153, 154, 0,
Reid Spencer6fd36ab2006-12-29 20:35:03 +00002092 0, 0, 0, 0, 0, 0, 0, 0, 60, 61,
Reid Spencer14310612006-12-31 05:40:51 +00002093 0, 83, 63, 64, 65, 66, 67, 68, 69, 70,
2094 0, 1, 0, 2, 155, 156, 157, 158, 159, 160,
2095 161, 162, 163, 164, 165, 166, 167, 294, 168, 169,
2096 170, 171, 0, 172, 173, 174, 0, 71, 0, 0,
2097 0, 0, 0, 0, 60, 61, 397, 83, 63, 64,
2098 65, 66, 67, 68, 69, 70, 0, 1, 0, 2,
2099 0, 60, 61, 0, 83, 63, 64, 65, 66, 67,
2100 68, 69, 70, 384, 1, 0, 2, 0, 0, 0,
2101 0, 0, 0, 71, 0, 0, 0, 0, 60, 61,
2102 428, 83, 63, 64, 65, 66, 67, 68, 69, 70,
2103 71, 1, 0, 2, 0, 60, 61, 0, 83, 84,
2104 85, 86, 87, 88, 89, 90, 70, 484, 1, 0,
2105 2, 0, 0, 0, 0, 0, 0, 71, 0, 0,
2106 0, 0, 0, 0, 72, 73, 0, 0, 74, 0,
2107 75, 0, 0, 0, 71, 0, 60, 61, 0, 83,
2108 63, 64, 65, 66, 67, 68, 69, 70, 0, 1,
2109 0, 2, 0, 60, 61, 0, 187, 63, 64, 65,
2110 66, 67, 68, 69, 70, 0, 1, 0, 2, 0,
2111 72, 73, 0, 0, 74, 71, 75, 0, 0, 0,
2112 0, 0, 0, 0, 0, 0, 0, 72, 73, 0,
2113 0, 74, 71, 75, 60, 61, 0, 330, 63, 64,
2114 65, 66, 67, 68, 69, 70, 0, 1, 0, 2,
2115 0, 0, 0, 0, 72, 73, 0, 0, 74, 0,
2116 75, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2117 0, 72, 73, 71, 0, 74, 0, 75, 0, 0,
Reid Spencer6fd36ab2006-12-29 20:35:03 +00002118 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2119 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencer14310612006-12-31 05:40:51 +00002120 0, 260, 0, 0, 0, 0, 0, 0, 0, 0,
2121 0, 0, 72, 73, 261, 0, 74, 0, 75, 0,
2122 0, 0, 0, 0, 262, 263, 0, 0, 0, 72,
2123 73, 0, 0, 74, 0, 75, 0, 264, 265, 266,
2124 267, 268, 269, 141, 142, 143, 144, 145, 146, 147,
2125 148, 149, 150, 151, 152, 270, 271, 0, 0, 0,
Reid Spencer6fd36ab2006-12-29 20:35:03 +00002126 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencer14310612006-12-31 05:40:51 +00002127 72, 73, 0, 0, 74, 0, 75, 272, 273, 274,
2128 0, 0, 275, 156, 157, 158, 159, 160, 161, 162,
2129 163, 164, 165, 166, 167, 276, 277, 169, 170, 171,
2130 278, 279, 280, 281
Reid Spencer3822ff52006-11-08 06:47:33 +00002131};
2132
Reid Spencere4d87aa2006-12-23 06:05:41 +00002133static const short int yycheck[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00002134{
Reid Spencer14310612006-12-31 05:40:51 +00002135 23, 0, 62, 199, 266, 176, 177, 343, 4, 25,
2136 209, 210, 11, 10, 11, 12, 13, 19, 10, 11,
2137 12, 13, 267, 83, 26, 12, 31, 36, 18, 12,
2138 20, 115, 116, 339, 48, 49, 50, 136, 136, 51,
2139 52, 93, 287, 136, 29, 30, 136, 264, 53, 148,
2140 148, 357, 75, 67, 138, 148, 146, 274, 135, 82,
2141 277, 278, 279, 280, 281, 136, 53, 284, 285, 57,
2142 53, 137, 81, 139, 140, 146, 0, 5, 6, 102,
2143 8, 9, 10, 11, 12, 13, 14, 15, 16, 0,
2144 18, 0, 20, 9, 18, 135, 20, 21, 137, 135,
2145 16, 140, 125, 27, 28, 548, 135, 146, 107, 18,
2146 137, 20, 21, 140, 557, 142, 44, 136, 27, 28,
2147 41, 136, 43, 47, 135, 144, 325, 187, 188, 144,
2148 54, 147, 135, 137, 58, 18, 140, 20, 47, 20,
2149 144, 136, 359, 19, 139, 54, 148, 144, 138, 58,
2150 20, 147, 144, 37, 38, 39, 142, 137, 42, 495,
2151 140, 497, 137, 138, 360, 88, 89, 90, 91, 92,
2152 93, 94, 95, 96, 97, 23, 24, 4, 201, 202,
2153 203, 137, 138, 206, 140, 208, 10, 11, 12, 13,
2154 189, 60, 61, 62, 63, 64, 65, 66, 415, 20,
2155 417, 418, 419, 136, 137, 138, 423, 140, 20, 136,
2156 3, 4, 139, 141, 142, 432, 4, 145, 4, 147,
2157 148, 136, 137, 138, 136, 140, 397, 139, 3, 4,
2158 239, 240, 241, 242, 243, 295, 136, 7, 261, 139,
2159 137, 264, 251, 252, 253, 254, 3, 4, 7, 272,
2160 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
2161 283, 284, 285, 3, 4, 3, 4, 4, 115, 116,
2162 330, 111, 112, 34, 35, 327, 7, 539, 138, 143,
2163 332, 333, 143, 500, 501, 502, 338, 549, 138, 138,
2164 20, 136, 138, 345, 138, 138, 138, 138, 307, 308,
2165 138, 353, 354, 326, 138, 314, 23, 24, 138, 20,
2166 146, 55, 138, 138, 136, 138, 339, 340, 341, 139,
2167 136, 139, 136, 136, 33, 385, 136, 146, 136, 136,
2168 136, 20, 4, 136, 357, 358, 359, 136, 136, 136,
2169 363, 136, 136, 33, 136, 136, 136, 136, 31, 59,
2170 20, 136, 139, 405, 406, 407, 379, 136, 142, 136,
2171 136, 413, 136, 372, 373, 374, 375, 136, 377, 378,
2172 136, 380, 424, 425, 139, 139, 136, 94, 95, 96,
2173 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
2174 107, 139, 415, 416, 417, 418, 419, 139, 16, 422,
2175 423, 453, 16, 455, 138, 4, 458, 136, 136, 432,
2176 332, 333, 464, 465, 136, 136, 338, 136, 136, 139,
2177 443, 430, 431, 345, 136, 485, 139, 53, 4, 136,
2178 138, 353, 354, 136, 136, 139, 20, 142, 490, 491,
2179 139, 493, 494, 442, 139, 136, 498, 470, 53, 16,
2180 144, 33, 144, 16, 506, 136, 16, 136, 16, 72,
2181 16, 193, 271, 107, 363, 474, 518, 476, 477, 492,
2182 193, 444, 208, 125, 526, 11, 93, 500, 501, 502,
2183 540, 512, 505, 405, 406, 407, 48, 193, 270, -1,
2184 51, 413, 193, 412, 546, 505, -1, -1, 558, 551,
2185 -1, -1, 424, 425, -1, -1, -1, 559, -1, -1,
2186 -1, -1, 564, 512, -1, -1, 568, 569, 541, -1,
2187 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2188 -1, 453, -1, 455, -1, -1, 458, -1, -1, -1,
2189 -1, -1, 464, 465, 5, 6, -1, 8, 9, 10,
2190 11, 12, 13, 14, 15, 16, -1, 18, -1, 20,
2191 -1, -1, -1, -1, -1, 17, -1, -1, 490, 491,
2192 -1, 493, 494, -1, -1, -1, 498, 29, 30, -1,
2193 5, 6, -1, 44, 506, 37, 38, 39, 40, 41,
2194 42, 43, -1, 18, 46, 20, 518, 22, -1, -1,
2195 -1, -1, -1, -1, 526, -1, -1, -1, -1, -1,
2196 35, 36, -1, -1, -1, -1, -1, -1, -1, -1,
2197 -1, -1, -1, -1, 546, -1, -1, -1, -1, 551,
2198 -1, -1, -1, -1, -1, -1, -1, 559, -1, -1,
2199 -1, -1, 564, -1, -1, -1, 568, 569, -1, 74,
2200 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
2201 85, 86, 87, -1, -1, -1, -1, -1, -1, -1,
2202 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2203 141, 142, -1, -1, 145, -1, 147, 148, 113, 114,
2204 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
2205 125, -1, 127, 128, 129, 130, -1, 132, 133, 134,
2206 -1, -1, 137, -1, -1, 140, -1, 142, -1, -1,
2207 145, -1, 147, -1, 149, 5, 6, -1, 8, 9,
2208 10, 11, 12, 13, 14, 15, 16, -1, 18, -1,
2209 20, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2210 -1, -1, -1, -1, -1, -1, -1, -1, -1, 3,
2211 4, 5, 6, 7, 44, -1, -1, -1, -1, -1,
2212 -1, -1, -1, -1, 18, -1, 20, -1, 22, 23,
2213 24, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2214 -1, 35, 36, -1, -1, -1, -1, -1, -1, -1,
2215 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2216 -1, 5, 6, 57, 8, 9, 10, 11, 12, 13,
2217 14, 15, 16, -1, 18, -1, 20, -1, -1, -1,
2218 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
2219 84, 85, 86, 87, -1, -1, -1, -1, -1, -1,
2220 44, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2221 -1, 141, 142, -1, -1, 145, -1, 147, 148, 113,
2222 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
2223 124, 125, -1, 127, 128, 129, 130, -1, 132, 133,
2224 134, -1, -1, 137, -1, -1, 140, -1, -1, -1,
2225 -1, 145, 3, 4, 5, 6, 7, -1, -1, -1,
2226 -1, -1, -1, -1, -1, -1, -1, 18, -1, 20,
2227 -1, 22, 23, 24, -1, -1, -1, -1, -1, -1,
2228 -1, -1, -1, -1, 35, 36, -1, -1, -1, -1,
2229 -1, -1, -1, -1, -1, -1, -1, 141, 142, -1,
2230 144, 145, -1, 147, 5, 6, 57, 8, 9, 10,
2231 11, 12, 13, 14, 15, 16, -1, 18, -1, 20,
2232 -1, -1, -1, 74, 75, 76, 77, 78, 79, 80,
2233 81, 82, 83, 84, 85, 86, 87, -1, -1, -1,
2234 -1, -1, -1, 44, -1, -1, -1, -1, -1, -1,
2235 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2236 -1, -1, 113, 114, 115, 116, 117, 118, 119, 120,
2237 121, 122, 123, 124, 125, -1, 127, 128, 129, 130,
2238 -1, 132, 133, 134, 3, 4, -1, -1, 7, -1,
2239 -1, -1, -1, -1, 145, -1, -1, -1, -1, -1,
2240 -1, -1, -1, 22, 23, 24, -1, -1, -1, -1,
2241 -1, -1, -1, -1, -1, -1, 35, 36, -1, -1,
2242 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2243 -1, -1, -1, -1, -1, -1, -1, -1, 57, -1,
2244 141, 142, -1, -1, 145, -1, 147, -1, -1, -1,
2245 -1, -1, -1, -1, -1, 74, 75, 76, 77, 78,
2246 79, 80, 81, 82, 83, 84, 85, 86, 87, -1,
Reid Spencer6fd36ab2006-12-29 20:35:03 +00002247 -1, -1, -1, -1, -1, -1, -1, -1, 5, 6,
Reid Spencere4d87aa2006-12-23 06:05:41 +00002248 -1, 8, 9, 10, 11, 12, 13, 14, 15, 16,
Reid Spencer14310612006-12-31 05:40:51 +00002249 -1, 18, -1, 20, 113, 114, 115, 116, 117, 118,
2250 119, 120, 121, 122, 123, 124, 125, 34, 127, 128,
2251 129, 130, -1, 132, 133, 134, -1, 44, -1, -1,
2252 -1, -1, -1, -1, 5, 6, 145, 8, 9, 10,
2253 11, 12, 13, 14, 15, 16, -1, 18, -1, 20,
2254 -1, 5, 6, -1, 8, 9, 10, 11, 12, 13,
2255 14, 15, 16, 34, 18, -1, 20, -1, -1, -1,
2256 -1, -1, -1, 44, -1, -1, -1, -1, 5, 6,
2257 34, 8, 9, 10, 11, 12, 13, 14, 15, 16,
2258 44, 18, -1, 20, -1, 5, 6, -1, 8, 9,
2259 10, 11, 12, 13, 14, 15, 16, 34, 18, -1,
2260 20, -1, -1, -1, -1, -1, -1, 44, -1, -1,
2261 -1, -1, -1, -1, 141, 142, -1, -1, 145, -1,
2262 147, -1, -1, -1, 44, -1, 5, 6, -1, 8,
2263 9, 10, 11, 12, 13, 14, 15, 16, -1, 18,
2264 -1, 20, -1, 5, 6, -1, 8, 9, 10, 11,
2265 12, 13, 14, 15, 16, -1, 18, -1, 20, -1,
2266 141, 142, -1, -1, 145, 44, 147, -1, -1, -1,
2267 -1, -1, -1, -1, -1, -1, -1, 141, 142, -1,
2268 -1, 145, 44, 147, 5, 6, -1, 8, 9, 10,
2269 11, 12, 13, 14, 15, 16, -1, 18, -1, 20,
2270 -1, -1, -1, -1, 141, 142, -1, -1, 145, -1,
2271 147, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2272 -1, 141, 142, 44, -1, 145, -1, 147, -1, -1,
Reid Spencere4d87aa2006-12-23 06:05:41 +00002273 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencer6fd36ab2006-12-29 20:35:03 +00002274 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencer14310612006-12-31 05:40:51 +00002275 -1, 32, -1, -1, -1, -1, -1, -1, -1, -1,
2276 -1, -1, 141, 142, 45, -1, 145, -1, 147, -1,
2277 -1, -1, -1, -1, 55, 56, -1, -1, -1, 141,
2278 142, -1, -1, 145, -1, 147, -1, 68, 69, 70,
2279 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
2280 81, 82, 83, 84, 85, 86, 87, -1, -1, -1,
Reid Spencer6fd36ab2006-12-29 20:35:03 +00002281 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencer14310612006-12-31 05:40:51 +00002282 141, 142, -1, -1, 145, -1, 147, 108, 109, 110,
2283 -1, -1, 113, 114, 115, 116, 117, 118, 119, 120,
Reid Spencer6fd36ab2006-12-29 20:35:03 +00002284 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
Reid Spencer14310612006-12-31 05:40:51 +00002285 131, 132, 133, 134
Reid Spencer3822ff52006-11-08 06:47:33 +00002286};
2287
2288/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
2289 symbol of state STATE-NUM. */
Andrew Lenharth6353e052006-12-08 18:07:09 +00002290static const unsigned char yystos[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00002291{
Reid Spencer14310612006-12-31 05:40:51 +00002292 0, 18, 20, 21, 27, 28, 47, 54, 58, 160,
2293 186, 187, 188, 199, 190, 189, 48, 49, 50, 67,
2294 196, 135, 57, 17, 29, 30, 37, 38, 39, 40,
2295 41, 42, 43, 46, 161, 162, 185, 0, 188, 135,
2296 41, 43, 163, 208, 37, 38, 39, 42, 164, 205,
2297 207, 214, 135, 135, 135, 135, 142, 197, 20, 194,
Reid Spencer6fd36ab2006-12-29 20:35:03 +00002298 5, 6, 8, 9, 10, 11, 12, 13, 14, 15,
Reid Spencer14310612006-12-31 05:40:51 +00002299 16, 44, 141, 142, 145, 147, 151, 175, 176, 199,
2300 211, 185, 185, 8, 9, 10, 11, 12, 13, 14,
2301 15, 158, 159, 176, 182, 60, 61, 62, 63, 64,
2302 65, 66, 165, 203, 203, 19, 215, 216, 26, 148,
2303 206, 215, 20, 51, 52, 195, 4, 20, 20, 198,
2304 137, 168, 4, 4, 4, 147, 148, 176, 181, 140,
2305 168, 182, 176, 23, 24, 3, 4, 7, 22, 35,
2306 36, 74, 75, 76, 77, 78, 79, 80, 81, 82,
2307 83, 84, 85, 86, 87, 113, 114, 115, 116, 117,
2308 118, 119, 120, 121, 122, 123, 124, 125, 127, 128,
2309 129, 130, 132, 133, 134, 142, 145, 147, 149, 152,
2310 153, 154, 155, 183, 211, 191, 4, 8, 176, 178,
2311 25, 147, 204, 160, 219, 136, 144, 115, 116, 138,
2312 166, 138, 143, 143, 148, 181, 136, 148, 138, 192,
2313 193, 88, 89, 90, 91, 92, 93, 94, 95, 96,
2314 97, 156, 23, 24, 94, 95, 96, 97, 98, 99,
2315 100, 101, 102, 103, 104, 105, 106, 107, 157, 138,
2316 138, 138, 138, 138, 144, 182, 184, 184, 148, 184,
2317 20, 138, 138, 138, 138, 136, 173, 168, 168, 199,
2318 32, 45, 55, 56, 68, 69, 70, 71, 72, 73,
2319 86, 87, 108, 109, 110, 113, 126, 127, 131, 132,
2320 133, 134, 152, 153, 154, 155, 217, 223, 224, 225,
2321 226, 20, 166, 167, 34, 176, 177, 179, 180, 176,
2322 176, 146, 148, 176, 180, 173, 173, 138, 138, 182,
2323 182, 182, 182, 182, 136, 144, 146, 148, 182, 182,
2324 182, 182, 31, 53, 171, 174, 138, 176, 213, 55,
2325 8, 213, 9, 16, 10, 11, 12, 13, 158, 165,
2326 156, 157, 176, 176, 213, 176, 176, 220, 213, 213,
2327 213, 213, 213, 176, 176, 213, 213, 165, 111, 112,
2328 136, 139, 168, 136, 139, 144, 146, 146, 139, 182,
2329 182, 222, 136, 136, 136, 136, 182, 136, 136, 33,
2330 136, 20, 4, 173, 34, 176, 201, 202, 3, 4,
2331 7, 22, 23, 24, 35, 36, 57, 145, 183, 210,
2332 211, 212, 212, 212, 212, 178, 176, 176, 136, 170,
2333 136, 170, 212, 142, 136, 136, 136, 136, 136, 136,
2334 212, 212, 33, 136, 178, 176, 213, 166, 34, 177,
2335 136, 136, 136, 139, 182, 182, 182, 182, 182, 182,
2336 176, 182, 168, 136, 139, 59, 209, 184, 136, 136,
2337 212, 212, 212, 12, 53, 12, 222, 212, 142, 213,
2338 176, 213, 213, 213, 136, 136, 176, 213, 212, 212,
2339 136, 182, 182, 213, 136, 139, 136, 136, 139, 139,
2340 139, 139, 199, 200, 34, 176, 171, 172, 20, 146,
2341 16, 16, 138, 136, 136, 212, 4, 212, 136, 212,
2342 136, 136, 136, 212, 212, 138, 176, 139, 139, 182,
2343 182, 182, 168, 53, 169, 136, 212, 212, 176, 221,
2344 212, 212, 136, 170, 170, 212, 136, 213, 213, 213,
2345 221, 212, 139, 139, 139, 200, 4, 20, 136, 142,
2346 212, 136, 139, 144, 212, 139, 16, 144, 158, 218,
2347 168, 176, 33, 144, 212, 210, 144, 158, 212, 16,
2348 136, 210, 168, 212, 16, 136, 72, 212, 16, 16,
2349 212, 212
Reid Spencer3822ff52006-11-08 06:47:33 +00002350};
Reid Spencer68a24bd2005-08-27 18:50:39 +00002351
2352#define yyerrok (yyerrstatus = 0)
2353#define yyclearin (yychar = YYEMPTY)
Reid Spencer3822ff52006-11-08 06:47:33 +00002354#define YYEMPTY (-2)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002355#define YYEOF 0
Reid Spencer3822ff52006-11-08 06:47:33 +00002356
Reid Spencer68a24bd2005-08-27 18:50:39 +00002357#define YYACCEPT goto yyacceptlab
Reid Spencer3822ff52006-11-08 06:47:33 +00002358#define YYABORT goto yyabortlab
2359#define YYERROR goto yyerrorlab
2360
2361
2362/* Like YYERROR except do call yyerror. This remains here temporarily
2363 to ease the transition to the new meaning of YYERROR, for GCC.
Reid Spencer68a24bd2005-08-27 18:50:39 +00002364 Once GCC version 2 has supplanted version 1, this can go. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002365
Reid Spencer68a24bd2005-08-27 18:50:39 +00002366#define YYFAIL goto yyerrlab
Reid Spencer3822ff52006-11-08 06:47:33 +00002367
Reid Spencer68a24bd2005-08-27 18:50:39 +00002368#define YYRECOVERING() (!!yyerrstatus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002369
2370#define YYBACKUP(Token, Value) \
Reid Spencer68a24bd2005-08-27 18:50:39 +00002371do \
2372 if (yychar == YYEMPTY && yylen == 1) \
Reid Spencer3822ff52006-11-08 06:47:33 +00002373 { \
2374 yychar = (Token); \
2375 yylval = (Value); \
2376 yytoken = YYTRANSLATE (yychar); \
Andrew Lenharth6353e052006-12-08 18:07:09 +00002377 YYPOPSTACK; \
Reid Spencer68a24bd2005-08-27 18:50:39 +00002378 goto yybackup; \
2379 } \
2380 else \
Reid Spencere4d87aa2006-12-23 06:05:41 +00002381 { \
2382 yyerror (YY_("syntax error: cannot back up")); \
Reid Spencer3822ff52006-11-08 06:47:33 +00002383 YYERROR; \
2384 } \
Andrew Lenharth6353e052006-12-08 18:07:09 +00002385while (0)
Reid Spencer3822ff52006-11-08 06:47:33 +00002386
Reid Spencere4d87aa2006-12-23 06:05:41 +00002387
Reid Spencer68a24bd2005-08-27 18:50:39 +00002388#define YYTERROR 1
2389#define YYERRCODE 256
2390
Reid Spencer3822ff52006-11-08 06:47:33 +00002391
Reid Spencere4d87aa2006-12-23 06:05:41 +00002392/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
2393 If N is 0, then set CURRENT to the empty location which ends
2394 the previous symbol: RHS[0] (always defined). */
2395
2396#define YYRHSLOC(Rhs, K) ((Rhs)[K])
Reid Spencer3822ff52006-11-08 06:47:33 +00002397#ifndef YYLLOC_DEFAULT
Reid Spencere4d87aa2006-12-23 06:05:41 +00002398# define YYLLOC_DEFAULT(Current, Rhs, N) \
2399 do \
2400 if (N) \
2401 { \
2402 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
2403 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
2404 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
2405 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
2406 } \
2407 else \
2408 { \
2409 (Current).first_line = (Current).last_line = \
2410 YYRHSLOC (Rhs, 0).last_line; \
2411 (Current).first_column = (Current).last_column = \
2412 YYRHSLOC (Rhs, 0).last_column; \
2413 } \
2414 while (0)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002415#endif
2416
Reid Spencere4d87aa2006-12-23 06:05:41 +00002417
2418/* YY_LOCATION_PRINT -- Print the location on the stream.
2419 This macro was not mandated originally: define only if we know
2420 we won't break user code: when these are the locations we know. */
2421
2422#ifndef YY_LOCATION_PRINT
2423# if YYLTYPE_IS_TRIVIAL
2424# define YY_LOCATION_PRINT(File, Loc) \
2425 fprintf (File, "%d.%d-%d.%d", \
2426 (Loc).first_line, (Loc).first_column, \
2427 (Loc).last_line, (Loc).last_column)
2428# else
2429# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
2430# endif
2431#endif
2432
2433
Reid Spencer3822ff52006-11-08 06:47:33 +00002434/* YYLEX -- calling `yylex' with the right arguments. */
2435
Reid Spencer68a24bd2005-08-27 18:50:39 +00002436#ifdef YYLEX_PARAM
Reid Spencer3822ff52006-11-08 06:47:33 +00002437# define YYLEX yylex (YYLEX_PARAM)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002438#else
Reid Spencer3822ff52006-11-08 06:47:33 +00002439# define YYLEX yylex ()
Chris Lattnerf49c1762006-11-08 05:58:47 +00002440#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002441
2442/* Enable debugging if requested. */
2443#if YYDEBUG
2444
2445# ifndef YYFPRINTF
2446# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
2447# define YYFPRINTF fprintf
2448# endif
2449
2450# define YYDPRINTF(Args) \
2451do { \
2452 if (yydebug) \
2453 YYFPRINTF Args; \
Andrew Lenharth6353e052006-12-08 18:07:09 +00002454} while (0)
Reid Spencer3822ff52006-11-08 06:47:33 +00002455
Reid Spencere4d87aa2006-12-23 06:05:41 +00002456# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
Andrew Lenharth6353e052006-12-08 18:07:09 +00002457do { \
2458 if (yydebug) \
2459 { \
2460 YYFPRINTF (stderr, "%s ", Title); \
Reid Spencere4d87aa2006-12-23 06:05:41 +00002461 yysymprint (stderr, \
2462 Type, Value); \
Andrew Lenharth6353e052006-12-08 18:07:09 +00002463 YYFPRINTF (stderr, "\n"); \
2464 } \
2465} while (0)
Reid Spencer3822ff52006-11-08 06:47:33 +00002466
2467/*------------------------------------------------------------------.
2468| yy_stack_print -- Print the state stack from its BOTTOM up to its |
2469| TOP (included). |
2470`------------------------------------------------------------------*/
2471
Andrew Lenharth6353e052006-12-08 18:07:09 +00002472#if defined (__STDC__) || defined (__cplusplus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002473static void
Reid Spencere4d87aa2006-12-23 06:05:41 +00002474yy_stack_print (short int *bottom, short int *top)
Chris Lattnerf49c1762006-11-08 05:58:47 +00002475#else
Reid Spencer3822ff52006-11-08 06:47:33 +00002476static void
2477yy_stack_print (bottom, top)
Reid Spencere4d87aa2006-12-23 06:05:41 +00002478 short int *bottom;
2479 short int *top;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002480#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002481{
2482 YYFPRINTF (stderr, "Stack now");
Andrew Lenharth6353e052006-12-08 18:07:09 +00002483 for (/* Nothing. */; bottom <= top; ++bottom)
Reid Spencer3822ff52006-11-08 06:47:33 +00002484 YYFPRINTF (stderr, " %d", *bottom);
2485 YYFPRINTF (stderr, "\n");
2486}
2487
2488# define YY_STACK_PRINT(Bottom, Top) \
2489do { \
2490 if (yydebug) \
2491 yy_stack_print ((Bottom), (Top)); \
Andrew Lenharth6353e052006-12-08 18:07:09 +00002492} while (0)
Reid Spencer3822ff52006-11-08 06:47:33 +00002493
2494
2495/*------------------------------------------------.
2496| Report that the YYRULE is going to be reduced. |
2497`------------------------------------------------*/
2498
Andrew Lenharth6353e052006-12-08 18:07:09 +00002499#if defined (__STDC__) || defined (__cplusplus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002500static void
Andrew Lenharth6353e052006-12-08 18:07:09 +00002501yy_reduce_print (int yyrule)
Reid Spencer3822ff52006-11-08 06:47:33 +00002502#else
2503static void
Andrew Lenharth6353e052006-12-08 18:07:09 +00002504yy_reduce_print (yyrule)
Reid Spencer3822ff52006-11-08 06:47:33 +00002505 int yyrule;
Chris Lattner1ae022f2006-10-22 06:08:13 +00002506#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002507{
2508 int yyi;
Reid Spencere4d87aa2006-12-23 06:05:41 +00002509 unsigned long int yylno = yyrline[yyrule];
2510 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ",
Andrew Lenharth6353e052006-12-08 18:07:09 +00002511 yyrule - 1, yylno);
2512 /* Print the symbols being reduced, and their result. */
2513 for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
Reid Spencere4d87aa2006-12-23 06:05:41 +00002514 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
2515 YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]);
Reid Spencer3822ff52006-11-08 06:47:33 +00002516}
Reid Spencer21be8652006-10-22 07:03:43 +00002517
Reid Spencer3822ff52006-11-08 06:47:33 +00002518# define YY_REDUCE_PRINT(Rule) \
2519do { \
2520 if (yydebug) \
Andrew Lenharth6353e052006-12-08 18:07:09 +00002521 yy_reduce_print (Rule); \
2522} while (0)
Reid Spencer21be8652006-10-22 07:03:43 +00002523
Reid Spencer3822ff52006-11-08 06:47:33 +00002524/* Nonzero means print parse trace. It is left uninitialized so that
2525 multiple parsers can coexist. */
2526int yydebug;
2527#else /* !YYDEBUG */
2528# define YYDPRINTF(Args)
Reid Spencere4d87aa2006-12-23 06:05:41 +00002529# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
Reid Spencer3822ff52006-11-08 06:47:33 +00002530# define YY_STACK_PRINT(Bottom, Top)
2531# define YY_REDUCE_PRINT(Rule)
2532#endif /* !YYDEBUG */
Reid Spencer21be8652006-10-22 07:03:43 +00002533
Reid Spencer21be8652006-10-22 07:03:43 +00002534
Reid Spencer3822ff52006-11-08 06:47:33 +00002535/* YYINITDEPTH -- initial size of the parser's stacks. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002536#ifndef YYINITDEPTH
Reid Spencer3822ff52006-11-08 06:47:33 +00002537# define YYINITDEPTH 200
Reid Spencer68a24bd2005-08-27 18:50:39 +00002538#endif
2539
Reid Spencer3822ff52006-11-08 06:47:33 +00002540/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
2541 if the built-in stack extension method is used).
Reid Spencer68a24bd2005-08-27 18:50:39 +00002542
Reid Spencer3822ff52006-11-08 06:47:33 +00002543 Do not make this value too large; the results are undefined if
Reid Spencere4d87aa2006-12-23 06:05:41 +00002544 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
Reid Spencer3822ff52006-11-08 06:47:33 +00002545 evaluated with infinite-precision integer arithmetic. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002546
2547#ifndef YYMAXDEPTH
Reid Spencer3822ff52006-11-08 06:47:33 +00002548# define YYMAXDEPTH 10000
Reid Spencer68a24bd2005-08-27 18:50:39 +00002549#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002550
Reid Spencer68a24bd2005-08-27 18:50:39 +00002551
2552
Reid Spencer3822ff52006-11-08 06:47:33 +00002553#if YYERROR_VERBOSE
Reid Spencer68a24bd2005-08-27 18:50:39 +00002554
Reid Spencer3822ff52006-11-08 06:47:33 +00002555# ifndef yystrlen
Andrew Lenharth6353e052006-12-08 18:07:09 +00002556# if defined (__GLIBC__) && defined (_STRING_H)
Reid Spencer3822ff52006-11-08 06:47:33 +00002557# define yystrlen strlen
2558# else
2559/* Return the length of YYSTR. */
2560static YYSIZE_T
Andrew Lenharth6353e052006-12-08 18:07:09 +00002561# if defined (__STDC__) || defined (__cplusplus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002562yystrlen (const char *yystr)
Andrew Lenharth6353e052006-12-08 18:07:09 +00002563# else
Reid Spencer3822ff52006-11-08 06:47:33 +00002564yystrlen (yystr)
Andrew Lenharth6353e052006-12-08 18:07:09 +00002565 const char *yystr;
2566# endif
Chris Lattnerf49c1762006-11-08 05:58:47 +00002567{
Reid Spencere4d87aa2006-12-23 06:05:41 +00002568 const char *yys = yystr;
Andrew Lenharth6353e052006-12-08 18:07:09 +00002569
2570 while (*yys++ != '\0')
Reid Spencer3822ff52006-11-08 06:47:33 +00002571 continue;
Andrew Lenharth6353e052006-12-08 18:07:09 +00002572
2573 return yys - yystr - 1;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002574}
Reid Spencer3822ff52006-11-08 06:47:33 +00002575# endif
2576# endif
Chris Lattnerf49c1762006-11-08 05:58:47 +00002577
Reid Spencer3822ff52006-11-08 06:47:33 +00002578# ifndef yystpcpy
Andrew Lenharth6353e052006-12-08 18:07:09 +00002579# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
Reid Spencer3822ff52006-11-08 06:47:33 +00002580# define yystpcpy stpcpy
2581# else
2582/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
2583 YYDEST. */
2584static char *
Andrew Lenharth6353e052006-12-08 18:07:09 +00002585# if defined (__STDC__) || defined (__cplusplus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002586yystpcpy (char *yydest, const char *yysrc)
Andrew Lenharth6353e052006-12-08 18:07:09 +00002587# else
Reid Spencer3822ff52006-11-08 06:47:33 +00002588yystpcpy (yydest, yysrc)
Andrew Lenharth6353e052006-12-08 18:07:09 +00002589 char *yydest;
2590 const char *yysrc;
2591# endif
Chris Lattnerf49c1762006-11-08 05:58:47 +00002592{
Reid Spencere4d87aa2006-12-23 06:05:41 +00002593 char *yyd = yydest;
2594 const char *yys = yysrc;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002595
Reid Spencer3822ff52006-11-08 06:47:33 +00002596 while ((*yyd++ = *yys++) != '\0')
2597 continue;
2598
2599 return yyd - 1;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002600}
Reid Spencer3822ff52006-11-08 06:47:33 +00002601# endif
2602# endif
Chris Lattnerf49c1762006-11-08 05:58:47 +00002603
Reid Spencere4d87aa2006-12-23 06:05:41 +00002604# ifndef yytnamerr
2605/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
2606 quotes and backslashes, so that it's suitable for yyerror. The
2607 heuristic is that double-quoting is unnecessary unless the string
2608 contains an apostrophe, a comma, or backslash (other than
2609 backslash-backslash). YYSTR is taken from yytname. If YYRES is
2610 null, do not copy; instead, return the length of what the result
2611 would have been. */
2612static YYSIZE_T
2613yytnamerr (char *yyres, const char *yystr)
2614{
2615 if (*yystr == '"')
2616 {
2617 size_t yyn = 0;
2618 char const *yyp = yystr;
2619
2620 for (;;)
2621 switch (*++yyp)
2622 {
2623 case '\'':
2624 case ',':
2625 goto do_not_strip_quotes;
2626
2627 case '\\':
2628 if (*++yyp != '\\')
2629 goto do_not_strip_quotes;
2630 /* Fall through. */
2631 default:
2632 if (yyres)
2633 yyres[yyn] = *yyp;
2634 yyn++;
2635 break;
2636
2637 case '"':
2638 if (yyres)
2639 yyres[yyn] = '\0';
2640 return yyn;
2641 }
2642 do_not_strip_quotes: ;
2643 }
2644
2645 if (! yyres)
2646 return yystrlen (yystr);
2647
2648 return yystpcpy (yyres, yystr) - yyres;
2649}
2650# endif
2651
2652#endif /* YYERROR_VERBOSE */
Reid Spencer3822ff52006-11-08 06:47:33 +00002653
Reid Spencer21be8652006-10-22 07:03:43 +00002654
2655
Andrew Lenharth6353e052006-12-08 18:07:09 +00002656#if YYDEBUG
2657/*--------------------------------.
2658| Print this symbol on YYOUTPUT. |
2659`--------------------------------*/
Reid Spencer3822ff52006-11-08 06:47:33 +00002660
Andrew Lenharth6353e052006-12-08 18:07:09 +00002661#if defined (__STDC__) || defined (__cplusplus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002662static void
Andrew Lenharth6353e052006-12-08 18:07:09 +00002663yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
Reid Spencer3822ff52006-11-08 06:47:33 +00002664#else
2665static void
Andrew Lenharth6353e052006-12-08 18:07:09 +00002666yysymprint (yyoutput, yytype, yyvaluep)
2667 FILE *yyoutput;
Reid Spencer3822ff52006-11-08 06:47:33 +00002668 int yytype;
2669 YYSTYPE *yyvaluep;
2670#endif
2671{
Andrew Lenharth6353e052006-12-08 18:07:09 +00002672 /* Pacify ``unused variable'' warnings. */
2673 (void) yyvaluep;
Reid Spencer3822ff52006-11-08 06:47:33 +00002674
Andrew Lenharth6353e052006-12-08 18:07:09 +00002675 if (yytype < YYNTOKENS)
Reid Spencere4d87aa2006-12-23 06:05:41 +00002676 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
Andrew Lenharth6353e052006-12-08 18:07:09 +00002677 else
2678 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
2679
Reid Spencere4d87aa2006-12-23 06:05:41 +00002680
2681# ifdef YYPRINT
2682 if (yytype < YYNTOKENS)
2683 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
2684# endif
Andrew Lenharth6353e052006-12-08 18:07:09 +00002685 switch (yytype)
2686 {
2687 default:
2688 break;
2689 }
2690 YYFPRINTF (yyoutput, ")");
2691}
2692
2693#endif /* ! YYDEBUG */
2694/*-----------------------------------------------.
2695| Release the memory associated to this symbol. |
2696`-----------------------------------------------*/
2697
2698#if defined (__STDC__) || defined (__cplusplus)
2699static void
Reid Spencere4d87aa2006-12-23 06:05:41 +00002700yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
Andrew Lenharth6353e052006-12-08 18:07:09 +00002701#else
2702static void
Reid Spencere4d87aa2006-12-23 06:05:41 +00002703yydestruct (yymsg, yytype, yyvaluep)
2704 const char *yymsg;
Andrew Lenharth6353e052006-12-08 18:07:09 +00002705 int yytype;
2706 YYSTYPE *yyvaluep;
2707#endif
2708{
2709 /* Pacify ``unused variable'' warnings. */
2710 (void) yyvaluep;
Reid Spencer3822ff52006-11-08 06:47:33 +00002711
Reid Spencere4d87aa2006-12-23 06:05:41 +00002712 if (!yymsg)
2713 yymsg = "Deleting";
2714 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
2715
Reid Spencer3822ff52006-11-08 06:47:33 +00002716 switch (yytype)
2717 {
2718
2719 default:
Andrew Lenharth6353e052006-12-08 18:07:09 +00002720 break;
Reid Spencer3822ff52006-11-08 06:47:33 +00002721 }
2722}
2723
2724
2725/* Prevent warnings from -Wmissing-prototypes. */
2726
2727#ifdef YYPARSE_PARAM
Andrew Lenharth6353e052006-12-08 18:07:09 +00002728# if defined (__STDC__) || defined (__cplusplus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002729int yyparse (void *YYPARSE_PARAM);
Andrew Lenharth6353e052006-12-08 18:07:09 +00002730# else
Reid Spencer3822ff52006-11-08 06:47:33 +00002731int yyparse ();
Andrew Lenharth6353e052006-12-08 18:07:09 +00002732# endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002733#else /* ! YYPARSE_PARAM */
Andrew Lenharth6353e052006-12-08 18:07:09 +00002734#if defined (__STDC__) || defined (__cplusplus)
Reid Spencere812fb22006-01-19 01:21:04 +00002735int yyparse (void);
Chris Lattnerf49c1762006-11-08 05:58:47 +00002736#else
Reid Spencer3822ff52006-11-08 06:47:33 +00002737int yyparse ();
2738#endif
2739#endif /* ! YYPARSE_PARAM */
2740
2741
2742
Reid Spencere4d87aa2006-12-23 06:05:41 +00002743/* The look-ahead symbol. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002744int yychar;
2745
Reid Spencere4d87aa2006-12-23 06:05:41 +00002746/* The semantic value of the look-ahead symbol. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002747YYSTYPE yylval;
2748
2749/* Number of syntax errors so far. */
2750int yynerrs;
2751
2752
2753
2754/*----------.
2755| yyparse. |
2756`----------*/
2757
2758#ifdef YYPARSE_PARAM
Andrew Lenharth6353e052006-12-08 18:07:09 +00002759# if defined (__STDC__) || defined (__cplusplus)
2760int yyparse (void *YYPARSE_PARAM)
2761# else
2762int yyparse (YYPARSE_PARAM)
2763 void *YYPARSE_PARAM;
2764# endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002765#else /* ! YYPARSE_PARAM */
Andrew Lenharth6353e052006-12-08 18:07:09 +00002766#if defined (__STDC__) || defined (__cplusplus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002767int
2768yyparse (void)
2769#else
2770int
2771yyparse ()
2772
2773#endif
2774#endif
2775{
2776
Reid Spencere4d87aa2006-12-23 06:05:41 +00002777 int yystate;
2778 int yyn;
Reid Spencer3822ff52006-11-08 06:47:33 +00002779 int yyresult;
2780 /* Number of tokens to shift before error messages enabled. */
2781 int yyerrstatus;
Reid Spencere4d87aa2006-12-23 06:05:41 +00002782 /* Look-ahead token as an internal (translated) token number. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002783 int yytoken = 0;
2784
2785 /* Three stacks and their tools:
2786 `yyss': related to states,
2787 `yyvs': related to semantic values,
2788 `yyls': related to locations.
2789
2790 Refer to the stacks thru separate pointers, to allow yyoverflow
2791 to reallocate them elsewhere. */
2792
2793 /* The state stack. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00002794 short int yyssa[YYINITDEPTH];
2795 short int *yyss = yyssa;
2796 short int *yyssp;
Reid Spencer3822ff52006-11-08 06:47:33 +00002797
2798 /* The semantic value stack. */
2799 YYSTYPE yyvsa[YYINITDEPTH];
2800 YYSTYPE *yyvs = yyvsa;
Reid Spencere4d87aa2006-12-23 06:05:41 +00002801 YYSTYPE *yyvsp;
Reid Spencer3822ff52006-11-08 06:47:33 +00002802
2803
2804
Andrew Lenharth6353e052006-12-08 18:07:09 +00002805#define YYPOPSTACK (yyvsp--, yyssp--)
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002806
Reid Spencer3822ff52006-11-08 06:47:33 +00002807 YYSIZE_T yystacksize = YYINITDEPTH;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002808
Reid Spencer3822ff52006-11-08 06:47:33 +00002809 /* The variables used to return semantic value and location from the
2810 action routines. */
2811 YYSTYPE yyval;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002812
2813
Andrew Lenharth6353e052006-12-08 18:07:09 +00002814 /* When reducing, the number of symbols on the RHS of the reduced
2815 rule. */
2816 int yylen;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002817
Reid Spencer3822ff52006-11-08 06:47:33 +00002818 YYDPRINTF ((stderr, "Starting parse\n"));
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002819
Reid Spencer68a24bd2005-08-27 18:50:39 +00002820 yystate = 0;
2821 yyerrstatus = 0;
2822 yynerrs = 0;
2823 yychar = YYEMPTY; /* Cause a token to be read. */
2824
2825 /* Initialize stack pointers.
2826 Waste one element of value and location stack
2827 so that they stay on the same level as the state stack.
2828 The wasted elements are never initialized. */
2829
Reid Spencer3822ff52006-11-08 06:47:33 +00002830 yyssp = yyss;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002831 yyvsp = yyvs;
2832
Reid Spencer3822ff52006-11-08 06:47:33 +00002833 goto yysetstate;
Jeff Cohen66c5fd62005-10-23 04:37:20 +00002834
Reid Spencer3822ff52006-11-08 06:47:33 +00002835/*------------------------------------------------------------.
2836| yynewstate -- Push a new state, which is found in yystate. |
2837`------------------------------------------------------------*/
2838 yynewstate:
2839 /* In all cases, when you get here, the value and location stacks
Andrew Lenharth6353e052006-12-08 18:07:09 +00002840 have just been pushed. so pushing a state here evens the stacks.
2841 */
Reid Spencer3822ff52006-11-08 06:47:33 +00002842 yyssp++;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002843
Reid Spencer3822ff52006-11-08 06:47:33 +00002844 yysetstate:
2845 *yyssp = yystate;
2846
2847 if (yyss + yystacksize - 1 <= yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002848 {
2849 /* Get the current used size of the three stacks, in elements. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002850 YYSIZE_T yysize = yyssp - yyss + 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002851
2852#ifdef yyoverflow
Reid Spencer3822ff52006-11-08 06:47:33 +00002853 {
Andrew Lenharth6353e052006-12-08 18:07:09 +00002854 /* Give user a chance to reallocate the stack. Use copies of
Reid Spencer3822ff52006-11-08 06:47:33 +00002855 these so that the &'s don't force the real ones into
2856 memory. */
2857 YYSTYPE *yyvs1 = yyvs;
Reid Spencere4d87aa2006-12-23 06:05:41 +00002858 short int *yyss1 = yyss;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002859
Reid Spencer3822ff52006-11-08 06:47:33 +00002860
2861 /* Each stack pointer address is followed by the size of the
2862 data in use in that stack, in bytes. This used to be a
2863 conditional around just the two extra args, but that might
2864 be undefined if yyoverflow is a macro. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00002865 yyoverflow (YY_("memory exhausted"),
Reid Spencer3822ff52006-11-08 06:47:33 +00002866 &yyss1, yysize * sizeof (*yyssp),
2867 &yyvs1, yysize * sizeof (*yyvsp),
2868
2869 &yystacksize);
2870
2871 yyss = yyss1;
2872 yyvs = yyvs1;
2873 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00002874#else /* no yyoverflow */
Reid Spencer3822ff52006-11-08 06:47:33 +00002875# ifndef YYSTACK_RELOCATE
Reid Spencere4d87aa2006-12-23 06:05:41 +00002876 goto yyexhaustedlab;
Reid Spencer3822ff52006-11-08 06:47:33 +00002877# else
Reid Spencer68a24bd2005-08-27 18:50:39 +00002878 /* Extend the stack our own way. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002879 if (YYMAXDEPTH <= yystacksize)
Reid Spencere4d87aa2006-12-23 06:05:41 +00002880 goto yyexhaustedlab;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002881 yystacksize *= 2;
Reid Spencer3822ff52006-11-08 06:47:33 +00002882 if (YYMAXDEPTH < yystacksize)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002883 yystacksize = YYMAXDEPTH;
Reid Spencer3822ff52006-11-08 06:47:33 +00002884
2885 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00002886 short int *yyss1 = yyss;
Reid Spencer3822ff52006-11-08 06:47:33 +00002887 union yyalloc *yyptr =
2888 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
2889 if (! yyptr)
Reid Spencere4d87aa2006-12-23 06:05:41 +00002890 goto yyexhaustedlab;
Reid Spencer3822ff52006-11-08 06:47:33 +00002891 YYSTACK_RELOCATE (yyss);
2892 YYSTACK_RELOCATE (yyvs);
2893
2894# undef YYSTACK_RELOCATE
2895 if (yyss1 != yyssa)
2896 YYSTACK_FREE (yyss1);
2897 }
2898# endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00002899#endif /* no yyoverflow */
2900
Reid Spencer3822ff52006-11-08 06:47:33 +00002901 yyssp = yyss + yysize - 1;
2902 yyvsp = yyvs + yysize - 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002903
2904
Reid Spencer3822ff52006-11-08 06:47:33 +00002905 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
2906 (unsigned long int) yystacksize));
2907
2908 if (yyss + yystacksize - 1 <= yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002909 YYABORT;
2910 }
2911
Reid Spencer3822ff52006-11-08 06:47:33 +00002912 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
Reid Spencer68a24bd2005-08-27 18:50:39 +00002913
2914 goto yybackup;
Reid Spencer3822ff52006-11-08 06:47:33 +00002915
2916/*-----------.
2917| yybackup. |
2918`-----------*/
2919yybackup:
Reid Spencer68a24bd2005-08-27 18:50:39 +00002920
Andrew Lenharth6353e052006-12-08 18:07:09 +00002921/* Do appropriate processing given the current state. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00002922/* Read a look-ahead token if we need one and don't already have one. */
Andrew Lenharth6353e052006-12-08 18:07:09 +00002923/* yyresume: */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002924
Reid Spencere4d87aa2006-12-23 06:05:41 +00002925 /* First try to decide what to do without reference to look-ahead token. */
Andrew Lenharth6353e052006-12-08 18:07:09 +00002926
Reid Spencer68a24bd2005-08-27 18:50:39 +00002927 yyn = yypact[yystate];
Reid Spencer3822ff52006-11-08 06:47:33 +00002928 if (yyn == YYPACT_NINF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002929 goto yydefault;
2930
Reid Spencere4d87aa2006-12-23 06:05:41 +00002931 /* Not known => get a look-ahead token if don't already have one. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002932
Reid Spencere4d87aa2006-12-23 06:05:41 +00002933 /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002934 if (yychar == YYEMPTY)
2935 {
Reid Spencer3822ff52006-11-08 06:47:33 +00002936 YYDPRINTF ((stderr, "Reading a token: "));
Reid Spencer68a24bd2005-08-27 18:50:39 +00002937 yychar = YYLEX;
2938 }
2939
Reid Spencer3822ff52006-11-08 06:47:33 +00002940 if (yychar <= YYEOF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002941 {
Reid Spencer3822ff52006-11-08 06:47:33 +00002942 yychar = yytoken = YYEOF;
2943 YYDPRINTF ((stderr, "Now at end of input.\n"));
Reid Spencer68a24bd2005-08-27 18:50:39 +00002944 }
2945 else
2946 {
Reid Spencer3822ff52006-11-08 06:47:33 +00002947 yytoken = YYTRANSLATE (yychar);
Reid Spencere4d87aa2006-12-23 06:05:41 +00002948 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
Reid Spencer68a24bd2005-08-27 18:50:39 +00002949 }
2950
Reid Spencer3822ff52006-11-08 06:47:33 +00002951 /* If the proper action on seeing token YYTOKEN is to reduce or to
2952 detect an error, take that action. */
2953 yyn += yytoken;
2954 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002955 goto yydefault;
2956 yyn = yytable[yyn];
Reid Spencer3822ff52006-11-08 06:47:33 +00002957 if (yyn <= 0)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002958 {
Reid Spencer3822ff52006-11-08 06:47:33 +00002959 if (yyn == 0 || yyn == YYTABLE_NINF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002960 goto yyerrlab;
2961 yyn = -yyn;
2962 goto yyreduce;
2963 }
2964
2965 if (yyn == YYFINAL)
2966 YYACCEPT;
2967
Reid Spencere4d87aa2006-12-23 06:05:41 +00002968 /* Shift the look-ahead token. */
2969 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
Andrew Lenharth6353e052006-12-08 18:07:09 +00002970
2971 /* Discard the token being shifted unless it is eof. */
2972 if (yychar != YYEOF)
2973 yychar = YYEMPTY;
2974
2975 *++yyvsp = yylval;
2976
2977
Reid Spencer3822ff52006-11-08 06:47:33 +00002978 /* Count tokens shifted since error; after three, turn off error
2979 status. */
2980 if (yyerrstatus)
2981 yyerrstatus--;
Chris Lattner224f84f2006-08-18 17:34:45 +00002982
Reid Spencer68a24bd2005-08-27 18:50:39 +00002983 yystate = yyn;
2984 goto yynewstate;
2985
Chris Lattnerf49c1762006-11-08 05:58:47 +00002986
Reid Spencer3822ff52006-11-08 06:47:33 +00002987/*-----------------------------------------------------------.
2988| yydefault -- do the default action for the current state. |
2989`-----------------------------------------------------------*/
2990yydefault:
Reid Spencer68a24bd2005-08-27 18:50:39 +00002991 yyn = yydefact[yystate];
2992 if (yyn == 0)
2993 goto yyerrlab;
Reid Spencer3822ff52006-11-08 06:47:33 +00002994 goto yyreduce;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002995
Reid Spencer3822ff52006-11-08 06:47:33 +00002996
2997/*-----------------------------.
2998| yyreduce -- Do a reduction. |
2999`-----------------------------*/
Reid Spencer68a24bd2005-08-27 18:50:39 +00003000yyreduce:
Reid Spencer3822ff52006-11-08 06:47:33 +00003001 /* yyn is the number of a rule to reduce with. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003002 yylen = yyr2[yyn];
3003
Reid Spencer3822ff52006-11-08 06:47:33 +00003004 /* If YYLEN is nonzero, implement the default value of the action:
3005 `$$ = $1'.
3006
3007 Otherwise, the following line sets YYVAL to garbage.
3008 This behavior is undocumented and Bison
3009 users should not rely upon it. Assigning to YYVAL
3010 unconditionally makes the parser a bit smaller, and it avoids a
3011 GCC warning that YYVAL may be used uninitialized. */
3012 yyval = yyvsp[1-yylen];
3013
3014
3015 YY_REDUCE_PRINT (yyn);
3016 switch (yyn)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003017 {
Reid Spencer3822ff52006-11-08 06:47:33 +00003018 case 3:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003019#line 1036 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003020 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003021 if ((yyvsp[0].UIntVal) > (uint32_t)INT32_MAX) // Outside of my range!
Reid Spencer61c83e02006-08-18 08:43:06 +00003022 GEN_ERROR("Value too large for type!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00003023 (yyval.SIntVal) = (int32_t)(yyvsp[0].UIntVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003024 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003025;}
3026 break;
3027
Reid Spencere4d87aa2006-12-23 06:05:41 +00003028 case 31:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003029#line 1052 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003030 { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;}
3031 break;
3032
3033 case 32:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003034#line 1052 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003035 { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;}
3036 break;
3037
3038 case 33:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003039#line 1053 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003040 { (yyval.IPredicate) = ICmpInst::ICMP_SLT; ;}
3041 break;
3042
3043 case 34:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003044#line 1053 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003045 { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;}
3046 break;
3047
3048 case 35:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003049#line 1054 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003050 { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;}
3051 break;
3052
3053 case 36:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003054#line 1054 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003055 { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;}
3056 break;
3057
3058 case 37:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003059#line 1055 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003060 { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;}
3061 break;
3062
3063 case 38:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003064#line 1055 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003065 { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003066 break;
3067
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003068 case 39:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003069#line 1056 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003070 { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003071 break;
3072
3073 case 40:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003074#line 1056 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003075 { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003076 break;
3077
3078 case 41:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003079#line 1060 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003080 { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003081 break;
3082
3083 case 42:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003084#line 1060 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003085 { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003086 break;
3087
3088 case 43:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003089#line 1061 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003090 { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003091 break;
3092
3093 case 44:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003094#line 1061 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003095 { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003096 break;
3097
3098 case 45:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003099#line 1062 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003100 { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003101 break;
3102
3103 case 46:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003104#line 1062 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003105 { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003106 break;
3107
3108 case 47:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003109#line 1063 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003110 { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003111 break;
3112
3113 case 48:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003114#line 1063 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003115 { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003116 break;
3117
3118 case 49:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003119#line 1064 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003120 { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003121 break;
3122
3123 case 50:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003124#line 1064 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003125 { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003126 break;
3127
3128 case 51:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003129#line 1065 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003130 { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003131 break;
3132
3133 case 52:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003134#line 1065 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003135 { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003136 break;
3137
3138 case 53:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003139#line 1066 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003140 { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003141 break;
3142
3143 case 54:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003144#line 1066 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003145 { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003146 break;
3147
3148 case 55:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003149#line 1067 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003150 { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003151 break;
3152
3153 case 56:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003154#line 1068 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003155 { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003156 break;
3157
Reid Spencer14310612006-12-31 05:40:51 +00003158 case 63:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003159#line 1077 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003160 {
3161 (yyval.StrVal) = (yyvsp[-1].StrVal);
3162 CHECK_FOR_ERROR
3163 ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003164 break;
3165
Reid Spencer14310612006-12-31 05:40:51 +00003166 case 64:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003167#line 1081 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003168 {
3169 (yyval.StrVal) = 0;
3170 CHECK_FOR_ERROR
3171 ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003172 break;
3173
Reid Spencer14310612006-12-31 05:40:51 +00003174 case 65:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003175#line 1087 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003176 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003177 break;
3178
Reid Spencer14310612006-12-31 05:40:51 +00003179 case 66:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003180#line 1088 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003181 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003182 break;
3183
Reid Spencer14310612006-12-31 05:40:51 +00003184 case 67:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003185#line 1089 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003186 { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
3187 break;
3188
Reid Spencer14310612006-12-31 05:40:51 +00003189 case 68:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003190#line 1090 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003191 { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003192 break;
3193
Reid Spencer14310612006-12-31 05:40:51 +00003194 case 69:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003195#line 1091 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003196 { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003197 break;
3198
Reid Spencer14310612006-12-31 05:40:51 +00003199 case 70:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003200#line 1095 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003201 { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
3202 break;
3203
Reid Spencer14310612006-12-31 05:40:51 +00003204 case 71:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003205#line 1096 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003206 { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003207 break;
3208
Reid Spencer14310612006-12-31 05:40:51 +00003209 case 72:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003210#line 1097 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003211 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003212 break;
3213
Reid Spencer14310612006-12-31 05:40:51 +00003214 case 73:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003215#line 1101 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003216 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003217 break;
3218
Reid Spencer14310612006-12-31 05:40:51 +00003219 case 74:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003220#line 1102 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003221 { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003222 break;
3223
Reid Spencer14310612006-12-31 05:40:51 +00003224 case 75:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003225#line 1103 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003226 { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003227 break;
3228
Reid Spencer14310612006-12-31 05:40:51 +00003229 case 76:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003230#line 1107 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003231 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3232 break;
3233
3234 case 77:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003235#line 1108 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003236 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003237 break;
3238
Reid Spencer14310612006-12-31 05:40:51 +00003239 case 78:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003240#line 1109 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003241 { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003242 break;
3243
Reid Spencer14310612006-12-31 05:40:51 +00003244 case 79:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003245#line 1110 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003246 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003247 break;
3248
Reid Spencer14310612006-12-31 05:40:51 +00003249 case 80:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003250#line 1111 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003251 { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003252 break;
3253
Reid Spencer14310612006-12-31 05:40:51 +00003254 case 81:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003255#line 1114 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003256 { (yyval.UIntVal) = CallingConv::C; ;}
3257 break;
3258
Reid Spencer14310612006-12-31 05:40:51 +00003259 case 82:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003260#line 1115 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003261 { (yyval.UIntVal) = CallingConv::C; ;}
3262 break;
3263
Reid Spencer14310612006-12-31 05:40:51 +00003264 case 83:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003265#line 1116 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003266 { (yyval.UIntVal) = CallingConv::CSRet; ;}
3267 break;
3268
Reid Spencer14310612006-12-31 05:40:51 +00003269 case 84:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003270#line 1117 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003271 { (yyval.UIntVal) = CallingConv::Fast; ;}
3272 break;
3273
Reid Spencer14310612006-12-31 05:40:51 +00003274 case 85:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003275#line 1118 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003276 { (yyval.UIntVal) = CallingConv::Cold; ;}
3277 break;
3278
Reid Spencer14310612006-12-31 05:40:51 +00003279 case 86:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003280#line 1119 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003281 { (yyval.UIntVal) = CallingConv::X86_StdCall; ;}
3282 break;
3283
Reid Spencer14310612006-12-31 05:40:51 +00003284 case 87:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003285#line 1120 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003286 { (yyval.UIntVal) = CallingConv::X86_FastCall; ;}
3287 break;
3288
Reid Spencer14310612006-12-31 05:40:51 +00003289 case 88:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003290#line 1121 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003291 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003292 if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val))
Reid Spencer61c83e02006-08-18 08:43:06 +00003293 GEN_ERROR("Calling conv too large!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00003294 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
Reid Spencer61c83e02006-08-18 08:43:06 +00003295 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003296 ;}
3297 break;
3298
Reid Spencer14310612006-12-31 05:40:51 +00003299 case 89:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003300#line 1128 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003301 { (yyval.ParamAttrs) = FunctionType::ZExtAttribute; ;}
3302 break;
3303
3304 case 90:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003305#line 1129 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003306 { (yyval.ParamAttrs) = FunctionType::SExtAttribute; ;}
3307 break;
3308
3309 case 91:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003310#line 1132 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003311 { (yyval.ParamAttrs) = (yyvsp[0].ParamAttrs); ;}
3312 break;
3313
3314 case 92:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003315#line 1133 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003316 {
3317 (yyval.ParamAttrs) = FunctionType::ParameterAttributes((yyvsp[-2].ParamAttrs) | (yyvsp[0].ParamAttrs));
3318 ;}
3319 break;
3320
3321 case 93:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003322#line 1138 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003323 { (yyval.ParamAttrs) = FunctionType::NoAttributeSet; ;}
3324 break;
3325
3326 case 94:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003327#line 1139 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003328 { (yyval.ParamAttrs) = (yyvsp[0].ParamAttrs); ;}
3329 break;
3330
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003331 case 95:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003332#line 1140 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003333 { (yyval.ParamAttrs) = (yyvsp[-1].ParamAttrs); ;}
Reid Spencere4d87aa2006-12-23 06:05:41 +00003334 break;
3335
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003336 case 96:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003337#line 1145 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003338 { (yyval.UIntVal) = 0; ;}
3339 break;
3340
Reid Spencer14310612006-12-31 05:40:51 +00003341 case 97:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003342#line 1146 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003343 {
3344 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
3345 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
3346 GEN_ERROR("Alignment must be a power of two!");
3347 CHECK_FOR_ERROR
3348;}
3349 break;
3350
Reid Spencer14310612006-12-31 05:40:51 +00003351 case 98:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003352#line 1152 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003353 { (yyval.UIntVal) = 0; ;}
3354 break;
3355
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003356 case 99:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003357#line 1153 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003358 {
3359 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
3360 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
3361 GEN_ERROR("Alignment must be a power of two!");
3362 CHECK_FOR_ERROR
3363;}
3364 break;
3365
3366 case 100:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003367#line 1161 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003368 {
3369 for (unsigned i = 0, e = strlen((yyvsp[0].StrVal)); i != e; ++i)
3370 if ((yyvsp[0].StrVal)[i] == '"' || (yyvsp[0].StrVal)[i] == '\\')
3371 GEN_ERROR("Invalid character in section name!");
3372 (yyval.StrVal) = (yyvsp[0].StrVal);
3373 CHECK_FOR_ERROR
3374;}
3375 break;
3376
Reid Spencer14310612006-12-31 05:40:51 +00003377 case 101:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003378#line 1169 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003379 { (yyval.StrVal) = 0; ;}
3380 break;
3381
Reid Spencer14310612006-12-31 05:40:51 +00003382 case 102:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003383#line 1170 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003384 { (yyval.StrVal) = (yyvsp[0].StrVal); ;}
3385 break;
3386
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003387 case 103:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003388#line 1175 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003389 {;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003390 break;
3391
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003392 case 104:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003393#line 1176 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003394 {;}
3395 break;
3396
3397 case 105:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003398#line 1177 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003399 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003400 CurGV->setSection((yyvsp[0].StrVal));
3401 free((yyvsp[0].StrVal));
3402 CHECK_FOR_ERROR
3403 ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003404 break;
3405
Reid Spencer14310612006-12-31 05:40:51 +00003406 case 106:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003407#line 1182 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003408 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003409 if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val)))
3410 GEN_ERROR("Alignment must be a power of two!");
3411 CurGV->setAlignment((yyvsp[0].UInt64Val));
3412 CHECK_FOR_ERROR
3413 ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003414 break;
3415
Reid Spencer14310612006-12-31 05:40:51 +00003416 case 115:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003417#line 1198 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00003418 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003419 (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
Reid Spencera132e042006-12-03 05:46:11 +00003420 CHECK_FOR_ERROR
3421 ;}
3422 break;
3423
Reid Spencer14310612006-12-31 05:40:51 +00003424 case 116:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003425#line 1202 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00003426 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003427 (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType));
Reid Spencera132e042006-12-03 05:46:11 +00003428 CHECK_FOR_ERROR
3429 ;}
3430 break;
3431
Reid Spencer14310612006-12-31 05:40:51 +00003432 case 117:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003433#line 1206 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003434 { // Pointer type?
3435 if (*(yyvsp[-1].TypeVal) == Type::LabelTy)
3436 GEN_ERROR("Cannot form a pointer to a basic block");
3437 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PointerType::get(*(yyvsp[-1].TypeVal))));
3438 delete (yyvsp[-1].TypeVal);
3439 CHECK_FOR_ERROR
3440 ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003441 break;
3442
Reid Spencer14310612006-12-31 05:40:51 +00003443 case 118:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003444#line 1213 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003445 { // Named types are also simple types...
3446 const Type* tmp = getTypeVal((yyvsp[0].ValIDVal));
3447 CHECK_FOR_ERROR
3448 (yyval.TypeVal) = new PATypeHolder(tmp);
3449 ;}
3450 break;
3451
3452 case 119:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003453#line 1218 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003454 { // Type UpReference
Reid Spencere4d87aa2006-12-23 06:05:41 +00003455 if ((yyvsp[0].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range!");
Reid Spencer3da59db2006-11-27 01:05:10 +00003456 OpaqueType *OT = OpaqueType::get(); // Use temporary placeholder
Reid Spencere4d87aa2006-12-23 06:05:41 +00003457 UpRefs.push_back(UpRefRecord((unsigned)(yyvsp[0].UInt64Val), OT)); // Add to vector...
3458 (yyval.TypeVal) = new PATypeHolder(OT);
Reid Spencer3da59db2006-11-27 01:05:10 +00003459 UR_OUT("New Upreference!\n");
Reid Spencer61c83e02006-08-18 08:43:06 +00003460 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003461 ;}
3462 break;
3463
Reid Spencer14310612006-12-31 05:40:51 +00003464 case 120:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003465#line 1226 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003466 {
Reid Spencer3da59db2006-11-27 01:05:10 +00003467 std::vector<const Type*> Params;
Reid Spencer14310612006-12-31 05:40:51 +00003468 std::vector<FunctionType::ParameterAttributes> Attrs;
3469 Attrs.push_back((yyvsp[-3].ParamAttrs));
3470 for (TypeWithAttrsList::iterator I=(yyvsp[-1].TypeWithAttrsList)->begin(), E=(yyvsp[-1].TypeWithAttrsList)->end(); I != E; ++I) {
3471 Params.push_back(I->Ty->get());
3472 if (I->Ty->get() != Type::VoidTy)
3473 Attrs.push_back(I->Attrs);
3474 }
Reid Spencer3da59db2006-11-27 01:05:10 +00003475 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
3476 if (isVarArg) Params.pop_back();
3477
Reid Spencer14310612006-12-31 05:40:51 +00003478 FunctionType *FT = FunctionType::get(*(yyvsp[-4].TypeVal), Params, isVarArg, Attrs);
3479 delete (yyvsp[-1].TypeWithAttrsList); // Delete the argument list
3480 delete (yyvsp[-4].TypeVal); // Delete the return type handle
3481 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT));
Reid Spencere4d87aa2006-12-23 06:05:41 +00003482 CHECK_FOR_ERROR
3483 ;}
3484 break;
3485
Reid Spencer14310612006-12-31 05:40:51 +00003486 case 121:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003487#line 1244 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003488 {
3489 std::vector<const Type*> Params;
3490 std::vector<FunctionType::ParameterAttributes> Attrs;
3491 Attrs.push_back((yyvsp[-3].ParamAttrs));
3492 for (TypeWithAttrsList::iterator I=(yyvsp[-1].TypeWithAttrsList)->begin(), E=(yyvsp[-1].TypeWithAttrsList)->end(); I != E; ++I) {
3493 Params.push_back(I->Ty->get());
3494 if (I->Ty->get() != Type::VoidTy)
3495 Attrs.push_back(I->Attrs);
3496 }
3497 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
3498 if (isVarArg) Params.pop_back();
3499
3500 FunctionType *FT = FunctionType::get((yyvsp[-4].PrimType), Params, isVarArg, Attrs);
3501 delete (yyvsp[-1].TypeWithAttrsList); // Delete the argument list
3502 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT));
3503 CHECK_FOR_ERROR
3504 ;}
3505 break;
3506
3507 case 122:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003508#line 1262 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003509 { // Sized array type?
3510 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
3511 delete (yyvsp[-1].TypeVal);
3512 CHECK_FOR_ERROR
3513 ;}
3514 break;
3515
Reid Spencer14310612006-12-31 05:40:51 +00003516 case 123:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003517#line 1267 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003518 { // Packed array type?
3519 const llvm::Type* ElemTy = (yyvsp[-1].TypeVal)->get();
3520 if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val))
3521 GEN_ERROR("Unsigned result not equal to signed result");
3522 if (!ElemTy->isPrimitiveType())
3523 GEN_ERROR("Elemental type of a PackedType must be primitive");
3524 if (!isPowerOf2_32((yyvsp[-3].UInt64Val)))
3525 GEN_ERROR("Vector length should be a power of 2!");
3526 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PackedType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
3527 delete (yyvsp[-1].TypeVal);
3528 CHECK_FOR_ERROR
3529 ;}
3530 break;
3531
Reid Spencer14310612006-12-31 05:40:51 +00003532 case 124:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003533#line 1279 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003534 { // Structure type?
3535 std::vector<const Type*> Elements;
3536 for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-1].TypeList)->begin(),
3537 E = (yyvsp[-1].TypeList)->end(); I != E; ++I)
3538 Elements.push_back(*I);
3539
3540 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
3541 delete (yyvsp[-1].TypeList);
3542 CHECK_FOR_ERROR
3543 ;}
3544 break;
3545
Reid Spencer14310612006-12-31 05:40:51 +00003546 case 125:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003547#line 1289 "/proj/llvm/llvm-3/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*>()));
3550 CHECK_FOR_ERROR
3551 ;}
3552 break;
3553
Reid Spencer14310612006-12-31 05:40:51 +00003554 case 126:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003555#line 1293 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003556 {
3557 std::vector<const Type*> Elements;
3558 for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-2].TypeList)->begin(),
3559 E = (yyvsp[-2].TypeList)->end(); I != E; ++I)
3560 Elements.push_back(*I);
3561
3562 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true)));
3563 delete (yyvsp[-2].TypeList);
3564 CHECK_FOR_ERROR
3565 ;}
3566 break;
3567
Reid Spencer14310612006-12-31 05:40:51 +00003568 case 127:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003569#line 1303 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003570 { // Empty structure type?
3571 (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
3572 CHECK_FOR_ERROR
3573 ;}
3574 break;
3575
Reid Spencer14310612006-12-31 05:40:51 +00003576 case 128:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003577#line 1310 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003578 {
3579 (yyval.TypeWithAttrs).Ty = (yyvsp[-1].TypeVal);
3580 (yyval.TypeWithAttrs).Attrs = (yyvsp[0].ParamAttrs);
3581 ;}
3582 break;
3583
3584 case 129:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003585#line 1317 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003586 {
3587 if (!UpRefs.empty())
3588 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
3589 if (!(*(yyvsp[-1].TypeVal))->isFirstClassType())
3590 GEN_ERROR("LLVM functions cannot return aggregate types!");
3591 (yyval.TypeWithAttrs).Ty = (yyvsp[-1].TypeVal);
3592 (yyval.TypeWithAttrs).Attrs = (yyvsp[0].ParamAttrs);
3593 ;}
3594 break;
3595
3596 case 130:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003597#line 1325 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003598 {
3599 (yyval.TypeWithAttrs).Ty = new PATypeHolder(Type::VoidTy);
3600 (yyval.TypeWithAttrs).Attrs = (yyvsp[0].ParamAttrs);
3601 ;}
3602 break;
3603
3604 case 131:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003605#line 1331 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003606 {
3607 (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
3608 (yyval.TypeWithAttrsList)->push_back((yyvsp[0].TypeWithAttrs));
3609 CHECK_FOR_ERROR
3610 ;}
3611 break;
3612
3613 case 132:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003614#line 1336 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003615 {
3616 ((yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList))->push_back((yyvsp[0].TypeWithAttrs));
3617 CHECK_FOR_ERROR
3618 ;}
3619 break;
3620
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003621 case 134:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003622#line 1344 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003623 {
3624 (yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList);
3625 TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet;
3626 TWA.Ty = new PATypeHolder(Type::VoidTy);
3627 (yyval.TypeWithAttrsList)->push_back(TWA);
Reid Spencere4d87aa2006-12-23 06:05:41 +00003628 CHECK_FOR_ERROR
3629 ;}
3630 break;
3631
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003632 case 135:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003633#line 1351 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003634 {
3635 (yyval.TypeWithAttrsList) = new TypeWithAttrsList;
3636 TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet;
3637 TWA.Ty = new PATypeHolder(Type::VoidTy);
3638 (yyval.TypeWithAttrsList)->push_back(TWA);
3639 CHECK_FOR_ERROR
3640 ;}
3641 break;
3642
3643 case 136:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003644#line 1358 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003645 {
3646 (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
3647 CHECK_FOR_ERROR
3648 ;}
3649 break;
3650
3651 case 137:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003652#line 1366 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003653 {
3654 (yyval.TypeList) = new std::list<PATypeHolder>();
3655 (yyval.TypeList)->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
Reid Spencer3da59db2006-11-27 01:05:10 +00003656 CHECK_FOR_ERROR
3657 ;}
3658 break;
3659
Reid Spencer14310612006-12-31 05:40:51 +00003660 case 138:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003661#line 1371 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003662 {
3663 ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
Reid Spencer3da59db2006-11-27 01:05:10 +00003664 CHECK_FOR_ERROR
3665 ;}
3666 break;
3667
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003668 case 139:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003669#line 1382 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003670 { // Nonempty unsized arr
Reid Spencer14310612006-12-31 05:40:51 +00003671 if (!UpRefs.empty())
3672 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003673 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-3].TypeVal)->get());
3674 if (ATy == 0)
3675 GEN_ERROR("Cannot make array constant with type: '" +
3676 (*(yyvsp[-3].TypeVal))->getDescription() + "'!");
3677 const Type *ETy = ATy->getElementType();
3678 int NumElements = ATy->getNumElements();
3679
3680 // Verify that we have the correct size...
3681 if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
3682 GEN_ERROR("Type mismatch: constant sized array initialized with " +
3683 utostr((yyvsp[-1].ConstVector)->size()) + " arguments, but has size of " +
3684 itostr(NumElements) + "!");
3685
3686 // Verify all elements are correct type!
3687 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
3688 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
3689 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
3690 ETy->getDescription() +"' as required!\nIt is of type '"+
3691 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
3692 }
3693
3694 (yyval.ConstVal) = ConstantArray::get(ATy, *(yyvsp[-1].ConstVector));
3695 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
Reid Spencer3da59db2006-11-27 01:05:10 +00003696 CHECK_FOR_ERROR
3697 ;}
3698 break;
3699
Reid Spencer14310612006-12-31 05:40:51 +00003700 case 140:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003701#line 1410 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003702 {
Reid Spencer14310612006-12-31 05:40:51 +00003703 if (!UpRefs.empty())
3704 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003705 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003706 if (ATy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003707 GEN_ERROR("Cannot make array constant with type: '" +
Reid Spencere4d87aa2006-12-23 06:05:41 +00003708 (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003709
Andrew Lenharth6353e052006-12-08 18:07:09 +00003710 int NumElements = ATy->getNumElements();
3711 if (NumElements != -1 && NumElements != 0)
3712 GEN_ERROR("Type mismatch: constant sized array initialized with 0"
3713 " arguments, but has size of " + itostr(NumElements) +"!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00003714 (yyval.ConstVal) = ConstantArray::get(ATy, std::vector<Constant*>());
3715 delete (yyvsp[-2].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003716 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003717 ;}
3718 break;
3719
Reid Spencer14310612006-12-31 05:40:51 +00003720 case 141:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003721#line 1426 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003722 {
Reid Spencer14310612006-12-31 05:40:51 +00003723 if (!UpRefs.empty())
3724 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003725 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
Andrew Lenharth6353e052006-12-08 18:07:09 +00003726 if (ATy == 0)
3727 GEN_ERROR("Cannot make array constant with type: '" +
Reid Spencere4d87aa2006-12-23 06:05:41 +00003728 (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
Reid Spencer61c83e02006-08-18 08:43:06 +00003729
Andrew Lenharth6353e052006-12-08 18:07:09 +00003730 int NumElements = ATy->getNumElements();
3731 const Type *ETy = ATy->getElementType();
Reid Spencere4d87aa2006-12-23 06:05:41 +00003732 char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
3733 if (NumElements != -1 && NumElements != (EndStr-(yyvsp[0].StrVal)))
Andrew Lenharth6353e052006-12-08 18:07:09 +00003734 GEN_ERROR("Can't build string constant of size " +
Reid Spencere4d87aa2006-12-23 06:05:41 +00003735 itostr((int)(EndStr-(yyvsp[0].StrVal))) +
Andrew Lenharth6353e052006-12-08 18:07:09 +00003736 " when array has size " + itostr(NumElements) + "!");
3737 std::vector<Constant*> Vals;
Reid Spencer14310612006-12-31 05:40:51 +00003738 if (ETy == Type::Int8Ty) {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003739 for (unsigned char *C = (unsigned char *)(yyvsp[0].StrVal);
Reid Spencer14310612006-12-31 05:40:51 +00003740 C != (unsigned char*)EndStr; ++C)
3741 Vals.push_back(ConstantInt::get(ETy, *C));
Andrew Lenharth6353e052006-12-08 18:07:09 +00003742 } else {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003743 free((yyvsp[0].StrVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00003744 GEN_ERROR("Cannot build string arrays of non byte sized elements!");
3745 }
Reid Spencere4d87aa2006-12-23 06:05:41 +00003746 free((yyvsp[0].StrVal));
3747 (yyval.ConstVal) = ConstantArray::get(ATy, Vals);
3748 delete (yyvsp[-2].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003749 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003750 ;}
3751 break;
3752
Reid Spencer14310612006-12-31 05:40:51 +00003753 case 142:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003754#line 1455 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00003755 { // Nonempty unsized arr
Reid Spencer14310612006-12-31 05:40:51 +00003756 if (!UpRefs.empty())
3757 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003758 const PackedType *PTy = dyn_cast<PackedType>((yyvsp[-3].TypeVal)->get());
Andrew Lenharth6353e052006-12-08 18:07:09 +00003759 if (PTy == 0)
3760 GEN_ERROR("Cannot make packed constant with type: '" +
Reid Spencere4d87aa2006-12-23 06:05:41 +00003761 (*(yyvsp[-3].TypeVal))->getDescription() + "'!");
Andrew Lenharth6353e052006-12-08 18:07:09 +00003762 const Type *ETy = PTy->getElementType();
3763 int NumElements = PTy->getNumElements();
Reid Spencer68a24bd2005-08-27 18:50:39 +00003764
Andrew Lenharth6353e052006-12-08 18:07:09 +00003765 // Verify that we have the correct size...
Reid Spencere4d87aa2006-12-23 06:05:41 +00003766 if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
Andrew Lenharth6353e052006-12-08 18:07:09 +00003767 GEN_ERROR("Type mismatch: constant sized packed initialized with " +
Reid Spencere4d87aa2006-12-23 06:05:41 +00003768 utostr((yyvsp[-1].ConstVector)->size()) + " arguments, but has size of " +
Andrew Lenharth6353e052006-12-08 18:07:09 +00003769 itostr(NumElements) + "!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003770
Andrew Lenharth6353e052006-12-08 18:07:09 +00003771 // Verify all elements are correct type!
Reid Spencere4d87aa2006-12-23 06:05:41 +00003772 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
3773 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
Andrew Lenharth6353e052006-12-08 18:07:09 +00003774 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
3775 ETy->getDescription() +"' as required!\nIt is of type '"+
Reid Spencere4d87aa2006-12-23 06:05:41 +00003776 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
Andrew Lenharth6353e052006-12-08 18:07:09 +00003777 }
3778
Reid Spencere4d87aa2006-12-23 06:05:41 +00003779 (yyval.ConstVal) = ConstantPacked::get(PTy, *(yyvsp[-1].ConstVector));
3780 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
Reid Spencer61c83e02006-08-18 08:43:06 +00003781 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003782 ;}
3783 break;
3784
Reid Spencer14310612006-12-31 05:40:51 +00003785 case 143:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003786#line 1483 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003787 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003788 const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal)->get());
Andrew Lenharth6353e052006-12-08 18:07:09 +00003789 if (STy == 0)
3790 GEN_ERROR("Cannot make struct constant with type: '" +
Reid Spencere4d87aa2006-12-23 06:05:41 +00003791 (*(yyvsp[-3].TypeVal))->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003792
Reid Spencere4d87aa2006-12-23 06:05:41 +00003793 if ((yyvsp[-1].ConstVector)->size() != STy->getNumContainedTypes())
Andrew Lenharth6353e052006-12-08 18:07:09 +00003794 GEN_ERROR("Illegal number of initializers for structure type!");
3795
3796 // Check to ensure that constants are compatible with the type initializer!
Reid Spencere4d87aa2006-12-23 06:05:41 +00003797 for (unsigned i = 0, e = (yyvsp[-1].ConstVector)->size(); i != e; ++i)
3798 if ((*(yyvsp[-1].ConstVector))[i]->getType() != STy->getElementType(i))
Andrew Lenharth6353e052006-12-08 18:07:09 +00003799 GEN_ERROR("Expected type '" +
3800 STy->getElementType(i)->getDescription() +
3801 "' for element #" + utostr(i) +
3802 " of structure initializer!");
3803
Reid Spencere4d87aa2006-12-23 06:05:41 +00003804 (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[-1].ConstVector));
3805 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
Reid Spencer61c83e02006-08-18 08:43:06 +00003806 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003807 ;}
3808 break;
3809
Reid Spencer14310612006-12-31 05:40:51 +00003810 case 144:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003811#line 1504 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003812 {
Reid Spencer14310612006-12-31 05:40:51 +00003813 if (!UpRefs.empty())
3814 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003815 const StructType *STy = dyn_cast<StructType>((yyvsp[-2].TypeVal)->get());
Andrew Lenharth6353e052006-12-08 18:07:09 +00003816 if (STy == 0)
3817 GEN_ERROR("Cannot make struct constant with type: '" +
Reid Spencere4d87aa2006-12-23 06:05:41 +00003818 (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
Andrew Lenharth6353e052006-12-08 18:07:09 +00003819
3820 if (STy->getNumContainedTypes() != 0)
3821 GEN_ERROR("Illegal number of initializers for structure type!");
3822
Reid Spencere4d87aa2006-12-23 06:05:41 +00003823 (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
3824 delete (yyvsp[-2].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003825 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003826 ;}
3827 break;
3828
Reid Spencer14310612006-12-31 05:40:51 +00003829 case 145:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003830#line 1519 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003831 {
Reid Spencer14310612006-12-31 05:40:51 +00003832 if (!UpRefs.empty())
3833 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003834 const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
Andrew Lenharth6353e052006-12-08 18:07:09 +00003835 if (PTy == 0)
3836 GEN_ERROR("Cannot make null pointer constant with type: '" +
Reid Spencere4d87aa2006-12-23 06:05:41 +00003837 (*(yyvsp[-1].TypeVal))->getDescription() + "'!");
Andrew Lenharth6353e052006-12-08 18:07:09 +00003838
Reid Spencere4d87aa2006-12-23 06:05:41 +00003839 (yyval.ConstVal) = ConstantPointerNull::get(PTy);
3840 delete (yyvsp[-1].TypeVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00003841 CHECK_FOR_ERROR
3842 ;}
3843 break;
3844
Reid Spencer14310612006-12-31 05:40:51 +00003845 case 146:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003846#line 1531 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00003847 {
Reid Spencer14310612006-12-31 05:40:51 +00003848 if (!UpRefs.empty())
3849 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003850 (yyval.ConstVal) = UndefValue::get((yyvsp[-1].TypeVal)->get());
3851 delete (yyvsp[-1].TypeVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00003852 CHECK_FOR_ERROR
3853 ;}
3854 break;
3855
Reid Spencer14310612006-12-31 05:40:51 +00003856 case 147:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003857#line 1538 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00003858 {
Reid Spencer14310612006-12-31 05:40:51 +00003859 if (!UpRefs.empty())
3860 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003861 const PointerType *Ty = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003862 if (Ty == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003863 GEN_ERROR("Global const reference must be a pointer type!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003864
3865 // ConstExprs can exist in the body of a function, thus creating
3866 // GlobalValues whenever they refer to a variable. Because we are in
3867 // the context of a function, getValNonImprovising will search the functions
3868 // symbol table instead of the module symbol table for the global symbol,
3869 // which throws things all off. To get around this, we just tell
3870 // getValNonImprovising that we are at global scope here.
3871 //
3872 Function *SavedCurFn = CurFun.CurrentFunction;
3873 CurFun.CurrentFunction = 0;
3874
Reid Spencere4d87aa2006-12-23 06:05:41 +00003875 Value *V = getValNonImprovising(Ty, (yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00003876 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00003877
3878 CurFun.CurrentFunction = SavedCurFn;
3879
3880 // If this is an initializer for a constant pointer, which is referencing a
3881 // (currently) undefined variable, create a stub now that shall be replaced
3882 // in the future with the right type of variable.
3883 //
3884 if (V == 0) {
3885 assert(isa<PointerType>(Ty) && "Globals may only be used as pointers!");
3886 const PointerType *PT = cast<PointerType>(Ty);
3887
3888 // First check to see if the forward references value is already created!
3889 PerModuleInfo::GlobalRefsType::iterator I =
Reid Spencere4d87aa2006-12-23 06:05:41 +00003890 CurModule.GlobalRefs.find(std::make_pair(PT, (yyvsp[0].ValIDVal)));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003891
3892 if (I != CurModule.GlobalRefs.end()) {
3893 V = I->second; // Placeholder already exists, use it...
Reid Spencere4d87aa2006-12-23 06:05:41 +00003894 (yyvsp[0].ValIDVal).destroy();
Reid Spencer68a24bd2005-08-27 18:50:39 +00003895 } else {
3896 std::string Name;
Reid Spencere4d87aa2006-12-23 06:05:41 +00003897 if ((yyvsp[0].ValIDVal).Type == ValID::NameVal) Name = (yyvsp[0].ValIDVal).Name;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003898
3899 // Create the forward referenced global.
3900 GlobalValue *GV;
3901 if (const FunctionType *FTy =
3902 dyn_cast<FunctionType>(PT->getElementType())) {
3903 GV = new Function(FTy, GlobalValue::ExternalLinkage, Name,
3904 CurModule.CurrentModule);
3905 } else {
3906 GV = new GlobalVariable(PT->getElementType(), false,
3907 GlobalValue::ExternalLinkage, 0,
3908 Name, CurModule.CurrentModule);
3909 }
3910
3911 // Keep track of the fact that we have a forward ref to recycle it
Reid Spencere4d87aa2006-12-23 06:05:41 +00003912 CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, (yyvsp[0].ValIDVal)), GV));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003913 V = GV;
3914 }
3915 }
3916
Reid Spencere4d87aa2006-12-23 06:05:41 +00003917 (yyval.ConstVal) = cast<GlobalValue>(V);
3918 delete (yyvsp[-1].TypeVal); // Free the type handle
3919 CHECK_FOR_ERROR
3920 ;}
3921 break;
3922
Reid Spencer14310612006-12-31 05:40:51 +00003923 case 148:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003924#line 1601 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003925 {
Reid Spencer14310612006-12-31 05:40:51 +00003926 if (!UpRefs.empty())
3927 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003928 if ((yyvsp[-1].TypeVal)->get() != (yyvsp[0].ConstVal)->getType())
3929 GEN_ERROR("Mismatched types for constant expression!");
3930 (yyval.ConstVal) = (yyvsp[0].ConstVal);
3931 delete (yyvsp[-1].TypeVal);
3932 CHECK_FOR_ERROR
3933 ;}
3934 break;
3935
Reid Spencer14310612006-12-31 05:40:51 +00003936 case 149:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003937#line 1610 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003938 {
Reid Spencer14310612006-12-31 05:40:51 +00003939 if (!UpRefs.empty())
3940 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003941 const Type *Ty = (yyvsp[-1].TypeVal)->get();
3942 if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
3943 GEN_ERROR("Cannot create a null initialized value of this type!");
3944 (yyval.ConstVal) = Constant::getNullValue(Ty);
3945 delete (yyvsp[-1].TypeVal);
3946 CHECK_FOR_ERROR
3947 ;}
3948 break;
3949
Reid Spencer14310612006-12-31 05:40:51 +00003950 case 150:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003951#line 1620 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003952 { // integral constants
3953 if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val)))
3954 GEN_ERROR("Constant value doesn't fit in type!");
3955 (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val));
3956 CHECK_FOR_ERROR
3957 ;}
3958 break;
3959
3960 case 151:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003961#line 1626 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003962 { // integral constants
3963 if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val)))
3964 GEN_ERROR("Constant value doesn't fit in type!");
3965 (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val));
3966 CHECK_FOR_ERROR
3967 ;}
3968 break;
3969
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003970 case 152:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003971#line 1632 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003972 { // Boolean constants
3973 (yyval.ConstVal) = ConstantBool::getTrue();
3974 CHECK_FOR_ERROR
3975 ;}
3976 break;
3977
Reid Spencer14310612006-12-31 05:40:51 +00003978 case 153:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003979#line 1636 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003980 { // Boolean constants
3981 (yyval.ConstVal) = ConstantBool::getFalse();
Reid Spencer61c83e02006-08-18 08:43:06 +00003982 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003983 ;}
3984 break;
3985
Reid Spencer14310612006-12-31 05:40:51 +00003986 case 154:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003987#line 1640 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003988 { // Float & Double constants
3989 if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].FPVal)))
3990 GEN_ERROR("Floating point constant invalid for type!!");
3991 (yyval.ConstVal) = ConstantFP::get((yyvsp[-1].PrimType), (yyvsp[0].FPVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00003992 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003993 ;}
3994 break;
3995
Reid Spencer14310612006-12-31 05:40:51 +00003996 case 155:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003997#line 1648 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00003998 {
Reid Spencer14310612006-12-31 05:40:51 +00003999 if (!UpRefs.empty())
4000 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00004001 Constant *Val = (yyvsp[-3].ConstVal);
4002 const Type *Ty = (yyvsp[-1].TypeVal)->get();
Reid Spencer3da59db2006-11-27 01:05:10 +00004003 if (!Val->getType()->isFirstClassType())
Reid Spencer61c83e02006-08-18 08:43:06 +00004004 GEN_ERROR("cast constant expression from a non-primitive type: '" +
Reid Spencer3da59db2006-11-27 01:05:10 +00004005 Val->getType()->getDescription() + "'!");
4006 if (!Ty->isFirstClassType())
Reid Spencer61c83e02006-08-18 08:43:06 +00004007 GEN_ERROR("cast constant expression to a non-primitive type: '" +
Reid Spencer3da59db2006-11-27 01:05:10 +00004008 Ty->getDescription() + "'!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00004009 (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].TypeVal)->get());
4010 delete (yyvsp[-1].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004011 ;}
4012 break;
4013
Reid Spencer14310612006-12-31 05:40:51 +00004014 case 156:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004015#line 1662 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004016 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004017 if (!isa<PointerType>((yyvsp[-2].ConstVal)->getType()))
Andrew Lenharth6353e052006-12-08 18:07:09 +00004018 GEN_ERROR("GetElementPtr requires a pointer operand!");
4019
4020 const Type *IdxTy =
Reid Spencere4d87aa2006-12-23 06:05:41 +00004021 GetElementPtrInst::getIndexedType((yyvsp[-2].ConstVal)->getType(), *(yyvsp[-1].ValueList), true);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004022 if (!IdxTy)
4023 GEN_ERROR("Index list invalid for constant getelementptr!");
4024
4025 std::vector<Constant*> IdxVec;
Reid Spencere4d87aa2006-12-23 06:05:41 +00004026 for (unsigned i = 0, e = (yyvsp[-1].ValueList)->size(); i != e; ++i)
4027 if (Constant *C = dyn_cast<Constant>((*(yyvsp[-1].ValueList))[i]))
Andrew Lenharth6353e052006-12-08 18:07:09 +00004028 IdxVec.push_back(C);
4029 else
4030 GEN_ERROR("Indices to constant getelementptr must be constants!");
4031
Reid Spencere4d87aa2006-12-23 06:05:41 +00004032 delete (yyvsp[-1].ValueList);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004033
Reid Spencere4d87aa2006-12-23 06:05:41 +00004034 (yyval.ConstVal) = ConstantExpr::getGetElementPtr((yyvsp[-2].ConstVal), IdxVec);
4035 CHECK_FOR_ERROR
4036 ;}
4037 break;
4038
Reid Spencer14310612006-12-31 05:40:51 +00004039 case 157:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004040#line 1683 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004041 {
4042 if ((yyvsp[-5].ConstVal)->getType() != Type::BoolTy)
4043 GEN_ERROR("Select condition must be of boolean type!");
4044 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
4045 GEN_ERROR("Select operand types must match!");
4046 (yyval.ConstVal) = ConstantExpr::getSelect((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4047 CHECK_FOR_ERROR
4048 ;}
4049 break;
4050
Reid Spencer14310612006-12-31 05:40:51 +00004051 case 158:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004052#line 1691 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004053 {
4054 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
4055 GEN_ERROR("Binary operator types must match!");
4056 CHECK_FOR_ERROR;
4057 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4058 ;}
4059 break;
4060
Reid Spencer14310612006-12-31 05:40:51 +00004061 case 159:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004062#line 1697 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004063 {
4064 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
4065 GEN_ERROR("Logical operator types must match!");
4066 if (!(yyvsp[-3].ConstVal)->getType()->isIntegral()) {
4067 if (!isa<PackedType>((yyvsp[-3].ConstVal)->getType()) ||
4068 !cast<PackedType>((yyvsp[-3].ConstVal)->getType())->getElementType()->isIntegral())
4069 GEN_ERROR("Logical operator requires integral operands!");
4070 }
4071 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4072 CHECK_FOR_ERROR
4073 ;}
4074 break;
4075
Reid Spencer14310612006-12-31 05:40:51 +00004076 case 160:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004077#line 1708 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004078 {
4079 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
4080 GEN_ERROR("icmp operand types must match!");
4081 (yyval.ConstVal) = ConstantExpr::getICmp((yyvsp[-5].IPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4082 ;}
4083 break;
4084
Reid Spencer14310612006-12-31 05:40:51 +00004085 case 161:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004086#line 1713 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004087 {
4088 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
4089 GEN_ERROR("fcmp operand types must match!");
4090 (yyval.ConstVal) = ConstantExpr::getFCmp((yyvsp[-5].FPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4091 ;}
4092 break;
4093
Reid Spencer14310612006-12-31 05:40:51 +00004094 case 162:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004095#line 1718 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004096 {
Reid Spencer14310612006-12-31 05:40:51 +00004097 if ((yyvsp[-1].ConstVal)->getType() != Type::Int8Ty)
4098 GEN_ERROR("Shift count for shift constant must be i8 type!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00004099 if (!(yyvsp[-3].ConstVal)->getType()->isInteger())
4100 GEN_ERROR("Shift constant expression requires integer operand!");
4101 CHECK_FOR_ERROR;
4102 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].OtherOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00004103 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004104 ;}
4105 break;
4106
Reid Spencer14310612006-12-31 05:40:51 +00004107 case 163:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004108#line 1727 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004109 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004110 if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
4111 GEN_ERROR("Invalid extractelement operands!");
4112 (yyval.ConstVal) = ConstantExpr::getExtractElement((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004113 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004114 ;}
4115 break;
4116
Reid Spencer14310612006-12-31 05:40:51 +00004117 case 164:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004118#line 1733 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004119 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004120 if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
4121 GEN_ERROR("Invalid insertelement operands!");
4122 (yyval.ConstVal) = ConstantExpr::getInsertElement((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4123 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004124 ;}
4125 break;
4126
Reid Spencer14310612006-12-31 05:40:51 +00004127 case 165:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004128#line 1739 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004129 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004130 if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
4131 GEN_ERROR("Invalid shufflevector operands!");
4132 (yyval.ConstVal) = ConstantExpr::getShuffleVector((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00004133 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00004134 ;}
4135 break;
4136
Reid Spencer14310612006-12-31 05:40:51 +00004137 case 166:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004138#line 1748 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00004139 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004140 ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00004141 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00004142 ;}
4143 break;
4144
Reid Spencer14310612006-12-31 05:40:51 +00004145 case 167:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004146#line 1752 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00004147 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004148 (yyval.ConstVector) = new std::vector<Constant*>();
4149 (yyval.ConstVector)->push_back((yyvsp[0].ConstVal));
4150 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004151 ;}
4152 break;
4153
Reid Spencer14310612006-12-31 05:40:51 +00004154 case 168:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004155#line 1760 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004156 { (yyval.BoolVal) = false; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00004157 break;
4158
Reid Spencer14310612006-12-31 05:40:51 +00004159 case 169:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004160#line 1760 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004161 { (yyval.BoolVal) = true; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00004162 break;
4163
Reid Spencer14310612006-12-31 05:40:51 +00004164 case 170:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004165#line 1771 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00004166 {
4167 (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
4168 CurModule.ModuleDone();
4169 CHECK_FOR_ERROR;
4170 ;}
4171 break;
4172
4173 case 171:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004174#line 1776 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00004175 {
4176 (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
4177 CurModule.ModuleDone();
4178 CHECK_FOR_ERROR;
4179 ;}
4180 break;
4181
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004182 case 174:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004183#line 1789 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004184 { CurFun.isDeclare = false ;}
4185 break;
4186
Reid Spencer14310612006-12-31 05:40:51 +00004187 case 175:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004188#line 1789 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004189 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00004190 CurFun.FunctionDone();
Reid Spencer61c83e02006-08-18 08:43:06 +00004191 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004192 ;}
4193 break;
4194
Reid Spencer14310612006-12-31 05:40:51 +00004195 case 176:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004196#line 1793 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004197 { CurFun.isDeclare = true; ;}
4198 break;
4199
Reid Spencer14310612006-12-31 05:40:51 +00004200 case 177:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004201#line 1793 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004202 {
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004203 CHECK_FOR_ERROR
4204 ;}
4205 break;
4206
Reid Spencer14310612006-12-31 05:40:51 +00004207 case 178:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004208#line 1796 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004209 {
Andrew Lenharth6353e052006-12-08 18:07:09 +00004210 CHECK_FOR_ERROR
4211 ;}
4212 break;
4213
Reid Spencer14310612006-12-31 05:40:51 +00004214 case 179:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004215#line 1799 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00004216 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00004217 // Emit an error if there are any unresolved types left.
4218 if (!CurModule.LateResolveTypes.empty()) {
4219 const ValID &DID = CurModule.LateResolveTypes.begin()->first;
Reid Spencer61c83e02006-08-18 08:43:06 +00004220 if (DID.Type == ValID::NameVal) {
4221 GEN_ERROR("Reference to an undefined type: '"+DID.getName() + "'");
4222 } else {
4223 GEN_ERROR("Reference to an undefined type: #" + itostr(DID.Num));
4224 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004225 }
Reid Spencer61c83e02006-08-18 08:43:06 +00004226 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004227 ;}
4228 break;
4229
Reid Spencer14310612006-12-31 05:40:51 +00004230 case 180:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004231#line 1811 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004232 {
Reid Spencer14310612006-12-31 05:40:51 +00004233 if (!UpRefs.empty())
4234 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004235 // Eagerly resolve types. This is not an optimization, this is a
4236 // requirement that is due to the fact that we could have this:
4237 //
4238 // %list = type { %list * }
4239 // %list = type { %list * } ; repeated type decl
4240 //
4241 // If types are not resolved eagerly, then the two types will not be
4242 // determined to be the same type!
4243 //
Reid Spencere4d87aa2006-12-23 06:05:41 +00004244 ResolveTypeTo((yyvsp[-2].StrVal), *(yyvsp[0].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004245
Reid Spencere4d87aa2006-12-23 06:05:41 +00004246 if (!setTypeName(*(yyvsp[0].TypeVal), (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) {
Reid Spencer5b7e7532006-09-28 19:28:24 +00004247 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004248 // If this is a named type that is not a redefinition, add it to the slot
4249 // table.
Reid Spencere4d87aa2006-12-23 06:05:41 +00004250 CurModule.Types.push_back(*(yyvsp[0].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004251 }
Reid Spencera132e042006-12-03 05:46:11 +00004252
Reid Spencere4d87aa2006-12-23 06:05:41 +00004253 delete (yyvsp[0].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004254 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004255 ;}
4256 break;
4257
Reid Spencer14310612006-12-31 05:40:51 +00004258 case 181:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004259#line 1835 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00004260 {
4261 ResolveTypeTo((yyvsp[-2].StrVal), (yyvsp[0].PrimType));
4262
4263 if (!setTypeName((yyvsp[0].PrimType), (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) {
4264 CHECK_FOR_ERROR
4265 // If this is a named type that is not a redefinition, add it to the slot
4266 // table.
4267 CurModule.Types.push_back((yyvsp[0].PrimType));
4268 }
4269 CHECK_FOR_ERROR
4270 ;}
4271 break;
4272
4273 case 182:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004274#line 1846 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004275 { /* "Externally Visible" Linkage */
4276 if ((yyvsp[0].ConstVal) == 0)
4277 GEN_ERROR("Global value initializer is not a constant!");
4278 CurGV = ParseGlobalVariable((yyvsp[-2].StrVal), GlobalValue::ExternalLinkage, (yyvsp[-1].BoolVal),
4279 (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004280 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004281 ;}
4282 break;
4283
Reid Spencer14310612006-12-31 05:40:51 +00004284 case 183:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004285#line 1852 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004286 {
4287 CurGV = 0;
Reid Spencer3822ff52006-11-08 06:47:33 +00004288 ;}
4289 break;
4290
Reid Spencer14310612006-12-31 05:40:51 +00004291 case 184:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004292#line 1855 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004293 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004294 if ((yyvsp[0].ConstVal) == 0)
Andrew Lenharth6353e052006-12-08 18:07:09 +00004295 GEN_ERROR("Global value initializer is not a constant!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00004296 CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), (yyvsp[-2].Linkage), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal));
4297 CHECK_FOR_ERROR
4298 ;}
4299 break;
4300
Reid Spencer14310612006-12-31 05:40:51 +00004301 case 185:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004302#line 1860 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004303 {
4304 CurGV = 0;
4305 ;}
4306 break;
4307
Reid Spencer14310612006-12-31 05:40:51 +00004308 case 186:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004309#line 1863 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004310 {
Reid Spencer14310612006-12-31 05:40:51 +00004311 if (!UpRefs.empty())
4312 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004313 CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), (yyvsp[-2].Linkage), (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
Reid Spencere4d87aa2006-12-23 06:05:41 +00004314 CHECK_FOR_ERROR
4315 delete (yyvsp[0].TypeVal);
4316 ;}
4317 break;
4318
Reid Spencer14310612006-12-31 05:40:51 +00004319 case 187:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004320#line 1869 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004321 {
4322 CurGV = 0;
4323 CHECK_FOR_ERROR
4324 ;}
4325 break;
4326
Reid Spencer14310612006-12-31 05:40:51 +00004327 case 188:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004328#line 1873 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004329 {
4330 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004331 ;}
4332 break;
4333
Reid Spencer14310612006-12-31 05:40:51 +00004334 case 189:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004335#line 1876 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004336 {
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004337 CHECK_FOR_ERROR
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004338 ;}
4339 break;
4340
Reid Spencer14310612006-12-31 05:40:51 +00004341 case 190:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004342#line 1882 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004343 {
Chris Lattner66316012006-01-24 04:14:29 +00004344 const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
Reid Spencere4d87aa2006-12-23 06:05:41 +00004345 char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
4346 std::string NewAsm((yyvsp[0].StrVal), EndStr);
4347 free((yyvsp[0].StrVal));
Chris Lattner66316012006-01-24 04:14:29 +00004348
4349 if (AsmSoFar.empty())
4350 CurModule.CurrentModule->setModuleInlineAsm(NewAsm);
4351 else
4352 CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm);
Reid Spencer61c83e02006-08-18 08:43:06 +00004353 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004354;}
4355 break;
4356
Reid Spencer14310612006-12-31 05:40:51 +00004357 case 191:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004358#line 1895 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004359 { (yyval.Endianness) = Module::BigEndian; ;}
4360 break;
4361
Reid Spencer14310612006-12-31 05:40:51 +00004362 case 192:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004363#line 1896 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004364 { (yyval.Endianness) = Module::LittleEndian; ;}
4365 break;
4366
Reid Spencer14310612006-12-31 05:40:51 +00004367 case 193:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004368#line 1898 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004369 {
4370 CurModule.CurrentModule->setEndianness((yyvsp[0].Endianness));
4371 CHECK_FOR_ERROR
4372 ;}
4373 break;
4374
Reid Spencer14310612006-12-31 05:40:51 +00004375 case 194:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004376#line 1902 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004377 {
4378 if ((yyvsp[0].UInt64Val) == 32)
4379 CurModule.CurrentModule->setPointerSize(Module::Pointer32);
4380 else if ((yyvsp[0].UInt64Val) == 64)
4381 CurModule.CurrentModule->setPointerSize(Module::Pointer64);
4382 else
4383 GEN_ERROR("Invalid pointer size: '" + utostr((yyvsp[0].UInt64Val)) + "'!");
4384 CHECK_FOR_ERROR
4385 ;}
4386 break;
4387
Reid Spencer14310612006-12-31 05:40:51 +00004388 case 195:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004389#line 1911 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004390 {
4391 CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal));
4392 free((yyvsp[0].StrVal));
4393 ;}
4394 break;
4395
Reid Spencer14310612006-12-31 05:40:51 +00004396 case 196:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004397#line 1915 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004398 {
4399 CurModule.CurrentModule->setDataLayout((yyvsp[0].StrVal));
4400 free((yyvsp[0].StrVal));
4401 ;}
4402 break;
4403
Reid Spencer14310612006-12-31 05:40:51 +00004404 case 198:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004405#line 1922 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004406 {
4407 CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
4408 free((yyvsp[0].StrVal));
4409 CHECK_FOR_ERROR
4410 ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004411 break;
4412
Reid Spencer14310612006-12-31 05:40:51 +00004413 case 199:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004414#line 1927 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004415 {
4416 CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
4417 free((yyvsp[0].StrVal));
4418 CHECK_FOR_ERROR
4419 ;}
4420 break;
4421
Reid Spencer14310612006-12-31 05:40:51 +00004422 case 200:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004423#line 1932 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004424 {
4425 CHECK_FOR_ERROR
4426 ;}
4427 break;
4428
Reid Spencer14310612006-12-31 05:40:51 +00004429 case 204:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004430#line 1942 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004431 { (yyval.StrVal) = 0; ;}
4432 break;
4433
Reid Spencer14310612006-12-31 05:40:51 +00004434 case 205:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004435#line 1944 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00004436 {
Reid Spencer14310612006-12-31 05:40:51 +00004437 if (!UpRefs.empty())
4438 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
4439 if (*(yyvsp[-2].TypeVal) == Type::VoidTy)
4440 GEN_ERROR("void typed arguments are invalid!");
4441 ArgListEntry E; E.Attrs = (yyvsp[-1].ParamAttrs); E.Ty = (yyvsp[-2].TypeVal); E.Name = (yyvsp[0].StrVal);
4442 (yyval.ArgList) = (yyvsp[-4].ArgList);
4443 (yyvsp[-4].ArgList)->push_back(E);
Reid Spencer61c83e02006-08-18 08:43:06 +00004444 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004445 ;}
4446 break;
4447
Reid Spencer14310612006-12-31 05:40:51 +00004448 case 206:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004449#line 1954 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004450 {
Reid Spencer14310612006-12-31 05:40:51 +00004451 if (!UpRefs.empty())
4452 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
4453 if (*(yyvsp[-2].TypeVal) == Type::VoidTy)
4454 GEN_ERROR("void typed arguments are invalid!");
4455 ArgListEntry E; E.Attrs = (yyvsp[-1].ParamAttrs); E.Ty = (yyvsp[-2].TypeVal); E.Name = (yyvsp[0].StrVal);
4456 (yyval.ArgList) = new ArgListType;
4457 (yyval.ArgList)->push_back(E);
Reid Spencer61c83e02006-08-18 08:43:06 +00004458 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004459 ;}
4460 break;
4461
Reid Spencer14310612006-12-31 05:40:51 +00004462 case 207:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004463#line 1965 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004464 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004465 (yyval.ArgList) = (yyvsp[0].ArgList);
Reid Spencer61c83e02006-08-18 08:43:06 +00004466 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004467 ;}
4468 break;
4469
Reid Spencer14310612006-12-31 05:40:51 +00004470 case 208:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004471#line 1969 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004472 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004473 (yyval.ArgList) = (yyvsp[-2].ArgList);
Reid Spencer14310612006-12-31 05:40:51 +00004474 struct ArgListEntry E;
4475 E.Ty = new PATypeHolder(Type::VoidTy);
4476 E.Name = 0;
4477 E.Attrs = FunctionType::NoAttributeSet;
4478 (yyval.ArgList)->push_back(E);
Reid Spencer61c83e02006-08-18 08:43:06 +00004479 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004480 ;}
4481 break;
4482
Reid Spencer14310612006-12-31 05:40:51 +00004483 case 209:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004484#line 1978 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004485 {
Reid Spencer14310612006-12-31 05:40:51 +00004486 (yyval.ArgList) = new ArgListType;
4487 struct ArgListEntry E;
4488 E.Ty = new PATypeHolder(Type::VoidTy);
4489 E.Name = 0;
4490 E.Attrs = FunctionType::NoAttributeSet;
4491 (yyval.ArgList)->push_back(E);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004492 CHECK_FOR_ERROR
4493 ;}
4494 break;
4495
Reid Spencer14310612006-12-31 05:40:51 +00004496 case 210:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004497#line 1987 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00004498 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004499 (yyval.ArgList) = 0;
Andrew Lenharth6353e052006-12-08 18:07:09 +00004500 CHECK_FOR_ERROR
4501 ;}
4502 break;
4503
Reid Spencer14310612006-12-31 05:40:51 +00004504 case 211:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004505#line 1993 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00004506 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004507 UnEscapeLexed((yyvsp[-5].StrVal));
4508 std::string FunctionName((yyvsp[-5].StrVal));
4509 free((yyvsp[-5].StrVal)); // Free strdup'd memory!
Reid Spencer68a24bd2005-08-27 18:50:39 +00004510
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004511 // Check the function result for abstractness if this is a define. We should
4512 // have no abstract types at this point
4513 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved((yyvsp[-6].TypeWithAttrs).Ty))
4514 GEN_ERROR("Reference to abstract result: "+ (yyvsp[-6].TypeWithAttrs).Ty->get()->getDescription());
4515
Reid Spencer68a24bd2005-08-27 18:50:39 +00004516 std::vector<const Type*> ParamTypeList;
Reid Spencer14310612006-12-31 05:40:51 +00004517 std::vector<FunctionType::ParameterAttributes> ParamAttrs;
4518 ParamAttrs.push_back((yyvsp[-6].TypeWithAttrs).Attrs);
Reid Spencere4d87aa2006-12-23 06:05:41 +00004519 if ((yyvsp[-3].ArgList)) { // If there are arguments...
Reid Spencer14310612006-12-31 05:40:51 +00004520 for (ArgListType::iterator I = (yyvsp[-3].ArgList)->begin(); I != (yyvsp[-3].ArgList)->end(); ++I) {
4521 const Type* Ty = I->Ty->get();
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004522 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(I->Ty))
4523 GEN_ERROR("Reference to abstract argument: " + Ty->getDescription());
Reid Spencer14310612006-12-31 05:40:51 +00004524 ParamTypeList.push_back(Ty);
4525 if (Ty != Type::VoidTy)
4526 ParamAttrs.push_back(I->Attrs);
4527 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004528 }
4529
4530 bool isVarArg = ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy;
4531 if (isVarArg) ParamTypeList.pop_back();
4532
Reid Spencer14310612006-12-31 05:40:51 +00004533 FunctionType *FT = FunctionType::get(*(yyvsp[-6].TypeWithAttrs).Ty, ParamTypeList, isVarArg,
4534 ParamAttrs);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004535 const PointerType *PFT = PointerType::get(FT);
Reid Spencer14310612006-12-31 05:40:51 +00004536 delete (yyvsp[-6].TypeWithAttrs).Ty;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004537
4538 ValID ID;
4539 if (!FunctionName.empty()) {
4540 ID = ValID::create((char*)FunctionName.c_str());
4541 } else {
4542 ID = ValID::create((int)CurModule.Values[PFT].size());
4543 }
4544
4545 Function *Fn = 0;
4546 // See if this function was forward referenced. If so, recycle the object.
4547 if (GlobalValue *FWRef = CurModule.GetForwardRefForGlobal(PFT, ID)) {
4548 // Move the function to the end of the list, from whereever it was
4549 // previously inserted.
4550 Fn = cast<Function>(FWRef);
4551 CurModule.CurrentModule->getFunctionList().remove(Fn);
4552 CurModule.CurrentModule->getFunctionList().push_back(Fn);
4553 } else if (!FunctionName.empty() && // Merge with an earlier prototype?
4554 (Fn = CurModule.CurrentModule->getFunction(FunctionName, FT))) {
4555 // If this is the case, either we need to be a forward decl, or it needs
4556 // to be.
4557 if (!CurFun.isDeclare && !Fn->isExternal())
Reid Spencer61c83e02006-08-18 08:43:06 +00004558 GEN_ERROR("Redefinition of function '" + FunctionName + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004559
4560 // Make sure to strip off any argument names so we can't get conflicts.
4561 if (Fn->isExternal())
4562 for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end();
4563 AI != AE; ++AI)
4564 AI->setName("");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004565 } else { // Not already defined?
4566 Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName,
4567 CurModule.CurrentModule);
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004568
Reid Spencer68a24bd2005-08-27 18:50:39 +00004569 InsertValue(Fn, CurModule.Values);
4570 }
4571
4572 CurFun.FunctionStart(Fn);
Anton Korobeynikov93c2b372006-09-17 13:06:18 +00004573
4574 if (CurFun.isDeclare) {
4575 // If we have declaration, always overwrite linkage. This will allow us to
4576 // correctly handle cases, when pointer to function is passed as argument to
4577 // another function.
4578 Fn->setLinkage(CurFun.Linkage);
4579 }
Reid Spencere4d87aa2006-12-23 06:05:41 +00004580 Fn->setCallingConv((yyvsp[-7].UIntVal));
4581 Fn->setAlignment((yyvsp[0].UIntVal));
4582 if ((yyvsp[-1].StrVal)) {
4583 Fn->setSection((yyvsp[-1].StrVal));
4584 free((yyvsp[-1].StrVal));
Chris Lattnere869eef2005-11-12 00:11:49 +00004585 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004586
4587 // Add all of the arguments we parsed to the function...
Reid Spencere4d87aa2006-12-23 06:05:41 +00004588 if ((yyvsp[-3].ArgList)) { // Is null if empty...
Reid Spencer68a24bd2005-08-27 18:50:39 +00004589 if (isVarArg) { // Nuke the last entry
Reid Spencer14310612006-12-31 05:40:51 +00004590 assert((yyvsp[-3].ArgList)->back().Ty->get() == Type::VoidTy && (yyvsp[-3].ArgList)->back().Name == 0&&
Reid Spencera132e042006-12-03 05:46:11 +00004591 "Not a varargs marker!");
Reid Spencer14310612006-12-31 05:40:51 +00004592 delete (yyvsp[-3].ArgList)->back().Ty;
Reid Spencere4d87aa2006-12-23 06:05:41 +00004593 (yyvsp[-3].ArgList)->pop_back(); // Delete the last entry
Reid Spencer68a24bd2005-08-27 18:50:39 +00004594 }
4595 Function::arg_iterator ArgIt = Fn->arg_begin();
Reid Spencer14310612006-12-31 05:40:51 +00004596 unsigned Idx = 1;
4597 for (ArgListType::iterator I = (yyvsp[-3].ArgList)->begin(); I != (yyvsp[-3].ArgList)->end(); ++I, ++ArgIt) {
4598 delete I->Ty; // Delete the typeholder...
4599 setValueName(ArgIt, I->Name); // Insert arg into symtab...
Reid Spencer5b7e7532006-09-28 19:28:24 +00004600 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004601 InsertValue(ArgIt);
Reid Spencer14310612006-12-31 05:40:51 +00004602 Idx++;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004603 }
Reid Spencera132e042006-12-03 05:46:11 +00004604
Reid Spencere4d87aa2006-12-23 06:05:41 +00004605 delete (yyvsp[-3].ArgList); // We're now done with the argument list
Reid Spencer68a24bd2005-08-27 18:50:39 +00004606 }
Reid Spencer61c83e02006-08-18 08:43:06 +00004607 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004608;}
4609 break;
4610
Reid Spencer14310612006-12-31 05:40:51 +00004611 case 214:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004612#line 2099 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004613 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004614 (yyval.FunctionVal) = CurFun.CurrentFunction;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004615
4616 // Make sure that we keep track of the linkage type even if there was a
4617 // previous "declare".
Reid Spencere4d87aa2006-12-23 06:05:41 +00004618 (yyval.FunctionVal)->setLinkage((yyvsp[-2].Linkage));
Reid Spencer3822ff52006-11-08 06:47:33 +00004619;}
4620 break;
4621
Reid Spencer14310612006-12-31 05:40:51 +00004622 case 217:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004623#line 2109 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00004624 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004625 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004626 CHECK_FOR_ERROR
4627;}
Reid Spencer3822ff52006-11-08 06:47:33 +00004628 break;
4629
Reid Spencer14310612006-12-31 05:40:51 +00004630 case 218:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004631#line 2114 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004632 {
Reid Spencer14310612006-12-31 05:40:51 +00004633 CurFun.CurrentFunction->setLinkage((yyvsp[-1].Linkage));
Reid Spencere4d87aa2006-12-23 06:05:41 +00004634 (yyval.FunctionVal) = CurFun.CurrentFunction;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004635 CurFun.FunctionDone();
Reid Spencer61c83e02006-08-18 08:43:06 +00004636 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004637 ;}
4638 break;
4639
Reid Spencer14310612006-12-31 05:40:51 +00004640 case 219:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004641#line 2125 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00004642 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004643 (yyval.BoolVal) = false;
4644 CHECK_FOR_ERROR
4645 ;}
4646 break;
4647
Reid Spencer14310612006-12-31 05:40:51 +00004648 case 220:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004649#line 2129 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004650 {
4651 (yyval.BoolVal) = true;
4652 CHECK_FOR_ERROR
4653 ;}
4654 break;
4655
Reid Spencer14310612006-12-31 05:40:51 +00004656 case 221:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004657#line 2134 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004658 { // A reference to a direct constant
4659 (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val));
4660 CHECK_FOR_ERROR
4661 ;}
4662 break;
4663
Reid Spencer14310612006-12-31 05:40:51 +00004664 case 222:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004665#line 2138 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004666 {
4667 (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val));
4668 CHECK_FOR_ERROR
4669 ;}
4670 break;
4671
Reid Spencer14310612006-12-31 05:40:51 +00004672 case 223:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004673#line 2142 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004674 { // Perhaps it's an FP constant?
4675 (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal));
4676 CHECK_FOR_ERROR
4677 ;}
4678 break;
4679
Reid Spencer14310612006-12-31 05:40:51 +00004680 case 224:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004681#line 2146 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004682 {
4683 (yyval.ValIDVal) = ValID::create(ConstantBool::getTrue());
4684 CHECK_FOR_ERROR
4685 ;}
4686 break;
4687
Reid Spencer14310612006-12-31 05:40:51 +00004688 case 225:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004689#line 2150 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004690 {
4691 (yyval.ValIDVal) = ValID::create(ConstantBool::getFalse());
4692 CHECK_FOR_ERROR
4693 ;}
4694 break;
4695
Reid Spencer14310612006-12-31 05:40:51 +00004696 case 226:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004697#line 2154 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004698 {
4699 (yyval.ValIDVal) = ValID::createNull();
Reid Spencer61c83e02006-08-18 08:43:06 +00004700 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004701 ;}
4702 break;
4703
Reid Spencer14310612006-12-31 05:40:51 +00004704 case 227:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004705#line 2158 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004706 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004707 (yyval.ValIDVal) = ValID::createUndef();
Reid Spencer61c83e02006-08-18 08:43:06 +00004708 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004709 ;}
4710 break;
4711
Reid Spencer14310612006-12-31 05:40:51 +00004712 case 228:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004713#line 2162 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004714 { // A vector zero constant.
4715 (yyval.ValIDVal) = ValID::createZeroInit();
Reid Spencer61c83e02006-08-18 08:43:06 +00004716 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004717 ;}
4718 break;
4719
Reid Spencer14310612006-12-31 05:40:51 +00004720 case 229:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004721#line 2166 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004722 { // Nonempty unsized packed vector
Reid Spencere4d87aa2006-12-23 06:05:41 +00004723 const Type *ETy = (*(yyvsp[-1].ConstVector))[0]->getType();
4724 int NumElements = (yyvsp[-1].ConstVector)->size();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004725
4726 PackedType* pt = PackedType::get(ETy, NumElements);
4727 PATypeHolder* PTy = new PATypeHolder(
Reid Spencera132e042006-12-03 05:46:11 +00004728 HandleUpRefs(
4729 PackedType::get(
4730 ETy,
4731 NumElements)
4732 )
4733 );
Reid Spencer68a24bd2005-08-27 18:50:39 +00004734
4735 // Verify all elements are correct type!
Reid Spencere4d87aa2006-12-23 06:05:41 +00004736 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
4737 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00004738 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00004739 ETy->getDescription() +"' as required!\nIt is of type '" +
Reid Spencere4d87aa2006-12-23 06:05:41 +00004740 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004741 }
4742
Reid Spencere4d87aa2006-12-23 06:05:41 +00004743 (yyval.ValIDVal) = ValID::create(ConstantPacked::get(pt, *(yyvsp[-1].ConstVector)));
4744 delete PTy; delete (yyvsp[-1].ConstVector);
4745 CHECK_FOR_ERROR
4746 ;}
4747 break;
4748
Reid Spencer14310612006-12-31 05:40:51 +00004749 case 230:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004750#line 2191 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004751 {
4752 (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal));
4753 CHECK_FOR_ERROR
4754 ;}
4755 break;
4756
Reid Spencer14310612006-12-31 05:40:51 +00004757 case 231:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004758#line 2195 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004759 {
4760 char *End = UnEscapeLexed((yyvsp[-2].StrVal), true);
4761 std::string AsmStr = std::string((yyvsp[-2].StrVal), End);
4762 End = UnEscapeLexed((yyvsp[0].StrVal), true);
4763 std::string Constraints = std::string((yyvsp[0].StrVal), End);
4764 (yyval.ValIDVal) = ValID::createInlineAsm(AsmStr, Constraints, (yyvsp[-3].BoolVal));
4765 free((yyvsp[-2].StrVal));
4766 free((yyvsp[0].StrVal));
4767 CHECK_FOR_ERROR
4768 ;}
4769 break;
4770
Reid Spencer14310612006-12-31 05:40:51 +00004771 case 232:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004772#line 2209 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004773 { // Is it an integer reference...?
4774 (yyval.ValIDVal) = ValID::create((yyvsp[0].SIntVal));
4775 CHECK_FOR_ERROR
4776 ;}
4777 break;
4778
Reid Spencer14310612006-12-31 05:40:51 +00004779 case 233:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004780#line 2213 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004781 { // Is it a named reference...?
4782 (yyval.ValIDVal) = ValID::create((yyvsp[0].StrVal));
4783 CHECK_FOR_ERROR
4784 ;}
4785 break;
4786
Reid Spencer14310612006-12-31 05:40:51 +00004787 case 236:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004788#line 2225 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004789 {
Reid Spencer14310612006-12-31 05:40:51 +00004790 if (!UpRefs.empty())
4791 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
4792 (yyval.ValueVal) = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
4793 delete (yyvsp[-1].TypeVal);
Reid Spencer21be8652006-10-22 07:03:43 +00004794 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004795 ;}
4796 break;
4797
Reid Spencer14310612006-12-31 05:40:51 +00004798 case 237:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004799#line 2234 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00004800 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004801 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004802 CHECK_FOR_ERROR
4803 ;}
4804 break;
4805
Reid Spencer14310612006-12-31 05:40:51 +00004806 case 238:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004807#line 2238 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004808 { // Do not allow functions with 0 basic blocks
4809 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004810 CHECK_FOR_ERROR
4811 ;}
4812 break;
4813
Reid Spencer14310612006-12-31 05:40:51 +00004814 case 239:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004815#line 2247 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004816 {
4817 setValueName((yyvsp[0].TermInstVal), (yyvsp[-1].StrVal));
4818 CHECK_FOR_ERROR
4819 InsertValue((yyvsp[0].TermInstVal));
4820
4821 (yyvsp[-2].BasicBlockVal)->getInstList().push_back((yyvsp[0].TermInstVal));
4822 InsertValue((yyvsp[-2].BasicBlockVal));
4823 (yyval.BasicBlockVal) = (yyvsp[-2].BasicBlockVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004824 CHECK_FOR_ERROR
4825 ;}
4826 break;
4827
Reid Spencer14310612006-12-31 05:40:51 +00004828 case 240:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004829#line 2258 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004830 {
4831 if (CastInst *CI1 = dyn_cast<CastInst>((yyvsp[0].InstVal)))
4832 if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0)))
4833 if (CI2->getParent() == 0)
4834 (yyvsp[-1].BasicBlockVal)->getInstList().push_back(CI2);
4835 (yyvsp[-1].BasicBlockVal)->getInstList().push_back((yyvsp[0].InstVal));
4836 (yyval.BasicBlockVal) = (yyvsp[-1].BasicBlockVal);
4837 CHECK_FOR_ERROR
4838 ;}
4839 break;
4840
Reid Spencer14310612006-12-31 05:40:51 +00004841 case 241:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004842#line 2267 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004843 {
4844 (yyval.BasicBlockVal) = getBBVal(ValID::create((int)CurFun.NextBBNum++), true);
4845 CHECK_FOR_ERROR
4846
4847 // Make sure to move the basic block to the correct location in the
4848 // function, instead of leaving it inserted wherever it was first
4849 // referenced.
4850 Function::BasicBlockListType &BBL =
4851 CurFun.CurrentFunction->getBasicBlockList();
4852 BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
4853 CHECK_FOR_ERROR
4854 ;}
4855 break;
4856
Reid Spencer14310612006-12-31 05:40:51 +00004857 case 242:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004858#line 2279 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004859 {
4860 (yyval.BasicBlockVal) = getBBVal(ValID::create((yyvsp[0].StrVal)), true);
4861 CHECK_FOR_ERROR
4862
4863 // Make sure to move the basic block to the correct location in the
4864 // function, instead of leaving it inserted wherever it was first
4865 // referenced.
4866 Function::BasicBlockListType &BBL =
4867 CurFun.CurrentFunction->getBasicBlockList();
4868 BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
Reid Spencer3822ff52006-11-08 06:47:33 +00004869 CHECK_FOR_ERROR
4870 ;}
4871 break;
4872
Reid Spencer14310612006-12-31 05:40:51 +00004873 case 243:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004874#line 2292 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004875 { // Return with a result...
4876 (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal));
Reid Spencer3822ff52006-11-08 06:47:33 +00004877 CHECK_FOR_ERROR
4878 ;}
4879 break;
4880
Reid Spencer14310612006-12-31 05:40:51 +00004881 case 244:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004882#line 2296 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004883 { // Return with no result...
4884 (yyval.TermInstVal) = new ReturnInst();
Reid Spencer3822ff52006-11-08 06:47:33 +00004885 CHECK_FOR_ERROR
4886 ;}
4887 break;
4888
Reid Spencer14310612006-12-31 05:40:51 +00004889 case 245:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004890#line 2300 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004891 { // Unconditional Branch...
4892 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
Reid Spencer3822ff52006-11-08 06:47:33 +00004893 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00004894 (yyval.TermInstVal) = new BranchInst(tmpBB);
Reid Spencer3822ff52006-11-08 06:47:33 +00004895 ;}
4896 break;
4897
Reid Spencer14310612006-12-31 05:40:51 +00004898 case 246:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004899#line 2305 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004900 {
4901 BasicBlock* tmpBBA = getBBVal((yyvsp[-3].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004902 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00004903 BasicBlock* tmpBBB = getBBVal((yyvsp[0].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004904 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00004905 Value* tmpVal = getVal(Type::BoolTy, (yyvsp[-6].ValIDVal));
4906 CHECK_FOR_ERROR
4907 (yyval.TermInstVal) = new BranchInst(tmpBBA, tmpBBB, tmpVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004908 ;}
4909 break;
4910
Reid Spencer14310612006-12-31 05:40:51 +00004911 case 247:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004912#line 2314 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004913 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004914 Value* tmpVal = getVal((yyvsp[-7].PrimType), (yyvsp[-6].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00004915 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00004916 BasicBlock* tmpBB = getBBVal((yyvsp[-3].ValIDVal));
4917 CHECK_FOR_ERROR
4918 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[-1].JumpTable)->size());
4919 (yyval.TermInstVal) = S;
Andrew Lenharth6353e052006-12-08 18:07:09 +00004920
Reid Spencere4d87aa2006-12-23 06:05:41 +00004921 std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = (yyvsp[-1].JumpTable)->begin(),
4922 E = (yyvsp[-1].JumpTable)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004923 for (; I != E; ++I) {
4924 if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
4925 S->addCase(CI, I->second);
4926 else
Reid Spencer61c83e02006-08-18 08:43:06 +00004927 GEN_ERROR("Switch case is constant, but not a simple integer!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004928 }
Reid Spencere4d87aa2006-12-23 06:05:41 +00004929 delete (yyvsp[-1].JumpTable);
Reid Spencer61c83e02006-08-18 08:43:06 +00004930 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004931 ;}
4932 break;
4933
Reid Spencer14310612006-12-31 05:40:51 +00004934 case 248:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004935#line 2333 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004936 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004937 Value* tmpVal = getVal((yyvsp[-6].PrimType), (yyvsp[-5].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00004938 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00004939 BasicBlock* tmpBB = getBBVal((yyvsp[-2].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00004940 CHECK_FOR_ERROR
4941 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
Reid Spencere4d87aa2006-12-23 06:05:41 +00004942 (yyval.TermInstVal) = S;
Reid Spencer61c83e02006-08-18 08:43:06 +00004943 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004944 ;}
4945 break;
4946
Reid Spencer14310612006-12-31 05:40:51 +00004947 case 249:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004948#line 2343 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004949 {
Reid Spencer3822ff52006-11-08 06:47:33 +00004950
Reid Spencer14310612006-12-31 05:40:51 +00004951 // Handle the short syntax
4952 const PointerType *PFTy = 0;
4953 const FunctionType *Ty = 0;
4954 if (!(PFTy = dyn_cast<PointerType>((yyvsp[-10].TypeWithAttrs).Ty->get())) ||
Reid Spencer68a24bd2005-08-27 18:50:39 +00004955 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
4956 // Pull out the types of all of the arguments...
4957 std::vector<const Type*> ParamTypes;
Reid Spencer14310612006-12-31 05:40:51 +00004958 FunctionType::ParamAttrsList ParamAttrs;
4959 ParamAttrs.push_back((yyvsp[-10].TypeWithAttrs).Attrs);
4960 for (ValueRefList::iterator I = (yyvsp[-7].ValueRefList)->begin(), E = (yyvsp[-7].ValueRefList)->end(); I != E; ++I) {
4961 const Type *Ty = I->Val->getType();
4962 if (Ty == Type::VoidTy)
4963 GEN_ERROR("Short call syntax cannot be used with varargs");
4964 ParamTypes.push_back(Ty);
4965 ParamAttrs.push_back(I->Attrs);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004966 }
4967
Reid Spencer14310612006-12-31 05:40:51 +00004968 Ty = FunctionType::get((yyvsp[-10].TypeWithAttrs).Ty->get(), ParamTypes, false, ParamAttrs);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004969 PFTy = PointerType::get(Ty);
4970 }
4971
Reid Spencere4d87aa2006-12-23 06:05:41 +00004972 Value *V = getVal(PFTy, (yyvsp[-9].ValIDVal)); // Get the function we're calling...
Andrew Lenharth6353e052006-12-08 18:07:09 +00004973 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00004974 BasicBlock *Normal = getBBVal((yyvsp[-3].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00004975 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00004976 BasicBlock *Except = getBBVal((yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004977 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004978
Reid Spencer14310612006-12-31 05:40:51 +00004979 // Check the arguments
4980 ValueList Args;
4981 if ((yyvsp[-7].ValueRefList)->empty()) { // Has no arguments?
4982 // Make sure no arguments is a good thing!
4983 if (Ty->getNumParams() != 0)
4984 GEN_ERROR("No arguments passed to a function that "
4985 "expects arguments!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004986 } else { // Has arguments?
4987 // Loop through FunctionType's arguments and ensure they are specified
4988 // correctly!
Reid Spencer68a24bd2005-08-27 18:50:39 +00004989 FunctionType::param_iterator I = Ty->param_begin();
4990 FunctionType::param_iterator E = Ty->param_end();
Reid Spencer14310612006-12-31 05:40:51 +00004991 ValueRefList::iterator ArgI = (yyvsp[-7].ValueRefList)->begin(), ArgE = (yyvsp[-7].ValueRefList)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004992
Reid Spencer14310612006-12-31 05:40:51 +00004993 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
4994 if (ArgI->Val->getType() != *I)
4995 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
Reid Spencera132e042006-12-03 05:46:11 +00004996 (*I)->getDescription() + "'!");
Reid Spencer14310612006-12-31 05:40:51 +00004997 Args.push_back(ArgI->Val);
4998 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004999
Reid Spencer14310612006-12-31 05:40:51 +00005000 if (Ty->isVarArg()) {
5001 if (I == E)
5002 for (; ArgI != ArgE; ++ArgI)
5003 Args.push_back(ArgI->Val); // push the remaining varargs
5004 } else if (I != E || ArgI != ArgE)
Reid Spencer61c83e02006-08-18 08:43:06 +00005005 GEN_ERROR("Invalid number of parameters detected!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005006 }
Reid Spencer14310612006-12-31 05:40:51 +00005007
5008 // Create the InvokeInst
5009 InvokeInst *II = new InvokeInst(V, Normal, Except, Args);
5010 II->setCallingConv((yyvsp[-11].UIntVal));
5011 (yyval.TermInstVal) = II;
5012 delete (yyvsp[-7].ValueRefList);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005013 CHECK_FOR_ERROR
5014 ;}
5015 break;
5016
Reid Spencer14310612006-12-31 05:40:51 +00005017 case 250:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005018#line 2409 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005019 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005020 (yyval.TermInstVal) = new UnwindInst();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005021 CHECK_FOR_ERROR
5022 ;}
5023 break;
5024
Reid Spencer14310612006-12-31 05:40:51 +00005025 case 251:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005026#line 2413 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005027 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005028 (yyval.TermInstVal) = new UnreachableInst();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005029 CHECK_FOR_ERROR
5030 ;}
5031 break;
5032
Reid Spencer14310612006-12-31 05:40:51 +00005033 case 252:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005034#line 2420 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005035 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005036 (yyval.JumpTable) = (yyvsp[-5].JumpTable);
5037 Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005038 CHECK_FOR_ERROR
5039 if (V == 0)
5040 GEN_ERROR("May only switch on a constant pool value!");
5041
Reid Spencere4d87aa2006-12-23 06:05:41 +00005042 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005043 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005044 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005045 ;}
5046 break;
5047
Reid Spencer14310612006-12-31 05:40:51 +00005048 case 253:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005049#line 2431 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005050 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005051 (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
5052 Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005053 CHECK_FOR_ERROR
5054
5055 if (V == 0)
5056 GEN_ERROR("May only switch on a constant pool value!");
5057
Reid Spencere4d87aa2006-12-23 06:05:41 +00005058 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005059 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005060 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005061 ;}
5062 break;
5063
Reid Spencer14310612006-12-31 05:40:51 +00005064 case 254:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005065#line 2444 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005066 {
5067 // Is this definition named?? if so, assign the name...
Reid Spencere4d87aa2006-12-23 06:05:41 +00005068 setValueName((yyvsp[0].InstVal), (yyvsp[-1].StrVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005069 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005070 InsertValue((yyvsp[0].InstVal));
5071 (yyval.InstVal) = (yyvsp[0].InstVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005072 CHECK_FOR_ERROR
5073;}
5074 break;
5075
Reid Spencer14310612006-12-31 05:40:51 +00005076 case 255:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005077#line 2453 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005078 { // Used for PHI nodes
Reid Spencer14310612006-12-31 05:40:51 +00005079 if (!UpRefs.empty())
5080 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-5].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005081 (yyval.PHIList) = new std::list<std::pair<Value*, BasicBlock*> >();
5082 Value* tmpVal = getVal(*(yyvsp[-5].TypeVal), (yyvsp[-3].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005083 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005084 BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005085 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005086 (yyval.PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
5087 delete (yyvsp[-5].TypeVal);
5088 ;}
5089 break;
5090
Reid Spencer14310612006-12-31 05:40:51 +00005091 case 256:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005092#line 2464 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005093 {
5094 (yyval.PHIList) = (yyvsp[-6].PHIList);
5095 Value* tmpVal = getVal((yyvsp[-6].PHIList)->front().first->getType(), (yyvsp[-3].ValIDVal));
5096 CHECK_FOR_ERROR
5097 BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
5098 CHECK_FOR_ERROR
5099 (yyvsp[-6].PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
5100 ;}
5101 break;
5102
Reid Spencer14310612006-12-31 05:40:51 +00005103 case 257:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005104#line 2474 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00005105 {
5106 if (!UpRefs.empty())
5107 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
5108 // Used for call and invoke instructions
5109 (yyval.ValueRefList) = new ValueRefList();
5110 ValueRefListEntry E; E.Attrs = (yyvsp[0].ParamAttrs); E.Val = getVal((yyvsp[-2].TypeVal)->get(), (yyvsp[-1].ValIDVal));
5111 (yyval.ValueRefList)->push_back(E);
Reid Spencere4d87aa2006-12-23 06:05:41 +00005112 ;}
5113 break;
5114
Reid Spencer14310612006-12-31 05:40:51 +00005115 case 258:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005116#line 2482 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005117 {
Reid Spencer14310612006-12-31 05:40:51 +00005118 if (!UpRefs.empty())
5119 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
5120 (yyval.ValueRefList) = (yyvsp[-4].ValueRefList);
5121 ValueRefListEntry E; E.Attrs = (yyvsp[0].ParamAttrs); E.Val = getVal((yyvsp[-2].TypeVal)->get(), (yyvsp[-1].ValIDVal));
5122 (yyval.ValueRefList)->push_back(E);
Reid Spencere4d87aa2006-12-23 06:05:41 +00005123 CHECK_FOR_ERROR
5124 ;}
5125 break;
5126
Reid Spencer14310612006-12-31 05:40:51 +00005127 case 259:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005128#line 2490 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00005129 { (yyval.ValueRefList) = new ValueRefList(); ;}
Reid Spencere4d87aa2006-12-23 06:05:41 +00005130 break;
5131
Reid Spencer14310612006-12-31 05:40:51 +00005132 case 260:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005133#line 2493 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00005134 { (yyval.ValueList) = new std::vector<Value*>(); ;}
5135 break;
5136
5137 case 261:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005138#line 2494 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00005139 {
5140 (yyval.ValueList) = (yyvsp[-2].ValueList);
5141 (yyval.ValueList)->push_back((yyvsp[0].ValueVal));
5142 CHECK_FOR_ERROR
5143 ;}
5144 break;
5145
5146 case 262:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005147#line 2501 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005148 {
5149 (yyval.BoolVal) = true;
5150 CHECK_FOR_ERROR
5151 ;}
5152 break;
5153
Reid Spencer14310612006-12-31 05:40:51 +00005154 case 263:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005155#line 2505 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005156 {
5157 (yyval.BoolVal) = false;
5158 CHECK_FOR_ERROR
Andrew Lenharth6353e052006-12-08 18:07:09 +00005159 ;}
5160 break;
5161
Reid Spencer14310612006-12-31 05:40:51 +00005162 case 264:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005163#line 2510 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005164 {
Reid Spencer14310612006-12-31 05:40:51 +00005165 if (!UpRefs.empty())
5166 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005167 if (!(*(yyvsp[-3].TypeVal))->isInteger() && !(*(yyvsp[-3].TypeVal))->isFloatingPoint() &&
5168 !isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
5169 GEN_ERROR(
5170 "Arithmetic operator requires integer, FP, or packed operands!");
5171 if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()) &&
5172 ((yyvsp[-4].BinaryOpVal) == Instruction::URem ||
5173 (yyvsp[-4].BinaryOpVal) == Instruction::SRem ||
5174 (yyvsp[-4].BinaryOpVal) == Instruction::FRem))
5175 GEN_ERROR("U/S/FRem not supported on packed types!");
5176 Value* val1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005177 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005178 Value* val2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005179 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005180 (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), val1, val2);
5181 if ((yyval.InstVal) == 0)
5182 GEN_ERROR("binary operator returned null!");
5183 delete (yyvsp[-3].TypeVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005184 ;}
5185 break;
5186
Reid Spencer14310612006-12-31 05:40:51 +00005187 case 265:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005188#line 2531 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005189 {
Reid Spencer14310612006-12-31 05:40:51 +00005190 if (!UpRefs.empty())
5191 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005192 if (!(*(yyvsp[-3].TypeVal))->isIntegral()) {
5193 if (!isa<PackedType>((yyvsp[-3].TypeVal)->get()) ||
5194 !cast<PackedType>((yyvsp[-3].TypeVal)->get())->getElementType()->isIntegral())
5195 GEN_ERROR("Logical operator requires integral operands!");
5196 }
5197 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
5198 CHECK_FOR_ERROR
5199 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
5200 CHECK_FOR_ERROR
5201 (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), tmpVal1, tmpVal2);
5202 if ((yyval.InstVal) == 0)
5203 GEN_ERROR("binary operator returned null!");
5204 delete (yyvsp[-3].TypeVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005205 ;}
5206 break;
5207
Reid Spencer14310612006-12-31 05:40:51 +00005208 case 266:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005209#line 2548 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005210 {
Reid Spencer14310612006-12-31 05:40:51 +00005211 if (!UpRefs.empty())
5212 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005213 if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
Andrew Lenharth6353e052006-12-08 18:07:09 +00005214 GEN_ERROR("Packed types not supported by icmp instruction");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005215 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005216 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005217 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005218 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005219 (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].IPredicate), tmpVal1, tmpVal2);
5220 if ((yyval.InstVal) == 0)
Andrew Lenharth6353e052006-12-08 18:07:09 +00005221 GEN_ERROR("icmp operator returned null!");
5222 ;}
5223 break;
5224
Reid Spencer14310612006-12-31 05:40:51 +00005225 case 267:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005226#line 2561 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005227 {
Reid Spencer14310612006-12-31 05:40:51 +00005228 if (!UpRefs.empty())
5229 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005230 if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
Andrew Lenharth6353e052006-12-08 18:07:09 +00005231 GEN_ERROR("Packed types not supported by fcmp instruction");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005232 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005233 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005234 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005235 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005236 (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].FPredicate), tmpVal1, tmpVal2);
5237 if ((yyval.InstVal) == 0)
Andrew Lenharth6353e052006-12-08 18:07:09 +00005238 GEN_ERROR("fcmp operator returned null!");
5239 ;}
5240 break;
5241
Reid Spencer14310612006-12-31 05:40:51 +00005242 case 268:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005243#line 2574 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005244 {
5245 cerr << "WARNING: Use of eliminated 'not' instruction:"
5246 << " Replacing with 'xor'.\n";
5247
Reid Spencere4d87aa2006-12-23 06:05:41 +00005248 Value *Ones = ConstantIntegral::getAllOnesValue((yyvsp[0].ValueVal)->getType());
Andrew Lenharth6353e052006-12-08 18:07:09 +00005249 if (Ones == 0)
5250 GEN_ERROR("Expected integral type for not instruction!");
5251
Reid Spencere4d87aa2006-12-23 06:05:41 +00005252 (yyval.InstVal) = BinaryOperator::create(Instruction::Xor, (yyvsp[0].ValueVal), Ones);
5253 if ((yyval.InstVal) == 0)
Andrew Lenharth6353e052006-12-08 18:07:09 +00005254 GEN_ERROR("Could not create a xor instruction!");
5255 CHECK_FOR_ERROR
5256 ;}
5257 break;
5258
Reid Spencer14310612006-12-31 05:40:51 +00005259 case 269:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005260#line 2587 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005261 {
Reid Spencer14310612006-12-31 05:40:51 +00005262 if ((yyvsp[0].ValueVal)->getType() != Type::Int8Ty)
5263 GEN_ERROR("Shift amount must be i8 type!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005264 if (!(yyvsp[-2].ValueVal)->getType()->isInteger())
Andrew Lenharth6353e052006-12-08 18:07:09 +00005265 GEN_ERROR("Shift constant expression requires integer operand!");
5266 CHECK_FOR_ERROR;
Reid Spencere4d87aa2006-12-23 06:05:41 +00005267 (yyval.InstVal) = new ShiftInst((yyvsp[-3].OtherOpVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005268 CHECK_FOR_ERROR
5269 ;}
5270 break;
5271
Reid Spencer14310612006-12-31 05:40:51 +00005272 case 270:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005273#line 2596 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005274 {
Reid Spencer14310612006-12-31 05:40:51 +00005275 if (!UpRefs.empty())
5276 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005277 Value* Val = (yyvsp[-2].ValueVal);
5278 const Type* Ty = (yyvsp[0].TypeVal)->get();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005279 if (!Val->getType()->isFirstClassType())
5280 GEN_ERROR("cast from a non-primitive type: '" +
5281 Val->getType()->getDescription() + "'!");
5282 if (!Ty->isFirstClassType())
5283 GEN_ERROR("cast to a non-primitive type: '" + Ty->getDescription() +"'!");
Reid Spencer14310612006-12-31 05:40:51 +00005284 (yyval.InstVal) = CastInst::create((yyvsp[-3].CastOpVal), Val, (yyvsp[0].TypeVal)->get());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005285 delete (yyvsp[0].TypeVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005286 ;}
5287 break;
5288
Reid Spencer14310612006-12-31 05:40:51 +00005289 case 271:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005290#line 2609 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005291 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005292 if ((yyvsp[-4].ValueVal)->getType() != Type::BoolTy)
Andrew Lenharth6353e052006-12-08 18:07:09 +00005293 GEN_ERROR("select condition must be boolean!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005294 if ((yyvsp[-2].ValueVal)->getType() != (yyvsp[0].ValueVal)->getType())
Andrew Lenharth6353e052006-12-08 18:07:09 +00005295 GEN_ERROR("select value types should match!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005296 (yyval.InstVal) = new SelectInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005297 CHECK_FOR_ERROR
5298 ;}
5299 break;
5300
Reid Spencer14310612006-12-31 05:40:51 +00005301 case 272:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005302#line 2617 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005303 {
Reid Spencer14310612006-12-31 05:40:51 +00005304 if (!UpRefs.empty())
5305 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005306 (yyval.InstVal) = new VAArgInst((yyvsp[-2].ValueVal), *(yyvsp[0].TypeVal));
5307 delete (yyvsp[0].TypeVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005308 CHECK_FOR_ERROR
5309 ;}
5310 break;
5311
Reid Spencer14310612006-12-31 05:40:51 +00005312 case 273:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005313#line 2624 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005314 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005315 if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Andrew Lenharth6353e052006-12-08 18:07:09 +00005316 GEN_ERROR("Invalid extractelement operands!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005317 (yyval.InstVal) = new ExtractElementInst((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005318 CHECK_FOR_ERROR
5319 ;}
5320 break;
5321
Reid Spencer14310612006-12-31 05:40:51 +00005322 case 274:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005323#line 2630 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005324 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005325 if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Andrew Lenharth6353e052006-12-08 18:07:09 +00005326 GEN_ERROR("Invalid insertelement operands!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005327 (yyval.InstVal) = new InsertElementInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005328 CHECK_FOR_ERROR
5329 ;}
5330 break;
5331
Reid Spencer14310612006-12-31 05:40:51 +00005332 case 275:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005333#line 2636 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005334 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005335 if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Andrew Lenharth6353e052006-12-08 18:07:09 +00005336 GEN_ERROR("Invalid shufflevector operands!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005337 (yyval.InstVal) = new ShuffleVectorInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005338 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005339 ;}
5340 break;
5341
Reid Spencer14310612006-12-31 05:40:51 +00005342 case 276:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005343#line 2642 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005344 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005345 const Type *Ty = (yyvsp[0].PHIList)->front().first->getType();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005346 if (!Ty->isFirstClassType())
5347 GEN_ERROR("PHI node operands must be of first class type!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005348 (yyval.InstVal) = new PHINode(Ty);
5349 ((PHINode*)(yyval.InstVal))->reserveOperandSpace((yyvsp[0].PHIList)->size());
5350 while ((yyvsp[0].PHIList)->begin() != (yyvsp[0].PHIList)->end()) {
5351 if ((yyvsp[0].PHIList)->front().first->getType() != Ty)
Andrew Lenharth6353e052006-12-08 18:07:09 +00005352 GEN_ERROR("All elements of a PHI node must be of the same type!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005353 cast<PHINode>((yyval.InstVal))->addIncoming((yyvsp[0].PHIList)->front().first, (yyvsp[0].PHIList)->front().second);
5354 (yyvsp[0].PHIList)->pop_front();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005355 }
Reid Spencere4d87aa2006-12-23 06:05:41 +00005356 delete (yyvsp[0].PHIList); // Free the list...
Reid Spencer61c83e02006-08-18 08:43:06 +00005357 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005358 ;}
5359 break;
5360
Reid Spencer14310612006-12-31 05:40:51 +00005361 case 277:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005362#line 2657 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005363 {
Reid Spencer14310612006-12-31 05:40:51 +00005364
5365 // Handle the short syntax
Andrew Lenharth6353e052006-12-08 18:07:09 +00005366 const PointerType *PFTy = 0;
5367 const FunctionType *Ty = 0;
Reid Spencer14310612006-12-31 05:40:51 +00005368 if (!(PFTy = dyn_cast<PointerType>((yyvsp[-4].TypeWithAttrs).Ty->get())) ||
Andrew Lenharth6353e052006-12-08 18:07:09 +00005369 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
5370 // Pull out the types of all of the arguments...
5371 std::vector<const Type*> ParamTypes;
Reid Spencer14310612006-12-31 05:40:51 +00005372 FunctionType::ParamAttrsList ParamAttrs;
5373 ParamAttrs.push_back((yyvsp[-4].TypeWithAttrs).Attrs);
5374 for (ValueRefList::iterator I = (yyvsp[-1].ValueRefList)->begin(), E = (yyvsp[-1].ValueRefList)->end(); I != E; ++I) {
5375 const Type *Ty = I->Val->getType();
5376 if (Ty == Type::VoidTy)
5377 GEN_ERROR("Short call syntax cannot be used with varargs");
5378 ParamTypes.push_back(Ty);
5379 ParamAttrs.push_back(I->Attrs);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005380 }
5381
Reid Spencer14310612006-12-31 05:40:51 +00005382 Ty = FunctionType::get((yyvsp[-4].TypeWithAttrs).Ty->get(), ParamTypes, false, ParamAttrs);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005383 PFTy = PointerType::get(Ty);
5384 }
5385
Reid Spencere4d87aa2006-12-23 06:05:41 +00005386 Value *V = getVal(PFTy, (yyvsp[-3].ValIDVal)); // Get the function we're calling...
Andrew Lenharth6353e052006-12-08 18:07:09 +00005387 CHECK_FOR_ERROR
5388
Reid Spencer14310612006-12-31 05:40:51 +00005389 // Check the arguments
5390 ValueList Args;
5391 if ((yyvsp[-1].ValueRefList)->empty()) { // Has no arguments?
Andrew Lenharth6353e052006-12-08 18:07:09 +00005392 // Make sure no arguments is a good thing!
5393 if (Ty->getNumParams() != 0)
5394 GEN_ERROR("No arguments passed to a function that "
5395 "expects arguments!");
Andrew Lenharth6353e052006-12-08 18:07:09 +00005396 } else { // Has arguments?
5397 // Loop through FunctionType's arguments and ensure they are specified
5398 // correctly!
5399 //
5400 FunctionType::param_iterator I = Ty->param_begin();
5401 FunctionType::param_iterator E = Ty->param_end();
Reid Spencer14310612006-12-31 05:40:51 +00005402 ValueRefList::iterator ArgI = (yyvsp[-1].ValueRefList)->begin(), ArgE = (yyvsp[-1].ValueRefList)->end();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005403
Reid Spencer14310612006-12-31 05:40:51 +00005404 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
5405 if (ArgI->Val->getType() != *I)
5406 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
Andrew Lenharth6353e052006-12-08 18:07:09 +00005407 (*I)->getDescription() + "'!");
Reid Spencer14310612006-12-31 05:40:51 +00005408 Args.push_back(ArgI->Val);
5409 }
5410 if (Ty->isVarArg()) {
5411 if (I == E)
5412 for (; ArgI != ArgE; ++ArgI)
5413 Args.push_back(ArgI->Val); // push the remaining varargs
5414 } else if (I != E || ArgI != ArgE)
Andrew Lenharth6353e052006-12-08 18:07:09 +00005415 GEN_ERROR("Invalid number of parameters detected!");
Andrew Lenharth6353e052006-12-08 18:07:09 +00005416 }
Reid Spencer14310612006-12-31 05:40:51 +00005417 // Create the call node
5418 CallInst *CI = new CallInst(V, Args);
5419 CI->setTailCall((yyvsp[-6].BoolVal));
5420 CI->setCallingConv((yyvsp[-5].UIntVal));
5421 (yyval.InstVal) = CI;
5422 delete (yyvsp[-1].ValueRefList);
Reid Spencere4d87aa2006-12-23 06:05:41 +00005423 CHECK_FOR_ERROR
5424 ;}
5425 break;
5426
Reid Spencer14310612006-12-31 05:40:51 +00005427 case 278:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005428#line 2719 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005429 {
5430 (yyval.InstVal) = (yyvsp[0].InstVal);
5431 CHECK_FOR_ERROR
5432 ;}
5433 break;
5434
Reid Spencer14310612006-12-31 05:40:51 +00005435 case 279:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005436#line 2724 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005437 {
5438 (yyval.BoolVal) = true;
5439 CHECK_FOR_ERROR
5440 ;}
5441 break;
5442
Reid Spencer14310612006-12-31 05:40:51 +00005443 case 280:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005444#line 2728 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005445 {
5446 (yyval.BoolVal) = false;
5447 CHECK_FOR_ERROR
5448 ;}
5449 break;
5450
Reid Spencer14310612006-12-31 05:40:51 +00005451 case 281:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005452#line 2735 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005453 {
Reid Spencer14310612006-12-31 05:40:51 +00005454 if (!UpRefs.empty())
5455 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005456 (yyval.InstVal) = new MallocInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
5457 delete (yyvsp[-1].TypeVal);
5458 CHECK_FOR_ERROR
5459 ;}
5460 break;
5461
Reid Spencer14310612006-12-31 05:40:51 +00005462 case 282:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005463#line 2742 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005464 {
Reid Spencer14310612006-12-31 05:40:51 +00005465 if (!UpRefs.empty())
5466 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005467 Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
5468 CHECK_FOR_ERROR
5469 (yyval.InstVal) = new MallocInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
5470 delete (yyvsp[-4].TypeVal);
5471 ;}
5472 break;
5473
Reid Spencer14310612006-12-31 05:40:51 +00005474 case 283:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005475#line 2750 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005476 {
Reid Spencer14310612006-12-31 05:40:51 +00005477 if (!UpRefs.empty())
5478 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005479 (yyval.InstVal) = new AllocaInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
5480 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005481 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005482 ;}
5483 break;
5484
Reid Spencer14310612006-12-31 05:40:51 +00005485 case 284:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005486#line 2757 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005487 {
Reid Spencer14310612006-12-31 05:40:51 +00005488 if (!UpRefs.empty())
5489 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005490 Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005491 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005492 (yyval.InstVal) = new AllocaInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
5493 delete (yyvsp[-4].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005494 ;}
5495 break;
5496
Reid Spencer14310612006-12-31 05:40:51 +00005497 case 285:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005498#line 2765 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005499 {
5500 if (!isa<PointerType>((yyvsp[0].ValueVal)->getType()))
5501 GEN_ERROR("Trying to free nonpointer type " +
5502 (yyvsp[0].ValueVal)->getType()->getDescription() + "!");
5503 (yyval.InstVal) = new FreeInst((yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005504 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005505 ;}
5506 break;
5507
Reid Spencer14310612006-12-31 05:40:51 +00005508 case 286:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005509#line 2773 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005510 {
Reid Spencer14310612006-12-31 05:40:51 +00005511 if (!UpRefs.empty())
5512 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005513 if (!isa<PointerType>((yyvsp[-1].TypeVal)->get()))
5514 GEN_ERROR("Can't load from nonpointer type: " +
5515 (*(yyvsp[-1].TypeVal))->getDescription());
5516 if (!cast<PointerType>((yyvsp[-1].TypeVal)->get())->getElementType()->isFirstClassType())
5517 GEN_ERROR("Can't load from pointer of non-first-class type: " +
5518 (*(yyvsp[-1].TypeVal))->getDescription());
5519 Value* tmpVal = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005520 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005521 (yyval.InstVal) = new LoadInst(tmpVal, "", (yyvsp[-3].BoolVal));
5522 delete (yyvsp[-1].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005523 ;}
5524 break;
5525
Reid Spencer14310612006-12-31 05:40:51 +00005526 case 287:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005527#line 2787 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005528 {
Reid Spencer14310612006-12-31 05:40:51 +00005529 if (!UpRefs.empty())
5530 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005531 const PointerType *PT = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
5532 if (!PT)
5533 GEN_ERROR("Can't store to a nonpointer type: " +
5534 (*(yyvsp[-1].TypeVal))->getDescription());
5535 const Type *ElTy = PT->getElementType();
5536 if (ElTy != (yyvsp[-3].ValueVal)->getType())
5537 GEN_ERROR("Can't store '" + (yyvsp[-3].ValueVal)->getType()->getDescription() +
5538 "' into space of type '" + ElTy->getDescription() + "'!");
5539
5540 Value* tmpVal = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005541 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005542 (yyval.InstVal) = new StoreInst((yyvsp[-3].ValueVal), tmpVal, (yyvsp[-5].BoolVal));
5543 delete (yyvsp[-1].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005544 ;}
5545 break;
5546
Reid Spencer14310612006-12-31 05:40:51 +00005547 case 288:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005548#line 2804 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005549 {
Reid Spencer14310612006-12-31 05:40:51 +00005550 if (!UpRefs.empty())
5551 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005552 if (!isa<PointerType>((yyvsp[-2].TypeVal)->get()))
Reid Spencer61c83e02006-08-18 08:43:06 +00005553 GEN_ERROR("getelementptr insn requires pointer operand!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005554
Reid Spencere4d87aa2006-12-23 06:05:41 +00005555 if (!GetElementPtrInst::getIndexedType(*(yyvsp[-2].TypeVal), *(yyvsp[0].ValueList), true))
Reid Spencer61c83e02006-08-18 08:43:06 +00005556 GEN_ERROR("Invalid getelementptr indices for type '" +
Reid Spencere4d87aa2006-12-23 06:05:41 +00005557 (*(yyvsp[-2].TypeVal))->getDescription()+ "'!");
5558 Value* tmpVal = getVal(*(yyvsp[-2].TypeVal), (yyvsp[-1].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005559 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005560 (yyval.InstVal) = new GetElementPtrInst(tmpVal, *(yyvsp[0].ValueList));
5561 delete (yyvsp[-2].TypeVal);
5562 delete (yyvsp[0].ValueList);
Reid Spencer3822ff52006-11-08 06:47:33 +00005563 ;}
5564 break;
5565
5566
Reid Spencere4d87aa2006-12-23 06:05:41 +00005567 default: break;
Reid Spencer3822ff52006-11-08 06:47:33 +00005568 }
5569
Reid Spencere4d87aa2006-12-23 06:05:41 +00005570/* Line 1126 of yacc.c. */
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005571#line 5572 "llvmAsmParser.tab.c"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005572
5573 yyvsp -= yylen;
5574 yyssp -= yylen;
5575
5576
Reid Spencer3822ff52006-11-08 06:47:33 +00005577 YY_STACK_PRINT (yyss, yyssp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005578
5579 *++yyvsp = yyval;
5580
5581
Reid Spencer3822ff52006-11-08 06:47:33 +00005582 /* Now `shift' the result of the reduction. Determine what state
5583 that goes to, based on the state we popped back to and the rule
5584 number reduced by. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00005585
5586 yyn = yyr1[yyn];
5587
Reid Spencer3822ff52006-11-08 06:47:33 +00005588 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
5589 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005590 yystate = yytable[yystate];
5591 else
Reid Spencer3822ff52006-11-08 06:47:33 +00005592 yystate = yydefgoto[yyn - YYNTOKENS];
Reid Spencer68a24bd2005-08-27 18:50:39 +00005593
5594 goto yynewstate;
5595
5596
Reid Spencer3822ff52006-11-08 06:47:33 +00005597/*------------------------------------.
5598| yyerrlab -- here on detecting error |
5599`------------------------------------*/
5600yyerrlab:
5601 /* If not already recovering from an error, report this error. */
5602 if (!yyerrstatus)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005603 {
5604 ++yynerrs;
Andrew Lenharth6353e052006-12-08 18:07:09 +00005605#if YYERROR_VERBOSE
5606 yyn = yypact[yystate];
Bill Wendlinge8156192006-12-07 01:30:32 +00005607
Andrew Lenharth6353e052006-12-08 18:07:09 +00005608 if (YYPACT_NINF < yyn && yyn < YYLAST)
5609 {
Andrew Lenharth6353e052006-12-08 18:07:09 +00005610 int yytype = YYTRANSLATE (yychar);
Reid Spencere4d87aa2006-12-23 06:05:41 +00005611 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
5612 YYSIZE_T yysize = yysize0;
5613 YYSIZE_T yysize1;
5614 int yysize_overflow = 0;
5615 char *yymsg = 0;
5616# define YYERROR_VERBOSE_ARGS_MAXIMUM 5
5617 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
Andrew Lenharth6353e052006-12-08 18:07:09 +00005618 int yyx;
5619
Reid Spencere4d87aa2006-12-23 06:05:41 +00005620#if 0
5621 /* This is so xgettext sees the translatable formats that are
5622 constructed on the fly. */
5623 YY_("syntax error, unexpected %s");
5624 YY_("syntax error, unexpected %s, expecting %s");
5625 YY_("syntax error, unexpected %s, expecting %s or %s");
5626 YY_("syntax error, unexpected %s, expecting %s or %s or %s");
5627 YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
5628#endif
5629 char *yyfmt;
5630 char const *yyf;
5631 static char const yyunexpected[] = "syntax error, unexpected %s";
5632 static char const yyexpecting[] = ", expecting %s";
5633 static char const yyor[] = " or %s";
5634 char yyformat[sizeof yyunexpected
5635 + sizeof yyexpecting - 1
5636 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
5637 * (sizeof yyor - 1))];
5638 char const *yyprefix = yyexpecting;
5639
Andrew Lenharth6353e052006-12-08 18:07:09 +00005640 /* Start YYX at -YYN if negative to avoid negative indexes in
5641 YYCHECK. */
5642 int yyxbegin = yyn < 0 ? -yyn : 0;
5643
5644 /* Stay within bounds of both yycheck and yytname. */
5645 int yychecklim = YYLAST - yyn;
5646 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
Reid Spencere4d87aa2006-12-23 06:05:41 +00005647 int yycount = 1;
Andrew Lenharth6353e052006-12-08 18:07:09 +00005648
Reid Spencere4d87aa2006-12-23 06:05:41 +00005649 yyarg[0] = yytname[yytype];
5650 yyfmt = yystpcpy (yyformat, yyunexpected);
5651
Andrew Lenharth6353e052006-12-08 18:07:09 +00005652 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
5653 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
5654 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005655 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
Andrew Lenharth6353e052006-12-08 18:07:09 +00005656 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005657 yycount = 1;
5658 yysize = yysize0;
5659 yyformat[sizeof yyunexpected - 1] = '\0';
Andrew Lenharth6353e052006-12-08 18:07:09 +00005660 break;
5661 }
Reid Spencere4d87aa2006-12-23 06:05:41 +00005662 yyarg[yycount++] = yytname[yyx];
5663 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
5664 yysize_overflow |= yysize1 < yysize;
5665 yysize = yysize1;
5666 yyfmt = yystpcpy (yyfmt, yyprefix);
5667 yyprefix = yyor;
Andrew Lenharth6353e052006-12-08 18:07:09 +00005668 }
Andrew Lenharth6353e052006-12-08 18:07:09 +00005669
Reid Spencere4d87aa2006-12-23 06:05:41 +00005670 yyf = YY_(yyformat);
5671 yysize1 = yysize + yystrlen (yyf);
5672 yysize_overflow |= yysize1 < yysize;
5673 yysize = yysize1;
5674
5675 if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM)
5676 yymsg = (char *) YYSTACK_ALLOC (yysize);
5677 if (yymsg)
5678 {
5679 /* Avoid sprintf, as that infringes on the user's name space.
5680 Don't have undefined behavior even if the translation
5681 produced a string with the wrong number of "%s"s. */
5682 char *yyp = yymsg;
5683 int yyi = 0;
5684 while ((*yyp = *yyf))
Andrew Lenharth6353e052006-12-08 18:07:09 +00005685 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005686 if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
5687 {
5688 yyp += yytnamerr (yyp, yyarg[yyi++]);
5689 yyf += 2;
5690 }
5691 else
5692 {
5693 yyp++;
5694 yyf++;
5695 }
Andrew Lenharth6353e052006-12-08 18:07:09 +00005696 }
5697 yyerror (yymsg);
5698 YYSTACK_FREE (yymsg);
5699 }
5700 else
Reid Spencere4d87aa2006-12-23 06:05:41 +00005701 {
5702 yyerror (YY_("syntax error"));
5703 goto yyexhaustedlab;
5704 }
Andrew Lenharth6353e052006-12-08 18:07:09 +00005705 }
5706 else
5707#endif /* YYERROR_VERBOSE */
Reid Spencere4d87aa2006-12-23 06:05:41 +00005708 yyerror (YY_("syntax error"));
Reid Spencer68a24bd2005-08-27 18:50:39 +00005709 }
5710
Reid Spencer3822ff52006-11-08 06:47:33 +00005711
Reid Spencer68a24bd2005-08-27 18:50:39 +00005712
5713 if (yyerrstatus == 3)
5714 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005715 /* If just tried and failed to reuse look-ahead token after an
Reid Spencer3822ff52006-11-08 06:47:33 +00005716 error, discard it. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00005717
Reid Spencer3822ff52006-11-08 06:47:33 +00005718 if (yychar <= YYEOF)
Andrew Lenharth6353e052006-12-08 18:07:09 +00005719 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005720 /* Return failure if at end of input. */
Reid Spencer3822ff52006-11-08 06:47:33 +00005721 if (yychar == YYEOF)
Reid Spencere4d87aa2006-12-23 06:05:41 +00005722 YYABORT;
Andrew Lenharth6353e052006-12-08 18:07:09 +00005723 }
Reid Spencer3822ff52006-11-08 06:47:33 +00005724 else
5725 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005726 yydestruct ("Error: discarding", yytoken, &yylval);
Reid Spencer3822ff52006-11-08 06:47:33 +00005727 yychar = YYEMPTY;
5728 }
5729 }
5730
Reid Spencere4d87aa2006-12-23 06:05:41 +00005731 /* Else will try to reuse look-ahead token after shifting the error
Reid Spencer3822ff52006-11-08 06:47:33 +00005732 token. */
5733 goto yyerrlab1;
5734
5735
5736/*---------------------------------------------------.
5737| yyerrorlab -- error raised explicitly by YYERROR. |
5738`---------------------------------------------------*/
5739yyerrorlab:
5740
Reid Spencere4d87aa2006-12-23 06:05:41 +00005741 /* Pacify compilers like GCC when the user code never invokes
5742 YYERROR and the label yyerrorlab therefore never appears in user
5743 code. */
Andrew Lenharth6353e052006-12-08 18:07:09 +00005744 if (0)
Reid Spencer3822ff52006-11-08 06:47:33 +00005745 goto yyerrorlab;
5746
Reid Spencere4d87aa2006-12-23 06:05:41 +00005747yyvsp -= yylen;
Andrew Lenharth6353e052006-12-08 18:07:09 +00005748 yyssp -= yylen;
Reid Spencer3822ff52006-11-08 06:47:33 +00005749 yystate = *yyssp;
5750 goto yyerrlab1;
5751
5752
5753/*-------------------------------------------------------------.
5754| yyerrlab1 -- common code for both syntax error and YYERROR. |
5755`-------------------------------------------------------------*/
5756yyerrlab1:
5757 yyerrstatus = 3; /* Each real token shifted decrements this. */
5758
5759 for (;;)
5760 {
5761 yyn = yypact[yystate];
5762 if (yyn != YYPACT_NINF)
5763 {
5764 yyn += YYTERROR;
5765 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
5766 {
5767 yyn = yytable[yyn];
5768 if (0 < yyn)
5769 break;
5770 }
5771 }
5772
5773 /* Pop the current state because it cannot handle the error token. */
5774 if (yyssp == yyss)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005775 YYABORT;
5776
Reid Spencere4d87aa2006-12-23 06:05:41 +00005777
5778 yydestruct ("Error: popping", yystos[yystate], yyvsp);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005779 YYPOPSTACK;
Reid Spencer3822ff52006-11-08 06:47:33 +00005780 yystate = *yyssp;
5781 YY_STACK_PRINT (yyss, yyssp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005782 }
5783
5784 if (yyn == YYFINAL)
5785 YYACCEPT;
5786
Reid Spencer68a24bd2005-08-27 18:50:39 +00005787 *++yyvsp = yylval;
Reid Spencer3822ff52006-11-08 06:47:33 +00005788
5789
Reid Spencere4d87aa2006-12-23 06:05:41 +00005790 /* Shift the error token. */
5791 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
5792
Reid Spencer68a24bd2005-08-27 18:50:39 +00005793 yystate = yyn;
5794 goto yynewstate;
5795
Chris Lattnerf49c1762006-11-08 05:58:47 +00005796
Reid Spencer3822ff52006-11-08 06:47:33 +00005797/*-------------------------------------.
5798| yyacceptlab -- YYACCEPT comes here. |
5799`-------------------------------------*/
5800yyacceptlab:
5801 yyresult = 0;
5802 goto yyreturn;
5803
5804/*-----------------------------------.
5805| yyabortlab -- YYABORT comes here. |
5806`-----------------------------------*/
5807yyabortlab:
5808 yyresult = 1;
5809 goto yyreturn;
5810
5811#ifndef yyoverflow
Reid Spencere4d87aa2006-12-23 06:05:41 +00005812/*-------------------------------------------------.
5813| yyexhaustedlab -- memory exhaustion comes here. |
5814`-------------------------------------------------*/
5815yyexhaustedlab:
5816 yyerror (YY_("memory exhausted"));
Reid Spencer3822ff52006-11-08 06:47:33 +00005817 yyresult = 2;
5818 /* Fall through. */
Chris Lattnerf49c1762006-11-08 05:58:47 +00005819#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00005820
5821yyreturn:
Reid Spencere4d87aa2006-12-23 06:05:41 +00005822 if (yychar != YYEOF && yychar != YYEMPTY)
5823 yydestruct ("Cleanup: discarding lookahead",
5824 yytoken, &yylval);
5825 while (yyssp != yyss)
5826 {
5827 yydestruct ("Cleanup: popping",
5828 yystos[*yyssp], yyvsp);
5829 YYPOPSTACK;
5830 }
Reid Spencer3822ff52006-11-08 06:47:33 +00005831#ifndef yyoverflow
5832 if (yyss != yyssa)
5833 YYSTACK_FREE (yyss);
5834#endif
Andrew Lenharth6353e052006-12-08 18:07:09 +00005835 return yyresult;
Reid Spencer68a24bd2005-08-27 18:50:39 +00005836}
Reid Spencer3822ff52006-11-08 06:47:33 +00005837
5838
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00005839#line 2821 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer61c83e02006-08-18 08:43:06 +00005840
5841
Reid Spencer14310612006-12-31 05:40:51 +00005842// common code from the two 'RunVMAsmParser' functions
5843static Module* RunParser(Module * M) {
5844
5845 llvmAsmlineno = 1; // Reset the current line number...
5846 CurModule.CurrentModule = M;
5847#if YYDEBUG
5848 yydebug = Debug;
5849#endif
5850
5851 // Check to make sure the parser succeeded
5852 if (yyparse()) {
5853 if (ParserResult)
5854 delete ParserResult;
5855 return 0;
5856 }
5857
5858 // Check to make sure that parsing produced a result
5859 if (!ParserResult)
5860 return 0;
5861
5862 // Reset ParserResult variable while saving its value for the result.
5863 Module *Result = ParserResult;
5864 ParserResult = 0;
5865
5866 return Result;
5867}
5868
Reid Spencer61c83e02006-08-18 08:43:06 +00005869void llvm::GenerateError(const std::string &message, int LineNo) {
5870 if (LineNo == -1) LineNo = llvmAsmlineno;
5871 // TODO: column number in exception
5872 if (TheParseError)
5873 TheParseError->setError(CurFilename, message, LineNo);
5874 TriggerError = 1;
5875}
Reid Spencer68a24bd2005-08-27 18:50:39 +00005876
5877int yyerror(const char *ErrorMsg) {
5878 std::string where
5879 = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename)
5880 + ":" + utostr((unsigned) llvmAsmlineno) + ": ";
5881 std::string errMsg = std::string(ErrorMsg) + "\n" + where + " while reading ";
5882 if (yychar == YYEMPTY || yychar == 0)
5883 errMsg += "end-of-file.";
5884 else
5885 errMsg += "token: '" + std::string(llvmAsmtext, llvmAsmleng) + "'";
Reid Spencer61c83e02006-08-18 08:43:06 +00005886 GenerateError(errMsg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005887 return 0;
5888}
Reid Spencer3822ff52006-11-08 06:47:33 +00005889