blob: fe737f6111aba971536c5d610514ea78fba5f588 [file] [log] [blame]
Reid Spencered951ea2007-05-19 07:22:10 +00001/* A Bison parser, made by GNU Bison 2.1. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002
Reid Spencered951ea2007-05-19 07:22:10 +00003/* Skeleton parser for Yacc-like parsing with Bison,
4 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005
Reid Spencered951ea2007-05-19 07:22:10 +00006 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
Anton Korobeynikov178a3522007-01-12 19:22:51 +000010
Reid Spencered951ea2007-05-19 07:22:10 +000011 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 Boston, MA 02110-1301, USA. */
20
21/* As a special exception, when this file is copied by Bison into a
22 Bison output file, you may use that output file without restriction.
23 This special exception was added by the Free Software Foundation
24 in version 1.24 of Bison. */
25
26/* Written by Richard Stallman by simplifying the original so called
27 ``semantic'' parser. */
28
29/* All symbols defined below should begin with yy or YY, to avoid
30 infringing on user name space. This should be done even for local
31 variables, as they might otherwise be expanded by user macros.
32 There are some unavoidable exceptions within include files to
33 define necessary library symbols; they are noted "INFRINGES ON
34 USER NAME SPACE" below. */
35
36/* Identify Bison output. */
37#define YYBISON 1
38
39/* Bison version. */
40#define YYBISON_VERSION "2.1"
41
42/* Skeleton name. */
43#define YYSKELETON_NAME "yacc.c"
44
45/* Pure parsers. */
46#define YYPURE 0
47
48/* Using locations. */
49#define YYLSP_NEEDED 0
50
51/* Substitute the variable and function names. */
Reid Spencer68a24bd2005-08-27 18:50:39 +000052#define yyparse llvmAsmparse
Reid Spencered951ea2007-05-19 07:22:10 +000053#define yylex llvmAsmlex
Reid Spencer68a24bd2005-08-27 18:50:39 +000054#define yyerror llvmAsmerror
Reid Spencered951ea2007-05-19 07:22:10 +000055#define yylval llvmAsmlval
56#define yychar llvmAsmchar
Reid Spencer68a24bd2005-08-27 18:50:39 +000057#define yydebug llvmAsmdebug
58#define yynerrs llvmAsmnerrs
59
Reid Spencered951ea2007-05-19 07:22:10 +000060
61/* Tokens. */
62#ifndef YYTOKENTYPE
63# define YYTOKENTYPE
64 /* Put the tokens into the symbol table, so that GDB and other debuggers
65 know about them. */
66 enum yytokentype {
67 ESINT64VAL = 258,
68 EUINT64VAL = 259,
69 ESAPINTVAL = 260,
70 EUAPINTVAL = 261,
71 LOCALVAL_ID = 262,
72 GLOBALVAL_ID = 263,
73 FPVAL = 264,
74 VOID = 265,
75 INTTYPE = 266,
76 FLOAT = 267,
77 DOUBLE = 268,
78 LABEL = 269,
79 TYPE = 270,
80 LOCALVAR = 271,
81 GLOBALVAR = 272,
82 LABELSTR = 273,
83 STRINGCONSTANT = 274,
84 ATSTRINGCONSTANT = 275,
85 PCTSTRINGCONSTANT = 276,
86 ZEROINITIALIZER = 277,
87 TRUETOK = 278,
88 FALSETOK = 279,
89 BEGINTOK = 280,
90 ENDTOK = 281,
91 DECLARE = 282,
92 DEFINE = 283,
93 GLOBAL = 284,
94 CONSTANT = 285,
95 SECTION = 286,
96 ALIAS = 287,
97 VOLATILE = 288,
98 THREAD_LOCAL = 289,
99 TO = 290,
100 DOTDOTDOT = 291,
101 NULL_TOK = 292,
102 UNDEF = 293,
103 INTERNAL = 294,
104 LINKONCE = 295,
105 WEAK = 296,
106 APPENDING = 297,
107 DLLIMPORT = 298,
108 DLLEXPORT = 299,
109 EXTERN_WEAK = 300,
110 OPAQUE = 301,
111 EXTERNAL = 302,
112 TARGET = 303,
113 TRIPLE = 304,
114 ALIGN = 305,
115 DEPLIBS = 306,
116 CALL = 307,
117 TAIL = 308,
118 ASM_TOK = 309,
119 MODULE = 310,
120 SIDEEFFECT = 311,
121 CC_TOK = 312,
122 CCC_TOK = 313,
123 FASTCC_TOK = 314,
124 COLDCC_TOK = 315,
125 X86_STDCALLCC_TOK = 316,
126 X86_FASTCALLCC_TOK = 317,
127 DATALAYOUT = 318,
128 RET = 319,
129 BR = 320,
130 SWITCH = 321,
131 INVOKE = 322,
132 UNWIND = 323,
133 UNREACHABLE = 324,
134 ADD = 325,
135 SUB = 326,
136 MUL = 327,
137 UDIV = 328,
138 SDIV = 329,
139 FDIV = 330,
140 UREM = 331,
141 SREM = 332,
142 FREM = 333,
143 AND = 334,
144 OR = 335,
145 XOR = 336,
146 SHL = 337,
147 LSHR = 338,
148 ASHR = 339,
149 ICMP = 340,
150 FCMP = 341,
151 EQ = 342,
152 NE = 343,
153 SLT = 344,
154 SGT = 345,
155 SLE = 346,
156 SGE = 347,
157 ULT = 348,
158 UGT = 349,
159 ULE = 350,
160 UGE = 351,
161 OEQ = 352,
162 ONE = 353,
163 OLT = 354,
164 OGT = 355,
165 OLE = 356,
166 OGE = 357,
167 ORD = 358,
168 UNO = 359,
169 UEQ = 360,
170 UNE = 361,
171 MALLOC = 362,
172 ALLOCA = 363,
173 FREE = 364,
174 LOAD = 365,
175 STORE = 366,
176 GETELEMENTPTR = 367,
177 TRUNC = 368,
178 ZEXT = 369,
179 SEXT = 370,
180 FPTRUNC = 371,
181 FPEXT = 372,
182 BITCAST = 373,
183 UITOFP = 374,
184 SITOFP = 375,
185 FPTOUI = 376,
186 FPTOSI = 377,
187 INTTOPTR = 378,
188 PTRTOINT = 379,
189 PHI_TOK = 380,
190 SELECT = 381,
191 VAARG = 382,
192 EXTRACTELEMENT = 383,
193 INSERTELEMENT = 384,
194 SHUFFLEVECTOR = 385,
195 NORETURN = 386,
196 INREG = 387,
197 SRET = 388,
198 NOUNWIND = 389,
199 DEFAULT = 390,
200 HIDDEN = 391,
201 PROTECTED = 392
202 };
203#endif
204/* Tokens. */
205#define ESINT64VAL 258
206#define EUINT64VAL 259
207#define ESAPINTVAL 260
208#define EUAPINTVAL 261
209#define LOCALVAL_ID 262
210#define GLOBALVAL_ID 263
211#define FPVAL 264
212#define VOID 265
213#define INTTYPE 266
214#define FLOAT 267
215#define DOUBLE 268
216#define LABEL 269
217#define TYPE 270
218#define LOCALVAR 271
219#define GLOBALVAR 272
220#define LABELSTR 273
221#define STRINGCONSTANT 274
222#define ATSTRINGCONSTANT 275
223#define PCTSTRINGCONSTANT 276
224#define ZEROINITIALIZER 277
225#define TRUETOK 278
226#define FALSETOK 279
227#define BEGINTOK 280
228#define ENDTOK 281
229#define DECLARE 282
230#define DEFINE 283
231#define GLOBAL 284
232#define CONSTANT 285
233#define SECTION 286
234#define ALIAS 287
235#define VOLATILE 288
236#define THREAD_LOCAL 289
237#define TO 290
238#define DOTDOTDOT 291
239#define NULL_TOK 292
240#define UNDEF 293
241#define INTERNAL 294
242#define LINKONCE 295
243#define WEAK 296
244#define APPENDING 297
245#define DLLIMPORT 298
246#define DLLEXPORT 299
247#define EXTERN_WEAK 300
248#define OPAQUE 301
249#define EXTERNAL 302
250#define TARGET 303
251#define TRIPLE 304
252#define ALIGN 305
253#define DEPLIBS 306
254#define CALL 307
255#define TAIL 308
256#define ASM_TOK 309
257#define MODULE 310
258#define SIDEEFFECT 311
259#define CC_TOK 312
260#define CCC_TOK 313
261#define FASTCC_TOK 314
262#define COLDCC_TOK 315
263#define X86_STDCALLCC_TOK 316
264#define X86_FASTCALLCC_TOK 317
265#define DATALAYOUT 318
266#define RET 319
267#define BR 320
268#define SWITCH 321
269#define INVOKE 322
270#define UNWIND 323
271#define UNREACHABLE 324
272#define ADD 325
273#define SUB 326
274#define MUL 327
275#define UDIV 328
276#define SDIV 329
277#define FDIV 330
278#define UREM 331
279#define SREM 332
280#define FREM 333
281#define AND 334
282#define OR 335
283#define XOR 336
284#define SHL 337
285#define LSHR 338
286#define ASHR 339
287#define ICMP 340
288#define FCMP 341
289#define EQ 342
290#define NE 343
291#define SLT 344
292#define SGT 345
293#define SLE 346
294#define SGE 347
295#define ULT 348
296#define UGT 349
297#define ULE 350
298#define UGE 351
299#define OEQ 352
300#define ONE 353
301#define OLT 354
302#define OGT 355
303#define OLE 356
304#define OGE 357
305#define ORD 358
306#define UNO 359
307#define UEQ 360
308#define UNE 361
309#define MALLOC 362
310#define ALLOCA 363
311#define FREE 364
312#define LOAD 365
313#define STORE 366
314#define GETELEMENTPTR 367
315#define TRUNC 368
316#define ZEXT 369
317#define SEXT 370
318#define FPTRUNC 371
319#define FPEXT 372
320#define BITCAST 373
321#define UITOFP 374
322#define SITOFP 375
323#define FPTOUI 376
324#define FPTOSI 377
325#define INTTOPTR 378
326#define PTRTOINT 379
327#define PHI_TOK 380
328#define SELECT 381
329#define VAARG 382
330#define EXTRACTELEMENT 383
331#define INSERTELEMENT 384
332#define SHUFFLEVECTOR 385
333#define NORETURN 386
334#define INREG 387
335#define SRET 388
336#define NOUNWIND 389
337#define DEFAULT 390
338#define HIDDEN 391
339#define PROTECTED 392
340
341
342
343
344/* Copy the first part of user declarations. */
345#line 14 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000346
347#include "ParserInternals.h"
348#include "llvm/CallingConv.h"
Chris Lattner0e9c3762006-01-25 22:27:16 +0000349#include "llvm/InlineAsm.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000350#include "llvm/Instructions.h"
351#include "llvm/Module.h"
Reid Spenceref9b9a72007-02-05 20:47:22 +0000352#include "llvm/ValueSymbolTable.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000353#include "llvm/Support/GetElementPtrTypeIterator.h"
Reid Spencer14310612006-12-31 05:40:51 +0000354#include "llvm/Support/CommandLine.h"
Chris Lattnerf7469af2007-01-31 04:44:08 +0000355#include "llvm/ADT/SmallVector.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000356#include "llvm/ADT/STLExtras.h"
Chris Lattner0019bbe2005-11-06 06:46:53 +0000357#include "llvm/Support/MathExtras.h"
Reid Spencer481169e2006-12-01 00:33:46 +0000358#include "llvm/Support/Streams.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000359#include <algorithm>
Reid Spencer68a24bd2005-08-27 18:50:39 +0000360#include <list>
Chris Lattner8adde282007-02-11 21:40:10 +0000361#include <map>
Reid Spencer68a24bd2005-08-27 18:50:39 +0000362#include <utility>
Reid Spencer14310612006-12-31 05:40:51 +0000363#ifndef NDEBUG
364#define YYDEBUG 1
365#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +0000366
Reid Spencere4f47592006-08-18 17:32:55 +0000367// The following is a gross hack. In order to rid the libAsmParser library of
368// exceptions, we have to have a way of getting the yyparse function to go into
369// an error situation. So, whenever we want an error to occur, the GenerateError
370// function (see bottom of file) sets TriggerError. Then, at the end of each
371// production in the grammer we use CHECK_FOR_ERROR which will invoke YYERROR
372// (a goto) to put YACC in error state. Furthermore, several calls to
373// GenerateError are made from inside productions and they must simulate the
374// previous exception behavior by exiting the production immediately. We have
375// replaced these with the GEN_ERROR macro which calls GeneratError and then
376// immediately invokes YYERROR. This would be so much cleaner if it was a
377// recursive descent parser.
Reid Spencer61c83e02006-08-18 08:43:06 +0000378static bool TriggerError = false;
Reid Spencerf63697d2006-10-09 17:36:59 +0000379#define CHECK_FOR_ERROR { if (TriggerError) { TriggerError = false; YYABORT; } }
Reid Spencer61c83e02006-08-18 08:43:06 +0000380#define GEN_ERROR(msg) { GenerateError(msg); YYERROR; }
381
Reid Spencer68a24bd2005-08-27 18:50:39 +0000382int yyerror(const char *ErrorMsg); // Forward declarations to prevent "implicit
383int yylex(); // declaration" of xxx warnings.
384int yyparse();
385
386namespace llvm {
387 std::string CurFilename;
Reid Spencer14310612006-12-31 05:40:51 +0000388#if YYDEBUG
389static cl::opt<bool>
390Debug("debug-yacc", cl::desc("Print yacc debug state changes"),
391 cl::Hidden, cl::init(false));
392#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +0000393}
394using namespace llvm;
395
396static Module *ParserResult;
397
398// DEBUG_UPREFS - Define this symbol if you want to enable debugging output
399// relating to upreferences in the input stream.
400//
401//#define DEBUG_UPREFS 1
402#ifdef DEBUG_UPREFS
Bill Wendlinge8156192006-12-07 01:30:32 +0000403#define UR_OUT(X) cerr << X
Reid Spencer68a24bd2005-08-27 18:50:39 +0000404#else
405#define UR_OUT(X)
406#endif
407
408#define YYERROR_VERBOSE 1
409
Chris Lattnerb475c422005-11-12 18:22:38 +0000410static GlobalVariable *CurGV;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000411
412
413// This contains info used when building the body of a function. It is
414// destroyed when the function is completed.
415//
416typedef std::vector<Value *> ValueList; // Numbered defs
Reid Spencer14310612006-12-31 05:40:51 +0000417
Reid Spencer68a24bd2005-08-27 18:50:39 +0000418static void
Reid Spencer93c40032007-03-19 18:40:50 +0000419ResolveDefinitions(ValueList &LateResolvers, ValueList *FutureLateResolvers=0);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000420
421static struct PerModuleInfo {
422 Module *CurrentModule;
Reid Spencer93c40032007-03-19 18:40:50 +0000423 ValueList Values; // Module level numbered definitions
424 ValueList LateResolveValues;
Reid Spencer861d9d62006-11-28 07:29:44 +0000425 std::vector<PATypeHolder> Types;
426 std::map<ValID, PATypeHolder> LateResolveTypes;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000427
428 /// PlaceHolderInfo - When temporary placeholder objects are created, remember
Chris Lattner0ad19702006-06-21 16:53:00 +0000429 /// how they were referenced and on which line of the input they came from so
Reid Spencer68a24bd2005-08-27 18:50:39 +0000430 /// that we can resolve them later and print error messages as appropriate.
431 std::map<Value*, std::pair<ValID, int> > PlaceHolderInfo;
432
433 // GlobalRefs - This maintains a mapping between <Type, ValID>'s and forward
434 // references to global values. Global values may be referenced before they
435 // are defined, and if so, the temporary object that they represent is held
436 // here. This is used for forward references of GlobalValues.
437 //
438 typedef std::map<std::pair<const PointerType *,
439 ValID>, GlobalValue*> GlobalRefsType;
440 GlobalRefsType GlobalRefs;
441
442 void ModuleDone() {
443 // If we could not resolve some functions at function compilation time
444 // (calls to functions before they are defined), resolve them now... Types
445 // are resolved when the constant pool has been completely parsed.
446 //
447 ResolveDefinitions(LateResolveValues);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000448 if (TriggerError)
449 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000450
451 // Check to make sure that all global value forward references have been
452 // resolved!
453 //
454 if (!GlobalRefs.empty()) {
455 std::string UndefinedReferences = "Unresolved global references exist:\n";
456
457 for (GlobalRefsType::iterator I = GlobalRefs.begin(), E =GlobalRefs.end();
458 I != E; ++I) {
459 UndefinedReferences += " " + I->first.first->getDescription() + " " +
460 I->first.second.getName() + "\n";
461 }
Reid Spencer61c83e02006-08-18 08:43:06 +0000462 GenerateError(UndefinedReferences);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000463 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000464 }
465
466 Values.clear(); // Clear out function local definitions
467 Types.clear();
468 CurrentModule = 0;
469 }
470
Reid Spencer68a24bd2005-08-27 18:50:39 +0000471 // GetForwardRefForGlobal - Check to see if there is a forward reference
472 // for this global. If so, remove it from the GlobalRefs map and return it.
473 // If not, just return null.
474 GlobalValue *GetForwardRefForGlobal(const PointerType *PTy, ValID ID) {
475 // Check to see if there is a forward reference to this global variable...
476 // if there is, eliminate it and patch the reference to use the new def'n.
477 GlobalRefsType::iterator I = GlobalRefs.find(std::make_pair(PTy, ID));
478 GlobalValue *Ret = 0;
479 if (I != GlobalRefs.end()) {
480 Ret = I->second;
481 GlobalRefs.erase(I);
482 }
483 return Ret;
484 }
Reid Spencer8c8a2dc2007-01-02 21:54:12 +0000485
486 bool TypeIsUnresolved(PATypeHolder* PATy) {
487 // If it isn't abstract, its resolved
488 const Type* Ty = PATy->get();
489 if (!Ty->isAbstract())
490 return false;
491 // Traverse the type looking for abstract types. If it isn't abstract then
492 // we don't need to traverse that leg of the type.
493 std::vector<const Type*> WorkList, SeenList;
494 WorkList.push_back(Ty);
495 while (!WorkList.empty()) {
496 const Type* Ty = WorkList.back();
497 SeenList.push_back(Ty);
498 WorkList.pop_back();
499 if (const OpaqueType* OpTy = dyn_cast<OpaqueType>(Ty)) {
500 // Check to see if this is an unresolved type
501 std::map<ValID, PATypeHolder>::iterator I = LateResolveTypes.begin();
502 std::map<ValID, PATypeHolder>::iterator E = LateResolveTypes.end();
503 for ( ; I != E; ++I) {
504 if (I->second.get() == OpTy)
505 return true;
506 }
507 } else if (const SequentialType* SeqTy = dyn_cast<SequentialType>(Ty)) {
508 const Type* TheTy = SeqTy->getElementType();
509 if (TheTy->isAbstract() && TheTy != Ty) {
510 std::vector<const Type*>::iterator I = SeenList.begin(),
511 E = SeenList.end();
512 for ( ; I != E; ++I)
513 if (*I == TheTy)
514 break;
515 if (I == E)
516 WorkList.push_back(TheTy);
517 }
518 } else if (const StructType* StrTy = dyn_cast<StructType>(Ty)) {
519 for (unsigned i = 0; i < StrTy->getNumElements(); ++i) {
520 const Type* TheTy = StrTy->getElementType(i);
521 if (TheTy->isAbstract() && TheTy != Ty) {
522 std::vector<const Type*>::iterator I = SeenList.begin(),
523 E = SeenList.end();
524 for ( ; I != E; ++I)
525 if (*I == TheTy)
526 break;
527 if (I == E)
528 WorkList.push_back(TheTy);
529 }
530 }
531 }
532 }
533 return false;
534 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000535} CurModule;
536
537static struct PerFunctionInfo {
538 Function *CurrentFunction; // Pointer to current function being created
539
Reid Spencer93c40032007-03-19 18:40:50 +0000540 ValueList Values; // Keep track of #'d definitions
541 unsigned NextValNum;
542 ValueList LateResolveValues;
Reid Spenceref9b9a72007-02-05 20:47:22 +0000543 bool isDeclare; // Is this function a forward declararation?
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000544 GlobalValue::LinkageTypes Linkage; // Linkage for forward declaration.
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000545 GlobalValue::VisibilityTypes Visibility;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000546
547 /// BBForwardRefs - When we see forward references to basic blocks, keep
548 /// track of them here.
Reid Spencer93c40032007-03-19 18:40:50 +0000549 std::map<ValID, BasicBlock*> BBForwardRefs;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000550
551 inline PerFunctionInfo() {
552 CurrentFunction = 0;
553 isDeclare = false;
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000554 Linkage = GlobalValue::ExternalLinkage;
555 Visibility = GlobalValue::DefaultVisibility;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000556 }
557
558 inline void FunctionStart(Function *M) {
559 CurrentFunction = M;
Reid Spencer93c40032007-03-19 18:40:50 +0000560 NextValNum = 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000561 }
562
563 void FunctionDone() {
Reid Spencer68a24bd2005-08-27 18:50:39 +0000564 // Any forward referenced blocks left?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000565 if (!BBForwardRefs.empty()) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000566 GenerateError("Undefined reference to label " +
Reid Spencer93c40032007-03-19 18:40:50 +0000567 BBForwardRefs.begin()->second->getName());
Reid Spencer5b7e7532006-09-28 19:28:24 +0000568 return;
569 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000570
571 // Resolve all forward references now.
572 ResolveDefinitions(LateResolveValues, &CurModule.LateResolveValues);
573
574 Values.clear(); // Clear out function local definitions
Reid Spencer93c40032007-03-19 18:40:50 +0000575 BBForwardRefs.clear();
Reid Spencer68a24bd2005-08-27 18:50:39 +0000576 CurrentFunction = 0;
577 isDeclare = false;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000578 Linkage = GlobalValue::ExternalLinkage;
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000579 Visibility = GlobalValue::DefaultVisibility;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000580 }
581} CurFun; // Info for the current function...
582
583static bool inFunctionScope() { return CurFun.CurrentFunction != 0; }
584
585
586//===----------------------------------------------------------------------===//
587// Code to handle definitions of all the types
588//===----------------------------------------------------------------------===//
589
Reid Spencer93c40032007-03-19 18:40:50 +0000590static void InsertValue(Value *V, ValueList &ValueTab = CurFun.Values) {
591 // Things that have names or are void typed don't get slot numbers
592 if (V->hasName() || (V->getType() == Type::VoidTy))
593 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000594
Reid Spencer93c40032007-03-19 18:40:50 +0000595 // In the case of function values, we have to allow for the forward reference
596 // of basic blocks, which are included in the numbering. Consequently, we keep
597 // track of the next insertion location with NextValNum. When a BB gets
598 // inserted, it could change the size of the CurFun.Values vector.
599 if (&ValueTab == &CurFun.Values) {
600 if (ValueTab.size() <= CurFun.NextValNum)
601 ValueTab.resize(CurFun.NextValNum+1);
602 ValueTab[CurFun.NextValNum++] = V;
603 return;
604 }
605 // For all other lists, its okay to just tack it on the back of the vector.
606 ValueTab.push_back(V);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000607}
608
609static const Type *getTypeVal(const ValID &D, bool DoNotImprovise = false) {
610 switch (D.Type) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000611 case ValID::LocalID: // Is it a numbered definition?
Reid Spencer68a24bd2005-08-27 18:50:39 +0000612 // Module constants occupy the lowest numbered slots...
Reid Spencer41dff5e2007-01-26 08:05:27 +0000613 if (D.Num < CurModule.Types.size())
614 return CurModule.Types[D.Num];
Reid Spencer68a24bd2005-08-27 18:50:39 +0000615 break;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000616 case ValID::LocalName: // Is it a named definition?
Reid Spencer68a24bd2005-08-27 18:50:39 +0000617 if (const Type *N = CurModule.CurrentModule->getTypeByName(D.Name)) {
618 D.destroy(); // Free old strdup'd memory...
619 return N;
620 }
621 break;
622 default:
Reid Spencerb5334b02007-02-05 10:18:06 +0000623 GenerateError("Internal parser error: Invalid symbol type reference");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000624 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000625 }
626
627 // If we reached here, we referenced either a symbol that we don't know about
628 // or an id number that hasn't been read yet. We may be referencing something
629 // forward, so just create an entry to be resolved later and get to it...
630 //
631 if (DoNotImprovise) return 0; // Do we just want a null to be returned?
632
633
634 if (inFunctionScope()) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000635 if (D.Type == ValID::LocalName) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000636 GenerateError("Reference to an undefined type: '" + D.getName() + "'");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000637 return 0;
638 } else {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000639 GenerateError("Reference to an undefined type: #" + utostr(D.Num));
Reid Spencer5b7e7532006-09-28 19:28:24 +0000640 return 0;
641 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000642 }
643
Reid Spencer861d9d62006-11-28 07:29:44 +0000644 std::map<ValID, PATypeHolder>::iterator I =CurModule.LateResolveTypes.find(D);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000645 if (I != CurModule.LateResolveTypes.end())
Reid Spencer861d9d62006-11-28 07:29:44 +0000646 return I->second;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000647
Reid Spencer861d9d62006-11-28 07:29:44 +0000648 Type *Typ = OpaqueType::get();
649 CurModule.LateResolveTypes.insert(std::make_pair(D, Typ));
650 return Typ;
Reid Spencera132e042006-12-03 05:46:11 +0000651 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000652
Reid Spencer93c40032007-03-19 18:40:50 +0000653// getExistingVal - Look up the value specified by the provided type and
Reid Spencer68a24bd2005-08-27 18:50:39 +0000654// the provided ValID. If the value exists and has already been defined, return
655// it. Otherwise return null.
656//
Reid Spencer93c40032007-03-19 18:40:50 +0000657static Value *getExistingVal(const Type *Ty, const ValID &D) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000658 if (isa<FunctionType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000659 GenerateError("Functions are not values and "
Reid Spencer68a24bd2005-08-27 18:50:39 +0000660 "must be referenced as pointers");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000661 return 0;
662 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000663
664 switch (D.Type) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000665 case ValID::LocalID: { // Is it a numbered definition?
Reid Spencer41dff5e2007-01-26 08:05:27 +0000666 // Check that the number is within bounds.
Reid Spencer93c40032007-03-19 18:40:50 +0000667 if (D.Num >= CurFun.Values.size())
668 return 0;
669 Value *Result = CurFun.Values[D.Num];
670 if (Ty != Result->getType()) {
671 GenerateError("Numbered value (%" + utostr(D.Num) + ") of type '" +
672 Result->getType()->getDescription() + "' does not match "
673 "expected type, '" + Ty->getDescription() + "'");
674 return 0;
675 }
676 return Result;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000677 }
678 case ValID::GlobalID: { // Is it a numbered definition?
Reid Spencer93c40032007-03-19 18:40:50 +0000679 if (D.Num >= CurModule.Values.size())
Reid Spenceref9b9a72007-02-05 20:47:22 +0000680 return 0;
Reid Spencer93c40032007-03-19 18:40:50 +0000681 Value *Result = CurModule.Values[D.Num];
682 if (Ty != Result->getType()) {
683 GenerateError("Numbered value (@" + utostr(D.Num) + ") of type '" +
684 Result->getType()->getDescription() + "' does not match "
685 "expected type, '" + Ty->getDescription() + "'");
Reid Spenceref9b9a72007-02-05 20:47:22 +0000686 return 0;
Reid Spencer93c40032007-03-19 18:40:50 +0000687 }
688 return Result;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000689 }
Reid Spencer41dff5e2007-01-26 08:05:27 +0000690
691 case ValID::LocalName: { // Is it a named definition?
Reid Spenceref9b9a72007-02-05 20:47:22 +0000692 if (!inFunctionScope())
693 return 0;
694 ValueSymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable();
695 Value *N = SymTab.lookup(D.Name);
696 if (N == 0)
697 return 0;
698 if (N->getType() != Ty)
699 return 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000700
701 D.destroy(); // Free old strdup'd memory...
702 return N;
703 }
704 case ValID::GlobalName: { // Is it a named definition?
Reid Spenceref9b9a72007-02-05 20:47:22 +0000705 ValueSymbolTable &SymTab = CurModule.CurrentModule->getValueSymbolTable();
706 Value *N = SymTab.lookup(D.Name);
707 if (N == 0)
708 return 0;
709 if (N->getType() != Ty)
710 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000711
712 D.destroy(); // Free old strdup'd memory...
713 return N;
714 }
715
716 // Check to make sure that "Ty" is an integral type, and that our
717 // value will fit into the specified type...
718 case ValID::ConstSIntVal: // Is it a constant pool reference??
Reid Spencerb83eb642006-10-20 07:07:24 +0000719 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000720 GenerateError("Signed integral constant '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000721 itostr(D.ConstPool64) + "' is invalid for type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +0000722 Ty->getDescription() + "'");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000723 return 0;
724 }
Reid Spencer49d273e2007-03-19 20:40:51 +0000725 return ConstantInt::get(Ty, D.ConstPool64, true);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000726
727 case ValID::ConstUIntVal: // Is it an unsigned const pool reference?
Reid Spencerb83eb642006-10-20 07:07:24 +0000728 if (!ConstantInt::isValueValidForType(Ty, D.UConstPool64)) {
729 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000730 GenerateError("Integral constant '" + utostr(D.UConstPool64) +
Reid Spencerb5334b02007-02-05 10:18:06 +0000731 "' is invalid or out of range");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000732 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000733 } else { // This is really a signed reference. Transmogrify.
Reid Spencer49d273e2007-03-19 20:40:51 +0000734 return ConstantInt::get(Ty, D.ConstPool64, true);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000735 }
736 } else {
Reid Spencerb83eb642006-10-20 07:07:24 +0000737 return ConstantInt::get(Ty, D.UConstPool64);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000738 }
739
740 case ValID::ConstFPVal: // Is it a floating point const pool reference?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000741 if (!ConstantFP::isValueValidForType(Ty, D.ConstPoolFP)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000742 GenerateError("FP constant invalid for type");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000743 return 0;
744 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000745 return ConstantFP::get(Ty, D.ConstPoolFP);
746
747 case ValID::ConstNullVal: // Is it a null value?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000748 if (!isa<PointerType>(Ty)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000749 GenerateError("Cannot create a a non pointer null");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000750 return 0;
751 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000752 return ConstantPointerNull::get(cast<PointerType>(Ty));
753
754 case ValID::ConstUndefVal: // Is it an undef value?
755 return UndefValue::get(Ty);
756
Chris Lattner7aa61892005-12-21 17:53:23 +0000757 case ValID::ConstZeroVal: // Is it a zero value?
758 return Constant::getNullValue(Ty);
759
Reid Spencer68a24bd2005-08-27 18:50:39 +0000760 case ValID::ConstantVal: // Fully resolved constant?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000761 if (D.ConstantValue->getType() != Ty) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000762 GenerateError("Constant expression type different from required type");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000763 return 0;
764 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000765 return D.ConstantValue;
766
Chris Lattner0e9c3762006-01-25 22:27:16 +0000767 case ValID::InlineAsmVal: { // Inline asm expression
768 const PointerType *PTy = dyn_cast<PointerType>(Ty);
769 const FunctionType *FTy =
770 PTy ? dyn_cast<FunctionType>(PTy->getElementType()) : 0;
Reid Spencer5b7e7532006-09-28 19:28:24 +0000771 if (!FTy || !InlineAsm::Verify(FTy, D.IAD->Constraints)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000772 GenerateError("Invalid type for asm constraint string");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000773 return 0;
774 }
Chris Lattner0e9c3762006-01-25 22:27:16 +0000775 InlineAsm *IA = InlineAsm::get(FTy, D.IAD->AsmString, D.IAD->Constraints,
776 D.IAD->HasSideEffects);
777 D.destroy(); // Free InlineAsmDescriptor.
778 return IA;
779 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000780 default:
Reid Spencera9720f52007-02-05 17:04:00 +0000781 assert(0 && "Unhandled case!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000782 return 0;
783 } // End of switch
784
Reid Spencera9720f52007-02-05 17:04:00 +0000785 assert(0 && "Unhandled case!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000786 return 0;
787}
788
Reid Spencer93c40032007-03-19 18:40:50 +0000789// getVal - This function is identical to getExistingVal, except that if a
Reid Spencer68a24bd2005-08-27 18:50:39 +0000790// value is not already defined, it "improvises" by creating a placeholder var
791// that looks and acts just like the requested variable. When the value is
792// defined later, all uses of the placeholder variable are replaced with the
793// real thing.
794//
795static Value *getVal(const Type *Ty, const ValID &ID) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000796 if (Ty == Type::LabelTy) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000797 GenerateError("Cannot use a basic block here");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000798 return 0;
799 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000800
801 // See if the value has already been defined.
Reid Spencer93c40032007-03-19 18:40:50 +0000802 Value *V = getExistingVal(Ty, ID);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000803 if (V) return V;
Reid Spencer5b7e7532006-09-28 19:28:24 +0000804 if (TriggerError) return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000805
Reid Spencer5b7e7532006-09-28 19:28:24 +0000806 if (!Ty->isFirstClassType() && !isa<OpaqueType>(Ty)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000807 GenerateError("Invalid use of a composite type");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000808 return 0;
809 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000810
811 // If we reached here, we referenced either a symbol that we don't know about
812 // or an id number that hasn't been read yet. We may be referencing something
813 // forward, so just create an entry to be resolved later and get to it...
814 //
Anton Korobeynikov38e09802007-04-28 13:48:45 +0000815 switch (ID.Type) {
816 case ValID::GlobalName:
Reid Spencer9c9b63a2007-04-28 16:07:31 +0000817 case ValID::GlobalID: {
Anton Korobeynikov38e09802007-04-28 13:48:45 +0000818 const PointerType *PTy = dyn_cast<PointerType>(Ty);
819 if (!PTy) {
820 GenerateError("Invalid type for reference to global" );
821 return 0;
822 }
823 const Type* ElTy = PTy->getElementType();
824 if (const FunctionType *FTy = dyn_cast<FunctionType>(ElTy))
825 V = new Function(FTy, GlobalValue::ExternalLinkage);
826 else
827 V = new GlobalVariable(ElTy, false, GlobalValue::ExternalLinkage);
828 break;
Reid Spencer9c9b63a2007-04-28 16:07:31 +0000829 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +0000830 default:
831 V = new Argument(Ty);
832 }
833
Reid Spencer68a24bd2005-08-27 18:50:39 +0000834 // Remember where this forward reference came from. FIXME, shouldn't we try
835 // to recycle these things??
836 CurModule.PlaceHolderInfo.insert(std::make_pair(V, std::make_pair(ID,
837 llvmAsmlineno)));
838
839 if (inFunctionScope())
840 InsertValue(V, CurFun.LateResolveValues);
841 else
842 InsertValue(V, CurModule.LateResolveValues);
843 return V;
844}
845
Reid Spencer93c40032007-03-19 18:40:50 +0000846/// defineBBVal - This is a definition of a new basic block with the specified
847/// identifier which must be the same as CurFun.NextValNum, if its numeric.
848static BasicBlock *defineBBVal(const ValID &ID) {
Reid Spencera9720f52007-02-05 17:04:00 +0000849 assert(inFunctionScope() && "Can't get basic block at global scope!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000850
Reid Spencer68a24bd2005-08-27 18:50:39 +0000851 BasicBlock *BB = 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000852
Reid Spencer93c40032007-03-19 18:40:50 +0000853 // First, see if this was forward referenced
Reid Spencer68a24bd2005-08-27 18:50:39 +0000854
Reid Spencer93c40032007-03-19 18:40:50 +0000855 std::map<ValID, BasicBlock*>::iterator BBI = CurFun.BBForwardRefs.find(ID);
856 if (BBI != CurFun.BBForwardRefs.end()) {
857 BB = BBI->second;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000858 // The forward declaration could have been inserted anywhere in the
859 // function: insert it into the correct place now.
860 CurFun.CurrentFunction->getBasicBlockList().remove(BB);
861 CurFun.CurrentFunction->getBasicBlockList().push_back(BB);
Reid Spencer93c40032007-03-19 18:40:50 +0000862
Reid Spencer66728ef2007-03-20 01:13:36 +0000863 // We're about to erase the entry, save the key so we can clean it up.
864 ValID Tmp = BBI->first;
865
Reid Spencer93c40032007-03-19 18:40:50 +0000866 // Erase the forward ref from the map as its no longer "forward"
867 CurFun.BBForwardRefs.erase(ID);
868
Reid Spencer66728ef2007-03-20 01:13:36 +0000869 // The key has been removed from the map but so we don't want to leave
870 // strdup'd memory around so destroy it too.
871 Tmp.destroy();
872
Reid Spencer93c40032007-03-19 18:40:50 +0000873 // If its a numbered definition, bump the number and set the BB value.
874 if (ID.Type == ValID::LocalID) {
875 assert(ID.Num == CurFun.NextValNum && "Invalid new block number");
876 InsertValue(BB);
877 }
878
879 ID.destroy();
880 return BB;
881 }
882
883 // We haven't seen this BB before and its first mention is a definition.
884 // Just create it and return it.
885 std::string Name (ID.Type == ValID::LocalName ? ID.Name : "");
886 BB = new BasicBlock(Name, CurFun.CurrentFunction);
887 if (ID.Type == ValID::LocalID) {
888 assert(ID.Num == CurFun.NextValNum && "Invalid new block number");
889 InsertValue(BB);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000890 }
Reid Spencer93c40032007-03-19 18:40:50 +0000891
892 ID.destroy(); // Free strdup'd memory
893 return BB;
894}
895
896/// getBBVal - get an existing BB value or create a forward reference for it.
897///
898static BasicBlock *getBBVal(const ValID &ID) {
899 assert(inFunctionScope() && "Can't get basic block at global scope!");
900
901 BasicBlock *BB = 0;
902
903 std::map<ValID, BasicBlock*>::iterator BBI = CurFun.BBForwardRefs.find(ID);
904 if (BBI != CurFun.BBForwardRefs.end()) {
905 BB = BBI->second;
906 } if (ID.Type == ValID::LocalName) {
907 std::string Name = ID.Name;
908 Value *N = CurFun.CurrentFunction->getValueSymbolTable().lookup(Name);
909 if (N)
910 if (N->getType()->getTypeID() == Type::LabelTyID)
911 BB = cast<BasicBlock>(N);
912 else
913 GenerateError("Reference to label '" + Name + "' is actually of type '"+
914 N->getType()->getDescription() + "'");
915 } else if (ID.Type == ValID::LocalID) {
916 if (ID.Num < CurFun.NextValNum && ID.Num < CurFun.Values.size()) {
917 if (CurFun.Values[ID.Num]->getType()->getTypeID() == Type::LabelTyID)
918 BB = cast<BasicBlock>(CurFun.Values[ID.Num]);
919 else
920 GenerateError("Reference to label '%" + utostr(ID.Num) +
921 "' is actually of type '"+
922 CurFun.Values[ID.Num]->getType()->getDescription() + "'");
923 }
924 } else {
925 GenerateError("Illegal label reference " + ID.getName());
926 return 0;
927 }
928
929 // If its already been defined, return it now.
930 if (BB) {
931 ID.destroy(); // Free strdup'd memory.
932 return BB;
933 }
934
935 // Otherwise, this block has not been seen before, create it.
936 std::string Name;
937 if (ID.Type == ValID::LocalName)
938 Name = ID.Name;
939 BB = new BasicBlock(Name, CurFun.CurrentFunction);
940
941 // Insert it in the forward refs map.
942 CurFun.BBForwardRefs[ID] = BB;
943
Reid Spencer68a24bd2005-08-27 18:50:39 +0000944 return BB;
945}
946
947
948//===----------------------------------------------------------------------===//
949// Code to handle forward references in instructions
950//===----------------------------------------------------------------------===//
951//
952// This code handles the late binding needed with statements that reference
953// values not defined yet... for example, a forward branch, or the PHI node for
954// a loop body.
955//
956// This keeps a table (CurFun.LateResolveValues) of all such forward references
957// and back patchs after we are done.
958//
959
960// ResolveDefinitions - If we could not resolve some defs at parsing
961// time (forward branches, phi functions for loops, etc...) resolve the
962// defs now...
963//
964static void
Reid Spencer93c40032007-03-19 18:40:50 +0000965ResolveDefinitions(ValueList &LateResolvers, ValueList *FutureLateResolvers) {
Reid Spencer68a24bd2005-08-27 18:50:39 +0000966 // Loop over LateResolveDefs fixing up stuff that couldn't be resolved
Reid Spencer93c40032007-03-19 18:40:50 +0000967 while (!LateResolvers.empty()) {
968 Value *V = LateResolvers.back();
969 LateResolvers.pop_back();
Reid Spencer68a24bd2005-08-27 18:50:39 +0000970
Reid Spencer93c40032007-03-19 18:40:50 +0000971 std::map<Value*, std::pair<ValID, int> >::iterator PHI =
972 CurModule.PlaceHolderInfo.find(V);
973 assert(PHI != CurModule.PlaceHolderInfo.end() && "Placeholder error!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000974
Reid Spencer93c40032007-03-19 18:40:50 +0000975 ValID &DID = PHI->second.first;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000976
Reid Spencer93c40032007-03-19 18:40:50 +0000977 Value *TheRealValue = getExistingVal(V->getType(), DID);
978 if (TriggerError)
979 return;
980 if (TheRealValue) {
981 V->replaceAllUsesWith(TheRealValue);
982 delete V;
983 CurModule.PlaceHolderInfo.erase(PHI);
984 } else if (FutureLateResolvers) {
985 // Functions have their unresolved items forwarded to the module late
986 // resolver table
987 InsertValue(V, *FutureLateResolvers);
988 } else {
989 if (DID.Type == ValID::LocalName || DID.Type == ValID::GlobalName) {
990 GenerateError("Reference to an invalid definition: '" +DID.getName()+
991 "' of type '" + V->getType()->getDescription() + "'",
992 PHI->second.second);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000993 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000994 } else {
Reid Spencer93c40032007-03-19 18:40:50 +0000995 GenerateError("Reference to an invalid definition: #" +
996 itostr(DID.Num) + " of type '" +
997 V->getType()->getDescription() + "'",
998 PHI->second.second);
999 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001000 }
1001 }
1002 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001003 LateResolvers.clear();
1004}
1005
1006// ResolveTypeTo - A brand new type was just declared. This means that (if
1007// name is not null) things referencing Name can be resolved. Otherwise, things
1008// refering to the number can be resolved. Do this now.
1009//
1010static void ResolveTypeTo(char *Name, const Type *ToTy) {
1011 ValID D;
Reid Spencer41dff5e2007-01-26 08:05:27 +00001012 if (Name) D = ValID::createLocalName(Name);
1013 else D = ValID::createLocalID(CurModule.Types.size());
Reid Spencer68a24bd2005-08-27 18:50:39 +00001014
Reid Spencer861d9d62006-11-28 07:29:44 +00001015 std::map<ValID, PATypeHolder>::iterator I =
Reid Spencer68a24bd2005-08-27 18:50:39 +00001016 CurModule.LateResolveTypes.find(D);
1017 if (I != CurModule.LateResolveTypes.end()) {
Reid Spencer861d9d62006-11-28 07:29:44 +00001018 ((DerivedType*)I->second.get())->refineAbstractTypeTo(ToTy);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001019 CurModule.LateResolveTypes.erase(I);
1020 }
1021}
1022
1023// setValueName - Set the specified value to the name given. The name may be
1024// null potentially, in which case this is a noop. The string passed in is
1025// assumed to be a malloc'd string buffer, and is free'd by this function.
1026//
1027static void setValueName(Value *V, char *NameStr) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00001028 if (!NameStr) return;
1029 std::string Name(NameStr); // Copy string
1030 free(NameStr); // Free old string
Reid Spencer68a24bd2005-08-27 18:50:39 +00001031
Reid Spencer41dff5e2007-01-26 08:05:27 +00001032 if (V->getType() == Type::VoidTy) {
Reid Spencerb5334b02007-02-05 10:18:06 +00001033 GenerateError("Can't assign name '" + Name+"' to value with void type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00001034 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001035 }
Reid Spencer41dff5e2007-01-26 08:05:27 +00001036
Reid Spencera9720f52007-02-05 17:04:00 +00001037 assert(inFunctionScope() && "Must be in function scope!");
Reid Spenceref9b9a72007-02-05 20:47:22 +00001038 ValueSymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable();
1039 if (ST.lookup(Name)) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00001040 GenerateError("Redefinition of value '" + Name + "' of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00001041 V->getType()->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00001042 return;
1043 }
1044
1045 // Set the name.
1046 V->setName(Name);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001047}
1048
1049/// ParseGlobalVariable - Handle parsing of a global. If Initializer is null,
1050/// this is a declaration, otherwise it is a definition.
Chris Lattnerb475c422005-11-12 18:22:38 +00001051static GlobalVariable *
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001052ParseGlobalVariable(char *NameStr,
1053 GlobalValue::LinkageTypes Linkage,
1054 GlobalValue::VisibilityTypes Visibility,
Chris Lattnerb475c422005-11-12 18:22:38 +00001055 bool isConstantGlobal, const Type *Ty,
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00001056 Constant *Initializer, bool IsThreadLocal) {
Reid Spencer5b7e7532006-09-28 19:28:24 +00001057 if (isa<FunctionType>(Ty)) {
Reid Spencerb5334b02007-02-05 10:18:06 +00001058 GenerateError("Cannot declare global vars of function type");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001059 return 0;
1060 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001061
1062 const PointerType *PTy = PointerType::get(Ty);
1063
1064 std::string Name;
1065 if (NameStr) {
1066 Name = NameStr; // Copy string
1067 free(NameStr); // Free old string
1068 }
1069
1070 // See if this global value was forward referenced. If so, recycle the
1071 // object.
1072 ValID ID;
1073 if (!Name.empty()) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00001074 ID = ValID::createGlobalName((char*)Name.c_str());
Reid Spencer68a24bd2005-08-27 18:50:39 +00001075 } else {
Reid Spencer93c40032007-03-19 18:40:50 +00001076 ID = ValID::createGlobalID(CurModule.Values.size());
Reid Spencer68a24bd2005-08-27 18:50:39 +00001077 }
1078
1079 if (GlobalValue *FWGV = CurModule.GetForwardRefForGlobal(PTy, ID)) {
1080 // Move the global to the end of the list, from whereever it was
1081 // previously inserted.
1082 GlobalVariable *GV = cast<GlobalVariable>(FWGV);
1083 CurModule.CurrentModule->getGlobalList().remove(GV);
1084 CurModule.CurrentModule->getGlobalList().push_back(GV);
1085 GV->setInitializer(Initializer);
1086 GV->setLinkage(Linkage);
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001087 GV->setVisibility(Visibility);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001088 GV->setConstant(isConstantGlobal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00001089 GV->setThreadLocal(IsThreadLocal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001090 InsertValue(GV, CurModule.Values);
Chris Lattnerb475c422005-11-12 18:22:38 +00001091 return GV;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001092 }
1093
Reid Spenceref9b9a72007-02-05 20:47:22 +00001094 // If this global has a name
Reid Spencer68a24bd2005-08-27 18:50:39 +00001095 if (!Name.empty()) {
Reid Spenceref9b9a72007-02-05 20:47:22 +00001096 // if the global we're parsing has an initializer (is a definition) and
1097 // has external linkage.
1098 if (Initializer && Linkage != GlobalValue::InternalLinkage)
1099 // If there is already a global with external linkage with this name
1100 if (CurModule.CurrentModule->getGlobalVariable(Name, false)) {
1101 // If we allow this GVar to get created, it will be renamed in the
1102 // symbol table because it conflicts with an existing GVar. We can't
1103 // allow redefinition of GVars whose linking indicates that their name
1104 // must stay the same. Issue the error.
1105 GenerateError("Redefinition of global variable named '" + Name +
1106 "' of type '" + Ty->getDescription() + "'");
1107 return 0;
1108 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001109 }
1110
1111 // Otherwise there is no existing GV to use, create one now.
1112 GlobalVariable *GV =
1113 new GlobalVariable(Ty, isConstantGlobal, Linkage, Initializer, Name,
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00001114 CurModule.CurrentModule, IsThreadLocal);
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001115 GV->setVisibility(Visibility);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001116 InsertValue(GV, CurModule.Values);
Chris Lattnerb475c422005-11-12 18:22:38 +00001117 return GV;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001118}
1119
1120// setTypeName - Set the specified type to the name given. The name may be
1121// null potentially, in which case this is a noop. The string passed in is
1122// assumed to be a malloc'd string buffer, and is freed by this function.
1123//
1124// This function returns true if the type has already been defined, but is
1125// allowed to be redefined in the specified context. If the name is a new name
1126// for the type plane, it is inserted and false is returned.
1127static bool setTypeName(const Type *T, char *NameStr) {
Reid Spencera9720f52007-02-05 17:04:00 +00001128 assert(!inFunctionScope() && "Can't give types function-local names!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00001129 if (NameStr == 0) return false;
1130
1131 std::string Name(NameStr); // Copy string
1132 free(NameStr); // Free old string
1133
1134 // We don't allow assigning names to void type
Reid Spencer5b7e7532006-09-28 19:28:24 +00001135 if (T == Type::VoidTy) {
Reid Spencerb5334b02007-02-05 10:18:06 +00001136 GenerateError("Can't assign name '" + Name + "' to the void type");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001137 return false;
1138 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001139
1140 // Set the type name, checking for conflicts as we do so.
1141 bool AlreadyExists = CurModule.CurrentModule->addTypeName(Name, T);
1142
1143 if (AlreadyExists) { // Inserting a name that is already defined???
1144 const Type *Existing = CurModule.CurrentModule->getTypeByName(Name);
Reid Spencera9720f52007-02-05 17:04:00 +00001145 assert(Existing && "Conflict but no matching type?!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00001146
1147 // There is only one case where this is allowed: when we are refining an
1148 // opaque type. In this case, Existing will be an opaque type.
1149 if (const OpaqueType *OpTy = dyn_cast<OpaqueType>(Existing)) {
1150 // We ARE replacing an opaque type!
1151 const_cast<OpaqueType*>(OpTy)->refineAbstractTypeTo(T);
1152 return true;
1153 }
1154
1155 // Otherwise, this is an attempt to redefine a type. That's okay if
1156 // the redefinition is identical to the original. This will be so if
1157 // Existing and T point to the same Type object. In this one case we
1158 // allow the equivalent redefinition.
1159 if (Existing == T) return true; // Yes, it's equal.
1160
1161 // Any other kind of (non-equivalent) redefinition is an error.
Reid Spencer63c34452007-01-05 21:51:07 +00001162 GenerateError("Redefinition of type named '" + Name + "' of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00001163 T->getDescription() + "'");
Reid Spencer68a24bd2005-08-27 18:50:39 +00001164 }
1165
1166 return false;
1167}
1168
1169//===----------------------------------------------------------------------===//
1170// Code for handling upreferences in type names...
1171//
1172
1173// TypeContains - Returns true if Ty directly contains E in it.
1174//
1175static bool TypeContains(const Type *Ty, const Type *E) {
1176 return std::find(Ty->subtype_begin(), Ty->subtype_end(),
1177 E) != Ty->subtype_end();
1178}
1179
1180namespace {
1181 struct UpRefRecord {
1182 // NestingLevel - The number of nesting levels that need to be popped before
1183 // this type is resolved.
1184 unsigned NestingLevel;
1185
1186 // LastContainedTy - This is the type at the current binding level for the
1187 // type. Every time we reduce the nesting level, this gets updated.
1188 const Type *LastContainedTy;
1189
1190 // UpRefTy - This is the actual opaque type that the upreference is
1191 // represented with.
1192 OpaqueType *UpRefTy;
1193
1194 UpRefRecord(unsigned NL, OpaqueType *URTy)
1195 : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) {}
1196 };
1197}
1198
1199// UpRefs - A list of the outstanding upreferences that need to be resolved.
1200static std::vector<UpRefRecord> UpRefs;
1201
1202/// HandleUpRefs - Every time we finish a new layer of types, this function is
1203/// called. It loops through the UpRefs vector, which is a list of the
1204/// currently active types. For each type, if the up reference is contained in
1205/// the newly completed type, we decrement the level count. When the level
1206/// count reaches zero, the upreferenced type is the type that is passed in:
1207/// thus we can complete the cycle.
1208///
1209static PATypeHolder HandleUpRefs(const Type *ty) {
Chris Lattner224f84f2006-08-18 17:34:45 +00001210 // If Ty isn't abstract, or if there are no up-references in it, then there is
1211 // nothing to resolve here.
1212 if (!ty->isAbstract() || UpRefs.empty()) return ty;
1213
Reid Spencer68a24bd2005-08-27 18:50:39 +00001214 PATypeHolder Ty(ty);
1215 UR_OUT("Type '" << Ty->getDescription() <<
1216 "' newly formed. Resolving upreferences.\n" <<
1217 UpRefs.size() << " upreferences active!\n");
1218
1219 // If we find any resolvable upreferences (i.e., those whose NestingLevel goes
1220 // to zero), we resolve them all together before we resolve them to Ty. At
1221 // the end of the loop, if there is anything to resolve to Ty, it will be in
1222 // this variable.
1223 OpaqueType *TypeToResolve = 0;
1224
1225 for (unsigned i = 0; i != UpRefs.size(); ++i) {
1226 UR_OUT(" UR#" << i << " - TypeContains(" << Ty->getDescription() << ", "
1227 << UpRefs[i].second->getDescription() << ") = "
1228 << (TypeContains(Ty, UpRefs[i].second) ? "true" : "false") << "\n");
1229 if (TypeContains(Ty, UpRefs[i].LastContainedTy)) {
1230 // Decrement level of upreference
1231 unsigned Level = --UpRefs[i].NestingLevel;
1232 UpRefs[i].LastContainedTy = Ty;
1233 UR_OUT(" Uplevel Ref Level = " << Level << "\n");
1234 if (Level == 0) { // Upreference should be resolved!
1235 if (!TypeToResolve) {
1236 TypeToResolve = UpRefs[i].UpRefTy;
1237 } else {
1238 UR_OUT(" * Resolving upreference for "
1239 << UpRefs[i].second->getDescription() << "\n";
1240 std::string OldName = UpRefs[i].UpRefTy->getDescription());
1241 UpRefs[i].UpRefTy->refineAbstractTypeTo(TypeToResolve);
1242 UR_OUT(" * Type '" << OldName << "' refined upreference to: "
1243 << (const void*)Ty << ", " << Ty->getDescription() << "\n");
1244 }
1245 UpRefs.erase(UpRefs.begin()+i); // Remove from upreference list...
1246 --i; // Do not skip the next element...
1247 }
1248 }
1249 }
1250
1251 if (TypeToResolve) {
1252 UR_OUT(" * Resolving upreference for "
1253 << UpRefs[i].second->getDescription() << "\n";
1254 std::string OldName = TypeToResolve->getDescription());
1255 TypeToResolve->refineAbstractTypeTo(Ty);
1256 }
1257
1258 return Ty;
1259}
1260
Reid Spencer68a24bd2005-08-27 18:50:39 +00001261//===----------------------------------------------------------------------===//
1262// RunVMAsmParser - Define an interface to this parser
1263//===----------------------------------------------------------------------===//
1264//
Reid Spencer14310612006-12-31 05:40:51 +00001265static Module* RunParser(Module * M);
1266
Reid Spencer68a24bd2005-08-27 18:50:39 +00001267Module *llvm::RunVMAsmParser(const std::string &Filename, FILE *F) {
1268 set_scan_file(F);
1269
1270 CurFilename = Filename;
1271 return RunParser(new Module(CurFilename));
1272}
1273
1274Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) {
1275 set_scan_string(AsmString);
1276
1277 CurFilename = "from_memory";
1278 if (M == NULL) {
1279 return RunParser(new Module (CurFilename));
1280 } else {
1281 return RunParser(M);
1282 }
1283}
1284
1285
Reid Spencered951ea2007-05-19 07:22:10 +00001286
1287/* Enabling traces. */
1288#ifndef YYDEBUG
1289# define YYDEBUG 0
1290#endif
1291
1292/* Enabling verbose error messages. */
1293#ifdef YYERROR_VERBOSE
1294# undef YYERROR_VERBOSE
1295# define YYERROR_VERBOSE 1
1296#else
1297# define YYERROR_VERBOSE 0
1298#endif
1299
1300/* Enabling the token table. */
1301#ifndef YYTOKEN_TABLE
1302# define YYTOKEN_TABLE 0
1303#endif
1304
1305#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
1306#line 955 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
1307typedef union YYSTYPE {
Reid Spencer68a24bd2005-08-27 18:50:39 +00001308 llvm::Module *ModuleVal;
1309 llvm::Function *FunctionVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001310 llvm::BasicBlock *BasicBlockVal;
1311 llvm::TerminatorInst *TermInstVal;
1312 llvm::Instruction *InstVal;
Reid Spencera132e042006-12-03 05:46:11 +00001313 llvm::Constant *ConstVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001314
Reid Spencera132e042006-12-03 05:46:11 +00001315 const llvm::Type *PrimType;
Reid Spencer14310612006-12-31 05:40:51 +00001316 std::list<llvm::PATypeHolder> *TypeList;
Reid Spencera132e042006-12-03 05:46:11 +00001317 llvm::PATypeHolder *TypeVal;
1318 llvm::Value *ValueVal;
Reid Spencera132e042006-12-03 05:46:11 +00001319 std::vector<llvm::Value*> *ValueList;
Reid Spencer14310612006-12-31 05:40:51 +00001320 llvm::ArgListType *ArgList;
1321 llvm::TypeWithAttrs TypeWithAttrs;
1322 llvm::TypeWithAttrsList *TypeWithAttrsList;
1323 llvm::ValueRefList *ValueRefList;
1324
Reid Spencer68a24bd2005-08-27 18:50:39 +00001325 // Represent the RHS of PHI node
Reid Spencera132e042006-12-03 05:46:11 +00001326 std::list<std::pair<llvm::Value*,
1327 llvm::BasicBlock*> > *PHIList;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001328 std::vector<std::pair<llvm::Constant*, llvm::BasicBlock*> > *JumpTable;
Reid Spencera132e042006-12-03 05:46:11 +00001329 std::vector<llvm::Constant*> *ConstVector;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001330
1331 llvm::GlobalValue::LinkageTypes Linkage;
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001332 llvm::GlobalValue::VisibilityTypes Visibility;
Reid Spencer7b5d4662007-04-09 06:16:21 +00001333 uint16_t ParamAttrs;
Reid Spencer38c91a92007-02-28 02:24:54 +00001334 llvm::APInt *APIntVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001335 int64_t SInt64Val;
1336 uint64_t UInt64Val;
1337 int SIntVal;
1338 unsigned UIntVal;
1339 double FPVal;
1340 bool BoolVal;
1341
1342 char *StrVal; // This memory is strdup'd!
Reid Spencer1628cec2006-10-26 06:15:43 +00001343 llvm::ValID ValIDVal; // strdup'd memory maybe!
Reid Spencer68a24bd2005-08-27 18:50:39 +00001344
Reid Spencera132e042006-12-03 05:46:11 +00001345 llvm::Instruction::BinaryOps BinaryOpVal;
1346 llvm::Instruction::TermOps TermOpVal;
1347 llvm::Instruction::MemoryOps MemOpVal;
1348 llvm::Instruction::CastOps CastOpVal;
1349 llvm::Instruction::OtherOps OtherOpVal;
Reid Spencera132e042006-12-03 05:46:11 +00001350 llvm::ICmpInst::Predicate IPredicate;
1351 llvm::FCmpInst::Predicate FPredicate;
Chris Lattner39b2e8b2007-05-04 04:01:37 +00001352} YYSTYPE;
Reid Spencered951ea2007-05-19 07:22:10 +00001353/* Line 196 of yacc.c. */
1354#line 1355 "llvmAsmParser.tab.c"
1355# define yystype YYSTYPE /* obsolescent; will be withdrawn */
1356# define YYSTYPE_IS_DECLARED 1
1357# define YYSTYPE_IS_TRIVIAL 1
Reid Spencer68a24bd2005-08-27 18:50:39 +00001358#endif
1359
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00001360
Reid Spencer68a24bd2005-08-27 18:50:39 +00001361
Reid Spencered951ea2007-05-19 07:22:10 +00001362/* Copy the second part of user declarations. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00001363
1364
Reid Spencered951ea2007-05-19 07:22:10 +00001365/* Line 219 of yacc.c. */
1366#line 1367 "llvmAsmParser.tab.c"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001367
Reid Spencered951ea2007-05-19 07:22:10 +00001368#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
1369# define YYSIZE_T __SIZE_TYPE__
1370#endif
1371#if ! defined (YYSIZE_T) && defined (size_t)
1372# define YYSIZE_T size_t
1373#endif
1374#if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus))
1375# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1376# define YYSIZE_T size_t
1377#endif
1378#if ! defined (YYSIZE_T)
1379# define YYSIZE_T unsigned int
1380#endif
Chris Lattner39b2e8b2007-05-04 04:01:37 +00001381
Reid Spencered951ea2007-05-19 07:22:10 +00001382#ifndef YY_
1383# if YYENABLE_NLS
1384# if ENABLE_NLS
1385# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
1386# define YY_(msgid) dgettext ("bison-runtime", msgid)
1387# endif
1388# endif
1389# ifndef YY_
1390# define YY_(msgid) msgid
1391# endif
1392#endif
1393
1394#if ! defined (yyoverflow) || YYERROR_VERBOSE
1395
1396/* The parser invokes alloca or malloc; define the necessary symbols. */
1397
1398# ifdef YYSTACK_USE_ALLOCA
1399# if YYSTACK_USE_ALLOCA
1400# ifdef __GNUC__
1401# define YYSTACK_ALLOC __builtin_alloca
1402# else
1403# define YYSTACK_ALLOC alloca
1404# if defined (__STDC__) || defined (__cplusplus)
1405# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1406# define YYINCLUDED_STDLIB_H
1407# endif
1408# endif
1409# endif
1410# endif
1411
1412# ifdef YYSTACK_ALLOC
1413 /* Pacify GCC's `empty if-body' warning. */
1414# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
1415# ifndef YYSTACK_ALLOC_MAXIMUM
1416 /* The OS might guarantee only one guard page at the bottom of the stack,
1417 and a page size can be as small as 4096 bytes. So we cannot safely
1418 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
1419 to allow for a few compiler-allocated temporary stack slots. */
1420# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */
1421# endif
1422# else
1423# define YYSTACK_ALLOC YYMALLOC
1424# define YYSTACK_FREE YYFREE
1425# ifndef YYSTACK_ALLOC_MAXIMUM
1426# define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1)
1427# endif
1428# ifdef __cplusplus
1429extern "C" {
1430# endif
1431# ifndef YYMALLOC
1432# define YYMALLOC malloc
1433# if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \
1434 && (defined (__STDC__) || defined (__cplusplus)))
1435void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1436# endif
1437# endif
1438# ifndef YYFREE
1439# define YYFREE free
1440# if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \
1441 && (defined (__STDC__) || defined (__cplusplus)))
1442void free (void *); /* INFRINGES ON USER NAME SPACE */
1443# endif
1444# endif
1445# ifdef __cplusplus
1446}
1447# endif
1448# endif
1449#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
1450
1451
1452#if (! defined (yyoverflow) \
1453 && (! defined (__cplusplus) \
1454 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
1455
1456/* A type that is properly aligned for any stack member. */
1457union yyalloc
1458{
1459 short int yyss;
1460 YYSTYPE yyvs;
1461 };
1462
1463/* The size of the maximum gap between one aligned stack and the next. */
1464# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
1465
1466/* The size of an array large to enough to hold all stacks, each with
1467 N elements. */
1468# define YYSTACK_BYTES(N) \
1469 ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \
1470 + YYSTACK_GAP_MAXIMUM)
1471
1472/* Copy COUNT objects from FROM to TO. The source and destination do
1473 not overlap. */
1474# ifndef YYCOPY
1475# if defined (__GNUC__) && 1 < __GNUC__
1476# define YYCOPY(To, From, Count) \
1477 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
1478# else
1479# define YYCOPY(To, From, Count) \
1480 do \
1481 { \
1482 YYSIZE_T yyi; \
1483 for (yyi = 0; yyi < (Count); yyi++) \
1484 (To)[yyi] = (From)[yyi]; \
1485 } \
1486 while (0)
1487# endif
1488# endif
1489
1490/* Relocate STACK from its old location to the new one. The
1491 local variables YYSIZE and YYSTACKSIZE give the old and new number of
1492 elements in the stack, and YYPTR gives the new location of the
1493 stack. Advance YYPTR to a properly aligned location for the next
1494 stack. */
1495# define YYSTACK_RELOCATE(Stack) \
1496 do \
1497 { \
1498 YYSIZE_T yynewbytes; \
1499 YYCOPY (&yyptr->Stack, Stack, yysize); \
1500 Stack = &yyptr->Stack; \
1501 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
1502 yyptr += yynewbytes / sizeof (*yyptr); \
1503 } \
1504 while (0)
Chris Lattner39b2e8b2007-05-04 04:01:37 +00001505
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00001506#endif
1507
Reid Spencered951ea2007-05-19 07:22:10 +00001508#if defined (__STDC__) || defined (__cplusplus)
1509 typedef signed char yysigned_char;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00001510#else
Reid Spencered951ea2007-05-19 07:22:10 +00001511 typedef short int yysigned_char;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00001512#endif
1513
Reid Spencered951ea2007-05-19 07:22:10 +00001514/* YYFINAL -- State number of the termination state. */
1515#define YYFINAL 43
1516/* YYLAST -- Last index in YYTABLE. */
1517#define YYLAST 1610
1518
1519/* YYNTOKENS -- Number of terminals. */
1520#define YYNTOKENS 152
1521/* YYNNTS -- Number of nonterminals. */
1522#define YYNNTS 82
1523/* YYNRULES -- Number of rules. */
1524#define YYNRULES 298
1525/* YYNRULES -- Number of states. */
1526#define YYNSTATES 582
1527
1528/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
1529#define YYUNDEFTOK 2
1530#define YYMAXUTOK 392
1531
1532#define YYTRANSLATE(YYX) \
1533 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
1534
1535/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
1536static const unsigned char yytranslate[] =
1537{
1538 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1539 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1540 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1541 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1542 142, 143, 140, 2, 139, 2, 2, 2, 2, 2,
1543 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1544 147, 138, 148, 2, 2, 2, 2, 2, 2, 2,
1545 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1546 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1547 2, 144, 141, 146, 2, 2, 2, 2, 2, 151,
1548 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1549 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1550 145, 2, 2, 149, 2, 150, 2, 2, 2, 2,
1551 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1552 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1553 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1554 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1555 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1556 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1557 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1558 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1559 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1560 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1561 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1562 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1563 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
1564 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1565 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1566 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1567 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1568 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
1569 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1570 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
1571 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
1572 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
1573 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
1574 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
1575 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
1576 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
1577 135, 136, 137
1578};
1579
1580#if YYDEBUG
1581/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
1582 YYRHS. */
1583static const unsigned short int yyprhs[] =
1584{
1585 0, 0, 3, 5, 7, 9, 11, 13, 15, 17,
1586 19, 21, 23, 25, 27, 29, 31, 33, 35, 37,
1587 39, 41, 43, 45, 47, 49, 51, 53, 55, 57,
1588 59, 61, 63, 65, 67, 69, 71, 73, 75, 77,
1589 79, 81, 83, 85, 87, 89, 91, 93, 95, 97,
1590 99, 101, 103, 105, 107, 109, 111, 113, 115, 117,
1591 119, 121, 123, 124, 127, 128, 130, 132, 134, 135,
1592 138, 140, 142, 144, 146, 148, 150, 152, 154, 155,
1593 157, 159, 161, 162, 164, 166, 167, 169, 171, 173,
1594 175, 176, 178, 180, 181, 183, 185, 187, 189, 191,
1595 194, 196, 198, 200, 202, 203, 206, 208, 210, 212,
1596 213, 216, 217, 220, 221, 225, 228, 229, 231, 232,
1597 236, 238, 241, 243, 245, 247, 249, 251, 253, 256,
1598 258, 261, 267, 273, 279, 285, 289, 292, 298, 303,
1599 306, 308, 310, 312, 316, 318, 322, 324, 325, 327,
1600 331, 336, 340, 344, 349, 354, 358, 365, 371, 374,
1601 377, 380, 383, 386, 389, 392, 395, 398, 401, 404,
1602 407, 414, 420, 429, 436, 443, 451, 459, 466, 475,
1603 484, 488, 490, 492, 494, 496, 497, 500, 507, 509,
1604 510, 512, 515, 516, 520, 521, 525, 529, 533, 537,
1605 538, 546, 547, 556, 557, 566, 572, 575, 579, 581,
1606 585, 589, 593, 597, 599, 600, 606, 610, 612, 616,
1607 618, 619, 629, 631, 633, 638, 640, 642, 645, 649,
1608 650, 652, 654, 656, 658, 660, 662, 664, 666, 668,
1609 672, 674, 680, 682, 684, 686, 688, 690, 692, 695,
1610 698, 701, 705, 708, 709, 711, 714, 717, 721, 731,
1611 741, 750, 765, 767, 769, 776, 782, 785, 792, 800,
1612 804, 810, 811, 812, 816, 819, 821, 827, 833, 840,
1613 847, 852, 859, 864, 869, 876, 883, 886, 895, 897,
1614 899, 900, 904, 911, 915, 922, 925, 931, 939
1615};
1616
1617/* YYRHS -- A `-1'-separated list of the rules' RHS. */
1618static const short int yyrhs[] =
1619{
1620 196, 0, -1, 70, -1, 71, -1, 72, -1, 73,
1621 -1, 74, -1, 75, -1, 76, -1, 77, -1, 78,
1622 -1, 82, -1, 83, -1, 84, -1, 79, -1, 80,
1623 -1, 81, -1, 113, -1, 114, -1, 115, -1, 116,
1624 -1, 117, -1, 118, -1, 119, -1, 120, -1, 121,
1625 -1, 122, -1, 123, -1, 124, -1, 87, -1, 88,
1626 -1, 89, -1, 90, -1, 91, -1, 92, -1, 93,
1627 -1, 94, -1, 95, -1, 96, -1, 97, -1, 98,
1628 -1, 99, -1, 100, -1, 101, -1, 102, -1, 103,
1629 -1, 104, -1, 105, -1, 106, -1, 93, -1, 94,
1630 -1, 95, -1, 96, -1, 23, -1, 24, -1, 11,
1631 -1, 12, -1, 13, -1, 16, -1, 19, -1, 21,
1632 -1, 160, -1, -1, 160, 138, -1, -1, 17, -1,
1633 20, -1, 165, -1, -1, 163, 138, -1, 39, -1,
1634 41, -1, 40, -1, 42, -1, 44, -1, 43, -1,
1635 45, -1, 47, -1, -1, 135, -1, 136, -1, 137,
1636 -1, -1, 43, -1, 45, -1, -1, 39, -1, 40,
1637 -1, 41, -1, 44, -1, -1, 41, -1, 39, -1,
1638 -1, 58, -1, 59, -1, 60, -1, 61, -1, 62,
1639 -1, 57, 4, -1, 114, -1, 115, -1, 132, -1,
1640 133, -1, -1, 174, 173, -1, 131, -1, 134, -1,
1641 173, -1, -1, 176, 175, -1, -1, 50, 4, -1,
1642 -1, 139, 50, 4, -1, 31, 19, -1, -1, 179,
1643 -1, -1, 139, 182, 181, -1, 179, -1, 50, 4,
1644 -1, 11, -1, 12, -1, 13, -1, 14, -1, 46,
1645 -1, 183, -1, 184, 140, -1, 218, -1, 141, 4,
1646 -1, 184, 142, 188, 143, 176, -1, 10, 142, 188,
1647 143, 176, -1, 144, 4, 145, 184, 146, -1, 147,
1648 4, 145, 184, 148, -1, 149, 189, 150, -1, 149,
1649 150, -1, 147, 149, 189, 150, 148, -1, 147, 149,
1650 150, 148, -1, 184, 174, -1, 184, -1, 10, -1,
1651 185, -1, 187, 139, 185, -1, 187, -1, 187, 139,
1652 36, -1, 36, -1, -1, 184, -1, 189, 139, 184,
1653 -1, 184, 144, 192, 146, -1, 184, 144, 146, -1,
1654 184, 151, 19, -1, 184, 147, 192, 148, -1, 184,
1655 149, 192, 150, -1, 184, 149, 150, -1, 184, 147,
1656 149, 192, 150, 148, -1, 184, 147, 149, 150, 148,
1657 -1, 184, 37, -1, 184, 38, -1, 184, 218, -1,
1658 184, 191, -1, 184, 22, -1, 158, 3, -1, 158,
1659 5, -1, 158, 4, -1, 158, 6, -1, 11, 23,
1660 -1, 11, 24, -1, 159, 9, -1, 155, 142, 190,
1661 35, 184, 143, -1, 112, 142, 190, 229, 143, -1,
1662 126, 142, 190, 139, 190, 139, 190, 143, -1, 153,
1663 142, 190, 139, 190, 143, -1, 154, 142, 190, 139,
1664 190, 143, -1, 85, 156, 142, 190, 139, 190, 143,
1665 -1, 86, 157, 142, 190, 139, 190, 143, -1, 128,
1666 142, 190, 139, 190, 143, -1, 129, 142, 190, 139,
1667 190, 139, 190, 143, -1, 130, 142, 190, 139, 190,
1668 139, 190, 143, -1, 192, 139, 190, -1, 190, -1,
1669 29, -1, 30, -1, 34, -1, -1, 186, 218, -1,
1670 118, 142, 195, 35, 184, 143, -1, 197, -1, -1,
1671 198, -1, 197, 198, -1, -1, 28, 199, 214, -1,
1672 -1, 27, 200, 215, -1, 55, 54, 204, -1, 162,
1673 15, 184, -1, 162, 15, 10, -1, -1, 164, 168,
1674 194, 193, 190, 201, 181, -1, -1, 164, 166, 168,
1675 194, 193, 190, 202, 181, -1, -1, 164, 167, 168,
1676 194, 193, 184, 203, 181, -1, 164, 168, 32, 171,
1677 195, -1, 48, 205, -1, 51, 138, 206, -1, 19,
1678 -1, 49, 138, 19, -1, 63, 138, 19, -1, 144,
1679 207, 146, -1, 207, 139, 19, -1, 19, -1, -1,
1680 208, 139, 184, 174, 161, -1, 184, 174, 161, -1,
1681 208, -1, 208, 139, 36, -1, 36, -1, -1, 172,
1682 186, 163, 142, 209, 143, 176, 180, 177, -1, 25,
1683 -1, 149, -1, 170, 168, 210, 211, -1, 26, -1,
1684 150, -1, 221, 213, -1, 169, 168, 210, -1, -1,
1685 56, -1, 3, -1, 4, -1, 9, -1, 23, -1,
1686 24, -1, 37, -1, 38, -1, 22, -1, 147, 192,
1687 148, -1, 191, -1, 54, 216, 19, 139, 19, -1,
1688 7, -1, 8, -1, 160, -1, 163, -1, 218, -1,
1689 217, -1, 184, 219, -1, 221, 222, -1, 212, 222,
1690 -1, 223, 162, 224, -1, 223, 226, -1, -1, 18,
1691 -1, 64, 220, -1, 64, 10, -1, 65, 14, 219,
1692 -1, 65, 11, 219, 139, 14, 219, 139, 14, 219,
1693 -1, 66, 158, 219, 139, 14, 219, 144, 225, 146,
1694 -1, 66, 158, 219, 139, 14, 219, 144, 146, -1,
1695 67, 172, 186, 219, 142, 228, 143, 176, 35, 14,
1696 219, 68, 14, 219, -1, 68, -1, 69, -1, 225,
1697 158, 217, 139, 14, 219, -1, 158, 217, 139, 14,
1698 219, -1, 162, 231, -1, 184, 144, 219, 139, 219,
1699 146, -1, 227, 139, 144, 219, 139, 219, 146, -1,
1700 184, 219, 174, -1, 228, 139, 184, 219, 174, -1,
1701 -1, -1, 229, 139, 220, -1, 53, 52, -1, 52,
1702 -1, 153, 184, 219, 139, 219, -1, 154, 184, 219,
1703 139, 219, -1, 85, 156, 184, 219, 139, 219, -1,
1704 86, 157, 184, 219, 139, 219, -1, 155, 220, 35,
1705 184, -1, 126, 220, 139, 220, 139, 220, -1, 127,
1706 220, 139, 184, -1, 128, 220, 139, 220, -1, 129,
1707 220, 139, 220, 139, 220, -1, 130, 220, 139, 220,
1708 139, 220, -1, 125, 227, -1, 230, 172, 186, 219,
1709 142, 228, 143, 176, -1, 233, -1, 33, -1, -1,
1710 107, 184, 178, -1, 107, 184, 139, 11, 219, 178,
1711 -1, 108, 184, 178, -1, 108, 184, 139, 11, 219,
1712 178, -1, 109, 220, -1, 232, 110, 184, 219, 178,
1713 -1, 232, 111, 220, 139, 184, 219, 178, -1, 112,
1714 184, 219, 229, -1
1715};
1716
1717/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
1718static const unsigned short int yyrline[] =
1719{
1720 0, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112,
1721 1112, 1113, 1113, 1113, 1113, 1113, 1113, 1114, 1114, 1114,
1722 1114, 1114, 1114, 1115, 1115, 1115, 1115, 1115, 1115, 1118,
1723 1118, 1119, 1119, 1120, 1120, 1121, 1121, 1122, 1122, 1126,
1724 1126, 1127, 1127, 1128, 1128, 1129, 1129, 1130, 1130, 1131,
1725 1131, 1132, 1132, 1133, 1134, 1139, 1140, 1140, 1142, 1142,
1726 1142, 1143, 1143, 1147, 1151, 1156, 1156, 1158, 1159, 1164,
1727 1170, 1171, 1172, 1173, 1174, 1178, 1179, 1180, 1184, 1185,
1728 1186, 1187, 1191, 1192, 1193, 1197, 1198, 1199, 1200, 1201,
1729 1205, 1206, 1207, 1210, 1211, 1212, 1213, 1214, 1215, 1216,
1730 1223, 1224, 1225, 1226, 1229, 1230, 1235, 1236, 1237, 1240,
1731 1241, 1248, 1249, 1255, 1256, 1264, 1272, 1273, 1278, 1279,
1732 1280, 1285, 1298, 1298, 1298, 1298, 1301, 1305, 1309, 1316,
1733 1321, 1329, 1359, 1390, 1395, 1407, 1417, 1421, 1431, 1438,
1734 1445, 1452, 1457, 1462, 1469, 1470, 1477, 1484, 1492, 1498,
1735 1510, 1538, 1554, 1583, 1611, 1637, 1657, 1683, 1703, 1715,
1736 1722, 1788, 1798, 1808, 1814, 1824, 1830, 1840, 1845, 1850,
1737 1858, 1870, 1892, 1900, 1906, 1917, 1922, 1927, 1933, 1939,
1738 1948, 1952, 1960, 1960, 1963, 1963, 1966, 1977, 1998, 2003,
1739 2011, 2012, 2016, 2016, 2020, 2020, 2023, 2026, 2050, 2061,
1740 2061, 2072, 2071, 2081, 2080, 2091, 2106, 2109, 2115, 2128,
1741 2132, 2137, 2139, 2144, 2149, 2158, 2168, 2179, 2183, 2192,
1742 2201, 2206, 2328, 2328, 2330, 2339, 2339, 2341, 2346, 2358,
1743 2362, 2367, 2371, 2375, 2379, 2383, 2387, 2391, 2395, 2399,
1744 2424, 2428, 2442, 2446, 2450, 2454, 2460, 2460, 2466, 2475,
1745 2479, 2488, 2497, 2506, 2510, 2515, 2519, 2523, 2528, 2538,
1746 2557, 2566, 2646, 2650, 2657, 2668, 2681, 2691, 2702, 2712,
1747 2721, 2730, 2733, 2734, 2741, 2745, 2750, 2771, 2788, 2802,
1748 2816, 2828, 2836, 2843, 2849, 2855, 2861, 2876, 2961, 2966,
1749 2970, 2977, 2984, 2992, 2999, 3007, 3015, 3029, 3046
1750};
1751#endif
1752
1753#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
1754/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1755 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
1756static const char *const yytname[] =
1757{
1758 "$end", "error", "$undefined", "ESINT64VAL", "EUINT64VAL", "ESAPINTVAL",
1759 "EUAPINTVAL", "LOCALVAL_ID", "GLOBALVAL_ID", "FPVAL", "VOID", "INTTYPE",
1760 "FLOAT", "DOUBLE", "LABEL", "TYPE", "LOCALVAR", "GLOBALVAR", "LABELSTR",
1761 "STRINGCONSTANT", "ATSTRINGCONSTANT", "PCTSTRINGCONSTANT",
1762 "ZEROINITIALIZER", "TRUETOK", "FALSETOK", "BEGINTOK", "ENDTOK",
1763 "DECLARE", "DEFINE", "GLOBAL", "CONSTANT", "SECTION", "ALIAS",
1764 "VOLATILE", "THREAD_LOCAL", "TO", "DOTDOTDOT", "NULL_TOK", "UNDEF",
1765 "INTERNAL", "LINKONCE", "WEAK", "APPENDING", "DLLIMPORT", "DLLEXPORT",
1766 "EXTERN_WEAK", "OPAQUE", "EXTERNAL", "TARGET", "TRIPLE", "ALIGN",
1767 "DEPLIBS", "CALL", "TAIL", "ASM_TOK", "MODULE", "SIDEEFFECT", "CC_TOK",
1768 "CCC_TOK", "FASTCC_TOK", "COLDCC_TOK", "X86_STDCALLCC_TOK",
1769 "X86_FASTCALLCC_TOK", "DATALAYOUT", "RET", "BR", "SWITCH", "INVOKE",
1770 "UNWIND", "UNREACHABLE", "ADD", "SUB", "MUL", "UDIV", "SDIV", "FDIV",
1771 "UREM", "SREM", "FREM", "AND", "OR", "XOR", "SHL", "LSHR", "ASHR",
1772 "ICMP", "FCMP", "EQ", "NE", "SLT", "SGT", "SLE", "SGE", "ULT", "UGT",
1773 "ULE", "UGE", "OEQ", "ONE", "OLT", "OGT", "OLE", "OGE", "ORD", "UNO",
1774 "UEQ", "UNE", "MALLOC", "ALLOCA", "FREE", "LOAD", "STORE",
1775 "GETELEMENTPTR", "TRUNC", "ZEXT", "SEXT", "FPTRUNC", "FPEXT", "BITCAST",
1776 "UITOFP", "SITOFP", "FPTOUI", "FPTOSI", "INTTOPTR", "PTRTOINT",
1777 "PHI_TOK", "SELECT", "VAARG", "EXTRACTELEMENT", "INSERTELEMENT",
1778 "SHUFFLEVECTOR", "NORETURN", "INREG", "SRET", "NOUNWIND", "DEFAULT",
1779 "HIDDEN", "PROTECTED", "'='", "','", "'*'", "'\\\\'", "'('", "')'",
1780 "'['", "'x'", "']'", "'<'", "'>'", "'{'", "'}'", "'c'", "$accept",
1781 "ArithmeticOps", "LogicalOps", "CastOps", "IPredicates", "FPredicates",
1782 "IntType", "FPType", "LocalName", "OptLocalName", "OptLocalAssign",
1783 "GlobalName", "OptGlobalAssign", "GlobalAssign", "GVInternalLinkage",
1784 "GVExternalLinkage", "GVVisibilityStyle", "FunctionDeclareLinkage",
1785 "FunctionDefineLinkage", "AliasLinkage", "OptCallingConv", "ParamAttr",
1786 "OptParamAttrs", "FuncAttr", "OptFuncAttrs", "OptAlign", "OptCAlign",
1787 "SectionString", "OptSection", "GlobalVarAttributes",
1788 "GlobalVarAttribute", "PrimType", "Types", "ArgType", "ResultTypes",
1789 "ArgTypeList", "ArgTypeListI", "TypeListI", "ConstVal", "ConstExpr",
1790 "ConstVector", "GlobalType", "ThreadLocal", "AliaseeRef", "Module",
1791 "DefinitionList", "Definition", "@1", "@2", "@3", "@4", "@5", "AsmBlock",
1792 "TargetDefinition", "LibrariesDefinition", "LibList", "ArgListH",
1793 "ArgList", "FunctionHeaderH", "BEGIN", "FunctionHeader", "END",
1794 "Function", "FunctionProto", "OptSideEffect", "ConstValueRef",
1795 "SymbolicValueRef", "ValueRef", "ResolvedVal", "BasicBlockList",
1796 "BasicBlock", "InstructionList", "BBTerminatorInst", "JumpTable", "Inst",
1797 "PHIList", "ValueRefList", "IndexList", "OptTailCall", "InstVal",
1798 "OptVolatile", "MemoryInst", 0
1799};
1800#endif
1801
1802# ifdef YYPRINT
1803/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
1804 token YYLEX-NUM. */
1805static const unsigned short int yytoknum[] =
1806{
1807 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
1808 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
1809 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
1810 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
1811 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
1812 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
1813 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
1814 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
1815 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
1816 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
1817 355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
1818 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
1819 375, 376, 377, 378, 379, 380, 381, 382, 383, 384,
1820 385, 386, 387, 388, 389, 390, 391, 392, 61, 44,
1821 42, 92, 40, 41, 91, 120, 93, 60, 62, 123,
1822 125, 99
1823};
1824# endif
1825
1826/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
1827static const unsigned char yyr1[] =
1828{
1829 0, 152, 153, 153, 153, 153, 153, 153, 153, 153,
1830 153, 154, 154, 154, 154, 154, 154, 155, 155, 155,
1831 155, 155, 155, 155, 155, 155, 155, 155, 155, 156,
1832 156, 156, 156, 156, 156, 156, 156, 156, 156, 157,
1833 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1834 157, 157, 157, 157, 157, 158, 159, 159, 160, 160,
1835 160, 161, 161, 162, 162, 163, 163, 164, 164, 165,
1836 166, 166, 166, 166, 166, 167, 167, 167, 168, 168,
1837 168, 168, 169, 169, 169, 170, 170, 170, 170, 170,
1838 171, 171, 171, 172, 172, 172, 172, 172, 172, 172,
1839 173, 173, 173, 173, 174, 174, 175, 175, 175, 176,
1840 176, 177, 177, 178, 178, 179, 180, 180, 181, 181,
1841 182, 182, 183, 183, 183, 183, 184, 184, 184, 184,
1842 184, 184, 184, 184, 184, 184, 184, 184, 184, 185,
1843 186, 186, 187, 187, 188, 188, 188, 188, 189, 189,
1844 190, 190, 190, 190, 190, 190, 190, 190, 190, 190,
1845 190, 190, 190, 190, 190, 190, 190, 190, 190, 190,
1846 191, 191, 191, 191, 191, 191, 191, 191, 191, 191,
1847 192, 192, 193, 193, 194, 194, 195, 195, 196, 196,
1848 197, 197, 199, 198, 200, 198, 198, 198, 198, 201,
1849 198, 202, 198, 203, 198, 198, 198, 198, 204, 205,
1850 205, 206, 207, 207, 207, 208, 208, 209, 209, 209,
1851 209, 210, 211, 211, 212, 213, 213, 214, 215, 216,
1852 216, 217, 217, 217, 217, 217, 217, 217, 217, 217,
1853 217, 217, 218, 218, 218, 218, 219, 219, 220, 221,
1854 221, 222, 223, 223, 223, 224, 224, 224, 224, 224,
1855 224, 224, 224, 224, 225, 225, 226, 227, 227, 228,
1856 228, 228, 229, 229, 230, 230, 231, 231, 231, 231,
1857 231, 231, 231, 231, 231, 231, 231, 231, 231, 232,
1858 232, 233, 233, 233, 233, 233, 233, 233, 233
1859};
1860
1861/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
1862static const unsigned char yyr2[] =
1863{
1864 0, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1865 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1866 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1867 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1868 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1869 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1870 1, 1, 0, 2, 0, 1, 1, 1, 0, 2,
1871 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,
1872 1, 1, 0, 1, 1, 0, 1, 1, 1, 1,
1873 0, 1, 1, 0, 1, 1, 1, 1, 1, 2,
1874 1, 1, 1, 1, 0, 2, 1, 1, 1, 0,
1875 2, 0, 2, 0, 3, 2, 0, 1, 0, 3,
1876 1, 2, 1, 1, 1, 1, 1, 1, 2, 1,
1877 2, 5, 5, 5, 5, 3, 2, 5, 4, 2,
1878 1, 1, 1, 3, 1, 3, 1, 0, 1, 3,
1879 4, 3, 3, 4, 4, 3, 6, 5, 2, 2,
1880 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1881 6, 5, 8, 6, 6, 7, 7, 6, 8, 8,
1882 3, 1, 1, 1, 1, 0, 2, 6, 1, 0,
1883 1, 2, 0, 3, 0, 3, 3, 3, 3, 0,
1884 7, 0, 8, 0, 8, 5, 2, 3, 1, 3,
1885 3, 3, 3, 1, 0, 5, 3, 1, 3, 1,
1886 0, 9, 1, 1, 4, 1, 1, 2, 3, 0,
1887 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
1888 1, 5, 1, 1, 1, 1, 1, 1, 2, 2,
1889 2, 3, 2, 0, 1, 2, 2, 3, 9, 9,
1890 8, 14, 1, 1, 6, 5, 2, 6, 7, 3,
1891 5, 0, 0, 3, 2, 1, 5, 5, 6, 6,
1892 4, 6, 4, 4, 6, 6, 2, 8, 1, 1,
1893 0, 3, 6, 3, 6, 2, 5, 7, 4
1894};
1895
1896/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
1897 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
1898 means the default is an error. */
1899static const unsigned short int yydefact[] =
1900{
1901 68, 58, 65, 59, 66, 60, 194, 192, 0, 0,
1902 0, 0, 0, 0, 78, 67, 0, 68, 190, 82,
1903 85, 0, 0, 206, 0, 0, 63, 0, 69, 70,
1904 72, 71, 73, 75, 74, 76, 77, 79, 80, 81,
1905 78, 78, 185, 1, 191, 83, 84, 78, 195, 86,
1906 87, 88, 89, 78, 253, 193, 253, 0, 0, 214,
1907 207, 208, 196, 242, 243, 198, 122, 123, 124, 125,
1908 126, 0, 0, 0, 0, 244, 245, 127, 197, 129,
1909 185, 185, 90, 184, 0, 93, 93, 254, 250, 64,
1910 225, 226, 227, 249, 209, 210, 213, 0, 147, 130,
1911 0, 0, 0, 0, 136, 148, 0, 128, 147, 0,
1912 0, 92, 91, 0, 182, 183, 0, 0, 94, 95,
1913 96, 97, 98, 0, 228, 0, 290, 252, 0, 211,
1914 146, 104, 142, 144, 0, 0, 0, 0, 0, 0,
1915 135, 0, 0, 0, 141, 0, 140, 0, 205, 122,
1916 123, 124, 0, 0, 0, 199, 99, 0, 222, 223,
1917 224, 289, 275, 0, 0, 0, 0, 93, 262, 263,
1918 2, 3, 4, 5, 6, 7, 8, 9, 10, 14,
1919 15, 16, 11, 12, 13, 0, 0, 0, 0, 0,
1920 0, 17, 18, 19, 20, 21, 22, 23, 24, 25,
1921 26, 27, 28, 0, 0, 0, 0, 0, 0, 0,
1922 0, 0, 251, 93, 266, 0, 288, 212, 139, 0,
1923 109, 0, 0, 138, 0, 149, 109, 201, 203, 0,
1924 186, 167, 168, 163, 165, 164, 166, 169, 162, 158,
1925 159, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1926 0, 0, 0, 0, 0, 161, 160, 118, 0, 274,
1927 256, 0, 255, 0, 0, 55, 0, 0, 29, 30,
1928 31, 32, 33, 34, 35, 36, 37, 38, 0, 53,
1929 54, 49, 50, 51, 52, 39, 40, 41, 42, 43,
1930 44, 45, 46, 47, 48, 0, 113, 113, 295, 0,
1931 0, 286, 0, 0, 0, 0, 0, 0, 0, 0,
1932 0, 0, 0, 100, 101, 102, 103, 105, 145, 143,
1933 132, 133, 134, 137, 131, 118, 118, 0, 0, 0,
1934 0, 0, 0, 0, 0, 151, 181, 0, 0, 0,
1935 155, 0, 152, 0, 0, 0, 0, 200, 220, 231,
1936 232, 233, 238, 234, 235, 236, 237, 229, 0, 240,
1937 247, 246, 248, 0, 257, 0, 0, 0, 0, 0,
1938 291, 0, 293, 272, 0, 0, 0, 0, 0, 0,
1939 0, 0, 0, 0, 0, 0, 0, 106, 107, 108,
1940 110, 202, 204, 0, 0, 0, 272, 0, 0, 0,
1941 0, 0, 150, 136, 148, 0, 153, 154, 0, 0,
1942 0, 0, 0, 120, 118, 219, 104, 217, 0, 230,
1943 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1944 298, 0, 0, 0, 282, 283, 0, 0, 0, 0,
1945 280, 0, 113, 0, 0, 0, 0, 0, 0, 0,
1946 0, 0, 180, 157, 0, 0, 0, 0, 115, 121,
1947 119, 62, 0, 109, 0, 239, 0, 0, 271, 0,
1948 0, 113, 114, 113, 0, 0, 0, 0, 0, 0,
1949 276, 277, 271, 0, 296, 0, 187, 0, 0, 171,
1950 0, 0, 0, 0, 156, 0, 0, 0, 61, 216,
1951 218, 104, 116, 0, 0, 0, 0, 0, 278, 279,
1952 292, 294, 273, 0, 0, 281, 284, 285, 0, 113,
1953 0, 0, 0, 177, 0, 0, 173, 174, 170, 62,
1954 117, 111, 241, 0, 0, 104, 0, 109, 267, 0,
1955 109, 297, 175, 176, 0, 0, 0, 215, 0, 221,
1956 0, 260, 0, 0, 269, 0, 0, 268, 287, 172,
1957 178, 179, 112, 258, 0, 259, 0, 104, 0, 0,
1958 0, 270, 0, 0, 0, 0, 265, 0, 0, 264,
1959 0, 261
1960};
1961
1962/* YYDEFGOTO[NTERM-NUM]. */
1963static const short int yydefgoto[] =
1964{
1965 -1, 252, 253, 254, 278, 295, 152, 153, 75, 499,
1966 12, 76, 14, 15, 40, 41, 42, 47, 53, 113,
1967 123, 317, 218, 390, 320, 549, 370, 413, 531, 347,
1968 414, 77, 154, 132, 147, 133, 134, 106, 336, 359,
1969 337, 116, 84, 148, 16, 17, 18, 20, 19, 257,
1970 325, 326, 62, 23, 60, 97, 417, 418, 124, 160,
1971 54, 92, 55, 48, 420, 360, 79, 362, 262, 56,
1972 88, 89, 212, 553, 127, 301, 507, 430, 213, 214,
1973 215, 216
1974};
1975
1976/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1977 STATE-NUM. */
1978#define YYPACT_NINF -509
1979static const short int yypact[] =
1980{
1981 47, -509, -509, -509, -509, -509, -509, -509, -8, -120,
1982 -11, -110, 58, -77, 432, -509, 79, 240, -509, 204,
1983 64, -50, -32, -509, -17, 114, -509, 1280, -509, -509,
1984 -509, -509, -509, -509, -509, -509, -509, -509, -509, -509,
1985 102, 102, 286, -509, -509, -509, -509, 102, -509, -509,
1986 -509, -509, -509, 102, 122, -509, 1, 130, 141, 157,
1987 -509, -509, -509, -509, -509, 62, -509, -509, -509, -509,
1988 -509, 191, 239, 5, 365, -509, -509, -509, 181, -509,
1989 196, 196, 292, -509, 170, 220, 220, -509, -509, 118,
1990 -509, -509, -509, -509, -509, -509, -509, -93, 1082, -509,
1991 101, 106, 566, 62, -509, 181, -94, -509, 1082, 170,
1992 170, -509, -509, 1122, -509, -509, 1327, 250, -509, -509,
1993 -509, -509, -509, 1342, -509, -14, 1480, -509, 251, -509,
1994 -509, 181, -509, 119, 140, 1379, 1379, 125, -58, 1379,
1995 -509, 147, 1327, 1379, 62, 151, 181, 255, -509, 28,
1996 302, 308, 219, 315, 863, -509, -509, 149, -509, -509,
1997 -509, -509, -509, 273, 1394, 222, 317, 220, -509, -509,
1998 -509, -509, -509, -509, -509, -509, -509, -509, -509, -509,
1999 -509, -509, -509, -509, -509, 395, 443, 1379, 1379, 1379,
2000 1379, -509, -509, -509, -509, -509, -509, -509, -509, -509,
2001 -509, -509, -509, 1379, 1379, 1379, 1379, 1379, 1379, 1379,
2002 1379, 1379, -509, 220, -509, 155, -509, -509, 14, 1137,
2003 -509, -10, -41, -509, 184, 181, -509, -509, 181, 1122,
2004 -509, -509, -509, -509, -509, -509, -509, -509, -509, -509,
2005 -509, 395, 443, 192, 194, 195, 197, 198, 1168, 1431,
2006 820, 319, 199, 200, 201, -509, -509, 205, 206, -509,
2007 62, 610, -509, 739, 739, -509, 739, 1342, -509, -509,
2008 -509, -509, -509, -509, -509, -509, -509, -509, 1379, -509,
2009 -509, -509, -509, -509, -509, -509, -509, -509, -509, -509,
2010 -509, -509, -509, -509, -509, 1379, 2, 66, -509, 610,
2011 46, 207, 208, 210, 216, 217, 224, 610, 610, 323,
2012 1342, 1379, 1379, -509, -509, -509, -509, -509, -509, -509,
2013 41, -509, -509, -509, 41, 205, 205, 326, 227, 238,
2014 1327, 1327, 1327, 1327, 1327, -509, -509, -46, 904, -99,
2015 -509, -56, -509, 1327, 1327, 1327, 19, -509, 1184, -509,
2016 -509, -509, -509, -509, -509, -509, -509, 312, 1327, -509,
2017 -509, -509, -509, 244, -509, 248, 739, 610, 610, 10,
2018 -509, 15, -509, -509, 739, 246, 1379, 1379, 1379, 1379,
2019 1379, 249, 252, 1379, 739, 610, 253, -509, -509, -509,
2020 -509, -509, -509, 1379, 1327, 1327, -509, 254, 257, 258,
2021 259, 1327, -509, 260, 863, -54, -509, -509, 261, 262,
2022 359, 380, 398, -509, 205, -509, 181, 266, 263, -509,
2023 388, -68, 399, 400, 267, 277, 283, 739, 408, 739,
2024 284, 285, 739, 288, 181, -509, 289, 290, 739, 739,
2025 181, 293, 291, 1379, 89, 295, 299, -24, 1327, 1327,
2026 1327, 1327, -509, -509, 296, 1327, 1327, 1379, -509, -509,
2027 -509, 38, 1231, -509, 300, -509, 739, 739, 1379, 739,
2028 739, 291, -509, 291, 1379, 739, 304, 1379, 1379, 1379,
2029 -509, -509, 1379, 391, -509, 610, -509, 1327, 1327, -509,
2030 306, 303, 310, 311, -509, 316, 322, 154, -509, -509,
2031 -509, 181, 83, 428, 321, 324, 610, -23, -509, -509,
2032 -509, -509, -509, 309, 739, -509, -509, -509, 53, 291,
2033 335, 350, 1327, -509, 1327, 1327, -509, -509, -509, 38,
2034 -509, 404, -509, 455, -1, -509, 1379, -509, -509, 351,
2035 -509, -509, -509, -509, 353, 355, 356, -509, 496, -509,
2036 739, -509, 993, 4, 14, 610, 87, -509, 41, -509,
2037 -509, -509, -509, -509, 362, -509, 993, -509, 488, 489,
2038 366, 14, 739, 739, 490, 439, -509, 739, 494, -509,
2039 739, -509
2040};
2041
2042/* YYPGOTO[NTERM-NUM]. */
2043static const short int yypgoto[] =
2044{
2045 -509, 385, 387, 390, 276, 278, -164, -509, 0, -7,
2046 429, 8, -509, -509, -509, -509, 37, -509, -509, -509,
2047 -143, -308, -410, -509, -221, -509, -284, 17, -509, -296,
2048 -509, -509, -26, 305, -119, -509, 413, 424, -30, -151,
2049 -227, 103, 226, 298, -509, -509, 513, -509, -509, -509,
2050 -509, -509, -509, -509, -509, -509, -509, -509, 445, -509,
2051 -509, -509, -509, -509, -509, -508, -140, 96, -169, -509,
2052 476, -509, -509, -509, -509, -509, 51, 156, -509, -509,
2053 -509, -509
2054};
2055
2056/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
2057 positive, shift that token. If negative, reduce the rule which
2058 number is the opposite. If zero, do what YYDEFACT says.
2059 If YYTABLE_NINF, syntax error. */
2060#define YYTABLE_NINF -190
2061static const short int yytable[] =
2062{
2063 11, 78, 266, 255, 157, 324, 461, 230, 13, 101,
2064 265, 158, 389, 372, 256, 265, 389, 11, 24, 87,
2065 298, 427, 339, 341, 267, 13, 429, 90, 26, 391,
2066 392, -55, -55, -55, -55, 302, 303, 304, 305, 306,
2067 401, 21, 309, 25, 564, 139, 128, -189, 105, 406,
2068 411, 231, 232, 129, 1, 22, 140, 3, 570, 5,
2069 428, 28, -64, 1, 2, 428, 3, 4, 5, 412,
2070 310, 401, 131, 27, 6, 7, 105, 80, 81, 43,
2071 465, 139, 131, 401, 85, 401, 155, 146, 57, 11,
2072 86, 529, 224, 401, 407, 8, 454, 146, 9, 107,
2073 402, 108, 10, 49, 50, 51, 58, 322, 52, 221,
2074 222, 405, 227, 225, 411, 474, 536, 228, 460, 489,
2075 537, 361, 568, 361, 361, 554, 361, 59, 313, 314,
2076 107, 421, 108, 61, 1, 159, 321, 3, 261, 5,
2077 87, 369, 107, 386, 108, 551, 315, 316, 366, 94,
2078 565, 91, 313, 314, 102, 313, 314, 571, 484, 361,
2079 95, 296, 297, 261, 299, 258, 2, 361, 361, 4,
2080 315, 316, 387, 315, 316, 388, 96, 300, 261, 261,
2081 261, 261, 261, 307, 308, 261, 107, 510, 108, 511,
2082 374, 384, 536, 131, 389, 99, 540, 313, 314, 114,
2083 115, 313, 314, 146, 98, 371, 107, 433, 108, 435,
2084 436, 437, 142, 143, 387, 315, 316, 388, 387, 315,
2085 316, 388, 233, 234, 235, 236, 361, 361, 361, 107,
2086 83, 108, 486, 263, 361, 541, 264, 37, 38, 39,
2087 -188, 146, 502, 100, 361, 361, 135, 45, 389, 46,
2088 389, 136, 367, 255, 156, -64, 1, 2, 219, 3,
2089 4, 5, 63, 64, 256, 311, 312, 6, 7, 368,
2090 217, 1, 2, 223, 3, 4, 5, 117, 118, 119,
2091 120, 121, 122, 220, 146, 385, 261, 361, 8, 361,
2092 226, 9, 361, 229, 107, 10, 108, 528, 361, 361,
2093 396, 397, 398, 399, 400, 512, 109, 110, 515, 516,
2094 517, -56, 404, 408, 409, 410, 556, -57, 82, 558,
2095 83, 107, 416, 108, 237, 259, 361, 361, 265, 361,
2096 361, 111, 323, 112, 330, 361, 331, 332, 342, 333,
2097 334, 343, 344, 345, 346, 361, 375, 376, 348, 377,
2098 261, 434, 261, 261, 261, 378, 379, 440, 383, 363,
2099 364, 393, 365, 380, 445, 446, 361, 444, 419, 394,
2100 552, 452, 63, 64, 361, 103, 66, 67, 68, 69,
2101 395, 1, 2, 422, 3, 4, 5, 423, 438, 566,
2102 432, 439, 443, 448, 457, 373, 449, 450, 451, 458,
2103 455, 456, 459, 381, 382, 462, 463, 464, 453, 468,
2104 361, 70, 472, 466, 467, 361, 469, 485, 490, 491,
2105 492, 493, 470, 474, 475, 495, 496, 477, 478, 479,
2106 483, 497, 361, 361, 487, 482, 501, 361, 488, 503,
2107 361, 428, 506, 514, 494, 522, 523, 532, 261, 524,
2108 525, 261, 261, 261, 548, 538, 506, 520, 521, 526,
2109 533, 498, 424, 425, 426, 527, 279, 280, 534, 550,
2110 431, 29, 30, 31, 32, 33, 34, 35, 542, 36,
2111 441, 442, 268, 269, 270, 271, 272, 273, 274, 275,
2112 276, 277, 544, 543, 545, 546, 559, 557, 560, 561,
2113 562, 569, 572, 573, 577, 574, 71, 578, 580, 72,
2114 555, 209, 73, 210, 74, 104, 211, 328, 126, 530,
2115 329, 141, 547, 471, 319, 473, 138, 327, 476, 498,
2116 44, 125, 93, 518, 480, 481, 281, 282, 283, 284,
2117 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
2118 0, 0, 447, 0, 0, 0, 0, 0, 0, 0,
2119 0, 0, 504, 505, 0, 508, 509, 37, 38, 39,
2120 0, 513, 0, 63, 64, 0, 103, 66, 67, 68,
2121 69, 519, 1, 2, 0, 3, 4, 5, 0, 0,
2122 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2123 0, 0, 535, 0, 0, 0, 0, 0, 0, 0,
2124 539, 0, 70, 349, 350, 0, 0, 63, 64, 351,
2125 0, 0, 0, 0, 0, 0, 1, 2, 0, 3,
2126 4, 5, 352, 353, 354, 0, 0, 0, 0, 0,
2127 0, 0, 0, 0, 0, 0, 563, 355, 356, 0,
2128 0, 567, 0, 0, 0, 0, 0, 0, 0, 0,
2129 0, 0, 0, 0, 357, 0, 0, 0, 575, 576,
2130 0, 0, 0, 579, 0, 0, 581, 0, 0, 0,
2131 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
2132 180, 181, 182, 183, 184, 241, 242, 0, 0, 0,
2133 0, 0, 0, 0, 0, 0, 0, 71, 0, 0,
2134 72, 0, 0, 73, 0, 74, 137, 0, 0, 0,
2135 0, 0, 243, 191, 192, 193, 194, 195, 196, 197,
2136 198, 199, 200, 201, 202, 0, 244, 0, 245, 246,
2137 247, 0, 349, 350, 0, 0, 63, 64, 351, 0,
2138 107, 0, 108, 0, 0, 1, 2, 358, 3, 4,
2139 5, 352, 353, 354, 0, 0, 0, 0, 0, 0,
2140 0, 0, 0, 0, 0, 0, 355, 356, 0, 0,
2141 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2142 0, 0, 0, 357, 0, 0, 0, 0, 0, 0,
2143 0, 0, 0, 0, 0, 0, 0, 0, 0, 170,
2144 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
2145 181, 182, 183, 184, 241, 242, 0, 63, 64, 0,
2146 103, 149, 150, 151, 69, 0, 1, 2, 0, 3,
2147 4, 5, 0, 0, 0, 0, 0, 0, 0, 0,
2148 0, 243, 191, 192, 193, 194, 195, 196, 197, 198,
2149 199, 200, 201, 202, 0, 244, 70, 245, 246, 247,
2150 63, 64, 0, 0, 0, 0, 0, 0, 0, 1,
2151 2, 0, 3, 4, 5, 238, 358, 0, 0, 0,
2152 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2153 239, 240, 0, 0, 0, 0, 0, 0, 0, 0,
2154 0, 63, 64, 0, 103, 149, 150, 151, 69, 0,
2155 1, 2, 0, 3, 4, 5, 0, 0, 0, 0,
2156 0, 0, 0, 170, 171, 172, 173, 174, 175, 176,
2157 177, 178, 179, 180, 181, 182, 183, 184, 241, 242,
2158 70, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2159 0, 71, 0, 0, 72, 0, 0, 73, 0, 74,
2160 340, 0, 0, 0, 0, 243, 191, 192, 193, 194,
2161 195, 196, 197, 198, 199, 200, 201, 202, 0, 244,
2162 0, 245, 246, 247, 0, 0, 349, 350, 0, 0,
2163 0, 0, 351, 107, 0, 108, 0, 248, 0, 0,
2164 249, 0, 250, 0, 251, 352, 353, 354, 0, 0,
2165 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2166 355, 356, 0, 0, 0, 0, 0, 0, 0, 0,
2167 0, 0, 0, 0, 0, 71, 0, 357, 72, 0,
2168 0, 73, 0, 74, 403, 0, 0, 0, 0, 0,
2169 0, 0, 0, 170, 171, 172, 173, 174, 175, 176,
2170 177, 178, 179, 180, 181, 182, 183, 184, 241, 242,
2171 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
2172 64, 0, 103, 66, 67, 68, 69, 0, 1, 2,
2173 0, 3, 4, 5, 0, 243, 191, 192, 193, 194,
2174 195, 196, 197, 198, 199, 200, 201, 202, 130, 244,
2175 0, 245, 246, 247, 0, 0, 0, 0, 70, 63,
2176 64, 0, 144, 66, 67, 68, 69, 0, 1, 2,
2177 358, 3, 4, 5, 63, 64, 0, 103, 66, 67,
2178 68, 69, 0, 1, 2, 0, 3, 4, 5, 0,
2179 0, 0, 0, 0, 0, 0, 0, 0, 70, 0,
2180 0, 0, 0, 318, 0, 63, 64, 0, 103, 149,
2181 150, 151, 69, 70, 1, 2, 0, 3, 4, 5,
2182 0, 63, 64, 0, 103, 66, 67, 68, 69, 0,
2183 1, 2, 0, 3, 4, 5, 0, 0, 0, 0,
2184 0, 0, 0, 0, 70, 0, 0, 0, 0, 0,
2185 415, 0, 0, 71, 0, 0, 72, 0, 0, 73,
2186 70, 74, 0, 0, 0, 0, 0, 0, 63, 64,
2187 145, 103, 66, 67, 68, 69, 0, 1, 2, 0,
2188 3, 4, 5, 0, 0, 0, 0, 0, 0, 0,
2189 0, 0, 0, 71, 0, 0, 72, 500, 0, 73,
2190 0, 74, 0, 0, 0, 0, 0, 70, 71, 0,
2191 0, 72, 0, 0, 73, 0, 74, 63, 64, 0,
2192 65, 66, 67, 68, 69, 0, 1, 2, 0, 3,
2193 4, 5, 0, 0, 0, 0, 0, 0, 0, 71,
2194 0, 0, 72, 0, 335, 73, 0, 74, 0, 0,
2195 0, 0, 0, 0, 0, 71, 70, 0, 72, 0,
2196 0, 73, 0, 74, 63, 64, 0, 103, 149, 150,
2197 151, 69, 0, 1, 2, 0, 3, 4, 5, 63,
2198 64, 0, 144, 66, 67, 68, 69, 0, 1, 2,
2199 0, 3, 4, 5, 0, 0, 0, 0, 0, 0,
2200 0, 0, 71, 70, 0, 72, 0, 0, 73, 0,
2201 74, 0, 0, 0, 0, 0, 63, 64, 70, 103,
2202 66, 67, 68, 69, 0, 1, 2, 0, 3, 4,
2203 5, 63, 64, 0, 260, 66, 67, 68, 69, 0,
2204 1, 2, 0, 3, 4, 5, 0, 0, 0, 0,
2205 0, 71, 0, 0, 72, 70, 0, 73, 0, 74,
2206 0, 0, 0, 0, 0, 0, 0, 0, 63, 64,
2207 70, 103, 149, 150, 151, 69, 0, 1, 2, 0,
2208 3, 4, 5, 0, 0, 0, 0, 0, 0, 0,
2209 0, 0, 0, 0, 0, 0, 0, 0, 71, 0,
2210 0, 72, 0, 0, 73, 0, 74, 70, 0, 0,
2211 0, 0, 0, 71, 0, 0, 72, 0, 0, 73,
2212 0, 74, 0, 0, 0, 0, 0, 0, 0, 0,
2213 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2214 0, 0, 0, 161, 0, 0, 0, 0, 0, 0,
2215 71, 0, 0, 72, 0, 0, 73, 0, 74, 0,
2216 0, 0, 162, 163, 0, 71, 0, 0, 72, 0,
2217 0, 73, 0, 74, 164, 165, 166, 167, 168, 169,
2218 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
2219 180, 181, 182, 183, 184, 185, 186, 0, 0, 0,
2220 0, 0, 71, 0, 0, 72, 0, 0, 73, 0,
2221 338, 0, 0, 0, 0, 0, 0, 187, 188, 189,
2222 0, 0, 190, 191, 192, 193, 194, 195, 196, 197,
2223 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
2224 208
2225};
2226
2227static const short int yycheck[] =
2228{
2229 0, 27, 166, 154, 123, 226, 416, 147, 0, 4,
2230 11, 25, 320, 297, 154, 11, 324, 17, 138, 18,
2231 189, 11, 249, 250, 167, 17, 11, 26, 138, 325,
2232 326, 3, 4, 5, 6, 204, 205, 206, 207, 208,
2233 139, 49, 211, 54, 552, 139, 139, 0, 74, 148,
2234 31, 23, 24, 146, 16, 63, 150, 19, 566, 21,
2235 50, 138, 15, 16, 17, 50, 19, 20, 21, 50,
2236 213, 139, 98, 15, 27, 28, 102, 40, 41, 0,
2237 148, 139, 108, 139, 47, 139, 116, 113, 138, 89,
2238 53, 501, 150, 139, 150, 48, 150, 123, 51, 140,
2239 146, 142, 55, 39, 40, 41, 138, 148, 44, 135,
2240 136, 338, 142, 139, 31, 139, 139, 143, 414, 143,
2241 143, 261, 35, 263, 264, 535, 266, 144, 114, 115,
2242 140, 358, 142, 19, 16, 149, 146, 19, 164, 21,
2243 18, 139, 140, 312, 142, 146, 132, 133, 267, 19,
2244 146, 150, 114, 115, 149, 114, 115, 567, 442, 299,
2245 19, 187, 188, 189, 190, 157, 17, 307, 308, 20,
2246 132, 133, 131, 132, 133, 134, 19, 203, 204, 205,
2247 206, 207, 208, 209, 210, 211, 140, 471, 142, 473,
2248 144, 310, 139, 219, 502, 4, 143, 114, 115, 29,
2249 30, 114, 115, 229, 142, 139, 140, 376, 142, 378,
2250 379, 380, 109, 110, 131, 132, 133, 134, 131, 132,
2251 133, 134, 3, 4, 5, 6, 366, 367, 368, 140,
2252 34, 142, 143, 11, 374, 519, 14, 135, 136, 137,
2253 0, 267, 463, 4, 384, 385, 145, 43, 556, 45,
2254 558, 145, 278, 404, 4, 15, 16, 17, 139, 19,
2255 20, 21, 7, 8, 404, 110, 111, 27, 28, 295,
2256 19, 16, 17, 148, 19, 20, 21, 57, 58, 59,
2257 60, 61, 62, 143, 310, 311, 312, 427, 48, 429,
2258 143, 51, 432, 142, 140, 55, 142, 143, 438, 439,
2259 330, 331, 332, 333, 334, 474, 80, 81, 477, 478,
2260 479, 9, 338, 343, 344, 345, 537, 9, 32, 540,
2261 34, 140, 348, 142, 9, 52, 466, 467, 11, 469,
2262 470, 39, 148, 41, 142, 475, 142, 142, 19, 142,
2263 142, 142, 142, 142, 139, 485, 139, 139, 142, 139,
2264 376, 377, 378, 379, 380, 139, 139, 383, 35, 263,
2265 264, 35, 266, 139, 394, 395, 506, 393, 56, 142,
2266 534, 401, 7, 8, 514, 10, 11, 12, 13, 14,
2267 142, 16, 17, 139, 19, 20, 21, 139, 139, 553,
2268 144, 139, 139, 139, 35, 299, 139, 139, 139, 19,
2269 139, 139, 4, 307, 308, 139, 143, 19, 148, 142,
2270 550, 46, 4, 14, 14, 555, 139, 443, 448, 449,
2271 450, 451, 139, 139, 139, 455, 456, 139, 139, 139,
2272 139, 457, 572, 573, 139, 142, 462, 577, 139, 139,
2273 580, 50, 468, 139, 148, 139, 143, 19, 474, 139,
2274 139, 477, 478, 479, 50, 146, 482, 487, 488, 143,
2275 139, 461, 366, 367, 368, 143, 23, 24, 144, 14,
2276 374, 39, 40, 41, 42, 43, 44, 45, 143, 47,
2277 384, 385, 87, 88, 89, 90, 91, 92, 93, 94,
2278 95, 96, 522, 143, 524, 525, 143, 146, 143, 143,
2279 4, 139, 14, 14, 14, 139, 141, 68, 14, 144,
2280 536, 126, 147, 126, 149, 150, 126, 241, 89, 502,
2281 242, 108, 529, 427, 219, 429, 102, 229, 432, 529,
2282 17, 86, 56, 482, 438, 439, 93, 94, 95, 96,
2283 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
2284 -1, -1, 396, -1, -1, -1, -1, -1, -1, -1,
2285 -1, -1, 466, 467, -1, 469, 470, 135, 136, 137,
2286 -1, 475, -1, 7, 8, -1, 10, 11, 12, 13,
2287 14, 485, 16, 17, -1, 19, 20, 21, -1, -1,
2288 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2289 -1, -1, 506, -1, -1, -1, -1, -1, -1, -1,
2290 514, -1, 46, 3, 4, -1, -1, 7, 8, 9,
2291 -1, -1, -1, -1, -1, -1, 16, 17, -1, 19,
2292 20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
2293 -1, -1, -1, -1, -1, -1, 550, 37, 38, -1,
2294 -1, 555, -1, -1, -1, -1, -1, -1, -1, -1,
2295 -1, -1, -1, -1, 54, -1, -1, -1, 572, 573,
2296 -1, -1, -1, 577, -1, -1, 580, -1, -1, -1,
2297 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
2298 80, 81, 82, 83, 84, 85, 86, -1, -1, -1,
2299 -1, -1, -1, -1, -1, -1, -1, 141, -1, -1,
2300 144, -1, -1, 147, -1, 149, 150, -1, -1, -1,
2301 -1, -1, 112, 113, 114, 115, 116, 117, 118, 119,
2302 120, 121, 122, 123, 124, -1, 126, -1, 128, 129,
2303 130, -1, 3, 4, -1, -1, 7, 8, 9, -1,
2304 140, -1, 142, -1, -1, 16, 17, 147, 19, 20,
2305 21, 22, 23, 24, -1, -1, -1, -1, -1, -1,
2306 -1, -1, -1, -1, -1, -1, 37, 38, -1, -1,
2307 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2308 -1, -1, -1, 54, -1, -1, -1, -1, -1, -1,
2309 -1, -1, -1, -1, -1, -1, -1, -1, -1, 70,
2310 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
2311 81, 82, 83, 84, 85, 86, -1, 7, 8, -1,
2312 10, 11, 12, 13, 14, -1, 16, 17, -1, 19,
2313 20, 21, -1, -1, -1, -1, -1, -1, -1, -1,
2314 -1, 112, 113, 114, 115, 116, 117, 118, 119, 120,
2315 121, 122, 123, 124, -1, 126, 46, 128, 129, 130,
2316 7, 8, -1, -1, -1, -1, -1, -1, -1, 16,
2317 17, -1, 19, 20, 21, 22, 147, -1, -1, -1,
2318 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2319 37, 38, -1, -1, -1, -1, -1, -1, -1, -1,
2320 -1, 7, 8, -1, 10, 11, 12, 13, 14, -1,
2321 16, 17, -1, 19, 20, 21, -1, -1, -1, -1,
2322 -1, -1, -1, 70, 71, 72, 73, 74, 75, 76,
2323 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
2324 46, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2325 -1, 141, -1, -1, 144, -1, -1, 147, -1, 149,
2326 150, -1, -1, -1, -1, 112, 113, 114, 115, 116,
2327 117, 118, 119, 120, 121, 122, 123, 124, -1, 126,
2328 -1, 128, 129, 130, -1, -1, 3, 4, -1, -1,
2329 -1, -1, 9, 140, -1, 142, -1, 144, -1, -1,
2330 147, -1, 149, -1, 151, 22, 23, 24, -1, -1,
2331 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2332 37, 38, -1, -1, -1, -1, -1, -1, -1, -1,
2333 -1, -1, -1, -1, -1, 141, -1, 54, 144, -1,
2334 -1, 147, -1, 149, 150, -1, -1, -1, -1, -1,
2335 -1, -1, -1, 70, 71, 72, 73, 74, 75, 76,
2336 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
2337 -1, -1, -1, -1, -1, -1, -1, -1, -1, 7,
2338 8, -1, 10, 11, 12, 13, 14, -1, 16, 17,
2339 -1, 19, 20, 21, -1, 112, 113, 114, 115, 116,
2340 117, 118, 119, 120, 121, 122, 123, 124, 36, 126,
2341 -1, 128, 129, 130, -1, -1, -1, -1, 46, 7,
2342 8, -1, 10, 11, 12, 13, 14, -1, 16, 17,
2343 147, 19, 20, 21, 7, 8, -1, 10, 11, 12,
2344 13, 14, -1, 16, 17, -1, 19, 20, 21, -1,
2345 -1, -1, -1, -1, -1, -1, -1, -1, 46, -1,
2346 -1, -1, -1, 36, -1, 7, 8, -1, 10, 11,
2347 12, 13, 14, 46, 16, 17, -1, 19, 20, 21,
2348 -1, 7, 8, -1, 10, 11, 12, 13, 14, -1,
2349 16, 17, -1, 19, 20, 21, -1, -1, -1, -1,
2350 -1, -1, -1, -1, 46, -1, -1, -1, -1, -1,
2351 36, -1, -1, 141, -1, -1, 144, -1, -1, 147,
2352 46, 149, -1, -1, -1, -1, -1, -1, 7, 8,
2353 118, 10, 11, 12, 13, 14, -1, 16, 17, -1,
2354 19, 20, 21, -1, -1, -1, -1, -1, -1, -1,
2355 -1, -1, -1, 141, -1, -1, 144, 36, -1, 147,
2356 -1, 149, -1, -1, -1, -1, -1, 46, 141, -1,
2357 -1, 144, -1, -1, 147, -1, 149, 7, 8, -1,
2358 10, 11, 12, 13, 14, -1, 16, 17, -1, 19,
2359 20, 21, -1, -1, -1, -1, -1, -1, -1, 141,
2360 -1, -1, 144, -1, 146, 147, -1, 149, -1, -1,
2361 -1, -1, -1, -1, -1, 141, 46, -1, 144, -1,
2362 -1, 147, -1, 149, 7, 8, -1, 10, 11, 12,
2363 13, 14, -1, 16, 17, -1, 19, 20, 21, 7,
2364 8, -1, 10, 11, 12, 13, 14, -1, 16, 17,
2365 -1, 19, 20, 21, -1, -1, -1, -1, -1, -1,
2366 -1, -1, 141, 46, -1, 144, -1, -1, 147, -1,
2367 149, -1, -1, -1, -1, -1, 7, 8, 46, 10,
2368 11, 12, 13, 14, -1, 16, 17, -1, 19, 20,
2369 21, 7, 8, -1, 10, 11, 12, 13, 14, -1,
2370 16, 17, -1, 19, 20, 21, -1, -1, -1, -1,
2371 -1, 141, -1, -1, 144, 46, -1, 147, -1, 149,
2372 -1, -1, -1, -1, -1, -1, -1, -1, 7, 8,
2373 46, 10, 11, 12, 13, 14, -1, 16, 17, -1,
2374 19, 20, 21, -1, -1, -1, -1, -1, -1, -1,
2375 -1, -1, -1, -1, -1, -1, -1, -1, 141, -1,
2376 -1, 144, -1, -1, 147, -1, 149, 46, -1, -1,
2377 -1, -1, -1, 141, -1, -1, 144, -1, -1, 147,
2378 -1, 149, -1, -1, -1, -1, -1, -1, -1, -1,
2379 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2380 -1, -1, -1, 33, -1, -1, -1, -1, -1, -1,
2381 141, -1, -1, 144, -1, -1, 147, -1, 149, -1,
2382 -1, -1, 52, 53, -1, 141, -1, -1, 144, -1,
2383 -1, 147, -1, 149, 64, 65, 66, 67, 68, 69,
2384 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
2385 80, 81, 82, 83, 84, 85, 86, -1, -1, -1,
2386 -1, -1, 141, -1, -1, 144, -1, -1, 147, -1,
2387 149, -1, -1, -1, -1, -1, -1, 107, 108, 109,
2388 -1, -1, 112, 113, 114, 115, 116, 117, 118, 119,
2389 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
2390 130
2391};
2392
2393/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
2394 symbol of state STATE-NUM. */
2395static const unsigned char yystos[] =
2396{
2397 0, 16, 17, 19, 20, 21, 27, 28, 48, 51,
2398 55, 160, 162, 163, 164, 165, 196, 197, 198, 200,
2399 199, 49, 63, 205, 138, 54, 138, 15, 138, 39,
2400 40, 41, 42, 43, 44, 45, 47, 135, 136, 137,
2401 166, 167, 168, 0, 198, 43, 45, 169, 215, 39,
2402 40, 41, 44, 170, 212, 214, 221, 138, 138, 144,
2403 206, 19, 204, 7, 8, 10, 11, 12, 13, 14,
2404 46, 141, 144, 147, 149, 160, 163, 183, 184, 218,
2405 168, 168, 32, 34, 194, 168, 168, 18, 222, 223,
2406 26, 150, 213, 222, 19, 19, 19, 207, 142, 4,
2407 4, 4, 149, 10, 150, 184, 189, 140, 142, 194,
2408 194, 39, 41, 171, 29, 30, 193, 57, 58, 59,
2409 60, 61, 62, 172, 210, 210, 162, 226, 139, 146,
2410 36, 184, 185, 187, 188, 145, 145, 150, 189, 139,
2411 150, 188, 193, 193, 10, 118, 184, 186, 195, 11,
2412 12, 13, 158, 159, 184, 190, 4, 186, 25, 149,
2413 211, 33, 52, 53, 64, 65, 66, 67, 68, 69,
2414 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
2415 80, 81, 82, 83, 84, 85, 86, 107, 108, 109,
2416 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
2417 122, 123, 124, 125, 126, 127, 128, 129, 130, 153,
2418 154, 155, 224, 230, 231, 232, 233, 19, 174, 139,
2419 143, 184, 184, 148, 150, 184, 143, 190, 184, 142,
2420 218, 23, 24, 3, 4, 5, 6, 9, 22, 37,
2421 38, 85, 86, 112, 126, 128, 129, 130, 144, 147,
2422 149, 151, 153, 154, 155, 191, 218, 201, 163, 52,
2423 10, 184, 220, 11, 14, 11, 158, 172, 87, 88,
2424 89, 90, 91, 92, 93, 94, 95, 96, 156, 23,
2425 24, 93, 94, 95, 96, 97, 98, 99, 100, 101,
2426 102, 103, 104, 105, 106, 157, 184, 184, 220, 184,
2427 184, 227, 220, 220, 220, 220, 220, 184, 184, 220,
2428 172, 110, 111, 114, 115, 132, 133, 173, 36, 185,
2429 176, 146, 148, 148, 176, 202, 203, 195, 156, 157,
2430 142, 142, 142, 142, 142, 146, 190, 192, 149, 192,
2431 150, 192, 19, 142, 142, 142, 139, 181, 142, 3,
2432 4, 9, 22, 23, 24, 37, 38, 54, 147, 191,
2433 217, 218, 219, 219, 219, 219, 186, 184, 184, 139,
2434 178, 139, 178, 219, 144, 139, 139, 139, 139, 139,
2435 139, 219, 219, 35, 186, 184, 220, 131, 134, 173,
2436 175, 181, 181, 35, 142, 142, 190, 190, 190, 190,
2437 190, 139, 146, 150, 184, 192, 148, 150, 190, 190,
2438 190, 31, 50, 179, 182, 36, 184, 208, 209, 56,
2439 216, 192, 139, 139, 219, 219, 219, 11, 50, 11,
2440 229, 219, 144, 220, 184, 220, 220, 220, 139, 139,
2441 184, 219, 219, 139, 184, 190, 190, 229, 139, 139,
2442 139, 139, 190, 148, 150, 139, 139, 35, 19, 4,
2443 181, 174, 139, 143, 19, 148, 14, 14, 142, 139,
2444 139, 219, 4, 219, 139, 139, 219, 139, 139, 139,
2445 219, 219, 142, 139, 178, 184, 143, 139, 139, 143,
2446 190, 190, 190, 190, 148, 190, 190, 184, 160, 161,
2447 36, 184, 176, 139, 219, 219, 184, 228, 219, 219,
2448 178, 178, 220, 219, 139, 220, 220, 220, 228, 219,
2449 190, 190, 139, 143, 139, 139, 143, 143, 143, 174,
2450 179, 180, 19, 139, 144, 219, 139, 143, 146, 219,
2451 143, 178, 143, 143, 190, 190, 190, 161, 50, 177,
2452 14, 146, 158, 225, 174, 184, 176, 146, 176, 143,
2453 143, 143, 4, 219, 217, 146, 158, 219, 35, 139,
2454 217, 174, 14, 14, 139, 219, 219, 14, 68, 219,
2455 14, 219
2456};
Reid Spencer68a24bd2005-08-27 18:50:39 +00002457
2458#define yyerrok (yyerrstatus = 0)
2459#define yyclearin (yychar = YYEMPTY)
Reid Spencered951ea2007-05-19 07:22:10 +00002460#define YYEMPTY (-2)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002461#define YYEOF 0
Reid Spencered951ea2007-05-19 07:22:10 +00002462
Reid Spencer68a24bd2005-08-27 18:50:39 +00002463#define YYACCEPT goto yyacceptlab
Reid Spencered951ea2007-05-19 07:22:10 +00002464#define YYABORT goto yyabortlab
2465#define YYERROR goto yyerrorlab
2466
2467
2468/* Like YYERROR except do call yyerror. This remains here temporarily
2469 to ease the transition to the new meaning of YYERROR, for GCC.
Reid Spencer68a24bd2005-08-27 18:50:39 +00002470 Once GCC version 2 has supplanted version 1, this can go. */
Reid Spencered951ea2007-05-19 07:22:10 +00002471
Reid Spencer68a24bd2005-08-27 18:50:39 +00002472#define YYFAIL goto yyerrlab
Reid Spencered951ea2007-05-19 07:22:10 +00002473
Reid Spencer68a24bd2005-08-27 18:50:39 +00002474#define YYRECOVERING() (!!yyerrstatus)
Reid Spencered951ea2007-05-19 07:22:10 +00002475
2476#define YYBACKUP(Token, Value) \
Reid Spencer68a24bd2005-08-27 18:50:39 +00002477do \
2478 if (yychar == YYEMPTY && yylen == 1) \
Reid Spencered951ea2007-05-19 07:22:10 +00002479 { \
2480 yychar = (Token); \
2481 yylval = (Value); \
2482 yytoken = YYTRANSLATE (yychar); \
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002483 YYPOPSTACK; \
Reid Spencer68a24bd2005-08-27 18:50:39 +00002484 goto yybackup; \
2485 } \
2486 else \
Reid Spencered951ea2007-05-19 07:22:10 +00002487 { \
2488 yyerror (YY_("syntax error: cannot back up")); \
2489 YYERROR; \
2490 } \
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002491while (0)
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002492
Reid Spencered951ea2007-05-19 07:22:10 +00002493
Reid Spencer68a24bd2005-08-27 18:50:39 +00002494#define YYTERROR 1
2495#define YYERRCODE 256
2496
Reid Spencered951ea2007-05-19 07:22:10 +00002497
2498/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
2499 If N is 0, then set CURRENT to the empty location which ends
2500 the previous symbol: RHS[0] (always defined). */
2501
2502#define YYRHSLOC(Rhs, K) ((Rhs)[K])
2503#ifndef YYLLOC_DEFAULT
2504# define YYLLOC_DEFAULT(Current, Rhs, N) \
2505 do \
2506 if (N) \
2507 { \
2508 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
2509 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
2510 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
2511 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
2512 } \
2513 else \
2514 { \
2515 (Current).first_line = (Current).last_line = \
2516 YYRHSLOC (Rhs, 0).last_line; \
2517 (Current).first_column = (Current).last_column = \
2518 YYRHSLOC (Rhs, 0).last_column; \
2519 } \
2520 while (0)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002521#endif
2522
Reid Spencered951ea2007-05-19 07:22:10 +00002523
2524/* YY_LOCATION_PRINT -- Print the location on the stream.
2525 This macro was not mandated originally: define only if we know
2526 we won't break user code: when these are the locations we know. */
2527
2528#ifndef YY_LOCATION_PRINT
2529# if YYLTYPE_IS_TRIVIAL
2530# define YY_LOCATION_PRINT(File, Loc) \
2531 fprintf (File, "%d.%d-%d.%d", \
2532 (Loc).first_line, (Loc).first_column, \
2533 (Loc).last_line, (Loc).last_column)
2534# else
2535# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
2536# endif
2537#endif
2538
2539
2540/* YYLEX -- calling `yylex' with the right arguments. */
2541
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00002542#ifdef YYLEX_PARAM
Reid Spencered951ea2007-05-19 07:22:10 +00002543# define YYLEX yylex (YYLEX_PARAM)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00002544#else
Reid Spencered951ea2007-05-19 07:22:10 +00002545# define YYLEX yylex ()
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002546#endif
Reid Spencered951ea2007-05-19 07:22:10 +00002547
2548/* Enable debugging if requested. */
2549#if YYDEBUG
2550
2551# ifndef YYFPRINTF
2552# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
2553# define YYFPRINTF fprintf
2554# endif
2555
2556# define YYDPRINTF(Args) \
2557do { \
2558 if (yydebug) \
2559 YYFPRINTF Args; \
2560} while (0)
2561
2562# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
2563do { \
2564 if (yydebug) \
2565 { \
2566 YYFPRINTF (stderr, "%s ", Title); \
2567 yysymprint (stderr, \
2568 Type, Value); \
2569 YYFPRINTF (stderr, "\n"); \
2570 } \
2571} while (0)
2572
2573/*------------------------------------------------------------------.
2574| yy_stack_print -- Print the state stack from its BOTTOM up to its |
2575| TOP (included). |
2576`------------------------------------------------------------------*/
2577
2578#if defined (__STDC__) || defined (__cplusplus)
2579static void
2580yy_stack_print (short int *bottom, short int *top)
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002581#else
Reid Spencered951ea2007-05-19 07:22:10 +00002582static void
2583yy_stack_print (bottom, top)
2584 short int *bottom;
2585 short int *top;
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002586#endif
Reid Spencered951ea2007-05-19 07:22:10 +00002587{
2588 YYFPRINTF (stderr, "Stack now");
2589 for (/* Nothing. */; bottom <= top; ++bottom)
2590 YYFPRINTF (stderr, " %d", *bottom);
2591 YYFPRINTF (stderr, "\n");
2592}
2593
2594# define YY_STACK_PRINT(Bottom, Top) \
2595do { \
2596 if (yydebug) \
2597 yy_stack_print ((Bottom), (Top)); \
2598} while (0)
2599
2600
2601/*------------------------------------------------.
2602| Report that the YYRULE is going to be reduced. |
2603`------------------------------------------------*/
2604
2605#if defined (__STDC__) || defined (__cplusplus)
2606static void
2607yy_reduce_print (int yyrule)
2608#else
2609static void
2610yy_reduce_print (yyrule)
2611 int yyrule;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00002612#endif
Reid Spencered951ea2007-05-19 07:22:10 +00002613{
2614 int yyi;
2615 unsigned long int yylno = yyrline[yyrule];
2616 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ",
2617 yyrule - 1, yylno);
2618 /* Print the symbols being reduced, and their result. */
2619 for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
2620 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
2621 YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]);
2622}
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002623
Reid Spencered951ea2007-05-19 07:22:10 +00002624# define YY_REDUCE_PRINT(Rule) \
2625do { \
2626 if (yydebug) \
2627 yy_reduce_print (Rule); \
2628} while (0)
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002629
Reid Spencered951ea2007-05-19 07:22:10 +00002630/* Nonzero means print parse trace. It is left uninitialized so that
2631 multiple parsers can coexist. */
2632int yydebug;
2633#else /* !YYDEBUG */
2634# define YYDPRINTF(Args)
2635# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
2636# define YY_STACK_PRINT(Bottom, Top)
2637# define YY_REDUCE_PRINT(Rule)
2638#endif /* !YYDEBUG */
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002639
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00002640
Reid Spencered951ea2007-05-19 07:22:10 +00002641/* YYINITDEPTH -- initial size of the parser's stacks. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002642#ifndef YYINITDEPTH
Reid Spencered951ea2007-05-19 07:22:10 +00002643# define YYINITDEPTH 200
Reid Spencer68a24bd2005-08-27 18:50:39 +00002644#endif
2645
Reid Spencered951ea2007-05-19 07:22:10 +00002646/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
2647 if the built-in stack extension method is used).
Reid Spencer68a24bd2005-08-27 18:50:39 +00002648
Reid Spencered951ea2007-05-19 07:22:10 +00002649 Do not make this value too large; the results are undefined if
2650 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
2651 evaluated with infinite-precision integer arithmetic. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002652
2653#ifndef YYMAXDEPTH
Reid Spencered951ea2007-05-19 07:22:10 +00002654# define YYMAXDEPTH 10000
Reid Spencer68a24bd2005-08-27 18:50:39 +00002655#endif
Reid Spencered951ea2007-05-19 07:22:10 +00002656
Reid Spencer68a24bd2005-08-27 18:50:39 +00002657
2658
Reid Spencered951ea2007-05-19 07:22:10 +00002659#if YYERROR_VERBOSE
Reid Spencer68a24bd2005-08-27 18:50:39 +00002660
Reid Spencered951ea2007-05-19 07:22:10 +00002661# ifndef yystrlen
2662# if defined (__GLIBC__) && defined (_STRING_H)
2663# define yystrlen strlen
2664# else
2665/* Return the length of YYSTR. */
2666static YYSIZE_T
2667# if defined (__STDC__) || defined (__cplusplus)
2668yystrlen (const char *yystr)
2669# else
2670yystrlen (yystr)
2671 const char *yystr;
2672# endif
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002673{
Reid Spencered951ea2007-05-19 07:22:10 +00002674 const char *yys = yystr;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00002675
Reid Spencered951ea2007-05-19 07:22:10 +00002676 while (*yys++ != '\0')
2677 continue;
2678
2679 return yys - yystr - 1;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002680}
Reid Spencered951ea2007-05-19 07:22:10 +00002681# endif
2682# endif
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002683
Reid Spencered951ea2007-05-19 07:22:10 +00002684# ifndef yystpcpy
2685# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
2686# define yystpcpy stpcpy
2687# else
2688/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
2689 YYDEST. */
2690static char *
2691# if defined (__STDC__) || defined (__cplusplus)
2692yystpcpy (char *yydest, const char *yysrc)
2693# else
2694yystpcpy (yydest, yysrc)
2695 char *yydest;
2696 const char *yysrc;
2697# endif
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002698{
Reid Spencered951ea2007-05-19 07:22:10 +00002699 char *yyd = yydest;
2700 const char *yys = yysrc;
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002701
Reid Spencered951ea2007-05-19 07:22:10 +00002702 while ((*yyd++ = *yys++) != '\0')
2703 continue;
2704
2705 return yyd - 1;
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002706}
Reid Spencered951ea2007-05-19 07:22:10 +00002707# endif
2708# endif
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002709
Reid Spencered951ea2007-05-19 07:22:10 +00002710# ifndef yytnamerr
2711/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
2712 quotes and backslashes, so that it's suitable for yyerror. The
2713 heuristic is that double-quoting is unnecessary unless the string
2714 contains an apostrophe, a comma, or backslash (other than
2715 backslash-backslash). YYSTR is taken from yytname. If YYRES is
2716 null, do not copy; instead, return the length of what the result
2717 would have been. */
2718static YYSIZE_T
2719yytnamerr (char *yyres, const char *yystr)
2720{
2721 if (*yystr == '"')
2722 {
2723 size_t yyn = 0;
2724 char const *yyp = yystr;
2725
2726 for (;;)
2727 switch (*++yyp)
2728 {
2729 case '\'':
2730 case ',':
2731 goto do_not_strip_quotes;
2732
2733 case '\\':
2734 if (*++yyp != '\\')
2735 goto do_not_strip_quotes;
2736 /* Fall through. */
2737 default:
2738 if (yyres)
2739 yyres[yyn] = *yyp;
2740 yyn++;
2741 break;
2742
2743 case '"':
2744 if (yyres)
2745 yyres[yyn] = '\0';
2746 return yyn;
2747 }
2748 do_not_strip_quotes: ;
2749 }
2750
2751 if (! yyres)
2752 return yystrlen (yystr);
2753
2754 return yystpcpy (yyres, yystr) - yyres;
2755}
2756# endif
2757
2758#endif /* YYERROR_VERBOSE */
2759
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002760
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002761
Reid Spencered951ea2007-05-19 07:22:10 +00002762#if YYDEBUG
2763/*--------------------------------.
2764| Print this symbol on YYOUTPUT. |
2765`--------------------------------*/
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002766
Reid Spencered951ea2007-05-19 07:22:10 +00002767#if defined (__STDC__) || defined (__cplusplus)
2768static void
2769yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00002770#else
Reid Spencered951ea2007-05-19 07:22:10 +00002771static void
2772yysymprint (yyoutput, yytype, yyvaluep)
2773 FILE *yyoutput;
2774 int yytype;
2775 YYSTYPE *yyvaluep;
2776#endif
2777{
2778 /* Pacify ``unused variable'' warnings. */
2779 (void) yyvaluep;
2780
2781 if (yytype < YYNTOKENS)
2782 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
2783 else
2784 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
2785
2786
2787# ifdef YYPRINT
2788 if (yytype < YYNTOKENS)
2789 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
2790# endif
2791 switch (yytype)
2792 {
2793 default:
2794 break;
2795 }
2796 YYFPRINTF (yyoutput, ")");
2797}
2798
2799#endif /* ! YYDEBUG */
2800/*-----------------------------------------------.
2801| Release the memory associated to this symbol. |
2802`-----------------------------------------------*/
2803
2804#if defined (__STDC__) || defined (__cplusplus)
2805static void
2806yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
2807#else
2808static void
2809yydestruct (yymsg, yytype, yyvaluep)
2810 const char *yymsg;
2811 int yytype;
2812 YYSTYPE *yyvaluep;
2813#endif
2814{
2815 /* Pacify ``unused variable'' warnings. */
2816 (void) yyvaluep;
2817
2818 if (!yymsg)
2819 yymsg = "Deleting";
2820 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
2821
2822 switch (yytype)
2823 {
2824
2825 default:
2826 break;
2827 }
2828}
2829
2830
2831/* Prevent warnings from -Wmissing-prototypes. */
2832
2833#ifdef YYPARSE_PARAM
2834# if defined (__STDC__) || defined (__cplusplus)
2835int yyparse (void *YYPARSE_PARAM);
2836# else
2837int yyparse ();
2838# endif
2839#else /* ! YYPARSE_PARAM */
2840#if defined (__STDC__) || defined (__cplusplus)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00002841int yyparse (void);
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002842#else
Reid Spencered951ea2007-05-19 07:22:10 +00002843int yyparse ();
2844#endif
2845#endif /* ! YYPARSE_PARAM */
2846
2847
2848
2849/* The look-ahead symbol. */
2850int yychar;
2851
2852/* The semantic value of the look-ahead symbol. */
2853YYSTYPE yylval;
2854
2855/* Number of syntax errors so far. */
2856int yynerrs;
2857
2858
2859
2860/*----------.
2861| yyparse. |
2862`----------*/
2863
2864#ifdef YYPARSE_PARAM
2865# if defined (__STDC__) || defined (__cplusplus)
2866int yyparse (void *YYPARSE_PARAM)
2867# else
2868int yyparse (YYPARSE_PARAM)
2869 void *YYPARSE_PARAM;
2870# endif
2871#else /* ! YYPARSE_PARAM */
2872#if defined (__STDC__) || defined (__cplusplus)
2873int
2874yyparse (void)
2875#else
2876int
2877yyparse ()
2878
2879#endif
2880#endif
2881{
2882
2883 int yystate;
2884 int yyn;
2885 int yyresult;
2886 /* Number of tokens to shift before error messages enabled. */
2887 int yyerrstatus;
2888 /* Look-ahead token as an internal (translated) token number. */
2889 int yytoken = 0;
2890
2891 /* Three stacks and their tools:
2892 `yyss': related to states,
2893 `yyvs': related to semantic values,
2894 `yyls': related to locations.
2895
2896 Refer to the stacks thru separate pointers, to allow yyoverflow
2897 to reallocate them elsewhere. */
2898
2899 /* The state stack. */
2900 short int yyssa[YYINITDEPTH];
2901 short int *yyss = yyssa;
2902 short int *yyssp;
2903
2904 /* The semantic value stack. */
2905 YYSTYPE yyvsa[YYINITDEPTH];
2906 YYSTYPE *yyvs = yyvsa;
2907 YYSTYPE *yyvsp;
2908
2909
2910
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002911#define YYPOPSTACK (yyvsp--, yyssp--)
Anton Korobeynikov77d0f972007-04-25 14:29:12 +00002912
Reid Spencered951ea2007-05-19 07:22:10 +00002913 YYSIZE_T yystacksize = YYINITDEPTH;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002914
Reid Spencered951ea2007-05-19 07:22:10 +00002915 /* The variables used to return semantic value and location from the
2916 action routines. */
2917 YYSTYPE yyval;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002918
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002919
Reid Spencered951ea2007-05-19 07:22:10 +00002920 /* When reducing, the number of symbols on the RHS of the reduced
2921 rule. */
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002922 int yylen;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002923
Reid Spencered951ea2007-05-19 07:22:10 +00002924 YYDPRINTF ((stderr, "Starting parse\n"));
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002925
Reid Spencer68a24bd2005-08-27 18:50:39 +00002926 yystate = 0;
2927 yyerrstatus = 0;
2928 yynerrs = 0;
2929 yychar = YYEMPTY; /* Cause a token to be read. */
2930
2931 /* Initialize stack pointers.
2932 Waste one element of value and location stack
2933 so that they stay on the same level as the state stack.
2934 The wasted elements are never initialized. */
2935
Reid Spencered951ea2007-05-19 07:22:10 +00002936 yyssp = yyss;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002937 yyvsp = yyvs;
2938
Reid Spencered951ea2007-05-19 07:22:10 +00002939 goto yysetstate;
Jeff Cohen66c5fd62005-10-23 04:37:20 +00002940
Reid Spencered951ea2007-05-19 07:22:10 +00002941/*------------------------------------------------------------.
2942| yynewstate -- Push a new state, which is found in yystate. |
2943`------------------------------------------------------------*/
2944 yynewstate:
2945 /* In all cases, when you get here, the value and location stacks
2946 have just been pushed. so pushing a state here evens the stacks.
2947 */
2948 yyssp++;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002949
Reid Spencered951ea2007-05-19 07:22:10 +00002950 yysetstate:
2951 *yyssp = yystate;
2952
2953 if (yyss + yystacksize - 1 <= yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002954 {
2955 /* Get the current used size of the three stacks, in elements. */
Reid Spencered951ea2007-05-19 07:22:10 +00002956 YYSIZE_T yysize = yyssp - yyss + 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002957
2958#ifdef yyoverflow
Reid Spencered951ea2007-05-19 07:22:10 +00002959 {
2960 /* Give user a chance to reallocate the stack. Use copies of
2961 these so that the &'s don't force the real ones into
2962 memory. */
2963 YYSTYPE *yyvs1 = yyvs;
2964 short int *yyss1 = yyss;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002965
Reid Spencered951ea2007-05-19 07:22:10 +00002966
2967 /* Each stack pointer address is followed by the size of the
2968 data in use in that stack, in bytes. This used to be a
2969 conditional around just the two extra args, but that might
2970 be undefined if yyoverflow is a macro. */
2971 yyoverflow (YY_("memory exhausted"),
2972 &yyss1, yysize * sizeof (*yyssp),
2973 &yyvs1, yysize * sizeof (*yyvsp),
2974
2975 &yystacksize);
2976
2977 yyss = yyss1;
2978 yyvs = yyvs1;
2979 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00002980#else /* no yyoverflow */
Reid Spencered951ea2007-05-19 07:22:10 +00002981# ifndef YYSTACK_RELOCATE
2982 goto yyexhaustedlab;
2983# else
Reid Spencer68a24bd2005-08-27 18:50:39 +00002984 /* Extend the stack our own way. */
Reid Spencered951ea2007-05-19 07:22:10 +00002985 if (YYMAXDEPTH <= yystacksize)
2986 goto yyexhaustedlab;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002987 yystacksize *= 2;
Reid Spencered951ea2007-05-19 07:22:10 +00002988 if (YYMAXDEPTH < yystacksize)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002989 yystacksize = YYMAXDEPTH;
Reid Spencered951ea2007-05-19 07:22:10 +00002990
2991 {
2992 short int *yyss1 = yyss;
2993 union yyalloc *yyptr =
2994 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
2995 if (! yyptr)
2996 goto yyexhaustedlab;
2997 YYSTACK_RELOCATE (yyss);
2998 YYSTACK_RELOCATE (yyvs);
2999
3000# undef YYSTACK_RELOCATE
3001 if (yyss1 != yyssa)
3002 YYSTACK_FREE (yyss1);
3003 }
3004# endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00003005#endif /* no yyoverflow */
3006
Reid Spencered951ea2007-05-19 07:22:10 +00003007 yyssp = yyss + yysize - 1;
3008 yyvsp = yyvs + yysize - 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003009
3010
Reid Spencered951ea2007-05-19 07:22:10 +00003011 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
3012 (unsigned long int) yystacksize));
3013
3014 if (yyss + yystacksize - 1 <= yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003015 YYABORT;
3016 }
3017
Reid Spencered951ea2007-05-19 07:22:10 +00003018 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003019
3020 goto yybackup;
Reid Spencered951ea2007-05-19 07:22:10 +00003021
3022/*-----------.
3023| yybackup. |
3024`-----------*/
3025yybackup:
Reid Spencer68a24bd2005-08-27 18:50:39 +00003026
Chris Lattner39b2e8b2007-05-04 04:01:37 +00003027/* Do appropriate processing given the current state. */
Reid Spencered951ea2007-05-19 07:22:10 +00003028/* Read a look-ahead token if we need one and don't already have one. */
Chris Lattner39b2e8b2007-05-04 04:01:37 +00003029/* yyresume: */
Andrew Lenharth6353e052006-12-08 18:07:09 +00003030
Reid Spencered951ea2007-05-19 07:22:10 +00003031 /* First try to decide what to do without reference to look-ahead token. */
Reid Spencer7780acb2007-04-16 06:56:07 +00003032
Reid Spencer68a24bd2005-08-27 18:50:39 +00003033 yyn = yypact[yystate];
Reid Spencered951ea2007-05-19 07:22:10 +00003034 if (yyn == YYPACT_NINF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003035 goto yydefault;
3036
Reid Spencered951ea2007-05-19 07:22:10 +00003037 /* Not known => get a look-ahead token if don't already have one. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003038
Reid Spencered951ea2007-05-19 07:22:10 +00003039 /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003040 if (yychar == YYEMPTY)
3041 {
Reid Spencered951ea2007-05-19 07:22:10 +00003042 YYDPRINTF ((stderr, "Reading a token: "));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003043 yychar = YYLEX;
3044 }
3045
Reid Spencered951ea2007-05-19 07:22:10 +00003046 if (yychar <= YYEOF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003047 {
Reid Spencered951ea2007-05-19 07:22:10 +00003048 yychar = yytoken = YYEOF;
3049 YYDPRINTF ((stderr, "Now at end of input.\n"));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003050 }
3051 else
3052 {
Reid Spencered951ea2007-05-19 07:22:10 +00003053 yytoken = YYTRANSLATE (yychar);
3054 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
Reid Spencer68a24bd2005-08-27 18:50:39 +00003055 }
3056
Reid Spencered951ea2007-05-19 07:22:10 +00003057 /* If the proper action on seeing token YYTOKEN is to reduce or to
3058 detect an error, take that action. */
3059 yyn += yytoken;
3060 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003061 goto yydefault;
3062 yyn = yytable[yyn];
Reid Spencered951ea2007-05-19 07:22:10 +00003063 if (yyn <= 0)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003064 {
Reid Spencered951ea2007-05-19 07:22:10 +00003065 if (yyn == 0 || yyn == YYTABLE_NINF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003066 goto yyerrlab;
3067 yyn = -yyn;
3068 goto yyreduce;
3069 }
3070
3071 if (yyn == YYFINAL)
3072 YYACCEPT;
3073
Reid Spencered951ea2007-05-19 07:22:10 +00003074 /* Shift the look-ahead token. */
3075 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003076
Chris Lattner39b2e8b2007-05-04 04:01:37 +00003077 /* Discard the token being shifted unless it is eof. */
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003078 if (yychar != YYEOF)
3079 yychar = YYEMPTY;
3080
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003081 *++yyvsp = yylval;
3082
Reid Spencered951ea2007-05-19 07:22:10 +00003083
3084 /* Count tokens shifted since error; after three, turn off error
3085 status. */
3086 if (yyerrstatus)
3087 yyerrstatus--;
Chris Lattner39b2e8b2007-05-04 04:01:37 +00003088
3089 yystate = yyn;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003090 goto yynewstate;
3091
Chris Lattner39b2e8b2007-05-04 04:01:37 +00003092
Reid Spencered951ea2007-05-19 07:22:10 +00003093/*-----------------------------------------------------------.
3094| yydefault -- do the default action for the current state. |
3095`-----------------------------------------------------------*/
3096yydefault:
Reid Spencer68a24bd2005-08-27 18:50:39 +00003097 yyn = yydefact[yystate];
3098 if (yyn == 0)
3099 goto yyerrlab;
Reid Spencered951ea2007-05-19 07:22:10 +00003100 goto yyreduce;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003101
Reid Spencered951ea2007-05-19 07:22:10 +00003102
3103/*-----------------------------.
3104| yyreduce -- Do a reduction. |
3105`-----------------------------*/
Reid Spencer68a24bd2005-08-27 18:50:39 +00003106yyreduce:
Reid Spencered951ea2007-05-19 07:22:10 +00003107 /* yyn is the number of a rule to reduce with. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003108 yylen = yyr2[yyn];
3109
Reid Spencered951ea2007-05-19 07:22:10 +00003110 /* If YYLEN is nonzero, implement the default value of the action:
3111 `$$ = $1'.
3112
3113 Otherwise, the following line sets YYVAL to garbage.
3114 This behavior is undocumented and Bison
3115 users should not rely upon it. Assigning to YYVAL
3116 unconditionally makes the parser a bit smaller, and it avoids a
3117 GCC warning that YYVAL may be used uninitialized. */
3118 yyval = yyvsp[1-yylen];
3119
3120
3121 YY_REDUCE_PRINT (yyn);
3122 switch (yyn)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003123 {
Reid Spencered951ea2007-05-19 07:22:10 +00003124 case 29:
3125#line 1118 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3126 { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;}
3127 break;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003128
Reid Spencered951ea2007-05-19 07:22:10 +00003129 case 30:
3130#line 1118 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3131 { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;}
3132 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00003133
Reid Spencered951ea2007-05-19 07:22:10 +00003134 case 31:
3135#line 1119 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3136 { (yyval.IPredicate) = ICmpInst::ICMP_SLT; ;}
3137 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00003138
Reid Spencered951ea2007-05-19 07:22:10 +00003139 case 32:
3140#line 1119 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3141 { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;}
3142 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00003143
Reid Spencered951ea2007-05-19 07:22:10 +00003144 case 33:
3145#line 1120 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3146 { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;}
3147 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00003148
Reid Spencered951ea2007-05-19 07:22:10 +00003149 case 34:
3150#line 1120 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3151 { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;}
3152 break;
3153
3154 case 35:
3155#line 1121 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3156 { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;}
3157 break;
3158
3159 case 36:
3160#line 1121 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3161 { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;}
3162 break;
3163
3164 case 37:
3165#line 1122 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3166 { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;}
3167 break;
3168
3169 case 38:
3170#line 1122 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3171 { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;}
3172 break;
3173
3174 case 39:
3175#line 1126 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3176 { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;}
3177 break;
3178
3179 case 40:
3180#line 1126 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3181 { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;}
3182 break;
3183
3184 case 41:
3185#line 1127 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3186 { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;}
3187 break;
3188
3189 case 42:
3190#line 1127 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3191 { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;}
3192 break;
3193
3194 case 43:
3195#line 1128 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3196 { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;}
3197 break;
3198
3199 case 44:
3200#line 1128 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3201 { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;}
3202 break;
3203
3204 case 45:
3205#line 1129 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3206 { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;}
3207 break;
3208
3209 case 46:
3210#line 1129 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3211 { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;}
3212 break;
3213
3214 case 47:
3215#line 1130 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3216 { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;}
3217 break;
3218
3219 case 48:
3220#line 1130 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3221 { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;}
3222 break;
3223
3224 case 49:
3225#line 1131 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3226 { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;}
3227 break;
3228
3229 case 50:
3230#line 1131 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3231 { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;}
3232 break;
3233
3234 case 51:
3235#line 1132 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3236 { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;}
3237 break;
3238
3239 case 52:
3240#line 1132 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3241 { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;}
3242 break;
3243
3244 case 53:
3245#line 1133 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3246 { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;}
3247 break;
3248
3249 case 54:
3250#line 1134 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3251 { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;}
3252 break;
3253
3254 case 62:
3255#line 1143 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3256 { (yyval.StrVal) = 0; ;}
3257 break;
3258
3259 case 63:
3260#line 1147 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3261 {
3262 (yyval.StrVal) = (yyvsp[-1].StrVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003263 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003264 ;}
3265 break;
3266
3267 case 64:
3268#line 1151 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3269 {
3270 (yyval.StrVal) = 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003271 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003272 ;}
3273 break;
3274
3275 case 68:
3276#line 1159 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3277 {
3278 (yyval.StrVal) = 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003279 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003280 ;}
3281 break;
3282
3283 case 69:
3284#line 1164 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3285 {
3286 (yyval.StrVal) = (yyvsp[-1].StrVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003287 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003288 ;}
3289 break;
3290
3291 case 70:
3292#line 1170 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3293 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
3294 break;
3295
3296 case 71:
3297#line 1171 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3298 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
3299 break;
3300
3301 case 72:
3302#line 1172 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3303 { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
3304 break;
3305
3306 case 73:
3307#line 1173 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3308 { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
3309 break;
3310
3311 case 74:
3312#line 1174 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3313 { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
3314 break;
3315
3316 case 75:
3317#line 1178 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3318 { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
3319 break;
3320
3321 case 76:
3322#line 1179 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3323 { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
3324 break;
3325
3326 case 77:
3327#line 1180 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3328 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3329 break;
3330
3331 case 78:
3332#line 1184 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3333 { (yyval.Visibility) = GlobalValue::DefaultVisibility; ;}
3334 break;
3335
3336 case 79:
3337#line 1185 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3338 { (yyval.Visibility) = GlobalValue::DefaultVisibility; ;}
3339 break;
3340
3341 case 80:
3342#line 1186 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3343 { (yyval.Visibility) = GlobalValue::HiddenVisibility; ;}
3344 break;
3345
3346 case 81:
3347#line 1187 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3348 { (yyval.Visibility) = GlobalValue::ProtectedVisibility; ;}
3349 break;
3350
3351 case 82:
3352#line 1191 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3353 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3354 break;
3355
3356 case 83:
3357#line 1192 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3358 { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
3359 break;
3360
3361 case 84:
3362#line 1193 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3363 { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
3364 break;
3365
3366 case 85:
3367#line 1197 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3368 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3369 break;
3370
3371 case 86:
3372#line 1198 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3373 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
3374 break;
3375
3376 case 87:
3377#line 1199 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3378 { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
3379 break;
3380
3381 case 88:
3382#line 1200 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3383 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
3384 break;
3385
3386 case 89:
3387#line 1201 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3388 { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
3389 break;
3390
3391 case 90:
3392#line 1205 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3393 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3394 break;
3395
3396 case 91:
3397#line 1206 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3398 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
3399 break;
3400
3401 case 92:
3402#line 1207 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3403 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
3404 break;
3405
3406 case 93:
3407#line 1210 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3408 { (yyval.UIntVal) = CallingConv::C; ;}
3409 break;
3410
3411 case 94:
3412#line 1211 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3413 { (yyval.UIntVal) = CallingConv::C; ;}
3414 break;
3415
3416 case 95:
3417#line 1212 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3418 { (yyval.UIntVal) = CallingConv::Fast; ;}
3419 break;
3420
3421 case 96:
3422#line 1213 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3423 { (yyval.UIntVal) = CallingConv::Cold; ;}
3424 break;
3425
3426 case 97:
3427#line 1214 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3428 { (yyval.UIntVal) = CallingConv::X86_StdCall; ;}
3429 break;
3430
3431 case 98:
3432#line 1215 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3433 { (yyval.UIntVal) = CallingConv::X86_FastCall; ;}
3434 break;
3435
3436 case 99:
3437#line 1216 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3438 {
3439 if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003440 GEN_ERROR("Calling conv too large");
Reid Spencered951ea2007-05-19 07:22:10 +00003441 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003442 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003443 ;}
3444 break;
3445
3446 case 100:
3447#line 1223 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3448 { (yyval.ParamAttrs) = ParamAttr::ZExt; ;}
3449 break;
3450
3451 case 101:
3452#line 1224 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3453 { (yyval.ParamAttrs) = ParamAttr::SExt; ;}
3454 break;
3455
3456 case 102:
3457#line 1225 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3458 { (yyval.ParamAttrs) = ParamAttr::InReg; ;}
3459 break;
3460
3461 case 103:
3462#line 1226 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3463 { (yyval.ParamAttrs) = ParamAttr::StructRet; ;}
3464 break;
3465
3466 case 104:
3467#line 1229 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3468 { (yyval.ParamAttrs) = ParamAttr::None; ;}
3469 break;
3470
3471 case 105:
3472#line 1230 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3473 {
3474 (yyval.ParamAttrs) = (yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs);
3475 ;}
3476 break;
3477
3478 case 106:
3479#line 1235 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3480 { (yyval.ParamAttrs) = ParamAttr::NoReturn; ;}
3481 break;
3482
3483 case 107:
3484#line 1236 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3485 { (yyval.ParamAttrs) = ParamAttr::NoUnwind; ;}
3486 break;
3487
3488 case 109:
3489#line 1240 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3490 { (yyval.ParamAttrs) = ParamAttr::None; ;}
3491 break;
3492
3493 case 110:
3494#line 1241 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3495 {
3496 (yyval.ParamAttrs) = (yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs);
3497 ;}
3498 break;
3499
3500 case 111:
3501#line 1248 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3502 { (yyval.UIntVal) = 0; ;}
3503 break;
3504
3505 case 112:
3506#line 1249 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3507 {
3508 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
3509 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003510 GEN_ERROR("Alignment must be a power of two");
3511 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003512;}
3513 break;
3514
3515 case 113:
3516#line 1255 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3517 { (yyval.UIntVal) = 0; ;}
3518 break;
3519
3520 case 114:
3521#line 1256 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3522 {
3523 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
3524 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003525 GEN_ERROR("Alignment must be a power of two");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003526 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003527;}
3528 break;
3529
3530 case 115:
3531#line 1264 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3532 {
3533 for (unsigned i = 0, e = strlen((yyvsp[0].StrVal)); i != e; ++i)
3534 if ((yyvsp[0].StrVal)[i] == '"' || (yyvsp[0].StrVal)[i] == '\\')
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003535 GEN_ERROR("Invalid character in section name");
Reid Spencered951ea2007-05-19 07:22:10 +00003536 (yyval.StrVal) = (yyvsp[0].StrVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003537 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003538;}
3539 break;
3540
3541 case 116:
3542#line 1272 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3543 { (yyval.StrVal) = 0; ;}
3544 break;
3545
3546 case 117:
3547#line 1273 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3548 { (yyval.StrVal) = (yyvsp[0].StrVal); ;}
3549 break;
3550
3551 case 118:
3552#line 1278 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3553 {;}
3554 break;
3555
3556 case 119:
3557#line 1279 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3558 {;}
3559 break;
3560
3561 case 120:
3562#line 1280 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3563 {
3564 CurGV->setSection((yyvsp[0].StrVal));
3565 free((yyvsp[0].StrVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003566 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003567 ;}
3568 break;
3569
3570 case 121:
3571#line 1285 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3572 {
3573 if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003574 GEN_ERROR("Alignment must be a power of two");
Reid Spencered951ea2007-05-19 07:22:10 +00003575 CurGV->setAlignment((yyvsp[0].UInt64Val));
Reid Spencer41dff5e2007-01-26 08:05:27 +00003576 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003577 ;}
3578 break;
3579
3580 case 126:
3581#line 1301 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3582 {
3583 (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00003584 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003585 ;}
3586 break;
3587
3588 case 127:
3589#line 1305 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3590 {
3591 (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003592 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003593 ;}
3594 break;
3595
3596 case 128:
3597#line 1309 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3598 { // Pointer type?
3599 if (*(yyvsp[-1].TypeVal) == Type::LabelTy)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003600 GEN_ERROR("Cannot form a pointer to a basic block");
Reid Spencered951ea2007-05-19 07:22:10 +00003601 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PointerType::get(*(yyvsp[-1].TypeVal))));
3602 delete (yyvsp[-1].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003603 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003604 ;}
3605 break;
3606
3607 case 129:
3608#line 1316 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3609 { // Named types are also simple types...
3610 const Type* tmp = getTypeVal((yyvsp[0].ValIDVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00003611 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003612 (yyval.TypeVal) = new PATypeHolder(tmp);
3613 ;}
3614 break;
3615
3616 case 130:
3617#line 1321 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3618 { // Type UpReference
3619 if ((yyvsp[0].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range");
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003620 OpaqueType *OT = OpaqueType::get(); // Use temporary placeholder
Reid Spencered951ea2007-05-19 07:22:10 +00003621 UpRefs.push_back(UpRefRecord((unsigned)(yyvsp[0].UInt64Val), OT)); // Add to vector...
3622 (yyval.TypeVal) = new PATypeHolder(OT);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003623 UR_OUT("New Upreference!\n");
3624 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003625 ;}
3626 break;
3627
3628 case 131:
3629#line 1329 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3630 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00003631 std::vector<const Type*> Params;
Christopher Lamb5c104242007-04-22 20:09:11 +00003632 ParamAttrsVector Attrs;
Reid Spencered951ea2007-05-19 07:22:10 +00003633 if ((yyvsp[0].ParamAttrs) != ParamAttr::None) {
3634 ParamAttrsWithIndex X; X.index = 0; X.attrs = (yyvsp[0].ParamAttrs);
Christopher Lamb5c104242007-04-22 20:09:11 +00003635 Attrs.push_back(X);
3636 }
Reid Spencer7b5d4662007-04-09 06:16:21 +00003637 unsigned index = 1;
Reid Spencered951ea2007-05-19 07:22:10 +00003638 TypeWithAttrsList::iterator I = (yyvsp[-2].TypeWithAttrsList)->begin(), E = (yyvsp[-2].TypeWithAttrsList)->end();
Reid Spencer7b5d4662007-04-09 06:16:21 +00003639 for (; I != E; ++I, ++index) {
Reid Spencer66728ef2007-03-20 01:13:36 +00003640 const Type *Ty = I->Ty->get();
Reid Spencer66728ef2007-03-20 01:13:36 +00003641 Params.push_back(Ty);
3642 if (Ty != Type::VoidTy)
Christopher Lamb5c104242007-04-22 20:09:11 +00003643 if (I->Attrs != ParamAttr::None) {
3644 ParamAttrsWithIndex X; X.index = index; X.attrs = I->Attrs;
3645 Attrs.push_back(X);
3646 }
Reid Spencer41dff5e2007-01-26 08:05:27 +00003647 }
3648 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
3649 if (isVarArg) Params.pop_back();
3650
Reid Spencer7b5d4662007-04-09 06:16:21 +00003651 ParamAttrsList *ActualAttrs = 0;
3652 if (!Attrs.empty())
Christopher Lamb5c104242007-04-22 20:09:11 +00003653 ActualAttrs = ParamAttrsList::get(Attrs);
Reid Spencered951ea2007-05-19 07:22:10 +00003654 FunctionType *FT = FunctionType::get(*(yyvsp[-4].TypeVal), Params, isVarArg, ActualAttrs);
3655 delete (yyvsp[-2].TypeWithAttrsList); // Delete the argument list
3656 delete (yyvsp[-4].TypeVal); // Delete the return type handle
3657 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT));
Reid Spencere4d87aa2006-12-23 06:05:41 +00003658 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003659 ;}
3660 break;
3661
3662 case 132:
3663#line 1359 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3664 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003665 std::vector<const Type*> Params;
Christopher Lamb5c104242007-04-22 20:09:11 +00003666 ParamAttrsVector Attrs;
Reid Spencered951ea2007-05-19 07:22:10 +00003667 if ((yyvsp[0].ParamAttrs) != ParamAttr::None) {
3668 ParamAttrsWithIndex X; X.index = 0; X.attrs = (yyvsp[0].ParamAttrs);
Christopher Lamb5c104242007-04-22 20:09:11 +00003669 Attrs.push_back(X);
3670 }
Reid Spencered951ea2007-05-19 07:22:10 +00003671 TypeWithAttrsList::iterator I = (yyvsp[-2].TypeWithAttrsList)->begin(), E = (yyvsp[-2].TypeWithAttrsList)->end();
Reid Spencer7b5d4662007-04-09 06:16:21 +00003672 unsigned index = 1;
3673 for ( ; I != E; ++I, ++index) {
Reid Spencer66728ef2007-03-20 01:13:36 +00003674 const Type* Ty = I->Ty->get();
Reid Spencer66728ef2007-03-20 01:13:36 +00003675 Params.push_back(Ty);
3676 if (Ty != Type::VoidTy)
Christopher Lamb5c104242007-04-22 20:09:11 +00003677 if (I->Attrs != ParamAttr::None) {
3678 ParamAttrsWithIndex X; X.index = index; X.attrs = I->Attrs;
3679 Attrs.push_back(X);
3680 }
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003681 }
3682 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
3683 if (isVarArg) Params.pop_back();
3684
Reid Spencer7b5d4662007-04-09 06:16:21 +00003685 ParamAttrsList *ActualAttrs = 0;
3686 if (!Attrs.empty())
Christopher Lamb5c104242007-04-22 20:09:11 +00003687 ActualAttrs = ParamAttrsList::get(Attrs);
Reid Spencer7b5d4662007-04-09 06:16:21 +00003688
Reid Spencered951ea2007-05-19 07:22:10 +00003689 FunctionType *FT = FunctionType::get((yyvsp[-4].PrimType), Params, isVarArg, ActualAttrs);
3690 delete (yyvsp[-2].TypeWithAttrsList); // Delete the argument list
3691 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT));
Reid Spencer41dff5e2007-01-26 08:05:27 +00003692 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003693 ;}
3694 break;
3695
3696 case 133:
3697#line 1390 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3698 { // Sized array type?
3699 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
3700 delete (yyvsp[-1].TypeVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003701 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003702 ;}
3703 break;
3704
3705 case 134:
3706#line 1395 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3707 { // Vector type?
3708 const llvm::Type* ElemTy = (yyvsp[-1].TypeVal)->get();
3709 if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003710 GEN_ERROR("Unsigned result not equal to signed result");
3711 if (!ElemTy->isFloatingPoint() && !ElemTy->isInteger())
3712 GEN_ERROR("Element type of a VectorType must be primitive");
Reid Spencered951ea2007-05-19 07:22:10 +00003713 if (!isPowerOf2_32((yyvsp[-3].UInt64Val)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003714 GEN_ERROR("Vector length should be a power of 2");
Reid Spencered951ea2007-05-19 07:22:10 +00003715 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(VectorType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
3716 delete (yyvsp[-1].TypeVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003717 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003718 ;}
3719 break;
3720
3721 case 135:
3722#line 1407 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3723 { // Structure type?
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003724 std::vector<const Type*> Elements;
Reid Spencered951ea2007-05-19 07:22:10 +00003725 for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-1].TypeList)->begin(),
3726 E = (yyvsp[-1].TypeList)->end(); I != E; ++I)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003727 Elements.push_back(*I);
3728
Reid Spencered951ea2007-05-19 07:22:10 +00003729 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
3730 delete (yyvsp[-1].TypeList);
Reid Spencer14310612006-12-31 05:40:51 +00003731 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003732 ;}
3733 break;
3734
3735 case 136:
3736#line 1417 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3737 { // Empty structure type?
3738 (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>()));
Reid Spencer14310612006-12-31 05:40:51 +00003739 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003740 ;}
3741 break;
3742
3743 case 137:
3744#line 1421 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3745 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003746 std::vector<const Type*> Elements;
Reid Spencered951ea2007-05-19 07:22:10 +00003747 for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-2].TypeList)->begin(),
3748 E = (yyvsp[-2].TypeList)->end(); I != E; ++I)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003749 Elements.push_back(*I);
3750
Reid Spencered951ea2007-05-19 07:22:10 +00003751 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true)));
3752 delete (yyvsp[-2].TypeList);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003753 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003754 ;}
3755 break;
3756
3757 case 138:
3758#line 1431 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3759 { // Empty structure type?
3760 (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003761 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003762 ;}
3763 break;
3764
3765 case 139:
3766#line 1438 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3767 {
3768 (yyval.TypeWithAttrs).Ty = (yyvsp[-1].TypeVal);
3769 (yyval.TypeWithAttrs).Attrs = (yyvsp[0].ParamAttrs);
3770 ;}
3771 break;
3772
3773 case 140:
3774#line 1445 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3775 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003776 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00003777 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
3778 if (!(*(yyvsp[0].TypeVal))->isFirstClassType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003779 GEN_ERROR("LLVM functions cannot return aggregate types");
Reid Spencered951ea2007-05-19 07:22:10 +00003780 (yyval.TypeVal) = (yyvsp[0].TypeVal);
3781 ;}
3782 break;
3783
3784 case 141:
3785#line 1452 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3786 {
3787 (yyval.TypeVal) = new PATypeHolder(Type::VoidTy);
3788 ;}
3789 break;
3790
3791 case 142:
3792#line 1457 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3793 {
3794 (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
3795 (yyval.TypeWithAttrsList)->push_back((yyvsp[0].TypeWithAttrs));
Reid Spencer3da59db2006-11-27 01:05:10 +00003796 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003797 ;}
3798 break;
3799
3800 case 143:
3801#line 1462 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3802 {
3803 ((yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList))->push_back((yyvsp[0].TypeWithAttrs));
Reid Spencer41dff5e2007-01-26 08:05:27 +00003804 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003805 ;}
3806 break;
3807
3808 case 145:
3809#line 1470 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3810 {
3811 (yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList);
Reid Spencer18da0722007-04-11 02:44:20 +00003812 TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003813 TWA.Ty = new PATypeHolder(Type::VoidTy);
Reid Spencered951ea2007-05-19 07:22:10 +00003814 (yyval.TypeWithAttrsList)->push_back(TWA);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003815 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003816 ;}
3817 break;
3818
3819 case 146:
3820#line 1477 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3821 {
3822 (yyval.TypeWithAttrsList) = new TypeWithAttrsList;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003823 TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None;
3824 TWA.Ty = new PATypeHolder(Type::VoidTy);
Reid Spencered951ea2007-05-19 07:22:10 +00003825 (yyval.TypeWithAttrsList)->push_back(TWA);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003826 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003827 ;}
3828 break;
3829
3830 case 147:
3831#line 1484 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3832 {
3833 (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
Reid Spencer41dff5e2007-01-26 08:05:27 +00003834 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003835 ;}
3836 break;
3837
3838 case 148:
3839#line 1492 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3840 {
3841 (yyval.TypeList) = new std::list<PATypeHolder>();
3842 (yyval.TypeList)->push_back(*(yyvsp[0].TypeVal));
3843 delete (yyvsp[0].TypeVal);
Reid Spencer3da59db2006-11-27 01:05:10 +00003844 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003845 ;}
3846 break;
3847
3848 case 149:
3849#line 1498 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3850 {
3851 ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(*(yyvsp[0].TypeVal));
3852 delete (yyvsp[0].TypeVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003853 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003854 ;}
3855 break;
3856
3857 case 150:
3858#line 1510 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3859 { // Nonempty unsized arr
Reid Spencer14310612006-12-31 05:40:51 +00003860 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00003861 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
3862 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-3].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003863 if (ATy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003864 GEN_ERROR("Cannot make array constant with type: '" +
Reid Spencered951ea2007-05-19 07:22:10 +00003865 (*(yyvsp[-3].TypeVal))->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003866 const Type *ETy = ATy->getElementType();
3867 int NumElements = ATy->getNumElements();
3868
3869 // Verify that we have the correct size...
Reid Spencered951ea2007-05-19 07:22:10 +00003870 if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003871 GEN_ERROR("Type mismatch: constant sized array initialized with " +
Reid Spencered951ea2007-05-19 07:22:10 +00003872 utostr((yyvsp[-1].ConstVector)->size()) + " arguments, but has size of " +
Reid Spencerb5334b02007-02-05 10:18:06 +00003873 itostr(NumElements) + "");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003874
3875 // Verify all elements are correct type!
Reid Spencered951ea2007-05-19 07:22:10 +00003876 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
3877 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003878 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
3879 ETy->getDescription() +"' as required!\nIt is of type '"+
Reid Spencered951ea2007-05-19 07:22:10 +00003880 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003881 }
3882
Reid Spencered951ea2007-05-19 07:22:10 +00003883 (yyval.ConstVal) = ConstantArray::get(ATy, *(yyvsp[-1].ConstVector));
3884 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003885 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003886 ;}
3887 break;
3888
3889 case 151:
3890#line 1538 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3891 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003892 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00003893 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
3894 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003895 if (ATy == 0)
3896 GEN_ERROR("Cannot make array constant with type: '" +
Reid Spencered951ea2007-05-19 07:22:10 +00003897 (*(yyvsp[-2].TypeVal))->getDescription() + "'");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003898
Andrew Lenharth6353e052006-12-08 18:07:09 +00003899 int NumElements = ATy->getNumElements();
3900 if (NumElements != -1 && NumElements != 0)
3901 GEN_ERROR("Type mismatch: constant sized array initialized with 0"
Reid Spencerb5334b02007-02-05 10:18:06 +00003902 " arguments, but has size of " + itostr(NumElements) +"");
Reid Spencered951ea2007-05-19 07:22:10 +00003903 (yyval.ConstVal) = ConstantArray::get(ATy, std::vector<Constant*>());
3904 delete (yyvsp[-2].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003905 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003906 ;}
3907 break;
3908
3909 case 152:
3910#line 1554 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3911 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003912 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00003913 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
3914 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003915 if (ATy == 0)
3916 GEN_ERROR("Cannot make array constant with type: '" +
Reid Spencered951ea2007-05-19 07:22:10 +00003917 (*(yyvsp[-2].TypeVal))->getDescription() + "'");
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003918
3919 int NumElements = ATy->getNumElements();
3920 const Type *ETy = ATy->getElementType();
Reid Spencered951ea2007-05-19 07:22:10 +00003921 char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
3922 if (NumElements != -1 && NumElements != (EndStr-(yyvsp[0].StrVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003923 GEN_ERROR("Can't build string constant of size " +
Reid Spencered951ea2007-05-19 07:22:10 +00003924 itostr((int)(EndStr-(yyvsp[0].StrVal))) +
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003925 " when array has size " + itostr(NumElements) + "");
3926 std::vector<Constant*> Vals;
3927 if (ETy == Type::Int8Ty) {
Reid Spencered951ea2007-05-19 07:22:10 +00003928 for (unsigned char *C = (unsigned char *)(yyvsp[0].StrVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003929 C != (unsigned char*)EndStr; ++C)
3930 Vals.push_back(ConstantInt::get(ETy, *C));
3931 } else {
Reid Spencered951ea2007-05-19 07:22:10 +00003932 free((yyvsp[0].StrVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003933 GEN_ERROR("Cannot build string arrays of non byte sized elements");
3934 }
Reid Spencered951ea2007-05-19 07:22:10 +00003935 free((yyvsp[0].StrVal));
3936 (yyval.ConstVal) = ConstantArray::get(ATy, Vals);
3937 delete (yyvsp[-2].TypeVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003938 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003939 ;}
3940 break;
3941
3942 case 153:
3943#line 1583 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3944 { // Nonempty unsized arr
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003945 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00003946 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
3947 const VectorType *PTy = dyn_cast<VectorType>((yyvsp[-3].TypeVal)->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003948 if (PTy == 0)
3949 GEN_ERROR("Cannot make packed constant with type: '" +
Reid Spencered951ea2007-05-19 07:22:10 +00003950 (*(yyvsp[-3].TypeVal))->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003951 const Type *ETy = PTy->getElementType();
3952 int NumElements = PTy->getNumElements();
Reid Spencer41dff5e2007-01-26 08:05:27 +00003953
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003954 // Verify that we have the correct size...
Reid Spencered951ea2007-05-19 07:22:10 +00003955 if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003956 GEN_ERROR("Type mismatch: constant sized packed initialized with " +
Reid Spencered951ea2007-05-19 07:22:10 +00003957 utostr((yyvsp[-1].ConstVector)->size()) + " arguments, but has size of " +
Reid Spencerb5334b02007-02-05 10:18:06 +00003958 itostr(NumElements) + "");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003959
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003960 // Verify all elements are correct type!
Reid Spencered951ea2007-05-19 07:22:10 +00003961 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
3962 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003963 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
3964 ETy->getDescription() +"' as required!\nIt is of type '"+
Reid Spencered951ea2007-05-19 07:22:10 +00003965 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003966 }
Reid Spencer41dff5e2007-01-26 08:05:27 +00003967
Reid Spencered951ea2007-05-19 07:22:10 +00003968 (yyval.ConstVal) = ConstantVector::get(PTy, *(yyvsp[-1].ConstVector));
3969 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003970 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003971 ;}
3972 break;
3973
3974 case 154:
3975#line 1611 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
3976 {
3977 const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal)->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003978 if (STy == 0)
3979 GEN_ERROR("Cannot make struct constant with type: '" +
Reid Spencered951ea2007-05-19 07:22:10 +00003980 (*(yyvsp[-3].TypeVal))->getDescription() + "'");
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003981
Reid Spencered951ea2007-05-19 07:22:10 +00003982 if ((yyvsp[-1].ConstVector)->size() != STy->getNumContainedTypes())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003983 GEN_ERROR("Illegal number of initializers for structure type");
3984
3985 // Check to ensure that constants are compatible with the type initializer!
Reid Spencered951ea2007-05-19 07:22:10 +00003986 for (unsigned i = 0, e = (yyvsp[-1].ConstVector)->size(); i != e; ++i)
3987 if ((*(yyvsp[-1].ConstVector))[i]->getType() != STy->getElementType(i))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003988 GEN_ERROR("Expected type '" +
3989 STy->getElementType(i)->getDescription() +
3990 "' for element #" + utostr(i) +
3991 " of structure initializer");
3992
3993 // Check to ensure that Type is not packed
3994 if (STy->isPacked())
3995 GEN_ERROR("Unpacked Initializer to vector type '" +
3996 STy->getDescription() + "'");
3997
Reid Spencered951ea2007-05-19 07:22:10 +00003998 (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[-1].ConstVector));
3999 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004000 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004001 ;}
4002 break;
4003
4004 case 155:
4005#line 1637 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4006 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004007 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00004008 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
4009 const StructType *STy = dyn_cast<StructType>((yyvsp[-2].TypeVal)->get());
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004010 if (STy == 0)
4011 GEN_ERROR("Cannot make struct constant with type: '" +
Reid Spencered951ea2007-05-19 07:22:10 +00004012 (*(yyvsp[-2].TypeVal))->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004013
4014 if (STy->getNumContainedTypes() != 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004015 GEN_ERROR("Illegal number of initializers for structure type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004016
4017 // Check to ensure that Type is not packed
4018 if (STy->isPacked())
Chris Lattner6cdc6822007-04-26 05:31:05 +00004019 GEN_ERROR("Unpacked Initializer to vector type '" +
4020 STy->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004021
Reid Spencered951ea2007-05-19 07:22:10 +00004022 (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
4023 delete (yyvsp[-2].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004024 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004025 ;}
4026 break;
4027
4028 case 156:
4029#line 1657 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4030 {
4031 const StructType *STy = dyn_cast<StructType>((yyvsp[-5].TypeVal)->get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00004032 if (STy == 0)
4033 GEN_ERROR("Cannot make struct constant with type: '" +
Reid Spencered951ea2007-05-19 07:22:10 +00004034 (*(yyvsp[-5].TypeVal))->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004035
Reid Spencered951ea2007-05-19 07:22:10 +00004036 if ((yyvsp[-2].ConstVector)->size() != STy->getNumContainedTypes())
Reid Spencerb5334b02007-02-05 10:18:06 +00004037 GEN_ERROR("Illegal number of initializers for structure type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004038
4039 // Check to ensure that constants are compatible with the type initializer!
Reid Spencered951ea2007-05-19 07:22:10 +00004040 for (unsigned i = 0, e = (yyvsp[-2].ConstVector)->size(); i != e; ++i)
4041 if ((*(yyvsp[-2].ConstVector))[i]->getType() != STy->getElementType(i))
Reid Spencer41dff5e2007-01-26 08:05:27 +00004042 GEN_ERROR("Expected type '" +
4043 STy->getElementType(i)->getDescription() +
4044 "' for element #" + utostr(i) +
Reid Spencerb5334b02007-02-05 10:18:06 +00004045 " of structure initializer");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004046
4047 // Check to ensure that Type is packed
4048 if (!STy->isPacked())
Chris Lattner32980692007-02-19 07:44:24 +00004049 GEN_ERROR("Vector initializer to non-vector type '" +
4050 STy->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004051
Reid Spencered951ea2007-05-19 07:22:10 +00004052 (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[-2].ConstVector));
4053 delete (yyvsp[-5].TypeVal); delete (yyvsp[-2].ConstVector);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004054 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004055 ;}
4056 break;
4057
4058 case 157:
4059#line 1683 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4060 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00004061 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00004062 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
4063 const StructType *STy = dyn_cast<StructType>((yyvsp[-4].TypeVal)->get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00004064 if (STy == 0)
4065 GEN_ERROR("Cannot make struct constant with type: '" +
Reid Spencered951ea2007-05-19 07:22:10 +00004066 (*(yyvsp[-4].TypeVal))->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004067
4068 if (STy->getNumContainedTypes() != 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004069 GEN_ERROR("Illegal number of initializers for structure type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004070
4071 // Check to ensure that Type is packed
4072 if (!STy->isPacked())
Chris Lattner32980692007-02-19 07:44:24 +00004073 GEN_ERROR("Vector initializer to non-vector type '" +
4074 STy->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004075
Reid Spencered951ea2007-05-19 07:22:10 +00004076 (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
4077 delete (yyvsp[-4].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004078 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004079 ;}
4080 break;
4081
4082 case 158:
4083#line 1703 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4084 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00004085 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00004086 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
4087 const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004088 if (PTy == 0)
4089 GEN_ERROR("Cannot make null pointer constant with type: '" +
Reid Spencered951ea2007-05-19 07:22:10 +00004090 (*(yyvsp[-1].TypeVal))->getDescription() + "'");
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004091
Reid Spencered951ea2007-05-19 07:22:10 +00004092 (yyval.ConstVal) = ConstantPointerNull::get(PTy);
4093 delete (yyvsp[-1].TypeVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004094 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004095 ;}
4096 break;
4097
4098 case 159:
4099#line 1715 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4100 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004101 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00004102 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
4103 (yyval.ConstVal) = UndefValue::get((yyvsp[-1].TypeVal)->get());
4104 delete (yyvsp[-1].TypeVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004105 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004106 ;}
4107 break;
4108
4109 case 160:
4110#line 1722 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4111 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004112 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00004113 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
4114 const PointerType *Ty = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004115 if (Ty == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004116 GEN_ERROR("Global const reference must be a pointer type");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004117
4118 // ConstExprs can exist in the body of a function, thus creating
4119 // GlobalValues whenever they refer to a variable. Because we are in
Reid Spencer93c40032007-03-19 18:40:50 +00004120 // the context of a function, getExistingVal will search the functions
Reid Spencer68a24bd2005-08-27 18:50:39 +00004121 // symbol table instead of the module symbol table for the global symbol,
4122 // which throws things all off. To get around this, we just tell
Reid Spencer93c40032007-03-19 18:40:50 +00004123 // getExistingVal that we are at global scope here.
Reid Spencer68a24bd2005-08-27 18:50:39 +00004124 //
4125 Function *SavedCurFn = CurFun.CurrentFunction;
4126 CurFun.CurrentFunction = 0;
4127
Reid Spencered951ea2007-05-19 07:22:10 +00004128 Value *V = getExistingVal(Ty, (yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004129 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004130
4131 CurFun.CurrentFunction = SavedCurFn;
4132
4133 // If this is an initializer for a constant pointer, which is referencing a
4134 // (currently) undefined variable, create a stub now that shall be replaced
4135 // in the future with the right type of variable.
4136 //
4137 if (V == 0) {
Reid Spencera9720f52007-02-05 17:04:00 +00004138 assert(isa<PointerType>(Ty) && "Globals may only be used as pointers!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004139 const PointerType *PT = cast<PointerType>(Ty);
4140
4141 // First check to see if the forward references value is already created!
4142 PerModuleInfo::GlobalRefsType::iterator I =
Reid Spencered951ea2007-05-19 07:22:10 +00004143 CurModule.GlobalRefs.find(std::make_pair(PT, (yyvsp[0].ValIDVal)));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004144
4145 if (I != CurModule.GlobalRefs.end()) {
4146 V = I->second; // Placeholder already exists, use it...
Reid Spencered951ea2007-05-19 07:22:10 +00004147 (yyvsp[0].ValIDVal).destroy();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004148 } else {
4149 std::string Name;
Reid Spencered951ea2007-05-19 07:22:10 +00004150 if ((yyvsp[0].ValIDVal).Type == ValID::GlobalName)
4151 Name = (yyvsp[0].ValIDVal).Name;
4152 else if ((yyvsp[0].ValIDVal).Type != ValID::GlobalID)
Reid Spencer41dff5e2007-01-26 08:05:27 +00004153 GEN_ERROR("Invalid reference to global");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004154
4155 // Create the forward referenced global.
4156 GlobalValue *GV;
4157 if (const FunctionType *FTy =
4158 dyn_cast<FunctionType>(PT->getElementType())) {
Chris Lattner6cdc6822007-04-26 05:31:05 +00004159 GV = new Function(FTy, GlobalValue::ExternalWeakLinkage, Name,
Reid Spencer68a24bd2005-08-27 18:50:39 +00004160 CurModule.CurrentModule);
4161 } else {
4162 GV = new GlobalVariable(PT->getElementType(), false,
Chris Lattner6cdc6822007-04-26 05:31:05 +00004163 GlobalValue::ExternalWeakLinkage, 0,
Reid Spencer68a24bd2005-08-27 18:50:39 +00004164 Name, CurModule.CurrentModule);
4165 }
4166
4167 // Keep track of the fact that we have a forward ref to recycle it
Reid Spencered951ea2007-05-19 07:22:10 +00004168 CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, (yyvsp[0].ValIDVal)), GV));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004169 V = GV;
4170 }
4171 }
4172
Reid Spencered951ea2007-05-19 07:22:10 +00004173 (yyval.ConstVal) = cast<GlobalValue>(V);
4174 delete (yyvsp[-1].TypeVal); // Free the type handle
Reid Spencer61c83e02006-08-18 08:43:06 +00004175 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004176 ;}
4177 break;
4178
4179 case 161:
4180#line 1788 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4181 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004182 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00004183 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
4184 if ((yyvsp[-1].TypeVal)->get() != (yyvsp[0].ConstVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004185 GEN_ERROR("Mismatched types for constant expression: " +
Reid Spencered951ea2007-05-19 07:22:10 +00004186 (*(yyvsp[-1].TypeVal))->getDescription() + " and " + (yyvsp[0].ConstVal)->getType()->getDescription());
4187 (yyval.ConstVal) = (yyvsp[0].ConstVal);
4188 delete (yyvsp[-1].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004189 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004190 ;}
4191 break;
4192
4193 case 162:
4194#line 1798 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4195 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004196 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00004197 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
4198 const Type *Ty = (yyvsp[-1].TypeVal)->get();
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004199 if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
4200 GEN_ERROR("Cannot create a null initialized value of this type");
Reid Spencered951ea2007-05-19 07:22:10 +00004201 (yyval.ConstVal) = Constant::getNullValue(Ty);
4202 delete (yyvsp[-1].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004203 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004204 ;}
4205 break;
4206
4207 case 163:
4208#line 1808 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4209 { // integral constants
4210 if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004211 GEN_ERROR("Constant value doesn't fit in type");
Reid Spencered951ea2007-05-19 07:22:10 +00004212 (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val), true);
Reid Spencer38c91a92007-02-28 02:24:54 +00004213 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004214 ;}
4215 break;
4216
4217 case 164:
4218#line 1814 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4219 { // arbitrary precision integer constants
4220 uint32_t BitWidth = cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth();
4221 if ((yyvsp[0].APIntVal)->getBitWidth() > BitWidth) {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004222 GEN_ERROR("Constant value does not fit in type");
4223 }
Reid Spencered951ea2007-05-19 07:22:10 +00004224 (yyvsp[0].APIntVal)->sextOrTrunc(BitWidth);
4225 (yyval.ConstVal) = ConstantInt::get(*(yyvsp[0].APIntVal));
4226 delete (yyvsp[0].APIntVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004227 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004228 ;}
4229 break;
4230
4231 case 165:
4232#line 1824 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4233 { // integral constants
4234 if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004235 GEN_ERROR("Constant value doesn't fit in type");
Reid Spencered951ea2007-05-19 07:22:10 +00004236 (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val), false);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004237 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004238 ;}
4239 break;
4240
4241 case 166:
4242#line 1830 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4243 { // arbitrary precision integer constants
4244 uint32_t BitWidth = cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth();
4245 if ((yyvsp[0].APIntVal)->getBitWidth() > BitWidth) {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004246 GEN_ERROR("Constant value does not fit in type");
4247 }
Reid Spencered951ea2007-05-19 07:22:10 +00004248 (yyvsp[0].APIntVal)->zextOrTrunc(BitWidth);
4249 (yyval.ConstVal) = ConstantInt::get(*(yyvsp[0].APIntVal));
4250 delete (yyvsp[0].APIntVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004251 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004252 ;}
4253 break;
4254
4255 case 167:
4256#line 1840 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4257 { // Boolean constants
4258 assert(cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth() == 1 && "Not Bool?");
4259 (yyval.ConstVal) = ConstantInt::getTrue();
Reid Spencer38c91a92007-02-28 02:24:54 +00004260 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004261 ;}
4262 break;
4263
4264 case 168:
4265#line 1845 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4266 { // Boolean constants
4267 assert(cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth() == 1 && "Not Bool?");
4268 (yyval.ConstVal) = ConstantInt::getFalse();
Reid Spencer6f407902007-01-13 05:00:46 +00004269 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004270 ;}
4271 break;
4272
4273 case 169:
4274#line 1850 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4275 { // Float & Double constants
4276 if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].FPVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004277 GEN_ERROR("Floating point constant invalid for type");
Reid Spencered951ea2007-05-19 07:22:10 +00004278 (yyval.ConstVal) = ConstantFP::get((yyvsp[-1].PrimType), (yyvsp[0].FPVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004279 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004280 ;}
4281 break;
4282
4283 case 170:
4284#line 1858 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4285 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004286 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00004287 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
4288 Constant *Val = (yyvsp[-3].ConstVal);
4289 const Type *DestTy = (yyvsp[-1].TypeVal)->get();
4290 if (!CastInst::castIsValid((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal), DestTy))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004291 GEN_ERROR("invalid cast opcode for cast from '" +
4292 Val->getType()->getDescription() + "' to '" +
4293 DestTy->getDescription() + "'");
Reid Spencered951ea2007-05-19 07:22:10 +00004294 (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal), DestTy);
4295 delete (yyvsp[-1].TypeVal);
4296 ;}
4297 break;
4298
4299 case 171:
4300#line 1870 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4301 {
4302 if (!isa<PointerType>((yyvsp[-2].ConstVal)->getType()))
Reid Spencerb5334b02007-02-05 10:18:06 +00004303 GEN_ERROR("GetElementPtr requires a pointer operand");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004304
4305 const Type *IdxTy =
Reid Spencered951ea2007-05-19 07:22:10 +00004306 GetElementPtrInst::getIndexedType((yyvsp[-2].ConstVal)->getType(), &(*(yyvsp[-1].ValueList))[0], (yyvsp[-1].ValueList)->size(),
Chris Lattner7d9801d2007-02-13 00:58:01 +00004307 true);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004308 if (!IdxTy)
Reid Spencerb5334b02007-02-05 10:18:06 +00004309 GEN_ERROR("Index list invalid for constant getelementptr");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004310
Chris Lattnerf7469af2007-01-31 04:44:08 +00004311 SmallVector<Constant*, 8> IdxVec;
Reid Spencered951ea2007-05-19 07:22:10 +00004312 for (unsigned i = 0, e = (yyvsp[-1].ValueList)->size(); i != e; ++i)
4313 if (Constant *C = dyn_cast<Constant>((*(yyvsp[-1].ValueList))[i]))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004314 IdxVec.push_back(C);
4315 else
Reid Spencerb5334b02007-02-05 10:18:06 +00004316 GEN_ERROR("Indices to constant getelementptr must be constants");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004317
Reid Spencered951ea2007-05-19 07:22:10 +00004318 delete (yyvsp[-1].ValueList);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004319
Reid Spencered951ea2007-05-19 07:22:10 +00004320 (yyval.ConstVal) = ConstantExpr::getGetElementPtr((yyvsp[-2].ConstVal), &IdxVec[0], IdxVec.size());
Andrew Lenharth6353e052006-12-08 18:07:09 +00004321 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004322 ;}
4323 break;
4324
4325 case 172:
4326#line 1892 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4327 {
4328 if ((yyvsp[-5].ConstVal)->getType() != Type::Int1Ty)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004329 GEN_ERROR("Select condition must be of boolean type");
Reid Spencered951ea2007-05-19 07:22:10 +00004330 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004331 GEN_ERROR("Select operand types must match");
Reid Spencered951ea2007-05-19 07:22:10 +00004332 (yyval.ConstVal) = ConstantExpr::getSelect((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004333 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004334 ;}
4335 break;
4336
4337 case 173:
4338#line 1900 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4339 {
4340 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004341 GEN_ERROR("Binary operator types must match");
4342 CHECK_FOR_ERROR;
Reid Spencered951ea2007-05-19 07:22:10 +00004343 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4344 ;}
4345 break;
4346
4347 case 174:
4348#line 1906 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4349 {
4350 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004351 GEN_ERROR("Logical operator types must match");
Reid Spencered951ea2007-05-19 07:22:10 +00004352 if (!(yyvsp[-3].ConstVal)->getType()->isInteger()) {
4353 if (Instruction::isShift((yyvsp[-5].BinaryOpVal)) || !isa<VectorType>((yyvsp[-3].ConstVal)->getType()) ||
4354 !cast<VectorType>((yyvsp[-3].ConstVal)->getType())->getElementType()->isInteger())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004355 GEN_ERROR("Logical operator requires integral operands");
4356 }
Reid Spencered951ea2007-05-19 07:22:10 +00004357 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004358 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004359 ;}
4360 break;
4361
4362 case 175:
4363#line 1917 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4364 {
4365 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004366 GEN_ERROR("icmp operand types must match");
Reid Spencered951ea2007-05-19 07:22:10 +00004367 (yyval.ConstVal) = ConstantExpr::getICmp((yyvsp[-5].IPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4368 ;}
4369 break;
4370
4371 case 176:
4372#line 1922 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4373 {
4374 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004375 GEN_ERROR("fcmp operand types must match");
Reid Spencered951ea2007-05-19 07:22:10 +00004376 (yyval.ConstVal) = ConstantExpr::getFCmp((yyvsp[-5].FPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4377 ;}
4378 break;
4379
4380 case 177:
4381#line 1927 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4382 {
4383 if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004384 GEN_ERROR("Invalid extractelement operands");
Reid Spencered951ea2007-05-19 07:22:10 +00004385 (yyval.ConstVal) = ConstantExpr::getExtractElement((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004386 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004387 ;}
4388 break;
4389
4390 case 178:
4391#line 1933 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4392 {
4393 if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004394 GEN_ERROR("Invalid insertelement operands");
Reid Spencered951ea2007-05-19 07:22:10 +00004395 (yyval.ConstVal) = ConstantExpr::getInsertElement((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004396 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004397 ;}
4398 break;
4399
4400 case 179:
4401#line 1939 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4402 {
4403 if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004404 GEN_ERROR("Invalid shufflevector operands");
Reid Spencered951ea2007-05-19 07:22:10 +00004405 (yyval.ConstVal) = ConstantExpr::getShuffleVector((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004406 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004407 ;}
4408 break;
4409
4410 case 180:
4411#line 1948 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4412 {
4413 ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004414 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004415 ;}
4416 break;
4417
4418 case 181:
4419#line 1952 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4420 {
4421 (yyval.ConstVector) = new std::vector<Constant*>();
4422 (yyval.ConstVector)->push_back((yyvsp[0].ConstVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004423 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004424 ;}
4425 break;
4426
4427 case 182:
4428#line 1960 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4429 { (yyval.BoolVal) = false; ;}
4430 break;
4431
4432 case 183:
4433#line 1960 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4434 { (yyval.BoolVal) = true; ;}
4435 break;
4436
4437 case 184:
4438#line 1963 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4439 { (yyval.BoolVal) = true; ;}
4440 break;
4441
4442 case 185:
4443#line 1963 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4444 { (yyval.BoolVal) = false; ;}
4445 break;
4446
4447 case 186:
4448#line 1966 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4449 {
4450 const Type* VTy = (yyvsp[-1].TypeVal)->get();
4451 Value *V = getVal(VTy, (yyvsp[0].ValIDVal));
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004452 GlobalValue* Aliasee = dyn_cast<GlobalValue>(V);
4453 if (!Aliasee)
4454 GEN_ERROR("Aliases can be created only to global values");
4455
Reid Spencered951ea2007-05-19 07:22:10 +00004456 (yyval.ConstVal) = Aliasee;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004457 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004458 delete (yyvsp[-1].TypeVal);
4459 ;}
4460 break;
4461
4462 case 187:
4463#line 1977 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4464 {
4465 Constant *Val = (yyvsp[-3].ConstVal);
4466 const Type *DestTy = (yyvsp[-1].TypeVal)->get();
4467 if (!CastInst::castIsValid((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal), DestTy))
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004468 GEN_ERROR("invalid cast opcode for cast from '" +
4469 Val->getType()->getDescription() + "' to '" +
4470 DestTy->getDescription() + "'");
4471
Reid Spencered951ea2007-05-19 07:22:10 +00004472 (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal), DestTy);
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004473 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004474 delete (yyvsp[-1].TypeVal);
4475 ;}
4476 break;
4477
4478 case 188:
4479#line 1998 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4480 {
4481 (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004482 CurModule.ModuleDone();
4483 CHECK_FOR_ERROR;
Reid Spencered951ea2007-05-19 07:22:10 +00004484 ;}
4485 break;
4486
4487 case 189:
4488#line 2003 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4489 {
4490 (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004491 CurModule.ModuleDone();
4492 CHECK_FOR_ERROR;
Reid Spencered951ea2007-05-19 07:22:10 +00004493 ;}
4494 break;
4495
4496 case 192:
4497#line 2016 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4498 { CurFun.isDeclare = false; ;}
4499 break;
4500
4501 case 193:
4502#line 2016 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4503 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004504 CurFun.FunctionDone();
4505 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004506 ;}
4507 break;
4508
4509 case 194:
4510#line 2020 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4511 { CurFun.isDeclare = true; ;}
4512 break;
4513
4514 case 195:
4515#line 2020 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4516 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004517 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004518 ;}
4519 break;
4520
4521 case 196:
4522#line 2023 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4523 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004524 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004525 ;}
4526 break;
4527
4528 case 197:
4529#line 2026 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4530 {
Reid Spencer14310612006-12-31 05:40:51 +00004531 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00004532 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004533 // Eagerly resolve types. This is not an optimization, this is a
4534 // requirement that is due to the fact that we could have this:
4535 //
4536 // %list = type { %list * }
4537 // %list = type { %list * } ; repeated type decl
4538 //
4539 // If types are not resolved eagerly, then the two types will not be
4540 // determined to be the same type!
4541 //
Reid Spencered951ea2007-05-19 07:22:10 +00004542 ResolveTypeTo((yyvsp[-2].StrVal), *(yyvsp[0].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004543
Reid Spencered951ea2007-05-19 07:22:10 +00004544 if (!setTypeName(*(yyvsp[0].TypeVal), (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) {
Reid Spencer5b7e7532006-09-28 19:28:24 +00004545 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004546 // If this is a named type that is not a redefinition, add it to the slot
4547 // table.
Reid Spencered951ea2007-05-19 07:22:10 +00004548 CurModule.Types.push_back(*(yyvsp[0].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004549 }
Reid Spencera132e042006-12-03 05:46:11 +00004550
Reid Spencered951ea2007-05-19 07:22:10 +00004551 delete (yyvsp[0].TypeVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004552 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004553 ;}
4554 break;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004555
Reid Spencered951ea2007-05-19 07:22:10 +00004556 case 198:
4557#line 2050 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4558 {
4559 ResolveTypeTo((yyvsp[-2].StrVal), (yyvsp[0].PrimType));
4560
4561 if (!setTypeName((yyvsp[0].PrimType), (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004562 CHECK_FOR_ERROR
4563 // If this is a named type that is not a redefinition, add it to the slot
4564 // table.
Reid Spencered951ea2007-05-19 07:22:10 +00004565 CurModule.Types.push_back((yyvsp[0].PrimType));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004566 }
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004567 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004568 ;}
4569 break;
4570
4571 case 199:
4572#line 2061 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4573 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004574 /* "Externally Visible" Linkage */
Reid Spencered951ea2007-05-19 07:22:10 +00004575 if ((yyvsp[0].ConstVal) == 0)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004576 GEN_ERROR("Global value initializer is not a constant");
Reid Spencered951ea2007-05-19 07:22:10 +00004577 CurGV = ParseGlobalVariable((yyvsp[-4].StrVal), GlobalValue::ExternalLinkage,
4578 (yyvsp[-3].Visibility), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal), (yyvsp[-2].BoolVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004579 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004580 ;}
4581 break;
4582
4583 case 200:
4584#line 2068 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4585 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004586 CurGV = 0;
Reid Spencered951ea2007-05-19 07:22:10 +00004587 ;}
4588 break;
4589
4590 case 201:
4591#line 2072 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4592 {
4593 if ((yyvsp[0].ConstVal) == 0)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004594 GEN_ERROR("Global value initializer is not a constant");
Reid Spencered951ea2007-05-19 07:22:10 +00004595 CurGV = ParseGlobalVariable((yyvsp[-5].StrVal), (yyvsp[-4].Linkage), (yyvsp[-3].Visibility), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal), (yyvsp[-2].BoolVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004596 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004597 ;}
4598 break;
4599
4600 case 202:
4601#line 2077 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4602 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004603 CurGV = 0;
Reid Spencered951ea2007-05-19 07:22:10 +00004604 ;}
4605 break;
4606
4607 case 203:
4608#line 2081 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4609 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004610 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00004611 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
4612 CurGV = ParseGlobalVariable((yyvsp[-5].StrVal), (yyvsp[-4].Linkage), (yyvsp[-3].Visibility), (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0, (yyvsp[-2].BoolVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004613 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004614 delete (yyvsp[0].TypeVal);
4615 ;}
4616 break;
4617
4618 case 204:
4619#line 2087 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4620 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004621 CurGV = 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +00004622 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004623 ;}
4624 break;
4625
4626 case 205:
4627#line 2091 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4628 {
4629 std::string Name((yyvsp[-4].StrVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004630 if (Name.empty())
4631 GEN_ERROR("Alias name cannot be empty");
4632
Reid Spencered951ea2007-05-19 07:22:10 +00004633 Constant* Aliasee = (yyvsp[0].ConstVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004634 if (Aliasee == 0)
Reid Spencered951ea2007-05-19 07:22:10 +00004635 GEN_ERROR(std::string("Invalid aliasee for alias: ") + (yyvsp[-4].StrVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004636
Reid Spencered951ea2007-05-19 07:22:10 +00004637 GlobalAlias* GA = new GlobalAlias(Aliasee->getType(), (yyvsp[-1].Linkage), Name, Aliasee,
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004638 CurModule.CurrentModule);
Reid Spencered951ea2007-05-19 07:22:10 +00004639 GA->setVisibility((yyvsp[-3].Visibility));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004640 InsertValue(GA, CurModule.Values);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004641 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004642 ;}
4643 break;
4644
4645 case 206:
4646#line 2106 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4647 {
Anton Korobeynikov77d0f972007-04-25 14:29:12 +00004648 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004649 ;}
4650 break;
4651
4652 case 207:
4653#line 2109 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4654 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004655 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004656 ;}
4657 break;
4658
4659 case 208:
4660#line 2115 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4661 {
Chris Lattner66316012006-01-24 04:14:29 +00004662 const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
Reid Spencered951ea2007-05-19 07:22:10 +00004663 char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
4664 std::string NewAsm((yyvsp[0].StrVal), EndStr);
4665 free((yyvsp[0].StrVal));
Chris Lattner66316012006-01-24 04:14:29 +00004666
4667 if (AsmSoFar.empty())
4668 CurModule.CurrentModule->setModuleInlineAsm(NewAsm);
4669 else
4670 CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm);
Reid Spencer61c83e02006-08-18 08:43:06 +00004671 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004672;}
4673 break;
4674
4675 case 209:
4676#line 2128 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4677 {
4678 CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal));
4679 free((yyvsp[0].StrVal));
4680 ;}
4681 break;
4682
4683 case 210:
4684#line 2132 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4685 {
4686 CurModule.CurrentModule->setDataLayout((yyvsp[0].StrVal));
4687 free((yyvsp[0].StrVal));
4688 ;}
4689 break;
4690
4691 case 212:
4692#line 2139 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4693 {
4694 CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
4695 free((yyvsp[0].StrVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004696 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004697 ;}
4698 break;
4699
4700 case 213:
4701#line 2144 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4702 {
4703 CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
4704 free((yyvsp[0].StrVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004705 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004706 ;}
4707 break;
4708
4709 case 214:
4710#line 2149 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4711 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004712 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004713 ;}
4714 break;
4715
4716 case 215:
4717#line 2158 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4718 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004719 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00004720 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
4721 if (*(yyvsp[-2].TypeVal) == Type::VoidTy)
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004722 GEN_ERROR("void typed arguments are invalid");
Reid Spencered951ea2007-05-19 07:22:10 +00004723 ArgListEntry E; E.Attrs = (yyvsp[-1].ParamAttrs); E.Ty = (yyvsp[-2].TypeVal); E.Name = (yyvsp[0].StrVal);
4724 (yyval.ArgList) = (yyvsp[-4].ArgList);
4725 (yyvsp[-4].ArgList)->push_back(E);
Reid Spencer6f407902007-01-13 05:00:46 +00004726 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004727 ;}
4728 break;
4729
4730 case 216:
4731#line 2168 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4732 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004733 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00004734 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
4735 if (*(yyvsp[-2].TypeVal) == Type::VoidTy)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004736 GEN_ERROR("void typed arguments are invalid");
Reid Spencered951ea2007-05-19 07:22:10 +00004737 ArgListEntry E; E.Attrs = (yyvsp[-1].ParamAttrs); E.Ty = (yyvsp[-2].TypeVal); E.Name = (yyvsp[0].StrVal);
4738 (yyval.ArgList) = new ArgListType;
4739 (yyval.ArgList)->push_back(E);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004740 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004741 ;}
4742 break;
4743
4744 case 217:
4745#line 2179 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4746 {
4747 (yyval.ArgList) = (yyvsp[0].ArgList);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004748 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004749 ;}
4750 break;
4751
4752 case 218:
4753#line 2183 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4754 {
4755 (yyval.ArgList) = (yyvsp[-2].ArgList);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004756 struct ArgListEntry E;
4757 E.Ty = new PATypeHolder(Type::VoidTy);
4758 E.Name = 0;
Reid Spencer18da0722007-04-11 02:44:20 +00004759 E.Attrs = ParamAttr::None;
Reid Spencered951ea2007-05-19 07:22:10 +00004760 (yyval.ArgList)->push_back(E);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004761 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004762 ;}
4763 break;
4764
4765 case 219:
4766#line 2192 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4767 {
4768 (yyval.ArgList) = new ArgListType;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004769 struct ArgListEntry E;
4770 E.Ty = new PATypeHolder(Type::VoidTy);
4771 E.Name = 0;
4772 E.Attrs = ParamAttr::None;
Reid Spencered951ea2007-05-19 07:22:10 +00004773 (yyval.ArgList)->push_back(E);
Reid Spencer61c83e02006-08-18 08:43:06 +00004774 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004775 ;}
4776 break;
4777
4778 case 220:
4779#line 2201 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4780 {
4781 (yyval.ArgList) = 0;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004782 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004783 ;}
4784 break;
4785
4786 case 221:
4787#line 2207 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4788 {
4789 UnEscapeLexed((yyvsp[-6].StrVal));
4790 std::string FunctionName((yyvsp[-6].StrVal));
4791 free((yyvsp[-6].StrVal)); // Free strdup'd memory!
Reid Spencer68a24bd2005-08-27 18:50:39 +00004792
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004793 // Check the function result for abstractness if this is a define. We should
4794 // have no abstract types at this point
Reid Spencered951ea2007-05-19 07:22:10 +00004795 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved((yyvsp[-7].TypeVal)))
4796 GEN_ERROR("Reference to abstract result: "+ (yyvsp[-7].TypeVal)->get()->getDescription());
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004797
Reid Spencer68a24bd2005-08-27 18:50:39 +00004798 std::vector<const Type*> ParamTypeList;
Christopher Lamb5c104242007-04-22 20:09:11 +00004799 ParamAttrsVector Attrs;
Reid Spencered951ea2007-05-19 07:22:10 +00004800 if ((yyvsp[-2].ParamAttrs) != ParamAttr::None) {
4801 ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = (yyvsp[-2].ParamAttrs);
Christopher Lamb5c104242007-04-22 20:09:11 +00004802 Attrs.push_back(PAWI);
4803 }
Reid Spencered951ea2007-05-19 07:22:10 +00004804 if ((yyvsp[-4].ArgList)) { // If there are arguments...
Reid Spencer7b5d4662007-04-09 06:16:21 +00004805 unsigned index = 1;
Reid Spencered951ea2007-05-19 07:22:10 +00004806 for (ArgListType::iterator I = (yyvsp[-4].ArgList)->begin(); I != (yyvsp[-4].ArgList)->end(); ++I, ++index) {
Reid Spencer14310612006-12-31 05:40:51 +00004807 const Type* Ty = I->Ty->get();
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004808 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(I->Ty))
4809 GEN_ERROR("Reference to abstract argument: " + Ty->getDescription());
Reid Spencer14310612006-12-31 05:40:51 +00004810 ParamTypeList.push_back(Ty);
4811 if (Ty != Type::VoidTy)
Christopher Lamb5c104242007-04-22 20:09:11 +00004812 if (I->Attrs != ParamAttr::None) {
4813 ParamAttrsWithIndex PAWI; PAWI.index = index; PAWI.attrs = I->Attrs;
4814 Attrs.push_back(PAWI);
4815 }
Reid Spencer14310612006-12-31 05:40:51 +00004816 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004817 }
4818
4819 bool isVarArg = ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy;
4820 if (isVarArg) ParamTypeList.pop_back();
4821
Christopher Lamb5c104242007-04-22 20:09:11 +00004822 ParamAttrsList *PAL = 0;
4823 if (!Attrs.empty())
4824 PAL = ParamAttrsList::get(Attrs);
Reid Spencer7b5d4662007-04-09 06:16:21 +00004825
Reid Spencered951ea2007-05-19 07:22:10 +00004826 FunctionType *FT = FunctionType::get(*(yyvsp[-7].TypeVal), ParamTypeList, isVarArg, PAL);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004827 const PointerType *PFT = PointerType::get(FT);
Reid Spencered951ea2007-05-19 07:22:10 +00004828 delete (yyvsp[-7].TypeVal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004829
4830 ValID ID;
4831 if (!FunctionName.empty()) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00004832 ID = ValID::createGlobalName((char*)FunctionName.c_str());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004833 } else {
Reid Spencer93c40032007-03-19 18:40:50 +00004834 ID = ValID::createGlobalID(CurModule.Values.size());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004835 }
4836
4837 Function *Fn = 0;
4838 // See if this function was forward referenced. If so, recycle the object.
4839 if (GlobalValue *FWRef = CurModule.GetForwardRefForGlobal(PFT, ID)) {
4840 // Move the function to the end of the list, from whereever it was
4841 // previously inserted.
4842 Fn = cast<Function>(FWRef);
4843 CurModule.CurrentModule->getFunctionList().remove(Fn);
4844 CurModule.CurrentModule->getFunctionList().push_back(Fn);
4845 } else if (!FunctionName.empty() && // Merge with an earlier prototype?
Reid Spenceref9b9a72007-02-05 20:47:22 +00004846 (Fn = CurModule.CurrentModule->getFunction(FunctionName))) {
Chris Lattner6cdc6822007-04-26 05:31:05 +00004847 if (Fn->getFunctionType() != FT) {
Reid Spenceref9b9a72007-02-05 20:47:22 +00004848 // The existing function doesn't have the same type. This is an overload
4849 // error.
4850 GEN_ERROR("Overload of function '" + FunctionName + "' not permitted.");
4851 } else if (!CurFun.isDeclare && !Fn->isDeclaration()) {
Chris Lattner6cdc6822007-04-26 05:31:05 +00004852 // Neither the existing or the current function is a declaration and they
4853 // have the same name and same type. Clearly this is a redefinition.
4854 GEN_ERROR("Redefinition of function '" + FunctionName + "'");
Reid Spenceref9b9a72007-02-05 20:47:22 +00004855 } if (Fn->isDeclaration()) {
4856 // Make sure to strip off any argument names so we can't get conflicts.
Reid Spencer68a24bd2005-08-27 18:50:39 +00004857 for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end();
4858 AI != AE; ++AI)
4859 AI->setName("");
Reid Spenceref9b9a72007-02-05 20:47:22 +00004860 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004861 } else { // Not already defined?
Chris Lattner6cdc6822007-04-26 05:31:05 +00004862 Fn = new Function(FT, GlobalValue::ExternalWeakLinkage, FunctionName,
Reid Spencer68a24bd2005-08-27 18:50:39 +00004863 CurModule.CurrentModule);
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004864
Reid Spencer68a24bd2005-08-27 18:50:39 +00004865 InsertValue(Fn, CurModule.Values);
4866 }
4867
4868 CurFun.FunctionStart(Fn);
Anton Korobeynikov93c2b372006-09-17 13:06:18 +00004869
4870 if (CurFun.isDeclare) {
4871 // If we have declaration, always overwrite linkage. This will allow us to
4872 // correctly handle cases, when pointer to function is passed as argument to
4873 // another function.
4874 Fn->setLinkage(CurFun.Linkage);
Anton Korobeynikov178a3522007-01-12 19:22:51 +00004875 Fn->setVisibility(CurFun.Visibility);
Anton Korobeynikov93c2b372006-09-17 13:06:18 +00004876 }
Reid Spencered951ea2007-05-19 07:22:10 +00004877 Fn->setCallingConv((yyvsp[-8].UIntVal));
4878 Fn->setAlignment((yyvsp[0].UIntVal));
4879 if ((yyvsp[-1].StrVal)) {
4880 Fn->setSection((yyvsp[-1].StrVal));
4881 free((yyvsp[-1].StrVal));
Chris Lattnere869eef2005-11-12 00:11:49 +00004882 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004883
4884 // Add all of the arguments we parsed to the function...
Reid Spencered951ea2007-05-19 07:22:10 +00004885 if ((yyvsp[-4].ArgList)) { // Is null if empty...
Reid Spencer68a24bd2005-08-27 18:50:39 +00004886 if (isVarArg) { // Nuke the last entry
Reid Spencered951ea2007-05-19 07:22:10 +00004887 assert((yyvsp[-4].ArgList)->back().Ty->get() == Type::VoidTy && (yyvsp[-4].ArgList)->back().Name == 0 &&
Reid Spencera9720f52007-02-05 17:04:00 +00004888 "Not a varargs marker!");
Reid Spencered951ea2007-05-19 07:22:10 +00004889 delete (yyvsp[-4].ArgList)->back().Ty;
4890 (yyvsp[-4].ArgList)->pop_back(); // Delete the last entry
Reid Spencer68a24bd2005-08-27 18:50:39 +00004891 }
4892 Function::arg_iterator ArgIt = Fn->arg_begin();
Reid Spenceref9b9a72007-02-05 20:47:22 +00004893 Function::arg_iterator ArgEnd = Fn->arg_end();
Reid Spencer14310612006-12-31 05:40:51 +00004894 unsigned Idx = 1;
Reid Spencered951ea2007-05-19 07:22:10 +00004895 for (ArgListType::iterator I = (yyvsp[-4].ArgList)->begin();
4896 I != (yyvsp[-4].ArgList)->end() && ArgIt != ArgEnd; ++I, ++ArgIt) {
Reid Spencer14310612006-12-31 05:40:51 +00004897 delete I->Ty; // Delete the typeholder...
Reid Spenceref9b9a72007-02-05 20:47:22 +00004898 setValueName(ArgIt, I->Name); // Insert arg into symtab...
Reid Spencer5b7e7532006-09-28 19:28:24 +00004899 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004900 InsertValue(ArgIt);
Reid Spencer14310612006-12-31 05:40:51 +00004901 Idx++;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004902 }
Reid Spencera132e042006-12-03 05:46:11 +00004903
Reid Spencered951ea2007-05-19 07:22:10 +00004904 delete (yyvsp[-4].ArgList); // We're now done with the argument list
Reid Spencer68a24bd2005-08-27 18:50:39 +00004905 }
Reid Spencer61c83e02006-08-18 08:43:06 +00004906 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004907;}
4908 break;
4909
4910 case 224:
4911#line 2330 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4912 {
4913 (yyval.FunctionVal) = CurFun.CurrentFunction;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004914
4915 // Make sure that we keep track of the linkage type even if there was a
4916 // previous "declare".
Reid Spencered951ea2007-05-19 07:22:10 +00004917 (yyval.FunctionVal)->setLinkage((yyvsp[-3].Linkage));
4918 (yyval.FunctionVal)->setVisibility((yyvsp[-2].Visibility));
4919;}
4920 break;
4921
4922 case 227:
4923#line 2341 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4924 {
4925 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004926 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004927;}
4928 break;
4929
4930 case 228:
4931#line 2346 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4932 {
4933 CurFun.CurrentFunction->setLinkage((yyvsp[-2].Linkage));
4934 CurFun.CurrentFunction->setVisibility((yyvsp[-1].Visibility));
4935 (yyval.FunctionVal) = CurFun.CurrentFunction;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004936 CurFun.FunctionDone();
Reid Spencer41dff5e2007-01-26 08:05:27 +00004937 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004938 ;}
4939 break;
4940
4941 case 229:
4942#line 2358 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4943 {
4944 (yyval.BoolVal) = false;
Reid Spencer61c83e02006-08-18 08:43:06 +00004945 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004946 ;}
4947 break;
4948
4949 case 230:
4950#line 2362 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4951 {
4952 (yyval.BoolVal) = true;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004953 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004954 ;}
4955 break;
4956
4957 case 231:
4958#line 2367 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4959 { // A reference to a direct constant
4960 (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004961 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004962 ;}
4963 break;
4964
4965 case 232:
4966#line 2371 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4967 {
4968 (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004969 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004970 ;}
4971 break;
4972
4973 case 233:
4974#line 2375 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4975 { // Perhaps it's an FP constant?
4976 (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal));
Reid Spencere4d87aa2006-12-23 06:05:41 +00004977 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004978 ;}
4979 break;
4980
4981 case 234:
4982#line 2379 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4983 {
4984 (yyval.ValIDVal) = ValID::create(ConstantInt::getTrue());
Reid Spencere4d87aa2006-12-23 06:05:41 +00004985 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004986 ;}
4987 break;
4988
4989 case 235:
4990#line 2383 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4991 {
4992 (yyval.ValIDVal) = ValID::create(ConstantInt::getFalse());
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00004993 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004994 ;}
4995 break;
4996
4997 case 236:
4998#line 2387 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
4999 {
5000 (yyval.ValIDVal) = ValID::createNull();
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00005001 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005002 ;}
5003 break;
5004
5005 case 237:
5006#line 2391 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5007 {
5008 (yyval.ValIDVal) = ValID::createUndef();
Reid Spencer61c83e02006-08-18 08:43:06 +00005009 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005010 ;}
5011 break;
5012
5013 case 238:
5014#line 2395 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5015 { // A vector zero constant.
5016 (yyval.ValIDVal) = ValID::createZeroInit();
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005017 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005018 ;}
5019 break;
5020
5021 case 239:
5022#line 2399 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5023 { // Nonempty unsized packed vector
5024 const Type *ETy = (*(yyvsp[-1].ConstVector))[0]->getType();
5025 int NumElements = (yyvsp[-1].ConstVector)->size();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005026
Reid Spencer9d6565a2007-02-15 02:26:10 +00005027 VectorType* pt = VectorType::get(ETy, NumElements);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005028 PATypeHolder* PTy = new PATypeHolder(
Reid Spencera132e042006-12-03 05:46:11 +00005029 HandleUpRefs(
Reid Spencer9d6565a2007-02-15 02:26:10 +00005030 VectorType::get(
Reid Spencera132e042006-12-03 05:46:11 +00005031 ETy,
5032 NumElements)
5033 )
5034 );
Reid Spencer68a24bd2005-08-27 18:50:39 +00005035
5036 // Verify all elements are correct type!
Reid Spencered951ea2007-05-19 07:22:10 +00005037 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
5038 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00005039 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00005040 ETy->getDescription() +"' as required!\nIt is of type '" +
Reid Spencered951ea2007-05-19 07:22:10 +00005041 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005042 }
5043
Reid Spencered951ea2007-05-19 07:22:10 +00005044 (yyval.ValIDVal) = ValID::create(ConstantVector::get(pt, *(yyvsp[-1].ConstVector)));
5045 delete PTy; delete (yyvsp[-1].ConstVector);
Reid Spencer832254e2007-02-02 02:16:23 +00005046 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005047 ;}
5048 break;
5049
5050 case 240:
5051#line 2424 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5052 {
5053 (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal));
Reid Spencer832254e2007-02-02 02:16:23 +00005054 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005055 ;}
5056 break;
5057
5058 case 241:
5059#line 2428 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5060 {
5061 char *End = UnEscapeLexed((yyvsp[-2].StrVal), true);
5062 std::string AsmStr = std::string((yyvsp[-2].StrVal), End);
5063 End = UnEscapeLexed((yyvsp[0].StrVal), true);
5064 std::string Constraints = std::string((yyvsp[0].StrVal), End);
5065 (yyval.ValIDVal) = ValID::createInlineAsm(AsmStr, Constraints, (yyvsp[-3].BoolVal));
5066 free((yyvsp[-2].StrVal));
5067 free((yyvsp[0].StrVal));
Reid Spencer832254e2007-02-02 02:16:23 +00005068 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005069 ;}
5070 break;
5071
5072 case 242:
5073#line 2442 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5074 { // Is it an integer reference...?
5075 (yyval.ValIDVal) = ValID::createLocalID((yyvsp[0].UIntVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005076 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005077 ;}
5078 break;
5079
5080 case 243:
5081#line 2446 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5082 {
5083 (yyval.ValIDVal) = ValID::createGlobalID((yyvsp[0].UIntVal));
Reid Spencer832254e2007-02-02 02:16:23 +00005084 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005085 ;}
5086 break;
5087
5088 case 244:
5089#line 2450 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5090 { // Is it a named reference...?
5091 (yyval.ValIDVal) = ValID::createLocalName((yyvsp[0].StrVal));
Reid Spencer832254e2007-02-02 02:16:23 +00005092 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005093 ;}
5094 break;
5095
5096 case 245:
5097#line 2454 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5098 { // Is it a named reference...?
5099 (yyval.ValIDVal) = ValID::createGlobalName((yyvsp[0].StrVal));
Reid Spencer832254e2007-02-02 02:16:23 +00005100 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005101 ;}
5102 break;
5103
5104 case 248:
5105#line 2466 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5106 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005107 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005108 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
5109 (yyval.ValueVal) = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
5110 delete (yyvsp[-1].TypeVal);
Reid Spencer832254e2007-02-02 02:16:23 +00005111 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005112 ;}
5113 break;
5114
5115 case 249:
5116#line 2475 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5117 {
5118 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005119 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005120 ;}
5121 break;
5122
5123 case 250:
5124#line 2479 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5125 { // Do not allow functions with 0 basic blocks
5126 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005127 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005128 ;}
5129 break;
5130
5131 case 251:
5132#line 2488 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5133 {
5134 setValueName((yyvsp[0].TermInstVal), (yyvsp[-1].StrVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005135 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005136 InsertValue((yyvsp[0].TermInstVal));
5137 (yyvsp[-2].BasicBlockVal)->getInstList().push_back((yyvsp[0].TermInstVal));
5138 (yyval.BasicBlockVal) = (yyvsp[-2].BasicBlockVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005139 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005140 ;}
5141 break;
5142
5143 case 252:
5144#line 2497 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5145 {
5146 if (CastInst *CI1 = dyn_cast<CastInst>((yyvsp[0].InstVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005147 if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0)))
5148 if (CI2->getParent() == 0)
Reid Spencered951ea2007-05-19 07:22:10 +00005149 (yyvsp[-1].BasicBlockVal)->getInstList().push_back(CI2);
5150 (yyvsp[-1].BasicBlockVal)->getInstList().push_back((yyvsp[0].InstVal));
5151 (yyval.BasicBlockVal) = (yyvsp[-1].BasicBlockVal);
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005152 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005153 ;}
5154 break;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005155
Reid Spencered951ea2007-05-19 07:22:10 +00005156 case 253:
5157#line 2506 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5158 { // Empty space between instruction lists
5159 (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalID(CurFun.NextValNum));
5160 CHECK_FOR_ERROR
5161 ;}
5162 break;
5163
5164 case 254:
5165#line 2510 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5166 { // Labelled (named) basic block
5167 (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalName((yyvsp[0].StrVal)));
5168 CHECK_FOR_ERROR
5169 ;}
5170 break;
5171
5172 case 255:
5173#line 2515 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5174 { // Return with a result...
5175 (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal));
5176 CHECK_FOR_ERROR
5177 ;}
5178 break;
5179
5180 case 256:
5181#line 2519 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5182 { // Return with no result...
5183 (yyval.TermInstVal) = new ReturnInst();
5184 CHECK_FOR_ERROR
5185 ;}
5186 break;
5187
5188 case 257:
5189#line 2523 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5190 { // Unconditional Branch...
5191 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
5192 CHECK_FOR_ERROR
5193 (yyval.TermInstVal) = new BranchInst(tmpBB);
5194 ;}
5195 break;
5196
5197 case 258:
5198#line 2528 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5199 {
5200 assert(cast<IntegerType>((yyvsp[-7].PrimType))->getBitWidth() == 1 && "Not Bool?");
5201 BasicBlock* tmpBBA = getBBVal((yyvsp[-3].ValIDVal));
5202 CHECK_FOR_ERROR
5203 BasicBlock* tmpBBB = getBBVal((yyvsp[0].ValIDVal));
5204 CHECK_FOR_ERROR
5205 Value* tmpVal = getVal(Type::Int1Ty, (yyvsp[-6].ValIDVal));
5206 CHECK_FOR_ERROR
5207 (yyval.TermInstVal) = new BranchInst(tmpBBA, tmpBBB, tmpVal);
5208 ;}
5209 break;
5210
5211 case 259:
5212#line 2538 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5213 {
5214 Value* tmpVal = getVal((yyvsp[-7].PrimType), (yyvsp[-6].ValIDVal));
5215 CHECK_FOR_ERROR
5216 BasicBlock* tmpBB = getBBVal((yyvsp[-3].ValIDVal));
5217 CHECK_FOR_ERROR
5218 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[-1].JumpTable)->size());
5219 (yyval.TermInstVal) = S;
5220
5221 std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = (yyvsp[-1].JumpTable)->begin(),
5222 E = (yyvsp[-1].JumpTable)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005223 for (; I != E; ++I) {
5224 if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
5225 S->addCase(CI, I->second);
5226 else
Reid Spencerb5334b02007-02-05 10:18:06 +00005227 GEN_ERROR("Switch case is constant, but not a simple integer");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005228 }
Reid Spencered951ea2007-05-19 07:22:10 +00005229 delete (yyvsp[-1].JumpTable);
Reid Spencer61c83e02006-08-18 08:43:06 +00005230 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005231 ;}
5232 break;
5233
5234 case 260:
5235#line 2557 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5236 {
5237 Value* tmpVal = getVal((yyvsp[-6].PrimType), (yyvsp[-5].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005238 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005239 BasicBlock* tmpBB = getBBVal((yyvsp[-2].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005240 CHECK_FOR_ERROR
5241 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
Reid Spencered951ea2007-05-19 07:22:10 +00005242 (yyval.TermInstVal) = S;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005243 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005244 ;}
5245 break;
5246
5247 case 261:
5248#line 2567 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5249 {
Reid Spencer3822ff52006-11-08 06:47:33 +00005250
Reid Spencer14310612006-12-31 05:40:51 +00005251 // Handle the short syntax
5252 const PointerType *PFTy = 0;
5253 const FunctionType *Ty = 0;
Reid Spencered951ea2007-05-19 07:22:10 +00005254 if (!(PFTy = dyn_cast<PointerType>((yyvsp[-11].TypeVal)->get())) ||
Reid Spencer68a24bd2005-08-27 18:50:39 +00005255 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
5256 // Pull out the types of all of the arguments...
5257 std::vector<const Type*> ParamTypes;
Christopher Lamb5c104242007-04-22 20:09:11 +00005258 ParamAttrsVector Attrs;
Reid Spencered951ea2007-05-19 07:22:10 +00005259 if ((yyvsp[-6].ParamAttrs) != ParamAttr::None) {
5260 ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = (yyvsp[-6].ParamAttrs);
Christopher Lamb5c104242007-04-22 20:09:11 +00005261 Attrs.push_back(PAWI);
5262 }
Reid Spencered951ea2007-05-19 07:22:10 +00005263 ValueRefList::iterator I = (yyvsp[-8].ValueRefList)->begin(), E = (yyvsp[-8].ValueRefList)->end();
Reid Spencer7b5d4662007-04-09 06:16:21 +00005264 unsigned index = 1;
5265 for (; I != E; ++I, ++index) {
Reid Spencer14310612006-12-31 05:40:51 +00005266 const Type *Ty = I->Val->getType();
5267 if (Ty == Type::VoidTy)
5268 GEN_ERROR("Short call syntax cannot be used with varargs");
5269 ParamTypes.push_back(Ty);
Christopher Lamb5c104242007-04-22 20:09:11 +00005270 if (I->Attrs != ParamAttr::None) {
5271 ParamAttrsWithIndex PAWI; PAWI.index = index; PAWI.attrs = I->Attrs;
5272 Attrs.push_back(PAWI);
5273 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00005274 }
5275
Christopher Lamb5c104242007-04-22 20:09:11 +00005276 ParamAttrsList *PAL = 0;
5277 if (!Attrs.empty())
5278 PAL = ParamAttrsList::get(Attrs);
Reid Spencered951ea2007-05-19 07:22:10 +00005279 Ty = FunctionType::get((yyvsp[-11].TypeVal)->get(), ParamTypes, false, PAL);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005280 PFTy = PointerType::get(Ty);
5281 }
5282
Reid Spencered951ea2007-05-19 07:22:10 +00005283 delete (yyvsp[-11].TypeVal);
Reid Spencer66728ef2007-03-20 01:13:36 +00005284
Reid Spencered951ea2007-05-19 07:22:10 +00005285 Value *V = getVal(PFTy, (yyvsp[-10].ValIDVal)); // Get the function we're calling...
Andrew Lenharth6353e052006-12-08 18:07:09 +00005286 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005287 BasicBlock *Normal = getBBVal((yyvsp[-3].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005288 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005289 BasicBlock *Except = getBBVal((yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005290 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00005291
Reid Spencer14310612006-12-31 05:40:51 +00005292 // Check the arguments
5293 ValueList Args;
Reid Spencered951ea2007-05-19 07:22:10 +00005294 if ((yyvsp[-8].ValueRefList)->empty()) { // Has no arguments?
Reid Spencer14310612006-12-31 05:40:51 +00005295 // Make sure no arguments is a good thing!
5296 if (Ty->getNumParams() != 0)
5297 GEN_ERROR("No arguments passed to a function that "
Reid Spencerb5334b02007-02-05 10:18:06 +00005298 "expects arguments");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005299 } else { // Has arguments?
5300 // Loop through FunctionType's arguments and ensure they are specified
5301 // correctly!
Reid Spencer68a24bd2005-08-27 18:50:39 +00005302 FunctionType::param_iterator I = Ty->param_begin();
5303 FunctionType::param_iterator E = Ty->param_end();
Reid Spencered951ea2007-05-19 07:22:10 +00005304 ValueRefList::iterator ArgI = (yyvsp[-8].ValueRefList)->begin(), ArgE = (yyvsp[-8].ValueRefList)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005305
Reid Spencer14310612006-12-31 05:40:51 +00005306 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
5307 if (ArgI->Val->getType() != *I)
5308 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00005309 (*I)->getDescription() + "'");
Reid Spencer14310612006-12-31 05:40:51 +00005310 Args.push_back(ArgI->Val);
5311 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00005312
Reid Spencer14310612006-12-31 05:40:51 +00005313 if (Ty->isVarArg()) {
5314 if (I == E)
5315 for (; ArgI != ArgE; ++ArgI)
5316 Args.push_back(ArgI->Val); // push the remaining varargs
5317 } else if (I != E || ArgI != ArgE)
Reid Spencerb5334b02007-02-05 10:18:06 +00005318 GEN_ERROR("Invalid number of parameters detected");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005319 }
Reid Spencer14310612006-12-31 05:40:51 +00005320
5321 // Create the InvokeInst
Chris Lattner9d2fda62007-02-13 05:53:56 +00005322 InvokeInst *II = new InvokeInst(V, Normal, Except, &Args[0], Args.size());
Reid Spencered951ea2007-05-19 07:22:10 +00005323 II->setCallingConv((yyvsp[-12].UIntVal));
5324 (yyval.TermInstVal) = II;
5325 delete (yyvsp[-8].ValueRefList);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005326 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005327 ;}
5328 break;
5329
5330 case 262:
5331#line 2646 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5332 {
5333 (yyval.TermInstVal) = new UnwindInst();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005334 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005335 ;}
5336 break;
5337
5338 case 263:
5339#line 2650 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5340 {
5341 (yyval.TermInstVal) = new UnreachableInst();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005342 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005343 ;}
5344 break;
5345
5346 case 264:
5347#line 2657 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5348 {
5349 (yyval.JumpTable) = (yyvsp[-5].JumpTable);
5350 Constant *V = cast<Constant>(getExistingVal((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005351 CHECK_FOR_ERROR
5352 if (V == 0)
5353 GEN_ERROR("May only switch on a constant pool value");
5354
Reid Spencered951ea2007-05-19 07:22:10 +00005355 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005356 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005357 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
5358 ;}
5359 break;
5360
5361 case 265:
5362#line 2668 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5363 {
5364 (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
5365 Constant *V = cast<Constant>(getExistingVal((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005366 CHECK_FOR_ERROR
5367
5368 if (V == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00005369 GEN_ERROR("May only switch on a constant pool value");
Andrew Lenharth6353e052006-12-08 18:07:09 +00005370
Reid Spencered951ea2007-05-19 07:22:10 +00005371 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005372 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005373 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
5374 ;}
5375 break;
5376
5377 case 266:
5378#line 2681 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5379 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005380 // Is this definition named?? if so, assign the name...
Reid Spencered951ea2007-05-19 07:22:10 +00005381 setValueName((yyvsp[0].InstVal), (yyvsp[-1].StrVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005382 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005383 InsertValue((yyvsp[0].InstVal));
5384 (yyval.InstVal) = (yyvsp[0].InstVal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005385 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005386 ;}
5387 break;
5388
5389 case 267:
5390#line 2691 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5391 { // Used for PHI nodes
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005392 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005393 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-5].TypeVal))->getDescription());
5394 (yyval.PHIList) = new std::list<std::pair<Value*, BasicBlock*> >();
5395 Value* tmpVal = getVal(*(yyvsp[-5].TypeVal), (yyvsp[-3].ValIDVal));
Reid Spencer6f407902007-01-13 05:00:46 +00005396 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005397 BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005398 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005399 (yyval.PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
5400 delete (yyvsp[-5].TypeVal);
5401 ;}
5402 break;
5403
5404 case 268:
5405#line 2702 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5406 {
5407 (yyval.PHIList) = (yyvsp[-6].PHIList);
5408 Value* tmpVal = getVal((yyvsp[-6].PHIList)->front().first->getType(), (yyvsp[-3].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005409 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005410 BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005411 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005412 (yyvsp[-6].PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
5413 ;}
5414 break;
5415
5416 case 269:
5417#line 2712 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5418 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005419 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005420 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005421 // Used for call and invoke instructions
Reid Spencered951ea2007-05-19 07:22:10 +00005422 (yyval.ValueRefList) = new ValueRefList();
5423 ValueRefListEntry E; E.Attrs = (yyvsp[0].ParamAttrs); E.Val = getVal((yyvsp[-2].TypeVal)->get(), (yyvsp[-1].ValIDVal));
5424 (yyval.ValueRefList)->push_back(E);
5425 delete (yyvsp[-2].TypeVal);
5426 ;}
5427 break;
5428
5429 case 270:
5430#line 2721 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5431 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005432 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005433 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
5434 (yyval.ValueRefList) = (yyvsp[-4].ValueRefList);
5435 ValueRefListEntry E; E.Attrs = (yyvsp[0].ParamAttrs); E.Val = getVal((yyvsp[-2].TypeVal)->get(), (yyvsp[-1].ValIDVal));
5436 (yyval.ValueRefList)->push_back(E);
5437 delete (yyvsp[-2].TypeVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005438 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005439 ;}
5440 break;
5441
5442 case 271:
5443#line 2730 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5444 { (yyval.ValueRefList) = new ValueRefList(); ;}
5445 break;
5446
5447 case 272:
5448#line 2733 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5449 { (yyval.ValueList) = new std::vector<Value*>(); ;}
5450 break;
5451
5452 case 273:
5453#line 2734 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5454 {
5455 (yyval.ValueList) = (yyvsp[-2].ValueList);
5456 (yyval.ValueList)->push_back((yyvsp[0].ValueVal));
Reid Spencere4d87aa2006-12-23 06:05:41 +00005457 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005458 ;}
5459 break;
5460
5461 case 274:
5462#line 2741 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5463 {
5464 (yyval.BoolVal) = true;
Reid Spencere4d87aa2006-12-23 06:05:41 +00005465 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005466 ;}
5467 break;
5468
5469 case 275:
5470#line 2745 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5471 {
5472 (yyval.BoolVal) = false;
Andrew Lenharth6353e052006-12-08 18:07:09 +00005473 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005474 ;}
5475 break;
5476
5477 case 276:
5478#line 2750 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5479 {
Reid Spencer14310612006-12-31 05:40:51 +00005480 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005481 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
5482 if (!(*(yyvsp[-3].TypeVal))->isInteger() && !(*(yyvsp[-3].TypeVal))->isFloatingPoint() &&
5483 !isa<VectorType>((*(yyvsp[-3].TypeVal)).get()))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005484 GEN_ERROR(
5485 "Arithmetic operator requires integer, FP, or packed operands");
Reid Spencered951ea2007-05-19 07:22:10 +00005486 if (isa<VectorType>((*(yyvsp[-3].TypeVal)).get()) &&
5487 ((yyvsp[-4].BinaryOpVal) == Instruction::URem ||
5488 (yyvsp[-4].BinaryOpVal) == Instruction::SRem ||
5489 (yyvsp[-4].BinaryOpVal) == Instruction::FRem))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005490 GEN_ERROR("Remainder not supported on vector types");
Reid Spencered951ea2007-05-19 07:22:10 +00005491 Value* val1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005492 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005493 Value* val2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005494 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005495 (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), val1, val2);
5496 if ((yyval.InstVal) == 0)
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005497 GEN_ERROR("binary operator returned null");
Reid Spencered951ea2007-05-19 07:22:10 +00005498 delete (yyvsp[-3].TypeVal);
5499 ;}
5500 break;
5501
5502 case 277:
5503#line 2771 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5504 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005505 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005506 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
5507 if (!(*(yyvsp[-3].TypeVal))->isInteger()) {
5508 if (Instruction::isShift((yyvsp[-4].BinaryOpVal)) || !isa<VectorType>((yyvsp[-3].TypeVal)->get()) ||
5509 !cast<VectorType>((yyvsp[-3].TypeVal)->get())->getElementType()->isInteger())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005510 GEN_ERROR("Logical operator requires integral operands");
5511 }
Reid Spencered951ea2007-05-19 07:22:10 +00005512 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005513 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005514 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005515 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005516 (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), tmpVal1, tmpVal2);
5517 if ((yyval.InstVal) == 0)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005518 GEN_ERROR("binary operator returned null");
Reid Spencered951ea2007-05-19 07:22:10 +00005519 delete (yyvsp[-3].TypeVal);
5520 ;}
5521 break;
5522
5523 case 278:
5524#line 2788 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5525 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005526 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005527 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
5528 if (isa<VectorType>((*(yyvsp[-3].TypeVal)).get()))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005529 GEN_ERROR("Vector types not supported by icmp instruction");
Reid Spencered951ea2007-05-19 07:22:10 +00005530 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005531 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005532 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005533 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005534 (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].IPredicate), tmpVal1, tmpVal2);
5535 if ((yyval.InstVal) == 0)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005536 GEN_ERROR("icmp operator returned null");
Reid Spencered951ea2007-05-19 07:22:10 +00005537 delete (yyvsp[-3].TypeVal);
5538 ;}
5539 break;
5540
5541 case 279:
5542#line 2802 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5543 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005544 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005545 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
5546 if (isa<VectorType>((*(yyvsp[-3].TypeVal)).get()))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005547 GEN_ERROR("Vector types not supported by fcmp instruction");
Reid Spencered951ea2007-05-19 07:22:10 +00005548 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005549 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005550 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005551 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005552 (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].FPredicate), tmpVal1, tmpVal2);
5553 if ((yyval.InstVal) == 0)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005554 GEN_ERROR("fcmp operator returned null");
Reid Spencered951ea2007-05-19 07:22:10 +00005555 delete (yyvsp[-3].TypeVal);
5556 ;}
5557 break;
5558
5559 case 280:
5560#line 2816 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5561 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005562 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005563 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
5564 Value* Val = (yyvsp[-2].ValueVal);
5565 const Type* DestTy = (yyvsp[0].TypeVal)->get();
5566 if (!CastInst::castIsValid((yyvsp[-3].CastOpVal), Val, DestTy))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005567 GEN_ERROR("invalid cast opcode for cast from '" +
5568 Val->getType()->getDescription() + "' to '" +
5569 DestTy->getDescription() + "'");
Reid Spencered951ea2007-05-19 07:22:10 +00005570 (yyval.InstVal) = CastInst::create((yyvsp[-3].CastOpVal), Val, DestTy);
5571 delete (yyvsp[0].TypeVal);
5572 ;}
5573 break;
5574
5575 case 281:
5576#line 2828 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5577 {
5578 if ((yyvsp[-4].ValueVal)->getType() != Type::Int1Ty)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005579 GEN_ERROR("select condition must be boolean");
Reid Spencered951ea2007-05-19 07:22:10 +00005580 if ((yyvsp[-2].ValueVal)->getType() != (yyvsp[0].ValueVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005581 GEN_ERROR("select value types should match");
Reid Spencered951ea2007-05-19 07:22:10 +00005582 (yyval.InstVal) = new SelectInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005583 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005584 ;}
5585 break;
5586
5587 case 282:
5588#line 2836 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5589 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005590 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005591 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
5592 (yyval.InstVal) = new VAArgInst((yyvsp[-2].ValueVal), *(yyvsp[0].TypeVal));
5593 delete (yyvsp[0].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005594 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005595 ;}
5596 break;
5597
5598 case 283:
5599#line 2843 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5600 {
5601 if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005602 GEN_ERROR("Invalid extractelement operands");
Reid Spencered951ea2007-05-19 07:22:10 +00005603 (yyval.InstVal) = new ExtractElementInst((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005604 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005605 ;}
5606 break;
5607
5608 case 284:
5609#line 2849 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5610 {
5611 if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005612 GEN_ERROR("Invalid insertelement operands");
Reid Spencered951ea2007-05-19 07:22:10 +00005613 (yyval.InstVal) = new InsertElementInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005614 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005615 ;}
5616 break;
5617
5618 case 285:
5619#line 2855 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5620 {
5621 if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005622 GEN_ERROR("Invalid shufflevector operands");
Reid Spencered951ea2007-05-19 07:22:10 +00005623 (yyval.InstVal) = new ShuffleVectorInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005624 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005625 ;}
5626 break;
5627
5628 case 286:
5629#line 2861 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5630 {
5631 const Type *Ty = (yyvsp[0].PHIList)->front().first->getType();
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005632 if (!Ty->isFirstClassType())
5633 GEN_ERROR("PHI node operands must be of first class type");
Reid Spencered951ea2007-05-19 07:22:10 +00005634 (yyval.InstVal) = new PHINode(Ty);
5635 ((PHINode*)(yyval.InstVal))->reserveOperandSpace((yyvsp[0].PHIList)->size());
5636 while ((yyvsp[0].PHIList)->begin() != (yyvsp[0].PHIList)->end()) {
5637 if ((yyvsp[0].PHIList)->front().first->getType() != Ty)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005638 GEN_ERROR("All elements of a PHI node must be of the same type");
Reid Spencered951ea2007-05-19 07:22:10 +00005639 cast<PHINode>((yyval.InstVal))->addIncoming((yyvsp[0].PHIList)->front().first, (yyvsp[0].PHIList)->front().second);
5640 (yyvsp[0].PHIList)->pop_front();
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005641 }
Reid Spencered951ea2007-05-19 07:22:10 +00005642 delete (yyvsp[0].PHIList); // Free the list...
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005643 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005644 ;}
5645 break;
5646
5647 case 287:
5648#line 2877 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5649 {
Reid Spencer14310612006-12-31 05:40:51 +00005650
5651 // Handle the short syntax
Andrew Lenharth6353e052006-12-08 18:07:09 +00005652 const PointerType *PFTy = 0;
5653 const FunctionType *Ty = 0;
Reid Spencered951ea2007-05-19 07:22:10 +00005654 if (!(PFTy = dyn_cast<PointerType>((yyvsp[-5].TypeVal)->get())) ||
Andrew Lenharth6353e052006-12-08 18:07:09 +00005655 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
5656 // Pull out the types of all of the arguments...
5657 std::vector<const Type*> ParamTypes;
Christopher Lamb5c104242007-04-22 20:09:11 +00005658 ParamAttrsVector Attrs;
Reid Spencered951ea2007-05-19 07:22:10 +00005659 if ((yyvsp[0].ParamAttrs) != ParamAttr::None) {
5660 ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = (yyvsp[0].ParamAttrs);
Christopher Lamb5c104242007-04-22 20:09:11 +00005661 Attrs.push_back(PAWI);
5662 }
Reid Spencer7b5d4662007-04-09 06:16:21 +00005663 unsigned index = 1;
Reid Spencered951ea2007-05-19 07:22:10 +00005664 ValueRefList::iterator I = (yyvsp[-2].ValueRefList)->begin(), E = (yyvsp[-2].ValueRefList)->end();
Reid Spencer7b5d4662007-04-09 06:16:21 +00005665 for (; I != E; ++I, ++index) {
Reid Spencer14310612006-12-31 05:40:51 +00005666 const Type *Ty = I->Val->getType();
5667 if (Ty == Type::VoidTy)
5668 GEN_ERROR("Short call syntax cannot be used with varargs");
5669 ParamTypes.push_back(Ty);
Christopher Lamb5c104242007-04-22 20:09:11 +00005670 if (I->Attrs != ParamAttr::None) {
5671 ParamAttrsWithIndex PAWI; PAWI.index = index; PAWI.attrs = I->Attrs;
5672 Attrs.push_back(PAWI);
5673 }
Andrew Lenharth6353e052006-12-08 18:07:09 +00005674 }
5675
Christopher Lamb5c104242007-04-22 20:09:11 +00005676 ParamAttrsList *PAL = 0;
5677 if (!Attrs.empty())
5678 PAL = ParamAttrsList::get(Attrs);
Reid Spencer7b5d4662007-04-09 06:16:21 +00005679
Reid Spencered951ea2007-05-19 07:22:10 +00005680 Ty = FunctionType::get((yyvsp[-5].TypeVal)->get(), ParamTypes, false, PAL);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005681 PFTy = PointerType::get(Ty);
5682 }
Chris Lattner6cdc6822007-04-26 05:31:05 +00005683
Reid Spencered951ea2007-05-19 07:22:10 +00005684 Value *V = getVal(PFTy, (yyvsp[-4].ValIDVal)); // Get the function we're calling...
Andrew Lenharth6353e052006-12-08 18:07:09 +00005685 CHECK_FOR_ERROR
Chris Lattner6cdc6822007-04-26 05:31:05 +00005686
Reid Spencer7780acb2007-04-16 06:56:07 +00005687 // Check for call to invalid intrinsic to avoid crashing later.
5688 if (Function *theF = dyn_cast<Function>(V)) {
Reid Spencered48de22007-04-16 22:02:23 +00005689 if (theF->hasName() && (theF->getValueName()->getKeyLength() >= 5) &&
Reid Spencer36fdde12007-04-16 20:35:38 +00005690 (0 == strncmp(theF->getValueName()->getKeyData(), "llvm.", 5)) &&
5691 !theF->getIntrinsicID(true))
Reid Spencer7780acb2007-04-16 06:56:07 +00005692 GEN_ERROR("Call to invalid LLVM intrinsic function '" +
5693 theF->getName() + "'");
5694 }
5695
Reid Spencer14310612006-12-31 05:40:51 +00005696 // Check the arguments
5697 ValueList Args;
Reid Spencered951ea2007-05-19 07:22:10 +00005698 if ((yyvsp[-2].ValueRefList)->empty()) { // Has no arguments?
Andrew Lenharth6353e052006-12-08 18:07:09 +00005699 // Make sure no arguments is a good thing!
5700 if (Ty->getNumParams() != 0)
5701 GEN_ERROR("No arguments passed to a function that "
Reid Spencerb5334b02007-02-05 10:18:06 +00005702 "expects arguments");
Andrew Lenharth6353e052006-12-08 18:07:09 +00005703 } else { // Has arguments?
5704 // Loop through FunctionType's arguments and ensure they are specified
5705 // correctly!
5706 //
5707 FunctionType::param_iterator I = Ty->param_begin();
5708 FunctionType::param_iterator E = Ty->param_end();
Reid Spencered951ea2007-05-19 07:22:10 +00005709 ValueRefList::iterator ArgI = (yyvsp[-2].ValueRefList)->begin(), ArgE = (yyvsp[-2].ValueRefList)->end();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005710
Reid Spencer14310612006-12-31 05:40:51 +00005711 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
5712 if (ArgI->Val->getType() != *I)
5713 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00005714 (*I)->getDescription() + "'");
Reid Spencer14310612006-12-31 05:40:51 +00005715 Args.push_back(ArgI->Val);
5716 }
5717 if (Ty->isVarArg()) {
5718 if (I == E)
5719 for (; ArgI != ArgE; ++ArgI)
5720 Args.push_back(ArgI->Val); // push the remaining varargs
5721 } else if (I != E || ArgI != ArgE)
Reid Spencerb5334b02007-02-05 10:18:06 +00005722 GEN_ERROR("Invalid number of parameters detected");
Andrew Lenharth6353e052006-12-08 18:07:09 +00005723 }
Reid Spencer14310612006-12-31 05:40:51 +00005724 // Create the call node
Chris Lattner9d2fda62007-02-13 05:53:56 +00005725 CallInst *CI = new CallInst(V, &Args[0], Args.size());
Reid Spencered951ea2007-05-19 07:22:10 +00005726 CI->setTailCall((yyvsp[-7].BoolVal));
5727 CI->setCallingConv((yyvsp[-6].UIntVal));
5728 (yyval.InstVal) = CI;
5729 delete (yyvsp[-2].ValueRefList);
5730 delete (yyvsp[-5].TypeVal);
Reid Spencere4d87aa2006-12-23 06:05:41 +00005731 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005732 ;}
5733 break;
5734
5735 case 288:
5736#line 2961 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5737 {
5738 (yyval.InstVal) = (yyvsp[0].InstVal);
Reid Spencere4d87aa2006-12-23 06:05:41 +00005739 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005740 ;}
5741 break;
5742
5743 case 289:
5744#line 2966 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5745 {
5746 (yyval.BoolVal) = true;
Reid Spencere4d87aa2006-12-23 06:05:41 +00005747 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005748 ;}
5749 break;
5750
5751 case 290:
5752#line 2970 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5753 {
5754 (yyval.BoolVal) = false;
Reid Spencer61c83e02006-08-18 08:43:06 +00005755 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005756 ;}
5757 break;
5758
5759 case 291:
5760#line 2977 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5761 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005762 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005763 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
5764 (yyval.InstVal) = new MallocInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
5765 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005766 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005767 ;}
5768 break;
5769
5770 case 292:
5771#line 2984 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5772 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005773 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005774 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
5775 Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005776 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005777 (yyval.InstVal) = new MallocInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
5778 delete (yyvsp[-4].TypeVal);
5779 ;}
5780 break;
5781
5782 case 293:
5783#line 2992 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5784 {
Reid Spencer14310612006-12-31 05:40:51 +00005785 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005786 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
5787 (yyval.InstVal) = new AllocaInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
5788 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005789 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005790 ;}
5791 break;
5792
5793 case 294:
5794#line 2999 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5795 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005796 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005797 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
5798 Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005799 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005800 (yyval.InstVal) = new AllocaInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
5801 delete (yyvsp[-4].TypeVal);
5802 ;}
5803 break;
5804
5805 case 295:
5806#line 3007 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5807 {
5808 if (!isa<PointerType>((yyvsp[0].ValueVal)->getType()))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005809 GEN_ERROR("Trying to free nonpointer type " +
Reid Spencered951ea2007-05-19 07:22:10 +00005810 (yyvsp[0].ValueVal)->getType()->getDescription() + "");
5811 (yyval.InstVal) = new FreeInst((yyvsp[0].ValueVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005812 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005813 ;}
5814 break;
5815
5816 case 296:
5817#line 3015 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5818 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005819 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005820 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
5821 if (!isa<PointerType>((yyvsp[-2].TypeVal)->get()))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005822 GEN_ERROR("Can't load from nonpointer type: " +
Reid Spencered951ea2007-05-19 07:22:10 +00005823 (*(yyvsp[-2].TypeVal))->getDescription());
5824 if (!cast<PointerType>((yyvsp[-2].TypeVal)->get())->getElementType()->isFirstClassType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005825 GEN_ERROR("Can't load from pointer of non-first-class type: " +
Reid Spencered951ea2007-05-19 07:22:10 +00005826 (*(yyvsp[-2].TypeVal))->getDescription());
5827 Value* tmpVal = getVal(*(yyvsp[-2].TypeVal), (yyvsp[-1].ValIDVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005828 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005829 (yyval.InstVal) = new LoadInst(tmpVal, "", (yyvsp[-4].BoolVal), (yyvsp[0].UIntVal));
5830 delete (yyvsp[-2].TypeVal);
5831 ;}
5832 break;
5833
5834 case 297:
5835#line 3029 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5836 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005837 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005838 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
5839 const PointerType *PT = dyn_cast<PointerType>((yyvsp[-2].TypeVal)->get());
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005840 if (!PT)
5841 GEN_ERROR("Can't store to a nonpointer type: " +
Reid Spencered951ea2007-05-19 07:22:10 +00005842 (*(yyvsp[-2].TypeVal))->getDescription());
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005843 const Type *ElTy = PT->getElementType();
Reid Spencered951ea2007-05-19 07:22:10 +00005844 if (ElTy != (yyvsp[-4].ValueVal)->getType())
5845 GEN_ERROR("Can't store '" + (yyvsp[-4].ValueVal)->getType()->getDescription() +
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005846 "' into space of type '" + ElTy->getDescription() + "'");
5847
Reid Spencered951ea2007-05-19 07:22:10 +00005848 Value* tmpVal = getVal(*(yyvsp[-2].TypeVal), (yyvsp[-1].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005849 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005850 (yyval.InstVal) = new StoreInst((yyvsp[-4].ValueVal), tmpVal, (yyvsp[-6].BoolVal), (yyvsp[0].UIntVal));
5851 delete (yyvsp[-2].TypeVal);
5852 ;}
5853 break;
5854
5855 case 298:
5856#line 3046 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
5857 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005858 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005859 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
5860 if (!isa<PointerType>((yyvsp[-2].TypeVal)->get()))
Reid Spencerb5334b02007-02-05 10:18:06 +00005861 GEN_ERROR("getelementptr insn requires pointer operand");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005862
Reid Spencered951ea2007-05-19 07:22:10 +00005863 if (!GetElementPtrInst::getIndexedType(*(yyvsp[-2].TypeVal), &(*(yyvsp[0].ValueList))[0], (yyvsp[0].ValueList)->size(), true))
Reid Spencer61c83e02006-08-18 08:43:06 +00005864 GEN_ERROR("Invalid getelementptr indices for type '" +
Reid Spencered951ea2007-05-19 07:22:10 +00005865 (*(yyvsp[-2].TypeVal))->getDescription()+ "'");
5866 Value* tmpVal = getVal(*(yyvsp[-2].TypeVal), (yyvsp[-1].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005867 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005868 (yyval.InstVal) = new GetElementPtrInst(tmpVal, &(*(yyvsp[0].ValueList))[0], (yyvsp[0].ValueList)->size());
5869 delete (yyvsp[-2].TypeVal);
5870 delete (yyvsp[0].ValueList);
5871 ;}
5872 break;
5873
5874
5875 default: break;
5876 }
5877
5878/* Line 1126 of yacc.c. */
5879#line 5880 "llvmAsmParser.tab.c"
Chris Lattner39b2e8b2007-05-04 04:01:37 +00005880
5881 yyvsp -= yylen;
5882 yyssp -= yylen;
Reid Spencer7780acb2007-04-16 06:56:07 +00005883
Reid Spencered951ea2007-05-19 07:22:10 +00005884
5885 YY_STACK_PRINT (yyss, yyssp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005886
5887 *++yyvsp = yyval;
5888
5889
Reid Spencered951ea2007-05-19 07:22:10 +00005890 /* Now `shift' the result of the reduction. Determine what state
5891 that goes to, based on the state we popped back to and the rule
5892 number reduced by. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00005893
5894 yyn = yyr1[yyn];
5895
Reid Spencered951ea2007-05-19 07:22:10 +00005896 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
5897 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005898 yystate = yytable[yystate];
5899 else
Reid Spencered951ea2007-05-19 07:22:10 +00005900 yystate = yydefgoto[yyn - YYNTOKENS];
Reid Spencer68a24bd2005-08-27 18:50:39 +00005901
5902 goto yynewstate;
5903
5904
Reid Spencered951ea2007-05-19 07:22:10 +00005905/*------------------------------------.
5906| yyerrlab -- here on detecting error |
5907`------------------------------------*/
5908yyerrlab:
5909 /* If not already recovering from an error, report this error. */
5910 if (!yyerrstatus)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005911 {
5912 ++yynerrs;
Reid Spencered951ea2007-05-19 07:22:10 +00005913#if YYERROR_VERBOSE
Chris Lattner39b2e8b2007-05-04 04:01:37 +00005914 yyn = yypact[yystate];
5915
Reid Spencered951ea2007-05-19 07:22:10 +00005916 if (YYPACT_NINF < yyn && yyn < YYLAST)
Chris Lattner39b2e8b2007-05-04 04:01:37 +00005917 {
Reid Spencered951ea2007-05-19 07:22:10 +00005918 int yytype = YYTRANSLATE (yychar);
5919 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
5920 YYSIZE_T yysize = yysize0;
5921 YYSIZE_T yysize1;
5922 int yysize_overflow = 0;
5923 char *yymsg = 0;
5924# define YYERROR_VERBOSE_ARGS_MAXIMUM 5
5925 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
5926 int yyx;
Chris Lattner39b2e8b2007-05-04 04:01:37 +00005927
Reid Spencered951ea2007-05-19 07:22:10 +00005928#if 0
5929 /* This is so xgettext sees the translatable formats that are
5930 constructed on the fly. */
5931 YY_("syntax error, unexpected %s");
5932 YY_("syntax error, unexpected %s, expecting %s");
5933 YY_("syntax error, unexpected %s, expecting %s or %s");
5934 YY_("syntax error, unexpected %s, expecting %s or %s or %s");
5935 YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
5936#endif
5937 char *yyfmt;
5938 char const *yyf;
5939 static char const yyunexpected[] = "syntax error, unexpected %s";
5940 static char const yyexpecting[] = ", expecting %s";
5941 static char const yyor[] = " or %s";
5942 char yyformat[sizeof yyunexpected
5943 + sizeof yyexpecting - 1
5944 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
5945 * (sizeof yyor - 1))];
5946 char const *yyprefix = yyexpecting;
5947
5948 /* Start YYX at -YYN if negative to avoid negative indexes in
5949 YYCHECK. */
5950 int yyxbegin = yyn < 0 ? -yyn : 0;
5951
5952 /* Stay within bounds of both yycheck and yytname. */
5953 int yychecklim = YYLAST - yyn;
5954 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
5955 int yycount = 1;
5956
5957 yyarg[0] = yytname[yytype];
5958 yyfmt = yystpcpy (yyformat, yyunexpected);
5959
5960 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
5961 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
5962 {
5963 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
5964 {
5965 yycount = 1;
5966 yysize = yysize0;
5967 yyformat[sizeof yyunexpected - 1] = '\0';
5968 break;
5969 }
5970 yyarg[yycount++] = yytname[yyx];
5971 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
5972 yysize_overflow |= yysize1 < yysize;
5973 yysize = yysize1;
5974 yyfmt = yystpcpy (yyfmt, yyprefix);
5975 yyprefix = yyor;
5976 }
5977
5978 yyf = YY_(yyformat);
5979 yysize1 = yysize + yystrlen (yyf);
5980 yysize_overflow |= yysize1 < yysize;
5981 yysize = yysize1;
5982
5983 if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM)
5984 yymsg = (char *) YYSTACK_ALLOC (yysize);
5985 if (yymsg)
Chris Lattner39b2e8b2007-05-04 04:01:37 +00005986 {
Reid Spencered951ea2007-05-19 07:22:10 +00005987 /* Avoid sprintf, as that infringes on the user's name space.
5988 Don't have undefined behavior even if the translation
5989 produced a string with the wrong number of "%s"s. */
5990 char *yyp = yymsg;
5991 int yyi = 0;
5992 while ((*yyp = *yyf))
Chris Lattner39b2e8b2007-05-04 04:01:37 +00005993 {
Reid Spencered951ea2007-05-19 07:22:10 +00005994 if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
5995 {
5996 yyp += yytnamerr (yyp, yyarg[yyi++]);
5997 yyf += 2;
5998 }
5999 else
6000 {
6001 yyp++;
6002 yyf++;
6003 }
Chris Lattner39b2e8b2007-05-04 04:01:37 +00006004 }
Reid Spencered951ea2007-05-19 07:22:10 +00006005 yyerror (yymsg);
6006 YYSTACK_FREE (yymsg);
Chris Lattner39b2e8b2007-05-04 04:01:37 +00006007 }
6008 else
Reid Spencered951ea2007-05-19 07:22:10 +00006009 {
6010 yyerror (YY_("syntax error"));
6011 goto yyexhaustedlab;
6012 }
Chris Lattner39b2e8b2007-05-04 04:01:37 +00006013 }
6014 else
6015#endif /* YYERROR_VERBOSE */
Reid Spencered951ea2007-05-19 07:22:10 +00006016 yyerror (YY_("syntax error"));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006017 }
6018
Reid Spencered951ea2007-05-19 07:22:10 +00006019
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006020
6021 if (yyerrstatus == 3)
6022 {
Reid Spencered951ea2007-05-19 07:22:10 +00006023 /* If just tried and failed to reuse look-ahead token after an
6024 error, discard it. */
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006025
Reid Spencered951ea2007-05-19 07:22:10 +00006026 if (yychar <= YYEOF)
6027 {
6028 /* Return failure if at end of input. */
6029 if (yychar == YYEOF)
6030 YYABORT;
6031 }
6032 else
6033 {
6034 yydestruct ("Error: discarding", yytoken, &yylval);
6035 yychar = YYEMPTY;
6036 }
6037 }
6038
6039 /* Else will try to reuse look-ahead token after shifting the error
6040 token. */
6041 goto yyerrlab1;
6042
6043
6044/*---------------------------------------------------.
6045| yyerrorlab -- error raised explicitly by YYERROR. |
6046`---------------------------------------------------*/
6047yyerrorlab:
6048
6049 /* Pacify compilers like GCC when the user code never invokes
6050 YYERROR and the label yyerrorlab therefore never appears in user
6051 code. */
6052 if (0)
6053 goto yyerrorlab;
6054
6055yyvsp -= yylen;
6056 yyssp -= yylen;
6057 yystate = *yyssp;
6058 goto yyerrlab1;
6059
6060
6061/*-------------------------------------------------------------.
6062| yyerrlab1 -- common code for both syntax error and YYERROR. |
6063`-------------------------------------------------------------*/
6064yyerrlab1:
6065 yyerrstatus = 3; /* Each real token shifted decrements this. */
6066
6067 for (;;)
6068 {
6069 yyn = yypact[yystate];
6070 if (yyn != YYPACT_NINF)
6071 {
6072 yyn += YYTERROR;
6073 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
6074 {
6075 yyn = yytable[yyn];
6076 if (0 < yyn)
6077 break;
6078 }
6079 }
6080
6081 /* Pop the current state because it cannot handle the error token. */
6082 if (yyssp == yyss)
Reid Spencer68a24bd2005-08-27 18:50:39 +00006083 YYABORT;
6084
Reid Spencere4d87aa2006-12-23 06:05:41 +00006085
Reid Spencered951ea2007-05-19 07:22:10 +00006086 yydestruct ("Error: popping", yystos[yystate], yyvsp);
6087 YYPOPSTACK;
6088 yystate = *yyssp;
6089 YY_STACK_PRINT (yyss, yyssp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00006090 }
6091
6092 if (yyn == YYFINAL)
6093 YYACCEPT;
6094
Reid Spencer68a24bd2005-08-27 18:50:39 +00006095 *++yyvsp = yylval;
Reid Spencered951ea2007-05-19 07:22:10 +00006096
6097
6098 /* Shift the error token. */
6099 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006100
Reid Spencer68a24bd2005-08-27 18:50:39 +00006101 yystate = yyn;
6102 goto yynewstate;
6103
Chris Lattner39b2e8b2007-05-04 04:01:37 +00006104
Reid Spencered951ea2007-05-19 07:22:10 +00006105/*-------------------------------------.
6106| yyacceptlab -- YYACCEPT comes here. |
6107`-------------------------------------*/
6108yyacceptlab:
6109 yyresult = 0;
6110 goto yyreturn;
6111
6112/*-----------------------------------.
6113| yyabortlab -- YYABORT comes here. |
6114`-----------------------------------*/
6115yyabortlab:
6116 yyresult = 1;
6117 goto yyreturn;
6118
6119#ifndef yyoverflow
6120/*-------------------------------------------------.
6121| yyexhaustedlab -- memory exhaustion comes here. |
6122`-------------------------------------------------*/
6123yyexhaustedlab:
6124 yyerror (YY_("memory exhausted"));
6125 yyresult = 2;
6126 /* Fall through. */
Anton Korobeynikov38e09802007-04-28 13:48:45 +00006127#endif
Reid Spencered951ea2007-05-19 07:22:10 +00006128
6129yyreturn:
6130 if (yychar != YYEOF && yychar != YYEMPTY)
6131 yydestruct ("Cleanup: discarding lookahead",
6132 yytoken, &yylval);
6133 while (yyssp != yyss)
6134 {
6135 yydestruct ("Cleanup: popping",
6136 yystos[*yyssp], yyvsp);
6137 YYPOPSTACK;
Chris Lattner39b2e8b2007-05-04 04:01:37 +00006138 }
Reid Spencered951ea2007-05-19 07:22:10 +00006139#ifndef yyoverflow
6140 if (yyss != yyssa)
6141 YYSTACK_FREE (yyss);
6142#endif
6143 return yyresult;
Reid Spencer68a24bd2005-08-27 18:50:39 +00006144}
Reid Spencered951ea2007-05-19 07:22:10 +00006145
6146
6147#line 3063 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
Reid Spencer61c83e02006-08-18 08:43:06 +00006148
6149
Reid Spencer14310612006-12-31 05:40:51 +00006150// common code from the two 'RunVMAsmParser' functions
6151static Module* RunParser(Module * M) {
6152
6153 llvmAsmlineno = 1; // Reset the current line number...
6154 CurModule.CurrentModule = M;
6155#if YYDEBUG
6156 yydebug = Debug;
6157#endif
6158
6159 // Check to make sure the parser succeeded
6160 if (yyparse()) {
6161 if (ParserResult)
6162 delete ParserResult;
6163 return 0;
6164 }
6165
Reid Spencer0d60b5a2007-03-30 01:37:39 +00006166 // Emit an error if there are any unresolved types left.
6167 if (!CurModule.LateResolveTypes.empty()) {
6168 const ValID &DID = CurModule.LateResolveTypes.begin()->first;
6169 if (DID.Type == ValID::LocalName) {
6170 GenerateError("Undefined type remains at eof: '"+DID.getName() + "'");
6171 } else {
6172 GenerateError("Undefined type remains at eof: #" + itostr(DID.Num));
6173 }
6174 if (ParserResult)
6175 delete ParserResult;
6176 return 0;
6177 }
6178
6179 // Emit an error if there are any unresolved values left.
6180 if (!CurModule.LateResolveValues.empty()) {
6181 Value *V = CurModule.LateResolveValues.back();
6182 std::map<Value*, std::pair<ValID, int> >::iterator I =
6183 CurModule.PlaceHolderInfo.find(V);
6184
6185 if (I != CurModule.PlaceHolderInfo.end()) {
6186 ValID &DID = I->second.first;
6187 if (DID.Type == ValID::LocalName) {
6188 GenerateError("Undefined value remains at eof: "+DID.getName() + "'");
6189 } else {
6190 GenerateError("Undefined value remains at eof: #" + itostr(DID.Num));
6191 }
6192 if (ParserResult)
6193 delete ParserResult;
6194 return 0;
6195 }
6196 }
6197
Reid Spencer14310612006-12-31 05:40:51 +00006198 // Check to make sure that parsing produced a result
6199 if (!ParserResult)
6200 return 0;
6201
6202 // Reset ParserResult variable while saving its value for the result.
6203 Module *Result = ParserResult;
6204 ParserResult = 0;
6205
6206 return Result;
6207}
6208
Reid Spencer61c83e02006-08-18 08:43:06 +00006209void llvm::GenerateError(const std::string &message, int LineNo) {
6210 if (LineNo == -1) LineNo = llvmAsmlineno;
6211 // TODO: column number in exception
6212 if (TheParseError)
6213 TheParseError->setError(CurFilename, message, LineNo);
6214 TriggerError = 1;
6215}
Reid Spencer68a24bd2005-08-27 18:50:39 +00006216
6217int yyerror(const char *ErrorMsg) {
6218 std::string where
6219 = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename)
6220 + ":" + utostr((unsigned) llvmAsmlineno) + ": ";
Reid Spenceref9b9a72007-02-05 20:47:22 +00006221 std::string errMsg = where + "error: " + std::string(ErrorMsg);
6222 if (yychar != YYEMPTY && yychar != 0)
6223 errMsg += " while reading token: '" + std::string(llvmAsmtext, llvmAsmleng)+
6224 "'";
Reid Spencer61c83e02006-08-18 08:43:06 +00006225 GenerateError(errMsg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00006226 return 0;
6227}
Reid Spencered951ea2007-05-19 07:22:10 +00006228