blob: 7a2cddc6d0e21818bbd39badeffcf2d9a8f061bc [file] [log] [blame]
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001/* A Bison parser, made from /usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y, by GNU bison 1.75. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002
Reid Spencer9c9b63a2007-04-28 16:07:31 +00003/* Skeleton parser for Yacc-like parsing with Bison,
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
Anton Korobeynikov178a3522007-01-12 19:22:51 +00005
Anton Korobeynikov38e09802007-04-28 13:48:45 +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.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
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
Jeff Cohen930c0fe2007-04-29 14:43:31 +000018 Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
Anton Korobeynikov38e09802007-04-28 13:48:45 +000020
Reid Spencer9c9b63a2007-04-28 16:07:31 +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. */
Anton Korobeynikov38e09802007-04-28 13:48:45 +000025
Reid Spencer9c9b63a2007-04-28 16:07:31 +000026/* Written by Richard Stallman by simplifying the original so called
27 ``semantic'' parser. */
Anton Korobeynikov38e09802007-04-28 13:48:45 +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. */
Jeff Cohen930c0fe2007-04-29 14:43:31 +000037#define YYBISON 1
Anton Korobeynikov38e09802007-04-28 13:48:45 +000038
39/* Pure parsers. */
Jeff Cohen930c0fe2007-04-29 14:43:31 +000040#define YYPURE 0
Anton Korobeynikov38e09802007-04-28 13:48:45 +000041
42/* Using locations. */
43#define YYLSP_NEEDED 0
44
Jeff Cohen930c0fe2007-04-29 14:43:31 +000045/* If NAME_PREFIX is specified substitute the variables and functions
46 names. */
Reid Spencer68a24bd2005-08-27 18:50:39 +000047#define yyparse llvmAsmparse
Anton Korobeynikov38e09802007-04-28 13:48:45 +000048#define yylex llvmAsmlex
Reid Spencer68a24bd2005-08-27 18:50:39 +000049#define yyerror llvmAsmerror
Anton Korobeynikov38e09802007-04-28 13:48:45 +000050#define yylval llvmAsmlval
51#define yychar llvmAsmchar
Reid Spencer68a24bd2005-08-27 18:50:39 +000052#define yydebug llvmAsmdebug
53#define yynerrs llvmAsmnerrs
54
Anton Korobeynikov38e09802007-04-28 13:48:45 +000055
56/* Tokens. */
57#ifndef YYTOKENTYPE
58# define YYTOKENTYPE
59 /* Put the tokens into the symbol table, so that GDB and other debuggers
60 know about them. */
61 enum yytokentype {
62 ESINT64VAL = 258,
63 EUINT64VAL = 259,
64 ESAPINTVAL = 260,
65 EUAPINTVAL = 261,
66 LOCALVAL_ID = 262,
67 GLOBALVAL_ID = 263,
68 FPVAL = 264,
69 VOID = 265,
70 INTTYPE = 266,
71 FLOAT = 267,
72 DOUBLE = 268,
73 LABEL = 269,
74 TYPE = 270,
75 LOCALVAR = 271,
76 GLOBALVAR = 272,
77 LABELSTR = 273,
78 STRINGCONSTANT = 274,
79 ATSTRINGCONSTANT = 275,
80 ZEROINITIALIZER = 276,
81 TRUETOK = 277,
82 FALSETOK = 278,
83 BEGINTOK = 279,
84 ENDTOK = 280,
85 DECLARE = 281,
86 DEFINE = 282,
87 GLOBAL = 283,
88 CONSTANT = 284,
89 SECTION = 285,
90 ALIAS = 286,
91 VOLATILE = 287,
92 THREAD_LOCAL = 288,
93 TO = 289,
94 DOTDOTDOT = 290,
95 NULL_TOK = 291,
96 UNDEF = 292,
97 INTERNAL = 293,
98 LINKONCE = 294,
99 WEAK = 295,
100 APPENDING = 296,
101 DLLIMPORT = 297,
102 DLLEXPORT = 298,
103 EXTERN_WEAK = 299,
104 OPAQUE = 300,
105 EXTERNAL = 301,
106 TARGET = 302,
107 TRIPLE = 303,
108 ALIGN = 304,
109 DEPLIBS = 305,
110 CALL = 306,
111 TAIL = 307,
112 ASM_TOK = 308,
113 MODULE = 309,
114 SIDEEFFECT = 310,
115 CC_TOK = 311,
116 CCC_TOK = 312,
117 FASTCC_TOK = 313,
118 COLDCC_TOK = 314,
119 X86_STDCALLCC_TOK = 315,
120 X86_FASTCALLCC_TOK = 316,
121 DATALAYOUT = 317,
122 RET = 318,
123 BR = 319,
124 SWITCH = 320,
125 INVOKE = 321,
126 UNWIND = 322,
127 UNREACHABLE = 323,
128 ADD = 324,
129 SUB = 325,
130 MUL = 326,
131 UDIV = 327,
132 SDIV = 328,
133 FDIV = 329,
134 UREM = 330,
135 SREM = 331,
136 FREM = 332,
137 AND = 333,
138 OR = 334,
139 XOR = 335,
140 SHL = 336,
141 LSHR = 337,
142 ASHR = 338,
143 ICMP = 339,
144 FCMP = 340,
145 EQ = 341,
146 NE = 342,
147 SLT = 343,
148 SGT = 344,
149 SLE = 345,
150 SGE = 346,
151 ULT = 347,
152 UGT = 348,
153 ULE = 349,
154 UGE = 350,
155 OEQ = 351,
156 ONE = 352,
157 OLT = 353,
158 OGT = 354,
159 OLE = 355,
160 OGE = 356,
161 ORD = 357,
162 UNO = 358,
163 UEQ = 359,
164 UNE = 360,
165 MALLOC = 361,
166 ALLOCA = 362,
167 FREE = 363,
168 LOAD = 364,
169 STORE = 365,
170 GETELEMENTPTR = 366,
171 TRUNC = 367,
172 ZEXT = 368,
173 SEXT = 369,
174 FPTRUNC = 370,
175 FPEXT = 371,
176 BITCAST = 372,
177 UITOFP = 373,
178 SITOFP = 374,
179 FPTOUI = 375,
180 FPTOSI = 376,
181 INTTOPTR = 377,
182 PTRTOINT = 378,
183 PHI_TOK = 379,
184 SELECT = 380,
185 VAARG = 381,
186 EXTRACTELEMENT = 382,
187 INSERTELEMENT = 383,
188 SHUFFLEVECTOR = 384,
189 NORETURN = 385,
190 INREG = 386,
191 SRET = 387,
192 NOUNWIND = 388,
193 DEFAULT = 389,
194 HIDDEN = 390
195 };
196#endif
Anton Korobeynikov38e09802007-04-28 13:48:45 +0000197#define ESINT64VAL 258
198#define EUINT64VAL 259
199#define ESAPINTVAL 260
200#define EUAPINTVAL 261
201#define LOCALVAL_ID 262
202#define GLOBALVAL_ID 263
203#define FPVAL 264
204#define VOID 265
205#define INTTYPE 266
206#define FLOAT 267
207#define DOUBLE 268
208#define LABEL 269
209#define TYPE 270
210#define LOCALVAR 271
211#define GLOBALVAR 272
212#define LABELSTR 273
213#define STRINGCONSTANT 274
214#define ATSTRINGCONSTANT 275
215#define ZEROINITIALIZER 276
216#define TRUETOK 277
217#define FALSETOK 278
218#define BEGINTOK 279
219#define ENDTOK 280
220#define DECLARE 281
221#define DEFINE 282
222#define GLOBAL 283
223#define CONSTANT 284
224#define SECTION 285
225#define ALIAS 286
226#define VOLATILE 287
227#define THREAD_LOCAL 288
228#define TO 289
229#define DOTDOTDOT 290
230#define NULL_TOK 291
231#define UNDEF 292
232#define INTERNAL 293
233#define LINKONCE 294
234#define WEAK 295
235#define APPENDING 296
236#define DLLIMPORT 297
237#define DLLEXPORT 298
238#define EXTERN_WEAK 299
239#define OPAQUE 300
240#define EXTERNAL 301
241#define TARGET 302
242#define TRIPLE 303
243#define ALIGN 304
244#define DEPLIBS 305
245#define CALL 306
246#define TAIL 307
247#define ASM_TOK 308
248#define MODULE 309
249#define SIDEEFFECT 310
250#define CC_TOK 311
251#define CCC_TOK 312
252#define FASTCC_TOK 313
253#define COLDCC_TOK 314
254#define X86_STDCALLCC_TOK 315
255#define X86_FASTCALLCC_TOK 316
256#define DATALAYOUT 317
257#define RET 318
258#define BR 319
259#define SWITCH 320
260#define INVOKE 321
261#define UNWIND 322
262#define UNREACHABLE 323
263#define ADD 324
264#define SUB 325
265#define MUL 326
266#define UDIV 327
267#define SDIV 328
268#define FDIV 329
269#define UREM 330
270#define SREM 331
271#define FREM 332
272#define AND 333
273#define OR 334
274#define XOR 335
275#define SHL 336
276#define LSHR 337
277#define ASHR 338
278#define ICMP 339
279#define FCMP 340
280#define EQ 341
281#define NE 342
282#define SLT 343
283#define SGT 344
284#define SLE 345
285#define SGE 346
286#define ULT 347
287#define UGT 348
288#define ULE 349
289#define UGE 350
290#define OEQ 351
291#define ONE 352
292#define OLT 353
293#define OGT 354
294#define OLE 355
295#define OGE 356
296#define ORD 357
297#define UNO 358
298#define UEQ 359
299#define UNE 360
300#define MALLOC 361
301#define ALLOCA 362
302#define FREE 363
303#define LOAD 364
304#define STORE 365
305#define GETELEMENTPTR 366
306#define TRUNC 367
307#define ZEXT 368
308#define SEXT 369
309#define FPTRUNC 370
310#define FPEXT 371
311#define BITCAST 372
312#define UITOFP 373
313#define SITOFP 374
314#define FPTOUI 375
315#define FPTOSI 376
316#define INTTOPTR 377
317#define PTRTOINT 378
318#define PHI_TOK 379
319#define SELECT 380
320#define VAARG 381
321#define EXTRACTELEMENT 382
322#define INSERTELEMENT 383
323#define SHUFFLEVECTOR 384
324#define NORETURN 385
325#define INREG 386
326#define SRET 387
327#define NOUNWIND 388
328#define DEFAULT 389
329#define HIDDEN 390
330
331
332
333
334/* Copy the first part of user declarations. */
Jeff Cohen930c0fe2007-04-29 14:43:31 +0000335#line 14 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000336
337#include "ParserInternals.h"
338#include "llvm/CallingConv.h"
Chris Lattner0e9c3762006-01-25 22:27:16 +0000339#include "llvm/InlineAsm.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000340#include "llvm/Instructions.h"
341#include "llvm/Module.h"
Reid Spenceref9b9a72007-02-05 20:47:22 +0000342#include "llvm/ValueSymbolTable.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000343#include "llvm/Support/GetElementPtrTypeIterator.h"
Reid Spencer14310612006-12-31 05:40:51 +0000344#include "llvm/Support/CommandLine.h"
Chris Lattnerf7469af2007-01-31 04:44:08 +0000345#include "llvm/ADT/SmallVector.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000346#include "llvm/ADT/STLExtras.h"
Chris Lattner0019bbe2005-11-06 06:46:53 +0000347#include "llvm/Support/MathExtras.h"
Reid Spencer481169e2006-12-01 00:33:46 +0000348#include "llvm/Support/Streams.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000349#include <algorithm>
Reid Spencer68a24bd2005-08-27 18:50:39 +0000350#include <list>
Chris Lattner8adde282007-02-11 21:40:10 +0000351#include <map>
Reid Spencer68a24bd2005-08-27 18:50:39 +0000352#include <utility>
Reid Spencer14310612006-12-31 05:40:51 +0000353#ifndef NDEBUG
354#define YYDEBUG 1
355#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +0000356
Reid Spencere4f47592006-08-18 17:32:55 +0000357// The following is a gross hack. In order to rid the libAsmParser library of
358// exceptions, we have to have a way of getting the yyparse function to go into
359// an error situation. So, whenever we want an error to occur, the GenerateError
360// function (see bottom of file) sets TriggerError. Then, at the end of each
361// production in the grammer we use CHECK_FOR_ERROR which will invoke YYERROR
362// (a goto) to put YACC in error state. Furthermore, several calls to
363// GenerateError are made from inside productions and they must simulate the
364// previous exception behavior by exiting the production immediately. We have
365// replaced these with the GEN_ERROR macro which calls GeneratError and then
366// immediately invokes YYERROR. This would be so much cleaner if it was a
367// recursive descent parser.
Reid Spencer61c83e02006-08-18 08:43:06 +0000368static bool TriggerError = false;
Reid Spencerf63697d2006-10-09 17:36:59 +0000369#define CHECK_FOR_ERROR { if (TriggerError) { TriggerError = false; YYABORT; } }
Reid Spencer61c83e02006-08-18 08:43:06 +0000370#define GEN_ERROR(msg) { GenerateError(msg); YYERROR; }
371
Reid Spencer68a24bd2005-08-27 18:50:39 +0000372int yyerror(const char *ErrorMsg); // Forward declarations to prevent "implicit
373int yylex(); // declaration" of xxx warnings.
374int yyparse();
375
376namespace llvm {
377 std::string CurFilename;
Reid Spencer14310612006-12-31 05:40:51 +0000378#if YYDEBUG
379static cl::opt<bool>
380Debug("debug-yacc", cl::desc("Print yacc debug state changes"),
381 cl::Hidden, cl::init(false));
382#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +0000383}
384using namespace llvm;
385
386static Module *ParserResult;
387
388// DEBUG_UPREFS - Define this symbol if you want to enable debugging output
389// relating to upreferences in the input stream.
390//
391//#define DEBUG_UPREFS 1
392#ifdef DEBUG_UPREFS
Bill Wendlinge8156192006-12-07 01:30:32 +0000393#define UR_OUT(X) cerr << X
Reid Spencer68a24bd2005-08-27 18:50:39 +0000394#else
395#define UR_OUT(X)
396#endif
397
398#define YYERROR_VERBOSE 1
399
Chris Lattnerb475c422005-11-12 18:22:38 +0000400static GlobalVariable *CurGV;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000401
402
403// This contains info used when building the body of a function. It is
404// destroyed when the function is completed.
405//
406typedef std::vector<Value *> ValueList; // Numbered defs
Reid Spencer14310612006-12-31 05:40:51 +0000407
Reid Spencer68a24bd2005-08-27 18:50:39 +0000408static void
Reid Spencer93c40032007-03-19 18:40:50 +0000409ResolveDefinitions(ValueList &LateResolvers, ValueList *FutureLateResolvers=0);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000410
411static struct PerModuleInfo {
412 Module *CurrentModule;
Reid Spencer93c40032007-03-19 18:40:50 +0000413 ValueList Values; // Module level numbered definitions
414 ValueList LateResolveValues;
Reid Spencer861d9d62006-11-28 07:29:44 +0000415 std::vector<PATypeHolder> Types;
416 std::map<ValID, PATypeHolder> LateResolveTypes;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000417
418 /// PlaceHolderInfo - When temporary placeholder objects are created, remember
Chris Lattner0ad19702006-06-21 16:53:00 +0000419 /// how they were referenced and on which line of the input they came from so
Reid Spencer68a24bd2005-08-27 18:50:39 +0000420 /// that we can resolve them later and print error messages as appropriate.
421 std::map<Value*, std::pair<ValID, int> > PlaceHolderInfo;
422
423 // GlobalRefs - This maintains a mapping between <Type, ValID>'s and forward
424 // references to global values. Global values may be referenced before they
425 // are defined, and if so, the temporary object that they represent is held
426 // here. This is used for forward references of GlobalValues.
427 //
428 typedef std::map<std::pair<const PointerType *,
429 ValID>, GlobalValue*> GlobalRefsType;
430 GlobalRefsType GlobalRefs;
431
432 void ModuleDone() {
433 // If we could not resolve some functions at function compilation time
434 // (calls to functions before they are defined), resolve them now... Types
435 // are resolved when the constant pool has been completely parsed.
436 //
437 ResolveDefinitions(LateResolveValues);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000438 if (TriggerError)
439 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000440
441 // Check to make sure that all global value forward references have been
442 // resolved!
443 //
444 if (!GlobalRefs.empty()) {
445 std::string UndefinedReferences = "Unresolved global references exist:\n";
446
447 for (GlobalRefsType::iterator I = GlobalRefs.begin(), E =GlobalRefs.end();
448 I != E; ++I) {
449 UndefinedReferences += " " + I->first.first->getDescription() + " " +
450 I->first.second.getName() + "\n";
451 }
Reid Spencer61c83e02006-08-18 08:43:06 +0000452 GenerateError(UndefinedReferences);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000453 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000454 }
455
456 Values.clear(); // Clear out function local definitions
457 Types.clear();
458 CurrentModule = 0;
459 }
460
Reid Spencer68a24bd2005-08-27 18:50:39 +0000461 // GetForwardRefForGlobal - Check to see if there is a forward reference
462 // for this global. If so, remove it from the GlobalRefs map and return it.
463 // If not, just return null.
464 GlobalValue *GetForwardRefForGlobal(const PointerType *PTy, ValID ID) {
465 // Check to see if there is a forward reference to this global variable...
466 // if there is, eliminate it and patch the reference to use the new def'n.
467 GlobalRefsType::iterator I = GlobalRefs.find(std::make_pair(PTy, ID));
468 GlobalValue *Ret = 0;
469 if (I != GlobalRefs.end()) {
470 Ret = I->second;
471 GlobalRefs.erase(I);
472 }
473 return Ret;
474 }
Reid Spencer8c8a2dc2007-01-02 21:54:12 +0000475
476 bool TypeIsUnresolved(PATypeHolder* PATy) {
477 // If it isn't abstract, its resolved
478 const Type* Ty = PATy->get();
479 if (!Ty->isAbstract())
480 return false;
481 // Traverse the type looking for abstract types. If it isn't abstract then
482 // we don't need to traverse that leg of the type.
483 std::vector<const Type*> WorkList, SeenList;
484 WorkList.push_back(Ty);
485 while (!WorkList.empty()) {
486 const Type* Ty = WorkList.back();
487 SeenList.push_back(Ty);
488 WorkList.pop_back();
489 if (const OpaqueType* OpTy = dyn_cast<OpaqueType>(Ty)) {
490 // Check to see if this is an unresolved type
491 std::map<ValID, PATypeHolder>::iterator I = LateResolveTypes.begin();
492 std::map<ValID, PATypeHolder>::iterator E = LateResolveTypes.end();
493 for ( ; I != E; ++I) {
494 if (I->second.get() == OpTy)
495 return true;
496 }
497 } else if (const SequentialType* SeqTy = dyn_cast<SequentialType>(Ty)) {
498 const Type* TheTy = SeqTy->getElementType();
499 if (TheTy->isAbstract() && TheTy != Ty) {
500 std::vector<const Type*>::iterator I = SeenList.begin(),
501 E = SeenList.end();
502 for ( ; I != E; ++I)
503 if (*I == TheTy)
504 break;
505 if (I == E)
506 WorkList.push_back(TheTy);
507 }
508 } else if (const StructType* StrTy = dyn_cast<StructType>(Ty)) {
509 for (unsigned i = 0; i < StrTy->getNumElements(); ++i) {
510 const Type* TheTy = StrTy->getElementType(i);
511 if (TheTy->isAbstract() && TheTy != Ty) {
512 std::vector<const Type*>::iterator I = SeenList.begin(),
513 E = SeenList.end();
514 for ( ; I != E; ++I)
515 if (*I == TheTy)
516 break;
517 if (I == E)
518 WorkList.push_back(TheTy);
519 }
520 }
521 }
522 }
523 return false;
524 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000525} CurModule;
526
527static struct PerFunctionInfo {
528 Function *CurrentFunction; // Pointer to current function being created
529
Reid Spencer93c40032007-03-19 18:40:50 +0000530 ValueList Values; // Keep track of #'d definitions
531 unsigned NextValNum;
532 ValueList LateResolveValues;
Reid Spenceref9b9a72007-02-05 20:47:22 +0000533 bool isDeclare; // Is this function a forward declararation?
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000534 GlobalValue::LinkageTypes Linkage; // Linkage for forward declaration.
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000535 GlobalValue::VisibilityTypes Visibility;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000536
537 /// BBForwardRefs - When we see forward references to basic blocks, keep
538 /// track of them here.
Reid Spencer93c40032007-03-19 18:40:50 +0000539 std::map<ValID, BasicBlock*> BBForwardRefs;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000540
541 inline PerFunctionInfo() {
542 CurrentFunction = 0;
543 isDeclare = false;
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000544 Linkage = GlobalValue::ExternalLinkage;
545 Visibility = GlobalValue::DefaultVisibility;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000546 }
547
548 inline void FunctionStart(Function *M) {
549 CurrentFunction = M;
Reid Spencer93c40032007-03-19 18:40:50 +0000550 NextValNum = 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000551 }
552
553 void FunctionDone() {
Reid Spencer68a24bd2005-08-27 18:50:39 +0000554 // Any forward referenced blocks left?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000555 if (!BBForwardRefs.empty()) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000556 GenerateError("Undefined reference to label " +
Reid Spencer93c40032007-03-19 18:40:50 +0000557 BBForwardRefs.begin()->second->getName());
Reid Spencer5b7e7532006-09-28 19:28:24 +0000558 return;
559 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000560
561 // Resolve all forward references now.
562 ResolveDefinitions(LateResolveValues, &CurModule.LateResolveValues);
563
564 Values.clear(); // Clear out function local definitions
Reid Spencer93c40032007-03-19 18:40:50 +0000565 BBForwardRefs.clear();
Reid Spencer68a24bd2005-08-27 18:50:39 +0000566 CurrentFunction = 0;
567 isDeclare = false;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000568 Linkage = GlobalValue::ExternalLinkage;
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000569 Visibility = GlobalValue::DefaultVisibility;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000570 }
571} CurFun; // Info for the current function...
572
573static bool inFunctionScope() { return CurFun.CurrentFunction != 0; }
574
575
576//===----------------------------------------------------------------------===//
577// Code to handle definitions of all the types
578//===----------------------------------------------------------------------===//
579
Reid Spencer93c40032007-03-19 18:40:50 +0000580static void InsertValue(Value *V, ValueList &ValueTab = CurFun.Values) {
581 // Things that have names or are void typed don't get slot numbers
582 if (V->hasName() || (V->getType() == Type::VoidTy))
583 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000584
Reid Spencer93c40032007-03-19 18:40:50 +0000585 // In the case of function values, we have to allow for the forward reference
586 // of basic blocks, which are included in the numbering. Consequently, we keep
587 // track of the next insertion location with NextValNum. When a BB gets
588 // inserted, it could change the size of the CurFun.Values vector.
589 if (&ValueTab == &CurFun.Values) {
590 if (ValueTab.size() <= CurFun.NextValNum)
591 ValueTab.resize(CurFun.NextValNum+1);
592 ValueTab[CurFun.NextValNum++] = V;
593 return;
594 }
595 // For all other lists, its okay to just tack it on the back of the vector.
596 ValueTab.push_back(V);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000597}
598
599static const Type *getTypeVal(const ValID &D, bool DoNotImprovise = false) {
600 switch (D.Type) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000601 case ValID::LocalID: // Is it a numbered definition?
Reid Spencer68a24bd2005-08-27 18:50:39 +0000602 // Module constants occupy the lowest numbered slots...
Reid Spencer41dff5e2007-01-26 08:05:27 +0000603 if (D.Num < CurModule.Types.size())
604 return CurModule.Types[D.Num];
Reid Spencer68a24bd2005-08-27 18:50:39 +0000605 break;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000606 case ValID::LocalName: // Is it a named definition?
Reid Spencer68a24bd2005-08-27 18:50:39 +0000607 if (const Type *N = CurModule.CurrentModule->getTypeByName(D.Name)) {
608 D.destroy(); // Free old strdup'd memory...
609 return N;
610 }
611 break;
612 default:
Reid Spencerb5334b02007-02-05 10:18:06 +0000613 GenerateError("Internal parser error: Invalid symbol type reference");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000614 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000615 }
616
617 // If we reached here, we referenced either a symbol that we don't know about
618 // or an id number that hasn't been read yet. We may be referencing something
619 // forward, so just create an entry to be resolved later and get to it...
620 //
621 if (DoNotImprovise) return 0; // Do we just want a null to be returned?
622
623
624 if (inFunctionScope()) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000625 if (D.Type == ValID::LocalName) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000626 GenerateError("Reference to an undefined type: '" + D.getName() + "'");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000627 return 0;
628 } else {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000629 GenerateError("Reference to an undefined type: #" + utostr(D.Num));
Reid Spencer5b7e7532006-09-28 19:28:24 +0000630 return 0;
631 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000632 }
633
Reid Spencer861d9d62006-11-28 07:29:44 +0000634 std::map<ValID, PATypeHolder>::iterator I =CurModule.LateResolveTypes.find(D);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000635 if (I != CurModule.LateResolveTypes.end())
Reid Spencer861d9d62006-11-28 07:29:44 +0000636 return I->second;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000637
Reid Spencer861d9d62006-11-28 07:29:44 +0000638 Type *Typ = OpaqueType::get();
639 CurModule.LateResolveTypes.insert(std::make_pair(D, Typ));
640 return Typ;
Reid Spencera132e042006-12-03 05:46:11 +0000641 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000642
Reid Spencer93c40032007-03-19 18:40:50 +0000643// getExistingVal - Look up the value specified by the provided type and
Reid Spencer68a24bd2005-08-27 18:50:39 +0000644// the provided ValID. If the value exists and has already been defined, return
645// it. Otherwise return null.
646//
Reid Spencer93c40032007-03-19 18:40:50 +0000647static Value *getExistingVal(const Type *Ty, const ValID &D) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000648 if (isa<FunctionType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000649 GenerateError("Functions are not values and "
Reid Spencer68a24bd2005-08-27 18:50:39 +0000650 "must be referenced as pointers");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000651 return 0;
652 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000653
654 switch (D.Type) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000655 case ValID::LocalID: { // Is it a numbered definition?
Reid Spencer41dff5e2007-01-26 08:05:27 +0000656 // Check that the number is within bounds.
Reid Spencer93c40032007-03-19 18:40:50 +0000657 if (D.Num >= CurFun.Values.size())
658 return 0;
659 Value *Result = CurFun.Values[D.Num];
660 if (Ty != Result->getType()) {
661 GenerateError("Numbered value (%" + utostr(D.Num) + ") of type '" +
662 Result->getType()->getDescription() + "' does not match "
663 "expected type, '" + Ty->getDescription() + "'");
664 return 0;
665 }
666 return Result;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000667 }
668 case ValID::GlobalID: { // Is it a numbered definition?
Reid Spencer93c40032007-03-19 18:40:50 +0000669 if (D.Num >= CurModule.Values.size())
Reid Spenceref9b9a72007-02-05 20:47:22 +0000670 return 0;
Reid Spencer93c40032007-03-19 18:40:50 +0000671 Value *Result = CurModule.Values[D.Num];
672 if (Ty != Result->getType()) {
673 GenerateError("Numbered value (@" + utostr(D.Num) + ") of type '" +
674 Result->getType()->getDescription() + "' does not match "
675 "expected type, '" + Ty->getDescription() + "'");
Reid Spenceref9b9a72007-02-05 20:47:22 +0000676 return 0;
Reid Spencer93c40032007-03-19 18:40:50 +0000677 }
678 return Result;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000679 }
Reid Spencer41dff5e2007-01-26 08:05:27 +0000680
681 case ValID::LocalName: { // Is it a named definition?
Reid Spenceref9b9a72007-02-05 20:47:22 +0000682 if (!inFunctionScope())
683 return 0;
684 ValueSymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable();
685 Value *N = SymTab.lookup(D.Name);
686 if (N == 0)
687 return 0;
688 if (N->getType() != Ty)
689 return 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000690
691 D.destroy(); // Free old strdup'd memory...
692 return N;
693 }
694 case ValID::GlobalName: { // Is it a named definition?
Reid Spenceref9b9a72007-02-05 20:47:22 +0000695 ValueSymbolTable &SymTab = CurModule.CurrentModule->getValueSymbolTable();
696 Value *N = SymTab.lookup(D.Name);
697 if (N == 0)
698 return 0;
699 if (N->getType() != Ty)
700 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000701
702 D.destroy(); // Free old strdup'd memory...
703 return N;
704 }
705
706 // Check to make sure that "Ty" is an integral type, and that our
707 // value will fit into the specified type...
708 case ValID::ConstSIntVal: // Is it a constant pool reference??
Reid Spencerb83eb642006-10-20 07:07:24 +0000709 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000710 GenerateError("Signed integral constant '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000711 itostr(D.ConstPool64) + "' is invalid for type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +0000712 Ty->getDescription() + "'");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000713 return 0;
714 }
Reid Spencer49d273e2007-03-19 20:40:51 +0000715 return ConstantInt::get(Ty, D.ConstPool64, true);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000716
717 case ValID::ConstUIntVal: // Is it an unsigned const pool reference?
Reid Spencerb83eb642006-10-20 07:07:24 +0000718 if (!ConstantInt::isValueValidForType(Ty, D.UConstPool64)) {
719 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000720 GenerateError("Integral constant '" + utostr(D.UConstPool64) +
Reid Spencerb5334b02007-02-05 10:18:06 +0000721 "' is invalid or out of range");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000722 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000723 } else { // This is really a signed reference. Transmogrify.
Reid Spencer49d273e2007-03-19 20:40:51 +0000724 return ConstantInt::get(Ty, D.ConstPool64, true);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000725 }
726 } else {
Reid Spencerb83eb642006-10-20 07:07:24 +0000727 return ConstantInt::get(Ty, D.UConstPool64);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000728 }
729
730 case ValID::ConstFPVal: // Is it a floating point const pool reference?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000731 if (!ConstantFP::isValueValidForType(Ty, D.ConstPoolFP)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000732 GenerateError("FP constant invalid for type");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000733 return 0;
734 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000735 return ConstantFP::get(Ty, D.ConstPoolFP);
736
737 case ValID::ConstNullVal: // Is it a null value?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000738 if (!isa<PointerType>(Ty)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000739 GenerateError("Cannot create a a non pointer null");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000740 return 0;
741 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000742 return ConstantPointerNull::get(cast<PointerType>(Ty));
743
744 case ValID::ConstUndefVal: // Is it an undef value?
745 return UndefValue::get(Ty);
746
Chris Lattner7aa61892005-12-21 17:53:23 +0000747 case ValID::ConstZeroVal: // Is it a zero value?
748 return Constant::getNullValue(Ty);
749
Reid Spencer68a24bd2005-08-27 18:50:39 +0000750 case ValID::ConstantVal: // Fully resolved constant?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000751 if (D.ConstantValue->getType() != Ty) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000752 GenerateError("Constant expression type different from required type");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000753 return 0;
754 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000755 return D.ConstantValue;
756
Chris Lattner0e9c3762006-01-25 22:27:16 +0000757 case ValID::InlineAsmVal: { // Inline asm expression
758 const PointerType *PTy = dyn_cast<PointerType>(Ty);
759 const FunctionType *FTy =
760 PTy ? dyn_cast<FunctionType>(PTy->getElementType()) : 0;
Reid Spencer5b7e7532006-09-28 19:28:24 +0000761 if (!FTy || !InlineAsm::Verify(FTy, D.IAD->Constraints)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000762 GenerateError("Invalid type for asm constraint string");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000763 return 0;
764 }
Chris Lattner0e9c3762006-01-25 22:27:16 +0000765 InlineAsm *IA = InlineAsm::get(FTy, D.IAD->AsmString, D.IAD->Constraints,
766 D.IAD->HasSideEffects);
767 D.destroy(); // Free InlineAsmDescriptor.
768 return IA;
769 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000770 default:
Reid Spencera9720f52007-02-05 17:04:00 +0000771 assert(0 && "Unhandled case!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000772 return 0;
773 } // End of switch
774
Reid Spencera9720f52007-02-05 17:04:00 +0000775 assert(0 && "Unhandled case!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000776 return 0;
777}
778
Reid Spencer93c40032007-03-19 18:40:50 +0000779// getVal - This function is identical to getExistingVal, except that if a
Reid Spencer68a24bd2005-08-27 18:50:39 +0000780// value is not already defined, it "improvises" by creating a placeholder var
781// that looks and acts just like the requested variable. When the value is
782// defined later, all uses of the placeholder variable are replaced with the
783// real thing.
784//
785static Value *getVal(const Type *Ty, const ValID &ID) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000786 if (Ty == Type::LabelTy) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000787 GenerateError("Cannot use a basic block here");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000788 return 0;
789 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000790
791 // See if the value has already been defined.
Reid Spencer93c40032007-03-19 18:40:50 +0000792 Value *V = getExistingVal(Ty, ID);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000793 if (V) return V;
Reid Spencer5b7e7532006-09-28 19:28:24 +0000794 if (TriggerError) return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000795
Reid Spencer5b7e7532006-09-28 19:28:24 +0000796 if (!Ty->isFirstClassType() && !isa<OpaqueType>(Ty)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000797 GenerateError("Invalid use of a composite type");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000798 return 0;
799 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000800
801 // If we reached here, we referenced either a symbol that we don't know about
802 // or an id number that hasn't been read yet. We may be referencing something
803 // forward, so just create an entry to be resolved later and get to it...
804 //
Anton Korobeynikov38e09802007-04-28 13:48:45 +0000805 switch (ID.Type) {
806 case ValID::GlobalName:
Reid Spencer9c9b63a2007-04-28 16:07:31 +0000807 case ValID::GlobalID: {
Anton Korobeynikov38e09802007-04-28 13:48:45 +0000808 const PointerType *PTy = dyn_cast<PointerType>(Ty);
809 if (!PTy) {
810 GenerateError("Invalid type for reference to global" );
811 return 0;
812 }
813 const Type* ElTy = PTy->getElementType();
814 if (const FunctionType *FTy = dyn_cast<FunctionType>(ElTy))
815 V = new Function(FTy, GlobalValue::ExternalLinkage);
816 else
817 V = new GlobalVariable(ElTy, false, GlobalValue::ExternalLinkage);
818 break;
Reid Spencer9c9b63a2007-04-28 16:07:31 +0000819 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +0000820 default:
821 V = new Argument(Ty);
822 }
823
Reid Spencer68a24bd2005-08-27 18:50:39 +0000824 // Remember where this forward reference came from. FIXME, shouldn't we try
825 // to recycle these things??
826 CurModule.PlaceHolderInfo.insert(std::make_pair(V, std::make_pair(ID,
827 llvmAsmlineno)));
828
829 if (inFunctionScope())
830 InsertValue(V, CurFun.LateResolveValues);
831 else
832 InsertValue(V, CurModule.LateResolveValues);
833 return V;
834}
835
Reid Spencer93c40032007-03-19 18:40:50 +0000836/// defineBBVal - This is a definition of a new basic block with the specified
837/// identifier which must be the same as CurFun.NextValNum, if its numeric.
838static BasicBlock *defineBBVal(const ValID &ID) {
Reid Spencera9720f52007-02-05 17:04:00 +0000839 assert(inFunctionScope() && "Can't get basic block at global scope!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000840
Reid Spencer68a24bd2005-08-27 18:50:39 +0000841 BasicBlock *BB = 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000842
Reid Spencer93c40032007-03-19 18:40:50 +0000843 // First, see if this was forward referenced
Reid Spencer68a24bd2005-08-27 18:50:39 +0000844
Reid Spencer93c40032007-03-19 18:40:50 +0000845 std::map<ValID, BasicBlock*>::iterator BBI = CurFun.BBForwardRefs.find(ID);
846 if (BBI != CurFun.BBForwardRefs.end()) {
847 BB = BBI->second;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000848 // The forward declaration could have been inserted anywhere in the
849 // function: insert it into the correct place now.
850 CurFun.CurrentFunction->getBasicBlockList().remove(BB);
851 CurFun.CurrentFunction->getBasicBlockList().push_back(BB);
Reid Spencer93c40032007-03-19 18:40:50 +0000852
Reid Spencer66728ef2007-03-20 01:13:36 +0000853 // We're about to erase the entry, save the key so we can clean it up.
854 ValID Tmp = BBI->first;
855
Reid Spencer93c40032007-03-19 18:40:50 +0000856 // Erase the forward ref from the map as its no longer "forward"
857 CurFun.BBForwardRefs.erase(ID);
858
Reid Spencer66728ef2007-03-20 01:13:36 +0000859 // The key has been removed from the map but so we don't want to leave
860 // strdup'd memory around so destroy it too.
861 Tmp.destroy();
862
Reid Spencer93c40032007-03-19 18:40:50 +0000863 // If its a numbered definition, bump the number and set the BB value.
864 if (ID.Type == ValID::LocalID) {
865 assert(ID.Num == CurFun.NextValNum && "Invalid new block number");
866 InsertValue(BB);
867 }
868
869 ID.destroy();
870 return BB;
871 }
872
873 // We haven't seen this BB before and its first mention is a definition.
874 // Just create it and return it.
875 std::string Name (ID.Type == ValID::LocalName ? ID.Name : "");
876 BB = new BasicBlock(Name, CurFun.CurrentFunction);
877 if (ID.Type == ValID::LocalID) {
878 assert(ID.Num == CurFun.NextValNum && "Invalid new block number");
879 InsertValue(BB);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000880 }
Reid Spencer93c40032007-03-19 18:40:50 +0000881
882 ID.destroy(); // Free strdup'd memory
883 return BB;
884}
885
886/// getBBVal - get an existing BB value or create a forward reference for it.
887///
888static BasicBlock *getBBVal(const ValID &ID) {
889 assert(inFunctionScope() && "Can't get basic block at global scope!");
890
891 BasicBlock *BB = 0;
892
893 std::map<ValID, BasicBlock*>::iterator BBI = CurFun.BBForwardRefs.find(ID);
894 if (BBI != CurFun.BBForwardRefs.end()) {
895 BB = BBI->second;
896 } if (ID.Type == ValID::LocalName) {
897 std::string Name = ID.Name;
898 Value *N = CurFun.CurrentFunction->getValueSymbolTable().lookup(Name);
899 if (N)
900 if (N->getType()->getTypeID() == Type::LabelTyID)
901 BB = cast<BasicBlock>(N);
902 else
903 GenerateError("Reference to label '" + Name + "' is actually of type '"+
904 N->getType()->getDescription() + "'");
905 } else if (ID.Type == ValID::LocalID) {
906 if (ID.Num < CurFun.NextValNum && ID.Num < CurFun.Values.size()) {
907 if (CurFun.Values[ID.Num]->getType()->getTypeID() == Type::LabelTyID)
908 BB = cast<BasicBlock>(CurFun.Values[ID.Num]);
909 else
910 GenerateError("Reference to label '%" + utostr(ID.Num) +
911 "' is actually of type '"+
912 CurFun.Values[ID.Num]->getType()->getDescription() + "'");
913 }
914 } else {
915 GenerateError("Illegal label reference " + ID.getName());
916 return 0;
917 }
918
919 // If its already been defined, return it now.
920 if (BB) {
921 ID.destroy(); // Free strdup'd memory.
922 return BB;
923 }
924
925 // Otherwise, this block has not been seen before, create it.
926 std::string Name;
927 if (ID.Type == ValID::LocalName)
928 Name = ID.Name;
929 BB = new BasicBlock(Name, CurFun.CurrentFunction);
930
931 // Insert it in the forward refs map.
932 CurFun.BBForwardRefs[ID] = BB;
933
Reid Spencer68a24bd2005-08-27 18:50:39 +0000934 return BB;
935}
936
937
938//===----------------------------------------------------------------------===//
939// Code to handle forward references in instructions
940//===----------------------------------------------------------------------===//
941//
942// This code handles the late binding needed with statements that reference
943// values not defined yet... for example, a forward branch, or the PHI node for
944// a loop body.
945//
946// This keeps a table (CurFun.LateResolveValues) of all such forward references
947// and back patchs after we are done.
948//
949
950// ResolveDefinitions - If we could not resolve some defs at parsing
951// time (forward branches, phi functions for loops, etc...) resolve the
952// defs now...
953//
954static void
Reid Spencer93c40032007-03-19 18:40:50 +0000955ResolveDefinitions(ValueList &LateResolvers, ValueList *FutureLateResolvers) {
Reid Spencer68a24bd2005-08-27 18:50:39 +0000956 // Loop over LateResolveDefs fixing up stuff that couldn't be resolved
Reid Spencer93c40032007-03-19 18:40:50 +0000957 while (!LateResolvers.empty()) {
958 Value *V = LateResolvers.back();
959 LateResolvers.pop_back();
Reid Spencer68a24bd2005-08-27 18:50:39 +0000960
Reid Spencer93c40032007-03-19 18:40:50 +0000961 std::map<Value*, std::pair<ValID, int> >::iterator PHI =
962 CurModule.PlaceHolderInfo.find(V);
963 assert(PHI != CurModule.PlaceHolderInfo.end() && "Placeholder error!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000964
Reid Spencer93c40032007-03-19 18:40:50 +0000965 ValID &DID = PHI->second.first;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000966
Reid Spencer93c40032007-03-19 18:40:50 +0000967 Value *TheRealValue = getExistingVal(V->getType(), DID);
968 if (TriggerError)
969 return;
970 if (TheRealValue) {
971 V->replaceAllUsesWith(TheRealValue);
972 delete V;
973 CurModule.PlaceHolderInfo.erase(PHI);
974 } else if (FutureLateResolvers) {
975 // Functions have their unresolved items forwarded to the module late
976 // resolver table
977 InsertValue(V, *FutureLateResolvers);
978 } else {
979 if (DID.Type == ValID::LocalName || DID.Type == ValID::GlobalName) {
980 GenerateError("Reference to an invalid definition: '" +DID.getName()+
981 "' of type '" + V->getType()->getDescription() + "'",
982 PHI->second.second);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000983 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000984 } else {
Reid Spencer93c40032007-03-19 18:40:50 +0000985 GenerateError("Reference to an invalid definition: #" +
986 itostr(DID.Num) + " of type '" +
987 V->getType()->getDescription() + "'",
988 PHI->second.second);
989 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000990 }
991 }
992 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000993 LateResolvers.clear();
994}
995
996// ResolveTypeTo - A brand new type was just declared. This means that (if
997// name is not null) things referencing Name can be resolved. Otherwise, things
998// refering to the number can be resolved. Do this now.
999//
1000static void ResolveTypeTo(char *Name, const Type *ToTy) {
1001 ValID D;
Reid Spencer41dff5e2007-01-26 08:05:27 +00001002 if (Name) D = ValID::createLocalName(Name);
1003 else D = ValID::createLocalID(CurModule.Types.size());
Reid Spencer68a24bd2005-08-27 18:50:39 +00001004
Reid Spencer861d9d62006-11-28 07:29:44 +00001005 std::map<ValID, PATypeHolder>::iterator I =
Reid Spencer68a24bd2005-08-27 18:50:39 +00001006 CurModule.LateResolveTypes.find(D);
1007 if (I != CurModule.LateResolveTypes.end()) {
Reid Spencer861d9d62006-11-28 07:29:44 +00001008 ((DerivedType*)I->second.get())->refineAbstractTypeTo(ToTy);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001009 CurModule.LateResolveTypes.erase(I);
1010 }
1011}
1012
1013// setValueName - Set the specified value to the name given. The name may be
1014// null potentially, in which case this is a noop. The string passed in is
1015// assumed to be a malloc'd string buffer, and is free'd by this function.
1016//
1017static void setValueName(Value *V, char *NameStr) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00001018 if (!NameStr) return;
1019 std::string Name(NameStr); // Copy string
1020 free(NameStr); // Free old string
Reid Spencer68a24bd2005-08-27 18:50:39 +00001021
Reid Spencer41dff5e2007-01-26 08:05:27 +00001022 if (V->getType() == Type::VoidTy) {
Reid Spencerb5334b02007-02-05 10:18:06 +00001023 GenerateError("Can't assign name '" + Name+"' to value with void type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00001024 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001025 }
Reid Spencer41dff5e2007-01-26 08:05:27 +00001026
Reid Spencera9720f52007-02-05 17:04:00 +00001027 assert(inFunctionScope() && "Must be in function scope!");
Reid Spenceref9b9a72007-02-05 20:47:22 +00001028 ValueSymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable();
1029 if (ST.lookup(Name)) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00001030 GenerateError("Redefinition of value '" + Name + "' of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00001031 V->getType()->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00001032 return;
1033 }
1034
1035 // Set the name.
1036 V->setName(Name);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001037}
1038
1039/// ParseGlobalVariable - Handle parsing of a global. If Initializer is null,
1040/// this is a declaration, otherwise it is a definition.
Chris Lattnerb475c422005-11-12 18:22:38 +00001041static GlobalVariable *
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001042ParseGlobalVariable(char *NameStr,
1043 GlobalValue::LinkageTypes Linkage,
1044 GlobalValue::VisibilityTypes Visibility,
Chris Lattnerb475c422005-11-12 18:22:38 +00001045 bool isConstantGlobal, const Type *Ty,
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00001046 Constant *Initializer, bool IsThreadLocal) {
Reid Spencer5b7e7532006-09-28 19:28:24 +00001047 if (isa<FunctionType>(Ty)) {
Reid Spencerb5334b02007-02-05 10:18:06 +00001048 GenerateError("Cannot declare global vars of function type");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001049 return 0;
1050 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001051
1052 const PointerType *PTy = PointerType::get(Ty);
1053
1054 std::string Name;
1055 if (NameStr) {
1056 Name = NameStr; // Copy string
1057 free(NameStr); // Free old string
1058 }
1059
1060 // See if this global value was forward referenced. If so, recycle the
1061 // object.
1062 ValID ID;
1063 if (!Name.empty()) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00001064 ID = ValID::createGlobalName((char*)Name.c_str());
Reid Spencer68a24bd2005-08-27 18:50:39 +00001065 } else {
Reid Spencer93c40032007-03-19 18:40:50 +00001066 ID = ValID::createGlobalID(CurModule.Values.size());
Reid Spencer68a24bd2005-08-27 18:50:39 +00001067 }
1068
1069 if (GlobalValue *FWGV = CurModule.GetForwardRefForGlobal(PTy, ID)) {
1070 // Move the global to the end of the list, from whereever it was
1071 // previously inserted.
1072 GlobalVariable *GV = cast<GlobalVariable>(FWGV);
1073 CurModule.CurrentModule->getGlobalList().remove(GV);
1074 CurModule.CurrentModule->getGlobalList().push_back(GV);
1075 GV->setInitializer(Initializer);
1076 GV->setLinkage(Linkage);
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001077 GV->setVisibility(Visibility);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001078 GV->setConstant(isConstantGlobal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00001079 GV->setThreadLocal(IsThreadLocal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001080 InsertValue(GV, CurModule.Values);
Chris Lattnerb475c422005-11-12 18:22:38 +00001081 return GV;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001082 }
1083
Reid Spenceref9b9a72007-02-05 20:47:22 +00001084 // If this global has a name
Reid Spencer68a24bd2005-08-27 18:50:39 +00001085 if (!Name.empty()) {
Reid Spenceref9b9a72007-02-05 20:47:22 +00001086 // if the global we're parsing has an initializer (is a definition) and
1087 // has external linkage.
1088 if (Initializer && Linkage != GlobalValue::InternalLinkage)
1089 // If there is already a global with external linkage with this name
1090 if (CurModule.CurrentModule->getGlobalVariable(Name, false)) {
1091 // If we allow this GVar to get created, it will be renamed in the
1092 // symbol table because it conflicts with an existing GVar. We can't
1093 // allow redefinition of GVars whose linking indicates that their name
1094 // must stay the same. Issue the error.
1095 GenerateError("Redefinition of global variable named '" + Name +
1096 "' of type '" + Ty->getDescription() + "'");
1097 return 0;
1098 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001099 }
1100
1101 // Otherwise there is no existing GV to use, create one now.
1102 GlobalVariable *GV =
1103 new GlobalVariable(Ty, isConstantGlobal, Linkage, Initializer, Name,
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00001104 CurModule.CurrentModule, IsThreadLocal);
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001105 GV->setVisibility(Visibility);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001106 InsertValue(GV, CurModule.Values);
Chris Lattnerb475c422005-11-12 18:22:38 +00001107 return GV;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001108}
1109
1110// setTypeName - Set the specified type to the name given. The name may be
1111// null potentially, in which case this is a noop. The string passed in is
1112// assumed to be a malloc'd string buffer, and is freed by this function.
1113//
1114// This function returns true if the type has already been defined, but is
1115// allowed to be redefined in the specified context. If the name is a new name
1116// for the type plane, it is inserted and false is returned.
1117static bool setTypeName(const Type *T, char *NameStr) {
Reid Spencera9720f52007-02-05 17:04:00 +00001118 assert(!inFunctionScope() && "Can't give types function-local names!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00001119 if (NameStr == 0) return false;
1120
1121 std::string Name(NameStr); // Copy string
1122 free(NameStr); // Free old string
1123
1124 // We don't allow assigning names to void type
Reid Spencer5b7e7532006-09-28 19:28:24 +00001125 if (T == Type::VoidTy) {
Reid Spencerb5334b02007-02-05 10:18:06 +00001126 GenerateError("Can't assign name '" + Name + "' to the void type");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001127 return false;
1128 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001129
1130 // Set the type name, checking for conflicts as we do so.
1131 bool AlreadyExists = CurModule.CurrentModule->addTypeName(Name, T);
1132
1133 if (AlreadyExists) { // Inserting a name that is already defined???
1134 const Type *Existing = CurModule.CurrentModule->getTypeByName(Name);
Reid Spencera9720f52007-02-05 17:04:00 +00001135 assert(Existing && "Conflict but no matching type?!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00001136
1137 // There is only one case where this is allowed: when we are refining an
1138 // opaque type. In this case, Existing will be an opaque type.
1139 if (const OpaqueType *OpTy = dyn_cast<OpaqueType>(Existing)) {
1140 // We ARE replacing an opaque type!
1141 const_cast<OpaqueType*>(OpTy)->refineAbstractTypeTo(T);
1142 return true;
1143 }
1144
1145 // Otherwise, this is an attempt to redefine a type. That's okay if
1146 // the redefinition is identical to the original. This will be so if
1147 // Existing and T point to the same Type object. In this one case we
1148 // allow the equivalent redefinition.
1149 if (Existing == T) return true; // Yes, it's equal.
1150
1151 // Any other kind of (non-equivalent) redefinition is an error.
Reid Spencer63c34452007-01-05 21:51:07 +00001152 GenerateError("Redefinition of type named '" + Name + "' of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00001153 T->getDescription() + "'");
Reid Spencer68a24bd2005-08-27 18:50:39 +00001154 }
1155
1156 return false;
1157}
1158
1159//===----------------------------------------------------------------------===//
1160// Code for handling upreferences in type names...
1161//
1162
1163// TypeContains - Returns true if Ty directly contains E in it.
1164//
1165static bool TypeContains(const Type *Ty, const Type *E) {
1166 return std::find(Ty->subtype_begin(), Ty->subtype_end(),
1167 E) != Ty->subtype_end();
1168}
1169
1170namespace {
1171 struct UpRefRecord {
1172 // NestingLevel - The number of nesting levels that need to be popped before
1173 // this type is resolved.
1174 unsigned NestingLevel;
1175
1176 // LastContainedTy - This is the type at the current binding level for the
1177 // type. Every time we reduce the nesting level, this gets updated.
1178 const Type *LastContainedTy;
1179
1180 // UpRefTy - This is the actual opaque type that the upreference is
1181 // represented with.
1182 OpaqueType *UpRefTy;
1183
1184 UpRefRecord(unsigned NL, OpaqueType *URTy)
1185 : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) {}
1186 };
1187}
1188
1189// UpRefs - A list of the outstanding upreferences that need to be resolved.
1190static std::vector<UpRefRecord> UpRefs;
1191
1192/// HandleUpRefs - Every time we finish a new layer of types, this function is
1193/// called. It loops through the UpRefs vector, which is a list of the
1194/// currently active types. For each type, if the up reference is contained in
1195/// the newly completed type, we decrement the level count. When the level
1196/// count reaches zero, the upreferenced type is the type that is passed in:
1197/// thus we can complete the cycle.
1198///
1199static PATypeHolder HandleUpRefs(const Type *ty) {
Chris Lattner224f84f2006-08-18 17:34:45 +00001200 // If Ty isn't abstract, or if there are no up-references in it, then there is
1201 // nothing to resolve here.
1202 if (!ty->isAbstract() || UpRefs.empty()) return ty;
1203
Reid Spencer68a24bd2005-08-27 18:50:39 +00001204 PATypeHolder Ty(ty);
1205 UR_OUT("Type '" << Ty->getDescription() <<
1206 "' newly formed. Resolving upreferences.\n" <<
1207 UpRefs.size() << " upreferences active!\n");
1208
1209 // If we find any resolvable upreferences (i.e., those whose NestingLevel goes
1210 // to zero), we resolve them all together before we resolve them to Ty. At
1211 // the end of the loop, if there is anything to resolve to Ty, it will be in
1212 // this variable.
1213 OpaqueType *TypeToResolve = 0;
1214
1215 for (unsigned i = 0; i != UpRefs.size(); ++i) {
1216 UR_OUT(" UR#" << i << " - TypeContains(" << Ty->getDescription() << ", "
1217 << UpRefs[i].second->getDescription() << ") = "
1218 << (TypeContains(Ty, UpRefs[i].second) ? "true" : "false") << "\n");
1219 if (TypeContains(Ty, UpRefs[i].LastContainedTy)) {
1220 // Decrement level of upreference
1221 unsigned Level = --UpRefs[i].NestingLevel;
1222 UpRefs[i].LastContainedTy = Ty;
1223 UR_OUT(" Uplevel Ref Level = " << Level << "\n");
1224 if (Level == 0) { // Upreference should be resolved!
1225 if (!TypeToResolve) {
1226 TypeToResolve = UpRefs[i].UpRefTy;
1227 } else {
1228 UR_OUT(" * Resolving upreference for "
1229 << UpRefs[i].second->getDescription() << "\n";
1230 std::string OldName = UpRefs[i].UpRefTy->getDescription());
1231 UpRefs[i].UpRefTy->refineAbstractTypeTo(TypeToResolve);
1232 UR_OUT(" * Type '" << OldName << "' refined upreference to: "
1233 << (const void*)Ty << ", " << Ty->getDescription() << "\n");
1234 }
1235 UpRefs.erase(UpRefs.begin()+i); // Remove from upreference list...
1236 --i; // Do not skip the next element...
1237 }
1238 }
1239 }
1240
1241 if (TypeToResolve) {
1242 UR_OUT(" * Resolving upreference for "
1243 << UpRefs[i].second->getDescription() << "\n";
1244 std::string OldName = TypeToResolve->getDescription());
1245 TypeToResolve->refineAbstractTypeTo(Ty);
1246 }
1247
1248 return Ty;
1249}
1250
Reid Spencer68a24bd2005-08-27 18:50:39 +00001251//===----------------------------------------------------------------------===//
1252// RunVMAsmParser - Define an interface to this parser
1253//===----------------------------------------------------------------------===//
1254//
Reid Spencer14310612006-12-31 05:40:51 +00001255static Module* RunParser(Module * M);
1256
Reid Spencer68a24bd2005-08-27 18:50:39 +00001257Module *llvm::RunVMAsmParser(const std::string &Filename, FILE *F) {
1258 set_scan_file(F);
1259
1260 CurFilename = Filename;
1261 return RunParser(new Module(CurFilename));
1262}
1263
1264Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) {
1265 set_scan_string(AsmString);
1266
1267 CurFilename = "from_memory";
1268 if (M == NULL) {
1269 return RunParser(new Module (CurFilename));
1270 } else {
1271 return RunParser(M);
1272 }
1273}
1274
1275
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001276
1277/* Enabling traces. */
1278#ifndef YYDEBUG
1279# define YYDEBUG 0
1280#endif
1281
1282/* Enabling verbose error messages. */
1283#ifdef YYERROR_VERBOSE
1284# undef YYERROR_VERBOSE
1285# define YYERROR_VERBOSE 1
1286#else
1287# define YYERROR_VERBOSE 0
1288#endif
1289
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001290#ifndef YYSTYPE
1291#line 955 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
1292typedef union {
Reid Spencer68a24bd2005-08-27 18:50:39 +00001293 llvm::Module *ModuleVal;
1294 llvm::Function *FunctionVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001295 llvm::BasicBlock *BasicBlockVal;
1296 llvm::TerminatorInst *TermInstVal;
1297 llvm::Instruction *InstVal;
Reid Spencera132e042006-12-03 05:46:11 +00001298 llvm::Constant *ConstVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001299
Reid Spencera132e042006-12-03 05:46:11 +00001300 const llvm::Type *PrimType;
Reid Spencer14310612006-12-31 05:40:51 +00001301 std::list<llvm::PATypeHolder> *TypeList;
Reid Spencera132e042006-12-03 05:46:11 +00001302 llvm::PATypeHolder *TypeVal;
1303 llvm::Value *ValueVal;
Reid Spencera132e042006-12-03 05:46:11 +00001304 std::vector<llvm::Value*> *ValueList;
Reid Spencer14310612006-12-31 05:40:51 +00001305 llvm::ArgListType *ArgList;
1306 llvm::TypeWithAttrs TypeWithAttrs;
1307 llvm::TypeWithAttrsList *TypeWithAttrsList;
1308 llvm::ValueRefList *ValueRefList;
1309
Reid Spencer68a24bd2005-08-27 18:50:39 +00001310 // Represent the RHS of PHI node
Reid Spencera132e042006-12-03 05:46:11 +00001311 std::list<std::pair<llvm::Value*,
1312 llvm::BasicBlock*> > *PHIList;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001313 std::vector<std::pair<llvm::Constant*, llvm::BasicBlock*> > *JumpTable;
Reid Spencera132e042006-12-03 05:46:11 +00001314 std::vector<llvm::Constant*> *ConstVector;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001315
1316 llvm::GlobalValue::LinkageTypes Linkage;
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001317 llvm::GlobalValue::VisibilityTypes Visibility;
Reid Spencer7b5d4662007-04-09 06:16:21 +00001318 uint16_t ParamAttrs;
Reid Spencer38c91a92007-02-28 02:24:54 +00001319 llvm::APInt *APIntVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001320 int64_t SInt64Val;
1321 uint64_t UInt64Val;
1322 int SIntVal;
1323 unsigned UIntVal;
1324 double FPVal;
1325 bool BoolVal;
1326
1327 char *StrVal; // This memory is strdup'd!
Reid Spencer1628cec2006-10-26 06:15:43 +00001328 llvm::ValID ValIDVal; // strdup'd memory maybe!
Reid Spencer68a24bd2005-08-27 18:50:39 +00001329
Reid Spencera132e042006-12-03 05:46:11 +00001330 llvm::Instruction::BinaryOps BinaryOpVal;
1331 llvm::Instruction::TermOps TermOpVal;
1332 llvm::Instruction::MemoryOps MemOpVal;
1333 llvm::Instruction::CastOps CastOpVal;
1334 llvm::Instruction::OtherOps OtherOpVal;
Reid Spencera132e042006-12-03 05:46:11 +00001335 llvm::ICmpInst::Predicate IPredicate;
1336 llvm::FCmpInst::Predicate FPredicate;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001337} yystype;
1338/* Line 188 of /usr/local/share/bison/yacc.c. */
1339#line 1340 "llvmAsmParser.tab.c"
1340# define YYSTYPE yystype
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001341# define YYSTYPE_IS_TRIVIAL 1
Reid Spencer68a24bd2005-08-27 18:50:39 +00001342#endif
1343
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001344#ifndef YYLTYPE
1345typedef struct yyltype
1346{
1347 int first_line;
1348 int first_column;
1349 int last_line;
1350 int last_column;
1351} yyltype;
1352# define YYLTYPE yyltype
1353# define YYLTYPE_IS_TRIVIAL 1
1354#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00001355
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001356/* Copy the second part of user declarations. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00001357
1358
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001359/* Line 213 of /usr/local/share/bison/yacc.c. */
1360#line 1361 "llvmAsmParser.tab.c"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001361
Reid Spencer9c9b63a2007-04-28 16:07:31 +00001362#if ! defined (yyoverflow) || YYERROR_VERBOSE
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001363
1364/* The parser invokes alloca or malloc; define the necessary symbols. */
1365
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001366# if YYSTACK_USE_ALLOCA
1367# define YYSTACK_ALLOC alloca
1368# else
1369# ifndef YYSTACK_USE_ALLOCA
1370# if defined (alloca) || defined (_ALLOCA_H)
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001371# define YYSTACK_ALLOC alloca
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001372# else
1373# ifdef __GNUC__
1374# define YYSTACK_ALLOC __builtin_alloca
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001375# endif
1376# endif
1377# endif
1378# endif
1379
1380# ifdef YYSTACK_ALLOC
Reid Spencer9c9b63a2007-04-28 16:07:31 +00001381 /* Pacify GCC's `empty if-body' warning. */
1382# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001383# else
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001384# if defined (__STDC__) || defined (__cplusplus)
1385# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1386# define YYSIZE_T size_t
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001387# endif
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001388# define YYSTACK_ALLOC malloc
1389# define YYSTACK_FREE free
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001390# endif
Reid Spencer9c9b63a2007-04-28 16:07:31 +00001391#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001392
1393
Reid Spencer9c9b63a2007-04-28 16:07:31 +00001394#if (! defined (yyoverflow) \
1395 && (! defined (__cplusplus) \
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001396 || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001397
1398/* A type that is properly aligned for any stack member. */
1399union yyalloc
1400{
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001401 short yyss;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001402 YYSTYPE yyvs;
1403 };
1404
1405/* The size of the maximum gap between one aligned stack and the next. */
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001406# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001407
1408/* The size of an array large to enough to hold all stacks, each with
1409 N elements. */
1410# define YYSTACK_BYTES(N) \
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001411 ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
1412 + YYSTACK_GAP_MAX)
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001413
1414/* Copy COUNT objects from FROM to TO. The source and destination do
1415 not overlap. */
1416# ifndef YYCOPY
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001417# if 1 < __GNUC__
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001418# define YYCOPY(To, From, Count) \
1419 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
1420# else
1421# define YYCOPY(To, From, Count) \
1422 do \
1423 { \
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001424 register YYSIZE_T yyi; \
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001425 for (yyi = 0; yyi < (Count); yyi++) \
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001426 (To)[yyi] = (From)[yyi]; \
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001427 } \
Reid Spencer9c9b63a2007-04-28 16:07:31 +00001428 while (0)
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001429# endif
1430# endif
1431
1432/* Relocate STACK from its old location to the new one. The
1433 local variables YYSIZE and YYSTACKSIZE give the old and new number of
1434 elements in the stack, and YYPTR gives the new location of the
1435 stack. Advance YYPTR to a properly aligned location for the next
1436 stack. */
1437# define YYSTACK_RELOCATE(Stack) \
1438 do \
1439 { \
1440 YYSIZE_T yynewbytes; \
1441 YYCOPY (&yyptr->Stack, Stack, yysize); \
1442 Stack = &yyptr->Stack; \
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001443 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001444 yyptr += yynewbytes / sizeof (*yyptr); \
1445 } \
Reid Spencer9c9b63a2007-04-28 16:07:31 +00001446 while (0)
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001447
1448#endif
1449
Reid Spencer9c9b63a2007-04-28 16:07:31 +00001450#if defined (__STDC__) || defined (__cplusplus)
1451 typedef signed char yysigned_char;
1452#else
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001453 typedef short yysigned_char;
Reid Spencer9c9b63a2007-04-28 16:07:31 +00001454#endif
1455
1456/* YYFINAL -- State number of the termination state. */
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001457#define YYFINAL 41
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001458#define YYLAST 1600
1459
Reid Spencer9c9b63a2007-04-28 16:07:31 +00001460/* YYNTOKENS -- Number of terminals. */
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001461#define YYNTOKENS 150
Reid Spencer9c9b63a2007-04-28 16:07:31 +00001462/* YYNNTS -- Number of nonterminals. */
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001463#define YYNNTS 82
Reid Spencer9c9b63a2007-04-28 16:07:31 +00001464/* YYNRULES -- Number of rules. */
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001465#define YYNRULES 296
Reid Spencer9c9b63a2007-04-28 16:07:31 +00001466/* YYNRULES -- Number of states. */
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001467#define YYNSTATES 580
1468
1469/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
1470#define YYUNDEFTOK 2
1471#define YYMAXUTOK 390
1472
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001473#define YYTRANSLATE(X) \
1474 ((unsigned)(X) <= YYMAXUTOK ? yytranslate[X] : YYUNDEFTOK)
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001475
1476/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
Reid Spencer9c9b63a2007-04-28 16:07:31 +00001477static const unsigned char yytranslate[] =
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001478{
1479 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1480 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1481 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1482 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1483 140, 141, 138, 2, 137, 2, 2, 2, 2, 2,
1484 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1485 145, 136, 146, 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, 142, 139, 144, 2, 2, 2, 2, 2, 149,
1489 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1490 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1491 143, 2, 2, 147, 2, 148, 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, 2, 2, 2, 2,
1497 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1498 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1499 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1500 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1501 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1502 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1503 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1504 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
1505 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1506 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1507 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1508 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1509 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
1510 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1511 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
1512 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
1513 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
1514 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
1515 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
1516 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
1517 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
1518 135
1519};
1520
1521#if YYDEBUG
1522/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
1523 YYRHS. */
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001524static const unsigned short yyprhs[] =
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001525{
1526 0, 0, 3, 5, 7, 9, 11, 13, 15, 17,
1527 19, 21, 23, 25, 27, 29, 31, 33, 35, 37,
1528 39, 41, 43, 45, 47, 49, 51, 53, 55, 57,
1529 59, 61, 63, 65, 67, 69, 71, 73, 75, 77,
1530 79, 81, 83, 85, 87, 89, 91, 93, 95, 97,
1531 99, 101, 103, 105, 107, 109, 111, 113, 115, 117,
1532 119, 121, 122, 125, 126, 128, 130, 132, 133, 136,
1533 138, 140, 142, 144, 146, 148, 150, 152, 153, 155,
1534 157, 158, 160, 162, 163, 165, 167, 169, 171, 172,
1535 174, 176, 177, 179, 181, 183, 185, 187, 190, 192,
1536 194, 196, 198, 199, 202, 204, 206, 208, 209, 212,
1537 213, 216, 217, 221, 224, 225, 227, 228, 232, 234,
1538 237, 239, 241, 243, 245, 247, 249, 252, 254, 257,
1539 263, 269, 275, 281, 285, 288, 294, 299, 302, 304,
1540 306, 308, 312, 314, 318, 320, 321, 323, 327, 332,
1541 336, 340, 345, 350, 354, 361, 367, 370, 373, 376,
1542 379, 382, 385, 388, 391, 394, 397, 400, 403, 410,
1543 416, 425, 432, 439, 447, 455, 462, 471, 480, 484,
1544 486, 488, 490, 492, 493, 496, 503, 505, 506, 508,
1545 511, 512, 516, 517, 521, 525, 529, 533, 534, 542,
1546 543, 552, 553, 562, 568, 571, 575, 577, 581, 585,
1547 589, 593, 595, 596, 602, 606, 608, 612, 614, 615,
1548 625, 627, 629, 634, 636, 638, 641, 645, 646, 648,
1549 650, 652, 654, 656, 658, 660, 662, 664, 668, 670,
1550 676, 678, 680, 682, 684, 686, 688, 691, 694, 697,
1551 701, 704, 705, 707, 710, 713, 717, 727, 737, 746,
1552 761, 763, 765, 772, 778, 781, 788, 796, 800, 806,
1553 807, 808, 812, 815, 817, 823, 829, 836, 843, 848,
1554 855, 860, 865, 872, 879, 882, 891, 893, 895, 896,
1555 900, 907, 911, 918, 921, 927, 935
1556};
1557
Reid Spencer9c9b63a2007-04-28 16:07:31 +00001558/* YYRHS -- A `-1'-separated list of the rules' RHS. */
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001559static const short yyrhs[] =
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001560{
1561 194, 0, -1, 69, -1, 70, -1, 71, -1, 72,
1562 -1, 73, -1, 74, -1, 75, -1, 76, -1, 77,
1563 -1, 81, -1, 82, -1, 83, -1, 78, -1, 79,
1564 -1, 80, -1, 112, -1, 113, -1, 114, -1, 115,
1565 -1, 116, -1, 117, -1, 118, -1, 119, -1, 120,
1566 -1, 121, -1, 122, -1, 123, -1, 86, -1, 87,
1567 -1, 88, -1, 89, -1, 90, -1, 91, -1, 92,
1568 -1, 93, -1, 94, -1, 95, -1, 96, -1, 97,
1569 -1, 98, -1, 99, -1, 100, -1, 101, -1, 102,
1570 -1, 103, -1, 104, -1, 105, -1, 92, -1, 93,
1571 -1, 94, -1, 95, -1, 22, -1, 23, -1, 11,
1572 -1, 12, -1, 13, -1, 16, -1, 19, -1, 158,
1573 -1, -1, 158, 136, -1, -1, 17, -1, 20, -1,
1574 163, -1, -1, 161, 136, -1, 38, -1, 40, -1,
1575 39, -1, 41, -1, 43, -1, 42, -1, 44, -1,
1576 46, -1, -1, 134, -1, 135, -1, -1, 42, -1,
1577 44, -1, -1, 38, -1, 39, -1, 40, -1, 43,
1578 -1, -1, 40, -1, 38, -1, -1, 57, -1, 58,
1579 -1, 59, -1, 60, -1, 61, -1, 56, 4, -1,
1580 113, -1, 114, -1, 131, -1, 132, -1, -1, 172,
1581 171, -1, 130, -1, 133, -1, 171, -1, -1, 174,
1582 173, -1, -1, 49, 4, -1, -1, 137, 49, 4,
1583 -1, 30, 19, -1, -1, 177, -1, -1, 137, 180,
1584 179, -1, 177, -1, 49, 4, -1, 11, -1, 12,
1585 -1, 13, -1, 14, -1, 45, -1, 181, -1, 182,
1586 138, -1, 216, -1, 139, 4, -1, 182, 140, 186,
1587 141, 174, -1, 10, 140, 186, 141, 174, -1, 142,
1588 4, 143, 182, 144, -1, 145, 4, 143, 182, 146,
1589 -1, 147, 187, 148, -1, 147, 148, -1, 145, 147,
1590 187, 148, 146, -1, 145, 147, 148, 146, -1, 182,
1591 172, -1, 182, -1, 10, -1, 183, -1, 185, 137,
1592 183, -1, 185, -1, 185, 137, 35, -1, 35, -1,
1593 -1, 182, -1, 187, 137, 182, -1, 182, 142, 190,
1594 144, -1, 182, 142, 144, -1, 182, 149, 19, -1,
1595 182, 145, 190, 146, -1, 182, 147, 190, 148, -1,
1596 182, 147, 148, -1, 182, 145, 147, 190, 148, 146,
1597 -1, 182, 145, 147, 148, 146, -1, 182, 36, -1,
1598 182, 37, -1, 182, 216, -1, 182, 189, -1, 182,
1599 21, -1, 156, 3, -1, 156, 5, -1, 156, 4,
1600 -1, 156, 6, -1, 11, 22, -1, 11, 23, -1,
1601 157, 9, -1, 153, 140, 188, 34, 182, 141, -1,
1602 111, 140, 188, 227, 141, -1, 125, 140, 188, 137,
1603 188, 137, 188, 141, -1, 151, 140, 188, 137, 188,
1604 141, -1, 152, 140, 188, 137, 188, 141, -1, 84,
1605 154, 140, 188, 137, 188, 141, -1, 85, 155, 140,
1606 188, 137, 188, 141, -1, 127, 140, 188, 137, 188,
1607 141, -1, 128, 140, 188, 137, 188, 137, 188, 141,
1608 -1, 129, 140, 188, 137, 188, 137, 188, 141, -1,
1609 190, 137, 188, -1, 188, -1, 28, -1, 29, -1,
1610 33, -1, -1, 184, 216, -1, 117, 140, 193, 34,
1611 182, 141, -1, 195, -1, -1, 196, -1, 195, 196,
1612 -1, -1, 27, 197, 212, -1, -1, 26, 198, 213,
1613 -1, 54, 53, 202, -1, 160, 15, 182, -1, 160,
1614 15, 10, -1, -1, 162, 166, 192, 191, 188, 199,
1615 179, -1, -1, 162, 164, 166, 192, 191, 188, 200,
1616 179, -1, -1, 162, 165, 166, 192, 191, 182, 201,
1617 179, -1, 162, 166, 31, 169, 193, -1, 47, 203,
1618 -1, 50, 136, 204, -1, 19, -1, 48, 136, 19,
1619 -1, 62, 136, 19, -1, 142, 205, 144, -1, 205,
1620 137, 19, -1, 19, -1, -1, 206, 137, 182, 172,
1621 159, -1, 182, 172, 159, -1, 206, -1, 206, 137,
1622 35, -1, 35, -1, -1, 170, 184, 161, 140, 207,
1623 141, 174, 178, 175, -1, 24, -1, 147, -1, 168,
1624 166, 208, 209, -1, 25, -1, 148, -1, 219, 211,
1625 -1, 167, 166, 208, -1, -1, 55, -1, 3, -1,
1626 4, -1, 9, -1, 22, -1, 23, -1, 36, -1,
1627 37, -1, 21, -1, 145, 190, 146, -1, 189, -1,
1628 53, 214, 19, 137, 19, -1, 7, -1, 8, -1,
1629 158, -1, 161, -1, 216, -1, 215, -1, 182, 217,
1630 -1, 219, 220, -1, 210, 220, -1, 221, 160, 222,
1631 -1, 221, 224, -1, -1, 18, -1, 63, 218, -1,
1632 63, 10, -1, 64, 14, 217, -1, 64, 11, 217,
1633 137, 14, 217, 137, 14, 217, -1, 65, 156, 217,
1634 137, 14, 217, 142, 223, 144, -1, 65, 156, 217,
1635 137, 14, 217, 142, 144, -1, 66, 170, 184, 217,
1636 140, 226, 141, 174, 34, 14, 217, 67, 14, 217,
1637 -1, 67, -1, 68, -1, 223, 156, 215, 137, 14,
1638 217, -1, 156, 215, 137, 14, 217, -1, 160, 229,
1639 -1, 182, 142, 217, 137, 217, 144, -1, 225, 137,
1640 142, 217, 137, 217, 144, -1, 182, 217, 172, -1,
1641 226, 137, 182, 217, 172, -1, -1, -1, 227, 137,
1642 218, -1, 52, 51, -1, 51, -1, 151, 182, 217,
1643 137, 217, -1, 152, 182, 217, 137, 217, -1, 84,
1644 154, 182, 217, 137, 217, -1, 85, 155, 182, 217,
1645 137, 217, -1, 153, 218, 34, 182, -1, 125, 218,
1646 137, 218, 137, 218, -1, 126, 218, 137, 182, -1,
1647 127, 218, 137, 218, -1, 128, 218, 137, 218, 137,
1648 218, -1, 129, 218, 137, 218, 137, 218, -1, 124,
1649 225, -1, 228, 170, 184, 217, 140, 226, 141, 174,
1650 -1, 231, -1, 32, -1, -1, 106, 182, 176, -1,
1651 106, 182, 137, 11, 217, 176, -1, 107, 182, 176,
1652 -1, 107, 182, 137, 11, 217, 176, -1, 108, 218,
1653 -1, 230, 109, 182, 217, 176, -1, 230, 110, 218,
1654 137, 182, 217, 176, -1, 111, 182, 217, 227, -1
1655};
1656
1657/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001658static const unsigned short yyrline[] =
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001659{
Reid Spencer9c9b63a2007-04-28 16:07:31 +00001660 0, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111,
1661 1111, 1112, 1112, 1112, 1112, 1112, 1112, 1113, 1113, 1113,
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001662 1113, 1113, 1113, 1113, 1114, 1114, 1114, 1114, 1114, 1117,
Reid Spencer9c9b63a2007-04-28 16:07:31 +00001663 1117, 1118, 1118, 1119, 1119, 1120, 1120, 1121, 1121, 1125,
1664 1125, 1126, 1126, 1127, 1127, 1128, 1128, 1129, 1129, 1130,
1665 1130, 1131, 1131, 1132, 1133, 1138, 1139, 1139, 1141, 1141,
1666 1142, 1142, 1146, 1150, 1155, 1155, 1157, 1158, 1163, 1169,
1667 1170, 1171, 1172, 1173, 1177, 1178, 1179, 1183, 1184, 1185,
1668 1189, 1190, 1191, 1195, 1196, 1197, 1198, 1199, 1203, 1204,
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001669 1205, 1208, 1208, 1209, 1210, 1211, 1212, 1213, 1221, 1222,
Reid Spencer9c9b63a2007-04-28 16:07:31 +00001670 1223, 1224, 1227, 1228, 1233, 1234, 1235, 1238, 1239, 1246,
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001671 1246, 1253, 1253, 1262, 1270, 1270, 1276, 1276, 1278, 1283,
Reid Spencer9c9b63a2007-04-28 16:07:31 +00001672 1296, 1296, 1296, 1296, 1299, 1303, 1307, 1314, 1319, 1327,
1673 1357, 1388, 1393, 1405, 1415, 1419, 1429, 1436, 1443, 1450,
1674 1455, 1460, 1467, 1468, 1475, 1482, 1490, 1496, 1508, 1536,
1675 1552, 1581, 1609, 1635, 1655, 1681, 1701, 1713, 1720, 1786,
1676 1796, 1806, 1812, 1822, 1828, 1838, 1843, 1848, 1856, 1868,
1677 1890, 1898, 1904, 1915, 1920, 1925, 1931, 1937, 1946, 1950,
1678 1958, 1958, 1961, 1961, 1964, 1975, 1996, 2001, 2009, 2010,
1679 2014, 2014, 2018, 2018, 2021, 2024, 2048, 2059, 2059, 2070,
1680 2069, 2079, 2078, 2089, 2104, 2107, 2113, 2126, 2130, 2135,
1681 2137, 2142, 2147, 2156, 2166, 2177, 2181, 2190, 2199, 2204,
1682 2326, 2326, 2328, 2337, 2337, 2339, 2344, 2356, 2360, 2365,
1683 2369, 2373, 2377, 2381, 2385, 2389, 2393, 2397, 2422, 2426,
1684 2440, 2444, 2448, 2452, 2458, 2458, 2464, 2473, 2477, 2486,
1685 2495, 2504, 2508, 2513, 2517, 2521, 2526, 2536, 2555, 2564,
1686 2644, 2648, 2655, 2666, 2679, 2689, 2700, 2710, 2719, 2728,
1687 2731, 2732, 2739, 2743, 2748, 2769, 2786, 2800, 2814, 2826,
1688 2834, 2841, 2847, 2853, 2859, 2874, 2959, 2964, 2968, 2975,
1689 2982, 2990, 2997, 3005, 3013, 3027, 3044
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001690};
1691#endif
1692
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001693#if YYDEBUG || YYERROR_VERBOSE
1694/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
Reid Spencer9c9b63a2007-04-28 16:07:31 +00001695 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001696static const char *const yytname[] =
1697{
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001698 "$end", "error", "$undefined", "ESINT64VAL", "EUINT64VAL", "ESAPINTVAL",
1699 "EUAPINTVAL", "LOCALVAL_ID", "GLOBALVAL_ID", "FPVAL", "VOID", "INTTYPE",
1700 "FLOAT", "DOUBLE", "LABEL", "TYPE", "LOCALVAR", "GLOBALVAR", "LABELSTR",
1701 "STRINGCONSTANT", "ATSTRINGCONSTANT", "ZEROINITIALIZER", "TRUETOK",
1702 "FALSETOK", "BEGINTOK", "ENDTOK", "DECLARE", "DEFINE", "GLOBAL",
1703 "CONSTANT", "SECTION", "ALIAS", "VOLATILE", "THREAD_LOCAL", "TO",
1704 "DOTDOTDOT", "NULL_TOK", "UNDEF", "INTERNAL", "LINKONCE", "WEAK",
1705 "APPENDING", "DLLIMPORT", "DLLEXPORT", "EXTERN_WEAK", "OPAQUE",
1706 "EXTERNAL", "TARGET", "TRIPLE", "ALIGN", "DEPLIBS", "CALL", "TAIL",
1707 "ASM_TOK", "MODULE", "SIDEEFFECT", "CC_TOK", "CCC_TOK", "FASTCC_TOK",
1708 "COLDCC_TOK", "X86_STDCALLCC_TOK", "X86_FASTCALLCC_TOK", "DATALAYOUT",
1709 "RET", "BR", "SWITCH", "INVOKE", "UNWIND", "UNREACHABLE", "ADD", "SUB",
1710 "MUL", "UDIV", "SDIV", "FDIV", "UREM", "SREM", "FREM", "AND", "OR",
1711 "XOR", "SHL", "LSHR", "ASHR", "ICMP", "FCMP", "EQ", "NE", "SLT", "SGT",
1712 "SLE", "SGE", "ULT", "UGT", "ULE", "UGE", "OEQ", "ONE", "OLT", "OGT",
1713 "OLE", "OGE", "ORD", "UNO", "UEQ", "UNE", "MALLOC", "ALLOCA", "FREE",
1714 "LOAD", "STORE", "GETELEMENTPTR", "TRUNC", "ZEXT", "SEXT", "FPTRUNC",
1715 "FPEXT", "BITCAST", "UITOFP", "SITOFP", "FPTOUI", "FPTOSI", "INTTOPTR",
1716 "PTRTOINT", "PHI_TOK", "SELECT", "VAARG", "EXTRACTELEMENT",
1717 "INSERTELEMENT", "SHUFFLEVECTOR", "NORETURN", "INREG", "SRET",
1718 "NOUNWIND", "DEFAULT", "HIDDEN", "'='", "','", "'*'", "'\\\\'", "'('",
1719 "')'", "'['", "'x'", "']'", "'<'", "'>'", "'{'", "'}'", "'c'",
1720 "$accept", "ArithmeticOps", "LogicalOps", "CastOps", "IPredicates",
1721 "FPredicates", "IntType", "FPType", "LocalName", "OptLocalName",
1722 "OptLocalAssign", "GlobalName", "OptGlobalAssign", "GlobalAssign",
1723 "GVInternalLinkage", "GVExternalLinkage", "GVVisibilityStyle",
1724 "FunctionDeclareLinkage", "FunctionDefineLinkage", "AliasLinkage",
1725 "OptCallingConv", "ParamAttr", "OptParamAttrs", "FuncAttr",
1726 "OptFuncAttrs", "OptAlign", "OptCAlign", "SectionString", "OptSection",
1727 "GlobalVarAttributes", "GlobalVarAttribute", "PrimType", "Types",
1728 "ArgType", "ResultTypes", "ArgTypeList", "ArgTypeListI", "TypeListI",
1729 "ConstVal", "ConstExpr", "ConstVector", "GlobalType", "ThreadLocal",
1730 "AliaseeRef", "Module", "DefinitionList", "Definition", "@1", "@2",
1731 "@3", "@4", "@5", "AsmBlock", "TargetDefinition", "LibrariesDefinition",
1732 "LibList", "ArgListH", "ArgList", "FunctionHeaderH", "BEGIN",
1733 "FunctionHeader", "END", "Function", "FunctionProto", "OptSideEffect",
1734 "ConstValueRef", "SymbolicValueRef", "ValueRef", "ResolvedVal",
1735 "BasicBlockList", "BasicBlock", "InstructionList", "BBTerminatorInst",
1736 "JumpTable", "Inst", "PHIList", "ValueRefList", "IndexList",
1737 "OptTailCall", "InstVal", "OptVolatile", "MemoryInst", 0
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001738};
1739#endif
1740
1741# ifdef YYPRINT
1742/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
1743 token YYLEX-NUM. */
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001744static const unsigned short yytoknum[] =
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001745{
1746 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
1747 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
1748 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
1749 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
1750 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
1751 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
1752 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
1753 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
1754 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
1755 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
1756 355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
1757 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
1758 375, 376, 377, 378, 379, 380, 381, 382, 383, 384,
1759 385, 386, 387, 388, 389, 390, 61, 44, 42, 92,
1760 40, 41, 91, 120, 93, 60, 62, 123, 125, 99
1761};
1762# endif
1763
1764/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
Reid Spencer9c9b63a2007-04-28 16:07:31 +00001765static const unsigned char yyr1[] =
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001766{
1767 0, 150, 151, 151, 151, 151, 151, 151, 151, 151,
1768 151, 152, 152, 152, 152, 152, 152, 153, 153, 153,
1769 153, 153, 153, 153, 153, 153, 153, 153, 153, 154,
1770 154, 154, 154, 154, 154, 154, 154, 154, 154, 155,
1771 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
1772 155, 155, 155, 155, 155, 156, 157, 157, 158, 158,
1773 159, 159, 160, 160, 161, 161, 162, 162, 163, 164,
1774 164, 164, 164, 164, 165, 165, 165, 166, 166, 166,
1775 167, 167, 167, 168, 168, 168, 168, 168, 169, 169,
1776 169, 170, 170, 170, 170, 170, 170, 170, 171, 171,
1777 171, 171, 172, 172, 173, 173, 173, 174, 174, 175,
1778 175, 176, 176, 177, 178, 178, 179, 179, 180, 180,
1779 181, 181, 181, 181, 182, 182, 182, 182, 182, 182,
1780 182, 182, 182, 182, 182, 182, 182, 183, 184, 184,
1781 185, 185, 186, 186, 186, 186, 187, 187, 188, 188,
1782 188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
1783 188, 188, 188, 188, 188, 188, 188, 188, 189, 189,
1784 189, 189, 189, 189, 189, 189, 189, 189, 190, 190,
1785 191, 191, 192, 192, 193, 193, 194, 194, 195, 195,
1786 197, 196, 198, 196, 196, 196, 196, 199, 196, 200,
1787 196, 201, 196, 196, 196, 196, 202, 203, 203, 204,
1788 205, 205, 205, 206, 206, 207, 207, 207, 207, 208,
1789 209, 209, 210, 211, 211, 212, 213, 214, 214, 215,
1790 215, 215, 215, 215, 215, 215, 215, 215, 215, 215,
1791 216, 216, 216, 216, 217, 217, 218, 219, 219, 220,
1792 221, 221, 221, 222, 222, 222, 222, 222, 222, 222,
1793 222, 222, 223, 223, 224, 225, 225, 226, 226, 226,
1794 227, 227, 228, 228, 229, 229, 229, 229, 229, 229,
1795 229, 229, 229, 229, 229, 229, 229, 230, 230, 231,
1796 231, 231, 231, 231, 231, 231, 231
1797};
1798
1799/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
Reid Spencer9c9b63a2007-04-28 16:07:31 +00001800static const unsigned char yyr2[] =
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001801{
1802 0, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1803 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1804 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1805 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1806 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1807 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1808 1, 0, 2, 0, 1, 1, 1, 0, 2, 1,
1809 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
1810 0, 1, 1, 0, 1, 1, 1, 1, 0, 1,
1811 1, 0, 1, 1, 1, 1, 1, 2, 1, 1,
1812 1, 1, 0, 2, 1, 1, 1, 0, 2, 0,
1813 2, 0, 3, 2, 0, 1, 0, 3, 1, 2,
1814 1, 1, 1, 1, 1, 1, 2, 1, 2, 5,
1815 5, 5, 5, 3, 2, 5, 4, 2, 1, 1,
1816 1, 3, 1, 3, 1, 0, 1, 3, 4, 3,
1817 3, 4, 4, 3, 6, 5, 2, 2, 2, 2,
1818 2, 2, 2, 2, 2, 2, 2, 2, 6, 5,
1819 8, 6, 6, 7, 7, 6, 8, 8, 3, 1,
1820 1, 1, 1, 0, 2, 6, 1, 0, 1, 2,
1821 0, 3, 0, 3, 3, 3, 3, 0, 7, 0,
1822 8, 0, 8, 5, 2, 3, 1, 3, 3, 3,
1823 3, 1, 0, 5, 3, 1, 3, 1, 0, 9,
1824 1, 1, 4, 1, 1, 2, 3, 0, 1, 1,
1825 1, 1, 1, 1, 1, 1, 1, 3, 1, 5,
1826 1, 1, 1, 1, 1, 1, 2, 2, 2, 3,
1827 2, 0, 1, 2, 2, 3, 9, 9, 8, 14,
1828 1, 1, 6, 5, 2, 6, 7, 3, 5, 0,
1829 0, 3, 2, 1, 5, 5, 6, 6, 4, 6,
1830 4, 4, 6, 6, 2, 8, 1, 1, 0, 3,
1831 6, 3, 6, 2, 5, 7, 4
1832};
1833
1834/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
1835 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
1836 means the default is an error. */
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001837static const unsigned short yydefact[] =
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001838{
1839 67, 58, 64, 59, 65, 192, 190, 0, 0, 0,
1840 0, 0, 0, 77, 66, 0, 67, 188, 80, 83,
1841 0, 0, 204, 0, 0, 62, 0, 68, 69, 71,
1842 70, 72, 74, 73, 75, 76, 78, 79, 77, 77,
1843 183, 1, 189, 81, 82, 77, 193, 84, 85, 86,
1844 87, 77, 251, 191, 251, 0, 0, 212, 205, 206,
1845 194, 240, 241, 196, 120, 121, 122, 123, 124, 0,
1846 0, 0, 0, 242, 243, 125, 195, 127, 183, 183,
1847 88, 182, 0, 91, 91, 252, 248, 63, 223, 224,
1848 225, 247, 207, 208, 211, 0, 145, 128, 0, 0,
1849 0, 0, 134, 146, 0, 126, 145, 0, 0, 90,
1850 89, 0, 180, 181, 0, 0, 92, 93, 94, 95,
1851 96, 0, 226, 0, 288, 250, 0, 209, 144, 102,
1852 140, 142, 0, 0, 0, 0, 0, 0, 133, 0,
1853 0, 0, 139, 0, 138, 0, 203, 120, 121, 122,
1854 0, 0, 0, 197, 97, 0, 220, 221, 222, 287,
1855 273, 0, 0, 0, 0, 91, 260, 261, 2, 3,
1856 4, 5, 6, 7, 8, 9, 10, 14, 15, 16,
1857 11, 12, 13, 0, 0, 0, 0, 0, 0, 17,
1858 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
1859 28, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1860 249, 91, 264, 0, 286, 210, 137, 0, 107, 0,
1861 0, 136, 0, 147, 107, 199, 201, 0, 184, 165,
1862 166, 161, 163, 162, 164, 167, 160, 156, 157, 0,
1863 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1864 0, 0, 0, 159, 158, 116, 0, 272, 254, 0,
1865 253, 0, 0, 55, 0, 0, 29, 30, 31, 32,
1866 33, 34, 35, 36, 37, 38, 0, 53, 54, 49,
1867 50, 51, 52, 39, 40, 41, 42, 43, 44, 45,
1868 46, 47, 48, 0, 111, 111, 293, 0, 0, 284,
1869 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1870 0, 98, 99, 100, 101, 103, 143, 141, 130, 131,
1871 132, 135, 129, 116, 116, 0, 0, 0, 0, 0,
1872 0, 0, 0, 149, 179, 0, 0, 0, 153, 0,
1873 150, 0, 0, 0, 0, 198, 218, 229, 230, 231,
1874 236, 232, 233, 234, 235, 227, 0, 238, 245, 244,
1875 246, 0, 255, 0, 0, 0, 0, 0, 289, 0,
1876 291, 270, 0, 0, 0, 0, 0, 0, 0, 0,
1877 0, 0, 0, 0, 0, 104, 105, 106, 108, 200,
1878 202, 0, 0, 0, 270, 0, 0, 0, 0, 0,
1879 148, 134, 146, 0, 151, 152, 0, 0, 0, 0,
1880 0, 118, 116, 217, 102, 215, 0, 228, 0, 0,
1881 0, 0, 0, 0, 0, 0, 0, 0, 296, 0,
1882 0, 0, 280, 281, 0, 0, 0, 0, 278, 0,
1883 111, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1884 178, 155, 0, 0, 0, 0, 113, 119, 117, 61,
1885 0, 107, 0, 237, 0, 0, 269, 0, 0, 111,
1886 112, 111, 0, 0, 0, 0, 0, 0, 274, 275,
1887 269, 0, 294, 0, 185, 0, 0, 169, 0, 0,
1888 0, 0, 154, 0, 0, 0, 60, 214, 216, 102,
1889 114, 0, 0, 0, 0, 0, 276, 277, 290, 292,
1890 271, 0, 0, 279, 282, 283, 0, 111, 0, 0,
1891 0, 175, 0, 0, 171, 172, 168, 61, 115, 109,
1892 239, 0, 0, 102, 0, 107, 265, 0, 107, 295,
1893 173, 174, 0, 0, 0, 213, 0, 219, 0, 258,
1894 0, 0, 267, 0, 0, 266, 285, 170, 176, 177,
1895 110, 256, 0, 257, 0, 102, 0, 0, 0, 268,
1896 0, 0, 0, 0, 263, 0, 0, 262, 0, 259
1897};
1898
Reid Spencer9c9b63a2007-04-28 16:07:31 +00001899/* YYDEFGOTO[NTERM-NUM]. */
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001900static const short yydefgoto[] =
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001901{
1902 -1, 250, 251, 252, 276, 293, 150, 151, 73, 497,
1903 11, 74, 13, 14, 38, 39, 40, 45, 51, 111,
1904 121, 315, 216, 388, 318, 547, 368, 411, 529, 345,
1905 412, 75, 152, 130, 145, 131, 132, 104, 334, 357,
1906 335, 114, 82, 146, 15, 16, 17, 19, 18, 255,
1907 323, 324, 60, 22, 58, 95, 415, 416, 122, 158,
1908 52, 90, 53, 46, 418, 358, 77, 360, 260, 54,
1909 86, 87, 210, 551, 125, 299, 505, 428, 211, 212,
1910 213, 214
1911};
1912
1913/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1914 STATE-NUM. */
1915#define YYPACT_NINF -472
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001916static const short yypact[] =
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001917{
1918 50, -472, -472, -472, -472, -472, -472, -20, -110, 93,
1919 -64, 160, 68, 14, -472, 185, 203, -472, 77, 199,
1920 76, 81, -472, 79, 205, -472, 1214, -472, -472, -472,
1921 -472, -472, -472, -472, -472, -472, -472, -472, 56, 56,
1922 137, -472, -472, -472, -472, 56, -472, -472, -472, -472,
1923 -472, 56, 210, -472, 2, 236, 246, 277, -472, -472,
1924 -472, -472, -472, 170, -472, -472, -472, -472, -472, 315,
1925 318, 6, 368, -472, -472, -472, 154, -472, 287, 287,
1926 255, -472, 207, 281, 281, -472, -472, 82, -472, -472,
1927 -472, -472, -472, -472, -472, -1, 1109, -472, 184, 188,
1928 685, 170, -472, 154, -49, -472, 1109, 207, 207, -472,
1929 -472, 777, -472, -472, 1230, 326, -472, -472, -472, -472,
1930 -472, 1269, -472, -7, 1471, -472, 324, -472, -472, 154,
1931 -472, 208, 206, 1312, 1312, 200, -43, 1312, -472, 213,
1932 1230, 1312, 170, 215, 154, 316, -472, 40, 339, 350,
1933 256, 352, 856, -472, -472, 86, -472, -472, -472, -472,
1934 -472, 311, 1372, 187, 356, 281, -472, -472, -472, -472,
1935 -472, -472, -472, -472, -472, -472, -472, -472, -472, -472,
1936 -472, -472, -472, 394, 177, 1312, 1312, 1312, 1312, -472,
1937 -472, -472, -472, -472, -472, -472, -472, -472, -472, -472,
1938 -472, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312,
1939 -472, 281, -472, 122, -472, -472, -40, 1126, -472, 67,
1940 49, -472, 222, 154, -472, -472, 154, 777, -472, -472,
1941 -472, -472, -472, -472, -472, -472, -472, -472, -472, 394,
1942 177, 229, 232, 234, 237, 243, 1156, 1386, 898, 367,
1943 249, 251, 252, -472, -472, 257, 258, -472, 170, 606,
1944 -472, 733, 733, -472, 733, 1269, -472, -472, -472, -472,
1945 -472, -472, -472, -472, -472, -472, 1312, -472, -472, -472,
1946 -472, -472, -472, -472, -472, -472, -472, -472, -472, -472,
1947 -472, -472, -472, 1312, -89, 108, -472, 606, 116, 259,
1948 260, 262, 263, 266, 267, 606, 606, 361, 1269, 1312,
1949 1312, -472, -472, -472, -472, -472, -472, -472, 41, -472,
1950 -472, -472, 41, 257, 257, 371, 268, 270, 1230, 1230,
1951 1230, 1230, 1230, -472, -472, 15, 937, -113, -472, -35,
1952 -472, 1230, 1230, 1230, 29, -472, 1170, -472, -472, -472,
1953 -472, -472, -472, -472, -472, 351, 1230, -472, -472, -472,
1954 -472, 274, -472, 275, 733, 606, 606, 12, -472, 19,
1955 -472, -472, 733, 265, 1312, 1312, 1312, 1312, 1312, 278,
1956 284, 1312, 733, 606, 285, -472, -472, -472, -472, -472,
1957 -472, 1312, 1230, 1230, -472, 286, 289, 290, 291, 1230,
1958 -472, 283, 856, -30, -472, -472, 296, 297, 403, 419,
1959 436, -472, 257, -472, 154, 305, 302, -472, 425, -8,
1960 431, 432, 308, 312, 317, 733, 449, 733, 321, 327,
1961 733, 328, 154, -472, 329, 330, 733, 733, 154, 323,
1962 332, 1312, 126, 333, 334, -57, 1230, 1230, 1230, 1230,
1963 -472, -472, 331, 1230, 1230, 1312, -472, -472, -472, 13,
1964 1200, -472, 335, -472, 733, 733, 1312, 733, 733, 332,
1965 -472, 332, 1312, 733, 336, 1312, 1312, 1312, -472, -472,
1966 1312, 426, -472, 606, -472, 1230, 1230, -472, 337, 349,
1967 355, 358, -472, 357, 359, 149, -472, -472, -472, 154,
1968 1, 457, 360, 354, 606, -2, -472, -472, -472, -472,
1969 -472, 362, 733, -472, -472, -472, 28, 332, 363, 364,
1970 1230, -472, 1230, 1230, -472, -472, -472, 13, -472, 450,
1971 -472, 487, -3, -472, 1312, -472, -472, 370, -472, -472,
1972 -472, -472, 376, 377, 378, -472, 498, -472, 733, -472,
1973 986, 3, -40, 606, 83, -472, 41, -472, -472, -472,
1974 -472, -472, 366, -472, 986, -472, 494, 497, 375, -40,
1975 733, 733, 506, 455, -472, 733, 510, -472, 733, -472
1976};
1977
1978/* YYPGOTO[NTERM-NUM]. */
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001979static const short yypgoto[] =
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001980{
1981 -472, 401, 404, 405, 292, 294, -161, -472, 0, 8,
1982 443, 9, -472, -472, -472, -472, 44, -472, -472, -472,
1983 -147, -307, -409, -472, -220, -472, -283, 36, -472, -284,
1984 -472, -472, -25, 320, -114, -472, 433, 438, -29, -150,
1985 -226, 198, 238, 313, -472, -472, 525, -472, -472, -472,
1986 -472, -472, -472, -472, -472, -472, -472, -472, 458, -472,
1987 -472, -472, -472, -472, -472, -471, -139, 96, -168, -472,
1988 489, -472, -472, -472, -472, -472, 64, 151, -472, -472,
1989 -472, -472
1990};
1991
1992/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
1993 positive, shift that token. If negative, reduce the rule which
1994 number is the opposite. If zero, do what YYDEFACT says.
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001995 If YYTABLE_NINF, parse error. */
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001996#define YYTABLE_NINF -188
Jeff Cohen930c0fe2007-04-29 14:43:31 +00001997static const short yytable[] =
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001998{
1999 10, 76, 253, 264, 322, 459, 228, 155, 263, 12,
2000 99, 387, 370, 254, 263, 387, 10, 156, 265, 296,
2001 85, 337, 339, 425, 399, 12, 23, 88, 20, 1,
2002 427, 409, 3, 404, 300, 301, 302, 303, 304, 389,
2003 390, 307, 21, -55, -55, -55, -55, 103, 367, 105,
2004 -187, 106, 28, 29, 30, 31, 32, 33, 34, 409,
2005 35, 426, 229, 230, 308, -63, 1, 2, 426, 3,
2006 4, 129, 25, 311, 312, 103, 5, 6, 410, 562,
2007 472, 129, 78, 79, 487, 153, 144, 10, 137, 83,
2008 527, 313, 314, 568, 137, 84, 144, 7, 1, 138,
2009 8, 3, 399, 2, 9, 222, 4, 399, 219, 220,
2010 403, 225, 223, 405, 311, 312, 226, 566, 452, 43,
2011 359, 44, 359, 359, 552, 359, 311, 312, 458, 399,
2012 419, 385, 313, 314, 386, 534, 126, 259, 463, 535,
2013 157, 549, 384, 127, 313, 314, 24, 563, 36, 37,
2014 89, 364, 399, 100, 311, 312, 569, 482, 359, 400,
2015 294, 295, 259, 297, 256, 534, 359, 359, 80, 538,
2016 81, 385, 313, 314, 386, 26, 298, 259, 259, 259,
2017 259, 259, 305, 306, 259, 41, 508, 105, 509, 106,
2018 36, 37, 129, 387, 382, 320, 311, 312, 261, 277,
2019 278, 262, 144, -186, 27, 105, 431, 106, 433, 434,
2020 435, 319, 55, 385, 313, 314, 386, 56, -63, 1,
2021 2, 57, 3, 4, 59, 359, 359, 359, 85, 5,
2022 6, 309, 310, 359, 539, 112, 113, 47, 48, 49,
2023 144, 500, 50, 359, 359, 369, 105, 387, 106, 387,
2024 7, 365, 253, 8, 105, 92, 106, 9, 372, 231,
2025 232, 233, 234, 254, 105, 93, 106, 484, 366, 279,
2026 280, 281, 282, 283, 284, 285, 286, 287, 288, 289,
2027 290, 291, 292, 144, 383, 259, 359, 105, 359, 106,
2028 526, 359, 105, 109, 106, 110, 94, 359, 359, 394,
2029 395, 396, 397, 398, 510, 140, 141, 513, 514, 515,
2030 96, 402, 406, 407, 408, 554, 107, 108, 556, 97,
2031 81, 414, 98, 61, 62, 359, 359, 133, 359, 359,
2032 154, 134, 1, 2, 359, 3, 4, 115, 116, 117,
2033 118, 119, 120, 215, 359, 217, 221, 218, -56, 259,
2034 432, 259, 259, 259, 224, 227, 438, 361, 362, -57,
2035 363, 235, 257, 443, 444, 359, 442, 263, 321, 328,
2036 450, 550, 329, 359, 330, 61, 62, 331, 101, 64,
2037 65, 66, 67, 332, 1, 2, 340, 3, 4, 341,
2038 564, 342, 343, 371, 344, 381, 373, 374, 346, 375,
2039 376, 379, 380, 377, 378, 391, 417, 430, 392, 359,
2040 393, 420, 421, 68, 359, 436, 483, 488, 489, 490,
2041 491, 437, 441, 446, 493, 494, 447, 448, 449, 451,
2042 495, 359, 359, 453, 454, 499, 359, 455, 456, 359,
2043 457, 504, 460, 461, 462, 464, 465, 259, 466, 467,
2044 259, 259, 259, 470, 468, 504, 518, 519, 472, 496,
2045 422, 423, 424, 480, 473, 475, 476, 477, 429, 481,
2046 485, 486, 501, 512, 520, 426, 530, 492, 439, 440,
2047 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
2048 521, 542, 522, 543, 544, 523, 532, 531, 524, 546,
2049 525, 548, 560, 567, 540, 541, 536, 69, 570, 553,
2050 70, 571, 572, 71, 555, 72, 102, 557, 558, 559,
2051 575, 469, 576, 471, 578, 207, 474, 496, 208, 209,
2052 124, 326, 478, 479, 327, 545, 528, 317, 136, 139,
2053 325, 42, 123, 91, 516, 445, 0, 0, 0, 0,
2054 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2055 502, 503, 0, 506, 507, 0, 0, 0, 0, 511,
2056 0, 0, 0, 0, 0, 0, 0, 0, 0, 517,
2057 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2058 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2059 533, 0, 0, 0, 0, 0, 0, 0, 537, 347,
2060 348, 0, 0, 61, 62, 349, 0, 0, 0, 0,
2061 0, 0, 1, 2, 0, 3, 4, 350, 351, 352,
2062 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2063 0, 0, 353, 354, 561, 0, 0, 0, 0, 565,
2064 0, 0, 0, 0, 0, 0, 0, 0, 0, 355,
2065 0, 0, 0, 0, 0, 0, 573, 574, 0, 0,
2066 0, 577, 0, 0, 579, 168, 169, 170, 171, 172,
2067 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
2068 239, 240, 61, 62, 0, 101, 64, 65, 66, 67,
2069 0, 1, 2, 0, 3, 4, 0, 0, 0, 0,
2070 0, 0, 0, 0, 0, 0, 0, 241, 189, 190,
2071 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
2072 68, 242, 0, 243, 244, 245, 347, 348, 0, 0,
2073 61, 62, 349, 0, 105, 0, 106, 0, 0, 1,
2074 2, 356, 3, 4, 350, 351, 352, 0, 0, 0,
2075 0, 0, 0, 0, 0, 0, 0, 0, 0, 353,
2076 354, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2077 0, 0, 0, 0, 61, 62, 355, 142, 64, 65,
2078 66, 67, 0, 1, 2, 0, 3, 4, 0, 0,
2079 0, 0, 168, 169, 170, 171, 172, 173, 174, 175,
2080 176, 177, 178, 179, 180, 181, 182, 239, 240, 0,
2081 0, 0, 68, 0, 69, 0, 0, 70, 0, 0,
2082 71, 0, 72, 135, 0, 0, 0, 0, 0, 0,
2083 0, 0, 0, 0, 241, 189, 190, 191, 192, 193,
2084 194, 195, 196, 197, 198, 199, 200, 0, 242, 0,
2085 243, 244, 245, 61, 62, 0, 0, 0, 0, 0,
2086 0, 0, 1, 2, 0, 3, 4, 236, 356, 0,
2087 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2088 0, 0, 237, 238, 143, 0, 0, 0, 0, 0,
2089 0, 0, 0, 0, 0, 61, 62, 0, 101, 147,
2090 148, 149, 67, 0, 1, 2, 69, 3, 4, 70,
2091 0, 0, 71, 0, 72, 168, 169, 170, 171, 172,
2092 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
2093 239, 240, 0, 68, 61, 62, 0, 101, 147, 148,
2094 149, 67, 0, 1, 2, 0, 3, 4, 0, 0,
2095 0, 0, 0, 0, 0, 0, 0, 241, 189, 190,
2096 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
2097 0, 242, 68, 243, 244, 245, 0, 0, 0, 347,
2098 348, 0, 0, 0, 105, 349, 106, 0, 246, 0,
2099 0, 247, 0, 248, 0, 249, 0, 350, 351, 352,
2100 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2101 0, 0, 353, 354, 0, 0, 0, 0, 0, 0,
2102 0, 0, 0, 0, 0, 0, 0, 69, 0, 355,
2103 70, 0, 0, 71, 0, 72, 338, 0, 0, 0,
2104 0, 0, 0, 0, 0, 168, 169, 170, 171, 172,
2105 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
2106 239, 240, 0, 0, 0, 0, 69, 0, 0, 70,
2107 0, 0, 71, 0, 72, 401, 0, 0, 0, 0,
2108 0, 0, 0, 0, 0, 0, 0, 241, 189, 190,
2109 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
2110 0, 242, 0, 243, 244, 245, 61, 62, 0, 101,
2111 64, 65, 66, 67, 0, 1, 2, 0, 3, 4,
2112 0, 356, 0, 61, 62, 0, 101, 64, 65, 66,
2113 67, 0, 1, 2, 128, 3, 4, 0, 0, 0,
2114 0, 0, 0, 0, 68, 0, 0, 0, 0, 0,
2115 0, 316, 0, 61, 62, 0, 101, 147, 148, 149,
2116 67, 68, 1, 2, 0, 3, 4, 61, 62, 0,
2117 101, 64, 65, 66, 67, 0, 1, 2, 0, 3,
2118 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2119 0, 68, 0, 0, 0, 413, 0, 61, 62, 0,
2120 101, 64, 65, 66, 67, 68, 1, 2, 0, 3,
2121 4, 61, 62, 0, 63, 64, 65, 66, 67, 0,
2122 1, 2, 0, 3, 4, 498, 0, 61, 62, 0,
2123 101, 147, 148, 149, 67, 68, 1, 2, 69, 3,
2124 4, 70, 0, 0, 71, 0, 72, 0, 0, 68,
2125 0, 0, 0, 0, 0, 69, 0, 0, 70, 0,
2126 0, 71, 0, 72, 0, 68, 61, 62, 0, 142,
2127 64, 65, 66, 67, 0, 1, 2, 0, 3, 4,
2128 0, 0, 0, 0, 0, 69, 0, 0, 70, 0,
2129 333, 71, 0, 72, 0, 0, 0, 0, 0, 69,
2130 0, 0, 70, 0, 68, 71, 0, 72, 0, 61,
2131 62, 0, 101, 64, 65, 66, 67, 0, 1, 2,
2132 0, 3, 4, 0, 0, 0, 0, 0, 0, 69,
2133 0, 0, 70, 0, 0, 71, 0, 72, 0, 0,
2134 0, 0, 0, 69, 0, 0, 70, 68, 0, 71,
2135 0, 72, 0, 0, 0, 0, 0, 0, 0, 69,
2136 0, 0, 70, 0, 0, 71, 0, 72, 0, 61,
2137 62, 0, 258, 64, 65, 66, 67, 0, 1, 2,
2138 0, 3, 4, 61, 62, 0, 101, 147, 148, 149,
2139 67, 0, 1, 2, 0, 3, 4, 0, 69, 0,
2140 0, 70, 0, 0, 71, 0, 72, 68, 0, 0,
2141 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2142 0, 68, 0, 0, 0, 0, 0, 0, 0, 0,
2143 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2144 0, 69, 0, 0, 70, 0, 0, 71, 0, 72,
2145 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2146 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2147 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2148 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2149 0, 0, 0, 159, 0, 0, 0, 0, 0, 0,
2150 0, 69, 0, 0, 70, 0, 0, 71, 0, 72,
2151 0, 0, 160, 161, 0, 69, 0, 0, 70, 0,
2152 0, 71, 0, 336, 162, 163, 164, 165, 166, 167,
2153 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
2154 178, 179, 180, 181, 182, 183, 184, 0, 0, 0,
2155 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2156 0, 0, 0, 0, 0, 0, 0, 185, 186, 187,
2157 0, 0, 188, 189, 190, 191, 192, 193, 194, 195,
2158 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
2159 206
2160};
2161
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002162static const short yycheck[] =
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002163{
2164 0, 26, 152, 164, 224, 414, 145, 121, 11, 0,
2165 4, 318, 295, 152, 11, 322, 16, 24, 165, 187,
2166 18, 247, 248, 11, 137, 16, 136, 25, 48, 16,
2167 11, 30, 19, 146, 202, 203, 204, 205, 206, 323,
2168 324, 209, 62, 3, 4, 5, 6, 72, 137, 138,
2169 0, 140, 38, 39, 40, 41, 42, 43, 44, 30,
2170 46, 49, 22, 23, 211, 15, 16, 17, 49, 19,
2171 20, 96, 136, 113, 114, 100, 26, 27, 49, 550,
2172 137, 106, 38, 39, 141, 114, 111, 87, 137, 45,
2173 499, 131, 132, 564, 137, 51, 121, 47, 16, 148,
2174 50, 19, 137, 17, 54, 148, 20, 137, 133, 134,
2175 336, 140, 137, 148, 113, 114, 141, 34, 148, 42,
2176 259, 44, 261, 262, 533, 264, 113, 114, 412, 137,
2177 356, 130, 131, 132, 133, 137, 137, 162, 146, 141,
2178 147, 144, 310, 144, 131, 132, 53, 144, 134, 135,
2179 148, 265, 137, 147, 113, 114, 565, 440, 297, 144,
2180 185, 186, 187, 188, 155, 137, 305, 306, 31, 141,
2181 33, 130, 131, 132, 133, 15, 201, 202, 203, 204,
2182 205, 206, 207, 208, 209, 0, 469, 138, 471, 140,
2183 134, 135, 217, 500, 308, 146, 113, 114, 11, 22,
2184 23, 14, 227, 0, 136, 138, 374, 140, 376, 377,
2185 378, 144, 136, 130, 131, 132, 133, 136, 15, 16,
2186 17, 142, 19, 20, 19, 364, 365, 366, 18, 26,
2187 27, 109, 110, 372, 517, 28, 29, 38, 39, 40,
2188 265, 461, 43, 382, 383, 137, 138, 554, 140, 556,
2189 47, 276, 402, 50, 138, 19, 140, 54, 142, 3,
2190 4, 5, 6, 402, 138, 19, 140, 141, 293, 92,
2191 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
2192 103, 104, 105, 308, 309, 310, 425, 138, 427, 140,
2193 141, 430, 138, 38, 140, 40, 19, 436, 437, 328,
2194 329, 330, 331, 332, 472, 107, 108, 475, 476, 477,
2195 140, 336, 341, 342, 343, 535, 78, 79, 538, 4,
2196 33, 346, 4, 7, 8, 464, 465, 143, 467, 468,
2197 4, 143, 16, 17, 473, 19, 20, 56, 57, 58,
2198 59, 60, 61, 19, 483, 137, 146, 141, 9, 374,
2199 375, 376, 377, 378, 141, 140, 381, 261, 262, 9,
2200 264, 9, 51, 392, 393, 504, 391, 11, 146, 140,
2201 399, 532, 140, 512, 140, 7, 8, 140, 10, 11,
2202 12, 13, 14, 140, 16, 17, 19, 19, 20, 140,
2203 551, 140, 140, 297, 137, 34, 137, 137, 140, 137,
2204 137, 305, 306, 137, 137, 34, 55, 142, 140, 548,
2205 140, 137, 137, 45, 553, 137, 441, 446, 447, 448,
2206 449, 137, 137, 137, 453, 454, 137, 137, 137, 146,
2207 455, 570, 571, 137, 137, 460, 575, 34, 19, 578,
2208 4, 466, 137, 141, 19, 14, 14, 472, 140, 137,
2209 475, 476, 477, 4, 137, 480, 485, 486, 137, 459,
2210 364, 365, 366, 140, 137, 137, 137, 137, 372, 137,
2211 137, 137, 137, 137, 137, 49, 19, 146, 382, 383,
2212 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
2213 141, 520, 137, 522, 523, 137, 142, 137, 141, 49,
2214 141, 14, 4, 137, 141, 141, 144, 139, 14, 534,
2215 142, 14, 137, 145, 144, 147, 148, 141, 141, 141,
2216 14, 425, 67, 427, 14, 124, 430, 527, 124, 124,
2217 87, 239, 436, 437, 240, 527, 500, 217, 100, 106,
2218 227, 16, 84, 54, 480, 394, -1, -1, -1, -1,
2219 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2220 464, 465, -1, 467, 468, -1, -1, -1, -1, 473,
2221 -1, -1, -1, -1, -1, -1, -1, -1, -1, 483,
2222 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2223 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2224 504, -1, -1, -1, -1, -1, -1, -1, 512, 3,
2225 4, -1, -1, 7, 8, 9, -1, -1, -1, -1,
2226 -1, -1, 16, 17, -1, 19, 20, 21, 22, 23,
2227 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2228 -1, -1, 36, 37, 548, -1, -1, -1, -1, 553,
2229 -1, -1, -1, -1, -1, -1, -1, -1, -1, 53,
2230 -1, -1, -1, -1, -1, -1, 570, 571, -1, -1,
2231 -1, 575, -1, -1, 578, 69, 70, 71, 72, 73,
2232 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
2233 84, 85, 7, 8, -1, 10, 11, 12, 13, 14,
2234 -1, 16, 17, -1, 19, 20, -1, -1, -1, -1,
2235 -1, -1, -1, -1, -1, -1, -1, 111, 112, 113,
2236 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
2237 45, 125, -1, 127, 128, 129, 3, 4, -1, -1,
2238 7, 8, 9, -1, 138, -1, 140, -1, -1, 16,
2239 17, 145, 19, 20, 21, 22, 23, -1, -1, -1,
2240 -1, -1, -1, -1, -1, -1, -1, -1, -1, 36,
2241 37, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2242 -1, -1, -1, -1, 7, 8, 53, 10, 11, 12,
2243 13, 14, -1, 16, 17, -1, 19, 20, -1, -1,
2244 -1, -1, 69, 70, 71, 72, 73, 74, 75, 76,
2245 77, 78, 79, 80, 81, 82, 83, 84, 85, -1,
2246 -1, -1, 45, -1, 139, -1, -1, 142, -1, -1,
2247 145, -1, 147, 148, -1, -1, -1, -1, -1, -1,
2248 -1, -1, -1, -1, 111, 112, 113, 114, 115, 116,
2249 117, 118, 119, 120, 121, 122, 123, -1, 125, -1,
2250 127, 128, 129, 7, 8, -1, -1, -1, -1, -1,
2251 -1, -1, 16, 17, -1, 19, 20, 21, 145, -1,
2252 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2253 -1, -1, 36, 37, 117, -1, -1, -1, -1, -1,
2254 -1, -1, -1, -1, -1, 7, 8, -1, 10, 11,
2255 12, 13, 14, -1, 16, 17, 139, 19, 20, 142,
2256 -1, -1, 145, -1, 147, 69, 70, 71, 72, 73,
2257 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
2258 84, 85, -1, 45, 7, 8, -1, 10, 11, 12,
2259 13, 14, -1, 16, 17, -1, 19, 20, -1, -1,
2260 -1, -1, -1, -1, -1, -1, -1, 111, 112, 113,
2261 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
2262 -1, 125, 45, 127, 128, 129, -1, -1, -1, 3,
2263 4, -1, -1, -1, 138, 9, 140, -1, 142, -1,
2264 -1, 145, -1, 147, -1, 149, -1, 21, 22, 23,
2265 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2266 -1, -1, 36, 37, -1, -1, -1, -1, -1, -1,
2267 -1, -1, -1, -1, -1, -1, -1, 139, -1, 53,
2268 142, -1, -1, 145, -1, 147, 148, -1, -1, -1,
2269 -1, -1, -1, -1, -1, 69, 70, 71, 72, 73,
2270 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
2271 84, 85, -1, -1, -1, -1, 139, -1, -1, 142,
2272 -1, -1, 145, -1, 147, 148, -1, -1, -1, -1,
2273 -1, -1, -1, -1, -1, -1, -1, 111, 112, 113,
2274 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
2275 -1, 125, -1, 127, 128, 129, 7, 8, -1, 10,
2276 11, 12, 13, 14, -1, 16, 17, -1, 19, 20,
2277 -1, 145, -1, 7, 8, -1, 10, 11, 12, 13,
2278 14, -1, 16, 17, 35, 19, 20, -1, -1, -1,
2279 -1, -1, -1, -1, 45, -1, -1, -1, -1, -1,
2280 -1, 35, -1, 7, 8, -1, 10, 11, 12, 13,
2281 14, 45, 16, 17, -1, 19, 20, 7, 8, -1,
2282 10, 11, 12, 13, 14, -1, 16, 17, -1, 19,
2283 20, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2284 -1, 45, -1, -1, -1, 35, -1, 7, 8, -1,
2285 10, 11, 12, 13, 14, 45, 16, 17, -1, 19,
2286 20, 7, 8, -1, 10, 11, 12, 13, 14, -1,
2287 16, 17, -1, 19, 20, 35, -1, 7, 8, -1,
2288 10, 11, 12, 13, 14, 45, 16, 17, 139, 19,
2289 20, 142, -1, -1, 145, -1, 147, -1, -1, 45,
2290 -1, -1, -1, -1, -1, 139, -1, -1, 142, -1,
2291 -1, 145, -1, 147, -1, 45, 7, 8, -1, 10,
2292 11, 12, 13, 14, -1, 16, 17, -1, 19, 20,
2293 -1, -1, -1, -1, -1, 139, -1, -1, 142, -1,
2294 144, 145, -1, 147, -1, -1, -1, -1, -1, 139,
2295 -1, -1, 142, -1, 45, 145, -1, 147, -1, 7,
2296 8, -1, 10, 11, 12, 13, 14, -1, 16, 17,
2297 -1, 19, 20, -1, -1, -1, -1, -1, -1, 139,
2298 -1, -1, 142, -1, -1, 145, -1, 147, -1, -1,
2299 -1, -1, -1, 139, -1, -1, 142, 45, -1, 145,
2300 -1, 147, -1, -1, -1, -1, -1, -1, -1, 139,
2301 -1, -1, 142, -1, -1, 145, -1, 147, -1, 7,
2302 8, -1, 10, 11, 12, 13, 14, -1, 16, 17,
2303 -1, 19, 20, 7, 8, -1, 10, 11, 12, 13,
2304 14, -1, 16, 17, -1, 19, 20, -1, 139, -1,
2305 -1, 142, -1, -1, 145, -1, 147, 45, -1, -1,
2306 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2307 -1, 45, -1, -1, -1, -1, -1, -1, -1, -1,
2308 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2309 -1, 139, -1, -1, 142, -1, -1, 145, -1, 147,
2310 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2311 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2312 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2313 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2314 -1, -1, -1, 32, -1, -1, -1, -1, -1, -1,
2315 -1, 139, -1, -1, 142, -1, -1, 145, -1, 147,
2316 -1, -1, 51, 52, -1, 139, -1, -1, 142, -1,
2317 -1, 145, -1, 147, 63, 64, 65, 66, 67, 68,
2318 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
2319 79, 80, 81, 82, 83, 84, 85, -1, -1, -1,
2320 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2321 -1, -1, -1, -1, -1, -1, -1, 106, 107, 108,
2322 -1, -1, 111, 112, 113, 114, 115, 116, 117, 118,
2323 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
2324 129
2325};
2326
2327/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
2328 symbol of state STATE-NUM. */
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002329static const unsigned char yystos[] =
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002330{
2331 0, 16, 17, 19, 20, 26, 27, 47, 50, 54,
2332 158, 160, 161, 162, 163, 194, 195, 196, 198, 197,
2333 48, 62, 203, 136, 53, 136, 15, 136, 38, 39,
2334 40, 41, 42, 43, 44, 46, 134, 135, 164, 165,
2335 166, 0, 196, 42, 44, 167, 213, 38, 39, 40,
2336 43, 168, 210, 212, 219, 136, 136, 142, 204, 19,
2337 202, 7, 8, 10, 11, 12, 13, 14, 45, 139,
2338 142, 145, 147, 158, 161, 181, 182, 216, 166, 166,
2339 31, 33, 192, 166, 166, 18, 220, 221, 25, 148,
2340 211, 220, 19, 19, 19, 205, 140, 4, 4, 4,
2341 147, 10, 148, 182, 187, 138, 140, 192, 192, 38,
2342 40, 169, 28, 29, 191, 56, 57, 58, 59, 60,
2343 61, 170, 208, 208, 160, 224, 137, 144, 35, 182,
2344 183, 185, 186, 143, 143, 148, 187, 137, 148, 186,
2345 191, 191, 10, 117, 182, 184, 193, 11, 12, 13,
2346 156, 157, 182, 188, 4, 184, 24, 147, 209, 32,
2347 51, 52, 63, 64, 65, 66, 67, 68, 69, 70,
2348 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
2349 81, 82, 83, 84, 85, 106, 107, 108, 111, 112,
2350 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
2351 123, 124, 125, 126, 127, 128, 129, 151, 152, 153,
2352 222, 228, 229, 230, 231, 19, 172, 137, 141, 182,
2353 182, 146, 148, 182, 141, 188, 182, 140, 216, 22,
2354 23, 3, 4, 5, 6, 9, 21, 36, 37, 84,
2355 85, 111, 125, 127, 128, 129, 142, 145, 147, 149,
2356 151, 152, 153, 189, 216, 199, 161, 51, 10, 182,
2357 218, 11, 14, 11, 156, 170, 86, 87, 88, 89,
2358 90, 91, 92, 93, 94, 95, 154, 22, 23, 92,
2359 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
2360 103, 104, 105, 155, 182, 182, 218, 182, 182, 225,
2361 218, 218, 218, 218, 218, 182, 182, 218, 170, 109,
2362 110, 113, 114, 131, 132, 171, 35, 183, 174, 144,
2363 146, 146, 174, 200, 201, 193, 154, 155, 140, 140,
2364 140, 140, 140, 144, 188, 190, 147, 190, 148, 190,
2365 19, 140, 140, 140, 137, 179, 140, 3, 4, 9,
2366 21, 22, 23, 36, 37, 53, 145, 189, 215, 216,
2367 217, 217, 217, 217, 184, 182, 182, 137, 176, 137,
2368 176, 217, 142, 137, 137, 137, 137, 137, 137, 217,
2369 217, 34, 184, 182, 218, 130, 133, 171, 173, 179,
2370 179, 34, 140, 140, 188, 188, 188, 188, 188, 137,
2371 144, 148, 182, 190, 146, 148, 188, 188, 188, 30,
2372 49, 177, 180, 35, 182, 206, 207, 55, 214, 190,
2373 137, 137, 217, 217, 217, 11, 49, 11, 227, 217,
2374 142, 218, 182, 218, 218, 218, 137, 137, 182, 217,
2375 217, 137, 182, 188, 188, 227, 137, 137, 137, 137,
2376 188, 146, 148, 137, 137, 34, 19, 4, 179, 172,
2377 137, 141, 19, 146, 14, 14, 140, 137, 137, 217,
2378 4, 217, 137, 137, 217, 137, 137, 137, 217, 217,
2379 140, 137, 176, 182, 141, 137, 137, 141, 188, 188,
2380 188, 188, 146, 188, 188, 182, 158, 159, 35, 182,
2381 174, 137, 217, 217, 182, 226, 217, 217, 176, 176,
2382 218, 217, 137, 218, 218, 218, 226, 217, 188, 188,
2383 137, 141, 137, 137, 141, 141, 141, 172, 177, 178,
2384 19, 137, 142, 217, 137, 141, 144, 217, 141, 176,
2385 141, 141, 188, 188, 188, 159, 49, 175, 14, 144,
2386 156, 223, 172, 182, 174, 144, 174, 141, 141, 141,
2387 4, 217, 215, 144, 156, 217, 34, 137, 215, 172,
2388 14, 14, 137, 217, 217, 14, 67, 217, 14, 217
2389};
Reid Spencer68a24bd2005-08-27 18:50:39 +00002390
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002391#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
2392# define YYSIZE_T __SIZE_TYPE__
2393#endif
2394#if ! defined (YYSIZE_T) && defined (size_t)
2395# define YYSIZE_T size_t
2396#endif
2397#if ! defined (YYSIZE_T)
2398# if defined (__STDC__) || defined (__cplusplus)
2399# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
2400# define YYSIZE_T size_t
2401# endif
2402#endif
2403#if ! defined (YYSIZE_T)
2404# define YYSIZE_T unsigned int
2405#endif
2406
Reid Spencer68a24bd2005-08-27 18:50:39 +00002407#define yyerrok (yyerrstatus = 0)
2408#define yyclearin (yychar = YYEMPTY)
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002409#define YYEMPTY -2
Reid Spencer68a24bd2005-08-27 18:50:39 +00002410#define YYEOF 0
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002411
Reid Spencer68a24bd2005-08-27 18:50:39 +00002412#define YYACCEPT goto yyacceptlab
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002413#define YYABORT goto yyabortlab
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002414#define YYERROR goto yyerrlab1
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002415
2416/* Like YYERROR except do call yyerror. This remains here temporarily
2417 to ease the transition to the new meaning of YYERROR, for GCC.
Reid Spencer68a24bd2005-08-27 18:50:39 +00002418 Once GCC version 2 has supplanted version 1, this can go. */
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002419
Reid Spencer68a24bd2005-08-27 18:50:39 +00002420#define YYFAIL goto yyerrlab
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002421
Reid Spencer68a24bd2005-08-27 18:50:39 +00002422#define YYRECOVERING() (!!yyerrstatus)
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002423
2424#define YYBACKUP(Token, Value) \
Reid Spencer68a24bd2005-08-27 18:50:39 +00002425do \
2426 if (yychar == YYEMPTY && yylen == 1) \
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002427 { \
2428 yychar = (Token); \
2429 yylval = (Value); \
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002430 yychar1 = YYTRANSLATE (yychar); \
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002431 YYPOPSTACK; \
Reid Spencer68a24bd2005-08-27 18:50:39 +00002432 goto yybackup; \
2433 } \
2434 else \
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002435 { \
2436 yyerror ("syntax error: cannot back up"); \
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002437 YYERROR; \
2438 } \
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002439while (0)
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002440
Reid Spencer68a24bd2005-08-27 18:50:39 +00002441#define YYTERROR 1
2442#define YYERRCODE 256
2443
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002444/* YYLLOC_DEFAULT -- Compute the default location (before the actions
2445 are run). */
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002446
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002447#ifndef YYLLOC_DEFAULT
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002448# define YYLLOC_DEFAULT(Current, Rhs, N) \
2449 Current.first_line = Rhs[1].first_line; \
2450 Current.first_column = Rhs[1].first_column; \
2451 Current.last_line = Rhs[N].last_line; \
2452 Current.last_column = Rhs[N].last_column;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002453#endif
2454
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002455/* YYLEX -- calling `yylex' with the right arguments. */
2456
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002457#define YYLEX yylex ()
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002458
2459/* Enable debugging if requested. */
2460#if YYDEBUG
2461
2462# ifndef YYFPRINTF
2463# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
2464# define YYFPRINTF fprintf
2465# endif
2466
2467# define YYDPRINTF(Args) \
2468do { \
2469 if (yydebug) \
2470 YYFPRINTF Args; \
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002471} while (0)
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002472# define YYDSYMPRINT(Args) \
2473do { \
2474 if (yydebug) \
2475 yysymprint Args; \
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002476} while (0)
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002477/* Nonzero means print parse trace. It is left uninitialized so that
2478 multiple parsers can coexist. */
2479int yydebug;
2480#else /* !YYDEBUG */
2481# define YYDPRINTF(Args)
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002482# define YYDSYMPRINT(Args)
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002483#endif /* !YYDEBUG */
2484
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002485/* YYINITDEPTH -- initial size of the parser's stacks. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002486#ifndef YYINITDEPTH
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002487# define YYINITDEPTH 200
Reid Spencer68a24bd2005-08-27 18:50:39 +00002488#endif
2489
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002490/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
2491 if the built-in stack extension method is used).
Reid Spencer68a24bd2005-08-27 18:50:39 +00002492
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002493 Do not make this value too large; the results are undefined if
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002494 SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002495 evaluated with infinite-precision integer arithmetic. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002496
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002497#if YYMAXDEPTH == 0
2498# undef YYMAXDEPTH
2499#endif
2500
Reid Spencer68a24bd2005-08-27 18:50:39 +00002501#ifndef YYMAXDEPTH
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002502# define YYMAXDEPTH 10000
Reid Spencer68a24bd2005-08-27 18:50:39 +00002503#endif
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002504
Reid Spencer68a24bd2005-08-27 18:50:39 +00002505
2506
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002507#if YYERROR_VERBOSE
Reid Spencer68a24bd2005-08-27 18:50:39 +00002508
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002509# ifndef yystrlen
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002510# if defined (__GLIBC__) && defined (_STRING_H)
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002511# define yystrlen strlen
2512# else
2513/* Return the length of YYSTR. */
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002514static YYSIZE_T
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002515# if defined (__STDC__) || defined (__cplusplus)
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002516yystrlen (const char *yystr)
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002517# else
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002518yystrlen (yystr)
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002519 const char *yystr;
2520# endif
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002521{
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002522 register const char *yys = yystr;
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002523
2524 while (*yys++ != '\0')
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002525 continue;
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002526
2527 return yys - yystr - 1;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002528}
2529# endif
2530# endif
2531
2532# ifndef yystpcpy
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002533# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002534# define yystpcpy stpcpy
2535# else
2536/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
2537 YYDEST. */
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002538static char *
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002539# if defined (__STDC__) || defined (__cplusplus)
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002540yystpcpy (char *yydest, const char *yysrc)
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002541# else
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002542yystpcpy (yydest, yysrc)
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002543 char *yydest;
2544 const char *yysrc;
2545# endif
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002546{
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002547 register char *yyd = yydest;
2548 register const char *yys = yysrc;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002549
2550 while ((*yyd++ = *yys++) != '\0')
2551 continue;
2552
2553 return yyd - 1;
2554}
2555# endif
2556# endif
2557
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002558#endif /* !YYERROR_VERBOSE */
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002559
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002560
2561
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002562#if YYDEBUG
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002563/*-----------------------------.
2564| Print this symbol on YYOUT. |
2565`-----------------------------*/
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002566
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002567static void
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002568#if defined (__STDC__) || defined (__cplusplus)
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002569yysymprint (FILE* yyout, int yytype, YYSTYPE yyvalue)
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002570#else
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002571yysymprint (yyout, yytype, yyvalue)
2572 FILE* yyout;
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002573 int yytype;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002574 YYSTYPE yyvalue;
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002575#endif
2576{
2577 /* Pacify ``unused variable'' warnings. */
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002578 (void) yyvalue;
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002579
2580 if (yytype < YYNTOKENS)
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002581 {
2582 YYFPRINTF (yyout, "token %s (", yytname[yytype]);
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002583# ifdef YYPRINT
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002584 YYPRINT (yyout, yytoknum[yytype], yyvalue);
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002585# endif
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002586 }
2587 else
2588 YYFPRINTF (yyout, "nterm %s (", yytname[yytype]);
2589
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002590 switch (yytype)
2591 {
2592 default:
2593 break;
2594 }
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002595 YYFPRINTF (yyout, ")");
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002596}
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002597#endif /* YYDEBUG. */
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002598
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002599
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002600/*-----------------------------------------------.
2601| Release the memory associated to this symbol. |
2602`-----------------------------------------------*/
2603
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002604static void
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002605#if defined (__STDC__) || defined (__cplusplus)
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002606yydestruct (int yytype, YYSTYPE yyvalue)
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002607#else
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002608yydestruct (yytype, yyvalue)
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002609 int yytype;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002610 YYSTYPE yyvalue;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002611#endif
2612{
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002613 /* Pacify ``unused variable'' warnings. */
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002614 (void) yyvalue;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002615
2616 switch (yytype)
2617 {
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002618 default:
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002619 break;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002620 }
2621}
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002622
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002623
2624
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002625/* The user can define YYPARSE_PARAM as the name of an argument to be passed
2626 into yyparse. The argument should have type void *.
2627 It should actually point to an object.
2628 Grammar actions can access the variable by casting it
2629 to the proper pointer type. */
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002630
2631#ifdef YYPARSE_PARAM
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002632# if defined (__STDC__) || defined (__cplusplus)
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002633# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
2634# define YYPARSE_PARAM_DECL
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002635# else
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002636# define YYPARSE_PARAM_ARG YYPARSE_PARAM
2637# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002638# endif
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002639#else /* !YYPARSE_PARAM */
2640# define YYPARSE_PARAM_ARG
2641# define YYPARSE_PARAM_DECL
2642#endif /* !YYPARSE_PARAM */
2643
2644/* Prevent warning if -Wstrict-prototypes. */
2645#ifdef __GNUC__
2646# ifdef YYPARSE_PARAM
2647int yyparse (void *);
2648# else
Reid Spencere812fb22006-01-19 01:21:04 +00002649int yyparse (void);
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002650# endif
Christopher Lamb5c104242007-04-22 20:09:11 +00002651#endif
Chris Lattner7d9801d2007-02-13 00:58:01 +00002652
Anton Korobeynikov77d0f972007-04-25 14:29:12 +00002653
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002654/* The lookahead symbol. */
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002655int yychar;
2656
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002657/* The semantic value of the lookahead symbol. */
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002658YYSTYPE yylval;
2659
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002660/* Number of parse errors so far. */
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002661int yynerrs;
2662
2663
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002664int
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002665yyparse (YYPARSE_PARAM_ARG)
2666 YYPARSE_PARAM_DECL
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002667{
2668
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002669 register int yystate;
2670 register int yyn;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002671 int yyresult;
2672 /* Number of tokens to shift before error messages enabled. */
2673 int yyerrstatus;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002674 /* Lookahead token as an internal (translated) token number. */
2675 int yychar1 = 0;
Anton Korobeynikov77d0f972007-04-25 14:29:12 +00002676
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002677 /* Three stacks and their tools:
2678 `yyss': related to states,
2679 `yyvs': related to semantic values,
2680 `yyls': related to locations.
2681
2682 Refer to the stacks thru separate pointers, to allow yyoverflow
2683 to reallocate them elsewhere. */
2684
2685 /* The state stack. */
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002686 short yyssa[YYINITDEPTH];
2687 short *yyss = yyssa;
2688 register short *yyssp;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002689
2690 /* The semantic value stack. */
2691 YYSTYPE yyvsa[YYINITDEPTH];
2692 YYSTYPE *yyvs = yyvsa;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002693 register YYSTYPE *yyvsp;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002694
2695
2696
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002697#define YYPOPSTACK (yyvsp--, yyssp--)
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002698
2699 YYSIZE_T yystacksize = YYINITDEPTH;
2700
2701 /* The variables used to return semantic value and location from the
2702 action routines. */
2703 YYSTYPE yyval;
2704
2705
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002706 /* When reducing, the number of symbols on the RHS of the reduced
2707 rule. */
2708 int yylen;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002709
2710 YYDPRINTF ((stderr, "Starting parse\n"));
2711
Reid Spencer68a24bd2005-08-27 18:50:39 +00002712 yystate = 0;
2713 yyerrstatus = 0;
2714 yynerrs = 0;
2715 yychar = YYEMPTY; /* Cause a token to be read. */
2716
2717 /* Initialize stack pointers.
2718 Waste one element of value and location stack
2719 so that they stay on the same level as the state stack.
2720 The wasted elements are never initialized. */
2721
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002722 yyssp = yyss;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002723 yyvsp = yyvs;
2724
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002725 goto yysetstate;
Jeff Cohen66c5fd62005-10-23 04:37:20 +00002726
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002727/*------------------------------------------------------------.
2728| yynewstate -- Push a new state, which is found in yystate. |
2729`------------------------------------------------------------*/
2730 yynewstate:
2731 /* In all cases, when you get here, the value and location stacks
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002732 have just been pushed. so pushing a state here evens the stacks.
2733 */
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002734 yyssp++;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002735
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002736 yysetstate:
2737 *yyssp = yystate;
2738
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002739 if (yyssp >= yyss + yystacksize - 1)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002740 {
2741 /* Get the current used size of the three stacks, in elements. */
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002742 YYSIZE_T yysize = yyssp - yyss + 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002743
2744#ifdef yyoverflow
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002745 {
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002746 /* Give user a chance to reallocate the stack. Use copies of
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002747 these so that the &'s don't force the real ones into
2748 memory. */
2749 YYSTYPE *yyvs1 = yyvs;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002750 short *yyss1 = yyss;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002751
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002752
2753 /* Each stack pointer address is followed by the size of the
2754 data in use in that stack, in bytes. This used to be a
2755 conditional around just the two extra args, but that might
2756 be undefined if yyoverflow is a macro. */
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002757 yyoverflow ("parser stack overflow",
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002758 &yyss1, yysize * sizeof (*yyssp),
2759 &yyvs1, yysize * sizeof (*yyvsp),
2760
2761 &yystacksize);
2762
2763 yyss = yyss1;
2764 yyvs = yyvs1;
2765 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00002766#else /* no yyoverflow */
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002767# ifndef YYSTACK_RELOCATE
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002768 goto yyoverflowlab;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002769# else
Reid Spencer68a24bd2005-08-27 18:50:39 +00002770 /* Extend the stack our own way. */
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002771 if (yystacksize >= YYMAXDEPTH)
2772 goto yyoverflowlab;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002773 yystacksize *= 2;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002774 if (yystacksize > YYMAXDEPTH)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002775 yystacksize = YYMAXDEPTH;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002776
2777 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002778 short *yyss1 = yyss;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002779 union yyalloc *yyptr =
2780 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
2781 if (! yyptr)
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002782 goto yyoverflowlab;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002783 YYSTACK_RELOCATE (yyss);
2784 YYSTACK_RELOCATE (yyvs);
2785
2786# undef YYSTACK_RELOCATE
2787 if (yyss1 != yyssa)
2788 YYSTACK_FREE (yyss1);
2789 }
2790# endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00002791#endif /* no yyoverflow */
2792
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002793 yyssp = yyss + yysize - 1;
2794 yyvsp = yyvs + yysize - 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002795
2796
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002797 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
2798 (unsigned long int) yystacksize));
2799
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002800 if (yyssp >= yyss + yystacksize - 1)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002801 YYABORT;
2802 }
2803
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002804 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
Reid Spencer68a24bd2005-08-27 18:50:39 +00002805
2806 goto yybackup;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002807
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002808/*-----------.
2809| yybackup. |
2810`-----------*/
2811yybackup:
Andrew Lenharth6353e052006-12-08 18:07:09 +00002812
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002813/* Do appropriate processing given the current state. */
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002814/* Read a lookahead token if we need one and don't already have one. */
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002815/* yyresume: */
Reid Spencer7780acb2007-04-16 06:56:07 +00002816
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002817 /* First try to decide what to do without reference to lookahead token. */
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002818
Reid Spencer68a24bd2005-08-27 18:50:39 +00002819 yyn = yypact[yystate];
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002820 if (yyn == YYPACT_NINF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002821 goto yydefault;
2822
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002823 /* Not known => get a lookahead token if don't already have one. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002824
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002825 /* yychar is either YYEMPTY or YYEOF
2826 or a valid token in external form. */
2827
Reid Spencer68a24bd2005-08-27 18:50:39 +00002828 if (yychar == YYEMPTY)
2829 {
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002830 YYDPRINTF ((stderr, "Reading a token: "));
Reid Spencer68a24bd2005-08-27 18:50:39 +00002831 yychar = YYLEX;
2832 }
2833
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002834 /* Convert token to internal form (in yychar1) for indexing tables with. */
2835
2836 if (yychar <= 0) /* This means end of input. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002837 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002838 yychar1 = 0;
2839 yychar = YYEOF; /* Don't call YYLEX any more. */
2840
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002841 YYDPRINTF ((stderr, "Now at end of input.\n"));
Reid Spencer68a24bd2005-08-27 18:50:39 +00002842 }
2843 else
2844 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002845 yychar1 = YYTRANSLATE (yychar);
2846
2847 /* We have to keep this `#if YYDEBUG', since we use variables
2848 which are defined only if `YYDEBUG' is set. */
2849 YYDPRINTF ((stderr, "Next token is "));
2850 YYDSYMPRINT ((stderr, yychar1, yylval));
2851 YYDPRINTF ((stderr, "\n"));
Reid Spencer68a24bd2005-08-27 18:50:39 +00002852 }
2853
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002854 /* If the proper action on seeing token YYCHAR1 is to reduce or to
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002855 detect an error, take that action. */
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002856 yyn += yychar1;
2857 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yychar1)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002858 goto yydefault;
2859 yyn = yytable[yyn];
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002860 if (yyn <= 0)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002861 {
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002862 if (yyn == 0 || yyn == YYTABLE_NINF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002863 goto yyerrlab;
2864 yyn = -yyn;
2865 goto yyreduce;
2866 }
2867
2868 if (yyn == YYFINAL)
2869 YYACCEPT;
2870
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002871 /* Shift the lookahead token. */
2872 YYDPRINTF ((stderr, "Shifting token %d (%s), ",
2873 yychar, yytname[yychar1]));
Reid Spencer9c9b63a2007-04-28 16:07:31 +00002874
2875 /* Discard the token being shifted unless it is eof. */
2876 if (yychar != YYEOF)
2877 yychar = YYEMPTY;
2878
2879 *++yyvsp = yylval;
2880
2881
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002882 /* Count tokens shifted since error; after three, turn off error
2883 status. */
2884 if (yyerrstatus)
2885 yyerrstatus--;
Christopher Lamb5c104242007-04-22 20:09:11 +00002886
Chris Lattner6cdc6822007-04-26 05:31:05 +00002887 yystate = yyn;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002888 goto yynewstate;
2889
Chris Lattner6cdc6822007-04-26 05:31:05 +00002890
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002891/*-----------------------------------------------------------.
2892| yydefault -- do the default action for the current state. |
2893`-----------------------------------------------------------*/
2894yydefault:
Reid Spencer68a24bd2005-08-27 18:50:39 +00002895 yyn = yydefact[yystate];
2896 if (yyn == 0)
2897 goto yyerrlab;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002898 goto yyreduce;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002899
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002900
2901/*-----------------------------.
2902| yyreduce -- Do a reduction. |
2903`-----------------------------*/
Reid Spencer68a24bd2005-08-27 18:50:39 +00002904yyreduce:
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002905 /* yyn is the number of a rule to reduce with. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002906 yylen = yyr2[yyn];
2907
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002908 /* If YYLEN is nonzero, implement the default value of the action:
2909 `$$ = $1'.
2910
2911 Otherwise, the following line sets YYVAL to garbage.
2912 This behavior is undocumented and Bison
2913 users should not rely upon it. Assigning to YYVAL
2914 unconditionally makes the parser a bit smaller, and it avoids a
2915 GCC warning that YYVAL may be used uninitialized. */
2916 yyval = yyvsp[1-yylen];
2917
2918
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002919
2920#if YYDEBUG
2921 /* We have to keep this `#if YYDEBUG', since we use variables which
2922 are defined only if `YYDEBUG' is set. */
2923 if (yydebug)
2924 {
2925 int yyi;
2926
2927 YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
2928 yyn - 1, yyrline[yyn]);
2929
2930 /* Print the symbols being reduced, and their result. */
2931 for (yyi = yyprhs[yyn]; yyrhs[yyi] >= 0; yyi++)
2932 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
2933 YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
2934 }
2935#endif
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002936 switch (yyn)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002937 {
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002938 case 29:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002939#line 1117 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
2940 { yyval.IPredicate = ICmpInst::ICMP_EQ; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002941 break;
Reid Spencer41dff5e2007-01-26 08:05:27 +00002942
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002943 case 30:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002944#line 1117 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
2945 { yyval.IPredicate = ICmpInst::ICMP_NE; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002946 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00002947
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002948 case 31:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002949#line 1118 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
2950 { yyval.IPredicate = ICmpInst::ICMP_SLT; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002951 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00002952
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002953 case 32:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002954#line 1118 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
2955 { yyval.IPredicate = ICmpInst::ICMP_SGT; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002956 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00002957
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002958 case 33:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002959#line 1119 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
2960 { yyval.IPredicate = ICmpInst::ICMP_SLE; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002961 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00002962
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002963 case 34:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002964#line 1119 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
2965 { yyval.IPredicate = ICmpInst::ICMP_SGE; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002966 break;
2967
2968 case 35:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002969#line 1120 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
2970 { yyval.IPredicate = ICmpInst::ICMP_ULT; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002971 break;
2972
2973 case 36:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002974#line 1120 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
2975 { yyval.IPredicate = ICmpInst::ICMP_UGT; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002976 break;
2977
2978 case 37:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002979#line 1121 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
2980 { yyval.IPredicate = ICmpInst::ICMP_ULE; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002981 break;
2982
2983 case 38:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002984#line 1121 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
2985 { yyval.IPredicate = ICmpInst::ICMP_UGE; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002986 break;
2987
2988 case 39:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002989#line 1125 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
2990 { yyval.FPredicate = FCmpInst::FCMP_OEQ; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002991 break;
2992
2993 case 40:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002994#line 1125 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
2995 { yyval.FPredicate = FCmpInst::FCMP_ONE; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002996 break;
2997
2998 case 41:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00002999#line 1126 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3000 { yyval.FPredicate = FCmpInst::FCMP_OLT; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003001 break;
3002
3003 case 42:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003004#line 1126 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3005 { yyval.FPredicate = FCmpInst::FCMP_OGT; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003006 break;
3007
3008 case 43:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003009#line 1127 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3010 { yyval.FPredicate = FCmpInst::FCMP_OLE; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003011 break;
3012
3013 case 44:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003014#line 1127 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3015 { yyval.FPredicate = FCmpInst::FCMP_OGE; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003016 break;
3017
3018 case 45:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003019#line 1128 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3020 { yyval.FPredicate = FCmpInst::FCMP_ORD; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003021 break;
3022
3023 case 46:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003024#line 1128 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3025 { yyval.FPredicate = FCmpInst::FCMP_UNO; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003026 break;
3027
3028 case 47:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003029#line 1129 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3030 { yyval.FPredicate = FCmpInst::FCMP_UEQ; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003031 break;
3032
3033 case 48:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003034#line 1129 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3035 { yyval.FPredicate = FCmpInst::FCMP_UNE; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003036 break;
3037
3038 case 49:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003039#line 1130 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3040 { yyval.FPredicate = FCmpInst::FCMP_ULT; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003041 break;
3042
3043 case 50:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003044#line 1130 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3045 { yyval.FPredicate = FCmpInst::FCMP_UGT; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003046 break;
3047
3048 case 51:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003049#line 1131 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3050 { yyval.FPredicate = FCmpInst::FCMP_ULE; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003051 break;
3052
3053 case 52:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003054#line 1131 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3055 { yyval.FPredicate = FCmpInst::FCMP_UGE; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003056 break;
3057
3058 case 53:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003059#line 1132 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3060 { yyval.FPredicate = FCmpInst::FCMP_TRUE; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003061 break;
3062
3063 case 54:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003064#line 1133 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3065 { yyval.FPredicate = FCmpInst::FCMP_FALSE; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003066 break;
3067
3068 case 61:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003069#line 1142 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3070 { yyval.StrVal = 0; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003071 break;
3072
3073 case 62:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003074#line 1146 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003075 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003076 yyval.StrVal = yyvsp[-1].StrVal;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003077 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003078 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003079 break;
3080
3081 case 63:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003082#line 1150 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003083 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003084 yyval.StrVal = 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003085 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003086 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003087 break;
3088
3089 case 67:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003090#line 1158 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003091 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003092 yyval.StrVal = 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003093 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003094 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003095 break;
3096
3097 case 68:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003098#line 1163 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003099 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003100 yyval.StrVal = yyvsp[-1].StrVal;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003101 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003102 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003103 break;
3104
3105 case 69:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003106#line 1169 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3107 { yyval.Linkage = GlobalValue::InternalLinkage; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003108 break;
3109
3110 case 70:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003111#line 1170 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3112 { yyval.Linkage = GlobalValue::WeakLinkage; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003113 break;
3114
3115 case 71:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003116#line 1171 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3117 { yyval.Linkage = GlobalValue::LinkOnceLinkage; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003118 break;
3119
3120 case 72:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003121#line 1172 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3122 { yyval.Linkage = GlobalValue::AppendingLinkage; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003123 break;
3124
3125 case 73:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003126#line 1173 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3127 { yyval.Linkage = GlobalValue::DLLExportLinkage; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003128 break;
3129
3130 case 74:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003131#line 1177 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3132 { yyval.Linkage = GlobalValue::DLLImportLinkage; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003133 break;
3134
3135 case 75:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003136#line 1178 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3137 { yyval.Linkage = GlobalValue::ExternalWeakLinkage; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003138 break;
3139
3140 case 76:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003141#line 1179 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3142 { yyval.Linkage = GlobalValue::ExternalLinkage; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003143 break;
3144
3145 case 77:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003146#line 1183 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3147 { yyval.Visibility = GlobalValue::DefaultVisibility; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003148 break;
3149
3150 case 78:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003151#line 1184 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3152 { yyval.Visibility = GlobalValue::DefaultVisibility; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003153 break;
3154
3155 case 79:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003156#line 1185 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3157 { yyval.Visibility = GlobalValue::HiddenVisibility; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003158 break;
3159
3160 case 80:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003161#line 1189 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3162 { yyval.Linkage = GlobalValue::ExternalLinkage; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003163 break;
3164
3165 case 81:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003166#line 1190 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3167 { yyval.Linkage = GlobalValue::DLLImportLinkage; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003168 break;
3169
3170 case 82:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003171#line 1191 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3172 { yyval.Linkage = GlobalValue::ExternalWeakLinkage; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003173 break;
3174
3175 case 83:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003176#line 1195 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3177 { yyval.Linkage = GlobalValue::ExternalLinkage; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003178 break;
3179
3180 case 84:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003181#line 1196 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3182 { yyval.Linkage = GlobalValue::InternalLinkage; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003183 break;
3184
3185 case 85:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003186#line 1197 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3187 { yyval.Linkage = GlobalValue::LinkOnceLinkage; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003188 break;
3189
3190 case 86:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003191#line 1198 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3192 { yyval.Linkage = GlobalValue::WeakLinkage; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003193 break;
3194
3195 case 87:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003196#line 1199 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3197 { yyval.Linkage = GlobalValue::DLLExportLinkage; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003198 break;
3199
3200 case 88:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003201#line 1203 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3202 { yyval.Linkage = GlobalValue::ExternalLinkage; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003203 break;
3204
3205 case 89:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003206#line 1204 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3207 { yyval.Linkage = GlobalValue::WeakLinkage; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003208 break;
3209
3210 case 90:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003211#line 1205 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3212 { yyval.Linkage = GlobalValue::InternalLinkage; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003213 break;
3214
3215 case 91:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003216#line 1208 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3217 { yyval.UIntVal = CallingConv::C; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003218 break;
3219
3220 case 92:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003221#line 1209 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3222 { yyval.UIntVal = CallingConv::C; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003223 break;
3224
3225 case 93:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003226#line 1210 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3227 { yyval.UIntVal = CallingConv::Fast; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003228 break;
3229
3230 case 94:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003231#line 1211 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3232 { yyval.UIntVal = CallingConv::Cold; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003233 break;
3234
3235 case 95:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003236#line 1212 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3237 { yyval.UIntVal = CallingConv::X86_StdCall; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003238 break;
3239
3240 case 96:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003241#line 1213 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3242 { yyval.UIntVal = CallingConv::X86_FastCall; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003243 break;
3244
3245 case 97:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003246#line 1214 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003247 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003248 if ((unsigned)yyvsp[0].UInt64Val != yyvsp[0].UInt64Val)
Reid Spencerb5334b02007-02-05 10:18:06 +00003249 GEN_ERROR("Calling conv too large");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003250 yyval.UIntVal = yyvsp[0].UInt64Val;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003251 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003252 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003253 break;
3254
3255 case 98:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003256#line 1221 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3257 { yyval.ParamAttrs = ParamAttr::ZExt; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003258 break;
3259
3260 case 99:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003261#line 1222 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3262 { yyval.ParamAttrs = ParamAttr::SExt; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003263 break;
3264
3265 case 100:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003266#line 1223 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3267 { yyval.ParamAttrs = ParamAttr::InReg; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003268 break;
3269
3270 case 101:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003271#line 1224 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3272 { yyval.ParamAttrs = ParamAttr::StructRet; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003273 break;
3274
3275 case 102:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003276#line 1227 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3277 { yyval.ParamAttrs = ParamAttr::None; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003278 break;
3279
3280 case 103:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003281#line 1228 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003282 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003283 yyval.ParamAttrs = yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs;
3284 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003285 break;
3286
3287 case 104:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003288#line 1233 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3289 { yyval.ParamAttrs = ParamAttr::NoReturn; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003290 break;
3291
3292 case 105:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003293#line 1234 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3294 { yyval.ParamAttrs = ParamAttr::NoUnwind; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003295 break;
3296
3297 case 107:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003298#line 1238 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3299 { yyval.ParamAttrs = ParamAttr::None; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003300 break;
3301
3302 case 108:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003303#line 1239 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003304 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003305 yyval.ParamAttrs = yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs;
3306 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003307 break;
3308
3309 case 109:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003310#line 1246 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3311 { yyval.UIntVal = 0; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003312 break;
3313
3314 case 110:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003315#line 1247 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003316 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003317 yyval.UIntVal = yyvsp[0].UInt64Val;
3318 if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal))
Reid Spencerb5334b02007-02-05 10:18:06 +00003319 GEN_ERROR("Alignment must be a power of two");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003320 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003321}
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003322 break;
3323
3324 case 111:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003325#line 1253 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3326 { yyval.UIntVal = 0; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003327 break;
3328
3329 case 112:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003330#line 1254 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003331 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003332 yyval.UIntVal = yyvsp[0].UInt64Val;
3333 if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal))
Reid Spencer66728ef2007-03-20 01:13:36 +00003334 GEN_ERROR("Alignment must be a power of two");
3335 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003336}
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003337 break;
3338
3339 case 113:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003340#line 1262 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003341 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003342 for (unsigned i = 0, e = strlen(yyvsp[0].StrVal); i != e; ++i)
3343 if (yyvsp[0].StrVal[i] == '"' || yyvsp[0].StrVal[i] == '\\')
Reid Spencerb5334b02007-02-05 10:18:06 +00003344 GEN_ERROR("Invalid character in section name");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003345 yyval.StrVal = yyvsp[0].StrVal;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003346 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003347}
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003348 break;
3349
3350 case 114:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003351#line 1270 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3352 { yyval.StrVal = 0; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003353 break;
3354
3355 case 115:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003356#line 1271 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3357 { yyval.StrVal = yyvsp[0].StrVal; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003358 break;
3359
3360 case 116:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003361#line 1276 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3362 {}
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003363 break;
3364
3365 case 117:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003366#line 1277 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
3367 {}
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003368 break;
3369
3370 case 118:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003371#line 1278 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003372 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003373 CurGV->setSection(yyvsp[0].StrVal);
3374 free(yyvsp[0].StrVal);
Reid Spencer6f407902007-01-13 05:00:46 +00003375 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003376 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003377 break;
3378
3379 case 119:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003380#line 1283 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003381 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003382 if (yyvsp[0].UInt64Val != 0 && !isPowerOf2_32(yyvsp[0].UInt64Val))
Reid Spencerb5334b02007-02-05 10:18:06 +00003383 GEN_ERROR("Alignment must be a power of two");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003384 CurGV->setAlignment(yyvsp[0].UInt64Val);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003385 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003386 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003387 break;
3388
3389 case 124:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003390#line 1299 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003391 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003392 yyval.TypeVal = new PATypeHolder(OpaqueType::get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00003393 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003394 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003395 break;
3396
3397 case 125:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003398#line 1303 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003399 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003400 yyval.TypeVal = new PATypeHolder(yyvsp[0].PrimType);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003401 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003402 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003403 break;
3404
3405 case 126:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003406#line 1307 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003407 { // Pointer type?
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003408 if (*yyvsp[-1].TypeVal == Type::LabelTy)
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003409 GEN_ERROR("Cannot form a pointer to a basic block");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003410 yyval.TypeVal = new PATypeHolder(HandleUpRefs(PointerType::get(*yyvsp[-1].TypeVal)));
3411 delete yyvsp[-1].TypeVal;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003412 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003413 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003414 break;
3415
3416 case 127:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003417#line 1314 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003418 { // Named types are also simple types...
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003419 const Type* tmp = getTypeVal(yyvsp[0].ValIDVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003420 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003421 yyval.TypeVal = new PATypeHolder(tmp);
3422 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003423 break;
3424
3425 case 128:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003426#line 1319 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003427 { // Type UpReference
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003428 if (yyvsp[0].UInt64Val > (uint64_t)~0U) GEN_ERROR("Value out of range");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003429 OpaqueType *OT = OpaqueType::get(); // Use temporary placeholder
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003430 UpRefs.push_back(UpRefRecord((unsigned)yyvsp[0].UInt64Val, OT)); // Add to vector...
3431 yyval.TypeVal = new PATypeHolder(OT);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003432 UR_OUT("New Upreference!\n");
3433 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003434 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003435 break;
3436
3437 case 129:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003438#line 1327 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003439 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00003440 std::vector<const Type*> Params;
Christopher Lamb5c104242007-04-22 20:09:11 +00003441 ParamAttrsVector Attrs;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003442 if (yyvsp[0].ParamAttrs != ParamAttr::None) {
3443 ParamAttrsWithIndex X; X.index = 0; X.attrs = yyvsp[0].ParamAttrs;
Christopher Lamb5c104242007-04-22 20:09:11 +00003444 Attrs.push_back(X);
3445 }
Reid Spencer7b5d4662007-04-09 06:16:21 +00003446 unsigned index = 1;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003447 TypeWithAttrsList::iterator I = yyvsp[-2].TypeWithAttrsList->begin(), E = yyvsp[-2].TypeWithAttrsList->end();
Reid Spencer7b5d4662007-04-09 06:16:21 +00003448 for (; I != E; ++I, ++index) {
Reid Spencer66728ef2007-03-20 01:13:36 +00003449 const Type *Ty = I->Ty->get();
Reid Spencer66728ef2007-03-20 01:13:36 +00003450 Params.push_back(Ty);
3451 if (Ty != Type::VoidTy)
Christopher Lamb5c104242007-04-22 20:09:11 +00003452 if (I->Attrs != ParamAttr::None) {
3453 ParamAttrsWithIndex X; X.index = index; X.attrs = I->Attrs;
3454 Attrs.push_back(X);
3455 }
Reid Spencer41dff5e2007-01-26 08:05:27 +00003456 }
3457 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
3458 if (isVarArg) Params.pop_back();
3459
Reid Spencer7b5d4662007-04-09 06:16:21 +00003460 ParamAttrsList *ActualAttrs = 0;
3461 if (!Attrs.empty())
Christopher Lamb5c104242007-04-22 20:09:11 +00003462 ActualAttrs = ParamAttrsList::get(Attrs);
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003463 FunctionType *FT = FunctionType::get(*yyvsp[-4].TypeVal, Params, isVarArg, ActualAttrs);
3464 delete yyvsp[-2].TypeWithAttrsList; // Delete the argument list
3465 delete yyvsp[-4].TypeVal; // Delete the return type handle
3466 yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT));
Reid Spencere4d87aa2006-12-23 06:05:41 +00003467 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003468 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003469 break;
3470
3471 case 130:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003472#line 1357 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003473 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003474 std::vector<const Type*> Params;
Christopher Lamb5c104242007-04-22 20:09:11 +00003475 ParamAttrsVector Attrs;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003476 if (yyvsp[0].ParamAttrs != ParamAttr::None) {
3477 ParamAttrsWithIndex X; X.index = 0; X.attrs = yyvsp[0].ParamAttrs;
Christopher Lamb5c104242007-04-22 20:09:11 +00003478 Attrs.push_back(X);
3479 }
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003480 TypeWithAttrsList::iterator I = yyvsp[-2].TypeWithAttrsList->begin(), E = yyvsp[-2].TypeWithAttrsList->end();
Reid Spencer7b5d4662007-04-09 06:16:21 +00003481 unsigned index = 1;
3482 for ( ; I != E; ++I, ++index) {
Reid Spencer66728ef2007-03-20 01:13:36 +00003483 const Type* Ty = I->Ty->get();
Reid Spencer66728ef2007-03-20 01:13:36 +00003484 Params.push_back(Ty);
3485 if (Ty != Type::VoidTy)
Christopher Lamb5c104242007-04-22 20:09:11 +00003486 if (I->Attrs != ParamAttr::None) {
3487 ParamAttrsWithIndex X; X.index = index; X.attrs = I->Attrs;
3488 Attrs.push_back(X);
3489 }
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003490 }
3491 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
3492 if (isVarArg) Params.pop_back();
3493
Reid Spencer7b5d4662007-04-09 06:16:21 +00003494 ParamAttrsList *ActualAttrs = 0;
3495 if (!Attrs.empty())
Christopher Lamb5c104242007-04-22 20:09:11 +00003496 ActualAttrs = ParamAttrsList::get(Attrs);
Reid Spencer7b5d4662007-04-09 06:16:21 +00003497
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003498 FunctionType *FT = FunctionType::get(yyvsp[-4].PrimType, Params, isVarArg, ActualAttrs);
3499 delete yyvsp[-2].TypeWithAttrsList; // Delete the argument list
3500 yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT));
Reid Spencer41dff5e2007-01-26 08:05:27 +00003501 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003502 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003503 break;
3504
3505 case 131:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003506#line 1388 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003507 { // Sized array type?
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003508 yyval.TypeVal = new PATypeHolder(HandleUpRefs(ArrayType::get(*yyvsp[-1].TypeVal, (unsigned)yyvsp[-3].UInt64Val)));
3509 delete yyvsp[-1].TypeVal;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003510 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003511 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003512 break;
3513
3514 case 132:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003515#line 1393 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003516 { // Vector type?
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003517 const llvm::Type* ElemTy = yyvsp[-1].TypeVal->get();
3518 if ((unsigned)yyvsp[-3].UInt64Val != yyvsp[-3].UInt64Val)
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003519 GEN_ERROR("Unsigned result not equal to signed result");
3520 if (!ElemTy->isFloatingPoint() && !ElemTy->isInteger())
Reid Spencer9d6565a2007-02-15 02:26:10 +00003521 GEN_ERROR("Element type of a VectorType must be primitive");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003522 if (!isPowerOf2_32(yyvsp[-3].UInt64Val))
Reid Spencerb5334b02007-02-05 10:18:06 +00003523 GEN_ERROR("Vector length should be a power of 2");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003524 yyval.TypeVal = new PATypeHolder(HandleUpRefs(VectorType::get(*yyvsp[-1].TypeVal, (unsigned)yyvsp[-3].UInt64Val)));
3525 delete yyvsp[-1].TypeVal;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003526 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003527 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003528 break;
3529
3530 case 133:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003531#line 1405 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003532 { // Structure type?
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003533 std::vector<const Type*> Elements;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003534 for (std::list<llvm::PATypeHolder>::iterator I = yyvsp[-1].TypeList->begin(),
3535 E = yyvsp[-1].TypeList->end(); I != E; ++I)
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003536 Elements.push_back(*I);
3537
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003538 yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
3539 delete yyvsp[-1].TypeList;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003540 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003541 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003542 break;
3543
3544 case 134:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003545#line 1415 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003546 { // Empty structure type?
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003547 yyval.TypeVal = new PATypeHolder(StructType::get(std::vector<const Type*>()));
Reid Spencer14310612006-12-31 05:40:51 +00003548 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003549 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003550 break;
3551
3552 case 135:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003553#line 1419 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003554 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00003555 std::vector<const Type*> Elements;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003556 for (std::list<llvm::PATypeHolder>::iterator I = yyvsp[-2].TypeList->begin(),
3557 E = yyvsp[-2].TypeList->end(); I != E; ++I)
Reid Spencer41dff5e2007-01-26 08:05:27 +00003558 Elements.push_back(*I);
3559
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003560 yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true)));
3561 delete yyvsp[-2].TypeList;
Reid Spencer14310612006-12-31 05:40:51 +00003562 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003563 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003564 break;
3565
3566 case 136:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003567#line 1429 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003568 { // Empty structure type?
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003569 yyval.TypeVal = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
Reid Spencer41dff5e2007-01-26 08:05:27 +00003570 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003571 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003572 break;
3573
3574 case 137:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003575#line 1436 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003576 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003577 yyval.TypeWithAttrs.Ty = yyvsp[-1].TypeVal;
3578 yyval.TypeWithAttrs.Attrs = yyvsp[0].ParamAttrs;
3579 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003580 break;
3581
3582 case 138:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003583#line 1443 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003584 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003585 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003586 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
3587 if (!(*yyvsp[0].TypeVal)->isFirstClassType())
Reid Spencerb5334b02007-02-05 10:18:06 +00003588 GEN_ERROR("LLVM functions cannot return aggregate types");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003589 yyval.TypeVal = yyvsp[0].TypeVal;
3590 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003591 break;
3592
3593 case 139:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003594#line 1450 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003595 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003596 yyval.TypeVal = new PATypeHolder(Type::VoidTy);
3597 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003598 break;
3599
3600 case 140:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003601#line 1455 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003602 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003603 yyval.TypeWithAttrsList = new TypeWithAttrsList();
3604 yyval.TypeWithAttrsList->push_back(yyvsp[0].TypeWithAttrs);
Reid Spencer6f407902007-01-13 05:00:46 +00003605 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003606 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003607 break;
3608
3609 case 141:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003610#line 1460 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003611 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003612 (yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList)->push_back(yyvsp[0].TypeWithAttrs);
Reid Spencer3da59db2006-11-27 01:05:10 +00003613 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003614 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003615 break;
3616
3617 case 143:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003618#line 1468 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003619 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003620 yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList;
Reid Spencer18da0722007-04-11 02:44:20 +00003621 TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003622 TWA.Ty = new PATypeHolder(Type::VoidTy);
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003623 yyval.TypeWithAttrsList->push_back(TWA);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003624 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003625 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003626 break;
3627
3628 case 144:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003629#line 1475 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003630 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003631 yyval.TypeWithAttrsList = new TypeWithAttrsList;
Reid Spencer18da0722007-04-11 02:44:20 +00003632 TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003633 TWA.Ty = new PATypeHolder(Type::VoidTy);
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003634 yyval.TypeWithAttrsList->push_back(TWA);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003635 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003636 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003637 break;
3638
3639 case 145:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003640#line 1482 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003641 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003642 yyval.TypeWithAttrsList = new TypeWithAttrsList();
Reid Spencer41dff5e2007-01-26 08:05:27 +00003643 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003644 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003645 break;
3646
3647 case 146:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003648#line 1490 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003649 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003650 yyval.TypeList = new std::list<PATypeHolder>();
3651 yyval.TypeList->push_back(*yyvsp[0].TypeVal);
3652 delete yyvsp[0].TypeVal;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003653 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003654 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003655 break;
3656
3657 case 147:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003658#line 1496 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003659 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003660 (yyval.TypeList=yyvsp[-2].TypeList)->push_back(*yyvsp[0].TypeVal);
3661 delete yyvsp[0].TypeVal;
Reid Spencer3da59db2006-11-27 01:05:10 +00003662 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003663 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003664 break;
3665
3666 case 148:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003667#line 1508 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003668 { // Nonempty unsized arr
Reid Spencer14310612006-12-31 05:40:51 +00003669 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003670 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
3671 const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-3].TypeVal->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003672 if (ATy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003673 GEN_ERROR("Cannot make array constant with type: '" +
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003674 (*yyvsp[-3].TypeVal)->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003675 const Type *ETy = ATy->getElementType();
3676 int NumElements = ATy->getNumElements();
3677
3678 // Verify that we have the correct size...
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003679 if (NumElements != -1 && NumElements != (int)yyvsp[-1].ConstVector->size())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003680 GEN_ERROR("Type mismatch: constant sized array initialized with " +
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003681 utostr(yyvsp[-1].ConstVector->size()) + " arguments, but has size of " +
Reid Spencerb5334b02007-02-05 10:18:06 +00003682 itostr(NumElements) + "");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003683
3684 // Verify all elements are correct type!
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003685 for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
3686 if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003687 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
3688 ETy->getDescription() +"' as required!\nIt is of type '"+
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003689 (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003690 }
3691
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003692 yyval.ConstVal = ConstantArray::get(ATy, *yyvsp[-1].ConstVector);
3693 delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003694 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003695 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003696 break;
3697
3698 case 149:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003699#line 1536 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003700 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003701 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003702 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
3703 const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-2].TypeVal->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003704 if (ATy == 0)
3705 GEN_ERROR("Cannot make array constant with type: '" +
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003706 (*yyvsp[-2].TypeVal)->getDescription() + "'");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003707
Andrew Lenharth6353e052006-12-08 18:07:09 +00003708 int NumElements = ATy->getNumElements();
3709 if (NumElements != -1 && NumElements != 0)
3710 GEN_ERROR("Type mismatch: constant sized array initialized with 0"
Reid Spencerb5334b02007-02-05 10:18:06 +00003711 " arguments, but has size of " + itostr(NumElements) +"");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003712 yyval.ConstVal = ConstantArray::get(ATy, std::vector<Constant*>());
3713 delete yyvsp[-2].TypeVal;
Reid Spencer61c83e02006-08-18 08:43:06 +00003714 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003715 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003716 break;
3717
3718 case 150:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003719#line 1552 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003720 {
Reid Spencer14310612006-12-31 05:40:51 +00003721 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003722 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
3723 const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-2].TypeVal->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003724 if (ATy == 0)
3725 GEN_ERROR("Cannot make array constant with type: '" +
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003726 (*yyvsp[-2].TypeVal)->getDescription() + "'");
Reid Spencer61c83e02006-08-18 08:43:06 +00003727
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003728 int NumElements = ATy->getNumElements();
3729 const Type *ETy = ATy->getElementType();
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003730 char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true);
3731 if (NumElements != -1 && NumElements != (EndStr-yyvsp[0].StrVal))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003732 GEN_ERROR("Can't build string constant of size " +
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003733 itostr((int)(EndStr-yyvsp[0].StrVal)) +
Reid Spencerb5334b02007-02-05 10:18:06 +00003734 " when array has size " + itostr(NumElements) + "");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003735 std::vector<Constant*> Vals;
3736 if (ETy == Type::Int8Ty) {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003737 for (unsigned char *C = (unsigned char *)yyvsp[0].StrVal;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003738 C != (unsigned char*)EndStr; ++C)
3739 Vals.push_back(ConstantInt::get(ETy, *C));
3740 } else {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003741 free(yyvsp[0].StrVal);
Reid Spencerb5334b02007-02-05 10:18:06 +00003742 GEN_ERROR("Cannot build string arrays of non byte sized elements");
Andrew Lenharth6353e052006-12-08 18:07:09 +00003743 }
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003744 free(yyvsp[0].StrVal);
3745 yyval.ConstVal = ConstantArray::get(ATy, Vals);
3746 delete yyvsp[-2].TypeVal;
Reid Spencer61c83e02006-08-18 08:43:06 +00003747 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003748 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003749 break;
3750
3751 case 151:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003752#line 1581 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003753 { // Nonempty unsized arr
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003754 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003755 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
3756 const VectorType *PTy = dyn_cast<VectorType>(yyvsp[-3].TypeVal->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003757 if (PTy == 0)
3758 GEN_ERROR("Cannot make packed constant with type: '" +
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003759 (*yyvsp[-3].TypeVal)->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003760 const Type *ETy = PTy->getElementType();
3761 int NumElements = PTy->getNumElements();
Reid Spencer41dff5e2007-01-26 08:05:27 +00003762
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003763 // Verify that we have the correct size...
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003764 if (NumElements != -1 && NumElements != (int)yyvsp[-1].ConstVector->size())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003765 GEN_ERROR("Type mismatch: constant sized packed initialized with " +
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003766 utostr(yyvsp[-1].ConstVector->size()) + " arguments, but has size of " +
Reid Spencerb5334b02007-02-05 10:18:06 +00003767 itostr(NumElements) + "");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003768
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003769 // Verify all elements are correct type!
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003770 for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
3771 if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003772 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
3773 ETy->getDescription() +"' as required!\nIt is of type '"+
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003774 (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003775 }
Reid Spencer41dff5e2007-01-26 08:05:27 +00003776
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003777 yyval.ConstVal = ConstantVector::get(PTy, *yyvsp[-1].ConstVector);
3778 delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003779 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003780 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003781 break;
3782
3783 case 152:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003784#line 1609 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003785 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003786 const StructType *STy = dyn_cast<StructType>(yyvsp[-3].TypeVal->get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00003787 if (STy == 0)
3788 GEN_ERROR("Cannot make struct constant with type: '" +
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003789 (*yyvsp[-3].TypeVal)->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003790
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003791 if (yyvsp[-1].ConstVector->size() != STy->getNumContainedTypes())
Reid Spencerb5334b02007-02-05 10:18:06 +00003792 GEN_ERROR("Illegal number of initializers for structure type");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003793
3794 // Check to ensure that constants are compatible with the type initializer!
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003795 for (unsigned i = 0, e = yyvsp[-1].ConstVector->size(); i != e; ++i)
3796 if ((*yyvsp[-1].ConstVector)[i]->getType() != STy->getElementType(i))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003797 GEN_ERROR("Expected type '" +
3798 STy->getElementType(i)->getDescription() +
3799 "' for element #" + utostr(i) +
Reid Spencerb5334b02007-02-05 10:18:06 +00003800 " of structure initializer");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003801
3802 // Check to ensure that Type is not packed
3803 if (STy->isPacked())
Chris Lattner6cdc6822007-04-26 05:31:05 +00003804 GEN_ERROR("Unpacked Initializer to vector type '" +
3805 STy->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003806
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003807 yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-1].ConstVector);
3808 delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003809 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003810 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003811 break;
3812
3813 case 153:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003814#line 1635 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003815 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003816 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003817 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
3818 const StructType *STy = dyn_cast<StructType>(yyvsp[-2].TypeVal->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003819 if (STy == 0)
3820 GEN_ERROR("Cannot make struct constant with type: '" +
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003821 (*yyvsp[-2].TypeVal)->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003822
3823 if (STy->getNumContainedTypes() != 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00003824 GEN_ERROR("Illegal number of initializers for structure type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003825
3826 // Check to ensure that Type is not packed
3827 if (STy->isPacked())
Chris Lattner6cdc6822007-04-26 05:31:05 +00003828 GEN_ERROR("Unpacked Initializer to vector type '" +
3829 STy->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003830
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003831 yyval.ConstVal = ConstantStruct::get(STy, std::vector<Constant*>());
3832 delete yyvsp[-2].TypeVal;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003833 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003834 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003835 break;
3836
3837 case 154:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003838#line 1655 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003839 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003840 const StructType *STy = dyn_cast<StructType>(yyvsp[-5].TypeVal->get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00003841 if (STy == 0)
3842 GEN_ERROR("Cannot make struct constant with type: '" +
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003843 (*yyvsp[-5].TypeVal)->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003844
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003845 if (yyvsp[-2].ConstVector->size() != STy->getNumContainedTypes())
Reid Spencerb5334b02007-02-05 10:18:06 +00003846 GEN_ERROR("Illegal number of initializers for structure type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003847
3848 // Check to ensure that constants are compatible with the type initializer!
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003849 for (unsigned i = 0, e = yyvsp[-2].ConstVector->size(); i != e; ++i)
3850 if ((*yyvsp[-2].ConstVector)[i]->getType() != STy->getElementType(i))
Reid Spencer41dff5e2007-01-26 08:05:27 +00003851 GEN_ERROR("Expected type '" +
3852 STy->getElementType(i)->getDescription() +
3853 "' for element #" + utostr(i) +
Reid Spencerb5334b02007-02-05 10:18:06 +00003854 " of structure initializer");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003855
3856 // Check to ensure that Type is packed
3857 if (!STy->isPacked())
Chris Lattner32980692007-02-19 07:44:24 +00003858 GEN_ERROR("Vector initializer to non-vector type '" +
3859 STy->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003860
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003861 yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-2].ConstVector);
3862 delete yyvsp[-5].TypeVal; delete yyvsp[-2].ConstVector;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003863 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003864 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003865 break;
3866
3867 case 155:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003868#line 1681 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003869 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00003870 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003871 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
3872 const StructType *STy = dyn_cast<StructType>(yyvsp[-4].TypeVal->get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00003873 if (STy == 0)
3874 GEN_ERROR("Cannot make struct constant with type: '" +
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003875 (*yyvsp[-4].TypeVal)->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003876
3877 if (STy->getNumContainedTypes() != 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00003878 GEN_ERROR("Illegal number of initializers for structure type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003879
3880 // Check to ensure that Type is packed
3881 if (!STy->isPacked())
Chris Lattner32980692007-02-19 07:44:24 +00003882 GEN_ERROR("Vector initializer to non-vector type '" +
3883 STy->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003884
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003885 yyval.ConstVal = ConstantStruct::get(STy, std::vector<Constant*>());
3886 delete yyvsp[-4].TypeVal;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003887 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003888 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003889 break;
3890
3891 case 156:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003892#line 1701 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003893 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00003894 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003895 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3896 const PointerType *PTy = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003897 if (PTy == 0)
3898 GEN_ERROR("Cannot make null pointer constant with type: '" +
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003899 (*yyvsp[-1].TypeVal)->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003900
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003901 yyval.ConstVal = ConstantPointerNull::get(PTy);
3902 delete yyvsp[-1].TypeVal;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003903 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003904 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003905 break;
3906
3907 case 157:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003908#line 1713 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003909 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00003910 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003911 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3912 yyval.ConstVal = UndefValue::get(yyvsp[-1].TypeVal->get());
3913 delete yyvsp[-1].TypeVal;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003914 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003915 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003916 break;
3917
3918 case 158:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003919#line 1720 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003920 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003921 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003922 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3923 const PointerType *Ty = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003924 if (Ty == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00003925 GEN_ERROR("Global const reference must be a pointer type");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003926
3927 // ConstExprs can exist in the body of a function, thus creating
3928 // GlobalValues whenever they refer to a variable. Because we are in
Reid Spencer93c40032007-03-19 18:40:50 +00003929 // the context of a function, getExistingVal will search the functions
Reid Spencer68a24bd2005-08-27 18:50:39 +00003930 // symbol table instead of the module symbol table for the global symbol,
3931 // which throws things all off. To get around this, we just tell
Reid Spencer93c40032007-03-19 18:40:50 +00003932 // getExistingVal that we are at global scope here.
Reid Spencer68a24bd2005-08-27 18:50:39 +00003933 //
3934 Function *SavedCurFn = CurFun.CurrentFunction;
3935 CurFun.CurrentFunction = 0;
3936
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003937 Value *V = getExistingVal(Ty, yyvsp[0].ValIDVal);
Reid Spencer5b7e7532006-09-28 19:28:24 +00003938 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00003939
3940 CurFun.CurrentFunction = SavedCurFn;
3941
3942 // If this is an initializer for a constant pointer, which is referencing a
3943 // (currently) undefined variable, create a stub now that shall be replaced
3944 // in the future with the right type of variable.
3945 //
3946 if (V == 0) {
Reid Spencera9720f52007-02-05 17:04:00 +00003947 assert(isa<PointerType>(Ty) && "Globals may only be used as pointers!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003948 const PointerType *PT = cast<PointerType>(Ty);
3949
3950 // First check to see if the forward references value is already created!
3951 PerModuleInfo::GlobalRefsType::iterator I =
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003952 CurModule.GlobalRefs.find(std::make_pair(PT, yyvsp[0].ValIDVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003953
3954 if (I != CurModule.GlobalRefs.end()) {
3955 V = I->second; // Placeholder already exists, use it...
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003956 yyvsp[0].ValIDVal.destroy();
Reid Spencer68a24bd2005-08-27 18:50:39 +00003957 } else {
3958 std::string Name;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003959 if (yyvsp[0].ValIDVal.Type == ValID::GlobalName)
3960 Name = yyvsp[0].ValIDVal.Name;
3961 else if (yyvsp[0].ValIDVal.Type != ValID::GlobalID)
Reid Spencer41dff5e2007-01-26 08:05:27 +00003962 GEN_ERROR("Invalid reference to global");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003963
3964 // Create the forward referenced global.
3965 GlobalValue *GV;
3966 if (const FunctionType *FTy =
3967 dyn_cast<FunctionType>(PT->getElementType())) {
Chris Lattner6cdc6822007-04-26 05:31:05 +00003968 GV = new Function(FTy, GlobalValue::ExternalWeakLinkage, Name,
Reid Spencer68a24bd2005-08-27 18:50:39 +00003969 CurModule.CurrentModule);
3970 } else {
3971 GV = new GlobalVariable(PT->getElementType(), false,
Chris Lattner6cdc6822007-04-26 05:31:05 +00003972 GlobalValue::ExternalWeakLinkage, 0,
Reid Spencer68a24bd2005-08-27 18:50:39 +00003973 Name, CurModule.CurrentModule);
3974 }
3975
3976 // Keep track of the fact that we have a forward ref to recycle it
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003977 CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, yyvsp[0].ValIDVal), GV));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003978 V = GV;
3979 }
3980 }
3981
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003982 yyval.ConstVal = cast<GlobalValue>(V);
3983 delete yyvsp[-1].TypeVal; // Free the type handle
Reid Spencer61c83e02006-08-18 08:43:06 +00003984 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003985 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003986 break;
3987
3988 case 159:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003989#line 1786 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00003990 {
Reid Spencer14310612006-12-31 05:40:51 +00003991 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003992 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3993 if (yyvsp[-1].TypeVal->get() != yyvsp[0].ConstVal->getType())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003994 GEN_ERROR("Mismatched types for constant expression: " +
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003995 (*yyvsp[-1].TypeVal)->getDescription() + " and " + yyvsp[0].ConstVal->getType()->getDescription());
3996 yyval.ConstVal = yyvsp[0].ConstVal;
3997 delete yyvsp[-1].TypeVal;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003998 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00003999 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004000 break;
4001
4002 case 160:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004003#line 1796 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004004 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004005 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004006 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
4007 const Type *Ty = yyvsp[-1].TypeVal->get();
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004008 if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
Reid Spencerb5334b02007-02-05 10:18:06 +00004009 GEN_ERROR("Cannot create a null initialized value of this type");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004010 yyval.ConstVal = Constant::getNullValue(Ty);
4011 delete yyvsp[-1].TypeVal;
Reid Spencer41dff5e2007-01-26 08:05:27 +00004012 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004013 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004014 break;
4015
4016 case 161:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004017#line 1806 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004018 { // integral constants
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004019 if (!ConstantInt::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].SInt64Val))
Reid Spencerb5334b02007-02-05 10:18:06 +00004020 GEN_ERROR("Constant value doesn't fit in type");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004021 yyval.ConstVal = ConstantInt::get(yyvsp[-1].PrimType, yyvsp[0].SInt64Val, true);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004022 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004023 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004024 break;
4025
4026 case 162:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004027#line 1812 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004028 { // arbitrary precision integer constants
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004029 uint32_t BitWidth = cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth();
4030 if (yyvsp[0].APIntVal->getBitWidth() > BitWidth) {
Reid Spencer38c91a92007-02-28 02:24:54 +00004031 GEN_ERROR("Constant value does not fit in type");
Reid Spencer10794272007-03-01 19:41:47 +00004032 }
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004033 yyvsp[0].APIntVal->sextOrTrunc(BitWidth);
4034 yyval.ConstVal = ConstantInt::get(*yyvsp[0].APIntVal);
4035 delete yyvsp[0].APIntVal;
Reid Spencer38c91a92007-02-28 02:24:54 +00004036 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004037 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004038 break;
4039
4040 case 163:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004041#line 1822 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004042 { // integral constants
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004043 if (!ConstantInt::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].UInt64Val))
Reid Spencerb5334b02007-02-05 10:18:06 +00004044 GEN_ERROR("Constant value doesn't fit in type");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004045 yyval.ConstVal = ConstantInt::get(yyvsp[-1].PrimType, yyvsp[0].UInt64Val, false);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004046 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004047 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004048 break;
4049
4050 case 164:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004051#line 1828 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004052 { // arbitrary precision integer constants
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004053 uint32_t BitWidth = cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth();
4054 if (yyvsp[0].APIntVal->getBitWidth() > BitWidth) {
Reid Spencer38c91a92007-02-28 02:24:54 +00004055 GEN_ERROR("Constant value does not fit in type");
Reid Spencer10794272007-03-01 19:41:47 +00004056 }
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004057 yyvsp[0].APIntVal->zextOrTrunc(BitWidth);
4058 yyval.ConstVal = ConstantInt::get(*yyvsp[0].APIntVal);
4059 delete yyvsp[0].APIntVal;
Reid Spencer41dff5e2007-01-26 08:05:27 +00004060 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004061 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004062 break;
4063
4064 case 165:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004065#line 1838 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004066 { // Boolean constants
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004067 assert(cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth() == 1 && "Not Bool?");
4068 yyval.ConstVal = ConstantInt::getTrue();
Reid Spencer41dff5e2007-01-26 08:05:27 +00004069 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004070 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004071 break;
4072
4073 case 166:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004074#line 1843 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004075 { // Boolean constants
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004076 assert(cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth() == 1 && "Not Bool?");
4077 yyval.ConstVal = ConstantInt::getFalse();
Reid Spencer38c91a92007-02-28 02:24:54 +00004078 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004079 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004080 break;
4081
4082 case 167:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004083#line 1848 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004084 { // Float & Double constants
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004085 if (!ConstantFP::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].FPVal))
Reid Spencerb5334b02007-02-05 10:18:06 +00004086 GEN_ERROR("Floating point constant invalid for type");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004087 yyval.ConstVal = ConstantFP::get(yyvsp[-1].PrimType, yyvsp[0].FPVal);
Reid Spencer6f407902007-01-13 05:00:46 +00004088 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004089 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004090 break;
4091
4092 case 168:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004093#line 1856 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004094 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004095 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004096 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
4097 Constant *Val = yyvsp[-3].ConstVal;
4098 const Type *DestTy = yyvsp[-1].TypeVal->get();
4099 if (!CastInst::castIsValid(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004100 GEN_ERROR("invalid cast opcode for cast from '" +
4101 Val->getType()->getDescription() + "' to '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00004102 DestTy->getDescription() + "'");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004103 yyval.ConstVal = ConstantExpr::getCast(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy);
4104 delete yyvsp[-1].TypeVal;
4105 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004106 break;
4107
4108 case 169:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004109#line 1868 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004110 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004111 if (!isa<PointerType>(yyvsp[-2].ConstVal->getType()))
Reid Spencerb5334b02007-02-05 10:18:06 +00004112 GEN_ERROR("GetElementPtr requires a pointer operand");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004113
4114 const Type *IdxTy =
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004115 GetElementPtrInst::getIndexedType(yyvsp[-2].ConstVal->getType(), &(*yyvsp[-1].ValueList)[0], yyvsp[-1].ValueList->size(),
Chris Lattner7d9801d2007-02-13 00:58:01 +00004116 true);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004117 if (!IdxTy)
Reid Spencerb5334b02007-02-05 10:18:06 +00004118 GEN_ERROR("Index list invalid for constant getelementptr");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004119
Chris Lattnerf7469af2007-01-31 04:44:08 +00004120 SmallVector<Constant*, 8> IdxVec;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004121 for (unsigned i = 0, e = yyvsp[-1].ValueList->size(); i != e; ++i)
4122 if (Constant *C = dyn_cast<Constant>((*yyvsp[-1].ValueList)[i]))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004123 IdxVec.push_back(C);
4124 else
Reid Spencerb5334b02007-02-05 10:18:06 +00004125 GEN_ERROR("Indices to constant getelementptr must be constants");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004126
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004127 delete yyvsp[-1].ValueList;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004128
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004129 yyval.ConstVal = ConstantExpr::getGetElementPtr(yyvsp[-2].ConstVal, &IdxVec[0], IdxVec.size());
Andrew Lenharth6353e052006-12-08 18:07:09 +00004130 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004131 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004132 break;
4133
4134 case 170:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004135#line 1890 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004136 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004137 if (yyvsp[-5].ConstVal->getType() != Type::Int1Ty)
Reid Spencerb5334b02007-02-05 10:18:06 +00004138 GEN_ERROR("Select condition must be of boolean type");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004139 if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00004140 GEN_ERROR("Select operand types must match");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004141 yyval.ConstVal = ConstantExpr::getSelect(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004142 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004143 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004144 break;
4145
4146 case 171:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004147#line 1898 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004148 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004149 if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00004150 GEN_ERROR("Binary operator types must match");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004151 CHECK_FOR_ERROR;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004152 yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
4153 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004154 break;
4155
4156 case 172:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004157#line 1904 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004158 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004159 if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00004160 GEN_ERROR("Logical operator types must match");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004161 if (!yyvsp[-3].ConstVal->getType()->isInteger()) {
4162 if (Instruction::isShift(yyvsp[-5].BinaryOpVal) || !isa<VectorType>(yyvsp[-3].ConstVal->getType()) ||
4163 !cast<VectorType>(yyvsp[-3].ConstVal->getType())->getElementType()->isInteger())
Reid Spencerb5334b02007-02-05 10:18:06 +00004164 GEN_ERROR("Logical operator requires integral operands");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004165 }
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004166 yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004167 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004168 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004169 break;
4170
4171 case 173:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004172#line 1915 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004173 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004174 if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00004175 GEN_ERROR("icmp operand types must match");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004176 yyval.ConstVal = ConstantExpr::getICmp(yyvsp[-5].IPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
4177 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004178 break;
4179
4180 case 174:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004181#line 1920 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004182 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004183 if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00004184 GEN_ERROR("fcmp operand types must match");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004185 yyval.ConstVal = ConstantExpr::getFCmp(yyvsp[-5].FPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
4186 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004187 break;
4188
4189 case 175:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004190#line 1925 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004191 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004192 if (!ExtractElementInst::isValidOperands(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
Reid Spencerb5334b02007-02-05 10:18:06 +00004193 GEN_ERROR("Invalid extractelement operands");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004194 yyval.ConstVal = ConstantExpr::getExtractElement(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004195 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004196 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004197 break;
4198
4199 case 176:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004200#line 1931 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004201 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004202 if (!InsertElementInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
Reid Spencerb5334b02007-02-05 10:18:06 +00004203 GEN_ERROR("Invalid insertelement operands");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004204 yyval.ConstVal = ConstantExpr::getInsertElement(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004205 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004206 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004207 break;
4208
4209 case 177:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004210#line 1937 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004211 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004212 if (!ShuffleVectorInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
Reid Spencerb5334b02007-02-05 10:18:06 +00004213 GEN_ERROR("Invalid shufflevector operands");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004214 yyval.ConstVal = ConstantExpr::getShuffleVector(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004215 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004216 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004217 break;
4218
4219 case 178:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004220#line 1946 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004221 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004222 (yyval.ConstVector = yyvsp[-2].ConstVector)->push_back(yyvsp[0].ConstVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004223 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004224 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004225 break;
4226
4227 case 179:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004228#line 1950 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004229 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004230 yyval.ConstVector = new std::vector<Constant*>();
4231 yyval.ConstVector->push_back(yyvsp[0].ConstVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004232 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004233 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004234 break;
4235
4236 case 180:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004237#line 1958 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
4238 { yyval.BoolVal = false; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004239 break;
4240
4241 case 181:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004242#line 1958 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
4243 { yyval.BoolVal = true; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004244 break;
4245
4246 case 182:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004247#line 1961 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
4248 { yyval.BoolVal = true; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004249 break;
4250
4251 case 183:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004252#line 1961 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
4253 { yyval.BoolVal = false; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004254 break;
4255
4256 case 184:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004257#line 1964 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004258 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004259 const Type* VTy = yyvsp[-1].TypeVal->get();
4260 Value *V = getVal(VTy, yyvsp[0].ValIDVal);
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004261 GlobalValue* Aliasee = dyn_cast<GlobalValue>(V);
4262 if (!Aliasee)
4263 GEN_ERROR("Aliases can be created only to global values");
4264
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004265 yyval.ConstVal = Aliasee;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004266 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004267 delete yyvsp[-1].TypeVal;
4268 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004269 break;
4270
4271 case 185:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004272#line 1975 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004273 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004274 Constant *Val = yyvsp[-3].ConstVal;
4275 const Type *DestTy = yyvsp[-1].TypeVal->get();
4276 if (!CastInst::castIsValid(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy))
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004277 GEN_ERROR("invalid cast opcode for cast from '" +
4278 Val->getType()->getDescription() + "' to '" +
4279 DestTy->getDescription() + "'");
4280
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004281 yyval.ConstVal = ConstantExpr::getCast(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy);
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004282 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004283 delete yyvsp[-1].TypeVal;
4284 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004285 break;
4286
4287 case 186:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004288#line 1996 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004289 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004290 yyval.ModuleVal = ParserResult = CurModule.CurrentModule;
Reid Spencer67d8ed92007-03-22 02:14:08 +00004291 CurModule.ModuleDone();
4292 CHECK_FOR_ERROR;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004293 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004294 break;
4295
4296 case 187:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004297#line 2001 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004298 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004299 yyval.ModuleVal = ParserResult = CurModule.CurrentModule;
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004300 CurModule.ModuleDone();
4301 CHECK_FOR_ERROR;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004302 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004303 break;
4304
4305 case 190:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004306#line 2014 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
4307 { CurFun.isDeclare = false; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004308 break;
4309
4310 case 191:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004311#line 2014 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004312 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00004313 CurFun.FunctionDone();
4314 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004315 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004316 break;
4317
4318 case 192:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004319#line 2018 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
4320 { CurFun.isDeclare = true; }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004321 break;
4322
4323 case 193:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004324#line 2018 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004325 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004326 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004327 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004328 break;
4329
4330 case 194:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004331#line 2021 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004332 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004333 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004334 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004335 break;
4336
4337 case 195:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004338#line 2024 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004339 {
Reid Spencer14310612006-12-31 05:40:51 +00004340 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004341 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004342 // Eagerly resolve types. This is not an optimization, this is a
4343 // requirement that is due to the fact that we could have this:
4344 //
4345 // %list = type { %list * }
4346 // %list = type { %list * } ; repeated type decl
4347 //
4348 // If types are not resolved eagerly, then the two types will not be
4349 // determined to be the same type!
4350 //
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004351 ResolveTypeTo(yyvsp[-2].StrVal, *yyvsp[0].TypeVal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004352
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004353 if (!setTypeName(*yyvsp[0].TypeVal, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) {
Reid Spencer5b7e7532006-09-28 19:28:24 +00004354 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004355 // If this is a named type that is not a redefinition, add it to the slot
4356 // table.
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004357 CurModule.Types.push_back(*yyvsp[0].TypeVal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004358 }
Reid Spencera132e042006-12-03 05:46:11 +00004359
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004360 delete yyvsp[0].TypeVal;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004361 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004362 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004363 break;
Reid Spencer38c91a92007-02-28 02:24:54 +00004364
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004365 case 196:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004366#line 2048 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004367 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004368 ResolveTypeTo(yyvsp[-2].StrVal, yyvsp[0].PrimType);
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004369
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004370 if (!setTypeName(yyvsp[0].PrimType, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004371 CHECK_FOR_ERROR
4372 // If this is a named type that is not a redefinition, add it to the slot
4373 // table.
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004374 CurModule.Types.push_back(yyvsp[0].PrimType);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004375 }
4376 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004377 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004378 break;
4379
4380 case 197:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004381#line 2059 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004382 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004383 /* "Externally Visible" Linkage */
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004384 if (yyvsp[0].ConstVal == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004385 GEN_ERROR("Global value initializer is not a constant");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004386 CurGV = ParseGlobalVariable(yyvsp[-4].StrVal, GlobalValue::ExternalLinkage,
4387 yyvsp[-3].Visibility, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal, yyvsp[-2].BoolVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004388 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004389 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004390 break;
4391
4392 case 198:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004393#line 2066 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004394 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004395 CurGV = 0;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004396 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004397 break;
4398
4399 case 199:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004400#line 2070 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004401 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004402 if (yyvsp[0].ConstVal == 0)
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004403 GEN_ERROR("Global value initializer is not a constant");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004404 CurGV = ParseGlobalVariable(yyvsp[-5].StrVal, yyvsp[-4].Linkage, yyvsp[-3].Visibility, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal, yyvsp[-2].BoolVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004405 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004406 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004407 break;
4408
4409 case 200:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004410#line 2075 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004411 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004412 CurGV = 0;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004413 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004414 break;
4415
4416 case 201:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004417#line 2079 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004418 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004419 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004420 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
4421 CurGV = ParseGlobalVariable(yyvsp[-5].StrVal, yyvsp[-4].Linkage, yyvsp[-3].Visibility, yyvsp[-1].BoolVal, *yyvsp[0].TypeVal, 0, yyvsp[-2].BoolVal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004422 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004423 delete yyvsp[0].TypeVal;
4424 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004425 break;
4426
4427 case 202:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004428#line 2085 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004429 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004430 CurGV = 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +00004431 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004432 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004433 break;
4434
4435 case 203:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004436#line 2089 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004437 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004438 std::string Name(yyvsp[-4].StrVal);
Anton Korobeynikov77d0f972007-04-25 14:29:12 +00004439 if (Name.empty())
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004440 GEN_ERROR("Alias name cannot be empty");
4441
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004442 Constant* Aliasee = yyvsp[0].ConstVal;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004443 if (Aliasee == 0)
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004444 GEN_ERROR(std::string("Invalid aliasee for alias: ") + yyvsp[-4].StrVal);
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004445
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004446 GlobalAlias* GA = new GlobalAlias(Aliasee->getType(), yyvsp[-1].Linkage, Name, Aliasee,
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004447 CurModule.CurrentModule);
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004448 GA->setVisibility(yyvsp[-3].Visibility);
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004449 InsertValue(GA, CurModule.Values);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004450 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004451 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004452 break;
4453
4454 case 204:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004455#line 2104 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004456 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004457 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004458 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004459 break;
4460
4461 case 205:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004462#line 2107 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004463 {
Anton Korobeynikov77d0f972007-04-25 14:29:12 +00004464 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004465 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004466 break;
4467
4468 case 206:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004469#line 2113 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004470 {
Chris Lattner66316012006-01-24 04:14:29 +00004471 const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004472 char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true);
4473 std::string NewAsm(yyvsp[0].StrVal, EndStr);
4474 free(yyvsp[0].StrVal);
Chris Lattner66316012006-01-24 04:14:29 +00004475
4476 if (AsmSoFar.empty())
4477 CurModule.CurrentModule->setModuleInlineAsm(NewAsm);
4478 else
4479 CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm);
Reid Spencer61c83e02006-08-18 08:43:06 +00004480 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004481}
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004482 break;
4483
4484 case 207:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004485#line 2126 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004486 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004487 CurModule.CurrentModule->setTargetTriple(yyvsp[0].StrVal);
4488 free(yyvsp[0].StrVal);
4489 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004490 break;
4491
4492 case 208:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004493#line 2130 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004494 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004495 CurModule.CurrentModule->setDataLayout(yyvsp[0].StrVal);
4496 free(yyvsp[0].StrVal);
4497 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004498 break;
4499
4500 case 210:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004501#line 2137 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004502 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004503 CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
4504 free(yyvsp[0].StrVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004505 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004506 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004507 break;
4508
4509 case 211:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004510#line 2142 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004511 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004512 CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
4513 free(yyvsp[0].StrVal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004514 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004515 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004516 break;
4517
4518 case 212:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004519#line 2147 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004520 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004521 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004522 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004523 break;
4524
4525 case 213:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004526#line 2156 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004527 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004528 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004529 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
4530 if (*yyvsp[-2].TypeVal == Type::VoidTy)
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004531 GEN_ERROR("void typed arguments are invalid");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004532 ArgListEntry E; E.Attrs = yyvsp[-1].ParamAttrs; E.Ty = yyvsp[-2].TypeVal; E.Name = yyvsp[0].StrVal;
4533 yyval.ArgList = yyvsp[-4].ArgList;
4534 yyvsp[-4].ArgList->push_back(E);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004535 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004536 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004537 break;
4538
4539 case 214:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004540#line 2166 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004541 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004542 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004543 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
4544 if (*yyvsp[-2].TypeVal == Type::VoidTy)
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004545 GEN_ERROR("void typed arguments are invalid");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004546 ArgListEntry E; E.Attrs = yyvsp[-1].ParamAttrs; E.Ty = yyvsp[-2].TypeVal; E.Name = yyvsp[0].StrVal;
4547 yyval.ArgList = new ArgListType;
4548 yyval.ArgList->push_back(E);
Reid Spencer6f407902007-01-13 05:00:46 +00004549 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004550 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004551 break;
4552
4553 case 215:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004554#line 2177 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004555 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004556 yyval.ArgList = yyvsp[0].ArgList;
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004557 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004558 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004559 break;
4560
4561 case 216:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004562#line 2181 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004563 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004564 yyval.ArgList = yyvsp[-2].ArgList;
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004565 struct ArgListEntry E;
4566 E.Ty = new PATypeHolder(Type::VoidTy);
4567 E.Name = 0;
4568 E.Attrs = ParamAttr::None;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004569 yyval.ArgList->push_back(E);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004570 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004571 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004572 break;
4573
4574 case 217:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004575#line 2190 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004576 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004577 yyval.ArgList = new ArgListType;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004578 struct ArgListEntry E;
4579 E.Ty = new PATypeHolder(Type::VoidTy);
4580 E.Name = 0;
Reid Spencer18da0722007-04-11 02:44:20 +00004581 E.Attrs = ParamAttr::None;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004582 yyval.ArgList->push_back(E);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004583 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004584 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004585 break;
4586
4587 case 218:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004588#line 2199 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004589 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004590 yyval.ArgList = 0;
Reid Spencer61c83e02006-08-18 08:43:06 +00004591 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004592 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004593 break;
4594
4595 case 219:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004596#line 2205 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004597 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004598 UnEscapeLexed(yyvsp[-6].StrVal);
4599 std::string FunctionName(yyvsp[-6].StrVal);
4600 free(yyvsp[-6].StrVal); // Free strdup'd memory!
Reid Spencer68a24bd2005-08-27 18:50:39 +00004601
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004602 // Check the function result for abstractness if this is a define. We should
4603 // have no abstract types at this point
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004604 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(yyvsp[-7].TypeVal))
4605 GEN_ERROR("Reference to abstract result: "+ yyvsp[-7].TypeVal->get()->getDescription());
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004606
Reid Spencer68a24bd2005-08-27 18:50:39 +00004607 std::vector<const Type*> ParamTypeList;
Christopher Lamb5c104242007-04-22 20:09:11 +00004608 ParamAttrsVector Attrs;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004609 if (yyvsp[-2].ParamAttrs != ParamAttr::None) {
4610 ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = yyvsp[-2].ParamAttrs;
Christopher Lamb5c104242007-04-22 20:09:11 +00004611 Attrs.push_back(PAWI);
4612 }
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004613 if (yyvsp[-4].ArgList) { // If there are arguments...
Reid Spencer7b5d4662007-04-09 06:16:21 +00004614 unsigned index = 1;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004615 for (ArgListType::iterator I = yyvsp[-4].ArgList->begin(); I != yyvsp[-4].ArgList->end(); ++I, ++index) {
Reid Spencer14310612006-12-31 05:40:51 +00004616 const Type* Ty = I->Ty->get();
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004617 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(I->Ty))
4618 GEN_ERROR("Reference to abstract argument: " + Ty->getDescription());
Reid Spencer14310612006-12-31 05:40:51 +00004619 ParamTypeList.push_back(Ty);
4620 if (Ty != Type::VoidTy)
Christopher Lamb5c104242007-04-22 20:09:11 +00004621 if (I->Attrs != ParamAttr::None) {
4622 ParamAttrsWithIndex PAWI; PAWI.index = index; PAWI.attrs = I->Attrs;
4623 Attrs.push_back(PAWI);
4624 }
Reid Spencer14310612006-12-31 05:40:51 +00004625 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004626 }
4627
4628 bool isVarArg = ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy;
4629 if (isVarArg) ParamTypeList.pop_back();
4630
Christopher Lamb5c104242007-04-22 20:09:11 +00004631 ParamAttrsList *PAL = 0;
4632 if (!Attrs.empty())
4633 PAL = ParamAttrsList::get(Attrs);
Reid Spencer7b5d4662007-04-09 06:16:21 +00004634
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004635 FunctionType *FT = FunctionType::get(*yyvsp[-7].TypeVal, ParamTypeList, isVarArg, PAL);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004636 const PointerType *PFT = PointerType::get(FT);
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004637 delete yyvsp[-7].TypeVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004638
4639 ValID ID;
4640 if (!FunctionName.empty()) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00004641 ID = ValID::createGlobalName((char*)FunctionName.c_str());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004642 } else {
Reid Spencer93c40032007-03-19 18:40:50 +00004643 ID = ValID::createGlobalID(CurModule.Values.size());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004644 }
4645
4646 Function *Fn = 0;
4647 // See if this function was forward referenced. If so, recycle the object.
4648 if (GlobalValue *FWRef = CurModule.GetForwardRefForGlobal(PFT, ID)) {
4649 // Move the function to the end of the list, from whereever it was
4650 // previously inserted.
4651 Fn = cast<Function>(FWRef);
4652 CurModule.CurrentModule->getFunctionList().remove(Fn);
4653 CurModule.CurrentModule->getFunctionList().push_back(Fn);
4654 } else if (!FunctionName.empty() && // Merge with an earlier prototype?
Reid Spenceref9b9a72007-02-05 20:47:22 +00004655 (Fn = CurModule.CurrentModule->getFunction(FunctionName))) {
Chris Lattner6cdc6822007-04-26 05:31:05 +00004656 if (Fn->getFunctionType() != FT) {
Reid Spenceref9b9a72007-02-05 20:47:22 +00004657 // The existing function doesn't have the same type. This is an overload
4658 // error.
4659 GEN_ERROR("Overload of function '" + FunctionName + "' not permitted.");
4660 } else if (!CurFun.isDeclare && !Fn->isDeclaration()) {
Chris Lattner6cdc6822007-04-26 05:31:05 +00004661 // Neither the existing or the current function is a declaration and they
4662 // have the same name and same type. Clearly this is a redefinition.
4663 GEN_ERROR("Redefinition of function '" + FunctionName + "'");
Reid Spenceref9b9a72007-02-05 20:47:22 +00004664 } if (Fn->isDeclaration()) {
4665 // Make sure to strip off any argument names so we can't get conflicts.
Reid Spencer68a24bd2005-08-27 18:50:39 +00004666 for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end();
4667 AI != AE; ++AI)
4668 AI->setName("");
Reid Spenceref9b9a72007-02-05 20:47:22 +00004669 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004670 } else { // Not already defined?
Chris Lattner6cdc6822007-04-26 05:31:05 +00004671 Fn = new Function(FT, GlobalValue::ExternalWeakLinkage, FunctionName,
Reid Spencer68a24bd2005-08-27 18:50:39 +00004672 CurModule.CurrentModule);
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004673
Reid Spencer68a24bd2005-08-27 18:50:39 +00004674 InsertValue(Fn, CurModule.Values);
4675 }
4676
4677 CurFun.FunctionStart(Fn);
Anton Korobeynikov93c2b372006-09-17 13:06:18 +00004678
4679 if (CurFun.isDeclare) {
4680 // If we have declaration, always overwrite linkage. This will allow us to
4681 // correctly handle cases, when pointer to function is passed as argument to
4682 // another function.
4683 Fn->setLinkage(CurFun.Linkage);
Anton Korobeynikov178a3522007-01-12 19:22:51 +00004684 Fn->setVisibility(CurFun.Visibility);
Anton Korobeynikov93c2b372006-09-17 13:06:18 +00004685 }
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004686 Fn->setCallingConv(yyvsp[-8].UIntVal);
4687 Fn->setAlignment(yyvsp[0].UIntVal);
4688 if (yyvsp[-1].StrVal) {
4689 Fn->setSection(yyvsp[-1].StrVal);
4690 free(yyvsp[-1].StrVal);
Chris Lattnere869eef2005-11-12 00:11:49 +00004691 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004692
4693 // Add all of the arguments we parsed to the function...
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004694 if (yyvsp[-4].ArgList) { // Is null if empty...
Reid Spencer68a24bd2005-08-27 18:50:39 +00004695 if (isVarArg) { // Nuke the last entry
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004696 assert(yyvsp[-4].ArgList->back().Ty->get() == Type::VoidTy && yyvsp[-4].ArgList->back().Name == 0 &&
Reid Spencera9720f52007-02-05 17:04:00 +00004697 "Not a varargs marker!");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004698 delete yyvsp[-4].ArgList->back().Ty;
4699 yyvsp[-4].ArgList->pop_back(); // Delete the last entry
Reid Spencer68a24bd2005-08-27 18:50:39 +00004700 }
4701 Function::arg_iterator ArgIt = Fn->arg_begin();
Reid Spenceref9b9a72007-02-05 20:47:22 +00004702 Function::arg_iterator ArgEnd = Fn->arg_end();
Reid Spencer14310612006-12-31 05:40:51 +00004703 unsigned Idx = 1;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004704 for (ArgListType::iterator I = yyvsp[-4].ArgList->begin();
4705 I != yyvsp[-4].ArgList->end() && ArgIt != ArgEnd; ++I, ++ArgIt) {
Reid Spencer14310612006-12-31 05:40:51 +00004706 delete I->Ty; // Delete the typeholder...
Reid Spenceref9b9a72007-02-05 20:47:22 +00004707 setValueName(ArgIt, I->Name); // Insert arg into symtab...
Reid Spencer5b7e7532006-09-28 19:28:24 +00004708 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004709 InsertValue(ArgIt);
Reid Spencer14310612006-12-31 05:40:51 +00004710 Idx++;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004711 }
Reid Spencera132e042006-12-03 05:46:11 +00004712
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004713 delete yyvsp[-4].ArgList; // We're now done with the argument list
Reid Spencer68a24bd2005-08-27 18:50:39 +00004714 }
Reid Spencer61c83e02006-08-18 08:43:06 +00004715 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004716}
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004717 break;
4718
4719 case 222:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004720#line 2328 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004721 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004722 yyval.FunctionVal = CurFun.CurrentFunction;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004723
4724 // Make sure that we keep track of the linkage type even if there was a
4725 // previous "declare".
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004726 yyval.FunctionVal->setLinkage(yyvsp[-3].Linkage);
4727 yyval.FunctionVal->setVisibility(yyvsp[-2].Visibility);
4728}
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004729 break;
4730
4731 case 225:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004732#line 2339 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004733 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004734 yyval.FunctionVal = yyvsp[-1].FunctionVal;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004735 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004736}
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004737 break;
4738
4739 case 226:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004740#line 2344 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004741 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004742 CurFun.CurrentFunction->setLinkage(yyvsp[-2].Linkage);
4743 CurFun.CurrentFunction->setVisibility(yyvsp[-1].Visibility);
4744 yyval.FunctionVal = CurFun.CurrentFunction;
Reid Spencer41dff5e2007-01-26 08:05:27 +00004745 CurFun.FunctionDone();
4746 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004747 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004748 break;
4749
4750 case 227:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004751#line 2356 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004752 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004753 yyval.BoolVal = false;
Reid Spencer41dff5e2007-01-26 08:05:27 +00004754 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004755 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004756 break;
4757
4758 case 228:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004759#line 2360 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004760 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004761 yyval.BoolVal = true;
Reid Spencer61c83e02006-08-18 08:43:06 +00004762 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004763 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004764 break;
4765
4766 case 229:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004767#line 2365 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004768 { // A reference to a direct constant
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004769 yyval.ValIDVal = ValID::create(yyvsp[0].SInt64Val);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004770 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004771 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004772 break;
4773
4774 case 230:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004775#line 2369 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004776 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004777 yyval.ValIDVal = ValID::create(yyvsp[0].UInt64Val);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004778 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004779 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004780 break;
4781
4782 case 231:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004783#line 2373 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004784 { // Perhaps it's an FP constant?
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004785 yyval.ValIDVal = ValID::create(yyvsp[0].FPVal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004786 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004787 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004788 break;
4789
4790 case 232:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004791#line 2377 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004792 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004793 yyval.ValIDVal = ValID::create(ConstantInt::getTrue());
Reid Spencere4d87aa2006-12-23 06:05:41 +00004794 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004795 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004796 break;
4797
4798 case 233:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004799#line 2381 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004800 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004801 yyval.ValIDVal = ValID::create(ConstantInt::getFalse());
Reid Spencere4d87aa2006-12-23 06:05:41 +00004802 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004803 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004804 break;
4805
4806 case 234:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004807#line 2385 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004808 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004809 yyval.ValIDVal = ValID::createNull();
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00004810 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004811 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004812 break;
4813
4814 case 235:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004815#line 2389 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004816 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004817 yyval.ValIDVal = ValID::createUndef();
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00004818 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004819 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004820 break;
4821
4822 case 236:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004823#line 2393 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004824 { // A vector zero constant.
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004825 yyval.ValIDVal = ValID::createZeroInit();
Reid Spencer61c83e02006-08-18 08:43:06 +00004826 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004827 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004828 break;
4829
4830 case 237:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004831#line 2397 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004832 { // Nonempty unsized packed vector
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004833 const Type *ETy = (*yyvsp[-1].ConstVector)[0]->getType();
4834 int NumElements = yyvsp[-1].ConstVector->size();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004835
Reid Spencer9d6565a2007-02-15 02:26:10 +00004836 VectorType* pt = VectorType::get(ETy, NumElements);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004837 PATypeHolder* PTy = new PATypeHolder(
Reid Spencera132e042006-12-03 05:46:11 +00004838 HandleUpRefs(
Reid Spencer9d6565a2007-02-15 02:26:10 +00004839 VectorType::get(
Reid Spencera132e042006-12-03 05:46:11 +00004840 ETy,
4841 NumElements)
4842 )
4843 );
Reid Spencer68a24bd2005-08-27 18:50:39 +00004844
4845 // Verify all elements are correct type!
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004846 for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
4847 if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00004848 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00004849 ETy->getDescription() +"' as required!\nIt is of type '" +
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004850 (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004851 }
4852
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004853 yyval.ValIDVal = ValID::create(ConstantVector::get(pt, *yyvsp[-1].ConstVector));
4854 delete PTy; delete yyvsp[-1].ConstVector;
Reid Spencer832254e2007-02-02 02:16:23 +00004855 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004856 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004857 break;
4858
4859 case 238:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004860#line 2422 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004861 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004862 yyval.ValIDVal = ValID::create(yyvsp[0].ConstVal);
Reid Spencer832254e2007-02-02 02:16:23 +00004863 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004864 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004865 break;
4866
4867 case 239:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004868#line 2426 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004869 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004870 char *End = UnEscapeLexed(yyvsp[-2].StrVal, true);
4871 std::string AsmStr = std::string(yyvsp[-2].StrVal, End);
4872 End = UnEscapeLexed(yyvsp[0].StrVal, true);
4873 std::string Constraints = std::string(yyvsp[0].StrVal, End);
4874 yyval.ValIDVal = ValID::createInlineAsm(AsmStr, Constraints, yyvsp[-3].BoolVal);
4875 free(yyvsp[-2].StrVal);
4876 free(yyvsp[0].StrVal);
Reid Spencer832254e2007-02-02 02:16:23 +00004877 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004878 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004879 break;
4880
4881 case 240:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004882#line 2440 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004883 { // Is it an integer reference...?
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004884 yyval.ValIDVal = ValID::createLocalID(yyvsp[0].UIntVal);
Reid Spencer832254e2007-02-02 02:16:23 +00004885 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004886 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004887 break;
4888
4889 case 241:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004890#line 2444 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004891 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004892 yyval.ValIDVal = ValID::createGlobalID(yyvsp[0].UIntVal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004893 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004894 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004895 break;
4896
4897 case 242:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004898#line 2448 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004899 { // Is it a named reference...?
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004900 yyval.ValIDVal = ValID::createLocalName(yyvsp[0].StrVal);
Reid Spencer832254e2007-02-02 02:16:23 +00004901 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004902 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004903 break;
4904
4905 case 243:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004906#line 2452 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004907 { // Is it a named reference...?
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004908 yyval.ValIDVal = ValID::createGlobalName(yyvsp[0].StrVal);
Reid Spencer832254e2007-02-02 02:16:23 +00004909 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004910 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004911 break;
4912
4913 case 246:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004914#line 2464 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004915 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004916 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004917 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
4918 yyval.ValueVal = getVal(*yyvsp[-1].TypeVal, yyvsp[0].ValIDVal);
4919 delete yyvsp[-1].TypeVal;
Reid Spencer832254e2007-02-02 02:16:23 +00004920 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004921 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004922 break;
4923
4924 case 247:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004925#line 2473 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004926 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004927 yyval.FunctionVal = yyvsp[-1].FunctionVal;
Reid Spencer832254e2007-02-02 02:16:23 +00004928 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004929 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004930 break;
4931
4932 case 248:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004933#line 2477 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004934 { // Do not allow functions with 0 basic blocks
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004935 yyval.FunctionVal = yyvsp[-1].FunctionVal;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004936 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004937 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004938 break;
4939
4940 case 249:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004941#line 2486 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004942 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004943 setValueName(yyvsp[0].TermInstVal, yyvsp[-1].StrVal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004944 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004945 InsertValue(yyvsp[0].TermInstVal);
4946 yyvsp[-2].BasicBlockVal->getInstList().push_back(yyvsp[0].TermInstVal);
4947 yyval.BasicBlockVal = yyvsp[-2].BasicBlockVal;
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004948 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004949 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004950 break;
4951
4952 case 250:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004953#line 2495 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004954 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004955 if (CastInst *CI1 = dyn_cast<CastInst>(yyvsp[0].InstVal))
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004956 if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0)))
4957 if (CI2->getParent() == 0)
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004958 yyvsp[-1].BasicBlockVal->getInstList().push_back(CI2);
4959 yyvsp[-1].BasicBlockVal->getInstList().push_back(yyvsp[0].InstVal);
4960 yyval.BasicBlockVal = yyvsp[-1].BasicBlockVal;
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004961 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004962 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004963 break;
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004964
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004965 case 251:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004966#line 2504 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004967 { // Empty space between instruction lists
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004968 yyval.BasicBlockVal = defineBBVal(ValID::createLocalID(CurFun.NextValNum));
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004969 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004970 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004971 break;
4972
4973 case 252:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004974#line 2508 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004975 { // Labelled (named) basic block
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004976 yyval.BasicBlockVal = defineBBVal(ValID::createLocalName(yyvsp[0].StrVal));
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004977 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004978 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004979 break;
4980
4981 case 253:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004982#line 2513 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004983 { // Return with a result...
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004984 yyval.TermInstVal = new ReturnInst(yyvsp[0].ValueVal);
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004985 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004986 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004987 break;
4988
4989 case 254:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004990#line 2517 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004991 { // Return with no result...
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004992 yyval.TermInstVal = new ReturnInst();
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004993 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004994 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004995 break;
4996
4997 case 255:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00004998#line 2521 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004999 { // Unconditional Branch...
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005000 BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005001 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005002 yyval.TermInstVal = new BranchInst(tmpBB);
5003 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005004 break;
5005
5006 case 256:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005007#line 2526 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005008 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005009 assert(cast<IntegerType>(yyvsp[-7].PrimType)->getBitWidth() == 1 && "Not Bool?");
5010 BasicBlock* tmpBBA = getBBVal(yyvsp[-3].ValIDVal);
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005011 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005012 BasicBlock* tmpBBB = getBBVal(yyvsp[0].ValIDVal);
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005013 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005014 Value* tmpVal = getVal(Type::Int1Ty, yyvsp[-6].ValIDVal);
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005015 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005016 yyval.TermInstVal = new BranchInst(tmpBBA, tmpBBB, tmpVal);
5017 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005018 break;
5019
5020 case 257:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005021#line 2536 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005022 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005023 Value* tmpVal = getVal(yyvsp[-7].PrimType, yyvsp[-6].ValIDVal);
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005024 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005025 BasicBlock* tmpBB = getBBVal(yyvsp[-3].ValIDVal);
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005026 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005027 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, yyvsp[-1].JumpTable->size());
5028 yyval.TermInstVal = S;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005029
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005030 std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = yyvsp[-1].JumpTable->begin(),
5031 E = yyvsp[-1].JumpTable->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005032 for (; I != E; ++I) {
5033 if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
5034 S->addCase(CI, I->second);
5035 else
Reid Spencerb5334b02007-02-05 10:18:06 +00005036 GEN_ERROR("Switch case is constant, but not a simple integer");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005037 }
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005038 delete yyvsp[-1].JumpTable;
Reid Spencer61c83e02006-08-18 08:43:06 +00005039 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005040 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005041 break;
5042
5043 case 258:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005044#line 2555 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005045 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005046 Value* tmpVal = getVal(yyvsp[-6].PrimType, yyvsp[-5].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005047 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005048 BasicBlock* tmpBB = getBBVal(yyvsp[-2].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005049 CHECK_FOR_ERROR
5050 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005051 yyval.TermInstVal = S;
Reid Spencer61c83e02006-08-18 08:43:06 +00005052 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005053 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005054 break;
5055
5056 case 259:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005057#line 2565 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005058 {
Reid Spencer3822ff52006-11-08 06:47:33 +00005059
Reid Spencer14310612006-12-31 05:40:51 +00005060 // Handle the short syntax
5061 const PointerType *PFTy = 0;
5062 const FunctionType *Ty = 0;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005063 if (!(PFTy = dyn_cast<PointerType>(yyvsp[-11].TypeVal->get())) ||
Reid Spencer68a24bd2005-08-27 18:50:39 +00005064 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
5065 // Pull out the types of all of the arguments...
5066 std::vector<const Type*> ParamTypes;
Christopher Lamb5c104242007-04-22 20:09:11 +00005067 ParamAttrsVector Attrs;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005068 if (yyvsp[-6].ParamAttrs != ParamAttr::None) {
Christopher Lamb5c104242007-04-22 20:09:11 +00005069 ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = 8;
5070 Attrs.push_back(PAWI);
5071 }
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005072 ValueRefList::iterator I = yyvsp[-8].ValueRefList->begin(), E = yyvsp[-8].ValueRefList->end();
Reid Spencer7b5d4662007-04-09 06:16:21 +00005073 unsigned index = 1;
5074 for (; I != E; ++I, ++index) {
Reid Spencer14310612006-12-31 05:40:51 +00005075 const Type *Ty = I->Val->getType();
5076 if (Ty == Type::VoidTy)
5077 GEN_ERROR("Short call syntax cannot be used with varargs");
5078 ParamTypes.push_back(Ty);
Christopher Lamb5c104242007-04-22 20:09:11 +00005079 if (I->Attrs != ParamAttr::None) {
5080 ParamAttrsWithIndex PAWI; PAWI.index = index; PAWI.attrs = I->Attrs;
5081 Attrs.push_back(PAWI);
5082 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00005083 }
5084
Christopher Lamb5c104242007-04-22 20:09:11 +00005085 ParamAttrsList *PAL = 0;
5086 if (!Attrs.empty())
5087 PAL = ParamAttrsList::get(Attrs);
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005088 Ty = FunctionType::get(yyvsp[-11].TypeVal->get(), ParamTypes, false, PAL);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005089 PFTy = PointerType::get(Ty);
5090 }
5091
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005092 delete yyvsp[-11].TypeVal;
Reid Spencer66728ef2007-03-20 01:13:36 +00005093
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005094 Value *V = getVal(PFTy, yyvsp[-10].ValIDVal); // Get the function we're calling...
Andrew Lenharth6353e052006-12-08 18:07:09 +00005095 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005096 BasicBlock *Normal = getBBVal(yyvsp[-3].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005097 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005098 BasicBlock *Except = getBBVal(yyvsp[0].ValIDVal);
Reid Spencer5b7e7532006-09-28 19:28:24 +00005099 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00005100
Reid Spencer14310612006-12-31 05:40:51 +00005101 // Check the arguments
5102 ValueList Args;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005103 if (yyvsp[-8].ValueRefList->empty()) { // Has no arguments?
Reid Spencer14310612006-12-31 05:40:51 +00005104 // Make sure no arguments is a good thing!
5105 if (Ty->getNumParams() != 0)
5106 GEN_ERROR("No arguments passed to a function that "
Reid Spencerb5334b02007-02-05 10:18:06 +00005107 "expects arguments");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005108 } else { // Has arguments?
5109 // Loop through FunctionType's arguments and ensure they are specified
5110 // correctly!
Reid Spencer68a24bd2005-08-27 18:50:39 +00005111 FunctionType::param_iterator I = Ty->param_begin();
5112 FunctionType::param_iterator E = Ty->param_end();
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005113 ValueRefList::iterator ArgI = yyvsp[-8].ValueRefList->begin(), ArgE = yyvsp[-8].ValueRefList->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005114
Reid Spencer14310612006-12-31 05:40:51 +00005115 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
5116 if (ArgI->Val->getType() != *I)
5117 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00005118 (*I)->getDescription() + "'");
Reid Spencer14310612006-12-31 05:40:51 +00005119 Args.push_back(ArgI->Val);
5120 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00005121
Reid Spencer14310612006-12-31 05:40:51 +00005122 if (Ty->isVarArg()) {
5123 if (I == E)
5124 for (; ArgI != ArgE; ++ArgI)
5125 Args.push_back(ArgI->Val); // push the remaining varargs
5126 } else if (I != E || ArgI != ArgE)
Reid Spencerb5334b02007-02-05 10:18:06 +00005127 GEN_ERROR("Invalid number of parameters detected");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005128 }
Reid Spencer14310612006-12-31 05:40:51 +00005129
5130 // Create the InvokeInst
Chris Lattner9d2fda62007-02-13 05:53:56 +00005131 InvokeInst *II = new InvokeInst(V, Normal, Except, &Args[0], Args.size());
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005132 II->setCallingConv(yyvsp[-12].UIntVal);
5133 yyval.TermInstVal = II;
5134 delete yyvsp[-8].ValueRefList;
Andrew Lenharth6353e052006-12-08 18:07:09 +00005135 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005136 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005137 break;
5138
5139 case 260:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005140#line 2644 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005141 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005142 yyval.TermInstVal = new UnwindInst();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005143 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005144 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005145 break;
5146
5147 case 261:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005148#line 2648 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005149 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005150 yyval.TermInstVal = new UnreachableInst();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005151 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005152 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005153 break;
5154
5155 case 262:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005156#line 2655 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005157 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005158 yyval.JumpTable = yyvsp[-5].JumpTable;
5159 Constant *V = cast<Constant>(getExistingVal(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005160 CHECK_FOR_ERROR
5161 if (V == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00005162 GEN_ERROR("May only switch on a constant pool value");
Andrew Lenharth6353e052006-12-08 18:07:09 +00005163
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005164 BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005165 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005166 yyval.JumpTable->push_back(std::make_pair(V, tmpBB));
5167 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005168 break;
5169
5170 case 263:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005171#line 2666 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005172 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005173 yyval.JumpTable = new std::vector<std::pair<Constant*, BasicBlock*> >();
5174 Constant *V = cast<Constant>(getExistingVal(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005175 CHECK_FOR_ERROR
5176
5177 if (V == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00005178 GEN_ERROR("May only switch on a constant pool value");
Andrew Lenharth6353e052006-12-08 18:07:09 +00005179
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005180 BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005181 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005182 yyval.JumpTable->push_back(std::make_pair(V, tmpBB));
5183 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005184 break;
5185
5186 case 264:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005187#line 2679 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005188 {
Reid Spenceref9b9a72007-02-05 20:47:22 +00005189 // Is this definition named?? if so, assign the name...
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005190 setValueName(yyvsp[0].InstVal, yyvsp[-1].StrVal);
Reid Spenceref9b9a72007-02-05 20:47:22 +00005191 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005192 InsertValue(yyvsp[0].InstVal);
5193 yyval.InstVal = yyvsp[0].InstVal;
Reid Spenceref9b9a72007-02-05 20:47:22 +00005194 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005195 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005196 break;
5197
5198 case 265:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005199#line 2689 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005200 { // Used for PHI nodes
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005201 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005202 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-5].TypeVal)->getDescription());
5203 yyval.PHIList = new std::list<std::pair<Value*, BasicBlock*> >();
5204 Value* tmpVal = getVal(*yyvsp[-5].TypeVal, yyvsp[-3].ValIDVal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005205 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005206 BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005207 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005208 yyval.PHIList->push_back(std::make_pair(tmpVal, tmpBB));
5209 delete yyvsp[-5].TypeVal;
5210 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005211 break;
5212
5213 case 266:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005214#line 2700 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005215 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005216 yyval.PHIList = yyvsp[-6].PHIList;
5217 Value* tmpVal = getVal(yyvsp[-6].PHIList->front().first->getType(), yyvsp[-3].ValIDVal);
Reid Spencer6f407902007-01-13 05:00:46 +00005218 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005219 BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005220 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005221 yyvsp[-6].PHIList->push_back(std::make_pair(tmpVal, tmpBB));
5222 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005223 break;
5224
5225 case 267:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005226#line 2710 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005227 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005228 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005229 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005230 // Used for call and invoke instructions
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005231 yyval.ValueRefList = new ValueRefList();
5232 ValueRefListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-2].TypeVal->get(), yyvsp[-1].ValIDVal);
5233 yyval.ValueRefList->push_back(E);
5234 delete yyvsp[-2].TypeVal;
5235 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005236 break;
5237
5238 case 268:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005239#line 2719 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005240 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005241 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005242 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
5243 yyval.ValueRefList = yyvsp[-4].ValueRefList;
5244 ValueRefListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-2].TypeVal->get(), yyvsp[-1].ValIDVal);
5245 yyval.ValueRefList->push_back(E);
5246 delete yyvsp[-2].TypeVal;
Reid Spencer14310612006-12-31 05:40:51 +00005247 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005248 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005249 break;
5250
5251 case 269:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005252#line 2728 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
5253 { yyval.ValueRefList = new ValueRefList(); }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005254 break;
5255
5256 case 270:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005257#line 2731 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
5258 { yyval.ValueList = new std::vector<Value*>(); }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005259 break;
5260
5261 case 271:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005262#line 2732 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005263 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005264 yyval.ValueList = yyvsp[-2].ValueList;
5265 yyval.ValueList->push_back(yyvsp[0].ValueVal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005266 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005267 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005268 break;
5269
5270 case 272:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005271#line 2739 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005272 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005273 yyval.BoolVal = true;
Reid Spencere4d87aa2006-12-23 06:05:41 +00005274 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005275 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005276 break;
5277
5278 case 273:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005279#line 2743 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005280 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005281 yyval.BoolVal = false;
Reid Spencere4d87aa2006-12-23 06:05:41 +00005282 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005283 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005284 break;
5285
5286 case 274:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005287#line 2748 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005288 {
Reid Spencer14310612006-12-31 05:40:51 +00005289 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005290 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
5291 if (!(*yyvsp[-3].TypeVal)->isInteger() && !(*yyvsp[-3].TypeVal)->isFloatingPoint() &&
5292 !isa<VectorType>((*yyvsp[-3].TypeVal).get()))
Reid Spencere4d87aa2006-12-23 06:05:41 +00005293 GEN_ERROR(
Reid Spencerb5334b02007-02-05 10:18:06 +00005294 "Arithmetic operator requires integer, FP, or packed operands");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005295 if (isa<VectorType>((*yyvsp[-3].TypeVal).get()) &&
5296 (yyvsp[-4].BinaryOpVal == Instruction::URem ||
5297 yyvsp[-4].BinaryOpVal == Instruction::SRem ||
5298 yyvsp[-4].BinaryOpVal == Instruction::FRem))
Chris Lattner32980692007-02-19 07:44:24 +00005299 GEN_ERROR("Remainder not supported on vector types");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005300 Value* val1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005301 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005302 Value* val2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005303 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005304 yyval.InstVal = BinaryOperator::create(yyvsp[-4].BinaryOpVal, val1, val2);
5305 if (yyval.InstVal == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00005306 GEN_ERROR("binary operator returned null");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005307 delete yyvsp[-3].TypeVal;
5308 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005309 break;
5310
5311 case 275:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005312#line 2769 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005313 {
Reid Spencer14310612006-12-31 05:40:51 +00005314 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005315 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
5316 if (!(*yyvsp[-3].TypeVal)->isInteger()) {
5317 if (Instruction::isShift(yyvsp[-4].BinaryOpVal) || !isa<VectorType>(yyvsp[-3].TypeVal->get()) ||
5318 !cast<VectorType>(yyvsp[-3].TypeVal->get())->getElementType()->isInteger())
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005319 GEN_ERROR("Logical operator requires integral operands");
5320 }
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005321 Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005322 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005323 Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005324 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005325 yyval.InstVal = BinaryOperator::create(yyvsp[-4].BinaryOpVal, tmpVal1, tmpVal2);
5326 if (yyval.InstVal == 0)
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005327 GEN_ERROR("binary operator returned null");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005328 delete yyvsp[-3].TypeVal;
5329 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005330 break;
5331
5332 case 276:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005333#line 2786 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005334 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005335 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005336 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
5337 if (isa<VectorType>((*yyvsp[-3].TypeVal).get()))
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005338 GEN_ERROR("Vector types not supported by icmp instruction");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005339 Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005340 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005341 Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005342 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005343 yyval.InstVal = CmpInst::create(yyvsp[-5].OtherOpVal, yyvsp[-4].IPredicate, tmpVal1, tmpVal2);
5344 if (yyval.InstVal == 0)
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005345 GEN_ERROR("icmp operator returned null");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005346 delete yyvsp[-3].TypeVal;
5347 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005348 break;
5349
5350 case 277:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005351#line 2800 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005352 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005353 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005354 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
5355 if (isa<VectorType>((*yyvsp[-3].TypeVal).get()))
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005356 GEN_ERROR("Vector types not supported by fcmp instruction");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005357 Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005358 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005359 Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005360 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005361 yyval.InstVal = CmpInst::create(yyvsp[-5].OtherOpVal, yyvsp[-4].FPredicate, tmpVal1, tmpVal2);
5362 if (yyval.InstVal == 0)
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005363 GEN_ERROR("fcmp operator returned null");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005364 delete yyvsp[-3].TypeVal;
5365 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005366 break;
5367
5368 case 278:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005369#line 2814 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005370 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005371 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005372 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
5373 Value* Val = yyvsp[-2].ValueVal;
5374 const Type* DestTy = yyvsp[0].TypeVal->get();
5375 if (!CastInst::castIsValid(yyvsp[-3].CastOpVal, Val, DestTy))
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005376 GEN_ERROR("invalid cast opcode for cast from '" +
5377 Val->getType()->getDescription() + "' to '" +
5378 DestTy->getDescription() + "'");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005379 yyval.InstVal = CastInst::create(yyvsp[-3].CastOpVal, Val, DestTy);
5380 delete yyvsp[0].TypeVal;
5381 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005382 break;
5383
5384 case 279:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005385#line 2826 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005386 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005387 if (yyvsp[-4].ValueVal->getType() != Type::Int1Ty)
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005388 GEN_ERROR("select condition must be boolean");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005389 if (yyvsp[-2].ValueVal->getType() != yyvsp[0].ValueVal->getType())
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005390 GEN_ERROR("select value types should match");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005391 yyval.InstVal = new SelectInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005392 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005393 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005394 break;
5395
5396 case 280:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005397#line 2834 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005398 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005399 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005400 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
5401 yyval.InstVal = new VAArgInst(yyvsp[-2].ValueVal, *yyvsp[0].TypeVal);
5402 delete yyvsp[0].TypeVal;
Andrew Lenharth6353e052006-12-08 18:07:09 +00005403 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005404 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005405 break;
5406
5407 case 281:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005408#line 2841 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005409 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005410 if (!ExtractElementInst::isValidOperands(yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005411 GEN_ERROR("Invalid extractelement operands");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005412 yyval.InstVal = new ExtractElementInst(yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005413 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005414 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005415 break;
5416
5417 case 282:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005418#line 2847 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005419 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005420 if (!InsertElementInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005421 GEN_ERROR("Invalid insertelement operands");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005422 yyval.InstVal = new InsertElementInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005423 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005424 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005425 break;
5426
5427 case 283:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005428#line 2853 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005429 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005430 if (!ShuffleVectorInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005431 GEN_ERROR("Invalid shufflevector operands");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005432 yyval.InstVal = new ShuffleVectorInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005433 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005434 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005435 break;
5436
5437 case 284:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005438#line 2859 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005439 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005440 const Type *Ty = yyvsp[0].PHIList->front().first->getType();
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005441 if (!Ty->isFirstClassType())
5442 GEN_ERROR("PHI node operands must be of first class type");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005443 yyval.InstVal = new PHINode(Ty);
5444 ((PHINode*)yyval.InstVal)->reserveOperandSpace(yyvsp[0].PHIList->size());
5445 while (yyvsp[0].PHIList->begin() != yyvsp[0].PHIList->end()) {
5446 if (yyvsp[0].PHIList->front().first->getType() != Ty)
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005447 GEN_ERROR("All elements of a PHI node must be of the same type");
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005448 cast<PHINode>(yyval.InstVal)->addIncoming(yyvsp[0].PHIList->front().first, yyvsp[0].PHIList->front().second);
5449 yyvsp[0].PHIList->pop_front();
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005450 }
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005451 delete yyvsp[0].PHIList; // Free the list...
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005452 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005453 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005454 break;
5455
5456 case 285:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005457#line 2875 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005458 {
Reid Spencer14310612006-12-31 05:40:51 +00005459
5460 // Handle the short syntax
Andrew Lenharth6353e052006-12-08 18:07:09 +00005461 const PointerType *PFTy = 0;
5462 const FunctionType *Ty = 0;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005463 if (!(PFTy = dyn_cast<PointerType>(yyvsp[-5].TypeVal->get())) ||
Andrew Lenharth6353e052006-12-08 18:07:09 +00005464 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
5465 // Pull out the types of all of the arguments...
5466 std::vector<const Type*> ParamTypes;
Christopher Lamb5c104242007-04-22 20:09:11 +00005467 ParamAttrsVector Attrs;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005468 if (yyvsp[0].ParamAttrs != ParamAttr::None) {
5469 ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = yyvsp[0].ParamAttrs;
Christopher Lamb5c104242007-04-22 20:09:11 +00005470 Attrs.push_back(PAWI);
5471 }
Reid Spencer7b5d4662007-04-09 06:16:21 +00005472 unsigned index = 1;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005473 ValueRefList::iterator I = yyvsp[-2].ValueRefList->begin(), E = yyvsp[-2].ValueRefList->end();
Reid Spencer7b5d4662007-04-09 06:16:21 +00005474 for (; I != E; ++I, ++index) {
Reid Spencer14310612006-12-31 05:40:51 +00005475 const Type *Ty = I->Val->getType();
5476 if (Ty == Type::VoidTy)
5477 GEN_ERROR("Short call syntax cannot be used with varargs");
5478 ParamTypes.push_back(Ty);
Christopher Lamb5c104242007-04-22 20:09:11 +00005479 if (I->Attrs != ParamAttr::None) {
5480 ParamAttrsWithIndex PAWI; PAWI.index = index; PAWI.attrs = I->Attrs;
5481 Attrs.push_back(PAWI);
5482 }
Andrew Lenharth6353e052006-12-08 18:07:09 +00005483 }
5484
Christopher Lamb5c104242007-04-22 20:09:11 +00005485 ParamAttrsList *PAL = 0;
5486 if (!Attrs.empty())
5487 PAL = ParamAttrsList::get(Attrs);
Reid Spencer7b5d4662007-04-09 06:16:21 +00005488
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005489 Ty = FunctionType::get(yyvsp[-5].TypeVal->get(), ParamTypes, false, PAL);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005490 PFTy = PointerType::get(Ty);
5491 }
Chris Lattner6cdc6822007-04-26 05:31:05 +00005492
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005493 Value *V = getVal(PFTy, yyvsp[-4].ValIDVal); // Get the function we're calling...
Andrew Lenharth6353e052006-12-08 18:07:09 +00005494 CHECK_FOR_ERROR
Chris Lattner6cdc6822007-04-26 05:31:05 +00005495
Reid Spencer7780acb2007-04-16 06:56:07 +00005496 // Check for call to invalid intrinsic to avoid crashing later.
5497 if (Function *theF = dyn_cast<Function>(V)) {
Reid Spencered48de22007-04-16 22:02:23 +00005498 if (theF->hasName() && (theF->getValueName()->getKeyLength() >= 5) &&
Reid Spencer36fdde12007-04-16 20:35:38 +00005499 (0 == strncmp(theF->getValueName()->getKeyData(), "llvm.", 5)) &&
5500 !theF->getIntrinsicID(true))
Reid Spencer7780acb2007-04-16 06:56:07 +00005501 GEN_ERROR("Call to invalid LLVM intrinsic function '" +
5502 theF->getName() + "'");
5503 }
5504
Reid Spencer14310612006-12-31 05:40:51 +00005505 // Check the arguments
5506 ValueList Args;
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005507 if (yyvsp[-2].ValueRefList->empty()) { // Has no arguments?
Andrew Lenharth6353e052006-12-08 18:07:09 +00005508 // Make sure no arguments is a good thing!
5509 if (Ty->getNumParams() != 0)
5510 GEN_ERROR("No arguments passed to a function that "
Reid Spencerb5334b02007-02-05 10:18:06 +00005511 "expects arguments");
Andrew Lenharth6353e052006-12-08 18:07:09 +00005512 } else { // Has arguments?
5513 // Loop through FunctionType's arguments and ensure they are specified
5514 // correctly!
5515 //
5516 FunctionType::param_iterator I = Ty->param_begin();
5517 FunctionType::param_iterator E = Ty->param_end();
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005518 ValueRefList::iterator ArgI = yyvsp[-2].ValueRefList->begin(), ArgE = yyvsp[-2].ValueRefList->end();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005519
Reid Spencer14310612006-12-31 05:40:51 +00005520 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
5521 if (ArgI->Val->getType() != *I)
5522 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00005523 (*I)->getDescription() + "'");
Reid Spencer14310612006-12-31 05:40:51 +00005524 Args.push_back(ArgI->Val);
5525 }
5526 if (Ty->isVarArg()) {
5527 if (I == E)
5528 for (; ArgI != ArgE; ++ArgI)
5529 Args.push_back(ArgI->Val); // push the remaining varargs
5530 } else if (I != E || ArgI != ArgE)
Reid Spencerb5334b02007-02-05 10:18:06 +00005531 GEN_ERROR("Invalid number of parameters detected");
Andrew Lenharth6353e052006-12-08 18:07:09 +00005532 }
Reid Spencer14310612006-12-31 05:40:51 +00005533 // Create the call node
Chris Lattner9d2fda62007-02-13 05:53:56 +00005534 CallInst *CI = new CallInst(V, &Args[0], Args.size());
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005535 CI->setTailCall(yyvsp[-7].BoolVal);
5536 CI->setCallingConv(yyvsp[-6].UIntVal);
5537 yyval.InstVal = CI;
5538 delete yyvsp[-2].ValueRefList;
5539 delete yyvsp[-5].TypeVal;
Reid Spencere4d87aa2006-12-23 06:05:41 +00005540 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005541 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005542 break;
5543
5544 case 286:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005545#line 2959 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005546 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005547 yyval.InstVal = yyvsp[0].InstVal;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005548 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005549 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005550 break;
5551
5552 case 287:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005553#line 2964 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005554 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005555 yyval.BoolVal = true;
Reid Spencere4d87aa2006-12-23 06:05:41 +00005556 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005557 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005558 break;
5559
5560 case 288:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005561#line 2968 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005562 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005563 yyval.BoolVal = false;
Reid Spencere4d87aa2006-12-23 06:05:41 +00005564 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005565 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005566 break;
5567
5568 case 289:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005569#line 2975 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005570 {
Reid Spencer14310612006-12-31 05:40:51 +00005571 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005572 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
5573 yyval.InstVal = new MallocInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal);
5574 delete yyvsp[-1].TypeVal;
Reid Spencer61c83e02006-08-18 08:43:06 +00005575 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005576 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005577 break;
5578
5579 case 290:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005580#line 2982 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005581 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005582 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005583 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
5584 Value* tmpVal = getVal(yyvsp[-2].PrimType, yyvsp[-1].ValIDVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005585 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005586 yyval.InstVal = new MallocInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
5587 delete yyvsp[-4].TypeVal;
5588 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005589 break;
5590
5591 case 291:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005592#line 2990 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005593 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005594 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005595 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
5596 yyval.InstVal = new AllocaInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal);
5597 delete yyvsp[-1].TypeVal;
Reid Spencer61c83e02006-08-18 08:43:06 +00005598 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005599 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005600 break;
5601
5602 case 292:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005603#line 2997 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005604 {
Reid Spencer14310612006-12-31 05:40:51 +00005605 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005606 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
5607 Value* tmpVal = getVal(yyvsp[-2].PrimType, yyvsp[-1].ValIDVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005608 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005609 yyval.InstVal = new AllocaInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
5610 delete yyvsp[-4].TypeVal;
5611 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005612 break;
5613
5614 case 293:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005615#line 3005 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005616 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005617 if (!isa<PointerType>(yyvsp[0].ValueVal->getType()))
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005618 GEN_ERROR("Trying to free nonpointer type " +
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005619 yyvsp[0].ValueVal->getType()->getDescription() + "");
5620 yyval.InstVal = new FreeInst(yyvsp[0].ValueVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005621 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005622 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005623 break;
5624
5625 case 294:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005626#line 3013 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005627 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005628 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005629 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
5630 if (!isa<PointerType>(yyvsp[-2].TypeVal->get()))
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005631 GEN_ERROR("Can't load from nonpointer type: " +
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005632 (*yyvsp[-2].TypeVal)->getDescription());
5633 if (!cast<PointerType>(yyvsp[-2].TypeVal->get())->getElementType()->isFirstClassType())
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005634 GEN_ERROR("Can't load from pointer of non-first-class type: " +
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005635 (*yyvsp[-2].TypeVal)->getDescription());
5636 Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005637 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005638 yyval.InstVal = new LoadInst(tmpVal, "", yyvsp[-4].BoolVal, yyvsp[0].UIntVal);
5639 delete yyvsp[-2].TypeVal;
5640 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005641 break;
5642
5643 case 295:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005644#line 3027 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005645 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005646 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005647 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
5648 const PointerType *PT = dyn_cast<PointerType>(yyvsp[-2].TypeVal->get());
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005649 if (!PT)
5650 GEN_ERROR("Can't store to a nonpointer type: " +
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005651 (*yyvsp[-2].TypeVal)->getDescription());
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005652 const Type *ElTy = PT->getElementType();
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005653 if (ElTy != yyvsp[-4].ValueVal->getType())
5654 GEN_ERROR("Can't store '" + yyvsp[-4].ValueVal->getType()->getDescription() +
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005655 "' into space of type '" + ElTy->getDescription() + "'");
5656
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005657 Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005658 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005659 yyval.InstVal = new StoreInst(yyvsp[-4].ValueVal, tmpVal, yyvsp[-6].BoolVal, yyvsp[0].UIntVal);
5660 delete yyvsp[-2].TypeVal;
5661 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005662 break;
5663
5664 case 296:
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005665#line 3044 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005666 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005667 if (!UpRefs.empty())
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005668 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
5669 if (!isa<PointerType>(yyvsp[-2].TypeVal->get()))
Reid Spencerb5334b02007-02-05 10:18:06 +00005670 GEN_ERROR("getelementptr insn requires pointer operand");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005671
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005672 if (!GetElementPtrInst::getIndexedType(*yyvsp[-2].TypeVal, &(*yyvsp[0].ValueList)[0], yyvsp[0].ValueList->size(), true))
Reid Spencer61c83e02006-08-18 08:43:06 +00005673 GEN_ERROR("Invalid getelementptr indices for type '" +
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005674 (*yyvsp[-2].TypeVal)->getDescription()+ "'");
5675 Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005676 CHECK_FOR_ERROR
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005677 yyval.InstVal = new GetElementPtrInst(tmpVal, &(*yyvsp[0].ValueList)[0], yyvsp[0].ValueList->size());
5678 delete yyvsp[-2].TypeVal;
5679 delete yyvsp[0].ValueList;
5680 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005681 break;
Reid Spencer7780acb2007-04-16 06:56:07 +00005682
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005683
Christopher Lamb5c104242007-04-22 20:09:11 +00005684 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005685
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005686/* Line 1016 of /usr/local/share/bison/yacc.c. */
5687#line 5688 "llvmAsmParser.tab.c"
Reid Spencer9c9b63a2007-04-28 16:07:31 +00005688
5689 yyvsp -= yylen;
5690 yyssp -= yylen;
5691
5692
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005693#if YYDEBUG
5694 if (yydebug)
5695 {
5696 short *yyssp1 = yyss - 1;
5697 YYFPRINTF (stderr, "state stack now");
5698 while (yyssp1 != yyssp)
5699 YYFPRINTF (stderr, " %d", *++yyssp1);
5700 YYFPRINTF (stderr, "\n");
5701 }
5702#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00005703
5704 *++yyvsp = yyval;
5705
5706
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005707 /* Now `shift' the result of the reduction. Determine what state
5708 that goes to, based on the state we popped back to and the rule
5709 number reduced by. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00005710
5711 yyn = yyr1[yyn];
5712
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005713 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
5714 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005715 yystate = yytable[yystate];
5716 else
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005717 yystate = yydefgoto[yyn - YYNTOKENS];
Reid Spencer68a24bd2005-08-27 18:50:39 +00005718
5719 goto yynewstate;
5720
5721
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005722/*------------------------------------.
5723| yyerrlab -- here on detecting error |
5724`------------------------------------*/
5725yyerrlab:
5726 /* If not already recovering from an error, report this error. */
5727 if (!yyerrstatus)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005728 {
5729 ++yynerrs;
Reid Spencer9c9b63a2007-04-28 16:07:31 +00005730#if YYERROR_VERBOSE
5731 yyn = yypact[yystate];
Christopher Lamb5c104242007-04-22 20:09:11 +00005732
Reid Spencer9c9b63a2007-04-28 16:07:31 +00005733 if (YYPACT_NINF < yyn && yyn < YYLAST)
5734 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005735 YYSIZE_T yysize = 0;
Reid Spencer9c9b63a2007-04-28 16:07:31 +00005736 int yytype = YYTRANSLATE (yychar);
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005737 char *yymsg;
5738 int yyx, yycount;
Reid Spencer9c9b63a2007-04-28 16:07:31 +00005739
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005740 yycount = 0;
Reid Spencer9c9b63a2007-04-28 16:07:31 +00005741 /* Start YYX at -YYN if negative to avoid negative indexes in
5742 YYCHECK. */
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005743 for (yyx = yyn < 0 ? -yyn : 0;
5744 yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
Reid Spencer9c9b63a2007-04-28 16:07:31 +00005745 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005746 yysize += yystrlen (yytname[yyx]) + 15, yycount++;
5747 yysize += yystrlen ("parse error, unexpected ") + 1;
5748 yysize += yystrlen (yytname[yytype]);
5749 yymsg = (char *) YYSTACK_ALLOC (yysize);
5750 if (yymsg != 0)
Reid Spencer9c9b63a2007-04-28 16:07:31 +00005751 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005752 char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
5753 yyp = yystpcpy (yyp, yytname[yytype]);
5754
5755 if (yycount < 5)
Reid Spencer9c9b63a2007-04-28 16:07:31 +00005756 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005757 yycount = 0;
5758 for (yyx = yyn < 0 ? -yyn : 0;
5759 yyx < (int) (sizeof (yytname) / sizeof (char *));
5760 yyx++)
5761 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
5762 {
5763 const char *yyq = ! yycount ? ", expecting " : " or ";
5764 yyp = yystpcpy (yyp, yyq);
5765 yyp = yystpcpy (yyp, yytname[yyx]);
5766 yycount++;
5767 }
Reid Spencer9c9b63a2007-04-28 16:07:31 +00005768 }
5769 yyerror (yymsg);
5770 YYSTACK_FREE (yymsg);
5771 }
5772 else
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005773 yyerror ("parse error; also virtual memory exhausted");
Reid Spencer9c9b63a2007-04-28 16:07:31 +00005774 }
5775 else
5776#endif /* YYERROR_VERBOSE */
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005777 yyerror ("parse error");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005778 }
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005779 goto yyerrlab1;
Reid Spencer41dff5e2007-01-26 08:05:27 +00005780
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005781
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005782/*----------------------------------------------------.
5783| yyerrlab1 -- error raised explicitly by an action. |
5784`----------------------------------------------------*/
5785yyerrlab1:
Reid Spencer41dff5e2007-01-26 08:05:27 +00005786 if (yyerrstatus == 3)
5787 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005788 /* If just tried and failed to reuse lookahead token after an
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005789 error, discard it. */
Reid Spencer41dff5e2007-01-26 08:05:27 +00005790
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005791 /* Return failure if at end of input. */
5792 if (yychar == YYEOF)
Reid Spencer9c9b63a2007-04-28 16:07:31 +00005793 {
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005794 /* Pop the error token. */
5795 YYPOPSTACK;
5796 /* Pop the rest of the stack. */
5797 while (yyssp > yyss)
5798 {
5799 YYDPRINTF ((stderr, "Error: popping "));
5800 YYDSYMPRINT ((stderr,
5801 yystos[*yyssp],
5802 *yyvsp));
5803 YYDPRINTF ((stderr, "\n"));
5804 yydestruct (yystos[*yyssp], *yyvsp);
5805 YYPOPSTACK;
5806 }
5807 YYABORT;
Reid Spencer9c9b63a2007-04-28 16:07:31 +00005808 }
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005809
5810 YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
5811 yychar, yytname[yychar1]));
5812 yydestruct (yychar1, yylval);
5813 yychar = YYEMPTY;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005814 }
5815
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005816 /* Else will try to reuse lookahead token after shifting the error
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005817 token. */
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005818
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005819 yyerrstatus = 3; /* Each real token shifted decrements this. */
5820
5821 for (;;)
5822 {
5823 yyn = yypact[yystate];
5824 if (yyn != YYPACT_NINF)
5825 {
5826 yyn += YYTERROR;
5827 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
5828 {
5829 yyn = yytable[yyn];
5830 if (0 < yyn)
5831 break;
5832 }
5833 }
5834
5835 /* Pop the current state because it cannot handle the error token. */
5836 if (yyssp == yyss)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005837 YYABORT;
5838
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005839 YYDPRINTF ((stderr, "Error: popping "));
5840 YYDSYMPRINT ((stderr,
5841 yystos[*yyssp], *yyvsp));
5842 YYDPRINTF ((stderr, "\n"));
Reid Spencere4d87aa2006-12-23 06:05:41 +00005843
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005844 yydestruct (yystos[yystate], *yyvsp);
5845 yyvsp--;
5846 yystate = *--yyssp;
5847
5848
5849#if YYDEBUG
5850 if (yydebug)
5851 {
5852 short *yyssp1 = yyss - 1;
5853 YYFPRINTF (stderr, "Error: state stack now");
5854 while (yyssp1 != yyssp)
5855 YYFPRINTF (stderr, " %d", *++yyssp1);
5856 YYFPRINTF (stderr, "\n");
5857 }
5858#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00005859 }
5860
5861 if (yyn == YYFINAL)
5862 YYACCEPT;
5863
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005864 YYDPRINTF ((stderr, "Shifting error token, "));
5865
Reid Spencer68a24bd2005-08-27 18:50:39 +00005866 *++yyvsp = yylval;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005867
5868
Reid Spencer68a24bd2005-08-27 18:50:39 +00005869 yystate = yyn;
5870 goto yynewstate;
5871
Chris Lattner6cdc6822007-04-26 05:31:05 +00005872
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005873/*-------------------------------------.
5874| yyacceptlab -- YYACCEPT comes here. |
5875`-------------------------------------*/
5876yyacceptlab:
5877 yyresult = 0;
5878 goto yyreturn;
5879
5880/*-----------------------------------.
5881| yyabortlab -- YYABORT comes here. |
5882`-----------------------------------*/
5883yyabortlab:
5884 yyresult = 1;
5885 goto yyreturn;
5886
5887#ifndef yyoverflow
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005888/*----------------------------------------------.
5889| yyoverflowlab -- parser overflow comes here. |
5890`----------------------------------------------*/
5891yyoverflowlab:
5892 yyerror ("parser stack overflow");
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005893 yyresult = 2;
5894 /* Fall through. */
Anton Korobeynikov77d0f972007-04-25 14:29:12 +00005895#endif
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005896
5897yyreturn:
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005898#ifndef yyoverflow
5899 if (yyss != yyssa)
5900 YYSTACK_FREE (yyss);
5901#endif
Reid Spencer9c9b63a2007-04-28 16:07:31 +00005902 return yyresult;
Reid Spencer68a24bd2005-08-27 18:50:39 +00005903}
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005904
5905
Jeff Cohen930c0fe2007-04-29 14:43:31 +00005906#line 3061 "/usr/home/jeffc/llvm/lib/AsmParser/llvmAsmParser.y"
Reid Spencer61c83e02006-08-18 08:43:06 +00005907
5908
Reid Spencer14310612006-12-31 05:40:51 +00005909// common code from the two 'RunVMAsmParser' functions
5910static Module* RunParser(Module * M) {
5911
5912 llvmAsmlineno = 1; // Reset the current line number...
5913 CurModule.CurrentModule = M;
5914#if YYDEBUG
5915 yydebug = Debug;
5916#endif
5917
5918 // Check to make sure the parser succeeded
5919 if (yyparse()) {
5920 if (ParserResult)
5921 delete ParserResult;
5922 return 0;
5923 }
5924
Reid Spencer0d60b5a2007-03-30 01:37:39 +00005925 // Emit an error if there are any unresolved types left.
5926 if (!CurModule.LateResolveTypes.empty()) {
5927 const ValID &DID = CurModule.LateResolveTypes.begin()->first;
5928 if (DID.Type == ValID::LocalName) {
5929 GenerateError("Undefined type remains at eof: '"+DID.getName() + "'");
5930 } else {
5931 GenerateError("Undefined type remains at eof: #" + itostr(DID.Num));
5932 }
5933 if (ParserResult)
5934 delete ParserResult;
5935 return 0;
5936 }
5937
5938 // Emit an error if there are any unresolved values left.
5939 if (!CurModule.LateResolveValues.empty()) {
5940 Value *V = CurModule.LateResolveValues.back();
5941 std::map<Value*, std::pair<ValID, int> >::iterator I =
5942 CurModule.PlaceHolderInfo.find(V);
5943
5944 if (I != CurModule.PlaceHolderInfo.end()) {
5945 ValID &DID = I->second.first;
5946 if (DID.Type == ValID::LocalName) {
5947 GenerateError("Undefined value remains at eof: "+DID.getName() + "'");
5948 } else {
5949 GenerateError("Undefined value remains at eof: #" + itostr(DID.Num));
5950 }
5951 if (ParserResult)
5952 delete ParserResult;
5953 return 0;
5954 }
5955 }
5956
Reid Spencer14310612006-12-31 05:40:51 +00005957 // Check to make sure that parsing produced a result
5958 if (!ParserResult)
5959 return 0;
5960
5961 // Reset ParserResult variable while saving its value for the result.
5962 Module *Result = ParserResult;
5963 ParserResult = 0;
5964
5965 return Result;
5966}
5967
Reid Spencer61c83e02006-08-18 08:43:06 +00005968void llvm::GenerateError(const std::string &message, int LineNo) {
5969 if (LineNo == -1) LineNo = llvmAsmlineno;
5970 // TODO: column number in exception
5971 if (TheParseError)
5972 TheParseError->setError(CurFilename, message, LineNo);
5973 TriggerError = 1;
5974}
Reid Spencer68a24bd2005-08-27 18:50:39 +00005975
5976int yyerror(const char *ErrorMsg) {
5977 std::string where
5978 = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename)
5979 + ":" + utostr((unsigned) llvmAsmlineno) + ": ";
Reid Spenceref9b9a72007-02-05 20:47:22 +00005980 std::string errMsg = where + "error: " + std::string(ErrorMsg);
5981 if (yychar != YYEMPTY && yychar != 0)
5982 errMsg += " while reading token: '" + std::string(llvmAsmtext, llvmAsmleng)+
5983 "'";
Reid Spencer61c83e02006-08-18 08:43:06 +00005984 GenerateError(errMsg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005985 return 0;
5986}
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005987